@iloom/cli 0.6.0 → 0.7.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 (179) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +58 -16
  3. package/dist/{BranchNamingService-B5PVRR7F.js → BranchNamingService-FLPUUFOB.js} +2 -2
  4. package/dist/ClaudeContextManager-KE5TBZVZ.js +14 -0
  5. package/dist/ClaudeService-CRSETT3A.js +13 -0
  6. package/dist/{GitHubService-S2OGUTDR.js → GitHubService-O7U4UQ7N.js} +3 -3
  7. package/dist/{LoomLauncher-5LFM4LXB.js → LoomLauncher-NL65LSKP.js} +6 -6
  8. package/dist/{MetadataManager-DFI73J3G.js → MetadataManager-XJ2YB762.js} +2 -2
  9. package/dist/PRManager-2ABCWXHW.js +16 -0
  10. package/dist/{ProjectCapabilityDetector-S5FLNCFI.js → ProjectCapabilityDetector-UZYW32SY.js} +3 -3
  11. package/dist/{PromptTemplateManager-C3DK6XZL.js → PromptTemplateManager-7L3HJQQU.js} +2 -2
  12. package/dist/README.md +58 -16
  13. package/dist/{SettingsManager-35F5RUJH.js → SettingsManager-YU4VYPTW.js} +2 -2
  14. package/dist/agents/iloom-issue-analyze-and-plan.md +42 -17
  15. package/dist/agents/iloom-issue-analyzer.md +14 -14
  16. package/dist/agents/iloom-issue-complexity-evaluator.md +38 -15
  17. package/dist/agents/iloom-issue-enhancer.md +15 -15
  18. package/dist/agents/iloom-issue-implementer.md +44 -15
  19. package/dist/agents/iloom-issue-planner.md +121 -17
  20. package/dist/agents/iloom-issue-reviewer.md +15 -15
  21. package/dist/{build-FJVYP7EV.js → build-O2EJHDEW.js} +9 -9
  22. package/dist/{chunk-ZPSTA5PR.js → chunk-3CDWFEGL.js} +2 -2
  23. package/dist/{chunk-VU3QMIP2.js → chunk-453NC377.js} +91 -15
  24. package/dist/chunk-453NC377.js.map +1 -0
  25. package/dist/{chunk-UQIXZ3BA.js → chunk-5V74K5ZA.js} +2 -2
  26. package/dist/{chunk-7WANFUIK.js → chunk-6TL3BYH6.js} +2 -2
  27. package/dist/{chunk-5TXLVEXT.js → chunk-C3AKFAIR.js} +2 -2
  28. package/dist/{chunk-K7SEEHKO.js → chunk-CNSTXBJ3.js} +7 -419
  29. package/dist/chunk-CNSTXBJ3.js.map +1 -0
  30. package/dist/{chunk-5IWU3HXE.js → chunk-EPPPDVHD.js} +23 -11
  31. package/dist/chunk-EPPPDVHD.js.map +1 -0
  32. package/dist/{chunk-UB4TFAXJ.js → chunk-FEAJR6PN.js} +9 -55
  33. package/dist/chunk-FEAJR6PN.js.map +1 -0
  34. package/dist/{chunk-6YSFTPKW.js → chunk-FM4KBPVA.js} +18 -13
  35. package/dist/chunk-FM4KBPVA.js.map +1 -0
  36. package/dist/{chunk-AEIMYF4P.js → chunk-FP7G7DG3.js} +6 -2
  37. package/dist/chunk-FP7G7DG3.js.map +1 -0
  38. package/dist/{chunk-LT3SGBR7.js → chunk-GCPAZSGV.js} +36 -2
  39. package/dist/{chunk-LT3SGBR7.js.map → chunk-GCPAZSGV.js.map} +1 -1
  40. package/dist/chunk-GJMEKEI5.js +517 -0
  41. package/dist/chunk-GJMEKEI5.js.map +1 -0
  42. package/dist/{chunk-64O2UIWO.js → chunk-GV5X6XUE.js} +4 -4
  43. package/dist/{chunk-7Q66W4OH.js → chunk-HBJITKSZ.js} +37 -1
  44. package/dist/chunk-HBJITKSZ.js.map +1 -0
  45. package/dist/{chunk-7HIRPCKU.js → chunk-HVQNVRAF.js} +2 -2
  46. package/dist/{chunk-BXCPJJYM.js → chunk-ITN64ENQ.js} +1 -1
  47. package/dist/chunk-ITN64ENQ.js.map +1 -0
  48. package/dist/{chunk-6U6VI4SZ.js → chunk-KVS4XGBQ.js} +4 -4
  49. package/dist/{chunk-AXX3QIKK.js → chunk-LLWX3PCW.js} +2 -2
  50. package/dist/{chunk-WIJWIKAN.js → chunk-LQBLDI47.js} +105 -7
  51. package/dist/chunk-LQBLDI47.js.map +1 -0
  52. package/dist/{chunk-SN3Z6EZO.js → chunk-N7FVXZNI.js} +2 -2
  53. package/dist/chunk-NTIZLX42.js +822 -0
  54. package/dist/chunk-NTIZLX42.js.map +1 -0
  55. package/dist/{chunk-PMVWQBWS.js → chunk-S7YMZQUD.js} +31 -45
  56. package/dist/chunk-S7YMZQUD.js.map +1 -0
  57. package/dist/chunk-TIYJEEVO.js +79 -0
  58. package/dist/chunk-TIYJEEVO.js.map +1 -0
  59. package/dist/{chunk-EK3XCAAS.js → chunk-UDRZY65Y.js} +2 -2
  60. package/dist/{chunk-3PT7RKL5.js → chunk-USJSNHGG.js} +2 -2
  61. package/dist/{chunk-CFUWQHCJ.js → chunk-VWGKGNJP.js} +114 -35
  62. package/dist/chunk-VWGKGNJP.js.map +1 -0
  63. package/dist/{chunk-F6WVM437.js → chunk-WFQ5CLTR.js} +6 -3
  64. package/dist/chunk-WFQ5CLTR.js.map +1 -0
  65. package/dist/{chunk-TRQ76ISK.js → chunk-Z6BO53V7.js} +9 -9
  66. package/dist/{chunk-GEXP5IOF.js → chunk-ZA575VLF.js} +21 -8
  67. package/dist/chunk-ZA575VLF.js.map +1 -0
  68. package/dist/{claude-H33OQMXO.js → claude-6H36IBHO.js} +4 -2
  69. package/dist/{cleanup-OU2HFOOG.js → cleanup-ZPOMRSNN.js} +20 -16
  70. package/dist/cleanup-ZPOMRSNN.js.map +1 -0
  71. package/dist/cli.js +511 -959
  72. package/dist/cli.js.map +1 -1
  73. package/dist/commit-6S2RIA2K.js +237 -0
  74. package/dist/commit-6S2RIA2K.js.map +1 -0
  75. package/dist/{compile-ULNO5F7Q.js → compile-LRMAADUT.js} +9 -9
  76. package/dist/{contribute-T7ENST5N.js → contribute-GXKOIA42.js} +99 -31
  77. package/dist/contribute-GXKOIA42.js.map +1 -0
  78. package/dist/{dev-server-4RCDJ5MU.js → dev-server-GREJUEKW.js} +22 -74
  79. package/dist/dev-server-GREJUEKW.js.map +1 -0
  80. package/dist/{feedback-O4Q55SVS.js → feedback-G7G5QCY4.js} +10 -10
  81. package/dist/{git-FVMGBHC2.js → git-ENLT2VNI.js} +6 -4
  82. package/dist/hooks/iloom-hook.js +30 -2
  83. package/dist/{ignite-VHV65WEZ.js → ignite-YUAOJ5PP.js} +20 -20
  84. package/dist/ignite-YUAOJ5PP.js.map +1 -0
  85. package/dist/index.d.ts +71 -27
  86. package/dist/index.js +196 -266
  87. package/dist/index.js.map +1 -1
  88. package/dist/init-XQQMFDM6.js +21 -0
  89. package/dist/{lint-5JMCWE4Y.js → lint-OFVN7FT6.js} +9 -9
  90. package/dist/mcp/issue-management-server.js +359 -13
  91. package/dist/mcp/issue-management-server.js.map +1 -1
  92. package/dist/mcp/recap-server.js +13 -4
  93. package/dist/mcp/recap-server.js.map +1 -1
  94. package/dist/{open-WHVUYGPY.js → open-MCWQAPSZ.js} +25 -76
  95. package/dist/open-MCWQAPSZ.js.map +1 -0
  96. package/dist/{projects-SA76I4TZ.js → projects-PQOTWUII.js} +11 -4
  97. package/dist/projects-PQOTWUII.js.map +1 -0
  98. package/dist/prompts/init-prompt.txt +63 -59
  99. package/dist/prompts/issue-prompt.txt +132 -63
  100. package/dist/prompts/pr-prompt.txt +3 -3
  101. package/dist/prompts/regular-prompt.txt +16 -18
  102. package/dist/prompts/session-summary-prompt.txt +13 -13
  103. package/dist/{rebase-5EY3Q6XP.js → rebase-RKQED567.js} +53 -8
  104. package/dist/rebase-RKQED567.js.map +1 -0
  105. package/dist/{recap-VOOUXOGP.js → recap-ZKGHZCX6.js} +6 -6
  106. package/dist/{run-NCRK5NPR.js → run-CCG24PBC.js} +25 -76
  107. package/dist/run-CCG24PBC.js.map +1 -0
  108. package/dist/schema/settings.schema.json +14 -3
  109. package/dist/{shell-SBLXVOVJ.js → shell-2NNSIU34.js} +6 -6
  110. package/dist/{summary-CVFAMDOJ.js → summary-G6L3VAKK.js} +11 -10
  111. package/dist/{summary-CVFAMDOJ.js.map → summary-G6L3VAKK.js.map} +1 -1
  112. package/dist/{test-3KIVXI6J.js → test-QZDOEUIO.js} +9 -9
  113. package/dist/{test-git-ZB6AGGRW.js → test-git-E2BLXR6M.js} +4 -4
  114. package/dist/{test-prefix-FBGXKMPA.js → test-prefix-A7JGGYAA.js} +4 -4
  115. package/dist/{test-webserver-YVQD42W6.js → test-webserver-NRMGT2HB.js} +29 -8
  116. package/dist/test-webserver-NRMGT2HB.js.map +1 -0
  117. package/package.json +3 -1
  118. package/dist/ClaudeContextManager-6J2EB4QU.js +0 -14
  119. package/dist/ClaudeService-O2PB22GX.js +0 -13
  120. package/dist/PRManager-OCSB2HPT.js +0 -14
  121. package/dist/chunk-5IWU3HXE.js.map +0 -1
  122. package/dist/chunk-6YSFTPKW.js.map +0 -1
  123. package/dist/chunk-7Q66W4OH.js.map +0 -1
  124. package/dist/chunk-AEIMYF4P.js.map +0 -1
  125. package/dist/chunk-BXCPJJYM.js.map +0 -1
  126. package/dist/chunk-CFUWQHCJ.js.map +0 -1
  127. package/dist/chunk-F6WVM437.js.map +0 -1
  128. package/dist/chunk-GEXP5IOF.js.map +0 -1
  129. package/dist/chunk-K7SEEHKO.js.map +0 -1
  130. package/dist/chunk-PMVWQBWS.js.map +0 -1
  131. package/dist/chunk-UB4TFAXJ.js.map +0 -1
  132. package/dist/chunk-VU3QMIP2.js.map +0 -1
  133. package/dist/chunk-W6WVRHJ6.js +0 -251
  134. package/dist/chunk-W6WVRHJ6.js.map +0 -1
  135. package/dist/chunk-WIJWIKAN.js.map +0 -1
  136. package/dist/cleanup-OU2HFOOG.js.map +0 -1
  137. package/dist/contribute-T7ENST5N.js.map +0 -1
  138. package/dist/dev-server-4RCDJ5MU.js.map +0 -1
  139. package/dist/ignite-VHV65WEZ.js.map +0 -1
  140. package/dist/init-HB34Q5FH.js +0 -21
  141. package/dist/open-WHVUYGPY.js.map +0 -1
  142. package/dist/projects-SA76I4TZ.js.map +0 -1
  143. package/dist/rebase-5EY3Q6XP.js.map +0 -1
  144. package/dist/run-NCRK5NPR.js.map +0 -1
  145. package/dist/test-webserver-YVQD42W6.js.map +0 -1
  146. /package/dist/{BranchNamingService-B5PVRR7F.js.map → BranchNamingService-FLPUUFOB.js.map} +0 -0
  147. /package/dist/{ClaudeContextManager-6J2EB4QU.js.map → ClaudeContextManager-KE5TBZVZ.js.map} +0 -0
  148. /package/dist/{ClaudeService-O2PB22GX.js.map → ClaudeService-CRSETT3A.js.map} +0 -0
  149. /package/dist/{GitHubService-S2OGUTDR.js.map → GitHubService-O7U4UQ7N.js.map} +0 -0
  150. /package/dist/{LoomLauncher-5LFM4LXB.js.map → LoomLauncher-NL65LSKP.js.map} +0 -0
  151. /package/dist/{MetadataManager-DFI73J3G.js.map → MetadataManager-XJ2YB762.js.map} +0 -0
  152. /package/dist/{PRManager-OCSB2HPT.js.map → PRManager-2ABCWXHW.js.map} +0 -0
  153. /package/dist/{ProjectCapabilityDetector-S5FLNCFI.js.map → ProjectCapabilityDetector-UZYW32SY.js.map} +0 -0
  154. /package/dist/{PromptTemplateManager-C3DK6XZL.js.map → PromptTemplateManager-7L3HJQQU.js.map} +0 -0
  155. /package/dist/{SettingsManager-35F5RUJH.js.map → SettingsManager-YU4VYPTW.js.map} +0 -0
  156. /package/dist/{build-FJVYP7EV.js.map → build-O2EJHDEW.js.map} +0 -0
  157. /package/dist/{chunk-ZPSTA5PR.js.map → chunk-3CDWFEGL.js.map} +0 -0
  158. /package/dist/{chunk-UQIXZ3BA.js.map → chunk-5V74K5ZA.js.map} +0 -0
  159. /package/dist/{chunk-7WANFUIK.js.map → chunk-6TL3BYH6.js.map} +0 -0
  160. /package/dist/{chunk-5TXLVEXT.js.map → chunk-C3AKFAIR.js.map} +0 -0
  161. /package/dist/{chunk-64O2UIWO.js.map → chunk-GV5X6XUE.js.map} +0 -0
  162. /package/dist/{chunk-7HIRPCKU.js.map → chunk-HVQNVRAF.js.map} +0 -0
  163. /package/dist/{chunk-6U6VI4SZ.js.map → chunk-KVS4XGBQ.js.map} +0 -0
  164. /package/dist/{chunk-AXX3QIKK.js.map → chunk-LLWX3PCW.js.map} +0 -0
  165. /package/dist/{chunk-SN3Z6EZO.js.map → chunk-N7FVXZNI.js.map} +0 -0
  166. /package/dist/{chunk-EK3XCAAS.js.map → chunk-UDRZY65Y.js.map} +0 -0
  167. /package/dist/{chunk-3PT7RKL5.js.map → chunk-USJSNHGG.js.map} +0 -0
  168. /package/dist/{chunk-TRQ76ISK.js.map → chunk-Z6BO53V7.js.map} +0 -0
  169. /package/dist/{claude-H33OQMXO.js.map → claude-6H36IBHO.js.map} +0 -0
  170. /package/dist/{compile-ULNO5F7Q.js.map → compile-LRMAADUT.js.map} +0 -0
  171. /package/dist/{feedback-O4Q55SVS.js.map → feedback-G7G5QCY4.js.map} +0 -0
  172. /package/dist/{git-FVMGBHC2.js.map → git-ENLT2VNI.js.map} +0 -0
  173. /package/dist/{init-HB34Q5FH.js.map → init-XQQMFDM6.js.map} +0 -0
  174. /package/dist/{lint-5JMCWE4Y.js.map → lint-OFVN7FT6.js.map} +0 -0
  175. /package/dist/{recap-VOOUXOGP.js.map → recap-ZKGHZCX6.js.map} +0 -0
  176. /package/dist/{shell-SBLXVOVJ.js.map → shell-2NNSIU34.js.map} +0 -0
  177. /package/dist/{test-3KIVXI6J.js.map → test-QZDOEUIO.js.map} +0 -0
  178. /package/dist/{test-git-ZB6AGGRW.js.map → test-git-E2BLXR6M.js.map} +0 -0
  179. /package/dist/{test-prefix-FBGXKMPA.js.map → test-prefix-A7JGGYAA.js.map} +0 -0
package/dist/index.d.ts CHANGED
@@ -287,6 +287,7 @@ declare const IloomSettingsSchema: z.ZodObject<{
287
287
  model?: "opus" | "sonnet" | "haiku" | undefined;
288
288
  }>>;
289
289
  capabilities: z.ZodOptional<z.ZodObject<{
290
+ capabilities: z.ZodOptional<z.ZodArray<z.ZodEnum<["cli", "web"]>, "many">>;
290
291
  web: z.ZodOptional<z.ZodObject<{
291
292
  basePort: z.ZodOptional<z.ZodNumber>;
292
293
  }, "strip", z.ZodTypeAny, {
@@ -308,6 +309,7 @@ declare const IloomSettingsSchema: z.ZodObject<{
308
309
  database?: {
309
310
  databaseUrlEnvVarName: string;
310
311
  } | undefined;
312
+ capabilities?: ("cli" | "web")[] | undefined;
311
313
  }, {
312
314
  web?: {
313
315
  basePort?: number | undefined;
@@ -315,6 +317,7 @@ declare const IloomSettingsSchema: z.ZodObject<{
315
317
  database?: {
316
318
  databaseUrlEnvVarName?: string | undefined;
317
319
  } | undefined;
320
+ capabilities?: ("cli" | "web")[] | undefined;
318
321
  }>>;
319
322
  databaseProviders: z.ZodOptional<z.ZodObject<{
320
323
  neon: z.ZodOptional<z.ZodObject<{
@@ -412,6 +415,15 @@ declare const IloomSettingsSchema: z.ZodObject<{
412
415
  }, "strip", z.ZodTypeAny, {
413
416
  sourceEnvOnStart: boolean;
414
417
  attribution: "off" | "upstreamOnly" | "on";
418
+ capabilities?: {
419
+ web?: {
420
+ basePort?: number | undefined;
421
+ } | undefined;
422
+ database?: {
423
+ databaseUrlEnvVarName: string;
424
+ } | undefined;
425
+ capabilities?: ("cli" | "web")[] | undefined;
426
+ } | undefined;
415
427
  mainBranch?: string | undefined;
416
428
  worktreePrefix?: string | undefined;
417
429
  protectedBranches?: string[] | undefined;
@@ -454,14 +466,6 @@ declare const IloomSettingsSchema: z.ZodObject<{
454
466
  summary?: {
455
467
  model: "opus" | "sonnet" | "haiku";
456
468
  } | undefined;
457
- capabilities?: {
458
- web?: {
459
- basePort?: number | undefined;
460
- } | undefined;
461
- database?: {
462
- databaseUrlEnvVarName: string;
463
- } | undefined;
464
- } | undefined;
465
469
  databaseProviders?: {
466
470
  neon?: {
467
471
  projectId: string;
@@ -491,6 +495,15 @@ declare const IloomSettingsSchema: z.ZodObject<{
491
495
  vscode: boolean;
492
496
  } | undefined;
493
497
  }, {
498
+ capabilities?: {
499
+ web?: {
500
+ basePort?: number | undefined;
501
+ } | undefined;
502
+ database?: {
503
+ databaseUrlEnvVarName?: string | undefined;
504
+ } | undefined;
505
+ capabilities?: ("cli" | "web")[] | undefined;
506
+ } | undefined;
494
507
  mainBranch?: string | undefined;
495
508
  sourceEnvOnStart?: boolean | undefined;
496
509
  worktreePrefix?: string | undefined;
@@ -534,14 +547,6 @@ declare const IloomSettingsSchema: z.ZodObject<{
534
547
  summary?: {
535
548
  model?: "opus" | "sonnet" | "haiku" | undefined;
536
549
  } | undefined;
537
- capabilities?: {
538
- web?: {
539
- basePort?: number | undefined;
540
- } | undefined;
541
- database?: {
542
- databaseUrlEnvVarName?: string | undefined;
543
- } | undefined;
544
- } | undefined;
545
550
  databaseProviders?: {
546
551
  neon?: {
547
552
  projectId: string;
@@ -1195,6 +1200,8 @@ interface CleanupOptions {
1195
1200
  dryRun?: boolean;
1196
1201
  /** Output result as JSON */
1197
1202
  json?: boolean;
1203
+ /** Wait specified milliseconds before cleanup execution */
1204
+ defer?: number;
1198
1205
  }
1199
1206
  interface ListOptions {
1200
1207
  json?: boolean;
@@ -1282,9 +1289,12 @@ interface ValidationResult {
1282
1289
  interface CommitOptions {
1283
1290
  dryRun?: boolean;
1284
1291
  issueNumber?: string | number;
1292
+ issuePrefix: string;
1285
1293
  message?: string;
1286
1294
  noReview?: boolean;
1287
1295
  skipVerify?: boolean;
1296
+ skipVerifySilent?: boolean;
1297
+ trailerType?: 'Refs' | 'Fixes';
1288
1298
  }
1289
1299
  /**
1290
1300
  * Error thrown when user aborts a commit operation
@@ -1437,6 +1447,7 @@ declare class EnvironmentManager {
1437
1447
  * Implements:
1438
1448
  * - Issue/PR: 3000 + issue/PR number
1439
1449
  * - Branch: 3000 + deterministic hash offset (1-999)
1450
+ * Delegates to calculatePortFromIdentifier for the core calculation.
1440
1451
  */
1441
1452
  calculatePort(options: PortAssignmentOptions): number;
1442
1453
  /**
@@ -1561,16 +1572,9 @@ declare class PromptTemplateManager {
1561
1572
  */
1562
1573
  loadTemplate(templateName: 'issue' | 'pr' | 'regular' | 'init' | 'session-summary'): Promise<string>;
1563
1574
  /**
1564
- * Substitute variables in a template string
1575
+ * Substitute variables in a template string using Handlebars
1565
1576
  */
1566
1577
  substituteVariables(template: string, variables: TemplateVariables): string;
1567
- /**
1568
- * Process conditional sections in template
1569
- * Format: {{#IF ONE_SHOT_MODE}}content{{/IF ONE_SHOT_MODE}}
1570
- *
1571
- * Note: /s flag allows . to match newlines
1572
- */
1573
- private processConditionalSections;
1574
1578
  /**
1575
1579
  * Get a fully processed prompt for a workflow type
1576
1580
  */
@@ -1653,6 +1657,7 @@ interface WriteMetadataInput {
1653
1657
  issueUrls: Record<string, string>;
1654
1658
  prUrls: Record<string, string>;
1655
1659
  draftPrNumber?: number;
1660
+ capabilities: ProjectCapability[];
1656
1661
  parentLoom?: {
1657
1662
  type: 'issue' | 'pr' | 'branch';
1658
1663
  identifier: string | number;
@@ -1665,6 +1670,8 @@ interface WriteMetadataInput {
1665
1670
  * Result of reading metadata for a worktree
1666
1671
  */
1667
1672
  interface LoomMetadata {
1673
+ status?: 'active' | 'finished';
1674
+ finishedAt?: string | null;
1668
1675
  description: string;
1669
1676
  created_at: string | null;
1670
1677
  branchName: string | null;
@@ -1679,6 +1686,7 @@ interface LoomMetadata {
1679
1686
  issueUrls: Record<string, string>;
1680
1687
  prUrls: Record<string, string>;
1681
1688
  draftPrNumber: number | null;
1689
+ capabilities: ProjectCapability[];
1682
1690
  parentLoom: {
1683
1691
  type: 'issue' | 'pr' | 'branch';
1684
1692
  identifier: string | number;
@@ -1700,7 +1708,12 @@ interface LoomMetadata {
1700
1708
  */
1701
1709
  declare class MetadataManager {
1702
1710
  private readonly loomsDir;
1711
+ private readonly finishedDir;
1703
1712
  constructor();
1713
+ /**
1714
+ * Convert MetadataFile to LoomMetadata with default values for optional fields
1715
+ */
1716
+ private toMetadata;
1704
1717
  /**
1705
1718
  * Convert worktree path to filename slug per spec section 2.2
1706
1719
  *
@@ -1757,11 +1770,42 @@ declare class MetadataManager {
1757
1770
  * @param worktreePath - Absolute path to the worktree
1758
1771
  */
1759
1772
  deleteMetadata(worktreePath: string): Promise<void>;
1773
+ /**
1774
+ * Archive metadata for a finished worktree
1775
+ *
1776
+ * Moves the metadata file to the finished/ subdirectory and adds
1777
+ * status: 'finished' and finishedAt timestamp fields.
1778
+ *
1779
+ * Idempotent: silently succeeds if source file doesn't exist
1780
+ * Non-fatal: logs warning on errors but doesn't throw
1781
+ *
1782
+ * @param worktreePath - Absolute path to the worktree
1783
+ */
1784
+ archiveMetadata(worktreePath: string): Promise<void>;
1785
+ /**
1786
+ * List all finished loom metadata files
1787
+ *
1788
+ * Returns an array of LoomMetadata objects for all finished looms
1789
+ * in the finished/ subdirectory, sorted by finishedAt in descending order
1790
+ * (most recently finished first).
1791
+ *
1792
+ * @returns Array of LoomMetadata objects from finished files, sorted by finishedAt desc
1793
+ */
1794
+ listFinishedMetadata(): Promise<LoomMetadata[]>;
1760
1795
  }
1761
1796
 
1797
+ /**
1798
+ * Custom error class for Git command failures
1799
+ * Preserves exit code and stderr for precise error handling
1800
+ */
1801
+ declare class GitCommandError extends Error {
1802
+ readonly exitCode: number | undefined;
1803
+ readonly stderr: string;
1804
+ constructor(message: string, exitCode: number | undefined, stderr: string);
1805
+ }
1762
1806
  /**
1763
1807
  * Execute a Git command and return the stdout result
1764
- * Throws an error if the command fails
1808
+ * Throws a GitCommandError if the command fails
1765
1809
  */
1766
1810
  declare function executeGitCommand(args: string[], options?: {
1767
1811
  cwd?: string;
@@ -2001,7 +2045,7 @@ declare function getMergeTargetBranch(worktreePath?: string, options?: {
2001
2045
  * Created during il start to enable draft PR creation (GitHub requires at least one commit ahead of base).
2002
2046
  * Removed during il finish before the final push to maintain clean commit history.
2003
2047
  */
2004
- declare const PLACEHOLDER_COMMIT_PREFIX = "[iloom-temp]";
2048
+ declare const PLACEHOLDER_COMMIT_PREFIX = "[iloom]";
2005
2049
  /**
2006
2050
  * Check if HEAD commit is a placeholder commit
2007
2051
  * @param cwd - Working directory (defaults to process.cwd())
@@ -2223,4 +2267,4 @@ declare class TableFormatter {
2223
2267
  static previewFormatting(headers: string[], options?: TableFormatterOptions): string;
2224
2268
  }
2225
2269
 
2226
- 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, 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 };
2270
+ 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 };