@askexenow/exe-os 0.9.347 → 0.9.348

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 (311) hide show
  1. package/deploy/compose/cloudflared/config.yml.example +9 -6
  2. package/deploy/compose/docker-compose.yml +16 -9
  3. package/deploy/compose/sso-edge/default.conf.template +26 -0
  4. package/deploy/stack-manifests/v0.9.json +1 -1
  5. package/dist/{active-agent-CMY7WTJL.js → active-agent-PX6KAEEQ.js} +4 -3
  6. package/dist/{active-agent-US4KO4LV.js → active-agent-QVLZKWR2.js} +4 -3
  7. package/dist/{agentic-ontology-3Y37SQYR.js → agentic-ontology-6MEXY5L7.js} +1 -1
  8. package/dist/{backfill-metadata-GK66TYQE.js → backfill-metadata-MCFBGWKX.js} +6 -5
  9. package/dist/{backup-verify-72XBKKHL.js → backup-verify-RGB3KKD4.js} +2 -1
  10. package/dist/{behaviors-G7TR6LBM.js → behaviors-6GI6VND2.js} +7 -6
  11. package/dist/bin/agentic-ontology-backfill.js +7 -6
  12. package/dist/bin/agentic-reflection-backfill.js +8 -7
  13. package/dist/bin/agentic-semantic-label.js +7 -6
  14. package/dist/bin/backfill-conversations.js +6 -5
  15. package/dist/bin/backfill-responses.js +6 -5
  16. package/dist/bin/backfill-vectors.js +7 -6
  17. package/dist/bin/bulk-sync-postgres.js +11 -10
  18. package/dist/bin/cc-doctor.js +5 -4
  19. package/dist/bin/cleanup-stale-review-tasks.js +14 -13
  20. package/dist/bin/cli.js +16 -16
  21. package/dist/bin/deferred-daemon-restart.js +105 -91
  22. package/dist/bin/exe-agent-config.js +4 -3
  23. package/dist/bin/exe-agent.js +6 -5
  24. package/dist/bin/exe-assign.js +7 -6
  25. package/dist/bin/exe-boot.js +29 -28
  26. package/dist/bin/exe-call.js +6 -5
  27. package/dist/bin/exe-cloud.js +26 -15
  28. package/dist/bin/exe-config-dump.js +4 -3
  29. package/dist/bin/exe-dispatch.js +14 -13
  30. package/dist/bin/exe-doctor.js +5 -4
  31. package/dist/bin/exe-export-behaviors.js +9 -8
  32. package/dist/bin/exe-forget.js +8 -7
  33. package/dist/bin/exe-gateway.js +8 -7
  34. package/dist/bin/exe-healthcheck.js +5 -4
  35. package/dist/bin/exe-heartbeat.js +16 -15
  36. package/dist/bin/exe-kill.js +18 -17
  37. package/dist/bin/exe-launch-agent.js +24 -23
  38. package/dist/bin/exe-memory-reads.js +6 -5
  39. package/dist/bin/exe-new-employee.js +10 -9
  40. package/dist/bin/exe-os-mcp-proxy.js +4 -3
  41. package/dist/bin/exe-pending-messages.js +15 -14
  42. package/dist/bin/exe-pending-notifications.js +14 -13
  43. package/dist/bin/exe-pending-reviews.js +14 -13
  44. package/dist/bin/exe-rename.js +6 -5
  45. package/dist/bin/exe-review.js +17 -16
  46. package/dist/bin/exe-search.js +7 -6
  47. package/dist/bin/exe-session-cleanup.js +18 -17
  48. package/dist/bin/exe-settings.js +12 -11
  49. package/dist/bin/exe-start-codex.js +97 -15
  50. package/dist/bin/exe-start-opencode.js +10 -9
  51. package/dist/bin/exe-status.js +15 -14
  52. package/dist/bin/exe-support.js +3 -3
  53. package/dist/bin/exe-team.js +4 -3
  54. package/dist/bin/git-sweep.js +15 -14
  55. package/dist/bin/graph-backfill.js +7 -6
  56. package/dist/bin/graph-export.js +7 -6
  57. package/dist/bin/import-history.js +10 -9
  58. package/dist/bin/install.js +71 -70
  59. package/dist/bin/intercom-check.js +4 -4
  60. package/dist/bin/mcp-sessions.js +2 -2
  61. package/dist/bin/orchestration-metrics.js +5 -4
  62. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  63. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  64. package/dist/bin/pre-publish.js +1 -1
  65. package/dist/bin/reconcile-backlog.js +2 -2
  66. package/dist/bin/registry-proxy.js +1 -1
  67. package/dist/bin/scan-tasks.js +14 -13
  68. package/dist/bin/setup.js +1 -1
  69. package/dist/bin/shard-migrate.js +6 -5
  70. package/dist/bin/stack-update.js +7 -6
  71. package/dist/bin/vps-health-gate.js +1 -1
  72. package/dist/{boot-generation-KG43UYL4.js → boot-generation-FB2J53IG.js} +4 -3
  73. package/dist/{boot-review-sections-56BRURLM.js → boot-review-sections-QF5MZGJI.js} +13 -12
  74. package/dist/{capability-cards-4MN3IVJO.js → capability-cards-YADEM2KN.js} +3 -2
  75. package/dist/{capacity-monitor-4NJTN5QQ.js → capacity-monitor-CG2IGONS.js} +15 -14
  76. package/dist/{catchup-brief-AMBXLHXU.js → catchup-brief-QFVNMTU5.js} +18 -17
  77. package/dist/{chunk-PYNWGP72.js → chunk-23O6LHII.js} +1 -1
  78. package/dist/{chunk-VDJUATQJ.js → chunk-27REQ7KR.js} +1 -1
  79. package/dist/{chunk-G4HOMQY7.js → chunk-2AD2GAPC.js} +1 -1
  80. package/dist/{chunk-QZA5NG6Z.js → chunk-2WJYLXPF.js} +1 -1
  81. package/dist/{chunk-G6IANQKD.js → chunk-43RTUMUT.js} +1 -1
  82. package/dist/{chunk-WOKPKILI.js → chunk-5C46Y4AK.js} +1 -1
  83. package/dist/{chunk-IMHERTUL.js → chunk-5KCC26FB.js} +2 -2
  84. package/dist/{chunk-XRX7F7XW.js → chunk-5RPCWLXE.js} +1 -1
  85. package/dist/{chunk-DZJL775P.js → chunk-6GSYN262.js} +1 -1
  86. package/dist/{chunk-UMK7TNCF.js → chunk-6JQTSKDR.js} +157 -65
  87. package/dist/{chunk-2BOEUPL6.js → chunk-6QRS3IZF.js} +1 -1
  88. package/dist/{chunk-M722B4DA.js → chunk-6WFXNQDJ.js} +1 -1
  89. package/dist/{chunk-LUQ57SRM.js → chunk-7QRMFYOV.js} +23 -9
  90. package/dist/{chunk-I3XN3G3H.js → chunk-7WQ3WHPW.js} +113 -113
  91. package/dist/{chunk-3EMAJBBN.js → chunk-A3YHWWE6.js} +1 -1
  92. package/dist/{chunk-JLYQD2XF.js → chunk-A42356G7.js} +1 -1
  93. package/dist/{chunk-EYWB6526.js → chunk-A43SIGAO.js} +3 -3
  94. package/dist/{chunk-Z7DWUHDP.js → chunk-AFY4V4N3.js} +1 -1
  95. package/dist/{chunk-MT6YGWJ6.js → chunk-AMC2OPYP.js} +1 -1
  96. package/dist/{chunk-SUG5P42S.js → chunk-AQ24P2O7.js} +4 -4
  97. package/dist/{chunk-T7ZLJZAO.js → chunk-AUILJKSM.js} +2 -2
  98. package/dist/{chunk-PRUZNNEF.js → chunk-AXNUMBLO.js} +3 -3
  99. package/dist/{chunk-PEVOVM3W.js → chunk-BOQUXG7N.js} +3 -3
  100. package/dist/{chunk-ILLBFFY6.js → chunk-BUUGFQHL.js} +2 -2
  101. package/dist/{chunk-VMTKHDFM.js → chunk-CCOKYSJA.js} +3 -3
  102. package/dist/{chunk-YSTIPPZK.js → chunk-DAODOSH4.js} +1 -1
  103. package/dist/{chunk-LJGHAZYU.js → chunk-DJYJDK53.js} +7 -7
  104. package/dist/{chunk-K3ZHVW26.js → chunk-DXMTJJP3.js} +4 -4
  105. package/dist/{chunk-IRMJHC23.js → chunk-E3BNUQHW.js} +2 -2
  106. package/dist/{chunk-CNIAEIWV.js → chunk-EFHGK6JP.js} +1 -1
  107. package/dist/{chunk-FM4ZI5ZP.js → chunk-FE6WBI2M.js} +5 -1
  108. package/dist/{chunk-DBDMZTU5.js → chunk-FENYNW52.js} +1 -1
  109. package/dist/{chunk-FJPZ7KHN.js → chunk-FFCPSPNK.js} +1 -1
  110. package/dist/{chunk-FAH7JUNS.js → chunk-FPK753IZ.js} +10 -10
  111. package/dist/{chunk-F6NABQJ4.js → chunk-GA655CUD.js} +2 -2
  112. package/dist/{chunk-BRVDGE7N.js → chunk-GJ6KIHOM.js} +4 -4
  113. package/dist/{chunk-2ESYTX6F.js → chunk-GKNWKQFY.js} +1 -1
  114. package/dist/{chunk-3HGAAWNZ.js → chunk-GLOWJP5H.js} +2 -2
  115. package/dist/{chunk-DNN27P35.js → chunk-H3TA23PH.js} +4 -4
  116. package/dist/{chunk-TQSAPNFW.js → chunk-H5QNVWU4.js} +18 -10
  117. package/dist/{chunk-PO64LWTM.js → chunk-HL24OHHS.js} +9 -9
  118. package/dist/{chunk-FDOURKUO.js → chunk-HYZE3MNS.js} +1 -1
  119. package/dist/{chunk-3T4BRBSH.js → chunk-JORPYG4O.js} +1 -1
  120. package/dist/{chunk-2LZMDOC6.js → chunk-JW5XS35A.js} +5 -5
  121. package/dist/{chunk-3LQMUO5D.js → chunk-KIMAQNSM.js} +3 -3
  122. package/dist/{chunk-AHR3F7HW.js → chunk-KZUU6MNF.js} +1 -1
  123. package/dist/{chunk-VALVWYAK.js → chunk-L36RX54F.js} +5 -5
  124. package/dist/{chunk-UO56K55W.js → chunk-M7PBRIRH.js} +1 -1
  125. package/dist/{chunk-4VLRGKNY.js → chunk-MGMXYI7Y.js} +2 -2
  126. package/dist/{chunk-MESFJRIT.js → chunk-MH5HWMVH.js} +1 -1
  127. package/dist/{chunk-ZK53K7OR.js → chunk-MMOONM6D.js} +1 -1
  128. package/dist/{chunk-CQN4IKRB.js → chunk-MMXIE6HV.js} +1 -1
  129. package/dist/{chunk-VA3ZUIWG.js → chunk-MOZY4IQO.js} +1 -1
  130. package/dist/{chunk-VTMSGELG.js → chunk-MVZLF27P.js} +2 -2
  131. package/dist/{chunk-H44V3Y6D.js → chunk-NY6DU5RB.js} +1 -1
  132. package/dist/{chunk-F4ZW76IX.js → chunk-O522M4YZ.js} +1 -1
  133. package/dist/{chunk-7667KFAG.js → chunk-OBWIVRD6.js} +1 -1
  134. package/dist/{chunk-VDKDW5IA.js → chunk-PAXAF2UY.js} +29 -9
  135. package/dist/{chunk-QFGUAJ6T.js → chunk-PBLDPW4U.js} +2 -2
  136. package/dist/{chunk-D74XYSA3.js → chunk-QCQT5RXR.js} +5 -1
  137. package/dist/{chunk-ZY2ABBVR.js → chunk-QNKR7WEL.js} +20 -6
  138. package/dist/{chunk-XOVHWGPV.js → chunk-RBRGSOK5.js} +1 -1
  139. package/dist/{chunk-Y7637VDZ.js → chunk-RFRUDXOI.js} +2 -2
  140. package/dist/{chunk-7AD4GSRT.js → chunk-SLH2743O.js} +3 -3
  141. package/dist/{chunk-OE6D2IJI.js → chunk-SMQ642D3.js} +4 -4
  142. package/dist/{chunk-4K2PLZKF.js → chunk-SQ4WACH4.js} +1 -1
  143. package/dist/{chunk-HWK5GKE6.js → chunk-TF5E6O5Q.js} +1 -1
  144. package/dist/{chunk-KWRO4RMT.js → chunk-TLWYOMSS.js} +3 -3
  145. package/dist/{chunk-XDVLCS64.js → chunk-UAKGNQWE.js} +1 -1
  146. package/dist/{chunk-JYFBQH5O.js → chunk-UTQWVRU6.js} +5 -5
  147. package/dist/{chunk-FBSAXAXQ.js → chunk-WL3IQJKN.js} +3 -3
  148. package/dist/{chunk-BMTUSSHV.js → chunk-WUMWXU6B.js} +1 -1
  149. package/dist/{chunk-W7HKGDJO.js → chunk-WWT3E7DO.js} +3 -3
  150. package/dist/{chunk-YJK4JZ35.js → chunk-WZJ3VYRJ.js} +3 -3
  151. package/dist/{chunk-QIALRZZG.js → chunk-X6VEQ7MC.js} +1 -1
  152. package/dist/{chunk-W666YWFU.js → chunk-Y3JXLIZV.js} +3 -3
  153. package/dist/{chunk-M3NSYVE3.js → chunk-YAIFZXOM.js} +5 -5
  154. package/dist/{chunk-ZYNQXN73.js → chunk-YM6GJM2F.js} +4 -4
  155. package/dist/chunk-YMUZWC33.js +8 -0
  156. package/dist/{chunk-7DAJHBFH.js → chunk-YTPCJLEL.js} +1 -1
  157. package/dist/{chunk-53VXPGZ2.js → chunk-Z52QQB4Z.js} +2 -2
  158. package/dist/{chunk-EWWCMMES.js → chunk-ZXSFUR77.js} +16 -16
  159. package/dist/{cleanup-graph-garbage-5HKGGUS3.js → cleanup-graph-garbage-XTSBQXD6.js} +8 -7
  160. package/dist/{cloud-sync-shutdown-2JAEIAW6.js → cloud-sync-shutdown-A2QB74YM.js} +3 -2
  161. package/dist/{co-activation-SYSIFY66.js → co-activation-S2FVGMQP.js} +3 -2
  162. package/dist/{co-occurrence-QZFT5ORJ.js → co-occurrence-VQB6U5ME.js} +6 -5
  163. package/dist/{conversation-entity-extractor-YC3A2ODD.js → conversation-entity-extractor-YF3ZLTEJ.js} +3 -3
  164. package/dist/{crdt-sync-W45AKWCU.js → crdt-sync-2SGCDWC3.js} +1 -1
  165. package/dist/{crm-webhook-ZAGDYWB3.js → crm-webhook-P64SXEHD.js} +2 -2
  166. package/dist/{cto-delegation-gate-PLSICYEK.js → cto-delegation-gate-6KLGT2LB.js} +13 -12
  167. package/dist/{daemon-orchestration-QX3FS4L2.js → daemon-orchestration-JQGKEWPD.js} +18 -17
  168. package/dist/{doc-graph-extractor-NK6CP4LE.js → doc-graph-extractor-DCJMATVZ.js} +6 -5
  169. package/dist/{documents-FGXV6BDL.js → documents-7EPH3VPE.js} +7 -6
  170. package/dist/{dreaming-YIESEME7.js → dreaming-O4P2W5E5.js} +17 -16
  171. package/dist/{exe-drift-TLY7MCXW.js → exe-drift-ED7FBS2C.js} +4 -3
  172. package/dist/{exe-export-32J4WPS6.js → exe-export-YJI4USGZ.js} +9 -8
  173. package/dist/{exe-import-MDEWE325.js → exe-import-SUTAYKUW.js} +9 -8
  174. package/dist/{exe-key-NW42YUA3.js → exe-key-CRSDAOZD.js} +69 -68
  175. package/dist/{exe-snapshot-NNEEAGYI.js → exe-snapshot-KB4YYDCA.js} +18 -17
  176. package/dist/{fast-db-init-O7AECNTB.js → fast-db-init-3K2PV6GJ.js} +1 -1
  177. package/dist/{founder-context-3WDZ6LIS.js → founder-context-JHHFM4GF.js} +2 -2
  178. package/dist/gateway/index.js +9 -8
  179. package/dist/{git-main-guard-UZP3KXYI.js → git-main-guard-TGK3RQY3.js} +1 -1
  180. package/dist/{git-staleness-GEJ7U4MW.js → git-staleness-YPHGWE3B.js} +3 -2
  181. package/dist/{global-procedures-HY3BJXY4.js → global-procedures-PEWDBSPJ.js} +5 -4
  182. package/dist/{graph-auto-extract-DBAIFNDK.js → graph-auto-extract-7OJYYV4G.js} +6 -5
  183. package/dist/{graph-rag-LWKKHY72.js → graph-rag-YFITUAVO.js} +3 -3
  184. package/dist/{hook-prefetch-KNHZNI4L.js → hook-prefetch-O6ZCZCTX.js} +14 -13
  185. package/dist/hooks/bug-report-worker.js +16 -15
  186. package/dist/hooks/codex-stop-task-finalizer.js +17 -16
  187. package/dist/hooks/commit-complete.js +16 -15
  188. package/dist/hooks/error-recall.js +8 -7
  189. package/dist/hooks/exe-heartbeat-hook.js +4 -3
  190. package/dist/hooks/ingest.js +7 -6
  191. package/dist/hooks/instructions-loaded.js +5 -4
  192. package/dist/hooks/manifest.json +19 -19
  193. package/dist/hooks/notification.js +5 -4
  194. package/dist/hooks/post-compact.js +15 -14
  195. package/dist/hooks/post-tool-combined.js +9 -9
  196. package/dist/hooks/pre-compact.js +16 -15
  197. package/dist/hooks/pre-tool-use.js +36 -38
  198. package/dist/hooks/prompt-submit.js +28 -27
  199. package/dist/hooks/session-end.js +20 -19
  200. package/dist/hooks/session-start.js +13 -13
  201. package/dist/hooks/stop.js +19 -18
  202. package/dist/hooks/subagent-stop.js +17 -16
  203. package/dist/hooks/summary-worker.js +20 -19
  204. package/dist/index.js +23 -22
  205. package/dist/{installer-R2S64Q6T.js → installer-3ONNP5JV.js} +6 -5
  206. package/dist/{installer-AWALPCAX.js → installer-CY5PN7TN.js} +6 -5
  207. package/dist/{installer-SQF5I6YS.js → installer-N4QXGINR.js} +6 -5
  208. package/dist/{intercom-queue-SJL4G3J5.js → intercom-queue-A52WQOCD.js} +13 -12
  209. package/dist/lib/agent-config.js +1 -1
  210. package/dist/lib/cloud-sync.js +11 -10
  211. package/dist/lib/consolidation.js +8 -7
  212. package/dist/lib/database.js +5 -2
  213. package/dist/lib/db-backup.js +2 -1
  214. package/dist/lib/db-checkpoint-worker.js +9 -0
  215. package/dist/lib/db-read-worker-client.js +21 -8
  216. package/dist/lib/db-read-worker.js +15 -0
  217. package/dist/lib/db-write-worker-client.js +4 -1
  218. package/dist/lib/db-write-worker.js +21 -6
  219. package/dist/lib/db.js +5 -2
  220. package/dist/lib/device-registry.js +1 -1
  221. package/dist/lib/employee-templates.js +6 -5
  222. package/dist/lib/employees.js +3 -2
  223. package/dist/lib/exe-daemon.js +211 -71
  224. package/dist/lib/hybrid-search.js +7 -6
  225. package/dist/lib/identity.js +3 -2
  226. package/dist/lib/license.js +2 -2
  227. package/dist/lib/messaging.js +14 -13
  228. package/dist/lib/registry-proxy.js +1 -1
  229. package/dist/lib/reminders.js +4 -3
  230. package/dist/lib/schedules.js +7 -6
  231. package/dist/lib/session-registry.js +5 -4
  232. package/dist/lib/skill-learning.js +8 -7
  233. package/dist/lib/store.js +6 -5
  234. package/dist/lib/task-router.js +4 -3
  235. package/dist/lib/tasks.js +15 -14
  236. package/dist/lib/tmux-routing.js +13 -12
  237. package/dist/lib/token-spend.js +4 -3
  238. package/dist/{license-gate-ZYZQGPKW.js → license-gate-ZRORTAQ2.js} +3 -3
  239. package/dist/{license-sync-GU3L66JR.js → license-sync-CQHBDUQE.js} +2 -2
  240. package/dist/mcp/register-tools.js +68 -67
  241. package/dist/mcp/server.js +69 -68
  242. package/dist/mcp/tools/complete-reminder.js +5 -4
  243. package/dist/mcp/tools/create-reminder.js +5 -4
  244. package/dist/mcp/tools/create-task.js +17 -16
  245. package/dist/mcp/tools/deactivate-behavior.js +9 -8
  246. package/dist/mcp/tools/list-reminders.js +5 -4
  247. package/dist/mcp/tools/list-tasks.js +17 -16
  248. package/dist/mcp/tools/send-message.js +16 -15
  249. package/dist/mcp/tools/update-task.js +16 -15
  250. package/dist/{mcp-http-config-BV2GO7P4.js → mcp-http-config-2A6HKQP5.js} +4 -3
  251. package/dist/{mcp-session-identity-3QQPOGNI.js → mcp-session-identity-OPRX32H5.js} +13 -12
  252. package/dist/{memory-cards-NISTO4EP.js → memory-cards-GFO2CSPV.js} +6 -5
  253. package/dist/{memory-graph-extractor-CO3R5K7L.js → memory-graph-extractor-2Z72HN5P.js} +7 -6
  254. package/dist/{memory-poisoning-defense-QZCG3BMC.js → memory-poisoning-defense-WZJ52KXT.js} +3 -2
  255. package/dist/{memory-pressure-watchdog-VWQM3GXR.js → memory-pressure-watchdog-IG7VRFIX.js} +14 -13
  256. package/dist/{memory-reflection-G32OQ3X3.js → memory-reflection-LTRHDGUL.js} +3 -2
  257. package/dist/{notification-ledger-C3J4HFMM.js → notification-ledger-KSCPGLQG.js} +14 -13
  258. package/dist/{notifications-JIARMDZ5.js → notifications-YKHZPCXU.js} +13 -12
  259. package/dist/{orchestration-events-AL7AWHBX.js → orchestration-events-HAFDPTLV.js} +4 -3
  260. package/dist/{orchestrator-LWVALDUO.js → orchestrator-4MZEQULR.js} +15 -14
  261. package/dist/{pipeline-router-HK5BI3LQ.js → pipeline-router-RSRJPZNI.js} +4 -3
  262. package/dist/{plan-limits-4LMRHOUW.js → plan-limits-5QYYPIPT.js} +6 -5
  263. package/dist/{platform-procedures-G44IYUM2.js → platform-procedures-DZ6YABEK.js} +1 -1
  264. package/dist/{projection-worker-Z5U6UWCE.js → projection-worker-SKAMSZJF.js} +2 -2
  265. package/dist/{prospective-memory-UDQWFP5Y.js → prospective-memory-V7LFCPU4.js} +3 -2
  266. package/dist/{reranker-FX4QOK2G.js → reranker-HXMJ7SKW.js} +1 -1
  267. package/dist/{retrieval-health-2LIKKDMW.js → retrieval-health-4NCBHUUS.js} +1 -1
  268. package/dist/{review-polling-B2EP4KGE.js → review-polling-KQUALBEU.js} +14 -13
  269. package/dist/runtime/index.js +17 -16
  270. package/dist/{session-events-HVYX42HD.js → session-events-3KL735DZ.js} +14 -13
  271. package/dist/{session-kill-telemetry-BHKUHSK2.js → session-kill-telemetry-KVRGLYVI.js} +14 -13
  272. package/dist/{session-scope-TXCBVOSN.js → session-scope-LBG6DT5O.js} +13 -12
  273. package/dist/{setup-wizard-QMKBAK6B.js → setup-wizard-UL3AKI6E.js} +1 -1
  274. package/dist/{skill-refinement-G6BPD6QK.js → skill-refinement-6HPISXQC.js} +4 -3
  275. package/dist/{stack-update-CBP5S5BG.js → stack-update-WBDTJJEF.js} +7 -3
  276. package/dist/{steward-gate-CGP6U7KC.js → steward-gate-CWPD4HEK.js} +4 -3
  277. package/dist/{support-inbox-3ATAP7KN.js → support-inbox-HRIHHKPU.js} +3 -3
  278. package/dist/{task-enforcement-YINAK3T6.js → task-enforcement-OAOL7XFL.js} +14 -13
  279. package/dist/{task-scope-5OSP2MUP.js → task-scope-PSVAE3EM.js} +13 -12
  280. package/dist/{tasks-crud-PTN36B5F.js → tasks-crud-TLELWWUL.js} +13 -12
  281. package/dist/{tasks-notify-QCJXVZCJ.js → tasks-notify-7Q2XTDZ7.js} +14 -13
  282. package/dist/{tasks-review-ZY3S65OV.js → tasks-review-S6QB5KGS.js} +13 -12
  283. package/dist/{telemetry-upload-Z47OEELW.js → telemetry-upload-LTL5SW24.js} +8 -7
  284. package/dist/{token-budget-B3OKOYDA.js → token-budget-SK32GKFZ.js} +4 -3
  285. package/dist/{tool-telemetry-KIHAHUPT.js → tool-telemetry-QJGJAHOC.js} +1 -1
  286. package/dist/tui/App.js +22 -21
  287. package/dist/{tui-data-YIFXHE2D.js → tui-data-3JSV56ME.js} +13 -12
  288. package/dist/{update-support-IZUWVU2U.js → update-support-LMPGWJVG.js} +10 -9
  289. package/dist/{work-state-heartbeat-WIURKX3N.js → work-state-heartbeat-MQQOCU54.js} +1 -1
  290. package/dist/{worker-gate-NZRA426F.js → worker-gate-P2O64XMH.js} +1 -1
  291. package/dist/{workflow-engine-LAB6TGBZ.js → workflow-engine-BLLQKA3O.js} +2 -2
  292. package/dist/{worktree-TBUUZJHY.js → worktree-FJZXHDCJ.js} +5 -4
  293. package/dist/{worktree-sweep-LXDNIZPM.js → worktree-sweep-SW4AG6JR.js} +6 -5
  294. package/package.json +1 -1
  295. package/release-notes.json +26 -37
  296. /package/dist/{chunk-QPNXYGWG.js → chunk-AQ6ECPUP.js} +0 -0
  297. /package/dist/{chunk-UVPLZ6AK.js → chunk-BTP7BORU.js} +0 -0
  298. /package/dist/{chunk-4P7NUL4D.js → chunk-DRHXISWL.js} +0 -0
  299. /package/dist/{chunk-G4JZ22KK.js → chunk-E42D2E5F.js} +0 -0
  300. /package/dist/{chunk-MA22RV3T.js → chunk-FXZRJT3H.js} +0 -0
  301. /package/dist/{chunk-D4UCBR4O.js → chunk-GFIWADEH.js} +0 -0
  302. /package/dist/{chunk-VBHLE3TR.js → chunk-GPZQZTJB.js} +0 -0
  303. /package/dist/{chunk-FFUEDKYK.js → chunk-H4JKOLXU.js} +0 -0
  304. /package/dist/{chunk-OG2RT4IY.js → chunk-HTJKAAHD.js} +0 -0
  305. /package/dist/{chunk-MDK7E653.js → chunk-PIUDQ7P2.js} +0 -0
  306. /package/dist/{chunk-CYI2YR56.js → chunk-QUOMJKVF.js} +0 -0
  307. /package/dist/{chunk-SJLZ53ZR.js → chunk-XF2D4CDA.js} +0 -0
  308. /package/dist/{core-memory-FOW4BCPN.js → core-memory-Z7LPR3RX.js} +0 -0
  309. /package/dist/{oauth-server-OR4RAQYM.js → oauth-server-FSKABATB.js} +0 -0
  310. /package/dist/{project-boot-WP54EOAG.js → project-boot-FVSC4VQC.js} +0 -0
  311. /package/dist/{wiki-acl-4DQQCP4V.js → wiki-acl-CW2UALTJ.js} +0 -0
@@ -17,7 +17,7 @@ import {
17
17
  isWriteWorkerEnabled,
18
18
  spawnDbWriteWorker,
19
19
  writeMemoryInWorker
20
- } from "../chunk-LUQ57SRM.js";
20
+ } from "../chunk-7QRMFYOV.js";
21
21
  import {
22
22
  shouldScheduleDaemonRestartHandoff
23
23
  } from "../chunk-PWRC5XZO.js";
@@ -47,7 +47,7 @@ import {
47
47
  findScopedDuplicate,
48
48
  governMemoryRecord,
49
49
  schedulePostWriteMemoryHygiene
50
- } from "../chunk-VBHLE3TR.js";
50
+ } from "../chunk-GPZQZTJB.js";
51
51
  import "../chunk-5MOYSU5A.js";
52
52
  import "../chunk-4QCFFW2H.js";
53
53
  import "../chunk-76CJBM36.js";
@@ -99,6 +99,9 @@ import {
99
99
  logHeartbeat,
100
100
  logShutdown
101
101
  } from "../chunk-BBMTVAE3.js";
102
+ import {
103
+ isPostgresBackendEnabled
104
+ } from "../chunk-YMUZWC33.js";
102
105
  import {
103
106
  EMBEDDING_DIM
104
107
  } from "../chunk-FXU7JOXK.js";
@@ -117,7 +120,7 @@ import net from "net";
117
120
  import v8 from "v8";
118
121
  import { createServer as createHttpServer, request as httpRequest } from "http";
119
122
  import { randomUUID, timingSafeEqual } from "crypto";
120
- import { writeFileSync as writeFileSync5, unlinkSync as unlinkSync4, mkdirSync as mkdirSync5, existsSync as existsSync7, readFileSync as readFileSync6, chmodSync as chmodSync2, readdirSync, renameSync as renameSync2, statSync as statSync4 } from "fs";
123
+ import { writeFileSync as writeFileSync5, unlinkSync as unlinkSync4, mkdirSync as mkdirSync5, existsSync as existsSync7, readFileSync as readFileSync6, chmodSync as chmodSync2, readdirSync as readdirSync2, renameSync as renameSync2, statSync as statSync4 } from "fs";
121
124
  import { writeFile } from "fs/promises";
122
125
  import { execSync as execSyncNode, execFile as execFileNode } from "child_process";
123
126
  import { promisify } from "util";
@@ -153,6 +156,36 @@ function createMemoizedNpmGlobalRootResolver(execFile, log = (m) => void process
153
156
  // src/lib/exe-daemon.ts
154
157
  import path4 from "path";
155
158
  import { fileURLToPath } from "url";
159
+
160
+ // src/lib/dist-drift.ts
161
+ import { readdirSync } from "fs";
162
+ function listDistChunkFiles(distDir, readdir = readdirSync) {
163
+ try {
164
+ return readdir(distDir).filter((f) => typeof f === "string" && f.endsWith(".js")).sort();
165
+ } catch {
166
+ return [];
167
+ }
168
+ }
169
+ function snapshotDist(distDir, pkgVersion, readdir = readdirSync) {
170
+ return { version: pkgVersion, chunks: listDistChunkFiles(distDir, readdir) };
171
+ }
172
+ function detectDistDrift(boot, current) {
173
+ const versionChanged = boot.version !== "unknown" && current.version !== "unknown" && boot.version !== current.version;
174
+ const currentSet = new Set(current.chunks);
175
+ const missingChunks = current.chunks.length === 0 && boot.chunks.length > 0 ? [] : boot.chunks.filter((c) => !currentSet.has(c));
176
+ const drifted = versionChanged || missingChunks.length > 0;
177
+ let reason = null;
178
+ if (versionChanged && missingChunks.length > 0) {
179
+ reason = `version ${boot.version} -> ${current.version} and ${missingChunks.length} chunk(s) removed`;
180
+ } else if (versionChanged) {
181
+ reason = `version ${boot.version} -> ${current.version}`;
182
+ } else if (missingChunks.length > 0) {
183
+ reason = `${missingChunks.length} boot chunk(s) removed from dist`;
184
+ }
185
+ return { drifted, reason, missingChunks, versionChanged };
186
+ }
187
+
188
+ // src/lib/exe-daemon.ts
156
189
  import { fork, spawn as spawn2 } from "child_process";
157
190
  import { Worker } from "worker_threads";
158
191
 
@@ -1203,6 +1236,21 @@ var PACKAGE_VERSION = (() => {
1203
1236
  return "unknown";
1204
1237
  }
1205
1238
  })();
1239
+ var DIST_DIR = (() => {
1240
+ try {
1241
+ return fileURLToPath(new URL("..", import.meta.url));
1242
+ } catch {
1243
+ return "";
1244
+ }
1245
+ })();
1246
+ var PACKAGE_JSON_PATH = (() => {
1247
+ try {
1248
+ return fileURLToPath(new URL("../../package.json", import.meta.url));
1249
+ } catch {
1250
+ return "";
1251
+ }
1252
+ })();
1253
+ var BOOT_DIST_SNAPSHOT = snapshotDist(DIST_DIR, PACKAGE_VERSION);
1206
1254
  var _embedWorker = null;
1207
1255
  var _embedWorkerReady = false;
1208
1256
  var _embedLoadDeferrals = 0;
@@ -2079,7 +2127,7 @@ async function loadModel() {
2079
2127
  void (async () => {
2080
2128
  try {
2081
2129
  if (_storeInitialized) {
2082
- const { writeNotification } = await import("../notifications-JIARMDZ5.js");
2130
+ const { writeNotification } = await import("../notifications-YKHZPCXU.js");
2083
2131
  await writeNotification({
2084
2132
  agentId: "exe",
2085
2133
  agentRole: "system",
@@ -2195,7 +2243,7 @@ function disableEmbeddingsForInferenceTimeouts() {
2195
2243
  void (async () => {
2196
2244
  try {
2197
2245
  if (_storeInitialized) {
2198
- const { writeNotification } = await import("../notifications-JIARMDZ5.js");
2246
+ const { writeNotification } = await import("../notifications-YKHZPCXU.js");
2199
2247
  await writeNotification({
2200
2248
  agentId: "exe",
2201
2249
  agentRole: "system",
@@ -2441,7 +2489,7 @@ async function shutdown(exitCode = 0, reason = null) {
2441
2489
  dbBytes = dbPath ? statSync4(dbPath).size : 0;
2442
2490
  } catch {
2443
2491
  }
2444
- const { getAvailableMemoryBytesSync } = await import("../memory-pressure-watchdog-VWQM3GXR.js");
2492
+ const { getAvailableMemoryBytesSync } = await import("../memory-pressure-watchdog-IG7VRFIX.js");
2445
2493
  const freeBytes = getAvailableMemoryBytesSync();
2446
2494
  if (shouldSkipBackupUnderMemoryPressure(freeBytes, dbBytes)) {
2447
2495
  memoryGateSkip = true;
@@ -2494,7 +2542,7 @@ async function shutdown(exitCode = 0, reason = null) {
2494
2542
  `);
2495
2543
  }
2496
2544
  try {
2497
- const { stopProjectionWorker } = await import("../projection-worker-Z5U6UWCE.js");
2545
+ const { stopProjectionWorker } = await import("../projection-worker-SKAMSZJF.js");
2498
2546
  stopProjectionWorker();
2499
2547
  } catch {
2500
2548
  }
@@ -2590,7 +2638,7 @@ async function handleHealthCheck(socket, requestId) {
2590
2638
  let pipelineStatus = "unknown";
2591
2639
  if (dbConnected) {
2592
2640
  try {
2593
- await import("../pipeline-router-HK5BI3LQ.js");
2641
+ await import("../pipeline-router-RSRJPZNI.js");
2594
2642
  pipelineStatus = "ok";
2595
2643
  } catch {
2596
2644
  pipelineStatus = "unavailable";
@@ -2791,7 +2839,7 @@ function persistIngestOutbox(req) {
2791
2839
  async function drainIngestOutbox() {
2792
2840
  try {
2793
2841
  if (!existsSync7(INGEST_OUTBOX_DIR)) return;
2794
- const files = readdirSync(INGEST_OUTBOX_DIR).filter((f) => f.endsWith(".json")).sort().slice(0, 500);
2842
+ const files = readdirSync2(INGEST_OUTBOX_DIR).filter((f) => f.endsWith(".json")).sort().slice(0, 500);
2795
2843
  for (const file of files) {
2796
2844
  const fullPath = path4.join(INGEST_OUTBOX_DIR, file);
2797
2845
  try {
@@ -3022,7 +3070,7 @@ async function _writeMemoryRecordInner(entry, syncOnly = false) {
3022
3070
  const vRow = await client.execute({ sql: "SELECT version FROM memories WHERE id = ?", args: [id] });
3023
3071
  const version = Number(vRow.rows[0]?.version) || 0;
3024
3072
  try {
3025
- const { insertOntologyForMemory } = await import("../agentic-ontology-3Y37SQYR.js");
3073
+ const { insertOntologyForMemory } = await import("../agentic-ontology-6MEXY5L7.js");
3026
3074
  await insertOntologyForMemory({
3027
3075
  id,
3028
3076
  agent_id: record.agent_id,
@@ -3832,7 +3880,7 @@ async function startMcpHttpServer() {
3832
3880
  clearBootstrapFailureMarker();
3833
3881
  setBootPhase("db_ready");
3834
3882
  _storeInitialized = true;
3835
- const { initLicenseGate, getCachedLicenseGate } = await import("../license-gate-ZYZQGPKW.js");
3883
+ const { initLicenseGate, getCachedLicenseGate } = await import("../license-gate-ZRORTAQ2.js");
3836
3884
  const gateResult = await initLicenseGate();
3837
3885
  if (!gateResult.hasKey) {
3838
3886
  process.stderr.write(
@@ -3847,7 +3895,7 @@ async function startMcpHttpServer() {
3847
3895
  let _cachedWrapTelemetry = null;
3848
3896
  async function getWrapTelemetry() {
3849
3897
  if (!_cachedWrapTelemetry) {
3850
- const { wrapServerWithTelemetry } = await import("../tool-telemetry-KIHAHUPT.js");
3898
+ const { wrapServerWithTelemetry } = await import("../tool-telemetry-QJGJAHOC.js");
3851
3899
  _cachedWrapTelemetry = wrapServerWithTelemetry;
3852
3900
  }
3853
3901
  return _cachedWrapTelemetry;
@@ -3919,7 +3967,7 @@ async function startMcpHttpServer() {
3919
3967
  const expectedBuf = Buffer.from(_daemonToken);
3920
3968
  if (tokenBuf.length === expectedBuf.length && timingSafeEqual(tokenBuf, expectedBuf)) return true;
3921
3969
  try {
3922
- const { verifyAccessToken } = await import("../oauth-server-OR4RAQYM.js");
3970
+ const { verifyAccessToken } = await import("../oauth-server-FSKABATB.js");
3923
3971
  const result = verifyAccessToken(token);
3924
3972
  return result.valid;
3925
3973
  } catch {
@@ -4172,7 +4220,7 @@ async function startMcpHttpServer() {
4172
4220
  return;
4173
4221
  }
4174
4222
  try {
4175
- const { handleOAuthRoute } = await import("../oauth-server-OR4RAQYM.js");
4223
+ const { handleOAuthRoute } = await import("../oauth-server-FSKABATB.js");
4176
4224
  const handled = await handleOAuthRoute(req, res, url, MCP_HTTP_PORT);
4177
4225
  if (handled) return;
4178
4226
  } catch (err) {
@@ -4300,7 +4348,7 @@ async function startMcpHttpServer() {
4300
4348
  contextPct: body.context_pct
4301
4349
  });
4302
4350
  if (body.context_pct !== void 0 && body.context_pct > 70) {
4303
- void import("../orchestration-events-AL7AWHBX.js").then(({ recordOrchestrationEventBestEffort: recordOE }) => {
4351
+ void import("../orchestration-events-HAFDPTLV.js").then(({ recordOrchestrationEventBestEffort: recordOE }) => {
4304
4352
  recordOE({
4305
4353
  eventType: "context.pressure",
4306
4354
  source: "exe-daemon.heartbeat",
@@ -4385,7 +4433,7 @@ async function startMcpHttpServer() {
4385
4433
  let sessionHint = req.headers["x-exe-session-name"] || req.headers["x-exe-session"] || "";
4386
4434
  if (sessionHint) {
4387
4435
  try {
4388
- const { sanitizeSessionHintHeader, rejectForgedSessionHint } = await import("../mcp-session-identity-3QQPOGNI.js");
4436
+ const { sanitizeSessionHintHeader, rejectForgedSessionHint } = await import("../mcp-session-identity-OPRX32H5.js");
4389
4437
  const rawHint = sessionHint;
4390
4438
  sessionHint = sanitizeSessionHintHeader(sessionHint);
4391
4439
  if (!sessionHint) {
@@ -4424,7 +4472,7 @@ async function startMcpHttpServer() {
4424
4472
  try {
4425
4473
  const liveSessions = await getTmuxSessionsAsync();
4426
4474
  const paneCommands = await getPaneCommandsAsync();
4427
- const { resolveMcpSessionHint } = await import("../mcp-session-identity-3QQPOGNI.js");
4475
+ const { resolveMcpSessionHint } = await import("../mcp-session-identity-OPRX32H5.js");
4428
4476
  let registrySessions = [];
4429
4477
  try {
4430
4478
  const { listSessions: listRegistrySessions } = await import("./session-registry.js");
@@ -4561,7 +4609,7 @@ async function startMcpHttpServer() {
4561
4609
  bindLive = await getTmuxSessionsAsync();
4562
4610
  } catch {
4563
4611
  }
4564
- const { isLauncherCorroboratedIdentity } = await import("../mcp-session-identity-3QQPOGNI.js");
4612
+ const { isLauncherCorroboratedIdentity } = await import("../mcp-session-identity-OPRX32H5.js");
4565
4613
  const corroborated = isLauncherCorroboratedIdentity({
4566
4614
  agentId,
4567
4615
  registrySessions: bindRegistry,
@@ -4804,7 +4852,7 @@ async function startMcpHttpServer() {
4804
4852
  }
4805
4853
  }
4806
4854
  try {
4807
- const { reconcileHintWithRegistryIdentity } = await import("../mcp-session-identity-3QQPOGNI.js");
4855
+ const { reconcileHintWithRegistryIdentity } = await import("../mcp-session-identity-OPRX32H5.js");
4808
4856
  const { listSessions: listRegistrySessions } = await import("./session-registry.js");
4809
4857
  const recon = reconcileHintWithRegistryIdentity({
4810
4858
  agentId,
@@ -4984,15 +5032,31 @@ var _storeInitialized = false;
4984
5032
  async function ensureStoreForPolling() {
4985
5033
  if (_storeInitialized) return true;
4986
5034
  try {
4987
- const { initDatabase, isInitialized, ensureSchema } = await import("./database.js");
5035
+ const { initDatabase, initPostgresOnlyDatabase, isInitialized, ensureSchema } = await import("./database.js");
4988
5036
  if (!isInitialized()) {
4989
5037
  const { loadConfig } = await import("./config.js");
4990
5038
  const { getMasterKey } = await import("./keychain.js");
4991
5039
  const config = await loadConfig();
4992
5040
  const masterKey = await getMasterKey();
4993
5041
  if (!masterKey) {
4994
- if (process.env.DATABASE_URL && process.env.EXE_CLOUD_SYNC_TO_POSTGRES) {
5042
+ if (isPostgresBackendEnabled()) {
5043
+ await initPostgresOnlyDatabase();
4995
5044
  process.stderr.write("[exed] No encryption key \u2014 running in PostgreSQL-only mode (VPS)\n");
5045
+ try {
5046
+ const { spawnDbReadWorker } = await import("./db-read-worker-client.js");
5047
+ spawnDbReadWorker();
5048
+ } catch (e) {
5049
+ process.stderr.write(`[exed] DB read worker spawn failed (non-fatal): ${e instanceof Error ? e.message : String(e)}
5050
+ `);
5051
+ }
5052
+ try {
5053
+ if (isWriteWorkerEnabled()) {
5054
+ spawnDbWriteWorker();
5055
+ }
5056
+ } catch (e) {
5057
+ process.stderr.write(`[exed] DB write worker spawn failed (non-fatal): ${e instanceof Error ? e.message : String(e)}
5058
+ `);
5059
+ }
4996
5060
  _storeInitialized = true;
4997
5061
  return true;
4998
5062
  }
@@ -5001,9 +5065,9 @@ async function ensureStoreForPolling() {
5001
5065
  await initDatabase({ dbPath: config.dbPath, encryptionKey: masterKey.toString("hex") });
5002
5066
  await ensureSchema();
5003
5067
  try {
5004
- const { isLedgerEnabled } = await import("../notification-ledger-C3J4HFMM.js");
5068
+ const { isLedgerEnabled } = await import("../notification-ledger-KSCPGLQG.js");
5005
5069
  if (isLedgerEnabled()) {
5006
- const { bumpBootGeneration } = await import("../boot-generation-KG43UYL4.js");
5070
+ const { bumpBootGeneration } = await import("../boot-generation-FB2J53IG.js");
5007
5071
  const { setDaemonReadyGeneration } = await import("../daemon-ready-signal-TVCPSG7J.js");
5008
5072
  const generation = await bumpBootGeneration();
5009
5073
  setDaemonReadyGeneration(generation);
@@ -5043,13 +5107,13 @@ async function ensureStoreForPolling() {
5043
5107
  }
5044
5108
  }
5045
5109
  async function startReviewPolling() {
5046
- const polling = await import("../review-polling-B2EP4KGE.js");
5110
+ const polling = await import("../review-polling-KQUALBEU.js");
5047
5111
  const state = {
5048
5112
  lastIntercomSent: /* @__PURE__ */ new Map(),
5049
5113
  lastNudgeSent: /* @__PURE__ */ new Map(),
5050
5114
  intervalMs: REVIEW_POLL_INTERVAL_MS
5051
5115
  };
5052
- const { pollReviewNudge, createReviewNudgeRealDeps, loadNudgeState } = await import("../daemon-orchestration-QX3FS4L2.js");
5116
+ const { pollReviewNudge, createReviewNudgeRealDeps, loadNudgeState } = await import("../daemon-orchestration-JQGKEWPD.js");
5053
5117
  const nudgeState = loadNudgeState();
5054
5118
  const tick = async () => traceDaemonTimer("review_polling", async () => {
5055
5119
  fired("review_polling");
@@ -5095,7 +5159,7 @@ function startSessionTTL() {
5095
5159
  if (!await ensureStoreForPolling()) return;
5096
5160
  if (inPostRestartDestructiveGrace("session_ttl")) return;
5097
5161
  const { getClient } = await import("./database.js");
5098
- const { checkSessionTTL, createSessionTTLRealDeps } = await import("../daemon-orchestration-QX3FS4L2.js");
5162
+ const { checkSessionTTL, createSessionTTLRealDeps } = await import("../daemon-orchestration-JQGKEWPD.js");
5099
5163
  const deps = createSessionTTLRealDeps(getClient);
5100
5164
  const killed = await checkSessionTTL(deps, _wedgeObservations);
5101
5165
  if (killed.length > 0) acted("session_ttl");
@@ -5147,7 +5211,7 @@ function startIdleKill() {
5147
5211
  const cfg = await getCachedConfig();
5148
5212
  if (!cfg) return;
5149
5213
  const { getClient } = await import("./database.js");
5150
- const { pollIdleKill, createIdleKillRealDeps } = await import("../daemon-orchestration-QX3FS4L2.js");
5214
+ const { pollIdleKill, createIdleKillRealDeps } = await import("../daemon-orchestration-JQGKEWPD.js");
5151
5215
  const { sessions: liveSessions, paneCache, aliveSessions } = await getSharedOrchestrationCaches();
5152
5216
  const realDeps = createIdleKillRealDeps(
5153
5217
  getClient,
@@ -5300,16 +5364,18 @@ async function runCloudSyncChild() {
5300
5364
  const env = buildCloudSyncChildEnv(process.env, { dbPath });
5301
5365
  const timeoutMs = cloudSyncChildTimeoutMs({ dbPath });
5302
5366
  cloudSyncDebugLog(`[exed] Cloud sync child timeout: ${timeoutMs}ms${dbPath ? ` (db=${dbPath})` : ""}`);
5303
- try {
5304
- const { verifyAndCleanStaleDbLock } = await import("./database.js");
5305
- const lockResult = await verifyAndCleanStaleDbLock();
5306
- if (lockResult === "cleaned-dead" || lockResult === "cleaned-pid-reuse") {
5307
- process.stderr.write(`[exed] Cloud sync pre-spawn db.lock verification: ${lockResult}
5367
+ if (!isPostgresBackendEnabled()) {
5368
+ try {
5369
+ const { verifyAndCleanStaleDbLock } = await import("./database.js");
5370
+ const lockResult = await verifyAndCleanStaleDbLock();
5371
+ if (lockResult === "cleaned-dead" || lockResult === "cleaned-pid-reuse") {
5372
+ process.stderr.write(`[exed] Cloud sync pre-spawn db.lock verification: ${lockResult}
5308
5373
  `);
5309
- }
5310
- } catch (err) {
5311
- process.stderr.write(`[exed] Cloud sync pre-spawn db.lock verification failed: ${err instanceof Error ? err.message : String(err)}
5374
+ }
5375
+ } catch (err) {
5376
+ process.stderr.write(`[exed] Cloud sync pre-spawn db.lock verification failed: ${err instanceof Error ? err.message : String(err)}
5312
5377
  `);
5378
+ }
5313
5379
  }
5314
5380
  try {
5315
5381
  return await runCapturedCloudSyncChild({
@@ -5518,7 +5584,7 @@ function startSkillRefinement() {
5518
5584
  if (!shouldRunHeavyJob("skill_refinement")) return;
5519
5585
  try {
5520
5586
  if (!await ensureStoreForPolling()) return;
5521
- const { runSkillRefinement } = await import("../skill-refinement-G6BPD6QK.js");
5587
+ const { runSkillRefinement } = await import("../skill-refinement-6HPISXQC.js");
5522
5588
  const result = await runSkillRefinement();
5523
5589
  if (result.reviewed > 0) {
5524
5590
  acted("skill_refinement");
@@ -5544,7 +5610,7 @@ function startStaleBranchSweep() {
5544
5610
  const tick = async () => {
5545
5611
  fired("stale_branch_sweep");
5546
5612
  try {
5547
- const { discoverRepoPaths } = await import("../worktree-sweep-LXDNIZPM.js");
5613
+ const { discoverRepoPaths } = await import("../worktree-sweep-SW4AG6JR.js");
5548
5614
  const { scanUnmergedBranchesCached } = await import("../branch-hygiene-HNSOUDJE.js");
5549
5615
  const today = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
5550
5616
  for (const k of _staleBranchAlertedToday) {
@@ -5576,7 +5642,7 @@ function startStaleBranchSweep() {
5576
5642
  if (!_storeInitialized) continue;
5577
5643
  const stale = scan.branches.filter((b) => b.ageHours >= STALE_BRANCH_HOURS).slice(0, 5).map((b) => `${b.name} (+${b.ahead} commits, ${(b.ageHours / 24).toFixed(1)}d)`).join("; ");
5578
5644
  try {
5579
- const { writeNotification } = await import("../notifications-JIARMDZ5.js");
5645
+ const { writeNotification } = await import("../notifications-YKHZPCXU.js");
5580
5646
  await writeNotification({
5581
5647
  agentId: "exe",
5582
5648
  agentRole: "system",
@@ -5631,7 +5697,7 @@ function startWorkStateHeartbeat() {
5631
5697
  const { getClient } = await import("./database.js");
5632
5698
  const { listSessions } = await import("./session-registry.js");
5633
5699
  const { isCoordinatorName } = await import("./employees.js");
5634
- const { runWorkStateTick } = await import("../work-state-heartbeat-WIURKX3N.js");
5700
+ const { runWorkStateTick } = await import("../work-state-heartbeat-MQQOCU54.js");
5635
5701
  let liveTmux = null;
5636
5702
  const loadLiveTmux = async () => {
5637
5703
  if (!liveTmux) liveTmux = await listTmuxSessionNamesAsync();
@@ -5696,7 +5762,7 @@ function startGraphExtraction() {
5696
5762
  if (!await ensureStoreForPolling()) return;
5697
5763
  const { getClient } = await import("./database.js");
5698
5764
  const client = getClient();
5699
- const { extractBatch } = await import("../graph-rag-LWKKHY72.js");
5765
+ const { extractBatch } = await import("../graph-rag-YFITUAVO.js");
5700
5766
  const result = await extractBatch(client, 50, config.selfQueryModel);
5701
5767
  if (result.processed > 0) {
5702
5768
  acted("graph_extraction");
@@ -6114,7 +6180,7 @@ function startReflectionSweep() {
6114
6180
  );
6115
6181
  let runReflection;
6116
6182
  try {
6117
- ({ runReflection } = await import("../memory-reflection-G32OQ3X3.js"));
6183
+ ({ runReflection } = await import("../memory-reflection-LTRHDGUL.js"));
6118
6184
  } catch (importErr) {
6119
6185
  _reflectionImportFailed = true;
6120
6186
  process.stderr.write(`[exed] Reflection module unavailable (stale chunk hash?) \u2014 disabled until daemon restart: ${importErr instanceof Error ? importErr.message : String(importErr)}
@@ -6155,7 +6221,7 @@ function startReflectionSweep() {
6155
6221
  if (memories > 100 && cards < memories * 0.1) {
6156
6222
  process.stderr.write(`[exed] Memory cards sparse (${cards} cards / ${memories} memories) \u2014 running backfill...
6157
6223
  `);
6158
- const { insertMemoryCardsForBatch } = await import("../memory-cards-NISTO4EP.js");
6224
+ const { insertMemoryCardsForBatch } = await import("../memory-cards-GFO2CSPV.js");
6159
6225
  const batchSize = 500;
6160
6226
  let offset = 0;
6161
6227
  let totalCards = 0;
@@ -6223,7 +6289,7 @@ function startDatabaseBackup() {
6223
6289
  `
6224
6290
  );
6225
6291
  try {
6226
- const { maybeVerifyDailyBackup } = await import("../backup-verify-72XBKKHL.js");
6292
+ const { maybeVerifyDailyBackup } = await import("../backup-verify-RGB3KKD4.js");
6227
6293
  const verdict = await maybeVerifyDailyBackup(backupPath);
6228
6294
  if (verdict && !verdict.ok) {
6229
6295
  process.stderr.write(
@@ -6300,7 +6366,7 @@ function startSessionEventsRetention() {
6300
6366
  if (!await ensureStoreForPolling()) return;
6301
6367
  try {
6302
6368
  const { getClient } = await import("./database.js");
6303
- const { sweepExpiredSessionEvents, DEFAULT_SESSION_EVENTS_RETENTION_DAYS } = await import("../session-events-HVYX42HD.js");
6369
+ const { sweepExpiredSessionEvents, DEFAULT_SESSION_EVENTS_RETENTION_DAYS } = await import("../session-events-3KL735DZ.js");
6304
6370
  const days = SESSION_EVENTS_RETENTION_DAYS ?? DEFAULT_SESSION_EVENTS_RETENTION_DAYS;
6305
6371
  const count = await sweepExpiredSessionEvents(getClient(), days);
6306
6372
  if (count > 0) {
@@ -6331,7 +6397,7 @@ function startIntercomQueueDrain() {
6331
6397
  const tick = async () => traceDaemonTimer("intercom_queue_drain", async () => {
6332
6398
  fired("intercom_queue_drain");
6333
6399
  try {
6334
- const { drainQueueAsync, readQueue } = await import("../intercom-queue-SJL4G3J5.js");
6400
+ const { drainQueueAsync, readQueue } = await import("../intercom-queue-A52WQOCD.js");
6335
6401
  const {
6336
6402
  sendIntercomAsync: centralSendIntercomAsync,
6337
6403
  countScopedPendingReviews,
@@ -6463,7 +6529,7 @@ function startLedgerDrain() {
6463
6529
  const tick = async () => traceDaemonTimer("ledger_drain", async () => {
6464
6530
  fired("ledger_drain");
6465
6531
  try {
6466
- const { isLedgerEnabled, drainLedger } = await import("../notification-ledger-C3J4HFMM.js");
6532
+ const { isLedgerEnabled, drainLedger } = await import("../notification-ledger-KSCPGLQG.js");
6467
6533
  if (!isLedgerEnabled()) return;
6468
6534
  const result = await drainLedger({
6469
6535
  // Shadow "would-deliver": idle target = would-deliver, busy = retry.
@@ -6502,7 +6568,7 @@ function startOrphanReaper() {
6502
6568
  const tick = async () => traceDaemonTimer("orphan_reaper", async () => {
6503
6569
  fired("orphan_reaper");
6504
6570
  try {
6505
- const { reapOrphanedMcpProcesses, createOrphanReaperRealDepsAsync } = await import("../daemon-orchestration-QX3FS4L2.js");
6571
+ const { reapOrphanedMcpProcesses, createOrphanReaperRealDepsAsync } = await import("../daemon-orchestration-JQGKEWPD.js");
6506
6572
  const deps = await createOrphanReaperRealDepsAsync();
6507
6573
  const reaped = await reapOrphanedMcpProcesses(deps);
6508
6574
  if (reaped.length > 0) acted("orphan_reaper");
@@ -6527,7 +6593,7 @@ function startZombieAgentReaper() {
6527
6593
  const tick = async () => traceDaemonTimer("zombie_agent_reaper", async () => {
6528
6594
  fired("zombie_agent_reaper");
6529
6595
  try {
6530
- const { reapZombieAgentProcesses, createZombieAgentReaperRealDepsAsync } = await import("../daemon-orchestration-QX3FS4L2.js");
6596
+ const { reapZombieAgentProcesses, createZombieAgentReaperRealDepsAsync } = await import("../daemon-orchestration-JQGKEWPD.js");
6531
6597
  const deps = await createZombieAgentReaperRealDepsAsync();
6532
6598
  const reaped = reapZombieAgentProcesses(deps);
6533
6599
  if (reaped.length > 0) acted("zombie_agent_reaper");
@@ -6551,7 +6617,7 @@ async function startDaemonMemoryPressureWatchdog() {
6551
6617
  try {
6552
6618
  const cfg = await getCachedConfig();
6553
6619
  if (!cfg) return;
6554
- const { startMemoryPressureWatchdog: startWatchdog, MEMORY_PRESSURE_WATCHDOG_DEFAULTS } = await import("../memory-pressure-watchdog-VWQM3GXR.js");
6620
+ const { startMemoryPressureWatchdog: startWatchdog, MEMORY_PRESSURE_WATCHDOG_DEFAULTS } = await import("../memory-pressure-watchdog-IG7VRFIX.js");
6555
6621
  const watchdogCfg = {
6556
6622
  ...MEMORY_PRESSURE_WATCHDOG_DEFAULTS,
6557
6623
  ...cfg.memoryPressureWatchdog ?? {}
@@ -6582,7 +6648,7 @@ function startWorktreeReaper() {
6582
6648
  const tick = async () => traceDaemonTimer("worktree_reaper", async () => {
6583
6649
  fired("worktree_reaper");
6584
6650
  try {
6585
- const { reapOrphanedWorktrees, createWorktreeReaperRealDeps } = await import("../daemon-orchestration-QX3FS4L2.js");
6651
+ const { reapOrphanedWorktrees, createWorktreeReaperRealDeps } = await import("../daemon-orchestration-JQGKEWPD.js");
6586
6652
  const deps = await createWorktreeReaperRealDeps();
6587
6653
  const result = await reapOrphanedWorktrees(deps);
6588
6654
  if (result.pruned.length > 0) {
@@ -6622,8 +6688,8 @@ function startWorktreeReaper() {
6622
6688
  }
6623
6689
  continue;
6624
6690
  }
6625
- const { cleanupAgentWorktree } = await import("../worktree-sweep-LXDNIZPM.js");
6626
- const { getMainRepoRootAsync } = await import("../worktree-TBUUZJHY.js");
6691
+ const { cleanupAgentWorktree } = await import("../worktree-sweep-SW4AG6JR.js");
6692
+ const { getMainRepoRootAsync } = await import("../worktree-FJZXHDCJ.js");
6627
6693
  const repoRoot = await getMainRepoRootAsync(signal.worktreePath);
6628
6694
  if (repoRoot && signal.agentId) {
6629
6695
  const notes = await cleanupAgentWorktree(repoRoot, signal.agentId);
@@ -6656,7 +6722,7 @@ function startAutoWake() {
6656
6722
  if (!await ensureStoreForPolling()) return;
6657
6723
  try {
6658
6724
  const { getClient } = await import("./database.js");
6659
- const { pollOrphanedTasks, createAutoWakeRealDeps } = await import("../daemon-orchestration-QX3FS4L2.js");
6725
+ const { pollOrphanedTasks, createAutoWakeRealDeps } = await import("../daemon-orchestration-JQGKEWPD.js");
6660
6726
  const deps = createAutoWakeRealDeps(getClient, process.cwd(), getTmuxSessionsAsync);
6661
6727
  const woken = await pollOrphanedTasks(deps);
6662
6728
  if (woken.length > 0) acted("auto_wake");
@@ -6667,12 +6733,12 @@ function startAutoWake() {
6667
6733
  try {
6668
6734
  const signalBase = path4.join(os3.homedir(), ".exe-os", "task-signals");
6669
6735
  if (existsSync7(signalBase)) {
6670
- const { readdirSync: readdirSync2, statSync: statSyncFs } = await import("fs");
6736
+ const { readdirSync: readdirSync3, statSync: statSyncFs } = await import("fs");
6671
6737
  const { sendIntercomAsync, extractRootExe } = await import("./tmux-routing.js");
6672
6738
  const sessionCache = path4.join(os3.homedir(), ".exe-os", "session-cache");
6673
6739
  const sessions = await getTmuxSessionsAsync();
6674
6740
  const signalDirs = [];
6675
- for (const entry of readdirSync2(signalBase, { withFileTypes: true })) {
6741
+ for (const entry of readdirSync3(signalBase, { withFileTypes: true })) {
6676
6742
  if (entry.isDirectory()) signalDirs.push({ dir: path4.join(signalBase, entry.name), scope: entry.name });
6677
6743
  }
6678
6744
  signalDirs.push({ dir: signalBase, scope: null });
@@ -6697,7 +6763,7 @@ function startAutoWake() {
6697
6763
  for (const { dir, scope } of signalDirs) {
6698
6764
  let files = [];
6699
6765
  try {
6700
- files = readdirSync2(dir).filter((f) => f.endsWith(".pending") && !f.includes("review-"));
6766
+ files = readdirSync3(dir).filter((f) => f.endsWith(".pending") && !f.includes("review-"));
6701
6767
  } catch {
6702
6768
  continue;
6703
6769
  }
@@ -6707,7 +6773,7 @@ function startAutoWake() {
6707
6773
  if (age > 60 * 60 * 1e3) {
6708
6774
  try {
6709
6775
  unlinkSync4(signalPath);
6710
- void import("../orchestration-events-AL7AWHBX.js").then(({ recordOrchestrationEventBestEffort: recordOE }) => {
6776
+ void import("../orchestration-events-HAFDPTLV.js").then(({ recordOrchestrationEventBestEffort: recordOE }) => {
6711
6777
  recordOE({ eventType: "signal.stale", source: "exe-daemon.autoWake", severity: "warn", payload: { file, ageMinutes: Math.round(age / 6e4) } });
6712
6778
  }).catch(() => {
6713
6779
  });
@@ -6853,7 +6919,7 @@ function startStuckTaskRelease() {
6853
6919
  createStuckTaskRealDeps,
6854
6920
  escalateStuckBlockedTasks,
6855
6921
  createStuckBlockedRealDeps
6856
- } = await import("../daemon-orchestration-QX3FS4L2.js");
6922
+ } = await import("../daemon-orchestration-JQGKEWPD.js");
6857
6923
  const deps = createStuckTaskRealDeps(getClient);
6858
6924
  const released = await releaseStuckTasks(deps);
6859
6925
  if (released.length > 0) {
@@ -7048,12 +7114,12 @@ function startTaskEnforcementScanner() {
7048
7114
  const tick = async () => traceDaemonTimer("task_enforcement", async () => {
7049
7115
  fired("task_enforcement");
7050
7116
  try {
7051
- const { runTaskEnforcementTick } = await import("../task-enforcement-YINAK3T6.js");
7117
+ const { runTaskEnforcementTick } = await import("../task-enforcement-OAOL7XFL.js");
7052
7118
  const { getTransport } = await import("./transport.js");
7053
7119
  const { loadAgentConfig } = await import("./agent-config.js");
7054
7120
  const { getClient } = await import("./database.js");
7055
7121
  const { loadEmployeesSync } = await import("./employees.js");
7056
- const { sessionScopeFilter } = await import("../task-scope-5OSP2MUP.js");
7122
+ const { sessionScopeFilter } = await import("../task-scope-PSVAE3EM.js");
7057
7123
  const transport = getTransport();
7058
7124
  const { sessions: allSessions, paneCache, aliveSessions } = await getSharedOrchestrationCaches();
7059
7125
  await yieldToEventLoop();
@@ -7064,10 +7130,10 @@ function startTaskEnforcementScanner() {
7064
7130
  sendKeysLiteral: transport.sendKeysLiteral?.bind(transport),
7065
7131
  isAlive: (session) => aliveSessions.has(session)
7066
7132
  };
7067
- const { checkAutoWakeGates } = await import("../daemon-orchestration-QX3FS4L2.js");
7133
+ const { checkAutoWakeGates } = await import("../daemon-orchestration-JQGKEWPD.js");
7068
7134
  const { ensureEmployeeAsync, employeeSessionName, sendIntercomAsync } = await import("./tmux-routing.js");
7069
7135
  const { shouldAutoInstance } = await import("./employees.js");
7070
- const { recordOrchestrationEventBestEffort } = await import("../orchestration-events-AL7AWHBX.js");
7136
+ const { recordOrchestrationEventBestEffort } = await import("../orchestration-events-HAFDPTLV.js");
7071
7137
  const projectDir = process.cwd();
7072
7138
  await runTaskEnforcementTick({
7073
7139
  transport: enforcementTransport,
@@ -7448,6 +7514,78 @@ process.on("unhandledRejection", (reason) => {
7448
7514
  logCrash(reason instanceof Error ? reason : String(reason), "unhandled_rejection");
7449
7515
  maybeSelfHealStaleDist(reason, "unhandledRejection");
7450
7516
  });
7517
+ var DIST_DRIFT_CHECK_INTERVAL_MS = 2e4;
7518
+ var _distDriftRestartRequested = false;
7519
+ var _distDriftPendingMissing = false;
7520
+ function readOnDiskPackageVersion() {
7521
+ if (!PACKAGE_JSON_PATH) return PACKAGE_VERSION;
7522
+ try {
7523
+ const pkg = JSON.parse(readFileSync6(PACKAGE_JSON_PATH, "utf8"));
7524
+ return typeof pkg.version === "string" ? pkg.version : PACKAGE_VERSION;
7525
+ } catch {
7526
+ return PACKAGE_VERSION;
7527
+ }
7528
+ }
7529
+ function startDistDriftWatch() {
7530
+ if (!DIST_DIR) {
7531
+ process.stderr.write("[exed] Dist-drift watch skipped \u2014 could not resolve dist dir\n");
7532
+ return;
7533
+ }
7534
+ const tick = () => {
7535
+ fired("dist_drift_watch");
7536
+ if (_distDriftRestartRequested) return;
7537
+ const current = {
7538
+ version: readOnDiskPackageVersion(),
7539
+ chunks: listDistChunkFiles(DIST_DIR)
7540
+ };
7541
+ const drift = detectDistDrift(BOOT_DIST_SNAPSHOT, current);
7542
+ if (!drift.drifted) {
7543
+ _distDriftPendingMissing = false;
7544
+ return;
7545
+ }
7546
+ if (!drift.versionChanged) {
7547
+ if (!_distDriftPendingMissing) {
7548
+ _distDriftPendingMissing = true;
7549
+ process.stderr.write(
7550
+ `[exed] Dist-drift candidate (${drift.reason}) \u2014 re-checking next pass before restart
7551
+ `
7552
+ );
7553
+ return;
7554
+ }
7555
+ }
7556
+ _distDriftRestartRequested = true;
7557
+ acted("dist_drift_watch");
7558
+ process.stderr.write(
7559
+ `[exed] Dist drift detected (${drift.reason}) \u2014 daemon is running against a swapped build; requesting restart. boot=v${BOOT_DIST_SNAPSHOT.version} disk=v${current.version} missing=[${drift.missingChunks.slice(0, 8).join(", ")}]
7560
+ `
7561
+ );
7562
+ logRestartEvent("daemon_self_exit", {
7563
+ trigger: "dist_drift",
7564
+ reason: drift.reason ?? "unknown",
7565
+ version_changed: drift.versionChanged,
7566
+ missing_chunks: drift.missingChunks.length,
7567
+ boot_version: BOOT_DIST_SNAPSHOT.version,
7568
+ disk_version: current.version,
7569
+ uptime_s: Math.floor((Date.now() - _startedAt2) / 1e3)
7570
+ });
7571
+ try {
7572
+ const result = requestRestart("dist-drift-self-heal");
7573
+ if (!result.ok) _distDriftRestartRequested = false;
7574
+ } catch (err) {
7575
+ _distDriftRestartRequested = false;
7576
+ process.stderr.write(
7577
+ `[exed] requestRestart for dist-drift self-heal failed (non-fatal): ${err instanceof Error ? err.message : String(err)}
7578
+ `
7579
+ );
7580
+ }
7581
+ };
7582
+ const timer = setInterval(() => void traceDaemonTimer("dist_drift_watch", tick), DIST_DRIFT_CHECK_INTERVAL_MS);
7583
+ timer.unref();
7584
+ process.stderr.write(
7585
+ `[exed] Dist-drift watch started (every ${DIST_DRIFT_CHECK_INTERVAL_MS / 1e3}s; boot v${BOOT_DIST_SNAPSHOT.version}, ${BOOT_DIST_SNAPSHOT.chunks.length} chunks tracked)
7586
+ `
7587
+ );
7588
+ }
7451
7589
  var BUG_AUTOFIX_INTERVAL_MS = 5 * 6e4;
7452
7590
  var AUTOFIX_DEDUP_TTL_MS = 6 * 60 * 60 * 1e3;
7453
7591
  var AUTOFIX_DEDUP_MAX_ENTRIES = 1e3;
@@ -7975,7 +8113,7 @@ function startEventLoopLagDetector() {
7975
8113
  const msg = `[exed] EVENT LOOP BLOCKED ${(lag / 1e3).toFixed(1)}s \u2014 MCP UNRESPONSIVE. Sessions will die.`;
7976
8114
  process.stderr.write(msg + "\n");
7977
8115
  logDaemonHealth({ event: "event_loop_blocked", pid: process.pid, message: msg, data: { lagMs: lag } });
7978
- void import("../orchestration-events-AL7AWHBX.js").then(({ recordOrchestrationEventBestEffort: recordOE }) => {
8116
+ void import("../orchestration-events-HAFDPTLV.js").then(({ recordOrchestrationEventBestEffort: recordOE }) => {
7979
8117
  recordOE({ eventType: "daemon.event_loop_blocked", source: "exe-daemon.lagDetector", severity: "error", durationMs: lag });
7980
8118
  }).catch(() => {
7981
8119
  });
@@ -8169,7 +8307,7 @@ function startTaskFileResync() {
8169
8307
  });
8170
8308
  if (Number(res.rowsAffected ?? 0) > 0) {
8171
8309
  synced++;
8172
- void import("../orchestration-events-AL7AWHBX.js").then(({ recordOrchestrationEventBestEffort: recordOE }) => {
8310
+ void import("../orchestration-events-HAFDPTLV.js").then(({ recordOrchestrationEventBestEffort: recordOE }) => {
8173
8311
  recordOE({
8174
8312
  eventType: "task_file.resynced",
8175
8313
  source: "exe-daemon.taskFileResync",
@@ -8203,7 +8341,7 @@ function startTaskGroupBarriers() {
8203
8341
  fired("task_group_barriers");
8204
8342
  if (!await ensureStoreForPolling()) return;
8205
8343
  try {
8206
- const { pollTaskGroupBarriers } = await import("../daemon-orchestration-QX3FS4L2.js");
8344
+ const { pollTaskGroupBarriers } = await import("../daemon-orchestration-JQGKEWPD.js");
8207
8345
  const firedCount = await pollTaskGroupBarriers();
8208
8346
  if (firedCount > 0) {
8209
8347
  acted("task_group_barriers");
@@ -8225,7 +8363,7 @@ function startCheckpointGc() {
8225
8363
  fired("checkpoint_gc");
8226
8364
  if (!await ensureStoreForPolling()) return;
8227
8365
  try {
8228
- const { gcStaleCheckpoints } = await import("../daemon-orchestration-QX3FS4L2.js");
8366
+ const { gcStaleCheckpoints } = await import("../daemon-orchestration-JQGKEWPD.js");
8229
8367
  const cleared = await gcStaleCheckpoints();
8230
8368
  if (cleared > 0) {
8231
8369
  acted("checkpoint_gc");
@@ -8265,14 +8403,14 @@ function startDispatchAckCleanup() {
8265
8403
  function startProjectionWorkerDeferred() {
8266
8404
  setTimeout(async () => {
8267
8405
  try {
8268
- const { startProjectionWorker } = await import("../projection-worker-Z5U6UWCE.js");
8406
+ const { startProjectionWorker } = await import("../projection-worker-SKAMSZJF.js");
8269
8407
  startProjectionWorker();
8270
8408
  } catch {
8271
8409
  }
8272
8410
  }, 2e4);
8273
8411
  }
8274
8412
  async function startToolTelemetry() {
8275
- const { startToolTelemetryFlush } = await import("../tool-telemetry-KIHAHUPT.js");
8413
+ const { startToolTelemetryFlush } = await import("../tool-telemetry-QJGJAHOC.js");
8276
8414
  startToolTelemetryFlush();
8277
8415
  process.stderr.write("[exed] Tool telemetry started (flush every 5m)\n");
8278
8416
  }
@@ -8297,6 +8435,7 @@ function startServerModeTimers() {
8297
8435
  startDispatchAckCleanup();
8298
8436
  void startToolTelemetry();
8299
8437
  startProjectionWorkerDeferred();
8438
+ setTimeout(startDistDriftWatch, 3e4);
8300
8439
  }
8301
8440
  function startLocalFirstTimers() {
8302
8441
  startMemoryQueueDrain();
@@ -8312,6 +8451,7 @@ function startLocalFirstTimers() {
8312
8451
  startApiWatchdog();
8313
8452
  startIdleKill();
8314
8453
  startRssWatchdog();
8454
+ setTimeout(startDistDriftWatch, 3e4);
8315
8455
  startOrchestrationTimer();
8316
8456
  setTimeout(startWalCheckpoint, 5e3);
8317
8457
  startTaskFileResync();
@@ -8440,7 +8580,7 @@ function startLocalFirstTimers() {
8440
8580
  fired("orphan_task_cleanup");
8441
8581
  try {
8442
8582
  if (!await ensureStoreForPolling()) return;
8443
- const { cleanOrphanedTaskFiles } = await import("../tasks-crud-PTN36B5F.js");
8583
+ const { cleanOrphanedTaskFiles } = await import("../tasks-crud-TLELWWUL.js");
8444
8584
  const count = await cleanOrphanedTaskFiles();
8445
8585
  if (count > 0) {
8446
8586
  acted("orphan_task_cleanup");
@@ -8456,7 +8596,7 @@ function startLocalFirstTimers() {
8456
8596
  fired("task_file_consistency");
8457
8597
  try {
8458
8598
  if (!await ensureStoreForPolling()) return;
8459
- const { checkTaskFileConsistency } = await import("../tasks-crud-PTN36B5F.js");
8599
+ const { checkTaskFileConsistency } = await import("../tasks-crud-TLELWWUL.js");
8460
8600
  const mismatches = await checkTaskFileConsistency();
8461
8601
  if (mismatches > 0) {
8462
8602
  acted("task_file_consistency");
@@ -8475,7 +8615,7 @@ function startLocalFirstTimers() {
8475
8615
  const TELEMETRY_DAILY_MS = 24 * 60 * 60 * 1e3;
8476
8616
  const telemetryDaily = async () => {
8477
8617
  try {
8478
- const { sendTelemetry, isTelemetryEnabled } = await import("../telemetry-upload-Z47OEELW.js");
8618
+ const { sendTelemetry, isTelemetryEnabled } = await import("../telemetry-upload-LTL5SW24.js");
8479
8619
  if (!isTelemetryEnabled()) return;
8480
8620
  const { upstream } = await sendTelemetry(24);
8481
8621
  if (upstream.startsWith("sent")) {