zcode-acp-server 0.1.0 → 0.3.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 +192 -9
- package/README.zh-CN.md +143 -8
- package/dist/backend/client.d.ts +12 -4
- package/dist/backend/client.d.ts.map +1 -1
- package/dist/backend/client.js +72 -7
- package/dist/backend/client.js.map +1 -1
- package/dist/backend/credentials.d.ts.map +1 -1
- package/dist/backend/credentials.js +2 -1
- package/dist/backend/credentials.js.map +1 -1
- package/dist/backend/listener.d.ts +12 -4
- package/dist/backend/listener.d.ts.map +1 -1
- package/dist/backend/listener.js +68 -12
- package/dist/backend/listener.js.map +1 -1
- package/dist/backend/types.d.ts +1 -1
- package/dist/backend/types.d.ts.map +1 -1
- package/dist/bin/hub.d.ts +16 -0
- package/dist/bin/hub.d.ts.map +1 -0
- package/dist/bin/hub.js +41 -0
- package/dist/bin/hub.js.map +1 -0
- package/dist/bin/quota.d.ts +54 -0
- package/dist/bin/quota.d.ts.map +1 -0
- package/dist/bin/quota.js +333 -0
- package/dist/bin/quota.js.map +1 -0
- package/dist/config/auto-compact.d.ts +23 -0
- package/dist/config/auto-compact.d.ts.map +1 -0
- package/dist/config/auto-compact.js +67 -0
- package/dist/config/auto-compact.js.map +1 -0
- package/dist/config/mcp-discovery.d.ts +34 -0
- package/dist/config/mcp-discovery.d.ts.map +1 -0
- package/dist/config/mcp-discovery.js +153 -0
- package/dist/config/mcp-discovery.js.map +1 -0
- package/dist/config/model-cache.d.ts +12 -1
- package/dist/config/model-cache.d.ts.map +1 -1
- package/dist/config/model-cache.js +30 -8
- package/dist/config/model-cache.js.map +1 -1
- package/dist/config/options.d.ts +87 -9
- package/dist/config/options.d.ts.map +1 -1
- package/dist/config/options.js +248 -45
- package/dist/config/options.js.map +1 -1
- package/dist/config/plugin-commands.d.ts +24 -0
- package/dist/config/plugin-commands.d.ts.map +1 -0
- package/dist/config/plugin-commands.js +107 -0
- package/dist/config/plugin-commands.js.map +1 -0
- package/dist/config/provider-registry.d.ts +60 -0
- package/dist/config/provider-registry.d.ts.map +1 -0
- package/dist/config/provider-registry.js +128 -0
- package/dist/config/provider-registry.js.map +1 -0
- package/dist/config/runtime-model.d.ts +54 -18
- package/dist/config/runtime-model.d.ts.map +1 -1
- package/dist/config/runtime-model.js +105 -61
- package/dist/config/runtime-model.js.map +1 -1
- package/dist/config/skill-discovery.d.ts +35 -0
- package/dist/config/skill-discovery.d.ts.map +1 -0
- package/dist/config/skill-discovery.js +188 -0
- package/dist/config/skill-discovery.js.map +1 -0
- package/dist/handlers/account.d.ts +43 -0
- package/dist/handlers/account.d.ts.map +1 -0
- package/dist/handlers/account.js +59 -0
- package/dist/handlers/account.js.map +1 -0
- package/dist/handlers/background-tasks.d.ts +72 -0
- package/dist/handlers/background-tasks.d.ts.map +1 -0
- package/dist/handlers/background-tasks.js +330 -0
- package/dist/handlers/background-tasks.js.map +1 -0
- package/dist/handlers/dispatch.d.ts.map +1 -1
- package/dist/handlers/dispatch.js +134 -22
- package/dist/handlers/dispatch.js.map +1 -1
- package/dist/handlers/extensions.d.ts +15 -0
- package/dist/handlers/extensions.d.ts.map +1 -1
- package/dist/handlers/extensions.js +43 -27
- package/dist/handlers/extensions.js.map +1 -1
- package/dist/handlers/io.d.ts +31 -3
- package/dist/handlers/io.d.ts.map +1 -1
- package/dist/handlers/io.js +108 -9
- package/dist/handlers/io.js.map +1 -1
- package/dist/handlers/replay.d.ts +79 -0
- package/dist/handlers/replay.d.ts.map +1 -0
- package/dist/handlers/replay.js +252 -0
- package/dist/handlers/replay.js.map +1 -0
- package/dist/handlers/server-requests.d.ts +20 -4
- package/dist/handlers/server-requests.d.ts.map +1 -1
- package/dist/handlers/server-requests.js +293 -63
- package/dist/handlers/server-requests.js.map +1 -1
- package/dist/handlers/session.d.ts +113 -10
- package/dist/handlers/session.d.ts.map +1 -1
- package/dist/handlers/session.js +932 -277
- package/dist/handlers/session.js.map +1 -1
- package/dist/handlers/slash.d.ts +37 -1
- package/dist/handlers/slash.d.ts.map +1 -1
- package/dist/handlers/slash.js +143 -8
- package/dist/handlers/slash.js.map +1 -1
- package/dist/index.js +76 -12
- package/dist/index.js.map +1 -1
- package/dist/interaction/adapter.d.ts +19 -33
- package/dist/interaction/adapter.d.ts.map +1 -1
- package/dist/interaction/adapter.js +80 -79
- package/dist/interaction/adapter.js.map +1 -1
- package/dist/lazy-sessions.d.ts +35 -0
- package/dist/lazy-sessions.d.ts.map +1 -0
- package/dist/lazy-sessions.js +98 -0
- package/dist/lazy-sessions.js.map +1 -0
- package/dist/quota/cache.d.ts +18 -0
- package/dist/quota/cache.d.ts.map +1 -0
- package/dist/quota/cache.js +32 -0
- package/dist/quota/cache.js.map +1 -0
- package/dist/quota/client.d.ts +30 -0
- package/dist/quota/client.d.ts.map +1 -0
- package/dist/quota/client.js +57 -0
- package/dist/quota/client.js.map +1 -0
- package/dist/quota/color.d.ts +58 -0
- package/dist/quota/color.d.ts.map +1 -0
- package/dist/quota/color.js +95 -0
- package/dist/quota/color.js.map +1 -0
- package/dist/quota/combined.d.ts +66 -0
- package/dist/quota/combined.d.ts.map +1 -0
- package/dist/quota/combined.js +179 -0
- package/dist/quota/combined.js.map +1 -0
- package/dist/quota/format.d.ts +105 -0
- package/dist/quota/format.d.ts.map +1 -0
- package/dist/quota/format.js +219 -0
- package/dist/quota/format.js.map +1 -0
- package/dist/quota/index.d.ts +23 -0
- package/dist/quota/index.d.ts.map +1 -0
- package/dist/quota/index.js +42 -0
- package/dist/quota/index.js.map +1 -0
- package/dist/quota/opencode-go/cache.d.ts +17 -0
- package/dist/quota/opencode-go/cache.d.ts.map +1 -0
- package/dist/quota/opencode-go/cache.js +31 -0
- package/dist/quota/opencode-go/cache.js.map +1 -0
- package/dist/quota/opencode-go/client.d.ts +28 -0
- package/dist/quota/opencode-go/client.d.ts.map +1 -0
- package/dist/quota/opencode-go/client.js +48 -0
- package/dist/quota/opencode-go/client.js.map +1 -0
- package/dist/quota/opencode-go/config.d.ts +37 -0
- package/dist/quota/opencode-go/config.d.ts.map +1 -0
- package/dist/quota/opencode-go/config.js +58 -0
- package/dist/quota/opencode-go/config.js.map +1 -0
- package/dist/quota/opencode-go/format.d.ts +36 -0
- package/dist/quota/opencode-go/format.d.ts.map +1 -0
- package/dist/quota/opencode-go/format.js +87 -0
- package/dist/quota/opencode-go/format.js.map +1 -0
- package/dist/quota/opencode-go/index.d.ts +30 -0
- package/dist/quota/opencode-go/index.d.ts.map +1 -0
- package/dist/quota/opencode-go/index.js +108 -0
- package/dist/quota/opencode-go/index.js.map +1 -0
- package/dist/quota/opencode-go/parse.d.ts +41 -0
- package/dist/quota/opencode-go/parse.d.ts.map +1 -0
- package/dist/quota/opencode-go/parse.js +75 -0
- package/dist/quota/opencode-go/parse.js.map +1 -0
- package/dist/quota/opencode-go/types.d.ts +48 -0
- package/dist/quota/opencode-go/types.d.ts.map +1 -0
- package/dist/quota/opencode-go/types.js +11 -0
- package/dist/quota/opencode-go/types.js.map +1 -0
- package/dist/quota/parse.d.ts +33 -0
- package/dist/quota/parse.d.ts.map +1 -0
- package/dist/quota/parse.js +200 -0
- package/dist/quota/parse.js.map +1 -0
- package/dist/quota/types.d.ts +72 -0
- package/dist/quota/types.d.ts.map +1 -0
- package/dist/quota/types.js +10 -0
- package/dist/quota/types.js.map +1 -0
- package/dist/remote/broadcast.d.ts +47 -0
- package/dist/remote/broadcast.d.ts.map +1 -0
- package/dist/remote/broadcast.js +121 -0
- package/dist/remote/broadcast.js.map +1 -0
- package/dist/remote/config.d.ts +32 -0
- package/dist/remote/config.d.ts.map +1 -0
- package/dist/remote/config.js +65 -0
- package/dist/remote/config.js.map +1 -0
- package/dist/remote/endpoint.d.ts +30 -0
- package/dist/remote/endpoint.d.ts.map +1 -0
- package/dist/remote/endpoint.js +213 -0
- package/dist/remote/endpoint.js.map +1 -0
- package/dist/remote/hub-server.d.ts +41 -0
- package/dist/remote/hub-server.d.ts.map +1 -0
- package/dist/remote/hub-server.js +346 -0
- package/dist/remote/hub-server.js.map +1 -0
- package/dist/server.d.ts +139 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +179 -4
- package/dist/server.js.map +1 -1
- package/dist/tasks-index.d.ts +14 -4
- package/dist/tasks-index.d.ts.map +1 -1
- package/dist/tasks-index.js +145 -46
- package/dist/tasks-index.js.map +1 -1
- package/dist/translators/event-translator.d.ts +33 -0
- package/dist/translators/event-translator.d.ts.map +1 -1
- package/dist/translators/event-translator.js +101 -0
- package/dist/translators/event-translator.js.map +1 -1
- package/dist/translators/index.d.ts +1 -1
- package/dist/translators/index.d.ts.map +1 -1
- package/dist/translators/index.js +1 -1
- package/dist/translators/index.js.map +1 -1
- package/dist/translators/projection-differ.d.ts +8 -0
- package/dist/translators/projection-differ.d.ts.map +1 -1
- package/dist/translators/projection-differ.js +19 -9
- package/dist/translators/projection-differ.js.map +1 -1
- package/dist/translators/tool-helpers.d.ts +28 -0
- package/dist/translators/tool-helpers.d.ts.map +1 -1
- package/dist/translators/tool-helpers.js +104 -0
- package/dist/translators/tool-helpers.js.map +1 -1
- package/dist/translators/types.d.ts +38 -1
- package/dist/translators/types.d.ts.map +1 -1
- package/dist/translators/types.js.map +1 -1
- package/dist/utils.d.ts +36 -7
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +69 -5
- package/dist/utils.js.map +1 -1
- package/docs/ARCHITECTURE.md +130 -40
- package/docs/BACKLOG.md +59 -0
- package/docs/DEVELOPMENT.md +31 -0
- package/docs/PROTOCOL.md +328 -23
- package/docs/REMOTE-CLIENTS.md +260 -0
- package/docs/REPLAY-GUIDE.md +131 -0
- package/docs/TROUBLESHOOTING.md +131 -14
- package/docs/adr/0001-bridge-lifetime-follows-primary-client.md +14 -0
- package/docs/adr/0002-stateless-hub-over-per-bridge-acp-endpoints.md +23 -0
- package/docs/adr/0003-tail-replay-meta-and-cursor-pagination.md +40 -0
- package/docs/agents/domain.md +51 -0
- package/docs/agents/issue-tracker.md +22 -0
- package/docs/agents/triage-labels.md +15 -0
- package/docs/proposals/0001-tail-session-replay.md +136 -0
- package/docs/proposals/0002-plan-quota-usage.md +81 -0
- package/package.json +10 -6
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# zcode-acp-server
|
|
2
2
|
|
|
3
|
-
[](https://github.com/william0wang/zcode-acp/actions/workflows/ci.yml)
|
|
4
4
|
[](LICENSE)
|
|
5
5
|
|
|
6
6
|
English | **[简体中文](README.zh-CN.md)**
|
|
@@ -11,7 +11,9 @@ The server launches the ZCode headless app-server (`zcode app-server --stdio`) a
|
|
|
11
11
|
|
|
12
12
|
## Status
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
In active development. Core bridging, slash commands and ZCode extensions,
|
|
15
|
+
auto-compaction, remote access for mobile/web clients, and the quota APIs are
|
|
16
|
+
in place; see the project board for what's next.
|
|
15
17
|
|
|
16
18
|
## Requirements
|
|
17
19
|
|
|
@@ -79,13 +81,173 @@ automatically. Point `ZCODE_BIN` at the bundled `zcode.cjs`:
|
|
|
79
81
|
|
|
80
82
|
## Environment variables
|
|
81
83
|
|
|
82
|
-
| Variable
|
|
83
|
-
|
|
|
84
|
-
| `ZCODE_BIN`
|
|
85
|
-
| `ZCODE_NODE`
|
|
86
|
-
| `ZCODE_MODEL`
|
|
87
|
-
| `ZCODE_BASE_URL`
|
|
88
|
-
| `
|
|
84
|
+
| Variable | Default | Purpose |
|
|
85
|
+
| ---------------------------------- | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
86
|
+
| `ZCODE_BIN` | `zcode` | Path to the ZCode CLI binary or its `.cjs` entry |
|
|
87
|
+
| `ZCODE_NODE` | _(discovered)_ | Explicit Node binary to run `ZCODE_BIN` with (must support `node:sqlite`) |
|
|
88
|
+
| `ZCODE_MODEL` | _(from config)_ | Override the active model id |
|
|
89
|
+
| `ZCODE_BASE_URL` | _(from config)_ | Override the provider base URL |
|
|
90
|
+
| `ZCODE_ACP_AUTO_COMPACT_THRESHOLD` | _(unset)_ | Absolute token count that triggers automatic context compaction. After each successful turn (`end_turn`), if `contextUsed >= threshold`, the server invokes `session/compact` to free up context before the next prompt. Set to `0` or leave unset to disable (default). Example: `240000` triggers compaction at 240K tokens. The compaction target itself is decided by the ZCode backend. |
|
|
91
|
+
| `ZCODE_ACP_DEBUG` | _(unset)_ | Set to `1` to enable verbose diagnostic logs (event flow, probe loops, status updates). Default is quiet — only warnings (backend pipe errors, command/permission failures, lock timeouts) are emitted. Enable this when diagnosing bridge issues; the logs appear in `Zed.log` prefixed with `[zcode-acp]`. |
|
|
92
|
+
| `ZCODE_ACP_REMOTE` | _(unset)_ | Set to `1` to enable [remote access](#remote-access) — serve the same sessions to additional ACP clients over WebSocket. |
|
|
93
|
+
| `ZCODE_ACP_REMOTE_TOKEN` | _(unset)_ | Auth token for remote access. **Mandatory** when `ZCODE_ACP_REMOTE=1`; remote stays disabled without it. |
|
|
94
|
+
| `ZCODE_ACP_HUB_PORT` | `8377` | Port of the machine-level `zcode-acp-hub`. Map exactly this one port in your tunnel. |
|
|
95
|
+
| `ZCODE_ACP_HUB_HOST` | `127.0.0.1` | Hub bind address. `0.0.0.0` exposes a token-only, unencrypted surface — only for a containerized tunnel agent on a private interface (see [Remote Access](#remote-access)). |
|
|
96
|
+
| `ZCODE_ACP_REMOTE_PORT` | `8378` | First loopback port for the bridge's ACP endpoint. Each bridge (each editor window) auto-increments to the next free port. |
|
|
97
|
+
|
|
98
|
+
## Remote Access
|
|
99
|
+
|
|
100
|
+
With `ZCODE_ACP_REMOTE=1` the bridge additionally accepts ACP connections over
|
|
101
|
+
WebSocket, so a phone or browser can watch and drive the **same sessions** as
|
|
102
|
+
your editor. Zed (or any ACP editor over stdio) remains the primary client and
|
|
103
|
+
owns the process: when the editor disconnects, the bridge — and every remote
|
|
104
|
+
attachment — exits with it.
|
|
105
|
+
|
|
106
|
+
```text
|
|
107
|
+
phone / browser ──WS── tunnel ── hub (127.0.0.1:8377, single entry)
|
|
108
|
+
│ byte-level proxy
|
|
109
|
+
▼
|
|
110
|
+
bridge ACP endpoint (127.0.0.1:8378+n)
|
|
111
|
+
│ same AgentApp as stdio
|
|
112
|
+
Zed ──────── stdio ────────────────┘
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Enable it per-agent in Zed's settings (Zed merges these into the agent's
|
|
116
|
+
environment):
|
|
117
|
+
|
|
118
|
+
```json
|
|
119
|
+
"agents": {
|
|
120
|
+
"ZCode": {
|
|
121
|
+
"command": "zcode-acp-server",
|
|
122
|
+
"env": {
|
|
123
|
+
"ZCODE_ACP_REMOTE": "1",
|
|
124
|
+
"ZCODE_ACP_REMOTE_TOKEN": "<a-long-random-secret>"
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Hub.** The first bridge with remote enabled spawns `zcode-acp-hub` as a
|
|
131
|
+
detached, machine-level singleton on `ZCODE_ACP_HUB_PORT` (it can also be run
|
|
132
|
+
manually). It does three things only: token auth, instance discovery, and
|
|
133
|
+
byte-level WebSocket proxying — no session state, no ACP semantics. It exits
|
|
134
|
+
after ~10 idle minutes and is re-spawned on demand. Each bridge registers
|
|
135
|
+
every 10s as a heartbeat and drops out of discovery ~30s after it stops.
|
|
136
|
+
|
|
137
|
+
**Discovery API** (for client authors; fields are additive-only):
|
|
138
|
+
|
|
139
|
+
```text
|
|
140
|
+
GET /api/instances → [{"id","port","pid","startedAt","workspace",
|
|
141
|
+
"sessions":[{"sessionId","title?","updatedAt"}]}]
|
|
142
|
+
GET /api/instances?probe=1 → same list, but unreachable bridges are pruned first
|
|
143
|
+
WS /acp?instance=<id> → proxied to that bridge's endpoint
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Auth is `Authorization: Bearer <token>` or `?token=` (browsers cannot set WS
|
|
147
|
+
headers); `/api/*` sends `Access-Control-Allow-Origin: *` — the token is the
|
|
148
|
+
security boundary. A proxied connection stays bound to one instance; switching
|
|
149
|
+
instances means reconnecting. Remote clients can also pull plan quota via the
|
|
150
|
+
non-standard `account/usage_stats` ACP method (no session required).
|
|
151
|
+
|
|
152
|
+
Building a remote client — web, mobile, or CLI? The full integration contract
|
|
153
|
+
(endpoints, framing, lifecycle timings, failure recovery, platform notes)
|
|
154
|
+
lives in [docs/REMOTE-CLIENTS.md](docs/REMOTE-CLIENTS.md).
|
|
155
|
+
|
|
156
|
+
**Semantics.** All agent notifications are broadcast to every client.
|
|
157
|
+
Permission / elicitation requests go to every client and the **first answer
|
|
158
|
+
wins**; losing clients receive `$/cancel_request` so their dialogs close.
|
|
159
|
+
Concurrent prompts for one session are serialized exactly as they are for a
|
|
160
|
+
single editor. Capabilities declared by any client are OR-merged.
|
|
161
|
+
|
|
162
|
+
**Tunnels.** Designed for one-port tunnels (Cloudflare Tunnel, frp): map the
|
|
163
|
+
hub port only. frp's `tcp` mode passes WebSocket as-is; Cloudflare Tunnel
|
|
164
|
+
drops idle WebSocket connections, so the hub sends 30s keepalive pings on both
|
|
165
|
+
legs. The bridge endpoint itself is loopback-only and never exposed.
|
|
166
|
+
|
|
167
|
+
**Binding beyond loopback.** The hub speaks plain HTTP/WS — the token travels
|
|
168
|
+
and authorizes in cleartext, so `ZCODE_ACP_HUB_HOST=0.0.0.0` (needed only when
|
|
169
|
+
the tunnel agent runs in its own container) is exactly as safe as the network
|
|
170
|
+
it lands on. Keep the bind loopback unless that interface is private to the
|
|
171
|
+
tunnel agent, and put TLS in front before mapping it anywhere untrusted.
|
|
172
|
+
|
|
173
|
+
## Standalone Quota CLI
|
|
174
|
+
|
|
175
|
+
Besides the ACP server, the package ships a `zcode-quota` bin that queries
|
|
176
|
+
your usage **from the terminal** — no editor or running server needed. By
|
|
177
|
+
default it shows both **GLM Coding Plan** and **Opencode Go** in one card;
|
|
178
|
+
pass a provider to focus on one.
|
|
179
|
+
|
|
180
|
+
GLM credentials are read from `~/.zcode/v2/config.json`. Opencode Go
|
|
181
|
+
credentials come from environment variables (the dashboard needs a browser
|
|
182
|
+
cookie — see [Opencode Go setup](#opencode-go-setup) below).
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
# Both providers (default): GLM + Opencode Go in one card
|
|
186
|
+
zcode-quota
|
|
187
|
+
|
|
188
|
+
# Focus on one provider
|
|
189
|
+
zcode-quota glm # GLM Coding Plan only
|
|
190
|
+
zcode-quota go # Opencode Go only (rolling + weekly + monthly)
|
|
191
|
+
|
|
192
|
+
# Live monitor: clear the screen and refresh every 30s (default)
|
|
193
|
+
zcode-quota -w
|
|
194
|
+
zcode-quota go -w # watch Opencode Go only
|
|
195
|
+
|
|
196
|
+
# Refresh at a custom interval (seconds; minimum 10)
|
|
197
|
+
zcode-quota --watch --interval 60
|
|
198
|
+
|
|
199
|
+
# Plain monochrome bars (color is the default on a terminal)
|
|
200
|
+
zcode-quota --plain
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
By default the CLI renders heat-colored (green→yellow→red) progress bars with
|
|
204
|
+
the usage numbers overlaid inside the bar, so each line stays short. Pass
|
|
205
|
+
`--plain` (or `-p`) for the classic monochrome `█`/`░` layout. Color is also
|
|
206
|
+
disabled automatically when stdout is piped or redirected, so captured output
|
|
207
|
+
stays clean.
|
|
208
|
+
|
|
209
|
+
The watch mode clears and redraws the card in place, like `top`/`htop`. Press
|
|
210
|
+
`Ctrl-C` to exit. The 10s minimum exists because the quota API is cached for
|
|
211
|
+
10s internally — a shorter interval would just keep returning the stale cached
|
|
212
|
+
value.
|
|
213
|
+
|
|
214
|
+
When the package isn't globally installed, run the built file directly:
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
node dist/bin/quota.js -w
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Opencode Go setup
|
|
221
|
+
|
|
222
|
+
Opencode Go has no JSON API for subscription usage — the CLI scrapes the
|
|
223
|
+
authenticated dashboard at `opencode.ai/workspace/<id>/go`, so it needs your
|
|
224
|
+
browser `auth` cookie. Credentials are read from two sources, **merged
|
|
225
|
+
field-by-field with environment variables taking precedence** over the config
|
|
226
|
+
file:
|
|
227
|
+
|
|
228
|
+
- **Config file**: `~/.pi/agent/opencode-go.json` — same convention as the
|
|
229
|
+
`@beyona/pi-zai-usage` Pi extension, so if you already configured it there
|
|
230
|
+
you're done.
|
|
231
|
+
```json
|
|
232
|
+
{ "workspaceId": "wrk_your_workspace_id", "authCookie": "Fe26.2**your_cookie_value" }
|
|
233
|
+
```
|
|
234
|
+
- **Environment variables** (override the matching file field):
|
|
235
|
+
```bash
|
|
236
|
+
export OPENCODE_GO_WORKSPACE_ID="wrk_your_workspace_id"
|
|
237
|
+
export OPENCODE_GO_AUTH_COOKIE="Fe26.2**your_cookie_value"
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
How to get the values:
|
|
241
|
+
|
|
242
|
+
1. **Workspace ID** — open `https://opencode.ai`, navigate to your Go
|
|
243
|
+
workspace, and copy the `wrk_…` id from the URL
|
|
244
|
+
(`https://opencode.ai/workspace/<wrk_…>/go`).
|
|
245
|
+
2. **Auth cookie** — open browser DevTools (F12) → Application → Cookies →
|
|
246
|
+
`opencode.ai` → copy the value of the cookie named `auth` (it starts with
|
|
247
|
+
`Fe26.2**`).
|
|
248
|
+
|
|
249
|
+
Without credentials, the default dual-provider mode silently shows GLM only
|
|
250
|
+
(no error). Running `zcode-quota go` without credentials prints a setup hint.
|
|
89
251
|
|
|
90
252
|
## ACP Registry
|
|
91
253
|
|
|
@@ -121,6 +283,8 @@ The server is organised in layers that mirror the ACP protocol:
|
|
|
121
283
|
- `interaction/` — bridge ZCode `interaction/*` server requests to ACP, preferring `elicitation/create` and falling back to `session/request_permission` (tool auth, ExitPlanMode, AskUserQuestion)
|
|
122
284
|
- `handlers/` — ACP method handlers (`session/new`, `session/prompt`, ...) and the turn engine
|
|
123
285
|
- `config/` — model / mode / thought-level configOptions and runtime model switching
|
|
286
|
+
- `remote/` — opt-in remote access: loopback ACP endpoint, multi-client broadcast, `zcode-acp-hub` registration
|
|
287
|
+
- `quota/` — GLM Coding Plan / Opencode Go usage API client (`/quota` command, `zcode-quota` bin)
|
|
124
288
|
- `server.ts` — shared state and handler registration
|
|
125
289
|
- `index.ts` — stdio wiring via the ACP SDK
|
|
126
290
|
|
|
@@ -138,6 +302,8 @@ See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for the full architecture docum
|
|
|
138
302
|
|
|
139
303
|
- [Architecture](docs/ARCHITECTURE.md) — event stream, dual-path deduplication, module responsibilities
|
|
140
304
|
- [Protocol](docs/PROTOCOL.md) — ZCode JSON-RPC protocol details
|
|
305
|
+
- [Remote Clients](docs/REMOTE-CLIENTS.md) — remote access integration contract (discovery, transport, recovery)
|
|
306
|
+
- [Replay Guide](docs/REPLAY-GUIDE.md) — building a client UI on tail replay
|
|
141
307
|
- [Development](docs/DEVELOPMENT.md) — local development, debugging, adding extension methods
|
|
142
308
|
- [Troubleshooting](docs/TROUBLESHOOTING.md) — common-issue troubleshooting
|
|
143
309
|
|
|
@@ -157,6 +323,23 @@ recorded in [CHANGELOG.md](CHANGELOG.md).
|
|
|
157
323
|
- [ZCode](https://zcode.z.ai) / [Zhipu Z.AI](https://z.ai) — the GLM model and ZCode CLI
|
|
158
324
|
- [zcode-open-bridge](https://github.com/tizerluo/zcode-open-bridge) — reference implementation that informed this server's design
|
|
159
325
|
|
|
326
|
+
## Privacy
|
|
327
|
+
|
|
328
|
+
**No telemetry or tracking** — the server reports nothing to anyone. The only
|
|
329
|
+
runtime dependency beyond the ACP SDK is `zod`.
|
|
330
|
+
|
|
331
|
+
Your prompts, code, and file contents are relayed between the editor and the
|
|
332
|
+
ZCode backend over **local pipes**; that data reaches the GLM cloud API only
|
|
333
|
+
because the ZCode backend itself sends it there for inference — this server
|
|
334
|
+
adds no extra destinations.
|
|
335
|
+
|
|
336
|
+
| Concern | What & why |
|
|
337
|
+
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
338
|
+
| Network | Only one outbound request in the whole codebase: the quota GET (`open.bigmodel.cn` / `api.z.ai`), carrying just your API key — needed to fetch your usage numbers, sends no user content |
|
|
339
|
+
| Credentials | API key read from `~/.zcode/v2/config.json` to authenticate the ZCode subprocess and quota request. Never logged, never written elsewhere. OAuth handled entirely by the ZCode subprocess |
|
|
340
|
+
| Disk | No new files created. Writes only to the existing `~/.zcode/v2/tasks-index.sqlite` — this **syncs sessions to the ZCode app** so they appear in its history list and full-text search (stores the session title and first prompt) |
|
|
341
|
+
| Logging | Diagnostics to stderr for troubleshooting bridge issues. Even with `ZCODE_ACP_DEBUG=1`, no prompts/code/keys are ever logged |
|
|
342
|
+
|
|
160
343
|
## License
|
|
161
344
|
|
|
162
345
|
Apache-2.0. This project follows the same license as the upstream ACP specification.
|
package/README.zh-CN.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# zcode-acp-server
|
|
2
2
|
|
|
3
|
-
[](https://github.com/william0wang/zcode-acp/actions/workflows/ci.yml)
|
|
4
4
|
[](LICENSE)
|
|
5
5
|
|
|
6
6
|
**[English](README.md)** | 简体中文
|
|
@@ -78,13 +78,133 @@ ZCode CLI 内置于桌面应用中,默认不会加到 `PATH`。用 `ZCODE_BIN`
|
|
|
78
78
|
|
|
79
79
|
## 环境变量
|
|
80
80
|
|
|
81
|
-
| 变量
|
|
82
|
-
|
|
|
83
|
-
| `ZCODE_BIN`
|
|
84
|
-
| `ZCODE_NODE`
|
|
85
|
-
| `ZCODE_MODEL`
|
|
86
|
-
| `ZCODE_BASE_URL`
|
|
87
|
-
| `
|
|
81
|
+
| 变量 | 默认值 | 用途 |
|
|
82
|
+
| ---------------------------------- | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
83
|
+
| `ZCODE_BIN` | `zcode` | ZCode CLI 二进制文件路径或其 `.cjs` 入口 |
|
|
84
|
+
| `ZCODE_NODE` | _(自动发现)_ | 显式指定运行 `ZCODE_BIN` 的 Node 二进制(必须支持 `node:sqlite`) |
|
|
85
|
+
| `ZCODE_MODEL` | _(来自 config) | 覆盖当前使用的模型 id |
|
|
86
|
+
| `ZCODE_BASE_URL` | _(来自 config) | 覆盖 provider 的 base URL |
|
|
87
|
+
| `ZCODE_ACP_AUTO_COMPACT_THRESHOLD` | _(未设置) | 触发自动压缩的绝对 token 阈值。每次回合成功完成后(`end_turn`),若 `contextUsed >= 阈值`,服务端会自动调用 `session/compact` 压缩上下文,为下一个 prompt 腾出空间。设为 `0` 或不设置则禁用(默认)。例如 `240000` 表示上下文达 24 万 token 时触发压缩。压缩目标由 ZCode 后端决定。 |
|
|
88
|
+
| `ZCODE_ACP_DEBUG` | _(未设置) | 设为 `1` 可开启详细诊断日志(事件流、探测循环、状态更新)。默认安静——只输出警告类日志(后端管道错误、命令/权限失败、锁等待超时)。诊断桥接问题时开启;日志出现在 `Zed.log` 中,前缀为 `[zcode-acp]`。 |
|
|
89
|
+
| `ZCODE_ACP_REMOTE` | _(未设置)_ | 设为 `1` 启用[远程访问](#远程访问)——通过 WebSocket 向更多 ACP 客户端提供相同会话。 |
|
|
90
|
+
| `ZCODE_ACP_REMOTE_TOKEN` | _(未设置)_ | 远程访问的鉴权 token。启用 `ZCODE_ACP_REMOTE=1` 时**必填**;缺失则远程保持禁用。 |
|
|
91
|
+
| `ZCODE_ACP_HUB_PORT` | `8377` | 机器级 `zcode-acp-hub` 的端口。隧道只映射这一个端口。 |
|
|
92
|
+
| `ZCODE_ACP_HUB_HOST` | `127.0.0.1` | hub 绑定地址。`0.0.0.0` 会暴露仅 token 保护的明文面——只用于容器化隧道 agent 所在的私网接口(见[远程访问](#远程访问))。 |
|
|
93
|
+
| `ZCODE_ACP_REMOTE_PORT` | `8378` | bridge ACP 端点的起始回环端口。每个 bridge(每个编辑器窗口)自动递增取下一个空闲端口。 |
|
|
94
|
+
|
|
95
|
+
## 远程访问
|
|
96
|
+
|
|
97
|
+
设置 `ZCODE_ACP_REMOTE=1` 后,bridge 会额外通过 WebSocket 接收 ACP 连接,
|
|
98
|
+
手机或浏览器即可观看并驱动与编辑器**相同的会话**。Zed(或任何 stdio ACP
|
|
99
|
+
编辑器)仍是主客户端并拥有进程:编辑器断开时,bridge 连同所有远程连接
|
|
100
|
+
一起退出。
|
|
101
|
+
|
|
102
|
+
```text
|
|
103
|
+
phone / browser ──WS── 隧道 ── hub (127.0.0.1:8377, 唯一入口)
|
|
104
|
+
│ 字节级代理
|
|
105
|
+
▼
|
|
106
|
+
bridge ACP 端点 (127.0.0.1:8378+n)
|
|
107
|
+
│ 与 stdio 同一个 AgentApp
|
|
108
|
+
Zed ──────── stdio ────────────┘
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
启用方式:在上文「配置 Zed」的 `env` 里追加(Zed 会把这些合并进 agent
|
|
112
|
+
的环境变量):
|
|
113
|
+
|
|
114
|
+
```json
|
|
115
|
+
"ZCODE_ACP_REMOTE": "1",
|
|
116
|
+
"ZCODE_ACP_REMOTE_TOKEN": "<一段足够长的随机密钥>"
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
相关环境变量(详见上文表格):`ZCODE_ACP_REMOTE`(开关)、
|
|
120
|
+
`ZCODE_ACP_REMOTE_TOKEN`(必填 token)、`ZCODE_ACP_HUB_PORT`(hub 端口,
|
|
121
|
+
默认 8377)、`ZCODE_ACP_HUB_HOST`(hub 绑定地址)、
|
|
122
|
+
`ZCODE_ACP_REMOTE_PORT`(bridge 端点起始端口,默认 8378)。
|
|
123
|
+
|
|
124
|
+
**Hub。** 第一个启用远程的 bridge 会以 detached 方式拉起机器级单例
|
|
125
|
+
`zcode-acp-hub`(监听 `ZCODE_ACP_HUB_PORT`,也可手动运行)。它只做三件事:
|
|
126
|
+
token 鉴权、实例发现、字节级 WebSocket 代理——不保存会话状态、不解析 ACP。
|
|
127
|
+
空闲约 10 分钟后退出,需要时再被拉起。每个 bridge 每 10 秒注册一次作为
|
|
128
|
+
心跳,心跳停止约 30 秒后从发现列表移除;客户端刷新时也可调用
|
|
129
|
+
`GET /api/instances?probe=1` 主动探测,立即清理不可达的实例。
|
|
130
|
+
|
|
131
|
+
**语义。** 所有 agent 通知广播给每个已连接客户端;权限 / elicitation 请求
|
|
132
|
+
发给所有客户端,**先应答者生效**,其余客户端收到 `$/cancel_request` 关闭
|
|
133
|
+
对话框。同一会话的并发 prompt 与单编辑器一样串行化。任一客户端声明的能力
|
|
134
|
+
按 OR 合并。
|
|
135
|
+
|
|
136
|
+
**隧道。** 面向单端口隧道(Cloudflare Tunnel、frp)设计:只映射 hub 端口。
|
|
137
|
+
frp 的 `tcp` 模式原样透传 WebSocket;Cloudflare Tunnel 会断开空闲连接,
|
|
138
|
+
hub 因此在两段链路上每 30 秒发送 keepalive ping。bridge 端点本身只监听
|
|
139
|
+
回环地址,永不直接暴露。
|
|
140
|
+
|
|
141
|
+
要构建远程客户端(Web、移动端或 CLI)?完整的集成契约(端点、帧格式、
|
|
142
|
+
生命周期时序、故障恢复、平台注意事项)见
|
|
143
|
+
[docs/REMOTE-CLIENTS.md](docs/REMOTE-CLIENTS.md)。
|
|
144
|
+
|
|
145
|
+
## 独立配额查询 CLI(zcode-quota)
|
|
146
|
+
|
|
147
|
+
除了 ACP server,本包还附带一个 `zcode-quota` 命令,可在**终端**里直接查询
|
|
148
|
+
用量——无需编辑器,也无需 server 运行。默认在一张卡片里同时显示
|
|
149
|
+
**GLM Coding Plan** 和 **Opencode Go**;传入 provider 参数可只看其中一个。
|
|
150
|
+
|
|
151
|
+
GLM 凭证读取自 `~/.zcode/v2/config.json`。Opencode Go 凭证来自环境变量
|
|
152
|
+
(dashboard 需要浏览器 cookie——见下方 [Opencode Go 配置](#opencode-go-配置))。
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
# 双平台(默认):GLM + Opencode Go 合并为一张卡片
|
|
156
|
+
zcode-quota
|
|
157
|
+
|
|
158
|
+
# 只看某一个 provider
|
|
159
|
+
zcode-quota glm # 仅 GLM Coding Plan
|
|
160
|
+
zcode-quota go # 仅 Opencode Go(rolling + weekly + monthly 三窗口)
|
|
161
|
+
|
|
162
|
+
# 常驻监控:清屏并每 30s 刷新(默认)
|
|
163
|
+
zcode-quota -w
|
|
164
|
+
zcode-quota go -w # 只监控 Opencode Go
|
|
165
|
+
|
|
166
|
+
# 自定义刷新间隔(秒,最小 10)
|
|
167
|
+
zcode-quota --watch --interval 60
|
|
168
|
+
|
|
169
|
+
# 纯文本单色进度条(终端默认是彩色)
|
|
170
|
+
zcode-quota --plain
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
默认情况下 CLI 会渲染热力配色(绿→黄→红)的进度条,并把用量数字叠在条内,
|
|
174
|
+
这样每行更紧凑。传 `--plain`(或 `-p`)切回经典的 `█`/`░` 单色布局。当 stdout
|
|
175
|
+
被管道或重定向时,彩色也会自动关闭,保证捕获到的输出干净。
|
|
176
|
+
|
|
177
|
+
watch 模式会原地清屏重绘卡片,效果类似 `top`/`htop`。按 `Ctrl-C` 退出。
|
|
178
|
+
之所以设最小间隔 10s,是因为配额 API 内部有 10s 缓存——更短的间隔只会一直
|
|
179
|
+
返回过期的缓存值,没有意义。
|
|
180
|
+
|
|
181
|
+
未全局安装时,可直接运行构建产物:
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
node dist/bin/quota.js -w
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Opencode Go 配置
|
|
188
|
+
|
|
189
|
+
Opencode Go 订阅用量没有 JSON API——CLI 抓取的是登录后的 dashboard 页面
|
|
190
|
+
`opencode.ai/workspace/<id>/go`,因此需要你的浏览器 `auth` cookie。设置两个
|
|
191
|
+
环境变量:
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
export OPENCODE_GO_WORKSPACE_ID="wrk_你的工作区id"
|
|
195
|
+
export OPENCODE_GO_AUTH_COOKIE="Fe26.2**你的cookie值"
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
获取方式:
|
|
199
|
+
|
|
200
|
+
1. **Workspace ID**——打开 `https://opencode.ai`,进入你的 Go 工作区,从 URL
|
|
201
|
+
里复制 `wrk_…` id(`https://opencode.ai/workspace/<wrk_…>/go`)。
|
|
202
|
+
2. **Auth cookie**——打开浏览器开发者工具(F12)→ Application → Cookies →
|
|
203
|
+
`opencode.ai` → 复制名为 `auth` 的 cookie 值(以 `Fe26.2**` 开头)。
|
|
204
|
+
|
|
205
|
+
未设置这两个变量时,默认的双平台模式会**静默退化为只显示 GLM**(不报错)。
|
|
206
|
+
若明确运行 `zcode-quota go` 但未配置,会打印一条配置提示。把它们加到 shell
|
|
207
|
+
配置文件(`~/.zshrc` / `~/.bashrc`)即可持久化。
|
|
88
208
|
|
|
89
209
|
## ACP Registry
|
|
90
210
|
|
|
@@ -154,6 +274,21 @@ commit 约定和 PR 检查清单。重要变更记录在 [CHANGELOG.md](CHANGELO
|
|
|
154
274
|
- [ZCode](https://zcode.z.ai) / [智谱 Z.AI](https://z.ai) —— GLM 模型与 ZCode CLI
|
|
155
275
|
- [zcode-open-bridge](https://github.com/tizerluo/zcode-open-bridge) —— 参考实现,本项目的设计借鉴了它的桥接架构
|
|
156
276
|
|
|
277
|
+
## 隐私
|
|
278
|
+
|
|
279
|
+
**无遥测、无追踪** —— 本服务端不向任何方上报任何信息。除 ACP SDK 外唯一运行时依赖是
|
|
280
|
+
`zod`。
|
|
281
|
+
|
|
282
|
+
你的提示词、代码、文件内容通过**本地管道**在编辑器与 ZCode 后端之间中转;这些数据会到达
|
|
283
|
+
GLM 云端 API,仅因 ZCode 后端本身为推理而发送——本服务端不增加任何额外去向。
|
|
284
|
+
|
|
285
|
+
| 方面 | 做什么 & 为什么 |
|
|
286
|
+
| ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
287
|
+
| 网络 | 全代码库仅一处对外请求:配额 GET(`open.bigmodel.cn` / `api.z.ai`),只带 API key —— 为查询用量数字,不发送用户内容 |
|
|
288
|
+
| 凭据 | API key 从 `~/.zcode/v2/config.json` 读取,用于认证 ZCode 子进程和配额请求。从不记录日志、从不写入别处。OAuth 完全由 ZCode 子进程处理 |
|
|
289
|
+
| 磁盘 | 不创建任何新文件。只写入已存在的 `~/.zcode/v2/tasks-index.sqlite` —— 这是**将会话同步到 ZCode App**,使其出现在历史列表和全文搜索中(存会话标题和首条提示词) |
|
|
290
|
+
| 日志 | 诊断信息输出到 stderr,用于排查桥接问题。即使开启 `ZCODE_ACP_DEBUG=1`,也绝不记录提示词/代码/密钥 |
|
|
291
|
+
|
|
157
292
|
## 许可证
|
|
158
293
|
|
|
159
294
|
Apache-2.0。本项目沿用上游 ACP 规范的同一许可证。
|
package/dist/backend/client.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ import { type ChildProcess } from "node:child_process";
|
|
|
18
18
|
import type { ZcodeEvent, ZcodeInteractionPermissionParams, ZcodeInteractionUserInputParams, ZcodeResponse } from "./types.js";
|
|
19
19
|
/** A server→client request that we must reply to. */
|
|
20
20
|
export interface ServerRequest {
|
|
21
|
-
id: number;
|
|
21
|
+
id: number | string;
|
|
22
22
|
method: string;
|
|
23
23
|
params: ZcodeInteractionPermissionParams | ZcodeInteractionUserInputParams | Record<string, unknown>;
|
|
24
24
|
}
|
|
@@ -57,16 +57,24 @@ export declare class ZcodeBackend {
|
|
|
57
57
|
private startWatchdog;
|
|
58
58
|
private startReader;
|
|
59
59
|
private route;
|
|
60
|
+
/** Deliver a ZcodeEvent to every listener registered for its session. */
|
|
61
|
+
private dispatchEvent;
|
|
60
62
|
private resolvePending;
|
|
61
63
|
private markReaderDead;
|
|
62
64
|
registerEventListener(zcodeSid: string, listener: EventListener): void;
|
|
63
|
-
unregisterEventListener(zcodeSid: string): void;
|
|
65
|
+
unregisterEventListener(zcodeSid: string, listener: EventListener): void;
|
|
64
66
|
/** Non-blocking drain of pending server→client requests. */
|
|
65
67
|
pollServerRequests(): ServerRequest[];
|
|
68
|
+
/**
|
|
69
|
+
* Re-queue server→client requests that belong to a different session (prepended
|
|
70
|
+
* to preserve arrival order). Used by `handleServerRequests` to put back
|
|
71
|
+
* requests it popped but doesn't own.
|
|
72
|
+
*/
|
|
73
|
+
requeueServerRequests(reqs: ServerRequest[]): void;
|
|
66
74
|
/** Reply to a zcode server→client request with a result (id + result). */
|
|
67
|
-
sendReply(id: number, result: unknown): void;
|
|
75
|
+
sendReply(id: number | string, result: unknown): void;
|
|
68
76
|
/** Reply to a zcode server→client request with an error. */
|
|
69
|
-
sendError(id: number, code: number, message: string): void;
|
|
77
|
+
sendError(id: number | string, code: number, message: string): void;
|
|
70
78
|
/** Fire-and-forget notification to ZCode (no id, no response). */
|
|
71
79
|
notify(method: string, params?: Record<string, unknown>): void;
|
|
72
80
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/backend/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAK9D,OAAO,KAAK,EACV,UAAU,EAEV,gCAAgC,EAChC,+BAA+B,EAC/B,aAAa,EACd,MAAM,YAAY,CAAC;AAQpB,qDAAqD;AACrD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/backend/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAK9D,OAAO,KAAK,EACV,UAAU,EAEV,gCAAgC,EAChC,+BAA+B,EAC/B,aAAa,EACd,MAAM,YAAY,CAAC;AAQpB,qDAAqD;AACrD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EACJ,gCAAgC,GAAG,+BAA+B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChG;AAED,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;CACtC;AAED,qBAAa,YAAY;IACvB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAuB;IAItD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyC;IACnE,OAAO,CAAC,UAAU,CAAS;IAC3B;sEACkE;IAClE,OAAO,CAAC,aAAa,CAAiB;IACtC,iFAAiF;IACjF,OAAO,CAAC,QAAQ,CAA6B;gBAEjC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU;IAmBlD;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,aAAa;IA+BrB,OAAO,CAAC,WAAW;IAqBnB,OAAO,CAAC,KAAK;IAwDb,yEAAyE;IACzE,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,cAAc;IAgBtB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAStE,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAOxE,4DAA4D;IAC5D,kBAAkB,IAAI,aAAa,EAAE;IAKrC;;;;OAIG;IACH,qBAAqB,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,IAAI;IAKlD,0EAA0E;IAC1E,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAYrD,4DAA4D;IAC5D,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAWnE,kEAAkE;IAClE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAS9D;;;;;;OAMG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAU5D;;;;;;OAMG;IACG,OAAO,CACX,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,SAAS,SAAQ,GAChB,OAAO,CAAC,aAAa,CAAC;IA+BzB;;;;;;;;;OASG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsC5B,6DAA6D;IAC7D,OAAO,CAAC,YAAY;IAapB,IAAI,MAAM,IAAI,OAAO,CAEpB;CACF"}
|
package/dist/backend/client.js
CHANGED
|
@@ -22,6 +22,9 @@ export class ZcodeBackend {
|
|
|
22
22
|
proc;
|
|
23
23
|
pending = new Map();
|
|
24
24
|
serverRequests = [];
|
|
25
|
+
// Per-session listener SET so a long-lived session listener (e.g. background
|
|
26
|
+
// task monitor) can coexist with a per-turn EventStreamListener. Each event
|
|
27
|
+
// is delivered to every registered listener for the session.
|
|
25
28
|
listeners = new Map();
|
|
26
29
|
readerDead = false;
|
|
27
30
|
/** Monotonic id for fire-and-forget sends (send()). Uses a high range to
|
|
@@ -128,6 +131,19 @@ export class ZcodeBackend {
|
|
|
128
131
|
if (this.pending.has(id)) {
|
|
129
132
|
this.resolvePending(id, msg);
|
|
130
133
|
}
|
|
134
|
+
else if (method === "session/requestRuntimePreferences") {
|
|
135
|
+
// Newer app-servers block `session/create` until this handshake is
|
|
136
|
+
// answered. Reply with defaults — no editor interaction needed.
|
|
137
|
+
// Keep askUserQuestionAutoResolutionEnabled false so AskUserQuestion
|
|
138
|
+
// still flows through the bridge's interaction path instead of being
|
|
139
|
+
// auto-resolved server-side. Without this reply, create hangs.
|
|
140
|
+
log(`backend: auto-replying ${method} (id=${String(id)}) with default preferences`);
|
|
141
|
+
this.sendReply(id, {
|
|
142
|
+
nativeSearchEnhancementsEnabled: false,
|
|
143
|
+
memoryEnabled: false,
|
|
144
|
+
askUserQuestionAutoResolutionEnabled: false,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
131
147
|
else {
|
|
132
148
|
this.serverRequests.push({
|
|
133
149
|
id,
|
|
@@ -141,11 +157,40 @@ export class ZcodeBackend {
|
|
|
141
157
|
// Notification.
|
|
142
158
|
if (method === "session/event") {
|
|
143
159
|
const ev = (msg.params ?? {});
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
160
|
+
this.dispatchEvent(ev);
|
|
161
|
+
}
|
|
162
|
+
else if (method === "state.updated") {
|
|
163
|
+
// Session settings changed (model/mode/thoughtLevel switch, incl.
|
|
164
|
+
// mid-turn). The params carry the authoritative full settings patch:
|
|
165
|
+
// { patch: {mode, model, thoughtLevel, …}, reason, revision, sessionId }
|
|
166
|
+
// Wrap as a ZcodeEvent so it flows through the same listener pipeline.
|
|
167
|
+
const params = (msg.params ?? {});
|
|
168
|
+
const ev = {
|
|
169
|
+
sessionId: String(params.sessionId ?? ""),
|
|
170
|
+
seq: 0,
|
|
171
|
+
type: "state.updated",
|
|
172
|
+
payload: params,
|
|
173
|
+
};
|
|
174
|
+
this.dispatchEvent(ev);
|
|
175
|
+
}
|
|
176
|
+
// Other notifications are currently ignored (process/resourceSample, …).
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/** Deliver a ZcodeEvent to every listener registered for its session. */
|
|
180
|
+
dispatchEvent(ev) {
|
|
181
|
+
const sid = ev.sessionId;
|
|
182
|
+
const set = sid ? this.listeners.get(sid) : undefined;
|
|
183
|
+
if (set) {
|
|
184
|
+
// Iterate a snapshot so a listener that (un)registers during dispatch
|
|
185
|
+
// doesn't mutate the set under us.
|
|
186
|
+
for (const listener of [...set]) {
|
|
187
|
+
try {
|
|
188
|
+
listener.handleEvent(ev);
|
|
189
|
+
}
|
|
190
|
+
catch (e) {
|
|
191
|
+
warn(`backend: listener.handleEvent threw: ${e instanceof Error ? e.message : String(e)}`);
|
|
192
|
+
}
|
|
147
193
|
}
|
|
148
|
-
// Other notifications are currently ignored (state.updated, etc.).
|
|
149
194
|
}
|
|
150
195
|
}
|
|
151
196
|
resolvePending(id, resp) {
|
|
@@ -172,10 +217,20 @@ export class ZcodeBackend {
|
|
|
172
217
|
}
|
|
173
218
|
// ---------- listeners / server requests ----------
|
|
174
219
|
registerEventListener(zcodeSid, listener) {
|
|
175
|
-
this.listeners.
|
|
220
|
+
let set = this.listeners.get(zcodeSid);
|
|
221
|
+
if (!set) {
|
|
222
|
+
set = new Set();
|
|
223
|
+
this.listeners.set(zcodeSid, set);
|
|
224
|
+
}
|
|
225
|
+
set.add(listener);
|
|
176
226
|
}
|
|
177
|
-
unregisterEventListener(zcodeSid) {
|
|
178
|
-
this.listeners.
|
|
227
|
+
unregisterEventListener(zcodeSid, listener) {
|
|
228
|
+
const set = this.listeners.get(zcodeSid);
|
|
229
|
+
if (!set)
|
|
230
|
+
return;
|
|
231
|
+
set.delete(listener);
|
|
232
|
+
if (set.size === 0)
|
|
233
|
+
this.listeners.delete(zcodeSid);
|
|
179
234
|
}
|
|
180
235
|
/** Non-blocking drain of pending server→client requests. */
|
|
181
236
|
pollServerRequests() {
|
|
@@ -183,6 +238,16 @@ export class ZcodeBackend {
|
|
|
183
238
|
return [];
|
|
184
239
|
return this.serverRequests.splice(0, this.serverRequests.length);
|
|
185
240
|
}
|
|
241
|
+
/**
|
|
242
|
+
* Re-queue server→client requests that belong to a different session (prepended
|
|
243
|
+
* to preserve arrival order). Used by `handleServerRequests` to put back
|
|
244
|
+
* requests it popped but doesn't own.
|
|
245
|
+
*/
|
|
246
|
+
requeueServerRequests(reqs) {
|
|
247
|
+
if (reqs.length === 0)
|
|
248
|
+
return;
|
|
249
|
+
this.serverRequests.unshift(...reqs);
|
|
250
|
+
}
|
|
186
251
|
/** Reply to a zcode server→client request with a result (id + result). */
|
|
187
252
|
sendReply(id, result) {
|
|
188
253
|
const stdin = this.proc.stdin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/backend/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/backend/client.ts"],"names":[],"mappings":"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"}
|