{"_id":"@abhi-finance/pi-chat","_rev":"18-fcd6383740c0a11a14b5c2f2eef75935","name":"@abhi-finance/pi-chat","dist-tags":{"latest":"0.2.6"},"versions":{"0.1.0":{"name":"@abhi-finance/pi-chat","version":"0.1.0","keywords":["ai","chat","widget","pi","assistant","sse","streaming"],"license":"SEE LICENSE IN LICENSE","_id":"@abhi-finance/pi-chat@0.1.0","maintainers":[{"name":"zeus.abhi","email":"zeus@abhi.co"}],"homepage":"https://bitbucket.org/abhi-finance/pi#readme","bugs":{"url":"https://bitbucket.org/abhi-finance/pi/issues"},"dist":{"shasum":"1bca1312fa21af44d5518e9f6af429f95acb63fb","tarball":"https://registry.npmjs.org/@abhi-finance/pi-chat/-/pi-chat-0.1.0.tgz","fileCount":9,"integrity":"sha512-yLzrSbdfFrDf442/0JeTzvwLtL6w2RDWIxljTXUgTxT9oRkXdJcL7fHxY+vj1O1TA+hlcD6YRk1XLz80IgwKwA==","signatures":[{"sig":"MEUCIAtkVW1nv46rEKs9IKzueE9IKtImkX5Eekzr7HF7ceTdAiEAoSj+Hx31gw3otAJyGOAH4Q7KhtxEhQrCHcXVJGoGUIQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":406680},"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"},"./styles.css":"./dist/styles/pi-chat.css"},"gitHead":"0dad4f992d0b8f1c463711b27658d99350572923","scripts":{"dev":"tsup --watch","build":"tsup","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"zeus.abhi","email":"zeus@abhi.co"},"repository":{"url":"git+ssh://git@bitbucket.org/abhi-finance/pi.git","type":"git","directory":"packages/pi-chat"},"_npmVersion":"11.17.0","description":"PI AI Chat Widget — drop-in AI assistant for any product","directories":{},"_nodeVersion":"26.5.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.27.7":true},"dependencies":{"img-fx":"^0.5.0","metal-fx":"^1.0.4","remark-gfm":"^4.0.1","border-beam":"^1.3.0","react-markdown":"^10.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vite":"^5.4.21","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.7.0","@types/react":"^18.3.0","lucide-react":"^0.460.0","framer-motion":"^11.0.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.7.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","lucide-react":">=0.300.0","framer-motion":">=10.0.0"},"optionalDependencies":{"three":"^0.185.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-chat_0.1.0_1785924270995_0.13319637574627086","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@abhi-finance/pi-chat","version":"0.1.1","keywords":["ai","chat","widget","pi","assistant","sse","streaming"],"license":"SEE LICENSE IN LICENSE","_id":"@abhi-finance/pi-chat@0.1.1","maintainers":[{"name":"zeus.abhi","email":"zeus@abhi.co"}],"homepage":"https://bitbucket.org/abhi-finance/pi#readme","bugs":{"url":"https://bitbucket.org/abhi-finance/pi/issues"},"dist":{"shasum":"3b4ab12817ee8c7669bcb70b8ef86126aea700ca","tarball":"https://registry.npmjs.org/@abhi-finance/pi-chat/-/pi-chat-0.1.1.tgz","fileCount":9,"integrity":"sha512-znpWIn0dJ24QpyGYHl1D91OtNUKg7VqEnJE7K36pU3btKv+eGh6qYk9J+YdT5O/GCta7STVQjbOGlQtUn/9jFw==","signatures":[{"sig":"MEUCIQCFZZx5GqV0DGyH8zfiRXH4QUk1QgQh1OUJJtU9sxU4cgIgaxlOyxAI15qBJZh3naoVWgA/cxa0jvh1l88U8zQgln8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":428491},"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"},"./styles.css":"./dist/styles/pi-chat.css"},"gitHead":"944ba36753ddb787bb8826507b571e56ff70a0ff","scripts":{"dev":"tsup --watch","build":"tsup","check":"tsx src/components/widget/dictation.check.ts","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"zeus.abhi","email":"zeus@abhi.co"},"repository":{"url":"git+ssh://git@bitbucket.org/abhi-finance/pi.git","type":"git","directory":"packages/pi-chat"},"_npmVersion":"11.17.0","description":"PI AI Chat Widget — drop-in AI assistant for any product","directories":{},"_nodeVersion":"26.5.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.27.7":true},"dependencies":{"img-fx":"^0.5.0","metal-fx":"^1.0.4","remark-gfm":"^4.0.1","border-beam":"^1.3.0","react-markdown":"^10.1.0","react-speech-recognition":"^4.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.7","tsup":"^8.4.0","vite":"^5.4.21","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.7.0","@types/react":"^18.3.0","lucide-react":"^0.460.0","framer-motion":"^11.0.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.7.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","lucide-react":">=0.300.0","framer-motion":">=10.0.0"},"optionalDependencies":{"three":"^0.185.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-chat_0.1.1_1786349560489_0.2769061987884063","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@abhi-finance/pi-chat","version":"0.1.2","keywords":["ai","chat","widget","pi","assistant","sse","streaming"],"license":"SEE LICENSE IN LICENSE","_id":"@abhi-finance/pi-chat@0.1.2","maintainers":[{"name":"zeus.abhi","email":"zeus@abhi.co"}],"homepage":"https://bitbucket.org/abhi-finance/pi#readme","bugs":{"url":"https://bitbucket.org/abhi-finance/pi/issues"},"dist":{"shasum":"120bff5de3cce94740ca03652246bf14a94af096","tarball":"https://registry.npmjs.org/@abhi-finance/pi-chat/-/pi-chat-0.1.2.tgz","fileCount":9,"integrity":"sha512-3SG6IFJy2HQgGTaAgpsgwV0/KfXJKaPyF+sUvLxYpcSiWPFLD+awMvOQzh8HFsz1Y8CBwmp4ANYYr5p5C3VuIg==","signatures":[{"sig":"MEUCIFmI5JGB/Mg6WHTbPaE2G4/nmQ9BbFqeKOdMuATv5xNkAiEA4GY0ZPp3L+0iG5N8ax5G72XrFPQ03X5wbNSi6MwrhJY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":428778},"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"},"./styles.css":"./dist/styles/pi-chat.css"},"gitHead":"10b3652ab3565aa39a072e2f19714cadf625cf65","scripts":{"dev":"tsup --watch","build":"tsup","check":"tsx src/components/widget/dictation.check.ts","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"zeus.abhi","email":"zeus@abhi.co"},"repository":{"url":"git+ssh://git@bitbucket.org/abhi-finance/pi.git","type":"git","directory":"packages/pi-chat"},"_npmVersion":"11.17.0","description":"PI AI Chat Widget — drop-in AI assistant for any product","directories":{},"_nodeVersion":"26.5.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.27.7":true},"dependencies":{"img-fx":"^0.5.0","metal-fx":"^1.0.4","remark-gfm":"^4.0.1","border-beam":"^1.3.0","react-markdown":"^10.1.0","react-speech-recognition":"^4.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.7","tsup":"^8.4.0","vite":"^5.4.21","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.7.0","@types/react":"^18.3.0","lucide-react":"^0.460.0","framer-motion":"^11.0.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.7.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","lucide-react":">=0.300.0","framer-motion":">=10.0.0"},"optionalDependencies":{"three":"^0.185.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-chat_0.1.2_1786425075212_0.5748022071338159","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@abhi-finance/pi-chat","version":"0.1.3","keywords":["ai","chat","widget","pi","assistant","sse","streaming"],"license":"SEE LICENSE IN LICENSE","_id":"@abhi-finance/pi-chat@0.1.3","maintainers":[{"name":"zeus.abhi","email":"zeus@abhi.co"}],"homepage":"https://bitbucket.org/abhi-finance/pi#readme","bugs":{"url":"https://bitbucket.org/abhi-finance/pi/issues"},"dist":{"shasum":"6949965bb1af1c4bb11bd0d45b5e19d3a6c901f4","tarball":"https://registry.npmjs.org/@abhi-finance/pi-chat/-/pi-chat-0.1.3.tgz","fileCount":9,"integrity":"sha512-XNAwBY8SC2kKJRFm/y2A+E7b3Ou/q8i0BXo/hjlPnoEEGMYQiz2tVngY62HHHFhuSeFl5gT8Y8nH9nOrvCyTLg==","signatures":[{"sig":"MEQCIEZfMZSsawnRdvL1m/cj9tJrbcBZS61W9Bh5FJf1CwEtAiB0axil45NJ9g1Jppf7NF+IpAjaVNiUVJLTc3L2o7c8Xg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":431567},"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"},"./styles.css":"./dist/styles/pi-chat.css"},"gitHead":"2eb11fd1493dd7c82879df0b5a1424fd1024ecb4","scripts":{"dev":"tsup --watch","build":"tsup","check":"tsx src/components/widget/dictation.check.ts","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"zeus.abhi","email":"zeus@abhi.co"},"repository":{"url":"git+ssh://git@bitbucket.org/abhi-finance/pi.git","type":"git","directory":"packages/pi-chat"},"_npmVersion":"11.17.0","description":"PI AI Chat Widget — drop-in AI assistant for any product","directories":{},"_nodeVersion":"26.5.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.27.7":true},"dependencies":{"img-fx":"^0.5.0","metal-fx":"^1.0.4","remark-gfm":"^4.0.1","border-beam":"^1.3.0","react-markdown":"^10.1.0","react-speech-recognition":"^4.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.7","tsup":"^8.4.0","vite":"^5.4.21","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.7.0","@types/react":"^18.3.0","lucide-react":"^0.460.0","framer-motion":"^11.0.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.7.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","lucide-react":">=0.300.0","framer-motion":">=10.0.0"},"optionalDependencies":{"three":"^0.185.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-chat_0.1.3_1786427587117_0.7342310253464877","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@abhi-finance/pi-chat","version":"0.1.4","keywords":["ai","chat","widget","pi","assistant","sse","streaming"],"license":"SEE LICENSE IN LICENSE","_id":"@abhi-finance/pi-chat@0.1.4","maintainers":[{"name":"zeus.abhi","email":"zeus@abhi.co"}],"homepage":"https://bitbucket.org/abhi-finance/pi#readme","bugs":{"url":"https://bitbucket.org/abhi-finance/pi/issues"},"dist":{"shasum":"d765030352f764f1829fec4e258924d0b6854eeb","tarball":"https://registry.npmjs.org/@abhi-finance/pi-chat/-/pi-chat-0.1.4.tgz","fileCount":9,"integrity":"sha512-LRSxlIorSy4yzAMTZKUiCafYtvH9gpkU8vJUrd+qwieWEBrJRSNQPNqT/Fonjbsd0ftXfK1q11f09dElVYw14g==","signatures":[{"sig":"MEQCIGaKMh+CsO96cCPrjsjezpmNsrW+iHHRT/hRDDJdV/u0AiBMnmMhDN+TWvnZTRnOgj5SmUs3x1Ou3rBlnzo+z15WCw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":441436},"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"},"./styles.css":"./dist/styles/pi-chat.css"},"gitHead":"2eb11fd1493dd7c82879df0b5a1424fd1024ecb4","scripts":{"dev":"tsup --watch","build":"tsup","check":"tsx src/components/widget/dictation.check.ts","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"zeus.abhi","email":"zeus@abhi.co"},"repository":{"url":"git+ssh://git@bitbucket.org/abhi-finance/pi.git","type":"git","directory":"packages/pi-chat"},"_npmVersion":"11.17.0","description":"PI AI Chat Widget — drop-in AI assistant for any product","directories":{},"_nodeVersion":"26.5.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.27.7":true},"dependencies":{"img-fx":"^0.5.0","metal-fx":"^1.0.4","remark-gfm":"^4.0.1","border-beam":"^1.3.0","react-markdown":"^10.1.0","react-speech-recognition":"^4.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.7","tsup":"^8.4.0","vite":"^5.4.21","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.7.0","@types/react":"^18.3.0","lucide-react":"^0.460.0","framer-motion":"^11.0.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.7.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","lucide-react":">=0.300.0","framer-motion":">=10.0.0"},"optionalDependencies":{"three":"^0.185.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-chat_0.1.4_1786432261000_0.771065744631589","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@abhi-finance/pi-chat","version":"0.1.5","keywords":["ai","chat","widget","pi","assistant","sse","streaming"],"license":"SEE LICENSE IN LICENSE","_id":"@abhi-finance/pi-chat@0.1.5","maintainers":[{"name":"zeus.abhi","email":"zeus@abhi.co"}],"homepage":"https://bitbucket.org/abhi-finance/pi#readme","bugs":{"url":"https://bitbucket.org/abhi-finance/pi/issues"},"dist":{"shasum":"8156b1342237cb4cab41fc74d4d7122de01ca520","tarball":"https://registry.npmjs.org/@abhi-finance/pi-chat/-/pi-chat-0.1.5.tgz","fileCount":9,"integrity":"sha512-ciL41RBRYsUHGb0e4LiKFLsAotL8ZWCd8W3v4AR4th3wC3bC/SM5sfUouSi5dzZbXiRx8kuU6omDsx30nusE3A==","signatures":[{"sig":"MEUCIQCvaDkAhjbQd2qf+ilLfquvAD3H6uZyGq5DqWj+6F5xYQIgV/ouBJ7eoE5XJWHp5XmQsX96JQAtjJR5O/2z8SJM4Xs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":436808},"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"},"./styles.css":"./dist/styles/pi-chat.css"},"gitHead":"3eb57d5cb3ecd75c554ab54886f9069a2d172881","scripts":{"dev":"tsup --watch","build":"tsup","check":"tsx src/components/widget/dictation.check.ts","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"zeus.abhi","email":"zeus@abhi.co"},"repository":{"url":"git+ssh://git@bitbucket.org/abhi-finance/pi.git","type":"git","directory":"packages/pi-chat"},"_npmVersion":"11.17.0","description":"PI AI Chat Widget — drop-in AI assistant for any product","directories":{},"_nodeVersion":"26.5.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.27.7":true},"dependencies":{"img-fx":"^0.5.0","metal-fx":"^1.0.4","remark-gfm":"^4.0.1","border-beam":"^1.3.0","react-markdown":"^10.1.0","react-speech-recognition":"^4.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.7","tsup":"^8.4.0","vite":"^5.4.21","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.7.0","@types/react":"^18.3.0","lucide-react":"^0.460.0","framer-motion":"^11.0.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.7.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","lucide-react":">=0.300.0","framer-motion":">=10.0.0"},"optionalDependencies":{"three":"^0.185.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-chat_0.1.5_1786436511600_0.43096033545178747","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@abhi-finance/pi-chat","version":"0.1.6","keywords":["ai","chat","widget","pi","assistant","sse","streaming"],"license":"SEE LICENSE IN LICENSE","_id":"@abhi-finance/pi-chat@0.1.6","maintainers":[{"name":"zeus.abhi","email":"zeus@abhi.co"}],"homepage":"https://bitbucket.org/abhi-finance/pi#readme","bugs":{"url":"https://bitbucket.org/abhi-finance/pi/issues"},"dist":{"shasum":"c77a6d784ed6aeda8ded639a06e73c632e51ded8","tarball":"https://registry.npmjs.org/@abhi-finance/pi-chat/-/pi-chat-0.1.6.tgz","fileCount":9,"integrity":"sha512-4Y8fwwsJCsuorFSGSGi9qDEgTl+iYAh3oXZPp0c4AOWxvBtdIXGl4H7C5jrsCZ9++oVNobXokMyyci3+A2f6aw==","signatures":[{"sig":"MEYCIQDcdS8LyfMRDv21I51eU5ZfZO+v7CdBXsIXFulgUTH2TAIhAJ5+d1WQgXsBEFDC1YR17PLlwdl5nkptJlLACU2Ydwso","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":442748},"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"},"./styles.css":"./dist/styles/pi-chat.css"},"gitHead":"5ae376b6ba9eecaa8d321d1e71b16c364d3104dd","scripts":{"dev":"tsup --watch","build":"tsup","check":"tsx src/components/widget/dictation.check.ts","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"zeus.abhi","email":"zeus@abhi.co"},"repository":{"url":"git+ssh://git@bitbucket.org/abhi-finance/pi.git","type":"git","directory":"packages/pi-chat"},"_npmVersion":"11.17.0","description":"PI AI Chat Widget — drop-in AI assistant for any product","directories":{},"_nodeVersion":"26.5.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.27.7":true},"dependencies":{"img-fx":"^0.5.0","metal-fx":"^1.0.4","remark-gfm":"^4.0.1","border-beam":"^1.3.0","react-markdown":"^10.1.0","react-speech-recognition":"^4.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.7","tsup":"^8.4.0","vite":"^5.4.21","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.7.0","@types/react":"^18.3.0","lucide-react":"^0.460.0","framer-motion":"^11.0.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.7.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","lucide-react":">=0.300.0","framer-motion":">=10.0.0"},"optionalDependencies":{"three":"^0.185.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-chat_0.1.6_1786446377433_0.39637736696568027","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@abhi-finance/pi-chat","version":"0.1.7","keywords":["ai","chat","widget","pi","assistant","sse","streaming"],"license":"SEE LICENSE IN LICENSE","_id":"@abhi-finance/pi-chat@0.1.7","maintainers":[{"name":"zeus.abhi","email":"zeus@abhi.co"}],"homepage":"https://bitbucket.org/abhi-finance/pi#readme","bugs":{"url":"https://bitbucket.org/abhi-finance/pi/issues"},"dist":{"shasum":"e23a26a84e27b3d843c5e5763a737f68b0ed03e7","tarball":"https://registry.npmjs.org/@abhi-finance/pi-chat/-/pi-chat-0.1.7.tgz","fileCount":9,"integrity":"sha512-eYWDo4oauJs7Famy1luHvXa37VeTOE6CMRF8MUXy+zhh4JwgQ0gOgydNe743wibUixruUiDtxDP+O3z/JdAEQA==","signatures":[{"sig":"MEUCICVtqnVU/tK+nMYEiPojygYWmCAHzIo2LlqVMa2LfdB3AiEA6j4qeUNNViL9fphrFzhvWhXIwEOrjo8nFHpRJQr3M7o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":579665},"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"},"./styles.css":"./dist/styles/pi-chat.css"},"gitHead":"3d734b34303789df0b8d99653c539ec43b6e3689","scripts":{"dev":"tsup --watch","build":"tsup","check":"tsx src/components/widget/dictation.check.ts","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"zeus.abhi","email":"zeus@abhi.co"},"repository":{"url":"git+ssh://git@bitbucket.org/abhi-finance/pi.git","type":"git","directory":"packages/pi-chat"},"_npmVersion":"11.17.0","description":"PI AI Chat Widget — drop-in AI assistant for any product","directories":{},"_nodeVersion":"26.5.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.27.7":true},"dependencies":{"img-fx":"^0.5.0","metal-fx":"^1.0.4","remark-gfm":"^4.0.1","border-beam":"^1.3.0","react-markdown":"^10.1.0","react-speech-recognition":"^4.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.7","tsup":"^8.4.0","vite":"^5.4.21","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.7.0","@types/react":"^18.3.0","lucide-react":"^0.460.0","framer-motion":"^11.0.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.7.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","lucide-react":">=0.300.0","framer-motion":">=10.0.0"},"optionalDependencies":{"three":"^0.185.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-chat_0.1.7_1787055944923_0.34362895007173977","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"@abhi-finance/pi-chat","version":"0.1.16","keywords":["ai","chat","widget","pi","assistant","sse","streaming"],"license":"SEE LICENSE IN LICENSE","_id":"@abhi-finance/pi-chat@0.1.16","maintainers":[{"name":"zeus.abhi","email":"zeus@abhi.co"}],"homepage":"https://bitbucket.org/abhi-finance/pi#readme","bugs":{"url":"https://bitbucket.org/abhi-finance/pi/issues"},"dist":{"shasum":"a0f1fd6d07633a2b5658fea05107d5804ed3c6a2","tarball":"https://registry.npmjs.org/@abhi-finance/pi-chat/-/pi-chat-0.1.16.tgz","fileCount":9,"integrity":"sha512-tgx9mgIIte27DsNsVOxY92ae7a9/vzQWesr0dACPNIXXgka2/MpGTaj9N2nmzt8lcP3WCewFhzfVsWlfxPVHlw==","signatures":[{"sig":"MEUCIQCm22eTXhafdiEeB4rBmFLuiOwyTtfj9Dekb24TfY9rbgIgYfUHe4K1BEBLMoU09+sNyhkLtCrfm3Qh89dKtv8UD/k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":697682},"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"},"./styles.css":"./dist/styles/pi-chat.css"},"gitHead":"ae328481f006765d21434d05a3dc24384d65879b","scripts":{"dev":"tsup --watch","test":"tsx --test src/**/*.test.ts","build":"tsup","check":"tsx src/components/widget/dictation.check.ts","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"zeus.abhi","email":"zeus@abhi.co"},"repository":{"url":"git+ssh://git@bitbucket.org/abhi-finance/pi.git","type":"git","directory":"packages/pi-chat"},"_npmVersion":"11.19.0","description":"PI AI Chat Widget — drop-in AI assistant for any product","directories":{},"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.27.7":true},"dependencies":{"img-fx":"^0.5.0","metal-fx":"^1.0.4","remark-gfm":"^4.0.1","border-beam":"^1.3.0","react-markdown":"^10.1.0","react-speech-recognition":"^4.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.7","tsup":"^8.4.0","vite":"^5.4.21","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.7.0","@types/react":"^18.3.0","lucide-react":"^0.460.0","framer-motion":"^11.0.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.7.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","lucide-react":">=0.300.0","framer-motion":">=10.0.0"},"optionalDependencies":{"three":"^0.185.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-chat_0.1.16_1787549085215_0.6147341795950907","host":"s3://npm-registry-packages-npm-production"}},"0.1.17":{"name":"@abhi-finance/pi-chat","version":"0.1.17","keywords":["ai","chat","widget","pi","assistant","sse","streaming"],"license":"SEE LICENSE IN LICENSE","_id":"@abhi-finance/pi-chat@0.1.17","maintainers":[{"name":"zeus.abhi","email":"zeus@abhi.co"}],"homepage":"https://bitbucket.org/abhi-finance/pi#readme","bugs":{"url":"https://bitbucket.org/abhi-finance/pi/issues"},"dist":{"shasum":"b3978e86743e8ad414a4c762b3e4e0763688e0e0","tarball":"https://registry.npmjs.org/@abhi-finance/pi-chat/-/pi-chat-0.1.17.tgz","fileCount":9,"integrity":"sha512-aivEK5uKwjT5csbFUr0kkLVt80EmboAk9GuWhfGsiD17aXzCE9rmBFj/4doXFO5C4ealdWYZR62xIhw9i2bOUw==","signatures":[{"sig":"MEQCIFoJcXgAuRri4HkmY9mR7WcXkw4663xnqczisFFELA/5AiBrb/9mwOp31reHSIKyKz60uRlUfDvEv6xcQkvg609wVw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":701137},"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"},"./styles.css":"./dist/styles/pi-chat.css"},"gitHead":"9bc5a365e57e1f45aeb2ab9457643041dc893e5d","scripts":{"dev":"tsup --watch","test":"tsx --test src/**/*.test.ts","build":"tsup","check":"tsx src/components/widget/dictation.check.ts","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"zeus.abhi","email":"zeus@abhi.co"},"repository":{"url":"git+ssh://git@bitbucket.org/abhi-finance/pi.git","type":"git","directory":"packages/pi-chat"},"_npmVersion":"11.19.0","description":"PI AI Chat Widget — drop-in AI assistant for any product","directories":{},"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.27.7":true},"dependencies":{"img-fx":"^0.5.0","metal-fx":"^1.0.4","remark-gfm":"^4.0.1","border-beam":"^1.3.0","react-markdown":"^10.1.0","react-speech-recognition":"^4.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.7","tsup":"^8.4.0","vite":"^5.4.21","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.7.0","@types/react":"^18.3.0","lucide-react":"^0.460.0","framer-motion":"^11.0.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.7.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","lucide-react":">=0.300.0","framer-motion":">=10.0.0"},"optionalDependencies":{"three":"^0.185.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-chat_0.1.17_1787549319884_0.7798431270695869","host":"s3://npm-registry-packages-npm-production"}},"0.1.18":{"name":"@abhi-finance/pi-chat","version":"0.1.18","keywords":["ai","chat","widget","pi","assistant","sse","streaming"],"license":"SEE LICENSE IN LICENSE","_id":"@abhi-finance/pi-chat@0.1.18","maintainers":[{"name":"zeus.abhi","email":"zeus@abhi.co"}],"homepage":"https://bitbucket.org/abhi-finance/pi#readme","bugs":{"url":"https://bitbucket.org/abhi-finance/pi/issues"},"dist":{"shasum":"f79847195aca851e055e49ded7acb36ef9bda92c","tarball":"https://registry.npmjs.org/@abhi-finance/pi-chat/-/pi-chat-0.1.18.tgz","fileCount":9,"integrity":"sha512-88fx4yDn/JsJst2S/wkS3cWBg8zG9eJ5OmMCeiqmbTU3n3kLiQpUfLp9uhCLcWxbGrj0af1fiEWjU95THBzNLA==","signatures":[{"sig":"MEUCID+8ihMrCm0FGMs9sPqUKKjqL26HhZME7/PAarP+b/dbAiEAwlsyWKQVv8HSapijFcBvJM0caBpP5lNvICL7XNZdk60=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":702706},"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"},"./styles.css":"./dist/styles/pi-chat.css"},"gitHead":"3fa1d1722728fbdd8f0378521d9e7b4d0e02f0a5","scripts":{"dev":"tsup --watch","test":"tsx --test src/**/*.test.ts","build":"tsup","check":"tsx src/components/widget/dictation.check.ts","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"zeus.abhi","email":"zeus@abhi.co"},"repository":{"url":"git+ssh://git@bitbucket.org/abhi-finance/pi.git","type":"git","directory":"packages/pi-chat"},"_npmVersion":"11.19.0","description":"PI AI Chat Widget — drop-in AI assistant for any product","directories":{},"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.27.7":true},"dependencies":{"img-fx":"^0.5.0","metal-fx":"^1.0.4","remark-gfm":"^4.0.1","border-beam":"^1.3.0","react-markdown":"^10.1.0","react-speech-recognition":"^4.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.7","tsup":"^8.4.0","vite":"^5.4.21","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.7.0","@types/react":"^18.3.0","lucide-react":"^0.460.0","framer-motion":"^11.0.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.7.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","lucide-react":">=0.300.0","framer-motion":">=10.0.0"},"optionalDependencies":{"three":"^0.185.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-chat_0.1.18_1787554755252_0.8624674263732242","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@abhi-finance/pi-chat","version":"0.2.0","keywords":["ai","chat","widget","pi","assistant","sse","streaming"],"license":"SEE LICENSE IN LICENSE","_id":"@abhi-finance/pi-chat@0.2.0","maintainers":[{"name":"zeus.abhi","email":"zeus@abhi.co"}],"homepage":"https://bitbucket.org/abhi-finance/pi#readme","bugs":{"url":"https://bitbucket.org/abhi-finance/pi/issues"},"dist":{"shasum":"1ef31b6d6d762eb5c78bc76c4c1b514069ebeae5","tarball":"https://registry.npmjs.org/@abhi-finance/pi-chat/-/pi-chat-0.2.0.tgz","fileCount":12,"integrity":"sha512-g8tvMk10Jyvft522Gef5ck3yu22u3Ffa5SzU2+veRfQieNpJwYmRck3ja3MpQi2zOA+MHfJBuPb1+vX3VXDfkw==","signatures":[{"sig":"MEQCIDWGIM5JPJ3i5nxOk+9ba2RFy8uDVam0Ww4k8c/ytkY5AiBun6ZtkGgNdLh5BWMTbaaXJ6F678bq7Wst94DiVx/9vQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1474155},"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"},"./p-flow.css":"./dist/styles/p-flow.css","./styles.css":"./dist/styles/pi-chat.css"},"gitHead":"14be584243a2e22a9b27cb1cbb320980af56e15b","scripts":{"dev":"tsup --watch","test":"tsx --test src/**/*.test.ts","build":"tsup","check":"tsx src/components/widget/dictation.check.ts","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"zeus.abhi","email":"zeus@abhi.co"},"repository":{"url":"git+ssh://git@bitbucket.org/abhi-finance/pi.git","type":"git","directory":"packages/pi-chat"},"_npmVersion":"11.19.0","description":"PI AI Chat Widget — drop-in AI assistant for any product","directories":{},"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.27.7":true},"dependencies":{"img-fx":"^0.5.0","metal-fx":"^1.0.4","remark-gfm":"^4.0.1","border-beam":"^1.3.0","react-markdown":"^10.1.0","react-speech-recognition":"^4.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.7","tsup":"^8.4.0","vite":"^5.4.21","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.7.0","@types/react":"^18.3.0","lucide-react":"^0.460.0","@xyflow/react":"^12.11.3","framer-motion":"^11.0.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.7.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","lucide-react":">=0.300.0","@xyflow/react":">=12.0.0","framer-motion":">=10.0.0"},"optionalDependencies":{"three":"^0.185.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-chat_0.2.0_1788244133275_0.5443026245787697","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@abhi-finance/pi-chat","version":"0.2.1","keywords":["ai","chat","widget","pi","assistant","sse","streaming"],"license":"SEE LICENSE IN LICENSE","_id":"@abhi-finance/pi-chat@0.2.1","maintainers":[{"name":"zeus.abhi","email":"zeus@abhi.co"}],"homepage":"https://bitbucket.org/abhi-finance/pi#readme","bugs":{"url":"https://bitbucket.org/abhi-finance/pi/issues"},"dist":{"shasum":"ff8c3266b074fbf3d293096f34e801420433382b","tarball":"https://registry.npmjs.org/@abhi-finance/pi-chat/-/pi-chat-0.2.1.tgz","fileCount":12,"integrity":"sha512-4k0s+8GAX52nSfKXDYnkhExZ6E4rh3rCklaFCKXQYmHAQY8FLg/d+WKNMZB0WR8gaCRQyqOuD29ovfMpcOwe3g==","signatures":[{"sig":"MEUCID9JHWgZP4zriGpKpjY9G6xNIUBbZ8AcA437kR2VILKXAiEAkv4jPzPScSUW2UXGajM1DI6nKwG5VCgXrD4v0pDxWis=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1479753},"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"},"./p-flow.css":"./dist/styles/p-flow.css","./styles.css":"./dist/styles/pi-chat.css"},"gitHead":"f81b92b0f93b125538d95c055ebd6cb13e2e31db","scripts":{"dev":"tsup --watch","test":"tsx --test src/**/*.test.ts","build":"tsup","check":"tsx src/components/widget/dictation.check.ts","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"zeus.abhi","email":"zeus@abhi.co"},"repository":{"url":"git+ssh://git@bitbucket.org/abhi-finance/pi.git","type":"git","directory":"packages/pi-chat"},"_npmVersion":"11.19.0","description":"PI AI Chat Widget — drop-in AI assistant for any product","directories":{},"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.27.7":true},"dependencies":{"img-fx":"^0.5.0","metal-fx":"^1.0.4","remark-gfm":"^4.0.1","border-beam":"^1.3.0","react-markdown":"^10.1.0","react-speech-recognition":"^4.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.7","tsup":"^8.4.0","vite":"^5.4.21","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.7.0","@types/react":"^18.3.0","lucide-react":"^0.460.0","@xyflow/react":"^12.11.3","framer-motion":"^11.0.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.7.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","lucide-react":">=0.300.0","@xyflow/react":">=12.0.0","framer-motion":">=10.0.0"},"optionalDependencies":{"three":"^0.185.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-chat_0.2.1_1788244925961_0.08022008557901361","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@abhi-finance/pi-chat","version":"0.2.2","keywords":["ai","chat","widget","pi","assistant","sse","streaming"],"license":"SEE LICENSE IN LICENSE","_id":"@abhi-finance/pi-chat@0.2.2","maintainers":[{"name":"zeus.abhi","email":"zeus@abhi.co"}],"dist":{"shasum":"19d2e13955ffcc121a8a0e9cab770b2282d1b49f","tarball":"https://registry.npmjs.org/@abhi-finance/pi-chat/-/pi-chat-0.2.2.tgz","fileCount":12,"integrity":"sha512-SZTMI5fAn2AjWEtLgIevmtlwm2WnkBWHCm8WIGm4G57fVrsixLdI8Jo6ojz0sSKCz8keriil2VBQ+wYaC5rvpQ==","signatures":[{"sig":"MEUCIFCgkDndZHqOF0RM9mZoesGYknNcoPi/tzFYjX8Gcm6wAiEAqYEDgya5L9B09o6oH8GZwfcLGqdaRP7f8mCBo33eahU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1572202},"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"},"./p-flow.css":"./dist/styles/p-flow.css","./styles.css":"./dist/styles/pi-chat.css"},"scripts":{"dev":"tsup --watch","test":"tsx --test src/**/*.test.ts","build":"tsup","check":"tsx src/components/widget/dictation.check.ts","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"zeus.abhi","email":"zeus@abhi.co"},"repository":{"url":"git+ssh://git@bitbucket.org/abhi-finance/pi.git","type":"git","directory":"packages/pi-chat"},"description":"PI AI Chat Widget — drop-in AI assistant for any product","directories":{},"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.27.7":true},"dependencies":{"img-fx":"^0.5.0","metal-fx":"^1.0.4","remark-gfm":"^4.0.1","border-beam":"^1.3.0","react-markdown":"^10.1.0","react-speech-recognition":"^4.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.7","tsup":"^8.4.0","vite":"^5.4.21","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.7.0","@types/react":"^18.3.0","lucide-react":"^0.460.0","@xyflow/react":"^12.11.3","framer-motion":"^11.0.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.7.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","lucide-react":">=0.300.0","@xyflow/react":">=12.0.0","framer-motion":">=10.0.0"},"optionalDependencies":{"three":"^0.185.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-chat_0.2.2_1788953012495_0.19250711915806606","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@abhi-finance/pi-chat","version":"0.2.3","keywords":["ai","chat","widget","pi","assistant","sse","streaming"],"license":"SEE LICENSE IN LICENSE","_id":"@abhi-finance/pi-chat@0.2.3","maintainers":[{"name":"zeus.abhi","email":"zeus@abhi.co"}],"homepage":"https://bitbucket.org/abhi-finance/pi#readme","bugs":{"url":"https://bitbucket.org/abhi-finance/pi/issues"},"dist":{"shasum":"50e8af78b5e6f88f2c062017b4c96c2464a7dc42","tarball":"https://registry.npmjs.org/@abhi-finance/pi-chat/-/pi-chat-0.2.3.tgz","fileCount":12,"integrity":"sha512-XSWz45OXAk1UCOK/EPrHek8kOI7h5w+YdSs2AankUDfAb+MP/9IwxCYeVWhkxFU7XqE3i4tp+1Id7P5sqeX5Mw==","signatures":[{"sig":"MEUCIQCaGqNVdtj5XxdOV1Ja1Pr3k4Hjlg6RmspPJm4AAw5+PgIgaiV3p+3tlbyDAY7QsCJOjClSllE3MNQvsMQfxGkszkc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1627707},"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"},"./p-flow.css":"./dist/styles/p-flow.css","./styles.css":"./dist/styles/pi-chat.css"},"gitHead":"328bf34a52fda8b4045348beaeaeb1e835f54150","scripts":{"dev":"tsup --watch","test":"tsx --test src/**/*.test.ts","build":"tsup","check":"tsx src/components/widget/dictation.check.ts","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"zeus.abhi","email":"zeus@abhi.co"},"repository":{"url":"git+ssh://git@bitbucket.org/abhi-finance/pi.git","type":"git","directory":"packages/pi-chat"},"_npmVersion":"11.19.0","description":"PI AI Chat Widget — drop-in AI assistant for any product","directories":{},"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.27.7":true},"dependencies":{"img-fx":"^0.5.0","metal-fx":"^1.0.4","remark-gfm":"^4.0.1","border-beam":"^1.3.0","react-markdown":"^10.1.0","react-speech-recognition":"^4.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.7","tsup":"^8.4.0","vite":"^5.4.21","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.7.0","@types/react":"^18.3.0","lucide-react":"^0.460.0","@xyflow/react":"^12.11.3","framer-motion":"^11.0.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.7.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","lucide-react":">=0.300.0","@xyflow/react":">=12.0.0","framer-motion":">=10.0.0"},"optionalDependencies":{"three":"^0.185.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-chat_0.2.3_1789109664981_0.23895602785266945","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@abhi-finance/pi-chat","version":"0.2.4","keywords":["ai","chat","widget","pi","assistant","sse","streaming"],"license":"SEE LICENSE IN LICENSE","_id":"@abhi-finance/pi-chat@0.2.4","maintainers":[{"name":"zeus.abhi","email":"zeus@abhi.co"}],"homepage":"https://bitbucket.org/abhi-finance/pi#readme","bugs":{"url":"https://bitbucket.org/abhi-finance/pi/issues"},"dist":{"shasum":"5f6dcc9eaba9f2b64b7f8fe2fca89af5714d5ede","tarball":"https://registry.npmjs.org/@abhi-finance/pi-chat/-/pi-chat-0.2.4.tgz","fileCount":12,"integrity":"sha512-MCg5vwrIkcXqaKXEz2hdWQNxdzuNx7mvilMvIY9lwBAc95SxkRyvj92jJf5i8o7aPbnPQEJIkp7Gc2yRZqRZug==","signatures":[{"sig":"MEQCIHnU4RNn3iqAEBVmD62qI8ECIAreNWPMYU8d/uSAWRd+AiByAB6ARMKlGQKAuNG4psAIDqanCCCJVr+9GyimWwNsAw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2810685},"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"},"./p-flow.css":"./dist/styles/p-flow.css","./styles.css":"./dist/styles/pi-chat.css"},"gitHead":"328bf34a52fda8b4045348beaeaeb1e835f54150","scripts":{"dev":"tsup --watch","test":"tsx --test src/**/*.test.ts","build":"tsup","check":"tsx src/components/widget/dictation.check.ts","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"zeus.abhi","email":"zeus@abhi.co"},"repository":{"url":"git+ssh://git@bitbucket.org/abhi-finance/pi.git","type":"git","directory":"packages/pi-chat"},"_npmVersion":"11.19.0","description":"PI AI Chat Widget — drop-in AI assistant for any product","directories":{},"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.27.7":true},"dependencies":{"img-fx":"^0.5.0","metal-fx":"^1.0.4","remark-gfm":"^4.0.1","border-beam":"^1.3.0","react-markdown":"^10.1.0","react-speech-recognition":"^4.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.7","tsup":"^8.4.0","vite":"^5.4.21","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.7.0","@types/react":"^18.3.0","lucide-react":"^0.460.0","@xyflow/react":"^12.11.3","framer-motion":"^11.0.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.7.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","lucide-react":">=0.300.0","framer-motion":">=10.0.0"},"optionalDependencies":{"three":"^0.185.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-chat_0.2.4_1789110046837_0.392232727649515","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@abhi-finance/pi-chat","version":"0.2.5","keywords":["ai","chat","widget","pi","assistant","sse","streaming"],"license":"SEE LICENSE IN LICENSE","_id":"@abhi-finance/pi-chat@0.2.5","maintainers":[{"name":"zeus.abhi","email":"zeus@abhi.co"}],"homepage":"https://bitbucket.org/abhi-finance/pi#readme","bugs":{"url":"https://bitbucket.org/abhi-finance/pi/issues"},"dist":{"shasum":"ee49b40957232af4d1013dc80d7a6f0c56b3c165","tarball":"https://registry.npmjs.org/@abhi-finance/pi-chat/-/pi-chat-0.2.5.tgz","fileCount":12,"integrity":"sha512-44H7sZ9Z3QrLuq9Ogr5gx9I6JJg4GU2AhShPhnn6RJkh1192ORpUzNNw0IoY3QlqIWMrbFiwe+f6cM4/6yK/kw==","signatures":[{"sig":"MEUCIQCIvVyaDZxZmGqYzQP/ykrR9noFsgeuLv//7ckWAUyoywIgW9LB2h3JeWBbcoeshmxXwIB/Maa72wpwG2kmCNBf3IY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1627674},"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"},"./p-flow.css":"./dist/styles/p-flow.css","./styles.css":"./dist/styles/pi-chat.css"},"gitHead":"328bf34a52fda8b4045348beaeaeb1e835f54150","scripts":{"dev":"tsup --watch","test":"tsx --test src/**/*.test.ts","build":"tsup","check":"tsx src/components/widget/dictation.check.ts","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"zeus.abhi","email":"zeus@abhi.co"},"repository":{"url":"git+ssh://git@bitbucket.org/abhi-finance/pi.git","type":"git","directory":"packages/pi-chat"},"_npmVersion":"11.19.0","description":"PI AI Chat Widget — drop-in AI assistant for any product","directories":{},"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.27.7":true},"dependencies":{"img-fx":"^0.5.0","metal-fx":"^1.0.4","remark-gfm":"^4.0.1","border-beam":"^1.3.0","@xyflow/react":"^12.11.3","react-markdown":"^10.1.0","react-speech-recognition":"^4.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.7","tsup":"^8.4.0","vite":"^5.4.21","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.7.0","@types/react":"^18.3.0","lucide-react":"^0.460.0","framer-motion":"^11.0.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.7.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","lucide-react":">=0.300.0","framer-motion":">=10.0.0"},"optionalDependencies":{"three":"^0.185.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-chat_0.2.5_1789112265498_0.6161500531291195","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"_id":"@abhi-finance/pi-chat@0.2.6","bugs":{"url":"https://bitbucket.org/abhi-finance/pi/issues"},"dist":{"shasum":"3d67bda7d18aab6b552c16325aaac09e9313f47c","tarball":"https://registry.npmjs.org/@abhi-finance/pi-chat/-/pi-chat-0.2.6.tgz","fileCount":12,"integrity":"sha512-Sj0NKZNZPHa2inqdQvzrIOB0dd3rjy9EWA4vo/jcSd+uDseRDo4urPQx93Hg+kqOxMnZ+i9sEe/EK6WyYKHbPQ==","signatures":[{"sig":"MEYCIQDrtvFwqXrIGmdFNzCYKQ/b/iX6DxkdbKzDqA7/AoaGWwIhAJ1SN2wLCKUKFEMU3Hfsw5U/r51ZmqAB8krPOseW2hIr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIF0b1j5ghm10sUFuUDh5EZ82kgl70OFwf9wBjlmGZXb1AiA3U15Q4/gaQAsUhwrhpDyYeS6nKpu6utMXruq5WMn39Q=="}],"unpackedSize":1635982},"main":"dist/index.js","name":"@abhi-finance/pi-chat","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./p-flow.css":"./dist/styles/p-flow.css","./styles.css":"./dist/styles/pi-chat.css"},"gitHead":"1bcf3b7df97892b92240a1d2ea45e6f75ecc2a11","license":"SEE LICENSE IN LICENSE","scripts":{"dev":"tsup --watch","test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","check":"tsx src/components/widget/dictation.check.ts","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"version":"0.2.6","_npmUser":{"name":"zeus.abhi","email":"zeus@abhi.co"},"homepage":"https://bitbucket.org/abhi-finance/pi#readme","keywords":["ai","chat","widget","pi","assistant","sse","streaming"],"repository":{"url":"git+ssh://git@bitbucket.org/abhi-finance/pi.git","type":"git","directory":"packages/pi-chat"},"_npmVersion":"11.19.0","description":"PI AI Chat Widget — drop-in AI assistant for any product","directories":{},"maintainers":[{"name":"zeus.abhi","email":"zeus@abhi.co"}],"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.27.7":true},"dependencies":{"img-fx":"^0.5.0","metal-fx":"^1.0.4","remark-gfm":"^4.0.1","border-beam":"^1.3.0","@xyflow/react":"^12.11.3","react-markdown":"^10.1.0","react-speech-recognition":"^4.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.7","tsup":"^8.4.0","vite":"^5.4.21","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.7.0","@types/react":"^18.3.0","lucide-react":"^0.460.0","framer-motion":"^11.0.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.7.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","lucide-react":">=0.300.0","framer-motion":">=10.0.0"},"optionalDependencies":{"three":"^0.185.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-chat_0.2.6_1790829669289_0.007605990249759165"}}},"time":{"created":"2026-08-05T10:04:30.831Z","modified":"2026-10-01T04:41:09.575Z","0.1.0":"2026-08-05T10:04:31.168Z","0.1.1":"2026-08-10T08:12:40.639Z","0.1.2":"2026-08-11T05:11:15.357Z","0.1.3":"2026-08-11T05:53:07.260Z","0.1.4":"2026-08-11T07:11:01.153Z","0.1.5":"2026-08-11T08:21:51.738Z","0.1.6":"2026-08-11T11:06:17.579Z","0.1.7":"2026-08-18T12:25:45.077Z","0.1.16":"2026-08-24T05:24:45.384Z","0.1.17":"2026-08-24T05:28:40.043Z","0.1.18":"2026-08-24T06:59:15.398Z","0.2.0":"2026-09-01T06:28:53.435Z","0.2.1":"2026-09-01T06:42:06.213Z","0.2.2":"2026-09-09T11:23:32.676Z","0.2.3":"2026-09-11T06:54:25.179Z","0.2.4":"2026-09-11T07:00:46.979Z","0.2.5":"2026-09-11T07:37:45.654Z","0.2.6":"2026-10-01T04:41:09.399Z"},"bugs":{"url":"https://bitbucket.org/abhi-finance/pi/issues"},"license":"SEE LICENSE IN LICENSE","homepage":"https://bitbucket.org/abhi-finance/pi#readme","keywords":["ai","chat","widget","pi","assistant","sse","streaming"],"repository":{"url":"git+ssh://git@bitbucket.org/abhi-finance/pi.git","type":"git","directory":"packages/pi-chat"},"description":"PI AI Chat Widget — drop-in AI assistant for any product","maintainers":[{"name":"zeus.abhi","email":"zeus@abhi.co"}],"readme":"# @abhi-finance/pi-chat\n\nDrop-in AI assistant for the **PI Platform**. Install once and get a full AI chat\nexperience in any product — streaming, Direct/Pipeline modes, tool-call\ntransparency, document upload, voice, a prompt library, a visual workflow builder\n(P-Flow), **server-rendered charts**, and **server-managed theming** (colors,\nfonts, icons, light/dark, chart palette) — all configurable per product and per\nuser from the server, with a self-service theme editor for end users.\n\n---\n\n## Contents\n\n- [Install](#install)\n- [Integration options](#integration-options)\n- [1. Full widget](#1-full-widget)\n- [2. Headless (hooks)](#2-headless-hooks)\n- [3. Services (low-level API)](#3-services-low-level-api)\n- [Theming](#theming)\n- [Server-managed feature config](#server-managed-feature-config)\n- [P-Flow](#p-flow)\n- [Voice & audio](#voice--audio)\n- [Charts](#charts)\n- [Configuration (`PiChatConfig`)](#configuration-pichatconfig)\n- [Full API reference](#full-api-reference)\n\n---\n\n## Install\n\n```bash\nnpm install @abhi-finance/pi-chat\n```\n\nPeer dependencies (installed by most hosts already): `react >= 18`, `react-dom >= 18`,\n`framer-motion >= 10`, `lucide-react >= 0.300`, `@xyflow/react >= 12`.\n\n---\n\n## Integration options\n\nPI offers three ways to integrate, from most to least opinionated:\n\n| Level | What you get | Use when |\n|---|---|---|\n| **[1. Full widget](#1-full-widget)** | Complete floating chat UI (panel, header, theming, uploads, voice, library, P-Flow) | You want the whole assistant with zero UI work |\n| **[2. Headless (hooks)](#2-headless-hooks)** | Chat/upload/library logic, your own UI | You want custom rendering |\n| **[3. Services](#3-services-low-level-api)** | Raw authenticated HTTP + SSE + prompt-library + document APIs | You want full control over the transport |\n\nAll three share the same `PiChatConfig` and resolve the same server-side\nfeatures + theme.\n\n---\n\n## 1. Full widget\n\n```tsx\nimport { AIChatWidget } from '@abhi-finance/pi-chat'\nimport '@abhi-finance/pi-chat/styles.css'\n\nfunction App() {\n  return (\n    <AIChatWidget\n      config={{\n        piUrl: 'https://pi.abhitech.io',\n        getToken: () => localStorage.getItem('token') ?? '',\n        productId: 'my-product',          // scopes the session + feature/theme config\n        environment: 'prod',              // routes tool calls to the right backend\n      }}\n      title=\"AI Assistant\"\n      assistantName=\"Aura\"\n      position=\"bottom-right\"\n    />\n  )\n}\n```\n\n`getToken` is called on every request, so it can read a freshly-refreshed JWT\n(e.g. from your auth store) rather than closing over a stale value.\n\n### Widget props\n\n| Prop | Default | Description |\n|------|---------|-------------|\n| `config` | — | `PiChatConfig` (see below) |\n| `title` / `assistantName` / `placeholder` | \"AI Assistant\" / \"Aura\" / \"Message Aura...\" | Panel copy |\n| `defaultOpen` | `false` | Start with the panel open |\n| `position` | `bottom-right` | `bottom-right` \\| `bottom-left` \\| `top-right` \\| `top-left` |\n| `theme` | — | `Partial<PiChatTheme>` — host fallback when the server theme is unavailable |\n| `className` | — | Extra class on the widget container |\n| `onToggle` | — | Called when the widget opens/closes |\n| `onPanelChange` | — | `(width, isFullscreen) => void` — fired when the panel width or fullscreen state changes (`width: 0` when closed). Use it to shift the host layout so content doesn't slide under the panel |\n| `onResponse` | — | Called after each assistant response |\n| `enableDocumentUpload` | `true` | Attach files and ingest them into the knowledge base |\n| `enableVoiceInput` | `false` | Microphone dictation (browser SpeechRecognition). Off by default because Chrome sends audio to Google — opt in knowingly. Auto-hidden in browsers without support (e.g. Firefox) |\n| `enableAudioInput` | `false` | Hold-to-record via `POST /v1/voice/stream` (private Whisper transcription). Works in all browsers incl. Firefox; takes precedence over `enableVoiceInput` |\n| `enablePromptLibrary` | `true` | Save/run/share reusable prompts (entry points auto-hide if the backend doesn't expose them) |\n| `enablePFlow` | `true` | Visual prompt-chaining canvas (node-based flow builder) |\n| `enableFullscreen` | `true` | \"Full view\" header button — expands the panel to the full viewport (Esc restores) |\n| `speechLang` | `en-US` | BCP 47 language for dictation, e.g. `ur-PK` |\n| `suggestedPrompts` | — | `{ icon, text, description? }[]` shown in the empty state |\n| `settingsPanel` | — | Optional React node rendered in a settings dropdown |\n| `onFlowRunComplete` | — | Fired with the final output when a P-Flow run completes (result is also copied to the composer) |\n\n### Modes\n\n- **Direct** (`mode: 'direct'`) — single-turn chat; tools execute immediately.\n- **Pipeline** (`mode: 'pipeline'`) — the assistant plans, you confirm, then it executes step-by-step with live progress.\n\nThe widget exposes a Direct/Pipeline toggle in the panel header.\n\n---\n\n## 2. Headless (hooks)\n\nBuild your own UI on the same primitives the widget uses. Every hook accepts a\n`PiChatConfig` and resolves the same server-side features + theme.\n\n### Chat\n\n```tsx\nimport { usePiStreamChat, usePiPipelineChat } from '@abhi-finance/pi-chat'\n\nfunction MyChat() {\n  const { messages, send, isProcessing, currentStep } = usePiStreamChat({\n    piUrl: 'https://pi.abhitech.io',\n    getToken: () => myAuthToken,\n    mode: 'direct',          // or 'pipeline'\n    productId: 'my-product',\n  })\n\n  return (\n    <div>\n      {messages.map(msg => <div key={msg.id}>{msg.content}</div>)}\n      {isProcessing && <p>{currentStep?.label ?? 'Thinking...'}</p>}\n      <input onKeyDown={e => e.key === 'Enter' && send(e.currentTarget.value)} />\n    </div>\n  )\n}\n```\n\n`usePiStreamChat` and `usePiPipelineChat` both return `messages`, `send`,\n`isProcessing`, `clear`, and progress state (`currentStep`, `steps`,\n`isAwaitingConfirmation`, `confirmPlan`/`declinePlan` in pipeline mode).\n\n### Theming\n\nHeadless integrations can resolve and apply the same server-managed theme the\nwidget uses — so your custom UI (and any client-side charts) follow the\nproduct/user palette.\n\n```tsx\nimport { useWidgetTheme, themeToCssVars } from '@abhi-finance/pi-chat'\n\nfunction MyChat() {\n  const { theme, cssVars, save, reset, sources } = useWidgetTheme({ config })\n\n  return (\n    <div style={cssVars}>                         {/* 1. spread --pi-chat-* tokens */}\n      {/* 2. use resolved values directly for anything custom: */}\n      <button style={{ background: theme.primaryColor }}>Send</button>\n      <ul style={{ color: theme.textColor }}>…</ul>\n      {/* theme.chartColors / theme.mode / theme.icon are all resolved too */}\n\n      {/* 3. let end users re-theme without a widget: */}\n      <button onClick={() => save({ primaryColor: '#ff0000' })}>Make red</button>\n      <button onClick={reset}>Reset to product default</button>\n    </div>\n  )\n}\n```\n\n`useWidgetTheme({ config, theme?, serverManaged? })` returns:\n\n| Key | Description |\n|-----|-------------|\n| `theme` | Fully resolved `PiChatTheme` (server > host prop > `DEFAULT_THEME`) |\n| `cssVars` | `--pi-chat-*` variables to spread on a wrapper (`{}` when not customized) |\n| `sources` | Why each field is set — `'user'` \\| `'product'` \\| `'global'` |\n| `save(partial)` | Persist the current user's override via `PUT /v1/me/theme` |\n| `reset()` | Clear the override back to the product default |\n| `managed` / `customized` / `loading` / `saving` | Resolution + mutation state |\n\n`themeToCssVars(theme)` converts a `PiChatTheme` to the CSS-variable map — handy\nfor a custom theme editor or applying a theme you've fetched yourself.\n\n### Document upload\n\n```tsx\nimport { usePiDocumentUpload } from '@abhi-finance/pi-chat'\n\nconst { files, addFiles, removeFile, clear, upload, isUploading, progress } =\n  usePiDocumentUpload(config)\n```\n\n### Prompt library\n\n```tsx\nimport { usePromptLibrary } from '@abhi-finance/pi-chat'\n\nconst { libraries, prompts, createLibrary, createPrompt, run, share, remove } =\n  usePromptLibrary({ config, enabled: true, productId: 'my-product' })\n```\n\n### Draggable launcher\n\n```tsx\nimport { useDraggable } from '@abhi-finance/pi-chat'\n\nconst { position, handleProps, isDragging, wasDragged } = useDraggable({\n  initialPosition: { x: 24, y: 24 },\n  bounds: true,\n  elementSize: { width: 56, height: 56 },\n})\n```\n\n### Hook reference\n\n| Hook | Purpose |\n|------|---------|\n| `usePiStreamChat` | Direct-mode chat — SSE streaming with polling fallback |\n| `usePiPipelineChat` | Pipeline mode — plan → confirm → execute |\n| `useWidgetTheme` | Resolve + apply the server-managed theme (with self-service save/reset) |\n| `usePiDocumentUpload` | File upload + validation for the knowledge base |\n| `usePromptLibrary` | Prompt libraries — list/create/edit/delete/share/import |\n| `useDraggable` | Drag positioning for a floating launcher bubble |\n\n### What's widget-only\n\n- **Voice / audio** (`enableVoiceInput` / `enableAudioInput`) — the mic/record UI\n  and audio hooks are internal to the widget; use the full widget for voice input.\n- **P-Flow canvas** — the node-based builder UI is widget-only; the underlying\n  flow execution is server-side (charts follow the theme there too).\n- **Charts** — rendered server-side (`render_chart`); responses already include\n  themed chart images, and `theme.chartColors` is available if you render charts\n  client-side.\n\n---\n\n## 3. Services (low-level API)\n\nFor full control over the transport, use the services directly.\n\n### `piRequest` — authenticated HTTP\n\n```ts\nimport { piRequest, PiApiError } from '@abhi-finance/pi-chat'\n\nconst products = await piRequest<{ items: unknown[] }>(\n  config,\n  '/v1/some/endpoint',\n  { method: 'GET' },\n)\n```\n\n`piRequest<T>(config, path, options?)` attaches the Authorization header, the\nPI session token (`X-PI-Token`), the `X-Pi-Environment` header (when\n`config.environment` is set), and any `config.headers`. It refreshes the session\nonce on a 401 and throws `PiApiError` (with `.status`) on failure.\n\n### SSE streaming\n\n```ts\nimport { streamMessage, streamPipelineProgress } from '@abhi-finance/pi-chat'\n\n// Direct mode: POST /v1/direct/stream\nfor await (const evt of streamMessage(config, 'Summarize my transactions')) {\n  if (evt.type === 'step') console.log(evt.step.label)\n  if (evt.type === 'done') console.log(evt.data)\n  if (evt.type === 'error') throw new Error(evt.error)\n}\n\n// Pipeline mode: per-conversation progress\nfor await (const evt of streamPipelineProgress(config, conversationId)) {\n  if (evt.type === 'plan_step') console.log('step', evt.step, evt.state)\n  if (evt.type === 'done') console.log('terminal status', evt.status)\n}\n```\n\n- `streamMessage(config, content, files?, signal?)` → `AsyncGenerator<StreamEvent>`.\n- `streamPipelineProgress(config, conversationId, signal?)` → `AsyncGenerator<PipelineStreamEvent>`.\n\n### Prompt library\n\n```ts\nimport {\n  listMyLibraries, listPublicLibraries, createLibrary, createPrompt,\n  updateLibrary, updatePrompt, deleteLibrary, deletePrompt,\n  shareLibrary, sharePrompt, getSharedLibrary, getSharedPrompt,\n  importSharedLibrary, importSharedPrompt, extractShareToken, shareUrl,\n} from '@abhi-finance/pi-chat'\n\nconst mine   = await listMyLibraries(config)\nconst pub    = await listPublicLibraries(config, productId)\nconst lib    = await createLibrary(config, { name: 'Support', product_id: productId })\nconst prompt = await createPrompt(config, lib.id, { title: 'Reset password', content: '…' })\nconst shared = await shareLibrary(config, lib.id)                    // → library with a share_url\nconst token  = extractShareToken(shared.share_url ?? '')\nconst link   = shareUrl(config, 'library', token)\nawait importSharedLibrary(config, token)\n```\n\n### Documents (knowledge base)\n\n```ts\nimport { uploadDocuments, validateFiles } from '@abhi-finance/pi-chat'\n\nconst errors = validateFiles(files)      // client-side size/type validation\nif (errors.length) return\n\nconst result = await uploadDocuments(config, files, {\n  onProgress: ({ percent }) => console.log(percent),\n  conversationId: 'conv_123',            // optional: scope KG to a conversation\n})\n// result: { product_id, files, kb_sync_triggered, kb_ingestion_job_id, all_succeeded }\n```\n\n### Session token\n\n```ts\nimport { ensurePiToken, clearPiToken } from '@abhi-finance/pi-chat'\n\nconst token = await ensurePiToken(config)  // mint/reuse the PI session token\nclearPiToken()                             // force a re-bootstrap after a 401\n```\n\n`ensurePiToken` POSTs `/v1/session` (returning the same token for a returning\nuser), stores it in `localStorage`, and degrades to `null` if PI session auth is\noff — requests then simply omit `X-PI-Token`.\n\n---\n\n## Theming\n\nThe widget is themed by the server, resolved **per field** in this order:\n\n```\nuser override  >  product default  >  global default\n```\n\nThe resolved theme is fetched via `GET /v1/widget-theme?product_id=…` and applied\nas CSS custom properties on the panel root. The host's `theme` prop acts as a\nfallback when the backend doesn't expose the endpoint yet.\n\n- **Product owners** set the default palette in the PI Dashboard → Products → **Theme** tab.\n- **End users** customize their own palette from the widget's **Theme** panel (**⋯ (More) → Theme**), saved against their user id.\n- **Admins** can set per-user overrides in the Dashboard → Users.\n\n### Theme fields (`PiChatTheme`)\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `primaryColor` | `string` | `#b79dff` | Primary accent (buttons, links, highlights) |\n| `backgroundColor` | `string` | `#0a0a0b` | Chat panel background |\n| `userBubbleColor` | `string` | `#141416` | User message bubble |\n| `textColor` | `string` | `#f2f2f3` | Primary text |\n| `mutedColor` | `string` | `rgba(242, 242, 243, 0.42)` | Muted text (timestamps, metadata) |\n| `borderColor` | `string` | `rgba(255, 255, 255, 0.08)` | Borders |\n| `borderRadius` | `string` | `16px` | Panel corner radius |\n| `fontFamily` | `string` | `\"Inter\", …` | Font stack |\n| `fontSize` | `number` | `14` | Base font size (px) |\n| `width` | `number` | `620` | Panel width (px) |\n| `height` | `number` | `600` | Panel height (px) |\n| `chartColors` | `string[]` | `[#7c6cf0, …]` | Multi-series chart palette (used by server-rendered charts) |\n| `mode` | `'light' \\| 'dark'` | `'dark'` | Appearance — drives the derived surface tokens |\n| `icon` | `string` | `'spark'` | Header/avatar icon key (see below) |\n\n> On the wire these are snake_case (`primary_color`, `chart_colors`, …). The\n> widget maps them to the camelCase `PiChatTheme` above.\n\n### Light / dark mode\n\nLight vs dark is **part of the theme** (`mode`), not a separate toggle. Switching\nmode swaps the surface colors (background, text, muted, border, user bubble) while\nkeeping your accent, chart palette, font and layout. The widget derives the\nremaining tokens (elevated surfaces, hover tints, focus borders, a readable\nuser-bubble text color) from the palette automatically.\n\n### Icons\n\nThe header/avatar icon is configurable via `icon`. Supported keys:\n\n```\nspark · bot · rocket · chat · brain · zap · target · bulb · gem · puzzle\n```\n\n(`spark` is the built-in spark logo; the rest are Lucide icons.)\n\n### Fonts\n\n`fontFamily` can be any font stack; the widget ships these curated choices in the\nTheme panel (and loads them):\n\n```\nInter · DM Sans · Space Grotesk · Poppins · Manrope · Outfit · Work Sans ·\nSystem UI · Serif · Mono\n```\n\n### Presets & the self-service Theme panel\n\nThe built-in Theme panel (**⋯ (More) → Theme**) offers:\n\n- One-click **presets** — Aura, Ocean, Sunset, Forest, Rose, Midnight, Golden, Mono.\n- A **live preview** that updates as you edit (colors, font, radius, icon, mode).\n- Color, chart-color, font, icon and layout editors.\n- **Save** (persists to `/v1/me/theme`) and **Reset** (back to the product default).\n\n### Host `theme` prop fallback\n\n```tsx\n<AIChatWidget config={config} theme={{ primaryColor: '#8b5cf6', mode: 'light' }} />\n```\n\nThe server-resolved theme wins over the prop when the backend responds.\n\n### Global CSS variables\n\nThe panel is themed entirely through `--pi-chat-*` custom properties; you can\noverride them globally too:\n\n```css\n:root {\n  --pi-chat-primary-color: #8b5cf6;\n  --pi-chat-bg: #ffffff;\n  --pi-chat-radius: 20px;\n  --pi-chat-font-family: 'DM Sans', sans-serif;\n}\n```\n\n---\n\n## Server-managed feature config\n\nFeature visibility is resolved server-side per product **and** per user via the PI\nwidget-config endpoint — the server wins when it responds, and the widget's props\nact as the fallback (e.g. when the backend doesn't expose the endpoint yet).\nAdmins manage this in the PI Dashboard → Products → **Features** tab.\n\nEach `enable*` prop above is the host's default; the server can override it per\nproduct/user.\n\n---\n\n## P-Flow\n\nP-Flow is a node-based visual canvas for building and running prompt chains,\nexposed through the widget (`enablePFlow`) as a \"Prompt flows\" panel. The canvas\nis driven by `@xyflow/react`; its types are exported for hosts that build on it\ndirectly (`PFlow`, `PFlowStep`, `ResolvedPlan`, `PFlowRun`, `PFlowSSEEvent`,\n`FlowCanvasNode`, …).\n\n```tsx\n<AIChatWidget\n  config={config}\n  enablePFlow\n  onFlowRunComplete={(result) => console.log('flow output:', result)}\n/>\n```\n\n---\n\n## Voice & audio\n\nTwo complementary input paths (both off by default):\n\n- `enableVoiceInput` — browser `SpeechRecognition` dictation. Auto-hidden where\n  unsupported (e.g. Firefox). Note: Chrome routes audio to Google, so opt in knowingly.\n- `enableAudioInput` — hold-to-record via `POST /v1/voice/stream` (private Whisper\n  transcription server-side). Works everywhere; takes precedence when both are on.\n\n`speechLang` sets the dictation locale (BCP 47), e.g. `ur-PK`.\n\n---\n\n## Charts\n\nThe assistant can render diagrams and data charts server-side (`render_chart` →\nKroki/Vega-Lite) and returns image URLs that the widget renders inline. The chart\ncolors follow the resolved theme's `chartColors` palette (and `primaryColor` for\nsingle-series gradients), so charts match the active theme automatically.\n\n---\n\n## Configuration (`PiChatConfig`)\n\n```ts\ninterface PiChatConfig {\n  piUrl: string                             // PI API base URL\n  getToken: () => string | Promise<string>  // JWT provider (called per request)\n  mode?: 'direct' | 'pipeline'              // default: 'direct'\n  productId?: string                        // scopes the session (default: 'default')\n  environment?: string                      // e.g. 'qa' | 'uat' | 'prod' — sent as\n                                            // X-Pi-Environment; routes tool calls to\n                                            // the product env's backend URL\n  streaming?: boolean                       // default: true (SSE)\n  headers?: Record<string, string>          // extra headers on every request\n  timeoutMs?: number                        // default: 120000\n}\n```\n\n---\n\n## Full API reference\n\n### Components\n\n| Export | Description |\n|--------|-------------|\n| `AIChatWidget` | Full floating chat panel (theming, modes, uploads, voice, library, P-Flow) |\n| `ChatMessage` | Single message renderer |\n| `LoadingMessage` | Progress indicator |\n\n### Hooks\n\n| Export | Description |\n|--------|-------------|\n| `usePiStreamChat` | Direct mode chat (SSE + polling fallback) |\n| `usePiPipelineChat` | Pipeline mode chat (plan → confirm → execute) |\n| `useWidgetTheme` | Resolve + apply the server-managed theme (with self-service save/reset) |\n| `usePiDocumentUpload` | Document upload/validation |\n| `useDraggable` | Drag positioning for the floating bubble |\n| `usePromptLibrary` | Prompt libraries (list/create/update/share/import) |\n\n### Services\n\n| Export | Description |\n|--------|-------------|\n| `piRequest` / `PiApiError` | Raw authenticated API call |\n| `streamMessage` / `streamPipelineProgress` | Raw SSE async generators |\n| `listMyLibraries` / `listPublicLibraries` | List prompt libraries |\n| `createLibrary` / `updateLibrary` / `deleteLibrary` | Manage libraries |\n| `createPrompt` / `updatePrompt` / `deletePrompt` | Manage prompts |\n| `shareLibrary` / `sharePrompt` / `getSharedLibrary` / `getSharedPrompt` | Share / read shared items |\n| `importSharedLibrary` / `importSharedPrompt` / `extractShareToken` / `shareUrl` | Import shared items + build share links |\n| `uploadDocuments` / `validateFiles` | Knowledge-base upload + client validation |\n| `ensurePiToken` / `clearPiToken` | Session token management |\n| `themeToCssVars` | Convert a `PiChatTheme` to `--pi-chat-*` CSS variables |\n\n### Types\n\n`PiChatConfig`, `PiChatTheme`, `AIChatWidgetProps`, `ChatMessage`, `ToolCall`,\n`ProgressStep`, `PiChatReturn`, `PiDirectStatus`, `PiPipelineStatus`,\n`PiStreamDoneEvent`, plus the document (`DocumentUploadResult`, `DocumentFileResult`,\n`UploadProgressEvent`, `DocumentUploadOptions`, `FileValidationError`), stream\n(`StreamEvent`, `PipelineStreamEvent`), library (`PromptLibrary`, `LibraryPrompt`,\n`LibraryPatch`, `PromptPatch`) and P-Flow types.\n\n### Constants\n\n| Export | Description |\n|--------|-------------|\n| `DEFAULT_THEME` | Default theme values |\n","readmeFilename":"README.md"}