zcode-acp-server 0.1.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/LICENSE +201 -0
- package/README.md +167 -0
- package/README.zh-CN.md +163 -0
- package/dist/backend/client.d.ts +103 -0
- package/dist/backend/client.d.ts.map +1 -0
- package/dist/backend/client.js +344 -0
- package/dist/backend/client.js.map +1 -0
- package/dist/backend/credentials.d.ts +31 -0
- package/dist/backend/credentials.d.ts.map +1 -0
- package/dist/backend/credentials.js +93 -0
- package/dist/backend/credentials.js.map +1 -0
- package/dist/backend/index.d.ts +7 -0
- package/dist/backend/index.d.ts.map +1 -0
- package/dist/backend/index.js +6 -0
- package/dist/backend/index.js.map +1 -0
- package/dist/backend/listener.d.ts +63 -0
- package/dist/backend/listener.d.ts.map +1 -0
- package/dist/backend/listener.js +138 -0
- package/dist/backend/listener.js.map +1 -0
- package/dist/backend/resolve.d.ts +11 -0
- package/dist/backend/resolve.d.ts.map +1 -0
- package/dist/backend/resolve.js +116 -0
- package/dist/backend/resolve.js.map +1 -0
- package/dist/backend/types.d.ts +164 -0
- package/dist/backend/types.d.ts.map +1 -0
- package/dist/backend/types.js +15 -0
- package/dist/backend/types.js.map +1 -0
- package/dist/config/model-cache.d.ts +20 -0
- package/dist/config/model-cache.d.ts.map +1 -0
- package/dist/config/model-cache.js +62 -0
- package/dist/config/model-cache.js.map +1 -0
- package/dist/config/options.d.ts +36 -0
- package/dist/config/options.d.ts.map +1 -0
- package/dist/config/options.js +171 -0
- package/dist/config/options.js.map +1 -0
- package/dist/config/runtime-model.d.ts +33 -0
- package/dist/config/runtime-model.d.ts.map +1 -0
- package/dist/config/runtime-model.js +96 -0
- package/dist/config/runtime-model.js.map +1 -0
- package/dist/handlers/dispatch.d.ts +15 -0
- package/dist/handlers/dispatch.d.ts.map +1 -0
- package/dist/handlers/dispatch.js +183 -0
- package/dist/handlers/dispatch.js.map +1 -0
- package/dist/handlers/extensions.d.ts +43 -0
- package/dist/handlers/extensions.d.ts.map +1 -0
- package/dist/handlers/extensions.js +310 -0
- package/dist/handlers/extensions.js.map +1 -0
- package/dist/handlers/io.d.ts +40 -0
- package/dist/handlers/io.d.ts.map +1 -0
- package/dist/handlers/io.js +55 -0
- package/dist/handlers/io.js.map +1 -0
- package/dist/handlers/server-requests.d.ts +34 -0
- package/dist/handlers/server-requests.d.ts.map +1 -0
- package/dist/handlers/server-requests.js +357 -0
- package/dist/handlers/server-requests.js.map +1 -0
- package/dist/handlers/session.d.ts +46 -0
- package/dist/handlers/session.d.ts.map +1 -0
- package/dist/handlers/session.js +738 -0
- package/dist/handlers/session.js.map +1 -0
- package/dist/handlers/slash.d.ts +16 -0
- package/dist/handlers/slash.d.ts.map +1 -0
- package/dist/handlers/slash.js +107 -0
- package/dist/handlers/slash.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +93 -0
- package/dist/index.js.map +1 -0
- package/dist/interaction/adapter.d.ts +136 -0
- package/dist/interaction/adapter.d.ts.map +1 -0
- package/dist/interaction/adapter.js +353 -0
- package/dist/interaction/adapter.js.map +1 -0
- package/dist/server.d.ts +73 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +97 -0
- package/dist/server.js.map +1 -0
- package/dist/tasks-index.d.ts +39 -0
- package/dist/tasks-index.d.ts.map +1 -0
- package/dist/tasks-index.js +152 -0
- package/dist/tasks-index.js.map +1 -0
- package/dist/translators/event-translator.d.ts +40 -0
- package/dist/translators/event-translator.d.ts.map +1 -0
- package/dist/translators/event-translator.js +214 -0
- package/dist/translators/event-translator.js.map +1 -0
- package/dist/translators/index.d.ts +6 -0
- package/dist/translators/index.d.ts.map +1 -0
- package/dist/translators/index.js +5 -0
- package/dist/translators/index.js.map +1 -0
- package/dist/translators/projection-differ.d.ts +48 -0
- package/dist/translators/projection-differ.d.ts.map +1 -0
- package/dist/translators/projection-differ.js +239 -0
- package/dist/translators/projection-differ.js.map +1 -0
- package/dist/translators/tool-helpers.d.ts +60 -0
- package/dist/translators/tool-helpers.d.ts.map +1 -0
- package/dist/translators/tool-helpers.js +308 -0
- package/dist/translators/tool-helpers.js.map +1 -0
- package/dist/translators/types.d.ts +58 -0
- package/dist/translators/types.d.ts.map +1 -0
- package/dist/translators/types.js +27 -0
- package/dist/translators/types.js.map +1 -0
- package/dist/utils.d.ts +111 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +110 -0
- package/dist/utils.js.map +1 -0
- package/docs/ARCHITECTURE.md +299 -0
- package/docs/DEVELOPMENT.md +193 -0
- package/docs/PROTOCOL.md +649 -0
- package/docs/TROUBLESHOOTING.md +251 -0
- package/package.json +66 -0
package/docs/PROTOCOL.md
ADDED
|
@@ -0,0 +1,649 @@
|
|
|
1
|
+
# ZCode JSON-RPC Protocol
|
|
2
|
+
|
|
3
|
+
This document describes the internal JSON-RPC protocol between zcode-acp-server
|
|
4
|
+
and the ZCode CLI.
|
|
5
|
+
|
|
6
|
+
## Protocol Overview
|
|
7
|
+
|
|
8
|
+
ZCode communicates over stdio using **line-delimited JSON**. The message format
|
|
9
|
+
resembles JSON-RPC, but **does not include the `jsonrpc` field**.
|
|
10
|
+
|
|
11
|
+
### Message classification
|
|
12
|
+
|
|
13
|
+
Messages are classified by the presence of `id` and `method`:
|
|
14
|
+
|
|
15
|
+
| Combination | Type | Direction |
|
|
16
|
+
|------|------|------|
|
|
17
|
+
| `id` + no `method` | Response | zcode -> bridge |
|
|
18
|
+
| `id` + `method` | Request | bridge -> zcode or zcode -> bridge |
|
|
19
|
+
| `method` + no `id` | Notification | bidirectional |
|
|
20
|
+
|
|
21
|
+
### Request format
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"id": 1,
|
|
26
|
+
"method": "session/create",
|
|
27
|
+
"params": {
|
|
28
|
+
"workspace": {
|
|
29
|
+
"workspacePath": "/path/to/project",
|
|
30
|
+
"workspaceKey": "/path/to/project"
|
|
31
|
+
},
|
|
32
|
+
"mode": "yolo"
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Response format
|
|
38
|
+
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"id": 1,
|
|
42
|
+
"result": {
|
|
43
|
+
"session": {
|
|
44
|
+
"sessionId": "sess_abc123",
|
|
45
|
+
"title": "your prompt text..."
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Error format
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"id": 1,
|
|
56
|
+
"error": {
|
|
57
|
+
"message": "prompt is running",
|
|
58
|
+
"code": 1308
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Notification format
|
|
64
|
+
|
|
65
|
+
```json
|
|
66
|
+
{
|
|
67
|
+
"method": "session/event",
|
|
68
|
+
"params": {
|
|
69
|
+
"sessionId": "sess_abc123",
|
|
70
|
+
"seq": 42,
|
|
71
|
+
"type": "turn.started",
|
|
72
|
+
"payload": {}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Session Lifecycle Methods
|
|
78
|
+
|
|
79
|
+
### `session/create`
|
|
80
|
+
|
|
81
|
+
Create a new session.
|
|
82
|
+
|
|
83
|
+
**Request:**
|
|
84
|
+
```json
|
|
85
|
+
{
|
|
86
|
+
"id": 1,
|
|
87
|
+
"method": "session/create",
|
|
88
|
+
"params": {
|
|
89
|
+
"workspace": {
|
|
90
|
+
"workspacePath": "/path/to/project",
|
|
91
|
+
"workspaceKey": "/path/to/project"
|
|
92
|
+
},
|
|
93
|
+
"mode": "yolo"
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**Response:**
|
|
99
|
+
```json
|
|
100
|
+
{
|
|
101
|
+
"id": 1,
|
|
102
|
+
"result": {
|
|
103
|
+
"session": {
|
|
104
|
+
"sessionId": "sess_abc123",
|
|
105
|
+
"title": "",
|
|
106
|
+
"traceId": "trace_xyz789"
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### `session/list`
|
|
113
|
+
|
|
114
|
+
List all sessions.
|
|
115
|
+
|
|
116
|
+
**Request:**
|
|
117
|
+
```json
|
|
118
|
+
{
|
|
119
|
+
"id": 2,
|
|
120
|
+
"method": "session/list",
|
|
121
|
+
"params": {
|
|
122
|
+
"workspace": {
|
|
123
|
+
"workspacePath": "/path/to/project",
|
|
124
|
+
"workspaceKey": "/path/to/project"
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### `session/resume`
|
|
131
|
+
|
|
132
|
+
Resume an existing session.
|
|
133
|
+
|
|
134
|
+
**Request:**
|
|
135
|
+
```json
|
|
136
|
+
{
|
|
137
|
+
"id": 3,
|
|
138
|
+
"method": "session/resume",
|
|
139
|
+
"params": {
|
|
140
|
+
"sessionId": "sess_abc123",
|
|
141
|
+
"workspace": {
|
|
142
|
+
"workspacePath": "/path/to/project",
|
|
143
|
+
"workspaceKey": "/path/to/project"
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### `session/send`
|
|
150
|
+
|
|
151
|
+
Send a prompt.
|
|
152
|
+
|
|
153
|
+
**Request:**
|
|
154
|
+
```json
|
|
155
|
+
{
|
|
156
|
+
"id": 4,
|
|
157
|
+
"method": "session/send",
|
|
158
|
+
"params": {
|
|
159
|
+
"sessionId": "sess_abc123",
|
|
160
|
+
"content": "your prompt text"
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
**Response:**
|
|
166
|
+
```json
|
|
167
|
+
{
|
|
168
|
+
"id": 4,
|
|
169
|
+
"result": {
|
|
170
|
+
"accepted": true
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### `session/stop`
|
|
176
|
+
|
|
177
|
+
Stop the current turn (fire-and-forget).
|
|
178
|
+
|
|
179
|
+
```json
|
|
180
|
+
{
|
|
181
|
+
"method": "session/stop",
|
|
182
|
+
"params": {
|
|
183
|
+
"sessionId": "sess_abc123"
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### `session/read`
|
|
189
|
+
|
|
190
|
+
Read the session state and projection.
|
|
191
|
+
|
|
192
|
+
**Request:**
|
|
193
|
+
```json
|
|
194
|
+
{
|
|
195
|
+
"id": 5,
|
|
196
|
+
"method": "session/read",
|
|
197
|
+
"params": {
|
|
198
|
+
"sessionId": "sess_abc123"
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
**Response:**
|
|
204
|
+
```json
|
|
205
|
+
{
|
|
206
|
+
"id": 5,
|
|
207
|
+
"result": {
|
|
208
|
+
"projection": {
|
|
209
|
+
"status": "idle",
|
|
210
|
+
"contextUsed": 1234,
|
|
211
|
+
"contextWindow": 32000,
|
|
212
|
+
"totalTokenCount": 5678
|
|
213
|
+
},
|
|
214
|
+
"settings": {
|
|
215
|
+
"mode": { "current": "yolo" },
|
|
216
|
+
"model": { "current": { "modelId": "GLM-5.2" } },
|
|
217
|
+
"thoughtLevel": { "current": "high" }
|
|
218
|
+
},
|
|
219
|
+
"todos": [
|
|
220
|
+
{ "content": "Implement login", "status": "pending", "priority": "high" }
|
|
221
|
+
]
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### `session/messages`
|
|
227
|
+
|
|
228
|
+
Fetch the session's historical messages.
|
|
229
|
+
|
|
230
|
+
**Request:**
|
|
231
|
+
```json
|
|
232
|
+
{
|
|
233
|
+
"id": 6,
|
|
234
|
+
"method": "session/messages",
|
|
235
|
+
"params": {
|
|
236
|
+
"sessionId": "sess_abc123"
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
## Event Stream Subscription
|
|
242
|
+
|
|
243
|
+
### `session/subscribe`
|
|
244
|
+
|
|
245
|
+
Subscribe to a session's event push.
|
|
246
|
+
|
|
247
|
+
**Request:**
|
|
248
|
+
```json
|
|
249
|
+
{
|
|
250
|
+
"id": 7,
|
|
251
|
+
"method": "session/subscribe",
|
|
252
|
+
"params": {
|
|
253
|
+
"sessionId": "sess_abc123",
|
|
254
|
+
"deliveryKind": "desktop-continuous",
|
|
255
|
+
"includeSnapshot": true,
|
|
256
|
+
"afterSeq": 0
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
**Response:**
|
|
262
|
+
```json
|
|
263
|
+
{
|
|
264
|
+
"id": 7,
|
|
265
|
+
"result": {
|
|
266
|
+
"eventSeq": 42,
|
|
267
|
+
"snapshot": {
|
|
268
|
+
"projection": { ... },
|
|
269
|
+
"messages": [ ... ]
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
## Event Types
|
|
276
|
+
|
|
277
|
+
After subscribing, zcode pushes events via `session/event` notifications:
|
|
278
|
+
|
|
279
|
+
### `turn.started`
|
|
280
|
+
|
|
281
|
+
The turn has started.
|
|
282
|
+
|
|
283
|
+
```json
|
|
284
|
+
{
|
|
285
|
+
"method": "session/event",
|
|
286
|
+
"params": {
|
|
287
|
+
"sessionId": "sess_abc123",
|
|
288
|
+
"seq": 43,
|
|
289
|
+
"type": "turn.started",
|
|
290
|
+
"payload": {}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### `model.streaming`
|
|
296
|
+
|
|
297
|
+
Model streaming output.
|
|
298
|
+
|
|
299
|
+
```json
|
|
300
|
+
{
|
|
301
|
+
"method": "session/event",
|
|
302
|
+
"params": {
|
|
303
|
+
"sessionId": "sess_abc123",
|
|
304
|
+
"seq": 44,
|
|
305
|
+
"type": "model.streaming",
|
|
306
|
+
"payload": {
|
|
307
|
+
"kind": "text_delta",
|
|
308
|
+
"delta": "this code..."
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
`kind` can be:
|
|
315
|
+
- `text_delta`: text delta
|
|
316
|
+
- `reasoning_delta`: reasoning text delta
|
|
317
|
+
- `tool_call`: tool call declaration (caches toolName and input)
|
|
318
|
+
|
|
319
|
+
### `tool.updated`
|
|
320
|
+
|
|
321
|
+
Tool status update.
|
|
322
|
+
|
|
323
|
+
```json
|
|
324
|
+
{
|
|
325
|
+
"method": "session/event",
|
|
326
|
+
"params": {
|
|
327
|
+
"sessionId": "sess_abc123",
|
|
328
|
+
"seq": 45,
|
|
329
|
+
"type": "tool.updated",
|
|
330
|
+
"payload": {
|
|
331
|
+
"kind": "scheduled",
|
|
332
|
+
"toolCallId": "call_xyz",
|
|
333
|
+
"toolName": "Bash",
|
|
334
|
+
"input": { "command": "ls -la" }
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
`kind` can be:
|
|
341
|
+
- `scheduled`: tool scheduled
|
|
342
|
+
- `started`: tool started executing
|
|
343
|
+
- `progress`: progress update (stdoutTail / stderrTail)
|
|
344
|
+
- `result`: tool finished
|
|
345
|
+
- `error`: tool error
|
|
346
|
+
- `batch`: multiple tools finished in a batch
|
|
347
|
+
|
|
348
|
+
### `turn.completed`
|
|
349
|
+
|
|
350
|
+
The turn completed.
|
|
351
|
+
|
|
352
|
+
```json
|
|
353
|
+
{
|
|
354
|
+
"method": "session/event",
|
|
355
|
+
"params": {
|
|
356
|
+
"sessionId": "sess_abc123",
|
|
357
|
+
"seq": 46,
|
|
358
|
+
"type": "turn.completed",
|
|
359
|
+
"payload": {
|
|
360
|
+
"resultType": "success",
|
|
361
|
+
"usage": {
|
|
362
|
+
"totalTokens": 1234
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
### `turn.failed`
|
|
370
|
+
|
|
371
|
+
The turn failed.
|
|
372
|
+
|
|
373
|
+
```json
|
|
374
|
+
{
|
|
375
|
+
"method": "session/event",
|
|
376
|
+
"params": {
|
|
377
|
+
"sessionId": "sess_abc123",
|
|
378
|
+
"seq": 47,
|
|
379
|
+
"type": "turn.failed",
|
|
380
|
+
"payload": {
|
|
381
|
+
"error": {
|
|
382
|
+
"code": 1308,
|
|
383
|
+
"message": "prompt is running"
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
### `session.updated`
|
|
391
|
+
|
|
392
|
+
Session state update (usage, etc.).
|
|
393
|
+
|
|
394
|
+
```json
|
|
395
|
+
{
|
|
396
|
+
"method": "session/event",
|
|
397
|
+
"params": {
|
|
398
|
+
"sessionId": "sess_abc123",
|
|
399
|
+
"seq": 48,
|
|
400
|
+
"type": "session.updated",
|
|
401
|
+
"payload": {
|
|
402
|
+
"usage": {
|
|
403
|
+
"inputTokens": 1234
|
|
404
|
+
},
|
|
405
|
+
"contextWindow": 32000
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
## Interaction Protocol (Server -> Client)
|
|
412
|
+
|
|
413
|
+
Requests that zcode actively sends to the bridge.
|
|
414
|
+
|
|
415
|
+
### `interaction/requestPermission`
|
|
416
|
+
|
|
417
|
+
Tool permission request.
|
|
418
|
+
|
|
419
|
+
```json
|
|
420
|
+
{
|
|
421
|
+
"id": 100,
|
|
422
|
+
"method": "interaction/requestPermission",
|
|
423
|
+
"params": {
|
|
424
|
+
"requestId": "req_xyz",
|
|
425
|
+
"sessionId": "sess_abc123",
|
|
426
|
+
"toolCallId": "call_xyz",
|
|
427
|
+
"toolName": "Bash",
|
|
428
|
+
"reason": "run command",
|
|
429
|
+
"input": { "command": "rm -rf /" },
|
|
430
|
+
"options": [
|
|
431
|
+
{ "optionId": "allow", "kind": "allow_once", "name": "Allow once" },
|
|
432
|
+
{ "optionId": "deny", "kind": "deny_once", "name": "Deny" }
|
|
433
|
+
]
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
### `interaction/requestUserInput`
|
|
439
|
+
|
|
440
|
+
User input request (ExitPlanMode / AskUserQuestion).
|
|
441
|
+
|
|
442
|
+
**ExitPlanMode:**
|
|
443
|
+
```json
|
|
444
|
+
{
|
|
445
|
+
"id": 101,
|
|
446
|
+
"method": "interaction/requestUserInput",
|
|
447
|
+
"params": {
|
|
448
|
+
"requestId": "req_xyz",
|
|
449
|
+
"sessionId": "sess_abc123",
|
|
450
|
+
"toolCallId": "call_xyz",
|
|
451
|
+
"schema": { "interaction": "plan_approval" },
|
|
452
|
+
"input": { "plan": "1. Implement login\n2. Implement signup" }
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
**AskUserQuestion:**
|
|
458
|
+
```json
|
|
459
|
+
{
|
|
460
|
+
"id": 102,
|
|
461
|
+
"method": "interaction/requestUserInput",
|
|
462
|
+
"params": {
|
|
463
|
+
"requestId": "req_xyz",
|
|
464
|
+
"sessionId": "sess_abc123",
|
|
465
|
+
"toolCallId": "call_xyz",
|
|
466
|
+
"questions": [
|
|
467
|
+
{
|
|
468
|
+
"question": "Select the files to test",
|
|
469
|
+
"multiSelect": true,
|
|
470
|
+
"options": [
|
|
471
|
+
{ "label": "auth.test.ts", "value": "auth" },
|
|
472
|
+
{ "label": "user.test.ts", "value": "user" }
|
|
473
|
+
]
|
|
474
|
+
}
|
|
475
|
+
]
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
### Bridge routing (protocol negotiation)
|
|
481
|
+
|
|
482
|
+
ZCode `interaction/*` requests are routed to different ACP interaction
|
|
483
|
+
mechanisms based on client capabilities:
|
|
484
|
+
|
|
485
|
+
| Request type | Client supports elicitation.form | Client does not |
|
|
486
|
+
|---------|:------------------------:|:----------:|
|
|
487
|
+
| Tool auth (`interaction/requestPermission`) | `session/request_permission` | `session/request_permission` |
|
|
488
|
+
| ExitPlanMode (`interaction/requestUserInput` + plan_approval) | `elicitation/create` (approve/reject form) | `session/request_permission` |
|
|
489
|
+
| AskUserQuestion (`interaction/requestUserInput`) | `elicitation/create` (single form) | per-question `session/request_permission` |
|
|
490
|
+
|
|
491
|
+
**Capability detection**: at `initialize` time the client declares support via
|
|
492
|
+
`clientCapabilities.elicitation.form`. The server detects it with
|
|
493
|
+
`server.supportsElicitationForm()`.
|
|
494
|
+
|
|
495
|
+
**elicitation form example** (AskUserQuestion):
|
|
496
|
+
```json
|
|
497
|
+
{
|
|
498
|
+
"method": "elicitation/create",
|
|
499
|
+
"params": {
|
|
500
|
+
"mode": "form",
|
|
501
|
+
"sessionId": "sess_abc123",
|
|
502
|
+
"message": "Please answer 2 questions.",
|
|
503
|
+
"requestedSchema": {
|
|
504
|
+
"type": "object",
|
|
505
|
+
"properties": {
|
|
506
|
+
"q_0": {
|
|
507
|
+
"type": "string",
|
|
508
|
+
"enum": ["auth.test.ts", "user.test.ts"],
|
|
509
|
+
"title": "Select the files to test"
|
|
510
|
+
}
|
|
511
|
+
},
|
|
512
|
+
"required": ["q_0"]
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
**elicitation response** (accept/decline/cancel):
|
|
519
|
+
```json
|
|
520
|
+
{
|
|
521
|
+
"action": "accept",
|
|
522
|
+
"content": { "q_0": "auth.test.ts" }
|
|
523
|
+
}
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
## Extension Methods (0.14.8+)
|
|
527
|
+
|
|
528
|
+
### `session/fork`
|
|
529
|
+
|
|
530
|
+
Fork a new session from a checkpoint.
|
|
531
|
+
|
|
532
|
+
**Request:**
|
|
533
|
+
```json
|
|
534
|
+
{
|
|
535
|
+
"id": 8,
|
|
536
|
+
"method": "session/fork",
|
|
537
|
+
"params": {
|
|
538
|
+
"sessionId": "sess_abc123",
|
|
539
|
+
"target": { "kind": "latestCheckpoint" }
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
### `session/rewind`
|
|
545
|
+
|
|
546
|
+
Rewind to a checkpoint.
|
|
547
|
+
|
|
548
|
+
**Request:**
|
|
549
|
+
```json
|
|
550
|
+
{
|
|
551
|
+
"id": 9,
|
|
552
|
+
"method": "session/rewind",
|
|
553
|
+
"params": {
|
|
554
|
+
"sessionId": "sess_abc123",
|
|
555
|
+
"target": { "kind": "latestCheckpoint" },
|
|
556
|
+
"expectedRevision": 42
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
### `session/goal`
|
|
562
|
+
|
|
563
|
+
Read / set / replace / clear the goal.
|
|
564
|
+
|
|
565
|
+
**Request:**
|
|
566
|
+
```json
|
|
567
|
+
{
|
|
568
|
+
"id": 10,
|
|
569
|
+
"method": "session/goal",
|
|
570
|
+
"params": {
|
|
571
|
+
"sessionId": "sess_abc123",
|
|
572
|
+
"action": "set",
|
|
573
|
+
"objective": "Refactor the auth module"
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
```
|
|
577
|
+
|
|
578
|
+
`action` can be: `show`, `set`, `replace`, `clear`, `pause`, `resume`
|
|
579
|
+
|
|
580
|
+
### `session/compact`
|
|
581
|
+
|
|
582
|
+
Compact the conversation history.
|
|
583
|
+
|
|
584
|
+
**Request:**
|
|
585
|
+
```json
|
|
586
|
+
{
|
|
587
|
+
"id": 11,
|
|
588
|
+
"method": "session/compact",
|
|
589
|
+
"params": {
|
|
590
|
+
"sessionId": "sess_abc123"
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
```
|
|
594
|
+
|
|
595
|
+
### `session/steer`
|
|
596
|
+
|
|
597
|
+
Append instructions to a running turn.
|
|
598
|
+
|
|
599
|
+
**Request:**
|
|
600
|
+
```json
|
|
601
|
+
{
|
|
602
|
+
"id": 12,
|
|
603
|
+
"method": "session/steer",
|
|
604
|
+
"params": {
|
|
605
|
+
"sessionId": "sess_abc123",
|
|
606
|
+
"content": "Please use TypeScript instead of JavaScript"
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
```
|
|
610
|
+
|
|
611
|
+
### `session/setMode`
|
|
612
|
+
|
|
613
|
+
Switch the session mode.
|
|
614
|
+
|
|
615
|
+
**Request:**
|
|
616
|
+
```json
|
|
617
|
+
{
|
|
618
|
+
"id": 13,
|
|
619
|
+
"method": "session/setMode",
|
|
620
|
+
"params": {
|
|
621
|
+
"sessionId": "sess_abc123",
|
|
622
|
+
"mode": "build"
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
```
|
|
626
|
+
|
|
627
|
+
### `session/setThoughtLevel`
|
|
628
|
+
|
|
629
|
+
Set the thought level.
|
|
630
|
+
|
|
631
|
+
**Request:**
|
|
632
|
+
```json
|
|
633
|
+
{
|
|
634
|
+
"id": 14,
|
|
635
|
+
"method": "session/setThoughtLevel",
|
|
636
|
+
"params": {
|
|
637
|
+
"sessionId": "sess_abc123",
|
|
638
|
+
"thoughtLevel": "max"
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
```
|
|
642
|
+
|
|
643
|
+
## Version Compatibility
|
|
644
|
+
|
|
645
|
+
| ZCode CLI version | session/subscribe | Extension methods | Notes |
|
|
646
|
+
|---------------|-------------------|----------|------|
|
|
647
|
+
| >= 0.15.0 | Supported | All supported | Full functionality |
|
|
648
|
+
| >= 0.14.8 | Supported | Partially supported | workspace/* unavailable |
|
|
649
|
+
| 0.14.5 ~ 0.14.7 | Not supported | Not supported | Incompatible with this project |
|