zcode-acp-server 0.72.0 → 0.74.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -6
- package/dist/backend/sandbox.d.ts +14 -9
- package/dist/backend/sandbox.d.ts.map +1 -1
- package/dist/backend/sandbox.js +23 -12
- package/dist/backend/sandbox.js.map +1 -1
- package/dist/bin/quota.d.ts.map +1 -1
- package/dist/bin/quota.js +11 -6
- package/dist/bin/quota.js.map +1 -1
- package/dist/code-fingerprint.json +1 -1
- package/dist/config/user-config.d.ts +5 -1
- package/dist/config/user-config.d.ts.map +1 -1
- package/dist/config/user-config.js +1 -0
- package/dist/config/user-config.js.map +1 -1
- package/dist/quota/opencode-go/client.d.ts +28 -7
- package/dist/quota/opencode-go/client.d.ts.map +1 -1
- package/dist/quota/opencode-go/client.js +39 -7
- package/dist/quota/opencode-go/client.js.map +1 -1
- package/dist/quota/opencode-go/config.d.ts +12 -7
- package/dist/quota/opencode-go/config.d.ts.map +1 -1
- package/dist/quota/opencode-go/config.js +12 -7
- package/dist/quota/opencode-go/config.js.map +1 -1
- package/dist/quota/opencode-go/format.js +1 -1
- package/dist/quota/opencode-go/format.js.map +1 -1
- package/dist/quota/opencode-go/index.d.ts +18 -10
- package/dist/quota/opencode-go/index.d.ts.map +1 -1
- package/dist/quota/opencode-go/index.js +105 -63
- package/dist/quota/opencode-go/index.js.map +1 -1
- package/dist/quota/opencode-go/parse.d.ts +10 -0
- package/dist/quota/opencode-go/parse.d.ts.map +1 -1
- package/dist/quota/opencode-go/parse.js +41 -0
- package/dist/quota/opencode-go/parse.js.map +1 -1
- package/dist/remote/hub-server.d.ts +21 -0
- package/dist/remote/hub-server.d.ts.map +1 -1
- package/dist/remote/hub-server.js +97 -2
- package/dist/remote/hub-server.js.map +1 -1
- package/docs/CLI.md +31 -28
- package/docs/SANDBOX.md +12 -3
- package/package.json +1 -1
|
@@ -4,18 +4,22 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Full precedence (highest first), resolved in ../index.ts:
|
|
6
6
|
* 1. `quota.opencodeGoWorkspaceId` / `opencodeGoAuthCookie` /
|
|
7
|
-
* `opencodeGoSessionToken`
|
|
8
|
-
* config).
|
|
7
|
+
* `opencodeGoSessionToken` / `opencodeGoApiKey` in
|
|
8
|
+
* `~/.config/zcode-acp/config.json` (our own config).
|
|
9
9
|
* 2. `OPENCODE_GO_WORKSPACE_ID` / `OPENCODE_GO_AUTH_COOKIE` /
|
|
10
|
-
* `OPENCODE_GO_SESSION_TOKEN` env vars (best for
|
|
11
|
-
* temporary overrides).
|
|
10
|
+
* `OPENCODE_GO_SESSION_TOKEN` / `OPENCODE_GO_API_KEY` env vars (best for
|
|
11
|
+
* CI / scripts / temporary overrides).
|
|
12
12
|
* 3. `~/.pi/agent/opencode-go.json` —
|
|
13
13
|
* `{ workspaceId, authCookie, sessionToken }` (the convention used by
|
|
14
14
|
* the @beyona/pi-zai-usage Pi extension, kept so users who already
|
|
15
|
-
* configured it there get reuse for free).
|
|
15
|
+
* configured it there get reuse for free). No API-key field here — the
|
|
16
|
+
* key postdates that convention.
|
|
16
17
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
18
|
+
* The cookie triple and the API key are two SOURCES for the same data: the
|
|
19
|
+
* triple drives the console status API (0.1-percent precision), the key the
|
|
20
|
+
* public usage API (integer percents, cookie-free). A missing/invalid
|
|
21
|
+
* credential on its own does not yield `not_configured` when the other
|
|
22
|
+
* source resolves — see ../index.ts.
|
|
19
23
|
*/
|
|
20
24
|
import { readFileSync } from "node:fs";
|
|
21
25
|
import path from "node:path";
|
|
@@ -25,6 +29,7 @@ import { log } from "../../utils.js";
|
|
|
25
29
|
export const ENV_WORKSPACE_ID = "OPENCODE_GO_WORKSPACE_ID";
|
|
26
30
|
export const ENV_AUTH_COOKIE = "OPENCODE_GO_AUTH_COOKIE";
|
|
27
31
|
export const ENV_SESSION_TOKEN = "OPENCODE_GO_SESSION_TOKEN";
|
|
32
|
+
export const ENV_API_KEY = "OPENCODE_GO_API_KEY";
|
|
28
33
|
/** Config file path (matches the @beyona/pi-zai-usage convention). */
|
|
29
34
|
export const CONFIG_PATH = path.join(process.env.HOME || process.env.USERPROFILE || "~", ".pi", "agent", "opencode-go.json");
|
|
30
35
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/quota/opencode-go/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/quota/opencode-go/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAErC,6DAA6D;AAC7D,MAAM,CAAC,MAAM,gBAAgB,GAAG,0BAA0B,CAAC;AAC3D,MAAM,CAAC,MAAM,eAAe,GAAG,yBAAyB,CAAC;AACzD,MAAM,CAAC,MAAM,iBAAiB,GAAG,2BAA2B,CAAC;AAC7D,MAAM,CAAC,MAAM,WAAW,GAAG,qBAAqB,CAAC;AAEjD,sEAAsE;AACtE,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAClC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,EAClD,KAAK,EACL,OAAO,EACP,kBAAkB,CACnB,CAAC;AASF;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,WAAmB,WAAW;IAC3D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAC1C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,GAAG,CAAC,kDAAkD,QAAQ,GAAG,CAAC,CAAC;YACnE,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,GAAG,GAAG,MAAiC,CAAC;QAC9C,OAAO;YACL,WAAW,EAAE,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;YAC9E,UAAU,EAAE,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;YAC3E,YAAY,EAAE,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;SAClF,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,uEAAuE;QACvE,oDAAoD;QACpD,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,GAAG,CAAC,oCAAoC,QAAQ,MAAM,GAAG,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -57,7 +57,7 @@ export function formatGoSection(result, windows, now = Date.now(), color = false
|
|
|
57
57
|
const msg = result.kind === "not_configured"
|
|
58
58
|
? "not configured (set quota.opencodeGo* or OPENCODE_GO_* — see zcode-acp quota --help)"
|
|
59
59
|
: result.kind === "auth_error"
|
|
60
|
-
? "auth expired — refresh your opencode.ai cookie + session token"
|
|
60
|
+
? "auth expired — refresh your opencode.ai cookie + session token, or set quota.opencodeGoApiKey"
|
|
61
61
|
: "unavailable";
|
|
62
62
|
return { header, body: [msg] };
|
|
63
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/quota/opencode-go/format.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C,qDAAqD;AACrD,MAAM,WAAW,GAA+C;IAC9D,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE;IAC/B,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE;IAChC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE;CACnC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,EAAE;QAAE,OAAO,KAAK,CAAC;IACpD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1C,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,GAAG,IAAI,KAAK,KAAK,GAAG,CAAC;IAC1C,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,GAAG,KAAK,KAAK,IAAI,GAAG,CAAC;IAC3C,OAAO,GAAG,IAAI,GAAG,CAAC;AACpB,CAAC;AAED,uEAAuE;AACvE,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC;AAQD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAqB,EACrB,OAA+B,EAC/B,MAAc,IAAI,CAAC,GAAG,EAAE,EACxB,KAAK,GAAG,KAAK;IAEb,MAAM,MAAM,GAAG,aAAa,CAAC;IAE7B,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,GAAG,GACP,MAAM,CAAC,IAAI,KAAK,gBAAgB;YAC9B,CAAC,CAAC,sFAAsF;YACxF,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY;gBAC5B,CAAC,CAAC
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/quota/opencode-go/format.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,25 +6,33 @@
|
|
|
6
6
|
* check → parse → cache write. Any thrown error degrades to `unavailable`
|
|
7
7
|
* rather than propagating, so the CLI always produces output.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* Two fetch sources (cookie console API preferred for its 0.1-percent
|
|
10
|
+
* precision; the API-key usage API as the cookie-free fallback — see
|
|
11
|
+
* queryGoUsage). A missing/invalid credential on every source yields
|
|
12
|
+
* `not_configured`, which the combined view silently skips (vs.
|
|
13
|
+
* `unavailable`, which renders an error line) — so users who only care about
|
|
14
|
+
* GLM see no noise.
|
|
12
15
|
*/
|
|
13
16
|
import type { GoQueryResult } from "./types.js";
|
|
14
17
|
/**
|
|
15
|
-
* Query
|
|
16
|
-
* {@link GoQueryResult}.
|
|
18
|
+
* Query Opencode Go usage and return a normalised {@link GoQueryResult}.
|
|
17
19
|
*
|
|
18
|
-
*
|
|
20
|
+
* Source selection: the COOKIE triple is preferred (0.1-percent precision);
|
|
21
|
+
* when it is absent — or the console API rejects it (400/401/403: expired
|
|
22
|
+
* cookies) while an API key is configured — the public usage API serves the
|
|
23
|
+
* fallback (integer percents). This keeps long-lived cookie setups on the
|
|
24
|
+
* finer source while key-only setups, and cookie expiry, degrade seamlessly.
|
|
25
|
+
*
|
|
26
|
+
* - No usable credential → `not_configured`.
|
|
19
27
|
* - Serves a cached result when fresh (< 10s).
|
|
20
|
-
* -
|
|
28
|
+
* - Auth rejected on BOTH paths → `auth_error`.
|
|
21
29
|
* - Network/timeout/parse failure → `unavailable`.
|
|
22
30
|
*/
|
|
23
31
|
export declare function queryGoUsage(): Promise<GoQueryResult>;
|
|
24
32
|
export { clearCache, clearCache as clearGoCache } from "./cache.js";
|
|
25
|
-
export { fetchGoStatus, goStatusUrl } from "./client.js";
|
|
26
|
-
export { parseGoStatus, looksLikeGoStatus } from "./parse.js";
|
|
33
|
+
export { fetchGoStatus, fetchZenUsage, goStatusUrl, zenUsageUrl } from "./client.js";
|
|
34
|
+
export { parseGoStatus, parseZenUsage, looksLikeGoStatus, looksLikeZenUsage } from "./parse.js";
|
|
27
35
|
export { formatDuration, formatGoSection } from "./format.js";
|
|
28
|
-
export { readConfigFile, CONFIG_PATH, ENV_WORKSPACE_ID, ENV_AUTH_COOKIE, ENV_SESSION_TOKEN, } from "./config.js";
|
|
36
|
+
export { readConfigFile, CONFIG_PATH, ENV_WORKSPACE_ID, ENV_AUTH_COOKIE, ENV_SESSION_TOKEN, ENV_API_KEY, } from "./config.js";
|
|
29
37
|
export type { GoQueryResult, GoWindow, GoWindowKey, GoStatusResponse } from "./types.js";
|
|
30
38
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/quota/opencode-go/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/quota/opencode-go/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAcH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA2FhD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,aAAa,CAAC,CA4C3D;AAoBD,OAAO,EAAE,UAAU,EAAE,UAAU,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAChG,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EACL,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -6,26 +6,31 @@
|
|
|
6
6
|
* check → parse → cache write. Any thrown error degrades to `unavailable`
|
|
7
7
|
* rather than propagating, so the CLI always produces output.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* Two fetch sources (cookie console API preferred for its 0.1-percent
|
|
10
|
+
* precision; the API-key usage API as the cookie-free fallback — see
|
|
11
|
+
* queryGoUsage). A missing/invalid credential on every source yields
|
|
12
|
+
* `not_configured`, which the combined view silently skips (vs.
|
|
13
|
+
* `unavailable`, which renders an error line) — so users who only care about
|
|
14
|
+
* GLM see no noise.
|
|
12
15
|
*/
|
|
13
16
|
import { loadUserConfig } from "../../config/user-config.js";
|
|
14
17
|
import { log } from "../../utils.js";
|
|
15
18
|
import { getCached, setCached } from "./cache.js";
|
|
16
|
-
import { ENV_AUTH_COOKIE, ENV_SESSION_TOKEN, ENV_WORKSPACE_ID, readConfigFile } from "./config.js";
|
|
17
|
-
import { fetchGoStatus } from "./client.js";
|
|
18
|
-
import { parseGoStatus } from "./parse.js";
|
|
19
|
+
import { ENV_API_KEY, ENV_AUTH_COOKIE, ENV_SESSION_TOKEN, ENV_WORKSPACE_ID, readConfigFile, } from "./config.js";
|
|
20
|
+
import { fetchGoStatus, fetchZenUsage } from "./client.js";
|
|
21
|
+
import { parseGoStatus, parseZenUsage } from "./parse.js";
|
|
19
22
|
/** Format validators (match pi-go-bars conventions). */
|
|
20
23
|
const RE_WORKSPACE = /^wrk_[A-Za-z0-9]+$/;
|
|
21
24
|
const COOKIE_PREFIX = "Fe26.2**";
|
|
22
25
|
/** Minimum plausible session-token length (console `st_…` values). */
|
|
23
26
|
const MIN_SESSION_TOKEN = 8;
|
|
27
|
+
/** Minimum plausible API-key length (`oc_sk_…` service keys). */
|
|
28
|
+
const MIN_API_KEY = 16;
|
|
24
29
|
/**
|
|
25
30
|
* Resolve & validate credentials.
|
|
26
31
|
*
|
|
27
|
-
*
|
|
28
|
-
* precedence (highest first):
|
|
32
|
+
* The cookie triple merges three sources field-by-field with the standard
|
|
33
|
+
* user-config precedence (highest first):
|
|
29
34
|
* 1. `quota.opencodeGoWorkspaceId` / `opencodeGoAuthCookie` /
|
|
30
35
|
* `opencodeGoSessionToken` in `~/.config/zcode-acp/config.json` (our own
|
|
31
36
|
* config — preferred home).
|
|
@@ -34,11 +39,11 @@ const MIN_SESSION_TOKEN = 8;
|
|
|
34
39
|
* 3. `~/.pi/agent/opencode-go.json` (legacy — the @beyona/pi-zai-usage Pi
|
|
35
40
|
* extension convention, kept so existing setups keep working).
|
|
36
41
|
*
|
|
37
|
-
* The
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
+
* The API key (`quota.opencodeGoApiKey` / `OPENCODE_GO_API_KEY`) has no legacy
|
|
43
|
+
* file source. The session token is REQUIRED since the 2026-09 console
|
|
44
|
+
* migration: the status API answers 401 to an `auth` cookie alone. A field
|
|
45
|
+
* present in a higher-precedence source overrides the same field below it; a
|
|
46
|
+
* field present only lower down still counts.
|
|
42
47
|
*/
|
|
43
48
|
function loadCredentials() {
|
|
44
49
|
const own = loadUserConfig().quota;
|
|
@@ -46,29 +51,57 @@ function loadCredentials() {
|
|
|
46
51
|
const workspaceId = own?.opencodeGoWorkspaceId ?? process.env[ENV_WORKSPACE_ID] ?? file.workspaceId;
|
|
47
52
|
const authCookie = own?.opencodeGoAuthCookie ?? process.env[ENV_AUTH_COOKIE] ?? file.authCookie;
|
|
48
53
|
const sessionToken = own?.opencodeGoSessionToken ?? process.env[ENV_SESSION_TOKEN] ?? file.sessionToken;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
+
let consoleCreds = null;
|
|
55
|
+
if (workspaceId && authCookie && sessionToken) {
|
|
56
|
+
if (!RE_WORKSPACE.test(workspaceId)) {
|
|
57
|
+
log(`opencode-go: invalid workspaceId format (expected wrk_…)`);
|
|
58
|
+
}
|
|
59
|
+
else if (!authCookie.startsWith(COOKIE_PREFIX)) {
|
|
60
|
+
log(`opencode-go: authCookie does not start with ${COOKIE_PREFIX}`);
|
|
61
|
+
}
|
|
62
|
+
else if (sessionToken.trim().length < MIN_SESSION_TOKEN) {
|
|
63
|
+
log(`opencode-go: sessionToken looks malformed (__Host-console_session value, st_…)`);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
consoleCreds = { workspaceId, authCookie, sessionToken };
|
|
67
|
+
}
|
|
54
68
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
69
|
+
const rawKey = own?.opencodeGoApiKey ?? process.env[ENV_API_KEY] ?? "";
|
|
70
|
+
const apiKey = rawKey.trim().length >= MIN_API_KEY ? rawKey.trim() : null;
|
|
71
|
+
return { console: consoleCreds, apiKey };
|
|
72
|
+
}
|
|
73
|
+
/** Map a parsed payload to the success/unavailable distinction. */
|
|
74
|
+
function resultFromParsed(parsed) {
|
|
75
|
+
if (parsed.parserOutdated) {
|
|
76
|
+
log("opencode-go: status JSON recognised but no windows parsed (parser outdated)");
|
|
77
|
+
return { kind: "unavailable" };
|
|
58
78
|
}
|
|
59
|
-
if (
|
|
60
|
-
|
|
61
|
-
return
|
|
79
|
+
if (!parsed.rolling && !parsed.weekly && !parsed.monthly) {
|
|
80
|
+
// Not a status payload at all (e.g. an HTML error page).
|
|
81
|
+
return { kind: "unavailable" };
|
|
62
82
|
}
|
|
63
|
-
return {
|
|
83
|
+
return {
|
|
84
|
+
kind: "success",
|
|
85
|
+
// Rolling and weekly are the two windows the CLI shows by default; fall
|
|
86
|
+
// back to zeroes if somehow absent so the type stays simple.
|
|
87
|
+
rolling: parsed.rolling ?? { usagePercent: 0, resetInSec: 0 },
|
|
88
|
+
weekly: parsed.weekly ?? { usagePercent: 0, resetInSec: 0 },
|
|
89
|
+
monthly: parsed.monthly,
|
|
90
|
+
fetchedAt: Date.now(),
|
|
91
|
+
};
|
|
64
92
|
}
|
|
65
93
|
/**
|
|
66
|
-
* Query
|
|
67
|
-
* {@link GoQueryResult}.
|
|
94
|
+
* Query Opencode Go usage and return a normalised {@link GoQueryResult}.
|
|
68
95
|
*
|
|
69
|
-
*
|
|
96
|
+
* Source selection: the COOKIE triple is preferred (0.1-percent precision);
|
|
97
|
+
* when it is absent — or the console API rejects it (400/401/403: expired
|
|
98
|
+
* cookies) while an API key is configured — the public usage API serves the
|
|
99
|
+
* fallback (integer percents). This keeps long-lived cookie setups on the
|
|
100
|
+
* finer source while key-only setups, and cookie expiry, degrade seamlessly.
|
|
101
|
+
*
|
|
102
|
+
* - No usable credential → `not_configured`.
|
|
70
103
|
* - Serves a cached result when fresh (< 10s).
|
|
71
|
-
* -
|
|
104
|
+
* - Auth rejected on BOTH paths → `auth_error`.
|
|
72
105
|
* - Network/timeout/parse failure → `unavailable`.
|
|
73
106
|
*/
|
|
74
107
|
export async function queryGoUsage() {
|
|
@@ -78,54 +111,63 @@ export async function queryGoUsage() {
|
|
|
78
111
|
return cached;
|
|
79
112
|
}
|
|
80
113
|
const creds = loadCredentials();
|
|
81
|
-
if (!creds)
|
|
114
|
+
if (!creds.console && !creds.apiKey)
|
|
82
115
|
return { kind: "not_configured" };
|
|
83
116
|
let result;
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
if (parsed.parserOutdated) {
|
|
98
|
-
log("opencode-go: status JSON recognised but no windows parsed (parser outdated)");
|
|
99
|
-
result = { kind: "unavailable" };
|
|
117
|
+
if (creds.console) {
|
|
118
|
+
try {
|
|
119
|
+
const resp = await fetchGoStatus(creds.console.workspaceId, creds.console.authCookie, creds.console.sessionToken);
|
|
120
|
+
// 401/403 = bad cookie pair; 400 = missing/unknown org id (x-org-id).
|
|
121
|
+
// The remedy is the same for all three — re-grab credentials — so they
|
|
122
|
+
// share auth_error… unless an API key is available, in which case the
|
|
123
|
+
// cookie-free endpoint takes over instead of failing the card.
|
|
124
|
+
if ((resp.status === 400 || resp.status === 401 || resp.status === 403) && creds.apiKey) {
|
|
125
|
+
log("opencode-go: console cookies rejected — falling back to the usage API key");
|
|
126
|
+
result = await queryViaApiKey(creds.apiKey);
|
|
127
|
+
}
|
|
128
|
+
else if (resp.status === 400 || resp.status === 401 || resp.status === 403) {
|
|
129
|
+
result = { kind: "auth_error" };
|
|
100
130
|
}
|
|
101
|
-
else if (
|
|
102
|
-
// Not a status payload at all (e.g. an HTML error page).
|
|
131
|
+
else if (resp.status < 200 || resp.status >= 300) {
|
|
103
132
|
result = { kind: "unavailable" };
|
|
104
133
|
}
|
|
105
134
|
else {
|
|
106
|
-
result =
|
|
107
|
-
kind: "success",
|
|
108
|
-
// Rolling and weekly are the two windows the CLI shows by default;
|
|
109
|
-
// fall back to zeroes if somehow absent so the type stays simple.
|
|
110
|
-
rolling: parsed.rolling ?? { usagePercent: 0, resetInSec: 0 },
|
|
111
|
-
weekly: parsed.weekly ?? { usagePercent: 0, resetInSec: 0 },
|
|
112
|
-
monthly: parsed.monthly,
|
|
113
|
-
fetchedAt: Date.now(),
|
|
114
|
-
};
|
|
135
|
+
result = resultFromParsed(parseGoStatus(resp.text));
|
|
115
136
|
}
|
|
116
137
|
}
|
|
138
|
+
catch (e) {
|
|
139
|
+
log(`opencode-go: fetch failed (${e instanceof Error ? e.message : String(e)})`);
|
|
140
|
+
result = { kind: "unavailable" };
|
|
141
|
+
}
|
|
117
142
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
result =
|
|
143
|
+
else {
|
|
144
|
+
// Key-only setup — no cookie triple to try first.
|
|
145
|
+
result = await queryViaApiKey(creds.apiKey);
|
|
121
146
|
}
|
|
122
147
|
setCached(result);
|
|
123
148
|
return result;
|
|
124
149
|
}
|
|
150
|
+
/** Query the public usage API (`/zen/go/v1/usage`) with the service key. */
|
|
151
|
+
async function queryViaApiKey(apiKey) {
|
|
152
|
+
try {
|
|
153
|
+
const resp = await fetchZenUsage(apiKey);
|
|
154
|
+
if (resp.status === 401) {
|
|
155
|
+
return { kind: "auth_error" };
|
|
156
|
+
}
|
|
157
|
+
if (resp.status < 200 || resp.status >= 300) {
|
|
158
|
+
return { kind: "unavailable" };
|
|
159
|
+
}
|
|
160
|
+
return resultFromParsed(parseZenUsage(resp.text));
|
|
161
|
+
}
|
|
162
|
+
catch (e) {
|
|
163
|
+
log(`opencode-go: usage API fetch failed (${e instanceof Error ? e.message : String(e)})`);
|
|
164
|
+
return { kind: "unavailable" };
|
|
165
|
+
}
|
|
166
|
+
}
|
|
125
167
|
// Re-exports for consumers (CLI + tests).
|
|
126
168
|
export { clearCache, clearCache as clearGoCache } from "./cache.js";
|
|
127
|
-
export { fetchGoStatus, goStatusUrl } from "./client.js";
|
|
128
|
-
export { parseGoStatus, looksLikeGoStatus } from "./parse.js";
|
|
169
|
+
export { fetchGoStatus, fetchZenUsage, goStatusUrl, zenUsageUrl } from "./client.js";
|
|
170
|
+
export { parseGoStatus, parseZenUsage, looksLikeGoStatus, looksLikeZenUsage } from "./parse.js";
|
|
129
171
|
export { formatDuration, formatGoSection } from "./format.js";
|
|
130
|
-
export { readConfigFile, CONFIG_PATH, ENV_WORKSPACE_ID, ENV_AUTH_COOKIE, ENV_SESSION_TOKEN, } from "./config.js";
|
|
172
|
+
export { readConfigFile, CONFIG_PATH, ENV_WORKSPACE_ID, ENV_AUTH_COOKIE, ENV_SESSION_TOKEN, ENV_API_KEY, } from "./config.js";
|
|
131
173
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/quota/opencode-go/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/quota/opencode-go/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,4 +27,14 @@ export interface ParsedGoStatus {
|
|
|
27
27
|
/** Detect the status payload shape (`access.meters`) — the parser-rot guard. */
|
|
28
28
|
export declare function looksLikeGoStatus(parsed: unknown): boolean;
|
|
29
29
|
export declare function parseGoStatus(text: string, now?: number): ParsedGoStatus;
|
|
30
|
+
/** Detect the public-usage payload shape (`usage.rolling`) — parser-rot guard. */
|
|
31
|
+
export declare function looksLikeZenUsage(parsed: unknown): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Parse the public usage payload
|
|
34
|
+
* (`{"usage":{"rolling|weekly|monthly":{"status","percent","resetsAt"}}}`).
|
|
35
|
+
* The percent is server-rounded (integer as of 2026-10 — finer granularity
|
|
36
|
+
* would pass through untouched); a missing/invalid percent drops the window
|
|
37
|
+
* rather than pinning a fake 0.
|
|
38
|
+
*/
|
|
39
|
+
export declare function parseZenUsage(text: string, now?: number): ParsedGoStatus;
|
|
30
40
|
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/quota/opencode-go/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAU3C,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAC;IACzB;;;OAGG;IACH,cAAc,EAAE,OAAO,CAAC;CACzB;AAuBD,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAG1D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,cAAc,CAsBpF"}
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/quota/opencode-go/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAU3C,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAC;IACzB;;;OAGG;IACH,cAAc,EAAE,OAAO,CAAC;CACzB;AAuBD,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAG1D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,cAAc,CAsBpF;AAgBD,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAG1D;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,cAAc,CA0BpF"}
|
|
@@ -58,4 +58,45 @@ export function parseGoStatus(text, now = Date.now()) {
|
|
|
58
58
|
parserOutdated: !rolling && !weekly && !monthly,
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
|
+
/** Detect the public-usage payload shape (`usage.rolling`) — parser-rot guard. */
|
|
62
|
+
export function looksLikeZenUsage(parsed) {
|
|
63
|
+
const usage = parsed?.usage;
|
|
64
|
+
return typeof usage === "object" && usage !== null;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Parse the public usage payload
|
|
68
|
+
* (`{"usage":{"rolling|weekly|monthly":{"status","percent","resetsAt"}}}`).
|
|
69
|
+
* The percent is server-rounded (integer as of 2026-10 — finer granularity
|
|
70
|
+
* would pass through untouched); a missing/invalid percent drops the window
|
|
71
|
+
* rather than pinning a fake 0.
|
|
72
|
+
*/
|
|
73
|
+
export function parseZenUsage(text, now = Date.now()) {
|
|
74
|
+
let parsed;
|
|
75
|
+
try {
|
|
76
|
+
parsed = JSON.parse(text);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return { rolling: null, weekly: null, monthly: null, parserOutdated: false };
|
|
80
|
+
}
|
|
81
|
+
const usage = parsed?.usage;
|
|
82
|
+
if (!looksLikeZenUsage(parsed)) {
|
|
83
|
+
return { rolling: null, weekly: null, monthly: null, parserOutdated: false };
|
|
84
|
+
}
|
|
85
|
+
const fromZen = (w) => {
|
|
86
|
+
if (!w || typeof w.percent !== "number" || !Number.isFinite(w.percent))
|
|
87
|
+
return null;
|
|
88
|
+
const at = w.resetsAt ? Date.parse(w.resetsAt) : Number.NaN;
|
|
89
|
+
const resetInSec = Number.isFinite(at) ? Math.max(0, Math.round((at - now) / 1000)) : 0;
|
|
90
|
+
return { usagePercent: Math.min(100, Math.max(0, w.percent)), resetInSec };
|
|
91
|
+
};
|
|
92
|
+
const rolling = fromZen(usage?.rolling);
|
|
93
|
+
const weekly = fromZen(usage?.weekly);
|
|
94
|
+
const monthly = fromZen(usage?.monthly);
|
|
95
|
+
return {
|
|
96
|
+
rolling,
|
|
97
|
+
weekly,
|
|
98
|
+
monthly,
|
|
99
|
+
parserOutdated: !rolling && !weekly && !monthly,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
61
102
|
//# sourceMappingURL=parse.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../src/quota/opencode-go/parse.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../src/quota/opencode-go/parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
* next bridge re-spawns it on demand.
|
|
26
26
|
*/
|
|
27
27
|
import { type ChildProcess } from "node:child_process";
|
|
28
|
+
import { type RawData } from "ws";
|
|
28
29
|
import { type TerminalPrefs } from "../config/user-config.js";
|
|
29
30
|
export interface HubOptions {
|
|
30
31
|
port: number;
|
|
@@ -230,6 +231,26 @@ export declare function resetDockCacheForTest(): void;
|
|
|
230
231
|
* undefined (the caller falls back to the project name).
|
|
231
232
|
*/
|
|
232
233
|
export declare function sanitizeTabTitle(v: unknown): string | undefined;
|
|
234
|
+
/**
|
|
235
|
+
* clientInfo name the desktop client (the zcode-acp-remote Desktop Workbench)
|
|
236
|
+
* sends at `initialize` — the Desktop Presence identity (amendment to
|
|
237
|
+
* ADR-0016). The bridge-side twin of this identification is
|
|
238
|
+
* `ClientRegistry.nameConnection` (broadcast.ts); the hub cannot reuse it
|
|
239
|
+
* because bridges sit downstream of the hub's incubation decision.
|
|
240
|
+
*/
|
|
241
|
+
export declare const DESKTOP_CLIENT_NAME = "zcode-acp-remote-desktop";
|
|
242
|
+
/**
|
|
243
|
+
* Desktop Presence wire peek (amendment to ADR-0016): the hub is a frame-level
|
|
244
|
+
* proxy (ADR-0002) with no ACP layer of its own, so a hub client's identity is
|
|
245
|
+
* visible only on the wire. The first client→bridge frame of an ACP connection
|
|
246
|
+
* is always `initialize` (the SDK enforces it and rejects later duplicates), so
|
|
247
|
+
* the connection's clientInfo name can be read straight off that frame.
|
|
248
|
+
* Returns: the name ("" when the initialize carries no clientInfo — the mobile
|
|
249
|
+
* App), `null` when the frame decodes and parses but is NOT an initialize
|
|
250
|
+
* (none is coming — the bridge's SDK shuts such connections down), `undefined`
|
|
251
|
+
* when the frame cannot be decoded or parsed (keep watching). Never throws.
|
|
252
|
+
*/
|
|
253
|
+
export declare function initializeClientName(data: RawData): string | null | undefined;
|
|
233
254
|
/**
|
|
234
255
|
* Start the hub. Resolves once listening; rejects on bind failure (including
|
|
235
256
|
* EADDRINUSE when another hub already owns the port).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hub-server.d.ts","sourceRoot":"","sources":["../../src/remote/hub-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"hub-server.d.ts","sourceRoot":"","sources":["../../src/remote/hub-server.ts"],"names":[],"mappings":"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"}
|