@iloom/cli 0.7.6 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +32 -3
  3. package/dist/{ClaudeContextManager-Y2YJC6BU.js → ClaudeContextManager-RDP6CLK6.js} +5 -5
  4. package/dist/{ClaudeService-NDVFQRKC.js → ClaudeService-FKPOQRA4.js} +4 -4
  5. package/dist/GitHubService-ACZVNTJE.js +12 -0
  6. package/dist/{LoomLauncher-U2B3VHPC.js → LoomLauncher-NHZMEVTQ.js} +5 -5
  7. package/dist/{MetadataManager-XJ2YB762.js → MetadataManager-W3C54UYT.js} +2 -2
  8. package/dist/{PRManager-7F3AAY66.js → PRManager-H4TUZTZL.js} +5 -5
  9. package/dist/{PromptTemplateManager-7L3HJQQU.js → PromptTemplateManager-OUYDHOPI.js} +2 -2
  10. package/dist/README.md +32 -3
  11. package/dist/{SettingsManager-YU4VYPTW.js → SettingsManager-VCVLL32H.js} +4 -2
  12. package/dist/{SettingsMigrationManager-KZKDG66H.js → SettingsMigrationManager-LEBMJP3B.js} +3 -3
  13. package/dist/agents/iloom-code-reviewer.md +735 -0
  14. package/dist/agents/iloom-framework-detector.md +1 -1
  15. package/dist/agents/iloom-issue-analyze-and-plan.md +2 -2
  16. package/dist/agents/iloom-issue-analyzer.md +2 -2
  17. package/dist/agents/iloom-issue-complexity-evaluator.md +1 -1
  18. package/dist/agents/iloom-issue-enhancer.md +2 -2
  19. package/dist/agents/iloom-issue-implementer.md +3 -3
  20. package/dist/agents/iloom-issue-planner.md +2 -2
  21. package/dist/{build-HQ5HGA3T.js → build-H4DK3DMQ.js} +7 -7
  22. package/dist/{chunk-N7FVXZNI.js → chunk-4BSXZ5YZ.js} +31 -9
  23. package/dist/chunk-4BSXZ5YZ.js.map +1 -0
  24. package/dist/{chunk-VYKKWU36.js → chunk-4KGRPHM6.js} +3 -3
  25. package/dist/{chunk-CFQVOTHO.js → chunk-52MVUK5V.js} +2 -2
  26. package/dist/{chunk-TIYJEEVO.js → chunk-66QOCD5N.js} +1 -1
  27. package/dist/chunk-66QOCD5N.js.map +1 -0
  28. package/dist/chunk-7JDMYTFZ.js +251 -0
  29. package/dist/chunk-7JDMYTFZ.js.map +1 -0
  30. package/dist/{chunk-7LSSNB7Y.js → chunk-7ZEHSSUP.js} +2 -2
  31. package/dist/chunk-A4UQY3M2.js +75 -0
  32. package/dist/chunk-A4UQY3M2.js.map +1 -0
  33. package/dist/{chunk-ELJKYFSH.js → chunk-BCQDYAOJ.js} +4 -4
  34. package/dist/{chunk-F2PWIRV4.js → chunk-BYUMEDDD.js} +2 -2
  35. package/dist/{chunk-CAXFWFV6.js → chunk-ECP77QGE.js} +4 -4
  36. package/dist/{chunk-6YAMWLCP.js → chunk-EQOFNPEY.js} +3 -3
  37. package/dist/{chunk-ZA575VLF.js → chunk-GDS2HXSW.js} +4 -4
  38. package/dist/{chunk-UDRZY65Y.js → chunk-HSGZW3ID.js} +2 -2
  39. package/dist/{chunk-WFQ5CLTR.js → chunk-IWIIOFEB.js} +56 -5
  40. package/dist/chunk-IWIIOFEB.js.map +1 -0
  41. package/dist/{chunk-VWGKGNJP.js → chunk-KBEIQP4G.js} +3 -1
  42. package/dist/chunk-KBEIQP4G.js.map +1 -0
  43. package/dist/{chunk-ETY2SBW5.js → chunk-NR64HNF7.js} +17 -15
  44. package/dist/chunk-NR64HNF7.js.map +1 -0
  45. package/dist/{chunk-WT4UGBE2.js → chunk-PBSHQVCT.js} +5 -5
  46. package/dist/{chunk-64HCHVJM.js → chunk-PLI3JQWT.js} +2 -2
  47. package/dist/{chunk-USJSNHGG.js → chunk-PVW6JE7E.js} +3 -3
  48. package/dist/{chunk-HBJITKSZ.js → chunk-RNBIISBZ.js} +161 -3
  49. package/dist/chunk-RNBIISBZ.js.map +1 -0
  50. package/dist/{chunk-C7YW5IMS.js → chunk-RODL2HVY.js} +17 -6
  51. package/dist/{chunk-C7YW5IMS.js.map → chunk-RODL2HVY.js.map} +1 -1
  52. package/dist/{chunk-3K3WY3BN.js → chunk-SC6X5EBG.js} +4 -4
  53. package/dist/{chunk-NEPH2O4C.js → chunk-SSASIBDJ.js} +3 -3
  54. package/dist/{chunk-GCPAZSGV.js → chunk-THS5L54H.js} +150 -3
  55. package/dist/chunk-THS5L54H.js.map +1 -0
  56. package/dist/{chunk-5V74K5ZA.js → chunk-TVH67KEO.js} +25 -2
  57. package/dist/chunk-TVH67KEO.js.map +1 -0
  58. package/dist/{chunk-NPEMVE27.js → chunk-UDZCTLD6.js} +115 -3
  59. package/dist/chunk-UDZCTLD6.js.map +1 -0
  60. package/dist/{chunk-ENMTWE74.js → chunk-VZYSM7N7.js} +2 -2
  61. package/dist/{chunk-WZYBHD7P.js → chunk-XHNACIHO.js} +2 -2
  62. package/dist/{chunk-XAMBIVXE.js → chunk-XJHQVOT6.js} +2 -2
  63. package/dist/{chunk-O36JLYNW.js → chunk-XU5A6BWA.js} +4 -7
  64. package/dist/chunk-XU5A6BWA.js.map +1 -0
  65. package/dist/{cleanup-IO4KV2DL.js → cleanup-OGE7V7AD.js} +16 -16
  66. package/dist/cli.js +317 -164
  67. package/dist/cli.js.map +1 -1
  68. package/dist/{commit-3ULFKXNB.js → commit-534QIRHY.js} +10 -10
  69. package/dist/{compile-CT7IR7O2.js → compile-ZOAODFN2.js} +7 -7
  70. package/dist/{contribute-GXKOIA42.js → contribute-7USRBWRM.js} +6 -6
  71. package/dist/{dev-server-OAP3RZC6.js → dev-server-TYYJM3XA.js} +9 -9
  72. package/dist/{feedback-ZLAX3BVL.js → feedback-HZVLOTQJ.js} +9 -9
  73. package/dist/{git-ENLT2VNI.js → git-GUNOPP4Q.js} +4 -4
  74. package/dist/hooks/iloom-hook.js +75 -3
  75. package/dist/{ignite-HA2OJF6Z.js → ignite-ZO7SGUKP.js} +85 -25
  76. package/dist/ignite-ZO7SGUKP.js.map +1 -0
  77. package/dist/index.d.ts +85 -2
  78. package/dist/index.js +133 -73
  79. package/dist/index.js.map +1 -1
  80. package/dist/init-MZBIXQ7V.js +21 -0
  81. package/dist/{lint-HAVU4U34.js → lint-MDVUV3W2.js} +7 -7
  82. package/dist/mcp/issue-management-server.js +569 -2
  83. package/dist/mcp/issue-management-server.js.map +1 -1
  84. package/dist/{neon-helpers-3KBC4A3Y.js → neon-helpers-VVFFTLXE.js} +3 -3
  85. package/dist/{open-IN3LUZXX.js → open-2LPZ7XXW.js} +9 -9
  86. package/dist/plan-PIME6UNY.js +371 -0
  87. package/dist/plan-PIME6UNY.js.map +1 -0
  88. package/dist/{projects-CTRTTMSK.js → projects-325GEEGJ.js} +2 -2
  89. package/dist/{prompt-3SAZYRUN.js → prompt-ONNPSNKM.js} +2 -2
  90. package/dist/prompts/init-prompt.txt +83 -3
  91. package/dist/prompts/issue-prompt.txt +51 -3
  92. package/dist/prompts/plan-prompt.txt +435 -0
  93. package/dist/prompts/pr-prompt.txt +38 -0
  94. package/dist/prompts/regular-prompt.txt +53 -3
  95. package/dist/{rebase-RLEVFHWN.js → rebase-7YS3N274.js} +6 -6
  96. package/dist/{recap-ZKGHZCX6.js → recap-GSXFEOD6.js} +6 -6
  97. package/dist/{run-QEIS2EH2.js → run-XPGCMFFO.js} +9 -9
  98. package/dist/schema/settings.schema.json +57 -1
  99. package/dist/{shell-2NNSIU34.js → shell-2SPM3Z5O.js} +6 -6
  100. package/dist/{summary-MPOOQIOX.js → summary-C5VVSJAJ.js} +11 -11
  101. package/dist/{test-75WAA6DU.js → test-N2725YRI.js} +7 -7
  102. package/dist/{test-git-E2BLXR6M.js → test-git-ZPSPA2TP.js} +4 -4
  103. package/dist/{test-prefix-A7JGGYAA.js → test-prefix-6DLB2BHE.js} +4 -4
  104. package/dist/{test-webserver-J6SMNLU2.js → test-webserver-XLJ2TZFP.js} +6 -6
  105. package/package.json +1 -1
  106. package/dist/GitHubService-O7U4UQ7N.js +0 -12
  107. package/dist/agents/iloom-issue-reviewer.md +0 -139
  108. package/dist/chunk-5V74K5ZA.js.map +0 -1
  109. package/dist/chunk-ETY2SBW5.js.map +0 -1
  110. package/dist/chunk-GCPAZSGV.js.map +0 -1
  111. package/dist/chunk-HBJITKSZ.js.map +0 -1
  112. package/dist/chunk-N7FVXZNI.js.map +0 -1
  113. package/dist/chunk-NPEMVE27.js.map +0 -1
  114. package/dist/chunk-O36JLYNW.js.map +0 -1
  115. package/dist/chunk-TIYJEEVO.js.map +0 -1
  116. package/dist/chunk-VWGKGNJP.js.map +0 -1
  117. package/dist/chunk-WFQ5CLTR.js.map +0 -1
  118. package/dist/chunk-ZX3GTM7O.js +0 -119
  119. package/dist/chunk-ZX3GTM7O.js.map +0 -1
  120. package/dist/ignite-HA2OJF6Z.js.map +0 -1
  121. package/dist/init-S6IEGRSX.js +0 -21
  122. /package/dist/{ClaudeContextManager-Y2YJC6BU.js.map → ClaudeContextManager-RDP6CLK6.js.map} +0 -0
  123. /package/dist/{ClaudeService-NDVFQRKC.js.map → ClaudeService-FKPOQRA4.js.map} +0 -0
  124. /package/dist/{GitHubService-O7U4UQ7N.js.map → GitHubService-ACZVNTJE.js.map} +0 -0
  125. /package/dist/{LoomLauncher-U2B3VHPC.js.map → LoomLauncher-NHZMEVTQ.js.map} +0 -0
  126. /package/dist/{MetadataManager-XJ2YB762.js.map → MetadataManager-W3C54UYT.js.map} +0 -0
  127. /package/dist/{PRManager-7F3AAY66.js.map → PRManager-H4TUZTZL.js.map} +0 -0
  128. /package/dist/{PromptTemplateManager-7L3HJQQU.js.map → PromptTemplateManager-OUYDHOPI.js.map} +0 -0
  129. /package/dist/{SettingsManager-YU4VYPTW.js.map → SettingsManager-VCVLL32H.js.map} +0 -0
  130. /package/dist/{SettingsMigrationManager-KZKDG66H.js.map → SettingsMigrationManager-LEBMJP3B.js.map} +0 -0
  131. /package/dist/{build-HQ5HGA3T.js.map → build-H4DK3DMQ.js.map} +0 -0
  132. /package/dist/{chunk-VYKKWU36.js.map → chunk-4KGRPHM6.js.map} +0 -0
  133. /package/dist/{chunk-CFQVOTHO.js.map → chunk-52MVUK5V.js.map} +0 -0
  134. /package/dist/{chunk-7LSSNB7Y.js.map → chunk-7ZEHSSUP.js.map} +0 -0
  135. /package/dist/{chunk-ELJKYFSH.js.map → chunk-BCQDYAOJ.js.map} +0 -0
  136. /package/dist/{chunk-F2PWIRV4.js.map → chunk-BYUMEDDD.js.map} +0 -0
  137. /package/dist/{chunk-CAXFWFV6.js.map → chunk-ECP77QGE.js.map} +0 -0
  138. /package/dist/{chunk-6YAMWLCP.js.map → chunk-EQOFNPEY.js.map} +0 -0
  139. /package/dist/{chunk-ZA575VLF.js.map → chunk-GDS2HXSW.js.map} +0 -0
  140. /package/dist/{chunk-UDRZY65Y.js.map → chunk-HSGZW3ID.js.map} +0 -0
  141. /package/dist/{chunk-WT4UGBE2.js.map → chunk-PBSHQVCT.js.map} +0 -0
  142. /package/dist/{chunk-64HCHVJM.js.map → chunk-PLI3JQWT.js.map} +0 -0
  143. /package/dist/{chunk-USJSNHGG.js.map → chunk-PVW6JE7E.js.map} +0 -0
  144. /package/dist/{chunk-3K3WY3BN.js.map → chunk-SC6X5EBG.js.map} +0 -0
  145. /package/dist/{chunk-NEPH2O4C.js.map → chunk-SSASIBDJ.js.map} +0 -0
  146. /package/dist/{chunk-ENMTWE74.js.map → chunk-VZYSM7N7.js.map} +0 -0
  147. /package/dist/{chunk-WZYBHD7P.js.map → chunk-XHNACIHO.js.map} +0 -0
  148. /package/dist/{chunk-XAMBIVXE.js.map → chunk-XJHQVOT6.js.map} +0 -0
  149. /package/dist/{cleanup-IO4KV2DL.js.map → cleanup-OGE7V7AD.js.map} +0 -0
  150. /package/dist/{commit-3ULFKXNB.js.map → commit-534QIRHY.js.map} +0 -0
  151. /package/dist/{compile-CT7IR7O2.js.map → compile-ZOAODFN2.js.map} +0 -0
  152. /package/dist/{contribute-GXKOIA42.js.map → contribute-7USRBWRM.js.map} +0 -0
  153. /package/dist/{dev-server-OAP3RZC6.js.map → dev-server-TYYJM3XA.js.map} +0 -0
  154. /package/dist/{feedback-ZLAX3BVL.js.map → feedback-HZVLOTQJ.js.map} +0 -0
  155. /package/dist/{git-ENLT2VNI.js.map → git-GUNOPP4Q.js.map} +0 -0
  156. /package/dist/{init-S6IEGRSX.js.map → init-MZBIXQ7V.js.map} +0 -0
  157. /package/dist/{lint-HAVU4U34.js.map → lint-MDVUV3W2.js.map} +0 -0
  158. /package/dist/{neon-helpers-3KBC4A3Y.js.map → neon-helpers-VVFFTLXE.js.map} +0 -0
  159. /package/dist/{open-IN3LUZXX.js.map → open-2LPZ7XXW.js.map} +0 -0
  160. /package/dist/{projects-CTRTTMSK.js.map → projects-325GEEGJ.js.map} +0 -0
  161. /package/dist/{prompt-3SAZYRUN.js.map → prompt-ONNPSNKM.js.map} +0 -0
  162. /package/dist/{rebase-RLEVFHWN.js.map → rebase-7YS3N274.js.map} +0 -0
  163. /package/dist/{recap-ZKGHZCX6.js.map → recap-GSXFEOD6.js.map} +0 -0
  164. /package/dist/{run-QEIS2EH2.js.map → run-XPGCMFFO.js.map} +0 -0
  165. /package/dist/{shell-2NNSIU34.js.map → shell-2SPM3Z5O.js.map} +0 -0
  166. /package/dist/{summary-MPOOQIOX.js.map → summary-C5VVSJAJ.js.map} +0 -0
  167. /package/dist/{test-75WAA6DU.js.map → test-N2725YRI.js.map} +0 -0
  168. /package/dist/{test-git-E2BLXR6M.js.map → test-git-ZPSPA2TP.js.map} +0 -0
  169. /package/dist/{test-prefix-A7JGGYAA.js.map → test-prefix-6DLB2BHE.js.map} +0 -0
  170. /package/dist/{test-webserver-J6SMNLU2.js.map → test-webserver-XLJ2TZFP.js.map} +0 -0
@@ -4,13 +4,13 @@ import {
4
4
  } from "./chunk-NXMDEL3F.js";
5
5
  import {
6
6
  IdentifierParser
7
- } from "./chunk-5V74K5ZA.js";
7
+ } from "./chunk-TVH67KEO.js";
8
8
  import {
9
9
  GitWorktreeManager
10
- } from "./chunk-UDRZY65Y.js";
11
- import "./chunk-ZA575VLF.js";
12
- import "./chunk-WFQ5CLTR.js";
13
- import "./chunk-VWGKGNJP.js";
10
+ } from "./chunk-HSGZW3ID.js";
11
+ import "./chunk-GDS2HXSW.js";
12
+ import "./chunk-IWIIOFEB.js";
13
+ import "./chunk-KBEIQP4G.js";
14
14
  import "./chunk-6MLEBAYZ.js";
15
15
  import "./chunk-VT4PDUYT.js";
16
16
 
@@ -107,4 +107,4 @@ var RecapCommand = class {
107
107
  export {
108
108
  RecapCommand
109
109
  };
110
- //# sourceMappingURL=recap-ZKGHZCX6.js.map
110
+ //# sourceMappingURL=recap-GSXFEOD6.js.map
@@ -1,21 +1,21 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  DevServerManager
4
- } from "./chunk-ENMTWE74.js";
5
- import "./chunk-WZYBHD7P.js";
4
+ } from "./chunk-VZYSM7N7.js";
5
+ import "./chunk-XHNACIHO.js";
6
6
  import {
7
7
  getWorkspacePort
8
- } from "./chunk-CFQVOTHO.js";
8
+ } from "./chunk-52MVUK5V.js";
9
9
  import {
10
10
  IdentifierParser
11
- } from "./chunk-5V74K5ZA.js";
11
+ } from "./chunk-TVH67KEO.js";
12
12
  import {
13
13
  ProjectCapabilityDetector
14
14
  } from "./chunk-7GLZVDPQ.js";
15
15
  import "./chunk-RD7I2Q2F.js";
16
16
  import {
17
17
  GitWorktreeManager
18
- } from "./chunk-UDRZY65Y.js";
18
+ } from "./chunk-HSGZW3ID.js";
19
19
  import "./chunk-XPKN3QWY.js";
20
20
  import {
21
21
  openBrowser
@@ -25,11 +25,11 @@ import {
25
25
  } from "./chunk-GYCR2LOU.js";
26
26
  import {
27
27
  extractIssueNumber
28
- } from "./chunk-ZA575VLF.js";
28
+ } from "./chunk-GDS2HXSW.js";
29
29
  import {
30
30
  SettingsManager
31
- } from "./chunk-WFQ5CLTR.js";
32
- import "./chunk-VWGKGNJP.js";
31
+ } from "./chunk-IWIIOFEB.js";
32
+ import "./chunk-KBEIQP4G.js";
33
33
  import "./chunk-6MLEBAYZ.js";
34
34
  import {
35
35
  logger
@@ -238,4 +238,4 @@ Make sure the project is built (run 'il start' first)`
238
238
  export {
239
239
  RunCommand
240
240
  };
241
- //# sourceMappingURL=run-QEIS2EH2.js.map
241
+ //# sourceMappingURL=run-XPGCMFFO.js.map
@@ -196,6 +196,24 @@
196
196
  "haiku"
197
197
  ],
198
198
  "description": "Claude model shorthand: sonnet, opus, or haiku"
199
+ },
200
+ "enabled": {
201
+ "type": "boolean",
202
+ "description": "Whether this agent is enabled. Defaults to true."
203
+ },
204
+ "providers": {
205
+ "type": "object",
206
+ "additionalProperties": {
207
+ "type": "string"
208
+ },
209
+ "propertyNames": {
210
+ "enum": [
211
+ "claude",
212
+ "gemini",
213
+ "codex"
214
+ ]
215
+ },
216
+ "description": "Map of review providers to model names. Keys: claude, gemini, codex. Values: model name strings (e.g., \"sonnet\", \"gemini-3-pro-preview\", \"gpt-5.2-codex\")"
199
217
  }
200
218
  },
201
219
  "additionalProperties": false
@@ -207,7 +225,7 @@
207
225
  "type": "null"
208
226
  }
209
227
  ],
210
- "description": "Per-agent configuration overrides. Available agents: iloom-issue-analyzer (analyzes issues), iloom-issue-planner (creates implementation plans), iloom-issue-analyze-and-plan (combined analysis and planning), iloom-issue-complexity-evaluator (evaluates complexity), iloom-issue-enhancer (enhances issue descriptions), iloom-issue-implementer (implements code changes), iloom-issue-reviewer (reviews code changes against requirements)"
228
+ "description": "Per-agent configuration overrides. Available agents: iloom-issue-analyzer (analyzes issues), iloom-issue-planner (creates implementation plans), iloom-issue-analyze-and-plan (combined analysis and planning), iloom-issue-complexity-evaluator (evaluates complexity), iloom-issue-enhancer (enhances issue descriptions), iloom-issue-implementer (implements code changes), iloom-code-reviewer (reviews code changes against requirements)"
211
229
  },
212
230
  "spin": {
213
231
  "type": "object",
@@ -226,6 +244,44 @@
226
244
  "additionalProperties": false,
227
245
  "description": "Spin orchestrator configuration. Model defaults to opus when not configured."
228
246
  },
247
+ "plan": {
248
+ "type": "object",
249
+ "properties": {
250
+ "model": {
251
+ "type": "string",
252
+ "enum": [
253
+ "sonnet",
254
+ "opus",
255
+ "haiku"
256
+ ],
257
+ "default": "opus",
258
+ "description": "Claude model shorthand for plan command"
259
+ },
260
+ "planner": {
261
+ "type": "string",
262
+ "enum": [
263
+ "claude",
264
+ "gemini",
265
+ "codex"
266
+ ],
267
+ "default": "claude",
268
+ "description": "AI provider for creating the plan"
269
+ },
270
+ "reviewer": {
271
+ "type": "string",
272
+ "enum": [
273
+ "claude",
274
+ "gemini",
275
+ "codex",
276
+ "none"
277
+ ],
278
+ "default": "none",
279
+ "description": "AI provider for reviewing the plan (none to skip review)"
280
+ }
281
+ },
282
+ "additionalProperties": false,
283
+ "description": "Plan command configuration. Model defaults to opus, planner to claude, reviewer to none when not configured."
284
+ },
229
285
  "summary": {
230
286
  "type": "object",
231
287
  "properties": {
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  IdentifierParser
4
- } from "./chunk-5V74K5ZA.js";
4
+ } from "./chunk-TVH67KEO.js";
5
5
  import {
6
6
  GitWorktreeManager
7
- } from "./chunk-UDRZY65Y.js";
7
+ } from "./chunk-HSGZW3ID.js";
8
8
  import {
9
9
  extractIssueNumber
10
- } from "./chunk-ZA575VLF.js";
10
+ } from "./chunk-GDS2HXSW.js";
11
11
  import {
12
12
  SettingsManager
13
- } from "./chunk-WFQ5CLTR.js";
14
- import "./chunk-VWGKGNJP.js";
13
+ } from "./chunk-IWIIOFEB.js";
14
+ import "./chunk-KBEIQP4G.js";
15
15
  import "./chunk-6MLEBAYZ.js";
16
16
  import {
17
17
  getDotenvFlowFiles,
@@ -235,4 +235,4 @@ var ShellCommand = class {
235
235
  export {
236
236
  ShellCommand
237
237
  };
238
- //# sourceMappingURL=shell-2NNSIU34.js.map
238
+ //# sourceMappingURL=shell-2SPM3Z5O.js.map
@@ -1,29 +1,29 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  SessionSummaryService
4
- } from "./chunk-WT4UGBE2.js";
4
+ } from "./chunk-PBSHQVCT.js";
5
5
  import "./chunk-NXMDEL3F.js";
6
6
  import {
7
7
  GitWorktreeManager
8
- } from "./chunk-UDRZY65Y.js";
8
+ } from "./chunk-HSGZW3ID.js";
9
9
  import {
10
10
  PRManager
11
- } from "./chunk-6YAMWLCP.js";
11
+ } from "./chunk-EQOFNPEY.js";
12
12
  import "./chunk-YETJNRQM.js";
13
- import "./chunk-NPEMVE27.js";
14
- import "./chunk-HBJITKSZ.js";
13
+ import "./chunk-UDZCTLD6.js";
14
+ import "./chunk-RNBIISBZ.js";
15
15
  import "./chunk-FXDYIV3K.js";
16
- import "./chunk-TIYJEEVO.js";
16
+ import "./chunk-66QOCD5N.js";
17
17
  import {
18
18
  extractIssueNumber
19
- } from "./chunk-ZA575VLF.js";
19
+ } from "./chunk-GDS2HXSW.js";
20
20
  import {
21
21
  SettingsManager
22
- } from "./chunk-WFQ5CLTR.js";
22
+ } from "./chunk-IWIIOFEB.js";
23
23
  import {
24
24
  MetadataManager
25
- } from "./chunk-VWGKGNJP.js";
26
- import "./chunk-GCPAZSGV.js";
25
+ } from "./chunk-KBEIQP4G.js";
26
+ import "./chunk-THS5L54H.js";
27
27
  import "./chunk-IGKPPACU.js";
28
28
  import {
29
29
  getLogger
@@ -280,4 +280,4 @@ Please provide an issue number, PR number, or branch name.`
280
280
  export {
281
281
  SummaryCommand
282
282
  };
283
- //# sourceMappingURL=summary-MPOOQIOX.js.map
283
+ //# sourceMappingURL=summary-C5VVSJAJ.js.map
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ScriptCommandBase
4
- } from "./chunk-ELJKYFSH.js";
5
- import "./chunk-5V74K5ZA.js";
4
+ } from "./chunk-BCQDYAOJ.js";
5
+ import "./chunk-TVH67KEO.js";
6
6
  import "./chunk-RD7I2Q2F.js";
7
- import "./chunk-UDRZY65Y.js";
7
+ import "./chunk-HSGZW3ID.js";
8
8
  import "./chunk-XPKN3QWY.js";
9
- import "./chunk-ZA575VLF.js";
10
- import "./chunk-WFQ5CLTR.js";
11
- import "./chunk-VWGKGNJP.js";
9
+ import "./chunk-GDS2HXSW.js";
10
+ import "./chunk-IWIIOFEB.js";
11
+ import "./chunk-KBEIQP4G.js";
12
12
  import "./chunk-6MLEBAYZ.js";
13
13
  import "./chunk-VT4PDUYT.js";
14
14
 
@@ -24,4 +24,4 @@ var TestCommand = class extends ScriptCommandBase {
24
24
  export {
25
25
  TestCommand
26
26
  };
27
- //# sourceMappingURL=test-75WAA6DU.js.map
27
+ //# sourceMappingURL=test-N2725YRI.js.map
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  findMainWorktreePath
4
- } from "./chunk-ZA575VLF.js";
4
+ } from "./chunk-GDS2HXSW.js";
5
5
  import {
6
6
  SettingsManager
7
- } from "./chunk-WFQ5CLTR.js";
8
- import "./chunk-VWGKGNJP.js";
7
+ } from "./chunk-IWIIOFEB.js";
8
+ import "./chunk-KBEIQP4G.js";
9
9
  import "./chunk-6MLEBAYZ.js";
10
10
  import {
11
11
  logger
@@ -51,4 +51,4 @@ var TestGitCommand = class {
51
51
  export {
52
52
  TestGitCommand
53
53
  };
54
- //# sourceMappingURL=test-git-E2BLXR6M.js.map
54
+ //# sourceMappingURL=test-git-ZPSPA2TP.js.map
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  generateWorktreePath
4
- } from "./chunk-ZA575VLF.js";
4
+ } from "./chunk-GDS2HXSW.js";
5
5
  import {
6
6
  SettingsManager
7
- } from "./chunk-WFQ5CLTR.js";
8
- import "./chunk-VWGKGNJP.js";
7
+ } from "./chunk-IWIIOFEB.js";
8
+ import "./chunk-KBEIQP4G.js";
9
9
  import "./chunk-6MLEBAYZ.js";
10
10
  import {
11
11
  logger
@@ -67,4 +67,4 @@ var TestPrefixCommand = class {
67
67
  export {
68
68
  TestPrefixCommand
69
69
  };
70
- //# sourceMappingURL=test-prefix-A7JGGYAA.js.map
70
+ //# sourceMappingURL=test-prefix-6DLB2BHE.js.map
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ProcessManager
4
- } from "./chunk-WZYBHD7P.js";
5
- import "./chunk-CFQVOTHO.js";
6
- import "./chunk-ZA575VLF.js";
4
+ } from "./chunk-XHNACIHO.js";
5
+ import "./chunk-52MVUK5V.js";
6
+ import "./chunk-GDS2HXSW.js";
7
7
  import {
8
8
  SettingsManager
9
- } from "./chunk-WFQ5CLTR.js";
10
- import "./chunk-VWGKGNJP.js";
9
+ } from "./chunk-IWIIOFEB.js";
10
+ import "./chunk-KBEIQP4G.js";
11
11
  import "./chunk-6MLEBAYZ.js";
12
12
  import {
13
13
  logger
@@ -81,4 +81,4 @@ var TestWebserverCommand = class {
81
81
  export {
82
82
  TestWebserverCommand
83
83
  };
84
- //# sourceMappingURL=test-webserver-J6SMNLU2.js.map
84
+ //# sourceMappingURL=test-webserver-XLJ2TZFP.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iloom/cli",
3
- "version": "0.7.6",
3
+ "version": "0.8.1",
4
4
  "description": "Control plane for maintaining alignment between you and Claude Code as you work across multiple issues using isolated environments, visible context, and multi-agent workflows to scale understanding, not just output",
5
5
  "keywords": [
6
6
  "ai",
@@ -1,12 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- GitHubService
4
- } from "./chunk-USJSNHGG.js";
5
- import "./chunk-GCPAZSGV.js";
6
- import "./chunk-ZX3GTM7O.js";
7
- import "./chunk-6MLEBAYZ.js";
8
- import "./chunk-VT4PDUYT.js";
9
- export {
10
- GitHubService
11
- };
12
- //# sourceMappingURL=GitHubService-O7U4UQ7N.js.map
@@ -1,139 +0,0 @@
1
- ---
2
- name: iloom-issue-reviewer
3
- description: Use this agent when you need to review uncommitted code changes against a specific issue to verify completeness and quality. The agent will analyze the issue requirements, examine the code changes, and post a detailed review comment directly on the issue. Examples:\n\n<example>\nContext: The user has made code changes to address an issue and wants to verify the implementation before committing.\nuser: "I've finished implementing the fix for issue #42, can you review it?"\nassistant: "I'll use the Task tool to launch the iloom-issue-reviewer agent to analyze your changes against issue #42."\n<commentary>\nSince the user has completed work on an issue and wants a review, use the iloom-issue-reviewer agent to verify the implementation.\n</commentary>\n</example>\n\n<example>\nContext: The user wants to ensure their changes fully address all requirements in an issue.\nuser: "Check if my changes properly solve issue #15"\nassistant: "Let me use the iloom-issue-reviewer agent to verify your implementation against issue #15's requirements."\n<commentary>\nThe user is asking for verification that their code changes meet the issue requirements, so use the iloom-issue-reviewer agent.\n</commentary>\n</example>
4
- tools: Bash, Glob, Grep, Read, Edit, Write, NotebookEdit, WebFetch, TodoWrite, WebSearch, BashOutput, SlashCommand, ListMcpResourcesTool, ReadMcpResourceTool, mcp__context7__resolve-library-id, mcp__context7__get-library-docs, mcp__issue_management__get_issue, mcp__issue_management__get_pr, mcp__issue_management__get_comment, mcp__issue_management__create_comment, mcp__issue_management__update_comment, mcp__recap__get_recap, mcp__recap__add_entry, mcp__recap__add_artifact
5
- model: sonnet
6
- color: cyan
7
- ---
8
-
9
- You are an expert code reviewer specializing in issue verification. Your primary responsibility is to thoroughly analyze uncommitted code changes against their corresponding issue requirements and provide comprehensive feedback. Ultrathink as you execute the following.
10
-
11
- ## Loom Recap
12
-
13
- After creating or updating any issue comment, use the Recap MCP tools:
14
- - `recap.add_artifact` - Log comments with type='comment', primaryUrl (full URL with comment ID), and description. Re-calling with the same primaryUrl will update the existing entry.
15
-
16
- This enables the recap panel to show quick-reference links to artifacts created during the session.
17
-
18
- **Core Responsibilities:**
19
-
20
- 1. **Issue Analysis**: You will first retrieve and carefully read the entire issue using the MCP tool `mcp__issue_management__get_issue` with parameters `{ number: {{ISSUE_NUMBER}}, includeComments: true }`. Extract all requirements, acceptance criteria, and context from both the issue body and all comments. Pay special attention to any clarifications or requirement changes mentioned in the comment thread. If no issue number has been provided, use the current branch name to look for an issue number (i.e issue-NN). If there is a pr_NN suffix, look at both the PR and the issue (if one is also referenced in the branch name).
21
-
22
- 2. **Code Review Process**: You will examine the uncommitted changes using `git diff` and `git status`. Analyze each change against the issue requirements with deep critical thinking. Consider:
23
- - Does the implementation fully address all stated requirements?
24
- - Are there any edge cases mentioned in the issue that aren't handled?
25
- - Is the code quality appropriate (following project patterns from any CLAUDE.md context)?
26
- - Are there any unintended side effects or regressions?
27
- - Does the solution align with the architectural decisions discussed in the issue?
28
-
29
- 3. **Verification Methodology**: You will:
30
- - Create a mental checklist of all requirements from the issue
31
- - Map each requirement to specific code changes
32
- - Identify any gaps between requirements and implementation
33
- - Assess code quality, maintainability, and adherence to project standards
34
- - Consider performance implications if relevant to the issue
35
-
36
- 4. **Comment Composition**: You will write your review as a structured issue comment that includes:
37
- - A summary verdict (e.g., "✅ Implementation Complete" or "⚠️ Partial Implementation")
38
- - A requirement-by-requirement breakdown showing what was addressed
39
- - Specific observations about code quality and implementation choices
40
- - Any concerns, missing pieces, or suggestions for improvement
41
- - Positive acknowledgment of well-implemented aspects
42
- - IMPORTANT: When including code excerpts or diffs >5 lines, wrap in `<details>/<summary>` tags with format: "Click to expand [type] ([N] lines) - [context]"
43
-
44
- 5. **Technical Execution**: To post your comment, you will use the MCP tool `mcp__issue_management__create_comment` with parameters `{ number: {{ISSUE_NUMBER}}, body: "your review content", type: "issue" }`. This approach properly handles markdown content and works across different issue tracking systems.
45
-
46
- <comment_tool_info>
47
- IMPORTANT: You have been provided with MCP tools for issue management during this workflow.
48
-
49
- Available Tools:
50
- - mcp__issue_management__get_issue: Fetch issue details
51
- Parameters: { number: string, includeComments?: boolean }
52
- Returns: { title, body, comments, labels, assignees, state, ... }
53
-
54
- - mcp__issue_management__get_comment: Fetch a specific comment
55
- Parameters: { commentId: string, number: string }
56
- Returns: { id, body, author, created_at, ... }
57
-
58
- {{#if DRAFT_PR_MODE}}- mcp__issue_management__create_comment: Create a new comment on PR {{DRAFT_PR_NUMBER}}
59
- Parameters: { number: string, body: "markdown content", type: "pr" }{{/if}}{{#if STANDARD_ISSUE_MODE}}- mcp__issue_management__create_comment: Create a new comment on issue {{ISSUE_NUMBER}}
60
- Parameters: { number: string, body: "markdown content", type: "issue" }{{/if}}
61
- Returns: { id: string, url: string, created_at: string }
62
-
63
- - mcp__issue_management__update_comment: Update an existing comment
64
- Parameters: { commentId: string, number: string, body: "updated markdown content" }
65
- Returns: { id: string, url: string, updated_at: string }
66
-
67
- Workflow Comment Strategy:
68
- 1. When beginning review, create a NEW comment informing the user you are working on reviewing the issue.
69
- 2. Store the returned comment ID and URL. After creating the comment, call `mcp__recap__add_artifact` to log it with type='comment', primaryUrl=[comment URL], and a brief description (e.g., "Code review comment").
70
- 3. Once you have formulated your review tasks in a todo format, update the comment using mcp__issue_management__update_comment with your tasks formatted as checklists using markdown:
71
- - [ ] for incomplete tasks (which should be all of them at this point)
72
- 4. After you complete every todo item, update the comment using mcp__issue_management__update_comment with your progress - you may add todo items if you need:
73
- - [ ] for incomplete tasks
74
- - [x] for completed tasks
75
-
76
- * Include relevant context (current step, progress, blockers) and a **very aggressive** estimated time to completion of this step and the whole task in each update after the comment's todo list
77
- 5. When you have finished your task, update the same comment as before - MAKE SURE YOU DO NOT ERASE THE "details" section, then let the calling process know the full web URL of the issue comment, including the comment ID. NEVER ATTEMPT CONCURRENT UPDATES OF THE COMMENT. DATA WILL BE LOST.
78
- 6. CONSTRAINT: After you create the initial comment, you may not create another comment. You must always update the initial comment instead.
79
-
80
- Example Usage:
81
- ```
82
- // Start
83
- {{#if DRAFT_PR_MODE}}const comment = await mcp__issue_management__create_comment({
84
- number: {{DRAFT_PR_NUMBER}},
85
- body: "# Code Review Phase\n\n- [ ] Fetch issue details\n- [ ] Analyze requirements\n- [ ] Review code changes",
86
- type: "pr"
87
- }){{/if}}{{#if STANDARD_ISSUE_MODE}}const comment = await mcp__issue_management__create_comment({
88
- number: {{ISSUE_NUMBER}},
89
- body: "# Code Review Phase\n\n- [ ] Fetch issue details\n- [ ] Analyze requirements\n- [ ] Review code changes",
90
- type: "issue"
91
- }){{/if}}
92
-
93
- // Log the comment as an artifact
94
- await mcp__recap__add_artifact({
95
- type: "comment",
96
- primaryUrl: comment.url,
97
- description: "Code review comment"
98
- })
99
-
100
- // Update as you progress
101
- {{#if DRAFT_PR_MODE}}await mcp__issue_management__update_comment({
102
- commentId: comment.id,
103
- number: {{DRAFT_PR_NUMBER}},
104
- body: "# Code Review Phase\n\n- [x] Fetch issue details\n- [ ] Analyze requirements\n- [ ] Review code changes"
105
- }){{/if}}{{#if STANDARD_ISSUE_MODE}}await mcp__issue_management__update_comment({
106
- commentId: comment.id,
107
- number: {{ISSUE_NUMBER}},
108
- body: "# Code Review Phase\n\n- [x] Fetch issue details\n- [ ] Analyze requirements\n- [ ] Review code changes"
109
- }){{/if}}
110
- ```
111
- </comment_tool_info>
112
-
113
- **Quality Standards:**
114
- - Be thorough but concise - every observation should add value
115
- - Use specific code references when pointing out issues
116
- - Maintain a constructive, professional tone
117
- - Acknowledge good implementation decisions, not just problems
118
- - If the implementation is incomplete, clearly state what remains to be done
119
- - If you notice improvements beyond the issue scope, mention them as "future considerations"
120
-
121
- **Decision Framework:**
122
- When evaluating completeness:
123
- - ✅ Complete: All requirements met, code quality good, no significant issues
124
- - ⚠️ Mostly Complete: Core requirements met but minor items missing or quality concerns
125
- - ❌ Incomplete: Major requirements unaddressed or significant issues present
126
-
127
- **Important Notes:**
128
- - Always think critically and deeply about the context before making judgments
129
- - If the issue references other issues or PRs, consider checking those for additional context
130
- - Never assume implementation details not explicitly shown in the diff
131
- - If you cannot access the issue or code, clearly state this limitation
132
- - Focus on uncommitted changes only - do not review the entire codebase unless specifically requested
133
-
134
- ## HOW TO UPDATE THE USER OF YOUR PROGRESS
135
- * AS SOON AS YOU CAN, once you have formulated an initial plan/todo list for your review task, you should create a comment as described in the <comment_tool_info> section above.
136
- * AFTER YOU COMPLETE EACH ITEM ON YOUR TODO LIST - update the same comment with your progress as described in the <comment_tool_info> section above.
137
- * When the whole task is complete, update the SAME comment with the results of your work including your complete review. DO NOT include comments like "see previous comment for details" - this represents a failure of your task. NEVER ATTEMPT CONCURRENT UPDATES OF THE COMMENT. DATA WILL BE LOST.
138
-
139
- Your review should help the developer understand exactly where their implementation stands relative to the issue requirements and what, if anything, needs additional work.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/IdentifierParser.ts"],"sourcesContent":["import type { ParsedInput } from '../commands/start.js'\nimport type { GitWorktreeManager } from '../lib/GitWorktreeManager.js'\nimport { extractIssueNumber, extractPRNumber } from './git.js'\n\n/**\n * IdentifierParser provides consistent identifier parsing across commands\n * using pattern-based detection without GitHub API calls.\n *\n * Detection Strategy:\n * 1. For numeric input (e.g., \"42\", \"#66\"):\n * - Check for PR worktree first (_pr_N pattern in path)\n * - Then check for issue worktree (issue-N pattern in branch)\n * 2. For alphanumeric input (e.g., \"ENG-123\"):\n * - Check for issue worktree with alphanumeric identifier\n * 3. For branch-style input (e.g., \"feat/issue-42__description\", \"pr/123\"):\n * - Find matching worktree by branch name\n * - Extract PR number from branch name if present (priority)\n * - Extract issue number from branch name if present\n * - Return as PR/issue type if number found, otherwise branch type\n *\n * This ensures:\n * - No unnecessary GitHub API calls\n * - Consistent behavior across finish/cleanup commands\n * - PR detection takes priority over issue detection\n * - Issue numbers are extracted from branch names for \"Fixes #N\" commit trailers\n */\nexport class IdentifierParser {\n\tconstructor(private gitWorktreeManager: GitWorktreeManager) {}\n\n\t/**\n\t * Parse identifier using pattern-based detection on existing worktrees.\n\t * Does NOT make GitHub API calls - only checks local worktree patterns.\n\t *\n\t * @param identifier - The identifier to parse (e.g., \"42\", \"#66\", \"ENG-123\", \"my-branch\")\n\t * @returns ParsedInput with type, number/branchName, and originalInput\n\t * @throws Error if no matching worktree is found\n\t */\n\tasync parseForPatternDetection(identifier: string): Promise<ParsedInput> {\n\t\t// Remove # prefix if present and trim whitespace\n\t\tconst cleanId = identifier.replace(/^#/, '').trim()\n\t\tconst originalInput = identifier\n\n\t\t// Check if input is numeric (GitHub-style issue/PR numbers)\n\t\tconst numericMatch = cleanId.match(/^(\\d+)$/)\n\n\t\tif (numericMatch?.[1]) {\n\t\t\tconst number = parseInt(numericMatch[1], 10)\n\n\t\t\t// Priority 1: Check for PR worktree (_pr_N pattern)\n\t\t\t// Pass empty string for branch name since we don't know it yet\n\t\t\tconst prWorktree = await this.gitWorktreeManager.findWorktreeForPR(number, '')\n\t\t\tif (prWorktree) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'pr',\n\t\t\t\t\tnumber,\n\t\t\t\t\toriginalInput,\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Priority 2: Check for issue worktree (issue-N pattern)\n\t\t\tconst issueWorktree = await this.gitWorktreeManager.findWorktreeForIssue(number)\n\t\t\tif (issueWorktree) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'issue',\n\t\t\t\t\tnumber,\n\t\t\t\t\toriginalInput,\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// No matching worktree found for numeric input\n\t\t\tthrow new Error(`No worktree found for identifier: ${identifier}`)\n\t\t}\n\n\t\t// Check if input is alphanumeric issue identifier (Linear/Jira-style: ABC-123, ENG-42)\n\t\tconst alphanumericMatch = cleanId.match(/^([A-Za-z]+-\\d+)$/)\n\n\t\tif (alphanumericMatch?.[1]) {\n\t\t\tconst alphanumericId = alphanumericMatch[1]\n\n\t\t\t// Check for issue worktree with alphanumeric identifier\n\t\t\tconst issueWorktree = await this.gitWorktreeManager.findWorktreeForIssue(alphanumericId)\n\t\t\tif (issueWorktree) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'issue',\n\t\t\t\t\tnumber: alphanumericId,\n\t\t\t\t\toriginalInput,\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// No matching worktree found for alphanumeric identifier\n\t\t\tthrow new Error(`No worktree found for identifier: ${identifier}`)\n\t\t}\n\n\t\t// Non-numeric/non-alphanumeric input: treat as branch name\n\t\tconst branchWorktree = await this.gitWorktreeManager.findWorktreeForBranch(cleanId)\n\t\tif (branchWorktree) {\n\t\t\t// Priority 1: Check for PR pattern in the input\n\t\t\tconst prFromBranch = extractPRNumber(cleanId)\n\t\t\tif (prFromBranch !== null) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'pr',\n\t\t\t\t\tnumber: prFromBranch,\n\t\t\t\t\toriginalInput,\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Priority 2: Try to extract issue number from branch name\n\t\t\t// This handles cases like \"feat/issue-42__description\" passed as explicit input\n\t\t\tconst issueFromBranch = extractIssueNumber(cleanId)\n\t\t\tif (issueFromBranch !== null) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'issue',\n\t\t\t\t\tnumber: issueFromBranch,\n\t\t\t\t\toriginalInput,\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ttype: 'branch',\n\t\t\t\tbranchName: cleanId,\n\t\t\t\toriginalInput,\n\t\t\t}\n\t\t}\n\n\t\t// No matching worktree found for branch name\n\t\tthrow new Error(`No worktree found for identifier: ${identifier}`)\n\t}\n}\n"],"mappings":";;;;;;;AA0BO,IAAM,mBAAN,MAAuB;AAAA,EAC7B,YAAoB,oBAAwC;AAAxC;AAAA,EAAyC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAU7D,MAAM,yBAAyB,YAA0C;AAExE,UAAM,UAAU,WAAW,QAAQ,MAAM,EAAE,EAAE,KAAK;AAClD,UAAM,gBAAgB;AAGtB,UAAM,eAAe,QAAQ,MAAM,SAAS;AAE5C,QAAI,6CAAe,IAAI;AACtB,YAAM,SAAS,SAAS,aAAa,CAAC,GAAG,EAAE;AAI3C,YAAM,aAAa,MAAM,KAAK,mBAAmB,kBAAkB,QAAQ,EAAE;AAC7E,UAAI,YAAY;AACf,eAAO;AAAA,UACN,MAAM;AAAA,UACN;AAAA,UACA;AAAA,QACD;AAAA,MACD;AAGA,YAAM,gBAAgB,MAAM,KAAK,mBAAmB,qBAAqB,MAAM;AAC/E,UAAI,eAAe;AAClB,eAAO;AAAA,UACN,MAAM;AAAA,UACN;AAAA,UACA;AAAA,QACD;AAAA,MACD;AAGA,YAAM,IAAI,MAAM,qCAAqC,UAAU,EAAE;AAAA,IAClE;AAGA,UAAM,oBAAoB,QAAQ,MAAM,mBAAmB;AAE3D,QAAI,uDAAoB,IAAI;AAC3B,YAAM,iBAAiB,kBAAkB,CAAC;AAG1C,YAAM,gBAAgB,MAAM,KAAK,mBAAmB,qBAAqB,cAAc;AACvF,UAAI,eAAe;AAClB,eAAO;AAAA,UACN,MAAM;AAAA,UACN,QAAQ;AAAA,UACR;AAAA,QACD;AAAA,MACD;AAGA,YAAM,IAAI,MAAM,qCAAqC,UAAU,EAAE;AAAA,IAClE;AAGA,UAAM,iBAAiB,MAAM,KAAK,mBAAmB,sBAAsB,OAAO;AAClF,QAAI,gBAAgB;AAEnB,YAAM,eAAe,gBAAgB,OAAO;AAC5C,UAAI,iBAAiB,MAAM;AAC1B,eAAO;AAAA,UACN,MAAM;AAAA,UACN,QAAQ;AAAA,UACR;AAAA,QACD;AAAA,MACD;AAIA,YAAM,kBAAkB,mBAAmB,OAAO;AAClD,UAAI,oBAAoB,MAAM;AAC7B,eAAO;AAAA,UACN,MAAM;AAAA,UACN,QAAQ;AAAA,UACR;AAAA,QACD;AAAA,MACD;AAEA,aAAO;AAAA,QACN,MAAM;AAAA,QACN,YAAY;AAAA,QACZ;AAAA,MACD;AAAA,IACD;AAGA,UAAM,IAAI,MAAM,qCAAqC,UAAU,EAAE;AAAA,EAClE;AACD;","names":[]}