@howells/envelope 0.1.2 → 0.2.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.
package/README.md CHANGED
@@ -1,16 +1,68 @@
1
1
  # envelope
2
2
 
3
- Thin wrapper around the `claude` (Claude Code) CLI for **strict** Zod-validated input/output.
3
+ Thin wrapper around the `claude` (Claude Code) and `codex` (Codex CLI) for **strict** Zod-validated input/output.
4
4
 
5
5
  This is designed for local Node apps where you want "model calls" to look like a normal API:
6
6
  - validate inputs with Zod
7
- - request structured JSON output via `--json-schema`
7
+ - request structured JSON output via `--json-schema` / `--output-schema`
8
8
  - validate outputs with Zod again (defense in depth)
9
9
 
10
+ ## Install
11
+
12
+ ```bash
13
+ npm install @howells/envelope
14
+ ```
15
+
10
16
  ## Requirements
11
17
 
12
18
  - Node 20+
13
- - `claude` CLI installed and authenticated (Claude Code)
19
+ - `claude` CLI installed and authenticated (Claude Code), or
20
+ - `codex` CLI installed and authenticated (Codex)
21
+
22
+ ## Claude Code Options
23
+
24
+ ### `createClaudeCodeClient()`
25
+
26
+ | Option | Type | Default | Description |
27
+ |--------|------|---------|-------------|
28
+ | `model` | `string` | `"opus"` | Model name passed to `--model` |
29
+ | `maxBudgetUsd` | `number` | `5` | Spend cap per call via `--max-budget-usd` |
30
+ | `timeoutMs` | `number` | `120_000` | Kill the process after this many ms |
31
+ | `options.claudePath` | `string` | `"claude"` | Path to the `claude` binary |
32
+ | `options.cwd` | `string` | `process.cwd()` | Working directory for the subprocess |
33
+ | `options.env` | `NodeJS.ProcessEnv` | `process.env` | Environment variables for the subprocess |
34
+ | `options.permissionMode` | `string` | `"dontAsk"` | One of `"default"`, `"plan"`, `"dontAsk"`, `"acceptEdits"`, `"bypassPermissions"`, `"delegate"` |
35
+ | `options.tools` | `string` | `""` | Tools flag; `""` disables all, `"default"` enables built-ins |
36
+ | `options.systemPrompt` | `string` | — | Full system prompt via `--system-prompt` |
37
+ | `options.appendSystemPrompt` | `string` | — | Appended system prompt via `--append-system-prompt` |
38
+ | `options.allowedTools` | `string[]` | `[]` | Repeated `--allowedTools` per entry |
39
+ | `options.disallowedTools` | `string[]` | `[]` | Repeated `--disallowedTools` per entry |
40
+ | `options.fallbackModel` | `string` | — | Fallback model via `--fallback-model` |
41
+ | `options.betas` | `string[]` | `[]` | Repeated `--betas` per entry |
42
+ | `options.agent` | `string` | — | Agent name via `--agent` |
43
+ | `options.agents` | `string` | — | Agents directory via `--agents` |
44
+ | `options.retries` | `number` | `1` | Retries after timeout kill (total attempts = 1 + retries) |
45
+ | `options.retryDelayMs` | `number` | `800` | Base delay between retries (linear backoff) |
46
+
47
+ Note: `total_cost_usd` is reported by the Claude Code CLI. If you're using a subscription plan, this may be an estimate and not necessarily an incremental billed amount.
48
+
49
+ ## Codex Options
50
+
51
+ ### `createCodexClient()`
52
+
53
+ | Option | Type | Default | Description |
54
+ |--------|------|---------|-------------|
55
+ | `model` | `string` | `"gpt-5.3-codex"` | Model name passed to `--model` |
56
+ | `timeoutMs` | `number` | `180_000` | Kill the process after this many ms |
57
+ | `options.codexPath` | `string` | `"codex"` | Path to the `codex` binary |
58
+ | `options.cwd` | `string` | `process.cwd()` | Working directory for the subprocess |
59
+ | `options.env` | `NodeJS.ProcessEnv` | `process.env` | Environment variables for the subprocess |
60
+ | `options.skipGitRepoCheck` | `boolean` | `true` | Skip git repo validation via `--skip-git-repo-check` |
61
+ | `options.sandbox` | `string` | `"danger-full-access"` | One of `"read-only"`, `"workspace-write"`, `"danger-full-access"` |
62
+ | `options.profile` | `string` | — | Profile name via `--profile` |
63
+ | `options.config` | `string[]` | `[]` | Repeated `--config key=value` per entry |
64
+ | `options.jsonlEvents` | `boolean` | `false` | Enable JSONL event output via `--json` |
65
+ | `options.image` | `string[]` | `[]` | Repeated `--image path` per entry |
14
66
 
15
67
  ## Usage (Zod envelope)
16
68
 
@@ -59,6 +111,37 @@ const r2 = await generateText({
59
111
  });
60
112
  ```
61
113
 
114
+ Structured JSON output is also supported via `Output.object()`:
115
+
116
+ ```ts
117
+ import { generateText, Output, jsonSchema } from "ai";
118
+ import { claudeCode } from "@howells/envelope/ai-sdk";
119
+
120
+ const { output } = await generateText({
121
+ model: claudeCode("sonnet"),
122
+ prompt: "List three colours and their hex codes.",
123
+ output: Output.object({
124
+ schema: jsonSchema({
125
+ type: "object",
126
+ properties: {
127
+ colours: {
128
+ type: "array",
129
+ items: {
130
+ type: "object",
131
+ properties: {
132
+ name: { type: "string" },
133
+ hex: { type: "string" },
134
+ },
135
+ required: ["name", "hex"],
136
+ },
137
+ },
138
+ },
139
+ required: ["colours"],
140
+ }),
141
+ }),
142
+ });
143
+ ```
144
+
62
145
  Notes:
63
- - Current adapter is text-only and uses a single-shot call under the hood.
146
+ - The adapter uses single-shot calls under the hood (streaming is simulated).
64
147
  - If we want true streaming, we can extend it to use `claude --output-format stream-json`.
package/dist/ai-sdk.d.ts CHANGED
@@ -1,10 +1,10 @@
1
- import type { LanguageModelV1 } from "@ai-sdk/provider";
1
+ import type { LanguageModelV2 } from "@ai-sdk/provider";
2
2
  import { type CliTool } from "./client.js";
3
3
  export declare function cliModel(args: {
4
4
  tool: CliTool;
5
5
  model: string;
6
6
  clientOptions?: any;
7
- }): LanguageModelV1;
8
- export declare function claudeCode(model: string, clientOptions?: any): LanguageModelV1;
9
- export declare function codex(model: string, clientOptions?: any): LanguageModelV1;
7
+ }): LanguageModelV2;
8
+ export declare function claudeCode(model: string, clientOptions?: any): LanguageModelV2;
9
+ export declare function codex(model: string, clientOptions?: any): LanguageModelV2;
10
10
  //# sourceMappingURL=ai-sdk.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-sdk.d.ts","sourceRoot":"","sources":["../src/ai-sdk.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAEV,eAAe,EAIhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAA6D,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAkCtG,wBAAgB,QAAQ,CAAC,IAAI,EAAE;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,GAAG,CAAC;CACrB,GAAG,eAAe,CAwDlB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,GAAG,mBAE5D;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,GAAG,mBAEvD"}
1
+ {"version":3,"file":"ai-sdk.d.ts","sourceRoot":"","sources":["../src/ai-sdk.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEV,eAAe,EAGhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAA6D,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAiCtG,wBAAgB,QAAQ,CAAC,IAAI,EAAE;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,GAAG,CAAC;CACrB,GAAG,eAAe,CAqElB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,GAAG,mBAE5D;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,GAAG,mBAEvD"}
package/dist/ai-sdk.js CHANGED
@@ -1,30 +1,31 @@
1
- // AI SDK adapter for CLI tools (Claude Code, Codex).
1
+ // AI SDK v2 adapter for CLI tools (Claude Code, Codex).
2
2
  //
3
- // This is intentionally minimal and text-first. For `object-json` mode, it
4
- // maps the JSON schema to the tool's structured output mode.
3
+ // Implements LanguageModelV2 from @ai-sdk/provider >=3, compatible with ai@6.
4
+ // Text-first; for JSON mode it maps responseFormat.schema to the CLI's
5
+ // structured-output mode.
5
6
  import { createClaudeCodeClient, createCodexClient } from "./client.js";
6
- function v1PromptToText(prompt) {
7
+ function extractText(content) {
8
+ return content
9
+ .filter((p) => p.type === "text" && "text" in p && typeof p.text === "string")
10
+ .map((p) => p.text)
11
+ .join("");
12
+ }
13
+ function v2PromptToText(prompt) {
7
14
  const parts = [];
8
15
  for (const m of prompt) {
9
- const role = m.role;
10
- const content = m.content;
11
- if (!Array.isArray(content))
16
+ if (m.role === "system") {
17
+ parts.push(`system: ${m.content}`);
18
+ continue;
19
+ }
20
+ if (!Array.isArray(m.content))
12
21
  continue;
13
- const text = content
14
- .filter((p) => p && typeof p === "object" && p.type === "text" && typeof p.text === "string")
15
- .map((p) => p.text)
16
- .join("");
22
+ const text = extractText(m.content);
17
23
  if (text) {
18
- parts.push(`${role}: ${text}`);
24
+ parts.push(`${m.role}: ${text}`);
19
25
  }
20
26
  }
21
27
  return parts.join("\n");
22
28
  }
23
- function toSchema(schema) {
24
- if (!schema)
25
- return null;
26
- return schema;
27
- }
28
29
  function makeClient(tool, model, opts) {
29
30
  if (tool === "codex") {
30
31
  return createCodexClient({ model, ...(opts ?? {}) });
@@ -34,51 +35,59 @@ function makeClient(tool, model, opts) {
34
35
  export function cliModel(args) {
35
36
  const client = makeClient(args.tool, args.model, args.clientOptions);
36
37
  return {
37
- specificationVersion: "v1",
38
+ specificationVersion: "v2",
38
39
  provider: args.tool,
39
40
  modelId: args.model,
40
- defaultObjectGenerationMode: "json",
41
- supportsStructuredOutputs: true,
41
+ supportedUrls: {},
42
42
  async doGenerate(callOptions) {
43
- const promptText = v1PromptToText(callOptions.prompt);
44
- const finishReason = "stop";
45
- if (callOptions.mode.type === "object-json") {
46
- const schema = toSchema(callOptions.mode.schema);
47
- if (!schema) {
48
- throw new Error("object-json mode requires a JSON schema");
49
- }
43
+ const promptText = v2PromptToText(callOptions.prompt);
44
+ // Structured JSON output mode
45
+ if (callOptions.responseFormat?.type === "json" &&
46
+ callOptions.responseFormat.schema) {
47
+ const schema = callOptions.responseFormat.schema;
50
48
  const res = await client.structured({ prompt: promptText, jsonSchema: schema });
49
+ const text = JSON.stringify(res.structured ?? null);
51
50
  return {
52
- text: JSON.stringify(res.structured ?? null),
53
- finishReason,
54
- usage: { promptTokens: 0, completionTokens: 0 },
55
- rawCall: { rawPrompt: promptText, rawSettings: { mode: callOptions.mode } },
51
+ content: [{ type: "text", text }],
52
+ finishReason: "stop",
53
+ usage: { inputTokens: undefined, outputTokens: undefined, totalTokens: undefined },
54
+ warnings: [],
56
55
  };
57
56
  }
57
+ // Plain text mode (default)
58
58
  const res = await client.text({ prompt: promptText });
59
59
  return {
60
- text: res.text,
61
- finishReason,
62
- usage: { promptTokens: 0, completionTokens: 0 },
63
- rawCall: { rawPrompt: promptText, rawSettings: { mode: callOptions.mode } },
60
+ content: [{ type: "text", text: res.text }],
61
+ finishReason: "stop",
62
+ usage: { inputTokens: undefined, outputTokens: undefined, totalTokens: undefined },
63
+ warnings: [],
64
64
  };
65
65
  },
66
66
  async doStream(callOptions) {
67
- const res = await this.doGenerate(callOptions);
67
+ // CLI tools don't truly stream, so we fake it with a single chunk.
68
+ const result = await this.doGenerate(callOptions);
69
+ const textContent = result.content.find((c) => c.type === "text");
70
+ const textId = "t0";
68
71
  const stream = new ReadableStream({
69
72
  start(controller) {
70
- if (res.text) {
71
- controller.enqueue({ type: "text-delta", textDelta: res.text });
73
+ controller.enqueue({
74
+ type: "stream-start",
75
+ warnings: result.warnings,
76
+ });
77
+ if (textContent) {
78
+ controller.enqueue({ type: "text-start", id: textId });
79
+ controller.enqueue({ type: "text-delta", id: textId, delta: textContent.text });
80
+ controller.enqueue({ type: "text-end", id: textId });
72
81
  }
73
82
  controller.enqueue({
74
83
  type: "finish",
75
- finishReason: res.finishReason,
76
- usage: res.usage,
84
+ finishReason: result.finishReason,
85
+ usage: result.usage,
77
86
  });
78
87
  controller.close();
79
88
  },
80
89
  });
81
- return { stream, rawCall: res.rawCall, warnings: [] };
90
+ return { stream };
82
91
  },
83
92
  };
84
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ai-sdk.js","sourceRoot":"","sources":["../src/ai-sdk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-sdk.js","sourceRoot":"","sources":["../src/ai-sdk.ts"],"names":[],"mappings":"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"}
@@ -15,8 +15,16 @@ export interface ClaudeCodeOptions {
15
15
  * Base delay between retries (ms). Uses simple linear backoff by attempt.
16
16
  */
17
17
  retryDelayMs?: number;
18
- permissionMode?: "dontAsk" | "default" | "bypassPermissions";
18
+ permissionMode?: "default" | "plan" | "dontAsk" | "acceptEdits" | "bypassPermissions" | "delegate";
19
19
  tools?: string;
20
+ systemPrompt?: string;
21
+ appendSystemPrompt?: string;
22
+ allowedTools?: string[];
23
+ disallowedTools?: string[];
24
+ fallbackModel?: string;
25
+ betas?: string[];
26
+ agent?: string;
27
+ agents?: string;
20
28
  }
21
29
  export interface ClaudeCodeEnvelope<TStructured> {
22
30
  type?: string;
@@ -29,6 +37,8 @@ export interface ClaudeCodeEnvelope<TStructured> {
29
37
  session_id?: string;
30
38
  permission_denials?: unknown[];
31
39
  }
40
+ export declare function defaultClaudeOptions(opts?: ClaudeCodeOptions): Required<ClaudeCodeOptions>;
41
+ export declare function buildBaseArgs(opts: Required<ClaudeCodeOptions>): string[];
32
42
  export declare function claudeCodeStructured<TStructured>(args: {
33
43
  prompt: string;
34
44
  jsonSchema: string;
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../src/claude-code.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AAErC,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,mBAAmB,CAAC;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB,CAAC,WAAW;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,WAAW,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,OAAO,EAAE,CAAC;CAChC;AAqDD,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,IAAI,EAAE;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B,4CAqEA;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;;GA8DA"}
1
+ {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../src/claude-code.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AAErC,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EACX,SAAS,GACT,MAAM,GACN,SAAS,GACT,aAAa,GACb,mBAAmB,GACnB,UAAU,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB,CAAC,WAAW;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,WAAW,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,OAAO,EAAE,CAAC;CAChC;AAmHD,wBAAgB,oBAAoB,CAAC,IAAI,CAAC,EAAE,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAqB1F;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,iBAAiB,CAAC,YAgC9D;AA2CD,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,IAAI,EAAE;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B,4CAiCA;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;;GA4BA"}
@@ -1,22 +1,86 @@
1
- import { execFile } from "node:child_process";
1
+ import { spawn } from "node:child_process";
2
2
  function isRecord(v) {
3
3
  return typeof v === "object" && v !== null;
4
4
  }
5
- function execFileAsync(file, args, opts) {
5
+ function spawnAsync(file, args, opts) {
6
6
  return new Promise((resolve, reject) => {
7
- execFile(file, args, {
7
+ const child = spawn(file, args, {
8
8
  cwd: opts.cwd,
9
9
  env: opts.env,
10
- timeout: opts.timeoutMs,
11
- maxBuffer: 128 * 1024 * 1024,
12
- encoding: "utf8",
13
- }, (err, stdout, stderr) => {
14
- if (err) {
15
- const code = err.code ?? "?";
16
- const signal = err.signal ?? "?";
17
- const killed = err.killed ?? false;
18
- const e = new Error(`claude CLI failed (code=${code}, signal=${signal}, killed=${killed}): ${stderr || stdout}`);
19
- e.cause = err;
10
+ stdio: ["ignore", "pipe", "pipe"],
11
+ });
12
+ const maxBufferBytes = opts.maxBufferBytes ?? 128 * 1024 * 1024;
13
+ let stdout = "";
14
+ let stderr = "";
15
+ let killedByTimeout = false;
16
+ let timeout = null;
17
+ let hardKill = null;
18
+ const cleanup = () => {
19
+ if (timeout) {
20
+ clearTimeout(timeout);
21
+ timeout = null;
22
+ }
23
+ if (hardKill) {
24
+ clearTimeout(hardKill);
25
+ hardKill = null;
26
+ }
27
+ };
28
+ const maybeKillOnBuffer = () => {
29
+ if (stdout.length + stderr.length > maxBufferBytes) {
30
+ try {
31
+ child.kill("SIGTERM");
32
+ }
33
+ catch {
34
+ // ignore
35
+ }
36
+ const e = new Error("claude CLI output exceeded maxBufferBytes");
37
+ e.code = "MAXBUFFER";
38
+ reject(e);
39
+ cleanup();
40
+ }
41
+ };
42
+ child.stdout?.setEncoding("utf8");
43
+ child.stderr?.setEncoding("utf8");
44
+ child.stdout?.on("data", (d) => {
45
+ stdout += d;
46
+ maybeKillOnBuffer();
47
+ });
48
+ child.stderr?.on("data", (d) => {
49
+ stderr += d;
50
+ maybeKillOnBuffer();
51
+ });
52
+ if (opts.timeoutMs && opts.timeoutMs > 0) {
53
+ timeout = setTimeout(() => {
54
+ killedByTimeout = true;
55
+ try {
56
+ child.kill("SIGTERM");
57
+ }
58
+ catch {
59
+ // ignore
60
+ }
61
+ hardKill = setTimeout(() => {
62
+ try {
63
+ child.kill("SIGKILL");
64
+ }
65
+ catch {
66
+ // ignore
67
+ }
68
+ }, 2000);
69
+ }, opts.timeoutMs);
70
+ }
71
+ child.on("error", (err) => {
72
+ cleanup();
73
+ const e = new Error(`claude CLI spawn error: ${String(err)}`);
74
+ e.cause = err;
75
+ reject(e);
76
+ });
77
+ child.on("close", (code, signal) => {
78
+ cleanup();
79
+ if (code !== 0) {
80
+ const e = new Error(`claude CLI failed (code=${code ?? "?"}, signal=${signal ?? "?"}, killed=${killedByTimeout}): ${stderr || stdout}`);
81
+ e.code = code;
82
+ e.signal = signal;
83
+ e.killed = killedByTimeout;
20
84
  reject(e);
21
85
  return;
22
86
  }
@@ -24,8 +88,60 @@ function execFileAsync(file, args, opts) {
24
88
  });
25
89
  });
26
90
  }
27
- function buildBaseArgs(opts) {
28
- return ["--model", opts.model, "-p", "--permission-mode", opts.permissionMode, "--tools", opts.tools];
91
+ export function defaultClaudeOptions(opts) {
92
+ return {
93
+ claudePath: opts?.claudePath ?? "claude",
94
+ cwd: opts?.cwd ?? process.cwd(),
95
+ env: opts?.env ?? process.env,
96
+ model: opts?.model ?? "opus",
97
+ maxBudgetUsd: opts?.maxBudgetUsd ?? 5,
98
+ timeoutMs: opts?.timeoutMs ?? 120_000,
99
+ retries: opts?.retries ?? 1,
100
+ retryDelayMs: opts?.retryDelayMs ?? 800,
101
+ permissionMode: opts?.permissionMode ?? "dontAsk",
102
+ tools: opts?.tools ?? "",
103
+ systemPrompt: opts?.systemPrompt ?? "",
104
+ appendSystemPrompt: opts?.appendSystemPrompt ?? "",
105
+ allowedTools: opts?.allowedTools ?? [],
106
+ disallowedTools: opts?.disallowedTools ?? [],
107
+ fallbackModel: opts?.fallbackModel ?? "",
108
+ betas: opts?.betas ?? [],
109
+ agent: opts?.agent ?? "",
110
+ agents: opts?.agents ?? "",
111
+ };
112
+ }
113
+ export function buildBaseArgs(opts) {
114
+ const args = [
115
+ "--model", opts.model,
116
+ "-p",
117
+ "--permission-mode", opts.permissionMode,
118
+ "--tools", opts.tools,
119
+ ];
120
+ if (opts.systemPrompt) {
121
+ args.push("--system-prompt", opts.systemPrompt);
122
+ }
123
+ if (opts.appendSystemPrompt) {
124
+ args.push("--append-system-prompt", opts.appendSystemPrompt);
125
+ }
126
+ for (const t of opts.allowedTools) {
127
+ args.push("--allowedTools", t);
128
+ }
129
+ for (const t of opts.disallowedTools) {
130
+ args.push("--disallowedTools", t);
131
+ }
132
+ if (opts.fallbackModel) {
133
+ args.push("--fallback-model", opts.fallbackModel);
134
+ }
135
+ for (const b of opts.betas) {
136
+ args.push("--betas", b);
137
+ }
138
+ if (opts.agent) {
139
+ args.push("--agent", opts.agent);
140
+ }
141
+ if (opts.agents) {
142
+ args.push("--agents", opts.agents);
143
+ }
144
+ return args;
29
145
  }
30
146
  function sleep(ms) {
31
147
  return new Promise((r) => setTimeout(r, ms));
@@ -34,34 +150,12 @@ function isTimeoutKill(err) {
34
150
  const e = err;
35
151
  return Boolean(e && e.killed === true && e.signal === "SIGTERM");
36
152
  }
37
- export async function claudeCodeStructured(args) {
38
- const options = {
39
- claudePath: args.options?.claudePath ?? "claude",
40
- cwd: args.options?.cwd ?? process.cwd(),
41
- env: args.options?.env ?? process.env,
42
- model: args.options?.model ?? "opus",
43
- maxBudgetUsd: args.options?.maxBudgetUsd ?? 5,
44
- timeoutMs: args.options?.timeoutMs ?? 120_000,
45
- retries: args.options?.retries ?? 1,
46
- retryDelayMs: args.options?.retryDelayMs ?? 800,
47
- permissionMode: args.options?.permissionMode ?? "dontAsk",
48
- tools: args.options?.tools ?? "",
49
- };
50
- const cliArgs = [
51
- ...buildBaseArgs(options),
52
- "--max-budget-usd",
53
- String(options.maxBudgetUsd),
54
- "--output-format",
55
- "json",
56
- "--json-schema",
57
- args.jsonSchema,
58
- args.prompt,
59
- ];
153
+ async function spawnWithRetry(options, cliArgs) {
60
154
  let stdout = null;
61
155
  let lastErr = null;
62
156
  for (let attempt = 0; attempt <= options.retries; attempt++) {
63
157
  try {
64
- ({ stdout } = await execFileAsync(options.claudePath, cliArgs, {
158
+ ({ stdout } = await spawnAsync(options.claudePath, cliArgs, {
65
159
  cwd: options.cwd,
66
160
  env: options.env,
67
161
  timeoutMs: options.timeoutMs,
@@ -71,8 +165,6 @@ export async function claudeCodeStructured(args) {
71
165
  }
72
166
  catch (e) {
73
167
  lastErr = e;
74
- // Retry only if it's likely transient (timeout kill). Other errors should
75
- // generally be surfaced immediately to avoid masking real failures.
76
168
  if (!isTimeoutKill(e?.cause ?? e) || attempt >= options.retries) {
77
169
  throw e;
78
170
  }
@@ -83,6 +175,21 @@ export async function claudeCodeStructured(args) {
83
175
  if (stdout == null) {
84
176
  throw lastErr instanceof Error ? lastErr : new Error("claude CLI failed");
85
177
  }
178
+ return stdout;
179
+ }
180
+ export async function claudeCodeStructured(args) {
181
+ const options = defaultClaudeOptions(args.options);
182
+ const cliArgs = [
183
+ ...buildBaseArgs(options),
184
+ "--max-budget-usd",
185
+ String(options.maxBudgetUsd),
186
+ "--output-format",
187
+ "json",
188
+ "--json-schema",
189
+ args.jsonSchema,
190
+ args.prompt,
191
+ ];
192
+ const stdout = await spawnWithRetry(options, cliArgs);
86
193
  let envelopeUnknown;
87
194
  try {
88
195
  envelopeUnknown = JSON.parse(stdout);
@@ -100,18 +207,7 @@ export async function claudeCodeStructured(args) {
100
207
  return envelope;
101
208
  }
102
209
  export async function claudeCodeText(args) {
103
- const options = {
104
- claudePath: args.options?.claudePath ?? "claude",
105
- cwd: args.options?.cwd ?? process.cwd(),
106
- env: args.options?.env ?? process.env,
107
- model: args.options?.model ?? "opus",
108
- maxBudgetUsd: args.options?.maxBudgetUsd ?? 5,
109
- timeoutMs: args.options?.timeoutMs ?? 120_000,
110
- retries: args.options?.retries ?? 1,
111
- retryDelayMs: args.options?.retryDelayMs ?? 800,
112
- permissionMode: args.options?.permissionMode ?? "dontAsk",
113
- tools: args.options?.tools ?? "",
114
- };
210
+ const options = defaultClaudeOptions(args.options);
115
211
  const cliArgs = [
116
212
  ...buildBaseArgs(options),
117
213
  "--max-budget-usd",
@@ -120,30 +216,7 @@ export async function claudeCodeText(args) {
120
216
  "json",
121
217
  args.prompt,
122
218
  ];
123
- let stdout = null;
124
- let lastErr = null;
125
- for (let attempt = 0; attempt <= options.retries; attempt++) {
126
- try {
127
- ({ stdout } = await execFileAsync(options.claudePath, cliArgs, {
128
- cwd: options.cwd,
129
- env: options.env,
130
- timeoutMs: options.timeoutMs,
131
- }));
132
- lastErr = null;
133
- break;
134
- }
135
- catch (e) {
136
- lastErr = e;
137
- if (!isTimeoutKill(e?.cause ?? e) || attempt >= options.retries) {
138
- throw e;
139
- }
140
- const delay = options.retryDelayMs * (attempt + 1);
141
- await sleep(delay);
142
- }
143
- }
144
- if (stdout == null) {
145
- throw lastErr instanceof Error ? lastErr : new Error("claude CLI failed");
146
- }
219
+ const stdout = await spawnWithRetry(options, cliArgs);
147
220
  let envelopeUnknown;
148
221
  try {
149
222
  envelopeUnknown = JSON.parse(stdout);
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../src/claude-code.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../src/claude-code.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAA8B,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE/E,MAAM,MAAM,OAAO,GAAG,aAAa,GAAG,OAAO,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,WAAW,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC;CACzE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,WAAW,CAOnE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,CAAC,EAAE;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,OAAO,GAAG,cAAc,GAAG,WAAW,CAAC,CAAC;CAC3E,GAAG,SAAS,CAyBZ;AAED,wBAAgB,iBAAiB,CAAC,IAAI,CAAC,EAAE;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC;CACrD,GAAG,SAAS,CAwBZ"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAA8B,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE/E,MAAM,MAAM,OAAO,GAAG,aAAa,GAAG,OAAO,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,WAAW,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC;CACzE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,WAAW,CAEnE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,CAAC,EAAE;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,OAAO,GAAG,cAAc,GAAG,WAAW,CAAC,CAAC;CAC3E,GAAG,SAAS,CAyBZ;AAED,wBAAgB,iBAAiB,CAAC,IAAI,CAAC,EAAE;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC;CACrD,GAAG,SAAS,CAwBZ"}
package/dist/client.js CHANGED
@@ -1,13 +1,8 @@
1
- import { zodToJsonSchema } from "zod-to-json-schema";
1
+ import { toJSONSchema } from "zod/v4";
2
2
  import { claudeCodeStructured, claudeCodeText, } from "./claude-code.js";
3
3
  import { codexStructured, codexText } from "./codex-cli.js";
4
4
  export function jsonSchemaFromZod(schema) {
5
- // Important: do NOT provide `name`. `zod-to-json-schema` wraps named schemas
6
- // in a `$ref`/`definitions` envelope, which breaks Codex's `--output-schema`
7
- // requirement that the root schema is `type: "object"`.
8
- return zodToJsonSchema(schema, {
9
- $refStrategy: "none",
10
- });
5
+ return toJSONSchema(schema);
11
6
  }
12
7
  export function createClaudeCodeClient(args) {
13
8
  const cfg = args;
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,oBAAoB,EACpB,cAAc,GAEf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,SAAS,EAAqB,MAAM,gBAAgB,CAAC;AAoB/E,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,6EAA6E;IAC7E,6EAA6E;IAC7E,wDAAwD;IACxD,OAAO,eAAe,CAAC,MAAM,EAAE;QAC7B,YAAY,EAAE,MAAM;KACrB,CAA2B,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAKtC;IACC,MAAM,GAAG,GAAG,IAAI,CAAC;IACjB,MAAM,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI,MAAM,CAAC;IACnC,MAAM,YAAY,GAAG,GAAG,EAAE,YAAY,IAAI,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,GAAG,EAAE,SAAS,IAAI,OAAO,CAAC;IAE5C,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,KAAK;QACL,KAAK,CAAC,IAAI,CAAC,KAAuB;YAChC,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC;gBAC/B,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,OAAO,EAAE,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE;aAC7D,CAAC,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;QAC5B,CAAC;QACD,KAAK,CAAC,UAAU,CAAI,KAA6B;YAC/C,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAI;gBAC7C,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC5C,OAAO,EAAE,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE;aAC7D,CAAC,CAAC;YACH,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,iBAAsB,EAAE,CAAC;QACzD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAIjC;IACC,MAAM,GAAG,GAAG,IAAI,CAAC;IACjB,MAAM,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI,eAAe,CAAC;IAC5C,MAAM,SAAS,GAAG,GAAG,EAAE,SAAS,IAAI,OAAO,CAAC;IAE5C,OAAO;QACL,IAAI,EAAE,OAAO;QACb,KAAK;QACL,KAAK,CAAC,IAAI,CAAC,KAAuB;YAChC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC;gBAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,OAAO,EAAE,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;aAC/C,CAAC,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;QAC5B,CAAC;QACD,KAAK,CAAC,UAAU,CAAI,KAA6B;YAC/C,MAAM,GAAG,GAAG,MAAM,eAAe,CAAI;gBACnC,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC5C,OAAO,EAAE,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;aAC/C,CAAC,CAAC;YACH,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;QACxC,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EACL,oBAAoB,EACpB,cAAc,GAEf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,SAAS,EAAqB,MAAM,gBAAgB,CAAC;AAoB/E,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,OAAO,YAAY,CAAC,MAAM,CAA2B,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAKtC;IACC,MAAM,GAAG,GAAG,IAAI,CAAC;IACjB,MAAM,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI,MAAM,CAAC;IACnC,MAAM,YAAY,GAAG,GAAG,EAAE,YAAY,IAAI,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,GAAG,EAAE,SAAS,IAAI,OAAO,CAAC;IAE5C,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,KAAK;QACL,KAAK,CAAC,IAAI,CAAC,KAAuB;YAChC,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC;gBAC/B,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,OAAO,EAAE,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE;aAC7D,CAAC,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;QAC5B,CAAC;QACD,KAAK,CAAC,UAAU,CAAI,KAA6B;YAC/C,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAI;gBAC7C,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC5C,OAAO,EAAE,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE;aAC7D,CAAC,CAAC;YACH,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,iBAAsB,EAAE,CAAC;QACzD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAIjC;IACC,MAAM,GAAG,GAAG,IAAI,CAAC;IACjB,MAAM,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI,eAAe,CAAC;IAC5C,MAAM,SAAS,GAAG,GAAG,EAAE,SAAS,IAAI,OAAO,CAAC;IAE5C,OAAO;QACL,IAAI,EAAE,OAAO;QACb,KAAK;QACL,KAAK,CAAC,IAAI,CAAC,KAAuB;YAChC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC;gBAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,OAAO,EAAE,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;aAC/C,CAAC,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;QAC5B,CAAC;QACD,KAAK,CAAC,UAAU,CAAI,KAA6B;YAC/C,MAAM,GAAG,GAAG,MAAM,eAAe,CAAI;gBACnC,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC5C,OAAO,EAAE,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;aAC/C,CAAC,CAAC;YACH,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;QACxC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -10,7 +10,10 @@ export interface CodexOptions {
10
10
  profile?: string;
11
11
  config?: Array<string>;
12
12
  jsonlEvents?: boolean;
13
+ image?: string[];
13
14
  }
15
+ export declare function baseArgs(options: Required<CodexOptions>): string[];
16
+ export declare function defaultOptions(opts?: CodexOptions): Required<CodexOptions>;
14
17
  export declare function codexText(args: {
15
18
  prompt: string;
16
19
  options?: CodexOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"codex-cli.d.ts","sourceRoot":"","sources":["../src/codex-cli.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,WAAW,GAAG,iBAAiB,GAAG,oBAAoB,CAAC;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA0ED,wBAAsB,SAAS,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE;;GAwB/E;AAED,wBAAsB,eAAe,CAAC,WAAW,EAAE,IAAI,EAAE;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;gBAiCkC,WAAW;;GAI7C"}
1
+ {"version":3,"file":"codex-cli.d.ts","sourceRoot":"","sources":["../src/codex-cli.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,WAAW,GAAG,iBAAiB,GAAG,oBAAoB,CAAC;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAiCD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,YA2BvD;AAED,wBAAgB,cAAc,CAAC,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,CAc1E;AA8BD,wBAAsB,SAAS,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE;;GAI/E;AAED,wBAAsB,eAAe,CAAC,WAAW,EAAE,IAAI,EAAE;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;gBAgBgC,WAAW;;GAC3C"}
package/dist/codex-cli.js CHANGED
@@ -21,7 +21,7 @@ function execFileAsync(file, args, opts) {
21
21
  });
22
22
  });
23
23
  }
24
- function baseArgs(options) {
24
+ export function baseArgs(options) {
25
25
  const args = ["exec"];
26
26
  if (options.skipGitRepoCheck) {
27
27
  args.push("--skip-git-repo-check");
@@ -44,9 +44,12 @@ function baseArgs(options) {
44
44
  if (options.jsonlEvents) {
45
45
  args.push("--json");
46
46
  }
47
+ for (const img of options.image) {
48
+ args.push("--image", img);
49
+ }
47
50
  return args;
48
51
  }
49
- function defaultOptions(opts) {
52
+ export function defaultOptions(opts) {
50
53
  return {
51
54
  codexPath: opts?.codexPath ?? "codex",
52
55
  cwd: opts?.cwd ?? process.cwd(),
@@ -58,63 +61,50 @@ function defaultOptions(opts) {
58
61
  profile: opts?.profile ?? "",
59
62
  config: opts?.config ?? [],
60
63
  jsonlEvents: opts?.jsonlEvents ?? false,
64
+ image: opts?.image ?? [],
61
65
  };
62
66
  }
63
- export async function codexText(args) {
64
- const options = defaultOptions(args.options);
67
+ async function execInTempDir(options, setup) {
65
68
  const td = await mkdtemp(join(tmpdir(), "envelope-codex-"));
66
69
  try {
67
70
  const outPath = join(td, "last.txt");
71
+ const extraArgs = await setup(td, outPath);
68
72
  const cliArgs = [
69
73
  ...baseArgs(options),
74
+ ...extraArgs,
70
75
  "--output-last-message",
71
76
  outPath,
72
- args.prompt,
73
77
  ];
74
78
  await execFileAsync(options.codexPath, cliArgs, {
75
79
  cwd: options.cwd,
76
80
  env: options.env,
77
81
  timeoutMs: options.timeoutMs,
78
82
  });
79
- const text = await readFile(outPath, "utf8");
80
- return { text };
83
+ return await readFile(outPath, "utf8");
81
84
  }
82
85
  finally {
83
86
  await rm(td, { recursive: true, force: true });
84
87
  }
85
88
  }
89
+ export async function codexText(args) {
90
+ const options = defaultOptions(args.options);
91
+ const text = await execInTempDir(options, async () => [args.prompt]);
92
+ return { text };
93
+ }
86
94
  export async function codexStructured(args) {
87
95
  const options = defaultOptions(args.options);
88
- const td = await mkdtemp(join(tmpdir(), "envelope-codex-"));
89
- try {
96
+ const raw = await execInTempDir(options, async (td) => {
90
97
  const schemaPath = join(td, "schema.json");
91
- const outPath = join(td, "last.txt");
92
98
  await writeFile(schemaPath, args.jsonSchema, "utf8");
93
- const cliArgs = [
94
- ...baseArgs(options),
95
- "--output-schema",
96
- schemaPath,
97
- "--output-last-message",
98
- outPath,
99
- args.prompt,
100
- ];
101
- await execFileAsync(options.codexPath, cliArgs, {
102
- cwd: options.cwd,
103
- env: options.env,
104
- timeoutMs: options.timeoutMs,
105
- });
106
- const raw = await readFile(outPath, "utf8");
107
- let parsed;
108
- try {
109
- parsed = JSON.parse(raw);
110
- }
111
- catch {
112
- throw new Error(`codex output was not JSON. First 200 chars:\n${raw.slice(0, 200)}`);
113
- }
114
- return { structured: parsed, raw };
99
+ return ["--output-schema", schemaPath, args.prompt];
100
+ });
101
+ let parsed;
102
+ try {
103
+ parsed = JSON.parse(raw);
115
104
  }
116
- finally {
117
- await rm(td, { recursive: true, force: true });
105
+ catch {
106
+ throw new Error(`codex output was not JSON. First 200 chars:\n${raw.slice(0, 200)}`);
118
107
  }
108
+ return { structured: parsed, raw };
119
109
  }
120
110
  //# sourceMappingURL=codex-cli.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex-cli.js","sourceRoot":"","sources":["../src/codex-cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex-cli.js","sourceRoot":"","sources":["../src/codex-cli.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- export * from "./claude-code.js";
2
- export * from "./codex-cli.js";
3
- export * from "./client.js";
4
- export * from "./envelope.js";
1
+ export { createEnvelope, EnvelopeError, type CreateEnvelopeArgs, } from "./envelope.js";
2
+ export { createClaudeCodeClient, createCodexClient, jsonSchemaFromZod, type CliClient, type CliTool, type GenerateTextArgs, type GenerateStructuredArgs, } from "./client.js";
3
+ export { claudeCodeStructured, claudeCodeText, type ClaudeCodeOptions, } from "./claude-code.js";
4
+ export { codexStructured, codexText, type CodexOptions, } from "./codex-cli.js";
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,GAC5B,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,eAAe,EACf,SAAS,EACT,KAAK,YAAY,GAClB,MAAM,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,7 @@
1
- export * from "./claude-code.js";
2
- export * from "./codex-cli.js";
3
- export * from "./client.js";
4
- export * from "./envelope.js";
1
+ // Core API
2
+ export { createEnvelope, EnvelopeError, } from "./envelope.js";
3
+ export { createClaudeCodeClient, createCodexClient, jsonSchemaFromZod, } from "./client.js";
4
+ // CLI-level API (for power users who need direct CLI access)
5
+ export { claudeCodeStructured, claudeCodeText, } from "./claude-code.js";
6
+ export { codexStructured, codexText, } from "./codex-cli.js";
5
7
  //# 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,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,EACL,cAAc,EACd,aAAa,GAEd,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,GAKlB,MAAM,aAAa,CAAC;AAErB,6DAA6D;AAC7D,OAAO,EACL,oBAAoB,EACpB,cAAc,GAEf,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,eAAe,EACf,SAAS,GAEV,MAAM,gBAAgB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@howells/envelope",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "private": false,
5
5
  "description": "Strict Zod IO wrapper around local CLI LLMs (Claude Code, Codex), plus an AI SDK adapter.",
6
6
  "type": "module",
@@ -34,12 +34,6 @@
34
34
  "engines": {
35
35
  "node": ">=20"
36
36
  },
37
- "scripts": {
38
- "build": "tsc -p tsconfig.json",
39
- "dev": "tsc -p tsconfig.json -w",
40
- "prepack": "pnpm build",
41
- "typecheck": "tsc -p tsconfig.json --noEmit"
42
- },
43
37
  "keywords": [
44
38
  "llm",
45
39
  "cli",
@@ -49,13 +43,21 @@
49
43
  "ai-sdk"
50
44
  ],
51
45
  "dependencies": {
52
- "@ai-sdk/provider": "^1.0.0",
53
- "zod": "^3.25.0",
54
- "zod-to-json-schema": "^3.24.6"
46
+ "@ai-sdk/provider": "^3.0.0"
47
+ },
48
+ "peerDependencies": {
49
+ "zod": "^4.0.0"
55
50
  },
56
51
  "devDependencies": {
57
52
  "@types/node": "^22.0.0",
58
- "typescript": "^5.7.0"
53
+ "typescript": "^5.7.0",
54
+ "vitest": "^4.0.18",
55
+ "zod": "^4.3.6"
59
56
  },
60
- "packageManager": "pnpm@10.12.4"
61
- }
57
+ "scripts": {
58
+ "build": "tsc -p tsconfig.json",
59
+ "dev": "tsc -p tsconfig.json -w",
60
+ "test": "vitest run",
61
+ "typecheck": "tsc -p tsconfig.json --noEmit"
62
+ }
63
+ }