@agentex/agent 0.0.2 → 0.0.4

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 (190) hide show
  1. package/README.md +405 -87
  2. package/dist/index.d.ts +18 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +11 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/providers/claude/execute.d.ts.map +1 -1
  7. package/dist/providers/claude/execute.js +51 -18
  8. package/dist/providers/claude/execute.js.map +1 -1
  9. package/dist/providers/claude/index.d.ts.map +1 -1
  10. package/dist/providers/claude/index.js +37 -8
  11. package/dist/providers/claude/index.js.map +1 -1
  12. package/dist/providers/claude/parse.d.ts.map +1 -1
  13. package/dist/providers/claude/parse.js +2 -1
  14. package/dist/providers/claude/parse.js.map +1 -1
  15. package/dist/providers/claude/session.d.ts +10 -0
  16. package/dist/providers/claude/session.d.ts.map +1 -0
  17. package/dist/providers/claude/session.js +549 -0
  18. package/dist/providers/claude/session.js.map +1 -0
  19. package/dist/providers/claude/test.d.ts.map +1 -1
  20. package/dist/providers/claude/test.js +38 -11
  21. package/dist/providers/claude/test.js.map +1 -1
  22. package/dist/providers/codex/execute.d.ts.map +1 -1
  23. package/dist/providers/codex/execute.js +122 -74
  24. package/dist/providers/codex/execute.js.map +1 -1
  25. package/dist/providers/codex/index.d.ts.map +1 -1
  26. package/dist/providers/codex/index.js +56 -2
  27. package/dist/providers/codex/index.js.map +1 -1
  28. package/dist/providers/codex/parse.d.ts.map +1 -1
  29. package/dist/providers/codex/parse.js +25 -3
  30. package/dist/providers/codex/parse.js.map +1 -1
  31. package/dist/providers/codex/session.d.ts +3 -0
  32. package/dist/providers/codex/session.d.ts.map +1 -0
  33. package/dist/providers/codex/session.js +553 -0
  34. package/dist/providers/codex/session.js.map +1 -0
  35. package/dist/providers/codex/test.d.ts.map +1 -1
  36. package/dist/providers/codex/test.js +28 -12
  37. package/dist/providers/codex/test.js.map +1 -1
  38. package/dist/providers/codex/usage-scanner.d.ts +18 -0
  39. package/dist/providers/codex/usage-scanner.d.ts.map +1 -0
  40. package/dist/providers/codex/usage-scanner.js +148 -0
  41. package/dist/providers/codex/usage-scanner.js.map +1 -0
  42. package/dist/providers/cursor/codec.d.ts +3 -0
  43. package/dist/providers/cursor/codec.d.ts.map +1 -0
  44. package/dist/providers/cursor/codec.js +43 -0
  45. package/dist/providers/cursor/codec.js.map +1 -0
  46. package/dist/providers/cursor/execute.d.ts +3 -0
  47. package/dist/providers/cursor/execute.d.ts.map +1 -0
  48. package/dist/providers/cursor/execute.js +248 -0
  49. package/dist/providers/cursor/execute.js.map +1 -0
  50. package/dist/providers/cursor/index.d.ts +3 -0
  51. package/dist/providers/cursor/index.d.ts.map +1 -0
  52. package/dist/providers/cursor/index.js +28 -0
  53. package/dist/providers/cursor/index.js.map +1 -0
  54. package/dist/providers/cursor/parse.d.ts +26 -0
  55. package/dist/providers/cursor/parse.d.ts.map +1 -0
  56. package/dist/providers/cursor/parse.js +224 -0
  57. package/dist/providers/cursor/parse.js.map +1 -0
  58. package/dist/providers/cursor/test.d.ts +3 -0
  59. package/dist/providers/cursor/test.d.ts.map +1 -0
  60. package/dist/providers/cursor/test.js +58 -0
  61. package/dist/providers/cursor/test.js.map +1 -0
  62. package/dist/providers/gemini/codec.d.ts +3 -0
  63. package/dist/providers/gemini/codec.d.ts.map +1 -0
  64. package/dist/providers/gemini/codec.js +47 -0
  65. package/dist/providers/gemini/codec.js.map +1 -0
  66. package/dist/providers/gemini/execute.d.ts +3 -0
  67. package/dist/providers/gemini/execute.d.ts.map +1 -0
  68. package/dist/providers/gemini/execute.js +236 -0
  69. package/dist/providers/gemini/execute.js.map +1 -0
  70. package/dist/providers/gemini/index.d.ts +3 -0
  71. package/dist/providers/gemini/index.d.ts.map +1 -0
  72. package/dist/providers/gemini/index.js +62 -0
  73. package/dist/providers/gemini/index.js.map +1 -0
  74. package/dist/providers/gemini/parse.d.ts +20 -0
  75. package/dist/providers/gemini/parse.d.ts.map +1 -0
  76. package/dist/providers/gemini/parse.js +207 -0
  77. package/dist/providers/gemini/parse.js.map +1 -0
  78. package/dist/providers/gemini/test.d.ts +3 -0
  79. package/dist/providers/gemini/test.d.ts.map +1 -0
  80. package/dist/providers/gemini/test.js +67 -0
  81. package/dist/providers/gemini/test.js.map +1 -0
  82. package/dist/providers/openclaw/execute.d.ts.map +1 -1
  83. package/dist/providers/openclaw/execute.js +10 -5
  84. package/dist/providers/openclaw/execute.js.map +1 -1
  85. package/dist/providers/openclaw/index.d.ts.map +1 -1
  86. package/dist/providers/openclaw/index.js +15 -2
  87. package/dist/providers/openclaw/index.js.map +1 -1
  88. package/dist/providers/openclaw/test.d.ts.map +1 -1
  89. package/dist/providers/openclaw/test.js +4 -0
  90. package/dist/providers/openclaw/test.js.map +1 -1
  91. package/dist/providers/opencode/codec.d.ts +3 -0
  92. package/dist/providers/opencode/codec.d.ts.map +1 -0
  93. package/dist/providers/opencode/codec.js +47 -0
  94. package/dist/providers/opencode/codec.js.map +1 -0
  95. package/dist/providers/opencode/execute.d.ts +3 -0
  96. package/dist/providers/opencode/execute.d.ts.map +1 -0
  97. package/dist/providers/opencode/execute.js +225 -0
  98. package/dist/providers/opencode/execute.js.map +1 -0
  99. package/dist/providers/opencode/index.d.ts +3 -0
  100. package/dist/providers/opencode/index.d.ts.map +1 -0
  101. package/dist/providers/opencode/index.js +62 -0
  102. package/dist/providers/opencode/index.js.map +1 -0
  103. package/dist/providers/opencode/parse.d.ts +19 -0
  104. package/dist/providers/opencode/parse.d.ts.map +1 -0
  105. package/dist/providers/opencode/parse.js +145 -0
  106. package/dist/providers/opencode/parse.js.map +1 -0
  107. package/dist/providers/opencode/test.d.ts +3 -0
  108. package/dist/providers/opencode/test.d.ts.map +1 -0
  109. package/dist/providers/opencode/test.js +60 -0
  110. package/dist/providers/opencode/test.js.map +1 -0
  111. package/dist/providers/pi/codec.d.ts +7 -0
  112. package/dist/providers/pi/codec.d.ts.map +1 -0
  113. package/dist/providers/pi/codec.js +45 -0
  114. package/dist/providers/pi/codec.js.map +1 -0
  115. package/dist/providers/pi/execute.d.ts +3 -0
  116. package/dist/providers/pi/execute.d.ts.map +1 -0
  117. package/dist/providers/pi/execute.js +300 -0
  118. package/dist/providers/pi/execute.js.map +1 -0
  119. package/dist/providers/pi/index.d.ts +3 -0
  120. package/dist/providers/pi/index.d.ts.map +1 -0
  121. package/dist/providers/pi/index.js +64 -0
  122. package/dist/providers/pi/index.js.map +1 -0
  123. package/dist/providers/pi/parse.d.ts +18 -0
  124. package/dist/providers/pi/parse.d.ts.map +1 -0
  125. package/dist/providers/pi/parse.js +182 -0
  126. package/dist/providers/pi/parse.js.map +1 -0
  127. package/dist/providers/pi/test.d.ts +3 -0
  128. package/dist/providers/pi/test.d.ts.map +1 -0
  129. package/dist/providers/pi/test.js +60 -0
  130. package/dist/providers/pi/test.js.map +1 -0
  131. package/dist/providers/process/execute.d.ts.map +1 -1
  132. package/dist/providers/process/execute.js +45 -7
  133. package/dist/providers/process/execute.js.map +1 -1
  134. package/dist/providers/process/index.d.ts.map +1 -1
  135. package/dist/providers/process/index.js +27 -30
  136. package/dist/providers/process/index.js.map +1 -1
  137. package/dist/registry.d.ts.map +1 -1
  138. package/dist/registry.js +8 -0
  139. package/dist/registry.js.map +1 -1
  140. package/dist/types.d.ts +379 -22
  141. package/dist/types.d.ts.map +1 -1
  142. package/dist/types.js +23 -1
  143. package/dist/types.js.map +1 -1
  144. package/dist/utils/ask-user-question.d.ts +50 -0
  145. package/dist/utils/ask-user-question.d.ts.map +1 -0
  146. package/dist/utils/ask-user-question.js +32 -0
  147. package/dist/utils/ask-user-question.js.map +1 -0
  148. package/dist/utils/auth.d.ts +22 -0
  149. package/dist/utils/auth.d.ts.map +1 -0
  150. package/dist/utils/auth.js +497 -0
  151. package/dist/utils/auth.js.map +1 -0
  152. package/dist/utils/binary.d.ts.map +1 -1
  153. package/dist/utils/binary.js +29 -6
  154. package/dist/utils/binary.js.map +1 -1
  155. package/dist/utils/env.d.ts.map +1 -1
  156. package/dist/utils/env.js +18 -0
  157. package/dist/utils/env.js.map +1 -1
  158. package/dist/utils/execute-all.d.ts +20 -0
  159. package/dist/utils/execute-all.d.ts.map +1 -0
  160. package/dist/utils/execute-all.js +46 -0
  161. package/dist/utils/execute-all.js.map +1 -0
  162. package/dist/utils/instructions.d.ts +7 -0
  163. package/dist/utils/instructions.d.ts.map +1 -0
  164. package/dist/utils/instructions.js +21 -0
  165. package/dist/utils/instructions.js.map +1 -0
  166. package/dist/utils/model-cache.d.ts +11 -0
  167. package/dist/utils/model-cache.d.ts.map +1 -0
  168. package/dist/utils/model-cache.js +17 -0
  169. package/dist/utils/model-cache.js.map +1 -0
  170. package/dist/utils/process.d.ts +4 -0
  171. package/dist/utils/process.d.ts.map +1 -1
  172. package/dist/utils/process.js +46 -5
  173. package/dist/utils/process.js.map +1 -1
  174. package/dist/utils/runtime-config.d.ts +34 -0
  175. package/dist/utils/runtime-config.d.ts.map +1 -0
  176. package/dist/utils/runtime-config.js +71 -0
  177. package/dist/utils/runtime-config.js.map +1 -0
  178. package/dist/utils/runtime-homes.d.ts +13 -0
  179. package/dist/utils/runtime-homes.d.ts.map +1 -0
  180. package/dist/utils/runtime-homes.js +41 -0
  181. package/dist/utils/runtime-homes.js.map +1 -0
  182. package/dist/utils/skills.d.ts +152 -1
  183. package/dist/utils/skills.d.ts.map +1 -1
  184. package/dist/utils/skills.js +352 -0
  185. package/dist/utils/skills.js.map +1 -1
  186. package/dist/utils/workspace.d.ts +55 -0
  187. package/dist/utils/workspace.d.ts.map +1 -0
  188. package/dist/utils/workspace.js +89 -0
  189. package/dist/utils/workspace.js.map +1 -0
  190. package/package.json +5 -2
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @agentex/agent
2
2
 
3
- Programmatic execution of AI coding agents. Spawn and manage Claude Code, Codex, OpenClaw, or any CLI-based agent as a child process with streaming output, session resume, and a unified interface.
3
+ Programmatic execution of AI coding agents. Spawn and manage Claude Code, Codex, Gemini, Cursor, OpenCode, Pi, OpenClaw, or any CLI-based agent as a child process with streaming output, multi-turn sessions, auth detection, isolated workspaces, skill installation, and a unified interface.
4
4
 
5
5
  ## Install
6
6
 
@@ -8,6 +8,8 @@ Programmatic execution of AI coding agents. Spawn and manage Claude Code, Codex,
8
8
  npm install @agentex/agent
9
9
  ```
10
10
 
11
+ Node.js >= 18. Each provider requires its CLI to be installed and on `$PATH`.
12
+
11
13
  ## Quick Start
12
14
 
13
15
  ```typescript
@@ -28,21 +30,352 @@ const result = await claude.execute({
28
30
  },
29
31
  });
30
32
 
31
- console.log(result.exitCode); // 0
33
+ console.log(result.status); // "completed"
32
34
  console.log(result.summary); // "Added try/catch to all route handlers..."
33
35
  console.log(result.durationMs); // 12340
34
36
  console.log(result.costUsd); // 0.0342
35
- console.log(result.usage); // { inputTokens: 1200, outputTokens: 350, cachedInputTokens: 800 }
37
+ console.log(result.usage); // { "claude-sonnet-4-6": { inputTokens: 1200, outputTokens: 350, ... } }
36
38
  ```
37
39
 
38
40
  ## Built-in Providers
39
41
 
40
- | Provider | CLI | Description |
41
- | ---------- | ---------------- | ----------------------------------- |
42
- | `claude` | `claude` | Claude Code (Anthropic) |
43
- | `codex` | `codex` | Codex CLI (OpenAI) |
44
- | `openclaw` | `openclaw` | OpenClaw agent |
45
- | `process` | any executable | Generic process executor |
42
+ | Provider | CLI | Description |
43
+ | ---------- | ---------------- | ------------------------------------------- |
44
+ | `claude` | `claude` | Claude Code (Anthropic) |
45
+ | `codex` | `codex` | Codex CLI (OpenAI) |
46
+ | `gemini` | `gemini` | Gemini CLI (Google) |
47
+ | `cursor` | `agent` | Cursor CLI agent |
48
+ | `opencode` | `opencode` | OpenCode |
49
+ | `pi` | `pi` | Pi CLI |
50
+ | `openclaw` | gateway HTTP | OpenClaw HTTP-gateway agent |
51
+ | `process` | any executable | Generic process executor (arbitrary binary) |
52
+
53
+ Provider capabilities (sessions, skills, workspaces, MCP, model discovery, quota probing, instructions) are declared on each module's `capabilities` field — check `provider.capabilities` to branch on what's supported.
54
+
55
+ ## Execution Context
56
+
57
+ Only `prompt` is required. Everything else has sensible defaults.
58
+
59
+ ```typescript
60
+ interface ExecutionContext {
61
+ prompt: string;
62
+ model?: string;
63
+ runId?: string; // Auto-generated UUIDv7 if omitted
64
+ cwd?: string; // Defaults to process.cwd()
65
+ env?: Record<string, string>;
66
+ sessionParams?: Record<string, unknown> | null;
67
+ config?: ProviderConfig;
68
+ signal?: AbortSignal; // Cancellation — SIGTERM then SIGKILL after graceSec
69
+ onOutput?: (stream: "stdout" | "stderr", chunk: string) => void | Promise<void>;
70
+ onEvent?: (event: StreamEvent) => void | Promise<void>;
71
+ onStart?: (pid: number) => void;
72
+ onLifecycle?: (event: LifecycleEvent) => void;
73
+ }
74
+ ```
75
+
76
+ `ProviderConfig` covers the knobs most providers accept:
77
+
78
+ ```typescript
79
+ interface ProviderConfig {
80
+ command?: string; // Override CLI binary path
81
+ model?: string;
82
+ effort?: string;
83
+ maxTurns?: number;
84
+ timeoutSec?: number;
85
+ graceSec?: number;
86
+ skipPermissions?: boolean;
87
+ skillDirs?: string[];
88
+ instructionsFile?: string;
89
+ mcpServers?: McpServerConfig[];
90
+ extraArgs?: string[];
91
+ search?: boolean;
92
+ sandbox?: boolean;
93
+ thinking?: string;
94
+ mode?: string;
95
+ workspace?: { strategy: "worktree"; baseBranch?: string; branchName?: string };
96
+ }
97
+ ```
98
+
99
+ ## Execution Result
100
+
101
+ ```typescript
102
+ interface ExecutionResult {
103
+ runId: string;
104
+ exitCode: number | null;
105
+ signal: string | null;
106
+ status: ExecutionStatus; // "completed" | "failed" | "aborted" | "timeout" | "blocked"
107
+ startedAt: string; // ISO timestamp
108
+ completedAt: string;
109
+ durationMs: number;
110
+ errorMessage: string | null;
111
+ errorCode: string | null;
112
+ usage?: Record<string, TokenUsage>; // keyed by model ID
113
+ costUsd: number | null;
114
+ model: string | null;
115
+ summary: string | null;
116
+ sessionParams: Record<string, unknown> | null;
117
+ sessionDisplayId: string | null;
118
+ clearSession: boolean;
119
+ billingType: "api" | "subscription" | "metered_api" | null;
120
+ raw?: Record<string, unknown> | null;
121
+ workspace?: PreparedWorkspace; // Present if config.workspace was set
122
+ }
123
+ ```
124
+
125
+ Use `aggregateUsage(result.usage)` to collapse per-model usage into a single total.
126
+
127
+ ## Stream Events
128
+
129
+ Emitted during execution via `onEvent`. All events include `timestamp`.
130
+
131
+ - `system` — Session init (`sessionId`, `model`, `subtype`)
132
+ - `assistant` — Text output from the agent (`text`)
133
+ - `thinking` — Agent's internal reasoning (`text`)
134
+ - `tool_call` — Agent invoked a tool (`name`, `input`, `callId?`)
135
+ - `tool_result` — Tool returned a result (`toolCallId`, `content`, `isError`)
136
+ - `result` — Final result (`text`, `cost`, `isError`)
137
+
138
+ Lifecycle events (via `onLifecycle`) report phases: `preparing`, `spawning`, `running`, `waiting_for_input`, `completed`, `cancelled`, `error`.
139
+
140
+ ## Sessions (multi-turn)
141
+
142
+ Providers with `capabilities.sessions = true` (Claude, Codex) can host a persistent session where you send multiple user messages and reuse context across turns.
143
+
144
+ ```typescript
145
+ import { getProvider, parseAskUserQuestion } from "@agentex/agent";
146
+
147
+ const claude = getProvider("claude");
148
+ const session = await claude.createSession!({
149
+ cwd: process.cwd(),
150
+ onEvent: (e) => { /* stream events */ },
151
+ onUserInputRequest: async (req) => {
152
+ const q = parseAskUserQuestion(req);
153
+ if (q) return { allow: true, updatedInput: { answers: ["Yes"] } };
154
+ return { allow: true }; // auto-approve other tool calls
155
+ },
156
+ });
157
+
158
+ const first = await session.send("List the API routes in src/");
159
+ const followUp = await session.send("Now add rate limiting to each one.");
160
+
161
+ await session.close();
162
+ ```
163
+
164
+ `session.send()` returns a `TurnResult` with `summary`, `usage`, `costUsd`, and a `status` of `completed | failed | max_turns | max_budget | aborted`. Handle elicitations (MCP forms), hook callbacks, and interrupts through the corresponding `SessionContext` callbacks.
165
+
166
+ ## Auth
167
+
168
+ `provider.resolveAuth()` is the single entry point for "is this provider usable?" It returns binary status, every supported auth path with a definitive `present: boolean`, and (when the CLI exposes it) rich identity info like email and subscription tier.
169
+
170
+ Under the hood it prefers the provider's own status subcommand — `claude auth status --json`, `codex login status` — falling back to filesystem heuristics if the binary is missing or too old.
171
+
172
+ ```typescript
173
+ import { getProvider, hasSubscription, hasApiKey } from "@agentex/agent";
174
+
175
+ const claude = getProvider("claude");
176
+ const auth = await claude.resolveAuth();
177
+
178
+ // {
179
+ // providerType: "claude",
180
+ // binary: { installed: true, resolvedPath: "/Users/you/.local/bin/claude", version: "2.1.116" },
181
+ // options: [
182
+ // { method: "api_key", source: { kind: "env", var: "ANTHROPIC_API_KEY" }, present: false },
183
+ // { method: "bedrock", source: { kind: "env_combo", vars: [...] }, present: false },
184
+ // { method: "subscription", source: { kind: "cli", command: "claude auth status --json" }, present: true },
185
+ // ],
186
+ // identity: { email: "you@example.com", orgName: "Acme", subscriptionType: "max", authMethod: "claude.ai" },
187
+ // source: "cli",
188
+ // }
189
+ ```
190
+
191
+ ### Sugar helpers (commit to a billing mode explicitly)
192
+
193
+ There is deliberately no blanket `canRun()` / `isReady()` helper — conflating subscription and API-key auth is a billing footgun (e.g. Claude with `ANTHROPIC_API_KEY` set silently bills metered API even if the user's also subscribed). Callers name the mode they want:
194
+
195
+ ```typescript
196
+ await hasSubscription(claude); // true only if a subscription credential is confirmed present
197
+ await hasApiKey(claude); // true only if an API env var is set
198
+ await hasBedrock(claude); // true only if Bedrock credentials are configured
199
+ ```
200
+
201
+ For "any auth works," write it out explicitly at the call site:
202
+
203
+ ```typescript
204
+ const anyReady = (await claude.resolveAuth()).options.some((o) => o.present);
205
+ ```
206
+
207
+ ### Welcome-flow pattern
208
+
209
+ ```typescript
210
+ const auth = await claude.resolveAuth();
211
+
212
+ if (!auth.binary.installed) {
213
+ return showInstallInstructions(auth.binary.error);
214
+ }
215
+
216
+ const sub = await hasSubscription(claude);
217
+ const key = await hasApiKey(claude);
218
+
219
+ if (sub && !key) return showReady("subscription", auth.identity);
220
+ if (key && !sub) return showReady("api_key");
221
+ if (sub && key) return showReady("api_key", { warning: "api_key_wins" });
222
+ return showLoginInstructions();
223
+ ```
224
+
225
+ For end-to-end verification (is auth actually good enough to complete a round-trip?), just call `execute()` with a trivial prompt — no separate probe method:
226
+
227
+ ```typescript
228
+ await claude.execute({ prompt: "Respond with 'hello'.", config: { timeoutSec: 15 } });
229
+ ```
230
+
231
+ ### What each provider reports
232
+
233
+ | Provider | Subscription source | API key source(s) | Other |
234
+ | --------- | --------------------------------------------------------------- | ------------------------------------------ | ---------------------------------------------------------------------------- |
235
+ | `claude` | `claude auth status --json` · fallback: keychain/creds file | `ANTHROPIC_API_KEY` | Bedrock via `ANTHROPIC_BEDROCK_BASE_URL` or `AWS_ACCESS_KEY_ID`+`AWS_REGION` |
236
+ | `codex` | `codex login status` · fallback: `$CODEX_HOME/auth.json` | `OPENAI_API_KEY` | — |
237
+ | `gemini` | `$GEMINI_CONFIG_DIR/oauth_creds.json` | `GEMINI_API_KEY`, `GOOGLE_API_KEY` | — |
238
+ | `cursor` | (detected at runtime by the CLI) | `CURSOR_API_KEY`, `OPENAI_API_KEY` | — |
239
+ | `opencode`| — | `OPENAI_API_KEY`, `ANTHROPIC_API_KEY` | — |
240
+ | `pi` | — | `OPENAI_API_KEY`, `ANTHROPIC_API_KEY` | — |
241
+
242
+ ### Precedence (what actually gets used when both are present)
243
+
244
+ The library reflects real CLI behavior rather than imposing its own:
245
+
246
+ | Provider | Winner when both API key and subscription present |
247
+ | --------- | ----------------------------------------------------------------------- |
248
+ | Claude | API key wins (documented). Set `hasApiKey` + show a billing warning. |
249
+ | Codex | Subscription wins (current CLI; see openai/codex#2733, #3286). |
250
+ | Gemini | API key wins in non-interactive mode. |
251
+
252
+ ### Caching
253
+
254
+ Results are cached for 60s per `(providerType, env, command)` to keep welcome-flow and badge-rendering calls effectively free. Pass `{ fresh: true }` to bypass:
255
+
256
+ ```typescript
257
+ await claude.resolveAuth({ fresh: true });
258
+ // Or globally:
259
+ import { clearAuthCache } from "@agentex/agent";
260
+ clearAuthCache();
261
+ ```
262
+
263
+ ### Auth types
264
+
265
+ ```typescript
266
+ type AuthMethod = "api_key" | "bedrock" | "subscription";
267
+
268
+ type AuthSource =
269
+ | { kind: "env"; var: string }
270
+ | { kind: "env_combo"; vars: string[] }
271
+ | { kind: "file"; path: string }
272
+ | { kind: "keychain"; service: string; account?: string }
273
+ | { kind: "cli"; command: string };
274
+
275
+ interface AuthOption {
276
+ method: AuthMethod;
277
+ source: AuthSource;
278
+ present: boolean;
279
+ }
280
+
281
+ interface BinaryStatus {
282
+ installed: boolean;
283
+ resolvedPath?: string;
284
+ version?: string;
285
+ error?: string;
286
+ }
287
+
288
+ interface AuthIdentity {
289
+ email?: string;
290
+ orgName?: string;
291
+ subscriptionType?: string; // "max", "pro", "team", "enterprise"
292
+ authMethod?: string; // "claude.ai", "chatgpt", "api_key", ...
293
+ }
294
+
295
+ interface AuthReport {
296
+ providerType: string;
297
+ binary: BinaryStatus;
298
+ options: AuthOption[];
299
+ identity?: AuthIdentity;
300
+ source: "cli" | "filesystem";
301
+ }
302
+ ```
303
+
304
+ ## Workspaces (isolated git worktree)
305
+
306
+ Providers with `capabilities.workspace = true` can run in an isolated `git worktree`, letting you diff or discard the agent's changes without touching your main checkout.
307
+
308
+ ```typescript
309
+ import { prepareWorkspace } from "@agentex/agent";
310
+
311
+ const ws = await prepareWorkspace({ strategy: "worktree", baseBranch: "main" });
312
+ const result = await claude.execute({ prompt: "Refactor utils.ts", cwd: ws.cwd });
313
+
314
+ const patch = await ws.diff(); // all changes (default)
315
+ const summary = await ws.diff({ stat: true }); // --stat summary
316
+ const committed = await ws.diff({ scope: "committed" });
317
+
318
+ await ws.cleanup({ deleteBranch: true });
319
+ ```
320
+
321
+ Or pass `config.workspace` to `execute()` and the provider will prepare and attach it — the result's `workspace` field exposes the same handle.
322
+
323
+ ## Parallel Execution
324
+
325
+ ```typescript
326
+ import { executeAll } from "@agentex/agent";
327
+
328
+ const results = await executeAll(
329
+ [
330
+ { provider: "claude", ctx: { prompt: "Review server.ts" } },
331
+ { provider: "codex", ctx: { prompt: "Review db.ts" } },
332
+ ],
333
+ { cancelOnFailure: true },
334
+ );
335
+ ```
336
+
337
+ ## Skills
338
+
339
+ Install and remove reusable agent skills across multiple runtimes at once, into either the user's home or a workspace directory.
340
+
341
+ ```typescript
342
+ import { installSkills, listInstalledSkills, removeSkills } from "@agentex/agent";
343
+
344
+ await installSkills({
345
+ location: "global", // or "workspace" with cwd
346
+ includeNativeDirs: false, // true also installs into ~/.gemini/skills/, etc.
347
+ });
348
+
349
+ const installed = await listInstalledSkills({ location: "global" });
350
+ await removeSkills({ location: "global" });
351
+ ```
352
+
353
+ Channels and locations follow the emerging `.agents/skills/` + `.claude/skills/` convention — see the `SkillRuntime`, `SkillLocation`, and `SkillChannel` types.
354
+
355
+ ## Temporary Config Override
356
+
357
+ Run a CLI with a throwaway config directory (useful for injecting system prompts or custom settings without touching the user's real home).
358
+
359
+ ```typescript
360
+ import { withTempConfig } from "@agentex/agent";
361
+
362
+ const cfg = await withTempConfig({
363
+ runtime: "codex",
364
+ seedFromDefault: true, // optional: copy ~/.codex into the temp dir
365
+ overrides: { "config.toml": "model = \"o3\"\n" },
366
+ });
367
+
368
+ await codex.execute({ prompt: "...", env: cfg.env });
369
+ await cfg.cleanup();
370
+ ```
371
+
372
+ ## AskUserQuestion / Elicitation / Hooks
373
+
374
+ Sessions can surface three distinct user-input requests. Handle each via a `SessionContext` callback:
375
+
376
+ - `onUserInputRequest` — tool permission requests (and interactive tools like Claude's `AskUserQuestion`). Use `parseAskUserQuestion(req)` to detect structured question payloads and return answers via `updatedInput`.
377
+ - `onElicitation` — MCP servers asking the host to render a form or open a URL (`form` / `url` modes, with a JSON-Schema `requestedSchema`).
378
+ - `onHookCallback` — CLI requesting the host to run a registered hook.
46
379
 
47
380
  ## Custom Providers
48
381
 
@@ -52,6 +385,15 @@ import type { ProviderModule } from "@agentex/agent";
52
385
 
53
386
  const myProvider: ProviderModule = {
54
387
  type: "my-agent",
388
+ capabilities: {
389
+ sessions: false,
390
+ modelDiscovery: false,
391
+ quotaProbing: false,
392
+ mcp: false,
393
+ skills: false,
394
+ instructions: false,
395
+ workspace: false,
396
+ },
55
397
  async execute(ctx) {
56
398
  const startedAt = new Date().toISOString();
57
399
  // Spawn your agent, stream events via ctx.onEvent...
@@ -59,7 +401,7 @@ const myProvider: ProviderModule = {
59
401
  runId: ctx.runId ?? "generated-id",
60
402
  exitCode: 0,
61
403
  signal: null,
62
- timedOut: false,
404
+ status: "completed",
63
405
  startedAt,
64
406
  completedAt: new Date().toISOString(),
65
407
  durationMs: 0,
@@ -74,93 +416,69 @@ const myProvider: ProviderModule = {
74
416
  billingType: null,
75
417
  };
76
418
  },
77
- async testEnvironment(ctx) {
78
- return { providerType: ctx.providerType, status: "pass", checks: [], testedAt: new Date().toISOString() };
419
+ async resolveAuth() {
420
+ return {
421
+ providerType: "my-agent",
422
+ binary: { installed: true },
423
+ options: [],
424
+ source: "filesystem",
425
+ };
79
426
  },
80
427
  };
81
428
 
82
429
  registerProvider(myProvider);
83
430
  ```
84
431
 
85
- ## API
86
-
87
- ### `getProvider(type: string): ProviderModule`
88
-
89
- Returns a registered provider by name. Throws if not found.
90
-
91
- ### `listProviders(): string[]`
92
-
93
- Returns all registered provider type names.
94
-
95
- ### `registerProvider(provider: ProviderModule): void`
96
-
97
- Registers a custom provider, making it available via `getProvider()`.
98
-
99
- ### `renderTemplate(template: string, context: Record<string, string>): string`
100
-
101
- Renders a template string with `{{variable}}` interpolation.
102
-
103
- ### `redactEnvForLogs(env: Record<string, string>): Record<string, string>`
104
-
105
- Returns a copy of env vars with sensitive values redacted for safe logging.
106
-
107
- ## Execution Context
108
-
109
- Only `prompt` is required. Everything else has sensible defaults.
110
-
111
- ```typescript
112
- interface ExecutionContext {
113
- prompt: string; // The task to execute
114
- model?: string; // Model override (e.g. "claude-sonnet-4-20250514")
115
- runId?: string; // Auto-generated UUIDv7 if omitted
116
- cwd?: string; // Defaults to process.cwd()
117
- env?: Record<string, string>;
118
- sessionParams?: Record<string, unknown> | null;
119
- config?: ProviderConfig;
120
- onOutput?: (stream: "stdout" | "stderr", chunk: string) => void;
121
- onEvent?: (event: StreamEvent) => void;
122
- }
123
- ```
124
-
125
- ## Execution Result
126
-
127
- ```typescript
128
- interface ExecutionResult {
129
- runId: string;
130
- exitCode: number | null;
131
- signal: string | null;
132
- timedOut: boolean;
133
- startedAt: string; // ISO timestamp
134
- completedAt: string; // ISO timestamp
135
- durationMs: number; // Wall-clock duration
136
- errorMessage: string | null;
137
- errorCode: string | null;
138
- usage?: { inputTokens: number; outputTokens: number; cachedInputTokens?: number };
139
- costUsd: number | null;
140
- model: string | null;
141
- summary: string | null;
142
- sessionParams: Record<string, unknown> | null;
143
- sessionDisplayId: string | null;
144
- clearSession: boolean;
145
- billingType: "api" | "subscription" | null;
146
- }
147
- ```
148
-
149
- ## Stream Events
150
-
151
- Events emitted during execution via `onEvent`. All events include a `timestamp` field.
152
-
153
- - `system` — Session init (`event.sessionId`, `event.model`)
154
- - `assistant` — Text output from the agent (`event.text`)
155
- - `thinking` — Agent's internal reasoning (`event.text`)
156
- - `tool_call` — Agent invoked a tool (`event.name`, `event.input`)
157
- - `tool_result` — Tool returned a result (`event.content`, `event.isError`)
158
- - `result` — Final result (`event.text`, `event.cost`)
432
+ ## API Reference
433
+
434
+ ### Registry
435
+ - `getProvider(type)` — look up a registered provider. Throws if unknown.
436
+ - `listProviders()` list all registered provider type names.
437
+ - `registerProvider(module)` — register a custom provider.
438
+
439
+ ### Execution
440
+ - `provider.execute(ctx)` run a single turn.
441
+ - `provider.createSession?(ctx)` — start a multi-turn session (when `capabilities.sessions`).
442
+ - `executeAll(tasks, { cancelOnFailure?, signal? })` — run multiple executions concurrently.
443
+
444
+ ### Auth
445
+ - `provider.resolveAuth(ctx?)` — structured report: binary status, all auth paths, identity. Cached 60s; pass `{ fresh: true }` to bypass.
446
+ - `hasSubscription(provider, ctx?)` / `hasApiKey(provider, ctx?)` / `hasBedrock(provider, ctx?)` — presence sugar.
447
+ - `clearAuthCache()` — invalidate the resolveAuth cache globally (e.g. after a login).
448
+ - `detectAuth(providerType, env)` legacy env-only auth classification used internally for `ExecutionResult.billingType`.
449
+
450
+ ### Binary / runtime
451
+ - `findBinary(name, configOverride?)` — resolve a provider CLI on disk.
452
+ - `ensureCommandResolvable(command)` like `findBinary` but accepts an absolute path too.
453
+ - `clearBinaryCache()` — invalidate the binary-resolution cache.
454
+ - `provider.checkQuota?(ctx)` — rate-limit / quota status (when `capabilities.quotaProbing`).
455
+ - `provider.listModels?(opts?)` — enumerate models the binary can drive.
456
+
457
+ ### Workspace
458
+ - `prepareWorkspace({ strategy, baseBranch?, branchName?, targetDir? })` → `PreparedWorkspace` with `cwd`, `diff()`, `cleanup()`.
459
+
460
+ ### Skills
461
+ - `installSkills(opts)` / `removeSkills(opts)` / `listInstalledSkills(opts)`
462
+ - `resolveSkillsHome(channel)` / `resolveSkillsWorkspace(channel, cwd)`
463
+ - `resolveNativeSkillsHome(runtime)` / `resolveNativeSkillsWorkspace(runtime, cwd)`
464
+ - `ensureSkillSymlink(...)`
465
+
466
+ ### Runtime config
467
+ - `withTempConfig({ runtime, seedFromDefault?, overrides? })` env + configDir + cleanup.
468
+ - `getRuntimeHomeEnvVar(runtime)` / `getDefaultRuntimeHome(runtime)` introspect each CLI's home dir override.
469
+
470
+ ### Utilities
471
+ - `aggregateUsage(usage)` — collapse `Record<string, TokenUsage>` to a single total.
472
+ - `renderTemplate(template, ctx)` — `{{var}}` interpolation.
473
+ - `redactEnvForLogs(env)` — redact sensitive values before logging.
474
+ - `resolveInstructions(path?)` — read an instructions file, or `null` if no path.
475
+ - `parseAskUserQuestion(req)` — extract structured question/option data from a `UserInputRequest`.
159
476
 
160
477
  ## Requirements
161
478
 
162
479
  - Node.js >= 18
163
- - The CLI for each provider must be installed and on `$PATH` (e.g., `claude` for the Claude provider)
480
+ - Each provider's CLI installed and resolvable on `$PATH` (`claude`, `codex`, `gemini`, `agent` for Cursor, `opencode`, `pi`, or a reachable OpenClaw gateway)
481
+ - For subscription auth, the relevant CLI must already be logged in (`codex login`, `claude login`, `gemini auth login`, etc.)
164
482
 
165
483
  ## License
166
484
 
package/dist/index.d.ts CHANGED
@@ -1,5 +1,22 @@
1
1
  export { getProvider, listProviders, registerProvider } from "./registry.js";
2
2
  export { renderTemplate } from "./utils/template.js";
3
3
  export { redactEnvForLogs } from "./utils/env.js";
4
- export type { ProviderModule, ExecutionContext, ExecutionResult, ProviderConfig, McpServerConfig, StreamEvent, SessionCodec, EnvironmentTestContext, EnvironmentTestResult, EnvironmentCheck, ProviderModel, } from "./types.js";
4
+ export { parseAskUserQuestion } from "./utils/ask-user-question.js";
5
+ export { aggregateUsage } from "./types.js";
6
+ export { resolveInstructions } from "./utils/instructions.js";
7
+ export { getRuntimeHomeEnvVar, getDefaultRuntimeHome } from "./utils/runtime-homes.js";
8
+ export { findBinary, ensureCommandResolvable, clearBinaryCache } from "./utils/binary.js";
9
+ export type { ResolvedBinary } from "./utils/binary.js";
10
+ export { detectAuth, resolveAuthForProvider, clearAuthCache, hasSubscription, hasApiKey, hasBedrock, } from "./utils/auth.js";
11
+ export type { ResolvedAuth } from "./utils/auth.js";
12
+ export { prepareWorkspace } from "./utils/workspace.js";
13
+ export type { WorkspaceOptions, PreparedWorkspace, DiffOptions } from "./utils/workspace.js";
14
+ export { withTempConfig } from "./utils/runtime-config.js";
15
+ export type { TempConfigResult, TempConfigOptions } from "./utils/runtime-config.js";
16
+ export { executeAll } from "./utils/execute-all.js";
17
+ export type { ExecuteAllOptions, ExecuteAllTask } from "./utils/execute-all.js";
18
+ export { installSkills, removeSkills, listInstalledSkills, resolveSkillsHome, resolveSkillsWorkspace, resolveNativeSkillsHome, resolveNativeSkillsWorkspace, ensureSkillSymlink, } from "./utils/skills.js";
19
+ export type { ProviderModule, ProviderCapabilities, ExecutionContext, ExecutionResult, ExecutionStatus, ProviderConfig, McpServerConfig, StreamEvent, SessionCodec, SessionState, TokenUsage, LifecycleEvent, QuotaStatus, QuotaContext, AuthMethod, AuthSource, AuthOption, AuthReport, AuthResolveContext, AuthIdentity, BinaryStatus, ProviderModel, SessionContext, AgentSession, TurnResult, UserInputRequest, UserInputResponse, ElicitationRequest, ElicitationResponse, HookCallbackRequest, HookCallbackResponse, } from "./types.js";
20
+ export type { AskUserQuestion, QuestionOption, } from "./utils/ask-user-question.js";
21
+ export type { SkillRuntime, SkillLocation, SkillChannel, InstallSkillsOptions, SkillInstallEntry, SkillInstallResult, RemoveSkillsOptions, SkillRemoveEntry, SkillRemoveResult, InstalledSkill, } from "./utils/skills.js";
5
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGlD,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,eAAe,EACf,WAAW,EACX,YAAY,EACZ,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,GACd,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1F,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EACL,UAAU,EACV,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,SAAS,EACT,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC7F,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGhF,OAAO,EACL,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACvB,4BAA4B,EAC5B,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,cAAc,EACd,eAAe,EACf,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,cAAc,EACd,WAAW,EACX,YAAY,EACZ,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,eAAe,EACf,cAAc,GACf,MAAM,8BAA8B,CAAC;AAEtC,YAAY,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,GACf,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -2,4 +2,15 @@
2
2
  export { getProvider, listProviders, registerProvider } from "./registry.js";
3
3
  export { renderTemplate } from "./utils/template.js";
4
4
  export { redactEnvForLogs } from "./utils/env.js";
5
+ export { parseAskUserQuestion } from "./utils/ask-user-question.js";
6
+ export { aggregateUsage } from "./types.js";
7
+ export { resolveInstructions } from "./utils/instructions.js";
8
+ export { getRuntimeHomeEnvVar, getDefaultRuntimeHome } from "./utils/runtime-homes.js";
9
+ export { findBinary, ensureCommandResolvable, clearBinaryCache } from "./utils/binary.js";
10
+ export { detectAuth, resolveAuthForProvider, clearAuthCache, hasSubscription, hasApiKey, hasBedrock, } from "./utils/auth.js";
11
+ export { prepareWorkspace } from "./utils/workspace.js";
12
+ export { withTempConfig } from "./utils/runtime-config.js";
13
+ export { executeAll } from "./utils/execute-all.js";
14
+ // Skills
15
+ export { installSkills, removeSkills, listInstalledSkills, resolveSkillsHome, resolveSkillsWorkspace, resolveNativeSkillsHome, resolveNativeSkillsWorkspace, ensureSkillSymlink, } from "./utils/skills.js";
5
16
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY;AACZ,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY;AACZ,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1F,OAAO,EACL,UAAU,EACV,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,SAAS,EACT,UAAU,GACX,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,SAAS;AACT,OAAO,EACL,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACvB,4BAA4B,EAC5B,kBAAkB,GACnB,MAAM,mBAAmB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/execute.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAaxE,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CA4M3F"}
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/execute.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAWxE,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAgP3F"}