@ai-hero/sandcastle 0.1.7 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +160 -31
- package/dist/AgentProvider.d.ts +28 -4
- package/dist/AgentProvider.d.ts.map +1 -1
- package/dist/AgentProvider.js +193 -49
- package/dist/AgentProvider.js.map +1 -1
- package/dist/InitService.d.ts +16 -3
- package/dist/InitService.d.ts.map +1 -1
- package/dist/InitService.js +166 -19
- package/dist/InitService.js.map +1 -1
- package/dist/Orchestrator.d.ts +9 -34
- package/dist/Orchestrator.d.ts.map +1 -1
- package/dist/Orchestrator.js +38 -105
- package/dist/Orchestrator.js.map +1 -1
- package/dist/SandboxFactory.d.ts +14 -5
- package/dist/SandboxFactory.d.ts.map +1 -1
- package/dist/SandboxFactory.js +86 -36
- package/dist/SandboxFactory.js.map +1 -1
- package/dist/WorktreeManager.d.ts +10 -5
- package/dist/WorktreeManager.d.ts.map +1 -1
- package/dist/WorktreeManager.js +13 -8
- package/dist/WorktreeManager.js.map +1 -1
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +75 -27
- package/dist/cli.js.map +1 -1
- package/dist/createSandbox.d.ts +82 -0
- package/dist/createSandbox.d.ts.map +1 -0
- package/dist/createSandbox.js +192 -0
- package/dist/createSandbox.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/run.d.ts +22 -6
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +36 -31
- package/dist/run.js.map +1 -1
- package/dist/templates/blank/.env.example +4 -0
- package/dist/templates/blank/main.ts +2 -1
- package/dist/templates/parallel-planner/.env.example +4 -0
- package/dist/templates/parallel-planner/main.ts +4 -4
- package/dist/templates/sequential-reviewer/.env.example +4 -0
- package/dist/templates/sequential-reviewer/main.ts +3 -3
- package/dist/templates/simple-loop/.env.example +4 -0
- package/dist/templates/simple-loop/main.ts +6 -5
- package/package.json +2 -2
package/dist/SandboxFactory.d.ts
CHANGED
|
@@ -20,14 +20,20 @@ export interface SandboxService {
|
|
|
20
20
|
declare const Sandbox_base: Context.TagClass<Sandbox, "Sandbox", SandboxService>;
|
|
21
21
|
export declare class Sandbox extends Sandbox_base {
|
|
22
22
|
}
|
|
23
|
+
export declare const makeDockerSandboxLayer: (containerName: string) => Layer.Layer<Sandbox, never, never>;
|
|
23
24
|
/** The mount point inside the container where the project worktree is bound. */
|
|
24
25
|
export declare const SANDBOX_WORKSPACE_DIR = "/home/agent/workspace";
|
|
25
26
|
export interface SandboxInfo {
|
|
26
27
|
/** Host-side path to the worktree directory (worktree mode only). */
|
|
27
28
|
readonly hostWorktreePath?: string;
|
|
28
29
|
}
|
|
30
|
+
export interface WithSandboxResult<A> {
|
|
31
|
+
readonly value: A;
|
|
32
|
+
/** Host path to the preserved worktree, set when the worktree was left behind due to uncommitted changes. */
|
|
33
|
+
readonly preservedWorktreePath?: string;
|
|
34
|
+
}
|
|
29
35
|
declare const SandboxFactory_base: Context.TagClass<SandboxFactory, "SandboxFactory", {
|
|
30
|
-
readonly withSandbox: <A, E, R>(makeEffect: (info: SandboxInfo) => Effect.Effect<A, E, R | Sandbox>) => Effect.Effect<A
|
|
36
|
+
readonly withSandbox: <A, E, R>(makeEffect: (info: SandboxInfo) => Effect.Effect<A, E, R | Sandbox>) => Effect.Effect<WithSandboxResult<A>, E | DockerError | WorktreeError, Exclude<R, Sandbox>>;
|
|
31
37
|
}>;
|
|
32
38
|
export declare class SandboxFactory extends SandboxFactory_base {
|
|
33
39
|
}
|
|
@@ -35,12 +41,12 @@ declare const WorktreeSandboxConfig_base: Context.TagClass<WorktreeSandboxConfig
|
|
|
35
41
|
readonly imageName: string;
|
|
36
42
|
readonly env: Record<string, string>;
|
|
37
43
|
readonly hostRepoDir: string;
|
|
38
|
-
/**
|
|
39
|
-
readonly
|
|
44
|
+
/** Worktree mode: none, temp-branch (default), or explicit branch. */
|
|
45
|
+
readonly worktree?: import("./run.js").WorktreeMode | undefined;
|
|
40
46
|
/** Paths relative to the host repo root to copy into the worktree before container start. */
|
|
41
47
|
readonly copyToSandbox?: string[] | undefined;
|
|
42
|
-
/** When specified, the
|
|
43
|
-
readonly
|
|
48
|
+
/** When specified, the run name is included in the auto-generated branch and worktree names. */
|
|
49
|
+
readonly name?: string | undefined;
|
|
44
50
|
}>;
|
|
45
51
|
export declare class WorktreeSandboxConfig extends WorktreeSandboxConfig_base {
|
|
46
52
|
}
|
|
@@ -48,6 +54,9 @@ export declare class WorktreeSandboxConfig extends WorktreeSandboxConfig_base {
|
|
|
48
54
|
* Worktree sandbox mode: creates a git worktree and bind-mounts it into the
|
|
49
55
|
* container at SANDBOX_WORKSPACE_DIR. The host's .git directory is also bind-mounted at
|
|
50
56
|
* its original host path so the worktree's .git file pointer resolves correctly.
|
|
57
|
+
*
|
|
58
|
+
* In 'none' mode: bind-mounts the host's working directory directly into the container.
|
|
59
|
+
* No worktree is created, pruned, or cleaned up.
|
|
51
60
|
*/
|
|
52
61
|
export declare const WorktreeDockerSandboxFactory: {
|
|
53
62
|
layer: Layer.Layer<SandboxFactory, never, Display | FileSystem.FileSystem | WorktreeSandboxConfig>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SandboxFactory.d.ts","sourceRoot":"","sources":["../src/SandboxFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAQ,KAAK,EAAE,MAAM,QAAQ,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAW9C,OAAO,EAEL,SAAS,EACT,SAAS,EAET,KAAK,WAAW,EAChB,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,CACb,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,KACvB,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAE1C,QAAQ,CAAC,aAAa,EAAE,CACtB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EACpC,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,KACvB,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAE1C,QAAQ,CAAC,MAAM,EAAE,CACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAEpC,QAAQ,CAAC,OAAO,EAAE,CAChB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,KACb,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;CACrC;;AAED,qBAAa,OAAQ,SAAQ,YAG1B;CAAG;
|
|
1
|
+
{"version":3,"file":"SandboxFactory.d.ts","sourceRoot":"","sources":["../src/SandboxFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAQ,KAAK,EAAE,MAAM,QAAQ,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAW9C,OAAO,EAEL,SAAS,EACT,SAAS,EAET,KAAK,WAAW,EAChB,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,CACb,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,KACvB,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAE1C,QAAQ,CAAC,aAAa,EAAE,CACtB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EACpC,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,KACvB,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAE1C,QAAQ,CAAC,MAAM,EAAE,CACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAEpC,QAAQ,CAAC,OAAO,EAAE,CAChB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,KACb,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;CACrC;;AAED,qBAAa,OAAQ,SAAQ,YAG1B;CAAG;AA2KN,eAAO,MAAM,sBAAsB,+DAKhC,CAAC;AAEJ,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,qEAAqE;IACrE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,6GAA6G;IAC7G,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CACzC;;2BAK0B,CAAC,EAAE,CAAC,EAAE,CAAC;;AAHlC,qBAAa,cAAe,SAAQ,mBAWjC;CAAG;;;;;IAoBF,sEAAsE;;IAEtE,6FAA6F;;IAE7F,gGAAgG;;;AAVpG,qBAAa,qBAAsB,SAAQ,0BAaxC;CAAG;AA2DN;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B;;CAsNxC,CAAC"}
|
package/dist/SandboxFactory.js
CHANGED
|
@@ -118,7 +118,7 @@ const makeDockerSandbox = (containerName) => Effect.gen(function* () {
|
|
|
118
118
|
}),
|
|
119
119
|
};
|
|
120
120
|
});
|
|
121
|
-
const makeDockerSandboxLayer = (containerName) => Layer.effect(Sandbox, makeDockerSandbox(containerName)).pipe(Layer.provide(NodeFileSystem.layer));
|
|
121
|
+
export const makeDockerSandboxLayer = (containerName) => Layer.effect(Sandbox, makeDockerSandbox(containerName)).pipe(Layer.provide(NodeFileSystem.layer));
|
|
122
122
|
/** The mount point inside the container where the project worktree is bound. */
|
|
123
123
|
export const SANDBOX_WORKSPACE_DIR = "/home/agent/workspace";
|
|
124
124
|
export class SandboxFactory extends Context.Tag("SandboxFactory")() {
|
|
@@ -138,27 +138,76 @@ const forceRemoveContainerSync = (containerName) => {
|
|
|
138
138
|
export class WorktreeSandboxConfig extends Context.Tag("WorktreeSandboxConfig")() {
|
|
139
139
|
}
|
|
140
140
|
/**
|
|
141
|
-
* Print a message to stderr
|
|
142
|
-
* and how to clean it up manually.
|
|
141
|
+
* Print a message to stderr about a preserved worktree, with review and cleanup instructions.
|
|
143
142
|
*/
|
|
144
|
-
const printWorktreePreservedMessage = (worktreePath) => {
|
|
145
|
-
console.error(`\
|
|
143
|
+
const printWorktreePreservedMessage = (worktreePath, reason) => {
|
|
144
|
+
console.error(`\n${reason}`);
|
|
146
145
|
console.error(` To review: cd ${worktreePath}`);
|
|
147
146
|
console.error(` To clean up: git worktree remove --force ${worktreePath}`);
|
|
148
147
|
};
|
|
148
|
+
/**
|
|
149
|
+
* Start a Docker container with the given volume mounts and return cleanup helpers.
|
|
150
|
+
* Shared between worktree and none modes.
|
|
151
|
+
*/
|
|
152
|
+
const startSandboxContainer = (containerName, imageName, env, volumeMounts) => {
|
|
153
|
+
const cleanupContainerOnly = () => {
|
|
154
|
+
forceRemoveContainerSync(containerName);
|
|
155
|
+
};
|
|
156
|
+
const onSignal = () => {
|
|
157
|
+
cleanupContainerOnly();
|
|
158
|
+
process.exit(1);
|
|
159
|
+
};
|
|
160
|
+
const hostUid = process.getuid?.() ?? 1000;
|
|
161
|
+
const hostGid = process.getgid?.() ?? 1000;
|
|
162
|
+
return startContainer(containerName, imageName, { ...env, HOME: "/home/agent" }, {
|
|
163
|
+
volumeMounts,
|
|
164
|
+
workdir: SANDBOX_WORKSPACE_DIR,
|
|
165
|
+
user: `${hostUid}:${hostGid}`,
|
|
166
|
+
}).pipe(Effect.andThen(chownInContainer(containerName, `${hostUid}:${hostGid}`, "/home/agent")), Effect.tap(() => Effect.sync(() => {
|
|
167
|
+
process.on("exit", cleanupContainerOnly);
|
|
168
|
+
process.on("SIGINT", onSignal);
|
|
169
|
+
process.on("SIGTERM", onSignal);
|
|
170
|
+
})), Effect.map(() => ({ cleanupContainerOnly, onSignal })));
|
|
171
|
+
};
|
|
149
172
|
/**
|
|
150
173
|
* Worktree sandbox mode: creates a git worktree and bind-mounts it into the
|
|
151
174
|
* container at SANDBOX_WORKSPACE_DIR. The host's .git directory is also bind-mounted at
|
|
152
175
|
* its original host path so the worktree's .git file pointer resolves correctly.
|
|
176
|
+
*
|
|
177
|
+
* In 'none' mode: bind-mounts the host's working directory directly into the container.
|
|
178
|
+
* No worktree is created, pruned, or cleaned up.
|
|
153
179
|
*/
|
|
154
180
|
export const WorktreeDockerSandboxFactory = {
|
|
155
181
|
layer: Layer.effect(SandboxFactory, Effect.gen(function* () {
|
|
156
|
-
const { imageName, env, hostRepoDir,
|
|
182
|
+
const { imageName, env, hostRepoDir, worktree: worktreeMode, copyToSandbox: copyPaths, name, } = yield* WorktreeSandboxConfig;
|
|
183
|
+
const isNoneMode = worktreeMode?.mode === "none";
|
|
184
|
+
const branch = worktreeMode?.mode === "branch" ? worktreeMode.branch : undefined;
|
|
157
185
|
const fileSystem = yield* FileSystem.FileSystem;
|
|
158
186
|
const display = yield* Display;
|
|
159
187
|
return {
|
|
160
188
|
withSandbox: (makeEffect) => {
|
|
161
189
|
const containerName = `sandcastle-${randomUUID()}`;
|
|
190
|
+
if (isNoneMode) {
|
|
191
|
+
// None mode: bind-mount host directory directly, no worktree
|
|
192
|
+
const gitDir = join(hostRepoDir, ".git");
|
|
193
|
+
const volumeMounts = [
|
|
194
|
+
`${hostRepoDir}:${SANDBOX_WORKSPACE_DIR}`,
|
|
195
|
+
`${gitDir}:${gitDir}`,
|
|
196
|
+
];
|
|
197
|
+
return Effect.acquireUseRelease(startSandboxContainer(containerName, imageName, env, volumeMounts),
|
|
198
|
+
// Use
|
|
199
|
+
() => makeEffect({}).pipe(Effect.provide(makeDockerSandboxLayer(containerName))),
|
|
200
|
+
// Release: remove container only (no worktree to clean up)
|
|
201
|
+
({ cleanupContainerOnly, onSignal }) => Effect.sync(() => {
|
|
202
|
+
process.removeListener("exit", cleanupContainerOnly);
|
|
203
|
+
process.removeListener("SIGINT", onSignal);
|
|
204
|
+
process.removeListener("SIGTERM", onSignal);
|
|
205
|
+
}).pipe(Effect.andThen(removeContainer(containerName)), Effect.orDie)).pipe(Effect.map((value) => ({
|
|
206
|
+
value,
|
|
207
|
+
preservedWorktreePath: undefined,
|
|
208
|
+
})));
|
|
209
|
+
}
|
|
210
|
+
// Worktree mode (temp-branch or explicit branch)
|
|
162
211
|
// Populated by the release phase when a worktree is preserved on failure,
|
|
163
212
|
// so we can attach the path to recognized error types before they propagate.
|
|
164
213
|
let preservedWorktreePath;
|
|
@@ -170,7 +219,7 @@ export const WorktreeDockerSandboxFactory = {
|
|
|
170
219
|
})))
|
|
171
220
|
.pipe(Effect.andThen(branch
|
|
172
221
|
? WorktreeManager.create(hostRepoDir, { branch })
|
|
173
|
-
: WorktreeManager.create(hostRepoDir, {
|
|
222
|
+
: WorktreeManager.create(hostRepoDir, { name })))
|
|
174
223
|
.pipe(Effect.provideService(FileSystem.FileSystem, fileSystem))
|
|
175
224
|
.pipe(Effect.flatMap((worktreeInfo) => (copyPaths && copyPaths.length > 0
|
|
176
225
|
? display.spinner("Copying to sandbox", copyToSandbox(copyPaths, hostRepoDir, worktreeInfo.path))
|
|
@@ -181,29 +230,18 @@ export const WorktreeDockerSandboxFactory = {
|
|
|
181
230
|
`${worktreeInfo.path}:${SANDBOX_WORKSPACE_DIR}`,
|
|
182
231
|
`${gitDir}:${gitDir}`,
|
|
183
232
|
];
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
return startContainer(containerName, imageName, { ...env, HOME: "/home/agent" }, {
|
|
197
|
-
volumeMounts,
|
|
198
|
-
workdir: SANDBOX_WORKSPACE_DIR,
|
|
199
|
-
user: `${hostUid}:${hostGid}`,
|
|
200
|
-
}).pipe(Effect.andThen(chownInContainer(containerName, `${hostUid}:${hostGid}`, "/home/agent")), Effect.tap(() => Effect.sync(() => {
|
|
201
|
-
// exit handler only removes the container; the worktree is preserved
|
|
202
|
-
// on abnormal exit just as on SIGINT/SIGTERM.
|
|
203
|
-
process.on("exit", cleanupContainerOnly);
|
|
204
|
-
process.on("SIGINT", onSignal);
|
|
205
|
-
process.on("SIGTERM", onSignal);
|
|
206
|
-
})), Effect.map(() => ({
|
|
233
|
+
return startSandboxContainer(containerName, imageName, env, volumeMounts).pipe(Effect.tap(({ cleanupContainerOnly, onSignal }) => Effect.sync(() => {
|
|
234
|
+
// Override the default signal handler to also preserve the worktree
|
|
235
|
+
process.removeListener("SIGINT", onSignal);
|
|
236
|
+
process.removeListener("SIGTERM", onSignal);
|
|
237
|
+
const onSignalWithWorktree = () => {
|
|
238
|
+
cleanupContainerOnly();
|
|
239
|
+
printWorktreePreservedMessage(worktreeInfo.path, `Worktree preserved at ${worktreeInfo.path}`);
|
|
240
|
+
process.exit(1);
|
|
241
|
+
};
|
|
242
|
+
process.on("SIGINT", onSignalWithWorktree);
|
|
243
|
+
process.on("SIGTERM", onSignalWithWorktree);
|
|
244
|
+
})), Effect.map(({ cleanupContainerOnly, onSignal }) => ({
|
|
207
245
|
worktreeInfo,
|
|
208
246
|
cleanupContainerOnly,
|
|
209
247
|
onSignal,
|
|
@@ -211,17 +249,29 @@ export const WorktreeDockerSandboxFactory = {
|
|
|
211
249
|
})),
|
|
212
250
|
// Use
|
|
213
251
|
({ worktreeInfo }) => makeEffect({ hostWorktreePath: worktreeInfo.path }).pipe(Effect.provide(makeDockerSandboxLayer(containerName))),
|
|
214
|
-
// Release: always remove container; remove worktree
|
|
252
|
+
// Release: always remove container; remove/preserve worktree based on dirty state.
|
|
215
253
|
({ worktreeInfo, cleanupContainerOnly, onSignal }, exit) => Effect.sync(() => {
|
|
216
254
|
process.removeListener("exit", cleanupContainerOnly);
|
|
217
255
|
process.removeListener("SIGINT", onSignal);
|
|
218
256
|
process.removeListener("SIGTERM", onSignal);
|
|
219
|
-
}).pipe(Effect.andThen(removeContainer(containerName)), Effect.andThen(
|
|
220
|
-
|
|
221
|
-
: Effect.sync(() => {
|
|
257
|
+
}).pipe(Effect.andThen(removeContainer(containerName)), Effect.andThen(WorktreeManager.hasUncommittedChanges(worktreeInfo.path).pipe(Effect.catchAll(() => Effect.succeed(false)), Effect.flatMap((isDirty) => {
|
|
258
|
+
if (isDirty) {
|
|
222
259
|
preservedWorktreePath = worktreeInfo.path;
|
|
223
|
-
printWorktreePreservedMessage(worktreeInfo.path)
|
|
224
|
-
|
|
260
|
+
printWorktreePreservedMessage(worktreeInfo.path, Exit.isSuccess(exit)
|
|
261
|
+
? `Run succeeded but worktree has uncommitted changes at ${worktreeInfo.path}`
|
|
262
|
+
: `Worktree preserved at ${worktreeInfo.path}`);
|
|
263
|
+
return Effect.void;
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
if (!Exit.isSuccess(exit)) {
|
|
267
|
+
console.error(`\nWorktree removed (no uncommitted changes)`);
|
|
268
|
+
}
|
|
269
|
+
return WorktreeManager.remove(worktreeInfo.path);
|
|
270
|
+
}
|
|
271
|
+
}))), Effect.orDie)).pipe(Effect.map((value) => ({
|
|
272
|
+
value,
|
|
273
|
+
preservedWorktreePath,
|
|
274
|
+
})),
|
|
225
275
|
// Attach the preserved worktree path to TimeoutError and AgentError so
|
|
226
276
|
// programmatic callers can build on top of the preserved worktree.
|
|
227
277
|
Effect.mapError((e) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SandboxFactory.js","sourceRoot":"","sources":["../src/SandboxFactory.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SandboxFactory.js","sourceRoot":"","sources":["../src/SandboxFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACL,cAAc,EACd,eAAe,EACf,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,UAAU,EACV,SAAS,EACT,SAAS,EACT,YAAY,GAGb,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AA+BvC,MAAM,OAAO,OAAQ,SAAQ,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAGhD;CAAG;AAEN,MAAM,iBAAiB,GAAG,CACxB,aAAqB,EACwC,EAAE,CAC/D,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;IACxC,OAAO;QACL,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CACzB,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE;YACtB,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;YACtB,IAAI,OAAO,EAAE,GAAG,EAAE,CAAC;gBACjB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YAE9C,QAAQ,CACN,QAAQ,EACR,IAAI,EACJ,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,EAC/B,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;gBACxB,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBACtC,MAAM,CACJ,MAAM,CAAC,IAAI,CACT,IAAI,SAAS,CAAC;wBACZ,OAAO;wBACP,OAAO,EAAE,uBAAuB,KAAK,CAAC,OAAO,EAAE;qBAChD,CAAC,CACH,CACF,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,MAAM,CACJ,MAAM,CAAC,OAAO,CAAC;wBACb,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE;wBACzB,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE;wBACzB,QAAQ,EACN,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ;4BAC7B,CAAC,CAAC,KAAK,CAAC,IAAI;4BACZ,CAAC,CAAE,CAAY;qBACpB,CAAC,CACH,CAAC;gBACJ,CAAC;YACH,CAAC,CACF,CAAC;QACJ,CAAC,CAAC;QAEJ,aAAa,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,CAChD,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE;YACtB,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;YACtB,IAAI,OAAO,EAAE,GAAG,EAAE,CAAC;gBACjB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YAE9C,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE;gBACjC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;aAClC,CAAC,CAAC;YAEH,MAAM,YAAY,GAAa,EAAE,CAAC;YAClC,MAAM,YAAY,GAAa,EAAE,CAAC;YAElC,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAO,EAAE,CAAC,CAAC;YACpD,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBACrB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxB,YAAY,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBACxC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACzB,MAAM,CACJ,MAAM,CAAC,IAAI,CACT,IAAI,SAAS,CAAC;oBACZ,OAAO;oBACP,OAAO,EAAE,iCAAiC,KAAK,CAAC,OAAO,EAAE;iBAC1D,CAAC,CACH,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACxB,MAAM,CACJ,MAAM,CAAC,OAAO,CAAC;oBACb,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC/B,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC7B,QAAQ,EAAE,IAAI,IAAI,CAAC;iBACpB,CAAC,CACH,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEJ,MAAM,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,CAChC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;YACvC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAkB,CAAC,MAAM,EAAE,EAAE;gBAC9C,QAAQ,CACN,QAAQ,EACR,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,EACjD,CAAC,KAAK,EAAE,EAAE;oBACR,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,CACJ,MAAM,CAAC,IAAI,CACT,IAAI,SAAS,CAAC;4BACZ,OAAO,EAAE,wBAAwB,SAAS,KAAK,KAAK,CAAC,OAAO,EAAE;yBAC/D,CAAC,CACH,CACF,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAkB,CAAC,MAAM,EAAE,EAAE;gBAC9C,QAAQ,CACN,QAAQ,EACR,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,aAAa,IAAI,WAAW,EAAE,CAAC,EACnD,CAAC,KAAK,EAAE,EAAE;oBACR,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,CACJ,MAAM,CAAC,IAAI,CACT,IAAI,SAAS,CAAC;4BACZ,OAAO,EAAE,kBAAkB,QAAQ,OAAO,aAAa,IAAI,WAAW,KAAK,KAAK,CAAC,OAAO,EAAE;yBAC3F,CAAC,CACH,CACF,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEJ,OAAO,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,EAAE,CACjC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,KAAK,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAClE,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,SAAS,CAAC;gBACZ,OAAO,EAAE,6BAA6B,OAAO,CAAC,QAAQ,CAAC,KAAK,KAAK,EAAE;aACpE,CAAC,CACL,CACF,CAAC;YAEF,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAkB,CAAC,MAAM,EAAE,EAAE;gBAC9C,QAAQ,CACN,QAAQ,EACR,CAAC,IAAI,EAAE,GAAG,aAAa,IAAI,WAAW,EAAE,EAAE,QAAQ,CAAC,EACnD,CAAC,KAAK,EAAE,EAAE;oBACR,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,CACJ,MAAM,CAAC,IAAI,CACT,IAAI,SAAS,CAAC;4BACZ,OAAO,EAAE,kBAAkB,aAAa,IAAI,WAAW,OAAO,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE;yBAC3F,CAAC,CACH,CACF,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;KACL,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,aAAqB,EACC,EAAE,CACxB,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAC1D,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CACpC,CAAC;AAEJ,gFAAgF;AAChF,MAAM,CAAC,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAa7D,MAAM,OAAO,cAAe,SAAQ,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAW9D;CAAG;AAEN;;;GAGG;AACH,MAAM,wBAAwB,GAAG,CAAC,aAAqB,EAAQ,EAAE;IAC/D,IAAI,CAAC;QACH,YAAY,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,8CAA8C;IAChD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,OAAO,qBAAsB,SAAQ,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAa5E;CAAG;AAEN;;GAEG;AACH,MAAM,6BAA6B,GAAG,CACpC,YAAoB,EACpB,MAAc,EACR,EAAE;IACR,OAAO,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;IAC7B,OAAO,CAAC,KAAK,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,KAAK,CAAC,8CAA8C,YAAY,EAAE,CAAC,CAAC;AAC9E,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,qBAAqB,GAAG,CAC5B,aAAqB,EACrB,SAAiB,EACjB,GAA2B,EAC3B,YAAsB,EACtB,EAAE;IACF,MAAM,oBAAoB,GAAG,GAAG,EAAE;QAChC,wBAAwB,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,oBAAoB,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,IAAI,CAAC;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,IAAI,CAAC;IAE3C,OAAO,cAAc,CACnB,aAAa,EACb,SAAS,EACT,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,EAC/B;QACE,YAAY;QACZ,OAAO,EAAE,qBAAqB;QAC9B,IAAI,EAAE,GAAG,OAAO,IAAI,OAAO,EAAE;KAC9B,CACF,CAAC,IAAI,CACJ,MAAM,CAAC,OAAO,CACZ,gBAAgB,CAAC,aAAa,EAAE,GAAG,OAAO,IAAI,OAAO,EAAE,EAAE,aAAa,CAAC,CACxE,EACD,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CACd,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;QACf,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QACzC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAClC,CAAC,CAAC,CACH,EACD,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,oBAAoB,EAAE,QAAQ,EAAE,CAAC,CAAC,CACvD,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,KAAK,EAAE,KAAK,CAAC,MAAM,CACjB,cAAc,EACd,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,EACJ,SAAS,EACT,GAAG,EACH,WAAW,EACX,QAAQ,EAAE,YAAY,EACtB,aAAa,EAAE,SAAS,EACxB,IAAI,GACL,GAAG,KAAK,CAAC,CAAC,qBAAqB,CAAC;QACjC,MAAM,UAAU,GAAG,YAAY,EAAE,IAAI,KAAK,MAAM,CAAC;QACjD,MAAM,MAAM,GACV,YAAY,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;QAChD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC;QAC/B,OAAO;YACL,WAAW,EAAE,CACX,UAAmE,EAKnE,EAAE;gBACF,MAAM,aAAa,GAAG,cAAc,UAAU,EAAE,EAAE,CAAC;gBAEnD,IAAI,UAAU,EAAE,CAAC;oBACf,6DAA6D;oBAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;oBACzC,MAAM,YAAY,GAAG;wBACnB,GAAG,WAAW,IAAI,qBAAqB,EAAE;wBACzC,GAAG,MAAM,IAAI,MAAM,EAAE;qBACtB,CAAC;oBACF,OAAO,MAAM,CAAC,iBAAiB,CAC7B,qBAAqB,CACnB,aAAa,EACb,SAAS,EACT,GAAG,EACH,YAAY,CACb;oBACD,MAAM;oBACN,GAAG,EAAE,CACH,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CACjB,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC,CACI;oBAC7D,2DAA2D;oBAC3D,CAAC,EAAE,oBAAoB,EAAE,QAAQ,EAAE,EAAE,EAAE,CACrC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;wBACf,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;wBACrD,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;wBAC3C,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;oBAC9C,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,EAC9C,MAAM,CAAC,KAAK,CACb,CACJ,CAAC,IAAI,CACJ,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;wBACrB,KAAK;wBACL,qBAAqB,EAAE,SAAS;qBACjC,CAAC,CAAC,CACJ,CAAC;gBACJ,CAAC;gBAED,iDAAiD;gBACjD,0EAA0E;gBAC1E,6EAA6E;gBAC7E,IAAI,qBAAyC,CAAC;gBAE9C,OAAO,MAAM,CAAC,iBAAiB;gBAC7B,sFAAsF;gBACtF,eAAe,CAAC,UAAU,CAAC,WAAW,CAAC;qBACpC,IAAI,CACH,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CACpB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;oBACf,OAAO,CAAC,KAAK,CACX,wDAAwD,EACxD,CAAC,CAAC,OAAO,CACV,CAAC;gBACJ,CAAC,CAAC,CACH,CACF;qBACA,IAAI,CACH,MAAM,CAAC,OAAO,CACZ,MAAM;oBACJ,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC;oBACjD,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAClD,CACF;qBACA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;qBAC9D,IAAI,CACH,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE,CAC9B,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;oBAChC,CAAC,CAAC,OAAO,CAAC,OAAO,CACb,oBAAoB,EACpB,aAAa,CACX,SAAS,EACT,WAAW,EACX,YAAY,CAAC,IAAI,CAClB,CACF;oBACH,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAC5B,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CACvC,CACF;qBACA,IAAI,CACH,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;oBAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;oBACzC,MAAM,YAAY,GAAG;wBACnB,GAAG,YAAY,CAAC,IAAI,IAAI,qBAAqB,EAAE;wBAC/C,GAAG,MAAM,IAAI,MAAM,EAAE;qBACtB,CAAC;oBAEF,OAAO,qBAAqB,CAC1B,aAAa,EACb,SAAS,EACT,GAAG,EACH,YAAY,CACb,CAAC,IAAI,CACJ,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,EAAE,QAAQ,EAAE,EAAE,EAAE,CAChD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;wBACf,oEAAoE;wBACpE,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;wBAC3C,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAC5C,MAAM,oBAAoB,GAAG,GAAG,EAAE;4BAChC,oBAAoB,EAAE,CAAC;4BACvB,6BAA6B,CAC3B,YAAY,CAAC,IAAI,EACjB,yBAAyB,YAAY,CAAC,IAAI,EAAE,CAC7C,CAAC;4BACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBAClB,CAAC,CAAC;wBACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;wBAC3C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;oBAC9C,CAAC,CAAC,CACH,EACD,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;wBAClD,YAAY;wBACZ,oBAAoB;wBACpB,QAAQ;qBACT,CAAC,CAAC,CACJ,CAAC;gBACJ,CAAC,CAAC,CACH;gBACH,MAAM;gBACN,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CACnB,UAAU,CAAC,EAAE,gBAAgB,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CACtD,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC,CACI;gBAC7D,mFAAmF;gBACnF,CAAC,EAAE,YAAY,EAAE,oBAAoB,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,CACzD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;oBACf,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;oBACrD,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;oBAC3C,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;gBAC9C,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,EAC9C,MAAM,CAAC,OAAO,CACZ,eAAe,CAAC,qBAAqB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAC3D,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAC5C,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;oBACzB,IAAI,OAAO,EAAE,CAAC;wBACZ,qBAAqB,GAAG,YAAY,CAAC,IAAI,CAAC;wBAC1C,6BAA6B,CAC3B,YAAY,CAAC,IAAI,EACjB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;4BAClB,CAAC,CAAC,yDAAyD,YAAY,CAAC,IAAI,EAAE;4BAC9E,CAAC,CAAC,yBAAyB,YAAY,CAAC,IAAI,EAAE,CACjD,CAAC;wBACF,OAAO,MAAM,CAAC,IAAI,CAAC;oBACrB,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;4BAC1B,OAAO,CAAC,KAAK,CACX,6CAA6C,CAC9C,CAAC;wBACJ,CAAC;wBACD,OAAO,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;oBACnD,CAAC;gBACH,CAAC,CAAC,CACH,CACF,EACD,MAAM,CAAC,KAAK,CACb,CACJ,CAAC,IAAI,CACJ,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBACrB,KAAK;oBACL,qBAAqB;iBACtB,CAAC,CAAC;gBACH,uEAAuE;gBACvE,mEAAmE;gBACnE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAkC,EAAE,EAAE;oBACrD,MAAM,IAAI,GAAG,qBAAqB,CAAC;oBACnC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;wBACvB,IAAI,CAAC,YAAY,YAAY,EAAE,CAAC;4BAC9B,OAAO,IAAI,YAAY,CAAC;gCACtB,OAAO,EAAE,CAAC,CAAC,OAAO;gCAClB,kBAAkB,EAAE,CAAC,CAAC,kBAAkB;gCACxC,qBAAqB,EAAE,IAAI;6BAC5B,CAA+C,CAAC;wBACnD,CAAC;wBACD,IAAI,CAAC,YAAY,UAAU,EAAE,CAAC;4BAC5B,OAAO,IAAI,UAAU,CAAC;gCACpB,OAAO,EAAE,CAAC,CAAC,OAAO;gCAClB,qBAAqB,EAAE,IAAI;6BAC5B,CAA+C,CAAC;wBACnD,CAAC;oBACH,CAAC;oBACD,OAAO,CAAC,CAAC;gBACX,CAAC,CAAC,CACH,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC,CAAC,CACH;CACF,CAAC"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
2
|
import { FileSystem } from "@effect/platform";
|
|
3
3
|
import { WorktreeError } from "./errors.js";
|
|
4
|
-
/** Sanitize
|
|
5
|
-
export declare const
|
|
4
|
+
/** Sanitize a name for use in branch names and directory names. */
|
|
5
|
+
export declare const sanitizeName: (name: string) => string;
|
|
6
6
|
/**
|
|
7
7
|
* Generates a temporary branch name.
|
|
8
|
-
* When
|
|
8
|
+
* When name is provided: `sandcastle/<sanitized-name>/<YYYYMMDD-HHMMSS>`.
|
|
9
9
|
* Otherwise: `sandcastle/<YYYYMMDD-HHMMSS>`.
|
|
10
10
|
*/
|
|
11
|
-
export declare const generateTempBranchName: (
|
|
11
|
+
export declare const generateTempBranchName: (name?: string | undefined) => string;
|
|
12
12
|
/** Returns the name of the currently checked-out branch in the given repo directory. */
|
|
13
13
|
export declare const getCurrentBranch: (repoDir: string) => Effect.Effect<string, WorktreeError, never>;
|
|
14
14
|
export interface WorktreeInfo {
|
|
@@ -25,8 +25,13 @@ export interface WorktreeInfo {
|
|
|
25
25
|
*/
|
|
26
26
|
export declare const create: (repoDir: string, opts?: {
|
|
27
27
|
branch?: string | undefined;
|
|
28
|
-
|
|
28
|
+
name?: string | undefined;
|
|
29
29
|
} | undefined) => Effect.Effect<WorktreeInfo, WorktreeError, FileSystem.FileSystem>;
|
|
30
|
+
/**
|
|
31
|
+
* Returns true if the worktree at `worktreePath` has any uncommitted changes:
|
|
32
|
+
* unstaged modifications, staged changes, or untracked files.
|
|
33
|
+
*/
|
|
34
|
+
export declare const hasUncommittedChanges: (worktreePath: string) => Effect.Effect<boolean, WorktreeError, never>;
|
|
30
35
|
/**
|
|
31
36
|
* Removes a worktree and its git metadata.
|
|
32
37
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorktreeManager.d.ts","sourceRoot":"","sources":["../src/WorktreeManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAW5C,
|
|
1
|
+
{"version":3,"file":"WorktreeManager.d.ts","sourceRoot":"","sources":["../src/WorktreeManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAW5C,mEAAmE;AACnE,eAAO,MAAM,YAAY,0BACsB,CAAC;AAsBhD;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,uCAMlC,CAAC;AAEF,wFAAwF;AACxF,eAAO,MAAM,gBAAgB,kEAK1B,CAAC;AAEJ,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAsCD;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM;;;mFA+Ef,CAAC;AAEL;;;GAGG;AACH,eAAO,MAAM,qBAAqB,wEAK/B,CAAC;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,MAAM,qEAQlB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,gFAsDnB,CAAC"}
|
package/dist/WorktreeManager.js
CHANGED
|
@@ -9,8 +9,8 @@ const formatTimestamp = (date) => {
|
|
|
9
9
|
return (`${date.getFullYear()}${pad(date.getMonth() + 1)}${pad(date.getDate())}-` +
|
|
10
10
|
`${pad(date.getHours())}${pad(date.getMinutes())}${pad(date.getSeconds())}`);
|
|
11
11
|
};
|
|
12
|
-
/** Sanitize
|
|
13
|
-
export const
|
|
12
|
+
/** Sanitize a name for use in branch names and directory names. */
|
|
13
|
+
export const sanitizeName = (name) => name.toLowerCase().replace(/[^a-z0-9]/g, "-");
|
|
14
14
|
const execGit = (args, cwd) => Effect.async((resume) => {
|
|
15
15
|
execFile("git", args, { cwd }, (error, stdout, stderr) => {
|
|
16
16
|
if (error) {
|
|
@@ -25,13 +25,13 @@ const execGit = (args, cwd) => Effect.async((resume) => {
|
|
|
25
25
|
});
|
|
26
26
|
/**
|
|
27
27
|
* Generates a temporary branch name.
|
|
28
|
-
* When
|
|
28
|
+
* When name is provided: `sandcastle/<sanitized-name>/<YYYYMMDD-HHMMSS>`.
|
|
29
29
|
* Otherwise: `sandcastle/<YYYYMMDD-HHMMSS>`.
|
|
30
30
|
*/
|
|
31
|
-
export const generateTempBranchName = (
|
|
31
|
+
export const generateTempBranchName = (name) => {
|
|
32
32
|
const ts = formatTimestamp(new Date());
|
|
33
|
-
if (
|
|
34
|
-
return `sandcastle/${
|
|
33
|
+
if (name) {
|
|
34
|
+
return `sandcastle/${sanitizeName(name)}/${ts}`;
|
|
35
35
|
}
|
|
36
36
|
return `sandcastle/${ts}`;
|
|
37
37
|
};
|
|
@@ -82,8 +82,8 @@ export const create = (repoDir, opts) => Effect.gen(function* () {
|
|
|
82
82
|
}
|
|
83
83
|
else {
|
|
84
84
|
const timestamp = formatTimestamp(new Date());
|
|
85
|
-
if (opts?.
|
|
86
|
-
const sanitized =
|
|
85
|
+
if (opts?.name) {
|
|
86
|
+
const sanitized = sanitizeName(opts.name);
|
|
87
87
|
branch = `sandcastle/${sanitized}/${timestamp}`;
|
|
88
88
|
worktreeName = `sandcastle-${sanitized}-${timestamp}`;
|
|
89
89
|
}
|
|
@@ -124,6 +124,11 @@ export const create = (repoDir, opts) => Effect.gen(function* () {
|
|
|
124
124
|
}
|
|
125
125
|
return { path: worktreePath, branch };
|
|
126
126
|
});
|
|
127
|
+
/**
|
|
128
|
+
* Returns true if the worktree at `worktreePath` has any uncommitted changes:
|
|
129
|
+
* unstaged modifications, staged changes, or untracked files.
|
|
130
|
+
*/
|
|
131
|
+
export const hasUncommittedChanges = (worktreePath) => execGit(["status", "--porcelain"], worktreePath).pipe(Effect.map((output) => output.trim().length > 0));
|
|
127
132
|
/**
|
|
128
133
|
* Removes a worktree and its git metadata.
|
|
129
134
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorktreeManager.js","sourceRoot":"","sources":["../src/WorktreeManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,4CAA4C;AAC5C,MAAM,eAAe,GAAG,CAAC,IAAU,EAAU,EAAE;IAC7C,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO,CACL,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG;QACzE,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAC5E,CAAC;AACJ,CAAC,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"WorktreeManager.js","sourceRoot":"","sources":["../src/WorktreeManager.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export declare const sandcastle: Command.Command<"sandcastle", Display | FileSys
|
|
|
6
6
|
readonly subcommand: import("effect/Option").Option<{
|
|
7
7
|
readonly imageName: import("effect/Option").Option<string>;
|
|
8
8
|
readonly template: import("effect/Option").Option<string>;
|
|
9
|
+
readonly agent: import("effect/Option").Option<string>;
|
|
10
|
+
readonly model: import("effect/Option").Option<string>;
|
|
9
11
|
} | {
|
|
10
12
|
readonly imageName: import("effect/Option").Option<string>;
|
|
11
13
|
readonly dockerfile: import("effect/Option").Option<string>;
|
|
@@ -13,6 +15,7 @@ export declare const sandcastle: Command.Command<"sandcastle", Display | FileSys
|
|
|
13
15
|
readonly imageName: import("effect/Option").Option<string>;
|
|
14
16
|
} | {
|
|
15
17
|
readonly imageName: import("effect/Option").Option<string>;
|
|
18
|
+
readonly agent: string;
|
|
16
19
|
readonly model: import("effect/Option").Option<string>;
|
|
17
20
|
}>;
|
|
18
21
|
}>;
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAW,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAS,MAAM,QAAQ,CAAC;AAKvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAW,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAS,MAAM,QAAQ,CAAC;AAKvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AA+cvC,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;EAOtB,CAAC;AAEF,eAAO,MAAM,GAAG,yMAGd,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -7,11 +7,10 @@ import { execSync, spawn } from "node:child_process";
|
|
|
7
7
|
import { join } from "node:path";
|
|
8
8
|
import { styleText } from "node:util";
|
|
9
9
|
import { Display } from "./Display.js";
|
|
10
|
-
import { DEFAULT_MODEL } from "./Orchestrator.js";
|
|
11
10
|
import { buildImage, removeImage } from "./DockerLifecycle.js";
|
|
12
|
-
import { scaffold, listTemplates, getNextStepsLines } from "./InitService.js";
|
|
11
|
+
import { scaffold, listTemplates, listAgents, getAgent, getNextStepsLines, } from "./InitService.js";
|
|
13
12
|
import { defaultImageName } from "./run.js";
|
|
14
|
-
import {
|
|
13
|
+
import { claudeCode, codex as codexFactory, pi as piFactory, DEFAULT_MODEL, } from "./AgentProvider.js";
|
|
15
14
|
import { AgentError, ConfigDirError, InitError } from "./errors.js";
|
|
16
15
|
import { SandboxFactory, WorktreeDockerSandboxFactory, WorktreeSandboxConfig, SANDBOX_WORKSPACE_DIR, } from "./SandboxFactory.js";
|
|
17
16
|
import { withSandboxLifecycle } from "./SandboxLifecycle.js";
|
|
@@ -34,21 +33,49 @@ const requireConfigDir = (cwd) => Effect.gen(function* () {
|
|
|
34
33
|
});
|
|
35
34
|
// --- Init command ---
|
|
36
35
|
const templateOption = Options.text("template").pipe(Options.withDescription("Template to scaffold (e.g. blank, simple-loop, parallel-planner)"), Options.optional);
|
|
36
|
+
const agentOption = Options.text("agent").pipe(Options.withDescription("Agent to use (e.g. claude-code)"), Options.optional);
|
|
37
|
+
const initModelOption = Options.text("model").pipe(Options.withDescription("Model to use for the agent (e.g. claude-sonnet-4-6). Defaults to the agent's default model"), Options.optional);
|
|
37
38
|
const initCommand = Command.make("init", {
|
|
38
39
|
imageName: imageNameOption,
|
|
39
40
|
template: templateOption,
|
|
40
|
-
|
|
41
|
+
agent: agentOption,
|
|
42
|
+
model: initModelOption,
|
|
43
|
+
}, ({ imageName: imageNameFlag, template, agent: agentFlag, model: modelFlag, }) => Effect.gen(function* () {
|
|
41
44
|
const d = yield* Display;
|
|
42
45
|
const cwd = process.cwd();
|
|
43
46
|
const imageName = resolveImageName(imageNameFlag, cwd);
|
|
44
|
-
//
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
47
|
+
// Resolve agent: CLI flag > interactive select
|
|
48
|
+
const agents = listAgents();
|
|
49
|
+
let selectedAgent;
|
|
50
|
+
if (agentFlag._tag === "Some") {
|
|
51
|
+
const entry = getAgent(agentFlag.value);
|
|
52
|
+
if (!entry) {
|
|
53
|
+
const names = agents.map((a) => a.name).join(", ");
|
|
54
|
+
yield* Effect.fail(new InitError({
|
|
55
|
+
message: `Unknown agent "${agentFlag.value}". Available: ${names}`,
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
58
|
+
selectedAgent = entry;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
const selected = yield* Effect.promise(() => clack.select({
|
|
62
|
+
message: "Select an agent:",
|
|
63
|
+
initialValue: "claude-code",
|
|
64
|
+
options: agents.map((a) => ({
|
|
65
|
+
value: a.name,
|
|
66
|
+
label: a.label,
|
|
67
|
+
hint: `Default model: ${a.defaultModel}`,
|
|
68
|
+
})),
|
|
69
|
+
}));
|
|
70
|
+
if (clack.isCancel(selected)) {
|
|
71
|
+
yield* Effect.fail(new InitError({ message: "Agent selection cancelled." }));
|
|
72
|
+
}
|
|
73
|
+
selectedAgent = getAgent(selected);
|
|
74
|
+
}
|
|
75
|
+
// Resolve model: CLI flag > agent default
|
|
76
|
+
const selectedModel = modelFlag._tag === "Some"
|
|
77
|
+
? modelFlag.value
|
|
78
|
+
: selectedAgent.defaultModel;
|
|
52
79
|
// Resolve template: CLI flag > interactive select
|
|
53
80
|
const templates = listTemplates();
|
|
54
81
|
let selectedTemplate;
|
|
@@ -89,7 +116,11 @@ const initCommand = Command.make("init", {
|
|
|
89
116
|
catch: () => undefined,
|
|
90
117
|
}).pipe(Effect.ignore);
|
|
91
118
|
}
|
|
92
|
-
yield* d.spinner("Scaffolding .sandcastle/ config directory...", scaffold(cwd,
|
|
119
|
+
yield* d.spinner("Scaffolding .sandcastle/ config directory...", scaffold(cwd, {
|
|
120
|
+
agent: selectedAgent,
|
|
121
|
+
model: selectedModel,
|
|
122
|
+
templateName: selectedTemplate,
|
|
123
|
+
}).pipe(Effect.mapError((e) => new InitError({
|
|
93
124
|
message: `${e instanceof Error ? e.message : e}`,
|
|
94
125
|
}))));
|
|
95
126
|
// Prompt user before building image
|
|
@@ -106,7 +137,7 @@ const initCommand = Command.make("init", {
|
|
|
106
137
|
yield* d.status("Init complete! Run `sandcastle build-image` to build the Docker image later.", "success");
|
|
107
138
|
}
|
|
108
139
|
// Show template-specific next steps
|
|
109
|
-
const nextSteps = getNextStepsLines(selectedTemplate
|
|
140
|
+
const nextSteps = getNextStepsLines(selectedTemplate);
|
|
110
141
|
for (const [i, line] of nextSteps.entries()) {
|
|
111
142
|
yield* d.text(i === 0 ? line : styleText("dim", line));
|
|
112
143
|
}
|
|
@@ -139,19 +170,24 @@ const removeImageCommand = Command.make("remove-image", {
|
|
|
139
170
|
yield* d.status("Image removed.", "success");
|
|
140
171
|
}));
|
|
141
172
|
// --- Interactive command ---
|
|
173
|
+
/** CLI-internal registry mapping agent names to factory + default model */
|
|
174
|
+
const AGENT_REGISTRY = {
|
|
175
|
+
"claude-code": { factory: claudeCode, defaultModel: DEFAULT_MODEL },
|
|
176
|
+
pi: { factory: piFactory, defaultModel: "claude-sonnet-4-6" },
|
|
177
|
+
codex: { factory: codexFactory, defaultModel: "gpt-5.4-mini" },
|
|
178
|
+
};
|
|
179
|
+
const interactiveAgentOption = Options.text("agent").pipe(Options.withDescription(`Agent provider to use (${Object.keys(AGENT_REGISTRY).join(", ")})`), Options.withDefault("claude-code"));
|
|
142
180
|
const modelOption = Options.text("model").pipe(Options.withDescription("Model to use for the agent (e.g. claude-sonnet-4-6)"), Options.optional);
|
|
143
181
|
const interactiveSession = (options) => Effect.gen(function* () {
|
|
144
|
-
const { hostRepoDir } = options;
|
|
182
|
+
const { hostRepoDir, provider } = options;
|
|
145
183
|
const sandboxRepoDir = SANDBOX_WORKSPACE_DIR;
|
|
146
|
-
const resolvedModel = options.model ?? DEFAULT_MODEL;
|
|
147
184
|
const factory = yield* SandboxFactory;
|
|
148
185
|
const d = yield* Display;
|
|
149
186
|
yield* factory.withSandbox(({ hostWorktreePath }) => withSandboxLifecycle({ hostRepoDir, sandboxRepoDir, hostWorktreePath }, (ctx) => Effect.gen(function* () {
|
|
150
187
|
// Get container ID for docker exec -it
|
|
151
188
|
const hostnameResult = yield* ctx.sandbox.exec("hostname");
|
|
152
189
|
const containerId = hostnameResult.stdout.trim();
|
|
153
|
-
|
|
154
|
-
yield* d.status("Launching interactive Claude session...", "info");
|
|
190
|
+
yield* d.status(`Launching interactive ${provider.name} session...`, "info");
|
|
155
191
|
const exitCode = yield* Effect.async((resume) => {
|
|
156
192
|
const proc = spawn("docker", [
|
|
157
193
|
"exec",
|
|
@@ -159,14 +195,11 @@ const interactiveSession = (options) => Effect.gen(function* () {
|
|
|
159
195
|
"-w",
|
|
160
196
|
ctx.sandboxRepoDir,
|
|
161
197
|
containerId,
|
|
162
|
-
"
|
|
163
|
-
"--dangerously-skip-permissions",
|
|
164
|
-
"--model",
|
|
165
|
-
resolvedModel,
|
|
198
|
+
...provider.buildInteractiveArgs(""),
|
|
166
199
|
], { stdio: "inherit" });
|
|
167
200
|
proc.on("error", (error) => {
|
|
168
201
|
resume(Effect.fail(new AgentError({
|
|
169
|
-
message: `Failed to launch
|
|
202
|
+
message: `Failed to launch ${provider.name}: ${error.message}`,
|
|
170
203
|
})));
|
|
171
204
|
});
|
|
172
205
|
proc.on("close", (code) => {
|
|
@@ -178,16 +211,31 @@ const interactiveSession = (options) => Effect.gen(function* () {
|
|
|
178
211
|
});
|
|
179
212
|
const interactiveCommand = Command.make("interactive", {
|
|
180
213
|
imageName: imageNameOption,
|
|
214
|
+
agent: interactiveAgentOption,
|
|
181
215
|
model: modelOption,
|
|
182
|
-
}, ({ imageName: imageNameFlag, model }) => Effect.gen(function* () {
|
|
216
|
+
}, ({ imageName: imageNameFlag, agent: agentName, model }) => Effect.gen(function* () {
|
|
183
217
|
const hostRepoDir = process.cwd();
|
|
184
218
|
yield* requireConfigDir(hostRepoDir);
|
|
185
219
|
const imageName = resolveImageName(imageNameFlag, hostRepoDir);
|
|
220
|
+
// Resolve agent provider from registry
|
|
221
|
+
const entry = AGENT_REGISTRY[agentName];
|
|
222
|
+
if (!entry) {
|
|
223
|
+
const available = Object.keys(AGENT_REGISTRY).join(", ");
|
|
224
|
+
yield* Effect.fail(new AgentError({
|
|
225
|
+
message: `Unknown agent "${agentName}". Available: ${available}`,
|
|
226
|
+
}));
|
|
227
|
+
return; // unreachable, satisfies TypeScript
|
|
228
|
+
}
|
|
229
|
+
const resolvedModel = model._tag === "Some" ? model.value : entry.defaultModel;
|
|
230
|
+
const provider = entry.factory(resolvedModel);
|
|
186
231
|
// Resolve env vars
|
|
187
232
|
const env = yield* resolveEnv(hostRepoDir);
|
|
188
|
-
const resolvedModel = model._tag === "Some" ? model.value : undefined;
|
|
189
233
|
const d = yield* Display;
|
|
190
|
-
yield* d.summary("Sandcastle Interactive", {
|
|
234
|
+
yield* d.summary("Sandcastle Interactive", {
|
|
235
|
+
Image: imageName,
|
|
236
|
+
Agent: provider.name,
|
|
237
|
+
Model: resolvedModel,
|
|
238
|
+
});
|
|
191
239
|
const factoryLayer = Layer.provide(WorktreeDockerSandboxFactory.layer, Layer.merge(Layer.succeed(WorktreeSandboxConfig, {
|
|
192
240
|
imageName,
|
|
193
241
|
env,
|
|
@@ -195,7 +243,7 @@ const interactiveCommand = Command.make("interactive", {
|
|
|
195
243
|
}), NodeFileSystem.layer));
|
|
196
244
|
yield* interactiveSession({
|
|
197
245
|
hostRepoDir,
|
|
198
|
-
|
|
246
|
+
provider,
|
|
199
247
|
}).pipe(Effect.provide(factoryLayer));
|
|
200
248
|
}));
|
|
201
249
|
// --- Root command ---
|