@iloom/cli 0.8.3 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +50 -4
  3. package/dist/{BranchNamingService-AO7BPIUJ.js → BranchNamingService-K6XNWQ6C.js} +2 -2
  4. package/dist/ClaudeContextManager-X2Y72GRL.js +14 -0
  5. package/dist/ClaudeService-7P32TTES.js +13 -0
  6. package/dist/{LoomLauncher-NHZMEVTQ.js → LoomLauncher-3I47SUPV.js} +6 -6
  7. package/dist/{ProjectCapabilityDetector-IA56AUE6.js → ProjectCapabilityDetector-N5L7T4IY.js} +3 -3
  8. package/dist/PromptTemplateManager-36YLQRHP.js +11 -0
  9. package/dist/README.md +50 -4
  10. package/dist/{SettingsManager-VCVLL32H.js → SettingsManager-QR7V2IW2.js} +2 -2
  11. package/dist/agents/iloom-artifact-reviewer.md +280 -0
  12. package/dist/agents/iloom-code-reviewer.md +9 -7
  13. package/dist/agents/iloom-issue-analyze-and-plan.md +21 -6
  14. package/dist/agents/iloom-issue-analyzer.md +21 -6
  15. package/dist/agents/iloom-issue-complexity-evaluator.md +21 -6
  16. package/dist/agents/iloom-issue-enhancer.md +21 -6
  17. package/dist/agents/iloom-issue-implementer.md +21 -6
  18. package/dist/agents/iloom-issue-planner.md +21 -6
  19. package/dist/{build-Z3WCIKPD.js → build-IC4CJRMP.js} +8 -8
  20. package/dist/{chunk-TVH67KEO.js → chunk-2HZX6AMR.js} +2 -2
  21. package/dist/{chunk-VZYSM7N7.js → chunk-2JPXGGP4.js} +20 -15
  22. package/dist/chunk-2JPXGGP4.js.map +1 -0
  23. package/dist/{chunk-HSGZW3ID.js → chunk-4GAJJUYS.js} +3 -3
  24. package/dist/chunk-4GAJJUYS.js.map +1 -0
  25. package/dist/{chunk-RD7I2Q2F.js → chunk-4LKGCFGG.js} +2 -2
  26. package/dist/{chunk-SSASIBDJ.js → chunk-5LVVQGB3.js} +5 -5
  27. package/dist/{chunk-GWONJE3X.js → chunk-6Y3FTRJL.js} +189 -48
  28. package/dist/chunk-6Y3FTRJL.js.map +1 -0
  29. package/dist/{chunk-4BSXZ5YZ.js → chunk-B7U6OKUR.js} +5 -24
  30. package/dist/chunk-B7U6OKUR.js.map +1 -0
  31. package/dist/{chunk-IGKPPACU.js → chunk-FO5GGFOV.js} +17 -8
  32. package/dist/chunk-FO5GGFOV.js.map +1 -0
  33. package/dist/{chunk-GDS2HXSW.js → chunk-H6ST2TGP.js} +20 -3
  34. package/dist/chunk-H6ST2TGP.js.map +1 -0
  35. package/dist/{chunk-A7XHHUEV.js → chunk-HZXBHMVM.js} +47 -22
  36. package/dist/chunk-HZXBHMVM.js.map +1 -0
  37. package/dist/{chunk-44Y5IF7P.js → chunk-I23OQB4Y.js} +5 -5
  38. package/dist/chunk-JT5LZRMI.js +302 -0
  39. package/dist/chunk-JT5LZRMI.js.map +1 -0
  40. package/dist/{chunk-Q457PKGH.js → chunk-KAYXR544.js} +2 -2
  41. package/dist/{chunk-XU5A6BWA.js → chunk-MZPRBNYC.js} +4 -4
  42. package/dist/{chunk-XHNACIHO.js → chunk-NTTSUAVM.js} +2 -2
  43. package/dist/{chunk-PLI3JQWT.js → chunk-OAVJR4PM.js} +2 -2
  44. package/dist/{chunk-4KGRPHM6.js → chunk-PL2FDYEK.js} +2 -2
  45. package/dist/chunk-QN47QVBX.js +131 -0
  46. package/dist/chunk-QN47QVBX.js.map +1 -0
  47. package/dist/{chunk-3FC3VNEX.js → chunk-RD7OPXZK.js} +34 -8
  48. package/dist/chunk-RD7OPXZK.js.map +1 -0
  49. package/dist/{chunk-O6LECMT6.js → chunk-TGRK3CHF.js} +8 -8
  50. package/dist/{chunk-7GLZVDPQ.js → chunk-TL72BGP6.js} +2 -2
  51. package/dist/{chunk-52MVUK5V.js → chunk-USSL2X4A.js} +2 -2
  52. package/dist/chunk-USSL2X4A.js.map +1 -0
  53. package/dist/{chunk-XPKN3QWY.js → chunk-VOGGLPG5.js} +1 -2
  54. package/dist/{chunk-IWIIOFEB.js → chunk-XFEK2X2D.js} +16 -6
  55. package/dist/chunk-XFEK2X2D.js.map +1 -0
  56. package/dist/{chunk-PBSHQVCT.js → chunk-Z6F5CUS6.js} +4 -4
  57. package/dist/{claude-V4HRPR4Z.js → claude-TP2QO3BU.js} +2 -2
  58. package/dist/{cleanup-NWNKWPUY.js → cleanup-M6N7KV7E.js} +20 -15
  59. package/dist/{cleanup-NWNKWPUY.js.map → cleanup-M6N7KV7E.js.map} +1 -1
  60. package/dist/cli.js +118 -84
  61. package/dist/cli.js.map +1 -1
  62. package/dist/{commit-534QIRHY.js → commit-ORHR53KW.js} +10 -10
  63. package/dist/{compile-UANHMNTS.js → compile-EOWJORKO.js} +8 -8
  64. package/dist/{contribute-7USRBWRM.js → contribute-4KCEOHSH.js} +3 -3
  65. package/dist/{dev-server-TO7RLYJI.js → dev-server-Q6M62ATG.js} +13 -13
  66. package/dist/{feedback-7ZZI6RC5.js → feedback-XRI7SGYX.js} +11 -11
  67. package/dist/{git-GUNOPP4Q.js → git-W3XUIFTR.js} +5 -3
  68. package/dist/hooks/iloom-hook.js +5 -3
  69. package/dist/{ignite-JBX3BUDE.js → ignite-3FHQY23X.js} +90 -47
  70. package/dist/ignite-3FHQY23X.js.map +1 -0
  71. package/dist/index.d.ts +37 -2
  72. package/dist/index.js +49 -13
  73. package/dist/index.js.map +1 -1
  74. package/dist/{chunk-FPNSFP6K.js → init-ALYWKNWG.js} +42 -329
  75. package/dist/init-ALYWKNWG.js.map +1 -0
  76. package/dist/{lint-XPODLDVA.js → lint-IHUH45OC.js} +8 -8
  77. package/dist/{open-M2SUR74Y.js → open-KWOV2OFO.js} +15 -15
  78. package/dist/{plan-FB4AOJ2Q.js → plan-P6MXL7AU.js} +54 -22
  79. package/dist/plan-P6MXL7AU.js.map +1 -0
  80. package/dist/{projects-325GEEGJ.js → projects-LH362JZQ.js} +3 -3
  81. package/dist/prompts/init-prompt.txt +9 -1
  82. package/dist/prompts/issue-prompt.txt +310 -0
  83. package/dist/prompts/plan-prompt.txt +4 -6
  84. package/dist/prompts/pr-prompt.txt +79 -0
  85. package/dist/prompts/regular-prompt.txt +205 -0
  86. package/dist/{rebase-4FNRBW3H.js → rebase-AJOJOZUG.js} +9 -9
  87. package/dist/{recap-GSXFEOD6.js → recap-GKJXMDXW.js} +5 -5
  88. package/dist/{run-GZNHRJB2.js → run-QEUVZF7J.js} +15 -15
  89. package/dist/schema/settings.schema.json +9 -1
  90. package/dist/{shell-2SPM3Z5O.js → shell-DAAVG4YN.js} +5 -5
  91. package/dist/{summary-Z4F7YFXE.js → summary-WNEYCO4S.js} +11 -11
  92. package/dist/{test-LBSPYIJW.js → test-5GPWWO3P.js} +8 -8
  93. package/dist/{test-git-ZPSPA2TP.js → test-git-EJUKDB7F.js} +3 -3
  94. package/dist/{test-prefix-6DLB2BHE.js → test-prefix-23TOBUXY.js} +3 -3
  95. package/dist/{test-webserver-XLJ2TZFP.js → test-webserver-CKROHFBQ.js} +5 -5
  96. package/dist/{vscode-LH3VSQ2W.js → vscode-6TOLFCI2.js} +5 -5
  97. package/package.json +2 -2
  98. package/dist/ClaudeContextManager-RDP6CLK6.js +0 -14
  99. package/dist/ClaudeService-FKPOQRA4.js +0 -13
  100. package/dist/PRManager-A63LT3NF.js +0 -16
  101. package/dist/PromptTemplateManager-OUYDHOPI.js +0 -9
  102. package/dist/chunk-3FC3VNEX.js.map +0 -1
  103. package/dist/chunk-4BSXZ5YZ.js.map +0 -1
  104. package/dist/chunk-52MVUK5V.js.map +0 -1
  105. package/dist/chunk-66QOCD5N.js +0 -79
  106. package/dist/chunk-66QOCD5N.js.map +0 -1
  107. package/dist/chunk-A7XHHUEV.js.map +0 -1
  108. package/dist/chunk-FPNSFP6K.js.map +0 -1
  109. package/dist/chunk-GDS2HXSW.js.map +0 -1
  110. package/dist/chunk-GWONJE3X.js.map +0 -1
  111. package/dist/chunk-HSGZW3ID.js.map +0 -1
  112. package/dist/chunk-IGKPPACU.js.map +0 -1
  113. package/dist/chunk-IWIIOFEB.js.map +0 -1
  114. package/dist/chunk-VZYSM7N7.js.map +0 -1
  115. package/dist/git-GUNOPP4Q.js.map +0 -1
  116. package/dist/ignite-JBX3BUDE.js.map +0 -1
  117. package/dist/init-XXDIB2UJ.js +0 -21
  118. package/dist/init-XXDIB2UJ.js.map +0 -1
  119. package/dist/plan-FB4AOJ2Q.js.map +0 -1
  120. /package/dist/{BranchNamingService-AO7BPIUJ.js.map → BranchNamingService-K6XNWQ6C.js.map} +0 -0
  121. /package/dist/{ClaudeContextManager-RDP6CLK6.js.map → ClaudeContextManager-X2Y72GRL.js.map} +0 -0
  122. /package/dist/{ClaudeService-FKPOQRA4.js.map → ClaudeService-7P32TTES.js.map} +0 -0
  123. /package/dist/{LoomLauncher-NHZMEVTQ.js.map → LoomLauncher-3I47SUPV.js.map} +0 -0
  124. /package/dist/{PRManager-A63LT3NF.js.map → ProjectCapabilityDetector-N5L7T4IY.js.map} +0 -0
  125. /package/dist/{ProjectCapabilityDetector-IA56AUE6.js.map → PromptTemplateManager-36YLQRHP.js.map} +0 -0
  126. /package/dist/{PromptTemplateManager-OUYDHOPI.js.map → SettingsManager-QR7V2IW2.js.map} +0 -0
  127. /package/dist/{build-Z3WCIKPD.js.map → build-IC4CJRMP.js.map} +0 -0
  128. /package/dist/{chunk-TVH67KEO.js.map → chunk-2HZX6AMR.js.map} +0 -0
  129. /package/dist/{chunk-RD7I2Q2F.js.map → chunk-4LKGCFGG.js.map} +0 -0
  130. /package/dist/{chunk-SSASIBDJ.js.map → chunk-5LVVQGB3.js.map} +0 -0
  131. /package/dist/{chunk-44Y5IF7P.js.map → chunk-I23OQB4Y.js.map} +0 -0
  132. /package/dist/{chunk-Q457PKGH.js.map → chunk-KAYXR544.js.map} +0 -0
  133. /package/dist/{chunk-XU5A6BWA.js.map → chunk-MZPRBNYC.js.map} +0 -0
  134. /package/dist/{chunk-XHNACIHO.js.map → chunk-NTTSUAVM.js.map} +0 -0
  135. /package/dist/{chunk-PLI3JQWT.js.map → chunk-OAVJR4PM.js.map} +0 -0
  136. /package/dist/{chunk-4KGRPHM6.js.map → chunk-PL2FDYEK.js.map} +0 -0
  137. /package/dist/{chunk-O6LECMT6.js.map → chunk-TGRK3CHF.js.map} +0 -0
  138. /package/dist/{chunk-7GLZVDPQ.js.map → chunk-TL72BGP6.js.map} +0 -0
  139. /package/dist/{chunk-XPKN3QWY.js.map → chunk-VOGGLPG5.js.map} +0 -0
  140. /package/dist/{chunk-PBSHQVCT.js.map → chunk-Z6F5CUS6.js.map} +0 -0
  141. /package/dist/{SettingsManager-VCVLL32H.js.map → claude-TP2QO3BU.js.map} +0 -0
  142. /package/dist/{commit-534QIRHY.js.map → commit-ORHR53KW.js.map} +0 -0
  143. /package/dist/{compile-UANHMNTS.js.map → compile-EOWJORKO.js.map} +0 -0
  144. /package/dist/{contribute-7USRBWRM.js.map → contribute-4KCEOHSH.js.map} +0 -0
  145. /package/dist/{dev-server-TO7RLYJI.js.map → dev-server-Q6M62ATG.js.map} +0 -0
  146. /package/dist/{feedback-7ZZI6RC5.js.map → feedback-XRI7SGYX.js.map} +0 -0
  147. /package/dist/{claude-V4HRPR4Z.js.map → git-W3XUIFTR.js.map} +0 -0
  148. /package/dist/{lint-XPODLDVA.js.map → lint-IHUH45OC.js.map} +0 -0
  149. /package/dist/{open-M2SUR74Y.js.map → open-KWOV2OFO.js.map} +0 -0
  150. /package/dist/{projects-325GEEGJ.js.map → projects-LH362JZQ.js.map} +0 -0
  151. /package/dist/{rebase-4FNRBW3H.js.map → rebase-AJOJOZUG.js.map} +0 -0
  152. /package/dist/{recap-GSXFEOD6.js.map → recap-GKJXMDXW.js.map} +0 -0
  153. /package/dist/{run-GZNHRJB2.js.map → run-QEUVZF7J.js.map} +0 -0
  154. /package/dist/{shell-2SPM3Z5O.js.map → shell-DAAVG4YN.js.map} +0 -0
  155. /package/dist/{summary-Z4F7YFXE.js.map → summary-WNEYCO4S.js.map} +0 -0
  156. /package/dist/{test-LBSPYIJW.js.map → test-5GPWWO3P.js.map} +0 -0
  157. /package/dist/{test-git-ZPSPA2TP.js.map → test-git-EJUKDB7F.js.map} +0 -0
  158. /package/dist/{test-prefix-6DLB2BHE.js.map → test-prefix-23TOBUXY.js.map} +0 -0
  159. /package/dist/{test-webserver-XLJ2TZFP.js.map → test-webserver-CKROHFBQ.js.map} +0 -0
  160. /package/dist/{vscode-LH3VSQ2W.js.map → vscode-6TOLFCI2.js.map} +0 -0
package/dist/index.d.ts CHANGED
@@ -269,14 +269,17 @@ declare const IloomSettingsSchema: z.ZodObject<{
269
269
  model: z.ZodOptional<z.ZodEnum<["sonnet", "opus", "haiku"]>>;
270
270
  enabled: z.ZodOptional<z.ZodBoolean>;
271
271
  providers: z.ZodOptional<z.ZodRecord<z.ZodEnum<["claude", "gemini", "codex"]>, z.ZodString>>;
272
+ review: z.ZodOptional<z.ZodBoolean>;
272
273
  }, "strip", z.ZodTypeAny, {
273
274
  model?: "opus" | "sonnet" | "haiku" | undefined;
274
275
  enabled?: boolean | undefined;
275
276
  providers?: Partial<Record<"claude" | "gemini" | "codex", string>> | undefined;
277
+ review?: boolean | undefined;
276
278
  }, {
277
279
  model?: "opus" | "sonnet" | "haiku" | undefined;
278
280
  enabled?: boolean | undefined;
279
281
  providers?: Partial<Record<"claude" | "gemini" | "codex", string>> | undefined;
282
+ review?: boolean | undefined;
280
283
  }>>>>;
281
284
  spin: z.ZodOptional<z.ZodObject<{
282
285
  model: z.ZodDefault<z.ZodEnum<["sonnet", "opus", "haiku"]>>;
@@ -406,12 +409,15 @@ declare const IloomSettingsSchema: z.ZodObject<{
406
409
  mergeBehavior: z.ZodOptional<z.ZodObject<{
407
410
  mode: z.ZodDefault<z.ZodEnum<["local", "github-pr", "github-draft-pr"]>>;
408
411
  remote: z.ZodOptional<z.ZodString>;
412
+ autoCommitPush: z.ZodOptional<z.ZodBoolean>;
409
413
  }, "strip", z.ZodTypeAny, {
410
414
  mode: "local" | "github-pr" | "github-draft-pr";
411
415
  remote?: string | undefined;
416
+ autoCommitPush?: boolean | undefined;
412
417
  }, {
413
418
  remote?: string | undefined;
414
419
  mode?: "local" | "github-pr" | "github-draft-pr" | undefined;
420
+ autoCommitPush?: boolean | undefined;
415
421
  }>>;
416
422
  ide: z.ZodOptional<z.ZodObject<{
417
423
  type: z.ZodDefault<z.ZodEnum<["vscode", "cursor", "webstorm", "sublime", "intellij", "windsurf", "antigravity"]>>;
@@ -485,6 +491,7 @@ declare const IloomSettingsSchema: z.ZodObject<{
485
491
  model?: "opus" | "sonnet" | "haiku" | undefined;
486
492
  enabled?: boolean | undefined;
487
493
  providers?: Partial<Record<"claude" | "gemini" | "codex", string>> | undefined;
494
+ review?: boolean | undefined;
488
495
  }> | null | undefined;
489
496
  spin?: {
490
497
  model: "opus" | "sonnet" | "haiku";
@@ -512,6 +519,7 @@ declare const IloomSettingsSchema: z.ZodObject<{
512
519
  mergeBehavior?: {
513
520
  mode: "local" | "github-pr" | "github-draft-pr";
514
521
  remote?: string | undefined;
522
+ autoCommitPush?: boolean | undefined;
515
523
  } | undefined;
516
524
  ide?: {
517
525
  type: "vscode" | "cursor" | "webstorm" | "sublime" | "intellij" | "windsurf" | "antigravity";
@@ -573,6 +581,7 @@ declare const IloomSettingsSchema: z.ZodObject<{
573
581
  model?: "opus" | "sonnet" | "haiku" | undefined;
574
582
  enabled?: boolean | undefined;
575
583
  providers?: Partial<Record<"claude" | "gemini" | "codex", string>> | undefined;
584
+ review?: boolean | undefined;
576
585
  }> | null | undefined;
577
586
  spin?: {
578
587
  model?: "opus" | "sonnet" | "haiku" | undefined;
@@ -600,6 +609,7 @@ declare const IloomSettingsSchema: z.ZodObject<{
600
609
  mergeBehavior?: {
601
610
  remote?: string | undefined;
602
611
  mode?: "local" | "github-pr" | "github-draft-pr" | undefined;
612
+ autoCommitPush?: boolean | undefined;
603
613
  } | undefined;
604
614
  ide?: {
605
615
  type?: "vscode" | "cursor" | "webstorm" | "sublime" | "intellij" | "windsurf" | "antigravity" | undefined;
@@ -916,7 +926,7 @@ interface CleanupResult {
916
926
  */
917
927
  interface OperationResult {
918
928
  /** Type of operation performed */
919
- type: 'dev-server' | 'worktree' | 'branch' | 'database' | 'cli-symlinks';
929
+ type: 'dev-server' | 'worktree' | 'branch' | 'database' | 'cli-symlinks' | 'recap' | 'metadata';
920
930
  /** Whether operation succeeded */
921
931
  success: boolean;
922
932
  /** Human-readable message */
@@ -1616,8 +1626,11 @@ interface TemplateVariables {
1616
1626
  COMPACT_SUMMARIES?: string;
1617
1627
  RECAP_DATA?: string;
1618
1628
  DRAFT_PR_NUMBER?: number;
1629
+ DRAFT_PR_URL?: string;
1619
1630
  DRAFT_PR_MODE?: boolean;
1631
+ AUTO_COMMIT_PUSH?: boolean;
1620
1632
  STANDARD_ISSUE_MODE?: boolean;
1633
+ STANDARD_BRANCH_MODE?: boolean;
1621
1634
  IS_VSCODE_MODE?: boolean;
1622
1635
  HAS_PACKAGE_JSON?: boolean;
1623
1636
  NO_PACKAGE_JSON?: boolean;
@@ -1628,6 +1641,19 @@ interface TemplateVariables {
1628
1641
  HAS_REVIEW_CLAUDE?: boolean;
1629
1642
  HAS_REVIEW_GEMINI?: boolean;
1630
1643
  HAS_REVIEW_CODEX?: boolean;
1644
+ ARTIFACT_REVIEW_ENABLED?: boolean;
1645
+ ARTIFACT_REVIEW_CLAUDE_MODEL?: string;
1646
+ ARTIFACT_REVIEW_GEMINI_MODEL?: string;
1647
+ ARTIFACT_REVIEW_CODEX_MODEL?: string;
1648
+ HAS_ARTIFACT_REVIEW_CLAUDE?: boolean;
1649
+ HAS_ARTIFACT_REVIEW_GEMINI?: boolean;
1650
+ HAS_ARTIFACT_REVIEW_CODEX?: boolean;
1651
+ ENHANCER_REVIEW_ENABLED?: boolean;
1652
+ ANALYZER_REVIEW_ENABLED?: boolean;
1653
+ PLANNER_REVIEW_ENABLED?: boolean;
1654
+ ANALYZE_AND_PLAN_REVIEW_ENABLED?: boolean;
1655
+ IMPLEMENTER_REVIEW_ENABLED?: boolean;
1656
+ COMPLEXITY_REVIEW_ENABLED?: boolean;
1631
1657
  EXISTING_ISSUE_MODE?: boolean;
1632
1658
  FRESH_PLANNING_MODE?: boolean;
1633
1659
  PARENT_ISSUE_NUMBER?: string | undefined;
@@ -1644,6 +1670,7 @@ interface TemplateVariables {
1644
1670
  USE_GEMINI_REVIEWER?: boolean;
1645
1671
  USE_CODEX_REVIEWER?: boolean;
1646
1672
  HAS_REVIEWER?: boolean;
1673
+ GIT_REMOTE?: string;
1647
1674
  }
1648
1675
  declare class PromptTemplateManager {
1649
1676
  private templateDir;
@@ -2030,6 +2057,14 @@ declare function ensureRepositoryHasCommits(path?: string): Promise<void>;
2030
2057
  declare function pushBranchToRemote(branchName: string, worktreePath: string, options?: {
2031
2058
  dryRun?: boolean;
2032
2059
  }): Promise<void>;
2060
+ /**
2061
+ * Fetch from origin to ensure we have latest refs
2062
+ * Used before branching and rebasing operations to stay current with remote
2063
+ *
2064
+ * @param cwd - Working directory to run git command in
2065
+ * @throws Error if fetch fails (network issues, access denied, etc.)
2066
+ */
2067
+ declare function fetchOrigin(cwd: string): Promise<void>;
2033
2068
  /**
2034
2069
  * Check if a file is tracked by git
2035
2070
  * Uses git ls-files to check if file is in the index
@@ -2350,4 +2385,4 @@ declare class TableFormatter {
2350
2385
  static previewFormatting(headers: string[], options?: TableFormatterOptions): string;
2351
2386
  }
2352
2387
 
2353
- 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, 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 };
2388
+ 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 };
package/dist/index.js CHANGED
@@ -507,7 +507,8 @@ var init_SettingsManager = __esm({
507
507
  providers: z.record(
508
508
  z.enum(["claude", "gemini", "codex"]),
509
509
  z.string()
510
- ).optional().describe('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")')
510
+ ).optional().describe('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")'),
511
+ review: z.boolean().optional().describe("Whether artifacts from this agent should be reviewed before posting (defaults to false)")
511
512
  });
512
513
  SpinAgentSettingsSchema = z.object({
513
514
  model: z.enum(["sonnet", "opus", "haiku"]).default("opus").describe("Claude model shorthand for spin orchestrator")
@@ -605,7 +606,7 @@ var init_SettingsManager = __esm({
605
606
  copyGitIgnoredPatterns: z.array(z.string().min(1, "Pattern cannot be empty")).optional().describe(`Glob patterns for gitignored files to copy to looms (e.g., ["*.db", "data/*.sqlite"]). Great for local dbs and large test data files that are too big to commit to git. Note: .env (dotenv-flow) files, iloom's and claude's local settings are automatically copied and do not need to be specified here.`),
606
607
  workflows: WorkflowsSettingsSchema.describe("Per-workflow-type permission configurations"),
607
608
  agents: z.record(z.string(), AgentSettingsSchema).optional().nullable().describe(
608
- "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)"
609
+ "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), iloom-artifact-reviewer (reviews artifacts before posting)"
609
610
  ),
610
611
  spin: SpinAgentSettingsSchema.optional().describe(
611
612
  "Spin orchestrator configuration. Model defaults to opus when not configured."
@@ -619,6 +620,7 @@ var init_SettingsManager = __esm({
619
620
  capabilities: CapabilitiesSettingsSchema.describe("Project capability configurations"),
620
621
  databaseProviders: DatabaseProvidersSettingsSchema.describe("Database provider configurations"),
621
622
  issueManagement: z.object({
623
+ // SYNC: If this default changes, update displayDefaultsBox() in src/utils/first-run-setup.ts
622
624
  provider: z.enum(["github", "linear"]).optional().default("github").describe("Issue tracker provider (github, linear)"),
623
625
  github: z.object({
624
626
  remote: z.string().min(1, "Remote name cannot be empty").describe("Git remote name to use for GitHub operations")
@@ -630,10 +632,15 @@ var init_SettingsManager = __esm({
630
632
  }).optional()
631
633
  }).optional().describe("Issue management configuration"),
632
634
  mergeBehavior: z.object({
635
+ // SYNC: If this default changes, update displayDefaultsBox() in src/utils/first-run-setup.ts
633
636
  mode: z.enum(["local", "github-pr", "github-draft-pr"]).default("local"),
634
- remote: z.string().optional()
637
+ remote: z.string().optional(),
638
+ autoCommitPush: z.boolean().optional().describe(
639
+ "Auto-commit and push after code review in draft PR mode. Defaults to true when mode is github-draft-pr."
640
+ )
635
641
  }).optional().describe("Merge behavior configuration: local (merge locally), github-pr (create PR), or github-draft-pr (create draft PR at start, mark ready on finish)"),
636
642
  ide: z.object({
643
+ // SYNC: If this default changes, update displayDefaultsBox() in src/utils/first-run-setup.ts
637
644
  type: z.enum(["vscode", "cursor", "webstorm", "sublime", "intellij", "windsurf", "antigravity"]).default("vscode").describe(
638
645
  "IDE to launch when starting a loom. Options: vscode (Visual Studio Code), cursor (Cursor AI editor), webstorm (JetBrains WebStorm), sublime (Sublime Text), intellij (JetBrains IntelliJ IDEA), windsurf (Windsurf editor), antigravity (Antigravity IDE)."
639
646
  )
@@ -680,7 +687,7 @@ var init_SettingsManager = __esm({
680
687
  copyGitIgnoredPatterns: z.array(z.string().min(1, "Pattern cannot be empty")).optional().describe(`Glob patterns for gitignored files to copy to looms (e.g., ["*.db", "data/*.sqlite"]). Great for local dbs and large test data files that are too big to commit to git. Note: .env (dotenv-flow) files, iloom's and claude's local settings are automatically copied and do not need to be specified here.`),
681
688
  workflows: WorkflowsSettingsSchemaNoDefaults.describe("Per-workflow-type permission configurations"),
682
689
  agents: z.record(z.string(), AgentSettingsSchema).optional().nullable().describe(
683
- "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)"
690
+ "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), iloom-artifact-reviewer (reviews artifacts before posting)"
684
691
  ),
685
692
  spin: z.object({
686
693
  model: z.enum(["sonnet", "opus", "haiku"]).optional()
@@ -708,7 +715,10 @@ var init_SettingsManager = __esm({
708
715
  }).optional().describe("Issue management configuration"),
709
716
  mergeBehavior: z.object({
710
717
  mode: z.enum(["local", "github-pr", "github-draft-pr"]).optional(),
711
- remote: z.string().optional()
718
+ remote: z.string().optional(),
719
+ autoCommitPush: z.boolean().optional().describe(
720
+ "Auto-commit and push after code review in draft PR mode. Defaults to true when mode is github-draft-pr."
721
+ )
712
722
  }).optional().describe("Merge behavior configuration: local (merge locally), github-pr (create PR), or github-draft-pr (create draft PR at start, mark ready on finish)"),
713
723
  ide: z.object({
714
724
  type: z.enum(["vscode", "cursor", "webstorm", "sublime", "intellij", "windsurf", "antigravity"]).optional().describe(
@@ -1987,6 +1997,22 @@ async function pushBranchToRemote(branchName, worktreePath, options) {
1987
1997
  throw new Error(`Failed to push to remote: ${errorMessage}`);
1988
1998
  }
1989
1999
  }
2000
+ async function fetchOrigin(cwd) {
2001
+ try {
2002
+ await executeGitCommand(["fetch", "origin"], {
2003
+ cwd,
2004
+ timeout: 6e4
2005
+ // 60 second timeout for fetch operations
2006
+ });
2007
+ } catch (error) {
2008
+ const errorMessage = error instanceof Error ? error.message : String(error);
2009
+ throw new Error(
2010
+ `Failed to fetch from origin: ${errorMessage}
2011
+
2012
+ Check your network connection and repository access.`
2013
+ );
2014
+ }
2015
+ }
1990
2016
  async function isFileTrackedByGit(filePath, cwd = process.cwd()) {
1991
2017
  try {
1992
2018
  const result = await executeGitCommand(
@@ -2261,7 +2287,7 @@ var GitWorktreeManager = class {
2261
2287
  } else if (options.baseBranch) {
2262
2288
  args.push(options.baseBranch);
2263
2289
  }
2264
- await executeGitCommand(args, { cwd: this._workingDirectory });
2290
+ await executeGitCommand(args, { cwd: this._workingDirectory, timeout: 3e5 });
2265
2291
  return absolutePath;
2266
2292
  }
2267
2293
  /**
@@ -3911,13 +3937,16 @@ function parseJsonStreamOutput(output) {
3911
3937
  }
3912
3938
  }
3913
3939
  async function launchClaude(prompt, options = {}) {
3914
- const { model, permissionMode, addDir, headless = false, appendSystemPrompt, mcpConfig, allowedTools, disallowedTools, agents, sessionId, noSessionPersistence } = options;
3940
+ const { model, permissionMode, addDir, headless = false, appendSystemPrompt, mcpConfig, allowedTools, disallowedTools, agents, sessionId, noSessionPersistence, outputFormat, verbose, jsonMode } = options;
3915
3941
  const log = getLogger();
3916
3942
  const args = [];
3917
3943
  if (headless) {
3918
3944
  args.push("-p");
3919
- args.push("--output-format", "stream-json");
3920
- args.push("--verbose");
3945
+ const effectiveOutputFormat = outputFormat ?? "stream-json";
3946
+ args.push("--output-format", effectiveOutputFormat);
3947
+ if (verbose !== false) {
3948
+ args.push("--verbose");
3949
+ }
3921
3950
  }
3922
3951
  if (model) {
3923
3952
  args.push("--model", model);
@@ -3975,7 +4004,10 @@ async function launchClaude(prompt, options = {}) {
3975
4004
  subprocess.stdout.on("data", (chunk) => {
3976
4005
  const text = chunk.toString();
3977
4006
  outputBuffer += text;
3978
- if (isDebugMode) {
4007
+ if (jsonMode === "stream") {
4008
+ process.stdout.write(text);
4009
+ } else if (jsonMode === "json") {
4010
+ } else if (isDebugMode) {
3979
4011
  log.stdout.write(text);
3980
4012
  } else {
3981
4013
  if (isFirstProgress) {
@@ -3990,7 +4022,7 @@ async function launchClaude(prompt, options = {}) {
3990
4022
  const result = await subprocess;
3991
4023
  if (isStreaming) {
3992
4024
  const rawOutput = outputBuffer.trim();
3993
- if (!isDebugMode) {
4025
+ if (!isDebugMode && !jsonMode) {
3994
4026
  log.stdout.write("\n");
3995
4027
  }
3996
4028
  return isJsonStreamFormat ? parseJsonStreamOutput(rawOutput) : rawOutput;
@@ -4075,7 +4107,10 @@ async function launchClaude(prompt, options = {}) {
4075
4107
  subprocess.stdout.on("data", (chunk) => {
4076
4108
  const text = chunk.toString();
4077
4109
  outputBuffer += text;
4078
- if (isDebugMode) {
4110
+ if (jsonMode === "stream") {
4111
+ process.stdout.write(text);
4112
+ } else if (jsonMode === "json") {
4113
+ } else if (isDebugMode) {
4079
4114
  log.stdout.write(text);
4080
4115
  } else {
4081
4116
  if (isFirstProgress) {
@@ -4090,7 +4125,7 @@ async function launchClaude(prompt, options = {}) {
4090
4125
  const result = await subprocess;
4091
4126
  if (isStreaming) {
4092
4127
  const rawOutput = outputBuffer.trim();
4093
- if (!isDebugMode) {
4128
+ if (!isDebugMode && !jsonMode) {
4094
4129
  log.stdout.write("\n");
4095
4130
  }
4096
4131
  return isJsonStreamFormat ? parseJsonStreamOutput(rawOutput) : rawOutput;
@@ -4725,6 +4760,7 @@ export {
4725
4760
  executeGitCommand,
4726
4761
  extractIssueNumber,
4727
4762
  extractPRNumber,
4763
+ fetchOrigin,
4728
4764
  findAllBranchesForIssue,
4729
4765
  findMainWorktreePath,
4730
4766
  findMainWorktreePathWithSettings,