@iloom/cli 0.12.2 → 0.13.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/LICENSE +1 -1
- package/README.md +1 -1
- package/dist/{ClaudeContextManager-IENAE2CP.js → ClaudeContextManager-ZH6LEA5I.js} +5 -5
- package/dist/{ClaudeService-YIJCZUUB.js → ClaudeService-YR66WXZN.js} +4 -4
- package/dist/{IssueTrackerFactory-2OI7YIN6.js → IssueTrackerFactory-O2ZBA666.js} +3 -3
- package/dist/{LoomLauncher-3TSFW7QP.js → LoomLauncher-V54ENBEF.js} +5 -5
- package/dist/{MetadataManager-V4LSJ2PB.js → MetadataManager-HHE6LQF2.js} +2 -2
- package/dist/{PromptTemplateManager-I75WKXM4.js → PromptTemplateManager-4RFELNYY.js} +2 -2
- package/dist/README.md +1 -1
- package/dist/{SettingsManager-BMQCAXPP.js → SettingsManager-SLSYEYDZ.js} +4 -2
- package/dist/agents/iloom-artifact-reviewer.md +1 -0
- package/dist/agents/iloom-code-reviewer.md +21 -0
- package/dist/agents/iloom-issue-analyze-and-plan.md +30 -12
- package/dist/agents/iloom-issue-analyzer.md +32 -7
- package/dist/agents/iloom-issue-complexity-evaluator.md +32 -12
- package/dist/agents/iloom-issue-implementer.md +31 -12
- package/dist/agents/iloom-issue-planner.md +30 -12
- package/dist/agents/iloom-wave-verifier.md +126 -5
- package/dist/{build-PKHPE34Y.js → build-ZTGWDHWU.js} +8 -8
- package/dist/{chunk-GWJWECZB.js → chunk-55NTREIU.js} +25 -23
- package/dist/chunk-55NTREIU.js.map +1 -0
- package/dist/{chunk-AYLC633W.js → chunk-7TN5VW4I.js} +65 -7
- package/dist/chunk-7TN5VW4I.js.map +1 -0
- package/dist/{chunk-PMB6TYV4.js → chunk-C2BVNJW5.js} +2 -2
- package/dist/{chunk-QFDM23CO.js → chunk-E5OM25WK.js} +3 -3
- package/dist/{chunk-BFF27W3S.js → chunk-ERMEYFT6.js} +7 -2
- package/dist/chunk-ERMEYFT6.js.map +1 -0
- package/dist/{chunk-653XBU3L.js → chunk-F5NKWLMQ.js} +21 -15
- package/dist/chunk-F5NKWLMQ.js.map +1 -0
- package/dist/{chunk-H2M62IKR.js → chunk-G2DGDCDP.js} +15 -185
- package/dist/chunk-G2DGDCDP.js.map +1 -0
- package/dist/{chunk-35CBWAJL.js → chunk-GPBX2BY2.js} +2 -2
- package/dist/{chunk-ZM2AYHMO.js → chunk-GQDVH6FA.js} +2 -2
- package/dist/{chunk-GDDRANOZ.js → chunk-HWDQRW3O.js} +3 -3
- package/dist/chunk-HWDQRW3O.js.map +1 -0
- package/dist/{chunk-M3FBM4T3.js → chunk-J5JOJPK3.js} +2 -2
- package/dist/{chunk-UMZ2CIDW.js → chunk-KCAWSZUO.js} +11 -10
- package/dist/chunk-KCAWSZUO.js.map +1 -0
- package/dist/{chunk-OPQC4OWM.js → chunk-KGOBNC5A.js} +4 -4
- package/dist/{chunk-V5IYLWRA.js → chunk-LNY2Y32V.js} +2 -2
- package/dist/{chunk-7RCUWU3I.js → chunk-MRPIDNZU.js} +1 -1
- package/dist/chunk-MRPIDNZU.js.map +1 -0
- package/dist/{chunk-YWNF5755.js → chunk-N6DY47YN.js} +80 -45
- package/dist/chunk-N6DY47YN.js.map +1 -0
- package/dist/{chunk-VIQOQ463.js → chunk-OLJ54WGW.js} +15 -10
- package/dist/chunk-OLJ54WGW.js.map +1 -0
- package/dist/{chunk-6RINI7OL.js → chunk-PPQ5LV7U.js} +2 -2
- package/dist/{chunk-CTHB7345.js → chunk-PS6K2AOV.js} +5 -5
- package/dist/{chunk-Y2MVSEJK.js → chunk-QNRXRSKC.js} +6 -3
- package/dist/chunk-QNRXRSKC.js.map +1 -0
- package/dist/{chunk-EQIII6GI.js → chunk-SM3BCHYB.js} +5 -5
- package/dist/{chunk-OKB2NEDQ.js → chunk-T4KFKKEB.js} +7 -7
- package/dist/{chunk-VA6CWUAE.js → chunk-T4NESGYB.js} +3 -3
- package/dist/{chunk-VZ55H5X6.js → chunk-TJDKGKQV.js} +2 -2
- package/dist/{chunk-KCZSUJUR.js → chunk-UXBVDD7U.js} +6 -6
- package/dist/{chunk-QF2DROQR.js → chunk-WYDLOQYO.js} +2 -2
- package/dist/{chunk-4JZEQBWV.js → chunk-XIVLGWUX.js} +3 -1
- package/dist/chunk-XIVLGWUX.js.map +1 -0
- package/dist/{chunk-R7DGN73N.js → chunk-ZEFTWM5Z.js} +2 -2
- package/dist/{cleanup-QTZU46OP.js → cleanup-BCVY7PEF.js} +18 -18
- package/dist/cli.js +94 -69
- package/dist/cli.js.map +1 -1
- package/dist/{commit-P3OOQ3JN.js → commit-L5JNBU4U.js} +8 -8
- package/dist/{compile-IOXQTCP3.js → compile-GPJOHXH4.js} +8 -8
- package/dist/{contribute-EHWLYOMZ.js → contribute-QEGCI4PS.js} +4 -4
- package/dist/{dev-server-BLJ7NPKG.js → dev-server-67NPVWUN.js} +247 -31
- package/dist/dev-server-67NPVWUN.js.map +1 -0
- package/dist/{feedback-RFWGB4I5.js → feedback-2LWXKLQZ.js} +4 -4
- package/dist/{git-I3PO6FY7.js → git-IS7AV3ED.js} +4 -4
- package/dist/hooks/iloom-hook.js +40 -2
- package/dist/{ignite-6XT5BKSF.js → ignite-VQDJQ37S.js} +12 -14
- package/dist/index.d.ts +69 -37
- package/dist/index.js +23 -15
- package/dist/index.js.map +1 -1
- package/dist/{init-6FUPISD7.js → init-7SDJUAEZ.js} +8 -8
- package/dist/{install-deps-BMRONT2L.js → install-deps-NGSFDNUW.js} +8 -8
- package/dist/{issues-SUFQJY6O.js → issues-4HQKEUP7.js} +5 -5
- package/dist/{lint-PRD2DO5K.js → lint-C5FOVRXY.js} +8 -8
- package/dist/mcp/issue-management-server.js +19 -14
- package/dist/mcp/issue-management-server.js.map +1 -1
- package/dist/{open-NVFYA5IM.js → open-WUTLRI6S.js} +19 -15
- package/dist/open-WUTLRI6S.js.map +1 -0
- package/dist/{plan-7M5WB7VT.js → plan-GC3HF73T.js} +70 -39
- package/dist/plan-GC3HF73T.js.map +1 -0
- package/dist/{projects-L5AHUBGA.js → projects-3F6T3KZL.js} +2 -2
- package/dist/prompts/init-prompt.txt +40 -12
- package/dist/prompts/issue-prompt.txt +3 -0
- package/dist/prompts/plan-prompt.txt +67 -11
- package/dist/prompts/swarm-orchestrator-prompt.txt +25 -12
- package/dist/{rebase-5B7WQQAY.js → rebase-CSGQICAP.js} +7 -7
- package/dist/{recap-7PSTJ3MF.js → recap-CKGKFDJL.js} +7 -7
- package/dist/{run-6ZCDG7MX.js → run-3YL2IXXI.js} +19 -15
- package/dist/run-3YL2IXXI.js.map +1 -0
- package/dist/schema/settings.schema.json +35 -7
- package/dist/{shell-MX3WRDQN.js → shell-M2YYPNGV.js} +6 -6
- package/dist/{summary-WQ7QOAIQ.js → summary-XR4CBJEG.js} +9 -9
- package/dist/{test-LAIG62XM.js → test-ESDAHEVE.js} +8 -8
- package/dist/{test-git-PYJOYSED.js → test-git-KWPLHYSI.js} +4 -4
- package/dist/{test-jira-SM7IU5HW.js → test-jira-6NK7UHSV.js} +3 -3
- package/dist/{test-prefix-HIRZBXTM.js → test-prefix-VVODGHXP.js} +4 -4
- package/dist/{test-webserver-43PVP2JL.js → test-webserver-AHXKC6H4.js} +6 -6
- package/dist/{vscode-VZCCFQRY.js → vscode-OY7HOVRO.js} +6 -6
- package/package.json +1 -1
- package/dist/chunk-4JZEQBWV.js.map +0 -1
- package/dist/chunk-653XBU3L.js.map +0 -1
- package/dist/chunk-7RCUWU3I.js.map +0 -1
- package/dist/chunk-AYLC633W.js.map +0 -1
- package/dist/chunk-BFF27W3S.js.map +0 -1
- package/dist/chunk-GDDRANOZ.js.map +0 -1
- package/dist/chunk-GWJWECZB.js.map +0 -1
- package/dist/chunk-H2M62IKR.js.map +0 -1
- package/dist/chunk-UMZ2CIDW.js.map +0 -1
- package/dist/chunk-VIQOQ463.js.map +0 -1
- package/dist/chunk-Y2MVSEJK.js.map +0 -1
- package/dist/chunk-YWNF5755.js.map +0 -1
- package/dist/dev-server-BLJ7NPKG.js.map +0 -1
- package/dist/open-NVFYA5IM.js.map +0 -1
- package/dist/plan-7M5WB7VT.js.map +0 -1
- package/dist/run-6ZCDG7MX.js.map +0 -1
- /package/dist/{ClaudeContextManager-IENAE2CP.js.map → ClaudeContextManager-ZH6LEA5I.js.map} +0 -0
- /package/dist/{ClaudeService-YIJCZUUB.js.map → ClaudeService-YR66WXZN.js.map} +0 -0
- /package/dist/{IssueTrackerFactory-2OI7YIN6.js.map → IssueTrackerFactory-O2ZBA666.js.map} +0 -0
- /package/dist/{LoomLauncher-3TSFW7QP.js.map → LoomLauncher-V54ENBEF.js.map} +0 -0
- /package/dist/{MetadataManager-V4LSJ2PB.js.map → MetadataManager-HHE6LQF2.js.map} +0 -0
- /package/dist/{PromptTemplateManager-I75WKXM4.js.map → PromptTemplateManager-4RFELNYY.js.map} +0 -0
- /package/dist/{SettingsManager-BMQCAXPP.js.map → SettingsManager-SLSYEYDZ.js.map} +0 -0
- /package/dist/{build-PKHPE34Y.js.map → build-ZTGWDHWU.js.map} +0 -0
- /package/dist/{chunk-PMB6TYV4.js.map → chunk-C2BVNJW5.js.map} +0 -0
- /package/dist/{chunk-QFDM23CO.js.map → chunk-E5OM25WK.js.map} +0 -0
- /package/dist/{chunk-35CBWAJL.js.map → chunk-GPBX2BY2.js.map} +0 -0
- /package/dist/{chunk-ZM2AYHMO.js.map → chunk-GQDVH6FA.js.map} +0 -0
- /package/dist/{chunk-M3FBM4T3.js.map → chunk-J5JOJPK3.js.map} +0 -0
- /package/dist/{chunk-OPQC4OWM.js.map → chunk-KGOBNC5A.js.map} +0 -0
- /package/dist/{chunk-V5IYLWRA.js.map → chunk-LNY2Y32V.js.map} +0 -0
- /package/dist/{chunk-6RINI7OL.js.map → chunk-PPQ5LV7U.js.map} +0 -0
- /package/dist/{chunk-CTHB7345.js.map → chunk-PS6K2AOV.js.map} +0 -0
- /package/dist/{chunk-EQIII6GI.js.map → chunk-SM3BCHYB.js.map} +0 -0
- /package/dist/{chunk-OKB2NEDQ.js.map → chunk-T4KFKKEB.js.map} +0 -0
- /package/dist/{chunk-VA6CWUAE.js.map → chunk-T4NESGYB.js.map} +0 -0
- /package/dist/{chunk-VZ55H5X6.js.map → chunk-TJDKGKQV.js.map} +0 -0
- /package/dist/{chunk-KCZSUJUR.js.map → chunk-UXBVDD7U.js.map} +0 -0
- /package/dist/{chunk-QF2DROQR.js.map → chunk-WYDLOQYO.js.map} +0 -0
- /package/dist/{chunk-R7DGN73N.js.map → chunk-ZEFTWM5Z.js.map} +0 -0
- /package/dist/{cleanup-QTZU46OP.js.map → cleanup-BCVY7PEF.js.map} +0 -0
- /package/dist/{commit-P3OOQ3JN.js.map → commit-L5JNBU4U.js.map} +0 -0
- /package/dist/{compile-IOXQTCP3.js.map → compile-GPJOHXH4.js.map} +0 -0
- /package/dist/{contribute-EHWLYOMZ.js.map → contribute-QEGCI4PS.js.map} +0 -0
- /package/dist/{feedback-RFWGB4I5.js.map → feedback-2LWXKLQZ.js.map} +0 -0
- /package/dist/{git-I3PO6FY7.js.map → git-IS7AV3ED.js.map} +0 -0
- /package/dist/{ignite-6XT5BKSF.js.map → ignite-VQDJQ37S.js.map} +0 -0
- /package/dist/{init-6FUPISD7.js.map → init-7SDJUAEZ.js.map} +0 -0
- /package/dist/{install-deps-BMRONT2L.js.map → install-deps-NGSFDNUW.js.map} +0 -0
- /package/dist/{issues-SUFQJY6O.js.map → issues-4HQKEUP7.js.map} +0 -0
- /package/dist/{lint-PRD2DO5K.js.map → lint-C5FOVRXY.js.map} +0 -0
- /package/dist/{projects-L5AHUBGA.js.map → projects-3F6T3KZL.js.map} +0 -0
- /package/dist/{rebase-5B7WQQAY.js.map → rebase-CSGQICAP.js.map} +0 -0
- /package/dist/{recap-7PSTJ3MF.js.map → recap-CKGKFDJL.js.map} +0 -0
- /package/dist/{shell-MX3WRDQN.js.map → shell-M2YYPNGV.js.map} +0 -0
- /package/dist/{summary-WQ7QOAIQ.js.map → summary-XR4CBJEG.js.map} +0 -0
- /package/dist/{test-LAIG62XM.js.map → test-ESDAHEVE.js.map} +0 -0
- /package/dist/{test-git-PYJOYSED.js.map → test-git-KWPLHYSI.js.map} +0 -0
- /package/dist/{test-jira-SM7IU5HW.js.map → test-jira-6NK7UHSV.js.map} +0 -0
- /package/dist/{test-prefix-HIRZBXTM.js.map → test-prefix-VVODGHXP.js.map} +0 -0
- /package/dist/{test-webserver-43PVP2JL.js.map → test-webserver-AHXKC6H4.js.map} +0 -0
- /package/dist/{vscode-VZCCFQRY.js.map → vscode-OY7HOVRO.js.map} +0 -0
|
@@ -15,6 +15,8 @@ model: opus
|
|
|
15
15
|
- **No human interaction**: Do NOT pause for user input. Create the plan autonomously.
|
|
16
16
|
- **Concise output**: Return a structured plan suitable for the orchestrator, including the Execution Plan section.
|
|
17
17
|
- **No state to done**: Do NOT call `recap.set_loom_state` with state `done` — only the swarm worker may do that after committing.
|
|
18
|
+
- **Efficiency**: Maximize parallel tool calls. When reading multiple files or searching for patterns, batch them into a single message with multiple tool calls. Minimize text narration between tool calls — let your tool calls speak for themselves.
|
|
19
|
+
- **Single comment**: Post ONE comment at the end with your complete plan (Section 1 + Section 2). Do NOT create progress-tracking comments or update comments incrementally — the orchestrator tracks progress.
|
|
18
20
|
{{else}}
|
|
19
21
|
{{#if DRAFT_PR_MODE}}
|
|
20
22
|
## Comment Routing: Draft PR Mode
|
|
@@ -101,6 +103,27 @@ Available Tools:
|
|
|
101
103
|
Parameters: { commentId: string, number: string, body: "updated markdown content" }
|
|
102
104
|
Returns: { id: string, url: string, updated_at: string }
|
|
103
105
|
|
|
106
|
+
{{#if SWARM_MODE}}
|
|
107
|
+
Workflow Comment Strategy (Swarm Mode):
|
|
108
|
+
1. Perform all research and planning FIRST without posting comments.
|
|
109
|
+
2. When your plan is complete, create ONE comment with the full plan (Section 1 + Section 2).
|
|
110
|
+
3. Store the returned comment ID and URL. Call `mcp__recap__add_artifact` to log it.
|
|
111
|
+
4. Return the comment URL and Execution Plan to the calling process.
|
|
112
|
+
|
|
113
|
+
Example Usage:
|
|
114
|
+
```
|
|
115
|
+
const comment = await mcp__issue_management__create_comment({
|
|
116
|
+
number: "<issue-number-from-invocation-prompt>",
|
|
117
|
+
body: "# Implementation Plan...\n\n[Full Section 1 + Section 2 content]",
|
|
118
|
+
type: "issue"
|
|
119
|
+
})
|
|
120
|
+
await mcp__recap__add_artifact({
|
|
121
|
+
type: "comment",
|
|
122
|
+
primaryUrl: comment.url,
|
|
123
|
+
description: "Implementation plan comment"
|
|
124
|
+
})
|
|
125
|
+
```
|
|
126
|
+
{{else}}
|
|
104
127
|
Workflow Comment Strategy:
|
|
105
128
|
1. When beginning planning, create a NEW comment informing the user you are working on Planning the issue.
|
|
106
129
|
2. Store the returned comment ID and URL. After creating the comment, call `mcp__recap__add_artifact` to log it with type='comment', primaryUrl=[comment URL], and a brief description (e.g., "Planning progress comment").
|
|
@@ -117,11 +140,7 @@ Workflow Comment Strategy:
|
|
|
117
140
|
Example Usage:
|
|
118
141
|
```
|
|
119
142
|
// Start
|
|
120
|
-
{{#if
|
|
121
|
-
number: "<issue-number-from-invocation-prompt>",
|
|
122
|
-
body: "# Analysis Phase\n\n- [ ] Fetch issue details\n- [ ] Analyze requirements",
|
|
123
|
-
type: "issue"
|
|
124
|
-
}){{else}}{{#if DRAFT_PR_MODE}}const comment = await mcp__issue_management__create_comment({
|
|
143
|
+
{{#if DRAFT_PR_MODE}}const comment = await mcp__issue_management__create_comment({
|
|
125
144
|
number: {{DRAFT_PR_NUMBER}}{{#unless DRAFT_PR_NUMBER}}/* PR NUMBER MISSING */{{/unless}},
|
|
126
145
|
body: "# Analysis Phase\n\n- [ ] Fetch issue details\n- [ ] Analyze requirements",
|
|
127
146
|
type: "pr"
|
|
@@ -129,7 +148,7 @@ Example Usage:
|
|
|
129
148
|
number: {{ISSUE_NUMBER}},
|
|
130
149
|
body: "# Analysis Phase\n\n- [ ] Fetch issue details\n- [ ] Analyze requirements",
|
|
131
150
|
type: "issue"
|
|
132
|
-
}){{/if}}
|
|
151
|
+
}){{/if}}
|
|
133
152
|
|
|
134
153
|
// Log the comment as an artifact
|
|
135
154
|
await mcp__recap__add_artifact({
|
|
@@ -139,11 +158,7 @@ await mcp__recap__add_artifact({
|
|
|
139
158
|
})
|
|
140
159
|
|
|
141
160
|
// Update as you progress
|
|
142
|
-
{{#if
|
|
143
|
-
commentId: comment.id,
|
|
144
|
-
number: "<issue-number-from-invocation-prompt>",
|
|
145
|
-
body: "# Analysis Phase\n\n- [x] Fetch issue details\n- [ ] Analyze requirements"
|
|
146
|
-
}){{else}}{{#if DRAFT_PR_MODE}}await mcp__issue_management__update_comment({
|
|
161
|
+
{{#if DRAFT_PR_MODE}}await mcp__issue_management__update_comment({
|
|
147
162
|
commentId: comment.id,
|
|
148
163
|
number: {{DRAFT_PR_NUMBER}}{{#unless DRAFT_PR_NUMBER}}/* PR NUMBER MISSING */{{/unless}},
|
|
149
164
|
body: "# Analysis Phase\n\n- [x] Fetch issue details\n- [ ] Analyze requirements"
|
|
@@ -151,8 +166,9 @@ await mcp__recap__add_artifact({
|
|
|
151
166
|
commentId: comment.id,
|
|
152
167
|
number: {{ISSUE_NUMBER}},
|
|
153
168
|
body: "# Analysis Phase\n\n- [x] Fetch issue details\n- [ ] Analyze requirements"
|
|
154
|
-
}){{/if}}
|
|
169
|
+
}){{/if}}
|
|
155
170
|
```
|
|
171
|
+
{{/if}}
|
|
156
172
|
</comment_tool_info>
|
|
157
173
|
|
|
158
174
|
## Analysis Approach
|
|
@@ -513,10 +529,12 @@ This section tells the orchestrator EXACTLY how to execute the implementation st
|
|
|
513
529
|
- **FOR CROSS-COMPONENT VALUES**: Every specific value (scores, thresholds, enums) referenced from other components must have a file:line citation. Any value without a citation must be replaced with intent-based language and have a corresponding `recap.add_entry({ type: 'assumption' })` call.
|
|
514
530
|
|
|
515
531
|
|
|
532
|
+
{{#unless SWARM_MODE}}
|
|
516
533
|
## HOW TO UPDATE THE USER OF YOUR PROGRESS
|
|
517
534
|
* AS SOON AS YOU CAN, once you have formulated an initial plan/todo list for your task, you should create a comment as described in the <comment_tool_info> section above.
|
|
518
535
|
* AFTER YOU COMPLETE EACH ITEM ON YOUR TODO LIST - update the same comment with your progress as described in the <comment_tool_info> section above.
|
|
519
536
|
* When the whole task is complete, update the SAME comment with the results of your work including Section 1 and Section 2 above. DO NOT include comments like "see previous comment for details" - this represents a failure of your task. NEVER ATTEMPT CONCURRENT UPDATES OF THE COMMENT. DATA WILL BE LOST.
|
|
537
|
+
{{/unless}}
|
|
520
538
|
|
|
521
539
|
## Critical Reminders
|
|
522
540
|
|
|
@@ -19,11 +19,16 @@ color: red
|
|
|
19
19
|
|
|
20
20
|
You are a wave verification agent. Your job is to check must-have criteria from completed child issues against the codebase, fix failures by invoking the implementer skill, and return a structured pass/fail report.
|
|
21
21
|
|
|
22
|
+
## Context
|
|
23
|
+
|
|
24
|
+
- **Epic Worktree Path:** `{{EPIC_WORKTREE_PATH}}`
|
|
25
|
+
|
|
22
26
|
## MANDATORY FIRST STEP
|
|
23
27
|
|
|
24
28
|
1. `cd` to your assigned worktree path (from your invocation prompt)
|
|
25
29
|
2. Call `recap.set_loom_state({ state: "in_progress", worktreePath: "<your-worktree-path>" })`
|
|
26
30
|
3. Parse the child issue numbers from your invocation prompt
|
|
31
|
+
4. Extract the `Epic Worktree` path and `Pre-wave commit` SHA from your invocation prompt (needed for code review in Steps 5-7)
|
|
27
32
|
|
|
28
33
|
## Core Workflow
|
|
29
34
|
|
|
@@ -87,7 +92,7 @@ Record each result as:
|
|
|
87
92
|
|
|
88
93
|
After verifying all must-haves, post the initial results as a comment on the verifier's own issue:
|
|
89
94
|
|
|
90
|
-
1. Construct a markdown report using the same format as Step
|
|
95
|
+
1. Construct a markdown report using the same format as Step 8, but with only the "Initial" column populated (no "After Fix" column yet since fixes haven't been attempted):
|
|
91
96
|
|
|
92
97
|
```markdown
|
|
93
98
|
## Wave Verification Report
|
|
@@ -123,7 +128,7 @@ After verifying all must-haves, post the initial results as a comment on the ver
|
|
|
123
128
|
- Call `recap.add_artifact` with `type: 'comment'`, `primaryUrl`: the returned comment URL, and `description`: `"Wave verification report"`
|
|
124
129
|
- If in swarm mode, include `worktreePath` in the recap call
|
|
125
130
|
|
|
126
|
-
**If all must-haves passed** (no failures), the initial report is already the final report. Skip Steps 3 and 4 entirely and proceed to Step 5. The comment does not need updating.
|
|
131
|
+
**If all must-haves passed** (no failures), the initial report is already the final report. Skip Steps 3 and 4 entirely and proceed to Step 5 (code review). The comment does not need updating.
|
|
127
132
|
|
|
128
133
|
### Step 3: Fix Failures (if any)
|
|
129
134
|
|
|
@@ -171,7 +176,7 @@ After ALL fix skill invocations have completed:
|
|
|
171
176
|
|
|
172
177
|
**Update the verification report comment:**
|
|
173
178
|
|
|
174
|
-
5. Construct the full report in the Step
|
|
179
|
+
5. Construct the full report in the Step 8 format (with "After Fix" column populated for previously-failed criteria)
|
|
175
180
|
6. Call `mcp__issue_management__update_comment` with:
|
|
176
181
|
- `commentId`: the ID saved from Step 2.5
|
|
177
182
|
- `number`: your own issue number
|
|
@@ -179,7 +184,106 @@ After ALL fix skill invocations have completed:
|
|
|
179
184
|
- `markupLanguage`: `"GFM"`
|
|
180
185
|
7. Update the recap artifact by calling `recap.add_artifact` again with the same `primaryUrl` (this replaces the existing entry)
|
|
181
186
|
|
|
182
|
-
### Step 5:
|
|
187
|
+
### Step 5: Gather Wave Diff for Code Review
|
|
188
|
+
|
|
189
|
+
1. From the invocation prompt, extract:
|
|
190
|
+
- `Epic Worktree` path
|
|
191
|
+
- `Pre-wave commit` SHA
|
|
192
|
+
2. Run: `cd <epic-worktree> && git diff <pre-wave-commit>..HEAD`
|
|
193
|
+
3. Save the diff output
|
|
194
|
+
4. Also gather CLAUDE.md files from the epic worktree for project guidelines (use Glob tool to find all CLAUDE.md files, read them)
|
|
195
|
+
5. **IMPORTANT:** `git diff` does NOT show untracked files. Run `git status --short` in the epic worktree and for any new untracked files added since the pre-wave commit, read them directly using the Read tool
|
|
196
|
+
6. If the diff is empty (no changes since pre-wave commit), skip Steps 6 and 7 entirely — note "No code changes to review" in the report
|
|
197
|
+
|
|
198
|
+
### Step 6: Run Code Review on Wave Changes
|
|
199
|
+
|
|
200
|
+
{{#if HAS_REVIEW_GEMINI}}{{else}}{{#if HAS_REVIEW_CODEX}}{{else}}
|
|
201
|
+
*No review providers configured — skipping code review. Configure providers in `.iloom/settings.json` under `agents.iloom-code-reviewer.providers` to enable.*
|
|
202
|
+
{{/if}}{{/if}}
|
|
203
|
+
|
|
204
|
+
{{#if HAS_REVIEW_GEMINI}}
|
|
205
|
+
Invoke the code reviewer skill with the pre-gathered diff:
|
|
206
|
+
|
|
207
|
+
/iloom-swarm-code-reviewer "
|
|
208
|
+
## Pre-gathered Diff
|
|
209
|
+
|
|
210
|
+
The following diff contains all changes made in this wave (from pre-wave commit to current epic branch HEAD). Use this diff directly — do NOT run git commands to gather your own diff.
|
|
211
|
+
|
|
212
|
+
\`\`\`diff
|
|
213
|
+
<insert full diff from Step 5 here>
|
|
214
|
+
\`\`\`
|
|
215
|
+
|
|
216
|
+
## CLAUDE.md Guidelines
|
|
217
|
+
|
|
218
|
+
<insert CLAUDE.md content from Step 5 here>
|
|
219
|
+
|
|
220
|
+
Run a full code review of these wave changes. You are in swarm mode — do NOT ask the user about findings, return all results directly."
|
|
221
|
+
|
|
222
|
+
Collect the skill output as the code review findings.
|
|
223
|
+
{{else}}
|
|
224
|
+
{{#if HAS_REVIEW_CODEX}}
|
|
225
|
+
Invoke the code reviewer skill with the pre-gathered diff:
|
|
226
|
+
|
|
227
|
+
/iloom-swarm-code-reviewer "
|
|
228
|
+
## Pre-gathered Diff
|
|
229
|
+
|
|
230
|
+
The following diff contains all changes made in this wave (from pre-wave commit to current epic branch HEAD). Use this diff directly — do NOT run git commands to gather your own diff.
|
|
231
|
+
|
|
232
|
+
\`\`\`diff
|
|
233
|
+
<insert full diff from Step 5 here>
|
|
234
|
+
\`\`\`
|
|
235
|
+
|
|
236
|
+
## CLAUDE.md Guidelines
|
|
237
|
+
|
|
238
|
+
<insert CLAUDE.md content from Step 5 here>
|
|
239
|
+
|
|
240
|
+
Run a full code review of these wave changes. You are in swarm mode — do NOT ask the user about findings, return all results directly."
|
|
241
|
+
|
|
242
|
+
Collect the skill output as the code review findings.
|
|
243
|
+
{{/if}}
|
|
244
|
+
{{/if}}
|
|
245
|
+
|
|
246
|
+
### Step 7: Fix Critical Code Review Issues
|
|
247
|
+
|
|
248
|
+
**CRITICAL: You MUST execute this step after Step 6. Do NOT skip to Step 8 without processing code review results.**
|
|
249
|
+
|
|
250
|
+
After the code reviewer skill returns its output:
|
|
251
|
+
|
|
252
|
+
1. **Parse the findings**: Scan the code reviewer's output for findings under the "Critical Issues (95-100 confidence)" heading. Each finding follows the format: `[FILE:LINE] (Score: XX) Issue description` with a `Recommendation: ...` line below it. Extract every finding with a score of 95 or higher.
|
|
253
|
+
|
|
254
|
+
2. **If no critical findings exist** (the "Critical Issues" section is empty or absent, or the summary shows "0 critical"), skip to Step 8. Warnings (80-94) are reported but not auto-fixed.
|
|
255
|
+
|
|
256
|
+
3. **If critical findings exist**, group them by file path, then invoke one implementer skill per file — all in the **same response** so they run in parallel:
|
|
257
|
+
|
|
258
|
+
CRITICAL: Skills run with `context: fork` and start at the project root. You MUST include the epic worktree path so the forked agent works in the correct location.
|
|
259
|
+
|
|
260
|
+
For each file that has critical findings, invoke:
|
|
261
|
+
|
|
262
|
+
```
|
|
263
|
+
/iloom-swarm-issue-implementer "Your working directory is {{EPIC_WORKTREE_PATH}}. cd there before doing any work.
|
|
264
|
+
|
|
265
|
+
Fix the following critical code review findings in FILE_PATH. DO NOT create your own issue comment. Do NOT commit changes — just make the edits.
|
|
266
|
+
|
|
267
|
+
1. [FILE:LINE] (Score: XX) Issue description — Recommendation: ...
|
|
268
|
+
2. [FILE:LINE] (Score: XX) Issue description — Recommendation: ...
|
|
269
|
+
|
|
270
|
+
Fix ONLY these specific issues. Do not refactor or make additional changes beyond what is listed."
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
**Parallel invocation:** If critical findings span 3 files, you invoke 3 separate `/iloom-swarm-issue-implementer` skills in a single response message. This runs them concurrently. Each invocation handles findings for ONE file only, preventing edit conflicts.
|
|
274
|
+
|
|
275
|
+
**Fix prompt construction:** Copy each critical finding EXACTLY from the code reviewer's output (file path, line number, score, issue description, and recommendation). Do NOT paraphrase or summarize — the fix agent needs the precise details to locate and fix each issue.
|
|
276
|
+
|
|
277
|
+
4. **After ALL fix agents return**, stage and commit once from the epic worktree:
|
|
278
|
+
```bash
|
|
279
|
+
cd "{{EPIC_WORKTREE_PATH}}"
|
|
280
|
+
git add -A
|
|
281
|
+
git commit -m "fix(review): address critical wave code review findings"
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
5. Record which findings were sent for fixing for the Step 8 report
|
|
285
|
+
|
|
286
|
+
### Step 8: Return Structured Report
|
|
183
287
|
|
|
184
288
|
Return the verification report in this exact format:
|
|
185
289
|
|
|
@@ -220,9 +324,26 @@ Return the verification report in this exact format:
|
|
|
220
324
|
|
|
221
325
|
*(If no fix skills were invoked: "None — all must-haves passed on initial verification.")*
|
|
222
326
|
|
|
223
|
-
###
|
|
327
|
+
### Code Review
|
|
328
|
+
|
|
329
|
+
{{#if HAS_REVIEW_GEMINI}}
|
|
330
|
+
- **Findings**: X critical, Y warnings
|
|
331
|
+
- **Auto-fixed**: N critical issues
|
|
332
|
+
- **Remaining**: Z issues require manual attention
|
|
333
|
+
{{else}}
|
|
334
|
+
{{#if HAS_REVIEW_CODEX}}
|
|
335
|
+
- **Findings**: X critical, Y warnings
|
|
336
|
+
- **Auto-fixed**: N critical issues
|
|
337
|
+
- **Remaining**: Z issues require manual attention
|
|
338
|
+
{{else}}
|
|
339
|
+
- **Status**: Skipped (no review providers configured)
|
|
340
|
+
{{/if}}
|
|
341
|
+
{{/if}}
|
|
342
|
+
|
|
343
|
+
### Overall Status: [ALL_PASSED | ALL_FIXED | PARTIALLY_FIXED | FAILURES_REMAIN]
|
|
224
344
|
|
|
225
345
|
- **ALL_PASSED**: All must-haves passed initial verification (no fix skills needed)
|
|
346
|
+
- **ALL_FIXED**: Some must-haves failed initially but ALL were fixed after re-verification
|
|
226
347
|
- **PARTIALLY_FIXED**: Some failures were fixed but others remain
|
|
227
348
|
- **FAILURES_REMAIN**: One or more must-haves are still failing after re-verification
|
|
228
349
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
ScriptCommandBase
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-PS6K2AOV.js";
|
|
5
|
+
import "./chunk-GQDVH6FA.js";
|
|
6
|
+
import "./chunk-OLJ54WGW.js";
|
|
7
|
+
import "./chunk-PPQ5LV7U.js";
|
|
8
8
|
import "./chunk-K3QGG4O2.js";
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-KGOBNC5A.js";
|
|
10
|
+
import "./chunk-F5NKWLMQ.js";
|
|
11
|
+
import "./chunk-XIVLGWUX.js";
|
|
12
12
|
import "./chunk-FTYWGQFM.js";
|
|
13
13
|
import "./chunk-VRPPI6GU.js";
|
|
14
14
|
|
|
@@ -24,4 +24,4 @@ var BuildCommand = class extends ScriptCommandBase {
|
|
|
24
24
|
export {
|
|
25
25
|
BuildCommand
|
|
26
26
|
};
|
|
27
|
-
//# sourceMappingURL=build-
|
|
27
|
+
//# sourceMappingURL=build-ZTGWDHWU.js.map
|
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
import {
|
|
3
3
|
PRManager,
|
|
4
4
|
VCSProviderFactory
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-J5JOJPK3.js";
|
|
6
6
|
import {
|
|
7
7
|
preAcceptClaudeTrust
|
|
8
8
|
} from "./chunk-7UBEHQTP.js";
|
|
9
9
|
import {
|
|
10
10
|
calculatePortForBranch,
|
|
11
11
|
calculatePortFromIdentifier
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-ERMEYFT6.js";
|
|
13
13
|
import {
|
|
14
14
|
installDependencies,
|
|
15
15
|
runScript
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-OLJ54WGW.js";
|
|
17
17
|
import {
|
|
18
18
|
getPackageConfig,
|
|
19
19
|
hasScript
|
|
@@ -43,10 +43,10 @@ import {
|
|
|
43
43
|
fetchOrigin,
|
|
44
44
|
isFileTrackedByGit,
|
|
45
45
|
pushBranchToRemote
|
|
46
|
-
} from "./chunk-
|
|
46
|
+
} from "./chunk-KGOBNC5A.js";
|
|
47
47
|
import {
|
|
48
48
|
MetadataManager
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-XIVLGWUX.js";
|
|
50
50
|
import {
|
|
51
51
|
getLogger
|
|
52
52
|
} from "./chunk-FTYWGQFM.js";
|
|
@@ -239,7 +239,7 @@ var LoomManager = class {
|
|
|
239
239
|
* NEW: Checks for existing worktrees and reuses them if found
|
|
240
240
|
*/
|
|
241
241
|
async createIloom(input) {
|
|
242
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t;
|
|
242
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u;
|
|
243
243
|
getLogger().info("Fetching issue data...");
|
|
244
244
|
const issueData = await this.fetchIssueData(input);
|
|
245
245
|
if (input.type === "issue" || input.type === "epic" || input.type === "pr" || input.type === "branch") {
|
|
@@ -443,8 +443,8 @@ ${issueData.body}` : "";
|
|
|
443
443
|
const setArguments = (_l = input.options) == null ? void 0 : _l.setArguments;
|
|
444
444
|
const executablePath = (_m = input.options) == null ? void 0 : _m.executablePath;
|
|
445
445
|
if (enableClaude || enableCode || enableDevServer || enableTerminal) {
|
|
446
|
-
const { LoomLauncher } = await import("./LoomLauncher-
|
|
447
|
-
const { ClaudeContextManager } = await import("./ClaudeContextManager-
|
|
446
|
+
const { LoomLauncher } = await import("./LoomLauncher-V54ENBEF.js");
|
|
447
|
+
const { ClaudeContextManager } = await import("./ClaudeContextManager-ZH6LEA5I.js");
|
|
448
448
|
const claudeContext = new ClaudeContextManager(void 0, void 0, this.settings);
|
|
449
449
|
const launcher = new LoomLauncher(claudeContext, this.settings);
|
|
450
450
|
await launcher.launchLoom({
|
|
@@ -509,10 +509,11 @@ ${issueData.body}` : "";
|
|
|
509
509
|
capabilities,
|
|
510
510
|
...draftPrNumber && { draftPrNumber },
|
|
511
511
|
...((_p = input.options) == null ? void 0 : _p.oneShot) && { oneShot: input.options.oneShot },
|
|
512
|
-
...((_q = input.options) == null ? void 0 : _q.
|
|
513
|
-
...((_r = input.options) == null ? void 0 : _r.
|
|
514
|
-
...((_s = input.options) == null ? void 0 : _s.
|
|
515
|
-
...((_t = input.options) == null ? void 0 : _t.
|
|
512
|
+
...((_q = input.options) == null ? void 0 : _q.dangerouslySkipPermissions) && { dangerouslySkipPermissions: true },
|
|
513
|
+
...((_r = input.options) == null ? void 0 : _r.complexity) && { complexity: input.options.complexity },
|
|
514
|
+
...((_s = input.options) == null ? void 0 : _s.childIssueNumbers) && input.options.childIssueNumbers.length > 0 && { childIssueNumbers: input.options.childIssueNumbers },
|
|
515
|
+
...((_t = input.options) == null ? void 0 : _t.childIssues) && input.options.childIssues.length > 0 && { childIssues: input.options.childIssues },
|
|
516
|
+
...((_u = input.options) == null ? void 0 : _u.dependencyMap) && Object.keys(input.options.dependencyMap).length > 0 && { dependencyMap: input.options.dependencyMap },
|
|
516
517
|
...input.parentLoom && { parentLoom: input.parentLoom }
|
|
517
518
|
};
|
|
518
519
|
await this.metadataManager.writeMetadata(worktreePath, metadataInput);
|
|
@@ -606,7 +607,7 @@ ${issueData.body}` : "";
|
|
|
606
607
|
async checkAndWarnChildLooms(branchName) {
|
|
607
608
|
let targetBranch = branchName;
|
|
608
609
|
if (!targetBranch) {
|
|
609
|
-
const { getCurrentBranch } = await import("./git-
|
|
610
|
+
const { getCurrentBranch } = await import("./git-IS7AV3ED.js");
|
|
610
611
|
targetBranch = await getCurrentBranch();
|
|
611
612
|
}
|
|
612
613
|
if (!targetBranch) {
|
|
@@ -722,7 +723,7 @@ ${issueData.body}` : "";
|
|
|
722
723
|
}
|
|
723
724
|
}
|
|
724
725
|
const branchExistedLocally = await branchExists(branchName, process.cwd(), false);
|
|
725
|
-
if (input.type
|
|
726
|
+
if (input.type === "issue" && branchExistedLocally) {
|
|
726
727
|
throw new Error(
|
|
727
728
|
`Cannot create worktree: branch '${branchName}' already exists. Use 'git branch -D ${branchName}' to delete it first if needed.`
|
|
728
729
|
);
|
|
@@ -756,8 +757,8 @@ ${issueData.body}` : "";
|
|
|
756
757
|
await this.gitWorktree.createWorktree({
|
|
757
758
|
path: worktreePath,
|
|
758
759
|
branch: branchName,
|
|
759
|
-
createBranch: input.type !== "pr",
|
|
760
|
-
// PRs use existing branches
|
|
760
|
+
createBranch: input.type !== "pr" && !branchExistedLocally,
|
|
761
|
+
// PRs and existing branches use existing branches
|
|
761
762
|
...baseBranch && { baseBranch }
|
|
762
763
|
});
|
|
763
764
|
if (input.type === "pr" && !branchExistedLocally) {
|
|
@@ -1099,7 +1100,7 @@ ${issueData.body}` : "";
|
|
|
1099
1100
|
* Ports: handle_existing_worktree() from bash script lines 168-215
|
|
1100
1101
|
*/
|
|
1101
1102
|
async reuseIloom(worktree, input, issueData) {
|
|
1102
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p;
|
|
1103
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q;
|
|
1103
1104
|
const worktreePath = worktree.path;
|
|
1104
1105
|
const branchName = worktree.branch;
|
|
1105
1106
|
this.loadMainEnvFile();
|
|
@@ -1160,8 +1161,8 @@ ${issueData.body}` : "";
|
|
|
1160
1161
|
const executablePath = (_j = input.options) == null ? void 0 : _j.executablePath;
|
|
1161
1162
|
if (enableClaude || enableCode || enableDevServer || enableTerminal) {
|
|
1162
1163
|
getLogger().info("Launching workspace components...");
|
|
1163
|
-
const { LoomLauncher } = await import("./LoomLauncher-
|
|
1164
|
-
const { ClaudeContextManager } = await import("./ClaudeContextManager-
|
|
1164
|
+
const { LoomLauncher } = await import("./LoomLauncher-V54ENBEF.js");
|
|
1165
|
+
const { ClaudeContextManager } = await import("./ClaudeContextManager-ZH6LEA5I.js");
|
|
1165
1166
|
const claudeContext = new ClaudeContextManager(void 0, void 0, this.settings);
|
|
1166
1167
|
const launcher = new LoomLauncher(claudeContext, this.settings);
|
|
1167
1168
|
await launcher.launchLoom({
|
|
@@ -1223,12 +1224,13 @@ ${issueData.body}` : "";
|
|
|
1223
1224
|
prUrls,
|
|
1224
1225
|
capabilities,
|
|
1225
1226
|
...((_m = input.options) == null ? void 0 : _m.oneShot) && { oneShot: input.options.oneShot },
|
|
1226
|
-
...((_n = input.options) == null ? void 0 : _n.
|
|
1227
|
-
...((_o = input.options) == null ? void 0 : _o.
|
|
1227
|
+
...((_n = input.options) == null ? void 0 : _n.dangerouslySkipPermissions) && { dangerouslySkipPermissions: true },
|
|
1228
|
+
...((_o = input.options) == null ? void 0 : _o.complexity) && { complexity: input.options.complexity },
|
|
1229
|
+
...((_p = input.options) == null ? void 0 : _p.childIssueNumbers) && input.options.childIssueNumbers.length > 0 && { childIssueNumbers: input.options.childIssueNumbers },
|
|
1228
1230
|
...input.parentLoom && { parentLoom: input.parentLoom }
|
|
1229
1231
|
};
|
|
1230
1232
|
await this.metadataManager.writeMetadata(worktreePath, metadataInput);
|
|
1231
|
-
} else if ((
|
|
1233
|
+
} else if ((_q = input.options) == null ? void 0 : _q.complexity) {
|
|
1232
1234
|
await this.metadataManager.updateMetadata(worktreePath, {
|
|
1233
1235
|
complexity: input.options.complexity
|
|
1234
1236
|
});
|
|
@@ -1909,4 +1911,4 @@ export {
|
|
|
1909
1911
|
CLIIsolationManager,
|
|
1910
1912
|
DatabaseManager
|
|
1911
1913
|
};
|
|
1912
|
-
//# sourceMappingURL=chunk-
|
|
1914
|
+
//# sourceMappingURL=chunk-55NTREIU.js.map
|