{"_id":"@avadisabelle/ava-pi-web-ui","_rev":"20-c48ea9003c34c5132368dd287a3d30d6","name":"@avadisabelle/ava-pi-web-ui","dist-tags":{"latest":"0.65.3"},"versions":{"0.61.1":{"name":"@avadisabelle/ava-pi-web-ui","version":"0.61.1","keywords":["ai","chat","ui","components","llm","web-components","mini-lit"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@avadisabelle/ava-pi-web-ui@0.61.1","maintainers":[{"name":"avadisabelle","email":"ava@jgwill.com"}],"dist":{"shasum":"8329c746b65d332a81c343109570df2e5901eb70","tarball":"https://registry.npmjs.org/@avadisabelle/ava-pi-web-ui/-/ava-pi-web-ui-0.61.1.tgz","fileCount":371,"integrity":"sha512-MGHO2GLIDOkdKnNKWeBPbAaYvb4v98jRWd5ttL/w8DbJXq7QSsR8+jaFU3kIx1RcqV9NJyTGqh//Ro81EbQKIw==","signatures":[{"sig":"MEYCIQD8GSvBfTaGVg0qu0bbMAU9FAlMaffghBLJYFtcEPcY6QIhALxnx2x2Y7H1XXObum2a9pZcHGp+fLkqlZTl2exOj5pv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1755460},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./app.css":"./dist/app.css"},"gitHead":"23b0bf45742350564b60c967e57bdf10d1a15a7a","scripts":{"dev":"concurrently --names \"build,example\" --prefix-colors \"cyan,green\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\" \"npm run dev --prefix example\"","build":"tsc -p tsconfig.build.json && tailwindcss -i ./src/app.css -o ./dist/app.css --minify","check":"biome check --write --error-on-warnings . && tsc --noEmit && cd example && biome check --write --error-on-warnings . && tsc --noEmit","clean":"shx rm -rf dist","dev:tsc":"concurrently --names \"build\" --prefix-colors \"cyan\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\""},"_npmUser":{"name":"avadisabelle","email":"ava@jgwill.com"},"_npmVersion":"11.6.4","description":"Reusable web UI components for AI chat interfaces powered by @avadisabelle/ava-pi-ai","directories":{},"_nodeVersion":"22.22.1","dependencies":{"xlsx":"https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz","jszip":"^3.10.1","lucide":"^0.544.0","ollama":"^0.6.0","pdfjs-dist":"5.4.394","docx-preview":"^0.3.7","@lmstudio/sdk":"^1.5.0","@avadisabelle/ava-pi-ai":"^0.61.1","@avadisabelle/ava-pi-tui":"^0.61.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","concurrently":"^9.2.1","@tailwindcss/cli":"^4.0.0-beta.14","@mariozechner/mini-lit":"^0.2.0"},"peerDependencies":{"lit":"^3.3.1","@mariozechner/mini-lit":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/ava-pi-web-ui_0.61.1_1774894670821_0.6266441189015299","host":"s3://npm-registry-packages-npm-production"},"deprecated":"ava-pi fork archived. Use @earendil-works/pi-coding-agent and add Ava with: pi install npm:@avadisabelle/ava-widgets (github.com/avadisabelle/ava-ceremonial-pi)"},"0.62.0":{"name":"@avadisabelle/ava-pi-web-ui","version":"0.62.0","keywords":["ai","chat","ui","components","llm","web-components","mini-lit"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@avadisabelle/ava-pi-web-ui@0.62.0","maintainers":[{"name":"avadisabelle","email":"ava@jgwill.com"}],"dist":{"shasum":"6470c82f08be2d0ee306bf13f94e183a5c503b47","tarball":"https://registry.npmjs.org/@avadisabelle/ava-pi-web-ui/-/ava-pi-web-ui-0.62.0.tgz","fileCount":371,"integrity":"sha512-q+APA6b5PRdABLaOddzuyuhm0MTR2cvbzQ1erC1QdltHC65tO+lFsbDdkaSU+GqrnJ7pOobrv+lfZArzkdw0dQ==","signatures":[{"sig":"MEYCIQDDh6s3rvgkzOxL/v+C4KIAnPALk7jn8UJZguF9VzWzIQIhAJMHRPEu+bIvS7tEyYYECAmi2istJ+Qw56EZ1Y1C4DBU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1755460},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./app.css":"./dist/app.css"},"gitHead":"834a3cb7b729c6939048dfd8404060f2a56e9571","scripts":{"dev":"concurrently --names \"build,example\" --prefix-colors \"cyan,green\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\" \"npm run dev --prefix example\"","build":"tsc -p tsconfig.build.json && tailwindcss -i ./src/app.css -o ./dist/app.css --minify","check":"biome check --write --error-on-warnings . && tsc --noEmit && cd example && biome check --write --error-on-warnings . && tsc --noEmit","clean":"shx rm -rf dist","dev:tsc":"concurrently --names \"build\" --prefix-colors \"cyan\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\""},"_npmUser":{"name":"avadisabelle","email":"ava@jgwill.com"},"_npmVersion":"11.6.4","description":"Reusable web UI components for AI chat interfaces powered by @avadisabelle/ava-pi-ai","directories":{},"_nodeVersion":"22.22.1","dependencies":{"xlsx":"https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz","jszip":"^3.10.1","lucide":"^0.544.0","ollama":"^0.6.0","pdfjs-dist":"5.4.394","docx-preview":"^0.3.7","@lmstudio/sdk":"^1.5.0","@avadisabelle/ava-pi-ai":"^0.62.0","@avadisabelle/ava-pi-tui":"^0.62.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","concurrently":"^9.2.1","@tailwindcss/cli":"^4.0.0-beta.14","@mariozechner/mini-lit":"^0.2.0"},"peerDependencies":{"lit":"^3.3.1","@mariozechner/mini-lit":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/ava-pi-web-ui_0.62.0_1774895695110_0.6746335750745815","host":"s3://npm-registry-packages-npm-production"},"deprecated":"ava-pi fork archived. Use @earendil-works/pi-coding-agent and add Ava with: pi install npm:@avadisabelle/ava-widgets (github.com/avadisabelle/ava-ceremonial-pi)"},"0.62.1":{"name":"@avadisabelle/ava-pi-web-ui","version":"0.62.1","keywords":["ai","chat","ui","components","llm","web-components","mini-lit"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@avadisabelle/ava-pi-web-ui@0.62.1","maintainers":[{"name":"avadisabelle","email":"ava@jgwill.com"}],"dist":{"shasum":"0048cff79b1c3ba878711d795619fc2303c460d4","tarball":"https://registry.npmjs.org/@avadisabelle/ava-pi-web-ui/-/ava-pi-web-ui-0.62.1.tgz","fileCount":371,"integrity":"sha512-drYXjVYWujSovYOsFy4Sl2htmcJJEtsxdSkFyVfWEep/7JEwiqQ7VpFxAMJZe7qXT7LGescgTWL3ZyvSIKvrvg==","signatures":[{"sig":"MEQCIB0eScoeKQLtUpQdpqS8yFHNTiMD+cM0TrEkRxvJEUmPAiBWVSK/FbnEk443gmwW6j1pxOxOht3Xh7pFkz/WX2dntg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1755469},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./app.css":"./dist/app.css"},"gitHead":"b9f424a75b0101d91b0cfafedbae7274635fc8b0","scripts":{"dev":"concurrently --names \"build,example\" --prefix-colors \"cyan,green\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\" \"npm run dev --prefix example\"","build":"tsc -p tsconfig.build.json && tailwindcss -i ./src/app.css -o ./dist/app.css --minify","check":"biome check --write --error-on-warnings . && tsc --noEmit && cd example && biome check --write --error-on-warnings . && tsc --noEmit","clean":"shx rm -rf dist","dev:tsc":"concurrently --names \"build\" --prefix-colors \"cyan\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\""},"_npmUser":{"name":"avadisabelle","email":"ava@jgwill.com"},"_npmVersion":"10.9.7","description":"Reusable web UI components for AI chat interfaces powered by @avadisabelle/ava-pi-ai","directories":{},"_nodeVersion":"22.22.2","dependencies":{"xlsx":"https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz","jszip":"^3.10.1","lucide":"^0.544.0","ollama":"^0.6.0","pdfjs-dist":"5.4.394","docx-preview":"^0.3.7","@lmstudio/sdk":"^1.5.0","@avadisabelle/ava-pi-ai":"^0.62.1","@avadisabelle/ava-pi-tui":"^0.62.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","concurrently":"^9.2.1","@tailwindcss/cli":"^4.0.0-beta.14","@mariozechner/mini-lit":"^0.2.0"},"peerDependencies":{"lit":"^3.3.1","@mariozechner/mini-lit":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/ava-pi-web-ui_0.62.1_1775003145758_0.2981129000988909","host":"s3://npm-registry-packages-npm-production"},"deprecated":"ava-pi fork archived. Use @earendil-works/pi-coding-agent and add Ava with: pi install npm:@avadisabelle/ava-widgets (github.com/avadisabelle/ava-ceremonial-pi)"},"0.63.0":{"name":"@avadisabelle/ava-pi-web-ui","version":"0.63.0","keywords":["ai","chat","ui","components","llm","web-components","mini-lit"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@avadisabelle/ava-pi-web-ui@0.63.0","maintainers":[{"name":"avadisabelle","email":"ava@jgwill.com"}],"dist":{"shasum":"d97b8bda64d06ca0f9af199f7eac9f4f1ca474ae","tarball":"https://registry.npmjs.org/@avadisabelle/ava-pi-web-ui/-/ava-pi-web-ui-0.63.0.tgz","fileCount":371,"integrity":"sha512-MwZcGF6qB8Wk2sjYSgRspOaELNHNXFniJJn9UPxLlkMiiCWK4+7FYQDyV1RLoyC1qWYj2cCM2m3U2oMGrML/Hw==","signatures":[{"sig":"MEYCIQD69l2vM4cWfAYiZy3DC3KuNlyNx9Dvs9D4/j5+wmE2qgIhANxGgk4Ntlfc9Q4QZclg1I1ZHc1q0r3AWJQG2+ucXvn8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1755495},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./app.css":"./dist/app.css"},"gitHead":"69f1642664a1ff64cc7b9e7f88ccaf395ab2d20b","scripts":{"dev":"concurrently --names \"build,example\" --prefix-colors \"cyan,green\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\" \"npm run dev --prefix example\"","build":"tsc -p tsconfig.build.json && tailwindcss -i ./src/app.css -o ./dist/app.css --minify","check":"biome check --write --error-on-warnings . && tsc --noEmit && cd example && biome check --write --error-on-warnings . && tsc --noEmit","clean":"shx rm -rf dist","dev:tsc":"concurrently --names \"build\" --prefix-colors \"cyan\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\""},"_npmUser":{"name":"avadisabelle","email":"ava@jgwill.com"},"_npmVersion":"10.9.7","description":"Reusable web UI components for AI chat interfaces powered by @avadisabelle/ava-pi-ai","directories":{},"_nodeVersion":"22.22.2","dependencies":{"xlsx":"https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz","jszip":"^3.10.1","lucide":"^0.544.0","ollama":"^0.6.0","pdfjs-dist":"5.4.394","docx-preview":"^0.3.7","@lmstudio/sdk":"^1.5.0","@avadisabelle/ava-pi-ai":"^0.63.0","@avadisabelle/ava-pi-tui":"^0.63.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","concurrently":"^9.2.1","@tailwindcss/cli":"^4.0.0-beta.14","@mariozechner/mini-lit":"^0.2.0"},"peerDependencies":{"lit":"^3.3.1","@mariozechner/mini-lit":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/ava-pi-web-ui_0.63.0_1775004595868_0.22290033813307852","host":"s3://npm-registry-packages-npm-production"},"deprecated":"ava-pi fork archived. Use @earendil-works/pi-coding-agent and add Ava with: pi install npm:@avadisabelle/ava-widgets (github.com/avadisabelle/ava-ceremonial-pi)"},"0.63.1":{"name":"@avadisabelle/ava-pi-web-ui","version":"0.63.1","keywords":["ai","chat","ui","components","llm","web-components","mini-lit"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@avadisabelle/ava-pi-web-ui@0.63.1","maintainers":[{"name":"avadisabelle","email":"ava@jgwill.com"}],"dist":{"shasum":"e13b1e89be66d69efc98140811fd529a15de7a81","tarball":"https://registry.npmjs.org/@avadisabelle/ava-pi-web-ui/-/ava-pi-web-ui-0.63.1.tgz","fileCount":371,"integrity":"sha512-iHPZ0/AbubPgQew3+jBgJdlQaed5XcBHrO4Jrz7QNkUrdhuqTV5PAoIZX6yrS+KDv4lnfG82dXlvxh1AGkLmwg==","signatures":[{"sig":"MEUCIFrbExu7wO40YFdB5FAsldVWJbDFLhHwY/cnpdoyCm/mAiEAkhPsu0ejjVbZzv3Cf8oBIS5RTbjkvgvQVmPQA+/5fvA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1755521},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./app.css":"./dist/app.css"},"gitHead":"649994301975f377c860de6297af6fb61ef654d7","scripts":{"dev":"concurrently --names \"build,example\" --prefix-colors \"cyan,green\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\" \"npm run dev --prefix example\"","build":"tsc -p tsconfig.build.json && tailwindcss -i ./src/app.css -o ./dist/app.css --minify","check":"biome check --write --error-on-warnings . && tsc --noEmit && cd example && biome check --write --error-on-warnings . && tsc --noEmit","clean":"shx rm -rf dist","dev:tsc":"concurrently --names \"build\" --prefix-colors \"cyan\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\""},"_npmUser":{"name":"avadisabelle","email":"ava@jgwill.com"},"_npmVersion":"10.9.7","description":"Reusable web UI components for AI chat interfaces powered by @avadisabelle/ava-pi-ai","directories":{},"_nodeVersion":"22.22.2","dependencies":{"xlsx":"https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz","jszip":"^3.10.1","lucide":"^0.544.0","ollama":"^0.6.0","pdfjs-dist":"5.4.394","docx-preview":"^0.3.7","@lmstudio/sdk":"^1.5.0","@avadisabelle/ava-pi-ai":"^0.63.1","@avadisabelle/ava-pi-tui":"^0.63.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","concurrently":"^9.2.1","@tailwindcss/cli":"^4.0.0-beta.14","@mariozechner/mini-lit":"^0.2.0"},"peerDependencies":{"lit":"^3.3.1","@mariozechner/mini-lit":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/ava-pi-web-ui_0.63.1_1775006083879_0.18453269387390314","host":"s3://npm-registry-packages-npm-production"},"deprecated":"ava-pi fork archived. Use @earendil-works/pi-coding-agent and add Ava with: pi install npm:@avadisabelle/ava-widgets (github.com/avadisabelle/ava-ceremonial-pi)"},"0.63.2":{"name":"@avadisabelle/ava-pi-web-ui","version":"0.63.2","keywords":["ai","chat","ui","components","llm","web-components","mini-lit"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@avadisabelle/ava-pi-web-ui@0.63.2","maintainers":[{"name":"avadisabelle","email":"ava@jgwill.com"}],"dist":{"shasum":"573efce99b089ea827743b7856066057010fc172","tarball":"https://registry.npmjs.org/@avadisabelle/ava-pi-web-ui/-/ava-pi-web-ui-0.63.2.tgz","fileCount":371,"integrity":"sha512-nokSDN7FkTOYjA4MIwUjnx5ZyAUy1cpBUN+bQutmSP+785k6/VUzPvCRX87yymVrcepEHkeCr27MLCHs7+6OLA==","signatures":[{"sig":"MEYCIQDOr7vXdj/KPYv7GKFm/zg/U1qE8UVC+fL3qaNaznxZlwIhALEsW3EbjExAuPCYaXa05W3Tm7boSUQtOG2h0zNWJ+ua","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1755547},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./app.css":"./dist/app.css"},"gitHead":"4df988e9a477f50cc06d5349479c13d861ddc9ad","scripts":{"dev":"concurrently --names \"build,example\" --prefix-colors \"cyan,green\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\" \"npm run dev --prefix example\"","build":"tsc -p tsconfig.build.json && tailwindcss -i ./src/app.css -o ./dist/app.css --minify","check":"biome check --write --error-on-warnings . && tsc --noEmit && cd example && biome check --write --error-on-warnings . && tsc --noEmit","clean":"shx rm -rf dist","dev:tsc":"concurrently --names \"build\" --prefix-colors \"cyan\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\""},"_npmUser":{"name":"avadisabelle","email":"ava@jgwill.com"},"_npmVersion":"10.9.7","description":"Reusable web UI components for AI chat interfaces powered by @avadisabelle/ava-pi-ai","directories":{},"_nodeVersion":"22.22.2","dependencies":{"xlsx":"https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz","jszip":"^3.10.1","lucide":"^0.544.0","ollama":"^0.6.0","pdfjs-dist":"5.4.394","docx-preview":"^0.3.7","@lmstudio/sdk":"^1.5.0","@avadisabelle/ava-pi-ai":"^0.63.2","@avadisabelle/ava-pi-tui":"^0.63.2"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","concurrently":"^9.2.1","@tailwindcss/cli":"^4.0.0-beta.14","@mariozechner/mini-lit":"^0.2.0"},"peerDependencies":{"lit":"^3.3.1","@mariozechner/mini-lit":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/ava-pi-web-ui_0.63.2_1775008271293_0.3749984961306725","host":"s3://npm-registry-packages-npm-production"},"deprecated":"ava-pi fork archived. Use @earendil-works/pi-coding-agent and add Ava with: pi install npm:@avadisabelle/ava-widgets (github.com/avadisabelle/ava-ceremonial-pi)"},"0.64.0":{"name":"@avadisabelle/ava-pi-web-ui","version":"0.64.0","keywords":["ai","chat","ui","components","llm","web-components","mini-lit"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@avadisabelle/ava-pi-web-ui@0.64.0","maintainers":[{"name":"avadisabelle","email":"ava@jgwill.com"}],"dist":{"shasum":"9505b441fd0c961013c40a0c39a7343ffb530ea8","tarball":"https://registry.npmjs.org/@avadisabelle/ava-pi-web-ui/-/ava-pi-web-ui-0.64.0.tgz","fileCount":371,"integrity":"sha512-2m/YABxF119U2ff6DVpXV0CEKSuYz8UDwevOBKiUpUKx+A6uYq/gGoLCwMJgLjNO90cw5D1O9wqfbBBSRbsnew==","signatures":[{"sig":"MEQCIDKcdTpVYCyIot8qv8qEVVZSuHavZhFxoMIfanHBM5YXAiAJnJxDiEA029hppCAoCODHEAbIjUv1lahyWvD1uf+yXA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1755573},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./app.css":"./dist/app.css"},"gitHead":"d2e7ffb8eb44e65cf3c43662d3ecdf01eee6b3fa","scripts":{"dev":"concurrently --names \"build,example\" --prefix-colors \"cyan,green\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\" \"npm run dev --prefix example\"","build":"tsc -p tsconfig.build.json && tailwindcss -i ./src/app.css -o ./dist/app.css --minify","check":"biome check --write --error-on-warnings . && tsc --noEmit && cd example && biome check --write --error-on-warnings . && tsc --noEmit","clean":"shx rm -rf dist","dev:tsc":"concurrently --names \"build\" --prefix-colors \"cyan\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\""},"_npmUser":{"name":"avadisabelle","email":"ava@jgwill.com"},"_npmVersion":"10.9.7","description":"Reusable web UI components for AI chat interfaces powered by @avadisabelle/ava-pi-ai","directories":{},"_nodeVersion":"22.22.2","dependencies":{"xlsx":"https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz","jszip":"^3.10.1","lucide":"^0.544.0","ollama":"^0.6.0","pdfjs-dist":"5.4.394","docx-preview":"^0.3.7","@lmstudio/sdk":"^1.5.0","@avadisabelle/ava-pi-ai":"^0.64.0","@avadisabelle/ava-pi-tui":"^0.64.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","concurrently":"^9.2.1","@tailwindcss/cli":"^4.0.0-beta.14","@mariozechner/mini-lit":"^0.2.0"},"peerDependencies":{"lit":"^3.3.1","@mariozechner/mini-lit":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/ava-pi-web-ui_0.64.0_1775434572290_0.5043591658318614","host":"s3://npm-registry-packages-npm-production"},"deprecated":"ava-pi fork archived. Use @earendil-works/pi-coding-agent and add Ava with: pi install npm:@avadisabelle/ava-widgets (github.com/avadisabelle/ava-ceremonial-pi)"},"0.64.1":{"name":"@avadisabelle/ava-pi-web-ui","version":"0.64.1","keywords":["ai","chat","ui","components","llm","web-components","mini-lit"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@avadisabelle/ava-pi-web-ui@0.64.1","maintainers":[{"name":"avadisabelle","email":"ava@jgwill.com"}],"dist":{"shasum":"04f5ffb041482705a997ebbe36b1088ffc8b26c3","tarball":"https://registry.npmjs.org/@avadisabelle/ava-pi-web-ui/-/ava-pi-web-ui-0.64.1.tgz","fileCount":371,"integrity":"sha512-OOfiJo2uzLXxcaCTe5yhbsKi+f6kdq2oDLqSTo5uzCHp7DNywfHMDTamggquWhK/4PWe5sgpE/S1TEZT2/wcLw==","signatures":[{"sig":"MEUCIQDEaf4OzjMYD85WvjLuoFLo2dSPVjqXvLA6GVTyocH8jwIgPW7H+bc2cNa1sLH4EhNY50VeB+ZZ75pDqogvM4BOPcw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1755599},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./app.css":"./dist/app.css"},"gitHead":"3235857cf59148a5246f810a58cf01bb64a2f3af","scripts":{"dev":"concurrently --names \"build,example\" --prefix-colors \"cyan,green\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\" \"npm run dev --prefix example\"","build":"tsc -p tsconfig.build.json && tailwindcss -i ./src/app.css -o ./dist/app.css --minify","check":"biome check --write --error-on-warnings . && tsc --noEmit && cd example && biome check --write --error-on-warnings . && tsc --noEmit","clean":"shx rm -rf dist","dev:tsc":"concurrently --names \"build\" --prefix-colors \"cyan\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\""},"_npmUser":{"name":"avadisabelle","email":"ava@jgwill.com"},"_npmVersion":"10.9.7","description":"Reusable web UI components for AI chat interfaces powered by @avadisabelle/ava-pi-ai","directories":{},"_nodeVersion":"22.22.2","dependencies":{"xlsx":"https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz","jszip":"^3.10.1","lucide":"^0.544.0","ollama":"^0.6.0","pdfjs-dist":"5.4.394","docx-preview":"^0.3.7","@lmstudio/sdk":"^1.5.0","@avadisabelle/ava-pi-ai":"^0.64.1","@avadisabelle/ava-pi-tui":"^0.64.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","concurrently":"^9.2.1","@tailwindcss/cli":"^4.0.0-beta.14","@mariozechner/mini-lit":"^0.2.0"},"peerDependencies":{"lit":"^3.3.1","@mariozechner/mini-lit":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/ava-pi-web-ui_0.64.1_1775442429198_0.41877065864289786","host":"s3://npm-registry-packages-npm-production"},"deprecated":"ava-pi fork archived. Use @earendil-works/pi-coding-agent and add Ava with: pi install npm:@avadisabelle/ava-widgets (github.com/avadisabelle/ava-ceremonial-pi)"},"0.64.2":{"name":"@avadisabelle/ava-pi-web-ui","version":"0.64.2","keywords":["ai","chat","ui","components","llm","web-components","mini-lit"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@avadisabelle/ava-pi-web-ui@0.64.2","maintainers":[{"name":"avadisabelle","email":"ava@jgwill.com"}],"dist":{"shasum":"9a48d066ef78d98e75aa445c097b6939cd29bc28","tarball":"https://registry.npmjs.org/@avadisabelle/ava-pi-web-ui/-/ava-pi-web-ui-0.64.2.tgz","fileCount":371,"integrity":"sha512-q52i+0dMW90uhcHpFchiaUzUrgpe356kyKlaxkp5BSaFN9QORURIquhTwsbvdezX6cPYLNtjr+3tj/qUYFv1Qg==","signatures":[{"sig":"MEUCIQD0UsAj7Ni/tValHai+47PpNB7e3s1roOv1RcHBfl0BqgIgdPIFAvZVyvvwYp8IQlLyGqgyOe0ufbCkkEPpR+eUfa0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1755625},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./app.css":"./dist/app.css"},"gitHead":"27469cd8b296480916a2c48720a8e5a918aadd30","scripts":{"dev":"concurrently --names \"build,example\" --prefix-colors \"cyan,green\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\" \"npm run dev --prefix example\"","build":"tsc -p tsconfig.build.json && tailwindcss -i ./src/app.css -o ./dist/app.css --minify","check":"biome check --write --error-on-warnings . && tsc --noEmit && cd example && biome check --write --error-on-warnings . && tsc --noEmit","clean":"shx rm -rf dist","dev:tsc":"concurrently --names \"build\" --prefix-colors \"cyan\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\""},"_npmUser":{"name":"avadisabelle","email":"ava@jgwill.com"},"_npmVersion":"10.9.7","description":"Reusable web UI components for AI chat interfaces powered by @avadisabelle/ava-pi-ai","directories":{},"_nodeVersion":"22.22.2","dependencies":{"xlsx":"https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz","jszip":"^3.10.1","lucide":"^0.544.0","ollama":"^0.6.0","pdfjs-dist":"5.4.394","docx-preview":"^0.3.7","@lmstudio/sdk":"^1.5.0","@avadisabelle/ava-pi-ai":"^0.64.2","@avadisabelle/ava-pi-tui":"^0.64.2"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","concurrently":"^9.2.1","@tailwindcss/cli":"^4.0.0-beta.14","@mariozechner/mini-lit":"^0.2.0"},"peerDependencies":{"lit":"^3.3.1","@mariozechner/mini-lit":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/ava-pi-web-ui_0.64.2_1776425469394_0.6842593976462088","host":"s3://npm-registry-packages-npm-production"},"deprecated":"ava-pi fork archived. Use @earendil-works/pi-coding-agent and add Ava with: pi install npm:@avadisabelle/ava-widgets (github.com/avadisabelle/ava-ceremonial-pi)"},"0.64.3":{"name":"@avadisabelle/ava-pi-web-ui","version":"0.64.3","keywords":["ai","chat","ui","components","llm","web-components","mini-lit"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@avadisabelle/ava-pi-web-ui@0.64.3","maintainers":[{"name":"avadisabelle","email":"ava@jgwill.com"}],"dist":{"shasum":"dfbc6c5eab6a13541dc235cc323127c7bb7d79a8","tarball":"https://registry.npmjs.org/@avadisabelle/ava-pi-web-ui/-/ava-pi-web-ui-0.64.3.tgz","fileCount":371,"integrity":"sha512-p7rVtMdIPp64tDwdB9Kx2LNxtGN+yLynXR05yojQpMF6LSY26+xwtc872NnwsjUqkTmEPcuDxi9dKUY+qIF8FA==","signatures":[{"sig":"MEYCIQCTjOB1KvAqynKR9ppCIr61XgZQjDy9nfpPi38kTkw3rQIhANJABMQFycPMs5V5pnqQ5yddZ7ow9i6nFerxkdvx1K10","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1755651},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./app.css":"./dist/app.css"},"gitHead":"65353a0e8230c43565e3d692f35996557603428d","scripts":{"dev":"concurrently --names \"build,example\" --prefix-colors \"cyan,green\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\" \"npm run dev --prefix example\"","build":"tsc -p tsconfig.build.json && tailwindcss -i ./src/app.css -o ./dist/app.css --minify","check":"biome check --write --error-on-warnings . && tsc --noEmit && cd example && biome check --write --error-on-warnings . && tsc --noEmit","clean":"shx rm -rf dist","dev:tsc":"concurrently --names \"build\" --prefix-colors \"cyan\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\""},"_npmUser":{"name":"avadisabelle","email":"ava@jgwill.com"},"_npmVersion":"10.9.7","description":"Reusable web UI components for AI chat interfaces powered by @avadisabelle/ava-pi-ai","directories":{},"_nodeVersion":"22.22.2","dependencies":{"xlsx":"https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz","jszip":"^3.10.1","lucide":"^0.544.0","ollama":"^0.6.0","pdfjs-dist":"5.4.394","docx-preview":"^0.3.7","@lmstudio/sdk":"^1.5.0","@avadisabelle/ava-pi-ai":"^0.64.3","@avadisabelle/ava-pi-tui":"^0.64.3"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","concurrently":"^9.2.1","@tailwindcss/cli":"^4.0.0-beta.14","@mariozechner/mini-lit":"^0.2.0"},"peerDependencies":{"lit":"^3.3.1","@mariozechner/mini-lit":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/ava-pi-web-ui_0.64.3_1776426622675_0.032962644262973795","host":"s3://npm-registry-packages-npm-production"},"deprecated":"ava-pi fork archived. Use @earendil-works/pi-coding-agent and add Ava with: pi install npm:@avadisabelle/ava-widgets (github.com/avadisabelle/ava-ceremonial-pi)"},"0.64.4":{"name":"@avadisabelle/ava-pi-web-ui","version":"0.64.4","keywords":["ai","chat","ui","components","llm","web-components","mini-lit"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@avadisabelle/ava-pi-web-ui@0.64.4","maintainers":[{"name":"avadisabelle","email":"ava@jgwill.com"}],"dist":{"shasum":"2e6a651946572d5fd387c56662a7865cd3cdb2b8","tarball":"https://registry.npmjs.org/@avadisabelle/ava-pi-web-ui/-/ava-pi-web-ui-0.64.4.tgz","fileCount":371,"integrity":"sha512-hNJsdMUwvBbYp/XA9ogBiw7UjdhsW4GSIRhWRiYdeF2rpTdO2hYjPrrWKoJW1gF+43YGgcq4SaARYDgWDlUS+Q==","signatures":[{"sig":"MEUCIQDWKc4Uokvw3jdZIpWASyJxqu5+pa5An8+2EvJ0xDA2rwIgfNnVyeedzeJAQudo8F9yVIokWfenhDaNFvFk63XmQ3w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1755677},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./app.css":"./dist/app.css"},"gitHead":"f7537b178ff024eb8ca8fccbf46ae4577f12a243","scripts":{"dev":"concurrently --names \"build,example\" --prefix-colors \"cyan,green\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\" \"npm run dev --prefix example\"","build":"tsc -p tsconfig.build.json && tailwindcss -i ./src/app.css -o ./dist/app.css --minify","check":"biome check --write --error-on-warnings . && tsc --noEmit && cd example && biome check --write --error-on-warnings . && tsc --noEmit","clean":"shx rm -rf dist","dev:tsc":"concurrently --names \"build\" --prefix-colors \"cyan\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\""},"_npmUser":{"name":"avadisabelle","email":"ava@jgwill.com"},"_npmVersion":"10.9.7","description":"Reusable web UI components for AI chat interfaces powered by @avadisabelle/ava-pi-ai","directories":{},"_nodeVersion":"22.22.2","dependencies":{"xlsx":"https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz","jszip":"^3.10.1","lucide":"^0.544.0","ollama":"^0.6.0","pdfjs-dist":"5.4.394","docx-preview":"^0.3.7","@lmstudio/sdk":"^1.5.0","@avadisabelle/ava-pi-ai":"^0.64.4","@avadisabelle/ava-pi-tui":"^0.64.4"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","concurrently":"^9.2.1","@tailwindcss/cli":"^4.0.0-beta.14","@mariozechner/mini-lit":"^0.2.0"},"peerDependencies":{"lit":"^3.3.1","@mariozechner/mini-lit":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/ava-pi-web-ui_0.64.4_1776428959345_0.9696584982157772","host":"s3://npm-registry-packages-npm-production"},"deprecated":"ava-pi fork archived. Use @earendil-works/pi-coding-agent and add Ava with: pi install npm:@avadisabelle/ava-widgets (github.com/avadisabelle/ava-ceremonial-pi)"},"0.64.5":{"name":"@avadisabelle/ava-pi-web-ui","version":"0.64.5","keywords":["ai","chat","ui","components","llm","web-components","mini-lit"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@avadisabelle/ava-pi-web-ui@0.64.5","maintainers":[{"name":"avadisabelle","email":"ava@jgwill.com"}],"dist":{"shasum":"e79161f3ebcec4fd4000e9c9fec056a5d63afbc4","tarball":"https://registry.npmjs.org/@avadisabelle/ava-pi-web-ui/-/ava-pi-web-ui-0.64.5.tgz","fileCount":371,"integrity":"sha512-c8m0dwAhhbG1FM8WhQsZH9EVex+nXSEN0vxKmiJEtFnU5D1KIMXn16LKhEa2R0+tk+lCvsLIFXq89lr6oZ36GA==","signatures":[{"sig":"MEQCIAv4XxEntKYgqCM5hJKxAXlzQn/PzUB8agXD34D6UHeDAiB7PgUu5YNHh0x7FoYCbzGhXMbSDWQFc/VGy2C3myB/Mg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1755703},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./app.css":"./dist/app.css"},"gitHead":"9eea6073f7a03b4fef6586b8e83e7bbcf3fbe4f7","scripts":{"dev":"concurrently --names \"build,example\" --prefix-colors \"cyan,green\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\" \"npm run dev --prefix example\"","build":"tsc -p tsconfig.build.json && tailwindcss -i ./src/app.css -o ./dist/app.css --minify","check":"biome check --write --error-on-warnings . && tsc --noEmit && cd example && biome check --write --error-on-warnings . && tsc --noEmit","clean":"shx rm -rf dist","dev:tsc":"concurrently --names \"build\" --prefix-colors \"cyan\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\""},"_npmUser":{"name":"avadisabelle","email":"ava@jgwill.com"},"_npmVersion":"10.9.7","description":"Reusable web UI components for AI chat interfaces powered by @avadisabelle/ava-pi-ai","directories":{},"_nodeVersion":"22.22.2","dependencies":{"xlsx":"https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz","jszip":"^3.10.1","lucide":"^0.544.0","ollama":"^0.6.0","pdfjs-dist":"5.4.394","docx-preview":"^0.3.7","@lmstudio/sdk":"^1.5.0","@avadisabelle/ava-pi-ai":"^0.64.5","@avadisabelle/ava-pi-tui":"^0.64.5"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","concurrently":"^9.2.1","@tailwindcss/cli":"^4.0.0-beta.14","@mariozechner/mini-lit":"^0.2.0"},"peerDependencies":{"lit":"^3.3.1","@mariozechner/mini-lit":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/ava-pi-web-ui_0.64.5_1776605412589_0.9957903580289338","host":"s3://npm-registry-packages-npm-production"},"deprecated":"ava-pi fork archived. Use @earendil-works/pi-coding-agent and add Ava with: pi install npm:@avadisabelle/ava-widgets (github.com/avadisabelle/ava-ceremonial-pi)"},"0.64.6":{"name":"@avadisabelle/ava-pi-web-ui","version":"0.64.6","keywords":["ai","chat","ui","components","llm","web-components","mini-lit"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@avadisabelle/ava-pi-web-ui@0.64.6","maintainers":[{"name":"avadisabelle","email":"ava@jgwill.com"}],"dist":{"shasum":"60ba1c7bd8dca89429c55a3e9a19654fc483b014","tarball":"https://registry.npmjs.org/@avadisabelle/ava-pi-web-ui/-/ava-pi-web-ui-0.64.6.tgz","fileCount":371,"integrity":"sha512-ZP2EwskUJ6+tEuNBVZQChd2PjGQfnv3gVc19/Yk7OkIi4p6daQGyDwymcTzWj/XEydBJZ/Rk+4FQEv59we8C3g==","signatures":[{"sig":"MEYCIQDAaoFoW+/V+IEIs4E0zq4tJ+xJUx8xn4av2qgn+jf/SAIhAK1c4jHOhfSVqBUg7Co//Br0XKp/jVztHyxnJ2rxDd5W","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1755729},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./app.css":"./dist/app.css"},"gitHead":"46ac777314489105209b4ee63712320a58bd4cb6","scripts":{"dev":"concurrently --names \"build,example\" --prefix-colors \"cyan,green\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\" \"npm run dev --prefix example\"","build":"tsc -p tsconfig.build.json && tailwindcss -i ./src/app.css -o ./dist/app.css --minify","check":"biome check --write --error-on-warnings . && tsc --noEmit && cd example && biome check --write --error-on-warnings . && tsc --noEmit","clean":"shx rm -rf dist","dev:tsc":"concurrently --names \"build\" --prefix-colors \"cyan\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\""},"_npmUser":{"name":"avadisabelle","email":"ava@jgwill.com"},"_npmVersion":"10.9.7","description":"Reusable web UI components for AI chat interfaces powered by @avadisabelle/ava-pi-ai","directories":{},"_nodeVersion":"22.22.2","dependencies":{"xlsx":"https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz","jszip":"^3.10.1","lucide":"^0.544.0","ollama":"^0.6.0","pdfjs-dist":"5.4.394","docx-preview":"^0.3.7","@lmstudio/sdk":"^1.5.0","@avadisabelle/ava-pi-ai":"^0.64.6","@avadisabelle/ava-pi-tui":"^0.64.6"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","concurrently":"^9.2.1","@tailwindcss/cli":"^4.0.0-beta.14","@mariozechner/mini-lit":"^0.2.0"},"peerDependencies":{"lit":"^3.3.1","@mariozechner/mini-lit":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/ava-pi-web-ui_0.64.6_1776605975661_0.6266853308888245","host":"s3://npm-registry-packages-npm-production"},"deprecated":"ava-pi fork archived. Use @earendil-works/pi-coding-agent and add Ava with: pi install npm:@avadisabelle/ava-widgets (github.com/avadisabelle/ava-ceremonial-pi)"},"0.64.7":{"name":"@avadisabelle/ava-pi-web-ui","version":"0.64.7","keywords":["ai","chat","ui","components","llm","web-components","mini-lit"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@avadisabelle/ava-pi-web-ui@0.64.7","maintainers":[{"name":"avadisabelle","email":"ava@jgwill.com"}],"dist":{"shasum":"2f874769b25b32a35999d54876aa5c30620434b3","tarball":"https://registry.npmjs.org/@avadisabelle/ava-pi-web-ui/-/ava-pi-web-ui-0.64.7.tgz","fileCount":371,"integrity":"sha512-SGBqXyXJ+jIdXrFlkVjqAgno3LTWWiMFmv2RA319uYbKg/XcIFDm1nJdQ0UOltP9kHypv7/FfjHATR65vnoBoQ==","signatures":[{"sig":"MEYCIQCzGlpdG9PnBvzI+m4KmNJA7EXRxDWIWUKsPi1DKkaAHAIhAJzabLRjZoXomlc8G0CEe5pxqHkSA28f0D1MPfWt6sGy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1755755},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./app.css":"./dist/app.css"},"gitHead":"342fc454600709b2263e2dd7499efe903d1f4632","scripts":{"dev":"concurrently --names \"build,example\" --prefix-colors \"cyan,green\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\" \"npm run dev --prefix example\"","build":"tsc -p tsconfig.build.json && tailwindcss -i ./src/app.css -o ./dist/app.css --minify","check":"biome check --write --error-on-warnings . && tsc --noEmit && cd example && biome check --write --error-on-warnings . && tsc --noEmit","clean":"shx rm -rf dist","dev:tsc":"concurrently --names \"build\" --prefix-colors \"cyan\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\""},"_npmUser":{"name":"avadisabelle","email":"ava@jgwill.com"},"_npmVersion":"10.9.7","description":"Reusable web UI components for AI chat interfaces powered by @avadisabelle/ava-pi-ai","directories":{},"_nodeVersion":"22.22.2","dependencies":{"xlsx":"https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz","jszip":"^3.10.1","lucide":"^0.544.0","ollama":"^0.6.0","pdfjs-dist":"5.4.394","docx-preview":"^0.3.7","@lmstudio/sdk":"^1.5.0","@avadisabelle/ava-pi-ai":"^0.64.7","@avadisabelle/ava-pi-tui":"^0.64.7"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","concurrently":"^9.2.1","@tailwindcss/cli":"^4.0.0-beta.14","@mariozechner/mini-lit":"^0.2.0"},"peerDependencies":{"lit":"^3.3.1","@mariozechner/mini-lit":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/ava-pi-web-ui_0.64.7_1776616999556_0.9013828542620104","host":"s3://npm-registry-packages-npm-production"},"deprecated":"ava-pi fork archived. Use @earendil-works/pi-coding-agent and add Ava with: pi install npm:@avadisabelle/ava-widgets (github.com/avadisabelle/ava-ceremonial-pi)"},"0.64.8":{"name":"@avadisabelle/ava-pi-web-ui","version":"0.64.8","keywords":["ai","chat","ui","components","llm","web-components","mini-lit"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@avadisabelle/ava-pi-web-ui@0.64.8","maintainers":[{"name":"avadisabelle","email":"ava@jgwill.com"}],"dist":{"shasum":"88413d8aab2517c3b2340b3feda1cb145e6f4a9f","tarball":"https://registry.npmjs.org/@avadisabelle/ava-pi-web-ui/-/ava-pi-web-ui-0.64.8.tgz","fileCount":371,"integrity":"sha512-YAVsODIsyRsAuVkUcrfoYUbGhUnrRtQlIdtuFU7FH6dnH4yWdxeXc43RmVx3rebpnhOCcvymVoeVHQe3cWKnog==","signatures":[{"sig":"MEUCIQC4WwekIqNNzGXIAJgfSQRE7fkCAl6NfK15yOwtd2ajCQIgajop+uXFLStmXzxi/5LLci4KxVCf5gXkgOGLMuI1JSc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1755781},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./app.css":"./dist/app.css"},"gitHead":"d53436c24531788887f8802f0a182a2f29516f0d","scripts":{"dev":"concurrently --names \"build,example\" --prefix-colors \"cyan,green\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\" \"npm run dev --prefix example\"","build":"tsc -p tsconfig.build.json && tailwindcss -i ./src/app.css -o ./dist/app.css --minify","check":"biome check --write --error-on-warnings . && tsc --noEmit && cd example && biome check --write --error-on-warnings . && tsc --noEmit","clean":"shx rm -rf dist","dev:tsc":"concurrently --names \"build\" --prefix-colors \"cyan\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\""},"_npmUser":{"name":"avadisabelle","email":"ava@jgwill.com"},"_npmVersion":"10.9.7","description":"Reusable web UI components for AI chat interfaces powered by @avadisabelle/ava-pi-ai","directories":{},"_nodeVersion":"22.22.2","dependencies":{"xlsx":"https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz","jszip":"^3.10.1","lucide":"^0.544.0","ollama":"^0.6.0","pdfjs-dist":"5.4.394","docx-preview":"^0.3.7","@lmstudio/sdk":"^1.5.0","@avadisabelle/ava-pi-ai":"^0.64.8","@avadisabelle/ava-pi-tui":"^0.64.8"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","concurrently":"^9.2.1","@tailwindcss/cli":"^4.0.0-beta.14","@mariozechner/mini-lit":"^0.2.0"},"peerDependencies":{"lit":"^3.3.1","@mariozechner/mini-lit":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/ava-pi-web-ui_0.64.8_1776620250439_0.4279643133232951","host":"s3://npm-registry-packages-npm-production"},"deprecated":"ava-pi fork archived. Use @earendil-works/pi-coding-agent and add Ava with: pi install npm:@avadisabelle/ava-widgets (github.com/avadisabelle/ava-ceremonial-pi)"},"0.64.9":{"name":"@avadisabelle/ava-pi-web-ui","version":"0.64.9","keywords":["ai","chat","ui","components","llm","web-components","mini-lit"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@avadisabelle/ava-pi-web-ui@0.64.9","maintainers":[{"name":"avadisabelle","email":"ava@jgwill.com"}],"dist":{"shasum":"d28d86dc5ac72bc925a07f899a7f3cb99fcd4c81","tarball":"https://registry.npmjs.org/@avadisabelle/ava-pi-web-ui/-/ava-pi-web-ui-0.64.9.tgz","fileCount":371,"integrity":"sha512-MDc+AghWQKTeb8X1SNLsW2DGUELiOliJoxKFKiajQY4jiE2jhugwGFFIVLOFnCsjIuZfExmia8JK0A4Nu52ITg==","signatures":[{"sig":"MEQCIHJH91CEjfU8v2HKYncPUL225RAt4KCLRWukcKoUX06iAiAUu6MEiyNFlGMq8H6QCNlfTZ8Jc/Vi7UtucnPzVHH+KA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1755807},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./app.css":"./dist/app.css"},"gitHead":"18a507e4de7414a7a54da7b04cc2d0fda4533b2a","scripts":{"dev":"concurrently --names \"build,example\" --prefix-colors \"cyan,green\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\" \"npm run dev --prefix example\"","build":"tsc -p tsconfig.build.json && tailwindcss -i ./src/app.css -o ./dist/app.css --minify","check":"biome check --write --error-on-warnings . && tsc --noEmit && cd example && biome check --write --error-on-warnings . && tsc --noEmit","clean":"shx rm -rf dist","dev:tsc":"concurrently --names \"build\" --prefix-colors \"cyan\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\""},"_npmUser":{"name":"avadisabelle","email":"ava@jgwill.com"},"_npmVersion":"10.9.7","description":"Reusable web UI components for AI chat interfaces powered by @avadisabelle/ava-pi-ai","directories":{},"_nodeVersion":"22.22.2","dependencies":{"xlsx":"https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz","jszip":"^3.10.1","lucide":"^0.544.0","ollama":"^0.6.0","pdfjs-dist":"5.4.394","docx-preview":"^0.3.7","@lmstudio/sdk":"^1.5.0","@avadisabelle/ava-pi-ai":"^0.64.9","@avadisabelle/ava-pi-tui":"^0.64.9"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","concurrently":"^9.2.1","@tailwindcss/cli":"^4.0.0-beta.14","@mariozechner/mini-lit":"^0.2.0"},"peerDependencies":{"lit":"^3.3.1","@mariozechner/mini-lit":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/ava-pi-web-ui_0.64.9_1776621887365_0.4313280477732502","host":"s3://npm-registry-packages-npm-production"},"deprecated":"ava-pi fork archived. Use @earendil-works/pi-coding-agent and add Ava with: pi install npm:@avadisabelle/ava-widgets (github.com/avadisabelle/ava-ceremonial-pi)"},"0.65.0":{"name":"@avadisabelle/ava-pi-web-ui","version":"0.65.0","keywords":["ai","chat","ui","components","llm","web-components","mini-lit"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@avadisabelle/ava-pi-web-ui@0.65.0","maintainers":[{"name":"avadisabelle","email":"ava@jgwill.com"}],"dist":{"shasum":"f9953516fd656a4fc198ed09a94249adfbbcdd13","tarball":"https://registry.npmjs.org/@avadisabelle/ava-pi-web-ui/-/ava-pi-web-ui-0.65.0.tgz","fileCount":371,"integrity":"sha512-9NGqSL/poMTKHOTAgSVMwVTjCc/C0zyIJDYaaZNtzv/r35/xuxbQ4i/BmsfLaK+cpZdlFjAgKRjG7bMeS6m83g==","signatures":[{"sig":"MEQCICG6VKln2pfKRC5wQudq6BrQGEvejUCd9WcCDsjAqTLQAiBbSBR4L126qXBhKAw7WqfypC+viO1NvitOHgGPCAC8lw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1757660},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./app.css":"./dist/app.css"},"gitHead":"df51348134766b104066dde097df41fa4fcde62c","scripts":{"dev":"concurrently --names \"build,example\" --prefix-colors \"cyan,green\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\" \"npm run dev --prefix example\"","build":"tsc -p tsconfig.build.json && tailwindcss -i ./src/app.css -o ./dist/app.css --minify","check":"biome check --write --error-on-warnings . && tsc --noEmit && cd example && biome check --write --error-on-warnings . && tsc --noEmit","clean":"shx rm -rf dist","dev:tsc":"concurrently --names \"build\" --prefix-colors \"cyan\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\""},"_npmUser":{"name":"avadisabelle","email":"ava@jgwill.com"},"_npmVersion":"10.9.7","description":"Reusable web UI components for AI chat interfaces powered by @avadisabelle/ava-pi-ai","directories":{},"_nodeVersion":"22.22.2","dependencies":{"xlsx":"https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz","jszip":"^3.10.1","lucide":"^0.544.0","ollama":"^0.6.0","pdfjs-dist":"5.4.394","docx-preview":"^0.3.7","@lmstudio/sdk":"^1.5.0","@avadisabelle/ava-pi-ai":"^0.65.0","@avadisabelle/ava-pi-tui":"^0.65.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","concurrently":"^9.2.1","@tailwindcss/cli":"^4.0.0-beta.14","@mariozechner/mini-lit":"^0.2.0"},"peerDependencies":{"lit":"^3.3.1","@mariozechner/mini-lit":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/ava-pi-web-ui_0.65.0_1776625022058_0.35199450498946216","host":"s3://npm-registry-packages-npm-production"},"deprecated":"ava-pi fork archived. Use @earendil-works/pi-coding-agent and add Ava with: pi install npm:@avadisabelle/ava-widgets (github.com/avadisabelle/ava-ceremonial-pi)"},"0.65.2":{"name":"@avadisabelle/ava-pi-web-ui","version":"0.65.2","keywords":["ai","chat","ui","components","llm","web-components","mini-lit"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@avadisabelle/ava-pi-web-ui@0.65.2","maintainers":[{"name":"avadisabelle","email":"ava@jgwill.com"}],"dist":{"shasum":"614c2aae640a249b3009d6a89cd393a3dee7a00a","tarball":"https://registry.npmjs.org/@avadisabelle/ava-pi-web-ui/-/ava-pi-web-ui-0.65.2.tgz","fileCount":371,"integrity":"sha512-ufNFa9wJh0GEMmbeMu5Uc5TWhTMktWCOfutPP66sh3BLLGIXW+E5qc9CSyHNkdlFOxs9PDEfjizYqoHyseUEWg==","signatures":[{"sig":"MEUCIQC+4LMTHTUPlZvXeo9yFMdy+KWifXDbgFBf0yWwb481pQIgQKG7vJsfW0yTcs1DJFxj2jFIs8wM30wDyWJnoPZVeuQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1757660},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./app.css":"./dist/app.css"},"gitHead":"4199fe27c5d09bcd11de8fa67869458d45874b4a","scripts":{"dev":"concurrently --names \"build,example\" --prefix-colors \"cyan,green\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\" \"npm run dev --prefix example\"","build":"tsc -p tsconfig.build.json && tailwindcss -i ./src/app.css -o ./dist/app.css --minify","check":"biome check --write --error-on-warnings . && tsc --noEmit && cd example && biome check --write --error-on-warnings . && tsc --noEmit","clean":"shx rm -rf dist","dev:tsc":"concurrently --names \"build\" --prefix-colors \"cyan\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\""},"_npmUser":{"name":"avadisabelle","email":"ava@jgwill.com"},"_npmVersion":"10.9.7","description":"Reusable web UI components for AI chat interfaces powered by @avadisabelle/ava-pi-ai","directories":{},"_nodeVersion":"22.22.2","dependencies":{"xlsx":"https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz","jszip":"^3.10.1","lucide":"^0.544.0","ollama":"^0.6.0","pdfjs-dist":"5.4.394","docx-preview":"^0.3.7","@lmstudio/sdk":"^1.5.0","@avadisabelle/ava-pi-ai":"^0.65.2","@avadisabelle/ava-pi-tui":"^0.65.2"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","concurrently":"^9.2.1","@tailwindcss/cli":"^4.0.0-beta.14","@mariozechner/mini-lit":"^0.2.0"},"peerDependencies":{"lit":"^3.3.1","@mariozechner/mini-lit":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/ava-pi-web-ui_0.65.2_1777319275916_0.1380325591327103","host":"s3://npm-registry-packages-npm-production"},"deprecated":"ava-pi fork archived. Use @earendil-works/pi-coding-agent and add Ava with: pi install npm:@avadisabelle/ava-widgets (github.com/avadisabelle/ava-ceremonial-pi)"},"0.65.3":{"name":"@avadisabelle/ava-pi-web-ui","version":"0.65.3","keywords":["ai","chat","ui","components","llm","web-components","mini-lit"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@avadisabelle/ava-pi-web-ui@0.65.3","maintainers":[{"name":"avadisabelle","email":"ava@jgwill.com"}],"dist":{"shasum":"6d23477c4395710247388104a843b1e9a5431b63","tarball":"https://registry.npmjs.org/@avadisabelle/ava-pi-web-ui/-/ava-pi-web-ui-0.65.3.tgz","fileCount":371,"integrity":"sha512-9tTT9np+ZDUCcHmzTo/ThE5FYdp05vl1+8lJZFh3ykLcrQfqKxe3WU04O3DVr0/g20qH6EIi6nripAsTJEp5Wg==","signatures":[{"sig":"MEUCIQD8WRwjnFg7KFPvqBMSD/Z4+Q1VH+WEWfCraBiqd3NeEgIgFG4azkTgFErSpoy8Qsw7d884kPI7xd+NhZxbWDI8b4Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1757669},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./app.css":"./dist/app.css"},"gitHead":"95983fe358b36dbe99f51cbae264a9d046841505","scripts":{"dev":"concurrently --names \"build,example\" --prefix-colors \"cyan,green\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\" \"npm run dev --prefix example\"","build":"tsc -p tsconfig.build.json && tailwindcss -i ./src/app.css -o ./dist/app.css --minify","check":"biome check --write --error-on-warnings . && tsc --noEmit && cd example && biome check --write --error-on-warnings . && tsc --noEmit","clean":"shx rm -rf dist","dev:tsc":"concurrently --names \"build\" --prefix-colors \"cyan\" \"tsc -p tsconfig.build.json --watch --preserveWatchOutput\" \"tailwindcss -i ./src/app.css -o ./dist/app.css --watch\""},"_npmUser":{"name":"avadisabelle","email":"ava@jgwill.com"},"_npmVersion":"10.9.7","description":"Reusable web UI components for AI chat interfaces powered by @avadisabelle/ava-pi-ai","directories":{},"_nodeVersion":"22.22.2","dependencies":{"xlsx":"https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz","jszip":"^3.10.1","lucide":"^0.544.0","ollama":"^0.6.0","pdfjs-dist":"5.4.394","docx-preview":"^0.3.7","@lmstudio/sdk":"^1.5.0","@avadisabelle/ava-pi-ai":"^0.65.3","@avadisabelle/ava-pi-tui":"^0.65.3"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","concurrently":"^9.2.1","@tailwindcss/cli":"^4.0.0-beta.14","@mariozechner/mini-lit":"^0.2.0"},"peerDependencies":{"lit":"^3.3.1","@mariozechner/mini-lit":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/ava-pi-web-ui_0.65.3_1777860075628_0.9119507302734173","host":"s3://npm-registry-packages-npm-production"},"deprecated":"ava-pi fork archived. Use @earendil-works/pi-coding-agent and add Ava with: pi install npm:@avadisabelle/ava-widgets (github.com/avadisabelle/ava-ceremonial-pi)"}},"time":{"created":"2026-03-30T18:17:50.738Z","modified":"2026-09-15T01:04:33.061Z","0.61.1":"2026-03-30T18:17:51.014Z","0.62.0":"2026-03-30T18:34:55.345Z","0.62.1":"2026-04-01T00:25:45.984Z","0.63.0":"2026-04-01T00:49:56.155Z","0.63.1":"2026-04-01T01:14:44.069Z","0.63.2":"2026-04-01T01:51:11.531Z","0.64.0":"2026-04-06T00:16:12.821Z","0.64.1":"2026-04-06T02:27:09.424Z","0.64.2":"2026-04-17T11:31:09.599Z","0.64.3":"2026-04-17T11:50:22.842Z","0.64.4":"2026-04-17T12:29:19.524Z","0.64.5":"2026-04-19T13:30:12.756Z","0.64.6":"2026-04-19T13:39:35.885Z","0.64.7":"2026-04-19T16:43:19.765Z","0.64.8":"2026-04-19T17:37:30.587Z","0.64.9":"2026-04-19T18:04:47.545Z","0.65.0":"2026-04-19T18:57:02.271Z","0.65.2":"2026-04-27T19:47:56.127Z","0.65.3":"2026-05-04T02:01:15.890Z"},"author":{"name":"Mario Zechner"},"license":"MIT","keywords":["ai","chat","ui","components","llm","web-components","mini-lit"],"description":"Reusable web UI components for AI chat interfaces powered by @avadisabelle/ava-pi-ai","maintainers":[{"name":"avadisabelle","email":"ava@jgwill.com"}],"readme":"# @avadisabelle/ava-pi-web-ui\n\nReusable web UI components for building AI chat interfaces powered by [@avadisabelle/ava-pi-ai](../ai) and [@avadisabelle/ava-pi-agent-core](../agent).\n\nBuilt with [mini-lit](https://github.com/badlogic/mini-lit) web components and Tailwind CSS v4.\n\n## Features\n\n- **Chat UI**: Complete interface with message history, streaming, and tool execution\n- **Tools**: JavaScript REPL, document extraction, and artifacts (HTML, SVG, Markdown, etc.)\n- **Attachments**: PDF, DOCX, XLSX, PPTX, images with preview and text extraction\n- **Artifacts**: Interactive HTML, SVG, Markdown with sandboxed execution\n- **Storage**: IndexedDB-backed storage for sessions, API keys, and settings\n- **CORS Proxy**: Automatic proxy handling for browser environments\n- **Custom Providers**: Support for Ollama, LM Studio, vLLM, and OpenAI-compatible APIs\n\n## Installation\n\n```bash\nnpm install @avadisabelle/ava-pi-web-ui @avadisabelle/ava-pi-agent-core @avadisabelle/ava-pi-ai\n```\n\n## Quick Start\n\nSee the [example](./example) directory for a complete working application.\n\n```typescript\nimport { Agent } from '@avadisabelle/ava-pi-agent-core';\nimport { getModel } from '@avadisabelle/ava-pi-ai';\nimport {\n  ChatPanel,\n  AppStorage,\n  IndexedDBStorageBackend,\n  ProviderKeysStore,\n  SessionsStore,\n  SettingsStore,\n  setAppStorage,\n  defaultConvertToLlm,\n  ApiKeyPromptDialog,\n} from '@avadisabelle/ava-pi-web-ui';\nimport '@avadisabelle/ava-pi-web-ui/app.css';\n\n// Set up storage\nconst settings = new SettingsStore();\nconst providerKeys = new ProviderKeysStore();\nconst sessions = new SessionsStore();\n\nconst backend = new IndexedDBStorageBackend({\n  dbName: 'my-app',\n  version: 1,\n  stores: [\n    settings.getConfig(),\n    providerKeys.getConfig(),\n    sessions.getConfig(),\n    SessionsStore.getMetadataConfig(),\n  ],\n});\n\nsettings.setBackend(backend);\nproviderKeys.setBackend(backend);\nsessions.setBackend(backend);\n\nconst storage = new AppStorage(settings, providerKeys, sessions, undefined, backend);\nsetAppStorage(storage);\n\n// Create agent\nconst agent = new Agent({\n  initialState: {\n    systemPrompt: 'You are a helpful assistant.',\n    model: getModel('anthropic', 'claude-sonnet-4-5-20250929'),\n    thinkingLevel: 'off',\n    messages: [],\n    tools: [],\n  },\n  convertToLlm: defaultConvertToLlm,\n});\n\n// Create chat panel\nconst chatPanel = new ChatPanel();\nawait chatPanel.setAgent(agent, {\n  onApiKeyRequired: (provider) => ApiKeyPromptDialog.prompt(provider),\n});\n\ndocument.body.appendChild(chatPanel);\n```\n\n## Architecture\n\n```\n┌─────────────────────────────────────────────────────┐\n│                    ChatPanel                        │\n│  ┌─────────────────────┐  ┌─────────────────────┐   │\n│  │   AgentInterface    │  │   ArtifactsPanel    │   │\n│  │  (messages, input)  │  │  (HTML, SVG, MD)    │   │\n│  └─────────────────────┘  └─────────────────────┘   │\n└─────────────────────────────────────────────────────┘\n                          │\n                          ▼\n┌─────────────────────────────────────────────────────┐\n│              Agent (from pi-agent-core)             │\n│  - State management (messages, model, tools)        │\n│  - Event emission (agent_start, message_update, ...)│\n│  - Tool execution                                   │\n└─────────────────────────────────────────────────────┘\n                          │\n                          ▼\n┌─────────────────────────────────────────────────────┐\n│                   AppStorage                        │\n│  ┌──────────┐ ┌──────────┐ ┌──────────┐             │\n│  │ Settings │ │ Provider │ │ Sessions │             │\n│  │  Store   │ │Keys Store│ │  Store   │             │\n│  └──────────┘ └──────────┘ └──────────┘             │\n│                     │                               │\n│              IndexedDBStorageBackend                │\n└─────────────────────────────────────────────────────┘\n```\n\n## Components\n\n### ChatPanel\n\nHigh-level chat interface with built-in artifacts panel.\n\n```typescript\nconst chatPanel = new ChatPanel();\nawait chatPanel.setAgent(agent, {\n  // Prompt for API key when needed\n  onApiKeyRequired: async (provider) => ApiKeyPromptDialog.prompt(provider),\n\n  // Hook before sending messages\n  onBeforeSend: async () => { /* save draft, etc. */ },\n\n  // Handle cost display click\n  onCostClick: () => { /* show cost breakdown */ },\n\n  // Custom sandbox URL for browser extensions\n  sandboxUrlProvider: () => chrome.runtime.getURL('sandbox.html'),\n\n  // Add custom tools\n  toolsFactory: (agent, agentInterface, artifactsPanel, runtimeProvidersFactory) => {\n    const replTool = createJavaScriptReplTool();\n    replTool.runtimeProvidersFactory = runtimeProvidersFactory;\n    return [replTool];\n  },\n});\n```\n\n### AgentInterface\n\nLower-level chat interface for custom layouts.\n\n```typescript\nconst chat = document.createElement('agent-interface') as AgentInterface;\nchat.session = agent;\nchat.enableAttachments = true;\nchat.enableModelSelector = true;\nchat.enableThinkingSelector = true;\nchat.onApiKeyRequired = async (provider) => { /* ... */ };\nchat.onBeforeSend = async () => { /* ... */ };\n```\n\nProperties:\n- `session`: Agent instance\n- `enableAttachments`: Show attachment button (default: true)\n- `enableModelSelector`: Show model selector (default: true)\n- `enableThinkingSelector`: Show thinking level selector (default: true)\n- `showThemeToggle`: Show theme toggle (default: false)\n\n### Agent (from pi-agent-core)\n\n```typescript\nimport { Agent } from '@avadisabelle/ava-pi-agent-core';\n\nconst agent = new Agent({\n  initialState: {\n    model: getModel('anthropic', 'claude-sonnet-4-5-20250929'),\n    systemPrompt: 'You are helpful.',\n    thinkingLevel: 'off',\n    messages: [],\n    tools: [],\n  },\n  convertToLlm: defaultConvertToLlm,\n});\n\n// Events\nagent.subscribe((event) => {\n  switch (event.type) {\n    case 'agent_start': // Agent loop started\n    case 'agent_end':   // Agent loop finished\n    case 'turn_start':  // LLM call started\n    case 'turn_end':    // LLM call finished\n    case 'message_start':\n    case 'message_update': // Streaming update\n    case 'message_end':\n      break;\n  }\n});\n\n// Send message\nawait agent.prompt('Hello!');\nawait agent.prompt({ role: 'user-with-attachments', content: 'Check this', attachments, timestamp: Date.now() });\n\n// Control\nagent.abort();\nagent.state.model = newModel;\nagent.state.thinkingLevel = 'medium';\nagent.state.tools = [...];\nagent.followUp(customMessage);\n```\n\n## Message Types\n\n### UserMessageWithAttachments\n\nUser message with file attachments:\n\n```typescript\nconst message: UserMessageWithAttachments = {\n  role: 'user-with-attachments',\n  content: 'Analyze this document',\n  attachments: [pdfAttachment],\n  timestamp: Date.now(),\n};\n\n// Type guard\nif (isUserMessageWithAttachments(msg)) {\n  console.log(msg.attachments);\n}\n```\n\n### ArtifactMessage\n\nFor session persistence of artifacts:\n\n```typescript\nconst artifact: ArtifactMessage = {\n  role: 'artifact',\n  action: 'create', // or 'update', 'delete'\n  filename: 'chart.html',\n  content: '<div>...</div>',\n  timestamp: new Date().toISOString(),\n};\n\n// Type guard\nif (isArtifactMessage(msg)) {\n  console.log(msg.filename);\n}\n```\n\n### Custom Message Types\n\nExtend via declaration merging:\n\n```typescript\ninterface SystemNotification {\n  role: 'system-notification';\n  message: string;\n  level: 'info' | 'warning' | 'error';\n  timestamp: string;\n}\n\ndeclare module '@avadisabelle/ava-pi-agent-core' {\n  interface CustomAgentMessages {\n    'system-notification': SystemNotification;\n  }\n}\n\n// Register renderer\nregisterMessageRenderer('system-notification', {\n  render: (msg) => html`<div class=\"alert\">${msg.message}</div>`,\n});\n\n// Extend convertToLlm\nfunction myConvertToLlm(messages: AgentMessage[]): Message[] {\n  const processed = messages.map((m) => {\n    if (m.role === 'system-notification') {\n      return { role: 'user', content: `<system>${m.message}</system>`, timestamp: Date.now() };\n    }\n    return m;\n  });\n  return defaultConvertToLlm(processed);\n}\n```\n\n## Message Transformer\n\n`convertToLlm` transforms app messages to LLM-compatible format:\n\n```typescript\nimport { defaultConvertToLlm, convertAttachments } from '@avadisabelle/ava-pi-web-ui';\n\n// defaultConvertToLlm handles:\n// - UserMessageWithAttachments → user message with image/text content blocks\n// - ArtifactMessage → filtered out (UI-only)\n// - Standard messages (user, assistant, toolResult) → passed through\n```\n\n## Tools\n\n### JavaScript REPL\n\nExecute JavaScript in a sandboxed browser environment:\n\n```typescript\nimport { createJavaScriptReplTool } from '@avadisabelle/ava-pi-web-ui';\n\nconst replTool = createJavaScriptReplTool();\n\n// Configure runtime providers for artifact/attachment access\nreplTool.runtimeProvidersFactory = () => [\n  new AttachmentsRuntimeProvider(attachments),\n  new ArtifactsRuntimeProvider(artifactsPanel, agent, true), // read-write\n];\n\nagent.state.tools = [replTool];\n```\n\n### Extract Document\n\nExtract text from documents at URLs:\n\n```typescript\nimport { createExtractDocumentTool } from '@avadisabelle/ava-pi-web-ui';\n\nconst extractTool = createExtractDocumentTool();\nextractTool.corsProxyUrl = 'https://corsproxy.io/?';\n\nagent.state.tools = [extractTool];\n```\n\n### Artifacts Tool\n\nBuilt into ArtifactsPanel, supports: HTML, SVG, Markdown, text, JSON, images, PDF, DOCX, XLSX.\n\n```typescript\nconst artifactsPanel = new ArtifactsPanel();\nartifactsPanel.agent = agent;\n\n// The tool is available as artifactsPanel.tool\nagent.state.tools = [artifactsPanel.tool];\n```\n\n### Custom Tool Renderers\n\n```typescript\nimport { registerToolRenderer, type ToolRenderer } from '@avadisabelle/ava-pi-web-ui';\n\nconst myRenderer: ToolRenderer = {\n  render(params, result, isStreaming) {\n    return {\n      content: html`<div>...</div>`,\n      isCustom: false, // true = no card wrapper\n    };\n  },\n};\n\nregisterToolRenderer('my_tool', myRenderer);\n```\n\n## Storage\n\n### Setup\n\n```typescript\nimport {\n  AppStorage,\n  IndexedDBStorageBackend,\n  SettingsStore,\n  ProviderKeysStore,\n  SessionsStore,\n  CustomProvidersStore,\n  setAppStorage,\n  getAppStorage,\n} from '@avadisabelle/ava-pi-web-ui';\n\n// Create stores\nconst settings = new SettingsStore();\nconst providerKeys = new ProviderKeysStore();\nconst sessions = new SessionsStore();\nconst customProviders = new CustomProvidersStore();\n\n// Create backend with all store configs\nconst backend = new IndexedDBStorageBackend({\n  dbName: 'my-app',\n  version: 1,\n  stores: [\n    settings.getConfig(),\n    providerKeys.getConfig(),\n    sessions.getConfig(),\n    SessionsStore.getMetadataConfig(),\n    customProviders.getConfig(),\n  ],\n});\n\n// Wire stores to backend\nsettings.setBackend(backend);\nproviderKeys.setBackend(backend);\nsessions.setBackend(backend);\ncustomProviders.setBackend(backend);\n\n// Create and set global storage\nconst storage = new AppStorage(settings, providerKeys, sessions, customProviders, backend);\nsetAppStorage(storage);\n```\n\n### SettingsStore\n\nKey-value settings:\n\n```typescript\nawait storage.settings.set('proxy.enabled', true);\nawait storage.settings.set('proxy.url', 'https://proxy.example.com');\nconst enabled = await storage.settings.get<boolean>('proxy.enabled');\n```\n\n### ProviderKeysStore\n\nAPI keys by provider:\n\n```typescript\nawait storage.providerKeys.set('anthropic', 'sk-ant-...');\nconst key = await storage.providerKeys.get('anthropic');\nconst providers = await storage.providerKeys.list();\n```\n\n### SessionsStore\n\nChat sessions with metadata:\n\n```typescript\n// Save session\nawait storage.sessions.save(sessionData, metadata);\n\n// Load session\nconst data = await storage.sessions.get(sessionId);\nconst metadata = await storage.sessions.getMetadata(sessionId);\n\n// List sessions (sorted by lastModified)\nconst allMetadata = await storage.sessions.getAllMetadata();\n\n// Update title\nawait storage.sessions.updateTitle(sessionId, 'New Title');\n\n// Delete\nawait storage.sessions.delete(sessionId);\n```\n\n### CustomProvidersStore\n\nCustom LLM providers:\n\n```typescript\nconst provider: CustomProvider = {\n  id: crypto.randomUUID(),\n  name: 'My Ollama',\n  type: 'ollama',\n  baseUrl: 'http://localhost:11434',\n};\n\nawait storage.customProviders.set(provider);\nconst all = await storage.customProviders.getAll();\n```\n\n## Attachments\n\nLoad and process files:\n\n```typescript\nimport { loadAttachment, type Attachment } from '@avadisabelle/ava-pi-web-ui';\n\n// From File input\nconst file = inputElement.files[0];\nconst attachment = await loadAttachment(file);\n\n// From URL\nconst attachment = await loadAttachment('https://example.com/doc.pdf');\n\n// From ArrayBuffer\nconst attachment = await loadAttachment(arrayBuffer, 'document.pdf');\n\n// Attachment structure\ninterface Attachment {\n  id: string;\n  type: 'image' | 'document';\n  fileName: string;\n  mimeType: string;\n  size: number;\n  content: string;        // base64 encoded\n  extractedText?: string; // For documents\n  preview?: string;       // base64 preview image\n}\n```\n\nSupported formats: PDF, DOCX, XLSX, PPTX, images, text files.\n\n## CORS Proxy\n\nFor browser environments with CORS restrictions:\n\n```typescript\nimport { createStreamFn, shouldUseProxyForProvider, isCorsError } from '@avadisabelle/ava-pi-web-ui';\n\n// AgentInterface auto-configures proxy from settings\n// For manual setup:\nagent.streamFn = createStreamFn(async () => {\n  const enabled = await storage.settings.get<boolean>('proxy.enabled');\n  return enabled ? await storage.settings.get<string>('proxy.url') : undefined;\n});\n\n// Providers requiring proxy:\n// - zai: always\n// - anthropic: only OAuth tokens (sk-ant-oat-*)\n```\n\n## Dialogs\n\n### SettingsDialog\n\n```typescript\nimport { SettingsDialog, ProvidersModelsTab, ProxyTab, ApiKeysTab } from '@avadisabelle/ava-pi-web-ui';\n\nSettingsDialog.open([\n  new ProvidersModelsTab(), // Custom providers + model list\n  new ProxyTab(),           // CORS proxy settings\n  new ApiKeysTab(),         // API keys per provider\n]);\n```\n\n### SessionListDialog\n\n```typescript\nimport { SessionListDialog } from '@avadisabelle/ava-pi-web-ui';\n\nSessionListDialog.open(\n  async (sessionId) => { /* load session */ },\n  (deletedId) => { /* handle deletion */ },\n);\n```\n\n### ApiKeyPromptDialog\n\n```typescript\nimport { ApiKeyPromptDialog } from '@avadisabelle/ava-pi-web-ui';\n\nconst success = await ApiKeyPromptDialog.prompt('anthropic');\n```\n\n### ModelSelector\n\n```typescript\nimport { ModelSelector } from '@avadisabelle/ava-pi-web-ui';\n\nModelSelector.open(currentModel, (selectedModel) => {\n  agent.state.model = selectedModel;\n});\n```\n\n## Styling\n\nImport the pre-built CSS:\n\n```typescript\nimport '@avadisabelle/ava-pi-web-ui/app.css';\n```\n\nOr use Tailwind with custom config:\n\n```css\n@import '@mariozechner/mini-lit/themes/claude.css';\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n```\n\n## Internationalization\n\n```typescript\nimport { i18n, setLanguage, translations } from '@avadisabelle/ava-pi-web-ui';\n\n// Add translations\ntranslations.de = {\n  'Loading...': 'Laden...',\n  'No sessions yet': 'Noch keine Sitzungen',\n};\n\nsetLanguage('de');\nconsole.log(i18n('Loading...')); // \"Laden...\"\n```\n\n## Examples\n\n- [example/](./example) - Complete web app with sessions, artifacts, custom messages\n- [sitegeist](https://sitegeist.ai) - Browser extension using pi-web-ui\n\n## Known Issues\n\n- **PersistentStorageDialog**: Currently broken\n\n## License\n\nMIT\n","readmeFilename":"README.md"}