@scottwalker/claude-connector 0.2.0 → 0.3.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 (51) hide show
  1. package/README.md +77 -20
  2. package/dist/builder/args-builder.d.ts +2 -1
  3. package/dist/builder/args-builder.d.ts.map +1 -1
  4. package/dist/builder/args-builder.js +38 -31
  5. package/dist/builder/args-builder.js.map +1 -1
  6. package/dist/client/chat-handle.d.ts +115 -0
  7. package/dist/client/chat-handle.d.ts.map +1 -0
  8. package/dist/client/chat-handle.js +246 -0
  9. package/dist/client/chat-handle.js.map +1 -0
  10. package/dist/client/claude.d.ts +51 -53
  11. package/dist/client/claude.d.ts.map +1 -1
  12. package/dist/client/claude.js +72 -45
  13. package/dist/client/claude.js.map +1 -1
  14. package/dist/client/session.d.ts +4 -2
  15. package/dist/client/session.d.ts.map +1 -1
  16. package/dist/client/session.js +19 -12
  17. package/dist/client/session.js.map +1 -1
  18. package/dist/client/stream-handle.d.ts +99 -0
  19. package/dist/client/stream-handle.d.ts.map +1 -0
  20. package/dist/client/stream-handle.js +158 -0
  21. package/dist/client/stream-handle.js.map +1 -0
  22. package/dist/constants.d.ts +116 -0
  23. package/dist/constants.d.ts.map +1 -0
  24. package/dist/constants.js +160 -0
  25. package/dist/constants.js.map +1 -0
  26. package/dist/errors/errors.d.ts.map +1 -1
  27. package/dist/errors/errors.js +7 -6
  28. package/dist/errors/errors.js.map +1 -1
  29. package/dist/executor/cli-executor.d.ts.map +1 -1
  30. package/dist/executor/cli-executor.js +7 -11
  31. package/dist/executor/cli-executor.js.map +1 -1
  32. package/dist/executor/sdk-executor.d.ts +5 -4
  33. package/dist/executor/sdk-executor.d.ts.map +1 -1
  34. package/dist/executor/sdk-executor.js +33 -38
  35. package/dist/executor/sdk-executor.js.map +1 -1
  36. package/dist/index.d.ts +3 -0
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +18 -0
  39. package/dist/index.js.map +1 -1
  40. package/dist/parser/json-parser.d.ts.map +1 -1
  41. package/dist/parser/json-parser.js +20 -19
  42. package/dist/parser/json-parser.js.map +1 -1
  43. package/dist/parser/stream-parser.d.ts.map +1 -1
  44. package/dist/parser/stream-parser.js +26 -25
  45. package/dist/parser/stream-parser.js.map +1 -1
  46. package/dist/scheduler/scheduler.js +6 -11
  47. package/dist/scheduler/scheduler.js.map +1 -1
  48. package/dist/utils/validation.d.ts.map +1 -1
  49. package/dist/utils/validation.js +5 -6
  50. package/dist/utils/validation.js.map +1 -1
  51. package/package.json +1 -1
package/README.md CHANGED
@@ -22,6 +22,7 @@ Claude Code is a powerful AI coding agent, but it only runs in a terminal. **cla
22
22
  - **Two execution modes** — persistent SDK session (fast, default) or CLI process spawning (simple)
23
23
  - **Executor abstraction** — swap CLI for SDK or HTTP backend without changing your code
24
24
  - **Full CLI parity** — exposes all 45+ Claude Code flags through typed options
25
+ - **Typed handles** — `StreamHandle` (fluent `.on().done()` + `for-await`) and `ChatHandle` (multi-turn conversations)
25
26
 
26
27
  ## Requirements
27
28
 
@@ -37,9 +38,9 @@ npm install @scottwalker/claude-connector
37
38
  ## Quick Start
38
39
 
39
40
  ```typescript
40
- import { Claude } from '@scottwalker/claude-connector'
41
+ import { Claude, PERMISSION_ACCEPT_EDITS } from '@scottwalker/claude-connector'
41
42
 
42
- const claude = new Claude()
43
+ const claude = new Claude({ permissionMode: PERMISSION_ACCEPT_EDITS })
43
44
 
44
45
  // Simple query
45
46
  const result = await claude.query('Find and fix bugs in auth.ts')
@@ -55,6 +56,8 @@ console.log(result.usage) // { inputTokens, outputTokens }
55
56
  Point to a specific Claude Code installation when multiple versions coexist:
56
57
 
57
58
  ```typescript
59
+ import { Claude } from '@scottwalker/claude-connector'
60
+
58
61
  const claude = new Claude({
59
62
  executable: '/opt/claude-code/v2/bin/claude',
60
63
  cwd: '/path/to/project',
@@ -63,21 +66,41 @@ const claude = new Claude({
63
66
 
64
67
  ### Streaming
65
68
 
66
- Real-time output as Claude works:
69
+ Real-time output as Claude works. `stream()` returns a `StreamHandle` — use the fluent `.on().done()` API or classic `for-await`:
67
70
 
68
71
  ```typescript
69
- for await (const event of claude.stream('Rewrite the auth module')) {
72
+ import {
73
+ Claude,
74
+ EVENT_TEXT, EVENT_TOOL_USE, EVENT_RESULT, EVENT_ERROR,
75
+ } from '@scottwalker/claude-connector'
76
+
77
+ const claude = new Claude()
78
+
79
+ // Fluent API (.on / .done)
80
+ const result = await claude
81
+ .stream('Rewrite the auth module')
82
+ .on(EVENT_TEXT, (e) => process.stdout.write(e.text))
83
+ .on(EVENT_TOOL_USE, (e) => console.log(`[Tool] ${e.toolName}`))
84
+ .on(EVENT_ERROR, (e) => console.error(e.message))
85
+ .done()
86
+
87
+ console.log(`Done in ${result.durationMs}ms`)
88
+
89
+ // Classic for-await
90
+ const handle = claude.stream('Rewrite the auth module')
91
+
92
+ for await (const event of handle) {
70
93
  switch (event.type) {
71
- case 'text':
94
+ case EVENT_TEXT:
72
95
  process.stdout.write(event.text)
73
96
  break
74
- case 'tool_use':
97
+ case EVENT_TOOL_USE:
75
98
  console.log(`[Tool] ${event.toolName}`)
76
99
  break
77
- case 'result':
100
+ case EVENT_RESULT:
78
101
  console.log(`\nDone in ${event.durationMs}ms`)
79
102
  break
80
- case 'error':
103
+ case EVENT_ERROR:
81
104
  console.error(event.message)
82
105
  break
83
106
  }
@@ -89,6 +112,9 @@ for await (const event of claude.stream('Rewrite the auth module')) {
89
112
  Maintain conversation context across queries:
90
113
 
91
114
  ```typescript
115
+ import { Claude } from '@scottwalker/claude-connector'
116
+
117
+ const claude = new Claude()
92
118
  const session = claude.session()
93
119
  await session.query('Analyze the architecture of this project')
94
120
  await session.query('Now refactor the auth module based on your analysis')
@@ -107,6 +133,9 @@ const s3 = claude.session({ resume: session.sessionId!, fork: true })
107
133
  Get typed JSON responses via JSON Schema:
108
134
 
109
135
  ```typescript
136
+ import { Claude } from '@scottwalker/claude-connector'
137
+
138
+ const claude = new Claude()
110
139
  const result = await claude.query('Extract all API endpoints from the codebase', {
111
140
  schema: {
112
141
  type: 'object',
@@ -134,10 +163,14 @@ console.log(result.structured)
134
163
  Run independent queries concurrently (each spawns a separate CLI process):
135
164
 
136
165
  ```typescript
166
+ import { Claude, PERMISSION_PLAN } from '@scottwalker/claude-connector'
167
+
168
+ const claude = new Claude()
169
+
137
170
  const [bugs, tests, docs] = await claude.parallel([
138
171
  { prompt: 'Find bugs in src/', options: { cwd: './src' } },
139
172
  { prompt: 'Run the test suite', options: { allowedTools: ['Bash'] } },
140
- { prompt: 'Review documentation', options: { permissionMode: 'plan' } },
173
+ { prompt: 'Review documentation', options: { permissionMode: PERMISSION_PLAN } },
141
174
  ])
142
175
  ```
143
176
 
@@ -146,13 +179,16 @@ const [bugs, tests, docs] = await claude.parallel([
146
179
  Node.js-level equivalent of the `/loop` CLI command:
147
180
 
148
181
  ```typescript
182
+ import { Claude, SCHED_RESULT, SCHED_ERROR } from '@scottwalker/claude-connector'
183
+
184
+ const claude = new Claude()
149
185
  const job = claude.loop('5m', 'Check CI pipeline status and report failures')
150
186
 
151
- job.on('result', (result) => {
187
+ job.on(SCHED_RESULT, (result) => {
152
188
  console.log(`[${new Date().toISOString()}] ${result.text}`)
153
189
  })
154
190
 
155
- job.on('error', (err) => {
191
+ job.on(SCHED_ERROR, (err) => {
156
192
  console.error('Check failed:', err.message)
157
193
  })
158
194
 
@@ -167,6 +203,8 @@ Supported intervals: `'30s'`, `'5m'`, `'2h'`, `'1d'`, or raw milliseconds.
167
203
  Connect Model Context Protocol servers:
168
204
 
169
205
  ```typescript
206
+ import { Claude } from '@scottwalker/claude-connector'
207
+
170
208
  const claude = new Claude({
171
209
  // From config file
172
210
  mcpConfig: './mcp.json',
@@ -190,6 +228,8 @@ const claude = new Claude({
190
228
  Define specialized agents:
191
229
 
192
230
  ```typescript
231
+ import { Claude, PERMISSION_ACCEPT_EDITS } from '@scottwalker/claude-connector'
232
+
193
233
  const claude = new Claude({
194
234
  agents: {
195
235
  reviewer: {
@@ -201,7 +241,7 @@ const claude = new Claude({
201
241
  deployer: {
202
242
  description: 'Deployment automation agent',
203
243
  tools: ['Bash', 'Read'],
204
- permissionMode: 'acceptEdits',
244
+ permissionMode: PERMISSION_ACCEPT_EDITS,
205
245
  },
206
246
  },
207
247
  })
@@ -212,6 +252,9 @@ const claude = new Claude({
212
252
  Run operations in an isolated copy of the repository:
213
253
 
214
254
  ```typescript
255
+ import { Claude } from '@scottwalker/claude-connector'
256
+
257
+ const claude = new Claude()
215
258
  const result = await claude.query('Refactor the entire auth module', {
216
259
  worktree: 'refactor-auth', // or `true` for auto-generated name
217
260
  })
@@ -223,7 +266,9 @@ Pass data alongside the prompt (like `echo data | claude -p "prompt"`):
223
266
 
224
267
  ```typescript
225
268
  import { readFileSync } from 'node:fs'
269
+ import { Claude } from '@scottwalker/claude-connector'
226
270
 
271
+ const claude = new Claude()
227
272
  const result = await claude.query('Analyze this error log and suggest fixes', {
228
273
  input: readFileSync('./error.log', 'utf-8'),
229
274
  })
@@ -234,6 +279,8 @@ const result = await claude.query('Analyze this error log and suggest fixes', {
234
279
  Attach hooks to tool execution:
235
280
 
236
281
  ```typescript
282
+ import { Claude } from '@scottwalker/claude-connector'
283
+
237
284
  const claude = new Claude({
238
285
  hooks: {
239
286
  PostToolUse: [
@@ -257,6 +304,11 @@ const claude = new Claude({
257
304
  All Claude Code CLI capabilities in one place:
258
305
 
259
306
  ```typescript
307
+ import {
308
+ Claude,
309
+ EFFORT_HIGH, PERMISSION_ACCEPT_EDITS, PERMISSION_PLAN,
310
+ } from '@scottwalker/claude-connector'
311
+
260
312
  const claude = new Claude({
261
313
  // CLI binary
262
314
  executable: '/usr/local/bin/claude',
@@ -264,11 +316,11 @@ const claude = new Claude({
264
316
 
265
317
  // Model
266
318
  model: 'opus', // 'opus' | 'sonnet' | 'haiku' | full model ID
267
- effortLevel: 'high', // 'low' | 'medium' | 'high' | 'max'
319
+ effortLevel: EFFORT_HIGH, // EFFORT_LOW | EFFORT_MEDIUM | EFFORT_HIGH | EFFORT_MAX
268
320
  fallbackModel: 'sonnet', // auto-fallback on failure
269
321
 
270
322
  // Permissions
271
- permissionMode: 'acceptEdits', // 'default' | 'acceptEdits' | 'plan' | 'auto' | 'dontAsk' | 'bypassPermissions'
323
+ permissionMode: PERMISSION_ACCEPT_EDITS, // PERMISSION_DEFAULT | PERMISSION_ACCEPT_EDITS | PERMISSION_PLAN | PERMISSION_AUTO | PERMISSION_DONT_ASK | PERMISSION_BYPASS
272
324
  allowedTools: ['Read', 'Edit', 'Bash(npm run *)'],
273
325
  disallowedTools: ['WebFetch'],
274
326
 
@@ -306,7 +358,7 @@ const claude = new Claude({
306
358
  // Override any option per query
307
359
  const result = await claude.query('Analyze this module', {
308
360
  model: 'haiku', // cheaper model for this query
309
- permissionMode: 'plan', // read-only
361
+ permissionMode: PERMISSION_PLAN, // read-only
310
362
  maxTurns: 3,
311
363
  })
312
364
  ```
@@ -326,6 +378,8 @@ import {
326
378
  ValidationError,
327
379
  } from '@scottwalker/claude-connector'
328
380
 
381
+ const claude = new Claude()
382
+
329
383
  try {
330
384
  const result = await claude.query('Fix the bug')
331
385
  } catch (err) {
@@ -350,10 +404,13 @@ try {
350
404
 
351
405
  ## Custom Executor
352
406
 
353
- The `IExecutor` abstraction lets you swap the CLI backend for testing, mocking, or future SDK integration:
407
+ The `IExecutor` abstraction lets you swap the CLI backend for testing, mocking, or alternative transports:
354
408
 
355
409
  ```typescript
356
- import { Claude, type IExecutor, type ExecuteOptions, type QueryResult, type StreamEvent } from '@scottwalker/claude-connector'
410
+ import {
411
+ Claude, EVENT_TEXT, EVENT_RESULT,
412
+ type IExecutor, type ExecuteOptions, type QueryResult, type StreamEvent,
413
+ } from '@scottwalker/claude-connector'
357
414
 
358
415
  class MockExecutor implements IExecutor {
359
416
  async execute(args: readonly string[], options: ExecuteOptions): Promise<QueryResult> {
@@ -370,9 +427,9 @@ class MockExecutor implements IExecutor {
370
427
  }
371
428
 
372
429
  async *stream(args: readonly string[], options: ExecuteOptions): AsyncIterable<StreamEvent> {
373
- yield { type: 'text', text: 'Mocked stream' }
430
+ yield { type: EVENT_TEXT, text: 'Mocked stream' }
374
431
  yield {
375
- type: 'result',
432
+ type: EVENT_RESULT,
376
433
  text: 'Mocked stream',
377
434
  sessionId: 'mock-session',
378
435
  usage: { inputTokens: 0, outputTokens: 0 },
@@ -438,7 +495,7 @@ cd claude-connector
438
495
  npm install
439
496
 
440
497
  npm run build # compile TypeScript
441
- npm test # run 102 unit tests
498
+ npm test # run 122 unit tests
442
499
  npm run test:integration # build + run integration test
443
500
  npm run typecheck # type-check without emitting
444
501
  ```
@@ -16,8 +16,9 @@ import type { ClientOptions, QueryOptions } from '../types/index.js';
16
16
  */
17
17
  /** Merged options ready for argument building. */
18
18
  export interface ResolvedOptions {
19
- readonly prompt: string;
19
+ readonly prompt?: string;
20
20
  readonly outputFormat: 'json' | 'stream-json';
21
+ readonly inputFormat?: 'stream-json';
21
22
  readonly cwd: string;
22
23
  readonly model?: string;
23
24
  readonly effortLevel?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"args-builder.d.ts","sourceRoot":"","sources":["../../src/builder/args-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAErE;;;;;;;;;;;;;;GAcG;AAEH,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,CAAC;IAC9C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IAChD,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACxD,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CACpC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,YAAY,GAAG,SAAS,EAC/B,KAAK,EAAE;IACL,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,aAAa,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GACA,eAAe,CA+BjB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,EAAE,CA8H5D;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,YAAY,GAAG,SAAS,GAC9B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAWxB"}
1
+ {"version":3,"file":"args-builder.d.ts","sourceRoot":"","sources":["../../src/builder/args-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAarE;;;;;;;;;;;;;;GAcG;AAEH,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,CAAC;IAC9C,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IAChD,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACxD,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CACpC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,YAAY,GAAG,SAAS,EAC/B,KAAK,EAAE;IACL,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,aAAa,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GACA,eAAe,CA+BjB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,EAAE,CAqI5D;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,YAAY,GAAG,SAAS,GAC9B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAWxB"}
@@ -1,3 +1,4 @@
1
+ import { FLAG_PRINT, FLAG_OUTPUT_FORMAT, FLAG_VERBOSE, FLAG_INPUT_FORMAT, FLAG_CONTINUE, FLAG_RESUME, FLAG_FORK_SESSION, FLAG_MODEL, FLAG_FALLBACK_MODEL, FLAG_EFFORT, FLAG_PERMISSION_MODE, FLAG_ALLOWED_TOOLS, FLAG_DISALLOWED_TOOLS, FLAG_TOOLS, FLAG_SYSTEM_PROMPT, FLAG_APPEND_SYSTEM_PROMPT, FLAG_MAX_TURNS, FLAG_MAX_BUDGET, FLAG_ADD_DIR, FLAG_MCP_CONFIG, FLAG_STRICT_MCP_CONFIG, FLAG_AGENTS, FLAG_AGENT, FLAG_JSON_SCHEMA, FLAG_WORKTREE, FLAG_NO_SESSION_PERSISTENCE, FLAG_NAME, FLAG_SETTINGS, FORMAT_STREAM_JSON, } from '../constants.js';
1
2
  /**
2
3
  * Merge client-level defaults with per-query overrides.
3
4
  */
@@ -39,115 +40,121 @@ export function mergeOptions(client, query, extra) {
39
40
  * @returns Array of strings to pass to `spawn('claude', args)`.
40
41
  */
41
42
  export function buildArgs(options) {
42
- const args = ['--print', '--output-format', options.outputFormat];
43
+ const args = [FLAG_PRINT, FLAG_OUTPUT_FORMAT, options.outputFormat];
43
44
  // BUG-1 fix: stream-json requires --verbose
44
- if (options.outputFormat === 'stream-json') {
45
- args.push('--verbose');
45
+ if (options.outputFormat === FORMAT_STREAM_JSON) {
46
+ args.push(FLAG_VERBOSE);
47
+ }
48
+ // ── Input format (bidirectional streaming) ─────────────────────
49
+ if (options.inputFormat) {
50
+ args.push(FLAG_INPUT_FORMAT, options.inputFormat);
46
51
  }
47
52
  // ── Prompt ──────────────────────────────────────────────────────
48
- args.push(options.prompt);
53
+ if (options.prompt) {
54
+ args.push(options.prompt);
55
+ }
49
56
  // ── Session ─────────────────────────────────────────────────────
50
57
  if (options.continueSession) {
51
- args.push('--continue');
58
+ args.push(FLAG_CONTINUE);
52
59
  }
53
60
  if (options.sessionId) {
54
- args.push('--resume', options.sessionId);
61
+ args.push(FLAG_RESUME, options.sessionId);
55
62
  }
56
63
  if (options.forkSession) {
57
- args.push('--fork-session');
64
+ args.push(FLAG_FORK_SESSION);
58
65
  }
59
66
  // ── Model ───────────────────────────────────────────────────────
60
67
  if (options.model) {
61
- args.push('--model', options.model);
68
+ args.push(FLAG_MODEL, options.model);
62
69
  }
63
70
  if (options.fallbackModel) {
64
- args.push('--fallback-model', options.fallbackModel);
71
+ args.push(FLAG_FALLBACK_MODEL, options.fallbackModel);
65
72
  }
66
73
  if (options.effortLevel) {
67
- args.push('--effort', options.effortLevel);
74
+ args.push(FLAG_EFFORT, options.effortLevel);
68
75
  }
69
76
  // ── Permissions ─────────────────────────────────────────────────
70
77
  if (options.permissionMode) {
71
- args.push('--permission-mode', options.permissionMode);
78
+ args.push(FLAG_PERMISSION_MODE, options.permissionMode);
72
79
  }
73
80
  if (options.allowedTools?.length) {
74
- args.push('--allowedTools', ...options.allowedTools);
81
+ args.push(FLAG_ALLOWED_TOOLS, ...options.allowedTools);
75
82
  }
76
83
  if (options.disallowedTools?.length) {
77
- args.push('--disallowedTools', ...options.disallowedTools);
84
+ args.push(FLAG_DISALLOWED_TOOLS, ...options.disallowedTools);
78
85
  }
79
86
  // ── Tools (built-in set restriction) ────────────────────────────
80
87
  if (options.tools) {
81
88
  if (options.tools.length === 0) {
82
- args.push('--tools', '');
89
+ args.push(FLAG_TOOLS, '');
83
90
  }
84
91
  else {
85
- args.push('--tools', ...options.tools);
92
+ args.push(FLAG_TOOLS, ...options.tools);
86
93
  }
87
94
  }
88
95
  // ── System prompt ───────────────────────────────────────────────
89
96
  if (options.systemPrompt) {
90
- args.push('--system-prompt', options.systemPrompt);
97
+ args.push(FLAG_SYSTEM_PROMPT, options.systemPrompt);
91
98
  }
92
99
  if (options.appendSystemPrompt) {
93
- args.push('--append-system-prompt', options.appendSystemPrompt);
100
+ args.push(FLAG_APPEND_SYSTEM_PROMPT, options.appendSystemPrompt);
94
101
  }
95
102
  // ── Limits ──────────────────────────────────────────────────────
96
103
  if (options.maxTurns !== undefined) {
97
- args.push('--max-turns', String(options.maxTurns));
104
+ args.push(FLAG_MAX_TURNS, String(options.maxTurns));
98
105
  }
99
106
  if (options.maxBudget !== undefined) {
100
- args.push('--max-budget-usd', String(options.maxBudget));
107
+ args.push(FLAG_MAX_BUDGET, String(options.maxBudget));
101
108
  }
102
109
  // ── Directories ─────────────────────────────────────────────────
103
110
  if (options.additionalDirs?.length) {
104
111
  for (const dir of options.additionalDirs) {
105
- args.push('--add-dir', dir);
112
+ args.push(FLAG_ADD_DIR, dir);
106
113
  }
107
114
  }
108
115
  // ── MCP ─────────────────────────────────────────────────────────
109
116
  if (options.mcpConfig) {
110
117
  const configs = Array.isArray(options.mcpConfig) ? options.mcpConfig : [options.mcpConfig];
111
118
  for (const cfg of configs) {
112
- args.push('--mcp-config', cfg);
119
+ args.push(FLAG_MCP_CONFIG, cfg);
113
120
  }
114
121
  }
115
122
  if (options.mcpServers && Object.keys(options.mcpServers).length > 0) {
116
- args.push('--mcp-config', JSON.stringify({ mcpServers: options.mcpServers }));
123
+ args.push(FLAG_MCP_CONFIG, JSON.stringify({ mcpServers: options.mcpServers }));
117
124
  }
118
125
  if (options.strictMcpConfig) {
119
- args.push('--strict-mcp-config');
126
+ args.push(FLAG_STRICT_MCP_CONFIG);
120
127
  }
121
128
  // ── Agents ──────────────────────────────────────────────────────
122
129
  if (options.agents && Object.keys(options.agents).length > 0) {
123
- args.push('--agents', JSON.stringify(options.agents));
130
+ args.push(FLAG_AGENTS, JSON.stringify(options.agents));
124
131
  }
125
132
  if (options.agent) {
126
- args.push('--agent', options.agent);
133
+ args.push(FLAG_AGENT, options.agent);
127
134
  }
128
135
  // ── Structured output ───────────────────────────────────────────
129
136
  if (options.schema) {
130
- args.push('--json-schema', JSON.stringify(options.schema));
137
+ args.push(FLAG_JSON_SCHEMA, JSON.stringify(options.schema));
131
138
  }
132
139
  // ── Worktree ────────────────────────────────────────────────────
133
140
  if (options.worktree) {
134
141
  if (typeof options.worktree === 'string') {
135
- args.push('--worktree', options.worktree);
142
+ args.push(FLAG_WORKTREE, options.worktree);
136
143
  }
137
144
  else {
138
- args.push('--worktree');
145
+ args.push(FLAG_WORKTREE);
139
146
  }
140
147
  }
141
148
  // ── Misc ────────────────────────────────────────────────────────
142
149
  if (options.noSessionPersistence) {
143
- args.push('--no-session-persistence');
150
+ args.push(FLAG_NO_SESSION_PERSISTENCE);
144
151
  }
145
152
  if (options.name) {
146
- args.push('--name', options.name);
153
+ args.push(FLAG_NAME, options.name);
147
154
  }
148
155
  // ── Hooks (via --settings) ──────────────────────────────────────
149
156
  if (options.hooks && Object.keys(options.hooks).length > 0) {
150
- args.push('--settings', JSON.stringify({ hooks: options.hooks }));
157
+ args.push(FLAG_SETTINGS, JSON.stringify({ hooks: options.hooks }));
151
158
  }
152
159
  return args;
153
160
  }
@@ -1 +1 @@
1
- {"version":3,"file":"args-builder.js","sourceRoot":"","sources":["../../src/builder/args-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"args-builder.js","sourceRoot":"","sources":["../../src/builder/args-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ import { Readable, Duplex } from 'node:stream';
2
+ import { EVENT_TEXT, EVENT_TOOL_USE, EVENT_RESULT, EVENT_ERROR, EVENT_SYSTEM } from '../constants.js';
3
+ import type { StreamToolUseEvent, StreamResultEvent, StreamErrorEvent, StreamSystemEvent } 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
+ /**
10
+ * Bidirectional streaming handle for real-time conversation.
11
+ *
12
+ * Uses `--input-format stream-json` to maintain a persistent CLI process.
13
+ * Send prompts with `.send()`, receive responses via callbacks or Node.js streams.
14
+ *
15
+ * ## Fluent callbacks
16
+ *
17
+ * ```ts
18
+ * const chat = claude.chat()
19
+ * .on('text', (text) => process.stdout.write(text))
20
+ * .on('result', (event) => console.log('Turn done'))
21
+ *
22
+ * await chat.send('What files are in src?')
23
+ * await chat.send('Fix the largest one')
24
+ * chat.end()
25
+ * ```
26
+ *
27
+ * ## Node.js Duplex stream
28
+ *
29
+ * ```ts
30
+ * const duplex = claude.chat().toDuplex()
31
+ * inputStream.pipe(duplex).pipe(process.stdout)
32
+ * ```
33
+ */
34
+ export declare class ChatHandle {
35
+ private readonly child;
36
+ private readonly textCallbacks;
37
+ private readonly toolUseCallbacks;
38
+ private readonly resultCallbacks;
39
+ private readonly errorCallbacks;
40
+ private readonly systemCallbacks;
41
+ private buffer;
42
+ private _closed;
43
+ private _sessionId;
44
+ private _turnCount;
45
+ constructor(executable: string, args: readonly string[], options: {
46
+ cwd: string;
47
+ env: Record<string, string>;
48
+ });
49
+ /** Session ID (populated after the first result). */
50
+ get sessionId(): string | null;
51
+ /** Number of completed turns. */
52
+ get turnCount(): number;
53
+ /** Whether the chat has been closed. */
54
+ get closed(): boolean;
55
+ /**
56
+ * Register a callback. Returns `this` for chaining.
57
+ */
58
+ on(type: typeof EVENT_TEXT, callback: TextCallback): this;
59
+ on(type: typeof EVENT_TOOL_USE, callback: ToolUseCallback): this;
60
+ on(type: typeof EVENT_RESULT, callback: ResultCallback): this;
61
+ on(type: typeof EVENT_ERROR, callback: ErrorCallback): this;
62
+ on(type: typeof EVENT_SYSTEM, callback: SystemCallback): this;
63
+ /**
64
+ * Send a prompt and wait for the complete response.
65
+ * Returns the result event when this turn finishes.
66
+ *
67
+ * ```ts
68
+ * const result = await chat.send('Find bugs in auth.ts')
69
+ * console.log(result.durationMs)
70
+ *
71
+ * const result2 = await chat.send('Now fix them')
72
+ * ```
73
+ */
74
+ send(prompt: string): Promise<StreamResultEvent>;
75
+ /**
76
+ * Pipe text output to a writable stream.
77
+ * Returns the destination for chaining (Node.js convention).
78
+ *
79
+ * ```ts
80
+ * chat.pipe(process.stdout)
81
+ * chat.pipe(fs.createWriteStream('log.txt'))
82
+ * ```
83
+ */
84
+ pipe<T extends NodeJS.WritableStream>(dest: T): T;
85
+ /**
86
+ * Get a Node.js Readable that emits text chunks.
87
+ *
88
+ * ```ts
89
+ * claude.chat().toReadable().pipe(res)
90
+ * ```
91
+ */
92
+ toReadable(): Readable;
93
+ /**
94
+ * Get a Node.js Duplex stream.
95
+ * Write side accepts prompts (one per write). Read side emits text.
96
+ *
97
+ * ```ts
98
+ * const duplex = claude.chat().toDuplex()
99
+ * inputStream.pipe(duplex).pipe(process.stdout)
100
+ * ```
101
+ */
102
+ toDuplex(): Duplex;
103
+ /**
104
+ * Close the chat gracefully — signals EOF to the CLI process.
105
+ */
106
+ end(): void;
107
+ /**
108
+ * Abort the chat — kills the CLI process immediately.
109
+ */
110
+ abort(): void;
111
+ private startReading;
112
+ private dispatch;
113
+ }
114
+ export {};
115
+ //# sourceMappingURL=chat-handle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-handle.d.ts","sourceRoot":"","sources":["../../src/client/chat-handle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EACL,UAAU,EACV,cAAc,EACd,YAAY,EACZ,WAAW,EACX,YAAY,EAGb,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAEV,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAE3B,KAAK,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAC3C,KAAK,eAAe,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;AAC3D,KAAK,cAAc,GAAG,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;AACzD,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;AACvD,KAAK,cAAc,GAAG,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAyB;IAC1D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwB;IACxD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAuB;IACtD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwB;IAExD,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,UAAU,CAAK;gBAGrB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE;IAWvD,qDAAqD;IACrD,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,CAE7B;IAED,iCAAiC;IACjC,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,wCAAwC;IACxC,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED;;OAEG;IACH,EAAE,CAAC,IAAI,EAAE,OAAO,UAAU,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI;IACzD,EAAE,CAAC,IAAI,EAAE,OAAO,cAAc,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI;IAChE,EAAE,CAAC,IAAI,EAAE,OAAO,YAAY,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI;IAC7D,EAAE,CAAC,IAAI,EAAE,OAAO,WAAW,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAC3D,EAAE,CAAC,IAAI,EAAE,OAAO,YAAY,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI;IAY7D;;;;;;;;;;OAUG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwBhD;;;;;;;;OAQG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC;IAKjD;;;;;;OAMG;IACH,UAAU,IAAI,QAAQ;IAYtB;;;;;;;;OAQG;IACH,QAAQ,IAAI,MAAM;IAsBlB;;OAEG;IACH,GAAG,IAAI,IAAI;IAQX;;OAEG;IACH,KAAK,IAAI,IAAI;IASb,OAAO,CAAC,YAAY;IAgCpB,OAAO,CAAC,QAAQ;CAmBjB"}