reviewflow 3.13.0 → 3.14.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 (212) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/frameworks/claude/claudeInvoker.d.ts +2 -0
  3. package/dist/frameworks/claude/claudeInvoker.d.ts.map +1 -1
  4. package/dist/frameworks/claude/claudeInvoker.js +44 -22
  5. package/dist/frameworks/claude/claudeInvoker.js.map +1 -1
  6. package/dist/frameworks/queue/pQueueAdapter.d.ts +2 -0
  7. package/dist/frameworks/queue/pQueueAdapter.d.ts.map +1 -1
  8. package/dist/frameworks/queue/pQueueAdapter.js +26 -5
  9. package/dist/frameworks/queue/pQueueAdapter.js.map +1 -1
  10. package/dist/frameworks/scheduler/supervisorScheduler.d.ts +17 -0
  11. package/dist/frameworks/scheduler/supervisorScheduler.d.ts.map +1 -0
  12. package/dist/frameworks/scheduler/supervisorScheduler.js +25 -0
  13. package/dist/frameworks/scheduler/supervisorScheduler.js.map +1 -0
  14. package/dist/main/dependencies.d.ts +2 -0
  15. package/dist/main/dependencies.d.ts.map +1 -1
  16. package/dist/main/dependencies.js +2 -0
  17. package/dist/main/dependencies.js.map +1 -1
  18. package/dist/main/routes.d.ts.map +1 -1
  19. package/dist/main/routes.js +11 -0
  20. package/dist/main/routes.js.map +1 -1
  21. package/dist/main/server.d.ts.map +1 -1
  22. package/dist/main/server.js +21 -0
  23. package/dist/main/server.js.map +1 -1
  24. package/dist/modules/claude-invocation/entities/claudeSession/claudeSession.gateway.d.ts +1 -1
  25. package/dist/modules/claude-invocation/entities/claudeSession/claudeSession.gateway.d.ts.map +1 -1
  26. package/dist/modules/cli-configuration/interface-adapters/controllers/http/health.routes.d.ts +2 -0
  27. package/dist/modules/cli-configuration/interface-adapters/controllers/http/health.routes.d.ts.map +1 -1
  28. package/dist/modules/cli-configuration/interface-adapters/controllers/http/health.routes.js +16 -1
  29. package/dist/modules/cli-configuration/interface-adapters/controllers/http/health.routes.js.map +1 -1
  30. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.d.ts +6 -0
  31. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.d.ts.map +1 -1
  32. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.js +16 -0
  33. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.js.map +1 -1
  34. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.d.ts +6 -0
  35. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.d.ts.map +1 -1
  36. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.js +31 -0
  37. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.js.map +1 -1
  38. package/dist/modules/supervisor-management/entities/supervisor/supervisor.gateway.d.ts +14 -0
  39. package/dist/modules/supervisor-management/entities/supervisor/supervisor.gateway.d.ts.map +1 -0
  40. package/dist/modules/supervisor-management/entities/supervisor/supervisor.gateway.js +2 -0
  41. package/dist/modules/supervisor-management/entities/supervisor/supervisor.gateway.js.map +1 -0
  42. package/dist/modules/supervisor-management/entities/supervisor/supervisorLock.gateway.d.ts +9 -0
  43. package/dist/modules/supervisor-management/entities/supervisor/supervisorLock.gateway.d.ts.map +1 -0
  44. package/dist/modules/supervisor-management/entities/supervisor/supervisorLock.gateway.js +2 -0
  45. package/dist/modules/supervisor-management/entities/supervisor/supervisorLock.gateway.js.map +1 -0
  46. package/dist/modules/supervisor-management/entities/supervisor/supervisorStatus.schema.d.ts +19 -0
  47. package/dist/modules/supervisor-management/entities/supervisor/supervisorStatus.schema.d.ts.map +1 -0
  48. package/dist/modules/supervisor-management/entities/supervisor/supervisorStatus.schema.js +11 -0
  49. package/dist/modules/supervisor-management/entities/supervisor/supervisorStatus.schema.js.map +1 -0
  50. package/dist/modules/supervisor-management/entities/supervisor/supervisorStatusStore.gateway.d.ts +6 -0
  51. package/dist/modules/supervisor-management/entities/supervisor/supervisorStatusStore.gateway.d.ts.map +1 -0
  52. package/dist/modules/supervisor-management/entities/supervisor/supervisorStatusStore.gateway.js +2 -0
  53. package/dist/modules/supervisor-management/entities/supervisor/supervisorStatusStore.gateway.js.map +1 -0
  54. package/dist/modules/supervisor-management/interface-adapters/gateways/supervisor.cli.gateway.d.ts +25 -0
  55. package/dist/modules/supervisor-management/interface-adapters/gateways/supervisor.cli.gateway.d.ts.map +1 -0
  56. package/dist/modules/supervisor-management/interface-adapters/gateways/supervisor.cli.gateway.js +79 -0
  57. package/dist/modules/supervisor-management/interface-adapters/gateways/supervisor.cli.gateway.js.map +1 -0
  58. package/dist/modules/supervisor-management/interface-adapters/gateways/supervisorLock.fileSystem.gateway.d.ts +22 -0
  59. package/dist/modules/supervisor-management/interface-adapters/gateways/supervisorLock.fileSystem.gateway.d.ts.map +1 -0
  60. package/dist/modules/supervisor-management/interface-adapters/gateways/supervisorLock.fileSystem.gateway.js +71 -0
  61. package/dist/modules/supervisor-management/interface-adapters/gateways/supervisorLock.fileSystem.gateway.js.map +1 -0
  62. package/dist/modules/supervisor-management/interface-adapters/gateways/supervisorStatusStore.memory.gateway.d.ts +8 -0
  63. package/dist/modules/supervisor-management/interface-adapters/gateways/supervisorStatusStore.memory.gateway.d.ts.map +1 -0
  64. package/dist/modules/supervisor-management/interface-adapters/gateways/supervisorStatusStore.memory.gateway.js +20 -0
  65. package/dist/modules/supervisor-management/interface-adapters/gateways/supervisorStatusStore.memory.gateway.js.map +1 -0
  66. package/dist/modules/supervisor-management/usecases/checkSupervisorAndRespawn.usecase.d.ts +14 -0
  67. package/dist/modules/supervisor-management/usecases/checkSupervisorAndRespawn.usecase.d.ts.map +1 -0
  68. package/dist/modules/supervisor-management/usecases/checkSupervisorAndRespawn.usecase.js +51 -0
  69. package/dist/modules/supervisor-management/usecases/checkSupervisorAndRespawn.usecase.js.map +1 -0
  70. package/dist/modules/worktree-management/entities/gitCommand/gitCommand.gateway.d.ts +15 -0
  71. package/dist/modules/worktree-management/entities/gitCommand/gitCommand.gateway.d.ts.map +1 -0
  72. package/dist/modules/worktree-management/entities/gitCommand/gitCommand.gateway.js +2 -0
  73. package/dist/modules/worktree-management/entities/gitCommand/gitCommand.gateway.js.map +1 -0
  74. package/dist/modules/worktree-management/entities/worktree/worktree.d.ts +14 -0
  75. package/dist/modules/worktree-management/entities/worktree/worktree.d.ts.map +1 -0
  76. package/dist/modules/worktree-management/entities/worktree/worktree.gateway.d.ts +18 -0
  77. package/dist/modules/worktree-management/entities/worktree/worktree.gateway.d.ts.map +1 -0
  78. package/dist/modules/worktree-management/entities/worktree/worktree.gateway.js +2 -0
  79. package/dist/modules/worktree-management/entities/worktree/worktree.gateway.js.map +1 -0
  80. package/dist/modules/worktree-management/entities/worktree/worktree.js +58 -0
  81. package/dist/modules/worktree-management/entities/worktree/worktree.js.map +1 -0
  82. package/dist/modules/worktree-management/entities/worktree/worktree.schema.d.ts +54 -0
  83. package/dist/modules/worktree-management/entities/worktree/worktree.schema.d.ts.map +1 -0
  84. package/dist/modules/worktree-management/entities/worktree/worktree.schema.js +8 -0
  85. package/dist/modules/worktree-management/entities/worktree/worktree.schema.js.map +1 -0
  86. package/dist/modules/worktree-management/interface-adapters/gateways/gitCommand.cli.gateway.d.ts +8 -0
  87. package/dist/modules/worktree-management/interface-adapters/gateways/gitCommand.cli.gateway.d.ts.map +1 -0
  88. package/dist/modules/worktree-management/interface-adapters/gateways/gitCommand.cli.gateway.js +28 -0
  89. package/dist/modules/worktree-management/interface-adapters/gateways/gitCommand.cli.gateway.js.map +1 -0
  90. package/dist/modules/worktree-management/interface-adapters/gateways/worktree.fileSystem.gateway.d.ts +17 -0
  91. package/dist/modules/worktree-management/interface-adapters/gateways/worktree.fileSystem.gateway.d.ts.map +1 -0
  92. package/dist/modules/worktree-management/interface-adapters/gateways/worktree.fileSystem.gateway.js +67 -0
  93. package/dist/modules/worktree-management/interface-adapters/gateways/worktree.fileSystem.gateway.js.map +1 -0
  94. package/dist/modules/worktree-management/services/worktreeSettingsWriter.d.ts +4 -0
  95. package/dist/modules/worktree-management/services/worktreeSettingsWriter.d.ts.map +1 -0
  96. package/dist/modules/worktree-management/services/worktreeSettingsWriter.js +16 -0
  97. package/dist/modules/worktree-management/services/worktreeSettingsWriter.js.map +1 -0
  98. package/dist/modules/worktree-management/usecases/ensureWorktree.usecase.d.ts +19 -0
  99. package/dist/modules/worktree-management/usecases/ensureWorktree.usecase.d.ts.map +1 -0
  100. package/dist/modules/worktree-management/usecases/ensureWorktree.usecase.js +53 -0
  101. package/dist/modules/worktree-management/usecases/ensureWorktree.usecase.js.map +1 -0
  102. package/dist/modules/worktree-management/usecases/removeWorktree.usecase.d.ts +12 -0
  103. package/dist/modules/worktree-management/usecases/removeWorktree.usecase.d.ts.map +1 -0
  104. package/dist/modules/worktree-management/usecases/removeWorktree.usecase.js +26 -0
  105. package/dist/modules/worktree-management/usecases/removeWorktree.usecase.js.map +1 -0
  106. package/dist/modules/worktree-management/usecases/sweepStaleWorktrees.usecase.d.ts +23 -0
  107. package/dist/modules/worktree-management/usecases/sweepStaleWorktrees.usecase.d.ts.map +1 -0
  108. package/dist/modules/worktree-management/usecases/sweepStaleWorktrees.usecase.js +63 -0
  109. package/dist/modules/worktree-management/usecases/sweepStaleWorktrees.usecase.js.map +1 -0
  110. package/dist/shared/services/daemonPaths.d.ts +1 -0
  111. package/dist/shared/services/daemonPaths.d.ts.map +1 -1
  112. package/dist/shared/services/daemonPaths.js +1 -0
  113. package/dist/shared/services/daemonPaths.js.map +1 -1
  114. package/dist/tests/acceptance/169-migrate-claude-invocation-to-bg-mode.acceptance.test.js +2 -2
  115. package/dist/tests/acceptance/169-migrate-claude-invocation-to-bg-mode.acceptance.test.js.map +1 -1
  116. package/dist/tests/acceptance/170-prebuilt-worktree-lifecycle.acceptance.test.d.ts +13 -0
  117. package/dist/tests/acceptance/170-prebuilt-worktree-lifecycle.acceptance.test.d.ts.map +1 -0
  118. package/dist/tests/acceptance/170-prebuilt-worktree-lifecycle.acceptance.test.js +145 -0
  119. package/dist/tests/acceptance/170-prebuilt-worktree-lifecycle.acceptance.test.js.map +1 -0
  120. package/dist/tests/acceptance/172-claude-agents-supervisor-lifecycle.acceptance.test.d.ts +2 -0
  121. package/dist/tests/acceptance/172-claude-agents-supervisor-lifecycle.acceptance.test.d.ts.map +1 -0
  122. package/dist/tests/acceptance/172-claude-agents-supervisor-lifecycle.acceptance.test.js +118 -0
  123. package/dist/tests/acceptance/172-claude-agents-supervisor-lifecycle.acceptance.test.js.map +1 -0
  124. package/dist/tests/acceptance/46-github-followup-review-on-push.acceptance.test.js +5 -34
  125. package/dist/tests/acceptance/46-github-followup-review-on-push.acceptance.test.js.map +1 -1
  126. package/dist/tests/integration/claudeInvocation.integration.test.js +2 -2
  127. package/dist/tests/integration/claudeInvocation.integration.test.js.map +1 -1
  128. package/dist/tests/stubs/capturingLogger.stub.d.ts +9 -0
  129. package/dist/tests/stubs/capturingLogger.stub.d.ts.map +1 -0
  130. package/dist/tests/stubs/capturingLogger.stub.js +36 -0
  131. package/dist/tests/stubs/capturingLogger.stub.js.map +1 -0
  132. package/dist/tests/stubs/gitCommandExecutor.stub.d.ts +13 -0
  133. package/dist/tests/stubs/gitCommandExecutor.stub.d.ts.map +1 -0
  134. package/dist/tests/stubs/gitCommandExecutor.stub.js +25 -0
  135. package/dist/tests/stubs/gitCommandExecutor.stub.js.map +1 -0
  136. package/dist/tests/stubs/supervisor.stub.d.ts +12 -0
  137. package/dist/tests/stubs/supervisor.stub.d.ts.map +1 -0
  138. package/dist/tests/stubs/supervisor.stub.js +25 -0
  139. package/dist/tests/stubs/supervisor.stub.js.map +1 -0
  140. package/dist/tests/stubs/supervisorLock.stub.d.ts +10 -0
  141. package/dist/tests/stubs/supervisorLock.stub.d.ts.map +1 -0
  142. package/dist/tests/stubs/supervisorLock.stub.js +19 -0
  143. package/dist/tests/stubs/supervisorLock.stub.js.map +1 -0
  144. package/dist/tests/units/frameworks/claude/claudeInvoker.test.js +24 -27
  145. package/dist/tests/units/frameworks/claude/claudeInvoker.test.js.map +1 -1
  146. package/dist/tests/units/frameworks/claude/mcpContext.test.js +3 -1
  147. package/dist/tests/units/frameworks/claude/mcpContext.test.js.map +1 -1
  148. package/dist/tests/units/frameworks/queue/pQueueAdapter.test.d.ts +2 -0
  149. package/dist/tests/units/frameworks/queue/pQueueAdapter.test.d.ts.map +1 -0
  150. package/dist/tests/units/frameworks/queue/pQueueAdapter.test.js +116 -0
  151. package/dist/tests/units/frameworks/queue/pQueueAdapter.test.js.map +1 -0
  152. package/dist/tests/units/frameworks/scheduler/supervisorScheduler.test.d.ts +2 -0
  153. package/dist/tests/units/frameworks/scheduler/supervisorScheduler.test.d.ts.map +1 -0
  154. package/dist/tests/units/frameworks/scheduler/supervisorScheduler.test.js +76 -0
  155. package/dist/tests/units/frameworks/scheduler/supervisorScheduler.test.js.map +1 -0
  156. package/dist/tests/units/interface-adapters/controllers/http/health.routes.test.js +45 -0
  157. package/dist/tests/units/interface-adapters/controllers/http/health.routes.test.js.map +1 -1
  158. package/dist/tests/units/interface-adapters/controllers/webhook/github.controller.test.js +27 -0
  159. package/dist/tests/units/interface-adapters/controllers/webhook/github.controller.test.js.map +1 -1
  160. package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js +43 -0
  161. package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js.map +1 -1
  162. package/dist/tests/units/modules/claude-invocation/interface-adapters/gateways/claudeSession.cli.gateway.test.js +1 -1
  163. package/dist/tests/units/modules/claude-invocation/interface-adapters/gateways/claudeSession.cli.gateway.test.js.map +1 -1
  164. package/dist/tests/units/modules/claude-invocation/usecases/dispatchClaudeSession.usecase.test.js +1 -1
  165. package/dist/tests/units/modules/claude-invocation/usecases/dispatchClaudeSession.usecase.test.js.map +1 -1
  166. package/dist/tests/units/modules/claude-invocation/usecases/runClaudeReviewJob.usecase.test.js +1 -1
  167. package/dist/tests/units/modules/claude-invocation/usecases/runClaudeReviewJob.usecase.test.js.map +1 -1
  168. package/dist/tests/units/modules/supervisor-management/entities/supervisorStatus.schema.test.d.ts +2 -0
  169. package/dist/tests/units/modules/supervisor-management/entities/supervisorStatus.schema.test.d.ts.map +1 -0
  170. package/dist/tests/units/modules/supervisor-management/entities/supervisorStatus.schema.test.js +32 -0
  171. package/dist/tests/units/modules/supervisor-management/entities/supervisorStatus.schema.test.js.map +1 -0
  172. package/dist/tests/units/modules/supervisor-management/gateways/supervisor.cli.gateway.test.d.ts +2 -0
  173. package/dist/tests/units/modules/supervisor-management/gateways/supervisor.cli.gateway.test.d.ts.map +1 -0
  174. package/dist/tests/units/modules/supervisor-management/gateways/supervisor.cli.gateway.test.js +85 -0
  175. package/dist/tests/units/modules/supervisor-management/gateways/supervisor.cli.gateway.test.js.map +1 -0
  176. package/dist/tests/units/modules/supervisor-management/gateways/supervisorLock.fileSystem.gateway.test.d.ts +2 -0
  177. package/dist/tests/units/modules/supervisor-management/gateways/supervisorLock.fileSystem.gateway.test.d.ts.map +1 -0
  178. package/dist/tests/units/modules/supervisor-management/gateways/supervisorLock.fileSystem.gateway.test.js +94 -0
  179. package/dist/tests/units/modules/supervisor-management/gateways/supervisorLock.fileSystem.gateway.test.js.map +1 -0
  180. package/dist/tests/units/modules/supervisor-management/gateways/supervisorStatusStore.memory.gateway.test.d.ts +2 -0
  181. package/dist/tests/units/modules/supervisor-management/gateways/supervisorStatusStore.memory.gateway.test.d.ts.map +1 -0
  182. package/dist/tests/units/modules/supervisor-management/gateways/supervisorStatusStore.memory.gateway.test.js +26 -0
  183. package/dist/tests/units/modules/supervisor-management/gateways/supervisorStatusStore.memory.gateway.test.js.map +1 -0
  184. package/dist/tests/units/modules/supervisor-management/usecases/checkSupervisorAndRespawn.usecase.test.d.ts +2 -0
  185. package/dist/tests/units/modules/supervisor-management/usecases/checkSupervisorAndRespawn.usecase.test.d.ts.map +1 -0
  186. package/dist/tests/units/modules/supervisor-management/usecases/checkSupervisorAndRespawn.usecase.test.js +129 -0
  187. package/dist/tests/units/modules/supervisor-management/usecases/checkSupervisorAndRespawn.usecase.test.js.map +1 -0
  188. package/dist/tests/units/modules/worktree-management/entities/worktree/worktree.test.d.ts +2 -0
  189. package/dist/tests/units/modules/worktree-management/entities/worktree/worktree.test.d.ts.map +1 -0
  190. package/dist/tests/units/modules/worktree-management/entities/worktree/worktree.test.js +54 -0
  191. package/dist/tests/units/modules/worktree-management/entities/worktree/worktree.test.js.map +1 -0
  192. package/dist/tests/units/modules/worktree-management/interface-adapters/gateways/gitCommand.cli.gateway.test.d.ts +2 -0
  193. package/dist/tests/units/modules/worktree-management/interface-adapters/gateways/gitCommand.cli.gateway.test.d.ts.map +1 -0
  194. package/dist/tests/units/modules/worktree-management/interface-adapters/gateways/gitCommand.cli.gateway.test.js +35 -0
  195. package/dist/tests/units/modules/worktree-management/interface-adapters/gateways/gitCommand.cli.gateway.test.js.map +1 -0
  196. package/dist/tests/units/modules/worktree-management/services/worktreeSettingsWriter.test.d.ts +2 -0
  197. package/dist/tests/units/modules/worktree-management/services/worktreeSettingsWriter.test.d.ts.map +1 -0
  198. package/dist/tests/units/modules/worktree-management/services/worktreeSettingsWriter.test.js +32 -0
  199. package/dist/tests/units/modules/worktree-management/services/worktreeSettingsWriter.test.js.map +1 -0
  200. package/dist/tests/units/modules/worktree-management/usecases/ensureWorktree.usecase.test.d.ts +2 -0
  201. package/dist/tests/units/modules/worktree-management/usecases/ensureWorktree.usecase.test.d.ts.map +1 -0
  202. package/dist/tests/units/modules/worktree-management/usecases/ensureWorktree.usecase.test.js +113 -0
  203. package/dist/tests/units/modules/worktree-management/usecases/ensureWorktree.usecase.test.js.map +1 -0
  204. package/dist/tests/units/modules/worktree-management/usecases/removeWorktree.usecase.test.d.ts +2 -0
  205. package/dist/tests/units/modules/worktree-management/usecases/removeWorktree.usecase.test.d.ts.map +1 -0
  206. package/dist/tests/units/modules/worktree-management/usecases/removeWorktree.usecase.test.js +55 -0
  207. package/dist/tests/units/modules/worktree-management/usecases/removeWorktree.usecase.test.js.map +1 -0
  208. package/dist/tests/units/modules/worktree-management/usecases/sweepStaleWorktrees.usecase.test.d.ts +2 -0
  209. package/dist/tests/units/modules/worktree-management/usecases/sweepStaleWorktrees.usecase.test.d.ts.map +1 -0
  210. package/dist/tests/units/modules/worktree-management/usecases/sweepStaleWorktrees.usecase.test.js +131 -0
  211. package/dist/tests/units/modules/worktree-management/usecases/sweepStaleWorktrees.usecase.test.js.map +1 -0
  212. package/package.json +1 -1
@@ -0,0 +1,17 @@
1
+ import type { EnsureWorktreeRequest, RemoveWorktreeRequest, WorktreeGateway } from '../../../../modules/worktree-management/entities/worktree/worktree.gateway.js';
2
+ import type { EnsureResult, RemoveResult, WorktreeEntry, WorktreeIdentity } from '../../../../modules/worktree-management/entities/worktree/worktree.schema.js';
3
+ import type { GitCommandExecutor } from '../../../../modules/worktree-management/entities/gitCommand/gitCommand.gateway.js';
4
+ export interface WorktreeFileSystemGatewayDependencies {
5
+ executor: GitCommandExecutor;
6
+ baseDirectory?: string;
7
+ }
8
+ export declare class WorktreeFileSystemGateway implements WorktreeGateway {
9
+ private readonly executor;
10
+ private readonly baseDirectory;
11
+ constructor(deps: WorktreeFileSystemGatewayDependencies);
12
+ ensure(request: EnsureWorktreeRequest): Promise<EnsureResult>;
13
+ remove(request: RemoveWorktreeRequest): Promise<RemoveResult>;
14
+ exists(identity: WorktreeIdentity): Promise<boolean>;
15
+ list(): Promise<WorktreeEntry[]>;
16
+ }
17
+ //# sourceMappingURL=worktree.fileSystem.gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree.fileSystem.gateway.d.ts","sourceRoot":"","sources":["../../../../../src/modules/worktree-management/interface-adapters/gateways/worktree.fileSystem.gateway.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EAChB,MAAM,qEAAqE,CAAC;AAC7E,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,gBAAgB,EACjB,MAAM,oEAAoE,CAAC;AAI5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yEAAyE,CAAC;AAElH,MAAM,WAAW,qCAAqC;IACpD,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,yBAA0B,YAAW,eAAe;IAC/D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;gBAE3B,IAAI,EAAE,qCAAqC;IAKjD,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC;IAiB7D,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC;IAe7D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAIpD,IAAI,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;CAoBvC"}
@@ -0,0 +1,67 @@
1
+ import { existsSync, mkdirSync, readdirSync, statSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { WORKTREE_BASE_DIR } from '../../../../shared/services/daemonPaths.js';
4
+ import { createWorktreePath, deriveWorktreePath, parseWorktreeDirectoryName, } from '../../../../modules/worktree-management/entities/worktree/worktree.js';
5
+ import { ensureWorktree } from '../../../../modules/worktree-management/usecases/ensureWorktree.usecase.js';
6
+ import { removeWorktree } from '../../../../modules/worktree-management/usecases/removeWorktree.usecase.js';
7
+ import { writeWorktreeSettings } from '../../../../modules/worktree-management/services/worktreeSettingsWriter.js';
8
+ export class WorktreeFileSystemGateway {
9
+ executor;
10
+ baseDirectory;
11
+ constructor(deps) {
12
+ this.executor = deps.executor;
13
+ this.baseDirectory = deps.baseDirectory ?? WORKTREE_BASE_DIR;
14
+ }
15
+ async ensure(request) {
16
+ mkdirSync(this.baseDirectory, { recursive: true });
17
+ return ensureWorktree({
18
+ identity: request.identity,
19
+ sourceBranch: request.sourceBranch,
20
+ source: request.source,
21
+ sourceCheckoutPath: request.sourceCheckoutPath,
22
+ }, {
23
+ executor: this.executor,
24
+ worktreeExists: async (path) => existsSync(path),
25
+ writeWorktreeSettings,
26
+ });
27
+ }
28
+ async remove(request) {
29
+ try {
30
+ return await removeWorktree({ identity: request.identity, sourceCheckoutPath: request.sourceCheckoutPath }, {
31
+ executor: this.executor,
32
+ worktreeExists: async (path) => existsSync(path),
33
+ });
34
+ }
35
+ catch (error) {
36
+ const message = error instanceof Error ? error.message : String(error);
37
+ return { status: 'failed', warning: message };
38
+ }
39
+ }
40
+ async exists(identity) {
41
+ return existsSync(deriveWorktreePath(identity));
42
+ }
43
+ async list() {
44
+ if (!existsSync(this.baseDirectory)) {
45
+ return [];
46
+ }
47
+ const directories = readdirSync(this.baseDirectory, { withFileTypes: true });
48
+ const entries = [];
49
+ for (const dirent of directories) {
50
+ if (!dirent.isDirectory())
51
+ continue;
52
+ const identity = parseWorktreeDirectoryName(dirent.name);
53
+ if (identity === null)
54
+ continue;
55
+ const path = createWorktreePath(join(this.baseDirectory, dirent.name));
56
+ try {
57
+ const stats = statSync(path);
58
+ entries.push({ identity, path, mtime: stats.mtime });
59
+ }
60
+ catch {
61
+ // ignore worktrees whose stat fails (transient FS errors, race with removal)
62
+ }
63
+ }
64
+ return entries;
65
+ }
66
+ }
67
+ //# sourceMappingURL=worktree.fileSystem.gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree.fileSystem.gateway.js","sourceRoot":"","sources":["../../../../../src/modules/worktree-management/interface-adapters/gateways/worktree.fileSystem.gateway.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { WorktreePath } from '../../../modules/worktree-management/entities/worktree/worktree.schema.js';
2
+ import type { WorktreeSettingsWriteResult } from '../../../modules/worktree-management/usecases/ensureWorktree.usecase.js';
3
+ export declare function writeWorktreeSettings(worktreePath: WorktreePath): Promise<WorktreeSettingsWriteResult>;
4
+ //# sourceMappingURL=worktreeSettingsWriter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktreeSettingsWriter.d.ts","sourceRoot":"","sources":["../../../../src/modules/worktree-management/services/worktreeSettingsWriter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oEAAoE,CAAC;AACvG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kEAAkE,CAAC;AAIpH,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,2BAA2B,CAAC,CAUtC"}
@@ -0,0 +1,16 @@
1
+ import { mkdirSync, writeFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ const settingsContent = JSON.stringify({ worktree: { bgIsolation: 'none' } }, null, 2);
4
+ export async function writeWorktreeSettings(worktreePath) {
5
+ try {
6
+ const claudeDirectory = join(worktreePath, '.claude');
7
+ mkdirSync(claudeDirectory, { recursive: true });
8
+ writeFileSync(join(claudeDirectory, 'settings.json'), settingsContent);
9
+ return { status: 'ok' };
10
+ }
11
+ catch (error) {
12
+ const message = error instanceof Error ? error.message : String(error);
13
+ return { status: 'failed', reason: message };
14
+ }
15
+ }
16
+ //# sourceMappingURL=worktreeSettingsWriter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktreeSettingsWriter.js","sourceRoot":"","sources":["../../../../src/modules/worktree-management/services/worktreeSettingsWriter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAEvF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,YAA0B;IAE1B,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QACtD,SAAS,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,EAAE,eAAe,CAAC,CAAC;QACvE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC/C,CAAC;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { EnsureResult, MrSource, WorktreeIdentity, WorktreePath } from '../../../modules/worktree-management/entities/worktree/worktree.schema.js';
2
+ import type { GitCommandExecutor } from '../../../modules/worktree-management/entities/gitCommand/gitCommand.gateway.js';
3
+ export interface EnsureWorktreeInput {
4
+ identity: WorktreeIdentity;
5
+ sourceBranch: string;
6
+ source: MrSource;
7
+ sourceCheckoutPath: string;
8
+ }
9
+ export interface WorktreeSettingsWriteResult {
10
+ status: 'ok' | 'failed';
11
+ reason?: string;
12
+ }
13
+ export interface EnsureWorktreeDependencies {
14
+ executor: GitCommandExecutor;
15
+ worktreeExists: (path: WorktreePath) => Promise<boolean>;
16
+ writeWorktreeSettings: (path: WorktreePath) => Promise<WorktreeSettingsWriteResult>;
17
+ }
18
+ export declare function ensureWorktree(input: EnsureWorktreeInput, deps: EnsureWorktreeDependencies): Promise<EnsureResult>;
19
+ //# sourceMappingURL=ensureWorktree.usecase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureWorktree.usecase.d.ts","sourceRoot":"","sources":["../../../../src/modules/worktree-management/usecases/ensureWorktree.usecase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAChB,YAAY,EACb,MAAM,oEAAoE,CAAC;AAC5E,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,yEAAyE,CAAC;AAEjF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,QAAQ,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,IAAI,GAAG,QAAQ,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,cAAc,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,qBAAqB,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,2BAA2B,CAAC,CAAC;CACrF;AAMD,wBAAsB,cAAc,CAClC,KAAK,EAAE,mBAAmB,EAC1B,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,YAAY,CAAC,CAyDvB"}
@@ -0,0 +1,53 @@
1
+ import { deriveFetchRef, deriveWorktreePath } from '../../../modules/worktree-management/entities/worktree/worktree.js';
2
+ function isFetchFailure(result) {
3
+ return result.exitCode !== 0;
4
+ }
5
+ export async function ensureWorktree(input, deps) {
6
+ const targetPath = deriveWorktreePath(input.identity);
7
+ const fetchRef = deriveFetchRef(input.source, input.sourceBranch, input.identity.mrNumber);
8
+ await deps.executor.execute({
9
+ kind: 'worktree-prune',
10
+ args: ['worktree', 'prune'],
11
+ cwd: input.sourceCheckoutPath,
12
+ });
13
+ const alreadyExists = await deps.worktreeExists(targetPath);
14
+ if (alreadyExists) {
15
+ const fetchInsideResult = await deps.executor.execute({
16
+ kind: 'fetch',
17
+ args: ['fetch', fetchRef.remote, fetchRef.refspec],
18
+ cwd: targetPath,
19
+ });
20
+ if (isFetchFailure(fetchInsideResult)) {
21
+ return { status: 'failed', reason: 'branch-not-found' };
22
+ }
23
+ const resetResult = await deps.executor.execute({
24
+ kind: 'reset-hard',
25
+ args: ['reset', '--hard', fetchRef.worktreeRef],
26
+ cwd: targetPath,
27
+ });
28
+ if (resetResult.exitCode !== 0) {
29
+ return { status: 'failed', reason: 'reset-failed' };
30
+ }
31
+ return { status: 'reused', path: targetPath };
32
+ }
33
+ const fetchResult = await deps.executor.execute({
34
+ kind: 'fetch',
35
+ args: ['fetch', fetchRef.remote, fetchRef.refspec],
36
+ cwd: input.sourceCheckoutPath,
37
+ });
38
+ if (isFetchFailure(fetchResult)) {
39
+ return { status: 'failed', reason: 'branch-not-found' };
40
+ }
41
+ const addResult = await deps.executor.execute({
42
+ kind: 'worktree-add',
43
+ args: ['worktree', 'add', targetPath, fetchRef.worktreeRef],
44
+ cwd: input.sourceCheckoutPath,
45
+ });
46
+ if (addResult.exitCode !== 0) {
47
+ return { status: 'failed', reason: 'worktree-add-failed' };
48
+ }
49
+ const settingsResult = await deps.writeWorktreeSettings(targetPath);
50
+ const settingsWarning = settingsResult.status === 'failed' ? settingsResult.reason ?? 'unknown' : null;
51
+ return { status: 'created', path: targetPath, settingsWarning };
52
+ }
53
+ //# sourceMappingURL=ensureWorktree.usecase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureWorktree.usecase.js","sourceRoot":"","sources":["../../../../src/modules/worktree-management/usecases/ensureWorktree.usecase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { RemoveResult, WorktreeIdentity, WorktreePath } from '../../../modules/worktree-management/entities/worktree/worktree.schema.js';
2
+ import type { GitCommandExecutor } from '../../../modules/worktree-management/entities/gitCommand/gitCommand.gateway.js';
3
+ export interface RemoveWorktreeInput {
4
+ identity: WorktreeIdentity;
5
+ sourceCheckoutPath: string;
6
+ }
7
+ export interface RemoveWorktreeDependencies {
8
+ executor: GitCommandExecutor;
9
+ worktreeExists: (path: WorktreePath) => Promise<boolean>;
10
+ }
11
+ export declare function removeWorktree(input: RemoveWorktreeInput, deps: RemoveWorktreeDependencies): Promise<RemoveResult>;
12
+ //# sourceMappingURL=removeWorktree.usecase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"removeWorktree.usecase.d.ts","sourceRoot":"","sources":["../../../../src/modules/worktree-management/usecases/removeWorktree.usecase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACb,MAAM,oEAAoE,CAAC;AAC5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yEAAyE,CAAC;AAElH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,cAAc,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1D;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,mBAAmB,EAC1B,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,YAAY,CAAC,CA4BvB"}
@@ -0,0 +1,26 @@
1
+ import { deriveWorktreePath } from '../../../modules/worktree-management/entities/worktree/worktree.js';
2
+ export async function removeWorktree(input, deps) {
3
+ const targetPath = deriveWorktreePath(input.identity);
4
+ await deps.executor.execute({
5
+ kind: 'worktree-prune',
6
+ args: ['worktree', 'prune'],
7
+ cwd: input.sourceCheckoutPath,
8
+ });
9
+ const exists = await deps.worktreeExists(targetPath);
10
+ if (!exists) {
11
+ return { status: 'absent' };
12
+ }
13
+ const removeResult = await deps.executor.execute({
14
+ kind: 'worktree-remove',
15
+ args: ['worktree', 'remove', '--force', targetPath],
16
+ cwd: input.sourceCheckoutPath,
17
+ });
18
+ if (removeResult.exitCode !== 0) {
19
+ return {
20
+ status: 'failed',
21
+ warning: removeResult.stderr || 'git worktree remove failed',
22
+ };
23
+ }
24
+ return { status: 'removed' };
25
+ }
26
+ //# sourceMappingURL=removeWorktree.usecase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"removeWorktree.usecase.js","sourceRoot":"","sources":["../../../../src/modules/worktree-management/usecases/removeWorktree.usecase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6DAA6D,CAAC;AAkBjG,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAA0B,EAC1B,IAAgC;IAEhC,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEtD,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC1B,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC;QAC3B,GAAG,EAAE,KAAK,CAAC,kBAAkB;KAC9B,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC/C,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC;QACnD,GAAG,EAAE,KAAK,CAAC,kBAAkB;KAC9B,CAAC,CAAC;IAEH,IAAI,YAAY,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO;YACL,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,YAAY,CAAC,MAAM,IAAI,4BAA4B;SAC7D,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { RemoveResult, WorktreeEntry, WorktreeIdentity } from '../../../modules/worktree-management/entities/worktree/worktree.schema.js';
2
+ import type { TrackedMr } from '../../../modules/tracking/entities/tracking/trackedMr.js';
3
+ export interface SweepTrackingGateway {
4
+ getById(projectPath: string, mrId: string): TrackedMr | null;
5
+ }
6
+ export interface SweepRepository {
7
+ localPath: string;
8
+ enabled: boolean;
9
+ }
10
+ export interface SweepStaleWorktreesDependencies {
11
+ listEntries: () => Promise<WorktreeEntry[]>;
12
+ removeWorktree: (identity: WorktreeIdentity) => Promise<RemoveResult>;
13
+ trackingGateway: SweepTrackingGateway;
14
+ getRepositories: () => SweepRepository[];
15
+ now: () => Date;
16
+ }
17
+ export interface SweepSummary {
18
+ inspected: number;
19
+ removed: number;
20
+ failures: number;
21
+ }
22
+ export declare function sweepStaleWorktrees(deps: SweepStaleWorktreesDependencies): Promise<SweepSummary>;
23
+ //# sourceMappingURL=sweepStaleWorktrees.usecase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sweepStaleWorktrees.usecase.d.ts","sourceRoot":"","sources":["../../../../src/modules/worktree-management/usecases/sweepStaleWorktrees.usecase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,gBAAgB,EACjB,MAAM,oEAAoE,CAAC;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mDAAmD,CAAC;AAKnF,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;CAC9D;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,+BAA+B;IAC9C,WAAW,EAAE,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC5C,cAAc,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACtE,eAAe,EAAE,oBAAoB,CAAC;IACtC,eAAe,EAAE,MAAM,eAAe,EAAE,CAAC;IACzC,GAAG,EAAE,MAAM,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAiCD,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,+BAA+B,GACpC,OAAO,CAAC,YAAY,CAAC,CAkCvB"}
@@ -0,0 +1,63 @@
1
+ const ONE_DAY_MS = 24 * 60 * 60 * 1000;
2
+ const STALE_THRESHOLD_MS = 7 * ONE_DAY_MS;
3
+ function buildTrackedMrId(identity) {
4
+ return `${identity.platform}-${identity.projectPath}-${identity.mrNumber}`;
5
+ }
6
+ function findTrackedMr(identity, trackingGateway, repositories) {
7
+ const mrId = buildTrackedMrId(identity);
8
+ for (const repository of repositories) {
9
+ if (!repository.enabled)
10
+ continue;
11
+ const tracked = trackingGateway.getById(repository.localPath, mrId);
12
+ if (tracked)
13
+ return tracked;
14
+ }
15
+ return null;
16
+ }
17
+ function isClosedOrMergedOverThreshold(tracked, now) {
18
+ if (tracked.state !== 'merged' && tracked.state !== 'closed')
19
+ return false;
20
+ const mergedAt = tracked.mergedAt;
21
+ if (mergedAt === null)
22
+ return true;
23
+ const mergedTime = Date.parse(mergedAt);
24
+ if (!Number.isFinite(mergedTime))
25
+ return true;
26
+ return now.getTime() - mergedTime > ONE_DAY_MS;
27
+ }
28
+ function isStale(entry, now) {
29
+ return now.getTime() - entry.mtime.getTime() > STALE_THRESHOLD_MS;
30
+ }
31
+ export async function sweepStaleWorktrees(deps) {
32
+ const entries = await deps.listEntries();
33
+ const repositories = deps.getRepositories();
34
+ const now = deps.now();
35
+ let removedCount = 0;
36
+ let failures = 0;
37
+ for (const entry of entries) {
38
+ const tracked = findTrackedMr(entry.identity, deps.trackingGateway, repositories);
39
+ const shouldRemove = tracked === null
40
+ || isClosedOrMergedOverThreshold(tracked, now)
41
+ || isStale(entry, now);
42
+ if (!shouldRemove)
43
+ continue;
44
+ try {
45
+ const result = await deps.removeWorktree(entry.identity);
46
+ if (result.status === 'removed') {
47
+ removedCount += 1;
48
+ }
49
+ else if (result.status === 'failed') {
50
+ failures += 1;
51
+ }
52
+ }
53
+ catch {
54
+ failures += 1;
55
+ }
56
+ }
57
+ return {
58
+ inspected: entries.length,
59
+ removed: removedCount,
60
+ failures,
61
+ };
62
+ }
63
+ //# sourceMappingURL=sweepStaleWorktrees.usecase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sweepStaleWorktrees.usecase.js","sourceRoot":"","sources":["../../../../src/modules/worktree-management/usecases/sweepStaleWorktrees.usecase.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export declare const PID_FILE_PATH: string;
2
2
  export declare const LOG_FILE_PATH: string;
3
3
  export declare const LOG_DIR: string;
4
+ export declare const WORKTREE_BASE_DIR: string;
4
5
  //# sourceMappingURL=daemonPaths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"daemonPaths.d.ts","sourceRoot":"","sources":["../../../src/shared/services/daemonPaths.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,aAAa,QAAqC,CAAC;AAChE,eAAO,MAAM,aAAa,QAA6C,CAAC;AACxE,eAAO,MAAM,OAAO,QAA2B,CAAC"}
1
+ {"version":3,"file":"daemonPaths.d.ts","sourceRoot":"","sources":["../../../src/shared/services/daemonPaths.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,aAAa,QAAqC,CAAC;AAChE,eAAO,MAAM,aAAa,QAA6C,CAAC;AACxE,eAAO,MAAM,OAAO,QAA2B,CAAC;AAEhD,eAAO,MAAM,iBAAiB,QAA8C,CAAC"}
@@ -4,4 +4,5 @@ const CONFIG_DIR = join(homedir(), '.config', 'reviewflow');
4
4
  export const PID_FILE_PATH = join(CONFIG_DIR, 'reviewflow.pid');
5
5
  export const LOG_FILE_PATH = join(CONFIG_DIR, 'logs', 'reviewflow.log');
6
6
  export const LOG_DIR = join(CONFIG_DIR, 'logs');
7
+ export const WORKTREE_BASE_DIR = join(homedir(), '.reviewflow', 'worktrees');
7
8
  //# sourceMappingURL=daemonPaths.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"daemonPaths.js","sourceRoot":"","sources":["../../../src/shared/services/daemonPaths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;AAE5D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;AAChE,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"daemonPaths.js","sourceRoot":"","sources":["../../../src/shared/services/daemonPaths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;AAE5D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;AAChE,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAEhD,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC"}
@@ -46,7 +46,7 @@ const baseInput = {
46
46
  systemPrompt: 'system',
47
47
  allowedTools: 'Read,Bash',
48
48
  disallowedTools: 'EnterPlanMode',
49
- permissionMode: 'bypassPermissions',
49
+ permissionMode: 'auto',
50
50
  },
51
51
  localPath: '/tmp/project',
52
52
  mergeRequestId: 'gitlab-owner/repo-42',
@@ -77,7 +77,7 @@ describe('SPEC-169: Migrate Claude invocation to --bg mode (acceptance)', () =>
77
77
  expect(result.status).toBe('completed');
78
78
  const calls = context.sessionGateway.dispatchCalls;
79
79
  expect(calls).toHaveLength(1);
80
- expect(calls[0]?.flags.permissionMode).toBe('bypassPermissions');
80
+ expect(calls[0]?.flags.permissionMode).toBe('auto');
81
81
  expect(JSON.stringify(calls[0])).not.toContain('-p ');
82
82
  expect(JSON.stringify(calls[0])).not.toContain('--print');
83
83
  });
@@ -1 +1 @@
1
- {"version":3,"file":"169-migrate-claude-invocation-to-bg-mode.acceptance.test.js","sourceRoot":"","sources":["../../../src/tests/acceptance/169-migrate-claude-invocation-to-bg-mode.acceptance.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oEAAoE,CAAC;AAExG,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAC;AAC5F,OAAO,EAAE,qBAAqB,EAAE,MAAM,uEAAuE,CAAC;AAC9G,OAAO,EAAE,cAAc,EAAE,MAAM,4EAA4E,CAAC;AAY5G,SAAS,aAAa;IACpB,MAAM,cAAc,GAAG,IAAI,wBAAwB,EAAE,CAAC;IACtD,MAAM,gBAAgB,GAAG,IAAI,uBAAuB,EAAE,CAAC;IACvD,MAAM,aAAa,GAAG,IAAI,uBAAuB,EAAE,CAAC;IACpD,MAAM,YAAY,GAAG,IAAI,uBAAuB,EAAE,CAAC;IACnD,MAAM,gBAAgB,GAAG,IAAI,2BAA2B,EAAE,CAAC;IAC3D,MAAM,WAAW,GAAG,IAAI,sBAAsB,EAAE,CAAC;IACjD,MAAM,IAAI,GAAmC;QAC3C,cAAc;QACd,gBAAgB;QAChB,aAAa;QACb,YAAY;QACZ,WAAW;QACX,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAAC;QAC3C,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;QACzB,cAAc,EAAE,MAAM;KACvB,CAAC;IACF,OAAO;QACL,cAAc;QACd,gBAAgB;QAChB,aAAa;QACb,YAAY;QACZ,gBAAgB;QAChB,WAAW;QACX,IAAI;KACL,CAAC;AACJ,CAAC;AAED,MAAM,SAAS,GAAG;IAChB,KAAK,EAAE,sBAAsB;IAC7B,OAAO,EAAE,QAAiB;IAC1B,MAAM,EAAE,kBAAkB;IAC1B,KAAK,EAAE;QACL,KAAK,EAAE,iBAAiB;QACxB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,QAAQ;QACtB,YAAY,EAAE,WAAW;QACzB,eAAe,EAAE,eAAe;QAChC,cAAc,EAAE,mBAA4B;KAC7C;IACD,SAAS,EAAE,cAAc;IACzB,cAAc,EAAE,sBAAsB;IACtC,kBAAkB,EAAE,EAAE;IACtB,OAAO,EAAE,CAAC;CACX,CAAC;AAEF,QAAQ,CAAC,+DAA+D,EAAE,GAAG,EAAE;IAC7E,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,EAAE,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACvE,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;YACxF,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;YAChC,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC1G,OAAO,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,SAAS,CAAC,KAAK,EAAE;gBAC3D,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,WAAW;gBACpB,MAAM,EAAE,IAAI;aACb,CAAC,CAAC;YACH,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC;gBAC9B,OAAO,EAAE,iBAAiB;gBAC1B,IAAI,EAAE,yDAAyD;aAChE,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/D,MAAM,EAAE,CAAC,iBAAiB,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;YAEhC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxC,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC;YACnD,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACtD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,+CAA+C,EAAE,GAAG,EAAE;QAC7D,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;YAC/F,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;YAChC,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC1G,OAAO,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,SAAS,CAAC,KAAK,EAAE;gBAC3D,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,WAAW;gBACpB,MAAM,EAAE,IAAI;aACb,CAAC,CAAC;YACH,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC;gBAC9B,OAAO,EAAE,kBAAkB;gBAC3B,IAAI,EAAE,yDAAyD;aAChE,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/D,MAAM,EAAE,CAAC,iBAAiB,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;YAEhC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxC,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAClD,CAAC;YACD,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAC/D,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,6CAA6C,EAAE,GAAG,EAAE;QAC3D,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;YACrF,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;YAChC,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC1G,OAAO,CAAC,cAAc,CAAC,uBAAuB,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;YAC3E,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC;gBAC9B,OAAO,EAAE,iBAAiB;gBAC1B,IAAI,EAAE,yDAAyD;aAChE,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/D,MAAM,EAAE,CAAC,iBAAiB,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;YAEhC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAC/D,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,4DAA4D,EAAE,GAAG,EAAE;QAC1E,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;YAChC,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC1G,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC,OAAO,EAAE,CAAC;YACvD,MAAM,IAAI,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAS,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAEnE,MAAM,UAAU,GAAG,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACvD,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YACxB,KAAK,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;YACxB,MAAM,EAAE,CAAC,wBAAwB,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;YAEhC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxC,CAAC;YACD,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAC/D,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAChE,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;YAChC,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC1G,OAAO,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,SAAS,CAAC,KAAK,EAAE;gBAC3D,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,WAAW;gBACpB,MAAM,EAAE,IAAI;aACb,CAAC,CAAC;YACH,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAEtC,MAAM,UAAU,GAAG,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/D,MAAM,EAAE,CAAC,iBAAiB,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;YAEhC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC/C,CAAC;YACD,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACxD,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;YAChC,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAAC,CAAC;YAEzG,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAEjE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBAC9B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACpC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;QACrD,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YACzE,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;YAChC,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;YAE3F,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC;gBACzC,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,uBAAuB,EAAE,OAAO,CAAC,gBAAgB;gBACjD,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAAC;aAC5C,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sDAAsD,EAAE,GAAG,EAAE;QACpE,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;YACpF,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;YAChC,OAAO,CAAC,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAEhD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAEjE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAC7D,CAAC;YACD,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,4DAA4D,EAAE,GAAG,EAAE;QAC1E,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;YACnF,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;YAChC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,wBAAwB,EAAE,CAAC,CAAC;YAEtF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;gBAChC,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,mBAAmB,EAAE,OAAO,CAAC,YAAY;gBACzC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAAC;aAC5C,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wDAAwD,EAAE,GAAG,EAAE;QACtE,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;YACnF,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;YAChC,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC1G,OAAO,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,SAAS,CAAC,KAAK,EAAE;gBAC3D,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,WAAW;gBACpB,MAAM,EAAE,IAAI;aACb,CAAC,CAAC;YACH,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC;gBAC9B,OAAO,EAAE,mBAAmB;gBAC5B,IAAI,EAAE,2DAA2D;aAClE,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,kBAAkB,CACnC,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,EACrC,OAAO,CAAC,IAAI,CACb,CAAC;YACF,MAAM,EAAE,CAAC,iBAAiB,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;YAEhC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"169-migrate-claude-invocation-to-bg-mode.acceptance.test.js","sourceRoot":"","sources":["../../../src/tests/acceptance/169-migrate-claude-invocation-to-bg-mode.acceptance.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * SPEC-170 — Pre-built Worktree Lifecycle Managed by ReviewFlow
3
+ *
4
+ * Spec: docs/specs/170-prebuilt-worktree-lifecycle.md
5
+ * Plan: docs/plans/170-prebuilt-worktree-lifecycle.plan.md
6
+ *
7
+ * Outer-loop acceptance test (SDD): scaffold mirrors the 11 scenarios
8
+ * defined in the spec's `## Scenarios` block. Each scenario starts as
9
+ * `it.todo` and is converted to an active test as its layer reaches
10
+ * GREEN per the plan's §7 implementation order.
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=170-prebuilt-worktree-lifecycle.acceptance.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"170-prebuilt-worktree-lifecycle.acceptance.test.d.ts","sourceRoot":"","sources":["../../../src/tests/acceptance/170-prebuilt-worktree-lifecycle.acceptance.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * SPEC-170 — Pre-built Worktree Lifecycle Managed by ReviewFlow
3
+ *
4
+ * Spec: docs/specs/170-prebuilt-worktree-lifecycle.md
5
+ * Plan: docs/plans/170-prebuilt-worktree-lifecycle.plan.md
6
+ *
7
+ * Outer-loop acceptance test (SDD): scaffold mirrors the 11 scenarios
8
+ * defined in the spec's `## Scenarios` block. Each scenario starts as
9
+ * `it.todo` and is converted to an active test as its layer reaches
10
+ * GREEN per the plan's §7 implementation order.
11
+ */
12
+ import { vi } from 'vitest';
13
+ vi.mock('@/frameworks/config/configLoader.js', () => ({
14
+ loadConfig: vi.fn(() => ({
15
+ queue: { maxConcurrent: 4, deduplicationWindowMs: 60000 },
16
+ })),
17
+ }));
18
+ import { describe, it, expect } from 'vitest';
19
+ import { removeWorktree } from '../../modules/worktree-management/usecases/removeWorktree.usecase.js';
20
+ import { StubGitCommandExecutor } from '../../tests/stubs/gitCommandExecutor.stub.js';
21
+ import { enqueueReview, initQueue } from '../../frameworks/queue/pQueueAdapter.js';
22
+ import { createStubLogger } from '../../tests/stubs/logger.stub.js';
23
+ import { buildMcpSystemPrompt } from '../../frameworks/claude/claudeInvoker.js';
24
+ const baseIdentity = {
25
+ platform: 'gitlab',
26
+ projectPath: 'test-org/test-project',
27
+ mrNumber: 42,
28
+ };
29
+ const sourceCheckoutPath = '/home/user/projects/test-project';
30
+ describe('Acceptance — SPEC-170: Pre-built Worktree Lifecycle', () => {
31
+ describe('Feature: Worktree ensure-or-reuse on review dispatch', () => {
32
+ it.todo('Scenario 1 — first review on new MR: webhook(open) + branch + worktree absent → create worktree + dispatch from worktree');
33
+ it.todo('Scenario 2 — followup on existing MR: webhook(push) + branch + worktree present → fast-forward + dispatch from worktree');
34
+ });
35
+ describe('Feature: Worktree cleanup on MR close', () => {
36
+ it('Scenario 3 — merge cleanup: removeWorktree on merged identity returns removed', async () => {
37
+ const executor = new StubGitCommandExecutor();
38
+ const worktreeExistsByPath = new Map();
39
+ const result = await removeWorktree({ identity: { ...baseIdentity }, sourceCheckoutPath }, {
40
+ executor,
41
+ worktreeExists: async (path) => {
42
+ if (!worktreeExistsByPath.has(path)) {
43
+ worktreeExistsByPath.set(path, true);
44
+ }
45
+ return worktreeExistsByPath.get(path) ?? false;
46
+ },
47
+ });
48
+ expect(result.status).toBe('removed');
49
+ expect(executor.callsOfKind('worktree-prune').length).toBeGreaterThan(0);
50
+ expect(executor.callsOfKind('worktree-remove').length).toBe(1);
51
+ });
52
+ it('Scenario 4 — close cleanup: removeWorktree on closed identity returns removed', async () => {
53
+ const executor = new StubGitCommandExecutor();
54
+ const result = await removeWorktree({
55
+ identity: { platform: 'github', projectPath: 'owner/repo', mrNumber: 7 },
56
+ sourceCheckoutPath,
57
+ }, {
58
+ executor,
59
+ worktreeExists: async () => true,
60
+ });
61
+ expect(result.status).toBe('removed');
62
+ });
63
+ it('Scenario 5 — merge with worktree already gone: returns absent, no remove call, no throw', async () => {
64
+ const executor = new StubGitCommandExecutor();
65
+ const result = await removeWorktree({ identity: { ...baseIdentity }, sourceCheckoutPath }, {
66
+ executor,
67
+ worktreeExists: async () => false,
68
+ });
69
+ expect(result.status).toBe('absent');
70
+ expect(executor.callsOfKind('worktree-remove').length).toBe(0);
71
+ });
72
+ });
73
+ describe('Feature: Daily safety-net sweep', () => {
74
+ it.todo('Scenario 6 — closed MR over 24h: worktree present + tracker state "merged 48h ago" → remove worktree');
75
+ it.todo('Scenario 7 — orphan: worktree present + no tracked MR → remove worktree + warning log');
76
+ it.todo('Scenario 8 — stale active MR: worktree mtime 8 days + tracker state "pending-review" → remove + warning + next review recreates fresh');
77
+ });
78
+ describe('Feature: GitHub cross-fork PR handling', () => {
79
+ it.todo('Scenario 9 — cross-fork PR: platform=github, head.repo=contributor/fork, source=patch-1 → fetch from fork URL + worktree add from refs/remotes/pr-N/head');
80
+ });
81
+ describe('Feature: Per-MR serialization of concurrent operations', () => {
82
+ it('Scenario 10 — concurrent followups on same MR: second waits for first; both complete in order', async () => {
83
+ initQueue(createStubLogger());
84
+ const events = [];
85
+ let releaseFirst = null;
86
+ const baseJob = {
87
+ id: 'gitlab:test-org/test-project:99',
88
+ platform: 'gitlab',
89
+ projectPath: 'test-org/test-project',
90
+ localPath: '/home/user/projects/test-project',
91
+ mrNumber: 99,
92
+ skill: 'review-front',
93
+ mrUrl: 'https://gitlab.com/test-org/test-project/-/merge_requests/99',
94
+ sourceBranch: 'feature/test',
95
+ targetBranch: 'main',
96
+ jobType: 'review',
97
+ };
98
+ const freshEnqueued = await enqueueReview(baseJob, async () => {
99
+ events.push('fresh:start');
100
+ await new Promise(resolve => {
101
+ releaseFirst = resolve;
102
+ });
103
+ events.push('fresh:end');
104
+ });
105
+ expect(freshEnqueued).toBe(true);
106
+ const followupJob = {
107
+ ...baseJob,
108
+ id: 'gitlab-followup:test-org/test-project:99',
109
+ jobType: 'followup',
110
+ };
111
+ const followupEnqueued = await enqueueReview(followupJob, async () => {
112
+ events.push('followup:start');
113
+ events.push('followup:end');
114
+ });
115
+ expect(followupEnqueued).toBe(true);
116
+ await new Promise(resolve => setTimeout(resolve, 20));
117
+ expect(events).toEqual(['fresh:start']);
118
+ releaseFirst();
119
+ await new Promise(resolve => setTimeout(resolve, 50));
120
+ expect(events).toEqual(['fresh:start', 'fresh:end', 'followup:start', 'followup:end']);
121
+ });
122
+ });
123
+ describe('Feature: System prompt no longer disclaims local state', () => {
124
+ it('Scenario 11 — system prompt contains no UNRELIABLE / FORBIDDEN / glab mr diff / gh pr diff substrings', () => {
125
+ const job = {
126
+ id: 'gitlab:test-org/test-project:42',
127
+ platform: 'gitlab',
128
+ projectPath: 'test-org/test-project',
129
+ localPath: '/home/user/projects/test-project',
130
+ mrNumber: 42,
131
+ skill: 'review-front',
132
+ mrUrl: 'https://gitlab.com/test-org/test-project/-/merge_requests/42',
133
+ sourceBranch: 'feat/x',
134
+ targetBranch: 'main',
135
+ jobType: 'review',
136
+ };
137
+ const prompt = buildMcpSystemPrompt(job);
138
+ expect(prompt).not.toContain('UNRELIABLE');
139
+ expect(prompt).not.toContain('FORBIDDEN');
140
+ expect(prompt).not.toContain('glab mr diff');
141
+ expect(prompt).not.toContain('gh pr diff');
142
+ });
143
+ });
144
+ });
145
+ //# sourceMappingURL=170-prebuilt-worktree-lifecycle.acceptance.test.js.map