@agentex/agent 0.0.16 → 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 (165) hide show
  1. package/README.md +158 -18
  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 +3 -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 +43 -4
  36. package/dist/providers/claude/session.d.ts.map +1 -1
  37. package/dist/providers/claude/session.js +215 -30
  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 +5 -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 +45 -4
  53. package/dist/providers/codex/session.d.ts.map +1 -1
  54. package/dist/providers/codex/session.js +408 -66
  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 +3 -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 -18
  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 +3 -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 +8 -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 +8 -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 +3 -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 +192 -3
  112. package/dist/types.d.ts.map +1 -1
  113. package/dist/types.js.map +1 -1
  114. package/dist/utils/skill-commands.d.ts.map +1 -1
  115. package/dist/utils/skill-commands.js +4 -2
  116. package/dist/utils/skill-commands.js.map +1 -1
  117. package/dist/utils/tool-names.d.ts +24 -0
  118. package/dist/utils/tool-names.d.ts.map +1 -0
  119. package/dist/utils/tool-names.js +50 -0
  120. package/dist/utils/tool-names.js.map +1 -0
  121. package/package.json +22 -12
  122. package/dist/providers/claude/test.d.ts +0 -3
  123. package/dist/providers/claude/test.d.ts.map +0 -1
  124. package/dist/providers/claude/test.js +0 -167
  125. package/dist/providers/claude/test.js.map +0 -1
  126. package/dist/providers/codex/test.d.ts +0 -3
  127. package/dist/providers/codex/test.d.ts.map +0 -1
  128. package/dist/providers/codex/test.js +0 -74
  129. package/dist/providers/codex/test.js.map +0 -1
  130. package/dist/providers/cursor/test.d.ts +0 -3
  131. package/dist/providers/cursor/test.d.ts.map +0 -1
  132. package/dist/providers/cursor/test.js +0 -58
  133. package/dist/providers/cursor/test.js.map +0 -1
  134. package/dist/providers/gemini/codec.d.ts +0 -3
  135. package/dist/providers/gemini/codec.d.ts.map +0 -1
  136. package/dist/providers/gemini/codec.js +0 -47
  137. package/dist/providers/gemini/codec.js.map +0 -1
  138. package/dist/providers/gemini/execute.d.ts +0 -3
  139. package/dist/providers/gemini/execute.d.ts.map +0 -1
  140. package/dist/providers/gemini/execute.js +0 -256
  141. package/dist/providers/gemini/execute.js.map +0 -1
  142. package/dist/providers/gemini/parse.d.ts +0 -20
  143. package/dist/providers/gemini/parse.d.ts.map +0 -1
  144. package/dist/providers/gemini/parse.js +0 -235
  145. package/dist/providers/gemini/parse.js.map +0 -1
  146. package/dist/providers/gemini/test.d.ts +0 -3
  147. package/dist/providers/gemini/test.d.ts.map +0 -1
  148. package/dist/providers/gemini/test.js +0 -67
  149. package/dist/providers/gemini/test.js.map +0 -1
  150. package/dist/providers/openclaw/test.d.ts +0 -3
  151. package/dist/providers/openclaw/test.d.ts.map +0 -1
  152. package/dist/providers/openclaw/test.js +0 -54
  153. package/dist/providers/openclaw/test.js.map +0 -1
  154. package/dist/providers/opencode/test.d.ts +0 -3
  155. package/dist/providers/opencode/test.d.ts.map +0 -1
  156. package/dist/providers/opencode/test.js +0 -60
  157. package/dist/providers/opencode/test.js.map +0 -1
  158. package/dist/providers/pi/test.d.ts +0 -3
  159. package/dist/providers/pi/test.d.ts.map +0 -1
  160. package/dist/providers/pi/test.js +0 -60
  161. package/dist/providers/pi/test.js.map +0 -1
  162. package/dist/utils/model-cache.d.ts +0 -11
  163. package/dist/utils/model-cache.d.ts.map +0 -1
  164. package/dist/utils/model-cache.js +0 -17
  165. package/dist/utils/model-cache.js.map +0 -1
@@ -0,0 +1,39 @@
1
+ import type { ExecutionContext, ExecutionResult, ProviderModule, SessionCodec } from "../../types.js";
2
+ /**
3
+ * Reusable "remote HTTP agent" adapter — the pattern OpenClaw encodes and the
4
+ * shape any gateway-backed agent reuses: resolve a gateway URL (per-call command
5
+ * override → saved sessionParams → default), round-trip a session key through
6
+ * `sessionParams`, POST the prompt, map 401/403 to an `auth_required` event, and
7
+ * bound the request with an AbortController timeout.
8
+ */
9
+ export interface HttpAgentOptions {
10
+ /** Provider id (used on events + the result). */
11
+ providerType: string;
12
+ /** Gateway base URL used when neither `config.command` nor a saved URL is set. */
13
+ defaultBaseUrl: string;
14
+ /** Path appended to the base URL for the run endpoint (e.g. "/api/agent/run"). */
15
+ runPath: string;
16
+ /** Recovery command surfaced on `auth_required` (e.g. "openclaw login"). */
17
+ loginCommand?: string;
18
+ /** Build the JSON request body. Default: `{ prompt, sessionKey?, model? }`. */
19
+ buildBody?: (input: {
20
+ prompt: string;
21
+ sessionKey: string | null;
22
+ model: string | null;
23
+ }) => Record<string, unknown>;
24
+ /** Pull the summary text from the gateway response. Default: summary ?? result ?? output. */
25
+ extractSummary?: (response: Record<string, unknown>) => string | null;
26
+ /** Pull the (possibly new) session key from the response. Default: `response.sessionKey ?? prev`. */
27
+ extractSessionKey?: (response: Record<string, unknown>, prev: string | null) => string | null;
28
+ /** Pull the model id from the response. Default: `response.model ?? fallback`. */
29
+ extractModel?: (response: Record<string, unknown>, fallback: string | null) => string | null;
30
+ /** Pull the cost from the response. Default: `response.costUsd` when numeric. */
31
+ extractCost?: (response: Record<string, unknown>) => number | null;
32
+ }
33
+ /** Execute a single turn against a remote HTTP agent gateway. */
34
+ export declare function runHttpAgent(opts: HttpAgentOptions, ctx: ExecutionContext): Promise<ExecutionResult>;
35
+ /** Session codec for HTTP-agent providers — round-trips `{ sessionKey, gatewayUrl }`. */
36
+ export declare const httpAgentSessionCodec: SessionCodec;
37
+ /** Build a `ProviderModule` for a remote HTTP agent gateway. */
38
+ export declare function httpAgentProvider(opts: HttpAgentOptions): ProviderModule;
39
+ //# sourceMappingURL=http-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-agent.d.ts","sourceRoot":"","sources":["../../../src/providers/_shared/http-agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,YAAY,EACb,MAAM,gBAAgB,CAAC;AAGxB;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,cAAc,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpH,6FAA6F;IAC7F,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,GAAG,IAAI,CAAC;IACtE,qGAAqG;IACrG,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,GAAG,IAAI,CAAC;IAC9F,kFAAkF;IAClF,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,GAAG,IAAI,CAAC;IAC7F,iFAAiF;IACjF,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,GAAG,IAAI,CAAC;CACpE;AAgBD,iEAAiE;AACjE,wBAAsB,YAAY,CAChC,IAAI,EAAE,gBAAgB,EACtB,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,eAAe,CAAC,CAgM1B;AAED,yFAAyF;AACzF,eAAO,MAAM,qBAAqB,EAAE,YAoBnC,CAAC;AAEF,gEAAgE;AAChE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,GAAG,cAAc,CA6BxE"}
@@ -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"}