{"_id":"@bojackduy/opencode-prompt-left","_rev":"18-db7f1bfb7cdad12ed78c5718e35b3cec","name":"@bojackduy/opencode-prompt-left","dist-tags":{"latest":"1.7.0"},"versions":{"0.1.2":{"name":"@bojackduy/opencode-prompt-left","version":"0.1.2","license":"MIT","_id":"@bojackduy/opencode-prompt-left@0.1.2","maintainers":[{"name":"bojackduy","email":"trinhchanduybojack@gmail.com"}],"homepage":"https://github.com/bojackduy/opencode-prompt-left#readme","bugs":{"url":"https://github.com/bojackduy/opencode-prompt-left/issues"},"dist":{"shasum":"46ac7c23afe3f7c528fc0514ffe00f0a95fd2ab6","tarball":"https://registry.npmjs.org/@bojackduy/opencode-prompt-left/-/opencode-prompt-left-0.1.2.tgz","fileCount":16,"integrity":"sha512-emxU4oMKkpspXsRjqw7djLOrzOh3of1KJ6iFkTCV/GNeHkoUQNFUV1NVp4O4aH+6Qr4bzAZ9g5zI2+NIvNI7mg==","signatures":[{"sig":"MEYCIQDRZDfr//YEiF7hECK7Ku2hcM1Okpo0G2Kwuoka32sYoQIhAKjppwpp+CBSSIOpJ+X40Pc6VIeAxp5JnVW30xOj2Flg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3105005},"type":"module","engines":{"bun":">=1.1.0","opencode":"^1.0.0"},"exports":{".":"./src/server.ts","./tui":"./src/tui.tsx","./server":"./src/server.ts"},"gitHead":"db74cf2513a3e31ade66a889b5e9168f9b70fc11","scripts":{"test":"bun test","build":"bun build src/server.ts --target=bun --external @opencode-ai/plugin --external @opencode-ai/sdk --outfile /tmp/prompt-left-server.js && bun build src/tui.tsx --target=bun --external @opencode-ai/plugin/tui --external @opentui/solid --external solid-js --outfile /tmp/prompt-left-tui.js","prepack":"bun run typecheck && bun test && bun run build","typecheck":"tsc -p tsconfig.json --noEmit","release:major":"bun run typecheck && bun test && npm version major -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:minor":"bun run typecheck && bun test && npm version minor -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:patch":"bun run typecheck && bun test && npm version patch -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)"},"_npmUser":{"name":"bojackduy","email":"trinhchanduybojack@gmail.com"},"repository":{"url":"git+https://github.com/bojackduy/opencode-prompt-left.git","type":"git"},"_npmVersion":"12.0.2","description":"Estimates how many similar prompts remain before provider quota runs out, shown in the OpenCode compact line.","directories":{},"_nodeVersion":"26.5.1","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"solid-js":"^1.9.13","@types/bun":"^1.3.14","typescript":"^6.0.3","@opentui/core":"^0.4.1","@opentui/solid":"^0.4.1","@opencode-ai/sdk":"^1.18.18","@opencode-ai/plugin":"^1.17.9"},"peerDependencies":{"solid-js":"*","@opentui/core":"*","@opentui/solid":"*","@opencode-ai/plugin":"*"},"_npmOperationalInternal":{"tmp":"tmp/opencode-prompt-left_0.1.2_1786731003061_0.06561936161375392","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@bojackduy/opencode-prompt-left","version":"0.1.3","license":"MIT","_id":"@bojackduy/opencode-prompt-left@0.1.3","maintainers":[{"name":"bojackduy","email":"trinhchanduybojack@gmail.com"}],"homepage":"https://github.com/bojackduy/opencode-prompt-left#readme","bugs":{"url":"https://github.com/bojackduy/opencode-prompt-left/issues"},"dist":{"shasum":"548c68f09cdec0dbe69d03d72f64e78ecfef6b19","tarball":"https://registry.npmjs.org/@bojackduy/opencode-prompt-left/-/opencode-prompt-left-0.1.3.tgz","fileCount":16,"integrity":"sha512-s9JkhMph/a+9KpjF7h0lVDhCRkkjEUfOqAMsi0SvRIKx7QBGnWJYBvxIJznvX4MEJmXHDD+p9ys9j79JJhkj+Q==","signatures":[{"sig":"MEUCIQCrRFcsEPbOEcF1qEOcoJaPsma/P8EOOrsZaH2BLFFKlAIgYHtyx6bw2/s/kbiKwFeR4bzicYqqNTHyh2nLCwjhmLQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bojackduy%2fopencode-prompt-left@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2562024},"type":"module","engines":{"bun":">=1.1.0","opencode":"^1.0.0"},"exports":{".":"./src/server.ts","./tui":"./src/tui.tsx","./server":"./src/server.ts"},"gitHead":"b350dca461281d3dfada004814917577adf14cd2","scripts":{"test":"bun test","build":"bun build src/server.ts --target=bun --external @opencode-ai/plugin --external @opencode-ai/sdk --outfile /tmp/prompt-left-server.js && bun build src/tui.tsx --target=bun --external @opencode-ai/plugin/tui --external @opentui/solid --external solid-js --outfile /tmp/prompt-left-tui.js","prepack":"bun run typecheck && bun test && bun run build","typecheck":"tsc -p tsconfig.json --noEmit","release:major":"bun run typecheck && bun test && npm version major -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:minor":"bun run typecheck && bun test && npm version minor -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:patch":"bun run typecheck && bun test && npm version patch -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8d8258e6-e086-4bdd-9f76-398492757fc5"}},"repository":{"url":"git+https://github.com/bojackduy/opencode-prompt-left.git","type":"git"},"_npmVersion":"11.17.0","description":"Estimates how many similar prompts remain before provider quota runs out, shown in the OpenCode compact line.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"solid-js":"^1.9.13","@types/bun":"^1.3.14","typescript":"^6.0.3","@opentui/core":"^0.4.1","@opentui/solid":"^0.4.1","@opencode-ai/sdk":"^1.18.18","@opencode-ai/plugin":"^1.17.9"},"peerDependencies":{"solid-js":"*","@opentui/core":"*","@opentui/solid":"*","@opencode-ai/plugin":"*"},"_npmOperationalInternal":{"tmp":"tmp/opencode-prompt-left_0.1.3_1786731268678_0.18866074588783888","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@bojackduy/opencode-prompt-left","version":"0.1.5","license":"MIT","_id":"@bojackduy/opencode-prompt-left@0.1.5","maintainers":[{"name":"bojackduy","email":"trinhchanduybojack@gmail.com"}],"homepage":"https://github.com/bojackduy/opencode-prompt-left#readme","bugs":{"url":"https://github.com/bojackduy/opencode-prompt-left/issues"},"dist":{"shasum":"5227f8e3da4aba84f11ad5a874a7ca7da04da1aa","tarball":"https://registry.npmjs.org/@bojackduy/opencode-prompt-left/-/opencode-prompt-left-0.1.5.tgz","fileCount":16,"integrity":"sha512-PRsn/BH2Z0fi0ymdjgU5Th1HcGFHCztH9PcJ1Ne4RpwCtrLpcYTzUMO6IKArcAMZRHyAwNQh0olzRN++ZUDtnA==","signatures":[{"sig":"MEQCIEPa+mpVwS/lvKXr5bitlHCFU9o2vm5Ctwmw9BEnIT4NAiAAlIbNdz3g0yv5FSbF8AaPKuAfj5TS+AjZ9e++BlGXvQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bojackduy%2fopencode-prompt-left@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":218161},"type":"module","engines":{"bun":">=1.1.0","opencode":"^1.0.0"},"exports":{".":"./src/server.ts","./tui":"./src/tui.tsx","./server":"./src/server.ts"},"gitHead":"f1e60cdea55b4a1772b3c6ea1ad7e2ad18bb3644","scripts":{"test":"bun test","build":"bun build src/server.ts --target=bun --external @opencode-ai/plugin --external @opencode-ai/sdk --outfile /tmp/prompt-left-server.js && bun build src/tui.tsx --target=bun --external @opencode-ai/plugin/tui --external @opentui/solid --external solid-js --outfile /tmp/prompt-left-tui.js","prepack":"bun run typecheck && bun test && bun run build","typecheck":"tsc -p tsconfig.json --noEmit","release:major":"bun run typecheck && bun test && npm version major -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:minor":"bun run typecheck && bun test && npm version minor -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:patch":"bun run typecheck && bun test && npm version patch -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8d8258e6-e086-4bdd-9f76-398492757fc5"}},"repository":{"url":"git+https://github.com/bojackduy/opencode-prompt-left.git","type":"git"},"_npmVersion":"11.17.0","description":"Estimates how many similar prompts remain before provider quota runs out, shown in the OpenCode compact line.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"solid-js":"^1.9.13","@types/bun":"^1.3.14","typescript":"^6.0.3","@opentui/core":"^0.4.1","@opentui/solid":"^0.4.1","@opencode-ai/sdk":"^1.18.18","@opencode-ai/plugin":"^1.17.9"},"peerDependencies":{"solid-js":"*","@opentui/core":"*","@opentui/solid":"*","@opencode-ai/plugin":"*"},"_npmOperationalInternal":{"tmp":"tmp/opencode-prompt-left_0.1.5_1786733769312_0.46655836954318586","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@bojackduy/opencode-prompt-left","version":"0.1.6","license":"MIT","_id":"@bojackduy/opencode-prompt-left@0.1.6","maintainers":[{"name":"bojackduy","email":"trinhchanduybojack@gmail.com"}],"homepage":"https://github.com/bojackduy/opencode-prompt-left#readme","bugs":{"url":"https://github.com/bojackduy/opencode-prompt-left/issues"},"dist":{"shasum":"90cdebefedad4aa66c9e3a4b8e8c22d8d10364b6","tarball":"https://registry.npmjs.org/@bojackduy/opencode-prompt-left/-/opencode-prompt-left-0.1.6.tgz","fileCount":16,"integrity":"sha512-xt9CxUeCyFRYiQInMhLUA2uEE/XrW49XAaOyYxCG0Km5KPX53d4VYYVasm74JPt94R/JvYZ5CB/Bnsz6SmbPSA==","signatures":[{"sig":"MEYCIQCFKBNUdnGrHsP+JlUoJm5HepCoXle04tOTqT0iD+iPyAIhAJUHM9wnpvfACn/yHWVqMyjpYLUaI6p2rPj/W1bgYqU0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bojackduy%2fopencode-prompt-left@0.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":220695},"type":"module","engines":{"bun":">=1.1.0","opencode":"^1.0.0"},"exports":{".":"./src/server.ts","./tui":"./src/tui.tsx","./server":"./src/server.ts"},"gitHead":"af25e8df8670c1ecc608444b58e50205e104eb09","scripts":{"test":"bun test","build":"bun build src/server.ts --target=bun --external @opencode-ai/plugin --external @opencode-ai/sdk --outfile /tmp/prompt-left-server.js && bun build src/tui.tsx --target=bun --external @opencode-ai/plugin/tui --external @opentui/solid --external solid-js --outfile /tmp/prompt-left-tui.js","prepack":"bun run typecheck && bun test && bun run build","typecheck":"tsc -p tsconfig.json --noEmit","release:major":"bun run typecheck && bun test && npm version major -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:minor":"bun run typecheck && bun test && npm version minor -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:patch":"bun run typecheck && bun test && npm version patch -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8d8258e6-e086-4bdd-9f76-398492757fc5"}},"repository":{"url":"git+https://github.com/bojackduy/opencode-prompt-left.git","type":"git"},"_npmVersion":"11.17.0","description":"Estimates how many similar prompts remain before provider quota runs out, shown in the OpenCode compact line.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"solid-js":"^1.9.13","@types/bun":"^1.3.14","typescript":"^6.0.3","@opentui/core":"^0.4.1","@opentui/solid":"^0.4.1","@opencode-ai/sdk":"^1.18.18","@opencode-ai/plugin":"^1.17.9"},"peerDependencies":{"solid-js":"*","@opentui/core":"*","@opentui/solid":"*","@opencode-ai/plugin":"*"},"_npmOperationalInternal":{"tmp":"tmp/opencode-prompt-left_0.1.6_1786767038846_0.30302060817204546","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@bojackduy/opencode-prompt-left","version":"0.1.7","license":"MIT","_id":"@bojackduy/opencode-prompt-left@0.1.7","maintainers":[{"name":"bojackduy","email":"trinhchanduybojack@gmail.com"}],"homepage":"https://github.com/bojackduy/opencode-prompt-left#readme","bugs":{"url":"https://github.com/bojackduy/opencode-prompt-left/issues"},"dist":{"shasum":"1f1a9e23994cb2b50222e968f08645d2e88da6c5","tarball":"https://registry.npmjs.org/@bojackduy/opencode-prompt-left/-/opencode-prompt-left-0.1.7.tgz","fileCount":16,"integrity":"sha512-kPjIjaZOfzzWG8EvDPqRGQnX95nKEagDwtnetDMslGhqKGirvszr3dpbEcCQfXFQXWFnFaloSXN9ZFDQDVZwjA==","signatures":[{"sig":"MEUCIQCY/g5OgsCQWIQjuznDZA5PJf5JmRAWPpctMDvtN3GJbgIgWR5YJ2qCpV1kk2Mm+GGd451ZTTgOT9HgCAwNz2mRpe4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bojackduy%2fopencode-prompt-left@0.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":226868},"type":"module","engines":{"bun":">=1.1.0","opencode":"^1.0.0"},"exports":{".":"./src/server.ts","./tui":"./src/tui.tsx","./server":"./src/server.ts"},"gitHead":"31af97126d7d45b2646d6816082807dc665ac0b5","scripts":{"test":"bun test","build":"bun build src/server.ts --target=bun --external @opencode-ai/plugin --external @opencode-ai/sdk --outfile /tmp/prompt-left-server.js && bun build src/tui.tsx --target=bun --external @opencode-ai/plugin/tui --external @opentui/solid --external solid-js --outfile /tmp/prompt-left-tui.js","prepack":"bun run typecheck && bun test && bun run build","typecheck":"tsc -p tsconfig.json --noEmit","release:major":"bun run typecheck && bun test && npm version major -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:minor":"bun run typecheck && bun test && npm version minor -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:patch":"bun run typecheck && bun test && npm version patch -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8d8258e6-e086-4bdd-9f76-398492757fc5"}},"repository":{"url":"git+https://github.com/bojackduy/opencode-prompt-left.git","type":"git"},"_npmVersion":"11.17.0","description":"Estimates how many similar prompts remain before provider quota runs out, shown in the OpenCode compact line.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"solid-js":"^1.9.13","@types/bun":"^1.3.14","typescript":"^6.0.3","@opentui/core":"^0.4.1","@opentui/solid":"^0.4.1","@opencode-ai/sdk":"^1.18.18","@opencode-ai/plugin":"^1.17.9"},"peerDependencies":{"solid-js":"*","@opentui/core":"*","@opentui/solid":"*","@opencode-ai/plugin":"*"},"_npmOperationalInternal":{"tmp":"tmp/opencode-prompt-left_0.1.7_1786768317884_0.5276477413816181","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@bojackduy/opencode-prompt-left","version":"0.1.8","license":"MIT","_id":"@bojackduy/opencode-prompt-left@0.1.8","maintainers":[{"name":"bojackduy","email":"trinhchanduybojack@gmail.com"}],"homepage":"https://github.com/bojackduy/opencode-prompt-left#readme","bugs":{"url":"https://github.com/bojackduy/opencode-prompt-left/issues"},"dist":{"shasum":"036cd6e39110889b7246d226e2881ee265a44409","tarball":"https://registry.npmjs.org/@bojackduy/opencode-prompt-left/-/opencode-prompt-left-0.1.8.tgz","fileCount":16,"integrity":"sha512-MORlgSbdNVwNZP4pdnxHC2EccLrcp2D1TW62gYYaI48MwNkoJVU0xKeqdx5PQxcwummhapuKlPnLpJu4pZ7VSg==","signatures":[{"sig":"MEUCIQC5cTUpwM2FJEaAacL4OpsDReSJMyNHVWiOZrVDOXkYGwIgEgyFTJc3aaf690ahzaJ0jggr3vWKU8y2OAmCeLVuJR4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bojackduy%2fopencode-prompt-left@0.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":234420},"type":"module","engines":{"bun":">=1.1.0","opencode":"^1.0.0"},"exports":{".":"./src/server.ts","./tui":"./src/tui.tsx","./server":"./src/server.ts"},"gitHead":"94602d9cb0dc94e8e29f982150ab38e850129e54","scripts":{"test":"bun test","build":"bun build src/server.ts --target=bun --external @opencode-ai/plugin --external @opencode-ai/sdk --outfile /tmp/prompt-left-server.js && bun build src/tui.tsx --target=bun --external @opencode-ai/plugin/tui --external @opentui/solid --external solid-js --outfile /tmp/prompt-left-tui.js","prepack":"bun run typecheck && bun test && bun run build","typecheck":"tsc -p tsconfig.json --noEmit","release:major":"bun run typecheck && bun test && npm version major -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:minor":"bun run typecheck && bun test && npm version minor -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:patch":"bun run typecheck && bun test && npm version patch -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8d8258e6-e086-4bdd-9f76-398492757fc5"}},"repository":{"url":"git+https://github.com/bojackduy/opencode-prompt-left.git","type":"git"},"_npmVersion":"11.17.0","description":"Estimates how many similar prompts remain before provider quota runs out, shown in the OpenCode compact line.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"solid-js":"^1.9.13","@types/bun":"^1.3.14","typescript":"^6.0.3","@opentui/core":"^0.4.1","@opentui/solid":"^0.4.1","@opencode-ai/sdk":"^1.18.18","@opencode-ai/plugin":"^1.17.9"},"peerDependencies":{"solid-js":"*","@opentui/core":"*","@opentui/solid":"*","@opencode-ai/plugin":"*"},"_npmOperationalInternal":{"tmp":"tmp/opencode-prompt-left_0.1.8_1786954407749_0.5447403604668457","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@bojackduy/opencode-prompt-left","version":"0.1.9","license":"AGPL-3.0-only","_id":"@bojackduy/opencode-prompt-left@0.1.9","maintainers":[{"name":"bojackduy","email":"trinhchanduybojack@gmail.com"}],"homepage":"https://github.com/bojackduy/opencode-prompt-left#readme","bugs":{"url":"https://github.com/bojackduy/opencode-prompt-left/issues"},"dist":{"shasum":"051fc38265a816ed69997cefc464c75e32ebf25e","tarball":"https://registry.npmjs.org/@bojackduy/opencode-prompt-left/-/opencode-prompt-left-0.1.9.tgz","fileCount":16,"integrity":"sha512-2954T7pmFXjEkY+j5S07t59ShtcLy8FpocDN65axXytKZSsu9bv+sPT3WvNQ1ues6VuEG+GCz1wmFJrKtHFWiQ==","signatures":[{"sig":"MEQCIBBFoRlLv4IGi7HnWAlYGXW3MU96s3nkVoqtmiW5DqLlAiAYTF4iJ/eSOqkcFLhBBlF79rlIKeKOygSAbeysvOO/Xg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bojackduy%2fopencode-prompt-left@0.1.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":267887},"type":"module","engines":{"bun":">=1.1.0","opencode":"^1.0.0"},"exports":{".":"./src/server.ts","./tui":"./src/tui.tsx","./server":"./src/server.ts"},"gitHead":"9a1d9e020777d8e6bc2c0b15a1232ce042a752cf","scripts":{"test":"bun test","build":"bun build src/server.ts --target=bun --external @opencode-ai/plugin --external @opencode-ai/sdk --outfile /tmp/prompt-left-server.js && bun build src/tui.tsx --target=bun --external @opencode-ai/plugin/tui --external @opentui/solid --external solid-js --outfile /tmp/prompt-left-tui.js","prepack":"bun run typecheck && bun test && bun run build","typecheck":"tsc -p tsconfig.json --noEmit","release:major":"bun run typecheck && bun test && npm version major -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:minor":"bun run typecheck && bun test && npm version minor -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:patch":"bun run typecheck && bun test && npm version patch -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8d8258e6-e086-4bdd-9f76-398492757fc5"}},"repository":{"url":"git+https://github.com/bojackduy/opencode-prompt-left.git","type":"git"},"_npmVersion":"11.17.0","description":"Estimates how many similar prompts remain before provider quota runs out, shown in the OpenCode compact line.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"solid-js":"^1.9.13","@types/bun":"^1.3.14","typescript":"^6.0.3","@opentui/core":"^0.4.1","@opentui/solid":"^0.4.1","@opencode-ai/sdk":"^1.18.18","@opencode-ai/plugin":"^1.17.9"},"peerDependencies":{"solid-js":"*","@opentui/core":"*","@opentui/solid":"*","@opencode-ai/plugin":"*"},"_npmOperationalInternal":{"tmp":"tmp/opencode-prompt-left_0.1.9_1786990672225_0.8103380703082081","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@bojackduy/opencode-prompt-left","version":"0.1.10","license":"AGPL-3.0-only","_id":"@bojackduy/opencode-prompt-left@0.1.10","maintainers":[{"name":"bojackduy","email":"trinhchanduybojack@gmail.com"}],"homepage":"https://github.com/bojackduy/opencode-prompt-left#readme","bugs":{"url":"https://github.com/bojackduy/opencode-prompt-left/issues"},"dist":{"shasum":"8913e9b016e8a9d18c01d464626865486957baf4","tarball":"https://registry.npmjs.org/@bojackduy/opencode-prompt-left/-/opencode-prompt-left-0.1.10.tgz","fileCount":16,"integrity":"sha512-IQJLGMoDMcyJl06BPVQKITktExB7aJmj1Uj+ifkhBgHBmA0mC2B/Xft3UtL/jaq7ZkOhZM3JuEjNW/4ANu3abQ==","signatures":[{"sig":"MEQCIBSDbNYY9uceJ/IqmWeOj4E356ThrbQSi1ncBj6DKpKQAiB67vyKFU867bhGR1jkus0NjWkCzyehp/naIKWTO0nVOQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bojackduy%2fopencode-prompt-left@0.1.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":280247},"type":"module","engines":{"bun":">=1.1.0","opencode":"^1.0.0"},"exports":{".":"./src/server.ts","./tui":"./src/tui.tsx","./server":"./src/server.ts"},"gitHead":"2119c5074647dcc95f4efabfb9d4da4d88080c90","scripts":{"test":"bun test","build":"bun build src/server.ts --target=bun --external @opencode-ai/plugin --external @opencode-ai/sdk --outfile /tmp/prompt-left-server.js && bun build src/tui.tsx --target=bun --external @opencode-ai/plugin/tui --external @opentui/solid --external solid-js --outfile /tmp/prompt-left-tui.js","prepack":"bun run typecheck && bun test && bun run build","typecheck":"tsc -p tsconfig.json --noEmit","release:major":"bun run typecheck && bun test && npm version major -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:minor":"bun run typecheck && bun test && npm version minor -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:patch":"bun run typecheck && bun test && npm version patch -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8d8258e6-e086-4bdd-9f76-398492757fc5"}},"repository":{"url":"git+https://github.com/bojackduy/opencode-prompt-left.git","type":"git"},"_npmVersion":"11.17.0","description":"Estimates how many similar prompts remain before provider quota runs out, shown in the OpenCode compact line.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"solid-js":"^1.9.13","@types/bun":"^1.3.14","typescript":"^6.0.3","@opentui/core":"^0.4.1","@opentui/solid":"^0.4.1","@opencode-ai/sdk":"^1.18.18","@opencode-ai/plugin":"^1.17.9"},"peerDependencies":{"solid-js":"*","@opentui/core":"*","@opentui/solid":"*","@opencode-ai/plugin":"*"},"_npmOperationalInternal":{"tmp":"tmp/opencode-prompt-left_0.1.10_1787255680504_0.034648701732611586","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@bojackduy/opencode-prompt-left","version":"0.1.11","license":"AGPL-3.0-only","_id":"@bojackduy/opencode-prompt-left@0.1.11","maintainers":[{"name":"bojackduy","email":"trinhchanduybojack@gmail.com"}],"homepage":"https://github.com/bojackduy/opencode-prompt-left#readme","bugs":{"url":"https://github.com/bojackduy/opencode-prompt-left/issues"},"dist":{"shasum":"f91c724e553a105275644b24ffdd2e8f30d2af37","tarball":"https://registry.npmjs.org/@bojackduy/opencode-prompt-left/-/opencode-prompt-left-0.1.11.tgz","fileCount":16,"integrity":"sha512-hDNKtps9q3GCH/DiVX4GU69Nnsj3UrGvbmHoAxvwvemw6VzzHzSeVAkv/thqZM9OqYXjO3LC/U7UdsGFrvbsjw==","signatures":[{"sig":"MEUCIFxh91qfwiLvT7zdF9PQdqGwB91gxQPe+txs2erF/q+QAiEAy0IaLwMdTDUF65Ngt0M8jblOGa+V5C1P0vrBlLix40g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bojackduy%2fopencode-prompt-left@0.1.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":280340},"type":"module","engines":{"bun":">=1.1.0","opencode":"^1.0.0"},"exports":{".":"./src/server.ts","./tui":"./src/tui.tsx","./server":"./src/server.ts"},"gitHead":"a2a873b38f7cfbe1098b5a0fa2777ee0818713ed","scripts":{"test":"bun test","build":"bun build src/server.ts --target=bun --external @opencode-ai/plugin --external @opencode-ai/sdk --outfile /tmp/prompt-left-server.js && bun build src/tui.tsx --target=bun --external @opencode-ai/plugin/tui --external @opentui/solid --external solid-js --outfile /tmp/prompt-left-tui.js","prepack":"bun run typecheck && bun test && bun run build","typecheck":"tsc -p tsconfig.json --noEmit","release:major":"bun run typecheck && bun test && npm version major -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:minor":"bun run typecheck && bun test && npm version minor -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:patch":"bun run typecheck && bun test && npm version patch -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8d8258e6-e086-4bdd-9f76-398492757fc5"}},"repository":{"url":"git+https://github.com/bojackduy/opencode-prompt-left.git","type":"git"},"_npmVersion":"11.17.0","description":"Estimates how many similar prompts remain before provider quota runs out, shown in the OpenCode compact line.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"solid-js":"^1.9.13","@types/bun":"^1.3.14","typescript":"^6.0.3","@opentui/core":"^0.4.1","@opentui/solid":"^0.4.1","@opencode-ai/sdk":"^1.18.18","@opencode-ai/plugin":"^1.17.9"},"peerDependencies":{"solid-js":"*","@opentui/core":"*","@opentui/solid":"*","@opencode-ai/plugin":"*"},"_npmOperationalInternal":{"tmp":"tmp/opencode-prompt-left_0.1.11_1787349597812_0.9804747265379297","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@bojackduy/opencode-prompt-left","version":"1.0.0","license":"AGPL-3.0-only","_id":"@bojackduy/opencode-prompt-left@1.0.0","maintainers":[{"name":"bojackduy","email":"trinhchanduybojack@gmail.com"}],"homepage":"https://github.com/bojackduy/opencode-prompt-left#readme","bugs":{"url":"https://github.com/bojackduy/opencode-prompt-left/issues"},"dist":{"shasum":"484dcbf7bad5b52de1276d6d52f0af4ec8ebe83d","tarball":"https://registry.npmjs.org/@bojackduy/opencode-prompt-left/-/opencode-prompt-left-1.0.0.tgz","fileCount":16,"integrity":"sha512-WgxHBiYyiV7ftIOcxPI29seh7HwUnHJg7Lwpey67DMdm3cMAFfoaQydSoUvyJaErc7mYNJQAKz7bCJnfV4TNZA==","signatures":[{"sig":"MEQCIF5G3ON9Jhh+7c/iGSDMRxvMJQchvXZWYls1h8Q4v5ZtAiA2oBtXKUZpvgwzipZn9WjePA0aUQjSWjaF7KxrrDHsDQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bojackduy%2fopencode-prompt-left@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":282199},"type":"module","engines":{"bun":">=1.1.0","opencode":"^1.0.0"},"exports":{".":"./src/server.ts","./tui":"./src/tui.tsx","./server":"./src/server.ts"},"gitHead":"56510dc3e0f4b2294a19dbeaf658023bc4973285","scripts":{"test":"bun test","build":"bun build src/server.ts --target=bun --external @opencode-ai/plugin --external @opencode-ai/sdk --outfile /tmp/prompt-left-server.js && bun build src/tui.tsx --target=bun --external @opencode-ai/plugin/tui --external @opentui/solid --external solid-js --outfile /tmp/prompt-left-tui.js","prepack":"bun run typecheck && bun test && bun run build","typecheck":"tsc -p tsconfig.json --noEmit","release:major":"bun run typecheck && bun test && npm version major -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:minor":"bun run typecheck && bun test && npm version minor -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:patch":"bun run typecheck && bun test && npm version patch -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8d8258e6-e086-4bdd-9f76-398492757fc5"}},"repository":{"url":"git+https://github.com/bojackduy/opencode-prompt-left.git","type":"git"},"_npmVersion":"11.17.0","description":"Estimates how many similar prompts remain before provider quota runs out, shown in the OpenCode compact line.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"solid-js":"^1.9.13","@types/bun":"^1.3.14","typescript":"^6.0.3","@opentui/core":"^0.4.1","@opentui/solid":"^0.4.1","@opencode-ai/sdk":"^1.18.18","@opencode-ai/plugin":"^1.17.9"},"peerDependencies":{"solid-js":"*","@opentui/core":"*","@opentui/solid":"*","@opencode-ai/plugin":"*"},"_npmOperationalInternal":{"tmp":"tmp/opencode-prompt-left_1.0.0_1787374419123_0.9231342698184801","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@bojackduy/opencode-prompt-left","version":"1.1.0","license":"AGPL-3.0-only","_id":"@bojackduy/opencode-prompt-left@1.1.0","maintainers":[{"name":"bojackduy","email":"trinhchanduybojack@gmail.com"}],"homepage":"https://github.com/bojackduy/opencode-prompt-left#readme","bugs":{"url":"https://github.com/bojackduy/opencode-prompt-left/issues"},"dist":{"shasum":"da36498cf0b78add4280f56ad8ef7ddc66126beb","tarball":"https://registry.npmjs.org/@bojackduy/opencode-prompt-left/-/opencode-prompt-left-1.1.0.tgz","fileCount":16,"integrity":"sha512-S5/8p+AZWgZUR5ly9ZK8ENbUP98PIUB9sH8DOjaETCTpa81hkKAe8u1/3zggWXGkMGjDyaq+gbXcDtYua44BYQ==","signatures":[{"sig":"MEUCIDlsGqIv/DcVXrfapY4tCCq90lYIlHjTxriON+z7xLVCAiEAqw3X6FFxP+r+fIGxyCuhcLtmYa9d/nf4fHRk+zkyRz8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bojackduy%2fopencode-prompt-left@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":281962},"type":"module","engines":{"bun":">=1.1.0","opencode":"^1.0.0"},"exports":{".":"./src/server.ts","./tui":"./src/tui.tsx","./server":"./src/server.ts"},"gitHead":"b5a981ceddc4770d4a9c84cd1664dcef684082ce","scripts":{"test":"bun test","build":"bun build src/server.ts --target=bun --external @opencode-ai/plugin --external @opencode-ai/sdk --outfile /tmp/prompt-left-server.js && bun build src/tui.tsx --target=bun --external @opencode-ai/plugin/tui --external @opentui/solid --external solid-js --outfile /tmp/prompt-left-tui.js","prepack":"bun run typecheck && bun test && bun run build","typecheck":"tsc -p tsconfig.json --noEmit","release:major":"bun run typecheck && bun test && npm version major -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:minor":"bun run typecheck && bun test && npm version minor -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:patch":"bun run typecheck && bun test && npm version patch -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8d8258e6-e086-4bdd-9f76-398492757fc5"}},"repository":{"url":"git+https://github.com/bojackduy/opencode-prompt-left.git","type":"git"},"_npmVersion":"11.17.0","description":"Estimates how many similar prompts remain before provider quota runs out, shown in the OpenCode compact line.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"solid-js":"^1.9.13","@types/bun":"^1.3.14","typescript":"^6.0.3","@opentui/core":"^0.4.1","@opentui/solid":"^0.4.1","@opencode-ai/sdk":"^1.18.18","@opencode-ai/plugin":"^1.17.9"},"peerDependencies":{"solid-js":"*","@opentui/core":"*","@opentui/solid":"*","@opencode-ai/plugin":"*"},"_npmOperationalInternal":{"tmp":"tmp/opencode-prompt-left_1.1.0_1787375622273_0.7232114130811769","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@bojackduy/opencode-prompt-left","version":"1.2.0","license":"AGPL-3.0-only","_id":"@bojackduy/opencode-prompt-left@1.2.0","maintainers":[{"name":"bojackduy","email":"trinhchanduybojack@gmail.com"}],"homepage":"https://github.com/bojackduy/opencode-prompt-left#readme","bugs":{"url":"https://github.com/bojackduy/opencode-prompt-left/issues"},"dist":{"shasum":"7a2297e09100be7a9818f1d6a65e31a2e276c5d8","tarball":"https://registry.npmjs.org/@bojackduy/opencode-prompt-left/-/opencode-prompt-left-1.2.0.tgz","fileCount":16,"integrity":"sha512-JgQgLSAokAzZv9/Fi9uS9l37E6fZ1IZfHBmskTmvO0fvcWyWayBL+sn1sRxiQr+5wE5dPm2P1fS1rtf6P4hvEA==","signatures":[{"sig":"MEUCIQCkjM1sWXUlCqMJVUaad6eptuqvUtuW7RkLdLxzER8lOgIgQkT2ebDoplNsAYgG/yT4CmIyuBJeMK8a7dokC0zdDO0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bojackduy%2fopencode-prompt-left@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":287771},"type":"module","engines":{"bun":">=1.1.0","opencode":"^1.0.0"},"exports":{".":"./src/server.ts","./tui":"./src/tui.tsx","./server":"./src/server.ts"},"gitHead":"a1b90fc99360b77f35637e4f14feaba430f1c04f","scripts":{"test":"bun test","build":"bun build src/server.ts --target=bun --external @opencode-ai/plugin --external @opencode-ai/sdk --outfile /tmp/prompt-left-server.js && bun build src/tui.tsx --target=bun --external @opencode-ai/plugin/tui --external @opentui/solid --external solid-js --outfile /tmp/prompt-left-tui.js","prepack":"bun run typecheck && bun test && bun run build","typecheck":"tsc -p tsconfig.json --noEmit","release:major":"bun run typecheck && bun test && npm version major -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:minor":"bun run typecheck && bun test && npm version minor -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:patch":"bun run typecheck && bun test && npm version patch -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8d8258e6-e086-4bdd-9f76-398492757fc5"}},"repository":{"url":"git+https://github.com/bojackduy/opencode-prompt-left.git","type":"git"},"_npmVersion":"11.17.0","description":"Estimates how many similar prompts remain before provider quota runs out, shown in the OpenCode compact line.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"solid-js":"^1.9.13","@types/bun":"^1.3.14","typescript":"^6.0.3","@opentui/core":"^0.4.1","@opentui/solid":"^0.4.1","@opencode-ai/sdk":"^1.18.18","@opencode-ai/plugin":"^1.17.9"},"peerDependencies":{"solid-js":"*","@opentui/core":"*","@opentui/solid":"*","@opencode-ai/plugin":"*"},"_npmOperationalInternal":{"tmp":"tmp/opencode-prompt-left_1.2.0_1787377347140_0.3810957221330942","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@bojackduy/opencode-prompt-left","version":"1.3.0","license":"AGPL-3.0-only","_id":"@bojackduy/opencode-prompt-left@1.3.0","maintainers":[{"name":"bojackduy","email":"trinhchanduybojack@gmail.com"}],"homepage":"https://github.com/bojackduy/opencode-prompt-left#readme","bugs":{"url":"https://github.com/bojackduy/opencode-prompt-left/issues"},"dist":{"shasum":"c3229529460f052bdc0c9c3063ee5a077a0b79f2","tarball":"https://registry.npmjs.org/@bojackduy/opencode-prompt-left/-/opencode-prompt-left-1.3.0.tgz","fileCount":16,"integrity":"sha512-UfdR1a0dxSsBqUQAFO35z/nvv33xeHUBwNIBQeHwcfYWVrU5y2WUKkvIxw8UqaqZO28GXt9n8N8K0hubJ8olGg==","signatures":[{"sig":"MEUCIBlYuOWef2qOZLdAp6Bb66lRtM6ZVtrC/1cbqVcwxWP9AiEA15At98JI4h1USjHbIPSdR1RwAUeh1pJTixcpS8XAMpU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bojackduy%2fopencode-prompt-left@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":287674},"type":"module","engines":{"bun":">=1.1.0","opencode":"^1.0.0"},"exports":{".":"./src/server.ts","./tui":"./src/tui.tsx","./server":"./src/server.ts"},"gitHead":"4bad79a4a928e31a1a332e7f924589b64990377e","scripts":{"test":"bun test","build":"bun build src/server.ts --target=bun --external @opencode-ai/plugin --external @opencode-ai/sdk --outfile /tmp/prompt-left-server.js && bun build src/tui.tsx --target=bun --external @opencode-ai/plugin/tui --external @opentui/solid --external solid-js --outfile /tmp/prompt-left-tui.js","prepack":"bun run typecheck && bun test && bun run build","typecheck":"tsc -p tsconfig.json --noEmit","release:major":"bun run typecheck && bun test && npm version major -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:minor":"bun run typecheck && bun test && npm version minor -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:patch":"bun run typecheck && bun test && npm version patch -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8d8258e6-e086-4bdd-9f76-398492757fc5"}},"repository":{"url":"git+https://github.com/bojackduy/opencode-prompt-left.git","type":"git"},"_npmVersion":"11.17.0","description":"Estimates how many similar prompts remain before provider quota runs out, shown in the OpenCode compact line.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"solid-js":"^1.9.13","@types/bun":"^1.3.14","typescript":"^6.0.3","@opentui/core":"^0.4.1","@opentui/solid":"^0.4.1","@opencode-ai/sdk":"^1.18.18","@opencode-ai/plugin":"^1.17.9"},"peerDependencies":{"solid-js":"*","@opentui/core":"*","@opentui/solid":"*","@opencode-ai/plugin":"*"},"_npmOperationalInternal":{"tmp":"tmp/opencode-prompt-left_1.3.0_1787378256961_0.6513473028880652","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@bojackduy/opencode-prompt-left","version":"1.4.0","license":"AGPL-3.0-only","_id":"@bojackduy/opencode-prompt-left@1.4.0","maintainers":[{"name":"bojackduy","email":"trinhchanduybojack@gmail.com"}],"homepage":"https://github.com/bojackduy/opencode-prompt-left#readme","bugs":{"url":"https://github.com/bojackduy/opencode-prompt-left/issues"},"dist":{"shasum":"d693e2ce5dd4bb542c30cdb4491128d273acfac0","tarball":"https://registry.npmjs.org/@bojackduy/opencode-prompt-left/-/opencode-prompt-left-1.4.0.tgz","fileCount":16,"integrity":"sha512-I5drbkp7GPVub9R3Zm3lrIPNEpjPPUhnyiIEa0gZaSFaxxSKMY//p++8tx1SdMj5RL2jJG6dT276GA3RrZ6Cqg==","signatures":[{"sig":"MEUCIQDyXJc/hOqXMyba2GhcpF2vAwVGUQcVFLJXY/4qv/T00wIgGyE0yjV99BfHvWvnpmzemyxJahz4VCFpD3EK4cIw8Mo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bojackduy%2fopencode-prompt-left@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":288506},"type":"module","engines":{"bun":">=1.1.0","opencode":"^1.0.0"},"exports":{".":"./src/server.ts","./tui":"./src/tui.tsx","./server":"./src/server.ts"},"gitHead":"2b3f62e7ccc1a4adac5e99ac928ae9242f488418","scripts":{"test":"bun test","build":"bun build src/server.ts --target=bun --external @opencode-ai/plugin --external @opencode-ai/sdk --outfile /tmp/prompt-left-server.js && bun build src/tui.tsx --target=bun --external @opencode-ai/plugin/tui --external @opentui/solid --external solid-js --outfile /tmp/prompt-left-tui.js","prepack":"bun run typecheck && bun test && bun run build","typecheck":"tsc -p tsconfig.json --noEmit","release:major":"bun run typecheck && bun test && npm version major -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:minor":"bun run typecheck && bun test && npm version minor -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:patch":"bun run typecheck && bun test && npm version patch -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8d8258e6-e086-4bdd-9f76-398492757fc5"}},"repository":{"url":"git+https://github.com/bojackduy/opencode-prompt-left.git","type":"git"},"_npmVersion":"11.17.0","description":"Estimates how many similar prompts remain before provider quota runs out, shown in the OpenCode compact line.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"solid-js":"^1.9.13","@types/bun":"^1.3.14","typescript":"^6.0.3","@opentui/core":"^0.4.1","@opentui/solid":"^0.4.1","@opencode-ai/sdk":"^1.18.18","@opencode-ai/plugin":"^1.17.9"},"peerDependencies":{"solid-js":"*","@opentui/core":"*","@opentui/solid":"*","@opencode-ai/plugin":"*"},"_npmOperationalInternal":{"tmp":"tmp/opencode-prompt-left_1.4.0_1787379520545_0.903167211242383","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@bojackduy/opencode-prompt-left","version":"1.5.0","license":"AGPL-3.0-only","_id":"@bojackduy/opencode-prompt-left@1.5.0","maintainers":[{"name":"bojackduy","email":"trinhchanduybojack@gmail.com"}],"homepage":"https://github.com/bojackduy/opencode-prompt-left#readme","bugs":{"url":"https://github.com/bojackduy/opencode-prompt-left/issues"},"dist":{"shasum":"b5594b7eef78eb458d2b4feb0da4070f1f729e05","tarball":"https://registry.npmjs.org/@bojackduy/opencode-prompt-left/-/opencode-prompt-left-1.5.0.tgz","fileCount":16,"integrity":"sha512-gIi5n5KjqMiBGFKynw/buCXhKgzpbumgkZSW9sbIz/DKsg8+RkMcV3Ds+bGclekBt+U7ogdPu/vjGxwx0LBRIA==","signatures":[{"sig":"MEQCIB6ZLHtVFao7Fxfm+h2oU1R7gOnVZOxAD/xLB3EmNzTsAiB+KK+waOE4ORoVVHedmZkYIiTUN++ebnEZ1nD3ns+eiw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bojackduy%2fopencode-prompt-left@1.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":292459},"type":"module","engines":{"bun":">=1.1.0","opencode":"^1.0.0"},"exports":{".":"./src/server.ts","./tui":"./src/tui.tsx","./server":"./src/server.ts"},"gitHead":"05919012b689e16cd10e8f7b1a98dcf8b682f31b","scripts":{"test":"bun test","build":"bun build src/server.ts --target=bun --external @opencode-ai/plugin --external @opencode-ai/sdk --outfile /tmp/prompt-left-server.js && bun build src/tui.tsx --target=bun --external @opencode-ai/plugin/tui --external @opentui/solid --external solid-js --outfile /tmp/prompt-left-tui.js","prepack":"bun run typecheck && bun test && bun run build","typecheck":"tsc -p tsconfig.json --noEmit","release:major":"bun run typecheck && bun test && npm version major -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:minor":"bun run typecheck && bun test && npm version minor -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:patch":"bun run typecheck && bun test && npm version patch -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8d8258e6-e086-4bdd-9f76-398492757fc5"}},"repository":{"url":"git+https://github.com/bojackduy/opencode-prompt-left.git","type":"git"},"_npmVersion":"11.17.0","description":"Estimates how many similar prompts remain before provider quota runs out, shown in the OpenCode compact line.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"solid-js":"^1.9.13","@types/bun":"^1.3.14","typescript":"^6.0.3","@opentui/core":"^0.4.1","@opentui/solid":"^0.4.1","@opencode-ai/sdk":"^1.18.18","@opencode-ai/plugin":"^1.17.9"},"peerDependencies":{"solid-js":"*","@opentui/core":"*","@opentui/solid":"*","@opencode-ai/plugin":"*"},"_npmOperationalInternal":{"tmp":"tmp/opencode-prompt-left_1.5.0_1787385441606_0.8393460332422193","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@bojackduy/opencode-prompt-left","version":"1.6.0","license":"AGPL-3.0-only","_id":"@bojackduy/opencode-prompt-left@1.6.0","maintainers":[{"name":"bojackduy","email":"trinhchanduybojack@gmail.com"}],"homepage":"https://github.com/bojackduy/opencode-prompt-left#readme","bugs":{"url":"https://github.com/bojackduy/opencode-prompt-left/issues"},"dist":{"shasum":"fdc8084fa3b6eff748f8cd0fa146e27450ef33e2","tarball":"https://registry.npmjs.org/@bojackduy/opencode-prompt-left/-/opencode-prompt-left-1.6.0.tgz","fileCount":16,"integrity":"sha512-boj0Sb2MroH7O0PVFGd+N5Jet5Vk2x02+4+n0rU8nCzYS4x/r+PQa4iSO3R/Nz/tmfK8eX87P5AKtlSGNzLrZQ==","signatures":[{"sig":"MEYCIQCjhu1SDDO5sW6MpkYa3SvBEoreI0a5Hnoyw+cXCBaQCAIhAPZ+kf2zyX6Mrt2FavYwseRZVkzq+EzvWsTMUNiG5/qw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bojackduy%2fopencode-prompt-left@1.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":292603},"type":"module","engines":{"bun":">=1.1.0","opencode":"^1.0.0"},"exports":{".":"./src/server.ts","./tui":"./src/tui.tsx","./server":"./src/server.ts"},"gitHead":"624273c18edb0ed2d49b915f50f082eeba7988f5","scripts":{"test":"bun test","build":"bun build src/server.ts --target=bun --external @opencode-ai/plugin --external @opencode-ai/sdk --outfile /tmp/prompt-left-server.js && bun build src/tui.tsx --target=bun --external @opencode-ai/plugin/tui --external @opentui/solid --external solid-js --outfile /tmp/prompt-left-tui.js","prepack":"bun run typecheck && bun test && bun run build","typecheck":"tsc -p tsconfig.json --noEmit","release:major":"bun run typecheck && bun test && npm version major -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:minor":"bun run typecheck && bun test && npm version minor -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:patch":"bun run typecheck && bun test && npm version patch -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8d8258e6-e086-4bdd-9f76-398492757fc5"}},"repository":{"url":"git+https://github.com/bojackduy/opencode-prompt-left.git","type":"git"},"_npmVersion":"11.17.0","description":"Estimates how many similar prompts remain before provider quota runs out, shown in the OpenCode compact line.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"solid-js":"^1.9.13","@types/bun":"^1.3.14","typescript":"^6.0.3","@opentui/core":"^0.4.1","@opentui/solid":"^0.4.1","@opencode-ai/sdk":"^1.18.18","@opencode-ai/plugin":"^1.17.9"},"peerDependencies":{"solid-js":"*","@opentui/core":"*","@opentui/solid":"*","@opencode-ai/plugin":"*"},"_npmOperationalInternal":{"tmp":"tmp/opencode-prompt-left_1.6.0_1787399809920_0.4363516632069586","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"@bojackduy/opencode-prompt-left","version":"1.6.1","license":"AGPL-3.0-or-later","_id":"@bojackduy/opencode-prompt-left@1.6.1","maintainers":[{"name":"bojackduy","email":"trinhchanduybojack@gmail.com"}],"homepage":"https://github.com/bojackduy/opencode-prompt-left#readme","bugs":{"url":"https://github.com/bojackduy/opencode-prompt-left/issues"},"dist":{"shasum":"abcc7aefae5bed1bbb1bea6e031188ee13cb52ca","tarball":"https://registry.npmjs.org/@bojackduy/opencode-prompt-left/-/opencode-prompt-left-1.6.1.tgz","fileCount":16,"integrity":"sha512-+9Jd5X0KHS0crvlkYd6SCvwwh3qKloQ6RzTNWebvjbZ1yDzP21E2Rg/czX6GpP5QXZjxgckpyJVlEd8StYkdug==","signatures":[{"sig":"MEYCIQDx41gcvjPbRpTaoUq9AixUCRdFo+1uymnqe83aisQUKwIhAPDIy5P4oLET5At25gSEbcvYCuFCGmcX0Y/PidnUE/7q","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bojackduy%2fopencode-prompt-left@1.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":293601},"type":"module","engines":{"bun":">=1.1.0","opencode":"^1.0.0"},"exports":{".":"./src/server.ts","./tui":"./src/tui.tsx","./server":"./src/server.ts"},"gitHead":"05b6e972e0578cc9ebde44f964b2d2d4db06eebb","scripts":{"test":"bun test","build":"bun build src/server.ts --target=bun --external @opencode-ai/plugin --external @opencode-ai/sdk --outfile /tmp/prompt-left-server.js && bun build src/tui.tsx --target=bun --external @opencode-ai/plugin/tui --external @opentui/solid --external solid-js --outfile /tmp/prompt-left-tui.js","prepack":"bun run typecheck && bun test && bun run build","typecheck":"tsc -p tsconfig.json --noEmit","release:major":"bun run typecheck && bun test && npm version major -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:minor":"bun run typecheck && bun test && npm version minor -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:patch":"bun run typecheck && bun test && npm version patch -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8d8258e6-e086-4bdd-9f76-398492757fc5"}},"repository":{"url":"git+https://github.com/bojackduy/opencode-prompt-left.git","type":"git"},"_npmVersion":"11.17.0","description":"Estimates how many similar prompts remain before provider quota runs out, shown in the OpenCode compact line.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"solid-js":"^1.9.13","@types/bun":"^1.3.14","typescript":"^6.0.3","@opentui/core":"^0.4.1","@opentui/solid":"^0.4.1","@opencode-ai/sdk":"^1.18.18","@opencode-ai/plugin":"^1.17.9"},"peerDependencies":{"solid-js":"*","@opentui/core":"*","@opentui/solid":"*","@opencode-ai/plugin":"*"},"_npmOperationalInternal":{"tmp":"tmp/opencode-prompt-left_1.6.1_1788333611047_0.7775849511885495","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"_id":"@bojackduy/opencode-prompt-left@1.7.0","bugs":{"url":"https://github.com/bojackduy/opencode-prompt-left/issues"},"dist":{"shasum":"567eaa8120a3a612ddd9fe6ddb5f651f9945541a","tarball":"https://registry.npmjs.org/@bojackduy/opencode-prompt-left/-/opencode-prompt-left-1.7.0.tgz","fileCount":18,"integrity":"sha512-FRnyVLfa8EhNbxsJlDx26aih6VWOwCdd09LZMz8VMecZNzlaA9E4nXZZ6QsM449FkJD0iyJaNEjA72MgyveQ+g==","signatures":[{"sig":"MEUCIQDdKKcmleht4naOc6cIDjLY5ER93NP61R7afYIj7GnQCgIgQWlQz3pxLsvGs322INODUuqwCoYqSok/T5ufoBEUJeg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIG0lyUUn/05DIve34MCZ5bhpQx1K0olkn+DOm1MBXilAAiEA8xmYus1X3d1tNmBoB0CvS4ahMf11izXln0Nxoz9lLpc="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bojackduy%2fopencode-prompt-left@1.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":316728},"name":"@bojackduy/opencode-prompt-left","type":"module","engines":{"bun":">=1.1.0","opencode":"^1.0.0"},"exports":{".":"./src/server.ts","./tui":"./src/tui.tsx","./server":"./src/server.ts"},"gitHead":"65211181e5964c7951d388b83c87eec1e72afe61","license":"AGPL-3.0-or-later","scripts":{"test":"bun test","build":"bun build src/server.ts --target=bun --external @opencode-ai/plugin --external @opencode-ai/sdk --outfile /tmp/prompt-left-server.js && bun build src/tui.tsx --target=bun --external @opencode-ai/plugin/tui --external @opentui/solid --external solid-js --outfile /tmp/prompt-left-tui.js","prepack":"bun run typecheck && bun test && bun run build","typecheck":"tsc -p tsconfig.json --noEmit","release:major":"bun run typecheck && bun test && npm version major -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:minor":"bun run typecheck && bun test && npm version minor -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)","release:patch":"bun run typecheck && bun test && npm version patch -m \"chore: release %s\" && git push && git push origin $(git describe --tags --abbrev=0)"},"version":"1.7.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8d8258e6-e086-4bdd-9f76-398492757fc5"}},"homepage":"https://github.com/bojackduy/opencode-prompt-left#readme","repository":{"url":"git+https://github.com/bojackduy/opencode-prompt-left.git","type":"git"},"_npmVersion":"11.19.0","description":"Estimates how many similar prompts remain before provider quota runs out, shown in the OpenCode compact line.","directories":{},"maintainers":[{"name":"bojackduy","email":"trinhchanduybojack@gmail.com"}],"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"solid-js":"^1.9.13","@types/bun":"^1.3.14","typescript":"^6.0.3","@opentui/core":"^0.4.1","@opentui/solid":"^0.4.1","@opencode-ai/sdk":"^1.18.18","@opencode/plugin":"^2.0.3","@opencode-ai/plugin":"^1.17.9"},"peerDependencies":{"solid-js":"*","@opentui/core":"*","@opentui/solid":"*","@opencode-ai/plugin":"*"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/opencode-prompt-left_1.7.0_1789960823726_0.13103062348808958"}}},"time":{"created":"2026-08-14T18:10:02.876Z","modified":"2026-09-21T03:20:24.152Z","0.1.2":"2026-08-14T18:10:03.222Z","0.1.3":"2026-08-14T18:14:28.885Z","0.1.5":"2026-08-14T18:56:09.470Z","0.1.6":"2026-08-15T04:10:38.997Z","0.1.7":"2026-08-15T04:31:58.014Z","0.1.8":"2026-08-17T08:13:27.905Z","0.1.9":"2026-08-17T18:17:52.416Z","0.1.10":"2026-08-20T19:54:40.681Z","0.1.11":"2026-08-21T21:59:57.973Z","1.0.0":"2026-08-22T04:53:39.281Z","1.1.0":"2026-08-22T05:13:42.425Z","1.2.0":"2026-08-22T05:42:27.292Z","1.3.0":"2026-08-22T05:57:37.124Z","1.4.0":"2026-08-22T06:18:40.758Z","1.5.0":"2026-08-22T07:57:21.777Z","1.6.0":"2026-08-22T11:56:50.082Z","1.6.1":"2026-09-02T07:20:11.174Z","1.7.0":"2026-09-21T03:20:23.804Z"},"bugs":{"url":"https://github.com/bojackduy/opencode-prompt-left/issues"},"license":"AGPL-3.0-or-later","homepage":"https://github.com/bojackduy/opencode-prompt-left#readme","repository":{"url":"git+https://github.com/bojackduy/opencode-prompt-left.git","type":"git"},"description":"Estimates how many similar prompts remain before provider quota runs out, shown in the OpenCode compact line.","maintainers":[{"name":"bojackduy","email":"trinhchanduybojack@gmail.com"}],"readme":"# opencode-prompt-left\n\n[![license](https://img.shields.io/badge/license-AGPL--3.0--or--later-blue?style=flat-square)](LICENSE)\n\nEstimates how many **similar prompts** remain before your provider quota runs out, shown in the OpenCode compact line (next to the prompt box).\n\n```\n≈14 prompts · Weekly            ← compact line (best estimate)\n```\n\n![prompt-left demo](assets/demo.png)\n\nThe number is a forward forecast of your own usage: recent per-prompt workload (cost, requests, tokens in/out, cache read/write, tool calls, subagents), projected against the current context/compaction state, then converted to quota burn using the observed percentage-per-dollar rate of each quota window.\n\n## Install\n\nInstall from npm (published as `@bojackduy/opencode-prompt-left`). The same\npackage provides both the server plugin and the TUI plugin — opencode resolves\nthe right entrypoint (`./server` / `./tui`) from the config file it appears in:\n\n```jsonc\n// opencode.jsonc\n{\n  \"plugin\": [\"@bojackduy/opencode-prompt-left\"]\n}\n```\n\n```jsonc\n// tui.json\n{\n  \"plugin\": [\"@bojackduy/opencode-prompt-left\"]\n}\n```\n\n> To use a local clone instead (development):\n>\n> ```jsonc\n> // opencode.jsonc\n> { \"plugin\": [\"/path/to/opencode-prompt-left/src/server.ts\"] }\n> // tui.json\n> { \"plugin\": [\"/path/to/opencode-prompt-left/src/tui.tsx\"] }\n> ```\n\nRestart OpenCode. State persists per project directory at `$XDG_CACHE_HOME/opencode/prompt-left/<workspace-hash>/`:\n\n- `history.json` — root-prompt usage telemetry and per-window quota-rate observations (survives restarts)\n- `estimate.json` — the current estimate, consumed by the TUI\n\n## Core formula\n\n```\npredicted cost per prompt  = recency-weighted EWMA of recent root-prompt costs\n                             (cost, requests, tokens in/out/reasoning, cache r/w,\n                              tool calls, tool output, child sessions)\n\nplan budget per window     = known dollar limits (OpenCode Go: $12/5h, $30/week,\n                             $60/month — overridable in prompt-left.json)\n\nprompts left               = (budget × remaining%) ÷ predicted cost per prompt\n```\n\nFor providers with known plan budgets the estimate is **exact** — it converts\nthe reported remaining percentage into remaining dollars and divides by your\nreal per-prompt cost. For other providers it falls back to observed\nquota-per-dollar rates (`Δpercent ÷ local cost`), then to a prior.\n\nPer-window resolution order: **plan budget → quota-rate observations → prior**.\nThe binding window is the one with the fewest prompts left (e.g. Weekly usually\nbinds over 5h).\n\n- A **root prompt** is one top-level user message, including everything it spawned: tool loops, retries, child/subagent sessions, and compaction.\n- Workload comes from OpenCode's exact `step-finish` usage records (per-request tokens and cost), deduplicated — not cumulative message snapshots.\n- Prompt submission immediately reserves one forecast prompt against the last quota snapshot. As `step-finish` usage arrives, the reservation is replaced by actual cost/requests/tokens; a later quota update reconciles that local debit instead of subtracting it twice.\n- Each quota window (5h / Weekly / Monthly) has its own rate. Rates are computed only from percentage changes that coincide with local usage; zero-delta polls keep accumulating cost so unchanged percentages are never miscounted as free prompts.\n- Compaction: the trigger threshold mirrors OpenCode's own overflow check (`context tokens ≥ usable`), and post-compaction context is modeled as summary + ~25% retained tail (2k–15k tokens).\n- The compact line shows the **best estimate**; the detail view also shows a conservative bound, confidence, and the full forecast breakdown.\n\n### New models\n\nWhen a new model is added (e.g. opencode-go adds MiMo-V2.5), the estimate\nadapts automatically — no config needed:\n\n1. **Model pricing** (from `provider.list()`) is refreshed every 5 minutes, so\n   a newly added model's limits/costs appear without restarting OpenCode.\n2. If you haven't used the new model in a directory yet, the **global prior**\n   kicks in: it takes the provider's observed token mix (input/cache/output\n   proportions from all your workloads) and scales it by the new model's own\n   pricing. Cheap models (like MiMo-V2.5 at $0.14/M input) immediately show\n   a much higher prompt count than expensive ones — no wait for calibration.\n3. Once you actually use the new model, local step-finish samples take over\n   and the estimate refines with your real usage patterns.\n\n## Status\n\n| Compact line | Meaning |\n|---|---|\n| `opencode-go/deepseek-v4-flash ≈54 prompts · Weekly` | plan-budget estimate (real per-prompt cost ÷ remaining dollars), green/yellow/red by capacity |\n| `copilot/gpt-5.6 ≈0 prompts · Copilot` | plan-limit estimate (remaining requests ÷ requests per prompt) |\n| `opencode-go/deepseek-v4-flash ≈40 prompts · Weekly` (low confidence) | cold start — no local usage yet; prompts come from a **global prior** (pooled per-prompt cost across all your workspaces) or the pp/prompt prior |\n| `no quota · claude-code-ollama` | provider is not tracked by opencode-quota (free model, local provider, or not enabled) |\n| `≈2 prompts · Weekly` (low confidence) | prior estimate — no plan limit and no observations |\n| `no quota` | no usable quota export found |\n\n`/prompts-left` opens the full breakdown: best/safe counts, binding window + reset countdown, per-provider windows, forecast per prompt (cost, requests, tools, cache), context/compaction horizon, and calibration stats.\n\n## When does it recalculate?\n\n### Model selection\n\nopencode never publishes a \"model changed\" event — the selection lives in the\nTUI's in-memory store and reaches the server only at prompt-submit. prompt-left\nworks around that with a file bridge plus per-message signals:\n\n```\nmodel picker → TUI writes ~/.local/state/opencode/model.json (recent[0] = selection)\n             → prompt-left TUI plugin watches it (300ms) → writes selection.json\n             → prompt-left server plugin watches it → overrideSelection → recompute\n```\n\nBoth sides watch their files with a **poll safety net** (5s) in addition to\nfs.watch — even if a watch event is missed or coalesced, the next poll picks\nthe change up and deduplicates, so nothing is lost and unchanged files never\ntrigger recomputes.\n\n| You do this | What fires | Result |\n|---|---|---|\n| Pick a model in the picker | `model.json` write → `selection.json` → server watcher → `overrideSelection` | ✅ recompute in <1s, no prompt needed |\n| Favorite cycle (`model.cycle_favorite`) | same path (`cycleFavorite` also saves `recent`) | ✅ recompute in <1s |\n| Tab cycle (`model.cycle_recent`) | nothing is written anywhere by opencode | ⚠️ no immediate recompute; updates at the next prompt submit |\n| Submit a prompt | `chat.message` hook (`noteSelection` + `beginPrompt`) | ✅ recompute (~1s debounce) |\n| A real user message arrives (no active prompt, e.g. after restart mid-session) | `message.updated` event | ✅ recompute |\n| `session.next.model.switched` event | opencode emits it (only if something calls the switch API) | ✅ recompute |\n| Open a different session / restart / resume from another directory | TUI writes `active.json` (on mount + every 2.5s) with the session's **last-used model**; server applies it as the baseline | ✅ recompute ≤2.5s |\n\nThe **tab-cycle blind spot** exists because opencode persists nothing for it;\nit self-corrects at submit.\n\n### Any other trigger\n\nEvery recompute updates `estimate.json`, which the TUI watches immediately and\nalso polls every 2.5s as a safety net:\n\n| Trigger | Source |\n|---|---|\n| `session.created` / `session.deleted` / `session.idle` / `session.compacted` | server event hook |\n| `message.updated` / `message.part.updated` / `message.removed` | server event hook (usage + tool + context accounting) |\n| `session.next.agent.switched` | server event hook |\n| Quota snapshot advances (every 60s poll, or on demand) | `readQuotaSnapshot()` → per-window rate observations |\n| `selection.json` / `active.json` change | server fs.watch on the workspace state dir |\n| `prompt-left.json` config edit (budgets) | server fs.watch on the config dir |\n| Plugin dispose | finalize + recompute |\n\n### Selection resolution (per session)\n\n`real events → picker bridge (by recency) → active.json baseline (only when the\nsession's selection is unknown)`. The estimate follows the **session you're\ncurrently viewing**, not a global \"current model\":\n\n## Multi-directory isolation\n\nopencode-prompt-left runs one plugin instance per opencode process, and every instance (one per project directory, even simultaneously) keeps its own state:\n\n```\n$XDG_CACHE_HOME/opencode/prompt-left/<workspace-hash>/\n  history.json      prompt usage + quota-rate observations for THIS directory\n  estimate.json     the current estimate for THIS directory\n  selection.json    model-picker bridge for THIS directory\n  active.json       which session is open in THIS directory\n```\n\nThe workspace hash is derived from the project directory, so:\n\n- Running several directories **at the same time** never races on shared files — no cross-talk, no flicker.\n- Each directory calibrates its own workload and quota rates (cold-starts per directory; that's the price of accuracy).\n- Sessions with different models inside one directory each keep their own selection, and the estimate follows whichever one you have open.\n\nThe one shared file is `global-prior.json` at the prompt-left root: a small,\nn-weighted pool of per-prompt cost/requests/tokens per provider+model, merged\nfrom every workspace. It is used **only as a cold-start prior** when a\ndirectory has no usage samples yet — calibration itself stays per-directory.\nThis is what lets a brand-new directory show a realistic prompt count\nimmediately instead of a budget or percentage.\n\n## Coexisting with opencode-quota\n\nprompt-left renders its line at the bottom, directly below opencode-quota's compact line — no quota configuration or patches needed:\n\n```\n[ prompt input box        ]\nCopilot 94% | OpenAI 5h 100%   ← opencode-quota\n≈14 prompts · Weekly           ← prompt-left\n```\n\n- If opencode-quota owns the prompt bar (`tuiCompactStatus.sessionPrompt: true`), prompt-left appends only its line below quota's.\n- If quota's session prompt is disabled, prompt-left renders the prompt bar itself and keeps its line below it.\n\nEither way both plugins stay fully enabled.\n\n## Requirements\n\n## Plan limits\n\n`~/.config/opencode/prompt-left.json` lets you give any provider an exact\nconversion from its reported percentage to prompts. Three kinds of limits are\nsupported; the estimator uses the first that applies per window:\n\n| Kind | Field | Converts via | Defaults (built in) |\n|---|---|---|---|\n| Dollar budget | `budgets` | per-prompt **cost** | `opencode-go`: $12/5h, $30/week, $60/month · `copilot`: $15/month (1,500 AI credits @ $0.01, Pro) |\n| Request limit | `limits` | per-prompt **requests** | `copilot` \"Copilot Premium Interactions\": 300/month (Pro) |\n| Token allowance | `tokenLimits` | per-prompt **tokens** | — |\n\n```jsonc\n// ~/.config/opencode/prompt-left.json\n{\n  \"budgets\": {\n    \"opencode-go\": { \"5h\": 12, \"Weekly\": 30, \"Monthly\": 60 }\n  },\n  \"limits\": {\n    \"openai\": { \"Weekly\": 8000 }          // e.g. GPT-5.6 tier, plan-page value\n  },\n  \"tokenLimits\": {\n    \"ollama-cloud\": { \"Weekly\": 1000000 } // from your ollama.com plan page\n  },\n  \"pricingOverrides\": {\n    \"opencode-go\": {\n      \"deepseek-v4-flash\":  { \"input\": 0.14, \"output\": 0.28, \"cacheRead\": 0.0028 },\n      \"deepseek-v4-pro\":    { \"input\": 0.435, \"output\": 0.87, \"cacheRead\": 0.003625 },\n      \"mimo-v2.5\":          { \"input\": 0.14, \"output\": 0.28, \"cacheRead\": 0.0028 }\n    }\n  }\n}\n```\n\nWindow keys match the quota provider's labels (`5h`, `Weekly`, `Monthly`,\n`Session`, …); the entry name is also matched as a fallback. Without a plan\nlimit, a provider falls back to observed quota-per-dollar rates, then to a\nprior placeholder. The file is watched — edits apply on the next recompute (pricing overrides\ntake effect instantly without restarting).\n\nBuilt-in defaults and their sources:\n\n- `opencode-go` — official usage-limits docs: $12 / 5h, $30 / week, $60 / month.\n- `copilot` \"Copilot\" — GitHub AI Credits (1 credit = $0.01); Copilot Pro\n  includes 1,500 credits/month (1,000 base + 500 flex) = $15/month\n  ([usage-based billing](https://docs.github.com/en/copilot/concepts/billing/usage-based-billing-for-individuals)).\n  The quota plugin's percentage refers to these credits, so it converts via\n  per-prompt cost (credits are dollars).\n- `copilot` \"Copilot Premium Interactions\" — legacy premium-request allowance,\n  300/month on Pro.\n\nOpenAI (ChatGPT Pro weekly) and Ollama Cloud are **config-driven by design**:\ntheir absolute limits are not published (ChatGPT Pro allowances differ by tier\nand model; Ollama Cloud bills model-weighted \"usage units\", explicitly *not* a\nfixed token count). Fabricating defaults would look reliable but be wrong — so\nthey fall back to rate observations, then a prior, until you add their values\nto `prompt-left.json`.\n\n## Development\n\n```sh\nbun install\nbunx tsc --noEmit\nbun test\n```\n\n## Releasing\n\nReleases are tag-triggered and published with **trusted publishing** (OIDC — no\nnpm token in CI, provenance attestations included).\n\n- First release: publish manually once so the package exists on npm:\n  `npm publish --access public` (after that, CI can publish via OIDC).\n- Subsequent releases:\n\n```sh\nbun run release:patch   # or release:minor / release:major\n```\n\nThis bumps the version, creates the `v*.*.*` tag, pushes it, and the\n`Publish npm package` workflow runs typecheck/test/build and publishes with\nprovenance.\n\n## Notes and limitations\n\n- Estimates are statistical. \"≈N similar prompts\" means *if you keep prompting like your recent root prompts do, in the current context state*. The compact line **always shows a prompt count** — budget/rate/prior are internal details shown in the detail view.\n- Quota observations arrive at opencode-quota's refresh interval (~5 min), so rate observations are per interval, not per prompt.\n- Quota used by other machines/windows is detected as external burn and lowers confidence.\n- A window can reset before you exhaust it at your pace; the detail view shows reset countdowns.\n\n## License\n\n[GNU Affero General Public License v3.0 or later](LICENSE)\n","readmeFilename":"README.md"}