{"_id":"@ajentify/chat","_rev":"9-e4ee590a40f0606835ca475306dd3260","name":"@ajentify/chat","dist-tags":{"latest":"0.4.0"},"versions":{"0.1.0":{"name":"@ajentify/chat","version":"0.1.0","license":"MIT","_id":"@ajentify/chat@0.1.0","maintainers":[{"name":"ajentify","email":"purpledevilai@gmail.com"}],"dist":{"shasum":"32af374042f793cc5db01f8579c9382841b52ac0","tarball":"https://registry.npmjs.org/@ajentify/chat/-/chat-0.1.0.tgz","fileCount":13,"integrity":"sha512-4O2wxlLPLWAnjgwrSHop0ob8pe1/6JZGPHScSK9OsL07CtWxeIt2qtpax6+VqEtiqZCCdWRN7JCte9Iq0Qa3sg==","signatures":[{"sig":"MEUCIQCi4fSsANTUcgp+vWeEcUqN0F+qXwVSL7YIATtU+db6zQIgbmnOdKymIH4h3hUw7+aTG8dAhpGmzhwI0SMVtqCwCoU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":383223},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./styles.css":"./dist/styles.css","./package.json":"./package.json"},"gitHead":"7e760bde8a5df8be8567c78938f8dacc2d4b9fc4","scripts":{"dev":"concurrently \"pnpm run dev:js\" \"pnpm run dev:css\"","lint":"eslint src --ext .ts,.tsx","test":"vitest run","build":"pnpm run build:js && pnpm run build:css","dev:js":"tsup --watch","dev:css":"tailwindcss -i ./src/styles.css -o ./dist/styles.css --watch","build:js":"tsup","build:css":"tailwindcss -i ./src/styles.css -o ./dist/styles.css --minify","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"ajentify","email":"purpledevilai@gmail.com"},"_npmVersion":"10.9.0","description":"React chat component and headless logic layer for the Ajentify token streaming server","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"23.3.0","dependencies":{"clsx":"^2.1.1","zustand":"^5.0.1","remark-gfm":"^4.0.0","lucide-react":"^0.460.0","react-markdown":"^9.0.1","tailwind-merge":"^2.5.4","rehype-sanitize":"^6.0.0","@radix-ui/react-slot":"^1.1.0","@radix-ui/react-dialog":"^1.1.2","@radix-ui/react-tooltip":"^1.1.4","@tanstack/react-virtual":"^3.10.8","class-variance-authority":"^0.7.0","@radix-ui/react-scroll-area":"^1.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.5","postcss":"^8.4.49","react-dom":"^18.3.1","typescript":"^5.6.3","@types/node":"^22.9.0","tailwindcss":"^3.4.14","@types/react":"^18.3.12","autoprefixer":"^10.4.20","concurrently":"^9.1.0","@types/react-dom":"^18.3.1","@testing-library/react":"^16.0.1"},"peerDependencies":{"react":">=18","react-dom":">=18"},"_npmOperationalInternal":{"tmp":"tmp/chat_0.1.0_1780144262481_0.7950280230997524","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@ajentify/chat","version":"0.2.0","license":"MIT","_id":"@ajentify/chat@0.2.0","maintainers":[{"name":"ajentify","email":"purpledevilai@gmail.com"}],"dist":{"shasum":"ea86d9f3de85dadfc1b9b92e671a56622d9dda87","tarball":"https://registry.npmjs.org/@ajentify/chat/-/chat-0.2.0.tgz","fileCount":17,"integrity":"sha512-fLe5diakPUotRFYXJI39Zi4xqrRzsZ6TkDd0RCNbplX2AyohJw8NG+JXJNsxa8IKq7bv+/0TB7bge1+zcUC1lQ==","signatures":[{"sig":"MEYCIQDxODh8eLYy9DX2GPsk7Hv5lHZPlEU4f3nR39MRmQrxeQIhAL7FONpV1CQMhejL9ma4fu8rOQ0isjafEqW51ZvIWcZl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":534751},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./styles.css":"./dist/styles.css","./package.json":"./package.json"},"gitHead":"3f57b347177d85d737b66369400d6a2f842fbd29","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"ajentify","email":"purpledevilai@gmail.com"},"_npmVersion":"10.9.0","description":"React chat component and headless logic layer for the Ajentify token streaming server","directories":{},"sideEffects":false,"_nodeVersion":"23.3.0","dependencies":{"clsx":"^2.1.1","zustand":"^5.0.1","remark-gfm":"^4.0.0","lucide-react":"^0.460.0","react-markdown":"^9.0.1","rehype-sanitize":"^6.0.0","@radix-ui/react-slot":"^1.1.0","@radix-ui/react-dialog":"^1.1.2","@radix-ui/react-tooltip":"^1.1.4","@tanstack/react-virtual":"^3.10.8","@radix-ui/react-scroll-area":"^1.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.5","react-dom":"^18.3.1","typescript":"^5.6.3","@types/node":"^22.9.0","@types/react":"^18.3.12","@types/react-dom":"^18.3.1","@testing-library/react":"^16.0.1"},"peerDependencies":{"react":">=18","react-dom":">=18"},"_npmOperationalInternal":{"tmp":"tmp/chat_0.2.0_1780390840836_0.2399056064806615","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@ajentify/chat","version":"0.2.1","license":"MIT","_id":"@ajentify/chat@0.2.1","maintainers":[{"name":"ajentify","email":"purpledevilai@gmail.com"}],"dist":{"shasum":"0610070d01047f62447a53fa02b3ce079f63ee84","tarball":"https://registry.npmjs.org/@ajentify/chat/-/chat-0.2.1.tgz","fileCount":17,"integrity":"sha512-prgLlXfJgY85FDDbSh52JbgG787HbrJhGcvLqu/Nzqg6MDmu4AgWl/3C0OSRCuSBHhlI8NCOtzfLQcsFKDlYSg==","signatures":[{"sig":"MEUCIQDbWyKURtTJTzn2N/z+XS5vm05DMMZ3Ui7ZSUUH5XQElQIgUUvdLYcZ0/uEZt8E5cErOEl/eiU6EHzj5WVeEbUuIvw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":537790},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./styles.css":"./dist/styles.css","./package.json":"./package.json"},"gitHead":"3f57b347177d85d737b66369400d6a2f842fbd29","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"ajentify","email":"purpledevilai@gmail.com"},"_npmVersion":"10.9.0","description":"React chat component and headless logic layer for the Ajentify token streaming server","directories":{},"sideEffects":false,"_nodeVersion":"23.3.0","dependencies":{"clsx":"^2.1.1","zustand":"^5.0.1","remark-gfm":"^4.0.0","lucide-react":"^0.460.0","react-markdown":"^9.0.1","rehype-sanitize":"^6.0.0","@radix-ui/react-slot":"^1.1.0","@radix-ui/react-dialog":"^1.1.2","@radix-ui/react-tooltip":"^1.1.4","@tanstack/react-virtual":"^3.10.8","@radix-ui/react-scroll-area":"^1.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.5","react-dom":"^18.3.1","typescript":"^5.6.3","@types/node":"^22.9.0","@types/react":"^18.3.12","@types/react-dom":"^18.3.1","@testing-library/react":"^16.0.1"},"peerDependencies":{"react":">=18","react-dom":">=18"},"_npmOperationalInternal":{"tmp":"tmp/chat_0.2.1_1780391932766_0.2520932296192191","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@ajentify/chat","version":"0.2.2","license":"MIT","_id":"@ajentify/chat@0.2.2","maintainers":[{"name":"ajentify","email":"purpledevilai@gmail.com"}],"dist":{"shasum":"5289a78de8369ecf164b1ba7f38364e680f1f45a","tarball":"https://registry.npmjs.org/@ajentify/chat/-/chat-0.2.2.tgz","fileCount":17,"integrity":"sha512-K/pg8BhNQNwm2tmZxmZVMdKK+eVxK70/bp67kBsUjOm+ZFDVNqvBcDkC28SU6nDTFtE0T2P8Gg2va0qZwjHAfQ==","signatures":[{"sig":"MEQCIFz7magXh0jlJID5Z/mETnmFxPylo6M/TID3wkn5jSd+AiAG020IOKr4wVJmsT01hOfX408TSgzLRlkDvud4b09OkA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":540545},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./styles.css":"./dist/styles.css","./package.json":"./package.json"},"gitHead":"3f57b347177d85d737b66369400d6a2f842fbd29","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"ajentify","email":"purpledevilai@gmail.com"},"_npmVersion":"10.9.0","description":"React chat component and headless logic layer for the Ajentify token streaming server","directories":{},"sideEffects":false,"_nodeVersion":"23.3.0","dependencies":{"clsx":"^2.1.1","zustand":"^5.0.1","remark-gfm":"^4.0.0","lucide-react":"^0.460.0","react-markdown":"^9.0.1","rehype-sanitize":"^6.0.0","@radix-ui/react-slot":"^1.1.0","@radix-ui/react-dialog":"^1.1.2","@radix-ui/react-tooltip":"^1.1.4","@tanstack/react-virtual":"^3.10.8","@radix-ui/react-scroll-area":"^1.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.5","react-dom":"^18.3.1","typescript":"^5.6.3","@types/node":"^22.9.0","@types/react":"^18.3.12","@types/react-dom":"^18.3.1","@testing-library/react":"^16.0.1"},"peerDependencies":{"react":">=18","react-dom":">=18"},"_npmOperationalInternal":{"tmp":"tmp/chat_0.2.2_1780392538299_0.8209841858412696","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@ajentify/chat","version":"0.2.3","license":"MIT","_id":"@ajentify/chat@0.2.3","maintainers":[{"name":"ajentify","email":"purpledevilai@gmail.com"}],"dist":{"shasum":"626b757def237170bb698a79c96dfb3956858f86","tarball":"https://registry.npmjs.org/@ajentify/chat/-/chat-0.2.3.tgz","fileCount":17,"integrity":"sha512-xfI4SkGOaSHDzUkAuRcDb0LRE/pRlgjxQRXgP3vZkLGGUpjoJN0Ofv/UcoA5VSQVevVZsZd3hEOsWM02Vf64Tw==","signatures":[{"sig":"MEUCICXmmfgVxntgHFnPyzyRlp8N8P/N13Bgq74qU5OG4zU9AiEAhVGE1dHEVG7WrD99DPtxGeB1v0WCMw9lM6//dSOrxLo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":542970},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./styles.css":"./dist/styles.css","./package.json":"./package.json"},"gitHead":"3f57b347177d85d737b66369400d6a2f842fbd29","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"ajentify","email":"purpledevilai@gmail.com"},"_npmVersion":"10.9.0","description":"React chat component and headless logic layer for the Ajentify token streaming server","directories":{},"sideEffects":false,"_nodeVersion":"23.3.0","dependencies":{"clsx":"^2.1.1","zustand":"^5.0.1","remark-gfm":"^4.0.0","lucide-react":"^0.460.0","react-markdown":"^9.0.1","rehype-sanitize":"^6.0.0","@radix-ui/react-slot":"^1.1.0","@radix-ui/react-dialog":"^1.1.2","@radix-ui/react-tooltip":"^1.1.4","@tanstack/react-virtual":"^3.10.8","@radix-ui/react-scroll-area":"^1.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.5","react-dom":"^18.3.1","typescript":"^5.6.3","@types/node":"^22.9.0","@types/react":"^18.3.12","@types/react-dom":"^18.3.1","@testing-library/react":"^16.0.1"},"peerDependencies":{"react":">=18","react-dom":">=18"},"_npmOperationalInternal":{"tmp":"tmp/chat_0.2.3_1780393097944_0.23929661397275126","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@ajentify/chat","version":"0.3.0","license":"MIT","_id":"@ajentify/chat@0.3.0","maintainers":[{"name":"ajentify","email":"purpledevilai@gmail.com"}],"dist":{"shasum":"d46278072c24f59305649cad22f3e3ffb77a75b9","tarball":"https://registry.npmjs.org/@ajentify/chat/-/chat-0.3.0.tgz","fileCount":17,"integrity":"sha512-fuQV32dDDa6kZjj1B/aXPZVKhlU7ImMEyXh5dU2jwP1mTV5DWIJbq5VBANbWJKA+a42g97jyu5lUel5LaFpO9A==","signatures":[{"sig":"MEYCIQD//DiOwa544M7/WtwVXXxz5PcNo2RAVjWmG8zUGMotowIhANmwuQ2TONt37AbNSsVhis5R43a29ivK4p1pwycD2qge","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":507026},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./styles.css":"./dist/styles.css","./package.json":"./package.json"},"gitHead":"3f57b347177d85d737b66369400d6a2f842fbd29","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"ajentify","email":"purpledevilai@gmail.com"},"_npmVersion":"10.9.0","description":"React chat component and headless logic layer for the Ajentify token streaming server","directories":{},"sideEffects":false,"_nodeVersion":"23.3.0","dependencies":{"clsx":"^2.1.1","zustand":"^5.0.1","remark-gfm":"^4.0.0","lucide-react":"^0.460.0","react-markdown":"^9.0.1","rehype-sanitize":"^6.0.0","@radix-ui/react-slot":"^1.1.0","@radix-ui/react-dialog":"^1.1.2","@radix-ui/react-tooltip":"^1.1.4","@tanstack/react-virtual":"^3.10.8","@radix-ui/react-scroll-area":"^1.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.5","react-dom":"^18.3.1","typescript":"^5.6.3","@types/node":"^22.9.0","@types/react":"^18.3.12","@types/react-dom":"^18.3.1","@testing-library/react":"^16.0.1"},"peerDependencies":{"react":">=18","react-dom":">=18"},"_npmOperationalInternal":{"tmp":"tmp/chat_0.3.0_1780471645885_0.027457104550601574","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@ajentify/chat","version":"0.3.1","license":"MIT","_id":"@ajentify/chat@0.3.1","maintainers":[{"name":"ajentify","email":"purpledevilai@gmail.com"}],"dist":{"shasum":"ecc3b2e09fc85f4b8354126a903834489a299a9e","tarball":"https://registry.npmjs.org/@ajentify/chat/-/chat-0.3.1.tgz","fileCount":17,"integrity":"sha512-8M7mZNda5YHRvVTaz0lbXW4aW8oVsndscncCe4e5aO9YKdK4A0Q7W/laeppy63D1K+YKdX3mZGv7Sf0ptfhSRg==","signatures":[{"sig":"MEQCIE9a3ySLzTyoIxA4eojesbzh2Vik41kUDk7oScVuO+MZAiB5suNZwElXQDX4GkoCwgV32YZSQlmM+94OA6cIjVAIig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":500058},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./styles.css":"./dist/styles.css","./package.json":"./package.json"},"gitHead":"3f57b347177d85d737b66369400d6a2f842fbd29","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"ajentify","email":"purpledevilai@gmail.com"},"_npmVersion":"10.9.0","description":"React chat component and headless logic layer for the Ajentify token streaming server","directories":{},"sideEffects":false,"_nodeVersion":"23.3.0","dependencies":{"clsx":"^2.1.1","zustand":"^5.0.1","remark-gfm":"^4.0.0","lucide-react":"^0.460.0","react-markdown":"^9.0.1","rehype-sanitize":"^6.0.0","@radix-ui/react-slot":"^1.1.0","@radix-ui/react-dialog":"^1.1.2","@radix-ui/react-tooltip":"^1.1.4","@tanstack/react-virtual":"^3.10.8","@radix-ui/react-scroll-area":"^1.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.5","react-dom":"^18.3.1","typescript":"^5.6.3","@types/node":"^22.9.0","@types/react":"^18.3.12","@types/react-dom":"^18.3.1","@testing-library/react":"^16.0.1"},"peerDependencies":{"react":">=18","react-dom":">=18"},"_npmOperationalInternal":{"tmp":"tmp/chat_0.3.1_1780561991749_0.4280345531937857","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@ajentify/chat","version":"0.3.2","license":"MIT","_id":"@ajentify/chat@0.3.2","maintainers":[{"name":"ajentify","email":"purpledevilai@gmail.com"}],"dist":{"shasum":"8f81f53a9d26081864643afe98ff18b12a96850b","tarball":"https://registry.npmjs.org/@ajentify/chat/-/chat-0.3.2.tgz","fileCount":17,"integrity":"sha512-XN4+kvvyOr4P7IPocVfo99tp8WKKJBQTr1ZKflA3roojY8HGfw71OLLGzjDysC1Lr1xB7dLz1Nxp3xOuEOm+OA==","signatures":[{"sig":"MEYCIQDxAOVMk0DBQdGEQTCNlqXpvOxL2L8akMrgrvh+CEo/+gIhAOk/vVw329+F98Eq1mc4W0aG8IpKkLdg+qbFBXdv3Sn/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":515597},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./styles.css":"./dist/styles.css","./package.json":"./package.json"},"gitHead":"fabef8fc9926fd67122956715e1ce304fb428d43","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"ajentify","email":"purpledevilai@gmail.com"},"_npmVersion":"10.9.0","description":"React chat component and headless logic layer for the Ajentify token streaming server","directories":{},"sideEffects":false,"_nodeVersion":"23.3.0","dependencies":{"clsx":"^2.1.1","zustand":"^5.0.1","remark-gfm":"^4.0.0","lucide-react":"^0.460.0","react-markdown":"^9.0.1","rehype-sanitize":"^6.0.0","@radix-ui/react-slot":"^1.1.0","@radix-ui/react-dialog":"^1.1.2","@radix-ui/react-tooltip":"^1.1.4","@tanstack/react-virtual":"^3.10.8","@radix-ui/react-scroll-area":"^1.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.5","react-dom":"^18.3.1","typescript":"^5.6.3","@types/node":"^22.9.0","@types/react":"^18.3.12","@types/react-dom":"^18.3.1","@testing-library/react":"^16.0.1"},"peerDependencies":{"react":">=18","react-dom":">=18"},"_npmOperationalInternal":{"tmp":"tmp/chat_0.3.2_1780572495051_0.50753116636299","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@ajentify/chat","version":"0.4.0","description":"React chat component and headless logic layer for the Ajentify token streaming server","license":"MIT","type":"module","sideEffects":false,"main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./styles.css":"./dist/styles.css","./package.json":"./package.json"},"scripts":{"build":"tsup","dev":"tsup --watch","typecheck":"tsc --noEmit","test":"vitest run","test:watch":"vitest","lint":"eslint src --ext .ts,.tsx"},"peerDependencies":{"react":">=18","react-dom":">=18"},"dependencies":{"@radix-ui/react-dialog":"^1.1.2","@radix-ui/react-scroll-area":"^1.2.0","@radix-ui/react-slot":"^1.1.0","@radix-ui/react-tooltip":"^1.1.4","@tanstack/react-virtual":"^3.10.8","clsx":"^2.1.1","lucide-react":"^0.460.0","react-markdown":"^9.0.1","rehype-sanitize":"^6.0.0","remark-gfm":"^4.0.0","zustand":"^5.0.1"},"devDependencies":{"@types/node":"^22.9.0","@types/react":"^18.3.12","@types/react-dom":"^18.3.1","react":"^18.3.1","react-dom":"^18.3.1","tsup":"^8.3.5","typescript":"^5.6.3","vitest":"^2.1.5","jsdom":"^25.0.1","@testing-library/react":"^16.0.1"},"publishConfig":{"access":"public"},"_id":"@ajentify/chat@0.4.0","gitHead":"af71189e4b730b6e9728a94da1d9739cc9aad264","_nodeVersion":"23.3.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-6q4UQdv6hdkaM2PNJObMXV5g6xhELRX7sECZ0rl4vXlFGYRGcQAhFeJj84DKoxSTMH8GkUztkfpE9r6Ex5mpBA==","shasum":"20832b6435449dc205a51d2ecde23b27eba71adc","tarball":"https://registry.npmjs.org/@ajentify/chat/-/chat-0.4.0.tgz","fileCount":17,"unpackedSize":538139,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBN+g3QkO0WKq/ucc4FO/VQWp8XBXRHNlTVlP3axl5hZAiEA3gOgxlEHU8aVEagFal2+j7BCAL/RqePbm02xyRohjvk="}]},"_npmUser":{"name":"ajentify","email":"purpledevilai@gmail.com"},"directories":{},"maintainers":[{"name":"ajentify","email":"purpledevilai@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/chat_0.4.0_1787399784681_0.9705201027259136"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-30T12:31:02.338Z","modified":"2026-08-22T11:56:24.970Z","0.1.0":"2026-05-30T12:31:02.633Z","0.2.0":"2026-06-02T09:00:40.983Z","0.2.1":"2026-06-02T09:18:52.927Z","0.2.2":"2026-06-02T09:28:58.452Z","0.2.3":"2026-06-02T09:38:18.247Z","0.3.0":"2026-06-03T07:27:26.041Z","0.3.1":"2026-06-04T08:33:11.918Z","0.3.2":"2026-06-04T11:28:15.222Z","0.4.0":"2026-08-22T11:56:24.819Z"},"license":"MIT","description":"React chat component and headless logic layer for the Ajentify token streaming server","maintainers":[{"name":"ajentify","email":"purpledevilai@gmail.com"}],"readme":"# @ajentify/chat\n\nA React npm package that gives developers a fully headless logic layer (Zustand stores + hooks) and an optional UI (plain-CSS components built on Radix) for connecting to the [Ajentify](https://api.ajentify.com) token streaming server.\n\n> **v0.2 is a major release.** It's frictionless out of the box: no Tailwind / typography-plugin requirement on the host, auto-injected styles, full-color theme tokens, and built-in helpers for the event client, server router, panel state, and typed client-side tools. See [CHANGELOG.md](./CHANGELOG.md) for the migration steps.\n\n## Install\n\n```bash\nnpm install @ajentify/chat\n# or\npnpm add @ajentify/chat\n```\n\nThat's it — the chat's stylesheet is auto-injected from `<AjentifyProvider>` on first mount. No `import '@ajentify/chat/styles.css'` line, no Tailwind setup on the host. (If you want SSR pre-paint, the file is still exported and can be imported manually.)\n\n## Quickstart\n\n```tsx\nimport { AjentifyProvider, createAjentifyEventClient } from '@ajentify/chat';\nimport { ChatPanel, ChatToggleButton } from '@ajentify/chat/ui';\n\nconst onAjentifyEvent = createAjentifyEventClient({\n  url: '/api/ajentify-event',\n  credentials: 'include',\n});\n\nexport function App() {\n  return (\n    <AjentifyProvider config={{ onAjentifyEvent }}>\n      <header>\n        <ChatToggleButton label=\"Ask Aj\" />\n      </header>\n      <ChatPanel desktopVariant=\"inline\">\n        <YourPages />\n      </ChatPanel>\n    </AjentifyProvider>\n  );\n}\n```\n\nThe backend route `/api/ajentify-event` proxies every event variant to the Ajentify REST API with your **org-scoped API key** so it never reaches the browser:\n\n```ts\n// app/api/ajentify-event/route.ts (Next.js App Router)\nimport { createAjentifyEventRouter, toNextRouteHandler } from '@ajentify/chat/server';\nimport { cookies } from 'next/headers';\n\nconst handler = createAjentifyEventRouter({\n  apiKey: process.env.AJENTIFY_API_KEY!,\n  agentId: process.env.AJENTIFY_AGENT_ID!,\n  getClientId: () => cookies().get('ajentify_client_id')?.value ?? null,\n  setClientId: (_req, id) => cookies().set('ajentify_client_id', id, { httpOnly: true }),\n});\n\nexport const POST = toNextRouteHandler(handler);\n```\n\nExpress / Hono shims are exported alongside `toNextRouteHandler` from `@ajentify/chat/server`.\n\n## Hooks\n\n```ts\nimport {\n  useChat,\n  useCurrentContext,\n  useContexts,\n  useContextHistory,\n  useClientSideTools,\n  useGetPageData,\n  useDoPageAction,\n  useChatPanel,        // v0.2: open/close the panel from anywhere\n  useAjentifyConfig,\n} from '@ajentify/chat';\n```\n\n`useChat()` is the convenience hook:\n\n```ts\nconst { messages, send, status, agent, pendingResponse } = useChat();\n```\n\n`useChatPanel()` reads/writes the built-in panel state — pair it with `<ChatToggleButton />` or roll your own button. Pass `open` / `onOpenChange` to `<ChatPanel />` to take over manually.\n\n## Client-side tools\n\n`defineClientSideTools<TTools>(...)` is a typed dispatcher that replaces the `args.x as string | undefined` casts every consumer was writing by hand:\n\n```ts\nimport { defineClientSideTools } from '@ajentify/chat';\n\ntype Tools = {\n  list_todos: { args: {}; result: Todo[] };\n  navigate:   { args: { path: string }; result: { ok: boolean } };\n};\n\nconst clientSideTools = defineClientSideTools<Tools>({\n  list_todos: () => api.listTodos(),\n  navigate:   ({ path }) => { router.push(path); return { ok: true }; },\n});\n\n<AjentifyProvider config={{ onAjentifyEvent, clientSideTools }}>\n```\n\nMissing handlers throw a descriptive `AjentifyError` and warn in dev.\n\n## Page-level tools\n\nThe agent can call two special tools — `get_page_data` and `do_page_action` — to read the current page and act on it. Mount these from any page:\n\n```tsx\nuseGetPageData(() => ({\n  data: { selected_order_id: orderId },\n  actions: {\n    refund_order: {\n      description: 'Refund the currently selected order',\n      argsSchema: {\n        type: 'object',\n        properties: { amount: { type: 'number' } },\n        required: ['amount'],\n      },\n    },\n  },\n}), [orderId]);\n\nuseDoPageAction(async (key, args) => {\n  if (key === 'refund_order') {\n    await refundOrder(orderId, args.amount as number);\n    return { ok: true };\n  }\n  throw new Error(`unknown action: ${key}`);\n}, [orderId]);\n```\n\n## UI\n\nImporting from `@ajentify/chat/ui` is **optional** — use the headless hooks if you want your own UI. If you want the bundled experience:\n\n```tsx\nimport {\n  ChatPanel,\n  ChatView,\n  ChatHeader,\n  ChatMessages,\n  ChatInput,\n  ChatToggleButton,\n} from '@ajentify/chat/ui';\n```\n\n`<ChatPanel />` is opinionated: slide-in from the right, draggable resize handle on desktop, full-screen sheet on mobile. `<ChatView />` is the fill-parent variant if you want to drop it inside your own layout.\n\n### Starter prompts\n\nRender 1–3 starter chips on the new-chat hero — clicking sends instantly:\n\n```tsx\n<ChatPanel\n  suggestedPrompts={['How does X work?', 'Show me my open orders']}\n  newChatView={`Hey there, ${user.firstName}`}\n/>\n```\n\n### Mount behaviour\n\nWhen `<ChatView />` (or `<ChatPanel />`) mounts on a fresh session, it auto-calls `startNewContext()` so the user lands on a ready-to-type chat. The provider's `agentSpeaksFirst` flag is the only knob:\n\n- `agentSpeaksFirst: false` (default) — enters a local `'draft'` state. No `create_context` call is made until the user sends their first message.\n- `agentSpeaksFirst: true` — eagerly calls `create_context` and opens the WebSocket so the agent can stream its greeting before the user types.\n\nIf the eager call fails, the chat falls back to a \"Couldn't start a new chat — Try again\" affordance and does not auto-retry. Customise it with the `emptyState` prop.\n\n## Theming\n\nEvery visual surface is themed through **plain CSS custom properties** under the `--aj-*` namespace. v0.2 ships them as **full CSS colors** (not HSL channels), so any color format works — `oklch(...)`, `#hex`, `rgb(...)`, `hsl(...)`. Alpha modulation is done internally via `color-mix(...)`.\n\n```css\n:root {\n  --aj-primary: oklch(0.55 0.18 270);\n  --aj-radius: 1rem;\n}\n.dark {\n  --aj-background: #0a0a0a;\n  --aj-foreground: #fafafa;\n}\n```\n\nLayout / spacing knobs are CSS variables too:\n\n```css\n:root {\n  --aj-panel-width: 480px;\n  --aj-messages-padding-x: 1.5rem;\n  --aj-messages-padding-y: 2rem;\n  --aj-messages-gap: 1rem;\n  --aj-bubble-padding-x: 1rem;\n  --aj-bubble-padding-y: 0.625rem;\n  --aj-bubble-radius: 1.25rem;\n  --aj-prose-font-size: 0.9375rem;\n}\n```\n\n### shadcn / Radix Themes / Mantine bridge\n\nHand the chat your host's CSS variables — full colors pass through directly:\n\n```tsx\n<AjentifyProvider config={{ onAjentifyEvent, themeBridge: 'shadcn' }}>\n```\n\nOr supply a custom map:\n\n```tsx\nthemeBridge={{\n  tokens: {\n    background: '--mantine-color-body',\n    foreground: '--mantine-color-text',\n    primary:    '--mantine-color-blue-6',\n    border:     '--mantine-color-default-border',\n  },\n}}\n```\n\n### Per-slot overrides\n\nEvery component still accepts a `classNames` prop for one-off tweaks; in most apps the CSS variables alone are enough.\n\n## SSR / Next.js\n\nAll components and hooks that touch browser APIs are marked `\"use client\"`. Put `<AjentifyProvider>` inside a client component near the root. `TokenStreamingClient`, the types, and `@ajentify/chat/server` are server-safe.\n","readmeFilename":"README.md"}