{"_id":"@syncagent/js","_rev":"28-836491855d3012c0615a00da239599bb","name":"@syncagent/js","dist-tags":{"latest":"0.6.0"},"versions":{"0.1.0":{"name":"@syncagent/js","version":"0.1.0","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.1.0","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"dist":{"shasum":"c2deb2815a2dce0b0d2f05431e99903abf70374d","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.1.0.tgz","fileCount":6,"integrity":"sha512-GuynYS5SZVX8qZJuypKqBs661JvWQ7B9TRIiPwobQPHcsBPTVch8nEqYcpVuSDDhSS5eiF6v5TgWNPQog/LLRQ==","signatures":[{"sig":"MEQCIGClcQKa1wJYVtnwdB0jL3/DpSFU8sQQnmldF0a59jKXAiBI6eiyJ88xFZkszWzKY6KNWRjPN1LhP8l5I/AakARhGQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17722},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"7ac5c5c8d2576eb773923f56ff04386edd0fc96d","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.1.0_1774950643449_0.03630684009755614","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@syncagent/js","version":"0.1.1","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.1.1","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"dist":{"shasum":"4eba096f6bb8e4acffbf95b2d8884d07a8f356bb","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.1.1.tgz","fileCount":6,"integrity":"sha512-VNUIP0P66ibr4IstpfDfXaPjgnxv4/49fSDB49NY6s39kIW50ucaMdF/w2Ci/Q28QZoWaiSnA7q6srkMpgTqbw==","signatures":[{"sig":"MEYCIQCi13A6hcU/UG6YPJ2k/39tqvf+jI8ICvLjMfSNSu/BuwIhAKNH08sYm9QCSG5DEcX2pmGTXDJRAfe7K+u2wmPFhw+n","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22488},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"7ac5c5c8d2576eb773923f56ff04386edd0fc96d","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.1.1_1774951217209_0.22570760326454353","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@syncagent/js","version":"0.1.2","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.1.2","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"dist":{"shasum":"5e09d3fc5e4e3537ec28177914402163762ac784","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.1.2.tgz","fileCount":6,"integrity":"sha512-bz8yHTzYal9RTgOwn+7MuMjKo65tTu9JI3rfrr8wJP7mCTS6BbsLKMexsbWNCVUWyGqev5gyIKuHP+mAkFW+3Q==","signatures":[{"sig":"MEQCIBvF0IAdKDH+I+w7ruAOEqYMsw7xKGuP5U9WWi2kMYv3AiAPU8hQe1J/l47NRegKGXn7jVu1BGK++8z/Z8DGBhWo8w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22900},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"7ac5c5c8d2576eb773923f56ff04386edd0fc96d","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.1.2_1774981543543_0.6985472615207673","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@syncagent/js","version":"0.1.3","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.1.3","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"dist":{"shasum":"7b78be44c653b0d90645d3727ce90d230e85a22e","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.1.3.tgz","fileCount":6,"integrity":"sha512-ukw3FIeAOtr16jMNF251l+4yebqAJBbUqQ/z3u+q/arpH1eFGHE+mTaEopSZECJtZxfnp1gBS/QkOUb5vLR88Q==","signatures":[{"sig":"MEQCICudOgmQ5v8xwlHKebh2a9kKhzNckKgJjkyHs1KCXQtsAiAXWvYd9PA/4TPOWq6k/s0IoSQlS5rGR7kmzgMdfPBW+g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23146},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"d31381c6df63982556dea869a4ebcf7e58b147e0","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.1.3_1774982400066_0.028926127563227544","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@syncagent/js","version":"0.1.4","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.1.4","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"dist":{"shasum":"53c4d9da509986dc2219197c57b9656c1cf8b727","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.1.4.tgz","fileCount":6,"integrity":"sha512-OQJc7G/XormoqBcAab69XIjeCXHpCN5B+Bi7wkvheOktlzV/7AZ2pxZW3jhRVPuZXB8S9gC4/ezqSbrvzCCciQ==","signatures":[{"sig":"MEYCIQC9gwCtjZJfHjgBU/nAWycytIiLg4f4dwoj41Dg27uT4wIhAKnqLIW79rZ3US/Q3vq/WRCfHPZDYa85fi1HHRO//nS+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23146},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"ebccadf8b58bc671bb34bb2160663c8b0a1d9631","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.1.4_1774984944777_0.6904922398503195","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@syncagent/js","version":"0.1.5","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.1.5","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"dist":{"shasum":"a604a455e2b6f7c88808d6ded47ceb331caa3fd5","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.1.5.tgz","fileCount":6,"integrity":"sha512-2Krwcu+L/FXYhPf2Xl+51UGO5IiA2ZTj1n+SY8G1Lx4EFdMcd+qcEk66lltft3bylUl+uwJX5o0cWDZ9DVeqQg==","signatures":[{"sig":"MEUCIFoZX9rszNEv9kIwxdAlN0xiMoyMDWgFJBqg0K4BZmgNAiEAvsCn8HCDPOa/BGjLhW5Wm/Z6JN3aiOXl1prnZPqocsc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23146},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"541e67c6fb3d6db9cd87306262204c8c0faead77","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.1.5_1774985474537_0.5490956124023096","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@syncagent/js","version":"0.1.6","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.1.6","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"dist":{"shasum":"c0b44ab362d702ad5a6bc430060f256c23b32f8e","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.1.6.tgz","fileCount":6,"integrity":"sha512-0n2OBzvLuBbBr+Yj82HHS5LlNopGI0hK0YngToBeoyVYj5Ww2EqxsjMhQzGZi9ae9Wd4NbgqAJ+XNt+b6ewsnQ==","signatures":[{"sig":"MEUCIEgZ/YSLmVKprW5WsRSdjBUgPKkFHGnzou5zraBcdK3cAiEAqYZiLU49LfXepKpsk8bm0lADPs5C73CLJNSFtmScgjk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23146},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"010d51597cb83ce48d1545ea9bc558d8a886af95","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.1.6_1774988847853_0.1522339691656216","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@syncagent/js","version":"0.1.7","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.1.7","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"dist":{"shasum":"55218351cbb87186944651b81fb652c99a4dd64a","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.1.7.tgz","fileCount":6,"integrity":"sha512-jjP+htVzsngueMrEkdiBuYFgE08CO1p7F1FbrCjTq9w1xQRNTinrtk8tySlRRBlmo+j2WNOF9F7DzAqimmn8OA==","signatures":[{"sig":"MEUCIAa3XJFM4+eAHS2jXNdTNAuwfCMuKON/fkVUOtFj7LKOAiEAiHUakZNj8V+T6UsIpot70IrQYmKCqbGUfgm4SA5dyVk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23990},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"010d51597cb83ce48d1545ea9bc558d8a886af95","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.1.7_1774997570494_0.6417137939486073","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@syncagent/js","version":"0.1.8","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.1.8","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"dist":{"shasum":"0e97f76930ccdb1db20f640e7c4776fbebe15ee9","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.1.8.tgz","fileCount":6,"integrity":"sha512-ZlbIxhBc5DLQslA51krcqZ4K2CP97HUhFlYqj6h+kojqJV+xxRax1G1DHRO0RAakOK3QXKbj20BP5XKS2oLxlA==","signatures":[{"sig":"MEQCIGHiUovLSGBf408xbDPtQHzJI/0g1Nq+LZCjpegxPCf4AiAQ15ZxdZUhRHji7EwjZ7qDmH0Qk1QKqx6b5+QxQenuvA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23990},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"48f927e635cb249717a0d4e3d03540daf44d3056","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.1.8_1774998973346_0.2705881166998625","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@syncagent/js","version":"0.1.9","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.1.9","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"dist":{"shasum":"58cd0e9858abdcfd49ff05ad306c68ae87def920","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.1.9.tgz","fileCount":6,"integrity":"sha512-RDg7rEoyQg1ES17OdjSvvjSy9HjXqxvSWoF7HJ6bU6aBfUFS58lWxMtGtwqCJ/xH0jPAcvIhueWbdqhQqFOG6Q==","signatures":[{"sig":"MEYCIQCNlwJp4yuCC1D7wBcoc550ZQpah09qC0bVHH4FfYk1dQIhAJ+6bX6E4Q+1lTud2508dw9Dh9lyWv9jHUmUN8GrhN1L","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25752},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"48f927e635cb249717a0d4e3d03540daf44d3056","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.1.9_1774999714786_0.15251791972251016","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@syncagent/js","version":"0.2.0","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.2.0","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"dist":{"shasum":"aae6489817d95d63b86551078b3840f18e60881d","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.2.0.tgz","fileCount":6,"integrity":"sha512-ONR31uM2BQeWR1YPS37Z/6kEdlUJtCcjERQROOL10+ACxLCVP5tVN2UH+fvzgZZymCWGdEjmdL9nVmqQhh6tGw==","signatures":[{"sig":"MEUCIHOoWF2qogHJtU0LMO8LjprOc0CeSVm4vmqWE3gt1EffAiEAjSzhHcgicjVtn9TGh/xziF0GNdfxLXbM9lqvT7YLPUE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26192},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"c7db2bc1105c0cde77505718e512c5bf1e8039ed","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.2.0_1775000346614_0.15839378547054972","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@syncagent/js","version":"0.2.1","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.2.1","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"dist":{"shasum":"3e42f8f0070ade3eabbef6e68c70c4fd3b17d1e5","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.2.1.tgz","fileCount":6,"integrity":"sha512-s88MYiiaaB7pZIjwfrZaHWeZum/kFc6rxU7J+6FI3wXuZ5gRa9uwJ0njq6Q7qUkF9YEIP1YTdUP3AuMWBwONlg==","signatures":[{"sig":"MEYCIQCP/36XNrkDkNcGbyCohBFSXqkh6WzHrH61XVu1XoG8dAIhAI5QPVBcPxXvPyBd464whmdfxNjbaWqQkjhGlOkZmKyy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25015},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"c7db2bc1105c0cde77505718e512c5bf1e8039ed","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.2.1_1775006071772_0.13713426073491375","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@syncagent/js","version":"0.2.2","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.2.2","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"dist":{"shasum":"634af394422a3462ffa708081e2a126338e0717d","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.2.2.tgz","fileCount":6,"integrity":"sha512-cf8mwH6Jkz7MyovJ1hdWBBwWm/ahGK8A2C2/g1BQ3HzcrCK93ufA8bIQWdeFmxCYSG7M2y5ySuaThFw5F0pF6Q==","signatures":[{"sig":"MEUCIQDjaqVCfI0Zlg9I8xIhHS4hVa5en0ZjfqP55QzBbVsVNAIgdUX7DnzlcbwN7lUCPXjvtb9XrbcPsK3odWOP/7dntO0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26247},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"c1b87cbd6aa5d755c2f1f9155416382b27e5eca9","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.2.2_1775075283044_0.14822200476706726","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@syncagent/js","version":"0.2.3","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.2.3","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"dist":{"shasum":"9321088d4dc77fcf949ae4b4a6810ca44785f698","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.2.3.tgz","fileCount":6,"integrity":"sha512-VENg48dD7M7raPJwKmazsTVZ902n0cAb76GuPC70AkliD/LFjN+Tu967kk4wIZ3Q0XfFgNUtW9QVikUSKyY06Q==","signatures":[{"sig":"MEQCIAeici0kFlHyc811HKaUgMnHCAzJpDM+2WgiNbPQkS+0AiBRvXpM0+gtig4tvdgw5mowjSqG8g4XRxtkbqLnmfSJ8w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27886},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"c1b87cbd6aa5d755c2f1f9155416382b27e5eca9","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.2.3_1775075596622_0.5136711340690212","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@syncagent/js","version":"0.2.4","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.2.4","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"dist":{"shasum":"b25eedee5e033a1d8c210cc84a769c4d50e1c44b","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.2.4.tgz","fileCount":6,"integrity":"sha512-OrkUQ14FfDK9dpIjNkjYSKA3ZtcdNMFsBDxr6SeZRYePqmX/bJdnW1yPjtEccRrg7zgF8R1iy1jdrUqN/pVZ6A==","signatures":[{"sig":"MEUCIQC1iTjSCVhZBdLDSvq4JyVCqt9CPiltR46fvFxoUlq67QIgENSigktTBldcoNEj/fbdXXPfxuP92ToCLkVaIxiyIXE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30032},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"c1b87cbd6aa5d755c2f1f9155416382b27e5eca9","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.2.4_1775076009146_0.4626340003719591","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@syncagent/js","version":"0.2.6","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.2.6","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"dist":{"shasum":"1c9f35802cecd4c144fc72e3e86b5c1997e0d653","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.2.6.tgz","fileCount":6,"integrity":"sha512-M8i9kSx/cZp9/mwQUUlP2HR4e/JYM80bNnUHoktQ9o9Jy+tpFN2Vx1g9ErZqLTfrnuWPZ2ZnpF1YBzW8go7PQQ==","signatures":[{"sig":"MEUCID+G19fGWVbbySP/FXfxU2BvosEvCwhSrOYvLemXuVknAiEA/BlbGw+ZAtFUA+g3oFHs1n/MDTGSi/jLk1AE48gzeC8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30032},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"c1b87cbd6aa5d755c2f1f9155416382b27e5eca9","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.2.6_1775109734410_0.7373762258147472","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@syncagent/js","version":"0.2.7","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.2.7","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"dist":{"shasum":"761510f0d6c7f520dcda794272184bcd478c76c8","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.2.7.tgz","fileCount":6,"integrity":"sha512-rlF5teTG++FyNdrwjCKqAUghIdBNQ5ZJhlaUlZhrTatG8SkyEUWl64nrN6Ef9pNpZ/z70YsVa+cyEbyZVpwwwQ==","signatures":[{"sig":"MEYCIQC0Obk5MQ7cLas8dCo1CvytVn89HcTxg6wnsOKeLFJuoQIhAOiQj1t6BRyuKLzTK2FMuw4DxgyyRnYR0MgV0yt1di2l","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30138},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"5de3857e1117c289bd822614b856d3619c0721d2","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.2.7_1775110598832_0.9831394688270474","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"@syncagent/js","version":"0.2.8","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.2.8","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"dist":{"shasum":"ab585bd2a9b36759d670c2d158e0adb474ad26a2","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.2.8.tgz","fileCount":6,"integrity":"sha512-VSPGZVUUer/GP1fxpzYxu/7dy+RtnJ9wsGEh3fs94DSwgcl/gUM5UFouLEZKCdAiY10c7hEf2li5hU+Phy0WaA==","signatures":[{"sig":"MEUCIQCKsQ0YmAmnTDt+mxRG4Y0SugK7u9lNb4JcGr7rP3sQBwIgLjYMKWnJsUHSJ6itHnZdxIIYOYJvu4udDU6lXVzMuOo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31706},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"4e9cb075358ade71a68c58a5f197fb7ad0948089","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.2.8_1775140824096_0.9732253362107619","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"@syncagent/js","version":"0.2.9","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.2.9","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"dist":{"shasum":"8d85176f109a070ae9ef1c839b245552b4f737be","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.2.9.tgz","fileCount":6,"integrity":"sha512-3uzmhPIzG31dFR+f0UhXw5rFoKPXdybrqpDWmcjuc8cifO0pcqyV5G2a5josjry8bcHKhFHiwgioOWbZSRkn7A==","signatures":[{"sig":"MEQCIHt7l89qu9JEQJaBz+JMiioVqfUL4LfgYTiFn1J/ScVkAiBnWR5oNCwdS3lEStM+XfHGwOBwf3XOYxCFax32eoC7bA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31706},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"72cd389a7aa1887c7f85d59081424886eeddd4df","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.2.9_1775162483035_0.9364979766616865","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@syncagent/js","version":"0.3.0","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.3.0","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"dist":{"shasum":"81739da6a8cb00250403ebfe051fedc5d6656652","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.3.0.tgz","fileCount":6,"integrity":"sha512-T7NJqo2mLq6lCmt9MhR0Q8HfWqMb3JqiQl7mTj8YY+s23EgcXRUyjUlDkHpOMrFwiEfabYlujSnqlxCCXfWlqQ==","signatures":[{"sig":"MEYCIQCbYwjloqx5cMWF0QkV1tpN5PUPVyQkNPRuwD8spW3EmQIhAMcvboHDyFtbZ8xN9ApevkK7BcSc66OzgMzy83Kv3gyz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31913},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"72cd389a7aa1887c7f85d59081424886eeddd4df","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","typesVersions":{"*":{"*":["./dist/index.d.ts"],".":["./dist/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.3.0_1775162910895_0.14424897443081486","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@syncagent/js","version":"0.3.1","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.3.1","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"dist":{"shasum":"185d4be9b33a453b3a262a98671b1fb3e222fc97","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.3.1.tgz","fileCount":6,"integrity":"sha512-xGjpIx0xLyUqp3ciS9sw47a5rrLXnkCtUUlqqRZueKeAC7HTjz1xCfF2GEQNioulGiEZU6ijo7axPuefnDLNaQ==","signatures":[{"sig":"MEUCIDd4WUglGHbkT2pj508KYXTCMV0dwEGlh5Xgmrfl74N5AiEA9iIkhKMj1yLFP83jyQ6bPG4mtlSyTTq3CPx5LfxeCnE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34986},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"bac04bf05d4eb12ee5b57652b0e34b88c28a79fa","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","typesVersions":{"*":{"*":["./dist/index.d.ts"],".":["./dist/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.3.1_1775374256333_0.8541679801741191","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@syncagent/js","version":"0.3.2","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.3.2","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"dist":{"shasum":"c2d79bdfd4e193e168de8da83329176d4ebe91a2","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.3.2.tgz","fileCount":6,"integrity":"sha512-K7AXc3tyE8/wB8p9HHWrEuPWvt+qy7SZJ2bFsCbEwE4f59raythW+kcZTiHYhK1E+GtCIVstTMJLIotsDa3JHg==","signatures":[{"sig":"MEQCIFgK3il/CsDA3vS1i1bSRCOiV9K6nwXieQ0Sm1mp+YdcAiBuhB1x2YbhEJBSNqhTlOpy0+ZZ46MzhZLZubZVIwsY2Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39994},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"fdf7082d66ea5aa9713ea421823d72416180d66a","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","typesVersions":{"*":{"*":["./dist/index.d.ts"],".":["./dist/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.3.2_1775631003323_0.7499765097556805","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@syncagent/js","version":"0.3.3","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.3.3","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"dist":{"shasum":"fcc8acbd5bf683f110797b5b1e2513651dad1ad0","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.3.3.tgz","fileCount":6,"integrity":"sha512-wrfTb48YqI98nk5Zue7+0rYudq80EQUU9L+cubrqR2RriwqKjQ215UJcVOVq/xpl9IlKMPcgbayoSFDCdw/uNA==","signatures":[{"sig":"MEQCIG2kQCMZUqNA7eGVU8qZbaCkiC0Lm7GqwHoOCtU/lJveAiArhonviQWipy8wlFLabubGbS3c6IS9B2dmX87iWKSXFQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54503},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"fdf7082d66ea5aa9713ea421823d72416180d66a","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","typesVersions":{"*":{"*":["./dist/index.d.ts"],".":["./dist/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.3.3_1775632722923_0.6612316415199591","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@syncagent/js","version":"0.3.4","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.3.4","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"homepage":"https://syncagentdev.vercel.app/docs","bugs":{"url":"https://github.com/syncagent/syncagent/issues"},"dist":{"shasum":"ceae08ddbfb34bacbf8c19e04e11a85f7695b353","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.3.4.tgz","fileCount":6,"integrity":"sha512-KyaNuvNzeVgtyTlDtEO36AB+iedeu7jo5HdHVQiyj0mn71BM1fV2gM6v9XO1ZyjTGTcvKqo5SukrzmZNEtz6Xg==","signatures":[{"sig":"MEQCIDIt6en6LFbmpUszL8SVtXP2HegLsAb5WFBsimZJ9b2OAiAvTpPnGUCiu4b9v/TcXHTEVdr6LAj6TJKIk+99YieRpQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51394},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"cd3ec912e345cb47b6fb11c36e95fb785201a4d7","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"repository":{"url":"git+https://github.com/syncagent/syncagent.git","type":"git","directory":"packages/js"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","typesVersions":{"*":{"*":["./dist/index.d.ts"],".":["./dist/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.3.4_1778799500920_0.6761678783023444","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@syncagent/js","version":"0.4.0","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.4.0","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"homepage":"https://syncagentdev.vercel.app/docs","bugs":{"url":"https://github.com/syncagent/syncagent/issues"},"dist":{"shasum":"9ebe3a44e27b76e70be77961aa1183c186c38ce2","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.4.0.tgz","fileCount":6,"integrity":"sha512-HWolIIEgQuOWpc4bqhxIHTnbW4G0QdQ9Ql6CJDYs6NH0vX1EmagaZzI9OktecvpiZwAFSoRKbVrYMVUr0s+fpw==","signatures":[{"sig":"MEUCIQDfPm7OxDW2JI0YBdWRwCvXZgvxfMiA9LdFFrR0e4nu6gIgG65s9N0y8DVGWUyTWSi/f7T3I+Jtvia/WxzdE5y7h8M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":105413},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"88e46e65442c24f60a775ac46b709aec0a771c59","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"repository":{"url":"git+https://github.com/syncagent/syncagent.git","type":"git","directory":"packages/js"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","typesVersions":{"*":{"*":["./dist/index.d.ts"],".":["./dist/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.4.0_1779352768929_0.3988520730367333","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@syncagent/js","version":"0.5.0","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.5.0","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"homepage":"https://syncagentdev.vercel.app/docs","bugs":{"url":"https://github.com/syncagent/syncagent/issues"},"dist":{"shasum":"1b72bb13056b1eb2a10991b8ebe59ff595235efc","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.5.0.tgz","fileCount":6,"integrity":"sha512-ASeizBH2xgHyqnhuJJXtO9fiyrY+1jmE9jZBMNN++bS+a3dDSh8e6sTnBAmrFClERfgaW2/DCM4kxkDPGXBX/w==","signatures":[{"sig":"MEUCIBqWG/Q8h+ZK60iTStliXK885T8HcuD7wl5Kpr7LXR9WAiEA9OrpWwaQg1TXqQ7l9zNEGuCoGXQQnqBkb9398gJqPMM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130540},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"cc9223ff25f6dfbea28aaa5aede50020b1ad90b9","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"repository":{"url":"git+https://github.com/syncagent/syncagent.git","type":"git","directory":"packages/js"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","typesVersions":{"*":{"*":["./dist/index.d.ts"],".":["./dist/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.5.0_1779435587385_0.5790777920960593","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@syncagent/js","version":"0.5.1","keywords":["syncagent","ai","database","agent","sdk","chat"],"license":"MIT","_id":"@syncagent/js@0.5.1","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"homepage":"https://syncagentdev.vercel.app/docs","bugs":{"url":"https://github.com/syncagent/syncagent/issues"},"dist":{"shasum":"81ea50583c78b21f4f84043bf95fc153b7af884e","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.5.1.tgz","fileCount":6,"integrity":"sha512-eSS9QALOnXd1Eu5PyEkGgtRAjHlysL6vO3OxNS23rRaMR555Ez/hf8utsXkonUCPGzoQfvFaYTwRZK6oxjEMbA==","signatures":[{"sig":"MEQCIDihzwq0RbzH6+hBkFv/x4yDa7ZKmyRcEJQGtVm1ygZpAiByytjpOZFnZIkJ/y4wvDW4xokIJ4zuppJlLJl8LvKAXA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130736},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"4e3ba48cd122f4a0e7841b19c5b424b5029c7971","scripts":{"dev":"tsup --watch","build":"tsup"},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"repository":{"url":"git+https://github.com/syncagent/syncagent.git","type":"git","directory":"packages/js"},"_npmVersion":"11.6.2","description":"SyncAgent JavaScript SDK — AI database agent for any app","directories":{},"_nodeVersion":"24.12.0","typesVersions":{"*":{"*":["./dist/index.d.ts"],".":["./dist/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/js_0.5.1_1779438259197_0.5250697199339378","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@syncagent/js","version":"0.6.0","description":"SyncAgent JavaScript SDK — AI database agent for any app","homepage":"https://syncagentdev.vercel.app/docs","repository":{"type":"git","url":"git+https://github.com/syncagent/syncagent.git","directory":"packages/js"},"main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"typesVersions":{"*":{".":["./dist/index.d.ts"],"*":["./dist/index.d.ts"]}},"scripts":{"build":"tsup","dev":"tsup --watch"},"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3"},"license":"MIT","keywords":["syncagent","ai","database","agent","sdk","chat"],"gitHead":"8155a3cfbf380a75dc880a12a25613cc3f634f67","_id":"@syncagent/js@0.6.0","bugs":{"url":"https://github.com/syncagent/syncagent/issues"},"_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-Seg/LPlMTtNfDVuFWsVZF+OXrOYV/r8559k8gZtELp1Q28kIrw1rdFTIPPTxwC7WISI8SYeA0uL0GAz9G8qAvQ==","shasum":"f0943174148b074599e048578c0b5ce936c4c28f","tarball":"https://registry.npmjs.org/@syncagent/js/-/js-0.6.0.tgz","fileCount":6,"unpackedSize":137524,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCLHk/Chha1hU+zihzCNy/zLlf7JdRfukTDvUTNAf99uAIgCenWxp8fIvvSfZmfhsQmjgI57UgQOlZYUjDYyQ01BF8="}]},"_npmUser":{"name":"godwinadu","email":"gyamfiadu01@gmail.com"},"directories":{},"maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/js_0.6.0_1780037688573_0.540296666410133"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-31T09:50:43.350Z","modified":"2026-05-29T06:54:48.883Z","0.1.0":"2026-03-31T09:50:43.593Z","0.1.1":"2026-03-31T10:00:17.346Z","0.1.2":"2026-03-31T18:25:43.655Z","0.1.3":"2026-03-31T18:40:00.203Z","0.1.4":"2026-03-31T19:22:24.911Z","0.1.5":"2026-03-31T19:31:14.702Z","0.1.6":"2026-03-31T20:27:27.985Z","0.1.7":"2026-03-31T22:52:50.655Z","0.1.8":"2026-03-31T23:16:13.547Z","0.1.9":"2026-03-31T23:28:35.015Z","0.2.0":"2026-03-31T23:39:06.765Z","0.2.1":"2026-04-01T01:14:31.948Z","0.2.2":"2026-04-01T20:28:03.196Z","0.2.3":"2026-04-01T20:33:16.790Z","0.2.4":"2026-04-01T20:40:09.319Z","0.2.6":"2026-04-02T06:02:14.538Z","0.2.7":"2026-04-02T06:16:38.983Z","0.2.8":"2026-04-02T14:40:24.231Z","0.2.9":"2026-04-02T20:41:23.237Z","0.3.0":"2026-04-02T20:48:31.036Z","0.3.1":"2026-04-05T07:30:56.468Z","0.3.2":"2026-04-08T06:50:03.469Z","0.3.3":"2026-04-08T07:18:43.076Z","0.3.4":"2026-05-14T22:58:21.058Z","0.4.0":"2026-05-21T08:39:29.086Z","0.5.0":"2026-05-22T07:39:47.531Z","0.5.1":"2026-05-22T08:24:19.356Z","0.6.0":"2026-05-29T06:54:48.725Z"},"bugs":{"url":"https://github.com/syncagent/syncagent/issues"},"license":"MIT","homepage":"https://syncagentdev.vercel.app/docs","keywords":["syncagent","ai","database","agent","sdk","chat"],"repository":{"type":"git","url":"git+https://github.com/syncagent/syncagent.git","directory":"packages/js"},"description":"SyncAgent JavaScript SDK — AI database agent for any app","maintainers":[{"name":"godwinadu","email":"gyamfiadu01@gmail.com"}],"readme":"# @syncagent/js\n\nCore JavaScript/TypeScript SDK for [SyncAgent](https://syncagentdev.vercel.app) — add an AI database agent to any app.\n\nWorks with **MongoDB**, **PostgreSQL**, **MySQL**, **SQLite**, **SQL Server**, and **Supabase**.\n\n[![npm version](https://img.shields.io/npm/v/@syncagent/js)](https://www.npmjs.com/package/@syncagent/js)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)\n\n## Get Your API Key\n\n1. [Sign up](https://syncagentdev.vercel.app/auth/register) for a free account\n2. Go to your [Dashboard](https://syncagentdev.vercel.app/dashboard) → **New Project** → choose your database type\n3. Copy your API key (starts with `sa_`)\n\n> Every new project gets a **14-day trial** with 500 free requests — no credit card required. After the trial, you get 100 free requests/month on the Free plan.\n\n## Install\n\n```bash\nnpm install @syncagent/js\n```\n\n## Quick Start\n\n```typescript\nimport { SyncAgentClient } from \"@syncagent/js\";\n\nconst agent = new SyncAgentClient({\n  apiKey: \"sa_your_api_key\",\n  connectionString: process.env.DATABASE_URL,\n});\n\n// Non-streaming\nconst result = await agent.chat([\n  { role: \"user\", content: \"How many users signed up this month?\" }\n]);\nconsole.log(result.text);\n\n// Streaming\nawait agent.chat(\n  [{ role: \"user\", content: \"Show me the top 10 customers by revenue\" }],\n  {\n    onToken: (token) => process.stdout.write(token),\n    onComplete: (text) => console.log(\"\\nDone\"),\n    onError: (err) => console.error(err),\n  }\n);\n```\n\n## Supported Databases\n\n| Database | Connection String Format |\n|----------|------------------------|\n| MongoDB | `mongodb+srv://user:pass@cluster.mongodb.net/mydb` |\n| PostgreSQL | `postgresql://user:pass@host:5432/mydb` |\n| MySQL | `mysql://user:pass@host:3306/mydb` |\n| SQLite | `/absolute/path/to/database.sqlite` |\n| SQL Server | `Server=host,1433;Database=mydb;User Id=user;Password=pass;Encrypt=true;` |\n| Supabase | `https://xxx.supabase.co\\|your-anon-key` |\n\n## Configuration\n\n```typescript\nnew SyncAgentClient(config: SyncAgentConfig)\n```\n\n| Option | Type | Required | Description |\n|--------|------|----------|-------------|\n| `apiKey` | `string` | ✅ | Your SyncAgent API key (`sa_...`) |\n| `connectionString` | `string` | ✅* | Your database URL — sent at runtime, never stored. *Optional when `toolsOnly: true`. |\n| `tools` | `Record<string, ToolDefinition>` | — | Custom tools the agent can call client-side |\n| `baseUrl` | `string` | — | Override API URL (dev only) |\n| `filter` | `Record<string, any>` | — | Mandatory query filter for multi-tenancy |\n| `operations` | `(\"read\"\\|\"create\"\\|\"update\"\\|\"delete\")[]` | — | Restrict operations for this session |\n| `toolsOnly` | `boolean` | — | Disables all DB tools — agent only uses your custom `tools` |\n| `autoDetectPage` | `boolean` | `true` | Auto-detect current page from `window.location` |\n| `systemInstruction` | `string` | — | Custom agent instructions — personality, tone, rules |\n| `confirmWrites` | `boolean` | `false` | Ask for confirmation before create/update/delete |\n| `language` | `string` | — | Language the agent responds in (e.g. `\"French\"`) |\n| `maxResults` | `number` | `50` | Default max records per query |\n| `sensitiveFields` | `string[]` | `[\"password\",\"token\",\"secret\"]` | Fields masked in responses |\n| `onBeforeToolCall` | `(name, args) => boolean` | — | Called before each client tool. Return `false` to block. |\n| `onAfterToolCall` | `(name, args, result) => void` | — | Called after each client tool executes |\n\n## `client.chat(messages, options?)`\n\n```typescript\nconst result = await agent.chat(messages, options);\n```\n\n**`messages`** — `Message[]`\n\n```typescript\n{ role: \"user\" | \"assistant\"; content: string }\n```\n\n**`options`** — `ChatOptions`\n\n| Option | Type | Description |\n|--------|------|-------------|\n| `onToken` | `(token: string) => void` | Called for each streamed text chunk |\n| `onComplete` | `(text: string) => void` | Called with the full response text |\n| `onError` | `(error: Error) => void` | Called on error |\n| `onStatus` | `(step: string, label: string) => void` | Live status updates |\n| `onData` | `(data: ToolData) => void` | Called when a DB tool returns structured data |\n| `onToolCall` | `(name: string, args: any, result: any) => void` | Called when a custom tool executes |\n| `signal` | `AbortSignal` | Cancel the request |\n| `context` | `Record<string, any>` | Extra context injected into every message |\n\n**Returns** `Promise<ChatResult>` → `{ text: string }`\n\n### Status steps\n\n`onStatus` fires with these `step` values:\n- `\"connecting\"` — connecting to the database\n- `\"schema\"` — discovering schema\n- `\"thinking\"` — AI is reasoning\n- `\"querying\"` — executing a DB tool\n- `\"done\"` — complete\n\n## `client.getSchema()`\n\n```typescript\nconst schema = await agent.getSchema();\n// CollectionSchema[]\n```\n\n## Multi-turn Conversations\n\n```typescript\nconst history: Message[] = [];\n\nhistory.push({ role: \"user\", content: \"Show top 5 customers\" });\nconst r1 = await agent.chat(history);\nhistory.push({ role: \"assistant\", content: r1.text });\n\nhistory.push({ role: \"user\", content: \"Now show their total orders\" });\nconst r2 = await agent.chat(history);\n```\n\n## Context & Auto Page Detection\n\nThe SDK automatically detects the current page from `window.location` on every message — zero config needed.\n\n```\nURL: /dashboard/orders/ord_123?tab=details\n\nAuto-detected context:\n  currentPage: \"orders\"\n  currentPath: \"/dashboard/orders/ord_123\"\n  currentRecordId: \"ord_123\"\n  param_tab: \"details\"\n```\n\nPass additional context:\n\n```typescript\nawait agent.chat(messages, {\n  context: { userId: \"user_123\", userRole: \"admin\", orgName: \"Acme Corp\" }\n});\n```\n\n## `onData` — React to Query Results\n\n```typescript\nawait agent.chat(messages, {\n  onData: (data) => {\n    console.log(data.collection); // \"orders\"\n    console.log(data.data);       // array of result rows\n    console.log(data.count);      // number of results\n  }\n});\n```\n\n## Custom Tools\n\nGive the agent capabilities beyond your database. Tools run entirely in your app — SyncAgent only sees the schema and result.\n\n```typescript\nconst agent = new SyncAgentClient({\n  apiKey: \"sa_your_key\",\n  connectionString: process.env.DATABASE_URL,\n  tools: {\n    sendEmail: {\n      description: \"Send an email to a user\",\n      inputSchema: {\n        to:      { type: \"string\", description: \"Recipient email\" },\n        subject: { type: \"string\", description: \"Subject line\" },\n        body:    { type: \"string\", description: \"Email body\" },\n      },\n      execute: async ({ to, subject, body }) => {\n        await mailer.send({ to, subject, text: body });\n        return { sent: true };\n      },\n    },\n  },\n});\n```\n\n## Multi-tenant SaaS\n\nPass `filter` to scope every agent operation to the current user's organization. Enforced server-side.\n\n```typescript\nconst agent = new SyncAgentClient({\n  apiKey: \"sa_your_key\",\n  connectionString: process.env.DATABASE_URL,\n  filter: { organizationId: currentUser.orgId },\n  operations: currentUser.isAdmin\n    ? [\"read\", \"create\", \"update\", \"delete\"]\n    : [\"read\"],\n});\n```\n\n## Tools-only Mode\n\nBuild an AI assistant powered by your own APIs — no database access needed.\n\n```typescript\nconst agent = new SyncAgentClient({\n  apiKey: \"sa_your_key\",\n  toolsOnly: true,\n  tools: {\n    searchProducts: {\n      description: \"Search products by name or category\",\n      inputSchema: { query: { type: \"string\", description: \"Search query\" } },\n      execute: async ({ query }) => {\n        const res = await fetch(`/api/products?q=${query}`);\n        return res.json();\n      },\n    },\n  },\n});\n```\n\n## Customer Chat\n\nRoute messages through the customer support pipeline — with persona, knowledge base, conversation flows, escalation, and AI fallback — instead of the direct database agent.\n\nThe customer chat API surface includes:\n- **`client.customerChat()`** — send messages through the support pipeline\n- **`client.rateConversation()`** — submit satisfaction ratings\n- **Guest identification** — `getGuestIdentity()`, `setGuestIdentity()`, `validateGuestForm()`, `generateGuestIdentifier()`\n- **Theme engine** — `computeTheme()` for WCAG-compliant color generation\n- **Types** — `CustomerChatResult`, `CustomerChatOptions`, `GuestIdentity`, `GuestFormConfig`, `FieldValidationResult`\n\n### Initialization\n\n```typescript\nimport { SyncAgentClient } from \"@syncagent/js\";\n\nconst client = new SyncAgentClient({\n  apiKey: \"sa_your_api_key\",\n  externalUserId: \"customer_123\",\n});\n```\n\n> **Note:** `customerMode` is automatically enabled when `externalUserId` is provided. You do not need to set `customerMode: true` explicitly.\n\n### Full Lifecycle Example\n\n```typescript\nimport { SyncAgentClient } from \"@syncagent/js\";\n\n// 1. Initialize client in customer mode\nconst client = new SyncAgentClient({\n  apiKey: \"sa_your_api_key\",\n  externalUserId: \"customer_123\",\n});\n\n// 2. Send a message\nconst result = await client.customerChat(\"How do I reset my password?\");\nconsole.log(result.response);\n// \"To reset your password, go to Settings > Security > Reset Password...\"\n\n// 3. Continue the conversation\nconst followUp = await client.customerChat(\"That didn't work\", {\n  conversationId: result.conversationId,\n  onEscalated: () => {\n    console.log(\"Conversation escalated to a human agent\");\n    // Connect to Pusher for real-time agent messages\n  },\n  onResolved: (conversationId) => {\n    console.log(`Conversation ${conversationId} resolved`);\n  },\n});\n\n// 4. Rate the conversation after resolution\nif (followUp.resolved) {\n  await client.rateConversation(followUp.conversationId, 5);\n}\n```\n\n### Guest Mode (No External User ID)\n\nFor anonymous visitors, initialize with `customerMode: true` and no `externalUserId`. The SDK will require guest identification before chatting:\n\n```typescript\nimport { SyncAgentClient, generateGuestIdentifier, validateGuestForm } from \"@syncagent/js\";\n\nconst client = new SyncAgentClient({\n  apiKey: \"sa_your_api_key\",\n  customerMode: true,\n  guestForm: {\n    title: \"Welcome!\",\n    subtitle: \"Tell us who you are to get started\",\n    submitButtonText: \"Start Chat\",\n  },\n});\n\n// Validate form data before submitting\nconst validation = validateGuestForm({\n  name: \"Jane Doe\",\n  email: \"jane@example.com\",\n});\n\nif (validation.valid) {\n  // Set guest identity — persists to localStorage\n  client.setGuestIdentity({\n    name: \"Jane Doe\",\n    email: \"jane@example.com\",\n    phone: null,\n    guestId: generateGuestIdentifier(\"jane@example.com\"),\n  });\n\n  // Now customerChat() will work\n  const result = await client.customerChat(\"I need help with my order\");\n  console.log(result.response);\n}\n```\n\n### Configuration\n\n| Option | Type | Required | Description |\n|--------|------|----------|-------------|\n| `customerMode` | `boolean` | — | Enable customer agent mode. Routes messages through the customer support pipeline. |\n| `externalUserId` | `string` | — | Customer identifier for multi-tenant scoping. When provided, `customerMode` is automatically enabled and both `chat()` and `customerChat()` become available on the same instance. |\n\n### `client.customerChat(message, options?)`\n\nSend a message through the customer support pipeline.\n\n**Error:** Throws `\"SyncAgent: customerChat() requires externalUserId in config (or customerMode: true)\"` if called without `externalUserId` in the client config.\n\n```typescript\nconst result = await client.customerChat(\"How do I reset my password?\", {\n  conversationId: \"conv_abc123\",\n  metadata: { page: \"/settings\" },\n  onEscalated: () => console.log(\"Escalated to human agent\"),\n  onResolved: (id) => console.log(`Conversation ${id} resolved`),\n});\n```\n\n**Parameters**\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `message` | `string` | ✅ | The customer's message |\n| `options` | `CustomerChatOptions` | — | Optional configuration (see below) |\n\n**Returns** `Promise<CustomerChatResult>`\n\n#### `CustomerChatOptions`\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `conversationId` | `string` | Existing conversation ID to continue |\n| `metadata` | `Record<string, any>` | Additional metadata to store on the conversation |\n| `onEscalated` | `() => void` | Called when the conversation is escalated to a human agent |\n| `onResolved` | `(conversationId: string) => void` | Called when the conversation is resolved |\n| `onGuestIdentified` | `(identity: GuestIdentity) => void` | Called when a guest completes identification (JS-only usage) |\n\n#### `CustomerChatResult`\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `conversationId` | `string` | The conversation ID (new or existing) |\n| `response` | `string` | The agent's reply text |\n| `escalated` | `boolean` | Whether the conversation was escalated to a human agent |\n| `autoReply` | `boolean` | Whether this was an automatic reply (e.g. welcome message) |\n| `flowActive` | `boolean` | Whether a conversation flow is currently active |\n| `resolved` | `boolean` | Whether the conversation has been resolved |\n| `welcomeMessage` | `string \\| undefined` | Welcome message if this is a new conversation |\n| `sources` | `any[] \\| undefined` | Knowledge base sources used to generate the response |\n| `flowSession` | `{ flowId: string; currentNodeId: string } \\| undefined` | Active flow session state |\n\n### `client.rateConversation(conversationId, rating)`\n\nSubmit a satisfaction rating for a completed conversation.\n\n**Error:** Throws `\"SyncAgent: rateConversation() requires externalUserId in config\"` if called without `externalUserId` in the client config.\n\n```typescript\nawait client.rateConversation(\"conv_abc123\", 5);\n```\n\n**Parameters**\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `conversationId` | `string` | ✅ | The conversation ID to rate |\n| `rating` | `number` | ✅ | Integer between 1 and 5 |\n\n**Validation rules:**\n- `conversationId` must be a non-empty string\n- `rating` must be an integer between 1 and 5 (inclusive)\n- Throws an error if validation fails\n\n**Returns** `Promise<void>`\n\n### Conversation Flows\n\nWhen a customer's message matches a configured flow's trigger phrases, the agent enters a **conversation flow** — a scripted branching path that guides the customer through a series of decision points, responses, and terminal actions (resolve or escalate).\n\nYou can detect an active flow by checking the `flowActive` and `flowSession` fields in the `CustomerChatResult` response:\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `flowActive` | `boolean` | `true` when the conversation is currently inside a flow |\n| `flowSession` | `{ flowId: string; currentNodeId: string } \\| undefined` | Identifies which flow and node the conversation is on |\n\n#### Detecting and Handling Active Flows\n\n```typescript\nconst result = await client.customerChat(\"I want to check my order status\");\n\nif (result.flowActive && result.flowSession) {\n  console.log(`Flow active: ${result.flowSession.flowId}`);\n  console.log(`Current node: ${result.flowSession.currentNodeId}`);\n\n  // The response contains the current node's content (e.g. decision options)\n  console.log(result.response);\n  // Example: \"How would you like to check your order?\\n1. By order number\\n2. By email address\"\n\n  // Present the options to the user in your UI, then send their choice\n  // as the next message to continue the flow:\n  const followUp = await client.customerChat(\"By order number\", {\n    conversationId: result.conversationId,\n  });\n\n  // Check if the flow is still active or has reached a terminal node\n  if (!followUp.flowActive) {\n    console.log(\"Flow completed\");\n  }\n}\n```\n\nWhen `flowActive` is `false`, the conversation is handled by the standard AI agent (persona, knowledge base, or escalation). Flows take priority over the AI agent when a trigger phrase matches.\n\n### `SyncAgentClient.createDual(config)`\n\n> ⚠️ **Deprecated:** `createDual()` will be removed in a future major version. Use the unified `SyncAgentClient` constructor instead — pass `externalUserId` directly to enable both modes on a single instance.\n\nCreate both a database agent and a customer agent from a single config. Useful for apps that serve both internal users (admins) and end-customers from the same codebase.\n\n**Legacy pattern (deprecated):**\n\n```typescript\nimport { SyncAgentClient } from \"@syncagent/js\";\n\nconst { db, support } = SyncAgentClient.createDual({\n  apiKey: \"sa_your_api_key\",\n  connectionString: \"postgresql://user:pass@host:5432/mydb\",\n  externalUserId: currentUser.id,\n});\n\n// Admin: direct database queries\nconst result = await db.chat([{ role: \"user\", content: \"Show all overdue invoices\" }]);\n\n// Customer: support pipeline (persona, flows, KB, escalation)\nconst reply = await support.customerChat(\"I need help with my order\");\nawait support.rateConversation(reply.conversationId, 5);\n```\n\n#### Migration\n\n**Before** — using `createDual()`:\n\n```typescript\nimport { SyncAgentClient } from \"@syncagent/js\";\n\nconst { db, support } = SyncAgentClient.createDual({\n  apiKey: \"sa_your_api_key\",\n  connectionString: \"postgresql://user:pass@host:5432/mydb\",\n  externalUserId: \"customer_123\",\n});\n\nconst dbResult = await db.chat([{ role: \"user\", content: \"Show all overdue invoices\" }]);\nconst supportResult = await support.customerChat(\"I need help with my order\");\n```\n\n**After** — unified constructor:\n\n```typescript\nimport { SyncAgentClient } from \"@syncagent/js\";\n\nconst client = new SyncAgentClient({\n  apiKey: \"sa_your_api_key\",\n  connectionString: \"postgresql://user:pass@host:5432/mydb\",\n  externalUserId: \"customer_123\",\n});\n\nconst dbResult = await client.chat([{ role: \"user\", content: \"Show all overdue invoices\" }]);\nconst supportResult = await client.customerChat(\"I need help with my order\");\n```\n\n**Parameters**\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `config` | `DualClientConfig` | ✅ | Shared configuration for both clients |\n\n#### `DualClientConfig`\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `apiKey` | `string` | ✅ | Your SyncAgent API key |\n| `connectionString` | `string` | ✅ | Database connection string |\n| `externalUserId` | `string` | ✅ | Customer identifier — scopes customer agent conversations |\n| `baseUrl` | `string` | — | Override API base URL |\n| `filter` | `Record<string, any>` | — | Mandatory query filter for multi-tenant scoping |\n| `operations` | `string[]` | — | Restrict allowed operations (read, create, update, delete) |\n| `tools` | `Record<string, ToolDefinition>` | — | Custom tools for the database agent |\n| `systemInstruction` | `string` | — | Custom system prompt |\n| `language` | `string` | — | Response language |\n\n**Returns** `{ db: SyncAgentClient, support: SyncAgentClient }`\n\n- `db` — Database agent instance (`customerMode: false`). Use `db.chat()` for direct DB queries.\n- `support` — Customer agent instance (`customerMode: true`). Use `support.customerChat()` for the support pipeline.\n\n## Guest Identification\n\nWhen using Customer Agent Mode without an `externalUserId`, the SDK supports a guest identification flow. Guests provide their name and email before chatting, and their identity is persisted to localStorage for returning visits.\n\n### Client Methods\n\n#### `client.getGuestIdentity()`\n\nReturns the stored guest identity, or `null` if no identity has been saved.\n\n```typescript\nconst identity = client.getGuestIdentity();\n// GuestIdentity | null\n```\n\n#### `client.setGuestIdentity(identity)`\n\nPersists a guest identity to localStorage and sets the `externalUserId` for subsequent API calls.\n\n```typescript\nimport { generateGuestIdentifier } from \"@syncagent/js\";\n\nclient.setGuestIdentity({\n  name: \"Jane Doe\",\n  email: \"jane@example.com\",\n  phone: null,\n  guestId: generateGuestIdentifier(\"jane@example.com\"),\n});\n```\n\n#### `client.getGuestFormConfig()`\n\nReturns the `GuestFormConfig` passed at construction (via the `guestForm` option), or `undefined` if none was provided.\n\n```typescript\nconst formConfig = client.getGuestFormConfig();\n// GuestFormConfig | undefined\n```\n\n### `onGuestIdentified` Callback\n\nUse the `onGuestIdentified` callback in `CustomerChatOptions` to react when a guest completes identification:\n\n```typescript\nimport { SyncAgentClient } from \"@syncagent/js\";\n\nconst client = new SyncAgentClient({\n  apiKey: \"sa_your_api_key\",\n  customerMode: true,\n  guestForm: {\n    title: \"Hi there!\",\n    subtitle: \"Tell us who you are to get started\",\n    submitButtonText: \"Begin Chat\",\n  },\n});\n\nconst result = await client.customerChat(\"Hello\", {\n  onGuestIdentified: (identity) => {\n    console.log(`Guest identified: ${identity.name} (${identity.guestId})`);\n  },\n});\n```\n\n### Utility Functions\n\n| Function | Signature | Description |\n|----------|-----------|-------------|\n| `validateName` | `(name: string) => FieldValidationResult` | Validates that name contains at least one non-whitespace character |\n| `validateEmail` | `(email: string) => FieldValidationResult` | Validates email matches `local@domain.tld` pattern |\n| `validateGuestForm` | `(data: { name, email, phone? }) => { valid: boolean; errors: Record<string, string> }` | Validates the complete guest form submission |\n| `generateGuestIdentifier` | `(email: string) => string` | Generates a deterministic `guest_`-prefixed ID from the email (FNV-1a hash) |\n\n```typescript\nimport {\n  validateName,\n  validateEmail,\n  validateGuestForm,\n  generateGuestIdentifier,\n} from \"@syncagent/js\";\n\n// Individual field validation\nconst nameResult = validateName(\"Jane\");\n// { valid: true }\n\nconst emailResult = validateEmail(\"not-an-email\");\n// { valid: false, error: \"Please enter a valid email address\" }\n\n// Full form validation\nconst formResult = validateGuestForm({\n  name: \"Jane Doe\",\n  email: \"jane@example.com\",\n  phone: \"+1234567890\",\n});\n// { valid: true, errors: {} }\n\n// Generate a deterministic guest ID\nconst guestId = generateGuestIdentifier(\"jane@example.com\");\n// \"guest_a1b2c3d4\"\n```\n\n### Types\n\n```typescript\nimport type {\n  GuestIdentity,\n  GuestFormConfig,\n  FieldValidationResult,\n} from \"@syncagent/js\";\n```\n\n#### `GuestIdentity`\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `name` | `string` | Guest's display name |\n| `email` | `string` | Guest's email address |\n| `phone` | `string \\| null` | Optional phone number |\n| `guestId` | `string` | Deterministic identifier (`guest_` + FNV-1a hex hash of email) |\n\n#### `GuestFormConfig`\n\n| Field | Type | Default | Description |\n|-------|------|---------|-------------|\n| `title` | `string` | `\"Welcome\"` | Form heading text |\n| `subtitle` | `string` | `\"Please introduce yourself to get started\"` | Form description text |\n| `submitButtonText` | `string` | `\"Start Chat\"` | Submit button label |\n| `namePlaceholder` | `string` | — | Placeholder for the name input |\n| `emailPlaceholder` | `string` | — | Placeholder for the email input |\n| `phonePlaceholder` | `string` | — | Placeholder for the phone input |\n| `className` | `string` | — | Custom CSS class for the form container |\n| `onSubmit` | `(identity: GuestIdentity) => void` | — | Called after successful form submission |\n\n#### `FieldValidationResult`\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `valid` | `boolean` | Whether the field passed validation |\n| `error` | `string \\| undefined` | Error message if validation failed |\n\n## Theme Engine\n\nThe `computeTheme()` function generates a complete, WCAG-compliant color palette from an accent color and dark mode flag. Used internally by the pre-built `<SyncAgentCustomerChat>` components across all framework packages (React, Angular, Vue).\n\n### `computeTheme(accentColor?, darkMode?)`\n\n```typescript\nimport { computeTheme } from \"@syncagent/js\";\n\nconst theme = computeTheme(\"#6366f1\", false);\n// ThemeColors object with all color tokens\n```\n\n**Parameters**\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `accentColor` | `string` | `\"#6366f1\"` | CSS color string (hex `#RGB`/`#RRGGBB`, `rgb()`, or `hsl()`). Falls back to default if invalid. |\n| `darkMode` | `boolean` | `false` | Whether to generate a dark color scheme |\n\n**Returns** `ThemeColors`\n\n### `ThemeColors`\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `background` | `string` | Main background color |\n| `surface` | `string` | Elevated surface color (cards, panels) |\n| `text` | `string` | Primary text color (4.5:1 contrast against background) |\n| `textSecondary` | `string` | Secondary text color (4.5:1 contrast against background) |\n| `border` | `string` | Border color for dividers and outlines |\n| `accent` | `string` | Primary accent color (3:1 contrast against background) |\n| `accentHover` | `string` | Accent color on hover state |\n| `userBubble` | `string` | User message bubble background |\n| `userBubbleText` | `string` | User message bubble text (4.5:1 contrast against userBubble) |\n| `assistantBubble` | `string` | Assistant message bubble background |\n| `assistantBubbleText` | `string` | Assistant message bubble text (4.5:1 contrast against assistantBubble) |\n| `inputBackground` | `string` | Text input background color |\n| `inputBorder` | `string` | Text input border color |\n\n### WCAG Contrast Guarantees\n\n`computeTheme()` ensures the following minimum contrast ratios for any valid input:\n\n- **4.5:1** — `text` against `background`\n- **4.5:1** — `textSecondary` against `background`\n- **4.5:1** — `userBubbleText` against `userBubble`\n- **4.5:1** — `assistantBubbleText` against `assistantBubble`\n- **3:1** — `accent` against `background`\n\n### Contrast Utilities\n\n```typescript\nimport { relativeLuminance, contrastRatio } from \"@syncagent/js\";\n\n// Compute relative luminance (WCAG 2.1) for an RGB color\nconst lum = relativeLuminance(99, 102, 241); // 0-1\n\n// Compute contrast ratio between two RGB colors\nconst ratio = contrastRatio([255, 255, 255], [24, 24, 27]); // 1-21\n```\n\n| Function | Signature | Description |\n|----------|-----------|-------------|\n| `relativeLuminance` | `(r: number, g: number, b: number) => number` | WCAG 2.1 relative luminance (0–1) for an RGB color (0–255 per channel) |\n| `contrastRatio` | `(color1: [r,g,b], color2: [r,g,b]) => number` | Contrast ratio (1–21) between two RGB colors |\n\n### Example: Custom Theme Integration\n\n```typescript\nimport { computeTheme, type ThemeColors } from \"@syncagent/js\";\n\n// Light mode with custom brand color\nconst lightTheme: ThemeColors = computeTheme(\"#e11d48\", false);\n\n// Dark mode\nconst darkTheme: ThemeColors = computeTheme(\"#e11d48\", true);\n\n// Apply to your UI\ndocument.documentElement.style.setProperty(\"--chat-bg\", lightTheme.background);\ndocument.documentElement.style.setProperty(\"--chat-text\", lightTheme.text);\ndocument.documentElement.style.setProperty(\"--chat-accent\", lightTheme.accent);\n```\n\n## Unified Dual Mode\n\nBy passing `externalUserId` to the `SyncAgentClient` constructor alongside your `connectionString`, both `chat()` and `customerChat()` become available on the same instance — no need to call `createDual()` or manage separate clients.\n\nThis is the simplest way to build apps that serve both internal (admin/database) and customer-facing use cases from a single client.\n\n```typescript\nimport { SyncAgentClient } from \"@syncagent/js\";\n\nconst client = new SyncAgentClient({\n  apiKey: \"sa_your_api_key\",\n  connectionString: process.env.DATABASE_URL,\n  externalUserId: \"customer_123\",\n});\n\n// Database agent — direct queries\nconst dbResult = await client.chat([\n  { role: \"user\", content: \"Show all overdue invoices\" }\n]);\nconsole.log(dbResult.text);\n\n// Customer agent — support pipeline (persona, flows, KB, escalation)\nconst supportResult = await client.customerChat(\"I need help with my order\", {\n  onEscalated: () => console.log(\"Escalated to human agent\"),\n  onResolved: (id) => console.log(`Conversation ${id} resolved`),\n});\nconsole.log(supportResult.response);\n```\n\n## Abort / Cancel\n\n```typescript\nconst controller = new AbortController();\nagent.chat(messages, { signal: controller.signal });\ncontroller.abort();\n```\n\n## Express.js Integration\n\n```typescript\nimport express from \"express\";\nimport { SyncAgentClient } from \"@syncagent/js\";\n\nconst app = express();\napp.use(express.json());\n\nconst agent = new SyncAgentClient({\n  apiKey: process.env.SYNCAGENT_KEY,\n  connectionString: process.env.DATABASE_URL,\n});\n\napp.post(\"/chat\", async (req, res) => {\n  res.setHeader(\"Content-Type\", \"text/plain\");\n  res.setHeader(\"Transfer-Encoding\", \"chunked\");\n\n  await agent.chat(req.body.messages, {\n    onToken: (token) => res.write(token),\n    onComplete: () => res.end(),\n    onError: (err) => { res.status(500).end(err.message); },\n  });\n});\n\napp.listen(3000);\n```\n\n## TypeScript Types\n\n```typescript\nimport type {\n  SyncAgentConfig, Message, ChatOptions, ChatResult,\n  CollectionSchema, SchemaField, ToolDefinition, ToolParameter, ToolData,\n  CustomerChatResult, CustomerChatOptions, DualClientConfig, DualClient,\n  DualChatReturn, DualChatOptions, UnifiedConfig,\n  GuestIdentity, GuestFormConfig, FieldValidationResult,\n} from \"@syncagent/js\";\n\nimport type { ThemeColors } from \"@syncagent/js\";\n```\n\n### Customer Chat Types\n\n| Type | Description |\n|------|-------------|\n| `CustomerChatResult` | Response from `customerChat()` — contains `conversationId`, `response`, `escalated`, `resolved`, `flowActive`, `welcomeMessage`, `sources`, `flowSession` |\n| `CustomerChatOptions` | Options for `customerChat()` — includes `conversationId`, `metadata`, `onEscalated`, `onResolved`, `onGuestIdentified` |\n| `GuestIdentity` | Guest user data — `name`, `email`, `phone`, `guestId` |\n| `GuestFormConfig` | Guest form customization — `title`, `subtitle`, `submitButtonText`, placeholders, `className`, `onSubmit` |\n| `FieldValidationResult` | Validation result — `valid` boolean and optional `error` message |\n| `ThemeColors` | Complete color palette from `computeTheme()` — 13 color tokens for backgrounds, text, accents, and bubbles |\n\n### New Types Reference\n\n| Type | Description | Import |\n|------|-------------|--------|\n| `DualChatReturn` | Return type for the `useDualChat()` hook and framework equivalents — contains `db` and `support` namespaces with messages, state, and actions | `import type { DualChatReturn } from \"@syncagent/js\"` |\n| `DualChatOptions` | Options for the `useDualChat()` hook/composable — includes `context`, `onData`, `onEscalated`, and `onResolved` callbacks | `import type { DualChatOptions } from \"@syncagent/js\"` |\n| `UnifiedConfig` | Config type alias for the unified client — `SyncAgentConfig` with `externalUserId` required | `import type { UnifiedConfig } from \"@syncagent/js\"` |\n\n## Security\n\n- Your database connection string is **never stored** on SyncAgent servers\n- It's passed at runtime, used to process the request, and immediately discarded\n- API keys are hashed with bcrypt — raw keys are never stored\n- Rate limiting: max 5 concurrent requests per API key per 10 seconds\n\n## Plans & Pricing\n\n| Plan | Requests/mo | Collections | Price |\n|------|-------------|-------------|-------|\n| Free (+ 14-day trial) | 100 (500 during trial) | 5 | GH₵0 |\n| Starter | 5,000 | 20 | GH₵150/mo |\n| Pro | 50,000 | Unlimited | GH₵500/mo |\n| Enterprise | Unlimited | Unlimited | Custom |\n\n[View full pricing →](https://syncagentdev.vercel.app/pricing)\n\n## Resources\n\n- [Documentation](https://syncagentdev.vercel.app/docs)\n- [Dashboard](https://syncagentdev.vercel.app/dashboard)\n- [Pricing](https://syncagentdev.vercel.app/pricing)\n- [Changelog](https://syncagentdev.vercel.app/changelog)\n\n## License\n\nMIT\n","readmeFilename":"README.md"}