{"_id":"@0rch1d/dsh-client-ui-opencode-go","_rev":"3-1351b9945d9d16d7efc20abeac0769bc","name":"@0rch1d/dsh-client-ui-opencode-go","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@0rch1d/dsh-client-ui-opencode-go","version":"1.0.0","license":"MIT","_id":"@0rch1d/dsh-client-ui-opencode-go@1.0.0","maintainers":[{"name":"0rch1d","email":"wwworchid39@gmail.com"}],"dsh":{"client":{"inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-model-selection"],"platform":"web"}},"dist":{"shasum":"2c2ed52d56968994f71ffc0c866f6778b44b01c0","tarball":"https://registry.npmjs.org/@0rch1d/dsh-client-ui-opencode-go/-/dsh-client-ui-opencode-go-1.0.0.tgz","fileCount":12,"integrity":"sha512-k9JaT1KDXHYfmQofZcmbKmr36PIKP1gJ7IbtnnwguCKkn6YuXh2q+8YGT8yvedF1kQPO5vo0OwqMcqospYTlWQ==","signatures":[{"sig":"MEUCIQCxWQVhuXb140FoQ5f51c6uqv5+MEK8on976+xKQouosgIgG9gWKIWSGqOORifT5ALBdcHM+oIM+6HKGYhkKAK2dYM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26090},"main":"lib/index.js","type":"module","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./invariant":{"types":"./lib/types/invariant.d.ts","default":"./lib/invariant.js"},"./package.json":"./package.json"},"scripts":{"watch":"tsdown --watch","bundle":"tsdown"},"_npmUser":{"name":"0rch1d","email":"wwworchid39@gmail.com"},"_npmVersion":"11.12.1","description":"OpenCode Go usage meter for DeepSeek Harness: a live quota ring and hover card for the opencode-go provider.","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.2.0","@types/react":"~18.3.1","@deepseek-ai/cordis":"^0.1.0-rc.6","@deepseek-ai/dsh-invariants":"^0.1.0-rc.6","@deepseek-ai/dsh-credentials":"^0.1.0-rc.6","@deepseek-ai/dsh-client-locale":"^0.1.0-rc.6","@deepseek-ai/dsh-client-runtime":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-slots":"^0.1.0-rc.6","@deepseek-ai/dsh-client-test-runtime":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-primitives":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-conversation":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-model-selection":"^0.1.0-rc.6"},"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"^0.1.0-rc.6","@deepseek-ai/dsh-invariants":"^0.1.0-rc.6","@deepseek-ai/dsh-credentials":"^0.1.0-rc.6","@deepseek-ai/dsh-client-locale":"^0.1.0-rc.6","@deepseek-ai/dsh-client-runtime":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-slots":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-primitives":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-conversation":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-model-selection":"^0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-client-ui-opencode-go_1.0.0_1786639000352_0.31404533537527746","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@0rch1d/dsh-client-ui-opencode-go","version":"1.0.1","license":"MIT","_id":"@0rch1d/dsh-client-ui-opencode-go@1.0.1","maintainers":[{"name":"0rch1d","email":"wwworchid39@gmail.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-model-selection"],"platform":"web"}},"dist":{"shasum":"db03005b68adc3f564aba3d6b5fd0f059c34a946","tarball":"https://registry.npmjs.org/@0rch1d/dsh-client-ui-opencode-go/-/dsh-client-ui-opencode-go-1.0.1.tgz","fileCount":13,"integrity":"sha512-h+PhDTR5jjcuWCDVnjYnOBIXR6V7g2YQ+QJ+3tYDI0mHtr2eh+BvBjIq8DINAqtEHKgho8zTEQKEXIgTLA/nqQ==","signatures":[{"sig":"MEYCIQCUimmNxXzetsdoQpdWVlPFJswLkvBjjfG3qvpP4u0tiAIhAMQ6E5hd1zMvsKVkj3DAmTNbLx5IEZtGTiKHemz2IT9S","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26417},"main":"lib/index.js","type":"module","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./invariant":{"types":"./lib/types/invariant.d.ts","default":"./lib/invariant.js"},"./package.json":"./package.json"},"scripts":{"watch":"tsdown --watch","bundle":"tsdown"},"_npmUser":{"name":"0rch1d","email":"wwworchid39@gmail.com"},"_npmVersion":"11.12.1","description":"OpenCode Go usage meter for DeepSeek Harness: a live quota ring and hover card for the opencode-go provider.","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.2.0","@types/react":"~18.3.1","@deepseek-ai/cordis":"^0.1.0-rc.6","@deepseek-ai/dsh-invariants":"^0.1.0-rc.6","@deepseek-ai/dsh-credentials":"^0.1.0-rc.6","@deepseek-ai/dsh-client-locale":"^0.1.0-rc.6","@deepseek-ai/dsh-client-runtime":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-slots":"^0.1.0-rc.6","@deepseek-ai/dsh-client-test-runtime":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-primitives":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-conversation":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-model-selection":"^0.1.0-rc.6"},"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"^0.1.0-rc.6","@deepseek-ai/dsh-invariants":"^0.1.0-rc.6","@deepseek-ai/dsh-credentials":"^0.1.0-rc.6","@deepseek-ai/dsh-client-locale":"^0.1.0-rc.6","@deepseek-ai/dsh-client-runtime":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-slots":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-primitives":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-conversation":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-model-selection":"^0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-client-ui-opencode-go_1.0.1_1786640124343_0.6442766540208187","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@0rch1d/dsh-client-ui-opencode-go","description":"OpenCode Go usage meter for DeepSeek Harness: a live quota ring and hover card for the opencode-go provider.","version":"1.0.2","publishConfig":{"access":"public"},"type":"module","main":"lib/index.js","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./invariant":{"types":"./lib/types/invariant.d.ts","default":"./lib/invariant.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./package.json":"./package.json"},"dsh":{"client":{"inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-model-selection"],"platform":"web"},"bundle":{"patch":"./cordis.patch.yml"}},"scripts":{"bundle":"tsdown","watch":"tsdown --watch"},"license":"MIT","peerDependencies":{"@deepseek-ai/dsh-client-locale":"^0.1.0-rc.6","@deepseek-ai/dsh-client-runtime":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-conversation":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-model-selection":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-primitives":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-slots":"^0.1.0-rc.6","@deepseek-ai/dsh-invariants":"^0.1.0-rc.6","@deepseek-ai/cordis":"^0.1.0-rc.6","react":"^18.2.0","@deepseek-ai/dsh-credentials":"^0.1.0-rc.6"},"devDependencies":{"@deepseek-ai/dsh-client-locale":"^0.1.0-rc.6","@deepseek-ai/dsh-client-runtime":"^0.1.0-rc.6","@deepseek-ai/dsh-client-test-runtime":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-conversation":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-model-selection":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-primitives":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-slots":"^0.1.0-rc.6","@deepseek-ai/dsh-invariants":"^0.1.0-rc.6","@types/react":"~18.3.1","@deepseek-ai/cordis":"^0.1.0-rc.6","react":"^18.2.0","@deepseek-ai/dsh-credentials":"^0.1.0-rc.6"},"_id":"@0rch1d/dsh-client-ui-opencode-go@1.0.2","_nodeVersion":"24.15.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-5S2O+1Z+cDO3ypWsbqqPwasoUzeJGy3WsH2HMx2x0YMQBHXOdvZdSwP2dHhf0SpH4Po1bYVu5aFB4sX4yhm+bg==","shasum":"c4236b3aa77be9bb67f75ab50c7330c5e119c560","tarball":"https://registry.npmjs.org/@0rch1d/dsh-client-ui-opencode-go/-/dsh-client-ui-opencode-go-1.0.2.tgz","fileCount":13,"unpackedSize":26402,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDKc1Rx+jTNaEnIHlKdRn+fnYoEJrmklpSP0pxUrGik8QIhAKd8WsHsrWxFK7+ht9289MWktjMrEJv460IcQTuo+Ao0"}]},"_npmUser":{"name":"0rch1d","email":"wwworchid39@gmail.com"},"directories":{},"maintainers":[{"name":"0rch1d","email":"wwworchid39@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-client-ui-opencode-go_1.0.2_1786640442607_0.20970915846800864"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-13T16:36:40.136Z","modified":"2026-08-13T17:00:42.985Z","1.0.0":"2026-08-13T16:36:40.536Z","1.0.1":"2026-08-13T16:55:24.548Z","1.0.2":"2026-08-13T17:00:42.762Z"},"license":"MIT","description":"OpenCode Go usage meter for DeepSeek Harness: a live quota ring and hover card for the opencode-go provider.","maintainers":[{"name":"0rch1d","email":"wwworchid39@gmail.com"}],"readme":"# @0rch1d/dsh-client-ui-opencode-go\n\n[OpenCode Go](https://opencode.ai) usage meter for the DeepSeek Harness Web GUI.\n\nShows a live quota badge in the session header — beside the title, in the same\naction row as the subagent / jobs / preset buttons — whenever the selected\nmodel provider is `opencode-go`:\n\n- an **OpenCode mark** beside a **usage ring** that starts as a dashed circle\n  and fills with a solid arc as the rolling 5-hour window is consumed;\n- hovering opens a card with **three progress bars** — rolling / weekly /\n  monthly usage, each with its reset countdown;\n- a `rate-limited` window renders in an amber warning color.\n\n## Install\n\n```sh\ndsh plugin --profile web add @0rch1d/dsh-client-ui-opencode-go\n```\n\n## Configure\n\nAdd your OpenCode Go API key to the harness credential store\n(`$DSH_HOME/.credentials.yaml`, mode `0600`):\n\n```yaml\nOPENCODE_GO_API_KEY: sk-...\n```\n\nThe key stays server-side: the host half reads it through the credential seam\nand serves only the usage summary to the browser. It never reaches the client\nbundle and is never hardcoded in this package.\n\n## How it works\n\n- **Host half** reads `OPENCODE_GO_API_KEY` from `ctx.credentials`, fetches\n  `GET https://opencode.ai/zen/go/v1/usage`, caches it with a 60s TTL, and\n  serves it on a same-origin route `/opencode-go/usage`.\n- **Browser half** polls that route every 60s and renders the ring + hover\n  card.\n- The upstream API is hit at most once per minute regardless of how many\n  sessions are open.\n\n## Notes\n\n- The badge only appears while the selected provider id is `opencode-go`.\n- The usage route is served on the DSH web server (`127.0.0.1` by default) and\n  returns usage percentages only, never the API key.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}