@askexenow/exe-os 0.9.159 → 0.9.161

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 (221) hide show
  1. package/dist/{active-agent-XAA2YRRH.js → active-agent-SLC7NBGT.js} +2 -2
  2. package/dist/{active-agent-JCODH6ZT.js → active-agent-UKVJCFEF.js} +2 -2
  3. package/dist/{agentic-ontology-5EIAHTR4.js → agentic-ontology-F4B4DH7M.js} +1 -1
  4. package/dist/{backfill-metadata-2JEFIROE.js → backfill-metadata-SMFH4EJX.js} +3 -3
  5. package/dist/{behaviors-IFNDKKZG.js → behaviors-6CNOKKLR.js} +2 -2
  6. package/dist/bin/agentic-ontology-backfill.js +4 -4
  7. package/dist/bin/agentic-reflection-backfill.js +5 -5
  8. package/dist/bin/agentic-semantic-label.js +4 -4
  9. package/dist/bin/backfill-conversations.js +5 -5
  10. package/dist/bin/backfill-responses.js +5 -5
  11. package/dist/bin/backfill-vectors.js +6 -6
  12. package/dist/bin/bulk-sync-postgres.js +5 -5
  13. package/dist/bin/cleanup-stale-review-tasks.js +5 -5
  14. package/dist/bin/cli.js +13 -13
  15. package/dist/bin/customer-readiness.js +3 -3
  16. package/dist/bin/deferred-daemon-restart.js +102 -0
  17. package/dist/bin/exe-agent-config.js +1 -1
  18. package/dist/bin/exe-agent.js +7 -7
  19. package/dist/bin/exe-assign.js +7 -7
  20. package/dist/bin/exe-boot.js +12 -12
  21. package/dist/bin/exe-call.js +3 -3
  22. package/dist/bin/exe-cloud.js +3 -3
  23. package/dist/bin/exe-dispatch.js +5 -5
  24. package/dist/bin/exe-doctor.js +1 -1
  25. package/dist/bin/exe-export-behaviors.js +6 -6
  26. package/dist/bin/exe-forget.js +5 -5
  27. package/dist/bin/exe-gateway.js +5 -5
  28. package/dist/bin/exe-heartbeat.js +5 -5
  29. package/dist/bin/exe-kill.js +8 -8
  30. package/dist/bin/exe-launch-agent.js +24 -9
  31. package/dist/bin/exe-new-employee.js +5 -5
  32. package/dist/bin/exe-pending-messages.js +6 -6
  33. package/dist/bin/exe-pending-notifications.js +5 -5
  34. package/dist/bin/exe-pending-reviews.js +5 -5
  35. package/dist/bin/exe-rename.js +3 -3
  36. package/dist/bin/exe-review.js +7 -7
  37. package/dist/bin/exe-search.js +4 -4
  38. package/dist/bin/exe-session-cleanup.js +9 -9
  39. package/dist/bin/exe-settings.js +3 -3
  40. package/dist/bin/exe-start-codex.js +10 -10
  41. package/dist/bin/exe-start-opencode.js +7 -7
  42. package/dist/bin/exe-status.js +6 -6
  43. package/dist/bin/exe-team.js +2 -2
  44. package/dist/bin/git-sweep.js +5 -5
  45. package/dist/bin/graph-backfill.js +3 -3
  46. package/dist/bin/graph-export.js +4 -4
  47. package/dist/bin/install.js +70 -207
  48. package/dist/bin/intercom-check.js +4 -4
  49. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  50. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  51. package/dist/bin/scan-tasks.js +5 -5
  52. package/dist/bin/setup.js +1 -1
  53. package/dist/bin/shard-migrate.js +3 -3
  54. package/dist/{capacity-monitor-MSQGHO27.js → capacity-monitor-ORRMNHT5.js} +6 -6
  55. package/dist/{catchup-brief-TSMPWHXT.js → catchup-brief-MTPBB3KF.js} +7 -7
  56. package/dist/{chunk-VKCFXOWQ.js → chunk-2UO3QD7V.js} +1 -1
  57. package/dist/{chunk-KUEUXXO4.js → chunk-3U3UYYKE.js} +2 -2
  58. package/dist/{chunk-XFA26MHB.js → chunk-5G7BZIY3.js} +1 -1
  59. package/dist/{chunk-UHAED3MM.js → chunk-5OD3AFRW.js} +1 -1
  60. package/dist/{chunk-7WXL6XVN.js → chunk-5RWZNONS.js} +8 -8
  61. package/dist/{chunk-GP436PAK.js → chunk-72IIQLQ6.js} +1 -1
  62. package/dist/{chunk-HI5LPCAS.js → chunk-7OTFGJDW.js} +1 -1
  63. package/dist/{chunk-AGBFY64D.js → chunk-7RD4YGGJ.js} +1 -1
  64. package/dist/{chunk-BQMG77YQ.js → chunk-7SGJUQBZ.js} +1 -1
  65. package/dist/{chunk-SNTCGJAE.js → chunk-7X7HKWH7.js} +36 -15
  66. package/dist/{chunk-FVQ7BELN.js → chunk-A7HLWPKK.js} +2 -2
  67. package/dist/{chunk-37KXWPTL.js → chunk-A7SYUJ2W.js} +2 -2
  68. package/dist/{chunk-IKDK7NXN.js → chunk-BZYHF63H.js} +377 -30
  69. package/dist/{chunk-IJXYCSUR.js → chunk-CUQGNC3J.js} +2 -2
  70. package/dist/{chunk-GHB33FOB.js → chunk-D34YDPQA.js} +2 -2
  71. package/dist/{chunk-5HVWTVZI.js → chunk-DIRYKGUR.js} +3 -3
  72. package/dist/{chunk-CCOSYMVU.js → chunk-DQMGSEAJ.js} +1 -1
  73. package/dist/{chunk-PZWRXJBJ.js → chunk-E7HUZQ4W.js} +1 -1
  74. package/dist/{chunk-TLTQGQCX.js → chunk-FEP36D2I.js} +1 -1
  75. package/dist/{chunk-BOAP6EJD.js → chunk-FPBEJ2JV.js} +6 -6
  76. package/dist/{chunk-COUXA2IQ.js → chunk-FRH7EY2Z.js} +1 -1
  77. package/dist/{chunk-56N5BCXQ.js → chunk-G4FDG3LK.js} +3 -3
  78. package/dist/{chunk-ARTF7DMV.js → chunk-GFEXQ4NU.js} +2 -2
  79. package/dist/{chunk-CSTCUDVM.js → chunk-H3KFLVPW.js} +6 -6
  80. package/dist/{chunk-PQFTZDR4.js → chunk-HWVG6QXM.js} +1 -1
  81. package/dist/{chunk-SCZJGD2G.js → chunk-I3MRITK2.js} +1 -1
  82. package/dist/{chunk-H4FB7LB4.js → chunk-I67W2JMW.js} +1 -1
  83. package/dist/{chunk-NABY2RI6.js → chunk-IH6TK5HJ.js} +2 -2
  84. package/dist/{chunk-D5PHT3JX.js → chunk-J2Y7UEXH.js} +3 -3
  85. package/dist/{chunk-SI7P22A5.js → chunk-JKMM7UZH.js} +2 -2
  86. package/dist/{chunk-PWNIKVDA.js → chunk-KOJIL4NH.js} +1 -1
  87. package/dist/{chunk-NV3WVFZ2.js → chunk-KOO56JVC.js} +1 -1
  88. package/dist/{chunk-ACRIYPBC.js → chunk-KZ4AAXWM.js} +6 -6
  89. package/dist/{chunk-CQFBWHQT.js → chunk-LHLEFNFW.js} +1 -1
  90. package/dist/{chunk-2PI3WQ47.js → chunk-LJS2OZKR.js} +3 -3
  91. package/dist/{chunk-F6LDN5XB.js → chunk-MPCICOVG.js} +4 -4
  92. package/dist/{chunk-3J4AJLED.js → chunk-N27BYKRB.js} +5 -5
  93. package/dist/{chunk-VLQKYNIO.js → chunk-NOY424XX.js} +3 -3
  94. package/dist/{chunk-SPG7BS6Y.js → chunk-NP55D5Q6.js} +205 -105
  95. package/dist/{chunk-RUOLDPIR.js → chunk-O4HT7CKC.js} +1 -1
  96. package/dist/{chunk-SZERVMKQ.js → chunk-ODN7E7HJ.js} +1 -1
  97. package/dist/{chunk-TYOB34ZF.js → chunk-OSG4O5TU.js} +1 -1
  98. package/dist/{chunk-VUBQUWJH.js → chunk-PGXG2JUF.js} +1 -1
  99. package/dist/{chunk-3H4VU65X.js → chunk-PWMMIGVQ.js} +124 -1
  100. package/dist/{chunk-EWNH5O2J.js → chunk-QK5MFN77.js} +1 -1
  101. package/dist/{chunk-EEH5SNIW.js → chunk-S3R2FC6P.js} +3 -3
  102. package/dist/{chunk-OYQHH5SX.js → chunk-SARHW2CG.js} +109 -58
  103. package/dist/{chunk-2TKJQR7H.js → chunk-U2KFQTM5.js} +1 -1
  104. package/dist/{chunk-RSNIF5FB.js → chunk-UXEDBUVW.js} +5 -5
  105. package/dist/{chunk-7WZXLY52.js → chunk-WY2QFHBB.js} +1 -1
  106. package/dist/{chunk-VV6X2DRX.js → chunk-YL36L2SN.js} +1 -1
  107. package/dist/{chunk-RJTIEXYH.js → chunk-Z5OGXSXA.js} +2 -2
  108. package/dist/{chunk-5ICBFFSQ.js → chunk-Z734KCEG.js} +1 -1
  109. package/dist/{code-context-index-MPDSDOEL.js → code-context-index-B6VIWPSF.js} +3 -3
  110. package/dist/{conversation-wiki-populator-HVROKOEU.js → conversation-wiki-populator-YMNIDI4F.js} +1 -1
  111. package/dist/{crdt-sync-4PA3L6CQ.js → crdt-sync-6BT3YLUU.js} +1 -1
  112. package/dist/{crm-webhook-5RIOZV43.js → crm-webhook-YVGNLWJH.js} +2 -2
  113. package/dist/{cto-delegation-gate-WPYOYKCC.js → cto-delegation-gate-ACVGMP5V.js} +4 -4
  114. package/dist/{daemon-orchestration-WZ3ITBAJ.js → daemon-orchestration-47D3OQQV.js} +21 -7
  115. package/dist/{exe-drift-6U5ENBOQ.js → exe-drift-ZVZDRDN6.js} +2 -2
  116. package/dist/{exe-export-CJFBFOBQ.js → exe-export-E6SXUIOV.js} +4 -4
  117. package/dist/{exe-import-HWP2FOVB.js → exe-import-2ESJXCG6.js} +4 -4
  118. package/dist/{exe-key-S3Q3Q2LE.js → exe-key-FSNRXDEN.js} +1 -1
  119. package/dist/{fast-db-init-43JVJVVH.js → fast-db-init-FLMQJFDI.js} +1 -1
  120. package/dist/gateway/index.js +9 -9
  121. package/dist/{git-staleness-7PVIPSJZ.js → git-staleness-QSOOMGX3.js} +1 -1
  122. package/dist/{git-task-sweep-GXSLBPEQ.js → git-task-sweep-A4N5VNCJ.js} +5 -5
  123. package/dist/{global-procedures-3HLEPJTB.js → global-procedures-A2YYQL6Q.js} +2 -2
  124. package/dist/{graph-auto-extract-3TBVEMSM.js → graph-auto-extract-WKBJY3NQ.js} +1 -1
  125. package/dist/hooks/bug-report-worker.js +6 -6
  126. package/dist/hooks/codex-stop-task-finalizer.js +6 -6
  127. package/dist/hooks/commit-complete.js +35 -10
  128. package/dist/hooks/error-recall.js +5 -5
  129. package/dist/hooks/exe-heartbeat-hook.js +2 -2
  130. package/dist/hooks/ingest-worker.js +3 -3
  131. package/dist/hooks/ingest.js +5 -5
  132. package/dist/hooks/instructions-loaded.js +3 -3
  133. package/dist/hooks/notification.js +3 -3
  134. package/dist/hooks/post-compact.js +6 -6
  135. package/dist/hooks/post-tool-combined.js +5 -5
  136. package/dist/hooks/pre-compact.js +10 -10
  137. package/dist/hooks/pre-tool-use.js +10 -10
  138. package/dist/hooks/prompt-submit.js +16 -16
  139. package/dist/hooks/session-end.js +15 -15
  140. package/dist/hooks/session-start.js +6 -6
  141. package/dist/hooks/stop.js +13 -13
  142. package/dist/hooks/subagent-stop.js +6 -6
  143. package/dist/hooks/summary-worker.js +13 -13
  144. package/dist/index.js +14 -14
  145. package/dist/{installer-ZRARTRW6.js → installer-77L2ACSQ.js} +4 -4
  146. package/dist/{installer-BX3C5MT7.js → installer-IITLB3YS.js} +4 -4
  147. package/dist/{installer-STP2Z37F.js → installer-NZGIE6L4.js} +4 -4
  148. package/dist/lib/cloud-sync.js +3 -3
  149. package/dist/lib/consolidation.js +4 -4
  150. package/dist/lib/database.js +1 -1
  151. package/dist/lib/db-daemon-client.js +2 -2
  152. package/dist/lib/db.js +1 -1
  153. package/dist/lib/embedder.js +3 -3
  154. package/dist/lib/employee-templates.js +3 -3
  155. package/dist/lib/employees.js +1 -1
  156. package/dist/lib/exe-daemon-client.js +2 -2
  157. package/dist/lib/exe-daemon.js +79 -26
  158. package/dist/lib/hybrid-search.js +4 -4
  159. package/dist/lib/identity.js +1 -1
  160. package/dist/lib/messaging.js +5 -5
  161. package/dist/lib/reminders.js +2 -2
  162. package/dist/lib/schedules.js +4 -4
  163. package/dist/lib/skill-learning.js +3 -3
  164. package/dist/lib/store.js +3 -3
  165. package/dist/lib/task-router.js +2 -2
  166. package/dist/lib/tasks.js +5 -5
  167. package/dist/lib/tmux-routing.js +4 -4
  168. package/dist/lib/token-spend.js +2 -2
  169. package/dist/mcp/register-tools.js +46 -46
  170. package/dist/mcp/server.js +47 -47
  171. package/dist/mcp/tools/complete-reminder.js +3 -3
  172. package/dist/mcp/tools/create-reminder.js +3 -3
  173. package/dist/mcp/tools/create-task.js +7 -7
  174. package/dist/mcp/tools/deactivate-behavior.js +4 -4
  175. package/dist/mcp/tools/list-reminders.js +3 -3
  176. package/dist/mcp/tools/list-tasks.js +7 -7
  177. package/dist/mcp/tools/send-message.js +7 -7
  178. package/dist/mcp/tools/update-task.js +6 -6
  179. package/dist/{mcp-http-config-F7K3FSWG.js → mcp-http-config-GU7ANGPH.js} +2 -2
  180. package/dist/{memory-cards-B6I5ZGXM.js → memory-cards-MRF3JHTD.js} +1 -1
  181. package/dist/{memory-poisoning-defense-3ETR5HJJ.js → memory-poisoning-defense-UJ36FZ2U.js} +1 -1
  182. package/dist/{memory-queue-client-Z4Q3IX77.js → memory-queue-client-LFPZPPQA.js} +3 -3
  183. package/dist/{memory-reflection-B75N4BRO.js → memory-reflection-6QCSB2MQ.js} +1 -1
  184. package/dist/{notifications-WNSNHFH6.js → notifications-CSVHULU2.js} +4 -4
  185. package/dist/{orchestrator-KGIIN4BA.js → orchestrator-PWP2CALB.js} +6 -6
  186. package/dist/{plan-limits-LTAD6MZH.js → plan-limits-D3VGVCWX.js} +2 -2
  187. package/dist/{projection-worker-IEDLDFKB.js → projection-worker-QZCUNRFZ.js} +141 -2
  188. package/dist/{review-polling-MQ3AXSTB.js → review-polling-QH3X4ZGX.js} +5 -5
  189. package/dist/runtime/index.js +11 -11
  190. package/dist/{session-events-DUWUFNSD.js → session-events-4GDMLNBG.js} +5 -5
  191. package/dist/{session-kill-telemetry-SZPQAZS7.js → session-kill-telemetry-XNKGQYME.js} +2 -2
  192. package/dist/{session-scope-TU7M4FAA.js → session-scope-754VZARX.js} +4 -4
  193. package/dist/{setup-wizard-B5F7C765.js → setup-wizard-FBWZQGR4.js} +1 -1
  194. package/dist/{skill-refinement-RRSHVVV7.js → skill-refinement-65EE332E.js} +1 -1
  195. package/dist/{task-enforcement-6AAUCRFV.js → task-enforcement-Y4BZBB7O.js} +4 -4
  196. package/dist/{task-scope-3UOAF4QQ.js → task-scope-LMSSAAAY.js} +4 -4
  197. package/dist/{tasks-crud-NQLF7DVV.js → tasks-crud-GZLBSTH3.js} +4 -4
  198. package/dist/{tasks-review-K52CYJ3R.js → tasks-review-4MSMRTDM.js} +4 -4
  199. package/dist/{token-budget-6KUZD2BC.js → token-budget-6YGB6AVB.js} +1 -1
  200. package/dist/{tool-capability-index-4TT2VIQ2.js → tool-capability-index-6JJN6ZRC.js} +1 -1
  201. package/dist/{tool-telemetry-TOPP535O.js → tool-telemetry-SYTSDQBL.js} +1 -1
  202. package/dist/tui/App.js +17 -17
  203. package/dist/{tui-data-E3XA3HLZ.js → tui-data-XNWZBTZB.js} +4 -4
  204. package/dist/{wiki-client-NZR7RW4I.js → wiki-client-S6JKY7GG.js} +22 -1
  205. package/dist/{worker-gate-J5RRT27H.js → worker-gate-ULTQ3WTD.js} +1 -1
  206. package/dist/{workflow-engine-4U4H4V6K.js → workflow-engine-GKT7HTAK.js} +2 -2
  207. package/package.json +1 -1
  208. package/release-notes.json +142 -142
  209. /package/dist/{chunk-5UPBAAPS.js → chunk-2M3CULM3.js} +0 -0
  210. /package/dist/{chunk-PJI6UVFG.js → chunk-6IUZZMWD.js} +0 -0
  211. /package/dist/{chunk-33KYUOK2.js → chunk-6NSFB3JH.js} +0 -0
  212. /package/dist/{chunk-XMYY65PG.js → chunk-ESRI7MFI.js} +0 -0
  213. /package/dist/{chunk-JTS3IDOY.js → chunk-JYETM4KT.js} +0 -0
  214. /package/dist/{chunk-MJSWLLSM.js → chunk-KVXP2W2N.js} +0 -0
  215. /package/dist/{chunk-DHNTMNKR.js → chunk-MGRHSBXO.js} +0 -0
  216. /package/dist/{chunk-JC7GZZVA.js → chunk-X4X3J6FE.js} +0 -0
  217. /package/dist/{chunk-NGVIZCGB.js → chunk-ZKALIEHB.js} +0 -0
  218. /package/dist/{core-memory-TFPUGGWO.js → core-memory-EXKPFVIR.js} +0 -0
  219. /package/dist/{entity-boost-B7IGG24X.js → entity-boost-GHFPE6A2.js} +0 -0
  220. /package/dist/{message-queue-client-EMQYHDBK.js → message-queue-client-CHRQYBH5.js} +0 -0
  221. /package/dist/{wiki-acl-JDBEB5GL.js → wiki-acl-VC237WGO.js} +0 -0
@@ -202,8 +202,131 @@ function requestRestart(reason, opts) {
202
202
  releaseLock();
203
203
  }
204
204
  }
205
+ function killOrphanedDaemons() {
206
+ try {
207
+ const pids = execSync("pgrep -f 'exe-daemon.js' 2>/dev/null || true", { encoding: "utf8", timeout: 5e3 }).trim().split("\n").filter(Boolean).map(Number).filter((n) => !isNaN(n) && n !== process.pid);
208
+ if (pids.length === 0) return 0;
209
+ for (const p of pids) {
210
+ try {
211
+ process.kill(p, "SIGTERM");
212
+ } catch {
213
+ }
214
+ }
215
+ try {
216
+ execSync("sleep 1");
217
+ } catch {
218
+ }
219
+ for (const p of pids) {
220
+ try {
221
+ process.kill(p, 0);
222
+ process.kill(p, "SIGKILL");
223
+ } catch {
224
+ }
225
+ }
226
+ process.stderr.write(`[restart-orchestrator] killed ${pids.length} orphaned daemon(s)
227
+ `);
228
+ logRestart({ event: "orphan_kill", count: pids.length, pids });
229
+ return pids.length;
230
+ } catch {
231
+ return 0;
232
+ }
233
+ }
234
+ function killOrphanedBackfill() {
235
+ try {
236
+ const pids = execSync("pgrep -f 'backfill-vectors.js' 2>/dev/null || true", { encoding: "utf8", timeout: 5e3 }).trim().split("\n").filter(Boolean).map(Number).filter((n) => !isNaN(n) && n !== process.pid);
237
+ for (const p of pids) {
238
+ try {
239
+ process.kill(p, "SIGKILL");
240
+ } catch {
241
+ }
242
+ }
243
+ if (pids.length > 0) {
244
+ process.stderr.write(`[restart-orchestrator] killed ${pids.length} orphaned backfill worker(s)
245
+ `);
246
+ logRestart({ event: "backfill_orphan_kill", count: pids.length });
247
+ }
248
+ return pids.length;
249
+ } catch {
250
+ return 0;
251
+ }
252
+ }
253
+ function cleanWorkerPidFiles() {
254
+ try {
255
+ if (!existsSync(WORKER_PIDS_DIR)) return;
256
+ for (const f of readdirSync(WORKER_PIDS_DIR)) {
257
+ try {
258
+ unlinkSync(path.join(WORKER_PIDS_DIR, f));
259
+ } catch {
260
+ }
261
+ }
262
+ } catch {
263
+ }
264
+ }
265
+ function updateMcpVersionMarker() {
266
+ try {
267
+ writeFileSync(MCP_VERSION_PATH, `deploy-${Date.now()}`);
268
+ process.stderr.write("[restart-orchestrator] MCP version marker updated \u2014 servers will hot-reload within 10s\n");
269
+ logRestart({ event: "mcp_marker_updated" });
270
+ } catch {
271
+ }
272
+ }
273
+ function requestDeployRestart(reason) {
274
+ const deployReason = reason ?? "deploy";
275
+ if (!acquireLock()) {
276
+ process.stderr.write("[restart-orchestrator] Lock held \u2014 waiting briefly for deploy\n");
277
+ try {
278
+ execSync("sleep 1");
279
+ } catch {
280
+ }
281
+ try {
282
+ unlinkSync(SPAWN_LOCK_PATH);
283
+ } catch {
284
+ }
285
+ if (!acquireLock()) {
286
+ logRestart({ event: "deploy_skipped", reason: deployReason, skip_reason: "lock_held" });
287
+ return { ok: false, skipped: "Another process is already restarting daemon" };
288
+ }
289
+ }
290
+ try {
291
+ try {
292
+ writeFileSync(RESTART_MARKER, String(Date.now()));
293
+ } catch {
294
+ }
295
+ logRestart({ event: "deploy_restart_initiated", reason: deployReason });
296
+ process.stderr.write(`[restart-orchestrator] Deploy restart \u2014 reason: ${deployReason}
297
+ `);
298
+ const pid = readDaemonPid();
299
+ if (pid !== null && isProcessAlive(pid)) killDaemonGracefully(pid);
300
+ try {
301
+ unlinkSync(PID_PATH);
302
+ } catch {
303
+ }
304
+ try {
305
+ unlinkSync(PID_PATH + ".lock");
306
+ } catch {
307
+ }
308
+ const orphansKilled = killOrphanedDaemons();
309
+ const backfillKilled = killOrphanedBackfill();
310
+ updateMcpVersionMarker();
311
+ cleanWorkerPidFiles();
312
+ try {
313
+ unlinkSync(SOCKET_PATH);
314
+ } catch {
315
+ }
316
+ try {
317
+ execSync("sleep 0.5");
318
+ } catch {
319
+ }
320
+ logRestart({ event: "deploy_restart_complete", reason: deployReason, killed_pid: pid, orphans_killed: orphansKilled, backfill_killed: backfillKilled });
321
+ return { ok: true, pid, reason: deployReason, orphansKilled, backfillKilled };
322
+ } finally {
323
+ releaseLock();
324
+ }
325
+ }
205
326
 
206
327
  export {
207
328
  logRestartEvent,
208
- requestRestart
329
+ requestRestart,
330
+ updateMcpVersionMarker,
331
+ requestDeployRestart
209
332
  };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isCoordinatorRole
3
- } from "./chunk-JTS3IDOY.js";
3
+ } from "./chunk-JYETM4KT.js";
4
4
 
5
5
  // src/lib/task-router.ts
6
6
  import { randomUUID } from "crypto";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  routeTask
3
- } from "./chunk-EWNH5O2J.js";
3
+ } from "./chunk-QK5MFN77.js";
4
4
  import {
5
5
  createTaskCore,
6
6
  employeeSessionName,
@@ -9,11 +9,11 @@ import {
9
9
  isEmployeeAlive,
10
10
  sessionScopeFilter,
11
11
  updateTaskStatus
12
- } from "./chunk-SNTCGJAE.js";
12
+ } from "./chunk-7X7HKWH7.js";
13
13
  import {
14
14
  DEFAULT_COORDINATOR_TEMPLATE_NAME,
15
15
  getCoordinatorName
16
- } from "./chunk-JTS3IDOY.js";
16
+ } from "./chunk-JYETM4KT.js";
17
17
 
18
18
  // src/runtime/orchestrator.ts
19
19
  var STALE_THRESHOLD_MS = 2 * 60 * 60 * 1e3;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isCrdtSyncEnabled
3
- } from "./chunk-MJSWLLSM.js";
3
+ } from "./chunk-KVXP2W2N.js";
4
4
  import {
5
5
  decryptSyncBlob,
6
6
  encryptSyncBlob,
@@ -12,7 +12,7 @@ import {
12
12
  loadEmployees,
13
13
  registerBinSymlinks,
14
14
  saveEmployees
15
- } from "./chunk-JTS3IDOY.js";
15
+ } from "./chunk-JYETM4KT.js";
16
16
  import {
17
17
  loadDeviceId
18
18
  } from "./chunk-MVMMULOJ.js";
@@ -51,6 +51,10 @@ function decompress(input) {
51
51
  function sqlSafe(v) {
52
52
  return v === void 0 ? null : v;
53
53
  }
54
+ function sqlSafeRequired(v, fallback) {
55
+ if (v === void 0 || v === null || v === "") return fallback;
56
+ return v;
57
+ }
54
58
  function logError(msg) {
55
59
  try {
56
60
  const logPath = path.join(homedir(), ".exe-os", "workers.log");
@@ -485,7 +489,7 @@ async function cloudSync(config) {
485
489
  let pulled = 0;
486
490
  if (pullResult.records.length > 0) {
487
491
  if (isCrdtSyncEnabled()) {
488
- const { initCrdtDoc, importExistingMemories, readAllMemories } = await import("./crdt-sync-4PA3L6CQ.js");
492
+ const { initCrdtDoc, importExistingMemories, readAllMemories } = await import("./crdt-sync-6BT3YLUU.js");
489
493
  initCrdtDoc();
490
494
  importExistingMemories(
491
495
  pullResult.records.map((rec) => ({
@@ -589,7 +593,14 @@ async function cloudSync(config) {
589
593
  } catch (e) {
590
594
  process.stderr.write("[cloud-sync] conflict detection query failed: " + (e instanceof Error ? e.message : String(e)) + "\n");
591
595
  }
592
- const stmts = pullResult.records.map((rec) => ({
596
+ const localDeviceId = loadDeviceId();
597
+ const deviceFilteredRecords = pullResult.records.filter((rec) => {
598
+ const authorDevice = rec.author_device_id;
599
+ if (!authorDevice) return true;
600
+ if (String(authorDevice) === localDeviceId) return true;
601
+ return true;
602
+ });
603
+ const stmts = deviceFilteredRecords.map((rec) => ({
593
604
  sql: `INSERT INTO memories
594
605
  (id, agent_id, agent_role, session_id, timestamp,
595
606
  tool_name, project_name, has_error, raw_text, version,
@@ -616,12 +627,12 @@ async function cloudSync(config) {
616
627
  strength = COALESCE(memories.strength, excluded.strength)`,
617
628
  args: [
618
629
  sqlSafe(rec.id),
619
- sqlSafe(rec.agent_id),
620
- sqlSafe(rec.agent_role),
621
- sqlSafe(rec.session_id),
622
- sqlSafe(rec.timestamp),
623
- sqlSafe(rec.tool_name),
624
- sqlSafe(rec.project_name),
630
+ sqlSafeRequired(rec.agent_id, "unknown"),
631
+ sqlSafeRequired(rec.agent_role, "employee"),
632
+ sqlSafeRequired(rec.session_id, "cloud-sync"),
633
+ sqlSafeRequired(rec.timestamp, (/* @__PURE__ */ new Date()).toISOString()),
634
+ sqlSafeRequired(rec.tool_name, "cloud_sync"),
635
+ sqlSafeRequired(rec.project_name, "unknown"),
625
636
  sqlSafe(rec.has_error ?? 0),
626
637
  sqlSafe(rec.raw_text ?? ""),
627
638
  sqlSafe(rec.version ?? 0),
@@ -631,8 +642,31 @@ async function cloudSync(config) {
631
642
  sqlSafe(rec.session_scope)
632
643
  ]
633
644
  }));
634
- await client.batch(stmts, "write");
635
- pulled = pullResult.records.length;
645
+ let syncErrors = 0;
646
+ const BATCH_SIZE = 100;
647
+ for (let i = 0; i < stmts.length; i += BATCH_SIZE) {
648
+ const batch = stmts.slice(i, i + BATCH_SIZE);
649
+ try {
650
+ await client.batch(batch, "write");
651
+ } catch (batchErr) {
652
+ for (const stmt of batch) {
653
+ try {
654
+ await client.execute(stmt);
655
+ } catch (recErr) {
656
+ syncErrors++;
657
+ process.stderr.write(
658
+ `[cloud-sync] Skipped bad record (${recErr instanceof Error ? recErr.message : String(recErr)})
659
+ `
660
+ );
661
+ }
662
+ }
663
+ }
664
+ }
665
+ pulled = stmts.length - syncErrors;
666
+ if (syncErrors > 0) {
667
+ process.stderr.write(`[cloud-sync] Pull completed with ${syncErrors} skipped record(s)
668
+ `);
669
+ }
636
670
  }
637
671
  }
638
672
  if (pulled > 0) {
@@ -1246,31 +1280,41 @@ async function cloudPullGlobalProcedures(config) {
1246
1280
  );
1247
1281
  if (!remoteProcs || remoteProcs.length === 0) return { pulled: 0 };
1248
1282
  const client = getClient();
1249
- const stmts = remoteProcs.map((p) => ({
1250
- sql: `INSERT INTO company_procedures
1251
- (id, title, content, priority, domain, active, created_at, updated_at)
1252
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)
1253
- ON CONFLICT(id) DO UPDATE SET
1254
- title = excluded.title,
1255
- content = excluded.content,
1256
- priority = excluded.priority,
1257
- domain = excluded.domain,
1258
- active = excluded.active,
1259
- updated_at = excluded.updated_at
1260
- WHERE excluded.updated_at > company_procedures.updated_at`,
1261
- args: [
1262
- sqlSafe(p.id),
1263
- sqlSafe(p.title),
1264
- sqlSafe(p.content),
1265
- sqlSafe(p.priority ?? "p0"),
1266
- sqlSafe(p.domain),
1267
- sqlSafe(p.active ?? 1),
1268
- sqlSafe(p.created_at),
1269
- sqlSafe(p.updated_at)
1270
- ]
1271
- }));
1272
- await client.batch(stmts, "write");
1273
- return { pulled: remoteProcs.length };
1283
+ let pulled = 0;
1284
+ for (const p of remoteProcs) {
1285
+ try {
1286
+ await client.execute({
1287
+ sql: `INSERT INTO company_procedures
1288
+ (id, title, content, priority, domain, active, created_at, updated_at)
1289
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
1290
+ ON CONFLICT(id) DO UPDATE SET
1291
+ title = excluded.title,
1292
+ content = excluded.content,
1293
+ priority = excluded.priority,
1294
+ domain = excluded.domain,
1295
+ active = excluded.active,
1296
+ updated_at = excluded.updated_at
1297
+ WHERE excluded.updated_at > company_procedures.updated_at`,
1298
+ args: [
1299
+ sqlSafe(p.id),
1300
+ sqlSafeRequired(p.title, "(untitled)"),
1301
+ sqlSafeRequired(p.content, ""),
1302
+ sqlSafe(p.priority ?? "p0"),
1303
+ sqlSafe(p.domain),
1304
+ sqlSafe(p.active ?? 1),
1305
+ sqlSafe(p.created_at ?? (/* @__PURE__ */ new Date()).toISOString()),
1306
+ sqlSafe(p.updated_at ?? (/* @__PURE__ */ new Date()).toISOString())
1307
+ ]
1308
+ });
1309
+ pulled++;
1310
+ } catch (e) {
1311
+ process.stderr.write(
1312
+ `[cloud-sync] Skipping bad company_procedure record ${String(p.id).slice(0, 8)}: ${e instanceof Error ? e.message : String(e)}
1313
+ `
1314
+ );
1315
+ }
1316
+ }
1317
+ return { pulled };
1274
1318
  }
1275
1319
  async function cloudPushBehaviors(config) {
1276
1320
  const client = getClient();
@@ -1293,27 +1337,34 @@ async function cloudPullBehaviors(config) {
1293
1337
  const client = getClient();
1294
1338
  let pulled = 0;
1295
1339
  for (const behavior of remoteBehaviors) {
1296
- await client.execute({
1297
- sql: `INSERT INTO behaviors
1298
- (id, agent_id, project_name, domain, content, active, priority, created_at, updated_at)
1299
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
1300
- ON CONFLICT(id) DO UPDATE SET
1301
- active = excluded.active,
1302
- priority = excluded.priority,
1303
- updated_at = excluded.updated_at`,
1304
- args: [
1305
- sqlSafe(behavior.id),
1306
- sqlSafe(behavior.agent_id),
1307
- sqlSafe(behavior.project_name),
1308
- sqlSafe(behavior.domain),
1309
- sqlSafe(behavior.content),
1310
- sqlSafe(behavior.active ?? 1),
1311
- sqlSafe(behavior.priority ?? "p1"),
1312
- sqlSafe(behavior.created_at),
1313
- sqlSafe(behavior.updated_at)
1314
- ]
1315
- });
1316
- pulled++;
1340
+ try {
1341
+ await client.execute({
1342
+ sql: `INSERT INTO behaviors
1343
+ (id, agent_id, project_name, domain, content, active, priority, created_at, updated_at)
1344
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
1345
+ ON CONFLICT(id) DO UPDATE SET
1346
+ active = excluded.active,
1347
+ priority = excluded.priority,
1348
+ updated_at = excluded.updated_at`,
1349
+ args: [
1350
+ sqlSafe(behavior.id),
1351
+ sqlSafeRequired(behavior.agent_id, "unknown"),
1352
+ sqlSafe(behavior.project_name),
1353
+ sqlSafe(behavior.domain ?? "general"),
1354
+ sqlSafeRequired(behavior.content, "(empty)"),
1355
+ sqlSafe(behavior.active ?? 1),
1356
+ sqlSafe(behavior.priority ?? "p1"),
1357
+ sqlSafe(behavior.created_at ?? (/* @__PURE__ */ new Date()).toISOString()),
1358
+ sqlSafe(behavior.updated_at ?? (/* @__PURE__ */ new Date()).toISOString())
1359
+ ]
1360
+ });
1361
+ pulled++;
1362
+ } catch (e) {
1363
+ process.stderr.write(
1364
+ `[cloud-sync] Skipped bad behavior record: ${e instanceof Error ? e.message : String(e)}
1365
+ `
1366
+ );
1367
+ }
1317
1368
  }
1318
1369
  return { pulled };
1319
1370
  }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  loadEmployeesSync
3
- } from "./chunk-JTS3IDOY.js";
3
+ } from "./chunk-JYETM4KT.js";
4
4
 
5
5
  // src/adapters/mcp-http-config.ts
6
6
  import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
@@ -1,3 +1,6 @@
1
+ import {
2
+ SignalAdapter
3
+ } from "./chunk-RJT7H2KR.js";
1
4
  import {
2
5
  TelegramAdapter
3
6
  } from "./chunk-Q3V7K4ME.js";
@@ -13,13 +16,10 @@ import {
13
16
  import {
14
17
  createCRMWebhookHandler,
15
18
  parseTwentyWebhook
16
- } from "./chunk-PQFTZDR4.js";
19
+ } from "./chunk-HWVG6QXM.js";
17
20
  import {
18
21
  WhatsAppAdapter
19
22
  } from "./chunk-ECSNSHZ7.js";
20
- import {
21
- SignalAdapter
22
- } from "./chunk-RJT7H2KR.js";
23
23
  import {
24
24
  BotRegistry,
25
25
  BotRuntime,
@@ -42,7 +42,7 @@ import {
42
42
  retryWithBackoff,
43
43
  routeMessage,
44
44
  validateGatewayConfig
45
- } from "./chunk-3J4AJLED.js";
45
+ } from "./chunk-N27BYKRB.js";
46
46
  import {
47
47
  OllamaProvider
48
48
  } from "./chunk-FWFFZGSC.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  getIdentity,
3
3
  loadEmployeesSync
4
- } from "./chunk-JTS3IDOY.js";
4
+ } from "./chunk-JYETM4KT.js";
5
5
 
6
6
  // src/lib/drift-probes.ts
7
7
  var DRIFT_THRESHOLD = 80;
@@ -2,7 +2,7 @@ import {
2
2
  connectEmbedDaemon,
3
3
  disconnectClient,
4
4
  embedViaClient
5
- } from "./chunk-56N5BCXQ.js";
5
+ } from "./chunk-G4FDG3LK.js";
6
6
  import {
7
7
  EMBEDDING_DIM
8
8
  } from "./chunk-FXU7JOXK.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  sessionScopeFilter
3
- } from "./chunk-SNTCGJAE.js";
3
+ } from "./chunk-7X7HKWH7.js";
4
4
 
5
5
  // src/lib/git-task-sweep.ts
6
6
  import { execSync } from "child_process";
@@ -178,7 +178,7 @@ async function sweepTasks(projectName, options = {}) {
178
178
  }
179
179
  if (!dryRun) {
180
180
  try {
181
- const { updateTaskStatus } = await import("./tasks-crud-NQLF7DVV.js");
181
+ const { updateTaskStatus } = await import("./tasks-crud-GZLBSTH3.js");
182
182
  await updateTaskStatus({
183
183
  taskId: task.id,
184
184
  status: "needs_review",
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-TPC3LAP7.js";
5
5
  import {
6
6
  getClient
7
- } from "./chunk-JTS3IDOY.js";
7
+ } from "./chunk-JYETM4KT.js";
8
8
 
9
9
  // src/lib/global-procedures.ts
10
10
  import { randomUUID } from "crypto";
@@ -8,11 +8,11 @@ import {
8
8
  searchCodeContext,
9
9
  searchCodeContextSemantic,
10
10
  traceCodeSymbol
11
- } from "./chunk-NV3WVFZ2.js";
11
+ } from "./chunk-KOO56JVC.js";
12
12
  import "./chunk-I7AW4237.js";
13
- import "./chunk-56N5BCXQ.js";
14
- import "./chunk-3H4VU65X.js";
13
+ import "./chunk-G4FDG3LK.js";
15
14
  import "./chunk-CMFLJNP6.js";
15
+ import "./chunk-PWMMIGVQ.js";
16
16
  import "./chunk-4GXRETYL.js";
17
17
  import "./chunk-LYH5HE24.js";
18
18
  import "./chunk-MLKGABMK.js";
@@ -12,7 +12,7 @@ var DEFAULT_WORKSPACE = "conversations";
12
12
  var MIN_NAME_LENGTH = 3;
13
13
  var SKIP_NAMES = /* @__PURE__ */ new Set(["unknown", "none", "n/a", "null", "undefined"]);
14
14
  async function populateWikiFromExtraction(extraction, msg, agentResponse, agentName) {
15
- const { createWikiClient, chatInWorkspace, listWorkspaces } = await import("./wiki-client-NZR7RW4I.js");
15
+ const { createWikiClient, chatInWorkspace, listWorkspaces } = await import("./wiki-client-S6JKY7GG.js");
16
16
  const client = await createWikiClient();
17
17
  if (!client) {
18
18
  return { created: 0, updated: 0, skipped: extraction.entities.length };
@@ -13,7 +13,7 @@ import {
13
13
  readAllBehaviors,
14
14
  readAllMemories,
15
15
  rebuildFromDb
16
- } from "./chunk-MJSWLLSM.js";
16
+ } from "./chunk-KVXP2W2N.js";
17
17
  import "./chunk-MLKGABMK.js";
18
18
  export {
19
19
  _setStatePath,
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  createCRMWebhookHandler,
3
3
  parseTwentyWebhook
4
- } from "./chunk-PQFTZDR4.js";
5
- import "./chunk-JC7GZZVA.js";
4
+ } from "./chunk-HWVG6QXM.js";
5
+ import "./chunk-X4X3J6FE.js";
6
6
  import "./chunk-MLKGABMK.js";
7
7
  export {
8
8
  createCRMWebhookHandler,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  sessionScopeFilter
3
- } from "./chunk-SNTCGJAE.js";
3
+ } from "./chunk-7X7HKWH7.js";
4
4
  import "./chunk-LOQCOHEW.js";
5
5
  import "./chunk-TXSJ2L5O.js";
6
6
  import "./chunk-64WZEXXA.js";
@@ -10,18 +10,18 @@ import "./chunk-GZIAQYGI.js";
10
10
  import "./chunk-ZQX6UOP6.js";
11
11
  import "./chunk-H2CFBUGF.js";
12
12
  import "./chunk-NGP6LSV2.js";
13
- import "./chunk-GP436PAK.js";
13
+ import "./chunk-72IIQLQ6.js";
14
14
  import "./chunk-OPU3NYOO.js";
15
15
  import "./chunk-CVYC6DUW.js";
16
16
  import "./chunk-GJV3WDWM.js";
17
17
  import "./chunk-MP2AFCGL.js";
18
- import "./chunk-VKCFXOWQ.js";
18
+ import "./chunk-2UO3QD7V.js";
19
19
  import "./chunk-HYZV25LY.js";
20
20
  import {
21
21
  getClient,
22
22
  getEmployeeByRole,
23
23
  loadEmployeesSync
24
- } from "./chunk-JTS3IDOY.js";
24
+ } from "./chunk-JYETM4KT.js";
25
25
  import "./chunk-RVSGXGWG.js";
26
26
  import "./chunk-FXU7JOXK.js";
27
27
  import "./chunk-MVMMULOJ.js";
@@ -5,14 +5,17 @@ import {
5
5
  COO_RESTART_COOLDOWN_MS,
6
6
  CRASH_LOOP_THRESHOLD,
7
7
  CRASH_LOOP_WINDOW_MS,
8
+ HOOK_PROCESS_PATTERNS,
8
9
  IDLE_KILL_INTERCOM_ACK_WINDOW_MS,
9
10
  IDLE_NUDGE_DEDUP_MS,
11
+ ORPHAN_MAX_AGE_SECS,
10
12
  ORPHAN_PATTERNS,
11
13
  ORPHAN_SIGKILL_DELAY_MS,
12
14
  REVIEW_NUDGE_COOLDOWN_MS,
13
15
  SESSION_CONTEXT_THRESHOLD_PCT,
14
16
  SESSION_TTL_HOURS,
15
17
  STUCK_TASK_GRACE_MS,
18
+ WORKTREE_REAPER_INTERVAL_MS,
16
19
  _resetAutoWakeState,
17
20
  _resetCooRestartState,
18
21
  checkSessionTTL,
@@ -27,6 +30,8 @@ import {
27
30
  createSessionTTLRealDeps,
28
31
  createStaleReviewRealDeps,
29
32
  createStuckTaskRealDeps,
33
+ createWorktreeReaperRealDeps,
34
+ createZombieAgentReaperRealDeps,
30
35
  loadNudgeState,
31
36
  pollCoordinatorContextRestart,
32
37
  pollIdleEmployees,
@@ -34,16 +39,18 @@ import {
34
39
  pollOrphanedTasks,
35
40
  pollReviewNudge,
36
41
  reapOrphanedMcpProcesses,
42
+ reapOrphanedWorktrees,
43
+ reapZombieAgentProcesses,
37
44
  releaseStuckTasks,
38
45
  saveNudgeState,
39
46
  shouldAutoWake,
40
47
  shouldKillIdleSession,
41
48
  shouldKillSession,
42
49
  shouldNudgeEmployee
43
- } from "./chunk-IKDK7NXN.js";
44
- import "./chunk-COUXA2IQ.js";
45
- import "./chunk-F6LDN5XB.js";
46
- import "./chunk-SNTCGJAE.js";
50
+ } from "./chunk-BZYHF63H.js";
51
+ import "./chunk-FRH7EY2Z.js";
52
+ import "./chunk-MPCICOVG.js";
53
+ import "./chunk-7X7HKWH7.js";
47
54
  import "./chunk-LOQCOHEW.js";
48
55
  import "./chunk-TXSJ2L5O.js";
49
56
  import "./chunk-64WZEXXA.js";
@@ -53,14 +60,14 @@ import "./chunk-GZIAQYGI.js";
53
60
  import "./chunk-ZQX6UOP6.js";
54
61
  import "./chunk-H2CFBUGF.js";
55
62
  import "./chunk-NGP6LSV2.js";
56
- import "./chunk-GP436PAK.js";
63
+ import "./chunk-72IIQLQ6.js";
57
64
  import "./chunk-OPU3NYOO.js";
58
65
  import "./chunk-CVYC6DUW.js";
59
66
  import "./chunk-GJV3WDWM.js";
60
67
  import "./chunk-MP2AFCGL.js";
61
- import "./chunk-VKCFXOWQ.js";
68
+ import "./chunk-2UO3QD7V.js";
62
69
  import "./chunk-HYZV25LY.js";
63
- import "./chunk-JTS3IDOY.js";
70
+ import "./chunk-JYETM4KT.js";
64
71
  import "./chunk-RVSGXGWG.js";
65
72
  import "./chunk-FXU7JOXK.js";
66
73
  import "./chunk-MVMMULOJ.js";
@@ -74,14 +81,17 @@ export {
74
81
  COO_RESTART_COOLDOWN_MS,
75
82
  CRASH_LOOP_THRESHOLD,
76
83
  CRASH_LOOP_WINDOW_MS,
84
+ HOOK_PROCESS_PATTERNS,
77
85
  IDLE_KILL_INTERCOM_ACK_WINDOW_MS,
78
86
  IDLE_NUDGE_DEDUP_MS,
87
+ ORPHAN_MAX_AGE_SECS,
79
88
  ORPHAN_PATTERNS,
80
89
  ORPHAN_SIGKILL_DELAY_MS,
81
90
  REVIEW_NUDGE_COOLDOWN_MS,
82
91
  SESSION_CONTEXT_THRESHOLD_PCT,
83
92
  SESSION_TTL_HOURS,
84
93
  STUCK_TASK_GRACE_MS,
94
+ WORKTREE_REAPER_INTERVAL_MS,
85
95
  _resetAutoWakeState,
86
96
  _resetCooRestartState,
87
97
  checkSessionTTL,
@@ -96,6 +106,8 @@ export {
96
106
  createSessionTTLRealDeps,
97
107
  createStaleReviewRealDeps,
98
108
  createStuckTaskRealDeps,
109
+ createWorktreeReaperRealDeps,
110
+ createZombieAgentReaperRealDeps,
99
111
  loadNudgeState,
100
112
  pollCoordinatorContextRestart,
101
113
  pollIdleEmployees,
@@ -103,6 +115,8 @@ export {
103
115
  pollOrphanedTasks,
104
116
  pollReviewNudge,
105
117
  reapOrphanedMcpProcesses,
118
+ reapOrphanedWorktrees,
119
+ reapZombieAgentProcesses,
106
120
  releaseStuckTasks,
107
121
  saveNudgeState,
108
122
  shouldAutoWake,
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runDriftProbes
4
- } from "./chunk-7WZXLY52.js";
5
- import "./chunk-JTS3IDOY.js";
4
+ } from "./chunk-WY2QFHBB.js";
5
+ import "./chunk-JYETM4KT.js";
6
6
  import "./chunk-RVSGXGWG.js";
7
7
  import "./chunk-FXU7JOXK.js";
8
8
  import "./chunk-4GXRETYL.js";