@askexenow/exe-os 0.9.341 → 0.9.342

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 (419) hide show
  1. package/README.md +159 -196
  2. package/deploy/compose/.env.customer.example +1 -0
  3. package/deploy/compose/.env.example +1 -0
  4. package/deploy/compose/docker-compose.yml +13 -4
  5. package/deploy/compose/generate-env.ts +4 -0
  6. package/dist/{active-agent-AIQP4DFL.js → active-agent-PVGE57FY.js} +5 -5
  7. package/dist/{active-agent-LW45DSJ4.js → active-agent-TNIO6IY3.js} +5 -5
  8. package/dist/{agentic-ontology-RVUNRCQY.js → agentic-ontology-3FXYMHKW.js} +1 -1
  9. package/dist/{backfill-gate-J7UXFNXU.js → backfill-gate-65LSYVE5.js} +3 -3
  10. package/dist/{backfill-metadata-ZSDJ4O2T.js → backfill-metadata-ZSMZC45J.js} +8 -8
  11. package/dist/{background-jobs-STURKDCS.js → background-jobs-EXR5RVGG.js} +3 -3
  12. package/dist/{backup-verify-ZAJLEL4X.js → backup-verify-3Y2FHGZU.js} +4 -4
  13. package/dist/{behaviors-EO7KCP3H.js → behaviors-KYRB3NGJ.js} +9 -9
  14. package/dist/bin/age-ontology-load.js +3 -3
  15. package/dist/bin/agentic-ontology-backfill.js +10 -10
  16. package/dist/bin/agentic-reflection-backfill.js +11 -11
  17. package/dist/bin/agentic-semantic-label.js +10 -10
  18. package/dist/bin/backfill-conversations.js +10 -10
  19. package/dist/bin/backfill-responses.js +10 -10
  20. package/dist/bin/backfill-vectors.js +14 -14
  21. package/dist/bin/bulk-sync-postgres.js +19 -19
  22. package/dist/bin/cc-doctor.js +10 -8
  23. package/dist/bin/cleanup-stale-review-tasks.js +25 -23
  24. package/dist/bin/cli.js +79 -25
  25. package/dist/bin/customer-readiness.js +1 -1
  26. package/dist/bin/deferred-daemon-restart.js +98 -92
  27. package/dist/bin/exe-agent-config.js +9 -8
  28. package/dist/bin/exe-agent.js +17 -17
  29. package/dist/bin/exe-assign.js +12 -12
  30. package/dist/bin/exe-boot.js +200 -67
  31. package/dist/bin/exe-call.js +7 -7
  32. package/dist/bin/exe-cloud.js +20 -20
  33. package/dist/bin/exe-config-dump.js +9 -8
  34. package/dist/bin/exe-dispatch.js +25 -23
  35. package/dist/bin/exe-doctor.js +10 -6
  36. package/dist/bin/exe-export-behaviors.js +11 -11
  37. package/dist/bin/exe-forget.js +12 -10
  38. package/dist/bin/exe-gateway.js +15 -10
  39. package/dist/bin/exe-grant.js +5 -5
  40. package/dist/bin/exe-healthcheck.js +14 -8
  41. package/dist/bin/exe-heartbeat.js +28 -27
  42. package/dist/bin/exe-kill.js +30 -28
  43. package/dist/bin/exe-launch-agent.js +128 -67
  44. package/dist/bin/exe-memory-reads.js +257 -0
  45. package/dist/bin/exe-new-employee.js +12 -11
  46. package/dist/bin/exe-pending-messages.js +26 -24
  47. package/dist/bin/exe-pending-notifications.js +25 -23
  48. package/dist/bin/exe-pending-reviews.js +25 -23
  49. package/dist/bin/exe-rename.js +7 -7
  50. package/dist/bin/exe-review.js +29 -27
  51. package/dist/bin/exe-search.js +11 -9
  52. package/dist/bin/exe-session-cleanup.js +115 -85
  53. package/dist/bin/exe-settings.js +24 -23
  54. package/dist/bin/exe-start-codex.js +163 -41
  55. package/dist/bin/exe-start-opencode.js +15 -15
  56. package/dist/bin/exe-status.js +26 -24
  57. package/dist/bin/exe-support.js +5 -5
  58. package/dist/bin/exe-team.js +5 -5
  59. package/dist/bin/exe-timers.js +32 -213
  60. package/dist/bin/exe-watchdog.js +6 -5
  61. package/dist/bin/git-sweep.js +26 -24
  62. package/dist/bin/graph-backfill.js +11 -11
  63. package/dist/bin/graph-export.js +9 -9
  64. package/dist/bin/import-history.js +13 -13
  65. package/dist/bin/install.js +103 -97
  66. package/dist/bin/intercom-check.js +4 -4
  67. package/dist/bin/mcp-sessions.js +2 -2
  68. package/dist/bin/orchestration-metrics.js +6 -6
  69. package/dist/bin/postgres-agentic-reflection-backfill.js +5 -5
  70. package/dist/bin/postgres-agentic-semantic-backfill.js +7 -7
  71. package/dist/bin/pre-publish.js +5 -3
  72. package/dist/bin/reconcile-backlog.js +2 -2
  73. package/dist/bin/registry-proxy.js +1 -1
  74. package/dist/bin/scan-tasks.js +25 -23
  75. package/dist/bin/setup.js +6 -5
  76. package/dist/bin/shard-migrate.js +9 -9
  77. package/dist/bin/stack-update.js +6 -6
  78. package/dist/bin/update.js +1 -1
  79. package/dist/bin/vps-health-gate.js +1 -1
  80. package/dist/{boot-generation-GSMPJOWM.js → boot-generation-BL2ISK4U.js} +5 -5
  81. package/dist/boot-review-sections-DBMQJT5N.js +107 -0
  82. package/dist/branch-hygiene-TZWK6QCF.js +224 -0
  83. package/dist/{branding-JTEOF4ZV.js → branding-DVXBGVDH.js} +3 -3
  84. package/dist/{browser-session-store-CXQMOSEC.js → browser-session-store-B2NR3LIX.js} +2 -1
  85. package/dist/{capability-cards-OBYQNAKZ.js → capability-cards-DN5UIKVN.js} +4 -4
  86. package/dist/{capacity-monitor-MG3FTUD5.js → capacity-monitor-ZG5GGFR2.js} +26 -24
  87. package/dist/{catchup-brief-BVJOF3GL.js → catchup-brief-D6HH6DWS.js} +31 -28
  88. package/dist/{chunk-Q5AIPSSC.js → chunk-25X4JD2V.js} +10 -6
  89. package/dist/{chunk-6MVI4QH2.js → chunk-2KZNGDSW.js} +1 -1
  90. package/dist/{chunk-WH7XN5ER.js → chunk-2WAVZ5UJ.js} +1 -1
  91. package/dist/{chunk-PTJBWC77.js → chunk-2ZYO73KO.js} +4 -3
  92. package/dist/{chunk-CLAYNAXC.js → chunk-3EUMUSLE.js} +1 -1
  93. package/dist/{chunk-BVV6NHKQ.js → chunk-3SW4OEHB.js} +5 -5
  94. package/dist/{task-enforcement-X5QVL6RE.js → chunk-4CMVFVFC.js} +173 -69
  95. package/dist/{chunk-2YCFNBC4.js → chunk-4J4PMPXZ.js} +3 -2
  96. package/dist/{chunk-EDOO23B2.js → chunk-4N2NRGCM.js} +2 -2
  97. package/dist/chunk-4QCFFW2H.js +378 -0
  98. package/dist/{chunk-6MVC43X7.js → chunk-4VSV5P4D.js} +2 -2
  99. package/dist/{chunk-HJX6NCJF.js → chunk-4ZCD2UWW.js} +39 -10
  100. package/dist/{chunk-C445WRUX.js → chunk-5ERDIOV3.js} +2 -2
  101. package/dist/chunk-5H47VHB7.js +30 -0
  102. package/dist/{chunk-BJ23BNED.js → chunk-5TY4FPH6.js} +1 -1
  103. package/dist/{chunk-WD55PEBM.js → chunk-6CH3TPHR.js} +3 -3
  104. package/dist/{chunk-TIXTHUVJ.js → chunk-6WQ3NNCE.js} +3 -3
  105. package/dist/{chunk-7LF5DS3A.js → chunk-6XWTQUO4.js} +1 -1
  106. package/dist/chunk-76CJBM36.js +88 -0
  107. package/dist/{chunk-NFBW7N4D.js → chunk-7CTRGNLW.js} +2 -2
  108. package/dist/{chunk-ITMEE7PQ.js → chunk-7V4JADD6.js} +3 -3
  109. package/dist/{chunk-RMOBQ6A5.js → chunk-AD2VCHSS.js} +1 -1
  110. package/dist/{chunk-DNVFWFYF.js → chunk-AJYCFKJR.js} +1 -1
  111. package/dist/chunk-AM7S2TY6.js +54 -0
  112. package/dist/{chunk-RWSLVYTE.js → chunk-AOHXREB7.js} +295 -67
  113. package/dist/{chunk-DGGDUKH6.js → chunk-ASAFVDVR.js} +1 -1
  114. package/dist/{chunk-NTI22F3R.js → chunk-BUCXNV32.js} +1 -1
  115. package/dist/{chunk-SHIICYJW.js → chunk-BYTDMAGB.js} +4 -2
  116. package/dist/{chunk-32SXNM3G.js → chunk-C5QAPURN.js} +1 -1
  117. package/dist/{chunk-BMHQPIJ2.js → chunk-CE7F6RHG.js} +585 -75
  118. package/dist/{chunk-YWQMWFYR.js → chunk-CNVBKDEY.js} +21 -15
  119. package/dist/{chunk-KPIN44GZ.js → chunk-CWXVH7WV.js} +1 -1
  120. package/dist/chunk-D74XYSA3.js +621 -0
  121. package/dist/{chunk-A47MXY2I.js → chunk-EQHQF5IM.js} +50 -32
  122. package/dist/{chunk-YHUNDGVV.js → chunk-EUS4QUKP.js} +1 -1
  123. package/dist/{chunk-6D2PI4QD.js → chunk-EV46QTD3.js} +1 -1
  124. package/dist/{chunk-N7A5D25S.js → chunk-F27XXN6C.js} +1 -1
  125. package/dist/{chunk-XQNNB5GY.js → chunk-F55P3H4S.js} +37 -2
  126. package/dist/{chunk-MWZFF3Q7.js → chunk-F5O7V7UK.js} +1 -1
  127. package/dist/{chunk-MC4ATFJV.js → chunk-FPFPLPUY.js} +6 -6
  128. package/dist/{chunk-UU4UINUX.js → chunk-G4RGKBCA.js} +2 -2
  129. package/dist/{chunk-HAZO7TRD.js → chunk-G5T6KDG4.js} +1 -1
  130. package/dist/{chunk-TWXZM34M.js → chunk-GBTTBXAF.js} +6 -6
  131. package/dist/{chunk-LA2Z6RMS.js → chunk-GDIJE6D7.js} +1 -1
  132. package/dist/{chunk-4QSJVMMT.js → chunk-GG5NDQNN.js} +2 -2
  133. package/dist/{chunk-6BQG7EKO.js → chunk-GJ26DULE.js} +2 -2
  134. package/dist/chunk-GL57PO3K.js +104 -0
  135. package/dist/chunk-GWDSB25T.js +6 -0
  136. package/dist/{chunk-HSYJ6DZ2.js → chunk-H6BV5TKD.js} +39 -24
  137. package/dist/{chunk-HCJCW7X4.js → chunk-H7I47RS5.js} +34 -1
  138. package/dist/{chunk-GFDGDFBF.js → chunk-HA5R6USD.js} +22 -5
  139. package/dist/{chunk-L2YGXJGF.js → chunk-HAF2DJYV.js} +3 -3
  140. package/dist/chunk-HJ447YER.js +224 -0
  141. package/dist/{chunk-6QW6JHRE.js → chunk-HV4KESRY.js} +59 -32
  142. package/dist/{chunk-BJOBR6P2.js → chunk-I26FWCSP.js} +216 -9
  143. package/dist/{chunk-X2FHTDIU.js → chunk-IBYL4DHM.js} +1 -1
  144. package/dist/{chunk-JCBKARSK.js → chunk-IOEUAQWP.js} +1 -1
  145. package/dist/{chunk-2UGGBIDL.js → chunk-JGIPOUIK.js} +3 -3
  146. package/dist/{chunk-LLU6WZLK.js → chunk-JLZ4RYSD.js} +2 -2
  147. package/dist/{chunk-WWNQFOSP.js → chunk-JMYHW3AL.js} +2 -2
  148. package/dist/{chunk-KP4PY2Z2.js → chunk-JPUZPAAF.js} +4 -4
  149. package/dist/{chunk-4LWV633D.js → chunk-JTBIS4R5.js} +1 -1
  150. package/dist/{chunk-PPZOWQHP.js → chunk-K7KFGDWF.js} +1 -1
  151. package/dist/{chunk-HNLXMD2V.js → chunk-KGWRTRKC.js} +2 -2
  152. package/dist/{chunk-IB336P52.js → chunk-KP3U5QGJ.js} +1 -1
  153. package/dist/{chunk-OUEFW4RK.js → chunk-KW2SD2FL.js} +2 -2
  154. package/dist/{chunk-2P4WJNN5.js → chunk-KWZMQACA.js} +11 -7
  155. package/dist/{chunk-ATKW3SYL.js → chunk-L2R3LN2P.js} +1 -1
  156. package/dist/{chunk-IELUDZAA.js → chunk-L4A5DL6Z.js} +3 -3
  157. package/dist/{chunk-2C455MU3.js → chunk-LU2FALL6.js} +3 -3
  158. package/dist/{chunk-LOBCQXV5.js → chunk-MKYFAKDW.js} +4 -4
  159. package/dist/{chunk-3BRVLPPA.js → chunk-MOPUCPXK.js} +4 -0
  160. package/dist/{chunk-BR4423AS.js → chunk-MR6LHP4F.js} +1 -1
  161. package/dist/chunk-MVYB76QG.js +341 -0
  162. package/dist/{chunk-ZNE6H2JO.js → chunk-MZM6EJCU.js} +4 -4
  163. package/dist/{chunk-FOV57K47.js → chunk-N7QJKQMX.js} +258 -14
  164. package/dist/{chunk-AYLNJGCS.js → chunk-NBZL5CGA.js} +93 -12
  165. package/dist/{chunk-YLQXP7T7.js → chunk-NN2B2QKU.js} +1 -1
  166. package/dist/chunk-NX5INHHG.js +40 -0
  167. package/dist/{chunk-B75BOKEI.js → chunk-NXUSDL37.js} +2 -2
  168. package/dist/{chunk-TPHCZDE3.js → chunk-O5V57XYE.js} +1 -1
  169. package/dist/chunk-O7LWR36Z.js +269 -0
  170. package/dist/{chunk-BV6GBSRP.js → chunk-OLMQ4UOF.js} +42 -10
  171. package/dist/{chunk-UIU2DGRV.js → chunk-OTF44GXL.js} +4 -4
  172. package/dist/{chunk-GOGSWXNZ.js → chunk-OZEBAGKR.js} +277 -137
  173. package/dist/{chunk-NDSNM5OH.js → chunk-P5HIWY2E.js} +1 -1
  174. package/dist/{chunk-MJB5ZFQM.js → chunk-PDWS3E22.js} +55 -4
  175. package/dist/{chunk-4FJZ6SO7.js → chunk-PPCDBE6Z.js} +1 -1
  176. package/dist/{chunk-7SEC2AG5.js → chunk-PQIDGXSG.js} +13 -4
  177. package/dist/chunk-PWUFMX75.js +186 -0
  178. package/dist/{chunk-GPW32HVB.js → chunk-QDGZJ653.js} +3 -3
  179. package/dist/{chunk-CYA5S5OD.js → chunk-QOO5RW3K.js} +6 -5
  180. package/dist/{chunk-IXBIVKWZ.js → chunk-QQ4E2RYW.js} +95 -18
  181. package/dist/{chunk-2WMTTIAZ.js → chunk-QRYVCDWS.js} +2 -2
  182. package/dist/{chunk-Z42MXYWW.js → chunk-QWVXN224.js} +110 -28
  183. package/dist/{chunk-XSMRR4IW.js → chunk-QYZJHTNE.js} +26 -27
  184. package/dist/{chunk-I7ECEP3W.js → chunk-R2NN3JKH.js} +43 -6
  185. package/dist/{chunk-B7CUBLF7.js → chunk-RACAOE2Z.js} +13 -13
  186. package/dist/{chunk-5RACW3LX.js → chunk-RAXVPNMR.js} +1 -1
  187. package/dist/{chunk-CMR64RYM.js → chunk-RHWZUUS4.js} +17 -17
  188. package/dist/{chunk-RNAYCUNM.js → chunk-S3THSOWV.js} +1 -1
  189. package/dist/{chunk-U2MREVXQ.js → chunk-S7QUM2UK.js} +2 -2
  190. package/dist/{chunk-SSTLTIF3.js → chunk-SKGMF2SO.js} +25 -2
  191. package/dist/{chunk-J6SEDDOR.js → chunk-SQKXKV2Y.js} +2 -2
  192. package/dist/{chunk-DPFQ2WQX.js → chunk-TLT7NZCW.js} +4 -4
  193. package/dist/chunk-TTCUG2CF.js +91 -0
  194. package/dist/{chunk-W6K4XB6G.js → chunk-UEA3LXOB.js} +1 -1
  195. package/dist/{chunk-WNKVKNOM.js → chunk-UNXQBELK.js} +1 -1
  196. package/dist/{chunk-KKOLHBNC.js → chunk-UP75Z5X7.js} +904 -167
  197. package/dist/{chunk-Y3S4H77G.js → chunk-USSB56WK.js} +1 -1
  198. package/dist/{chunk-PVIH3ZGV.js → chunk-UUEKJDK6.js} +90 -10
  199. package/dist/{chunk-T2PYVVZ5.js → chunk-UUQBZPJJ.js} +1 -1
  200. package/dist/{chunk-32YHCHWW.js → chunk-V3EEVY4L.js} +1 -1
  201. package/dist/{chunk-2IWBY7XK.js → chunk-VPZHJCKW.js} +2 -2
  202. package/dist/chunk-VRAQTFD6.js +265 -0
  203. package/dist/{chunk-EDH54E5A.js → chunk-VSRPS3J7.js} +14 -14
  204. package/dist/{chunk-5ZNY7IZI.js → chunk-WMESXBJM.js} +37 -3
  205. package/dist/{chunk-54QCG45Y.js → chunk-WOYADZF5.js} +56 -5
  206. package/dist/{chunk-7Y5UDEVM.js → chunk-WZHZCDDO.js} +6 -5
  207. package/dist/{chunk-3NGZ4PL7.js → chunk-X2Q5NLUL.js} +11 -2
  208. package/dist/{chunk-CCIEIRV2.js → chunk-X33NYQYJ.js} +2 -2
  209. package/dist/{chunk-K6KRBXQP.js → chunk-XHK3FS3W.js} +3 -2
  210. package/dist/{chunk-AP455LBW.js → chunk-XZXBB3TN.js} +2 -2
  211. package/dist/{chunk-JSKBHUR7.js → chunk-YCANDMI2.js} +2 -2
  212. package/dist/{chunk-YIIME2OW.js → chunk-YLXTKI6M.js} +1 -1
  213. package/dist/{chunk-LEJ25726.js → chunk-YTCFACP4.js} +650 -434
  214. package/dist/{chunk-HUSVERE6.js → chunk-Z6RSN7KS.js} +7 -6
  215. package/dist/{cleanup-graph-garbage-MXQ4Q2MA.js → cleanup-graph-garbage-XWUFAMFO.js} +8 -8
  216. package/dist/{co-activation-QI5BK4RT.js → co-activation-ZCHPLLP6.js} +4 -4
  217. package/dist/{co-occurrence-BYSQNZSV.js → co-occurrence-KG3LKALN.js} +6 -6
  218. package/dist/{code-context-index-BNBHDXHW.js → code-context-index-WSOJQ72R.js} +5 -5
  219. package/dist/{content-extractor-JRJDNIHP.js → content-extractor-NXYNEF5K.js} +2 -2
  220. package/dist/{conversation-entity-extractor-FPAMTL3C.js → conversation-entity-extractor-D3EFTLT4.js} +2 -2
  221. package/dist/{conversation-wiki-populator-WU4HEQ7C.js → conversation-wiki-populator-WQN3IUU6.js} +1 -1
  222. package/dist/{crdt-sync-ETPKNBCU.js → crdt-sync-4PFGPZXV.js} +8 -1
  223. package/dist/{crm-webhook-M566ZMZS.js → crm-webhook-II7Z45Q6.js} +2 -2
  224. package/dist/cto-delegation-gate-JWWOJPNC.js +669 -0
  225. package/dist/{daemon-auth-7IFSV5FG.js → daemon-auth-3FEAHFWC.js} +5 -3
  226. package/dist/{daemon-orchestration-XV5GN73R.js → daemon-orchestration-FX4XZDR5.js} +45 -26
  227. package/dist/{daemon-ready-RKKB4P6K.js → daemon-ready-4JTSFKAY.js} +1 -1
  228. package/dist/{daemon-ready-signal-WKEJQNRA.js → daemon-ready-signal-LPAZWQOV.js} +3 -1
  229. package/dist/daemon-restart-circuit-breaker-PEGEIP6H.js +35 -0
  230. package/dist/daemon-timer-report-NM44WQRH.js +25 -0
  231. package/dist/{db-backup-MX2G3CEK.js → db-backup-W2QFSYQC.js} +15 -5
  232. package/dist/{db-restore-events-JVEEP52Z.js → db-restore-events-MQ2DBGEQ.js} +2 -2
  233. package/dist/dispatch-ack-VYH3ONSS.js +27 -0
  234. package/dist/{doc-graph-extractor-LR5KMPH7.js → doc-graph-extractor-F6ODFIID.js} +6 -6
  235. package/dist/{documents-FA6N7QDA.js → documents-23WX2FPQ.js} +12 -12
  236. package/dist/dreaming-NWD22UQ5.js +46 -0
  237. package/dist/{exe-drift-TUKTCXZE.js → exe-drift-CW72FBGE.js} +5 -5
  238. package/dist/{exe-export-ZLHBXMZC.js → exe-export-AUJ7CV7G.js} +11 -11
  239. package/dist/{exe-import-VVKBZWSA.js → exe-import-JX4I52VE.js} +11 -11
  240. package/dist/{exe-key-QJXFBF6G.js → exe-key-2N6LY2BU.js} +242 -228
  241. package/dist/{exe-org-BGZNNE4H.js → exe-org-X4CSNCKS.js} +3 -3
  242. package/dist/{exe-snapshot-JRLUO645.js → exe-snapshot-XZ7FVCYZ.js} +30 -28
  243. package/dist/{fast-db-init-JKJEEHUI.js → fast-db-init-4CWHSOOR.js} +1 -1
  244. package/dist/{founder-context-HWPLMZVR.js → founder-context-7L3CFPYN.js} +4 -4
  245. package/dist/gateway/index.js +25 -25
  246. package/dist/{gateway-client-GRBOJQYC.js → gateway-client-7LMZKHTH.js} +1 -1
  247. package/dist/git-main-guard-UZP3KXYI.js +39 -0
  248. package/dist/{git-staleness-X5XZONX3.js → git-staleness-CI2R4QOJ.js} +4 -4
  249. package/dist/{global-procedures-VIIVWB6R.js → global-procedures-XQX3LUH6.js} +6 -6
  250. package/dist/{graph-auto-extract-HCQQF5AG.js → graph-auto-extract-OURWMGBS.js} +6 -6
  251. package/dist/{graph-rag-WAK2BRJH.js → graph-rag-JZZAB7PC.js} +2 -2
  252. package/dist/{hook-integrity-WURH6DS3.js → hook-integrity-XY47IM7G.js} +1 -1
  253. package/dist/hook-prefetch-PHRRKY4C.js +137 -0
  254. package/dist/hooks/bug-report-worker.js +31 -27
  255. package/dist/hooks/codex-stop-task-finalizer.js +31 -27
  256. package/dist/hooks/commit-complete.js +28 -26
  257. package/dist/hooks/error-recall.js +12 -11
  258. package/dist/hooks/exe-heartbeat-hook.js +6 -6
  259. package/dist/hooks/ingest-worker.js +11 -11
  260. package/dist/hooks/ingest.js +18 -18
  261. package/dist/hooks/instructions-loaded.js +7 -7
  262. package/dist/hooks/manifest.json +20 -20
  263. package/dist/hooks/notification.js +7 -7
  264. package/dist/hooks/post-compact.js +27 -25
  265. package/dist/hooks/post-tool-combined.js +12 -12
  266. package/dist/hooks/pre-compact.js +28 -26
  267. package/dist/hooks/pre-tool-use.js +179 -46
  268. package/dist/hooks/prompt-submit.js +323 -272
  269. package/dist/hooks/session-end.js +34 -32
  270. package/dist/hooks/session-start.js +28 -21
  271. package/dist/hooks/stop.js +34 -32
  272. package/dist/hooks/subagent-stop.js +27 -25
  273. package/dist/hooks/summary-worker.js +35 -33
  274. package/dist/index.js +40 -38
  275. package/dist/{installer-6IFVEQI4.js → installer-G3JAO3NT.js} +9 -9
  276. package/dist/{installer-NX2CLNV5.js → installer-JND3RJ6Q.js} +9 -9
  277. package/dist/{installer-T2LGHZKL.js → installer-L7EVH5U5.js} +9 -9
  278. package/dist/{intercom-queue-KYHXXZCQ.js → intercom-queue-ZFEQALR3.js} +24 -22
  279. package/dist/{key-backup-status-TNEHXA2X.js → key-backup-status-LOSMVATJ.js} +2 -2
  280. package/dist/lib/agent-config.js +4 -3
  281. package/dist/lib/cloud-sync.js +19 -19
  282. package/dist/lib/config.js +2 -2
  283. package/dist/lib/consolidation.js +11 -11
  284. package/dist/lib/crypto.js +3 -3
  285. package/dist/lib/database.js +6 -4
  286. package/dist/lib/db-daemon-client.js +5 -5
  287. package/dist/lib/db-read-worker-client.js +9 -3
  288. package/dist/lib/db.js +6 -4
  289. package/dist/lib/device-registry.js +3 -3
  290. package/dist/lib/embed-worker.js +2 -2
  291. package/dist/lib/embedder.js +5 -5
  292. package/dist/lib/employee-templates.js +7 -7
  293. package/dist/lib/employees.js +10 -4
  294. package/dist/lib/exe-daemon-client.js +4 -4
  295. package/dist/lib/exe-daemon.js +588 -164
  296. package/dist/lib/hybrid-search.js +11 -9
  297. package/dist/lib/identity.js +4 -4
  298. package/dist/lib/keychain.js +1 -1
  299. package/dist/lib/license.js +4 -4
  300. package/dist/lib/messaging.js +27 -23
  301. package/dist/lib/post-tool-memory.js +3 -3
  302. package/dist/lib/registry-proxy.js +1 -1
  303. package/dist/lib/reminders.js +15 -7
  304. package/dist/lib/schedules.js +9 -9
  305. package/dist/lib/session-registry.js +6 -6
  306. package/dist/lib/skill-learning.js +10 -10
  307. package/dist/lib/status-brief.js +4 -4
  308. package/dist/lib/store.js +8 -8
  309. package/dist/lib/task-router.js +5 -5
  310. package/dist/lib/tasks.js +28 -24
  311. package/dist/lib/tmux-routing.js +55 -24
  312. package/dist/lib/tmux-status.js +9 -3
  313. package/dist/lib/tmux-transport.js +1 -1
  314. package/dist/lib/token-spend.js +5 -5
  315. package/dist/lib/transport.js +2 -2
  316. package/dist/lib/ws-client.js +1 -1
  317. package/dist/{license-gate-MGDR4YNI.js → license-gate-QTRQHV4F.js} +5 -5
  318. package/dist/{license-sync-UWE6GEB4.js → license-sync-N3UJFWAW.js} +4 -4
  319. package/dist/mcp/register-tools.js +97 -91
  320. package/dist/mcp/server.js +99 -93
  321. package/dist/mcp/tools/complete-reminder.js +6 -6
  322. package/dist/mcp/tools/create-reminder.js +6 -6
  323. package/dist/mcp/tools/create-task.js +36 -27
  324. package/dist/mcp/tools/deactivate-behavior.js +11 -11
  325. package/dist/mcp/tools/list-reminders.js +6 -6
  326. package/dist/mcp/tools/list-tasks.js +34 -28
  327. package/dist/mcp/tools/send-message.js +27 -25
  328. package/dist/mcp/tools/update-task.js +33 -27
  329. package/dist/{mcp-http-config-RQLYEPTL.js → mcp-http-config-BDL36JZ3.js} +6 -6
  330. package/dist/{mcp-port-config-FFAMMLLE.js → mcp-port-config-6HYY6J7K.js} +2 -2
  331. package/dist/mcp-session-identity-T7H2EKFQ.js +177 -0
  332. package/dist/{memory-cards-VYQ5DPMR.js → memory-cards-ZRDW7QBX.js} +8 -8
  333. package/dist/{memory-graph-extractor-GX2HNYLU.js → memory-graph-extractor-QLXDMHRS.js} +7 -7
  334. package/dist/{memory-poisoning-defense-TX7627BD.js → memory-poisoning-defense-HJTXYCWH.js} +4 -4
  335. package/dist/{memory-pressure-watchdog-MLNNH26B.js → memory-pressure-watchdog-HN5X7AVN.js} +75 -36
  336. package/dist/{memory-queue-X2CSEAKE.js → memory-queue-2UOOF27L.js} +5 -3
  337. package/dist/{memory-queue-client-YRL6XTGU.js → memory-queue-client-O5U6F6XP.js} +6 -6
  338. package/dist/{memory-reflection-KIGEFSI4.js → memory-reflection-WVNFBJAA.js} +4 -4
  339. package/dist/{monitor-grants-RZOVSYVO.js → monitor-grants-E3ELDEWD.js} +5 -5
  340. package/dist/{monitor-identity-MOXISYNG.js → monitor-identity-GLFZSEAH.js} +2 -2
  341. package/dist/{notification-ledger-B6AVEGMV.js → notification-ledger-SZEPGJQ7.js} +25 -23
  342. package/dist/{notifications-DWXV7SVL.js → notifications-4UT53CDG.js} +24 -22
  343. package/dist/{orchestration-events-ZG7O4HRY.js → orchestration-events-WV4NWKZH.js} +5 -5
  344. package/dist/{orchestration-phase-CXRCBCK7.js → orchestration-phase-AWBXPO52.js} +3 -3
  345. package/dist/orchestrator-UAC3RW2T.js +47 -0
  346. package/dist/{pipeline-router-RTLAGZTA.js → pipeline-router-LM53NMWJ.js} +5 -5
  347. package/dist/{plan-limits-WLQZTCSF.js → plan-limits-2FEY2GOS.js} +7 -7
  348. package/dist/platform-procedures-X5DFJFV7.js +13 -0
  349. package/dist/{preferences-TYTGDXQZ.js → preferences-TWIXZBKS.js} +2 -2
  350. package/dist/{project-boot-6CGQ3EAH.js → project-boot-4NUH5FRU.js} +2 -2
  351. package/dist/{projection-worker-44SEKTZ5.js → projection-worker-FZ7YSN3G.js} +5 -5
  352. package/dist/{prospective-memory-UACFTYXK.js → prospective-memory-6D2ASWM3.js} +4 -4
  353. package/dist/{push-notifications-W5JRXLKJ.js → push-notifications-U6FIBQRW.js} +3 -3
  354. package/dist/{reranker-NL4YAV6R.js → reranker-GYYRPANK.js} +3 -3
  355. package/dist/{retrieval-health-4C2PO6HH.js → retrieval-health-4Z242P3B.js} +1 -1
  356. package/dist/{review-polling-W5AMHNLT.js → review-polling-HXAFJZDA.js} +25 -23
  357. package/dist/runtime/index.js +35 -33
  358. package/dist/{session-events-PGL5GJEB.js → session-events-O3BV56ZX.js} +25 -23
  359. package/dist/{session-kill-telemetry-6YDGEF27.js → session-kill-telemetry-AELE4JDK.js} +25 -23
  360. package/dist/session-mcp-config-YKNXG5DW.js +50 -0
  361. package/dist/{session-scope-3MEOO557.js → session-scope-5EAPUT45.js} +24 -22
  362. package/dist/setup-wizard-NB6R4QVS.js +14 -0
  363. package/dist/{shard-manager-MBWQEYNG.js → shard-manager-35PWFR3B.js} +3 -3
  364. package/dist/{skill-refinement-EOROTBPX.js → skill-refinement-DVSYXBBP.js} +5 -5
  365. package/dist/{stack-release-PR2XKJ4Q.js → stack-release-HGFFFCGC.js} +90 -15
  366. package/dist/{stack-update-LMDM27ZW.js → stack-update-ATCJFOEK.js} +5 -5
  367. package/dist/{steward-gate-4A2XHYFD.js → steward-gate-3GQ5XKMJ.js} +5 -5
  368. package/dist/{support-inbox-Z77ACQUY.js → support-inbox-4L62P4EP.js} +7 -6
  369. package/dist/{support-outbox-GB5SQFRJ.js → support-outbox-WHGPUYL2.js} +2 -2
  370. package/dist/task-enforcement-IPIZX2MM.js +90 -0
  371. package/dist/{task-scope-EKYDCVUF.js → task-scope-FOIW25HR.js} +26 -22
  372. package/dist/{tasks-crud-6LBNU43G.js → tasks-crud-HBDKE6C5.js} +34 -22
  373. package/dist/tasks-notify-G2U2U2YA.js +53 -0
  374. package/dist/{tasks-review-PBIUYXAL.js → tasks-review-27SFX5XN.js} +26 -22
  375. package/dist/{telemetry-upload-WQDFABTF.js → telemetry-upload-ZOXHRWR5.js} +9 -9
  376. package/dist/tmux-command-guard-KSJKIX3C.js +117 -0
  377. package/dist/{token-budget-KWGL5DY7.js → token-budget-5Y4YPDO3.js} +5 -5
  378. package/dist/{tool-capability-index-EH3HQVHU.js → tool-capability-index-VYF5GNJ2.js} +1 -1
  379. package/dist/{tool-telemetry-UC55LSIH.js → tool-telemetry-KBXSBDTK.js} +1 -1
  380. package/dist/tui/App.js +39 -37
  381. package/dist/{tui-data-M3RBSJL3.js → tui-data-NLFMBIQI.js} +24 -22
  382. package/dist/{update-check-HFO4VHO4.js → update-check-3FHAWIG2.js} +7 -3
  383. package/dist/{update-support-VPBD5SD2.js → update-support-UVUSZG7R.js} +93 -93
  384. package/dist/{whatsapp-accounts-BWRZUY23.js → whatsapp-accounts-BFIOXYW5.js} +1 -1
  385. package/dist/{whatsapp-config-GOSELKTE.js → whatsapp-config-FAX6EA5K.js} +20 -13
  386. package/dist/{worker-gate-4QLLMXZM.js → worker-gate-3KUBAU32.js} +3 -3
  387. package/dist/{workflow-engine-MMEHKUN4.js → workflow-engine-YITHXZR5.js} +2 -2
  388. package/dist/{working-memory-PY4AG577.js → working-memory-NUVB5SFV.js} +1 -1
  389. package/dist/worktree-LL62PLQB.js +47 -0
  390. package/dist/{worktree-sweep-5WKBU7E6.js → worktree-sweep-WTK3MTKH.js} +7 -7
  391. package/package.json +3 -2
  392. package/release-notes.json +75 -43
  393. package/dist/branch-hygiene-R5NVTRAY.js +0 -138
  394. package/dist/chunk-7YORGTXC.js +0 -138
  395. package/dist/chunk-CCPHEPLU.js +0 -30
  396. package/dist/chunk-HMP5VT6A.js +0 -118
  397. package/dist/chunk-PVYR4FCQ.js +0 -113
  398. package/dist/chunk-RP5GETX5.js +0 -140
  399. package/dist/chunk-YGAAZN3E.js +0 -47
  400. package/dist/cto-delegation-gate-S734XDXT.js +0 -290
  401. package/dist/dispatch-ack-4S44HBWB.js +0 -15
  402. package/dist/dreaming-UKGTQT6I.js +0 -44
  403. package/dist/orchestrator-PGHJDUUT.js +0 -45
  404. package/dist/setup-wizard-CJIYDSSP.js +0 -13
  405. package/dist/tasks-notify-TFJLSQ3B.js +0 -50
  406. package/dist/worktree-YXBDRYOC.js +0 -31
  407. package/dist/{chunk-7UMCQQWS.js → chunk-A4DVMPYB.js} +3 -3
  408. /package/dist/{chunk-2KLAYDFB.js → chunk-GIBYNT6W.js} +0 -0
  409. /package/dist/{chunk-MC6VPZKS.js → chunk-JRM4TAGS.js} +0 -0
  410. /package/dist/{chunk-3NCZKWPO.js → chunk-MGGOSFCR.js} +0 -0
  411. /package/dist/{chunk-C2SRRCRK.js → chunk-QIFYLIUF.js} +0 -0
  412. /package/dist/{chunk-OADURIIN.js → chunk-WTH4CSAP.js} +0 -0
  413. /package/dist/{core-memory-3IBWM4WR.js → core-memory-GAC6EWOQ.js} +0 -0
  414. /package/dist/{entity-boost-DWAWXFKN.js → entity-boost-NT6UO2Z3.js} +0 -0
  415. /package/dist/{message-queue-client-3PTHPG5Q.js → message-queue-client-4EOQRUXW.js} +0 -0
  416. /package/dist/{oauth-server-M5TGXT6D.js → oauth-server-67YBDP32.js} +0 -0
  417. /package/dist/{webhook-pipe-FZYLO6RR.js → webhook-pipe-LEXMUQ5B.js} +0 -0
  418. /package/dist/{wiki-acl-7CROE3MJ.js → wiki-acl-74BLWG6J.js} +0 -0
  419. /package/dist/{wiki-client-VNDOBK63.js → wiki-client-EAN7F5LV.js} +0 -0
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  loadConfigSync
3
- } from "./chunk-7Y5UDEVM.js";
3
+ } from "./chunk-WZHZCDDO.js";
4
4
 
5
5
  // src/lib/push-notifications.ts
6
- import { execSync } from "child_process";
6
+ import { execSync, execFileSync } from "child_process";
7
7
  import nodemailer from "nodemailer";
8
8
  var TELEGRAM_TIMEOUT_MS = 1e4;
9
9
  var SMTP_TIMEOUT_MS = 15e3;
@@ -29,8 +29,8 @@ function _resetPushConfig() {
29
29
  }
30
30
  function sendDesktopNotification(title, body, sessionScope) {
31
31
  try {
32
- const safeTitle = title.replace(/["\\\n]/g, " ").slice(0, 100);
33
- const safeBody = body.replace(/["\\\n]/g, " ").slice(0, 200);
32
+ const safeTitle = title.replace(/["\\\n$`!]/g, " ").slice(0, 100);
33
+ const safeBody = body.replace(/["\\\n$`!]/g, " ").slice(0, 200);
34
34
  try {
35
35
  const osc9 = `\x1B]9;${safeTitle}: ${safeBody}\x07`;
36
36
  let coordinatorSession;
@@ -47,7 +47,7 @@ function sendDesktopNotification(title, body, sessionScope) {
47
47
  } catch {
48
48
  }
49
49
  if (process.platform === "linux") {
50
- execSync(`notify-send "${safeTitle}" "${safeBody}"`, {
50
+ execFileSync("notify-send", [safeTitle, safeBody], {
51
51
  timeout: DESKTOP_TIMEOUT_MS,
52
52
  stdio: "ignore"
53
53
  });
@@ -1,56 +1,128 @@
1
- import {
2
- isExploreMode
3
- } from "./chunk-PVYR4FCQ.js";
4
1
  import {
5
2
  sendIntercom,
6
3
  updateTaskStatus
7
- } from "./chunk-KKOLHBNC.js";
8
- import "./chunk-ATKW3SYL.js";
9
- import "./chunk-BJOBR6P2.js";
10
- import "./chunk-6D2PI4QD.js";
11
- import "./chunk-E23LNUWJ.js";
12
- import "./chunk-4JERP7NT.js";
13
- import "./chunk-EIKATSE4.js";
14
- import "./chunk-HNLXMD2V.js";
15
- import "./chunk-RMOBQ6A5.js";
16
- import "./chunk-54QCG45Y.js";
17
- import "./chunk-SSTLTIF3.js";
4
+ } from "./chunk-UP75Z5X7.js";
18
5
  import {
19
6
  recordOrchestrationEventBestEffort
20
- } from "./chunk-WH7XN5ER.js";
21
- import "./chunk-GFDGDFBF.js";
22
- import "./chunk-NGP6LSV2.js";
23
- import "./chunk-2UGGBIDL.js";
24
- import "./chunk-CVYC6DUW.js";
25
- import "./chunk-LLU6WZLK.js";
26
- import "./chunk-HCJCW7X4.js";
27
- import "./chunk-OPU3NYOO.js";
28
- import "./chunk-UU4UINUX.js";
29
- import "./chunk-AFNRE2RV.js";
30
- import "./chunk-3NGZ4PL7.js";
31
- import "./chunk-NLEW62VC.js";
32
- import "./chunk-HYZV25LY.js";
33
- import "./chunk-GJV3WDWM.js";
34
- import "./chunk-MP2AFCGL.js";
7
+ } from "./chunk-2WAVZ5UJ.js";
8
+ import {
9
+ BUSY_PATTERN
10
+ } from "./chunk-GWDSB25T.js";
35
11
  import {
12
+ baseAgentName,
36
13
  getCoordinatorName,
37
14
  isCoordinatorName
38
- } from "./chunk-RWSLVYTE.js";
39
- import "./chunk-2I23RPSI.js";
40
- import "./chunk-BV6GBSRP.js";
41
- import "./chunk-PNQDP3OA.js";
42
- import "./chunk-H73TUI4Y.js";
43
- import "./chunk-7HLWBYH7.js";
44
- import "./chunk-FXU7JOXK.js";
45
- import "./chunk-7SEC2AG5.js";
46
- import "./chunk-PPZOWQHP.js";
47
- import "./chunk-7Y5UDEVM.js";
48
- import "./chunk-SHIICYJW.js";
49
- import "./chunk-MLKGABMK.js";
15
+ } from "./chunk-AOHXREB7.js";
16
+
17
+ // src/lib/play-mode.ts
18
+ import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
19
+ import { join, dirname } from "path";
20
+ import { homedir } from "os";
21
+ var PLAY_MODE_FILE = join(homedir(), ".exe-os", "play-modes.json");
22
+ function resolvePlayModeFile() {
23
+ return process.env.EXE_PLAY_MODE_FILE ?? PLAY_MODE_FILE;
24
+ }
25
+ var DEFAULT_EXPLORE_DURATION_MS = 60 * 60 * 1e3;
26
+ function playModeKey(agentId, sessionScope) {
27
+ return `${agentId}:${sessionScope}`;
28
+ }
29
+ function readStore() {
30
+ try {
31
+ const filePath = resolvePlayModeFile();
32
+ if (!existsSync(filePath)) return {};
33
+ const raw = readFileSync(filePath, "utf8");
34
+ return JSON.parse(raw);
35
+ } catch {
36
+ return {};
37
+ }
38
+ }
39
+ function writeStore(store) {
40
+ const filePath = resolvePlayModeFile();
41
+ const dir = dirname(filePath);
42
+ if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
43
+ writeFileSync(filePath, JSON.stringify(store, null, 2), "utf8");
44
+ }
45
+ function setPlayMode(agentId, sessionScope, mode, options = {}) {
46
+ const key = playModeKey(agentId, sessionScope);
47
+ const store = readStore();
48
+ if (mode === "task") {
49
+ delete store[key];
50
+ writeStore(store);
51
+ return {
52
+ mode: "task",
53
+ agentId,
54
+ sessionScope,
55
+ startedAt: (/* @__PURE__ */ new Date()).toISOString(),
56
+ expiresAt: new Date(Date.now() + 1).toISOString()
57
+ // immediate
58
+ };
59
+ }
60
+ const durationMs = options.durationMs ?? DEFAULT_EXPLORE_DURATION_MS;
61
+ const now = /* @__PURE__ */ new Date();
62
+ const entry = {
63
+ mode: "explore",
64
+ agentId,
65
+ sessionScope,
66
+ startedAt: now.toISOString(),
67
+ expiresAt: new Date(now.getTime() + durationMs).toISOString(),
68
+ notes: options.notes
69
+ };
70
+ store[key] = entry;
71
+ writeStore(store);
72
+ return entry;
73
+ }
74
+ function getPlayMode(agentId, sessionScope) {
75
+ const key = playModeKey(agentId, sessionScope);
76
+ const store = readStore();
77
+ const entry = store[key];
78
+ if (!entry) return null;
79
+ if (new Date(entry.expiresAt).getTime() <= Date.now()) {
80
+ delete store[key];
81
+ try {
82
+ writeStore(store);
83
+ } catch {
84
+ }
85
+ return null;
86
+ }
87
+ return entry;
88
+ }
89
+ function isExploreMode(agentId, sessionScope) {
90
+ try {
91
+ const entry = getPlayMode(agentId, sessionScope);
92
+ return entry?.mode === "explore";
93
+ } catch {
94
+ return false;
95
+ }
96
+ }
97
+ function listExploreSessions() {
98
+ try {
99
+ const store = readStore();
100
+ const now = Date.now();
101
+ const active = [];
102
+ let pruned = false;
103
+ for (const [key, entry] of Object.entries(store)) {
104
+ if (new Date(entry.expiresAt).getTime() <= now) {
105
+ delete store[key];
106
+ pruned = true;
107
+ } else {
108
+ active.push(entry);
109
+ }
110
+ }
111
+ if (pruned) {
112
+ try {
113
+ writeStore(store);
114
+ } catch {
115
+ }
116
+ }
117
+ return active;
118
+ } catch {
119
+ return [];
120
+ }
121
+ }
50
122
 
51
123
  // src/lib/task-enforcement.ts
52
124
  import { appendFile, readdir, readFile, writeFile } from "fs/promises";
53
- import { existsSync } from "fs";
125
+ import { existsSync as existsSync2 } from "fs";
54
126
  import path from "path";
55
127
  import os from "os";
56
128
  var TASK_ENFORCEMENT_INTERVAL_MS = 6e4;
@@ -115,7 +187,7 @@ function decideWorkerAction(taskCount, isIdle, nudgeEcho) {
115
187
  function isIdlePane(paneText) {
116
188
  return IDLE_PATTERNS.some((p) => paneText.includes(p));
117
189
  }
118
- var WORKER_BUSY_PATTERN = /[✻✽✶✳·].*…|Running…|• Working|• Ran |• Explored|• Called|esc to interrupt/;
190
+ var WORKER_BUSY_PATTERN = BUSY_PATTERN;
119
191
  function isPaneBusy(paneText) {
120
192
  const tail = paneText.split("\n").map((line) => line.trim()).filter(Boolean).slice(-6).join("\n");
121
193
  return WORKER_BUSY_PATTERN.test(tail);
@@ -204,7 +276,7 @@ function scopeFromEmployeeSession(sessionName) {
204
276
  }
205
277
  async function surfaceStaleDispatchPendingSignals(scopeList, now, thresholdMs = STALE_DISPATCH_PENDING_THRESHOLD_MS) {
206
278
  const dir = dispatchAckDir();
207
- if (!existsSync(dir)) return 0;
279
+ if (!existsSync2(dir)) return 0;
208
280
  const allowedScopes = new Set(scopeList);
209
281
  let surfaced = 0;
210
282
  let files = [];
@@ -220,7 +292,7 @@ async function surfaceStaleDispatchPendingSignals(scopeList, now, thresholdMs =
220
292
  const staleMarkerPath = path.join(dir, `${taskId}.stale`);
221
293
  const ackPath = path.join(dir, `${taskId}.ack`);
222
294
  const failedPath = path.join(dir, `${taskId}.failed`);
223
- if (existsSync(staleMarkerPath) || existsSync(ackPath) || existsSync(failedPath)) continue;
295
+ if (existsSync2(staleMarkerPath) || existsSync2(ackPath) || existsSync2(failedPath)) continue;
224
296
  let signal;
225
297
  try {
226
298
  signal = JSON.parse(await readFile(pendingPath, "utf8"));
@@ -233,7 +305,7 @@ async function surfaceStaleDispatchPendingSignals(scopeList, now, thresholdMs =
233
305
  const sessionScope = signalScope ?? (scopeList.length === 1 ? scopeList[0] : null);
234
306
  if (allowedScopes.size > 0 && sessionScope && !allowedScopes.has(sessionScope)) continue;
235
307
  try {
236
- const { writeNotification } = await import("./notifications-DWXV7SVL.js");
308
+ const { writeNotification } = await import("./notifications-4UT53CDG.js");
237
309
  await writeNotification({
238
310
  agentId: getCoordinatorName(),
239
311
  agentRole: "COO",
@@ -296,12 +368,20 @@ async function transitionCompletedDelegatedParents(client, scopeList, now) {
296
368
  await updateTaskStatus({
297
369
  taskId: parentId,
298
370
  status: "needs_review",
299
- result: "All delegated child tasks are complete; parent rolled up for review by task enforcement."
371
+ // Blocker 4 (liveness-hardening): this is an AUTOMATED rollup. If the
372
+ // parent already carries a real deliverable in `result`, preserve it —
373
+ // the rollup string is only a fallback for an empty result. Atomic in SQL,
374
+ // so a concurrently-written deliverable is never clobbered.
375
+ result: "All delegated child tasks are complete; parent rolled up for review by task enforcement.",
376
+ preserveResultIfPresent: true
300
377
  });
301
378
  } catch {
302
379
  await client.execute({
303
- sql: `UPDATE tasks SET status = 'needs_review', updated_at = ? WHERE id = ? AND status IN ('open', 'in_progress')`,
304
- args: [nowIso, parentId]
380
+ sql: `UPDATE tasks SET status = 'needs_review',
381
+ result = CASE WHEN result IS NULL OR trim(result, char(32)||char(9)||char(10)||char(13)) = '' THEN ? ELSE result END,
382
+ updated_at = ?
383
+ WHERE id = ? AND status IN ('open', 'in_progress')`,
384
+ args: ["All delegated child tasks are complete; parent rolled up for review by task enforcement.", nowIso, parentId]
305
385
  });
306
386
  }
307
387
  transitioned++;
@@ -365,7 +445,8 @@ async function runTaskEnforcementTick(deps) {
365
445
  const allowedScope = hasScopeRestriction && deps.scopeFilter.args.length > 0 ? String(deps.scopeFilter.args[deps.scopeFilter.args.length - 1]) : null;
366
446
  for (const session of sessions) {
367
447
  if (!session.includes("-")) continue;
368
- const agentName = session.split("-")[0]?.replace(/\d+$/, "");
448
+ const rawAgent = session.split("-")[0];
449
+ const agentName = rawAgent ? baseAgentName(rawAgent, employees) : void 0;
369
450
  if (!agentName) continue;
370
451
  if (allowedScope) {
371
452
  const sessionSuffix = session.slice(session.indexOf("-") + 1);
@@ -581,7 +662,7 @@ async function runTaskEnforcementTick(deps) {
581
662
  );
582
663
  }
583
664
  }
584
- if (processedAnyEmployee && deps.reviewerSpawn) {
665
+ if (processedAnyEmployee && (deps.reviewerSpawn || deps.reviewerNudge)) {
585
666
  try {
586
667
  const scopeList = allowedScope ? [...processedScopes].filter((s) => s === allowedScope) : [...processedScopes];
587
668
  const reviewerRows = scopeList.length === 0 ? { rows: [] } : await client.execute({
@@ -597,15 +678,33 @@ async function runTaskEnforcementTick(deps) {
597
678
  const reviewerName = String(row.reviewer ?? "");
598
679
  const sessionScope = row.session_scope ? String(row.session_scope) : null;
599
680
  if (!reviewerName || !sessionScope) continue;
600
- if (isCoordinatorName(reviewerName, employees)) {
681
+ const isCoord = isCoordinatorName(reviewerName, employees);
682
+ const reviewerSession = isCoord ? sessionScope : `${reviewerName}-${sessionScope}`;
683
+ if (liveSessionSet.has(reviewerSession)) {
684
+ if (deps.reviewerNudge) {
685
+ try {
686
+ deps.reviewerNudge(reviewerSession, sessionScope);
687
+ process.stderr.write(
688
+ `[exed] Reviewer wake: nudged live ${reviewerSession} (has needs_review tasks)
689
+ `
690
+ );
691
+ } catch (nudgeErr) {
692
+ process.stderr.write(
693
+ `[exed] Reviewer wake error for ${reviewerSession}: ${nudgeErr instanceof Error ? nudgeErr.message : String(nudgeErr)}
694
+ `
695
+ );
696
+ }
697
+ }
698
+ continue;
699
+ }
700
+ if (isCoord) {
601
701
  process.stderr.write(
602
- `[exed] Reviewer auto-spawn: skipping ${reviewerName} (coordinator, not dispatchable)
702
+ `[exed] Reviewer auto-spawn: skipping ${reviewerName} (coordinator, no live session to nudge)
603
703
  `
604
704
  );
605
705
  continue;
606
706
  }
607
- const reviewerSession = `${reviewerName}-${sessionScope}`;
608
- if (liveSessionSet.has(reviewerSession)) continue;
707
+ if (!deps.reviewerSpawn) continue;
609
708
  try {
610
709
  const result = deps.reviewerSpawn(reviewerName, sessionScope);
611
710
  if (!result) continue;
@@ -677,28 +776,33 @@ async function runTaskEnforcementTick(deps) {
677
776
  payload: { sessionCount: sessions.length, processedSessions, nudgesSent }
678
777
  });
679
778
  }
779
+
680
780
  export {
681
- IDLE_PATTERNS,
781
+ DEFAULT_EXPLORE_DURATION_MS,
782
+ setPlayMode,
783
+ getPlayMode,
784
+ listExploreSessions,
785
+ TASK_ENFORCEMENT_INTERVAL_MS,
786
+ TASK_ENFORCEMENT_DEBOUNCE_MS,
682
787
  MANAGER_GRACE_PERIOD_MS,
683
- MANAGER_ROLES,
684
- MCP_ZOMBIE_PATTERNS,
685
- NUDGE_ECHO_PATTERNS,
686
- STALE_DISPATCH_PENDING_THRESHOLD_MS,
687
788
  STUCK_TASK_THRESHOLD_MS,
688
- TASK_ENFORCEMENT_DEBOUNCE_MS,
689
- TASK_ENFORCEMENT_INTERVAL_MS,
690
- _resetNudgeState,
789
+ IDLE_PATTERNS,
790
+ NUDGE_ECHO_PATTERNS,
791
+ MCP_ZOMBIE_PATTERNS,
792
+ MANAGER_ROLES,
691
793
  decideManagerAction,
692
794
  decideWorkerAction,
693
- findStuckTasks,
694
- isCurrentlyIdle,
695
795
  isIdlePane,
696
- isMcpZombiePane,
697
- isNudgeEcho,
698
796
  isPaneBusy,
699
797
  isWorkerPaneIdle,
700
- runTaskEnforcementTick,
798
+ isCurrentlyIdle,
799
+ isNudgeEcho,
800
+ isMcpZombiePane,
701
801
  sendNudge,
802
+ _resetNudgeState,
803
+ STALE_DISPATCH_PENDING_THRESHOLD_MS,
702
804
  surfaceStaleDispatchPendingSignals,
703
- transitionCompletedDelegatedParents
805
+ transitionCompletedDelegatedParents,
806
+ findStuckTasks,
807
+ runTaskEnforcementTick
704
808
  };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  listReminders
3
- } from "./chunk-PVIH3ZGV.js";
3
+ } from "./chunk-UUEKJDK6.js";
4
4
 
5
5
  // src/mcp/tools/list-reminders.ts
6
6
  import { z } from "zod";
@@ -23,8 +23,9 @@ function registerListReminders(server) {
23
23
  }
24
24
  const lines = reminders.map((r) => {
25
25
  const due = r.dueDate ? ` (due: ${r.dueDate})` : "";
26
+ const push = r.dailyPush ? ` (daily push: ${r.dailyPush})` : "";
26
27
  const done = r.completedAt ? " [DONE]" : "";
27
- return `\u2022 ${r.text}${due}${done} [id: ${r.id.slice(0, 8)}]`;
28
+ return `\u2022 ${r.text}${due}${push}${done} [id: ${r.id.slice(0, 8)}]`;
28
29
  });
29
30
  return {
30
31
  content: [{ type: "text", text: lines.join("\n") }]
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  extractSemanticText
3
- } from "./chunk-YIIME2OW.js";
3
+ } from "./chunk-YLXTKI6M.js";
4
4
  import {
5
5
  detectError
6
6
  } from "./chunk-AHMUF6RO.js";
7
7
  import {
8
8
  redactSecrets
9
- } from "./chunk-RP5GETX5.js";
9
+ } from "./chunk-4QCFFW2H.js";
10
10
  import {
11
11
  getProjectName
12
12
  } from "./chunk-OPU3NYOO.js";