@iloom/cli 0.13.3 → 0.13.4
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/{BranchNamingService-MEK2WZUD.js → BranchNamingService-PBP6DY3H.js} +2 -2
- package/dist/{ClaudeContextManager-KJ4VEA2F.js → ClaudeContextManager-3HT4LEIU.js} +5 -5
- package/dist/{ClaudeService-WTJO4UW6.js → ClaudeService-7BHL2GWC.js} +4 -4
- package/dist/{IssueTrackerFactory-UEJALI4X.js → IssueTrackerFactory-JH34S4GX.js} +3 -3
- package/dist/{LoomLauncher-KG2VBNQA.js → LoomLauncher-RGXJOCMC.js} +8 -5
- package/dist/LoomLauncher-RGXJOCMC.js.map +1 -0
- package/dist/{MetadataManager-HHE6LQF2.js → MetadataManager-WKM7JJIO.js} +2 -2
- package/dist/README.md +1 -1
- package/dist/{SettingsManager-PVHBSCMI.js → SettingsManager-Y5OU5HCX.js} +4 -2
- package/dist/agents/CLAUDE.md +12 -7
- package/dist/agents/iloom-code-reviewer.md +2 -1
- package/dist/agents/iloom-framework-detector.md +56 -9
- package/dist/agents/iloom-issue-analyze-and-plan.md +1 -0
- package/dist/agents/iloom-issue-analyzer.md +1 -0
- package/dist/agents/iloom-issue-complexity-evaluator.md +1 -0
- package/dist/agents/iloom-issue-enhancer.md +2 -1
- package/dist/agents/iloom-issue-implementer.md +4 -1
- package/dist/agents/iloom-issue-planner.md +2 -1
- package/dist/agents/iloom-wave-verifier.md +1 -0
- package/dist/{build-2FXDYEZQ.js → build-NJJT6UHO.js} +7 -7
- package/dist/{chunk-VUIPDX3T.js → chunk-27CQSBUG.js} +2 -2
- package/dist/{chunk-YVNG35OW.js → chunk-2Z4VKQND.js} +2 -2
- package/dist/{chunk-UQWMPQ2Q.js → chunk-4QROZMPZ.js} +3 -3
- package/dist/{chunk-U2OPXZ6E.js → chunk-5NVJ6N3C.js} +7 -7
- package/dist/{chunk-2WRD6Y5E.js → chunk-5VP2HAWF.js} +2 -2
- package/dist/{chunk-CQHHEW2M.js → chunk-5WJN63T4.js} +1 -1
- package/dist/chunk-5WJN63T4.js.map +1 -0
- package/dist/{chunk-H4TSDALC.js → chunk-64K5SZXC.js} +6 -6
- package/dist/{chunk-5W44AI63.js → chunk-6FHFHMNF.js} +4 -4
- package/dist/{chunk-XC5JKRSH.js → chunk-6RKZDUTQ.js} +2 -2
- package/dist/{chunk-RP6MHV24.js → chunk-7VSOM25S.js} +20 -15
- package/dist/chunk-7VSOM25S.js.map +1 -0
- package/dist/{chunk-UMAOVKQX.js → chunk-CSJ7JNJV.js} +3 -3
- package/dist/{chunk-AQUSMNBF.js → chunk-CWRQ4NU4.js} +2 -2
- package/dist/{chunk-Z3ZEJN3W.js → chunk-EBPFEM5X.js} +13 -12
- package/dist/chunk-EBPFEM5X.js.map +1 -0
- package/dist/{chunk-OMV47LLA.js → chunk-FPM6XDEO.js} +2 -2
- package/dist/{chunk-DYLOITSO.js → chunk-HMMDNIKG.js} +38 -31
- package/dist/chunk-HMMDNIKG.js.map +1 -0
- package/dist/{chunk-XIVLGWUX.js → chunk-JDXJIPXR.js} +3 -1
- package/dist/chunk-JDXJIPXR.js.map +1 -0
- package/dist/{chunk-ZWXJ7G2C.js → chunk-JIMFSNZI.js} +2 -2
- package/dist/{chunk-D6FU4DLN.js → chunk-LULQYBRA.js} +2 -2
- package/dist/{chunk-DDHWZNGL.js → chunk-MB4CB7Q4.js} +6 -5
- package/dist/chunk-MB4CB7Q4.js.map +1 -0
- package/dist/{chunk-OHX3PSAY.js → chunk-MZPVETJH.js} +7 -15
- package/dist/chunk-MZPVETJH.js.map +1 -0
- package/dist/{chunk-OIJNBFMP.js → chunk-OSWL7YDO.js} +2 -2
- package/dist/{chunk-32D4CWWH.js → chunk-R2RGFNR4.js} +2 -2
- package/dist/{chunk-MPHSR6GA.js → chunk-R4Y2ZBOL.js} +5 -5
- package/dist/{chunk-L3P3YJCE.js → chunk-RLFS5KHU.js} +3 -3
- package/dist/{chunk-DMNI225H.js → chunk-SM2YM3YR.js} +4 -4
- package/dist/{chunk-MNPKEWBQ.js → chunk-UVZBZ5IF.js} +52 -1
- package/dist/chunk-UVZBZ5IF.js.map +1 -0
- package/dist/{chunk-Y2JHYPMX.js → chunk-VG7UFVF2.js} +47 -35
- package/dist/chunk-VG7UFVF2.js.map +1 -0
- package/dist/{chunk-OVW26FHW.js → chunk-VQ3Y3PVT.js} +2 -2
- package/dist/{chunk-PH65MFQM.js → chunk-Y2TPRF5H.js} +3 -3
- package/dist/{claude-ACL7G4CF.js → claude-IYLIOOP7.js} +2 -2
- package/dist/{cleanup-W5FP3UKK.js → cleanup-Q6PEKMVF.js} +18 -18
- package/dist/cli.js +79 -73
- package/dist/cli.js.map +1 -1
- package/dist/{commit-7RI2JFFW.js → commit-JKZQYNEB.js} +8 -8
- package/dist/{compile-NWTMKAGL.js → compile-QEMZDLKO.js} +7 -7
- package/dist/{contribute-QWPOT4QR.js → contribute-TCEOVFDN.js} +4 -4
- package/dist/{dev-server-U2XUN57X.js → dev-server-25BIZKTB.js} +9 -9
- package/dist/{feedback-M43SGGK2.js → feedback-CQ42GFZE.js} +6 -6
- package/dist/{git-ZTMT6OAI.js → git-HWDX2KWU.js} +4 -4
- package/dist/{ignite-GUYKYC5G.js → ignite-25QLX2FS.js} +13 -13
- package/dist/index.d.ts +1764 -1709
- package/dist/index.js +105 -8
- package/dist/index.js.map +1 -1
- package/dist/{init-AMLCFVXG.js → init-LRNRRFFU.js} +8 -8
- package/dist/{install-deps-XS2UUCUS.js → install-deps-DHFHT3KI.js} +7 -7
- package/dist/{issues-2IT7PSNZ.js → issues-W722ILMI.js} +5 -5
- package/dist/{lint-DKWJHET3.js → lint-TZDEPVKN.js} +7 -7
- package/dist/mcp/issue-management-server.js +39 -0
- package/dist/mcp/issue-management-server.js.map +1 -1
- package/dist/mcp/recap-server.js +2 -2
- package/dist/mcp/recap-server.js.map +1 -1
- package/dist/{open-XIUV5JMJ.js → open-BCQSZYAD.js} +9 -9
- package/dist/{plan-UPYDB34J.js → plan-2LUGSOYG.js} +28 -26
- package/dist/plan-2LUGSOYG.js.map +1 -0
- package/dist/{projects-3F6T3KZL.js → projects-INTNTWRM.js} +2 -2
- package/dist/prompts/init-prompt.txt +72 -4
- package/dist/prompts/issue-prompt.txt +6 -3
- package/dist/prompts/pr-prompt.txt +3 -2
- package/dist/prompts/regular-prompt.txt +3 -2
- package/dist/prompts/session-summary-prompt.txt +2 -1
- package/dist/prompts/swarm-orchestrator-prompt.txt +2 -2
- package/dist/{rebase-6AXN45AE.js → rebase-ZKZKKQKB.js} +7 -7
- package/dist/{recap-XDKI3MTA.js → recap-XXLLMETY.js} +7 -7
- package/dist/{run-VOGGJGPO.js → run-5P5ULYZY.js} +9 -9
- package/dist/schema/settings.schema.json +50 -0
- package/dist/{shell-XOILFEZW.js → shell-GNDHII2J.js} +6 -6
- package/dist/{summary-BVYOM63C.js → summary-TVLBZNKY.js} +10 -10
- package/dist/{test-6T2UMQ7T.js → test-T5K7FOKQ.js} +7 -7
- package/dist/{test-git-CQ65OL45.js → test-git-AQ3ZQ4RA.js} +4 -4
- package/dist/{test-jira-CQQHGZ3S.js → test-jira-7XQ63U2C.js} +3 -3
- package/dist/{test-prefix-HMTZSS67.js → test-prefix-OTY2HBSB.js} +4 -4
- package/dist/{test-webserver-ZN73CM2T.js → test-webserver-CPQMUCDD.js} +6 -6
- package/dist/{vscode-ABQ5ZSH7.js → vscode-M4KRTKZK.js} +6 -6
- package/package.json +1 -1
- package/dist/LoomLauncher-KG2VBNQA.js.map +0 -1
- package/dist/chunk-CQHHEW2M.js.map +0 -1
- package/dist/chunk-DDHWZNGL.js.map +0 -1
- package/dist/chunk-DYLOITSO.js.map +0 -1
- package/dist/chunk-MNPKEWBQ.js.map +0 -1
- package/dist/chunk-OHX3PSAY.js.map +0 -1
- package/dist/chunk-RP6MHV24.js.map +0 -1
- package/dist/chunk-XIVLGWUX.js.map +0 -1
- package/dist/chunk-Y2JHYPMX.js.map +0 -1
- package/dist/chunk-Z3ZEJN3W.js.map +0 -1
- package/dist/plan-UPYDB34J.js.map +0 -1
- /package/dist/{BranchNamingService-MEK2WZUD.js.map → BranchNamingService-PBP6DY3H.js.map} +0 -0
- /package/dist/{ClaudeContextManager-KJ4VEA2F.js.map → ClaudeContextManager-3HT4LEIU.js.map} +0 -0
- /package/dist/{ClaudeService-WTJO4UW6.js.map → ClaudeService-7BHL2GWC.js.map} +0 -0
- /package/dist/{IssueTrackerFactory-UEJALI4X.js.map → IssueTrackerFactory-JH34S4GX.js.map} +0 -0
- /package/dist/{MetadataManager-HHE6LQF2.js.map → MetadataManager-WKM7JJIO.js.map} +0 -0
- /package/dist/{SettingsManager-PVHBSCMI.js.map → SettingsManager-Y5OU5HCX.js.map} +0 -0
- /package/dist/{build-2FXDYEZQ.js.map → build-NJJT6UHO.js.map} +0 -0
- /package/dist/{chunk-VUIPDX3T.js.map → chunk-27CQSBUG.js.map} +0 -0
- /package/dist/{chunk-YVNG35OW.js.map → chunk-2Z4VKQND.js.map} +0 -0
- /package/dist/{chunk-UQWMPQ2Q.js.map → chunk-4QROZMPZ.js.map} +0 -0
- /package/dist/{chunk-U2OPXZ6E.js.map → chunk-5NVJ6N3C.js.map} +0 -0
- /package/dist/{chunk-2WRD6Y5E.js.map → chunk-5VP2HAWF.js.map} +0 -0
- /package/dist/{chunk-H4TSDALC.js.map → chunk-64K5SZXC.js.map} +0 -0
- /package/dist/{chunk-5W44AI63.js.map → chunk-6FHFHMNF.js.map} +0 -0
- /package/dist/{chunk-XC5JKRSH.js.map → chunk-6RKZDUTQ.js.map} +0 -0
- /package/dist/{chunk-UMAOVKQX.js.map → chunk-CSJ7JNJV.js.map} +0 -0
- /package/dist/{chunk-AQUSMNBF.js.map → chunk-CWRQ4NU4.js.map} +0 -0
- /package/dist/{chunk-OMV47LLA.js.map → chunk-FPM6XDEO.js.map} +0 -0
- /package/dist/{chunk-ZWXJ7G2C.js.map → chunk-JIMFSNZI.js.map} +0 -0
- /package/dist/{chunk-D6FU4DLN.js.map → chunk-LULQYBRA.js.map} +0 -0
- /package/dist/{chunk-OIJNBFMP.js.map → chunk-OSWL7YDO.js.map} +0 -0
- /package/dist/{chunk-32D4CWWH.js.map → chunk-R2RGFNR4.js.map} +0 -0
- /package/dist/{chunk-MPHSR6GA.js.map → chunk-R4Y2ZBOL.js.map} +0 -0
- /package/dist/{chunk-L3P3YJCE.js.map → chunk-RLFS5KHU.js.map} +0 -0
- /package/dist/{chunk-DMNI225H.js.map → chunk-SM2YM3YR.js.map} +0 -0
- /package/dist/{chunk-OVW26FHW.js.map → chunk-VQ3Y3PVT.js.map} +0 -0
- /package/dist/{chunk-PH65MFQM.js.map → chunk-Y2TPRF5H.js.map} +0 -0
- /package/dist/{claude-ACL7G4CF.js.map → claude-IYLIOOP7.js.map} +0 -0
- /package/dist/{cleanup-W5FP3UKK.js.map → cleanup-Q6PEKMVF.js.map} +0 -0
- /package/dist/{commit-7RI2JFFW.js.map → commit-JKZQYNEB.js.map} +0 -0
- /package/dist/{compile-NWTMKAGL.js.map → compile-QEMZDLKO.js.map} +0 -0
- /package/dist/{contribute-QWPOT4QR.js.map → contribute-TCEOVFDN.js.map} +0 -0
- /package/dist/{dev-server-U2XUN57X.js.map → dev-server-25BIZKTB.js.map} +0 -0
- /package/dist/{feedback-M43SGGK2.js.map → feedback-CQ42GFZE.js.map} +0 -0
- /package/dist/{git-ZTMT6OAI.js.map → git-HWDX2KWU.js.map} +0 -0
- /package/dist/{ignite-GUYKYC5G.js.map → ignite-25QLX2FS.js.map} +0 -0
- /package/dist/{init-AMLCFVXG.js.map → init-LRNRRFFU.js.map} +0 -0
- /package/dist/{install-deps-XS2UUCUS.js.map → install-deps-DHFHT3KI.js.map} +0 -0
- /package/dist/{issues-2IT7PSNZ.js.map → issues-W722ILMI.js.map} +0 -0
- /package/dist/{lint-DKWJHET3.js.map → lint-TZDEPVKN.js.map} +0 -0
- /package/dist/{open-XIUV5JMJ.js.map → open-BCQSZYAD.js.map} +0 -0
- /package/dist/{projects-3F6T3KZL.js.map → projects-INTNTWRM.js.map} +0 -0
- /package/dist/{rebase-6AXN45AE.js.map → rebase-ZKZKKQKB.js.map} +0 -0
- /package/dist/{recap-XDKI3MTA.js.map → recap-XXLLMETY.js.map} +0 -0
- /package/dist/{run-VOGGJGPO.js.map → run-5P5ULYZY.js.map} +0 -0
- /package/dist/{shell-XOILFEZW.js.map → shell-GNDHII2J.js.map} +0 -0
- /package/dist/{summary-BVYOM63C.js.map → summary-TVLBZNKY.js.map} +0 -0
- /package/dist/{test-6T2UMQ7T.js.map → test-T5K7FOKQ.js.map} +0 -0
- /package/dist/{test-git-CQ65OL45.js.map → test-git-AQ3ZQ4RA.js.map} +0 -0
- /package/dist/{test-jira-CQQHGZ3S.js.map → test-jira-7XQ63U2C.js.map} +0 -0
- /package/dist/{test-prefix-HMTZSS67.js.map → test-prefix-OTY2HBSB.js.map} +0 -0
- /package/dist/{test-webserver-ZN73CM2T.js.map → test-webserver-CPQMUCDD.js.map} +0 -0
- /package/dist/{vscode-ABQ5ZSH7.js.map → vscode-M4KRTKZK.js.map} +0 -0
package/LICENSE
CHANGED
|
@@ -20,7 +20,7 @@ it within your organization. What is prohibited is redistributing or offering
|
|
|
20
20
|
access to this software (in original or modified form) as part of something
|
|
21
21
|
you sell or provide to others.
|
|
22
22
|
|
|
23
|
-
Change Date: 2030-03-
|
|
23
|
+
Change Date: 2030-03-25
|
|
24
24
|
Change License: Apache License 2.0
|
|
25
25
|
|
|
26
26
|
For clarity, on or after the Change Date, the Licensed Work will
|
package/README.md
CHANGED
|
@@ -880,7 +880,7 @@ License & Name
|
|
|
880
880
|
|
|
881
881
|
* ❌ You cannot resell iloom itself as a product or SaaS.
|
|
882
882
|
|
|
883
|
-
* Converts to Apache 2.0 on 2030-03-
|
|
883
|
+
* Converts to Apache 2.0 on 2030-03-25.
|
|
884
884
|
|
|
885
885
|
|
|
886
886
|
See [LICENSE](https://raw.githubusercontent.com/iloom-ai/iloom-cli/main/LICENSE) for complete terms.
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
ClaudeBranchNameStrategy,
|
|
4
4
|
DefaultBranchNamingService,
|
|
5
5
|
SimpleBranchNameStrategy
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-CWRQ4NU4.js";
|
|
7
7
|
import "./chunk-FTYWGQFM.js";
|
|
8
8
|
import "./chunk-VRPPI6GU.js";
|
|
9
9
|
export {
|
|
@@ -11,4 +11,4 @@ export {
|
|
|
11
11
|
DefaultBranchNamingService,
|
|
12
12
|
SimpleBranchNameStrategy
|
|
13
13
|
};
|
|
14
|
-
//# sourceMappingURL=BranchNamingService-
|
|
14
|
+
//# sourceMappingURL=BranchNamingService-PBP6DY3H.js.map
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
ClaudeContextManager
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-R2RGFNR4.js";
|
|
5
|
+
import "./chunk-CSJ7JNJV.js";
|
|
6
6
|
import "./chunk-LDE6VNG5.js";
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-MB4CB7Q4.js";
|
|
8
|
+
import "./chunk-UVZBZ5IF.js";
|
|
9
9
|
import "./chunk-FTYWGQFM.js";
|
|
10
10
|
import "./chunk-VRPPI6GU.js";
|
|
11
11
|
export {
|
|
12
12
|
ClaudeContextManager
|
|
13
13
|
};
|
|
14
|
-
//# sourceMappingURL=ClaudeContextManager-
|
|
14
|
+
//# sourceMappingURL=ClaudeContextManager-3HT4LEIU.js.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
ClaudeService
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-CSJ7JNJV.js";
|
|
5
5
|
import "./chunk-LDE6VNG5.js";
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-MB4CB7Q4.js";
|
|
7
|
+
import "./chunk-UVZBZ5IF.js";
|
|
8
8
|
import "./chunk-FTYWGQFM.js";
|
|
9
9
|
import "./chunk-VRPPI6GU.js";
|
|
10
10
|
export {
|
|
11
11
|
ClaudeService
|
|
12
12
|
};
|
|
13
|
-
//# sourceMappingURL=ClaudeService-
|
|
13
|
+
//# sourceMappingURL=ClaudeService-7BHL2GWC.js.map
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
IssueTrackerFactory
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-JIMFSNZI.js";
|
|
5
5
|
import "./chunk-DMSL5BAP.js";
|
|
6
6
|
import "./chunk-D4Q7T5KD.js";
|
|
7
7
|
import "./chunk-KV4NU3RP.js";
|
|
8
8
|
import "./chunk-NPVA65KS.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-UVZBZ5IF.js";
|
|
10
10
|
import "./chunk-FTYWGQFM.js";
|
|
11
11
|
import "./chunk-VRPPI6GU.js";
|
|
12
12
|
export {
|
|
13
13
|
IssueTrackerFactory
|
|
14
14
|
};
|
|
15
|
-
//# sourceMappingURL=IssueTrackerFactory-
|
|
15
|
+
//# sourceMappingURL=IssueTrackerFactory-JH34S4GX.js.map
|
|
@@ -4,8 +4,8 @@ import {
|
|
|
4
4
|
} from "./chunk-CE676WCN.js";
|
|
5
5
|
import {
|
|
6
6
|
ClaudeContextManager
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-R2RGFNR4.js";
|
|
8
|
+
import "./chunk-CSJ7JNJV.js";
|
|
9
9
|
import "./chunk-LDE6VNG5.js";
|
|
10
10
|
import {
|
|
11
11
|
getExecutablePath
|
|
@@ -14,8 +14,8 @@ import {
|
|
|
14
14
|
generateColorFromBranchName,
|
|
15
15
|
hexToRgb
|
|
16
16
|
} from "./chunk-OIVFHJOA.js";
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-MB4CB7Q4.js";
|
|
18
|
+
import "./chunk-UVZBZ5IF.js";
|
|
19
19
|
import {
|
|
20
20
|
getLogger
|
|
21
21
|
} from "./chunk-FTYWGQFM.js";
|
|
@@ -170,6 +170,9 @@ var LoomLauncher = class {
|
|
|
170
170
|
if (options.complexity) {
|
|
171
171
|
claudeCommand += ` --complexity=${options.complexity}`;
|
|
172
172
|
}
|
|
173
|
+
if (options.effort) {
|
|
174
|
+
claudeCommand += ` --effort=${options.effort}`;
|
|
175
|
+
}
|
|
173
176
|
const backgroundColor = options.colorTerminal ?? true ? options.colorHex ? hexToRgb(options.colorHex) : generateColorFromBranchName(options.branchName).rgb : void 0;
|
|
174
177
|
return {
|
|
175
178
|
workspacePath: options.worktreePath,
|
|
@@ -255,4 +258,4 @@ var LoomLauncher = class {
|
|
|
255
258
|
export {
|
|
256
259
|
LoomLauncher
|
|
257
260
|
};
|
|
258
|
-
//# sourceMappingURL=LoomLauncher-
|
|
261
|
+
//# sourceMappingURL=LoomLauncher-RGXJOCMC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/LoomLauncher.ts"],"sourcesContent":["import { existsSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { openTerminalWindow, openMultipleTerminalWindows } from '../utils/terminal.js'\nimport type { TerminalWindowOptions } from '../utils/terminal.js'\nimport { openIdeWindow } from '../utils/ide.js'\nimport { generateColorFromBranchName, hexToRgb } from '../utils/color.js'\nimport { getLogger } from '../utils/logger-context.js'\nimport { ClaudeContextManager } from './ClaudeContextManager.js'\nimport type { SettingsManager } from './SettingsManager.js'\nimport type { Capability } from '../types/loom.js'\nimport { getDotenvFlowFiles } from '../utils/env.js'\nimport { getExecutablePath } from '../utils/cli-overrides.js'\n\nexport interface LaunchLoomOptions {\n\tenableClaude: boolean\n\tenableCode: boolean\n\tenableDevServer: boolean\n\tenableTerminal: boolean\n\tworktreePath: string\n\tbranchName: string\n\tport?: number\n\tcapabilities: Capability[]\n\tworkflowType: 'issue' | 'pr' | 'regular'\n\tidentifier: string | number\n\ttitle?: string\n\toneShot?: import('../types/index.js').OneShotMode\n\tsetArguments?: string[] // Raw --set arguments to forward\n\texecutablePath?: string // Executable path to use for spin command\n\tsourceEnvOnStart?: boolean // defaults to false if undefined\n\tcolorTerminal?: boolean // defaults to true if undefined\n\tcolorHex?: string // Pre-calculated hex color from metadata, avoids recalculation\n\tcomplexity?: import('../types/index.js').ComplexityOverride\n\teffort?: import('../types/index.js').EffortLevel\n}\n\n/**\n * LoomLauncher orchestrates opening loom components\n */\nexport class LoomLauncher {\n\tprivate claudeContext: ClaudeContextManager\n\tprivate settings?: SettingsManager\n\n\tconstructor(claudeContext?: ClaudeContextManager, settings?: SettingsManager) {\n\t\tthis.claudeContext = claudeContext ?? new ClaudeContextManager()\n\t\tif (settings !== undefined) {\n\t\t\tthis.settings = settings\n\t\t}\n\t}\n\n\t/**\n\t * Launch loom components based on individual flags\n\t */\n\tasync launchLoom(options: LaunchLoomOptions): Promise<void> {\n\t\tconst { enableClaude, enableCode, enableDevServer, enableTerminal } = options\n\n\t\tgetLogger().debug(`Launching loom components: Claude=${enableClaude}, Code=${enableCode}, DevServer=${enableDevServer}, Terminal=${enableTerminal}`)\n\n\t\tconst launchPromises: Promise<void>[] = []\n\n\t\t// Launch VSCode if enabled\n\t\tif (enableCode) {\n\t\t\tgetLogger().debug('Launching VSCode')\n\t\t\tlaunchPromises.push(this.launchVSCode(options))\n\t\t}\n\n\t\t// Build array of terminals to launch\n\t\tconst terminalsToLaunch: Array<{\n\t\t\ttype: 'claude' | 'devServer' | 'terminal'\n\t\t\toptions: TerminalWindowOptions\n\t\t}> = []\n\n\t\tif (enableDevServer) {\n\t\t\tterminalsToLaunch.push({\n\t\t\t\ttype: 'devServer',\n\t\t\t\toptions: this.buildDevServerTerminalOptions(options),\n\t\t\t})\n\t\t}\n\n\t\tif (enableTerminal) {\n\t\t\tterminalsToLaunch.push({\n\t\t\t\ttype: 'terminal',\n\t\t\t\toptions: this.buildStandaloneTerminalOptions(options),\n\t\t\t})\n\t\t}\n\n\t\tif (enableClaude) {\n\t\t\tterminalsToLaunch.push({\n\t\t\t\ttype: 'claude',\n\t\t\t\toptions: await this.buildClaudeTerminalOptions(options),\n\t\t\t})\n\t\t}\n\n\t\t// Launch terminals based on count\n\t\tif (terminalsToLaunch.length > 1) {\n\t\t\t// Multiple terminals - launch as tabs in single window\n\t\t\tgetLogger().debug(`Launching ${terminalsToLaunch.length} terminals in single window`)\n\t\t\tlaunchPromises.push(this.launchMultipleTerminals(terminalsToLaunch, options))\n\t\t} else if (terminalsToLaunch.length === 1) {\n\t\t\t// Single terminal - launch standalone\n\t\t\tconst terminal = terminalsToLaunch[0]\n\t\t\tif (!terminal) {\n\t\t\t\tthrow new Error('Terminal configuration is undefined')\n\t\t\t}\n\t\t\tconst terminalType = terminal.type\n\t\t\tgetLogger().debug(`Launching single ${terminalType} terminal`)\n\n\t\t\tif (terminalType === 'claude') {\n\t\t\t\tlaunchPromises.push(this.launchClaudeTerminal(options))\n\t\t\t} else if (terminalType === 'devServer') {\n\t\t\t\tlaunchPromises.push(this.launchDevServerTerminal(options))\n\t\t\t} else {\n\t\t\t\tlaunchPromises.push(this.launchStandaloneTerminal(options))\n\t\t\t}\n\t\t}\n\n\t\t// Wait for all components to launch\n\t\tawait Promise.all(launchPromises)\n\n\t\tgetLogger().success('loom launched successfully')\n\t}\n\n\t/**\n\t * Launch IDE (VSCode or configured alternative)\n\t */\n\tprivate async launchVSCode(options: LaunchLoomOptions): Promise<void> {\n\t\tconst ideConfig = await this.settings?.loadSettings().then((s) => s.ide)\n\t\tawait openIdeWindow(options.worktreePath, ideConfig)\n\t\tgetLogger().info('IDE opened')\n\t}\n\n\t/**\n\t * Launch Claude terminal\n\t */\n\tprivate async launchClaudeTerminal(options: LaunchLoomOptions): Promise<void> {\n\t\tawait this.claudeContext.launchWithContext({\n\t\t\tworkspacePath: options.worktreePath,\n\t\t\ttype: options.workflowType,\n\t\t\tidentifier: options.identifier,\n\t\t\tbranchName: options.branchName,\n\t\t\t...(options.title && { title: options.title }),\n\t\t\t...(options.port !== undefined && { port: options.port }),\n\t\t\toneShot: options.oneShot ?? 'default',\n\t\t\t...(options.setArguments && { setArguments: options.setArguments }),\n\t\t\t...(options.executablePath && { executablePath: options.executablePath }),\n\t\t})\n\t\tgetLogger().info('Claude terminal opened')\n\t}\n\n\t/**\n\t * Launch dev server terminal\n\t * Runs `il dev-server [identifier]` which handles env loading internally\n\t */\n\tprivate async launchDevServerTerminal(options: LaunchLoomOptions): Promise<void> {\n\t\t// Build dev-server command with identifier\n\t\tconst executable = options.executablePath ?? getExecutablePath()\n\t\tconst devServerIdentifier = String(options.identifier)\n\t\tconst devServerCommand = `${executable} dev-server ${devServerIdentifier}`\n\n\t\t// Only generate color if terminal coloring is enabled (default: true)\n\t\tconst backgroundColor = (options.colorTerminal ?? true)\n\t\t\t? options.colorHex\n\t\t\t\t? hexToRgb(options.colorHex)\n\t\t\t\t: generateColorFromBranchName(options.branchName).rgb\n\t\t\t: undefined\n\n\t\tawait openTerminalWindow({\n\t\t\tworkspacePath: options.worktreePath,\n\t\t\tcommand: devServerCommand,\n\t\t\t...(backgroundColor && { backgroundColor }),\n\t\t\t// il dev-server handles env loading internally, so no includeEnvSetup\n\t\t\tincludeEnvSetup: false,\n\t\t\tincludePortExport: options.capabilities.includes('web'),\n\t\t\t...(options.port !== undefined && { port: options.port }),\n\t\t})\n\t\tgetLogger().info('Dev server terminal opened')\n\t}\n\n\t/**\n\t * Launch standalone terminal running `il shell <identifier>`\n\t */\n\tprivate async launchStandaloneTerminal(options: LaunchLoomOptions): Promise<void> {\n\t\t// Build shell command with identifier\n\t\tconst executable = options.executablePath ?? getExecutablePath()\n\t\tconst shellIdentifier = String(options.identifier)\n\t\tconst shellCommand = `${executable} shell ${shellIdentifier}`\n\n\t\t// Only generate color if terminal coloring is enabled (default: true)\n\t\tconst backgroundColor = (options.colorTerminal ?? true)\n\t\t\t? options.colorHex\n\t\t\t\t? hexToRgb(options.colorHex)\n\t\t\t\t: generateColorFromBranchName(options.branchName).rgb\n\t\t\t: undefined\n\n\t\tawait openTerminalWindow({\n\t\t\tworkspacePath: options.worktreePath,\n\t\t\tcommand: shellCommand,\n\t\t\t...(backgroundColor && { backgroundColor }),\n\t\t\t// il shell handles env loading internally, so we don't need includeEnvSetup\n\t\t\tincludeEnvSetup: false,\n\t\t\tincludePortExport: options.capabilities.includes('web'),\n\t\t\t...(options.port !== undefined && { port: options.port }),\n\t\t})\n\t\tgetLogger().info('Standalone terminal opened')\n\t}\n\n\t/**\n\t * Build terminal options for Claude\n\t */\n\tprivate async buildClaudeTerminalOptions(\n\t\toptions: LaunchLoomOptions\n\t): Promise<TerminalWindowOptions> {\n\t\tconst hasEnvFile = this.hasAnyEnvFiles(options.worktreePath)\n\t\tconst claudeTitle = `Claude - ${this.formatIdentifier(options.workflowType, options.identifier)}`\n\n\t\tconst executable = options.executablePath ?? 'iloom'\n\t\tlet claudeCommand = `${executable} spin`\n\t\tif (options.oneShot !== undefined && options.oneShot !== 'default') {\n\t\t\tclaudeCommand += ` --one-shot=${options.oneShot}`\n\t\t}\n\t\tif (options.setArguments && options.setArguments.length > 0) {\n\t\t\tfor (const setArg of options.setArguments) {\n\t\t\t\tclaudeCommand += ` --set ${setArg}`\n\t\t\t}\n\t\t}\n\t\tif (options.complexity) {\n\t\t\tclaudeCommand += ` --complexity=${options.complexity}`\n\t\t}\n\t\tif (options.effort) {\n\t\t\tclaudeCommand += ` --effort=${options.effort}`\n\t\t}\n\n\t\t// Only generate color if terminal coloring is enabled (default: true)\n\t\tconst backgroundColor = (options.colorTerminal ?? true)\n\t\t\t? options.colorHex\n\t\t\t\t? hexToRgb(options.colorHex)\n\t\t\t\t: generateColorFromBranchName(options.branchName).rgb\n\t\t\t: undefined\n\n\t\treturn {\n\t\t\tworkspacePath: options.worktreePath,\n\t\t\tcommand: claudeCommand,\n\t\t\t...(backgroundColor && { backgroundColor }),\n\t\t\ttitle: claudeTitle,\n\t\t\tincludeEnvSetup: (options.sourceEnvOnStart ?? false) && hasEnvFile,\n\t\t\t...(options.port !== undefined && { port: options.port, includePortExport: true }),\n\t\t}\n\t}\n\n\t/**\n\t * Build terminal options for dev server\n\t * Uses `il dev-server [identifier]` which handles env loading internally\n\t */\n\tprivate buildDevServerTerminalOptions(\n\t\toptions: LaunchLoomOptions\n\t): TerminalWindowOptions {\n\t\t// Build dev-server command with identifier\n\t\tconst executable = options.executablePath ?? getExecutablePath()\n\t\tconst devServerIdentifier = String(options.identifier)\n\t\tconst devServerCommand = `${executable} dev-server ${devServerIdentifier}`\n\n\t\tconst devServerTitle = `Dev Server - ${this.formatIdentifier(options.workflowType, options.identifier)}`\n\n\t\t// Only generate color if terminal coloring is enabled (default: true)\n\t\tconst backgroundColor = (options.colorTerminal ?? true)\n\t\t\t? options.colorHex\n\t\t\t\t? hexToRgb(options.colorHex)\n\t\t\t\t: generateColorFromBranchName(options.branchName).rgb\n\t\t\t: undefined\n\n\t\treturn {\n\t\t\tworkspacePath: options.worktreePath,\n\t\t\tcommand: devServerCommand,\n\t\t\t...(backgroundColor && { backgroundColor }),\n\t\t\ttitle: devServerTitle,\n\t\t\t// il dev-server handles env loading internally\n\t\t\tincludeEnvSetup: false,\n\t\t\tincludePortExport: options.capabilities.includes('web'),\n\t\t\t...(options.port !== undefined && { port: options.port }),\n\t\t}\n\t}\n\n\t/**\n\t * Build terminal options for standalone terminal\n\t * Runs `il shell <identifier>` which handles env loading internally\n\t */\n\tprivate buildStandaloneTerminalOptions(\n\t\toptions: LaunchLoomOptions\n\t): TerminalWindowOptions {\n\t\tconst terminalTitle = `Terminal - ${this.formatIdentifier(options.workflowType, options.identifier)}`\n\n\t\t// Build shell command with identifier\n\t\t// Use the same executable path pattern as buildClaudeTerminalOptions\n\t\tconst executable = options.executablePath ?? getExecutablePath()\n\t\tconst shellIdentifier = String(options.identifier)\n\t\tconst shellCommand = `${executable} shell ${shellIdentifier}`\n\n\t\t// Only generate color if terminal coloring is enabled (default: true)\n\t\tconst backgroundColor = (options.colorTerminal ?? true)\n\t\t\t? options.colorHex\n\t\t\t\t? hexToRgb(options.colorHex)\n\t\t\t\t: generateColorFromBranchName(options.branchName).rgb\n\t\t\t: undefined\n\n\t\treturn {\n\t\t\tworkspacePath: options.worktreePath,\n\t\t\tcommand: shellCommand,\n\t\t\t...(backgroundColor && { backgroundColor }),\n\t\t\ttitle: terminalTitle,\n\t\t\t// il shell handles env loading internally, so we don't need includeEnvSetup\n\t\t\tincludeEnvSetup: false,\n\t\t\tincludePortExport: options.capabilities.includes('web'),\n\t\t\t...(options.port !== undefined && { port: options.port }),\n\t\t}\n\t}\n\n\t/**\n\t * Launch multiple terminals (2+) as tabs in single window\n\t */\n\tprivate async launchMultipleTerminals(\n\t\tterminals: Array<{ type: string; options: TerminalWindowOptions }>,\n\t\t_options: LaunchLoomOptions\n\t): Promise<void> {\n\t\tconst terminalOptions = terminals.map((t) => t.options)\n\n\t\tawait openMultipleTerminalWindows(terminalOptions)\n\n\t\tconst terminalTypes = terminals.map((t) => t.type).join(' + ')\n\t\tgetLogger().info(`Multiple terminals opened: ${terminalTypes}`)\n\t}\n\n\t/**\n\t * Check if any dotenv-flow files exist in the workspace\n\t * Checks all files: .env, .env.local, .env.{NODE_ENV}, .env.{NODE_ENV}.local\n\t */\n\tprivate hasAnyEnvFiles(workspacePath: string): boolean {\n\t\tconst envFiles = getDotenvFlowFiles()\n\t\treturn envFiles.some(file => existsSync(join(workspacePath, file)))\n\t}\n\n\t/**\n\t * Format identifier for terminal tab titles\n\t */\n\tprivate formatIdentifier(workflowType: 'issue' | 'pr' | 'regular', identifier: string | number): string {\n\t\tif (workflowType === 'issue') {\n\t\t\treturn `Issue #${identifier}`\n\t\t} else if (workflowType === 'pr') {\n\t\t\treturn `PR #${identifier}`\n\t\t} else {\n\t\t\treturn `Branch: ${identifier}`\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,kBAAkB;AAC3B,SAAS,YAAY;AAqCd,IAAM,eAAN,MAAmB;AAAA,EAIzB,YAAY,eAAsC,UAA4B;AAC7E,SAAK,gBAAgB,iBAAiB,IAAI,qBAAqB;AAC/D,QAAI,aAAa,QAAW;AAC3B,WAAK,WAAW;AAAA,IACjB;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAW,SAA2C;AAC3D,UAAM,EAAE,cAAc,YAAY,iBAAiB,eAAe,IAAI;AAEtE,cAAU,EAAE,MAAM,qCAAqC,YAAY,UAAU,UAAU,eAAe,eAAe,cAAc,cAAc,EAAE;AAEnJ,UAAM,iBAAkC,CAAC;AAGzC,QAAI,YAAY;AACf,gBAAU,EAAE,MAAM,kBAAkB;AACpC,qBAAe,KAAK,KAAK,aAAa,OAAO,CAAC;AAAA,IAC/C;AAGA,UAAM,oBAGD,CAAC;AAEN,QAAI,iBAAiB;AACpB,wBAAkB,KAAK;AAAA,QACtB,MAAM;AAAA,QACN,SAAS,KAAK,8BAA8B,OAAO;AAAA,MACpD,CAAC;AAAA,IACF;AAEA,QAAI,gBAAgB;AACnB,wBAAkB,KAAK;AAAA,QACtB,MAAM;AAAA,QACN,SAAS,KAAK,+BAA+B,OAAO;AAAA,MACrD,CAAC;AAAA,IACF;AAEA,QAAI,cAAc;AACjB,wBAAkB,KAAK;AAAA,QACtB,MAAM;AAAA,QACN,SAAS,MAAM,KAAK,2BAA2B,OAAO;AAAA,MACvD,CAAC;AAAA,IACF;AAGA,QAAI,kBAAkB,SAAS,GAAG;AAEjC,gBAAU,EAAE,MAAM,aAAa,kBAAkB,MAAM,6BAA6B;AACpF,qBAAe,KAAK,KAAK,wBAAwB,mBAAmB,OAAO,CAAC;AAAA,IAC7E,WAAW,kBAAkB,WAAW,GAAG;AAE1C,YAAM,WAAW,kBAAkB,CAAC;AACpC,UAAI,CAAC,UAAU;AACd,cAAM,IAAI,MAAM,qCAAqC;AAAA,MACtD;AACA,YAAM,eAAe,SAAS;AAC9B,gBAAU,EAAE,MAAM,oBAAoB,YAAY,WAAW;AAE7D,UAAI,iBAAiB,UAAU;AAC9B,uBAAe,KAAK,KAAK,qBAAqB,OAAO,CAAC;AAAA,MACvD,WAAW,iBAAiB,aAAa;AACxC,uBAAe,KAAK,KAAK,wBAAwB,OAAO,CAAC;AAAA,MAC1D,OAAO;AACN,uBAAe,KAAK,KAAK,yBAAyB,OAAO,CAAC;AAAA,MAC3D;AAAA,IACD;AAGA,UAAM,QAAQ,IAAI,cAAc;AAEhC,cAAU,EAAE,QAAQ,4BAA4B;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,aAAa,SAA2C;AA5HvE;AA6HE,UAAM,YAAY,QAAM,UAAK,aAAL,mBAAe,eAAe,KAAK,CAAC,MAAM,EAAE;AACpE,UAAM,cAAc,QAAQ,cAAc,SAAS;AACnD,cAAU,EAAE,KAAK,YAAY;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,qBAAqB,SAA2C;AAC7E,UAAM,KAAK,cAAc,kBAAkB;AAAA,MAC1C,eAAe,QAAQ;AAAA,MACvB,MAAM,QAAQ;AAAA,MACd,YAAY,QAAQ;AAAA,MACpB,YAAY,QAAQ;AAAA,MACpB,GAAI,QAAQ,SAAS,EAAE,OAAO,QAAQ,MAAM;AAAA,MAC5C,GAAI,QAAQ,SAAS,UAAa,EAAE,MAAM,QAAQ,KAAK;AAAA,MACvD,SAAS,QAAQ,WAAW;AAAA,MAC5B,GAAI,QAAQ,gBAAgB,EAAE,cAAc,QAAQ,aAAa;AAAA,MACjE,GAAI,QAAQ,kBAAkB,EAAE,gBAAgB,QAAQ,eAAe;AAAA,IACxE,CAAC;AACD,cAAU,EAAE,KAAK,wBAAwB;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,wBAAwB,SAA2C;AAEhF,UAAM,aAAa,QAAQ,kBAAkB,kBAAkB;AAC/D,UAAM,sBAAsB,OAAO,QAAQ,UAAU;AACrD,UAAM,mBAAmB,GAAG,UAAU,eAAe,mBAAmB;AAGxE,UAAM,kBAAmB,QAAQ,iBAAiB,OAC/C,QAAQ,WACP,SAAS,QAAQ,QAAQ,IACzB,4BAA4B,QAAQ,UAAU,EAAE,MACjD;AAEH,UAAM,mBAAmB;AAAA,MACxB,eAAe,QAAQ;AAAA,MACvB,SAAS;AAAA,MACT,GAAI,mBAAmB,EAAE,gBAAgB;AAAA;AAAA,MAEzC,iBAAiB;AAAA,MACjB,mBAAmB,QAAQ,aAAa,SAAS,KAAK;AAAA,MACtD,GAAI,QAAQ,SAAS,UAAa,EAAE,MAAM,QAAQ,KAAK;AAAA,IACxD,CAAC;AACD,cAAU,EAAE,KAAK,4BAA4B;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,yBAAyB,SAA2C;AAEjF,UAAM,aAAa,QAAQ,kBAAkB,kBAAkB;AAC/D,UAAM,kBAAkB,OAAO,QAAQ,UAAU;AACjD,UAAM,eAAe,GAAG,UAAU,UAAU,eAAe;AAG3D,UAAM,kBAAmB,QAAQ,iBAAiB,OAC/C,QAAQ,WACP,SAAS,QAAQ,QAAQ,IACzB,4BAA4B,QAAQ,UAAU,EAAE,MACjD;AAEH,UAAM,mBAAmB;AAAA,MACxB,eAAe,QAAQ;AAAA,MACvB,SAAS;AAAA,MACT,GAAI,mBAAmB,EAAE,gBAAgB;AAAA;AAAA,MAEzC,iBAAiB;AAAA,MACjB,mBAAmB,QAAQ,aAAa,SAAS,KAAK;AAAA,MACtD,GAAI,QAAQ,SAAS,UAAa,EAAE,MAAM,QAAQ,KAAK;AAAA,IACxD,CAAC;AACD,cAAU,EAAE,KAAK,4BAA4B;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,2BACb,SACiC;AACjC,UAAM,aAAa,KAAK,eAAe,QAAQ,YAAY;AAC3D,UAAM,cAAc,YAAY,KAAK,iBAAiB,QAAQ,cAAc,QAAQ,UAAU,CAAC;AAE/F,UAAM,aAAa,QAAQ,kBAAkB;AAC7C,QAAI,gBAAgB,GAAG,UAAU;AACjC,QAAI,QAAQ,YAAY,UAAa,QAAQ,YAAY,WAAW;AACnE,uBAAiB,eAAe,QAAQ,OAAO;AAAA,IAChD;AACA,QAAI,QAAQ,gBAAgB,QAAQ,aAAa,SAAS,GAAG;AAC5D,iBAAW,UAAU,QAAQ,cAAc;AAC1C,yBAAiB,UAAU,MAAM;AAAA,MAClC;AAAA,IACD;AACA,QAAI,QAAQ,YAAY;AACvB,uBAAiB,iBAAiB,QAAQ,UAAU;AAAA,IACrD;AACA,QAAI,QAAQ,QAAQ;AACnB,uBAAiB,aAAa,QAAQ,MAAM;AAAA,IAC7C;AAGA,UAAM,kBAAmB,QAAQ,iBAAiB,OAC/C,QAAQ,WACP,SAAS,QAAQ,QAAQ,IACzB,4BAA4B,QAAQ,UAAU,EAAE,MACjD;AAEH,WAAO;AAAA,MACN,eAAe,QAAQ;AAAA,MACvB,SAAS;AAAA,MACT,GAAI,mBAAmB,EAAE,gBAAgB;AAAA,MACzC,OAAO;AAAA,MACP,kBAAkB,QAAQ,oBAAoB,UAAU;AAAA,MACxD,GAAI,QAAQ,SAAS,UAAa,EAAE,MAAM,QAAQ,MAAM,mBAAmB,KAAK;AAAA,IACjF;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,8BACP,SACwB;AAExB,UAAM,aAAa,QAAQ,kBAAkB,kBAAkB;AAC/D,UAAM,sBAAsB,OAAO,QAAQ,UAAU;AACrD,UAAM,mBAAmB,GAAG,UAAU,eAAe,mBAAmB;AAExE,UAAM,iBAAiB,gBAAgB,KAAK,iBAAiB,QAAQ,cAAc,QAAQ,UAAU,CAAC;AAGtG,UAAM,kBAAmB,QAAQ,iBAAiB,OAC/C,QAAQ,WACP,SAAS,QAAQ,QAAQ,IACzB,4BAA4B,QAAQ,UAAU,EAAE,MACjD;AAEH,WAAO;AAAA,MACN,eAAe,QAAQ;AAAA,MACvB,SAAS;AAAA,MACT,GAAI,mBAAmB,EAAE,gBAAgB;AAAA,MACzC,OAAO;AAAA;AAAA,MAEP,iBAAiB;AAAA,MACjB,mBAAmB,QAAQ,aAAa,SAAS,KAAK;AAAA,MACtD,GAAI,QAAQ,SAAS,UAAa,EAAE,MAAM,QAAQ,KAAK;AAAA,IACxD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,+BACP,SACwB;AACxB,UAAM,gBAAgB,cAAc,KAAK,iBAAiB,QAAQ,cAAc,QAAQ,UAAU,CAAC;AAInG,UAAM,aAAa,QAAQ,kBAAkB,kBAAkB;AAC/D,UAAM,kBAAkB,OAAO,QAAQ,UAAU;AACjD,UAAM,eAAe,GAAG,UAAU,UAAU,eAAe;AAG3D,UAAM,kBAAmB,QAAQ,iBAAiB,OAC/C,QAAQ,WACP,SAAS,QAAQ,QAAQ,IACzB,4BAA4B,QAAQ,UAAU,EAAE,MACjD;AAEH,WAAO;AAAA,MACN,eAAe,QAAQ;AAAA,MACvB,SAAS;AAAA,MACT,GAAI,mBAAmB,EAAE,gBAAgB;AAAA,MACzC,OAAO;AAAA;AAAA,MAEP,iBAAiB;AAAA,MACjB,mBAAmB,QAAQ,aAAa,SAAS,KAAK;AAAA,MACtD,GAAI,QAAQ,SAAS,UAAa,EAAE,MAAM,QAAQ,KAAK;AAAA,IACxD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,wBACb,WACA,UACgB;AAChB,UAAM,kBAAkB,UAAU,IAAI,CAAC,MAAM,EAAE,OAAO;AAEtD,UAAM,4BAA4B,eAAe;AAEjD,UAAM,gBAAgB,UAAU,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,KAAK;AAC7D,cAAU,EAAE,KAAK,8BAA8B,aAAa,EAAE;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,eAAe,eAAgC;AACtD,UAAM,WAAW,mBAAmB;AACpC,WAAO,SAAS,KAAK,UAAQ,WAAW,KAAK,eAAe,IAAI,CAAC,CAAC;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAiB,cAA0C,YAAqC;AACvG,QAAI,iBAAiB,SAAS;AAC7B,aAAO,UAAU,UAAU;AAAA,IAC5B,WAAW,iBAAiB,MAAM;AACjC,aAAO,OAAO,UAAU;AAAA,IACzB,OAAO;AACN,aAAO,WAAW,UAAU;AAAA,IAC7B;AAAA,EACD;AACD;","names":[]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
MetadataManager
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-JDXJIPXR.js";
|
|
5
5
|
import "./chunk-FTYWGQFM.js";
|
|
6
6
|
import "./chunk-VRPPI6GU.js";
|
|
7
7
|
export {
|
|
8
8
|
MetadataManager
|
|
9
9
|
};
|
|
10
|
-
//# sourceMappingURL=MetadataManager-
|
|
10
|
+
//# sourceMappingURL=MetadataManager-WKM7JJIO.js.map
|
package/dist/README.md
CHANGED
|
@@ -880,7 +880,7 @@ License & Name
|
|
|
880
880
|
|
|
881
881
|
* ❌ You cannot resell iloom itself as a product or SaaS.
|
|
882
882
|
|
|
883
|
-
* Converts to Apache 2.0 on 2030-03-
|
|
883
|
+
* Converts to Apache 2.0 on 2030-03-25.
|
|
884
884
|
|
|
885
885
|
|
|
886
886
|
See [LICENSE](https://raw.githubusercontent.com/iloom-ai/iloom-cli/main/LICENSE) for complete terms.
|
|
@@ -15,13 +15,14 @@ import {
|
|
|
15
15
|
SpinAgentSettingsSchema,
|
|
16
16
|
SummarySettingsSchema,
|
|
17
17
|
VALID_CLAUDE_MODELS,
|
|
18
|
+
VALID_EFFORT_LEVELS,
|
|
18
19
|
WorkflowPermissionSchema,
|
|
19
20
|
WorkflowPermissionSchemaNoDefaults,
|
|
20
21
|
WorkflowsSettingsSchema,
|
|
21
22
|
WorkflowsSettingsSchemaNoDefaults,
|
|
22
23
|
mergeModeValues,
|
|
23
24
|
redactSensitiveFields
|
|
24
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-UVZBZ5IF.js";
|
|
25
26
|
import "./chunk-VRPPI6GU.js";
|
|
26
27
|
export {
|
|
27
28
|
AgentSettingsSchema,
|
|
@@ -39,6 +40,7 @@ export {
|
|
|
39
40
|
SpinAgentSettingsSchema,
|
|
40
41
|
SummarySettingsSchema,
|
|
41
42
|
VALID_CLAUDE_MODELS,
|
|
43
|
+
VALID_EFFORT_LEVELS,
|
|
42
44
|
WorkflowPermissionSchema,
|
|
43
45
|
WorkflowPermissionSchemaNoDefaults,
|
|
44
46
|
WorkflowsSettingsSchema,
|
|
@@ -46,4 +48,4 @@ export {
|
|
|
46
48
|
mergeModeValues,
|
|
47
49
|
redactSensitiveFields
|
|
48
50
|
};
|
|
49
|
-
//# sourceMappingURL=SettingsManager-
|
|
51
|
+
//# sourceMappingURL=SettingsManager-Y5OU5HCX.js.map
|
package/dist/agents/CLAUDE.md
CHANGED
|
@@ -34,11 +34,14 @@ complexity-evaluator → analyzer (or analyze-and-plan for SIMPLE) → planner
|
|
|
34
34
|
|
|
35
35
|
## YAML Frontmatter Format
|
|
36
36
|
|
|
37
|
+
Frontmatter fields support Handlebars expressions because template substitution runs on the raw file content **before** YAML parsing. This allows conditional defaults based on execution mode (e.g., swarm vs regular).
|
|
38
|
+
|
|
37
39
|
```yaml
|
|
38
40
|
---
|
|
39
41
|
name: iloom-issue-implementer
|
|
40
42
|
description: One-line description of this agent's role
|
|
41
|
-
model:
|
|
43
|
+
model: {{#if SWARM_MODE}}sonnet{{else}}opus{{/if}}
|
|
44
|
+
{{#if SWARM_MODE}}effort: medium{{/if}}
|
|
42
45
|
color: green # Optional: terminal color for status display
|
|
43
46
|
tools: # Optional: restrict available tools
|
|
44
47
|
- Read
|
|
@@ -49,15 +52,17 @@ tools: # Optional: restrict available tools
|
|
|
49
52
|
Agent prompt content in Markdown...
|
|
50
53
|
```
|
|
51
54
|
|
|
52
|
-
|
|
55
|
+
When `SWARM_MODE` is falsy, conditional lines (like `{{#if SWARM_MODE}}effort: medium{{/if}}`) resolve to an empty line, which is ignored by the parser — the agent inherits the session default.
|
|
56
|
+
|
|
57
|
+
## Model and Effort Override Rules
|
|
53
58
|
|
|
54
|
-
Agent models resolve in this order (highest priority first):
|
|
59
|
+
Agent models and effort resolve in this order (highest priority first):
|
|
55
60
|
1. **CLI flag**: `--set agents.iloom-issue-implementer.model=sonnet`
|
|
56
|
-
2. **Settings**: `settings.agents["iloom-issue-implementer"].model`
|
|
57
|
-
3. **Swarm
|
|
58
|
-
4. **Frontmatter**: The `model` field in
|
|
61
|
+
2. **Settings**: `settings.agents["iloom-issue-implementer"].model` / `.effort`
|
|
62
|
+
3. **Swarm settings**: `settings.agents["iloom-issue-implementer"].swarmModel` / `.swarmEffort` (applied by `SwarmSetupService` in swarm mode)
|
|
63
|
+
4. **Frontmatter**: The `model` / `effort` field in YAML above (which may use `{{#if SWARM_MODE}}` conditionals for mode-specific defaults)
|
|
59
64
|
|
|
60
|
-
|
|
65
|
+
Swarm-specific model and effort defaults are declared directly in agent template frontmatter using `{{#if SWARM_MODE}}` conditionals, not in hardcoded maps.
|
|
61
66
|
|
|
62
67
|
## Swarm Agent Rendering
|
|
63
68
|
|
|
@@ -3,6 +3,7 @@ name: iloom-framework-detector
|
|
|
3
3
|
description: Use this agent to detect a project's language and framework, then generate appropriate build/test/dev scripts for non-Node.js projects. The agent creates `.iloom/package.iloom.json` with shell commands tailored to the detected stack. Use this for Python, Rust, Ruby, Go, and other non-Node.js projects that don't have a package.json.
|
|
4
4
|
color: cyan
|
|
5
5
|
model: opus
|
|
6
|
+
effort: high
|
|
6
7
|
---
|
|
7
8
|
|
|
8
9
|
You are Claude, a framework detection specialist. Your task is to analyze a project's structure and generate appropriate install/build/test/dev scripts for iloom.
|
|
@@ -60,9 +61,9 @@ If only `origin` exists (or no upstream), proceed normally with `package.iloom.j
|
|
|
60
61
|
|
|
61
62
|
## Core Workflow
|
|
62
63
|
|
|
63
|
-
### Step 1: Scan for Language Markers
|
|
64
|
+
### Step 1: Scan for Language Markers and Dockerfile
|
|
64
65
|
|
|
65
|
-
Examine the project root for language-specific files:
|
|
66
|
+
Examine the project root for language-specific files **and** a Dockerfile:
|
|
66
67
|
|
|
67
68
|
| Marker File | Language | Package Manager |
|
|
68
69
|
|-------------|----------|-----------------|
|
|
@@ -76,10 +77,11 @@ Examine the project root for language-specific files:
|
|
|
76
77
|
| `*.csproj`, `*.sln` | C#/.NET | dotnet |
|
|
77
78
|
| `Makefile` | C/C++/Generic | make |
|
|
78
79
|
| `CMakeLists.txt` | C/C++ | cmake |
|
|
80
|
+
| `Dockerfile` | Any (Docker) | docker |
|
|
79
81
|
|
|
80
82
|
Use the `Glob` tool to check for these files:
|
|
81
83
|
```
|
|
82
|
-
Glob pattern: "{Cargo.toml,requirements.txt,pyproject.toml,setup.py,Gemfile,go.mod,pom.xml,build.gradle*,Package.swift,mix.exs,*.csproj,*.sln,Makefile,CMakeLists.txt}"
|
|
84
|
+
Glob pattern: "{Cargo.toml,requirements.txt,pyproject.toml,setup.py,Gemfile,go.mod,pom.xml,build.gradle*,Package.swift,mix.exs,*.csproj,*.sln,Makefile,CMakeLists.txt,Dockerfile}"
|
|
83
85
|
```
|
|
84
86
|
|
|
85
87
|
### Step 2: Detect Framework (if applicable)
|
|
@@ -107,7 +109,21 @@ For each detected language, look for framework-specific indicators:
|
|
|
107
109
|
- `gorilla/mux` in go.mod = Gorilla Mux
|
|
108
110
|
- `fiber` in go.mod = Fiber
|
|
109
111
|
|
|
110
|
-
### Step 3:
|
|
112
|
+
### Step 3: Docker Detection (Report Only)
|
|
113
|
+
|
|
114
|
+
If a `Dockerfile` was found in Step 1:
|
|
115
|
+
|
|
116
|
+
1. **Record the finding** — set `dockerfileFound: true` in `_metadata`
|
|
117
|
+
2. **Do NOT ask the user** about Docker — you don't have access to interactive tools. The init prompt will handle that question.
|
|
118
|
+
3. **Always generate a `dev` script** as normal — the init prompt will decide whether to use Docker or native mode based on the user's answer.
|
|
119
|
+
|
|
120
|
+
If no `Dockerfile` was found, skip this and proceed to Step 4.
|
|
121
|
+
|
|
122
|
+
**Note:** Docker Compose (`docker-compose.yml`) is not supported. Only single-container Dockerfiles are supported.
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
### Step 4: Generate package.iloom.json
|
|
111
127
|
|
|
112
128
|
Create `.iloom/package.iloom.json` with appropriate scripts and capabilities based on detection:
|
|
113
129
|
|
|
@@ -115,6 +131,27 @@ Create `.iloom/package.iloom.json` with appropriate scripts and capabilities bas
|
|
|
115
131
|
- `"cli"` - Include if project has CLI components (e.g., `[[bin]]` in Cargo.toml, CLI frameworks like click/typer/clap)
|
|
116
132
|
- `"web"` - Include if project has web components (e.g., Flask/Django/FastAPI/Rails/Actix/Rocket)
|
|
117
133
|
|
|
134
|
+
**Dockerfile Detection (from Step 3):**
|
|
135
|
+
If a Dockerfile was found, include `"dockerfileFound": true` in `_metadata`. Always generate the `dev` script regardless — the init prompt will ask the user whether to use Docker and will remove the `dev` script if Docker mode is chosen.
|
|
136
|
+
|
|
137
|
+
Example — web project where Dockerfile was found:
|
|
138
|
+
```json
|
|
139
|
+
{
|
|
140
|
+
"capabilities": ["web"],
|
|
141
|
+
"scripts": {
|
|
142
|
+
"install": "pip install -r requirements.txt",
|
|
143
|
+
"test": "pytest",
|
|
144
|
+
"dev": "python manage.py runserver"
|
|
145
|
+
},
|
|
146
|
+
"_metadata": {
|
|
147
|
+
"detectedLanguage": "python",
|
|
148
|
+
"detectedFramework": "django",
|
|
149
|
+
"dockerfileFound": true,
|
|
150
|
+
"generatedBy": "iloom-framework-detector"
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
118
155
|
**Common Patterns by Language:**
|
|
119
156
|
|
|
120
157
|
#### Rust CLI
|
|
@@ -341,7 +378,7 @@ Create `.iloom/package.iloom.json` with appropriate scripts and capabilities bas
|
|
|
341
378
|
}
|
|
342
379
|
```
|
|
343
380
|
|
|
344
|
-
### Step
|
|
381
|
+
### Step 5: Write the File
|
|
345
382
|
|
|
346
383
|
**⚠️ CHECKPOINT: Verify fork status from Step 0 before proceeding.**
|
|
347
384
|
|
|
@@ -364,9 +401,12 @@ If NOT a fork:
|
|
|
364
401
|
- Preserve any other existing fields (like `_metadata`)
|
|
365
402
|
4. **If the file does not exist:**
|
|
366
403
|
- Create the full detected configuration
|
|
367
|
-
5.
|
|
368
|
-
|
|
369
|
-
|
|
404
|
+
5. **If Dockerfile was found (from Step 3):**
|
|
405
|
+
- Add `"dockerfileFound": true` to `_metadata`
|
|
406
|
+
- Still include the `dev` script — the init prompt handles Docker mode
|
|
407
|
+
6. Ensure `.iloom/` directory exists
|
|
408
|
+
7. Write the merged/new JSON to the target file
|
|
409
|
+
8. Report what was detected, which file was written, and what changes were made (if any)
|
|
370
410
|
|
|
371
411
|
**File Selection Summary:**
|
|
372
412
|
| Scenario | Target File | Reason |
|
|
@@ -387,6 +427,7 @@ Detected:
|
|
|
387
427
|
- Framework: [framework or "None detected"]
|
|
388
428
|
- Package Manager: [package manager]
|
|
389
429
|
- Capabilities: [cli, web, or none]
|
|
430
|
+
- Dockerfile: [Found | Not found]
|
|
390
431
|
- Fork Status: [Yes (origin + upstream) | No]
|
|
391
432
|
|
|
392
433
|
Created: .iloom/[package.iloom.json OR package.iloom.local.json]
|
|
@@ -398,6 +439,9 @@ Configuration:
|
|
|
398
439
|
- test: [command]
|
|
399
440
|
- dev: [command]
|
|
400
441
|
|
|
442
|
+
[If Dockerfile found]: A Dockerfile was detected. The init wizard will ask whether
|
|
443
|
+
to use Docker for the dev server.
|
|
444
|
+
|
|
401
445
|
[If fork]: This configuration was saved to the LOCAL file (package.iloom.local.json)
|
|
402
446
|
because you're working on a fork. This prevents your iloom settings
|
|
403
447
|
from appearing in PRs to upstream.
|
|
@@ -429,6 +473,9 @@ You can customize these settings by editing .iloom/[filename].
|
|
|
429
473
|
DO NOT:
|
|
430
474
|
- Execute any build/test/dev commands
|
|
431
475
|
- Install dependencies
|
|
432
|
-
- Modify any files other than `.iloom/package.iloom.json`
|
|
476
|
+
- Modify any files other than `.iloom/package.iloom.json` (or `.local.json` for forks)
|
|
433
477
|
- Make assumptions about project-specific configuration
|
|
434
478
|
- Add scripts that require additional setup not evident from the project
|
|
479
|
+
- Ask the user questions — you don't have access to interactive tools. Report findings in `_metadata` and let the init prompt handle user interaction.
|
|
480
|
+
- Configure Docker settings in `.iloom/settings.json` — that's the init prompt's responsibility
|
|
481
|
+
- Recommend Docker for `docker-compose.yml` projects — only single-container Dockerfiles are supported
|
|
@@ -3,6 +3,7 @@ name: iloom-issue-analyze-and-plan
|
|
|
3
3
|
description: Combined analysis and planning agent for SIMPLE tasks. This agent performs lightweight analysis and creates an implementation plan in one streamlined phase. Only invoked for tasks pre-classified as SIMPLE (< 5 files, <200 LOC, no breaking changes, no DB migrations). Use this agent when you have a simple issue that needs quick analysis followed by immediate planning.
|
|
4
4
|
color: teal
|
|
5
5
|
model: opus
|
|
6
|
+
{{#if SWARM_MODE}}effort: high{{/if}}
|
|
6
7
|
---
|
|
7
8
|
|
|
8
9
|
{{#if SWARM_MODE}}
|
|
@@ -3,6 +3,7 @@ name: iloom-issue-analyzer
|
|
|
3
3
|
description: Use this agent when you need to analyze and research issues, bugs, or enhancement requests. The agent will investigate the codebase, recent commits, and third-party dependencies to identify root causes WITHOUT proposing solutions. Ideal for initial issue triage, regression analysis, and documenting technical findings for team discussion.\n\nExamples:\n<example>\nContext: User wants to analyze a newly reported bug in issue #42\nuser: "Please analyze issue #42 - users are reporting that the login button doesn't work on mobile"\nassistant: "I'll use the issue-analyzer agent to investigate this issue and document my findings."\n<commentary>\nSince this is a request to analyze an issue, use the Task tool to launch the issue-analyzer agent to research the problem.\n</commentary>\n</example>\n<example>\nContext: User needs to understand a regression that appeared after recent changes\nuser: "Can you look into issue #78? It seems like something broke after yesterday's deployment"\nassistant: "Let me launch the issue-analyzer agent to research this regression and identify what changed."\n<commentary>\nThe user is asking for issue analysis and potential regression investigation, so use the issue-analyzer agent.\n</commentary>\n</example>
|
|
4
4
|
color: pink
|
|
5
5
|
model: opus
|
|
6
|
+
{{#if SWARM_MODE}}effort: high{{/if}}
|
|
6
7
|
---
|
|
7
8
|
|
|
8
9
|
{{#if SWARM_MODE}}
|
|
@@ -3,6 +3,7 @@ name: iloom-issue-complexity-evaluator
|
|
|
3
3
|
description: Use this agent when you need to quickly assess the complexity of an issue before deciding on the appropriate workflow. This agent performs a lightweight scan to classify issues as SIMPLE or COMPLEX based on estimated scope, risk, and impact. Runs first before any detailed analysis or planning.
|
|
4
4
|
color: orange
|
|
5
5
|
model: haiku
|
|
6
|
+
{{#if SWARM_MODE}}effort: high{{/if}}
|
|
6
7
|
---
|
|
7
8
|
|
|
8
9
|
{{#if SWARM_MODE}}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
name: iloom-issue-enhancer
|
|
3
3
|
description: Use this agent when you need to analyze bug or enhancement reports from a Product Manager perspective. The agent accepts either an issue identifier or direct text description and creates structured specifications that enhance the original user report for development teams without performing code analysis or suggesting implementations. Ideal for triaging bugs and feature requests to prepare them for technical analysis and planning.\n\nExamples:\n<example>\nContext: User wants to triage and enhance a bug report from issue tracker\nuser: "Please analyze issue #42 - the login button doesn't work on mobile"\nassistant: "I'll use the iloom-issue-enhancer agent to analyze this bug report and create a structured specification."\n<commentary>\nSince this is a request to triage and structure a bug report from a user experience perspective, use the iloom-issue-enhancer agent.\n</commentary>\n</example>\n<example>\nContext: User needs to enhance an enhancement request that lacks detail\nuser: "Can you improve the description on issue #78? The user's request is pretty vague"\nassistant: "Let me launch the iloom-issue-enhancer agent to analyze the enhancement request and create a clear specification."\n<commentary>\nThe user is asking for enhancement report structuring, so use the iloom-issue-enhancer agent.\n</commentary>\n</example>\n<example>\nContext: User provides direct description without issue identifier\nuser: "Analyze this bug: Users report that the search function returns no results when they include special characters like & or # in their query"\nassistant: "I'll use the iloom-issue-enhancer agent to create a structured specification for this bug report."\n<commentary>\nEven though no issue identifier was provided, the iloom-issue-enhancer agent can analyze the direct description and create a structured specification.\n</commentary>\n</example>\n<example>\nContext: An issue has been labeled as a valid baug and needs structured analysis\nuser: "Structure issue #123 that was just labeled as a triaged bug"\nassistant: "I'll use the iloom-issue-enhancer agent to create a comprehensive bug specification."\n<commentary>\nThe issue needs Product Manager-style analysis and structuring, so use the iloom-issue-enhancer agent.\n</commentary>\n</example>
|
|
4
4
|
color: purple
|
|
5
|
-
model: opus
|
|
5
|
+
model: {{#if SWARM_MODE}}sonnet{{else}}opus{{/if}}
|
|
6
|
+
{{#if SWARM_MODE}}effort: medium{{/if}}
|
|
6
7
|
---
|
|
7
8
|
|
|
8
9
|
{{#if SWARM_MODE}}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: iloom-issue-implementer
|
|
3
3
|
description: Use this agent when you need to implement an issue exactly as specified in its comments and description. This agent reads issue details, follows implementation plans precisely, and ensures all code passes tests, typechecking, and linting before completion. Examples:\n\n<example>\nContext: User wants to implement a specific issue.\nuser: "Please implement issue #42"\nassistant: "I'll use the issue-implementer agent to read and implement issue #42 exactly as specified."\n<commentary>\nSince the user is asking to implement an issue, use the Task tool to launch the issue-implementer agent.\n</commentary>\n</example>\n\n<example>\nContext: User references an issue that needs implementation.\nuser: "Can you work on the authentication issue we discussed in #15?"\nassistant: "Let me launch the issue-implementer agent to read issue #15 and implement it according to the plan in the comments."\n<commentary>\nThe user is referencing a specific issue number, so use the issue-implementer agent to handle the implementation.\n</commentary>\n</example>
|
|
4
|
-
model: opus
|
|
4
|
+
model: {{#if SWARM_MODE}}sonnet{{else}}opus{{/if}}
|
|
5
|
+
{{#if SWARM_MODE}}effort: medium{{/if}}
|
|
5
6
|
color: green
|
|
6
7
|
---
|
|
7
8
|
|
|
@@ -43,6 +44,8 @@ After creating or updating any issue comment, use the Recap MCP tools:
|
|
|
43
44
|
|
|
44
45
|
This enables the recap panel to show quick-reference links to artifacts created during the session.
|
|
45
46
|
|
|
47
|
+
**Do NOT log `fix` recap entries** — the orchestrator tracks which review findings were addressed.
|
|
48
|
+
|
|
46
49
|
{{#if SWARM_MODE}}
|
|
47
50
|
**IMPORTANT**: You are running inline in a swarm worker's context. You MUST pass `worktreePath` on ALL recap calls (`add_artifact`, `add_entry`, `set_loom_state`, `get_recap`). The worktree path is provided by the caller — look for it in your invocation prompt (e.g., "Your worktree path is ..."). Without `worktreePath`, recap entries go to the epic's recap file instead of the child's.
|
|
48
51
|
{{/if}}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
name: iloom-issue-planner
|
|
3
3
|
description: Use this agent when you need to analyze issues and create detailed implementation plans. This agent specializes in reading issue context, understanding requirements, and creating focused implementation plans with specific file changes and line numbers. The agent will document the plan as a comment on the issue without executing any changes. Examples: <example>Context: The user wants detailed implementation planning for an issue.\nuser: "Analyze issue #42 and create an implementation plan"\nassistant: "I'll use the issue-planner agent to analyze the issue and create a detailed implementation plan"\n<commentary>Since the user wants issue analysis and implementation planning, use the issue-planner agent.</commentary></example> <example>Context: The user needs a plan for implementing a feature described in an issue.\nuser: "Read issue #15 and plan out what needs to be changed"\nassistant: "Let me use the issue-planner agent to analyze the issue and document a comprehensive implementation plan"\n<commentary>The user needs issue analysis and planning, so the issue-planner agent is the right choice.</commentary></example>
|
|
4
4
|
color: blue
|
|
5
|
-
model: opus
|
|
5
|
+
model: {{#if SWARM_MODE}}sonnet{{else}}opus{{/if}}
|
|
6
|
+
{{#if SWARM_MODE}}effort: high{{/if}}
|
|
6
7
|
---
|
|
7
8
|
|
|
8
9
|
{{#if SWARM_MODE}}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
name: iloom-wave-verifier
|
|
3
3
|
description: Wave verification agent that checks must-have criteria from child issues after each swarm wave, invokes fix skills for failures, and reports structured results.\n\nExamples:\n<example>\nContext: Orchestrator wants to verify that wave 1 work meets acceptance criteria\nuser: "Verify must-haves for issues #101, #102, #103 from wave 1"\nassistant: "I'll check all must-have criteria from those issues against the codebase and report results."\n<commentary>\nThe orchestrator needs wave verification after a completed wave, so use the iloom-wave-verifier agent.\n</commentary>\n</example>\n<example>\nContext: Swarm orchestrator needs to gate the next wave on verification passing\nuser: "Run wave verification for child issues #45, #46 before proceeding to wave 2"\nassistant: "I'll verify all must-haves for the specified issues, fix any failures, and return a structured report."\n<commentary>\nWave gating requires verification of completed work, so use the iloom-wave-verifier agent.\n</commentary>\n</example>
|
|
4
4
|
model: opus
|
|
5
|
+
effort: high
|
|
5
6
|
color: red
|
|
6
7
|
---
|
|
7
8
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
ScriptCommandBase
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-SM2YM3YR.js";
|
|
5
|
+
import "./chunk-6RKZDUTQ.js";
|
|
6
6
|
import "./chunk-OLJ54WGW.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-LULQYBRA.js";
|
|
8
8
|
import "./chunk-K3QGG4O2.js";
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-6FHFHMNF.js";
|
|
10
|
+
import "./chunk-UVZBZ5IF.js";
|
|
11
|
+
import "./chunk-JDXJIPXR.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-NJJT6UHO.js.map
|
|
@@ -38,7 +38,7 @@ import {
|
|
|
38
38
|
} from "./chunk-KV4NU3RP.js";
|
|
39
39
|
import {
|
|
40
40
|
SettingsManager
|
|
41
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-UVZBZ5IF.js";
|
|
42
42
|
import {
|
|
43
43
|
logger
|
|
44
44
|
} from "./chunk-VRPPI6GU.js";
|
|
@@ -1436,4 +1436,4 @@ var IssueManagementProviderFactory = class {
|
|
|
1436
1436
|
export {
|
|
1437
1437
|
IssueManagementProviderFactory
|
|
1438
1438
|
};
|
|
1439
|
-
//# sourceMappingURL=chunk-
|
|
1439
|
+
//# sourceMappingURL=chunk-27CQSBUG.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
extractIssueNumber
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-6FHFHMNF.js";
|
|
5
5
|
import {
|
|
6
6
|
extractPort,
|
|
7
7
|
findEnvFileContainingVariable,
|
|
@@ -113,4 +113,4 @@ export {
|
|
|
113
113
|
calculatePortFromIdentifier,
|
|
114
114
|
getWorkspacePort
|
|
115
115
|
};
|
|
116
|
-
//# sourceMappingURL=chunk-
|
|
116
|
+
//# sourceMappingURL=chunk-2Z4VKQND.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
findMainWorktreePathWithSettings
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-6FHFHMNF.js";
|
|
5
5
|
import {
|
|
6
6
|
MetadataManager
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-JDXJIPXR.js";
|
|
8
8
|
import {
|
|
9
9
|
getLogger
|
|
10
10
|
} from "./chunk-FTYWGQFM.js";
|
|
@@ -70,4 +70,4 @@ export {
|
|
|
70
70
|
archiveRecap,
|
|
71
71
|
findArchivedRecap
|
|
72
72
|
};
|
|
73
|
-
//# sourceMappingURL=chunk-
|
|
73
|
+
//# sourceMappingURL=chunk-4QROZMPZ.js.map
|
|
@@ -4,16 +4,16 @@ import {
|
|
|
4
4
|
} from "./chunk-NXMDEL3F.js";
|
|
5
5
|
import {
|
|
6
6
|
VCSProviderFactory
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-RLFS5KHU.js";
|
|
8
8
|
import {
|
|
9
9
|
TelemetryService
|
|
10
10
|
} from "./chunk-MY2Q3FJ3.js";
|
|
11
11
|
import {
|
|
12
12
|
resolveRecapFilePath
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-5WJN63T4.js";
|
|
14
14
|
import {
|
|
15
15
|
IssueManagementProviderFactory
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-27CQSBUG.js";
|
|
17
17
|
import {
|
|
18
18
|
PromptTemplateManager
|
|
19
19
|
} from "./chunk-LDE6VNG5.js";
|
|
@@ -23,13 +23,13 @@ import {
|
|
|
23
23
|
import {
|
|
24
24
|
generateDeterministicSessionId,
|
|
25
25
|
launchClaude
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-MB4CB7Q4.js";
|
|
27
27
|
import {
|
|
28
28
|
SettingsManager
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-UVZBZ5IF.js";
|
|
30
30
|
import {
|
|
31
31
|
MetadataManager
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-JDXJIPXR.js";
|
|
33
33
|
import {
|
|
34
34
|
getLogger
|
|
35
35
|
} from "./chunk-FTYWGQFM.js";
|
|
@@ -617,4 +617,4 @@ var SessionSummaryService = class {
|
|
|
617
617
|
export {
|
|
618
618
|
SessionSummaryService
|
|
619
619
|
};
|
|
620
|
-
//# sourceMappingURL=chunk-
|
|
620
|
+
//# sourceMappingURL=chunk-5NVJ6N3C.js.map
|