@snappedly-tools/shipyard 0.5.0 → 0.7.0-staging.36081473933
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 +64 -117
- package/dist/MountConfig-BHnKnA4h.d.ts +145 -0
- package/dist/{chunk-WAXEMZUV.js → chunk-44I2BL6E.js} +225 -33
- package/dist/chunk-44I2BL6E.js.map +1 -0
- package/dist/{chunk-56TDSWFU.js → chunk-JI3HDDMS.js} +3 -3
- package/dist/{chunk-56TDSWFU.js.map → chunk-JI3HDDMS.js.map} +1 -1
- package/dist/{chunk-FDYOTN55.js → chunk-L6PX5QTU.js} +253 -878
- package/dist/chunk-L6PX5QTU.js.map +1 -0
- package/dist/index.d.ts +117 -97
- package/dist/index.js +349 -353
- package/dist/index.js.map +1 -1
- package/dist/main.js +285 -153
- package/dist/main.js.map +1 -1
- package/dist/sandboxes/docker.d.ts +1 -3
- package/dist/sandboxes/docker.js +2 -4
- package/dist/templates/parallel-planner/block-scope.sh +160 -0
- package/dist/templates/parallel-planner/conflict-prompt.md +22 -0
- package/dist/templates/parallel-planner/handoff.sh +175 -0
- package/dist/templates/parallel-planner/implement-prompt.md +10 -56
- package/dist/templates/parallel-planner/main.mts +493 -189
- package/dist/templates/parallel-planner/merge-prompt.md +9 -21
- package/dist/templates/parallel-planner/plan-prompt.md +5 -31
- package/dist/templates/parallel-planner/planner-branch.mts +151 -0
- package/dist/templates/parallel-planner/select-issues.mjs +788 -0
- package/dist/templates/parallel-planner/setup.sh +51 -0
- package/dist/templates/parallel-planner/spec-wave-prompt.md +16 -0
- package/dist/templates/parallel-planner/template.json +1 -1
- package/dist/templates/parallel-planner/triage-prompt.md +5 -0
- package/dist/templates/parallel-planner/verify-triage.sh +19 -0
- package/dist/templates/parallel-planner-with-review/block-scope.sh +160 -0
- package/dist/templates/parallel-planner-with-review/conflict-prompt.md +22 -0
- package/dist/templates/parallel-planner-with-review/handoff.sh +175 -0
- package/dist/templates/parallel-planner-with-review/implement-prompt.md +10 -56
- package/dist/templates/parallel-planner-with-review/main.mts +533 -207
- package/dist/templates/parallel-planner-with-review/merge-prompt.md +9 -21
- package/dist/templates/parallel-planner-with-review/plan-prompt.md +5 -31
- package/dist/templates/parallel-planner-with-review/planner-branch.mts +151 -0
- package/dist/templates/parallel-planner-with-review/review-prompt.md +11 -49
- package/dist/templates/parallel-planner-with-review/select-issues.mjs +788 -0
- package/dist/templates/parallel-planner-with-review/setup.sh +51 -0
- package/dist/templates/parallel-planner-with-review/spec-wave-prompt.md +16 -0
- package/dist/templates/parallel-planner-with-review/template.json +1 -1
- package/dist/templates/parallel-planner-with-review/triage-prompt.md +5 -0
- package/dist/templates/parallel-planner-with-review/verify-triage.sh +19 -0
- package/dist/templates/sequential-reviewer/block-scope.sh +160 -0
- package/dist/templates/sequential-reviewer/handoff.sh +175 -0
- package/dist/templates/sequential-reviewer/implement-prompt.md +12 -46
- package/dist/templates/sequential-reviewer/main.mts +248 -103
- package/dist/templates/sequential-reviewer/review-prompt.md +11 -49
- package/dist/templates/sequential-reviewer/select-issues.mjs +788 -0
- package/dist/templates/sequential-reviewer/setup.sh +51 -0
- package/dist/templates/sequential-reviewer/template.json +1 -1
- package/dist/templates/sequential-reviewer/triage-prompt.md +5 -0
- package/dist/templates/sequential-reviewer/verify-triage.sh +19 -0
- package/dist/templates/shared/block-scope.sh +160 -0
- package/dist/templates/shared/handoff.sh +175 -0
- package/dist/templates/shared/select-issues.mjs +788 -0
- package/dist/templates/shared/setup.sh +51 -0
- package/dist/templates/shared/triage-prompt.md +5 -0
- package/dist/templates/shared/verify-triage.sh +19 -0
- package/dist/templates/simple-loop/block-scope.sh +160 -0
- package/dist/templates/simple-loop/handoff.sh +175 -0
- package/dist/templates/simple-loop/main.mts +239 -45
- package/dist/templates/simple-loop/prompt.md +12 -46
- package/dist/templates/simple-loop/select-issues.mjs +788 -0
- package/dist/templates/simple-loop/setup.sh +51 -0
- package/dist/templates/simple-loop/template.json +1 -1
- package/dist/templates/simple-loop/triage-prompt.md +5 -0
- package/dist/templates/simple-loop/verify-triage.sh +19 -0
- package/package.json +1 -17
- package/dist/MountConfig-bZoCs4Dd.d.ts +0 -26
- package/dist/SandboxProvider-XJQqEdSf.d.ts +0 -261
- package/dist/chunk-ACD46ZM4.js +0 -136
- package/dist/chunk-ACD46ZM4.js.map +0 -1
- package/dist/chunk-FDYOTN55.js.map +0 -1
- package/dist/chunk-KMGNFXKN.js +0 -38
- package/dist/chunk-KMGNFXKN.js.map +0 -1
- package/dist/chunk-SOJTAJTF.js +0 -78
- package/dist/chunk-SOJTAJTF.js.map +0 -1
- package/dist/chunk-WAXEMZUV.js.map +0 -1
- package/dist/sandboxes/no-sandbox.d.ts +0 -37
- package/dist/sandboxes/no-sandbox.js +0 -4
- package/dist/sandboxes/no-sandbox.js.map +0 -1
- package/dist/sandboxes/vercel.d.ts +0 -104
- package/dist/sandboxes/vercel.js +0 -166
- package/dist/sandboxes/vercel.js.map +0 -1
- package/dist/templates/blank/main.mts +0 -13
- package/dist/templates/blank/prompt.md +0 -12
- package/dist/templates/blank/template.json +0 -4
package/README.md
CHANGED
|
@@ -8,153 +8,100 @@
|
|
|
8
8
|
|
|
9
9
|
[](https://github.com/snappedly/shipyard/actions/workflows/ci.yml)
|
|
10
10
|
|
|
11
|
-
Give Shipyard a
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
Give Shipyard a task or a GitHub issue. It runs Codex or Claude Code in an
|
|
12
|
+
isolated sandbox, can plan and review larger jobs, and brings the result back as
|
|
13
|
+
a commit or pull request you can inspect.
|
|
14
14
|
|
|
15
15
|
## The Shipyard advantage
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
- **Isolated work.** Docker keeps the agent's files and Git work inside a
|
|
18
|
+
sandbox while it runs.
|
|
19
|
+
- **Built for real projects.** Shipyard can sort issue dependencies, work on
|
|
20
|
+
independent tasks in parallel, and review the combined result.
|
|
21
|
+
- **You stay in control.** Runs have limits and logs. Issue workflows return a
|
|
22
|
+
pull request for you to review and merge.
|
|
19
23
|
|
|
20
|
-
|
|
21
|
-
sandbox with explicit mounts, credentials, and network access.
|
|
22
|
-
- **Real orchestration:** Plan dependencies, parallelize safe work, leave
|
|
23
|
-
blocked work alone, review each branch, and merge completed work.
|
|
24
|
-
- **Failure-aware by design:** Use finite budgets, no-progress detection,
|
|
25
|
-
cancellation, logs, and recovery artifacts instead of runaway loops.
|
|
26
|
-
- **Reviewable output:** Runs preserve branches, worktrees, logs, and evidence;
|
|
27
|
-
completed work comes back as commits. You keep control of the repository and
|
|
28
|
-
the final release.
|
|
24
|
+
## Try it on one task
|
|
29
25
|
|
|
30
|
-
|
|
26
|
+
You need **Node.js 20.18.1+**, **Git**, **Docker running**, and **Codex or Claude Code**
|
|
27
|
+
with a subscription login or API key.
|
|
31
28
|
|
|
32
|
-
|
|
33
|
-
agent. Run these commands in the repository Shipyard should change:
|
|
29
|
+
Run:
|
|
34
30
|
|
|
35
31
|
```sh
|
|
36
|
-
|
|
37
|
-
npx shipyard init
|
|
32
|
+
npx skills add snappedly/skills
|
|
38
33
|
```
|
|
39
34
|
|
|
40
|
-
|
|
41
|
-
template, then creates `.shipyard/`. For the first run, choose Docker and
|
|
42
|
-
`blank` or `sequential-reviewer`.
|
|
43
|
-
|
|
44
|
-
Add the requested credentials to `.shipyard/.env`, write a task in
|
|
45
|
-
`.shipyard/prompt.md` when using the `blank` template, then run:
|
|
35
|
+
Ask your coding agent to run `setup-snappedly-skills` in that repository.
|
|
46
36
|
|
|
47
37
|
```sh
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
The first run builds the Docker image automatically. Reuse it when the
|
|
52
|
-
Dockerfile has not changed:
|
|
53
|
-
|
|
54
|
-
```sh
|
|
55
|
-
npx shipyard run --skip-build
|
|
38
|
+
npm install --save-dev @snappedly-tools/shipyard
|
|
39
|
+
npx shipyard init
|
|
56
40
|
```
|
|
57
41
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
the
|
|
61
|
-
|
|
62
|
-
## Pick the workflow you need
|
|
42
|
+
During `shipyard init`, choose your agent, **Docker**, the template you want, and install the optional
|
|
43
|
+
[repository runner](docs/content/docs/repository-runner.mdx). Follow
|
|
44
|
+
the authentication prompts.
|
|
63
45
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
| `blank` | One custom task | One agent run |
|
|
67
|
-
| `simple-loop` | A small issue backlog | Implement issues sequentially |
|
|
68
|
-
| `sequential-reviewer` | Safer issue delivery | Implement → review, one issue at a time |
|
|
69
|
-
| `parallel-planner` | Independent issues | Plan dependencies → implement in parallel → merge |
|
|
70
|
-
| `parallel-planner-with-review` | Maximum autonomy | Plan → implement and review in parallel → merge |
|
|
46
|
+
On a local Mac, the repository runner automatically wakes Shipyard when you label an issue.
|
|
47
|
+
It runs as long as its terminal stays open.
|
|
71
48
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
`.shipyard/main.mts`.
|
|
49
|
+
See the [getting started guide](docs/content/docs/index.mdx) for authentication and
|
|
50
|
+
branch options.
|
|
75
51
|
|
|
76
|
-
|
|
52
|
+
Fill in any credentials required in `.shipyard/.env`.
|
|
53
|
+
`GH_TOKEN` in `.shipyard/.env` to a GH token with Contents, Issues, and Pull
|
|
54
|
+
Requests read/write access and Metadata read access.
|
|
55
|
+
Set `SHIPYARD_ROUTINE_MODEL` and `SHIPYARD_STRONG_MODEL` in `.shipyard/.env`
|
|
56
|
+
for the roles your template uses. `simple-loop` uses routine for triage and
|
|
57
|
+
implementation. `sequential-reviewer` also uses strong for issue reviews.
|
|
58
|
+
Parallel planner templates use routine for ticket work and strong for planning,
|
|
59
|
+
conflict resolution, and integration. The review-enabled planner also uses
|
|
60
|
+
strong for ticket and final specification reviews. See
|
|
61
|
+
[agent setup](docs/content/docs/agents.mdx).
|
|
77
62
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
controller wakes, drains a finite batch of eligible work, coalesces duplicate
|
|
81
|
-
wake-ups, and stops when it makes no progress. Restarting it recovers work
|
|
82
|
-
labelled while the host was offline.
|
|
83
|
-
|
|
84
|
-
Accept runner installation during `init`, or install it later:
|
|
63
|
+
Commit the setup and prompt so the sandbox can read them. Make sure the Git ignore file keeps
|
|
64
|
+
`.shipyard/.env` out of the commit.
|
|
85
65
|
|
|
86
66
|
```sh
|
|
87
|
-
npx shipyard
|
|
88
|
-
git add .github/workflows/shipyard-wake.yml .shipyard/.gitignore
|
|
89
|
-
git commit -m "Add Shipyard wake workflow"
|
|
90
|
-
git push
|
|
91
|
-
npx shipyard runner start
|
|
67
|
+
npx shipyard run
|
|
92
68
|
```
|
|
93
69
|
|
|
94
|
-
|
|
95
|
-
root-level `.log` file under `.shipyard/logs/`. Shipyard automatically removes
|
|
96
|
-
entries older than eight days before `shipyard run`, at runner startup, and
|
|
97
|
-
daily while the runner stays active. Use a path outside `.shipyard/logs/` for
|
|
98
|
-
logs that must be retained separately.
|
|
99
|
-
|
|
100
|
-
See the [repository runner guide](docs/content/docs/repository-runner.mdx) for
|
|
101
|
-
requirements, lifecycle commands, and the security model.
|
|
102
|
-
|
|
103
|
-
## Build your own coordinator
|
|
104
|
-
|
|
105
|
-
Shipyard is also a TypeScript library. Compose your own workflow with
|
|
106
|
-
`run()`, `createSandbox()`, and `createWorktree()` while reusing its agent,
|
|
107
|
-
sandbox, branch, prompt, logging, cancellation, and session primitives.
|
|
70
|
+
Or for the automated runner:
|
|
108
71
|
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
import { docker } from "@snappedly-tools/shipyard/sandboxes/docker";
|
|
112
|
-
|
|
113
|
-
await run({
|
|
114
|
-
agent: codex(CODEX_MODELS.routine),
|
|
115
|
-
sandbox: docker(),
|
|
116
|
-
promptFile: ".shipyard/prompt.md",
|
|
117
|
-
});
|
|
72
|
+
```sh
|
|
73
|
+
npx shipyard runner start
|
|
118
74
|
```
|
|
119
75
|
|
|
120
|
-
|
|
121
|
-
execution; `noSandbox()` is available only for trusted repositories and prompts.
|
|
76
|
+
## Turn GitHub issues into pull requests
|
|
122
77
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
```text
|
|
126
|
-
.shipyard/
|
|
127
|
-
├── main.ts or main.mts # workflow configuration
|
|
128
|
-
├── prompt.md # task or issue instructions
|
|
129
|
-
├── Dockerfile # sandbox image definition
|
|
130
|
-
├── .env # untracked credentials
|
|
131
|
-
├── logs/ # run logs
|
|
132
|
-
├── worktrees/ # isolated branch worktrees
|
|
133
|
-
└── patches/ # recovery artifacts
|
|
134
|
-
```
|
|
78
|
+
Then:
|
|
135
79
|
|
|
136
|
-
|
|
80
|
+
1. Write an issue with a clear goal and add the `shipyard` and
|
|
81
|
+
`ready-for-agent` labels.
|
|
82
|
+
2. Make sure the runner is running, or start `npx shipyard run`. Shipyard checks the issue, implements it in Docker,
|
|
83
|
+
reviews the work, and opens a pull request.
|
|
84
|
+
3. Inspect the pull request and merge it when you are happy with the result.
|
|
137
85
|
|
|
138
|
-
|
|
139
|
-
default. It is not a magic security boundary: mounts, credentials, devices,
|
|
140
|
-
network access, host hooks, and `noSandbox()` can expand what an agent can do.
|
|
141
|
-
Use least-privilege credentials and review generated configuration before
|
|
142
|
-
running untrusted code. Read the [security evaluation](docs/security-evaluation.md)
|
|
143
|
-
and [SECURITY.md](SECURITY.md).
|
|
86
|
+
## Choose a workflow
|
|
144
87
|
|
|
145
|
-
|
|
146
|
-
|
|
88
|
+
| Template | What it does |
|
|
89
|
+
| ------------------------------ | -------------------------------------------------- |
|
|
90
|
+
| `simple-loop` | Works through labeled issues one at a time. |
|
|
91
|
+
| `sequential-reviewer` | Implements and reviews issues before PR handoff. |
|
|
92
|
+
| `parallel-planner` | Plans and works on independent issues in parallel. |
|
|
93
|
+
| `parallel-planner-with-review` | Adds review to the parallel workflow. |
|
|
147
94
|
|
|
148
|
-
|
|
95
|
+
Shipyard also exports TypeScript APIs for custom workflows. Configure prompts,
|
|
96
|
+
branches, limits, and hooks in the generated `.shipyard/main.ts` or
|
|
97
|
+
`.shipyard/main.mts`. See [configuration](docs/content/docs/configuration.mdx)
|
|
98
|
+
and [agent setup](docs/content/docs/agents.mdx).
|
|
149
99
|
|
|
150
|
-
|
|
151
|
-
- [Configuration](docs/content/docs/configuration.mdx)
|
|
152
|
-
- [Repository runner operations](docs/runbooks/repository-runner-macos-validation.md)
|
|
153
|
-
- [Contributing](CONTRIBUTING.md)
|
|
100
|
+
## Safety and license
|
|
154
101
|
|
|
155
|
-
|
|
102
|
+
Shipyard runs on your machine or infrastructure. Sandbox access depends on the
|
|
103
|
+
mounts, credentials, and network settings you choose. Read the
|
|
104
|
+
[security guide](docs/security-evaluation.md) before using untrusted code.
|
|
156
105
|
|
|
157
|
-
Shipyard is source-available under the
|
|
158
|
-
|
|
159
|
-
noncommercial use; the license does not permit redistribution, modification, or
|
|
160
|
-
derivative works. Contact Snappedly to request a commercial license.
|
|
106
|
+
Shipyard is source-available under the [PolyForm Strict License 1.0.0](LICENSE)
|
|
107
|
+
for permitted noncommercial use. Contact Snappedly for a commercial license.
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/** Result of executing a command inside a sandbox. */
|
|
2
|
+
interface ExecResult {
|
|
3
|
+
/** Collected standard output. */
|
|
4
|
+
readonly stdout: string;
|
|
5
|
+
/** Collected standard error. */
|
|
6
|
+
readonly stderr: string;
|
|
7
|
+
/** Process exit status. */
|
|
8
|
+
readonly exitCode: number;
|
|
9
|
+
}
|
|
10
|
+
/** Streams supplied when launching an interactive agent process. */
|
|
11
|
+
interface InteractiveExecOptions {
|
|
12
|
+
/** Input stream forwarded to the agent process. */
|
|
13
|
+
readonly stdin: NodeJS.ReadableStream;
|
|
14
|
+
/** Output stream receiving agent standard output. */
|
|
15
|
+
readonly stdout: NodeJS.WritableStream;
|
|
16
|
+
/** Output stream receiving agent standard error. */
|
|
17
|
+
readonly stderr: NodeJS.WritableStream;
|
|
18
|
+
/** Working directory inside Docker. */
|
|
19
|
+
readonly cwd?: string;
|
|
20
|
+
/** Abort signal that terminates the interactive process. */
|
|
21
|
+
readonly signal?: AbortSignal;
|
|
22
|
+
}
|
|
23
|
+
/** Handle to a running isolated sandbox. Docker implements this contract. */
|
|
24
|
+
interface IsolatedSandboxHandle {
|
|
25
|
+
/** Absolute Git workspace path inside Docker. */
|
|
26
|
+
readonly worktreePath: string;
|
|
27
|
+
/**
|
|
28
|
+
* Execute a command in Docker. Deliver `onLine` as output arrives so idle
|
|
29
|
+
* timeouts and live feedback work; buffered delivery does not satisfy this
|
|
30
|
+
* contract. Pipe `stdin` to the child rather than passing it as an argument.
|
|
31
|
+
*/
|
|
32
|
+
exec(command: string, options?: {
|
|
33
|
+
/** Live output callback. */
|
|
34
|
+
onLine?: (line: string) => void;
|
|
35
|
+
/** Working directory inside Docker. */
|
|
36
|
+
cwd?: string;
|
|
37
|
+
/** Execute as root when supported. */
|
|
38
|
+
sudo?: boolean;
|
|
39
|
+
/** Input piped to the child process. */
|
|
40
|
+
stdin?: string;
|
|
41
|
+
/** Abort signal that terminates the command. */
|
|
42
|
+
signal?: AbortSignal;
|
|
43
|
+
/** Maximum combined output bytes before termination. */
|
|
44
|
+
maxOutputBytes?: number;
|
|
45
|
+
}): Promise<ExecResult>;
|
|
46
|
+
/** Launch an interactive process and terminate it when `signal` aborts. */
|
|
47
|
+
interactiveExec?(args: string[], options: InteractiveExecOptions): Promise<{
|
|
48
|
+
exitCode: number;
|
|
49
|
+
}>;
|
|
50
|
+
/** Copy a file or directory from the host into Docker. */
|
|
51
|
+
copyIn(hostPath: string, sandboxPath: string): Promise<void>;
|
|
52
|
+
/** Copy a file from Docker to the host. */
|
|
53
|
+
copyFileOut(sandboxPath: string, hostPath: string): Promise<void>;
|
|
54
|
+
/** Tear down the container. */
|
|
55
|
+
close(): Promise<void>;
|
|
56
|
+
}
|
|
57
|
+
/** File transfer shape used by agent session storage. */
|
|
58
|
+
interface SessionTransferHandle {
|
|
59
|
+
/** Absolute Git workspace path inside Docker. */
|
|
60
|
+
readonly worktreePath: string;
|
|
61
|
+
/** Run a command in the sandbox. */
|
|
62
|
+
exec: IsolatedSandboxHandle["exec"];
|
|
63
|
+
/** Launch an interactive command when available. */
|
|
64
|
+
interactiveExec?: IsolatedSandboxHandle["interactiveExec"];
|
|
65
|
+
/** Copy one host file into the sandbox. */
|
|
66
|
+
copyFileIn(hostPath: string, sandboxPath: string): Promise<void>;
|
|
67
|
+
/** Copy one sandbox file to the host. */
|
|
68
|
+
copyFileOut(sandboxPath: string, hostPath: string): Promise<void>;
|
|
69
|
+
/** Tear down the sandbox. */
|
|
70
|
+
close(): Promise<void>;
|
|
71
|
+
}
|
|
72
|
+
/** Inputs to Docker sandbox creation. */
|
|
73
|
+
interface IsolatedCreateOptions {
|
|
74
|
+
/** Original repository path used to derive the image name; never mounted. */
|
|
75
|
+
readonly hostRepoPath?: string;
|
|
76
|
+
/** Environment injected into the Docker container. */
|
|
77
|
+
readonly env: Record<string, string>;
|
|
78
|
+
}
|
|
79
|
+
/** Configuration for the isolated Docker provider contract. */
|
|
80
|
+
interface IsolatedSandboxProviderConfig {
|
|
81
|
+
/** Human-readable provider name. */
|
|
82
|
+
readonly name: string;
|
|
83
|
+
/** Provider environment merged into sandbox startup. */
|
|
84
|
+
readonly env?: Record<string, string>;
|
|
85
|
+
/** Start a sandbox and return its command and file-transfer handle. */
|
|
86
|
+
readonly create: (options: IsolatedCreateOptions) => Promise<IsolatedSandboxHandle>;
|
|
87
|
+
}
|
|
88
|
+
/** Docker's isolated filesystem provider contract. */
|
|
89
|
+
interface IsolatedSandboxProvider {
|
|
90
|
+
/** Isolated filesystem discriminator. */
|
|
91
|
+
readonly tag: "isolated";
|
|
92
|
+
/** Human-readable provider name. */
|
|
93
|
+
readonly name: string;
|
|
94
|
+
/** Environment variables injected into Docker. */
|
|
95
|
+
readonly env: Record<string, string>;
|
|
96
|
+
/** Start a sandbox. */
|
|
97
|
+
readonly create: (options: IsolatedCreateOptions) => Promise<IsolatedSandboxHandle>;
|
|
98
|
+
}
|
|
99
|
+
/** Provider accepted by Shipyard's Docker execution path. */
|
|
100
|
+
type SandboxProvider = IsolatedSandboxProvider;
|
|
101
|
+
/** Create a temporary branch and merge its commits back to host HEAD. */
|
|
102
|
+
interface MergeToHeadBranchStrategy {
|
|
103
|
+
/** Branch strategy discriminator. */
|
|
104
|
+
readonly type: "merge-to-head";
|
|
105
|
+
}
|
|
106
|
+
/** Run on a caller-named branch. */
|
|
107
|
+
interface NamedBranchStrategy {
|
|
108
|
+
/** Branch strategy discriminator. */
|
|
109
|
+
readonly type: "branch";
|
|
110
|
+
/** Branch to create or reuse. */
|
|
111
|
+
readonly branch: string;
|
|
112
|
+
/** Starting ref for a new branch. */
|
|
113
|
+
readonly baseBranch?: string;
|
|
114
|
+
}
|
|
115
|
+
/** Supported Docker branch strategies. */
|
|
116
|
+
type BranchStrategy = MergeToHeadBranchStrategy | NamedBranchStrategy;
|
|
117
|
+
/** Construct the isolated provider contract used by Docker. */
|
|
118
|
+
declare const createIsolatedSandboxProvider: (config: IsolatedSandboxProviderConfig) => IsolatedSandboxProvider;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* User-facing mount configuration for Docker.
|
|
122
|
+
*
|
|
123
|
+
* Each entry describes a host directory to mount into the sandbox container.
|
|
124
|
+
*/
|
|
125
|
+
/** A single bind-mount descriptor for the Docker provider. */
|
|
126
|
+
interface MountConfig {
|
|
127
|
+
/**
|
|
128
|
+
* Path on the host. Supports:
|
|
129
|
+
* - Absolute paths (`/data/cache`)
|
|
130
|
+
* - Tilde-expanded paths (`~/data` → `<home>/data`)
|
|
131
|
+
* - Relative paths (`data` or `./data`) — resolved from `process.cwd()`
|
|
132
|
+
*/
|
|
133
|
+
readonly hostPath: string;
|
|
134
|
+
/**
|
|
135
|
+
* Path inside the sandbox container. Supports:
|
|
136
|
+
* - Absolute paths (`/mnt/data`)
|
|
137
|
+
* - Tilde-expanded paths (`~/.npm` → `/home/agent/.npm`) — expanded using the provider's sandbox home directory
|
|
138
|
+
* - Relative paths (`data` or `./data`) — resolved from the worktree directory (`/home/agent/workspace`)
|
|
139
|
+
*/
|
|
140
|
+
readonly sandboxPath: string;
|
|
141
|
+
/** Mount as read-only. Defaults to `false`. */
|
|
142
|
+
readonly readonly?: boolean;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export { type BranchStrategy as B, type ExecResult as E, type IsolatedSandboxProvider as I, type MountConfig as M, type NamedBranchStrategy as N, type SessionTransferHandle as S, type SandboxProvider as a, type MergeToHeadBranchStrategy as b, type InteractiveExecOptions as c, type IsolatedCreateOptions as d, type IsolatedSandboxHandle as e, type IsolatedSandboxProviderConfig as f, createIsolatedSandboxProvider as g };
|