zcode-acp-server 0.1.0 → 0.2.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 +98 -1
- package/README.zh-CN.md +81 -1
- 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/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/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 +11 -2
- package/dist/handlers/io.d.ts.map +1 -1
- package/dist/handlers/io.js +51 -7
- package/dist/handlers/io.js.map +1 -1
- 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 +876 -220
- package/dist/handlers/session.js.map +1 -1
- package/dist/handlers/slash.d.ts +14 -0
- package/dist/handlers/slash.d.ts.map +1 -1
- package/dist/handlers/slash.js +80 -6
- package/dist/handlers/slash.js.map +1 -1
- package/dist/index.js +38 -4
- 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/server.d.ts +104 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +119 -2
- 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 +35 -6
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +52 -4
- package/dist/utils.js.map +1 -1
- package/docs/ARCHITECTURE.md +96 -38
- package/docs/BACKLOG.md +57 -0
- package/docs/DEVELOPMENT.md +5 -0
- package/docs/PROTOCOL.md +270 -5
- package/docs/TROUBLESHOOTING.md +98 -14
- package/docs/agents/domain.md +51 -0
- package/docs/agents/issue-tracker.md +22 -0
- package/docs/agents/triage-labels.md +15 -0
- package/package.json +6 -5
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)**
|
|
@@ -85,8 +85,88 @@ automatically. Point `ZCODE_BIN` at the bundled `zcode.cjs`:
|
|
|
85
85
|
| `ZCODE_NODE` | _(discovered)_ | Explicit Node binary to run `ZCODE_BIN` with (must support `node:sqlite`) |
|
|
86
86
|
| `ZCODE_MODEL` | _(from config)_ | Override the active model id |
|
|
87
87
|
| `ZCODE_BASE_URL` | _(from config)_ | Override the provider base URL |
|
|
88
|
+
| `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. |
|
|
88
89
|
| `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]`. |
|
|
89
90
|
|
|
91
|
+
## Standalone Quota CLI
|
|
92
|
+
|
|
93
|
+
Besides the ACP server, the package ships a `zcode-quota` bin that queries
|
|
94
|
+
your usage **from the terminal** — no editor or running server needed. By
|
|
95
|
+
default it shows both **GLM Coding Plan** and **Opencode Go** in one card;
|
|
96
|
+
pass a provider to focus on one.
|
|
97
|
+
|
|
98
|
+
GLM credentials are read from `~/.zcode/v2/config.json`. Opencode Go
|
|
99
|
+
credentials come from environment variables (the dashboard needs a browser
|
|
100
|
+
cookie — see [Opencode Go setup](#opencode-go-setup) below).
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
# Both providers (default): GLM + Opencode Go in one card
|
|
104
|
+
zcode-quota
|
|
105
|
+
|
|
106
|
+
# Focus on one provider
|
|
107
|
+
zcode-quota glm # GLM Coding Plan only
|
|
108
|
+
zcode-quota go # Opencode Go only (rolling + weekly + monthly)
|
|
109
|
+
|
|
110
|
+
# Live monitor: clear the screen and refresh every 30s (default)
|
|
111
|
+
zcode-quota -w
|
|
112
|
+
zcode-quota go -w # watch Opencode Go only
|
|
113
|
+
|
|
114
|
+
# Refresh at a custom interval (seconds; minimum 10)
|
|
115
|
+
zcode-quota --watch --interval 60
|
|
116
|
+
|
|
117
|
+
# Plain monochrome bars (color is the default on a terminal)
|
|
118
|
+
zcode-quota --plain
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
By default the CLI renders heat-colored (green→yellow→red) progress bars with
|
|
122
|
+
the usage numbers overlaid inside the bar, so each line stays short. Pass
|
|
123
|
+
`--plain` (or `-p`) for the classic monochrome `█`/`░` layout. Color is also
|
|
124
|
+
disabled automatically when stdout is piped or redirected, so captured output
|
|
125
|
+
stays clean.
|
|
126
|
+
|
|
127
|
+
The watch mode clears and redraws the card in place, like `top`/`htop`. Press
|
|
128
|
+
`Ctrl-C` to exit. The 10s minimum exists because the quota API is cached for
|
|
129
|
+
10s internally — a shorter interval would just keep returning the stale cached
|
|
130
|
+
value.
|
|
131
|
+
|
|
132
|
+
When the package isn't globally installed, run the built file directly:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
node dist/bin/quota.js -w
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Opencode Go setup
|
|
139
|
+
|
|
140
|
+
Opencode Go has no JSON API for subscription usage — the CLI scrapes the
|
|
141
|
+
authenticated dashboard at `opencode.ai/workspace/<id>/go`, so it needs your
|
|
142
|
+
browser `auth` cookie. Credentials are read from two sources, **merged
|
|
143
|
+
field-by-field with environment variables taking precedence** over the config
|
|
144
|
+
file:
|
|
145
|
+
|
|
146
|
+
- **Config file**: `~/.pi/agent/opencode-go.json` — same convention as the
|
|
147
|
+
`@beyona/pi-zai-usage` Pi extension, so if you already configured it there
|
|
148
|
+
you're done.
|
|
149
|
+
```json
|
|
150
|
+
{ "workspaceId": "wrk_your_workspace_id", "authCookie": "Fe26.2**your_cookie_value" }
|
|
151
|
+
```
|
|
152
|
+
- **Environment variables** (override the matching file field):
|
|
153
|
+
```bash
|
|
154
|
+
export OPENCODE_GO_WORKSPACE_ID="wrk_your_workspace_id"
|
|
155
|
+
export OPENCODE_GO_AUTH_COOKIE="Fe26.2**your_cookie_value"
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
How to get the values:
|
|
159
|
+
|
|
160
|
+
1. **Workspace ID** — open `https://opencode.ai`, navigate to your Go
|
|
161
|
+
workspace, and copy the `wrk_…` id from the URL
|
|
162
|
+
(`https://opencode.ai/workspace/<wrk_…>/go`).
|
|
163
|
+
2. **Auth cookie** — open browser DevTools (F12) → Application → Cookies →
|
|
164
|
+
`opencode.ai` → copy the value of the cookie named `auth` (it starts with
|
|
165
|
+
`Fe26.2**`).
|
|
166
|
+
|
|
167
|
+
Without credentials, the default dual-provider mode silently shows GLM only
|
|
168
|
+
(no error). Running `zcode-quota go` without credentials prints a setup hint.
|
|
169
|
+
|
|
90
170
|
## ACP Registry
|
|
91
171
|
|
|
92
172
|
This server is compatible with the [ACP Registry](https://agentclientprotocol.com/get-started/registry). It advertises a single `agent`-type auth method at `initialize` time — the GLM API key is read from `~/.zcode/v2/config.json` by the ZCode backend, so **no editor-side credentials are required**.
|
|
@@ -157,6 +237,23 @@ recorded in [CHANGELOG.md](CHANGELOG.md).
|
|
|
157
237
|
- [ZCode](https://zcode.z.ai) / [Zhipu Z.AI](https://z.ai) — the GLM model and ZCode CLI
|
|
158
238
|
- [zcode-open-bridge](https://github.com/tizerluo/zcode-open-bridge) — reference implementation that informed this server's design
|
|
159
239
|
|
|
240
|
+
## Privacy
|
|
241
|
+
|
|
242
|
+
**No telemetry or tracking** — the server reports nothing to anyone. The only
|
|
243
|
+
runtime dependency beyond the ACP SDK is `zod`.
|
|
244
|
+
|
|
245
|
+
Your prompts, code, and file contents are relayed between the editor and the
|
|
246
|
+
ZCode backend over **local pipes**; that data reaches the GLM cloud API only
|
|
247
|
+
because the ZCode backend itself sends it there for inference — this server
|
|
248
|
+
adds no extra destinations.
|
|
249
|
+
|
|
250
|
+
| Concern | What & why |
|
|
251
|
+
| ------- | ---------- |
|
|
252
|
+
| 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 |
|
|
253
|
+
| 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 |
|
|
254
|
+
| 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) |
|
|
255
|
+
| Logging | Diagnostics to stderr for troubleshooting bridge issues. Even with `ZCODE_ACP_DEBUG=1`, no prompts/code/keys are ever logged |
|
|
256
|
+
|
|
160
257
|
## License
|
|
161
258
|
|
|
162
259
|
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)** | 简体中文
|
|
@@ -84,8 +84,73 @@ ZCode CLI 内置于桌面应用中,默认不会加到 `PATH`。用 `ZCODE_BIN`
|
|
|
84
84
|
| `ZCODE_NODE` | _(自动发现)_ | 显式指定运行 `ZCODE_BIN` 的 Node 二进制(必须支持 `node:sqlite`) |
|
|
85
85
|
| `ZCODE_MODEL` | _(来自 config) | 覆盖当前使用的模型 id |
|
|
86
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 后端决定。 |
|
|
87
88
|
| `ZCODE_ACP_DEBUG` | _(未设置) | 设为 `1` 可开启详细诊断日志(事件流、探测循环、状态更新)。默认安静——只输出警告类日志(后端管道错误、命令/权限失败、锁等待超时)。诊断桥接问题时开启;日志出现在 `Zed.log` 中,前缀为 `[zcode-acp]`。 |
|
|
88
89
|
|
|
90
|
+
## 独立配额查询 CLI(zcode-quota)
|
|
91
|
+
|
|
92
|
+
除了 ACP server,本包还附带一个 `zcode-quota` 命令,可在**终端**里直接查询
|
|
93
|
+
用量——无需编辑器,也无需 server 运行。默认在一张卡片里同时显示
|
|
94
|
+
**GLM Coding Plan** 和 **Opencode Go**;传入 provider 参数可只看其中一个。
|
|
95
|
+
|
|
96
|
+
GLM 凭证读取自 `~/.zcode/v2/config.json`。Opencode Go 凭证来自环境变量
|
|
97
|
+
(dashboard 需要浏览器 cookie——见下方 [Opencode Go 配置](#opencode-go-配置))。
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
# 双平台(默认):GLM + Opencode Go 合并为一张卡片
|
|
101
|
+
zcode-quota
|
|
102
|
+
|
|
103
|
+
# 只看某一个 provider
|
|
104
|
+
zcode-quota glm # 仅 GLM Coding Plan
|
|
105
|
+
zcode-quota go # 仅 Opencode Go(rolling + weekly + monthly 三窗口)
|
|
106
|
+
|
|
107
|
+
# 常驻监控:清屏并每 30s 刷新(默认)
|
|
108
|
+
zcode-quota -w
|
|
109
|
+
zcode-quota go -w # 只监控 Opencode Go
|
|
110
|
+
|
|
111
|
+
# 自定义刷新间隔(秒,最小 10)
|
|
112
|
+
zcode-quota --watch --interval 60
|
|
113
|
+
|
|
114
|
+
# 纯文本单色进度条(终端默认是彩色)
|
|
115
|
+
zcode-quota --plain
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
默认情况下 CLI 会渲染热力配色(绿→黄→红)的进度条,并把用量数字叠在条内,
|
|
119
|
+
这样每行更紧凑。传 `--plain`(或 `-p`)切回经典的 `█`/`░` 单色布局。当 stdout
|
|
120
|
+
被管道或重定向时,彩色也会自动关闭,保证捕获到的输出干净。
|
|
121
|
+
|
|
122
|
+
watch 模式会原地清屏重绘卡片,效果类似 `top`/`htop`。按 `Ctrl-C` 退出。
|
|
123
|
+
之所以设最小间隔 10s,是因为配额 API 内部有 10s 缓存——更短的间隔只会一直
|
|
124
|
+
返回过期的缓存值,没有意义。
|
|
125
|
+
|
|
126
|
+
未全局安装时,可直接运行构建产物:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
node dist/bin/quota.js -w
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Opencode Go 配置
|
|
133
|
+
|
|
134
|
+
Opencode Go 订阅用量没有 JSON API——CLI 抓取的是登录后的 dashboard 页面
|
|
135
|
+
`opencode.ai/workspace/<id>/go`,因此需要你的浏览器 `auth` cookie。设置两个
|
|
136
|
+
环境变量:
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
export OPENCODE_GO_WORKSPACE_ID="wrk_你的工作区id"
|
|
140
|
+
export OPENCODE_GO_AUTH_COOKIE="Fe26.2**你的cookie值"
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
获取方式:
|
|
144
|
+
|
|
145
|
+
1. **Workspace ID**——打开 `https://opencode.ai`,进入你的 Go 工作区,从 URL
|
|
146
|
+
里复制 `wrk_…` id(`https://opencode.ai/workspace/<wrk_…>/go`)。
|
|
147
|
+
2. **Auth cookie**——打开浏览器开发者工具(F12)→ Application → Cookies →
|
|
148
|
+
`opencode.ai` → 复制名为 `auth` 的 cookie 值(以 `Fe26.2**` 开头)。
|
|
149
|
+
|
|
150
|
+
未设置这两个变量时,默认的双平台模式会**静默退化为只显示 GLM**(不报错)。
|
|
151
|
+
若明确运行 `zcode-quota go` 但未配置,会打印一条配置提示。把它们加到 shell
|
|
152
|
+
配置文件(`~/.zshrc` / `~/.bashrc`)即可持久化。
|
|
153
|
+
|
|
89
154
|
## ACP Registry
|
|
90
155
|
|
|
91
156
|
本服务端兼容 [ACP Registry](https://agentclientprotocol.com/get-started/registry)。它在 `initialize` 时声明一个 `agent` 类型的认证方法——GLM API key 由 ZCode 后端从 `~/.zcode/v2/config.json` 读取,**编辑器侧无需配置任何凭据**。
|
|
@@ -154,6 +219,21 @@ commit 约定和 PR 检查清单。重要变更记录在 [CHANGELOG.md](CHANGELO
|
|
|
154
219
|
- [ZCode](https://zcode.z.ai) / [智谱 Z.AI](https://z.ai) —— GLM 模型与 ZCode CLI
|
|
155
220
|
- [zcode-open-bridge](https://github.com/tizerluo/zcode-open-bridge) —— 参考实现,本项目的设计借鉴了它的桥接架构
|
|
156
221
|
|
|
222
|
+
## 隐私
|
|
223
|
+
|
|
224
|
+
**无遥测、无追踪** —— 本服务端不向任何方上报任何信息。除 ACP SDK 外唯一运行时依赖是
|
|
225
|
+
`zod`。
|
|
226
|
+
|
|
227
|
+
你的提示词、代码、文件内容通过**本地管道**在编辑器与 ZCode 后端之间中转;这些数据会到达
|
|
228
|
+
GLM 云端 API,仅因 ZCode 后端本身为推理而发送——本服务端不增加任何额外去向。
|
|
229
|
+
|
|
230
|
+
| 方面 | 做什么 & 为什么 |
|
|
231
|
+
| ---- | --------------- |
|
|
232
|
+
| 网络 | 全代码库仅一处对外请求:配额 GET(`open.bigmodel.cn` / `api.z.ai`),只带 API key —— 为查询用量数字,不发送用户内容 |
|
|
233
|
+
| 凭据 | API key 从 `~/.zcode/v2/config.json` 读取,用于认证 ZCode 子进程和配额请求。从不记录日志、从不写入别处。OAuth 完全由 ZCode 子进程处理 |
|
|
234
|
+
| 磁盘 | 不创建任何新文件。只写入已存在的 `~/.zcode/v2/tasks-index.sqlite` —— 这是**将会话同步到 ZCode App**,使其出现在历史列表和全文搜索中(存会话标题和首条提示词) |
|
|
235
|
+
| 日志 | 诊断信息输出到 stderr,用于排查桥接问题。即使开启 `ZCODE_ACP_DEBUG=1`,也绝不记录提示词/代码/密钥 |
|
|
236
|
+
|
|
157
237
|
## 许可证
|
|
158
238
|
|
|
159
239
|
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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/backend/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/backend/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAmBH,sDAAsD;AACtD,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,4EAA4E;AAC5E,wBAAgB,oBAAoB,IAAI,gBAAgB,CAoBvD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAuB5E"}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { readFileSync } from "node:fs";
|
|
11
11
|
import process from "node:process";
|
|
12
|
+
import { DEFAULT_MODEL_ID } from "../config/options.js";
|
|
12
13
|
import { log, ZCODE_CREDS_PATH } from "../utils.js";
|
|
13
14
|
/** Read the active provider's credentials from config.json. Best-effort. */
|
|
14
15
|
export function loadZcodeCredentials() {
|
|
@@ -19,7 +20,7 @@ export function loadZcodeCredentials() {
|
|
|
19
20
|
const opts = p.options ?? {};
|
|
20
21
|
const models = p.models ?? {};
|
|
21
22
|
return {
|
|
22
|
-
ZCODE_MODEL: Object.keys(models)[0] ??
|
|
23
|
+
ZCODE_MODEL: Object.keys(models)[0] ?? DEFAULT_MODEL_ID,
|
|
23
24
|
ZCODE_BASE_URL: opts.baseURL ?? "",
|
|
24
25
|
ANTHROPIC_API_KEY: opts.apiKey ?? "",
|
|
25
26
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/backend/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAoBpD,4EAA4E;AAC5E,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAgB,CAAC;QAC9E,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;gBACf,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;gBAC7B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;gBAC9B,OAAO;oBACL,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/backend/credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,13 +26,21 @@ export declare class EventStreamListener {
|
|
|
26
26
|
/**
|
|
27
27
|
* Subscribe and capture the initial snapshot + eventSeq watermark.
|
|
28
28
|
*
|
|
29
|
-
* Returns the snapshot (with projection/messages)
|
|
30
|
-
*
|
|
31
|
-
*
|
|
29
|
+
* Returns the snapshot (with projection/messages). Throws on failure,
|
|
30
|
+
* surfacing the backend's real error message (reader dead, timeout, pipe
|
|
31
|
+
* broken, method not found on old CLI, or a session-level business error) so
|
|
32
|
+
* the caller can distinguish root causes instead of seeing a single
|
|
33
|
+
* misleading "version too old" string.
|
|
32
34
|
*/
|
|
33
|
-
subscribe(nextId: NextId): Promise<ZcodeSnapshot
|
|
35
|
+
subscribe(nextId: NextId): Promise<ZcodeSnapshot>;
|
|
34
36
|
/** Called by the backend reader when a `session/event` arrives. */
|
|
35
37
|
handleEvent(event: ZcodeEvent): void;
|
|
38
|
+
/**
|
|
39
|
+
* True if events are queued waiting for a poll (non-destructive). Lets the
|
|
40
|
+
* turn loop check liveness without consuming an event — used by the stall
|
|
41
|
+
* reconciliation to confirm a turn is still alive before ending it.
|
|
42
|
+
*/
|
|
43
|
+
hasQueuedEvents(): boolean;
|
|
36
44
|
/**
|
|
37
45
|
* Wait for the next event, resolving once one arrives or `timeoutMs` elapses
|
|
38
46
|
* (resolves null on timeout). Events arriving with no active waiter are
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../src/backend/listener.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../src/backend/listener.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EAEf,aAAa,EAEd,MAAM,YAAY,CAAC;AAGpB,uDAAuD;AACvD,MAAM,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC;AAUlC,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,OAAO,SAAK;IACZ,UAAU,UAAS;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;gBAE5B,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM;IAKnD;;;;;;;;OAQG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAyDvD,mEAAmE;IACnE,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAepC;;;;OAIG;IACH,eAAe,IAAI,OAAO;IAI1B;;;;;OAKG;IACH,SAAS,CAAC,SAAS,SAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAoBtD;;;;;OAKG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAwBpD;AAED;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAMnE,yDAAyD;IACnD,QAAQ,IAAI,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;CAWlD"}
|
package/dist/backend/listener.js
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* returns the authoritative projection. Used for stall reconciliation and
|
|
11
11
|
* lock-release probing.
|
|
12
12
|
*/
|
|
13
|
+
import { log, warn } from "../utils.js";
|
|
13
14
|
export class EventStreamListener {
|
|
14
15
|
backend;
|
|
15
16
|
sid;
|
|
@@ -25,24 +26,59 @@ export class EventStreamListener {
|
|
|
25
26
|
/**
|
|
26
27
|
* Subscribe and capture the initial snapshot + eventSeq watermark.
|
|
27
28
|
*
|
|
28
|
-
* Returns the snapshot (with projection/messages)
|
|
29
|
-
*
|
|
30
|
-
*
|
|
29
|
+
* Returns the snapshot (with projection/messages). Throws on failure,
|
|
30
|
+
* surfacing the backend's real error message (reader dead, timeout, pipe
|
|
31
|
+
* broken, method not found on old CLI, or a session-level business error) so
|
|
32
|
+
* the caller can distinguish root causes instead of seeing a single
|
|
33
|
+
* misleading "version too old" string.
|
|
31
34
|
*/
|
|
32
35
|
async subscribe(nextId) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
// Retry transient timeouts as a lightweight safety net for cold-start /
|
|
37
|
+
// network blips. The cancel-preempt path no longer needs subscribe retries
|
|
38
|
+
// to absorb a backend stop-finalization window: the turn loop now blocks
|
|
39
|
+
// until the backend emits turn.completed/turn.failed before its prompt()
|
|
40
|
+
// exits, so by the time the next prompt reaches subscribe the backend is
|
|
41
|
+
// already idle. These retries are just a last-resort cushion.
|
|
42
|
+
//
|
|
43
|
+
// Only `timeout` is retried — non-transient errors (reader dead, pipe
|
|
44
|
+
// broken, method-not-found, session-level business error) fail fast.
|
|
45
|
+
// Each attempt uses a fresh id from `nextId()` (monotonic, never reused), so
|
|
46
|
+
// a late response to an earlier timed-out request is safely discarded by
|
|
47
|
+
// `resolvePending` (no pending entry → dropped).
|
|
48
|
+
//
|
|
49
|
+
// includeSnapshot is FALSE here on purpose. The caller (prompt()) discards
|
|
50
|
+
// the returned snapshot anyway (`void snapshot`) — the projection baseline
|
|
51
|
+
// comes from a separate fetchMessages() call. Asking the backend for a
|
|
52
|
+
// snapshot here only makes it compute a full session snapshot (which grows
|
|
53
|
+
// O(messages) and can take seconds-to-tens-of-seconds on long sessions:
|
|
54
|
+
// observed 3.8s at 267 messages, 38s at 3500 messages) and is the primary
|
|
55
|
+
// cause of subscribe timeouts. The eventSeq watermark is all we need.
|
|
56
|
+
const MAX_ATTEMPTS = 2;
|
|
57
|
+
const backoffMs = (attempt) => 500 * attempt; // 0.5s
|
|
58
|
+
let resp;
|
|
59
|
+
for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) {
|
|
60
|
+
resp = await this.backend.request(nextId(), "session/subscribe", {
|
|
61
|
+
sessionId: this.sid,
|
|
62
|
+
deliveryKind: "desktop-continuous",
|
|
63
|
+
includeSnapshot: false,
|
|
64
|
+
afterSeq: 0,
|
|
65
|
+
}, 5000);
|
|
66
|
+
if (!resp.error)
|
|
67
|
+
break; // success
|
|
68
|
+
const isTimeout = resp.error.message === "timeout";
|
|
69
|
+
if (!isTimeout || attempt === MAX_ATTEMPTS) {
|
|
70
|
+
if (isTimeout) {
|
|
71
|
+
warn(`subscribe: all ${MAX_ATTEMPTS} attempts timed out (backend unresponsive for ~${Math.round((MAX_ATTEMPTS * 5000 + 500) / 1000)}s)`);
|
|
72
|
+
}
|
|
73
|
+
throw new Error(formatSubscribeError(resp));
|
|
74
|
+
}
|
|
75
|
+
log(`subscribe attempt ${attempt}/${MAX_ATTEMPTS} timed out, retrying in ${backoffMs(attempt)}ms`);
|
|
76
|
+
await new Promise((resolve) => setTimeout(resolve, backoffMs(attempt)));
|
|
41
77
|
}
|
|
42
78
|
const result = (resp.result ?? {});
|
|
43
79
|
this.lastSeq = result.eventSeq ?? 0;
|
|
44
80
|
this.subscribed = true;
|
|
45
|
-
return result.snapshot ??
|
|
81
|
+
return result.snapshot ?? { projection: undefined, messages: [] };
|
|
46
82
|
}
|
|
47
83
|
/** Called by the backend reader when a `session/event` arrives. */
|
|
48
84
|
handleEvent(event) {
|
|
@@ -62,6 +98,14 @@ export class EventStreamListener {
|
|
|
62
98
|
this.queue.push(event);
|
|
63
99
|
}
|
|
64
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* True if events are queued waiting for a poll (non-destructive). Lets the
|
|
103
|
+
* turn loop check liveness without consuming an event — used by the stall
|
|
104
|
+
* reconciliation to confirm a turn is still alive before ending it.
|
|
105
|
+
*/
|
|
106
|
+
hasQueuedEvents() {
|
|
107
|
+
return this.queue.length > 0;
|
|
108
|
+
}
|
|
65
109
|
/**
|
|
66
110
|
* Wait for the next event, resolving once one arrives or `timeoutMs` elapses
|
|
67
111
|
* (resolves null on timeout). Events arriving with no active waiter are
|
|
@@ -104,6 +148,7 @@ export class EventStreamListener {
|
|
|
104
148
|
afterSeq: this.lastSeq,
|
|
105
149
|
}, 10000);
|
|
106
150
|
if (resp.error) {
|
|
151
|
+
log(`resubscribe failed (non-fatal, stall recovery degrades to polling): ${formatSubscribeError(resp)}`);
|
|
107
152
|
return false;
|
|
108
153
|
}
|
|
109
154
|
const result = (resp.result ?? {});
|
|
@@ -135,4 +180,15 @@ export class TurnMonitor {
|
|
|
135
180
|
return result.projection ?? null;
|
|
136
181
|
}
|
|
137
182
|
}
|
|
183
|
+
/**
|
|
184
|
+
* Format a `session/subscribe` failure into a readable message that carries
|
|
185
|
+
* the backend's real error so the caller can distinguish root causes (reader
|
|
186
|
+
* dead, timeout, pipe broken, method-not-found on old CLI, session-level
|
|
187
|
+
* business error) instead of a single generic string.
|
|
188
|
+
*/
|
|
189
|
+
function formatSubscribeError(resp) {
|
|
190
|
+
const err = resp.error ?? { message: "unknown error" };
|
|
191
|
+
const code = err.code !== undefined && err.code !== null ? ` (code ${err.code})` : "";
|
|
192
|
+
return `session/subscribe failed: ${err.message ?? "unknown error"}${code}`;
|
|
193
|
+
}
|
|
138
194
|
//# sourceMappingURL=listener.js.map
|