@shardworks/claude-code-apparatus 0.1.270 → 0.1.271

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/dist/index.d.ts CHANGED
@@ -19,15 +19,21 @@ import type { SessionChunk, SessionTerminationTag } from '@shardworks/animator-a
19
19
  * Detect a rate-limit signature on an NDJSON message from the claude
20
20
  * `--output-format stream-json` stream.
21
21
  *
22
- * Two branches (both structural, both load-bearing):
23
- * - `msg.subtype` containing the substring `rate_limit` / `rate-limit`
24
- * - `msg.is_error` true with `msg.error` / `msg.message.error` text
25
- * matching the rate-limit pattern
22
+ * One branch, evidence-driven:
23
+ * - `msg.error` (top-level, peer of `message`) matches the
24
+ * rate-limit pattern. Claude's observed emission is
25
+ * `{type:"assistant", message:{...}, error:"rate_limit"}` with no
26
+ * `is_error` flag, no distinguishing `subtype`, no signal in
27
+ * `subtype`/`is_error` shape — so the only reliable tag is the
28
+ * top-level `error` value matching the rate-limit pattern.
26
29
  *
27
- * Returns null when the message does not indicate rate limiting. The
28
- * previous `msg.type === 'result'` + prose-text branch was removed
29
- * because it matched an assistant's summary of a prior rate-limit event,
30
- * producing false-positive pauses.
30
+ * Two earlier speculative branches (`subtype` containing `rate_limit`,
31
+ * and `is_error: true` carrying error text) were removed because no
32
+ * live provider emission was ever observed against them; they were
33
+ * inherited from an early speculative cascade. If a future provider
34
+ * shape requires either, add it back with a real example.
35
+ *
36
+ * Returns null when the message does not indicate rate limiting.
31
37
  */
32
38
  export declare function detectRateLimitFromNdjson(msg: Record<string, unknown>): SessionTerminationTag | null;
33
39
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAIV,YAAY,EACZ,qBAAqB,EACtB,MAAM,gCAAgC,CAAC;AAiBxC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,qBAAqB,GAAG,IAAI,CA0B9B;AAID;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,GAAG,SAAS,CAiBnG;AA0CD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAWjD;;AAED,wBAA0C;AAI1C,uDAAuD;AACvD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE;QACX,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,cAAc,CAAC,EAAE,qBAAqB,CAAC;CACxC;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,GAAG,EAAE;IACH,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC5C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,cAAc,CAAC,EAAE,qBAAqB,CAAC;CACxC,GACA,YAAY,EAAE,CAyDhB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAC9C,MAAM,CAgBR"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAIV,YAAY,EACZ,qBAAqB,EACtB,MAAM,gCAAgC,CAAC;AAyBxC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,qBAAqB,GAAG,IAAI,CAU9B;AAID;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,GAAG,SAAS,CAiBnG;AA0CD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAWjD;;AAED,wBAA0C;AAI1C,uDAAuD;AACvD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE;QACX,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,cAAc,CAAC,EAAE,qBAAqB,CAAC;CACxC;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,GAAG,EAAE;IACH,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC5C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,cAAc,CAAC,EAAE,qBAAqB,CAAC;CACxC,GACA,YAAY,EAAE,CAyDhB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAC9C,MAAM,CAgBR"}
package/dist/index.js CHANGED
@@ -16,50 +16,50 @@
16
16
  import { launchDetached } from "./detached.js";
17
17
  // ── Rate-limit detection ────────────────────────────────────────────
18
18
  /**
19
- * Regex matching common rate-limit phrasings in structured provider
20
- * error text (not stderr). Applied only to the NDJSON `is_error` branch
21
- * where claude surfaces a structured error payload. The cascade is
22
- * narrow by design: two retro-reviewed false-positive pauses originated
23
- * from stderr / exit-code detection, so the detector is scoped to
24
- * NDJSON-carried structural signals only.
19
+ * Regex matching the canonical claude rate-limit emission. Applied to
20
+ * the top-level `error` field of an NDJSON message.
21
+ *
22
+ * Underscore is included alongside hyphen and whitespace because claude
23
+ * emits the canonical token `rate_limit` (not `rate-limit`) on the
24
+ * top-level `error` field of an assistant termination message.
25
+ *
26
+ * The detector is intentionally evidence-driven and narrow: branches
27
+ * are added when a real provider emission is observed, not pre-emptively.
28
+ * Speculative coverage burned us before (a `result`-text branch matched
29
+ * an assistant's prose summary of a prior rate-limit and false-paused
30
+ * the guild; a stderr/exit-code cascade did the same on a generic
31
+ * non-zero exit), so the discipline is to keep this narrow and add
32
+ * branches only when their input shape is observed in the wild.
25
33
  */
26
- const RATE_LIMIT_ERROR_TEXT_PATTERN = /(rate[-\s]?limit|429\b|usage[-\s]?limit|quota[-\s]?exceeded|too\s+many\s+requests)/i;
34
+ const RATE_LIMIT_ERROR_TEXT_PATTERN = /(rate[-_\s]?limit|429\b|usage[-_\s]?limit|quota[-_\s]?exceeded|too\s+many\s+requests)/i;
27
35
  /**
28
36
  * Detect a rate-limit signature on an NDJSON message from the claude
29
37
  * `--output-format stream-json` stream.
30
38
  *
31
- * Two branches (both structural, both load-bearing):
32
- * - `msg.subtype` containing the substring `rate_limit` / `rate-limit`
33
- * - `msg.is_error` true with `msg.error` / `msg.message.error` text
34
- * matching the rate-limit pattern
39
+ * One branch, evidence-driven:
40
+ * - `msg.error` (top-level, peer of `message`) matches the
41
+ * rate-limit pattern. Claude's observed emission is
42
+ * `{type:"assistant", message:{...}, error:"rate_limit"}` with no
43
+ * `is_error` flag, no distinguishing `subtype`, no signal in
44
+ * `subtype`/`is_error` shape — so the only reliable tag is the
45
+ * top-level `error` value matching the rate-limit pattern.
46
+ *
47
+ * Two earlier speculative branches (`subtype` containing `rate_limit`,
48
+ * and `is_error: true` carrying error text) were removed because no
49
+ * live provider emission was ever observed against them; they were
50
+ * inherited from an early speculative cascade. If a future provider
51
+ * shape requires either, add it back with a real example.
35
52
  *
36
- * Returns null when the message does not indicate rate limiting. The
37
- * previous `msg.type === 'result'` + prose-text branch was removed
38
- * because it matched an assistant's summary of a prior rate-limit event,
39
- * producing false-positive pauses.
53
+ * Returns null when the message does not indicate rate limiting.
40
54
  */
41
55
  export function detectRateLimitFromNdjson(msg) {
42
- const subtype = typeof msg.subtype === 'string' ? msg.subtype : undefined;
43
- if (subtype && /rate[-_ ]?limit/i.test(subtype)) {
56
+ if (typeof msg.error === 'string' && RATE_LIMIT_ERROR_TEXT_PATTERN.test(msg.error)) {
44
57
  return {
45
58
  kind: 'rate-limit',
46
59
  source: 'ndjson-result',
47
- detail: `NDJSON subtype: ${subtype}`,
60
+ detail: msg.error.slice(0, 200),
48
61
  };
49
62
  }
50
- if (msg.is_error === true) {
51
- const errText = (typeof msg.error === 'string' ? msg.error : undefined) ??
52
- (typeof msg.message?.error === 'string'
53
- ? (msg.message.error)
54
- : undefined);
55
- if (errText && RATE_LIMIT_ERROR_TEXT_PATTERN.test(errText)) {
56
- return {
57
- kind: 'rate-limit',
58
- source: 'ndjson-result',
59
- detail: errText.slice(0, 200),
60
- };
61
- }
62
- }
63
63
  return null;
64
64
  }
65
65
  // ── Output extraction ───────────────────────────────────────────────
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Babysitter runtime toolkit — single-purpose primitives shared by the
3
+ * orchestrator and proxy in `babysitter.ts`.
4
+ *
5
+ * Each export is a small, self-contained piece: stdin parsing, retrying
6
+ * HTTP, the DLQ writer, the SQLite trio, the lifecycle reporters, and
7
+ * the stderr redirector. The orchestrator composes them; this module
8
+ * does not know about the orchestrator.
9
+ *
10
+ * See: docs/architecture/detached-sessions.md
11
+ */
12
+ import { type StreamJsonResult } from './index.ts';
13
+ import type { SessionTerminationTag } from '@shardworks/animator-apparatus';
14
+ /** A serialized tool definition as received in the babysitter config. */
15
+ export interface SerializedTool {
16
+ /** Tool name (e.g. 'writ-list'). */
17
+ name: string;
18
+ /** Tool description. */
19
+ description: string;
20
+ /** JSON Schema for the tool's input parameters. */
21
+ params: Record<string, unknown>;
22
+ /**
23
+ * HTTP method the guild tool server routes this tool under. The MCP proxy
24
+ * uses this to avoid POSTing to a GET-only read-tool route (which would
25
+ * 404). Derived from the tool's `permission` by `permissionToMethod()`.
26
+ */
27
+ method: 'GET' | 'POST' | 'DELETE';
28
+ }
29
+ /** Config written to the babysitter's stdin by the spawning process. */
30
+ export interface BabysitterConfig {
31
+ sessionId: string;
32
+ guildToolUrl: string;
33
+ dbPath: string;
34
+ logDir: string;
35
+ claudeArgs: string[];
36
+ cwd: string;
37
+ env: Record<string, string>;
38
+ prompt: string;
39
+ tools: SerializedTool[];
40
+ startedAt: string;
41
+ provider: string;
42
+ metadata?: Record<string, unknown>;
43
+ /** Temp directory for the system prompt file. Cleaned up in finally block. */
44
+ systemPromptTmpDir?: string;
45
+ }
46
+ /**
47
+ * Walk an error's cause chain looking for a retryable error code.
48
+ * Returns the first retryable code found, or null if none.
49
+ * Caps traversal depth to prevent infinite loops from circular cause chains.
50
+ */
51
+ export declare function findRetryableCode(err: unknown, maxDepth?: number): string | null;
52
+ /**
53
+ * Read the babysitter config from stdin.
54
+ *
55
+ * Reads stdin to completion, parses the JSON, and validates required fields.
56
+ * The spawning process writes config and closes the write end.
57
+ */
58
+ export declare function readConfigFromStdin(stream?: NodeJS.ReadableStream): Promise<BabysitterConfig>;
59
+ export declare function callGuildHttpApi(url: string, sessionId: string, body: unknown, timeoutMs?: number, method?: 'GET' | 'POST' | 'DELETE'): Promise<unknown>;
60
+ /**
61
+ * Write a payload to the Dead Letter Queue.
62
+ *
63
+ * Creates the DLQ directory if it doesn't exist. Writes the payload as
64
+ * pretty-printed JSON. Used as a fallback when the guild HTTP API is
65
+ * unreachable for lifecycle calls.
66
+ */
67
+ export declare function writeToDlq(cwd: string, filename: string, payload: unknown): void;
68
+ /** Minimal interface for the SQLite database used by the babysitter. */
69
+ export interface TranscriptDb {
70
+ /** Write a transcript entry (id, content JSON). */
71
+ writeTranscript(sessionId: string, content: string): void;
72
+ /** Close the database connection. */
73
+ close(): void;
74
+ }
75
+ /**
76
+ * Open the guild's SQLite database for transcript streaming.
77
+ *
78
+ * Creates the database file and table if they don't exist.
79
+ * Enables WAL mode for concurrent read access by other processes
80
+ * (Oculus, CLI queries, other agents).
81
+ *
82
+ * Uses dynamic import() to load better-sqlite3 at runtime. This avoids
83
+ * requiring the native module at import time (beneficial for type-checking
84
+ * and testing).
85
+ */
86
+ export declare function openTranscriptDb(dbPath: string): Promise<TranscriptDb>;
87
+ /**
88
+ * Initialize a TranscriptDb from a Database constructor.
89
+ *
90
+ * Shared logic between openTranscriptDb() and test injection.
91
+ * Exported for testing — allows injecting a mock Database constructor.
92
+ */
93
+ export declare function initTranscriptDb(DatabaseConstructor: new (path: string) => {
94
+ pragma(stmt: string): unknown;
95
+ prepare(sql: string): {
96
+ run(...params: unknown[]): void;
97
+ };
98
+ exec(sql: string): void;
99
+ close(): void;
100
+ }, dbPath: string): TranscriptDb;
101
+ /**
102
+ * Write the current transcript to SQLite.
103
+ */
104
+ export declare function writeTranscript(db: TranscriptDb, sessionId: string, messages: Record<string, unknown>[]): void;
105
+ /**
106
+ * Report "running" status to the guild via the session-running tool.
107
+ *
108
+ * If the guild is unreachable, writes the payload to the DLQ.
109
+ */
110
+ export declare function reportRunning(config: BabysitterConfig, cancelHandle: Record<string, unknown>, timeoutMs?: number): Promise<void>;
111
+ /**
112
+ * Resolve the terminal status and error text for a terminated session.
113
+ *
114
+ * Cascade order:
115
+ * 1. A `'cancelled'` override (SIGTERM path) — short-circuits.
116
+ * 2. A `terminationTag` already carried on the StreamJsonResult —
117
+ * set by the NDJSON detection cascade inside
118
+ * `parseStreamJsonMessage` (the only active detector).
119
+ * 3. Generic exit-code mapping (0 → completed, non-zero → failed).
120
+ *
121
+ * Generic non-zero exit codes surface as `'failed'`; the Animator's
122
+ * back-off machine only reacts to structured rate-limit terminals, and
123
+ * exit-code-based detection was retired because it produced
124
+ * false-positive pauses.
125
+ *
126
+ * Returns the payload status, a human-readable error string (only
127
+ * populated for the failed branches), and the tag that informed the
128
+ * decision (if any). The tag is forwarded to the guild so the Animator's
129
+ * back-off machine can disambiguate rate-limit terminations without
130
+ * pattern-matching on error text.
131
+ */
132
+ export declare function resolveTerminalStatus(result: StreamJsonResult, statusOverride?: 'cancelled'): {
133
+ status: 'completed' | 'failed' | 'cancelled' | 'rate-limited';
134
+ error?: string;
135
+ terminationTag?: SessionTerminationTag;
136
+ };
137
+ /** Maximum number of characters to retain for the diagnostic stderr tail. */
138
+ export declare const STDERR_DIAGNOSTIC_TAIL_LIMIT = 200;
139
+ /**
140
+ * Report the final session result to the guild via the session-record tool.
141
+ *
142
+ * When the resolved terminal status is exactly `'failed'` (non-zero exit,
143
+ * no structured termination tag, no cancel override), attach a passive
144
+ * `terminationDiagnostic: { exitCode, stderrExcerpt? }` to the payload.
145
+ * The diagnostic is informational only — the Animator's back-off
146
+ * machine never consumes it. The stderr excerpt is only present when
147
+ * the caller supplied a non-empty tail.
148
+ *
149
+ * If the guild is unreachable, writes the payload to the DLQ.
150
+ */
151
+ export declare function reportResult(config: BabysitterConfig, result: StreamJsonResult, transcript: Record<string, unknown>[], timeoutMs?: number, statusOverride?: 'cancelled', stderrTail?: string): Promise<void>;
152
+ /**
153
+ * Open a per-session log file and redirect process.stderr.write to it.
154
+ *
155
+ * Creates the logDir (recursive) and opens `<logDir>/<sessionId>.log`
156
+ * for append-writing. Replaces process.stderr.write with a function
157
+ * that calls fs.writeSync on the owned fd. Writes the startup banner
158
+ * as the first line.
159
+ *
160
+ * Returns the owned fd so the caller can close it in a finally block.
161
+ *
162
+ * @internal Exported for testing only.
163
+ */
164
+ export declare function redirectStderrToFile(logDir: string, sessionId: string): number;
165
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}