05a7a449f0
* Add OpenCode Go usage API support * Preserve OpenCode Go Zen balance with API usage * Update OpenCode Go capability gate * Format OpenCode Go API overlay
52 lines
3.6 KiB
Markdown
52 lines
3.6 KiB
Markdown
---
|
|
summary: "OpenCode provider notes: browser cookies, local SQLite usage, and parsing."
|
|
read_when:
|
|
- Adding or modifying the OpenCode provider
|
|
- Debugging OpenCode usage parsing or cookie import
|
|
---
|
|
|
|
# OpenCode provider
|
|
|
|
## Data sources
|
|
- Browser cookies from `opencode.ai`.
|
|
- OpenCode Go usage API at `GET https://opencode.ai/zen/go/v1/usage`, authenticated by `OPENCODE_API_KEY` or
|
|
`providers[].apiKey`.
|
|
- OpenCode Go local history from `~/.local/share/opencode/opencode.db` on macOS and Linux.
|
|
- `POST https://opencode.ai/_server` with server function IDs:
|
|
- `workspaces` (`def39973159c7f0483d8793a822b8dbb10d067e12c65455fcb4608459ba0234f`)
|
|
- `subscription.get` (`7abeebee372f304e050aaaf92be863f4a86490e382f8c79db68fd94040d691b4`)
|
|
|
|
## Usage mapping
|
|
- Primary window: rolling 5-hour usage (`rollingUsage.usagePercent`, `rollingUsage.resetInSec`).
|
|
- Secondary window: optional weekly usage (`weeklyUsage.usagePercent`, `weeklyUsage.resetInSec`).
|
|
- Resets computed as `now + resetInSec`.
|
|
|
|
## Notes
|
|
- Responses are `text/javascript` with serialized objects; parse via regex.
|
|
- Missing workspace ID or rolling usage fields should raise parse errors; omitted weekly usage stays absent.
|
|
- OpenCode web Auto imports Chrome first, then Dia when their cookie stores exist; Keychain preflight stays scoped
|
|
to each candidate browser. Other browsers stay on Manual Cookie import until CodexBar has an explicit browser
|
|
selector.
|
|
- Set `CODEXBAR_OPENCODE_WORKSPACE_ID` to skip workspace lookup and force a specific workspace.
|
|
- Workspace override accepts a raw `wrk_…` ID or a full `https://opencode.ai/workspace/...` URL.
|
|
- Cached cookies: Keychain cache `com.steipete.codexbar.cache` (account `cookie.opencode`, source + timestamp). Browser
|
|
import only runs when the cached cookie fails.
|
|
- OpenCode Go unscoped Auto mode tries daily cost history derived from local `opencode-go` assistant costs first,
|
|
overlays authoritative API windows when an API key is configured, then falls back through the API and legacy web
|
|
sources when local history is unavailable. Auto stays web-first when a token account, manual cookie, or workspace
|
|
override scopes the request, because local history is device-wide.
|
|
- The local monthly window is an estimate anchored at the earliest local row and can drift from the real billing
|
|
cycle. The local strategy prefers API-reported rolling/weekly/monthly percentages and reset timestamps. When no API
|
|
key is configured, a cached or manual session cookie can still overlay the legacy web values (plus Zen balance).
|
|
Both paths keep local daily cost history and never trigger a fresh browser import. When no authoritative overlay is
|
|
available, the menu and text CLI label the quota as estimated, and JSON includes `dataConfidence: "estimated"`.
|
|
- OpenCode Go cost history chart: `opencode.ai` has no daily-granularity endpoint, so per-day cost/request buckets
|
|
come from local `opencode-go` assistant costs in `opencode.db`, keyed by device-local calendar day. Successful web
|
|
usage remains workspace-scoped and is never blended with device-wide local costs, so it does not show cost history.
|
|
Explicit Web mode never reads the local database either.
|
|
- Each day's bucket also carries a per-model cost breakdown, read from each local assistant message's `modelID`
|
|
(the real model behind the constant `opencode-go` Zen proxy `providerID`). This lets the shared Cost history
|
|
chart show a per-model breakdown for OpenCode Go the same way it already does for Claude (see the "Cost usage"
|
|
section in [docs/claude.md](claude.md)). Rows with no `modelID` are grouped under an "unknown" bucket instead of
|
|
being dropped.
|