open-claude-agent-sdk 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +141 -0
  3. package/dist/api/MessageQueue.d.ts +39 -0
  4. package/dist/api/MessageQueue.d.ts.map +1 -0
  5. package/dist/api/MessageQueue.js +90 -0
  6. package/dist/api/MessageQueue.js.map +1 -0
  7. package/dist/api/MessageRouter.d.ts +41 -0
  8. package/dist/api/MessageRouter.d.ts.map +1 -0
  9. package/dist/api/MessageRouter.js +95 -0
  10. package/dist/api/MessageRouter.js.map +1 -0
  11. package/dist/api/ProcessFactory.d.ts +23 -0
  12. package/dist/api/ProcessFactory.d.ts.map +1 -0
  13. package/dist/api/ProcessFactory.js +103 -0
  14. package/dist/api/ProcessFactory.js.map +1 -0
  15. package/dist/api/QueryImpl.d.ts +103 -0
  16. package/dist/api/QueryImpl.d.ts.map +1 -0
  17. package/dist/api/QueryImpl.js +417 -0
  18. package/dist/api/QueryImpl.js.map +1 -0
  19. package/dist/api/query.d.ts +32 -0
  20. package/dist/api/query.d.ts.map +1 -0
  21. package/dist/api/query.js +31 -0
  22. package/dist/api/query.js.map +1 -0
  23. package/dist/core/argBuilder.d.ts +16 -0
  24. package/dist/core/argBuilder.d.ts.map +1 -0
  25. package/dist/core/argBuilder.js +204 -0
  26. package/dist/core/argBuilder.js.map +1 -0
  27. package/dist/core/control.d.ts +66 -0
  28. package/dist/core/control.d.ts.map +1 -0
  29. package/dist/core/control.js +222 -0
  30. package/dist/core/control.js.map +1 -0
  31. package/dist/core/hookConfig.d.ts +31 -0
  32. package/dist/core/hookConfig.d.ts.map +1 -0
  33. package/dist/core/hookConfig.js +45 -0
  34. package/dist/core/hookConfig.js.map +1 -0
  35. package/dist/core/mcpBridge.d.ts +29 -0
  36. package/dist/core/mcpBridge.d.ts.map +1 -0
  37. package/dist/core/mcpBridge.js +71 -0
  38. package/dist/core/mcpBridge.js.map +1 -0
  39. package/dist/core/spawn.d.ts +33 -0
  40. package/dist/core/spawn.d.ts.map +1 -0
  41. package/dist/core/spawn.js +102 -0
  42. package/dist/core/spawn.js.map +1 -0
  43. package/dist/index.d.ts +9 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +9 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/mcp/index.d.ts +6 -0
  48. package/dist/mcp/index.d.ts.map +1 -0
  49. package/dist/mcp/index.js +6 -0
  50. package/dist/mcp/index.js.map +1 -0
  51. package/dist/mcp-entry.d.ts +22 -0
  52. package/dist/mcp-entry.d.ts.map +1 -0
  53. package/dist/mcp-entry.js +22 -0
  54. package/dist/mcp-entry.js.map +1 -0
  55. package/dist/mcp.d.ts +101 -0
  56. package/dist/mcp.d.ts.map +1 -0
  57. package/dist/mcp.js +78 -0
  58. package/dist/mcp.js.map +1 -0
  59. package/dist/query.d.ts +19 -0
  60. package/dist/query.d.ts.map +1 -0
  61. package/dist/query.js +18 -0
  62. package/dist/query.js.map +1 -0
  63. package/dist/tools/index.d.ts +6 -0
  64. package/dist/tools/index.d.ts.map +1 -0
  65. package/dist/tools/index.js +6 -0
  66. package/dist/tools/index.js.map +1 -0
  67. package/dist/types/control.d.ts +149 -0
  68. package/dist/types/control.d.ts.map +1 -0
  69. package/dist/types/control.js +40 -0
  70. package/dist/types/control.js.map +1 -0
  71. package/dist/types/index.d.ts +53 -0
  72. package/dist/types/index.d.ts.map +1 -0
  73. package/dist/types/index.js +11 -0
  74. package/dist/types/index.js.map +1 -0
  75. package/package.json +85 -0
  76. package/src/api/MessageQueue.ts +99 -0
  77. package/src/api/MessageRouter.ts +112 -0
  78. package/src/api/ProcessFactory.ts +124 -0
  79. package/src/api/QueryImpl.ts +543 -0
  80. package/src/api/query.ts +36 -0
  81. package/src/core/argBuilder.ts +236 -0
  82. package/src/core/control.ts +295 -0
  83. package/src/core/hookConfig.ts +70 -0
  84. package/src/core/mcpBridge.ts +81 -0
  85. package/src/core/spawn.ts +125 -0
  86. package/src/index.ts +12 -0
  87. package/src/mcp/index.ts +6 -0
  88. package/src/mcp-entry.ts +22 -0
  89. package/src/mcp.ts +148 -0
  90. package/src/query.ts +21 -0
  91. package/src/tools/README.md +171 -0
  92. package/src/tools/capture-cli.cjs +202 -0
  93. package/src/tools/index.ts +6 -0
  94. package/src/tools/proxy-cli.cjs +162 -0
  95. package/src/types/control.ts +196 -0
  96. package/src/types/index.ts +204 -0
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Query implementation with bidirectional control protocol support
3
+ *
4
+ * Combines AsyncIterableIterator pattern with control methods for:
5
+ * - Multi-turn conversations (streamInput)
6
+ * - Runtime control (interrupt, setPermissionMode, setModel)
7
+ * - Background control protocol handling
8
+ *
9
+ * @internal
10
+ */
11
+ import type { AccountInfo, McpServerConfig, McpServerStatus, McpSetServersResult, ModelInfo, Options, PermissionMode, Query, RewindFilesResult, SDKControlInitializeResponse, SDKMessage, SDKUserMessage, SlashCommand } from '../types/index.ts';
12
+ import { type ProcessFactory } from './ProcessFactory.ts';
13
+ export declare class QueryImpl implements Query {
14
+ private process;
15
+ private messageQueue;
16
+ private controlHandler;
17
+ private router;
18
+ private initResponsePromise;
19
+ private initResolve;
20
+ private initReject;
21
+ private initRequestId;
22
+ private sdkMcpServerNames;
23
+ private isSingleUserTurn;
24
+ private abortController?;
25
+ private closed;
26
+ private abortHandler;
27
+ private pendingControlResponses;
28
+ private constructor();
29
+ /**
30
+ * Factory method — performs all initialization that was previously in the constructor.
31
+ */
32
+ static create(params: {
33
+ prompt: string | AsyncIterable<SDKUserMessage>;
34
+ options?: Options;
35
+ }, processFactory?: ProcessFactory): QueryImpl;
36
+ /**
37
+ * Create an already-aborted QueryImpl (no process spawned).
38
+ */
39
+ private static createAborted;
40
+ /**
41
+ * Connect SDK MCP server bridges (in-process servers with `instance` property).
42
+ */
43
+ private static connectMcpBridges;
44
+ /**
45
+ * Set up process exit/error handlers and abort controller listener.
46
+ */
47
+ private setupProcessHandlers;
48
+ /**
49
+ * Handle incoming message from router
50
+ */
51
+ private handleMessage;
52
+ /**
53
+ * Handle stream completion from router
54
+ */
55
+ private handleDone;
56
+ /**
57
+ * Handle control_response messages from CLI
58
+ * Routes to init promise or pending request/response handlers
59
+ */
60
+ private handleControlResponse;
61
+ next(): Promise<IteratorResult<SDKMessage>>;
62
+ return(_value?: unknown): Promise<IteratorResult<SDKMessage>>;
63
+ throw(e?: unknown): Promise<IteratorResult<SDKMessage>>;
64
+ [Symbol.asyncIterator](): AsyncGenerator<SDKMessage, void>;
65
+ [Symbol.asyncDispose](): Promise<void>;
66
+ interrupt(): Promise<void>;
67
+ setPermissionMode(mode: PermissionMode): Promise<void>;
68
+ setModel(model?: string): Promise<void>;
69
+ setMaxThinkingTokens(maxThinkingTokens: number | null): Promise<void>;
70
+ streamInput(stream: AsyncIterable<SDKUserMessage>): Promise<void>;
71
+ close(): void;
72
+ initializationResult(): Promise<SDKControlInitializeResponse>;
73
+ supportedCommands(): Promise<SlashCommand[]>;
74
+ supportedModels(): Promise<ModelInfo[]>;
75
+ availableOutputStyles(): Promise<string[]>;
76
+ currentOutputStyle(): Promise<string>;
77
+ mcpServerStatus(): Promise<McpServerStatus[]>;
78
+ accountInfo(): Promise<AccountInfo>;
79
+ rewindFiles(_userMessageId: string, _options?: {
80
+ dryRun?: boolean;
81
+ }): Promise<RewindFilesResult>;
82
+ reconnectMcpServer(serverName: string): Promise<void>;
83
+ toggleMcpServer(serverName: string, enabled: boolean): Promise<void>;
84
+ setMcpServers(servers: Record<string, McpServerConfig>): Promise<McpSetServersResult>;
85
+ /**
86
+ * Reject initResponsePromise and all pending control response promises
87
+ */
88
+ private rejectPendingPromises;
89
+ /** Write an NDJSON message to the CLI stdin */
90
+ private writeToStdin;
91
+ /** Build a control_request envelope for the wire */
92
+ private buildControlRequest;
93
+ private sendControlRequest;
94
+ /**
95
+ * Send a control request and return a Promise that resolves when the CLI responds
96
+ */
97
+ private sendControlRequestWithResponse;
98
+ private generateRequestId;
99
+ private sendControlProtocolInit;
100
+ private sendInitialPrompt;
101
+ private consumeInputGenerator;
102
+ }
103
+ //# sourceMappingURL=QueryImpl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryImpl.d.ts","sourceRoot":"","sources":["../../src/api/QueryImpl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,417 @@
1
+ /**
2
+ * Query implementation with bidirectional control protocol support
3
+ *
4
+ * Combines AsyncIterableIterator pattern with control methods for:
5
+ * - Multi-turn conversations (streamInput)
6
+ * - Runtime control (interrupt, setPermissionMode, setModel)
7
+ * - Background control protocol handling
8
+ *
9
+ * @internal
10
+ */
11
+ import { ControlProtocolHandler, ControlRequests, } from "../core/control.js";
12
+ import { buildHookConfig } from "../core/hookConfig.js";
13
+ import { McpServerBridge } from "../core/mcpBridge.js";
14
+ import { MessageType, RequestSubtype, ResponseSubtype } from "../types/control.js";
15
+ import { MessageQueue } from "./MessageQueue.js";
16
+ import { MessageRouter } from "./MessageRouter.js";
17
+ import { DefaultProcessFactory } from "./ProcessFactory.js";
18
+ export class QueryImpl {
19
+ process;
20
+ messageQueue;
21
+ controlHandler;
22
+ router;
23
+ initResponsePromise;
24
+ initResolve;
25
+ initReject;
26
+ initRequestId;
27
+ sdkMcpServerNames;
28
+ isSingleUserTurn;
29
+ abortController;
30
+ closed = false;
31
+ abortHandler = null;
32
+ // Pending control request/response map (for mcpServerStatus, etc.)
33
+ pendingControlResponses = new Map();
34
+ constructor(process, messageQueue, controlHandler, router, initResponsePromise, initResolve, initReject, initRequestId, sdkMcpServerNames, isSingleUserTurn, abortController) {
35
+ this.process = process;
36
+ this.messageQueue = messageQueue;
37
+ this.controlHandler = controlHandler;
38
+ this.router = router;
39
+ this.initResponsePromise = initResponsePromise;
40
+ this.initResolve = initResolve;
41
+ this.initReject = initReject;
42
+ this.initRequestId = initRequestId;
43
+ this.sdkMcpServerNames = sdkMcpServerNames;
44
+ this.isSingleUserTurn = isSingleUserTurn;
45
+ this.abortController = abortController;
46
+ }
47
+ /**
48
+ * Factory method — performs all initialization that was previously in the constructor.
49
+ */
50
+ static create(params, processFactory = new DefaultProcessFactory()) {
51
+ const { prompt, options = {} } = params;
52
+ // Check for pre-aborted signal BEFORE spawning process (save resources)
53
+ if (options.abortController?.signal.aborted) {
54
+ return QueryImpl.createAborted();
55
+ }
56
+ // 1. Spawn process via factory
57
+ const childProcess = processFactory.spawn(options);
58
+ // Validate stdio streams exist (they should with stdio: 'pipe')
59
+ if (!childProcess.stdin || !childProcess.stdout) {
60
+ throw new Error('Process stdin/stdout not available');
61
+ }
62
+ // 2. Initialize message queue
63
+ const messageQueue = new MessageQueue();
64
+ // 3. Initialize control protocol handler
65
+ const controlHandler = new ControlProtocolHandler(childProcess.stdin, options);
66
+ // 3.5. Connect SDK MCP servers (in-process servers with `instance` property)
67
+ const sdkMcpServerNames = [];
68
+ QueryImpl.connectMcpBridges(options, controlHandler, sdkMcpServerNames);
69
+ // 4. Set up init response promise before sending init request
70
+ let initResolve;
71
+ let initReject;
72
+ const initResponsePromise = new Promise((resolve, reject) => {
73
+ initResolve = resolve;
74
+ initReject = reject;
75
+ });
76
+ const initRequestId = `init_${Date.now()}`;
77
+ const isSingleUserTurn = typeof prompt === 'string';
78
+ // 5. Construct instance
79
+ const instance = new QueryImpl(childProcess, messageQueue, controlHandler,
80
+ // router placeholder — set below after constructing with callbacks
81
+ null, initResponsePromise, initResolve, initReject, initRequestId, sdkMcpServerNames, isSingleUserTurn, options.abortController);
82
+ // 6. Initialize message router with callbacks (needs instance for closures)
83
+ instance.router = new MessageRouter(childProcess.stdout, controlHandler, (msg) => instance.handleMessage(msg), (error) => instance.handleDone(error), (response) => instance.handleControlResponse(response));
84
+ // 7. Start background reading
85
+ instance.router.startReading();
86
+ // 8. Send control protocol initialization
87
+ instance.sendControlProtocolInit(options);
88
+ // 9. Handle input based on type
89
+ if (typeof prompt === 'string') {
90
+ instance.sendInitialPrompt(prompt);
91
+ }
92
+ else {
93
+ instance.consumeInputGenerator(prompt);
94
+ }
95
+ // 10. Setup process exit/error handlers + abort listener
96
+ instance.setupProcessHandlers();
97
+ return instance;
98
+ }
99
+ /**
100
+ * Create an already-aborted QueryImpl (no process spawned).
101
+ */
102
+ static createAborted() {
103
+ const messageQueue = new MessageQueue();
104
+ messageQueue.complete();
105
+ const abortError = new Error('Query was aborted before initialization');
106
+ const initResponsePromise = Promise.reject(abortError);
107
+ initResponsePromise.catch(() => { }); // Prevent unhandled rejection
108
+ const instance = new QueryImpl(null, messageQueue, null, null, initResponsePromise, () => { }, () => { }, '', [], false);
109
+ instance.closed = true;
110
+ return instance;
111
+ }
112
+ /**
113
+ * Connect SDK MCP server bridges (in-process servers with `instance` property).
114
+ */
115
+ static connectMcpBridges(options, controlHandler, sdkMcpServerNames) {
116
+ if (!options.mcpServers)
117
+ return;
118
+ const bridges = new Map();
119
+ for (const [name, config] of Object.entries(options.mcpServers)) {
120
+ if ('instance' in config && config.instance) {
121
+ const bridge = new McpServerBridge(config.instance);
122
+ bridge.connect(); // async but we don't await — server connects in background
123
+ bridges.set(name, bridge);
124
+ sdkMcpServerNames.push(name);
125
+ }
126
+ }
127
+ if (bridges.size > 0) {
128
+ controlHandler.setMcpServerBridges(bridges);
129
+ }
130
+ }
131
+ /**
132
+ * Set up process exit/error handlers and abort controller listener.
133
+ */
134
+ setupProcessHandlers() {
135
+ this.process.on('exit', (code) => {
136
+ if (code !== 0 && code !== null && !this.messageQueue.isDone()) {
137
+ const error = new Error(`Claude CLI exited with code ${code}`);
138
+ this.messageQueue.complete(error);
139
+ this.rejectPendingPromises(error);
140
+ }
141
+ else if (!this.messageQueue.isDone()) {
142
+ this.messageQueue.complete();
143
+ this.rejectPendingPromises(new Error('CLI exited before responding'));
144
+ }
145
+ });
146
+ this.process.on('error', (err) => {
147
+ if (!this.messageQueue.isDone()) {
148
+ this.messageQueue.complete(err);
149
+ }
150
+ this.rejectPendingPromises(err);
151
+ });
152
+ if (this.abortController) {
153
+ this.abortHandler = () => {
154
+ this.interrupt();
155
+ };
156
+ this.abortController.signal.addEventListener('abort', this.abortHandler);
157
+ }
158
+ }
159
+ /**
160
+ * Handle incoming message from router
161
+ */
162
+ handleMessage(msg) {
163
+ this.messageQueue.push(msg);
164
+ // For single-turn queries, close stdin on result to signal CLI to exit
165
+ if (msg.type === 'result' && this.isSingleUserTurn) {
166
+ this.process.stdin?.end();
167
+ }
168
+ }
169
+ /**
170
+ * Handle stream completion from router
171
+ */
172
+ handleDone(error) {
173
+ if (!this.messageQueue.isDone()) {
174
+ this.messageQueue.complete(error);
175
+ }
176
+ }
177
+ /**
178
+ * Handle control_response messages from CLI
179
+ * Routes to init promise or pending request/response handlers
180
+ */
181
+ handleControlResponse(response) {
182
+ if (!response)
183
+ return;
184
+ const requestId = response.request_id;
185
+ // Check if this is the init response
186
+ if (requestId === this.initRequestId) {
187
+ if (response.subtype === ResponseSubtype.SUCCESS) {
188
+ this.initResolve(response.response);
189
+ }
190
+ else {
191
+ this.initReject(new Error(`Initialization failed: ${response.error || 'unknown error'}`));
192
+ }
193
+ return;
194
+ }
195
+ // Check if there's a pending request/response handler
196
+ const pending = requestId ? this.pendingControlResponses.get(requestId) : undefined;
197
+ if (pending) {
198
+ const { resolve, reject } = pending;
199
+ this.pendingControlResponses.delete(requestId);
200
+ if (response.subtype === ResponseSubtype.SUCCESS) {
201
+ resolve(response.response);
202
+ }
203
+ else {
204
+ reject(new Error(`Control request failed: ${response.error || 'unknown error'}`));
205
+ }
206
+ }
207
+ }
208
+ // ============================================================================
209
+ // AsyncGenerator implementation
210
+ // ============================================================================
211
+ async next() {
212
+ return this.messageQueue.next();
213
+ }
214
+ async return(_value) {
215
+ this.close();
216
+ return { value: undefined, done: true };
217
+ }
218
+ async throw(e) {
219
+ this.close();
220
+ throw e;
221
+ }
222
+ [Symbol.asyncIterator]() {
223
+ return this;
224
+ }
225
+ async [Symbol.asyncDispose]() {
226
+ this.close();
227
+ }
228
+ // ============================================================================
229
+ // Control methods (12 methods from Query interface)
230
+ // ============================================================================
231
+ async interrupt() {
232
+ this.sendControlRequest(ControlRequests.interrupt());
233
+ }
234
+ async setPermissionMode(mode) {
235
+ this.sendControlRequest(ControlRequests.setPermissionMode(mode));
236
+ }
237
+ async setModel(model) {
238
+ this.sendControlRequest(ControlRequests.setModel(model));
239
+ }
240
+ async setMaxThinkingTokens(maxThinkingTokens) {
241
+ this.sendControlRequest(ControlRequests.setMaxThinkingTokens(maxThinkingTokens));
242
+ }
243
+ async streamInput(stream) {
244
+ for await (const msg of stream) {
245
+ this.writeToStdin(msg);
246
+ }
247
+ }
248
+ close() {
249
+ if (!this.closed) {
250
+ this.closed = true;
251
+ // Clean up abort controller listener
252
+ if (this.abortController && this.abortHandler) {
253
+ this.abortController.signal.removeEventListener('abort', this.abortHandler);
254
+ this.abortHandler = null;
255
+ }
256
+ this.router?.close();
257
+ this.process?.kill();
258
+ if (!this.messageQueue.isDone()) {
259
+ this.messageQueue.complete();
260
+ }
261
+ // Reject any pending control response promises
262
+ this.rejectPendingPromises(new Error('Query closed'));
263
+ }
264
+ }
265
+ async initializationResult() {
266
+ return this.initResponsePromise;
267
+ }
268
+ async supportedCommands() {
269
+ const init = await this.initResponsePromise;
270
+ return init.commands;
271
+ }
272
+ async supportedModels() {
273
+ const init = await this.initResponsePromise;
274
+ return init.models;
275
+ }
276
+ async availableOutputStyles() {
277
+ const init = await this.initResponsePromise;
278
+ return init.available_output_styles;
279
+ }
280
+ async currentOutputStyle() {
281
+ const init = await this.initResponsePromise;
282
+ return init.output_style;
283
+ }
284
+ async mcpServerStatus() {
285
+ const response = await this.sendControlRequestWithResponse(ControlRequests.mcpStatus());
286
+ return response.mcpServers;
287
+ }
288
+ async accountInfo() {
289
+ const init = await this.initResponsePromise;
290
+ return init.account;
291
+ }
292
+ async rewindFiles(_userMessageId, _options) {
293
+ throw new Error('rewindFiles() not yet implemented');
294
+ }
295
+ async reconnectMcpServer(serverName) {
296
+ await this.sendControlRequestWithResponse(ControlRequests.mcpReconnect(serverName));
297
+ }
298
+ async toggleMcpServer(serverName, enabled) {
299
+ await this.sendControlRequestWithResponse(ControlRequests.mcpToggle(serverName, enabled));
300
+ }
301
+ async setMcpServers(servers) {
302
+ return this.sendControlRequestWithResponse(ControlRequests.mcpSetServers(servers));
303
+ }
304
+ // ============================================================================
305
+ // Private helpers
306
+ // ============================================================================
307
+ /**
308
+ * Reject initResponsePromise and all pending control response promises
309
+ */
310
+ rejectPendingPromises(error) {
311
+ this.initReject?.(error);
312
+ for (const [, { reject }] of this.pendingControlResponses) {
313
+ reject(error);
314
+ }
315
+ this.pendingControlResponses.clear();
316
+ }
317
+ /** Write an NDJSON message to the CLI stdin */
318
+ writeToStdin(msg) {
319
+ this.process.stdin?.write(`${JSON.stringify(msg)}\n`);
320
+ }
321
+ /** Build a control_request envelope for the wire */
322
+ buildControlRequest(request, requestId) {
323
+ return {
324
+ type: MessageType.CONTROL_REQUEST,
325
+ request_id: requestId ?? this.generateRequestId(),
326
+ request,
327
+ };
328
+ }
329
+ sendControlRequest(request) {
330
+ this.writeToStdin(this.buildControlRequest(request));
331
+ }
332
+ /**
333
+ * Send a control request and return a Promise that resolves when the CLI responds
334
+ */
335
+ // biome-ignore lint/suspicious/noExplicitAny: response shape varies by request type
336
+ sendControlRequestWithResponse(request) {
337
+ if (this.closed) {
338
+ return Promise.reject(new Error('Cannot send control request: query is closed'));
339
+ }
340
+ const envelope = this.buildControlRequest(request);
341
+ const promise = new Promise((resolve, reject) => {
342
+ this.pendingControlResponses.set(envelope.request_id, { resolve, reject });
343
+ });
344
+ this.writeToStdin(envelope);
345
+ return promise;
346
+ }
347
+ generateRequestId() {
348
+ return `req_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
349
+ }
350
+ async sendControlProtocolInit(options) {
351
+ const requestId = `init_${Date.now()}`;
352
+ this.initRequestId = requestId;
353
+ // Resolve systemPrompt to match official SDK behavior:
354
+ // - undefined → systemPrompt: "" (use minimal prompt, saves tokens)
355
+ // - string → systemPrompt: "..." (custom full prompt)
356
+ // - { type: 'preset', preset: 'claude_code' } → neither field (use claude_code preset)
357
+ // - { type: 'preset', preset: 'claude_code', append: '...' } → appendSystemPrompt: "..."
358
+ let systemPrompt;
359
+ let appendSystemPrompt;
360
+ if (options.systemPrompt === undefined) {
361
+ systemPrompt = '';
362
+ }
363
+ else if (typeof options.systemPrompt === 'string') {
364
+ systemPrompt = options.systemPrompt;
365
+ }
366
+ else if (options.systemPrompt.type === 'preset' && options.systemPrompt.append) {
367
+ appendSystemPrompt = options.systemPrompt.append;
368
+ }
369
+ const request = {
370
+ subtype: RequestSubtype.INITIALIZE,
371
+ ...(systemPrompt !== undefined && { systemPrompt }),
372
+ ...(appendSystemPrompt !== undefined && { appendSystemPrompt }),
373
+ ...(this.sdkMcpServerNames.length > 0 && { sdkMcpServers: this.sdkMcpServerNames }),
374
+ ...(options.agents && { agents: options.agents }),
375
+ };
376
+ // Register hooks if configured
377
+ if (options.hooks) {
378
+ request.hooks = buildHookConfig(options.hooks, this.controlHandler);
379
+ }
380
+ const init = {
381
+ type: MessageType.CONTROL_REQUEST,
382
+ request_id: requestId,
383
+ request,
384
+ };
385
+ if (process.env.DEBUG_HOOKS) {
386
+ console.error('[DEBUG] Sending control protocol init:', JSON.stringify(init, null, 2));
387
+ }
388
+ this.writeToStdin(init);
389
+ }
390
+ sendInitialPrompt(prompt) {
391
+ const initialMessage = {
392
+ type: 'user',
393
+ message: {
394
+ role: 'user',
395
+ content: [{ type: 'text', text: prompt }],
396
+ },
397
+ session_id: '',
398
+ parent_tool_use_id: null,
399
+ };
400
+ this.writeToStdin(initialMessage);
401
+ }
402
+ async consumeInputGenerator(generator) {
403
+ try {
404
+ for await (const userMsg of generator) {
405
+ this.writeToStdin(userMsg);
406
+ }
407
+ }
408
+ catch (error) {
409
+ const wrappedError = error instanceof Error ? error : new Error(String(error));
410
+ console.error('[QueryImpl] Error consuming input generator:', wrappedError);
411
+ if (!this.messageQueue.isDone()) {
412
+ this.messageQueue.complete(wrappedError);
413
+ }
414
+ }
415
+ }
416
+ }
417
+ //# sourceMappingURL=QueryImpl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryImpl.js","sourceRoot":"","sources":["../../src/api/QueryImpl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Main query implementation - spawns Claude CLI and streams messages
3
+ *
4
+ * Reference: https://buildwithaws.substack.com/p/inside-the-claude-agent-sdk-from
5
+ */
6
+ import type { Options, Query, SDKUserMessage } from '../types/index.ts';
7
+ /**
8
+ * Main query function - returns Query interface with control methods
9
+ *
10
+ * Features:
11
+ * - AsyncGenerator for streaming messages
12
+ * - Control methods: interrupt(), setPermissionMode(), setModel(), etc.
13
+ * - Multi-turn conversations via streamInput() OR AsyncIterable input
14
+ * - Permission callbacks via options.canUseTool
15
+ * - Hook callbacks via options.hooks
16
+ *
17
+ * Input modes:
18
+ * - String: Simple one-shot or multi-turn via streamInput()
19
+ * - AsyncIterable: Streaming input mode (recommended for complex flows)
20
+ *
21
+ * Tip: Cast to ExtendedQuery to access extra convenience methods:
22
+ * const q = query({ prompt: '...' }) as ExtendedQuery;
23
+ * const styles = await q.availableOutputStyles();
24
+ *
25
+ * @param params Query parameters (prompt and options)
26
+ * @returns Query interface (AsyncGenerator + control methods)
27
+ */
28
+ export declare function query(params: {
29
+ prompt: string | AsyncIterable<SDKUserMessage>;
30
+ options?: Options;
31
+ }): Query;
32
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/api/query.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE;IAC5B,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,KAAK,CAER"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Main query implementation - spawns Claude CLI and streams messages
3
+ *
4
+ * Reference: https://buildwithaws.substack.com/p/inside-the-claude-agent-sdk-from
5
+ */
6
+ import { QueryImpl } from "./QueryImpl.js";
7
+ /**
8
+ * Main query function - returns Query interface with control methods
9
+ *
10
+ * Features:
11
+ * - AsyncGenerator for streaming messages
12
+ * - Control methods: interrupt(), setPermissionMode(), setModel(), etc.
13
+ * - Multi-turn conversations via streamInput() OR AsyncIterable input
14
+ * - Permission callbacks via options.canUseTool
15
+ * - Hook callbacks via options.hooks
16
+ *
17
+ * Input modes:
18
+ * - String: Simple one-shot or multi-turn via streamInput()
19
+ * - AsyncIterable: Streaming input mode (recommended for complex flows)
20
+ *
21
+ * Tip: Cast to ExtendedQuery to access extra convenience methods:
22
+ * const q = query({ prompt: '...' }) as ExtendedQuery;
23
+ * const styles = await q.availableOutputStyles();
24
+ *
25
+ * @param params Query parameters (prompt and options)
26
+ * @returns Query interface (AsyncGenerator + control methods)
27
+ */
28
+ export function query(params) {
29
+ return QueryImpl.create(params);
30
+ }
31
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/api/query.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,KAAK,CAAC,MAGrB;IACC,OAAO,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * CLI argument builder
3
+ *
4
+ * Builds command-line arguments for spawning Claude CLI process.
5
+ * Transforms Options object into the argument array expected by CLI.
6
+ *
7
+ * Simple options are declared in FLAG_MAP (option key → CLI flag).
8
+ * Complex options with validation or transformation logic are handled explicitly below.
9
+ *
10
+ * @internal
11
+ */
12
+ import type { Options } from '../types/index.ts';
13
+ export declare function buildCliArgs(options: Options & {
14
+ prompt?: string;
15
+ }): string[];
16
+ //# sourceMappingURL=argBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"argBuilder.d.ts","sourceRoot":"","sources":["../../src/core/argBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AA4GjD,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,EAAE,CAmH7E"}