@chances-ai/wire 24.0.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/dist/rpc/acp/adapter.d.ts +32 -0
- package/dist/rpc/acp/adapter.d.ts.map +1 -0
- package/dist/rpc/acp/adapter.js +185 -0
- package/dist/rpc/acp/adapter.js.map +1 -0
- package/dist/rpc/acp/engine-driver.d.ts +128 -0
- package/dist/rpc/acp/engine-driver.d.ts.map +1 -0
- package/dist/rpc/acp/engine-driver.js +550 -0
- package/dist/rpc/acp/engine-driver.js.map +1 -0
- package/dist/rpc/acp/event-map.d.ts +22 -0
- package/dist/rpc/acp/event-map.d.ts.map +1 -0
- package/dist/rpc/acp/event-map.js +205 -0
- package/dist/rpc/acp/event-map.js.map +1 -0
- package/dist/rpc/acp/load-sdk.d.ts +3 -0
- package/dist/rpc/acp/load-sdk.d.ts.map +1 -0
- package/dist/rpc/acp/load-sdk.js +24 -0
- package/dist/rpc/acp/load-sdk.js.map +1 -0
- package/dist/rpc/acp/workspace-query.d.ts +41 -0
- package/dist/rpc/acp/workspace-query.d.ts.map +1 -0
- package/dist/rpc/acp/workspace-query.js +89 -0
- package/dist/rpc/acp/workspace-query.js.map +1 -0
- package/dist/rpc/driver.d.ts +42 -0
- package/dist/rpc/driver.d.ts.map +1 -0
- package/dist/rpc/driver.js +7 -0
- package/dist/rpc/driver.js.map +1 -0
- package/dist/rpc/event-map.d.ts +8 -0
- package/dist/rpc/event-map.d.ts.map +1 -0
- package/dist/rpc/event-map.js +91 -0
- package/dist/rpc/event-map.js.map +1 -0
- package/dist/rpc/index.d.ts +13 -0
- package/dist/rpc/index.d.ts.map +1 -0
- package/dist/rpc/index.js +18 -0
- package/dist/rpc/index.js.map +1 -0
- package/dist/rpc/lines.d.ts +2 -0
- package/dist/rpc/lines.d.ts.map +1 -0
- package/dist/rpc/lines.js +24 -0
- package/dist/rpc/lines.js.map +1 -0
- package/dist/rpc/protocol.d.ts +315 -0
- package/dist/rpc/protocol.d.ts.map +1 -0
- package/dist/rpc/protocol.js +70 -0
- package/dist/rpc/protocol.js.map +1 -0
- package/dist/rpc/rpc-server.d.ts +56 -0
- package/dist/rpc/rpc-server.d.ts.map +1 -0
- package/dist/rpc/rpc-server.js +305 -0
- package/dist/rpc/rpc-server.js.map +1 -0
- package/dist/rpc/stdout-guard.d.ts +5 -0
- package/dist/rpc/stdout-guard.d.ts.map +1 -0
- package/dist/rpc/stdout-guard.js +31 -0
- package/dist/rpc/stdout-guard.js.map +1 -0
- package/dist/rpc/writer.d.ts +34 -0
- package/dist/rpc/writer.d.ts.map +1 -0
- package/dist/rpc/writer.js +85 -0
- package/dist/rpc/writer.js.map +1 -0
- package/dist/serve/acp-session-host.d.ts +120 -0
- package/dist/serve/acp-session-host.d.ts.map +1 -0
- package/dist/serve/acp-session-host.js +276 -0
- package/dist/serve/acp-session-host.js.map +1 -0
- package/dist/serve/auth.d.ts +21 -0
- package/dist/serve/auth.d.ts.map +1 -0
- package/dist/serve/auth.js +58 -0
- package/dist/serve/auth.js.map +1 -0
- package/dist/serve/highlight.d.ts +25 -0
- package/dist/serve/highlight.d.ts.map +1 -0
- package/dist/serve/highlight.js +28 -0
- package/dist/serve/highlight.js.map +1 -0
- package/dist/serve/index.d.ts +14 -0
- package/dist/serve/index.d.ts.map +1 -0
- package/dist/serve/index.js +23 -0
- package/dist/serve/index.js.map +1 -0
- package/dist/serve/pairing.d.ts +25 -0
- package/dist/serve/pairing.d.ts.map +1 -0
- package/dist/serve/pairing.js +10 -0
- package/dist/serve/pairing.js.map +1 -0
- package/dist/serve/relay-frames.d.ts +29 -0
- package/dist/serve/relay-frames.d.ts.map +1 -0
- package/dist/serve/relay-frames.js +54 -0
- package/dist/serve/relay-frames.js.map +1 -0
- package/dist/serve/relay.d.ts +146 -0
- package/dist/serve/relay.d.ts.map +1 -0
- package/dist/serve/relay.js +475 -0
- package/dist/serve/relay.js.map +1 -0
- package/dist/serve/replay-hub.d.ts +102 -0
- package/dist/serve/replay-hub.d.ts.map +1 -0
- package/dist/serve/replay-hub.js +176 -0
- package/dist/serve/replay-hub.js.map +1 -0
- package/dist/serve/tls.d.ts +20 -0
- package/dist/serve/tls.d.ts.map +1 -0
- package/dist/serve/tls.js +64 -0
- package/dist/serve/tls.js.map +1 -0
- package/dist/serve/ws-transport.d.ts +64 -0
- package/dist/serve/ws-transport.d.ts.map +1 -0
- package/dist/serve/ws-transport.js +92 -0
- package/dist/serve/ws-transport.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
// Pure mapping: internal `AppEvent` → ACP standard `SessionUpdate[]` (M3 /
|
|
2
|
+
// docs/6.4a §4 commit 1). Upgraded from the lossy 3-variant v1 adapter to the
|
|
3
|
+
// full set of AppEvents that have a STANDARD ACP `SessionUpdate` equivalent.
|
|
4
|
+
// Returns an ARRAY (one AppEvent may yield 0/1 updates; the array shape leaves
|
|
5
|
+
// room for 1:many without a later signature churn and lets every caller
|
|
6
|
+
// uniformly `for (const u of mapEventToAcp(...))`).
|
|
7
|
+
//
|
|
8
|
+
// What maps here (standard ACP SessionUpdate):
|
|
9
|
+
// assistant:delta → agent_message_chunk
|
|
10
|
+
// tool:call → tool_call (kind + locations + rawInput)
|
|
11
|
+
// tool:result → tool_call_update (status + content + rawOutput)
|
|
12
|
+
// tool:chunk → tool_call_update (live-PTY text + _meta.chances.chunk) [toolChunks]
|
|
13
|
+
// usage → usage_update (cost; full per-call numbers in _meta.chances.usage)
|
|
14
|
+
//
|
|
15
|
+
// What does NOT map to a standard SessionUpdate (→ `[]`):
|
|
16
|
+
// - compaction:start/end · subagent:done · error → chances-only; the framing
|
|
17
|
+
// layer (docs/6.4a §3, commit 2) emits these as `_chances/unstable/*`
|
|
18
|
+
// extension notifications (a plain ACP client ignores the unknown method;
|
|
19
|
+
// ours reads `_meta.chances`). They are NOT SessionUpdates — every variant
|
|
20
|
+
// needs a payload, there is no bare-`_meta` update.
|
|
21
|
+
// - turn:start / turn:end → ACP has no explicit turn boundary; the turn is the
|
|
22
|
+
// `session/prompt` request lifetime, settled by its response (framing layer).
|
|
23
|
+
// - assistant:message → the accumulation of `assistant:delta` chunks (no end marker).
|
|
24
|
+
// - usage:turn → folded into the `PromptResponse.usage` at turn end (framing layer).
|
|
25
|
+
// - tool:permission → the resolver round-trip's `session/request_permission` is the ask.
|
|
26
|
+
// - log → routed to stderr (stdout purity).
|
|
27
|
+
//
|
|
28
|
+
// HONEST SCOPE: chances' engine emits NO thinking/thought events and NO
|
|
29
|
+
// todo/plan events, so ACP's `agent_thought_chunk` and `plan` have no source to
|
|
30
|
+
// map from today — they are deliberate extension points (wire them when the
|
|
31
|
+
// engine grows those events). Likewise `tool:result` carries a plain-text
|
|
32
|
+
// `output`, not a structured old/new pair, so we surface it as text content +
|
|
33
|
+
// `rawOutput`, NOT an ACP `diff` block.
|
|
34
|
+
//
|
|
35
|
+
// `import type` only — erased at compile, so this file is safe when the optional
|
|
36
|
+
// `@agentclientprotocol/sdk` peer is absent.
|
|
37
|
+
/** Cap the TEXT we surface as displayable content so one giant tool output
|
|
38
|
+
* can't bloat the transcript (oh-my-pi's `ACP_TEXT_LIMIT`). The COMPLETE
|
|
39
|
+
* output still rides untruncated in `rawOutput`, so no data is lost. */
|
|
40
|
+
const TEXT_CAP = 4000;
|
|
41
|
+
export function mapEventToAcp(e, opts) {
|
|
42
|
+
switch (e.type) {
|
|
43
|
+
case "assistant:delta":
|
|
44
|
+
return [{ sessionUpdate: "agent_message_chunk", content: { type: "text", text: e.text } }];
|
|
45
|
+
case "tool:call": {
|
|
46
|
+
const locations = locationsFromArgs(e.args);
|
|
47
|
+
return [
|
|
48
|
+
{
|
|
49
|
+
sessionUpdate: "tool_call",
|
|
50
|
+
toolCallId: e.callId,
|
|
51
|
+
title: e.name,
|
|
52
|
+
kind: toolKind(e.name),
|
|
53
|
+
status: "pending",
|
|
54
|
+
rawInput: e.args ?? {},
|
|
55
|
+
...(locations.length > 0 ? { locations } : {}),
|
|
56
|
+
},
|
|
57
|
+
];
|
|
58
|
+
}
|
|
59
|
+
case "tool:result":
|
|
60
|
+
return [
|
|
61
|
+
{
|
|
62
|
+
sessionUpdate: "tool_call_update",
|
|
63
|
+
toolCallId: e.callId,
|
|
64
|
+
status: e.ok ? "completed" : "failed",
|
|
65
|
+
content: [{ type: "content", content: { type: "text", text: cap(e.output) } }],
|
|
66
|
+
rawOutput: e.output,
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
case "tool:chunk":
|
|
70
|
+
if (!opts.toolChunks)
|
|
71
|
+
return [];
|
|
72
|
+
return [
|
|
73
|
+
{
|
|
74
|
+
sessionUpdate: "tool_call_update",
|
|
75
|
+
toolCallId: e.callId,
|
|
76
|
+
content: [{ type: "content", content: { type: "text", text: e.text } }],
|
|
77
|
+
// Live-PTY fidelity (seq/bytes/exit) an ACP-only client ignores.
|
|
78
|
+
_meta: { chances: { chunk: chunkMeta(e) } },
|
|
79
|
+
},
|
|
80
|
+
];
|
|
81
|
+
case "usage":
|
|
82
|
+
return [
|
|
83
|
+
{
|
|
84
|
+
sessionUpdate: "usage_update",
|
|
85
|
+
used: e.inputTokens,
|
|
86
|
+
size: opts.contextWindow ?? e.inputTokens,
|
|
87
|
+
cost: { amount: e.costUsd, currency: "USD" },
|
|
88
|
+
// Full per-call numbers (output + model) an ACP-only client ignores;
|
|
89
|
+
// ours reads them for granular accounting.
|
|
90
|
+
_meta: { chances: { usage: { model: e.model, inputTokens: e.inputTokens, outputTokens: e.outputTokens } } },
|
|
91
|
+
},
|
|
92
|
+
];
|
|
93
|
+
// chances-only fidelity → extension notifications (framing layer), not a
|
|
94
|
+
// standard SessionUpdate. Out-of-band / folded events → dropped here.
|
|
95
|
+
case "compaction:start":
|
|
96
|
+
case "compaction:end":
|
|
97
|
+
case "subagent:done":
|
|
98
|
+
case "error":
|
|
99
|
+
case "assistant:reset":
|
|
100
|
+
case "turn:start":
|
|
101
|
+
case "turn:end":
|
|
102
|
+
case "assistant:message":
|
|
103
|
+
case "usage:turn":
|
|
104
|
+
case "tool:permission":
|
|
105
|
+
case "log":
|
|
106
|
+
return [];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* chances-only fidelity (no standard ACP `SessionUpdate`) → the `_meta.chances`
|
|
111
|
+
* payload of a `_chances/unstable/event` extension notification, or `null` if `e`
|
|
112
|
+
* is not one of these. SHARED by the relay `AcpEngineDriver` + the stdio Zed
|
|
113
|
+
* adapter so both ACP transports carry compaction/subagent/error identically
|
|
114
|
+
* (codex M3 SHOULD — no per-transport drift). A plain ACP client ignores the
|
|
115
|
+
* unknown method; a chances-aware one reads `_meta.chances`.
|
|
116
|
+
*/
|
|
117
|
+
export function chancesEventMeta(e) {
|
|
118
|
+
switch (e.type) {
|
|
119
|
+
case "compaction:start":
|
|
120
|
+
return { compaction: { phase: "start", reason: e.reason, beforeTokens: e.beforeTokens } };
|
|
121
|
+
case "compaction:end":
|
|
122
|
+
return {
|
|
123
|
+
compaction: {
|
|
124
|
+
phase: "end",
|
|
125
|
+
reason: e.reason,
|
|
126
|
+
ok: e.ok,
|
|
127
|
+
...(e.savedTokens !== undefined ? { savedTokens: e.savedTokens } : {}),
|
|
128
|
+
durationMs: e.durationMs,
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
case "subagent:done":
|
|
132
|
+
return {
|
|
133
|
+
subagent: {
|
|
134
|
+
taskId: e.taskId,
|
|
135
|
+
agentName: e.agentName,
|
|
136
|
+
status: e.status,
|
|
137
|
+
durationMs: e.durationMs,
|
|
138
|
+
...(e.tokens ? { tokens: e.tokens } : {}),
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
case "error":
|
|
142
|
+
return { error: { code: e.code, message: e.message } };
|
|
143
|
+
case "assistant:reset":
|
|
144
|
+
// (6.5b review) No standard ACP SessionUpdate undoes an emitted
|
|
145
|
+
// `agent_message_chunk`, so a retry restream rides this extension event;
|
|
146
|
+
// a chances-aware client drops its in-flight partial, a plain ACP client
|
|
147
|
+
// ignores the unknown method (and tolerates the duplicate).
|
|
148
|
+
return { reset: { turnId: e.turnId } };
|
|
149
|
+
default:
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/** Map a chances tool name to the closest ACP tool category (icon/UI hint). */
|
|
154
|
+
function toolKind(name) {
|
|
155
|
+
if (name.startsWith("mcp__"))
|
|
156
|
+
return "other";
|
|
157
|
+
switch (name) {
|
|
158
|
+
case "read":
|
|
159
|
+
case "lsp":
|
|
160
|
+
return "read";
|
|
161
|
+
case "write":
|
|
162
|
+
case "edit":
|
|
163
|
+
return "edit";
|
|
164
|
+
case "bash":
|
|
165
|
+
case "pty":
|
|
166
|
+
return "execute";
|
|
167
|
+
case "grep":
|
|
168
|
+
case "glob":
|
|
169
|
+
return "search";
|
|
170
|
+
case "web_fetch":
|
|
171
|
+
return "fetch";
|
|
172
|
+
default:
|
|
173
|
+
return "other";
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/** Pull a file path out of a tool call's args for ACP "follow-along" locations.
|
|
177
|
+
* Best-effort: recognises the path-shaped keys our file tools use. Paths are
|
|
178
|
+
* surfaced verbatim (resolving relative→absolute against the session cwd is a
|
|
179
|
+
* future refinement; most file tools already pass an absolute path). */
|
|
180
|
+
function locationsFromArgs(args) {
|
|
181
|
+
if (!args || typeof args !== "object")
|
|
182
|
+
return [];
|
|
183
|
+
const rec = args;
|
|
184
|
+
for (const key of ["path", "file_path", "filePath", "file"]) {
|
|
185
|
+
const v = rec[key];
|
|
186
|
+
if (typeof v === "string" && v.length > 0)
|
|
187
|
+
return [{ path: v }];
|
|
188
|
+
}
|
|
189
|
+
return [];
|
|
190
|
+
}
|
|
191
|
+
function chunkMeta(e) {
|
|
192
|
+
return {
|
|
193
|
+
seq: e.seq,
|
|
194
|
+
bytes: e.bytes,
|
|
195
|
+
...(e.dropped !== undefined ? { dropped: e.dropped } : {}),
|
|
196
|
+
...(e.terminal !== undefined ? { terminal: e.terminal } : {}),
|
|
197
|
+
...(e.state !== undefined ? { state: e.state } : {}),
|
|
198
|
+
...(e.exitCode !== undefined ? { exitCode: e.exitCode } : {}),
|
|
199
|
+
...(e.reason !== undefined ? { reason: e.reason } : {}),
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
function cap(text) {
|
|
203
|
+
return text.length > TEXT_CAP ? `${text.slice(0, TEXT_CAP)}\n…[truncated]` : text;
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=event-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-map.js","sourceRoot":"","sources":["../../../src/rpc/acp/event-map.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,8EAA8E;AAC9E,6EAA6E;AAC7E,+EAA+E;AAC/E,wEAAwE;AACxE,oDAAoD;AACpD,EAAE;AACF,+CAA+C;AAC/C,0CAA0C;AAC1C,sEAAsE;AACtE,uEAAuE;AACvE,4FAA4F;AAC5F,6FAA6F;AAC7F,EAAE;AACF,0DAA0D;AAC1D,+EAA+E;AAC/E,0EAA0E;AAC1E,8EAA8E;AAC9E,+EAA+E;AAC/E,wDAAwD;AACxD,iFAAiF;AACjF,kFAAkF;AAClF,wFAAwF;AACxF,uFAAuF;AACvF,2FAA2F;AAC3F,8CAA8C;AAC9C,EAAE;AACF,wEAAwE;AACxE,gFAAgF;AAChF,4EAA4E;AAC5E,0EAA0E;AAC1E,8EAA8E;AAC9E,wCAAwC;AACxC,EAAE;AACF,iFAAiF;AACjF,6CAA6C;AAe7C;;yEAEyE;AACzE,MAAM,QAAQ,GAAG,IAAI,CAAC;AAEtB,MAAM,UAAU,aAAa,CAAC,CAAW,EAAE,IAAmB;IAC5D,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,iBAAiB;YACpB,OAAO,CAAC,EAAE,aAAa,EAAE,qBAAqB,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAE7F,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5C,OAAO;gBACL;oBACE,aAAa,EAAE,WAAW;oBAC1B,UAAU,EAAE,CAAC,CAAC,MAAM;oBACpB,KAAK,EAAE,CAAC,CAAC,IAAI;oBACb,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;oBACtB,MAAM,EAAE,SAAS;oBACjB,QAAQ,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;oBACtB,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC/C;aACF,CAAC;QACJ,CAAC;QAED,KAAK,aAAa;YAChB,OAAO;gBACL;oBACE,aAAa,EAAE,kBAAkB;oBACjC,UAAU,EAAE,CAAC,CAAC,MAAM;oBACpB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ;oBACrC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;oBAC9E,SAAS,EAAE,CAAC,CAAC,MAAM;iBACpB;aACF,CAAC;QAEJ,KAAK,YAAY;YACf,IAAI,CAAC,IAAI,CAAC,UAAU;gBAAE,OAAO,EAAE,CAAC;YAChC,OAAO;gBACL;oBACE,aAAa,EAAE,kBAAkB;oBACjC,UAAU,EAAE,CAAC,CAAC,MAAM;oBACpB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;oBACvE,iEAAiE;oBACjE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE;iBAC5C;aACF,CAAC;QAEJ,KAAK,OAAO;YACV,OAAO;gBACL;oBACE,aAAa,EAAE,cAAc;oBAC7B,IAAI,EAAE,CAAC,CAAC,WAAW;oBACnB,IAAI,EAAE,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,WAAW;oBACzC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE;oBAC5C,qEAAqE;oBACrE,2CAA2C;oBAC3C,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,EAAE,EAAE;iBAC5G;aACF,CAAC;QAEJ,yEAAyE;QACzE,sEAAsE;QACtE,KAAK,kBAAkB,CAAC;QACxB,KAAK,gBAAgB,CAAC;QACtB,KAAK,eAAe,CAAC;QACrB,KAAK,OAAO,CAAC;QACb,KAAK,iBAAiB,CAAC;QACvB,KAAK,YAAY,CAAC;QAClB,KAAK,UAAU,CAAC;QAChB,KAAK,mBAAmB,CAAC;QACzB,KAAK,YAAY,CAAC;QAClB,KAAK,iBAAiB,CAAC;QACvB,KAAK,KAAK;YACR,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,CAAW;IAC1C,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,kBAAkB;YACrB,OAAO,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC;QAC5F,KAAK,gBAAgB;YACnB,OAAO;gBACL,UAAU,EAAE;oBACV,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,EAAE,EAAE,CAAC,CAAC,EAAE;oBACR,GAAG,CAAC,CAAC,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACtE,UAAU,EAAE,CAAC,CAAC,UAAU;iBACzB;aACF,CAAC;QACJ,KAAK,eAAe;YAClB,OAAO;gBACL,QAAQ,EAAE;oBACR,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,SAAS,EAAE,CAAC,CAAC,SAAS;oBACtB,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC1C;aACF,CAAC;QACJ,KAAK,OAAO;YACV,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QACzD,KAAK,iBAAiB;YACpB,gEAAgE;YAChE,yEAAyE;YACzE,yEAAyE;YACzE,4DAA4D;YAC5D,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACzC;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAC7C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK;YACR,OAAO,MAAM,CAAC;QAChB,KAAK,OAAO,CAAC;QACb,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK;YACR,OAAO,SAAS,CAAC;QACnB,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC;QAClB,KAAK,WAAW;YACd,OAAO,OAAO,CAAC;QACjB;YACE,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;yEAGyE;AACzE,SAAS,iBAAiB,CAAC,IAAa;IACtC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACjD,MAAM,GAAG,GAAG,IAA+B,CAAC;IAC5C,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC;QAC5D,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,SAAS,CAAC,CAA4C;IAC7D,OAAO;QACL,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,GAAG,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,GAAG,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxD,CAAC;AACJ,CAAC;AAED,SAAS,GAAG,CAAC,IAAY;IACvB,OAAO,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;AACpF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-sdk.d.ts","sourceRoot":"","sources":["../../../src/rpc/acp/load-sdk.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,MAAM,GAAG,cAAc,0BAA0B,CAAC,CAAC;AAE/D,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAazD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Computed-specifier lazy load of the optional `@agentclientprotocol/sdk`
|
|
2
|
+
// peer — same pattern as 4.2 LSP's `vscode-jsonrpc` and 3.6 OTel's SDK. A
|
|
3
|
+
// literal `import("@agentclientprotocol/sdk")` would make `bun build
|
|
4
|
+
// --compile` try to statically resolve the peer even though it's optional;
|
|
5
|
+
// building the specifier from string parts keeps the bundler's static
|
|
6
|
+
// resolver blind, so the binary compiles whether or not the SDK is installed
|
|
7
|
+
// (`scripts/smoke-compile-rpc.ts` gates both permutations). Returns null when
|
|
8
|
+
// the peer is absent — `chances acp` then exits with install guidance.
|
|
9
|
+
export async function loadAcpSdk() {
|
|
10
|
+
try {
|
|
11
|
+
const specifier = ["@agentclientprotocol", "sdk"].join("/");
|
|
12
|
+
const mod = (await import(specifier));
|
|
13
|
+
// Minimal shape check — a partial/incompatible install returns null
|
|
14
|
+
// rather than crashing later inside the adapter.
|
|
15
|
+
if (typeof mod.AgentSideConnection !== "function") {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
return mod;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=load-sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-sdk.js","sourceRoot":"","sources":["../../../src/rpc/acp/load-sdk.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,0EAA0E;AAC1E,qEAAqE;AACrE,2EAA2E;AAC3E,sEAAsE;AACtE,6EAA6E;AAC7E,8EAA8E;AAC9E,uEAAuE;AAIvE,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAW,CAAC;QAChD,oEAAoE;QACpE,iDAAiD;QACjD,IAAI,OAAQ,GAAyC,CAAC,mBAAmB,KAAK,UAAU,EAAE,CAAC;YACzF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* (v23 M5 / docs/6.6 §2) The wire contract for the read-only workspace queries
|
|
3
|
+
* that back the 3-pane IDE — the method-name constants + a single dispatcher
|
|
4
|
+
* reused by the relay (`@chances-ai/serve` `AcpSessionHost`, which intercepts
|
|
5
|
+
* these and answers via a targeted off-ring `replyTo`).
|
|
6
|
+
*
|
|
7
|
+
* The `AcpEngineDriver` does NOT handle these (it stays a turn-pure runner); it
|
|
8
|
+
* only advertises the `workspaceQueries` capability when its host supports them.
|
|
9
|
+
* stdio transports (`chances acp` Zed / `chances rpc`) never advertise them, so a
|
|
10
|
+
* conformant client won't send them; a rogue send falls to `methodNotFound`.
|
|
11
|
+
*
|
|
12
|
+
* The queries are READ-ONLY and NON-privileged: a lease viewer may browse the
|
|
13
|
+
* workspace (same tier as `initialize`/`get_state`/`ping`).
|
|
14
|
+
*/
|
|
15
|
+
import type { EngineHost } from "../driver.js";
|
|
16
|
+
/** `_chances/unstable/*` method names (mirroring goose's `_goose/unstable/*`). */
|
|
17
|
+
export declare const WORKSPACE_QUERY_METHODS: {
|
|
18
|
+
readonly listFiles: "_chances/unstable/list_files";
|
|
19
|
+
readonly readFile: "_chances/unstable/read_file";
|
|
20
|
+
readonly gitStatus: "_chances/unstable/git_status";
|
|
21
|
+
readonly gitDiff: "_chances/unstable/git_diff";
|
|
22
|
+
};
|
|
23
|
+
/** True for the four read-only query methods. */
|
|
24
|
+
export declare function isWorkspaceQueryMethod(method: string): boolean;
|
|
25
|
+
/** True when a host exposes the query primitives (⇒ advertise + intercept). */
|
|
26
|
+
export declare function hostSupportsWorkspaceQueries(host: EngineHost): boolean;
|
|
27
|
+
export interface QueryOutcome {
|
|
28
|
+
result?: unknown;
|
|
29
|
+
error?: {
|
|
30
|
+
code: number;
|
|
31
|
+
message: string;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Validate params, call the matching `host.query*`, and shape a JSON-RPC
|
|
36
|
+
* result/error. A `WorkspaceEscapeError` (path outside the workspace) maps to
|
|
37
|
+
* `invalidParams`; a missing primitive to `methodNotFound`; any other throw to
|
|
38
|
+
* `serverError`. The caller writes the response (the relay via `replyTo`).
|
|
39
|
+
*/
|
|
40
|
+
export declare function dispatchWorkspaceQuery(host: EngineHost, method: string, params: unknown, signal: AbortSignal): Promise<QueryOutcome>;
|
|
41
|
+
//# sourceMappingURL=workspace-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-query.d.ts","sourceRoot":"","sources":["../../../src/rpc/acp/workspace-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,kFAAkF;AAClF,eAAO,MAAM,uBAAuB;;;;;CAK1B,CAAC;AAIX,iDAAiD;AACjD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,+EAA+E;AAC/E,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAOtE;AAKD,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C;AAUD;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,YAAY,CAAC,CAgCvB"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* (v23 M5 / docs/6.6 §2) The wire contract for the read-only workspace queries
|
|
3
|
+
* that back the 3-pane IDE — the method-name constants + a single dispatcher
|
|
4
|
+
* reused by the relay (`@chances-ai/serve` `AcpSessionHost`, which intercepts
|
|
5
|
+
* these and answers via a targeted off-ring `replyTo`).
|
|
6
|
+
*
|
|
7
|
+
* The `AcpEngineDriver` does NOT handle these (it stays a turn-pure runner); it
|
|
8
|
+
* only advertises the `workspaceQueries` capability when its host supports them.
|
|
9
|
+
* stdio transports (`chances acp` Zed / `chances rpc`) never advertise them, so a
|
|
10
|
+
* conformant client won't send them; a rogue send falls to `methodNotFound`.
|
|
11
|
+
*
|
|
12
|
+
* The queries are READ-ONLY and NON-privileged: a lease viewer may browse the
|
|
13
|
+
* workspace (same tier as `initialize`/`get_state`/`ping`).
|
|
14
|
+
*/
|
|
15
|
+
import { WorkspaceEscapeError } from "@chances-ai/engine/core";
|
|
16
|
+
/** `_chances/unstable/*` method names (mirroring goose's `_goose/unstable/*`). */
|
|
17
|
+
export const WORKSPACE_QUERY_METHODS = {
|
|
18
|
+
listFiles: "_chances/unstable/list_files",
|
|
19
|
+
readFile: "_chances/unstable/read_file",
|
|
20
|
+
gitStatus: "_chances/unstable/git_status",
|
|
21
|
+
gitDiff: "_chances/unstable/git_diff",
|
|
22
|
+
};
|
|
23
|
+
const QUERY_METHOD_SET = new Set(Object.values(WORKSPACE_QUERY_METHODS));
|
|
24
|
+
/** True for the four read-only query methods. */
|
|
25
|
+
export function isWorkspaceQueryMethod(method) {
|
|
26
|
+
return QUERY_METHOD_SET.has(method);
|
|
27
|
+
}
|
|
28
|
+
/** True when a host exposes the query primitives (⇒ advertise + intercept). */
|
|
29
|
+
export function hostSupportsWorkspaceQueries(host) {
|
|
30
|
+
return (typeof host.queryListFiles === "function" &&
|
|
31
|
+
typeof host.queryReadFile === "function" &&
|
|
32
|
+
typeof host.queryGitStatus === "function" &&
|
|
33
|
+
typeof host.queryGitDiff === "function");
|
|
34
|
+
}
|
|
35
|
+
/** JSON-RPC standard error codes (a subset). */
|
|
36
|
+
const ERR = { methodNotFound: -32601, invalidParams: -32602, serverError: -32000 };
|
|
37
|
+
function asObject(params) {
|
|
38
|
+
return params && typeof params === "object" ? params : {};
|
|
39
|
+
}
|
|
40
|
+
function optString(o, key) {
|
|
41
|
+
const v = o[key];
|
|
42
|
+
return typeof v === "string" ? v : undefined;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Validate params, call the matching `host.query*`, and shape a JSON-RPC
|
|
46
|
+
* result/error. A `WorkspaceEscapeError` (path outside the workspace) maps to
|
|
47
|
+
* `invalidParams`; a missing primitive to `methodNotFound`; any other throw to
|
|
48
|
+
* `serverError`. The caller writes the response (the relay via `replyTo`).
|
|
49
|
+
*/
|
|
50
|
+
export async function dispatchWorkspaceQuery(host, method, params, signal) {
|
|
51
|
+
const o = asObject(params);
|
|
52
|
+
try {
|
|
53
|
+
switch (method) {
|
|
54
|
+
case WORKSPACE_QUERY_METHODS.listFiles: {
|
|
55
|
+
if (!host.queryListFiles)
|
|
56
|
+
return { error: { code: ERR.methodNotFound, message: "list_files unsupported" } };
|
|
57
|
+
const dir = optString(o, "dir") ?? ".";
|
|
58
|
+
return { result: await host.queryListFiles(dir, signal) };
|
|
59
|
+
}
|
|
60
|
+
case WORKSPACE_QUERY_METHODS.readFile: {
|
|
61
|
+
if (!host.queryReadFile)
|
|
62
|
+
return { error: { code: ERR.methodNotFound, message: "read_file unsupported" } };
|
|
63
|
+
const path = optString(o, "path");
|
|
64
|
+
if (path === undefined)
|
|
65
|
+
return { error: { code: ERR.invalidParams, message: "read_file requires a string `path`" } };
|
|
66
|
+
return { result: await host.queryReadFile(path, signal) };
|
|
67
|
+
}
|
|
68
|
+
case WORKSPACE_QUERY_METHODS.gitStatus: {
|
|
69
|
+
if (!host.queryGitStatus)
|
|
70
|
+
return { error: { code: ERR.methodNotFound, message: "git_status unsupported" } };
|
|
71
|
+
return { result: await host.queryGitStatus(signal) };
|
|
72
|
+
}
|
|
73
|
+
case WORKSPACE_QUERY_METHODS.gitDiff: {
|
|
74
|
+
if (!host.queryGitDiff)
|
|
75
|
+
return { error: { code: ERR.methodNotFound, message: "git_diff unsupported" } };
|
|
76
|
+
return { result: await host.queryGitDiff(optString(o, "path"), signal) };
|
|
77
|
+
}
|
|
78
|
+
default:
|
|
79
|
+
return { error: { code: ERR.methodNotFound, message: `unknown query: ${method}` } };
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
if (e instanceof WorkspaceEscapeError) {
|
|
84
|
+
return { error: { code: ERR.invalidParams, message: e.message } };
|
|
85
|
+
}
|
|
86
|
+
return { error: { code: ERR.serverError, message: e.message ?? String(e) } };
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=workspace-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-query.js","sourceRoot":"","sources":["../../../src/rpc/acp/workspace-query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { AgentResult, GitDiffResult, GitStatusResult, ListFilesResult, ReadFileResult } from "@chances-ai/engine/core";
|
|
2
|
+
import type { ApprovalState, CancellationToken, EventBus, ModelSelection } from "@chances-ai/runtime";
|
|
3
|
+
import type { PermissionResolver } from "@chances-ai/engine/tools";
|
|
4
|
+
import type { ModelInfo } from "./protocol.js";
|
|
5
|
+
/** A live engine bound to one permission resolver + one session. */
|
|
6
|
+
export interface BuiltEngine {
|
|
7
|
+
/** Run one turn. The server mints a fresh `CancellationToken` per call
|
|
8
|
+
* (codex C10 — avoids a stale-AbortController footgun). */
|
|
9
|
+
runTurn(prompt: string, token: CancellationToken): Promise<AgentResult>;
|
|
10
|
+
/** The bus the server subscribes to for outbound frames. */
|
|
11
|
+
bus: EventBus;
|
|
12
|
+
/** Mutable model preference; `set_model` mutates it (between turns only). */
|
|
13
|
+
selection: ModelSelection;
|
|
14
|
+
/** (v22) Mutable session approval mode; the `_chances/unstable/set_approval`
|
|
15
|
+
* extension mutates it so a GUI client can drive the same default/auto-edit/
|
|
16
|
+
* plan/yolo cycle the TUI's Shift+Tab does. Optional — a host that doesn't
|
|
17
|
+
* expose an approval holder (e.g. a test mock) simply omits it, and the wire
|
|
18
|
+
* reports `approvalMode: "default"` + rejects `set_approval`. */
|
|
19
|
+
approval?: ApprovalState;
|
|
20
|
+
/** Stable session id surfaced in the `ready` handshake + `turn_start`. */
|
|
21
|
+
sessionId: string;
|
|
22
|
+
}
|
|
23
|
+
/** Implemented by apps/cli. The server owns the permission round-trip, so it
|
|
24
|
+
* constructs the resolver and hands it here at build time. */
|
|
25
|
+
export interface EngineHost {
|
|
26
|
+
/** Build (once, at session start) an engine bound to `resolver`. */
|
|
27
|
+
build(resolver: PermissionResolver): BuiltEngine;
|
|
28
|
+
/** Models for the `ready` handshake + the `get_models` command. */
|
|
29
|
+
listModels(): ModelInfo[];
|
|
30
|
+
/** Tear down the shared runtime context. apps/cli runs the canonical CLI
|
|
31
|
+
* shutdown order (backgroundTasks → ptySessions → mcp → plugins → otel). */
|
|
32
|
+
dispose(): Promise<void>;
|
|
33
|
+
/** Immediate children of `dir` (one level, lazy), workspace-contained. */
|
|
34
|
+
queryListFiles?(dir: string, signal: AbortSignal): Promise<ListFilesResult>;
|
|
35
|
+
/** A workspace file's contents (capped + binary-guarded), workspace-contained. */
|
|
36
|
+
queryReadFile?(path: string, signal: AbortSignal): Promise<ReadFileResult>;
|
|
37
|
+
/** `git status` (branch + ahead/behind + changed files); soft `{repo:false}`. */
|
|
38
|
+
queryGitStatus?(signal: AbortSignal): Promise<GitStatusResult>;
|
|
39
|
+
/** `git diff [path]` (capped) + shortstat totals. */
|
|
40
|
+
queryGitDiff?(path: string | undefined, signal: AbortSignal): Promise<GitDiffResult>;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=driver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/rpc/driver.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC5H,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACtG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,oEAAoE;AACpE,MAAM,WAAW,WAAW;IAC1B;+DAC2D;IAC3D,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACxE,4DAA4D;IAC5D,GAAG,EAAE,QAAQ,CAAC;IACd,6EAA6E;IAC7E,SAAS,EAAE,cAAc,CAAC;IAC1B;;;;sEAIkE;IAClE,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,0EAA0E;IAC1E,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;8DAC8D;AAC9D,MAAM,WAAW,UAAU;IACzB,oEAAoE;IACpE,KAAK,CAAC,QAAQ,EAAE,kBAAkB,GAAG,WAAW,CAAC;IACjD,mEAAmE;IACnE,UAAU,IAAI,SAAS,EAAE,CAAC;IAC1B;gFAC4E;IAC5E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IASzB,0EAA0E;IAC1E,cAAc,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5E,kFAAkF;IAClF,aAAa,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3E,iFAAiF;IACjF,cAAc,CAAC,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC/D,qDAAqD;IACrD,YAAY,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CACtF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// The seam both transports project onto (codex C1 — the single most
|
|
2
|
+
// important lesson from all three reference repos). The `@chances-ai/rpc`
|
|
3
|
+
// package never imports app boot; apps/cli implements `EngineHost` over
|
|
4
|
+
// `buildEngine` + `loadRuntime`, which makes the whole server unit-testable
|
|
5
|
+
// in-process against a MockAdapter-backed engine.
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver.js","sourceRoot":"","sources":["../../src/rpc/driver.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,0EAA0E;AAC1E,wEAAwE;AACxE,4EAA4E;AAC5E,kDAAkD"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AppEvent } from "@chances-ai/runtime";
|
|
2
|
+
import type { EventFrame } from "./protocol.js";
|
|
3
|
+
export interface EventMapOptions {
|
|
4
|
+
/** When false, `tool:chunk` (live PTY output) is suppressed (N2 opt-out). */
|
|
5
|
+
toolChunks: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function mapEvent(e: AppEvent, opts: EventMapOptions): EventFrame | null;
|
|
8
|
+
//# sourceMappingURL=event-map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-map.d.ts","sourceRoot":"","sources":["../../src/rpc/event-map.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,GAAG,UAAU,GAAG,IAAI,CA4E9E"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
// Pure mapping: internal `AppEvent` → bespoke RPC `EventFrame` (codex C3 —
|
|
2
|
+
// reuse the internal union as the wire payload). Returns `null` for events
|
|
3
|
+
// that must NOT reach the wire:
|
|
4
|
+
// - tool:permission → the resolver round-trip's `request_permission` is
|
|
5
|
+
// the canonical ask (avoids a double-signal; D5).
|
|
6
|
+
// - turn:end → completion is the richer `result` frame.
|
|
7
|
+
// - assistant:message → folded into `result`.
|
|
8
|
+
// - usage:turn → the turn total is on `result`; per-call `usage` is
|
|
9
|
+
// forwarded for granularity.
|
|
10
|
+
// - log → routed to stderr by the server (stdout purity).
|
|
11
|
+
// `commandId` on `turn_start` is stamped by the server (it owns that state),
|
|
12
|
+
// not here.
|
|
13
|
+
export function mapEvent(e, opts) {
|
|
14
|
+
switch (e.type) {
|
|
15
|
+
case "turn:start":
|
|
16
|
+
return { type: "turn_start", turnId: e.turnId, prompt: e.prompt, sessionId: e.sessionId };
|
|
17
|
+
case "assistant:delta":
|
|
18
|
+
return { type: "assistant_delta", turnId: e.turnId, text: e.text, agentId: e.agentId };
|
|
19
|
+
case "tool:call":
|
|
20
|
+
return { type: "tool_call", callId: e.callId, name: e.name, args: e.args, agentId: e.agentId };
|
|
21
|
+
case "tool:result":
|
|
22
|
+
return {
|
|
23
|
+
type: "tool_result",
|
|
24
|
+
callId: e.callId,
|
|
25
|
+
name: e.name,
|
|
26
|
+
ok: e.ok,
|
|
27
|
+
output: e.output,
|
|
28
|
+
agentId: e.agentId,
|
|
29
|
+
};
|
|
30
|
+
case "tool:chunk":
|
|
31
|
+
if (!opts.toolChunks)
|
|
32
|
+
return null;
|
|
33
|
+
return {
|
|
34
|
+
type: "tool_chunk",
|
|
35
|
+
callId: e.callId,
|
|
36
|
+
sessionId: e.sessionId,
|
|
37
|
+
seq: e.seq,
|
|
38
|
+
text: e.text,
|
|
39
|
+
bytes: e.bytes,
|
|
40
|
+
dropped: e.dropped,
|
|
41
|
+
terminal: e.terminal,
|
|
42
|
+
state: e.state,
|
|
43
|
+
exitCode: e.exitCode,
|
|
44
|
+
reason: e.reason,
|
|
45
|
+
agentId: e.agentId,
|
|
46
|
+
};
|
|
47
|
+
case "usage":
|
|
48
|
+
return {
|
|
49
|
+
type: "usage",
|
|
50
|
+
model: e.model,
|
|
51
|
+
inputTokens: e.inputTokens,
|
|
52
|
+
outputTokens: e.outputTokens,
|
|
53
|
+
costUsd: e.costUsd,
|
|
54
|
+
agentId: e.agentId,
|
|
55
|
+
};
|
|
56
|
+
case "compaction:start":
|
|
57
|
+
return { type: "compaction_start", reason: e.reason, beforeTokens: e.beforeTokens };
|
|
58
|
+
case "compaction:end":
|
|
59
|
+
return {
|
|
60
|
+
type: "compaction_end",
|
|
61
|
+
reason: e.reason,
|
|
62
|
+
ok: e.ok,
|
|
63
|
+
savedTokens: e.savedTokens,
|
|
64
|
+
durationMs: e.durationMs,
|
|
65
|
+
};
|
|
66
|
+
case "subagent:done":
|
|
67
|
+
return {
|
|
68
|
+
type: "subagent_done",
|
|
69
|
+
taskId: e.taskId,
|
|
70
|
+
agentName: e.agentName,
|
|
71
|
+
status: e.status,
|
|
72
|
+
durationMs: e.durationMs,
|
|
73
|
+
tokens: e.tokens,
|
|
74
|
+
};
|
|
75
|
+
case "error":
|
|
76
|
+
return { type: "error", code: e.code, message: e.message };
|
|
77
|
+
// Suppressed (see file header):
|
|
78
|
+
case "tool:permission":
|
|
79
|
+
case "turn:end":
|
|
80
|
+
case "assistant:message":
|
|
81
|
+
case "usage:turn":
|
|
82
|
+
case "log":
|
|
83
|
+
// `assistant:reset` is a transcript-display concern (undo a partial line
|
|
84
|
+
// before a retry restream). The bespoke stdio wire feeds programmatic
|
|
85
|
+
// integrations that accumulate `result`, not a live `ChatViewModel`, so it
|
|
86
|
+
// has no partial to undo — the ACP wire carries reset for GUI clients.
|
|
87
|
+
case "assistant:reset":
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=event-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-map.js","sourceRoot":"","sources":["../../src/rpc/event-map.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,2EAA2E;AAC3E,gCAAgC;AAChC,2EAA2E;AAC3E,yEAAyE;AACzE,kEAAkE;AAClE,gDAAgD;AAChD,4EAA4E;AAC5E,oDAAoD;AACpD,yEAAyE;AACzE,6EAA6E;AAC7E,YAAY;AAUZ,MAAM,UAAU,QAAQ,CAAC,CAAW,EAAE,IAAqB;IACzD,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,YAAY;YACf,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QAC5F,KAAK,iBAAiB;YACpB,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QACzF,KAAK,WAAW;YACd,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QACjG,KAAK,aAAa;YAChB,OAAO;gBACL,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC;QACJ,KAAK,YAAY;YACf,IAAI,CAAC,IAAI,CAAC,UAAU;gBAAE,OAAO,IAAI,CAAC;YAClC,OAAO;gBACL,IAAI,EAAE,YAAY;gBAClB,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,GAAG,EAAE,CAAC,CAAC,GAAG;gBACV,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC;QACJ,KAAK,OAAO;YACV,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,YAAY,EAAE,CAAC,CAAC,YAAY;gBAC5B,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC;QACJ,KAAK,kBAAkB;YACrB,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC;QACtF,KAAK,gBAAgB;YACnB,OAAO;gBACL,IAAI,EAAE,gBAAgB;gBACtB,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,UAAU,EAAE,CAAC,CAAC,UAAU;aACzB,CAAC;QACJ,KAAK,eAAe;YAClB,OAAO;gBACL,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,MAAM,EAAE,CAAC,CAAC,MAAM;aACjB,CAAC;QACJ,KAAK,OAAO;YACV,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAC7D,gCAAgC;QAChC,KAAK,iBAAiB,CAAC;QACvB,KAAK,UAAU,CAAC;QAChB,KAAK,mBAAmB,CAAC;QACzB,KAAK,YAAY,CAAC;QAClB,KAAK,KAAK,CAAC;QACX,yEAAyE;QACzE,sEAAsE;QACtE,2EAA2E;QAC3E,uEAAuE;QACvE,KAAK,iBAAiB;YACpB,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { PROTOCOL_NAME, PROTOCOL_VERSION, CommandSchema, RSEQ_KEY, stampSeq, readRseq, type Command, type CommandType, type ModelInfo, type ServerFrame, type EventFrame, type ReadyFrame, type ResponseFrame, type RequestPermissionFrame, type RelayFrame, type RelayWelcomeFrame, type ResetFrame, type ClientInboundFrame, type RpcError, type RpcErrorCode, type StopReason, } from "./protocol.js";
|
|
2
|
+
export type { BuiltEngine, EngineHost } from "./driver.js";
|
|
3
|
+
export { BoundedNdjsonWriter, type ByteSink, type WriterOptions } from "./writer.js";
|
|
4
|
+
export { installStdoutGuard, type StdoutGuard } from "./stdout-guard.js";
|
|
5
|
+
export { mapEvent, type EventMapOptions } from "./event-map.js";
|
|
6
|
+
export { RpcServer, type RpcServerOptions } from "./rpc-server.js";
|
|
7
|
+
export { linesFromStream } from "./lines.js";
|
|
8
|
+
export { runAcp, AcpAgent, type RunAcpOptions } from "./acp/adapter.js";
|
|
9
|
+
export { mapEventToAcp, type AcpMapOptions } from "./acp/event-map.js";
|
|
10
|
+
export { AcpEngineDriver, ACP_PROTOCOL_VERSION, type AcpEngineDriverOptions } from "./acp/engine-driver.js";
|
|
11
|
+
export { loadAcpSdk, type AcpSdk } from "./acp/load-sdk.js";
|
|
12
|
+
export { WORKSPACE_QUERY_METHODS, dispatchWorkspaceQuery, hostSupportsWorkspaceQueries, isWorkspaceQueryMethod, type QueryOutcome, } from "./acp/workspace-query.js";
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rpc/index.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,UAAU,GAChB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAC5G,OAAO,EAAE,UAAU,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,4BAA4B,EAC5B,sBAAsB,EACtB,KAAK,YAAY,GAClB,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// @chances-ai/rpc — Stable RPC + ACP host (5.2 / v7.0.0).
|
|
2
|
+
//
|
|
3
|
+
// Two transports over ONE engine seam (`EngineHost`): the bespoke
|
|
4
|
+
// NDJSON-over-stdio RPC server (`RpcServer`) and the Zed ACP adapter
|
|
5
|
+
// (`runAcp`, optional `@agentclientprotocol/sdk` peer). apps/cli provides the
|
|
6
|
+
// concrete `EngineHost` (over `buildEngine`) + the stdio transport.
|
|
7
|
+
export { PROTOCOL_NAME, PROTOCOL_VERSION, CommandSchema, RSEQ_KEY, stampSeq, readRseq, } from "./protocol.js";
|
|
8
|
+
export { BoundedNdjsonWriter } from "./writer.js";
|
|
9
|
+
export { installStdoutGuard } from "./stdout-guard.js";
|
|
10
|
+
export { mapEvent } from "./event-map.js";
|
|
11
|
+
export { RpcServer } from "./rpc-server.js";
|
|
12
|
+
export { linesFromStream } from "./lines.js";
|
|
13
|
+
export { runAcp, AcpAgent } from "./acp/adapter.js";
|
|
14
|
+
export { mapEventToAcp } from "./acp/event-map.js";
|
|
15
|
+
export { AcpEngineDriver, ACP_PROTOCOL_VERSION } from "./acp/engine-driver.js";
|
|
16
|
+
export { loadAcpSdk } from "./acp/load-sdk.js";
|
|
17
|
+
export { WORKSPACE_QUERY_METHODS, dispatchWorkspaceQuery, hostSupportsWorkspaceQueries, isWorkspaceQueryMethod, } from "./acp/workspace-query.js";
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rpc/index.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,EAAE;AACF,kEAAkE;AAClE,qEAAqE;AACrE,8EAA8E;AAC9E,oEAAoE;AAEpE,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,QAAQ,GAgBT,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,mBAAmB,EAAqC,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAoB,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAwB,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAyB,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAsB,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAsB,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAA+B,MAAM,wBAAwB,CAAC;AAC5G,OAAO,EAAE,UAAU,EAAe,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,4BAA4B,EAC5B,sBAAsB,GAEvB,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lines.d.ts","sourceRoot":"","sources":["../../src/rpc/lines.ts"],"names":[],"mappings":"AAMA,wBAAuB,eAAe,CACpC,MAAM,EAAE,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC,GACzC,aAAa,CAAC,MAAM,CAAC,CAevB"}
|