@grackle-ai/runtime-claude-code 0.82.2

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.
@@ -0,0 +1,13 @@
1
+ import type { AgentEvent, AgentSession } from "@grackle-ai/runtime-sdk";
2
+ import { BaseAgentRuntime } from "@grackle-ai/runtime-sdk";
3
+ /** @internal Map a raw Claude Agent SDK message to Grackle AgentEvent(s). Exported for testing. */
4
+ export declare function mapMessage(msg: Record<string, unknown>): AgentEvent[];
5
+ /** Runtime that delegates to the Claude Code SDK (`@anthropic-ai/claude-agent-sdk`). */
6
+ export declare class ClaudeCodeRuntime extends BaseAgentRuntime {
7
+ name: string;
8
+ protected createSession(id: string, prompt: string, model: string, maxTurns: number, resumeSessionId?: string, branch?: string, workingDirectory?: string, systemContext?: string, mcpServers?: Record<string, unknown>, hooks?: Record<string, unknown>, mcpBroker?: {
9
+ url: string;
10
+ token: string;
11
+ }, useWorktrees?: boolean): AgentSession;
12
+ }
13
+ //# sourceMappingURL=claude-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../src/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAoB,gBAAgB,EAA6G,MAAM,yBAAyB,CAAC;AAmCxL,mGAAmG;AACnG,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,EAAE,CAiDrE;AAucD,wFAAwF;AACxF,qBAAa,iBAAkB,SAAQ,gBAAgB;IAC9C,IAAI,EAAE,MAAM,CAAiB;IAEpC,SAAS,CAAC,aAAa,CACrB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,eAAe,CAAC,EAAE,MAAM,EACxB,MAAM,CAAC,EAAE,MAAM,EACf,gBAAgB,CAAC,EAAE,MAAM,EACzB,aAAa,CAAC,EAAE,MAAM,EACtB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,SAAS,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAC1C,YAAY,CAAC,EAAE,OAAO,GACrB,YAAY;CAGhB"}
@@ -0,0 +1,473 @@
1
+ import { BaseAgentSession, BaseAgentRuntime, AsyncQueue, resolveWorkingDirectory, resolveMcpServers, logger, ensureRuntimeInstalled, importFromRuntime } from "@grackle-ai/runtime-sdk";
2
+ import { accessSync, mkdirSync, copyFileSync, chmodSync, constants as fsConstants } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { homedir, tmpdir } from "node:os";
5
+ let queryFn = undefined;
6
+ async function getQuery() {
7
+ if (queryFn)
8
+ return queryFn;
9
+ await ensureRuntimeInstalled("claude-code");
10
+ // Try the agent SDK first (the proper library package)
11
+ const errors = [];
12
+ for (const pkg of ["@anthropic-ai/claude-agent-sdk", "@anthropic-ai/claude-code"]) {
13
+ try {
14
+ const mod = await importFromRuntime("claude-code", pkg);
15
+ if (typeof mod.query === "function") {
16
+ queryFn = mod.query;
17
+ return queryFn;
18
+ }
19
+ }
20
+ catch (err) {
21
+ logger.warn({ err, package: pkg }, "Failed to import Claude runtime package");
22
+ errors.push({ package: pkg, error: err });
23
+ }
24
+ }
25
+ const details = errors
26
+ .map((e) => ` ${e.package}: ${e.error instanceof Error ? e.error.message : String(e.error)}`)
27
+ .join("\n");
28
+ throw new Error(`Claude Agent SDK not installed or failed to load.\n${details}\n`
29
+ + `Run: npm install @anthropic-ai/claude-agent-sdk`);
30
+ }
31
+ /** @internal Map a raw Claude Agent SDK message to Grackle AgentEvent(s). Exported for testing. */
32
+ export function mapMessage(msg) {
33
+ const ts = new Date().toISOString();
34
+ const type = msg.type;
35
+ // SDK streaming format: { type: "assistant", message: { role, content: [...] } }
36
+ if (type === "assistant") {
37
+ const inner = msg.message;
38
+ const content = inner?.content;
39
+ if (Array.isArray(content)) {
40
+ const events = [];
41
+ for (const block of content) {
42
+ const b = block;
43
+ if (b.type === "text") {
44
+ events.push({ type: "text", timestamp: ts, content: b.text, raw: b });
45
+ }
46
+ else if (b.type === "tool_use") {
47
+ events.push({
48
+ type: "tool_use",
49
+ timestamp: ts,
50
+ content: JSON.stringify({ tool: b.name, args: b.input }),
51
+ raw: b,
52
+ });
53
+ }
54
+ else if (b.type === "tool_result") {
55
+ events.push({
56
+ type: "tool_result",
57
+ timestamp: ts,
58
+ content: typeof b.content === "string" ? b.content : JSON.stringify(b.content),
59
+ raw: b,
60
+ });
61
+ }
62
+ }
63
+ return events;
64
+ }
65
+ return [];
66
+ }
67
+ if (type === "result") {
68
+ // result messages are handled in consumeQuery() for error checking; skip here
69
+ return [];
70
+ }
71
+ if (type === "system") {
72
+ const subtype = msg.subtype;
73
+ if (subtype === "init") {
74
+ return [{ type: "system", timestamp: ts, content: `Session initialized (${msg.model ? String(msg.model) : "unknown model"})`, raw: msg }];
75
+ }
76
+ return [];
77
+ }
78
+ return [];
79
+ }
80
+ /** Built-in Claude Code tools that must be explicitly listed in allowedTools. */
81
+ const BUILTIN_TOOLS = [
82
+ "Bash", "Read", "Write", "Edit", "Glob", "Grep",
83
+ "WebSearch", "WebFetch", "Task", "NotebookEdit",
84
+ ];
85
+ /** Agent session backed by the Claude Agent SDK (`@anthropic-ai/claude-agent-sdk`). */
86
+ class ClaudeCodeSession extends BaseAgentSession {
87
+ runtimeName = "claude-code";
88
+ runtimeDisplayName = "Claude Code";
89
+ noMessagesError = "Claude Code returned no messages. Is ANTHROPIC_API_KEY set or ~/.claude/.credentials.json mounted?";
90
+ /** The active AbortController for the current query(), used to cancel on kill. */
91
+ activeAbort;
92
+ /** Cached SDK options built once during setupSdk(), reused for follow-up queries. */
93
+ cachedSdkOptions;
94
+ // ─── Persistent process mode ────────────────────────────────
95
+ // When active, ONE query() stays alive across multiple turns. The SDK's
96
+ // AsyncIterable prompt mode keeps the process running and waiting for input.
97
+ /** The persistent Query object (AsyncGenerator). Null when using resume-per-input. */
98
+ persistentQuery;
99
+ /** Input queue fed to the SDK as AsyncIterable prompt — pushing yields new turns. */
100
+ promptQueue;
101
+ /** Resolves when the current turn's response is complete (result message received). */
102
+ turnCompleteResolve;
103
+ /** System context is injected via sdkOptions.systemPrompt, not prepended to the prompt. */
104
+ buildInitialPrompt() {
105
+ return this.prompt;
106
+ }
107
+ // ─── BaseAgentSession hooks ──────────────────────────────
108
+ async setupSdk() {
109
+ // Determine cwd: worktree > /workspace > default
110
+ const cwd = await resolveWorkingDirectory({
111
+ branch: this.branch,
112
+ workingDirectory: this.workingDirectory,
113
+ useWorktrees: this.useWorktrees,
114
+ eventQueue: this.eventQueue,
115
+ requireNonEmpty: true,
116
+ });
117
+ // SDK query() expects { prompt, options: { model, mcpServers, ... } }
118
+ // Both permissionMode AND allowDangerouslySkipPermissions are needed for full bypass.
119
+ // Built-in tools must also be in allowedTools explicitly — the SDK treats allowedTools
120
+ // as a whitelist that overrides permissionMode for tool-level checks.
121
+ const sdkOptions = {
122
+ model: this.model,
123
+ permissionMode: "bypassPermissions",
124
+ allowDangerouslySkipPermissions: true,
125
+ allowedTools: [...BUILTIN_TOOLS],
126
+ settingSources: ["project"],
127
+ ...(cwd ? { cwd } : {}),
128
+ };
129
+ // Load MCP server config from env var or SpawnOptions.
130
+ // resolveMcpServers() injects the Grackle MCP server entry. When broker config is
131
+ // available, it uses HTTP (url + headers). The Claude Agent SDK supports both stdio
132
+ // (command/args) and HTTP (url/headers) MCP server configs.
133
+ const mcpConfig = resolveMcpServers(this.mcpServers, this.mcpBroker);
134
+ if (mcpConfig.servers) {
135
+ sdkOptions.mcpServers = mcpConfig.servers;
136
+ }
137
+ if (mcpConfig.disallowedTools.length > 0) {
138
+ sdkOptions.disallowedTools = mcpConfig.disallowedTools;
139
+ }
140
+ // Add MCP tool patterns to allowedTools
141
+ if (sdkOptions.mcpServers) {
142
+ const mcpServerNames = Object.keys(sdkOptions.mcpServers);
143
+ const mcpTools = mcpServerNames.map(name => `mcp__${name}__*`);
144
+ sdkOptions.allowedTools.push(...mcpTools);
145
+ }
146
+ // Inject system context via SDK-native systemPrompt (appended to Claude Code's built-in prompt)
147
+ if (this.systemContext) {
148
+ sdkOptions.systemPrompt = { preset: "claude_code", append: this.systemContext };
149
+ }
150
+ if (this.maxTurns > 0) {
151
+ sdkOptions.maxTurns = this.maxTurns;
152
+ }
153
+ // Pass through caller-provided hooks (e.g. Stop hooks for PR readiness).
154
+ // Consumers supply their own hooks via SpawnOptions; the runtime does not
155
+ // bundle any platform-specific hook implementations.
156
+ if (this.hooks) {
157
+ sdkOptions.hooks = this.hooks;
158
+ }
159
+ // Ensure the SDK session storage directory is writable so that multi-turn
160
+ // conversations can be resumed. If ~/.claude is read-only (common in Docker
161
+ // with bind-mounted host config), redirect session writes via CLAUDE_CONFIG_DIR.
162
+ const configDir = process.env.CLAUDE_CONFIG_DIR || join(homedir(), ".claude");
163
+ const projectsDir = join(configDir, "projects");
164
+ // Attempt to create the projects directory if it does not exist yet so
165
+ // that a missing dir (ENOENT) is not mistaken for a read-only filesystem.
166
+ try {
167
+ mkdirSync(projectsDir, { recursive: true });
168
+ }
169
+ catch { /* handled below */ }
170
+ if (!isDirectoryWritable(projectsDir)) {
171
+ const fallbackRoot = join(tmpdir(), ".claude-sdk");
172
+ const fallbackProjects = join(fallbackRoot, "projects");
173
+ try {
174
+ mkdirSync(fallbackProjects, { recursive: true });
175
+ if (isDirectoryWritable(fallbackProjects)) {
176
+ // Copy credential/config files so the SDK can authenticate from
177
+ // the fallback directory (it reads .credentials.json from CLAUDE_CONFIG_DIR).
178
+ for (const file of [".credentials.json", "settings.json", "settings.local.json"]) {
179
+ try {
180
+ copyFileSync(join(configDir, file), join(fallbackRoot, file));
181
+ if (file === ".credentials.json") {
182
+ chmodSync(join(fallbackRoot, file), 0o600);
183
+ }
184
+ }
185
+ catch { /* missing is fine */ }
186
+ }
187
+ sdkOptions.env = { ...process.env, CLAUDE_CONFIG_DIR: fallbackRoot };
188
+ logger.warn({ configDir, fallback: fallbackRoot }, "Claude config directory is read-only — redirecting session writes to writable fallback");
189
+ }
190
+ else {
191
+ logger.warn({ configDir }, "Claude config directory is read-only and no writable fallback available — multi-turn conversations will fail");
192
+ }
193
+ }
194
+ catch (err) {
195
+ logger.warn({ configDir, err }, "Failed to create writable fallback for Claude config — multi-turn conversations will fail");
196
+ }
197
+ }
198
+ this.cachedSdkOptions = sdkOptions;
199
+ }
200
+ async setupForResume() {
201
+ this.eventQueue.push({
202
+ type: "system",
203
+ timestamp: new Date().toISOString(),
204
+ content: `Session resumed (id: ${this.resumeSessionId})`,
205
+ });
206
+ }
207
+ async runInitialQuery(prompt) {
208
+ if (!prompt) {
209
+ // No initial prompt (e.g. System task) — skip the query and wait for
210
+ // the first user message, which will be handled as an initial query
211
+ // in executeFollowUp(). Return 1 so the base class does not emit the
212
+ // misleading noMessagesError.
213
+ return 1;
214
+ }
215
+ return this.startPersistentQuery(prompt);
216
+ }
217
+ async executeFollowUp(text) {
218
+ if (this.promptQueue) {
219
+ // Persistent mode: push into live AsyncIterable prompt queue
220
+ await this.sendToPersistentQuery(text);
221
+ }
222
+ else if (this.runtimeSessionId) {
223
+ // Resume-per-input fallback (resumed sessions, or persistent query failed to start)
224
+ const resumeOptions = { ...this.cachedSdkOptions, resume: this.runtimeSessionId };
225
+ await this.consumeQuery(text, resumeOptions);
226
+ }
227
+ else {
228
+ // No prior session (first message after empty-prompt start) — start persistent query
229
+ await this.startPersistentQuery(text);
230
+ }
231
+ }
232
+ canAcceptInput() {
233
+ // Allow input even without runtimeSessionId — the first sendInput after
234
+ // an empty-prompt start acts as the initial query.
235
+ return !!this.cachedSdkOptions;
236
+ }
237
+ abortActive() {
238
+ if (this.activeAbort) {
239
+ this.activeAbort.abort();
240
+ }
241
+ // Close the prompt queue (ends the AsyncIterable → SDK exits)
242
+ if (this.promptQueue) {
243
+ this.promptQueue.close();
244
+ }
245
+ // Close the persistent query if it has a close method
246
+ const pq = this.persistentQuery;
247
+ if (pq?.close) {
248
+ pq.close();
249
+ }
250
+ }
251
+ releaseResources() {
252
+ this.persistentQuery = undefined;
253
+ this.promptQueue = undefined;
254
+ this.turnCompleteResolve = undefined;
255
+ }
256
+ // ─── Persistent process mode ─────────────────────────────
257
+ /**
258
+ * Start a persistent query using AsyncIterable prompt mode. The SDK process
259
+ * stays alive across multiple turns. Follow-up messages are sent via
260
+ * the Query's streamInput() method.
261
+ */
262
+ async startPersistentQuery(initialPrompt) {
263
+ const query = await getQuery();
264
+ const abort = new AbortController();
265
+ this.activeAbort = abort;
266
+ try {
267
+ // Create a prompt queue — the SDK reads from this AsyncIterable and keeps
268
+ // the process alive waiting for the next yield. Push messages to deliver them.
269
+ this.promptQueue = new AsyncQueue();
270
+ // Push the initial user message
271
+ this.promptQueue.push({
272
+ type: "user",
273
+ message: { role: "user", content: [{ type: "text", text: initialPrompt }] },
274
+ });
275
+ // Start query with AsyncIterable prompt — process stays alive
276
+ const queryInput = {
277
+ prompt: this.promptQueue,
278
+ options: { ...this.cachedSdkOptions, abortController: abort },
279
+ };
280
+ const conversation = query(queryInput);
281
+ this.persistentQuery = conversation;
282
+ // Start background consumer that reads ALL messages from the persistent query
283
+ // and pushes them to the event queue. This runs for the lifetime of the query.
284
+ this.consumePersistentStream(conversation).catch((err) => {
285
+ if (!this.killed) {
286
+ logger.warn({ err }, "Persistent query stream ended unexpectedly");
287
+ }
288
+ // Unblock any pending waitForTurnComplete so the input loop can recover
289
+ this.turnCompleteResolve?.();
290
+ // Clear persistent state so follow-ups fall back to resume-per-input
291
+ this.promptQueue = undefined;
292
+ this.persistentQuery = undefined;
293
+ });
294
+ // Wait for the first turn to complete (result message)
295
+ return this.waitForTurnComplete();
296
+ }
297
+ catch (err) {
298
+ // Persistent mode failed — fall back to resume-per-input
299
+ logger.warn({ err }, "Persistent process mode failed — falling back to resume-per-input");
300
+ this.promptQueue = undefined;
301
+ this.persistentQuery = undefined;
302
+ return this.consumeQuery(initialPrompt, this.cachedSdkOptions);
303
+ }
304
+ }
305
+ /**
306
+ * Send a follow-up message to the persistent query by pushing into the prompt queue.
307
+ * The SDK process picks it up immediately (no restart). Blocks until the turn completes.
308
+ */
309
+ async sendToPersistentQuery(text) {
310
+ if (!this.promptQueue) {
311
+ throw new Error("No active prompt queue for persistent query");
312
+ }
313
+ // Push user message into the prompt queue — SDK reads it from the AsyncIterable
314
+ this.promptQueue.push({
315
+ type: "user",
316
+ message: { role: "user", content: [{ type: "text", text }] },
317
+ });
318
+ // Wait for this turn's response to complete
319
+ await this.waitForTurnComplete();
320
+ }
321
+ /**
322
+ * Background consumer for the persistent query stream. Reads messages
323
+ * and pushes events to the queue for the lifetime of the query.
324
+ * Signals turn completion via turnCompleteResolve when a result message arrives.
325
+ */
326
+ async consumePersistentStream(conversation) {
327
+ const ts = () => new Date().toISOString();
328
+ for await (const msg of conversation) {
329
+ if (this.killed) {
330
+ break;
331
+ }
332
+ // Extract session ID from system init message
333
+ if (msg.type === "system" && msg.session_id) {
334
+ const wasEmpty = !this.runtimeSessionId;
335
+ this.runtimeSessionId = msg.session_id;
336
+ if (wasEmpty) {
337
+ this.eventQueue.push({ type: "runtime_session_id", timestamp: ts(), content: this.runtimeSessionId });
338
+ }
339
+ }
340
+ // Check for result errors
341
+ if (msg.type === "result" && msg.is_error) {
342
+ const errorMsg = msg.result || "Claude Code returned an error";
343
+ this.eventQueue.push({ type: "error", timestamp: ts(), content: errorMsg, raw: msg });
344
+ }
345
+ // Extract usage data from successful result messages
346
+ if (msg.type === "result" && !msg.is_error) {
347
+ const usage = msg.usage;
348
+ const costUsd = msg.total_cost_usd;
349
+ if (usage !== undefined || costUsd !== undefined) {
350
+ const totalInput = (usage?.input_tokens ?? 0)
351
+ + (usage?.cache_read_input_tokens ?? 0)
352
+ + (usage?.cache_creation_input_tokens ?? 0);
353
+ this.eventQueue.push({
354
+ type: "usage",
355
+ timestamp: ts(),
356
+ content: JSON.stringify({
357
+ input_tokens: totalInput,
358
+ output_tokens: (usage?.output_tokens ?? 0),
359
+ cost_usd: (costUsd ?? 0),
360
+ }),
361
+ });
362
+ }
363
+ }
364
+ // Map SDK messages to Grackle events
365
+ const events = mapMessage(msg);
366
+ for (const event of events) {
367
+ this.eventQueue.push(event);
368
+ }
369
+ // Signal turn completion on result message
370
+ if (msg.type === "result") {
371
+ this.turnCompleteResolve?.();
372
+ }
373
+ }
374
+ // Stream ended — resolve any pending turn wait and clear persistent state
375
+ // so follow-ups fall back to resume-per-input instead of trying to push
376
+ // into a dead prompt queue.
377
+ this.turnCompleteResolve?.();
378
+ this.promptQueue = undefined;
379
+ this.persistentQuery = undefined;
380
+ }
381
+ /** Wait for the current turn to complete (result message received from SDK). */
382
+ waitForTurnComplete() {
383
+ return new Promise((resolve) => {
384
+ this.turnCompleteResolve = () => {
385
+ this.turnCompleteResolve = undefined;
386
+ resolve(1);
387
+ };
388
+ });
389
+ }
390
+ // ─── Resume-per-input fallback ──────────────────────────
391
+ /**
392
+ * Consume all messages from a query() conversation, pushing events to the queue.
393
+ * Returns the number of meaningful messages processed.
394
+ * Used as fallback when persistent mode is not available (resume-per-input).
395
+ */
396
+ async consumeQuery(prompt, sdkOptions) {
397
+ const query = await getQuery();
398
+ const ts = () => new Date().toISOString();
399
+ // Each query gets its own AbortController
400
+ const abort = new AbortController();
401
+ this.activeAbort = abort;
402
+ const queryInput = {
403
+ prompt,
404
+ options: { ...sdkOptions, abortController: abort },
405
+ };
406
+ const conversation = query(queryInput);
407
+ let messageCount = 0;
408
+ for await (const msg of conversation) {
409
+ if (this.killed) {
410
+ break;
411
+ }
412
+ // Extract session ID from system init message
413
+ if (msg.type === "system" && msg.session_id) {
414
+ const wasEmpty = !this.runtimeSessionId;
415
+ this.runtimeSessionId = msg.session_id;
416
+ if (wasEmpty) {
417
+ this.eventQueue.push({ type: "runtime_session_id", timestamp: ts(), content: this.runtimeSessionId });
418
+ }
419
+ }
420
+ // Check for result errors (e.g. invalid API key)
421
+ if (msg.type === "result" && msg.is_error) {
422
+ const errorMsg = msg.result || "Claude Code returned an error";
423
+ this.eventQueue.push({ type: "error", timestamp: ts(), content: errorMsg, raw: msg });
424
+ continue;
425
+ }
426
+ // Extract usage data from successful result messages
427
+ if (msg.type === "result" && !msg.is_error) {
428
+ const usage = msg.usage;
429
+ const costUsd = msg.total_cost_usd;
430
+ if (usage !== undefined || costUsd !== undefined) {
431
+ // Total input includes non-cached + cache reads + cache creation
432
+ const totalInput = (usage?.input_tokens ?? 0)
433
+ + (usage?.cache_read_input_tokens ?? 0)
434
+ + (usage?.cache_creation_input_tokens ?? 0);
435
+ this.eventQueue.push({
436
+ type: "usage",
437
+ timestamp: ts(),
438
+ content: JSON.stringify({
439
+ input_tokens: totalInput,
440
+ output_tokens: (usage?.output_tokens ?? 0),
441
+ cost_usd: (costUsd ?? 0),
442
+ }),
443
+ });
444
+ }
445
+ }
446
+ const events = mapMessage(msg);
447
+ for (const event of events) {
448
+ messageCount++;
449
+ this.eventQueue.push(event);
450
+ }
451
+ }
452
+ return messageCount;
453
+ }
454
+ }
455
+ /** Check if a directory exists and is writable (with execute permission to create entries). */
456
+ function isDirectoryWritable(dir) {
457
+ try {
458
+ // eslint-disable-next-line no-bitwise -- fs constants are bitmask flags
459
+ accessSync(dir, fsConstants.W_OK | fsConstants.X_OK);
460
+ return true;
461
+ }
462
+ catch {
463
+ return false;
464
+ }
465
+ }
466
+ /** Runtime that delegates to the Claude Code SDK (`@anthropic-ai/claude-agent-sdk`). */
467
+ export class ClaudeCodeRuntime extends BaseAgentRuntime {
468
+ name = "claude-code";
469
+ createSession(id, prompt, model, maxTurns, resumeSessionId, branch, workingDirectory, systemContext, mcpServers, hooks, mcpBroker, useWorktrees) {
470
+ return new ClaudeCodeSession(id, prompt, model, maxTurns, resumeSessionId, branch, workingDirectory, systemContext, mcpServers, hooks, mcpBroker, useWorktrees);
471
+ }
472
+ }
473
+ //# sourceMappingURL=claude-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../src/claude-code.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { ClaudeCodeRuntime } from "./claude-code.js";
2
+ export { mapMessage } from "./claude-code.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { ClaudeCodeRuntime } from "./claude-code.js";
2
+ export { mapMessage } from "./claude-code.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,11 @@
1
+ // This file is read by tools that parse documentation comments conforming to the TSDoc standard.
2
+ // It should be published with your NPM package. It should not be tracked by Git.
3
+ {
4
+ "tsdocVersion": "0.12",
5
+ "toolPackages": [
6
+ {
7
+ "packageName": "@microsoft/api-extractor",
8
+ "packageVersion": "7.57.7"
9
+ }
10
+ ]
11
+ }
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@grackle-ai/runtime-claude-code",
3
+ "version": "0.82.2",
4
+ "description": "Grackle Claude Code runtime implementation",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/nick-pape/grackle.git",
9
+ "directory": "packages/runtime-claude-code"
10
+ },
11
+ "keywords": [
12
+ "grackle",
13
+ "runtime",
14
+ "claude-code",
15
+ "anthropic"
16
+ ],
17
+ "homepage": "https://github.com/nick-pape/grackle#readme",
18
+ "bugs": {
19
+ "url": "https://github.com/nick-pape/grackle/issues"
20
+ },
21
+ "engines": {
22
+ "node": ">=22.0.0"
23
+ },
24
+ "type": "module",
25
+ "main": "dist/index.js",
26
+ "types": "dist/index.d.ts",
27
+ "files": [
28
+ "dist/"
29
+ ],
30
+ "dependencies": {
31
+ "@grackle-ai/runtime-sdk": "0.82.2",
32
+ "@grackle-ai/common": "0.82.2"
33
+ },
34
+ "devDependencies": {
35
+ "@rushstack/heft": "1.2.7",
36
+ "@types/node": "^22.0.0",
37
+ "vitest": "^3.1.1",
38
+ "@grackle-ai/heft-rig": "0.0.1"
39
+ },
40
+ "scripts": {
41
+ "build": "heft build --clean",
42
+ "test": "vitest run",
43
+ "clean": "heft clean",
44
+ "_phase:build": "heft run --only build -- --clean",
45
+ "_phase:test": "vitest run"
46
+ }
47
+ }