@ai-hero/sandcastle 0.4.5 → 0.4.6
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 +35 -19
- package/dist/AgentProvider.d.ts +7 -2
- package/dist/AgentProvider.d.ts.map +1 -1
- package/dist/AgentProvider.js +28 -15
- package/dist/AgentProvider.js.map +1 -1
- package/dist/{CopyToSandbox.d.ts → CopyToWorkspace.d.ts} +2 -2
- package/dist/CopyToWorkspace.d.ts.map +1 -0
- package/dist/{CopyToSandbox.js → CopyToWorkspace.js} +2 -2
- package/dist/CopyToWorkspace.js.map +1 -0
- package/dist/ErrorHandler.d.ts.map +1 -1
- package/dist/ErrorHandler.js +3 -0
- package/dist/ErrorHandler.js.map +1 -1
- package/dist/InitService.d.ts +24 -0
- package/dist/InitService.d.ts.map +1 -1
- package/dist/InitService.js +117 -11
- package/dist/InitService.js.map +1 -1
- package/dist/Orchestrator.d.ts.map +1 -1
- package/dist/Orchestrator.js +4 -1
- package/dist/Orchestrator.js.map +1 -1
- package/dist/PodmanLifecycle.d.ts +17 -0
- package/dist/PodmanLifecycle.d.ts.map +1 -0
- package/dist/PodmanLifecycle.js +45 -0
- package/dist/PodmanLifecycle.js.map +1 -0
- package/dist/PromptArgumentSubstitution.d.ts +5 -0
- package/dist/PromptArgumentSubstitution.d.ts.map +1 -1
- package/dist/PromptArgumentSubstitution.js +22 -0
- package/dist/PromptArgumentSubstitution.js.map +1 -1
- package/dist/PromptPreprocessor.d.ts.map +1 -1
- package/dist/PromptPreprocessor.js +6 -0
- package/dist/PromptPreprocessor.js.map +1 -1
- package/dist/SandboxFactory.d.ts +3 -3
- package/dist/SandboxFactory.d.ts.map +1 -1
- package/dist/SandboxFactory.js +3 -3
- package/dist/SandboxFactory.js.map +1 -1
- package/dist/SandboxLifecycle.d.ts.map +1 -1
- package/dist/SandboxLifecycle.js +7 -7
- package/dist/SandboxLifecycle.js.map +1 -1
- package/dist/SandboxProvider.d.ts +73 -1
- package/dist/SandboxProvider.d.ts.map +1 -1
- package/dist/SandboxProvider.js.map +1 -1
- package/dist/cli.d.ts +10 -6
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +113 -113
- package/dist/cli.js.map +1 -1
- package/dist/createSandbox.d.ts +23 -1
- package/dist/createSandbox.d.ts.map +1 -1
- package/dist/createSandbox.js +63 -6
- package/dist/createSandbox.js.map +1 -1
- package/dist/errors.d.ts +9 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +3 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/interactive.d.ts +52 -0
- package/dist/interactive.d.ts.map +1 -0
- package/dist/interactive.js +231 -0
- package/dist/interactive.js.map +1 -0
- package/dist/run.d.ts +1 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +5 -5
- package/dist/run.js.map +1 -1
- package/dist/sandboxes/docker.d.ts.map +1 -1
- package/dist/sandboxes/docker.js +26 -1
- package/dist/sandboxes/docker.js.map +1 -1
- package/dist/sandboxes/no-sandbox.d.ts +25 -0
- package/dist/sandboxes/no-sandbox.d.ts.map +1 -0
- package/dist/sandboxes/no-sandbox.js +91 -0
- package/dist/sandboxes/no-sandbox.js.map +1 -0
- package/dist/sandboxes/podman.d.ts +10 -2
- package/dist/sandboxes/podman.d.ts.map +1 -1
- package/dist/sandboxes/podman.js +79 -11
- package/dist/sandboxes/podman.js.map +1 -1
- package/dist/templates/blank/prompt.md +1 -1
- package/dist/templates/parallel-planner/implement-prompt.md +2 -2
- package/dist/templates/parallel-planner/main.mts +12 -12
- package/dist/templates/parallel-planner/plan-prompt.md +3 -3
- package/dist/templates/parallel-planner-with-review/implement-prompt.md +2 -2
- package/dist/templates/parallel-planner-with-review/main.mts +11 -11
- package/dist/templates/parallel-planner-with-review/plan-prompt.md +3 -3
- package/dist/templates/sequential-reviewer/implement-prompt.md +2 -2
- package/dist/templates/sequential-reviewer/main.mts +3 -3
- package/dist/templates/simple-loop/main.mts +2 -2
- package/dist/templates/simple-loop/prompt.md +2 -2
- package/package.json +8 -2
- package/dist/CopyToSandbox.d.ts.map +0 -1
- package/dist/CopyToSandbox.js.map +0 -1
package/README.md
CHANGED
|
@@ -65,33 +65,32 @@ await run({
|
|
|
65
65
|
|
|
66
66
|
## Sandbox Providers
|
|
67
67
|
|
|
68
|
-
Sandcastle uses a `SandboxProvider` to create isolated environments. The `sandbox` option on `run()` and `createSandbox()` accepts any provider.
|
|
68
|
+
Sandcastle uses a `SandboxProvider` to create isolated environments. The `sandbox` option on `run()` and `createSandbox()` accepts any provider. A no-sandbox option is also available for `interactive()` only. Built-in providers:
|
|
69
69
|
|
|
70
|
-
| Provider
|
|
71
|
-
|
|
|
72
|
-
| Docker
|
|
73
|
-
| Podman
|
|
74
|
-
| Vercel
|
|
70
|
+
| Provider | Import path | Type | Accepted by |
|
|
71
|
+
| ---------- | ------------------------------------------ | ---------- | ------------------------------------------- |
|
|
72
|
+
| Docker | `@ai-hero/sandcastle/sandboxes/docker` | Bind-mount | `run()`, `createSandbox()`, `interactive()` |
|
|
73
|
+
| Podman | `@ai-hero/sandcastle/sandboxes/podman` | Bind-mount | `run()`, `createSandbox()`, `interactive()` |
|
|
74
|
+
| Vercel | `@ai-hero/sandcastle/sandboxes/vercel` | Isolated | `run()`, `createSandbox()`, `interactive()` |
|
|
75
|
+
| No-sandbox | `@ai-hero/sandcastle/sandboxes/no-sandbox` | None | `interactive()` only |
|
|
75
76
|
|
|
76
77
|
```typescript
|
|
77
78
|
import { docker } from "@ai-hero/sandcastle/sandboxes/docker";
|
|
78
79
|
import { podman } from "@ai-hero/sandcastle/sandboxes/podman";
|
|
79
80
|
import { vercel } from "@ai-hero/sandcastle/sandboxes/vercel";
|
|
81
|
+
import { noSandbox } from "@ai-hero/sandcastle/sandboxes/no-sandbox";
|
|
80
82
|
|
|
81
|
-
//
|
|
83
|
+
// Docker, Podman, and Vercel are interchangeable in run() and createSandbox():
|
|
82
84
|
await run({
|
|
83
85
|
agent: claudeCode("claude-opus-4-6"),
|
|
84
86
|
sandbox: docker(),
|
|
85
87
|
prompt: "...",
|
|
86
88
|
});
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
prompt: "...",
|
|
91
|
-
});
|
|
92
|
-
await run({
|
|
89
|
+
|
|
90
|
+
// No-sandbox runs the agent directly on the host — interactive() only:
|
|
91
|
+
await interactive({
|
|
93
92
|
agent: claudeCode("claude-opus-4-6"),
|
|
94
|
-
sandbox:
|
|
93
|
+
sandbox: noSandbox(),
|
|
95
94
|
prompt: "...",
|
|
96
95
|
});
|
|
97
96
|
```
|
|
@@ -167,7 +166,7 @@ const result = await run({
|
|
|
167
166
|
|
|
168
167
|
// Host-relative file paths to copy into the sandbox before the container starts.
|
|
169
168
|
// Not supported with branchStrategy: { type: "head" }.
|
|
170
|
-
|
|
169
|
+
copyToWorkspace: [".env"],
|
|
171
170
|
|
|
172
171
|
// How to record progress. Default: write to a file under .sandcastle/logs/
|
|
173
172
|
logging: { type: "file", path: ".sandcastle/logs/my-run.log" },
|
|
@@ -265,7 +264,7 @@ if (closeResult.preservedWorktreePath) {
|
|
|
265
264
|
| `branch` | string | — | **Required.** Explicit branch for the sandbox |
|
|
266
265
|
| `sandbox` | SandboxProvider | — | **Required.** Sandbox provider (e.g. `docker()`, `podman()`) |
|
|
267
266
|
| `hooks` | object | — | Lifecycle hooks (`onSandboxReady`) — run once at creation time |
|
|
268
|
-
| `
|
|
267
|
+
| `copyToWorkspace` | string[] | — | Host-relative file paths to copy into the sandbox at creation time |
|
|
269
268
|
| `throwOnDuplicateWorktree` | boolean | `true` | When `false`, reuse an existing worktree instead of failing on collision |
|
|
270
269
|
|
|
271
270
|
#### `Sandbox`
|
|
@@ -422,7 +421,7 @@ Tell the agent to output your chosen string(s) in the prompt, and the orchestrat
|
|
|
422
421
|
|
|
423
422
|
### Templates
|
|
424
423
|
|
|
425
|
-
`sandcastle init` prompts you to choose a template, which scaffolds a ready-to-use prompt and `main.mts` suited to a specific workflow. If your project's `package.json` has `"type": "module"`, the file will be named `main.ts` instead.
|
|
424
|
+
`sandcastle init` prompts you to choose a sandbox provider (Docker or Podman), a backlog manager (GitHub Issues or Beads), and a template, which scaffolds a ready-to-use prompt and `main.mts` suited to a specific workflow. If your project's `package.json` has `"type": "module"`, the file will be named `main.ts` instead. Five templates are available:
|
|
426
425
|
|
|
427
426
|
| Template | Description |
|
|
428
427
|
| ------------------------------ | ------------------------------------------------------------------------- |
|
|
@@ -438,7 +437,7 @@ Select a template during `sandcastle init` when prompted, or re-run init in a fr
|
|
|
438
437
|
|
|
439
438
|
### `sandcastle init`
|
|
440
439
|
|
|
441
|
-
Scaffolds the `.sandcastle/` config directory and builds the
|
|
440
|
+
Scaffolds the `.sandcastle/` config directory and builds the container image. This is the first command you run in a new repo. You choose a sandbox provider (Docker or Podman) during init — selecting Podman writes a `Containerfile` instead of `Dockerfile` and uses `sandcastle podman build-image` for the build step.
|
|
442
441
|
|
|
443
442
|
| Option | Required | Default | Description |
|
|
444
443
|
| -------------- | -------- | ---------------------------- | -------------------------------------------------------------------- |
|
|
@@ -476,6 +475,23 @@ Removes the Docker image.
|
|
|
476
475
|
| -------------- | -------- | ---------------------------- | ----------------- |
|
|
477
476
|
| `--image-name` | No | `sandcastle:<repo-dir-name>` | Docker image name |
|
|
478
477
|
|
|
478
|
+
### `sandcastle podman build-image`
|
|
479
|
+
|
|
480
|
+
Builds the Podman image from an existing `.sandcastle/` directory. Use this after modifying the Containerfile.
|
|
481
|
+
|
|
482
|
+
| Option | Required | Default | Description |
|
|
483
|
+
| ----------------- | -------- | ---------------------------- | ------------------------------------------------------------------------------------ |
|
|
484
|
+
| `--image-name` | No | `sandcastle:<repo-dir-name>` | Podman image name |
|
|
485
|
+
| `--containerfile` | No | — | Path to a custom Containerfile (build context will be the current working directory) |
|
|
486
|
+
|
|
487
|
+
### `sandcastle podman remove-image`
|
|
488
|
+
|
|
489
|
+
Removes the Podman image.
|
|
490
|
+
|
|
491
|
+
| Option | Required | Default | Description |
|
|
492
|
+
| -------------- | -------- | ---------------------------- | ----------------- |
|
|
493
|
+
| `--image-name` | No | `sandcastle:<repo-dir-name>` | Podman image name |
|
|
494
|
+
|
|
479
495
|
### `RunOptions`
|
|
480
496
|
|
|
481
497
|
| Option | Type | Default | Description |
|
|
@@ -489,7 +505,7 @@ Removes the Docker image.
|
|
|
489
505
|
| `name` | string | — | Display name for the run, shown as a prefix in log output |
|
|
490
506
|
| `promptArgs` | PromptArgs | — | Key-value map for `{{KEY}}` placeholder substitution |
|
|
491
507
|
| `branchStrategy` | BranchStrategy | per-provider default | Branch strategy: `{ type: 'head' }`, `{ type: 'merge-to-head' }`, or `{ type: 'branch', branch: '…' }` |
|
|
492
|
-
| `
|
|
508
|
+
| `copyToWorkspace` | string[] | — | Host-relative file paths to copy into the sandbox before start (not supported with `branchStrategy: { type: 'head' }`) |
|
|
493
509
|
| `logging` | object | file (auto-generated) | `{ type: 'file', path }` or `{ type: 'stdout' }` |
|
|
494
510
|
| `completionSignal` | string \| string[] | `<promise>COMPLETE</promise>` | String or array of strings the agent emits to stop the iteration loop early |
|
|
495
511
|
| `idleTimeoutSeconds` | number | `600` | Idle timeout in seconds — resets on each agent output event |
|
package/dist/AgentProvider.d.ts
CHANGED
|
@@ -9,12 +9,17 @@ export type ParsedStreamEvent = {
|
|
|
9
9
|
name: string;
|
|
10
10
|
args: string;
|
|
11
11
|
};
|
|
12
|
+
/** Options passed to buildPrintCommand and buildInteractiveArgs. */
|
|
13
|
+
export interface AgentCommandOptions {
|
|
14
|
+
readonly prompt: string;
|
|
15
|
+
readonly dangerouslySkipPermissions: boolean;
|
|
16
|
+
}
|
|
12
17
|
export interface AgentProvider {
|
|
13
18
|
readonly name: string;
|
|
14
19
|
/** Environment variables injected by this agent provider. Merged at launch time with env resolver and sandbox provider env. */
|
|
15
20
|
readonly env: Record<string, string>;
|
|
16
|
-
buildPrintCommand(
|
|
17
|
-
buildInteractiveArgs(
|
|
21
|
+
buildPrintCommand(options: AgentCommandOptions): string;
|
|
22
|
+
buildInteractiveArgs?(options: AgentCommandOptions): string[];
|
|
18
23
|
parseStreamLine(line: string): ParsedStreamEvent[];
|
|
19
24
|
}
|
|
20
25
|
export declare const DEFAULT_MODEL = "claude-opus-4-6";
|
|
@@ -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,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,
|
|
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"}
|
package/dist/AgentProvider.js
CHANGED
|
@@ -111,11 +111,14 @@ const parsePiStreamLine = (line) => {
|
|
|
111
111
|
export const pi = (model, options) => ({
|
|
112
112
|
name: "pi",
|
|
113
113
|
env: options?.env ?? {},
|
|
114
|
-
buildPrintCommand(prompt) {
|
|
114
|
+
buildPrintCommand({ prompt }) {
|
|
115
115
|
return `pi -p --mode json --no-session --model ${shellEscape(model)} ${shellEscape(prompt)}`;
|
|
116
116
|
},
|
|
117
|
-
buildInteractiveArgs(
|
|
118
|
-
|
|
117
|
+
buildInteractiveArgs({ prompt }) {
|
|
118
|
+
const args = ["pi", "--model", model];
|
|
119
|
+
if (prompt)
|
|
120
|
+
args.push(prompt);
|
|
121
|
+
return args;
|
|
119
122
|
},
|
|
120
123
|
parseStreamLine(line) {
|
|
121
124
|
return parsePiStreamLine(line);
|
|
@@ -155,17 +158,16 @@ const parseCodexStreamLine = (line) => {
|
|
|
155
158
|
export const codex = (model, options) => ({
|
|
156
159
|
name: "codex",
|
|
157
160
|
env: options?.env ?? {},
|
|
158
|
-
buildPrintCommand(prompt) {
|
|
161
|
+
buildPrintCommand({ prompt }) {
|
|
159
162
|
const effortFlag = options?.effort
|
|
160
163
|
? ` -c ${shellEscape(`model_reasoning_effort="${options.effort}"`)}`
|
|
161
164
|
: "";
|
|
162
165
|
return `codex exec --json --dangerously-bypass-approvals-and-sandbox -m ${shellEscape(model)}${effortFlag} ${shellEscape(prompt)}`;
|
|
163
166
|
},
|
|
164
|
-
buildInteractiveArgs(
|
|
167
|
+
buildInteractiveArgs({ prompt }) {
|
|
165
168
|
const args = ["codex", "--model", model];
|
|
166
|
-
if (
|
|
167
|
-
args.push(
|
|
168
|
-
}
|
|
169
|
+
if (prompt)
|
|
170
|
+
args.push(prompt);
|
|
169
171
|
return args;
|
|
170
172
|
},
|
|
171
173
|
parseStreamLine(line) {
|
|
@@ -175,11 +177,14 @@ export const codex = (model, options) => ({
|
|
|
175
177
|
export const opencode = (model, options) => ({
|
|
176
178
|
name: "opencode",
|
|
177
179
|
env: options?.env ?? {},
|
|
178
|
-
buildPrintCommand(prompt) {
|
|
180
|
+
buildPrintCommand({ prompt }) {
|
|
179
181
|
return `opencode run --model ${shellEscape(model)} ${shellEscape(prompt)}`;
|
|
180
182
|
},
|
|
181
|
-
buildInteractiveArgs(
|
|
182
|
-
|
|
183
|
+
buildInteractiveArgs({ prompt }) {
|
|
184
|
+
const args = ["opencode", "--model", model];
|
|
185
|
+
if (prompt)
|
|
186
|
+
args.push("-p", prompt);
|
|
187
|
+
return args;
|
|
183
188
|
},
|
|
184
189
|
parseStreamLine(_line) {
|
|
185
190
|
return [];
|
|
@@ -188,14 +193,22 @@ export const opencode = (model, options) => ({
|
|
|
188
193
|
export const claudeCode = (model, options) => ({
|
|
189
194
|
name: "claude-code",
|
|
190
195
|
env: options?.env ?? {},
|
|
191
|
-
buildPrintCommand(prompt) {
|
|
196
|
+
buildPrintCommand({ prompt, dangerouslySkipPermissions, }) {
|
|
197
|
+
const skipPerms = dangerouslySkipPermissions
|
|
198
|
+
? " --dangerously-skip-permissions"
|
|
199
|
+
: "";
|
|
192
200
|
const effortFlag = options?.effort ? ` --effort ${options.effort}` : "";
|
|
193
|
-
return `claude --print --verbose --
|
|
201
|
+
return `claude --print --verbose${skipPerms} --output-format stream-json --model ${shellEscape(model)}${effortFlag} -p ${shellEscape(prompt)}`;
|
|
194
202
|
},
|
|
195
|
-
buildInteractiveArgs(
|
|
196
|
-
const args = ["claude"
|
|
203
|
+
buildInteractiveArgs({ prompt, dangerouslySkipPermissions, }) {
|
|
204
|
+
const args = ["claude"];
|
|
205
|
+
if (dangerouslySkipPermissions)
|
|
206
|
+
args.push("--dangerously-skip-permissions");
|
|
207
|
+
args.push("--model", model);
|
|
197
208
|
if (options?.effort)
|
|
198
209
|
args.push("--effort", options.effort);
|
|
210
|
+
if (prompt)
|
|
211
|
+
args.push(prompt);
|
|
199
212
|
return args;
|
|
200
213
|
},
|
|
201
214
|
parseStreamLine(line) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentProvider.js","sourceRoot":"","sources":["../src/AgentProvider.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC;AAEhF,gFAAgF;AAChF,MAAM,eAAe,GAA2B;IAC9C,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,OAAO;IAClB,QAAQ,EAAE,KAAK;IACf,KAAK,EAAE,aAAa;CACrB,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAuB,EAAE;IAChE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;YACpE,MAAM,MAAM,GAAwB,EAAE,CAAC;YACvC,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,OAK7B,EAAE,CAAC;gBACJ,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC5D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACzB,CAAC;qBAAM,IACL,KAAK,CAAC,IAAI,KAAK,UAAU;oBACzB,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;oBAC9B,KAAK,CAAC,KAAK,KAAK,SAAS,EACzB,CAAC;oBACD,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC7C,IAAI,QAAQ,KAAK,SAAS;wBAAE,SAAS,CAAC,kBAAkB;oBACxD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBACvC,IAAI,OAAO,QAAQ,KAAK,QAAQ;wBAAE,SAAS,CAAC,0BAA0B;oBACtE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACrB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;wBACpD,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;oBACnB,CAAC;oBACD,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,IAAI,EAAE,QAAQ;qBACf,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACtD,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC5D,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"AgentProvider.js","sourceRoot":"","sources":["../src/AgentProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,5 +4,5 @@ import { Effect } from "effect";
|
|
|
4
4
|
* using `cp -R --reflink=auto` for copy-on-write when the filesystem supports it.
|
|
5
5
|
* Missing paths are silently skipped.
|
|
6
6
|
*/
|
|
7
|
-
export declare const
|
|
8
|
-
//# sourceMappingURL=
|
|
7
|
+
export declare const copyToWorkspace: (paths: string[], hostRepoDir: string, worktreePath: string) => Effect.Effect<void, never, never>;
|
|
8
|
+
//# sourceMappingURL=CopyToWorkspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CopyToWorkspace.d.ts","sourceRoot":"","sources":["../src/CopyToWorkspace.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC;;;;GAIG;AACH,eAAO,MAAM,eAAe,mGAyBxB,CAAC"}
|
|
@@ -7,7 +7,7 @@ import { Effect } from "effect";
|
|
|
7
7
|
* using `cp -R --reflink=auto` for copy-on-write when the filesystem supports it.
|
|
8
8
|
* Missing paths are silently skipped.
|
|
9
9
|
*/
|
|
10
|
-
export const
|
|
10
|
+
export const copyToWorkspace = (paths, hostRepoDir, worktreePath) => Effect.gen(function* () {
|
|
11
11
|
for (const relativePath of paths) {
|
|
12
12
|
const src = join(hostRepoDir, relativePath);
|
|
13
13
|
if (!existsSync(src)) {
|
|
@@ -29,4 +29,4 @@ export const copyToSandbox = (paths, hostRepoDir, worktreePath) => Effect.gen(fu
|
|
|
29
29
|
});
|
|
30
30
|
}
|
|
31
31
|
});
|
|
32
|
-
//# sourceMappingURL=
|
|
32
|
+
//# sourceMappingURL=CopyToWorkspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CopyToWorkspace.js","sourceRoot":"","sources":["../src/CopyToWorkspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,KAAe,EACf,WAAmB,EACnB,YAAoB,EACQ,EAAE,CAC9B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,KAAK,MAAM,YAAY,IAAI,KAAK,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAC9C,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAc,CAAC,MAAM,EAAE,EAAE;YAC1C,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC5D,IAAI,KAAK,EAAE,CAAC;oBACV,0DAA0D;oBAC1D,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE;wBACrC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;oBACpC,CAAC,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -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,
|
|
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,iCA2B9B,CAAC;AASF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,4FAiBqB,CAAC"}
|
package/dist/ErrorHandler.js
CHANGED
|
@@ -14,6 +14,8 @@ export const formatErrorMessage = (error) => {
|
|
|
14
14
|
return `File copy failed: ${error.message}`;
|
|
15
15
|
case "DockerError":
|
|
16
16
|
return `Docker operation failed: ${error.message}. Is Docker running?`;
|
|
17
|
+
case "PodmanError":
|
|
18
|
+
return `Podman operation failed: ${error.message}. Is Podman running?`;
|
|
17
19
|
case "SyncError":
|
|
18
20
|
return `Git sync failed: ${error.message}`;
|
|
19
21
|
case "WorktreeError":
|
|
@@ -47,6 +49,7 @@ Effect.catchTags(effect, {
|
|
|
47
49
|
ExecHostError: showErrorAndExit,
|
|
48
50
|
CopyError: showErrorAndExit,
|
|
49
51
|
DockerError: showErrorAndExit,
|
|
52
|
+
PodmanError: showErrorAndExit,
|
|
50
53
|
SyncError: showErrorAndExit,
|
|
51
54
|
WorktreeError: showErrorAndExit,
|
|
52
55
|
PromptError: showErrorAndExit,
|
package/dist/ErrorHandler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorHandler.js","sourceRoot":"","sources":["../src/ErrorHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAmB,EAAU,EAAE;IAChE,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,WAAW;YACd,OAAO,8BAA8B,KAAK,CAAC,OAAO,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;QAC1E,KAAK,eAAe;YAClB,OAAO,2BAA2B,KAAK,CAAC,OAAO,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;QACvE,KAAK,WAAW;YACd,OAAO,qBAAqB,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9C,KAAK,aAAa;YAChB,OAAO,4BAA4B,KAAK,CAAC,OAAO,sBAAsB,CAAC;QACzE,KAAK,WAAW;YACd,OAAO,oBAAoB,KAAK,CAAC,OAAO,EAAE,CAAC;QAC7C,KAAK,eAAe;YAClB,OAAO,kCAAkC,KAAK,CAAC,OAAO,EAAE,CAAC;QAC3D,KAAK,aAAa;YAChB,OAAO,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC;QACtD,KAAK,YAAY;YACf,OAAO,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC;QACrD,KAAK,gBAAgB;YACnB,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAC5B,KAAK,WAAW;YACd,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAC5B,KAAK,cAAc;YACjB,OAAO,KAAK,CAAC,OAAO,CAAC;IACzB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,KAAmB,EAAE,EAAE,CAC/C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC;IACzB,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;IACpD,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAU,CAAC,CAAC;AAC5D,CAAC,CAAC,CAAC;AAEL;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,MAA8B,EAC2B,EAAE;AAC3D,8DAA8D;AAC9D,MAAM,CAAC,SAAS,CAAC,MAA2C,EAAE;IAC5D,SAAS,EAAE,gBAAgB;IAC3B,aAAa,EAAE,gBAAgB;IAC/B,SAAS,EAAE,gBAAgB;IAC3B,WAAW,EAAE,gBAAgB;IAC7B,SAAS,EAAE,gBAAgB;IAC3B,aAAa,EAAE,gBAAgB;IAC/B,WAAW,EAAE,gBAAgB;IAC7B,UAAU,EAAE,gBAAgB;IAC5B,cAAc,EAAE,gBAAgB;IAChC,SAAS,EAAE,gBAAgB;IAC3B,YAAY,EAAE,gBAAgB;CAC/B,CAA4D,CAAC"}
|
|
1
|
+
{"version":3,"file":"ErrorHandler.js","sourceRoot":"","sources":["../src/ErrorHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAmB,EAAU,EAAE;IAChE,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,WAAW;YACd,OAAO,8BAA8B,KAAK,CAAC,OAAO,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;QAC1E,KAAK,eAAe;YAClB,OAAO,2BAA2B,KAAK,CAAC,OAAO,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;QACvE,KAAK,WAAW;YACd,OAAO,qBAAqB,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9C,KAAK,aAAa;YAChB,OAAO,4BAA4B,KAAK,CAAC,OAAO,sBAAsB,CAAC;QACzE,KAAK,aAAa;YAChB,OAAO,4BAA4B,KAAK,CAAC,OAAO,sBAAsB,CAAC;QACzE,KAAK,WAAW;YACd,OAAO,oBAAoB,KAAK,CAAC,OAAO,EAAE,CAAC;QAC7C,KAAK,eAAe;YAClB,OAAO,kCAAkC,KAAK,CAAC,OAAO,EAAE,CAAC;QAC3D,KAAK,aAAa;YAChB,OAAO,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC;QACtD,KAAK,YAAY;YACf,OAAO,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC;QACrD,KAAK,gBAAgB;YACnB,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAC5B,KAAK,WAAW;YACd,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAC5B,KAAK,cAAc;YACjB,OAAO,KAAK,CAAC,OAAO,CAAC;IACzB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,KAAmB,EAAE,EAAE,CAC/C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC;IACzB,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;IACpD,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAU,CAAC,CAAC;AAC5D,CAAC,CAAC,CAAC;AAEL;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,MAA8B,EAC2B,EAAE;AAC3D,8DAA8D;AAC9D,MAAM,CAAC,SAAS,CAAC,MAA2C,EAAE;IAC5D,SAAS,EAAE,gBAAgB;IAC3B,aAAa,EAAE,gBAAgB;IAC/B,SAAS,EAAE,gBAAgB;IAC3B,WAAW,EAAE,gBAAgB;IAC7B,WAAW,EAAE,gBAAgB;IAC7B,SAAS,EAAE,gBAAgB;IAC3B,aAAa,EAAE,gBAAgB;IAC/B,WAAW,EAAE,gBAAgB;IAC7B,UAAU,EAAE,gBAAgB;IAC5B,cAAc,EAAE,gBAAgB;IAChC,SAAS,EAAE,gBAAgB;IAC3B,YAAY,EAAE,gBAAgB;CAC/B,CAA4D,CAAC"}
|
package/dist/InitService.d.ts
CHANGED
|
@@ -13,12 +13,36 @@ export interface AgentEntry {
|
|
|
13
13
|
readonly dockerfileTemplate: string;
|
|
14
14
|
}
|
|
15
15
|
export declare const listAgents: () => AgentEntry[];
|
|
16
|
+
export interface BacklogManagerEntry {
|
|
17
|
+
readonly name: string;
|
|
18
|
+
readonly label: string;
|
|
19
|
+
readonly placeholders: {
|
|
20
|
+
readonly LIST_TASKS_COMMAND: string;
|
|
21
|
+
readonly VIEW_TASK_COMMAND: string;
|
|
22
|
+
readonly CLOSE_TASK_COMMAND: string;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export declare const listBacklogManagers: () => BacklogManagerEntry[];
|
|
26
|
+
export declare const getBacklogManager: (name: string) => BacklogManagerEntry | undefined;
|
|
16
27
|
export declare const getAgent: (name: string) => AgentEntry | undefined;
|
|
28
|
+
export interface SandboxProviderEntry {
|
|
29
|
+
readonly name: string;
|
|
30
|
+
readonly label: string;
|
|
31
|
+
/** Filename written to .sandcastle/ (e.g. "Dockerfile" or "Containerfile") */
|
|
32
|
+
readonly containerfileName: string;
|
|
33
|
+
/** CLI namespace for build/remove commands (e.g. "docker" or "podman") */
|
|
34
|
+
readonly cliNamespace: string;
|
|
35
|
+
}
|
|
36
|
+
export declare const listSandboxProviders: () => SandboxProviderEntry[];
|
|
37
|
+
export declare const getSandboxProvider: (name: string) => SandboxProviderEntry | undefined;
|
|
17
38
|
export declare function getNextStepsLines(template: string, mainFilename: string): string[];
|
|
18
39
|
export interface ScaffoldOptions {
|
|
19
40
|
agent: AgentEntry;
|
|
20
41
|
model: string;
|
|
21
42
|
templateName?: string;
|
|
43
|
+
createLabel?: boolean;
|
|
44
|
+
backlogManager?: BacklogManagerEntry;
|
|
45
|
+
sandboxProvider?: SandboxProviderEntry;
|
|
22
46
|
}
|
|
23
47
|
export interface ScaffoldResult {
|
|
24
48
|
mainFilename: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InitService.d.ts","sourceRoot":"","sources":["../src/InitService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAUhC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AA4BD,eAAO,MAAM,aAAa,0BAAsC,CAAC;AAMjE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;
|
|
1
|
+
{"version":3,"file":"InitService.d.ts","sourceRoot":"","sources":["../src/InitService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAUhC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AA4BD,eAAO,MAAM,aAAa,0BAAsC,CAAC;AAMjE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AA+KD,eAAO,MAAM,UAAU,oBAAqC,CAAC;AAM7D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE;QACrB,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;QACpC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;QACnC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;KACrC,CAAC;CACH;AAuBD,eAAO,MAAM,mBAAmB,6BACN,CAAC;AAE3B,eAAO,MAAM,iBAAiB,mDAGyB,CAAC;AAExD,eAAO,MAAM,QAAQ,0CACwB,CAAC;AAM9C,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,0EAA0E;IAC1E,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAiBD,eAAO,MAAM,oBAAoB,8BACN,CAAC;AAE5B,eAAO,MAAM,kBAAkB,oDAGyB,CAAC;AAMzD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,MAAM,EAAE,CA8BV;AAqMD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,eAAe,CAAC,EAAE,oBAAoB,CAAC;CACxC;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;CACtB;AA2BD,eAAO,MAAM,QAAQ,4GA+DjB,CAAC"}
|
package/dist/InitService.js
CHANGED
|
@@ -47,8 +47,10 @@ RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg \\
|
|
|
47
47
|
&& apt-get update && apt-get install -y gh \\
|
|
48
48
|
&& rm -rf /var/lib/apt/lists/*
|
|
49
49
|
|
|
50
|
-
#
|
|
51
|
-
|
|
50
|
+
# Rename the base image's "node" user (UID 1000) to "agent".
|
|
51
|
+
# This keeps UID 1000 so that --userns=keep-id (Podman) and
|
|
52
|
+
# --user 1000:1000 (Docker) map to the correct home directory owner.
|
|
53
|
+
RUN usermod -d /home/agent -m -l agent node
|
|
52
54
|
USER agent
|
|
53
55
|
|
|
54
56
|
# Install Claude Code CLI
|
|
@@ -81,8 +83,10 @@ RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg \\
|
|
|
81
83
|
&& apt-get update && apt-get install -y gh \\
|
|
82
84
|
&& rm -rf /var/lib/apt/lists/*
|
|
83
85
|
|
|
84
|
-
#
|
|
85
|
-
|
|
86
|
+
# Rename the base image's "node" user (UID 1000) to "agent".
|
|
87
|
+
# This keeps UID 1000 so that --userns=keep-id (Podman) and
|
|
88
|
+
# --user 1000:1000 (Docker) map to the correct home directory owner.
|
|
89
|
+
RUN usermod -d /home/agent -m -l agent node
|
|
86
90
|
|
|
87
91
|
# Install pi coding agent (run as root before USER agent)
|
|
88
92
|
RUN npm install -g @mariozechner/pi-coding-agent
|
|
@@ -113,8 +117,10 @@ RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg \\
|
|
|
113
117
|
&& apt-get update && apt-get install -y gh \\
|
|
114
118
|
&& rm -rf /var/lib/apt/lists/*
|
|
115
119
|
|
|
116
|
-
#
|
|
117
|
-
|
|
120
|
+
# Rename the base image's "node" user (UID 1000) to "agent".
|
|
121
|
+
# This keeps UID 1000 so that --userns=keep-id (Podman) and
|
|
122
|
+
# --user 1000:1000 (Docker) map to the correct home directory owner.
|
|
123
|
+
RUN usermod -d /home/agent -m -l agent node
|
|
118
124
|
|
|
119
125
|
# Install Codex CLI (run as root before USER agent)
|
|
120
126
|
RUN npm install -g @openai/codex
|
|
@@ -145,8 +151,10 @@ RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg \\
|
|
|
145
151
|
&& apt-get update && apt-get install -y gh \\
|
|
146
152
|
&& rm -rf /var/lib/apt/lists/*
|
|
147
153
|
|
|
148
|
-
#
|
|
149
|
-
|
|
154
|
+
# Rename the base image's "node" user (UID 1000) to "agent".
|
|
155
|
+
# This keeps UID 1000 so that --userns=keep-id (Podman) and
|
|
156
|
+
# --user 1000:1000 (Docker) map to the correct home directory owner.
|
|
157
|
+
RUN usermod -d /home/agent -m -l agent node
|
|
150
158
|
|
|
151
159
|
# Install OpenCode CLI (run as root before USER agent)
|
|
152
160
|
RUN npm install -g opencode-ai@latest
|
|
@@ -191,7 +199,45 @@ const AGENT_REGISTRY = [
|
|
|
191
199
|
},
|
|
192
200
|
];
|
|
193
201
|
export const listAgents = () => AGENT_REGISTRY;
|
|
202
|
+
const BACKLOG_MANAGER_REGISTRY = [
|
|
203
|
+
{
|
|
204
|
+
name: "github-issues",
|
|
205
|
+
label: "GitHub Issues",
|
|
206
|
+
placeholders: {
|
|
207
|
+
LIST_TASKS_COMMAND: `gh issue list --state open --label Sandcastle --json number,title,body,labels,comments --jq '[.[] | {number, title, body, labels: [.labels[].name], comments: [.comments[].body]}]'`,
|
|
208
|
+
VIEW_TASK_COMMAND: "gh issue view {{TASK_ID}}",
|
|
209
|
+
CLOSE_TASK_COMMAND: `gh issue close {{TASK_ID}} --comment "Completed by Sandcastle"`,
|
|
210
|
+
},
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
name: "beads",
|
|
214
|
+
label: "Beads",
|
|
215
|
+
placeholders: {
|
|
216
|
+
LIST_TASKS_COMMAND: "bd ready --json",
|
|
217
|
+
VIEW_TASK_COMMAND: "bd show {{TASK_ID}}",
|
|
218
|
+
CLOSE_TASK_COMMAND: `bd close {{TASK_ID}} "Completed by Sandcastle"`,
|
|
219
|
+
},
|
|
220
|
+
},
|
|
221
|
+
];
|
|
222
|
+
export const listBacklogManagers = () => BACKLOG_MANAGER_REGISTRY;
|
|
223
|
+
export const getBacklogManager = (name) => BACKLOG_MANAGER_REGISTRY.find((b) => b.name === name);
|
|
194
224
|
export const getAgent = (name) => AGENT_REGISTRY.find((a) => a.name === name);
|
|
225
|
+
const SANDBOX_PROVIDER_REGISTRY = [
|
|
226
|
+
{
|
|
227
|
+
name: "docker",
|
|
228
|
+
label: "Docker",
|
|
229
|
+
containerfileName: "Dockerfile",
|
|
230
|
+
cliNamespace: "docker",
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
name: "podman",
|
|
234
|
+
label: "Podman",
|
|
235
|
+
containerfileName: "Containerfile",
|
|
236
|
+
cliNamespace: "podman",
|
|
237
|
+
},
|
|
238
|
+
];
|
|
239
|
+
export const listSandboxProviders = () => SANDBOX_PROVIDER_REGISTRY;
|
|
240
|
+
export const getSandboxProvider = (name) => SANDBOX_PROVIDER_REGISTRY.find((p) => p.name === name);
|
|
195
241
|
// ---------------------------------------------------------------------------
|
|
196
242
|
// Next steps
|
|
197
243
|
// ---------------------------------------------------------------------------
|
|
@@ -215,7 +261,7 @@ export function getNextStepsLines(template, mainFilename) {
|
|
|
215
261
|
`${step++}. Set the required env vars in .sandcastle/.env (see .sandcastle/.env.example)`,
|
|
216
262
|
" If you want to use your Claude subscription instead of an API key, see https://github.com/mattpocock/sandcastle/issues/191",
|
|
217
263
|
`${step++}. Add "sandcastle": "npx tsx .sandcastle/${mainFilename}" to your package.json scripts`,
|
|
218
|
-
`${step++}. Templates use \`
|
|
264
|
+
`${step++}. Templates use \`copyToWorkspace: ["node_modules"]\` to copy your host node_modules into the sandbox for fast startup — the \`npm install\` in the onSandboxReady hook is a safety net for platform-specific binaries. Adjust both if you use a different package manager`,
|
|
219
265
|
`${step++}. Read and customize the prompt files in .sandcastle/ — they shape what the agent does`,
|
|
220
266
|
];
|
|
221
267
|
if (hasReviewer) {
|
|
@@ -298,6 +344,58 @@ const rewriteMainTs = (configDir, agent, model, mainFilename) => Effect.gen(func
|
|
|
298
344
|
.writeFileString(mainTsPath, content)
|
|
299
345
|
.pipe(Effect.mapError((e) => new Error(e.message)));
|
|
300
346
|
});
|
|
347
|
+
/**
|
|
348
|
+
* When the user opted out of the Sandcastle label, strip ` --label Sandcastle`
|
|
349
|
+
* from all `.md` files in the scaffolded config directory so that `gh issue list`
|
|
350
|
+
* commands work without a label filter.
|
|
351
|
+
*/
|
|
352
|
+
const rewritePromptFiles = (configDir) => Effect.gen(function* () {
|
|
353
|
+
const fs = yield* FileSystem.FileSystem;
|
|
354
|
+
const files = yield* fs
|
|
355
|
+
.readDirectory(configDir)
|
|
356
|
+
.pipe(Effect.mapError((e) => new Error(e.message)));
|
|
357
|
+
const mdFiles = files.filter((f) => f.endsWith(".md"));
|
|
358
|
+
yield* Effect.all(mdFiles.map((f) => Effect.gen(function* () {
|
|
359
|
+
const filePath = join(configDir, f);
|
|
360
|
+
const content = yield* fs
|
|
361
|
+
.readFileString(filePath)
|
|
362
|
+
.pipe(Effect.mapError((e) => new Error(e.message)));
|
|
363
|
+
const updated = content.replace(/ --label Sandcastle/g, "");
|
|
364
|
+
if (updated !== content) {
|
|
365
|
+
yield* fs
|
|
366
|
+
.writeFileString(filePath, updated)
|
|
367
|
+
.pipe(Effect.mapError((e) => new Error(e.message)));
|
|
368
|
+
}
|
|
369
|
+
})), { concurrency: "unbounded" });
|
|
370
|
+
});
|
|
371
|
+
/**
|
|
372
|
+
* Replace backlog manager placeholders in all `.md` files in the scaffolded
|
|
373
|
+
* config directory. Placeholders: `{{LIST_TASKS_COMMAND}}`,
|
|
374
|
+
* `{{VIEW_TASK_COMMAND}}`, `{{CLOSE_TASK_COMMAND}}`.
|
|
375
|
+
*/
|
|
376
|
+
const rewriteBacklogPlaceholders = (configDir, backlogManager) => Effect.gen(function* () {
|
|
377
|
+
const fs = yield* FileSystem.FileSystem;
|
|
378
|
+
const files = yield* fs
|
|
379
|
+
.readDirectory(configDir)
|
|
380
|
+
.pipe(Effect.mapError((e) => new Error(e.message)));
|
|
381
|
+
const mdFiles = files.filter((f) => f.endsWith(".md"));
|
|
382
|
+
yield* Effect.all(mdFiles.map((f) => Effect.gen(function* () {
|
|
383
|
+
const filePath = join(configDir, f);
|
|
384
|
+
let content = yield* fs
|
|
385
|
+
.readFileString(filePath)
|
|
386
|
+
.pipe(Effect.mapError((e) => new Error(e.message)));
|
|
387
|
+
const original = content;
|
|
388
|
+
const { placeholders } = backlogManager;
|
|
389
|
+
content = content.replace(/\{\{LIST_TASKS_COMMAND\}\}/g, placeholders.LIST_TASKS_COMMAND);
|
|
390
|
+
content = content.replace(/\{\{VIEW_TASK_COMMAND\}\}/g, placeholders.VIEW_TASK_COMMAND);
|
|
391
|
+
content = content.replace(/\{\{CLOSE_TASK_COMMAND\}\}/g, placeholders.CLOSE_TASK_COMMAND);
|
|
392
|
+
if (content !== original) {
|
|
393
|
+
yield* fs
|
|
394
|
+
.writeFileString(filePath, content)
|
|
395
|
+
.pipe(Effect.mapError((e) => new Error(e.message)));
|
|
396
|
+
}
|
|
397
|
+
})), { concurrency: "unbounded" });
|
|
398
|
+
});
|
|
301
399
|
/**
|
|
302
400
|
* Detect whether the project's package.json has `"type": "module"`.
|
|
303
401
|
* If so, we can use plain `.ts`; otherwise we use `.mts` to ensure ESM.
|
|
@@ -322,7 +420,9 @@ const detectMainFilename = (repoDir) => Effect.gen(function* () {
|
|
|
322
420
|
}
|
|
323
421
|
});
|
|
324
422
|
export const scaffold = (repoDir, options) => Effect.gen(function* () {
|
|
325
|
-
const { agent, model, templateName = "blank"
|
|
423
|
+
const { agent, model, templateName = "blank", createLabel = true, backlogManager = BACKLOG_MANAGER_REGISTRY[0], // default: github-issues
|
|
424
|
+
sandboxProvider = SANDBOX_PROVIDER_REGISTRY[0], // default: docker
|
|
425
|
+
} = options;
|
|
326
426
|
const fs = yield* FileSystem.FileSystem;
|
|
327
427
|
const configDir = join(repoDir, ".sandcastle");
|
|
328
428
|
const exists = yield* fs
|
|
@@ -338,7 +438,7 @@ export const scaffold = (repoDir, options) => Effect.gen(function* () {
|
|
|
338
438
|
const templateDir = yield* getTemplateDir(templateName);
|
|
339
439
|
yield* Effect.all([
|
|
340
440
|
fs
|
|
341
|
-
.writeFileString(join(configDir,
|
|
441
|
+
.writeFileString(join(configDir, sandboxProvider.containerfileName), agent.dockerfileTemplate)
|
|
342
442
|
.pipe(Effect.mapError((e) => new Error(e.message))),
|
|
343
443
|
fs
|
|
344
444
|
.writeFileString(join(configDir, ".gitignore"), GITIGNORE)
|
|
@@ -347,6 +447,12 @@ export const scaffold = (repoDir, options) => Effect.gen(function* () {
|
|
|
347
447
|
], { concurrency: "unbounded" });
|
|
348
448
|
// Rewrite main file with the selected agent factory and model
|
|
349
449
|
yield* rewriteMainTs(configDir, agent, model, mainFilename);
|
|
450
|
+
// Replace backlog manager placeholders in prompt files (must run before label stripping)
|
|
451
|
+
yield* rewriteBacklogPlaceholders(configDir, backlogManager);
|
|
452
|
+
// Strip --label Sandcastle from prompt files when the user declined label creation
|
|
453
|
+
if (!createLabel) {
|
|
454
|
+
yield* rewritePromptFiles(configDir);
|
|
455
|
+
}
|
|
350
456
|
return { mainFilename };
|
|
351
457
|
});
|
|
352
458
|
//# sourceMappingURL=InitService.js.map
|