@ai-hero/sandcastle 0.6.5 → 0.7.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.
Files changed (229) hide show
  1. package/README.md +137 -62
  2. package/dist/{MountConfig.d.ts → MountConfig-CmXclHA5.d.ts} +3 -2
  3. package/dist/{SandboxProvider.d.ts → SandboxProvider-EkSMuBp8.d.ts} +25 -39
  4. package/dist/chunk-52CIJF45.js +25569 -0
  5. package/dist/chunk-52CIJF45.js.map +1 -0
  6. package/dist/chunk-5VM5QZ26.js +26988 -0
  7. package/dist/chunk-5VM5QZ26.js.map +1 -0
  8. package/dist/chunk-72UVAC7B.js +99 -0
  9. package/dist/chunk-72UVAC7B.js.map +1 -0
  10. package/dist/chunk-BIWNFKGV.js +22 -0
  11. package/dist/chunk-BIWNFKGV.js.map +1 -0
  12. package/dist/chunk-NGBM7T3E.js +76 -0
  13. package/dist/chunk-NGBM7T3E.js.map +1 -0
  14. package/dist/chunk-NSFQW6ML.js +362 -0
  15. package/dist/chunk-NSFQW6ML.js.map +1 -0
  16. package/dist/index.d.ts +920 -22
  17. package/dist/index.js +3212 -9
  18. package/dist/index.js.map +1 -1
  19. package/dist/main.d.ts +0 -2
  20. package/dist/main.js +19349 -13
  21. package/dist/main.js.map +1 -1
  22. package/dist/mountUtils-CCA-bbpK.d.ts +25 -0
  23. package/dist/sandboxes/daytona.d.ts +8 -5
  24. package/dist/sandboxes/daytona.js +118 -124
  25. package/dist/sandboxes/daytona.js.map +1 -1
  26. package/dist/sandboxes/docker.d.ts +10 -8
  27. package/dist/sandboxes/docker.js +8 -255
  28. package/dist/sandboxes/docker.js.map +1 -1
  29. package/dist/sandboxes/no-sandbox.d.ts +7 -4
  30. package/dist/sandboxes/no-sandbox.js +6 -114
  31. package/dist/sandboxes/no-sandbox.js.map +1 -1
  32. package/dist/sandboxes/podman.d.ts +10 -8
  33. package/dist/sandboxes/podman.js +287 -297
  34. package/dist/sandboxes/podman.js.map +1 -1
  35. package/dist/sandboxes/vercel.d.ts +7 -4
  36. package/dist/sandboxes/vercel.js +144 -165
  37. package/dist/sandboxes/vercel.js.map +1 -1
  38. package/dist/templates/sequential-reviewer/implement-prompt.md +2 -2
  39. package/dist/templates/simple-loop/prompt.md +2 -2
  40. package/package.json +15 -14
  41. package/dist/AgentProvider.d.ts +0 -134
  42. package/dist/AgentProvider.d.ts.map +0 -1
  43. package/dist/AgentProvider.js +0 -647
  44. package/dist/AgentProvider.js.map +0 -1
  45. package/dist/AgentStreamEmitter.d.ts +0 -36
  46. package/dist/AgentStreamEmitter.d.ts.map +0 -1
  47. package/dist/AgentStreamEmitter.js +0 -21
  48. package/dist/AgentStreamEmitter.js.map +0 -1
  49. package/dist/CopyToWorktree.d.ts +0 -15
  50. package/dist/CopyToWorktree.d.ts.map +0 -1
  51. package/dist/CopyToWorktree.js +0 -60
  52. package/dist/CopyToWorktree.js.map +0 -1
  53. package/dist/Display.d.ts +0 -58
  54. package/dist/Display.d.ts.map +0 -1
  55. package/dist/Display.js +0 -142
  56. package/dist/Display.js.map +0 -1
  57. package/dist/DockerLifecycle.d.ts +0 -54
  58. package/dist/DockerLifecycle.d.ts.map +0 -1
  59. package/dist/DockerLifecycle.js +0 -123
  60. package/dist/DockerLifecycle.js.map +0 -1
  61. package/dist/EnvResolver.d.ts +0 -11
  62. package/dist/EnvResolver.d.ts.map +0 -1
  63. package/dist/EnvResolver.js +0 -63
  64. package/dist/EnvResolver.js.map +0 -1
  65. package/dist/ErrorHandler.d.ts +0 -15
  66. package/dist/ErrorHandler.d.ts.map +0 -1
  67. package/dist/ErrorHandler.js +0 -85
  68. package/dist/ErrorHandler.js.map +0 -1
  69. package/dist/InitService.d.ts +0 -92
  70. package/dist/InitService.d.ts.map +0 -1
  71. package/dist/InitService.js +0 -836
  72. package/dist/InitService.js.map +0 -1
  73. package/dist/MountConfig.d.ts.map +0 -1
  74. package/dist/MountConfig.js +0 -7
  75. package/dist/MountConfig.js.map +0 -1
  76. package/dist/Orchestrator.d.ts +0 -56
  77. package/dist/Orchestrator.d.ts.map +0 -1
  78. package/dist/Orchestrator.js +0 -293
  79. package/dist/Orchestrator.js.map +0 -1
  80. package/dist/Output.d.ts +0 -107
  81. package/dist/Output.d.ts.map +0 -1
  82. package/dist/Output.js +0 -95
  83. package/dist/Output.js.map +0 -1
  84. package/dist/PodmanLifecycle.d.ts +0 -17
  85. package/dist/PodmanLifecycle.d.ts.map +0 -1
  86. package/dist/PodmanLifecycle.js +0 -45
  87. package/dist/PodmanLifecycle.js.map +0 -1
  88. package/dist/PromptArgumentSubstitution.d.ts +0 -32
  89. package/dist/PromptArgumentSubstitution.d.ts.map +0 -1
  90. package/dist/PromptArgumentSubstitution.js +0 -104
  91. package/dist/PromptArgumentSubstitution.js.map +0 -1
  92. package/dist/PromptPreprocessor.d.ts +0 -15
  93. package/dist/PromptPreprocessor.d.ts.map +0 -1
  94. package/dist/PromptPreprocessor.js +0 -55
  95. package/dist/PromptPreprocessor.js.map +0 -1
  96. package/dist/PromptResolver.d.ts +0 -21
  97. package/dist/PromptResolver.d.ts.map +0 -1
  98. package/dist/PromptResolver.js +0 -27
  99. package/dist/PromptResolver.js.map +0 -1
  100. package/dist/RecoveryMessage.d.ts +0 -15
  101. package/dist/RecoveryMessage.d.ts.map +0 -1
  102. package/dist/RecoveryMessage.js +0 -81
  103. package/dist/RecoveryMessage.js.map +0 -1
  104. package/dist/SandboxFactory.d.ts +0 -90
  105. package/dist/SandboxFactory.d.ts.map +0 -1
  106. package/dist/SandboxFactory.js +0 -324
  107. package/dist/SandboxFactory.js.map +0 -1
  108. package/dist/SandboxLifecycle.d.ts +0 -65
  109. package/dist/SandboxLifecycle.d.ts.map +0 -1
  110. package/dist/SandboxLifecycle.js +0 -296
  111. package/dist/SandboxLifecycle.js.map +0 -1
  112. package/dist/SandboxProvider.d.ts.map +0 -1
  113. package/dist/SandboxProvider.js +0 -28
  114. package/dist/SandboxProvider.js.map +0 -1
  115. package/dist/SessionStore.d.ts +0 -110
  116. package/dist/SessionStore.d.ts.map +0 -1
  117. package/dist/SessionStore.js +0 -330
  118. package/dist/SessionStore.js.map +0 -1
  119. package/dist/TextDeltaBuffer.d.ts +0 -24
  120. package/dist/TextDeltaBuffer.d.ts.map +0 -1
  121. package/dist/TextDeltaBuffer.js +0 -68
  122. package/dist/TextDeltaBuffer.js.map +0 -1
  123. package/dist/WorktreeManager.d.ts +0 -79
  124. package/dist/WorktreeManager.d.ts.map +0 -1
  125. package/dist/WorktreeManager.js +0 -283
  126. package/dist/WorktreeManager.js.map +0 -1
  127. package/dist/boundedTail.d.ts +0 -48
  128. package/dist/boundedTail.d.ts.map +0 -1
  129. package/dist/boundedTail.js +0 -64
  130. package/dist/boundedTail.js.map +0 -1
  131. package/dist/cli.d.ts +0 -30
  132. package/dist/cli.d.ts.map +0 -1
  133. package/dist/cli.js +0 -340
  134. package/dist/cli.js.map +0 -1
  135. package/dist/createSandbox.d.ts +0 -154
  136. package/dist/createSandbox.d.ts.map +0 -1
  137. package/dist/createSandbox.js +0 -476
  138. package/dist/createSandbox.js.map +0 -1
  139. package/dist/createWorktree.d.ts +0 -154
  140. package/dist/createWorktree.d.ts.map +0 -1
  141. package/dist/createWorktree.js +0 -391
  142. package/dist/createWorktree.js.map +0 -1
  143. package/dist/errors.d.ts +0 -227
  144. package/dist/errors.d.ts.map +0 -1
  145. package/dist/errors.js +0 -81
  146. package/dist/errors.js.map +0 -1
  147. package/dist/extractStructuredOutput.d.ts +0 -23
  148. package/dist/extractStructuredOutput.d.ts.map +0 -1
  149. package/dist/extractStructuredOutput.js +0 -102
  150. package/dist/extractStructuredOutput.js.map +0 -1
  151. package/dist/index.d.ts.map +0 -1
  152. package/dist/interactive.d.ts +0 -74
  153. package/dist/interactive.d.ts.map +0 -1
  154. package/dist/interactive.js +0 -279
  155. package/dist/interactive.js.map +0 -1
  156. package/dist/main.d.ts.map +0 -1
  157. package/dist/mergeProviderEnv.d.ts +0 -13
  158. package/dist/mergeProviderEnv.d.ts.map +0 -1
  159. package/dist/mergeProviderEnv.js +0 -23
  160. package/dist/mergeProviderEnv.js.map +0 -1
  161. package/dist/mountUtils.d.ts +0 -146
  162. package/dist/mountUtils.d.ts.map +0 -1
  163. package/dist/mountUtils.js +0 -301
  164. package/dist/mountUtils.js.map +0 -1
  165. package/dist/raceAbortSignal.d.ts +0 -18
  166. package/dist/raceAbortSignal.d.ts.map +0 -1
  167. package/dist/raceAbortSignal.js +0 -32
  168. package/dist/raceAbortSignal.js.map +0 -1
  169. package/dist/resolveCwd.d.ts +0 -24
  170. package/dist/resolveCwd.d.ts.map +0 -1
  171. package/dist/resolveCwd.js +0 -32
  172. package/dist/resolveCwd.js.map +0 -1
  173. package/dist/resumePrecheck.d.ts +0 -26
  174. package/dist/resumePrecheck.d.ts.map +0 -1
  175. package/dist/resumePrecheck.js +0 -40
  176. package/dist/resumePrecheck.js.map +0 -1
  177. package/dist/run.d.ts +0 -216
  178. package/dist/run.d.ts.map +0 -1
  179. package/dist/run.js +0 -313
  180. package/dist/run.js.map +0 -1
  181. package/dist/sandboxExec.d.ts +0 -12
  182. package/dist/sandboxExec.d.ts.map +0 -1
  183. package/dist/sandboxExec.js +0 -26
  184. package/dist/sandboxExec.js.map +0 -1
  185. package/dist/sandboxes/daytona.d.ts.map +0 -1
  186. package/dist/sandboxes/docker.d.ts.map +0 -1
  187. package/dist/sandboxes/no-sandbox.d.ts.map +0 -1
  188. package/dist/sandboxes/podman.d.ts.map +0 -1
  189. package/dist/sandboxes/test-bind-mount.d.ts +0 -17
  190. package/dist/sandboxes/test-bind-mount.d.ts.map +0 -1
  191. package/dist/sandboxes/test-bind-mount.js +0 -92
  192. package/dist/sandboxes/test-bind-mount.js.map +0 -1
  193. package/dist/sandboxes/test-isolated.d.ts +0 -17
  194. package/dist/sandboxes/test-isolated.d.ts.map +0 -1
  195. package/dist/sandboxes/test-isolated.js +0 -98
  196. package/dist/sandboxes/test-isolated.js.map +0 -1
  197. package/dist/sandboxes/vercel.d.ts.map +0 -1
  198. package/dist/shutdownRegistry.d.ts +0 -30
  199. package/dist/shutdownRegistry.d.ts.map +0 -1
  200. package/dist/shutdownRegistry.js +0 -73
  201. package/dist/shutdownRegistry.js.map +0 -1
  202. package/dist/startSandbox.d.ts +0 -50
  203. package/dist/startSandbox.d.ts.map +0 -1
  204. package/dist/startSandbox.js +0 -117
  205. package/dist/startSandbox.js.map +0 -1
  206. package/dist/syncIn.d.ts +0 -24
  207. package/dist/syncIn.d.ts.map +0 -1
  208. package/dist/syncIn.js +0 -107
  209. package/dist/syncIn.js.map +0 -1
  210. package/dist/syncOut.d.ts +0 -27
  211. package/dist/syncOut.d.ts.map +0 -1
  212. package/dist/syncOut.js +0 -271
  213. package/dist/syncOut.js.map +0 -1
  214. package/dist/templates.d.ts +0 -2
  215. package/dist/templates.d.ts.map +0 -1
  216. package/dist/templates.js +0 -26
  217. package/dist/templates.js.map +0 -1
  218. package/dist/terminalCleanup.d.ts +0 -30
  219. package/dist/terminalCleanup.d.ts.map +0 -1
  220. package/dist/terminalCleanup.js +0 -37
  221. package/dist/terminalCleanup.js.map +0 -1
  222. package/dist/testSandbox.d.ts +0 -8
  223. package/dist/testSandbox.d.ts.map +0 -1
  224. package/dist/testSandbox.js +0 -109
  225. package/dist/testSandbox.js.map +0 -1
  226. package/dist/testSetup.d.ts +0 -2
  227. package/dist/testSetup.d.ts.map +0 -1
  228. package/dist/testSetup.js +0 -29
  229. package/dist/testSetup.js.map +0 -1
package/dist/cli.js DELETED
@@ -1,340 +0,0 @@
1
- import { Command, Options } from "@effect/cli";
2
- import { FileSystem } from "@effect/platform";
3
- import { Effect } from "effect";
4
- import * as clack from "@clack/prompts";
5
- import { execSync } from "node:child_process";
6
- import { createRequire } from "node:module";
7
- import { join } from "node:path";
8
- import { styleText } from "node:util";
9
- import { Display } from "./Display.js";
10
- import { buildImage, removeImage } from "./DockerLifecycle.js";
11
- import { buildImage as podmanBuildImage, removeImage as podmanRemoveImage, } from "./PodmanLifecycle.js";
12
- import { scaffold, listTemplates, listAgents, getAgent, listIssueTrackers, getIssueTracker, listSandboxProviders, getSandboxProvider, getNextStepsLines, detectPackageManager, addDependencyCommand, hostHasDependency, getTemplateDependencies, } from "./InitService.js";
13
- import { defaultImageName } from "./sandboxes/docker.js";
14
- import { ConfigDirError, InitError } from "./errors.js";
15
- const require = createRequire(import.meta.url);
16
- const VERSION = require("../package.json").version;
17
- // --- Shared options ---
18
- const imageNameOption = Options.text("image-name").pipe(Options.withDescription("Docker image name"), Options.optional);
19
- const resolveImageName = (cliFlag, cwd) => (cliFlag._tag === "Some" ? cliFlag.value : defaultImageName(cwd));
20
- // --- UID build-args ---
21
- /** Build-args that align the image UID/GID to the host (Linux/macOS). No-op on Windows. */
22
- const defaultUidBuildArgs = () => {
23
- const args = {};
24
- const uid = process.getuid?.();
25
- const gid = process.getgid?.();
26
- if (uid !== undefined)
27
- args.AGENT_UID = String(uid);
28
- if (gid !== undefined)
29
- args.AGENT_GID = String(gid);
30
- return args;
31
- };
32
- // --- Config directory check ---
33
- const CONFIG_DIR = ".sandcastle";
34
- const requireConfigDir = (cwd) => Effect.gen(function* () {
35
- const fs = yield* FileSystem.FileSystem;
36
- const exists = yield* fs
37
- .exists(join(cwd, CONFIG_DIR))
38
- .pipe(Effect.catchAll(() => Effect.succeed(false)));
39
- if (!exists) {
40
- yield* Effect.fail(new ConfigDirError({
41
- message: "No .sandcastle/ found. Run `sandcastle init` first.",
42
- }));
43
- }
44
- });
45
- // --- Init command ---
46
- const templateOption = Options.text("template").pipe(Options.withDescription("Template to scaffold (e.g. blank, simple-loop, parallel-planner)"), Options.optional);
47
- const agentOption = Options.text("agent").pipe(Options.withDescription("Agent to use (e.g. claude-code)"), Options.optional);
48
- 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);
49
- const sandboxOption = Options.text("sandbox").pipe(Options.withDescription("Sandbox provider to use (e.g. docker, podman)"), Options.optional);
50
- const initCommand = Command.make("init", {
51
- imageName: imageNameOption,
52
- template: templateOption,
53
- agent: agentOption,
54
- model: initModelOption,
55
- sandbox: sandboxOption,
56
- }, ({ imageName: imageNameFlag, template, agent: agentFlag, model: modelFlag, sandbox: sandboxFlag, }) => Effect.gen(function* () {
57
- const d = yield* Display;
58
- const cwd = process.cwd();
59
- const imageName = resolveImageName(imageNameFlag, cwd);
60
- // Early validation of CLI flags before interactive prompts
61
- const templates = listTemplates();
62
- if (template._tag === "Some") {
63
- const valid = templates.find((tmpl) => tmpl.name === template.value);
64
- if (!valid) {
65
- const names = templates.map((tmpl) => tmpl.name).join(", ");
66
- yield* Effect.fail(new InitError({
67
- message: `Unknown template "${template.value}". Available: ${names}`,
68
- }));
69
- }
70
- }
71
- if (sandboxFlag._tag === "Some") {
72
- const valid = getSandboxProvider(sandboxFlag.value);
73
- if (!valid) {
74
- const names = listSandboxProviders()
75
- .map((p) => p.name)
76
- .join(", ");
77
- yield* Effect.fail(new InitError({
78
- message: `Unknown sandbox provider "${sandboxFlag.value}". Available: ${names}`,
79
- }));
80
- }
81
- }
82
- // Resolve agent: CLI flag > interactive select
83
- const agents = listAgents();
84
- let selectedAgent;
85
- if (agentFlag._tag === "Some") {
86
- const entry = getAgent(agentFlag.value);
87
- if (!entry) {
88
- const names = agents.map((a) => a.name).join(", ");
89
- yield* Effect.fail(new InitError({
90
- message: `Unknown agent "${agentFlag.value}". Available: ${names}`,
91
- }));
92
- }
93
- selectedAgent = entry;
94
- }
95
- else {
96
- const selected = yield* Effect.promise(() => clack.select({
97
- message: "Select an agent:",
98
- initialValue: "claude-code",
99
- options: agents.map((a) => ({
100
- value: a.name,
101
- label: a.label,
102
- hint: `Default model: ${a.defaultModel}`,
103
- })),
104
- }));
105
- if (clack.isCancel(selected)) {
106
- yield* Effect.fail(new InitError({ message: "Agent selection cancelled." }));
107
- }
108
- selectedAgent = getAgent(selected);
109
- }
110
- // Resolve model: CLI flag > agent default
111
- const selectedModel = modelFlag._tag === "Some"
112
- ? modelFlag.value
113
- : selectedAgent.defaultModel;
114
- // Resolve sandbox provider: CLI flag > interactive select (no default — user must choose)
115
- const sandboxProviders = listSandboxProviders();
116
- let selectedSandboxProvider;
117
- if (sandboxFlag._tag === "Some") {
118
- selectedSandboxProvider = getSandboxProvider(sandboxFlag.value);
119
- }
120
- else {
121
- const selected = yield* Effect.promise(() => clack.select({
122
- message: "Select a sandbox provider:",
123
- options: sandboxProviders.map((p) => ({
124
- value: p.name,
125
- label: p.label,
126
- })),
127
- }));
128
- if (clack.isCancel(selected)) {
129
- yield* Effect.fail(new InitError({
130
- message: "Sandbox provider selection cancelled.",
131
- }));
132
- }
133
- selectedSandboxProvider = getSandboxProvider(selected);
134
- }
135
- // Resolve issue tracker: interactive select
136
- const issueTrackers = listIssueTrackers();
137
- let selectedIssueTracker;
138
- {
139
- const selected = yield* Effect.promise(() => clack.select({
140
- message: "Select an issue tracker:",
141
- initialValue: "github-issues",
142
- options: issueTrackers.map((b) => ({
143
- value: b.name,
144
- label: b.label,
145
- })),
146
- }));
147
- if (clack.isCancel(selected)) {
148
- yield* Effect.fail(new InitError({
149
- message: "Issue tracker selection cancelled.",
150
- }));
151
- }
152
- selectedIssueTracker = getIssueTracker(selected);
153
- }
154
- // Resolve template: CLI flag > interactive select (already validated above)
155
- let selectedTemplate;
156
- if (template._tag === "Some") {
157
- selectedTemplate = template.value;
158
- }
159
- else {
160
- const selected = yield* Effect.promise(() => clack.select({
161
- message: "Select a template:",
162
- initialValue: "blank",
163
- options: templates.map((tmpl) => ({
164
- value: tmpl.name,
165
- label: tmpl.name,
166
- hint: tmpl.description,
167
- })),
168
- }));
169
- if (clack.isCancel(selected)) {
170
- yield* Effect.fail(new InitError({ message: "Template selection cancelled." }));
171
- }
172
- selectedTemplate = selected;
173
- }
174
- // Offer to create the "Sandcastle" label on the repo (skip for non-GitHub issue trackers)
175
- let shouldCreateLabel = false;
176
- if (selectedIssueTracker.name === "github-issues") {
177
- shouldCreateLabel = yield* Effect.promise(() => clack.confirm({
178
- message: 'Create a "Sandcastle" GitHub label? (Templates filter issues by this label)',
179
- initialValue: true,
180
- }));
181
- if (shouldCreateLabel === true) {
182
- yield* Effect.try({
183
- try: () => execSync('gh label create "Sandcastle" --description "Issues for Sandcastle to work on" --color "F9A825" 2>/dev/null', { cwd, stdio: "ignore" }),
184
- catch: () => undefined,
185
- }).pipe(Effect.ignore);
186
- }
187
- }
188
- const scaffoldResult = yield* d.spinner("Scaffolding .sandcastle/ config directory...", scaffold(cwd, {
189
- agent: selectedAgent,
190
- model: selectedModel,
191
- templateName: selectedTemplate,
192
- createLabel: shouldCreateLabel === true,
193
- issueTracker: selectedIssueTracker,
194
- sandboxProvider: selectedSandboxProvider,
195
- }).pipe(Effect.mapError((e) => new InitError({
196
- message: `${e instanceof Error ? e.message : e}`,
197
- }))));
198
- // Detect the host package manager so the zod offer below and the next
199
- // steps below both use the right install command.
200
- const packageManager = yield* detectPackageManager(cwd);
201
- // If the chosen template imports zod on the host (the planner templates
202
- // build their <plan> output schema with it) and the host doesn't already
203
- // declare it, offer to install it. Without this, the very first
204
- // `npx tsx .sandcastle/main.ts` crashes with ERR_MODULE_NOT_FOUND.
205
- if (getTemplateDependencies(selectedTemplate).includes("zod")) {
206
- const alreadyInstalled = yield* hostHasDependency(cwd, "zod");
207
- if (!alreadyInstalled) {
208
- const installCmd = addDependencyCommand(packageManager, "zod");
209
- const shouldInstall = yield* Effect.promise(() => clack.confirm({
210
- message: `The ${selectedTemplate} template needs a schema validator. Install zod now (\`${installCmd}\`)?`,
211
- initialValue: true,
212
- }));
213
- if (shouldInstall === true) {
214
- const installed = yield* Effect.sync(() => {
215
- try {
216
- execSync(installCmd, { cwd, stdio: "ignore" });
217
- return true;
218
- }
219
- catch {
220
- return false;
221
- }
222
- });
223
- yield* installed
224
- ? d.status(`Installed zod with ${packageManager}.`, "success")
225
- : d.status(`Couldn't install zod automatically. Run \`${installCmd}\` before running the agent.`, "warn");
226
- }
227
- }
228
- }
229
- // Prompt user before building image. The custom issue tracker scaffolds
230
- // an intentionally unfinished Dockerfile (the install block is a TODO),
231
- // so there is nothing valid to build yet — skip the build prompt entirely
232
- // and let the next steps point the user at the setup doc.
233
- const providerLabel = selectedSandboxProvider.label;
234
- if (selectedIssueTracker.name === "custom") {
235
- yield* d.status("Init complete! Your custom issue tracker isn't configured yet — see the steps below before building.", "success");
236
- }
237
- else {
238
- const shouldBuild = yield* Effect.promise(() => clack.confirm({
239
- message: `Build the default ${providerLabel} image now?`,
240
- initialValue: true,
241
- }));
242
- if (shouldBuild === true) {
243
- const containerfileDir = join(cwd, CONFIG_DIR);
244
- if (selectedSandboxProvider.name === "podman") {
245
- yield* d.spinner(`Building ${providerLabel} image '${imageName}'...`, podmanBuildImage(imageName, containerfileDir));
246
- }
247
- else {
248
- yield* d.spinner(`Building ${providerLabel} image '${imageName}'...`, buildImage(imageName, containerfileDir, {
249
- buildArgs: defaultUidBuildArgs(),
250
- }));
251
- }
252
- yield* d.status("Init complete! Image built successfully.", "success");
253
- }
254
- else {
255
- yield* d.status(`Init complete! Run \`sandcastle ${selectedSandboxProvider.cliNamespace} build-image\` to build the ${providerLabel} image later.`, "success");
256
- }
257
- }
258
- // Show template-specific next steps
259
- const nextSteps = getNextStepsLines(selectedTemplate, scaffoldResult.mainFilename, selectedIssueTracker, selectedAgent, packageManager);
260
- for (const [i, line] of nextSteps.entries()) {
261
- yield* d.text(i === 0 ? line : styleText("dim", line));
262
- }
263
- }));
264
- // --- Build-image command ---
265
- const dockerfileOption = Options.file("dockerfile").pipe(Options.withDescription("Path to a custom Dockerfile (build context will be the current working directory)"), Options.optional);
266
- const buildImageCommand = Command.make("build-image", {
267
- imageName: imageNameOption,
268
- dockerfile: dockerfileOption,
269
- }, ({ imageName: imageNameFlag, dockerfile }) => Effect.gen(function* () {
270
- const d = yield* Display;
271
- const cwd = process.cwd();
272
- yield* requireConfigDir(cwd);
273
- const imageName = resolveImageName(imageNameFlag, cwd);
274
- const dockerfileDir = join(cwd, CONFIG_DIR);
275
- const dockerfilePath = dockerfile._tag === "Some" ? dockerfile.value : undefined;
276
- yield* d.spinner(`Building Docker image '${imageName}'...`, buildImage(imageName, dockerfileDir, {
277
- dockerfile: dockerfilePath,
278
- buildArgs: defaultUidBuildArgs(),
279
- }));
280
- yield* d.status("Build complete!", "success");
281
- }));
282
- // --- Remove-image command ---
283
- const removeImageCommand = Command.make("remove-image", {
284
- imageName: imageNameOption,
285
- }, ({ imageName: imageNameFlag }) => Effect.gen(function* () {
286
- const d = yield* Display;
287
- const cwd = process.cwd();
288
- const imageName = resolveImageName(imageNameFlag, cwd);
289
- yield* d.spinner(`Removing Docker image '${imageName}'...`, removeImage(imageName));
290
- yield* d.status("Image removed.", "success");
291
- }));
292
- // --- Docker namespace command ---
293
- const dockerCommand = Command.make("docker", {}, () => Effect.gen(function* () {
294
- const d = yield* Display;
295
- yield* d.status("Docker sandbox commands. Use --help to see available subcommands.", "info");
296
- })).pipe(Command.withSubcommands([buildImageCommand, removeImageCommand]));
297
- // --- Podman build-image command ---
298
- const containerfileOption = Options.file("containerfile").pipe(Options.withDescription("Path to a custom Containerfile (build context will be the current working directory)"), Options.optional);
299
- const podmanBuildImageCommand = Command.make("build-image", {
300
- imageName: imageNameOption,
301
- containerfile: containerfileOption,
302
- }, ({ imageName: imageNameFlag, containerfile }) => Effect.gen(function* () {
303
- const d = yield* Display;
304
- const cwd = process.cwd();
305
- yield* requireConfigDir(cwd);
306
- const imageName = resolveImageName(imageNameFlag, cwd);
307
- const containerfileDir = join(cwd, CONFIG_DIR);
308
- const containerfilePath = containerfile._tag === "Some" ? containerfile.value : undefined;
309
- yield* d.spinner(`Building Podman image '${imageName}'...`, podmanBuildImage(imageName, containerfileDir, {
310
- containerfile: containerfilePath,
311
- }));
312
- yield* d.status("Build complete!", "success");
313
- }));
314
- // --- Podman remove-image command ---
315
- const podmanRemoveImageCommand = Command.make("remove-image", {
316
- imageName: imageNameOption,
317
- }, ({ imageName: imageNameFlag }) => Effect.gen(function* () {
318
- const d = yield* Display;
319
- const cwd = process.cwd();
320
- const imageName = resolveImageName(imageNameFlag, cwd);
321
- yield* d.spinner(`Removing Podman image '${imageName}'...`, podmanRemoveImage(imageName));
322
- yield* d.status("Image removed.", "success");
323
- }));
324
- // --- Podman namespace command ---
325
- const podmanCommand = Command.make("podman", {}, () => Effect.gen(function* () {
326
- const d = yield* Display;
327
- yield* d.status("Podman sandbox commands. Use --help to see available subcommands.", "info");
328
- })).pipe(Command.withSubcommands([podmanBuildImageCommand, podmanRemoveImageCommand]));
329
- // --- Root command ---
330
- const rootCommand = Command.make("sandcastle", {}, () => Effect.gen(function* () {
331
- const d = yield* Display;
332
- yield* d.status(`Sandcastle v${VERSION}`, "info");
333
- yield* d.status("Use --help to see available commands.", "info");
334
- }));
335
- export const sandcastle = rootCommand.pipe(Command.withSubcommands([initCommand, dockerCommand, podmanCommand]));
336
- export const cli = Command.run(sandcastle, {
337
- name: "sandcastle",
338
- version: VERSION,
339
- });
340
- //# sourceMappingURL=cli.js.map
package/dist/cli.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,154 +0,0 @@
1
- import { Layer } from "effect";
2
- import type { AgentProvider } from "./AgentProvider.js";
3
- import { type IterationResult } from "./Orchestrator.js";
4
- import { type PromptArgs } from "./PromptArgumentSubstitution.js";
5
- import type { LoggingOption, Timeouts } from "./run.js";
6
- import { type SandboxHooks } from "./SandboxLifecycle.js";
7
- import { Sandbox as SandboxTag } from "./SandboxFactory.js";
8
- import type { SandboxProvider } from "./SandboxProvider.js";
9
- export interface CreateSandboxOptions {
10
- /** Explicit branch for the worktree (required). */
11
- readonly branch: string;
12
- /**
13
- * Ref to fork from when `branch` does not yet exist. Ignored when the branch
14
- * already exists. Defaults to `HEAD`.
15
- */
16
- readonly baseBranch?: string;
17
- /** Sandbox provider (e.g. docker({ imageName: "sandcastle:myrepo" })). */
18
- readonly sandbox: SandboxProvider;
19
- /**
20
- * Host repo directory. Replaces `process.cwd()` as the anchor for
21
- * `.sandcastle/worktrees/`, `.sandcastle/.env`, and git operations.
22
- *
23
- * - Relative paths are resolved against `process.cwd()`.
24
- * - Absolute paths are used as-is.
25
- * - Defaults to `process.cwd()` when omitted.
26
- */
27
- readonly cwd?: string;
28
- /** Lifecycle hooks grouped by execution location (host or sandbox). */
29
- readonly hooks?: SandboxHooks;
30
- /** Paths relative to the host repo root to copy into the worktree at creation time. */
31
- readonly copyToWorktree?: string[];
32
- /** Override default timeouts for built-in lifecycle steps. Unset keys keep their defaults. */
33
- readonly timeouts?: Timeouts;
34
- /** @internal Test-only overrides to bypass the sandbox provider. */
35
- readonly _test?: {
36
- readonly buildSandboxLayer?: (sandboxDir: string) => Layer.Layer<SandboxTag>;
37
- };
38
- }
39
- export interface SandboxRunOptions {
40
- /** Agent provider to use (e.g. claudeCode("claude-opus-4-7")). */
41
- readonly agent: AgentProvider;
42
- /** Inline prompt string (mutually exclusive with promptFile). */
43
- readonly prompt?: string;
44
- /** Path to a prompt file (mutually exclusive with prompt). */
45
- readonly promptFile?: string;
46
- /** Key-value map for {{KEY}} placeholder substitution in prompts. */
47
- readonly promptArgs?: PromptArgs;
48
- /** Maximum iterations to run (default: 1). */
49
- readonly maxIterations?: number;
50
- /** Substring(s) the agent emits to stop the iteration loop early. */
51
- readonly completionSignal?: string | string[];
52
- /** Idle timeout in seconds. Default: 600. */
53
- readonly idleTimeoutSeconds?: number;
54
- /** Display name for this run. */
55
- readonly name?: string;
56
- /** Logging mode. */
57
- readonly logging?: LoggingOption;
58
- /**
59
- * An `AbortSignal` that cancels the run when aborted.
60
- *
61
- * - Pre-aborted signal rejects immediately without setup.
62
- * - Mid-iteration abort kills the in-flight agent subprocess.
63
- * - The rejected promise surfaces `signal.reason` verbatim.
64
- * - The `Sandbox` handle remains usable after abort — call `.run()` again
65
- * with a fresh signal, or `.close()` to tear down.
66
- */
67
- readonly signal?: AbortSignal;
68
- }
69
- export interface SandboxRunResult {
70
- /** Per-iteration results (use `iterations.length` for the count). */
71
- readonly iterations: IterationResult[];
72
- /** The matched completion signal string, or undefined if none fired. */
73
- readonly completionSignal?: string;
74
- /** Combined stdout output from all agent iterations. */
75
- readonly stdout: string;
76
- /** List of commits made by the agent during the run. */
77
- readonly commits: {
78
- sha: string;
79
- }[];
80
- /** Path to the log file, if logging was drained to a file. */
81
- readonly logFilePath?: string;
82
- }
83
- export interface SandboxInteractiveOptions {
84
- /** Agent provider to use (e.g. claudeCode("claude-opus-4-7")). */
85
- readonly agent: AgentProvider;
86
- /** Inline prompt string (mutually exclusive with promptFile). */
87
- readonly prompt?: string;
88
- /** Path to a prompt file (mutually exclusive with prompt). */
89
- readonly promptFile?: string;
90
- /** Key-value map for {{KEY}} placeholder substitution in prompts. */
91
- readonly promptArgs?: PromptArgs;
92
- /** Display name for this interactive session. */
93
- readonly name?: string;
94
- /**
95
- * An `AbortSignal` that cancels the interactive session when aborted.
96
- *
97
- * - Pre-aborted signal rejects immediately without setup.
98
- * - The rejected promise surfaces `signal.reason` verbatim.
99
- * - The `Sandbox` handle remains usable after abort.
100
- */
101
- readonly signal?: AbortSignal;
102
- }
103
- export interface SandboxInteractiveResult {
104
- /** List of commits made during the interactive session. */
105
- readonly commits: {
106
- sha: string;
107
- }[];
108
- /** Exit code of the interactive process. */
109
- readonly exitCode: number;
110
- }
111
- export interface CloseResult {
112
- /** Host path to the preserved worktree, set when the worktree had uncommitted changes. */
113
- readonly preservedWorktreePath?: string;
114
- }
115
- export interface Sandbox {
116
- /** The branch the worktree is on. */
117
- readonly branch: string;
118
- /** Host path to the worktree. */
119
- readonly worktreePath: string;
120
- /** Invoke an agent inside the existing sandbox. */
121
- run(options: SandboxRunOptions): Promise<SandboxRunResult>;
122
- /** Launch an interactive agent session inside the existing sandbox. */
123
- interactive(options: SandboxInteractiveOptions): Promise<SandboxInteractiveResult>;
124
- /** Tear down the sandbox and worktree. */
125
- close(): Promise<CloseResult>;
126
- /** Auto teardown via `await using`. */
127
- [Symbol.asyncDispose](): Promise<void>;
128
- }
129
- /** @internal Options for createSandboxFromWorktree — used by worktree.createSandbox(). */
130
- export interface CreateSandboxFromWorktreeOptions {
131
- readonly branch: string;
132
- readonly worktreePath: string;
133
- readonly hostRepoDir: string;
134
- readonly sandbox: SandboxProvider;
135
- readonly hooks?: SandboxHooks;
136
- readonly copyToWorktree?: string[];
137
- readonly timeouts?: Timeouts;
138
- readonly _test?: {
139
- readonly buildSandboxLayer?: (sandboxDir: string) => Layer.Layer<SandboxTag>;
140
- };
141
- }
142
- /**
143
- * @internal Creates a sandbox backed by an existing worktree.
144
- * Split ownership: close() tears down the container only, leaving the worktree intact.
145
- * Used by Worktree.createSandbox().
146
- */
147
- export declare const createSandboxFromWorktree: (options: CreateSandboxFromWorktreeOptions) => Promise<Sandbox>;
148
- /**
149
- * Eagerly creates a git worktree on the provided explicit branch and starts
150
- * a sandbox with the worktree bind-mounted. Returns a Sandbox handle that
151
- * can be reused across multiple `run()` calls.
152
- */
153
- export declare const createSandbox: (options: CreateSandboxOptions) => Promise<Sandbox>;
154
- //# sourceMappingURL=createSandbox.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createSandbox.d.ts","sourceRoot":"","sources":["../src/createSandbox.ts"],"names":[],"mappings":"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"}