@askexenow/exe-os 0.9.342 → 0.9.344

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 (380) hide show
  1. package/dist/{active-agent-PVGE57FY.js → active-agent-WXLJG2WA.js} +5 -5
  2. package/dist/{active-agent-TNIO6IY3.js → active-agent-YZH3F7NG.js} +5 -5
  3. package/dist/{agentic-ontology-3FXYMHKW.js → agentic-ontology-UH556ULS.js} +1 -1
  4. package/dist/assets/com.askexe.exed.plist +3 -5
  5. package/dist/{backfill-gate-65LSYVE5.js → backfill-gate-UCBL6Q5U.js} +2 -2
  6. package/dist/{backfill-metadata-ZSMZC45J.js → backfill-metadata-7WFF4Q45.js} +6 -6
  7. package/dist/{background-jobs-EXR5RVGG.js → background-jobs-QK7NLJ4P.js} +2 -2
  8. package/dist/{backup-verify-3Y2FHGZU.js → backup-verify-EUMJVTMQ.js} +3 -3
  9. package/dist/{behaviors-KYRB3NGJ.js → behaviors-GDR3P3XF.js} +7 -7
  10. package/dist/bin/age-ontology-load.js +2 -2
  11. package/dist/bin/agentic-ontology-backfill.js +8 -8
  12. package/dist/bin/agentic-reflection-backfill.js +9 -9
  13. package/dist/bin/agentic-semantic-label.js +8 -8
  14. package/dist/bin/backfill-conversations.js +8 -8
  15. package/dist/bin/backfill-responses.js +8 -8
  16. package/dist/bin/backfill-vectors.js +17 -17
  17. package/dist/bin/bulk-sync-postgres.js +16 -16
  18. package/dist/bin/cc-doctor.js +9 -9
  19. package/dist/bin/cleanup-stale-review-tasks.js +20 -19
  20. package/dist/bin/cli.js +75 -61
  21. package/dist/bin/daemon-restart-handoff.js +27 -0
  22. package/dist/bin/deferred-daemon-restart.js +121 -93
  23. package/dist/bin/exe-agent-config.js +5 -5
  24. package/dist/bin/exe-agent.js +10 -10
  25. package/dist/bin/exe-assign.js +10 -10
  26. package/dist/bin/exe-boot.js +268 -195
  27. package/dist/bin/exe-call.js +7 -7
  28. package/dist/bin/exe-cloud.js +17 -17
  29. package/dist/bin/exe-config-dump.js +5 -5
  30. package/dist/bin/exe-dispatch.js +20 -19
  31. package/dist/bin/exe-doctor.js +8 -8
  32. package/dist/bin/exe-export-behaviors.js +11 -11
  33. package/dist/bin/exe-forget.js +10 -10
  34. package/dist/bin/exe-gateway.js +9 -9
  35. package/dist/bin/exe-grant.js +4 -4
  36. package/dist/bin/exe-healthcheck.js +9 -9
  37. package/dist/bin/exe-heartbeat.js +76 -20
  38. package/dist/bin/exe-kill.js +25 -24
  39. package/dist/bin/exe-launch-agent.js +46 -31
  40. package/dist/bin/exe-memory-reads.js +6 -6
  41. package/dist/bin/exe-new-employee.js +11 -11
  42. package/dist/bin/exe-os-mcp-proxy.js +365 -0
  43. package/dist/bin/exe-pending-messages.js +21 -20
  44. package/dist/bin/exe-pending-notifications.js +20 -19
  45. package/dist/bin/exe-pending-reviews.js +20 -19
  46. package/dist/bin/exe-rename.js +7 -7
  47. package/dist/bin/exe-review.js +24 -23
  48. package/dist/bin/exe-search-quality.js +1 -1
  49. package/dist/bin/exe-search.js +7 -7
  50. package/dist/bin/exe-session-cleanup.js +23 -22
  51. package/dist/bin/exe-settings.js +17 -17
  52. package/dist/bin/exe-start-codex.js +43 -21
  53. package/dist/bin/exe-start-opencode.js +10 -10
  54. package/dist/bin/exe-status.js +21 -20
  55. package/dist/bin/exe-support.js +4 -4
  56. package/dist/bin/exe-team.js +5 -5
  57. package/dist/bin/git-sweep.js +21 -20
  58. package/dist/bin/graph-backfill.js +9 -9
  59. package/dist/bin/graph-export.js +9 -9
  60. package/dist/bin/import-history.js +11 -11
  61. package/dist/bin/install-launchd.js +3 -1
  62. package/dist/bin/install.js +105 -104
  63. package/dist/bin/intercom-check.js +4 -4
  64. package/dist/bin/mcp-sessions.js +2 -2
  65. package/dist/bin/orchestration-metrics.js +6 -6
  66. package/dist/bin/postgres-agentic-reflection-backfill.js +4 -4
  67. package/dist/bin/postgres-agentic-semantic-backfill.js +3 -3
  68. package/dist/bin/pre-publish.js +1 -1
  69. package/dist/bin/reconcile-backlog.js +2 -2
  70. package/dist/bin/registry-proxy.js +1 -1
  71. package/dist/bin/scan-tasks.js +20 -19
  72. package/dist/bin/setup.js +3 -3
  73. package/dist/bin/shard-migrate.js +7 -7
  74. package/dist/bin/stack-update.js +5 -5
  75. package/dist/bin/vps-health-gate.js +1 -1
  76. package/dist/{boot-generation-BL2ISK4U.js → boot-generation-2IIJMJ7E.js} +5 -5
  77. package/dist/{boot-review-sections-DBMQJT5N.js → boot-review-sections-3DJFA42B.js} +19 -18
  78. package/dist/{branch-hygiene-TZWK6QCF.js → branch-hygiene-L3RV6UWM.js} +1 -1
  79. package/dist/{branding-DVXBGVDH.js → branding-TZIVBXQ5.js} +2 -2
  80. package/dist/{capability-cards-DN5UIKVN.js → capability-cards-FIEIK5PH.js} +4 -4
  81. package/dist/{capacity-monitor-ZG5GGFR2.js → capacity-monitor-7RIEIQBE.js} +21 -20
  82. package/dist/{catchup-brief-D6HH6DWS.js → catchup-brief-ZYYRDIKY.js} +23 -22
  83. package/dist/{chunk-P5HIWY2E.js → chunk-2JFGW62N.js} +1 -1
  84. package/dist/{chunk-USSB56WK.js → chunk-2T6WDJV3.js} +1 -1
  85. package/dist/{chunk-EUS4QUKP.js → chunk-2UWYIZEN.js} +1 -1
  86. package/dist/{chunk-4ZCD2UWW.js → chunk-3EUIJF5U.js} +3 -3
  87. package/dist/{chunk-CWXVH7WV.js → chunk-3NVTC4RA.js} +1 -1
  88. package/dist/{chunk-KGWRTRKC.js → chunk-42GV6K3X.js} +1 -1
  89. package/dist/chunk-4EI5AHHR.js +37 -0
  90. package/dist/{chunk-HV4KESRY.js → chunk-4I2BWW2Z.js} +1 -1
  91. package/dist/{chunk-YTCFACP4.js → chunk-4KNPF6RI.js} +276 -169
  92. package/dist/{chunk-H6BV5TKD.js → chunk-4XIHTE2R.js} +6 -6
  93. package/dist/{sweep-budget-WB2FKPYN.js → chunk-4YXTASUU.js} +13 -3
  94. package/dist/{chunk-2KZNGDSW.js → chunk-54XBWX2U.js} +1 -1
  95. package/dist/{chunk-FPFPLPUY.js → chunk-5BQMRB3E.js} +5 -5
  96. package/dist/{chunk-K7KFGDWF.js → chunk-5IGNNFST.js} +1 -1
  97. package/dist/{chunk-QDGZJ653.js → chunk-5SXVPXTN.js} +4 -4
  98. package/dist/{chunk-RHWZUUS4.js → chunk-62F3CDXB.js} +5 -5
  99. package/dist/{chunk-XHK3FS3W.js → chunk-6777GKUZ.js} +1 -1
  100. package/dist/{chunk-EQHQF5IM.js → chunk-6L6SXVTP.js} +32 -16
  101. package/dist/{chunk-3SW4OEHB.js → chunk-6NUCIIDR.js} +1 -1
  102. package/dist/{chunk-RAXVPNMR.js → chunk-7IGFMHNK.js} +1 -1
  103. package/dist/{chunk-F5O7V7UK.js → chunk-A7UEJSDR.js} +1 -1
  104. package/dist/{chunk-MOPUCPXK.js → chunk-APRVAUOR.js} +1 -0
  105. package/dist/{chunk-2WAVZ5UJ.js → chunk-AQ2TNSJ3.js} +1 -1
  106. package/dist/{chunk-WMESXBJM.js → chunk-BEDUCD7I.js} +127 -30
  107. package/dist/{chunk-7V4JADD6.js → chunk-BPQBKR2V.js} +3 -3
  108. package/dist/{chunk-Z6RSN7KS.js → chunk-BUP7NUPL.js} +30 -8
  109. package/dist/{chunk-TLT7NZCW.js → chunk-BW74OUFZ.js} +3 -3
  110. package/dist/{chunk-VPZHJCKW.js → chunk-CHFWJS7F.js} +2 -2
  111. package/dist/{chunk-UEA3LXOB.js → chunk-CITV2SCP.js} +1 -1
  112. package/dist/{chunk-VSRPS3J7.js → chunk-CNLY3TLP.js} +13 -13
  113. package/dist/{chunk-L2R3LN2P.js → chunk-DF2VTPZE.js} +1 -1
  114. package/dist/{chunk-PPCDBE6Z.js → chunk-DKJFW26S.js} +1 -1
  115. package/dist/{chunk-SQKXKV2Y.js → chunk-DROR4FYJ.js} +2 -2
  116. package/dist/{chunk-G5T6KDG4.js → chunk-DWECQ5VL.js} +1 -1
  117. package/dist/{chunk-I26FWCSP.js → chunk-EA47YVXG.js} +183 -2
  118. package/dist/{chunk-N7QJKQMX.js → chunk-EBZAEAY3.js} +11 -11
  119. package/dist/{chunk-KW2SD2FL.js → chunk-EQY2SN2P.js} +2 -2
  120. package/dist/{chunk-VRAQTFD6.js → chunk-EUUYJO3E.js} +1 -1
  121. package/dist/{chunk-LU2FALL6.js → chunk-FM5QLDG6.js} +28 -4
  122. package/dist/chunk-FQOLG74E.js +144 -0
  123. package/dist/chunk-FUQ2OSDV.js +129 -0
  124. package/dist/{chunk-4VSV5P4D.js → chunk-FWR3BLNB.js} +13 -5
  125. package/dist/{chunk-QOO5RW3K.js → chunk-GMXNBQC3.js} +9 -3
  126. package/dist/{chunk-AJYCFKJR.js → chunk-GWVOVGOB.js} +1 -1
  127. package/dist/{chunk-WZHZCDDO.js → chunk-GXPJELD7.js} +21 -0
  128. package/dist/{chunk-UUEKJDK6.js → chunk-HHG4YUJ5.js} +2 -2
  129. package/dist/{chunk-QRYVCDWS.js → chunk-HSUP2KKZ.js} +2 -2
  130. package/dist/{chunk-H7I47RS5.js → chunk-IBTKZEK4.js} +115 -3
  131. package/dist/{chunk-GG5NDQNN.js → chunk-IGSX4CFJ.js} +14 -20
  132. package/dist/{chunk-PQIDGXSG.js → chunk-IHIT5RCW.js} +2 -2
  133. package/dist/{chunk-KQ4Z2G24.js → chunk-JKOEOHOD.js} +32 -1
  134. package/dist/{chunk-GDIJE6D7.js → chunk-JPP2NKNI.js} +1 -1
  135. package/dist/{chunk-UP75Z5X7.js → chunk-JZMFWFNF.js} +154 -73
  136. package/dist/{chunk-F27XXN6C.js → chunk-KOFH2Z3S.js} +1 -1
  137. package/dist/{chunk-CNVBKDEY.js → chunk-L35RC5GC.js} +699 -383
  138. package/dist/{chunk-L4A5DL6Z.js → chunk-L4PWTC3Q.js} +3 -3
  139. package/dist/{chunk-KADUJ7PE.js → chunk-L5L3WWNM.js} +59 -20
  140. package/dist/{chunk-7CTRGNLW.js → chunk-LAGMVQUT.js} +2 -2
  141. package/dist/{chunk-UNXQBELK.js → chunk-LLJU2CZQ.js} +1 -1
  142. package/dist/chunk-LUQ57SRM.js +127 -0
  143. package/dist/{chunk-EV46QTD3.js → chunk-LWEQXRYE.js} +1 -1
  144. package/dist/{chunk-JLZ4RYSD.js → chunk-MBMOYDUD.js} +2 -2
  145. package/dist/{chunk-X33NYQYJ.js → chunk-MJHXOVM2.js} +2 -2
  146. package/dist/{chunk-4J4PMPXZ.js → chunk-MKF7VY7H.js} +1 -1
  147. package/dist/{chunk-MR6LHP4F.js → chunk-N3OZA3HT.js} +1 -1
  148. package/dist/{chunk-BUCXNV32.js → chunk-NGRY2UKC.js} +1 -1
  149. package/dist/{chunk-O5V57XYE.js → chunk-NSPHWA4W.js} +1 -1
  150. package/dist/{chunk-5ERDIOV3.js → chunk-NVCFWR5I.js} +2 -2
  151. package/dist/{chunk-6WQ3NNCE.js → chunk-NYVO4O24.js} +3 -3
  152. package/dist/{chunk-PDWS3E22.js → chunk-OBADBSW4.js} +6 -6
  153. package/dist/{chunk-NX5INHHG.js → chunk-ODATAUFD.js} +1 -1
  154. package/dist/{chunk-G4RGKBCA.js → chunk-OIEWB4JN.js} +13 -3
  155. package/dist/{chunk-OZEBAGKR.js → chunk-ONZZF5EQ.js} +31 -13
  156. package/dist/chunk-PDTJHPN3.js +285 -0
  157. package/dist/{chunk-6XWTQUO4.js → chunk-PHBE5QNB.js} +19 -8
  158. package/dist/chunk-PLFLQLF4.js +76 -0
  159. package/dist/{chunk-6CH3TPHR.js → chunk-PT2JRHTH.js} +4 -4
  160. package/dist/{chunk-JMYHW3AL.js → chunk-PTVLXA3D.js} +2 -2
  161. package/dist/chunk-PWRC5XZO.js +161 -0
  162. package/dist/{chunk-ASAFVDVR.js → chunk-Q3CZKCCC.js} +1 -1
  163. package/dist/{chunk-C5QAPURN.js → chunk-Q6LDI5JN.js} +1 -1
  164. package/dist/{chunk-5TY4FPH6.js → chunk-QCP3KEPZ.js} +1 -1
  165. package/dist/{chunk-JPUZPAAF.js → chunk-REIDGEAX.js} +3 -3
  166. package/dist/{chunk-YCANDMI2.js → chunk-RGJWTSXB.js} +1 -1
  167. package/dist/{chunk-CE7F6RHG.js → chunk-RT6HMUJF.js} +11 -11
  168. package/dist/{chunk-HJ447YER.js → chunk-S3FIQCSM.js} +14 -6
  169. package/dist/{chunk-MKYFAKDW.js → chunk-SHMDFBG7.js} +4 -4
  170. package/dist/chunk-SNJLKMCY.js +50 -0
  171. package/dist/{chunk-V3EEVY4L.js → chunk-ST4LSFXH.js} +1 -1
  172. package/dist/{chunk-PWUFMX75.js → chunk-T4DCS5J5.js} +11 -5
  173. package/dist/{chunk-R2NN3JKH.js → chunk-TKUIHTQF.js} +5 -5
  174. package/dist/{chunk-JGIPOUIK.js → chunk-TN4M6SRF.js} +3 -3
  175. package/dist/{chunk-OTF44GXL.js → chunk-TSP6GPAK.js} +2 -2
  176. package/dist/{chunk-XZXBB3TN.js → chunk-UE6JIJOO.js} +2 -2
  177. package/dist/{chunk-NN2B2QKU.js → chunk-UVMYLXOD.js} +1 -1
  178. package/dist/{chunk-S7QUM2UK.js → chunk-UVY7DMQN.js} +54 -2
  179. package/dist/{chunk-QYZJHTNE.js → chunk-VCOLV4CR.js} +9 -9
  180. package/dist/{chunk-KWZMQACA.js → chunk-VL2ARD7K.js} +3 -3
  181. package/dist/{chunk-2ZYO73KO.js → chunk-VXBJHPLN.js} +1 -1
  182. package/dist/{chunk-QQ4E2RYW.js → chunk-WIXWS55C.js} +10 -10
  183. package/dist/{chunk-IBYL4DHM.js → chunk-X4Z5DPOC.js} +22 -2
  184. package/dist/{chunk-UUQBZPJJ.js → chunk-X64GUUL4.js} +1 -1
  185. package/dist/{chunk-OLMQ4UOF.js → chunk-XIUDWV5X.js} +209 -20
  186. package/dist/{chunk-MZM6EJCU.js → chunk-XL24STS2.js} +4 -4
  187. package/dist/{chunk-JTBIS4R5.js → chunk-XO4V4HFL.js} +1 -1
  188. package/dist/{chunk-4CMVFVFC.js → chunk-XOC3Y4TF.js} +4 -4
  189. package/dist/{chunk-RACAOE2Z.js → chunk-XOMKTUZI.js} +9 -9
  190. package/dist/{chunk-TTCUG2CF.js → chunk-YEHLGSMN.js} +2 -2
  191. package/dist/{chunk-HA5R6USD.js → chunk-YHESKZNJ.js} +1 -1
  192. package/dist/{chunk-AOHXREB7.js → chunk-ZA7WHPN6.js} +189 -70
  193. package/dist/{chunk-GJ26DULE.js → chunk-ZJSP736C.js} +2 -2
  194. package/dist/{chunk-GBTTBXAF.js → chunk-ZOBWQPIU.js} +6 -6
  195. package/dist/{chunk-NXUSDL37.js → chunk-ZVHKVVKG.js} +1 -1
  196. package/dist/{chunk-X2Q5NLUL.js → chunk-ZVIZQSPE.js} +1 -1
  197. package/dist/{chunk-HAF2DJYV.js → chunk-ZW2XGLWY.js} +3 -3
  198. package/dist/{cleanup-graph-garbage-XWUFAMFO.js → cleanup-graph-garbage-JAHNAACN.js} +8 -8
  199. package/dist/cloud-sync-shutdown-3CXZBBZJ.js +44 -0
  200. package/dist/cloud-sync-state-DJRZORFI.js +17 -0
  201. package/dist/{co-activation-ZCHPLLP6.js → co-activation-PGWGMP4X.js} +4 -4
  202. package/dist/{co-occurrence-KG3LKALN.js → co-occurrence-X7FI7K6K.js} +6 -6
  203. package/dist/{code-context-index-WSOJQ72R.js → code-context-index-5PY2MI55.js} +8 -4
  204. package/dist/{conversation-entity-extractor-D3EFTLT4.js → conversation-entity-extractor-FPAMTL3C.js} +2 -2
  205. package/dist/{conversation-wiki-populator-WQN3IUU6.js → conversation-wiki-populator-U2FKQEWH.js} +1 -1
  206. package/dist/{crdt-sync-4PFGPZXV.js → crdt-sync-ZIRKX6ZT.js} +1 -1
  207. package/dist/{crm-webhook-II7Z45Q6.js → crm-webhook-WJ2TNNNX.js} +2 -2
  208. package/dist/{cto-delegation-gate-JWWOJPNC.js → cto-delegation-gate-YYRGGBU2.js} +19 -18
  209. package/dist/{daemon-auth-3FEAHFWC.js → daemon-auth-GNT27BDR.js} +2 -2
  210. package/dist/daemon-health-log-OBHLBKVW.js +15 -0
  211. package/dist/{daemon-orchestration-FX4XZDR5.js → daemon-orchestration-LSJELXQY.js} +24 -23
  212. package/dist/{daemon-ready-4JTSFKAY.js → daemon-ready-MFLBXJ5J.js} +1 -1
  213. package/dist/{daemon-ready-signal-LPAZWQOV.js → daemon-ready-signal-TVCPSG7J.js} +3 -1
  214. package/dist/{daemon-restart-circuit-breaker-PEGEIP6H.js → daemon-restart-circuit-breaker-5V6B6NLS.js} +1 -1
  215. package/dist/{daemon-restart-report-F3P5AQS4.js → daemon-restart-report-QDRGKLL6.js} +1 -1
  216. package/dist/{db-restore-events-MQ2DBGEQ.js → db-restore-events-QYGUSP7Q.js} +1 -1
  217. package/dist/db-verify-stamp-YTRPEKZ5.js +15 -0
  218. package/dist/{doc-graph-extractor-F6ODFIID.js → doc-graph-extractor-M72TUSHE.js} +6 -6
  219. package/dist/{documents-23WX2FPQ.js → documents-V2TR7SKO.js} +10 -10
  220. package/dist/{dreaming-NWD22UQ5.js → dreaming-K2AUXA6A.js} +20 -19
  221. package/dist/{exe-drift-CW72FBGE.js → exe-drift-APFIZLEK.js} +5 -5
  222. package/dist/{exe-export-AUJ7CV7G.js → exe-export-IYSJCRIU.js} +9 -9
  223. package/dist/{exe-import-JX4I52VE.js → exe-import-EGXUCUPY.js} +9 -9
  224. package/dist/{exe-key-2N6LY2BU.js → exe-key-ZWPFMA6Z.js} +91 -89
  225. package/dist/{exe-org-X4CSNCKS.js → exe-org-HP552ZGP.js} +2 -2
  226. package/dist/{exe-snapshot-XZ7FVCYZ.js → exe-snapshot-GCKN6LOM.js} +23 -22
  227. package/dist/fast-db-init-NBMBQ7MC.js +9 -0
  228. package/dist/{founder-context-7L3CFPYN.js → founder-context-A2BARML6.js} +3 -3
  229. package/dist/gateway/index.js +13 -13
  230. package/dist/{git-staleness-CI2R4QOJ.js → git-staleness-OEGYSCTM.js} +4 -4
  231. package/dist/{global-procedures-XQX3LUH6.js → global-procedures-QJ2XVVLH.js} +6 -6
  232. package/dist/{graph-auto-extract-OURWMGBS.js → graph-auto-extract-NBVCQVWC.js} +6 -6
  233. package/dist/{graph-rag-JZZAB7PC.js → graph-rag-WAK2BRJH.js} +2 -2
  234. package/dist/{hook-integrity-XY47IM7G.js → hook-integrity-FYU2AFKC.js} +1 -1
  235. package/dist/{hook-prefetch-PHRRKY4C.js → hook-prefetch-EM7B2UR3.js} +20 -19
  236. package/dist/hooks/bug-report-worker.js +24 -23
  237. package/dist/hooks/codex-stop-task-finalizer.js +43 -25
  238. package/dist/hooks/commit-complete.js +23 -22
  239. package/dist/hooks/error-recall.js +13 -13
  240. package/dist/hooks/exe-heartbeat-hook.js +6 -6
  241. package/dist/hooks/ingest-worker.js +7 -7
  242. package/dist/hooks/ingest.js +22 -22
  243. package/dist/hooks/instructions-loaded.js +7 -7
  244. package/dist/hooks/manifest.json +20 -20
  245. package/dist/hooks/notification.js +7 -7
  246. package/dist/hooks/post-compact.js +22 -21
  247. package/dist/hooks/post-tool-combined.js +24 -11
  248. package/dist/hooks/pre-compact.js +23 -22
  249. package/dist/hooks/pre-tool-use.js +28 -27
  250. package/dist/hooks/prompt-submit.js +54 -41
  251. package/dist/hooks/session-end.js +28 -27
  252. package/dist/hooks/session-start.js +17 -17
  253. package/dist/hooks/stop.js +29 -28
  254. package/dist/hooks/subagent-stop.js +52 -21
  255. package/dist/hooks/summary-worker.js +28 -27
  256. package/dist/index.js +31 -30
  257. package/dist/{installer-L7EVH5U5.js → installer-CFMBHHKM.js} +8 -8
  258. package/dist/{installer-JND3RJ6Q.js → installer-GGCNURPW.js} +8 -8
  259. package/dist/{installer-G3JAO3NT.js → installer-H2ZKIXNP.js} +8 -8
  260. package/dist/{intercom-queue-ZFEQALR3.js → intercom-queue-WHU3NA4Q.js} +19 -18
  261. package/dist/{key-backup-status-LOSMVATJ.js → key-backup-status-WECD4KLS.js} +1 -1
  262. package/dist/lib/agent-config.js +2 -2
  263. package/dist/lib/cloud-sync.js +18 -16
  264. package/dist/lib/config.js +1 -1
  265. package/dist/lib/consolidation.js +9 -9
  266. package/dist/lib/database.js +14 -6
  267. package/dist/{db-backup-W2QFSYQC.js → lib/db-backup.js} +16 -4
  268. package/dist/lib/db-checkpoint-worker.js +57 -0
  269. package/dist/lib/db-daemon-client.js +4 -4
  270. package/dist/lib/db-write-worker-client.js +17 -0
  271. package/dist/lib/db-write-worker.js +216 -0
  272. package/dist/lib/db.js +14 -6
  273. package/dist/lib/device-registry.js +2 -2
  274. package/dist/lib/embed-worker.js +1 -1
  275. package/dist/lib/embedder.js +4 -4
  276. package/dist/lib/employee-templates.js +7 -7
  277. package/dist/lib/employees.js +4 -4
  278. package/dist/lib/exe-daemon-client.js +3 -3
  279. package/dist/lib/exe-daemon.js +1168 -398
  280. package/dist/lib/hybrid-search.js +7 -7
  281. package/dist/lib/identity.js +4 -4
  282. package/dist/lib/license.js +3 -3
  283. package/dist/lib/messaging.js +20 -19
  284. package/dist/lib/registry-proxy.js +1 -1
  285. package/dist/lib/reminders.js +5 -5
  286. package/dist/lib/schedules.js +7 -7
  287. package/dist/lib/session-registry.js +6 -6
  288. package/dist/lib/skill-learning.js +8 -8
  289. package/dist/lib/status-brief.js +3 -3
  290. package/dist/lib/store.js +6 -6
  291. package/dist/lib/task-router.js +5 -5
  292. package/dist/lib/tasks.js +21 -20
  293. package/dist/lib/tmux-routing.js +19 -18
  294. package/dist/lib/token-spend.js +5 -5
  295. package/dist/{license-gate-QTRQHV4F.js → license-gate-FU5VUYE7.js} +4 -4
  296. package/dist/{license-sync-N3UJFWAW.js → license-sync-BL63T3PA.js} +3 -3
  297. package/dist/mcp/register-tools.js +88 -86
  298. package/dist/mcp/server.js +90 -88
  299. package/dist/mcp/tools/complete-reminder.js +6 -6
  300. package/dist/mcp/tools/create-reminder.js +6 -6
  301. package/dist/mcp/tools/create-task.js +23 -22
  302. package/dist/mcp/tools/deactivate-behavior.js +9 -9
  303. package/dist/mcp/tools/list-reminders.js +6 -6
  304. package/dist/mcp/tools/list-tasks.js +23 -22
  305. package/dist/mcp/tools/send-message.js +22 -21
  306. package/dist/mcp/tools/update-task.js +22 -21
  307. package/dist/{mcp-http-config-BDL36JZ3.js → mcp-http-config-6X6AP2CK.js} +9 -7
  308. package/dist/{mcp-port-config-6HYY6J7K.js → mcp-port-config-PA3W3BJK.js} +7 -1
  309. package/dist/{mcp-session-identity-T7H2EKFQ.js → mcp-session-identity-5OVODESZ.js} +19 -18
  310. package/dist/mcp-session-persist-PS7BIG44.js +62 -0
  311. package/dist/mcp-stale-flag-ZM23XRSJ.js +11 -0
  312. package/dist/{memory-cards-ZRDW7QBX.js → memory-cards-H3BGNJXL.js} +6 -6
  313. package/dist/{memory-graph-extractor-QLXDMHRS.js → memory-graph-extractor-AQRAE5TJ.js} +7 -7
  314. package/dist/{memory-poisoning-defense-HJTXYCWH.js → memory-poisoning-defense-E2V5XSTO.js} +4 -4
  315. package/dist/{memory-pressure-watchdog-HN5X7AVN.js → memory-pressure-watchdog-BWSUJVL6.js} +20 -19
  316. package/dist/{memory-queue-2UOOF27L.js → memory-queue-4IS42XOE.js} +2 -2
  317. package/dist/{memory-queue-client-O5U6F6XP.js → memory-queue-client-R7PJ7IOE.js} +5 -5
  318. package/dist/{memory-reflection-WVNFBJAA.js → memory-reflection-PAA55BXW.js} +4 -4
  319. package/dist/{monitor-grants-E3ELDEWD.js → monitor-grants-7XHXOANT.js} +2 -2
  320. package/dist/{notification-ledger-SZEPGJQ7.js → notification-ledger-CX6OIZ7A.js} +20 -19
  321. package/dist/{notifications-4UT53CDG.js → notifications-R4HDUWL2.js} +19 -18
  322. package/dist/{orchestration-events-WV4NWKZH.js → orchestration-events-W6LW4AD2.js} +5 -5
  323. package/dist/{orchestration-phase-AWBXPO52.js → orchestration-phase-JX4TWS6C.js} +2 -2
  324. package/dist/{orchestrator-UAC3RW2T.js → orchestrator-3W4ZKNEX.js} +21 -20
  325. package/dist/{pipeline-router-LM53NMWJ.js → pipeline-router-E4EZVRQQ.js} +5 -5
  326. package/dist/{plan-limits-2FEY2GOS.js → plan-limits-YSDBXZYI.js} +7 -7
  327. package/dist/{platform-procedures-X5DFJFV7.js → platform-procedures-VDW2R65H.js} +1 -1
  328. package/dist/{project-boot-4NUH5FRU.js → project-boot-MRITBQQP.js} +1 -1
  329. package/dist/{projection-worker-FZ7YSN3G.js → projection-worker-QQW2RVTN.js} +4 -4
  330. package/dist/{prospective-memory-6D2ASWM3.js → prospective-memory-NIZWIZM4.js} +4 -4
  331. package/dist/{push-notifications-U6FIBQRW.js → push-notifications-A46ZXS2Q.js} +2 -2
  332. package/dist/{reranker-GYYRPANK.js → reranker-3C6RUROG.js} +2 -2
  333. package/dist/{retrieval-health-4Z242P3B.js → retrieval-health-HALV3M2U.js} +1 -1
  334. package/dist/review-polling-MOJAI3BZ.js +55 -0
  335. package/dist/runtime/index.js +27 -26
  336. package/dist/{session-events-O3BV56ZX.js → session-events-NTCFPCJV.js} +20 -19
  337. package/dist/{session-kill-telemetry-AELE4JDK.js → session-kill-telemetry-NFKJOQKH.js} +20 -19
  338. package/dist/{session-scope-5EAPUT45.js → session-scope-BINQT6W4.js} +19 -18
  339. package/dist/{setup-wizard-NB6R4QVS.js → setup-wizard-PUA24CMQ.js} +3 -3
  340. package/dist/{shard-manager-35PWFR3B.js → shard-manager-QFUFI6EA.js} +2 -2
  341. package/dist/{skill-refinement-DVSYXBBP.js → skill-refinement-ABFBHUVE.js} +5 -5
  342. package/dist/{stack-update-ATCJFOEK.js → stack-update-CLUGX5NZ.js} +4 -4
  343. package/dist/{steward-gate-3GQ5XKMJ.js → steward-gate-EMKM4LRS.js} +5 -5
  344. package/dist/{support-inbox-4L62P4EP.js → support-inbox-VCJOV6II.js} +4 -4
  345. package/dist/sweep-budget-74FIUNX3.js +17 -0
  346. package/dist/{task-enforcement-IPIZX2MM.js → task-enforcement-FHMDUP7M.js} +20 -19
  347. package/dist/{task-scope-FOIW25HR.js → task-scope-7ZV6UP7R.js} +19 -18
  348. package/dist/{tasks-crud-HBDKE6C5.js → tasks-crud-67ZINIOW.js} +21 -18
  349. package/dist/{tasks-notify-G2U2U2YA.js → tasks-notify-KWCVQCUS.js} +20 -19
  350. package/dist/{tasks-review-27SFX5XN.js → tasks-review-KHGYJ2Y3.js} +19 -18
  351. package/dist/{telemetry-upload-ZOXHRWR5.js → telemetry-upload-44DD2QNW.js} +9 -9
  352. package/dist/{token-budget-5Y4YPDO3.js → token-budget-HM2EUB4W.js} +5 -5
  353. package/dist/{tool-capability-index-VYF5GNJ2.js → tool-capability-index-MUJXMJZQ.js} +1 -1
  354. package/dist/{tool-telemetry-KBXSBDTK.js → tool-telemetry-S6LJIL7X.js} +1 -1
  355. package/dist/tui/App.js +33 -32
  356. package/dist/{tui-data-NLFMBIQI.js → tui-data-75HBG2OG.js} +19 -18
  357. package/dist/{update-support-UVUSZG7R.js → update-support-FXOSSAQ2.js} +16 -16
  358. package/dist/{worker-gate-3KUBAU32.js → worker-gate-F7M24XHO.js} +2 -2
  359. package/dist/{workflow-engine-YITHXZR5.js → workflow-engine-LVNVV2TH.js} +2 -2
  360. package/dist/{worktree-LL62PLQB.js → worktree-IAKAVD7N.js} +8 -6
  361. package/dist/{worktree-sweep-WTK3MTKH.js → worktree-sweep-B4MKSCKY.js} +7 -7
  362. package/package.json +3 -2
  363. package/release-notes.json +63 -23
  364. package/dist/chunk-GIBYNT6W.js +0 -23
  365. package/dist/fast-db-init-4CWHSOOR.js +0 -7
  366. package/dist/review-polling-HXAFJZDA.js +0 -138
  367. package/dist/{chunk-MGGOSFCR.js → chunk-2CCMWJXP.js} +0 -0
  368. package/dist/{chunk-A4DVMPYB.js → chunk-7UMCQQWS.js} +3 -3
  369. /package/dist/{chunk-H73TUI4Y.js → chunk-BBMTVAE3.js} +0 -0
  370. /package/dist/{chunk-JRM4TAGS.js → chunk-DN6HP26X.js} +0 -0
  371. /package/dist/{chunk-KP3U5QGJ.js → chunk-EKWFUXLY.js} +0 -0
  372. /package/dist/{chunk-QIFYLIUF.js → chunk-HP7TB3P2.js} +0 -0
  373. /package/dist/{chunk-NBZL5CGA.js → chunk-MRFM6A4G.js} +0 -0
  374. /package/dist/{core-memory-GAC6EWOQ.js → core-memory-TP43DUIL.js} +0 -0
  375. /package/dist/{entity-boost-NT6UO2Z3.js → entity-boost-2Q4B3H3T.js} +0 -0
  376. /package/dist/{message-queue-client-4EOQRUXW.js → message-queue-client-KJGHJAPD.js} +0 -0
  377. /package/dist/{oauth-server-67YBDP32.js → oauth-server-EV2YHI5J.js} +0 -0
  378. /package/dist/{webhook-pipe-LEXMUQ5B.js → webhook-pipe-CQXXTB2G.js} +0 -0
  379. /package/dist/{wiki-acl-74BLWG6J.js → wiki-acl-3MD443NV.js} +0 -0
  380. /package/dist/{wiki-client-EAN7F5LV.js → wiki-client-TVE6MPKC.js} +0 -0
@@ -1,23 +1,32 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  generateStatusBrief
4
- } from "../chunk-WMESXBJM.js";
4
+ } from "../chunk-BEDUCD7I.js";
5
+ import {
6
+ countTieredReviewReceipts
7
+ } from "../chunk-PDTJHPN3.js";
8
+ import {
9
+ resolveCloudSyncStatus
10
+ } from "../chunk-FUQ2OSDV.js";
11
+ import {
12
+ querySubagentCheckpointCounts
13
+ } from "../chunk-FQOLG74E.js";
5
14
  import {
6
15
  DEFAULT_EXE,
7
16
  getSessionPrompt
8
- } from "../chunk-XHK3FS3W.js";
9
- import "../chunk-GJ26DULE.js";
10
- import "../chunk-EQHQF5IM.js";
17
+ } from "../chunk-6777GKUZ.js";
18
+ import "../chunk-ZJSP736C.js";
19
+ import "../chunk-6L6SXVTP.js";
11
20
  import {
12
21
  initStore
13
- } from "../chunk-VSRPS3J7.js";
22
+ } from "../chunk-CNLY3TLP.js";
14
23
  import "../chunk-CHCA3ZM2.js";
15
24
  import "../chunk-OTVEIJUQ.js";
16
- import "../chunk-6XWTQUO4.js";
25
+ import "../chunk-PHBE5QNB.js";
17
26
  import {
18
27
  cleanupSessionMarkers,
19
28
  writeActiveAgent
20
- } from "../chunk-5ERDIOV3.js";
29
+ } from "../chunk-NVCFWR5I.js";
21
30
  import "../chunk-4QCFFW2H.js";
22
31
  import {
23
32
  cleanupOldNotifications,
@@ -29,32 +38,33 @@ import {
29
38
  resolveExeSession,
30
39
  sessionScopeFilter,
31
40
  updateTaskStatus
32
- } from "../chunk-UP75Z5X7.js";
33
- import "../chunk-L2R3LN2P.js";
34
- import "../chunk-I26FWCSP.js";
35
- import "../chunk-EV46QTD3.js";
41
+ } from "../chunk-JZMFWFNF.js";
42
+ import "../chunk-DF2VTPZE.js";
43
+ import "../chunk-EA47YVXG.js";
44
+ import "../chunk-LWEQXRYE.js";
36
45
  import "../chunk-E23LNUWJ.js";
37
46
  import "../chunk-4JERP7NT.js";
38
47
  import "../chunk-EIKATSE4.js";
39
48
  import {
40
49
  pruneStaleSessions,
41
50
  registerSession
42
- } from "../chunk-KGWRTRKC.js";
51
+ } from "../chunk-42GV6K3X.js";
43
52
  import "../chunk-AD2VCHSS.js";
44
53
  import "../chunk-WOYADZF5.js";
45
54
  import "../chunk-SKGMF2SO.js";
46
- import "../chunk-2WAVZ5UJ.js";
47
- import "../chunk-HA5R6USD.js";
55
+ import "../chunk-AQ2TNSJ3.js";
56
+ import "../chunk-YHESKZNJ.js";
48
57
  import "../chunk-AM7S2TY6.js";
49
- import "../chunk-JGIPOUIK.js";
58
+ import "../chunk-TN4M6SRF.js";
50
59
  import "../chunk-GWDSB25T.js";
60
+ import "../chunk-4YXTASUU.js";
51
61
  import "../chunk-CVYC6DUW.js";
52
- import "../chunk-JLZ4RYSD.js";
53
- import "../chunk-H7I47RS5.js";
62
+ import "../chunk-MBMOYDUD.js";
63
+ import "../chunk-IBTKZEK4.js";
54
64
  import "../chunk-OPU3NYOO.js";
55
- import "../chunk-G4RGKBCA.js";
65
+ import "../chunk-OIEWB4JN.js";
56
66
  import "../chunk-AFNRE2RV.js";
57
- import "../chunk-X2Q5NLUL.js";
67
+ import "../chunk-ZVIZQSPE.js";
58
68
  import "../chunk-NLEW62VC.js";
59
69
  import "../chunk-HYZV25LY.js";
60
70
  import "../chunk-GJV3WDWM.js";
@@ -66,23 +76,23 @@ import {
66
76
  isCoordinatorName,
67
77
  loadEmployees,
68
78
  saveEmployees
69
- } from "../chunk-AOHXREB7.js";
79
+ } from "../chunk-ZA7WHPN6.js";
70
80
  import "../chunk-2I23RPSI.js";
71
- import "../chunk-OLMQ4UOF.js";
81
+ import "../chunk-XIUDWV5X.js";
72
82
  import "../chunk-PNQDP3OA.js";
73
- import "../chunk-H73TUI4Y.js";
74
83
  import "../chunk-7HLWBYH7.js";
84
+ import "../chunk-BBMTVAE3.js";
75
85
  import "../chunk-FXU7JOXK.js";
76
- import "../chunk-O5V57XYE.js";
86
+ import "../chunk-NSPHWA4W.js";
77
87
  import "../chunk-QWVXN224.js";
78
88
  import "../chunk-NGP6LSV2.js";
79
- import "../chunk-PQIDGXSG.js";
80
- import "../chunk-K7KFGDWF.js";
89
+ import "../chunk-IHIT5RCW.js";
90
+ import "../chunk-5IGNNFST.js";
81
91
  import {
82
92
  EXE_AI_DIR,
83
93
  loadConfig,
84
94
  loadConfigSync
85
- } from "../chunk-WZHZCDDO.js";
95
+ } from "../chunk-GXPJELD7.js";
86
96
  import "../chunk-BYTDMAGB.js";
87
97
  import {
88
98
  isMainModule
@@ -128,11 +138,25 @@ async function boot(options) {
128
138
  }
129
139
  const coordinatorEmployee = getCoordinatorEmployee(employees) ?? DEFAULT_EXE;
130
140
  const coordinatorName = coordinatorEmployee.name;
141
+ let bootClient = null;
142
+ let briefIncompleteReason;
131
143
  try {
132
- const { fastDbInit } = await import("../fast-db-init-4CWHSOOR.js");
133
- await fastDbInit();
134
- } catch {
135
- await initStore();
144
+ const { fastDbInit, isNoopFastDbClient } = await import("../fast-db-init-NBMBQ7MC.js");
145
+ const client2 = await fastDbInit({ daemonOnly: false, caller: "cli" });
146
+ if (isNoopFastDbClient(client2)) {
147
+ briefIncompleteReason = "Daemon unavailable, brief incomplete";
148
+ process.stderr.write("[exe-boot] daemon unavailable; rendering an incomplete brief instead of silently returning empty DB data.\n");
149
+ }
150
+ bootClient = client2;
151
+ } catch (err) {
152
+ try {
153
+ await initStore();
154
+ bootClient = getClient();
155
+ } catch (initErr) {
156
+ briefIncompleteReason = `Daemon unavailable, brief incomplete (${initErr instanceof Error ? initErr.message : String(initErr)})`;
157
+ process.stderr.write(`[exe-boot] DB init failed; rendering incomplete brief: ${initErr instanceof Error ? initErr.message : String(initErr)}
158
+ `);
159
+ }
136
160
  }
137
161
  cleanupSessionMarkers();
138
162
  writeActiveAgent(coordinatorName, coordinatorEmployee.role);
@@ -195,7 +219,16 @@ async function boot(options) {
195
219
  pruneStaleSessions();
196
220
  } catch {
197
221
  }
198
- const client = getClient();
222
+ let client;
223
+ try {
224
+ client = bootClient ?? getClient();
225
+ } catch (err) {
226
+ const { fastDbInit } = await import("../fast-db-init-NBMBQ7MC.js");
227
+ client = await fastDbInit({ daemonOnly: true, caller: "cli" });
228
+ briefIncompleteReason = `Daemon unavailable, brief incomplete (${err instanceof Error ? err.message : String(err)})`;
229
+ process.stderr.write(`[exe-boot] ${briefIncompleteReason}
230
+ `);
231
+ }
199
232
  const briefData = {
200
233
  pendingReviews: [],
201
234
  globalTasks: [],
@@ -208,7 +241,8 @@ async function boot(options) {
208
241
  exeSession: resolveExeSession() ?? void 0,
209
242
  plan: licensePlan,
210
243
  employeeLimit,
211
- planChangeNotice
244
+ planChangeNotice,
245
+ ...briefIncompleteReason ? { briefIncompleteReason } : {}
212
246
  };
213
247
  try {
214
248
  const config = await loadConfig();
@@ -217,181 +251,183 @@ async function boot(options) {
217
251
  briefData.orchestrationPhase = "phase_1_coo";
218
252
  }
219
253
  if (!briefOnly) {
220
- await migrateJsonNotifications();
221
- await markDoneTaskNotificationsAsRead(briefData.exeSession);
222
- try {
223
- const orphanScope = sessionScopeFilter();
224
- await client.execute({
225
- sql: `DELETE FROM notifications
254
+ if (!briefIncompleteReason) {
255
+ await migrateJsonNotifications();
256
+ await markDoneTaskNotificationsAsRead(briefData.exeSession);
257
+ try {
258
+ const orphanScope = sessionScopeFilter();
259
+ await client.execute({
260
+ sql: `DELETE FROM notifications
226
261
  WHERE task_file IS NOT NULL
227
262
  AND task_file NOT IN (SELECT task_file FROM tasks WHERE task_file IS NOT NULL)
228
263
  ${orphanScope.sql}`,
229
- args: [...orphanScope.args]
230
- });
231
- } catch {
232
- }
233
- try {
234
- const { readdirSync: readdirSync2, readFileSync: readFs, statSync } = await import("fs");
235
- const { STATUS_RE, PRIORITY_RE, TITLE_RE } = await import("../task-scanner-QEM5CO2Y.js");
236
- const { getProjectName } = await import("../project-name-EWG5KAZP.js");
237
- const defaultProjectName = getProjectName(process.cwd());
238
- const exeDir = "exe";
239
- const entries = readdirSync2(exeDir, { withFileTypes: true });
240
- const employeeDirs = entries.filter((e) => e.isDirectory() && !["output", "research"].includes(e.name));
241
- const taskFiles = [];
242
- for (const dir of employeeDirs) {
243
- const employee = dir.name;
244
- const taskDir = path.join(exeDir, employee);
245
- let files;
246
- try {
247
- files = readdirSync2(taskDir).filter((f) => f.endsWith(".md"));
248
- } catch {
249
- continue;
250
- }
251
- for (const file of files) {
252
- const absPath = path.join(taskDir, file);
253
- let mtimeMs = 0;
254
- try {
255
- mtimeMs = statSync(absPath).mtimeMs;
256
- } catch {
257
- continue;
258
- }
259
- taskFiles.push({ employee, file, taskFilePath: `exe/${employee}/${file}`, absPath, mtimeMs });
260
- }
261
- }
262
- let dbTaskFileCount = -1;
263
- try {
264
- const countRes = await client.execute("SELECT COUNT(*) AS c FROM tasks WHERE task_file IS NOT NULL");
265
- dbTaskFileCount = Number(countRes.rows[0]?.c ?? -1);
264
+ args: [...orphanScope.args]
265
+ });
266
266
  } catch {
267
267
  }
268
- const signature = reconcileSignature(
269
- taskFiles.map((t) => ({ path: t.taskFilePath, mtimeMs: t.mtimeMs })),
270
- dbTaskFileCount
271
- );
272
- if (dbTaskFileCount < 0 || readReconcileStamp() !== signature) {
273
- const existingByFile = await fetchTasksByFile(client, taskFiles.map((t) => t.taskFilePath));
274
- for (const { employee, file, taskFilePath, absPath } of taskFiles) {
275
- let content;
268
+ try {
269
+ const { readdirSync: readdirSync2, readFileSync: readFs, statSync } = await import("fs");
270
+ const { STATUS_RE, PRIORITY_RE, TITLE_RE } = await import("../task-scanner-QEM5CO2Y.js");
271
+ const { getProjectName } = await import("../project-name-EWG5KAZP.js");
272
+ const defaultProjectName = getProjectName(process.cwd());
273
+ const exeDir = "exe";
274
+ const entries = readdirSync2(exeDir, { withFileTypes: true });
275
+ const employeeDirs = entries.filter((e) => e.isDirectory() && !["output", "research"].includes(e.name));
276
+ const taskFiles = [];
277
+ for (const dir of employeeDirs) {
278
+ const employee = dir.name;
279
+ const taskDir = path.join(exeDir, employee);
280
+ let files;
276
281
  try {
277
- content = readFs(absPath, "utf8");
282
+ files = readdirSync2(taskDir).filter((f) => f.endsWith(".md"));
278
283
  } catch {
279
284
  continue;
280
285
  }
281
- const statusMatch = content.match(STATUS_RE);
282
- const status = statusMatch?.[1]?.toLowerCase() ?? "open";
283
- const titleMatch = content.match(TITLE_RE);
284
- const title = titleMatch?.[1] ?? file.replace(/\.md$/, "").replace(/-/g, " ");
285
- const priMatch = content.match(PRIORITY_RE);
286
- const priority = priMatch?.[1]?.toLowerCase() ?? "p1";
287
- const assignedByMatch = content.match(/^\*\*Assigned by:\*\*\s*(\w+)/m);
288
- const assignedBy = assignedByMatch?.[1] ?? coordinatorName;
289
- const projMatch = content.match(/^\*\*Project:\*\*\s*(.+)/m);
290
- const projectName = projMatch?.[1]?.trim() ?? defaultProjectName;
291
- const existing = existingByFile.get(taskFilePath);
292
- if (!existing) {
293
- const { createTask } = await import("../lib/tasks.js");
294
- await createTask({
295
- title,
296
- assignedTo: employee,
297
- assignedBy,
298
- projectName,
299
- priority,
300
- context: "",
301
- taskFile: taskFilePath,
302
- skipDispatch: true
303
- });
304
- } else {
305
- const dbStatus = existing.status;
306
- const STATUS_RANK = {
307
- open: 0,
308
- in_progress: 1,
309
- needs_review: 2,
310
- done: 2,
311
- // alias for needs_review
312
- closed: 3,
313
- blocked: 3,
314
- cancelled: 3
315
- };
316
- const normalizedMd = status === "done" ? "needs_review" : status;
317
- const dbRank = STATUS_RANK[dbStatus] ?? 0;
318
- const mdRank = STATUS_RANK[status] ?? 0;
319
- const dbIsTerminal = dbStatus === "closed" || dbStatus === "blocked" || dbStatus === "cancelled";
320
- if (normalizedMd !== dbStatus && mdRank > dbRank && !dbIsTerminal) {
321
- await client.execute({
322
- sql: "UPDATE tasks SET status = ?, updated_at = ? WHERE task_file = ?",
323
- args: [normalizedMd, (/* @__PURE__ */ new Date()).toISOString(), taskFilePath]
286
+ for (const file of files) {
287
+ const absPath = path.join(taskDir, file);
288
+ let mtimeMs = 0;
289
+ try {
290
+ mtimeMs = statSync(absPath).mtimeMs;
291
+ } catch {
292
+ continue;
293
+ }
294
+ taskFiles.push({ employee, file, taskFilePath: `exe/${employee}/${file}`, absPath, mtimeMs });
295
+ }
296
+ }
297
+ let dbTaskFileCount = -1;
298
+ try {
299
+ const countRes = await client.execute("SELECT COUNT(*) AS c FROM tasks WHERE task_file IS NOT NULL");
300
+ dbTaskFileCount = Number(countRes.rows[0]?.c ?? -1);
301
+ } catch {
302
+ }
303
+ const signature = reconcileSignature(
304
+ taskFiles.map((t) => ({ path: t.taskFilePath, mtimeMs: t.mtimeMs })),
305
+ dbTaskFileCount
306
+ );
307
+ if (dbTaskFileCount < 0 || readReconcileStamp() !== signature) {
308
+ const existingByFile = await fetchTasksByFile(client, taskFiles.map((t) => t.taskFilePath));
309
+ for (const { employee, file, taskFilePath, absPath } of taskFiles) {
310
+ let content;
311
+ try {
312
+ content = readFs(absPath, "utf8");
313
+ } catch {
314
+ continue;
315
+ }
316
+ const statusMatch = content.match(STATUS_RE);
317
+ const status = statusMatch?.[1]?.toLowerCase() ?? "open";
318
+ const titleMatch = content.match(TITLE_RE);
319
+ const title = titleMatch?.[1] ?? file.replace(/\.md$/, "").replace(/-/g, " ");
320
+ const priMatch = content.match(PRIORITY_RE);
321
+ const priority = priMatch?.[1]?.toLowerCase() ?? "p1";
322
+ const assignedByMatch = content.match(/^\*\*Assigned by:\*\*\s*(\w+)/m);
323
+ const assignedBy = assignedByMatch?.[1] ?? coordinatorName;
324
+ const projMatch = content.match(/^\*\*Project:\*\*\s*(.+)/m);
325
+ const projectName = projMatch?.[1]?.trim() ?? defaultProjectName;
326
+ const existing = existingByFile.get(taskFilePath);
327
+ if (!existing) {
328
+ const { createTask } = await import("../lib/tasks.js");
329
+ await createTask({
330
+ title,
331
+ assignedTo: employee,
332
+ assignedBy,
333
+ projectName,
334
+ priority,
335
+ context: "",
336
+ taskFile: taskFilePath,
337
+ skipDispatch: true
324
338
  });
339
+ } else {
340
+ const dbStatus = existing.status;
341
+ const STATUS_RANK = {
342
+ open: 0,
343
+ in_progress: 1,
344
+ needs_review: 2,
345
+ done: 2,
346
+ // alias for needs_review
347
+ closed: 3,
348
+ blocked: 3,
349
+ cancelled: 3
350
+ };
351
+ const normalizedMd = status === "done" ? "needs_review" : status;
352
+ const dbRank = STATUS_RANK[dbStatus] ?? 0;
353
+ const mdRank = STATUS_RANK[status] ?? 0;
354
+ const dbIsTerminal = dbStatus === "closed" || dbStatus === "blocked" || dbStatus === "cancelled";
355
+ if (normalizedMd !== dbStatus && mdRank > dbRank && !dbIsTerminal) {
356
+ await client.execute({
357
+ sql: "UPDATE tasks SET status = ?, updated_at = ? WHERE task_file = ?",
358
+ args: [normalizedMd, (/* @__PURE__ */ new Date()).toISOString(), taskFilePath]
359
+ });
360
+ }
325
361
  }
326
362
  }
363
+ writeReconcileStamp(signature);
327
364
  }
328
- writeReconcileStamp(signature);
365
+ } catch (e) {
366
+ process.stderr.write("[exe-boot] task reconciliation: " + (e instanceof Error ? e.message : String(e)) + "\n");
329
367
  }
330
- } catch (e) {
331
- process.stderr.write("[exe-boot] task reconciliation: " + (e instanceof Error ? e.message : String(e)) + "\n");
332
- }
333
- try {
334
- const staleRevScope = sessionScopeFilter();
335
- await client.execute({
336
- sql: `UPDATE tasks SET status = 'done', updated_at = ?
368
+ try {
369
+ const staleRevScope = sessionScopeFilter();
370
+ await client.execute({
371
+ sql: `UPDATE tasks SET status = 'done', updated_at = ?
337
372
  WHERE (assigned_to = ? OR assigned_to = ?)
338
373
  AND status = 'in_progress'
339
374
  AND task_file LIKE '%review-%'
340
375
  AND updated_at < datetime('now', '-1 hour')
341
376
  ${staleRevScope.sql}`,
342
- args: [(/* @__PURE__ */ new Date()).toISOString(), coordinatorName, DEFAULT_COORDINATOR_TEMPLATE_NAME, ...staleRevScope.args]
343
- });
344
- } catch {
345
- }
346
- try {
347
- const staleScope = sessionScopeFilter();
348
- const staleReviews = await client.execute({
349
- sql: `SELECT id, title, priority FROM tasks
377
+ args: [(/* @__PURE__ */ new Date()).toISOString(), coordinatorName, DEFAULT_COORDINATOR_TEMPLATE_NAME, ...staleRevScope.args]
378
+ });
379
+ } catch {
380
+ }
381
+ try {
382
+ const staleScope = sessionScopeFilter();
383
+ const staleReviews = await client.execute({
384
+ sql: `SELECT id, title, priority FROM tasks
350
385
  WHERE status = 'needs_review'
351
386
  AND task_file LIKE '%review-%'
352
387
  AND updated_at < datetime('now', '-24 hours')${staleScope.sql}`,
353
- args: [...staleScope.args]
354
- });
355
- for (const r of staleReviews.rows) {
356
- const pri = String(r.priority).toLowerCase();
357
- if (pri !== "p0") {
358
- try {
359
- await updateTaskStatus({ taskId: String(r.id), status: "done", skipReviewCreation: true });
360
- } catch {
361
- await client.execute({
362
- sql: "UPDATE tasks SET status = 'done', updated_at = ? WHERE id = ?",
363
- args: [(/* @__PURE__ */ new Date()).toISOString(), String(r.id)]
364
- });
388
+ args: [...staleScope.args]
389
+ });
390
+ for (const r of staleReviews.rows) {
391
+ const pri = String(r.priority).toLowerCase();
392
+ if (pri !== "p0") {
393
+ try {
394
+ await updateTaskStatus({ taskId: String(r.id), status: "done", skipReviewCreation: true });
395
+ } catch {
396
+ await client.execute({
397
+ sql: "UPDATE tasks SET status = 'done', updated_at = ? WHERE id = ?",
398
+ args: [(/* @__PURE__ */ new Date()).toISOString(), String(r.id)]
399
+ });
400
+ }
365
401
  }
366
402
  }
367
- }
368
- if (staleReviews.rows.length > 0) {
369
- const p0Count = staleReviews.rows.filter((r) => String(r.priority).toLowerCase() === "p0").length;
370
- const autoApprovedCount = staleReviews.rows.length - p0Count;
371
- if (autoApprovedCount > 0) {
372
- briefData.autoApprovedReviews = [
373
- ...briefData.autoApprovedReviews ?? [],
374
- `${autoApprovedCount} stale review(s) auto-approved (>24h)`
375
- ];
403
+ if (staleReviews.rows.length > 0) {
404
+ const p0Count = staleReviews.rows.filter((r) => String(r.priority).toLowerCase() === "p0").length;
405
+ const autoApprovedCount = staleReviews.rows.length - p0Count;
406
+ if (autoApprovedCount > 0) {
407
+ briefData.autoApprovedReviews = [
408
+ ...briefData.autoApprovedReviews ?? [],
409
+ `${autoApprovedCount} stale review(s) auto-approved (>24h)`
410
+ ];
411
+ }
376
412
  }
413
+ } catch {
377
414
  }
378
- } catch {
379
- }
380
- try {
381
- for (const reviewDirName of /* @__PURE__ */ new Set(["exe", coordinatorName])) {
382
- const reviewDir = path.join(process.cwd(), "exe", reviewDirName);
383
- if (existsSync(reviewDir)) {
384
- for (const f of readdirSync(reviewDir)) {
385
- if (f.startsWith("review-") && f.endsWith(".md")) {
386
- try {
387
- unlinkSync(path.join(reviewDir, f));
388
- } catch {
415
+ try {
416
+ for (const reviewDirName of /* @__PURE__ */ new Set(["exe", coordinatorName])) {
417
+ const reviewDir = path.join(process.cwd(), "exe", reviewDirName);
418
+ if (existsSync(reviewDir)) {
419
+ for (const f of readdirSync(reviewDir)) {
420
+ if (f.startsWith("review-") && f.endsWith(".md")) {
421
+ try {
422
+ unlinkSync(path.join(reviewDir, f));
423
+ } catch {
424
+ }
389
425
  }
390
426
  }
391
427
  }
392
428
  }
429
+ } catch {
393
430
  }
394
- } catch {
395
431
  }
396
432
  }
397
433
  let lastBootTimestamp = null;
@@ -532,12 +568,24 @@ async function boot(options) {
532
568
  } catch {
533
569
  }
534
570
  })(),
571
+ (async () => {
572
+ try {
573
+ const { getProjectName } = await import("../project-name-EWG5KAZP.js");
574
+ briefData.tieredReviewReceipts = await countTieredReviewReceipts(
575
+ client,
576
+ briefData.exeSession,
577
+ getProjectName() || null
578
+ );
579
+ } catch {
580
+ briefData.tieredReviewReceipts = { autoClosed: 0, spotChecksPending: 0 };
581
+ }
582
+ })(),
535
583
  // Global task queue — all open/in_progress/blocked tasks
536
584
  (async () => {
537
585
  const qScope = sessionScopeFilter(void 0, "t");
538
586
  try {
539
587
  const result = await client.execute({
540
- sql: `SELECT t.assigned_to, t.project_name, t.title, t.priority, t.status,
588
+ sql: `SELECT t.id, t.assigned_to, t.project_name, t.title, t.priority, t.status,
541
589
  b.task_file as blocker_file, t.parent_task_id, t.updated_at
542
590
  FROM tasks t
543
591
  LEFT JOIN tasks b ON t.blocked_by = b.id
@@ -546,6 +594,7 @@ async function boot(options) {
546
594
  args: [...qScope.args]
547
595
  });
548
596
  briefData.globalTasks = result.rows.map((row) => ({
597
+ taskId: String(row.id),
549
598
  assignedTo: String(row.assigned_to),
550
599
  projectName: String(row.project_name),
551
600
  title: String(row.title),
@@ -555,6 +604,18 @@ async function boot(options) {
555
604
  parentTaskId: row.parent_task_id ? String(row.parent_task_id) : void 0,
556
605
  updatedAt: row.updated_at ? String(row.updated_at) : void 0
557
606
  }));
607
+ try {
608
+ const { getProjectName } = await import("../project-name-EWG5KAZP.js");
609
+ const subagentCounts = await querySubagentCheckpointCounts(client, {
610
+ projectName: getProjectName(process.cwd())
611
+ });
612
+ const countByTaskId = new Map(subagentCounts.map((row) => [row.taskId, row.count]));
613
+ for (const task of briefData.globalTasks) {
614
+ const count = task.taskId ? countByTaskId.get(task.taskId) : void 0;
615
+ if (count && task.status === "in_progress") task.subagentEventCount = count;
616
+ }
617
+ } catch {
618
+ }
558
619
  } catch {
559
620
  briefData.globalTasks = [];
560
621
  }
@@ -934,15 +995,26 @@ async function boot(options) {
934
995
  process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? path.join(os.homedir(), ".exe-os"),
935
996
  "config.json"
936
997
  );
998
+ let cloudConfigured = false;
937
999
  if (existsSync(configPath)) {
938
1000
  const raw = JSON.parse(readFileSync(configPath, "utf8"));
939
- briefData.cloudConnected = !!(raw.cloud || raw.turso);
1001
+ cloudConfigured = !!(raw.cloud || raw.turso);
940
1002
  }
1003
+ const cloudSync = resolveCloudSyncStatus({ cloudConfigured });
1004
+ briefData.cloudConnected = cloudConfigured;
1005
+ briefData.cloudSyncStatus = cloudSync.status;
1006
+ briefData.cloudLastSuccessAt = cloudSync.lastSuccessAt;
1007
+ briefData.cloudLastError = cloudSync.lastError;
1008
+ briefData.cloudPausedAt = cloudSync.pausedAt;
941
1009
  } catch {
942
1010
  }
943
1011
  try {
944
1012
  const backfillFlagPath = path.join(EXE_AI_DIR, "session-cache", "needs-backfill");
945
1013
  const isBackfillNeeded = () => existsSync(backfillFlagPath);
1014
+ const { resolveEmbeddingsEnabled: resolveEmbed } = await import("../embeddings-config-FANLORDH.js");
1015
+ const { loadConfigSync: loadCfgForEmbed } = await import("../lib/config.js");
1016
+ const embedCfg = loadCfgForEmbed();
1017
+ const embeddingsOn = resolveEmbed(process.env.EXE_EMBEDDINGS, embedCfg);
946
1018
  const totalResult = await client.execute({
947
1019
  sql: "SELECT COUNT(*) as total FROM memories",
948
1020
  args: []
@@ -1037,19 +1109,16 @@ async function boot(options) {
1037
1109
  daemonRequestsServed,
1038
1110
  totalMemories,
1039
1111
  memoriesWithVectors,
1040
- backfillRunning: nullCount > 0 && isBackfillNeeded(),
1112
+ backfillRunning: embeddingsOn && nullCount > 0 && isBackfillNeeded(),
1041
1113
  recent24hTotal,
1042
- recent24hWithVectors
1114
+ recent24hWithVectors,
1115
+ embeddingsEnabled: embeddingsOn
1043
1116
  };
1044
- const { resolveEmbeddingsEnabled: resolveEmbed } = await import("../embeddings-config-FANLORDH.js");
1045
- const { loadConfigSync: loadCfgForEmbed } = await import("../lib/config.js");
1046
- const embedCfg = loadCfgForEmbed();
1047
- const embeddingsOn = resolveEmbed(process.env.EXE_EMBEDDINGS, embedCfg);
1048
- const { backfillKillSwitchEnabled, countActionableNullVectors } = await import("../backfill-gate-65LSYVE5.js");
1117
+ const { backfillKillSwitchEnabled, countActionableNullVectors } = await import("../backfill-gate-UCBL6Q5U.js");
1049
1118
  const actionableNullCount = nullCount > 0 ? await countActionableNullVectors(client) : 0;
1050
1119
  if (actionableNullCount > 0 && embeddingsOn && !backfillKillSwitchEnabled()) {
1051
1120
  try {
1052
- const { tryAcquireWorkerSlot, registerWorkerPid } = await import("../worker-gate-3KUBAU32.js");
1121
+ const { tryAcquireWorkerSlot, registerWorkerPid } = await import("../worker-gate-F7M24XHO.js");
1053
1122
  if (!tryAcquireWorkerSlot()) {
1054
1123
  process.stderr.write("[exe-boot] Backfill needed but worker gate full \u2014 skipping\n");
1055
1124
  } else {
@@ -1120,7 +1189,7 @@ async function boot(options) {
1120
1189
  } catch {
1121
1190
  }
1122
1191
  try {
1123
- const { scanUnmergedBranchesCached } = await import("../branch-hygiene-TZWK6QCF.js");
1192
+ const { scanUnmergedBranchesCached } = await import("../branch-hygiene-L3RV6UWM.js");
1124
1193
  const STALE_HOURS = 24;
1125
1194
  const scan = await scanUnmergedBranchesCached(process.cwd(), { staleHours: STALE_HOURS });
1126
1195
  if (scan.total > 0) {
@@ -1168,7 +1237,7 @@ async function boot(options) {
1168
1237
  } catch {
1169
1238
  }
1170
1239
  try {
1171
- const { countKillsSince } = await import("../session-kill-telemetry-AELE4JDK.js");
1240
+ const { countKillsSince } = await import("../session-kill-telemetry-NFKJOQKH.js");
1172
1241
  const { listSessions: listRegistrySessions } = await import("../lib/session-registry.js");
1173
1242
  const todayStart = /* @__PURE__ */ new Date();
1174
1243
  todayStart.setHours(0, 0, 0, 0);
@@ -1214,7 +1283,7 @@ ${ccWarning}`);
1214
1283
  ${brief}`;
1215
1284
  await writeFile(path.join(sessionDir, "CLAUDE.md"), claudeMdContent, "utf-8");
1216
1285
  try {
1217
- const { getPlatformReferenceMarkdown } = await import("../platform-procedures-X5DFJFV7.js");
1286
+ const { getPlatformReferenceMarkdown } = await import("../platform-procedures-VDW2R65H.js");
1218
1287
  const referenceDir = path.join(EXE_AI_DIR, "reference");
1219
1288
  await mkdir(referenceDir, { recursive: true });
1220
1289
  await writeFile(
@@ -1225,12 +1294,16 @@ ${brief}`;
1225
1294
  } catch {
1226
1295
  }
1227
1296
  const notificationSessionScope = resolveExeSession();
1228
- const unread = await readUnreadNotifications(void 0, notificationSessionScope);
1229
- if (unread.length > 0) {
1230
- console.log(`\u{1F4EC} ${unread.length} unread notification${unread.length === 1 ? "" : "s"}`);
1231
- await markAsRead(unread.map((n) => n.id), notificationSessionScope);
1297
+ if (!briefIncompleteReason) {
1298
+ const unread = await readUnreadNotifications(void 0, notificationSessionScope);
1299
+ if (unread.length > 0) {
1300
+ console.log(`\u{1F4EC} ${unread.length} unread notification${unread.length === 1 ? "" : "s"}`);
1301
+ await markAsRead(unread.map((n) => n.id), notificationSessionScope);
1302
+ }
1303
+ }
1304
+ if (!briefIncompleteReason) {
1305
+ await cleanupOldNotifications(void 0, notificationSessionScope);
1232
1306
  }
1233
- await cleanupOldNotifications(void 0, notificationSessionScope);
1234
1307
  console.log(brief);
1235
1308
  if (ccWarning) console.log(`
1236
1309
  ${ccWarning}`);
@@ -1283,7 +1356,7 @@ async function updateIdleKillSuspectStreak(client, killsToday, liveSessions, tod
1283
1356
  IDLE_KILL_STREAK_META_KEY,
1284
1357
  computeIdleKillSuspectStreak,
1285
1358
  parseStreakState
1286
- } = await import("../session-kill-telemetry-AELE4JDK.js");
1359
+ } = await import("../session-kill-telemetry-NFKJOQKH.js");
1287
1360
  const prevResult = await client.execute({
1288
1361
  sql: "SELECT value FROM sync_meta WHERE key = ?",
1289
1362
  args: [IDLE_KILL_STREAK_META_KEY]