@iloom/cli 0.9.2 → 0.10.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 (231) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +160 -41
  3. package/dist/{BranchNamingService-K6XNWQ6C.js → BranchNamingService-25KSZAEM.js} +2 -2
  4. package/dist/ClaudeContextManager-66GR4BGM.js +14 -0
  5. package/dist/ClaudeService-7KM5NA5Z.js +13 -0
  6. package/dist/{GitHubService-TGWJN4V4.js → GitHubService-MEHKHUQP.js} +4 -4
  7. package/dist/IssueTrackerFactory-NG53YX5S.js +14 -0
  8. package/dist/{LoomLauncher-73NXL2CL.js → LoomLauncher-TDLZSYG2.js} +9 -9
  9. package/dist/{MetadataManager-W3C54UYT.js → MetadataManager-5QZSTKNN.js} +2 -2
  10. package/dist/{ProjectCapabilityDetector-N5L7T4IY.js → ProjectCapabilityDetector-5KSYUTBJ.js} +3 -3
  11. package/dist/{PromptTemplateManager-36YLQRHP.js → PromptTemplateManager-YOE2SIPG.js} +2 -2
  12. package/dist/README.md +160 -41
  13. package/dist/{SettingsManager-AW3JTJHD.js → SettingsManager-FNKCOZMQ.js} +4 -2
  14. package/dist/agents/iloom-artifact-reviewer.md +11 -0
  15. package/dist/agents/iloom-code-reviewer.md +14 -0
  16. package/dist/agents/iloom-issue-analyze-and-plan.md +55 -12
  17. package/dist/agents/iloom-issue-analyzer.md +49 -6
  18. package/dist/agents/iloom-issue-complexity-evaluator.md +47 -6
  19. package/dist/agents/iloom-issue-enhancer.md +86 -7
  20. package/dist/agents/iloom-issue-implementer.md +48 -7
  21. package/dist/agents/iloom-issue-planner.md +115 -62
  22. package/dist/{build-THZI572G.js → build-VHGEMXBA.js} +9 -9
  23. package/dist/chunk-4232AHNQ.js +35 -0
  24. package/dist/chunk-4232AHNQ.js.map +1 -0
  25. package/dist/chunk-4E7LCFUG.js +24 -0
  26. package/dist/chunk-4E7LCFUG.js.map +1 -0
  27. package/dist/{chunk-AR5QKYNE.js → chunk-4FGEGQW4.js} +4 -4
  28. package/dist/{chunk-R4YWBGY6.js → chunk-5FJWO4IT.js} +67 -22
  29. package/dist/chunk-5FJWO4IT.js.map +1 -0
  30. package/dist/{chunk-VPTAX5TR.js → chunk-5RPBYK5Q.js} +35 -30
  31. package/dist/chunk-5RPBYK5Q.js.map +1 -0
  32. package/dist/{chunk-YKFCCV6S.js → chunk-63QWFWH3.js} +7 -7
  33. package/dist/chunk-63QWFWH3.js.map +1 -0
  34. package/dist/{chunk-RI2YL6TK.js → chunk-7VHJNVLF.js} +80 -23
  35. package/dist/chunk-7VHJNVLF.js.map +1 -0
  36. package/dist/{chunk-B7U6OKUR.js → chunk-C6HNNJIV.js} +11 -3
  37. package/dist/chunk-C6HNNJIV.js.map +1 -0
  38. package/dist/{chunk-A7NJF73J.js → chunk-CVCTIDDK.js} +4 -4
  39. package/dist/{chunk-Z2TWEXR7.js → chunk-E6KOWMKA.js} +6 -6
  40. package/dist/chunk-E6KOWMKA.js.map +1 -0
  41. package/dist/{chunk-3I4ONZRT.js → chunk-EVPZFV3K.js} +10 -10
  42. package/dist/chunk-EVPZFV3K.js.map +1 -0
  43. package/dist/{chunk-IZIYLYPK.js → chunk-G5V75JD5.js} +2 -2
  44. package/dist/chunk-GRISNU6G.js +651 -0
  45. package/dist/chunk-GRISNU6G.js.map +1 -0
  46. package/dist/chunk-HEXKPKCK.js +1396 -0
  47. package/dist/chunk-HEXKPKCK.js.map +1 -0
  48. package/dist/{chunk-TC7APDKU.js → chunk-I5T677EA.js} +2 -2
  49. package/dist/{chunk-KBEIQP4G.js → chunk-KB64WNBZ.js} +43 -3
  50. package/dist/chunk-KB64WNBZ.js.map +1 -0
  51. package/dist/{chunk-NWMORW3U.js → chunk-KIK2ZFAL.js} +2 -2
  52. package/dist/{chunk-CWRI4JC3.js → chunk-KKV5WH5M.js} +30 -31
  53. package/dist/chunk-KKV5WH5M.js.map +1 -0
  54. package/dist/{chunk-DGG2VY7B.js → chunk-KVHIAWVT.js} +9 -9
  55. package/dist/chunk-KVHIAWVT.js.map +1 -0
  56. package/dist/{chunk-OFDN5NKS.js → chunk-KXDRI47U.js} +69 -12
  57. package/dist/chunk-KXDRI47U.js.map +1 -0
  58. package/dist/{chunk-NUACL52E.js → chunk-LLHXQS3C.js} +2 -2
  59. package/dist/chunk-LUKXJSRI.js +73 -0
  60. package/dist/chunk-LUKXJSRI.js.map +1 -0
  61. package/dist/{chunk-TL72BGP6.js → chunk-MORRVYPT.js} +2 -2
  62. package/dist/chunk-OTGH2HRS.js +1427 -0
  63. package/dist/chunk-OTGH2HRS.js.map +1 -0
  64. package/dist/{chunk-7ZEHSSUP.js → chunk-P4O6EH46.js} +4 -4
  65. package/dist/{chunk-KAYXR544.js → chunk-QVLPWNE3.js} +2 -2
  66. package/dist/chunk-QZWEJVWV.js +207 -0
  67. package/dist/chunk-QZWEJVWV.js.map +1 -0
  68. package/dist/chunk-RJ3VBUFK.js +781 -0
  69. package/dist/chunk-RJ3VBUFK.js.map +1 -0
  70. package/dist/chunk-RSYT7MVI.js +202 -0
  71. package/dist/chunk-RSYT7MVI.js.map +1 -0
  72. package/dist/{chunk-6IIL5M2L.js → chunk-S7PZA6IV.js} +10 -8
  73. package/dist/{chunk-6IIL5M2L.js.map → chunk-S7PZA6IV.js.map} +1 -1
  74. package/dist/chunk-SKSYYBCU.js +229 -0
  75. package/dist/chunk-SKSYYBCU.js.map +1 -0
  76. package/dist/{chunk-ULSWCPQG.js → chunk-SWSJWA2S.js} +476 -5
  77. package/dist/chunk-SWSJWA2S.js.map +1 -0
  78. package/dist/{chunk-KXGQYLFZ.js → chunk-UKBAJ2QQ.js} +61 -7
  79. package/dist/chunk-UKBAJ2QQ.js.map +1 -0
  80. package/dist/{chunk-FO5GGFOV.js → chunk-UR5DGNUO.js} +71 -9
  81. package/dist/chunk-UR5DGNUO.js.map +1 -0
  82. package/dist/{chunk-QN47QVBX.js → chunk-UUEW5KWB.js} +1 -1
  83. package/dist/chunk-UUEW5KWB.js.map +1 -0
  84. package/dist/{chunk-4CO6KG5S.js → chunk-VG45TUYK.js} +53 -7
  85. package/dist/{chunk-4CO6KG5S.js.map → chunk-VG45TUYK.js.map} +1 -1
  86. package/dist/{chunk-4LKGCFGG.js → chunk-WWKOVDWC.js} +2 -2
  87. package/dist/{chunk-KJTVU3HZ.js → chunk-WXIM2WS7.js} +8 -8
  88. package/dist/chunk-WXIM2WS7.js.map +1 -0
  89. package/dist/{chunk-VOGGLPG5.js → chunk-YQ57ORTV.js} +14 -1
  90. package/dist/chunk-YQ57ORTV.js.map +1 -0
  91. package/dist/{chunk-SOSQILHO.js → chunk-ZNMPGMHY.js} +44 -797
  92. package/dist/chunk-ZNMPGMHY.js.map +1 -0
  93. package/dist/{claude-TP2QO3BU.js → claude-7GGEWVEM.js} +2 -2
  94. package/dist/{cleanup-PJRIFFU4.js → cleanup-6PVAC4NI.js} +85 -34
  95. package/dist/cleanup-6PVAC4NI.js.map +1 -0
  96. package/dist/cli.js +630 -801
  97. package/dist/cli.js.map +1 -1
  98. package/dist/{commit-IVP3M4HG.js → commit-FZR5XDQG.js} +26 -23
  99. package/dist/commit-FZR5XDQG.js.map +1 -0
  100. package/dist/{compile-R2J65HBQ.js → compile-7ALJHZ4N.js} +9 -9
  101. package/dist/{contribute-VDZXHK5Y.js → contribute-5GKLK3BQ.js} +14 -6
  102. package/dist/contribute-5GKLK3BQ.js.map +1 -0
  103. package/dist/{dev-server-7F622OEO.js → dev-server-7SMIB7OF.js} +29 -15
  104. package/dist/dev-server-7SMIB7OF.js.map +1 -0
  105. package/dist/{feedback-E7VET7CL.js → feedback-G2GJFN2F.js} +18 -16
  106. package/dist/{feedback-E7VET7CL.js.map → feedback-G2GJFN2F.js.map} +1 -1
  107. package/dist/{git-2QDQ2X2S.js → git-GTLKAZRJ.js} +4 -4
  108. package/dist/hooks/iloom-hook.js +15 -0
  109. package/dist/ignite-H2O5Y5A2.js +34 -0
  110. package/dist/ignite-H2O5Y5A2.js.map +1 -0
  111. package/dist/index.d.ts +482 -58
  112. package/dist/index.js +1340 -44
  113. package/dist/index.js.map +1 -1
  114. package/dist/{init-676DHF6R.js → init-32YOKXRL.js} +57 -21
  115. package/dist/init-32YOKXRL.js.map +1 -0
  116. package/dist/{issues-PJSOLOBJ.js → issues-4UUAQ5K6.js} +61 -20
  117. package/dist/issues-4UUAQ5K6.js.map +1 -0
  118. package/dist/{lint-CJM7BAIM.js → lint-AAN2NZWG.js} +9 -9
  119. package/dist/mcp/harness-server.js +140 -0
  120. package/dist/mcp/harness-server.js.map +1 -0
  121. package/dist/mcp/issue-management-server.js +2599 -262
  122. package/dist/mcp/issue-management-server.js.map +1 -1
  123. package/dist/mcp/recap-server.js +144 -21
  124. package/dist/mcp/recap-server.js.map +1 -1
  125. package/dist/{neon-helpers-VVFFTLXE.js → neon-helpers-CQN2PB4S.js} +3 -3
  126. package/dist/neon-helpers-CQN2PB4S.js.map +1 -0
  127. package/dist/{open-544H7JF5.js → open-FXWW3VI4.js} +15 -15
  128. package/dist/open-FXWW3VI4.js.map +1 -0
  129. package/dist/{plan-Q7ELXDLC.js → plan-RQ5FPIGF.js} +358 -40
  130. package/dist/plan-RQ5FPIGF.js.map +1 -0
  131. package/dist/{projects-LH362JZQ.js → projects-2UOXFLNZ.js} +4 -4
  132. package/dist/prompts/CLAUDE.md +62 -0
  133. package/dist/prompts/init-prompt.txt +430 -34
  134. package/dist/prompts/issue-prompt.txt +473 -54
  135. package/dist/prompts/plan-prompt.txt +140 -19
  136. package/dist/prompts/pr-prompt.txt +44 -1
  137. package/dist/prompts/regular-prompt.txt +42 -1
  138. package/dist/prompts/session-summary-prompt.txt +14 -0
  139. package/dist/prompts/swarm-orchestrator-prompt.txt +464 -0
  140. package/dist/{rebase-YND35CIE.js → rebase-6NVLX5V7.js} +21 -12
  141. package/dist/rebase-6NVLX5V7.js.map +1 -0
  142. package/dist/{recap-3W7COH7D.js → recap-OMBOKJST.js} +47 -19
  143. package/dist/recap-OMBOKJST.js.map +1 -0
  144. package/dist/{run-QUXJKDQQ.js → run-BBXLRIZB.js} +15 -15
  145. package/dist/run-BBXLRIZB.js.map +1 -0
  146. package/dist/schema/package-iloom.schema.json +58 -0
  147. package/dist/schema/settings.schema.json +149 -15
  148. package/dist/{shell-QGECBLST.js → shell-RF7LTND5.js} +14 -7
  149. package/dist/shell-RF7LTND5.js.map +1 -0
  150. package/dist/{summary-G2T4452H.js → summary-WTQZ7XG2.js} +27 -25
  151. package/dist/summary-WTQZ7XG2.js.map +1 -0
  152. package/dist/{test-EA5NQFDC.js → test-SGO6I5Z7.js} +9 -9
  153. package/dist/{test-git-M7LSLEFL.js → test-git-XM4TM65W.js} +4 -4
  154. package/dist/test-jira-LDTOYFSD.js +96 -0
  155. package/dist/test-jira-LDTOYFSD.js.map +1 -0
  156. package/dist/{test-prefix-64NAAUON.js → test-prefix-GBO37XCN.js} +4 -4
  157. package/dist/{test-webserver-OK6Z5FJM.js → test-webserver-NZ3JTVLL.js} +6 -6
  158. package/dist/{vscode-AR5NNXXI.js → vscode-6XUGHJKL.js} +7 -7
  159. package/package.json +5 -1
  160. package/dist/ClaudeContextManager-HR5JQKAI.js +0 -14
  161. package/dist/ClaudeService-TK7FMC2X.js +0 -13
  162. package/dist/chunk-3I4ONZRT.js.map +0 -1
  163. package/dist/chunk-B7U6OKUR.js.map +0 -1
  164. package/dist/chunk-CWRI4JC3.js.map +0 -1
  165. package/dist/chunk-DGG2VY7B.js.map +0 -1
  166. package/dist/chunk-FJDRTVJX.js +0 -520
  167. package/dist/chunk-FJDRTVJX.js.map +0 -1
  168. package/dist/chunk-FO5GGFOV.js.map +0 -1
  169. package/dist/chunk-KBEIQP4G.js.map +0 -1
  170. package/dist/chunk-KJTVU3HZ.js.map +0 -1
  171. package/dist/chunk-KXGQYLFZ.js.map +0 -1
  172. package/dist/chunk-OFDN5NKS.js.map +0 -1
  173. package/dist/chunk-QN47QVBX.js.map +0 -1
  174. package/dist/chunk-R4YWBGY6.js.map +0 -1
  175. package/dist/chunk-RI2YL6TK.js.map +0 -1
  176. package/dist/chunk-SOSQILHO.js.map +0 -1
  177. package/dist/chunk-ULSWCPQG.js.map +0 -1
  178. package/dist/chunk-VOGGLPG5.js.map +0 -1
  179. package/dist/chunk-VPTAX5TR.js.map +0 -1
  180. package/dist/chunk-W6DP5RVR.js +0 -101
  181. package/dist/chunk-W6DP5RVR.js.map +0 -1
  182. package/dist/chunk-WHI5KEOX.js +0 -121
  183. package/dist/chunk-WHI5KEOX.js.map +0 -1
  184. package/dist/chunk-YKFCCV6S.js.map +0 -1
  185. package/dist/chunk-Z2TWEXR7.js.map +0 -1
  186. package/dist/cleanup-PJRIFFU4.js.map +0 -1
  187. package/dist/commit-IVP3M4HG.js.map +0 -1
  188. package/dist/contribute-VDZXHK5Y.js.map +0 -1
  189. package/dist/dev-server-7F622OEO.js.map +0 -1
  190. package/dist/ignite-IW35CDBD.js +0 -784
  191. package/dist/ignite-IW35CDBD.js.map +0 -1
  192. package/dist/init-676DHF6R.js.map +0 -1
  193. package/dist/issues-PJSOLOBJ.js.map +0 -1
  194. package/dist/open-544H7JF5.js.map +0 -1
  195. package/dist/plan-Q7ELXDLC.js.map +0 -1
  196. package/dist/rebase-YND35CIE.js.map +0 -1
  197. package/dist/recap-3W7COH7D.js.map +0 -1
  198. package/dist/run-QUXJKDQQ.js.map +0 -1
  199. package/dist/shell-QGECBLST.js.map +0 -1
  200. package/dist/summary-G2T4452H.js.map +0 -1
  201. /package/dist/{BranchNamingService-K6XNWQ6C.js.map → BranchNamingService-25KSZAEM.js.map} +0 -0
  202. /package/dist/{ClaudeContextManager-HR5JQKAI.js.map → ClaudeContextManager-66GR4BGM.js.map} +0 -0
  203. /package/dist/{ClaudeService-TK7FMC2X.js.map → ClaudeService-7KM5NA5Z.js.map} +0 -0
  204. /package/dist/{GitHubService-TGWJN4V4.js.map → GitHubService-MEHKHUQP.js.map} +0 -0
  205. /package/dist/{MetadataManager-W3C54UYT.js.map → IssueTrackerFactory-NG53YX5S.js.map} +0 -0
  206. /package/dist/{LoomLauncher-73NXL2CL.js.map → LoomLauncher-TDLZSYG2.js.map} +0 -0
  207. /package/dist/{ProjectCapabilityDetector-N5L7T4IY.js.map → MetadataManager-5QZSTKNN.js.map} +0 -0
  208. /package/dist/{PromptTemplateManager-36YLQRHP.js.map → ProjectCapabilityDetector-5KSYUTBJ.js.map} +0 -0
  209. /package/dist/{SettingsManager-AW3JTJHD.js.map → PromptTemplateManager-YOE2SIPG.js.map} +0 -0
  210. /package/dist/{claude-TP2QO3BU.js.map → SettingsManager-FNKCOZMQ.js.map} +0 -0
  211. /package/dist/{build-THZI572G.js.map → build-VHGEMXBA.js.map} +0 -0
  212. /package/dist/{chunk-AR5QKYNE.js.map → chunk-4FGEGQW4.js.map} +0 -0
  213. /package/dist/{chunk-A7NJF73J.js.map → chunk-CVCTIDDK.js.map} +0 -0
  214. /package/dist/{chunk-IZIYLYPK.js.map → chunk-G5V75JD5.js.map} +0 -0
  215. /package/dist/{chunk-TC7APDKU.js.map → chunk-I5T677EA.js.map} +0 -0
  216. /package/dist/{chunk-NWMORW3U.js.map → chunk-KIK2ZFAL.js.map} +0 -0
  217. /package/dist/{chunk-NUACL52E.js.map → chunk-LLHXQS3C.js.map} +0 -0
  218. /package/dist/{chunk-TL72BGP6.js.map → chunk-MORRVYPT.js.map} +0 -0
  219. /package/dist/{chunk-7ZEHSSUP.js.map → chunk-P4O6EH46.js.map} +0 -0
  220. /package/dist/{chunk-KAYXR544.js.map → chunk-QVLPWNE3.js.map} +0 -0
  221. /package/dist/{chunk-4LKGCFGG.js.map → chunk-WWKOVDWC.js.map} +0 -0
  222. /package/dist/{git-2QDQ2X2S.js.map → claude-7GGEWVEM.js.map} +0 -0
  223. /package/dist/{compile-R2J65HBQ.js.map → compile-7ALJHZ4N.js.map} +0 -0
  224. /package/dist/{neon-helpers-VVFFTLXE.js.map → git-GTLKAZRJ.js.map} +0 -0
  225. /package/dist/{lint-CJM7BAIM.js.map → lint-AAN2NZWG.js.map} +0 -0
  226. /package/dist/{projects-LH362JZQ.js.map → projects-2UOXFLNZ.js.map} +0 -0
  227. /package/dist/{test-EA5NQFDC.js.map → test-SGO6I5Z7.js.map} +0 -0
  228. /package/dist/{test-git-M7LSLEFL.js.map → test-git-XM4TM65W.js.map} +0 -0
  229. /package/dist/{test-prefix-64NAAUON.js.map → test-prefix-GBO37XCN.js.map} +0 -0
  230. /package/dist/{test-webserver-OK6Z5FJM.js.map → test-webserver-NZ3JTVLL.js.map} +0 -0
  231. /package/dist/{vscode-AR5NNXXI.js.map → vscode-6XUGHJKL.js.map} +0 -0
package/dist/index.d.ts CHANGED
@@ -267,26 +267,69 @@ declare const IloomSettingsSchema: z.ZodObject<{
267
267
  }>>;
268
268
  agents: z.ZodNullable<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
269
269
  model: z.ZodOptional<z.ZodEnum<["sonnet", "opus", "haiku"]>>;
270
+ swarmModel: z.ZodOptional<z.ZodEnum<["sonnet", "opus", "haiku"]>>;
270
271
  enabled: z.ZodOptional<z.ZodBoolean>;
271
272
  providers: z.ZodOptional<z.ZodRecord<z.ZodEnum<["claude", "gemini", "codex"]>, z.ZodString>>;
272
273
  review: z.ZodOptional<z.ZodBoolean>;
274
+ } & {
275
+ agents: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
276
+ model: z.ZodOptional<z.ZodEnum<["sonnet", "opus", "haiku"]>>;
277
+ swarmModel: z.ZodOptional<z.ZodEnum<["sonnet", "opus", "haiku"]>>;
278
+ enabled: z.ZodOptional<z.ZodBoolean>;
279
+ providers: z.ZodOptional<z.ZodRecord<z.ZodEnum<["claude", "gemini", "codex"]>, z.ZodString>>;
280
+ review: z.ZodOptional<z.ZodBoolean>;
281
+ }, "strip", z.ZodTypeAny, {
282
+ model?: "opus" | "sonnet" | "haiku" | undefined;
283
+ swarmModel?: "opus" | "sonnet" | "haiku" | undefined;
284
+ enabled?: boolean | undefined;
285
+ providers?: Partial<Record<"claude" | "gemini" | "codex", string>> | undefined;
286
+ review?: boolean | undefined;
287
+ }, {
288
+ model?: "opus" | "sonnet" | "haiku" | undefined;
289
+ swarmModel?: "opus" | "sonnet" | "haiku" | undefined;
290
+ enabled?: boolean | undefined;
291
+ providers?: Partial<Record<"claude" | "gemini" | "codex", string>> | undefined;
292
+ review?: boolean | undefined;
293
+ }>>>;
294
+ subAgentTimeout: z.ZodDefault<z.ZodNumber>;
273
295
  }, "strip", z.ZodTypeAny, {
296
+ subAgentTimeout: number;
274
297
  model?: "opus" | "sonnet" | "haiku" | undefined;
298
+ swarmModel?: "opus" | "sonnet" | "haiku" | undefined;
275
299
  enabled?: boolean | undefined;
276
300
  providers?: Partial<Record<"claude" | "gemini" | "codex", string>> | undefined;
277
301
  review?: boolean | undefined;
302
+ agents?: Record<string, {
303
+ model?: "opus" | "sonnet" | "haiku" | undefined;
304
+ swarmModel?: "opus" | "sonnet" | "haiku" | undefined;
305
+ enabled?: boolean | undefined;
306
+ providers?: Partial<Record<"claude" | "gemini" | "codex", string>> | undefined;
307
+ review?: boolean | undefined;
308
+ }> | undefined;
278
309
  }, {
279
310
  model?: "opus" | "sonnet" | "haiku" | undefined;
311
+ swarmModel?: "opus" | "sonnet" | "haiku" | undefined;
280
312
  enabled?: boolean | undefined;
281
313
  providers?: Partial<Record<"claude" | "gemini" | "codex", string>> | undefined;
282
314
  review?: boolean | undefined;
315
+ agents?: Record<string, {
316
+ model?: "opus" | "sonnet" | "haiku" | undefined;
317
+ swarmModel?: "opus" | "sonnet" | "haiku" | undefined;
318
+ enabled?: boolean | undefined;
319
+ providers?: Partial<Record<"claude" | "gemini" | "codex", string>> | undefined;
320
+ review?: boolean | undefined;
321
+ }> | undefined;
322
+ subAgentTimeout?: number | undefined;
283
323
  }>>>>;
284
324
  spin: z.ZodOptional<z.ZodObject<{
285
325
  model: z.ZodDefault<z.ZodEnum<["sonnet", "opus", "haiku"]>>;
326
+ swarmModel: z.ZodOptional<z.ZodEnum<["sonnet", "opus", "haiku"]>>;
286
327
  }, "strip", z.ZodTypeAny, {
287
328
  model: "opus" | "sonnet" | "haiku";
329
+ swarmModel?: "opus" | "sonnet" | "haiku" | undefined;
288
330
  }, {
289
331
  model?: "opus" | "sonnet" | "haiku" | undefined;
332
+ swarmModel?: "opus" | "sonnet" | "haiku" | undefined;
290
333
  }>>;
291
334
  plan: z.ZodOptional<z.ZodObject<{
292
335
  model: z.ZodDefault<z.ZodEnum<["sonnet", "opus", "haiku"]>>;
@@ -309,7 +352,6 @@ declare const IloomSettingsSchema: z.ZodObject<{
309
352
  model?: "opus" | "sonnet" | "haiku" | undefined;
310
353
  }>>;
311
354
  capabilities: z.ZodOptional<z.ZodObject<{
312
- capabilities: z.ZodOptional<z.ZodArray<z.ZodEnum<["cli", "web"]>, "many">>;
313
355
  web: z.ZodOptional<z.ZodObject<{
314
356
  basePort: z.ZodOptional<z.ZodNumber>;
315
357
  }, "strip", z.ZodTypeAny, {
@@ -331,7 +373,6 @@ declare const IloomSettingsSchema: z.ZodObject<{
331
373
  database?: {
332
374
  databaseUrlEnvVarName: string;
333
375
  } | undefined;
334
- capabilities?: ("cli" | "web")[] | undefined;
335
376
  }, {
336
377
  web?: {
337
378
  basePort?: number | undefined;
@@ -339,7 +380,6 @@ declare const IloomSettingsSchema: z.ZodObject<{
339
380
  database?: {
340
381
  databaseUrlEnvVarName?: string | undefined;
341
382
  } | undefined;
342
- capabilities?: ("cli" | "web")[] | undefined;
343
383
  }>>;
344
384
  databaseProviders: z.ZodOptional<z.ZodObject<{
345
385
  neon: z.ZodOptional<z.ZodObject<{
@@ -364,7 +404,7 @@ declare const IloomSettingsSchema: z.ZodObject<{
364
404
  } | undefined;
365
405
  }>>;
366
406
  issueManagement: z.ZodOptional<z.ZodObject<{
367
- provider: z.ZodDefault<z.ZodOptional<z.ZodEnum<["github", "linear"]>>>;
407
+ provider: z.ZodDefault<z.ZodOptional<z.ZodEnum<["github", "linear", "jira"]>>>;
368
408
  github: z.ZodOptional<z.ZodObject<{
369
409
  remote: z.ZodString;
370
410
  }, "strip", z.ZodTypeAny, {
@@ -385,8 +425,39 @@ declare const IloomSettingsSchema: z.ZodObject<{
385
425
  branchFormat?: string | undefined;
386
426
  apiToken?: string | undefined;
387
427
  }>>;
428
+ jira: z.ZodOptional<z.ZodObject<{
429
+ host: z.ZodString;
430
+ username: z.ZodString;
431
+ apiToken: z.ZodOptional<z.ZodString>;
432
+ projectKey: z.ZodString;
433
+ boardId: z.ZodOptional<z.ZodString>;
434
+ transitionMappings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
435
+ defaultIssueType: z.ZodDefault<z.ZodOptional<z.ZodString>>;
436
+ defaultSubtaskType: z.ZodDefault<z.ZodOptional<z.ZodString>>;
437
+ doneStatuses: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
438
+ }, "strip", z.ZodTypeAny, {
439
+ host: string;
440
+ username: string;
441
+ projectKey: string;
442
+ defaultIssueType: string;
443
+ defaultSubtaskType: string;
444
+ doneStatuses: string[];
445
+ apiToken?: string | undefined;
446
+ boardId?: string | undefined;
447
+ transitionMappings?: Record<string, string> | undefined;
448
+ }, {
449
+ host: string;
450
+ username: string;
451
+ projectKey: string;
452
+ apiToken?: string | undefined;
453
+ boardId?: string | undefined;
454
+ transitionMappings?: Record<string, string> | undefined;
455
+ defaultIssueType?: string | undefined;
456
+ defaultSubtaskType?: string | undefined;
457
+ doneStatuses?: string[] | undefined;
458
+ }>>;
388
459
  }, "strip", z.ZodTypeAny, {
389
- provider: "github" | "linear";
460
+ provider: "github" | "linear" | "jira";
390
461
  github?: {
391
462
  remote: string;
392
463
  } | undefined;
@@ -395,6 +466,17 @@ declare const IloomSettingsSchema: z.ZodObject<{
395
466
  branchFormat?: string | undefined;
396
467
  apiToken?: string | undefined;
397
468
  } | undefined;
469
+ jira?: {
470
+ host: string;
471
+ username: string;
472
+ projectKey: string;
473
+ defaultIssueType: string;
474
+ defaultSubtaskType: string;
475
+ doneStatuses: string[];
476
+ apiToken?: string | undefined;
477
+ boardId?: string | undefined;
478
+ transitionMappings?: Record<string, string> | undefined;
479
+ } | undefined;
398
480
  }, {
399
481
  github?: {
400
482
  remote: string;
@@ -404,20 +486,34 @@ declare const IloomSettingsSchema: z.ZodObject<{
404
486
  branchFormat?: string | undefined;
405
487
  apiToken?: string | undefined;
406
488
  } | undefined;
407
- provider?: "github" | "linear" | undefined;
489
+ jira?: {
490
+ host: string;
491
+ username: string;
492
+ projectKey: string;
493
+ apiToken?: string | undefined;
494
+ boardId?: string | undefined;
495
+ transitionMappings?: Record<string, string> | undefined;
496
+ defaultIssueType?: string | undefined;
497
+ defaultSubtaskType?: string | undefined;
498
+ doneStatuses?: string[] | undefined;
499
+ } | undefined;
500
+ provider?: "github" | "linear" | "jira" | undefined;
408
501
  }>>;
409
502
  mergeBehavior: z.ZodOptional<z.ZodObject<{
410
503
  mode: z.ZodDefault<z.ZodEnum<["local", "github-pr", "github-draft-pr"]>>;
411
504
  remote: z.ZodOptional<z.ZodString>;
412
505
  autoCommitPush: z.ZodOptional<z.ZodBoolean>;
506
+ openBrowserOnFinish: z.ZodDefault<z.ZodBoolean>;
413
507
  }, "strip", z.ZodTypeAny, {
414
508
  mode: "local" | "github-pr" | "github-draft-pr";
509
+ openBrowserOnFinish: boolean;
415
510
  remote?: string | undefined;
416
511
  autoCommitPush?: boolean | undefined;
417
512
  }, {
418
513
  remote?: string | undefined;
419
514
  mode?: "local" | "github-pr" | "github-draft-pr" | undefined;
420
515
  autoCommitPush?: boolean | undefined;
516
+ openBrowserOnFinish?: boolean | undefined;
421
517
  }>>;
422
518
  ide: z.ZodOptional<z.ZodObject<{
423
519
  type: z.ZodDefault<z.ZodEnum<["vscode", "cursor", "webstorm", "sublime", "intellij", "windsurf", "antigravity"]>>;
@@ -455,15 +551,25 @@ declare const IloomSettingsSchema: z.ZodObject<{
455
551
  planner: "claude" | "gemini" | "codex";
456
552
  reviewer: "claude" | "gemini" | "codex" | "none";
457
553
  } | undefined;
458
- capabilities?: {
459
- web?: {
460
- basePort?: number | undefined;
461
- } | undefined;
462
- database?: {
463
- databaseUrlEnvVarName: string;
464
- } | undefined;
465
- capabilities?: ("cli" | "web")[] | undefined;
554
+ spin?: {
555
+ model: "opus" | "sonnet" | "haiku";
556
+ swarmModel?: "opus" | "sonnet" | "haiku" | undefined;
466
557
  } | undefined;
558
+ agents?: Record<string, {
559
+ subAgentTimeout: number;
560
+ model?: "opus" | "sonnet" | "haiku" | undefined;
561
+ swarmModel?: "opus" | "sonnet" | "haiku" | undefined;
562
+ enabled?: boolean | undefined;
563
+ providers?: Partial<Record<"claude" | "gemini" | "codex", string>> | undefined;
564
+ review?: boolean | undefined;
565
+ agents?: Record<string, {
566
+ model?: "opus" | "sonnet" | "haiku" | undefined;
567
+ swarmModel?: "opus" | "sonnet" | "haiku" | undefined;
568
+ enabled?: boolean | undefined;
569
+ providers?: Partial<Record<"claude" | "gemini" | "codex", string>> | undefined;
570
+ review?: boolean | undefined;
571
+ }> | undefined;
572
+ }> | null | undefined;
467
573
  mainBranch?: string | undefined;
468
574
  worktreePrefix?: string | undefined;
469
575
  protectedBranches?: string[] | undefined;
@@ -497,18 +603,17 @@ declare const IloomSettingsSchema: z.ZodObject<{
497
603
  noVerify?: boolean | undefined;
498
604
  } | undefined;
499
605
  } | undefined;
500
- agents?: Record<string, {
501
- model?: "opus" | "sonnet" | "haiku" | undefined;
502
- enabled?: boolean | undefined;
503
- providers?: Partial<Record<"claude" | "gemini" | "codex", string>> | undefined;
504
- review?: boolean | undefined;
505
- }> | null | undefined;
506
- spin?: {
507
- model: "opus" | "sonnet" | "haiku";
508
- } | undefined;
509
606
  summary?: {
510
607
  model: "opus" | "sonnet" | "haiku";
511
608
  } | undefined;
609
+ capabilities?: {
610
+ web?: {
611
+ basePort?: number | undefined;
612
+ } | undefined;
613
+ database?: {
614
+ databaseUrlEnvVarName: string;
615
+ } | undefined;
616
+ } | undefined;
512
617
  databaseProviders?: {
513
618
  neon?: {
514
619
  projectId: string;
@@ -516,7 +621,7 @@ declare const IloomSettingsSchema: z.ZodObject<{
516
621
  } | undefined;
517
622
  } | undefined;
518
623
  issueManagement?: {
519
- provider: "github" | "linear";
624
+ provider: "github" | "linear" | "jira";
520
625
  github?: {
521
626
  remote: string;
522
627
  } | undefined;
@@ -525,9 +630,21 @@ declare const IloomSettingsSchema: z.ZodObject<{
525
630
  branchFormat?: string | undefined;
526
631
  apiToken?: string | undefined;
527
632
  } | undefined;
633
+ jira?: {
634
+ host: string;
635
+ username: string;
636
+ projectKey: string;
637
+ defaultIssueType: string;
638
+ defaultSubtaskType: string;
639
+ doneStatuses: string[];
640
+ apiToken?: string | undefined;
641
+ boardId?: string | undefined;
642
+ transitionMappings?: Record<string, string> | undefined;
643
+ } | undefined;
528
644
  } | undefined;
529
645
  mergeBehavior?: {
530
646
  mode: "local" | "github-pr" | "github-draft-pr";
647
+ openBrowserOnFinish: boolean;
531
648
  remote?: string | undefined;
532
649
  autoCommitPush?: boolean | undefined;
533
650
  } | undefined;
@@ -544,15 +661,25 @@ declare const IloomSettingsSchema: z.ZodObject<{
544
661
  planner?: "claude" | "gemini" | "codex" | undefined;
545
662
  reviewer?: "claude" | "gemini" | "codex" | "none" | undefined;
546
663
  } | undefined;
547
- capabilities?: {
548
- web?: {
549
- basePort?: number | undefined;
550
- } | undefined;
551
- database?: {
552
- databaseUrlEnvVarName?: string | undefined;
553
- } | undefined;
554
- capabilities?: ("cli" | "web")[] | undefined;
664
+ spin?: {
665
+ model?: "opus" | "sonnet" | "haiku" | undefined;
666
+ swarmModel?: "opus" | "sonnet" | "haiku" | undefined;
555
667
  } | undefined;
668
+ agents?: Record<string, {
669
+ model?: "opus" | "sonnet" | "haiku" | undefined;
670
+ swarmModel?: "opus" | "sonnet" | "haiku" | undefined;
671
+ enabled?: boolean | undefined;
672
+ providers?: Partial<Record<"claude" | "gemini" | "codex", string>> | undefined;
673
+ review?: boolean | undefined;
674
+ agents?: Record<string, {
675
+ model?: "opus" | "sonnet" | "haiku" | undefined;
676
+ swarmModel?: "opus" | "sonnet" | "haiku" | undefined;
677
+ enabled?: boolean | undefined;
678
+ providers?: Partial<Record<"claude" | "gemini" | "codex", string>> | undefined;
679
+ review?: boolean | undefined;
680
+ }> | undefined;
681
+ subAgentTimeout?: number | undefined;
682
+ }> | null | undefined;
556
683
  mainBranch?: string | undefined;
557
684
  sourceEnvOnStart?: boolean | undefined;
558
685
  worktreePrefix?: string | undefined;
@@ -587,18 +714,17 @@ declare const IloomSettingsSchema: z.ZodObject<{
587
714
  generateSummary?: boolean | undefined;
588
715
  } | undefined;
589
716
  } | undefined;
590
- agents?: Record<string, {
591
- model?: "opus" | "sonnet" | "haiku" | undefined;
592
- enabled?: boolean | undefined;
593
- providers?: Partial<Record<"claude" | "gemini" | "codex", string>> | undefined;
594
- review?: boolean | undefined;
595
- }> | null | undefined;
596
- spin?: {
597
- model?: "opus" | "sonnet" | "haiku" | undefined;
598
- } | undefined;
599
717
  summary?: {
600
718
  model?: "opus" | "sonnet" | "haiku" | undefined;
601
719
  } | undefined;
720
+ capabilities?: {
721
+ web?: {
722
+ basePort?: number | undefined;
723
+ } | undefined;
724
+ database?: {
725
+ databaseUrlEnvVarName?: string | undefined;
726
+ } | undefined;
727
+ } | undefined;
602
728
  databaseProviders?: {
603
729
  neon?: {
604
730
  projectId: string;
@@ -614,12 +740,24 @@ declare const IloomSettingsSchema: z.ZodObject<{
614
740
  branchFormat?: string | undefined;
615
741
  apiToken?: string | undefined;
616
742
  } | undefined;
617
- provider?: "github" | "linear" | undefined;
743
+ jira?: {
744
+ host: string;
745
+ username: string;
746
+ projectKey: string;
747
+ apiToken?: string | undefined;
748
+ boardId?: string | undefined;
749
+ transitionMappings?: Record<string, string> | undefined;
750
+ defaultIssueType?: string | undefined;
751
+ defaultSubtaskType?: string | undefined;
752
+ doneStatuses?: string[] | undefined;
753
+ } | undefined;
754
+ provider?: "github" | "linear" | "jira" | undefined;
618
755
  } | undefined;
619
756
  mergeBehavior?: {
620
757
  remote?: string | undefined;
621
758
  mode?: "local" | "github-pr" | "github-draft-pr" | undefined;
622
759
  autoCommitPush?: boolean | undefined;
760
+ openBrowserOnFinish?: boolean | undefined;
623
761
  } | undefined;
624
762
  ide?: {
625
763
  type?: "vscode" | "cursor" | "webstorm" | "sublime" | "intellij" | "windsurf" | "antigravity" | undefined;
@@ -713,7 +851,7 @@ declare class SettingsManager {
713
851
  * @param settings - Pre-loaded settings object
714
852
  * @returns Model shorthand ('opus', 'sonnet', or 'haiku')
715
853
  */
716
- getSpinModel(settings?: IloomSettings): 'sonnet' | 'opus' | 'haiku';
854
+ getSpinModel(settings?: IloomSettings, mode?: 'swarm'): 'sonnet' | 'opus' | 'haiku';
717
855
  /**
718
856
  * Get the plan command model with default applied
719
857
  * Default is defined in PlanCommandSettingsSchema
@@ -914,6 +1052,13 @@ interface ResourceCleanupOptions {
914
1052
  checkMergeSafety?: boolean;
915
1053
  /** Check if branch exists on remote before allowing cleanup (useful for GitHub-PR mode) */
916
1054
  checkRemoteBranch?: boolean;
1055
+ /** Pre-resolved worktree to clean up (skips the search step) */
1056
+ worktree?: {
1057
+ path: string;
1058
+ branch: string;
1059
+ };
1060
+ /** Archive metadata instead of deleting (preserves loom in il list --finished) */
1061
+ archive?: boolean;
917
1062
  }
918
1063
  /**
919
1064
  * Result of a cleanup operation
@@ -1054,7 +1199,7 @@ interface Loom {
1054
1199
  id: string;
1055
1200
  path: string;
1056
1201
  branch: string;
1057
- type: 'issue' | 'pr' | 'branch';
1202
+ type: 'issue' | 'pr' | 'branch' | 'epic';
1058
1203
  identifier: string | number;
1059
1204
  port: number;
1060
1205
  databaseBranch?: string;
@@ -1072,12 +1217,12 @@ interface Loom {
1072
1217
  cliSymlinks?: string[];
1073
1218
  }
1074
1219
  interface CreateLoomInput {
1075
- type: 'issue' | 'pr' | 'branch';
1220
+ type: 'issue' | 'pr' | 'branch' | 'epic';
1076
1221
  identifier: string | number;
1077
1222
  originalInput: string;
1078
1223
  baseBranch?: string;
1079
1224
  parentLoom?: {
1080
- type: 'issue' | 'pr' | 'branch';
1225
+ type: 'issue' | 'pr' | 'branch' | 'epic';
1081
1226
  identifier: string | number;
1082
1227
  branchName: string;
1083
1228
  worktreePath: string;
@@ -1095,12 +1240,20 @@ interface CreateLoomInput {
1095
1240
  setArguments?: string[];
1096
1241
  executablePath?: string;
1097
1242
  sourceEnvOnStart?: boolean;
1243
+ childIssueNumbers?: string[];
1244
+ childIssues?: Array<{
1245
+ number: string;
1246
+ title: string;
1247
+ body: string;
1248
+ url: string;
1249
+ }>;
1250
+ dependencyMap?: Record<string, string[]>;
1098
1251
  };
1099
1252
  }
1100
1253
  type LaunchMode = 'editor' | 'terminal' | 'both';
1101
1254
  interface LoomSummary {
1102
1255
  id: string;
1103
- type: 'issue' | 'pr' | 'branch';
1256
+ type: 'issue' | 'pr' | 'branch' | 'epic';
1104
1257
  identifier: string | number;
1105
1258
  title?: string;
1106
1259
  branch: string;
@@ -1125,6 +1278,112 @@ interface ProcessInfo {
1125
1278
  isDevServer: boolean;
1126
1279
  }
1127
1280
 
1281
+ interface TelemetryConfig {
1282
+ enabled: boolean;
1283
+ disclosed_at?: string;
1284
+ last_version?: string;
1285
+ }
1286
+ interface CliInstalledProperties {
1287
+ version: string;
1288
+ os: string;
1289
+ node_version: string;
1290
+ }
1291
+ interface CliUpgradedProperties {
1292
+ version: string;
1293
+ previous_version: string;
1294
+ os: string;
1295
+ }
1296
+ interface LoomCreatedProperties {
1297
+ source_type: 'issue' | 'pr' | 'branch' | 'freeform';
1298
+ tracker: string;
1299
+ is_child_loom: boolean;
1300
+ one_shot_mode: 'default' | 'skip-reviews' | 'yolo';
1301
+ }
1302
+ interface LoomFinishedProperties {
1303
+ merge_behavior: 'local' | 'github-pr' | 'github-draft-pr';
1304
+ duration_minutes: number;
1305
+ }
1306
+ interface LoomAbandonedProperties {
1307
+ duration_minutes: number;
1308
+ phase_reached: string;
1309
+ }
1310
+ interface EpicPlannedProperties {
1311
+ child_count: number;
1312
+ tracker: string;
1313
+ }
1314
+ interface SwarmStartedProperties {
1315
+ child_count: number;
1316
+ tracker: string;
1317
+ }
1318
+ interface SwarmChildCompletedProperties {
1319
+ success: boolean;
1320
+ duration_minutes: number;
1321
+ }
1322
+ interface SwarmCompletedProperties {
1323
+ total_children: number;
1324
+ succeeded: number;
1325
+ failed: number;
1326
+ duration_minutes: number;
1327
+ }
1328
+ interface DemoStartedProperties {
1329
+ path: string;
1330
+ }
1331
+ interface DemoCompletedProperties {
1332
+ path: string;
1333
+ converted_to_real_project: boolean;
1334
+ }
1335
+ interface ContributeStartedProperties {
1336
+ tracker: string;
1337
+ }
1338
+ interface SessionStartedProperties {
1339
+ has_neon: boolean;
1340
+ language: string;
1341
+ }
1342
+ interface ErrorOccurredProperties {
1343
+ error_type: string;
1344
+ command: string;
1345
+ phase: string;
1346
+ }
1347
+ interface InitStartedProperties {
1348
+ mode: 'accept-defaults' | 'guided' | 'guided-custom-prompt';
1349
+ }
1350
+ interface InitCompletedProperties {
1351
+ mode: 'accept-defaults' | 'guided' | 'guided-custom-prompt';
1352
+ }
1353
+ interface AutoSwarmStartedProperties {
1354
+ source: 'decomposition' | 'fresh';
1355
+ planner: string;
1356
+ }
1357
+ interface AutoSwarmCompletedProperties {
1358
+ source: 'decomposition' | 'fresh';
1359
+ success: boolean;
1360
+ child_count: number;
1361
+ duration_minutes: number;
1362
+ phase_reached: 'plan' | 'start' | 'spin';
1363
+ fallback_to_normal: boolean;
1364
+ }
1365
+ interface TelemetryEventMap {
1366
+ 'cli.installed': CliInstalledProperties;
1367
+ 'cli.upgraded': CliUpgradedProperties;
1368
+ 'loom.created': LoomCreatedProperties;
1369
+ 'loom.finished': LoomFinishedProperties;
1370
+ 'loom.abandoned': LoomAbandonedProperties;
1371
+ 'epic.planned': EpicPlannedProperties;
1372
+ 'swarm.started': SwarmStartedProperties;
1373
+ 'swarm.child_completed': SwarmChildCompletedProperties;
1374
+ 'swarm.completed': SwarmCompletedProperties;
1375
+ 'demo.started': DemoStartedProperties;
1376
+ 'demo.completed': DemoCompletedProperties;
1377
+ 'contribute.started': ContributeStartedProperties;
1378
+ 'session.started': SessionStartedProperties;
1379
+ 'error.occurred': ErrorOccurredProperties;
1380
+ 'init.started': InitStartedProperties;
1381
+ 'init.completed': InitCompletedProperties;
1382
+ 'auto_swarm.started': AutoSwarmStartedProperties;
1383
+ 'auto_swarm.completed': AutoSwarmCompletedProperties;
1384
+ }
1385
+ type TelemetryEventName = keyof TelemetryEventMap;
1386
+
1128
1387
  interface Workspace {
1129
1388
  id: string;
1130
1389
  path: string;
@@ -1243,6 +1502,7 @@ interface StartOptions {
1243
1502
  devServer?: boolean;
1244
1503
  terminal?: boolean;
1245
1504
  childLoom?: boolean;
1505
+ epic?: boolean;
1246
1506
  oneShot?: OneShotMode;
1247
1507
  body?: string;
1248
1508
  json?: boolean;
@@ -1266,6 +1526,9 @@ interface FinishOptions {
1266
1526
  noBrowser?: boolean;
1267
1527
  cleanup?: boolean;
1268
1528
  json?: boolean;
1529
+ skipToPr?: boolean;
1530
+ jsonStream?: boolean;
1531
+ review?: boolean;
1269
1532
  }
1270
1533
  /**
1271
1534
  * Options for the cleanup command
@@ -1286,6 +1549,8 @@ interface CleanupOptions {
1286
1549
  json?: boolean;
1287
1550
  /** Wait specified milliseconds before cleanup execution */
1288
1551
  defer?: number;
1552
+ /** Archive metadata instead of deleting (preserves loom in il list --finished) */
1553
+ archive?: boolean;
1289
1554
  }
1290
1555
  interface ListOptions {
1291
1556
  json?: boolean;
@@ -1308,14 +1573,15 @@ interface StartResult {
1308
1573
  path: string;
1309
1574
  branch: string;
1310
1575
  port?: number;
1311
- type: 'issue' | 'pr' | 'branch';
1576
+ type: 'issue' | 'pr' | 'branch' | 'epic';
1312
1577
  identifier: string | number;
1313
1578
  title?: string;
1314
1579
  capabilities?: string[];
1580
+ childIssueNumbers?: string[];
1315
1581
  }
1316
1582
  interface FinishResult {
1317
1583
  success: boolean;
1318
- type: 'issue' | 'pr' | 'branch';
1584
+ type: 'issue' | 'pr' | 'branch' | 'epic';
1319
1585
  identifier: string | number;
1320
1586
  /** Whether this was a dry-run operation */
1321
1587
  dryRun?: boolean;
@@ -1333,7 +1599,19 @@ interface SummaryResult {
1333
1599
  sessionId: string;
1334
1600
  issueNumber?: string | number;
1335
1601
  branchName: string;
1336
- loomType: 'issue' | 'pr' | 'branch';
1602
+ loomType: 'issue' | 'pr' | 'branch' | 'epic';
1603
+ }
1604
+ interface RebaseResult {
1605
+ success: boolean;
1606
+ conflictsDetected: boolean;
1607
+ claudeLaunched: boolean;
1608
+ conflictsResolved?: boolean;
1609
+ error?: string;
1610
+ }
1611
+ interface RebaseOutcome {
1612
+ conflictsDetected: boolean;
1613
+ claudeLaunched: boolean;
1614
+ conflictsResolved: boolean;
1337
1615
  }
1338
1616
  interface MockOptions {
1339
1617
  scenario: 'empty' | 'existing' | 'conflicts' | 'error';
@@ -1356,6 +1634,7 @@ interface ValidationOptions {
1356
1634
  skipTypecheck?: boolean;
1357
1635
  skipLint?: boolean;
1358
1636
  skipTests?: boolean;
1637
+ jsonStream?: boolean;
1359
1638
  }
1360
1639
  interface ValidationStepResult {
1361
1640
  step: 'typecheck' | 'compile' | 'lint' | 'test';
@@ -1392,6 +1671,7 @@ interface MergeOptions {
1392
1671
  dryRun?: boolean;
1393
1672
  force?: boolean;
1394
1673
  repoRoot?: string;
1674
+ jsonStream?: boolean;
1395
1675
  }
1396
1676
  interface MergeResult {
1397
1677
  success: boolean;
@@ -1433,10 +1713,18 @@ interface IssueTracker {
1433
1713
  url: string;
1434
1714
  }>;
1435
1715
  getIssueUrl(identifier: string | number, repo?: string): Promise<string>;
1716
+ getChildIssues(parentIdentifier: string, repo?: string): Promise<Array<{
1717
+ id: string;
1718
+ title: string;
1719
+ url: string;
1720
+ state: string;
1721
+ }>>;
1436
1722
  fetchPR?(identifier: string | number, repo?: string): Promise<PullRequest>;
1437
1723
  isValidPR?(identifier: string | number, repo?: string): Promise<PullRequest | false>;
1438
1724
  validatePRState?(pr: PullRequest): Promise<void>;
1439
1725
  moveIssueToInProgress?(identifier: string | number): Promise<void>;
1726
+ moveIssueToReadyForReview?(identifier: string | number): Promise<void>;
1727
+ normalizeIdentifier(identifier: string | number): string;
1440
1728
  extractContext(entity: Issue | PullRequest): string;
1441
1729
  }
1442
1730
 
@@ -1466,15 +1754,23 @@ declare class GitHubService implements IssueTracker {
1466
1754
  url: string;
1467
1755
  }>;
1468
1756
  getIssueUrl(issueNumber: number, repo?: string): Promise<string>;
1757
+ getChildIssues(parentIdentifier: string, repo?: string): Promise<Array<{
1758
+ id: string;
1759
+ title: string;
1760
+ url: string;
1761
+ state: string;
1762
+ }>>;
1469
1763
  moveIssueToInProgress(issueNumber: number): Promise<void>;
1764
+ moveIssueToReadyForReview(issueNumber: number): Promise<void>;
1470
1765
  private updateIssueStatusInProject;
1766
+ normalizeIdentifier(identifier: string | number): string;
1471
1767
  extractContext(entity: Issue | PullRequest): string;
1472
1768
  private mapGitHubIssueToIssue;
1473
1769
  private mapGitHubPRToPullRequest;
1474
1770
  private promptUserConfirmation;
1475
1771
  }
1476
1772
 
1477
- type IssueTrackerProviderType = 'github' | 'linear';
1773
+ type IssueTrackerProviderType = 'github' | 'linear' | 'jira';
1478
1774
  /**
1479
1775
  * Factory for creating IssueTracker instances based on settings
1480
1776
  * Provides a single point of provider instantiation
@@ -1649,6 +1945,7 @@ interface TemplateVariables {
1649
1945
  AUTO_COMMIT_PUSH?: boolean;
1650
1946
  STANDARD_ISSUE_MODE?: boolean;
1651
1947
  STANDARD_BRANCH_MODE?: boolean;
1948
+ DIRECT_PROMPT_MODE?: boolean;
1652
1949
  IS_VSCODE_MODE?: boolean;
1653
1950
  HAS_PACKAGE_JSON?: boolean;
1654
1951
  NO_PACKAGE_JSON?: boolean;
@@ -1689,6 +1986,17 @@ interface TemplateVariables {
1689
1986
  USE_CODEX_REVIEWER?: boolean;
1690
1987
  HAS_REVIEWER?: boolean;
1691
1988
  GIT_REMOTE?: string;
1989
+ EPIC_ISSUE_NUMBER?: string | number;
1990
+ EPIC_WORKTREE_PATH?: string;
1991
+ EPIC_METADATA_PATH?: string;
1992
+ CHILD_ISSUES?: string;
1993
+ DEPENDENCY_MAP?: string;
1994
+ SWARM_MODE?: boolean;
1995
+ AUTO_SWARM_MODE?: boolean;
1996
+ SWARM_AGENT_METADATA?: string;
1997
+ SWARM_SUB_AGENT_TIMEOUT_MS?: number;
1998
+ NO_CLEANUP?: boolean;
1999
+ ISSUE_PREFIX?: string;
1692
2000
  }
1693
2001
  declare class PromptTemplateManager {
1694
2002
  private templateDir;
@@ -1696,7 +2004,7 @@ declare class PromptTemplateManager {
1696
2004
  /**
1697
2005
  * Load a template file by name
1698
2006
  */
1699
- loadTemplate(templateName: 'issue' | 'pr' | 'regular' | 'init' | 'session-summary' | 'plan'): Promise<string>;
2007
+ loadTemplate(templateName: 'issue' | 'pr' | 'regular' | 'init' | 'session-summary' | 'plan' | 'swarm-orchestrator'): Promise<string>;
1700
2008
  /**
1701
2009
  * Substitute variables in a template string using Handlebars
1702
2010
  */
@@ -1704,7 +2012,7 @@ declare class PromptTemplateManager {
1704
2012
  /**
1705
2013
  * Get a fully processed prompt for a workflow type
1706
2014
  */
1707
- getPrompt(type: 'issue' | 'pr' | 'regular' | 'init' | 'session-summary' | 'plan', variables: TemplateVariables): Promise<string>;
2015
+ getPrompt(type: 'issue' | 'pr' | 'regular' | 'init' | 'session-summary' | 'plan' | 'swarm-orchestrator', variables: TemplateVariables): Promise<string>;
1708
2016
  }
1709
2017
 
1710
2018
  interface ClaudeWorkflowOptions {
@@ -1764,6 +2072,48 @@ declare class ClaudeContextManager {
1764
2072
  launchWithContext(context: ClaudeContext, headless?: boolean): Promise<string | void>;
1765
2073
  }
1766
2074
 
2075
+ type SwarmState = 'pending' | 'in_progress' | 'code_review' | 'done' | 'failed';
2076
+ /**
2077
+ * Schema for metadata JSON file
2078
+ * Stored in ~/.config/iloom-ai/looms/
2079
+ */
2080
+ interface MetadataFile {
2081
+ description: string;
2082
+ created_at?: string;
2083
+ version: number;
2084
+ branchName?: string;
2085
+ worktreePath?: string;
2086
+ issueType?: 'branch' | 'issue' | 'pr' | 'epic';
2087
+ issueKey?: string;
2088
+ issue_numbers?: string[];
2089
+ pr_numbers?: string[];
2090
+ issueTracker?: string;
2091
+ colorHex?: string;
2092
+ sessionId?: string;
2093
+ projectPath?: string;
2094
+ issueUrls?: Record<string, string>;
2095
+ prUrls?: Record<string, string>;
2096
+ draftPrNumber?: number;
2097
+ oneShot?: OneShotMode;
2098
+ capabilities?: ProjectCapability[];
2099
+ state?: SwarmState;
2100
+ childIssueNumbers?: string[];
2101
+ parentLoom?: {
2102
+ type: 'issue' | 'pr' | 'branch' | 'epic';
2103
+ identifier: string | number;
2104
+ branchName: string;
2105
+ worktreePath: string;
2106
+ databaseBranch?: string;
2107
+ };
2108
+ childIssues?: Array<{
2109
+ number: string;
2110
+ title: string;
2111
+ body: string;
2112
+ url: string;
2113
+ }>;
2114
+ dependencyMap?: Record<string, string[]>;
2115
+ mcpConfigPath?: string;
2116
+ }
1767
2117
  /**
1768
2118
  * Input for writing metadata (all fields except version and created_at)
1769
2119
  * Note: issueTracker is required because every loom should have an associated
@@ -1773,7 +2123,8 @@ interface WriteMetadataInput {
1773
2123
  description: string;
1774
2124
  branchName: string;
1775
2125
  worktreePath: string;
1776
- issueType: 'branch' | 'issue' | 'pr';
2126
+ issueType: 'branch' | 'issue' | 'pr' | 'epic';
2127
+ issueKey?: string;
1777
2128
  issue_numbers: string[];
1778
2129
  pr_numbers: string[];
1779
2130
  issueTracker: string;
@@ -1785,13 +2136,23 @@ interface WriteMetadataInput {
1785
2136
  draftPrNumber?: number;
1786
2137
  oneShot?: OneShotMode;
1787
2138
  capabilities: ProjectCapability[];
2139
+ state?: SwarmState;
2140
+ childIssueNumbers?: string[];
1788
2141
  parentLoom?: {
1789
- type: 'issue' | 'pr' | 'branch';
2142
+ type: 'issue' | 'pr' | 'branch' | 'epic';
1790
2143
  identifier: string | number;
1791
2144
  branchName: string;
1792
2145
  worktreePath: string;
1793
2146
  databaseBranch?: string;
1794
2147
  };
2148
+ childIssues?: Array<{
2149
+ number: string;
2150
+ title: string;
2151
+ body: string;
2152
+ url: string;
2153
+ }>;
2154
+ dependencyMap?: Record<string, string[]>;
2155
+ mcpConfigPath?: string;
1795
2156
  }
1796
2157
  /**
1797
2158
  * Result of reading metadata for a worktree
@@ -1803,7 +2164,8 @@ interface LoomMetadata {
1803
2164
  created_at: string | null;
1804
2165
  branchName: string | null;
1805
2166
  worktreePath: string | null;
1806
- issueType: 'branch' | 'issue' | 'pr' | null;
2167
+ issueType: 'branch' | 'issue' | 'pr' | 'epic' | null;
2168
+ issueKey: string | null;
1807
2169
  issue_numbers: string[];
1808
2170
  pr_numbers: string[];
1809
2171
  issueTracker: string | null;
@@ -1815,13 +2177,23 @@ interface LoomMetadata {
1815
2177
  draftPrNumber: number | null;
1816
2178
  oneShot: OneShotMode | null;
1817
2179
  capabilities: ProjectCapability[];
2180
+ state: SwarmState | null;
2181
+ childIssueNumbers: string[];
1818
2182
  parentLoom: {
1819
- type: 'issue' | 'pr' | 'branch';
2183
+ type: 'issue' | 'pr' | 'branch' | 'epic';
1820
2184
  identifier: string | number;
1821
2185
  branchName: string;
1822
2186
  worktreePath: string;
1823
2187
  databaseBranch?: string;
1824
2188
  } | null;
2189
+ childIssues: Array<{
2190
+ number: string;
2191
+ title: string;
2192
+ body: string;
2193
+ url: string;
2194
+ }>;
2195
+ dependencyMap: Record<string, string[]>;
2196
+ mcpConfigPath: string | null;
1825
2197
  }
1826
2198
  /**
1827
2199
  * MetadataManager: Manage loom metadata persistence
@@ -1889,6 +2261,16 @@ declare class MetadataManager {
1889
2261
  * @returns Array of LoomMetadata objects from all stored files
1890
2262
  */
1891
2263
  listAllMetadata(): Promise<LoomMetadata[]>;
2264
+ /**
2265
+ * Update existing metadata for a worktree by merging new fields
2266
+ *
2267
+ * Reads the existing metadata file, merges the provided updates,
2268
+ * and writes back. Only provided fields are overwritten.
2269
+ *
2270
+ * @param worktreePath - Absolute path to the worktree
2271
+ * @param updates - Partial metadata fields to merge
2272
+ */
2273
+ updateMetadata(worktreePath: string, updates: Partial<MetadataFile>): Promise<void>;
1892
2274
  /**
1893
2275
  * Delete metadata for a worktree (spec section 3.3)
1894
2276
  *
@@ -2254,6 +2636,48 @@ declare function setThemeMode(mode: ThemeMode): void;
2254
2636
  */
2255
2637
  declare function getThemeMode(): ThemeMode;
2256
2638
 
2639
+ /**
2640
+ * Utility class for detecting and converting Jira Wiki markup to GitHub-Flavored Markdown.
2641
+ * Applied at the MCP layer to prevent malformed content from reaching issue tracker providers.
2642
+ *
2643
+ * IMPORTANT: Only converts UNAMBIGUOUS Jira Wiki patterns.
2644
+ * Patterns that overlap with valid Markdown (e.g., *bold*, _italic_) are
2645
+ * intentionally NOT converted to avoid corrupting valid Markdown content.
2646
+ *
2647
+ * Safe conversions (unambiguous):
2648
+ * - h1. through h6. headings at line start -> # through ######
2649
+ * - {code}...{code} and {code:lang}...{code} -> fenced code blocks
2650
+ * - {quote}...{quote} -> > blockquotes
2651
+ * - [text|url] -> [text](url) (only when url looks like http/https)
2652
+ *
2653
+ * Intentionally NOT converted (ambiguous):
2654
+ * - *text* (could be Markdown italic)
2655
+ * - _text_ (could be Markdown italic or snake_case)
2656
+ */
2657
+ declare class JiraWikiSanitizer {
2658
+ /**
2659
+ * Sanitize body text by converting unambiguous Jira Wiki patterns to Markdown.
2660
+ * Preserves content inside backtick-fenced code blocks.
2661
+ * Returns text unchanged if no Wiki patterns detected.
2662
+ */
2663
+ static sanitize(text: string): string;
2664
+ /**
2665
+ * Check if text contains unambiguous Jira Wiki patterns.
2666
+ * Only checks for patterns that are safe to convert.
2667
+ */
2668
+ static hasJiraWikiPatterns(text: string): boolean;
2669
+ /**
2670
+ * Split text into segments, separating existing Markdown fenced code blocks
2671
+ * from the rest of the content. This ensures we don't modify content inside
2672
+ * code blocks (e.g., Jira Wiki examples shown in a Markdown code block).
2673
+ */
2674
+ private static splitByCodeBlocks;
2675
+ /**
2676
+ * Apply all safe Jira Wiki -> Markdown conversions to a text segment.
2677
+ */
2678
+ private static convertSegment;
2679
+ }
2680
+
2257
2681
  /**
2258
2682
  * Utility class for converting HTML details/summary format to Linear's collapsible format
2259
2683
  *
@@ -2403,4 +2827,4 @@ declare class TableFormatter {
2403
2827
  static previewFormatting(headers: string[], options?: TableFormatterOptions): string;
2404
2828
  }
2405
2829
 
2406
- export { type AddIssueOptions, type AddIssueResult, type BatchCleanupResult, type BranchCleanupTarget, type BranchDeleteOptions, type BranchGenerationOptions, type BranchNameStrategy, type Capability, type ClaudeContext, ClaudeContextManager, type CleanupOptions, type CleanupResult, type ColorData, type CommitOptions, type Config, type CreateLoomInput, type DatabaseDeletionResult, DatabaseManager, type DatabaseProvider, type EnhanceOptions, type EnhanceResult, type EnvFileOptions, type EnvOperationResult, type EnvVariable, EnvironmentManager, type FeedbackOptions, type FinishOptions, type FinishResult, GitCommandError, GitHubService, type GitStatus, type GitWorktree, GitWorktreeManager, type InstallationMethod, type Issue, type IssueTracker, IssueTrackerFactory, type IssueTrackerInputDetection, type IssueTrackerProviderType, type LaunchMode, LinearMarkupConverter, type ListOptions, type Logger, type LoggerOptions, type Loom, type LoomSummary, type MergeOptions, type MergeResult, type MockOptions, type OneShotMode, type OperationResult, PLACEHOLDER_COMMIT_PREFIX, type PRWorktreePattern, type Platform, type PortAssignmentOptions, type ProcessInfo, type ProjectCapability, type PullRequest, type RemoteBranchStatus, type ResourceCleanupOptions, type RgbColor, type SafetyCheck, type StartOptions, type StartResult, type SummaryResult, TableFormatter, type TableFormatterOptions, type TableGenerationOptions, type UpdateCheckCache, type UpdateCheckResult, UserAbortedCommitError, type ValidationOptions, type ValidationResult, type ValidationStepResult, type Workspace, type WorkspaceInput, WorkspaceManager, type WorkspaceSummary, type Worktree, type WorktreeCleanupOptions, type WorktreeCreateOptions, type WorktreeListOptions, type WorktreeOperationResult, type WorktreeStatus, type WorktreeValidation, branchExists, checkRemoteBranchStatus, createLogger, createStderrLogger, ensureRepositoryHasCommits, executeGitCommand, extractIssueNumber, extractPRNumber, fetchOrigin, findAllBranchesForIssue, findMainWorktreePath, findMainWorktreePathWithSettings, findPlaceholderCommitSha, findWorktreeForBranch, generateWorktreePath, getCurrentBranch, getDefaultBranch, getMergeTargetBranch, getRepoRoot, getThemeMode, getWorktreeRoot, hasUncommittedChanges, isBranchMergedIntoMain, isEmptyRepository, isFileGitignored, isFileTrackedByGit, isPRBranch, isPlaceholderCommit, isRemoteBranchUpToDate, isValidGitRepo, isWorktreePath, logger, parseWorktreeList, pushBranchToRemote, removePlaceholderCommitFromHead, removePlaceholderCommitFromHistory, setThemeMode };
2830
+ export { type AddIssueOptions, type AddIssueResult, type AutoSwarmCompletedProperties, type AutoSwarmStartedProperties, type BatchCleanupResult, type BranchCleanupTarget, type BranchDeleteOptions, type BranchGenerationOptions, type BranchNameStrategy, type Capability, type ClaudeContext, ClaudeContextManager, type CleanupOptions, type CleanupResult, type CliInstalledProperties, type CliUpgradedProperties, type ColorData, type CommitOptions, type Config, type ContributeStartedProperties, type CreateLoomInput, type DatabaseDeletionResult, DatabaseManager, type DatabaseProvider, type DemoCompletedProperties, type DemoStartedProperties, type EnhanceOptions, type EnhanceResult, type EnvFileOptions, type EnvOperationResult, type EnvVariable, EnvironmentManager, type EpicPlannedProperties, type ErrorOccurredProperties, type FeedbackOptions, type FinishOptions, type FinishResult, GitCommandError, GitHubService, type GitStatus, type GitWorktree, GitWorktreeManager, type InitCompletedProperties, type InitStartedProperties, type InstallationMethod, type Issue, type IssueTracker, IssueTrackerFactory, type IssueTrackerInputDetection, type IssueTrackerProviderType, JiraWikiSanitizer, type LaunchMode, LinearMarkupConverter, type ListOptions, type Logger, type LoggerOptions, type Loom, type LoomAbandonedProperties, type LoomCreatedProperties, type LoomFinishedProperties, type LoomSummary, type MergeOptions, type MergeResult, type MockOptions, type OneShotMode, type OperationResult, PLACEHOLDER_COMMIT_PREFIX, type PRWorktreePattern, type Platform, type PortAssignmentOptions, type ProcessInfo, type ProjectCapability, type PullRequest, type RebaseOutcome, type RebaseResult, type RemoteBranchStatus, type ResourceCleanupOptions, type RgbColor, type SafetyCheck, type SessionStartedProperties, type StartOptions, type StartResult, type SummaryResult, type SwarmChildCompletedProperties, type SwarmCompletedProperties, type SwarmStartedProperties, TableFormatter, type TableFormatterOptions, type TableGenerationOptions, type TelemetryConfig, type TelemetryEventMap, type TelemetryEventName, type UpdateCheckCache, type UpdateCheckResult, UserAbortedCommitError, type ValidationOptions, type ValidationResult, type ValidationStepResult, type Workspace, type WorkspaceInput, WorkspaceManager, type WorkspaceSummary, type Worktree, type WorktreeCleanupOptions, type WorktreeCreateOptions, type WorktreeListOptions, type WorktreeOperationResult, type WorktreeStatus, type WorktreeValidation, branchExists, checkRemoteBranchStatus, createLogger, createStderrLogger, ensureRepositoryHasCommits, executeGitCommand, extractIssueNumber, extractPRNumber, fetchOrigin, findAllBranchesForIssue, findMainWorktreePath, findMainWorktreePathWithSettings, findPlaceholderCommitSha, findWorktreeForBranch, generateWorktreePath, getCurrentBranch, getDefaultBranch, getMergeTargetBranch, getRepoRoot, getThemeMode, getWorktreeRoot, hasUncommittedChanges, isBranchMergedIntoMain, isEmptyRepository, isFileGitignored, isFileTrackedByGit, isPRBranch, isPlaceholderCommit, isRemoteBranchUpToDate, isValidGitRepo, isWorktreePath, logger, parseWorktreeList, pushBranchToRemote, removePlaceholderCommitFromHead, removePlaceholderCommitFromHistory, setThemeMode };