@askexenow/exe-os 0.9.239 → 0.9.243

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 (316) hide show
  1. package/deploy/compose/.env.customer.example +12 -0
  2. package/deploy/compose/.env.example +13 -1
  3. package/deploy/compose/cloudflared/config.yml.example +23 -4
  4. package/deploy/compose/docker-compose.yml +27 -7
  5. package/deploy/compose/generate-env.ts +49 -1
  6. package/deploy/compose/init-db.sql +10 -2
  7. package/deploy/stack-manifests/v0.9.json +113 -9
  8. package/dist/{active-agent-7MIVNARP.js → active-agent-KO4ZWDXE.js} +4 -4
  9. package/dist/{active-agent-55C5Y3XL.js → active-agent-KP2O52HA.js} +4 -4
  10. package/dist/{agentic-ontology-NCAQIQQI.js → agentic-ontology-DXE5J6I5.js} +1 -1
  11. package/dist/{backfill-metadata-3JP7EZ2U.js → backfill-metadata-DFTIGPXP.js} +7 -7
  12. package/dist/{background-jobs-RWL46VRD.js → background-jobs-CRXY7T4Y.js} +2 -2
  13. package/dist/{behaviors-6BGALYGW.js → behaviors-BL3QCHBT.js} +4 -4
  14. package/dist/bin/age-ontology-load.js +2 -2
  15. package/dist/bin/agentic-ontology-backfill.js +9 -9
  16. package/dist/bin/agentic-reflection-backfill.js +10 -10
  17. package/dist/bin/agentic-semantic-label.js +9 -9
  18. package/dist/bin/backfill-conversations.js +9 -9
  19. package/dist/bin/backfill-responses.js +9 -9
  20. package/dist/bin/backfill-vectors.js +11 -11
  21. package/dist/bin/bulk-sync-postgres.js +10 -10
  22. package/dist/bin/cc-doctor.js +3 -3
  23. package/dist/bin/cleanup-stale-review-tasks.js +13 -13
  24. package/dist/bin/cli.js +27 -22
  25. package/dist/bin/exe-agent-config.js +4 -4
  26. package/dist/bin/exe-agent.js +8 -8
  27. package/dist/bin/exe-assign.js +11 -11
  28. package/dist/bin/exe-boot.js +22 -22
  29. package/dist/bin/exe-call.js +5 -5
  30. package/dist/bin/exe-cloud.js +8 -8
  31. package/dist/bin/exe-dispatch.js +13 -13
  32. package/dist/bin/exe-doctor.js +1 -1
  33. package/dist/bin/exe-export-behaviors.js +10 -10
  34. package/dist/bin/exe-forget.js +9 -9
  35. package/dist/bin/exe-gateway.js +8 -8
  36. package/dist/bin/exe-healthcheck.js +3 -3
  37. package/dist/bin/exe-heartbeat.js +13 -13
  38. package/dist/bin/exe-kill.js +18 -18
  39. package/dist/bin/exe-launch-agent.js +22 -22
  40. package/dist/bin/exe-new-employee.js +8 -8
  41. package/dist/bin/exe-pending-messages.js +14 -14
  42. package/dist/bin/exe-pending-notifications.js +13 -13
  43. package/dist/bin/exe-pending-reviews.js +13 -13
  44. package/dist/bin/exe-rename.js +5 -5
  45. package/dist/bin/exe-review.js +17 -17
  46. package/dist/bin/exe-search.js +8 -8
  47. package/dist/bin/exe-session-cleanup.js +20 -20
  48. package/dist/bin/exe-settings.js +7 -7
  49. package/dist/bin/exe-start-codex.js +14 -14
  50. package/dist/bin/exe-start-opencode.js +11 -11
  51. package/dist/bin/exe-status.js +14 -14
  52. package/dist/bin/exe-support.js +3 -3
  53. package/dist/bin/exe-team.js +4 -4
  54. package/dist/bin/git-sweep.js +13 -13
  55. package/dist/bin/graph-backfill.js +8 -8
  56. package/dist/bin/graph-export.js +8 -8
  57. package/dist/bin/import-history.js +10 -10
  58. package/dist/bin/install.js +7 -7
  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 -5
  62. package/dist/bin/postgres-agentic-reflection-backfill.js +4 -4
  63. package/dist/bin/postgres-agentic-semantic-backfill.js +3 -3
  64. package/dist/bin/scan-tasks.js +13 -13
  65. package/dist/bin/setup.js +3 -3
  66. package/dist/bin/shard-migrate.js +8 -8
  67. package/dist/bin/stack-update.js +324 -20
  68. package/dist/bin/verify-stack.js +3 -383
  69. package/dist/bin/vps-backup.js +8 -160
  70. package/dist/bin/vps-health-gate.js +10 -220
  71. package/dist/{branding-I7YYX4FM.js → branding-XWMO5EDR.js} +1 -1
  72. package/dist/{capacity-monitor-IFCZKRPG.js → capacity-monitor-4CSBC7AP.js} +14 -14
  73. package/dist/{catchup-brief-PIDRWXOW.js → catchup-brief-LF5Z6Q6E.js} +17 -17
  74. package/dist/{chunk-FGJUGDNM.js → chunk-222SI7QC.js} +14 -14
  75. package/dist/{chunk-JZMVLAZ2.js → chunk-2WBBVEIB.js} +1 -1
  76. package/dist/{chunk-JDOE33C2.js → chunk-3V53HH5T.js} +4 -4
  77. package/dist/{chunk-2KZSKURT.js → chunk-57SULZJ2.js} +3 -3
  78. package/dist/{chunk-QI4IXJN7.js → chunk-5CHYEKMH.js} +7 -4
  79. package/dist/chunk-5DMAMQNU.js +168 -0
  80. package/dist/{chunk-PLQAFB3Z.js → chunk-5JIG2FP2.js} +1 -1
  81. package/dist/{chunk-UWQ3XCDG.js → chunk-5WK7X5CF.js} +2 -2
  82. package/dist/{chunk-DDPAQ4LT.js → chunk-6JAGJN77.js} +2 -2
  83. package/dist/{chunk-7F37NMKB.js → chunk-73UE2PHT.js} +1 -1
  84. package/dist/{chunk-JL3K5OTS.js → chunk-7IZWLMTP.js} +1 -1
  85. package/dist/{chunk-ELRRL2NC.js → chunk-A4K2ZT6N.js} +4 -4
  86. package/dist/{chunk-GWYADLIW.js → chunk-AHXEU5XB.js} +1 -1
  87. package/dist/{chunk-WSHMBME6.js → chunk-AWRL5FGM.js} +19 -78
  88. package/dist/{chunk-OMPCFLWA.js → chunk-BSPOEYAO.js} +1 -1
  89. package/dist/{chunk-DHVC4RN7.js → chunk-CBDPEJOR.js} +5 -5
  90. package/dist/{chunk-2H55BIV2.js → chunk-CEJO7244.js} +2 -2
  91. package/dist/{chunk-FKWZVO2T.js → chunk-CPXGLSIL.js} +3 -3
  92. package/dist/{chunk-HX5G4AS4.js → chunk-CWITU7DW.js} +2 -2
  93. package/dist/{chunk-5GG7MTRJ.js → chunk-DGBGIXCC.js} +4 -4
  94. package/dist/{chunk-IQXPMK46.js → chunk-DLZYAYVM.js} +60 -14
  95. package/dist/{chunk-PPYWQV2M.js → chunk-DR5BGWFR.js} +2 -2
  96. package/dist/{chunk-BZWKTFEB.js → chunk-ENVRFBTB.js} +2 -2
  97. package/dist/{chunk-DUVO2PUJ.js → chunk-F3GM6OOP.js} +4 -4
  98. package/dist/{chunk-HNLPLLE6.js → chunk-F7JLZXHC.js} +60 -26
  99. package/dist/{chunk-AL4DRC5H.js → chunk-FFLILAG6.js} +1 -1
  100. package/dist/{chunk-BZNI4OK5.js → chunk-GHEWRYMY.js} +18 -2
  101. package/dist/{chunk-C7SFJO5F.js → chunk-GHT4REOS.js} +5 -5
  102. package/dist/{chunk-FBWUJEXS.js → chunk-HANG6NLF.js} +4 -6
  103. package/dist/{chunk-5NJ4A4ZA.js → chunk-HCBMPZDT.js} +1 -1
  104. package/dist/chunk-HOGTZLVU.js +244 -0
  105. package/dist/{chunk-IQSCZDBQ.js → chunk-I5PIBL56.js} +3 -3
  106. package/dist/chunk-IRHNV4GY.js +388 -0
  107. package/dist/{chunk-F4TCKCKK.js → chunk-ITZVPCBQ.js} +33 -12
  108. package/dist/{chunk-4HROS3GJ.js → chunk-IZVKWBIP.js} +1 -1
  109. package/dist/{chunk-DKI5BTBC.js → chunk-J7V7LPPX.js} +2 -2
  110. package/dist/{chunk-TOZ5NN5V.js → chunk-JLKUVK5J.js} +1 -1
  111. package/dist/{chunk-4SC65UBG.js → chunk-JLNXKG3K.js} +1 -1
  112. package/dist/{chunk-KVSQOG3W.js → chunk-K2BDE2B5.js} +4 -4
  113. package/dist/{chunk-KDJRFJDL.js → chunk-K333WOW4.js} +30 -2
  114. package/dist/{chunk-6LBCUA2A.js → chunk-KEZXW3RP.js} +1 -1
  115. package/dist/{chunk-W7G3GY4I.js → chunk-KLQI7QY4.js} +3 -3
  116. package/dist/{chunk-UODVZGBQ.js → chunk-KN7LPTIB.js} +1 -1
  117. package/dist/{chunk-ESKBZN4Q.js → chunk-L4WRH3DL.js} +1 -1
  118. package/dist/{chunk-VFQKKMKE.js → chunk-LAOB5BKV.js} +2 -2
  119. package/dist/{chunk-MAN5LZQ4.js → chunk-LQSFP2BV.js} +1 -1
  120. package/dist/{chunk-EJ7LOTV2.js → chunk-LSFHEMVI.js} +9 -9
  121. package/dist/{chunk-RA2RO27E.js → chunk-MCESA5UW.js} +2 -2
  122. package/dist/{chunk-UPMHG7ET.js → chunk-MEIHREPM.js} +1 -1
  123. package/dist/{chunk-D5C56WO3.js → chunk-MOZ2YQ54.js} +1 -1
  124. package/dist/{chunk-CLGB3FGL.js → chunk-MPX3TRMQ.js} +2 -2
  125. package/dist/{chunk-5R75ODPS.js → chunk-NBY6R37W.js} +61 -232
  126. package/dist/{chunk-RWFGXC35.js → chunk-NEYQAEYU.js} +7 -7
  127. package/dist/{chunk-MBHZDXGN.js → chunk-NL35XNLI.js} +1 -1
  128. package/dist/{chunk-TPQVLYSV.js → chunk-NLGMHPEN.js} +1 -1
  129. package/dist/{chunk-5LMH4YHG.js → chunk-NRVV4Y5V.js} +4 -4
  130. package/dist/{chunk-GN5VHPPR.js → chunk-NVZR7T4E.js} +1 -1
  131. package/dist/{chunk-Y2L7RMGH.js → chunk-NWBHL5PI.js} +1 -1
  132. package/dist/{chunk-YPYDLW75.js → chunk-OEMX65EA.js} +1 -1
  133. package/dist/{chunk-UAFUGPKO.js → chunk-ONAQAL3O.js} +1 -1
  134. package/dist/{chunk-AVM7XZE4.js → chunk-OWQ3CCYJ.js} +7 -6
  135. package/dist/{chunk-K525WLL7.js → chunk-PI6V23GF.js} +5 -4
  136. package/dist/{chunk-AURM7FOT.js → chunk-Q2OAQPWY.js} +1 -1
  137. package/dist/{chunk-FB5VRO5S.js → chunk-QLDWASTX.js} +28 -32
  138. package/dist/{chunk-EPWDTS2Q.js → chunk-QMTGMCWB.js} +1 -1
  139. package/dist/{chunk-VI2FJY2M.js → chunk-QP4FHME2.js} +2 -2
  140. package/dist/{chunk-NJWK6J4N.js → chunk-QUNKPR6Y.js} +5 -5
  141. package/dist/{chunk-O6DAF2TY.js → chunk-QUZVAHO7.js} +2 -2
  142. package/dist/{chunk-VHKL4S4T.js → chunk-RRHSONV5.js} +2 -2
  143. package/dist/{chunk-GPF6X6HE.js → chunk-RYDHEWYY.js} +2 -2
  144. package/dist/{chunk-C2YS2AA6.js → chunk-U7WOVXBB.js} +2 -2
  145. package/dist/chunk-UIRWDGMB.js +230 -0
  146. package/dist/{chunk-FE45RXGC.js → chunk-V2GZMY6O.js} +1 -1
  147. package/dist/{chunk-PATCHPNY.js → chunk-VHALWCUO.js} +1 -1
  148. package/dist/{chunk-HLZSC5WK.js → chunk-VQAP35DA.js} +20 -18
  149. package/dist/{chunk-452XB7OZ.js → chunk-VRIMTCX2.js} +1 -1
  150. package/dist/{chunk-SUNYJ6YE.js → chunk-VT2B5BHM.js} +1 -1
  151. package/dist/{chunk-UZIJDYDA.js → chunk-VWVJVQDH.js} +2 -2
  152. package/dist/{chunk-TRZ5KA2R.js → chunk-VXIMSRTO.js} +2 -2
  153. package/dist/{chunk-DAZIV4QZ.js → chunk-WCXZF42W.js} +1 -1
  154. package/dist/{chunk-6OJJF4WP.js → chunk-XJUUWHVN.js} +1 -1
  155. package/dist/{chunk-F7LU65PQ.js → chunk-Y25OJWOQ.js} +14 -2
  156. package/dist/{chunk-2ORPA23Y.js → chunk-YMXXD2GW.js} +36 -8
  157. package/dist/{chunk-5WLMF6PL.js → chunk-YMZHTTOQ.js} +1 -1
  158. package/dist/{chunk-7DIDOQCX.js → chunk-YRVW57UW.js} +139 -125
  159. package/dist/{chunk-BRFH5X7G.js → chunk-Z7VDUS6L.js} +1 -1
  160. package/dist/{chunk-YFE6W75D.js → chunk-ZKFPHJIJ.js} +1 -1
  161. package/dist/{chunk-5WUTKDH6.js → chunk-ZVXJSQOR.js} +1 -1
  162. package/dist/{co-activation-VB4CJQZB.js → co-activation-L6I2LSJO.js} +3 -3
  163. package/dist/{co-occurrence-XZQJJIBM.js → co-occurrence-QARWYUAY.js} +3 -3
  164. package/dist/{code-context-index-FCQOPUEA.js → code-context-index-UIYQRDHD.js} +4 -4
  165. package/dist/{content-extractor-SPSH5X33.js → content-extractor-EYRVGD6O.js} +2 -2
  166. package/dist/{conversation-wiki-populator-YU35LNRK.js → conversation-wiki-populator-L7O6F3BB.js} +1 -1
  167. package/dist/{crdt-sync-KXETGV45.js → crdt-sync-R6YROKDH.js} +1 -1
  168. package/dist/{crm-webhook-JMOAHTJ6.js → crm-webhook-WK3PYJJK.js} +2 -2
  169. package/dist/{cto-delegation-gate-IJ3KQIKF.js → cto-delegation-gate-5JZORQIT.js} +12 -12
  170. package/dist/{daemon-auth-2IZACWSG.js → daemon-auth-2HEOL6VG.js} +2 -2
  171. package/dist/{daemon-orchestration-ZCY4GEI3.js → daemon-orchestration-BJ3T5MMF.js} +16 -15
  172. package/dist/{db-backup-HLX5OLIV.js → db-backup-EWS52P2W.js} +2 -2
  173. package/dist/{dreaming-2CJML3TU.js → dreaming-BOSBDRI3.js} +13 -13
  174. package/dist/{entity-boost-T5IYWWDZ.js → entity-boost-6ZVX7DFB.js} +26 -2
  175. package/dist/{exe-drift-P5OIRNSH.js → exe-drift-WRE6RADZ.js} +4 -4
  176. package/dist/{exe-export-QQL2H322.js → exe-export-7N5PBCMK.js} +8 -8
  177. package/dist/{exe-import-V4RJCUEP.js → exe-import-YOOE7S3H.js} +8 -8
  178. package/dist/{exe-key-MENJGDD7.js → exe-key-GXJSTCX2.js} +4 -4
  179. package/dist/{exe-org-3FNET2J7.js → exe-org-42YMQL75.js} +2 -2
  180. package/dist/{exe-snapshot-YRARQE7F.js → exe-snapshot-ODUCFW7G.js} +18 -18
  181. package/dist/{fast-db-init-HIJWWKAO.js → fast-db-init-YSR7RMVZ.js} +1 -1
  182. package/dist/{founder-context-BQ5NBDUV.js → founder-context-Q2HUCZX4.js} +2 -2
  183. package/dist/gateway/index.js +9 -9
  184. package/dist/{gateway-client-YGSA5QMC.js → gateway-client-4QXHKN5C.js} +1 -1
  185. package/dist/{git-staleness-IHTKCUMN.js → git-staleness-BJDTCDPC.js} +3 -3
  186. package/dist/{git-task-sweep-5ZPNQS7Y.js → git-task-sweep-L3U3T5HM.js} +13 -13
  187. package/dist/{global-procedures-XHDIZRJU.js → global-procedures-HCHEHKY2.js} +4 -4
  188. package/dist/{graph-auto-extract-5TPT67GP.js → graph-auto-extract-FP5C76LS.js} +3 -3
  189. package/dist/{hook-integrity-SB53Y7UK.js → hook-integrity-2OU3T6UC.js} +1 -1
  190. package/dist/hooks/bug-report-worker.js +15 -14
  191. package/dist/hooks/codex-stop-task-finalizer.js +15 -14
  192. package/dist/hooks/commit-complete.js +16 -16
  193. package/dist/hooks/error-recall.js +10 -10
  194. package/dist/hooks/exe-heartbeat-hook.js +5 -5
  195. package/dist/hooks/ingest-worker.js +8 -8
  196. package/dist/hooks/ingest.js +13 -13
  197. package/dist/hooks/instructions-loaded.js +7 -7
  198. package/dist/hooks/manifest.json +20 -20
  199. package/dist/hooks/notification.js +6 -6
  200. package/dist/hooks/post-compact.js +15 -15
  201. package/dist/hooks/post-tool-combined.js +7 -7
  202. package/dist/hooks/pre-compact.js +20 -20
  203. package/dist/hooks/pre-tool-use.js +28 -25
  204. package/dist/hooks/prompt-submit.js +62 -31
  205. package/dist/hooks/session-end.js +26 -26
  206. package/dist/hooks/session-start.js +39 -15
  207. package/dist/hooks/stop.js +22 -22
  208. package/dist/hooks/subagent-stop.js +15 -15
  209. package/dist/hooks/summary-worker.js +32 -27
  210. package/dist/index.js +21 -21
  211. package/dist/{installer-AMZM4MLS.js → installer-AWMUCRN4.js} +7 -7
  212. package/dist/{installer-KT5FW4CN.js → installer-HB3NH6FG.js} +9 -9
  213. package/dist/{installer-HW74W3IT.js → installer-RU6EVOBL.js} +6 -6
  214. package/dist/{intercom-queue-RNM6EPGA.js → intercom-queue-A6UJEFIF.js} +1 -1
  215. package/dist/{key-backup-status-OZ2CXUDW.js → key-backup-status-4YKCV4ZV.js} +1 -1
  216. package/dist/lib/agent-config.js +2 -2
  217. package/dist/lib/cloud-sync.js +10 -8
  218. package/dist/lib/config.js +1 -1
  219. package/dist/lib/consolidation.js +8 -8
  220. package/dist/lib/database.js +3 -3
  221. package/dist/lib/db-daemon-client.js +3 -3
  222. package/dist/lib/db.js +3 -3
  223. package/dist/lib/device-registry.js +1 -1
  224. package/dist/lib/embedder.js +4 -4
  225. package/dist/lib/employee-templates.js +5 -5
  226. package/dist/lib/employees.js +3 -3
  227. package/dist/lib/exe-daemon-client.js +3 -3
  228. package/dist/lib/exe-daemon.js +105 -74
  229. package/dist/lib/hybrid-search.js +8 -8
  230. package/dist/lib/identity.js +3 -3
  231. package/dist/lib/keychain.js +1 -1
  232. package/dist/lib/license.js +2 -2
  233. package/dist/lib/messaging.js +13 -13
  234. package/dist/lib/post-tool-memory.js +3 -3
  235. package/dist/lib/reminders.js +4 -4
  236. package/dist/lib/schedules.js +8 -8
  237. package/dist/lib/session-registry.js +5 -5
  238. package/dist/lib/skill-learning.js +5 -5
  239. package/dist/lib/store.js +7 -7
  240. package/dist/lib/task-router.js +4 -4
  241. package/dist/lib/tasks.js +14 -13
  242. package/dist/lib/tmux-routing.js +12 -12
  243. package/dist/lib/token-spend.js +4 -4
  244. package/dist/lib/ws-client.js +1 -1
  245. package/dist/{license-gate-XJDIL6OZ.js → license-gate-6JQQFBHS.js} +3 -3
  246. package/dist/mcp/register-tools.js +68 -67
  247. package/dist/mcp/server.js +70 -69
  248. package/dist/mcp/tools/complete-reminder.js +5 -5
  249. package/dist/mcp/tools/create-reminder.js +5 -5
  250. package/dist/mcp/tools/create-task.js +16 -15
  251. package/dist/mcp/tools/deactivate-behavior.js +6 -6
  252. package/dist/mcp/tools/list-reminders.js +5 -5
  253. package/dist/mcp/tools/list-tasks.js +16 -15
  254. package/dist/mcp/tools/send-message.js +15 -15
  255. package/dist/mcp/tools/update-task.js +15 -14
  256. package/dist/{mcp-http-config-BXX3RZPR.js → mcp-http-config-XIJR5P2Z.js} +4 -4
  257. package/dist/{memory-cards-KRTP5GFM.js → memory-cards-H4BJJ5OK.js} +3 -3
  258. package/dist/{memory-graph-extractor-G532PUHC.js → memory-graph-extractor-SDGM3GVR.js} +4 -4
  259. package/dist/{memory-poisoning-defense-HJM3FQA3.js → memory-poisoning-defense-UVU67DGJ.js} +3 -3
  260. package/dist/{memory-queue-FTNBWLS4.js → memory-queue-FNT5WHXP.js} +2 -2
  261. package/dist/{memory-queue-client-DHSHEIHQ.js → memory-queue-client-JZCFYTWQ.js} +5 -5
  262. package/dist/{memory-reflection-RANRFUQL.js → memory-reflection-GGB5K35L.js} +3 -3
  263. package/dist/{notifications-4P2PVEOT.js → notifications-P3XQZDTH.js} +12 -12
  264. package/dist/{orchestration-events-IYTASMSN.js → orchestration-events-25WEKUKH.js} +4 -4
  265. package/dist/{orchestration-phase-SGA7PJ5G.js → orchestration-phase-C26XVKLZ.js} +2 -2
  266. package/dist/{orchestrator-VKVHZ4MV.js → orchestrator-VIXTY4E4.js} +14 -14
  267. package/dist/{pipeline-router-E4L5BDXN.js → pipeline-router-S5PE5U6B.js} +4 -4
  268. package/dist/{plan-limits-5O5QG55H.js → plan-limits-DGIVM42H.js} +5 -5
  269. package/dist/{prediction-log-OMWHW7FL.js → prediction-log-DOEOHDHS.js} +1 -1
  270. package/dist/{project-boot-WMI6CWRX.js → project-boot-4ZL2W7DN.js} +12 -2
  271. package/dist/{projection-worker-54KRNQSO.js → projection-worker-GG2W5OM3.js} +3 -3
  272. package/dist/{push-notifications-E2XXEWJZ.js → push-notifications-AMHVR6DF.js} +2 -2
  273. package/dist/{reranker-4NTUFNYT.js → reranker-UCPLQZE2.js} +2 -2
  274. package/dist/{review-polling-BFRJDLUA.js → review-polling-P2MWEXLR.js} +13 -13
  275. package/dist/runtime/index.js +15 -15
  276. package/dist/{session-events-KCZCWGE4.js → session-events-5CD66R6U.js} +13 -13
  277. package/dist/{session-kill-telemetry-TMNIDYWY.js → session-kill-telemetry-7FBHTEDN.js} +4 -4
  278. package/dist/{session-scope-DRZBQ32Y.js → session-scope-VMIPAZU7.js} +12 -12
  279. package/dist/{setup-wizard-TQKGDAHO.js → setup-wizard-BNR47URR.js} +3 -3
  280. package/dist/{shard-manager-G6MHCO7X.js → shard-manager-VGA2TYHM.js} +2 -2
  281. package/dist/{skill-refinement-Z5SWD3AM.js → skill-refinement-NRG4WWRW.js} +3 -3
  282. package/dist/stack-release-PFZI22WC.js +521 -0
  283. package/dist/{stack-update-NO5MNARG.js → stack-update-JIWJGGLX.js} +3 -3
  284. package/dist/{steward-gate-7DWYS5AT.js → steward-gate-L7DJMF4C.js} +4 -4
  285. package/dist/{task-enforcement-2VL5J6JJ.js → task-enforcement-XQL77PZH.js} +52 -12
  286. package/dist/{task-scope-YHALISIB.js → task-scope-R3XKBIHL.js} +12 -12
  287. package/dist/{tasks-crud-JXZEBZFR.js → tasks-crud-DQOG2NPG.js} +12 -12
  288. package/dist/tasks-notify-4EQYG52H.js +37 -0
  289. package/dist/{tasks-review-PGPYJQF5.js → tasks-review-XPFJ4DSJ.js} +12 -12
  290. package/dist/{telemetry-upload-H7OJNBIF.js → telemetry-upload-OT5B5HUY.js} +7 -7
  291. package/dist/{token-budget-JJ7JQIA2.js → token-budget-D2LQKCAV.js} +3 -3
  292. package/dist/{tool-capability-index-WIV4K3FB.js → tool-capability-index-FAJ5ZHDF.js} +1 -1
  293. package/dist/{tool-telemetry-W4LFCHFT.js → tool-telemetry-QIF5BCLF.js} +1 -1
  294. package/dist/tui/App.js +26 -26
  295. package/dist/{tui-data-72U6N2DC.js → tui-data-UEV2QOR3.js} +108 -12
  296. package/dist/{whatsapp-config-W63RQ3AU.js → whatsapp-config-GOSELKTE.js} +7 -0
  297. package/dist/{worker-gate-SCSN6IHI.js → worker-gate-PRCKA23W.js} +2 -2
  298. package/dist/{workflow-engine-OICYBE4F.js → workflow-engine-7X6LLH3M.js} +2 -2
  299. package/dist/{worktree-JXN4RCWC.js → worktree-RICSCT2S.js} +5 -5
  300. package/package.json +1 -1
  301. package/release-notes.json +137 -297
  302. package/stack.release.json +4 -3
  303. package/dist/preflight-EAH2MI76.js +0 -287
  304. /package/dist/{chunk-H42LEGLB.js → chunk-AQBEG33D.js} +0 -0
  305. /package/dist/{chunk-AU5426YP.js → chunk-B7JGEDVE.js} +0 -0
  306. /package/dist/{chunk-YFDDTHNM.js → chunk-JXI4XUTV.js} +0 -0
  307. /package/dist/{chunk-SNYDRHV3.js → chunk-U3DUFHOT.js} +0 -0
  308. /package/dist/{chunk-N2XUH2HQ.js → chunk-VBPC7IC7.js} +0 -0
  309. /package/dist/{chunk-HTUJBTBM.js → chunk-VUS6WXQ3.js} +0 -0
  310. /package/dist/{chunk-NOLIN2YI.js → chunk-XAYRZHLV.js} +0 -0
  311. /package/dist/{core-memory-VOBGGB2Q.js → core-memory-4KAIKQRQ.js} +0 -0
  312. /package/dist/{message-queue-client-KAJN6TIJ.js → message-queue-client-S6W5VMJV.js} +0 -0
  313. /package/dist/{oauth-server-QEXRSXEP.js → oauth-server-2ESBZB7F.js} +0 -0
  314. /package/dist/{webhook-pipe-LY4XEDL7.js → webhook-pipe-ZRUVOG5H.js} +0 -0
  315. /package/dist/{wiki-acl-M3OR547L.js → wiki-acl-MFLSS6DE.js} +0 -0
  316. /package/dist/{wiki-client-MAFYBXCQ.js → wiki-client-GBPR45BQ.js} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  pushNotifyAsync
3
- } from "../chunk-ESKBZN4Q.js";
3
+ } from "../chunk-L4WRH3DL.js";
4
4
  import {
5
5
  deserializeArgs,
6
6
  serializeResultSet
@@ -9,16 +9,16 @@ import {
9
9
  getMcpToolFamily,
10
10
  inferMcpRuntime,
11
11
  recordMcpHttpEvent
12
- } from "../chunk-UODVZGBQ.js";
12
+ } from "../chunk-KN7LPTIB.js";
13
13
  import {
14
14
  ensureDaemonToken
15
- } from "../chunk-JL3K5OTS.js";
15
+ } from "../chunk-7IZWLMTP.js";
16
16
  import {
17
17
  findScopedDuplicate,
18
18
  governMemoryRecord,
19
19
  schedulePostWriteMemoryHygiene
20
- } from "../chunk-4HROS3GJ.js";
21
- import "../chunk-F7LU65PQ.js";
20
+ } from "../chunk-IZVKWBIP.js";
21
+ import "../chunk-Y25OJWOQ.js";
22
22
  import {
23
23
  logRestartEvent
24
24
  } from "../chunk-PWMMIGVQ.js";
@@ -28,7 +28,7 @@ import {
28
28
  import {
29
29
  EXE_AI_DIR,
30
30
  MODELS_DIR
31
- } from "../chunk-TRZ5KA2R.js";
31
+ } from "../chunk-VXIMSRTO.js";
32
32
  import "../chunk-LYH5HE24.js";
33
33
  import "../chunk-MLKGABMK.js";
34
34
 
@@ -606,6 +606,7 @@ async function runOrchestrationTick() {
606
606
  }
607
607
  } finally {
608
608
  _orchestrationBusy = false;
609
+ if (typeof globalThis.gc === "function") globalThis.gc();
609
610
  }
610
611
  }
611
612
  var execFileAsync = promisify(execFileNode);
@@ -1117,7 +1118,7 @@ async function shutdown() {
1117
1118
  }
1118
1119
  }
1119
1120
  try {
1120
- const { createBackupAsync } = await import("../db-backup-HLX5OLIV.js");
1121
+ const { createBackupAsync } = await import("../db-backup-EWS52P2W.js");
1121
1122
  const backupPath = await createBackupAsync("pre-restart");
1122
1123
  if (backupPath) {
1123
1124
  process.stderr.write(`[exed] Pre-restart backup: ${backupPath}
@@ -1140,12 +1141,12 @@ async function shutdown() {
1140
1141
  `);
1141
1142
  }
1142
1143
  try {
1143
- const { stopProjectionWorker } = await import("../projection-worker-54KRNQSO.js");
1144
+ const { stopProjectionWorker } = await import("../projection-worker-GG2W5OM3.js");
1144
1145
  stopProjectionWorker();
1145
1146
  } catch {
1146
1147
  }
1147
1148
  try {
1148
- const { disposeShards } = await import("../shard-manager-G6MHCO7X.js");
1149
+ const { disposeShards } = await import("../shard-manager-VGA2TYHM.js");
1149
1150
  disposeShards();
1150
1151
  } catch {
1151
1152
  }
@@ -1210,7 +1211,7 @@ async function handleHealthCheck(socket, requestId) {
1210
1211
  let pipelineStatus = "unknown";
1211
1212
  if (dbConnected) {
1212
1213
  try {
1213
- await import("../pipeline-router-E4L5BDXN.js");
1214
+ await import("../pipeline-router-S5PE5U6B.js");
1214
1215
  pipelineStatus = "ok";
1215
1216
  } catch {
1216
1217
  pipelineStatus = "unavailable";
@@ -1517,7 +1518,7 @@ async function _writeMemoryRecordInner(entry) {
1517
1518
  const vRow = await client.execute({ sql: "SELECT version FROM memories WHERE id = ?", args: [id] });
1518
1519
  const version = Number(vRow.rows[0]?.version) || 0;
1519
1520
  try {
1520
- const { insertOntologyForMemory } = await import("../agentic-ontology-NCAQIQQI.js");
1521
+ const { insertOntologyForMemory } = await import("../agentic-ontology-DXE5J6I5.js");
1521
1522
  await insertOntologyForMemory({
1522
1523
  id,
1523
1524
  agent_id: record.agent_id,
@@ -1545,7 +1546,7 @@ function startMemoryQueueDrain() {
1545
1546
  fired("memory_queue_drain");
1546
1547
  if (!await ensureStoreForPolling()) return;
1547
1548
  try {
1548
- const { ackQueue, claimQueue, retryQueueEntries } = await import("../memory-queue-FTNBWLS4.js");
1549
+ const { ackQueue, claimQueue, retryQueueEntries } = await import("../memory-queue-FNT5WHXP.js");
1549
1550
  const lease = claimQueue();
1550
1551
  if (!lease || lease.entries.length === 0) return;
1551
1552
  acted("memory_queue_drain");
@@ -1591,7 +1592,7 @@ function startMessageQueueDrain() {
1591
1592
  fired("message_queue_drain");
1592
1593
  if (!await ensureStoreForPolling()) return;
1593
1594
  try {
1594
- const { claimMessageQueue, ackMessageQueue } = await import("../message-queue-client-KAJN6TIJ.js");
1595
+ const { claimMessageQueue, ackMessageQueue } = await import("../message-queue-client-S6W5VMJV.js");
1595
1596
  const lease = claimMessageQueue();
1596
1597
  if (!lease || lease.entries.length === 0) return;
1597
1598
  acted("message_queue_drain");
@@ -1835,7 +1836,6 @@ async function startMcpHttpServer() {
1835
1836
  return parsed > 0 ? parsed : fallback;
1836
1837
  }, closeMcpSession2 = function(sid, reason) {
1837
1838
  const transport = transports.get(sid);
1838
- if (!transport) return;
1839
1839
  transports.delete(sid);
1840
1840
  sessionLastSeen.delete(sid);
1841
1841
  sessionOwnerKeys.delete(sid);
@@ -1845,11 +1845,13 @@ async function startMcpHttpServer() {
1845
1845
  sessionDetails.delete(sid);
1846
1846
  const sessionMcp = sessionServers.get(sid);
1847
1847
  sessionServers.delete(sid);
1848
- try {
1849
- void transport.close();
1850
- } catch (e) {
1851
- process.stderr.write(`[exed] MCP transport close failed for ${sid}: ${e instanceof Error ? e.message : String(e)}
1848
+ if (transport) {
1849
+ try {
1850
+ void transport.close();
1851
+ } catch (e) {
1852
+ process.stderr.write(`[exed] MCP transport close failed for ${sid}: ${e instanceof Error ? e.message : String(e)}
1852
1853
  `);
1854
+ }
1853
1855
  }
1854
1856
  try {
1855
1857
  const maybeClosable = sessionMcp;
@@ -1890,16 +1892,9 @@ async function startMcpHttpServer() {
1890
1892
  const ZOMBIE_THRESHOLD_MS = 30 * 60 * 1e3;
1891
1893
  for (const [sid, lastSeen] of sessionLastSeen) {
1892
1894
  if (now - lastSeen > ZOMBIE_THRESHOLD_MS) {
1893
- const transport = transports.get(sid);
1894
- if (transport) {
1895
- try {
1896
- void transport.close();
1897
- } catch {
1898
- }
1899
- transports.delete(sid);
1900
- process.stderr.write(`[exed] MCP session ${sid.slice(0, 8)}\u2026 zombie transport freed (inactive ${Math.round((now - lastSeen) / 6e4)}m)
1895
+ closeMcpSession2(sid, "zombie_full_cleanup");
1896
+ process.stderr.write(`[exed] MCP session ${sid.slice(0, 8)}\u2026 fully released (inactive ${Math.round((now - lastSeen) / 6e4)}m)
1901
1897
  `);
1902
- }
1903
1898
  }
1904
1899
  }
1905
1900
  const mem = process.memoryUsage();
@@ -1950,7 +1945,7 @@ async function startMcpHttpServer() {
1950
1945
  }
1951
1946
  process.stderr.write("[exed] MCP HTTP: DB ready\n");
1952
1947
  _storeInitialized = true;
1953
- const { initLicenseGate, getCachedLicenseGate } = await import("../license-gate-XJDIL6OZ.js");
1948
+ const { initLicenseGate, getCachedLicenseGate } = await import("../license-gate-6JQQFBHS.js");
1954
1949
  const gateResult = await initLicenseGate();
1955
1950
  if (!gateResult.hasKey) {
1956
1951
  process.stderr.write(
@@ -1965,13 +1960,13 @@ async function startMcpHttpServer() {
1965
1960
  let _cachedWrapTelemetry = null;
1966
1961
  async function getWrapTelemetry() {
1967
1962
  if (!_cachedWrapTelemetry) {
1968
- const { wrapServerWithTelemetry } = await import("../tool-telemetry-W4LFCHFT.js");
1963
+ const { wrapServerWithTelemetry } = await import("../tool-telemetry-QIF5BCLF.js");
1969
1964
  _cachedWrapTelemetry = wrapServerWithTelemetry;
1970
1965
  }
1971
1966
  return _cachedWrapTelemetry;
1972
1967
  }
1973
1968
  Promise.all([
1974
- import("../tool-capability-index-WIV4K3FB.js"),
1969
+ import("../tool-capability-index-FAJ5ZHDF.js"),
1975
1970
  import("../tool-gates-3IC7DK4R.js")
1976
1971
  ]).then(async ([{ getToolCapabilityIndex }, { TOOL_CATEGORIES }]) => {
1977
1972
  const gateState = getCachedLicenseGate();
@@ -2066,7 +2061,7 @@ async function startMcpHttpServer() {
2066
2061
  }
2067
2062
  const url = new URL(req.url || "/", `http://127.0.0.1:${MCP_HTTP_PORT}`);
2068
2063
  try {
2069
- const { handleOAuthRoute } = await import("../oauth-server-QEXRSXEP.js");
2064
+ const { handleOAuthRoute } = await import("../oauth-server-2ESBZB7F.js");
2070
2065
  const handled = await handleOAuthRoute(req, res, url, MCP_HTTP_PORT);
2071
2066
  if (handled) return;
2072
2067
  } catch (err) {
@@ -2084,7 +2079,7 @@ async function startMcpHttpServer() {
2084
2079
  for await (const chunk of req) chunks.push(typeof chunk === "string" ? Buffer.from(chunk) : chunk);
2085
2080
  const rawBody = Buffer.concat(chunks);
2086
2081
  try {
2087
- const { loadWebhookConfig, verifyHmac, processWebhook } = await import("../webhook-pipe-LY4XEDL7.js");
2082
+ const { loadWebhookConfig, verifyHmac, processWebhook } = await import("../webhook-pipe-ZRUVOG5H.js");
2088
2083
  const webhookConfig = await loadWebhookConfig();
2089
2084
  const serviceConfig = webhookConfig[serviceName];
2090
2085
  if (!serviceConfig) {
@@ -2159,7 +2154,7 @@ async function startMcpHttpServer() {
2159
2154
  contextPct: body.context_pct
2160
2155
  });
2161
2156
  if (body.context_pct !== void 0 && body.context_pct > 70) {
2162
- void import("../orchestration-events-IYTASMSN.js").then(({ recordOrchestrationEventBestEffort: recordOE }) => {
2157
+ void import("../orchestration-events-25WEKUKH.js").then(({ recordOrchestrationEventBestEffort: recordOE }) => {
2163
2158
  recordOE({
2164
2159
  eventType: "context.pressure",
2165
2160
  source: "exe-daemon.heartbeat",
@@ -2212,7 +2207,7 @@ async function startMcpHttpServer() {
2212
2207
  let authed = token === _daemonToken;
2213
2208
  if (!authed) {
2214
2209
  try {
2215
- const { verifyAccessToken } = await import("../oauth-server-QEXRSXEP.js");
2210
+ const { verifyAccessToken } = await import("../oauth-server-2ESBZB7F.js");
2216
2211
  const result = verifyAccessToken(token);
2217
2212
  authed = result.valid;
2218
2213
  } catch {
@@ -2680,13 +2675,13 @@ async function ensureStoreForPolling() {
2680
2675
  }
2681
2676
  }
2682
2677
  async function startReviewPolling() {
2683
- const polling = await import("../review-polling-BFRJDLUA.js");
2678
+ const polling = await import("../review-polling-P2MWEXLR.js");
2684
2679
  const state = {
2685
2680
  lastIntercomSent: /* @__PURE__ */ new Map(),
2686
2681
  lastNudgeSent: /* @__PURE__ */ new Map(),
2687
2682
  intervalMs: REVIEW_POLL_INTERVAL_MS
2688
2683
  };
2689
- const { pollReviewNudge, createReviewNudgeRealDeps, loadNudgeState } = await import("../daemon-orchestration-ZCY4GEI3.js");
2684
+ const { pollReviewNudge, createReviewNudgeRealDeps, loadNudgeState } = await import("../daemon-orchestration-BJ3T5MMF.js");
2690
2685
  const nudgeState = loadNudgeState();
2691
2686
  const tick = async () => traceDaemonTimer("review_polling", async () => {
2692
2687
  fired("review_polling");
@@ -2729,7 +2724,7 @@ function startSessionTTL() {
2729
2724
  if (!await ensureStoreForPolling()) return;
2730
2725
  try {
2731
2726
  const { getClient } = await import("./database.js");
2732
- const { checkSessionTTL, createSessionTTLRealDeps } = await import("../daemon-orchestration-ZCY4GEI3.js");
2727
+ const { checkSessionTTL, createSessionTTLRealDeps } = await import("../daemon-orchestration-BJ3T5MMF.js");
2733
2728
  const deps = createSessionTTLRealDeps(getClient);
2734
2729
  const killed = await checkSessionTTL(deps);
2735
2730
  if (killed.length > 0) acted("session_ttl");
@@ -2777,7 +2772,7 @@ function startIdleKill() {
2777
2772
  const cfg = await getCachedConfig();
2778
2773
  if (!cfg) return;
2779
2774
  const { getClient } = await import("./database.js");
2780
- const { pollIdleKill, createIdleKillRealDeps } = await import("../daemon-orchestration-ZCY4GEI3.js");
2775
+ const { pollIdleKill, createIdleKillRealDeps } = await import("../daemon-orchestration-BJ3T5MMF.js");
2781
2776
  const { sessions: liveSessions, paneCache, aliveSessions } = await getSharedOrchestrationCaches();
2782
2777
  const realDeps = createIdleKillRealDeps(
2783
2778
  getClient,
@@ -2846,7 +2841,7 @@ function startConsolidation() {
2846
2841
  `);
2847
2842
  }
2848
2843
  try {
2849
- const { createBackupAsync } = await import("../db-backup-HLX5OLIV.js");
2844
+ const { createBackupAsync } = await import("../db-backup-EWS52P2W.js");
2850
2845
  await createBackupAsync("pre-consolidation");
2851
2846
  } catch (e) {
2852
2847
  process.stderr.write("[exe-daemon] pre-consolidation backup: " + (e instanceof Error ? e.message : String(e)) + "\n");
@@ -3029,7 +3024,7 @@ function startSkillRefinement() {
3029
3024
  if (!shouldRunHeavyJob("skill_refinement")) return;
3030
3025
  try {
3031
3026
  if (!await ensureStoreForPolling()) return;
3032
- const { runSkillRefinement } = await import("../skill-refinement-Z5SWD3AM.js");
3027
+ const { runSkillRefinement } = await import("../skill-refinement-NRG4WWRW.js");
3033
3028
  const result = await runSkillRefinement();
3034
3029
  if (result.reviewed > 0) {
3035
3030
  acted("skill_refinement");
@@ -3374,6 +3369,7 @@ async function refreshAgentData() {
3374
3369
  `);
3375
3370
  } finally {
3376
3371
  _agentRefreshInFlight = false;
3372
+ if (typeof globalThis.gc === "function") globalThis.gc();
3377
3373
  }
3378
3374
  }
3379
3375
  function startAgentStats() {
@@ -3433,7 +3429,7 @@ function startReflectionSweep() {
3433
3429
  );
3434
3430
  let runReflection;
3435
3431
  try {
3436
- ({ runReflection } = await import("../memory-reflection-RANRFUQL.js"));
3432
+ ({ runReflection } = await import("../memory-reflection-GGB5K35L.js"));
3437
3433
  } catch (importErr) {
3438
3434
  _reflectionImportFailed = true;
3439
3435
  process.stderr.write(`[exed] Reflection module unavailable (stale chunk hash?) \u2014 disabled until daemon restart: ${importErr instanceof Error ? importErr.message : String(importErr)}
@@ -3472,7 +3468,7 @@ function startReflectionSweep() {
3472
3468
  if (memories > 100 && cards < memories * 0.1) {
3473
3469
  process.stderr.write(`[exed] Memory cards sparse (${cards} cards / ${memories} memories) \u2014 running backfill...
3474
3470
  `);
3475
- const { insertMemoryCardsForBatch } = await import("../memory-cards-KRTP5GFM.js");
3471
+ const { insertMemoryCardsForBatch } = await import("../memory-cards-H4BJJ5OK.js");
3476
3472
  const batchSize = 500;
3477
3473
  let offset = 0;
3478
3474
  let totalCards = 0;
@@ -3517,7 +3513,7 @@ function startDatabaseBackup() {
3517
3513
  fired("db_backup");
3518
3514
  if (!shouldRunHeavyJob("db_backup")) return;
3519
3515
  try {
3520
- const { createBackupAsync, rotateBackups, hasBackupToday } = await import("../db-backup-HLX5OLIV.js");
3516
+ const { createBackupAsync, rotateBackups, hasBackupToday } = await import("../db-backup-EWS52P2W.js");
3521
3517
  if (hasBackupToday("daily")) return;
3522
3518
  const backupPath = await createBackupAsync("daily");
3523
3519
  if (backupPath) {
@@ -3579,14 +3575,16 @@ function startIntercomQueueDrain() {
3579
3575
  const tick = async () => traceDaemonTimer("intercom_queue_drain", async () => {
3580
3576
  fired("intercom_queue_drain");
3581
3577
  try {
3582
- const { drainQueue } = await import("../intercom-queue-RNM6EPGA.js");
3578
+ const { drainQueue } = await import("../intercom-queue-A6UJEFIF.js");
3583
3579
  const { isSessionBusy } = await import("./tmux-routing.js");
3584
3580
  const { sendIntercom: centralSendIntercom } = await import("./tmux-routing.js");
3585
3581
  const result = drainQueue(
3586
3582
  (session) => isSessionBusy(session),
3587
- (session) => {
3583
+ (session, item) => {
3588
3584
  try {
3589
- const outcome = centralSendIntercom(session);
3585
+ const outcome = centralSendIntercom(session, {
3586
+ reason: item.intercomReason ?? "nudge"
3587
+ });
3590
3588
  return outcome !== "failed";
3591
3589
  } catch (e) {
3592
3590
  process.stderr.write("[exe-daemon] intercom send to " + session + ": " + (e instanceof Error ? e.message : String(e)) + "\n");
@@ -3615,7 +3613,7 @@ function startOrphanReaper() {
3615
3613
  const tick = async () => traceDaemonTimer("orphan_reaper", async () => {
3616
3614
  fired("orphan_reaper");
3617
3615
  try {
3618
- const { reapOrphanedMcpProcesses, createOrphanReaperRealDeps } = await import("../daemon-orchestration-ZCY4GEI3.js");
3616
+ const { reapOrphanedMcpProcesses, createOrphanReaperRealDeps } = await import("../daemon-orchestration-BJ3T5MMF.js");
3619
3617
  const deps = createOrphanReaperRealDeps();
3620
3618
  const reaped = await reapOrphanedMcpProcesses(deps);
3621
3619
  if (reaped.length > 0) acted("orphan_reaper");
@@ -3624,11 +3622,14 @@ function startOrphanReaper() {
3624
3622
  `);
3625
3623
  }
3626
3624
  } catch (err) {
3627
- process.stderr.write(`[exed] Orphan reaper error: ${err instanceof Error ? err.message : String(err)}
3625
+ const msg = err instanceof Error ? err.message : String(err);
3626
+ if (!msg.includes("ENOBUFS")) {
3627
+ process.stderr.write(`[exed] Orphan reaper error: ${msg}
3628
3628
  `);
3629
+ }
3629
3630
  }
3631
+ await yieldToEventLoop();
3630
3632
  });
3631
- void tick();
3632
3633
  const timer = setInterval(() => void tick(), ORPHAN_REAP_INTERVAL_MS);
3633
3634
  timer.unref();
3634
3635
  process.stderr.write(`[exed] Orphan reaper started (every ${ORPHAN_REAP_INTERVAL_MS / 6e4}m)
@@ -3639,7 +3640,7 @@ function startZombieAgentReaper() {
3639
3640
  const tick = async () => traceDaemonTimer("zombie_agent_reaper", async () => {
3640
3641
  fired("zombie_agent_reaper");
3641
3642
  try {
3642
- const { reapZombieAgentProcesses, createZombieAgentReaperRealDeps } = await import("../daemon-orchestration-ZCY4GEI3.js");
3643
+ const { reapZombieAgentProcesses, createZombieAgentReaperRealDeps } = await import("../daemon-orchestration-BJ3T5MMF.js");
3643
3644
  const deps = createZombieAgentReaperRealDeps();
3644
3645
  const reaped = reapZombieAgentProcesses(deps);
3645
3646
  if (reaped.length > 0) acted("zombie_agent_reaper");
@@ -3648,11 +3649,14 @@ function startZombieAgentReaper() {
3648
3649
  `);
3649
3650
  }
3650
3651
  } catch (err) {
3651
- process.stderr.write(`[exed] Zombie agent reaper error: ${err instanceof Error ? err.message : String(err)}
3652
+ const msg = err instanceof Error ? err.message : String(err);
3653
+ if (!msg.includes("ENOBUFS")) {
3654
+ process.stderr.write(`[exed] Zombie agent reaper error: ${msg}
3652
3655
  `);
3656
+ }
3653
3657
  }
3658
+ await yieldToEventLoop();
3654
3659
  });
3655
- void tick();
3656
3660
  const timer = setInterval(() => void tick(), ZOMBIE_AGENT_REAP_INTERVAL_MS);
3657
3661
  timer.unref();
3658
3662
  process.stderr.write(`[exed] Zombie agent reaper started (every ${ZOMBIE_AGENT_REAP_INTERVAL_MS / 6e4}m)
@@ -3662,7 +3666,7 @@ function startWorktreeReaper() {
3662
3666
  const tick = async () => traceDaemonTimer("worktree_reaper", async () => {
3663
3667
  fired("worktree_reaper");
3664
3668
  try {
3665
- const { reapOrphanedWorktrees, createWorktreeReaperRealDeps } = await import("../daemon-orchestration-ZCY4GEI3.js");
3669
+ const { reapOrphanedWorktrees, createWorktreeReaperRealDeps } = await import("../daemon-orchestration-BJ3T5MMF.js");
3666
3670
  const deps = await createWorktreeReaperRealDeps();
3667
3671
  const result = await reapOrphanedWorktrees(deps);
3668
3672
  if (result.pruned.length > 0) {
@@ -3717,7 +3721,7 @@ function startStuckTaskRelease() {
3717
3721
  if (!await ensureStoreForPolling()) return;
3718
3722
  try {
3719
3723
  const { getClient } = await import("./database.js");
3720
- const { releaseStuckTasks, createStuckTaskRealDeps } = await import("../daemon-orchestration-ZCY4GEI3.js");
3724
+ const { releaseStuckTasks, createStuckTaskRealDeps } = await import("../daemon-orchestration-BJ3T5MMF.js");
3721
3725
  const deps = createStuckTaskRealDeps(getClient);
3722
3726
  const released = await releaseStuckTasks(deps);
3723
3727
  if (released.length > 0) {
@@ -3735,9 +3739,8 @@ function startStuckTaskRelease() {
3735
3739
  process.stderr.write(`[exed] Stuck-task release started (every ${STUCK_TASK_CHECK_INTERVAL_MS / 1e3}s)
3736
3740
  `);
3737
3741
  }
3738
- var TOTAL_MEM_GB = os2.totalmem() / 1024 ** 3;
3739
- var RSS_WARN_BYTES = Number(process.env.EXE_RSS_WARN_MB) * 1024 * 1024 || (TOTAL_MEM_GB >= 64 ? 6 * 1024 ** 3 : TOTAL_MEM_GB >= 32 ? 4 * 1024 ** 3 : TOTAL_MEM_GB >= 16 ? 2.5 * 1024 ** 3 : 1.5 * 1024 ** 3);
3740
- var RSS_RESTART_BYTES = Number(process.env.EXE_RSS_RESTART_MB) * 1024 * 1024 || (TOTAL_MEM_GB >= 64 ? 8 * 1024 ** 3 : TOTAL_MEM_GB >= 32 ? 6 * 1024 ** 3 : TOTAL_MEM_GB >= 16 ? 4 * 1024 ** 3 : 3 * 1024 ** 3);
3742
+ var RSS_WARN_BYTES = Number(process.env.EXE_RSS_WARN_MB) * 1024 * 1024 || 1.5 * 1024 ** 3;
3743
+ var RSS_RESTART_BYTES = Number(process.env.EXE_RSS_RESTART_MB) * 1024 * 1024 || 2.5 * 1024 ** 3;
3741
3744
  var RSS_CHECK_INTERVAL_MS = 10 * 1e3;
3742
3745
  var HEAP_WARN_FRACTION = 0.7;
3743
3746
  var HEAP_RESTART_FRACTION = 0.9;
@@ -3768,10 +3771,11 @@ function startExternalRssWatchdog() {
3768
3771
  const restartBytes = Number(workerData.restartBytes);
3769
3772
  const checkMs = Number(workerData.checkMs);
3770
3773
  const markerPath = String(workerData.markerPath);
3774
+ const safeCwd = String(workerData.cwd || "/");
3771
3775
  let terminating = false;
3772
3776
 
3773
3777
  function readRssBytes(cb) {
3774
- execFile("ps", ["-o", "rss=", "-p", String(pid)], { encoding: "utf8", timeout: 5000 }, (err, stdout) => {
3778
+ execFile("ps", ["-o", "rss=", "-p", String(pid)], { cwd: safeCwd, encoding: "utf8", timeout: 5000 }, (err, stdout) => {
3775
3779
  if (err) return cb(null);
3776
3780
  const rssKb = Number(String(stdout || "").trim());
3777
3781
  cb(Number.isFinite(rssKb) && rssKb > 0 ? rssKb * 1024 : null);
@@ -3797,7 +3801,8 @@ function startExternalRssWatchdog() {
3797
3801
  pid: process.pid,
3798
3802
  restartBytes: RSS_RESTART_BYTES,
3799
3803
  checkMs: RSS_CHECK_INTERVAL_MS,
3800
- markerPath: OOM_MARKER_PATH
3804
+ markerPath: OOM_MARKER_PATH,
3805
+ cwd: os2.homedir()
3801
3806
  }
3802
3807
  });
3803
3808
  worker.unref();
@@ -3820,12 +3825,12 @@ function startTaskEnforcementScanner() {
3820
3825
  const tick = async () => traceDaemonTimer("task_enforcement", async () => {
3821
3826
  fired("task_enforcement");
3822
3827
  try {
3823
- const { runTaskEnforcementTick } = await import("../task-enforcement-2VL5J6JJ.js");
3828
+ const { runTaskEnforcementTick } = await import("../task-enforcement-XQL77PZH.js");
3824
3829
  const { getTransport } = await import("./transport.js");
3825
3830
  const { loadAgentConfig } = await import("./agent-config.js");
3826
3831
  const { getClient } = await import("./database.js");
3827
3832
  const { loadEmployeesSync } = await import("./employees.js");
3828
- const { sessionScopeFilter } = await import("../task-scope-YHALISIB.js");
3833
+ const { sessionScopeFilter } = await import("../task-scope-R3XKBIHL.js");
3829
3834
  const transport = getTransport();
3830
3835
  const { sessions: allSessions, paneCache, aliveSessions } = await getSharedOrchestrationCaches();
3831
3836
  await yieldToEventLoop();
@@ -3836,6 +3841,10 @@ function startTaskEnforcementScanner() {
3836
3841
  sendKeysLiteral: transport.sendKeysLiteral?.bind(transport),
3837
3842
  isAlive: (session) => aliveSessions.has(session)
3838
3843
  };
3844
+ const { checkAutoWakeGates } = await import("../daemon-orchestration-BJ3T5MMF.js");
3845
+ const { ensureEmployee } = await import("./tmux-routing.js");
3846
+ const { shouldAutoInstance } = await import("./employees.js");
3847
+ const projectDir = process.cwd();
3839
3848
  await runTaskEnforcementTick({
3840
3849
  transport: enforcementTransport,
3841
3850
  agentConfig: loadAgentConfig(),
@@ -3843,7 +3852,20 @@ function startTaskEnforcementScanner() {
3843
3852
  client: await getClient(),
3844
3853
  scopeFilter: sessionScopeFilter(),
3845
3854
  capturePaneAsync,
3846
- paneCache
3855
+ paneCache,
3856
+ // Reviewer auto-spawn: spawn dead reviewer sessions that have needs_review tasks.
3857
+ // Uses the same gates as auto-wake (CPU pressure, crash loop, worker_gate limits).
3858
+ reviewerSpawn: (reviewerName, sessionScope) => {
3859
+ const gateReason = checkAutoWakeGates(`reviewer::${reviewerName}::${sessionScope}`, Date.now());
3860
+ if (gateReason) {
3861
+ process.stderr.write(
3862
+ `[exed] Reviewer auto-spawn GATED: ${reviewerName} in ${sessionScope} \u2014 ${gateReason}
3863
+ `
3864
+ );
3865
+ return null;
3866
+ }
3867
+ return ensureEmployee(reviewerName, sessionScope, projectDir, shouldAutoInstance(reviewerName));
3868
+ }
3847
3869
  });
3848
3870
  acted("task_enforcement");
3849
3871
  } catch (err) {
@@ -3901,10 +3923,19 @@ function startRssWatchdog() {
3901
3923
  if (rss > RSS_WARN_BYTES && !_rssWarned) {
3902
3924
  acted("rss_watchdog");
3903
3925
  _rssWarned = true;
3904
- process.stderr.write(
3905
- `[exed] RSS WARNING: ${(rss / 1024 / 1024).toFixed(0)} MB (heap used: ${(mem.heapUsed / 1024 / 1024).toFixed(0)} MB, external: ${(mem.external / 1024 / 1024).toFixed(0)} MB, arrayBuffers: ${(mem.arrayBuffers / 1024 / 1024).toFixed(0)} MB)
3926
+ if (typeof globalThis.gc === "function") {
3927
+ globalThis.gc();
3928
+ const afterGc = process.memoryUsage();
3929
+ process.stderr.write(
3930
+ `[exed] RSS WARNING: ${(rss / 1024 / 1024).toFixed(0)} MB \u2192 GC \u2192 ${(afterGc.rss / 1024 / 1024).toFixed(0)} MB (heap used: ${(afterGc.heapUsed / 1024 / 1024).toFixed(0)} MB, external: ${(afterGc.external / 1024 / 1024).toFixed(0)} MB, arrayBuffers: ${(afterGc.arrayBuffers / 1024 / 1024).toFixed(0)} MB)
3906
3931
  `
3907
- );
3932
+ );
3933
+ } else {
3934
+ process.stderr.write(
3935
+ `[exed] RSS WARNING: ${(rss / 1024 / 1024).toFixed(0)} MB (heap used: ${(mem.heapUsed / 1024 / 1024).toFixed(0)} MB, external: ${(mem.external / 1024 / 1024).toFixed(0)} MB, arrayBuffers: ${(mem.arrayBuffers / 1024 / 1024).toFixed(0)} MB)
3936
+ `
3937
+ );
3938
+ }
3908
3939
  } else if (rss < RSS_WARN_BYTES && _rssWarned) {
3909
3940
  _rssWarned = false;
3910
3941
  }
@@ -4026,7 +4057,7 @@ function startBackgroundJobGuardrails() {
4026
4057
  const tick = async () => traceDaemonTimer("background_job_guardrails", async () => {
4027
4058
  fired("background_job_guardrails");
4028
4059
  try {
4029
- const { enforceBackgroundJobGuardrails } = await import("../background-jobs-RWL46VRD.js");
4060
+ const { enforceBackgroundJobGuardrails } = await import("../background-jobs-CRXY7T4Y.js");
4030
4061
  const actions = enforceBackgroundJobGuardrails();
4031
4062
  if (actions.length > 0) {
4032
4063
  acted("background_job_guardrails");
@@ -4384,7 +4415,7 @@ try {
4384
4415
  const msg = `[exed] EVENT LOOP BLOCKED ${(lag / 1e3).toFixed(1)}s \u2014 MCP UNRESPONSIVE. Sessions will die.`;
4385
4416
  process.stderr.write(msg + "\n");
4386
4417
  logDaemonHealth({ event: "event_loop_blocked", pid: process.pid, message: msg, data: { lagMs: lag } });
4387
- void import("../orchestration-events-IYTASMSN.js").then(({ recordOrchestrationEventBestEffort: recordOE }) => {
4418
+ void import("../orchestration-events-25WEKUKH.js").then(({ recordOrchestrationEventBestEffort: recordOE }) => {
4388
4419
  recordOE({ eventType: "daemon.event_loop_blocked", source: "exe-daemon.lagDetector", severity: "error", durationMs: lag });
4389
4420
  }).catch(() => {
4390
4421
  });
@@ -4479,7 +4510,7 @@ try {
4479
4510
  });
4480
4511
  if (Number(res.rowsAffected ?? 0) > 0) {
4481
4512
  synced++;
4482
- void import("../orchestration-events-IYTASMSN.js").then(({ recordOrchestrationEventBestEffort: recordOE }) => {
4513
+ void import("../orchestration-events-25WEKUKH.js").then(({ recordOrchestrationEventBestEffort: recordOE }) => {
4483
4514
  recordOE({
4484
4515
  eventType: "task_file.resynced",
4485
4516
  source: "exe-daemon.taskFileResync",
@@ -4513,7 +4544,7 @@ try {
4513
4544
  fired("task_group_barriers");
4514
4545
  if (!await ensureStoreForPolling()) return;
4515
4546
  try {
4516
- const { pollTaskGroupBarriers } = await import("../daemon-orchestration-ZCY4GEI3.js");
4547
+ const { pollTaskGroupBarriers } = await import("../daemon-orchestration-BJ3T5MMF.js");
4517
4548
  const firedCount = await pollTaskGroupBarriers();
4518
4549
  if (firedCount > 0) {
4519
4550
  acted("task_group_barriers");
@@ -4535,7 +4566,7 @@ try {
4535
4566
  fired("checkpoint_gc");
4536
4567
  if (!await ensureStoreForPolling()) return;
4537
4568
  try {
4538
- const { gcStaleCheckpoints } = await import("../daemon-orchestration-ZCY4GEI3.js");
4569
+ const { gcStaleCheckpoints } = await import("../daemon-orchestration-BJ3T5MMF.js");
4539
4570
  const cleared = await gcStaleCheckpoints();
4540
4571
  if (cleared > 0) {
4541
4572
  acted("checkpoint_gc");
@@ -4633,7 +4664,7 @@ try {
4633
4664
  fired("orphan_task_cleanup");
4634
4665
  try {
4635
4666
  if (!await ensureStoreForPolling()) return;
4636
- const { cleanOrphanedTaskFiles, checkTaskFileConsistency } = await import("../tasks-crud-JXZEBZFR.js");
4667
+ const { cleanOrphanedTaskFiles, checkTaskFileConsistency } = await import("../tasks-crud-DQOG2NPG.js");
4637
4668
  const count = await cleanOrphanedTaskFiles();
4638
4669
  if (count > 0) {
4639
4670
  acted("orphan_task_cleanup");
@@ -4671,7 +4702,7 @@ try {
4671
4702
  const TELEMETRY_DAILY_MS = 24 * 60 * 60 * 1e3;
4672
4703
  const telemetryDaily = async () => {
4673
4704
  try {
4674
- const { sendTelemetry, isTelemetryEnabled } = await import("../telemetry-upload-H7OJNBIF.js");
4705
+ const { sendTelemetry, isTelemetryEnabled } = await import("../telemetry-upload-OT5B5HUY.js");
4675
4706
  if (!isTelemetryEnabled()) return;
4676
4707
  const { upstream } = await sendTelemetry(24);
4677
4708
  if (upstream.startsWith("sent")) {
@@ -4686,12 +4717,12 @@ try {
4686
4717
  setTimeout(telemetryDaily, 2 * 60 * 1e3);
4687
4718
  const dailyTimer = setInterval(telemetryDaily, TELEMETRY_DAILY_MS);
4688
4719
  dailyTimer.unref();
4689
- const { startToolTelemetryFlush } = await import("../tool-telemetry-W4LFCHFT.js");
4720
+ const { startToolTelemetryFlush } = await import("../tool-telemetry-QIF5BCLF.js");
4690
4721
  startToolTelemetryFlush();
4691
4722
  process.stderr.write("[exed] Tool telemetry started (flush every 5m)\n");
4692
4723
  setTimeout(async () => {
4693
4724
  try {
4694
- const { startProjectionWorker } = await import("../projection-worker-54KRNQSO.js");
4725
+ const { startProjectionWorker } = await import("../projection-worker-GG2W5OM3.js");
4695
4726
  startProjectionWorker();
4696
4727
  } catch {
4697
4728
  }
@@ -5,17 +5,17 @@ import {
5
5
  recentRecords,
6
6
  rrfMerge,
7
7
  rrfMergeMulti
8
- } from "../chunk-IQXPMK46.js";
9
- import "../chunk-FGJUGDNM.js";
8
+ } from "../chunk-DLZYAYVM.js";
9
+ import "../chunk-222SI7QC.js";
10
10
  import "../chunk-CHCA3ZM2.js";
11
- import "../chunk-4HROS3GJ.js";
12
- import "../chunk-F7LU65PQ.js";
11
+ import "../chunk-IZVKWBIP.js";
12
+ import "../chunk-Y25OJWOQ.js";
13
13
  import "../chunk-MP2AFCGL.js";
14
- import "../chunk-2H55BIV2.js";
15
- import "../chunk-WSHMBME6.js";
14
+ import "../chunk-CEJO7244.js";
15
+ import "../chunk-AWRL5FGM.js";
16
16
  import "../chunk-FXU7JOXK.js";
17
- import "../chunk-KDJRFJDL.js";
18
- import "../chunk-TRZ5KA2R.js";
17
+ import "../chunk-K333WOW4.js";
18
+ import "../chunk-VXIMSRTO.js";
19
19
  import "../chunk-LYH5HE24.js";
20
20
  import "../chunk-MLKGABMK.js";
21
21
  export {
@@ -4,10 +4,10 @@ import {
4
4
  identityPath,
5
5
  listIdentities,
6
6
  updateIdentity
7
- } from "../chunk-2H55BIV2.js";
8
- import "../chunk-WSHMBME6.js";
7
+ } from "../chunk-CEJO7244.js";
8
+ import "../chunk-AWRL5FGM.js";
9
9
  import "../chunk-FXU7JOXK.js";
10
- import "../chunk-TRZ5KA2R.js";
10
+ import "../chunk-VXIMSRTO.js";
11
11
  import "../chunk-LYH5HE24.js";
12
12
  import "../chunk-MLKGABMK.js";
13
13
  export {
@@ -5,7 +5,7 @@ import {
5
5
  getMasterKey,
6
6
  importMnemonic,
7
7
  setMasterKey
8
- } from "../chunk-KDJRFJDL.js";
8
+ } from "../chunk-K333WOW4.js";
9
9
  import "../chunk-MLKGABMK.js";
10
10
  export {
11
11
  deleteMasterKey,
@@ -13,8 +13,8 @@ import {
13
13
  startLicenseRevalidation,
14
14
  stopLicenseRevalidation,
15
15
  validateLicense
16
- } from "../chunk-D5C56WO3.js";
17
- import "../chunk-TRZ5KA2R.js";
16
+ } from "../chunk-MOZ2YQ54.js";
17
+ import "../chunk-VXIMSRTO.js";
18
18
  import "../chunk-LYH5HE24.js";
19
19
  import "../chunk-MLKGABMK.js";
20
20
  export {