zcode-acp-server 0.46.7 → 0.47.1
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 +1 -1
- package/dist/code-fingerprint.json +2 -2
- package/dist/remote/endpoint.d.ts.map +1 -1
- package/dist/remote/endpoint.js +23 -0
- package/dist/remote/endpoint.js.map +1 -1
- package/dist/remote/hub-server.d.ts.map +1 -1
- package/dist/remote/hub-server.js +115 -2
- package/dist/remote/hub-server.js.map +1 -1
- package/dist/remote/settings-endpoint.d.ts +47 -0
- package/dist/remote/settings-endpoint.d.ts.map +1 -0
- package/dist/remote/settings-endpoint.js +1046 -0
- package/dist/remote/settings-endpoint.js.map +1 -0
- package/dist/settings/agents-config.d.ts +158 -0
- package/dist/settings/agents-config.d.ts.map +1 -0
- package/dist/settings/agents-config.js +598 -0
- package/dist/settings/agents-config.js.map +1 -0
- package/dist/settings/app-update.d.ts +193 -0
- package/dist/settings/app-update.d.ts.map +1 -0
- package/dist/settings/app-update.js +659 -0
- package/dist/settings/app-update.js.map +1 -0
- package/dist/settings/atomic-write.d.ts +106 -0
- package/dist/settings/atomic-write.d.ts.map +1 -0
- package/dist/settings/atomic-write.js +228 -0
- package/dist/settings/atomic-write.js.map +1 -0
- package/dist/settings/cli-config.d.ts +162 -0
- package/dist/settings/cli-config.d.ts.map +1 -0
- package/dist/settings/cli-config.js +369 -0
- package/dist/settings/cli-config.js.map +1 -0
- package/dist/settings/coding-plan.d.ts +106 -0
- package/dist/settings/coding-plan.d.ts.map +1 -0
- package/dist/settings/coding-plan.js +299 -0
- package/dist/settings/coding-plan.js.map +1 -0
- package/dist/settings/file-lock.d.ts +39 -0
- package/dist/settings/file-lock.d.ts.map +1 -0
- package/dist/settings/file-lock.js +282 -0
- package/dist/settings/file-lock.js.map +1 -0
- package/dist/settings/provider-config.d.ts +123 -0
- package/dist/settings/provider-config.d.ts.map +1 -0
- package/dist/settings/provider-config.js +311 -0
- package/dist/settings/provider-config.js.map +1 -0
- package/dist/settings/skills.d.ts +72 -0
- package/dist/settings/skills.d.ts.map +1 -0
- package/dist/settings/skills.js +245 -0
- package/dist/settings/skills.js.map +1 -0
- package/dist/settings/usage-stats.d.ts +74 -0
- package/dist/settings/usage-stats.d.ts.map +1 -0
- package/dist/settings/usage-stats.js +235 -0
- package/dist/settings/usage-stats.js.map +1 -0
- package/dist/utils.d.ts +14 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +22 -0
- package/dist/utils.js.map +1 -1
- package/docs/ARCHITECTURE.md +65 -0
- package/docs/REMOTE-CLIENTS.md +285 -0
- package/package.json +1 -1
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/docs/ARCHITECTURE.md
CHANGED
|
@@ -196,6 +196,20 @@ API only because the ZCode backend itself sends them for inference.
|
|
|
196
196
|
| `runtime-model.ts` | runtimeModel overlay construction and application |
|
|
197
197
|
| `model-cache.ts` | Model ID cache and usage initialization |
|
|
198
198
|
|
|
199
|
+
### `settings/` — ZCode configuration management (ADR-0025–0028)
|
|
200
|
+
|
|
201
|
+
| File | Responsibility |
|
|
202
|
+
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
203
|
+
| `file-lock.ts` | ZCode's cross-process file lock (`<path>.lock` + owner files + stale reclaim) so the bridge and a running desktop app never overwrite each other |
|
|
204
|
+
| `atomic-write.ts` | Locked read-modify-write of a config file: unknown keys preserved, self-validation, backup, temp + rename |
|
|
205
|
+
| `provider-config.ts` | `~/.zcode/v2/provider_config.json`: provider enable/rename, model add/remove, contextWindow / reasoningLevel |
|
|
206
|
+
| `cli-config.ts` | `~/.zcode/cli/config.json`: skills enablement, MCP servers, hooks tree, plugin enablement |
|
|
207
|
+
| `agents-config.ts` | `~/.zcode/v2/agents-state.json` + `~/.zcode/agents/*.md`: subagent CRUD (frontmatter only), enable, model override |
|
|
208
|
+
| `skills.ts` | Skill discovery + enable/delete/copy-to-user with realpath escape guards |
|
|
209
|
+
| `usage-stats.ts` | Local `~/.zcode/cli/db.sqlite` aggregation: per-model tokens + daily buckets |
|
|
210
|
+
| `coding-plan.ts` | Credential decryption + coding-plan reset card status/opportunity/use |
|
|
211
|
+
| `app-update.ts` | ZCode desktop app release check + verified download + bundle swap where the location allows (ADR-0028) |
|
|
212
|
+
|
|
199
213
|
### `remote/` — Remote access (opt-in via `ZCODE_ACP_REMOTE=1`)
|
|
200
214
|
|
|
201
215
|
| File | Responsibility |
|
|
@@ -206,6 +220,7 @@ API only because the ZCode backend itself sends them for inference.
|
|
|
206
220
|
| `file-endpoint.ts` | Read-only `GET /fs/list` + `GET /fs/file` on the loopback server (ADR-0004): Session Root scoping, byte/line windows, streaming |
|
|
207
221
|
| `status-endpoint.ts` | `GET /status` on the loopback server (ADR-0005): in-memory per-session running state (`pendingTurns` derivation), zero backend RPC |
|
|
208
222
|
| `session-close-endpoint.ts` | `POST /sessions/{id}/close` on the loopback server (ADR-0006): running-guarded discovery retirement with self-healing re-appearance |
|
|
223
|
+
| `settings-endpoint.ts` | `settings/*` routes on the loopback server (ADR-0025): the ZCode configuration API, mounted again by the hub behind the token |
|
|
209
224
|
| `hub-server.ts` | The hub singleton: token auth, instance discovery, byte-level WS proxying, heartbeat pruning, on-demand `?probe=1` liveness, idle exit, version self-upgrade, `GET /api/quota` direct query (ADR-0005), POST close proxy (ADR-0006) |
|
|
210
225
|
|
|
211
226
|
When enabled, the same `AgentApp` serves the stdio editor and a loopback
|
|
@@ -248,6 +263,56 @@ surface's first write op: `POST /api/instances/{id}/sessions/{sid}/close`
|
|
|
248
263
|
retires a conversation from discovery (running-guarded, self-healing if the
|
|
249
264
|
editor still has it open).
|
|
250
265
|
|
|
266
|
+
### `settings/` — ZCode configuration management (ADR-0025–0028)
|
|
267
|
+
|
|
268
|
+
The settings API exposes the desktop app's management surface as JSON so a
|
|
269
|
+
native client can render it: models, skills, MCP servers, hooks, subagents,
|
|
270
|
+
app usage, coding-plan reset cards, and app updates. All of it is machine-level
|
|
271
|
+
state under `~/.zcode/` that the desktop app owns, which drives two design
|
|
272
|
+
choices.
|
|
273
|
+
|
|
274
|
+
First, **the bridge is not the owner of these files** — it is a second writer
|
|
275
|
+
next to a running desktop app. Every write therefore goes through
|
|
276
|
+
`file-lock.ts`, a re-implementation of ZCode's own cross-process lock
|
|
277
|
+
(`<path>.lock` directory + per-holder owner file + stale reclaim), and through
|
|
278
|
+
`atomic-write.ts`'s read-modify-write that preserves unknown keys, self-
|
|
279
|
+
validates, backs up, then temp-file + rename (ADR-0026). Without the shared
|
|
280
|
+
lock a settings write landing during an app write silently discards the app's
|
|
281
|
+
change.
|
|
282
|
+
|
|
283
|
+
Second, **the API layer is mounted twice from one factory**
|
|
284
|
+
(`remote/settings-endpoint.ts`): on the bridge's loopback server unauthenticated
|
|
285
|
+
(exactly like `/status` and `/fs` — any local process can already write these
|
|
286
|
+
files) and on the hub under `/api/settings/*` behind the token, plus the
|
|
287
|
+
per-instance proxy `…/settings/*`. Writing the routing once and mounting twice
|
|
288
|
+
is what keeps the two in sync (ADR-0025).
|
|
289
|
+
|
|
290
|
+
Each write reports an **effect class**: `immediate` for the provider table
|
|
291
|
+
(absorbed by the backend's ~1s poll) and skills enablement (read live), versus
|
|
292
|
+
`needs-restart` for MCP servers, hooks, and subagent markdown, which the agent
|
|
293
|
+
reads once at start. The client either prompts or calls
|
|
294
|
+
`POST /api/instances/{id}/backend/restart`, which reuses the sandbox
|
|
295
|
+
arm-flip's cancel-then-respawn path.
|
|
296
|
+
|
|
297
|
+
App usage stats are aggregated locally from the agent database
|
|
298
|
+
(`~/.zcode/cli/db/db.sqlite`) rather than proxying the backend's `usage/stats`
|
|
299
|
+
RPC, so usage works with no backend process alive and degrades to
|
|
300
|
+
`{available: false}` on a machine that never ran an agent (ADR-0027). Coding-
|
|
301
|
+
plan reset cards are the one irreversible operation: they require the nonce
|
|
302
|
+
from a fresh status read, are restricted to `account:*` providers, and carry an
|
|
303
|
+
idempotency key so a retry cannot burn two cards.
|
|
304
|
+
|
|
305
|
+
App updates (ADR-0028) reproduce the desktop app's own discovery half — the same
|
|
306
|
+
manifest endpoint, platform/channel spelling, and sha512 verification — but stop
|
|
307
|
+
short of privileged escalation. Whether the bundle can be swapped is probed at
|
|
308
|
+
install time with `accessSync(dirname(app), W_OK)` rather than assumed: a
|
|
309
|
+
writable location is replaced directly (old bundle renamed aside first, deleted
|
|
310
|
+
only after the new one is in place, so a failed install leaves the previous
|
|
311
|
+
version intact), and anything else is reported as `needs-user-install` with the
|
|
312
|
+
artifact path so the client can hand the user a one-step instruction. The
|
|
313
|
+
running app is never killed. No claim is made about which branch a given machine
|
|
314
|
+
takes — that is what the probe is for.
|
|
315
|
+
|
|
251
316
|
## Key State Machines
|
|
252
317
|
|
|
253
318
|
### Turn state
|
package/docs/REMOTE-CLIENTS.md
CHANGED
|
@@ -393,6 +393,291 @@ section — so clients can reproduce the CLI layout exactly:
|
|
|
393
393
|
later. Only transport-level failures reject the request.
|
|
394
394
|
- Cached ~10s server-side (same caches as the `/quota` command).
|
|
395
395
|
|
|
396
|
+
## Settings API
|
|
397
|
+
|
|
398
|
+
The machine's ZCode configuration, exposed as JSON so a native client can
|
|
399
|
+
render the management UI that the desktop app provides (ADR-0025). Plain HTTP,
|
|
400
|
+
no ACP connection needed. **User scope only** — `~/.zcode/`; project-level
|
|
401
|
+
(`<ws>/.zcode/`) configuration is not part of this contract yet.
|
|
402
|
+
|
|
403
|
+
Two mounts, identical routes and identical semantics:
|
|
404
|
+
|
|
405
|
+
- `{hub}/api/settings/*` — token-gated (`Authorization: Bearer …` or
|
|
406
|
+
`?token=…`), the only public entry.
|
|
407
|
+
- `http://127.0.0.1:{bridgePort}/settings/*` — the bridge's own loopback
|
|
408
|
+
server, **unauthenticated** like `/status` and `/fs`. Any local process can
|
|
409
|
+
already write these files, so the HTTP route grants no new capability. The
|
|
410
|
+
bind is `127.0.0.1` only.
|
|
411
|
+
- Per-instance proxying is available too:
|
|
412
|
+
`{hub}/api/instances/{id}/settings/*` relays to that bridge's loopback
|
|
413
|
+
mount (same body passthrough as session close/rename).
|
|
414
|
+
|
|
415
|
+
Every write answers with an **effect class** — read it before deciding whether
|
|
416
|
+
to prompt the user:
|
|
417
|
+
|
|
418
|
+
| `effect` | Meaning |
|
|
419
|
+
| --------------- | ----------------------------------------------------------------------- |
|
|
420
|
+
| `immediate` | Applied to the running backend within ~1s (provider table poll, skills) |
|
|
421
|
+
| `needs-restart` | Read once at agent start — needs a new backend process to take effect |
|
|
422
|
+
|
|
423
|
+
`needs-restart` applies to MCP servers, hooks, and subagent markdown. After
|
|
424
|
+
such a write, either prompt the user or call
|
|
425
|
+
`POST {hub}/api/instances/{id}/backend/restart`, which cancels in-flight turns
|
|
426
|
+
and respawns that bridge's backend (see below). `GET /api/settings/pending-restart`
|
|
427
|
+
reports whether this process has recorded any `needs-restart` write since it
|
|
428
|
+
started.
|
|
429
|
+
|
|
430
|
+
### Read endpoints
|
|
431
|
+
|
|
432
|
+
| Endpoint | Purpose |
|
|
433
|
+
| ---------------------------- | ------------------------------------------------------------------------ |
|
|
434
|
+
| `GET /settings/all` | One-shot snapshot of every section (first screen) |
|
|
435
|
+
| `GET /settings/models` | Selectable models, unioned across `config.json` + `provider_config.json` |
|
|
436
|
+
| `GET /settings/skills` | Discovered skills with their enabled state |
|
|
437
|
+
| `GET /settings/mcp` | Configured MCP servers (user config + enabled plugins) |
|
|
438
|
+
| `GET /settings/hooks` | The full hooks tree, 7 event names |
|
|
439
|
+
| `GET /settings/agents` | Subagents with enabled state and model override |
|
|
440
|
+
| `GET /settings/usage?range=` | `7d` \| `30d` \| `all` per-model token usage |
|
|
441
|
+
| `GET /settings/quota` | Same payload as `/api/quota` (account-level, hub only) |
|
|
442
|
+
| `GET /settings/reset-cards` | Coding-plan reset card status (`?providerId=` required) |
|
|
443
|
+
| `GET /settings/backups` | Config backups available for restore |
|
|
444
|
+
| `GET /settings/app-update` | ZCode desktop app version check (`?channel=stable\|preview`) |
|
|
445
|
+
|
|
446
|
+
`/settings/all` degrades per section: a failure to read the local config files
|
|
447
|
+
is a whole-request `500` (the environment is broken), while `usage` and
|
|
448
|
+
`resetCards` report their own state — no database and no credentials are normal,
|
|
449
|
+
not errors. `resetCards` in the snapshot carries **eligibility only**
|
|
450
|
+
(`providers` + whether the credential store decrypts); the cards themselves need
|
|
451
|
+
a `providerId` and a network read, so fetch them from
|
|
452
|
+
`GET /settings/reset-cards?providerId=…`.
|
|
453
|
+
|
|
454
|
+
### Write endpoints
|
|
455
|
+
|
|
456
|
+
| Endpoint | Effect | Purpose |
|
|
457
|
+
| ----------------------------------------- | --------------- | ------------------------------------------- |
|
|
458
|
+
| `PUT /settings/providers/{id}` | `immediate` | Enable/disable, rename |
|
|
459
|
+
| `POST /settings/models` | `immediate` | Add a model to an existing provider |
|
|
460
|
+
| `DELETE /settings/models/{pid}/{mid}` | `immediate` | Remove a model |
|
|
461
|
+
| `POST /settings/skills/enable` | `immediate` | `{path, enable}` |
|
|
462
|
+
| `DELETE /settings/skills/{path}` | `immediate` | Delete a skill directory |
|
|
463
|
+
| `POST /settings/skills/copy-to-user` | `immediate` | Copy a workspace skill to `~/.zcode/skills` |
|
|
464
|
+
| `PUT /settings/mcp/{name}` | `needs-restart` | Create or update an MCP server |
|
|
465
|
+
| `DELETE /settings/mcp/{name}` | `needs-restart` | Remove an MCP server |
|
|
466
|
+
| `POST /settings/mcp/enable` | `needs-restart` | `{name, enable}` |
|
|
467
|
+
| `PUT /settings/hooks/{event}/{index}` | `needs-restart` | Edit one existing hook entry |
|
|
468
|
+
| `POST /settings/hooks/enabled` | `needs-restart` | `{enabled}` — the whole hooks tree |
|
|
469
|
+
| `PUT /settings/agents/{id}` | `needs-restart` | Create or update a subagent |
|
|
470
|
+
| `DELETE /settings/agents/{id}` | `needs-restart` | Delete a subagent |
|
|
471
|
+
| `POST /settings/agents/{id}/enable` | `needs-restart` | `{enable}` |
|
|
472
|
+
| `POST /settings/reset-cards/use` | — | Consume a reset card (see below) |
|
|
473
|
+
| `POST /settings/reset-cards/opportunity` | — | Request an opportunity (see below) |
|
|
474
|
+
| `POST /settings/reset-cards/history-read` | — | Mark the reset history read |
|
|
475
|
+
| `POST /settings/backups/restore` | per file | Restore a backup |
|
|
476
|
+
| `POST /settings/app-update/install` | — | Download and stage a new app build |
|
|
477
|
+
|
|
478
|
+
Notes that clients must honor:
|
|
479
|
+
|
|
480
|
+
- **Methods include PUT and DELETE**, and the hub's CORS preflight allows all
|
|
481
|
+
four (`GET, POST, PUT, DELETE, OPTIONS`) — a browser-based client can issue
|
|
482
|
+
them without a plugin fetch shim.
|
|
483
|
+
- **Providers cannot be created or deleted** through this API — only enabled
|
|
484
|
+
state, display name, and the models inside an existing provider. Adding a
|
|
485
|
+
brand-new provider stays a desktop-app (or hand-edit) operation.
|
|
486
|
+
- **MCP writes are type-checked**: `type` / `url` / `command` must be strings,
|
|
487
|
+
`args` an array of strings, `env` / `headers` objects of strings, `enabled` a
|
|
488
|
+
boolean — anything else is a `400`. Unknown keys still pass through, but a
|
|
489
|
+
malformed known field is refused rather than persisted: the agent runtime
|
|
490
|
+
validates each server on its own and silently SKIPS the one that fails, so a
|
|
491
|
+
bad entry would make the server you just added vanish at the next start with
|
|
492
|
+
no error anywhere. `type` may be omitted — the runtime infers `stdio` from a
|
|
493
|
+
`command` and `http` from a `url`, and also accepts a legacy `remote`.
|
|
494
|
+
- **Hooks are read-complete but write-limited**: the tree is returned in full,
|
|
495
|
+
and writes may only modify an existing entry's `command` / `timeoutMs` /
|
|
496
|
+
`enabled`. Adding or removing events, matchers, or hook entries is not
|
|
497
|
+
supported. Unknown keys on a hook object are preserved verbatim.
|
|
498
|
+
- **Subagents**: `name`, `description`, `color`, `model`, `thoughtLevel` are
|
|
499
|
+
editable; the system-prompt body is not. Built-in agents (`general-purpose`,
|
|
500
|
+
`Explore`) cannot be edited or deleted — only their model override can change.
|
|
501
|
+
Send `{"providerId": null, "modelId": null}` on a built-in agent to CLEAR its
|
|
502
|
+
override and return it to the workspace default.
|
|
503
|
+
- **Reset cards are irreversible.** `POST /settings/reset-cards/use` requires
|
|
504
|
+
the `nonce` returned by `GET /settings/reset-cards`, is restricted to
|
|
505
|
+
`account:*` providers (`403` otherwise), and carries an idempotency key so a
|
|
506
|
+
retry cannot burn two cards. `credentials_unavailable` means the machine's
|
|
507
|
+
encrypted credential store could not be decrypted.
|
|
508
|
+
- Every write is a locked read-modify-write of the real file: unknown keys are
|
|
509
|
+
preserved, a backup is taken first, and a write that fails self-validation
|
|
510
|
+
never lands. Concurrent writers are serialized by ZCode's own cross-process
|
|
511
|
+
lock, so the last write wins and no change is silently dropped.
|
|
512
|
+
|
|
513
|
+
### Restarting the backend
|
|
514
|
+
|
|
515
|
+
```text
|
|
516
|
+
POST {hub}/api/instances/{id}/backend/restart → 200 { "ok": true, "cancelledTurns": 2 }
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
Cancels that bridge's in-flight turns, kills its `zcode app-server` child, and
|
|
520
|
+
lets the next prompt respawn it — the same path the sandbox arm-flip uses.
|
|
521
|
+
`cancelledTurns` is how many conversations were interrupted; surface it before
|
|
522
|
+
the user commits to the action. The response also carries `closed`: `false`
|
|
523
|
+
means the old child refused to die, the pending flag stays armed (the writes
|
|
524
|
+
were NOT applied), and the restart is worth retrying.
|
|
525
|
+
|
|
526
|
+
`GET /api/instances/{id}/settings/pending-restart` reports whether that bridge
|
|
527
|
+
process has recorded any `needs-restart` write since it last restarted its
|
|
528
|
+
backend, so a client can ask "is a restart needed?" on a fresh screen instead of
|
|
529
|
+
tracking it itself. The flag is cleared by a successful backend restart.
|
|
530
|
+
|
|
531
|
+
Use the **per-instance** spelling, not the hub-local
|
|
532
|
+
`GET /api/settings/pending-restart`: the counter lives in the bridge that served
|
|
533
|
+
the write, and the hub has no backend of its own to restart, so its copy can
|
|
534
|
+
never be cleared. The hub-local route therefore answers `409` with a pointer to
|
|
535
|
+
the per-instance spelling rather than a `pendingRestart` boolean — reporting
|
|
536
|
+
`true` would strand a client on "restart needed" with no request able to clear
|
|
537
|
+
it, and reporting `false` would be a claim it cannot verify.
|
|
538
|
+
|
|
539
|
+
### Reset cards (coding-plan quota)
|
|
540
|
+
|
|
541
|
+
Three calls, in this order:
|
|
542
|
+
|
|
543
|
+
```text
|
|
544
|
+
GET /settings/reset-cards?providerId=account:bigmodel-individual-coding-plan
|
|
545
|
+
POST /settings/reset-cards/use { providerId, resetType, nonce, idempotencyKey }
|
|
546
|
+
POST /settings/reset-cards/history-read { providerId }
|
|
547
|
+
```
|
|
548
|
+
|
|
549
|
+
```json
|
|
550
|
+
→ { "ok": true, "resetCards": {
|
|
551
|
+
"availableFiveHour": [{ "expireAt": 1790000000000 }],
|
|
552
|
+
"availableWeek": [],
|
|
553
|
+
"latestFiveHour": { "usedAt": 1789000000000 },
|
|
554
|
+
"latestWeek": null,
|
|
555
|
+
"hasUnreadHistory": true,
|
|
556
|
+
"nonce": "3f6c…" } }
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
- `resetType` is `FIVE_HOUR` or `WEEK`.
|
|
560
|
+
- The `nonce` is issued per status read. Sending one that was never issued (or
|
|
561
|
+
that a newer status read replaced) answers `409` — refresh the status and
|
|
562
|
+
retry. This is what stops a screen the user left open an hour ago from
|
|
563
|
+
spending a card they have since seen change.
|
|
564
|
+
- The nonce is burned only **after** the spend settles, never before it. A spend
|
|
565
|
+
that reached the server and failed on the way back (timeout, dropped
|
|
566
|
+
response, upstream error) leaves the nonce valid, so the retry is judged by
|
|
567
|
+
the backend and its idempotency key — not rejected out of hand with a `409`
|
|
568
|
+
the user cannot act on.
|
|
569
|
+
- A spend already in flight for the same provider is refused with `409` ("a
|
|
570
|
+
reset for this provider is already in progress"). The deferred burn is safe
|
|
571
|
+
for a RETRY of the same gesture — same key, so the backend answers with the
|
|
572
|
+
outcome it already recorded — but a second INDEPENDENT gesture (a double tap,
|
|
573
|
+
another client that read the same status) brings its own key, and nothing
|
|
574
|
+
upstream could stop it burning a second card. Serialize the UI on the busy
|
|
575
|
+
state the client already tracks.
|
|
576
|
+
- The `idempotencyKey` is what makes a retry safe: the same key always answers
|
|
577
|
+
the same outcome, so a dropped response cannot burn a second card. Generate
|
|
578
|
+
it once per user gesture and reuse it on retry — a FRESH key per attempt is
|
|
579
|
+
exactly what defeats it.
|
|
580
|
+
- Status codes carry the retry advice. A `409` is a nonce problem (refresh). A
|
|
581
|
+
`502`/`504` means the reset API was unreachable or failed — the card may have
|
|
582
|
+
been spent, so retry with the same key rather than assuming the write failed.
|
|
583
|
+
A `400` is a request the server rejected outright.
|
|
584
|
+
- A denial is `{ok: true, granted: false, nextTryAt: <ms>}` — a countdown to
|
|
585
|
+
render, not an error.
|
|
586
|
+
- `credentials_unavailable` means the machine's encrypted credential store
|
|
587
|
+
could not be decrypted (missing file, wrong `ZCODE_CREDENTIAL_SECRET`, or a
|
|
588
|
+
different machine's store).
|
|
589
|
+
- Known limit: a **team** plan needs organization/project scope headers whose
|
|
590
|
+
ids are not in the credential store a headless process can read, so team-plan
|
|
591
|
+
resets answer a backend error. Personal plans work.
|
|
592
|
+
|
|
593
|
+
### Usage payload
|
|
594
|
+
|
|
595
|
+
```json
|
|
596
|
+
{
|
|
597
|
+
"available": true,
|
|
598
|
+
"range": "7d",
|
|
599
|
+
"summary": { "totalTokens": 1587917357, "requestCount": 20630, "models": 7 },
|
|
600
|
+
"models": [
|
|
601
|
+
{
|
|
602
|
+
"modelId": "GLM-5.3",
|
|
603
|
+
"totalTokens": 1587917357,
|
|
604
|
+
"inputTokens": 0,
|
|
605
|
+
"outputTokens": 0,
|
|
606
|
+
"reasoningTokens": 0,
|
|
607
|
+
"cacheReadTokens": 0,
|
|
608
|
+
"requestCount": 11419,
|
|
609
|
+
"share": 0.53
|
|
610
|
+
}
|
|
611
|
+
],
|
|
612
|
+
"daily": [{ "date": "2026-09-22", "models": [{ "modelId": "GLM-5.3", "totalTokens": 100 }] }]
|
|
613
|
+
}
|
|
614
|
+
```
|
|
615
|
+
|
|
616
|
+
`available: false` with zero values means the local agent database does not
|
|
617
|
+
exist on this machine (never ran an agent) — render an empty state, not an
|
|
618
|
+
error. Tool statistics and the activity heatmap are not in the first version.
|
|
619
|
+
|
|
620
|
+
### Updating the ZCode desktop app
|
|
621
|
+
|
|
622
|
+
The bridge checks the official release feed and stages the verified download, so
|
|
623
|
+
a client can offer "update available" without the user opening the app.
|
|
624
|
+
|
|
625
|
+
```text
|
|
626
|
+
GET /settings/app-update?channel=stable
|
|
627
|
+
POST /settings/app-update/install { version, url, channel? }
|
|
628
|
+
```
|
|
629
|
+
|
|
630
|
+
```json
|
|
631
|
+
→ { "ok": true, "appUpdate": {
|
|
632
|
+
"updateAvailable": true,
|
|
633
|
+
"currentVersion": "3.14.1",
|
|
634
|
+
"latestVersion": "3.14.3",
|
|
635
|
+
"channel": "preview",
|
|
636
|
+
"platform": "darwin-aarch64",
|
|
637
|
+
"appPath": "/Applications/ZCode.app",
|
|
638
|
+
"releaseName": "Release v3.14.3",
|
|
639
|
+
"releaseNotes": "## 新功能\n…",
|
|
640
|
+
"files": [{ "url": "https://cdn-zcode.z.ai/…/ZCode-3.14.3-mac-arm64.zip", "sha512": "…" }],
|
|
641
|
+
"install": { "stage": "idle", "version": null, "receivedBytes": 0, "totalBytes": null } } }
|
|
642
|
+
```
|
|
643
|
+
|
|
644
|
+
- `channel` is `stable` (default) or `preview`. The preview channel is the app's
|
|
645
|
+
own opt-in setting; do not switch a user into it silently.
|
|
646
|
+
- `updateAvailable: false` with `currentVersion: null` means **no ZCode app is
|
|
647
|
+
installed on this machine** — hide the row, do not show an error.
|
|
648
|
+
- Pass `version` and `url` from the same `GET` response you just read. The bridge
|
|
649
|
+
then **re-reads the manifest itself** and refuses (`409`) unless that exact URL
|
|
650
|
+
is a current manifest entry with a checksum, and `version` is what the channel
|
|
651
|
+
is actually serving — so a client cannot ask for an old build (a silent
|
|
652
|
+
downgrade) or skip verification. A `sha512` in the request body is ignored for
|
|
653
|
+
the same reason: the manifest's checksum is the one that counts.
|
|
654
|
+
- Only `https://cdn-zcode.z.ai/…` URLs are accepted (`400` otherwise).
|
|
655
|
+
- The install answers `202 Accepted` immediately and runs in the background;
|
|
656
|
+
poll `GET /settings/app-update` (its `install` field) for progress. A second
|
|
657
|
+
install while one is running answers `409`.
|
|
658
|
+
|
|
659
|
+
`install.stage` is the outcome, and clients must render each one differently:
|
|
660
|
+
|
|
661
|
+
| `stage` | Meaning and what to show |
|
|
662
|
+
| -------------------- | ----------------------------------------------------------------------------- |
|
|
663
|
+
| `downloading` | `receivedBytes` / `totalBytes` progress |
|
|
664
|
+
| `installing` | Verified, swapping the bundle |
|
|
665
|
+
| `done` | Installed. `restartRequired: true` — ask the user to quit and reopen the app |
|
|
666
|
+
| `needs-user-install` | `artifactPath` holds the verified bundle; the install location needs the user |
|
|
667
|
+
| `failed` | `error` carries the reason |
|
|
668
|
+
|
|
669
|
+
**`needs-user-install` is an outcome, not a failure.** The bridge probes whether
|
|
670
|
+
the install location is writable and swaps the bundle only when it is. When it
|
|
671
|
+
is not, the download and checksum still ran, so the verified bundle is left at
|
|
672
|
+
`artifactPath` and the user finishes the job: show the path (or reveal it in
|
|
673
|
+
Finder), and they drag `ZCode.app` over the old one — macOS raises a one-shot
|
|
674
|
+
confirmation for that replacement. Reporting `done` here would be a lie the user
|
|
675
|
+
discovers on relaunch.
|
|
676
|
+
|
|
677
|
+
An app installed in a writable location is replaced directly and answers `done`.
|
|
678
|
+
The old bundle is only deleted after the new one is in place, so a failed install
|
|
679
|
+
leaves the previous version intact.
|
|
680
|
+
|
|
396
681
|
## Session running status
|
|
397
682
|
|
|
398
683
|
Two layers (ADR-0005), both plain HTTP — no ACP connection needed:
|