coding-agents-sdk 0.0.1 → 0.3.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 (46) hide show
  1. package/README.md +274 -0
  2. package/dist/SdkAgent-a97nkDuR.mjs +1 -0
  3. package/dist/adapters/claude-code-cli/index.d.mts +2 -0
  4. package/dist/adapters/claude-code-cli/index.mjs +2 -0
  5. package/dist/adapters/claude-code-sdk/index.d.mts +2 -0
  6. package/dist/adapters/claude-code-sdk/index.mjs +4 -0
  7. package/dist/adapters/codex-cli/index.d.mts +2 -0
  8. package/dist/adapters/codex-cli/index.mjs +2 -0
  9. package/dist/adapters/codex-sdk/index.d.mts +2 -0
  10. package/dist/adapters/codex-sdk/index.mjs +1 -0
  11. package/dist/adapters/gemini-cli/index.d.mts +2 -0
  12. package/dist/adapters/gemini-cli/index.mjs +1 -0
  13. package/dist/classify-error-V6x6jP_R.mjs +8 -0
  14. package/dist/container/index.d.mts +2 -0
  15. package/dist/container/index.mjs +1 -0
  16. package/dist/container-BY7JDOGo.mjs +1 -0
  17. package/dist/container-DWTITDhL.mjs +1 -0
  18. package/dist/container-vkn5-3Xl.mjs +1 -0
  19. package/dist/diff-BCfLDXNN.mjs +1 -0
  20. package/dist/env-Dkd8Sgjf.mjs +1 -0
  21. package/dist/errors-XV0frS3r.mjs +1 -0
  22. package/dist/events-D31_b0sA.d.mts +239 -0
  23. package/dist/execution-target-BJ5mWjDM.mjs +4 -0
  24. package/dist/index-COHwWTg_.d.mts +315 -0
  25. package/dist/index-CzvanLE_.d.mts +46 -0
  26. package/dist/index-DCaZeLrI.d.mts +51 -0
  27. package/dist/index-DNyKelMh.d.mts +39 -0
  28. package/dist/index-DP4Jxoax.d.mts +110 -0
  29. package/dist/index-R77YR8ak.d.mts +224 -0
  30. package/dist/index-jUwKDQ34.d.mts +146 -0
  31. package/dist/index.d.mts +17 -0
  32. package/dist/index.mjs +1 -0
  33. package/dist/oci-C_S_FKHj.mjs +1 -0
  34. package/dist/sandbox/index.d.mts +2 -0
  35. package/dist/sandbox/index.mjs +1 -0
  36. package/dist/sandbox-DeKpyenZ.mjs +1 -0
  37. package/dist/schemas/index.d.mts +2 -0
  38. package/dist/schemas/index.mjs +1 -0
  39. package/dist/schemas-BM6qORw3.mjs +1 -0
  40. package/dist/spawner-BJesLc8I.mjs +1 -0
  41. package/dist/structured-output-DEkBQ-1Z.mjs +1 -0
  42. package/dist/types-COlDAzs5.d.mts +162 -0
  43. package/dist/types-CwvWHEpy.mjs +1 -0
  44. package/dist/util-CGg8cK92.mjs +1 -0
  45. package/package.json +90 -9
  46. package/index.js +0 -7
package/README.md ADDED
@@ -0,0 +1,274 @@
1
+ # coding-agents-sdk
2
+
3
+ This is a coding agent orchestration library.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ bun add coding-agents-sdk
9
+ ```
10
+
11
+ If you use an SDK adapter or the `e2b` container provider, install that optional peer too.
12
+
13
+ ```bash
14
+ # for claude-code-sdk
15
+ bun add @anthropic-ai/claude-agent-sdk
16
+
17
+ # for codex-sdk
18
+ bun add @openai/codex-sdk
19
+
20
+ # for createContainer({ type: "e2b", ... })
21
+ bun add e2b
22
+ ```
23
+
24
+ ## Runtime setup
25
+
26
+ Before you call `await createAgent(...)`, make sure the runtime for that adapter is available.
27
+
28
+ - `claude-code-cli` runs Claude Code CLI.
29
+ - `claude-code-sdk` uses `@anthropic-ai/claude-agent-sdk` and launches Claude Code locally.
30
+ - `codex-cli` runs Codex CLI.
31
+ - `codex-sdk` uses `@openai/codex-sdk` and launches Codex locally.
32
+ - `gemini-cli` runs Gemini CLI.
33
+
34
+ SDK adapters and the `e2b` container provider are optional peer dependencies. Install only the ones you use.
35
+
36
+ If one is missing, awaiting `createAgent()` or `createContainer()` surfaces an error that tells you which package to install.
37
+
38
+ Set `cwd` when the agent should run somewhere other than the current working directory.
39
+
40
+ Use `agent.capabilities` when you need to branch on features at runtime.
41
+
42
+ ## Quick start
43
+
44
+ ```ts
45
+ import { createAgent } from "coding-agents-sdk";
46
+
47
+ await using agent = await createAgent("claude-code-cli");
48
+
49
+ const result = await agent.run({
50
+ input: "Read package.json and tell me what this project does.",
51
+ });
52
+
53
+ if (result.status !== "completed") {
54
+ throw new Error(result.error.message);
55
+ }
56
+
57
+ console.log(result.text);
58
+ ```
59
+
60
+ Replace `"claude-code-cli"` with the adapter you want to use.
61
+ Unless noted otherwise, the rest of the snippets assume the same `agent` shape.
62
+
63
+ ## Run results
64
+
65
+ `run()` returns a `RunResult` with `status: "completed" | "failed" | "cancelled"`.
66
+
67
+ ```ts
68
+ const result = await agent.run({
69
+ input: "Review the last commit.",
70
+ });
71
+
72
+ switch (result.status) {
73
+ case "completed":
74
+ console.log(result.text);
75
+ break;
76
+ case "failed":
77
+ console.error(result.error.kind, result.error.message);
78
+ break;
79
+ case "cancelled":
80
+ console.error(result.cancelReason, result.error.message);
81
+ break;
82
+ }
83
+ ```
84
+
85
+ Notes:
86
+
87
+ - `runOrThrow()` turns non-completed runs into `AgentRunError`
88
+ - `stop()`, `wait()`, `reset()`, and `dispose()` are available on every agent
89
+
90
+ TypeScript infers the completed-result shape from your request:
91
+
92
+ - Zod schema: `result.output` is fully typed
93
+ - raw JSON Schema: `result.output` is `unknown`
94
+ - no `schema`: use `result.text`; completed results do not include `output`
95
+ - `runOrThrow()` follows the same inference, but only returns the completed variant
96
+
97
+ ## Input
98
+
99
+ Most calls just use a string. If you need richer input, pass parts instead.
100
+
101
+ Image input is currently supported only by `codex-sdk`.
102
+
103
+ ```ts
104
+ await using agent = await createAgent("codex-sdk");
105
+
106
+ await agent.run({
107
+ input: [
108
+ { type: "text", text: "Describe this image." },
109
+ { type: "image", path: "./ui.png" },
110
+ ],
111
+ });
112
+ ```
113
+
114
+ ## Structured output
115
+
116
+ Pass `schema` when you want structured output.
117
+
118
+ If you want typed output, pass a Zod schema.
119
+ If you pass raw JSON Schema, `result.output` is `unknown`.
120
+ If you do not pass a schema, use `result.text`.
121
+
122
+ ```ts
123
+ import { z } from "zod/v4";
124
+
125
+ const result = await agent.run({
126
+ input: "Read package.json and return the package name and whether it has a test script.",
127
+ schema: z
128
+ .object({
129
+ name: z.string(),
130
+ hasTestScript: z.boolean(),
131
+ })
132
+ .strict(),
133
+ });
134
+
135
+ if (result.status === "completed") {
136
+ console.log(result.output);
137
+ }
138
+ ```
139
+
140
+ If you want to pass Zod schemas, depend on `zod` in your app.
141
+
142
+ `schema` accepts a raw JSON Schema object or a Zod schema. This wrapper validates only the Zod path. `gemini-cli` does not support structured output.
143
+
144
+ If you need to name these shapes in your own helpers, import `RunRequest`, `JsonSchemaRunRequest`, `ZodRunRequest`, `RunResult`, or `CompletedRunResult` from the package.
145
+
146
+ ## Sessions
147
+
148
+ One agent instance keeps one conversation going. Reuse the same instance when you want the next turn to continue the same session.
149
+
150
+ ```ts
151
+ await agent.run({
152
+ input: "Remember this word: pineapple. Reply with only 'ok'.",
153
+ });
154
+
155
+ const result = await agent.run({
156
+ input: "What word did I ask you to remember?",
157
+ });
158
+ ```
159
+
160
+ Useful bits:
161
+
162
+ - `agent.sessionId` is set once a session exists
163
+ - pass `sessionId` to `await createAgent(type, { sessionId })` to resume one explicitly
164
+ - `reset()` forgets the stored session
165
+ - Claude adapters support `fork()`
166
+
167
+ ## Events
168
+
169
+ Use `onEvent()` to subscribe to the normalized event stream.
170
+
171
+ ```ts
172
+ const unsubscribe = agent.onEvent((event) => {
173
+ if (event.type === "tool-call") {
174
+ console.log(event.toolName);
175
+ }
176
+ });
177
+
178
+ await agent.run({
179
+ input: "Explain the package layout.",
180
+ });
181
+
182
+ unsubscribe();
183
+ ```
184
+
185
+ All adapters emit `session-start` and `session-end`. Depending on the backend, you may also see `message`, `reasoning`, `tool-call`, `tool-result`, and `stderr`.
186
+
187
+ ## MCP
188
+
189
+ MCP tool calls can show up in the event stream when the underlying runtime supports them.
190
+
191
+ This wrapper exposes MCP configuration directly on:
192
+
193
+ - `claude-code-cli`: `mcpConfig`, `mcpServers`
194
+ - `claude-code-sdk`: `mcpServers`
195
+ - `codex-cli`: `mcpConfig`, `mcpServers`
196
+
197
+ For `codex-sdk` and `gemini-cli`, use the runtime's own MCP setup. This wrapper does not add separate MCP config options for them.
198
+
199
+ ## Containers
200
+
201
+ Containers are supported on the CLI adapters: `claude-code-cli`, `codex-cli`, and `gemini-cli`.
202
+ `docker` and `podman` do not need extra package dependencies. `e2b` requires the optional `e2b` peer dependency.
203
+
204
+ ```ts
205
+ import { createAgent, createContainer } from "coding-agents-sdk";
206
+
207
+ await using container = await createContainer({
208
+ type: "docker",
209
+ workdir: "/workspace",
210
+ image: "my-agent-image",
211
+ // or instead of image:
212
+ // build: {
213
+ // content: [
214
+ // "FROM ubuntu:24.04",
215
+ // "RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates curl git && rm -rf /var/lib/apt/lists/*",
216
+ // "RUN useradd -m -s /bin/bash agent",
217
+ // "USER agent",
218
+ // "RUN curl -fsSL https://claude.ai/install.sh | bash",
219
+ // 'ENV PATH="/home/agent/.local/bin:${PATH}"',
220
+ // "WORKDIR /workspace",
221
+ // ].join("\n"),
222
+ // },
223
+ mounts: [{ source: "/absolute/path/to/project", target: "/workspace" }],
224
+ });
225
+
226
+ await using agent = await createAgent("claude-code-cli", {
227
+ container,
228
+ permissionMode: "bypassPermissions",
229
+ });
230
+
231
+ const result = await agent.run({
232
+ input: "Run the tests and fix the failing test.",
233
+ });
234
+
235
+ if (result.status === "completed") {
236
+ console.log(result.text);
237
+ }
238
+ ```
239
+
240
+ Your image needs the runtime for the adapter you picked available inside the container.
241
+
242
+ If you omit `cwd`, the agent uses `container.workdir`. The container is started automatically on the first run. Use `snapshotWorkdir()`, `diffWorkdir()`, and `releaseWorkdirSnapshot()` when you need a reliable before/after file diff.
243
+
244
+ ## Sandboxes
245
+
246
+ For non-container execution targets, create a sandbox and pass it as `sandbox`.
247
+
248
+ ```ts
249
+ import { createAgent, createSandbox } from "coding-agents-sdk";
250
+
251
+ await using sandbox = await createSandbox({
252
+ type: "bubblewrap",
253
+ workdir: process.cwd(),
254
+ setEnv: {
255
+ OPENAI_API_KEY: process.env.OPENAI_API_KEY ?? "",
256
+ },
257
+ });
258
+
259
+ await using agent = await createAgent("codex-cli", {
260
+ sandbox,
261
+ codexSandboxMode: "workspace-write",
262
+ });
263
+ ```
264
+
265
+ Notes:
266
+
267
+ - CLI adapters accept `container` or `sandbox`, but not both
268
+ - `bubblewrap` is currently the only `createSandbox()` provider
269
+ - `codex-cli` uses `codexSandboxMode` for the Codex CLI `--sandbox` flag so it does not conflict with the `sandbox` execution target option
270
+ - if you omit `cwd`, the agent uses `sandbox.workdir`
271
+ - keep network access enabled when the sandboxed CLI still needs to reach a hosted model API
272
+ - bubblewrap commonly uses a private `/tmp`; if the host process writes helper files that the sandboxed CLI must read, you probably want to bind-mount `/tmp` or another host temp directory there
273
+ - in particular, `codex-cli` structured output (`schema`) and `claude-code-cli` `mcpServers` create helper files that should live on a sandbox-visible `/tmp`
274
+
@@ -0,0 +1 @@
1
+ import{n as e,t}from"./classify-error-V6x6jP_R.mjs";var n=class extends e{currentAbortController;cleanupSdkResources(){}onStopRequested(e){this.currentAbortController?.abort()}async executeRunCore(e,n){let r=new AbortController;this.currentAbortController=r;let i=this.setupRunLifecycle(e);try{return i.abortedBeforeStart||e.stopReason?this.buildResult(e,new Date):(this.emitSessionStart(e),await this.executeSdkRun(e,n,r),this.buildResult(e,new Date))}catch(n){return!e.stopReason&&!e.error&&(e.error=t(n)),this.buildResult(e,new Date)}finally{i.cleanup();try{await this.cleanupSdkResources()}catch{}this.currentAbortController===r&&(this.currentAbortController=void 0)}}};export{n as t};
@@ -0,0 +1,2 @@
1
+ import { a as ClaudeCodeCliRunOptions, c as ClaudeRateLimitEvent, d as ClaudeUserEvent, i as ClaudeCodeCliPermissionMode, l as ClaudeResultEvent, n as ClaudeCodeCliAgent, o as ClaudeAssistantEvent, r as ClaudeCodeCliAgentOptions, s as ClaudeEvent, t as createClaudeCodeCliAgent, u as ClaudeSystemEvent } from "../../index-COHwWTg_.mjs";
2
+ export { ClaudeAssistantEvent, ClaudeCodeCliAgent, ClaudeCodeCliAgentOptions, ClaudeCodeCliPermissionMode, ClaudeCodeCliRunOptions, ClaudeEvent, ClaudeRateLimitEvent, ClaudeResultEvent, ClaudeSystemEvent, ClaudeUserEvent, createClaudeCodeCliAgent };
@@ -0,0 +1,2 @@
1
+ import{n as e}from"../../types-CwvWHEpy.mjs";import{a as t,i as n}from"../../util-CGg8cK92.mjs";import{t as r}from"../../env-Dkd8Sgjf.mjs";import{a as i,c as a,o,s}from"../../classify-error-V6x6jP_R.mjs";import{n as c,t as l}from"../../execution-target-BJ5mWjDM.mjs";import{t as u}from"../../structured-output-DEkBQ-1Z.mjs";import{join as d}from"node:path";import{z as f}from"zod/v4";import{mkdtempSync as p,rmSync as m,writeFileSync as h}from"node:fs";import{rm as g}from"node:fs/promises";import{tmpdir as _}from"node:os";const v=e=>`session_id`in e?e.session_id:void 0,y=e=>typeof e.content==`string`?e.content:e.content.map(e=>e.text).join(`
2
+ `),b=e=>typeof e.result==`string`&&e.result.trim()!==``?e.result:e.subtype,x=(e,t)=>{let n=[`[${e.subtype}]`];if(e.subtype===`init`){if(e.tools&&n.push(`tools: ${e.tools.length}`),e.mcp_servers){let t=e.mcp_servers.filter(e=>e.status===`connected`).length;n.push(`mcp: ${t}/${e.mcp_servers.length} connected`)}}else e.hook_name&&(n.push(e.hook_name),e.exit_code!==void 0&&n.push(`exit: ${e.exit_code}`));let r=n.join(` `);return{events:[i(t.runId,`message`,{sessionId:t.sessionId,model:e.model??null,role:`system`,content:[a(r)],text:r})]}},S=(e,t)=>{let n=[],r=[];for(let o of e.message.content)switch(o.type){case`text`:n.push(i(t.runId,`message`,{sessionId:t.sessionId,model:e.message.model??null,role:`assistant`,content:[a(o.text)],text:o.text}));break;case`thinking`:n.push(i(t.runId,`reasoning`,{sessionId:t.sessionId,model:e.message.model??null,content:[a(o.thinking)],text:o.thinking}));break;case`tool_use`:r.push({toolCallId:o.id,toolName:o.name,input:o.input}),n.push(i(t.runId,`tool-call`,{sessionId:t.sessionId,model:e.message.model??null,toolCallId:o.id,toolName:o.name,input:o.input}));break;default:break}return{events:n,toolCalls:r}},C=(e,t)=>{let n=[];for(let r of e.message.content)switch(r.type){case`text`:n.push(i(t.runId,`message`,{sessionId:t.sessionId,model:null,role:`user`,content:[a(r.text)],text:r.text}));break;case`tool_result`:{let e=t.toolCalls.get(r.tool_use_id),a=y(r);n.push(i(t.runId,`tool-result`,{sessionId:t.sessionId,toolCallId:r.tool_use_id,toolName:e?.toolName,input:e?.input,output:a,isError:r.is_error,error:r.is_error?a:void 0}));break}default:break}return{events:n}},w=(e,t)=>{let r=e.usage?.input_tokens,i=e.usage?.cache_creation_input_tokens,a=e.usage?.cache_read_input_tokens,o=e.usage?.output_tokens,s=n(r,i,a,o),c={stats:{durationMs:e.duration_ms,apiDurationMs:e.duration_api_ms,turns:e.num_turns,inputTokens:r,cacheCreationInputTokens:i,cacheReadInputTokens:a,outputTokens:o,totalTokens:s,costUsd:e.total_cost_usd}};typeof e.result==`string`&&(c.output={...c.output,text:e.result});let l=u(e.structured_output,t,{isSuccess:!e.is_error&&e.subtype===`success`},`Structured output was requested but Claude did not return structured_output.`);return l.value!==void 0&&(c.output={...c.output,value:l.value}),l.error&&(c.error=l.error),e.is_error||e.subtype!==`success`?(c.status=`failed`,c.error={kind:`provider`,message:b(e)}):c.error||(c.status=`completed`),{events:[],state:c}},T=(e,t)=>{let n=`rate limited: ${e.rate_limit_info.status}`;return{events:[i(t.runId,`message`,{sessionId:t.sessionId,model:null,role:`system`,content:[a(n)],text:n})]}},E=(e,t)=>{switch(e.type){case`system`:return x(e,t);case`assistant`:return S(e,t);case`user`:return C(e,t);case`result`:return w(e,t);case`rate_limit_event`:return T(e,t);default:return{events:[]}}},D=f.enum([`init`,`hook_response`,`hook_started`,`hook_finished`,`hook_failed`,`hook_skipped`]),O=f.object({type:f.literal(`system`),session_id:f.string(),subtype:D,uuid:f.string(),tools:f.array(f.string()).optional(),mcp_servers:f.array(f.object({name:f.string(),status:f.enum([`connected`,`disconnected`,`error`,`failed`])})).optional(),model:f.string().optional(),cwd:f.string().optional(),hook_name:f.string().optional(),hook_event:f.string().optional(),stdout:f.string().optional(),stderr:f.string().optional(),exit_code:f.number().optional()}),k=f.object({type:f.literal(`assistant`),session_id:f.string(),uuid:f.string(),parent_tool_use_id:f.string().nullable().optional(),message:f.object({id:f.string(),type:f.literal(`message`),role:f.literal(`assistant`),model:f.string(),content:f.array(f.union([f.object({type:f.literal(`text`),text:f.string()}),f.object({type:f.literal(`tool_use`),id:f.string(),name:f.string(),input:f.record(f.string(),f.unknown())}),f.object({type:f.literal(`thinking`),thinking:f.string(),signature:f.string().optional()})])),stop_reason:f.enum([`end_turn`,`max_tokens`,`tool_use`,`stop_sequence`]).nullable(),stop_sequence:f.string().nullable().optional(),context_management:f.unknown().nullable().optional(),usage:f.object({input_tokens:f.number(),output_tokens:f.number(),cache_creation_input_tokens:f.number().optional(),cache_read_input_tokens:f.number().optional(),service_tier:f.enum([`premium`,`standard`]).nullable().optional()}),ttftMs:f.number().optional()})}),A=f.object({type:f.literal(`user`),session_id:f.string(),message:f.object({role:f.literal(`user`),content:f.array(f.union([f.object({type:f.literal(`tool_result`),tool_use_id:f.string(),content:f.union([f.string(),f.array(f.object({type:f.literal(`text`),text:f.string()}))]),is_error:f.boolean().optional()}),f.object({type:f.literal(`text`),text:f.string()})]))}),parent_tool_use_id:f.string().nullable().optional(),uuid:f.string(),isSynthetic:f.boolean().optional()}),j=f.object({type:f.literal(`result`),session_id:f.string(),uuid:f.string(),subtype:f.enum([`success`,`error_max_turns`,`error_during_execution`]),duration_ms:f.number(),duration_api_ms:f.number(),is_error:f.boolean(),num_turns:f.number(),result:f.unknown().optional(),structured_output:f.unknown().optional(),total_cost_usd:f.number(),usage:f.object({input_tokens:f.number(),cache_creation_input_tokens:f.number().optional(),cache_read_input_tokens:f.number().optional(),output_tokens:f.number(),server_tool_use:f.object({web_search_requests:f.number()}).optional()}).optional()}),M=f.object({type:f.literal(`rate_limit_event`),uuid:f.string(),session_id:f.string().optional(),rate_limit_info:f.object({status:f.string(),resetsAt:f.number().optional(),rateLimitType:f.string().optional(),overageStatus:f.string().optional(),overageDisabledReason:f.string().optional(),isUsingOverage:f.boolean().optional()})}),N=o(f.discriminatedUnion(`type`,[O,k,A,j,M])),P={structuredOutput:!0,sessionResume:!0,imageInput:!1,mcp:!0,eventStreaming:!0,sessionFork:!0},F=e=>{let{$schema:t,...n}=e;return n};var I=class n extends c{type=`claude-code-cli`;creationOptions;runDefaults;forkOnNextRun;mcpTempDir;constructor(e={}){super({type:`claude-code-cli`,capabilities:P,defaults:{cwd:e.cwd,env:e.env,command:e.command?t(e.command):void 0,sessionId:e.sessionId,model:e.model,systemPrompt:e.systemPrompt},spawner:e.spawner,executionTarget:e.container??e.sandbox,logPath:e.logPath,onEvent:e.onEvent}),this.creationOptions={...e,command:e.command?[...t(e.command)]:void 0,env:e.env?{...e.env}:void 0,allowedTools:e.allowedTools?[...e.allowedTools]:void 0,disallowedTools:e.disallowedTools?[...e.disallowedTools]:void 0,mcpConfig:Array.isArray(e.mcpConfig)?[...e.mcpConfig]:e.mcpConfig,mcpServers:e.mcpServers?{...e.mcpServers}:void 0,extraArgs:e.extraArgs?[...e.extraArgs]:void 0},this.runDefaults={allowedTools:e.allowedTools?[...e.allowedTools]:void 0,disallowedTools:e.disallowedTools?[...e.disallowedTools]:void 0,appendSystemPrompt:e.appendSystemPrompt,permissionMode:e.permissionMode,mcpConfig:Array.isArray(e.mcpConfig)?[...e.mcpConfig]:e.mcpConfig,mcpServers:e.mcpServers?{...e.mcpServers}:void 0,forkSession:e.forkSession,extraArgs:e.extraArgs?[...e.extraArgs]:void 0},this.forkOnNextRun=e.forkOnNextRun??!1}fork(){if(!this.sessionId)throw new e(`Cannot fork a Claude Code CLI agent before it has a sessionId.`);return new n({...this.creationOptions,sessionId:this.sessionId,forkSession:void 0,forkOnNextRun:!0})}onValidateRun(t,n){if((t.forkSession??this.runDefaults.forkSession??this.forkOnNextRun)&&!this.sessionId)throw new e(`forkSession requires an existing sessionId on the agent.`)}async onRunFinished(e){await super.onRunFinished(e),await this.cleanupMcpTempDir()}async onDispose(){await super.onDispose(),await this.cleanupMcpTempDir()}async cleanupMcpTempDir(){if(this.mcpTempDir){let e=this.mcpTempDir;this.mcpTempDir=void 0,await g(e,{recursive:!0,force:!0}).catch(()=>{})}}ensureMcpTempFile(e){this.mcpTempDir&&=(m(this.mcpTempDir,{recursive:!0,force:!0}),void 0),this.mcpTempDir=p(d(_(),`cw-mcp-`));let t=d(this.mcpTempDir,`mcp.json`);return h(t,JSON.stringify({mcpServers:e}),{encoding:`utf8`,mode:384}),t}buildArgs(e,n){let r=[`--verbose`,`--output-format`,`stream-json`],i=s(e.input),a=e.permissionMode??this.runDefaults.permissionMode,o=e.appendSystemPrompt??this.runDefaults.appendSystemPrompt,c=e.allowedTools??this.runDefaults.allowedTools,l=e.disallowedTools??this.runDefaults.disallowedTools,u=e.mcpConfig??this.runDefaults.mcpConfig,d=e.mcpServers??this.runDefaults.mcpServers,f=e.extraArgs??this.runDefaults.extraArgs,p=e.forkSession??this.runDefaults.forkSession??this.forkOnNextRun;if(e.model&&r.push(`--model`,e.model),e.systemPrompt&&r.push(`--system-prompt`,e.systemPrompt),o&&r.push(`--append-system-prompt`,o),a&&r.push(`--permission-mode`,a),c&&c.length>0&&r.push(`--allowed-tools`,c.join(`,`)),l&&l.length>0&&r.push(`--disallowed-tools`,l.join(`,`)),u)for(let e of t(u))r.push(`--mcp-config`,e);return d&&r.push(`--mcp-config`,this.ensureMcpTempFile(d)),e.schema.kind!==`none`&&r.push(`--json-schema`,JSON.stringify(F(e.schema.jsonSchema))),n.requestedSessionId&&(r.push(`--resume`,n.requestedSessionId),p&&r.push(`--fork-session`)),f&&f.length>0&&r.push(...f),r.push(`--print`,i),r}buildEnv(e,t){let n=r({propagateEnv:this.creationOptions.propagateEnv});return this.creationOptions.ci!==!1&&(n.CI=n.CI??`true`),this.defaults.env&&Object.assign(n,this.defaults.env),delete n.CLAUDECODE,n}mapRawEvent(e,t){this.appendRawLog(e);let n=N(e);if(!n)return this.onParseError(JSON.stringify(e).slice(0,200),Error(`schema validation failed`)),{events:[]};let r=v(n)??t.sessionId;this.forkOnNextRun&&t.requestedSessionId&&r&&r!==t.requestedSessionId&&(this.forkOnNextRun=!1);let i=E(n,{...t,sessionId:r});return r&&i.sessionId===void 0&&(i.sessionId=r),i}};const L=e=>new I(l(e).options);export{L as createClaudeCodeCliAgent};
@@ -0,0 +1,2 @@
1
+ import { a as ClaudeCodeSdkExecutable, c as ClaudeCodeSdkSettingSource, i as ClaudeCodeSdkEvent, l as ClaudeCodeSdkSettings, n as ClaudeCodeSdkAgent, o as ClaudeCodeSdkPermissionMode, r as ClaudeCodeSdkAgentOptions, s as ClaudeCodeSdkRunOptions, t as createClaudeCodeSdkAgent } from "../../index-CzvanLE_.mjs";
2
+ export { ClaudeCodeSdkAgent, ClaudeCodeSdkAgentOptions, ClaudeCodeSdkEvent, ClaudeCodeSdkExecutable, ClaudeCodeSdkPermissionMode, ClaudeCodeSdkRunOptions, ClaudeCodeSdkSettingSource, ClaudeCodeSdkSettings, createClaudeCodeSdkAgent };
@@ -0,0 +1,4 @@
1
+ import{n as e}from"../../types-CwvWHEpy.mjs";import{i as t,n,r}from"../../util-CGg8cK92.mjs";import{t as i}from"../../env-Dkd8Sgjf.mjs";import{a,c as o,s}from"../../classify-error-V6x6jP_R.mjs";import{t as c}from"../../structured-output-DEkBQ-1Z.mjs";import{t as l}from"../../SdkAgent-a97nkDuR.mjs";import{query as u}from"@anthropic-ai/claude-agent-sdk";const d=(e,t)=>{if(!(!n(e)||typeof e[t]!=`string`))return e[t]},f=(e,t)=>{if(!(!n(e)||typeof e[t]!=`number`))return e[t]},p=e=>n(e)&&e.type===`text`&&typeof e.text==`string`,m=e=>n(e)&&e.type===`thinking`&&typeof e.thinking==`string`,h=e=>n(e)&&e.type===`tool_use`&&typeof e.id==`string`&&typeof e.name==`string`,g=e=>n(e)&&e.type===`tool_result`&&typeof e.tool_use_id==`string`,_=e=>{let t=n(e.message)?e.message.content:void 0;return Array.isArray(t)?t:[]},v=(e,t)=>d(e.message,`model`)??t.model??null,y=e=>{let t=n(e.message)?e.message.content:void 0;return typeof t==`string`?[t]:Array.isArray(t)?t:[]},b=e=>{if(typeof e==`string`||!Array.isArray(e))return e;let t=e.flatMap(e=>p(e)?[e.text]:[]);return t.length===e.length?t.join(`
2
+ `):e},x=e=>{if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return}},S=e=>{let n=f(e.usage,`input_tokens`),r=f(e.usage,`cache_creation_input_tokens`),i=f(e.usage,`cache_read_input_tokens`),a=f(e.usage,`output_tokens`),o=t(n,r,i,a);return{durationMs:e.duration_ms,apiDurationMs:e.duration_api_ms,turns:e.num_turns,costUsd:e.total_cost_usd,inputTokens:n,cacheCreationInputTokens:r,cacheReadInputTokens:i,outputTokens:a,totalTokens:o}},C=e=>{if(`errors`in e&&Array.isArray(e.errors)){let t=e.errors.filter(e=>typeof e==`string`&&e.trim()!==``);if(t.length>0)return t.join(`
3
+ `)}return e.subtype===`error_max_structured_output_retries`?`Structured output retries were exhausted.`:e.subtype},w=e=>`session_id`in e?e.session_id:void 0,T=(e,t,n)=>a(e,`message`,{sessionId:t,model:null,role:`system`,content:[o(n)],text:n}),E=(e,t,n)=>{let r=[],i=[],s=v(e,n);for(let n of _(e)){if(p(n)){r.push(a(t.runId,`message`,{sessionId:t.sessionId,model:s,role:`assistant`,content:[o(n.text)],text:n.text}));continue}if(m(n)){r.push(a(t.runId,`reasoning`,{sessionId:t.sessionId,model:s,content:[o(n.thinking)],text:n.thinking}));continue}h(n)&&(i.push({toolCallId:n.id,toolName:n.name,input:n.input}),r.push(a(t.runId,`tool-call`,{sessionId:t.sessionId,model:s,toolCallId:n.id,toolName:n.name,input:n.input})))}return{events:r,toolCalls:i}},D=(e,t)=>{let n=[];for(let r of y(e)){if(typeof r==`string`){n.push(a(t.runId,`message`,{sessionId:t.sessionId,model:null,role:`user`,content:[o(r)],text:r}));continue}if(p(r)){n.push(a(t.runId,`message`,{sessionId:t.sessionId,model:null,role:`user`,content:[o(r.text)],text:r.text}));continue}if(g(r)){let e=t.toolCalls.get(r.tool_use_id),i=b(r.content);n.push(a(t.runId,`tool-result`,{sessionId:t.sessionId,toolCallId:r.tool_use_id,toolName:e?.toolName,input:e?.input,output:i,isError:r.is_error,error:r.is_error?x(i):void 0}))}}return{events:n}},O=(e,t,n)=>t.toolCalls.has(e.tool_use_id)?{events:[]}:{events:[a(t.runId,`tool-call`,{sessionId:t.sessionId,model:n.model??null,toolCallId:e.tool_use_id,toolName:e.tool_name,input:void 0})],toolCalls:[{toolCallId:e.tool_use_id,toolName:e.tool_name}]},k=e=>{switch(e.subtype){case`init`:return;case`status`:return`status: ${e.status??`idle`}`;case`local_command_output`:return e.content;case`hook_started`:return`[hook_started] ${e.hook_name}`;case`hook_progress`:return`[hook_progress] ${e.hook_name}`;case`hook_response`:return`[hook_response] ${e.hook_name}: ${e.outcome}`;case`task_started`:return`[task_started] ${e.description}`;case`task_progress`:return`[task_progress] ${e.summary??e.description}`;case`task_notification`:return`[task_${e.status}] ${e.summary}`;case`compact_boundary`:return`[compact_boundary] ${e.compact_metadata.trigger}`;case`files_persisted`:return`[files_persisted] ${e.files.length} file${e.files.length===1?``:`s`}`;default:return}},A=(e,t)=>{let n=k(e);return n?{events:[T(t.runId,t.sessionId,n)]}:{events:[]}},j=(e,t)=>{switch(e.type){case`auth_status`:{let n=`authenticated`;return e.error?n=`auth error: ${e.error}`:e.isAuthenticating&&(n=`authenticating`),{events:[T(t.runId,t.sessionId,n)]}}case`prompt_suggestion`:return{events:[T(t.runId,t.sessionId,`prompt suggestion: ${e.suggestion}`)]};case`rate_limit_event`:return{events:[T(t.runId,t.sessionId,`rate limited: ${e.rate_limit_info.status}`)]};case`tool_use_summary`:return{events:[T(t.runId,t.sessionId,e.summary)]};default:return{events:[]}}},M=(e,t)=>{let n={stats:S(e)},i=`result`in e?e.result:void 0,a=e.subtype===`success`&&!e.is_error;typeof i==`string`&&(n.output={...n.output,text:i});let o=c(`structured_output`in e?e.structured_output:void 0,t,{isSuccess:a},`Structured output was requested but Claude Agent SDK did not return structured_output.`);if(o.value===void 0&&a&&t.schemaRequested&&typeof i==`string`)try{o.value=r(i),o.error=void 0}catch{}return o.value!==void 0&&(n.output={...n.output,value:o.value}),o.error&&(n.status=`failed`,n.error=o.error),a?n.error||(n.status=`completed`):(n.status=`failed`,n.error={kind:`provider`,message:C(e)}),{events:[],state:n}},N=(e,t,n={})=>{let r;switch(e.type){case`assistant`:r=E(e,t,n);break;case`result`:r=M(e,t);break;case`system`:r=A(e,t);break;case`tool_progress`:r=O(e,t,n);break;case`user`:r=D(e,t);break;case`auth_status`:case`prompt_suggestion`:case`rate_limit_event`:case`tool_use_summary`:r=j(e,t);break;default:r={events:[]};break}let i=w(e);return i&&r.sessionId===void 0&&(r.sessionId=i),r},P={structuredOutput:!0,sessionResume:!0,imageInput:!1,mcp:!0,eventStreaming:!0,sessionFork:!0},F=(e,t)=>e?t?`${e}\n\n${t}`:e:t?{type:`preset`,preset:`claude_code`,append:t}:void 0,I=({prompt:e,options:t})=>u({prompt:e,options:t}),L=t=>{if(t===void 0||typeof t==`string`)return t;if(Array.isArray(t))throw new e(`settings must be an object or a path string.`);return t},R=(t,n)=>{if(n.command){if(n.url)throw new e(`mcpServers.${t} cannot set both command and url.`);if(n.headers)throw new e(`mcpServers.${t}.headers is only supported with url transports.`);if(n.cwd)throw new e(`mcpServers.${t}.cwd is not supported by claude-code-sdk.`);return{type:`stdio`,command:n.command,args:n.args,env:n.env}}if(n.url){if(n.args)throw new e(`mcpServers.${t}.args is only supported with command transports.`);if(n.env)throw new e(`mcpServers.${t}.env is only supported with command transports.`);if(n.cwd)throw new e(`mcpServers.${t}.cwd is not supported by claude-code-sdk.`);return{type:`http`,url:n.url,headers:n.headers}}throw new e(`mcpServers.${t} must set either command or url.`)},z=e=>{if(e)return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,R(e,t)]))};var B=class t extends l{type=`claude-code-sdk`;defaults;creationOptions;runDefaults;createQueryFn;command;forkOnNextRun;currentQuery;constructor(e={}){super({type:`claude-code-sdk`,capabilities:P,sessionId:e.sessionId,onEvent:e.onEvent}),this.command=e.command,this.defaults={cwd:e.cwd,model:e.model,systemPrompt:e.systemPrompt},this.creationOptions={...e,command:e.command,env:e.env?{...e.env}:void 0,executableArgs:e.executableArgs?[...e.executableArgs]:void 0,mcpServers:e.mcpServers?{...e.mcpServers}:void 0,settingSources:e.settingSources?[...e.settingSources]:void 0},this.runDefaults={allowedTools:e.allowedTools?[...e.allowedTools]:void 0,disallowedTools:e.disallowedTools?[...e.disallowedTools]:void 0,appendSystemPrompt:e.appendSystemPrompt,permissionMode:e.permissionMode,mcpServers:e.mcpServers?{...e.mcpServers}:void 0,forkSession:e.forkSession,maxTurns:e.maxTurns},this.createQueryFn=e.createQuery??I,this.forkOnNextRun=e.forkOnNextRun??!1}fork(){if(!this.sessionId)throw new e(`Cannot fork a Claude Code SDK agent before it has a sessionId.`);return new t({...this.creationOptions,sessionId:this.sessionId,forkSession:void 0,forkOnNextRun:!0})}get runRequestDefaults(){return this.defaults}onValidateRun(t,n){if((t.forkSession??this.runDefaults.forkSession??this.forkOnNextRun)&&!this.sessionId)throw new e(`forkSession requires an existing sessionId on the agent.`);if(t.maxTurns!==void 0&&(!Number.isInteger(t.maxTurns)||t.maxTurns<=0))throw new e(`maxTurns must be a positive integer.`)}onStopRequested(e){this.currentQuery?.interrupt?.().catch(()=>{}),super.onStopRequested(e)}async onDispose(){this.currentQuery?.close?.(),this.currentQuery=void 0}cleanupSdkResources(){this.currentQuery&&=(this.currentQuery.close?.(),void 0)}async executeSdkRun(e,t,n){let r=this.createQueryFn({prompt:s(e.normalizedRequest.input),options:this.buildQueryOptions(t,e,n)});this.currentQuery=r;for await(let t of r){let n=w(t)??e.sessionId;n&&e.sessionId!==n&&(e.sessionId=n,this.setSessionId(n),this.forkOnNextRun&&e.requestedSessionId&&n!==e.requestedSessionId&&(this.forkOnNextRun=!1));let r=N(t,{runId:e.runId,requestedSessionId:e.requestedSessionId,sessionId:e.sessionId,schemaRequested:e.normalizedRequest.schema.kind!==`none`,toolCalls:e.toolCalls},{model:e.normalizedRequest.model});this.applyBatch(e,r)}}buildQueryOptions(e,t,n){let r=e.permissionMode??this.runDefaults.permissionMode,o=e.forkSession??this.runDefaults.forkSession??this.forkOnNextRun,s=e.appendSystemPrompt??this.runDefaults.appendSystemPrompt,c=i({propagateEnv:this.creationOptions.propagateEnv});return this.creationOptions.env&&Object.assign(c,this.creationOptions.env),delete c.CLAUDECODE,{abortController:n,cwd:t.normalizedRequest.cwd,model:t.normalizedRequest.model,systemPrompt:F(t.normalizedRequest.systemPrompt,s),allowedTools:e.allowedTools??this.runDefaults.allowedTools,disallowedTools:e.disallowedTools??this.runDefaults.disallowedTools,mcpServers:z(e.mcpServers??this.runDefaults.mcpServers),maxTurns:e.maxTurns??this.runDefaults.maxTurns,outputFormat:t.normalizedRequest.schema.kind===`none`?void 0:{type:`json_schema`,schema:t.normalizedRequest.schema.jsonSchema},permissionMode:r,allowDangerouslySkipPermissions:r===`bypassPermissions`?!0:void 0,resume:t.requestedSessionId,forkSession:t.requestedSessionId?o:void 0,env:c,executable:this.creationOptions.executable,executableArgs:this.creationOptions.executableArgs,pathToClaudeCodeExecutable:this.command,settings:L(this.creationOptions.settings),settingSources:this.creationOptions.settingSources,stderr:e=>{for(let n of e.split(`
4
+ `))n&&(t.stderrLines.push(n),this.emit(t,a(t.runId,`stderr`,{sessionId:t.sessionId,text:n})))}}}};const V=e=>new B(e);export{V as createClaudeCodeSdkAgent};
@@ -0,0 +1,2 @@
1
+ import { a as CodexCliRunOptions, c as CodexEvent, d as CodexItemUpdatedEvent, f as CodexThreadStartedEvent, i as CodexCliPermissionMode, l as CodexItemCompletedEvent, m as CodexTurnFailedEvent, n as CodexCliAgent, o as CodexCliSandboxMode, p as CodexTurnCompletedEvent, r as CodexCliAgentOptions, s as CodexErrorEvent, t as createCodexCliAgent, u as CodexItemStartedEvent } from "../../index-DP4Jxoax.mjs";
2
+ export { CodexCliAgent, CodexCliAgentOptions, CodexCliPermissionMode, CodexCliRunOptions, CodexCliSandboxMode, CodexErrorEvent, CodexEvent, CodexItemCompletedEvent, CodexItemStartedEvent, CodexItemUpdatedEvent, CodexThreadStartedEvent, CodexTurnCompletedEvent, CodexTurnFailedEvent, createCodexCliAgent };
@@ -0,0 +1,2 @@
1
+ import{n as e}from"../../types-CwvWHEpy.mjs";import{a as t,i as n,n as r,r as i}from"../../util-CGg8cK92.mjs";import{a,c as o,o as s,s as c}from"../../classify-error-V6x6jP_R.mjs";import{n as l,t as u}from"../../execution-target-BJ5mWjDM.mjs";import{join as d}from"node:path";import{z as f}from"zod/v4";import{mkdtempSync as ee,readFileSync as te,rmSync as p,writeFileSync as m}from"node:fs";import{tmpdir as h}from"node:os";const g=f.object({type:f.string()}).passthrough(),_=f.object({input_tokens:f.number().optional(),cached_input_tokens:f.number().optional(),output_tokens:f.number().optional(),reasoning_output_tokens:f.number().optional(),total_tokens:f.number().optional()}).passthrough(),v=f.object({type:f.literal(`thread.started`),thread_id:f.string()}).passthrough(),ne=f.object({type:f.literal(`turn.completed`),usage:_.optional(),last_agent_message:f.string().optional(),duration_ms:f.number().optional(),num_turns:f.number().optional()}).passthrough(),re=f.object({type:f.literal(`turn.failed`),usage:_.optional(),last_agent_message:f.string().optional(),duration_ms:f.number().optional(),num_turns:f.number().optional(),message:f.string().optional(),error:f.unknown().optional()}).passthrough(),y=f.object({id:f.string(),type:f.string()}).passthrough(),ie=f.object({type:f.literal(`item.started`),item:y}).passthrough(),b=f.object({type:f.literal(`item.updated`),item:y}).passthrough(),x=f.object({type:f.literal(`item.completed`),item:y}).passthrough(),ae=f.object({type:f.literal(`error`),message:f.string().optional(),error:f.unknown().optional()}).passthrough(),S=e=>r(e)?e:void 0,C=(e,t)=>{if(e){for(let n of t)if(n in e)return e[n]}},w=(e,t)=>{let n=C(e,t);return typeof n==`string`?n:void 0},T=(e,t)=>{let n=C(e,t);return typeof n==`number`?n:void 0},E=e=>{let t=Object.entries(e).filter(([,e])=>e!==void 0);if(t.length!==0)return Object.fromEntries(t)},D=e=>e.replace(/([\da-z])([A-Z])/g,`$1_$2`).toLowerCase(),O=(e,t)=>{if(typeof e==`string`&&e.trim()!==``)return e;let n=S(e);return n?w(n,[`message`,`error`,`status_message`])??w(S(n.additional_details),[`message`])??t:t},k=e=>{let t=S(e.usage),r=T(t,[`input_tokens`]),i=T(t,[`cached_input_tokens`]),a=T(t,[`output_tokens`]),o=T(t,[`reasoning_output_tokens`]),s=T(t,[`total_tokens`])??n(r,i,a,o);return{durationMs:T(e,[`duration_ms`,`durationMs`])??0,apiDurationMs:T(e,[`duration_ms`,`durationMs`])??0,turns:T(e,[`num_turns`,`numTurns`])??1,costUsd:0,inputTokens:r,cacheReadInputTokens:i,outputTokens:a,totalTokens:s}},A=e=>({toolName:`Bash`,input:E({command:w(e,[`command`]),cwd:w(e,[`cwd`,`working_directory`]),parsedCommand:C(e,[`parsed_cmd`,`parsedCommand`])})}),j=e=>{let t=w(e,[`tool`,`tool_name`])??`mcp_tool_call`,n=w(e,[`server`]),r=C(e,[`arguments`,`invocation`,`input`]);return{toolName:t,input:n===void 0?r:E({server:n,arguments:r})}},M=e=>({toolName:`WebSearch`,input:E({query:w(e,[`query`]),action:C(e,[`action`])})}),N=e=>{let t=w(e,[`status`]),n=T(e,[`exit_code`,`exitCode`]),r=w(e,[`error`])??w(S(e.result),[`error`]);return{isError:t===`error`||t===`failed`||t===`errored`||t===`interrupted`||n!==void 0&&n!==0||r!==void 0,error:r}},P=e=>({events:[],sessionId:e.thread_id}),F=(e,t)=>{let n={stats:k(e),status:`completed`};if(e.last_agent_message!==void 0&&(n.output={text:e.last_agent_message}),t.schemaRequested&&e.last_agent_message)try{n.output={...n.output,value:i(e.last_agent_message)}}catch{}return{events:[],state:n}},I=e=>({events:[],state:{stats:k(e),status:`failed`,output:e.last_agent_message===void 0?void 0:{text:e.last_agent_message},error:{kind:`provider`,message:O(e.error??e.message,`Codex turn failed.`)}}}),L=e=>({events:[],state:{status:`failed`,error:{kind:`provider`,message:O(e.error??e.message,`Codex emitted an error event.`)}}}),R=(e,t,n,r)=>{let i=w(e,[`id`]);return i?{events:[a(t.runId,`tool-call`,{sessionId:t.sessionId,model:r.model??null,toolCallId:i,toolName:n.toolName,input:n.input})],toolCalls:[{toolCallId:i,toolName:n.toolName,input:n.input}]}:{events:[]}},z=e=>C(e,[`aggregated_output`,`aggregatedOutput`,`output`,`result`,`text`])??``,B=e=>C(e,[`result`,`output`])??w(e,[`error`])??``,V=e=>C(e,[`results`,`result`,`action`])??``,H=(e,t,n,r,i)=>{let o=w(e,[`id`]);if(!o)return{events:[]};let s=t.toolCalls.get(o),c=s??n,l=N(e),u=[],d=[];return s||(u.push(a(t.runId,`tool-call`,{sessionId:t.sessionId,model:i.model??null,toolCallId:o,toolName:n.toolName,input:n.input})),d.push({toolCallId:o,toolName:n.toolName,input:n.input})),u.push(a(t.runId,`tool-result`,{sessionId:t.sessionId,toolCallId:o,toolName:c.toolName,input:c.input,output:r,isError:l.isError||void 0,error:l.error})),{events:u,toolCalls:d}},U=e=>{let t=w(e,[`summary_text`,`reasoning_text`,`text`,`summary`,`raw_content`]);if(t)return t;let n=C(e,[`summary`]);if(Array.isArray(n)){let e=n.flatMap(e=>{if(typeof e==`string`)return[e];let t=w(S(e),[`text`,`summary_text`]);return t?[t]:[]}).join(`
2
+ `);if(e)return e}},W=(e,t)=>{let n=w(e,[`id`]);if(!n||!t.itemCache)return;let r=t.itemCache.get(n);t.itemCache.set(n,r?{...r,...e}:{...e})},oe=(e,t)=>{let n=w(e,[`id`]);if(!n||!t.itemCache)return e;let r=t.itemCache.get(n);return t.itemCache.delete(n),r?{...r,...e}:e},G=(e,t,n)=>{let r=S(e.item);if(!r)return{events:[]};switch(W(r,n),D(w(r,[`type`])??``)){case`command_execution`:return R(r,t,A(r),n);case`mcp_tool_call`:return R(r,t,j(r),n);case`web_search`:return R(r,t,M(r),n);default:return{events:[]}}},K=(e,t)=>{let n=S(e.item);return n&&W(n,t),{events:[]}},q=(e,t,n)=>{let r=S(e.item);if(!r)return{events:[]};let s=oe(r,n);switch(D(w(s,[`type`])??``)){case`agent_message`:{let e=w(s,[`text`]);if(!e)return{events:[]};let r=t.schemaRequested&&(w(s,[`phase`])===void 0||w(s,[`phase`])===`final_answer`),c;if(r)try{c=i(e)}catch{}return{events:[a(t.runId,`message`,{sessionId:t.sessionId,model:n.model??null,role:`assistant`,content:[o(e)],text:e})],state:{output:{text:e,...c===void 0?{}:{value:c}}}}}case`reasoning`:{let e=U(s);return e?{events:[a(t.runId,`reasoning`,{sessionId:t.sessionId,model:n.model??null,content:[o(e)],text:e})]}:{events:[]}}case`command_execution`:return H(s,t,A(s),z(s),n);case`mcp_tool_call`:return H(s,t,j(s),B(s),n);case`web_search`:return H(s,t,M(s),V(s),n);default:return{events:[]}}};function se(e,t,n={}){let r=v.safeParse(e);if(r.success)return{batch:P(r.data),disposition:`mapped`};if(e.type===`turn.started`)return{batch:{events:[]},disposition:`known-ignored`};let i=ne.safeParse(e);if(i.success)return{batch:F(i.data,t),disposition:`mapped`};let a=re.safeParse(e);if(a.success)return{batch:I(a.data),disposition:`mapped`};let o=ae.safeParse(e);if(o.success)return{batch:L(o.data),disposition:`mapped`};let s=ie.safeParse(e);if(s.success){let e=G(s.data,t,n);return{batch:e,disposition:e.events.length>0||(e.toolCalls?.length??0)>0?`mapped`:`known-ignored`}}let c=b.safeParse(e);if(c.success)return{batch:K(c.data,n),disposition:`known-ignored`};let l=x.safeParse(e);if(l.success){let e=q(l.data,t,n);return{batch:e,disposition:e.events.length>0||e.state!==void 0||(e.toolCalls?.length??0)>0||e.sessionId!==void 0?`mapped`:`known-ignored`}}switch(e.type){case`thread.started`:case`turn.started`:case`turn.completed`:case`turn.failed`:case`item.started`:case`item.updated`:case`item.completed`:case`error`:return{batch:{events:[]},disposition:`known-malformed`};default:return{batch:{events:[]},disposition:`unknown`}}}const ce=s(g),le={structuredOutput:!0,sessionResume:!0,imageInput:!1,mcp:!0,eventStreaming:!0},ue=e=>/^\w+$/.test(e),J=e=>ue(e)?e:JSON.stringify(e),Y=(...e)=>e.map(J).join(`.`),X=e=>JSON.stringify(e),de=e=>`[${e.map(e=>JSON.stringify(e)).join(`,`)}]`,Z=e=>{let t=[];for(let[n,r]of Object.entries(e)){let e=Y(`mcp_servers`,n);if(r.url&&t.push(`--config`,`${e}.url=${X(r.url)}`),r.command&&t.push(`--config`,`${e}.command=${X(r.command)}`),r.args&&r.args.length>0&&t.push(`--config`,`${e}.args=${de(r.args)}`),r.cwd&&t.push(`--config`,`${e}.cwd=${X(r.cwd)}`),r.headers)for(let[e,i]of Object.entries(r.headers))t.push(`--config`,`${Y(`mcp_servers`,n,`http_headers`,e)}=${X(i)}`);if(r.env)for(let[e,i]of Object.entries(r.env))t.push(`--config`,`${Y(`mcp_servers`,n,`env`,e)}=${X(i)}`)}return t},fe=(t,n)=>{if(t!==void 0){if(!Array.isArray(t)||t.some(e=>typeof e!=`string`))throw new e(`${n} must be an array of strings.`);return[...t]}},Q=(t,n)=>{if(t===void 0)return;if(!r(t)||Array.isArray(t))throw new e(`${n} must be an object.`);let i={};for(let[r,a]of Object.entries(t)){if(typeof a!=`string`)throw new e(`${n}.${r} must be a string.`);i[r]=a}return i},pe=(t,n)=>{if(!r(t)||Array.isArray(t))throw new e(`${n} must be an object.`);let i=t.command,a=t.url,o=t.cwd;if(i!==void 0&&typeof i!=`string`)throw new e(`${n}.command must be a string.`);if(a!==void 0&&typeof a!=`string`)throw new e(`${n}.url must be a string.`);if(o!==void 0&&typeof o!=`string`)throw new e(`${n}.cwd must be a string.`);return{command:i,url:a,cwd:o,args:fe(t.args,`${n}.args`),env:Q(t.env,`${n}.env`),headers:Q(t.headers,`${n}.headers`)}},$=t=>{let n;try{n=JSON.parse(te(t,`utf8`))}catch(n){throw n instanceof Error&&`code`in n&&n.code===`ENOENT`?new e(`mcpConfig file not found: ${t}`):new e(`mcpConfig must be valid JSON: ${t}`)}if(!r(n)||Array.isArray(n))throw new e(`mcpConfig must contain a JSON object: ${t}`);let i=n.mcpServers;if(i===void 0)return;if(!r(i)||Array.isArray(i))throw new e(`mcpConfig.mcpServers must be an object: ${t}`);let a={};for(let[e,t]of Object.entries(i))a[e]=pe(t,`mcpConfig.mcpServers.${e}`);return a},me=e=>{let t=$(e);return t?Z(t):[]};var he=class extends l{type=`codex-cli`;creationOptions;runDefaults;schemaDirs=new Map;runModels=new Map;itemCaches=new Map;constructor(e={}){super({type:`codex-cli`,capabilities:le,defaults:{cwd:e.cwd,env:e.env,command:t(e.command??`codex`),sessionId:e.sessionId,model:e.model},spawner:e.spawner,executionTarget:e.container??e.sandbox,logPath:e.logPath,onEvent:e.onEvent}),this.creationOptions=e,this.runDefaults={codexSandboxMode:e.codexSandboxMode,additionalDirectories:e.additionalDirectories?[...e.additionalDirectories]:void 0,skipGitRepoCheck:e.skipGitRepoCheck,permissionMode:e.permissionMode,ephemeral:e.ephemeral,mcpConfig:e.mcpConfig,mcpServers:e.mcpServers?{...e.mcpServers}:void 0,extraArgs:e.extraArgs?[...e.extraArgs]:void 0}}onValidateRun(e,t){let n=e.mcpConfig??this.runDefaults.mcpConfig;n&&$(n)}buildArgs(e,t){let n=[`exec`,`--json`],r=e.codexSandboxMode??this.runDefaults.codexSandboxMode,i=e.additionalDirectories??this.runDefaults.additionalDirectories,a=e.skipGitRepoCheck??this.runDefaults.skipGitRepoCheck,o=e.permissionMode??this.runDefaults.permissionMode,s=e.ephemeral??this.runDefaults.ephemeral,l=e.extraArgs??this.runDefaults.extraArgs;this.runModels.set(t.runId,e.model),e.model&&n.push(`--model`,e.model),r&&n.push(`--sandbox`,r),o===`full-auto`?n.push(`--full-auto`):o===`full-access`&&n.push(`--dangerously-bypass-approvals-and-sandbox`),a&&n.push(`--skip-git-repo-check`),s&&n.push(`--ephemeral`);for(let e of i??[])n.push(`--add-dir`,e);e.schema.kind!==`none`&&n.push(`--output-schema`,this.createSchemaFile(t.runId,e.schema.jsonSchema));let u=e.mcpConfig??this.runDefaults.mcpConfig;u&&n.push(...me(u));let d=e.mcpServers??this.runDefaults.mcpServers;d&&n.push(...Z(d)),l&&l.length>0&&n.push(...l),t.requestedSessionId&&n.push(`resume`,t.requestedSessionId);let f=c(e.input);return f.trim().startsWith(`-`)?n.push(`--`,f):n.push(f),n}buildEnv(e,t){return this.buildDefaultEnv(this.creationOptions.propagateEnv)}mapRawEvent(e,t){this.appendRawLog(e);let n=ce(e);if(!n)return this.onParseError(JSON.stringify(e).slice(0,200),Error(`schema validation failed`)),{events:[]};let r=this.itemCaches.get(t.runId);r||(r=new Map,this.itemCaches.set(t.runId,r));let i=se(n,t,{model:this.runModels.get(t.runId),itemCache:r});return i.disposition===`known-malformed`&&this.onParseError(JSON.stringify(e).slice(0,200),Error(`known Codex event "${n.type}" did not match the expected payload shape`)),i.batch}async onRunFinished(e){await super.onRunFinished(e),this.runModels.delete(e.runId),this.itemCaches.delete(e.runId);let t=this.schemaDirs.get(e.runId);t&&(this.schemaDirs.delete(e.runId),p(t,{recursive:!0,force:!0}))}createSchemaFile(e,t){let n=ee(d(h(),`coding-agents-sdk-codex-cli-`)),r=d(n,`output-schema.json`);return m(r,JSON.stringify(t,null,2),{encoding:`utf8`,mode:384}),this.schemaDirs.set(e,n),r}};const ge=e=>new he(u(e).options);export{ge as createCodexCliAgent};
@@ -0,0 +1,2 @@
1
+ import { a as CodexSdkItem, i as CodexSdkEvent, n as CodexSdkAgent, o as CodexSdkPermissionMode, r as CodexSdkAgentOptions, s as CodexSdkRunOptions, t as createCodexSdkAgent } from "../../index-jUwKDQ34.mjs";
2
+ export { CodexSdkAgent, CodexSdkAgentOptions, CodexSdkEvent, CodexSdkItem, CodexSdkPermissionMode, CodexSdkRunOptions, createCodexSdkAgent };
@@ -0,0 +1 @@
1
+ import{r as e}from"../../util-CGg8cK92.mjs";import{t}from"../../env-Dkd8Sgjf.mjs";import{a as n,c as r,r as i}from"../../classify-error-V6x6jP_R.mjs";import{t as a}from"../../SdkAgent-a97nkDuR.mjs";import{Codex as o}from"@openai/codex-sdk";const s=e=>({turns:1,costUsd:0,inputTokens:e.input_tokens,cacheReadInputTokens:e.cached_input_tokens,outputTokens:e.output_tokens,totalTokens:e.input_tokens+e.cached_input_tokens+e.output_tokens}),c=e=>({toolCallId:e.id,toolName:`Bash`,input:{command:e.command}}),l=e=>({toolCallId:e.id,toolName:e.tool,input:{server:e.server,arguments:e.arguments}}),u=e=>({toolCallId:e.id,toolName:`WebSearch`,input:{query:e.query}}),d=(e,t,r)=>({events:[n(t.runId,`tool-call`,{sessionId:t.sessionId,model:r.model??null,toolCallId:e.toolCallId,toolName:e.toolName,input:e.input})],toolCalls:[{toolCallId:e.toolCallId,toolName:e.toolName,input:e.input}]}),f=(e,t,r,i,a)=>{let o=i.toolCalls.get(e.toolCallId),s=o??e,c=[],l=[];return o||(c.push(n(i.runId,`tool-call`,{sessionId:i.sessionId,model:a.model??null,toolCallId:e.toolCallId,toolName:e.toolName,input:e.input})),l.push({toolCallId:e.toolCallId,toolName:e.toolName,input:e.input})),c.push(n(i.runId,`tool-result`,{sessionId:i.sessionId,toolCallId:e.toolCallId,toolName:s.toolName,input:s.input,output:t,isError:r.isError||void 0,error:r.error})),{events:c,toolCalls:l.length>0?l:void 0}},p=e=>{let t=e.status===`failed`||e.exit_code!==void 0&&e.exit_code!==0;return{isError:t,error:t?`Command exited with code ${e.exit_code??1}.`:void 0}},m=e=>e.result?.structured_content??e.result?.content??e.error?.message??``,h=e=>({isError:e.status===`failed`||e.error!==void 0,error:e.error?.message}),g=(e,t)=>({events:[n(t.runId,`stderr`,{sessionId:t.sessionId,text:e.message})],state:{error:{kind:`provider`,message:e.message}}}),_=(e,t,n)=>{switch(e.item.type){case`command_execution`:return d(c(e.item),t,n);case`mcp_tool_call`:return d(l(e.item),t,n);case`web_search`:return d(u(e.item),t,n);default:return{events:[]}}},v=(e,t,i)=>{switch(e.item.type){case`agent_message`:return{events:[n(t.runId,`message`,{sessionId:t.sessionId,model:i.model??null,role:`assistant`,content:[r(e.item.text)],text:e.item.text})],state:{output:{text:e.item.text}}};case`reasoning`:return{events:[n(t.runId,`reasoning`,{sessionId:t.sessionId,model:i.model??null,content:[r(e.item.text)],text:e.item.text})]};case`command_execution`:return f(c(e.item),e.item.aggregated_output,p(e.item),t,i);case`mcp_tool_call`:return f(l(e.item),m(e.item),h(e.item),t,i);case`web_search`:return f(u(e.item),``,{isError:!1},t,i);case`error`:return g(e.item,t);default:return{events:[]}}},y=(e,t,n={})=>{switch(e.type){case`thread.started`:return{events:[],sessionId:e.thread_id};case`turn.started`:return{events:[]};case`turn.completed`:return{events:[],state:{stats:s(e.usage),status:`completed`,error:void 0}};case`turn.failed`:return{events:[],state:{status:`failed`,error:{kind:`provider`,message:e.error.message}}};case`item.started`:return _(e,t,n);case`item.updated`:return{events:[]};case`item.completed`:return v(e,t,n);case`error`:return{events:[],state:{status:`failed`,error:{kind:`provider`,message:e.message}}};default:return{events:[]}}},b={structuredOutput:!0,sessionResume:!0,imageInput:!0,mcp:!0,eventStreaming:!0},x=e=>e.length===1&&e[0]?.type===`text`?e[0].text:e.map(e=>e.type===`text`?{type:`text`,text:e.text}:{type:`local_image`,path:e.path}),S=(e,t)=>({outputSchema:e.normalizedRequest.schema.kind===`none`?void 0:e.normalizedRequest.schema.jsonSchema,signal:t});var C=class extends a{type=`codex-sdk`;defaults;runDefaults;command;codex;resolvedEnv;constructor(e={}){super({type:`codex-sdk`,capabilities:b,sessionId:e.sessionId,onEvent:e.onEvent}),this.command=e.command,this.defaults={cwd:e.cwd,model:e.model},this.runDefaults={permissionMode:e.permissionMode,sandboxMode:e.sandboxMode,skipGitRepoCheck:e.skipGitRepoCheck,modelReasoningEffort:e.modelReasoningEffort,networkAccessEnabled:e.networkAccessEnabled,webSearchMode:e.webSearchMode,webSearchEnabled:e.webSearchEnabled,additionalDirectories:e.additionalDirectories?[...e.additionalDirectories]:void 0};let n=t({propagateEnv:e.propagateEnv});e.env&&Object.assign(n,e.env),this.resolvedEnv=n,this.codex=e.codex??new o({codexPathOverride:this.command,baseUrl:e.baseUrl,apiKey:e.apiKey,config:e.config,env:n})}getResolvedEnvForTesting(){return this.resolvedEnv}get runRequestDefaults(){return this.defaults}async executeSdkRun(t,n,r){let a=this.buildThreadOptions(n,t),o=t.requestedSessionId?this.codex.resumeThread(t.requestedSessionId,a):this.codex.startThread(a);if(!t.sessionId&&o.id&&(t.sessionId=o.id,this.setSessionId(o.id)),t.stopReason)return;let s=await o.runStreamed(x(t.normalizedRequest.input),S(t,r.signal));for await(let e of s.events){let n=y(e,{runId:t.runId,requestedSessionId:t.requestedSessionId,sessionId:t.sessionId,schemaRequested:t.normalizedRequest.schema.kind!==`none`,toolCalls:t.toolCalls},{model:t.normalizedRequest.model});this.applyBatch(t,n)}if(t.normalizedRequest.schema.kind!==`none`&&t.output.value===void 0&&t.error===void 0&&t.status!==`failed`&&t.output.text)try{i(t,{events:[],state:{output:{value:e(t.output.text)}}})}catch{}}buildThreadOptions(e,t){return{model:t.normalizedRequest.model,workingDirectory:t.normalizedRequest.cwd,approvalPolicy:e.permissionMode??this.runDefaults.permissionMode,sandboxMode:e.sandboxMode??this.runDefaults.sandboxMode,skipGitRepoCheck:e.skipGitRepoCheck??this.runDefaults.skipGitRepoCheck,modelReasoningEffort:e.modelReasoningEffort??this.runDefaults.modelReasoningEffort,networkAccessEnabled:e.networkAccessEnabled??this.runDefaults.networkAccessEnabled,webSearchMode:e.webSearchMode??this.runDefaults.webSearchMode,webSearchEnabled:e.webSearchEnabled??this.runDefaults.webSearchEnabled,additionalDirectories:e.additionalDirectories??this.runDefaults.additionalDirectories}}};const w=e=>new C(e);export{w as createCodexSdkAgent};
@@ -0,0 +1,2 @@
1
+ import { a as GeminiCliRunOptions, i as GeminiCliPermissionMode, n as GeminiCliAgent, o as GeminiEvent, r as GeminiCliAgentOptions, t as createGeminiCliAgent } from "../../index-DNyKelMh.mjs";
2
+ export { GeminiCliAgent, GeminiCliAgentOptions, GeminiCliPermissionMode, GeminiCliRunOptions, GeminiEvent, createGeminiCliAgent };
@@ -0,0 +1 @@
1
+ import{a as e,n as t}from"../../util-CGg8cK92.mjs";import{a as n,c as r,o as i,s as a}from"../../classify-error-V6x6jP_R.mjs";import{n as o,t as s}from"../../execution-target-BJ5mWjDM.mjs";import{z as c}from"zod/v4";const l=e=>typeof e==`string`?e:void 0,u=e=>typeof e==`number`&&Number.isFinite(e)?e:void 0,d=e=>{if(typeof e==`string`)return e;if(Array.isArray(e))return e.map(d).join(``);if(t(e)){let t=l(e.text);if(t)return t;let n=e.parts??e.content;if(Array.isArray(n))return n.map(d).join(``)}return``},f=e=>{if(typeof e==`string`)return e;if(e==null)return``;try{return JSON.stringify(e)}catch{return String(e)}},p=()=>crypto.randomUUID(),m=e=>{let n=e,r=l(n.session_id)??l(n.sessionId);if(r)return r;if(t(n.message))return l(n.message.session_id)??l(n.message.sessionId)},h=(e,t)=>{let i=`[init]`;return{events:[n(t.runId,`message`,{sessionId:t.sessionId,model:null,role:`system`,content:[r(i)],text:i})]}},g=(e,i,a)=>{let o=t(e.message)?e.message:e,s=l(o.role)??l(e.role)??`assistant`,c=l(o.model)??l(e.model)??a.model??null,u=d(o.content??o.parts??o.text??e.content??e.text);return u?.trim()?s===`assistant`?{events:[n(i.runId,`message`,{sessionId:i.sessionId,model:c,role:`assistant`,content:[r(u)],text:u})]}:{events:[n(i.runId,`message`,{sessionId:i.sessionId,model:null,role:`user`,content:[r(u)],text:u})]}:{events:[]}},_=(e,t,i)=>{let a=l(e.thought)??l(e.text)??l(e.content)??``;return a.trim()?{events:[n(t.runId,`reasoning`,{sessionId:t.sessionId,model:i.model??null,content:[r(a)],text:a})]}:{events:[]}},v=(e,r,i)=>{let a=l(e.tool_id)??l(e.id)??p(),o=l(e.tool_name)??l(e.name)??`tool`,s=(t(e.parameters)?e.parameters:void 0)??(t(e.args)?e.args:void 0)??(t(e.input)?e.input:void 0)??{};return{events:[n(r.runId,`tool-call`,{sessionId:r.sessionId,model:i.model??null,toolCallId:a,toolName:o,input:s})],toolCalls:[{toolCallId:a,toolName:o,input:s}]}},y=(e,t)=>{let r=l(e.tool_id)??l(e.tool_use_id)??l(e.id)??p(),i=l(e.status),a=i?i!==`success`:!!e.error,o=e.output??e.result??e.content??e.message??(typeof e.error==`string`?e.error:void 0),s=f(o),c=t.toolCalls.get(r);return{events:[n(t.runId,`tool-result`,{sessionId:t.sessionId,toolCallId:r,toolName:c?.toolName,input:c?.input,output:s,isError:a||void 0,error:a?f(e.error??o):void 0})]}},b=e=>{let n=(t(e.token_count)?e.token_count:void 0)??(t(e.tokenCount)?e.tokenCount:void 0)??(t(e.usage)?e.usage:void 0)??(t(e.usage_metadata)?e.usage_metadata:void 0)??(t(e.usageMetadata)?e.usageMetadata:void 0)??(t(e.stats)?e.stats:void 0);if(!n)return;let r=u(n.prompt_tokens)??u(n.promptTokens)??u(n.input_tokens)??u(n.inputTokens)??u(n.prompt_token_count),i=u(n.completion_tokens)??u(n.output_tokens)??u(n.outputTokens)??u(n.candidates_token_count)??u(n.completion_token_count);if(!(r===void 0&&i===void 0))return{inputTokens:r??0,outputTokens:i??0}},x=(e,n)=>{let r=l(e.status)??l(e.subtype)??`success`,i=r!==`success`||!!e.error||e.is_error===!0,a=e.result??e.output??e.text??e.content,o=u(e.duration_ms)??u(e.durationMs)??(t(e.stats)?u(e.stats.total_time_ms):void 0)??0,s=b(e),c=s?s.inputTokens+s.outputTokens:void 0,d={stats:{durationMs:o,apiDurationMs:o,turns:u(e.num_turns)??1,costUsd:u(e.total_cost_usd)??0,inputTokens:s?.inputTokens,outputTokens:s?.outputTokens,totalTokens:c}};return typeof a==`string`&&(d.output={text:a}),e.structured_output===void 0?n.schemaRequested&&a!==void 0&&(d.output={...d.output,value:a}):d.output={...d.output,value:e.structured_output},i?(d.status=`failed`,d.error={kind:`provider`,message:l(e.error)??(typeof a==`string`&&a.trim()?a:f(e.error??a??r))}):d.status=`completed`,{events:[],state:d}},S=(e,t)=>{let r=l(e.message)??(e.error===void 0?void 0:f(e.error))??(e.details===void 0?void 0:f(e.details))??`Gemini emitted an error event.`;return{events:[n(t.runId,`stderr`,{sessionId:t.sessionId,text:r})]}},C=(e,t,n={})=>{let r=e;switch(e.type){case`init`:return h(r,t);case`message`:return g(r,t,n);case`thought`:return _(r,t,n);case`tool_use`:return v(r,t,n);case`tool_result`:return y(r,t);case`result`:return x(r,t);case`error`:return S(r,t);default:return{events:[]}}},w=i(c.object({type:c.string()}).passthrough()),T={structuredOutput:!1,sessionResume:!0,imageInput:!1,mcp:!0,eventStreaming:!0};var E=class extends o{type=`gemini-cli`;creationOptions;runDefaults;runModels=new Map;runTextBuffers=new Map;constructor(t={}){super({type:`gemini-cli`,capabilities:T,defaults:{cwd:t.cwd,env:t.env,command:e(t.command??`gemini`),sessionId:t.sessionId,model:t.model,systemPrompt:t.systemPrompt},spawner:t.spawner,executionTarget:t.container??t.sandbox,logPath:t.logPath,onEvent:t.onEvent}),this.creationOptions=t,this.runDefaults={allowedTools:t.allowedTools?[...t.allowedTools]:void 0,disallowedTools:t.disallowedTools?[...t.disallowedTools]:void 0,permissionMode:t.permissionMode,extraArgs:t.extraArgs?[...t.extraArgs]:void 0}}buildArgs(e,t){let n=[`--output-format`,`stream-json`],r=a(e.input),i=e.allowedTools??this.runDefaults.allowedTools,o=e.disallowedTools??this.runDefaults.disallowedTools,s=e.permissionMode??this.runDefaults.permissionMode,c=e.extraArgs??this.runDefaults.extraArgs;if(this.runModels.set(t.runId,e.model),e.model&&n.push(`--model`,e.model),e.systemPrompt&&n.push(`--system-prompt`,e.systemPrompt),s===`full`&&n.push(`--approval-mode`,`yolo`),i&&i.length>0){let e=new Set((o??[]).map(e=>e.toLowerCase())),t=i.filter(t=>!e.has(t.toLowerCase()));for(let e of t)n.push(`--allowed-tools`,e)}return t.requestedSessionId&&n.push(`--resume`,t.requestedSessionId),c&&c.length>0&&n.push(...c),r.trim().startsWith(`-`)?n.push(`--prompt`,r):n.push(r),n}buildEnv(e,t){return this.buildDefaultEnv(this.creationOptions.propagateEnv)}mapRawEvent(e,t){this.appendRawLog(e);let n=w(e);if(!n)return this.onParseError(JSON.stringify(e).slice(0,200),Error(`schema validation failed`)),{events:[]};let r=m(n)??t.sessionId,i=C(n,{...t,sessionId:r},{model:this.runModels.get(t.runId)});r&&i.sessionId===void 0&&(i.sessionId=r);let a;for(let e of i.events){if(e.type!==`message`||e.role!==`assistant`||!e.text)continue;let n=`${this.runTextBuffers.get(t.runId)??``}${e.text}`;this.runTextBuffers.set(t.runId,n),a=n}return n.type===`result`&&i.state?.output?.text!==void 0?this.runTextBuffers.set(t.runId,i.state.output.text):a!==void 0&&(i.state={...i.state,output:{...i.state?.output,text:a}}),i}async onRunFinished(e){await super.onRunFinished(e),this.runModels.delete(e.runId),this.runTextBuffers.delete(e.runId)}};const D=e=>new E(s(e).options);export{D as createGeminiCliAgent};
@@ -0,0 +1,8 @@
1
+ import{n as e,t}from"./types-CwvWHEpy.mjs";import{z as n}from"zod/v4";const r=()=>crypto.randomUUID(),i=()=>`evt_${crypto.randomUUID()}`,a=e=>({type:`text`,text:e}),o=e=>e.flatMap(e=>e.type===`text`?[e.text]:[]).join(`
2
+ `),s=e=>e.flatMap(e=>e.type===`text`?[e.text]:[]).join(`
3
+
4
+ `),c=e=>t=>{let n=e.safeParse(t);return n.success?n.data:null},l=(e,t,n)=>({id:n.id??i(),runId:e,timestamp:new Date,type:t,...n}),u=e=>e instanceof n.ZodType,d=e=>{if(!(`schema`in e))return{kind:`none`};let{schema:t}=e;return u(t)?{kind:`zod`,jsonSchema:n.toJSONSchema(t),zodSchema:t}:{kind:`json-schema`,jsonSchema:t}},f=(t,n,r,i)=>{let a=typeof i.input==`string`?[{type:`text`,text:i.input}]:i.input;if(a.length===0||a.every(e=>e.type===`text`&&e.text.trim()===``))throw new e(`Run input cannot be empty.`);if(!n.imageInput&&a.some(e=>e.type===`image`))throw new e(`${t} does not support image input.`);let o=d(i);if(!n.structuredOutput&&o.kind!==`none`)throw new e(`${t} does not support structured output.`);if(i.timeoutMs!==void 0&&(!Number.isFinite(i.timeoutMs)||i.timeoutMs<=0))throw new e(`timeoutMs must be a positive finite number.`);return{input:a,schema:o,cwd:i.cwd??r?.cwd,model:i.model??r?.model,systemPrompt:i.systemPrompt??r?.systemPrompt,timeoutMs:i.timeoutMs,signal:i.signal}},p=(e,t)=>{if(!e.stats)return;let n=Math.max(0,t.getTime()-e.startedAt.getTime());e.stats={...e.stats,durationMs:e.stats.durationMs??n,apiDurationMs:e.stats.apiDurationMs??n}},m=(e,t)=>{let n=e.normalizedRequest.schema;if(n.kind!==`none`){if(n.kind===`zod`){let r=n.zodSchema.safeParse(t);if(!r.success){e.status=`failed`,e.error={kind:`parse`,message:r.error.message};return}e.output.value=r.data;return}e.output.value=t}},h=(e,t)=>{if(e.events.push(t),t.type!==`message`||t.role!==`assistant`)return;let n=t.text??o(t.content);n&&e.assistantTexts.push(n)},g=(e,t,n={})=>{t.sessionId&&(e.sessionId=t.sessionId,n.onSessionId?.(t.sessionId));for(let n of t.toolCalls??[])e.toolCalls.set(n.toolCallId,{toolName:n.toolName,input:n.input});if(!t.state)return;let r=t.state;r.output&&(`text`in r.output&&(e.output.text=r.output.text),`value`in r.output&&m(e,r.output.value)),`stats`in r&&(e.stats=r.stats),`status`in r&&(e.status=r.status),`error`in r&&(e.error=r.error)},_=e=>e.events.some(e=>e.type===`message`||e.type===`reasoning`||e.type===`tool-call`||e.type===`tool-result`),v=e=>{let t=e.normalizedRequest.schema.kind!==`none`&&e.output.value===void 0;return e.stopReason===`user`||e.stopReason===`abort`||e.stopReason===`timeout`?`cancelled`:e.error?e.error.kind===`abort`?`cancelled`:`failed`:e.status?e.status===`completed`&&t?`failed`:e.status:e.processResult&&e.processResult.exitCode!==null&&e.processResult.exitCode!==0||!_(e)&&e.stderrLines.length>0||t?`failed`:`completed`},y=(e,t)=>{let n=e.processResult,r=e.stderrLines.join(`
5
+ `);if(e.stopReason===`user`)return{kind:`abort`,message:`Run stopped by user.`};if(e.stopReason===`abort`)return{kind:`abort`,message:`Run aborted.`};if(e.stopReason===`timeout`)return{kind:`abort`,message:`Run timed out after ${e.normalizedRequest.timeoutMs}ms.`};if(e.error)return e.error;if(n&&n.exitCode!==null&&n.exitCode!==0)return{kind:`process`,message:r||`Process exited with code ${n.exitCode}.`};if(t===`failed`&&e.stderrLines.length>0)return{kind:`process`,message:r};if(t===`failed`&&e.normalizedRequest.schema.kind!==`none`&&e.output.value===void 0)return{kind:`parse`,message:`Structured output was requested but no structured output value was produced.`}},b=(e,t,n,r,i)=>{let a=t.stderrLines.join(`
6
+ `),o={type:e,runId:t.runId,sessionId:t.sessionId,text:t.output.text??t.assistantTexts.join(`
7
+
8
+ `),events:[...t.events],stats:t.stats,timing:{startedAt:t.startedAt,endedAt:n,durationMs:n.getTime()-t.startedAt.getTime()},process:t.processResult?{exitCode:t.processResult.exitCode,signal:t.processResult.signal,stderr:a}:void 0};switch(r){case`completed`:return t.normalizedRequest.schema.kind===`none`?{...o,status:r,error:void 0,cancelReason:void 0}:{...o,status:r,output:t.output.value,error:void 0,cancelReason:void 0};case`failed`:return{...o,status:r,output:void 0,error:i??{kind:`process`,message:`Unknown error.`},cancelReason:void 0};case`cancelled`:return{...o,status:r,output:void 0,error:i??{kind:`abort`,message:`Run cancelled.`},cancelReason:t.stopReason??`user`};default:throw Error(`Unsupported run status.`)}},x=()=>{let e=new Date;return{runCount:0,messagesReceived:0,toolCalls:0,errors:0,startedAt:e,lastActivityAt:e}};var S=class{type;capabilities;currentRun;eventHandlers=[];_sessionId;_metrics;constructor(e){this.type=e.type,this.capabilities=e.capabilities,this._sessionId=e.sessionId,this._metrics=x(),e.onEvent&&this.onEvent(e.onEvent)}onValidateRun(e,t){}async onDispose(){}onHandlerError(e){}get sessionId(){return this._sessionId}get metrics(){return this._metrics}get isRunning(){return this.currentRun?.running??!1}onEvent(e){return this.eventHandlers.push(e),()=>{let t=this.eventHandlers.indexOf(e);t>=0&&this.eventHandlers.splice(t,1)}}async run(t){if(this.currentRun?.running)throw new e(`This agent is already running. Wait for it to finish first.`);let n=f(this.type,this.capabilities,this.runRequestDefaults,t);this.onValidateRun(t,n);let i={runId:r(),startedAt:new Date,requestedSessionId:this._sessionId,sessionId:this._sessionId,normalizedRequest:n,events:[],stderrLines:[],assistantTexts:[],toolCalls:new Map,output:{}},a={context:i,running:!0,promise:new Promise(()=>{})};this._metrics.runCount++;let o=Promise.resolve().then(()=>this.executeRunCore(i,t)).finally(()=>{a.running=!1});return a.promise=o,this.currentRun=a,o}async runOrThrow(e){let n=await this.run(e);if(n.status!==`completed`)throw new t(n);return n}async stop(){let e=this.currentRun?.context;if(!(!e||!this.currentRun?.running)){this.requestStop(e,`user`);try{return await this.currentRun.promise}catch{return}}}reset(){if(this.currentRun?.running)throw new e(`Cannot reset agent state while a run is active. Call stop() and wait() first.`);this.currentRun=void 0,this._sessionId=void 0,this._metrics=x()}wait(){if(!this.currentRun)throw new e(`There is no run to wait for.`);return this.currentRun.promise}async dispose(){if(this.currentRun?.running){this.requestStop(this.currentRun.context,`user`);try{await this.currentRun.promise}catch{}}await this.onDispose()}async[Symbol.asyncDispose](){await this.dispose()}applyBatch(e,t){g(e,t,{onSessionId:e=>{this.setSessionId(e)}});for(let n of t.events)this.emit(e,n)}setupRunLifecycle(e){let t=!1,n=()=>{t||this.requestStop(e,`abort`)},r=e.normalizedRequest.timeoutMs===void 0?void 0:setTimeout(()=>{t||this.requestStop(e,`timeout`)},e.normalizedRequest.timeoutMs);r?.unref?.(),e.normalizedRequest.signal?.addEventListener(`abort`,n,{once:!0});let i=e.normalizedRequest.signal?.aborted===!0;return i&&this.requestStop(e,`abort`),{abortedBeforeStart:i,cleanup:()=>{t=!0,r&&clearTimeout(r),e.normalizedRequest.signal?.removeEventListener(`abort`,n)}}}emitSessionStart(e){e.sessionStarted||(e.sessionStarted=!0,this.emit(e,l(e.runId,`session-start`,{requestedSessionId:e.requestedSessionId,sessionId:e.sessionId,resumed:e.requestedSessionId!==void 0})))}emit(e,t){h(e,t),this.updateMetrics(t);for(let e of this.eventHandlers)try{e(t)}catch(e){this.onHandlerError(e)}}requestStop(e,t){e.stopReason||(e.stopReason=t,this.onStopRequested(e))}buildResult(e,t){p(e,t);let n=v(e),r=y(e,n);return e.sessionStarted&&this.emit(e,l(e.runId,`session-end`,{sessionId:e.sessionId,status:n,error:r?.message})),b(this.type,e,t,n,r)}setSessionId(e){this._sessionId=e}updateMetrics(e){switch(this._metrics.lastActivityAt=e.timestamp,e.type){case`message`:e.role===`assistant`&&this._metrics.messagesReceived++;break;case`tool-call`:this._metrics.toolCalls++;break;case`session-end`:e.status===`failed`&&this._metrics.errors++;break;default:break}}};const C=new Set([`ENOENT`,`ERR_MODULE_NOT_FOUND`]),w=e=>`code`in e,T=(e,t)=>{let n=t??(e instanceof Error?e.message:String(e));if(e instanceof Error){if(e.name===`AbortError`)return{kind:`abort`,message:n};if(w(e)&&C.has(String(e.code)))return{kind:`spawn`,message:n};if(e instanceof SyntaxError)return{kind:`parse`,message:n}}return{kind:`provider`,message:n}};export{l as a,a as c,_ as i,S as n,c as o,g as r,s,T as t};
@@ -0,0 +1,2 @@
1
+ import { A as ContainerBase, B as ExecResult, C as E2BProviderConfig, D as DockerContainerBase, E as DockerContainer, F as ContainerLifecycle, G as WorkdirDiffStats, H as VolumeMount, I as ContainerObservability, J as WorkdirSnapshotOptions, K as WorkdirFileChange, L as ContainerStatus, M as ContainerExecution, N as ContainerFileSystem, O as DockerContainerConfig, P as ContainerIdentity, R as ContainerType, S as E2BCreateConfig, T as DockerBuildConfig, U as WorkdirChangeKind, V as PortMapping, W as WorkdirDiff, _ as E2BConnectConfig, a as ContainerDiffError, b as E2BContainerBase, c as ContainerExecError, d as PodmanBuildBase, f as PodmanBuildConfig, g as PodmanProviderConfig, h as PodmanContainerConfig, i as ContainerCreateError, j as ContainerConfigBase, k as DockerProviderConfig, l as ContainerNotRunningError, m as PodmanContainerBase, n as ContainerConfig, o as ContainerDisposedError, p as PodmanContainer, q as WorkdirSnapshot, r as createContainer, s as ContainerError, t as Container, u as ContainerStartError, v as E2BConnectionConfig, w as DockerBuildBase, x as E2BContainerConfig, y as E2BContainer, z as ExecOptions } from "../index-R77YR8ak.mjs";
2
+ export { Container, ContainerBase, ContainerConfig, ContainerConfigBase, ContainerCreateError, ContainerDiffError, ContainerDisposedError, ContainerError, ContainerExecError, ContainerExecution, ContainerFileSystem, ContainerIdentity, ContainerLifecycle, ContainerNotRunningError, ContainerObservability, ContainerStartError, ContainerStatus, ContainerType, DockerBuildBase, DockerBuildConfig, DockerContainer, DockerContainerBase, DockerContainerConfig, DockerProviderConfig, E2BConnectConfig, E2BConnectionConfig, E2BContainer, E2BContainerBase, E2BContainerConfig, E2BCreateConfig, E2BProviderConfig, ExecOptions, ExecResult, PodmanBuildBase, PodmanBuildConfig, PodmanContainer, PodmanContainerBase, PodmanContainerConfig, PodmanProviderConfig, PortMapping, VolumeMount, WorkdirChangeKind, WorkdirDiff, WorkdirDiffStats, WorkdirFileChange, WorkdirSnapshot, WorkdirSnapshotOptions, createContainer };
@@ -0,0 +1 @@
1
+ import{a as e,i as t,n,o as r,r as i,s as a,t as o}from"../errors-XV0frS3r.mjs";async function s(e){switch(e.type){case`docker`:{let{createDockerContainer:t}=await import(`../container-DWTITDhL.mjs`);return t(e)}case`e2b`:try{let{createE2BContainer:t}=await import(`../container-BY7JDOGo.mjs`);return await t(e)}catch(e){throw e instanceof Error&&e.message.includes(`e2b`)&&(e.code===`ERR_MODULE_NOT_FOUND`||e.code===`MODULE_NOT_FOUND`)?new o(`Container type "e2b" requires the optional peer dependency "e2b". Install it to use this provider.`):e}case`podman`:{let{createPodmanContainer:t}=await import(`../container-vkn5-3Xl.mjs`);return t(e)}default:throw new o(`Unsupported container type.`)}}export{o as ContainerCreateError,n as ContainerDiffError,i as ContainerDisposedError,t as ContainerError,e as ContainerExecError,r as ContainerNotRunningError,a as ContainerStartError,s as createContainer};
@@ -0,0 +1 @@
1
+ import{t as e}from"./util-CGg8cK92.mjs";import{n as t,o as n,r,s as i,t as a}from"./errors-XV0frS3r.mjs";import{n as o,r as s}from"./diff-BCfLDXNN.mjs";import{basename as c,dirname as l,join as u,posix as d}from"node:path";import{mkdir as f,readFile as p,readdir as m,stat as h,writeFile as g}from"node:fs/promises";import{CommandExitError as _,FileType as v,Sandbox as y}from"e2b";const b=(e,t)=>[e,...t].map(s).join(` `),x=e=>e.user,S=(e,t)=>{let n={...e.env,...t};return Object.keys(n).length>0?n:void 0},C=(e,t)=>t??e.workdir,w=new TextEncoder,T=e=>e instanceof Error?e:Error(String(e)),E=e=>typeof e==`string`?e:`SIGKILL`,D=(e,t)=>{let n=e?.stdio?.[t];return n===`ignore`||n===`inherit`||n===`pipe`?n:n===void 0?`pipe`:`ignore`},O=()=>{let e=[],t=[],n=!1,r,i=()=>{for(;t.length>0&&e.length>0;)t.shift().resolve({done:!1,value:e.shift()});if(r){for(;t.length>0;)t.shift().reject(r);return}if(n)for(;t.length>0;)t.shift().resolve({done:!0,value:void 0})};return{iterable:{async*[Symbol.asyncIterator](){for(;;){if(e.length>0){yield e.shift();continue}if(r)throw T(r);if(n)return;let i=await new Promise((e,n)=>{t.push({resolve:e,reject:n})});if(i.done)return;yield i.value}}},push(t){t.length===0||n||r||(e.push(w.encode(t)),i())},end(){n||r||(n=!0,i())},fail(e){n||r||(r=e,i())}}},k=(e,t)=>({spawn:(n,r,i={})=>{let a=D(i,0),o=D(i,1),s=D(i,2),c=o===`pipe`?O():void 0,l=s===`pipe`?O():void 0,u=null,d={background:!0,stdin:a===`pipe`,cwd:C(t,i.cwd),envs:S(t,i.env),user:x(t),requestTimeoutMs:t.requestTimeoutMs,onStdout:e=>{if(o===`inherit`){process.stdout.write(e);return}c?.push(e)},onStderr:e=>{if(s===`inherit`){process.stderr.write(e);return}l?.push(e)}},f=e.commands.run(b(n,r),d);return f.catch(e=>{c?.fail(e),l?.fail(e)}),{stdout:c?.iterable??null,stderr:l?.iterable??null,stdin:a===`pipe`?{write:n=>{f.then(r=>{e.commands.sendStdin(r.pid,n,{requestTimeoutMs:t.requestTimeoutMs})}).catch(()=>{})},end:()=>{f.then(n=>{e.commands.closeStdin(n.pid,{requestTimeoutMs:t.requestTimeoutMs})}).catch(()=>{})}}:null,kill:e=>{u=E(e),f.then(e=>e.kill()).catch(()=>{})},wait:async()=>{try{let e=await(await f).wait();return c?.end(),l?.end(),u?{exitCode:null,signal:u}:{exitCode:e.exitCode,signal:null}}catch(e){if(c?.end(),l?.end(),e instanceof _)return u?{exitCode:null,signal:u}:{exitCode:e.exitCode,signal:null};throw e}}}}}),A=e=>({apiKey:e.apiKey,accessToken:e.accessToken,domain:e.domain,requestTimeoutMs:e.requestTimeoutMs,headers:e.headers}),j=e=>`sandboxId`in e&&typeof e.sandboxId==`string`,M=e=>{let t=A(e);return j(e)?t:{...t,envs:e.env,timeoutMs:e.timeoutMs,metadata:e.metadata,secure:e.secure,allowInternetAccess:e.allowInternetAccess,network:e.network,lifecycle:e.lifecycle}},N=async(e,t)=>{await e.files.makeDir(t.workdir,{user:x(t)})},P=e=>e instanceof Error&&e.name===`AbortError`,F=e=>Uint8Array.from(e).buffer,I=e=>{let t=e.endsWith(`/`)&&e!==`/`?e.slice(0,-1):e;return d.basename(t)},L=async e=>{try{return await h(e)}catch(e){if(e instanceof Error&&`code`in e&&e.code===`ENOENT`)return;throw e}},R=async(e,t,n)=>{if(await e.files.exists(t,{user:n}))return e.files.getInfo(t,{user:n})},z=async(e,t,n,r)=>(await R(e,n,r))?.type===v.DIR?d.join(n,c(t)):n,B=async(e,t)=>(await L(t))?.isDirectory()?u(t,I(e)):t,V=async(e,t,n,r)=>{let i=await h(t);if(i.isDirectory()){await e.files.makeDir(n,{user:r});let i=await m(t);await Promise.all(i.map(i=>V(e,u(t,i),d.join(n,i),r)));return}if(!i.isFile())throw Error(`Unsupported local filesystem entry at ${t}.`);let a=await p(t);await e.files.write(n,F(a),{user:r})},H=async(e,t,n,r)=>{if((await e.files.getInfo(t,{user:r})).type===v.DIR){await f(n,{recursive:!0});let i=await e.files.list(t,{user:r});await Promise.all(i.map(t=>H(e,t.path,u(n,t.name),r)));return}let i=await e.files.read(t,{format:`bytes`,user:r});await f(l(n),{recursive:!0}),await g(n,i)},U=async e=>{if(j(e))return y.connect(e.sandboxId,A(e));let t=M(e);return e.template?y.create(e.template,t):y.create(t)},W=async(e,t)=>e.connect(A(t)),G=async(e,t)=>{let n=t.signal;if(n?.aborted){let e=n.reason;throw e instanceof Error?e:new DOMException(`The operation was aborted.`,`AbortError`)}let r=!1,i=()=>{r=!0,e.kill()};n?.addEventListener(`abort`,i,{once:!0});try{let t=await e.wait();if(r)throw new DOMException(`The operation was aborted.`,`AbortError`);return{exitCode:t.exitCode,stdout:t.stdout,stderr:t.stderr}}catch(e){if(r||P(e))throw new DOMException(`The operation was aborted.`,`AbortError`);if(e instanceof _)return{exitCode:e.exitCode,stdout:e.stdout,stderr:e.stderr};throw e}finally{n?.removeEventListener(`abort`,i)}},K=async s=>{let c;try{c=await U(s),await N(c,s)}catch(t){throw new a(`E2B create failed: ${e(t)}`)}let l=s.name??c.sandboxId,d=`running`,p=k(c,s),m={},h=()=>{if(d===`disposed`)throw new r},g=()=>{if(h(),d!==`running`)throw new n},_=o({owner:m,workdir:s.workdir,materialize:async(e,n)=>{g();let r=x(s),i=await R(c,e,r);if(!i)throw new t(`Target path does not exist: ${e}`);if(i.type!==v.DIR)throw new t(`Target path is not a directory: ${e}`);await f(n,{recursive:!0});for(let t of await c.files.list(e,{user:r}))await H(c,t.path,u(n,t.name),r)}}),y={get type(){return`e2b`},get id(){return c.sandboxId},get name(){return l},get config(){return s},get status(){return d},get workdir(){return s.workdir},get spawner(){return p},async start(){if(h(),d!==`running`)try{c=await W(c,s),await N(c,s),p=k(c,s),d=`running`}catch(t){throw new i(`E2B start failed: ${e(t)}`)}},async stop(){h(),d===`running`&&(await c.pause({requestTimeoutMs:s.requestTimeoutMs}),d=`stopped`)},async dispose(){if(d!==`disposed`){try{await c.kill({requestTimeoutMs:s.requestTimeoutMs})}catch{}await _.disposeSnapshots().catch(()=>{}),d=`disposed`}},async exec(e,t,n={}){g();let r={background:!0,cwd:C(s,n.cwd),envs:S(s,n.env),user:x(s),timeoutMs:n.timeoutMs,requestTimeoutMs:s.requestTimeoutMs};return G(await c.commands.run(b(e,t),r),n)},async copyTo(e,t){g();let n=await z(c,e,t,x(s));await V(c,e,n,x(s))},async copyFrom(e,t){g();let n=await B(e,t);await H(c,e,n,x(s))},async writeFile(e,t){g(),await c.files.write(e,typeof t==`string`?t:F(t),{user:x(s)})},async readFile(e){return g(),c.files.read(e,{format:`text`,user:x(s)})},async fileExists(e){return g(),c.files.exists(e,{user:x(s)})},async mkdir(e){g(),await c.files.makeDir(e,{user:x(s)})},async execShell(e,t={}){return y.exec(`sh`,[`-c`,e],t)},async logs(){return``},async syncStatus(){return d},async snapshotWorkdir(e={}){return _.snapshotWorkdir(e)},async diffWorkdir(e){return _.diffWorkdir(e)},async releaseWorkdirSnapshot(e){return _.releaseWorkdirSnapshot(e)},getHost(e){return g(),c.getHost(e)},[Symbol.asyncDispose](){return y.dispose()}};return y};export{K as createE2BContainer};
@@ -0,0 +1 @@
1
+ import{n as e,t}from"./oci-C_S_FKHj.mjs";const n=async n=>{let r=n.binary??`docker`,i=await e(r,n);return t(`docker`,{binary:r,containerName:n.name,workdir:n.workdir,user:n.user,network:n.network,platform:n.platform,env:n.env,ports:n.ports,mounts:n.mounts,extraArgs:n.extraArgs,image:i,builtImage:n.build!==void 0&&!n.build.tag},n)};export{n as createDockerContainer};
@@ -0,0 +1 @@
1
+ import{n as e,t}from"./oci-C_S_FKHj.mjs";const n=async n=>{let r=n.binary??`podman`,i=await e(r,n);return t(`podman`,{binary:r,containerName:n.name,workdir:n.workdir,user:n.user,network:n.network,platform:n.platform,env:n.env,ports:n.ports,mounts:n.mounts,extraArgs:n.extraArgs,image:i,builtImage:n.build!==void 0&&!n.build.tag},n)};export{n as createPodmanContainer};
@@ -0,0 +1 @@
1
+ import{t as e}from"./util-CGg8cK92.mjs";import{n as t,o as n,r}from"./errors-XV0frS3r.mjs";import{execFile as i}from"node:child_process";import{dirname as a,isAbsolute as o,join as s,posix as c,relative as l,sep as u}from"node:path";import{promisify as d}from"node:util";import{createReadStream as f}from"node:fs";import{copyFile as p,lstat as m,mkdir as h,mkdtemp as g,readdir as _,readlink as v,rm as y,stat as b,symlink as x}from"node:fs/promises";import{tmpdir as S}from"node:os";import{createHash as C}from"node:crypto";import{pipeline as w}from"node:stream/promises";const T=e=>e instanceof Error&&`code`in e&&(`stdout`in e||`stderr`in e),E=e=>`'${e.replace(/'/g,`'\\''`)}'`,D=d(i),O=e=>e!==`..`&&!e.startsWith(`..${u}`)&&!o(e),k=(e,t)=>{let n=l(e,t);if(O(n))return n.split(u).join(c.sep)},A=(e,n,r)=>{let i=k(n,e);if(i!==void 0)return i;let a=k(r,e);if(a!==void 0)return a;throw new t(`Git diff produced a path outside the materialized trees: ${e}`)},j=e=>e.sort((e,t)=>e.path===t.path?(e.previousPath??``).localeCompare(t.previousPath??``):e.path.localeCompare(t.path)),M=async e=>{let t=await _(e,{withFileTypes:!0});for(let n of t){let t=s(e,n.name);if(n.name===`.git`){await y(t,{recursive:!0,force:!0});continue}n.isDirectory()&&await M(t)}},N=()=>g(s(S(),`cw-workdir-diff-`)),P=async e=>{e&&await y(e,{recursive:!0,force:!0}).catch(()=>{})},F=(e,t)=>{let n={cwd:e.cwd,createdAt:new Date};return t.set(n,e),n},I=(e,n,r)=>{if(typeof n!=`object`||!n)throw new t(`Invalid workdir snapshot.`);let i=r.get(n);if(!i)throw new t(`Invalid workdir snapshot.`);if(i.owner!==e)throw new t(`Workdir snapshot was created by a different container instance.`);return i},L=(e,n)=>{if(!n.has(e))throw new t(`Workdir snapshot has been released.`)},R=e=>C(`sha256`).update(e).digest(`hex`),z=e=>Buffer.isBuffer(e)?e:Buffer.from(e,`utf8`),B=async e=>{let t=C(`sha256`);return await w(f(e),t),t.digest(`hex`)},V=async(e,n,r)=>{let i=`${e}:${n}`;if(r.has(i))return r.get(i);let a=s(e,...n.split(c.sep));try{let e=await m(a),n,o;if(e.isSymbolicLink()){let e=Buffer.from(await v(a));n=R(e),o=e.byteLength}else if(e.isFile())n=await B(a),o=e.size;else throw new t(`Unsupported filesystem entry in diff metadata: ${a}`);let s={hash:n,size:o};return r.set(i,s),s}catch(e){if(e instanceof Error&&`code`in e&&e.code===`ENOENT`){r.set(i,void 0);return}throw e}},H=(e,n,r)=>{if(e.byteLength===0)return[];let i=e.toString(`utf8`).split(`\0`);i[i.length-1]===``&&i.pop();let a=[];for(let e=0;e<i.length;){let o=i[e++];if(!o)continue;if(o.startsWith(`R`)){let o=i[e++],s=i[e++];if(!o||!s)throw new t(`Failed to parse git rename entry.`);a.push({kind:`renamed`,previousPath:A(o,n,r),path:A(s,n,r)});continue}let s=i[e++];if(!s)throw new t(`Failed to parse git diff entry.`);switch(o){case`A`:a.push({kind:`added`,path:A(s,n,r)});break;case`D`:a.push({kind:`deleted`,path:A(s,n,r)});break;case`M`:a.push({kind:`modified`,path:A(s,n,r)});break;case`T`:a.push({kind:`modified`,path:A(s,n,r)});break;default:throw new t(`Unsupported git diff change kind: ${o}`)}}return a},U=async(n,r)=>{try{return H(z((await D(`git`,[`diff`,`--no-index`,`-z`,`--name-status`,`-M`,`--find-renames=100%`,n,r],{cwd:S(),encoding:`buffer`,maxBuffer:50*1024*1024})).stdout),n,r)}catch(i){if(!T(i))throw new t(`Failed to run git diff: ${e(i)}`);let a=i.code??1,o=Buffer.isBuffer(i.stdout)?i.stdout:Buffer.from(String(i.stdout??``),`utf8`),s=Buffer.isBuffer(i.stderr)?i.stderr:Buffer.from(String(i.stderr??``),`utf8`);if(a===0||a===1)return H(o,n,r);throw new t(`Failed to run git diff: ${s.toString(`utf8`).trim()||o.toString(`utf8`).trim()||`exit code ${a}`}`)}},W=async(e,t,n)=>{let r=new Map;return j(await Promise.all(e.map(async e=>{let i;i=e.kind===`added`?void 0:e.kind===`renamed`?e.previousPath:e.path;let a=e.kind===`deleted`?void 0:e.path,[o,s]=await Promise.all([i===void 0?void 0:V(t,i,r),a===void 0?void 0:V(n,a,r)]);return{path:e.path,previousPath:e.previousPath,kind:e.kind,beforeHash:o?.hash,afterHash:s?.hash,beforeSize:o?.size,afterSize:s?.size}})))},G=e=>{let t=new Set;for(let n of e)t.add(n.path),n.kind===`renamed`&&n.previousPath&&t.add(n.previousPath);return[...t].sort((e,t)=>e.localeCompare(t))},K=(i,a)=>{throw a instanceof t||a instanceof r||a instanceof n?a:new t(`${i}: ${e(a)}`)},q=async(e,n)=>{if(!(await b(e)).isDirectory())throw new t(`Target path is not a directory: ${e}`);await h(n,{recursive:!0});let r=await _(e,{withFileTypes:!0});await Promise.all(r.filter(e=>e.name!==`.git`).map(async r=>{let i=s(e,r.name),o=s(n,r.name);if(r.isDirectory()){await q(i,o);return}if(r.isSymbolicLink()){await h(a(o),{recursive:!0}),await x(await v(i),o);return}if(r.isFile()){await h(a(o),{recursive:!0}),await p(i,o);return}throw new t(`Unsupported filesystem entry in workdir diff: ${i}`)}))},J=e=>{let t=new Set,n=new WeakMap,r=async(r={})=>{let i=r.cwd??e.workdir,a;try{a=await N(),await e.materialize(i,a),await M(a);let r={owner:e.owner,tempDir:a,cwd:i,inFlightDiffs:0,released:!1};return t.add(r),a=void 0,F(r,n)}catch(e){return await P(a),K(`Failed to materialize workdir snapshot`,e)}},i=async r=>{let i=Date.now(),a=I(e.owner,r,n);L(a,t),a.inFlightDiffs++;let o;try{o=await N(),await e.materialize(a.cwd,o),await M(o);let t=await W(await U(a.tempDir,o),a.tempDir,o),n=G(t);return{cwd:a.cwd,changedFiles:n,fileChanges:t,stats:{durationMs:Date.now()-i,filesCompared:n.length}}}catch(e){return K(`Failed to diff workdir snapshot`,e)}finally{a.inFlightDiffs--,a.inFlightDiffs===0&&(a.resolveIdle?.(),a.resolveIdle=void 0),await P(o)}},a=e=>{let n=e;return n.releasePromise?n.releasePromise:(n.released=!0,t.delete(n),n.releasePromise=(async()=>{n.inFlightDiffs>0&&await new Promise(e=>{n.resolveIdle=e}),await P(n.tempDir)})(),n.releasePromise)};return{snapshotWorkdir:r,diffWorkdir:i,releaseWorkdirSnapshot:async t=>{await a(I(e.owner,t,n))},disposeSnapshots:async()=>{await Promise.all(Array.from(t).map(a))}}};export{T as i,J as n,E as r,q as t};
@@ -0,0 +1 @@
1
+ import{delimiter as e}from"node:path";const t=e=>Object.keys(e).find(e=>e.toLowerCase()===`path`)??`PATH`,n=(n={})=>{let r=n.propagateEnv===!1?{}:Object.fromEntries(Object.entries(process.env).filter(e=>e[1]!==void 0)),i=n.extraPaths??[];if(i.length>0){let n=t(r),a=r[n]??``;r[n]=[...i,a].filter(Boolean).join(e)}return r};export{n as t};
@@ -0,0 +1 @@
1
+ var e=class extends Error{constructor(e){super(e),this.name=`ContainerError`}},t=class extends e{constructor(e){super(e),this.name=`ContainerCreateError`}},n=class extends e{constructor(e){super(e),this.name=`ContainerStartError`}},r=class extends e{constructor(e){super(e),this.name=`ContainerExecError`}},i=class extends e{constructor(e=`Container is not running.`){super(e),this.name=`ContainerNotRunningError`}},a=class extends e{constructor(e=`Container has been disposed.`){super(e),this.name=`ContainerDisposedError`}},o=class extends e{constructor(e){super(e),this.name=`ContainerDiffError`}};export{r as a,e as i,o as n,i as o,a as r,n as s,t};