{"_id":"@aflekkas/vibecli","_rev":"16-4776d51c48f120274a7df742fadc6168","name":"@aflekkas/vibecli","dist-tags":{"latest":"0.0.16"},"versions":{"0.0.1":{"name":"@aflekkas/vibecli","version":"0.0.1","keywords":["ink","tui","cli","ai","anthropic","openai","vibecoding"],"author":{"name":"Alexandros Lekkas"},"license":"MIT","_id":"@aflekkas/vibecli@0.0.1","maintainers":[{"name":"aflekkas","email":"aflekkas@gmail.com"}],"homepage":"https://github.com/aflekkas/vibecli#readme","bugs":{"url":"https://github.com/aflekkas/vibecli/issues"},"dist":{"shasum":"391ed1c0f61c6eafaf04e95cdd7996161864c9a5","tarball":"https://registry.npmjs.org/@aflekkas/vibecli/-/vibecli-0.0.1.tgz","fileCount":10,"integrity":"sha512-Axzd+pfUh4J0VFXePLZdLQkWdZs5/1jeJZrfK+hJHTTchHUDZaRfJtNorYipq7dz07PK83tvv4gLqMGZeChWBg==","signatures":[{"sig":"MEUCIQClh7oSz/AiN90zTxL5JhlMTW+SuaSUhkh07dV3jIzsigIgbbel8DEc5iDq+cVMqTKw7675rhriQhNX6ZQPZbsXuCo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39659},"type":"module","exports":{".":"./src/index.ts","./ui":"./src/ui.tsx","./retry":"./src/retry.ts","./clipboard":"./src/clipboard.ts","./highlight":"./src/highlight.ts","./providers":"./src/providers/types.ts","./text-input":"./src/text-input.tsx","./providers/adapter":"./src/providers/adapter.ts"},"gitHead":"d888496fdc5b4ee4be311167ddb0dc57c49c27d2","scripts":{"typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"aflekkas","email":"aflekkas@gmail.com"},"repository":{"url":"git+https://github.com/aflekkas/vibecli.git","type":"git"},"_npmVersion":"11.6.2","description":"Reusable Ink + AI SDK primitives for vibecoded CLIs.","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@types/bun":"^1.3.0","typescript":"^5.7.2","@types/react":"^18.3.12","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"peerDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"_npmOperationalInternal":{"tmp":"tmp/vibecli_0.0.1_1777170716693_0.39283331934655075","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@aflekkas/vibecli","version":"0.0.2","keywords":["ink","tui","cli","ai","anthropic","openai","vibecoding"],"author":{"name":"Alexandros Lekkas"},"license":"MIT","_id":"@aflekkas/vibecli@0.0.2","maintainers":[{"name":"aflekkas","email":"aflekkas@gmail.com"}],"homepage":"https://github.com/aflekkas/vibecli#readme","bugs":{"url":"https://github.com/aflekkas/vibecli/issues"},"bin":{"vibecli":"src/cli.ts"},"dist":{"shasum":"afaead5f281beb0551e8cfb956d40551bda8fbb7","tarball":"https://registry.npmjs.org/@aflekkas/vibecli/-/vibecli-0.0.2.tgz","fileCount":26,"integrity":"sha512-n0rpJvwuiPWWUhDuntKHovWDm895aGF8lF6QwEYXry9p9waBlz4QVejrBWznBp7JI+zl5L5J9RR1ATzkqWNktg==","signatures":[{"sig":"MEUCIQCWivoPQIbfgnKy0JAhY+Q3Pq3ag8uVk2x5/RTZ/tgDPAIgbngV867TdNeoZwdmhU+f8c2swabcVCqTo/sA/VNnOQQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96004},"type":"module","exports":{".":"./src/index.ts","./ui":"./src/ui.tsx","./lsp":"./src/lsp.ts","./mcp":"./src/mcp.ts","./retry":"./src/retry.ts","./config":"./src/ui-config.tsx","./repo-map":"./src/repo-map.ts","./clipboard":"./src/clipboard.ts","./highlight":"./src/highlight.ts","./providers":"./src/providers/types.ts","./text-input":"./src/text-input.tsx","./checkpoints":"./src/checkpoints.ts","./status-line":"./src/status-line.ts","./create-project":"./src/create-project.ts","./providers/adapter":"./src/providers/adapter.ts"},"gitHead":"403a2a8e3aba7481fb35afbd94a298666e22157d","scripts":{"ship":"bun run typecheck && npm version patch && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun update @aflekkas/vibecli && bun run typecheck)","typecheck":"bunx tsc --noEmit","ship:major":"bun run typecheck && npm version major && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun update @aflekkas/vibecli && bun run typecheck)","ship:minor":"bun run typecheck && npm version minor && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun update @aflekkas/vibecli && bun run typecheck)"},"_npmUser":{"name":"aflekkas","email":"aflekkas@gmail.com"},"repository":{"url":"git+https://github.com/aflekkas/vibecli.git","type":"git"},"_npmVersion":"11.6.2","description":"Reusable Ink + AI SDK primitives for vibecoded CLIs.","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@types/bun":"^1.3.0","typescript":"^5.7.2","@types/react":"^18.3.12","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"peerDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"_npmOperationalInternal":{"tmp":"tmp/vibecli_0.0.2_1777177384519_0.6333417785099922","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@aflekkas/vibecli","version":"0.0.3","keywords":["ink","tui","cli","ai","anthropic","openai","vibecoding"],"author":{"name":"Alexandros Lekkas"},"license":"MIT","_id":"@aflekkas/vibecli@0.0.3","maintainers":[{"name":"aflekkas","email":"aflekkas@gmail.com"}],"homepage":"https://github.com/aflekkas/vibecli#readme","bugs":{"url":"https://github.com/aflekkas/vibecli/issues"},"bin":{"vibecli":"bin/vibecli"},"dist":{"shasum":"ca5515af43125d009dac300d420bf5350dd2e096","tarball":"https://registry.npmjs.org/@aflekkas/vibecli/-/vibecli-0.0.3.tgz","fileCount":27,"integrity":"sha512-t1nQa++DlT3cz0qeCZlzBTFSFRQeTb4pG9UHEetPU1LQqCuIY7eO0MJ2dIcWR50RgMdohO+mFoSWxthprlbraw==","signatures":[{"sig":"MEUCIERl2CAlGCLL6CUe3WJti2EM5jI/A74QVyqLgjvQMGJrAiEA+VtOOULY8SwZ844MK/62nwm2EvX62dyS/TlVG5DbYac=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96060},"type":"module","exports":{".":"./src/index.ts","./ui":"./src/ui.tsx","./lsp":"./src/lsp.ts","./mcp":"./src/mcp.ts","./retry":"./src/retry.ts","./config":"./src/ui-config.tsx","./repo-map":"./src/repo-map.ts","./clipboard":"./src/clipboard.ts","./highlight":"./src/highlight.ts","./providers":"./src/providers/types.ts","./text-input":"./src/text-input.tsx","./checkpoints":"./src/checkpoints.ts","./status-line":"./src/status-line.ts","./create-project":"./src/create-project.ts","./providers/adapter":"./src/providers/adapter.ts"},"gitHead":"ff057f506686318aced55ac52a5343e30646837f","scripts":{"ship":"bun run typecheck && npm version patch && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun update @aflekkas/vibecli && bun run typecheck)","typecheck":"bunx tsc --noEmit","ship:major":"bun run typecheck && npm version major && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun update @aflekkas/vibecli && bun run typecheck)","ship:minor":"bun run typecheck && npm version minor && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun update @aflekkas/vibecli && bun run typecheck)"},"_npmUser":{"name":"aflekkas","email":"aflekkas@gmail.com"},"repository":{"url":"git+https://github.com/aflekkas/vibecli.git","type":"git"},"_npmVersion":"11.6.2","description":"Reusable Ink + AI SDK primitives for vibecoded CLIs.","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@types/bun":"^1.3.0","typescript":"^5.7.2","@types/react":"^18.3.12","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"peerDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"_npmOperationalInternal":{"tmp":"tmp/vibecli_0.0.3_1777177511645_0.15105816219316437","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@aflekkas/vibecli","version":"0.0.4","keywords":["ink","tui","cli","ai","anthropic","openai","vibecoding"],"author":{"name":"Alexandros Lekkas"},"license":"MIT","_id":"@aflekkas/vibecli@0.0.4","maintainers":[{"name":"aflekkas","email":"aflekkas@gmail.com"}],"homepage":"https://github.com/aflekkas/vibecli#readme","bugs":{"url":"https://github.com/aflekkas/vibecli/issues"},"bin":{"vibecli":"bin/vibecli.js"},"dist":{"shasum":"d64d3ffd67b409b3a91f0d28aa2dac337045f37c","tarball":"https://registry.npmjs.org/@aflekkas/vibecli/-/vibecli-0.0.4.tgz","fileCount":27,"integrity":"sha512-hlL8QNEeY5LGA/2Np6MS4mjvz2xKO0iOmsNFkGJ5f845JvGIilU51WLubZTJFmGPXdqo2lEOh7eSqCkRvMI+xg==","signatures":[{"sig":"MEQCIGOAbpKDajAam6QM2jwD3Ko3hS6Mo68g1KLf+O8Zqx1tAiAzVu+ImT7zJkzHJQbfN3D7xoFWEBaT4DyNIL3Xnia3SQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96075},"type":"module","exports":{".":"./src/index.ts","./ui":"./src/ui.tsx","./lsp":"./src/lsp.ts","./mcp":"./src/mcp.ts","./retry":"./src/retry.ts","./config":"./src/ui-config.tsx","./repo-map":"./src/repo-map.ts","./clipboard":"./src/clipboard.ts","./highlight":"./src/highlight.ts","./providers":"./src/providers/types.ts","./text-input":"./src/text-input.tsx","./checkpoints":"./src/checkpoints.ts","./status-line":"./src/status-line.ts","./create-project":"./src/create-project.ts","./providers/adapter":"./src/providers/adapter.ts"},"gitHead":"269596626827e0438eb97ba6aa08a6ba40494b06","scripts":{"ship":"bun run typecheck && npm version patch && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun add @aflekkas/vibecli@latest && bun run typecheck)","typecheck":"bunx tsc --noEmit","ship:major":"bun run typecheck && npm version major && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun add @aflekkas/vibecli@latest && bun run typecheck)","ship:minor":"bun run typecheck && npm version minor && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun add @aflekkas/vibecli@latest && bun run typecheck)"},"_npmUser":{"name":"aflekkas","email":"aflekkas@gmail.com"},"repository":{"url":"git+https://github.com/aflekkas/vibecli.git","type":"git"},"_npmVersion":"11.6.2","description":"Reusable Ink + AI SDK primitives for vibecoded CLIs.","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@types/bun":"^1.3.0","typescript":"^5.7.2","@types/react":"^18.3.12","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"peerDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"_npmOperationalInternal":{"tmp":"tmp/vibecli_0.0.4_1777177580029_0.6551944715755424","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@aflekkas/vibecli","version":"0.0.5","keywords":["ink","tui","cli","ai","anthropic","openai","vibecoding"],"author":{"name":"Alexandros Lekkas"},"license":"MIT","_id":"@aflekkas/vibecli@0.0.5","maintainers":[{"name":"aflekkas","email":"aflekkas@gmail.com"}],"homepage":"https://github.com/aflekkas/vibecli#readme","bugs":{"url":"https://github.com/aflekkas/vibecli/issues"},"bin":{"vibecli":"bin/vibecli.js"},"dist":{"shasum":"568f2df97e0e74824b948efc32db1edd336f4eb9","tarball":"https://registry.npmjs.org/@aflekkas/vibecli/-/vibecli-0.0.5.tgz","fileCount":28,"integrity":"sha512-GuarMltTz+IJs6iR9vCgGjblQqBmGE3nj3LiVcEGOlGyk+Xd+AXcJzLXdM31VukKtmkFWiRQjNwfaqSd4Q61zA==","signatures":[{"sig":"MEYCIQCrzMITsq8lw+fYjkxxJakVIBvHoXBvHbfJIiwOqQrgbgIhAMetrGlDHVZUJcKQiYswuGSzTq4Hzt8hXQ+tb6pr2dlU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106058},"type":"module","exports":{".":"./src/index.ts","./ui":"./src/ui.tsx","./lsp":"./src/lsp.ts","./mcp":"./src/mcp.ts","./agent":"./src/agent.ts","./retry":"./src/retry.ts","./config":"./src/ui-config.tsx","./repo-map":"./src/repo-map.ts","./clipboard":"./src/clipboard.ts","./highlight":"./src/highlight.ts","./providers":"./src/providers/types.ts","./text-input":"./src/text-input.tsx","./checkpoints":"./src/checkpoints.ts","./status-line":"./src/status-line.ts","./create-project":"./src/create-project.ts","./providers/adapter":"./src/providers/adapter.ts"},"gitHead":"fc4dea81d49a729beb76af32f2dfef0a42cd03ea","scripts":{"ship":"bun run typecheck && npm version patch && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun add @aflekkas/vibecli@latest && bun run typecheck)","typecheck":"bunx tsc --noEmit","ship:major":"bun run typecheck && npm version major && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun add @aflekkas/vibecli@latest && bun run typecheck)","ship:minor":"bun run typecheck && npm version minor && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun add @aflekkas/vibecli@latest && bun run typecheck)"},"_npmUser":{"name":"aflekkas","email":"aflekkas@gmail.com"},"repository":{"url":"git+https://github.com/aflekkas/vibecli.git","type":"git"},"_npmVersion":"11.6.2","description":"Reusable Ink + AI SDK primitives for vibecoded CLIs.","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@types/bun":"^1.3.0","typescript":"^5.7.2","@types/react":"^18.3.12","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"peerDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"_npmOperationalInternal":{"tmp":"tmp/vibecli_0.0.5_1777178387581_0.3540761483324977","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@aflekkas/vibecli","version":"0.0.6","keywords":["ink","tui","cli","ai","anthropic","openai","vibecoding"],"author":{"name":"Alexandros Lekkas"},"license":"MIT","_id":"@aflekkas/vibecli@0.0.6","maintainers":[{"name":"aflekkas","email":"aflekkas@gmail.com"}],"homepage":"https://github.com/aflekkas/vibecli#readme","bugs":{"url":"https://github.com/aflekkas/vibecli/issues"},"bin":{"vibecli":"bin/vibecli.js"},"dist":{"shasum":"85aa4fe4fd3c2be5fd32119f53f78e5f6102f913","tarball":"https://registry.npmjs.org/@aflekkas/vibecli/-/vibecli-0.0.6.tgz","fileCount":28,"integrity":"sha512-K5ZhlkQoxDKayjBsDoRy4TMXeo8auP1nIfMN33ZomHoCCWaPaiZg8Hyf1o7schWPgNpDRgRzUfGcZHTzcvVNIA==","signatures":[{"sig":"MEUCICzp/Nctk+eEN9EoeA0Kxx+ol0I0RiCcSMjqsFDGY0U6AiEAhTozu8+x9N4g9zRZXEiNWR/kLmZY1PWE6ANKolDoXx8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111264},"type":"module","exports":{".":"./src/index.ts","./ui":"./src/ui.tsx","./lsp":"./src/lsp.ts","./mcp":"./src/mcp.ts","./agent":"./src/agent.ts","./retry":"./src/retry.ts","./config":"./src/ui-config.tsx","./repo-map":"./src/repo-map.ts","./clipboard":"./src/clipboard.ts","./highlight":"./src/highlight.ts","./providers":"./src/providers/types.ts","./text-input":"./src/text-input.tsx","./checkpoints":"./src/checkpoints.ts","./status-line":"./src/status-line.ts","./create-project":"./src/create-project.ts","./providers/adapter":"./src/providers/adapter.ts"},"gitHead":"0186a42ff6e82e02e8b8c012b957d2ceafaef377","scripts":{"ship":"bun run typecheck && npm version patch && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun add @aflekkas/vibecli@latest && bun run typecheck)","typecheck":"bunx tsc --noEmit","ship:major":"bun run typecheck && npm version major && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun add @aflekkas/vibecli@latest && bun run typecheck)","ship:minor":"bun run typecheck && npm version minor && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun add @aflekkas/vibecli@latest && bun run typecheck)"},"_npmUser":{"name":"aflekkas","email":"aflekkas@gmail.com"},"repository":{"url":"git+https://github.com/aflekkas/vibecli.git","type":"git"},"_npmVersion":"11.6.2","description":"Reusable Ink + AI SDK primitives for vibecoded CLIs.","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@types/bun":"^1.3.0","typescript":"^5.7.2","@types/react":"^18.3.12","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"peerDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"_npmOperationalInternal":{"tmp":"tmp/vibecli_0.0.6_1777178769641_0.1474758844362445","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@aflekkas/vibecli","version":"0.0.7","keywords":["ink","tui","cli","ai","anthropic","openai","vibecoding"],"author":{"name":"Alexandros Lekkas"},"license":"MIT","_id":"@aflekkas/vibecli@0.0.7","maintainers":[{"name":"aflekkas","email":"aflekkas@gmail.com"}],"homepage":"https://github.com/aflekkas/vibecli#readme","bugs":{"url":"https://github.com/aflekkas/vibecli/issues"},"bin":{"vibecli":"bin/vibecli.js"},"dist":{"shasum":"697c6df0196eb289d8f2282745d081f8be2f0a20","tarball":"https://registry.npmjs.org/@aflekkas/vibecli/-/vibecli-0.0.7.tgz","fileCount":28,"integrity":"sha512-JQrQTBFPuivnLiRID8RuDGlppohYLZHpnGCCwSGBDeepZ8SS3B/kz96LJ+4YWyufwkNWk1nRkMEkCDhGwb4rfA==","signatures":[{"sig":"MEUCIQC6oZeAiw595B1jecSM+I8cbHKDcFgy0tI+mVE4IiDdUQIgLKdx16gNGcieFI1AqSACs2/Bzb6B7XoqcPe44RE76/M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111611},"type":"module","exports":{".":"./src/index.ts","./ui":"./src/ui.tsx","./lsp":"./src/lsp.ts","./mcp":"./src/mcp.ts","./agent":"./src/agent.ts","./retry":"./src/retry.ts","./config":"./src/ui-config.tsx","./repo-map":"./src/repo-map.ts","./clipboard":"./src/clipboard.ts","./highlight":"./src/highlight.ts","./providers":"./src/providers/types.ts","./text-input":"./src/text-input.tsx","./checkpoints":"./src/checkpoints.ts","./status-line":"./src/status-line.ts","./create-project":"./src/create-project.ts","./providers/adapter":"./src/providers/adapter.ts"},"gitHead":"aa95979aed50cb8b9afc8d5ed3f68ace679f3ce2","scripts":{"ship":"bun run typecheck && npm version patch && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun add @aflekkas/vibecli@latest && bun run typecheck)","typecheck":"bunx tsc --noEmit","ship:major":"bun run typecheck && npm version major && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun add @aflekkas/vibecli@latest && bun run typecheck)","ship:minor":"bun run typecheck && npm version minor && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun add @aflekkas/vibecli@latest && bun run typecheck)"},"_npmUser":{"name":"aflekkas","email":"aflekkas@gmail.com"},"repository":{"url":"git+https://github.com/aflekkas/vibecli.git","type":"git"},"_npmVersion":"11.6.2","description":"Reusable Ink + AI SDK primitives for vibecoded CLIs.","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@types/bun":"^1.3.0","typescript":"^5.7.2","@types/react":"^18.3.12","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"peerDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"_npmOperationalInternal":{"tmp":"tmp/vibecli_0.0.7_1777179130454_0.8145245849602234","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@aflekkas/vibecli","version":"0.0.8","keywords":["ink","tui","cli","ai","anthropic","openai","vibecoding"],"author":{"name":"Alexandros Lekkas"},"license":"MIT","_id":"@aflekkas/vibecli@0.0.8","maintainers":[{"name":"aflekkas","email":"aflekkas@gmail.com"}],"homepage":"https://github.com/aflekkas/vibecli#readme","bugs":{"url":"https://github.com/aflekkas/vibecli/issues"},"bin":{"vibecli":"bin/vibecli.js"},"dist":{"shasum":"13a1aca404a16ac2a7942cfd71206fcd4e88af2d","tarball":"https://registry.npmjs.org/@aflekkas/vibecli/-/vibecli-0.0.8.tgz","fileCount":29,"integrity":"sha512-AzMJAqP4oY66OUecqboBglGl5vD7Au7fgEmBAs93cySNJt6w3jbtHOq2olFz5211Qw3iQhAOd2zrnSpYm0tf0g==","signatures":[{"sig":"MEYCIQDtj3usT77FbdhRkZyhfgHRHVdUQQn4PHRvUv0eO8vauwIhAOW7fps/OgmanRLQDvdi0mmQWcwyc7Lj/YleN89UO/pN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":120354},"type":"module","exports":{".":"./src/index.ts","./ui":"./src/ui.tsx","./lsp":"./src/lsp.ts","./mcp":"./src/mcp.ts","./agent":"./src/agent.ts","./retry":"./src/retry.ts","./config":"./src/ui-config.tsx","./repo-map":"./src/repo-map.ts","./clipboard":"./src/clipboard.ts","./highlight":"./src/highlight.ts","./providers":"./src/providers/types.ts","./text-input":"./src/text-input.tsx","./checkpoints":"./src/checkpoints.ts","./status-line":"./src/status-line.ts","./create-project":"./src/create-project.ts","./providers/adapter":"./src/providers/adapter.ts"},"gitHead":"407e6f41a1730bd9d2daa0ccde55a7693a33d6d7","scripts":{"ship":"bun run typecheck && npm version patch && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun add @aflekkas/vibecli@latest && bun run typecheck)","typecheck":"bunx tsc --noEmit","ship:major":"bun run typecheck && npm version major && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun add @aflekkas/vibecli@latest && bun run typecheck)","ship:minor":"bun run typecheck && npm version minor && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun add @aflekkas/vibecli@latest && bun run typecheck)"},"_npmUser":{"name":"aflekkas","email":"aflekkas@gmail.com"},"repository":{"url":"git+https://github.com/aflekkas/vibecli.git","type":"git"},"_npmVersion":"11.6.2","description":"Reusable Ink + AI SDK primitives for vibecoded CLIs.","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@types/bun":"^1.3.0","typescript":"^5.7.2","@types/react":"^18.3.12","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"peerDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"_npmOperationalInternal":{"tmp":"tmp/vibecli_0.0.8_1777179138400_0.2668934137836152","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"@aflekkas/vibecli","version":"0.0.9","keywords":["ink","tui","cli","ai","anthropic","openai","vibecoding"],"author":{"name":"Alexandros Lekkas"},"license":"MIT","_id":"@aflekkas/vibecli@0.0.9","maintainers":[{"name":"aflekkas","email":"aflekkas@gmail.com"}],"homepage":"https://github.com/aflekkas/vibecli#readme","bugs":{"url":"https://github.com/aflekkas/vibecli/issues"},"bin":{"vibecli":"bin/vibecli.js"},"dist":{"shasum":"51fd38fd02a9705b9a972af3880dc26809ab9fd0","tarball":"https://registry.npmjs.org/@aflekkas/vibecli/-/vibecli-0.0.9.tgz","fileCount":35,"integrity":"sha512-chy8FmTS0VefoQ4E9iDvMCa/hiswoGtrQeeTDfBmPbEksZyKNFb9n0NaQfEg/lsk3kkb890LtjW01oG609VsaA==","signatures":[{"sig":"MEQCIBXrUR06YHIg++ohhFYXlOKticOv0ftKlSNprfOTDQAfAiBPR+cgfG/vSXJZCURyYR6CSMvh3RKRIckSygKepyk95g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141724},"type":"module","exports":{".":"./src/index.ts","./ui":"./src/ui.tsx","./lsp":"./src/lsp.ts","./mcp":"./src/mcp.ts","./agent":"./src/agent.ts","./retry":"./src/retry.ts","./config":"./src/ui-config.tsx","./picker":"./src/picker.tsx","./themes":"./src/themes.ts","./repo-map":"./src/repo-map.ts","./clipboard":"./src/clipboard.ts","./highlight":"./src/highlight.ts","./providers":"./src/providers/types.ts","./text-input":"./src/text-input.tsx","./checkpoints":"./src/checkpoints.ts","./status-line":"./src/status-line.ts","./theme-picker":"./src/theme-picker.tsx","./create-project":"./src/create-project.ts","./providers/adapter":"./src/providers/adapter.ts"},"gitHead":"789de565fb870f3bc54e577b8bdc7d04c5dd703a","scripts":{"ship":"bun run typecheck && npm version patch && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun add @aflekkas/vibecli@latest && bun run typecheck)","typecheck":"bunx tsc --noEmit","ship:major":"bun run typecheck && npm version major && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun add @aflekkas/vibecli@latest && bun run typecheck)","ship:minor":"bun run typecheck && npm version minor && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun add @aflekkas/vibecli@latest && bun run typecheck)"},"_npmUser":{"name":"aflekkas","email":"aflekkas@gmail.com"},"repository":{"url":"git+https://github.com/aflekkas/vibecli.git","type":"git"},"_npmVersion":"11.6.2","description":"Reusable Ink + AI SDK primitives for vibecoded CLIs.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@types/bun":"^1.3.0","typescript":"^5.7.2","@types/react":"^18.3.12","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"peerDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"_npmOperationalInternal":{"tmp":"tmp/vibecli_0.0.9_1777179449435_0.6672151424572745","host":"s3://npm-registry-packages-npm-production"}},"0.0.10":{"name":"@aflekkas/vibecli","version":"0.0.10","keywords":["ink","tui","cli","ai","anthropic","openai","vibecoding"],"author":{"name":"Alexandros Lekkas"},"license":"MIT","_id":"@aflekkas/vibecli@0.0.10","maintainers":[{"name":"aflekkas","email":"aflekkas@gmail.com"}],"homepage":"https://github.com/aflekkas/vibecli#readme","bugs":{"url":"https://github.com/aflekkas/vibecli/issues"},"bin":{"vibecli":"bin/vibecli.js"},"dist":{"shasum":"094279ea9b52d9ef4c5a87514c0f1b88dd7db7a2","tarball":"https://registry.npmjs.org/@aflekkas/vibecli/-/vibecli-0.0.10.tgz","fileCount":41,"integrity":"sha512-vY2DTbes6svjeqEWl3ytoTCC4jXYm590DrFjQqD0duO1ggzblCAWIJI/ss3YtEpNxdSn/EXMbXztlYTMYB2CkA==","signatures":[{"sig":"MEYCIQChaSdn9RgybWV2jVKBt13CRZ5kxq6DDX+OZE7BimaWvQIhAJruhfU4U/+RhcJKy57681a3bbBwmDyZhqueQ2MtQsL0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":153994},"type":"module","exports":{".":"./src/index.ts","./ui":"./src/ui.tsx","./lsp":"./src/lsp.ts","./mcp":"./src/mcp.ts","./agent":"./src/agent.ts","./retry":"./src/retry.ts","./config":"./src/ui-config.tsx","./picker":"./src/picker.tsx","./themes":"./src/themes.ts","./commands":"./src/commands/reserved.ts","./repo-map":"./src/repo-map.ts","./clipboard":"./src/clipboard.ts","./highlight":"./src/highlight.ts","./providers":"./src/providers/types.ts","./text-input":"./src/text-input.tsx","./checkpoints":"./src/checkpoints.ts","./frontmatter":"./src/frontmatter.ts","./status-line":"./src/status-line.ts","./markdown-dir":"./src/markdown-dir.ts","./theme-picker":"./src/theme-picker.tsx","./create-project":"./src/create-project.ts","./providers/adapter":"./src/providers/adapter.ts"},"gitHead":"b4fad23aa77d1ab8a99fd607d8d6a6d35a7a8dc4","scripts":{"ship":"bun run typecheck && npm version patch && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun add @aflekkas/vibecli@latest && bun run typecheck)","typecheck":"bunx tsc --noEmit","ship:major":"bun run typecheck && npm version major && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun add @aflekkas/vibecli@latest && bun run typecheck)","ship:minor":"bun run typecheck && npm version minor && npm publish --access public && git push --follow-tags && (cd ../rawdog && bun add @aflekkas/vibecli@latest && bun run typecheck)"},"_npmUser":{"name":"aflekkas","email":"aflekkas@gmail.com"},"repository":{"url":"git+https://github.com/aflekkas/vibecli.git","type":"git"},"_npmVersion":"11.6.2","description":"Reusable Ink + AI SDK primitives for vibecoded CLIs.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@types/bun":"^1.3.0","typescript":"^5.7.2","@types/react":"^18.3.12","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"peerDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"_npmOperationalInternal":{"tmp":"tmp/vibecli_0.0.10_1777180367303_0.28881690729376674","host":"s3://npm-registry-packages-npm-production"}},"0.0.11":{"name":"@aflekkas/vibecli","version":"0.0.11","keywords":["ink","tui","cli","ai","anthropic","openai","vibecoding"],"author":{"name":"Alexandros Lekkas"},"license":"MIT","_id":"@aflekkas/vibecli@0.0.11","maintainers":[{"name":"aflekkas","email":"aflekkas@gmail.com"}],"homepage":"https://github.com/aflekkas/vibecli#readme","bugs":{"url":"https://github.com/aflekkas/vibecli/issues"},"bin":{"vibecli":"bin/vibecli.js"},"dist":{"shasum":"57c3ebf87d1af267a222c92b9a01aca90e27a6ea","tarball":"https://registry.npmjs.org/@aflekkas/vibecli/-/vibecli-0.0.11.tgz","fileCount":41,"integrity":"sha512-tbFYB6z+434JJC40RlGzkO2vO2GbBMQ2CgS9Mc+pfg8jTmtO7rTg5vz3iJEW9I3fwcK+TSsHeD7FmC4/rua/qA==","signatures":[{"sig":"MEQCIAs7vZhB350vXixEAUUft24JHc5I3WmFUeFGX5XaEohvAiAhmVUyUYw7UTQZxTMNT+eMGZLLs8peTgj3pkXu8ASN1g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":156689},"type":"module","exports":{".":"./src/index.ts","./ui":"./src/ui.tsx","./lsp":"./src/lsp.ts","./mcp":"./src/mcp.ts","./agent":"./src/agent.ts","./retry":"./src/retry.ts","./config":"./src/ui-config.tsx","./picker":"./src/picker.tsx","./themes":"./src/themes.ts","./commands":"./src/commands/reserved.ts","./repo-map":"./src/repo-map.ts","./clipboard":"./src/clipboard.ts","./highlight":"./src/highlight.ts","./providers":"./src/providers/types.ts","./text-input":"./src/text-input.tsx","./checkpoints":"./src/checkpoints.ts","./frontmatter":"./src/frontmatter.ts","./status-line":"./src/status-line.ts","./markdown-dir":"./src/markdown-dir.ts","./theme-picker":"./src/theme-picker.tsx","./create-project":"./src/create-project.ts","./providers/adapter":"./src/providers/adapter.ts"},"gitHead":"4af1e27352bfb0e7e1a51b110cc175da04ec7671","scripts":{"play":"bun --cwd examples/playground src/index.tsx","ship":"bun run typecheck && npm version patch && npm publish --access public && git push --follow-tags && bun run smoke","smoke":"bun run scripts/smoke.ts","typecheck":"bunx tsc --noEmit","ship:major":"bun run typecheck && npm version major && npm publish --access public && git push --follow-tags && bun run smoke","ship:minor":"bun run typecheck && npm version minor && npm publish --access public && git push --follow-tags && bun run smoke","play:script":"bun --cwd examples/playground src/index.tsx --script"},"_npmUser":{"name":"aflekkas","email":"aflekkas@gmail.com"},"repository":{"url":"git+https://github.com/aflekkas/vibecli.git","type":"git"},"_npmVersion":"11.6.2","description":"Reusable Ink + AI SDK primitives for vibecoded CLIs.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@types/bun":"^1.3.0","typescript":"^5.7.2","@types/react":"^18.3.12","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"peerDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"_npmOperationalInternal":{"tmp":"tmp/vibecli_0.0.11_1777232632996_0.9624332604225256","host":"s3://npm-registry-packages-npm-production"}},"0.0.12":{"name":"@aflekkas/vibecli","version":"0.0.12","keywords":["ink","tui","cli","ai","anthropic","openai","vibecoding"],"author":{"name":"Alexandros Lekkas"},"license":"MIT","_id":"@aflekkas/vibecli@0.0.12","maintainers":[{"name":"aflekkas","email":"aflekkas@gmail.com"}],"homepage":"https://github.com/aflekkas/vibecli#readme","bugs":{"url":"https://github.com/aflekkas/vibecli/issues"},"bin":{"vibecli":"bin/vibecli.js"},"dist":{"shasum":"6a744e73e1253ae05e2d258926b598dc1b0268ec","tarball":"https://registry.npmjs.org/@aflekkas/vibecli/-/vibecli-0.0.12.tgz","fileCount":46,"integrity":"sha512-dwUtblxJvJoYnkay711Bb4LoM0tyvCsM0+RSyoc0R26Tm0AaYPKzlXVFANKg+wZ14I/6muRpBbSSN5J3wcC5RQ==","signatures":[{"sig":"MEYCIQDfYS2NAt4bBLiEq4yYYh/ajdO3Uh0MTANMrcpfTnS3kAIhANiojXChAZmQC3/t1BxmqEBEWZAuvLPm312+eQ8kT8OU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167422},"type":"module","exports":{".":"./src/index.ts","./ui":"./src/ui.tsx","./lsp":"./src/lsp.ts","./mcp":"./src/mcp.ts","./agent":"./src/agent.ts","./retry":"./src/retry.ts","./config":"./src/ui-config.tsx","./picker":"./src/picker.tsx","./themes":"./src/themes.ts","./commands":"./src/commands/reserved.ts","./repo-map":"./src/repo-map.ts","./clipboard":"./src/clipboard.ts","./highlight":"./src/highlight.ts","./providers":"./src/providers/types.ts","./scenarios":"./src/scenarios.ts","./text-input":"./src/text-input.tsx","./checkpoints":"./src/checkpoints.ts","./frontmatter":"./src/frontmatter.ts","./status-line":"./src/status-line.ts","./markdown-dir":"./src/markdown-dir.ts","./theme-picker":"./src/theme-picker.tsx","./create-project":"./src/create-project.ts","./providers/adapter":"./src/providers/adapter.ts"},"gitHead":"17f84d45bcfaeb533ea72c25aa51056c3e7d7fd3","scripts":{"play":"bun --cwd templates/playground src/index.tsx","ship":"bun run typecheck && npm version patch && npm publish --access public && git push --follow-tags && bun run smoke","smoke":"bun run scripts/smoke.ts","typecheck":"bunx tsc --noEmit","ship:major":"bun run typecheck && npm version major && npm publish --access public && git push --follow-tags && bun run smoke","ship:minor":"bun run typecheck && npm version minor && npm publish --access public && git push --follow-tags && bun run smoke","play:script":"bun --cwd templates/playground src/index.tsx --script"},"_npmUser":{"name":"aflekkas","email":"aflekkas@gmail.com"},"repository":{"url":"git+https://github.com/aflekkas/vibecli.git","type":"git"},"workspaces":["templates/playground"],"_npmVersion":"11.6.2","description":"Reusable Ink + AI SDK primitives for vibecoded CLIs.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@types/bun":"^1.3.0","typescript":"^5.7.2","@types/react":"^18.3.12","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"peerDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"_npmOperationalInternal":{"tmp":"tmp/vibecli_0.0.12_1777234410635_0.3176494027662311","host":"s3://npm-registry-packages-npm-production"}},"0.0.13":{"name":"@aflekkas/vibecli","version":"0.0.13","keywords":["ink","tui","cli","ai","anthropic","openai","vibecoding"],"author":{"name":"Alexandros Lekkas"},"license":"MIT","_id":"@aflekkas/vibecli@0.0.13","maintainers":[{"name":"aflekkas","email":"aflekkas@gmail.com"}],"homepage":"https://github.com/aflekkas/vibecli#readme","bugs":{"url":"https://github.com/aflekkas/vibecli/issues"},"bin":{"vibecli":"bin/vibecli.js"},"dist":{"shasum":"3c5455a86483cf49e77d0f903b797cb5bb450023","tarball":"https://registry.npmjs.org/@aflekkas/vibecli/-/vibecli-0.0.13.tgz","fileCount":46,"integrity":"sha512-HBTlU8aNn0Dme1xGJ+z7JYfNaLrMCim6o55mZCPno0QUwUi8bkl1tmUBl5BK1oTKK1BFXDKaLxxpWRuXcpd8tw==","signatures":[{"sig":"MEUCIDSBZ15VBDbr6DSh7AlkJQXpBSNozYbGDzdh+4JsUYAVAiEAkL9p8rztcft+/0Tz54d5euC+6YqFpscuBOPG3Euy2fA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":171133},"type":"module","exports":{".":"./src/index.ts","./ui":"./src/ui.tsx","./lsp":"./src/lsp.ts","./mcp":"./src/mcp.ts","./agent":"./src/agent.ts","./retry":"./src/retry.ts","./config":"./src/ui-config.tsx","./picker":"./src/picker.tsx","./themes":"./src/themes.ts","./commands":"./src/commands/reserved.ts","./repo-map":"./src/repo-map.ts","./clipboard":"./src/clipboard.ts","./highlight":"./src/highlight.ts","./providers":"./src/providers/types.ts","./scenarios":"./src/scenarios.ts","./text-input":"./src/text-input.tsx","./checkpoints":"./src/checkpoints.ts","./frontmatter":"./src/frontmatter.ts","./status-line":"./src/status-line.ts","./markdown-dir":"./src/markdown-dir.ts","./theme-picker":"./src/theme-picker.tsx","./create-project":"./src/create-project.ts","./providers/adapter":"./src/providers/adapter.ts"},"gitHead":"d65674abe11d8a499829506af3a60d3a18152c33","scripts":{"play":"bun --cwd templates/playground src/index.tsx","ship":"bun run typecheck && npm version patch && npm publish --access public && git push --follow-tags && bun run smoke","smoke":"bun run scripts/smoke.ts","typecheck":"bunx tsc --noEmit","ship:major":"bun run typecheck && npm version major && npm publish --access public && git push --follow-tags && bun run smoke","ship:minor":"bun run typecheck && npm version minor && npm publish --access public && git push --follow-tags && bun run smoke","play:script":"bun --cwd templates/playground src/index.tsx --script"},"_npmUser":{"name":"aflekkas","email":"aflekkas@gmail.com"},"repository":{"url":"git+https://github.com/aflekkas/vibecli.git","type":"git"},"workspaces":["templates/playground"],"_npmVersion":"11.6.2","description":"Reusable Ink + AI SDK primitives for vibecoded CLIs.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@types/bun":"^1.3.0","typescript":"^5.7.2","@types/react":"^18.3.12","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"peerDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"_npmOperationalInternal":{"tmp":"tmp/vibecli_0.0.13_1777234717652_0.11450772916488394","host":"s3://npm-registry-packages-npm-production"}},"0.0.14":{"name":"@aflekkas/vibecli","version":"0.0.14","keywords":["ink","tui","cli","ai","anthropic","openai","vibecoding"],"author":{"name":"Alexandros Lekkas"},"license":"MIT","_id":"@aflekkas/vibecli@0.0.14","maintainers":[{"name":"aflekkas","email":"aflekkas@gmail.com"}],"homepage":"https://github.com/aflekkas/vibecli#readme","bugs":{"url":"https://github.com/aflekkas/vibecli/issues"},"bin":{"vibecli":"bin/vibecli.js"},"dist":{"shasum":"f8c487810d15b02a7463eaa37d48750629087bb8","tarball":"https://registry.npmjs.org/@aflekkas/vibecli/-/vibecli-0.0.14.tgz","fileCount":44,"integrity":"sha512-nO6pJ+rnW1AGIapk4qqDLhYrVeybJwhI73Bhih2fPtSt64dFv74itirptTviLxb9M47G2uSU0YG0NpveuS7Vgg==","signatures":[{"sig":"MEUCIQCG8ZukbP0RupN5nm0zCEJsxKSoT6nKYOE8bP2fMcMuZwIgRDcmxmbQha1QRf277tGlK0+S+NYPUsyOWkub4An+iKo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":170951},"type":"module","exports":{".":"./src/index.ts","./ui":"./src/ui.tsx","./lsp":"./src/lsp.ts","./mcp":"./src/mcp.ts","./agent":"./src/agent.ts","./retry":"./src/retry.ts","./config":"./src/ui-config.tsx","./picker":"./src/picker.tsx","./themes":"./src/themes.ts","./commands":"./src/commands/reserved.ts","./repo-map":"./src/repo-map.ts","./clipboard":"./src/clipboard.ts","./highlight":"./src/highlight.ts","./providers":"./src/providers/types.ts","./scenarios":"./src/scenarios.ts","./text-input":"./src/text-input.tsx","./checkpoints":"./src/checkpoints.ts","./frontmatter":"./src/frontmatter.ts","./status-line":"./src/status-line.ts","./markdown-dir":"./src/markdown-dir.ts","./theme-picker":"./src/theme-picker.tsx","./create-project":"./src/create-project.ts","./providers/adapter":"./src/providers/adapter.ts"},"gitHead":"bc66ec0fe6e876decc82012886cfd8f3c410ef7c","scripts":{"play":"bun --cwd templates/playground src/index.tsx","ship":"bun run typecheck && npm version patch && npm publish --access public && git push --follow-tags && bun run smoke","smoke":"bun run scripts/smoke.ts","typecheck":"bunx tsc --noEmit","ship:major":"bun run typecheck && npm version major && npm publish --access public && git push --follow-tags && bun run smoke","ship:minor":"bun run typecheck && npm version minor && npm publish --access public && git push --follow-tags && bun run smoke","play:script":"bun --cwd templates/playground src/index.tsx --script"},"_npmUser":{"name":"aflekkas","email":"aflekkas@gmail.com"},"repository":{"url":"git+https://github.com/aflekkas/vibecli.git","type":"git"},"workspaces":["templates/playground"],"_npmVersion":"11.6.2","description":"Reusable Ink + AI SDK primitives for vibecoded CLIs.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@types/bun":"^1.3.0","typescript":"^5.7.2","@types/react":"^18.3.12","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"peerDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"_npmOperationalInternal":{"tmp":"tmp/vibecli_0.0.14_1777234812725_0.17339064690052464","host":"s3://npm-registry-packages-npm-production"}},"0.0.15":{"name":"@aflekkas/vibecli","version":"0.0.15","keywords":["ink","tui","cli","ai","anthropic","openai","vibecoding"],"author":{"name":"Alexandros Lekkas"},"license":"MIT","_id":"@aflekkas/vibecli@0.0.15","maintainers":[{"name":"aflekkas","email":"aflekkas@gmail.com"}],"homepage":"https://github.com/aflekkas/vibecli#readme","bugs":{"url":"https://github.com/aflekkas/vibecli/issues"},"bin":{"vibecli":"bin/vibecli.js"},"dist":{"shasum":"849634cd8efbcdf8646397a57927eef21257a457","tarball":"https://registry.npmjs.org/@aflekkas/vibecli/-/vibecli-0.0.15.tgz","fileCount":53,"integrity":"sha512-fHMScbe0+LgMsYn9yyaisTVp7fleJylokSr9gAnllJxJ3xaY8hZwvPcduigOrXz1YsahxwhBirodn7gvjVcc/w==","signatures":[{"sig":"MEUCIQD1aoqkCkrt+oKFqMD7iV4fhtHMxmPBdSPC6h5qjNrf5wIgVRtbPnSqxyujZ8tYLT2m46ehAZ4de3OuuJ0LAJNfLbc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":224324},"type":"module","exports":{".":"./src/index.ts","./ui":"./src/ui.tsx","./lsp":"./src/lsp.ts","./mcp":"./src/mcp.ts","./chat":"./src/chat.tsx","./agent":"./src/agent.ts","./retry":"./src/retry.ts","./slash":"./src/commands/slash.ts","./config":"./src/ui-config.tsx","./models":"./src/models.tsx","./picker":"./src/picker.tsx","./themes":"./src/themes.ts","./commands":"./src/commands/reserved.ts","./repo-map":"./src/repo-map.ts","./settings":"./src/settings.ts","./clipboard":"./src/clipboard.ts","./highlight":"./src/highlight.ts","./providers":"./src/providers/types.ts","./scenarios":"./src/scenarios.ts","./text-input":"./src/text-input.tsx","./checkpoints":"./src/checkpoints.ts","./frontmatter":"./src/frontmatter.ts","./permissions":"./src/permissions.tsx","./status-line":"./src/status-line.ts","./markdown-dir":"./src/markdown-dir.ts","./theme-picker":"./src/theme-picker.tsx","./create-project":"./src/create-project.ts","./providers/adapter":"./src/providers/adapter.ts"},"gitHead":"7d621185e04deed2ce479e7f31f80069bd53bb27","scripts":{"play":"bun --cwd templates/playground src/index.tsx","ship":"bun run typecheck && npm version patch && npm publish --access public && git push --follow-tags && bun run smoke","smoke":"bun run scripts/smoke.ts","typecheck":"bunx tsc --noEmit","ship:major":"bun run typecheck && npm version major && npm publish --access public && git push --follow-tags && bun run smoke","ship:minor":"bun run typecheck && npm version minor && npm publish --access public && git push --follow-tags && bun run smoke","play:script":"bun --cwd templates/playground src/index.tsx --script"},"_npmUser":{"name":"aflekkas","email":"aflekkas@gmail.com"},"repository":{"url":"git+https://github.com/aflekkas/vibecli.git","type":"git"},"workspaces":["templates/playground"],"_npmVersion":"11.6.2","description":"Primitives for vibecoding your own CLI agent. Agents are loops; harnesses inject context and run commands; vibecli ships the rest.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@types/bun":"^1.3.0","typescript":"^5.7.2","@types/react":"^18.3.12","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"peerDependencies":{"ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","@ai-sdk/openai":"^3.0.53","@ai-sdk/anthropic":"^3.0.71"},"_npmOperationalInternal":{"tmp":"tmp/vibecli_0.0.15_1777236442018_0.4280289668372581","host":"s3://npm-registry-packages-npm-production"}},"0.0.16":{"name":"@aflekkas/vibecli","version":"0.0.16","description":"Primitives for vibecoding your own CLI agent. Agents are loops; harnesses inject context and run commands; vibecli ships the rest.","type":"module","license":"MIT","author":{"name":"Alexandros Lekkas"},"repository":{"type":"git","url":"git+https://github.com/aflekkas/vibecli.git"},"bin":{"vibecli":"bin/vibecli.js"},"keywords":["ink","tui","cli","ai","anthropic","openai","vibecoding"],"exports":{".":"./src/index.ts","./text-input":"./src/ui/text-input.tsx","./clipboard":"./src/io/clipboard.ts","./highlight":"./src/ui/highlight.ts","./ui":"./src/ui/ui.tsx","./config":"./src/ui/ui-config.tsx","./retry":"./src/agent/retry.ts","./create-project":"./src/scaffold/create-project.ts","./checkpoints":"./src/agent/checkpoints.ts","./lsp":"./src/io/lsp.ts","./mcp":"./src/io/mcp.ts","./repo-map":"./src/io/repo-map.ts","./status-line":"./src/io/status-line.ts","./picker":"./src/ui/picker.tsx","./providers":"./src/providers/types.ts","./providers/adapter":"./src/providers/adapter.ts","./agent":"./src/agent/agent.ts","./themes":"./src/ui/themes.ts","./theme-picker":"./src/ui/theme-picker.tsx","./commands":"./src/commands/reserved.ts","./frontmatter":"./src/io/frontmatter.ts","./markdown-dir":"./src/io/markdown-dir.ts","./scenarios":"./src/agent/scenarios.ts","./chat":"./src/ui/chat.tsx","./models":"./src/ui/models.tsx","./slash":"./src/commands/slash.ts","./settings":"./src/config/settings.ts","./permissions":"./src/config/permissions.tsx"},"workspaces":["templates/playground"],"scripts":{"typecheck":"bunx tsc --noEmit","play":"bun --cwd templates/playground src/index.tsx","play:script":"bun --cwd templates/playground src/index.tsx --script","smoke":"bun run scripts/smoke.ts","ship":"bun run typecheck && npm version patch && npm publish --access public && git push --follow-tags && bun run smoke","ship:minor":"bun run typecheck && npm version minor && npm publish --access public && git push --follow-tags && bun run smoke","ship:major":"bun run typecheck && npm version major && npm publish --access public && git push --follow-tags && bun run smoke"},"peerDependencies":{"ai":"^6.0.168","@ai-sdk/anthropic":"^3.0.71","@ai-sdk/openai":"^3.0.53","ink":"^5.0.1","react":"^18.3.1"},"devDependencies":{"@ai-sdk/anthropic":"^3.0.71","@ai-sdk/openai":"^3.0.53","@types/bun":"^1.3.0","@types/react":"^18.3.12","ai":"^6.0.168","ink":"^5.0.1","react":"^18.3.1","typescript":"^5.7.2"},"dependencies":{"@modelcontextprotocol/sdk":"^1.29.0","zod":"^4.3.6"},"gitHead":"7fd1b9fd74a5459e34104a78673248f48fcb37ba","_id":"@aflekkas/vibecli@0.0.16","bugs":{"url":"https://github.com/aflekkas/vibecli/issues"},"homepage":"https://github.com/aflekkas/vibecli#readme","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-A7E/4gg0cj24NAtOResyngTvc9p/uRkYCZsOI71SyDzi697CUEV5uL0SjO1ZOw5zs6OmGn73fjU3atRwSQvFdA==","shasum":"01cb7f4aca0e4e79fbd1e50891e5041526aa0947","tarball":"https://registry.npmjs.org/@aflekkas/vibecli/-/vibecli-0.0.16.tgz","fileCount":53,"unpackedSize":226039,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCI1PenOUG7rL3AHbe6ZUGi93SRD8E1MhHatzO0q0Z8EQIhAJHqcTrhuYfyZp7QvnOao3Q1gS2p99HtOOYhLNNSKAIo"}]},"_npmUser":{"name":"aflekkas","email":"aflekkas@gmail.com"},"directories":{},"maintainers":[{"name":"aflekkas","email":"aflekkas@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vibecli_0.0.16_1777238224934_0.9986507594688079"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-26T02:31:56.492Z","modified":"2026-04-26T21:17:05.185Z","0.0.1":"2026-04-26T02:31:56.818Z","0.0.2":"2026-04-26T04:23:04.666Z","0.0.3":"2026-04-26T04:25:11.780Z","0.0.4":"2026-04-26T04:26:20.170Z","0.0.5":"2026-04-26T04:39:47.723Z","0.0.6":"2026-04-26T04:46:09.771Z","0.0.7":"2026-04-26T04:52:10.583Z","0.0.8":"2026-04-26T04:52:18.544Z","0.0.9":"2026-04-26T04:57:29.573Z","0.0.10":"2026-04-26T05:12:47.441Z","0.0.11":"2026-04-26T19:43:53.144Z","0.0.12":"2026-04-26T20:13:30.814Z","0.0.13":"2026-04-26T20:18:37.794Z","0.0.14":"2026-04-26T20:20:12.858Z","0.0.15":"2026-04-26T20:47:22.162Z","0.0.16":"2026-04-26T21:17:05.090Z"},"bugs":{"url":"https://github.com/aflekkas/vibecli/issues"},"author":{"name":"Alexandros Lekkas"},"license":"MIT","homepage":"https://github.com/aflekkas/vibecli#readme","keywords":["ink","tui","cli","ai","anthropic","openai","vibecoding"],"repository":{"type":"git","url":"git+https://github.com/aflekkas/vibecli.git"},"description":"Primitives for vibecoding your own CLI agent. Agents are loops; harnesses inject context and run commands; vibecli ships the rest.","maintainers":[{"name":"aflekkas","email":"aflekkas@gmail.com"}],"readme":"# 🛠️ vibecli\n\n[![npm](https://img.shields.io/npm/v/@aflekkas/vibecli.svg)](https://www.npmjs.com/package/@aflekkas/vibecli)\n\nStand up your own CLI agent in an afternoon. Agents are loops. Harnesses inject context and run commands. vibecli ships the primitives so the rest is yours.\n\nPre-alpha. The API will move, pin a version and expect breakage on minor bumps.\n\n## 🧠 Thesis\n\nAn AI agent is a loop: build a prompt, call the model, run the tool calls, feed results back, repeat until done. A harness around that loop is a context-injector and a command-runner. Strip the brand off Claude Code, Cursor, Cline, or Aider and you find the same skeleton. vibecli is that skeleton as small, single-purpose primitives — provider plumbing, an agent loop, an Ink text input that survives paste, a markdown highlighter, theming, slash commands from a directory of `.md` files, scripted scenarios — plus a `vibecli init` scaffolder that drops you into a runnable Ink + AI-SDK CLI in one command.\n\nThe motivating use case is the company that needs an internal CLI agent and cannot use the closed products. They have OAuth, internal data, domain-specific tools, security review. They cannot send their codebase to a vendor and they cannot fork a SaaS UI. So they vibecode their own CLI on vibecli, ship it as a binary to their team, and own every product decision. The same shape works for the solo founder wrapping their SaaS API, the research lab over their dataset, the consultant shipping a one-off deliverable, and the hobbyist with personal notes.\n\nThe convention layer leans on the filesystem. Slash commands are markdown files in a directory. Themes are objects in a registry. Scenarios are scripted JSON. Agent identity is a string. Settings are a hierarchy of JSON files. Permissions are glob patterns. There is no framework to extend, no plugin manifest, no inversion of control. You write the loop's caller, the input handler, the tool runners, and the rendering. vibecli ships the parts that benefit from sharing, in `src/` modules small enough to read in one sitting.\n\nThis is a library, not a framework, and not a product. The package surface is functions and React components. The in-tree `templates/playground/` is demo wiring, not API. The boundary is real: nothing in `src/` knows about any specific consumer. Pre-alpha is honest about API churn — pin a version, read the release notes, expect every change to break something until proven otherwise.\n\nA natural next primitive is multi-agent coordination — a planner that hands off to specialists, a supervisor watching a long-running task, an inspector auditing another agent's tool calls. Each of those is, again, just a loop with disciplined IO around it. Direction, not commitment.\n\nFull thesis: [THESIS.md](./THESIS.md).\n\n## 📦 Install\n\n```bash\nbun add @aflekkas/vibecli\n# or\nnpm install @aflekkas/vibecli\n```\n\nPeer deps live in your CLI: `ai`, `@ai-sdk/anthropic`, `@ai-sdk/openai`, `ink`, `react`. Install whichever you actually use, vibecli stays provider-agnostic at the top.\n\n## ⚡ Scaffold\n\nBootstrap a fresh Ink + AI SDK agent CLI, pre-wired to vibecli's primitives. Deps install automatically.\n\n```bash\nbunx @aflekkas/vibecli init my-cli\ncd my-cli\ncp .env.example .env  # paste your OPENAI_API_KEY\nbun run dev\n```\n\nThe default scaffold ships a working chat loop against `claude-sonnet-4-5` via `@ai-sdk/anthropic`. Any Vercel AI SDK provider works — the generated `README.md` documents the 3-line swap (install `@ai-sdk/<provider>`, change one import, change one constructor arg).\n\n### Templates\n\nThe scaffolder copies a real, runnable template from `templates/<name>/` inside the published package. Today vibecli ships one built-in template:\n\n- **`playground`** (default) — kitchen-sink demo wiring up the agent loop, theming, theme picker, clipboard image paste, and slash commands (`/theme`, `/clip`, `/clear`, `/help`). The intent is to demonstrate as many vibecli primitives as possible in a single file you can edit down. Also serves as the reference target for vibecli's own pre-release smoke tests.\n\nPick one with `--template <name>`. Future versions will ship more built-ins and accept community-contributed templates by short name.\n\nFlags: `--template <name>`, `--name <pkg>`, `--pm bun|npm`, `--vibecli <version>`, `--theme <name>`, `--no-prompt`, `--no-install` (skip auto-install), `--force` (overwrite existing files). The scaffolder writes `package.json`, `tsconfig.json`, `src/index.tsx`, `.env.example`, `README.md`, and `.gitignore`, then runs `bun install` (or `npm install`) in the new directory.\n\nThe `vibecli` bin uses a `#!/usr/bin/env bun` shebang, so bun must be on `PATH` to invoke it directly. `bunx` is the safest entry point.\n\n## 🤖 Docs MCP\n\nPoint a coding agent at the same docs you're reading right now. `bunx @aflekkas/vibecli mcp` runs **locally over stdio** — it's a thin wrapper around the README and `docs/*.md` that already ship inside the package. No hosted service, no network, no daemon: the AI client spawns the bin, the bin streams MCP messages on stdin/stdout, and the process exits when the client disconnects.\n\nThe point is to give an AI agent a structured handle on the current `0.0.x` API instead of falling back to training-data guesses or stale web search.\n\nRegister with Claude Code:\n\n```bash\nclaude mcp add vibecli -- bunx @aflekkas/vibecli mcp\n```\n\nAny other MCP-capable client (Cursor, mcp-inspector, etc.) registers the same way against `bunx @aflekkas/vibecli mcp`.\n\nWhat it exposes:\n\n- **Resources**: `vibecli://readme`, `vibecli://docs/configuration`, `vibecli://docs/cli`, `vibecli://exports` (the `package.json` `exports` map plus the subpath catalog as JSON).\n- **Tools**: `list_subpaths` (every importable subpath with a one-line summary) and `get_subpath_docs({ name })` (per-subpath summary, canonical import statement, and a pointer into the README example).\n\nThe server's docs version is the package's docs version. `bun update @aflekkas/vibecli` is also a docs bump for any agent connected to it.\n\n## 🧰 What's in here\n\nUse subpath imports for focused code. The root package also re-exports the current primitives for convenience.\n\n| Subpath | What you get |\n|---|---|\n| `@aflekkas/vibecli/text-input` | `<TextInput>` Ink widget with configurable submit/newline/history bindings, paste, undo, cursor navigation, and multi-line buffer support |\n| `@aflekkas/vibecli/clipboard` | Image-file helpers, macOS clipboard image extraction via `osascript`, dragged image-path extraction, and tempfile writer for image-bearing prompts |\n| `@aflekkas/vibecli/highlight` | Markdown code-fence syntax highlighter for streaming model output, language-aware theming |\n| `@aflekkas/vibecli/ui` | Theme helpers, gradient colors/text, color math, and terminal-safe `wrapText` |\n| `@aflekkas/vibecli/config` | `VibeConfigProvider`, shared UI config, loading/message defaults, and merge helpers |\n| `@aflekkas/vibecli/retry` | `withRetry()` exponential-backoff wrapper for the initial (non-stream) provider call |\n| `@aflekkas/vibecli/create-project` | Programmatic Ink app scaffold writer used by `vibecli init` |\n| `@aflekkas/vibecli/checkpoints` | Generic checkpoint history with undo/redo snapshots |\n| `@aflekkas/vibecli/lsp` | Small LSP position/range and file URI conversion helpers |\n| `@aflekkas/vibecli/mcp` | MCP tool/result normalization helpers for the generic provider tool types |\n| `@aflekkas/vibecli/repo-map` | Lightweight repository file map, language summary, and kind classification |\n| `@aflekkas/vibecli/status-line` | Status-line command runner and truncation helpers |\n| `@aflekkas/vibecli/picker` | `<Picker>` Ink component — paginated, single-line-per-item modal menu with title, optional subtitle, descriptions, hints, page indicator, and footer |\n| `@aflekkas/vibecli/themes` | Built-in theme registry (`pink`, `ocean`, `matrix`, `amber`, `claude`, `mono`) plus `defineTheme({ accent, ... })` to author your own |\n| `@aflekkas/vibecli/theme-picker` | `<ThemePicker>` Ink widget for live theme switching — arrow keys, enter, esc |\n| `@aflekkas/vibecli/commands` | `DEFAULT_RESERVED` slash-command names (`help`, `clear`, `new`, `exit`, `quit`, `restart`, `paste`) plus `extendReserved(...sets)` to merge in your own |\n| `@aflekkas/vibecli/slash` | `createSlashRegistry().add(name, handler, description?).dispatch(input) → \"handled\" \\| \"unknown\" \\| \"not-slash\"` — chainable slash-command builder with `help()` line generator |\n| `@aflekkas/vibecli/frontmatter` | `parseFrontmatter()` for `---\\nkey: value\\n---` markdown headers, plus `parseBool` and `deriveDescription` helpers |\n| `@aflekkas/vibecli/markdown-dir` | `loadMarkdownDir<T>()` — walks one or more dirs of `.md` files (or `dir/SKILL.md`-style entrypoints), parses each via your `parseEntry`, dedupes by name, skips reserved names |\n| `@aflekkas/vibecli/providers` | Generic `Message`, `ContentBlock`, `ToolDef`, `Provider`, `StreamEvent` types you build against |\n| `@aflekkas/vibecli/providers/adapter` | `AiSdkProvider`, Vercel AI SDK adapter wired for Anthropic prompt caching, adaptive thinking, and OpenAI prompt-cache keys |\n| `@aflekkas/vibecli/agent` | `createAgent(provider, system, opts)` — provider-agnostic stream loop with tool execution, abort handling, tool-result truncation, optional auto-compaction, and lifecycle hooks |\n| `@aflekkas/vibecli/scenarios` | `runScenario(agent, steps, opts?)` and `runScenarioFile(path, agent, opts?)` — scripted scenario runner for agent CLIs, drives a step list (or JSON file of steps), asserts on assistant text, returns a structured result |\n| `@aflekkas/vibecli/chat` | `useAgentStream(agent, opts?)` React hook (turns reducer, streaming text accumulator, busy + AbortController, `onEvent` for tool/usage/abort/compaction surfacing, `onBeforeSend` for checkpoint snapshotting) and `<MessageList>` Ink component that renders turns with per-role styling from `useVibeConfig().messages.roles` |\n| `@aflekkas/vibecli/models` | `defineModel({ id, providerName, build })` registry helper plus `<ModelPicker models value onPick onCancel>` Ink widget — same modal shape as `<ThemePicker>` but for the multi-provider model router |\n| `@aflekkas/vibecli/settings` | `loadSettingsHierarchy({ files, arrayPolicy? })` — reads multiple JSON files in order and deep-merges them (missing files silently skipped); `mergeSettings(base, override, opts?)` — pure deep merge with per-key array policy (`concat`, `replace`, `dedupe`) |\n| `@aflekkas/vibecli/permissions` | `evaluatePermission({ tool, inputKey?, rules })` — pure glob-based allow/ask/deny rule evaluator (consumer interprets mode semantics in `onLifecycle`); `matchPermissionPattern(pattern, target)` — single-pattern test; `COMMON_PERMISSION_MODES` reference vocabulary; `<PermissionPrompt>` Ink modal for interactive allow/deny prompts |\n| `vibecli mcp` (bin subcommand) | Local stdio MCP server that wraps this package's README + `docs/*.md`. Plug into Claude Code so an agent can scaffold a vibecli CLI against the current API. See the **Docs MCP** section above. |\n\n## 📚 Docs\n\nThe docs are a small set of markdown files at the repo root and under [`docs/`](docs/). Each one cross-links its siblings at the bottom — browse from here on github, or point an MCP-capable agent at `bunx @aflekkas/vibecli mcp` to read the same content over the wire.\n\n| Page | What's in it |\n|---|---|\n| [`THESIS.md`](THESIS.md) | The why. Agents as loops, harness as context-injector + command-runner, files-and-folders as the API, motivating use case, and explicit anti-thesis. |\n| [`docs/cli.md`](docs/cli.md) | `vibecli init` flag-by-flag reference (theme, package manager, prompt + install toggles), `vibecli mcp` resources/tools, and local-smoke recipe. |\n| [`docs/configuration.md`](docs/configuration.md) | `VibeConfigProvider` shape, `<TextInput>` options, theme + gradient + role-message + loading defaults, highlighter ANSI overrides, `AiSdkProvider` per-provider knobs, and clipboard tempfile options. |\n\n## 🚀 Usage\n\nWrap a Vercel AI SDK model into a `Provider`:\n\n```ts\nimport { AiSdkProvider } from \"@aflekkas/vibecli/providers/adapter\";\nimport { createOpenAI } from \"@ai-sdk/openai\";\n\nconst openai = createOpenAI({ apiKey: process.env.OPENAI_API_KEY! });\n\nclass MyProvider extends AiSdkProvider {\n  constructor() {\n    super({\n      name: \"openai\",\n      model: \"gpt-4.1\",\n      languageModel: openai(\"gpt-4.1\"),\n      providerOptions: ({ sessionId }) => ({\n        openai: { promptCacheKey: sessionId },\n      }),\n    });\n  }\n}\n```\n\nStream a turn. The adapter normalizes AI SDK events into one `StreamEvent` union (`text_delta`, `thinking_delta`, `tool_call`, `done`):\n\n```ts\nconst provider = new MyProvider();\nfor await (const event of provider.stream({ system, messages, tools, signal })) {\n  if (event.type === \"text_delta\") process.stdout.write(event.text);\n  if (event.type === \"tool_call\") runTool(event.call);\n}\n```\n\nRun a streaming agent loop with tool execution:\n\n```ts\nimport { createAgent } from \"@aflekkas/vibecli/agent\";\n\nconst agent = createAgent(provider, \"You are a helpful CLI assistant.\", {\n  tools: [\n    {\n      def: {\n        name: \"now\",\n        description: \"Get the current ISO timestamp.\",\n        input_schema: { type: \"object\", properties: {} },\n      },\n      run: async () => new Date().toISOString(),\n    },\n  ],\n});\n\nfor await (const ev of agent.send(\"what time is it?\")) {\n  if (ev.type === \"text\") process.stdout.write(ev.text);\n  if (ev.type === \"tool_start\") console.error(`[tool] ${ev.name}`);\n}\n```\n\nRender the chat itself with one hook + one component — the hook owns the turns reducer, streaming-text accumulator, busy state, and abort controller; the component pulls per-role colors from `VibeConfigProvider`:\n\n```tsx\nimport { useAgentStream, MessageList } from \"@aflekkas/vibecli/chat\";\nimport { TextInput } from \"@aflekkas/vibecli/text-input\";\n\nfunction Chat({ agent }: { agent: Agent }) {\n  const { turns, send, busy, pushMeta, reset } = useAgentStream(agent);\n  const [input, setInput] = useState(\"\");\n  return (\n    <Box flexDirection=\"column\" gap={1}>\n      <MessageList turns={turns} />\n      <TextInput\n        value={input}\n        onChange={setInput}\n        placeholder={busy ? \"thinking...\" : \"ask anything\"}\n        onSubmit={(text) => { setInput(\"\"); void send(text); }}\n      />\n    </Box>\n  );\n}\n```\n\nSmoke-test a CLI by scripting a sequence of user inputs and assertions against the assistant's text:\n\n```ts\nimport { runScenario, type ScenarioStep } from \"@aflekkas/vibecli/scenarios\";\n\nconst steps: ScenarioStep[] = [\n  { input: \"say hi\", expectContains: \"hi\" },\n  { input: \"what is 2+2?\", expectMatches: /\\b4\\b/ },\n];\n\nconst result = await runScenario(agent, steps);\nif (result.failed > 0) process.exit(1);\n```\n\nBuild a slash-command dispatcher and dispatch from any input handler:\n\n```ts\nimport { createSlashRegistry } from \"@aflekkas/vibecli/slash\";\n\nconst slash = createSlashRegistry()\n  .add(\"clear\", () => reset(), \"clear the conversation\")\n  .add(\"theme\", () => openThemePicker(), \"switch theme\")\n  .add(\"help\", () => pushMeta(slash.help()), \"list available commands\");\n\n// In a TextInput onSubmit handler:\nconst result = await slash.dispatch(input);\nif (result === \"not-slash\") await send(input);\nif (result === \"unknown\") pushMeta(`unknown command: ${input}`);\n```\n\nLoad layered JSON settings files with configurable array-merge policies:\n\n```ts\nimport { loadSettingsHierarchy, mergeSettings } from \"@aflekkas/vibecli/settings\";\n\nconst { merged, sources } = loadSettingsHierarchy({\n  files: [\n    { path: `${process.env.HOME}/.myapp/settings.json`, scope: \"user\" },\n    { path: `${process.cwd()}/.myapp/settings.json`, scope: \"project\" },\n  ],\n  arrayPolicy: {\n    \"permissions.allow\": \"concat\",\n    \"hooks\": \"replace\",\n  },\n});\n// sources[n].exists / .error for diagnostics; merged is the final config.\n```\n\nDrop `<TextInput>` into an Ink app:\n\n```tsx\nimport { TextInput } from \"@aflekkas/vibecli/text-input\";\n\n<TextInput\n  value={value}\n  onChange={setValue}\n  onSubmit={(text) => send(text)}\n  placeholder=\"ask anything\"\n/>\n```\n\nConfigure key behavior without forking the component:\n\n```tsx\n<TextInput\n  value={value}\n  onChange={setValue}\n  onSubmit={(text) => send(text)}\n  options={{\n    newlineOn: [\"return\"],\n    submitOn: [\"meta+return\"],\n    historyPrevOn: [],\n    tabText: \"\\t\",\n  }}\n/>\n```\n\nWrap any flaky call in retry:\n\n```ts\nimport { withRetry } from \"@aflekkas/vibecli/retry\";\n\nconst result = await withRetry(() => callProvider(), { retries: 3, baseMs: 500 });\n```\n\nCreate undoable snapshots around any app-defined state:\n\n```ts\nimport { createCheckpointHistory } from \"@aflekkas/vibecli/checkpoints\";\n\nconst history = createCheckpointHistory({ files: [] });\nhistory.checkpoint({ files: [\"src/index.tsx\"] }, \"add entrypoint\");\nconst previous = history.undo();\n```\n\nBuild compact repo context and convert offsets to LSP ranges:\n\n```ts\nimport { buildRepoMap } from \"@aflekkas/vibecli/repo-map\";\nimport { rangeAt } from \"@aflekkas/vibecli/lsp\";\n\nconst map = await buildRepoMap(process.cwd(), { maxFiles: 300 });\nconst range = rangeAt(source, match.index, match.index + match[0].length);\n```\n\nNormalize MCP tools/results into vibecli provider primitives:\n\n```ts\nimport { mcpResultToText, mcpToolsToToolDefs } from \"@aflekkas/vibecli/mcp\";\n\nconst tools = mcpToolsToToolDefs(await client.listTools());\nconst text = mcpResultToText(await client.callTool({ name, arguments: input }));\n```\n\nRender a modal menu over your TUI. The host owns selection state and key handling; `<Picker>` is the visual:\n\n```tsx\nimport { Picker, type PickerItem } from \"@aflekkas/vibecli/picker\";\n\nconst items: PickerItem[] = [\n  { key: \"a\", label: \"Restart\", description: \"Reload the agent\" },\n  { key: \"b\", label: \"Exit\", description: \"Quit the CLI\" },\n];\n\n<Picker\n  title=\"actions\"\n  items={items}\n  selected={selected}\n  columns={process.stdout.columns ?? 80}\n  rows={process.stdout.rows ?? 24}\n/>;\n```\n\nScaffold a small Ink app from the package binary:\n\n```bash\nbunx @aflekkas/vibecli init my-cli\n```\n\n## ⚙️ Configuration\n\nUse one config object as the source of truth for text UI defaults: theme, text input behavior, message prefixes, loading copy, spinner frames, and highlighter colors.\n\n```tsx\nimport { VibeConfigProvider } from \"@aflekkas/vibecli/config\";\nimport { GradientText } from \"@aflekkas/vibecli/ui\";\nimport { TextInput } from \"@aflekkas/vibecli/text-input\";\n\nconst uiConfig = {\n  theme: {\n    colors: {\n      accent: \"#38bdf8\",\n      placeholder: \"#64748b\",\n    },\n    gradient: {\n      hueStart: 190,\n      hueSpan: 120,\n      saturation: 0.82,\n      lightness: 0.58,\n    },\n  },\n  textInput: {\n    placeholder: \"ask anything\",\n    options: {\n      newlineOn: [\"return\"],\n      submitOn: [\"meta+return\"],\n    },\n  },\n  messages: {\n    roles: {\n      assistant: { prefix: \"ai> \", color: \"#38bdf8\" },\n    },\n  },\n  loading: {\n    labels: [\"Thinking\", \"Working\"],\n    frames: [\".\", \"o\", \"O\", \"o\"],\n  },\n};\n\n<VibeConfigProvider config={uiConfig}>\n  <GradientText text=\"my-cli\" />\n  <TextInput value={value} onChange={setValue} onSubmit={send} />\n</VibeConfigProvider>;\n```\n\n### 🎨 Theming\n\nPick a built-in or define your own. A theme is just a `VibeConfigInput` — pass it to `VibeConfigProvider` and every primitive picks it up.\n\n```tsx\nimport { VibeConfigProvider } from \"@aflekkas/vibecli/config\";\nimport { themes, defineTheme } from \"@aflekkas/vibecli/themes\";\nimport { ThemePicker } from \"@aflekkas/vibecli/theme-picker\";\n\n// Use a built-in: pink (default), ocean, matrix, amber, claude, mono.\n<VibeConfigProvider config={themes.ocean}>{children}</VibeConfigProvider>;\n\n// Define your own — gradient + role colors derive from accent.\nconst sunset = defineTheme({ accent: \"#ff6b6b\", secondary: \"#feca57\" });\n<VibeConfigProvider config={sunset}>{children}</VibeConfigProvider>;\n\n// Live theme switcher (arrow keys + enter).\n<ThemePicker value={current} onPick={setCurrent} onCancel={close} />;\n```\n\nThe `vibecli init` scaffolder prompts for a theme during setup (`--theme <name>` skips the prompt) and ships a `/theme` command in the generated app that opens `<ThemePicker>` for live switching.\n\nDirect props still win for one-off overrides. `GradientText` accepts `theme`, `gradient`, or `colorAt`; `TextInput` accepts `placeholder`, `placeholderColor`, and `options`; `highlight(markdown, { config, theme })` accepts the same config object plus ANSI token overrides.\n\n### 📂 Slash commands from a markdown directory\n\nCompose `markdown-dir`, `frontmatter`, and `commands` to load user/project slash commands from `.md` files. The loader is generic over `T` — you pick the shape and write the per-entry parser.\n\n```ts\nimport { loadMarkdownDir } from \"@aflekkas/vibecli/markdown-dir\";\nimport { parseFrontmatter, deriveDescription, parseBool } from \"@aflekkas/vibecli/frontmatter\";\nimport { DEFAULT_RESERVED, extendReserved } from \"@aflekkas/vibecli/commands\";\n\ntype SlashCommand = {\n  name: string;\n  description: string;\n  body: string;\n  enabled: boolean;\n  source: string;\n};\n\nconst commands = loadMarkdownDir<SlashCommand>({\n  dirs: [\n    { dir: `${process.env.HOME}/.myapp/commands`, source: \"user\" },\n    { dir: `${process.cwd()}/.myapp/commands`, source: \"project\" },\n  ],\n  reserved: extendReserved(DEFAULT_RESERVED, [\"foo\", \"bar\"]),\n  parseEntry: (raw, ctx) => {\n    const fm = parseFrontmatter(raw);\n    const data = fm?.data ?? {};\n    const body = fm?.body ?? raw;\n    return {\n      name: data.name ?? ctx.name,\n      description: data.description ?? deriveDescription(body),\n      body,\n      enabled: parseBool(data.enabled, true),\n      source: ctx.path,\n    };\n  },\n});\n```\n\nProject-source dirs override user-source dirs by name (later entries in `dirs` win). Pass `mode: \"dir\"` + `dirEntrypoint: \"SKILL.md\"` to load Claude-Code-style `commands/<name>/SKILL.md` layouts instead of flat files.\n\n## 🚧 Boundary\n\nCode in `src/` is generic on purpose. The adapter inspects `\"anthropic\"` / `\"openai\"` strings to wire provider-specific options (cache control, prompt-cache keys, adaptive thinking), but nothing else app-specific belongs there: no runtime artifact paths, no specific tool names, no slash commands, no imports from any consumer. If a feature needs app context, take it as a constructor arg, function param, or React prop.\n\nThe boundary applies to `src/` only. `templates/playground/` is the in-tree consumer — opinionated wiring, slash commands, demo flows live there. Promotion from the playground into `src/` is cheap. Demotion after publish is an API break. When in doubt, build it in the playground first.\n\n## 🔧 Local development\n\n```bash\nbun install\nbun run typecheck\n```\n\nThis repo is itself built with a small claude-code-native stack — agents, skills, and slash commands live under [`.claude/`](.claude/) and `CLAUDE.md` orchestrates them. Open the directory if you're curious how the package is iterated on day to day.\n\nvibecli has its own canonical consumer in-tree at `templates/playground/`. It resolves `@aflekkas/vibecli/*` to local `src/*` via tsconfig paths, so edits to `src/` show up next run with no install or symlink dance. Run it interactively or scripted:\n\n```bash\nbun run play                                          # interactive Ink chat against local src/\nbun run play:script templates/playground/scenarios/<name>.json  # non-interactive, asserts assistant text\n```\n\nVerifying a release end-to-end:\n\n```bash\nbun run typecheck\ngit add . && git commit -m \"organize internals\"\nbun run ship   # typecheck → version bump → npm publish → push tags → bun run smoke\n```\n\n`bun run smoke` (`scripts/smoke.ts`) scaffolds the `playground` template into a tmpdir from the just-published version, real `bun install`, runs every scripted scenario in `templates/playground/scenarios/`, asserts pass. That's the integration test on every release. Set `OPENAI_API_KEY` in env before shipping for full coverage; without it the smoke step skips silently.\n\n## 🗺️ Roadmap\n\n- **More built-in templates.** `playground` is the only template today. Future built-ins might include a minimal \"barebones\" starter, an MCP-server-first template, a tools-heavy template, etc. Built-ins ship inside the npm package under `templates/<name>/`.\n- **Community / external templates.** `vibecli init --template <name>` will eventually resolve unknown names against a curated index (and/or `--template <github-user/repo>` for arbitrary git sources). The internal contract is already directory-shaped, so the surface to add is just resolution + caching.\n- **Public `vibecli play` subcommand.** Today `bun run play` is a vibecli-internal dev script. A future `vibecli play [--template <name>]` would let consumers scaffold-and-run a template from any project against their installed version.\n- **Headless UI scenarios.** Scripted scenarios cover the agent loop today. A future `--script-ui` mode (likely on top of `ink-testing-library`) would also exercise visual layout, slash-command UX, and theme switching non-interactively.\n\n## 📄 License\n\nMIT\n","readmeFilename":"README.md"}