@clipboard-health/groundcrew 1.2.0 → 1.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 +65 -28
- package/clearance-allow-hosts +6 -4
- package/configExample.ts +16 -0
- package/package.json +1 -1
- package/src/cli.js +7 -0
- package/src/cli.js.map +1 -1
- package/src/commands/dispatcher.js +7 -2
- package/src/commands/dispatcher.js.map +1 -1
- package/src/commands/setupWorkspace.d.ts +2 -1
- package/src/commands/setupWorkspace.js +80 -8
- package/src/commands/setupWorkspace.js.map +1 -1
- package/src/commands/spriteSetup.d.ts +31 -0
- package/src/commands/spriteSetup.js +573 -0
- package/src/commands/spriteSetup.js.map +1 -0
- package/src/index.d.ts +2 -1
- package/src/index.js +1 -0
- package/src/index.js.map +1 -1
- package/src/lib/boardSource.d.ts +5 -1
- package/src/lib/boardSource.js +28 -26
- package/src/lib/boardSource.js.map +1 -1
- package/src/lib/config.d.ts +20 -0
- package/src/lib/config.js +74 -2
- package/src/lib/config.js.map +1 -1
- package/src/lib/launchCommand.d.ts +11 -7
- package/src/lib/launchCommand.js +47 -10
- package/src/lib/launchCommand.js.map +1 -1
- package/src/lib/worktrees.d.ts +8 -2
- package/src/lib/worktrees.js +189 -8
- package/src/lib/worktrees.js.map +1 -1
package/README.md
CHANGED
|
@@ -78,7 +78,35 @@ This installs the `crew` binary. `@clipboard-health/clearance` is pulled in tran
|
|
|
78
78
|
|
|
79
79
|
Watch `${XDG_CACHE_HOME:-$HOME/.cache}/clearance/clearance.log` for `DENY` lines and add only the domains your agents actually need.
|
|
80
80
|
|
|
81
|
-
7. **
|
|
81
|
+
7. **Optional: prepare a remote Sprite runner.** A Sprite is a remote Linux runner, so setup is intentionally explicit: choose which agent CLIs and MCP servers to authenticate. `--mcp` only adds the servers you name; it does not attempt to authenticate every MCP server visible in your Claude account.
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
crew sprite setup crew-claude-1 \
|
|
85
|
+
--claude \
|
|
86
|
+
--codex \
|
|
87
|
+
--copy-local-codex-auth \
|
|
88
|
+
--github \
|
|
89
|
+
--git-name "Rocky Warren" \
|
|
90
|
+
--git-email "1085683+therockstorm@users.noreply.github.com" \
|
|
91
|
+
--mcp linear \
|
|
92
|
+
--mcp slack \
|
|
93
|
+
--checkpoint
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Known MCP aliases are `linear`, `slack`, and `notion`. For another HTTP MCP server, pass `--mcp name=https://example.com/mcp`. The command creates the Sprite if needed, prepares `~/dev`, configures Git, runs selected auth flows, adds selected MCP servers to Claude Code, and then opens Claude so you can run `/mcp` and authenticate only those selected servers. `--copy-local-codex-auth` copies `${CODEX_HOME:-$HOME/.codex}/auth.json` into `/home/sprite/.codex/auth.json` and then verifies `codex login status`; it never prints the file contents. Use `--skip-mcp-auth` when you only want to add MCP definitions, and run the `/mcp` step later.
|
|
97
|
+
|
|
98
|
+
Repo setup is separate from runner setup and should run after the ticket branch exists, immediately before launching an agent. It clones/fetches the repo in the Sprite, checks out the requested branch (creating it from the base branch when it does not exist on origin), forwards only build-time secrets for the dependency install, removes the temporary secret file, clears those env vars, and then exits. It reuses the same Node/npm bootstrap command as groundcrew's Docker Sandboxes path.
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
op run --env-file "${XDG_CONFIG_HOME:-$HOME/.config}/groundcrew/op.env" -- \
|
|
102
|
+
crew sprite bootstrap crew-claude-1 core-utils --branch rocky-team-123
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
By default bootstrap forwards any locally set `NPM_TOKEN` and `BUF_TOKEN`. Use repeated `--secret <ENV_NAME>` to require a specific set, or `--no-secrets` for public installs. Do not checkpoint after repo bootstrap; dependency state is branch-specific and should be refreshed per ticket.
|
|
106
|
+
|
|
107
|
+
To run a ticket remotely through the orchestrator or `crew run --ticket`, label it with `agent-remote` plus the agent label you want, for example `agent-claude` or `agent-codex`. `agent-remote` alone uses `models.default`. Groundcrew keeps cmux/tmux local, creates a per-ticket git worktree in the Sprite under `/home/sprite/groundcrew/worktrees`, and runs the agent with `sprite exec --tty`.
|
|
108
|
+
|
|
109
|
+
8. **Run.** Doctor first, then a dry run, then the real thing:
|
|
82
110
|
|
|
83
111
|
```bash
|
|
84
112
|
crew doctor
|
|
@@ -91,43 +119,50 @@ This installs the `crew` binary. `@clipboard-health/clearance` is pulled in tran
|
|
|
91
119
|
|
|
92
120
|
Required fields are marked **required**; everything else has a default and can be omitted from `config.ts`.
|
|
93
121
|
|
|
94
|
-
| Key | Default
|
|
95
|
-
| --------------------------------------- |
|
|
96
|
-
| `linear.projectSlug` | **required**
|
|
97
|
-
| `linear.statuses.todo` | `"Todo"`
|
|
98
|
-
| `linear.statuses.inProgress` | `"In Progress"`
|
|
99
|
-
| `linear.statuses.done` | `"Done"`
|
|
100
|
-
| `linear.statuses.terminal` | `["Done"]`
|
|
101
|
-
| `git.remote` | `"origin"`
|
|
102
|
-
| `git.defaultBranch` | `"main"`
|
|
103
|
-
| `workspace.projectDir` | **required**
|
|
104
|
-
| `workspace.knownRepositories` | **required**
|
|
105
|
-
| `orchestrator.maximumInProgress` | `4`
|
|
106
|
-
| `orchestrator.pollIntervalMilliseconds` | `120_000`
|
|
107
|
-
| `orchestrator.sessionLimitPercentage` | `85`
|
|
108
|
-
| `models.default` | `"claude"`
|
|
109
|
-
| `models.isolation` | `"auto"`
|
|
110
|
-
| `models.definitions` | `{ claude, codex }`
|
|
111
|
-
| `models.definitions.<name>.cmd` | —
|
|
112
|
-
| `models.definitions.<name>.color` | —
|
|
113
|
-
| `models.definitions.<name>.sandbox` | `{ agent }`
|
|
114
|
-
| `models.definitions.<name>.usage` | optional
|
|
115
|
-
| `prompts.initial` | (template)
|
|
116
|
-
| `workspaceKind` | `"auto"`
|
|
117
|
-
| `
|
|
118
|
-
|
|
119
|
-
|
|
122
|
+
| Key | Default | What it does |
|
|
123
|
+
| --------------------------------------- | ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
124
|
+
| `linear.projectSlug` | **required** | Linear project URL slug (e.g. `ai-strategy-5152195762f3`). The trailing 12-char hex `slugId` is what's matched against Linear's API; the leading name keeps `config.ts` self-documenting and the lookup survives project renames. |
|
|
125
|
+
| `linear.statuses.todo` | `"Todo"` | Status name picked up for new work. |
|
|
126
|
+
| `linear.statuses.inProgress` | `"In Progress"` | Status set after a workspace is provisioned; counts toward `maximumInProgress`. |
|
|
127
|
+
| `linear.statuses.done` | `"Done"` | Status that triggers worktree cleanup. |
|
|
128
|
+
| `linear.statuses.terminal` | `["Done"]` | Additional status names treated as terminal for cleanup, board remaining counts, and blocker checks. The `done` status is always included. |
|
|
129
|
+
| `git.remote` | `"origin"` | Remote used for `fetch` and as the worktree base ref. |
|
|
130
|
+
| `git.defaultBranch` | `"main"` | Branch fetched from `git.remote` and used as the worktree base. |
|
|
131
|
+
| `workspace.projectDir` | **required** | Parent dir for cloned repos. Sandbox-backed ticket worktrees live under each repo's `.sbx/` directory. |
|
|
132
|
+
| `workspace.knownRepositories` | **required** | Repos searched for in ticket descriptions to infer where work belongs. A ticket labeled for groundcrew (`agent-*`) fails fast when no known repo appears; unlabeled tickets are ignored. |
|
|
133
|
+
| `orchestrator.maximumInProgress` | `4` | Cap on tickets in `linear.statuses.inProgress` at once. |
|
|
134
|
+
| `orchestrator.pollIntervalMilliseconds` | `120_000` | Poll interval in `--watch` mode. |
|
|
135
|
+
| `orchestrator.sessionLimitPercentage` | `85` | Number in `(0, 100]`. A model whose codexbar session window exceeds this percentage is skipped that tick. |
|
|
136
|
+
| `models.default` | `"claude"` | Tiebreak for `agent-any` resolution and fallback for explicit but unknown `agent-*` labels. Also used by `crew setup <TICKET>` for unlabeled tickets. `crew run` ignores unlabeled tickets and does not apply this default. Must exist in `models.definitions`. |
|
|
137
|
+
| `models.isolation` | `"auto"` | Isolation strategy. `"auto"` picks Safehouse on macOS, else Docker Sandboxes when the model has a sandbox config. Safehouse or a model sandbox config is required; if neither is available, setup fails. Set `"none"` explicitly to run directly. |
|
|
138
|
+
| `models.definitions` | `{ claude, codex }` | Agent definitions. Additive merge with shipped defaults. |
|
|
139
|
+
| `models.definitions.<name>.cmd` | — | Shell command launched for the model. For sandbox-backed models this runs inside the persistent sandbox; otherwise it runs in the workspace. `{{worktree}}` and `{{sandbox}}` are replaced before launch. |
|
|
140
|
+
| `models.definitions.<name>.color` | — | Color for the workspace status pill (cmux only; tmux silently drops it). |
|
|
141
|
+
| `models.definitions.<name>.sandbox` | `{ agent }` | Optional Docker Sandboxes backing. Defaults set `claude` → `agent: "claude"` and `codex` → `agent: "codex"`. Set `sandbox: false` on an override to run the command outside Docker Sandboxes. |
|
|
142
|
+
| `models.definitions.<name>.usage` | optional | If set, codexbar usage is fetched for this model and gated by `sessionLimitPercentage`. Omit to never gate. When `usage.codexbar.source` is omitted, groundcrew uses `auto` on macOS and `cli` elsewhere. |
|
|
143
|
+
| `prompts.initial` | (template) | First message sent to the agent. Placeholders: `{{ticket}}`, `{{worktree}}`, `{{title}}`, `{{description}}`. |
|
|
144
|
+
| `workspaceKind` | `"auto"` | Terminal session manager. `"auto"` picks `cmux` when on PATH, else `tmux`. Set to `"cmux"` or `"tmux"` to fail loudly when the chosen backend is missing. tmux windows live in a dedicated `groundcrew` session. |
|
|
145
|
+
| `remote.sprite.spriteName` | `"crew-claude-1"` | Sprite used for tickets labeled `agent-remote`. |
|
|
146
|
+
| `remote.sprite.owner` | `"ClipboardHealth"` | GitHub owner used when cloning bare repository names inside the Sprite. |
|
|
147
|
+
| `remote.sprite.repoRoot` | `"/home/sprite/dev"` | Shared clone root inside the Sprite. |
|
|
148
|
+
| `remote.sprite.worktreeRoot` | `"/home/sprite/groundcrew/worktrees"` | Per-ticket remote worktree root inside the Sprite. |
|
|
149
|
+
| `remote.sprite.secretNames` | `["NPM_TOKEN", "BUF_TOKEN"]` | Build-only env vars that may be uploaded for remote dependency setup, then unset before the agent process starts. |
|
|
150
|
+
| `logging.file` | XDG state path | Append-mode log file destination. `log()` / `logEvent()` tee here in addition to stdout, so a vanished workspace doesn't take the evidence with it. Defaults to `${XDG_STATE_HOME:-$HOME/.local/state}/groundcrew/groundcrew.log`. |
|
|
151
|
+
|
|
152
|
+
The branch prefix (`<prefix>-<TICKET>`) is derived from your OS username (`os.userInfo().username`), not configured. Agent selection looks for a top-level Linear label named `agent-<model>` (e.g. `agent-claude`, `agent-codex`). Add `agent-remote` to run that ticket in the configured Sprite runner instead of locally; `agent-remote` is a modifier label, not a model. **`crew run` only fetches tickets with an `agent-*` label** — the GraphQL query filters them server-side, so unlabeled tickets are never returned by Linear's API and do not appear in the rendered board. Use `crew setup <TICKET>` to provision an unlabeled ticket on demand (manual setup falls back to `models.default`). The reserved label `agent-any` routes the ticket to the configured model with the most available session capacity (lowest codexbar session-used percent), skipping any model already over `sessionLimitPercentage`. With no usage data, `agent-any` resolves to `models.default`. The name `any` cannot be used in `models.definitions`. Todo tickets blocked by Linear issues that are not in `linear.statuses.terminal` are skipped until their blockers reach a terminal status.
|
|
120
153
|
|
|
121
154
|
## Manual commands
|
|
122
155
|
|
|
123
156
|
```bash
|
|
124
157
|
crew sandbox auth <repo> --model claude
|
|
125
158
|
crew sandbox auth <repo> --model codex
|
|
159
|
+
crew sprite setup crew-claude-1 --claude --codex --copy-local-codex-auth --github --mcp linear --checkpoint
|
|
160
|
+
crew sprite bootstrap crew-claude-1 core-utils --branch rocky-team-123
|
|
126
161
|
crew run --ticket <TICKET>
|
|
127
162
|
crew cleanup <TICKET>
|
|
128
163
|
```
|
|
129
164
|
|
|
130
|
-
`crew run --ticket <TICKET>` provisions a single ticket the same way the orchestrator would: the repo is parsed from the ticket's Linear description
|
|
165
|
+
`crew run --ticket <TICKET>` provisions a single ticket the same way the orchestrator would: the repo is parsed from the ticket's Linear description, the model comes from the ticket's `agent-*` label, and `agent-remote` is honored. If the description does not mention a repo from `workspace.knownRepositories`, setup fails before provisioning. `--watch` and `--ticket` are mutually exclusive — `--watch` drives the orchestrator loop; `--ticket` provisions one ticket and exits. `crew cleanup <TICKET>` resolves to every worktree carrying that ticket id (host, sandbox, and Sprite kinds, across repos) and tears them all down. To inspect remote sessions directly, run `sprite sessions list -s crew-claude-1`; if cleanup cannot remove a remote worktree because the agent is still running, stop that session with `sprite sessions kill -s crew-claude-1 <session-id>` and retry cleanup. To inspect codexbar session windows directly, run `codexbar usage`; the orchestrator already gates on this internally via `orchestrator.sessionLimitPercentage`.
|
|
131
166
|
|
|
132
167
|
## Gotchas
|
|
133
168
|
|
|
@@ -135,6 +170,8 @@ crew cleanup <TICKET>
|
|
|
135
170
|
- **Safehouse-already-wrapped commands are not re-wrapped.** If a `models.definitions.<name>.cmd` already starts with `safehouse`, groundcrew assumes that command owns its Safehouse flags and does not add the `safehouse-clearance` wrapper a second time. Changing the proxy's allowlist after it's running requires killing the PID in `${XDG_CACHE_HOME:-$HOME/.cache}/clearance/clearance.pid` so the next launch picks up the new env.
|
|
136
171
|
- **Authenticate before first ticket setup.** Run `crew sandbox auth <repo> --model <name>` before `crew run` for a repo/model. That first run carries no ticket prompt, so a required OAuth `/login` cannot consume task context.
|
|
137
172
|
- **Sandbox cleanup is intentionally conservative.** `crew cleanup` removes the per-ticket worktree and branch, but keeps the persistent sandbox so OAuth sessions, installed packages, and agent config survive later tickets. Use `sbx ls` and `sbx rm --force <name>` when you intentionally want to delete that persisted sandbox state.
|
|
173
|
+
- **Sprite cleanup is also conservative.** `crew cleanup` removes tracked remote worktrees and branches, but it does not kill active Sprite sessions. Use `sprite sessions list -s <sprite>` and `sprite sessions kill -s <sprite> <session-id>` when Git reports a worktree is busy.
|
|
174
|
+
- **Codex auth in Sprites may need auth-file copy.** If `crew sprite setup <sprite> --codex` finishes interactive login but `codex login status` still fails inside the Sprite, rerun with `--copy-local-codex-auth` after confirming local Codex auth works.
|
|
138
175
|
- **Usage source defaults are OS-aware.** `codexbar` usage uses `--source auto` on macOS so CodexBar can prefer account/web sources and fall back as it supports. On Linux/WSL it uses `--source cli`, so install the CodexBar Linux CLI and authenticate the provider CLIs inside that environment.
|
|
139
176
|
- **Status names matter.** If your team uses `Started` instead of `In Progress`, set `linear.statuses.inProgress = "Started"`.
|
|
140
177
|
- **Leaf-only.** Parent issues with children are ignored — sub-issues are the work items.
|
package/clearance-allow-hosts
CHANGED
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
ab.chatgpt.com
|
|
12
12
|
api.anthropic.com
|
|
13
13
|
api.openai.com
|
|
14
|
-
auth.openai.com
|
|
15
14
|
chatgpt.com
|
|
16
15
|
platform.claude.com
|
|
17
16
|
|
|
@@ -19,20 +18,19 @@ platform.claude.com
|
|
|
19
18
|
api.linear.app
|
|
20
19
|
api.notion.com
|
|
21
20
|
api.slack.com
|
|
21
|
+
developers.notion.com
|
|
22
22
|
linear.app
|
|
23
23
|
mcp.linear.app
|
|
24
24
|
mcp.notion.com
|
|
25
25
|
mcp.slack.com
|
|
26
26
|
slack.com
|
|
27
27
|
|
|
28
|
-
# Datadog (logs/metrics queries)
|
|
29
|
-
*.datadoghq.com
|
|
28
|
+
# Datadog (logs/metrics queries). No wildcard — blocks http-intake.logs.*.
|
|
30
29
|
api.datadoghq.com
|
|
31
30
|
app.datadoghq.com
|
|
32
31
|
datadoghq.com
|
|
33
32
|
|
|
34
33
|
# GitHub + GHA artifact storage (Azure blobs)
|
|
35
|
-
*.githubusercontent.com
|
|
36
34
|
api.github.com
|
|
37
35
|
cafe.github.com
|
|
38
36
|
github.com
|
|
@@ -56,6 +54,8 @@ productionresultssa16.blob.core.windows.net
|
|
|
56
54
|
productionresultssa17.blob.core.windows.net
|
|
57
55
|
productionresultssa18.blob.core.windows.net
|
|
58
56
|
productionresultssa19.blob.core.windows.net
|
|
57
|
+
raw.githubusercontent.com
|
|
58
|
+
results-receiver.actions.githubusercontent.com
|
|
59
59
|
|
|
60
60
|
# npm registry
|
|
61
61
|
api.npmjs.org
|
|
@@ -68,5 +68,7 @@ formulae.brew.sh
|
|
|
68
68
|
hub.docker.com
|
|
69
69
|
index.docker.io
|
|
70
70
|
nx.dev
|
|
71
|
+
sourcegraph.clipboardhealth.com
|
|
72
|
+
sourcegraph.clipboardhealth.io
|
|
71
73
|
sourcegraph.com
|
|
72
74
|
vitest.dev
|
package/configExample.ts
CHANGED
|
@@ -77,6 +77,22 @@ export const config: Config = {
|
|
|
77
77
|
// // session and lose status-pill painting (cmux-only feature).
|
|
78
78
|
// workspaceKind: "auto",
|
|
79
79
|
//
|
|
80
|
+
// remote: {
|
|
81
|
+
// sprite: {
|
|
82
|
+
// // Tickets labeled `agent-remote` run through this shared Sprite.
|
|
83
|
+
// spriteName: "crew-claude-1",
|
|
84
|
+
// // Bare repository names are cloned as `${owner}/${repo}` inside the Sprite.
|
|
85
|
+
// owner: "ClipboardHealth",
|
|
86
|
+
// // Absolute paths inside the Sprite. Groundcrew creates one shared clone
|
|
87
|
+
// // per repo and one remote git worktree per ticket.
|
|
88
|
+
// repoRoot: "/home/sprite/dev",
|
|
89
|
+
// worktreeRoot: "/home/sprite/groundcrew/worktrees",
|
|
90
|
+
// // Build-only env vars forwarded for remote dependency setup, then
|
|
91
|
+
// // unset before the agent process starts.
|
|
92
|
+
// secretNames: ["NPM_TOKEN", "BUF_TOKEN"],
|
|
93
|
+
// },
|
|
94
|
+
// },
|
|
95
|
+
//
|
|
80
96
|
// logging: {
|
|
81
97
|
// // Append-mode log file destination. `log()` / `logEvent()` tee here
|
|
82
98
|
// // in addition to stdout, so a vanished workspace doesn't take the
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clipboard-health/groundcrew",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "Linear-driven orchestrator that launches AI coding agents in isolated git worktrees, with workspace lifecycle, sandbox auth, and usage tracking.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent",
|
package/src/cli.js
CHANGED
|
@@ -3,6 +3,7 @@ import { doctor } from "./commands/doctor.js";
|
|
|
3
3
|
import { orchestrate } from "./commands/orchestrator.js";
|
|
4
4
|
import { sandboxAuthCli } from "./commands/sandboxAuth.js";
|
|
5
5
|
import { setupWorkspaceCli } from "./commands/setupWorkspace.js";
|
|
6
|
+
import { spriteCli } from "./commands/spriteSetup.js";
|
|
6
7
|
import { errorMessage, writeError, writeOutput } from "./lib/util.js";
|
|
7
8
|
async function runCli(argv) {
|
|
8
9
|
let watch = false;
|
|
@@ -63,6 +64,12 @@ const SUBCOMMANDS = {
|
|
|
63
64
|
usage: "auth <repo> [--model <name>]",
|
|
64
65
|
invoke: sandboxAuthCli,
|
|
65
66
|
},
|
|
67
|
+
sprite: {
|
|
68
|
+
summary: "Create, authenticate, and bootstrap a remote Sprite runner",
|
|
69
|
+
usage: "setup <sprite-name> [--claude] [--github] [--mcp <alias|name=url>] [--checkpoint]\n" +
|
|
70
|
+
" → crew sprite bootstrap <sprite-name> <repo> [--branch <branch>]",
|
|
71
|
+
invoke: spriteCli,
|
|
72
|
+
},
|
|
66
73
|
};
|
|
67
74
|
function printHelp() {
|
|
68
75
|
const width = Math.max(...Object.keys(SUBCOMMANDS).map((key) => key.length));
|
package/src/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../../packages/groundcrew/src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../../packages/groundcrew/src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -93,6 +93,7 @@ export function createDispatcher(deps) {
|
|
|
93
93
|
ticket: verdict.issue.id,
|
|
94
94
|
blockers: verdict.blockers,
|
|
95
95
|
model: verdict.model,
|
|
96
|
+
runner: verdict.issue.runner,
|
|
96
97
|
});
|
|
97
98
|
}
|
|
98
99
|
async function startEligibleIssue(start, dryRun, signal) {
|
|
@@ -103,13 +104,14 @@ export function createDispatcher(deps) {
|
|
|
103
104
|
if (dryRun) {
|
|
104
105
|
log(
|
|
105
106
|
/* v8 ignore next @preserve -- classifyTodo forces recovery=false in dry-run, so the resume branch can't fire here */
|
|
106
|
-
`[dry-run] Would ${recovery ? "resume" : "start"} ${issue.id} in ${issue.repository} (${issue.model})`);
|
|
107
|
+
`[dry-run] Would ${recovery ? "resume" : "start"} ${issue.id} in ${issue.repository} (${issue.model}, ${issue.runner})`);
|
|
107
108
|
logEvent("dispatch", {
|
|
108
109
|
outcome: "skipped",
|
|
109
110
|
reason: "dry_run",
|
|
110
111
|
ticket: issue.id,
|
|
111
112
|
model: issue.model,
|
|
112
113
|
repository: issue.repository,
|
|
114
|
+
runner: issue.runner,
|
|
113
115
|
});
|
|
114
116
|
return;
|
|
115
117
|
}
|
|
@@ -122,6 +124,7 @@ export function createDispatcher(deps) {
|
|
|
122
124
|
repository: issue.repository,
|
|
123
125
|
ticket: issue.id,
|
|
124
126
|
model: issue.model,
|
|
127
|
+
runner: issue.runner,
|
|
125
128
|
};
|
|
126
129
|
await (signal === undefined
|
|
127
130
|
? setupWorkspace(config, setupOptions)
|
|
@@ -133,6 +136,7 @@ export function createDispatcher(deps) {
|
|
|
133
136
|
ticket: issue.id,
|
|
134
137
|
model: issue.model,
|
|
135
138
|
repository: issue.repository,
|
|
139
|
+
runner: issue.runner,
|
|
136
140
|
});
|
|
137
141
|
}
|
|
138
142
|
catch (error) {
|
|
@@ -142,6 +146,7 @@ export function createDispatcher(deps) {
|
|
|
142
146
|
ticket: issue.id,
|
|
143
147
|
model: issue.model,
|
|
144
148
|
repository: issue.repository,
|
|
149
|
+
runner: issue.runner,
|
|
145
150
|
error: errorMessage(error),
|
|
146
151
|
});
|
|
147
152
|
}
|
|
@@ -214,7 +219,7 @@ export function createDispatcher(deps) {
|
|
|
214
219
|
log(`${slots} slot(s) available, starting ${starts.length} ticket(s): ${starts.map(({ issue }) => `${issue.id}(${issue.model})`).join(", ")}`);
|
|
215
220
|
logEvent("dispatch", {
|
|
216
221
|
outcome: "starting",
|
|
217
|
-
tickets: starts.map(({ issue }) => `${issue.id}:${issue.model}`),
|
|
222
|
+
tickets: starts.map(({ issue }) => `${issue.id}:${issue.model}:${issue.runner}`),
|
|
218
223
|
});
|
|
219
224
|
for (const start of starts) {
|
|
220
225
|
// oxlint-disable-next-line no-await-in-loop -- one workspace at a time avoids racing on git
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../../../../packages/groundcrew/src/commands/dispatcher.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../../../../packages/groundcrew/src/commands/dispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAGL,iBAAiB,GAElB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAuB,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvE,OAAO,EACL,gBAAgB,EAChB,mBAAmB,GAGpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,wBAAwB,GAAG,GAAG,CAAC;AACrC,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,CAAC;AAChC,MAAM,gBAAgB,GAAG,aAAa,GAAG,eAAe,CAAC;AAkBzD,MAAM,UAAU,gBAAgB,CAAC,IAAoB;IACnD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAChC,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxD,IAAI,sBAAsB,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/C,SAAS,iBAAiB,CAAC,KAAmB;QAC5C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,sBAAsB,CAAC;QAChE,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,IAAI,QAAQ,CAAC,OAAO,GAAG,wBAAwB,GAAG,YAAY,EAAE,CAAC;gBAC5F,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACrB,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,GAAG,wBAAwB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACrE,MAAM,IAAI,GAAG,QAAQ,CAAC,kBAAkB,IAAI,GAAG,CAAC;gBAChD,GAAG,CACD,GAAG,KAAK,eAAe,GAAG,QAAQ,YAAY,iBAAiB,IAAI,0BAA0B,CAC9F,CAAC;YACJ,CAAC;YACD,oEAAoE;YACpE,wEAAwE;YACxE,4EAA4E;YAC5E,8DAA8D;YAC9D,iEAAiE;YACjE,mCAAmC;YACnC,mEAAmE;YACnE,IACE,QAAQ,CAAC,MAAM,KAAK,IAAI;gBACxB,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAChC,QAAQ,CAAC,eAAe,KAAK,IAAI,EACjC,CAAC;gBACD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,GAAG,wBAAwB,CAAC;gBAC3D,MAAM,UAAU,GAAG,2BAA2B,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;gBACzE,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;oBACzB,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACrB,GAAG,CACD,GAAG,KAAK,cAAc,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,8BAA8B,QAAQ,CAAC,eAAe,0BAA0B,CACtJ,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,UAAU,oBAAoB,CAAC,MAAc;QAChD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,MAAM,GAAG,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,0EAA0E;QAC1E,wEAAwE;QACxE,0EAA0E;QAC1E,IAAI,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAClC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAC5D,CAAC;QACF,IAAI,UAAU,EAAE,EAAE,KAAK,SAAS,EAAE,CAAC;YACjC,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACnC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,qBAAqB,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;QACjD,OAAO,UAAU,CAAC,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,UAAU,cAAc,CAAC,KAAY;QACxC,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,mEAAmE;YACnE,uEAAuE;YACvE,kEAAkE;YAClE,mCAAmC;YACnC,MAAM,IAAI,KAAK,CACb,mBAAmB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,eAAe,KAAK,CAAC,EAAE,UAAU,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,sFAAsF,CACxN,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAClD,GAAG,CAAC,UAAU,KAAK,CAAC,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,SAAS,OAAO,CAAC,OAAoB;QACnC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrB,QAAQ,CAAC,UAAU,EAAE;YACnB,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,OAAO,CAAC,WAAW;YAC3B,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,kBAAkB,CAC/B,KAAmB,EACnB,MAAe,EACf,MAAoB;QAEpB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;QAClC,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;YAC1B,GAAG,CAAC,0BAA0B,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACX,GAAG;YACD,qHAAqH;YACrH,mBAAmB,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CACxH,CAAC;YACF,QAAQ,CAAC,UAAU,EAAE;gBACnB,OAAO,EAAE,SAAS;gBAClB,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,KAAK,CAAC,EAAE;gBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,IAAI,QAAQ,EAAE,CAAC;gBACb,GAAG,CAAC,4CAA4C,KAAK,CAAC,EAAE,gCAAgC,CAAC,CAAC;YAC5F,CAAC;iBAAM,CAAC;gBACN,MAAM,YAAY,GAAG;oBACnB,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,MAAM,EAAE,KAAK,CAAC,EAAE;oBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;iBACrB,CAAC;gBACF,MAAM,CAAC,MAAM,KAAK,SAAS;oBACzB,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC;oBACtC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YACxD,CAAC;YACD,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;YAC5B,QAAQ,CAAC,UAAU,EAAE;gBACnB,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;gBACzC,MAAM,EAAE,KAAK,CAAC,EAAE;gBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,mBAAmB,KAAK,CAAC,EAAE,KAAK,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3D,QAAQ,CAAC,UAAU,EAAE;gBACnB,OAAO,EAAE,QAAQ;gBACjB,MAAM,EAAE,KAAK,CAAC,EAAE;gBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC;aAC3B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,UAAU,OAAO,CAAC,UAMtB;QACC,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;QACrE,sBAAsB,GAAG,IAAI,GAAG,EAAE,CAAC;QAEnC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CACrC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAC9D,CAAC,MAAM,CAAC;QACT,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,iBAAiB,GAAG,WAAW,CAAC;QAClE,+DAA+D;QAC/D,oEAAoE;QACpE,MAAM,IAAI,GAA+B,KAAK,CAAC,MAAM,CAAC,MAAM,CAC1D,CAAC,KAAK,EAA4B,EAAE,CAClC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAC3E,CAAC;QAEF,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,GAAG,CACD,gBAAgB,WAAW,IAAI,MAAM,CAAC,YAAY,CAAC,iBAAiB,yBAAyB,CAC9F,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,qBAAqB,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,wEAAwE;QACxE,kEAAkE;QAClE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC1E,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,GAAG,CAAC,eAAe,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,kCAAkC,CAAC,CAAC;YAClF,OAAO;QACT,CAAC;QAED,uEAAuE;QACvE,6EAA6E;QAC7E,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACnC,sEAAsE;QACtE,wEAAwE;QACxE,sEAAsE;QACtE,qEAAqE;QACrE,kEAAkE;QAClE,IAAI,cAA8B,CAAC;QACnC,IAAI,CAAC;YACH,cAAc,GAAG,MAAM;gBACrB,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,EAAU,EAAE;gBAC1C,CAAC,CAAC,MAAM,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACpC,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC;QACxC,MAAM,SAAS,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAElD,MAAM,QAAQ,GAAG,mBAAmB,CAAC;YACnC,MAAM;YACN,SAAS;YACT,eAAe;YACf,cAAc;YACd,KAAK,EAAE,YAAY;YACnB,SAAS;YACT,KAAK;YACL,MAAM;SACP,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAqB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QAC7E,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAE1E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,GAAG,CAAC,eAAe,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,sCAAsC,CAAC,CAAC;YACtF,OAAO;QACT,CAAC;QAED,GAAG,CACD,GAAG,KAAK,gCAAgC,MAAM,CAAC,MAAM,eAAe,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC1I,CAAC;QACF,QAAQ,CAAC,UAAU,EAAE;YACnB,OAAO,EAAE,UAAU;YACnB,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;SACjF,CAAC,CAAC;QAEH,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,4FAA4F;YAC5F,MAAM,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC;AAED,SAAS,2BAA2B,CAAC,eAAuB;IAC1D,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAC7B,gBAAgB,EAChB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,GAAG,eAAe,CAAC,CAChD,CAAC;IACF,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,eAAe,CAAC,CAAC;IACpE,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;IAE7E,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,GAAG,wBAAwB,CAAC;AACrE,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ResolvedConfig } from "../lib/config.ts";
|
|
1
|
+
import { type ResolvedConfig, type WorkspaceRunner } from "../lib/config.ts";
|
|
2
2
|
interface TicketDetails {
|
|
3
3
|
title: string;
|
|
4
4
|
description: string;
|
|
@@ -7,6 +7,7 @@ export interface SetupWorkspaceOptions {
|
|
|
7
7
|
ticket: string;
|
|
8
8
|
repository: string;
|
|
9
9
|
model: string;
|
|
10
|
+
runner?: WorkspaceRunner;
|
|
10
11
|
/** When provided, skip the Linear lookup for prompt-template fields. */
|
|
11
12
|
details?: TicketDetails;
|
|
12
13
|
}
|
|
@@ -3,13 +3,13 @@ import { tmpdir } from "node:os";
|
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { ensureClearance } from "@clipboard-health/clearance";
|
|
5
5
|
import { fetchResolvedIssue } from "../lib/boardSource.js";
|
|
6
|
-
import { loadConfig } from "../lib/config.js";
|
|
6
|
+
import { BUILD_SECRET_NAMES, loadConfig, } from "../lib/config.js";
|
|
7
7
|
import { detectHostCapabilities } from "../lib/host.js";
|
|
8
8
|
import { resolveIsolationStrategy } from "../lib/isolation.js";
|
|
9
|
-
import {
|
|
9
|
+
import { buildLaunchCommand, buildSpriteLaunchCommand, shellSingleQuote, } from "../lib/launchCommand.js";
|
|
10
10
|
import { errorMessage, getLinearClient, log, readEnvironmentVariable } from "../lib/util.js";
|
|
11
11
|
import { workspaces } from "../lib/workspaces.js";
|
|
12
|
-
import { worktrees } from "../lib/worktrees.js";
|
|
12
|
+
import { repoDirFor, worktrees } from "../lib/worktrees.js";
|
|
13
13
|
async function fetchTicket(ticket) {
|
|
14
14
|
const client = getLinearClient();
|
|
15
15
|
const issue = await client.issue(ticket.toUpperCase());
|
|
@@ -32,9 +32,9 @@ function renderPrompt(template, variables) {
|
|
|
32
32
|
* dir is `rm -rf`'d by the launch command (and rollback path), so cleanup
|
|
33
33
|
* is already handled.
|
|
34
34
|
*/
|
|
35
|
-
function stageBuildSecrets(promptDir) {
|
|
35
|
+
function stageBuildSecrets(promptDir, secretNames = BUILD_SECRET_NAMES) {
|
|
36
36
|
const lines = [];
|
|
37
|
-
for (const name of
|
|
37
|
+
for (const name of secretNames) {
|
|
38
38
|
const value = readEnvironmentVariable(name);
|
|
39
39
|
if (value === undefined || value.length === 0) {
|
|
40
40
|
continue;
|
|
@@ -50,11 +50,20 @@ function stageBuildSecrets(promptDir) {
|
|
|
50
50
|
}
|
|
51
51
|
export async function setupWorkspace(config, options, runOptions = {}) {
|
|
52
52
|
const { ticket, repository, model } = options;
|
|
53
|
+
const runner = options.runner ?? "local";
|
|
53
54
|
const { signal } = runOptions;
|
|
54
55
|
const definition = config.models.definitions[model];
|
|
55
56
|
if (!definition) {
|
|
56
57
|
throw new Error(`Unknown model: ${model}`);
|
|
57
58
|
}
|
|
59
|
+
if (runner === "sprite") {
|
|
60
|
+
await setupSpriteWorkspace({
|
|
61
|
+
config,
|
|
62
|
+
options: { ...options, runner },
|
|
63
|
+
...(signal === undefined ? {} : { signal }),
|
|
64
|
+
});
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
58
67
|
const { resolved: strategy, reason } = resolveIsolationStrategy({
|
|
59
68
|
config,
|
|
60
69
|
model,
|
|
@@ -64,7 +73,7 @@ export async function setupWorkspace(config, options, runOptions = {}) {
|
|
|
64
73
|
if (strategy === "safehouse") {
|
|
65
74
|
await ensureClearance({ logger: log });
|
|
66
75
|
}
|
|
67
|
-
const spec = { repository, ticket, model, strategy };
|
|
76
|
+
const spec = { repository, ticket, model, strategy, runner };
|
|
68
77
|
const created = signal === undefined
|
|
69
78
|
? await worktrees.create(config, spec)
|
|
70
79
|
: await worktrees.create(config, spec, signal);
|
|
@@ -123,6 +132,68 @@ export async function setupWorkspace(config, options, runOptions = {}) {
|
|
|
123
132
|
throw error;
|
|
124
133
|
}
|
|
125
134
|
}
|
|
135
|
+
async function resolveTicketDetails(options) {
|
|
136
|
+
if (options.details !== undefined) {
|
|
137
|
+
return options.details;
|
|
138
|
+
}
|
|
139
|
+
log(`Fetching ${options.ticket} from Linear...`);
|
|
140
|
+
return await fetchTicket(options.ticket);
|
|
141
|
+
}
|
|
142
|
+
async function setupSpriteWorkspace(arguments_) {
|
|
143
|
+
const { config, options, signal } = arguments_;
|
|
144
|
+
const { ticket, repository, model } = options;
|
|
145
|
+
const definition = config.models.definitions[model];
|
|
146
|
+
/* v8 ignore next 3 @preserve -- setupWorkspace validates the model before routing here */
|
|
147
|
+
if (definition === undefined) {
|
|
148
|
+
throw new Error(`Unknown model: ${model}`);
|
|
149
|
+
}
|
|
150
|
+
log(`Workspace runner: sprite (${config.remote.sprite.spriteName})`);
|
|
151
|
+
const spec = { repository, ticket, model, strategy: "none", runner: "sprite" };
|
|
152
|
+
const created = signal === undefined
|
|
153
|
+
? await worktrees.create(config, spec)
|
|
154
|
+
: await worktrees.create(config, spec, signal);
|
|
155
|
+
const { branchName, dir: remoteWorktreeDir } = created;
|
|
156
|
+
const worktreeName = `${repository}-${ticket}`;
|
|
157
|
+
let promptDir;
|
|
158
|
+
try {
|
|
159
|
+
const ticketDetails = await resolveTicketDetails(options);
|
|
160
|
+
promptDir = mkdtempSync(join(tmpdir(), `groundcrew-${ticket}-`));
|
|
161
|
+
const promptFile = join(promptDir, "prompt.txt");
|
|
162
|
+
writeFileSync(promptFile, renderPrompt(config.prompts.initial, {
|
|
163
|
+
ticket,
|
|
164
|
+
worktree: worktreeName,
|
|
165
|
+
title: ticketDetails.title,
|
|
166
|
+
description: ticketDetails.description,
|
|
167
|
+
}));
|
|
168
|
+
const secretsFile = stageBuildSecrets(promptDir, config.remote.sprite.secretNames);
|
|
169
|
+
const remotePromptFile = `/tmp/groundcrew-${ticket}-prompt.txt`;
|
|
170
|
+
const remoteSecretsFile = secretsFile === undefined ? undefined : `/tmp/groundcrew-${ticket}-secrets.env`;
|
|
171
|
+
const launchCmd = buildSpriteLaunchCommand({
|
|
172
|
+
definition,
|
|
173
|
+
spriteName: config.remote.sprite.spriteName,
|
|
174
|
+
promptFile,
|
|
175
|
+
remotePromptFile,
|
|
176
|
+
worktreeDir: remoteWorktreeDir,
|
|
177
|
+
secretNames: config.remote.sprite.secretNames,
|
|
178
|
+
...(secretsFile === undefined ? {} : { secretsFile, remoteSecretsFile }),
|
|
179
|
+
});
|
|
180
|
+
log("Opening workspace...");
|
|
181
|
+
await workspaces.open(config, {
|
|
182
|
+
name: ticket,
|
|
183
|
+
cwd: repoDirFor(config, repository),
|
|
184
|
+
command: launchCmd,
|
|
185
|
+
status: { text: `${model}:remote`, color: definition.color, icon: "sparkle" },
|
|
186
|
+
}, signal);
|
|
187
|
+
log(`Workspace "${ticket}" launched (${model}, sprite)`);
|
|
188
|
+
log(` Worktree: ${remoteWorktreeDir}`);
|
|
189
|
+
log(` Branch: ${branchName}`);
|
|
190
|
+
log(` Sprite: ${config.remote.sprite.spriteName}`);
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
await rollbackWorktree({ config, entry: created, promptDir });
|
|
194
|
+
throw error;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
126
197
|
async function rollbackWorktree(arguments_) {
|
|
127
198
|
log(`Setup failed; rolling back worktree ${arguments_.entry.repository}-${arguments_.entry.ticket}...`);
|
|
128
199
|
let result;
|
|
@@ -163,15 +234,16 @@ export async function setupWorkspaceCli(ticket, options = {}) {
|
|
|
163
234
|
const config = await loadConfig();
|
|
164
235
|
const client = getLinearClient();
|
|
165
236
|
const resolved = await fetchResolvedIssue({ client, config, ticket });
|
|
166
|
-
log(`Resolved ${ticket}: repository=${resolved.repository}, model=${resolved.model}`);
|
|
237
|
+
log(`Resolved ${ticket}: repository=${resolved.repository}, model=${resolved.model}, runner=${resolved.runner}`);
|
|
167
238
|
if (options.dryRun === true) {
|
|
168
|
-
log(`[dry-run] Would launch ${ticket} in ${resolved.repository} (${resolved.model})`);
|
|
239
|
+
log(`[dry-run] Would launch ${ticket} in ${resolved.repository} (${resolved.model}, ${resolved.runner})`);
|
|
169
240
|
return;
|
|
170
241
|
}
|
|
171
242
|
await setupWorkspace(config, {
|
|
172
243
|
ticket: ticket.toLowerCase(),
|
|
173
244
|
repository: resolved.repository,
|
|
174
245
|
model: resolved.model,
|
|
246
|
+
runner: resolved.runner,
|
|
175
247
|
details: { title: resolved.title, description: resolved.description },
|
|
176
248
|
});
|
|
177
249
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setupWorkspace.js","sourceRoot":"","sources":["../../../../../packages/groundcrew/src/commands/setupWorkspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,
|
|
1
|
+
{"version":3,"file":"setupWorkspace.js","sourceRoot":"","sources":["../../../../../packages/groundcrew/src/commands/setupWorkspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EACL,kBAAkB,EAClB,UAAU,GAGX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAsB,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAOhF,KAAK,UAAU,WAAW,CAAC,MAAc;IACvC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IACvD,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;KACrC,CAAC;AACJ,CAAC;AAeD,SAAS,YAAY,CACnB,QAAgB,EAChB,SAAmF;IAEnF,OAAO,QAAQ;SACZ,UAAU,CAAC,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC;SAC1C,UAAU,CAAC,cAAc,EAAE,SAAS,CAAC,QAAQ,CAAC;SAC9C,UAAU,CAAC,WAAW,EAAE,SAAS,CAAC,KAAK,CAAC;SACxC,UAAU,CAAC,iBAAiB,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CACxB,SAAiB,EACjB,WAAW,GAAsB,kBAAkB;IAEnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9C,SAAS;QACX,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACnD,aAAa,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACrE,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAsB,EACtB,OAA8B,EAC9B,UAAU,GAA6B,EAAE;IAEzC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC;IACzC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;IAC9B,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,oBAAoB,CAAC;YACzB,MAAM;YACN,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE;YAC/B,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;SAC5C,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,wBAAwB,CAAC;QAC9D,MAAM;QACN,KAAK;QACL,IAAI,EAAE,MAAM,sBAAsB,CAAC,MAAM,CAAC;KAC3C,CAAC,CAAC;IACH,GAAG,CAAC,uBAAuB,QAAQ,KAAK,MAAM,GAAG,CAAC,CAAC;IAEnD,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7B,MAAM,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,IAAI,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC7D,MAAM,OAAO,GACX,MAAM,KAAK,SAAS;QAClB,CAAC,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;QACtC,CAAC,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAC5D,MAAM,YAAY,GAAG,GAAG,UAAU,IAAI,MAAM,EAAE,CAAC;IAE/C,sEAAsE;IACtE,uEAAuE;IACvE,oEAAoE;IACpE,uEAAuE;IACvE,iEAAiE;IACjE,oEAAoE;IACpE,8BAA8B;IAC9B,IAAI,SAA6B,CAAC;IAClC,IAAI,CAAC;QACH,IAAI,aAA4B,CAAC;QACjC,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAClC,GAAG,CAAC,YAAY,MAAM,iBAAiB,CAAC,CAAC;YACzC,aAAa,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;QAClC,CAAC;QAED,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,MAAM,GAAG,CAAC,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QACjD,aAAa,CACX,UAAU,EACV,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE;YACnC,MAAM;YACN,QAAQ,EAAE,YAAY;YACtB,KAAK,EAAE,aAAa,CAAC,KAAK;YAC1B,WAAW,EAAE,aAAa,CAAC,WAAW;SACvC,CAAC,CACH,CAAC;QAEF,MAAM,WAAW,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAEjD,MAAM,SAAS,GAAG,kBAAkB,CAAC;YACnC,UAAU;YACV,UAAU;YACV,WAAW,EAAE,SAAS;YACtB,WAAW;YACX,QAAQ;YACR,WAAW;SACZ,CAAC,CAAC;QAEH,GAAG,CAAC,sBAAsB,CAAC,CAAC;QAC5B,MAAM,UAAU,CAAC,IAAI,CACnB,MAAM,EACN;YACE,IAAI,EAAE,MAAM;YACZ,GAAG,EAAE,SAAS;YACd,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE;SAClE,EACD,MAAM,CACP,CAAC;QAEF,GAAG,CAAC,cAAc,MAAM,eAAe,KAAK,GAAG,CAAC,CAAC;QACjD,GAAG,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC;QAChC,GAAG,CAAC,eAAe,UAAU,EAAE,CAAC,CAAC;QACjC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,GAAG,CAAC,eAAe,WAAW,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,gBAAgB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9D,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,OAA8B;IAChE,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,OAAO,CAAC,OAAO,CAAC;IACzB,CAAC;IACD,GAAG,CAAC,YAAY,OAAO,CAAC,MAAM,iBAAiB,CAAC,CAAC;IACjD,OAAO,MAAM,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,UAInC;IACC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;IAC/C,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAC9C,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACpD,0FAA0F;IAC1F,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,GAAG,CAAC,6BAA6B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAe,EAAE,MAAM,EAAE,QAAiB,EAAE,CAAC;IACjG,MAAM,OAAO,GACX,MAAM,KAAK,SAAS;QAClB,CAAC,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;QACtC,CAAC,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;IACvD,MAAM,YAAY,GAAG,GAAG,UAAU,IAAI,MAAM,EAAE,CAAC;IAE/C,IAAI,SAA6B,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC1D,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,MAAM,GAAG,CAAC,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QACjD,aAAa,CACX,UAAU,EACV,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE;YACnC,MAAM;YACN,QAAQ,EAAE,YAAY;YACtB,KAAK,EAAE,aAAa,CAAC,KAAK;YAC1B,WAAW,EAAE,aAAa,CAAC,WAAW;SACvC,CAAC,CACH,CAAC;QAEF,MAAM,WAAW,GAAG,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACnF,MAAM,gBAAgB,GAAG,mBAAmB,MAAM,aAAa,CAAC;QAChE,MAAM,iBAAiB,GACrB,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,MAAM,cAAc,CAAC;QAClF,MAAM,SAAS,GAAG,wBAAwB,CAAC;YACzC,UAAU;YACV,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU;YAC3C,UAAU;YACV,gBAAgB;YAChB,WAAW,EAAE,iBAAiB;YAC9B,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW;YAC7C,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;SACzE,CAAC,CAAC;QAEH,GAAG,CAAC,sBAAsB,CAAC,CAAC;QAC5B,MAAM,UAAU,CAAC,IAAI,CACnB,MAAM,EACN;YACE,IAAI,EAAE,MAAM;YACZ,GAAG,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC;YACnC,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,KAAK,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE;SAC9E,EACD,MAAM,CACP,CAAC;QAEF,GAAG,CAAC,cAAc,MAAM,eAAe,KAAK,WAAW,CAAC,CAAC;QACzD,GAAG,CAAC,eAAe,iBAAiB,EAAE,CAAC,CAAC;QACxC,GAAG,CAAC,eAAe,UAAU,EAAE,CAAC,CAAC;QACjC,GAAG,CAAC,eAAe,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,gBAAgB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9D,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,UAI/B;IACC,GAAG,CACD,uCAAuC,UAAU,CAAC,KAAK,CAAC,UAAU,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,KAAK,CACnG,CAAC;IACF,IAAI,MAAkE,CAAC;IACvE,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,6CAA6C,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;YAAS,CAAC;QACT,IAAI,UAAU,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,CAAC;YAAC,MAAM,CAAC;gBACP,qEAAqE;YACvE,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IACD,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACjD,wEAAwE;QACxE,uEAAuE;QACvE,qEAAqE;QACrE,8DAA8D;QAC9D,MAAM,MAAM,GACV,MAAM,CAAC,cAAc,CAAC,KAAK,KAAK,SAAS;YACvC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,KAAK,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,GAAG,CACD,gDAAgD,MAAM,WAAW,UAAU,CAAC,KAAK,CAAC,MAAM,8BAA8B,CACvH,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,GAAG,CAAC,qBAAqB,OAAO,CAAC,IAAI,YAAY,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAc,EACd,OAAO,GAAyB,EAAE;IAElC,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACtE,GAAG,CACD,YAAY,MAAM,gBAAgB,QAAQ,CAAC,UAAU,WAAW,QAAQ,CAAC,KAAK,YAAY,QAAQ,CAAC,MAAM,EAAE,CAC5G,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC5B,GAAG,CACD,0BAA0B,MAAM,OAAO,QAAQ,CAAC,UAAU,KAAK,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,MAAM,GAAG,CACrG,CAAC;QACF,OAAO;IACT,CAAC;IACD,MAAM,cAAc,CAAC,MAAM,EAAE;QAC3B,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;QAC5B,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE;KACtE,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface McpServer {
|
|
2
|
+
name: string;
|
|
3
|
+
url: string;
|
|
4
|
+
}
|
|
5
|
+
export interface SpriteSetupOptions {
|
|
6
|
+
spriteName: string;
|
|
7
|
+
shouldCreate: boolean;
|
|
8
|
+
shouldAuthenticateClaude: boolean;
|
|
9
|
+
shouldAuthenticateCodex: boolean;
|
|
10
|
+
shouldCopyLocalCodexAuth?: boolean;
|
|
11
|
+
shouldAuthenticateGithub: boolean;
|
|
12
|
+
shouldAuthenticateMcp: boolean;
|
|
13
|
+
shouldCheckpoint: boolean;
|
|
14
|
+
checkpointComment: string;
|
|
15
|
+
gitName?: string;
|
|
16
|
+
gitEmail?: string;
|
|
17
|
+
mcpServers: McpServer[];
|
|
18
|
+
}
|
|
19
|
+
export interface SpriteBootstrapOptions {
|
|
20
|
+
spriteName: string;
|
|
21
|
+
repository: string;
|
|
22
|
+
owner: string;
|
|
23
|
+
baseBranch: string;
|
|
24
|
+
secretNames: string[];
|
|
25
|
+
shouldRequireSelectedSecrets: boolean;
|
|
26
|
+
shouldUseSecrets: boolean;
|
|
27
|
+
branchName?: string;
|
|
28
|
+
}
|
|
29
|
+
export declare function bootstrapSpriteRepository(options: SpriteBootstrapOptions): Promise<void>;
|
|
30
|
+
export declare function setupSprite(options: SpriteSetupOptions): Promise<void>;
|
|
31
|
+
export declare function spriteCli(argv: string[]): Promise<void>;
|