@probelabs/visor 0.1.126 → 0.1.128

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 (178) hide show
  1. package/dist/ai-review-service.d.ts +2 -0
  2. package/dist/ai-review-service.d.ts.map +1 -1
  3. package/dist/docs/ai-configuration.md +23 -0
  4. package/dist/docs/commands.md +1 -1
  5. package/dist/docs/timeouts.md +1 -1
  6. package/dist/docs/workflows.md +30 -1
  7. package/dist/failure-condition-evaluator.d.ts.map +1 -1
  8. package/dist/generated/config-schema.d.ts +63 -9
  9. package/dist/generated/config-schema.d.ts.map +1 -1
  10. package/dist/generated/config-schema.json +67 -11
  11. package/dist/index.js +11476 -6945
  12. package/dist/liquid-extensions.d.ts.map +1 -1
  13. package/dist/output/traces/{run-2026-01-31T16-37-22-321Z.ndjson → run-2026-02-05T13-36-03-279Z.ndjson} +84 -84
  14. package/dist/output/traces/{run-2026-01-31T16-38-06-031Z.ndjson → run-2026-02-05T13-36-48-767Z.ndjson} +839 -1059
  15. package/dist/output/traces/run-2026-02-05T13-36-58-960Z.ndjson +17 -0
  16. package/dist/output/traces/run-2026-02-05T13-37-00-184Z.ndjson +205 -0
  17. package/dist/providers/ai-check-provider.d.ts +16 -0
  18. package/dist/providers/ai-check-provider.d.ts.map +1 -1
  19. package/dist/providers/command-check-provider.d.ts.map +1 -1
  20. package/dist/providers/custom-tool-executor.d.ts.map +1 -1
  21. package/dist/providers/http-client-provider.d.ts.map +1 -1
  22. package/dist/providers/mcp-check-provider.d.ts +3 -0
  23. package/dist/providers/mcp-check-provider.d.ts.map +1 -1
  24. package/dist/providers/mcp-custom-sse-server.d.ts +22 -2
  25. package/dist/providers/mcp-custom-sse-server.d.ts.map +1 -1
  26. package/dist/providers/memory-check-provider.d.ts.map +1 -1
  27. package/dist/providers/workflow-check-provider.d.ts.map +1 -1
  28. package/dist/providers/workflow-tool-executor.d.ts +2 -0
  29. package/dist/providers/workflow-tool-executor.d.ts.map +1 -1
  30. package/dist/sdk/check-provider-registry-OB5FEBJU.mjs +28 -0
  31. package/dist/sdk/check-provider-registry-UC2LPSB4.mjs +28 -0
  32. package/dist/sdk/{chunk-CNX7V5JK.mjs → chunk-25IC7KXZ.mjs} +2 -2
  33. package/dist/sdk/{chunk-YSN4G6CI.mjs → chunk-4HVFUUNB.mjs} +2 -2
  34. package/dist/sdk/{chunk-3OMWVM6J.mjs → chunk-B7BVQM5K.mjs} +2 -2
  35. package/dist/sdk/{chunk-5LI6T4O3.mjs → chunk-D55IQCUP.mjs} +71 -17
  36. package/dist/sdk/chunk-D55IQCUP.mjs.map +1 -0
  37. package/dist/sdk/{chunk-BOVFH3LI.mjs → chunk-EJN6Q4D3.mjs} +16 -7
  38. package/dist/sdk/chunk-EJN6Q4D3.mjs.map +1 -0
  39. package/dist/sdk/{chunk-WMJKH4XE.mjs → chunk-J7LXIPZS.mjs} +16 -1
  40. package/dist/sdk/{chunk-EXFGO4FX.mjs → chunk-KFKHU6CM.mjs} +2 -2
  41. package/dist/sdk/{chunk-7GUAFV6L.mjs → chunk-LMJSJQPP.mjs} +18 -13
  42. package/dist/sdk/chunk-LMJSJQPP.mjs.map +1 -0
  43. package/dist/sdk/{chunk-VW2GBXQT.mjs → chunk-N7IVCCGH.mjs} +3 -3
  44. package/dist/sdk/{chunk-O5EZDNYL.mjs → chunk-NCWIZVOT.mjs} +2 -2
  45. package/dist/sdk/{chunk-3NMLT3YS.mjs → chunk-P6YFV6N2.mjs} +3 -3
  46. package/dist/sdk/{chunk-HQL734ZI.mjs → chunk-QRXSDDYN.mjs} +3 -3
  47. package/dist/sdk/{chunk-J2QWVDXK.mjs → chunk-SIMCSNXO.mjs} +3 -3
  48. package/dist/sdk/{chunk-IHZOSIF4.mjs → chunk-UEWXVJ6C.mjs} +3 -3
  49. package/dist/sdk/{chunk-SWEEZ5D5.mjs → chunk-UKG5UP5U.mjs} +17 -83
  50. package/dist/sdk/chunk-UKG5UP5U.mjs.map +1 -0
  51. package/dist/sdk/chunk-UPKHRMUA.mjs +35108 -0
  52. package/dist/sdk/chunk-UPKHRMUA.mjs.map +1 -0
  53. package/dist/sdk/chunk-V7RIRPO7.mjs +35108 -0
  54. package/dist/sdk/chunk-V7RIRPO7.mjs.map +1 -0
  55. package/dist/sdk/{chunk-2CPMMNIX.mjs → chunk-VEROLBCD.mjs} +21 -65
  56. package/dist/sdk/{chunk-2CPMMNIX.mjs.map → chunk-VEROLBCD.mjs.map} +1 -1
  57. package/dist/sdk/{chunk-ZYAUYXSW.mjs → chunk-WVNQ56DO.mjs} +3 -3
  58. package/dist/sdk/{chunk-NAW3DB3I.mjs → chunk-XXAEN5KU.mjs} +3 -3
  59. package/dist/sdk/{chunk-S2RUE2RG.mjs → chunk-YCUWMIV5.mjs} +3 -3
  60. package/dist/sdk/command-executor-C4DGIQ4Q.mjs +14 -0
  61. package/dist/sdk/config-GYTBTHRZ.mjs +16 -0
  62. package/dist/sdk/config-merger-RKCZJQ44.mjs +10 -0
  63. package/dist/sdk/{event-bus-5BEVPQ6T.mjs → event-bus-XV2TOQFU.mjs} +2 -2
  64. package/dist/sdk/failure-condition-evaluator-KRFY4OLQ.mjs +17 -0
  65. package/dist/sdk/{git-repository-analyzer-HJC4MYW4.mjs → git-repository-analyzer-VO7OZMTM.mjs} +2 -2
  66. package/dist/sdk/{github-frontend-BZ4N3BFZ.mjs → github-frontend-UC326PMS.mjs} +11 -11
  67. package/dist/sdk/{host-NYWXLIFC.mjs → host-H7MKML2H.mjs} +5 -5
  68. package/dist/sdk/{liquid-extensions-DFDEBMUI.mjs → liquid-extensions-WJAC7QKG.mjs} +8 -7
  69. package/dist/sdk/memory-store-LPOZWQ5E.mjs +12 -0
  70. package/dist/sdk/{metrics-7PP3EJUH.mjs → metrics-CSBGJEWW.mjs} +4 -4
  71. package/dist/sdk/{ndjson-sink-B4V4NTAQ.mjs → ndjson-sink-JQ2INHTS.mjs} +2 -2
  72. package/dist/sdk/{prompt-state-EZYOUG75.mjs → prompt-state-X2WDGSEM.mjs} +5 -5
  73. package/dist/sdk/{renderer-schema-CKFB5NDB.mjs → renderer-schema-FRCLA6KH.mjs} +4 -4
  74. package/dist/sdk/routing-745DOEKR.mjs +24 -0
  75. package/dist/sdk/sdk.d.mts +65 -3
  76. package/dist/sdk/sdk.d.ts +65 -3
  77. package/dist/sdk/sdk.js +17945 -540
  78. package/dist/sdk/sdk.js.map +1 -1
  79. package/dist/sdk/sdk.mjs +107 -34
  80. package/dist/sdk/sdk.mjs.map +1 -1
  81. package/dist/sdk/session-registry-6PV6SGEJ.mjs +10 -0
  82. package/dist/sdk/{slack-frontend-JUT3TYVC.mjs → slack-frontend-UPYUYCUQ.mjs} +5 -5
  83. package/dist/sdk/{trace-helpers-VP6QYVBX.mjs → trace-helpers-LUCR52GY.mjs} +4 -4
  84. package/dist/sdk/tracer-init-XPRWKMZT.mjs +10 -0
  85. package/dist/sdk/workflow-check-provider-AA3VNYUY.mjs +28 -0
  86. package/dist/sdk/workflow-check-provider-LQNQZUN5.mjs +28 -0
  87. package/dist/sdk/workflow-registry-W7IEH7GK.mjs +12 -0
  88. package/dist/state-machine/states/routing.d.ts.map +1 -1
  89. package/dist/test-runner/index.d.ts +5 -0
  90. package/dist/test-runner/index.d.ts.map +1 -1
  91. package/dist/test-runner/validator.d.ts.map +1 -1
  92. package/dist/traces/{run-2026-01-31T16-37-22-321Z.ndjson → run-2026-02-05T13-36-03-279Z.ndjson} +84 -84
  93. package/dist/traces/{run-2026-01-31T16-38-06-031Z.ndjson → run-2026-02-05T13-36-48-767Z.ndjson} +839 -1059
  94. package/dist/traces/run-2026-02-05T13-36-58-960Z.ndjson +17 -0
  95. package/dist/traces/run-2026-02-05T13-37-00-184Z.ndjson +205 -0
  96. package/dist/types/config.d.ts +65 -3
  97. package/dist/types/config.d.ts.map +1 -1
  98. package/dist/utils/sandbox.d.ts.map +1 -1
  99. package/dist/utils/workspace-manager.d.ts +22 -2
  100. package/dist/utils/workspace-manager.d.ts.map +1 -1
  101. package/dist/utils/worktree-manager.d.ts +2 -1
  102. package/dist/utils/worktree-manager.d.ts.map +1 -1
  103. package/package.json +6 -7
  104. package/dist/sdk/check-provider-registry-3KI5RKXT.mjs +0 -28
  105. package/dist/sdk/check-provider-registry-IYILYY35.mjs +0 -28
  106. package/dist/sdk/chunk-5LI6T4O3.mjs.map +0 -1
  107. package/dist/sdk/chunk-7GUAFV6L.mjs.map +0 -1
  108. package/dist/sdk/chunk-A4PGHURG.mjs +0 -17667
  109. package/dist/sdk/chunk-A4PGHURG.mjs.map +0 -1
  110. package/dist/sdk/chunk-BOVFH3LI.mjs.map +0 -1
  111. package/dist/sdk/chunk-J6EVEXC2.mjs +0 -558
  112. package/dist/sdk/chunk-J6EVEXC2.mjs.map +0 -1
  113. package/dist/sdk/chunk-PJ7K5UFC.mjs +0 -17732
  114. package/dist/sdk/chunk-PJ7K5UFC.mjs.map +0 -1
  115. package/dist/sdk/chunk-PXFIALUH.mjs +0 -1458
  116. package/dist/sdk/chunk-PXFIALUH.mjs.map +0 -1
  117. package/dist/sdk/chunk-RTKJXNZS.mjs +0 -3591
  118. package/dist/sdk/chunk-RTKJXNZS.mjs.map +0 -1
  119. package/dist/sdk/chunk-SWEEZ5D5.mjs.map +0 -1
  120. package/dist/sdk/command-executor-Q7MHJKZJ.mjs +0 -14
  121. package/dist/sdk/config-5AUYQFHE.mjs +0 -16
  122. package/dist/sdk/config-6CUVEH7H.mjs +0 -16
  123. package/dist/sdk/config-merger-PX3WIT57.mjs +0 -10
  124. package/dist/sdk/failure-condition-evaluator-HB35XRLZ.mjs +0 -17
  125. package/dist/sdk/host-4MT3EW2I.mjs +0 -52
  126. package/dist/sdk/host-NYWXLIFC.mjs.map +0 -1
  127. package/dist/sdk/memory-store-RW5N2NGJ.mjs +0 -12
  128. package/dist/sdk/routing-6R42GXUO.mjs +0 -24
  129. package/dist/sdk/routing-7FXPULTO.mjs +0 -24
  130. package/dist/sdk/session-registry-4E6YRQ77.mjs +0 -10
  131. package/dist/sdk/slack-frontend-J442FJWZ.mjs +0 -793
  132. package/dist/sdk/slack-frontend-J442FJWZ.mjs.map +0 -1
  133. package/dist/sdk/tracer-init-GSLPPLCD.mjs +0 -10
  134. package/dist/sdk/workflow-check-provider-H3CUOLUD.mjs +0 -28
  135. package/dist/sdk/workflow-check-provider-YUNNF4KC.mjs +0 -28
  136. package/dist/sdk/workflow-check-provider-YUNNF4KC.mjs.map +0 -1
  137. package/dist/sdk/workflow-registry-6LZKCWHP.mjs +0 -12
  138. package/dist/sdk/workflow-registry-6LZKCWHP.mjs.map +0 -1
  139. package/dist/sdk/workflow-registry-KFWSDSLM.mjs +0 -12
  140. package/dist/sdk/workflow-registry-KFWSDSLM.mjs.map +0 -1
  141. /package/dist/sdk/{check-provider-registry-3KI5RKXT.mjs.map → check-provider-registry-OB5FEBJU.mjs.map} +0 -0
  142. /package/dist/sdk/{check-provider-registry-IYILYY35.mjs.map → check-provider-registry-UC2LPSB4.mjs.map} +0 -0
  143. /package/dist/sdk/{chunk-CNX7V5JK.mjs.map → chunk-25IC7KXZ.mjs.map} +0 -0
  144. /package/dist/sdk/{chunk-YSN4G6CI.mjs.map → chunk-4HVFUUNB.mjs.map} +0 -0
  145. /package/dist/sdk/{chunk-3OMWVM6J.mjs.map → chunk-B7BVQM5K.mjs.map} +0 -0
  146. /package/dist/sdk/{chunk-WMJKH4XE.mjs.map → chunk-J7LXIPZS.mjs.map} +0 -0
  147. /package/dist/sdk/{chunk-EXFGO4FX.mjs.map → chunk-KFKHU6CM.mjs.map} +0 -0
  148. /package/dist/sdk/{chunk-VW2GBXQT.mjs.map → chunk-N7IVCCGH.mjs.map} +0 -0
  149. /package/dist/sdk/{chunk-O5EZDNYL.mjs.map → chunk-NCWIZVOT.mjs.map} +0 -0
  150. /package/dist/sdk/{chunk-3NMLT3YS.mjs.map → chunk-P6YFV6N2.mjs.map} +0 -0
  151. /package/dist/sdk/{chunk-HQL734ZI.mjs.map → chunk-QRXSDDYN.mjs.map} +0 -0
  152. /package/dist/sdk/{chunk-J2QWVDXK.mjs.map → chunk-SIMCSNXO.mjs.map} +0 -0
  153. /package/dist/sdk/{chunk-IHZOSIF4.mjs.map → chunk-UEWXVJ6C.mjs.map} +0 -0
  154. /package/dist/sdk/{chunk-ZYAUYXSW.mjs.map → chunk-WVNQ56DO.mjs.map} +0 -0
  155. /package/dist/sdk/{chunk-NAW3DB3I.mjs.map → chunk-XXAEN5KU.mjs.map} +0 -0
  156. /package/dist/sdk/{chunk-S2RUE2RG.mjs.map → chunk-YCUWMIV5.mjs.map} +0 -0
  157. /package/dist/sdk/{command-executor-Q7MHJKZJ.mjs.map → command-executor-C4DGIQ4Q.mjs.map} +0 -0
  158. /package/dist/sdk/{config-5AUYQFHE.mjs.map → config-GYTBTHRZ.mjs.map} +0 -0
  159. /package/dist/sdk/{config-6CUVEH7H.mjs.map → config-merger-RKCZJQ44.mjs.map} +0 -0
  160. /package/dist/sdk/{event-bus-5BEVPQ6T.mjs.map → event-bus-XV2TOQFU.mjs.map} +0 -0
  161. /package/dist/sdk/{config-merger-PX3WIT57.mjs.map → failure-condition-evaluator-KRFY4OLQ.mjs.map} +0 -0
  162. /package/dist/sdk/{git-repository-analyzer-HJC4MYW4.mjs.map → git-repository-analyzer-VO7OZMTM.mjs.map} +0 -0
  163. /package/dist/sdk/{github-frontend-BZ4N3BFZ.mjs.map → github-frontend-UC326PMS.mjs.map} +0 -0
  164. /package/dist/sdk/{host-4MT3EW2I.mjs.map → host-H7MKML2H.mjs.map} +0 -0
  165. /package/dist/sdk/{failure-condition-evaluator-HB35XRLZ.mjs.map → liquid-extensions-WJAC7QKG.mjs.map} +0 -0
  166. /package/dist/sdk/{liquid-extensions-DFDEBMUI.mjs.map → memory-store-LPOZWQ5E.mjs.map} +0 -0
  167. /package/dist/sdk/{memory-store-RW5N2NGJ.mjs.map → metrics-CSBGJEWW.mjs.map} +0 -0
  168. /package/dist/sdk/{ndjson-sink-B4V4NTAQ.mjs.map → ndjson-sink-JQ2INHTS.mjs.map} +0 -0
  169. /package/dist/sdk/{metrics-7PP3EJUH.mjs.map → prompt-state-X2WDGSEM.mjs.map} +0 -0
  170. /package/dist/sdk/{renderer-schema-CKFB5NDB.mjs.map → renderer-schema-FRCLA6KH.mjs.map} +0 -0
  171. /package/dist/sdk/{prompt-state-EZYOUG75.mjs.map → routing-745DOEKR.mjs.map} +0 -0
  172. /package/dist/sdk/{routing-6R42GXUO.mjs.map → session-registry-6PV6SGEJ.mjs.map} +0 -0
  173. /package/dist/sdk/{slack-frontend-JUT3TYVC.mjs.map → slack-frontend-UPYUYCUQ.mjs.map} +0 -0
  174. /package/dist/sdk/{routing-7FXPULTO.mjs.map → trace-helpers-LUCR52GY.mjs.map} +0 -0
  175. /package/dist/sdk/{session-registry-4E6YRQ77.mjs.map → tracer-init-XPRWKMZT.mjs.map} +0 -0
  176. /package/dist/sdk/{trace-helpers-VP6QYVBX.mjs.map → workflow-check-provider-AA3VNYUY.mjs.map} +0 -0
  177. /package/dist/sdk/{tracer-init-GSLPPLCD.mjs.map → workflow-check-provider-LQNQZUN5.mjs.map} +0 -0
  178. /package/dist/sdk/{workflow-check-provider-H3CUOLUD.mjs.map → workflow-registry-W7IEH7GK.mjs.map} +0 -0
package/dist/sdk/sdk.mjs CHANGED
@@ -3,48 +3,48 @@ import {
3
3
  check_provider_registry_exports,
4
4
  init_check_provider_registry,
5
5
  init_runner
6
- } from "./chunk-PJ7K5UFC.mjs";
6
+ } from "./chunk-V7RIRPO7.mjs";
7
7
  import {
8
8
  generateHumanId,
9
9
  init_human_id
10
- } from "./chunk-EXFGO4FX.mjs";
11
- import "./chunk-NAW3DB3I.mjs";
10
+ } from "./chunk-KFKHU6CM.mjs";
11
+ import "./chunk-XXAEN5KU.mjs";
12
12
  import {
13
13
  commandExecutor,
14
14
  init_command_executor
15
- } from "./chunk-J2QWVDXK.mjs";
16
- import "./chunk-VW2GBXQT.mjs";
15
+ } from "./chunk-SIMCSNXO.mjs";
16
+ import "./chunk-N7IVCCGH.mjs";
17
17
  import {
18
18
  ConfigManager,
19
19
  init_config
20
- } from "./chunk-5LI6T4O3.mjs";
21
- import "./chunk-O5EZDNYL.mjs";
22
- import "./chunk-HQL734ZI.mjs";
20
+ } from "./chunk-D55IQCUP.mjs";
21
+ import "./chunk-NCWIZVOT.mjs";
22
+ import "./chunk-QRXSDDYN.mjs";
23
23
  import {
24
24
  ExecutionJournal,
25
25
  init_snapshot_store
26
- } from "./chunk-2CPMMNIX.mjs";
27
- import "./chunk-SWEEZ5D5.mjs";
28
- import "./chunk-BOVFH3LI.mjs";
29
- import "./chunk-ZYAUYXSW.mjs";
30
- import "./chunk-S2RUE2RG.mjs";
31
- import "./chunk-7GUAFV6L.mjs";
32
- import "./chunk-CNX7V5JK.mjs";
26
+ } from "./chunk-VEROLBCD.mjs";
27
+ import "./chunk-UKG5UP5U.mjs";
28
+ import "./chunk-WVNQ56DO.mjs";
29
+ import "./chunk-YCUWMIV5.mjs";
30
+ import "./chunk-LMJSJQPP.mjs";
31
+ import "./chunk-25IC7KXZ.mjs";
32
+ import "./chunk-EJN6Q4D3.mjs";
33
33
  import {
34
34
  MemoryStore,
35
35
  init_memory_store
36
- } from "./chunk-IHZOSIF4.mjs";
36
+ } from "./chunk-UEWXVJ6C.mjs";
37
37
  import {
38
38
  init_logger,
39
39
  logger
40
- } from "./chunk-3NMLT3YS.mjs";
41
- import "./chunk-YSN4G6CI.mjs";
42
- import "./chunk-3OMWVM6J.mjs";
40
+ } from "./chunk-P6YFV6N2.mjs";
41
+ import "./chunk-4HVFUUNB.mjs";
42
+ import "./chunk-B7BVQM5K.mjs";
43
43
  import {
44
44
  __esm,
45
45
  __export,
46
46
  __toCommonJS
47
- } from "./chunk-WMJKH4XE.mjs";
47
+ } from "./chunk-J7LXIPZS.mjs";
48
48
 
49
49
  // src/utils/workspace-manager.ts
50
50
  import * as fsp from "fs/promises";
@@ -73,6 +73,10 @@ var init_workspace_manager = __esm({
73
73
  projects = /* @__PURE__ */ new Map();
74
74
  cleanupHandlersRegistered = false;
75
75
  usedNames = /* @__PURE__ */ new Set();
76
+ // Reference counting to prevent premature cleanup
77
+ activeOperations = 0;
78
+ cleanupRequested = false;
79
+ cleanupResolvers = [];
76
80
  constructor(sessionId, originalPath, config) {
77
81
  this.sessionId = sessionId;
78
82
  this.originalPath = originalPath;
@@ -114,6 +118,39 @@ var init_workspace_manager = __esm({
114
118
  isEnabled() {
115
119
  return this.config.enabled;
116
120
  }
121
+ /**
122
+ * Acquire a reference to the workspace (prevents cleanup while held)
123
+ * Call release() when done with the operation.
124
+ */
125
+ acquire() {
126
+ this.activeOperations++;
127
+ logger.debug(
128
+ `[Workspace] Acquired reference (active: ${this.activeOperations}) for ${this.workspacePath}`
129
+ );
130
+ }
131
+ /**
132
+ * Release a reference to the workspace.
133
+ * If cleanup was requested and this was the last reference, cleanup will proceed.
134
+ */
135
+ release() {
136
+ this.activeOperations = Math.max(0, this.activeOperations - 1);
137
+ logger.debug(
138
+ `[Workspace] Released reference (active: ${this.activeOperations}) for ${this.workspacePath}`
139
+ );
140
+ if (this.cleanupRequested && this.activeOperations === 0) {
141
+ logger.debug(`[Workspace] All references released, proceeding with deferred cleanup`);
142
+ for (const resolve2 of this.cleanupResolvers) {
143
+ resolve2();
144
+ }
145
+ this.cleanupResolvers = [];
146
+ }
147
+ }
148
+ /**
149
+ * Get the number of active operations
150
+ */
151
+ getActiveOperations() {
152
+ return this.activeOperations;
153
+ }
117
154
  /**
118
155
  * Get the workspace path
119
156
  */
@@ -176,11 +213,18 @@ var init_workspace_manager = __esm({
176
213
  }
177
214
  /**
178
215
  * Add a project to the workspace (creates symlink to worktree)
216
+ * If the same repository + worktreePath combination already exists, returns the existing path.
179
217
  */
180
218
  async addProject(repository, worktreePath, description) {
181
219
  if (!this.initialized) {
182
220
  throw new Error("Workspace not initialized. Call initialize() first.");
183
221
  }
222
+ for (const [existingName, existingProject] of this.projects.entries()) {
223
+ if (existingProject.repository === repository && existingProject.worktreePath === worktreePath) {
224
+ logger.debug(`Reusing existing project: ${existingName} (${repository})`);
225
+ return existingProject.path;
226
+ }
227
+ }
184
228
  let projectName = sanitizePathComponent(description || this.extractRepoName(repository));
185
229
  projectName = this.getUniqueName(projectName);
186
230
  this.usedNames.add(projectName);
@@ -207,10 +251,37 @@ var init_workspace_manager = __esm({
207
251
  return Array.from(this.projects.values());
208
252
  }
209
253
  /**
210
- * Cleanup the workspace
254
+ * Cleanup the workspace.
255
+ * If there are active operations, waits for them to complete before cleaning up.
256
+ * @param timeout Maximum time to wait for active operations (default: 60s)
211
257
  */
212
- async cleanup() {
213
- logger.info(`Cleaning up workspace: ${this.workspacePath}`);
258
+ async cleanup(timeout = 6e4) {
259
+ logger.info(
260
+ `Cleaning up workspace: ${this.workspacePath} (active operations: ${this.activeOperations})`
261
+ );
262
+ if (this.activeOperations > 0) {
263
+ logger.info(
264
+ `[Workspace] Waiting for ${this.activeOperations} active operations to complete before cleanup`
265
+ );
266
+ this.cleanupRequested = true;
267
+ await Promise.race([
268
+ new Promise((resolve2) => {
269
+ if (this.activeOperations === 0) {
270
+ resolve2();
271
+ } else {
272
+ this.cleanupResolvers.push(resolve2);
273
+ }
274
+ }),
275
+ new Promise((resolve2) => {
276
+ setTimeout(() => {
277
+ logger.warn(
278
+ `[Workspace] Cleanup timeout after ${timeout}ms, proceeding anyway (${this.activeOperations} operations still active)`
279
+ );
280
+ resolve2();
281
+ }, timeout);
282
+ })
283
+ ]);
284
+ }
214
285
  try {
215
286
  if (this.mainProjectInfo) {
216
287
  const mainProjectPath = this.mainProjectInfo.mainProjectPath;
@@ -229,6 +300,8 @@ var init_workspace_manager = __esm({
229
300
  this.mainProjectInfo = null;
230
301
  this.projects.clear();
231
302
  this.usedNames.clear();
303
+ this.cleanupRequested = false;
304
+ this.cleanupResolvers = [];
232
305
  logger.info(`Workspace cleanup completed: ${this.sessionId}`);
233
306
  } catch (error) {
234
307
  logger.warn(`Failed to cleanup workspace: ${error}`);
@@ -528,12 +601,12 @@ var StateMachineExecutionEngine = class _StateMachineExecutionEngine {
528
601
  const timestamp = (/* @__PURE__ */ new Date()).toISOString();
529
602
  try {
530
603
  if (options.config?.memory) {
531
- const { MemoryStore: MemoryStore2 } = await import("./memory-store-RW5N2NGJ.mjs");
604
+ const { MemoryStore: MemoryStore2 } = await import("./memory-store-LPOZWQ5E.mjs");
532
605
  const memoryStore = MemoryStore2.getInstance(options.config.memory);
533
606
  await memoryStore.initialize();
534
607
  logger.debug("Memory store initialized");
535
608
  }
536
- const { GitRepositoryAnalyzer } = await import("./git-repository-analyzer-HJC4MYW4.mjs");
609
+ const { GitRepositoryAnalyzer } = await import("./git-repository-analyzer-VO7OZMTM.mjs");
537
610
  const gitAnalyzer = new GitRepositoryAnalyzer(options.workingDirectory);
538
611
  logger.info("Analyzing local git repository...");
539
612
  const repositoryInfo = await gitAnalyzer.analyzeRepository();
@@ -570,7 +643,7 @@ var StateMachineExecutionEngine = class _StateMachineExecutionEngine {
570
643
  try {
571
644
  const map = options?.webhookContext?.webhookData;
572
645
  if (map) {
573
- const { CheckProviderRegistry } = await import("./check-provider-registry-IYILYY35.mjs");
646
+ const { CheckProviderRegistry } = await import("./check-provider-registry-UC2LPSB4.mjs");
574
647
  const reg = CheckProviderRegistry.getInstance();
575
648
  const p = reg.getProvider("http_input");
576
649
  if (p && typeof p.setWebhookContext === "function") p.setWebhookContext(map);
@@ -683,7 +756,7 @@ var StateMachineExecutionEngine = class _StateMachineExecutionEngine {
683
756
  logger.info("[StateMachine] Using state machine engine");
684
757
  }
685
758
  if (!config) {
686
- const { ConfigManager: ConfigManager2 } = await import("./config-5AUYQFHE.mjs");
759
+ const { ConfigManager: ConfigManager2 } = await import("./config-GYTBTHRZ.mjs");
687
760
  const configManager = new ConfigManager2();
688
761
  config = await configManager.getDefaultConfig();
689
762
  logger.debug("[StateMachine] Using default configuration (no config provided)");
@@ -708,8 +781,8 @@ var StateMachineExecutionEngine = class _StateMachineExecutionEngine {
708
781
  let frontendsHost;
709
782
  if (Array.isArray(configWithTagFilter.frontends) && configWithTagFilter.frontends.length > 0) {
710
783
  try {
711
- const { EventBus } = await import("./event-bus-5BEVPQ6T.mjs");
712
- const { FrontendsHost } = await import("./host-4MT3EW2I.mjs");
784
+ const { EventBus } = await import("./event-bus-XV2TOQFU.mjs");
785
+ const { FrontendsHost } = await import("./host-H7MKML2H.mjs");
713
786
  const bus = new EventBus();
714
787
  context.eventBus = bus;
715
788
  frontendsHost = new FrontendsHost(bus, logger);
@@ -845,7 +918,7 @@ var StateMachineExecutionEngine = class _StateMachineExecutionEngine {
845
918
  logger.info("[StateMachine] Execution complete");
846
919
  }
847
920
  try {
848
- const { SessionRegistry } = await import("./session-registry-4E6YRQ77.mjs");
921
+ const { SessionRegistry } = await import("./session-registry-6PV6SGEJ.mjs");
849
922
  const sessionRegistry = SessionRegistry.getInstance();
850
923
  sessionRegistry.clearAllSessions();
851
924
  } catch (error) {
@@ -1035,10 +1108,10 @@ var StateMachineExecutionEngine = class _StateMachineExecutionEngine {
1035
1108
  * @returns Array of failure condition evaluation results
1036
1109
  */
1037
1110
  async evaluateFailureConditions(checkName, reviewSummary, config, previousOutputs, authorAssociation) {
1038
- const { FailureConditionEvaluator } = await import("./failure-condition-evaluator-HB35XRLZ.mjs");
1111
+ const { FailureConditionEvaluator } = await import("./failure-condition-evaluator-KRFY4OLQ.mjs");
1039
1112
  const evaluator = new FailureConditionEvaluator();
1040
- const { addEvent } = await import("./trace-helpers-VP6QYVBX.mjs");
1041
- const { addFailIfTriggered } = await import("./metrics-7PP3EJUH.mjs");
1113
+ const { addEvent } = await import("./trace-helpers-LUCR52GY.mjs");
1114
+ const { addFailIfTriggered } = await import("./metrics-CSBGJEWW.mjs");
1042
1115
  const checkConfig = config.checks?.[checkName];
1043
1116
  if (!checkConfig) {
1044
1117
  return [];
@@ -1140,7 +1213,7 @@ var StateMachineExecutionEngine = class _StateMachineExecutionEngine {
1140
1213
  */
1141
1214
  async getRepositoryStatus() {
1142
1215
  try {
1143
- const { GitRepositoryAnalyzer } = await import("./git-repository-analyzer-HJC4MYW4.mjs");
1216
+ const { GitRepositoryAnalyzer } = await import("./git-repository-analyzer-VO7OZMTM.mjs");
1144
1217
  const analyzer = new GitRepositoryAnalyzer(this.workingDirectory);
1145
1218
  const info = await analyzer.analyzeRepository();
1146
1219
  return {