@iloom/cli 0.10.0 → 0.10.2
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/LICENSE +1 -1
- package/README.md +2 -2
- package/dist/{BranchNamingService-ECJHBB67.js → BranchNamingService-4OP6LOH6.js} +2 -2
- package/dist/ClaudeContextManager-ZKTUVQB2.js +14 -0
- package/dist/ClaudeService-TRWOYQ6O.js +13 -0
- package/dist/{LoomLauncher-L64HHS3T.js → LoomLauncher-FRECYMXS.js} +6 -6
- package/dist/{PromptTemplateManager-DULSVRRE.js → PromptTemplateManager-YOE2SIPG.js} +2 -2
- package/dist/README.md +2 -2
- package/dist/{SettingsManager-BQDQA3FK.js → SettingsManager-FNKCOZMQ.js} +2 -2
- package/dist/{build-5GO3XW26.js → build-VHGEMXBA.js} +6 -6
- package/dist/{chunk-ZW2LKWWE.js → chunk-2VEWSM34.js} +3 -3
- package/dist/{chunk-LXLMMXXY.js → chunk-2YZCWAVZ.js} +17 -12
- package/dist/chunk-2YZCWAVZ.js.map +1 -0
- package/dist/{chunk-UD3WJDIV.js → chunk-3F27M7ZD.js} +11 -774
- package/dist/chunk-3F27M7ZD.js.map +1 -0
- package/dist/chunk-4E7LCFUG.js +24 -0
- package/dist/chunk-4E7LCFUG.js.map +1 -0
- package/dist/{chunk-MNHZB4Z2.js → chunk-4FGEGQW4.js} +3 -3
- package/dist/{chunk-WY4QBK43.js → chunk-63QWFWH3.js} +2 -2
- package/dist/{chunk-YYAKPQBT.js → chunk-7VHJNVLF.js} +19 -9
- package/dist/chunk-7VHJNVLF.js.map +1 -0
- package/dist/chunk-BFHDVFSK.js +651 -0
- package/dist/chunk-BFHDVFSK.js.map +1 -0
- package/dist/{chunk-FB47TIJG.js → chunk-BFLMCE2U.js} +4 -23
- package/dist/chunk-BFLMCE2U.js.map +1 -0
- package/dist/{chunk-SN3SQCFK.js → chunk-BU53XIGY.js} +4 -4
- package/dist/{chunk-SF2P22EE.js → chunk-C6HNNJIV.js} +2 -2
- package/dist/{chunk-5MWV33NN.js → chunk-CVCTIDDK.js} +2 -2
- package/dist/{chunk-ZEWU5PZK.js → chunk-G5V75JD5.js} +2 -2
- package/dist/{chunk-ZHPNZC75.js → chunk-HYGUPUV5.js} +26 -21
- package/dist/chunk-HYGUPUV5.js.map +1 -0
- package/dist/{chunk-VGGST52X.js → chunk-I5T677EA.js} +2 -2
- package/dist/{chunk-VECNX6VX.js → chunk-KIK2ZFAL.js} +2 -2
- package/dist/{chunk-3D7WQM7I.js → chunk-LLHXQS3C.js} +2 -2
- package/dist/{chunk-Y4YZTHZE.js → chunk-LUKXJSRI.js} +2 -2
- package/dist/{chunk-ONQYPICO.js → chunk-PZ5WSR5Z.js} +63 -9
- package/dist/chunk-PZ5WSR5Z.js.map +1 -0
- package/dist/{chunk-J5S7DFYC.js → chunk-QFTDZ5E3.js} +2 -2
- package/dist/chunk-RJ3VBUFK.js +781 -0
- package/dist/chunk-RJ3VBUFK.js.map +1 -0
- package/dist/{chunk-UWGVCXRF.js → chunk-SKSYYBCU.js} +23 -1
- package/dist/chunk-SKSYYBCU.js.map +1 -0
- package/dist/{chunk-JO2LZ6EQ.js → chunk-SWSJWA2S.js} +2 -2
- package/dist/{chunk-4WJNIR5O.js → chunk-UUEW5KWB.js} +1 -1
- package/dist/chunk-UUEW5KWB.js.map +1 -0
- package/dist/{chunk-6EU6TCF6.js → chunk-V3SVMFDQ.js} +5 -5
- package/dist/{chunk-NRSWLOAZ.js → chunk-WXIM2WS7.js} +4 -4
- package/dist/{chunk-RYWFS37M.js → chunk-XE4BDRZD.js} +2 -2
- package/dist/{ignite-CGOV3TD4.js → chunk-ZGM2FE2R.js} +105 -73
- package/dist/chunk-ZGM2FE2R.js.map +1 -0
- package/dist/{claude-P3NQR6IJ.js → claude-LN7OWVNI.js} +2 -2
- package/dist/{cleanup-6UCPVMFG.js → cleanup-4ZM2AJDC.js} +19 -17
- package/dist/{cleanup-6UCPVMFG.js.map → cleanup-4ZM2AJDC.js.map} +1 -1
- package/dist/cli.js +167 -614
- package/dist/cli.js.map +1 -1
- package/dist/{commit-L3EPY5QG.js → commit-4CFLXRZ3.js} +12 -10
- package/dist/commit-4CFLXRZ3.js.map +1 -0
- package/dist/{compile-ZS4HYRX5.js → compile-7ALJHZ4N.js} +6 -6
- package/dist/{contribute-ORDDQGSL.js → contribute-5GKLK3BQ.js} +3 -3
- package/dist/{dev-server-FYZ2AQIH.js → dev-server-7SMIB7OF.js} +8 -8
- package/dist/{feedback-TMBXSCM5.js → feedback-EZWF5CAL.js} +10 -8
- package/dist/{feedback-TMBXSCM5.js.map → feedback-EZWF5CAL.js.map} +1 -1
- package/dist/{git-ET64COO3.js → git-GTLKAZRJ.js} +3 -3
- package/dist/ignite-MQETGFNA.js +34 -0
- package/dist/ignite-MQETGFNA.js.map +1 -0
- package/dist/index.d.ts +113 -18
- package/dist/index.js +180 -15
- package/dist/index.js.map +1 -1
- package/dist/{init-GFQ5W7GK.js → init-ZB2RITW6.js} +8 -8
- package/dist/install-deps-RLSGSHH7.js +43 -0
- package/dist/install-deps-RLSGSHH7.js.map +1 -0
- package/dist/{issues-T4ZZSPEG.js → issues-4UUAQ5K6.js} +3 -3
- package/dist/{lint-6TQXDZ3T.js → lint-AAN2NZWG.js} +6 -6
- package/dist/mcp/harness-server.js +140 -0
- package/dist/mcp/harness-server.js.map +1 -0
- package/dist/mcp/issue-management-server.js +140 -18
- package/dist/mcp/issue-management-server.js.map +1 -1
- package/dist/{open-5QZGXQRF.js → open-FXWW3VI4.js} +8 -8
- package/dist/{plan-U7ZQWLFY.js → plan-D3KSN5MU.js} +338 -36
- package/dist/plan-D3KSN5MU.js.map +1 -0
- package/dist/prompts/CLAUDE.md +2 -2
- package/dist/prompts/init-prompt.txt +102 -27
- package/dist/prompts/issue-prompt.txt +46 -0
- package/dist/prompts/plan-prompt.txt +59 -19
- package/dist/prompts/swarm-orchestrator-prompt.txt +121 -80
- package/dist/{rebase-DWIB77KV.js → rebase-62FDLIH4.js} +17 -8
- package/dist/rebase-62FDLIH4.js.map +1 -0
- package/dist/{recap-MX63HAKV.js → recap-OMBOKJST.js} +6 -6
- package/dist/{run-O3TFNQFC.js → run-BBXLRIZB.js} +8 -8
- package/dist/schema/settings.schema.json +36 -2
- package/dist/{shell-G6VC2CYR.js → shell-RF7LTND5.js} +5 -5
- package/dist/{summary-FWHAX55O.js → summary-YZI25KW4.js} +9 -9
- package/dist/{test-F7JNJZYP.js → test-SGO6I5Z7.js} +6 -6
- package/dist/{test-git-BTAOIUE2.js → test-git-XM4TM65W.js} +3 -3
- package/dist/{test-jira-CHYNV33F.js → test-jira-LDTOYFSD.js} +3 -3
- package/dist/{test-prefix-Q6TFSU6F.js → test-prefix-GBO37XCN.js} +3 -3
- package/dist/{test-webserver-EONCG7E7.js → test-webserver-NZ3JTVLL.js} +5 -5
- package/dist/{vscode-VA5X4P25.js → vscode-6XUGHJKL.js} +5 -5
- package/package.json +1 -1
- package/dist/ClaudeContextManager-QXX6ZFST.js +0 -14
- package/dist/ClaudeService-NJNK2SUH.js +0 -13
- package/dist/chunk-4WJNIR5O.js.map +0 -1
- package/dist/chunk-FB47TIJG.js.map +0 -1
- package/dist/chunk-LXLMMXXY.js.map +0 -1
- package/dist/chunk-ONQYPICO.js.map +0 -1
- package/dist/chunk-UD3WJDIV.js.map +0 -1
- package/dist/chunk-UVD4CZKS.js +0 -101
- package/dist/chunk-UVD4CZKS.js.map +0 -1
- package/dist/chunk-UWGVCXRF.js.map +0 -1
- package/dist/chunk-YYAKPQBT.js.map +0 -1
- package/dist/chunk-ZHPNZC75.js.map +0 -1
- package/dist/commit-L3EPY5QG.js.map +0 -1
- package/dist/ignite-CGOV3TD4.js.map +0 -1
- package/dist/plan-U7ZQWLFY.js.map +0 -1
- package/dist/rebase-DWIB77KV.js.map +0 -1
- /package/dist/{BranchNamingService-ECJHBB67.js.map → BranchNamingService-4OP6LOH6.js.map} +0 -0
- /package/dist/{ClaudeContextManager-QXX6ZFST.js.map → ClaudeContextManager-ZKTUVQB2.js.map} +0 -0
- /package/dist/{ClaudeService-NJNK2SUH.js.map → ClaudeService-TRWOYQ6O.js.map} +0 -0
- /package/dist/{LoomLauncher-L64HHS3T.js.map → LoomLauncher-FRECYMXS.js.map} +0 -0
- /package/dist/{PromptTemplateManager-DULSVRRE.js.map → PromptTemplateManager-YOE2SIPG.js.map} +0 -0
- /package/dist/{SettingsManager-BQDQA3FK.js.map → SettingsManager-FNKCOZMQ.js.map} +0 -0
- /package/dist/{build-5GO3XW26.js.map → build-VHGEMXBA.js.map} +0 -0
- /package/dist/{chunk-ZW2LKWWE.js.map → chunk-2VEWSM34.js.map} +0 -0
- /package/dist/{chunk-MNHZB4Z2.js.map → chunk-4FGEGQW4.js.map} +0 -0
- /package/dist/{chunk-WY4QBK43.js.map → chunk-63QWFWH3.js.map} +0 -0
- /package/dist/{chunk-SN3SQCFK.js.map → chunk-BU53XIGY.js.map} +0 -0
- /package/dist/{chunk-SF2P22EE.js.map → chunk-C6HNNJIV.js.map} +0 -0
- /package/dist/{chunk-5MWV33NN.js.map → chunk-CVCTIDDK.js.map} +0 -0
- /package/dist/{chunk-ZEWU5PZK.js.map → chunk-G5V75JD5.js.map} +0 -0
- /package/dist/{chunk-VGGST52X.js.map → chunk-I5T677EA.js.map} +0 -0
- /package/dist/{chunk-VECNX6VX.js.map → chunk-KIK2ZFAL.js.map} +0 -0
- /package/dist/{chunk-3D7WQM7I.js.map → chunk-LLHXQS3C.js.map} +0 -0
- /package/dist/{chunk-Y4YZTHZE.js.map → chunk-LUKXJSRI.js.map} +0 -0
- /package/dist/{chunk-J5S7DFYC.js.map → chunk-QFTDZ5E3.js.map} +0 -0
- /package/dist/{chunk-JO2LZ6EQ.js.map → chunk-SWSJWA2S.js.map} +0 -0
- /package/dist/{chunk-6EU6TCF6.js.map → chunk-V3SVMFDQ.js.map} +0 -0
- /package/dist/{chunk-NRSWLOAZ.js.map → chunk-WXIM2WS7.js.map} +0 -0
- /package/dist/{chunk-RYWFS37M.js.map → chunk-XE4BDRZD.js.map} +0 -0
- /package/dist/{claude-P3NQR6IJ.js.map → claude-LN7OWVNI.js.map} +0 -0
- /package/dist/{compile-ZS4HYRX5.js.map → compile-7ALJHZ4N.js.map} +0 -0
- /package/dist/{contribute-ORDDQGSL.js.map → contribute-5GKLK3BQ.js.map} +0 -0
- /package/dist/{dev-server-FYZ2AQIH.js.map → dev-server-7SMIB7OF.js.map} +0 -0
- /package/dist/{git-ET64COO3.js.map → git-GTLKAZRJ.js.map} +0 -0
- /package/dist/{init-GFQ5W7GK.js.map → init-ZB2RITW6.js.map} +0 -0
- /package/dist/{issues-T4ZZSPEG.js.map → issues-4UUAQ5K6.js.map} +0 -0
- /package/dist/{lint-6TQXDZ3T.js.map → lint-AAN2NZWG.js.map} +0 -0
- /package/dist/{open-5QZGXQRF.js.map → open-FXWW3VI4.js.map} +0 -0
- /package/dist/{recap-MX63HAKV.js.map → recap-OMBOKJST.js.map} +0 -0
- /package/dist/{run-O3TFNQFC.js.map → run-BBXLRIZB.js.map} +0 -0
- /package/dist/{shell-G6VC2CYR.js.map → shell-RF7LTND5.js.map} +0 -0
- /package/dist/{summary-FWHAX55O.js.map → summary-YZI25KW4.js.map} +0 -0
- /package/dist/{test-F7JNJZYP.js.map → test-SGO6I5Z7.js.map} +0 -0
- /package/dist/{test-git-BTAOIUE2.js.map → test-git-XM4TM65W.js.map} +0 -0
- /package/dist/{test-jira-CHYNV33F.js.map → test-jira-LDTOYFSD.js.map} +0 -0
- /package/dist/{test-prefix-Q6TFSU6F.js.map → test-prefix-GBO37XCN.js.map} +0 -0
- /package/dist/{test-webserver-EONCG7E7.js.map → test-webserver-NZ3JTVLL.js.map} +0 -0
- /package/dist/{vscode-VA5X4P25.js.map → vscode-6XUGHJKL.js.map} +0 -0
|
@@ -8,6 +8,12 @@ You are running with `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`. You have access t
|
|
|
8
8
|
|
|
9
9
|
**This is a fully autonomous workflow. Do NOT pause for user input, call AskUserQuestion, or wait for human checkpoints at any point.**
|
|
10
10
|
|
|
11
|
+
### Orchestrator Discipline: Stay Lean
|
|
12
|
+
|
|
13
|
+
You are a **coordinator**, not an executor. Your job is to schedule work, track state, and make decisions -- NOT to run heavy operations directly. All git operations (rebasing, merging, committing, pushing, conflict resolution) and any other code-level work MUST be delegated to subagents via the `Task` tool. The only commands you should run directly are lightweight reads: `cat` for metadata files, `git log`/`git status` for state checks, and `il cleanup` for worktree management.
|
|
14
|
+
|
|
15
|
+
**Why:** Running heavy operations in the orchestrator bloats its context window, risks mid-operation failures that are harder to recover from, and mixes coordination concerns with execution concerns. Subagents are disposable -- if one fails, the orchestrator can reason about the failure and retry or fail gracefully without losing its own state.
|
|
16
|
+
|
|
11
17
|
---
|
|
12
18
|
|
|
13
19
|
## Loom Recap
|
|
@@ -162,42 +168,16 @@ For each child issue, use these parameters:
|
|
|
162
168
|
- `team_name`: `"swarm-epic-{{EPIC_ISSUE_NUMBER}}"`
|
|
163
169
|
- `name`: `"issue-<child-number>"`
|
|
164
170
|
|
|
165
|
-
The prompt
|
|
166
|
-
|
|
167
|
-
```
|
|
168
|
-
You are working on issue #<child-number>: "<child-title>"
|
|
169
|
-
|
|
170
|
-
**Worktree path:** `<child-worktree-path>`
|
|
171
|
-
|
|
172
|
-
IMPORTANT: You MUST work in this worktree path. cd to it first before doing anything:
|
|
173
|
-
cd <child-worktree-path>
|
|
174
|
-
|
|
175
|
-
All file reads, writes, searches, and git operations must happen within this directory. Do NOT work in the epic worktree or any other child's worktree.
|
|
171
|
+
**CRITICAL: The task prompt MUST contain only the issue number and worktree path. Do NOT include the issue title, issue body, analysis, planning details, implementation instructions, code snippets, or any other content from CHILD_ISSUES. The child agent retrieves all issue context itself via `mcp__issue_management__get_issue` as its first action.**
|
|
176
172
|
|
|
177
|
-
|
|
173
|
+
The prompt for each child agent should be exactly:
|
|
178
174
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
-
|
|
182
|
-
- Do NOT pick up tasks from the team task list. You have exactly one job.
|
|
183
|
-
|
|
184
|
-
**Issue body:**
|
|
185
|
-
<child-issue-body>
|
|
186
|
-
|
|
187
|
-
Implement this issue following your workflow instructions.
|
|
188
|
-
|
|
189
|
-
## After Completion
|
|
190
|
-
|
|
191
|
-
When your implementation is done, report back with:
|
|
192
|
-
- Issue number
|
|
193
|
-
- Status (success or failed)
|
|
194
|
-
- Brief summary of what was implemented or what went wrong
|
|
195
|
-
- Number of files changed (if successful)
|
|
196
|
-
|
|
197
|
-
After sending your report, STOP. Do not look for more work. Do not check on other issues. Do not attempt to help with other worktrees. Wait for a shutdown request and approve it.
|
|
175
|
+
```
|
|
176
|
+
Issue: #<child-number>
|
|
177
|
+
Worktree: <child-worktree-path>
|
|
198
178
|
```
|
|
199
179
|
|
|
200
|
-
|
|
180
|
+
Nothing else. No title. No body. No instructions. No context. The child's system prompt defines everything it needs to do.
|
|
201
181
|
|
|
202
182
|
Update each child's tracking status to `in_progress`.
|
|
203
183
|
|
|
@@ -213,35 +193,68 @@ This is the core orchestration loop. After spawning initial agents, monitor for
|
|
|
213
193
|
|
|
214
194
|
When a child agent reports back with status `success` (or goes idle after completing its tasks):
|
|
215
195
|
|
|
216
|
-
#### Step 3.1: Merge the Child's Branch
|
|
196
|
+
#### Step 3.1: Rebase and Merge the Child's Branch
|
|
217
197
|
|
|
218
|
-
|
|
198
|
+
**Delegate this entire operation to a subagent.** Do NOT run git rebase, merge, or conflict resolution commands directly in the orchestrator.
|
|
199
|
+
|
|
200
|
+
Spawn a subagent using the `Task` tool:
|
|
201
|
+
- `subagent_type`: `"general-purpose"`
|
|
202
|
+
- Prompt:
|
|
219
203
|
|
|
220
|
-
```bash
|
|
221
|
-
cd <child-worktree-path>
|
|
222
|
-
git rebase epic/{{EPIC_ISSUE_NUMBER}}
|
|
223
|
-
cd {{EPIC_WORKTREE_PATH}}
|
|
224
|
-
git merge --ff-only <child-branch-name>
|
|
225
204
|
```
|
|
205
|
+
Rebase and merge child branch `<child-branch-name>` (issue #<child-number>: "<child-title>") into the epic branch.
|
|
206
|
+
|
|
207
|
+
## Instructions
|
|
208
|
+
|
|
209
|
+
1. Rebase the child branch onto the epic branch FROM THE CHILD'S WORKTREE (git refuses to rebase a branch checked out in another worktree):
|
|
210
|
+
```bash
|
|
211
|
+
cd <child-worktree-path>
|
|
212
|
+
git rebase epic/{{EPIC_ISSUE_NUMBER}}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
2. If the rebase has conflicts, resolve them:
|
|
216
|
+
- Understand the intent of both sides
|
|
217
|
+
- Stage resolved files with `git add`
|
|
218
|
+
- Run `git rebase --continue`
|
|
219
|
+
- Repeat for any remaining conflicts
|
|
220
|
+
- Ensure the code compiles after resolution
|
|
226
221
|
|
|
227
|
-
|
|
222
|
+
3. After the rebase succeeds, fast-forward merge from the epic worktree:
|
|
223
|
+
```bash
|
|
224
|
+
cd {{EPIC_WORKTREE_PATH}}
|
|
225
|
+
git merge --ff-only <child-branch-name>
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
4. After the merge succeeds, install dependencies in the epic worktree to ensure subsequent workers have up-to-date dependencies:
|
|
229
|
+
```bash
|
|
230
|
+
cd {{EPIC_WORKTREE_PATH}}
|
|
231
|
+
il install-deps
|
|
232
|
+
```
|
|
233
|
+
This handles all install resolution automatically (iloom config scripts, package.json scripts, Node.js lockfile detection). It silently skips if no install mechanism is found.
|
|
228
234
|
|
|
229
|
-
**
|
|
235
|
+
**IMPORTANT**: If the install command fails, do NOT treat the merge as failed. The merge (rebase + fast-forward) already succeeded. Log the install failure as a warning and continue.
|
|
230
236
|
|
|
231
|
-
|
|
237
|
+
5. Report back with two separate statuses:
|
|
238
|
+
- **Merge outcome**: "success" or "failed" (covers rebase + fast-forward merge)
|
|
239
|
+
- If conflicts were resolved, briefly describe what was resolved
|
|
240
|
+
- If merge failed, explain why (e.g., "Rebase conflict could not be resolved" or specific error)
|
|
241
|
+
- **Install outcome**: "success", "failed", or "skipped"
|
|
242
|
+
- If success, state which install mechanism was used (e.g., "pnpm install --frozen-lockfile" or "iloom config install script")
|
|
243
|
+
- If failed, include the error output as a warning (merge is still considered successful)
|
|
244
|
+
- If skipped, state why (e.g., "No install mechanism found")
|
|
232
245
|
|
|
233
|
-
|
|
246
|
+
IMPORTANT: Use rebase + fast-forward merge, NOT merge commits. This keeps the epic branch history linear and clean.
|
|
247
|
+
```
|
|
234
248
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
- Skip to Phase 4 failure handling for this child
|
|
249
|
+
**Handle the subagent result:**
|
|
250
|
+
- If the subagent reports **Merge outcome: "success"**: proceed to Step 3.2
|
|
251
|
+
(Install outcome is informational only — log it but do not affect merge status)
|
|
252
|
+
- If the subagent reports **Merge outcome: "failed"**:
|
|
253
|
+
- Ensure the rebase is aborted (spawn another subagent if needed): `cd <child-worktree-path> && git rebase --abort`
|
|
254
|
+
- Mark the child as `failed` with reason from the subagent's report
|
|
255
|
+
- Skip to Phase 4 failure handling for this child
|
|
243
256
|
|
|
244
|
-
#### Step 3.
|
|
257
|
+
#### Step 3.2: Ensure Completion Comment Exists
|
|
245
258
|
|
|
246
259
|
Child agents are expected to post a summary comment on their issue when they finish. However, if a child agent completes without posting a comment, the orchestrator must post one on its behalf.
|
|
247
260
|
|
|
@@ -252,7 +265,7 @@ Child agents are expected to post a summary comment on their issue when they fin
|
|
|
252
265
|
- `body`: A summary including: what was implemented, the branch name, and that it was merged into the epic branch
|
|
253
266
|
3. Log any new comment as an artifact: Call `mcp__recap__add_artifact` with `{ type: "comment", primaryUrl: "<comment-url>", description: "Completion comment for #<child-number>", worktreePath: "<child-worktree-path>" }`
|
|
254
267
|
|
|
255
|
-
#### Step 3.
|
|
268
|
+
#### Step 3.3: Update State
|
|
256
269
|
|
|
257
270
|
1. Update the child's tracking status to `done`
|
|
258
271
|
2. Update the child's loom state: Call `mcp__recap__set_loom_state` with `{ state: "done", worktreePath: "<child-worktree-path>" }`
|
|
@@ -261,22 +274,32 @@ Child agents are expected to post a summary comment on their issue when they fin
|
|
|
261
274
|
|
|
262
275
|
{{#if DRAFT_PR_MODE}}
|
|
263
276
|
{{#if AUTO_COMMIT_PUSH}}
|
|
264
|
-
#### Step 3.
|
|
277
|
+
#### Step 3.3.5: Push Epic Branch to Remote (Incremental)
|
|
278
|
+
|
|
279
|
+
**Delegate this to a subagent.** After each successful child merge, push the epic branch to remote so the draft PR reflects incremental progress.
|
|
265
280
|
|
|
266
|
-
|
|
281
|
+
Spawn a subagent using the `Task` tool:
|
|
282
|
+
- `subagent_type`: `"general-purpose"`
|
|
283
|
+
- Prompt:
|
|
284
|
+
|
|
285
|
+
```
|
|
286
|
+
Push the epic branch to remote from the epic worktree.
|
|
267
287
|
|
|
268
288
|
```bash
|
|
269
289
|
cd {{EPIC_WORKTREE_PATH}}
|
|
270
290
|
git push --force-with-lease {{GIT_REMOTE}} HEAD
|
|
271
291
|
```
|
|
272
292
|
|
|
273
|
-
|
|
293
|
+
NOTE: --force-with-lease is required because the remote branch may still have the placeholder commit (on first push) or because the history was rewritten by a previous force push.
|
|
274
294
|
|
|
275
|
-
|
|
295
|
+
Report back with status: "success" or "failed" and any error output.
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
**Error handling**: If the subagent reports a push failure, log the error and continue. Do NOT fail the swarm or skip remaining children. The work is committed locally and will be pushed either by a later successful push or by `il finish`.
|
|
276
299
|
|
|
277
300
|
{{/if}}
|
|
278
301
|
{{/if}}
|
|
279
|
-
#### Step 3.
|
|
302
|
+
#### Step 3.3.6: Clean Up Child Worktree
|
|
280
303
|
|
|
281
304
|
{{#unless NO_CLEANUP}}
|
|
282
305
|
After the child's state is updated to `done`, clean up its worktree and archive its metadata by running `il cleanup --archive`. Since the child's work is already rebased and merged into the epic branch, we only need to remove the worktree and branch while preserving metadata.
|
|
@@ -294,7 +317,7 @@ If the `il cleanup` command fails, log the error but continue with the orchestra
|
|
|
294
317
|
**Note:** Child loom cleanup is disabled (`--skip-cleanup` flag). Child worktrees will be preserved after the swarm completes.
|
|
295
318
|
{{/if}}
|
|
296
319
|
|
|
297
|
-
#### Step 3.
|
|
320
|
+
#### Step 3.4: Check for Newly Unblocked Issues
|
|
298
321
|
|
|
299
322
|
After a child completes:
|
|
300
323
|
1. Remove the completed child's issue number from all other children's `blockedBy` lists
|
|
@@ -357,7 +380,14 @@ Use `TeamDelete` to clean up the team `swarm-epic-{{EPIC_ISSUE_NUMBER}}`.
|
|
|
357
380
|
|
|
358
381
|
### Step 5.3: Final Commit on Epic Branch
|
|
359
382
|
|
|
360
|
-
If at least one child succeeded,
|
|
383
|
+
If at least one child succeeded, **delegate the final commit to a subagent.**
|
|
384
|
+
|
|
385
|
+
Spawn a subagent using the `Task` tool:
|
|
386
|
+
- `subagent_type`: `"general-purpose"`
|
|
387
|
+
- Prompt:
|
|
388
|
+
|
|
389
|
+
```
|
|
390
|
+
Create the final commit on the epic branch that closes the epic issue.
|
|
361
391
|
|
|
362
392
|
```bash
|
|
363
393
|
cd {{EPIC_WORKTREE_PATH}}
|
|
@@ -365,36 +395,47 @@ git add -A
|
|
|
365
395
|
git commit --allow-empty -m "Fixes {{ISSUE_PREFIX}}{{EPIC_ISSUE_NUMBER}}"
|
|
366
396
|
```
|
|
367
397
|
|
|
368
|
-
|
|
398
|
+
NOTE: --allow-empty is used because the child branches have already been merged — there may be no additional staged changes, but we still need the commit message to trigger issue closure.
|
|
399
|
+
|
|
400
|
+
Report back with status: "success" or "failed" and the commit hash if successful.
|
|
401
|
+
```
|
|
369
402
|
|
|
370
403
|
{{#if DRAFT_PR_MODE}}
|
|
371
404
|
{{#if AUTO_COMMIT_PUSH}}
|
|
372
405
|
### Step 5.3.5: Push Epic Branch to Remote (Final Commit)
|
|
373
406
|
|
|
374
|
-
After the final "Fixes" commit, push the epic branch to remote so the draft PR includes the issue-closing trailer.
|
|
407
|
+
After the final "Fixes" commit, push the epic branch to remote so the draft PR includes the issue-closing trailer. **Delegate this to a subagent.**
|
|
375
408
|
|
|
376
|
-
**Note**: Incremental pushes in Step 3.
|
|
409
|
+
**Note**: Incremental pushes in Step 3.3.5 should have already pushed merged child work. This final push adds the "Fixes" commit.
|
|
377
410
|
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
411
|
+
First, check if push is needed (this is a lightweight read, OK to do directly):
|
|
412
|
+
```bash
|
|
413
|
+
cd {{EPIC_WORKTREE_PATH}}
|
|
414
|
+
git log -1 --format=%s
|
|
415
|
+
```
|
|
416
|
+
- If the latest commit message starts with `[iloom-placeholder]` or `[iloom] Temporary`, no children succeeded. Skip the push.
|
|
384
417
|
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
418
|
+
If a push is needed, spawn a subagent using the `Task` tool:
|
|
419
|
+
- `subagent_type`: `"general-purpose"`
|
|
420
|
+
- Prompt:
|
|
421
|
+
|
|
422
|
+
```
|
|
423
|
+
Push the epic branch to remote (final commit with Fixes trailer).
|
|
391
424
|
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
425
|
+
```bash
|
|
426
|
+
cd {{EPIC_WORKTREE_PATH}}
|
|
427
|
+
git push --force-with-lease {{GIT_REMOTE}} HEAD
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
NOTE: --force-with-lease is required because the branch history includes rebased child commits.
|
|
431
|
+
|
|
432
|
+
Report back with status: "success" or "failed" and any error output.
|
|
433
|
+
```
|
|
395
434
|
|
|
396
|
-
|
|
397
|
-
|
|
435
|
+
**Handle the subagent result:**
|
|
436
|
+
- If push fails: Log the error but do NOT fail the swarm. The work is committed locally and `il finish` will handle the push.
|
|
437
|
+
- Do NOT retry automatically.
|
|
438
|
+
- If push succeeds: Log "Epic branch pushed to remote. Draft PR #{{DRAFT_PR_NUMBER}} updated with final commit."
|
|
398
439
|
|
|
399
440
|
{{/if}}
|
|
400
441
|
{{/if}}
|
|
@@ -2,23 +2,23 @@
|
|
|
2
2
|
import {
|
|
3
3
|
BuildRunner,
|
|
4
4
|
MergeManager
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-2YZCWAVZ.js";
|
|
6
6
|
import {
|
|
7
7
|
installDependencies
|
|
8
8
|
} from "./chunk-WWKOVDWC.js";
|
|
9
9
|
import {
|
|
10
10
|
GitWorktreeManager
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-I5T677EA.js";
|
|
12
12
|
import "./chunk-MORRVYPT.js";
|
|
13
13
|
import "./chunk-YQ57ORTV.js";
|
|
14
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-PZ5WSR5Z.js";
|
|
15
15
|
import {
|
|
16
16
|
getWorktreeRoot,
|
|
17
17
|
isValidGitRepo
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-4FGEGQW4.js";
|
|
19
19
|
import {
|
|
20
20
|
SettingsManager
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-7VHJNVLF.js";
|
|
22
22
|
import "./chunk-KB64WNBZ.js";
|
|
23
23
|
import "./chunk-6MLEBAYZ.js";
|
|
24
24
|
import {
|
|
@@ -93,9 +93,10 @@ var RebaseCommand = class {
|
|
|
93
93
|
}
|
|
94
94
|
const mergeOptions = {
|
|
95
95
|
dryRun: options.dryRun ?? false,
|
|
96
|
-
force: options.force ?? false
|
|
96
|
+
force: options.force ?? false,
|
|
97
|
+
jsonStream: options.jsonStream ?? false
|
|
97
98
|
};
|
|
98
|
-
await this.mergeManager.rebaseOnMain(worktreePath, mergeOptions);
|
|
99
|
+
const outcome = await this.mergeManager.rebaseOnMain(worktreePath, mergeOptions);
|
|
99
100
|
if (!options.dryRun) {
|
|
100
101
|
logger.info("Installing dependencies...");
|
|
101
102
|
try {
|
|
@@ -109,6 +110,14 @@ var RebaseCommand = class {
|
|
|
109
110
|
logger.info("[DRY RUN] Would install dependencies");
|
|
110
111
|
}
|
|
111
112
|
await this.runPostRebaseBuild(worktreePath, options);
|
|
113
|
+
if (options.jsonStream) {
|
|
114
|
+
return {
|
|
115
|
+
success: true,
|
|
116
|
+
conflictsDetected: outcome.conflictsDetected,
|
|
117
|
+
claudeLaunched: outcome.claudeLaunched,
|
|
118
|
+
conflictsResolved: outcome.conflictsResolved
|
|
119
|
+
};
|
|
120
|
+
}
|
|
112
121
|
}
|
|
113
122
|
/**
|
|
114
123
|
* Run post-rebase build for CLI projects
|
|
@@ -139,4 +148,4 @@ export {
|
|
|
139
148
|
RebaseCommand,
|
|
140
149
|
WorktreeValidationError
|
|
141
150
|
};
|
|
142
|
-
//# sourceMappingURL=rebase-
|
|
151
|
+
//# sourceMappingURL=rebase-62FDLIH4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/rebase.ts"],"sourcesContent":["import { logger } from '../utils/logger.js'\nimport { MergeManager } from '../lib/MergeManager.js'\nimport { GitWorktreeManager } from '../lib/GitWorktreeManager.js'\nimport { SettingsManager } from '../lib/SettingsManager.js'\nimport { BuildRunner } from '../lib/BuildRunner.js'\nimport { isValidGitRepo, getWorktreeRoot } from '../utils/git.js'\nimport { installDependencies } from '../utils/package-manager.js'\nimport type { MergeOptions, RebaseResult } from '../types/index.js'\n\nexport interface RebaseOptions {\n\tforce?: boolean\n\tdryRun?: boolean\n\tjsonStream?: boolean\n}\n\n/**\n * Error thrown when the rebase command is run from an invalid location\n */\nexport class WorktreeValidationError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic readonly suggestion: string\n\t) {\n\t\tsuper(message)\n\t\tthis.name = 'WorktreeValidationError'\n\t}\n}\n\n/**\n * RebaseCommand: Rebase current branch on main with Claude-assisted conflict resolution\n *\n * This command:\n * 1. Validates the current directory is an iloom-managed worktree\n * 2. Detects the worktree root (supports running from subdirectories)\n * 3. Delegates to MergeManager.rebaseOnMain() which handles:\n * - Checking main branch exists\n * - Detecting uncommitted changes (throws if found)\n * - Checking if already up-to-date\n * - Executing rebase\n * - Claude-assisted conflict resolution\n * 4. Reports success\n */\nexport class RebaseCommand {\n\tprivate mergeManager: MergeManager\n\tprivate gitWorktreeManager: GitWorktreeManager\n\tprivate settingsManager: SettingsManager\n\tprivate buildRunner: BuildRunner\n\n\tconstructor(mergeManager?: MergeManager, gitWorktreeManager?: GitWorktreeManager, settingsManager?: SettingsManager, buildRunner?: BuildRunner) {\n\t\tthis.mergeManager = mergeManager ?? new MergeManager()\n\t\tthis.gitWorktreeManager = gitWorktreeManager ?? new GitWorktreeManager()\n\t\tthis.settingsManager = settingsManager ?? new SettingsManager()\n\t\tthis.buildRunner = buildRunner ?? new BuildRunner()\n\t}\n\n\t/**\n\t * Validate that the current directory is within an iloom-managed worktree\n\t * Returns the worktree root path if valid\n\t * @throws WorktreeValidationError if validation fails\n\t */\n\tprivate async validateWorktreeContext(): Promise<string> {\n\t\tconst currentDir = process.cwd()\n\n\t\t// Step 1: Check if we're in a git repository at all\n\t\tconst isGitRepo = await isValidGitRepo(currentDir)\n\t\tif (!isGitRepo) {\n\t\t\tthrow new WorktreeValidationError(\n\t\t\t\t'Not a git repository.',\n\t\t\t\t\"Run 'il rebase' from within an iloom worktree created by 'il start'.\"\n\t\t\t)\n\t\t}\n\n\t\t// Step 2: Get the worktree root (handles subdirectories)\n\t\tconst worktreeRoot = await getWorktreeRoot(currentDir)\n\t\tif (!worktreeRoot) {\n\t\t\tthrow new WorktreeValidationError(\n\t\t\t\t'Could not determine repository root.',\n\t\t\t\t\"Run 'il rebase' from within an iloom worktree created by 'il start'.\"\n\t\t\t)\n\t\t}\n\n\t\t// Step 3: Check if this path is a registered git worktree\n\t\tconst worktrees = await this.gitWorktreeManager.listWorktrees()\n\t\tconst currentWorktree = worktrees.find(wt => wt.path === worktreeRoot)\n\n\t\tif (!currentWorktree) {\n\t\t\tthrow new WorktreeValidationError(\n\t\t\t\t'This directory is not an iloom worktree.',\n\t\t\t\t\"Run 'il rebase' from within a worktree created by 'il start <issue>'. Use 'il list' to see available worktrees.\"\n\t\t\t)\n\t\t}\n\n\t\t// Step 4: Check if this is the main worktree (we shouldn't rebase from main)\n\t\tconst isMain = await this.gitWorktreeManager.isMainWorktree(currentWorktree, this.settingsManager)\n\t\tif (isMain) {\n\t\t\tthrow new WorktreeValidationError(\n\t\t\t\t'Cannot rebase from the main worktree.',\n\t\t\t\t\"Navigate to a feature worktree created by 'il start <issue>' and run 'il rebase' from there.\"\n\t\t\t)\n\t\t}\n\n\t\treturn worktreeRoot\n\t}\n\n\tasync execute(options: RebaseOptions = {}): Promise<RebaseResult | void> {\n\t\t// Set ILOOM=1 so hooks know this is an iloom session\n\t\tprocess.env.ILOOM = '1'\n\n\t\t// Step 1: Validate we're in a valid iloom worktree\n\t\tlet worktreePath: string\n\t\ttry {\n\t\t\tworktreePath = await this.validateWorktreeContext()\n\t\t} catch (error) {\n\t\t\tif (error instanceof WorktreeValidationError) {\n\t\t\t\tlogger.error(error.message)\n\t\t\t\tlogger.info(error.suggestion)\n\t\t\t\tthrow error\n\t\t\t}\n\t\t\tthrow error\n\t\t}\n\n\t\tconst mergeOptions: MergeOptions = {\n\t\t\tdryRun: options.dryRun ?? false,\n\t\t\tforce: options.force ?? false,\n\t\t\tjsonStream: options.jsonStream ?? false,\n\t\t}\n\n\t\t// MergeManager.rebaseOnMain() handles:\n\t\t// - Checking main branch exists\n\t\t// - Detecting uncommitted changes (throws if found)\n\t\t// - Checking if already up-to-date\n\t\t// - Executing rebase\n\t\t// - Claude-assisted conflict resolution\n\t\tconst outcome = await this.mergeManager.rebaseOnMain(worktreePath, mergeOptions)\n\n\t\t// Install dependencies after successful rebase\n\t\tif (!options.dryRun) {\n\t\t\tlogger.info('Installing dependencies...')\n\t\t\ttry {\n\t\t\t\tawait installDependencies(worktreePath, true, true) // frozen=true, quiet=true\n\t\t\t} catch (error) {\n\t\t\t\t// Log warning but don't fail - rebase succeeded, user can fix deps manually\n\t\t\t\tconst message = error instanceof Error ? error.message : 'Unknown error'\n\t\t\t\tlogger.warn(`Dependency installation failed: ${message}`)\n\t\t\t\tlogger.warn('Please run your package manager install command manually')\n\t\t\t}\n\t\t} else {\n\t\t\tlogger.info('[DRY RUN] Would install dependencies')\n\t\t}\n\n\t\t// Run build for CLI projects after successful rebase\n\t\tawait this.runPostRebaseBuild(worktreePath, options)\n\n\t\t// Return result if jsonStream mode\n\t\tif (options.jsonStream) {\n\t\t\treturn {\n\t\t\t\tsuccess: true,\n\t\t\t\tconflictsDetected: outcome.conflictsDetected,\n\t\t\t\tclaudeLaunched: outcome.claudeLaunched,\n\t\t\t\tconflictsResolved: outcome.conflictsResolved,\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Run post-rebase build for CLI projects\n\t * Non-blocking: build failures are logged as warnings but don't fail the rebase\n\t */\n\tprivate async runPostRebaseBuild(worktreePath: string, options: RebaseOptions): Promise<void> {\n\t\tif (options.dryRun) {\n\t\t\tlogger.info('[DRY RUN] Would run post-rebase build for CLI projects')\n\t\t\treturn\n\t\t}\n\n\t\ttry {\n\t\t\tconst buildResult = await this.buildRunner.runBuild(worktreePath, {\n\t\t\t\tdryRun: options.dryRun ?? false,\n\t\t\t})\n\n\t\t\tif (buildResult.skipped) {\n\t\t\t\tlogger.debug(`Build skipped: ${buildResult.reason}`)\n\t\t\t} else {\n\t\t\t\tlogger.success('Post-rebase build completed successfully')\n\t\t\t}\n\t\t} catch (error) {\n\t\t\t// Log warning but don't fail - rebase succeeded, user can fix build manually\n\t\t\tconst message = error instanceof Error ? error.message : 'Unknown error'\n\t\t\tlogger.warn(`Post-rebase build failed: ${message}`)\n\t\t\tlogger.warn('Please run the build command manually')\n\t\t}\n\t}\n}\n"],"mappings":"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","names":[]}
|
|
@@ -4,15 +4,15 @@ import {
|
|
|
4
4
|
} from "./chunk-NXMDEL3F.js";
|
|
5
5
|
import {
|
|
6
6
|
findArchivedRecap
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-LUKXJSRI.js";
|
|
8
8
|
import {
|
|
9
9
|
IdentifierParser
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-63QWFWH3.js";
|
|
11
11
|
import {
|
|
12
12
|
GitWorktreeManager
|
|
13
|
-
} from "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
13
|
+
} from "./chunk-I5T677EA.js";
|
|
14
|
+
import "./chunk-4FGEGQW4.js";
|
|
15
|
+
import "./chunk-7VHJNVLF.js";
|
|
16
16
|
import "./chunk-KB64WNBZ.js";
|
|
17
17
|
import "./chunk-6MLEBAYZ.js";
|
|
18
18
|
import "./chunk-VT4PDUYT.js";
|
|
@@ -135,4 +135,4 @@ var RecapCommand = class {
|
|
|
135
135
|
export {
|
|
136
136
|
RecapCommand
|
|
137
137
|
};
|
|
138
|
-
//# sourceMappingURL=recap-
|
|
138
|
+
//# sourceMappingURL=recap-OMBOKJST.js.map
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
DevServerManager
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-CVCTIDDK.js";
|
|
5
|
+
import "./chunk-G5V75JD5.js";
|
|
6
6
|
import {
|
|
7
7
|
getWorkspacePort
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-LLHXQS3C.js";
|
|
9
9
|
import "./chunk-WWKOVDWC.js";
|
|
10
10
|
import {
|
|
11
11
|
IdentifierParser
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-63QWFWH3.js";
|
|
13
13
|
import {
|
|
14
14
|
GitWorktreeManager
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-I5T677EA.js";
|
|
16
16
|
import {
|
|
17
17
|
openBrowser
|
|
18
18
|
} from "./chunk-YETJNRQM.js";
|
|
@@ -25,10 +25,10 @@ import {
|
|
|
25
25
|
} from "./chunk-GYCR2LOU.js";
|
|
26
26
|
import {
|
|
27
27
|
extractIssueNumber
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-4FGEGQW4.js";
|
|
29
29
|
import {
|
|
30
30
|
SettingsManager
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-7VHJNVLF.js";
|
|
32
32
|
import "./chunk-KB64WNBZ.js";
|
|
33
33
|
import "./chunk-6MLEBAYZ.js";
|
|
34
34
|
import {
|
|
@@ -238,4 +238,4 @@ Make sure the project is built (run 'il start' first)`
|
|
|
238
238
|
export {
|
|
239
239
|
RunCommand
|
|
240
240
|
};
|
|
241
|
-
//# sourceMappingURL=run-
|
|
241
|
+
//# sourceMappingURL=run-BBXLRIZB.js.map
|
|
@@ -197,6 +197,15 @@
|
|
|
197
197
|
],
|
|
198
198
|
"description": "Claude model shorthand: sonnet, opus, or haiku"
|
|
199
199
|
},
|
|
200
|
+
"swarmModel": {
|
|
201
|
+
"type": "string",
|
|
202
|
+
"enum": [
|
|
203
|
+
"sonnet",
|
|
204
|
+
"opus",
|
|
205
|
+
"haiku"
|
|
206
|
+
],
|
|
207
|
+
"description": "Model to use for this agent in swarm mode. Overrides the base model when running inside swarm workers."
|
|
208
|
+
},
|
|
200
209
|
"enabled": {
|
|
201
210
|
"type": "boolean",
|
|
202
211
|
"description": "Whether this agent is enabled. Defaults to true."
|
|
@@ -233,6 +242,15 @@
|
|
|
233
242
|
],
|
|
234
243
|
"description": "Claude model shorthand: sonnet, opus, or haiku"
|
|
235
244
|
},
|
|
245
|
+
"swarmModel": {
|
|
246
|
+
"type": "string",
|
|
247
|
+
"enum": [
|
|
248
|
+
"sonnet",
|
|
249
|
+
"opus",
|
|
250
|
+
"haiku"
|
|
251
|
+
],
|
|
252
|
+
"description": "Model to use for this agent in swarm mode. Overrides the base model when running inside swarm workers."
|
|
253
|
+
},
|
|
236
254
|
"enabled": {
|
|
237
255
|
"type": "boolean",
|
|
238
256
|
"description": "Whether this agent is enabled. Defaults to true."
|
|
@@ -258,7 +276,14 @@
|
|
|
258
276
|
},
|
|
259
277
|
"additionalProperties": false
|
|
260
278
|
},
|
|
261
|
-
"description": "Nested per-agent
|
|
279
|
+
"description": "Nested per-agent settings. Only meaningful under the iloom-swarm-worker agent entry for sub-agent timeout configuration."
|
|
280
|
+
},
|
|
281
|
+
"subAgentTimeout": {
|
|
282
|
+
"type": "number",
|
|
283
|
+
"minimum": 1,
|
|
284
|
+
"maximum": 120,
|
|
285
|
+
"default": 10,
|
|
286
|
+
"description": "Timeout in minutes for sub-agent claude -p invocations in swarm mode. Applies to each phase agent (evaluator, analyzer, planner, implementer) when invoked via the Bash tool. Default: 10 minutes. Only meaningful under the iloom-swarm-worker agent entry."
|
|
262
287
|
}
|
|
263
288
|
},
|
|
264
289
|
"additionalProperties": false
|
|
@@ -270,7 +295,7 @@
|
|
|
270
295
|
"type": "null"
|
|
271
296
|
}
|
|
272
297
|
],
|
|
273
|
-
"description": "Per-agent configuration overrides. Available agents: iloom-issue-analyzer (analyzes issues), iloom-issue-planner (creates implementation plans), iloom-issue-analyze-and-plan (combined analysis and planning), iloom-issue-complexity-evaluator (evaluates complexity), iloom-issue-enhancer (enhances issue descriptions), iloom-issue-implementer (implements code changes), iloom-code-reviewer (reviews code changes against requirements), iloom-artifact-reviewer (reviews artifacts before posting), iloom-swarm-worker (swarm worker agent, dynamically generated).
|
|
298
|
+
"description": "Per-agent configuration overrides. Available agents: iloom-issue-analyzer (analyzes issues), iloom-issue-planner (creates implementation plans), iloom-issue-analyze-and-plan (combined analysis and planning), iloom-issue-complexity-evaluator (evaluates complexity), iloom-issue-enhancer (enhances issue descriptions), iloom-issue-implementer (implements code changes), iloom-code-reviewer (reviews code changes against requirements), iloom-artifact-reviewer (reviews artifacts before posting), iloom-swarm-worker (swarm worker agent, dynamically generated). Use swarmModel on any agent to override its model in swarm mode."
|
|
274
299
|
},
|
|
275
300
|
"spin": {
|
|
276
301
|
"type": "object",
|
|
@@ -284,6 +309,15 @@
|
|
|
284
309
|
],
|
|
285
310
|
"default": "opus",
|
|
286
311
|
"description": "Claude model shorthand for spin orchestrator"
|
|
312
|
+
},
|
|
313
|
+
"swarmModel": {
|
|
314
|
+
"type": "string",
|
|
315
|
+
"enum": [
|
|
316
|
+
"sonnet",
|
|
317
|
+
"opus",
|
|
318
|
+
"haiku"
|
|
319
|
+
],
|
|
320
|
+
"description": "Model for the spin orchestrator when running in swarm mode. Overrides spin.model for swarm workflows."
|
|
287
321
|
}
|
|
288
322
|
},
|
|
289
323
|
"additionalProperties": false,
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
IdentifierParser
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-63QWFWH3.js";
|
|
5
5
|
import {
|
|
6
6
|
GitWorktreeManager
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-I5T677EA.js";
|
|
8
8
|
import {
|
|
9
9
|
extractIssueNumber
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-4FGEGQW4.js";
|
|
11
11
|
import {
|
|
12
12
|
SettingsManager
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-7VHJNVLF.js";
|
|
14
14
|
import {
|
|
15
15
|
MetadataManager
|
|
16
16
|
} from "./chunk-KB64WNBZ.js";
|
|
@@ -242,4 +242,4 @@ var ShellCommand = class {
|
|
|
242
242
|
export {
|
|
243
243
|
ShellCommand
|
|
244
244
|
};
|
|
245
|
-
//# sourceMappingURL=shell-
|
|
245
|
+
//# sourceMappingURL=shell-RF7LTND5.js.map
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
SessionSummaryService
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-V3SVMFDQ.js";
|
|
5
5
|
import "./chunk-NXMDEL3F.js";
|
|
6
6
|
import {
|
|
7
7
|
PRManager
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-2VEWSM34.js";
|
|
9
|
+
import "./chunk-SWSJWA2S.js";
|
|
10
10
|
import "./chunk-4232AHNQ.js";
|
|
11
11
|
import {
|
|
12
12
|
GitWorktreeManager
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-I5T677EA.js";
|
|
14
14
|
import "./chunk-YETJNRQM.js";
|
|
15
15
|
import "./chunk-FXDYIV3K.js";
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-PZ5WSR5Z.js";
|
|
17
|
+
import "./chunk-UUEW5KWB.js";
|
|
18
18
|
import {
|
|
19
19
|
extractIssueNumber
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-4FGEGQW4.js";
|
|
21
21
|
import {
|
|
22
22
|
SettingsManager
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-7VHJNVLF.js";
|
|
24
24
|
import {
|
|
25
25
|
MetadataManager
|
|
26
26
|
} from "./chunk-KB64WNBZ.js";
|
|
@@ -282,4 +282,4 @@ Please provide an issue number, PR number, or branch name.`
|
|
|
282
282
|
export {
|
|
283
283
|
SummaryCommand
|
|
284
284
|
};
|
|
285
|
-
//# sourceMappingURL=summary-
|
|
285
|
+
//# sourceMappingURL=summary-YZI25KW4.js.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
ScriptCommandBase
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-WXIM2WS7.js";
|
|
5
5
|
import "./chunk-WWKOVDWC.js";
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-63QWFWH3.js";
|
|
7
|
+
import "./chunk-I5T677EA.js";
|
|
8
8
|
import "./chunk-YQ57ORTV.js";
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-4FGEGQW4.js";
|
|
10
|
+
import "./chunk-7VHJNVLF.js";
|
|
11
11
|
import "./chunk-KB64WNBZ.js";
|
|
12
12
|
import "./chunk-6MLEBAYZ.js";
|
|
13
13
|
import "./chunk-VT4PDUYT.js";
|
|
@@ -24,4 +24,4 @@ var TestCommand = class extends ScriptCommandBase {
|
|
|
24
24
|
export {
|
|
25
25
|
TestCommand
|
|
26
26
|
};
|
|
27
|
-
//# sourceMappingURL=test-
|
|
27
|
+
//# sourceMappingURL=test-SGO6I5Z7.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
findMainWorktreePath
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-4FGEGQW4.js";
|
|
5
5
|
import {
|
|
6
6
|
SettingsManager
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-7VHJNVLF.js";
|
|
8
8
|
import "./chunk-KB64WNBZ.js";
|
|
9
9
|
import "./chunk-6MLEBAYZ.js";
|
|
10
10
|
import {
|
|
@@ -51,4 +51,4 @@ var TestGitCommand = class {
|
|
|
51
51
|
export {
|
|
52
52
|
TestGitCommand
|
|
53
53
|
};
|
|
54
|
-
//# sourceMappingURL=test-git-
|
|
54
|
+
//# sourceMappingURL=test-git-XM4TM65W.js.map
|