@askexenow/exe-os 0.9.199 → 0.9.201

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 (232) hide show
  1. package/dist/{active-agent-PWI2YWBG.js → active-agent-3MLX4YOU.js} +2 -2
  2. package/dist/{active-agent-O433V5SV.js → active-agent-MTJPQ57G.js} +2 -2
  3. package/dist/{agentic-ontology-64X76FKF.js → agentic-ontology-HPFKQFA2.js} +1 -1
  4. package/dist/{backfill-metadata-RL7T4XGY.js → backfill-metadata-5INYRXJX.js} +3 -3
  5. package/dist/{behaviors-ZW4BWUGD.js → behaviors-TIOFWD4T.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 +4 -4
  10. package/dist/bin/backfill-responses.js +4 -4
  11. package/dist/bin/backfill-vectors.js +5 -5
  12. package/dist/bin/bulk-sync-postgres.js +5 -5
  13. package/dist/bin/cleanup-stale-review-tasks.js +7 -6
  14. package/dist/bin/cli.js +13 -13
  15. package/dist/bin/deferred-daemon-restart.js +1 -1
  16. package/dist/bin/exe-agent-config.js +1 -1
  17. package/dist/bin/exe-agent.js +4 -4
  18. package/dist/bin/exe-assign.js +6 -6
  19. package/dist/bin/exe-boot.js +14 -13
  20. package/dist/bin/exe-call.js +3 -3
  21. package/dist/bin/exe-cloud.js +3 -3
  22. package/dist/bin/exe-dispatch.js +7 -6
  23. package/dist/bin/exe-doctor.js +1 -1
  24. package/dist/bin/exe-export-behaviors.js +6 -6
  25. package/dist/bin/exe-forget.js +5 -5
  26. package/dist/bin/exe-gateway.js +5 -5
  27. package/dist/bin/exe-heartbeat.js +7 -6
  28. package/dist/bin/exe-kill.js +10 -9
  29. package/dist/bin/exe-launch-agent.js +9 -9
  30. package/dist/bin/exe-new-employee.js +5 -5
  31. package/dist/bin/exe-pending-messages.js +8 -7
  32. package/dist/bin/exe-pending-notifications.js +7 -6
  33. package/dist/bin/exe-pending-reviews.js +7 -6
  34. package/dist/bin/exe-rename.js +3 -3
  35. package/dist/bin/exe-review.js +9 -8
  36. package/dist/bin/exe-search.js +4 -4
  37. package/dist/bin/exe-session-cleanup.js +11 -10
  38. package/dist/bin/exe-settings.js +3 -3
  39. package/dist/bin/exe-start-codex.js +10 -10
  40. package/dist/bin/exe-start-opencode.js +7 -7
  41. package/dist/bin/exe-status.js +8 -7
  42. package/dist/bin/exe-team.js +2 -2
  43. package/dist/bin/git-sweep.js +7 -6
  44. package/dist/bin/graph-backfill.js +3 -3
  45. package/dist/bin/graph-export.js +4 -4
  46. package/dist/bin/import-history.js +4 -4
  47. package/dist/bin/install.js +6 -6
  48. package/dist/bin/intercom-check.js +4 -4
  49. package/dist/bin/orchestration-metrics.js +47 -0
  50. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  51. package/dist/bin/postgres-agentic-semantic-backfill.js +4 -4
  52. package/dist/bin/scan-tasks.js +7 -6
  53. package/dist/bin/setup.js +1 -1
  54. package/dist/bin/shard-migrate.js +4 -4
  55. package/dist/bin/stack-update.js +1 -1
  56. package/dist/bin/vps-health-gate.js +1 -1
  57. package/dist/{capacity-monitor-2TRPP3AX.js → capacity-monitor-4VPGKKQH.js} +8 -7
  58. package/dist/{catchup-brief-74ORL525.js → catchup-brief-K2A2NCMS.js} +9 -8
  59. package/dist/{chunk-YZIUQ77U.js → chunk-3V7D5SCM.js} +3 -3
  60. package/dist/{chunk-PHIQW2IU.js → chunk-4WQIB264.js} +6 -6
  61. package/dist/{chunk-FXVTLBBA.js → chunk-66LJM3KL.js} +3 -3
  62. package/dist/{chunk-WATDOTGK.js → chunk-6NLHVC6U.js} +1 -1
  63. package/dist/{chunk-M7NGABPF.js → chunk-7BNZUXFJ.js} +1 -1
  64. package/dist/{chunk-ZAF4GJTD.js → chunk-7LC5HGA3.js} +9 -9
  65. package/dist/{chunk-V5U3FYDZ.js → chunk-7VU6CZCK.js} +2 -2
  66. package/dist/chunk-7ZIRLFIF.js +221 -0
  67. package/dist/{chunk-JPZQM7VW.js → chunk-A4NG62X6.js} +1 -1
  68. package/dist/{chunk-JDGCEOT4.js → chunk-AIOJFN5D.js} +2 -2
  69. package/dist/{chunk-OF6TXNOC.js → chunk-AJN3W6XB.js} +1 -1
  70. package/dist/{chunk-OO5EWGC6.js → chunk-AVHQPIJS.js} +1 -1
  71. package/dist/{chunk-CWY3M4SR.js → chunk-B4K4EJH7.js} +1 -1
  72. package/dist/{chunk-ZLP5TNRU.js → chunk-B5N4DMXM.js} +3 -3
  73. package/dist/{chunk-OGQX7HLN.js → chunk-BCTU72UR.js} +1 -1
  74. package/dist/{chunk-JSMOQRIV.js → chunk-C2YR6BZY.js} +1 -1
  75. package/dist/{chunk-KTJ57PVS.js → chunk-CBAW3YFB.js} +1 -1
  76. package/dist/{chunk-ZHINF5CG.js → chunk-CCYOB56Q.js} +1 -1
  77. package/dist/{chunk-L7ZYZCJ5.js → chunk-D42R5MZU.js} +1 -1
  78. package/dist/{chunk-SKXHR35T.js → chunk-DFQY6G4L.js} +3 -3
  79. package/dist/{chunk-UWMFQKOB.js → chunk-DXFNVS44.js} +1 -1
  80. package/dist/{chunk-JRLSQFIE.js → chunk-EDFYSZ4U.js} +68 -68
  81. package/dist/{chunk-JQLWMZZJ.js → chunk-EJM2YUF4.js} +1 -1
  82. package/dist/{chunk-BO3ZQIWF.js → chunk-GKKMANTG.js} +1 -1
  83. package/dist/{chunk-5YVGHP2B.js → chunk-GSV24ZVZ.js} +8 -8
  84. package/dist/{chunk-DNEOEKWA.js → chunk-HF7Y4UZO.js} +2 -2
  85. package/dist/{chunk-MWGAC2ER.js → chunk-I5IWVRZY.js} +2 -2
  86. package/dist/{chunk-RUKOGGQG.js → chunk-IAPOGI6M.js} +2 -2
  87. package/dist/{chunk-MABQMUCQ.js → chunk-J2TSYNVM.js} +230 -18
  88. package/dist/{chunk-6BJ5GZD4.js → chunk-J6CSL7AY.js} +6 -6
  89. package/dist/{chunk-XPOMXVWI.js → chunk-K7XLE7UI.js} +3 -1
  90. package/dist/{chunk-XNXTN5XZ.js → chunk-KGSFR6V3.js} +1 -1
  91. package/dist/{chunk-YT67TJQZ.js → chunk-LPPCJZVI.js} +1 -1
  92. package/dist/{chunk-WRCETUYE.js → chunk-LT26OOIB.js} +1 -1
  93. package/dist/{chunk-CGAYSKQF.js → chunk-M6S7HVFP.js} +5 -5
  94. package/dist/{chunk-IFFVONU6.js → chunk-MBFVJSSH.js} +1 -1
  95. package/dist/{chunk-JW3MATT5.js → chunk-MLQFGVFJ.js} +1 -1
  96. package/dist/{chunk-2DWKMJPE.js → chunk-MSUJ3UBS.js} +2 -2
  97. package/dist/{chunk-4X7CMJDN.js → chunk-MXLB2M2O.js} +45 -10
  98. package/dist/{chunk-KRYEHI4V.js → chunk-MYVI6V7L.js} +3 -3
  99. package/dist/{chunk-2HEXCZGP.js → chunk-NC3NOZHH.js} +1 -1
  100. package/dist/{chunk-FDD7KX7Q.js → chunk-OOTPPSOX.js} +7 -7
  101. package/dist/{chunk-FBTIOBF6.js → chunk-P7QVZZBS.js} +3 -3
  102. package/dist/{chunk-6FBYGI2H.js → chunk-POS4PUM7.js} +1 -1
  103. package/dist/{chunk-BDYUENC7.js → chunk-Q3FTA4GX.js} +1 -1
  104. package/dist/{chunk-K6K55GMZ.js → chunk-QR7CQJVJ.js} +1 -1
  105. package/dist/{chunk-ACOQS4ZL.js → chunk-RC35BWOO.js} +2 -2
  106. package/dist/{chunk-WSYFZZCP.js → chunk-SXTHSDJQ.js} +4 -4
  107. package/dist/{chunk-5XAGTHF2.js → chunk-T4EQ5SKI.js} +1 -1
  108. package/dist/{chunk-OYU7TCBG.js → chunk-TRQJQYG5.js} +1 -1
  109. package/dist/{chunk-QPSUK5HA.js → chunk-UCDMLKE5.js} +1 -1
  110. package/dist/{chunk-GIIRWR35.js → chunk-VBKEAVEU.js} +2 -2
  111. package/dist/{chunk-JDHB6I4O.js → chunk-WI6BQ4T3.js} +2 -2
  112. package/dist/{chunk-65K2BQTG.js → chunk-XASY3SCH.js} +1 -1
  113. package/dist/{chunk-2GJWENBT.js → chunk-Y35YW6EL.js} +1 -1
  114. package/dist/{chunk-TGOJR5SS.js → chunk-YCEJCFU5.js} +58 -2
  115. package/dist/{chunk-7WUBXLK2.js → chunk-ZE36U2GK.js} +2 -2
  116. package/dist/{co-occurrence-OVDIX3OS.js → co-occurrence-J5WOOCWD.js} +1 -1
  117. package/dist/{code-context-index-TBCTP47N.js → code-context-index-JPQDRTTX.js} +2 -2
  118. package/dist/{crdt-sync-L42FZQ7O.js → crdt-sync-NGSP5WQE.js} +1 -1
  119. package/dist/{crm-webhook-OFWPEK33.js → crm-webhook-ZQUDBLHY.js} +2 -2
  120. package/dist/{cto-delegation-gate-7PGS5IN4.js → cto-delegation-gate-A77BCIAB.js} +6 -5
  121. package/dist/{daemon-orchestration-MP3PPX7Q.js → daemon-orchestration-AVB5PPC5.js} +9 -8
  122. package/dist/{exe-drift-BUFQKOM5.js → exe-drift-BUVZV7DK.js} +2 -2
  123. package/dist/{exe-export-QMGWH3PL.js → exe-export-QJEIYCKB.js} +4 -4
  124. package/dist/{exe-import-7NNKSCKI.js → exe-import-SGSX3QML.js} +4 -4
  125. package/dist/{exe-key-QZ5GWV6D.js → exe-key-Y7DAEMSK.js} +1 -1
  126. package/dist/{fast-db-init-DAZZ7ZUP.js → fast-db-init-UTA7SHEE.js} +1 -1
  127. package/dist/gateway/index.js +9 -9
  128. package/dist/{git-staleness-JY7PJT6F.js → git-staleness-WTDE4H4D.js} +1 -1
  129. package/dist/{git-task-sweep-SLANXCSW.js → git-task-sweep-SHTK3F7G.js} +7 -6
  130. package/dist/{global-procedures-GKQGLYXQ.js → global-procedures-K3B3GTHA.js} +2 -2
  131. package/dist/{graph-auto-extract-5OYWXUKD.js → graph-auto-extract-ZCVUFK6M.js} +1 -1
  132. package/dist/hooks/bug-report-worker.js +8 -7
  133. package/dist/hooks/codex-stop-task-finalizer.js +8 -7
  134. package/dist/hooks/commit-complete.js +9 -8
  135. package/dist/hooks/error-recall.js +5 -5
  136. package/dist/hooks/exe-heartbeat-hook.js +2 -2
  137. package/dist/hooks/ingest-worker.js +2 -2
  138. package/dist/hooks/ingest.js +5 -5
  139. package/dist/hooks/instructions-loaded.js +3 -3
  140. package/dist/hooks/manifest.json +20 -20
  141. package/dist/hooks/notification.js +3 -3
  142. package/dist/hooks/post-compact.js +8 -7
  143. package/dist/hooks/post-tool-combined.js +5 -5
  144. package/dist/hooks/pre-compact.js +11 -10
  145. package/dist/hooks/pre-tool-use.js +12 -11
  146. package/dist/hooks/prompt-submit.js +18 -17
  147. package/dist/hooks/session-end.js +14 -13
  148. package/dist/hooks/session-start.js +7 -7
  149. package/dist/hooks/stop.js +15 -14
  150. package/dist/hooks/subagent-stop.js +8 -7
  151. package/dist/hooks/summary-worker.js +14 -13
  152. package/dist/index.js +15 -14
  153. package/dist/{installer-GSA2KOSE.js → installer-D47RNEJB.js} +4 -4
  154. package/dist/{installer-CWKEI7SE.js → installer-WVQDUS7O.js} +4 -4
  155. package/dist/{installer-DWVZFKAH.js → installer-YBYJZLUT.js} +4 -4
  156. package/dist/lib/cloud-sync.js +3 -3
  157. package/dist/lib/consolidation.js +4 -4
  158. package/dist/lib/database.js +1 -1
  159. package/dist/lib/db-daemon-client.js +1 -1
  160. package/dist/lib/db.js +1 -1
  161. package/dist/lib/embedder.js +2 -2
  162. package/dist/lib/employee-templates.js +3 -3
  163. package/dist/lib/employees.js +1 -1
  164. package/dist/lib/exe-daemon-client.js +1 -1
  165. package/dist/lib/exe-daemon.js +48 -24
  166. package/dist/lib/hybrid-search.js +4 -4
  167. package/dist/lib/identity.js +1 -1
  168. package/dist/lib/messaging.js +7 -6
  169. package/dist/lib/reminders.js +2 -2
  170. package/dist/lib/schedules.js +4 -4
  171. package/dist/lib/skill-learning.js +3 -3
  172. package/dist/lib/store.js +3 -3
  173. package/dist/lib/task-router.js +2 -2
  174. package/dist/lib/tasks.js +7 -6
  175. package/dist/lib/tmux-routing.js +6 -5
  176. package/dist/lib/token-spend.js +2 -2
  177. package/dist/mcp/register-tools.js +49 -48
  178. package/dist/mcp/server.js +50 -49
  179. package/dist/mcp/tools/complete-reminder.js +3 -3
  180. package/dist/mcp/tools/create-reminder.js +3 -3
  181. package/dist/mcp/tools/create-task.js +9 -8
  182. package/dist/mcp/tools/deactivate-behavior.js +4 -4
  183. package/dist/mcp/tools/list-reminders.js +3 -3
  184. package/dist/mcp/tools/list-tasks.js +9 -8
  185. package/dist/mcp/tools/send-message.js +9 -8
  186. package/dist/mcp/tools/update-task.js +8 -7
  187. package/dist/{mcp-http-config-YOB4QWYP.js → mcp-http-config-DWN2POKM.js} +2 -2
  188. package/dist/{memory-cards-UPFWA3YQ.js → memory-cards-VIKEUPGO.js} +1 -1
  189. package/dist/{memory-graph-extractor-XTH3U6QS.js → memory-graph-extractor-OP2BSF43.js} +2 -2
  190. package/dist/{memory-poisoning-defense-WDSEUEBW.js → memory-poisoning-defense-EKMAAXMH.js} +1 -1
  191. package/dist/{memory-queue-client-FJOLJYUK.js → memory-queue-client-XCBQIT3T.js} +2 -2
  192. package/dist/{memory-reflection-A2PLKX7A.js → memory-reflection-AAST2U2M.js} +1 -1
  193. package/dist/{notifications-WYNI5OG6.js → notifications-SWILJ3AV.js} +6 -5
  194. package/dist/{orchestrator-FRFCMLW3.js → orchestrator-L6OFTLK5.js} +8 -7
  195. package/dist/{plan-limits-FKTRN25T.js → plan-limits-J2BJEBN6.js} +2 -2
  196. package/dist/{projection-worker-R2JOVCXX.js → projection-worker-QPE2JIKS.js} +1 -1
  197. package/dist/{reranker-2ZWUZRUF.js → reranker-342RISOC.js} +1 -1
  198. package/dist/{review-polling-ADP5YFHW.js → review-polling-TKQXLTIA.js} +7 -6
  199. package/dist/runtime/index.js +13 -12
  200. package/dist/{session-events-JA3MCMZK.js → session-events-OPOXDEPH.js} +7 -6
  201. package/dist/{session-kill-telemetry-GV7LE56P.js → session-kill-telemetry-GBNUQABY.js} +2 -2
  202. package/dist/{session-scope-LXQKQDIS.js → session-scope-J2ODEL37.js} +6 -5
  203. package/dist/{setup-wizard-GRR4F4TX.js → setup-wizard-FQBIZQWP.js} +1 -1
  204. package/dist/{shard-manager-KXLEDDBB.js → shard-manager-GWMFNY2I.js} +1 -1
  205. package/dist/{skill-refinement-3UVLBCZD.js → skill-refinement-GYK7FZCH.js} +1 -1
  206. package/dist/{stack-update-C4BAPLXJ.js → stack-update-Q2WQOJTS.js} +1 -1
  207. package/dist/{task-enforcement-KSLBFILH.js → task-enforcement-IPXSAJA5.js} +25 -5
  208. package/dist/{task-scope-AI62AIPT.js → task-scope-JREB33TH.js} +6 -5
  209. package/dist/{tasks-crud-IEOK55IV.js → tasks-crud-V3IQ5GLV.js} +6 -5
  210. package/dist/{tasks-review-ID7V6RSR.js → tasks-review-PEEMO6RY.js} +6 -5
  211. package/dist/{token-budget-Z4ONSQLC.js → token-budget-ES3IEZPJ.js} +1 -1
  212. package/dist/{tool-capability-index-2MHWYQH5.js → tool-capability-index-6ICPKH5O.js} +1 -1
  213. package/dist/{tool-telemetry-Z46QEUD5.js → tool-telemetry-JVQX5FJV.js} +1 -1
  214. package/dist/tui/App.js +14 -13
  215. package/dist/{tui-data-HIFVW2PE.js → tui-data-NJUK2RNW.js} +6 -5
  216. package/dist/{worker-gate-F3L7XDMJ.js → worker-gate-4KF5ZRWT.js} +1 -1
  217. package/dist/{workflow-engine-H5KTDDJG.js → workflow-engine-DHMTGUAO.js} +2 -2
  218. package/package.json +2 -1
  219. package/release-notes.json +135 -138
  220. /package/dist/{chunk-KBZM7HRB.js → chunk-5QVJ5TBF.js} +0 -0
  221. /package/dist/{chunk-OO5CPMT3.js → chunk-HGU4YCR3.js} +0 -0
  222. /package/dist/{chunk-AFJWUI3Y.js → chunk-HIECEYMN.js} +0 -0
  223. /package/dist/{chunk-54MZI4PK.js → chunk-MYESASW3.js} +0 -0
  224. /package/dist/{chunk-G5GFP5J6.js → chunk-TFV7MDCX.js} +0 -0
  225. /package/dist/{chunk-GHCVD7WV.js → chunk-XJTHRKML.js} +0 -0
  226. /package/dist/{chunk-MNNWWEVJ.js → chunk-XZCSY5ID.js} +0 -0
  227. /package/dist/{chunk-MQLMIY6U.js → chunk-YLBBPZO3.js} +0 -0
  228. /package/dist/{chunk-NF4AEKQK.js → chunk-ZOX6DPP3.js} +0 -0
  229. /package/dist/{core-memory-VQKCHGFX.js → core-memory-B7VPSYUP.js} +0 -0
  230. /package/dist/{entity-boost-WEQDV6P6.js → entity-boost-QXR3LCYV.js} +0 -0
  231. /package/dist/{message-queue-client-BR7DXK7J.js → message-queue-client-CUCAQME6.js} +0 -0
  232. /package/dist/{wiki-acl-DDF2QQOD.js → wiki-acl-UOSBRX3O.js} +0 -0
@@ -7,12 +7,15 @@ import {
7
7
  import {
8
8
  registerSession
9
9
  } from "./chunk-64WZEXXA.js";
10
+ import {
11
+ getTransport
12
+ } from "./chunk-TXWQPL2U.js";
10
13
  import {
11
14
  listTmuxSessions
12
15
  } from "./chunk-GZIAQYGI.js";
13
16
  import {
14
- getTransport
15
- } from "./chunk-TXWQPL2U.js";
17
+ recordOrchestrationEventBestEffort
18
+ } from "./chunk-7ZIRLFIF.js";
16
19
  import {
17
20
  DEFAULT_PROVIDER,
18
21
  PROVIDER_TABLE,
@@ -30,7 +33,7 @@ import {
30
33
  import {
31
34
  PlanLimitError,
32
35
  assertEmployeeLimitSync
33
- } from "./chunk-ZHINF5CG.js";
36
+ } from "./chunk-CCYOB56Q.js";
34
37
  import {
35
38
  getSessionKey
36
39
  } from "./chunk-CVYC6DUW.js";
@@ -45,7 +48,7 @@ import {
45
48
  } from "./chunk-MP2AFCGL.js";
46
49
  import {
47
50
  ensureAgentSymlink
48
- } from "./chunk-JW3MATT5.js";
51
+ } from "./chunk-MLQFGVFJ.js";
49
52
  import {
50
53
  expandDualPrefixTools
51
54
  } from "./chunk-HYZV25LY.js";
@@ -57,7 +60,7 @@ import {
57
60
  isCoordinatorName,
58
61
  loadEmployees,
59
62
  loadEmployeesSync
60
- } from "./chunk-TGOJR5SS.js";
63
+ } from "./chunk-YCEJCFU5.js";
61
64
  import {
62
65
  loadDeviceId
63
66
  } from "./chunk-MVMMULOJ.js";
@@ -360,7 +363,7 @@ async function createTaskCore(input) {
360
363
  if (isCoordinatorSession) {
361
364
  earlySessionScope = resolved;
362
365
  } else {
363
- const { getSessionProject } = await import("./session-scope-LXQKQDIS.js");
366
+ const { getSessionProject } = await import("./session-scope-J2ODEL37.js");
364
367
  const sessionProject = getSessionProject(resolved);
365
368
  if (sessionProject && sessionProject !== input.projectName) {
366
369
  scopeMismatchWarning = `session/project mismatch: session "${resolved}" owns "${sessionProject}" but task targets "${input.projectName}". Routed to default scope.`;
@@ -476,6 +479,24 @@ ${scopeMismatchWarning}` : scopeMismatchWarning;
476
479
  );
477
480
  throw dbErr;
478
481
  }
482
+ recordOrchestrationEventBestEffort({
483
+ eventType: "task.created",
484
+ source: "tasks-crud.createTaskCore",
485
+ taskId: id,
486
+ agentId: input.assignedTo,
487
+ reviewer: input.reviewer ?? null,
488
+ sessionScope,
489
+ projectName: input.projectName,
490
+ instanceId: null,
491
+ result: initialStatus,
492
+ payload: {
493
+ priority: input.priority,
494
+ complexity,
495
+ hasBlockedBy: Boolean(blockedById),
496
+ hasParentTask: Boolean(parentTaskId),
497
+ titleLength: input.title.length
498
+ }
499
+ });
479
500
  logTaskCreated({
480
501
  taskId: id,
481
502
  title: input.title,
@@ -734,6 +755,9 @@ async function updateTaskStatus(input) {
734
755
  const taskId = String(row.id);
735
756
  const taskFile = String(row.task_file);
736
757
  const requestedStatus = input.status;
758
+ const eventSessionScope = row.session_scope ? String(row.session_scope) : null;
759
+ const eventProjectName = row.project_name ? String(row.project_name) : null;
760
+ const eventAgentId = row.assigned_to ? String(row.assigned_to) : null;
737
761
  const previousStatus = String(row.status);
738
762
  if (input.status === "done") {
739
763
  input.status = "needs_review";
@@ -747,7 +771,7 @@ async function updateTaskStatus(input) {
747
771
  if (exeSession) {
748
772
  if (isCoordinatorName(reviewer)) {
749
773
  if (isExeSession2(exeSession)) {
750
- sendIntercom2(exeSession, { force: true });
774
+ sendIntercom2(exeSession, { force: true, reason: "completion" });
751
775
  process.stderr.write(
752
776
  `[tasks-crud] Review intercom sent to ${exeSession}: "${String(row.title)}" by ${String(row.assigned_to)}
753
777
  `
@@ -755,7 +779,7 @@ async function updateTaskStatus(input) {
755
779
  }
756
780
  } else {
757
781
  const reviewerSession = employeeSessionName2(reviewer, exeSession);
758
- sendIntercom2(reviewerSession, { force: true });
782
+ sendIntercom2(reviewerSession, { force: true, reason: "completion" });
759
783
  process.stderr.write(
760
784
  `[tasks-crud] Review intercom sent to ${reviewerSession}: "${String(row.title)}" by ${String(row.assigned_to)}
761
785
  `
@@ -788,7 +812,7 @@ async function updateTaskStatus(input) {
788
812
  } catch {
789
813
  }
790
814
  try {
791
- const { writeNotification: writeNotification2 } = await import("./notifications-WYNI5OG6.js");
815
+ const { writeNotification: writeNotification2 } = await import("./notifications-SWILJ3AV.js");
792
816
  await writeNotification2({
793
817
  agentId: reviewer,
794
818
  agentRole: isCoordinatorName(reviewer) ? "COO" : "manager",
@@ -810,7 +834,7 @@ async function updateTaskStatus(input) {
810
834
  if (exeSession) {
811
835
  if (isCoordinatorName(dispatcher)) {
812
836
  if (isExeSession2(exeSession)) {
813
- sendIntercom2(exeSession, { force: true });
837
+ sendIntercom2(exeSession, { force: true, reason: "completion" });
814
838
  process.stderr.write(
815
839
  `[tasks-crud] Blocked intercom sent to ${exeSession}: "${String(row.title)}" blocked by ${String(row.assigned_to)}
816
840
  `
@@ -818,7 +842,7 @@ async function updateTaskStatus(input) {
818
842
  }
819
843
  } else {
820
844
  const dispatcherSession = employeeSessionName2(dispatcher, exeSession);
821
- sendIntercom2(dispatcherSession, { force: true });
845
+ sendIntercom2(dispatcherSession, { force: true, reason: "completion" });
822
846
  process.stderr.write(
823
847
  `[tasks-crud] Blocked intercom sent to ${dispatcherSession}: "${String(row.title)}" blocked by ${String(row.assigned_to)}
824
848
  `
@@ -911,6 +935,26 @@ ${input.result}` : `\u26A0\uFE0F ${warning}`;
911
935
  });
912
936
  } catch {
913
937
  }
938
+ recordOrchestrationEventBestEffort({
939
+ eventType: "task.claimed",
940
+ source: "tasks-crud.updateTaskStatus",
941
+ taskId,
942
+ agentId: eventAgentId,
943
+ sessionScope: eventSessionScope,
944
+ projectName: eventProjectName,
945
+ tmuxSession,
946
+ result: "reclaimed_dead_session"
947
+ });
948
+ recordOrchestrationEventBestEffort({
949
+ eventType: "task.in_progress",
950
+ source: "tasks-crud.updateTaskStatus",
951
+ taskId,
952
+ agentId: eventAgentId,
953
+ sessionScope: eventSessionScope,
954
+ projectName: eventProjectName,
955
+ tmuxSession,
956
+ result: "reclaimed_dead_session"
957
+ });
914
958
  return { row, taskFile, now, taskId };
915
959
  }
916
960
  }
@@ -931,9 +975,42 @@ ${input.result}` : `\u26A0\uFE0F ${warning}`;
931
975
  });
932
976
  } catch {
933
977
  }
978
+ recordOrchestrationEventBestEffort({
979
+ eventType: "task.claimed",
980
+ source: "tasks-crud.updateTaskStatus",
981
+ taskId,
982
+ agentId: eventAgentId,
983
+ sessionScope: eventSessionScope,
984
+ projectName: eventProjectName,
985
+ tmuxSession,
986
+ result: "assigner_override",
987
+ payload: { callerAgentId: input.callerAgentId }
988
+ });
989
+ recordOrchestrationEventBestEffort({
990
+ eventType: "task.in_progress",
991
+ source: "tasks-crud.updateTaskStatus",
992
+ taskId,
993
+ agentId: eventAgentId,
994
+ sessionScope: eventSessionScope,
995
+ projectName: eventProjectName,
996
+ tmuxSession,
997
+ result: "assigner_override"
998
+ });
934
999
  return { row, taskFile, now, taskId };
935
1000
  }
936
1001
  const claimedBy = claimedBySession ? ` (claimed by ${claimedBySession})` : "";
1002
+ recordOrchestrationEventBestEffort({
1003
+ eventType: "claim.collision",
1004
+ source: "tasks-crud.updateTaskStatus",
1005
+ severity: "warn",
1006
+ taskId,
1007
+ agentId: eventAgentId,
1008
+ sessionScope: eventSessionScope,
1009
+ projectName: eventProjectName,
1010
+ tmuxSession,
1011
+ result: curStatus,
1012
+ payload: { hasClaimedBy: Boolean(claimedBySession) }
1013
+ });
937
1014
  throw new Error(`${TASK_ALREADY_CLAIMED_PREFIX}: task ${taskId} is ${curStatus}${claimedBy}`);
938
1015
  }
939
1016
  try {
@@ -944,6 +1021,26 @@ ${input.result}` : `\u26A0\uFE0F ${warning}`;
944
1021
  });
945
1022
  } catch {
946
1023
  }
1024
+ recordOrchestrationEventBestEffort({
1025
+ eventType: "task.claimed",
1026
+ source: "tasks-crud.updateTaskStatus",
1027
+ taskId,
1028
+ agentId: eventAgentId,
1029
+ sessionScope: eventSessionScope,
1030
+ projectName: eventProjectName,
1031
+ tmuxSession,
1032
+ result: "open_to_in_progress"
1033
+ });
1034
+ recordOrchestrationEventBestEffort({
1035
+ eventType: "task.in_progress",
1036
+ source: "tasks-crud.updateTaskStatus",
1037
+ taskId,
1038
+ agentId: eventAgentId,
1039
+ sessionScope: eventSessionScope,
1040
+ projectName: eventProjectName,
1041
+ tmuxSession,
1042
+ result: "open_to_in_progress"
1043
+ });
947
1044
  return { row, taskFile, now, taskId };
948
1045
  }
949
1046
  if (input.result) {
@@ -957,13 +1054,49 @@ ${input.result}` : `\u26A0\uFE0F ${warning}`;
957
1054
  args: [input.status, now, taskId]
958
1055
  });
959
1056
  }
1057
+ if (requestedStatus === "done") {
1058
+ recordOrchestrationEventBestEffort({
1059
+ eventType: "task.done",
1060
+ source: "tasks-crud.updateTaskStatus",
1061
+ taskId,
1062
+ agentId: eventAgentId,
1063
+ reviewer: row.reviewer ? String(row.reviewer) : null,
1064
+ sessionScope: eventSessionScope,
1065
+ projectName: eventProjectName,
1066
+ result: input.status
1067
+ });
1068
+ }
1069
+ if (input.status === "needs_review" && previousStatus !== "needs_review" && previousStatus !== "closed") {
1070
+ recordOrchestrationEventBestEffort({
1071
+ eventType: "review.ready",
1072
+ source: "tasks-crud.updateTaskStatus",
1073
+ taskId,
1074
+ agentId: eventAgentId,
1075
+ reviewer: row.reviewer ? String(row.reviewer) : null,
1076
+ sessionScope: eventSessionScope,
1077
+ projectName: eventProjectName,
1078
+ result: "needs_review"
1079
+ });
1080
+ }
1081
+ if (input.status === "closed") {
1082
+ recordOrchestrationEventBestEffort({
1083
+ eventType: "task.closed",
1084
+ source: "tasks-crud.updateTaskStatus",
1085
+ taskId,
1086
+ agentId: eventAgentId,
1087
+ reviewer: row.reviewer ? String(row.reviewer) : null,
1088
+ sessionScope: eventSessionScope,
1089
+ projectName: eventProjectName,
1090
+ result: "closed"
1091
+ });
1092
+ }
960
1093
  try {
961
1094
  await client.execute("PRAGMA wal_checkpoint(PASSIVE)");
962
1095
  } catch {
963
1096
  }
964
1097
  if (input.status === "done" || input.status === "needs_review") {
965
1098
  try {
966
- const { incrementSkillSuccess } = await import("./skill-refinement-3UVLBCZD.js");
1099
+ const { incrementSkillSuccess } = await import("./skill-refinement-GYK7FZCH.js");
967
1100
  await incrementSkillSuccess(
968
1101
  String(row.assigned_to),
969
1102
  row.project_name ? String(row.project_name) : null
@@ -1539,13 +1672,13 @@ async function createReviewForCompletedTask(row, result, _baseDir, now) {
1539
1672
  const taskScope = row.session_scope ? String(row.session_scope) : null;
1540
1673
  const exeSession = taskScope || getParentExe(getSessionKey());
1541
1674
  if (exeSession) {
1542
- sendIntercom(exeSession, { force: true });
1675
+ sendIntercom(exeSession, { force: true, reason: "completion" });
1543
1676
  }
1544
1677
  if (reviewer && reviewer !== coordinatorName && reviewer !== exeSession) {
1545
1678
  const { employeeSessionName: employeeSessionName2 } = await import("./lib/tmux-routing.js");
1546
1679
  if (exeSession) {
1547
1680
  const reviewerSession = employeeSessionName2(reviewer, exeSession);
1548
- sendIntercom(reviewerSession, { force: true });
1681
+ sendIntercom(reviewerSession, { force: true, reason: "completion" });
1549
1682
  }
1550
1683
  }
1551
1684
  } catch {
@@ -2041,7 +2174,7 @@ async function verifyPaneAtCapacity(sessionName) {
2041
2174
  reason: `capture-pane failed: ${err instanceof Error ? err.message : String(err)}`
2042
2175
  };
2043
2176
  }
2044
- const { isAtCapacity } = await import("./capacity-monitor-2TRPP3AX.js");
2177
+ const { isAtCapacity } = await import("./capacity-monitor-4VPGKKQH.js");
2045
2178
  if (!isAtCapacity(pane)) {
2046
2179
  return {
2047
2180
  atCapacity: false,
@@ -2159,6 +2292,33 @@ function isExeSession(sessionName) {
2159
2292
  }
2160
2293
  function sendIntercom(targetSession, opts) {
2161
2294
  const transport = getTransport();
2295
+ const startedAt = Date.now();
2296
+ const reason = opts?.reason ?? "nudge";
2297
+ const rawAgent = targetSession.split("-")[0] ?? targetSession;
2298
+ const eventAgent = baseAgentName(rawAgent);
2299
+ const eventSessionScope = extractRootExe(targetSession);
2300
+ const recordResult = (result, errorCode) => {
2301
+ recordOrchestrationEventBestEffort({
2302
+ eventType: "tmux.nudge.completed",
2303
+ source: "tmux-routing.sendIntercom",
2304
+ severity: result === "failed" ? "warn" : "info",
2305
+ agentId: eventAgent,
2306
+ sessionScope: eventSessionScope,
2307
+ tmuxSession: targetSession,
2308
+ durationMs: Date.now() - startedAt,
2309
+ result,
2310
+ errorCode: errorCode ?? null,
2311
+ payload: { reason, force: Boolean(opts?.force) }
2312
+ });
2313
+ };
2314
+ recordOrchestrationEventBestEffort({
2315
+ eventType: "tmux.nudge.attempted",
2316
+ source: "tmux-routing.sendIntercom",
2317
+ agentId: eventAgent,
2318
+ sessionScope: eventSessionScope,
2319
+ tmuxSession: targetSession,
2320
+ payload: { reason, force: Boolean(opts?.force) }
2321
+ });
2162
2322
  try {
2163
2323
  const callerScope = resolveExeSession();
2164
2324
  if (callerScope && isExeSession(callerScope) && targetSession.includes("-")) {
@@ -2169,6 +2329,17 @@ function sendIntercom(targetSession, opts) {
2169
2329
  `[intercom] BLOCKED: cross-session intercom from ${callerScope} to ${targetSession}. Session isolation enforced.
2170
2330
  `
2171
2331
  );
2332
+ recordOrchestrationEventBestEffort({
2333
+ eventType: "session.scope_violation",
2334
+ source: "tmux-routing.sendIntercom",
2335
+ severity: "warn",
2336
+ agentId: eventAgent,
2337
+ sessionScope: targetScope,
2338
+ tmuxSession: targetSession,
2339
+ result: "blocked",
2340
+ payload: { callerScope }
2341
+ });
2342
+ recordResult("failed", "scope_violation");
2172
2343
  return "failed";
2173
2344
  }
2174
2345
  }
@@ -2176,12 +2347,14 @@ function sendIntercom(targetSession, opts) {
2176
2347
  }
2177
2348
  if (!opts?.force && isDebounced(targetSession)) {
2178
2349
  logIntercom(`DEBOUNCE \u2192 ${targetSession} (nudge batched, task safe in DB)`);
2350
+ recordResult("debounced");
2179
2351
  return "debounced";
2180
2352
  }
2181
2353
  try {
2182
2354
  const sessions = transport.listSessions();
2183
2355
  if (!sessions.includes(targetSession)) {
2184
2356
  logIntercom(`SKIP \u2192 ${targetSession} (session not found)`);
2357
+ recordResult("failed", "session_not_found");
2185
2358
  return "failed";
2186
2359
  }
2187
2360
  const sessionState = getSessionState(targetSession);
@@ -2189,21 +2362,24 @@ function sendIntercom(targetSession, opts) {
2189
2362
  queueIntercom(targetSession, "claude not running in session");
2190
2363
  const batched2 = recordDebounce(targetSession);
2191
2364
  logIntercom(`QUEUED \u2192 ${targetSession} (no claude process)${batched2 > 0 ? ` [${batched2} batched]` : ""}`);
2365
+ recordResult("queued", "no_claude");
2192
2366
  return "queued";
2193
2367
  }
2194
2368
  if (!opts?.force && (sessionState === "thinking" || sessionState === "tool")) {
2195
2369
  queueIntercom(targetSession, "session busy at send time");
2196
2370
  const batched2 = recordDebounce(targetSession);
2197
2371
  logIntercom(`QUEUED \u2192 ${targetSession} (session busy)${batched2 > 0 ? ` [${batched2} batched]` : ""}`);
2372
+ recordResult("queued", "session_busy");
2198
2373
  return "queued";
2199
2374
  }
2200
2375
  if (sessionState !== "idle") {
2201
2376
  try {
2202
- const rawAgent = targetSession.split("-")[0] ?? targetSession;
2203
- const agent = baseAgentName(rawAgent);
2377
+ const rawAgent2 = targetSession.split("-")[0] ?? targetSession;
2378
+ const agent = baseAgentName(rawAgent2);
2204
2379
  const markerPath = path5.join(SESSION_CACHE, `current-task-${agent}.json`);
2205
2380
  if (existsSync5(markerPath)) {
2206
2381
  logIntercom(`SKIP \u2192 ${targetSession} (has in_progress task marker + not idle \u2014 will auto-chain)`);
2382
+ recordResult("debounced", "in_progress_marker");
2207
2383
  return "debounced";
2208
2384
  }
2209
2385
  } catch {
@@ -2213,15 +2389,16 @@ function sendIntercom(targetSession, opts) {
2213
2389
  logIntercom(`COPY_MODE \u2192 ${targetSession} (exiting copy mode first)`);
2214
2390
  transport.sendKeys(targetSession, "q");
2215
2391
  }
2216
- const reason = opts?.reason ?? "nudge";
2217
2392
  const msg = reason === "completion" ? `An employee completed work. Run task(action='list', status='needs_review') to review it.` : `P0: You have a new task dispatched. Run task(action='list', status='open') to find it. Start immediately.`;
2218
2393
  transport.sendKeysLiteral(targetSession, msg);
2219
2394
  const batched = recordDebounce(targetSession);
2220
2395
  logIntercom(`DELIVERED \u2192 ${targetSession}${batched > 0 ? ` [${batched} nudges batched during debounce]` : ""} (fire-and-forget)`);
2396
+ recordResult("delivered");
2221
2397
  return "delivered";
2222
2398
  } catch (e) {
2223
2399
  process.stderr.write("[tmux-routing] sendIntercom to " + targetSession + ": " + (e instanceof Error ? e.message : String(e)) + "\n");
2224
2400
  logIntercom(`FAIL \u2192 ${targetSession}`);
2401
+ recordResult("failed", e instanceof Error ? e.name : "send_error");
2225
2402
  return "failed";
2226
2403
  }
2227
2404
  }
@@ -2374,9 +2551,20 @@ function ensureEmployee(employeeName, exeSession, projectDir, opts) {
2374
2551
  function spawnEmployee(employeeName, exeSession, projectDir, opts) {
2375
2552
  const transport = getTransport();
2376
2553
  const sessionName = employeeSessionName(employeeName, exeSession, opts?.instance);
2554
+ const spawnStartedAt = Date.now();
2377
2555
  const instanceLabel = opts?.instance != null && opts.instance > 0 ? `${employeeName}${opts.instance}` : employeeName;
2378
2556
  const logDir = path5.join(os4.homedir(), ".exe-os", "session-logs");
2379
2557
  const logFile = path5.join(logDir, `${instanceLabel}-${Date.now()}.log`);
2558
+ recordOrchestrationEventBestEffort({
2559
+ eventType: "tmux.spawn.attempted",
2560
+ source: "tmux-routing.spawnEmployee",
2561
+ agentId: employeeName,
2562
+ sessionScope: exeSession,
2563
+ instanceId: opts?.instance != null ? String(opts.instance) : null,
2564
+ tmuxSession: sessionName,
2565
+ runtime: opts?.runtimeOverride ?? null,
2566
+ payload: { hasCwdOverride: Boolean(opts?.cwd), autoInstance: Boolean(opts?.autoInstance) }
2567
+ });
2380
2568
  if (!existsSync5(logDir)) {
2381
2569
  mkdirSync2(logDir, { recursive: true });
2382
2570
  }
@@ -2576,6 +2764,19 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
2576
2764
  });
2577
2765
  if (spawnResult.error) {
2578
2766
  releaseSpawnLock(sessionName);
2767
+ recordOrchestrationEventBestEffort({
2768
+ eventType: "tmux.spawn.completed",
2769
+ source: "tmux-routing.spawnEmployee",
2770
+ severity: "warn",
2771
+ agentId: employeeName,
2772
+ sessionScope: exeSession,
2773
+ instanceId: opts?.instance != null ? String(opts.instance) : null,
2774
+ tmuxSession: sessionName,
2775
+ runtime: useCodex ? "codex" : useOpencode ? "opencode" : useExeAgent ? "exe-agent" : "claude",
2776
+ durationMs: Date.now() - spawnStartedAt,
2777
+ result: "failed",
2778
+ errorCode: "tmux_new_session_failed"
2779
+ });
2579
2780
  return { sessionName, error: `tmux new-session failed: ${spawnResult.error}` };
2580
2781
  }
2581
2782
  transport.pipeLog(sessionName, logFile);
@@ -2675,6 +2876,17 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
2675
2876
  registeredAt: (/* @__PURE__ */ new Date()).toISOString()
2676
2877
  });
2677
2878
  releaseSpawnLock(sessionName);
2879
+ recordOrchestrationEventBestEffort({
2880
+ eventType: "tmux.spawn.completed",
2881
+ source: "tmux-routing.spawnEmployee",
2882
+ agentId: employeeName,
2883
+ sessionScope: exeSession,
2884
+ instanceId: opts?.instance != null ? String(opts.instance) : null,
2885
+ tmuxSession: sessionName,
2886
+ runtime: useCodex ? "codex" : useOpencode ? "opencode" : useExeAgent ? "exe-agent" : "claude",
2887
+ durationMs: Date.now() - spawnStartedAt,
2888
+ result: booted ? "spawned_booted" : "spawned_unverified"
2889
+ });
2678
2890
  return { sessionName };
2679
2891
  }
2680
2892
 
@@ -11,7 +11,7 @@ import {
11
11
  sessionScopeFilter,
12
12
  updateTaskStatus,
13
13
  writeNotification
14
- } from "./chunk-MABQMUCQ.js";
14
+ } from "./chunk-J2TSYNVM.js";
15
15
  import {
16
16
  getTransport
17
17
  } from "./chunk-TXWQPL2U.js";
@@ -27,7 +27,7 @@ import {
27
27
  isCoordinatorName,
28
28
  isMultiInstance,
29
29
  shouldAutoInstance
30
- } from "./chunk-TGOJR5SS.js";
30
+ } from "./chunk-YCEJCFU5.js";
31
31
  import {
32
32
  EXE_AI_DIR
33
33
  } from "./chunk-4GXRETYL.js";
@@ -136,7 +136,7 @@ async function dispatchTaskToEmployee(input) {
136
136
  let crossProject = false;
137
137
  if (input.projectName) {
138
138
  try {
139
- const { assertSessionScope } = await import("./session-scope-LXQKQDIS.js");
139
+ const { assertSessionScope } = await import("./session-scope-J2ODEL37.js");
140
140
  const check = assertSessionScope("dispatch_task", input.projectName);
141
141
  if (check.reason === "cross_session_denied") {
142
142
  crossProject = true;
@@ -334,13 +334,13 @@ async function updateTask(input) {
334
334
  const exeSession = row.session_scope ? String(row.session_scope) : resolveExeSession2();
335
335
  if (exeSession) {
336
336
  const reviewerSession = `${reviewer}-${exeSession}`;
337
- const result = sendIntercom2(reviewerSession);
337
+ const result = sendIntercom2(reviewerSession, { reason: "completion" });
338
338
  if (result !== "failed") {
339
339
  delivered = true;
340
340
  process.stderr.write(`[tasks] EVENT: notified reviewer "${reviewer}" via tmux for "${taskTitle}"
341
341
  `);
342
342
  } else if (isCoordinatorName(reviewer)) {
343
- const cooResult = sendIntercom2(exeSession);
343
+ const cooResult = sendIntercom2(exeSession, { reason: "completion" });
344
344
  if (cooResult !== "failed") {
345
345
  delivered = true;
346
346
  process.stderr.write(`[tasks] EVENT: notified coordinator "${reviewer}" for "${taskTitle}"
@@ -396,7 +396,7 @@ async function updateTask(input) {
396
396
  await markTaskNotificationsRead(taskFile);
397
397
  if (input.status === "needs_review" && !isCoordinator) {
398
398
  try {
399
- const { writeNotification: writeNotification2 } = await import("./notifications-WYNI5OG6.js");
399
+ const { writeNotification: writeNotification2 } = await import("./notifications-SWILJ3AV.js");
400
400
  await writeNotification2({
401
401
  agentId: String(row.assigned_to),
402
402
  agentRole: String(row.assigned_to),
@@ -280,7 +280,9 @@ async function ensureShardSchema(client) {
280
280
  "ALTER TABLE memories ADD COLUMN media_type TEXT",
281
281
  "ALTER TABLE memories ADD COLUMN media_meta TEXT",
282
282
  // Session scope (must match database.ts)
283
- "ALTER TABLE memories ADD COLUMN session_scope TEXT"
283
+ "ALTER TABLE memories ADD COLUMN session_scope TEXT",
284
+ // Keywords for FTS5 dual-column search (must match database.ts)
285
+ "ALTER TABLE memories ADD COLUMN keywords TEXT DEFAULT ''"
284
286
  ]) {
285
287
  try {
286
288
  await client.execute(col);
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  writeMemoryViaDaemon
3
- } from "./chunk-L7ZYZCJ5.js";
3
+ } from "./chunk-D42R5MZU.js";
4
4
 
5
5
  // src/lib/auto-checkpoint.ts
6
6
  var FILE_RE = /(?:^|\s)([\w./-]+\.(?:ts|tsx|js|jsx|json|md|yml|yaml|sql|go|py|css|scss|html|sh))(?:\b|$)/g;
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  connectEmbedDaemon,
9
9
  embedBatchViaClient
10
- } from "./chunk-2GJWENBT.js";
10
+ } from "./chunk-Y35YW6EL.js";
11
11
  import {
12
12
  EXE_AI_DIR
13
13
  } from "./chunk-4GXRETYL.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getClient
3
- } from "./chunk-TGOJR5SS.js";
3
+ } from "./chunk-YCEJCFU5.js";
4
4
 
5
5
  // src/lib/session-kill-telemetry.ts
6
6
  import crypto from "crypto";
@@ -1,3 +1,7 @@
1
+ import {
2
+ createCRMWebhookHandler,
3
+ parseTwentyWebhook
4
+ } from "./chunk-TRQJQYG5.js";
1
5
  import {
2
6
  WhatsAppAdapter
3
7
  } from "./chunk-ECSNSHZ7.js";
@@ -16,10 +20,6 @@ import {
16
20
  import {
17
21
  IMessageAdapter
18
22
  } from "./chunk-FLSASUV3.js";
19
- import {
20
- createCRMWebhookHandler,
21
- parseTwentyWebhook
22
- } from "./chunk-OYU7TCBG.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-2DWKMJPE.js";
45
+ } from "./chunk-MSUJ3UBS.js";
46
46
  import {
47
47
  OllamaProvider
48
48
  } from "./chunk-FWFFZGSC.js";
@@ -111,7 +111,7 @@ function releaseBackfillLock() {
111
111
  }
112
112
  async function getTaskAwareCapacity() {
113
113
  const { getClient } = await import("./lib/database.js");
114
- const { sessionScopeFilter } = await import("./task-scope-AI62AIPT.js");
114
+ const { sessionScopeFilter } = await import("./task-scope-JREB33TH.js");
115
115
  const client = getClient();
116
116
  const scope = sessionScopeFilter();
117
117
  const result = await client.execute({
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  loadEmployees
3
- } from "./chunk-TGOJR5SS.js";
3
+ } from "./chunk-YCEJCFU5.js";
4
4
 
5
5
  // src/lib/agent-symlinks.ts
6
6
  import os from "os";
@@ -2,7 +2,7 @@ import {
2
2
  listWorkflowDefinitions,
3
3
  runWorkflow,
4
4
  startWorkflow
5
- } from "./chunk-OF6TXNOC.js";
5
+ } from "./chunk-AJN3W6XB.js";
6
6
  import {
7
7
  initCRMBridge
8
8
  } from "./chunk-ONKIWA3R.js";
@@ -11,7 +11,7 @@ import {
11
11
  } from "./chunk-MP2AFCGL.js";
12
12
  import {
13
13
  getClient
14
- } from "./chunk-TGOJR5SS.js";
14
+ } from "./chunk-YCEJCFU5.js";
15
15
 
16
16
  // src/gateway/router.ts
17
17
  function matchesPlatform(msgPlatform, matchPlatform) {