@ai-hero/sandcastle 0.4.7 → 0.5.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 +258 -69
- package/dist/AgentProvider.d.ts +9 -0
- package/dist/AgentProvider.d.ts.map +1 -1
- package/dist/AgentProvider.js +14 -2
- package/dist/AgentProvider.js.map +1 -1
- package/dist/CopyToWorktree.d.ts +9 -0
- package/dist/CopyToWorktree.d.ts.map +1 -0
- package/dist/{CopyToWorkspace.js → CopyToWorktree.js} +9 -3
- package/dist/CopyToWorktree.js.map +1 -0
- package/dist/DockerLifecycle.d.ts +2 -0
- package/dist/DockerLifecycle.d.ts.map +1 -1
- package/dist/DockerLifecycle.js +7 -0
- package/dist/DockerLifecycle.js.map +1 -1
- package/dist/ErrorHandler.d.ts.map +1 -1
- package/dist/ErrorHandler.js +22 -2
- package/dist/ErrorHandler.js.map +1 -1
- package/dist/InitService.d.ts +6 -1
- package/dist/InitService.d.ts.map +1 -1
- package/dist/InitService.js +90 -56
- package/dist/InitService.js.map +1 -1
- package/dist/MountConfig.d.ts +13 -2
- package/dist/MountConfig.d.ts.map +1 -1
- package/dist/Orchestrator.d.ts +14 -2
- package/dist/Orchestrator.d.ts.map +1 -1
- package/dist/Orchestrator.js +56 -12
- package/dist/Orchestrator.js.map +1 -1
- package/dist/PodmanLifecycle.d.ts +10 -0
- package/dist/PodmanLifecycle.d.ts.map +1 -1
- package/dist/PodmanLifecycle.js +22 -0
- package/dist/PodmanLifecycle.js.map +1 -1
- package/dist/PromptPreprocessor.d.ts +2 -2
- package/dist/PromptPreprocessor.d.ts.map +1 -1
- package/dist/PromptPreprocessor.js +7 -2
- package/dist/PromptPreprocessor.js.map +1 -1
- package/dist/SandboxFactory.d.ts +13 -11
- package/dist/SandboxFactory.d.ts.map +1 -1
- package/dist/SandboxFactory.js +59 -41
- package/dist/SandboxFactory.js.map +1 -1
- package/dist/SandboxLifecycle.d.ts +23 -5
- package/dist/SandboxLifecycle.d.ts.map +1 -1
- package/dist/SandboxLifecycle.js +88 -18
- package/dist/SandboxLifecycle.js.map +1 -1
- package/dist/SandboxProvider.d.ts +11 -7
- package/dist/SandboxProvider.d.ts.map +1 -1
- package/dist/SandboxProvider.js.map +1 -1
- package/dist/SessionStore.d.ts +50 -0
- package/dist/SessionStore.d.ts.map +1 -0
- package/dist/SessionStore.js +120 -0
- package/dist/SessionStore.js.map +1 -0
- package/dist/WorktreeManager.d.ts +3 -3
- package/dist/WorktreeManager.d.ts.map +1 -1
- package/dist/WorktreeManager.js +14 -3
- package/dist/WorktreeManager.js.map +1 -1
- package/dist/createSandbox.d.ts +25 -10
- package/dist/createSandbox.d.ts.map +1 -1
- package/dist/createSandbox.js +253 -133
- package/dist/createSandbox.js.map +1 -1
- package/dist/createWorktree.d.ts +121 -0
- package/dist/createWorktree.d.ts.map +1 -0
- package/dist/createWorktree.js +318 -0
- package/dist/createWorktree.js.map +1 -0
- package/dist/errors.d.ts +110 -6
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +41 -3
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/interactive.d.ts +1 -1
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.js +63 -46
- package/dist/interactive.js.map +1 -1
- package/dist/run.d.ts +10 -10
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +23 -6
- package/dist/run.js.map +1 -1
- package/dist/sandboxes/daytona.js +4 -4
- package/dist/sandboxes/daytona.js.map +1 -1
- package/dist/sandboxes/docker.d.ts +9 -0
- package/dist/sandboxes/docker.d.ts.map +1 -1
- package/dist/sandboxes/docker.js +35 -5
- package/dist/sandboxes/docker.js.map +1 -1
- package/dist/sandboxes/no-sandbox.js +4 -4
- package/dist/sandboxes/no-sandbox.js.map +1 -1
- package/dist/sandboxes/podman.d.ts +9 -0
- package/dist/sandboxes/podman.d.ts.map +1 -1
- package/dist/sandboxes/podman.js +47 -5
- package/dist/sandboxes/podman.js.map +1 -1
- package/dist/sandboxes/test-bind-mount.d.ts +17 -0
- package/dist/sandboxes/test-bind-mount.d.ts.map +1 -0
- package/dist/sandboxes/test-bind-mount.js +91 -0
- package/dist/sandboxes/test-bind-mount.js.map +1 -0
- package/dist/sandboxes/test-isolated.js +5 -5
- package/dist/sandboxes/test-isolated.js.map +1 -1
- package/dist/sandboxes/vercel.js +7 -7
- package/dist/sandboxes/vercel.js.map +1 -1
- package/dist/startSandbox.d.ts +7 -6
- package/dist/startSandbox.d.ts.map +1 -1
- package/dist/startSandbox.js +38 -19
- package/dist/startSandbox.js.map +1 -1
- package/dist/syncIn.js +7 -7
- package/dist/syncIn.js.map +1 -1
- package/dist/syncOut.js +6 -6
- package/dist/syncOut.js.map +1 -1
- package/dist/templates/parallel-planner/implement-prompt.md +2 -2
- package/dist/templates/parallel-planner/main.mts +3 -7
- package/dist/templates/parallel-planner/merge-prompt.md +5 -1
- package/dist/templates/parallel-planner-with-review/implement-prompt.md +2 -2
- package/dist/templates/parallel-planner-with-review/main.mts +29 -63
- package/dist/templates/parallel-planner-with-review/merge-prompt.md +5 -1
- package/dist/templates/sequential-reviewer/main.mts +4 -4
- package/dist/templates/simple-loop/main.mts +9 -7
- package/package.json +1 -1
- package/dist/CopyToWorkspace.d.ts +0 -8
- package/dist/CopyToWorkspace.d.ts.map +0 -1
- package/dist/CopyToWorkspace.js.map +0 -1
- package/dist/templates/blank/.env.example +0 -5
- package/dist/templates/parallel-planner/.env.example +0 -5
- package/dist/templates/parallel-planner-with-review/.env.example +0 -5
- package/dist/templates/sequential-reviewer/.env.example +0 -5
- package/dist/templates/simple-loop/.env.example +0 -5
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SessionStore — keyed collection of agent session JSONLs.
|
|
3
|
+
*
|
|
4
|
+
* Provides read/write access to Claude Code session files, with two
|
|
5
|
+
* implementations: host-backed (filesystem) and sandbox-backed (via
|
|
6
|
+
* bind-mount handle file-transfer primitives). The `transferSession`
|
|
7
|
+
* function copies a session between stores, rewriting `cwd` fields in
|
|
8
|
+
* the JSONL entries from source cwd to target cwd.
|
|
9
|
+
*/
|
|
10
|
+
import type { BindMountSandboxHandle } from "./SandboxProvider.js";
|
|
11
|
+
/** A keyed collection of agent session JSONLs associated with a cwd. */
|
|
12
|
+
export interface SessionStore {
|
|
13
|
+
/** The working directory this store is associated with. */
|
|
14
|
+
readonly cwd: string;
|
|
15
|
+
/** Absolute path where a session's JSONL would be stored. */
|
|
16
|
+
sessionFilePath(id: string): string;
|
|
17
|
+
/** Read a session's JSONL content by ID. Throws if not found. */
|
|
18
|
+
readSession(id: string): Promise<string>;
|
|
19
|
+
/** Write a session's JSONL content by ID. Creates or overwrites. */
|
|
20
|
+
writeSession(id: string, content: string): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Encode a cwd into the Claude Code `~/.claude/projects/<encoded>/` layout.
|
|
24
|
+
* Replaces path separators with hyphens, matching Claude Code's convention.
|
|
25
|
+
*/
|
|
26
|
+
export declare const encodeProjectPath: (cwd: string) => string;
|
|
27
|
+
/**
|
|
28
|
+
* Create a host-backed SessionStore that reads/writes session JSONLs on the
|
|
29
|
+
* host filesystem using Claude Code's `~/.claude/projects/<encoded>/sessions/`
|
|
30
|
+
* layout.
|
|
31
|
+
*
|
|
32
|
+
* @param cwd - The host repo directory this store is associated with.
|
|
33
|
+
* @param projectsDir - Override for the projects directory (default: `~/.claude/projects`).
|
|
34
|
+
*/
|
|
35
|
+
export declare const hostSessionStore: (cwd: string, projectsDir?: string | undefined) => SessionStore;
|
|
36
|
+
/**
|
|
37
|
+
* Create a sandbox-backed SessionStore that uses a bind-mount handle's
|
|
38
|
+
* `copyFileIn`/`copyFileOut` to transfer session files.
|
|
39
|
+
*
|
|
40
|
+
* @param cwd - The sandbox-side working directory.
|
|
41
|
+
* @param handle - The bind-mount sandbox handle for file transfer.
|
|
42
|
+
* @param projectsDir - The sandbox-side path to `~/.claude/projects`.
|
|
43
|
+
*/
|
|
44
|
+
export declare const sandboxSessionStore: (cwd: string, handle: Pick<BindMountSandboxHandle, "copyFileIn" | "copyFileOut">, projectsDir: string) => SessionStore;
|
|
45
|
+
/**
|
|
46
|
+
* Transfer a session from one store to another, rewriting `cwd` fields in
|
|
47
|
+
* the JSONL entries from the source store's cwd to the target store's cwd.
|
|
48
|
+
*/
|
|
49
|
+
export declare const transferSession: (from: SessionStore, to: SessionStore, id: string) => Promise<void>;
|
|
50
|
+
//# sourceMappingURL=SessionStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionStore.d.ts","sourceRoot":"","sources":["../src/SessionStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAMnE,wEAAwE;AACxE,MAAM,WAAW,YAAY;IAC3B,2DAA2D;IAC3D,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,iEAAiE;IACjE,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,oEAAoE;IACpE,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;AAMD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,yBAI7B,CAAC;AAMF;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,iEAoB5B,CAAC;AAMF;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,wHAuC/B,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,eAAe,qEAyB3B,CAAC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SessionStore — keyed collection of agent session JSONLs.
|
|
3
|
+
*
|
|
4
|
+
* Provides read/write access to Claude Code session files, with two
|
|
5
|
+
* implementations: host-backed (filesystem) and sandbox-backed (via
|
|
6
|
+
* bind-mount handle file-transfer primitives). The `transferSession`
|
|
7
|
+
* function copies a session between stores, rewriting `cwd` fields in
|
|
8
|
+
* the JSONL entries from source cwd to target cwd.
|
|
9
|
+
*/
|
|
10
|
+
import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
11
|
+
import { dirname, join } from "node:path";
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Path encoding
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
/**
|
|
16
|
+
* Encode a cwd into the Claude Code `~/.claude/projects/<encoded>/` layout.
|
|
17
|
+
* Replaces path separators with hyphens, matching Claude Code's convention.
|
|
18
|
+
*/
|
|
19
|
+
export const encodeProjectPath = (cwd) => {
|
|
20
|
+
// Strip trailing slash (but preserve root "/")
|
|
21
|
+
const normalized = cwd.length > 1 ? cwd.replace(/\/+$/, "") : cwd;
|
|
22
|
+
return normalized.replaceAll("/", "-");
|
|
23
|
+
};
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Host-backed SessionStore
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
/**
|
|
28
|
+
* Create a host-backed SessionStore that reads/writes session JSONLs on the
|
|
29
|
+
* host filesystem using Claude Code's `~/.claude/projects/<encoded>/sessions/`
|
|
30
|
+
* layout.
|
|
31
|
+
*
|
|
32
|
+
* @param cwd - The host repo directory this store is associated with.
|
|
33
|
+
* @param projectsDir - Override for the projects directory (default: `~/.claude/projects`).
|
|
34
|
+
*/
|
|
35
|
+
export const hostSessionStore = (cwd, projectsDir) => {
|
|
36
|
+
const baseDir = projectsDir ?? join(process.env.HOME ?? "~", ".claude", "projects");
|
|
37
|
+
const encoded = encodeProjectPath(cwd);
|
|
38
|
+
const sessionsDir = join(baseDir, encoded, "sessions");
|
|
39
|
+
return {
|
|
40
|
+
cwd,
|
|
41
|
+
sessionFilePath: (id) => join(sessionsDir, `${id}.jsonl`),
|
|
42
|
+
readSession: async (id) => {
|
|
43
|
+
return await readFile(join(sessionsDir, `${id}.jsonl`), "utf-8");
|
|
44
|
+
},
|
|
45
|
+
writeSession: async (id, content) => {
|
|
46
|
+
await mkdir(sessionsDir, { recursive: true });
|
|
47
|
+
await writeFile(join(sessionsDir, `${id}.jsonl`), content);
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
// Sandbox-backed SessionStore
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
/**
|
|
55
|
+
* Create a sandbox-backed SessionStore that uses a bind-mount handle's
|
|
56
|
+
* `copyFileIn`/`copyFileOut` to transfer session files.
|
|
57
|
+
*
|
|
58
|
+
* @param cwd - The sandbox-side working directory.
|
|
59
|
+
* @param handle - The bind-mount sandbox handle for file transfer.
|
|
60
|
+
* @param projectsDir - The sandbox-side path to `~/.claude/projects`.
|
|
61
|
+
*/
|
|
62
|
+
export const sandboxSessionStore = (cwd, handle, projectsDir) => {
|
|
63
|
+
const encoded = encodeProjectPath(cwd);
|
|
64
|
+
const sessionsDir = join(projectsDir, encoded, "sessions");
|
|
65
|
+
return {
|
|
66
|
+
cwd,
|
|
67
|
+
sessionFilePath: (id) => join(sessionsDir, `${id}.jsonl`),
|
|
68
|
+
readSession: async (id) => {
|
|
69
|
+
const sandboxPath = join(sessionsDir, `${id}.jsonl`);
|
|
70
|
+
const tmpPath = join(dirname(sandboxPath), `.${id}.jsonl.tmp.${Date.now()}`);
|
|
71
|
+
await handle.copyFileOut(sandboxPath, tmpPath);
|
|
72
|
+
try {
|
|
73
|
+
return await readFile(tmpPath, "utf-8");
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
await rm(tmpPath, { force: true }).catch(() => { });
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
writeSession: async (id, content) => {
|
|
80
|
+
const sandboxPath = join(sessionsDir, `${id}.jsonl`);
|
|
81
|
+
const tmpPath = join(dirname(sandboxPath), `.${id}.jsonl.tmp.${Date.now()}`);
|
|
82
|
+
await mkdir(dirname(tmpPath), { recursive: true });
|
|
83
|
+
await writeFile(tmpPath, content);
|
|
84
|
+
try {
|
|
85
|
+
await handle.copyFileIn(tmpPath, sandboxPath);
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
await rm(tmpPath, { force: true }).catch(() => { });
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
// ---------------------------------------------------------------------------
|
|
94
|
+
// transferSession
|
|
95
|
+
// ---------------------------------------------------------------------------
|
|
96
|
+
/**
|
|
97
|
+
* Transfer a session from one store to another, rewriting `cwd` fields in
|
|
98
|
+
* the JSONL entries from the source store's cwd to the target store's cwd.
|
|
99
|
+
*/
|
|
100
|
+
export const transferSession = async (from, to, id) => {
|
|
101
|
+
const content = await from.readSession(id);
|
|
102
|
+
if (content === "") {
|
|
103
|
+
await to.writeSession(id, "");
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const rewritten = content
|
|
107
|
+
.split("\n")
|
|
108
|
+
.map((line) => {
|
|
109
|
+
if (line === "")
|
|
110
|
+
return line;
|
|
111
|
+
const entry = JSON.parse(line);
|
|
112
|
+
if (typeof entry.cwd === "string" && entry.cwd === from.cwd) {
|
|
113
|
+
entry.cwd = to.cwd;
|
|
114
|
+
}
|
|
115
|
+
return JSON.stringify(entry);
|
|
116
|
+
})
|
|
117
|
+
.join("\n");
|
|
118
|
+
await to.writeSession(id, rewritten);
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=SessionStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionStore.js","sourceRoot":"","sources":["../src/SessionStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
2
|
import { FileSystem } from "@effect/platform";
|
|
3
|
-
import { WorktreeError } from "./errors.js";
|
|
3
|
+
import { WorktreeError, WorktreeTimeoutError } from "./errors.js";
|
|
4
4
|
/** Sanitize a name for use in branch names and directory names. */
|
|
5
5
|
export declare const sanitizeName: (name: string) => string;
|
|
6
6
|
/**
|
|
@@ -28,7 +28,7 @@ export declare const create: (repoDir: string, opts?: {
|
|
|
28
28
|
name?: string | undefined;
|
|
29
29
|
/** When false, reuse an existing worktree instead of failing on collision. Default: true. */
|
|
30
30
|
throwOnDuplicateWorktree?: boolean | undefined;
|
|
31
|
-
} | undefined) => Effect.Effect<WorktreeInfo, WorktreeError, FileSystem.FileSystem>;
|
|
31
|
+
} | undefined) => Effect.Effect<WorktreeInfo, WorktreeError | WorktreeTimeoutError, FileSystem.FileSystem>;
|
|
32
32
|
/**
|
|
33
33
|
* Returns true if the worktree at `worktreePath` has any uncommitted changes:
|
|
34
34
|
* unstaged modifications, staged changes, or untracked files.
|
|
@@ -45,5 +45,5 @@ export declare const remove: (worktreePath: string) => Effect.Effect<void, Workt
|
|
|
45
45
|
* Prunes stale git worktree metadata and removes orphaned directories under
|
|
46
46
|
* `.sandcastle/worktrees/`.
|
|
47
47
|
*/
|
|
48
|
-
export declare const pruneStale: (repoDir: string) => Effect.Effect<void, WorktreeError, FileSystem.FileSystem>;
|
|
48
|
+
export declare const pruneStale: (repoDir: string) => Effect.Effect<void, WorktreeError | WorktreeTimeoutError, FileSystem.FileSystem>;
|
|
49
49
|
//# sourceMappingURL=WorktreeManager.d.ts.map
|
|
@@ -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;
|
|
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,oBAAoB,EAAe,MAAM,aAAa,CAAC;AAa/E,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;;;IAKf,6FAA6F;;0GAiG9F,CAAC;AAEJ;;;GAGG;AACH,eAAO,MAAM,qBAAqB,wEAK/B,CAAC;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,MAAM,qEAQlB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,uGAqEpB,CAAC"}
|
package/dist/WorktreeManager.js
CHANGED
|
@@ -2,7 +2,8 @@ import { Effect, Option } from "effect";
|
|
|
2
2
|
import { FileSystem } from "@effect/platform";
|
|
3
3
|
import { execFile } from "node:child_process";
|
|
4
4
|
import { join } from "node:path";
|
|
5
|
-
import { WorktreeError } from "./errors.js";
|
|
5
|
+
import { WorktreeError, WorktreeTimeoutError, withTimeout } from "./errors.js";
|
|
6
|
+
const WORKTREE_TIMEOUT_MS = 30_000;
|
|
6
7
|
/** Format a timestamp as YYYYMMDD-HHMMSS */
|
|
7
8
|
const formatTimestamp = (date) => {
|
|
8
9
|
const pad = (n) => String(n).padStart(2, "0");
|
|
@@ -126,7 +127,12 @@ export const create = (repoDir, opts) => Effect.gen(function* () {
|
|
|
126
127
|
}));
|
|
127
128
|
}
|
|
128
129
|
return { path: worktreePath, branch };
|
|
129
|
-
})
|
|
130
|
+
}).pipe(withTimeout(WORKTREE_TIMEOUT_MS, () => new WorktreeTimeoutError({
|
|
131
|
+
message: `Worktree creation timed out after ${WORKTREE_TIMEOUT_MS}ms`,
|
|
132
|
+
timeoutMs: WORKTREE_TIMEOUT_MS,
|
|
133
|
+
path: repoDir,
|
|
134
|
+
operation: "create",
|
|
135
|
+
})));
|
|
130
136
|
/**
|
|
131
137
|
* Returns true if the worktree at `worktreePath` has any uncommitted changes:
|
|
132
138
|
* unstaged modifications, staged changes, or untracked files.
|
|
@@ -174,5 +180,10 @@ export const pruneStale = (repoDir) => Effect.gen(function* () {
|
|
|
174
180
|
})));
|
|
175
181
|
}
|
|
176
182
|
}
|
|
177
|
-
})
|
|
183
|
+
}).pipe(withTimeout(WORKTREE_TIMEOUT_MS, () => new WorktreeTimeoutError({
|
|
184
|
+
message: `Worktree prune timed out after ${WORKTREE_TIMEOUT_MS}ms`,
|
|
185
|
+
timeoutMs: WORKTREE_TIMEOUT_MS,
|
|
186
|
+
path: repoDir,
|
|
187
|
+
operation: "prune",
|
|
188
|
+
})));
|
|
178
189
|
//# sourceMappingURL=WorktreeManager.js.map
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"WorktreeManager.js","sourceRoot":"","sources":["../src/WorktreeManager.ts"],"names":[],"mappings":"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"}
|
package/dist/createSandbox.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { Layer } from "effect";
|
|
2
2
|
import type { AgentProvider } from "./AgentProvider.js";
|
|
3
|
+
import { type IterationResult } from "./Orchestrator.js";
|
|
3
4
|
import { type PromptArgs } from "./PromptArgumentSubstitution.js";
|
|
4
5
|
import type { LoggingOption } from "./run.js";
|
|
6
|
+
import { type SandboxHooks } from "./SandboxLifecycle.js";
|
|
5
7
|
import { Sandbox as SandboxTag } from "./SandboxFactory.js";
|
|
6
8
|
import type { SandboxProvider } from "./SandboxProvider.js";
|
|
7
9
|
export interface CreateSandboxOptions {
|
|
@@ -9,15 +11,10 @@ export interface CreateSandboxOptions {
|
|
|
9
11
|
readonly branch: string;
|
|
10
12
|
/** Sandbox provider (e.g. docker({ imageName: "sandcastle:myrepo" })). */
|
|
11
13
|
readonly sandbox: SandboxProvider;
|
|
12
|
-
/**
|
|
13
|
-
readonly hooks?:
|
|
14
|
-
readonly onSandboxReady?: ReadonlyArray<{
|
|
15
|
-
command: string;
|
|
16
|
-
sudo?: boolean;
|
|
17
|
-
}>;
|
|
18
|
-
};
|
|
14
|
+
/** Lifecycle hooks grouped by execution location (host or sandbox). */
|
|
15
|
+
readonly hooks?: SandboxHooks;
|
|
19
16
|
/** Paths relative to the host repo root to copy into the worktree at creation time. */
|
|
20
|
-
readonly
|
|
17
|
+
readonly copyToWorktree?: string[];
|
|
21
18
|
/** When false, reuse an existing worktree instead of failing on collision. Default: true. */
|
|
22
19
|
readonly throwOnDuplicateWorktree?: boolean;
|
|
23
20
|
/** @internal Test-only overrides to bypass the sandbox provider. */
|
|
@@ -47,8 +44,8 @@ export interface SandboxRunOptions {
|
|
|
47
44
|
readonly logging?: LoggingOption;
|
|
48
45
|
}
|
|
49
46
|
export interface SandboxRunResult {
|
|
50
|
-
/**
|
|
51
|
-
readonly
|
|
47
|
+
/** Per-iteration results (use `iterations.length` for the count). */
|
|
48
|
+
readonly iterations: IterationResult[];
|
|
52
49
|
/** The matched completion signal string, or undefined if none fired. */
|
|
53
50
|
readonly completionSignal?: string;
|
|
54
51
|
/** Combined stdout output from all agent iterations. */
|
|
@@ -98,6 +95,24 @@ export interface Sandbox {
|
|
|
98
95
|
/** Auto teardown via `await using`. */
|
|
99
96
|
[Symbol.asyncDispose](): Promise<void>;
|
|
100
97
|
}
|
|
98
|
+
/** @internal Options for createSandboxFromWorktree — used by worktree.createSandbox(). */
|
|
99
|
+
export interface CreateSandboxFromWorktreeOptions {
|
|
100
|
+
readonly branch: string;
|
|
101
|
+
readonly worktreePath: string;
|
|
102
|
+
readonly hostRepoDir: string;
|
|
103
|
+
readonly sandbox: SandboxProvider;
|
|
104
|
+
readonly hooks?: SandboxHooks;
|
|
105
|
+
readonly copyToWorktree?: string[];
|
|
106
|
+
readonly _test?: {
|
|
107
|
+
readonly buildSandboxLayer?: (sandboxDir: string) => Layer.Layer<SandboxTag>;
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* @internal Creates a sandbox backed by an existing worktree.
|
|
112
|
+
* Split ownership: close() tears down the container only, leaving the worktree intact.
|
|
113
|
+
* Used by Worktree.createSandbox().
|
|
114
|
+
*/
|
|
115
|
+
export declare const createSandboxFromWorktree: (options: CreateSandboxFromWorktreeOptions) => Promise<Sandbox>;
|
|
101
116
|
/**
|
|
102
117
|
* Eagerly creates a git worktree on the provided explicit branch and starts
|
|
103
118
|
* a sandbox with the worktree bind-mounted. Returns a Sandbox handle that
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createSandbox.d.ts","sourceRoot":"","sources":["../src/createSandbox.ts"],"names":[],"mappings":"AAEA,OAAO,EAAU,KAAK,EAAO,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"createSandbox.d.ts","sourceRoot":"","sources":["../src/createSandbox.ts"],"names":[],"mappings":"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"}
|