@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,12 +1,73 @@
1
1
  import {
2
2
  recordOrchestrationEventBestEffort
3
- } from "./chunk-WH7XN5ER.js";
3
+ } from "./chunk-2WAVZ5UJ.js";
4
4
 
5
5
  // src/lib/worktree.ts
6
- import { execSync } from "child_process";
7
- import { existsSync, readFileSync, appendFileSync, mkdirSync, realpathSync } from "fs";
6
+ import { execFile, execSync } from "child_process";
7
+ import { promisify } from "util";
8
+ import { existsSync, readFileSync, appendFileSync, mkdirSync, realpathSync, statSync } from "fs";
8
9
  import path from "path";
9
10
  var GIT_TIMEOUT_MS = 1e4;
11
+ var execFileAsync = promisify(execFile);
12
+ async function gitAsync(args, cwd) {
13
+ const { stdout } = await execFileAsync("git", args, {
14
+ cwd,
15
+ encoding: "utf-8",
16
+ timeout: GIT_TIMEOUT_MS
17
+ });
18
+ return String(stdout ?? "");
19
+ }
20
+ function classifyGitFailure(err) {
21
+ if (!err || typeof err !== "object") return "unavailable";
22
+ const e = err;
23
+ if (e.killed === true) return "unavailable";
24
+ if (typeof e.signal === "string" && e.signal.length > 0) return "unavailable";
25
+ if (e.code === "ETIMEDOUT" || e.code === "ENOENT") return "unavailable";
26
+ if (typeof e.status === "number") return "definitive";
27
+ if (typeof e.code === "number") return "definitive";
28
+ return "unavailable";
29
+ }
30
+ async function resolveGitWithRetryAsync(run) {
31
+ for (let attempt = 0; ; attempt++) {
32
+ try {
33
+ return await run();
34
+ } catch (err) {
35
+ if (classifyGitFailure(err) === "definitive") return null;
36
+ if (attempt >= 1) return null;
37
+ }
38
+ }
39
+ }
40
+ function resolveGitWithRetrySync(run) {
41
+ for (let attempt = 0; ; attempt++) {
42
+ try {
43
+ return run();
44
+ } catch (err) {
45
+ if (classifyGitFailure(err) === "definitive") return null;
46
+ if (attempt >= 1) return null;
47
+ }
48
+ }
49
+ }
50
+ function isInsideGitRepo(dir) {
51
+ let cur;
52
+ try {
53
+ cur = path.resolve(dir);
54
+ } catch {
55
+ return false;
56
+ }
57
+ for (let i = 0; i < 128; i++) {
58
+ try {
59
+ statSync(path.join(cur, ".git"));
60
+ return true;
61
+ } catch (err) {
62
+ const code = err?.code;
63
+ if (code !== "ENOENT" && code !== "ENOTDIR") return true;
64
+ }
65
+ const parent = path.dirname(cur);
66
+ if (parent === cur) break;
67
+ cur = parent;
68
+ }
69
+ return false;
70
+ }
10
71
  function getGitRoot(dir) {
11
72
  try {
12
73
  const root = execSync("git rev-parse --show-toplevel", {
@@ -20,17 +81,31 @@ function getGitRoot(dir) {
20
81
  return null;
21
82
  }
22
83
  }
23
- function getMainRepoRoot(dir) {
84
+ async function getGitRootAsync(dir) {
24
85
  try {
25
- const commonDir = execSync(
26
- "git rev-parse --path-format=absolute --git-common-dir",
27
- { cwd: dir, encoding: "utf-8", timeout: GIT_TIMEOUT_MS, stdio: ["pipe", "pipe", "pipe"] }
28
- ).trim();
29
- return realpath(path.dirname(commonDir));
86
+ const root = (await gitAsync(["rev-parse", "--show-toplevel"], dir)).trim();
87
+ return realpath(root);
30
88
  } catch {
31
89
  return null;
32
90
  }
33
91
  }
92
+ function getMainRepoRoot(dir) {
93
+ const commonDir = resolveGitWithRetrySync(
94
+ () => execSync(
95
+ "git rev-parse --path-format=absolute --git-common-dir",
96
+ { cwd: dir, encoding: "utf-8", timeout: GIT_TIMEOUT_MS, stdio: ["pipe", "pipe", "pipe"] }
97
+ ).trim()
98
+ );
99
+ if (commonDir == null) return null;
100
+ return realpath(path.dirname(commonDir));
101
+ }
102
+ async function getMainRepoRootAsync(dir) {
103
+ const commonDir = await resolveGitWithRetryAsync(
104
+ async () => (await gitAsync(["rev-parse", "--path-format=absolute", "--git-common-dir"], dir)).trim()
105
+ );
106
+ if (commonDir == null) return null;
107
+ return realpath(path.dirname(commonDir));
108
+ }
34
109
  function worktreePath(repoRoot, employeeName, instance) {
35
110
  const label = instanceLabel(employeeName, instance);
36
111
  return path.join(repoRoot, ".worktrees", label);
@@ -165,6 +240,107 @@ function ensureWorktree(projectDir, employeeName, instance) {
165
240
  return null;
166
241
  }
167
242
  }
243
+ async function ensureWorktreeAsync(projectDir, employeeName, instance) {
244
+ const repoRoot = await getMainRepoRootAsync(projectDir);
245
+ if (!repoRoot) return null;
246
+ const wtPath = worktreePath(repoRoot, employeeName, instance);
247
+ const branch = worktreeBranch(employeeName, instance);
248
+ if (existsSync(path.join(wtPath, ".git"))) {
249
+ const currentBranch = await getWorktreeCurrentBranchAsync(wtPath);
250
+ if (currentBranch !== branch) {
251
+ recordOrchestrationEventBestEffort({
252
+ eventType: "worktree.branch_mismatch",
253
+ source: "worktree.ensureWorktreeAsync",
254
+ severity: "warn",
255
+ agentId: employeeName,
256
+ instanceId: instance != null ? String(instance) : null,
257
+ payload: { expectedBranch: branch, actualBranch: currentBranch }
258
+ });
259
+ if (await isWorktreeDirtyAsync(wtPath)) {
260
+ process.stderr.write(
261
+ `[worktree] Refusing to reuse ${wtPath}: expected branch ${branch}, found ${currentBranch ?? "unknown"} with uncommitted changes
262
+ `
263
+ );
264
+ return null;
265
+ }
266
+ try {
267
+ await gitAsync(["worktree", "remove", wtPath], repoRoot);
268
+ } catch (err) {
269
+ process.stderr.write(
270
+ `[worktree] Failed to repair branch mismatch for ${employeeName}: ${err instanceof Error ? err.message : String(err)}
271
+ `
272
+ );
273
+ return null;
274
+ }
275
+ } else {
276
+ recordOrchestrationEventBestEffort({
277
+ eventType: "worktree.reused",
278
+ source: "worktree.ensureWorktreeAsync",
279
+ agentId: employeeName,
280
+ instanceId: instance != null ? String(instance) : null,
281
+ payload: { branch }
282
+ });
283
+ return wtPath;
284
+ }
285
+ }
286
+ if (existsSync(path.join(wtPath, ".git")) && await getWorktreeCurrentBranchAsync(wtPath) === branch) {
287
+ recordOrchestrationEventBestEffort({
288
+ eventType: "worktree.reused",
289
+ source: "worktree.ensureWorktreeAsync",
290
+ agentId: employeeName,
291
+ instanceId: instance != null ? String(instance) : null,
292
+ payload: { branch }
293
+ });
294
+ return wtPath;
295
+ }
296
+ mkdirSync(path.join(repoRoot, ".worktrees"), { recursive: true });
297
+ ensureGitignoreEntry(repoRoot, "/.worktrees/");
298
+ try {
299
+ await gitAsync(["worktree", "prune"], repoRoot);
300
+ } catch {
301
+ }
302
+ const branchExists = await branchExistsLocallyAsync(repoRoot, branch);
303
+ try {
304
+ if (branchExists) {
305
+ await gitAsync(["worktree", "add", wtPath, branch], repoRoot);
306
+ } else {
307
+ await gitAsync(["worktree", "add", wtPath, "-b", branch, "HEAD"], repoRoot);
308
+ }
309
+ recordOrchestrationEventBestEffort({
310
+ eventType: "worktree.created",
311
+ source: "worktree.ensureWorktreeAsync",
312
+ agentId: employeeName,
313
+ instanceId: instance != null ? String(instance) : null,
314
+ payload: { branch, reusedBranch: branchExists }
315
+ });
316
+ return wtPath;
317
+ } catch (err) {
318
+ if (existsSync(path.join(wtPath, ".git")) && await getWorktreeCurrentBranchAsync(wtPath) === branch) {
319
+ recordOrchestrationEventBestEffort({
320
+ eventType: "worktree.reused",
321
+ source: "worktree.ensureWorktreeAsync",
322
+ agentId: employeeName,
323
+ instanceId: instance != null ? String(instance) : null,
324
+ payload: { branch, raced: true }
325
+ });
326
+ return wtPath;
327
+ }
328
+ recordOrchestrationEventBestEffort({
329
+ eventType: "worktree.failed",
330
+ source: "worktree.ensureWorktreeAsync",
331
+ severity: "warn",
332
+ agentId: employeeName,
333
+ instanceId: instance != null ? String(instance) : null,
334
+ errorCode: err instanceof Error ? err.name : "worktree_create_failed",
335
+ payload: { branch }
336
+ });
337
+ process.stderr.write(
338
+ `[worktree] Failed to create worktree for ${employeeName}: ${err instanceof Error ? err.message : String(err)}
339
+ `
340
+ );
341
+ return null;
342
+ }
343
+ }
168
344
  function isWorktreeDirty(wtPath) {
169
345
  try {
170
346
  const status = execSync("git status --porcelain", {
@@ -178,6 +354,13 @@ function isWorktreeDirty(wtPath) {
178
354
  return true;
179
355
  }
180
356
  }
357
+ async function isWorktreeDirtyAsync(wtPath) {
358
+ try {
359
+ return (await gitAsync(["status", "--porcelain"], wtPath)).trim().length > 0;
360
+ } catch {
361
+ return true;
362
+ }
363
+ }
181
364
  function cleanupWorktree(projectDir, employeeName, instance) {
182
365
  const repoRoot = getMainRepoRoot(projectDir);
183
366
  if (!repoRoot) return { cleaned: false, reason: "not a git repo" };
@@ -277,6 +460,14 @@ function branchExistsLocally(repoRoot, branch) {
277
460
  return false;
278
461
  }
279
462
  }
463
+ async function branchExistsLocallyAsync(repoRoot, branch) {
464
+ try {
465
+ await gitAsync(["rev-parse", "--verify", `refs/heads/${branch}`], repoRoot);
466
+ return true;
467
+ } catch {
468
+ return false;
469
+ }
470
+ }
280
471
  function getWorktreeCurrentBranch(wtPath) {
281
472
  try {
282
473
  const branch = execSync("git branch --show-current", {
@@ -290,6 +481,14 @@ function getWorktreeCurrentBranch(wtPath) {
290
481
  return null;
291
482
  }
292
483
  }
484
+ async function getWorktreeCurrentBranchAsync(wtPath) {
485
+ try {
486
+ const branch = (await gitAsync(["branch", "--show-current"], wtPath)).trim();
487
+ return branch.length > 0 ? branch : null;
488
+ } catch {
489
+ return null;
490
+ }
491
+ }
293
492
  function detectMainBranch(repoRoot) {
294
493
  for (const candidate of ["main", "master"]) {
295
494
  if (branchExistsLocally(repoRoot, candidate)) return candidate;
@@ -333,12 +532,20 @@ ${entry}
333
532
  }
334
533
 
335
534
  export {
535
+ classifyGitFailure,
536
+ resolveGitWithRetryAsync,
537
+ resolveGitWithRetrySync,
538
+ isInsideGitRepo,
336
539
  getGitRoot,
540
+ getGitRootAsync,
337
541
  getMainRepoRoot,
542
+ getMainRepoRootAsync,
338
543
  worktreePath,
339
544
  worktreeBranch,
340
545
  parseInstanceLabel,
341
546
  ensureWorktree,
547
+ ensureWorktreeAsync,
342
548
  isWorktreeDirty,
549
+ isWorktreeDirtyAsync,
343
550
  cleanupWorktree
344
551
  };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  atomicWriteJsonSync
3
- } from "./chunk-SHIICYJW.js";
3
+ } from "./chunk-BYTDMAGB.js";
4
4
 
5
5
  // src/lib/mcp-port-config.ts
6
6
  import { existsSync, readFileSync } from "fs";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getMasterKey
3
- } from "./chunk-Z42MXYWW.js";
3
+ } from "./chunk-QWVXN224.js";
4
4
 
5
5
  // src/lib/monitor-identity.ts
6
6
  import crypto from "crypto";
@@ -3,15 +3,15 @@ import {
3
3
  getClient,
4
4
  isInitialized,
5
5
  loadEmployees
6
- } from "./chunk-RWSLVYTE.js";
6
+ } from "./chunk-AOHXREB7.js";
7
7
  import {
8
8
  PLAN_LIMITS,
9
9
  checkLicense,
10
10
  isFeatureAllowed
11
- } from "./chunk-7SEC2AG5.js";
11
+ } from "./chunk-PQIDGXSG.js";
12
12
  import {
13
13
  EXE_AI_DIR
14
- } from "./chunk-7Y5UDEVM.js";
14
+ } from "./chunk-WZHZCDDO.js";
15
15
 
16
16
  // src/lib/plan-limits.ts
17
17
  import { readFileSync, existsSync } from "fs";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  enqueueMemory
3
- } from "./chunk-HCJCW7X4.js";
3
+ } from "./chunk-H7I47RS5.js";
4
4
  import {
5
5
  isClientConnected,
6
6
  sendDaemonRequest
7
- } from "./chunk-UU4UINUX.js";
7
+ } from "./chunk-G4RGKBCA.js";
8
8
 
9
9
  // src/lib/memory-queue-client.ts
10
10
  async function writeMemoryViaDaemon(entry) {
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  sendMessage
3
- } from "./chunk-2P4WJNN5.js";
3
+ } from "./chunk-KWZMQACA.js";
4
4
  import {
5
5
  getActiveAgent
6
- } from "./chunk-C445WRUX.js";
6
+ } from "./chunk-5ERDIOV3.js";
7
7
 
8
8
  // src/mcp/tools/send-message.ts
9
9
  import { z } from "zod";
@@ -1,20 +1,20 @@
1
1
  import {
2
2
  fastDbInit
3
- } from "./chunk-7YORGTXC.js";
3
+ } from "./chunk-PWUFMX75.js";
4
4
  import {
5
5
  sessionScopeFilter
6
- } from "./chunk-KKOLHBNC.js";
6
+ } from "./chunk-UP75Z5X7.js";
7
7
  import {
8
8
  formatStatusAll,
9
9
  formatStatusDeep,
10
10
  getEmployeeStatuses,
11
11
  inTmux
12
- } from "./chunk-SSTLTIF3.js";
12
+ } from "./chunk-SKGMF2SO.js";
13
13
  import {
14
14
  getClient,
15
15
  isCoordinatorRole,
16
16
  loadEmployees
17
- } from "./chunk-RWSLVYTE.js";
17
+ } from "./chunk-AOHXREB7.js";
18
18
  import {
19
19
  isMainModule
20
20
  } from "./chunk-6Y4B3QF6.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  loadLicense
3
- } from "./chunk-7SEC2AG5.js";
3
+ } from "./chunk-PQIDGXSG.js";
4
4
 
5
5
  // src/lib/stack-update.ts
6
6
  import { execFileSync, spawnSync } from "child_process";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  EXE_AI_DIR
3
- } from "./chunk-7Y5UDEVM.js";
3
+ } from "./chunk-WZHZCDDO.js";
4
4
 
5
5
  // src/lib/device-registry.ts
6
6
  import crypto from "crypto";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  recordOrchestrationEventBestEffort
3
- } from "./chunk-WH7XN5ER.js";
3
+ } from "./chunk-2WAVZ5UJ.js";
4
4
  import {
5
5
  atomicWriteJsonSync
6
- } from "./chunk-SHIICYJW.js";
6
+ } from "./chunk-BYTDMAGB.js";
7
7
 
8
8
  // src/lib/session-registry.ts
9
9
  import { readFileSync, mkdirSync, existsSync, openSync, closeSync, writeSync, unlinkSync, constants } from "fs";
@@ -118,7 +118,7 @@ async function executeSendWhatsapp(params) {
118
118
  if (!checkOutboundRateLimit("whatsapp")) {
119
119
  throw new Error(`Outbound rate limit exceeded for WhatsApp (max ${OUTBOUND_RATE_LIMIT_PER_HOUR}/hour)`);
120
120
  }
121
- const { getAccountByName, getDefaultAccount } = await import("./whatsapp-accounts-BWRZUY23.js");
121
+ const { getAccountByName, getDefaultAccount } = await import("./whatsapp-accounts-BFIOXYW5.js");
122
122
  const account = params.account ? getAccountByName(params.account) : getDefaultAccount();
123
123
  if (!account) {
124
124
  throw new Error(
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  vectorToSqlLiteral
3
- } from "./chunk-EDH54E5A.js";
3
+ } from "./chunk-VSRPS3J7.js";
4
4
  import {
5
5
  blobToVector
6
6
  } from "./chunk-OTVEIJUQ.js";
7
7
  import {
8
8
  getClient
9
- } from "./chunk-RWSLVYTE.js";
9
+ } from "./chunk-AOHXREB7.js";
10
10
 
11
11
  // src/lib/behaviors.ts
12
12
  import crypto from "crypto";
@@ -4,17 +4,17 @@ import {
4
4
  resolveExeSession,
5
5
  sendIntercom,
6
6
  strictSessionScopeFilter
7
- } from "./chunk-KKOLHBNC.js";
7
+ } from "./chunk-UP75Z5X7.js";
8
8
  import {
9
9
  parseMessage,
10
10
  serializeMessage
11
11
  } from "./chunk-4JERP7NT.js";
12
12
  import {
13
13
  recordOrchestrationEventBestEffort
14
- } from "./chunk-WH7XN5ER.js";
14
+ } from "./chunk-2WAVZ5UJ.js";
15
15
  import {
16
16
  getClient
17
- } from "./chunk-RWSLVYTE.js";
17
+ } from "./chunk-AOHXREB7.js";
18
18
 
19
19
  // src/lib/messaging.ts
20
20
  import crypto from "crypto";
@@ -45,14 +45,17 @@ function rowToMessage(row) {
45
45
  };
46
46
  }
47
47
  var MAX_RETRIES = 10;
48
- async function countUnreadMessages(targetAgent, sessionScope) {
49
- const client = getClient();
48
+ function buildUnreadMessagesCountStatement(targetAgent, sessionScope) {
50
49
  const scope = strictSessionScopeFilter(sessionScope);
51
- const result = await client.execute({
50
+ return {
52
51
  sql: `SELECT COUNT(*) AS count FROM messages
53
52
  WHERE target_agent = ? AND status IN ('pending', 'delivered')${scope.sql}`,
54
53
  args: [targetAgent, ...scope.args]
55
- });
54
+ };
55
+ }
56
+ async function countUnreadMessages(targetAgent, sessionScope) {
57
+ const client = getClient();
58
+ const result = await client.execute(buildUnreadMessagesCountStatement(targetAgent, sessionScope));
56
59
  return Number(result.rows[0]?.count ?? 0);
57
60
  }
58
61
  async function sendMessage(input) {
@@ -326,6 +329,7 @@ function parseIncomingMessage(content) {
326
329
  }
327
330
 
328
331
  export {
332
+ buildUnreadMessagesCountStatement,
329
333
  countUnreadMessages,
330
334
  sendMessage,
331
335
  setWsClientSend,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  loadEmployees
3
- } from "./chunk-RWSLVYTE.js";
3
+ } from "./chunk-AOHXREB7.js";
4
4
 
5
5
  // src/lib/agent-symlinks.ts
6
6
  import os from "os";
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  isExeSession
3
- } from "./chunk-KKOLHBNC.js";
3
+ } from "./chunk-UP75Z5X7.js";
4
4
  import {
5
5
  recordOrchestrationEventBestEffort
6
- } from "./chunk-WH7XN5ER.js";
6
+ } from "./chunk-2WAVZ5UJ.js";
7
7
  import {
8
8
  getClient,
9
9
  isCoordinatorName
10
- } from "./chunk-RWSLVYTE.js";
10
+ } from "./chunk-AOHXREB7.js";
11
11
  import {
12
12
  isDaemonAlive
13
13
  } from "./chunk-7HLWBYH7.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  loadPreferences
3
- } from "./chunk-CLAYNAXC.js";
3
+ } from "./chunk-3EUMUSLE.js";
4
4
  import {
5
5
  EXE_HOOKS,
6
6
  isLegacyHomeDirHookCommand,
@@ -8,10 +8,10 @@ import {
8
8
  } from "./chunk-L3TB7CC3.js";
9
9
  import {
10
10
  buildClaudeHttpMcpEntry
11
- } from "./chunk-4QSJVMMT.js";
11
+ } from "./chunk-GG5NDQNN.js";
12
12
  import {
13
13
  ensureAllAgentSymlinks
14
- } from "./chunk-ATKW3SYL.js";
14
+ } from "./chunk-L2R3LN2P.js";
15
15
  import {
16
16
  MCP_LEGACY_KEY,
17
17
  MCP_PRIMARY_KEY
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  embed
3
- } from "./chunk-AP455LBW.js";
3
+ } from "./chunk-XZXBB3TN.js";
4
4
  import {
5
5
  reserveVersions,
6
6
  vectorToBlob
7
- } from "./chunk-EDH54E5A.js";
7
+ } from "./chunk-VSRPS3J7.js";
8
8
  import {
9
9
  getClient
10
- } from "./chunk-RWSLVYTE.js";
10
+ } from "./chunk-AOHXREB7.js";
11
11
 
12
12
  // src/lib/documents.ts
13
13
  import crypto from "crypto";
@@ -270,7 +270,7 @@ async function ingestDocument(input) {
270
270
  await client.batch([documentStmt, ...chunkStmts], "write");
271
271
  const embedded = vectors.filter((v) => v !== null).length;
272
272
  const originalTexts = input.chunks.map((c) => c.text);
273
- import("./doc-graph-extractor-LR5KMPH7.js").then(
273
+ import("./doc-graph-extractor-F6ODFIID.js").then(
274
274
  ({ extractAndStoreDocumentGraph }) => extractAndStoreDocumentGraph(documentId, originalTexts)
275
275
  ).catch((err) => {
276
276
  process.stderr.write(
@@ -11,6 +11,9 @@ function daemonReadyPath() {
11
11
  function eventLoopBlockedMarkerPath() {
12
12
  return join(exeDir(), "session-cache", "event-loop-blocked.marker");
13
13
  }
14
+ function eventLoopHeartbeatPath() {
15
+ return join(exeDir(), "session-cache", "event-loop-heartbeat");
16
+ }
14
17
  var _readyGeneration;
15
18
  function setDaemonReadyGeneration(generation) {
16
19
  _readyGeneration = generation;
@@ -58,6 +61,7 @@ function isDaemonReady(maxAgeMs = 3e4) {
58
61
 
59
62
  export {
60
63
  daemonReadyPath,
64
+ eventLoopHeartbeatPath,
61
65
  setDaemonReadyGeneration,
62
66
  writeDaemonReady,
63
67
  clearDaemonReady,
@@ -263,7 +263,7 @@ async function runRegistryProxy(options = registryProxyOptionsFromEnv()) {
263
263
  await new Promise((resolve) => server.listen(options.port, options.host, resolve));
264
264
  console.log(`exe-registry-proxy listening on ${options.host ?? "0.0.0.0"}:${options.port}`);
265
265
  console.log(`proxying /v2/${options.allowedNamespace ?? "askexe"}/* -> ${options.upstream ?? "https://ghcr.io"}`);
266
- const { licenseSyncConfigFromEnv, startLicenseSyncScheduler } = await import("./license-sync-UWE6GEB4.js");
266
+ const { licenseSyncConfigFromEnv, startLicenseSyncScheduler } = await import("./license-sync-N3UJFWAW.js");
267
267
  const syncConfig = licenseSyncConfigFromEnv();
268
268
  if (syncConfig) {
269
269
  startLicenseSyncScheduler(syncConfig);