pi-ca-leash 0.10.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.
Files changed (138) hide show
  1. package/AGENTS.md +77 -0
  2. package/ARCHITECTURE.md +290 -0
  3. package/CHANGELOG.md +158 -0
  4. package/DEVELOPMENT.md +197 -0
  5. package/KNOWN_LIMITS.md +80 -0
  6. package/LICENSE +21 -0
  7. package/README.md +288 -0
  8. package/extensions/backend-tool-actions.test.ts +59 -0
  9. package/extensions/backend-tool-actions.ts +31 -0
  10. package/extensions/command-drivers.test.ts +37 -0
  11. package/extensions/command-drivers.ts +126 -0
  12. package/extensions/command-parity.test.ts +560 -0
  13. package/extensions/command-visibility.test.ts +21 -0
  14. package/extensions/command-visibility.ts +10 -0
  15. package/extensions/index.ts +3218 -0
  16. package/extensions/llm-tools.test.ts +537 -0
  17. package/extensions/model-catalog.test.ts +34 -0
  18. package/extensions/model-catalog.ts +173 -0
  19. package/extensions/peer-history.test.ts +141 -0
  20. package/extensions/peer-history.ts +90 -0
  21. package/extensions/peer-naming.test.ts +25 -0
  22. package/extensions/peer-naming.ts +129 -0
  23. package/extensions/peer-relay.test.ts +122 -0
  24. package/extensions/peer-relay.ts +83 -0
  25. package/extensions/peer-ux.test.ts +239 -0
  26. package/extensions/peer-ux.ts +327 -0
  27. package/extensions/persistence.test.ts +68 -0
  28. package/extensions/persistence.ts +67 -0
  29. package/extensions/prompts/extension-log-tool.md +5 -0
  30. package/extensions/prompts/peer-ask-tool.md +5 -0
  31. package/extensions/prompts/peer-bridge-system.md +4 -0
  32. package/extensions/prompts/peer-history-tool.md +3 -0
  33. package/extensions/prompts/peer-init-user-help.md +11 -0
  34. package/extensions/prompts/peer-init.md +17 -0
  35. package/extensions/prompts/peer-interrupt-tool.md +2 -0
  36. package/extensions/prompts/peer-list-tool.md +3 -0
  37. package/extensions/prompts/peer-no-babysitting.md +6 -0
  38. package/extensions/prompts/peer-send-tool.md +5 -0
  39. package/extensions/prompts/peer-start-tool.md +7 -0
  40. package/extensions/prompts/peer-stop-tool.md +3 -0
  41. package/extensions/prompts/runtime-models-tool.md +6 -0
  42. package/extensions/prompts/subagent-list-tool.md +3 -0
  43. package/extensions/prompts/subagent-run-tool.md +6 -0
  44. package/extensions/prompts/subagent-status-tool.md +2 -0
  45. package/extensions/prompts/team-list-tool.md +2 -0
  46. package/extensions/prompts/team-message-tool.md +2 -0
  47. package/extensions/prompts/team-spawn-tool.md +5 -0
  48. package/extensions/prompts/team-stop-tool.md +2 -0
  49. package/extensions/prompts/team-task-tool.md +3 -0
  50. package/extensions/prompts.ts +41 -0
  51. package/extensions/runtime-driver.test.ts +38 -0
  52. package/extensions/runtime-driver.ts +33 -0
  53. package/extensions/runtime-safety.test.ts +21 -0
  54. package/extensions/runtime-safety.ts +49 -0
  55. package/extensions/support.test.ts +144 -0
  56. package/extensions/support.ts +205 -0
  57. package/extensions/tool-inputs.test.ts +45 -0
  58. package/extensions/tool-inputs.ts +79 -0
  59. package/node_modules/@pi-claude-code-agent/intercom-bridge/dist/bridge.d.ts +48 -0
  60. package/node_modules/@pi-claude-code-agent/intercom-bridge/dist/bridge.js +406 -0
  61. package/node_modules/@pi-claude-code-agent/intercom-bridge/dist/bridge.js.map +1 -0
  62. package/node_modules/@pi-claude-code-agent/intercom-bridge/dist/cli.d.ts +2 -0
  63. package/node_modules/@pi-claude-code-agent/intercom-bridge/dist/cli.js +18 -0
  64. package/node_modules/@pi-claude-code-agent/intercom-bridge/dist/cli.js.map +1 -0
  65. package/node_modules/@pi-claude-code-agent/intercom-bridge/dist/index.d.ts +5 -0
  66. package/node_modules/@pi-claude-code-agent/intercom-bridge/dist/index.js +5 -0
  67. package/node_modules/@pi-claude-code-agent/intercom-bridge/dist/index.js.map +1 -0
  68. package/node_modules/@pi-claude-code-agent/intercom-bridge/dist/persistence.d.ts +12 -0
  69. package/node_modules/@pi-claude-code-agent/intercom-bridge/dist/persistence.js +31 -0
  70. package/node_modules/@pi-claude-code-agent/intercom-bridge/dist/persistence.js.map +1 -0
  71. package/node_modules/@pi-claude-code-agent/intercom-bridge/dist/pi-intercom-transport.d.ts +12 -0
  72. package/node_modules/@pi-claude-code-agent/intercom-bridge/dist/pi-intercom-transport.js +347 -0
  73. package/node_modules/@pi-claude-code-agent/intercom-bridge/dist/pi-intercom-transport.js.map +1 -0
  74. package/node_modules/@pi-claude-code-agent/intercom-bridge/dist/types.d.ts +103 -0
  75. package/node_modules/@pi-claude-code-agent/intercom-bridge/dist/types.js +2 -0
  76. package/node_modules/@pi-claude-code-agent/intercom-bridge/dist/types.js.map +1 -0
  77. package/node_modules/@pi-claude-code-agent/intercom-bridge/package.json +32 -0
  78. package/node_modules/@pi-claude-code-agent/runtime/dist/cli.d.ts +2 -0
  79. package/node_modules/@pi-claude-code-agent/runtime/dist/cli.js +26 -0
  80. package/node_modules/@pi-claude-code-agent/runtime/dist/cli.js.map +1 -0
  81. package/node_modules/@pi-claude-code-agent/runtime/dist/driver-config.d.ts +4 -0
  82. package/node_modules/@pi-claude-code-agent/runtime/dist/driver-config.js +12 -0
  83. package/node_modules/@pi-claude-code-agent/runtime/dist/driver-config.js.map +1 -0
  84. package/node_modules/@pi-claude-code-agent/runtime/dist/drivers/claude-sdk.d.ts +8 -0
  85. package/node_modules/@pi-claude-code-agent/runtime/dist/drivers/claude-sdk.js +320 -0
  86. package/node_modules/@pi-claude-code-agent/runtime/dist/drivers/claude-sdk.js.map +1 -0
  87. package/node_modules/@pi-claude-code-agent/runtime/dist/drivers/codex-cli.d.ts +24 -0
  88. package/node_modules/@pi-claude-code-agent/runtime/dist/drivers/codex-cli.js +266 -0
  89. package/node_modules/@pi-claude-code-agent/runtime/dist/drivers/codex-cli.js.map +1 -0
  90. package/node_modules/@pi-claude-code-agent/runtime/dist/drivers/messages.d.ts +72 -0
  91. package/node_modules/@pi-claude-code-agent/runtime/dist/drivers/messages.js +2 -0
  92. package/node_modules/@pi-claude-code-agent/runtime/dist/drivers/messages.js.map +1 -0
  93. package/node_modules/@pi-claude-code-agent/runtime/dist/index.d.ts +6 -0
  94. package/node_modules/@pi-claude-code-agent/runtime/dist/index.js +5 -0
  95. package/node_modules/@pi-claude-code-agent/runtime/dist/index.js.map +1 -0
  96. package/node_modules/@pi-claude-code-agent/runtime/dist/persistence.d.ts +16 -0
  97. package/node_modules/@pi-claude-code-agent/runtime/dist/persistence.js +94 -0
  98. package/node_modules/@pi-claude-code-agent/runtime/dist/persistence.js.map +1 -0
  99. package/node_modules/@pi-claude-code-agent/runtime/dist/runtime.d.ts +31 -0
  100. package/node_modules/@pi-claude-code-agent/runtime/dist/runtime.js +409 -0
  101. package/node_modules/@pi-claude-code-agent/runtime/dist/runtime.js.map +1 -0
  102. package/node_modules/@pi-claude-code-agent/runtime/dist/types.d.ts +185 -0
  103. package/node_modules/@pi-claude-code-agent/runtime/dist/types.js +2 -0
  104. package/node_modules/@pi-claude-code-agent/runtime/dist/types.js.map +1 -0
  105. package/node_modules/@pi-claude-code-agent/runtime/package.json +32 -0
  106. package/node_modules/@pi-claude-code-agent/subagents-backend/dist/backend.d.ts +34 -0
  107. package/node_modules/@pi-claude-code-agent/subagents-backend/dist/backend.js +327 -0
  108. package/node_modules/@pi-claude-code-agent/subagents-backend/dist/backend.js.map +1 -0
  109. package/node_modules/@pi-claude-code-agent/subagents-backend/dist/cli.d.ts +2 -0
  110. package/node_modules/@pi-claude-code-agent/subagents-backend/dist/cli.js +17 -0
  111. package/node_modules/@pi-claude-code-agent/subagents-backend/dist/cli.js.map +1 -0
  112. package/node_modules/@pi-claude-code-agent/subagents-backend/dist/index.d.ts +4 -0
  113. package/node_modules/@pi-claude-code-agent/subagents-backend/dist/index.js +4 -0
  114. package/node_modules/@pi-claude-code-agent/subagents-backend/dist/index.js.map +1 -0
  115. package/node_modules/@pi-claude-code-agent/subagents-backend/dist/persistence.d.ts +12 -0
  116. package/node_modules/@pi-claude-code-agent/subagents-backend/dist/persistence.js +81 -0
  117. package/node_modules/@pi-claude-code-agent/subagents-backend/dist/persistence.js.map +1 -0
  118. package/node_modules/@pi-claude-code-agent/subagents-backend/dist/types.d.ts +72 -0
  119. package/node_modules/@pi-claude-code-agent/subagents-backend/dist/types.js +2 -0
  120. package/node_modules/@pi-claude-code-agent/subagents-backend/dist/types.js.map +1 -0
  121. package/node_modules/@pi-claude-code-agent/subagents-backend/package.json +32 -0
  122. package/node_modules/@pi-claude-code-agent/teams-backend/dist/backend.d.ts +27 -0
  123. package/node_modules/@pi-claude-code-agent/teams-backend/dist/backend.js +194 -0
  124. package/node_modules/@pi-claude-code-agent/teams-backend/dist/backend.js.map +1 -0
  125. package/node_modules/@pi-claude-code-agent/teams-backend/dist/cli.d.ts +2 -0
  126. package/node_modules/@pi-claude-code-agent/teams-backend/dist/cli.js +21 -0
  127. package/node_modules/@pi-claude-code-agent/teams-backend/dist/cli.js.map +1 -0
  128. package/node_modules/@pi-claude-code-agent/teams-backend/dist/index.d.ts +4 -0
  129. package/node_modules/@pi-claude-code-agent/teams-backend/dist/index.js +4 -0
  130. package/node_modules/@pi-claude-code-agent/teams-backend/dist/index.js.map +1 -0
  131. package/node_modules/@pi-claude-code-agent/teams-backend/dist/persistence.d.ts +8 -0
  132. package/node_modules/@pi-claude-code-agent/teams-backend/dist/persistence.js +66 -0
  133. package/node_modules/@pi-claude-code-agent/teams-backend/dist/persistence.js.map +1 -0
  134. package/node_modules/@pi-claude-code-agent/teams-backend/dist/types.d.ts +41 -0
  135. package/node_modules/@pi-claude-code-agent/teams-backend/dist/types.js +2 -0
  136. package/node_modules/@pi-claude-code-agent/teams-backend/dist/types.js.map +1 -0
  137. package/node_modules/@pi-claude-code-agent/teams-backend/package.json +33 -0
  138. package/package.json +98 -0
@@ -0,0 +1,320 @@
1
+ function parseJsonOrRaw(value) {
2
+ try {
3
+ return JSON.parse(value);
4
+ }
5
+ catch {
6
+ return value;
7
+ }
8
+ }
9
+ function abortError() {
10
+ return new DOMException("Aborted", "AbortError");
11
+ }
12
+ class MessageStream {
13
+ queue = [];
14
+ waiters = [];
15
+ ended = false;
16
+ push(text) {
17
+ this.queue.push({
18
+ type: "user",
19
+ message: { role: "user", content: text },
20
+ parent_tool_use_id: null,
21
+ session_id: "",
22
+ });
23
+ this.waiters.splice(0).forEach((wake) => wake());
24
+ }
25
+ end() {
26
+ this.ended = true;
27
+ this.waiters.splice(0).forEach((wake) => wake());
28
+ }
29
+ async *[Symbol.asyncIterator]() {
30
+ while (true) {
31
+ while (this.queue.length > 0) {
32
+ yield this.queue.shift();
33
+ }
34
+ if (this.ended) {
35
+ return;
36
+ }
37
+ await new Promise((resolve) => this.waiters.push(resolve));
38
+ }
39
+ }
40
+ }
41
+ function toBlock(block) {
42
+ const item = block;
43
+ return {
44
+ type: String(item.type ?? item.constructor?.name ?? "unknown"),
45
+ text: typeof item.text === "string" ? item.text : undefined,
46
+ name: typeof item.name === "string" ? item.name : undefined,
47
+ id: typeof item.id === "string" ? item.id : undefined,
48
+ input: item.input,
49
+ content: item.content,
50
+ isError: typeof item.is_error === "boolean" ? item.is_error : typeof item.isError === "boolean" ? item.isError : undefined,
51
+ raw: item,
52
+ };
53
+ }
54
+ function toUsage(usage, totalCostUsd, modelUsage) {
55
+ if (!usage || typeof usage !== "object") {
56
+ return typeof totalCostUsd === "number" ? { totalCostUsd } : undefined;
57
+ }
58
+ const value = usage;
59
+ const inputTokens = typeof value.input_tokens === "number" ? value.input_tokens : undefined;
60
+ const outputTokens = typeof value.output_tokens === "number" ? value.output_tokens : undefined;
61
+ const cacheCreationInputTokens = typeof value.cache_creation_input_tokens === "number"
62
+ ? value.cache_creation_input_tokens
63
+ : undefined;
64
+ const cacheReadInputTokens = typeof value.cache_read_input_tokens === "number" ? value.cache_read_input_tokens : undefined;
65
+ const reasoningOutputTokens = typeof value.reasoning_output_tokens === "number" ? value.reasoning_output_tokens : undefined;
66
+ const modelUsageValues = modelUsage && typeof modelUsage === "object" ? Object.values(modelUsage) : [];
67
+ const modelContextWindows = modelUsageValues
68
+ .map((entry) => entry && typeof entry === "object" ? entry.contextWindow : undefined)
69
+ .filter((entry) => typeof entry === "number" && Number.isFinite(entry));
70
+ const modelMaxOutputTokens = modelUsageValues
71
+ .map((entry) => entry && typeof entry === "object" ? entry.maxOutputTokens : undefined)
72
+ .filter((entry) => typeof entry === "number" && Number.isFinite(entry));
73
+ const contextWindow = modelContextWindows.length > 0 ? Math.max(...modelContextWindows) : undefined;
74
+ const maxOutputTokens = modelMaxOutputTokens.length > 0 ? Math.max(...modelMaxOutputTokens) : undefined;
75
+ const contextTokens = [inputTokens, cacheCreationInputTokens, cacheReadInputTokens]
76
+ .filter((entry) => typeof entry === "number" && Number.isFinite(entry))
77
+ .reduce((sum, entry) => sum + entry, 0);
78
+ return {
79
+ inputTokens,
80
+ outputTokens,
81
+ cacheCreationInputTokens,
82
+ cacheReadInputTokens,
83
+ reasoningOutputTokens,
84
+ totalCostUsd: typeof totalCostUsd === "number" ? totalCostUsd : undefined,
85
+ contextTokens: contextTokens > 0 ? contextTokens : undefined,
86
+ contextWindow,
87
+ contextPercentage: contextWindow && contextTokens > 0 ? Math.round((contextTokens / contextWindow) * 1000) / 10 : undefined,
88
+ maxOutputTokens,
89
+ raw: usage,
90
+ };
91
+ }
92
+ function parseAssistantMessage(message, raw) {
93
+ const blocks = (Array.isArray(message.content) ? message.content : []).map(toBlock);
94
+ const result = [
95
+ {
96
+ type: "assistant",
97
+ blocks,
98
+ model: typeof message.model === "string" ? message.model : undefined,
99
+ raw,
100
+ },
101
+ ];
102
+ for (const block of blocks) {
103
+ if (block.type === "tool_use") {
104
+ result.push({
105
+ type: "tool_use",
106
+ toolName: block.name ?? "unknown",
107
+ toolUseId: block.id,
108
+ input: block.input,
109
+ raw: block.raw,
110
+ });
111
+ }
112
+ }
113
+ return result;
114
+ }
115
+ function parseUserMessage(message, raw, toolUseResult) {
116
+ const blocks = (Array.isArray(message.content) ? message.content : []).map(toBlock);
117
+ const toolResultBlock = blocks.find((block) => block.type === "tool_result");
118
+ if (!toolResultBlock) {
119
+ return [];
120
+ }
121
+ const toolResult = toolUseResult && typeof toolUseResult === "object"
122
+ ? toolUseResult
123
+ : undefined;
124
+ return [{
125
+ type: "tool_result",
126
+ role: "user",
127
+ blocks,
128
+ toolName: typeof toolResult?.tool_name === "string" ? toolResult.tool_name : toolResultBlock.name ?? "tool",
129
+ toolUseId: typeof toolResultBlock.raw?.tool_use_id === "string"
130
+ ? String(toolResultBlock.raw.tool_use_id)
131
+ : undefined,
132
+ output: toolResult ?? toolResultBlock.content,
133
+ isError: toolResultBlock.isError,
134
+ raw,
135
+ }];
136
+ }
137
+ export function parseClaudeSdkMessage(message) {
138
+ if (!message || typeof message !== "object") {
139
+ return [];
140
+ }
141
+ const item = message;
142
+ const type = String(item.type ?? item.constructor?.name ?? "");
143
+ if (type === "system" || type === "SystemMessage") {
144
+ return [{
145
+ type: "system",
146
+ subtype: typeof item.subtype === "string" ? item.subtype : undefined,
147
+ sessionId: typeof item.session_id === "string" ? item.session_id : typeof item.sessionId === "string" ? item.sessionId : undefined,
148
+ cwd: typeof item.cwd === "string" ? item.cwd : undefined,
149
+ model: typeof item.model === "string" ? item.model : undefined,
150
+ metadata: { ...(item.data ?? {}) },
151
+ raw: message,
152
+ }];
153
+ }
154
+ if (type === "assistant" || type === "AssistantMessage") {
155
+ const assistant = item.message ?? item;
156
+ return parseAssistantMessage(assistant, message);
157
+ }
158
+ if (type === "user" || type === "UserMessage") {
159
+ const user = item.message ?? item;
160
+ return parseUserMessage(user, message, item.tool_use_result);
161
+ }
162
+ if (type === "result" || type === "ResultMessage") {
163
+ return [{
164
+ type: "result",
165
+ ok: !Boolean(item.is_error ?? item.isError),
166
+ summary: typeof item.result === "string" ? item.result : JSON.stringify(item.result ?? ""),
167
+ stopReason: typeof item.stop_reason === "string" ? item.stop_reason : undefined,
168
+ usage: toUsage(item.usage, item.total_cost_usd ?? item.totalCostUsd, item.modelUsage),
169
+ raw: message,
170
+ }];
171
+ }
172
+ if (type === "error" || type === "ErrorMessage") {
173
+ return [{
174
+ type: "error",
175
+ message: typeof item.message === "string" ? item.message : JSON.stringify(item),
176
+ code: typeof item.code === "string" ? item.code : undefined,
177
+ raw: message,
178
+ }];
179
+ }
180
+ if (["rate_limit_event", "task_notification", "compact_boundary"].includes(type)) {
181
+ return [{
182
+ type: "stream_event",
183
+ summary: String(item.summary ?? item.subtype ?? type),
184
+ metadata: {
185
+ eventType: type,
186
+ sessionId: item.session_id ?? item.sessionId,
187
+ },
188
+ raw: message,
189
+ }];
190
+ }
191
+ return [];
192
+ }
193
+ export class ClaudeSdkDriver {
194
+ name = "claude-sdk";
195
+ run(input, onEvent) {
196
+ const controller = new AbortController();
197
+ const done = (async () => {
198
+ try {
199
+ let sdk;
200
+ try {
201
+ sdk = await import("@anthropic-ai/claude-agent-sdk");
202
+ }
203
+ catch (error) {
204
+ await onEvent({
205
+ type: "error",
206
+ payload: {
207
+ message: `Claude Agent SDK not found. Install @anthropic-ai/claude-agent-sdk. ${error instanceof Error ? error.message : String(error)}`,
208
+ code: "CLAUDE_SDK_MISSING",
209
+ },
210
+ });
211
+ return { code: 1, signal: null };
212
+ }
213
+ const promptStream = new MessageStream();
214
+ promptStream.push(input.prompt);
215
+ promptStream.end();
216
+ const request = sdk.query({
217
+ prompt: promptStream,
218
+ options: this.buildOptions(input),
219
+ });
220
+ const onAbort = () => {
221
+ void request.close?.();
222
+ void request.interrupt?.();
223
+ };
224
+ controller.signal.addEventListener("abort", onAbort, { once: true });
225
+ try {
226
+ for await (const message of request) {
227
+ if (controller.signal.aborted) {
228
+ throw abortError();
229
+ }
230
+ for (const normalized of parseClaudeSdkMessage(message)) {
231
+ await onEvent({ type: "message", payload: normalized });
232
+ }
233
+ }
234
+ return { code: 0, signal: null };
235
+ }
236
+ finally {
237
+ controller.signal.removeEventListener("abort", onAbort);
238
+ await request.close?.();
239
+ }
240
+ }
241
+ catch (error) {
242
+ if (error?.name === "AbortError") {
243
+ return { code: 130, signal: "SIGINT" };
244
+ }
245
+ const message = enrichClaudeSdkErrorMessage(error instanceof Error ? error.message : String(error), input.model);
246
+ await onEvent({
247
+ type: "error",
248
+ payload: {
249
+ message,
250
+ code: "CLAUDE_SDK_ERROR",
251
+ },
252
+ });
253
+ return { code: 1, signal: null };
254
+ }
255
+ })();
256
+ return {
257
+ kill() {
258
+ controller.abort();
259
+ },
260
+ done,
261
+ };
262
+ }
263
+ buildOptions(input) {
264
+ const result = {
265
+ cwd: input.cwd,
266
+ permissionMode: input.permissionMode ?? "bypassPermissions",
267
+ allowDangerouslySkipPermissions: true,
268
+ settingSources: ["project", "user"],
269
+ };
270
+ if (input.env) {
271
+ result.env = input.env;
272
+ }
273
+ if (process.env.CLAUDE_CODE_EXECUTABLE) {
274
+ result.pathToClaudeCodeExecutable = process.env.CLAUDE_CODE_EXECUTABLE;
275
+ }
276
+ if (input.resumeSessionId) {
277
+ result.resume = input.resumeSessionId;
278
+ }
279
+ if (input.model) {
280
+ result.model = input.model;
281
+ }
282
+ if (input.appendSystemPrompt != null) {
283
+ result.systemPrompt = { type: "preset", preset: "claude_code", append: input.appendSystemPrompt };
284
+ }
285
+ if (input.tools?.length) {
286
+ result.allowedTools = input.tools;
287
+ }
288
+ if (input.additionalDirectories?.length) {
289
+ result.additionalDirectories = input.additionalDirectories;
290
+ }
291
+ if (process.env.CLAUDE_SDK_OUTPUT_FORMAT) {
292
+ result.outputFormat = parseJsonOrRaw(process.env.CLAUDE_SDK_OUTPUT_FORMAT);
293
+ }
294
+ return result;
295
+ }
296
+ }
297
+ function enrichClaudeSdkErrorMessage(message, model) {
298
+ const lower = message.toLowerCase();
299
+ const hints = [];
300
+ if (lower.includes("native binary not found") || lower.includes("claude code") && lower.includes("not found")) {
301
+ hints.push("Install Claude Code or set CLAUDE_CODE_EXECUTABLE to the native binary path.");
302
+ }
303
+ if (lower.includes("bedrock")) {
304
+ hints.push("This model/provider appears to route through Amazon Bedrock; use a fully qualified model id from runtime_models or configure Bedrock credentials.");
305
+ }
306
+ if (lower.includes("api key") || lower.includes("apikey") || lower.includes("unauthorized")) {
307
+ hints.push("Provider credentials are missing or rejected for this runtime/model.");
308
+ }
309
+ if (lower.includes("prompt is too long") || lower.includes("prompt too long") || lower.includes("context length")) {
310
+ hints.push("Split the task into smaller slices or ask the peer to inspect files instead of pasting large context.");
311
+ }
312
+ if (model && /^(opus|sonnet|haiku)$/i.test(model.trim())) {
313
+ hints.push(`"${model}" is a shorthand alias; pass the full Claude model id to the runtime.`);
314
+ }
315
+ if (hints.length === 0) {
316
+ return message;
317
+ }
318
+ return [message, ...[...new Set(hints)].map((hint) => `Hint: ${hint}`)].join("\n");
319
+ }
320
+ //# sourceMappingURL=claude-sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-sdk.js","sourceRoot":"","sources":["../../src/drivers/claude-sdk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { spawn as nodeSpawn } from "node:child_process";
2
+ import type { NormalizedDriverMessage } from "./messages.js";
3
+ import type { DriverEventEnvelope, RuntimeDriver, RuntimeDriverRunHandle, RuntimeDriverRunInput } from "../types.js";
4
+ type SpawnFn = typeof nodeSpawn;
5
+ export interface CodexCliDriverOptions {
6
+ spawn?: SpawnFn;
7
+ executable?: string;
8
+ }
9
+ export declare function buildCodexCliCommand(input: {
10
+ prompt: string;
11
+ cwd: string;
12
+ model?: string;
13
+ appendSystemPrompt?: string;
14
+ resumeSessionId?: string;
15
+ }): string[];
16
+ export declare function parseCodexCliEvent(event: unknown): NormalizedDriverMessage | null;
17
+ export declare class CodexCliDriver implements RuntimeDriver {
18
+ readonly name: "codex-cli";
19
+ private readonly spawnFn;
20
+ private readonly executable;
21
+ constructor(options?: CodexCliDriverOptions);
22
+ run(input: RuntimeDriverRunInput, onEvent: (event: DriverEventEnvelope) => Promise<void> | void): RuntimeDriverRunHandle;
23
+ }
24
+ export {};
@@ -0,0 +1,266 @@
1
+ import { spawn as nodeSpawn } from "node:child_process";
2
+ export function buildCodexCliCommand(input) {
3
+ const effectivePrompt = input.appendSystemPrompt
4
+ ? `<system>\n${input.appendSystemPrompt}\n</system>\n\n${input.prompt}`
5
+ : input.prompt;
6
+ const args = ["exec"];
7
+ if (input.resumeSessionId) {
8
+ args.push("resume", "--json", "--full-auto");
9
+ if (input.model) {
10
+ args.push("-m", input.model);
11
+ }
12
+ args.push(input.resumeSessionId, effectivePrompt);
13
+ return args;
14
+ }
15
+ args.push("--json", "--full-auto", "-C", input.cwd);
16
+ if (input.model) {
17
+ args.push("-m", input.model);
18
+ }
19
+ args.push(effectivePrompt);
20
+ return args;
21
+ }
22
+ function toUsage(usage) {
23
+ if (!usage || typeof usage !== "object")
24
+ return undefined;
25
+ const u = usage;
26
+ return {
27
+ inputTokens: typeof u.input_tokens === "number" ? u.input_tokens : undefined,
28
+ outputTokens: typeof u.output_tokens === "number" ? u.output_tokens : undefined,
29
+ cacheCreationInputTokens: typeof u.cache_creation_input_tokens === "number" ? u.cache_creation_input_tokens : undefined,
30
+ cacheReadInputTokens: typeof u.cache_read_input_tokens === "number"
31
+ ? u.cache_read_input_tokens
32
+ : typeof u.cached_input_tokens === "number"
33
+ ? u.cached_input_tokens
34
+ : undefined,
35
+ reasoningOutputTokens: typeof u.reasoning_output_tokens === "number" ? u.reasoning_output_tokens : undefined,
36
+ raw: usage,
37
+ };
38
+ }
39
+ export function parseCodexCliEvent(event) {
40
+ if (!event || typeof event !== "object")
41
+ return null;
42
+ const e = event;
43
+ const type = String(e.type ?? "");
44
+ if (type === "thread.started") {
45
+ const sessionId = typeof e.thread_id === "string"
46
+ ? e.thread_id
47
+ : typeof e.session_id === "string"
48
+ ? e.session_id
49
+ : undefined;
50
+ return {
51
+ type: "system",
52
+ subtype: "init",
53
+ sessionId,
54
+ model: typeof e.model === "string" ? e.model : typeof e.model_id === "string" ? e.model_id : undefined,
55
+ raw: event,
56
+ };
57
+ }
58
+ if (type === "item.started") {
59
+ const item = e.item;
60
+ if (item?.type === "command_execution") {
61
+ return {
62
+ type: "tool_use",
63
+ toolName: "command_execution",
64
+ toolUseId: typeof item.id === "string" ? item.id : undefined,
65
+ input: { command: item.command, cwd: item.cwd },
66
+ raw: event,
67
+ };
68
+ }
69
+ return null;
70
+ }
71
+ if (type === "item.completed") {
72
+ const item = e.item;
73
+ if (item?.type === "command_execution") {
74
+ const exitCode = typeof item.exit_code === "number" ? item.exit_code : 0;
75
+ return {
76
+ type: "tool_result",
77
+ toolName: "command_execution",
78
+ toolUseId: typeof item.id === "string" ? item.id : undefined,
79
+ output: { stdout: item.stdout, exit_code: exitCode },
80
+ isError: exitCode !== 0,
81
+ raw: event,
82
+ };
83
+ }
84
+ if (item?.type === "agent_message" || item?.type === "assistant_message") {
85
+ const text = typeof item.text === "string" ? item.text : "";
86
+ return {
87
+ type: "assistant",
88
+ blocks: [{ type: "text", text, raw: item }],
89
+ raw: event,
90
+ };
91
+ }
92
+ return null;
93
+ }
94
+ if (type === "turn.completed") {
95
+ const summary = typeof e.summary === "string" ? e.summary : "";
96
+ return {
97
+ type: "result",
98
+ ok: true,
99
+ summary,
100
+ usage: toUsage(e.usage),
101
+ raw: event,
102
+ };
103
+ }
104
+ // error and *.failed events are handled by the driver as error envelopes
105
+ return null;
106
+ }
107
+ function isErrorEvent(event) {
108
+ if (!event || typeof event !== "object")
109
+ return false;
110
+ const type = String(event.type ?? "");
111
+ return type === "error" || type.endsWith(".failed");
112
+ }
113
+ function extractError(event) {
114
+ const e = event;
115
+ return {
116
+ message: typeof e.message === "string" ? e.message : JSON.stringify(event),
117
+ code: typeof e.code === "string" ? e.code : undefined,
118
+ };
119
+ }
120
+ const RING_BUFFER_MAX = 50;
121
+ const STDERR_MAX_BYTES = 8 * 1024;
122
+ export class CodexCliDriver {
123
+ name = "codex-cli";
124
+ spawnFn;
125
+ executable;
126
+ constructor(options = {}) {
127
+ this.spawnFn = options.spawn ?? nodeSpawn;
128
+ this.executable =
129
+ options.executable ?? (process.env.CODEX_CLI_EXECUTABLE ?? "codex");
130
+ }
131
+ run(input, onEvent) {
132
+ // Hard-reject unsupported options before spawning
133
+ if (input.tools && input.tools.length > 0) {
134
+ throw new RangeError("codex-cli driver does not support allowedTools");
135
+ }
136
+ if (input.additionalDirectories && input.additionalDirectories.length > 0) {
137
+ throw new RangeError("codex-cli driver does not support additionalDirectories");
138
+ }
139
+ if (input.permissionMode === "plan" || input.permissionMode === "dontAsk") {
140
+ throw new RangeError(`codex-cli driver does not support permissionMode=${input.permissionMode}`);
141
+ }
142
+ // permissionMode acceptEdits/auto/bypassPermissions/default are accepted but not
143
+ // mapped to sandbox flags — --full-auto is always passed in this slice
144
+ const args = buildCodexCliCommand({
145
+ prompt: input.prompt,
146
+ cwd: input.cwd,
147
+ model: input.model,
148
+ appendSystemPrompt: input.appendSystemPrompt,
149
+ resumeSessionId: input.resumeSessionId,
150
+ });
151
+ const env = { ...process.env, ...(input.env ?? {}) };
152
+ let aborted = false;
153
+ const child = this.spawnFn(this.executable, args, {
154
+ env,
155
+ stdio: ["ignore", "pipe", "pipe"],
156
+ });
157
+ const ringBuffer = [];
158
+ let stderrTail = "";
159
+ let structuredErrorEmitted = false;
160
+ let stdoutBuffer = "";
161
+ let spawnError;
162
+ // Serial delivery chain — events are fired immediately as lines arrive (live/
163
+ // streaming) but each onEvent call waits for the previous one to complete so
164
+ // ordering is guaranteed. The close handler extends this chain with any final
165
+ // error envelope and then resolves done, ensuring done only settles after every
166
+ // pending onEvent delivery has finished.
167
+ let deliveryChain = Promise.resolve();
168
+ function deliver(envelope) {
169
+ deliveryChain = deliveryChain.then(async () => {
170
+ try {
171
+ await onEvent(envelope);
172
+ }
173
+ catch {
174
+ // swallow handler errors to keep the chain alive
175
+ }
176
+ });
177
+ }
178
+ function processLine(line) {
179
+ let parsed;
180
+ try {
181
+ parsed = JSON.parse(line);
182
+ }
183
+ catch {
184
+ // Malformed line: keep in ring buffer for crash diagnostics
185
+ if (ringBuffer.length >= RING_BUFFER_MAX)
186
+ ringBuffer.shift();
187
+ ringBuffer.push(line);
188
+ return;
189
+ }
190
+ if (isErrorEvent(parsed)) {
191
+ structuredErrorEmitted = true;
192
+ const err = extractError(parsed);
193
+ deliver({ type: "error", payload: { message: err.message, code: err.code, raw: parsed } });
194
+ return;
195
+ }
196
+ const normalized = parseCodexCliEvent(parsed);
197
+ if (normalized) {
198
+ deliver({ type: "message", payload: normalized });
199
+ }
200
+ }
201
+ child.stdout?.on("data", (chunk) => {
202
+ stdoutBuffer += chunk.toString("utf8");
203
+ const lines = stdoutBuffer.split("\n");
204
+ stdoutBuffer = lines.pop() ?? "";
205
+ for (const raw of lines) {
206
+ const trimmed = raw.trim();
207
+ if (trimmed)
208
+ processLine(trimmed);
209
+ }
210
+ });
211
+ child.stderr?.on("data", (chunk) => {
212
+ stderrTail += chunk.toString("utf8");
213
+ if (stderrTail.length > STDERR_MAX_BYTES) {
214
+ stderrTail = stderrTail.slice(-STDERR_MAX_BYTES);
215
+ }
216
+ });
217
+ // Capture spawn failures (e.g. ENOENT — executable not found).
218
+ // The close event always follows, so resolution happens there.
219
+ child.on("error", (err) => {
220
+ spawnError = err;
221
+ });
222
+ const done = new Promise((resolve) => {
223
+ child.on("close", (code, signal) => {
224
+ // Flush any partial JSONL line left in the buffer
225
+ const remainder = stdoutBuffer.trim();
226
+ if (remainder)
227
+ processLine(remainder);
228
+ if (spawnError) {
229
+ // Spawn failure overrides all other error paths
230
+ deliver({
231
+ type: "error",
232
+ payload: { message: enrichCodexSpawnErrorMessage(spawnError.message), code: "SPAWN_ERROR" },
233
+ });
234
+ }
235
+ else if (!aborted && code !== 0 && !structuredErrorEmitted) {
236
+ // Surface stderr + any malformed stdout context from ring buffer
237
+ const base = stderrTail.trim() || `codex exited with code ${code}`;
238
+ const ringCtx = ringBuffer.length > 0
239
+ ? ` | malformed stdout: ${ringBuffer.slice(-5).join(" | ")}`
240
+ : "";
241
+ deliver({ type: "error", payload: { message: base + ringCtx } });
242
+ }
243
+ // Extend the delivery chain with the resolve call so done only
244
+ // settles after every pending onEvent delivery has completed.
245
+ void deliveryChain.then(() => {
246
+ resolve({ code, signal: signal });
247
+ });
248
+ });
249
+ });
250
+ return {
251
+ kill(sig = "SIGINT") {
252
+ aborted = true;
253
+ child.kill(sig);
254
+ },
255
+ done,
256
+ };
257
+ }
258
+ }
259
+ function enrichCodexSpawnErrorMessage(message) {
260
+ const lower = message.toLowerCase();
261
+ if (!lower.includes("enoent") && !lower.includes("not found")) {
262
+ return message;
263
+ }
264
+ return `${message}\nHint: codex executable could not be spawned. Check PATH or set CODEX_CLI_EXECUTABLE to the Codex CLI binary.`;
265
+ }
266
+ //# sourceMappingURL=codex-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-cli.js","sourceRoot":"","sources":["../../src/drivers/codex-cli.ts"],"names":[],"mappings":"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"}