@ai-hero/sandcastle 0.4.8 → 0.5.1

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 (78) hide show
  1. package/README.md +145 -69
  2. package/dist/AgentProvider.d.ts +9 -0
  3. package/dist/AgentProvider.d.ts.map +1 -1
  4. package/dist/AgentProvider.js +14 -2
  5. package/dist/AgentProvider.js.map +1 -1
  6. package/dist/ErrorHandler.d.ts.map +1 -1
  7. package/dist/ErrorHandler.js +4 -0
  8. package/dist/ErrorHandler.js.map +1 -1
  9. package/dist/Orchestrator.d.ts +13 -2
  10. package/dist/Orchestrator.d.ts.map +1 -1
  11. package/dist/Orchestrator.js +53 -7
  12. package/dist/Orchestrator.js.map +1 -1
  13. package/dist/PodmanLifecycle.d.ts +10 -0
  14. package/dist/PodmanLifecycle.d.ts.map +1 -1
  15. package/dist/PodmanLifecycle.js +22 -0
  16. package/dist/PodmanLifecycle.js.map +1 -1
  17. package/dist/SandboxFactory.d.ts +6 -2
  18. package/dist/SandboxFactory.d.ts.map +1 -1
  19. package/dist/SandboxFactory.js +41 -21
  20. package/dist/SandboxFactory.js.map +1 -1
  21. package/dist/SandboxLifecycle.d.ts +23 -5
  22. package/dist/SandboxLifecycle.d.ts.map +1 -1
  23. package/dist/SandboxLifecycle.js +59 -13
  24. package/dist/SandboxLifecycle.js.map +1 -1
  25. package/dist/SandboxProvider.d.ts +4 -0
  26. package/dist/SandboxProvider.d.ts.map +1 -1
  27. package/dist/SandboxProvider.js.map +1 -1
  28. package/dist/SessionPaths.d.ts +26 -0
  29. package/dist/SessionPaths.d.ts.map +1 -0
  30. package/dist/SessionPaths.js +20 -0
  31. package/dist/SessionPaths.js.map +1 -0
  32. package/dist/SessionStore.d.ts +49 -0
  33. package/dist/SessionStore.d.ts.map +1 -0
  34. package/dist/SessionStore.js +119 -0
  35. package/dist/SessionStore.js.map +1 -0
  36. package/dist/createSandbox.d.ts +16 -16
  37. package/dist/createSandbox.d.ts.map +1 -1
  38. package/dist/createSandbox.js +53 -26
  39. package/dist/createSandbox.js.map +1 -1
  40. package/dist/createWorktree.d.ts +18 -13
  41. package/dist/createWorktree.d.ts.map +1 -1
  42. package/dist/createWorktree.js +12 -6
  43. package/dist/createWorktree.js.map +1 -1
  44. package/dist/errors.d.ts +13 -2
  45. package/dist/errors.d.ts.map +1 -1
  46. package/dist/errors.js +5 -0
  47. package/dist/errors.js.map +1 -1
  48. package/dist/index.d.ts +6 -1
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +3 -0
  51. package/dist/index.js.map +1 -1
  52. package/dist/interactive.d.ts +8 -0
  53. package/dist/interactive.d.ts.map +1 -1
  54. package/dist/interactive.js +11 -2
  55. package/dist/interactive.js.map +1 -1
  56. package/dist/resolveCwd.d.ts +24 -0
  57. package/dist/resolveCwd.d.ts.map +1 -0
  58. package/dist/resolveCwd.js +32 -0
  59. package/dist/resolveCwd.js.map +1 -0
  60. package/dist/run.d.ts +31 -10
  61. package/dist/run.d.ts.map +1 -1
  62. package/dist/run.js +28 -5
  63. package/dist/run.js.map +1 -1
  64. package/dist/sandboxes/docker.d.ts.map +1 -1
  65. package/dist/sandboxes/docker.js +20 -0
  66. package/dist/sandboxes/docker.js.map +1 -1
  67. package/dist/sandboxes/podman.d.ts.map +1 -1
  68. package/dist/sandboxes/podman.js +26 -0
  69. package/dist/sandboxes/podman.js.map +1 -1
  70. package/dist/sandboxes/test-bind-mount.d.ts +17 -0
  71. package/dist/sandboxes/test-bind-mount.d.ts.map +1 -0
  72. package/dist/sandboxes/test-bind-mount.js +91 -0
  73. package/dist/sandboxes/test-bind-mount.js.map +1 -0
  74. package/dist/templates/parallel-planner/main.mts +1 -1
  75. package/dist/templates/parallel-planner-with-review/main.mts +1 -1
  76. package/dist/templates/sequential-reviewer/main.mts +1 -1
  77. package/dist/templates/simple-loop/main.mts +7 -5
  78. package/package.json +1 -1
package/README.md CHANGED
@@ -94,6 +94,7 @@ await interactive({
94
94
  agent: claudeCode("claude-opus-4-6"),
95
95
  sandbox: noSandbox(),
96
96
  prompt: "...", // optional — omit to launch the TUI with no initial prompt
97
+ cwd: "/path/to/other-repo", // optional — defaults to process.cwd()
97
98
  });
98
99
  ```
99
100
 
@@ -113,7 +114,8 @@ const result = await run({
113
114
  promptFile: ".sandcastle/prompt.md",
114
115
  });
115
116
 
116
- console.log(result.iterationsRun); // number of iterations executed
117
+ console.log(result.iterations.length); // number of iterations executed
118
+ console.log(result.iterations); // per-iteration results with optional sessionId
117
119
  console.log(result.commits); // array of { sha } for commits created
118
120
  console.log(result.branch); // target branch name
119
121
  ```
@@ -146,11 +148,17 @@ const result = await run({
146
148
  network: "my-network",
147
149
  }),
148
150
 
151
+ // Host repo directory — replaces process.cwd() as the anchor for
152
+ // .sandcastle/ artifacts (worktrees, logs, env, patches) and git operations.
153
+ // Relative paths resolve against process.cwd(). Defaults to process.cwd().
154
+ cwd: "../other-repo",
155
+
149
156
  // Branch strategy — controls how the agent's changes relate to branches.
150
157
  // Defaults to { type: "head" } for bind-mount and { type: "merge-to-head" } for isolated providers.
151
158
  branchStrategy: { type: "branch", branch: "agent/fix-42" },
152
159
 
153
- // Prompt source — provide one of these, not both:
160
+ // Prompt source — provide one of these, not both.
161
+ // Note: promptFile resolves against process.cwd(), NOT cwd.
154
162
  promptFile: ".sandcastle/prompt.md", // path to a prompt file
155
163
  // prompt: "Fix issue #42 in this repo", // OR an inline prompt string
156
164
 
@@ -165,10 +173,15 @@ const result = await run({
165
173
  // Display name for this run, shown as a prefix in log output.
166
174
  name: "fix-issue-42",
167
175
 
168
- // Lifecycle hooks arrays of shell commands run in parallel inside the sandbox.
176
+ // Lifecycle hooks grouped by where they run: host or sandbox.
169
177
  hooks: {
170
- // Runs after the sandbox is ready.
171
- onSandboxReady: [{ command: "npm install" }],
178
+ host: {
179
+ onWorktreeReady: [{ command: "cp .env.example .env" }],
180
+ onSandboxReady: [{ command: "echo setup done" }],
181
+ },
182
+ sandbox: {
183
+ onSandboxReady: [{ command: "npm install" }],
184
+ },
172
185
  },
173
186
 
174
187
  // Host-relative file paths to copy into the sandbox before the container starts.
@@ -187,7 +200,7 @@ const result = await run({
187
200
  idleTimeoutSeconds: 600,
188
201
  });
189
202
 
190
- console.log(result.iterationsRun); // number of iterations executed
203
+ console.log(result.iterations.length); // number of iterations executed
191
204
  console.log(result.completionSignal); // matched signal string, or undefined if none fired
192
205
  console.log(result.commits); // array of { sha } for commits created
193
206
  console.log(result.branch); // target branch name
@@ -227,7 +240,7 @@ import { docker } from "@ai-hero/sandcastle/sandboxes/docker";
227
240
  await using sandbox = await createSandbox({
228
241
  branch: "agent/fix-42",
229
242
  sandbox: docker(),
230
- hooks: { onSandboxReady: [{ command: "npm install" }] },
243
+ hooks: { sandbox: { onSandboxReady: [{ command: "npm install" }] } },
231
244
  });
232
245
 
233
246
  // Step 1: implement
@@ -266,13 +279,14 @@ if (closeResult.preservedWorktreePath) {
266
279
 
267
280
  #### `CreateSandboxOptions`
268
281
 
269
- | Option | Type | Default | Description |
270
- | -------------------------- | --------------- | ------- | ------------------------------------------------------------------------ |
271
- | `branch` | string | — | **Required.** Explicit branch for the sandbox |
272
- | `sandbox` | SandboxProvider | — | **Required.** Sandbox provider (e.g. `docker()`, `podman()`) |
273
- | `hooks` | object | | Lifecycle hooks (`onSandboxReady`)run once at creation time |
274
- | `copyToWorktree` | string[] | — | Host-relative file paths to copy into the sandbox at creation time |
275
- | `throwOnDuplicateWorktree` | boolean | `true` | When `false`, reuse an existing worktree instead of failing on collision |
282
+ | Option | Type | Default | Description |
283
+ | -------------------------- | --------------- | --------------- | ------------------------------------------------------------------------ |
284
+ | `branch` | string | — | **Required.** Explicit branch for the sandbox |
285
+ | `sandbox` | SandboxProvider | — | **Required.** Sandbox provider (e.g. `docker()`, `podman()`) |
286
+ | `cwd` | string | `process.cwd()` | Host repo directoryrelative paths resolve against `process.cwd()` |
287
+ | `hooks` | SandboxHooks | — | Lifecycle hooks (`host.*`, `sandbox.*`) run once at creation time |
288
+ | `copyToWorktree` | string[] | | Host-relative file paths to copy into the sandbox at creation time |
289
+ | `throwOnDuplicateWorktree` | boolean | `true` | When `false`, reuse an existing worktree instead of failing on collision |
276
290
 
277
291
  #### `Sandbox`
278
292
 
@@ -300,13 +314,13 @@ if (closeResult.preservedWorktreePath) {
300
314
 
301
315
  #### `SandboxRunResult`
302
316
 
303
- | Field | Type | Description |
304
- | ------------------ | ----------- | ------------------------------------------------------------------ |
305
- | `iterationsRun` | number | Number of iterations executed |
306
- | `completionSignal` | string? | The matched completion signal string, or `undefined` if none fired |
307
- | `stdout` | string | Combined agent output from all iterations |
308
- | `commits` | `{ sha }[]` | Commits created during the run |
309
- | `logFilePath` | string? | Path to the log file (only when logging to a file) |
317
+ | Field | Type | Description |
318
+ | ------------------ | ------------------- | ------------------------------------------------------------------ |
319
+ | `iterations` | `IterationResult[]` | Per-iteration results (use `.length` for the count) |
320
+ | `completionSignal` | string? | The matched completion signal string, or `undefined` if none fired |
321
+ | `stdout` | string | Combined agent output from all iterations |
322
+ | `commits` | `{ sha }[]` | Commits created during the run |
323
+ | `logFilePath` | string? | Path to the log file (only when logging to a file) |
310
324
 
311
325
  #### `CloseResult`
312
326
 
@@ -320,12 +334,15 @@ Use `createWorktree()` when you need a worktree (git worktree) as an independent
320
334
 
321
335
  Only `branch` and `merge-to-head` strategies are accepted; `head` is a compile-time type error since it means no worktree.
322
336
 
337
+ Pass `cwd` to target a repo other than `process.cwd()`. Relative paths resolve against `process.cwd()`; absolute paths pass through. A `CwdError` is thrown if the path does not exist or is not a directory.
338
+
323
339
  ```typescript
324
340
  import { createWorktree } from "@ai-hero/sandcastle";
325
341
 
326
342
  await using wt = await createWorktree({
327
343
  branchStrategy: { type: "branch", branch: "agent/fix-42" },
328
344
  copyToWorktree: ["node_modules"],
345
+ cwd: "/path/to/other-repo", // optional — defaults to process.cwd()
329
346
  });
330
347
 
331
348
  console.log(wt.worktreePath); // host path to the worktree
@@ -351,7 +368,7 @@ import { docker } from "@ai-hero/sandcastle/sandboxes/docker";
351
368
 
352
369
  await using sandbox = await wt.createSandbox({
353
370
  sandbox: docker(),
354
- hooks: { onSandboxReady: [{ command: "npm install" }] },
371
+ hooks: { sandbox: { onSandboxReady: [{ command: "npm install" }] } },
355
372
  });
356
373
 
357
374
  // sandbox.close() tears down the container only — the worktree stays
@@ -392,7 +409,7 @@ await sandbox.close();
392
409
  | `prompt` | string | — | Inline prompt (mutually exclusive with `promptFile`) |
393
410
  | `promptFile` | string | — | Path to prompt file |
394
411
  | `name` | string | — | Optional session name |
395
- | `hooks` | SandboxHooks | — | Hooks to run during sandbox lifecycle |
412
+ | `hooks` | SandboxHooks | — | Lifecycle hooks (`host.*`, `sandbox.*`) |
396
413
  | `promptArgs` | PromptArgs | — | Key-value map for `{{KEY}}` placeholder substitution |
397
414
  | `env` | Record<string, string> | — | Environment variables to inject into the sandbox |
398
415
 
@@ -409,27 +426,27 @@ await sandbox.close();
409
426
  | `idleTimeoutSeconds` | number | 600 | Idle timeout in seconds |
410
427
  | `name` | string | — | Optional run name |
411
428
  | `logging` | LoggingOption | file | Logging mode |
412
- | `hooks` | SandboxHooks | — | Hooks to run during sandbox lifecycle |
429
+ | `hooks` | SandboxHooks | — | Lifecycle hooks (`host.*`, `sandbox.*`) |
413
430
  | `promptArgs` | PromptArgs | — | Key-value map for `{{KEY}}` placeholder substitution |
414
431
  | `env` | Record<string, string> | — | Environment variables to inject into the sandbox |
415
432
 
416
433
  #### `WorktreeRunResult`
417
434
 
418
- | Property | Type | Description |
419
- | ------------------ | ----------------- | ------------------------------------------------------ |
420
- | `iterationsRun` | number | Number of iterations the agent completed |
421
- | `completionSignal` | string | The matched completion signal, or undefined |
422
- | `stdout` | string | Combined stdout output from all agent iterations |
423
- | `commits` | { sha: string }[] | List of commits made by the agent during the run |
424
- | `branch` | string | The branch name the agent worked on |
425
- | `logFilePath` | string | Path to the log file, if logging was drained to a file |
435
+ | Property | Type | Description |
436
+ | ------------------ | ------------------- | ------------------------------------------------------ |
437
+ | `iterations` | `IterationResult[]` | Per-iteration results (use `.length` for the count) |
438
+ | `completionSignal` | string | The matched completion signal, or undefined |
439
+ | `stdout` | string | Combined stdout output from all agent iterations |
440
+ | `commits` | { sha: string }[] | List of commits made by the agent during the run |
441
+ | `branch` | string | The branch name the agent worked on |
442
+ | `logFilePath` | string | Path to the log file, if logging was drained to a file |
426
443
 
427
444
  #### `WorktreeCreateSandboxOptions`
428
445
 
429
446
  | Option | Type | Default | Description |
430
447
  | ---------------- | --------------- | ------- | ------------------------------------------------------------------- |
431
448
  | `sandbox` | SandboxProvider | — | **Required.** Sandbox provider (e.g. `docker()`) |
432
- | `hooks` | SandboxHooks | — | One-time setup hooks to run when the sandbox is first created |
449
+ | `hooks` | SandboxHooks | — | Lifecycle hooks (`host.*`, `sandbox.*`) |
433
450
  | `copyToWorktree` | string[] | — | Host-relative file paths to copy into the worktree at creation time |
434
451
 
435
452
  ## How it works
@@ -463,7 +480,7 @@ You must provide exactly one of:
463
480
 
464
481
  Use `` !`command` `` expressions in your prompt to pull in dynamic context. Each expression is replaced with the command's stdout before the prompt is sent to the agent. All expressions in a prompt run **in parallel** for faster expansion.
465
482
 
466
- Commands run **inside the sandbox** after `onSandboxReady` hooks complete, so they see the same repo state the agent sees (including installed dependencies).
483
+ Commands run **inside the sandbox** after `sandbox.onSandboxReady` hooks complete, so they see the same repo state the agent sees (including installed dependencies).
467
484
 
468
485
  ```markdown
469
486
  # Open issues
@@ -623,10 +640,11 @@ Removes the Podman image.
623
640
  | -------------------------- | ------------------ | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
624
641
  | `agent` | AgentProvider | — | **Required.** Agent provider (e.g. `claudeCode("claude-opus-4-6")`, `pi("claude-sonnet-4-6")`, `codex("gpt-5.4-mini")`, `opencode("opencode/big-pickle")`) |
625
642
  | `sandbox` | SandboxProvider | — | **Required.** Sandbox provider (e.g. `docker()`, `podman()`, `docker({ imageName: "sandcastle:local" })`) |
643
+ | `cwd` | string | `process.cwd()` | Host repo directory — anchor for `.sandcastle/` artifacts and git operations. Relative paths resolve against `process.cwd()`. |
626
644
  | `prompt` | string | — | Inline prompt (mutually exclusive with `promptFile`) |
627
- | `promptFile` | string | — | Path to prompt file (mutually exclusive with `prompt`) |
645
+ | `promptFile` | string | — | Path to prompt file (mutually exclusive with `prompt`). Resolves against `process.cwd()`, **not** `cwd`. |
628
646
  | `maxIterations` | number | `1` | Maximum iterations to run |
629
- | `hooks` | object | — | Lifecycle hooks (`onSandboxReady`) |
647
+ | `hooks` | SandboxHooks | — | Lifecycle hooks (`host.*`, `sandbox.*`) |
630
648
  | `name` | string | — | Display name for the run, shown as a prefix in log output |
631
649
  | `promptArgs` | PromptArgs | — | Key-value map for `{{KEY}}` placeholder substitution |
632
650
  | `branchStrategy` | BranchStrategy | per-provider default | Branch strategy: `{ type: 'head' }`, `{ type: 'merge-to-head' }`, or `{ type: 'branch', branch: '…' }` |
@@ -635,17 +653,53 @@ Removes the Podman image.
635
653
  | `completionSignal` | string \| string[] | `<promise>COMPLETE</promise>` | String or array of strings the agent emits to stop the iteration loop early |
636
654
  | `idleTimeoutSeconds` | number | `600` | Idle timeout in seconds — resets on each agent output event |
637
655
  | `throwOnDuplicateWorktree` | boolean | `true` | When `false`, reuse an existing worktree for the target branch instead of failing on collision |
656
+ | `resumeSession` | string | — | Resume a prior Claude Code session by ID. Incompatible with `maxIterations > 1`. Session file must exist on host. |
638
657
 
639
658
  ### `RunResult`
640
659
 
641
- | Field | Type | Description |
642
- | ------------------ | ----------- | ------------------------------------------------------------------ |
643
- | `iterationsRun` | number | Number of iterations that were executed |
644
- | `completionSignal` | string? | The matched completion signal string, or `undefined` if none fired |
645
- | `stdout` | string | Agent output |
646
- | `commits` | `{ sha }[]` | Commits created during the run |
647
- | `branch` | string | Target branch name |
648
- | `logFilePath` | string? | Path to the log file (only when logging to a file) |
660
+ | Field | Type | Description |
661
+ | ------------------ | ------------------- | ------------------------------------------------------------------ |
662
+ | `iterations` | `IterationResult[]` | Per-iteration results (use `.length` for the count) |
663
+ | `completionSignal` | string? | The matched completion signal string, or `undefined` if none fired |
664
+ | `stdout` | string | Agent output |
665
+ | `commits` | `{ sha }[]` | Commits created during the run |
666
+ | `branch` | string | Target branch name |
667
+ | `logFilePath` | string? | Path to the log file (only when logging to a file) |
668
+
669
+ ### `IterationResult`
670
+
671
+ | Field | Type | Description |
672
+ | ----------------- | ------- | ------------------------------------------------------------------------------------ |
673
+ | `sessionId` | string? | Claude Code session ID from the init line, or `undefined` for non-Claude agents |
674
+ | `sessionFilePath` | string? | Absolute host path to the captured session JSONL, or `undefined` when capture is off |
675
+
676
+ ### Session capture
677
+
678
+ After each Claude Code iteration, Sandcastle automatically captures the agent's session JSONL from the sandbox to the host at `~/.claude/projects/<encoded-path>/sessions/<session-id>.jsonl`. The `cwd` fields inside each JSONL entry are rewritten to match the host repo root, so `claude --resume` works natively.
679
+
680
+ Session capture is enabled by default for `claudeCode()` and can be opted out via `captureSessions: false`. Non-Claude agent providers never attempt capture. Capture failure fails the run.
681
+
682
+ ### Session resume
683
+
684
+ Pass `resumeSession` to `run()` to continue a prior Claude Code conversation inside a new sandbox:
685
+
686
+ ```typescript
687
+ const result = await run({
688
+ agent: claudeCode("claude-opus-4-6"),
689
+ sandbox: docker(),
690
+ prompt: "Continue where you left off",
691
+ resumeSession: "abc-123-def",
692
+ });
693
+ ```
694
+
695
+ Before the sandbox starts, Sandcastle validates that the session file exists on the host and transfers it into the sandbox with `cwd` fields rewritten to match the sandbox-side path. The Claude Code agent receives `--resume <id>` on its print command for iteration 1.
696
+
697
+ Constraints:
698
+
699
+ - `resumeSession` is incompatible with `maxIterations > 1` (throws before sandbox creation).
700
+ - The session file must exist at `~/.claude/projects/<encoded-path>/sessions/<id>.jsonl` (throws before sandbox creation).
701
+ - Only iteration 1 receives the resume flag; subsequent iterations (if any) start fresh.
702
+ - Non-Claude agent providers ignore `resumeSession`.
649
703
 
650
704
  ### `ClaudeCodeOptions`
651
705
 
@@ -655,10 +709,11 @@ The `claudeCode()` factory accepts an optional second argument for provider-spec
655
709
  agent: claudeCode("claude-opus-4-6", { effort: "high" });
656
710
  ```
657
711
 
658
- | Option | Type | Default | Description |
659
- | -------- | -------------------------------------------- | ------- | ------------------------------------------------------- |
660
- | `effort` | `"low"` \| `"medium"` \| `"high"` \| `"max"` | — | Claude Code reasoning effort level (`max` is Opus only) |
661
- | `env` | `Record<string, string>` | `{}` | Environment variables injected by this agent provider |
712
+ | Option | Type | Default | Description |
713
+ | ----------------- | -------------------------------------------- | ------- | --------------------------------------------------------- |
714
+ | `effort` | `"low"` \| `"medium"` \| `"high"` \| `"max"` | — | Claude Code reasoning effort level (`max` is Opus only) |
715
+ | `env` | `Record<string, string>` | `{}` | Environment variables injected by this agent provider |
716
+ | `captureSessions` | `boolean` | `true` | Capture agent session JSONL to host for `claude --resume` |
662
717
 
663
718
  ### `CodexOptions`
664
719
 
@@ -708,13 +763,14 @@ Sandcastle ships with built-in providers for Docker, Podman, and Vercel, but you
708
763
 
709
764
  Both provider types return a **sandbox handle** from their `create()` function. The handle exposes:
710
765
 
711
- | Method | Required | Description |
712
- | -------------- | -------- | ---------------------------------------------------------------------------- |
713
- | `exec` | Both | Run a command, optionally streaming stdout line-by-line via `options.onLine` |
714
- | `close` | Both | Tear down the sandbox |
715
- | `copyIn` | Isolated | Copy a file or directory from the host into the sandbox |
716
- | `copyOut` | Isolated | Copy a file from the sandbox to the host |
717
- | `worktreePath` | Both | Absolute path to the repo directory inside the sandbox |
766
+ | Method | Required | Description |
767
+ | -------------- | ---------- | ---------------------------------------------------------------------------- |
768
+ | `exec` | Both | Run a command, optionally streaming stdout line-by-line via `options.onLine` |
769
+ | `close` | Both | Tear down the sandbox |
770
+ | `copyFileIn` | Bind-mount | Copy a single file from the host into the sandbox |
771
+ | `copyFileOut` | Both | Copy a single file from the sandbox to the host |
772
+ | `copyIn` | Isolated | Copy a file or directory from the host into the sandbox |
773
+ | `worktreePath` | Both | Absolute path to the repo directory inside the sandbox |
718
774
 
719
775
  ### `ExecResult`
720
776
 
@@ -740,6 +796,8 @@ import {
740
796
  type ExecResult,
741
797
  } from "@ai-hero/sandcastle";
742
798
  import { execFile, spawn } from "node:child_process";
799
+ import { copyFile as fsCopyFile, mkdir as fsMkdir } from "node:fs/promises";
800
+ import { dirname } from "node:path";
743
801
  import { createInterface } from "node:readline";
744
802
 
745
803
  const localProcess = () =>
@@ -809,6 +867,16 @@ const localProcess = () =>
809
867
  });
810
868
  },
811
869
 
870
+ copyFileIn: async (hostPath: string, sandboxPath: string) => {
871
+ await fsMkdir(dirname(sandboxPath), { recursive: true });
872
+ await fsCopyFile(hostPath, sandboxPath);
873
+ },
874
+
875
+ copyFileOut: async (sandboxPath: string, hostPath: string) => {
876
+ await fsMkdir(dirname(hostPath), { recursive: true });
877
+ await fsCopyFile(sandboxPath, hostPath);
878
+ },
879
+
812
880
  close: async () => {
813
881
  // nothing to tear down for a local process
814
882
  },
@@ -1016,28 +1084,36 @@ Add your project-specific dependencies (e.g., language runtimes, build tools) to
1016
1084
 
1017
1085
  ### Hooks
1018
1086
 
1019
- Hooks are arrays of `{ command, sudo? }` objects executed **in parallel** inside the sandbox. All commands within a hook point run concurrently if any command exits with a non-zero code, the operation fails after all commands settle. To enforce ordering between commands, combine them with `&&` in a single command string.
1020
-
1021
- | Hook | When it runs | Working directory |
1022
- | ---------------- | -------------------------- | ---------------------- |
1023
- | `onSandboxReady` | After the sandbox is ready | Sandbox repo directory |
1024
-
1025
- **`onSandboxReady`** runs after the sandbox is ready. Use it for dependency installation or build steps (e.g., `npm install`).
1026
-
1027
- Set `sudo: true` to run a command with elevated privileges inside the sandbox:
1087
+ Hooks are grouped by **where** they run — `host` (on the developer's machine) or `sandbox` (inside the container):
1028
1088
 
1029
1089
  ```ts
1030
- await run({
1031
- hooks: {
1090
+ hooks: {
1091
+ host: {
1092
+ onWorktreeReady: [{ command: "cp .env.example .env" }],
1093
+ onSandboxReady: [{ command: "echo sandbox is up" }],
1094
+ },
1095
+ sandbox: {
1032
1096
  onSandboxReady: [
1033
- { command: "apt-get install -y ffmpeg", sudo: true },
1034
1097
  { command: "npm install" },
1098
+ { command: "apt-get install -y ffmpeg", sudo: true },
1035
1099
  ],
1036
1100
  },
1037
- // ...
1038
- });
1101
+ }
1039
1102
  ```
1040
1103
 
1104
+ | Hook | Runs on | When | Working directory |
1105
+ | ------------------------ | ------- | -------------------------------------------- | ------------------------------------------- |
1106
+ | `host.onWorktreeReady` | Host | After `copyToWorktree`, before sandbox start | Worktree path (host repo root under `head`) |
1107
+ | `host.onSandboxReady` | Host | After sandbox is up | Worktree path (host repo root under `head`) |
1108
+ | `sandbox.onSandboxReady` | Sandbox | After sandbox is up | Sandbox repo directory |
1109
+
1110
+ **Ordering:** `copyToWorktree` -> `host.onWorktreeReady` (sequential) -> sandbox created -> `host.onSandboxReady` + `sandbox.onSandboxReady` (parallel).
1111
+
1112
+ - **Host hooks** accept `{ command: string }` — no `sudo`, no `cwd`. Use `cd` or inline env in the command string.
1113
+ - **Sandbox hooks** accept `{ command: string; sudo?: boolean }` — set `sudo: true` for elevated privileges.
1114
+ - Within each hook point, sandbox hooks run in parallel; host hooks within `onSandboxReady` also run in parallel with sandbox hooks. `host.onWorktreeReady` hooks run sequentially in declared order.
1115
+ - If any hook exits non-zero, setup fails fast.
1116
+
1041
1117
  ## Development
1042
1118
 
1043
1119
  ```bash
@@ -8,16 +8,23 @@ export type ParsedStreamEvent = {
8
8
  type: "tool_call";
9
9
  name: string;
10
10
  args: string;
11
+ } | {
12
+ type: "session_id";
13
+ sessionId: string;
11
14
  };
12
15
  /** Options passed to buildPrintCommand and buildInteractiveArgs. */
13
16
  export interface AgentCommandOptions {
14
17
  readonly prompt: string;
15
18
  readonly dangerouslySkipPermissions: boolean;
19
+ /** When set, the agent should resume the given session ID instead of starting fresh. */
20
+ readonly resumeSession?: string;
16
21
  }
17
22
  export interface AgentProvider {
18
23
  readonly name: string;
19
24
  /** Environment variables injected by this agent provider. Merged at launch time with env resolver and sandbox provider env. */
20
25
  readonly env: Record<string, string>;
26
+ /** When true, session capture is enabled for this provider. Default: true for Claude Code, false for others. */
27
+ readonly captureSessions: boolean;
21
28
  buildPrintCommand(options: AgentCommandOptions): string;
22
29
  buildInteractiveArgs?(options: AgentCommandOptions): string[];
23
30
  parseStreamLine(line: string): ParsedStreamEvent[];
@@ -46,6 +53,8 @@ export interface ClaudeCodeOptions {
46
53
  readonly effort?: "low" | "medium" | "high" | "max";
47
54
  /** Environment variables injected by this agent provider. */
48
55
  readonly env?: Record<string, string>;
56
+ /** When false, session capture is disabled. Default: true. */
57
+ readonly captureSessions?: boolean;
49
58
  }
50
59
  export declare const claudeCode: (model: string, options?: ClaudeCodeOptions | undefined) => AgentProvider;
51
60
  //# sourceMappingURL=AgentProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AgentProvider.d.ts","sourceRoot":"","sources":["../src/AgentProvider.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AA6DtD,oEAAoE;AACpE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,0BAA0B,EAAE,OAAO,CAAC;CAC9C;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+HAA+H;IAC/H,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAAC;IACxD,oBAAoB,CAAC,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,EAAE,CAAC;IAC9D,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAAC;CACpD;AAED,eAAO,MAAM,aAAa,oBAAoB,CAAC;AA2D/C,yCAAyC;AACzC,MAAM,WAAW,SAAS;IACxB,6DAA6D;IAC7D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,eAAO,MAAM,EAAE,mEAiBb,CAAC;AAwCH,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACtD,6DAA6D;IAC7D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,eAAO,MAAM,KAAK,sEAuBhB,CAAC;AAMH,+CAA+C;AAC/C,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,eAAO,MAAM,QAAQ,yEAoBnB,CAAC;AAMH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;IACpD,6DAA6D;IAC7D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,eAAO,MAAM,UAAU,2EAiCrB,CAAC"}
1
+ {"version":3,"file":"AgentProvider.d.ts","sourceRoot":"","sources":["../src/AgentProvider.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAoE9C,oEAAoE;AACpE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,0BAA0B,EAAE,OAAO,CAAC;IAC7C,wFAAwF;IACxF,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+HAA+H;IAC/H,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,gHAAgH;IAChH,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAAC;IACxD,oBAAoB,CAAC,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,EAAE,CAAC;IAC9D,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAAC;CACpD;AAED,eAAO,MAAM,aAAa,oBAAoB,CAAC;AA2D/C,yCAAyC;AACzC,MAAM,WAAW,SAAS;IACxB,6DAA6D;IAC7D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,eAAO,MAAM,EAAE,mEAkBb,CAAC;AAwCH,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACtD,6DAA6D;IAC7D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,eAAO,MAAM,KAAK,sEAwBhB,CAAC;AAMH,+CAA+C;AAC/C,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,eAAO,MAAM,QAAQ,yEAqBnB,CAAC;AAMH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;IACpD,6DAA6D;IAC7D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,8DAA8D;IAC9D,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,eAAO,MAAM,UAAU,2EAsCrB,CAAC"}
@@ -46,6 +46,11 @@ const parseStreamJsonLine = (line) => {
46
46
  if (obj.type === "result" && typeof obj.result === "string") {
47
47
  return [{ type: "result", result: obj.result }];
48
48
  }
49
+ if (obj.type === "system" &&
50
+ obj.subtype === "init" &&
51
+ typeof obj.session_id === "string") {
52
+ return [{ type: "session_id", sessionId: obj.session_id }];
53
+ }
49
54
  }
50
55
  catch {
51
56
  // Not valid JSON — skip
@@ -111,6 +116,7 @@ const parsePiStreamLine = (line) => {
111
116
  export const pi = (model, options) => ({
112
117
  name: "pi",
113
118
  env: options?.env ?? {},
119
+ captureSessions: false,
114
120
  buildPrintCommand({ prompt }) {
115
121
  return `pi -p --mode json --no-session --model ${shellEscape(model)} ${shellEscape(prompt)}`;
116
122
  },
@@ -158,6 +164,7 @@ const parseCodexStreamLine = (line) => {
158
164
  export const codex = (model, options) => ({
159
165
  name: "codex",
160
166
  env: options?.env ?? {},
167
+ captureSessions: false,
161
168
  buildPrintCommand({ prompt }) {
162
169
  const effortFlag = options?.effort
163
170
  ? ` -c ${shellEscape(`model_reasoning_effort="${options.effort}"`)}`
@@ -177,6 +184,7 @@ export const codex = (model, options) => ({
177
184
  export const opencode = (model, options) => ({
178
185
  name: "opencode",
179
186
  env: options?.env ?? {},
187
+ captureSessions: false,
180
188
  buildPrintCommand({ prompt }) {
181
189
  return `opencode run --model ${shellEscape(model)} ${shellEscape(prompt)}`;
182
190
  },
@@ -193,12 +201,16 @@ export const opencode = (model, options) => ({
193
201
  export const claudeCode = (model, options) => ({
194
202
  name: "claude-code",
195
203
  env: options?.env ?? {},
196
- buildPrintCommand({ prompt, dangerouslySkipPermissions, }) {
204
+ captureSessions: options?.captureSessions ?? true,
205
+ buildPrintCommand({ prompt, dangerouslySkipPermissions, resumeSession, }) {
197
206
  const skipPerms = dangerouslySkipPermissions
198
207
  ? " --dangerously-skip-permissions"
199
208
  : "";
200
209
  const effortFlag = options?.effort ? ` --effort ${options.effort}` : "";
201
- return `claude --print --verbose${skipPerms} --output-format stream-json --model ${shellEscape(model)}${effortFlag} -p ${shellEscape(prompt)}`;
210
+ const resumeFlag = resumeSession
211
+ ? ` --resume ${shellEscape(resumeSession)}`
212
+ : "";
213
+ return `claude --print --verbose${skipPerms} --output-format stream-json --model ${shellEscape(model)}${effortFlag}${resumeFlag} -p ${shellEscape(prompt)}`;
202
214
  },
203
215
  buildInteractiveArgs({ prompt, dangerouslySkipPermissions, }) {
204
216
  const args = ["claude"];
@@ -1 +1 @@
1
- {"version":3,"file":"AgentProvider.js","sourceRoot":"","sources":["../src/AgentProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AgentProvider.js","sourceRoot":"","sources":["../src/AgentProvider.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorHandler.d.ts","sourceRoot":"","sources":["../src/ErrorHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,iCAoC9B,CAAC;AASF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,4FA0BqB,CAAC"}
1
+ {"version":3,"file":"ErrorHandler.d.ts","sourceRoot":"","sources":["../src/ErrorHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,iCAsC9B,CAAC;AASF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,4FA4BqB,CAAC"}
@@ -38,6 +38,8 @@ export const formatErrorMessage = (error) => {
38
38
  case "PromptExpansionTimeoutError":
39
39
  case "CommitCollectionTimeoutError":
40
40
  case "MergeToHostTimeoutError":
41
+ case "SessionCaptureError":
42
+ case "CwdError":
41
43
  return error.message;
42
44
  }
43
45
  };
@@ -75,5 +77,7 @@ Effect.catchTags(effect, {
75
77
  PromptExpansionTimeoutError: showErrorAndExit,
76
78
  CommitCollectionTimeoutError: showErrorAndExit,
77
79
  MergeToHostTimeoutError: showErrorAndExit,
80
+ SessionCaptureError: showErrorAndExit,
81
+ CwdError: showErrorAndExit,
78
82
  });
79
83
  //# sourceMappingURL=ErrorHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorHandler.js","sourceRoot":"","sources":["../src/ErrorHandler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ErrorHandler.js","sourceRoot":"","sources":["../src/ErrorHandler.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import type { SandboxError } from "./errors.js";
4
4
  import { SandboxFactory } from "./SandboxFactory.js";
5
5
  import { type SandboxHooks } from "./SandboxLifecycle.js";
6
6
  import type { AgentProvider } from "./AgentProvider.js";
7
+ import { SessionPaths } from "./SessionPaths.js";
7
8
  export type { ParsedStreamEvent } from "./AgentProvider.js";
8
9
  export interface OrchestrateOptions {
9
10
  readonly hostRepoDir: string;
@@ -19,9 +20,19 @@ export interface OrchestrateOptions {
19
20
  readonly name?: string;
20
21
  /** @internal Test-only override for the idle warning interval in milliseconds. Default: 60000 (1 minute). */
21
22
  readonly _idleWarningIntervalMs?: number;
23
+ /** Resume a prior Claude Code session by ID. Applied to iteration 1 only. */
24
+ readonly resumeSession?: string;
25
+ }
26
+ /** Per-iteration result carrying an optional session ID. */
27
+ export interface IterationResult {
28
+ /** Claude Code session ID extracted from the init line, or undefined for non-Claude agents. */
29
+ readonly sessionId?: string;
30
+ /** Absolute host path to the captured session JSONL, or undefined when capture is disabled or provider is non-Claude. */
31
+ readonly sessionFilePath?: string;
22
32
  }
23
33
  export interface OrchestrateResult {
24
- readonly iterationsRun: number;
34
+ /** Per-iteration results (use `iterations.length` for the count). */
35
+ readonly iterations: IterationResult[];
25
36
  /** The matched completion signal string, or undefined if none fired. */
26
37
  readonly completionSignal?: string;
27
38
  readonly stdout: string;
@@ -32,5 +43,5 @@ export interface OrchestrateResult {
32
43
  /** Host path to the preserved worktree from the last iteration, set when the worktree was left behind due to uncommitted changes on a successful run. */
33
44
  readonly preservedWorktreePath?: string;
34
45
  }
35
- export declare const orchestrate: (options: OrchestrateOptions) => Effect.Effect<OrchestrateResult, SandboxError, Display | SandboxFactory>;
46
+ export declare const orchestrate: (options: OrchestrateOptions) => Effect.Effect<OrchestrateResult, SandboxError, Display | SandboxFactory | SessionPaths>;
36
47
  //# sourceMappingURL=Orchestrator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Orchestrator.d.ts","sourceRoot":"","sources":["../src/Orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAwB,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AA2G5D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9C,6IAA6I;IAC7I,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,wEAAwE;IACxE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,6GAA6G;IAC7G,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CAC1C;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,wEAAwE;IACxE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,yJAAyJ;IACzJ,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CACzC;AAED,eAAO,MAAM,WAAW,2GAwIvB,CAAC"}
1
+ {"version":3,"file":"Orchestrator.d.ts","sourceRoot":"","sources":["../src/Orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAOvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAoB,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAwB,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOxD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKjD,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAgH5D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9C,6IAA6I;IAC7I,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,wEAAwE;IACxE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,6GAA6G;IAC7G,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IACzC,6EAA6E;IAC7E,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,4DAA4D;AAC5D,MAAM,WAAW,eAAe;IAC9B,+FAA+F;IAC/F,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,yHAAyH;IACzH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,qEAAqE;IACrE,QAAQ,CAAC,UAAU,EAAE,eAAe,EAAE,CAAC;IACvC,wEAAwE;IACxE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,yJAAyJ;IACzJ,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CACzC;AAED,eAAO,MAAM,WAAW,0HAiMvB,CAAC"}