@iloom/cli 0.13.0-beta.0 → 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.
Files changed (173) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -18
  3. package/dist/{ClaudeContextManager-RRGREEZQ.js → ClaudeContextManager-ZH6LEA5I.js} +5 -5
  4. package/dist/{ClaudeService-LEPW6QAC.js → ClaudeService-YR66WXZN.js} +4 -4
  5. package/dist/{IssueTrackerFactory-KE2BDCLC.js → IssueTrackerFactory-O2ZBA666.js} +3 -3
  6. package/dist/{LoomLauncher-GKQMR5E6.js → LoomLauncher-V54ENBEF.js} +5 -5
  7. package/dist/{MetadataManager-V4LSJ2PB.js → MetadataManager-HHE6LQF2.js} +2 -2
  8. package/dist/{PromptTemplateManager-I75WKXM4.js → PromptTemplateManager-4RFELNYY.js} +2 -2
  9. package/dist/README.md +3 -18
  10. package/dist/{SettingsManager-KQU7OX7G.js → SettingsManager-SLSYEYDZ.js} +4 -4
  11. package/dist/agents/iloom-artifact-reviewer.md +1 -0
  12. package/dist/agents/iloom-code-reviewer.md +21 -0
  13. package/dist/agents/iloom-issue-analyze-and-plan.md +30 -12
  14. package/dist/agents/iloom-issue-analyzer.md +32 -7
  15. package/dist/agents/iloom-issue-complexity-evaluator.md +32 -12
  16. package/dist/agents/iloom-issue-implementer.md +31 -12
  17. package/dist/agents/iloom-issue-planner.md +30 -12
  18. package/dist/agents/iloom-wave-verifier.md +177 -4
  19. package/dist/{build-V3KADFMO.js → build-ZTGWDHWU.js} +8 -8
  20. package/dist/{chunk-VVQQIG64.js → chunk-55NTREIU.js} +33 -30
  21. package/dist/chunk-55NTREIU.js.map +1 -0
  22. package/dist/{chunk-AYLC633W.js → chunk-7TN5VW4I.js} +65 -7
  23. package/dist/chunk-7TN5VW4I.js.map +1 -0
  24. package/dist/{chunk-RFCAPHL5.js → chunk-C2BVNJW5.js} +2 -2
  25. package/dist/{chunk-3XEXT35Z.js → chunk-E5OM25WK.js} +3 -3
  26. package/dist/{chunk-ZUIFO7B4.js → chunk-ERMEYFT6.js} +7 -2
  27. package/dist/chunk-ERMEYFT6.js.map +1 -0
  28. package/dist/{chunk-WGUGB54H.js → chunk-F5NKWLMQ.js} +21 -24
  29. package/dist/chunk-F5NKWLMQ.js.map +1 -0
  30. package/dist/{chunk-TN2D2RX7.js → chunk-G2DGDCDP.js} +33 -224
  31. package/dist/chunk-G2DGDCDP.js.map +1 -0
  32. package/dist/{chunk-NUUFP53X.js → chunk-GPBX2BY2.js} +2 -2
  33. package/dist/{chunk-SN4S5CWL.js → chunk-GQDVH6FA.js} +2 -2
  34. package/dist/{chunk-YUOVWWJX.js → chunk-HKEXRZMU.js} +5 -310
  35. package/dist/chunk-HKEXRZMU.js.map +1 -0
  36. package/dist/{chunk-TAEVA4QR.js → chunk-HWDQRW3O.js} +3 -3
  37. package/dist/chunk-HWDQRW3O.js.map +1 -0
  38. package/dist/{chunk-KQSV7FOG.js → chunk-J5JOJPK3.js} +2 -2
  39. package/dist/{chunk-PD75ZCFT.js → chunk-KCAWSZUO.js} +18 -17
  40. package/dist/chunk-KCAWSZUO.js.map +1 -0
  41. package/dist/{chunk-QNPJXO53.js → chunk-KGOBNC5A.js} +4 -4
  42. package/dist/{chunk-H3T3EPF3.js → chunk-LNY2Y32V.js} +2 -2
  43. package/dist/{chunk-7RCUWU3I.js → chunk-MRPIDNZU.js} +1 -1
  44. package/dist/chunk-MRPIDNZU.js.map +1 -0
  45. package/dist/{chunk-QQULYI2S.js → chunk-N6DY47YN.js} +80 -45
  46. package/dist/chunk-N6DY47YN.js.map +1 -0
  47. package/dist/{chunk-VIQOQ463.js → chunk-OLJ54WGW.js} +15 -10
  48. package/dist/chunk-OLJ54WGW.js.map +1 -0
  49. package/dist/{chunk-4VQXMEEP.js → chunk-PPQ5LV7U.js} +3 -3
  50. package/dist/{chunk-4VQXMEEP.js.map → chunk-PPQ5LV7U.js.map} +1 -1
  51. package/dist/{chunk-QED2WB2D.js → chunk-PS6K2AOV.js} +5 -5
  52. package/dist/{chunk-JD3K2344.js → chunk-QNRXRSKC.js} +36 -3
  53. package/dist/chunk-QNRXRSKC.js.map +1 -0
  54. package/dist/{chunk-Q7VXHJP6.js → chunk-SM3BCHYB.js} +5 -5
  55. package/dist/{chunk-SA446KA2.js → chunk-T4KFKKEB.js} +7 -7
  56. package/dist/{chunk-XCP2WDYA.js → chunk-T4NESGYB.js} +3 -3
  57. package/dist/{chunk-QXGM32TO.js → chunk-TJDKGKQV.js} +2 -2
  58. package/dist/{chunk-X5DRLONY.js → chunk-UXBVDD7U.js} +6 -6
  59. package/dist/{chunk-JDN4SPV3.js → chunk-WYDLOQYO.js} +2 -2
  60. package/dist/{chunk-4JZEQBWV.js → chunk-XIVLGWUX.js} +3 -1
  61. package/dist/chunk-XIVLGWUX.js.map +1 -0
  62. package/dist/{chunk-NTDY5AMO.js → chunk-ZEFTWM5Z.js} +2 -2
  63. package/dist/{cleanup-RJKLI47I.js → cleanup-BCVY7PEF.js} +22 -22
  64. package/dist/cleanup-BCVY7PEF.js.map +1 -0
  65. package/dist/cli.js +126 -105
  66. package/dist/cli.js.map +1 -1
  67. package/dist/{commit-SUHRUMDE.js → commit-L5JNBU4U.js} +8 -8
  68. package/dist/{compile-2MD346PO.js → compile-GPJOHXH4.js} +8 -8
  69. package/dist/{contribute-P4BMRY7C.js → contribute-QEGCI4PS.js} +4 -4
  70. package/dist/{dev-server-ZNTLWOL5.js → dev-server-67NPVWUN.js} +247 -31
  71. package/dist/dev-server-67NPVWUN.js.map +1 -0
  72. package/dist/{feedback-Q6WG2WX4.js → feedback-2LWXKLQZ.js} +4 -4
  73. package/dist/{git-TX2IEMB3.js → git-IS7AV3ED.js} +4 -4
  74. package/dist/hooks/iloom-hook.js +40 -2
  75. package/dist/{ignite-P644W2PK.js → ignite-VQDJQ37S.js} +12 -14
  76. package/dist/index.d.ts +73 -75
  77. package/dist/index.js +32 -32
  78. package/dist/index.js.map +1 -1
  79. package/dist/{init-5HFY7JG6.js → init-7SDJUAEZ.js} +8 -8
  80. package/dist/{install-deps-J4ALTM27.js → install-deps-NGSFDNUW.js} +8 -8
  81. package/dist/{issues-LZMIF22U.js → issues-4HQKEUP7.js} +5 -5
  82. package/dist/{lint-XIXKU22H.js → lint-C5FOVRXY.js} +8 -8
  83. package/dist/mcp/issue-management-server.js +19 -22
  84. package/dist/mcp/issue-management-server.js.map +1 -1
  85. package/dist/neon-helpers-LCZAN4U4.js +11 -0
  86. package/dist/{open-KUO35JIJ.js → open-WUTLRI6S.js} +19 -15
  87. package/dist/open-WUTLRI6S.js.map +1 -0
  88. package/dist/{plan-7CF56OIR.js → plan-GC3HF73T.js} +86 -66
  89. package/dist/plan-GC3HF73T.js.map +1 -0
  90. package/dist/{projects-L5AHUBGA.js → projects-3F6T3KZL.js} +2 -2
  91. package/dist/prompts/init-prompt.txt +40 -36
  92. package/dist/prompts/issue-prompt.txt +4 -1
  93. package/dist/prompts/plan-prompt.txt +97 -16
  94. package/dist/prompts/regular-prompt.txt +1 -1
  95. package/dist/prompts/swarm-orchestrator-prompt.txt +25 -12
  96. package/dist/{rebase-MAMWPA2L.js → rebase-CSGQICAP.js} +7 -7
  97. package/dist/{recap-IDBO3KM5.js → recap-CKGKFDJL.js} +7 -7
  98. package/dist/{run-RGZHCQ6M.js → run-3YL2IXXI.js} +19 -15
  99. package/dist/run-3YL2IXXI.js.map +1 -0
  100. package/dist/schema/settings.schema.json +35 -31
  101. package/dist/{shell-7ADCDFIV.js → shell-M2YYPNGV.js} +6 -6
  102. package/dist/{summary-7J2HORFD.js → summary-XR4CBJEG.js} +9 -9
  103. package/dist/{test-SRB7EWU6.js → test-ESDAHEVE.js} +8 -8
  104. package/dist/{test-git-G7ATVIXG.js → test-git-KWPLHYSI.js} +4 -4
  105. package/dist/{test-jira-Q2HPA522.js → test-jira-6NK7UHSV.js} +3 -3
  106. package/dist/{test-prefix-JMDGXR5A.js → test-prefix-VVODGHXP.js} +4 -4
  107. package/dist/{test-webserver-GZFVXBGD.js → test-webserver-AHXKC6H4.js} +6 -6
  108. package/dist/{vscode-3I7ISHUU.js → vscode-OY7HOVRO.js} +6 -6
  109. package/package.json +1 -1
  110. package/dist/chunk-4JZEQBWV.js.map +0 -1
  111. package/dist/chunk-7RCUWU3I.js.map +0 -1
  112. package/dist/chunk-AYLC633W.js.map +0 -1
  113. package/dist/chunk-JD3K2344.js.map +0 -1
  114. package/dist/chunk-PD75ZCFT.js.map +0 -1
  115. package/dist/chunk-QQULYI2S.js.map +0 -1
  116. package/dist/chunk-TAEVA4QR.js.map +0 -1
  117. package/dist/chunk-TN2D2RX7.js.map +0 -1
  118. package/dist/chunk-VIQOQ463.js.map +0 -1
  119. package/dist/chunk-VVQQIG64.js.map +0 -1
  120. package/dist/chunk-WGUGB54H.js.map +0 -1
  121. package/dist/chunk-YUOVWWJX.js.map +0 -1
  122. package/dist/chunk-ZUIFO7B4.js.map +0 -1
  123. package/dist/cleanup-RJKLI47I.js.map +0 -1
  124. package/dist/database-helpers-PRDFNDRO.js +0 -11
  125. package/dist/dev-server-ZNTLWOL5.js.map +0 -1
  126. package/dist/open-KUO35JIJ.js.map +0 -1
  127. package/dist/plan-7CF56OIR.js.map +0 -1
  128. package/dist/run-RGZHCQ6M.js.map +0 -1
  129. /package/dist/{ClaudeContextManager-RRGREEZQ.js.map → ClaudeContextManager-ZH6LEA5I.js.map} +0 -0
  130. /package/dist/{ClaudeService-LEPW6QAC.js.map → ClaudeService-YR66WXZN.js.map} +0 -0
  131. /package/dist/{IssueTrackerFactory-KE2BDCLC.js.map → IssueTrackerFactory-O2ZBA666.js.map} +0 -0
  132. /package/dist/{LoomLauncher-GKQMR5E6.js.map → LoomLauncher-V54ENBEF.js.map} +0 -0
  133. /package/dist/{MetadataManager-V4LSJ2PB.js.map → MetadataManager-HHE6LQF2.js.map} +0 -0
  134. /package/dist/{PromptTemplateManager-I75WKXM4.js.map → PromptTemplateManager-4RFELNYY.js.map} +0 -0
  135. /package/dist/{SettingsManager-KQU7OX7G.js.map → SettingsManager-SLSYEYDZ.js.map} +0 -0
  136. /package/dist/{build-V3KADFMO.js.map → build-ZTGWDHWU.js.map} +0 -0
  137. /package/dist/{chunk-RFCAPHL5.js.map → chunk-C2BVNJW5.js.map} +0 -0
  138. /package/dist/{chunk-3XEXT35Z.js.map → chunk-E5OM25WK.js.map} +0 -0
  139. /package/dist/{chunk-NUUFP53X.js.map → chunk-GPBX2BY2.js.map} +0 -0
  140. /package/dist/{chunk-SN4S5CWL.js.map → chunk-GQDVH6FA.js.map} +0 -0
  141. /package/dist/{chunk-KQSV7FOG.js.map → chunk-J5JOJPK3.js.map} +0 -0
  142. /package/dist/{chunk-QNPJXO53.js.map → chunk-KGOBNC5A.js.map} +0 -0
  143. /package/dist/{chunk-H3T3EPF3.js.map → chunk-LNY2Y32V.js.map} +0 -0
  144. /package/dist/{chunk-QED2WB2D.js.map → chunk-PS6K2AOV.js.map} +0 -0
  145. /package/dist/{chunk-Q7VXHJP6.js.map → chunk-SM3BCHYB.js.map} +0 -0
  146. /package/dist/{chunk-SA446KA2.js.map → chunk-T4KFKKEB.js.map} +0 -0
  147. /package/dist/{chunk-XCP2WDYA.js.map → chunk-T4NESGYB.js.map} +0 -0
  148. /package/dist/{chunk-QXGM32TO.js.map → chunk-TJDKGKQV.js.map} +0 -0
  149. /package/dist/{chunk-X5DRLONY.js.map → chunk-UXBVDD7U.js.map} +0 -0
  150. /package/dist/{chunk-JDN4SPV3.js.map → chunk-WYDLOQYO.js.map} +0 -0
  151. /package/dist/{chunk-NTDY5AMO.js.map → chunk-ZEFTWM5Z.js.map} +0 -0
  152. /package/dist/{commit-SUHRUMDE.js.map → commit-L5JNBU4U.js.map} +0 -0
  153. /package/dist/{compile-2MD346PO.js.map → compile-GPJOHXH4.js.map} +0 -0
  154. /package/dist/{contribute-P4BMRY7C.js.map → contribute-QEGCI4PS.js.map} +0 -0
  155. /package/dist/{feedback-Q6WG2WX4.js.map → feedback-2LWXKLQZ.js.map} +0 -0
  156. /package/dist/{database-helpers-PRDFNDRO.js.map → git-IS7AV3ED.js.map} +0 -0
  157. /package/dist/{git-TX2IEMB3.js.map → ignite-VQDJQ37S.js.map} +0 -0
  158. /package/dist/{init-5HFY7JG6.js.map → init-7SDJUAEZ.js.map} +0 -0
  159. /package/dist/{install-deps-J4ALTM27.js.map → install-deps-NGSFDNUW.js.map} +0 -0
  160. /package/dist/{issues-LZMIF22U.js.map → issues-4HQKEUP7.js.map} +0 -0
  161. /package/dist/{lint-XIXKU22H.js.map → lint-C5FOVRXY.js.map} +0 -0
  162. /package/dist/{ignite-P644W2PK.js.map → neon-helpers-LCZAN4U4.js.map} +0 -0
  163. /package/dist/{projects-L5AHUBGA.js.map → projects-3F6T3KZL.js.map} +0 -0
  164. /package/dist/{rebase-MAMWPA2L.js.map → rebase-CSGQICAP.js.map} +0 -0
  165. /package/dist/{recap-IDBO3KM5.js.map → recap-CKGKFDJL.js.map} +0 -0
  166. /package/dist/{shell-7ADCDFIV.js.map → shell-M2YYPNGV.js.map} +0 -0
  167. /package/dist/{summary-7J2HORFD.js.map → summary-XR4CBJEG.js.map} +0 -0
  168. /package/dist/{test-SRB7EWU6.js.map → test-ESDAHEVE.js.map} +0 -0
  169. /package/dist/{test-git-G7ATVIXG.js.map → test-git-KWPLHYSI.js.map} +0 -0
  170. /package/dist/{test-jira-Q2HPA522.js.map → test-jira-6NK7UHSV.js.map} +0 -0
  171. /package/dist/{test-prefix-JMDGXR5A.js.map → test-prefix-VVODGHXP.js.map} +0 -0
  172. /package/dist/{test-webserver-GZFVXBGD.js.map → test-webserver-AHXKC6H4.js.map} +0 -0
  173. /package/dist/{vscode-3I7ISHUU.js.map → vscode-OY7HOVRO.js.map} +0 -0
@@ -2,13 +2,13 @@
2
2
  import {
3
3
  buildDependencyMap,
4
4
  fetchChildIssueDetails
5
- } from "./chunk-RFCAPHL5.js";
5
+ } from "./chunk-C2BVNJW5.js";
6
6
  import {
7
7
  preAcceptClaudeTrust
8
8
  } from "./chunk-7UBEHQTP.js";
9
9
  import {
10
10
  getWorkspacePort
11
- } from "./chunk-ZUIFO7B4.js";
11
+ } from "./chunk-ERMEYFT6.js";
12
12
  import {
13
13
  TelemetryService
14
14
  } from "./chunk-MY2Q3FJ3.js";
@@ -25,26 +25,23 @@ import {
25
25
  } from "./chunk-CQHHEW2M.js";
26
26
  import {
27
27
  AgentManager
28
- } from "./chunk-JD3K2344.js";
28
+ } from "./chunk-QNRXRSKC.js";
29
29
  import {
30
30
  IssueManagementProviderFactory
31
- } from "./chunk-NTDY5AMO.js";
32
- import {
33
- installDependencies
34
- } from "./chunk-VIQOQ463.js";
31
+ } from "./chunk-ZEFTWM5Z.js";
35
32
  import {
36
33
  GitWorktreeManager
37
- } from "./chunk-4VQXMEEP.js";
34
+ } from "./chunk-PPQ5LV7U.js";
38
35
  import {
39
36
  PromptTemplateManager,
40
37
  buildReviewTemplateVariables
41
- } from "./chunk-7RCUWU3I.js";
38
+ } from "./chunk-MRPIDNZU.js";
42
39
  import {
43
40
  extractSettingsOverrides
44
41
  } from "./chunk-GYCR2LOU.js";
45
42
  import {
46
43
  IssueTrackerFactory
47
- } from "./chunk-NUUFP53X.js";
44
+ } from "./chunk-GPBX2BY2.js";
48
45
  import {
49
46
  launchClaude
50
47
  } from "./chunk-DDHWZNGL.js";
@@ -54,13 +51,13 @@ import {
54
51
  generateWorktreePath,
55
52
  getWorktreeRoot,
56
53
  isValidGitRepo
57
- } from "./chunk-QNPJXO53.js";
54
+ } from "./chunk-KGOBNC5A.js";
58
55
  import {
59
56
  SettingsManager
60
- } from "./chunk-WGUGB54H.js";
57
+ } from "./chunk-F5NKWLMQ.js";
61
58
  import {
62
59
  MetadataManager
63
- } from "./chunk-4JZEQBWV.js";
60
+ } from "./chunk-XIVLGWUX.js";
64
61
  import {
65
62
  getLogger,
66
63
  withLogger
@@ -284,140 +281,11 @@ var ClaudeHookManager = class {
284
281
  import path2 from "path";
285
282
  import fs2 from "fs-extra";
286
283
  var SwarmSetupService = class {
287
- constructor(gitWorktree, metadataManager, agentManager, settingsManager, templateManager) {
288
- this.gitWorktree = gitWorktree;
289
- this.metadataManager = metadataManager;
284
+ constructor(agentManager, settingsManager, templateManager) {
290
285
  this.agentManager = agentManager;
291
286
  this.settingsManager = settingsManager;
292
287
  this.templateManager = templateManager;
293
288
  }
294
- /**
295
- * Create child worktrees for each child issue, branched off the epic branch.
296
- * Writes iloom-metadata.json for each child with state: 'pending' and parentLoom.
297
- * Generates and writes per-loom MCP config file for each child.
298
- *
299
- * Uses standard iloom naming conventions via generateWorktreePath().
300
- *
301
- * @param childIssues - Array of child issues from epic metadata
302
- * @param epicBranch - The epic branch name (base branch for children)
303
- * @param epicWorktreePath - Path to the epic worktree
304
- * @param mainWorktreePath - Path to the main worktree (project root)
305
- * @param epicIssueNumber - The parent epic issue number
306
- * @param issueTrackerName - The issue tracker provider name (e.g., 'github')
307
- * @param settings - Optional settings for MCP config generation
308
- * @returns Array of results for each child worktree creation
309
- */
310
- async createChildWorktrees(childIssues, epicBranch, epicWorktreePath, mainWorktreePath, epicIssueNumber, issueTrackerName, settings) {
311
- return Promise.all(childIssues.map(async (child) => {
312
- try {
313
- const rawId = child.number.replace(/^#/, "");
314
- const safeId = rawId.replace(/[^a-zA-Z0-9-_]/g, "-");
315
- const childBranch = `issue/${safeId}`;
316
- const childWorktreePath = generateWorktreePath(
317
- childBranch,
318
- mainWorktreePath
319
- );
320
- getLogger().info(`Creating child worktree for ${child.number}: ${childWorktreePath}...`);
321
- await this.gitWorktree.createWorktree({
322
- path: childWorktreePath,
323
- branch: childBranch,
324
- createBranch: true,
325
- baseBranch: epicBranch
326
- });
327
- try {
328
- await preAcceptClaudeTrust(childWorktreePath);
329
- } catch (error) {
330
- getLogger().warn(`Failed to pre-accept Claude trust for child worktree: ${error instanceof Error ? error.message : String(error)}`);
331
- }
332
- const metadataInput = {
333
- description: child.title,
334
- branchName: childBranch,
335
- worktreePath: childWorktreePath,
336
- issueType: "issue",
337
- issue_numbers: [rawId],
338
- pr_numbers: [],
339
- issueTracker: issueTrackerName,
340
- colorHex: "#808080",
341
- sessionId: "",
342
- // No session - not launching Claude directly
343
- projectPath: mainWorktreePath,
344
- issueUrls: { [rawId]: child.url },
345
- prUrls: {},
346
- capabilities: [],
347
- state: "pending",
348
- parentLoom: {
349
- type: "epic",
350
- identifier: epicIssueNumber,
351
- branchName: epicBranch,
352
- worktreePath: epicWorktreePath
353
- }
354
- };
355
- try {
356
- await this.metadataManager.writeMetadata(childWorktreePath, metadataInput);
357
- } catch (metaError) {
358
- getLogger().warn(`Metadata write failed for ${child.number}, cleaning up worktree...`);
359
- try {
360
- await this.gitWorktree.removeWorktree(childWorktreePath, { force: true });
361
- } catch {
362
- getLogger().debug(`Could not clean up worktree at ${childWorktreePath}`);
363
- }
364
- throw metaError;
365
- }
366
- try {
367
- const childMetadata = await this.metadataManager.readMetadata(childWorktreePath);
368
- if (childMetadata) {
369
- const providerName = IssueTrackerFactory.getProviderName(
370
- settings ?? await this.settingsManager.loadSettings()
371
- );
372
- const mcpConfigPath = await generateAndWriteMcpConfigFile(
373
- childWorktreePath,
374
- childMetadata,
375
- providerName,
376
- settings
377
- );
378
- await this.metadataManager.updateMetadata(childWorktreePath, { mcpConfigPath });
379
- const claudeDir = path2.join(childWorktreePath, ".claude");
380
- await fs2.ensureDir(claudeDir);
381
- await fs2.writeFile(
382
- path2.join(claudeDir, "iloom-swarm-mcp-config-path"),
383
- mcpConfigPath,
384
- "utf-8"
385
- );
386
- getLogger().debug(`Wrote MCP config for ${child.number}: ${mcpConfigPath}`);
387
- }
388
- } catch (error) {
389
- getLogger().warn(
390
- `Failed to write MCP config for child ${child.number}: ${error instanceof Error ? error.message : "Unknown error"}`
391
- );
392
- }
393
- try {
394
- await installDependencies(childWorktreePath, true, true);
395
- } catch (error) {
396
- getLogger().warn(
397
- `Failed to install dependencies in child worktree ${child.number}: ${error instanceof Error ? error.message : "Unknown error"}`
398
- );
399
- }
400
- getLogger().success(`Created child worktree for ${child.number}`);
401
- return {
402
- issueId: rawId,
403
- worktreePath: childWorktreePath,
404
- branch: childBranch,
405
- success: true
406
- };
407
- } catch (error) {
408
- const rawId = child.number.replace(/^#/, "");
409
- const errorMessage = error instanceof Error ? error.message : "Unknown error";
410
- getLogger().warn(`Failed to create child worktree for ${child.number}: ${errorMessage}`);
411
- return {
412
- issueId: rawId,
413
- worktreePath: "",
414
- branch: "",
415
- success: false,
416
- error: errorMessage
417
- };
418
- }
419
- }));
420
- }
421
289
  /**
422
290
  * Render swarm-mode agent templates as custom agent files AND thin skill wrappers.
423
291
  *
@@ -572,7 +440,8 @@ ${agentBody}
572
440
  const settings = await this.settingsManager.loadSettings();
573
441
  const templateVariables = {
574
442
  SWARM_MODE: true,
575
- EPIC_WORKTREE_PATH: epicWorktreePath
443
+ EPIC_WORKTREE_PATH: epicWorktreePath,
444
+ ...buildReviewTemplateVariables(true, settings == null ? void 0 : settings.agents)
576
445
  };
577
446
  const agents = await this.agentManager.loadAgents(settings, templateVariables, ["iloom-wave-verifier.md"]);
578
447
  const verifierConfig = agents["iloom-wave-verifier"];
@@ -603,43 +472,6 @@ ${verifierConfig.prompt}
603
472
  return false;
604
473
  }
605
474
  }
606
- /**
607
- * Copy .claude/agents/ and .claude/skills/ from the epic worktree to each child worktree.
608
- *
609
- * Child workers need local access to agent files (used as custom agent types) and
610
- * skill files (invoked via /skill-name). Without this copy, child worktrees lack
611
- * the rendered files since they only exist in the epic worktree after rendering.
612
- */
613
- async copyAgentsAndSkillsToChildWorktrees(epicWorktreePath, childWorktrees) {
614
- const agentsSourceDir = path2.join(epicWorktreePath, ".claude", "agents");
615
- const skillsSourceDir = path2.join(epicWorktreePath, ".claude", "skills");
616
- const agentsExist = await fs2.pathExists(agentsSourceDir);
617
- const skillsExist = await fs2.pathExists(skillsSourceDir);
618
- if (!agentsExist && !skillsExist) {
619
- getLogger().warn("No .claude/agents/ or .claude/skills/ directory in epic worktree to copy");
620
- return;
621
- }
622
- const successfulChildren = childWorktrees.filter((c) => c.success);
623
- await Promise.all(successfulChildren.map(async (child) => {
624
- try {
625
- if (agentsExist) {
626
- const targetAgentsDir = path2.join(child.worktreePath, ".claude", "agents");
627
- await fs2.copy(agentsSourceDir, targetAgentsDir, { overwrite: true });
628
- getLogger().debug(`Copied .claude/agents/ to ${child.worktreePath}`);
629
- }
630
- if (skillsExist) {
631
- const targetSkillsDir = path2.join(child.worktreePath, ".claude", "skills");
632
- await fs2.copy(skillsSourceDir, targetSkillsDir, { overwrite: true });
633
- getLogger().debug(`Copied .claude/skills/ to ${child.worktreePath}`);
634
- }
635
- } catch (error) {
636
- getLogger().warn(
637
- `Failed to copy agents/skills to child worktree ${child.issueId}: ${error instanceof Error ? error.message : "Unknown error"}`
638
- );
639
- }
640
- }));
641
- getLogger().success(`Copied agents and skills to ${successfulChildren.length} child worktrees`);
642
- }
643
475
  /**
644
476
  * Run the full swarm setup: render agents, worker agent, and wave verifier.
645
477
  *
@@ -786,7 +618,7 @@ var IgniteCommand = class {
786
618
  * Internal execution method (separated for withLogger wrapping)
787
619
  */
788
620
  async executeInternal(oneShot, skipCleanup, workspacePath, complexity) {
789
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t;
621
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r;
790
622
  process.env.ILOOM = "1";
791
623
  try {
792
624
  await this.validateNotMainWorktree(workspacePath);
@@ -841,18 +673,16 @@ var IgniteCommand = class {
841
673
  }
842
674
  try {
843
675
  const hasNeon = !!((_e = (_d = this.settings) == null ? void 0 : _d.databaseProviders) == null ? void 0 : _e.neon);
844
- const hasSupabase = !!((_g = (_f = this.settings) == null ? void 0 : _f.databaseProviders) == null ? void 0 : _g.supabase);
845
676
  const language = await detectProjectLanguage(context.workspacePath);
846
677
  TelemetryService.getInstance().track("session.started", {
847
678
  has_neon: hasNeon,
848
- has_supabase: hasSupabase,
849
679
  language
850
680
  });
851
681
  } catch (error) {
852
682
  logger.debug(`Telemetry session.started tracking failed: ${error instanceof Error ? error.message : error}`);
853
683
  }
854
- if (((_h = metadata == null ? void 0 : metadata.capabilities) == null ? void 0 : _h.includes("web")) && context.branchName) {
855
- const basePort = ((_k = (_j = (_i = this.settings) == null ? void 0 : _i.capabilities) == null ? void 0 : _j.web) == null ? void 0 : _k.basePort) ?? 3e3;
684
+ if (((_f = metadata == null ? void 0 : metadata.capabilities) == null ? void 0 : _f.includes("web")) && context.branchName) {
685
+ const basePort = ((_i = (_h = (_g = this.settings) == null ? void 0 : _g.capabilities) == null ? void 0 : _h.web) == null ? void 0 : _i.basePort) ?? 3e3;
856
686
  context.port = await getWorkspacePort({
857
687
  basePort,
858
688
  worktreePath: context.workspacePath,
@@ -860,7 +690,7 @@ var IgniteCommand = class {
860
690
  });
861
691
  logger.info(`\u{1F310} Development server port: ${context.port}`);
862
692
  }
863
- const isEpicLoom = metadata && metadata.issue_numbers.length > 0 && ((((_l = metadata.childIssues) == null ? void 0 : _l.length) ?? 0) > 0 || metadata.issueType === "epic");
693
+ const isEpicLoom = metadata && metadata.issue_numbers.length > 0 && ((((_j = metadata.childIssues) == null ? void 0 : _j.length) ?? 0) > 0 || metadata.issueType === "epic");
864
694
  if (isEpicLoom && this.settings) {
865
695
  await this.fetchAndStoreEpicChildData(metadataManager, metadata, context.workspacePath, this.settings);
866
696
  }
@@ -887,7 +717,7 @@ var IgniteCommand = class {
887
717
  const userPrompt = this.buildUserPrompt(effectiveOneShot);
888
718
  const model = this.settingsManager.getSpinModel(this.settings);
889
719
  let permissionMode = this.getPermissionModeForWorkflow(context.type);
890
- if (effectiveOneShot === "bypassPermissions") {
720
+ if (effectiveOneShot === "bypassPermissions" || (metadata == null ? void 0 : metadata.dangerouslySkipPermissions)) {
891
721
  permissionMode = "bypassPermissions";
892
722
  }
893
723
  if (permissionMode === "bypassPermissions") {
@@ -900,7 +730,7 @@ var IgniteCommand = class {
900
730
  throw new Error("No session ID found in loom metadata. This loom may need to be recreated with `il start`.");
901
731
  }
902
732
  logger.debug("Using session ID from metadata", { sessionId });
903
- const isHeadless = ((_m = this.printOptions) == null ? void 0 : _m.print) ?? false;
733
+ const isHeadless = ((_k = this.printOptions) == null ? void 0 : _k.print) ?? false;
904
734
  const claudeOptions = {
905
735
  headless: isHeadless,
906
736
  addDir: context.workspacePath,
@@ -916,16 +746,16 @@ var IgniteCommand = class {
916
746
  if (permissionMode !== void 0 && permissionMode !== "default") {
917
747
  claudeOptions.permissionMode = permissionMode;
918
748
  }
919
- if (((_n = this.printOptions) == null ? void 0 : _n.outputFormat) !== void 0) {
749
+ if (((_l = this.printOptions) == null ? void 0 : _l.outputFormat) !== void 0) {
920
750
  claudeOptions.outputFormat = this.printOptions.outputFormat;
921
751
  }
922
- if (((_o = this.printOptions) == null ? void 0 : _o.verbose) !== void 0) {
752
+ if (((_m = this.printOptions) == null ? void 0 : _m.verbose) !== void 0) {
923
753
  claudeOptions.verbose = this.printOptions.verbose;
924
754
  }
925
- if ((_p = this.printOptions) == null ? void 0 : _p.json) {
755
+ if ((_n = this.printOptions) == null ? void 0 : _n.json) {
926
756
  claudeOptions.jsonMode = "json";
927
757
  claudeOptions.outputFormat = "stream-json";
928
- } else if ((_q = this.printOptions) == null ? void 0 : _q.jsonStream) {
758
+ } else if ((_o = this.printOptions) == null ? void 0 : _o.jsonStream) {
929
759
  claudeOptions.jsonMode = "stream";
930
760
  claudeOptions.outputFormat = "stream-json";
931
761
  }
@@ -989,31 +819,17 @@ var IgniteCommand = class {
989
819
  }
990
820
  let agents;
991
821
  try {
992
- if (((_r = this.settings) == null ? void 0 : _r.agents) && Object.keys(this.settings.agents).length > 0) {
822
+ if (((_p = this.settings) == null ? void 0 : _p.agents) && Object.keys(this.settings.agents).length > 0) {
993
823
  logger.debug("Loaded project settings", {
994
824
  agentOverrides: Object.keys(this.settings.agents)
995
825
  });
996
826
  }
997
- const loadedAgents = await this.agentManager.loadAgents(
827
+ agents = await this.agentManager.loadAndPrepare(
998
828
  this.settings,
999
829
  variables,
1000
- ["*.md", "!iloom-framework-detector.md"]
830
+ ["*.md", "!iloom-framework-detector.md"],
831
+ path5.join(context.workspacePath, ".claude", "agents")
1001
832
  );
1002
- if (process.platform === "darwin") {
1003
- agents = this.agentManager.formatForCli(loadedAgents);
1004
- logger.debug("Loaded agent configurations for CLI", {
1005
- agentCount: Object.keys(agents).length,
1006
- agentNames: Object.keys(agents)
1007
- });
1008
- } else {
1009
- const agentsDir = path5.join(context.workspacePath, ".claude", "agents");
1010
- const rendered = await this.agentManager.renderAgentsToDisk(loadedAgents, agentsDir);
1011
- logger.debug("Rendered agent files to disk for auto-discovery", {
1012
- agentCount: rendered.length,
1013
- agentNames: rendered,
1014
- targetDir: agentsDir
1015
- });
1016
- }
1017
833
  } catch (error) {
1018
834
  logger.warn(`Failed to load agents: ${error instanceof Error ? error.message : "Unknown error"}`);
1019
835
  }
@@ -1042,7 +858,7 @@ var IgniteCommand = class {
1042
858
  ...disallowedTools && { disallowedTools },
1043
859
  ...agents && { agents }
1044
860
  });
1045
- if ((_s = this.printOptions) == null ? void 0 : _s.json) {
861
+ if ((_q = this.printOptions) == null ? void 0 : _q.json) {
1046
862
  console.log(JSON.stringify({
1047
863
  success: true,
1048
864
  output: claudeResult ?? ""
@@ -1053,7 +869,7 @@ var IgniteCommand = class {
1053
869
  }
1054
870
  } catch (error) {
1055
871
  const errorMessage = error instanceof Error ? error.message : "Unknown error";
1056
- if ((_t = this.printOptions) == null ? void 0 : _t.json) {
872
+ if ((_r = this.printOptions) == null ? void 0 : _r.json) {
1057
873
  console.log(JSON.stringify({
1058
874
  success: false,
1059
875
  error: errorMessage
@@ -1311,8 +1127,6 @@ var IgniteCommand = class {
1311
1127
  const mainWorktreePath = await findMainWorktreePathWithSettings();
1312
1128
  const providerName = IssueTrackerFactory.getProviderName(settings);
1313
1129
  const swarmSetup = new SwarmSetupService(
1314
- this.gitWorktreeManager,
1315
- metadataManager,
1316
1130
  this.agentManager,
1317
1131
  this.settingsManager,
1318
1132
  this.templateManager
@@ -1493,17 +1307,12 @@ var IgniteCommand = class {
1493
1307
  logger.info(` Pending child issues: ${pendingChildIssues.length}`);
1494
1308
  let agents;
1495
1309
  try {
1496
- const loadedAgents = await this.agentManager.loadAgents(
1310
+ agents = await this.agentManager.loadAndPrepare(
1497
1311
  settings,
1498
1312
  variables,
1499
- ["*.md", "!iloom-framework-detector.md"]
1313
+ ["*.md", "!iloom-framework-detector.md"],
1314
+ path5.join(epicWorktreePath, ".claude", "agents")
1500
1315
  );
1501
- if (process.platform === "darwin") {
1502
- agents = this.agentManager.formatForCli(loadedAgents);
1503
- } else {
1504
- const agentsDir = path5.join(epicWorktreePath, ".claude", "agents");
1505
- await this.agentManager.renderAgentsToDisk(loadedAgents, agentsDir);
1506
- }
1507
1316
  } catch (error) {
1508
1317
  logger.warn(`Failed to load agents: ${error instanceof Error ? error.message : "Unknown error"}`);
1509
1318
  }
@@ -1636,4 +1445,4 @@ export {
1636
1445
  WorktreeValidationError,
1637
1446
  IgniteCommand
1638
1447
  };
1639
- //# sourceMappingURL=chunk-TN2D2RX7.js.map
1448
+ //# sourceMappingURL=chunk-G2DGDCDP.js.map