@scottwalker/claude-connector 0.2.0 → 0.4.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 +249 -21
- package/dist/builder/args-builder.d.ts +2 -1
- package/dist/builder/args-builder.d.ts.map +1 -1
- package/dist/builder/args-builder.js +38 -31
- package/dist/builder/args-builder.js.map +1 -1
- package/dist/client/chat-handle.d.ts +115 -0
- package/dist/client/chat-handle.d.ts.map +1 -0
- package/dist/client/chat-handle.js +246 -0
- package/dist/client/chat-handle.js.map +1 -0
- package/dist/client/claude.d.ts +96 -55
- package/dist/client/claude.d.ts.map +1 -1
- package/dist/client/claude.js +192 -46
- package/dist/client/claude.js.map +1 -1
- package/dist/client/session.d.ts +4 -2
- package/dist/client/session.d.ts.map +1 -1
- package/dist/client/session.js +19 -12
- package/dist/client/session.js.map +1 -1
- package/dist/client/stream-handle.d.ts +99 -0
- package/dist/client/stream-handle.d.ts.map +1 -0
- package/dist/client/stream-handle.js +173 -0
- package/dist/client/stream-handle.js.map +1 -0
- package/dist/constants.d.ts +119 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +164 -0
- package/dist/constants.js.map +1 -0
- package/dist/errors/errors.d.ts.map +1 -1
- package/dist/errors/errors.js +7 -6
- package/dist/errors/errors.js.map +1 -1
- package/dist/executor/cli-executor.d.ts.map +1 -1
- package/dist/executor/cli-executor.js +34 -11
- package/dist/executor/cli-executor.js.map +1 -1
- package/dist/executor/interface.d.ts +5 -0
- package/dist/executor/interface.d.ts.map +1 -1
- package/dist/executor/sdk-executor.d.ts +143 -26
- package/dist/executor/sdk-executor.d.ts.map +1 -1
- package/dist/executor/sdk-executor.js +417 -88
- package/dist/executor/sdk-executor.js.map +1 -1
- package/dist/index.d.ts +74 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +82 -4
- package/dist/index.js.map +1 -1
- package/dist/parser/json-parser.d.ts.map +1 -1
- package/dist/parser/json-parser.js +20 -19
- package/dist/parser/json-parser.js.map +1 -1
- package/dist/parser/stream-parser.d.ts.map +1 -1
- package/dist/parser/stream-parser.js +26 -25
- package/dist/parser/stream-parser.js.map +1 -1
- package/dist/scheduler/scheduler.js +6 -11
- package/dist/scheduler/scheduler.js.map +1 -1
- package/dist/types/client.d.ts +343 -3
- package/dist/types/client.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/result.d.ts +116 -1
- package/dist/types/result.d.ts.map +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +5 -6
- package/dist/utils/validation.js.map +1 -1
- package/package.json +7 -2
package/dist/client/claude.js
CHANGED
|
@@ -2,46 +2,39 @@ import { CliExecutor } from '../executor/cli-executor.js';
|
|
|
2
2
|
import { SdkExecutor } from '../executor/sdk-executor.js';
|
|
3
3
|
import { buildArgs, mergeOptions, resolveEnv } from '../builder/args-builder.js';
|
|
4
4
|
import { validateClientOptions, validateQueryOptions, validatePrompt } from '../utils/validation.js';
|
|
5
|
+
import { FORMAT_JSON, FORMAT_STREAM_JSON, DEFAULT_EXECUTABLE, } from '../constants.js';
|
|
5
6
|
import { Session } from './session.js';
|
|
7
|
+
import { StreamHandle } from './stream-handle.js';
|
|
8
|
+
import { ChatHandle } from './chat-handle.js';
|
|
6
9
|
import { Scheduler } from '../scheduler/scheduler.js';
|
|
7
10
|
/**
|
|
8
11
|
* Main entry point for claude-connector.
|
|
9
12
|
*
|
|
10
|
-
* `Claude` is a **facade** that orchestrates the executor, argument builder,
|
|
11
|
-
* and parsers behind a clean, minimal API.
|
|
12
|
-
*
|
|
13
|
-
* ## Execution modes
|
|
14
|
-
*
|
|
15
|
-
* - **CLI mode** (default): each query spawns a new `claude -p` process.
|
|
16
|
-
* Simple, no warm-up needed, but slower for interactive use.
|
|
17
|
-
*
|
|
18
|
-
* - **SDK mode** (`useSdk: true`): creates a persistent session via the
|
|
19
|
-
* Claude Agent SDK. First query requires warm-up (~5-10s), but subsequent
|
|
20
|
-
* queries are near-instant. Best for interactive and high-throughput use.
|
|
21
|
-
*
|
|
22
13
|
* @example
|
|
23
14
|
* ```ts
|
|
24
|
-
* // CLI mode (default)
|
|
25
15
|
* const claude = new Claude({ model: 'sonnet' })
|
|
16
|
+
* const result = await claude.query('Fix bugs')
|
|
26
17
|
*
|
|
27
|
-
* //
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
18
|
+
* // Streaming with fluent API
|
|
19
|
+
* await claude.stream('Explain auth.ts')
|
|
20
|
+
* .on('text', (t) => process.stdout.write(t))
|
|
21
|
+
* .done()
|
|
22
|
+
*
|
|
23
|
+
* // Bidirectional chat
|
|
24
|
+
* const chat = claude.chat()
|
|
25
|
+
* await chat.send('What files are in src?')
|
|
26
|
+
* await chat.send('Fix the largest one')
|
|
27
|
+
* chat.end()
|
|
32
28
|
* ```
|
|
33
29
|
*/
|
|
34
30
|
export class Claude {
|
|
35
|
-
/** Frozen client-level options. */
|
|
36
31
|
options;
|
|
37
|
-
/** Executor responsible for running CLI commands. */
|
|
38
32
|
executor;
|
|
39
|
-
/** SdkExecutor reference (only when useSdk: true) for lifecycle control. */
|
|
40
33
|
sdkExecutor = null;
|
|
41
34
|
constructor(options = {}, executor) {
|
|
42
35
|
validateClientOptions(options);
|
|
43
36
|
this.options = Object.freeze({ ...options });
|
|
44
|
-
const useSdk = options.useSdk !== false;
|
|
37
|
+
const useSdk = options.useSdk !== false;
|
|
45
38
|
if (executor) {
|
|
46
39
|
this.executor = executor;
|
|
47
40
|
}
|
|
@@ -49,6 +42,7 @@ export class Claude {
|
|
|
49
42
|
const sdkOpts = {
|
|
50
43
|
model: options.model,
|
|
51
44
|
pathToClaudeCodeExecutable: options.executable,
|
|
45
|
+
cwd: options.cwd,
|
|
52
46
|
permissionMode: options.permissionMode,
|
|
53
47
|
allowedTools: options.allowedTools ? [...options.allowedTools] : undefined,
|
|
54
48
|
disallowedTools: options.disallowedTools ? [...options.disallowedTools] : undefined,
|
|
@@ -56,6 +50,35 @@ export class Claude {
|
|
|
56
50
|
systemPrompt: options.systemPrompt,
|
|
57
51
|
appendSystemPrompt: options.appendSystemPrompt,
|
|
58
52
|
maxTurns: options.maxTurns,
|
|
53
|
+
maxBudget: options.maxBudget,
|
|
54
|
+
effortLevel: options.effortLevel,
|
|
55
|
+
fallbackModel: options.fallbackModel,
|
|
56
|
+
// New SDK-level options
|
|
57
|
+
canUseTool: options.canUseTool,
|
|
58
|
+
thinking: options.thinking,
|
|
59
|
+
enableFileCheckpointing: options.enableFileCheckpointing,
|
|
60
|
+
onElicitation: options.onElicitation,
|
|
61
|
+
hookCallbacks: options.hookCallbacks,
|
|
62
|
+
mcpServers: options.mcpServers,
|
|
63
|
+
agents: options.agents,
|
|
64
|
+
agent: options.agent,
|
|
65
|
+
tools: options.tools ? [...options.tools] : undefined,
|
|
66
|
+
additionalDirs: options.additionalDirs ? [...options.additionalDirs] : undefined,
|
|
67
|
+
noSessionPersistence: options.noSessionPersistence,
|
|
68
|
+
strictMcpConfig: options.strictMcpConfig,
|
|
69
|
+
betas: options.betas ? [...options.betas] : undefined,
|
|
70
|
+
includePartialMessages: options.includePartialMessages,
|
|
71
|
+
promptSuggestions: options.promptSuggestions,
|
|
72
|
+
agentProgressSummaries: options.agentProgressSummaries,
|
|
73
|
+
debug: options.debug,
|
|
74
|
+
debugFile: options.debugFile,
|
|
75
|
+
// New passthrough options
|
|
76
|
+
stderr: options.stderr,
|
|
77
|
+
allowDangerouslySkipPermissions: options.allowDangerouslySkipPermissions,
|
|
78
|
+
settingSources: options.settingSources,
|
|
79
|
+
settings: options.settings,
|
|
80
|
+
plugins: options.plugins,
|
|
81
|
+
spawnClaudeCodeProcess: options.spawnClaudeCodeProcess,
|
|
59
82
|
};
|
|
60
83
|
this.sdkExecutor = new SdkExecutor(sdkOpts);
|
|
61
84
|
this.executor = this.sdkExecutor;
|
|
@@ -66,21 +89,7 @@ export class Claude {
|
|
|
66
89
|
}
|
|
67
90
|
/**
|
|
68
91
|
* Initialize the SDK session (warm up).
|
|
69
|
-
*
|
|
70
92
|
* Only needed when `useSdk: true`. In CLI mode this is a no-op.
|
|
71
|
-
*
|
|
72
|
-
* Subscribe to initialization events before calling:
|
|
73
|
-
* ```ts
|
|
74
|
-
* claude.on('init:stage', (stage, message) => {
|
|
75
|
-
* console.log(`[${stage}] ${message}`)
|
|
76
|
-
* })
|
|
77
|
-
* claude.on('init:ready', () => console.log('Ready!'))
|
|
78
|
-
* claude.on('init:error', (err) => console.error(err))
|
|
79
|
-
*
|
|
80
|
-
* await claude.init()
|
|
81
|
-
* ```
|
|
82
|
-
*
|
|
83
|
-
* Safe to call multiple times — only initializes once.
|
|
84
93
|
*/
|
|
85
94
|
async init() {
|
|
86
95
|
if (this.sdkExecutor) {
|
|
@@ -101,8 +110,6 @@ export class Claude {
|
|
|
101
110
|
}
|
|
102
111
|
/**
|
|
103
112
|
* Execute a one-shot query and return the complete result.
|
|
104
|
-
*
|
|
105
|
-
* In SDK mode, auto-initializes if `init()` hasn't been called yet.
|
|
106
113
|
*/
|
|
107
114
|
async query(prompt, options) {
|
|
108
115
|
validatePrompt(prompt);
|
|
@@ -110,7 +117,7 @@ export class Claude {
|
|
|
110
117
|
validateQueryOptions(options);
|
|
111
118
|
const resolved = mergeOptions(this.options, options, {
|
|
112
119
|
prompt,
|
|
113
|
-
outputFormat:
|
|
120
|
+
outputFormat: FORMAT_JSON,
|
|
114
121
|
});
|
|
115
122
|
const args = buildArgs(resolved);
|
|
116
123
|
const env = resolveEnv(this.options, options);
|
|
@@ -119,29 +126,56 @@ export class Claude {
|
|
|
119
126
|
env,
|
|
120
127
|
input: options?.input,
|
|
121
128
|
systemPrompt: resolved.systemPrompt,
|
|
129
|
+
signal: options?.signal,
|
|
122
130
|
});
|
|
123
131
|
}
|
|
124
132
|
/**
|
|
125
133
|
* Execute a query with streaming response.
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
* The final event is always `type: 'result'` or `type: 'error'`.
|
|
134
|
+
* Returns a {@link StreamHandle} with fluent callbacks, Node.js stream support,
|
|
135
|
+
* and backward-compatible async iteration.
|
|
129
136
|
*/
|
|
130
|
-
|
|
137
|
+
stream(prompt, options) {
|
|
131
138
|
validatePrompt(prompt);
|
|
132
139
|
if (options)
|
|
133
140
|
validateQueryOptions(options);
|
|
134
141
|
const resolved = mergeOptions(this.options, options, {
|
|
135
142
|
prompt,
|
|
136
|
-
outputFormat:
|
|
143
|
+
outputFormat: FORMAT_STREAM_JSON,
|
|
137
144
|
});
|
|
138
145
|
const args = buildArgs(resolved);
|
|
139
146
|
const env = resolveEnv(this.options, options);
|
|
140
|
-
|
|
147
|
+
const executor = this.executor;
|
|
148
|
+
const execOpts = {
|
|
141
149
|
cwd: resolved.cwd,
|
|
142
150
|
env,
|
|
143
151
|
input: options?.input,
|
|
144
152
|
systemPrompt: resolved.systemPrompt,
|
|
153
|
+
signal: options?.signal,
|
|
154
|
+
};
|
|
155
|
+
return new StreamHandle(() => executor.stream(args, execOpts));
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Open a bidirectional chat — a persistent CLI process for real-time conversation.
|
|
159
|
+
* Uses `--input-format stream-json` for multi-turn dialogue over a single process.
|
|
160
|
+
*/
|
|
161
|
+
chat(options) {
|
|
162
|
+
if (options)
|
|
163
|
+
validateQueryOptions(options);
|
|
164
|
+
const resolved = mergeOptions(this.options, options, {
|
|
165
|
+
prompt: undefined,
|
|
166
|
+
outputFormat: FORMAT_STREAM_JSON,
|
|
167
|
+
});
|
|
168
|
+
// Override: chat mode uses bidirectional stream-json
|
|
169
|
+
const args = buildArgs({
|
|
170
|
+
...resolved,
|
|
171
|
+
prompt: undefined,
|
|
172
|
+
inputFormat: FORMAT_STREAM_JSON,
|
|
173
|
+
});
|
|
174
|
+
const env = resolveEnv(this.options, options);
|
|
175
|
+
const executable = this.options.executable ?? DEFAULT_EXECUTABLE;
|
|
176
|
+
return new ChatHandle(executable, args, {
|
|
177
|
+
cwd: resolved.cwd,
|
|
178
|
+
env: { ...process.env, ...env },
|
|
145
179
|
});
|
|
146
180
|
}
|
|
147
181
|
/**
|
|
@@ -171,7 +205,6 @@ export class Claude {
|
|
|
171
205
|
}
|
|
172
206
|
/**
|
|
173
207
|
* Close the SDK session and free resources.
|
|
174
|
-
* Only needed when `useSdk: true`. In CLI mode this is a no-op.
|
|
175
208
|
*/
|
|
176
209
|
close() {
|
|
177
210
|
if (this.sdkExecutor) {
|
|
@@ -184,5 +217,118 @@ export class Claude {
|
|
|
184
217
|
getExecutor() {
|
|
185
218
|
return this.executor;
|
|
186
219
|
}
|
|
220
|
+
// ── SDK Control Methods ─────────────────────────────────────────
|
|
221
|
+
// These methods delegate to the underlying SdkExecutor.
|
|
222
|
+
// In CLI mode they throw an error.
|
|
223
|
+
/**
|
|
224
|
+
* Change the model for subsequent responses.
|
|
225
|
+
* SDK mode only — throws in CLI mode.
|
|
226
|
+
*/
|
|
227
|
+
async setModel(model) {
|
|
228
|
+
this.requireSdk('setModel');
|
|
229
|
+
await this.sdkExecutor.setModel(model);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Change the permission mode for the session.
|
|
233
|
+
* SDK mode only — throws in CLI mode.
|
|
234
|
+
*/
|
|
235
|
+
async setPermissionMode(mode) {
|
|
236
|
+
this.requireSdk('setPermissionMode');
|
|
237
|
+
await this.sdkExecutor.setPermissionMode(mode);
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Rewind files to their state at a specific user message.
|
|
241
|
+
* Requires `enableFileCheckpointing: true`.
|
|
242
|
+
* SDK mode only — throws in CLI mode.
|
|
243
|
+
*/
|
|
244
|
+
async rewindFiles(userMessageId, options) {
|
|
245
|
+
this.requireSdk('rewindFiles');
|
|
246
|
+
return this.sdkExecutor.rewindFiles(userMessageId, options);
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Stop a running subagent task.
|
|
250
|
+
* SDK mode only — throws in CLI mode.
|
|
251
|
+
*/
|
|
252
|
+
async stopTask(taskId) {
|
|
253
|
+
this.requireSdk('stopTask');
|
|
254
|
+
await this.sdkExecutor.stopTask(taskId);
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Dynamically set MCP servers for this session.
|
|
258
|
+
* SDK mode only — throws in CLI mode.
|
|
259
|
+
*/
|
|
260
|
+
async setMcpServers(servers) {
|
|
261
|
+
this.requireSdk('setMcpServers');
|
|
262
|
+
return this.sdkExecutor.setMcpServers(servers);
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Reconnect a disconnected MCP server.
|
|
266
|
+
* SDK mode only — throws in CLI mode.
|
|
267
|
+
*/
|
|
268
|
+
async reconnectMcpServer(serverName) {
|
|
269
|
+
this.requireSdk('reconnectMcpServer');
|
|
270
|
+
await this.sdkExecutor.reconnectMcpServer(serverName);
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Enable or disable an MCP server.
|
|
274
|
+
* SDK mode only — throws in CLI mode.
|
|
275
|
+
*/
|
|
276
|
+
async toggleMcpServer(serverName, enabled) {
|
|
277
|
+
this.requireSdk('toggleMcpServer');
|
|
278
|
+
await this.sdkExecutor.toggleMcpServer(serverName, enabled);
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Get account information (email, org, subscription).
|
|
282
|
+
* SDK mode only — throws in CLI mode.
|
|
283
|
+
*/
|
|
284
|
+
async accountInfo() {
|
|
285
|
+
this.requireSdk('accountInfo');
|
|
286
|
+
return this.sdkExecutor.accountInfo();
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Get available models with their capabilities.
|
|
290
|
+
* SDK mode only — throws in CLI mode.
|
|
291
|
+
*/
|
|
292
|
+
async supportedModels() {
|
|
293
|
+
this.requireSdk('supportedModels');
|
|
294
|
+
return this.sdkExecutor.supportedModels();
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Get available slash commands.
|
|
298
|
+
* SDK mode only — throws in CLI mode.
|
|
299
|
+
*/
|
|
300
|
+
async supportedCommands() {
|
|
301
|
+
this.requireSdk('supportedCommands');
|
|
302
|
+
return this.sdkExecutor.supportedCommands();
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Get available subagents.
|
|
306
|
+
* SDK mode only — throws in CLI mode.
|
|
307
|
+
*/
|
|
308
|
+
async supportedAgents() {
|
|
309
|
+
this.requireSdk('supportedAgents');
|
|
310
|
+
return this.sdkExecutor.supportedAgents();
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Get MCP server connection statuses.
|
|
314
|
+
* SDK mode only — throws in CLI mode.
|
|
315
|
+
*/
|
|
316
|
+
async mcpServerStatus() {
|
|
317
|
+
this.requireSdk('mcpServerStatus');
|
|
318
|
+
return this.sdkExecutor.mcpServerStatus();
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Interrupt the current query execution.
|
|
322
|
+
* SDK mode only — throws in CLI mode.
|
|
323
|
+
*/
|
|
324
|
+
async interrupt() {
|
|
325
|
+
this.requireSdk('interrupt');
|
|
326
|
+
await this.sdkExecutor.interrupt();
|
|
327
|
+
}
|
|
328
|
+
requireSdk(method) {
|
|
329
|
+
if (!this.sdkExecutor) {
|
|
330
|
+
throw new Error(`${method}() is only available in SDK mode. Set useSdk: true (default) to use this method.`);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
187
333
|
}
|
|
188
334
|
//# sourceMappingURL=claude.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/client/claude.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/client/claude.ts"],"names":[],"mappings":"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"}
|
package/dist/client/session.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type { ClientOptions, QueryOptions, QueryResult
|
|
1
|
+
import type { ClientOptions, QueryOptions, QueryResult } from '../types/index.js';
|
|
2
2
|
import type { SessionOptions } from '../types/session.js';
|
|
3
3
|
import type { IExecutor } from '../executor/interface.js';
|
|
4
|
+
import { StreamHandle } from './stream-handle.js';
|
|
4
5
|
/**
|
|
5
6
|
* A stateful conversation session.
|
|
6
7
|
*
|
|
@@ -52,8 +53,9 @@ export declare class Session {
|
|
|
52
53
|
query(prompt: string, options?: QueryOptions): Promise<QueryResult>;
|
|
53
54
|
/**
|
|
54
55
|
* Send a query with streaming response within this session.
|
|
56
|
+
* Returns a {@link StreamHandle} with fluent callbacks and Node.js stream support.
|
|
55
57
|
*/
|
|
56
|
-
stream(prompt: string, options?: QueryOptions):
|
|
58
|
+
stream(prompt: string, options?: QueryOptions): StreamHandle;
|
|
57
59
|
/**
|
|
58
60
|
* Abort the current running query in this session.
|
|
59
61
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/client/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/client/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAe,MAAM,mBAAmB,CAAC;AAC/F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAI1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA0B;IACxD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAY;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAEhD,6DAA6D;IAC7D,OAAO,CAAC,UAAU,CAAgB;IAElC,kDAAkD;IAClD,OAAO,CAAC,WAAW,CAAK;gBAGtB,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC,EACtC,QAAQ,EAAE,SAAS,EACnB,cAAc,GAAE,cAAmB;IAQrC,iEAAiE;IACjE,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,CAE7B;IAED,yCAAyC;IACzC,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;;;OAIG;IACG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAsBzE;;;OAGG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,YAAY;IA8B5D;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,kBAAkB;CAM3B"}
|
package/dist/client/session.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { buildArgs, mergeOptions, resolveEnv } from '../builder/args-builder.js';
|
|
2
2
|
import { validateQueryOptions, validatePrompt } from '../utils/validation.js';
|
|
3
|
+
import { FORMAT_JSON, FORMAT_STREAM_JSON, EVENT_RESULT } from '../constants.js';
|
|
4
|
+
import { StreamHandle } from './stream-handle.js';
|
|
3
5
|
/**
|
|
4
6
|
* A stateful conversation session.
|
|
5
7
|
*
|
|
@@ -61,11 +63,11 @@ export class Session {
|
|
|
61
63
|
validatePrompt(prompt);
|
|
62
64
|
if (options)
|
|
63
65
|
validateQueryOptions(options);
|
|
64
|
-
const args = this.buildSessionArgs(prompt,
|
|
66
|
+
const args = this.buildSessionArgs(prompt, FORMAT_JSON, options);
|
|
65
67
|
const env = resolveEnv(this.clientOptions, options);
|
|
66
68
|
const resolved = mergeOptions(this.clientOptions, options, {
|
|
67
69
|
prompt,
|
|
68
|
-
outputFormat:
|
|
70
|
+
outputFormat: FORMAT_JSON,
|
|
69
71
|
});
|
|
70
72
|
const result = await this.executor.execute(args, {
|
|
71
73
|
cwd: resolved.cwd,
|
|
@@ -78,29 +80,34 @@ export class Session {
|
|
|
78
80
|
}
|
|
79
81
|
/**
|
|
80
82
|
* Send a query with streaming response within this session.
|
|
83
|
+
* Returns a {@link StreamHandle} with fluent callbacks and Node.js stream support.
|
|
81
84
|
*/
|
|
82
|
-
|
|
85
|
+
stream(prompt, options) {
|
|
83
86
|
validatePrompt(prompt);
|
|
84
87
|
if (options)
|
|
85
88
|
validateQueryOptions(options);
|
|
86
|
-
const args = this.buildSessionArgs(prompt,
|
|
89
|
+
const args = this.buildSessionArgs(prompt, FORMAT_STREAM_JSON, options);
|
|
87
90
|
const env = resolveEnv(this.clientOptions, options);
|
|
88
91
|
const resolved = mergeOptions(this.clientOptions, options, {
|
|
89
92
|
prompt,
|
|
90
|
-
outputFormat:
|
|
93
|
+
outputFormat: FORMAT_STREAM_JSON,
|
|
91
94
|
});
|
|
92
|
-
|
|
95
|
+
const executor = this.executor;
|
|
96
|
+
const updateState = (id) => this.updateSessionState(id);
|
|
97
|
+
const execOpts = {
|
|
93
98
|
cwd: resolved.cwd,
|
|
94
99
|
env,
|
|
95
100
|
input: options?.input,
|
|
96
101
|
systemPrompt: resolved.systemPrompt,
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
102
|
+
};
|
|
103
|
+
return new StreamHandle(async function* () {
|
|
104
|
+
for await (const event of executor.stream(args, execOpts)) {
|
|
105
|
+
if (event.type === EVENT_RESULT && event.sessionId) {
|
|
106
|
+
updateState(event.sessionId);
|
|
107
|
+
}
|
|
108
|
+
yield event;
|
|
101
109
|
}
|
|
102
|
-
|
|
103
|
-
}
|
|
110
|
+
});
|
|
104
111
|
}
|
|
105
112
|
/**
|
|
106
113
|
* Abort the current running query in this session.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/client/session.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/client/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { Readable } from 'node:stream';
|
|
2
|
+
import { EVENT_TEXT, EVENT_TOOL_USE, EVENT_RESULT, EVENT_ERROR, EVENT_SYSTEM, EVENT_TASK_STARTED, EVENT_TASK_PROGRESS, EVENT_TASK_NOTIFICATION } from '../constants.js';
|
|
3
|
+
import type { StreamEvent, StreamToolUseEvent, StreamResultEvent, StreamErrorEvent, StreamSystemEvent, StreamTaskStartedEvent, StreamTaskProgressEvent, StreamTaskNotificationEvent } from '../types/index.js';
|
|
4
|
+
type TextCallback = (text: string) => void;
|
|
5
|
+
type ToolUseCallback = (event: StreamToolUseEvent) => void;
|
|
6
|
+
type ResultCallback = (event: StreamResultEvent) => void;
|
|
7
|
+
type ErrorCallback = (event: StreamErrorEvent) => void;
|
|
8
|
+
type SystemCallback = (event: StreamSystemEvent) => void;
|
|
9
|
+
type TaskStartedCallback = (event: StreamTaskStartedEvent) => void;
|
|
10
|
+
type TaskProgressCallback = (event: StreamTaskProgressEvent) => void;
|
|
11
|
+
type TaskNotificationCallback = (event: StreamTaskNotificationEvent) => void;
|
|
12
|
+
/**
|
|
13
|
+
* A streaming response handle with fluent callback API and Node.js stream support.
|
|
14
|
+
*
|
|
15
|
+
* ## 1. Fluent callbacks
|
|
16
|
+
*
|
|
17
|
+
* ```ts
|
|
18
|
+
* await claude.stream('Refactor auth')
|
|
19
|
+
* .on('text', (text) => process.stdout.write(text))
|
|
20
|
+
* .on('tool_use', (event) => console.log(event.toolName))
|
|
21
|
+
* .on('task_started', (event) => console.log(`Task: ${event.description}`))
|
|
22
|
+
* .done()
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* ## 2. Convenience methods
|
|
26
|
+
*
|
|
27
|
+
* ```ts
|
|
28
|
+
* const text = await claude.stream('Summarize').text()
|
|
29
|
+
* const result = await claude.stream('Explain').pipe(process.stdout)
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* ## 3. Node.js Readable stream
|
|
33
|
+
*
|
|
34
|
+
* ```ts
|
|
35
|
+
* import { pipeline } from 'node:stream/promises'
|
|
36
|
+
* await pipeline(claude.stream('Generate').toReadable(), createGzip(), file)
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* ## 4. Raw async iteration (backward compat)
|
|
40
|
+
*
|
|
41
|
+
* ```ts
|
|
42
|
+
* for await (const event of claude.stream('Analyze')) { ... }
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare class StreamHandle implements AsyncIterable<StreamEvent> {
|
|
46
|
+
private readonly source;
|
|
47
|
+
private readonly textCallbacks;
|
|
48
|
+
private readonly toolUseCallbacks;
|
|
49
|
+
private readonly resultCallbacks;
|
|
50
|
+
private readonly errorCallbacks;
|
|
51
|
+
private readonly systemCallbacks;
|
|
52
|
+
private readonly taskStartedCallbacks;
|
|
53
|
+
private readonly taskProgressCallbacks;
|
|
54
|
+
private readonly taskNotificationCallbacks;
|
|
55
|
+
constructor(source: () => AsyncIterable<StreamEvent>);
|
|
56
|
+
/**
|
|
57
|
+
* Register a callback for a specific event type. Returns `this` for chaining.
|
|
58
|
+
*
|
|
59
|
+
* `text` callback receives just the string. All others receive the full event.
|
|
60
|
+
*/
|
|
61
|
+
on(type: typeof EVENT_TEXT, callback: TextCallback): this;
|
|
62
|
+
on(type: typeof EVENT_TOOL_USE, callback: ToolUseCallback): this;
|
|
63
|
+
on(type: typeof EVENT_RESULT, callback: ResultCallback): this;
|
|
64
|
+
on(type: typeof EVENT_ERROR, callback: ErrorCallback): this;
|
|
65
|
+
on(type: typeof EVENT_SYSTEM, callback: SystemCallback): this;
|
|
66
|
+
on(type: typeof EVENT_TASK_STARTED, callback: TaskStartedCallback): this;
|
|
67
|
+
on(type: typeof EVENT_TASK_PROGRESS, callback: TaskProgressCallback): this;
|
|
68
|
+
on(type: typeof EVENT_TASK_NOTIFICATION, callback: TaskNotificationCallback): this;
|
|
69
|
+
/**
|
|
70
|
+
* Consume the stream, fire all registered callbacks, return the final result.
|
|
71
|
+
*/
|
|
72
|
+
done(): Promise<StreamResultEvent>;
|
|
73
|
+
/**
|
|
74
|
+
* Collect all text chunks into a single string.
|
|
75
|
+
*/
|
|
76
|
+
text(): Promise<string>;
|
|
77
|
+
/**
|
|
78
|
+
* Pipe text to a writable stream. Returns the final result.
|
|
79
|
+
*
|
|
80
|
+
* ```ts
|
|
81
|
+
* const result = await claude.stream('Explain').pipe(process.stdout)
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
pipe(writable: {
|
|
85
|
+
write(chunk: string): unknown;
|
|
86
|
+
}): Promise<StreamResultEvent>;
|
|
87
|
+
/**
|
|
88
|
+
* Get a Node.js Readable that emits text chunks.
|
|
89
|
+
* Use for `pipeline()`, standard `.pipe()` chaining, HTTP responses, etc.
|
|
90
|
+
*/
|
|
91
|
+
toReadable(): Readable;
|
|
92
|
+
/**
|
|
93
|
+
* Async iteration — yields StreamEvent objects. Backward compatible with `for await`.
|
|
94
|
+
*/
|
|
95
|
+
[Symbol.asyncIterator](): AsyncIterator<StreamEvent>;
|
|
96
|
+
private dispatch;
|
|
97
|
+
}
|
|
98
|
+
export {};
|
|
99
|
+
//# sourceMappingURL=stream-handle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-handle.d.ts","sourceRoot":"","sources":["../../src/client/stream-handle.ts"],"names":[],"mappings":"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"}
|