@howells/envelope 0.1.1 → 0.1.3

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
@@ -12,6 +12,18 @@ This is designed for local Node apps where you want "model calls" to look like a
12
12
  - Node 20+
13
13
  - `claude` CLI installed and authenticated (Claude Code)
14
14
 
15
+ ## CLI Options
16
+
17
+ `createClaudeCodeClient()` accepts:
18
+ - `model` (default `"opus"`)
19
+ - `maxBudgetUsd` (default `5`)
20
+ - `timeoutMs` (default `120_000`)
21
+ - `options.permissionMode` (default `"dontAsk"`)
22
+ - `options.tools` (default `""` to disable all tools; pass `"default"` to enable built-ins)
23
+ - `options.retries` (default `1`) and `options.retryDelayMs` (default `800`) for retry-on-timeout
24
+
25
+ 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.
26
+
15
27
  ## Usage (Zod envelope)
16
28
 
17
29
  ```ts
@@ -6,6 +6,15 @@ export interface ClaudeCodeOptions {
6
6
  model?: ClaudeCodeModel;
7
7
  maxBudgetUsd?: number;
8
8
  timeoutMs?: number;
9
+ /**
10
+ * Number of retries after a timeout (SIGTERM kill) or transient failure.
11
+ * Total attempts = 1 + retries.
12
+ */
13
+ retries?: number;
14
+ /**
15
+ * Base delay between retries (ms). Uses simple linear backoff by attempt.
16
+ */
17
+ retryDelayMs?: number;
9
18
  permissionMode?: "dontAsk" | "default" | "bypassPermissions";
10
19
  tools?: string;
11
20
  }
@@ -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,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;AAyCD,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,IAAI,EAAE;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B,4CA4CA;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;;GAuCA"}
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;AAgID,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,19 +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 e = new Error(`claude CLI failed (code=${err.code ?? "?"}): ${stderr || stdout}`);
16
- 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;
17
84
  reject(e);
18
85
  return;
19
86
  }
@@ -24,6 +91,13 @@ function execFileAsync(file, args, opts) {
24
91
  function buildBaseArgs(opts) {
25
92
  return ["--model", opts.model, "-p", "--permission-mode", opts.permissionMode, "--tools", opts.tools];
26
93
  }
94
+ function sleep(ms) {
95
+ return new Promise((r) => setTimeout(r, ms));
96
+ }
97
+ function isTimeoutKill(err) {
98
+ const e = err;
99
+ return Boolean(e && e.killed === true && e.signal === "SIGTERM");
100
+ }
27
101
  export async function claudeCodeStructured(args) {
28
102
  const options = {
29
103
  claudePath: args.options?.claudePath ?? "claude",
@@ -32,10 +106,12 @@ export async function claudeCodeStructured(args) {
32
106
  model: args.options?.model ?? "opus",
33
107
  maxBudgetUsd: args.options?.maxBudgetUsd ?? 5,
34
108
  timeoutMs: args.options?.timeoutMs ?? 120_000,
109
+ retries: args.options?.retries ?? 1,
110
+ retryDelayMs: args.options?.retryDelayMs ?? 800,
35
111
  permissionMode: args.options?.permissionMode ?? "dontAsk",
36
112
  tools: args.options?.tools ?? "",
37
113
  };
38
- const { stdout } = await execFileAsync(options.claudePath, [
114
+ const cliArgs = [
39
115
  ...buildBaseArgs(options),
40
116
  "--max-budget-usd",
41
117
  String(options.maxBudgetUsd),
@@ -44,7 +120,33 @@ export async function claudeCodeStructured(args) {
44
120
  "--json-schema",
45
121
  args.jsonSchema,
46
122
  args.prompt,
47
- ], { cwd: options.cwd, env: options.env, timeoutMs: options.timeoutMs });
123
+ ];
124
+ let stdout = null;
125
+ let lastErr = null;
126
+ for (let attempt = 0; attempt <= options.retries; attempt++) {
127
+ try {
128
+ ({ stdout } = await spawnAsync(options.claudePath, cliArgs, {
129
+ cwd: options.cwd,
130
+ env: options.env,
131
+ timeoutMs: options.timeoutMs,
132
+ }));
133
+ lastErr = null;
134
+ break;
135
+ }
136
+ catch (e) {
137
+ lastErr = e;
138
+ // Retry only if it's likely transient (timeout kill). Other errors should
139
+ // generally be surfaced immediately to avoid masking real failures.
140
+ if (!isTimeoutKill(e?.cause ?? e) || attempt >= options.retries) {
141
+ throw e;
142
+ }
143
+ const delay = options.retryDelayMs * (attempt + 1);
144
+ await sleep(delay);
145
+ }
146
+ }
147
+ if (stdout == null) {
148
+ throw lastErr instanceof Error ? lastErr : new Error("claude CLI failed");
149
+ }
48
150
  let envelopeUnknown;
49
151
  try {
50
152
  envelopeUnknown = JSON.parse(stdout);
@@ -69,17 +171,43 @@ export async function claudeCodeText(args) {
69
171
  model: args.options?.model ?? "opus",
70
172
  maxBudgetUsd: args.options?.maxBudgetUsd ?? 5,
71
173
  timeoutMs: args.options?.timeoutMs ?? 120_000,
174
+ retries: args.options?.retries ?? 1,
175
+ retryDelayMs: args.options?.retryDelayMs ?? 800,
72
176
  permissionMode: args.options?.permissionMode ?? "dontAsk",
73
177
  tools: args.options?.tools ?? "",
74
178
  };
75
- const { stdout } = await execFileAsync(options.claudePath, [
179
+ const cliArgs = [
76
180
  ...buildBaseArgs(options),
77
181
  "--max-budget-usd",
78
182
  String(options.maxBudgetUsd),
79
183
  "--output-format",
80
184
  "json",
81
185
  args.prompt,
82
- ], { cwd: options.cwd, env: options.env, timeoutMs: options.timeoutMs });
186
+ ];
187
+ let stdout = null;
188
+ let lastErr = null;
189
+ for (let attempt = 0; attempt <= options.retries; attempt++) {
190
+ try {
191
+ ({ stdout } = await spawnAsync(options.claudePath, cliArgs, {
192
+ cwd: options.cwd,
193
+ env: options.env,
194
+ timeoutMs: options.timeoutMs,
195
+ }));
196
+ lastErr = null;
197
+ break;
198
+ }
199
+ catch (e) {
200
+ lastErr = e;
201
+ if (!isTimeoutKill(e?.cause ?? e) || attempt >= options.retries) {
202
+ throw e;
203
+ }
204
+ const delay = options.retryDelayMs * (attempt + 1);
205
+ await sleep(delay);
206
+ }
207
+ }
208
+ if (stdout == null) {
209
+ throw lastErr instanceof Error ? lastErr : new Error("claude CLI failed");
210
+ }
83
211
  let envelopeUnknown;
84
212
  try {
85
213
  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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@howells/envelope",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
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",