@ai-hero/sandcastle 0.3.0 → 0.4.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 +304 -37
- package/dist/AgentProvider.d.ts +0 -10
- package/dist/AgentProvider.d.ts.map +1 -1
- package/dist/AgentProvider.js +28 -45
- package/dist/AgentProvider.js.map +1 -1
- package/dist/DockerLifecycle.d.ts +5 -1
- package/dist/DockerLifecycle.d.ts.map +1 -1
- package/dist/DockerLifecycle.js +8 -1
- package/dist/DockerLifecycle.js.map +1 -1
- package/dist/InitService.d.ts.map +1 -1
- package/dist/InitService.js +2 -0
- package/dist/InitService.js.map +1 -1
- package/dist/Orchestrator.d.ts +0 -1
- package/dist/Orchestrator.d.ts.map +1 -1
- package/dist/Orchestrator.js +2 -13
- package/dist/Orchestrator.js.map +1 -1
- package/dist/SandboxFactory.d.ts +7 -7
- package/dist/SandboxFactory.d.ts.map +1 -1
- package/dist/SandboxFactory.js +39 -35
- package/dist/SandboxFactory.js.map +1 -1
- package/dist/SandboxProvider.d.ts +27 -0
- package/dist/SandboxProvider.d.ts.map +1 -1
- package/dist/SandboxProvider.js +2 -0
- package/dist/SandboxProvider.js.map +1 -1
- package/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/run.d.ts +0 -16
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +18 -20
- package/dist/run.js.map +1 -1
- package/dist/sandboxes/docker.d.ts +3 -1
- package/dist/sandboxes/docker.d.ts.map +1 -1
- package/dist/sandboxes/docker.js +1 -0
- package/dist/sandboxes/docker.js.map +1 -1
- package/dist/sandboxes/test-isolated.d.ts +6 -2
- package/dist/sandboxes/test-isolated.d.ts.map +1 -1
- package/dist/sandboxes/test-isolated.js +2 -1
- package/dist/sandboxes/test-isolated.js.map +1 -1
- package/dist/syncIn.d.ts +4 -2
- package/dist/syncIn.d.ts.map +1 -1
- package/dist/syncIn.js +72 -22
- package/dist/syncIn.js.map +1 -1
- package/dist/syncOut.d.ts +3 -1
- package/dist/syncOut.d.ts.map +1 -1
- package/dist/syncOut.js +155 -76
- package/dist/syncOut.js.map +1 -1
- package/dist/templates/blank/.env.example +1 -0
- package/dist/templates/parallel-planner/.env.example +1 -0
- package/dist/templates/parallel-planner/main.mts +2 -3
- package/dist/templates/sequential-reviewer/.env.example +1 -0
- package/dist/templates/sequential-reviewer/main.mts +1 -2
- package/dist/templates/simple-loop/.env.example +1 -0
- package/package.json +1 -1
package/dist/syncOut.js
CHANGED
|
@@ -16,40 +16,92 @@
|
|
|
16
16
|
import { existsSync } from "node:fs";
|
|
17
17
|
import { mkdir, readdir, readFile, rm, stat, writeFile, } from "node:fs/promises";
|
|
18
18
|
import { basename, dirname, join } from "node:path";
|
|
19
|
+
import { Effect } from "effect";
|
|
19
20
|
import { buildRecoveryMessage } from "./RecoveryMessage.js";
|
|
20
|
-
import {
|
|
21
|
+
import { SyncError } from "./errors.js";
|
|
22
|
+
/**
|
|
23
|
+
* Execute a command on the host side, returning stdout.
|
|
24
|
+
* Fails with SyncError on non-zero exit.
|
|
25
|
+
*/
|
|
26
|
+
const execHost = (command, cwd) => Effect.tryPromise({
|
|
27
|
+
try: async () => {
|
|
28
|
+
const { exec } = await import("node:child_process");
|
|
29
|
+
const { promisify } = await import("node:util");
|
|
30
|
+
const execAsync = promisify(exec);
|
|
31
|
+
const { stdout } = await execAsync(command, {
|
|
32
|
+
cwd,
|
|
33
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
34
|
+
});
|
|
35
|
+
return stdout;
|
|
36
|
+
},
|
|
37
|
+
catch: (e) => new SyncError({
|
|
38
|
+
message: `Host command failed: ${command}\n${e instanceof Error ? e.message : String(e)}`,
|
|
39
|
+
}),
|
|
40
|
+
});
|
|
41
|
+
/**
|
|
42
|
+
* Execute a command in the sandbox, failing with SyncError if it exits non-zero.
|
|
43
|
+
*/
|
|
44
|
+
const execOk = (handle, command, options) => Effect.tryPromise({
|
|
45
|
+
try: () => handle.exec(command, options),
|
|
46
|
+
catch: (e) => new SyncError({
|
|
47
|
+
message: `Sandbox exec failed: ${command}\n${e instanceof Error ? e.message : String(e)}`,
|
|
48
|
+
}),
|
|
49
|
+
}).pipe(Effect.flatMap((result) => result.exitCode !== 0
|
|
50
|
+
? Effect.fail(new SyncError({
|
|
51
|
+
message: `Sandbox command failed (exit ${result.exitCode}): ${command}\n${result.stderr}`,
|
|
52
|
+
}))
|
|
53
|
+
: Effect.succeed(result)));
|
|
54
|
+
/**
|
|
55
|
+
* Execute a command in the sandbox, returning the result without failing on non-zero exit.
|
|
56
|
+
*/
|
|
57
|
+
const execSandbox = (handle, command, options) => Effect.tryPromise({
|
|
58
|
+
try: () => handle.exec(command, options),
|
|
59
|
+
catch: (e) => new SyncError({
|
|
60
|
+
message: `Sandbox exec failed: ${command}\n${e instanceof Error ? e.message : String(e)}`,
|
|
61
|
+
}),
|
|
62
|
+
});
|
|
21
63
|
/**
|
|
22
64
|
* Check if a patch file is empty or header-only.
|
|
23
65
|
* Merge commits produce patches with headers but no diff content.
|
|
24
66
|
* A patch is considered empty if it has no lines starting with "diff --git".
|
|
25
67
|
*/
|
|
26
|
-
const isEmptyPatch =
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
68
|
+
const isEmptyPatch = (patchPath) => Effect.tryPromise({
|
|
69
|
+
try: async () => {
|
|
70
|
+
const info = await stat(patchPath);
|
|
71
|
+
if (info.size === 0)
|
|
72
|
+
return true;
|
|
73
|
+
const content = await readFile(patchPath, "utf-8");
|
|
74
|
+
return !content.includes("diff --git");
|
|
75
|
+
},
|
|
76
|
+
catch: (e) => new SyncError({
|
|
77
|
+
message: `Failed to check patch ${patchPath}: ${e instanceof Error ? e.message : String(e)}`,
|
|
78
|
+
}),
|
|
79
|
+
});
|
|
33
80
|
/**
|
|
34
81
|
* Generate a YYYYMMDD-HHMMSS timestamp directory name.
|
|
35
82
|
* Appends a counter suffix (-1, -2, ...) if the directory already exists.
|
|
36
83
|
*/
|
|
37
|
-
const createPatchDir =
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
84
|
+
const createPatchDir = (hostRepoDir) => Effect.tryPromise({
|
|
85
|
+
try: async () => {
|
|
86
|
+
const now = new Date();
|
|
87
|
+
const pad = (n) => String(n).padStart(2, "0");
|
|
88
|
+
const base = `${now.getFullYear()}${pad(now.getMonth() + 1)}${pad(now.getDate())}-${pad(now.getHours())}${pad(now.getMinutes())}${pad(now.getSeconds())}`;
|
|
89
|
+
const patchesRoot = join(hostRepoDir, ".sandcastle", "patches");
|
|
90
|
+
await mkdir(patchesRoot, { recursive: true });
|
|
91
|
+
let dirName = base;
|
|
92
|
+
let counter = 0;
|
|
93
|
+
while (existsSync(join(patchesRoot, dirName))) {
|
|
94
|
+
counter++;
|
|
95
|
+
dirName = `${base}-${counter}`;
|
|
96
|
+
}
|
|
97
|
+
const patchDir = join(patchesRoot, dirName);
|
|
98
|
+
await mkdir(patchDir, { recursive: true });
|
|
99
|
+
return patchDir;
|
|
100
|
+
},
|
|
101
|
+
catch: (e) => new SyncError({
|
|
102
|
+
message: `Failed to create patch directory: ${e instanceof Error ? e.message : String(e)}`,
|
|
103
|
+
}),
|
|
104
|
+
});
|
|
53
105
|
/**
|
|
54
106
|
* Sync changes from an isolated sandbox back to the host repo.
|
|
55
107
|
*
|
|
@@ -57,16 +109,20 @@ const createPatchDir = async (hostRepoDir) => {
|
|
|
57
109
|
* 1. Save all artifacts to `.sandcastle/patches/<timestamp>/`
|
|
58
110
|
* 2. Apply from saved directory; on failure, preserve artifacts and print recovery
|
|
59
111
|
*/
|
|
60
|
-
export const syncOut =
|
|
112
|
+
export const syncOut = (hostRepoDir, handle) => Effect.gen(function* () {
|
|
61
113
|
const workspacePath = handle.workspacePath;
|
|
62
|
-
const hostHead = (
|
|
63
|
-
const sandboxHead = (
|
|
114
|
+
const hostHead = (yield* execHost("git rev-parse HEAD", hostRepoDir)).trim();
|
|
115
|
+
const sandboxHead = (yield* execOk(handle, "git rev-parse HEAD", {
|
|
116
|
+
cwd: workspacePath,
|
|
117
|
+
})).stdout.trim();
|
|
64
118
|
const hasCommits = hostHead !== sandboxHead;
|
|
65
119
|
// Check for uncommitted changes
|
|
66
|
-
const diffResult =
|
|
120
|
+
const diffResult = yield* execSandbox(handle, "git diff HEAD", {
|
|
121
|
+
cwd: workspacePath,
|
|
122
|
+
});
|
|
67
123
|
const hasDiff = diffResult.exitCode === 0 && diffResult.stdout.trim().length > 0;
|
|
68
124
|
// Check for untracked files
|
|
69
|
-
const lsFilesResult =
|
|
125
|
+
const lsFilesResult = yield* execSandbox(handle, "git ls-files --others --exclude-standard", { cwd: workspacePath });
|
|
70
126
|
const hasUntracked = lsFilesResult.exitCode === 0 && lsFilesResult.stdout.trim().length > 0;
|
|
71
127
|
const untrackedFiles = hasUntracked
|
|
72
128
|
? lsFilesResult.stdout
|
|
@@ -79,16 +135,16 @@ export const syncOut = async (hostRepoDir, handle) => {
|
|
|
79
135
|
return;
|
|
80
136
|
}
|
|
81
137
|
// --- Phase 1: Save all artifacts ---
|
|
82
|
-
const patchDir =
|
|
138
|
+
const patchDir = yield* createPatchDir(hostRepoDir);
|
|
83
139
|
const relativePatchDir = join(".sandcastle", "patches", basename(patchDir));
|
|
84
140
|
const nonEmptyPatches = [];
|
|
85
141
|
// Save committed patches
|
|
86
142
|
if (hasCommits) {
|
|
87
|
-
const mkTempResult =
|
|
143
|
+
const mkTempResult = yield* execOk(handle, "mktemp -d -t sandcastle-patches-XXXXXX");
|
|
88
144
|
const sandboxPatchDir = mkTempResult.stdout.trim();
|
|
89
145
|
try {
|
|
90
|
-
|
|
91
|
-
const lsResult =
|
|
146
|
+
yield* execOk(handle, `git format-patch "${hostHead}..HEAD" -o "${sandboxPatchDir}"`, { cwd: workspacePath });
|
|
147
|
+
const lsResult = yield* execOk(handle, `ls -1 "${sandboxPatchDir}"`);
|
|
92
148
|
const patchNames = lsResult.stdout
|
|
93
149
|
.trim()
|
|
94
150
|
.split("\n")
|
|
@@ -96,20 +152,30 @@ export const syncOut = async (hostRepoDir, handle) => {
|
|
|
96
152
|
for (const patchName of patchNames) {
|
|
97
153
|
const sandboxPatchPath = `${sandboxPatchDir}/${patchName}`;
|
|
98
154
|
const hostPatchPath = join(patchDir, patchName);
|
|
99
|
-
|
|
100
|
-
|
|
155
|
+
yield* Effect.tryPromise({
|
|
156
|
+
try: () => handle.copyOut(sandboxPatchPath, hostPatchPath),
|
|
157
|
+
catch: (e) => new SyncError({
|
|
158
|
+
message: `Failed to copy patch ${patchName}: ${e instanceof Error ? e.message : String(e)}`,
|
|
159
|
+
}),
|
|
160
|
+
});
|
|
161
|
+
if (!(yield* isEmptyPatch(hostPatchPath))) {
|
|
101
162
|
nonEmptyPatches.push(hostPatchPath);
|
|
102
163
|
}
|
|
103
164
|
}
|
|
104
165
|
}
|
|
105
166
|
finally {
|
|
106
|
-
|
|
167
|
+
yield* execSandbox(handle, `rm -rf "${sandboxPatchDir}"`);
|
|
107
168
|
}
|
|
108
169
|
}
|
|
109
170
|
// Save uncommitted diff
|
|
110
171
|
if (hasDiff) {
|
|
111
172
|
const diffPath = join(patchDir, "changes.patch");
|
|
112
|
-
|
|
173
|
+
yield* Effect.tryPromise({
|
|
174
|
+
try: () => writeFile(diffPath, diffResult.stdout),
|
|
175
|
+
catch: (e) => new SyncError({
|
|
176
|
+
message: `Failed to write diff patch: ${e instanceof Error ? e.message : String(e)}`,
|
|
177
|
+
}),
|
|
178
|
+
});
|
|
113
179
|
}
|
|
114
180
|
// Save untracked files
|
|
115
181
|
if (hasUntracked) {
|
|
@@ -117,46 +183,55 @@ export const syncOut = async (hostRepoDir, handle) => {
|
|
|
117
183
|
for (const relPath of untrackedFiles) {
|
|
118
184
|
const sandboxFilePath = `${workspacePath}/${relPath}`;
|
|
119
185
|
const hostFilePath = join(untrackedDir, relPath);
|
|
120
|
-
|
|
121
|
-
|
|
186
|
+
yield* Effect.tryPromise({
|
|
187
|
+
try: async () => {
|
|
188
|
+
await mkdir(dirname(hostFilePath), { recursive: true });
|
|
189
|
+
await handle.copyOut(sandboxFilePath, hostFilePath);
|
|
190
|
+
},
|
|
191
|
+
catch: (e) => new SyncError({
|
|
192
|
+
message: `Failed to save untracked file ${relPath}: ${e instanceof Error ? e.message : String(e)}`,
|
|
193
|
+
}),
|
|
194
|
+
});
|
|
122
195
|
}
|
|
123
196
|
}
|
|
124
197
|
// --- Phase 2: Apply from saved directory ---
|
|
125
198
|
let failedStep;
|
|
126
199
|
// Apply committed patches
|
|
127
200
|
if (nonEmptyPatches.length > 0) {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
catch {
|
|
201
|
+
const abortResult = yield* Effect.either(execHost("git am --abort", hostRepoDir));
|
|
202
|
+
void abortResult; // ignore abort failures
|
|
203
|
+
const patchArgs = nonEmptyPatches.map((p) => `"${p}"`).join(" ");
|
|
204
|
+
const applyResult = yield* Effect.either(execHost(`git am --3way ${patchArgs}`, hostRepoDir));
|
|
205
|
+
if (applyResult._tag === "Left") {
|
|
134
206
|
failedStep = "commits";
|
|
135
207
|
}
|
|
136
208
|
}
|
|
137
209
|
// Apply uncommitted diff
|
|
138
210
|
if (!failedStep && hasDiff) {
|
|
139
211
|
const diffPath = join(patchDir, "changes.patch");
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
}
|
|
143
|
-
catch {
|
|
212
|
+
const applyResult = yield* Effect.either(execHost(`git apply "${diffPath}"`, hostRepoDir));
|
|
213
|
+
if (applyResult._tag === "Left") {
|
|
144
214
|
failedStep = "diff";
|
|
145
215
|
}
|
|
146
216
|
}
|
|
147
217
|
// Copy untracked files
|
|
148
218
|
if (!failedStep && hasUntracked) {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
const
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
219
|
+
const copyResult = yield* Effect.either(Effect.tryPromise({
|
|
220
|
+
try: async () => {
|
|
221
|
+
const untrackedDir = join(patchDir, "untracked");
|
|
222
|
+
for (const relPath of untrackedFiles) {
|
|
223
|
+
const srcPath = join(untrackedDir, relPath);
|
|
224
|
+
const destPath = join(hostRepoDir, relPath);
|
|
225
|
+
await mkdir(dirname(destPath), { recursive: true });
|
|
226
|
+
const content = await readFile(srcPath);
|
|
227
|
+
await writeFile(destPath, content);
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
catch: (e) => new SyncError({
|
|
231
|
+
message: `Failed to copy untracked files: ${e instanceof Error ? e.message : String(e)}`,
|
|
232
|
+
}),
|
|
233
|
+
}));
|
|
234
|
+
if (copyResult._tag === "Left") {
|
|
160
235
|
failedStep = "untracked";
|
|
161
236
|
}
|
|
162
237
|
}
|
|
@@ -172,21 +247,25 @@ export const syncOut = async (hostRepoDir, handle) => {
|
|
|
172
247
|
console.error(`\n${msg}`);
|
|
173
248
|
}
|
|
174
249
|
else {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
250
|
+
yield* Effect.tryPromise({
|
|
251
|
+
try: async () => {
|
|
252
|
+
await rm(patchDir, { recursive: true, force: true });
|
|
253
|
+
const patchesRoot = join(hostRepoDir, ".sandcastle", "patches");
|
|
254
|
+
try {
|
|
255
|
+
const remaining = await readdir(patchesRoot);
|
|
256
|
+
if (remaining.length === 0) {
|
|
257
|
+
await rm(join(hostRepoDir, ".sandcastle"), {
|
|
258
|
+
recursive: true,
|
|
259
|
+
force: true,
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
catch {
|
|
264
|
+
// ignore
|
|
265
|
+
}
|
|
266
|
+
},
|
|
267
|
+
catch: () => new SyncError({ message: "Failed to clean up patch directory" }),
|
|
268
|
+
});
|
|
190
269
|
}
|
|
191
|
-
};
|
|
270
|
+
});
|
|
192
271
|
//# sourceMappingURL=syncOut.js.map
|
package/dist/syncOut.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncOut.js","sourceRoot":"","sources":["../src/syncOut.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"syncOut.js","sourceRoot":"","sources":["../src/syncOut.ts"],"names":[],"mappings":"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"}
|
|
@@ -107,7 +107,8 @@ for (let iteration = 1; iteration <= MAX_ITERATIONS; iteration++) {
|
|
|
107
107
|
sandcastle.run({
|
|
108
108
|
hooks,
|
|
109
109
|
copyToSandbox,
|
|
110
|
-
|
|
110
|
+
// Each agent starts on its own branch via the provider's branchStrategy.
|
|
111
|
+
sandbox: docker({ branchStrategy: { type: "branch", branch: issue.branch } }),
|
|
111
112
|
name: "implementer",
|
|
112
113
|
// Give each agent plenty of room to implement and iterate on tests.
|
|
113
114
|
maxIterations: 100,
|
|
@@ -122,8 +123,6 @@ for (let iteration = 1; iteration <= MAX_ITERATIONS; iteration++) {
|
|
|
122
123
|
ISSUE_TITLE: issue.title,
|
|
123
124
|
BRANCH: issue.branch,
|
|
124
125
|
},
|
|
125
|
-
// Each agent starts on its own branch.
|
|
126
|
-
worktree: { mode: "branch", branch: issue.branch },
|
|
127
126
|
}),
|
|
128
127
|
),
|
|
129
128
|
);
|
|
@@ -86,7 +86,7 @@ for (let iteration = 1; iteration <= MAX_ITERATIONS; iteration++) {
|
|
|
86
86
|
await sandcastle.run({
|
|
87
87
|
hooks,
|
|
88
88
|
copyToSandbox,
|
|
89
|
-
sandbox: docker(),
|
|
89
|
+
sandbox: docker({ branchStrategy: { type: "branch", branch } }),
|
|
90
90
|
name: "reviewer",
|
|
91
91
|
maxIterations: 10,
|
|
92
92
|
agent: sandcastle.claudeCode("claude-sonnet-4-6"),
|
|
@@ -96,7 +96,6 @@ for (let iteration = 1; iteration <= MAX_ITERATIONS; iteration++) {
|
|
|
96
96
|
promptArgs: {
|
|
97
97
|
BRANCH: branch,
|
|
98
98
|
},
|
|
99
|
-
worktree: { mode: "branch", branch },
|
|
100
99
|
});
|
|
101
100
|
|
|
102
101
|
console.log("\nReview complete.");
|