@iloom/cli 0.12.0 → 0.13.0-beta.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 (133) hide show
  1. package/README.md +17 -2
  2. package/dist/{ClaudeContextManager-IENAE2CP.js → ClaudeContextManager-RRGREEZQ.js} +4 -4
  3. package/dist/{ClaudeService-YIJCZUUB.js → ClaudeService-LEPW6QAC.js} +3 -3
  4. package/dist/{IssueTrackerFactory-2OI7YIN6.js → IssueTrackerFactory-KE2BDCLC.js} +3 -3
  5. package/dist/{LoomLauncher-3TSFW7QP.js → LoomLauncher-GKQMR5E6.js} +4 -4
  6. package/dist/README.md +17 -2
  7. package/dist/{SettingsManager-BMQCAXPP.js → SettingsManager-KQU7OX7G.js} +4 -2
  8. package/dist/{build-DMWSIME6.js → build-V3KADFMO.js} +6 -6
  9. package/dist/{chunk-QFDM23CO.js → chunk-3XEXT35Z.js} +2 -2
  10. package/dist/{chunk-FV4KXBGO.js → chunk-4VQXMEEP.js} +2 -2
  11. package/dist/{chunk-V5IYLWRA.js → chunk-H3T3EPF3.js} +2 -2
  12. package/dist/{chunk-QF2DROQR.js → chunk-JDN4SPV3.js} +2 -2
  13. package/dist/{chunk-M3FBM4T3.js → chunk-KQSV7FOG.js} +2 -2
  14. package/dist/{chunk-R7DGN73N.js → chunk-NTDY5AMO.js} +2 -2
  15. package/dist/{chunk-35CBWAJL.js → chunk-NUUFP53X.js} +2 -2
  16. package/dist/{chunk-IS46GQRA.js → chunk-PD75ZCFT.js} +14 -14
  17. package/dist/chunk-PD75ZCFT.js.map +1 -0
  18. package/dist/{chunk-EQIII6GI.js → chunk-Q7VXHJP6.js} +3 -3
  19. package/dist/{chunk-IHSA7VGI.js → chunk-QED2WB2D.js} +4 -4
  20. package/dist/{chunk-OPQC4OWM.js → chunk-QNPJXO53.js} +3 -3
  21. package/dist/{chunk-YWNF5755.js → chunk-QQULYI2S.js} +2 -2
  22. package/dist/{chunk-HIGWKLQR.js → chunk-QXGM32TO.js} +2 -2
  23. package/dist/{chunk-PMB6TYV4.js → chunk-RFCAPHL5.js} +2 -2
  24. package/dist/{chunk-OKB2NEDQ.js → chunk-SA446KA2.js} +5 -5
  25. package/dist/{chunk-ZM2AYHMO.js → chunk-SN4S5CWL.js} +2 -2
  26. package/dist/{chunk-XVCGPTEQ.js → chunk-TAEVA4QR.js} +2 -2
  27. package/dist/chunk-TAEVA4QR.js.map +1 -0
  28. package/dist/{chunk-PDG74IJT.js → chunk-TN2D2RX7.js} +22 -20
  29. package/dist/chunk-TN2D2RX7.js.map +1 -0
  30. package/dist/{chunk-GWJWECZB.js → chunk-VVQQIG64.js} +16 -17
  31. package/dist/{chunk-GWJWECZB.js.map → chunk-VVQQIG64.js.map} +1 -1
  32. package/dist/{chunk-653XBU3L.js → chunk-WGUGB54H.js} +10 -1
  33. package/dist/chunk-WGUGB54H.js.map +1 -0
  34. package/dist/{chunk-KCZSUJUR.js → chunk-X5DRLONY.js} +4 -4
  35. package/dist/{chunk-VA6CWUAE.js → chunk-XCP2WDYA.js} +2 -2
  36. package/dist/{chunk-HKEXRZMU.js → chunk-YUOVWWJX.js} +310 -5
  37. package/dist/chunk-YUOVWWJX.js.map +1 -0
  38. package/dist/{chunk-BFF27W3S.js → chunk-ZUIFO7B4.js} +2 -2
  39. package/dist/{cleanup-RLBLNQZN.js → cleanup-RJKLI47I.js} +19 -19
  40. package/dist/cleanup-RJKLI47I.js.map +1 -0
  41. package/dist/cli.js +89 -85
  42. package/dist/cli.js.map +1 -1
  43. package/dist/{commit-RILBXFWO.js → commit-SUHRUMDE.js} +6 -6
  44. package/dist/{compile-QEL5724K.js → compile-2MD346PO.js} +6 -6
  45. package/dist/{contribute-EHWLYOMZ.js → contribute-P4BMRY7C.js} +3 -3
  46. package/dist/database-helpers-PRDFNDRO.js +11 -0
  47. package/dist/{dev-server-2WSWZXJG.js → dev-server-ZNTLWOL5.js} +8 -8
  48. package/dist/{feedback-I6ZEHEUB.js → feedback-Q6WG2WX4.js} +2 -2
  49. package/dist/{git-I3PO6FY7.js → git-TX2IEMB3.js} +3 -3
  50. package/dist/{ignite-XZFYRVRJ.js → ignite-P644W2PK.js} +9 -9
  51. package/dist/index.d.ts +36 -2
  52. package/dist/index.js +17 -9
  53. package/dist/index.js.map +1 -1
  54. package/dist/{init-A6WRP77L.js → init-5HFY7JG6.js} +5 -5
  55. package/dist/{install-deps-HXP2TM7G.js → install-deps-J4ALTM27.js} +6 -6
  56. package/dist/{issues-SUFQJY6O.js → issues-LZMIF22U.js} +4 -4
  57. package/dist/{lint-FDZC77GL.js → lint-XIXKU22H.js} +6 -6
  58. package/dist/mcp/issue-management-server.js +8 -0
  59. package/dist/mcp/issue-management-server.js.map +1 -1
  60. package/dist/{open-US4XACLW.js → open-KUO35JIJ.js} +8 -8
  61. package/dist/{plan-PL3ZB32J.js → plan-7CF56OIR.js} +17 -17
  62. package/dist/prompts/init-prompt.txt +24 -0
  63. package/dist/prompts/issue-prompt.txt +1 -1
  64. package/dist/prompts/regular-prompt.txt +1 -1
  65. package/dist/{rebase-JA3RW2XO.js → rebase-MAMWPA2L.js} +5 -5
  66. package/dist/{recap-5TO42HN2.js → recap-IDBO3KM5.js} +6 -6
  67. package/dist/{run-KKCRBRLW.js → run-RGZHCQ6M.js} +8 -8
  68. package/dist/schema/settings.schema.json +24 -0
  69. package/dist/{shell-GAB2FCXH.js → shell-7ADCDFIV.js} +5 -5
  70. package/dist/{summary-P7QE3TNW.js → summary-7J2HORFD.js} +7 -7
  71. package/dist/{test-6LFB5WOO.js → test-SRB7EWU6.js} +6 -6
  72. package/dist/{test-git-PYJOYSED.js → test-git-G7ATVIXG.js} +3 -3
  73. package/dist/{test-jira-SM7IU5HW.js → test-jira-Q2HPA522.js} +3 -3
  74. package/dist/{test-prefix-HIRZBXTM.js → test-prefix-JMDGXR5A.js} +3 -3
  75. package/dist/{test-webserver-43PVP2JL.js → test-webserver-GZFVXBGD.js} +5 -5
  76. package/dist/{vscode-HXIXRZ3A.js → vscode-3I7ISHUU.js} +5 -5
  77. package/package.json +1 -1
  78. package/dist/chunk-653XBU3L.js.map +0 -1
  79. package/dist/chunk-HKEXRZMU.js.map +0 -1
  80. package/dist/chunk-IS46GQRA.js.map +0 -1
  81. package/dist/chunk-PDG74IJT.js.map +0 -1
  82. package/dist/chunk-XVCGPTEQ.js.map +0 -1
  83. package/dist/cleanup-RLBLNQZN.js.map +0 -1
  84. package/dist/neon-helpers-LCZAN4U4.js +0 -11
  85. /package/dist/{ClaudeContextManager-IENAE2CP.js.map → ClaudeContextManager-RRGREEZQ.js.map} +0 -0
  86. /package/dist/{ClaudeService-YIJCZUUB.js.map → ClaudeService-LEPW6QAC.js.map} +0 -0
  87. /package/dist/{IssueTrackerFactory-2OI7YIN6.js.map → IssueTrackerFactory-KE2BDCLC.js.map} +0 -0
  88. /package/dist/{LoomLauncher-3TSFW7QP.js.map → LoomLauncher-GKQMR5E6.js.map} +0 -0
  89. /package/dist/{SettingsManager-BMQCAXPP.js.map → SettingsManager-KQU7OX7G.js.map} +0 -0
  90. /package/dist/{build-DMWSIME6.js.map → build-V3KADFMO.js.map} +0 -0
  91. /package/dist/{chunk-QFDM23CO.js.map → chunk-3XEXT35Z.js.map} +0 -0
  92. /package/dist/{chunk-FV4KXBGO.js.map → chunk-4VQXMEEP.js.map} +0 -0
  93. /package/dist/{chunk-V5IYLWRA.js.map → chunk-H3T3EPF3.js.map} +0 -0
  94. /package/dist/{chunk-QF2DROQR.js.map → chunk-JDN4SPV3.js.map} +0 -0
  95. /package/dist/{chunk-M3FBM4T3.js.map → chunk-KQSV7FOG.js.map} +0 -0
  96. /package/dist/{chunk-R7DGN73N.js.map → chunk-NTDY5AMO.js.map} +0 -0
  97. /package/dist/{chunk-35CBWAJL.js.map → chunk-NUUFP53X.js.map} +0 -0
  98. /package/dist/{chunk-EQIII6GI.js.map → chunk-Q7VXHJP6.js.map} +0 -0
  99. /package/dist/{chunk-IHSA7VGI.js.map → chunk-QED2WB2D.js.map} +0 -0
  100. /package/dist/{chunk-OPQC4OWM.js.map → chunk-QNPJXO53.js.map} +0 -0
  101. /package/dist/{chunk-YWNF5755.js.map → chunk-QQULYI2S.js.map} +0 -0
  102. /package/dist/{chunk-HIGWKLQR.js.map → chunk-QXGM32TO.js.map} +0 -0
  103. /package/dist/{chunk-PMB6TYV4.js.map → chunk-RFCAPHL5.js.map} +0 -0
  104. /package/dist/{chunk-OKB2NEDQ.js.map → chunk-SA446KA2.js.map} +0 -0
  105. /package/dist/{chunk-ZM2AYHMO.js.map → chunk-SN4S5CWL.js.map} +0 -0
  106. /package/dist/{chunk-KCZSUJUR.js.map → chunk-X5DRLONY.js.map} +0 -0
  107. /package/dist/{chunk-VA6CWUAE.js.map → chunk-XCP2WDYA.js.map} +0 -0
  108. /package/dist/{chunk-BFF27W3S.js.map → chunk-ZUIFO7B4.js.map} +0 -0
  109. /package/dist/{commit-RILBXFWO.js.map → commit-SUHRUMDE.js.map} +0 -0
  110. /package/dist/{compile-QEL5724K.js.map → compile-2MD346PO.js.map} +0 -0
  111. /package/dist/{contribute-EHWLYOMZ.js.map → contribute-P4BMRY7C.js.map} +0 -0
  112. /package/dist/{git-I3PO6FY7.js.map → database-helpers-PRDFNDRO.js.map} +0 -0
  113. /package/dist/{dev-server-2WSWZXJG.js.map → dev-server-ZNTLWOL5.js.map} +0 -0
  114. /package/dist/{feedback-I6ZEHEUB.js.map → feedback-Q6WG2WX4.js.map} +0 -0
  115. /package/dist/{ignite-XZFYRVRJ.js.map → git-TX2IEMB3.js.map} +0 -0
  116. /package/dist/{neon-helpers-LCZAN4U4.js.map → ignite-P644W2PK.js.map} +0 -0
  117. /package/dist/{init-A6WRP77L.js.map → init-5HFY7JG6.js.map} +0 -0
  118. /package/dist/{install-deps-HXP2TM7G.js.map → install-deps-J4ALTM27.js.map} +0 -0
  119. /package/dist/{issues-SUFQJY6O.js.map → issues-LZMIF22U.js.map} +0 -0
  120. /package/dist/{lint-FDZC77GL.js.map → lint-XIXKU22H.js.map} +0 -0
  121. /package/dist/{open-US4XACLW.js.map → open-KUO35JIJ.js.map} +0 -0
  122. /package/dist/{plan-PL3ZB32J.js.map → plan-7CF56OIR.js.map} +0 -0
  123. /package/dist/{rebase-JA3RW2XO.js.map → rebase-MAMWPA2L.js.map} +0 -0
  124. /package/dist/{recap-5TO42HN2.js.map → recap-IDBO3KM5.js.map} +0 -0
  125. /package/dist/{run-KKCRBRLW.js.map → run-RGZHCQ6M.js.map} +0 -0
  126. /package/dist/{shell-GAB2FCXH.js.map → shell-7ADCDFIV.js.map} +0 -0
  127. /package/dist/{summary-P7QE3TNW.js.map → summary-7J2HORFD.js.map} +0 -0
  128. /package/dist/{test-6LFB5WOO.js.map → test-SRB7EWU6.js.map} +0 -0
  129. /package/dist/{test-git-PYJOYSED.js.map → test-git-G7ATVIXG.js.map} +0 -0
  130. /package/dist/{test-jira-SM7IU5HW.js.map → test-jira-Q2HPA522.js.map} +0 -0
  131. /package/dist/{test-prefix-HIRZBXTM.js.map → test-prefix-JMDGXR5A.js.map} +0 -0
  132. /package/dist/{test-webserver-43PVP2JL.js.map → test-webserver-GZFVXBGD.js.map} +0 -0
  133. /package/dist/{vscode-HXIXRZ3A.js.map → vscode-3I7ISHUU.js.map} +0 -0
package/README.md CHANGED
@@ -97,7 +97,7 @@ Each loom is a fully isolated container for your work:
97
97
 
98
98
  * **Git Worktree:** A separate filesystem at ~/project-looms/issue-25/. No stashing, no branch switching overhead.
99
99
 
100
- * **Database Branch:** (Neon support) Schema changes in this loom are isolated—they won't break your main environment or your other active looms.
100
+ * **Database Branch:** (Neon and Supabase support) Schema changes in this loom are isolated—they won't break your main environment or your other active looms.
101
101
 
102
102
  * **Environment Variables:** Each loom has its own environment files (`.env`, `.env.local`, `.env.development`, `.env.development.local`). Uses `development` by default, override with `DOTENV_FLOW_NODE_ENV`. See [Secret Storage Limitations](#multi-language-project-support) for frameworks with encrypted credentials.
103
103
 
@@ -153,7 +153,7 @@ Configuration
153
153
 
154
154
  ### 1. Interactive Setup (Recommended)
155
155
 
156
- The easiest way to configure iloom is the interactive wizard. It guides you through setting up your environment (GitHub/Linear, Neon, IDE).
156
+ The easiest way to configure iloom is the interactive wizard. It guides you through setting up your environment (GitHub/Linear, Neon/Supabase, IDE).
157
157
 
158
158
  You can even use natural language to jump-start the process:
159
159
 
@@ -206,6 +206,21 @@ This example shows how to configure a project-wide default (e.g., GitHub remote)
206
206
  }
207
207
  ```
208
208
 
209
+ Or, if using Supabase (requires a paid plan):
210
+
211
+ ```json
212
+ {
213
+ "databaseProviders": {
214
+ "supabase": {
215
+ "projectRef": "abcdefghijklmnop",
216
+ "parentBranch": "main"
217
+ }
218
+ }
219
+ }
220
+ ```
221
+
222
+ > Only one database provider can be active at a time. See [Database Branching](docs/iloom-commands.md#database-branching) for full details.
223
+
209
224
  **.iloom/settings.local.json (Gitignored)**
210
225
 
211
226
  ```json
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ClaudeContextManager
4
- } from "./chunk-QF2DROQR.js";
5
- import "./chunk-VA6CWUAE.js";
4
+ } from "./chunk-JDN4SPV3.js";
5
+ import "./chunk-XCP2WDYA.js";
6
6
  import "./chunk-7RCUWU3I.js";
7
7
  import "./chunk-DDHWZNGL.js";
8
- import "./chunk-653XBU3L.js";
8
+ import "./chunk-WGUGB54H.js";
9
9
  import "./chunk-FTYWGQFM.js";
10
10
  import "./chunk-VRPPI6GU.js";
11
11
  export {
12
12
  ClaudeContextManager
13
13
  };
14
- //# sourceMappingURL=ClaudeContextManager-IENAE2CP.js.map
14
+ //# sourceMappingURL=ClaudeContextManager-RRGREEZQ.js.map
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ClaudeService
4
- } from "./chunk-VA6CWUAE.js";
4
+ } from "./chunk-XCP2WDYA.js";
5
5
  import "./chunk-7RCUWU3I.js";
6
6
  import "./chunk-DDHWZNGL.js";
7
- import "./chunk-653XBU3L.js";
7
+ import "./chunk-WGUGB54H.js";
8
8
  import "./chunk-FTYWGQFM.js";
9
9
  import "./chunk-VRPPI6GU.js";
10
10
  export {
11
11
  ClaudeService
12
12
  };
13
- //# sourceMappingURL=ClaudeService-YIJCZUUB.js.map
13
+ //# sourceMappingURL=ClaudeService-LEPW6QAC.js.map
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  IssueTrackerFactory
4
- } from "./chunk-35CBWAJL.js";
4
+ } from "./chunk-NUUFP53X.js";
5
5
  import "./chunk-DMSL5BAP.js";
6
6
  import "./chunk-D4Q7T5KD.js";
7
7
  import "./chunk-KV4NU3RP.js";
8
8
  import "./chunk-NPVA65KS.js";
9
- import "./chunk-653XBU3L.js";
9
+ import "./chunk-WGUGB54H.js";
10
10
  import "./chunk-FTYWGQFM.js";
11
11
  import "./chunk-VRPPI6GU.js";
12
12
  export {
13
13
  IssueTrackerFactory
14
14
  };
15
- //# sourceMappingURL=IssueTrackerFactory-2OI7YIN6.js.map
15
+ //# sourceMappingURL=IssueTrackerFactory-KE2BDCLC.js.map
@@ -4,8 +4,8 @@ import {
4
4
  } from "./chunk-CE676WCN.js";
5
5
  import {
6
6
  ClaudeContextManager
7
- } from "./chunk-QF2DROQR.js";
8
- import "./chunk-VA6CWUAE.js";
7
+ } from "./chunk-JDN4SPV3.js";
8
+ import "./chunk-XCP2WDYA.js";
9
9
  import "./chunk-7RCUWU3I.js";
10
10
  import {
11
11
  getExecutablePath
@@ -15,7 +15,7 @@ import {
15
15
  hexToRgb
16
16
  } from "./chunk-OIVFHJOA.js";
17
17
  import "./chunk-DDHWZNGL.js";
18
- import "./chunk-653XBU3L.js";
18
+ import "./chunk-WGUGB54H.js";
19
19
  import {
20
20
  getLogger
21
21
  } from "./chunk-FTYWGQFM.js";
@@ -255,4 +255,4 @@ var LoomLauncher = class {
255
255
  export {
256
256
  LoomLauncher
257
257
  };
258
- //# sourceMappingURL=LoomLauncher-3TSFW7QP.js.map
258
+ //# sourceMappingURL=LoomLauncher-GKQMR5E6.js.map
package/dist/README.md CHANGED
@@ -97,7 +97,7 @@ Each loom is a fully isolated container for your work:
97
97
 
98
98
  * **Git Worktree:** A separate filesystem at ~/project-looms/issue-25/. No stashing, no branch switching overhead.
99
99
 
100
- * **Database Branch:** (Neon support) Schema changes in this loom are isolated—they won't break your main environment or your other active looms.
100
+ * **Database Branch:** (Neon and Supabase support) Schema changes in this loom are isolated—they won't break your main environment or your other active looms.
101
101
 
102
102
  * **Environment Variables:** Each loom has its own environment files (`.env`, `.env.local`, `.env.development`, `.env.development.local`). Uses `development` by default, override with `DOTENV_FLOW_NODE_ENV`. See [Secret Storage Limitations](#multi-language-project-support) for frameworks with encrypted credentials.
103
103
 
@@ -153,7 +153,7 @@ Configuration
153
153
 
154
154
  ### 1. Interactive Setup (Recommended)
155
155
 
156
- The easiest way to configure iloom is the interactive wizard. It guides you through setting up your environment (GitHub/Linear, Neon, IDE).
156
+ The easiest way to configure iloom is the interactive wizard. It guides you through setting up your environment (GitHub/Linear, Neon/Supabase, IDE).
157
157
 
158
158
  You can even use natural language to jump-start the process:
159
159
 
@@ -206,6 +206,21 @@ This example shows how to configure a project-wide default (e.g., GitHub remote)
206
206
  }
207
207
  ```
208
208
 
209
+ Or, if using Supabase (requires a paid plan):
210
+
211
+ ```json
212
+ {
213
+ "databaseProviders": {
214
+ "supabase": {
215
+ "projectRef": "abcdefghijklmnop",
216
+ "parentBranch": "main"
217
+ }
218
+ }
219
+ }
220
+ ```
221
+
222
+ > Only one database provider can be active at a time. See [Database Branching](docs/iloom-commands.md#database-branching) for full details.
223
+
209
224
  **.iloom/settings.local.json (Gitignored)**
210
225
 
211
226
  ```json
@@ -14,13 +14,14 @@ import {
14
14
  SettingsManager,
15
15
  SpinAgentSettingsSchema,
16
16
  SummarySettingsSchema,
17
+ SupabaseSettingsSchema,
17
18
  WorkflowPermissionSchema,
18
19
  WorkflowPermissionSchemaNoDefaults,
19
20
  WorkflowsSettingsSchema,
20
21
  WorkflowsSettingsSchemaNoDefaults,
21
22
  mergeModeValues,
22
23
  redactSensitiveFields
23
- } from "./chunk-653XBU3L.js";
24
+ } from "./chunk-WGUGB54H.js";
24
25
  import "./chunk-VRPPI6GU.js";
25
26
  export {
26
27
  AgentSettingsSchema,
@@ -37,6 +38,7 @@ export {
37
38
  SettingsManager,
38
39
  SpinAgentSettingsSchema,
39
40
  SummarySettingsSchema,
41
+ SupabaseSettingsSchema,
40
42
  WorkflowPermissionSchema,
41
43
  WorkflowPermissionSchemaNoDefaults,
42
44
  WorkflowsSettingsSchema,
@@ -44,4 +46,4 @@ export {
44
46
  mergeModeValues,
45
47
  redactSensitiveFields
46
48
  };
47
- //# sourceMappingURL=SettingsManager-BMQCAXPP.js.map
49
+ //# sourceMappingURL=SettingsManager-KQU7OX7G.js.map
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ScriptCommandBase
4
- } from "./chunk-IHSA7VGI.js";
5
- import "./chunk-ZM2AYHMO.js";
4
+ } from "./chunk-QED2WB2D.js";
5
+ import "./chunk-SN4S5CWL.js";
6
6
  import "./chunk-VIQOQ463.js";
7
- import "./chunk-FV4KXBGO.js";
7
+ import "./chunk-4VQXMEEP.js";
8
8
  import "./chunk-K3QGG4O2.js";
9
- import "./chunk-OPQC4OWM.js";
10
- import "./chunk-653XBU3L.js";
9
+ import "./chunk-QNPJXO53.js";
10
+ import "./chunk-WGUGB54H.js";
11
11
  import "./chunk-4JZEQBWV.js";
12
12
  import "./chunk-FTYWGQFM.js";
13
13
  import "./chunk-VRPPI6GU.js";
@@ -24,4 +24,4 @@ var BuildCommand = class extends ScriptCommandBase {
24
24
  export {
25
25
  BuildCommand
26
26
  };
27
- //# sourceMappingURL=build-DMWSIME6.js.map
27
+ //# sourceMappingURL=build-V3KADFMO.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  findMainWorktreePathWithSettings
4
- } from "./chunk-OPQC4OWM.js";
4
+ } from "./chunk-QNPJXO53.js";
5
5
  import {
6
6
  MetadataManager
7
7
  } from "./chunk-4JZEQBWV.js";
@@ -70,4 +70,4 @@ export {
70
70
  archiveRecap,
71
71
  findArchivedRecap
72
72
  };
73
- //# sourceMappingURL=chunk-QFDM23CO.js.map
73
+ //# sourceMappingURL=chunk-3XEXT35Z.js.map
@@ -11,7 +11,7 @@ import {
11
11
  isPRBranch,
12
12
  isValidGitRepo,
13
13
  parseWorktreeList
14
- } from "./chunk-OPQC4OWM.js";
14
+ } from "./chunk-QNPJXO53.js";
15
15
  import {
16
16
  getLogger
17
17
  } from "./chunk-FTYWGQFM.js";
@@ -388,4 +388,4 @@ var GitWorktreeManager = class {
388
388
  export {
389
389
  GitWorktreeManager
390
390
  };
391
- //# sourceMappingURL=chunk-FV4KXBGO.js.map
391
+ //# sourceMappingURL=chunk-4VQXMEEP.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  calculatePortFromIdentifier
4
- } from "./chunk-BFF27W3S.js";
4
+ } from "./chunk-ZUIFO7B4.js";
5
5
 
6
6
  // src/lib/process/ProcessManager.ts
7
7
  import { execa } from "execa";
@@ -179,4 +179,4 @@ var ProcessManager = class {
179
179
  export {
180
180
  ProcessManager
181
181
  };
182
- //# sourceMappingURL=chunk-V5IYLWRA.js.map
182
+ //# sourceMappingURL=chunk-H3T3EPF3.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ClaudeService
4
- } from "./chunk-VA6CWUAE.js";
4
+ } from "./chunk-XCP2WDYA.js";
5
5
  import {
6
6
  logger
7
7
  } from "./chunk-VRPPI6GU.js";
@@ -63,4 +63,4 @@ var ClaudeContextManager = class {
63
63
  export {
64
64
  ClaudeContextManager
65
65
  };
66
- //# sourceMappingURL=chunk-QF2DROQR.js.map
66
+ //# sourceMappingURL=chunk-JDN4SPV3.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  IssueManagementProviderFactory
4
- } from "./chunk-R7DGN73N.js";
4
+ } from "./chunk-NTDY5AMO.js";
5
5
  import {
6
6
  openBrowser
7
7
  } from "./chunk-WEBMMJKL.js";
@@ -413,4 +413,4 @@ export {
413
413
  VCSProviderFactory,
414
414
  PRManager
415
415
  };
416
- //# sourceMappingURL=chunk-M3FBM4T3.js.map
416
+ //# sourceMappingURL=chunk-KQSV7FOG.js.map
@@ -38,7 +38,7 @@ import {
38
38
  } from "./chunk-KV4NU3RP.js";
39
39
  import {
40
40
  SettingsManager
41
- } from "./chunk-653XBU3L.js";
41
+ } from "./chunk-WGUGB54H.js";
42
42
  import {
43
43
  logger
44
44
  } from "./chunk-VRPPI6GU.js";
@@ -1436,4 +1436,4 @@ var IssueManagementProviderFactory = class {
1436
1436
  export {
1437
1437
  IssueManagementProviderFactory
1438
1438
  };
1439
- //# sourceMappingURL=chunk-R7DGN73N.js.map
1439
+ //# sourceMappingURL=chunk-NTDY5AMO.js.map
@@ -15,7 +15,7 @@ import {
15
15
  } from "./chunk-NPVA65KS.js";
16
16
  import {
17
17
  redactSensitiveFields
18
- } from "./chunk-653XBU3L.js";
18
+ } from "./chunk-WGUGB54H.js";
19
19
  import {
20
20
  getLogger
21
21
  } from "./chunk-FTYWGQFM.js";
@@ -256,4 +256,4 @@ var IssueTrackerFactory = class {
256
256
  export {
257
257
  IssueTrackerFactory
258
258
  };
259
- //# sourceMappingURL=chunk-35CBWAJL.js.map
259
+ //# sourceMappingURL=chunk-NUUFP53X.js.map
@@ -4,18 +4,18 @@ import {
4
4
  DatabaseManager,
5
5
  EnvironmentManager,
6
6
  LoomManager
7
- } from "./chunk-GWJWECZB.js";
7
+ } from "./chunk-VVQQIG64.js";
8
8
  import {
9
9
  buildDependencyMap,
10
10
  fetchChildIssueDetails,
11
11
  fetchChildIssues
12
- } from "./chunk-PMB6TYV4.js";
12
+ } from "./chunk-RFCAPHL5.js";
13
13
  import {
14
14
  matchIssueIdentifier
15
- } from "./chunk-ZM2AYHMO.js";
15
+ } from "./chunk-SN4S5CWL.js";
16
16
  import {
17
- createNeonProviderFromSettings
18
- } from "./chunk-HKEXRZMU.js";
17
+ createDatabaseProviderFromSettings
18
+ } from "./chunk-YUOVWWJX.js";
19
19
  import {
20
20
  TelemetryService
21
21
  } from "./chunk-MY2Q3FJ3.js";
@@ -32,10 +32,10 @@ import {
32
32
  } from "./chunk-CQHHEW2M.js";
33
33
  import {
34
34
  GitWorktreeManager
35
- } from "./chunk-FV4KXBGO.js";
35
+ } from "./chunk-4VQXMEEP.js";
36
36
  import {
37
37
  ClaudeContextManager
38
- } from "./chunk-QF2DROQR.js";
38
+ } from "./chunk-JDN4SPV3.js";
39
39
  import {
40
40
  extractSettingsOverrides
41
41
  } from "./chunk-GYCR2LOU.js";
@@ -47,7 +47,7 @@ import {
47
47
  } from "./chunk-772N5WCA.js";
48
48
  import {
49
49
  IssueTrackerFactory
50
- } from "./chunk-35CBWAJL.js";
50
+ } from "./chunk-NUUFP53X.js";
51
51
  import {
52
52
  GitHubService
53
53
  } from "./chunk-D4Q7T5KD.js";
@@ -63,10 +63,10 @@ import {
63
63
  import {
64
64
  findMainWorktreePathWithSettings,
65
65
  getRepoRoot
66
- } from "./chunk-OPQC4OWM.js";
66
+ } from "./chunk-QNPJXO53.js";
67
67
  import {
68
68
  SettingsManager
69
- } from "./chunk-653XBU3L.js";
69
+ } from "./chunk-WGUGB54H.js";
70
70
  import {
71
71
  getLogger
72
72
  } from "./chunk-FTYWGQFM.js";
@@ -148,7 +148,7 @@ async function launchFirstRunSetup() {
148
148
  logger.info("");
149
149
  logger.info("iloom will now launch an interactive configuration session with Claude.");
150
150
  await waitForKeypress("Press any key to start configuration...");
151
- const { InitCommand } = await import("./init-A6WRP77L.js");
151
+ const { InitCommand } = await import("./init-5HFY7JG6.js");
152
152
  const initCommand = new InitCommand();
153
153
  await initCommand.execute(
154
154
  "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."
@@ -197,9 +197,9 @@ var StartCommand = class {
197
197
  const mainWorktreePath = await findMainWorktreePathWithSettings();
198
198
  const settings = await this.settingsManager.loadSettings();
199
199
  const environmentManager = new EnvironmentManager();
200
- const neonProvider = createNeonProviderFromSettings(settings);
200
+ const databaseProvider = createDatabaseProviderFromSettings(settings);
201
201
  const databaseUrlEnvVarName = ((_b = (_a = settings.capabilities) == null ? void 0 : _a.database) == null ? void 0 : _b.databaseUrlEnvVarName) ?? "DATABASE_URL";
202
- const databaseManager = new DatabaseManager(neonProvider, environmentManager, databaseUrlEnvVarName);
202
+ const databaseManager = new DatabaseManager(databaseProvider, environmentManager, databaseUrlEnvVarName);
203
203
  const branchNaming = new DefaultBranchNamingService({ useClaude: true });
204
204
  this.loomManager = new LoomManager(
205
205
  new GitWorktreeManager(mainWorktreePath),
@@ -672,4 +672,4 @@ export {
672
672
  launchFirstRunSetup,
673
673
  StartCommand
674
674
  };
675
- //# sourceMappingURL=chunk-IS46GQRA.js.map
675
+ //# sourceMappingURL=chunk-PD75ZCFT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/first-run-setup.ts","../src/commands/start.ts"],"sourcesContent":["import { existsSync } from 'fs'\nimport { readFile } from 'fs/promises'\nimport path from 'path'\nimport chalk from 'chalk'\nimport { logger } from './logger.js'\nimport { FirstRunManager } from './FirstRunManager.js'\nimport { getRepoRoot } from './git.js'\nimport { promptConfirmation, waitForKeypress } from './prompt.js'\n\n/**\n * Get the project root path for first-run tracking\n * Uses git repo root if available, otherwise falls back to cwd\n * This ensures consistent path resolution regardless of where the CLI is run from\n */\nasync function getProjectRoot(): Promise<string> {\n\tconst repoRoot = await getRepoRoot()\n\tif (repoRoot) {\n\t\tlogger.debug(`getProjectRoot: Using git repo root: ${repoRoot}`)\n\t\treturn repoRoot\n\t}\n\tconst cwd = process.cwd()\n\tlogger.debug(`getProjectRoot: Not in git repo, using cwd: ${cwd}`)\n\treturn cwd\n}\n\n/**\n * Check if project needs first-run setup\n * Returns true if:\n * 1. Project is not tracked as configured globally AND\n * 2. .iloom directory is missing or settings files are empty\n *\n * Uses git repo root for path resolution to ensure consistent behavior\n * regardless of whether the CLI is run from a subdirectory or worktree\n */\nexport async function needsFirstRunSetup(): Promise<boolean> {\n\tconst projectRoot = await getProjectRoot()\n\tconst firstRunManager = new FirstRunManager()\n\n\t// Check if project is tracked as configured globally\n\tconst isConfigured = await firstRunManager.isProjectConfigured(projectRoot)\n\tif (isConfigured) {\n\t\tlogger.debug('needsFirstRunSetup: Project is tracked as configured globally')\n\t\treturn false\n\t}\n\n\tconst iloomDir = path.join(projectRoot, '.iloom')\n\n\t// Check if .iloom directory exists\n\tif (!existsSync(iloomDir)) {\n\t\treturn true\n\t}\n\n\t// Check if either settings file has meaningful content\n\tconst settingsPath = path.join(iloomDir, 'settings.json')\n\tconst settingsLocalPath = path.join(iloomDir, 'settings.local.json')\n\n\tconst hasSettings = await hasNonEmptySettings(settingsPath)\n\tconst hasLocalSettings = await hasNonEmptySettings(settingsLocalPath)\n\n\treturn !hasSettings && !hasLocalSettings\n}\n\nasync function hasNonEmptySettings(filePath: string): Promise<boolean> {\n\tif (!existsSync(filePath)) return false\n\ttry {\n\t\tconst content = await readFile(filePath, 'utf-8')\n\t\tconst parsed = JSON.parse(content)\n\t\treturn Object.keys(parsed).length > 0\n\t} catch {\n\t\treturn false\n\t}\n}\n\n/**\n * Display default configuration values in a formatted box\n */\nfunction displayDefaultsBox(): void {\n\tlogger.info(chalk.bold('Default Configuration:'))\n\tlogger.info('')\n\tlogger.info(` ${chalk.cyan('Main Branch:')} main`)\n\tlogger.info(` ${chalk.cyan('IDE:')} vscode`)\n\tlogger.info(` ${chalk.cyan('Issue Tracker:')} GitHub Issues`)\n\tlogger.info(` ${chalk.cyan('Merge Mode:')} local ${chalk.dim('(merge locally)')}`)\n\tlogger.info(` ${chalk.cyan('Base Port:')} 3000`)\n}\n\n/**\n * Launch interactive first-run setup via InitCommand\n * Shows defaults first, allows quick acceptance or full wizard\n */\nexport async function launchFirstRunSetup(): Promise<void> {\n\tlogger.info('First-time project setup detected.')\n\tlogger.info('')\n\n\t// Display the defaults\n\tdisplayDefaultsBox()\n\n\tlogger.info('')\n\n\t// Import prompt utility\n\n\t// Ask if defaults are OK (default to Yes)\n\tconst acceptDefaults = await promptConfirmation(\n\t\t'Are these defaults OK?',\n\t\ttrue // default to true, so Enter accepts\n\t)\n\n\tif (acceptDefaults) {\n\t\t// User accepted defaults - just mark as configured\n\t\tconst projectRoot = await getProjectRoot()\n\t\tconst firstRunManager = new FirstRunManager()\n\t\tawait firstRunManager.markProjectAsConfigured(projectRoot)\n\t\tlogger.info(chalk.green('Configuration complete! Using defaults.'))\n\t\tlogger.info('You can run `il init` anytime to customize settings.')\n\t\treturn\n\t}\n\n\t// User declined - launch full wizard\n\tlogger.info('')\n\tlogger.info('iloom will now launch an interactive configuration session with Claude.')\n\n\tawait waitForKeypress('Press any key to start configuration...')\n\n\tconst { InitCommand } = await import('../commands/init.js')\n\tconst initCommand = new InitCommand()\n\tawait initCommand.execute(\n\t\t'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.'\n\t)\n\t// Note: InitCommand.execute() now handles markProjectAsConfigured() internally\n\t// when the guided init completes successfully\n\n\tlogger.info('Configuration complete! Continuing with your original command...')\n}\n","import path from 'path'\nimport { getLogger } from '../utils/logger-context.js'\nimport type { IssueTracker } from '../lib/IssueTracker.js'\nimport { GitHubService } from '../lib/GitHubService.js'\nimport { LoomManager } from '../lib/LoomManager.js'\nimport { DefaultBranchNamingService } from '../lib/BranchNamingService.js'\nimport { GitWorktreeManager } from '../lib/GitWorktreeManager.js'\nimport { EnvironmentManager } from '../lib/EnvironmentManager.js'\nimport { ClaudeContextManager } from '../lib/ClaudeContextManager.js'\nimport { ProjectCapabilityDetector } from '../lib/ProjectCapabilityDetector.js'\nimport { CLIIsolationManager } from '../lib/CLIIsolationManager.js'\nimport { SettingsManager } from '../lib/SettingsManager.js'\nimport { AgentManager } from '../lib/AgentManager.js'\nimport { DatabaseManager } from '../lib/DatabaseManager.js'\nimport { findMainWorktreePathWithSettings } from '../utils/git.js'\nimport { matchIssueIdentifier } from '../utils/IdentifierParser.js'\nimport { loadEnvIntoProcess } from '../utils/env.js'\nimport { extractSettingsOverrides } from '../utils/cli-overrides.js'\nimport { createDatabaseProviderFromSettings } from '../utils/database-helpers.js'\nimport { getConfiguredRepoFromSettings, hasMultipleRemotes } from '../utils/remote.js'\nimport { capitalizeFirstLetter } from '../utils/text.js'\nimport type { StartOptions, StartResult } from '../types/index.js'\nimport { fetchChildIssues, fetchChildIssueDetails } from '../utils/list-children.js'\nimport { buildDependencyMap } from '../utils/dependency-map.js'\nimport { IssueTrackerFactory } from '../lib/IssueTrackerFactory.js'\nimport { launchFirstRunSetup, needsFirstRunSetup } from '../utils/first-run-setup.js'\nimport { isInteractiveEnvironment, promptConfirmation } from '../utils/prompt.js'\nimport { TelemetryService } from '../lib/TelemetryService.js'\nimport type { LoomCreatedProperties } from '../types/telemetry.js'\nimport { resolveRecapFilePath, readRecapFile, writeRecapFile } from '../utils/mcp.js'\n\nexport interface StartCommandInput {\n\tidentifier: string\n\toptions: StartOptions\n}\n\nexport interface ParsedInput {\n\ttype: 'issue' | 'pr' | 'branch' | 'description' | 'epic'\n\tnumber?: string | number\n\tbranchName?: string\n\toriginalInput: string\n}\n\nexport class StartCommand {\n\tprivate issueTracker: IssueTracker\n\tprivate loomManager: LoomManager | null = null\n\tprivate settingsManager: SettingsManager\n\tprivate providedLoomManager: LoomManager | undefined\n\tprivate githubService: GitHubService | null = null\n\n\tconstructor(\n\t\tissueTracker: IssueTracker,\n\t\tloomManager?: LoomManager,\n\t\t_agentManager?: AgentManager, // Kept for API compatibility\n\t\tsettingsManager?: SettingsManager\n\t) {\n\t\tthis.issueTracker = issueTracker\n\t\tthis.settingsManager = settingsManager ?? new SettingsManager()\n\t\t// Store provided LoomManager for testing, but don't initialize yet\n\t\tthis.providedLoomManager = loomManager\n\n\t\t// Load environment variables first\n\t\tconst envResult = loadEnvIntoProcess()\n\t\tif (envResult.error) {\n\t\t\tgetLogger().debug(`Environment loading warning: ${envResult.error.message}`)\n\t\t}\n\t\tif (envResult.parsed) {\n\t\t\tgetLogger().debug(`Loaded ${Object.keys(envResult.parsed).length} environment variables`)\n\t\t}\n\t}\n\n\t/**\n\t * Get or create a GitHubService instance for PR operations\n\t * Used when the configured issue tracker doesn't support PRs (e.g., Linear)\n\t */\n\tprivate getGitHubService(): GitHubService {\n\t\tthis.githubService ??= new GitHubService()\n\t\treturn this.githubService\n\t}\n\n\t/**\n\t * Initialize LoomManager with the main worktree path\n\t * Uses lazy initialization to ensure we have the correct path\n\t */\n\tprivate async initializeLoomManager(): Promise<LoomManager> {\n\t\tif (this.loomManager) {\n\t\t\treturn this.loomManager\n\t\t}\n\n\t\tif (this.providedLoomManager) {\n\t\t\tthis.loomManager = this.providedLoomManager\n\t\t\treturn this.loomManager\n\t\t}\n\n\t\t// Find main worktree path\n\t\tconst mainWorktreePath = await findMainWorktreePathWithSettings()\n\n\t\t// Load settings to get database configuration\n\t\tconst settings = await this.settingsManager.loadSettings()\n\n\t\t// Create DatabaseManager with NeonProvider and EnvironmentManager\n\t\tconst environmentManager = new EnvironmentManager()\n\t\tconst databaseProvider = createDatabaseProviderFromSettings(settings)\n\t\tconst databaseUrlEnvVarName = settings.capabilities?.database?.databaseUrlEnvVarName ?? 'DATABASE_URL'\n\n\t\tconst databaseManager = new DatabaseManager(databaseProvider, environmentManager, databaseUrlEnvVarName)\n\n\t\t// Create BranchNamingService (defaults to Claude-based strategy)\n\t\tconst branchNaming = new DefaultBranchNamingService({ useClaude: true })\n\n\t\tthis.loomManager = new LoomManager(\n\t\t\tnew GitWorktreeManager(mainWorktreePath),\n\t\t\tthis.issueTracker,\n\t\t\tbranchNaming, // Add branch naming service\n\t\t\tenvironmentManager, // Reuse same instance\n\t\t\tnew ClaudeContextManager(),\n\t\t\tnew ProjectCapabilityDetector(),\n\t\t\tnew CLIIsolationManager(),\n\t\t\tthis.settingsManager, // Use same instance with CLI overrides\n\t\t\tdatabaseManager // Add database manager\n\t\t)\n\n\t\treturn this.loomManager\n\t}\n\n\t/**\n\t * Main entry point for the start command\n\t */\n\tpublic async execute(input: StartCommandInput): Promise<StartResult | void> {\n\t\tconst isJsonMode = input.options.json === true\n\n\t\t// Handle --create-only flag: disable all launch components\n\t\tif (input.options.createOnly) {\n\t\t\tinput.options.claude = false\n\t\t\tinput.options.code = false\n\t\t\tinput.options.devServer = false\n\t\t\tinput.options.terminal = false\n\t\t}\n\n\t\ttry {\n\t\t\t// Step 0: Load settings and get configured repo for GitHub operations\n\t\t\tconst initialSettings = await this.settingsManager.loadSettings()\n\n\t\t\t// Skip first-run setup in JSON mode\n\t\t\tif (!isJsonMode && (process.env.FORCE_FIRST_TIME_SETUP === \"true\" || await needsFirstRunSetup())) {\n\t\t\t\tawait launchFirstRunSetup()\n\t\t\t\t// Reload settings and recreate issueTracker if provider changed during setup\n\t\t\t\tconst newSettings = await this.settingsManager.loadSettings()\n\t\t\t\tconst newProvider = newSettings.issueManagement?.provider ?? 'github'\n\t\t\t\tif (newProvider !== this.issueTracker.providerName) {\n\t\t\t\t\tgetLogger().debug(`Reinitializing issue tracker: provider changed to \"${newProvider}\"`)\n\t\t\t\t\tthis.issueTracker = IssueTrackerFactory.create(newSettings)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet repo: string | undefined\n\n\t\t\t// Only get repo if we have multiple remotes (prehook already validated config)\n\t\t\tif (this.issueTracker.providerName === 'github' && (await hasMultipleRemotes())) {\n\t\t\t\t// Only relevant for GitHub - Linear doesn't use repo info\n\t\t\t\trepo = await getConfiguredRepoFromSettings(initialSettings)\n\t\t\t\tgetLogger().info(`Using GitHub repository: ${repo}`)\n\t\t\t}\n\n\t\t\t// Step 0.5: Initialize LoomManager with main worktree path\n\t\t\tconst loomManager = await this.initializeLoomManager()\n\n\t\t\t// Step 0.6: Detect if running from inside an existing loom (for nested loom support)\n\t\t\tlet parentLoom = await this.detectParentLoom(loomManager)\n\n\t\t\t// Step 1: Parse and validate input (pass repo to methods)\n\t\t\tconst parsed = await this.parseInput(input.identifier, repo)\n\n\t\t\t// Step 2: Validate based on type\n\t\t\tawait this.validateInput(parsed, repo)\n\n\t\t\t// Step 2.4: Handle child loom decision\n\t\t\tif (parentLoom) {\n\n\t\t\t\t// Format display message based on parent type\n\t\t\t\tconst parentDisplay = parentLoom.type === 'issue'\n\t\t\t\t\t? `issue #${parentLoom.identifier}`\n\t\t\t\t\t: parentLoom.type === 'pr'\n\t\t\t\t\t? `PR #${parentLoom.identifier}`\n\t\t\t\t\t: `branch ${parentLoom.identifier}`\n\n\t\t\t\t// Check for explicit flag first\n\t\t\t\tif (input.options.childLoom === true) {\n\t\t\t\t\t// --child-loom flag: force child loom (no prompt)\n\t\t\t\t\tgetLogger().info(`Creating as child loom of ${parentDisplay} (--child-loom flag)`)\n\t\t\t\t} else if (input.options.childLoom === false) {\n\t\t\t\t\t// --no-child-loom flag: force independent (no prompt)\n\t\t\t\t\tparentLoom = null\n\t\t\t\t\tgetLogger().info('Creating as independent loom (--no-child-loom flag)')\n\t\t\t\t} else {\n\t\t\t\t\t// No flag: use existing behavior (prompt or error if non-interactive)\n\t\t\t\t\t// JSON mode requires explicit flag\n\t\t\t\t\tif (isJsonMode) {\n\t\t\t\t\t\tthrow new Error('JSON mode requires explicit --child-loom or --no-child-loom flag when running from inside a loom')\n\t\t\t\t\t}\n\t\t\t\t\tlet createAsChild = true // Default for non-interactive\n\t\t\t\t\tif (isInteractiveEnvironment()) {\n\t\t\t\t\t\tcreateAsChild = await promptConfirmation(\n\t\t\t\t\t\t\t`You are not in your main worktree. Create as a child loom of ${parentDisplay}?`,\n\t\t\t\t\t\t\ttrue // Default yes\n\t\t\t\t\t\t)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new Error('Non-interactive environment detected, use either --child-loom or --no-child-loom to specify behavior')\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!createAsChild) {\n\t\t\t\t\t\tparentLoom = null // User declined, proceed as normal loom\n\t\t\t\t\t\tgetLogger().info('Creating as independent loom')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (input.options.childLoom === true) {\n\t\t\t\t// --child-loom flag but not in a parent loom - ignore silently (per requirements)\n\t\t\t\tgetLogger().debug('--child-loom flag provided but not running from inside an existing loom (ignored)')\n\t\t\t}\n\t\t\t// Note: --no-child-loom when no parent is a no-op (already independent)\n\n\t\t\t// Step 2.5: Handle description input - create issue\n\t\t\tif (parsed.type === 'description') {\n\t\t\t\tgetLogger().info('Creating issue from description...')\n\t\t\t\t// Apply first-letter capitalization to title and body\n\t\t\t\tconst title = capitalizeFirstLetter(parsed.originalInput)\n\t\t\t\tconst body = input.options.body ? capitalizeFirstLetter(input.options.body) : \"\"\n\t\t\t\tconst result = await this.issueTracker.createIssue(\n\t\t\t\t\ttitle, // Use capitalized description as title\n\t\t\t\t\tbody // Use capitalized body or empty\n\t\t\t\t)\n\t\t\t\tgetLogger().success(`Created issue #${result.number}: ${result.url}`)\n\t\t\t\t// Update parsed to be an issue type with the new number\n\t\t\t\tparsed.type = 'issue'\n\t\t\t\tparsed.number = result.number\n\t\t\t}\n\n\t\t\t// Step 2.6: Detect epic (issue with child issues) and handle --epic/--no-epic flags\n\t\t\tlet childIssueNumbers: string[] = []\n\t\t\tlet childIssues: Array<{ number: string; title: string; body: string; url: string }> = []\n\t\t\tlet dependencyMap: Record<string, string[]> = {}\n\n\t\t\tif (parsed.type === 'issue' && parsed.number) {\n\t\t\t\tconst settings = await this.settingsManager.loadSettings()\n\t\t\t\tconst epicIssueTracker = IssueTrackerFactory.create(settings)\n\t\t\t\tlet children: Awaited<ReturnType<typeof fetchChildIssues>> = []\n\t\t\t\ttry {\n\t\t\t\t\tchildren = await fetchChildIssues(String(parsed.number), epicIssueTracker, repo)\n\t\t\t\t} catch (error) {\n\t\t\t\t\tgetLogger().warn(`Failed to check for child issues: ${error instanceof Error ? error.message : 'Unknown error'}. Proceeding as normal loom.`)\n\t\t\t\t}\n\n\t\t\t\tif (children.length > 0) {\n\t\t\t\t\tchildIssueNumbers = children.map(c => c.id)\n\t\t\t\t\tlet createAsEpic = false\n\n\t\t\t\t\tif (input.options.epic === true) {\n\t\t\t\t\t\t// --epic flag: force epic mode (no prompt)\n\t\t\t\t\t\tcreateAsEpic = true\n\t\t\t\t\t\tgetLogger().info(`Creating as epic loom with ${children.length} child issue(s) (--epic flag)`)\n\t\t\t\t\t} else if (input.options.epic === false) {\n\t\t\t\t\t\t// --no-epic flag: proceed as normal loom (no prompt)\n\t\t\t\t\t\tcreateAsEpic = false\n\t\t\t\t\t\tgetLogger().info('Creating as normal loom (--no-epic flag)')\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// No flag: prompt or error\n\t\t\t\t\t\tif (isJsonMode) {\n\t\t\t\t\t\t\tthrow new Error('JSON mode requires explicit --epic or --no-epic flag when issue has child issues')\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (isInteractiveEnvironment()) {\n\t\t\t\t\t\t\tcreateAsEpic = await promptConfirmation(\n\t\t\t\t\t\t\t\t`This issue has ${children.length} child issue(s). Create as epic loom?`,\n\t\t\t\t\t\t\t\ttrue // Default yes\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthrow new Error('Non-interactive environment detected, use either --epic or --no-epic to specify behavior')\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (createAsEpic) {\n\t\t\t\t\t\tparsed.type = 'epic'\n\n\t\t\t\t\t\t// Fetch rich child issue details and dependency map for epic metadata\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst [details, depMap] = await Promise.all([\n\t\t\t\t\t\t\t\tfetchChildIssueDetails(String(parsed.number), epicIssueTracker, repo),\n\t\t\t\t\t\t\t\tbuildDependencyMap(childIssueNumbers, settings, repo),\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\tchildIssues = details ?? []\n\t\t\t\t\t\t\tdependencyMap = depMap ?? {}\n\t\t\t\t\t\t\tgetLogger().info(`Fetched ${childIssues.length} child issue details and dependency map`)\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t// Revert to issue type since child data fetch failed\n\t\t\t\t\t\t\t// il spin needs child data to enter swarm mode, so an epic without it would be broken\n\t\t\t\t\t\t\tparsed.type = 'issue'\n\t\t\t\t\t\t\tchildIssueNumbers = []\n\t\t\t\t\t\t\tgetLogger().warn(`Failed to fetch epic child data, reverting to normal loom: ${error instanceof Error ? error.message : String(error)}`)\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Not creating as epic, clear child issue numbers\n\t\t\t\t\t\tchildIssueNumbers = []\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// --epic or --no-epic flags are silently ignored when there are no child issues\n\t\t\t}\n\n\t\t\t// Step 2.7: Confirm bypassPermissions mode if applicable\n\t\t\t// Only prompt in interactive mode when Claude is enabled.\n\t\t\t// Skip when: --no-claude (Claude won't launch now), JSON mode (non-interactive).\n\t\t\t// The explicit --one-shot=bypassPermissions flag is sufficient intent.\n\t\t\t// The warning is shown again when Claude launches via 'il spin'.\n\t\t\tif (input.options.oneShot === 'bypassPermissions' && input.options.claude !== false && !isJsonMode) {\n\t\t\t\tconst confirmed = await promptConfirmation(\n\t\t\t\t\t'WARNING: bypassPermissions mode will allow Claude to execute all tool calls without confirmation. ' +\n\t\t\t\t\t'This can be dangerous. Do you want to proceed?'\n\t\t\t\t)\n\t\t\t\tif (!confirmed) {\n\t\t\t\t\tgetLogger().info('Operation cancelled by user')\n\t\t\t\t\tprocess.exit(0)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Step 2.8: Load workflow-specific settings with CLI overrides\n\t\t\tconst cliOverrides = extractSettingsOverrides()\n\t\t\tconst settings = await this.settingsManager.loadSettings(undefined, cliOverrides)\n\t\t\tconst workflowType = parsed.type === 'branch' ? 'regular' : parsed.type === 'epic' ? 'issue' : parsed.type\n\t\t\tconst workflowConfig = settings.workflows?.[workflowType]\n\n\t\t\t// Step 2.9: Extract raw --set arguments and executable path for forwarding to spin\n\t\t\tconst { extractRawSetArguments, getExecutablePath } = await import('../utils/cli-overrides.js')\n\t\t\tconst setArguments = extractRawSetArguments()\n\t\t\tconst executablePath = getExecutablePath()\n\n\t\t\t// Step 3: Log success and create loom\n\t\t\tgetLogger().info(`Validated input: ${this.formatParsedInput(parsed)}`)\n\n\t\t\t// Step 4: Create loom using LoomManager\n\t\t\tconst identifier =\n\t\t\t\tparsed.type === 'branch'\n\t\t\t\t\t? parsed.branchName ?? ''\n\t\t\t\t\t: parsed.number ?? 0\n\n\t\t\t// Apply configuration precedence: CLI flags > workflow config > defaults (true)\n\t\t\tconst enableClaude = input.options.claude ?? workflowConfig?.startAiAgent ?? true\n\t\t\tconst enableCode = input.options.code ?? workflowConfig?.startIde ?? true\n\t\t\tconst enableDevServer = input.options.devServer ?? workflowConfig?.startDevServer ?? true\n\t\t\tconst enableTerminal = input.options.terminal ?? workflowConfig?.startTerminal ?? false\n\n\t\t\tgetLogger().debug('Final workflow config values:', {\n\t\t\t\tenableClaude,\n\t\t\t\tenableCode,\n\t\t\t\tenableDevServer,\n\t\t\t\tenableTerminal,\n\t\t\t})\n\n\t\t\tconst loom = await loomManager.createIloom({\n\t\t\t\ttype: parsed.type,\n\t\t\t\tidentifier,\n\t\t\t\toriginalInput: parsed.originalInput,\n\t\t\t\t...(parentLoom && { parentLoom }),\n\t\t\t\toptions: {\n\t\t\t\t\tenableClaude,\n\t\t\t\t\tenableCode,\n\t\t\t\t\tenableDevServer,\n\t\t\t\t\tenableTerminal,\n\t\t\t\t\t...(input.options.oneShot && { oneShot: input.options.oneShot }),\n\t\t\t\t\t...(input.options.complexity && { complexity: input.options.complexity }),\n\t\t\t\t\t...(setArguments.length > 0 && { setArguments }),\n\t\t\t\t\t...(executablePath && { executablePath }),\n\t\t\t\t\t...(childIssueNumbers.length > 0 && { childIssueNumbers }),\n\t\t\t\t\t...(childIssues.length > 0 && { childIssues }),\n\t\t\t\t\t...(Object.keys(dependencyMap).length > 0 && { dependencyMap }),\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tgetLogger().success(`Created loom: ${loom.id} at ${loom.path}`)\n\n\t\t\t// Set recap complexity if overridden via CLI flag\n\t\t\tif (input.options.complexity) {\n\t\t\t\ttry {\n\t\t\t\t\tconst recapFilePath = resolveRecapFilePath(loom.path)\n\t\t\t\t\tconst recap = await readRecapFile(recapFilePath)\n\t\t\t\t\trecap.complexity = { level: input.options.complexity, reason: 'Overridden via CLI flag', timestamp: new Date().toISOString() }\n\t\t\t\t\tawait writeRecapFile(recapFilePath, recap)\n\t\t\t\t} catch (error) {\n\t\t\t\t\tgetLogger().debug(`Failed to set recap complexity: ${error instanceof Error ? error.message : error}`)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Track loom.created telemetry event\n\t\t\ttry {\n\t\t\t\tconst oneShotMap: Record<string, LoomCreatedProperties['one_shot_mode']> = {\n\t\t\t\t\tnoReview: 'skip-reviews',\n\t\t\t\t\tbypassPermissions: 'yolo',\n\t\t\t\t}\n\t\t\t\tTelemetryService.getInstance().track('loom.created', {\n\t\t\t\t\tsource_type: parsed.type === 'epic' ? 'issue' : parsed.type as LoomCreatedProperties['source_type'],\n\t\t\t\t\ttracker: this.issueTracker.providerName,\n\t\t\t\t\tis_child_loom: !!parentLoom,\n\t\t\t\t\tone_shot_mode: oneShotMap[input.options.oneShot ?? ''] ?? 'default',\n\t\t\t\t\tcomplexity_override: !!input.options.complexity,\n\t\t\t\t\tcreate_only: !!input.options.createOnly,\n\t\t\t\t})\n\t\t\t} catch (error: unknown) {\n\t\t\t\tgetLogger().debug(`Failed to track loom.created telemetry: ${error instanceof Error ? error.message : String(error)}`)\n\t\t\t}\n\n\t\t\tgetLogger().info(` Branch: ${loom.branch}`)\n\t\t\t// Only show port for web projects\n\t\t\tif (loom.capabilities?.includes('web')) {\n\t\t\t\tgetLogger().info(` Port: ${loom.port}`)\n\t\t\t}\n\t\t\tif (loom.issueData?.title) {\n\t\t\t\tgetLogger().info(` Title: ${loom.issueData.title}`)\n\t\t\t}\n\t\t\tif (parsed.type === 'epic') {\n\t\t\t\tgetLogger().info(` Epic: yes (${childIssueNumbers.length} child issue(s))`)\n\t\t\t}\n\n\t\t\t// Return StartResult in JSON mode\n\t\t\tif (isJsonMode) {\n\t\t\t\treturn {\n\t\t\t\t\tid: loom.id,\n\t\t\t\t\tpath: loom.path,\n\t\t\t\t\tbranch: loom.branch,\n\t\t\t\t\ttype: parsed.type,\n\t\t\t\t\tidentifier: loom.identifier,\n\t\t\t\t\t...(loom.port !== undefined && { port: loom.port }),\n\t\t\t\t\t...(loom.issueData?.title && { title: loom.issueData.title }),\n\t\t\t\t\t...(loom.capabilities && { capabilities: loom.capabilities }),\n\t\t\t\t\t...(childIssueNumbers.length > 0 && { childIssueNumbers }),\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof Error) {\n\t\t\t\tgetLogger().error(`${error.message}`)\n\t\t\t} else {\n\t\t\t\tgetLogger().error('An unknown error occurred')\n\t\t\t}\n\t\t\tthrow error\n\t\t}\n\t}\n\n\t/**\n\t * Parse input to determine type and extract relevant data\n\t */\n\tprivate async parseInput(identifier: string, repo?: string): Promise<ParsedInput> {\n\t\t// Check if user wants to skip capitalization by prefixing with space\n\t\t// We preserve this for description types so capitalizeFirstLetter() can handle it\n\t\tconst hasLeadingSpace = identifier.startsWith(' ')\n\n\t\t// Handle empty input\n\t\tconst trimmedIdentifier = identifier.trim()\n\t\tif (!trimmedIdentifier) {\n\t\t\tthrow new Error('Missing required argument: identifier')\n\t\t}\n\n\t\t// Check for description: >15 chars AND has spaces (likely a natural language description)\n\t\t// Short inputs with spaces are rejected later as invalid branch names\n\t\tconst spaceCount = (trimmedIdentifier.match(/ /g) ?? []).length\n\t\tif (trimmedIdentifier.length > 15 && spaceCount >= 1) {\n\t\t\t// Preserve leading space if present so capitalizeFirstLetter() can detect the override\n\t\t\treturn {\n\t\t\t\ttype: 'description',\n\t\t\t\toriginalInput: hasLeadingSpace ? ' ' + trimmedIdentifier : trimmedIdentifier,\n\t\t\t}\n\t\t}\n\n\t\t// Check for PR-specific formats: pr/123, PR-123, PR/123, Pr-123 (case-insensitive)\n\t\tconst prPattern = /^pr[/-](\\d+)$/i\n\t\tconst prMatch = trimmedIdentifier.match(prPattern)\n\t\tif (prMatch?.[1]) {\n\t\t\treturn {\n\t\t\t\ttype: 'pr',\n\t\t\t\tnumber: parseInt(prMatch[1], 10),\n\t\t\t\toriginalInput: trimmedIdentifier,\n\t\t\t}\n\t\t}\n\n\t\t// Check for issue identifier patterns using shared utility\n\t\t// - Project key pattern: ENG-123 (requires at least 2 letters before dash)\n\t\t// - Numeric pattern: #123 or 123 (GitHub format)\n\t\tconst identifierMatch = matchIssueIdentifier(trimmedIdentifier)\n\n\t\tif (identifierMatch.type === 'project-key' && identifierMatch.identifier) {\n\t\t\t// Use IssueTracker to validate it exists\n\t\t\tconst detection = await this.issueTracker.detectInputType(\n\t\t\t\ttrimmedIdentifier,\n\t\t\t\trepo\n\t\t\t)\n\n\t\t\tif (detection.type === 'issue' && detection.identifier) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'issue',\n\t\t\t\t\tnumber: detection.identifier, // Keep as string for project key identifiers\n\t\t\t\t\toriginalInput: trimmedIdentifier,\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Project key identifier format matched but not found\n\t\t\tthrow new Error(\n\t\t\t\t`Could not find issue matching identifier ${identifierMatch.identifier}`\n\t\t\t)\n\t\t}\n\n\t\t// Check for numeric pattern (could be issue or PR)\n\t\tif (identifierMatch.type === 'numeric' && identifierMatch.identifier) {\n\t\t\tconst number = parseInt(identifierMatch.identifier, 10)\n\n\t\t\t// If issue tracker supports PRs, use it for detection\n\t\t\tif (this.issueTracker.supportsPullRequests) {\n\t\t\t\tconst detection = await this.issueTracker.detectInputType(\n\t\t\t\t\ttrimmedIdentifier,\n\t\t\t\t\trepo\n\t\t\t\t)\n\n\t\t\t\tif (detection.type === 'pr') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'pr',\n\t\t\t\t\t\tnumber: detection.identifier ? parseInt(detection.identifier, 10) : number,\n\t\t\t\t\t\toriginalInput: trimmedIdentifier,\n\t\t\t\t\t}\n\t\t\t\t} else if (detection.type === 'issue') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'issue',\n\t\t\t\t\t\tnumber: detection.identifier ? parseInt(detection.identifier, 10) : number,\n\t\t\t\t\t\toriginalInput: trimmedIdentifier,\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(`Could not find issue or PR #${number}`)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Issue tracker doesn't support PRs (e.g., Linear, Jira)\n\t\t\t\t// Check GitHub first for PR, then fall back to issue tracker for issues\n\t\t\t\tconst githubService = this.getGitHubService()\n\t\t\t\tconst detection = await githubService.detectInputType(trimmedIdentifier, repo)\n\n\t\t\t\tif (detection.type === 'pr') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'pr',\n\t\t\t\t\t\tnumber: detection.identifier ? parseInt(detection.identifier, 10) : number,\n\t\t\t\t\t\toriginalInput: trimmedIdentifier,\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Not a GitHub PR - try the configured issue tracker\n\t\t\t\t\t// This allows future trackers with numeric IDs to work naturally\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'issue',\n\t\t\t\t\t\tnumber,\n\t\t\t\t\t\toriginalInput: trimmedIdentifier,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Treat as branch name\n\t\treturn {\n\t\t\ttype: 'branch',\n\t\t\tbranchName: trimmedIdentifier,\n\t\t\toriginalInput: trimmedIdentifier,\n\t\t}\n\t}\n\n\t/**\n\t * Validate the parsed input based on its type\n\t */\n\tprivate async validateInput(parsed: ParsedInput, repo?: string): Promise<void> {\n\t\tswitch (parsed.type) {\n\t\t\tcase 'pr': {\n\t\t\t\tif (!parsed.number) {\n\t\t\t\t\tthrow new Error('Invalid PR number')\n\t\t\t\t}\n\n\t\t\t\t// Determine which service to use for PR operations\n\t\t\t\tif (this.issueTracker.supportsPullRequests && this.issueTracker.fetchPR && this.issueTracker.validatePRState) {\n\t\t\t\t\t// Use issue tracker for PR operations (e.g., GitHub)\n\t\t\t\t\tconst pr = await this.issueTracker.fetchPR(parsed.number, repo)\n\t\t\t\t\tawait this.issueTracker.validatePRState(pr)\n\t\t\t\t} else {\n\t\t\t\t\t// Use GitHubService for PR operations when issue tracker doesn't support PRs (e.g., Linear)\n\t\t\t\t\tconst githubService = this.getGitHubService()\n\t\t\t\t\tconst pr = await githubService.fetchPR(parsed.number as number, repo)\n\t\t\t\t\tawait githubService.validatePRState(pr)\n\t\t\t\t}\n\t\t\t\tgetLogger().debug(`Validated PR #${parsed.number}`)\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tcase 'issue': {\n\t\t\t\tif (!parsed.number) {\n\t\t\t\t\tthrow new Error('Invalid issue number')\n\t\t\t\t}\n\t\t\t\t// Fetch and validate issue state\n\t\t\t\tconst issue = await this.issueTracker.fetchIssue(parsed.number, repo)\n\t\t\t\tawait this.issueTracker.validateIssueState(issue)\n\t\t\t\tgetLogger().debug(`Validated issue #${parsed.number}`)\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tcase 'branch': {\n\t\t\t\tif (!parsed.branchName) {\n\t\t\t\t\tthrow new Error('Invalid branch name')\n\t\t\t\t}\n\t\t\t\t// Validate branch name characters (from bash script line 586)\n\t\t\t\tif (!this.isValidBranchName(parsed.branchName)) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Invalid branch name. Use only letters, numbers, hyphens, underscores, and slashes'\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tgetLogger().debug(`Validated branch name: ${parsed.branchName}`)\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tcase 'description': {\n\t\t\t\t// Description inputs are valid - they will be converted to issues\n\t\t\t\tgetLogger().debug('Detected description input', {\n\t\t\t\t\tlength: parsed.originalInput.length\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tdefault: {\n\t\t\t\tconst unknownType = parsed as { type: string }\n\t\t\t\tthrow new Error(`Unknown input type: ${unknownType.type}`)\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Validate branch name format\n\t */\n\tprivate isValidBranchName(branch: string): boolean {\n\t\t// Pattern from bash script line 586\n\t\treturn /^[a-zA-Z0-9/_-]+$/.test(branch)\n\t}\n\n\t/**\n\t * Format parsed input for display\n\t */\n\tprivate formatParsedInput(parsed: ParsedInput): string {\n\t\tswitch (parsed.type) {\n\t\t\tcase 'pr':\n\t\t\t\treturn `PR #${parsed.number}`\n\t\t\tcase 'issue':\n\t\t\t\treturn `Issue #${parsed.number}`\n\t\t\tcase 'epic':\n\t\t\t\treturn `Epic #${parsed.number}`\n\t\t\tcase 'branch':\n\t\t\t\treturn `Branch '${parsed.branchName}'`\n\t\t\tcase 'description':\n\t\t\t\treturn `Description: ${parsed.originalInput.slice(0, 50)}...`\n\t\t\tdefault:\n\t\t\t\treturn 'Unknown input'\n\t\t}\n\t}\n\n\t/**\n\t * Detect if running from inside an existing loom worktree\n\t * Returns parent loom info if detected, null otherwise\n\t */\n\tprivate async detectParentLoom(loomManager: LoomManager): Promise<{\n\t\ttype: 'issue' | 'pr' | 'branch' | 'epic'\n\t\tidentifier: string | number\n\t\tbranchName: string\n\t\tworktreePath: string\n\t\tdatabaseBranch?: string\n\t} | null> {\n\t\ttry {\n\t\t\tconst cwd = process.cwd()\n\t\t\tconst looms = await loomManager.listLooms()\n\n\t\t\tif (!looms) {\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\t// Get main worktree path to exclude it from valid parents\n\t\t\tconst mainWorktreePath = await findMainWorktreePathWithSettings()\n\n\t\t\t// Find loom containing current directory\n\t\t\t// Fix #2: Add path.sep check to prevent false positives (e.g., issue-123 vs issue-1234)\n\t\t\t// Exclude main worktree from being a valid parent\n\t\t\tconst parentLoom = looms.find(loom => {\n\t\t\t\t// Skip main worktree - it shouldn't be a parent for child looms\n\t\t\t\tif (loom.path === mainWorktreePath) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\t// Either exact match OR cwd starts with loom.path followed by path separator\n\t\t\t\treturn cwd === loom.path || cwd.startsWith(loom.path + path.sep)\n\t\t\t})\n\t\t\tif (!parentLoom) {\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\tgetLogger().debug(`Detected parent loom: ${parentLoom.type} ${parentLoom.identifier} at ${parentLoom.path}`)\n\n\t\t\tconst result: {\n\t\t\t\ttype: 'issue' | 'pr' | 'branch' | 'epic'\n\t\t\t\tidentifier: string | number\n\t\t\t\tbranchName: string\n\t\t\t\tworktreePath: string\n\t\t\t\tdatabaseBranch?: string\n\t\t\t} = {\n\t\t\t\ttype: parentLoom.type,\n\t\t\t\tidentifier: parentLoom.identifier,\n\t\t\t\tbranchName: parentLoom.branch,\n\t\t\t\tworktreePath: parentLoom.path,\n\t\t\t}\n\n\t\t\t// Only include databaseBranch if it exists (exactOptionalPropertyTypes compatibility)\n\t\t\tif (parentLoom.databaseBranch) {\n\t\t\t\tresult.databaseBranch = parentLoom.databaseBranch\n\t\t\t}\n\n\t\t\t// Try to get database branch from parent's .env file via reverse lookup\n\t\t\tif (!result.databaseBranch) {\n\t\t\t\tconst databaseBranch = await loomManager.getDatabaseBranchForLoom(parentLoom.path)\n\t\t\t\tif (databaseBranch) {\n\t\t\t\t\tresult.databaseBranch = databaseBranch\n\t\t\t\t\tgetLogger().debug(`Detected parent database branch: ${databaseBranch}`)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result\n\t\t} catch (error) {\n\t\t\t// If detection fails for any reason, just return null (don't break the start workflow)\n\t\t\tgetLogger().debug(`Failed to detect parent loom: ${error instanceof Error ? error.message : 'Unknown error'}`)\n\t\t\treturn null\n\t\t}\n\t}\n\n}\n"],"mappings":"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","names":["path","settings","path"]}
@@ -21,10 +21,10 @@ import {
21
21
  findMainWorktreePathWithSettings,
22
22
  findWorktreeForBranch,
23
23
  getMergeTargetBranch
24
- } from "./chunk-OPQC4OWM.js";
24
+ } from "./chunk-QNPJXO53.js";
25
25
  import {
26
26
  SettingsManager
27
- } from "./chunk-653XBU3L.js";
27
+ } from "./chunk-WGUGB54H.js";
28
28
  import {
29
29
  MetadataManager
30
30
  } from "./chunk-4JZEQBWV.js";
@@ -539,4 +539,4 @@ export {
539
539
  MergeManager,
540
540
  BuildRunner
541
541
  };
542
- //# sourceMappingURL=chunk-EQIII6GI.js.map
542
+ //# sourceMappingURL=chunk-Q7VXHJP6.js.map
@@ -1,19 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  IdentifierParser
4
- } from "./chunk-ZM2AYHMO.js";
4
+ } from "./chunk-SN4S5CWL.js";
5
5
  import {
6
6
  runScript
7
7
  } from "./chunk-VIQOQ463.js";
8
8
  import {
9
9
  GitWorktreeManager
10
- } from "./chunk-FV4KXBGO.js";
10
+ } from "./chunk-4VQXMEEP.js";
11
11
  import {
12
12
  getPackageScripts
13
13
  } from "./chunk-K3QGG4O2.js";
14
14
  import {
15
15
  extractIssueNumber
16
- } from "./chunk-OPQC4OWM.js";
16
+ } from "./chunk-QNPJXO53.js";
17
17
  import {
18
18
  logger
19
19
  } from "./chunk-VRPPI6GU.js";
@@ -156,4 +156,4 @@ var ScriptCommandBase = class {
156
156
  export {
157
157
  ScriptCommandBase
158
158
  };
159
- //# sourceMappingURL=chunk-IHSA7VGI.js.map
159
+ //# sourceMappingURL=chunk-QED2WB2D.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  SettingsManager
4
- } from "./chunk-653XBU3L.js";
4
+ } from "./chunk-WGUGB54H.js";
5
5
  import {
6
6
  MetadataManager
7
7
  } from "./chunk-4JZEQBWV.js";
@@ -375,7 +375,7 @@ async function getDefaultBranch(path2 = process.cwd()) {
375
375
  }
376
376
  async function findAllBranchesForIssue(issueNumber, path2 = process.cwd(), settingsManager) {
377
377
  if (!settingsManager) {
378
- const { SettingsManager: SM } = await import("./SettingsManager-BMQCAXPP.js");
378
+ const { SettingsManager: SM } = await import("./SettingsManager-KQU7OX7G.js");
379
379
  settingsManager = new SM();
380
380
  }
381
381
  const protectedBranches = await settingsManager.getProtectedBranches(path2);
@@ -738,4 +738,4 @@ export {
738
738
  removePlaceholderCommitFromHead,
739
739
  removePlaceholderCommitFromHistory
740
740
  };
741
- //# sourceMappingURL=chunk-OPQC4OWM.js.map
741
+ //# sourceMappingURL=chunk-QNPJXO53.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-AYLC633W.js";
5
5
  import {
6
6
  ProcessManager
7
- } from "./chunk-V5IYLWRA.js";
7
+ } from "./chunk-H3T3EPF3.js";
8
8
  import {
9
9
  detectPackageManager,
10
10
  runScript
@@ -693,4 +693,4 @@ var DevServerManager = class {
693
693
  export {
694
694
  DevServerManager
695
695
  };
696
- //# sourceMappingURL=chunk-YWNF5755.js.map
696
+ //# sourceMappingURL=chunk-QQULYI2S.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  GitWorktreeManager
4
- } from "./chunk-FV4KXBGO.js";
4
+ } from "./chunk-4VQXMEEP.js";
5
5
  import {
6
6
  logger
7
7
  } from "./chunk-VRPPI6GU.js";
@@ -299,4 +299,4 @@ Please consult your shell's documentation for setting up custom completions.
299
299
  export {
300
300
  ShellCompletion
301
301
  };
302
- //# sourceMappingURL=chunk-HIGWKLQR.js.map
302
+ //# sourceMappingURL=chunk-QXGM32TO.js.map