@askexenow/exe-os 0.9.335 → 0.9.338

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 (285) hide show
  1. package/dist/{active-agent-AIK6FSYE.js → active-agent-EC6M7KTX.js} +3 -3
  2. package/dist/{active-agent-GXV65DNN.js → active-agent-WHIUCHLA.js} +3 -3
  3. package/dist/{agentic-ontology-V2BQY4DH.js → agentic-ontology-RNSXGXW4.js} +1 -1
  4. package/dist/{backfill-metadata-7JFKICS3.js → backfill-metadata-MFY6BHKE.js} +4 -4
  5. package/dist/{behaviors-QTG3MHDO.js → behaviors-HLZUJSMP.js} +5 -5
  6. package/dist/bin/agentic-ontology-backfill.js +5 -5
  7. package/dist/bin/agentic-reflection-backfill.js +6 -6
  8. package/dist/bin/agentic-semantic-label.js +5 -5
  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 +12 -10
  13. package/dist/bin/cc-doctor.js +4 -4
  14. package/dist/bin/cleanup-stale-review-tasks.js +14 -14
  15. package/dist/bin/cli.js +19 -16
  16. package/dist/bin/deferred-daemon-restart.js +71 -69
  17. package/dist/bin/exe-agent-config.js +3 -3
  18. package/dist/bin/exe-agent.js +14 -14
  19. package/dist/bin/exe-assign.js +5 -5
  20. package/dist/bin/exe-boot.js +24 -24
  21. package/dist/bin/exe-call.js +4 -4
  22. package/dist/bin/exe-cloud.js +12 -10
  23. package/dist/bin/exe-config-dump.js +3 -3
  24. package/dist/bin/exe-dispatch.js +14 -14
  25. package/dist/bin/exe-doctor.js +4 -4
  26. package/dist/bin/exe-export-behaviors.js +7 -7
  27. package/dist/bin/exe-forget.js +6 -6
  28. package/dist/bin/exe-gateway.js +7 -7
  29. package/dist/bin/exe-grant.js +126 -0
  30. package/dist/bin/exe-healthcheck.js +4 -4
  31. package/dist/bin/exe-heartbeat.js +14 -14
  32. package/dist/bin/exe-kill.js +17 -17
  33. package/dist/bin/exe-launch-agent.js +22 -22
  34. package/dist/bin/exe-new-employee.js +8 -8
  35. package/dist/bin/exe-pending-messages.js +15 -15
  36. package/dist/bin/exe-pending-notifications.js +14 -14
  37. package/dist/bin/exe-pending-reviews.js +14 -14
  38. package/dist/bin/exe-rename.js +4 -4
  39. package/dist/bin/exe-review.js +16 -16
  40. package/dist/bin/exe-search.js +5 -5
  41. package/dist/bin/exe-session-cleanup.js +18 -18
  42. package/dist/bin/exe-settings.js +13 -11
  43. package/dist/bin/exe-start-codex.js +12 -12
  44. package/dist/bin/exe-start-opencode.js +8 -8
  45. package/dist/bin/exe-status.js +15 -15
  46. package/dist/bin/exe-support.js +3 -3
  47. package/dist/bin/exe-team.js +3 -3
  48. package/dist/bin/git-sweep.js +15 -15
  49. package/dist/bin/graph-backfill.js +6 -6
  50. package/dist/bin/graph-export.js +5 -5
  51. package/dist/bin/import-history.js +9 -9
  52. package/dist/bin/install.js +73 -71
  53. package/dist/bin/intercom-check.js +4 -4
  54. package/dist/bin/mcp-sessions.js +2 -2
  55. package/dist/bin/orchestration-metrics.js +4 -4
  56. package/dist/bin/postgres-agentic-reflection-backfill.js +4 -4
  57. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  58. package/dist/bin/registry-proxy.js +1 -1
  59. package/dist/bin/scan-tasks.js +14 -14
  60. package/dist/bin/setup.js +1 -1
  61. package/dist/bin/shard-migrate.js +4 -4
  62. package/dist/bin/stack-update.js +7 -7
  63. package/dist/bin/vps-health-gate.js +1 -1
  64. package/dist/{branch-hygiene-55TKIWAZ.js → branch-hygiene-R5NVTRAY.js} +17 -15
  65. package/dist/{capability-cards-QKTDMIWO.js → capability-cards-YOKVMMOL.js} +2 -2
  66. package/dist/{capacity-monitor-4U2Y7CSW.js → capacity-monitor-S54IOWRL.js} +15 -15
  67. package/dist/{catchup-brief-LFSFSDBA.js → catchup-brief-S35QLMG3.js} +17 -17
  68. package/dist/{chunk-UDX46CNG.js → chunk-2HZY3ECT.js} +5 -5
  69. package/dist/{chunk-VINX2BZI.js → chunk-2SG2UGCH.js} +4 -4
  70. package/dist/{chunk-RGHT5J2L.js → chunk-3OBWSCJN.js} +11 -11
  71. package/dist/{chunk-RKBVTCPY.js → chunk-4IYSBPX3.js} +1 -1
  72. package/dist/{chunk-ZA7NMOTA.js → chunk-52KNOQMK.js} +3 -3
  73. package/dist/{chunk-U6M5C3MB.js → chunk-542EWGY3.js} +7 -7
  74. package/dist/{chunk-HDZF7FQF.js → chunk-65SVQELL.js} +2 -2
  75. package/dist/{chunk-FZALT2G7.js → chunk-6HBURYON.js} +1 -1
  76. package/dist/{chunk-XWH7QGCU.js → chunk-6IRVGOUL.js} +1 -1
  77. package/dist/{chunk-2OZMCTYQ.js → chunk-6M36JFFD.js} +3 -3
  78. package/dist/{chunk-SRGBHZ3H.js → chunk-6MRWJMI5.js} +1 -1
  79. package/dist/{chunk-VI7I6K4G.js → chunk-7EA7LYW4.js} +2 -2
  80. package/dist/{chunk-FXS5YIK5.js → chunk-7WDXEKUL.js} +3 -3
  81. package/dist/{chunk-ORU5LDIT.js → chunk-AOO77BDE.js} +1 -1
  82. package/dist/{chunk-67547XFJ.js → chunk-AVKXCSBI.js} +1 -1
  83. package/dist/{chunk-75L2YCD4.js → chunk-B2GLEEGY.js} +1 -1
  84. package/dist/chunk-B75BOKEI.js +193 -0
  85. package/dist/{chunk-UWT664G5.js → chunk-B76TSEP3.js} +1 -1
  86. package/dist/{chunk-E5UHM2KN.js → chunk-BPC5LZ6Y.js} +1 -1
  87. package/dist/{chunk-JT3I3OWU.js → chunk-BU2QQWBQ.js} +1 -1
  88. package/dist/{chunk-6J5FWFAI.js → chunk-DADMPMYX.js} +1 -1
  89. package/dist/{chunk-54X2PQBA.js → chunk-DILD54TU.js} +46 -13
  90. package/dist/{chunk-EOYVD5U3.js → chunk-DZ6OQM67.js} +1 -1
  91. package/dist/{chunk-5QJFZYDD.js → chunk-EIF2LQHZ.js} +1 -1
  92. package/dist/{chunk-3CHTRPOU.js → chunk-FNZR3B7U.js} +1 -1
  93. package/dist/{chunk-AREY6CD2.js → chunk-FUIIVSW6.js} +1 -1
  94. package/dist/{chunk-VST5V263.js → chunk-GN45PBWI.js} +2 -2
  95. package/dist/{chunk-QFNRI3PS.js → chunk-H2L4PHGH.js} +2 -2
  96. package/dist/{chunk-J6REQ7CV.js → chunk-H37HHX3E.js} +9 -9
  97. package/dist/{chunk-BIM763ML.js → chunk-HEPR6QTL.js} +4 -4
  98. package/dist/{chunk-UUY3USYA.js → chunk-I3XKO3KQ.js} +1 -1
  99. package/dist/{chunk-JEDQHPPC.js → chunk-I7Z6KTGF.js} +5 -5
  100. package/dist/{chunk-QYTUXYAM.js → chunk-ISD7ZD45.js} +140 -140
  101. package/dist/chunk-JCBKARSK.js +113 -0
  102. package/dist/{chunk-ESIZMMWY.js → chunk-K5WFKEXQ.js} +67 -78
  103. package/dist/{chunk-ROHUOHJI.js → chunk-KCC5A7YL.js} +5 -5
  104. package/dist/{chunk-IJTCNN5I.js → chunk-KMBEL7VB.js} +1 -1
  105. package/dist/{chunk-VAZHL55P.js → chunk-KTY7I7UH.js} +1 -1
  106. package/dist/{chunk-6UJ4CX5L.js → chunk-LMZISHSJ.js} +13 -13
  107. package/dist/{chunk-VAEYG5V5.js → chunk-LTVCRHHD.js} +4 -4
  108. package/dist/{chunk-6L4LI4VQ.js → chunk-MQRFKSLI.js} +3 -3
  109. package/dist/{chunk-7QFR2QUD.js → chunk-MW2GJJ53.js} +2 -2
  110. package/dist/{chunk-XA753DUQ.js → chunk-N5I7RL3I.js} +1 -1
  111. package/dist/{chunk-YYKY45TM.js → chunk-OFX5B2S7.js} +1 -1
  112. package/dist/{chunk-H5C4PS64.js → chunk-OJTJYEMX.js} +3 -3
  113. package/dist/{chunk-5EP4TCZ2.js → chunk-PAEXYFMY.js} +1 -1
  114. package/dist/{chunk-X3VIRILN.js → chunk-PLRIJALF.js} +160 -34
  115. package/dist/{chunk-WI3T3GTH.js → chunk-Q7L6G6KV.js} +2 -2
  116. package/dist/{chunk-SDZ654BU.js → chunk-QBTWXDFK.js} +9 -9
  117. package/dist/{chunk-ZHKMRKH3.js → chunk-QFPTDSY2.js} +1 -1
  118. package/dist/{chunk-VXSORLMJ.js → chunk-QXSBB26A.js} +1 -1
  119. package/dist/{chunk-XMVEGUPC.js → chunk-QZLIZAS7.js} +2 -2
  120. package/dist/{chunk-QLZ3HCNN.js → chunk-R44Z32O2.js} +3 -3
  121. package/dist/{chunk-I33GPQUB.js → chunk-RDTZTLVQ.js} +20 -11
  122. package/dist/{chunk-45AA4HOH.js → chunk-RLRT2BVM.js} +1 -1
  123. package/dist/chunk-RNAYCUNM.js +271 -0
  124. package/dist/{chunk-FAVEOPZD.js → chunk-RRWDYOQS.js} +1 -1
  125. package/dist/{chunk-D2527Q5Y.js → chunk-T4KZ2Z2N.js} +3 -3
  126. package/dist/{chunk-JKSK4VFX.js → chunk-TLYAEISW.js} +2 -2
  127. package/dist/{chunk-3HMHSTHQ.js → chunk-UIV2WPBT.js} +1 -13
  128. package/dist/{chunk-X5EGTW2P.js → chunk-UPWE5NOG.js} +2 -2
  129. package/dist/{chunk-OEEQGXCG.js → chunk-UXBD22CD.js} +1 -1
  130. package/dist/{chunk-5ZG2JMZH.js → chunk-VJHUVFIW.js} +3 -3
  131. package/dist/{chunk-AQGBOSA4.js → chunk-WYLV4S6A.js} +3 -3
  132. package/dist/{chunk-QVM5KATG.js → chunk-X425OEYF.js} +4 -4
  133. package/dist/{chunk-U7N2GEBI.js → chunk-X7H3HMFH.js} +3 -3
  134. package/dist/{chunk-DTFFLCFM.js → chunk-XACL67CS.js} +1 -1
  135. package/dist/{chunk-ZWIYJV2F.js → chunk-XCTGRD4S.js} +175 -11
  136. package/dist/{chunk-QQCZLNUC.js → chunk-XJI7Z6LZ.js} +1 -1
  137. package/dist/{chunk-SPCO7SNH.js → chunk-XUKPALWT.js} +3 -3
  138. package/dist/{chunk-7ODTT6WK.js → chunk-XWHE4LZK.js} +1 -1
  139. package/dist/{chunk-LK5RBBMQ.js → chunk-YE7NH53A.js} +1 -1
  140. package/dist/{chunk-P3PGU2OC.js → chunk-ZIVEA3NB.js} +1 -1
  141. package/dist/{cleanup-graph-garbage-OP7NAXDZ.js → cleanup-graph-garbage-KUABW6LS.js} +6 -6
  142. package/dist/{co-activation-EVNRLGPH.js → co-activation-XMPHKGHR.js} +2 -2
  143. package/dist/{co-occurrence-FEU6RXQI.js → co-occurrence-SHKSJ6CV.js} +4 -4
  144. package/dist/{conversation-entity-extractor-FPAMTL3C.js → conversation-entity-extractor-D3EFTLT4.js} +2 -2
  145. package/dist/{crdt-sync-YI5LFAUY.js → crdt-sync-UJELKSNX.js} +1 -1
  146. package/dist/{crm-webhook-REDANIV7.js → crm-webhook-HHNBS7LY.js} +2 -2
  147. package/dist/{cto-delegation-gate-HN3J76UI.js → cto-delegation-gate-DXNF5HVW.js} +13 -13
  148. package/dist/{daemon-orchestration-KIAYDBWN.js → daemon-orchestration-7QB6QOXT.js} +29 -17
  149. package/dist/{db-backup-UBKQZVEI.js → db-backup-DLD4QZBO.js} +1 -1
  150. package/dist/{doc-graph-extractor-BPXVTZ4L.js → doc-graph-extractor-3TRLGD7M.js} +4 -4
  151. package/dist/{documents-J4MQBIYZ.js → documents-FHIBU7KJ.js} +5 -5
  152. package/dist/{dreaming-RCAAKENX.js → dreaming-OMFUEUCQ.js} +14 -14
  153. package/dist/{exe-drift-PVUYHYKG.js → exe-drift-KY2KHZEL.js} +3 -3
  154. package/dist/{exe-export-Z626JBSJ.js → exe-export-SP6G3QF6.js} +6 -6
  155. package/dist/{exe-import-47MHFJUB.js → exe-import-KJU7FBVQ.js} +6 -6
  156. package/dist/{exe-key-RLMYYUTW.js → exe-key-RWGMIHK7.js} +71 -69
  157. package/dist/{exe-snapshot-VHSZP5VK.js → exe-snapshot-ZNPGUKRZ.js} +17 -17
  158. package/dist/{fast-db-init-KIS7XQO5.js → fast-db-init-QQB6IVWV.js} +1 -1
  159. package/dist/{founder-context-NSXLHXJ4.js → founder-context-PQR3BUS7.js} +2 -2
  160. package/dist/gateway/index.js +11 -11
  161. package/dist/{git-staleness-7N4H6ZE3.js → git-staleness-UGB5J3K7.js} +2 -2
  162. package/dist/{global-procedures-3PJSNL4Q.js → global-procedures-R7KRREEK.js} +3 -3
  163. package/dist/{graph-auto-extract-S5TSHNFY.js → graph-auto-extract-LKIQ57PL.js} +4 -4
  164. package/dist/{graph-rag-WAK2BRJH.js → graph-rag-JZZAB7PC.js} +2 -2
  165. package/dist/hooks/bug-report-worker.js +16 -16
  166. package/dist/hooks/codex-stop-task-finalizer.js +16 -16
  167. package/dist/hooks/commit-complete.js +16 -16
  168. package/dist/hooks/error-recall.js +6 -6
  169. package/dist/hooks/exe-heartbeat-hook.js +3 -3
  170. package/dist/hooks/ingest.js +6 -6
  171. package/dist/hooks/instructions-loaded.js +4 -4
  172. package/dist/hooks/manifest.json +19 -19
  173. package/dist/hooks/notification.js +4 -4
  174. package/dist/hooks/post-compact.js +15 -15
  175. package/dist/hooks/post-tool-combined.js +7 -7
  176. package/dist/hooks/pre-compact.js +16 -16
  177. package/dist/hooks/pre-tool-use.js +19 -19
  178. package/dist/hooks/prompt-submit.js +30 -30
  179. package/dist/hooks/session-end.js +20 -20
  180. package/dist/hooks/session-start.js +12 -12
  181. package/dist/hooks/stop.js +19 -19
  182. package/dist/hooks/subagent-stop.js +15 -15
  183. package/dist/hooks/summary-worker.js +19 -19
  184. package/dist/index.js +25 -25
  185. package/dist/{installer-FQKJ6ULZ.js → installer-MNPXDLGG.js} +6 -6
  186. package/dist/{installer-TYK3XXK7.js → installer-MZWWBXM6.js} +9 -9
  187. package/dist/{installer-3X5QNMTD.js → installer-SB2N5NKH.js} +9 -9
  188. package/dist/{intercom-queue-XJ3RTJ2C.js → intercom-queue-VU2G6F5R.js} +15 -13
  189. package/dist/lib/agent-config.js +1 -1
  190. package/dist/lib/cloud-sync.js +12 -10
  191. package/dist/lib/consolidation.js +7 -7
  192. package/dist/lib/crypto.js +5 -1
  193. package/dist/lib/database.js +2 -2
  194. package/dist/lib/db.js +2 -2
  195. package/dist/lib/device-registry.js +1 -1
  196. package/dist/lib/employee-templates.js +4 -4
  197. package/dist/lib/employees.js +2 -2
  198. package/dist/lib/exe-daemon.js +330 -103
  199. package/dist/lib/hybrid-search.js +5 -5
  200. package/dist/lib/identity.js +2 -2
  201. package/dist/lib/license.js +2 -2
  202. package/dist/lib/messaging.js +14 -14
  203. package/dist/lib/registry-proxy.js +1 -1
  204. package/dist/lib/reminders.js +3 -3
  205. package/dist/lib/schedules.js +5 -5
  206. package/dist/lib/session-registry.js +4 -4
  207. package/dist/lib/skill-learning.js +6 -6
  208. package/dist/lib/store.js +4 -4
  209. package/dist/lib/task-router.js +3 -3
  210. package/dist/lib/tasks.js +15 -15
  211. package/dist/lib/tmux-routing.js +13 -13
  212. package/dist/lib/token-spend.js +3 -3
  213. package/dist/{license-gate-B4HB3ZDR.js → license-gate-BYDMFMFT.js} +3 -3
  214. package/dist/{license-sync-LSKU2X6F.js → license-sync-N3RNYVP2.js} +2 -2
  215. package/dist/mcp/register-tools.js +70 -68
  216. package/dist/mcp/server.js +73 -71
  217. package/dist/mcp/tools/complete-reminder.js +4 -4
  218. package/dist/mcp/tools/create-reminder.js +4 -4
  219. package/dist/mcp/tools/create-task.js +17 -17
  220. package/dist/mcp/tools/deactivate-behavior.js +7 -7
  221. package/dist/mcp/tools/list-reminders.js +4 -4
  222. package/dist/mcp/tools/list-tasks.js +17 -17
  223. package/dist/mcp/tools/send-message.js +16 -16
  224. package/dist/mcp/tools/update-task.js +16 -16
  225. package/dist/{mcp-http-config-D4EBSK3R.js → mcp-http-config-EMAVS2JI.js} +3 -3
  226. package/dist/{memory-cards-E5O4IPYV.js → memory-cards-TQRLZI4D.js} +4 -4
  227. package/dist/{memory-graph-extractor-3NQUGAA5.js → memory-graph-extractor-IWGNVAFU.js} +5 -5
  228. package/dist/{memory-poisoning-defense-DPCHNN7S.js → memory-poisoning-defense-T4ITBGSG.js} +2 -2
  229. package/dist/{memory-pressure-watchdog-4RVYB2JC.js → memory-pressure-watchdog-RRIAXPXQ.js} +14 -14
  230. package/dist/{memory-reflection-EGLE4DZ5.js → memory-reflection-6N4J2FL7.js} +2 -2
  231. package/dist/monitor-grants-RZOVSYVO.js +27 -0
  232. package/dist/monitor-identity-MOXISYNG.js +34 -0
  233. package/dist/{notifications-LDDVXMH7.js → notifications-KONB3C62.js} +13 -13
  234. package/dist/{orchestration-events-2QYYCFSI.js → orchestration-events-5SIJOE4H.js} +3 -3
  235. package/dist/{orchestrator-UFYOUXGZ.js → orchestrator-DUUX7FQV.js} +15 -15
  236. package/dist/{pipeline-router-PLYAEQN7.js → pipeline-router-O6HU7DKH.js} +3 -3
  237. package/dist/{plan-limits-ETP2IFM4.js → plan-limits-GRNBOBB3.js} +5 -5
  238. package/dist/{projection-worker-N4KVTVZE.js → projection-worker-ZVOFHTXT.js} +2 -2
  239. package/dist/{prospective-memory-JPTTRFYJ.js → prospective-memory-W6S67LZZ.js} +2 -2
  240. package/dist/{reranker-267LQRRT.js → reranker-6UQSZVV2.js} +1 -1
  241. package/dist/{retrieval-health-GFGXNPSN.js → retrieval-health-TWHKYCRK.js} +1 -1
  242. package/dist/{review-polling-4IFCCPGQ.js → review-polling-PCMD5BFN.js} +14 -14
  243. package/dist/runtime/index.js +21 -21
  244. package/dist/{session-events-CVNW7DBW.js → session-events-3LCVQEL7.js} +14 -14
  245. package/dist/{session-kill-telemetry-56HNNXLH.js → session-kill-telemetry-CZSPN5V6.js} +14 -14
  246. package/dist/{session-scope-RMKL6YLU.js → session-scope-CFHVSVAQ.js} +13 -13
  247. package/dist/{setup-wizard-L6JMCB33.js → setup-wizard-CJZMM43G.js} +1 -1
  248. package/dist/{skill-refinement-FA5DM3NA.js → skill-refinement-74T6VDFM.js} +3 -3
  249. package/dist/{stack-release-3AF7TQ5N.js → stack-release-XXMV7SPX.js} +40 -3
  250. package/dist/{stack-update-2TGPFH6E.js → stack-update-E2TKHHSQ.js} +3 -3
  251. package/dist/{steward-gate-L2FBY7U4.js → steward-gate-WT7WXQIE.js} +3 -3
  252. package/dist/{task-enforcement-XO6CYQVG.js → task-enforcement-VI7L43DC.js} +14 -14
  253. package/dist/{task-scope-7BWIG4G3.js → task-scope-CQEG5SSJ.js} +13 -13
  254. package/dist/{tasks-crud-IW3ZBFHL.js → tasks-crud-UGK5A25L.js} +13 -13
  255. package/dist/{tasks-notify-MOSUAR3U.js → tasks-notify-SMLDFBWM.js} +14 -14
  256. package/dist/{tasks-review-S2IYB6AA.js → tasks-review-JKBRACII.js} +13 -13
  257. package/dist/{telemetry-upload-IG4AGZFK.js → telemetry-upload-7LBYGPCB.js} +7 -7
  258. package/dist/{token-budget-EVNOJQ7H.js → token-budget-QBRJR4M5.js} +3 -3
  259. package/dist/{tool-telemetry-UPADF5DF.js → tool-telemetry-ULIDUK3P.js} +1 -1
  260. package/dist/tui/App.js +21 -21
  261. package/dist/{tui-data-KCMCI6Z5.js → tui-data-NPTGKT37.js} +13 -13
  262. package/dist/{worker-gate-YY7OZOJH.js → worker-gate-MXUQUG4M.js} +1 -1
  263. package/dist/{workflow-engine-TZW4ZQV3.js → workflow-engine-EWCOLD47.js} +2 -2
  264. package/dist/{worktree-WF7X43XI.js → worktree-GVF2I5FP.js} +4 -4
  265. package/dist/{worktree-sweep-QOAXY6CT.js → worktree-sweep-ZAG3V24E.js} +5 -5
  266. package/package.json +4 -3
  267. package/release-notes.json +29 -20
  268. package/dist/chunk-LO6L5ADL.js +0 -76
  269. package/dist/{chunk-XWIVAMVX.js → chunk-5Z5NATNS.js} +0 -0
  270. package/dist/{chunk-7UMCQQWS.js → chunk-A4DVMPYB.js} +3 -3
  271. /package/dist/{chunk-INT5PHNK.js → chunk-ATOU6CYR.js} +0 -0
  272. /package/dist/{chunk-O4522BYB.js → chunk-D3QASX2W.js} +0 -0
  273. /package/dist/{chunk-66RCRDIF.js → chunk-HHIBOU3P.js} +0 -0
  274. /package/dist/{chunk-TXUSQZLH.js → chunk-IYB2NIW3.js} +0 -0
  275. /package/dist/{chunk-S4Y5YXPX.js → chunk-KTPG4XKI.js} +0 -0
  276. /package/dist/{chunk-OHSJOKKW.js → chunk-NQBRGXYR.js} +0 -0
  277. /package/dist/{chunk-JMGYZLJX.js → chunk-QLFRCA6I.js} +0 -0
  278. /package/dist/{chunk-6A5DGGRT.js → chunk-TNJRWUCE.js} +0 -0
  279. /package/dist/{chunk-OMJH4DQ7.js → chunk-UFAXZ2PY.js} +0 -0
  280. /package/dist/{chunk-NF2OBCEI.js → chunk-UNVHIH7N.js} +0 -0
  281. /package/dist/{chunk-GFWND35H.js → chunk-Z7OZP3ET.js} +0 -0
  282. /package/dist/{core-memory-HCJMR32C.js → core-memory-VO5ZIBKH.js} +0 -0
  283. /package/dist/{oauth-server-YVREFZMD.js → oauth-server-ROQFOEMM.js} +0 -0
  284. /package/dist/{project-boot-OZA6KYFP.js → project-boot-SD7GM24K.js} +0 -0
  285. /package/dist/{wiki-acl-XWSASBWZ.js → wiki-acl-JA5UCQZ4.js} +0 -0
@@ -21,7 +21,7 @@ import {
21
21
  findScopedDuplicate,
22
22
  governMemoryRecord,
23
23
  schedulePostWriteMemoryHygiene
24
- } from "../chunk-66RCRDIF.js";
24
+ } from "../chunk-HHIBOU3P.js";
25
25
  import "../chunk-Y25OJWOQ.js";
26
26
  import {
27
27
  attributeSignalSource,
@@ -80,7 +80,7 @@ import net from "net";
80
80
  import v8 from "v8";
81
81
  import { createServer as createHttpServer, request as httpRequest } from "http";
82
82
  import { randomUUID } from "crypto";
83
- import { writeFileSync as writeFileSync3, unlinkSync as unlinkSync2, mkdirSync as mkdirSync2, existsSync as existsSync3, readFileSync as readFileSync3, chmodSync, readdirSync, renameSync, statSync } from "fs";
83
+ import { writeFileSync as writeFileSync3, unlinkSync as unlinkSync2, mkdirSync as mkdirSync2, existsSync as existsSync4, readFileSync as readFileSync4, chmodSync, readdirSync, renameSync, statSync } from "fs";
84
84
  import { writeFile } from "fs/promises";
85
85
  import { execSync as execSyncNode, execFile as execFileNode } from "child_process";
86
86
  import { promisify } from "util";
@@ -467,26 +467,47 @@ function isHostCpuStarved(load1m, cpuCount, ratio) {
467
467
  }
468
468
  function decideDaemonSelfHeal(s) {
469
469
  const alive = s.processAlive ?? true;
470
+ const resetSelfInflicted = { selfInflictedStreakAfter: 0, selfInflictedSuppressedMsAfter: 0 };
470
471
  if (!alive) {
471
- return { restart: true, reason: "process_dead", consecutiveSevereAfter: 0 };
472
+ return { restart: true, reason: "process_dead", consecutiveSevereAfter: 0, ...resetSelfInflicted };
472
473
  }
473
474
  if (typeof s.rssBytes === "number" && Number.isFinite(s.rssBytes) && typeof s.rssCapBytes === "number" && Number.isFinite(s.rssCapBytes) && s.rssCapBytes > 0 && s.rssBytes > s.rssCapBytes) {
474
- return { restart: true, reason: "rss_over_cap", consecutiveSevereAfter: 0 };
475
+ return { restart: true, reason: "rss_over_cap", consecutiveSevereAfter: 0, ...resetSelfInflicted };
475
476
  }
476
477
  if (isHostCpuStarved(s.load1m, s.cpuCount, s.starvationRatio)) {
477
- return { restart: false, reason: "starved_backoff", consecutiveSevereAfter: 0 };
478
+ return { restart: false, reason: "starved_backoff", consecutiveSevereAfter: 0, ...resetSelfInflicted };
479
+ }
480
+ if (s.catchUpActive) {
481
+ return { restart: false, reason: "catchup_backoff", consecutiveSevereAfter: 0, ...resetSelfInflicted };
482
+ }
483
+ const selfCpuRatio = Number.isFinite(s.selfCpuBusyRatio) ? s.selfCpuBusyRatio : 0.5;
484
+ if (s.lagMs > s.severeThresholdMs && typeof s.selfCpuBusyFraction === "number" && Number.isFinite(s.selfCpuBusyFraction) && s.selfCpuBusyFraction >= selfCpuRatio) {
485
+ const streakLimit = typeof s.selfInflictedLimit === "number" && s.selfInflictedLimit > 0 ? s.selfInflictedLimit : 5;
486
+ const suppressCapMs = typeof s.selfInflictedSuppressCapMs === "number" && s.selfInflictedSuppressCapMs > 0 ? s.selfInflictedSuppressCapMs : 15e4;
487
+ const streakNext = (s.selfInflictedStreak ?? 0) + 1;
488
+ const suppressedNext = (s.selfInflictedSuppressedMs ?? 0) + s.lagMs;
489
+ if (streakNext >= streakLimit || suppressedNext > suppressCapMs) {
490
+ return { restart: true, reason: "single_block", consecutiveSevereAfter: 0, ...resetSelfInflicted };
491
+ }
492
+ return {
493
+ restart: false,
494
+ reason: "self_inflicted_backoff",
495
+ consecutiveSevereAfter: 0,
496
+ selfInflictedStreakAfter: streakNext,
497
+ selfInflictedSuppressedMsAfter: suppressedNext
498
+ };
478
499
  }
479
500
  if (s.lagMs > s.singleBlockMs) {
480
- return { restart: true, reason: "single_block", consecutiveSevereAfter: 0 };
501
+ return { restart: true, reason: "single_block", consecutiveSevereAfter: 0, ...resetSelfInflicted };
481
502
  }
482
503
  if (s.lagMs > s.severeThresholdMs) {
483
504
  const next = s.consecutiveSevere + 1;
484
505
  if (next >= s.consecutiveLimit) {
485
- return { restart: true, reason: "consecutive_blocks", consecutiveSevereAfter: next };
506
+ return { restart: true, reason: "consecutive_blocks", consecutiveSevereAfter: next, ...resetSelfInflicted };
486
507
  }
487
- return { restart: false, reason: "counting", consecutiveSevereAfter: next };
508
+ return { restart: false, reason: "counting", consecutiveSevereAfter: next, ...resetSelfInflicted };
488
509
  }
489
- return { restart: false, reason: "not_critical", consecutiveSevereAfter: 0 };
510
+ return { restart: false, reason: "not_critical", consecutiveSevereAfter: 0, ...resetSelfInflicted };
490
511
  }
491
512
  function decideOrchestrationTickSkip(s) {
492
513
  if (isHostCpuStarved(s.load1m, s.cpuCount, s.starvationRatio)) {
@@ -508,7 +529,61 @@ function decideBootBackoff(s) {
508
529
  return { wait: true, delayMs, reason: "backoff" };
509
530
  }
510
531
 
532
+ // src/lib/daemon-env.ts
533
+ import { readFileSync as readFileSync3, existsSync as existsSync3 } from "fs";
534
+ import { homedir } from "os";
535
+ import { join } from "path";
536
+ function daemonEnvPath() {
537
+ return join(homedir(), ".exe-os", "daemon.env");
538
+ }
539
+ function parseDaemonEnv(contents) {
540
+ const out = {};
541
+ for (const rawLine of contents.split(/\r?\n/)) {
542
+ const line = rawLine.trim();
543
+ if (line === "" || line.startsWith("#")) continue;
544
+ const eq = line.indexOf("=");
545
+ if (eq <= 0) continue;
546
+ const key = line.slice(0, eq).trim();
547
+ if (key === "") continue;
548
+ let value = line.slice(eq + 1).trim();
549
+ if (value.length >= 2) {
550
+ const first = value[0];
551
+ const last = value[value.length - 1];
552
+ if (first === '"' && last === '"' || first === "'" && last === "'") {
553
+ value = value.slice(1, -1);
554
+ }
555
+ }
556
+ out[key] = value;
557
+ }
558
+ return out;
559
+ }
560
+ function applyDaemonEnv(parsed, env = process.env) {
561
+ let applied = 0;
562
+ for (const [key, value] of Object.entries(parsed)) {
563
+ if (env[key] !== void 0) continue;
564
+ env[key] = value;
565
+ applied += 1;
566
+ }
567
+ return applied;
568
+ }
569
+ function loadDaemonEnv(path4 = daemonEnvPath()) {
570
+ let contents;
571
+ try {
572
+ if (!existsSync3(path4)) return 0;
573
+ contents = readFileSync3(path4, "utf8");
574
+ } catch {
575
+ return 0;
576
+ }
577
+ const applied = applyDaemonEnv(parseDaemonEnv(contents), process.env);
578
+ if (applied > 0) {
579
+ process.stderr.write(`[daemon] loaded ${applied} vars from daemon.env
580
+ `);
581
+ }
582
+ return applied;
583
+ }
584
+
511
585
  // src/lib/exe-daemon.ts
586
+ loadDaemonEnv();
512
587
  function stabilizeDaemonCwd() {
513
588
  try {
514
589
  process.cwd();
@@ -516,7 +591,7 @@ function stabilizeDaemonCwd() {
516
591
  } catch (err) {
517
592
  const moduleDir = path3.dirname(fileURLToPath(import.meta.url));
518
593
  const packageRoot = path3.resolve(moduleDir, "../..");
519
- const fallback = existsSync3(path3.join(packageRoot, "package.json")) ? packageRoot : os2.homedir();
594
+ const fallback = existsSync4(path3.join(packageRoot, "package.json")) ? packageRoot : os2.homedir();
520
595
  try {
521
596
  process.chdir(fallback);
522
597
  process.stderr.write(
@@ -541,7 +616,7 @@ var REVIEW_POLL_INTERVAL_MS = 60 * 1e3;
541
616
  var DAEMON_TOKEN_ENV = "EXE_DAEMON_TOKEN";
542
617
  var PACKAGE_VERSION = (() => {
543
618
  try {
544
- const pkg = JSON.parse(readFileSync3(new URL("../../package.json", import.meta.url), "utf8"));
619
+ const pkg = JSON.parse(readFileSync4(new URL("../../package.json", import.meta.url), "utf8"));
545
620
  return typeof pkg.version === "string" ? pkg.version : "unknown";
546
621
  } catch {
547
622
  return "unknown";
@@ -842,7 +917,41 @@ var _idleTimer = null;
842
917
  var _requestsServed = 0;
843
918
  var _droppedRequests = 0;
844
919
  var _startedAt2 = Date.now();
920
+ var POST_RESTART_DESTRUCTIVE_GRACE_MS = Number(process.env.EXE_POST_RESTART_DESTRUCTIVE_GRACE_MS) || 10 * 60 * 1e3;
921
+ var SELF_HEAL_RESTART_COOLDOWN_MS = Number(process.env.EXE_SELF_HEAL_RESTART_COOLDOWN_MS) || 30 * 60 * 1e3;
922
+ var _lastSelfHealShutdownAtMs = 0;
923
+ var _postRestartGraceLogged = /* @__PURE__ */ new Set();
845
924
  process.env.EXE_DAEMON_STARTED_AT_ISO ??= new Date(_startedAt2).toISOString();
925
+ var BOOT_CATCHUP_GRACE_MS = Number(process.env.EXE_BOOT_CATCHUP_GRACE_MS) || 3 * 60 * 1e3;
926
+ var _bootCatchUpUntilMs = _startedAt2 + BOOT_CATCHUP_GRACE_MS;
927
+ function inBootCatchUpGrace() {
928
+ return Date.now() < _bootCatchUpUntilMs;
929
+ }
930
+ function extendBootCatchUp(ms) {
931
+ _bootCatchUpUntilMs = Math.max(_bootCatchUpUntilMs, Date.now() + ms);
932
+ }
933
+ function postRestartGraceRemainingMs() {
934
+ return Math.max(0, POST_RESTART_DESTRUCTIVE_GRACE_MS - (Date.now() - _startedAt2));
935
+ }
936
+ function inPostRestartDestructiveGrace(owner) {
937
+ const remaining = postRestartGraceRemainingMs();
938
+ if (remaining <= 0) return false;
939
+ if (!_postRestartGraceLogged.has(owner)) {
940
+ _postRestartGraceLogged.add(owner);
941
+ process.stderr.write(`[exed] ${owner}: destructive action suppressed during post-restart grace (${Math.ceil(remaining / 1e3)}s remaining)
942
+ `);
943
+ logDaemonHealth({
944
+ event: "post_restart_destructive_grace",
945
+ pid: process.pid,
946
+ message: `${owner}: destructive action suppressed during post-restart grace`,
947
+ data: { owner, remainingMs: remaining }
948
+ });
949
+ }
950
+ return true;
951
+ }
952
+ function selfHealRestartOnCooldown() {
953
+ return _lastSelfHealShutdownAtMs > 0 && Date.now() - _lastSelfHealShutdownAtMs < SELF_HEAL_RESTART_COOLDOWN_MS;
954
+ }
846
955
  var _bootPhase = "pre_init";
847
956
  function setBootPhase(phase) {
848
957
  _bootPhase = phase;
@@ -955,7 +1064,7 @@ function recordDaemonCrash() {
955
1064
  const now = Date.now();
956
1065
  let counter = { crashes: [] };
957
1066
  try {
958
- counter = JSON.parse(readFileSync3(CRASH_LOOP_COUNTER_PATH, "utf8"));
1067
+ counter = JSON.parse(readFileSync4(CRASH_LOOP_COUNTER_PATH, "utf8"));
959
1068
  } catch {
960
1069
  }
961
1070
  counter.crashes = counter.crashes.filter((t) => now - t < CRASH_LOOP_WINDOW_MS);
@@ -983,7 +1092,7 @@ function recordDaemonCrash() {
983
1092
  }
984
1093
  function isCrashLoopBreakerActive() {
985
1094
  try {
986
- if (!existsSync3(CRASH_LOOP_BREAKER_PATH)) return false;
1095
+ if (!existsSync4(CRASH_LOOP_BREAKER_PATH)) return false;
987
1096
  const ageMs = Date.now() - statSync(CRASH_LOOP_BREAKER_PATH).mtimeMs;
988
1097
  if (ageMs > CRASH_LOOP_BREAKER_TTL_MS) {
989
1098
  unlinkSync2(CRASH_LOOP_BREAKER_PATH);
@@ -1024,7 +1133,7 @@ function currentEmbedConfigFingerprint() {
1024
1133
  }
1025
1134
  function clearStaleOomMarker() {
1026
1135
  try {
1027
- if (!existsSync3(OOM_MARKER_PATH)) return false;
1136
+ if (!existsSync4(OOM_MARKER_PATH)) return false;
1028
1137
  const ageMs = Date.now() - statSync(OOM_MARKER_PATH).mtimeMs;
1029
1138
  if (ageMs < OOM_MARKER_TTL_MS) return false;
1030
1139
  unlinkSync2(OOM_MARKER_PATH);
@@ -1062,8 +1171,8 @@ function checkLaunchdPlistHealth() {
1062
1171
  try {
1063
1172
  if (process.platform !== "darwin") return;
1064
1173
  const plistPath = path3.join(os2.homedir(), "Library", "LaunchAgents", "com.askexe.exed.plist");
1065
- if (!existsSync3(plistPath)) return;
1066
- const plist = readFileSync3(plistPath, "utf8");
1174
+ if (!existsSync4(plistPath)) return;
1175
+ const plist = readFileSync4(plistPath, "utf8");
1067
1176
  const expectedHeap = computeDaemonHeapCapMb();
1068
1177
  const heapMatch = plist.match(/--max-old-space-size=(\d+)/);
1069
1178
  const heap = heapMatch?.[1] ? parseInt(heapMatch[1], 10) : null;
@@ -1134,7 +1243,7 @@ async function loadModel() {
1134
1243
  } catch {
1135
1244
  }
1136
1245
  const modelPath = path3.join(MODELS_DIR, MODEL_FILE);
1137
- if (!existsSync3(modelPath)) {
1246
+ if (!existsSync4(modelPath)) {
1138
1247
  process.stderr.write(`[exed] No model at ${modelPath} \u2014 running without embeddings (VPS mode).
1139
1248
  `);
1140
1249
  _embeddingsDisabledByDesign = true;
@@ -1145,19 +1254,19 @@ async function loadModel() {
1145
1254
  process.stderr.write(`[exed] Embedding config changed \u2014 cleared stale embed-worker backoff (one prompt retry under new config).
1146
1255
  `);
1147
1256
  try {
1148
- if (existsSync3(EMBED_TIMEOUT_MARKER_PATH)) unlinkSync2(EMBED_TIMEOUT_MARKER_PATH);
1257
+ if (existsSync4(EMBED_TIMEOUT_MARKER_PATH)) unlinkSync2(EMBED_TIMEOUT_MARKER_PATH);
1149
1258
  } catch {
1150
1259
  }
1151
1260
  _embedConsecutiveTimeouts = 0;
1152
1261
  }
1153
1262
  clearStaleOomMarker();
1154
- if (existsSync3(OOM_MARKER_PATH)) {
1263
+ if (existsSync4(OOM_MARKER_PATH)) {
1155
1264
  process.stderr.write(`[exed] Skipping embeddings \u2014 OOM marker exists. Delete ${OOM_MARKER_PATH} to retry.
1156
1265
  `);
1157
1266
  _embeddingsDisabledByDesign = true;
1158
1267
  return;
1159
1268
  }
1160
- if (existsSync3(EMBED_TIMEOUT_MARKER_PATH)) {
1269
+ if (existsSync4(EMBED_TIMEOUT_MARKER_PATH)) {
1161
1270
  process.stderr.write(`[exed] Skipping embeddings \u2014 inference-timeout marker exists (local embeddings non-functional on this host). Set EXE_EMBEDDINGS=0 or delete ${EMBED_TIMEOUT_MARKER_PATH} to retry.
1162
1271
  `);
1163
1272
  _embeddingsDisabledByDesign = true;
@@ -1212,7 +1321,7 @@ async function loadModel() {
1212
1321
  process.stderr.write("[exed] Spawning embed worker process...\n");
1213
1322
  try {
1214
1323
  const workerPath = path3.join(path3.dirname(new URL(import.meta.url).pathname), "embed-worker.js");
1215
- if (!existsSync3(workerPath)) {
1324
+ if (!existsSync4(workerPath)) {
1216
1325
  process.stderr.write(`[exed] Embed worker not found at ${workerPath} \u2014 running without embeddings.
1217
1326
  `);
1218
1327
  return;
@@ -1319,7 +1428,7 @@ async function loadModel() {
1319
1428
  void (async () => {
1320
1429
  try {
1321
1430
  if (_storeInitialized) {
1322
- const { writeNotification } = await import("../notifications-LDDVXMH7.js");
1431
+ const { writeNotification } = await import("../notifications-KONB3C62.js");
1323
1432
  await writeNotification({
1324
1433
  agentId: "exe",
1325
1434
  agentRole: "system",
@@ -1435,7 +1544,7 @@ function disableEmbeddingsForInferenceTimeouts() {
1435
1544
  void (async () => {
1436
1545
  try {
1437
1546
  if (_storeInitialized) {
1438
- const { writeNotification } = await import("../notifications-LDDVXMH7.js");
1547
+ const { writeNotification } = await import("../notifications-KONB3C62.js");
1439
1548
  await writeNotification({
1440
1549
  agentId: "exe",
1441
1550
  agentRole: "system",
@@ -1646,7 +1755,7 @@ async function shutdown(exitCode = 0) {
1646
1755
  }
1647
1756
  }
1648
1757
  try {
1649
- const { createBackupAsync, enforceRetention, hasRecentBackup } = await import("../db-backup-UBKQZVEI.js");
1758
+ const { createBackupAsync, enforceRetention, hasRecentBackup } = await import("../db-backup-DLD4QZBO.js");
1650
1759
  const PRE_RESTART_DEDUP_MS = 2 * 60 * 1e3;
1651
1760
  if (hasRecentBackup("pre-restart", PRE_RESTART_DEDUP_MS)) {
1652
1761
  const deleted = enforceRetention("pre-restart");
@@ -1677,7 +1786,7 @@ async function shutdown(exitCode = 0) {
1677
1786
  `);
1678
1787
  }
1679
1788
  try {
1680
- const { stopProjectionWorker } = await import("../projection-worker-N4KVTVZE.js");
1789
+ const { stopProjectionWorker } = await import("../projection-worker-ZVOFHTXT.js");
1681
1790
  stopProjectionWorker();
1682
1791
  } catch {
1683
1792
  }
@@ -1743,7 +1852,7 @@ async function handleHealthCheck(socket, requestId) {
1743
1852
  let pipelineStatus = "unknown";
1744
1853
  if (dbConnected) {
1745
1854
  try {
1746
- await import("../pipeline-router-PLYAEQN7.js");
1855
+ await import("../pipeline-router-O6HU7DKH.js");
1747
1856
  pipelineStatus = "ok";
1748
1857
  } catch {
1749
1858
  pipelineStatus = "unavailable";
@@ -1931,12 +2040,12 @@ function persistIngestOutbox(req) {
1931
2040
  }
1932
2041
  async function drainIngestOutbox() {
1933
2042
  try {
1934
- if (!existsSync3(INGEST_OUTBOX_DIR)) return;
2043
+ if (!existsSync4(INGEST_OUTBOX_DIR)) return;
1935
2044
  const files = readdirSync(INGEST_OUTBOX_DIR).filter((f) => f.endsWith(".json")).sort().slice(0, 500);
1936
2045
  for (const file of files) {
1937
2046
  const fullPath = path3.join(INGEST_OUTBOX_DIR, file);
1938
2047
  try {
1939
- const req = JSON.parse(readFileSync3(fullPath, "utf8"));
2048
+ const req = JSON.parse(readFileSync4(fullPath, "utf8"));
1940
2049
  await handleIngest(req, fullPath);
1941
2050
  } catch (err) {
1942
2051
  process.stderr.write(`[exed] Ingest outbox drain failed for ${file}: ${err instanceof Error ? err.message : String(err)}
@@ -2139,7 +2248,7 @@ async function _writeMemoryRecordInner(entry) {
2139
2248
  const vRow = await client.execute({ sql: "SELECT version FROM memories WHERE id = ?", args: [id] });
2140
2249
  const version = Number(vRow.rows[0]?.version) || 0;
2141
2250
  try {
2142
- const { insertOntologyForMemory } = await import("../agentic-ontology-V2BQY4DH.js");
2251
+ const { insertOntologyForMemory } = await import("../agentic-ontology-RNSXGXW4.js");
2143
2252
  await insertOntologyForMemory({
2144
2253
  id,
2145
2254
  agent_id: record.agent_id,
@@ -2343,7 +2452,7 @@ function startServer() {
2343
2452
  const oldPath = path3.join(path3.dirname(SOCKET_PATH), oldFile);
2344
2453
  try {
2345
2454
  if (oldFile.endsWith(".pid")) {
2346
- const pid = parseInt(readFileSync3(oldPath, "utf8").trim(), 10);
2455
+ const pid = parseInt(readFileSync4(oldPath, "utf8").trim(), 10);
2347
2456
  if (pid > 0) try {
2348
2457
  process.kill(pid, "SIGKILL");
2349
2458
  } catch {
@@ -2875,7 +2984,7 @@ async function startMcpHttpServer() {
2875
2984
  process.stderr.write("[exed] MCP HTTP: DB ready\n");
2876
2985
  setBootPhase("db_ready");
2877
2986
  _storeInitialized = true;
2878
- const { initLicenseGate, getCachedLicenseGate } = await import("../license-gate-B4HB3ZDR.js");
2987
+ const { initLicenseGate, getCachedLicenseGate } = await import("../license-gate-BYDMFMFT.js");
2879
2988
  const gateResult = await initLicenseGate();
2880
2989
  if (!gateResult.hasKey) {
2881
2990
  process.stderr.write(
@@ -2890,7 +2999,7 @@ async function startMcpHttpServer() {
2890
2999
  let _cachedWrapTelemetry = null;
2891
3000
  async function getWrapTelemetry() {
2892
3001
  if (!_cachedWrapTelemetry) {
2893
- const { wrapServerWithTelemetry } = await import("../tool-telemetry-UPADF5DF.js");
3002
+ const { wrapServerWithTelemetry } = await import("../tool-telemetry-ULIDUK3P.js");
2894
3003
  _cachedWrapTelemetry = wrapServerWithTelemetry;
2895
3004
  }
2896
3005
  return _cachedWrapTelemetry;
@@ -2960,7 +3069,7 @@ async function startMcpHttpServer() {
2960
3069
  if (!token || token === header) return false;
2961
3070
  if (token === _daemonToken) return true;
2962
3071
  try {
2963
- const { verifyAccessToken } = await import("../oauth-server-YVREFZMD.js");
3072
+ const { verifyAccessToken } = await import("../oauth-server-ROQFOEMM.js");
2964
3073
  const result = verifyAccessToken(token);
2965
3074
  return result.valid;
2966
3075
  } catch {
@@ -2971,8 +3080,8 @@ async function startMcpHttpServer() {
2971
3080
  _mcpSessionDetailsRef = sessionDetails;
2972
3081
  try {
2973
3082
  const sessPath = path3.join(EXE_AI_DIR, "mcp-sessions-persist.json");
2974
- if (existsSync3(sessPath)) {
2975
- const raw = readFileSync3(sessPath, "utf-8");
3083
+ if (existsSync4(sessPath)) {
3084
+ const raw = readFileSync4(sessPath, "utf-8");
2976
3085
  const saved = JSON.parse(raw);
2977
3086
  const MAX_AGE_MS = 5 * 60 * 1e3;
2978
3087
  const now = Date.now();
@@ -3205,7 +3314,7 @@ async function startMcpHttpServer() {
3205
3314
  return;
3206
3315
  }
3207
3316
  try {
3208
- const { handleOAuthRoute } = await import("../oauth-server-YVREFZMD.js");
3317
+ const { handleOAuthRoute } = await import("../oauth-server-ROQFOEMM.js");
3209
3318
  const handled = await handleOAuthRoute(req, res, url, MCP_HTTP_PORT);
3210
3319
  if (handled) return;
3211
3320
  } catch (err) {
@@ -3333,7 +3442,7 @@ async function startMcpHttpServer() {
3333
3442
  contextPct: body.context_pct
3334
3443
  });
3335
3444
  if (body.context_pct !== void 0 && body.context_pct > 70) {
3336
- void import("../orchestration-events-2QYYCFSI.js").then(({ recordOrchestrationEventBestEffort: recordOE }) => {
3445
+ void import("../orchestration-events-5SIJOE4H.js").then(({ recordOrchestrationEventBestEffort: recordOE }) => {
3337
3446
  recordOE({
3338
3447
  eventType: "context.pressure",
3339
3448
  source: "exe-daemon.heartbeat",
@@ -3946,13 +4055,13 @@ async function ensureStoreForPolling() {
3946
4055
  }
3947
4056
  }
3948
4057
  async function startReviewPolling() {
3949
- const polling = await import("../review-polling-4IFCCPGQ.js");
4058
+ const polling = await import("../review-polling-PCMD5BFN.js");
3950
4059
  const state = {
3951
4060
  lastIntercomSent: /* @__PURE__ */ new Map(),
3952
4061
  lastNudgeSent: /* @__PURE__ */ new Map(),
3953
4062
  intervalMs: REVIEW_POLL_INTERVAL_MS
3954
4063
  };
3955
- const { pollReviewNudge, createReviewNudgeRealDeps, loadNudgeState } = await import("../daemon-orchestration-KIAYDBWN.js");
4064
+ const { pollReviewNudge, createReviewNudgeRealDeps, loadNudgeState } = await import("../daemon-orchestration-7QB6QOXT.js");
3956
4065
  const nudgeState = loadNudgeState();
3957
4066
  const tick = async () => traceDaemonTimer("review_polling", async () => {
3958
4067
  fired("review_polling");
@@ -3994,9 +4103,10 @@ function startSessionTTL() {
3994
4103
  const tick = async () => traceDaemonTimer("session_ttl", async () => {
3995
4104
  fired("session_ttl");
3996
4105
  if (!await ensureStoreForPolling()) return;
4106
+ if (inPostRestartDestructiveGrace("session_ttl")) return;
3997
4107
  try {
3998
4108
  const { getClient } = await import("./database.js");
3999
- const { checkSessionTTL, createSessionTTLRealDeps } = await import("../daemon-orchestration-KIAYDBWN.js");
4109
+ const { checkSessionTTL, createSessionTTLRealDeps } = await import("../daemon-orchestration-7QB6QOXT.js");
4000
4110
  const deps = createSessionTTLRealDeps(getClient);
4001
4111
  const killed = await checkSessionTTL(deps);
4002
4112
  if (killed.length > 0) acted("session_ttl");
@@ -4016,9 +4126,10 @@ function startIdleKill() {
4016
4126
  const tick = async () => traceDaemonTimer("idle_kill", async () => {
4017
4127
  fired("idle_kill");
4018
4128
  if (!await ensureStoreForPolling()) return;
4129
+ if (inPostRestartDestructiveGrace("idle_kill")) return;
4019
4130
  try {
4020
4131
  const signalDir = path3.join(os2.homedir(), ".exe-os", "task-signals");
4021
- if (existsSync3(signalDir)) {
4132
+ if (existsSync4(signalDir)) {
4022
4133
  const files = (await import("fs")).readdirSync(signalDir).filter((f) => f.endsWith(".terminate"));
4023
4134
  for (const file of files) {
4024
4135
  const agentId = file.replace(".terminate", "");
@@ -4044,7 +4155,7 @@ function startIdleKill() {
4044
4155
  const cfg = await getCachedConfig();
4045
4156
  if (!cfg) return;
4046
4157
  const { getClient } = await import("./database.js");
4047
- const { pollIdleKill, createIdleKillRealDeps } = await import("../daemon-orchestration-KIAYDBWN.js");
4158
+ const { pollIdleKill, createIdleKillRealDeps } = await import("../daemon-orchestration-7QB6QOXT.js");
4048
4159
  const { sessions: liveSessions, paneCache, aliveSessions } = await getSharedOrchestrationCaches();
4049
4160
  const realDeps = createIdleKillRealDeps(
4050
4161
  getClient,
@@ -4117,7 +4228,7 @@ function startConsolidation() {
4117
4228
  `);
4118
4229
  }
4119
4230
  try {
4120
- const { createBackupAsync, enforceRetention } = await import("../db-backup-UBKQZVEI.js");
4231
+ const { createBackupAsync, enforceRetention } = await import("../db-backup-DLD4QZBO.js");
4121
4232
  const p = await createBackupAsync("pre-consolidation");
4122
4233
  if (p) enforceRetention("pre-consolidation");
4123
4234
  } catch (e) {
@@ -4350,7 +4461,7 @@ function startSkillRefinement() {
4350
4461
  if (!shouldRunHeavyJob("skill_refinement")) return;
4351
4462
  try {
4352
4463
  if (!await ensureStoreForPolling()) return;
4353
- const { runSkillRefinement } = await import("../skill-refinement-FA5DM3NA.js");
4464
+ const { runSkillRefinement } = await import("../skill-refinement-74T6VDFM.js");
4354
4465
  const result = await runSkillRefinement();
4355
4466
  if (result.reviewed > 0) {
4356
4467
  acted("skill_refinement");
@@ -4376,8 +4487,8 @@ function startStaleBranchSweep() {
4376
4487
  const tick = async () => {
4377
4488
  fired("stale_branch_sweep");
4378
4489
  try {
4379
- const { discoverRepoPaths } = await import("../worktree-sweep-QOAXY6CT.js");
4380
- const { scanUnmergedBranches } = await import("../branch-hygiene-55TKIWAZ.js");
4490
+ const { discoverRepoPaths } = await import("../worktree-sweep-ZAG3V24E.js");
4491
+ const { scanUnmergedBranches } = await import("../branch-hygiene-R5NVTRAY.js");
4381
4492
  const today = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
4382
4493
  for (const k of _staleBranchAlertedToday) {
4383
4494
  if (!k.endsWith(today)) _staleBranchAlertedToday.delete(k);
@@ -4389,9 +4500,10 @@ function startStaleBranchSweep() {
4389
4500
  repos = [];
4390
4501
  }
4391
4502
  for (const repo of repos) {
4503
+ await yieldToEventLoop();
4392
4504
  let scan;
4393
4505
  try {
4394
- scan = scanUnmergedBranches(repo, { staleHours: STALE_BRANCH_HOURS });
4506
+ scan = await scanUnmergedBranches(repo, { staleHours: STALE_BRANCH_HOURS });
4395
4507
  } catch {
4396
4508
  continue;
4397
4509
  }
@@ -4403,7 +4515,7 @@ function startStaleBranchSweep() {
4403
4515
  if (!_storeInitialized) continue;
4404
4516
  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("; ");
4405
4517
  try {
4406
- const { writeNotification } = await import("../notifications-LDDVXMH7.js");
4518
+ const { writeNotification } = await import("../notifications-KONB3C62.js");
4407
4519
  await writeNotification({
4408
4520
  agentId: "exe",
4409
4521
  agentRole: "system",
@@ -4442,7 +4554,7 @@ function startGraphExtraction() {
4442
4554
  if (!await ensureStoreForPolling()) return;
4443
4555
  const { getClient } = await import("./database.js");
4444
4556
  const client = getClient();
4445
- const { extractBatch } = await import("../graph-rag-WAK2BRJH.js");
4557
+ const { extractBatch } = await import("../graph-rag-JZZAB7PC.js");
4446
4558
  const result = await extractBatch(client, 50, config.selfQueryModel);
4447
4559
  if (result.processed > 0) {
4448
4560
  acted("graph_extraction");
@@ -4860,7 +4972,7 @@ function startReflectionSweep() {
4860
4972
  );
4861
4973
  let runReflection;
4862
4974
  try {
4863
- ({ runReflection } = await import("../memory-reflection-EGLE4DZ5.js"));
4975
+ ({ runReflection } = await import("../memory-reflection-6N4J2FL7.js"));
4864
4976
  } catch (importErr) {
4865
4977
  _reflectionImportFailed = true;
4866
4978
  process.stderr.write(`[exed] Reflection module unavailable (stale chunk hash?) \u2014 disabled until daemon restart: ${importErr instanceof Error ? importErr.message : String(importErr)}
@@ -4901,7 +5013,7 @@ function startReflectionSweep() {
4901
5013
  if (memories > 100 && cards < memories * 0.1) {
4902
5014
  process.stderr.write(`[exed] Memory cards sparse (${cards} cards / ${memories} memories) \u2014 running backfill...
4903
5015
  `);
4904
- const { insertMemoryCardsForBatch } = await import("../memory-cards-E5O4IPYV.js");
5016
+ const { insertMemoryCardsForBatch } = await import("../memory-cards-TQRLZI4D.js");
4905
5017
  const batchSize = 500;
4906
5018
  let offset = 0;
4907
5019
  let totalCards = 0;
@@ -4946,7 +5058,7 @@ function startDatabaseBackup() {
4946
5058
  fired("db_backup");
4947
5059
  if (!shouldRunHeavyJob("db_backup")) return;
4948
5060
  try {
4949
- const { createBackupAsync, enforceRetention, hasBackupToday } = await import("../db-backup-UBKQZVEI.js");
5061
+ const { createBackupAsync, enforceRetention, hasBackupToday } = await import("../db-backup-DLD4QZBO.js");
4950
5062
  if (hasBackupToday("daily")) return;
4951
5063
  const backupPath = await createBackupAsync("daily");
4952
5064
  if (backupPath) {
@@ -5001,7 +5113,8 @@ function startSoftDeletePurge() {
5001
5113
  `);
5002
5114
  }
5003
5115
  };
5004
- void tick();
5116
+ extendBootCatchUp(2e4);
5117
+ setTimeout(() => void traceDaemonTimer("soft_delete_purge", tick), 4e3);
5005
5118
  const timer = setInterval(() => void traceDaemonTimer("soft_delete_purge", tick), PURGE_INTERVAL_MS);
5006
5119
  timer.unref();
5007
5120
  process.stderr.write(`[exed] Soft-delete purge started (every 6h, soft-delete: 7d, archived: opt-in via config.archivePurge)
@@ -5015,7 +5128,7 @@ function startSessionEventsRetention() {
5015
5128
  if (!await ensureStoreForPolling()) return;
5016
5129
  try {
5017
5130
  const { getClient } = await import("./database.js");
5018
- const { sweepExpiredSessionEvents, DEFAULT_SESSION_EVENTS_RETENTION_DAYS } = await import("../session-events-CVNW7DBW.js");
5131
+ const { sweepExpiredSessionEvents, DEFAULT_SESSION_EVENTS_RETENTION_DAYS } = await import("../session-events-3LCVQEL7.js");
5019
5132
  const days = SESSION_EVENTS_RETENTION_DAYS ?? DEFAULT_SESSION_EVENTS_RETENTION_DAYS;
5020
5133
  const count = await sweepExpiredSessionEvents(getClient(), days);
5021
5134
  if (count > 0) {
@@ -5032,7 +5145,8 @@ function startSessionEventsRetention() {
5032
5145
  );
5033
5146
  }
5034
5147
  };
5035
- void tick();
5148
+ extendBootCatchUp(2e4);
5149
+ setTimeout(() => void traceDaemonTimer("session_events_retention", tick), 8e3);
5036
5150
  const timer = setInterval(() => void traceDaemonTimer("session_events_retention", tick), SESSION_EVENTS_RETENTION_INTERVAL_MS);
5037
5151
  timer.unref();
5038
5152
  process.stderr.write(
@@ -5045,10 +5159,9 @@ function startIntercomQueueDrain() {
5045
5159
  const tick = async () => traceDaemonTimer("intercom_queue_drain", async () => {
5046
5160
  fired("intercom_queue_drain");
5047
5161
  try {
5048
- const { drainQueue, readQueue } = await import("../intercom-queue-XJ3RTJ2C.js");
5162
+ const { drainQueueAsync, readQueue } = await import("../intercom-queue-VU2G6F5R.js");
5049
5163
  const {
5050
- isSessionBusy,
5051
- sendIntercom: centralSendIntercom,
5164
+ sendIntercomAsync: centralSendIntercomAsync,
5052
5165
  decideQueuedNudgeDrain,
5053
5166
  countScopedPendingReviews
5054
5167
  } = await import("./tmux-routing.js");
@@ -5083,9 +5196,14 @@ function startIntercomQueueDrain() {
5083
5196
  if (count !== null) pendingReviewCounts.set(target, count);
5084
5197
  }
5085
5198
  }
5086
- const result = drainQueue(
5087
- (session) => isSessionBusy(session),
5088
- (session, item) => {
5199
+ const result = await drainQueueAsync(
5200
+ // Bug ddbfc3f6: async busy check via the shared async pane cache —
5201
+ // no sync execFileSync("tmux") per queue item on the event loop.
5202
+ async (session) => {
5203
+ const state = classifyPaneState(await capturePaneAsync(session, 5));
5204
+ return state === "thinking" || state === "tool";
5205
+ },
5206
+ async (session, item) => {
5089
5207
  try {
5090
5208
  const agentRaw = session.split("-")[0] ?? session;
5091
5209
  const agent = baseAgentName(agentRaw);
@@ -5099,7 +5217,7 @@ function startIntercomQueueDrain() {
5099
5217
  `);
5100
5218
  return true;
5101
5219
  }
5102
- const outcome = centralSendIntercom(session, {
5220
+ const outcome = await centralSendIntercomAsync(session, {
5103
5221
  reason: item.intercomReason ?? "nudge"
5104
5222
  });
5105
5223
  return outcome === "delivered" || outcome === "debounced" || outcome === "skipped_exe";
@@ -5130,7 +5248,7 @@ function startOrphanReaper() {
5130
5248
  const tick = async () => traceDaemonTimer("orphan_reaper", async () => {
5131
5249
  fired("orphan_reaper");
5132
5250
  try {
5133
- const { reapOrphanedMcpProcesses, createOrphanReaperRealDepsAsync } = await import("../daemon-orchestration-KIAYDBWN.js");
5251
+ const { reapOrphanedMcpProcesses, createOrphanReaperRealDepsAsync } = await import("../daemon-orchestration-7QB6QOXT.js");
5134
5252
  const deps = await createOrphanReaperRealDepsAsync();
5135
5253
  const reaped = await reapOrphanedMcpProcesses(deps);
5136
5254
  if (reaped.length > 0) acted("orphan_reaper");
@@ -5155,7 +5273,7 @@ function startZombieAgentReaper() {
5155
5273
  const tick = async () => traceDaemonTimer("zombie_agent_reaper", async () => {
5156
5274
  fired("zombie_agent_reaper");
5157
5275
  try {
5158
- const { reapZombieAgentProcesses, createZombieAgentReaperRealDepsAsync } = await import("../daemon-orchestration-KIAYDBWN.js");
5276
+ const { reapZombieAgentProcesses, createZombieAgentReaperRealDepsAsync } = await import("../daemon-orchestration-7QB6QOXT.js");
5159
5277
  const deps = await createZombieAgentReaperRealDepsAsync();
5160
5278
  const reaped = reapZombieAgentProcesses(deps);
5161
5279
  if (reaped.length > 0) acted("zombie_agent_reaper");
@@ -5179,7 +5297,7 @@ async function startDaemonMemoryPressureWatchdog() {
5179
5297
  try {
5180
5298
  const cfg = await getCachedConfig();
5181
5299
  if (!cfg) return;
5182
- const { startMemoryPressureWatchdog: startWatchdog, MEMORY_PRESSURE_WATCHDOG_DEFAULTS } = await import("../memory-pressure-watchdog-4RVYB2JC.js");
5300
+ const { startMemoryPressureWatchdog: startWatchdog, MEMORY_PRESSURE_WATCHDOG_DEFAULTS } = await import("../memory-pressure-watchdog-RRIAXPXQ.js");
5183
5301
  const watchdogCfg = {
5184
5302
  ...MEMORY_PRESSURE_WATCHDOG_DEFAULTS,
5185
5303
  ...cfg.memoryPressureWatchdog ?? {}
@@ -5210,7 +5328,7 @@ function startWorktreeReaper() {
5210
5328
  const tick = async () => traceDaemonTimer("worktree_reaper", async () => {
5211
5329
  fired("worktree_reaper");
5212
5330
  try {
5213
- const { reapOrphanedWorktrees, createWorktreeReaperRealDeps } = await import("../daemon-orchestration-KIAYDBWN.js");
5331
+ const { reapOrphanedWorktrees, createWorktreeReaperRealDeps } = await import("../daemon-orchestration-7QB6QOXT.js");
5214
5332
  const deps = await createWorktreeReaperRealDeps();
5215
5333
  const result = await reapOrphanedWorktrees(deps);
5216
5334
  if (result.pruned.length > 0) {
@@ -5250,11 +5368,11 @@ function startWorktreeReaper() {
5250
5368
  }
5251
5369
  continue;
5252
5370
  }
5253
- const { cleanupAgentWorktree } = await import("../worktree-sweep-QOAXY6CT.js");
5254
- const { getMainRepoRoot } = await import("../worktree-WF7X43XI.js");
5371
+ const { cleanupAgentWorktree } = await import("../worktree-sweep-ZAG3V24E.js");
5372
+ const { getMainRepoRoot } = await import("../worktree-GVF2I5FP.js");
5255
5373
  const repoRoot = getMainRepoRoot(signal.worktreePath);
5256
5374
  if (repoRoot && signal.agentId) {
5257
- const notes = cleanupAgentWorktree(repoRoot, signal.agentId);
5375
+ const notes = await cleanupAgentWorktree(repoRoot, signal.agentId);
5258
5376
  if (notes) {
5259
5377
  acted("worktree_reaper");
5260
5378
  process.stderr.write(
@@ -5284,8 +5402,8 @@ function startAutoWake() {
5284
5402
  if (!await ensureStoreForPolling()) return;
5285
5403
  try {
5286
5404
  const { getClient } = await import("./database.js");
5287
- const { pollOrphanedTasks, createAutoWakeRealDeps } = await import("../daemon-orchestration-KIAYDBWN.js");
5288
- const deps = createAutoWakeRealDeps(getClient, process.cwd());
5405
+ const { pollOrphanedTasks, createAutoWakeRealDeps } = await import("../daemon-orchestration-7QB6QOXT.js");
5406
+ const deps = createAutoWakeRealDeps(getClient, process.cwd(), getTmuxSessionsAsync);
5289
5407
  const woken = await pollOrphanedTasks(deps);
5290
5408
  if (woken.length > 0) acted("auto_wake");
5291
5409
  for (const agent of woken) {
@@ -5294,7 +5412,7 @@ function startAutoWake() {
5294
5412
  }
5295
5413
  try {
5296
5414
  const signalBase = path3.join(os2.homedir(), ".exe-os", "task-signals");
5297
- if (existsSync3(signalBase)) {
5415
+ if (existsSync4(signalBase)) {
5298
5416
  const { readdirSync: readdirSync2, statSync: statSyncFs } = await import("fs");
5299
5417
  const { sendIntercomAsync } = await import("./tmux-routing.js");
5300
5418
  const sessionCache = path3.join(os2.homedir(), ".exe-os", "session-cache");
@@ -5310,11 +5428,11 @@ function startAutoWake() {
5310
5428
  if (cached && Date.now() - cached.ts < 3e4) return cached.runtime;
5311
5429
  try {
5312
5430
  const dispatchInfoPath = path3.join(sessionCache, `dispatch-info-${sessionName}.json`);
5313
- if (!existsSync3(dispatchInfoPath)) {
5431
+ if (!existsSync4(dispatchInfoPath)) {
5314
5432
  _runtimeCache.set(sessionName, { runtime: "claude", ts: Date.now() });
5315
5433
  return "claude";
5316
5434
  }
5317
- const raw = JSON.parse(readFileSync3(dispatchInfoPath, "utf8"));
5435
+ const raw = JSON.parse(readFileSync4(dispatchInfoPath, "utf8"));
5318
5436
  const rt = raw.runtime ?? "claude";
5319
5437
  _runtimeCache.set(sessionName, { runtime: rt, ts: Date.now() });
5320
5438
  return rt;
@@ -5335,7 +5453,7 @@ function startAutoWake() {
5335
5453
  if (age > 60 * 60 * 1e3) {
5336
5454
  try {
5337
5455
  unlinkSync2(signalPath);
5338
- void import("../orchestration-events-2QYYCFSI.js").then(({ recordOrchestrationEventBestEffort: recordOE }) => {
5456
+ void import("../orchestration-events-5SIJOE4H.js").then(({ recordOrchestrationEventBestEffort: recordOE }) => {
5339
5457
  recordOE({ eventType: "signal.stale", source: "exe-daemon.autoWake", severity: "warn", payload: { file, ageMinutes: Math.round(age / 6e4) } });
5340
5458
  }).catch(() => {
5341
5459
  });
@@ -5395,7 +5513,7 @@ function startWalCheckpoint() {
5395
5513
  try {
5396
5514
  const { getClient, runWalCheckpoint } = await import("./database.js");
5397
5515
  const client = getClient();
5398
- const { findActiveDb } = await import("../db-backup-UBKQZVEI.js");
5516
+ const { findActiveDb } = await import("../db-backup-DLD4QZBO.js");
5399
5517
  const dbPath = findActiveDb();
5400
5518
  const started = Date.now();
5401
5519
  const result = await runWalCheckpoint(client, dbPath, true);
@@ -5465,9 +5583,15 @@ function startStuckTaskRelease() {
5465
5583
  const tick = async () => traceDaemonTimer("stuck_task_release", async () => {
5466
5584
  fired("stuck_task_release");
5467
5585
  if (!await ensureStoreForPolling()) return;
5586
+ if (inPostRestartDestructiveGrace("stuck_task_release")) return;
5468
5587
  try {
5469
5588
  const { getClient } = await import("./database.js");
5470
- const { releaseStuckTasks, createStuckTaskRealDeps } = await import("../daemon-orchestration-KIAYDBWN.js");
5589
+ const {
5590
+ releaseStuckTasks,
5591
+ createStuckTaskRealDeps,
5592
+ escalateStuckBlockedTasks,
5593
+ createStuckBlockedRealDeps
5594
+ } = await import("../daemon-orchestration-7QB6QOXT.js");
5471
5595
  const deps = createStuckTaskRealDeps(getClient);
5472
5596
  const released = await releaseStuckTasks(deps);
5473
5597
  if (released.length > 0) {
@@ -5475,6 +5599,14 @@ function startStuckTaskRelease() {
5475
5599
  process.stderr.write(`[exed] Stuck-release: ${released.length} task(s) moved to blocked
5476
5600
  `);
5477
5601
  }
5602
+ const blockedResult = await escalateStuckBlockedTasks(createStuckBlockedRealDeps(getClient));
5603
+ if (blockedResult.escalated.length > 0 || blockedResult.cancelled.length > 0) {
5604
+ acted("stuck_task_release");
5605
+ process.stderr.write(
5606
+ `[exed] Stuck-blocked: escalated ${blockedResult.escalated.length}, auto-cancelled ${blockedResult.cancelled.length}
5607
+ `
5608
+ );
5609
+ }
5478
5610
  } catch (err) {
5479
5611
  process.stderr.write(`[exed] Stuck-release error: ${err instanceof Error ? err.message : String(err)}
5480
5612
  `);
@@ -5654,12 +5786,12 @@ function startTaskEnforcementScanner() {
5654
5786
  const tick = async () => traceDaemonTimer("task_enforcement", async () => {
5655
5787
  fired("task_enforcement");
5656
5788
  try {
5657
- const { runTaskEnforcementTick } = await import("../task-enforcement-XO6CYQVG.js");
5789
+ const { runTaskEnforcementTick } = await import("../task-enforcement-VI7L43DC.js");
5658
5790
  const { getTransport } = await import("./transport.js");
5659
5791
  const { loadAgentConfig } = await import("./agent-config.js");
5660
5792
  const { getClient } = await import("./database.js");
5661
5793
  const { loadEmployeesSync } = await import("./employees.js");
5662
- const { sessionScopeFilter } = await import("../task-scope-7BWIG4G3.js");
5794
+ const { sessionScopeFilter } = await import("../task-scope-CQEG5SSJ.js");
5663
5795
  const transport = getTransport();
5664
5796
  const { sessions: allSessions, paneCache, aliveSessions } = await getSharedOrchestrationCaches();
5665
5797
  await yieldToEventLoop();
@@ -5670,10 +5802,10 @@ function startTaskEnforcementScanner() {
5670
5802
  sendKeysLiteral: transport.sendKeysLiteral?.bind(transport),
5671
5803
  isAlive: (session) => aliveSessions.has(session)
5672
5804
  };
5673
- const { checkAutoWakeGates } = await import("../daemon-orchestration-KIAYDBWN.js");
5805
+ const { checkAutoWakeGates } = await import("../daemon-orchestration-7QB6QOXT.js");
5674
5806
  const { ensureEmployeeAsync, employeeSessionName } = await import("./tmux-routing.js");
5675
5807
  const { shouldAutoInstance } = await import("./employees.js");
5676
- const { recordOrchestrationEventBestEffort } = await import("../orchestration-events-2QYYCFSI.js");
5808
+ const { recordOrchestrationEventBestEffort } = await import("../orchestration-events-5SIJOE4H.js");
5677
5809
  const projectDir = process.cwd();
5678
5810
  await runTaskEnforcementTick({
5679
5811
  transport: enforcementTransport,
@@ -5913,13 +6045,13 @@ function startApiWatchdog() {
5913
6045
  `);
5914
6046
  try {
5915
6047
  const { appendFileSync, mkdirSync: mkdirSync3, statSync: statSyncFs, renameSync: renameSyncFs } = await import("fs");
5916
- const { join } = await import("path");
5917
- const logDir = join(process.env.EXE_OS_DIR ?? join(process.env.HOME ?? "", ".exe-os"), "logs");
6048
+ const { join: join2 } = await import("path");
6049
+ const logDir = join2(process.env.EXE_OS_DIR ?? join2(process.env.HOME ?? "", ".exe-os"), "logs");
5918
6050
  try {
5919
6051
  mkdirSync3(logDir, { recursive: true });
5920
6052
  } catch {
5921
6053
  }
5922
- const watchdogLogPath = join(logDir, "api-watchdog.jsonl");
6054
+ const watchdogLogPath = join2(logDir, "api-watchdog.jsonl");
5923
6055
  try {
5924
6056
  const wStat = statSyncFs(watchdogLogPath);
5925
6057
  if (wStat.size > 5 * 1024 * 1024) renameSyncFs(watchdogLogPath, watchdogLogPath + ".1");
@@ -6152,14 +6284,40 @@ process.on("uncaughtException", (err) => {
6152
6284
  }
6153
6285
  setTimeout(() => process.exit(1), 3e3);
6154
6286
  });
6287
+ function readProcEnviron(pid) {
6288
+ try {
6289
+ const raw = readFileSync4(`/proc/${pid}/environ`, "utf8");
6290
+ const env = {};
6291
+ for (const part of raw.split("\0")) {
6292
+ const idx = part.indexOf("=");
6293
+ if (idx > 0) env[part.slice(0, idx)] = part.slice(idx + 1);
6294
+ }
6295
+ return env;
6296
+ } catch {
6297
+ return null;
6298
+ }
6299
+ }
6300
+ function isSameDaemonInstance(pid) {
6301
+ if (pid === process.pid) return false;
6302
+ try {
6303
+ process.kill(pid, 0);
6304
+ } catch {
6305
+ return false;
6306
+ }
6307
+ const env = readProcEnviron(pid);
6308
+ if (!env) return false;
6309
+ const sameHome = env.HOME === process.env.HOME;
6310
+ const samePidPath = (env.EXE_DAEMON_PID ?? env.EXE_EMBED_PID ?? path3.join(env.HOME ?? "", ".exe-os", "exed.pid")) === PID_PATH;
6311
+ const sameSockPath = (env.EXE_DAEMON_SOCK ?? env.EXE_EMBED_SOCK ?? path3.join(env.HOME ?? "", ".exe-os", "exed.sock")) === SOCKET_PATH;
6312
+ return Boolean(sameHome && (samePidPath || sameSockPath));
6313
+ }
6155
6314
  function killOrphanDaemons() {
6156
6315
  try {
6157
- const pids = execSyncNode("pgrep -f 'exe-daemon\\.js' 2>/dev/null || true", { encoding: "utf8", timeout: 3e3 }).trim().split("\n").filter(Boolean).map(Number).filter((n) => !isNaN(n) && n !== process.pid);
6316
+ const pids = execSyncNode("pgrep -f 'exe-daemon\\.js' 2>/dev/null || true", { encoding: "utf8", timeout: 3e3 }).trim().split("\n").filter(Boolean).map(Number).filter((n) => !isNaN(n) && isSameDaemonInstance(n));
6158
6317
  if (pids.length === 0) return;
6159
6318
  for (const pid of pids) {
6160
6319
  try {
6161
- process.kill(pid, 0);
6162
- process.stderr.write(`[exed] Killing orphan daemon from different install (PID ${pid})
6320
+ process.stderr.write(`[exed] Killing orphan daemon from same instance (PID ${pid})
6163
6321
  `);
6164
6322
  process.kill(pid, "SIGTERM");
6165
6323
  } catch {
@@ -6181,11 +6339,11 @@ function killOrphanDaemons() {
6181
6339
  }
6182
6340
  function checkExistingDaemon() {
6183
6341
  try {
6184
- if (!existsSync3(PID_PATH)) {
6342
+ if (!existsSync4(PID_PATH)) {
6185
6343
  killOrphanDaemons();
6186
6344
  return false;
6187
6345
  }
6188
- const pid = parseInt(readFileSync3(PID_PATH, "utf8").trim(), 10);
6346
+ const pid = parseInt(readFileSync4(PID_PATH, "utf8").trim(), 10);
6189
6347
  if (!pid || isNaN(pid)) {
6190
6348
  killOrphanDaemons();
6191
6349
  return false;
@@ -6330,7 +6488,7 @@ try {
6330
6488
  }
6331
6489
  await new Promise((r) => setTimeout(r, 500));
6332
6490
  try {
6333
- const claimedPid = parseInt(readFileSync3(PID_PATH, "utf8").trim(), 10);
6491
+ const claimedPid = parseInt(readFileSync4(PID_PATH, "utf8").trim(), 10);
6334
6492
  if (claimedPid !== process.pid) {
6335
6493
  process.stderr.write(
6336
6494
  `[exed] Race detected \u2014 PID ${claimedPid} claimed the lock. Exiting cleanly.
@@ -6349,7 +6507,7 @@ process.env.EXE_IS_DAEMON = "1";
6349
6507
  if (process.platform === "darwin") {
6350
6508
  try {
6351
6509
  const oldPlist = path3.join(os2.homedir(), "Library", "LaunchAgents", "com.askexe.exed-keepalive.plist");
6352
- if (existsSync3(oldPlist)) {
6510
+ if (existsSync4(oldPlist)) {
6353
6511
  try {
6354
6512
  execSyncNode(`launchctl unload "${oldPlist}" 2>/dev/null`, { timeout: 5e3 });
6355
6513
  } catch {
@@ -6363,7 +6521,7 @@ if (process.platform === "darwin") {
6363
6521
  logBoot({ socketPath: SOCKET_PATH, pidPath: PID_PATH });
6364
6522
  void (async () => {
6365
6523
  try {
6366
- const { cleanupCrashDebris } = await import("../db-backup-UBKQZVEI.js");
6524
+ const { cleanupCrashDebris } = await import("../db-backup-DLD4QZBO.js");
6367
6525
  const removed = cleanupCrashDebris();
6368
6526
  if (removed > 0) {
6369
6527
  process.stderr.write(`[exed] Startup cleanup: pruned ${removed} crash-debris file(s) (backups/quarantine).
@@ -6502,22 +6660,34 @@ async function runSmokeTests() {
6502
6660
  function startEventLoopLagDetector() {
6503
6661
  let lastTick = monotonicNowMs();
6504
6662
  let clockProbe = captureClockProbe();
6663
+ let lastCpu = process.cpuUsage();
6664
+ const SELF_CPU_BUSY_RATIO = parseFloat(process.env.EXE_SELF_CPU_BUSY_RATIO ?? "") || 0.5;
6665
+ const SELF_INFLICTED_LIMIT = parseInt(process.env.EXE_SELF_INFLICTED_LIMIT ?? "") || 5;
6666
+ const SELF_INFLICTED_SUPPRESS_CAP_MS = parseFloat(process.env.EXE_SELF_INFLICTED_SUPPRESS_CAP_MS ?? "") || 15e4;
6505
6667
  const LAG_WARN_MS = 3e3;
6506
6668
  const LAG_CRITICAL_MS = 1e4;
6507
6669
  const SELF_HEAL_SINGLE_MS = parseFloat(process.env.EXE_SELF_HEAL_SINGLE_MS ?? "") || 12e4;
6508
6670
  const SELF_HEAL_CONSECUTIVE = parseInt(process.env.EXE_SELF_HEAL_CONSECUTIVE ?? "") || 3;
6509
6671
  const SELF_HEAL_THRESHOLD_MS = parseFloat(process.env.EXE_SELF_HEAL_THRESHOLD_MS ?? "") || 3e4;
6510
6672
  let consecutiveSevereBlocks = 0;
6673
+ let selfInflictedStreak = 0;
6674
+ let selfInflictedSuppressedMs = 0;
6511
6675
  touchEventLoopHeartbeat();
6512
6676
  const lagTimer = setInterval(() => {
6513
6677
  touchEventLoopHeartbeat();
6514
- const lag = monotonicElapsedMs(lastTick) - 2e3;
6678
+ const wallElapsedMs = monotonicElapsedMs(lastTick);
6679
+ const lag = wallElapsedMs - 2e3;
6680
+ const cpuDelta = process.cpuUsage(lastCpu);
6681
+ lastCpu = process.cpuUsage();
6682
+ const selfCpuBusyFraction = wallElapsedMs > 0 ? (cpuDelta.user + cpuDelta.system) / 1e3 / wallElapsedMs : 0;
6515
6683
  const clockJump = looksLikeClockJump(clockProbe);
6516
6684
  lastTick = monotonicNowMs();
6517
6685
  clockProbe = captureClockProbe();
6518
6686
  setEventLoopLagMs(clockJump ? 0 : Math.max(0, lag));
6519
6687
  if (clockJump) {
6520
6688
  consecutiveSevereBlocks = 0;
6689
+ selfInflictedStreak = 0;
6690
+ selfInflictedSuppressedMs = 0;
6521
6691
  try {
6522
6692
  unlinkSync2(path3.join(os2.homedir(), ".exe-os", "session-cache", "event-loop-blocked.marker"));
6523
6693
  } catch {
@@ -6529,7 +6699,7 @@ function startEventLoopLagDetector() {
6529
6699
  const msg = `[exed] EVENT LOOP BLOCKED ${(lag / 1e3).toFixed(1)}s \u2014 MCP UNRESPONSIVE. Sessions will die.`;
6530
6700
  process.stderr.write(msg + "\n");
6531
6701
  logDaemonHealth({ event: "event_loop_blocked", pid: process.pid, message: msg, data: { lagMs: lag } });
6532
- void import("../orchestration-events-2QYYCFSI.js").then(({ recordOrchestrationEventBestEffort: recordOE }) => {
6702
+ void import("../orchestration-events-5SIJOE4H.js").then(({ recordOrchestrationEventBestEffort: recordOE }) => {
6533
6703
  recordOE({ eventType: "daemon.event_loop_blocked", source: "exe-daemon.lagDetector", severity: "error", durationMs: lag });
6534
6704
  }).catch(() => {
6535
6705
  });
@@ -6553,6 +6723,7 @@ function startEventLoopLagDetector() {
6553
6723
  const load1m = os2.loadavg()[0] ?? 0;
6554
6724
  const cpuCount = os2.cpus().length || 1;
6555
6725
  const starvationRatio = parseFloat(process.env.EXE_STARVATION_LOAD_RATIO ?? "1.5");
6726
+ const catchUpActive = inBootCatchUpGrace();
6556
6727
  const decision = decideDaemonSelfHeal({
6557
6728
  lagMs: lag,
6558
6729
  load1m,
@@ -6562,9 +6733,21 @@ function startEventLoopLagDetector() {
6562
6733
  severeThresholdMs: SELF_HEAL_THRESHOLD_MS,
6563
6734
  consecutiveSevere: consecutiveSevereBlocks,
6564
6735
  consecutiveLimit: SELF_HEAL_CONSECUTIVE,
6565
- processAlive: true
6736
+ processAlive: true,
6737
+ // Bug ddbfc3f6: self-CPU + boot-grace signals so the watchdog can tell a
6738
+ // self-inflicted single-core block (let it drain) from a genuine wedge.
6739
+ selfCpuBusyFraction,
6740
+ selfCpuBusyRatio: SELF_CPU_BUSY_RATIO,
6741
+ catchUpActive,
6742
+ // FIX 1: thread the self-inflicted ceiling accumulators.
6743
+ selfInflictedStreak,
6744
+ selfInflictedSuppressedMs,
6745
+ selfInflictedLimit: SELF_INFLICTED_LIMIT,
6746
+ selfInflictedSuppressCapMs: SELF_INFLICTED_SUPPRESS_CAP_MS
6566
6747
  });
6567
6748
  consecutiveSevereBlocks = decision.consecutiveSevereAfter;
6749
+ selfInflictedStreak = decision.selfInflictedStreakAfter;
6750
+ selfInflictedSuppressedMs = decision.selfInflictedSuppressedMsAfter;
6568
6751
  if (decision.reason === "starved_backoff") {
6569
6752
  process.stderr.write(
6570
6753
  `[exed] SELF-HEAL SUPPRESSED: load=${load1m.toFixed(2)} cpus=${cpuCount} \u2014 lag is CPU starvation, not internal hang. Skipping restart.
@@ -6578,8 +6761,41 @@ function startEventLoopLagDetector() {
6578
6761
  });
6579
6762
  return;
6580
6763
  }
6764
+ if (decision.reason === "catchup_backoff") {
6765
+ process.stderr.write(
6766
+ `[exed] SELF-HEAL SUPPRESSED: boot/catch-up grace active (${Math.ceil((_bootCatchUpUntilMs - Date.now()) / 1e3)}s left) \u2014 lag=${(lag / 1e3).toFixed(1)}s during boot; skipping restart.
6767
+ `
6768
+ );
6769
+ logDaemonHealth({
6770
+ event: "self_heal_suppressed_starvation",
6771
+ pid: process.pid,
6772
+ message: `boot/catch-up grace \u2014 restart skipped (lag=${(lag / 1e3).toFixed(1)}s)`,
6773
+ data: { lagMs: lag, reason: "catchup_backoff", selfCpuBusyFraction }
6774
+ });
6775
+ return;
6776
+ }
6777
+ if (decision.reason === "self_inflicted_backoff") {
6778
+ process.stderr.write(
6779
+ `[exed] SELF-HEAL SUPPRESSED: self-inflicted block \u2014 daemon busy ${(selfCpuBusyFraction * 100).toFixed(0)}% of a ${(wallElapsedMs / 1e3).toFixed(1)}s window on its own work (load=${load1m.toFixed(2)}/${cpuCount}); letting it drain [streak ${selfInflictedStreak}/${SELF_INFLICTED_LIMIT}, suppressed ${(selfInflictedSuppressedMs / 1e3).toFixed(0)}s/${SELF_INFLICTED_SUPPRESS_CAP_MS / 1e3}s].
6780
+ `
6781
+ );
6782
+ logDaemonHealth({
6783
+ event: "self_heal_suppressed_starvation",
6784
+ pid: process.pid,
6785
+ message: `self-inflicted block \u2014 busy ${(selfCpuBusyFraction * 100).toFixed(0)}% of window \u2014 restart skipped (streak ${selfInflictedStreak}/${SELF_INFLICTED_LIMIT})`,
6786
+ data: { lagMs: lag, load1m, cpuCount, reason: "self_inflicted_backoff", selfCpuBusyFraction, selfInflictedStreak, selfInflictedSuppressedMs }
6787
+ });
6788
+ return;
6789
+ }
6581
6790
  if (decision.restart && decision.reason === "single_block") {
6582
6791
  const healMsg = `[exed] SELF-HEAL: Single block ${(lag / 1e3).toFixed(0)}s exceeds ${SELF_HEAL_SINGLE_MS / 1e3}s \u2014 WAL-safe restart.`;
6792
+ if (selfHealRestartOnCooldown()) {
6793
+ const suppressMsg = `${healMsg} Suppressed by restart cooldown (${Math.ceil((SELF_HEAL_RESTART_COOLDOWN_MS - (Date.now() - _lastSelfHealShutdownAtMs)) / 1e3)}s remaining).`;
6794
+ process.stderr.write(suppressMsg + "\n");
6795
+ logDaemonHealth({ event: "self_heal_suppressed_cooldown", pid: process.pid, message: suppressMsg, data: { lagMs: lag, reason: "single_block" } });
6796
+ return;
6797
+ }
6798
+ _lastSelfHealShutdownAtMs = Date.now();
6583
6799
  process.stderr.write(healMsg + "\n");
6584
6800
  logDaemonHealth({ event: "self_heal_restart", pid: process.pid, message: healMsg, data: { lagMs: lag, reason: "single_block" } });
6585
6801
  void shutdown(75);
@@ -6587,6 +6803,13 @@ function startEventLoopLagDetector() {
6587
6803
  }
6588
6804
  if (decision.restart && decision.reason === "consecutive_blocks") {
6589
6805
  const healMsg = `[exed] SELF-HEAL: ${consecutiveSevereBlocks} consecutive blocks >${SELF_HEAL_THRESHOLD_MS / 1e3}s \u2014 WAL-safe restart.`;
6806
+ if (selfHealRestartOnCooldown()) {
6807
+ const suppressMsg = `${healMsg} Suppressed by restart cooldown (${Math.ceil((SELF_HEAL_RESTART_COOLDOWN_MS - (Date.now() - _lastSelfHealShutdownAtMs)) / 1e3)}s remaining).`;
6808
+ process.stderr.write(suppressMsg + "\n");
6809
+ logDaemonHealth({ event: "self_heal_suppressed_cooldown", pid: process.pid, message: suppressMsg, data: { lagMs: lag, reason: "consecutive_blocks", count: consecutiveSevereBlocks } });
6810
+ return;
6811
+ }
6812
+ _lastSelfHealShutdownAtMs = Date.now();
6590
6813
  process.stderr.write(healMsg + "\n");
6591
6814
  logDaemonHealth({ event: "self_heal_restart", pid: process.pid, message: healMsg, data: { lagMs: lag, reason: "consecutive_blocks", count: consecutiveSevereBlocks } });
6592
6815
  void shutdown(75);
@@ -6596,8 +6819,12 @@ function startEventLoopLagDetector() {
6596
6819
  process.stderr.write(`[exed] Event loop lag: ${(lag / 1e3).toFixed(1)}s (warn threshold: ${LAG_WARN_MS / 1e3}s)
6597
6820
  `);
6598
6821
  consecutiveSevereBlocks = 0;
6822
+ selfInflictedStreak = 0;
6823
+ selfInflictedSuppressedMs = 0;
6599
6824
  } else {
6600
6825
  consecutiveSevereBlocks = 0;
6826
+ selfInflictedStreak = 0;
6827
+ selfInflictedSuppressedMs = 0;
6601
6828
  writeDaemonReady({ pid: process.pid, port: _boundMcpPort });
6602
6829
  }
6603
6830
  }, 2e3);
@@ -6656,7 +6883,7 @@ function startTaskFileResync() {
6656
6883
  });
6657
6884
  if (Number(res.rowsAffected ?? 0) > 0) {
6658
6885
  synced++;
6659
- void import("../orchestration-events-2QYYCFSI.js").then(({ recordOrchestrationEventBestEffort: recordOE }) => {
6886
+ void import("../orchestration-events-5SIJOE4H.js").then(({ recordOrchestrationEventBestEffort: recordOE }) => {
6660
6887
  recordOE({
6661
6888
  eventType: "task_file.resynced",
6662
6889
  source: "exe-daemon.taskFileResync",
@@ -6693,7 +6920,7 @@ function startTaskGroupBarriers() {
6693
6920
  fired("task_group_barriers");
6694
6921
  if (!await ensureStoreForPolling()) return;
6695
6922
  try {
6696
- const { pollTaskGroupBarriers } = await import("../daemon-orchestration-KIAYDBWN.js");
6923
+ const { pollTaskGroupBarriers } = await import("../daemon-orchestration-7QB6QOXT.js");
6697
6924
  const firedCount = await pollTaskGroupBarriers();
6698
6925
  if (firedCount > 0) {
6699
6926
  acted("task_group_barriers");
@@ -6715,7 +6942,7 @@ function startCheckpointGc() {
6715
6942
  fired("checkpoint_gc");
6716
6943
  if (!await ensureStoreForPolling()) return;
6717
6944
  try {
6718
- const { gcStaleCheckpoints } = await import("../daemon-orchestration-KIAYDBWN.js");
6945
+ const { gcStaleCheckpoints } = await import("../daemon-orchestration-7QB6QOXT.js");
6719
6946
  const cleared = await gcStaleCheckpoints();
6720
6947
  if (cleared > 0) {
6721
6948
  acted("checkpoint_gc");
@@ -6755,14 +6982,14 @@ function startDispatchAckCleanup() {
6755
6982
  function startProjectionWorkerDeferred() {
6756
6983
  setTimeout(async () => {
6757
6984
  try {
6758
- const { startProjectionWorker } = await import("../projection-worker-N4KVTVZE.js");
6985
+ const { startProjectionWorker } = await import("../projection-worker-ZVOFHTXT.js");
6759
6986
  startProjectionWorker();
6760
6987
  } catch {
6761
6988
  }
6762
6989
  }, 2e4);
6763
6990
  }
6764
6991
  async function startToolTelemetry() {
6765
- const { startToolTelemetryFlush } = await import("../tool-telemetry-UPADF5DF.js");
6992
+ const { startToolTelemetryFlush } = await import("../tool-telemetry-ULIDUK3P.js");
6766
6993
  startToolTelemetryFlush();
6767
6994
  process.stderr.write("[exed] Tool telemetry started (flush every 5m)\n");
6768
6995
  }
@@ -6927,7 +7154,7 @@ function startLocalFirstTimers() {
6927
7154
  fired("orphan_task_cleanup");
6928
7155
  try {
6929
7156
  if (!await ensureStoreForPolling()) return;
6930
- const { cleanOrphanedTaskFiles } = await import("../tasks-crud-IW3ZBFHL.js");
7157
+ const { cleanOrphanedTaskFiles } = await import("../tasks-crud-UGK5A25L.js");
6931
7158
  const count = await cleanOrphanedTaskFiles();
6932
7159
  if (count > 0) {
6933
7160
  acted("orphan_task_cleanup");
@@ -6943,7 +7170,7 @@ function startLocalFirstTimers() {
6943
7170
  fired("task_file_consistency");
6944
7171
  try {
6945
7172
  if (!await ensureStoreForPolling()) return;
6946
- const { checkTaskFileConsistency } = await import("../tasks-crud-IW3ZBFHL.js");
7173
+ const { checkTaskFileConsistency } = await import("../tasks-crud-UGK5A25L.js");
6947
7174
  const mismatches = await checkTaskFileConsistency();
6948
7175
  if (mismatches > 0) {
6949
7176
  acted("task_file_consistency");
@@ -6962,7 +7189,7 @@ function startLocalFirstTimers() {
6962
7189
  const TELEMETRY_DAILY_MS = 24 * 60 * 60 * 1e3;
6963
7190
  const telemetryDaily = async () => {
6964
7191
  try {
6965
- const { sendTelemetry, isTelemetryEnabled } = await import("../telemetry-upload-IG4AGZFK.js");
7192
+ const { sendTelemetry, isTelemetryEnabled } = await import("../telemetry-upload-7LBYGPCB.js");
6966
7193
  if (!isTelemetryEnabled()) return;
6967
7194
  const { upstream } = await sendTelemetry(24);
6968
7195
  if (upstream.startsWith("sent")) {