@iloom/cli 0.12.2 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/dist/{ClaudeContextManager-IENAE2CP.js → ClaudeContextManager-ZH6LEA5I.js} +5 -5
  4. package/dist/{ClaudeService-YIJCZUUB.js → ClaudeService-YR66WXZN.js} +4 -4
  5. package/dist/{IssueTrackerFactory-2OI7YIN6.js → IssueTrackerFactory-O2ZBA666.js} +3 -3
  6. package/dist/{LoomLauncher-3TSFW7QP.js → LoomLauncher-V54ENBEF.js} +5 -5
  7. package/dist/{MetadataManager-V4LSJ2PB.js → MetadataManager-HHE6LQF2.js} +2 -2
  8. package/dist/{PromptTemplateManager-I75WKXM4.js → PromptTemplateManager-4RFELNYY.js} +2 -2
  9. package/dist/README.md +1 -1
  10. package/dist/{SettingsManager-BMQCAXPP.js → SettingsManager-SLSYEYDZ.js} +4 -2
  11. package/dist/agents/iloom-artifact-reviewer.md +1 -0
  12. package/dist/agents/iloom-code-reviewer.md +21 -0
  13. package/dist/agents/iloom-issue-analyze-and-plan.md +30 -12
  14. package/dist/agents/iloom-issue-analyzer.md +32 -7
  15. package/dist/agents/iloom-issue-complexity-evaluator.md +32 -12
  16. package/dist/agents/iloom-issue-implementer.md +31 -12
  17. package/dist/agents/iloom-issue-planner.md +30 -12
  18. package/dist/agents/iloom-wave-verifier.md +126 -5
  19. package/dist/{build-PKHPE34Y.js → build-ZTGWDHWU.js} +8 -8
  20. package/dist/{chunk-GWJWECZB.js → chunk-55NTREIU.js} +25 -23
  21. package/dist/chunk-55NTREIU.js.map +1 -0
  22. package/dist/{chunk-AYLC633W.js → chunk-7TN5VW4I.js} +65 -7
  23. package/dist/chunk-7TN5VW4I.js.map +1 -0
  24. package/dist/{chunk-PMB6TYV4.js → chunk-C2BVNJW5.js} +2 -2
  25. package/dist/{chunk-QFDM23CO.js → chunk-E5OM25WK.js} +3 -3
  26. package/dist/{chunk-BFF27W3S.js → chunk-ERMEYFT6.js} +7 -2
  27. package/dist/chunk-ERMEYFT6.js.map +1 -0
  28. package/dist/{chunk-653XBU3L.js → chunk-F5NKWLMQ.js} +21 -15
  29. package/dist/chunk-F5NKWLMQ.js.map +1 -0
  30. package/dist/{chunk-H2M62IKR.js → chunk-G2DGDCDP.js} +15 -185
  31. package/dist/chunk-G2DGDCDP.js.map +1 -0
  32. package/dist/{chunk-35CBWAJL.js → chunk-GPBX2BY2.js} +2 -2
  33. package/dist/{chunk-ZM2AYHMO.js → chunk-GQDVH6FA.js} +2 -2
  34. package/dist/{chunk-GDDRANOZ.js → chunk-HWDQRW3O.js} +3 -3
  35. package/dist/chunk-HWDQRW3O.js.map +1 -0
  36. package/dist/{chunk-M3FBM4T3.js → chunk-J5JOJPK3.js} +2 -2
  37. package/dist/{chunk-UMZ2CIDW.js → chunk-KCAWSZUO.js} +11 -10
  38. package/dist/chunk-KCAWSZUO.js.map +1 -0
  39. package/dist/{chunk-OPQC4OWM.js → chunk-KGOBNC5A.js} +4 -4
  40. package/dist/{chunk-V5IYLWRA.js → chunk-LNY2Y32V.js} +2 -2
  41. package/dist/{chunk-7RCUWU3I.js → chunk-MRPIDNZU.js} +1 -1
  42. package/dist/chunk-MRPIDNZU.js.map +1 -0
  43. package/dist/{chunk-YWNF5755.js → chunk-N6DY47YN.js} +80 -45
  44. package/dist/chunk-N6DY47YN.js.map +1 -0
  45. package/dist/{chunk-VIQOQ463.js → chunk-OLJ54WGW.js} +15 -10
  46. package/dist/chunk-OLJ54WGW.js.map +1 -0
  47. package/dist/{chunk-6RINI7OL.js → chunk-PPQ5LV7U.js} +2 -2
  48. package/dist/{chunk-CTHB7345.js → chunk-PS6K2AOV.js} +5 -5
  49. package/dist/{chunk-Y2MVSEJK.js → chunk-QNRXRSKC.js} +6 -3
  50. package/dist/chunk-QNRXRSKC.js.map +1 -0
  51. package/dist/{chunk-EQIII6GI.js → chunk-SM3BCHYB.js} +5 -5
  52. package/dist/{chunk-OKB2NEDQ.js → chunk-T4KFKKEB.js} +7 -7
  53. package/dist/{chunk-VA6CWUAE.js → chunk-T4NESGYB.js} +3 -3
  54. package/dist/{chunk-VZ55H5X6.js → chunk-TJDKGKQV.js} +2 -2
  55. package/dist/{chunk-KCZSUJUR.js → chunk-UXBVDD7U.js} +6 -6
  56. package/dist/{chunk-QF2DROQR.js → chunk-WYDLOQYO.js} +2 -2
  57. package/dist/{chunk-4JZEQBWV.js → chunk-XIVLGWUX.js} +3 -1
  58. package/dist/chunk-XIVLGWUX.js.map +1 -0
  59. package/dist/{chunk-R7DGN73N.js → chunk-ZEFTWM5Z.js} +2 -2
  60. package/dist/{cleanup-QTZU46OP.js → cleanup-BCVY7PEF.js} +18 -18
  61. package/dist/cli.js +94 -69
  62. package/dist/cli.js.map +1 -1
  63. package/dist/{commit-P3OOQ3JN.js → commit-L5JNBU4U.js} +8 -8
  64. package/dist/{compile-IOXQTCP3.js → compile-GPJOHXH4.js} +8 -8
  65. package/dist/{contribute-EHWLYOMZ.js → contribute-QEGCI4PS.js} +4 -4
  66. package/dist/{dev-server-BLJ7NPKG.js → dev-server-67NPVWUN.js} +247 -31
  67. package/dist/dev-server-67NPVWUN.js.map +1 -0
  68. package/dist/{feedback-RFWGB4I5.js → feedback-2LWXKLQZ.js} +4 -4
  69. package/dist/{git-I3PO6FY7.js → git-IS7AV3ED.js} +4 -4
  70. package/dist/hooks/iloom-hook.js +40 -2
  71. package/dist/{ignite-6XT5BKSF.js → ignite-VQDJQ37S.js} +12 -14
  72. package/dist/index.d.ts +69 -37
  73. package/dist/index.js +23 -15
  74. package/dist/index.js.map +1 -1
  75. package/dist/{init-6FUPISD7.js → init-7SDJUAEZ.js} +8 -8
  76. package/dist/{install-deps-BMRONT2L.js → install-deps-NGSFDNUW.js} +8 -8
  77. package/dist/{issues-SUFQJY6O.js → issues-4HQKEUP7.js} +5 -5
  78. package/dist/{lint-PRD2DO5K.js → lint-C5FOVRXY.js} +8 -8
  79. package/dist/mcp/issue-management-server.js +19 -14
  80. package/dist/mcp/issue-management-server.js.map +1 -1
  81. package/dist/{open-NVFYA5IM.js → open-WUTLRI6S.js} +19 -15
  82. package/dist/open-WUTLRI6S.js.map +1 -0
  83. package/dist/{plan-7M5WB7VT.js → plan-GC3HF73T.js} +70 -39
  84. package/dist/plan-GC3HF73T.js.map +1 -0
  85. package/dist/{projects-L5AHUBGA.js → projects-3F6T3KZL.js} +2 -2
  86. package/dist/prompts/init-prompt.txt +40 -12
  87. package/dist/prompts/issue-prompt.txt +3 -0
  88. package/dist/prompts/plan-prompt.txt +67 -11
  89. package/dist/prompts/swarm-orchestrator-prompt.txt +25 -12
  90. package/dist/{rebase-5B7WQQAY.js → rebase-CSGQICAP.js} +7 -7
  91. package/dist/{recap-7PSTJ3MF.js → recap-CKGKFDJL.js} +7 -7
  92. package/dist/{run-6ZCDG7MX.js → run-3YL2IXXI.js} +19 -15
  93. package/dist/run-3YL2IXXI.js.map +1 -0
  94. package/dist/schema/settings.schema.json +35 -7
  95. package/dist/{shell-MX3WRDQN.js → shell-M2YYPNGV.js} +6 -6
  96. package/dist/{summary-WQ7QOAIQ.js → summary-XR4CBJEG.js} +9 -9
  97. package/dist/{test-LAIG62XM.js → test-ESDAHEVE.js} +8 -8
  98. package/dist/{test-git-PYJOYSED.js → test-git-KWPLHYSI.js} +4 -4
  99. package/dist/{test-jira-SM7IU5HW.js → test-jira-6NK7UHSV.js} +3 -3
  100. package/dist/{test-prefix-HIRZBXTM.js → test-prefix-VVODGHXP.js} +4 -4
  101. package/dist/{test-webserver-43PVP2JL.js → test-webserver-AHXKC6H4.js} +6 -6
  102. package/dist/{vscode-VZCCFQRY.js → vscode-OY7HOVRO.js} +6 -6
  103. package/package.json +1 -1
  104. package/dist/chunk-4JZEQBWV.js.map +0 -1
  105. package/dist/chunk-653XBU3L.js.map +0 -1
  106. package/dist/chunk-7RCUWU3I.js.map +0 -1
  107. package/dist/chunk-AYLC633W.js.map +0 -1
  108. package/dist/chunk-BFF27W3S.js.map +0 -1
  109. package/dist/chunk-GDDRANOZ.js.map +0 -1
  110. package/dist/chunk-GWJWECZB.js.map +0 -1
  111. package/dist/chunk-H2M62IKR.js.map +0 -1
  112. package/dist/chunk-UMZ2CIDW.js.map +0 -1
  113. package/dist/chunk-VIQOQ463.js.map +0 -1
  114. package/dist/chunk-Y2MVSEJK.js.map +0 -1
  115. package/dist/chunk-YWNF5755.js.map +0 -1
  116. package/dist/dev-server-BLJ7NPKG.js.map +0 -1
  117. package/dist/open-NVFYA5IM.js.map +0 -1
  118. package/dist/plan-7M5WB7VT.js.map +0 -1
  119. package/dist/run-6ZCDG7MX.js.map +0 -1
  120. /package/dist/{ClaudeContextManager-IENAE2CP.js.map → ClaudeContextManager-ZH6LEA5I.js.map} +0 -0
  121. /package/dist/{ClaudeService-YIJCZUUB.js.map → ClaudeService-YR66WXZN.js.map} +0 -0
  122. /package/dist/{IssueTrackerFactory-2OI7YIN6.js.map → IssueTrackerFactory-O2ZBA666.js.map} +0 -0
  123. /package/dist/{LoomLauncher-3TSFW7QP.js.map → LoomLauncher-V54ENBEF.js.map} +0 -0
  124. /package/dist/{MetadataManager-V4LSJ2PB.js.map → MetadataManager-HHE6LQF2.js.map} +0 -0
  125. /package/dist/{PromptTemplateManager-I75WKXM4.js.map → PromptTemplateManager-4RFELNYY.js.map} +0 -0
  126. /package/dist/{SettingsManager-BMQCAXPP.js.map → SettingsManager-SLSYEYDZ.js.map} +0 -0
  127. /package/dist/{build-PKHPE34Y.js.map → build-ZTGWDHWU.js.map} +0 -0
  128. /package/dist/{chunk-PMB6TYV4.js.map → chunk-C2BVNJW5.js.map} +0 -0
  129. /package/dist/{chunk-QFDM23CO.js.map → chunk-E5OM25WK.js.map} +0 -0
  130. /package/dist/{chunk-35CBWAJL.js.map → chunk-GPBX2BY2.js.map} +0 -0
  131. /package/dist/{chunk-ZM2AYHMO.js.map → chunk-GQDVH6FA.js.map} +0 -0
  132. /package/dist/{chunk-M3FBM4T3.js.map → chunk-J5JOJPK3.js.map} +0 -0
  133. /package/dist/{chunk-OPQC4OWM.js.map → chunk-KGOBNC5A.js.map} +0 -0
  134. /package/dist/{chunk-V5IYLWRA.js.map → chunk-LNY2Y32V.js.map} +0 -0
  135. /package/dist/{chunk-6RINI7OL.js.map → chunk-PPQ5LV7U.js.map} +0 -0
  136. /package/dist/{chunk-CTHB7345.js.map → chunk-PS6K2AOV.js.map} +0 -0
  137. /package/dist/{chunk-EQIII6GI.js.map → chunk-SM3BCHYB.js.map} +0 -0
  138. /package/dist/{chunk-OKB2NEDQ.js.map → chunk-T4KFKKEB.js.map} +0 -0
  139. /package/dist/{chunk-VA6CWUAE.js.map → chunk-T4NESGYB.js.map} +0 -0
  140. /package/dist/{chunk-VZ55H5X6.js.map → chunk-TJDKGKQV.js.map} +0 -0
  141. /package/dist/{chunk-KCZSUJUR.js.map → chunk-UXBVDD7U.js.map} +0 -0
  142. /package/dist/{chunk-QF2DROQR.js.map → chunk-WYDLOQYO.js.map} +0 -0
  143. /package/dist/{chunk-R7DGN73N.js.map → chunk-ZEFTWM5Z.js.map} +0 -0
  144. /package/dist/{cleanup-QTZU46OP.js.map → cleanup-BCVY7PEF.js.map} +0 -0
  145. /package/dist/{commit-P3OOQ3JN.js.map → commit-L5JNBU4U.js.map} +0 -0
  146. /package/dist/{compile-IOXQTCP3.js.map → compile-GPJOHXH4.js.map} +0 -0
  147. /package/dist/{contribute-EHWLYOMZ.js.map → contribute-QEGCI4PS.js.map} +0 -0
  148. /package/dist/{feedback-RFWGB4I5.js.map → feedback-2LWXKLQZ.js.map} +0 -0
  149. /package/dist/{git-I3PO6FY7.js.map → git-IS7AV3ED.js.map} +0 -0
  150. /package/dist/{ignite-6XT5BKSF.js.map → ignite-VQDJQ37S.js.map} +0 -0
  151. /package/dist/{init-6FUPISD7.js.map → init-7SDJUAEZ.js.map} +0 -0
  152. /package/dist/{install-deps-BMRONT2L.js.map → install-deps-NGSFDNUW.js.map} +0 -0
  153. /package/dist/{issues-SUFQJY6O.js.map → issues-4HQKEUP7.js.map} +0 -0
  154. /package/dist/{lint-PRD2DO5K.js.map → lint-C5FOVRXY.js.map} +0 -0
  155. /package/dist/{projects-L5AHUBGA.js.map → projects-3F6T3KZL.js.map} +0 -0
  156. /package/dist/{rebase-5B7WQQAY.js.map → rebase-CSGQICAP.js.map} +0 -0
  157. /package/dist/{recap-7PSTJ3MF.js.map → recap-CKGKFDJL.js.map} +0 -0
  158. /package/dist/{shell-MX3WRDQN.js.map → shell-M2YYPNGV.js.map} +0 -0
  159. /package/dist/{summary-WQ7QOAIQ.js.map → summary-XR4CBJEG.js.map} +0 -0
  160. /package/dist/{test-LAIG62XM.js.map → test-ESDAHEVE.js.map} +0 -0
  161. /package/dist/{test-git-PYJOYSED.js.map → test-git-KWPLHYSI.js.map} +0 -0
  162. /package/dist/{test-jira-SM7IU5HW.js.map → test-jira-6NK7UHSV.js.map} +0 -0
  163. /package/dist/{test-prefix-HIRZBXTM.js.map → test-prefix-VVODGHXP.js.map} +0 -0
  164. /package/dist/{test-webserver-43PVP2JL.js.map → test-webserver-AHXKC6H4.js.map} +0 -0
  165. /package/dist/{vscode-VZCCFQRY.js.map → vscode-OY7HOVRO.js.map} +0 -0
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  detectPackageManager,
4
4
  runScript
5
- } from "./chunk-VIQOQ463.js";
5
+ } from "./chunk-OLJ54WGW.js";
6
6
  import {
7
7
  ProjectCapabilityDetector
8
8
  } from "./chunk-772N5WCA.js";
@@ -21,13 +21,13 @@ import {
21
21
  findMainWorktreePathWithSettings,
22
22
  findWorktreeForBranch,
23
23
  getMergeTargetBranch
24
- } from "./chunk-OPQC4OWM.js";
24
+ } from "./chunk-KGOBNC5A.js";
25
25
  import {
26
26
  SettingsManager
27
- } from "./chunk-653XBU3L.js";
27
+ } from "./chunk-F5NKWLMQ.js";
28
28
  import {
29
29
  MetadataManager
30
- } from "./chunk-4JZEQBWV.js";
30
+ } from "./chunk-XIVLGWUX.js";
31
31
  import {
32
32
  getLogger
33
33
  } from "./chunk-FTYWGQFM.js";
@@ -539,4 +539,4 @@ export {
539
539
  MergeManager,
540
540
  BuildRunner
541
541
  };
542
- //# sourceMappingURL=chunk-EQIII6GI.js.map
542
+ //# sourceMappingURL=chunk-SM3BCHYB.js.map
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  archiveRecap
4
- } from "./chunk-QFDM23CO.js";
4
+ } from "./chunk-E5OM25WK.js";
5
5
  import {
6
6
  removeClaudeTrust
7
7
  } from "./chunk-7UBEHQTP.js";
8
8
  import {
9
9
  DockerManager
10
- } from "./chunk-AYLC633W.js";
10
+ } from "./chunk-7TN5VW4I.js";
11
11
  import {
12
12
  getWorkspacePort
13
- } from "./chunk-BFF27W3S.js";
13
+ } from "./chunk-ERMEYFT6.js";
14
14
  import {
15
15
  checkRemoteBranchStatus,
16
16
  executeGitCommand,
@@ -20,13 +20,13 @@ import {
20
20
  getMergeTargetBranch,
21
21
  hasUncommittedChanges,
22
22
  isBranchMergedIntoMain
23
- } from "./chunk-OPQC4OWM.js";
23
+ } from "./chunk-KGOBNC5A.js";
24
24
  import {
25
25
  SettingsManager
26
- } from "./chunk-653XBU3L.js";
26
+ } from "./chunk-F5NKWLMQ.js";
27
27
  import {
28
28
  MetadataManager
29
- } from "./chunk-4JZEQBWV.js";
29
+ } from "./chunk-XIVLGWUX.js";
30
30
  import {
31
31
  getLogger
32
32
  } from "./chunk-FTYWGQFM.js";
@@ -830,4 +830,4 @@ Please resolve before cleanup - you have some options:
830
830
  export {
831
831
  ResourceCleanup
832
832
  };
833
- //# sourceMappingURL=chunk-OKB2NEDQ.js.map
833
+ //# sourceMappingURL=chunk-T4KFKKEB.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  PromptTemplateManager
4
- } from "./chunk-7RCUWU3I.js";
4
+ } from "./chunk-MRPIDNZU.js";
5
5
  import {
6
6
  detectClaudeCli,
7
7
  launchClaude,
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-DDHWZNGL.js";
10
10
  import {
11
11
  SettingsManager
12
- } from "./chunk-653XBU3L.js";
12
+ } from "./chunk-F5NKWLMQ.js";
13
13
  import {
14
14
  logger
15
15
  } from "./chunk-VRPPI6GU.js";
@@ -121,4 +121,4 @@ var ClaudeService = class {
121
121
  export {
122
122
  ClaudeService
123
123
  };
124
- //# sourceMappingURL=chunk-VA6CWUAE.js.map
124
+ //# sourceMappingURL=chunk-T4NESGYB.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  GitWorktreeManager
4
- } from "./chunk-6RINI7OL.js";
4
+ } from "./chunk-PPQ5LV7U.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-VZ55H5X6.js.map
302
+ //# sourceMappingURL=chunk-TJDKGKQV.js.map
@@ -4,13 +4,13 @@ import {
4
4
  } from "./chunk-NXMDEL3F.js";
5
5
  import {
6
6
  VCSProviderFactory
7
- } from "./chunk-M3FBM4T3.js";
7
+ } from "./chunk-J5JOJPK3.js";
8
8
  import {
9
9
  IssueManagementProviderFactory
10
- } from "./chunk-R7DGN73N.js";
10
+ } from "./chunk-ZEFTWM5Z.js";
11
11
  import {
12
12
  PromptTemplateManager
13
- } from "./chunk-7RCUWU3I.js";
13
+ } from "./chunk-MRPIDNZU.js";
14
14
  import {
15
15
  hasMultipleRemotes
16
16
  } from "./chunk-BZ7KTXPB.js";
@@ -20,10 +20,10 @@ import {
20
20
  } from "./chunk-DDHWZNGL.js";
21
21
  import {
22
22
  SettingsManager
23
- } from "./chunk-653XBU3L.js";
23
+ } from "./chunk-F5NKWLMQ.js";
24
24
  import {
25
25
  MetadataManager
26
- } from "./chunk-4JZEQBWV.js";
26
+ } from "./chunk-XIVLGWUX.js";
27
27
  import {
28
28
  logger
29
29
  } from "./chunk-VRPPI6GU.js";
@@ -379,4 +379,4 @@ var SessionSummaryService = class {
379
379
  export {
380
380
  SessionSummaryService
381
381
  };
382
- //# sourceMappingURL=chunk-KCZSUJUR.js.map
382
+ //# sourceMappingURL=chunk-UXBVDD7U.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-T4NESGYB.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-WYDLOQYO.js.map
@@ -33,6 +33,7 @@ var MetadataManager = class {
33
33
  prUrls: data.prUrls ?? {},
34
34
  draftPrNumber: data.draftPrNumber ?? null,
35
35
  oneShot: data.oneShot ?? null,
36
+ dangerouslySkipPermissions: data.dangerouslySkipPermissions ?? false,
36
37
  complexity: data.complexity ?? null,
37
38
  capabilities: data.capabilities ?? [],
38
39
  state: data.state ?? null,
@@ -106,6 +107,7 @@ var MetadataManager = class {
106
107
  capabilities: input.capabilities,
107
108
  ...input.draftPrNumber && { draftPrNumber: input.draftPrNumber },
108
109
  ...input.oneShot && { oneShot: input.oneShot },
110
+ ...input.dangerouslySkipPermissions && { dangerouslySkipPermissions: true },
109
111
  ...input.complexity && { complexity: input.complexity },
110
112
  ...input.state && { state: input.state },
111
113
  ...input.childIssueNumbers && input.childIssueNumbers.length > 0 && { childIssueNumbers: input.childIssueNumbers },
@@ -330,4 +332,4 @@ var MetadataManager = class {
330
332
  export {
331
333
  MetadataManager
332
334
  };
333
- //# sourceMappingURL=chunk-4JZEQBWV.js.map
335
+ //# sourceMappingURL=chunk-XIVLGWUX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/MetadataManager.ts"],"sourcesContent":["import path from 'path'\nimport os from 'os'\nimport fs from 'fs-extra'\nimport { getLogger } from '../utils/logger-context.js'\nimport type { ProjectCapability } from '../types/loom.js'\nimport type { ComplexityOverride, OneShotMode } from '../types/index.js'\n\nexport type SwarmState = 'pending' | 'in_progress' | 'code_review' | 'done' | 'failed'\n\n/**\n * Schema for metadata JSON file\n * Stored in ~/.config/iloom-ai/looms/\n */\nexport interface MetadataFile {\n description: string\n created_at?: string\n version: number\n // Additional metadata fields (v2)\n branchName?: string\n worktreePath?: string\n issueType?: 'branch' | 'issue' | 'pr' | 'epic'\n issueKey?: string // Canonical, properly-cased issue key (e.g., \"PROJ-123\")\n issue_numbers?: string[]\n pr_numbers?: string[]\n issueTracker?: string\n colorHex?: string // Stored hex color (e.g., \"#dcebff\") - robust against palette changes\n sessionId?: string // Claude Code session ID for resume support\n projectPath?: string // Main worktree path (project root) - enables project identification\n issueUrls?: Record<string, string> // Map of issue ID to URL in the issue tracker\n prUrls?: Record<string, string> // Map of PR number to URL in the issue tracker\n draftPrNumber?: number // Draft PR number if draft-pr mode was used\n oneShot?: OneShotMode // One-shot automation mode stored during loom creation\n dangerouslySkipPermissions?: boolean // Skip permissions without affecting one-shot mode\n complexity?: ComplexityOverride // Complexity override stored during loom creation\n capabilities?: ProjectCapability[] // Detected project capabilities\n state?: SwarmState // Swarm mode lifecycle state\n childIssueNumbers?: string[] // Child issue numbers for epic looms\n parentLoom?: {\n type: 'issue' | 'pr' | 'branch' | 'epic'\n identifier: string | number\n branchName: string\n worktreePath: string\n databaseBranch?: string\n }\n // Epic/swarm child issue data (populated during spin setup)\n childIssues?: Array<{\n number: string // Prefixed: \"#123\" for GitHub, \"ENG-123\" for Linear\n title: string\n body: string\n url: string\n }>\n dependencyMap?: Record<string, string[]> // issueNumber -> array of blocking issueNumbers\n mcpConfigPath?: string // Path to per-loom MCP config file (for swarm claude -p commands)\n swarmTeamName?: string // Unique team name for swarm orchestrator (persisted for re-runs)\n}\n\n/**\n * Input for writing metadata (all fields except version and created_at)\n * Note: issueTracker is required because every loom should have an associated\n * issue tracker provider (defaults to 'github' via IssueTrackerFactory)\n */\nexport interface WriteMetadataInput {\n description: string\n branchName: string\n worktreePath: string\n issueType: 'branch' | 'issue' | 'pr' | 'epic'\n issueKey?: string // Canonical, properly-cased issue key (e.g., \"PROJ-123\")\n issue_numbers: string[]\n pr_numbers: string[]\n issueTracker: string\n colorHex: string // Hex color (e.g., \"#dcebff\") - robust against palette changes\n sessionId: string // Claude Code session ID for resume support (required for new looms)\n projectPath: string // Main worktree path (project root) - required for new looms\n issueUrls: Record<string, string> // Map of issue ID to URL in the issue tracker\n prUrls: Record<string, string> // Map of PR number to URL in the issue tracker\n draftPrNumber?: number // Draft PR number for draft-pr mode\n oneShot?: OneShotMode // One-shot automation mode to persist\n dangerouslySkipPermissions?: boolean // Skip permissions without affecting one-shot mode\n complexity?: ComplexityOverride // Complexity override to persist\n capabilities: ProjectCapability[] // Detected project capabilities (required for new looms)\n state?: SwarmState // Swarm mode lifecycle state\n childIssueNumbers?: string[] // Child issue numbers for epic looms\n parentLoom?: {\n type: 'issue' | 'pr' | 'branch' | 'epic'\n identifier: string | number\n branchName: string\n worktreePath: string\n databaseBranch?: string\n }\n // Epic/swarm child issue data (populated during spin setup)\n childIssues?: Array<{\n number: string // Prefixed: \"#123\" for GitHub, \"ENG-123\" for Linear\n title: string\n body: string\n url: string\n }>\n dependencyMap?: Record<string, string[]> // issueNumber -> array of blocking issueNumbers\n mcpConfigPath?: string // Path to per-loom MCP config file (for swarm claude -p commands)\n swarmTeamName?: string // Unique team name for swarm orchestrator (persisted for re-runs)\n}\n\n/**\n * Result of reading metadata for a worktree\n */\nexport interface LoomMetadata {\n status?: 'active' | 'finished'\n finishedAt?: string | null\n description: string\n created_at: string | null\n branchName: string | null\n worktreePath: string | null\n issueType: 'branch' | 'issue' | 'pr' | 'epic' | null\n issueKey: string | null // Canonical, properly-cased issue key (e.g., \"PROJ-123\")\n issue_numbers: string[]\n pr_numbers: string[]\n issueTracker: string | null\n colorHex: string | null // Hex color (e.g., \"#dcebff\") - robust against palette changes\n sessionId: string | null // Claude Code session ID (null for legacy looms)\n projectPath: string | null // Main worktree path (null for legacy looms)\n issueUrls: Record<string, string> // Map of issue ID to URL ({} for legacy looms)\n prUrls: Record<string, string> // Map of PR number to URL ({} for legacy looms)\n draftPrNumber: number | null // Draft PR number (null if not draft mode)\n oneShot: OneShotMode | null // One-shot mode (null for legacy looms)\n dangerouslySkipPermissions: boolean // Skip permissions without affecting one-shot mode\n complexity: ComplexityOverride | null // Complexity override (null when not overridden)\n capabilities: ProjectCapability[] // Detected project capabilities (empty for legacy looms)\n state: SwarmState | null // Swarm mode lifecycle state (null for non-swarm looms)\n childIssueNumbers: string[] // Child issue numbers for epic looms (empty for non-epic looms)\n parentLoom: {\n type: 'issue' | 'pr' | 'branch' | 'epic'\n identifier: string | number\n branchName: string\n worktreePath: string\n databaseBranch?: string\n } | null\n // Epic/swarm child issue data (empty arrays/objects for non-epic looms)\n childIssues: Array<{\n number: string\n title: string\n body: string\n url: string\n }>\n dependencyMap: Record<string, string[]>\n mcpConfigPath: string | null // Path to per-loom MCP config file (null for non-swarm looms)\n swarmTeamName: string | null // Unique team name for swarm orchestrator (null for non-swarm looms)\n}\n\n/**\n * MetadataManager: Manage loom metadata persistence\n *\n * Stores loom metadata in ~/.config/iloom-ai/looms/ directory.\n * Each worktree gets a JSON file named by slugifying its absolute path.\n *\n * Per spec section 2.2:\n * - Filename derived from worktree absolute path\n * - Path separators replaced with double underscores\n * - Non-alphanumeric chars (except _ and -) replaced with hyphens\n */\nexport class MetadataManager {\n private readonly loomsDir: string\n private readonly finishedDir: string\n\n constructor() {\n this.loomsDir = path.join(os.homedir(), '.config', 'iloom-ai', 'looms')\n this.finishedDir = path.join(this.loomsDir, 'finished')\n }\n\n /**\n * Convert MetadataFile to LoomMetadata with default values for optional fields\n */\n private toMetadata(data: MetadataFile): LoomMetadata {\n return {\n description: data.description,\n created_at: data.created_at ?? null,\n branchName: data.branchName ?? null,\n worktreePath: data.worktreePath ?? null,\n issueType: data.issueType ?? null,\n issueKey: data.issueKey ?? null,\n issue_numbers: data.issue_numbers ?? [],\n pr_numbers: data.pr_numbers ?? [],\n issueTracker: data.issueTracker ?? null,\n colorHex: data.colorHex ?? null,\n sessionId: data.sessionId ?? null,\n projectPath: data.projectPath ?? null,\n issueUrls: data.issueUrls ?? {},\n prUrls: data.prUrls ?? {},\n draftPrNumber: data.draftPrNumber ?? null,\n oneShot: data.oneShot ?? null,\n dangerouslySkipPermissions: data.dangerouslySkipPermissions ?? false,\n complexity: data.complexity ?? null,\n capabilities: data.capabilities ?? [],\n state: data.state ?? null,\n childIssueNumbers: data.childIssueNumbers ?? [],\n parentLoom: data.parentLoom ?? null,\n childIssues: data.childIssues ?? [],\n dependencyMap: data.dependencyMap ?? {},\n mcpConfigPath: data.mcpConfigPath ?? null,\n swarmTeamName: data.swarmTeamName ?? null,\n }\n }\n\n /**\n * Convert worktree path to filename slug per spec section 2.2\n *\n * Algorithm:\n * 1. Trim trailing slashes\n * 2. Replace all path separators (/ or \\) with __ (double underscore)\n * 3. Replace any other non-alphanumeric characters (except _ and -) with -\n * 4. Append .json\n *\n * Example:\n * - Worktree: /Users/jane/dev/repo\n * - Filename: _Users__jane__dev__repo.json\n */\n slugifyPath(worktreePath: string): string {\n // 1. Trim trailing slashes\n let slug = worktreePath.replace(/[/\\\\]+$/, '')\n\n // 2. Replace path separators with triple underscores\n slug = slug.replace(/[/\\\\]/g, '___')\n\n // 3. Replace non-alphanumeric chars (except _ and -) with hyphens\n slug = slug.replace(/[^a-zA-Z0-9_-]/g, '-')\n\n // 4. Append .json\n return `${slug}.json`\n }\n\n /**\n * Get the full path to the metadata file for a worktree\n */\n private getFilePath(worktreePath: string): string {\n const filename = this.slugifyPath(worktreePath)\n return path.join(this.loomsDir, filename)\n }\n\n /**\n * Get the full path to the metadata file for a worktree (public API)\n * Used by other services that need to reference the metadata file location\n * (e.g., MCP servers that need to read loom context)\n */\n getMetadataFilePath(worktreePath: string): string {\n return this.getFilePath(worktreePath)\n }\n\n /**\n * Write metadata for a worktree (spec section 3.1)\n *\n * @param worktreePath - Absolute path to the worktree (used for file naming)\n * @param input - Metadata to write (description plus additional fields)\n */\n async writeMetadata(worktreePath: string, input: WriteMetadataInput): Promise<void> {\n try {\n // 1. Ensure looms directory exists\n await fs.ensureDir(this.loomsDir, { mode: 0o755 })\n\n // 2. Create JSON content\n const content: MetadataFile = {\n description: input.description,\n created_at: new Date().toISOString(),\n version: 1,\n branchName: input.branchName,\n worktreePath: input.worktreePath,\n issueType: input.issueType,\n ...(input.issueKey && { issueKey: input.issueKey }),\n issue_numbers: input.issue_numbers,\n pr_numbers: input.pr_numbers,\n issueTracker: input.issueTracker,\n colorHex: input.colorHex,\n sessionId: input.sessionId,\n projectPath: input.projectPath,\n issueUrls: input.issueUrls,\n prUrls: input.prUrls,\n capabilities: input.capabilities,\n ...(input.draftPrNumber && { draftPrNumber: input.draftPrNumber }),\n ...(input.oneShot && { oneShot: input.oneShot }),\n ...(input.dangerouslySkipPermissions && { dangerouslySkipPermissions: true }),\n ...(input.complexity && { complexity: input.complexity }),\n ...(input.state && { state: input.state }),\n ...(input.childIssueNumbers && input.childIssueNumbers.length > 0 && { childIssueNumbers: input.childIssueNumbers }),\n ...(input.parentLoom && { parentLoom: input.parentLoom }),\n ...(input.childIssues && input.childIssues.length > 0 && { childIssues: input.childIssues }),\n ...(input.dependencyMap && Object.keys(input.dependencyMap).length > 0 && { dependencyMap: input.dependencyMap }),\n ...(input.mcpConfigPath && { mcpConfigPath: input.mcpConfigPath }),\n }\n\n // 3. Write to slugified filename\n const filePath = this.getFilePath(worktreePath)\n await fs.writeFile(filePath, JSON.stringify(content, null, 2), { mode: 0o644 })\n\n getLogger().debug(`Metadata written for worktree: ${worktreePath}`)\n } catch (error) {\n // Log warning but don't throw - metadata is supplementary\n getLogger().warn(\n `Failed to write metadata for worktree: ${error instanceof Error ? error.message : String(error)}`\n )\n }\n }\n\n /**\n * Read metadata for a worktree (spec section 3.2)\n *\n * @param worktreePath - Absolute path to the worktree\n * @returns The metadata object with all fields, or null if not found/invalid\n */\n async readMetadata(worktreePath: string): Promise<LoomMetadata | null> {\n try {\n const filePath = this.getFilePath(worktreePath)\n\n // Check if file exists\n if (!(await fs.pathExists(filePath))) {\n return null\n }\n\n // Read and parse JSON\n const content = await fs.readFile(filePath, 'utf8')\n const data: MetadataFile = JSON.parse(content)\n\n if (!data.description) {\n return null\n }\n\n return this.toMetadata(data)\n } catch (error) {\n // Return null on any error (graceful degradation per spec)\n getLogger().debug(\n `Could not read metadata for worktree ${worktreePath}: ${error instanceof Error ? error.message : String(error)}`\n )\n return null\n }\n }\n\n /**\n * List all stored loom metadata files\n *\n * Returns an array of LoomMetadata objects for all valid metadata files\n * in the looms directory. Invalid or unreadable files are skipped.\n *\n * @returns Array of LoomMetadata objects from all stored files\n */\n async listAllMetadata(): Promise<LoomMetadata[]> {\n const results: LoomMetadata[] = []\n\n try {\n // Check if looms directory exists\n if (!(await fs.pathExists(this.loomsDir))) {\n return results\n }\n\n // Read all files in looms directory\n const files = await fs.readdir(this.loomsDir)\n\n // Filter to only .json files and read each\n for (const file of files) {\n if (!file.endsWith('.json')) {\n continue\n }\n\n try {\n const filePath = path.join(this.loomsDir, file)\n const content = await fs.readFile(filePath, 'utf8')\n const data: MetadataFile = JSON.parse(content)\n\n // Skip files without required description field\n if (!data.description) {\n continue\n }\n\n results.push(this.toMetadata(data))\n } catch (error) {\n // Skip individual files that fail to parse (graceful degradation)\n getLogger().debug(\n `Skipping metadata file ${file}: ${error instanceof Error ? error.message : String(error)}`\n )\n }\n }\n } catch (error) {\n // Log error but return empty array (graceful degradation)\n getLogger().debug(\n `Could not list metadata files: ${error instanceof Error ? error.message : String(error)}`\n )\n }\n\n return results\n }\n\n /**\n * Update existing metadata for a worktree by merging new fields\n *\n * Reads the existing metadata file, merges the provided updates,\n * and writes back. Only provided fields are overwritten.\n *\n * @param worktreePath - Absolute path to the worktree\n * @param updates - Partial metadata fields to merge\n */\n async updateMetadata(worktreePath: string, updates: Partial<MetadataFile>): Promise<void> {\n try {\n const filePath = this.getFilePath(worktreePath)\n\n // Check if file exists\n if (!(await fs.pathExists(filePath))) {\n getLogger().warn(`No metadata file to update for worktree: ${worktreePath}`)\n return\n }\n\n // Read existing data\n const content = await fs.readFile(filePath, 'utf8')\n const data: MetadataFile = JSON.parse(content)\n\n // Merge updates\n const merged = { ...data, ...updates }\n\n // Write back\n await fs.writeFile(filePath, JSON.stringify(merged, null, 2), { mode: 0o644 })\n\n getLogger().debug(`Metadata updated for worktree: ${worktreePath}`)\n } catch (error) {\n getLogger().warn(\n `Failed to update metadata for worktree: ${error instanceof Error ? error.message : String(error)}`\n )\n throw error\n }\n }\n\n /**\n * Delete metadata for a worktree (spec section 3.3)\n *\n * Idempotent: silently succeeds if file doesn't exist\n * Non-fatal: logs warning on permission errors but doesn't throw\n *\n * @param worktreePath - Absolute path to the worktree\n */\n async deleteMetadata(worktreePath: string): Promise<void> {\n try {\n const filePath = this.getFilePath(worktreePath)\n\n // Check if file exists - silently return if not\n if (!(await fs.pathExists(filePath))) {\n getLogger().debug(`No metadata file to delete for worktree: ${worktreePath}`)\n return\n }\n\n // Delete the file\n await fs.unlink(filePath)\n getLogger().debug(`Metadata deleted for worktree: ${worktreePath}`)\n } catch (error) {\n // Log warning on permission error but don't throw (per spec section 3.3)\n getLogger().warn(\n `Failed to delete metadata for worktree: ${error instanceof Error ? error.message : String(error)}`\n )\n }\n }\n\n /**\n * Archive metadata for a finished worktree\n *\n * Moves the metadata file to the finished/ subdirectory and adds\n * status: 'finished' and finishedAt timestamp fields.\n *\n * Idempotent: silently succeeds if source file doesn't exist\n * Non-fatal: logs warning on errors but doesn't throw\n *\n * @param worktreePath - Absolute path to the worktree\n */\n async archiveMetadata(worktreePath: string): Promise<void> {\n try {\n const filename = this.slugifyPath(worktreePath)\n const sourcePath = path.join(this.loomsDir, filename)\n\n // Check if source file exists - silently return if not (idempotent)\n if (!(await fs.pathExists(sourcePath))) {\n getLogger().debug(`No metadata file to archive for worktree: ${worktreePath}`)\n return\n }\n\n // Read existing metadata\n const content = await fs.readFile(sourcePath, 'utf8')\n const data: MetadataFile = JSON.parse(content)\n\n // Add finished status and timestamp\n const finishedData = {\n ...data,\n status: 'finished' as const,\n finishedAt: new Date().toISOString(),\n }\n\n // Ensure finished directory exists\n await fs.ensureDir(this.finishedDir, { mode: 0o755 })\n\n // Write to finished subdirectory\n const destPath = path.join(this.finishedDir, filename)\n await fs.writeFile(destPath, JSON.stringify(finishedData, null, 2), { mode: 0o644 })\n\n // Delete original file\n await fs.unlink(sourcePath)\n\n getLogger().debug(`Metadata archived for worktree: ${worktreePath}`)\n } catch (error) {\n // Log warning but don't throw - archiving is supplementary\n getLogger().warn(\n `Failed to archive metadata for worktree: ${error instanceof Error ? error.message : String(error)}`\n )\n }\n }\n\n /**\n * List all finished loom metadata files\n *\n * Returns an array of LoomMetadata objects for all finished looms\n * in the finished/ subdirectory, sorted by finishedAt in descending order\n * (most recently finished first).\n *\n * @returns Array of LoomMetadata objects from finished files, sorted by finishedAt desc\n */\n async listFinishedMetadata(): Promise<LoomMetadata[]> {\n const results: LoomMetadata[] = []\n\n try {\n // Check if finished directory exists\n if (!(await fs.pathExists(this.finishedDir))) {\n return results\n }\n\n // Read all files in finished directory\n const files = await fs.readdir(this.finishedDir)\n\n // Filter to only .json files and read each\n for (const file of files) {\n if (!file.endsWith('.json')) {\n continue\n }\n\n try {\n const filePath = path.join(this.finishedDir, file)\n const content = await fs.readFile(filePath, 'utf8')\n const data = JSON.parse(content) as MetadataFile & { status?: string; finishedAt?: string }\n\n // Skip files without required description field\n if (!data.description) {\n continue\n }\n\n const metadata = this.toMetadata(data)\n // Add finished-specific fields\n metadata.status = (data.status as 'active' | 'finished') ?? 'finished'\n metadata.finishedAt = data.finishedAt ?? null\n\n results.push(metadata)\n } catch (error) {\n // Skip individual files that fail to parse (graceful degradation)\n getLogger().warn(\n `Skipping finished metadata file ${file}: ${error instanceof Error ? error.message : String(error)}`\n )\n }\n }\n\n // Sort by finishedAt descending (most recently finished first)\n results.sort((a, b) => {\n const aTime = a.finishedAt ? new Date(a.finishedAt).getTime() : 0\n const bTime = b.finishedAt ? new Date(b.finishedAt).getTime() : 0\n return bTime - aTime\n })\n } catch (error) {\n // Log error but return empty array (graceful degradation)\n getLogger().warn(\n `Could not list finished metadata files: ${error instanceof Error ? error.message : String(error)}`\n )\n }\n\n return results\n }\n}\n"],"mappings":"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","names":[]}
@@ -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-F5NKWLMQ.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-ZEFTWM5Z.js.map
@@ -1,36 +1,36 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ResourceCleanup
4
- } from "./chunk-OKB2NEDQ.js";
5
- import "./chunk-QFDM23CO.js";
4
+ } from "./chunk-T4KFKKEB.js";
5
+ import "./chunk-E5OM25WK.js";
6
6
  import {
7
7
  CLIIsolationManager,
8
8
  DatabaseManager,
9
9
  EnvironmentManager,
10
10
  LoomManager
11
- } from "./chunk-GWJWECZB.js";
12
- import "./chunk-M3FBM4T3.js";
11
+ } from "./chunk-55NTREIU.js";
12
+ import "./chunk-J5JOJPK3.js";
13
13
  import "./chunk-7UBEHQTP.js";
14
- import "./chunk-AYLC633W.js";
14
+ import "./chunk-7TN5VW4I.js";
15
15
  import {
16
16
  ProcessManager
17
- } from "./chunk-V5IYLWRA.js";
18
- import "./chunk-BFF27W3S.js";
17
+ } from "./chunk-LNY2Y32V.js";
18
+ import "./chunk-ERMEYFT6.js";
19
19
  import {
20
20
  IdentifierParser
21
- } from "./chunk-ZM2AYHMO.js";
21
+ } from "./chunk-GQDVH6FA.js";
22
22
  import {
23
23
  createNeonProviderFromSettings
24
24
  } from "./chunk-HKEXRZMU.js";
25
25
  import {
26
26
  TelemetryService
27
27
  } from "./chunk-MY2Q3FJ3.js";
28
- import "./chunk-R7DGN73N.js";
28
+ import "./chunk-ZEFTWM5Z.js";
29
29
  import "./chunk-4232AHNQ.js";
30
- import "./chunk-VIQOQ463.js";
30
+ import "./chunk-OLJ54WGW.js";
31
31
  import {
32
32
  GitWorktreeManager
33
- } from "./chunk-6RINI7OL.js";
33
+ } from "./chunk-PPQ5LV7U.js";
34
34
  import "./chunk-WEBMMJKL.js";
35
35
  import "./chunk-K3QGG4O2.js";
36
36
  import "./chunk-DMSL5BAP.js";
@@ -44,13 +44,13 @@ import "./chunk-P5MXXHXQ.js";
44
44
  import "./chunk-BZ7KTXPB.js";
45
45
  import "./chunk-OIVFHJOA.js";
46
46
  import "./chunk-DDHWZNGL.js";
47
- import "./chunk-OPQC4OWM.js";
47
+ import "./chunk-KGOBNC5A.js";
48
48
  import {
49
49
  SettingsManager
50
- } from "./chunk-653XBU3L.js";
50
+ } from "./chunk-F5NKWLMQ.js";
51
51
  import {
52
52
  MetadataManager
53
- } from "./chunk-4JZEQBWV.js";
53
+ } from "./chunk-XIVLGWUX.js";
54
54
  import {
55
55
  getLogger
56
56
  } from "./chunk-FTYWGQFM.js";
@@ -107,8 +107,8 @@ var CleanupCommand = class {
107
107
  cliIsolationManager
108
108
  );
109
109
  if (!this.loomManager) {
110
- const { IssueTrackerFactory } = await import("./IssueTrackerFactory-2OI7YIN6.js");
111
- const { ClaudeContextManager } = await import("./ClaudeContextManager-IENAE2CP.js");
110
+ const { IssueTrackerFactory } = await import("./IssueTrackerFactory-O2ZBA666.js");
111
+ const { ClaudeContextManager } = await import("./ClaudeContextManager-ZH6LEA5I.js");
112
112
  const { ProjectCapabilityDetector } = await import("./ProjectCapabilityDetector-I4J66WKF.js");
113
113
  const { DefaultBranchNamingService } = await import("./BranchNamingService-MEK2WZUD.js");
114
114
  this.loomManager = new LoomManager(
@@ -314,7 +314,7 @@ var CleanupCommand = class {
314
314
  const { force, dryRun } = parsed.options;
315
315
  let parsedInput = await this.identifierParser.parseForPatternDetection(identifier);
316
316
  if (parsedInput.type === "branch" && parsedInput.branchName) {
317
- const { extractIssueNumber } = await import("./git-I3PO6FY7.js");
317
+ const { extractIssueNumber } = await import("./git-IS7AV3ED.js");
318
318
  const extractedNumber = extractIssueNumber(parsedInput.branchName);
319
319
  if (extractedNumber !== null) {
320
320
  parsedInput = {
@@ -544,4 +544,4 @@ var CleanupCommand = class {
544
544
  export {
545
545
  CleanupCommand
546
546
  };
547
- //# sourceMappingURL=cleanup-QTZU46OP.js.map
547
+ //# sourceMappingURL=cleanup-BCVY7PEF.js.map