@iloom/cli 0.7.5 → 0.8.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 (171) 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-6ZJZRG5Z.js → PRManager-XLTVG6YG.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 +720 -0
  14. package/dist/agents/iloom-issue-analyze-and-plan.md +1 -1
  15. package/dist/agents/iloom-issue-analyzer.md +1 -1
  16. package/dist/agents/iloom-issue-complexity-evaluator.md +1 -1
  17. package/dist/agents/iloom-issue-enhancer.md +1 -1
  18. package/dist/agents/iloom-issue-implementer.md +1 -1
  19. package/dist/agents/iloom-issue-planner.md +1 -1
  20. package/dist/{build-HQ5HGA3T.js → build-H4DK3DMQ.js} +7 -7
  21. package/dist/{chunk-N7FVXZNI.js → chunk-4BSXZ5YZ.js} +31 -9
  22. package/dist/chunk-4BSXZ5YZ.js.map +1 -0
  23. package/dist/{chunk-VYKKWU36.js → chunk-4KGRPHM6.js} +3 -3
  24. package/dist/{chunk-CFQVOTHO.js → chunk-52MVUK5V.js} +2 -2
  25. package/dist/{chunk-TIYJEEVO.js → chunk-66QOCD5N.js} +1 -1
  26. package/dist/chunk-66QOCD5N.js.map +1 -0
  27. package/dist/chunk-7JDMYTFZ.js +251 -0
  28. package/dist/chunk-7JDMYTFZ.js.map +1 -0
  29. package/dist/{chunk-7LSSNB7Y.js → chunk-7ZEHSSUP.js} +2 -2
  30. package/dist/chunk-A4UQY3M2.js +75 -0
  31. package/dist/chunk-A4UQY3M2.js.map +1 -0
  32. package/dist/{chunk-KSXA2NOJ.js → chunk-AZH27CPV.js} +10 -9
  33. package/dist/chunk-AZH27CPV.js.map +1 -0
  34. package/dist/{chunk-ELJKYFSH.js → chunk-BCQDYAOJ.js} +4 -4
  35. package/dist/{chunk-F2PWIRV4.js → chunk-BYUMEDDD.js} +2 -2
  36. package/dist/{chunk-CAXFWFV6.js → chunk-ECP77QGE.js} +4 -4
  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-LZBSLO6S.js → chunk-L4CN7YQT.js} +381 -8
  44. package/dist/chunk-L4CN7YQT.js.map +1 -0
  45. package/dist/{chunk-HBJITKSZ.js → chunk-LFVRG6UU.js} +159 -3
  46. package/dist/chunk-LFVRG6UU.js.map +1 -0
  47. package/dist/{chunk-64HCHVJM.js → chunk-PLI3JQWT.js} +2 -2
  48. package/dist/{chunk-USJSNHGG.js → chunk-PVW6JE7E.js} +3 -3
  49. package/dist/{chunk-3K3WY3BN.js → chunk-QJX6ICWY.js} +4 -4
  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-NEPH2O4C.js → chunk-SSASIBDJ.js} +3 -3
  53. package/dist/{chunk-GCPAZSGV.js → chunk-THS5L54H.js} +150 -3
  54. package/dist/chunk-THS5L54H.js.map +1 -0
  55. package/dist/{chunk-5V74K5ZA.js → chunk-TVH67KEO.js} +25 -2
  56. package/dist/chunk-TVH67KEO.js.map +1 -0
  57. package/dist/{chunk-ENMTWE74.js → chunk-VZYSM7N7.js} +2 -2
  58. package/dist/{chunk-77VLG2KP.js → chunk-WNXYC7J4.js} +18 -16
  59. package/dist/chunk-WNXYC7J4.js.map +1 -0
  60. package/dist/{chunk-WZYBHD7P.js → chunk-XHNACIHO.js} +2 -2
  61. package/dist/{chunk-XAMBIVXE.js → chunk-XJHQVOT6.js} +2 -2
  62. package/dist/{chunk-O36JLYNW.js → chunk-XU5A6BWA.js} +4 -7
  63. package/dist/chunk-XU5A6BWA.js.map +1 -0
  64. package/dist/{chunk-TB6475EW.js → chunk-YAVVDZVF.js} +3 -3
  65. package/dist/{cleanup-DB7EFBF3.js → cleanup-25PCP2EM.js} +16 -16
  66. package/dist/cli.js +107 -157
  67. package/dist/cli.js.map +1 -1
  68. package/dist/{commit-NGMDWWAP.js → commit-SS77KUNX.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-CPXPZ4ZD.js} +85 -25
  76. package/dist/ignite-CPXPZ4ZD.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 +832 -7
  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-N3YDCOIV.js +371 -0
  87. package/dist/plan-N3YDCOIV.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 +57 -1
  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-2KLNHVTN.js → summary-5UWNLAI5.js} +43 -12
  101. package/dist/summary-5UWNLAI5.js.map +1 -0
  102. package/dist/{test-75WAA6DU.js → test-N2725YRI.js} +7 -7
  103. package/dist/{test-git-E2BLXR6M.js → test-git-ZPSPA2TP.js} +4 -4
  104. package/dist/{test-prefix-A7JGGYAA.js → test-prefix-6DLB2BHE.js} +4 -4
  105. package/dist/{test-webserver-J6SMNLU2.js → test-webserver-XLJ2TZFP.js} +6 -6
  106. package/package.json +1 -1
  107. package/dist/GitHubService-O7U4UQ7N.js +0 -12
  108. package/dist/agents/iloom-issue-reviewer.md +0 -139
  109. package/dist/chunk-5V74K5ZA.js.map +0 -1
  110. package/dist/chunk-77VLG2KP.js.map +0 -1
  111. package/dist/chunk-GCPAZSGV.js.map +0 -1
  112. package/dist/chunk-HBJITKSZ.js.map +0 -1
  113. package/dist/chunk-KSXA2NOJ.js.map +0 -1
  114. package/dist/chunk-LZBSLO6S.js.map +0 -1
  115. package/dist/chunk-N7FVXZNI.js.map +0 -1
  116. package/dist/chunk-O36JLYNW.js.map +0 -1
  117. package/dist/chunk-TIYJEEVO.js.map +0 -1
  118. package/dist/chunk-VWGKGNJP.js.map +0 -1
  119. package/dist/chunk-WFQ5CLTR.js.map +0 -1
  120. package/dist/chunk-ZX3GTM7O.js +0 -119
  121. package/dist/chunk-ZX3GTM7O.js.map +0 -1
  122. package/dist/ignite-HA2OJF6Z.js.map +0 -1
  123. package/dist/init-S6IEGRSX.js +0 -21
  124. package/dist/summary-2KLNHVTN.js.map +0 -1
  125. /package/dist/{ClaudeContextManager-Y2YJC6BU.js.map → ClaudeContextManager-RDP6CLK6.js.map} +0 -0
  126. /package/dist/{ClaudeService-NDVFQRKC.js.map → ClaudeService-FKPOQRA4.js.map} +0 -0
  127. /package/dist/{GitHubService-O7U4UQ7N.js.map → GitHubService-ACZVNTJE.js.map} +0 -0
  128. /package/dist/{LoomLauncher-U2B3VHPC.js.map → LoomLauncher-NHZMEVTQ.js.map} +0 -0
  129. /package/dist/{MetadataManager-XJ2YB762.js.map → MetadataManager-W3C54UYT.js.map} +0 -0
  130. /package/dist/{PRManager-6ZJZRG5Z.js.map → PRManager-XLTVG6YG.js.map} +0 -0
  131. /package/dist/{PromptTemplateManager-7L3HJQQU.js.map → PromptTemplateManager-OUYDHOPI.js.map} +0 -0
  132. /package/dist/{SettingsManager-YU4VYPTW.js.map → SettingsManager-VCVLL32H.js.map} +0 -0
  133. /package/dist/{SettingsMigrationManager-KZKDG66H.js.map → SettingsMigrationManager-LEBMJP3B.js.map} +0 -0
  134. /package/dist/{build-HQ5HGA3T.js.map → build-H4DK3DMQ.js.map} +0 -0
  135. /package/dist/{chunk-VYKKWU36.js.map → chunk-4KGRPHM6.js.map} +0 -0
  136. /package/dist/{chunk-CFQVOTHO.js.map → chunk-52MVUK5V.js.map} +0 -0
  137. /package/dist/{chunk-7LSSNB7Y.js.map → chunk-7ZEHSSUP.js.map} +0 -0
  138. /package/dist/{chunk-ELJKYFSH.js.map → chunk-BCQDYAOJ.js.map} +0 -0
  139. /package/dist/{chunk-F2PWIRV4.js.map → chunk-BYUMEDDD.js.map} +0 -0
  140. /package/dist/{chunk-CAXFWFV6.js.map → chunk-ECP77QGE.js.map} +0 -0
  141. /package/dist/{chunk-ZA575VLF.js.map → chunk-GDS2HXSW.js.map} +0 -0
  142. /package/dist/{chunk-UDRZY65Y.js.map → chunk-HSGZW3ID.js.map} +0 -0
  143. /package/dist/{chunk-64HCHVJM.js.map → chunk-PLI3JQWT.js.map} +0 -0
  144. /package/dist/{chunk-USJSNHGG.js.map → chunk-PVW6JE7E.js.map} +0 -0
  145. /package/dist/{chunk-3K3WY3BN.js.map → chunk-QJX6ICWY.js.map} +0 -0
  146. /package/dist/{chunk-NEPH2O4C.js.map → chunk-SSASIBDJ.js.map} +0 -0
  147. /package/dist/{chunk-ENMTWE74.js.map → chunk-VZYSM7N7.js.map} +0 -0
  148. /package/dist/{chunk-WZYBHD7P.js.map → chunk-XHNACIHO.js.map} +0 -0
  149. /package/dist/{chunk-XAMBIVXE.js.map → chunk-XJHQVOT6.js.map} +0 -0
  150. /package/dist/{chunk-TB6475EW.js.map → chunk-YAVVDZVF.js.map} +0 -0
  151. /package/dist/{cleanup-DB7EFBF3.js.map → cleanup-25PCP2EM.js.map} +0 -0
  152. /package/dist/{commit-NGMDWWAP.js.map → commit-SS77KUNX.js.map} +0 -0
  153. /package/dist/{compile-CT7IR7O2.js.map → compile-ZOAODFN2.js.map} +0 -0
  154. /package/dist/{contribute-GXKOIA42.js.map → contribute-7USRBWRM.js.map} +0 -0
  155. /package/dist/{dev-server-OAP3RZC6.js.map → dev-server-TYYJM3XA.js.map} +0 -0
  156. /package/dist/{feedback-ZLAX3BVL.js.map → feedback-HZVLOTQJ.js.map} +0 -0
  157. /package/dist/{git-ENLT2VNI.js.map → git-GUNOPP4Q.js.map} +0 -0
  158. /package/dist/{init-S6IEGRSX.js.map → init-MZBIXQ7V.js.map} +0 -0
  159. /package/dist/{lint-HAVU4U34.js.map → lint-MDVUV3W2.js.map} +0 -0
  160. /package/dist/{neon-helpers-3KBC4A3Y.js.map → neon-helpers-VVFFTLXE.js.map} +0 -0
  161. /package/dist/{open-IN3LUZXX.js.map → open-2LPZ7XXW.js.map} +0 -0
  162. /package/dist/{projects-CTRTTMSK.js.map → projects-325GEEGJ.js.map} +0 -0
  163. /package/dist/{prompt-3SAZYRUN.js.map → prompt-ONNPSNKM.js.map} +0 -0
  164. /package/dist/{rebase-RLEVFHWN.js.map → rebase-7YS3N274.js.map} +0 -0
  165. /package/dist/{recap-ZKGHZCX6.js.map → recap-GSXFEOD6.js.map} +0 -0
  166. /package/dist/{run-QEIS2EH2.js.map → run-XPGCMFFO.js.map} +0 -0
  167. /package/dist/{shell-2NNSIU34.js.map → shell-2SPM3Z5O.js.map} +0 -0
  168. /package/dist/{test-75WAA6DU.js.map → test-N2725YRI.js.map} +0 -0
  169. /package/dist/{test-git-E2BLXR6M.js.map → test-git-ZPSPA2TP.js.map} +0 -0
  170. /package/dist/{test-prefix-A7JGGYAA.js.map → test-prefix-6DLB2BHE.js.map} +0 -0
  171. /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-KSXA2NOJ.js";
4
+ } from "./chunk-AZH27CPV.js";
5
5
  import "./chunk-NXMDEL3F.js";
6
6
  import {
7
7
  CLIIsolationManager,
@@ -9,65 +9,67 @@ import {
9
9
  EnvironmentManager,
10
10
  LoomManager,
11
11
  ResourceCleanup
12
- } from "./chunk-77VLG2KP.js";
12
+ } from "./chunk-WNXYC7J4.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-QJX6ICWY.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-TB6475EW.js";
65
+ } from "./chunk-YAVVDZVF.js";
64
66
  import {
65
67
  openBrowser
66
68
  } from "./chunk-YETJNRQM.js";
67
69
  import {
68
70
  IssueManagementProviderFactory
69
- } from "./chunk-LZBSLO6S.js";
70
- import "./chunk-HBJITKSZ.js";
71
+ } from "./chunk-L4CN7YQT.js";
72
+ import "./chunk-LFVRG6UU.js";
71
73
  import {
72
74
  getConfiguredRepoFromSettings,
73
75
  hasMultipleRemotes
@@ -79,9 +81,9 @@ import {
79
81
  } from "./chunk-O7VL5N6S.js";
80
82
  import {
81
83
  ClaudeContextManager
82
- } from "./chunk-64HCHVJM.js";
83
- import "./chunk-O36JLYNW.js";
84
- import "./chunk-TIYJEEVO.js";
84
+ } from "./chunk-PLI3JQWT.js";
85
+ import "./chunk-XU5A6BWA.js";
86
+ import "./chunk-66QOCD5N.js";
85
87
  import {
86
88
  extractSettingsOverrides
87
89
  } from "./chunk-GYCR2LOU.js";
@@ -95,27 +97,26 @@ import {
95
97
  findMainWorktreePathWithSettings,
96
98
  findPlaceholderCommitSha,
97
99
  getMergeTargetBranch,
98
- getRepoRoot,
99
100
  isPlaceholderCommit,
100
101
  isValidGitRepo,
101
102
  pushBranchToRemote,
102
103
  removePlaceholderCommitFromHead,
103
104
  removePlaceholderCommitFromHistory
104
- } from "./chunk-ZA575VLF.js";
105
+ } from "./chunk-GDS2HXSW.js";
105
106
  import {
106
107
  SettingsManager
107
- } from "./chunk-WFQ5CLTR.js";
108
+ } from "./chunk-IWIIOFEB.js";
108
109
  import {
109
110
  MetadataManager
110
- } from "./chunk-VWGKGNJP.js";
111
+ } from "./chunk-KBEIQP4G.js";
111
112
  import {
112
113
  GitHubService
113
- } from "./chunk-USJSNHGG.js";
114
- import "./chunk-GCPAZSGV.js";
114
+ } from "./chunk-PVW6JE7E.js";
115
+ import "./chunk-THS5L54H.js";
115
116
  import {
116
117
  promptConfirmation,
117
118
  waitForKeypress
118
- } from "./chunk-ZX3GTM7O.js";
119
+ } from "./chunk-7JDMYTFZ.js";
119
120
  import "./chunk-433MOLAU.js";
120
121
  import "./chunk-IGKPPACU.js";
121
122
  import {
@@ -132,65 +133,7 @@ import {
132
133
  import { program, Option } from "commander";
133
134
 
134
135
  // 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
136
  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
137
  var StartCommand = class {
195
138
  constructor(issueTracker, loomManager, _agentManager, settingsManager) {
196
139
  this.loomManager = null;
@@ -278,7 +221,7 @@ var StartCommand = class {
278
221
  const parsed = await this.parseInput(input.identifier, repo);
279
222
  await this.validateInput(parsed, repo);
280
223
  if (parentLoom) {
281
- const { isInteractiveEnvironment, promptConfirmation: promptConfirmation2 } = await import("./prompt-3SAZYRUN.js");
224
+ const { isInteractiveEnvironment, promptConfirmation: promptConfirmation2 } = await import("./prompt-ONNPSNKM.js");
282
225
  const parentDisplay = parentLoom.type === "issue" ? `issue #${parentLoom.identifier}` : parentLoom.type === "pr" ? `PR #${parentLoom.identifier}` : `branch ${parentLoom.identifier}`;
283
226
  if (input.options.childLoom === true) {
284
227
  getLogger().info(`Creating as child loom of ${parentDisplay} (--child-loom flag)`);
@@ -326,7 +269,7 @@ var StartCommand = class {
326
269
  if (isJsonMode) {
327
270
  throw new Error("JSON mode does not support bypassPermissions confirmation prompt");
328
271
  }
329
- const { promptConfirmation: promptConfirmation2 } = await import("./prompt-3SAZYRUN.js");
272
+ const { promptConfirmation: promptConfirmation2 } = await import("./prompt-ONNPSNKM.js");
330
273
  const confirmed = await promptConfirmation2(
331
274
  "WARNING: bypassPermissions mode will allow Claude to execute all tool calls without confirmation. This can be dangerous. Do you want to proceed?"
332
275
  );
@@ -423,9 +366,8 @@ var StartCommand = class {
423
366
  originalInput: trimmedIdentifier
424
367
  };
425
368
  }
426
- const linearPattern = /^([A-Z]{2,}-\d+)$/i;
427
- const linearMatch = trimmedIdentifier.match(linearPattern);
428
- if (linearMatch == null ? void 0 : linearMatch[1]) {
369
+ const identifierMatch = matchIssueIdentifier(trimmedIdentifier);
370
+ if (identifierMatch.type === "linear" && identifierMatch.identifier) {
429
371
  const detection = await this.issueTracker.detectInputType(
430
372
  trimmedIdentifier,
431
373
  repo
@@ -439,13 +381,11 @@ var StartCommand = class {
439
381
  };
440
382
  }
441
383
  throw new Error(
442
- `Could not find Linear issue ${linearMatch[1].toUpperCase()}`
384
+ `Could not find Linear issue ${identifierMatch.identifier}`
443
385
  );
444
386
  }
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);
387
+ if (identifierMatch.type === "numeric" && identifierMatch.identifier) {
388
+ const number = parseInt(identifierMatch.identifier, 10);
449
389
  if (this.issueTracker.supportsPullRequests) {
450
390
  const detection = await this.issueTracker.detectInputType(
451
391
  trimmedIdentifier,
@@ -582,7 +522,7 @@ var StartCommand = class {
582
522
  if (loom.path === mainWorktreePath) {
583
523
  return false;
584
524
  }
585
- return cwd === loom.path || cwd.startsWith(loom.path + path2.sep);
525
+ return cwd === loom.path || cwd.startsWith(loom.path + path.sep);
586
526
  });
587
527
  if (!parentLoom) {
588
528
  return null;
@@ -778,7 +718,7 @@ var EnhanceCommand = class {
778
718
  };
779
719
 
780
720
  // src/commands/finish.ts
781
- import path3 from "path";
721
+ import path2 from "path";
782
722
  var FinishCommand = class {
783
723
  constructor(issueTracker, gitWorktreeManager, validationRunner, commitManager, mergeManager, identifierParser, resourceCleanup, buildRunner, settingsManager, loomManager) {
784
724
  const envResult = loadEnvIntoProcess();
@@ -980,7 +920,7 @@ var FinishCommand = class {
980
920
  * Ports logic from merge-current-issue.sh lines 30-52
981
921
  */
982
922
  async autoDetectFromCurrentDirectory() {
983
- const currentDir = path3.basename(process.cwd());
923
+ const currentDir = path2.basename(process.cwd());
984
924
  const prPattern = /_pr_(\d+)$/;
985
925
  const prMatch = currentDir.match(prPattern);
986
926
  if (prMatch == null ? void 0 : prMatch[1]) {
@@ -1244,7 +1184,7 @@ var FinishCommand = class {
1244
1184
  return;
1245
1185
  }
1246
1186
  if (mergeBehavior.mode === "github-draft-pr") {
1247
- const { MetadataManager: MetadataManager3 } = await import("./MetadataManager-XJ2YB762.js");
1187
+ const { MetadataManager: MetadataManager3 } = await import("./MetadataManager-W3C54UYT.js");
1248
1188
  const metadataManager2 = new MetadataManager3();
1249
1189
  const metadata = await metadataManager2.readMetadata(worktree.path);
1250
1190
  getLogger().debug(`Draft PR mode: worktree=${worktree.path}, draftPrNumber=${(metadata == null ? void 0 : metadata.draftPrNumber) ?? "none"}`);
@@ -1345,7 +1285,7 @@ var FinishCommand = class {
1345
1285
  getLogger().debug("Skipping build verification (--skip-build flag provided)");
1346
1286
  }
1347
1287
  await this.generateSessionSummaryIfConfigured(parsed, worktree, options);
1348
- const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-XJ2YB762.js");
1288
+ const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-W3C54UYT.js");
1349
1289
  const metadataManager = new MetadataManager2();
1350
1290
  if (!options.dryRun) {
1351
1291
  await metadataManager.archiveMetadata(worktree.path);
@@ -1374,7 +1314,7 @@ var FinishCommand = class {
1374
1314
  "Cannot cleanup PR with uncommitted changes. Commit or stash changes, then run again with --force to cleanup anyway."
1375
1315
  );
1376
1316
  }
1377
- const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-XJ2YB762.js");
1317
+ const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-W3C54UYT.js");
1378
1318
  const metadataManager = new MetadataManager2();
1379
1319
  if (!options.dryRun) {
1380
1320
  await metadataManager.archiveMetadata(worktree.path);
@@ -1506,7 +1446,7 @@ var FinishCommand = class {
1506
1446
  }
1507
1447
  finishResult.prUrl = prResult.url;
1508
1448
  await this.generateSessionSummaryIfConfigured(parsed, worktree, options, prResult.number);
1509
- const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-XJ2YB762.js");
1449
+ const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-W3C54UYT.js");
1510
1450
  const metadataManager = new MetadataManager2();
1511
1451
  if (!options.dryRun) {
1512
1452
  await metadataManager.archiveMetadata(worktree.path);
@@ -1847,8 +1787,8 @@ var FinishCommand = class {
1847
1787
  * Check if current working directory is within the target worktree
1848
1788
  */
1849
1789
  isRunningFromWithinWorktree(worktreePath) {
1850
- const normalizedCwd = path3.normalize(process.cwd());
1851
- const normalizedWorktree = path3.normalize(worktreePath);
1790
+ const normalizedCwd = path2.normalize(process.cwd());
1791
+ const normalizedWorktree = path2.normalize(worktreePath);
1852
1792
  return normalizedCwd.startsWith(normalizedWorktree);
1853
1793
  }
1854
1794
  /**
@@ -1903,12 +1843,12 @@ function determineLoomType(worktree) {
1903
1843
  }
1904
1844
  return "branch";
1905
1845
  }
1906
- function extractPRNumbers(path6) {
1907
- if (!path6) {
1846
+ function extractPRNumbers(path5) {
1847
+ if (!path5) {
1908
1848
  return [];
1909
1849
  }
1910
1850
  const prPathPattern = /_pr_(\d+)$/;
1911
- const match = path6.match(prPathPattern);
1851
+ const match = path5.match(prPathPattern);
1912
1852
  if (match == null ? void 0 : match[1]) {
1913
1853
  return [match[1]];
1914
1854
  }
@@ -1992,12 +1932,12 @@ import fs3 from "fs-extra";
1992
1932
 
1993
1933
  // src/lib/VersionMigrationManager.ts
1994
1934
  import fs2 from "fs-extra";
1995
- import path5 from "path";
1935
+ import path4 from "path";
1996
1936
  import os2 from "os";
1997
1937
 
1998
1938
  // src/migrations/index.ts
1999
1939
  import fs from "fs-extra";
2000
- import path4 from "path";
1940
+ import path3 from "path";
2001
1941
  import os from "os";
2002
1942
  var migrations = [
2003
1943
  // v0.6.0 is the baseline - no migrations needed
@@ -2005,9 +1945,9 @@ var migrations = [
2005
1945
  version: "0.6.1",
2006
1946
  description: "Add global gitignore for .iloom/settings.local.json",
2007
1947
  migrate: async () => {
2008
- const globalIgnorePath = path4.join(os.homedir(), ".config", "git", "ignore");
1948
+ const globalIgnorePath = path3.join(os.homedir(), ".config", "git", "ignore");
2009
1949
  const pattern = "**/.iloom/settings.local.json";
2010
- await fs.ensureDir(path4.dirname(globalIgnorePath));
1950
+ await fs.ensureDir(path3.dirname(globalIgnorePath));
2011
1951
  let content = "";
2012
1952
  try {
2013
1953
  content = await fs.readFile(globalIgnorePath, "utf-8");
@@ -2025,9 +1965,9 @@ var migrations = [
2025
1965
  version: "0.7.1",
2026
1966
  description: "Add global gitignore for .iloom/package.iloom.local.json",
2027
1967
  migrate: async () => {
2028
- const globalIgnorePath = path4.join(os.homedir(), ".config", "git", "ignore");
1968
+ const globalIgnorePath = path3.join(os.homedir(), ".config", "git", "ignore");
2029
1969
  const pattern = "**/.iloom/package.iloom.local.json";
2030
- await fs.ensureDir(path4.dirname(globalIgnorePath));
1970
+ await fs.ensureDir(path3.dirname(globalIgnorePath));
2031
1971
  let content = "";
2032
1972
  try {
2033
1973
  content = await fs.readFile(globalIgnorePath, "utf-8");
@@ -2051,7 +1991,7 @@ var VersionMigrationManager = class {
2051
1991
  }
2052
1992
  // Return path to migration state file
2053
1993
  getMigrationStatePath() {
2054
- return path5.join(os2.homedir(), ".config", "iloom-ai", "migration-state.json");
1994
+ return path4.join(os2.homedir(), ".config", "iloom-ai", "migration-state.json");
2055
1995
  }
2056
1996
  // Get effective version, respecting ILOOM_VERSION_OVERRIDE env var
2057
1997
  // packageVersion is the version from package.json passed by caller
@@ -2091,7 +2031,7 @@ var VersionMigrationManager = class {
2091
2031
  async saveMigrationState(version, newFailures = []) {
2092
2032
  const statePath = this.getMigrationStatePath();
2093
2033
  try {
2094
- await fs2.ensureDir(path5.dirname(statePath));
2034
+ await fs2.ensureDir(path4.dirname(statePath));
2095
2035
  const existingState = await this.loadFullMigrationState();
2096
2036
  const existingFailures = existingState.failedMigrations ?? [];
2097
2037
  const allFailures = [...existingFailures];
@@ -2195,7 +2135,7 @@ program.name("iloom").description(packageJson.description).version(packageJson.v
2195
2135
  } catch {
2196
2136
  }
2197
2137
  try {
2198
- const { SettingsMigrationManager } = await import("./SettingsMigrationManager-KZKDG66H.js");
2138
+ const { SettingsMigrationManager } = await import("./SettingsMigrationManager-LEBMJP3B.js");
2199
2139
  const migrationManager = new SettingsMigrationManager();
2200
2140
  await migrationManager.migrateSettingsIfNeeded();
2201
2141
  } catch (error) {
@@ -2332,18 +2272,18 @@ async function autoLaunchInitForMultipleRemotes() {
2332
2272
  logger.info("iloom will now launch an interactive configuration session with Claude");
2333
2273
  logger.info("to help you select which remote to use for GitHub operations.");
2334
2274
  logger.info("");
2335
- const { waitForKeypress: waitForKeypress2 } = await import("./prompt-3SAZYRUN.js");
2275
+ const { waitForKeypress: waitForKeypress2 } = await import("./prompt-ONNPSNKM.js");
2336
2276
  await waitForKeypress2("Press any key to start configuration...");
2337
2277
  logger.info("");
2338
2278
  try {
2339
- const { InitCommand: InitCommand2 } = await import("./init-S6IEGRSX.js");
2340
- const initCommand = new InitCommand2();
2279
+ const { InitCommand } = await import("./init-MZBIXQ7V.js");
2280
+ const initCommand = new InitCommand();
2341
2281
  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
2282
  await initCommand.execute(customInitialMessage);
2343
2283
  logger.info("");
2344
2284
  logger.info("Configuration complete! Continuing with your original command...");
2345
2285
  logger.info("");
2346
- const { SettingsManager: SettingsManager2 } = await import("./SettingsManager-YU4VYPTW.js");
2286
+ const { SettingsManager: SettingsManager2 } = await import("./SettingsManager-VCVLL32H.js");
2347
2287
  const settingsManager = new SettingsManager2();
2348
2288
  const settings = await settingsManager.loadSettings();
2349
2289
  const { hasMultipleRemotes: hasMultipleRemotes2 } = await import("./remote-IJAMOEAP.js");
@@ -2373,7 +2313,7 @@ program.command("start").alias("new").alias("create").alias("up").description("C
2373
2313
  logger.error("JSON mode requires identifier argument");
2374
2314
  process.exit(1);
2375
2315
  }
2376
- const { promptInput } = await import("./prompt-3SAZYRUN.js");
2316
+ const { promptInput } = await import("./prompt-ONNPSNKM.js");
2377
2317
  finalIdentifier = await promptInput("Enter issue number, PR number (pr/123), or branch name");
2378
2318
  if (!(finalIdentifier == null ? void 0 : finalIdentifier.trim())) {
2379
2319
  logger.error("Identifier is required");
@@ -2437,7 +2377,7 @@ program.command("add-issue").alias("a").description("Create and enhance GitHub i
2437
2377
  });
2438
2378
  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
2379
  try {
2440
- const { FeedbackCommand } = await import("./feedback-ZLAX3BVL.js");
2380
+ const { FeedbackCommand } = await import("./feedback-HZVLOTQJ.js");
2441
2381
  const command = new FeedbackCommand();
2442
2382
  const feedbackOptions = {};
2443
2383
  if (options.body !== void 0) {
@@ -2522,7 +2462,7 @@ program.command("finish").alias("dn").description("Merge work and cleanup worksp
2522
2462
  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
2463
  const executeAction = async () => {
2524
2464
  try {
2525
- const { CommitCommand } = await import("./commit-NGMDWWAP.js");
2465
+ const { CommitCommand } = await import("./commit-SS77KUNX.js");
2526
2466
  const command = new CommitCommand();
2527
2467
  const noReview = options.review === false || options.json === true;
2528
2468
  const result = await command.execute({
@@ -2557,7 +2497,7 @@ program.command("commit").alias("c").description("Commit all uncommitted files w
2557
2497
  });
2558
2498
  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
2499
  try {
2560
- const { RebaseCommand } = await import("./rebase-RLEVFHWN.js");
2500
+ const { RebaseCommand } = await import("./rebase-7YS3N274.js");
2561
2501
  const command = new RebaseCommand();
2562
2502
  await command.execute(options);
2563
2503
  } catch (error) {
@@ -2566,12 +2506,12 @@ program.command("rebase").description("Rebase current branch on main with Claude
2566
2506
  }
2567
2507
  });
2568
2508
  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")
2509
+ new Option("--one-shot <mode>", "One-shot automation mode").choices(["default", "noReview", "bypassPermissions"])
2570
2510
  ).action(async (options) => {
2571
2511
  try {
2572
- const { IgniteCommand } = await import("./ignite-HA2OJF6Z.js");
2512
+ const { IgniteCommand } = await import("./ignite-CPXPZ4ZD.js");
2573
2513
  const command = new IgniteCommand();
2574
- await command.execute(options.oneShot ?? "default");
2514
+ await command.execute(options.oneShot);
2575
2515
  } catch (error) {
2576
2516
  logger.error(`Failed to spin up loom: ${error instanceof Error ? error.message : "Unknown error"}`);
2577
2517
  process.exit(1);
@@ -2580,7 +2520,7 @@ program.command("spin").alias("ignite").description("Launch Claude with auto-det
2580
2520
  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
2521
  try {
2582
2522
  const args = (command == null ? void 0 : command.args) ? command.args.slice(identifier ? 1 : 0) : [];
2583
- const { OpenCommand } = await import("./open-IN3LUZXX.js");
2523
+ const { OpenCommand } = await import("./open-2LPZ7XXW.js");
2584
2524
  const cmd = new OpenCommand();
2585
2525
  const input = identifier ? { identifier, args } : { args };
2586
2526
  await cmd.execute(input);
@@ -2592,7 +2532,7 @@ program.command("open").description("Open workspace in browser or run CLI tool")
2592
2532
  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
2533
  try {
2594
2534
  const args = (command == null ? void 0 : command.args) ? command.args.slice(identifier ? 1 : 0) : [];
2595
- const { RunCommand } = await import("./run-QEIS2EH2.js");
2535
+ const { RunCommand } = await import("./run-XPGCMFFO.js");
2596
2536
  const cmd = new RunCommand();
2597
2537
  const input = identifier ? { identifier, args } : { args };
2598
2538
  await cmd.execute(input);
@@ -2603,7 +2543,7 @@ program.command("run").description("Run CLI tool or open workspace in browser").
2603
2543
  });
2604
2544
  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
2545
  try {
2606
- const { DevServerCommand } = await import("./dev-server-OAP3RZC6.js");
2546
+ const { DevServerCommand } = await import("./dev-server-TYYJM3XA.js");
2607
2547
  const cmd = new DevServerCommand();
2608
2548
  await cmd.execute({ identifier, json: options == null ? void 0 : options.json });
2609
2549
  } catch (error) {
@@ -2613,7 +2553,7 @@ program.command("dev-server").alias("dev").description("Start dev server for wor
2613
2553
  });
2614
2554
  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
2555
  try {
2616
- const { ShellCommand } = await import("./shell-2NNSIU34.js");
2556
+ const { ShellCommand } = await import("./shell-2SPM3Z5O.js");
2617
2557
  const cmd = new ShellCommand();
2618
2558
  await cmd.execute({ identifier });
2619
2559
  } catch (error) {
@@ -2623,7 +2563,7 @@ program.command("shell").alias("terminal").description("Open interactive shell w
2623
2563
  });
2624
2564
  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
2565
  try {
2626
- const { BuildCommand } = await import("./build-HQ5HGA3T.js");
2566
+ const { BuildCommand } = await import("./build-H4DK3DMQ.js");
2627
2567
  const cmd = new BuildCommand();
2628
2568
  await cmd.execute(identifier ? { identifier } : {});
2629
2569
  } catch (error) {
@@ -2633,7 +2573,7 @@ program.command("build").description("Run the build script").argument("[identifi
2633
2573
  });
2634
2574
  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
2575
  try {
2636
- const { LintCommand } = await import("./lint-HAVU4U34.js");
2576
+ const { LintCommand } = await import("./lint-MDVUV3W2.js");
2637
2577
  const cmd = new LintCommand();
2638
2578
  await cmd.execute(identifier ? { identifier } : {});
2639
2579
  } catch (error) {
@@ -2643,7 +2583,7 @@ program.command("lint").description("Run the lint script").argument("[identifier
2643
2583
  });
2644
2584
  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
2585
  try {
2646
- const { TestCommand } = await import("./test-75WAA6DU.js");
2586
+ const { TestCommand } = await import("./test-N2725YRI.js");
2647
2587
  const cmd = new TestCommand();
2648
2588
  await cmd.execute(identifier ? { identifier } : {});
2649
2589
  } catch (error) {
@@ -2653,7 +2593,7 @@ program.command("test").description("Run the test script").argument("[identifier
2653
2593
  });
2654
2594
  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
2595
  try {
2656
- const { CompileCommand } = await import("./compile-CT7IR7O2.js");
2596
+ const { CompileCommand } = await import("./compile-ZOAODFN2.js");
2657
2597
  const cmd = new CompileCommand();
2658
2598
  await cmd.execute(identifier ? { identifier } : {});
2659
2599
  } catch (error) {
@@ -2664,7 +2604,7 @@ program.command("compile").alias("typecheck").description("Run the compile or ty
2664
2604
  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
2605
  const executeAction = async () => {
2666
2606
  try {
2667
- const { CleanupCommand } = await import("./cleanup-DB7EFBF3.js");
2607
+ const { CleanupCommand } = await import("./cleanup-25PCP2EM.js");
2668
2608
  const command = new CleanupCommand();
2669
2609
  const input = {
2670
2610
  options: options ?? {}
@@ -2887,7 +2827,7 @@ program.command("list").description("Show active workspaces").option("--json", "
2887
2827
  });
2888
2828
  program.command("projects").description("List configured iloom projects").option("--json", "Output as JSON (default behavior)").action(async (options) => {
2889
2829
  try {
2890
- const { ProjectsCommand } = await import("./projects-CTRTTMSK.js");
2830
+ const { ProjectsCommand } = await import("./projects-325GEEGJ.js");
2891
2831
  const command = new ProjectsCommand();
2892
2832
  const result = await command.execute(options);
2893
2833
  console.log(JSON.stringify(result, null, 2));
@@ -2898,8 +2838,8 @@ program.command("projects").description("List configured iloom projects").option
2898
2838
  });
2899
2839
  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
2840
  try {
2901
- const { InitCommand: InitCommand2 } = await import("./init-S6IEGRSX.js");
2902
- const command = new InitCommand2();
2841
+ const { InitCommand } = await import("./init-MZBIXQ7V.js");
2842
+ const command = new InitCommand();
2903
2843
  const trimmedPrompt = prompt == null ? void 0 : prompt.trim();
2904
2844
  const customPrompt = trimmedPrompt && trimmedPrompt.length > 0 ? trimmedPrompt : void 0;
2905
2845
  await command.execute(customPrompt);
@@ -2908,9 +2848,19 @@ program.command("init").alias("config").description("Initialize iloom configurat
2908
2848
  process.exit(1);
2909
2849
  }
2910
2850
  });
2851
+ 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) => {
2852
+ try {
2853
+ const { PlanCommand } = await import("./plan-N3YDCOIV.js");
2854
+ const command = new PlanCommand();
2855
+ 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);
2856
+ } catch (error) {
2857
+ logger.error(`Planning session failed: ${error instanceof Error ? error.message : "Unknown error"}`);
2858
+ process.exit(1);
2859
+ }
2860
+ });
2911
2861
  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
2862
  try {
2913
- const { ContributeCommand } = await import("./contribute-GXKOIA42.js");
2863
+ const { ContributeCommand } = await import("./contribute-7USRBWRM.js");
2914
2864
  const command = new ContributeCommand();
2915
2865
  await command.execute(repository);
2916
2866
  } catch (error) {
@@ -2930,7 +2880,7 @@ program.command("update").description("Update iloom-cli to the latest version").
2930
2880
  });
2931
2881
  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
2882
  try {
2933
- const { GitHubService: GitHubService2 } = await import("./GitHubService-O7U4UQ7N.js");
2883
+ const { GitHubService: GitHubService2 } = await import("./GitHubService-ACZVNTJE.js");
2934
2884
  const { DefaultBranchNamingService: DefaultBranchNamingService2 } = await import("./BranchNamingService-AO7BPIUJ.js");
2935
2885
  logger.info("Testing GitHub Integration\n");
2936
2886
  const service = new GitHubService2();
@@ -2990,9 +2940,9 @@ program.command("test-github").description("Test GitHub integration (Issue #3)")
2990
2940
  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
2941
  try {
2992
2942
  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");
2943
+ const { PromptTemplateManager } = await import("./PromptTemplateManager-OUYDHOPI.js");
2944
+ const { ClaudeService } = await import("./ClaudeService-FKPOQRA4.js");
2945
+ const { ClaudeContextManager: ClaudeContextManager2 } = await import("./ClaudeContextManager-RDP6CLK6.js");
2996
2946
  logger.info("Testing Claude Integration\n");
2997
2947
  if (options.detect) {
2998
2948
  logger.info("Detecting Claude CLI...");
@@ -3127,7 +3077,7 @@ program.command("test-claude").description("Test Claude integration (Issue #10)"
3127
3077
  });
3128
3078
  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
3079
  try {
3130
- const { TestWebserverCommand } = await import("./test-webserver-J6SMNLU2.js");
3080
+ const { TestWebserverCommand } = await import("./test-webserver-XLJ2TZFP.js");
3131
3081
  const command = new TestWebserverCommand();
3132
3082
  await command.execute({ issueNumber, options });
3133
3083
  } catch (error) {
@@ -3140,7 +3090,7 @@ program.command("test-webserver").description("Test if a web server is running o
3140
3090
  });
3141
3091
  program.command("test-git").description("Test Git integration - findMainWorktreePath() function (reads .iloom/settings.json)").action(async () => {
3142
3092
  try {
3143
- const { TestGitCommand } = await import("./test-git-E2BLXR6M.js");
3093
+ const { TestGitCommand } = await import("./test-git-ZPSPA2TP.js");
3144
3094
  const command = new TestGitCommand();
3145
3095
  await command.execute();
3146
3096
  } catch (error) {
@@ -3166,7 +3116,7 @@ program.command("test-tabs").description("Test iTerm2 dual tab functionality - o
3166
3116
  });
3167
3117
  program.command("test-prefix").description("Test worktree prefix configuration - preview worktree paths (reads .iloom/settings.json)").action(async () => {
3168
3118
  try {
3169
- const { TestPrefixCommand } = await import("./test-prefix-A7JGGYAA.js");
3119
+ const { TestPrefixCommand } = await import("./test-prefix-6DLB2BHE.js");
3170
3120
  const command = new TestPrefixCommand();
3171
3121
  await command.execute();
3172
3122
  } catch (error) {
@@ -3180,7 +3130,7 @@ program.command("test-prefix").description("Test worktree prefix configuration -
3180
3130
  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
3131
  const executeAction = async () => {
3182
3132
  try {
3183
- const { SummaryCommand } = await import("./summary-2KLNHVTN.js");
3133
+ const { SummaryCommand } = await import("./summary-5UWNLAI5.js");
3184
3134
  const command = new SummaryCommand();
3185
3135
  const result = await command.execute({ identifier, options });
3186
3136
  if (options.json && result) {
@@ -3209,7 +3159,7 @@ program.command("summary").description("Generate Claude session summary for a lo
3209
3159
  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
3160
  const executeAction = async () => {
3211
3161
  try {
3212
- const { RecapCommand } = await import("./recap-ZKGHZCX6.js");
3162
+ const { RecapCommand } = await import("./recap-GSXFEOD6.js");
3213
3163
  const command = new RecapCommand();
3214
3164
  const result = await command.execute({ identifier, json: options.json });
3215
3165
  if (options.json && result) {
@@ -3238,8 +3188,8 @@ program.command("recap").description("Get recap for a loom (defaults to current
3238
3188
  program.command("test-neon").description("Test Neon integration and debug configuration").action(async () => {
3239
3189
  var _a;
3240
3190
  try {
3241
- const { SettingsManager: SettingsManager2 } = await import("./SettingsManager-YU4VYPTW.js");
3242
- const { createNeonProviderFromSettings: createNeonProviderFromSettings2 } = await import("./neon-helpers-3KBC4A3Y.js");
3191
+ const { SettingsManager: SettingsManager2 } = await import("./SettingsManager-VCVLL32H.js");
3192
+ const { createNeonProviderFromSettings: createNeonProviderFromSettings2 } = await import("./neon-helpers-VVFFTLXE.js");
3243
3193
  logger.info("Testing Neon Integration\n");
3244
3194
  logger.info("1. Settings Configuration:");
3245
3195
  const settingsManager = new SettingsManager2();