@agentex/agent 0.0.17 → 0.0.19

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.
Files changed (162) hide show
  1. package/README.md +112 -17
  2. package/dist/derived.d.ts +69 -0
  3. package/dist/derived.d.ts.map +1 -0
  4. package/dist/derived.js +218 -0
  5. package/dist/derived.js.map +1 -0
  6. package/dist/index.d.ts +8 -1
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +3 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/providers/_shared/http-agent.d.ts +39 -0
  11. package/dist/providers/_shared/http-agent.d.ts.map +1 -0
  12. package/dist/providers/_shared/http-agent.js +265 -0
  13. package/dist/providers/_shared/http-agent.js.map +1 -0
  14. package/dist/providers/acp/index.d.ts +29 -0
  15. package/dist/providers/acp/index.d.ts.map +1 -0
  16. package/dist/providers/acp/index.js +153 -0
  17. package/dist/providers/acp/index.js.map +1 -0
  18. package/dist/providers/acp/parse.d.ts +22 -0
  19. package/dist/providers/acp/parse.d.ts.map +1 -0
  20. package/dist/providers/acp/parse.js +122 -0
  21. package/dist/providers/acp/parse.js.map +1 -0
  22. package/dist/providers/acp/session.d.ts +36 -0
  23. package/dist/providers/acp/session.d.ts.map +1 -0
  24. package/dist/providers/acp/session.js +487 -0
  25. package/dist/providers/acp/session.js.map +1 -0
  26. package/dist/providers/claude/execute.d.ts.map +1 -1
  27. package/dist/providers/claude/execute.js +6 -2
  28. package/dist/providers/claude/execute.js.map +1 -1
  29. package/dist/providers/claude/index.d.ts.map +1 -1
  30. package/dist/providers/claude/index.js +1 -0
  31. package/dist/providers/claude/index.js.map +1 -1
  32. package/dist/providers/claude/parse.d.ts.map +1 -1
  33. package/dist/providers/claude/parse.js +8 -0
  34. package/dist/providers/claude/parse.js.map +1 -1
  35. package/dist/providers/claude/session.d.ts +25 -2
  36. package/dist/providers/claude/session.d.ts.map +1 -1
  37. package/dist/providers/claude/session.js +120 -7
  38. package/dist/providers/claude/session.js.map +1 -1
  39. package/dist/providers/codex/execute.d.ts.map +1 -1
  40. package/dist/providers/codex/execute.js +5 -1
  41. package/dist/providers/codex/execute.js.map +1 -1
  42. package/dist/providers/codex/index.d.ts.map +1 -1
  43. package/dist/providers/codex/index.js +3 -0
  44. package/dist/providers/codex/index.js.map +1 -1
  45. package/dist/providers/codex/modes.d.ts +35 -0
  46. package/dist/providers/codex/modes.d.ts.map +1 -0
  47. package/dist/providers/codex/modes.js +148 -0
  48. package/dist/providers/codex/modes.js.map +1 -0
  49. package/dist/providers/codex/parse.d.ts.map +1 -1
  50. package/dist/providers/codex/parse.js +4 -0
  51. package/dist/providers/codex/parse.js.map +1 -1
  52. package/dist/providers/codex/session.d.ts +41 -2
  53. package/dist/providers/codex/session.d.ts.map +1 -1
  54. package/dist/providers/codex/session.js +319 -16
  55. package/dist/providers/codex/session.js.map +1 -1
  56. package/dist/providers/copilot/index.d.ts +15 -0
  57. package/dist/providers/copilot/index.d.ts.map +1 -0
  58. package/dist/providers/copilot/index.js +19 -0
  59. package/dist/providers/copilot/index.js.map +1 -0
  60. package/dist/providers/cursor/index.d.ts.map +1 -1
  61. package/dist/providers/cursor/index.js +1 -0
  62. package/dist/providers/cursor/index.js.map +1 -1
  63. package/dist/providers/cursor/parse.d.ts.map +1 -1
  64. package/dist/providers/cursor/parse.js +1 -0
  65. package/dist/providers/cursor/parse.js.map +1 -1
  66. package/dist/providers/gemini/index.d.ts.map +1 -1
  67. package/dist/providers/gemini/index.js +16 -20
  68. package/dist/providers/gemini/index.js.map +1 -1
  69. package/dist/providers/openclaw/execute.d.ts +5 -0
  70. package/dist/providers/openclaw/execute.d.ts.map +1 -1
  71. package/dist/providers/openclaw/execute.js +13 -173
  72. package/dist/providers/openclaw/execute.js.map +1 -1
  73. package/dist/providers/openclaw/index.d.ts.map +1 -1
  74. package/dist/providers/openclaw/index.js +1 -0
  75. package/dist/providers/openclaw/index.js.map +1 -1
  76. package/dist/providers/opencode/event-parse.d.ts +23 -0
  77. package/dist/providers/opencode/event-parse.d.ts.map +1 -0
  78. package/dist/providers/opencode/event-parse.js +128 -0
  79. package/dist/providers/opencode/event-parse.js.map +1 -0
  80. package/dist/providers/opencode/http-session.d.ts +4 -0
  81. package/dist/providers/opencode/http-session.d.ts.map +1 -0
  82. package/dist/providers/opencode/http-session.js +376 -0
  83. package/dist/providers/opencode/http-session.js.map +1 -0
  84. package/dist/providers/opencode/index.d.ts.map +1 -1
  85. package/dist/providers/opencode/index.js +6 -1
  86. package/dist/providers/opencode/index.js.map +1 -1
  87. package/dist/providers/opencode/parse.d.ts.map +1 -1
  88. package/dist/providers/opencode/parse.js +1 -0
  89. package/dist/providers/opencode/parse.js.map +1 -1
  90. package/dist/providers/opencode/server.d.ts +8 -0
  91. package/dist/providers/opencode/server.d.ts.map +1 -0
  92. package/dist/providers/opencode/server.js +0 -0
  93. package/dist/providers/opencode/server.js.map +1 -0
  94. package/dist/providers/pi/index.d.ts.map +1 -1
  95. package/dist/providers/pi/index.js +6 -1
  96. package/dist/providers/pi/index.js.map +1 -1
  97. package/dist/providers/pi/parse.d.ts.map +1 -1
  98. package/dist/providers/pi/parse.js +1 -0
  99. package/dist/providers/pi/parse.js.map +1 -1
  100. package/dist/providers/pi/session.d.ts +40 -0
  101. package/dist/providers/pi/session.d.ts.map +1 -0
  102. package/dist/providers/pi/session.js +328 -0
  103. package/dist/providers/pi/session.js.map +1 -0
  104. package/dist/providers/process/index.d.ts.map +1 -1
  105. package/dist/providers/process/index.js +1 -0
  106. package/dist/providers/process/index.js.map +1 -1
  107. package/dist/registry.d.ts +1 -0
  108. package/dist/registry.d.ts.map +1 -1
  109. package/dist/registry.js +6 -0
  110. package/dist/registry.js.map +1 -1
  111. package/dist/types.d.ts +113 -2
  112. package/dist/types.d.ts.map +1 -1
  113. package/dist/types.js.map +1 -1
  114. package/dist/utils/tool-names.d.ts +24 -0
  115. package/dist/utils/tool-names.d.ts.map +1 -0
  116. package/dist/utils/tool-names.js +50 -0
  117. package/dist/utils/tool-names.js.map +1 -0
  118. package/package.json +22 -13
  119. package/dist/providers/claude/test.d.ts +0 -3
  120. package/dist/providers/claude/test.d.ts.map +0 -1
  121. package/dist/providers/claude/test.js +0 -167
  122. package/dist/providers/claude/test.js.map +0 -1
  123. package/dist/providers/codex/test.d.ts +0 -3
  124. package/dist/providers/codex/test.d.ts.map +0 -1
  125. package/dist/providers/codex/test.js +0 -74
  126. package/dist/providers/codex/test.js.map +0 -1
  127. package/dist/providers/cursor/test.d.ts +0 -3
  128. package/dist/providers/cursor/test.d.ts.map +0 -1
  129. package/dist/providers/cursor/test.js +0 -58
  130. package/dist/providers/cursor/test.js.map +0 -1
  131. package/dist/providers/gemini/codec.d.ts +0 -3
  132. package/dist/providers/gemini/codec.d.ts.map +0 -1
  133. package/dist/providers/gemini/codec.js +0 -47
  134. package/dist/providers/gemini/codec.js.map +0 -1
  135. package/dist/providers/gemini/execute.d.ts +0 -3
  136. package/dist/providers/gemini/execute.d.ts.map +0 -1
  137. package/dist/providers/gemini/execute.js +0 -256
  138. package/dist/providers/gemini/execute.js.map +0 -1
  139. package/dist/providers/gemini/parse.d.ts +0 -20
  140. package/dist/providers/gemini/parse.d.ts.map +0 -1
  141. package/dist/providers/gemini/parse.js +0 -235
  142. package/dist/providers/gemini/parse.js.map +0 -1
  143. package/dist/providers/gemini/test.d.ts +0 -3
  144. package/dist/providers/gemini/test.d.ts.map +0 -1
  145. package/dist/providers/gemini/test.js +0 -67
  146. package/dist/providers/gemini/test.js.map +0 -1
  147. package/dist/providers/openclaw/test.d.ts +0 -3
  148. package/dist/providers/openclaw/test.d.ts.map +0 -1
  149. package/dist/providers/openclaw/test.js +0 -54
  150. package/dist/providers/openclaw/test.js.map +0 -1
  151. package/dist/providers/opencode/test.d.ts +0 -3
  152. package/dist/providers/opencode/test.d.ts.map +0 -1
  153. package/dist/providers/opencode/test.js +0 -60
  154. package/dist/providers/opencode/test.js.map +0 -1
  155. package/dist/providers/pi/test.d.ts +0 -3
  156. package/dist/providers/pi/test.d.ts.map +0 -1
  157. package/dist/providers/pi/test.js +0 -60
  158. package/dist/providers/pi/test.js.map +0 -1
  159. package/dist/utils/model-cache.d.ts +0 -11
  160. package/dist/utils/model-cache.d.ts.map +0 -1
  161. package/dist/utils/model-cache.js +0 -17
  162. package/dist/utils/model-cache.js.map +0 -1
@@ -0,0 +1,265 @@
1
+ import { uuidv7 } from "../../utils/uuid.js";
2
+ function str(v) {
3
+ return typeof v === "string" && v.length > 0 ? v : null;
4
+ }
5
+ function defaultSummary(r) {
6
+ return str(r["summary"]) ?? str(r["result"]) ?? str(r["output"]);
7
+ }
8
+ /** Resolve the session key from session params (sessionKey / session_key). */
9
+ function readSessionKey(sessionParams) {
10
+ if (!sessionParams)
11
+ return null;
12
+ return str(sessionParams["sessionKey"]) ?? str(sessionParams["session_key"]);
13
+ }
14
+ /** Execute a single turn against a remote HTTP agent gateway. */
15
+ export async function runHttpAgent(opts, ctx) {
16
+ const runId = ctx.runId ?? uuidv7();
17
+ const model = ctx.model ?? ctx.config?.model ?? null;
18
+ const config = ctx.config ?? {};
19
+ const startedAt = new Date().toISOString();
20
+ const startMs = Date.now();
21
+ const savedGatewayUrl = str(ctx.sessionParams?.["gatewayUrl"]);
22
+ const gatewayUrl = config.command?.trim() || savedGatewayUrl || opts.defaultBaseUrl;
23
+ const endpoint = gatewayUrl.replace(/\/$/, "") + opts.runPath;
24
+ const sessionKey = readSessionKey(ctx.sessionParams);
25
+ const body = opts.buildBody
26
+ ? opts.buildBody({ prompt: ctx.prompt, sessionKey, model })
27
+ : {
28
+ prompt: ctx.prompt,
29
+ ...(sessionKey ? { sessionKey } : {}),
30
+ ...(model ? { model } : {}),
31
+ };
32
+ const abortController = new AbortController();
33
+ let timeoutHandle = null;
34
+ let timedOut = false;
35
+ if (config.timeoutSec && config.timeoutSec > 0) {
36
+ timeoutHandle = setTimeout(() => {
37
+ timedOut = true;
38
+ abortController.abort();
39
+ }, config.timeoutSec * 1000);
40
+ }
41
+ // Chain a caller-supplied signal (a caller abort is distinct from a timeout).
42
+ if (ctx.signal) {
43
+ if (ctx.signal.aborted)
44
+ abortController.abort();
45
+ else
46
+ ctx.signal.addEventListener("abort", () => abortController.abort(), { once: true });
47
+ }
48
+ try {
49
+ const response = await fetch(endpoint, {
50
+ method: "POST",
51
+ headers: { "Content-Type": "application/json" },
52
+ body: JSON.stringify(body),
53
+ signal: abortController.signal,
54
+ });
55
+ if (timeoutHandle)
56
+ clearTimeout(timeoutHandle);
57
+ if (!response.ok) {
58
+ const errorText = await response.text().catch(() => "");
59
+ const isAuth = response.status === 401 || response.status === 403;
60
+ if (isAuth && ctx.onEvent) {
61
+ try {
62
+ await ctx.onEvent({
63
+ type: "auth_required",
64
+ httpStatus: response.status,
65
+ reason: "unknown",
66
+ loginCommand: opts.loginCommand ?? `${opts.providerType} login`,
67
+ message: errorText || null,
68
+ timestamp: new Date().toISOString(),
69
+ providerType: opts.providerType,
70
+ sessionId: sessionKey ?? null,
71
+ messageId: null,
72
+ eventId: null,
73
+ turnId: null,
74
+ parentToolCallId: null,
75
+ raw: { status: response.status, body: errorText },
76
+ });
77
+ }
78
+ catch {
79
+ /* swallow */
80
+ }
81
+ }
82
+ return {
83
+ runId,
84
+ exitCode: 1,
85
+ signal: null,
86
+ status: "failed",
87
+ startedAt,
88
+ completedAt: new Date().toISOString(),
89
+ durationMs: Date.now() - startMs,
90
+ errorMessage: `${opts.providerType} gateway returned ${response.status}: ${errorText}`,
91
+ errorCode: isAuth ? "auth_required" : null,
92
+ costUsd: null,
93
+ model,
94
+ summary: null,
95
+ sessionParams: sessionKey ? { sessionKey, gatewayUrl } : null,
96
+ sessionDisplayId: sessionKey,
97
+ clearSession: false,
98
+ billingType: null,
99
+ };
100
+ }
101
+ const result = (await response.json());
102
+ const newSessionKey = opts.extractSessionKey
103
+ ? opts.extractSessionKey(result, sessionKey)
104
+ : (str(result["sessionKey"]) ?? sessionKey);
105
+ const summary = (opts.extractSummary ?? defaultSummary)(result);
106
+ const resolvedModel = opts.extractModel
107
+ ? opts.extractModel(result, model)
108
+ : (str(result["model"]) ?? model);
109
+ const costUsd = opts.extractCost
110
+ ? opts.extractCost(result)
111
+ : typeof result["costUsd"] === "number"
112
+ ? result["costUsd"]
113
+ : null;
114
+ if (ctx.onEvent && summary) {
115
+ try {
116
+ await ctx.onEvent({
117
+ type: "result",
118
+ text: summary,
119
+ costUsd,
120
+ isError: false,
121
+ stopReason: null,
122
+ terminalReason: null,
123
+ numTurns: null,
124
+ durationMs: null,
125
+ timestamp: new Date().toISOString(),
126
+ providerType: opts.providerType,
127
+ sessionId: newSessionKey ?? null,
128
+ messageId: null,
129
+ eventId: null,
130
+ turnId: null,
131
+ parentToolCallId: null,
132
+ raw: result,
133
+ });
134
+ }
135
+ catch {
136
+ /* swallow */
137
+ }
138
+ }
139
+ return {
140
+ runId,
141
+ exitCode: 0,
142
+ signal: null,
143
+ status: "completed",
144
+ startedAt,
145
+ completedAt: new Date().toISOString(),
146
+ durationMs: Date.now() - startMs,
147
+ errorMessage: null,
148
+ errorCode: null,
149
+ costUsd,
150
+ model: resolvedModel,
151
+ summary,
152
+ sessionParams: newSessionKey ? { sessionKey: newSessionKey, gatewayUrl } : null,
153
+ sessionDisplayId: newSessionKey,
154
+ clearSession: false,
155
+ billingType: null,
156
+ raw: result,
157
+ };
158
+ }
159
+ catch (err) {
160
+ if (timeoutHandle)
161
+ clearTimeout(timeoutHandle);
162
+ if (err instanceof Error && err.name === "AbortError") {
163
+ // A timeout and a caller-supplied signal abort both surface as AbortError;
164
+ // distinguish them so consumers can tell a deadline from a cancellation.
165
+ const isTimeout = timedOut;
166
+ return {
167
+ runId,
168
+ exitCode: null,
169
+ signal: null,
170
+ status: isTimeout ? "timeout" : "aborted",
171
+ startedAt,
172
+ completedAt: new Date().toISOString(),
173
+ durationMs: Date.now() - startMs,
174
+ errorMessage: isTimeout ? `Timed out after ${config.timeoutSec ?? 0}s` : "Aborted by caller",
175
+ errorCode: isTimeout ? "timeout" : "aborted",
176
+ costUsd: null,
177
+ model,
178
+ summary: null,
179
+ sessionParams: sessionKey ? { sessionKey, gatewayUrl } : null,
180
+ sessionDisplayId: sessionKey,
181
+ clearSession: false,
182
+ billingType: null,
183
+ };
184
+ }
185
+ // A transient network error (DNS, reset) is recoverable — preserve the
186
+ // session key / gateway so the caller can resume rather than losing it.
187
+ return {
188
+ runId,
189
+ exitCode: null,
190
+ signal: null,
191
+ status: "failed",
192
+ startedAt,
193
+ completedAt: new Date().toISOString(),
194
+ durationMs: Date.now() - startMs,
195
+ errorMessage: err instanceof Error ? err.message : `${opts.providerType} execution failed`,
196
+ errorCode: null,
197
+ costUsd: null,
198
+ model,
199
+ summary: null,
200
+ sessionParams: sessionKey ? { sessionKey, gatewayUrl } : null,
201
+ sessionDisplayId: sessionKey,
202
+ clearSession: false,
203
+ billingType: null,
204
+ };
205
+ }
206
+ }
207
+ /** Session codec for HTTP-agent providers — round-trips `{ sessionKey, gatewayUrl }`. */
208
+ export const httpAgentSessionCodec = {
209
+ deserialize(raw) {
210
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw))
211
+ return null;
212
+ const obj = raw;
213
+ const sessionKey = str(obj["sessionKey"]) ?? str(obj["session_key"]);
214
+ if (!sessionKey)
215
+ return null;
216
+ const gatewayUrl = str(obj["gatewayUrl"]);
217
+ return { sessionKey, ...(gatewayUrl ? { gatewayUrl } : {}) };
218
+ },
219
+ serialize(params) {
220
+ if (!params)
221
+ return null;
222
+ const sessionKey = str(params["sessionKey"]) ?? str(params["session_key"]);
223
+ if (!sessionKey)
224
+ return null;
225
+ const gatewayUrl = str(params["gatewayUrl"]);
226
+ return { sessionKey, ...(gatewayUrl ? { gatewayUrl } : {}) };
227
+ },
228
+ getDisplayId(params) {
229
+ if (!params)
230
+ return null;
231
+ return str(params["sessionKey"]) ?? str(params["session_key"]);
232
+ },
233
+ };
234
+ /** Build a `ProviderModule` for a remote HTTP agent gateway. */
235
+ export function httpAgentProvider(opts) {
236
+ async function resolveAuth() {
237
+ // The gateway is a URL, not a local binary, so we can't probe presence here.
238
+ return {
239
+ providerType: opts.providerType,
240
+ binary: { installed: true },
241
+ options: [],
242
+ source: "filesystem",
243
+ };
244
+ }
245
+ return {
246
+ type: opts.providerType,
247
+ capabilities: {
248
+ sessions: false,
249
+ modelDiscovery: false,
250
+ quotaProbing: false,
251
+ mcp: false,
252
+ skills: false,
253
+ instructions: false,
254
+ workspace: false,
255
+ planMode: false,
256
+ concurrentSend: false,
257
+ cancelQueuedMessage: false,
258
+ modes: false,
259
+ },
260
+ execute: (ctx) => runHttpAgent(opts, ctx),
261
+ resolveAuth,
262
+ sessionCodec: httpAgentSessionCodec,
263
+ };
264
+ }
265
+ //# sourceMappingURL=http-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-agent.js","sourceRoot":"","sources":["../../../src/providers/_shared/http-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { ProviderModel, ProviderModule } from "../../types.js";
2
+ import { type AcpTransformers } from "./session.js";
3
+ /**
4
+ * Configuration for a generic ACP-backed provider. The canonical use is the
5
+ * config-extend `extends: "acp"` form, but any code can build one directly:
6
+ *
7
+ * ```ts
8
+ * registerProvider(acpProvider({ id: "gemini", command: ["gemini", "--acp"] }));
9
+ * ```
10
+ */
11
+ export interface AcpProviderConfig {
12
+ /** Unique provider id. */
13
+ id: string;
14
+ /** Command to spawn the ACP agent: [binary, ...args]. */
15
+ command: string[];
16
+ /** Environment overlay applied to every spawn. */
17
+ env?: Record<string, string>;
18
+ /** Display label (informational). */
19
+ label?: string;
20
+ /** Static model list surfaced via listModels(). */
21
+ models?: ProviderModel[];
22
+ /** Default mode id applied on session creation. */
23
+ modeId?: string;
24
+ /** Per-agent quirk transformers (modes / modeId). */
25
+ transformers?: AcpTransformers;
26
+ }
27
+ /** Build a generic ACP-backed `ProviderModule`. */
28
+ export declare function acpProvider(config: AcpProviderConfig): ProviderModule;
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/acp/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAOV,aAAa,EACb,cAAc,EAIf,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,cAAc,CAAC;AAEtB;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,0BAA0B;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,yDAAyD;IACzD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kDAAkD;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,YAAY,CAAC,EAAE,eAAe,CAAC;CAChC;AAsHD,mDAAmD;AACnD,wBAAgB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,cAAc,CAsCrE"}
@@ -0,0 +1,153 @@
1
+ import { ensureCommandResolvable } from "../../utils/binary.js";
2
+ import { uuidv7 } from "../../utils/uuid.js";
3
+ import { registerAcpFactory } from "../../derived.js";
4
+ import { createAcpSession, listAcpModes, } from "./session.js";
5
+ function mapTurnStatus(status) {
6
+ switch (status) {
7
+ case "completed":
8
+ case "max_turns":
9
+ case "max_budget":
10
+ return "completed";
11
+ case "failed":
12
+ return "failed";
13
+ case "aborted":
14
+ return "aborted";
15
+ case "timeout":
16
+ return "timeout";
17
+ default:
18
+ return "completed";
19
+ }
20
+ }
21
+ async function runAcpExecute(deps, ctx) {
22
+ const runId = ctx.runId ?? uuidv7();
23
+ const startedAt = new Date().toISOString();
24
+ const startMs = Date.now();
25
+ const model = ctx.model ?? ctx.config?.model ?? null;
26
+ const sessionCtx = {
27
+ ...(ctx.cwd !== undefined ? { cwd: ctx.cwd } : {}),
28
+ ...(ctx.env !== undefined ? { env: ctx.env } : {}),
29
+ ...(ctx.config !== undefined ? { config: ctx.config } : {}),
30
+ ...(ctx.onEvent ? { onEvent: ctx.onEvent } : {}),
31
+ ...(ctx.onOutput ? { onOutput: ctx.onOutput } : {}),
32
+ ...(ctx.signal ? { signal: ctx.signal } : {}),
33
+ };
34
+ const base = {
35
+ runId,
36
+ startedAt,
37
+ signal: null,
38
+ model,
39
+ summary: null,
40
+ sessionParams: null,
41
+ sessionDisplayId: null,
42
+ clearSession: false,
43
+ billingType: null,
44
+ };
45
+ let session = null;
46
+ try {
47
+ session = await createAcpSession(deps, sessionCtx);
48
+ const handle = await session.send(ctx.prompt, {
49
+ ...(ctx.config?.timeoutSec ? { timeoutSec: ctx.config.timeoutSec } : {}),
50
+ ...(ctx.signal ? { signal: ctx.signal } : {}),
51
+ });
52
+ const turn = await handle.result;
53
+ const sessionId = session.sessionId;
54
+ await session.close();
55
+ return {
56
+ ...base,
57
+ completedAt: new Date().toISOString(),
58
+ durationMs: Date.now() - startMs,
59
+ exitCode: turn.status === "completed" ? 0 : 1,
60
+ status: mapTurnStatus(turn.status),
61
+ errorMessage: turn.errorMessage,
62
+ errorCode: turn.errorCode,
63
+ summary: turn.summary,
64
+ ...(turn.usage ? { usage: turn.usage } : {}),
65
+ costUsd: turn.costUsd,
66
+ sessionParams: sessionId ? { sessionId } : null,
67
+ sessionDisplayId: sessionId,
68
+ };
69
+ }
70
+ catch (err) {
71
+ if (session) {
72
+ try {
73
+ await session.close();
74
+ }
75
+ catch {
76
+ /* ignore */
77
+ }
78
+ }
79
+ return {
80
+ ...base,
81
+ completedAt: new Date().toISOString(),
82
+ durationMs: Date.now() - startMs,
83
+ exitCode: 1,
84
+ signal: null,
85
+ status: "failed",
86
+ errorMessage: err instanceof Error ? err.message : String(err),
87
+ errorCode: "acp_error",
88
+ costUsd: null,
89
+ };
90
+ }
91
+ }
92
+ async function resolveAcpAuth(config, authCtx) {
93
+ const binary = authCtx?.command ?? config.command[0];
94
+ try {
95
+ const resolved = await ensureCommandResolvable(binary);
96
+ return {
97
+ providerType: config.id,
98
+ binary: { installed: true, resolvedPath: resolved.bin },
99
+ options: [],
100
+ source: "filesystem",
101
+ };
102
+ }
103
+ catch (err) {
104
+ return {
105
+ providerType: config.id,
106
+ binary: { installed: false, error: err instanceof Error ? err.message : String(err) },
107
+ options: [],
108
+ source: "filesystem",
109
+ };
110
+ }
111
+ }
112
+ /** Build a generic ACP-backed `ProviderModule`. */
113
+ export function acpProvider(config) {
114
+ const deps = {
115
+ provider: config.id,
116
+ command: config.command,
117
+ ...(config.env ? { env: config.env } : {}),
118
+ ...(config.modeId ? { modeId: config.modeId } : {}),
119
+ ...(config.transformers ? { transformers: config.transformers } : {}),
120
+ };
121
+ const provider = {
122
+ type: config.id,
123
+ capabilities: {
124
+ sessions: true,
125
+ modelDiscovery: Boolean(config.models),
126
+ quotaProbing: false,
127
+ mcp: false,
128
+ skills: false,
129
+ instructions: false,
130
+ workspace: true,
131
+ planMode: false,
132
+ concurrentSend: false,
133
+ cancelQueuedMessage: false,
134
+ modes: true,
135
+ // Real capability set is negotiated at the ACP initialize handshake.
136
+ dynamicCapabilities: true,
137
+ },
138
+ execute: (ctx) => runAcpExecute(deps, ctx),
139
+ createSession: (ctx) => createAcpSession(deps, ctx),
140
+ resolveAuth: (authCtx) => resolveAcpAuth(config, authCtx),
141
+ listModes: (opts) => listAcpModes(deps, opts),
142
+ };
143
+ if (config.models) {
144
+ const models = config.models;
145
+ provider.listModels = async () => models;
146
+ }
147
+ return provider;
148
+ }
149
+ // Register the factory so `loadProvidersFromConfig({ extends: "acp" })` can
150
+ // build ACP providers. Importing this module is cheap — the SDK is only loaded
151
+ // when a session/execute actually runs (dynamic import in session.ts).
152
+ registerAcpFactory(acpProvider);
153
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/acp/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { StreamEvent } from "../../types.js";
2
+ /** Extract text from an ACP `ContentBlock` (a chunk update's `content`). */
3
+ export declare function extractContentText(content: unknown): string | null;
4
+ /** Extract displayable text from a tool call's `content` (ToolCallContent[]). */
5
+ export declare function extractToolContentText(content: unknown): string | null;
6
+ export interface AcpBaseInfo {
7
+ provider: string;
8
+ sessionId: string | null;
9
+ timestamp: string;
10
+ }
11
+ /**
12
+ * Map an ACP `session/update` payload (`params.update`) to an agentex
13
+ * `StreamEvent`. Returns null for updates with no agentex equivalent (user
14
+ * echoes, in-progress tool ticks). Unknown update kinds surface as
15
+ * `type: "unknown"` for forward-compat.
16
+ */
17
+ export declare function mapAcpUpdate(update: Record<string, unknown>, info: AcpBaseInfo): StreamEvent | null;
18
+ /** Map an ACP `stopReason` to an agentex TurnResult status. */
19
+ export declare function mapAcpStopReason(stopReason: string | undefined): TurnStatus;
20
+ type TurnStatus = "completed" | "failed" | "max_turns" | "max_budget" | "aborted" | "timeout";
21
+ export {};
22
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/providers/acp/parse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAMzE,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAKlE;AAED,iFAAiF;AACjF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAkBtE;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAiBD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,IAAI,CA4CnG;AAMD,+DAA+D;AAC/D,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAe3E;AAED,KAAK,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC"}
@@ -0,0 +1,122 @@
1
+ function str(v) {
2
+ return typeof v === "string" && v.length > 0 ? v : null;
3
+ }
4
+ /** Extract text from an ACP `ContentBlock` (a chunk update's `content`). */
5
+ export function extractContentText(content) {
6
+ if (!content || typeof content !== "object")
7
+ return null;
8
+ const c = content;
9
+ if (c["type"] === "text" && typeof c["text"] === "string")
10
+ return c["text"];
11
+ return null;
12
+ }
13
+ /** Extract displayable text from a tool call's `content` (ToolCallContent[]). */
14
+ export function extractToolContentText(content) {
15
+ if (!Array.isArray(content))
16
+ return null;
17
+ const parts = [];
18
+ for (const item of content) {
19
+ if (!item || typeof item !== "object")
20
+ continue;
21
+ const c = item;
22
+ if (c["type"] === "content") {
23
+ const inner = extractContentText(c["content"]);
24
+ if (inner)
25
+ parts.push(inner);
26
+ }
27
+ else if (c["type"] === "diff") {
28
+ const nd = c["newText"] ?? c["new_text"];
29
+ if (typeof nd === "string")
30
+ parts.push(nd);
31
+ }
32
+ // Note: a "terminal" ToolCallContent carries only a `terminalId` (its output
33
+ // must be fetched via the ACP terminal/* methods, which we don't implement),
34
+ // so there's no inline text to extract here.
35
+ }
36
+ return parts.length ? parts.join("\n") : null;
37
+ }
38
+ function makeBase(update, info) {
39
+ // ACP doesn't expose per-event/message/turn ids, so those stay null; the
40
+ // tool callId IS available, so tool_call/tool_result correlate properly.
41
+ return {
42
+ timestamp: info.timestamp,
43
+ providerType: info.provider,
44
+ sessionId: info.sessionId,
45
+ messageId: null,
46
+ eventId: null,
47
+ turnId: null,
48
+ parentToolCallId: null,
49
+ raw: update,
50
+ };
51
+ }
52
+ /**
53
+ * Map an ACP `session/update` payload (`params.update`) to an agentex
54
+ * `StreamEvent`. Returns null for updates with no agentex equivalent (user
55
+ * echoes, in-progress tool ticks). Unknown update kinds surface as
56
+ * `type: "unknown"` for forward-compat.
57
+ */
58
+ export function mapAcpUpdate(update, info) {
59
+ const kind = update["sessionUpdate"];
60
+ const base = makeBase(update, info);
61
+ switch (kind) {
62
+ case "agent_message_chunk": {
63
+ const text = extractContentText(update["content"]);
64
+ return text != null ? { type: "assistant", text, ...base } : null;
65
+ }
66
+ case "agent_thought_chunk": {
67
+ const text = extractContentText(update["content"]);
68
+ return text != null ? { type: "thinking", text, ...base } : null;
69
+ }
70
+ case "user_message_chunk":
71
+ return null;
72
+ case "tool_call":
73
+ return {
74
+ type: "tool_call",
75
+ toolCallId: str(update["toolCallId"]),
76
+ name: str(update["title"]) ?? str(update["kind"]) ?? "tool",
77
+ input: update["rawInput"] ?? null,
78
+ ...base,
79
+ };
80
+ case "tool_call_update": {
81
+ const status = str(update["status"]);
82
+ // Only emit a result once the tool reaches a terminal state.
83
+ if (status === "completed" || status === "failed") {
84
+ const content = extractToolContentText(update["content"]) ??
85
+ (typeof update["rawOutput"] === "string" ? update["rawOutput"] : "");
86
+ return {
87
+ type: "tool_result",
88
+ toolCallId: str(update["toolCallId"]),
89
+ toolName: str(update["title"]),
90
+ content,
91
+ isError: status === "failed",
92
+ exitCode: null,
93
+ ...base,
94
+ };
95
+ }
96
+ return null;
97
+ }
98
+ default:
99
+ return { type: "unknown", subtype: str(kind) ?? "unknown", ...base };
100
+ }
101
+ }
102
+ // NOTE: ACP's `usage_update` reports context-window `{ size, used }` rather than
103
+ // the input/output token split agentex's `TokenUsage` models, so we intentionally
104
+ // don't synthesize usage from ACP — `TurnResult.usage` stays undefined.
105
+ /** Map an ACP `stopReason` to an agentex TurnResult status. */
106
+ export function mapAcpStopReason(stopReason) {
107
+ switch (stopReason) {
108
+ case "end_turn":
109
+ return "completed";
110
+ case "cancelled":
111
+ return "aborted";
112
+ case "refusal":
113
+ return "failed";
114
+ case "max_tokens":
115
+ return "max_budget";
116
+ case "max_turn_requests":
117
+ return "max_turns";
118
+ default:
119
+ return "completed";
120
+ }
121
+ }
122
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../src/providers/acp/parse.ts"],"names":[],"mappings":"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"}