glm-acp-agent 1.11.0 → 1.13.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 +39 -6
- package/dist/index.js +50 -12
- package/dist/index.js.map +1 -1
- package/dist/llm/glm-client.d.ts +15 -2
- package/dist/llm/glm-client.d.ts.map +1 -1
- package/dist/llm/glm-client.js +118 -12
- package/dist/llm/glm-client.js.map +1 -1
- package/dist/llm/stream-state.d.ts +10 -0
- package/dist/llm/stream-state.d.ts.map +1 -0
- package/dist/llm/stream-state.js +29 -0
- package/dist/llm/stream-state.js.map +1 -0
- package/dist/package-version.d.ts +2 -0
- package/dist/package-version.d.ts.map +1 -0
- package/dist/package-version.js +4 -0
- package/dist/package-version.js.map +1 -0
- package/dist/protocol/agent.d.ts +49 -0
- package/dist/protocol/agent.d.ts.map +1 -1
- package/dist/protocol/agent.js +893 -325
- package/dist/protocol/agent.js.map +1 -1
- package/dist/protocol/connection.d.ts +12 -0
- package/dist/protocol/connection.d.ts.map +1 -1
- package/dist/protocol/connection.js +19 -2
- package/dist/protocol/connection.js.map +1 -1
- package/dist/protocol/context-budget.d.ts +36 -0
- package/dist/protocol/context-budget.d.ts.map +1 -0
- package/dist/protocol/context-budget.js +211 -0
- package/dist/protocol/context-budget.js.map +1 -0
- package/dist/protocol/image-preprocessor.d.ts.map +1 -1
- package/dist/protocol/image-preprocessor.js +83 -55
- package/dist/protocol/image-preprocessor.js.map +1 -1
- package/dist/protocol/model-transition.d.ts +10 -0
- package/dist/protocol/model-transition.d.ts.map +1 -0
- package/dist/protocol/model-transition.js +12 -0
- package/dist/protocol/model-transition.js.map +1 -0
- package/dist/protocol/session-lifecycle.d.ts +20 -0
- package/dist/protocol/session-lifecycle.d.ts.map +1 -0
- package/dist/protocol/session-lifecycle.js +41 -0
- package/dist/protocol/session-lifecycle.js.map +1 -0
- package/dist/protocol/session-store.d.ts +14 -10
- package/dist/protocol/session-store.d.ts.map +1 -1
- package/dist/protocol/session-store.js +115 -54
- package/dist/protocol/session-store.js.map +1 -1
- package/dist/tools/argument-validation.d.ts +14 -0
- package/dist/tools/argument-validation.d.ts.map +1 -0
- package/dist/tools/argument-validation.js +167 -0
- package/dist/tools/argument-validation.js.map +1 -0
- package/dist/tools/definitions.js +3 -3
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/executor.d.ts +14 -1
- package/dist/tools/executor.d.ts.map +1 -1
- package/dist/tools/executor.js +367 -180
- package/dist/tools/executor.js.map +1 -1
- package/dist/tools/file-reader.d.ts +18 -0
- package/dist/tools/file-reader.d.ts.map +1 -0
- package/dist/tools/file-reader.js +105 -0
- package/dist/tools/file-reader.js.map +1 -0
- package/dist/tools/mcp-pagination.d.ts +25 -0
- package/dist/tools/mcp-pagination.d.ts.map +1 -0
- package/dist/tools/mcp-pagination.js +67 -0
- package/dist/tools/mcp-pagination.js.map +1 -0
- package/dist/tools/mcp-response-limit.d.ts +16 -0
- package/dist/tools/mcp-response-limit.d.ts.map +1 -0
- package/dist/tools/mcp-response-limit.js +52 -0
- package/dist/tools/mcp-response-limit.js.map +1 -0
- package/dist/tools/process-supervisor.d.ts +24 -0
- package/dist/tools/process-supervisor.d.ts.map +1 -0
- package/dist/tools/process-supervisor.js +196 -0
- package/dist/tools/process-supervisor.js.map +1 -0
- package/dist/tools/resource-limits.d.ts +16 -0
- package/dist/tools/resource-limits.d.ts.map +1 -0
- package/dist/tools/resource-limits.js +25 -0
- package/dist/tools/resource-limits.js.map +1 -0
- package/dist/tools/session-mcp-client.d.ts +35 -7
- package/dist/tools/session-mcp-client.d.ts.map +1 -1
- package/dist/tools/session-mcp-client.js +315 -73
- package/dist/tools/session-mcp-client.js.map +1 -1
- package/dist/tools/tool-output.d.ts +5 -0
- package/dist/tools/tool-output.d.ts.map +1 -0
- package/dist/tools/tool-output.js +62 -0
- package/dist/tools/tool-output.js.map +1 -0
- package/dist/tools/vision-mcp-client.d.ts +6 -2
- package/dist/tools/vision-mcp-client.d.ts.map +1 -1
- package/dist/tools/vision-mcp-client.js +109 -12
- package/dist/tools/vision-mcp-client.js.map +1 -1
- package/dist/tools/zai-mcp-client.d.ts +7 -1
- package/dist/tools/zai-mcp-client.d.ts.map +1 -1
- package/dist/tools/zai-mcp-client.js +56 -17
- package/dist/tools/zai-mcp-client.js.map +1 -1
- package/package.json +8 -2
- package/dist/tests/agent.test.d.ts +0 -2
- package/dist/tests/agent.test.d.ts.map +0 -1
- package/dist/tests/agent.test.js +0 -2873
- package/dist/tests/agent.test.js.map +0 -1
- package/dist/tests/cli-args.test.d.ts +0 -2
- package/dist/tests/cli-args.test.d.ts.map +0 -1
- package/dist/tests/cli-args.test.js +0 -57
- package/dist/tests/cli-args.test.js.map +0 -1
- package/dist/tests/command-limits.test.d.ts +0 -2
- package/dist/tests/command-limits.test.d.ts.map +0 -1
- package/dist/tests/command-limits.test.js +0 -229
- package/dist/tests/command-limits.test.js.map +0 -1
- package/dist/tests/credentials.test.d.ts +0 -2
- package/dist/tests/credentials.test.d.ts.map +0 -1
- package/dist/tests/credentials.test.js +0 -124
- package/dist/tests/credentials.test.js.map +0 -1
- package/dist/tests/executor.test.d.ts +0 -2
- package/dist/tests/executor.test.d.ts.map +0 -1
- package/dist/tests/executor.test.js +0 -1382
- package/dist/tests/executor.test.js.map +0 -1
- package/dist/tests/glm-client.test.d.ts +0 -2
- package/dist/tests/glm-client.test.d.ts.map +0 -1
- package/dist/tests/glm-client.test.js +0 -534
- package/dist/tests/glm-client.test.js.map +0 -1
- package/dist/tests/image-preprocessor.test.d.ts +0 -2
- package/dist/tests/image-preprocessor.test.d.ts.map +0 -1
- package/dist/tests/image-preprocessor.test.js +0 -133
- package/dist/tests/image-preprocessor.test.js.map +0 -1
- package/dist/tests/integration.test.d.ts +0 -2
- package/dist/tests/integration.test.d.ts.map +0 -1
- package/dist/tests/integration.test.js +0 -381
- package/dist/tests/integration.test.js.map +0 -1
- package/dist/tests/logger.test.d.ts +0 -2
- package/dist/tests/logger.test.d.ts.map +0 -1
- package/dist/tests/logger.test.js +0 -14
- package/dist/tests/logger.test.js.map +0 -1
- package/dist/tests/mcp-arg-remap.test.d.ts +0 -2
- package/dist/tests/mcp-arg-remap.test.d.ts.map +0 -1
- package/dist/tests/mcp-arg-remap.test.js +0 -65
- package/dist/tests/mcp-arg-remap.test.js.map +0 -1
- package/dist/tests/prompt-lifecycle.test.d.ts +0 -2
- package/dist/tests/prompt-lifecycle.test.d.ts.map +0 -1
- package/dist/tests/prompt-lifecycle.test.js +0 -321
- package/dist/tests/prompt-lifecycle.test.js.map +0 -1
- package/dist/tests/session-context.test.d.ts +0 -2
- package/dist/tests/session-context.test.d.ts.map +0 -1
- package/dist/tests/session-context.test.js +0 -213
- package/dist/tests/session-context.test.js.map +0 -1
- package/dist/tests/session-mcp-client.test.d.ts +0 -2
- package/dist/tests/session-mcp-client.test.d.ts.map +0 -1
- package/dist/tests/session-mcp-client.test.js +0 -414
- package/dist/tests/session-mcp-client.test.js.map +0 -1
- package/dist/tests/session-store.test.d.ts +0 -2
- package/dist/tests/session-store.test.d.ts.map +0 -1
- package/dist/tests/session-store.test.js +0 -263
- package/dist/tests/session-store.test.js.map +0 -1
- package/dist/tests/slash-commands.test.d.ts +0 -2
- package/dist/tests/slash-commands.test.d.ts.map +0 -1
- package/dist/tests/slash-commands.test.js +0 -216
- package/dist/tests/slash-commands.test.js.map +0 -1
- package/dist/tests/sync-manifest.test.d.ts +0 -2
- package/dist/tests/sync-manifest.test.d.ts.map +0 -1
- package/dist/tests/sync-manifest.test.js +0 -172
- package/dist/tests/sync-manifest.test.js.map +0 -1
- package/dist/tests/vision-mcp-client.test.d.ts +0 -2
- package/dist/tests/vision-mcp-client.test.d.ts.map +0 -1
- package/dist/tests/vision-mcp-client.test.js +0 -286
- package/dist/tests/vision-mcp-client.test.js.map +0 -1
- package/dist/tests/zai-mcp-client.test.d.ts +0 -2
- package/dist/tests/zai-mcp-client.test.d.ts.map +0 -1
- package/dist/tests/zai-mcp-client.test.js +0 -386
- package/dist/tests/zai-mcp-client.test.js.map +0 -1
package/README.md
CHANGED
|
@@ -4,6 +4,10 @@ An [Agent Client Protocol (ACP)](https://agentclientprotocol.com) agent written
|
|
|
4
4
|
|
|
5
5
|
The agent connects to any ACP-compatible IDE or client over **stdio**, streams responses back in real time, and can call a rich set of tools to interact with the user's file system, terminal, and the web.
|
|
6
6
|
|
|
7
|
+
Streaming responses must include a supported terminal finish reason. An early connection close is reported as an interrupted response, with received text retained for session replay. Tool calls run only after a complete `tool_calls` response; calls in output-limit (`length`) or filtered (`content_filter`) responses are discarded and the corresponding stop reason is preserved.
|
|
8
|
+
|
|
9
|
+
Completed provider reasoning is retained unchanged in conversation history and saved sessions for subsequent model calls, even when thought display is disabled. `ACP_GLM_STREAM_THINKING=false` controls client display only. Reasoning from cancelled, incomplete, or output-limited responses is not replayed as a completed reasoning chain.
|
|
10
|
+
|
|
7
11
|
---
|
|
8
12
|
|
|
9
13
|
## Coding Plan Only
|
|
@@ -65,7 +69,25 @@ ACP Client (IDE plugin, CLI, …)
|
|
|
65
69
|
|
|
66
70
|
The agent process needs network access to `api.z.ai` for chat completions and Web MCP, plus `npx` available on `PATH` so it can launch `@z_ai/mcp-server` for vision. Filesystem and shell operations use paths resolved against the ACP session working directory. When the client advertises `fs.writeTextFile`, writes and edits are routed through the ACP client so they render as native diffs. When it advertises both `fs.readTextFile` and `fs.writeTextFile`, `read_file` and edit-file reads also use the editor buffer; otherwise those reads fall back to the agent process filesystem. Writes and arbitrary shell commands still go through ACP `session/request_permission`, and the permission payload is always the **full** tool arguments — the user approves exactly what will run.
|
|
67
71
|
|
|
68
|
-
Client-facing tool cards stay compact: long strings in `rawInput`/`rawOutput`
|
|
72
|
+
Client-facing tool cards stay compact: long strings in `rawInput`/`rawOutput` are elided to a short head plus a character count, and every completed or failed card's visible text — including the `read_file` content preview — is bounded to an aggregate 16 KiB UTF-8 budget; oversized previews end with `[… N bytes elided in preview; full result sent to model]` and card titles are elided to 240 characters. The model still receives the full tool result, capped at 256 KiB by `ACP_GLM_TOOL_RESULT_LIMIT_BYTES`; write payloads and permission requests remain complete. Progress narration lives in the `todowrite` task list rather than prose, and reasoning tokens are only forwarded as `agent_thought_chunk` when `ACP_GLM_STREAM_THINKING` is not `false` (the default preserves streaming).
|
|
73
|
+
|
|
74
|
+
## Client MCP, context, and trust boundary
|
|
75
|
+
|
|
76
|
+
All MCP transports share an 8 MiB response cap (`MCP_RESPONSE_LIMIT_BYTES`): HTTP response bodies are read incrementally and a larger body cancels the read and fails the tool call, while an oversized or newline-less stdio JSON-RPC frame fails the connection, rejecting pending requests and terminating the child process. The cap applies to client-provided servers and to the built-in Web MCP and Vision MCP clients.
|
|
77
|
+
|
|
78
|
+
### Client-provided MCP servers
|
|
79
|
+
|
|
80
|
+
ACP clients may attach MCP server definitions when creating or loading a session. The agent supports client-configured **stdio** and **HTTP** MCP servers. **SSE is unsupported and rejected** when the agent tries to connect. In the ACP SDK capability schema, `mcpCapabilities.http` advertises HTTP support and `mcpCapabilities.sse` advertises SSE support. This agent advertises only `http: true` and does not advertise SSE; the capability object has no stdio flag.
|
|
81
|
+
|
|
82
|
+
A stdio MCP child starts with a copy of the agent process environment, then the server's configured environment entries override matching inherited values. This can pass credentials such as `Z_AI_API_KEY` to that child. Review client-supplied MCP commands and environment values as trusted code/configuration.
|
|
83
|
+
|
|
84
|
+
### Context compaction
|
|
85
|
+
|
|
86
|
+
Before provider requests, the agent estimates context use with a heuristic rather than the provider's tokenizer. When history exceeds the model budget, it can remove older complete exchanges and shorten tool results; the system context and latest user request are retained. If those, the tool schemas, and reserved output/safety space still exceed the model's context window, the request fails with guidance to narrow it or choose a larger-context model. Earlier conversation details may therefore not remain verbatim in model context.
|
|
87
|
+
|
|
88
|
+
### Trust boundary
|
|
89
|
+
|
|
90
|
+
The agent does not run tools inside an OS or container sandbox. Shell commands and local filesystem fallbacks run with the agent process's OS-user permissions; shell children inherit its environment, and commands can access the network available to that user. ACP permission prompts and session modes govern consent behavior but do not provide process isolation. Treat workspaces, prompts, and MCP configurations as trusted, and use external OS/container isolation when you need a stronger boundary.
|
|
69
91
|
|
|
70
92
|
---
|
|
71
93
|
|
|
@@ -73,11 +95,11 @@ Client-facing tool cards stay compact: long strings in `rawInput`/`rawOutput` (a
|
|
|
73
95
|
|
|
74
96
|
| Tool | Runs on | Permission behavior | Description |
|
|
75
97
|
|------|---------|---------------------|-------------|
|
|
76
|
-
| `read_file` | ACP client when both fs read/write capabilities are advertised, otherwise agent process | Always silent | Read a text file or editor buffer, paginated by offset/limit (default 2000 lines, capped at 5000)
|
|
98
|
+
| `read_file` | ACP client when both fs read/write capabilities are advertised, otherwise agent process | Always silent | Read a text file or editor buffer, paginated by offset/limit (default 2000 lines, capped at 5000). Local scans are byte-bounded; totals can be unknown and an incomplete line is never given a next offset. |
|
|
77
99
|
| `write_file` | Agent process (ACP client `fs` when advertised) | Mode-dependent | Write or overwrite a text file. Silent in `accept_edits` and `bypass_permissions`. |
|
|
78
|
-
| `edit_file` | Agent process (ACP client `fs` when advertised) | Mode-dependent | Replace one exact, unique snippet in an existing file
|
|
100
|
+
| `edit_file` | Agent process (ACP client `fs` when advertised) | Mode-dependent | Replace one exact, unique snippet in an existing file. It refuses an input or editor buffer over the read/edit budget, and re-validates after permission so concurrent edits are not overwritten. Silent in `accept_edits` and `bypass_permissions`. |
|
|
79
101
|
| `todowrite` | Agent process | Always silent | Create or replace the session's structured task list so multi-step progress is tracked instead of narrated in chat. Each call replaces the list; the tool result renders it back to the model. |
|
|
80
|
-
| `list_files` | Agent process | Always silent | List a directory
|
|
102
|
+
| `list_files` | Agent process | Always silent | List a directory through a bounded iterator; a truncated result is a disclosed subset. |
|
|
81
103
|
| `run_command` | Agent process | Mode-dependent | Run an arbitrary shell command; cancelling a turn terminates its shell process group, while intentionally backgrounded processes survive a normal shell exit. Silent only in `bypass_permissions`. |
|
|
82
104
|
| `web_search` | Agent (Z.AI Coding Plan MCP) | Always silent | Search the web — returns titles, URLs, and summaries |
|
|
83
105
|
| `web_reader` | Agent (Z.AI Coding Plan MCP) | Always silent | Fetch and parse a web page (markdown or plain text) |
|
|
@@ -95,6 +117,8 @@ Clients can use `session/set_mode` to drive the permission policy:
|
|
|
95
117
|
|
|
96
118
|
Reads, listings, and MCP tool calls are always silent across all modes.
|
|
97
119
|
|
|
120
|
+
Permission prompts always carry the full, unelided tool arguments, so the user approves exactly what will run. The prompt offers exactly `allow` and `reject`, and a tool runs only when the response selects `allow` with outcome `selected`; anything else — a missing or unrecognised option id, an unknown outcome string, or a null/absent response — is treated as reject. An explicit `cancelled` outcome remains distinct from rejection.
|
|
121
|
+
|
|
98
122
|
---
|
|
99
123
|
|
|
100
124
|
## Slash commands
|
|
@@ -179,12 +203,17 @@ The agent reads its configuration from environment variables, plus an optional c
|
|
|
179
203
|
| `ACP_GLM_MODEL` | No | `glm-5.3` | Default GLM model for new sessions |
|
|
180
204
|
| `ACP_GLM_AVAILABLE_MODELS` | No | built-in list | Comma-separated list of model ids advertised in `session/set_model` |
|
|
181
205
|
| `ACP_GLM_BASE_URL` | No | `https://api.z.ai/api/coding/paas/v4` | Override the API base URL |
|
|
182
|
-
| `ACP_GLM_MAX_TOKENS` | No | `32768` | Cap on `max_tokens` for each completion |
|
|
206
|
+
| `ACP_GLM_MAX_TOKENS` | No | `32768` | Cap on `max_tokens` for each completion. Invalid values fall back to the default with a stderr warning. |
|
|
183
207
|
| `ACP_GLM_MAX_TURNS` | No | `100` | Max model/tool turns per prompt (also settable via `--max-turns`) |
|
|
184
208
|
| `ACP_GLM_COMMAND_TIMEOUT_MS` | No | `120000` | Deadline for each `run_command`, in milliseconds. Invalid values fall back to the default with a stderr warning. |
|
|
185
209
|
| `ACP_GLM_COMMAND_OUTPUT_LIMIT_BYTES` | No | `65536` | Maximum combined bytes captured from each `run_command` stdout and stderr. Further output is drained and reported as truncated. Invalid values fall back to the default with a stderr warning. |
|
|
210
|
+
| `ACP_GLM_TOOL_RESULT_LIMIT_BYTES` | No | `262144` | Inclusive UTF-8 byte limit for every model-facing tool result. It preserves a prefix and suffix with an omitted-bytes marker; values below 128 fall back with a stderr warning. |
|
|
211
|
+
| `ACP_GLM_READ_FILE_LIMIT_BYTES` | No | `8388608` | Maximum local bytes consumed while reading a page or whole file for `edit_file`. A bounded scan may not know the total line count. |
|
|
212
|
+
| `ACP_GLM_LIST_FILES_MAX_ENTRIES` | No | `2000` | Maximum entries collected by `list_files`; larger directories return a disclosed subset. |
|
|
213
|
+
| `ACP_GLM_LIST_FILES_LIMIT_BYTES` | No | `262144` | Maximum bytes assembled for a `list_files` result before its truncation marker. |
|
|
186
214
|
| `ACP_GLM_THINKING` | No | auto-detected | Force thinking mode `true` / `false` |
|
|
187
215
|
| `ACP_GLM_STREAM_THINKING` | No | `true` | Forward reasoning tokens to the client as `agent_thought_chunk`; set `false` to keep reasoning off the wire (the model still thinks — only the client-side stream is silenced) |
|
|
216
|
+
| `ACP_GLM_STREAM_IDLE_TIMEOUT_MS` | No | `300000` | Idle deadline in milliseconds for a stalled model-provider stream read; invalid values fall back to the default with a stderr warning. |
|
|
188
217
|
| `ACP_GLM_SESSION_DIR` | No | `$XDG_STATE_HOME/glm-acp-agent/sessions` | Where session JSON files are persisted |
|
|
189
218
|
| `ACP_GLM_DEBUG` | No | — | Set to `true` or `1` to enable verbose debug logging to stderr (shows model selection, API key resolution, tool calls, and usage stats) |
|
|
190
219
|
| `XDG_CONFIG_HOME` | No | `~/.config` | Where the credentials file is read/written |
|
|
@@ -224,6 +253,8 @@ Vision-only chat models (`glm-4v-plus` etc.) are **not** advertised. `glm-5.3-fl
|
|
|
224
253
|
|
|
225
254
|
When the model name matches `glm-4.5`, `glm-4.6`, `glm-4.7`, or the `glm-5` family, the agent enables Z.AI's `thinking: { type: "enabled" }` extension and forwards reasoning tokens to the client as `agent_thought_chunk` blocks. This includes `glm-5.3-flash` and `glm-5v-turbo`. `ACP_GLM_THINKING=false` asks for plain completions on models that still accept `thinking.type: "disabled"` (GLM-4.7, GLM-5 Turbo). On GLM-5.3 and GLM-5.3-Flash the flag is a no-op: those models reject `disabled`, so the agent leaves thinking enabled rather than sending it (see [Thought level](#thought-level-reasoning-effort) below).
|
|
226
255
|
|
|
256
|
+
The provider stream itself is guarded against stalls. The Z.AI SDK's HTTP timeout only covers waiting for response headers — a response whose body stops mid-stream would otherwise hang the turn forever. The agent therefore aborts a provider stream read that produces no data for `ACP_GLM_STREAM_IDLE_TIMEOUT_MS` milliseconds (default `300000`; invalid values for the variable fall back to the default with a stderr warning). On timeout, whatever partial output already reached the user is kept, an `[error]` message is appended as an agent message, the turn ends, and the last valid on-disk session checkpoint is preserved. A slow ACP client back-pressuring chunks it already received does not trip the watchdog — only silence from the provider between reads does.
|
|
257
|
+
|
|
227
258
|
#### Thought level (reasoning effort)
|
|
228
259
|
|
|
229
260
|
The agent advertises a `thought_level` [SessionConfigOption](https://agentclientprotocol.com) so clients that support config options (e.g. a "Thinking" selector) can control reasoning effort per session. The available levels depend on the active model:
|
|
@@ -242,6 +273,8 @@ The endpoint validates `reasoning_effort` against `none | minimal | low | medium
|
|
|
242
273
|
|
|
243
274
|
`ACP_GLM_PROMPT_IMAGES=false` still hides the image-attachment capability at session startup. With that flag set, clients should not offer image attachments at all.
|
|
244
275
|
|
|
276
|
+
Switching to a text-only model is rejected while retained conversation history contains native images. Keep an image-capable model or start a text-only session with a textual description; images are never silently discarded or analyzed as part of a model switch. During an active prompt on a native-image model, wait for the turn to finish before switching to text-only capability. Other compatible selections affect subsequent model calls, while an in-flight call keeps its captured model and reasoning level. Restored histories receive the same compatibility check before a provider request.
|
|
277
|
+
|
|
245
278
|
### Vision MCP
|
|
246
279
|
|
|
247
280
|
For `glm-5.3-flash` (built-in) and `glm-5v-turbo` (opt-in via `ACP_GLM_AVAILABLE_MODELS`), pasted ACP image blocks with `image/jpeg`, `image/jpg`, or `image/png` are sent directly to chat completions as `image_url` content parts. HTTPS image URLs are forwarded as URLs; inline base64 data is sent as a `data:<mime>;base64,...` URI. Unsupported image MIME types are rejected client-side with an inline `<image_unsupported_format>` annotation so the prompt can continue without a provider 4xx.
|
|
@@ -372,7 +405,7 @@ If `Z_AI_API_KEY` is set in the environment **and** a credentials file exists, t
|
|
|
372
405
|
2. Open the **agent panel** (use the command palette: `agent panel: toggle focus`).
|
|
373
406
|
3. In the agent picker, select **glm** — Zed labels external agents by their `agent_servers` key.
|
|
374
407
|
4. Start a new thread and send a small prompt that exercises a tool, e.g. `Read package.json and tell me the project name.`
|
|
375
|
-
5. You should see streaming text, a `read_file` tool call
|
|
408
|
+
5. You should see streaming text, a `read_file` tool call that runs without a permission prompt, and (with a thinking-capable model like `glm-5.3`) reasoning surfaced as a separate thought block. Writes and shell commands require approval in the default mode.
|
|
376
409
|
|
|
377
410
|
#### 5. Iterating on the agent
|
|
378
411
|
|
package/dist/index.js
CHANGED
|
@@ -11,10 +11,11 @@
|
|
|
11
11
|
* falls back to the credentials file written by --setup.
|
|
12
12
|
* ACP_GLM_MODEL - (optional) Override the default model (default: glm-5.3)
|
|
13
13
|
* ACP_GLM_MAX_TURNS - (optional) Max model/tool turns per prompt (default: 100)
|
|
14
|
+
* ACP_GLM_STREAM_IDLE_TIMEOUT_MS - (optional) Model stream idle deadline in milliseconds (default: 300000)
|
|
14
15
|
* ACP_GLM_COMMAND_TIMEOUT_MS - (optional) run_command deadline in milliseconds (default: 120000)
|
|
15
16
|
* ACP_GLM_COMMAND_OUTPUT_LIMIT_BYTES - (optional) combined run_command stdout/stderr capture limit (default: 65536)
|
|
16
17
|
*/
|
|
17
|
-
import {
|
|
18
|
+
import { startAgentRuntime } from "./protocol/connection.js";
|
|
18
19
|
import { parseMaxTurnsFlag } from "./cli-args.js";
|
|
19
20
|
import { runSetup } from "./setup.js";
|
|
20
21
|
const args = process.argv.slice(2);
|
|
@@ -48,6 +49,7 @@ else if (args.includes("--help") || args.includes("-h")) {
|
|
|
48
49
|
" ACP_GLM_MAX_TOKENS Per-call max output tokens (default 32768)",
|
|
49
50
|
" ACP_GLM_THINKING Force thinking mode (true / false)",
|
|
50
51
|
" ACP_GLM_STREAM_THINKING Forward reasoning to the client as thought chunks (default true)",
|
|
52
|
+
" ACP_GLM_STREAM_IDLE_TIMEOUT_MS Model stream idle deadline in milliseconds (default 300000)",
|
|
51
53
|
" ACP_GLM_SESSION_DIR Where to persist sessions (default: ~/.local/state/glm-acp-agent/sessions)",
|
|
52
54
|
" ACP_GLM_DEBUG Enable verbose stderr logging (true or 1)",
|
|
53
55
|
" XDG_CONFIG_HOME Where to read/write credentials.json (default: ~/.config)",
|
|
@@ -56,16 +58,52 @@ else if (args.includes("--help") || args.includes("-h")) {
|
|
|
56
58
|
process.exit(0);
|
|
57
59
|
}
|
|
58
60
|
else {
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
61
|
+
const runtime = startAgentRuntime({ maxTurns: parseMaxTurnsFlag(args) });
|
|
62
|
+
let finishing = null;
|
|
63
|
+
let signalExitCode = null;
|
|
64
|
+
const finish = (reason, exitCode) => {
|
|
65
|
+
if (reason === "sigterm" || reason === "sigint")
|
|
66
|
+
signalExitCode = exitCode;
|
|
67
|
+
if (finishing)
|
|
68
|
+
return finishing;
|
|
69
|
+
finishing = (async () => {
|
|
70
|
+
const clean = await settlesWithin(runtime.shutdown(reason), 5_000);
|
|
71
|
+
if (clean) {
|
|
72
|
+
runtime.closeTransport();
|
|
73
|
+
process.exitCode = signalExitCode ?? exitCode;
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
process.stderr.write("glm-acp-agent: shutdown deadline exceeded; forcing active command cleanup\n");
|
|
77
|
+
await settlesWithin(runtime.forceShutdown(), 1_000);
|
|
78
|
+
process.exitCode = signalExitCode ?? 1;
|
|
79
|
+
// An unresolved client/MCP handle would otherwise keep the CLI alive
|
|
80
|
+
// indefinitely after the documented deadline. Command cleanup had its
|
|
81
|
+
// forced attempt above; report the incomplete shutdown as nonzero.
|
|
82
|
+
process.exit(process.exitCode);
|
|
83
|
+
})().catch((err) => {
|
|
84
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
85
|
+
process.stderr.write(`Fatal shutdown error: ${message}\n`);
|
|
86
|
+
process.exitCode = signalExitCode ?? 1;
|
|
87
|
+
});
|
|
88
|
+
return finishing;
|
|
89
|
+
};
|
|
90
|
+
void runtime.connection.closed
|
|
91
|
+
.then(() => finish("disconnect", 0))
|
|
92
|
+
.catch(() => finish("fatal", 1));
|
|
93
|
+
process.on("SIGINT", () => { void finish("sigint", 130); });
|
|
94
|
+
process.on("SIGTERM", () => { void finish("sigterm", 143); });
|
|
95
|
+
}
|
|
96
|
+
async function settlesWithin(promise, timeoutMs) {
|
|
97
|
+
let timer;
|
|
98
|
+
try {
|
|
99
|
+
return await Promise.race([
|
|
100
|
+
promise.then(() => true, () => false),
|
|
101
|
+
new Promise((resolve) => { timer = setTimeout(() => resolve(false), timeoutMs); }),
|
|
102
|
+
]);
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
if (timer)
|
|
106
|
+
clearTimeout(timer);
|
|
107
|
+
}
|
|
70
108
|
}
|
|
71
109
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/llm/glm-client.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ChatCompletionMessageParam } from "openai/resources/index.js";
|
|
1
|
+
import type { ChatCompletionAssistantMessageParam, ChatCompletionMessageParam } from "openai/resources/index.js";
|
|
2
2
|
import type { ModelInfo, Usage } from "@agentclientprotocol/sdk";
|
|
3
3
|
import { type ToolDefinition } from "../tools/definitions.js";
|
|
4
4
|
/**
|
|
@@ -37,7 +37,10 @@ export declare function resolveThoughtLevel(model: string, level: ThoughtLevel):
|
|
|
37
37
|
/**
|
|
38
38
|
* A single message in the GLM conversation history.
|
|
39
39
|
*/
|
|
40
|
-
export type
|
|
40
|
+
export type GlmAssistantMessage = ChatCompletionAssistantMessageParam & {
|
|
41
|
+
reasoning_content?: string;
|
|
42
|
+
};
|
|
43
|
+
export type GlmMessage = Exclude<ChatCompletionMessageParam, ChatCompletionAssistantMessageParam> | GlmAssistantMessage;
|
|
41
44
|
/**
|
|
42
45
|
* A streamed chunk from the GLM API.
|
|
43
46
|
*/
|
|
@@ -67,6 +70,12 @@ export interface StreamChatOptions {
|
|
|
67
70
|
tools?: ToolDefinition[];
|
|
68
71
|
/** Reasoning effort for this call, or undefined to use the model defaults. */
|
|
69
72
|
reasoningEffort?: ThoughtLevel;
|
|
73
|
+
/** Maximum silence while awaiting one provider stream item. */
|
|
74
|
+
idleTimeoutMs?: number;
|
|
75
|
+
}
|
|
76
|
+
/** A provider stream stopped yielding while its next item was being read. */
|
|
77
|
+
export declare class ModelStreamIdleTimeoutError extends Error {
|
|
78
|
+
name: string;
|
|
70
79
|
}
|
|
71
80
|
/** Default GLM model when neither client nor user has chosen one. */
|
|
72
81
|
export declare const DEFAULT_MODEL = "glm-5.3";
|
|
@@ -99,7 +108,11 @@ export declare function getDefaultModel(): string;
|
|
|
99
108
|
export declare class GlmClient {
|
|
100
109
|
private client;
|
|
101
110
|
private maxTokens;
|
|
111
|
+
/** Resolved once at construction; later env changes cannot affect a running client. */
|
|
112
|
+
private readonly streamIdleTimeoutMs;
|
|
102
113
|
constructor();
|
|
114
|
+
/** The same resolved reservation used in the outgoing `max_tokens` field. */
|
|
115
|
+
getMaxOutputTokens(): number;
|
|
103
116
|
/**
|
|
104
117
|
* Stream a chat completion from the GLM model, yielding chunks as they arrive.
|
|
105
118
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glm-client.d.ts","sourceRoot":"","sources":["../../src/llm/glm-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,0BAA0B,EAAsB,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"glm-client.d.ts","sourceRoot":"","sources":["../../src/llm/glm-client.ts"],"names":[],"mappings":"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"}
|
package/dist/llm/glm-client.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import OpenAI from "openai";
|
|
2
2
|
import { TOOL_DEFINITIONS } from "../tools/definitions.js";
|
|
3
3
|
import { resolveApiKey } from "./credentials.js";
|
|
4
|
-
import { debug, error } from "./logger.js";
|
|
4
|
+
import { debug, error, warn } from "./logger.js";
|
|
5
|
+
import { IncompleteModelStreamError, validateStreamCompletion } from "./stream-state.js";
|
|
5
6
|
/**
|
|
6
7
|
* Levels shown for the models that honour `reasoning_effort` — the endpoint's
|
|
7
8
|
* full validated ladder minus `none`.
|
|
@@ -88,8 +89,13 @@ export function resolveThoughtLevel(model, level) {
|
|
|
88
89
|
}
|
|
89
90
|
return valid[valid.length - 1];
|
|
90
91
|
}
|
|
92
|
+
/** A provider stream stopped yielding while its next item was being read. */
|
|
93
|
+
export class ModelStreamIdleTimeoutError extends Error {
|
|
94
|
+
name = "ModelStreamIdleTimeoutError";
|
|
95
|
+
}
|
|
91
96
|
/** Default base URL for the Z.AI / Zhipu OpenAI-compatible API (Coding endpoint). */
|
|
92
97
|
const DEFAULT_BASE_URL = "https://api.z.ai/api/coding/paas/v4";
|
|
98
|
+
const DEFAULT_STREAM_IDLE_TIMEOUT_MS = 300_000;
|
|
93
99
|
/** Default GLM model when neither client nor user has chosen one. */
|
|
94
100
|
export const DEFAULT_MODEL = "glm-5.3";
|
|
95
101
|
/**
|
|
@@ -200,6 +206,8 @@ export function getDefaultModel() {
|
|
|
200
206
|
export class GlmClient {
|
|
201
207
|
client;
|
|
202
208
|
maxTokens;
|
|
209
|
+
/** Resolved once at construction; later env changes cannot affect a running client. */
|
|
210
|
+
streamIdleTimeoutMs;
|
|
203
211
|
constructor() {
|
|
204
212
|
const apiKey = resolveApiKey();
|
|
205
213
|
if (!apiKey) {
|
|
@@ -211,8 +219,16 @@ export class GlmClient {
|
|
|
211
219
|
// the actual content and trips finish_reason=length ("output limit
|
|
212
220
|
// reached"). Override with ACP_GLM_MAX_TOKENS.
|
|
213
221
|
this.maxTokens = parseIntEnv("ACP_GLM_MAX_TOKENS", 32_768);
|
|
222
|
+
// Default silence bound for one provider stream item (see
|
|
223
|
+
// StreamChatOptions.idleTimeoutMs). Resolved once at construction so
|
|
224
|
+
// env re-reads cannot change behaviour mid-session.
|
|
225
|
+
this.streamIdleTimeoutMs = parseIntEnv("ACP_GLM_STREAM_IDLE_TIMEOUT_MS", DEFAULT_STREAM_IDLE_TIMEOUT_MS);
|
|
214
226
|
this.client = new OpenAI({ apiKey, baseURL });
|
|
215
227
|
}
|
|
228
|
+
/** The same resolved reservation used in the outgoing `max_tokens` field. */
|
|
229
|
+
getMaxOutputTokens() {
|
|
230
|
+
return this.maxTokens;
|
|
231
|
+
}
|
|
216
232
|
/**
|
|
217
233
|
* Stream a chat completion from the GLM model, yielding chunks as they arrive.
|
|
218
234
|
*
|
|
@@ -255,10 +271,23 @@ export class GlmClient {
|
|
|
255
271
|
error(`streamChat request failed: status=${status}`, JSON.stringify(body) ?? String(err));
|
|
256
272
|
throw err;
|
|
257
273
|
}
|
|
274
|
+
const requestedIdleTimeout = options?.idleTimeoutMs;
|
|
275
|
+
const idleTimeoutMs = requestedIdleTimeout !== undefined && requestedIdleTimeout > 0
|
|
276
|
+
? requestedIdleTimeout
|
|
277
|
+
: this.streamIdleTimeoutMs;
|
|
278
|
+
const idleBoundedStream = readWithIdleTimeout(stream, signal, idleTimeoutMs);
|
|
258
279
|
// Tool call deltas arrive interleaved across chunks; assemble by index.
|
|
259
280
|
const pendingToolCalls = new Map();
|
|
260
281
|
let lastFinishReason;
|
|
261
|
-
|
|
282
|
+
let terminalChoiceSeen = false;
|
|
283
|
+
for await (const rawChunk of idleBoundedStream) {
|
|
284
|
+
const chunk = rawChunk;
|
|
285
|
+
if (chunk.choices.length > 1) {
|
|
286
|
+
throw new IncompleteModelStreamError("Incomplete model stream: received multiple model choices for one completion.");
|
|
287
|
+
}
|
|
288
|
+
if (terminalChoiceSeen && chunk.choices.length > 0) {
|
|
289
|
+
throw new IncompleteModelStreamError("Incomplete model stream: received a model frame after terminal completion.");
|
|
290
|
+
}
|
|
262
291
|
const choice = chunk.choices[0];
|
|
263
292
|
if (choice) {
|
|
264
293
|
const delta = choice.delta;
|
|
@@ -291,6 +320,7 @@ export class GlmClient {
|
|
|
291
320
|
}
|
|
292
321
|
if (choice.finish_reason) {
|
|
293
322
|
lastFinishReason = choice.finish_reason;
|
|
323
|
+
terminalChoiceSeen = true;
|
|
294
324
|
}
|
|
295
325
|
}
|
|
296
326
|
// The final chunk on most providers (GLM included when
|
|
@@ -312,24 +342,100 @@ export class GlmClient {
|
|
|
312
342
|
yield { usage };
|
|
313
343
|
}
|
|
314
344
|
}
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
yield { toolCall:
|
|
345
|
+
signal?.throwIfAborted();
|
|
346
|
+
const calls = [...pendingToolCalls.entries()].sort(([a], [b]) => a - b).map(([, call]) => call);
|
|
347
|
+
const stopReason = validateStreamCompletion(lastFinishReason, calls);
|
|
348
|
+
if (stopReason === "tool_calls") {
|
|
349
|
+
for (const call of calls)
|
|
350
|
+
yield { toolCall: call };
|
|
321
351
|
}
|
|
322
|
-
|
|
323
|
-
yield { done: true, stopReason: lastFinishReason };
|
|
352
|
+
yield { done: true, stopReason };
|
|
324
353
|
}
|
|
325
354
|
}
|
|
326
|
-
/**
|
|
355
|
+
/**
|
|
356
|
+
* Parse an integer environment variable, falling back to a default. A set but
|
|
357
|
+
* invalid value (not a finite positive integer) logs a stderr warning first, so
|
|
358
|
+
* a typo never silently changes behaviour.
|
|
359
|
+
*/
|
|
327
360
|
function parseIntEnv(name, fallback) {
|
|
328
361
|
const raw = process.env[name];
|
|
329
362
|
if (!raw)
|
|
330
363
|
return fallback;
|
|
331
364
|
const n = Number.parseInt(raw, 10);
|
|
332
|
-
|
|
365
|
+
if (Number.isFinite(n) && n > 0)
|
|
366
|
+
return n;
|
|
367
|
+
warn(`invalid ${name} value "${raw}"; falling back to ${fallback}`);
|
|
368
|
+
return fallback;
|
|
369
|
+
}
|
|
370
|
+
/** Bound only provider reads; yielded items leave the timer stopped during ACP backpressure. */
|
|
371
|
+
async function* readWithIdleTimeout(stream, signal, timeoutMs) {
|
|
372
|
+
const iterator = stream[Symbol.asyncIterator]();
|
|
373
|
+
let completed = false;
|
|
374
|
+
try {
|
|
375
|
+
while (true) {
|
|
376
|
+
if (signal?.aborted)
|
|
377
|
+
throw abortError(signal);
|
|
378
|
+
const next = Promise.resolve().then(() => iterator.next());
|
|
379
|
+
const result = await new Promise((resolve, reject) => {
|
|
380
|
+
let settled = false;
|
|
381
|
+
const cleanup = () => {
|
|
382
|
+
clearTimeout(timer);
|
|
383
|
+
signal?.removeEventListener("abort", onAbort);
|
|
384
|
+
};
|
|
385
|
+
const rejectForAbort = () => settleReject(abortError(signal));
|
|
386
|
+
const settleResolve = (value) => {
|
|
387
|
+
if (settled)
|
|
388
|
+
return;
|
|
389
|
+
settled = true;
|
|
390
|
+
cleanup();
|
|
391
|
+
if (signal?.aborted)
|
|
392
|
+
reject(abortError(signal));
|
|
393
|
+
else
|
|
394
|
+
resolve(value);
|
|
395
|
+
};
|
|
396
|
+
const settleReject = (reason) => {
|
|
397
|
+
if (settled)
|
|
398
|
+
return;
|
|
399
|
+
settled = true;
|
|
400
|
+
cleanup();
|
|
401
|
+
reject(signal?.aborted ? abortError(signal) : reason);
|
|
402
|
+
};
|
|
403
|
+
const onAbort = () => rejectForAbort();
|
|
404
|
+
const timer = setTimeout(() => {
|
|
405
|
+
if (signal?.aborted) {
|
|
406
|
+
rejectForAbort();
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
409
|
+
settleReject(new ModelStreamIdleTimeoutError(`No provider stream data for ${timeoutMs}ms`));
|
|
410
|
+
}, timeoutMs);
|
|
411
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
412
|
+
if (signal?.aborted)
|
|
413
|
+
rejectForAbort();
|
|
414
|
+
next.then(settleResolve, settleReject);
|
|
415
|
+
});
|
|
416
|
+
if (result.done) {
|
|
417
|
+
completed = true;
|
|
418
|
+
return;
|
|
419
|
+
}
|
|
420
|
+
yield result.value;
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
finally {
|
|
424
|
+
if (!completed) {
|
|
425
|
+
stream.controller?.abort();
|
|
426
|
+
try {
|
|
427
|
+
const cleanup = iterator.return?.();
|
|
428
|
+
if (cleanup)
|
|
429
|
+
void Promise.resolve(cleanup).catch(() => undefined);
|
|
430
|
+
}
|
|
431
|
+
catch {
|
|
432
|
+
// Stream cancellation is best-effort while unwinding an error or abort.
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
function abortError(signal) {
|
|
438
|
+
return signal.reason ?? new Error("Model stream aborted");
|
|
333
439
|
}
|
|
334
440
|
/**
|
|
335
441
|
* Decide whether a model supports GLM "thinking" mode based on its name
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glm-client.js","sourceRoot":"","sources":["../../src/llm/glm-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"glm-client.js","sourceRoot":"","sources":["../../src/llm/glm-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** A transport EOF is not proof that a provider completed its response. */
|
|
2
|
+
export declare class IncompleteModelStreamError extends Error {
|
|
3
|
+
name: string;
|
|
4
|
+
}
|
|
5
|
+
export type TerminalReason = "stop" | "tool_calls" | "length" | "content_filter";
|
|
6
|
+
export declare function validateStreamCompletion(reason: string | undefined, calls: ReadonlyArray<{
|
|
7
|
+
id: string;
|
|
8
|
+
name: string;
|
|
9
|
+
}>): TerminalReason;
|
|
10
|
+
//# sourceMappingURL=stream-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-state.d.ts","sourceRoot":"","sources":["../../src/llm/stream-state.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,qBAAa,0BAA2B,SAAQ,KAAK;IAC1C,IAAI,SAAgC;CAC9C;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,YAAY,GAAG,QAAQ,GAAG,gBAAgB,CAAC;AAEjF,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,KAAK,EAAE,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GACjD,cAAc,CAqBhB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** A transport EOF is not proof that a provider completed its response. */
|
|
2
|
+
export class IncompleteModelStreamError extends Error {
|
|
3
|
+
name = "IncompleteModelStreamError";
|
|
4
|
+
}
|
|
5
|
+
export function validateStreamCompletion(reason, calls) {
|
|
6
|
+
if (reason !== "stop" && reason !== "tool_calls" && reason !== "length" && reason !== "content_filter") {
|
|
7
|
+
throw new IncompleteModelStreamError("Incomplete model stream: no supported terminal reason.");
|
|
8
|
+
}
|
|
9
|
+
// Truncated/filtered calls are never executable, even when their arguments
|
|
10
|
+
// happen to look complete. Their fragments are intentionally discarded.
|
|
11
|
+
if (reason === "length" || reason === "content_filter")
|
|
12
|
+
return reason;
|
|
13
|
+
if (reason === "stop" && calls.length > 0) {
|
|
14
|
+
throw new IncompleteModelStreamError("Inconsistent model stream: stop with tool-call fragments.");
|
|
15
|
+
}
|
|
16
|
+
if (reason === "tool_calls") {
|
|
17
|
+
const ids = new Set();
|
|
18
|
+
if (calls.length === 0)
|
|
19
|
+
throw new IncompleteModelStreamError("Incomplete model tool-call batch.");
|
|
20
|
+
for (const call of calls) {
|
|
21
|
+
if (!call.id.trim() || !call.name.trim() || ids.has(call.id)) {
|
|
22
|
+
throw new IncompleteModelStreamError("Incomplete or duplicate model tool-call batch.");
|
|
23
|
+
}
|
|
24
|
+
ids.add(call.id);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return reason;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=stream-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-state.js","sourceRoot":"","sources":["../../src/llm/stream-state.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAC1C,IAAI,GAAG,4BAA4B,CAAC;CAC9C;AAID,MAAM,UAAU,wBAAwB,CACtC,MAA0B,EAC1B,KAAkD;IAElD,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,gBAAgB,EAAE,CAAC;QACvG,MAAM,IAAI,0BAA0B,CAAC,wDAAwD,CAAC,CAAC;IACjG,CAAC;IACD,2EAA2E;IAC3E,wEAAwE;IACxE,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,gBAAgB;QAAE,OAAO,MAAM,CAAC;IACtE,IAAI,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,0BAA0B,CAAC,2DAA2D,CAAC,CAAC;IACpG,CAAC;IACD,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;QAC9B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,0BAA0B,CAAC,mCAAmC,CAAC,CAAC;QAClG,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC7D,MAAM,IAAI,0BAA0B,CAAC,gDAAgD,CAAC,CAAC;YACzF,CAAC;YACD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-version.d.ts","sourceRoot":"","sources":["../src/package-version.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,eAAe,QAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-version.js","sourceRoot":"","sources":["../src/package-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAMvC,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAChC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAC/C,CAAC;AAErB,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC"}
|