@iloom/cli 0.7.6 → 0.8.1

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 (170) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +32 -3
  3. package/dist/{ClaudeContextManager-Y2YJC6BU.js → ClaudeContextManager-RDP6CLK6.js} +5 -5
  4. package/dist/{ClaudeService-NDVFQRKC.js → ClaudeService-FKPOQRA4.js} +4 -4
  5. package/dist/GitHubService-ACZVNTJE.js +12 -0
  6. package/dist/{LoomLauncher-U2B3VHPC.js → LoomLauncher-NHZMEVTQ.js} +5 -5
  7. package/dist/{MetadataManager-XJ2YB762.js → MetadataManager-W3C54UYT.js} +2 -2
  8. package/dist/{PRManager-7F3AAY66.js → PRManager-H4TUZTZL.js} +5 -5
  9. package/dist/{PromptTemplateManager-7L3HJQQU.js → PromptTemplateManager-OUYDHOPI.js} +2 -2
  10. package/dist/README.md +32 -3
  11. package/dist/{SettingsManager-YU4VYPTW.js → SettingsManager-VCVLL32H.js} +4 -2
  12. package/dist/{SettingsMigrationManager-KZKDG66H.js → SettingsMigrationManager-LEBMJP3B.js} +3 -3
  13. package/dist/agents/iloom-code-reviewer.md +735 -0
  14. package/dist/agents/iloom-framework-detector.md +1 -1
  15. package/dist/agents/iloom-issue-analyze-and-plan.md +2 -2
  16. package/dist/agents/iloom-issue-analyzer.md +2 -2
  17. package/dist/agents/iloom-issue-complexity-evaluator.md +1 -1
  18. package/dist/agents/iloom-issue-enhancer.md +2 -2
  19. package/dist/agents/iloom-issue-implementer.md +3 -3
  20. package/dist/agents/iloom-issue-planner.md +2 -2
  21. package/dist/{build-HQ5HGA3T.js → build-H4DK3DMQ.js} +7 -7
  22. package/dist/{chunk-N7FVXZNI.js → chunk-4BSXZ5YZ.js} +31 -9
  23. package/dist/chunk-4BSXZ5YZ.js.map +1 -0
  24. package/dist/{chunk-VYKKWU36.js → chunk-4KGRPHM6.js} +3 -3
  25. package/dist/{chunk-CFQVOTHO.js → chunk-52MVUK5V.js} +2 -2
  26. package/dist/{chunk-TIYJEEVO.js → chunk-66QOCD5N.js} +1 -1
  27. package/dist/chunk-66QOCD5N.js.map +1 -0
  28. package/dist/chunk-7JDMYTFZ.js +251 -0
  29. package/dist/chunk-7JDMYTFZ.js.map +1 -0
  30. package/dist/{chunk-7LSSNB7Y.js → chunk-7ZEHSSUP.js} +2 -2
  31. package/dist/chunk-A4UQY3M2.js +75 -0
  32. package/dist/chunk-A4UQY3M2.js.map +1 -0
  33. package/dist/{chunk-ELJKYFSH.js → chunk-BCQDYAOJ.js} +4 -4
  34. package/dist/{chunk-F2PWIRV4.js → chunk-BYUMEDDD.js} +2 -2
  35. package/dist/{chunk-CAXFWFV6.js → chunk-ECP77QGE.js} +4 -4
  36. package/dist/{chunk-6YAMWLCP.js → chunk-EQOFNPEY.js} +3 -3
  37. package/dist/{chunk-ZA575VLF.js → chunk-GDS2HXSW.js} +4 -4
  38. package/dist/{chunk-UDRZY65Y.js → chunk-HSGZW3ID.js} +2 -2
  39. package/dist/{chunk-WFQ5CLTR.js → chunk-IWIIOFEB.js} +56 -5
  40. package/dist/chunk-IWIIOFEB.js.map +1 -0
  41. package/dist/{chunk-VWGKGNJP.js → chunk-KBEIQP4G.js} +3 -1
  42. package/dist/chunk-KBEIQP4G.js.map +1 -0
  43. package/dist/{chunk-ETY2SBW5.js → chunk-NR64HNF7.js} +17 -15
  44. package/dist/chunk-NR64HNF7.js.map +1 -0
  45. package/dist/{chunk-WT4UGBE2.js → chunk-PBSHQVCT.js} +5 -5
  46. package/dist/{chunk-64HCHVJM.js → chunk-PLI3JQWT.js} +2 -2
  47. package/dist/{chunk-USJSNHGG.js → chunk-PVW6JE7E.js} +3 -3
  48. package/dist/{chunk-HBJITKSZ.js → chunk-RNBIISBZ.js} +161 -3
  49. package/dist/chunk-RNBIISBZ.js.map +1 -0
  50. package/dist/{chunk-C7YW5IMS.js → chunk-RODL2HVY.js} +17 -6
  51. package/dist/{chunk-C7YW5IMS.js.map → chunk-RODL2HVY.js.map} +1 -1
  52. package/dist/{chunk-3K3WY3BN.js → chunk-SC6X5EBG.js} +4 -4
  53. package/dist/{chunk-NEPH2O4C.js → chunk-SSASIBDJ.js} +3 -3
  54. package/dist/{chunk-GCPAZSGV.js → chunk-THS5L54H.js} +150 -3
  55. package/dist/chunk-THS5L54H.js.map +1 -0
  56. package/dist/{chunk-5V74K5ZA.js → chunk-TVH67KEO.js} +25 -2
  57. package/dist/chunk-TVH67KEO.js.map +1 -0
  58. package/dist/{chunk-NPEMVE27.js → chunk-UDZCTLD6.js} +115 -3
  59. package/dist/chunk-UDZCTLD6.js.map +1 -0
  60. package/dist/{chunk-ENMTWE74.js → chunk-VZYSM7N7.js} +2 -2
  61. package/dist/{chunk-WZYBHD7P.js → chunk-XHNACIHO.js} +2 -2
  62. package/dist/{chunk-XAMBIVXE.js → chunk-XJHQVOT6.js} +2 -2
  63. package/dist/{chunk-O36JLYNW.js → chunk-XU5A6BWA.js} +4 -7
  64. package/dist/chunk-XU5A6BWA.js.map +1 -0
  65. package/dist/{cleanup-IO4KV2DL.js → cleanup-OGE7V7AD.js} +16 -16
  66. package/dist/cli.js +317 -164
  67. package/dist/cli.js.map +1 -1
  68. package/dist/{commit-3ULFKXNB.js → commit-534QIRHY.js} +10 -10
  69. package/dist/{compile-CT7IR7O2.js → compile-ZOAODFN2.js} +7 -7
  70. package/dist/{contribute-GXKOIA42.js → contribute-7USRBWRM.js} +6 -6
  71. package/dist/{dev-server-OAP3RZC6.js → dev-server-TYYJM3XA.js} +9 -9
  72. package/dist/{feedback-ZLAX3BVL.js → feedback-HZVLOTQJ.js} +9 -9
  73. package/dist/{git-ENLT2VNI.js → git-GUNOPP4Q.js} +4 -4
  74. package/dist/hooks/iloom-hook.js +75 -3
  75. package/dist/{ignite-HA2OJF6Z.js → ignite-ZO7SGUKP.js} +85 -25
  76. package/dist/ignite-ZO7SGUKP.js.map +1 -0
  77. package/dist/index.d.ts +85 -2
  78. package/dist/index.js +133 -73
  79. package/dist/index.js.map +1 -1
  80. package/dist/init-MZBIXQ7V.js +21 -0
  81. package/dist/{lint-HAVU4U34.js → lint-MDVUV3W2.js} +7 -7
  82. package/dist/mcp/issue-management-server.js +569 -2
  83. package/dist/mcp/issue-management-server.js.map +1 -1
  84. package/dist/{neon-helpers-3KBC4A3Y.js → neon-helpers-VVFFTLXE.js} +3 -3
  85. package/dist/{open-IN3LUZXX.js → open-2LPZ7XXW.js} +9 -9
  86. package/dist/plan-PIME6UNY.js +371 -0
  87. package/dist/plan-PIME6UNY.js.map +1 -0
  88. package/dist/{projects-CTRTTMSK.js → projects-325GEEGJ.js} +2 -2
  89. package/dist/{prompt-3SAZYRUN.js → prompt-ONNPSNKM.js} +2 -2
  90. package/dist/prompts/init-prompt.txt +83 -3
  91. package/dist/prompts/issue-prompt.txt +51 -3
  92. package/dist/prompts/plan-prompt.txt +435 -0
  93. package/dist/prompts/pr-prompt.txt +38 -0
  94. package/dist/prompts/regular-prompt.txt +53 -3
  95. package/dist/{rebase-RLEVFHWN.js → rebase-7YS3N274.js} +6 -6
  96. package/dist/{recap-ZKGHZCX6.js → recap-GSXFEOD6.js} +6 -6
  97. package/dist/{run-QEIS2EH2.js → run-XPGCMFFO.js} +9 -9
  98. package/dist/schema/settings.schema.json +57 -1
  99. package/dist/{shell-2NNSIU34.js → shell-2SPM3Z5O.js} +6 -6
  100. package/dist/{summary-MPOOQIOX.js → summary-C5VVSJAJ.js} +11 -11
  101. package/dist/{test-75WAA6DU.js → test-N2725YRI.js} +7 -7
  102. package/dist/{test-git-E2BLXR6M.js → test-git-ZPSPA2TP.js} +4 -4
  103. package/dist/{test-prefix-A7JGGYAA.js → test-prefix-6DLB2BHE.js} +4 -4
  104. package/dist/{test-webserver-J6SMNLU2.js → test-webserver-XLJ2TZFP.js} +6 -6
  105. package/package.json +1 -1
  106. package/dist/GitHubService-O7U4UQ7N.js +0 -12
  107. package/dist/agents/iloom-issue-reviewer.md +0 -139
  108. package/dist/chunk-5V74K5ZA.js.map +0 -1
  109. package/dist/chunk-ETY2SBW5.js.map +0 -1
  110. package/dist/chunk-GCPAZSGV.js.map +0 -1
  111. package/dist/chunk-HBJITKSZ.js.map +0 -1
  112. package/dist/chunk-N7FVXZNI.js.map +0 -1
  113. package/dist/chunk-NPEMVE27.js.map +0 -1
  114. package/dist/chunk-O36JLYNW.js.map +0 -1
  115. package/dist/chunk-TIYJEEVO.js.map +0 -1
  116. package/dist/chunk-VWGKGNJP.js.map +0 -1
  117. package/dist/chunk-WFQ5CLTR.js.map +0 -1
  118. package/dist/chunk-ZX3GTM7O.js +0 -119
  119. package/dist/chunk-ZX3GTM7O.js.map +0 -1
  120. package/dist/ignite-HA2OJF6Z.js.map +0 -1
  121. package/dist/init-S6IEGRSX.js +0 -21
  122. /package/dist/{ClaudeContextManager-Y2YJC6BU.js.map → ClaudeContextManager-RDP6CLK6.js.map} +0 -0
  123. /package/dist/{ClaudeService-NDVFQRKC.js.map → ClaudeService-FKPOQRA4.js.map} +0 -0
  124. /package/dist/{GitHubService-O7U4UQ7N.js.map → GitHubService-ACZVNTJE.js.map} +0 -0
  125. /package/dist/{LoomLauncher-U2B3VHPC.js.map → LoomLauncher-NHZMEVTQ.js.map} +0 -0
  126. /package/dist/{MetadataManager-XJ2YB762.js.map → MetadataManager-W3C54UYT.js.map} +0 -0
  127. /package/dist/{PRManager-7F3AAY66.js.map → PRManager-H4TUZTZL.js.map} +0 -0
  128. /package/dist/{PromptTemplateManager-7L3HJQQU.js.map → PromptTemplateManager-OUYDHOPI.js.map} +0 -0
  129. /package/dist/{SettingsManager-YU4VYPTW.js.map → SettingsManager-VCVLL32H.js.map} +0 -0
  130. /package/dist/{SettingsMigrationManager-KZKDG66H.js.map → SettingsMigrationManager-LEBMJP3B.js.map} +0 -0
  131. /package/dist/{build-HQ5HGA3T.js.map → build-H4DK3DMQ.js.map} +0 -0
  132. /package/dist/{chunk-VYKKWU36.js.map → chunk-4KGRPHM6.js.map} +0 -0
  133. /package/dist/{chunk-CFQVOTHO.js.map → chunk-52MVUK5V.js.map} +0 -0
  134. /package/dist/{chunk-7LSSNB7Y.js.map → chunk-7ZEHSSUP.js.map} +0 -0
  135. /package/dist/{chunk-ELJKYFSH.js.map → chunk-BCQDYAOJ.js.map} +0 -0
  136. /package/dist/{chunk-F2PWIRV4.js.map → chunk-BYUMEDDD.js.map} +0 -0
  137. /package/dist/{chunk-CAXFWFV6.js.map → chunk-ECP77QGE.js.map} +0 -0
  138. /package/dist/{chunk-6YAMWLCP.js.map → chunk-EQOFNPEY.js.map} +0 -0
  139. /package/dist/{chunk-ZA575VLF.js.map → chunk-GDS2HXSW.js.map} +0 -0
  140. /package/dist/{chunk-UDRZY65Y.js.map → chunk-HSGZW3ID.js.map} +0 -0
  141. /package/dist/{chunk-WT4UGBE2.js.map → chunk-PBSHQVCT.js.map} +0 -0
  142. /package/dist/{chunk-64HCHVJM.js.map → chunk-PLI3JQWT.js.map} +0 -0
  143. /package/dist/{chunk-USJSNHGG.js.map → chunk-PVW6JE7E.js.map} +0 -0
  144. /package/dist/{chunk-3K3WY3BN.js.map → chunk-SC6X5EBG.js.map} +0 -0
  145. /package/dist/{chunk-NEPH2O4C.js.map → chunk-SSASIBDJ.js.map} +0 -0
  146. /package/dist/{chunk-ENMTWE74.js.map → chunk-VZYSM7N7.js.map} +0 -0
  147. /package/dist/{chunk-WZYBHD7P.js.map → chunk-XHNACIHO.js.map} +0 -0
  148. /package/dist/{chunk-XAMBIVXE.js.map → chunk-XJHQVOT6.js.map} +0 -0
  149. /package/dist/{cleanup-IO4KV2DL.js.map → cleanup-OGE7V7AD.js.map} +0 -0
  150. /package/dist/{commit-3ULFKXNB.js.map → commit-534QIRHY.js.map} +0 -0
  151. /package/dist/{compile-CT7IR7O2.js.map → compile-ZOAODFN2.js.map} +0 -0
  152. /package/dist/{contribute-GXKOIA42.js.map → contribute-7USRBWRM.js.map} +0 -0
  153. /package/dist/{dev-server-OAP3RZC6.js.map → dev-server-TYYJM3XA.js.map} +0 -0
  154. /package/dist/{feedback-ZLAX3BVL.js.map → feedback-HZVLOTQJ.js.map} +0 -0
  155. /package/dist/{git-ENLT2VNI.js.map → git-GUNOPP4Q.js.map} +0 -0
  156. /package/dist/{init-S6IEGRSX.js.map → init-MZBIXQ7V.js.map} +0 -0
  157. /package/dist/{lint-HAVU4U34.js.map → lint-MDVUV3W2.js.map} +0 -0
  158. /package/dist/{neon-helpers-3KBC4A3Y.js.map → neon-helpers-VVFFTLXE.js.map} +0 -0
  159. /package/dist/{open-IN3LUZXX.js.map → open-2LPZ7XXW.js.map} +0 -0
  160. /package/dist/{projects-CTRTTMSK.js.map → projects-325GEEGJ.js.map} +0 -0
  161. /package/dist/{prompt-3SAZYRUN.js.map → prompt-ONNPSNKM.js.map} +0 -0
  162. /package/dist/{rebase-RLEVFHWN.js.map → rebase-7YS3N274.js.map} +0 -0
  163. /package/dist/{recap-ZKGHZCX6.js.map → recap-GSXFEOD6.js.map} +0 -0
  164. /package/dist/{run-QEIS2EH2.js.map → run-XPGCMFFO.js.map} +0 -0
  165. /package/dist/{shell-2NNSIU34.js.map → shell-2SPM3Z5O.js.map} +0 -0
  166. /package/dist/{summary-MPOOQIOX.js.map → summary-C5VVSJAJ.js.map} +0 -0
  167. /package/dist/{test-75WAA6DU.js.map → test-N2725YRI.js.map} +0 -0
  168. /package/dist/{test-git-E2BLXR6M.js.map → test-git-ZPSPA2TP.js.map} +0 -0
  169. /package/dist/{test-prefix-A7JGGYAA.js.map → test-prefix-6DLB2BHE.js.map} +0 -0
  170. /package/dist/{test-webserver-J6SMNLU2.js.map → test-webserver-XLJ2TZFP.js.map} +0 -0
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  SessionSummaryService
4
- } from "./chunk-WT4UGBE2.js";
4
+ } from "./chunk-PBSHQVCT.js";
5
5
  import "./chunk-NXMDEL3F.js";
6
6
  import {
7
7
  CLIIsolationManager,
@@ -9,65 +9,69 @@ import {
9
9
  EnvironmentManager,
10
10
  LoomManager,
11
11
  ResourceCleanup
12
- } from "./chunk-ETY2SBW5.js";
12
+ } from "./chunk-NR64HNF7.js";
13
+ import {
14
+ launchFirstRunSetup,
15
+ needsFirstRunSetup
16
+ } from "./chunk-A4UQY3M2.js";
13
17
  import {
14
18
  BuildRunner,
15
19
  MergeManager
16
- } from "./chunk-CAXFWFV6.js";
20
+ } from "./chunk-ECP77QGE.js";
17
21
  import {
18
22
  IssueTrackerFactory
19
- } from "./chunk-3K3WY3BN.js";
23
+ } from "./chunk-SC6X5EBG.js";
20
24
  import {
21
25
  ProcessManager
22
- } from "./chunk-WZYBHD7P.js";
23
- import "./chunk-CFQVOTHO.js";
26
+ } from "./chunk-XHNACIHO.js";
27
+ import "./chunk-52MVUK5V.js";
24
28
  import {
25
- IdentifierParser
26
- } from "./chunk-5V74K5ZA.js";
29
+ IdentifierParser,
30
+ matchIssueIdentifier
31
+ } from "./chunk-TVH67KEO.js";
27
32
  import {
28
33
  createNeonProviderFromSettings
29
- } from "./chunk-7LSSNB7Y.js";
34
+ } from "./chunk-7ZEHSSUP.js";
30
35
  import {
31
- InitCommand,
32
36
  ShellCompletion
33
- } from "./chunk-C7YW5IMS.js";
34
- import {
35
- FirstRunManager
36
- } from "./chunk-Q7POFB5Q.js";
37
- import "./chunk-F2PWIRV4.js";
37
+ } from "./chunk-RODL2HVY.js";
38
+ import "./chunk-Q7POFB5Q.js";
39
+ import "./chunk-BYUMEDDD.js";
38
40
  import {
39
41
  IssueEnhancementService,
40
42
  capitalizeFirstLetter
41
- } from "./chunk-VYKKWU36.js";
42
- import "./chunk-XAMBIVXE.js";
43
+ } from "./chunk-4KGRPHM6.js";
44
+ import "./chunk-XJHQVOT6.js";
43
45
  import {
44
46
  ProjectCapabilityDetector
45
47
  } from "./chunk-7GLZVDPQ.js";
46
48
  import {
47
49
  AgentManager
48
- } from "./chunk-N7FVXZNI.js";
50
+ } from "./chunk-4BSXZ5YZ.js";
49
51
  import {
50
52
  CommitManager,
51
53
  UserAbortedCommitError,
52
54
  ValidationRunner
53
- } from "./chunk-NEPH2O4C.js";
55
+ } from "./chunk-SSASIBDJ.js";
54
56
  import {
55
57
  installDependencies
56
58
  } from "./chunk-RD7I2Q2F.js";
57
59
  import {
58
60
  GitWorktreeManager
59
- } from "./chunk-UDRZY65Y.js";
61
+ } from "./chunk-HSGZW3ID.js";
60
62
  import "./chunk-XPKN3QWY.js";
61
63
  import {
62
64
  PRManager
63
- } from "./chunk-6YAMWLCP.js";
65
+ } from "./chunk-EQOFNPEY.js";
64
66
  import {
65
67
  openBrowser
66
68
  } from "./chunk-YETJNRQM.js";
67
69
  import {
68
70
  IssueManagementProviderFactory
69
- } from "./chunk-NPEMVE27.js";
70
- import "./chunk-HBJITKSZ.js";
71
+ } from "./chunk-UDZCTLD6.js";
72
+ import {
73
+ getLinearChildIssues
74
+ } from "./chunk-RNBIISBZ.js";
71
75
  import {
72
76
  getConfiguredRepoFromSettings,
73
77
  hasMultipleRemotes
@@ -79,9 +83,9 @@ import {
79
83
  } from "./chunk-O7VL5N6S.js";
80
84
  import {
81
85
  ClaudeContextManager
82
- } from "./chunk-64HCHVJM.js";
83
- import "./chunk-O36JLYNW.js";
84
- import "./chunk-TIYJEEVO.js";
86
+ } from "./chunk-PLI3JQWT.js";
87
+ import "./chunk-XU5A6BWA.js";
88
+ import "./chunk-66QOCD5N.js";
85
89
  import {
86
90
  extractSettingsOverrides
87
91
  } from "./chunk-GYCR2LOU.js";
@@ -95,27 +99,28 @@ import {
95
99
  findMainWorktreePathWithSettings,
96
100
  findPlaceholderCommitSha,
97
101
  getMergeTargetBranch,
98
- getRepoRoot,
99
102
  isPlaceholderCommit,
100
103
  isValidGitRepo,
101
104
  pushBranchToRemote,
102
105
  removePlaceholderCommitFromHead,
103
106
  removePlaceholderCommitFromHistory
104
- } from "./chunk-ZA575VLF.js";
107
+ } from "./chunk-GDS2HXSW.js";
105
108
  import {
106
109
  SettingsManager
107
- } from "./chunk-WFQ5CLTR.js";
110
+ } from "./chunk-IWIIOFEB.js";
108
111
  import {
109
112
  MetadataManager
110
- } from "./chunk-VWGKGNJP.js";
113
+ } from "./chunk-KBEIQP4G.js";
111
114
  import {
112
115
  GitHubService
113
- } from "./chunk-USJSNHGG.js";
114
- import "./chunk-GCPAZSGV.js";
116
+ } from "./chunk-PVW6JE7E.js";
117
+ import {
118
+ getSubIssues
119
+ } from "./chunk-THS5L54H.js";
115
120
  import {
116
121
  promptConfirmation,
117
122
  waitForKeypress
118
- } from "./chunk-ZX3GTM7O.js";
123
+ } from "./chunk-7JDMYTFZ.js";
119
124
  import "./chunk-433MOLAU.js";
120
125
  import "./chunk-IGKPPACU.js";
121
126
  import {
@@ -132,65 +137,7 @@ import {
132
137
  import { program, Option } from "commander";
133
138
 
134
139
  // src/commands/start.ts
135
- import path2 from "path";
136
-
137
- // src/utils/first-run-setup.ts
138
- import { existsSync } from "fs";
139
- import { readFile } from "fs/promises";
140
140
  import path from "path";
141
- async function getProjectRoot() {
142
- const repoRoot = await getRepoRoot();
143
- if (repoRoot) {
144
- logger.debug(`getProjectRoot: Using git repo root: ${repoRoot}`);
145
- return repoRoot;
146
- }
147
- const cwd = process.cwd();
148
- logger.debug(`getProjectRoot: Not in git repo, using cwd: ${cwd}`);
149
- return cwd;
150
- }
151
- async function needsFirstRunSetup() {
152
- const projectRoot = await getProjectRoot();
153
- const firstRunManager = new FirstRunManager();
154
- const isConfigured = await firstRunManager.isProjectConfigured(projectRoot);
155
- if (isConfigured) {
156
- logger.debug("needsFirstRunSetup: Project is tracked as configured globally");
157
- return false;
158
- }
159
- const iloomDir = path.join(projectRoot, ".iloom");
160
- if (!existsSync(iloomDir)) {
161
- return true;
162
- }
163
- const settingsPath = path.join(iloomDir, "settings.json");
164
- const settingsLocalPath = path.join(iloomDir, "settings.local.json");
165
- const hasSettings = await hasNonEmptySettings(settingsPath);
166
- const hasLocalSettings = await hasNonEmptySettings(settingsLocalPath);
167
- return !hasSettings && !hasLocalSettings;
168
- }
169
- async function hasNonEmptySettings(filePath) {
170
- if (!existsSync(filePath)) return false;
171
- try {
172
- const content = await readFile(filePath, "utf-8");
173
- const parsed = JSON.parse(content);
174
- return Object.keys(parsed).length > 0;
175
- } catch {
176
- return false;
177
- }
178
- }
179
- async function launchFirstRunSetup() {
180
- logger.info("First-time project setup detected.");
181
- logger.info(
182
- "iloom will now launch an interactive configuration session with Claude."
183
- );
184
- const { waitForKeypress: waitForKeypress2 } = await import("./prompt-3SAZYRUN.js");
185
- await waitForKeypress2("Press any key to start configuration...");
186
- const initCommand = new InitCommand();
187
- await initCommand.execute(
188
- "Help me configure iloom settings for this project. This is my first time using iloom here. Note: Your iloom command will execute once we are done with configuration changes."
189
- );
190
- logger.info("Configuration complete! Continuing with your original command...");
191
- }
192
-
193
- // src/commands/start.ts
194
141
  var StartCommand = class {
195
142
  constructor(issueTracker, loomManager, _agentManager, settingsManager) {
196
143
  this.loomManager = null;
@@ -278,7 +225,7 @@ var StartCommand = class {
278
225
  const parsed = await this.parseInput(input.identifier, repo);
279
226
  await this.validateInput(parsed, repo);
280
227
  if (parentLoom) {
281
- const { isInteractiveEnvironment, promptConfirmation: promptConfirmation2 } = await import("./prompt-3SAZYRUN.js");
228
+ const { isInteractiveEnvironment, promptConfirmation: promptConfirmation2 } = await import("./prompt-ONNPSNKM.js");
282
229
  const parentDisplay = parentLoom.type === "issue" ? `issue #${parentLoom.identifier}` : parentLoom.type === "pr" ? `PR #${parentLoom.identifier}` : `branch ${parentLoom.identifier}`;
283
230
  if (input.options.childLoom === true) {
284
231
  getLogger().info(`Creating as child loom of ${parentDisplay} (--child-loom flag)`);
@@ -326,7 +273,7 @@ var StartCommand = class {
326
273
  if (isJsonMode) {
327
274
  throw new Error("JSON mode does not support bypassPermissions confirmation prompt");
328
275
  }
329
- const { promptConfirmation: promptConfirmation2 } = await import("./prompt-3SAZYRUN.js");
276
+ const { promptConfirmation: promptConfirmation2 } = await import("./prompt-ONNPSNKM.js");
330
277
  const confirmed = await promptConfirmation2(
331
278
  "WARNING: bypassPermissions mode will allow Claude to execute all tool calls without confirmation. This can be dangerous. Do you want to proceed?"
332
279
  );
@@ -423,9 +370,8 @@ var StartCommand = class {
423
370
  originalInput: trimmedIdentifier
424
371
  };
425
372
  }
426
- const linearPattern = /^([A-Z]{2,}-\d+)$/i;
427
- const linearMatch = trimmedIdentifier.match(linearPattern);
428
- if (linearMatch == null ? void 0 : linearMatch[1]) {
373
+ const identifierMatch = matchIssueIdentifier(trimmedIdentifier);
374
+ if (identifierMatch.type === "linear" && identifierMatch.identifier) {
429
375
  const detection = await this.issueTracker.detectInputType(
430
376
  trimmedIdentifier,
431
377
  repo
@@ -439,13 +385,11 @@ var StartCommand = class {
439
385
  };
440
386
  }
441
387
  throw new Error(
442
- `Could not find Linear issue ${linearMatch[1].toUpperCase()}`
388
+ `Could not find Linear issue ${identifierMatch.identifier}`
443
389
  );
444
390
  }
445
- const numericPattern = /^#?(\d+)$/;
446
- const numericMatch = trimmedIdentifier.match(numericPattern);
447
- if (numericMatch == null ? void 0 : numericMatch[1]) {
448
- const number = parseInt(numericMatch[1], 10);
391
+ if (identifierMatch.type === "numeric" && identifierMatch.identifier) {
392
+ const number = parseInt(identifierMatch.identifier, 10);
449
393
  if (this.issueTracker.supportsPullRequests) {
450
394
  const detection = await this.issueTracker.detectInputType(
451
395
  trimmedIdentifier,
@@ -582,7 +526,7 @@ var StartCommand = class {
582
526
  if (loom.path === mainWorktreePath) {
583
527
  return false;
584
528
  }
585
- return cwd === loom.path || cwd.startsWith(loom.path + path2.sep);
529
+ return cwd === loom.path || cwd.startsWith(loom.path + path.sep);
586
530
  });
587
531
  if (!parentLoom) {
588
532
  return null;
@@ -778,7 +722,7 @@ var EnhanceCommand = class {
778
722
  };
779
723
 
780
724
  // src/commands/finish.ts
781
- import path3 from "path";
725
+ import path2 from "path";
782
726
  var FinishCommand = class {
783
727
  constructor(issueTracker, gitWorktreeManager, validationRunner, commitManager, mergeManager, identifierParser, resourceCleanup, buildRunner, settingsManager, loomManager) {
784
728
  const envResult = loadEnvIntoProcess();
@@ -980,7 +924,7 @@ var FinishCommand = class {
980
924
  * Ports logic from merge-current-issue.sh lines 30-52
981
925
  */
982
926
  async autoDetectFromCurrentDirectory() {
983
- const currentDir = path3.basename(process.cwd());
927
+ const currentDir = path2.basename(process.cwd());
984
928
  const prPattern = /_pr_(\d+)$/;
985
929
  const prMatch = currentDir.match(prPattern);
986
930
  if (prMatch == null ? void 0 : prMatch[1]) {
@@ -1244,7 +1188,7 @@ var FinishCommand = class {
1244
1188
  return;
1245
1189
  }
1246
1190
  if (mergeBehavior.mode === "github-draft-pr") {
1247
- const { MetadataManager: MetadataManager3 } = await import("./MetadataManager-XJ2YB762.js");
1191
+ const { MetadataManager: MetadataManager3 } = await import("./MetadataManager-W3C54UYT.js");
1248
1192
  const metadataManager2 = new MetadataManager3();
1249
1193
  const metadata = await metadataManager2.readMetadata(worktree.path);
1250
1194
  getLogger().debug(`Draft PR mode: worktree=${worktree.path}, draftPrNumber=${(metadata == null ? void 0 : metadata.draftPrNumber) ?? "none"}`);
@@ -1345,7 +1289,7 @@ var FinishCommand = class {
1345
1289
  getLogger().debug("Skipping build verification (--skip-build flag provided)");
1346
1290
  }
1347
1291
  await this.generateSessionSummaryIfConfigured(parsed, worktree, options);
1348
- const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-XJ2YB762.js");
1292
+ const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-W3C54UYT.js");
1349
1293
  const metadataManager = new MetadataManager2();
1350
1294
  if (!options.dryRun) {
1351
1295
  await metadataManager.archiveMetadata(worktree.path);
@@ -1374,7 +1318,7 @@ var FinishCommand = class {
1374
1318
  "Cannot cleanup PR with uncommitted changes. Commit or stash changes, then run again with --force to cleanup anyway."
1375
1319
  );
1376
1320
  }
1377
- const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-XJ2YB762.js");
1321
+ const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-W3C54UYT.js");
1378
1322
  const metadataManager = new MetadataManager2();
1379
1323
  if (!options.dryRun) {
1380
1324
  await metadataManager.archiveMetadata(worktree.path);
@@ -1506,7 +1450,7 @@ var FinishCommand = class {
1506
1450
  }
1507
1451
  finishResult.prUrl = prResult.url;
1508
1452
  await this.generateSessionSummaryIfConfigured(parsed, worktree, options, prResult.number);
1509
- const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-XJ2YB762.js");
1453
+ const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-W3C54UYT.js");
1510
1454
  const metadataManager = new MetadataManager2();
1511
1455
  if (!options.dryRun) {
1512
1456
  await metadataManager.archiveMetadata(worktree.path);
@@ -1847,8 +1791,8 @@ var FinishCommand = class {
1847
1791
  * Check if current working directory is within the target worktree
1848
1792
  */
1849
1793
  isRunningFromWithinWorktree(worktreePath) {
1850
- const normalizedCwd = path3.normalize(process.cwd());
1851
- const normalizedWorktree = path3.normalize(worktreePath);
1794
+ const normalizedCwd = path2.normalize(process.cwd());
1795
+ const normalizedWorktree = path2.normalize(worktreePath);
1852
1796
  return normalizedCwd.startsWith(normalizedWorktree);
1853
1797
  }
1854
1798
  /**
@@ -1903,12 +1847,12 @@ function determineLoomType(worktree) {
1903
1847
  }
1904
1848
  return "branch";
1905
1849
  }
1906
- function extractPRNumbers(path6) {
1907
- if (!path6) {
1850
+ function extractPRNumbers(path5) {
1851
+ if (!path5) {
1908
1852
  return [];
1909
1853
  }
1910
1854
  const prPathPattern = /_pr_(\d+)$/;
1911
- const match = path6.match(prPathPattern);
1855
+ const match = path5.match(prPathPattern);
1912
1856
  if (match == null ? void 0 : match[1]) {
1913
1857
  return [match[1]];
1914
1858
  }
@@ -1956,7 +1900,9 @@ function formatLoomForJson(worktree, mainWorktreePath, metadata) {
1956
1900
  projectPath: (metadata == null ? void 0 : metadata.projectPath) ?? null,
1957
1901
  issueUrls: (metadata == null ? void 0 : metadata.issueUrls) ?? {},
1958
1902
  prUrls: (metadata == null ? void 0 : metadata.prUrls) ?? {},
1959
- capabilities: (metadata == null ? void 0 : metadata.capabilities) ?? []
1903
+ capabilities: (metadata == null ? void 0 : metadata.capabilities) ?? [],
1904
+ isChildLoom: (metadata == null ? void 0 : metadata.parentLoom) != null,
1905
+ parentLoom: (metadata == null ? void 0 : metadata.parentLoom) ?? null
1960
1906
  };
1961
1907
  }
1962
1908
  function formatLoomsForJson(worktrees, mainWorktreePath, metadata) {
@@ -1983,21 +1929,125 @@ function formatFinishedLoomForJson(metadata) {
1983
1929
  prUrls: metadata.prUrls ?? {},
1984
1930
  capabilities: metadata.capabilities ?? [],
1985
1931
  status: metadata.status ?? "finished",
1986
- finishedAt: metadata.finishedAt ?? null
1932
+ finishedAt: metadata.finishedAt ?? null,
1933
+ isChildLoom: metadata.parentLoom != null,
1934
+ parentLoom: metadata.parentLoom ?? null
1987
1935
  };
1988
1936
  }
1989
1937
 
1938
+ // src/utils/list-children.ts
1939
+ async function fetchChildIssues(parentIssueNumber, settings, repo) {
1940
+ const providerName = IssueTrackerFactory.getProviderName(settings);
1941
+ logger.debug("Fetching child issues", { parentIssueNumber, provider: providerName, repo });
1942
+ const results = await Promise.allSettled([
1943
+ (async () => {
1944
+ if (providerName === "github") {
1945
+ const issueNum = parseInt(parentIssueNumber, 10);
1946
+ if (isNaN(issueNum)) {
1947
+ logger.warn(`Invalid GitHub issue number: ${parentIssueNumber}`);
1948
+ return [];
1949
+ }
1950
+ return getSubIssues(issueNum, repo);
1951
+ } else if (providerName === "linear") {
1952
+ return getLinearChildIssues(parentIssueNumber);
1953
+ } else {
1954
+ logger.warn(`Unsupported issue tracker provider: ${providerName}`);
1955
+ return [];
1956
+ }
1957
+ })()
1958
+ ]);
1959
+ const result = results[0];
1960
+ if (result.status === "fulfilled") {
1961
+ return result.value;
1962
+ } else {
1963
+ logger.warn(`Failed to fetch child issues for ${parentIssueNumber}`, { error: result.reason });
1964
+ return [];
1965
+ }
1966
+ }
1967
+ async function findChildLooms(parentBranchName, metadataManager) {
1968
+ logger.debug("Finding child looms", { parentBranchName });
1969
+ const allMetadata = await metadataManager.listAllMetadata();
1970
+ const childLooms = allMetadata.filter((metadata) => {
1971
+ if (!metadata.parentLoom) {
1972
+ return false;
1973
+ }
1974
+ return metadata.parentLoom.branchName === parentBranchName;
1975
+ });
1976
+ logger.debug(`Found ${childLooms.length} child looms for parent: ${parentBranchName}`);
1977
+ return childLooms;
1978
+ }
1979
+ function matchChildrenData(childIssues, childLooms) {
1980
+ const issueToLoomMap = /* @__PURE__ */ new Map();
1981
+ for (const loom of childLooms) {
1982
+ for (const issueNum of loom.issue_numbers) {
1983
+ issueToLoomMap.set(issueNum, loom);
1984
+ }
1985
+ }
1986
+ const childIssueIds = new Set(childIssues.map((issue) => issue.id));
1987
+ const matchedIssues = childIssues.map((issue) => {
1988
+ const matchingLoom = issueToLoomMap.get(issue.id);
1989
+ return {
1990
+ id: issue.id,
1991
+ title: issue.title,
1992
+ url: issue.url,
1993
+ state: issue.state,
1994
+ hasActiveLoom: matchingLoom != null,
1995
+ loomBranch: (matchingLoom == null ? void 0 : matchingLoom.branchName) ?? null
1996
+ };
1997
+ });
1998
+ const matchedLooms = childLooms.map((loom) => {
1999
+ const hasMatchingIssue = loom.issue_numbers.some((issueNum) => childIssueIds.has(issueNum));
2000
+ return {
2001
+ branch: loom.branchName ?? "",
2002
+ issueNumbers: loom.issue_numbers,
2003
+ hasMatchingIssue
2004
+ };
2005
+ });
2006
+ const summary = {
2007
+ totalIssues: matchedIssues.length,
2008
+ issuesWithLooms: matchedIssues.filter((issue) => issue.hasActiveLoom).length,
2009
+ totalLooms: matchedLooms.length,
2010
+ orphanLooms: matchedLooms.filter((loom) => !loom.hasMatchingIssue).length
2011
+ };
2012
+ return {
2013
+ issues: matchedIssues,
2014
+ looms: matchedLooms,
2015
+ summary
2016
+ };
2017
+ }
2018
+ async function assembleChildrenData(parentLoom, metadataManager, settings, repo) {
2019
+ if (!parentLoom.issue_numbers || parentLoom.issue_numbers.length === 0) {
2020
+ logger.debug("No issue_numbers on loom, skipping children fetch", {
2021
+ branch: parentLoom.branchName
2022
+ });
2023
+ return null;
2024
+ }
2025
+ if (!parentLoom.branchName) {
2026
+ logger.debug("No branchName on loom, skipping children fetch");
2027
+ return null;
2028
+ }
2029
+ const parentIssueNumber = parentLoom.issue_numbers[0];
2030
+ if (parentIssueNumber === void 0) {
2031
+ return null;
2032
+ }
2033
+ const [childIssues, childLooms] = await Promise.all([
2034
+ fetchChildIssues(parentIssueNumber, settings, repo),
2035
+ findChildLooms(parentLoom.branchName, metadataManager)
2036
+ ]);
2037
+ return matchChildrenData(childIssues, childLooms);
2038
+ }
2039
+
1990
2040
  // src/cli.ts
1991
2041
  import fs3 from "fs-extra";
1992
2042
 
1993
2043
  // src/lib/VersionMigrationManager.ts
1994
2044
  import fs2 from "fs-extra";
1995
- import path5 from "path";
2045
+ import path4 from "path";
1996
2046
  import os2 from "os";
1997
2047
 
1998
2048
  // src/migrations/index.ts
1999
2049
  import fs from "fs-extra";
2000
- import path4 from "path";
2050
+ import path3 from "path";
2001
2051
  import os from "os";
2002
2052
  var migrations = [
2003
2053
  // v0.6.0 is the baseline - no migrations needed
@@ -2005,9 +2055,9 @@ var migrations = [
2005
2055
  version: "0.6.1",
2006
2056
  description: "Add global gitignore for .iloom/settings.local.json",
2007
2057
  migrate: async () => {
2008
- const globalIgnorePath = path4.join(os.homedir(), ".config", "git", "ignore");
2058
+ const globalIgnorePath = path3.join(os.homedir(), ".config", "git", "ignore");
2009
2059
  const pattern = "**/.iloom/settings.local.json";
2010
- await fs.ensureDir(path4.dirname(globalIgnorePath));
2060
+ await fs.ensureDir(path3.dirname(globalIgnorePath));
2011
2061
  let content = "";
2012
2062
  try {
2013
2063
  content = await fs.readFile(globalIgnorePath, "utf-8");
@@ -2025,9 +2075,9 @@ var migrations = [
2025
2075
  version: "0.7.1",
2026
2076
  description: "Add global gitignore for .iloom/package.iloom.local.json",
2027
2077
  migrate: async () => {
2028
- const globalIgnorePath = path4.join(os.homedir(), ".config", "git", "ignore");
2078
+ const globalIgnorePath = path3.join(os.homedir(), ".config", "git", "ignore");
2029
2079
  const pattern = "**/.iloom/package.iloom.local.json";
2030
- await fs.ensureDir(path4.dirname(globalIgnorePath));
2080
+ await fs.ensureDir(path3.dirname(globalIgnorePath));
2031
2081
  let content = "";
2032
2082
  try {
2033
2083
  content = await fs.readFile(globalIgnorePath, "utf-8");
@@ -2051,7 +2101,7 @@ var VersionMigrationManager = class {
2051
2101
  }
2052
2102
  // Return path to migration state file
2053
2103
  getMigrationStatePath() {
2054
- return path5.join(os2.homedir(), ".config", "iloom-ai", "migration-state.json");
2104
+ return path4.join(os2.homedir(), ".config", "iloom-ai", "migration-state.json");
2055
2105
  }
2056
2106
  // Get effective version, respecting ILOOM_VERSION_OVERRIDE env var
2057
2107
  // packageVersion is the version from package.json passed by caller
@@ -2091,7 +2141,7 @@ var VersionMigrationManager = class {
2091
2141
  async saveMigrationState(version, newFailures = []) {
2092
2142
  const statePath = this.getMigrationStatePath();
2093
2143
  try {
2094
- await fs2.ensureDir(path5.dirname(statePath));
2144
+ await fs2.ensureDir(path4.dirname(statePath));
2095
2145
  const existingState = await this.loadFullMigrationState();
2096
2146
  const existingFailures = existingState.failedMigrations ?? [];
2097
2147
  const allFailures = [...existingFailures];
@@ -2195,7 +2245,7 @@ program.name("iloom").description(packageJson.description).version(packageJson.v
2195
2245
  } catch {
2196
2246
  }
2197
2247
  try {
2198
- const { SettingsMigrationManager } = await import("./SettingsMigrationManager-KZKDG66H.js");
2248
+ const { SettingsMigrationManager } = await import("./SettingsMigrationManager-LEBMJP3B.js");
2199
2249
  const migrationManager = new SettingsMigrationManager();
2200
2250
  await migrationManager.migrateSettingsIfNeeded();
2201
2251
  } catch (error) {
@@ -2332,18 +2382,18 @@ async function autoLaunchInitForMultipleRemotes() {
2332
2382
  logger.info("iloom will now launch an interactive configuration session with Claude");
2333
2383
  logger.info("to help you select which remote to use for GitHub operations.");
2334
2384
  logger.info("");
2335
- const { waitForKeypress: waitForKeypress2 } = await import("./prompt-3SAZYRUN.js");
2385
+ const { waitForKeypress: waitForKeypress2 } = await import("./prompt-ONNPSNKM.js");
2336
2386
  await waitForKeypress2("Press any key to start configuration...");
2337
2387
  logger.info("");
2338
2388
  try {
2339
- const { InitCommand: InitCommand2 } = await import("./init-S6IEGRSX.js");
2340
- const initCommand = new InitCommand2();
2389
+ const { InitCommand } = await import("./init-MZBIXQ7V.js");
2390
+ const initCommand = new InitCommand();
2341
2391
  const customInitialMessage = "Help me configure which git remote iloom should use for GitHub operations. I have multiple remotes and need to select the correct one.";
2342
2392
  await initCommand.execute(customInitialMessage);
2343
2393
  logger.info("");
2344
2394
  logger.info("Configuration complete! Continuing with your original command...");
2345
2395
  logger.info("");
2346
- const { SettingsManager: SettingsManager2 } = await import("./SettingsManager-YU4VYPTW.js");
2396
+ const { SettingsManager: SettingsManager2 } = await import("./SettingsManager-VCVLL32H.js");
2347
2397
  const settingsManager = new SettingsManager2();
2348
2398
  const settings = await settingsManager.loadSettings();
2349
2399
  const { hasMultipleRemotes: hasMultipleRemotes2 } = await import("./remote-IJAMOEAP.js");
@@ -2373,7 +2423,7 @@ program.command("start").alias("new").alias("create").alias("up").description("C
2373
2423
  logger.error("JSON mode requires identifier argument");
2374
2424
  process.exit(1);
2375
2425
  }
2376
- const { promptInput } = await import("./prompt-3SAZYRUN.js");
2426
+ const { promptInput } = await import("./prompt-ONNPSNKM.js");
2377
2427
  finalIdentifier = await promptInput("Enter issue number, PR number (pr/123), or branch name");
2378
2428
  if (!(finalIdentifier == null ? void 0 : finalIdentifier.trim())) {
2379
2429
  logger.error("Identifier is required");
@@ -2437,7 +2487,7 @@ program.command("add-issue").alias("a").description("Create and enhance GitHub i
2437
2487
  });
2438
2488
  program.command("feedback").alias("f").description("Submit feedback/bug report to iloom-cli repository").argument("<description>", "Feedback title (>30 chars, >2 spaces; or any non-empty text when --body provided)").option("--body <text>", "Body text for feedback (added after diagnostics)").action(async (description, options) => {
2439
2489
  try {
2440
- const { FeedbackCommand } = await import("./feedback-ZLAX3BVL.js");
2490
+ const { FeedbackCommand } = await import("./feedback-HZVLOTQJ.js");
2441
2491
  const command = new FeedbackCommand();
2442
2492
  const feedbackOptions = {};
2443
2493
  if (options.body !== void 0) {
@@ -2522,7 +2572,7 @@ program.command("finish").alias("dn").description("Merge work and cleanup worksp
2522
2572
  program.command("commit").alias("c").description("Commit all uncommitted files with issue reference").option("-m, --message <text>", "Custom commit message (skip Claude generation)").option("--fixes", 'Use "Fixes #N" trailer instead of "Refs #N" (closes issue)').option("--no-review", "Skip commit message review prompt").option("--json", "Output result as JSON (implies --no-review)").option("--wip-commit", "Quick WIP commit: skip validations and pre-commit hooks").action(async (options) => {
2523
2573
  const executeAction = async () => {
2524
2574
  try {
2525
- const { CommitCommand } = await import("./commit-3ULFKXNB.js");
2575
+ const { CommitCommand } = await import("./commit-534QIRHY.js");
2526
2576
  const command = new CommitCommand();
2527
2577
  const noReview = options.review === false || options.json === true;
2528
2578
  const result = await command.execute({
@@ -2557,7 +2607,7 @@ program.command("commit").alias("c").description("Commit all uncommitted files w
2557
2607
  });
2558
2608
  program.command("rebase").description("Rebase current branch on main with Claude-assisted conflict resolution").option("-f, --force", "Skip confirmation prompts").option("-n, --dry-run", "Preview actions without executing").action(async (options) => {
2559
2609
  try {
2560
- const { RebaseCommand } = await import("./rebase-RLEVFHWN.js");
2610
+ const { RebaseCommand } = await import("./rebase-7YS3N274.js");
2561
2611
  const command = new RebaseCommand();
2562
2612
  await command.execute(options);
2563
2613
  } catch (error) {
@@ -2566,12 +2616,12 @@ program.command("rebase").description("Rebase current branch on main with Claude
2566
2616
  }
2567
2617
  });
2568
2618
  program.command("spin").alias("ignite").description("Launch Claude with auto-detected workspace context").addOption(
2569
- new Option("--one-shot <mode>", "One-shot automation mode").choices(["default", "noReview", "bypassPermissions"]).default("default")
2619
+ new Option("--one-shot <mode>", "One-shot automation mode").choices(["default", "noReview", "bypassPermissions"])
2570
2620
  ).action(async (options) => {
2571
2621
  try {
2572
- const { IgniteCommand } = await import("./ignite-HA2OJF6Z.js");
2622
+ const { IgniteCommand } = await import("./ignite-ZO7SGUKP.js");
2573
2623
  const command = new IgniteCommand();
2574
- await command.execute(options.oneShot ?? "default");
2624
+ await command.execute(options.oneShot);
2575
2625
  } catch (error) {
2576
2626
  logger.error(`Failed to spin up loom: ${error instanceof Error ? error.message : "Unknown error"}`);
2577
2627
  process.exit(1);
@@ -2580,7 +2630,7 @@ program.command("spin").alias("ignite").description("Launch Claude with auto-det
2580
2630
  program.command("open").description("Open workspace in browser or run CLI tool").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").allowUnknownOption().action(async (identifier, _options, command) => {
2581
2631
  try {
2582
2632
  const args = (command == null ? void 0 : command.args) ? command.args.slice(identifier ? 1 : 0) : [];
2583
- const { OpenCommand } = await import("./open-IN3LUZXX.js");
2633
+ const { OpenCommand } = await import("./open-2LPZ7XXW.js");
2584
2634
  const cmd = new OpenCommand();
2585
2635
  const input = identifier ? { identifier, args } : { args };
2586
2636
  await cmd.execute(input);
@@ -2592,7 +2642,7 @@ program.command("open").description("Open workspace in browser or run CLI tool")
2592
2642
  program.command("run").description("Run CLI tool or open workspace in browser").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").allowUnknownOption().action(async (identifier, _options, command) => {
2593
2643
  try {
2594
2644
  const args = (command == null ? void 0 : command.args) ? command.args.slice(identifier ? 1 : 0) : [];
2595
- const { RunCommand } = await import("./run-QEIS2EH2.js");
2645
+ const { RunCommand } = await import("./run-XPGCMFFO.js");
2596
2646
  const cmd = new RunCommand();
2597
2647
  const input = identifier ? { identifier, args } : { args };
2598
2648
  await cmd.execute(input);
@@ -2603,7 +2653,7 @@ program.command("run").description("Run CLI tool or open workspace in browser").
2603
2653
  });
2604
2654
  program.command("dev-server").alias("dev").description("Start dev server for workspace (foreground)").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").option("--json", "Output as JSON").action(async (identifier, options) => {
2605
2655
  try {
2606
- const { DevServerCommand } = await import("./dev-server-OAP3RZC6.js");
2656
+ const { DevServerCommand } = await import("./dev-server-TYYJM3XA.js");
2607
2657
  const cmd = new DevServerCommand();
2608
2658
  await cmd.execute({ identifier, json: options == null ? void 0 : options.json });
2609
2659
  } catch (error) {
@@ -2613,7 +2663,7 @@ program.command("dev-server").alias("dev").description("Start dev server for wor
2613
2663
  });
2614
2664
  program.command("shell").alias("terminal").description("Open interactive shell with workspace environment").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").action(async (identifier) => {
2615
2665
  try {
2616
- const { ShellCommand } = await import("./shell-2NNSIU34.js");
2666
+ const { ShellCommand } = await import("./shell-2SPM3Z5O.js");
2617
2667
  const cmd = new ShellCommand();
2618
2668
  await cmd.execute({ identifier });
2619
2669
  } catch (error) {
@@ -2623,7 +2673,7 @@ program.command("shell").alias("terminal").description("Open interactive shell w
2623
2673
  });
2624
2674
  program.command("build").description("Run the build script").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").action(async (identifier) => {
2625
2675
  try {
2626
- const { BuildCommand } = await import("./build-HQ5HGA3T.js");
2676
+ const { BuildCommand } = await import("./build-H4DK3DMQ.js");
2627
2677
  const cmd = new BuildCommand();
2628
2678
  await cmd.execute(identifier ? { identifier } : {});
2629
2679
  } catch (error) {
@@ -2633,7 +2683,7 @@ program.command("build").description("Run the build script").argument("[identifi
2633
2683
  });
2634
2684
  program.command("lint").description("Run the lint script").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").action(async (identifier) => {
2635
2685
  try {
2636
- const { LintCommand } = await import("./lint-HAVU4U34.js");
2686
+ const { LintCommand } = await import("./lint-MDVUV3W2.js");
2637
2687
  const cmd = new LintCommand();
2638
2688
  await cmd.execute(identifier ? { identifier } : {});
2639
2689
  } catch (error) {
@@ -2643,7 +2693,7 @@ program.command("lint").description("Run the lint script").argument("[identifier
2643
2693
  });
2644
2694
  program.command("test").description("Run the test script").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").action(async (identifier) => {
2645
2695
  try {
2646
- const { TestCommand } = await import("./test-75WAA6DU.js");
2696
+ const { TestCommand } = await import("./test-N2725YRI.js");
2647
2697
  const cmd = new TestCommand();
2648
2698
  await cmd.execute(identifier ? { identifier } : {});
2649
2699
  } catch (error) {
@@ -2653,7 +2703,7 @@ program.command("test").description("Run the test script").argument("[identifier
2653
2703
  });
2654
2704
  program.command("compile").alias("typecheck").description("Run the compile or typecheck script (prefers compile if both exist)").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").action(async (identifier) => {
2655
2705
  try {
2656
- const { CompileCommand } = await import("./compile-CT7IR7O2.js");
2706
+ const { CompileCommand } = await import("./compile-ZOAODFN2.js");
2657
2707
  const cmd = new CompileCommand();
2658
2708
  await cmd.execute(identifier ? { identifier } : {});
2659
2709
  } catch (error) {
@@ -2664,7 +2714,7 @@ program.command("compile").alias("typecheck").description("Run the compile or ty
2664
2714
  program.command("cleanup").alias("remove").alias("clean").description("Remove workspaces").argument("[identifier]", "Branch name or issue number to cleanup (auto-detected)").option("-l, --list", "List all worktrees").option("-a, --all", "Remove all worktrees (interactive confirmation)").option("-i, --issue <number>", "Cleanup by issue number", parseInt).option("-f, --force", "Skip confirmations and force removal").option("--dry-run", "Show what would be done without doing it").option("--json", "Output result as JSON").option("--defer <ms>", "Wait specified milliseconds before cleanup", parseInt).action(async (identifier, options) => {
2665
2715
  const executeAction = async () => {
2666
2716
  try {
2667
- const { CleanupCommand } = await import("./cleanup-IO4KV2DL.js");
2717
+ const { CleanupCommand } = await import("./cleanup-OGE7V7AD.js");
2668
2718
  const command = new CleanupCommand();
2669
2719
  const input = {
2670
2720
  options: options ?? {}
@@ -2693,7 +2743,7 @@ program.command("cleanup").alias("remove").alias("clean").description("Remove wo
2693
2743
  await executeAction();
2694
2744
  }
2695
2745
  });
2696
- program.command("list").description("Show active workspaces").option("--json", "Output as JSON").option("--finished", "Show only finished looms (sorted by finish time, latest first)").option("--all", "Show both active and finished looms").option("--global", "Show looms from all projects (default: current project only)").action(async (options) => {
2746
+ program.command("list").description("Show active workspaces").option("--json", "Output as JSON").option("--finished", "Show only finished looms (sorted by finish time, latest first)").option("--all", "Show both active and finished looms").option("--global", "Show looms from all projects (default: current project only)").option("--children", "Fetch and display child issues and child looms for each parent loom").action(async (options) => {
2697
2747
  try {
2698
2748
  const manager = new GitWorktreeManager();
2699
2749
  const metadataManager = new MetadataManager();
@@ -2792,7 +2842,9 @@ program.command("list").description("Show active workspaces").option("--json", "
2792
2842
  issueUrls: loom.issueUrls ?? {},
2793
2843
  prUrls: loom.prUrls ?? {},
2794
2844
  status: "active",
2795
- finishedAt: null
2845
+ finishedAt: null,
2846
+ isChildLoom: loom.parentLoom != null,
2847
+ parentLoom: loom.parentLoom ?? null
2796
2848
  }));
2797
2849
  } else {
2798
2850
  activeJson = formatLoomsForJson(worktrees, mainWorktreePath, metadata).map((loom) => ({
@@ -2813,6 +2865,47 @@ program.command("list").description("Show active workspaces").option("--json", "
2813
2865
  (loom) => loom.projectPath == null || loom.projectPath === currentProjectPath
2814
2866
  );
2815
2867
  }
2868
+ if (options.children) {
2869
+ const settingsManager = new SettingsManager();
2870
+ const settings = await settingsManager.loadSettings();
2871
+ const activeChildrenResults = await Promise.allSettled(
2872
+ activeJson.map(async (loom) => {
2873
+ const index = activeJson.indexOf(loom);
2874
+ const loomMetadata = options.global ? globalActiveLooms.find((m) => m.branchName === loom.branch) : metadata.get(loom.worktreePath ?? "");
2875
+ if (!loomMetadata) {
2876
+ return { index, children: null };
2877
+ }
2878
+ const children = await assembleChildrenData(loomMetadata, metadataManager, settings);
2879
+ return { index, children };
2880
+ })
2881
+ );
2882
+ for (const result of activeChildrenResults) {
2883
+ if (result.status === "fulfilled" && result.value.children) {
2884
+ const loom = activeJson[result.value.index];
2885
+ if (loom) {
2886
+ loom.children = result.value.children;
2887
+ }
2888
+ }
2889
+ }
2890
+ const finishedChildrenResults = await Promise.allSettled(
2891
+ finishedJson.map(async (loom, index) => {
2892
+ const loomMetadata = finishedLooms.find((m) => m.branchName === loom.branch);
2893
+ if (!loomMetadata) {
2894
+ return { index, children: null };
2895
+ }
2896
+ const children = await assembleChildrenData(loomMetadata, metadataManager, settings);
2897
+ return { index, children };
2898
+ })
2899
+ );
2900
+ for (const result of finishedChildrenResults) {
2901
+ if (result.status === "fulfilled" && result.value.children) {
2902
+ const loom = finishedJson[result.value.index];
2903
+ if (loom) {
2904
+ loom.children = result.value.children;
2905
+ }
2906
+ }
2907
+ }
2908
+ }
2816
2909
  const allLooms = [...activeJson, ...finishedJson];
2817
2910
  console.log(JSON.stringify(allLooms, null, 2));
2818
2911
  return;
@@ -2829,11 +2922,20 @@ program.command("list").description("Show active workspaces").option("--json", "
2829
2922
  }
2830
2923
  return;
2831
2924
  }
2925
+ let textSettings = null;
2926
+ if (options.children) {
2927
+ const settingsManager = new SettingsManager();
2928
+ textSettings = await settingsManager.loadSettings();
2929
+ }
2832
2930
  if (showActive && hasActive) {
2833
2931
  logger.info("Active workspaces:");
2834
2932
  if (options.global) {
2835
2933
  for (const loom of filteredGlobalActiveLooms) {
2836
- logger.info(` ${loom.branchName ?? "unknown"}`);
2934
+ if (loom.parentLoom) {
2935
+ logger.info(` ${loom.branchName ?? "unknown"} (Child of: ${loom.parentLoom.branchName})`);
2936
+ } else {
2937
+ logger.info(` ${loom.branchName ?? "unknown"}`);
2938
+ }
2837
2939
  if (loom.description) {
2838
2940
  logger.info(` Description: ${loom.description}`);
2839
2941
  }
@@ -2843,17 +2945,43 @@ program.command("list").description("Show active workspaces").option("--json", "
2843
2945
  if (loom.projectPath) {
2844
2946
  logger.info(` Project: ${loom.projectPath}`);
2845
2947
  }
2948
+ if (options.children && textSettings) {
2949
+ const childrenData = await assembleChildrenData(loom, metadataManager, textSettings);
2950
+ if (childrenData && (childrenData.summary.totalIssues > 0 || childrenData.summary.totalLooms > 0)) {
2951
+ logger.info(` Child Issues: ${childrenData.summary.totalIssues} (${childrenData.summary.issuesWithLooms} with active looms)`);
2952
+ for (const issue of childrenData.issues) {
2953
+ if (!issue.hasActiveLoom) {
2954
+ logger.info(` [No loom] #${issue.id} - ${issue.title} (${issue.state})`);
2955
+ }
2956
+ }
2957
+ }
2958
+ }
2846
2959
  }
2847
2960
  } else {
2848
2961
  for (const worktree of filteredWorktrees) {
2849
2962
  const formatted = manager.formatWorktree(worktree);
2850
2963
  const loomMetadata = metadata.get(worktree.path);
2851
- logger.info(` ${formatted.title}`);
2964
+ if (loomMetadata == null ? void 0 : loomMetadata.parentLoom) {
2965
+ logger.info(` ${formatted.title} (Child of: ${loomMetadata.parentLoom.branchName})`);
2966
+ } else {
2967
+ logger.info(` ${formatted.title}`);
2968
+ }
2852
2969
  if (loomMetadata == null ? void 0 : loomMetadata.description) {
2853
2970
  logger.info(` Description: ${loomMetadata.description}`);
2854
2971
  }
2855
2972
  logger.info(` Path: ${formatted.path}`);
2856
2973
  logger.info(` Commit: ${formatted.commit}`);
2974
+ if (options.children && textSettings && loomMetadata) {
2975
+ const childrenData = await assembleChildrenData(loomMetadata, metadataManager, textSettings);
2976
+ if (childrenData && (childrenData.summary.totalIssues > 0 || childrenData.summary.totalLooms > 0)) {
2977
+ logger.info(` Child Issues: ${childrenData.summary.totalIssues} (${childrenData.summary.issuesWithLooms} with active looms)`);
2978
+ for (const issue of childrenData.issues) {
2979
+ if (!issue.hasActiveLoom) {
2980
+ logger.info(` [No loom] #${issue.id} - ${issue.title} (${issue.state})`);
2981
+ }
2982
+ }
2983
+ }
2984
+ }
2857
2985
  }
2858
2986
  }
2859
2987
  }
@@ -2863,13 +2991,28 @@ program.command("list").description("Show active workspaces").option("--json", "
2863
2991
  }
2864
2992
  logger.info("Finished looms:");
2865
2993
  for (const loom of filteredFinishedLooms) {
2866
- logger.info(` ${loom.branchName ?? "unknown"}`);
2994
+ if (loom.parentLoom) {
2995
+ logger.info(` ${loom.branchName ?? "unknown"} (Child of: ${loom.parentLoom.branchName})`);
2996
+ } else {
2997
+ logger.info(` ${loom.branchName ?? "unknown"}`);
2998
+ }
2867
2999
  if (loom.description) {
2868
3000
  logger.info(` Description: ${loom.description}`);
2869
3001
  }
2870
3002
  if (loom.finishedAt) {
2871
3003
  logger.info(` Finished: ${new Date(loom.finishedAt).toLocaleString()}`);
2872
3004
  }
3005
+ if (options.children && textSettings) {
3006
+ const childrenData = await assembleChildrenData(loom, metadataManager, textSettings);
3007
+ if (childrenData && (childrenData.summary.totalIssues > 0 || childrenData.summary.totalLooms > 0)) {
3008
+ logger.info(` Child Issues: ${childrenData.summary.totalIssues} (${childrenData.summary.issuesWithLooms} with active looms)`);
3009
+ for (const issue of childrenData.issues) {
3010
+ if (!issue.hasActiveLoom) {
3011
+ logger.info(` [No loom] #${issue.id} - ${issue.title} (${issue.state})`);
3012
+ }
3013
+ }
3014
+ }
3015
+ }
2873
3016
  }
2874
3017
  }
2875
3018
  } catch (error) {
@@ -2887,7 +3030,7 @@ program.command("list").description("Show active workspaces").option("--json", "
2887
3030
  });
2888
3031
  program.command("projects").description("List configured iloom projects").option("--json", "Output as JSON (default behavior)").action(async (options) => {
2889
3032
  try {
2890
- const { ProjectsCommand } = await import("./projects-CTRTTMSK.js");
3033
+ const { ProjectsCommand } = await import("./projects-325GEEGJ.js");
2891
3034
  const command = new ProjectsCommand();
2892
3035
  const result = await command.execute(options);
2893
3036
  console.log(JSON.stringify(result, null, 2));
@@ -2898,8 +3041,8 @@ program.command("projects").description("List configured iloom projects").option
2898
3041
  });
2899
3042
  program.command("init").alias("config").description("Initialize iloom configuration").argument("[prompt]", 'Custom initial message to send to Claude (defaults to "Help me configure iloom settings.")').action(async (prompt) => {
2900
3043
  try {
2901
- const { InitCommand: InitCommand2 } = await import("./init-S6IEGRSX.js");
2902
- const command = new InitCommand2();
3044
+ const { InitCommand } = await import("./init-MZBIXQ7V.js");
3045
+ const command = new InitCommand();
2903
3046
  const trimmedPrompt = prompt == null ? void 0 : prompt.trim();
2904
3047
  const customPrompt = trimmedPrompt && trimmedPrompt.length > 0 ? trimmedPrompt : void 0;
2905
3048
  await command.execute(customPrompt);
@@ -2908,9 +3051,19 @@ program.command("init").alias("config").description("Initialize iloom configurat
2908
3051
  process.exit(1);
2909
3052
  }
2910
3053
  });
3054
+ program.command("plan").description("Launch interactive planning session with Architect persona").argument("[prompt]", "Initial planning prompt or topic").option("--model <model>", "Model to use (default: opus)").option("--yolo", "Enable autonomous mode - Claude proceeds without user interaction").option("--planner <provider>", "AI provider for planning: claude, gemini, codex (default: claude)").option("--reviewer <provider>", "AI provider for review: claude, gemini, codex, none (default: none)").action(async (prompt, options) => {
3055
+ try {
3056
+ const { PlanCommand } = await import("./plan-PIME6UNY.js");
3057
+ const command = new PlanCommand();
3058
+ await command.execute(prompt, options == null ? void 0 : options.model, options == null ? void 0 : options.yolo, options == null ? void 0 : options.planner, options == null ? void 0 : options.reviewer);
3059
+ } catch (error) {
3060
+ logger.error(`Planning session failed: ${error instanceof Error ? error.message : "Unknown error"}`);
3061
+ process.exit(1);
3062
+ }
3063
+ });
2911
3064
  program.command("contribute").description("Set up local development environment for contributing to a GitHub project").argument("[repository]", "GitHub repository (owner/repo, github.com/owner/repo, or full URL). Defaults to iloom-ai/iloom-cli").action(async (repository) => {
2912
3065
  try {
2913
- const { ContributeCommand } = await import("./contribute-GXKOIA42.js");
3066
+ const { ContributeCommand } = await import("./contribute-7USRBWRM.js");
2914
3067
  const command = new ContributeCommand();
2915
3068
  await command.execute(repository);
2916
3069
  } catch (error) {
@@ -2930,7 +3083,7 @@ program.command("update").description("Update iloom-cli to the latest version").
2930
3083
  });
2931
3084
  program.command("test-github").description("Test GitHub integration (Issue #3)").argument("<identifier>", "Issue number or PR number").option("--no-claude", "Skip Claude for branch name generation").action(async (identifier, options) => {
2932
3085
  try {
2933
- const { GitHubService: GitHubService2 } = await import("./GitHubService-O7U4UQ7N.js");
3086
+ const { GitHubService: GitHubService2 } = await import("./GitHubService-ACZVNTJE.js");
2934
3087
  const { DefaultBranchNamingService: DefaultBranchNamingService2 } = await import("./BranchNamingService-AO7BPIUJ.js");
2935
3088
  logger.info("Testing GitHub Integration\n");
2936
3089
  const service = new GitHubService2();
@@ -2990,9 +3143,9 @@ program.command("test-github").description("Test GitHub integration (Issue #3)")
2990
3143
  program.command("test-claude").description("Test Claude integration (Issue #10)").option("--detect", "Test Claude CLI detection").option("--version", "Get Claude CLI version").option("--branch <title>", "Test branch name generation with given title").option("--issue <number>", "Issue number for branch generation", "123").option("--launch <prompt>", "Launch Claude with a prompt (headless)").option("--interactive", "Launch Claude interactively (requires --launch)").option("--template <name>", "Test template loading").action(async (options) => {
2991
3144
  try {
2992
3145
  const { detectClaudeCli, getClaudeVersion, generateBranchName, launchClaude } = await import("./claude-V4HRPR4Z.js");
2993
- const { PromptTemplateManager } = await import("./PromptTemplateManager-7L3HJQQU.js");
2994
- const { ClaudeService } = await import("./ClaudeService-NDVFQRKC.js");
2995
- const { ClaudeContextManager: ClaudeContextManager2 } = await import("./ClaudeContextManager-Y2YJC6BU.js");
3146
+ const { PromptTemplateManager } = await import("./PromptTemplateManager-OUYDHOPI.js");
3147
+ const { ClaudeService } = await import("./ClaudeService-FKPOQRA4.js");
3148
+ const { ClaudeContextManager: ClaudeContextManager2 } = await import("./ClaudeContextManager-RDP6CLK6.js");
2996
3149
  logger.info("Testing Claude Integration\n");
2997
3150
  if (options.detect) {
2998
3151
  logger.info("Detecting Claude CLI...");
@@ -3127,7 +3280,7 @@ program.command("test-claude").description("Test Claude integration (Issue #10)"
3127
3280
  });
3128
3281
  program.command("test-webserver").description("Test if a web server is running on a workspace port").argument("<issue-number>", "Issue number (port will be calculated as 3000 + issue number)", parseInt).option("--kill", "Kill the web server if detected").action(async (issueNumber, options) => {
3129
3282
  try {
3130
- const { TestWebserverCommand } = await import("./test-webserver-J6SMNLU2.js");
3283
+ const { TestWebserverCommand } = await import("./test-webserver-XLJ2TZFP.js");
3131
3284
  const command = new TestWebserverCommand();
3132
3285
  await command.execute({ issueNumber, options });
3133
3286
  } catch (error) {
@@ -3140,7 +3293,7 @@ program.command("test-webserver").description("Test if a web server is running o
3140
3293
  });
3141
3294
  program.command("test-git").description("Test Git integration - findMainWorktreePath() function (reads .iloom/settings.json)").action(async () => {
3142
3295
  try {
3143
- const { TestGitCommand } = await import("./test-git-E2BLXR6M.js");
3296
+ const { TestGitCommand } = await import("./test-git-ZPSPA2TP.js");
3144
3297
  const command = new TestGitCommand();
3145
3298
  await command.execute();
3146
3299
  } catch (error) {
@@ -3166,7 +3319,7 @@ program.command("test-tabs").description("Test iTerm2 dual tab functionality - o
3166
3319
  });
3167
3320
  program.command("test-prefix").description("Test worktree prefix configuration - preview worktree paths (reads .iloom/settings.json)").action(async () => {
3168
3321
  try {
3169
- const { TestPrefixCommand } = await import("./test-prefix-A7JGGYAA.js");
3322
+ const { TestPrefixCommand } = await import("./test-prefix-6DLB2BHE.js");
3170
3323
  const command = new TestPrefixCommand();
3171
3324
  await command.execute();
3172
3325
  } catch (error) {
@@ -3180,7 +3333,7 @@ program.command("test-prefix").description("Test worktree prefix configuration -
3180
3333
  program.command("summary").description("Generate Claude session summary for a loom").argument("[identifier]", "Issue number, PR number (pr/123), or branch name (auto-detected if omitted)").option("--with-comment", "Post summary as a comment to the issue/PR").option("--json", "Output result as JSON").action(async (identifier, options) => {
3181
3334
  const executeAction = async () => {
3182
3335
  try {
3183
- const { SummaryCommand } = await import("./summary-MPOOQIOX.js");
3336
+ const { SummaryCommand } = await import("./summary-C5VVSJAJ.js");
3184
3337
  const command = new SummaryCommand();
3185
3338
  const result = await command.execute({ identifier, options });
3186
3339
  if (options.json && result) {
@@ -3209,7 +3362,7 @@ program.command("summary").description("Generate Claude session summary for a lo
3209
3362
  program.command("recap").description("Get recap for a loom (defaults to current directory)").argument("[identifier]", "Issue number, PR number (pr/123), or branch name (auto-detected if omitted)").option("--json", "Output as JSON with filePath for file watching").action(async (identifier, options) => {
3210
3363
  const executeAction = async () => {
3211
3364
  try {
3212
- const { RecapCommand } = await import("./recap-ZKGHZCX6.js");
3365
+ const { RecapCommand } = await import("./recap-GSXFEOD6.js");
3213
3366
  const command = new RecapCommand();
3214
3367
  const result = await command.execute({ identifier, json: options.json });
3215
3368
  if (options.json && result) {
@@ -3238,8 +3391,8 @@ program.command("recap").description("Get recap for a loom (defaults to current
3238
3391
  program.command("test-neon").description("Test Neon integration and debug configuration").action(async () => {
3239
3392
  var _a;
3240
3393
  try {
3241
- const { SettingsManager: SettingsManager2 } = await import("./SettingsManager-YU4VYPTW.js");
3242
- const { createNeonProviderFromSettings: createNeonProviderFromSettings2 } = await import("./neon-helpers-3KBC4A3Y.js");
3394
+ const { SettingsManager: SettingsManager2 } = await import("./SettingsManager-VCVLL32H.js");
3395
+ const { createNeonProviderFromSettings: createNeonProviderFromSettings2 } = await import("./neon-helpers-VVFFTLXE.js");
3243
3396
  logger.info("Testing Neon Integration\n");
3244
3397
  logger.info("1. Settings Configuration:");
3245
3398
  const settingsManager = new SettingsManager2();