@askexenow/exe-os 0.9.340 → 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 (417) 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-EC6M7KTX.js → active-agent-PVGE57FY.js} +5 -5
  7. package/dist/{active-agent-WHIUCHLA.js → active-agent-TNIO6IY3.js} +5 -5
  8. package/dist/{agentic-ontology-RNSXGXW4.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-MFY6BHKE.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-3Y2FHGZU.js +425 -0
  13. package/dist/{behaviors-HLZUJSMP.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 +26 -24
  24. package/dist/bin/cli.js +111 -25
  25. package/dist/bin/customer-readiness.js +1 -1
  26. package/dist/bin/deferred-daemon-restart.js +97 -90
  27. package/dist/bin/exe-agent-config.js +9 -8
  28. package/dist/bin/exe-agent.js +20 -20
  29. package/dist/bin/exe-assign.js +12 -12
  30. package/dist/bin/exe-boot.js +201 -68
  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 +26 -24
  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 +29 -28
  42. package/dist/bin/exe-kill.js +31 -29
  43. package/dist/bin/exe-launch-agent.js +129 -68
  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 +27 -25
  47. package/dist/bin/exe-pending-notifications.js +26 -24
  48. package/dist/bin/exe-pending-reviews.js +26 -24
  49. package/dist/bin/exe-rename.js +7 -7
  50. package/dist/bin/exe-review.js +30 -28
  51. package/dist/bin/exe-search.js +11 -9
  52. package/dist/bin/exe-session-cleanup.js +116 -86
  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 +27 -25
  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 +27 -25
  62. package/dist/bin/graph-backfill.js +9 -9
  63. package/dist/bin/graph-export.js +9 -9
  64. package/dist/bin/import-history.js +11 -11
  65. package/dist/bin/install.js +102 -95
  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 +484 -0
  73. package/dist/bin/registry-proxy.js +1 -1
  74. package/dist/bin/scan-tasks.js +26 -24
  75. package/dist/bin/setup.js +6 -5
  76. package/dist/bin/shard-migrate.js +9 -9
  77. package/dist/bin/stack-update.js +15 -9
  78. package/dist/bin/update.js +1 -1
  79. package/dist/bin/vps-health-gate.js +1 -1
  80. package/dist/boot-generation-BL2ISK4U.js +22 -0
  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-YOKVMMOL.js → capability-cards-DN5UIKVN.js} +4 -4
  86. package/dist/{capacity-monitor-S54IOWRL.js → capacity-monitor-ZG5GGFR2.js} +27 -25
  87. package/dist/{catchup-brief-DRRQCMKA.js → catchup-brief-D6HH6DWS.js} +32 -29
  88. package/dist/{support-outbox-MGUVVGHT.js → chunk-25X4JD2V.js} +28 -12
  89. package/dist/{chunk-IYB2NIW3.js → chunk-2KZNGDSW.js} +1 -1
  90. package/dist/{chunk-FUIIVSW6.js → chunk-2WAVZ5UJ.js} +1 -1
  91. package/dist/{chunk-K5WFKEXQ.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-VI7L43DC.js → chunk-4CMVFVFC.js} +173 -69
  95. package/dist/{chunk-BU2QQWBQ.js → chunk-4J4PMPXZ.js} +3 -2
  96. package/dist/{chunk-JD5S5AAV.js → chunk-4N2NRGCM.js} +2 -2
  97. package/dist/chunk-4QCFFW2H.js +378 -0
  98. package/dist/{chunk-7EA7LYW4.js → chunk-4VSV5P4D.js} +4 -4
  99. package/dist/{chunk-52KNOQMK.js → chunk-4ZCD2UWW.js} +39 -10
  100. package/dist/{chunk-DZ6OQM67.js → chunk-5ERDIOV3.js} +2 -2
  101. package/dist/chunk-5H47VHB7.js +30 -0
  102. package/dist/{chunk-UCQITDLM.js → chunk-5TY4FPH6.js} +1 -1
  103. package/dist/{chunk-R44Z32O2.js → chunk-6CH3TPHR.js} +2 -2
  104. package/dist/{chunk-WYLV4S6A.js → chunk-6WQ3NNCE.js} +3 -3
  105. package/dist/{chunk-HHIBOU3P.js → chunk-6XWTQUO4.js} +1 -1
  106. package/dist/chunk-76CJBM36.js +88 -0
  107. package/dist/{chunk-H2L4PHGH.js → chunk-7CTRGNLW.js} +2 -2
  108. package/dist/{chunk-XUKPALWT.js → chunk-7V4JADD6.js} +2 -2
  109. package/dist/{chunk-RMOBQ6A5.js → chunk-AD2VCHSS.js} +1 -1
  110. package/dist/{chunk-QXSBB26A.js → chunk-AJYCFKJR.js} +1 -1
  111. package/dist/chunk-AM7S2TY6.js +54 -0
  112. package/dist/{chunk-HEPR6QTL.js → chunk-AOHXREB7.js} +334 -66
  113. package/dist/{chunk-FNZR3B7U.js → chunk-ASAFVDVR.js} +1 -1
  114. package/dist/{chunk-TALWBVZE.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-XCTGRD4S.js → chunk-CE7F6RHG.js} +587 -77
  118. package/dist/{chunk-7WPOJDTA.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-AOO77BDE.js → chunk-EUS4QUKP.js} +1 -1
  123. package/dist/{chunk-RLRT2BVM.js → chunk-EV46QTD3.js} +1 -1
  124. package/dist/{chunk-PAEXYFMY.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-LMZISHSJ.js → chunk-FPFPLPUY.js} +6 -6
  128. package/dist/{chunk-7TS64TBG.js → chunk-G4RGKBCA.js} +8 -3
  129. package/dist/{chunk-4IYSBPX3.js → chunk-G5T6KDG4.js} +1 -1
  130. package/dist/{chunk-7WDXEKUL.js → chunk-GBTTBXAF.js} +4 -4
  131. package/dist/{chunk-6MRWJMI5.js → chunk-GDIJE6D7.js} +1 -1
  132. package/dist/{chunk-AVKXCSBI.js → chunk-GG5NDQNN.js} +2 -2
  133. package/dist/{chunk-I3XKO3KQ.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-F55JF43M.js → chunk-H6BV5TKD.js} +39 -24
  137. package/dist/{chunk-HCJCW7X4.js → chunk-H7I47RS5.js} +34 -1
  138. package/dist/{chunk-65SVQELL.js → chunk-HA5R6USD.js} +31 -5
  139. package/dist/{chunk-VJHUVFIW.js → chunk-HAF2DJYV.js} +3 -3
  140. package/dist/chunk-HJ447YER.js +224 -0
  141. package/dist/chunk-HV4KESRY.js +395 -0
  142. package/dist/{chunk-B76TSEP3.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-MW2GJJ53.js → chunk-JGIPOUIK.js} +3 -3
  146. package/dist/{chunk-2233TQCA.js → chunk-JLZ4RYSD.js} +2 -2
  147. package/dist/{chunk-Q7L6G6KV.js → chunk-JMYHW3AL.js} +2 -2
  148. package/dist/{chunk-OJTJYEMX.js → chunk-JPUZPAAF.js} +4 -4
  149. package/dist/{chunk-XWHE4LZK.js → chunk-JTBIS4R5.js} +21 -2
  150. package/dist/{chunk-5Z5NATNS.js → chunk-K7KFGDWF.js} +1 -1
  151. package/dist/{chunk-UIV2WPBT.js → chunk-KGWRTRKC.js} +2 -2
  152. package/dist/{chunk-KTPG4XKI.js → chunk-KP3U5QGJ.js} +1 -1
  153. package/dist/{chunk-TLYAEISW.js → chunk-KW2SD2FL.js} +2 -2
  154. package/dist/{chunk-X7H3HMFH.js → chunk-KWZMQACA.js} +11 -7
  155. package/dist/{chunk-OFX5B2S7.js → chunk-L2R3LN2P.js} +1 -1
  156. package/dist/{chunk-T4KZ2Z2N.js → chunk-L4A5DL6Z.js} +3 -3
  157. package/dist/{chunk-X425OEYF.js → chunk-LU2FALL6.js} +3 -3
  158. package/dist/{chunk-6M36JFFD.js → chunk-MKYFAKDW.js} +4 -4
  159. package/dist/{chunk-I5RLNOFK.js → chunk-MOPUCPXK.js} +12 -4
  160. package/dist/{chunk-ZIVEA3NB.js → chunk-MR6LHP4F.js} +1 -1
  161. package/dist/chunk-MVYB76QG.js +341 -0
  162. package/dist/{chunk-2SG2UGCH.js → chunk-MZM6EJCU.js} +4 -4
  163. package/dist/{chunk-ZREGOV2Q.js → chunk-N7QJKQMX.js} +258 -14
  164. package/dist/{chunk-QLFRCA6I.js → chunk-NBZL5CGA.js} +93 -12
  165. package/dist/{chunk-QFPTDSY2.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-ATOU6CYR.js → chunk-OLMQ4UOF.js} +57 -11
  171. package/dist/{chunk-6HBURYON.js → chunk-OTF44GXL.js} +4 -4
  172. package/dist/{chunk-DILD54TU.js → chunk-OZEBAGKR.js} +277 -137
  173. package/dist/{chunk-DADMPMYX.js → chunk-P5HIWY2E.js} +1 -1
  174. package/dist/{chunk-EIF2LQHZ.js → chunk-PDWS3E22.js} +55 -4
  175. package/dist/{chunk-KTY7I7UH.js → chunk-PPCDBE6Z.js} +1 -1
  176. package/dist/{chunk-XACL67CS.js → chunk-PQIDGXSG.js} +13 -4
  177. package/dist/chunk-PWUFMX75.js +186 -0
  178. package/dist/{chunk-UPWE5NOG.js → chunk-QDGZJ653.js} +3 -3
  179. package/dist/{chunk-MQRFKSLI.js → chunk-QOO5RW3K.js} +6 -5
  180. package/dist/{chunk-KCC5A7YL.js → chunk-QQ4E2RYW.js} +95 -18
  181. package/dist/{chunk-BPC5LZ6Y.js → chunk-QRYVCDWS.js} +2 -2
  182. package/dist/{chunk-Z42MXYWW.js → chunk-QWVXN224.js} +110 -28
  183. package/dist/{chunk-542EWGY3.js → chunk-QYZJHTNE.js} +26 -27
  184. package/dist/{chunk-I7Z6KTGF.js → chunk-R2NN3JKH.js} +43 -6
  185. package/dist/{chunk-3OBWSCJN.js → chunk-RACAOE2Z.js} +14 -14
  186. package/dist/{chunk-5RACW3LX.js → chunk-RAXVPNMR.js} +1 -1
  187. package/dist/{chunk-2HZY3ECT.js → chunk-RHWZUUS4.js} +6 -6
  188. package/dist/{chunk-RNAYCUNM.js → chunk-S3THSOWV.js} +1 -1
  189. package/dist/{chunk-W7DHFGCB.js → chunk-S7QUM2UK.js} +2 -2
  190. package/dist/{chunk-SSTLTIF3.js → chunk-SKGMF2SO.js} +25 -2
  191. package/dist/{chunk-GN45PBWI.js → chunk-SQKXKV2Y.js} +2 -2
  192. package/dist/{chunk-QZLIZAS7.js → chunk-TLT7NZCW.js} +4 -4
  193. package/dist/chunk-TTCUG2CF.js +91 -0
  194. package/dist/chunk-UEA3LXOB.js +40 -0
  195. package/dist/{chunk-DRCRZIIJ.js → chunk-UNXQBELK.js} +1 -1
  196. package/dist/{chunk-PLRIJALF.js → chunk-UP75Z5X7.js} +921 -176
  197. package/dist/{chunk-TNJRWUCE.js → chunk-USSB56WK.js} +1 -1
  198. package/dist/{chunk-KMBEL7VB.js → chunk-UUEKJDK6.js} +90 -10
  199. package/dist/{chunk-XJI7Z6LZ.js → chunk-UUQBZPJJ.js} +1 -1
  200. package/dist/{chunk-RRWDYOQS.js → chunk-V3EEVY4L.js} +1 -1
  201. package/dist/{chunk-N5I7RL3I.js → chunk-VPZHJCKW.js} +2 -2
  202. package/dist/chunk-VRAQTFD6.js +265 -0
  203. package/dist/{chunk-H37HHX3E.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-YE7NH53A.js → chunk-X33NYQYJ.js} +2 -2
  209. package/dist/{chunk-UXBD22CD.js → chunk-XHK3FS3W.js} +3 -2
  210. package/dist/{chunk-3QDSCJ3F.js → chunk-XZXBB3TN.js} +2 -2
  211. package/dist/{chunk-JSKBHUR7.js → chunk-YCANDMI2.js} +2 -2
  212. package/dist/{chunk-JBSCL2XT.js → chunk-YLXTKI6M.js} +1 -1
  213. package/dist/{chunk-G7WO77Z2.js → chunk-YTCFACP4.js} +812 -896
  214. package/dist/{chunk-LTVCRHHD.js → chunk-Z6RSN7KS.js} +7 -6
  215. package/dist/{cleanup-graph-garbage-KUABW6LS.js → cleanup-graph-garbage-XWUFAMFO.js} +6 -6
  216. package/dist/{co-activation-XMPHKGHR.js → co-activation-ZCHPLLP6.js} +4 -4
  217. package/dist/{co-occurrence-SHKSJ6CV.js → co-occurrence-KG3LKALN.js} +4 -4
  218. package/dist/{code-context-index-EXXDY3QZ.js → code-context-index-WSOJQ72R.js} +5 -5
  219. package/dist/{content-extractor-RHITF2KM.js → content-extractor-NXYNEF5K.js} +2 -2
  220. package/dist/{conversation-wiki-populator-WU4HEQ7C.js → conversation-wiki-populator-WQN3IUU6.js} +1 -1
  221. package/dist/{crdt-sync-UJELKSNX.js → crdt-sync-4PFGPZXV.js} +8 -1
  222. package/dist/{crm-webhook-HHNBS7LY.js → crm-webhook-II7Z45Q6.js} +2 -2
  223. package/dist/cto-delegation-gate-JWWOJPNC.js +669 -0
  224. package/dist/{daemon-auth-7IFSV5FG.js → daemon-auth-3FEAHFWC.js} +5 -3
  225. package/dist/{daemon-orchestration-7QB6QOXT.js → daemon-orchestration-FX4XZDR5.js} +46 -27
  226. package/dist/{daemon-ready-5XI5BIJD.js → daemon-ready-4JTSFKAY.js} +1 -1
  227. package/dist/{daemon-ready-signal-E7VMIQ6I.js → daemon-ready-signal-LPAZWQOV.js} +5 -1
  228. package/dist/daemon-restart-circuit-breaker-PEGEIP6H.js +35 -0
  229. package/dist/daemon-timer-report-NM44WQRH.js +25 -0
  230. package/dist/{db-backup-DLD4QZBO.js → db-backup-W2QFSYQC.js} +15 -5
  231. package/dist/{db-restore-events-JVEEP52Z.js → db-restore-events-MQ2DBGEQ.js} +2 -2
  232. package/dist/dispatch-ack-VYH3ONSS.js +27 -0
  233. package/dist/{doc-graph-extractor-3TRLGD7M.js → doc-graph-extractor-F6ODFIID.js} +4 -4
  234. package/dist/{documents-FHIBU7KJ.js → documents-23WX2FPQ.js} +12 -12
  235. package/dist/dreaming-NWD22UQ5.js +46 -0
  236. package/dist/{exe-drift-KY2KHZEL.js → exe-drift-CW72FBGE.js} +5 -5
  237. package/dist/{exe-export-SP6G3QF6.js → exe-export-AUJ7CV7G.js} +11 -11
  238. package/dist/{exe-import-KJU7FBVQ.js → exe-import-JX4I52VE.js} +11 -11
  239. package/dist/{exe-key-M6TYHNUW.js → exe-key-2N6LY2BU.js} +241 -226
  240. package/dist/{exe-org-BGZNNE4H.js → exe-org-X4CSNCKS.js} +3 -3
  241. package/dist/{exe-snapshot-ZNPGUKRZ.js → exe-snapshot-XZ7FVCYZ.js} +31 -29
  242. package/dist/{fast-db-init-QQB6IVWV.js → fast-db-init-4CWHSOOR.js} +1 -1
  243. package/dist/{founder-context-PQR3BUS7.js → founder-context-7L3CFPYN.js} +4 -4
  244. package/dist/gateway/index.js +14 -14
  245. package/dist/{gateway-client-GRBOJQYC.js → gateway-client-7LMZKHTH.js} +1 -1
  246. package/dist/git-main-guard-UZP3KXYI.js +39 -0
  247. package/dist/{git-staleness-UGB5J3K7.js → git-staleness-CI2R4QOJ.js} +4 -4
  248. package/dist/{global-procedures-R7KRREEK.js → global-procedures-XQX3LUH6.js} +6 -6
  249. package/dist/{graph-auto-extract-LKIQ57PL.js → graph-auto-extract-OURWMGBS.js} +4 -4
  250. package/dist/{hook-integrity-WURH6DS3.js → hook-integrity-XY47IM7G.js} +1 -1
  251. package/dist/hook-prefetch-PHRRKY4C.js +137 -0
  252. package/dist/hooks/bug-report-worker.js +32 -28
  253. package/dist/hooks/codex-stop-task-finalizer.js +32 -28
  254. package/dist/hooks/commit-complete.js +29 -27
  255. package/dist/hooks/error-recall.js +12 -11
  256. package/dist/hooks/exe-heartbeat-hook.js +6 -6
  257. package/dist/hooks/ingest-worker.js +11 -11
  258. package/dist/hooks/ingest.js +18 -18
  259. package/dist/hooks/instructions-loaded.js +7 -7
  260. package/dist/hooks/manifest.json +20 -20
  261. package/dist/hooks/notification.js +7 -7
  262. package/dist/hooks/post-compact.js +28 -26
  263. package/dist/hooks/post-tool-combined.js +12 -12
  264. package/dist/hooks/pre-compact.js +29 -27
  265. package/dist/hooks/pre-tool-use.js +180 -47
  266. package/dist/hooks/prompt-submit.js +324 -273
  267. package/dist/hooks/session-end.js +35 -33
  268. package/dist/hooks/session-start.js +28 -21
  269. package/dist/hooks/stop.js +35 -33
  270. package/dist/hooks/subagent-stop.js +28 -26
  271. package/dist/hooks/summary-worker.js +36 -34
  272. package/dist/index.js +39 -37
  273. package/dist/{installer-SB2N5NKH.js → installer-G3JAO3NT.js} +9 -9
  274. package/dist/{installer-MZWWBXM6.js → installer-JND3RJ6Q.js} +9 -9
  275. package/dist/{installer-MNPXDLGG.js → installer-L7EVH5U5.js} +9 -9
  276. package/dist/{intercom-queue-VU2G6F5R.js → intercom-queue-ZFEQALR3.js} +25 -23
  277. package/dist/{key-backup-status-TNEHXA2X.js → key-backup-status-LOSMVATJ.js} +2 -2
  278. package/dist/lib/agent-config.js +4 -3
  279. package/dist/lib/cloud-sync.js +19 -19
  280. package/dist/lib/config.js +2 -2
  281. package/dist/lib/consolidation.js +9 -9
  282. package/dist/lib/crypto.js +3 -3
  283. package/dist/lib/database.js +6 -4
  284. package/dist/lib/db-daemon-client.js +5 -5
  285. package/dist/lib/db-read-worker-client.js +9 -3
  286. package/dist/lib/db.js +6 -4
  287. package/dist/lib/device-registry.js +3 -3
  288. package/dist/lib/embed-worker.js +2 -2
  289. package/dist/lib/embedder.js +5 -5
  290. package/dist/lib/employee-templates.js +7 -7
  291. package/dist/lib/employees.js +10 -4
  292. package/dist/lib/exe-daemon-client.js +4 -4
  293. package/dist/lib/exe-daemon.js +651 -158
  294. package/dist/lib/hybrid-search.js +11 -9
  295. package/dist/lib/identity.js +4 -4
  296. package/dist/lib/keychain.js +1 -1
  297. package/dist/lib/license.js +4 -4
  298. package/dist/lib/messaging.js +28 -24
  299. package/dist/lib/post-tool-memory.js +3 -3
  300. package/dist/lib/registry-proxy.js +1 -1
  301. package/dist/lib/reminders.js +15 -7
  302. package/dist/lib/schedules.js +9 -9
  303. package/dist/lib/session-registry.js +6 -6
  304. package/dist/lib/skill-learning.js +10 -10
  305. package/dist/lib/status-brief.js +4 -4
  306. package/dist/lib/store.js +8 -8
  307. package/dist/lib/task-router.js +5 -5
  308. package/dist/lib/tasks.js +29 -25
  309. package/dist/lib/tmux-routing.js +56 -25
  310. package/dist/lib/tmux-status.js +9 -3
  311. package/dist/lib/tmux-transport.js +1 -1
  312. package/dist/lib/token-spend.js +5 -5
  313. package/dist/lib/transport.js +2 -2
  314. package/dist/lib/ws-client.js +1 -1
  315. package/dist/{license-gate-BYDMFMFT.js → license-gate-QTRQHV4F.js} +5 -5
  316. package/dist/{license-sync-N3RNYVP2.js → license-sync-N3UJFWAW.js} +4 -4
  317. package/dist/mcp/register-tools.js +96 -89
  318. package/dist/mcp/server.js +98 -91
  319. package/dist/mcp/tools/complete-reminder.js +6 -6
  320. package/dist/mcp/tools/create-reminder.js +6 -6
  321. package/dist/mcp/tools/create-task.js +37 -28
  322. package/dist/mcp/tools/deactivate-behavior.js +11 -11
  323. package/dist/mcp/tools/list-reminders.js +6 -6
  324. package/dist/mcp/tools/list-tasks.js +35 -29
  325. package/dist/mcp/tools/send-message.js +28 -26
  326. package/dist/mcp/tools/update-task.js +34 -28
  327. package/dist/{mcp-http-config-EMAVS2JI.js → mcp-http-config-BDL36JZ3.js} +6 -6
  328. package/dist/{mcp-port-config-FFAMMLLE.js → mcp-port-config-6HYY6J7K.js} +2 -2
  329. package/dist/mcp-session-identity-T7H2EKFQ.js +177 -0
  330. package/dist/{memory-cards-TQRLZI4D.js → memory-cards-ZRDW7QBX.js} +8 -8
  331. package/dist/{memory-graph-extractor-IWGNVAFU.js → memory-graph-extractor-QLXDMHRS.js} +5 -5
  332. package/dist/{memory-poisoning-defense-T4ITBGSG.js → memory-poisoning-defense-HJTXYCWH.js} +4 -4
  333. package/dist/{memory-pressure-watchdog-RRIAXPXQ.js → memory-pressure-watchdog-HN5X7AVN.js} +76 -37
  334. package/dist/{memory-queue-X2CSEAKE.js → memory-queue-2UOOF27L.js} +5 -3
  335. package/dist/{memory-queue-client-BKQHTYTH.js → memory-queue-client-O5U6F6XP.js} +6 -6
  336. package/dist/{memory-reflection-6N4J2FL7.js → memory-reflection-WVNFBJAA.js} +4 -4
  337. package/dist/{monitor-grants-RZOVSYVO.js → monitor-grants-E3ELDEWD.js} +5 -5
  338. package/dist/{monitor-identity-MOXISYNG.js → monitor-identity-GLFZSEAH.js} +2 -2
  339. package/dist/notification-ledger-SZEPGJQ7.js +409 -0
  340. package/dist/{notifications-KONB3C62.js → notifications-4UT53CDG.js} +25 -23
  341. package/dist/{orchestration-events-5SIJOE4H.js → orchestration-events-WV4NWKZH.js} +5 -5
  342. package/dist/{orchestration-phase-CXRCBCK7.js → orchestration-phase-AWBXPO52.js} +3 -3
  343. package/dist/orchestrator-UAC3RW2T.js +47 -0
  344. package/dist/{pipeline-router-O6HU7DKH.js → pipeline-router-LM53NMWJ.js} +5 -5
  345. package/dist/{plan-limits-GRNBOBB3.js → plan-limits-2FEY2GOS.js} +7 -7
  346. package/dist/platform-procedures-X5DFJFV7.js +13 -0
  347. package/dist/{preferences-TYTGDXQZ.js → preferences-TWIXZBKS.js} +2 -2
  348. package/dist/{project-boot-SD7GM24K.js → project-boot-4NUH5FRU.js} +2 -2
  349. package/dist/{projection-worker-ZVOFHTXT.js → projection-worker-FZ7YSN3G.js} +5 -5
  350. package/dist/{prospective-memory-W6S67LZZ.js → prospective-memory-6D2ASWM3.js} +4 -4
  351. package/dist/{push-notifications-W5JRXLKJ.js → push-notifications-U6FIBQRW.js} +3 -3
  352. package/dist/{reranker-QATGTAPC.js → reranker-GYYRPANK.js} +3 -3
  353. package/dist/{retrieval-health-TWHKYCRK.js → retrieval-health-4Z242P3B.js} +1 -1
  354. package/dist/{review-polling-PCMD5BFN.js → review-polling-HXAFJZDA.js} +26 -24
  355. package/dist/runtime/index.js +37 -35
  356. package/dist/{session-events-3LCVQEL7.js → session-events-O3BV56ZX.js} +26 -24
  357. package/dist/{session-kill-telemetry-CZSPN5V6.js → session-kill-telemetry-AELE4JDK.js} +26 -24
  358. package/dist/session-mcp-config-YKNXG5DW.js +50 -0
  359. package/dist/{session-scope-CFHVSVAQ.js → session-scope-5EAPUT45.js} +25 -23
  360. package/dist/setup-wizard-NB6R4QVS.js +14 -0
  361. package/dist/{shard-manager-MBWQEYNG.js → shard-manager-35PWFR3B.js} +3 -3
  362. package/dist/{skill-refinement-74T6VDFM.js → skill-refinement-DVSYXBBP.js} +5 -5
  363. package/dist/stack-promote-RSOWO6EY.js +130 -0
  364. package/dist/{stack-release-XXMV7SPX.js → stack-release-HGFFFCGC.js} +112 -22
  365. package/dist/{stack-update-E2TKHHSQ.js → stack-update-ATCJFOEK.js} +7 -5
  366. package/dist/{steward-gate-WT7WXQIE.js → steward-gate-3GQ5XKMJ.js} +5 -5
  367. package/dist/support-inbox-4L62P4EP.js +33 -0
  368. package/dist/support-outbox-WHGPUYL2.js +16 -0
  369. package/dist/task-enforcement-IPIZX2MM.js +90 -0
  370. package/dist/{task-scope-CQEG5SSJ.js → task-scope-FOIW25HR.js} +27 -23
  371. package/dist/{tasks-crud-UGK5A25L.js → tasks-crud-HBDKE6C5.js} +35 -23
  372. package/dist/tasks-notify-G2U2U2YA.js +53 -0
  373. package/dist/{tasks-review-JKBRACII.js → tasks-review-27SFX5XN.js} +27 -23
  374. package/dist/{telemetry-upload-7LBYGPCB.js → telemetry-upload-ZOXHRWR5.js} +9 -9
  375. package/dist/tmux-command-guard-KSJKIX3C.js +117 -0
  376. package/dist/{token-budget-QBRJR4M5.js → token-budget-5Y4YPDO3.js} +5 -5
  377. package/dist/{tool-capability-index-Q6YQDL7I.js → tool-capability-index-VYF5GNJ2.js} +1 -1
  378. package/dist/{tool-telemetry-ULIDUK3P.js → tool-telemetry-KBXSBDTK.js} +1 -1
  379. package/dist/tui/App.js +40 -38
  380. package/dist/{tui-data-NPTGKT37.js → tui-data-NLFMBIQI.js} +25 -23
  381. package/dist/{update-check-HFO4VHO4.js → update-check-3FHAWIG2.js} +7 -3
  382. package/dist/update-support-UVUSZG7R.js +355 -0
  383. package/dist/{whatsapp-accounts-BWRZUY23.js → whatsapp-accounts-BFIOXYW5.js} +1 -1
  384. package/dist/{whatsapp-config-GOSELKTE.js → whatsapp-config-FAX6EA5K.js} +20 -13
  385. package/dist/{worker-gate-MXUQUG4M.js → worker-gate-3KUBAU32.js} +3 -3
  386. package/dist/{workflow-engine-EWCOLD47.js → workflow-engine-YITHXZR5.js} +2 -2
  387. package/dist/{working-memory-PY4AG577.js → working-memory-NUVB5SFV.js} +1 -1
  388. package/dist/worktree-LL62PLQB.js +47 -0
  389. package/dist/{worktree-sweep-ZAG3V24E.js → worktree-sweep-WTK3MTKH.js} +7 -7
  390. package/package.json +3 -2
  391. package/release-notes.json +86 -76
  392. package/dist/branch-hygiene-R5NVTRAY.js +0 -138
  393. package/dist/chunk-6IRVGOUL.js +0 -30
  394. package/dist/chunk-HMP5VT6A.js +0 -118
  395. package/dist/chunk-PVYR4FCQ.js +0 -113
  396. package/dist/chunk-UFAXZ2PY.js +0 -138
  397. package/dist/chunk-Y25OJWOQ.js +0 -45
  398. package/dist/chunk-YGAAZN3E.js +0 -47
  399. package/dist/cto-delegation-gate-DXNF5HVW.js +0 -290
  400. package/dist/dispatch-ack-4S44HBWB.js +0 -15
  401. package/dist/dreaming-OMFUEUCQ.js +0 -44
  402. package/dist/orchestrator-DUUX7FQV.js +0 -45
  403. package/dist/setup-wizard-TOFEJPLF.js +0 -13
  404. package/dist/tasks-notify-SMLDFBWM.js +0 -50
  405. package/dist/worktree-GVF2I5FP.js +0 -31
  406. /package/dist/{chunk-FLNSJ2TC.js → chunk-GIBYNT6W.js} +0 -0
  407. /package/dist/{chunk-NQBRGXYR.js → chunk-JRM4TAGS.js} +0 -0
  408. /package/dist/{chunk-WHRTDN5J.js → chunk-MGGOSFCR.js} +0 -0
  409. /package/dist/{chunk-D3QASX2W.js → chunk-QIFYLIUF.js} +0 -0
  410. /package/dist/{chunk-OADURIIN.js → chunk-WTH4CSAP.js} +0 -0
  411. /package/dist/{core-memory-VO5ZIBKH.js → core-memory-GAC6EWOQ.js} +0 -0
  412. /package/dist/{entity-boost-DNI4A5I7.js → entity-boost-NT6UO2Z3.js} +0 -0
  413. /package/dist/{message-queue-client-Q5BW3O5W.js → message-queue-client-4EOQRUXW.js} +0 -0
  414. /package/dist/{oauth-server-ROQFOEMM.js → oauth-server-67YBDP32.js} +0 -0
  415. /package/dist/{webhook-pipe-FZYLO6RR.js → webhook-pipe-LEXMUQ5B.js} +0 -0
  416. /package/dist/{wiki-acl-JA5UCQZ4.js → wiki-acl-74BLWG6J.js} +0 -0
  417. /package/dist/{wiki-client-VNDOBK63.js → wiki-client-EAN7F5LV.js} +0 -0
@@ -1,6 +1,90 @@
1
1
  {
2
- "current": "0.9.340",
2
+ "current": "0.9.342",
3
3
  "notes": {
4
+ "0.9.342": {
5
+ "version": "0.9.342",
6
+ "date": "2026-07-13",
7
+ "features": [
8
+ "log every memory READ, joined to task outcome (455be5c7)",
9
+ "timer health dashboard — per-timer blocking risk (9ddc55b2)",
10
+ "additive daily_push schedule + pusher hook (feature 433fc7a1)",
11
+ "surface pending-review + blocked sections in employee boot brief",
12
+ "dedup license prompt in setup wizard + wire codex-reviewd CLI subcommand"
13
+ ],
14
+ "fixes": [
15
+ "align the scope-import heuristic with the per-query check",
16
+ "a neighbouring command's flags are not git's flags",
17
+ "move fast-db-init to src/lib + close the boundary rule's blind spot",
18
+ "close raw product query-param exfil on the feature-list path + refresh fs mock",
19
+ "split LIVENESS from READINESS — end the daemon kill-loop (bug 679aeb69)",
20
+ "feature requests carry product end-to-end (bug b8e990ed)",
21
+ "async kill on the session-TTL timer — final sync-on-timer, closes 1c870c78",
22
+ "round-4 — thrown-release on all spawn paths + gate close-task fallthrough (final)",
23
+ "candidate detection must prefix-match --force-create= (6aaea78f)",
24
+ "close 3 long-option main-rewrite bypasses (6aaea78f)",
25
+ "async-ify the session-TTL timer path — closes 1c870c78",
26
+ "round-3 — kernel-atomic bucketed-mkdir claim + gate ALL spawn paths (codex audit)",
27
+ "restore hardened argv-aware main guard; tighten stub cleanup",
28
+ "de5d9fe8 final — 3 guarantee controls + paused-human & legacy-branch docs",
29
+ "round 3 — default bind escalation + 64KiB PEM cap",
30
+ "round-2 — async cleanup-signal path + intercom capture; revert-proof reaper test (bug 1c870c78)",
31
+ "de5d9fe8 round 2 — buffer-stability wedge signal + non-destructive recovery + single-capture",
32
+ "round 2 — cto2 bind escalation + PEM DoS/pattern misses",
33
+ "clean up legacy plaintext SQLite stubs on init (bug 7a334eda)",
34
+ "scope destructive reset guard to actual main risk (bug 6aaea78f)",
35
+ "wake live reviewers + kill remaining timer sync-subprocess (bugs 018aaf31, 1c870c78)",
36
+ "round-2 — claim-gate BOTH dispatch paths + generation-exclusive stale takeover (codex audit)",
37
+ "dwell-gated wedged-input recovery + phantom-injection controls",
38
+ "redactor pattern gaps + initial-bind identity gate",
39
+ "task-keyed scope-independent spawn dedup (bugs 03bffd00 / f2f7bf19)"
40
+ ],
41
+ "security": [],
42
+ "other": [
43
+ "v0.9.342 — bug-zero wave",
44
+ "size the multi-process race for a shared CI runner",
45
+ "keep each race trial inside one time bucket (CI flake, not a dedup hole)",
46
+ "mock execFile — wake-daemon's promisify(execFile) runs at module load",
47
+ "stop the triage note from becoming a finding of its own",
48
+ "triage the 6 redaction-test fixtures that were failing gitleaks",
49
+ "stop the prompt hook burning 35s of CPU and returning zero bytes (bug 9b81ea43)",
50
+ "batch task reconcile, memoize tmux session, index task_file + null vectors (bug 4b2d2d10)",
51
+ "bound daemon boot probe, gate doomed DB fallback, take behaviors export off the critical path (bug 96a28cf2)",
52
+ "honesty cleanup for coo_restart guard — narrow claim, surface follow-up, pin failedAt reset (bug 45d94865 round 3)",
53
+ "mirror idempotency_key column + partial unique index in fixture",
54
+ "behavioral self-heal routing guards, replacing fake source-string ones (bug e7003d6f)",
55
+ "Reapply \"Merge branch 'fix/oom-20260710' into integration/bug-zero-v2\"",
56
+ "Revert \"Merge branch 'fix/oom-20260710' into integration/bug-zero-v2\"",
57
+ "precise scale-boundedness accounting for memory audit (bug d5a7a1b2)",
58
+ "worktree discipline round-2: fail-closed empty roster + full lock ownership (audit B1+B2)",
59
+ "wire async worktree-collision guard on the daemon path (bug 1c870c78)",
60
+ "resolveProjectDir round-2: symlink containment, exact match, strict scope, sibling ownership (audit B3+B4)",
61
+ "add regression tests for wedged picker-session kill",
62
+ "stop daemon event-loop block in worktree collision guard + cap auto-wake spawns",
63
+ "scale regression for bounded memory audit (bug d5a7a1b2)",
64
+ "strengthen resolver tests: force step-6/cwd path so no-fabrication + cross-scope are real revert-proofs (audit)",
65
+ "harden worktree-discipline tests: assert NO tmux spawn on refusal + roster/lock cases (audit)",
66
+ "resolveProjectDir: validate input, deterministic, no fabrication, scope-isolated (audit BLOCKER 3+4)",
67
+ "release spawn lock on sync ensureEmployee gate refusal (audit BLOCKER 2)"
68
+ ],
69
+ "migration_notes": []
70
+ },
71
+ "0.9.341": {
72
+ "version": "0.9.341",
73
+ "date": "2026-07-06",
74
+ "features": [
75
+ "automated backup restore-verify harness + manifest sidecar (#349)",
76
+ "durable notification ledger (default-OFF) (#350)",
77
+ "backlog auto-reconcile CLI — detect already-shipped records (report-only default, --apply gated) (#352)"
78
+ ],
79
+ "fixes": [
80
+ "reject invalid agent model ids + fail-loud spawn (no silent zombie) (#351)"
81
+ ],
82
+ "security": [
83
+ "telemetry/bug-report egress redaction — redact secrets/mnemonics before outbound telemetry and bug reports (#348)"
84
+ ],
85
+ "other": [],
86
+ "migration_notes": []
87
+ },
4
88
  "0.9.340": {
5
89
  "version": "0.9.340",
6
90
  "date": "2026-07-05",
@@ -9,9 +93,7 @@
9
93
  "restore cloud memory backlog sync (#337)"
10
94
  ],
11
95
  "security": [],
12
- "other": [
13
- "bump v0.9.340 (#346)"
14
- ],
96
+ "other": [],
15
97
  "migration_notes": []
16
98
  },
17
99
  "0.9.339": {
@@ -35,78 +117,6 @@
35
117
  "security": [],
36
118
  "other": [],
37
119
  "migration_notes": []
38
- },
39
- "0.9.337": {
40
- "version": "0.9.337",
41
- "date": "2026-07-05",
42
- "features": [
43
- "monitoring-grant envelope MVP (Model B, default-OFF) (#340)",
44
- "add xAI/Grok models to opencode whitelist (feature 6e59b416) (#315)",
45
- "escalate + auto-cancel tasks blocked >48h (feature 638f8611) (#321)",
46
- "load persistent ~/.exe-os/daemon.env at boot as env fallback (feature ed0e3449) (#316)",
47
- "auto-clone missing stack repos on build VPS (feature 77a7792d) (#320)"
48
- ],
49
- "fixes": [
50
- "harden daemon recovery and task routing (#339)",
51
- "codex review — bypass broken bwrap sandbox, gate on [P0]/[P1], skip drafts",
52
- "codex review --base cannot take a custom prompt (mutually exclusive) — use --base alone",
53
- "quarantine Docker-dependent stack-update.test.ts out of required gate (unblocks merges) (#331)",
54
- "repair codex-review workflow YAML — move prompt to file, fix multi-line body (startup failure)",
55
- "make Claude 1M context opt-in",
56
- "bound prompt hook and setup daemon health",
57
- "resolve worktrees from main repo root",
58
- "refuse ambiguous session-scope fallback",
59
- "isolate parallel task instance claims",
60
- "non-chat/non-build open bug batch"
61
- ],
62
- "security": [],
63
- "other": [
64
- "release: bump exe-os to 0.9.331 (#324)",
65
- "add Codex PR review workflow (self-hosted, no App/webhook)"
66
- ],
67
- "migration_notes": []
68
- },
69
- "0.9.330": {
70
- "version": "0.9.330",
71
- "date": "2026-07-04",
72
- "features": [
73
- "admin-only set_customer_plan MCP tool + POST /admin/customer/plan (feature 46497a13)",
74
- "add license plan-refresh procedure so all agents know how to pick up a plan change"
75
- ],
76
- "fixes": [
77
- "stabilize daemon reconnect CI fallback",
78
- "extract prose graph entities",
79
- "verify prompt task notifications",
80
- "canonicalize claude context model ids",
81
- "harden gateway security defaults",
82
- "route cognition through api router",
83
- "Fix hook latency and stop safety guards",
84
- "verify worktree branch reuse",
85
- "recover deleted worktree daemon sessions",
86
- "sync customer feature status via admin route",
87
- "sanitize styled agent model ids",
88
- "persist otel telemetry to clickhouse",
89
- "sync wiki MCP compose pin with stack manifest",
90
- "fix hook timeout and daemon session env",
91
- "fix task lifecycle cleanup edge cases",
92
- "fix cognition warnings and CI runner cargo isolation",
93
- "fix codex spawn and lane affinity checks",
94
- "bound skill sweep and harden db lock release",
95
- "fix daemon client reconnect persistence",
96
- "isolate MCP request path from event-loop lag + reap orphaned coordinator sessions (bug 6c46d301)"
97
- ],
98
- "security": [],
99
- "other": [
100
- "release: bump exe-os to 0.9.328",
101
- "remove destructive postgres volume guidance",
102
- "sync stack parity wiki mcp pin",
103
- "release: bump exe-os to 0.9.326",
104
- "release: bump exe-os to 0.9.325",
105
- "release: bump npm for v0.9.29 stack manifest",
106
- "release(stack): v0.9.29 — today's merged daemon/gateway/crm/wiki fixes, signed",
107
- "add merge_group trigger to enable GitHub Merge Queue (batches PRs, ends per-push runner storms; runs on self-hosted build-my, zero hosted minutes)"
108
- ],
109
- "migration_notes": []
110
120
  }
111
121
  }
112
122
  }
@@ -1,138 +0,0 @@
1
- import "./chunk-MLKGABMK.js";
2
-
3
- // src/lib/branch-hygiene.ts
4
- import { execFile } from "child_process";
5
- import { promisify } from "util";
6
- var execFileAsync = promisify(execFile);
7
- var GIT_TIMEOUT_MS = 4e3;
8
- var MAX_BRANCHES_SCANNED = 60;
9
- var DEFAULT_LISTING_CAP = 10;
10
- async function git(repoRoot, args) {
11
- const { stdout } = await execFileAsync("git", args, {
12
- cwd: repoRoot,
13
- encoding: "utf8",
14
- timeout: GIT_TIMEOUT_MS
15
- });
16
- return stdout.trim();
17
- }
18
- async function detectRemoteBase(repoRoot) {
19
- for (const candidate of ["main", "master"]) {
20
- try {
21
- await git(repoRoot, ["rev-parse", "--verify", `refs/remotes/origin/${candidate}`]);
22
- return `origin/${candidate}`;
23
- } catch {
24
- }
25
- }
26
- return null;
27
- }
28
- function parseRefLine(line) {
29
- const [name, committedAt] = line.split("");
30
- if (!name) return null;
31
- return { name: name.replace(/^origin\//, ""), committedAt: committedAt ?? "" };
32
- }
33
- async function scanUnmergedBranches(repoRoot, options = {}) {
34
- const staleHours = options.staleHours ?? 24;
35
- const listingCap = options.listingCap ?? DEFAULT_LISTING_CAP;
36
- const empty = { branches: [], total: 0, staleCount: 0, truncated: false };
37
- let base;
38
- try {
39
- base = await detectRemoteBase(repoRoot);
40
- } catch {
41
- return empty;
42
- }
43
- if (!base) return empty;
44
- let lines;
45
- try {
46
- const raw = await git(repoRoot, [
47
- "for-each-ref",
48
- `--no-merged=${base}`,
49
- "--sort=-committerdate",
50
- "--format=%(refname:short)%(committerdate:iso-strict)",
51
- "refs/remotes/origin"
52
- ]);
53
- lines = raw ? raw.split("\n") : [];
54
- } catch {
55
- return empty;
56
- }
57
- const baseShort = base.replace(/^origin\//, "");
58
- const now = Date.now();
59
- const out = [];
60
- let scanned = 0;
61
- let truncated = false;
62
- for (const line of lines) {
63
- const parsed = parseRefLine(line);
64
- if (!parsed) continue;
65
- if (parsed.name === baseShort || parsed.name === "HEAD") continue;
66
- if (scanned >= MAX_BRANCHES_SCANNED) {
67
- truncated = true;
68
- break;
69
- }
70
- scanned++;
71
- let ahead = 0;
72
- try {
73
- const cnt = await git(repoRoot, ["rev-list", "--count", `${base}..origin/${parsed.name}`]);
74
- ahead = parseInt(cnt, 10) || 0;
75
- } catch {
76
- ahead = 0;
77
- }
78
- if (ahead <= 0) continue;
79
- let filesChanged = 0;
80
- try {
81
- const diff = await git(repoRoot, ["diff", "--name-only", `${base}...origin/${parsed.name}`]);
82
- filesChanged = diff ? diff.split("\n").filter(Boolean).length : 0;
83
- } catch {
84
- filesChanged = 0;
85
- }
86
- const committedMs = parsed.committedAt ? Date.parse(parsed.committedAt) : NaN;
87
- const ageHours = Number.isFinite(committedMs) ? Math.max(0, (now - committedMs) / 36e5) : 0;
88
- out.push({
89
- name: parsed.name,
90
- ahead,
91
- committedAt: parsed.committedAt,
92
- ageHours,
93
- filesChanged
94
- });
95
- }
96
- const staleCount = out.filter((b) => b.ageHours >= staleHours).length;
97
- return {
98
- branches: out.slice(0, listingCap),
99
- total: out.length,
100
- staleCount,
101
- truncated
102
- };
103
- }
104
- function slugForMatch(input) {
105
- return input.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
106
- }
107
- async function findMatchingBranches(repoRoot, opts) {
108
- const result = [];
109
- const scan = await scanUnmergedBranches(repoRoot, { listingCap: MAX_BRANCHES_SCANNED });
110
- if (scan.branches.length === 0) return result;
111
- const idToken = opts.id ? slugForMatch(opts.id) : "";
112
- const shortId = idToken ? idToken.replace(/-/g, "").slice(0, 8) : "";
113
- const titleSlug = opts.title ? slugForMatch(opts.title) : "";
114
- const titleTokens = new Set(titleSlug.split("-").filter((t) => t.length >= 4));
115
- for (const b of scan.branches) {
116
- const branchSlug = slugForMatch(b.name);
117
- const branchCompact = branchSlug.replace(/-/g, "");
118
- let matched = false;
119
- if (idToken && (branchSlug.includes(idToken) || shortId && branchCompact.includes(shortId))) {
120
- matched = true;
121
- } else if (titleTokens.size > 0) {
122
- const branchTokens = new Set(branchSlug.split("-"));
123
- let overlap = 0;
124
- for (const t of titleTokens) if (branchTokens.has(t)) overlap++;
125
- if (overlap >= 2) matched = true;
126
- }
127
- if (matched) {
128
- result.push({ name: b.name, ahead: b.ahead, ageHours: b.ageHours });
129
- }
130
- }
131
- return result;
132
- }
133
- export {
134
- DEFAULT_LISTING_CAP,
135
- findMatchingBranches,
136
- scanUnmergedBranches,
137
- slugForMatch
138
- };
@@ -1,30 +0,0 @@
1
- import {
2
- createReminder
3
- } from "./chunk-KMBEL7VB.js";
4
-
5
- // src/mcp/tools/create-reminder.ts
6
- import { z } from "zod";
7
- function registerCreateReminder(server) {
8
- server.registerTool(
9
- "create_reminder",
10
- {
11
- title: "Create Reminder",
12
- description: "Set a reminder for the founder. Shown in the boot brief every session.",
13
- inputSchema: {
14
- text: z.string().describe("What to remind about"),
15
- due_date: z.string().optional().describe("Optional due date \u2014 ISO date (2026-04-01) or null for persistent")
16
- }
17
- },
18
- async ({ text, due_date }) => {
19
- const reminder = await createReminder(text, due_date);
20
- const dueStr = reminder.dueDate ? ` (due: ${reminder.dueDate})` : "";
21
- return {
22
- content: [{ type: "text", text: `Reminder set: "${reminder.text}"${dueStr}` }]
23
- };
24
- }
25
- );
26
- }
27
-
28
- export {
29
- registerCreateReminder
30
- };
@@ -1,118 +0,0 @@
1
- // src/lib/dispatch-ack.ts
2
- import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync, readdirSync } from "fs";
3
- import path from "path";
4
- import os from "os";
5
- var ACK_DIR = path.join(os.homedir(), ".exe-os", "dispatch-acks");
6
- function ensureAckDir() {
7
- if (!existsSync(ACK_DIR)) mkdirSync(ACK_DIR, { recursive: true });
8
- }
9
- function writeDispatchPending(taskId, assignedTo, sessionName) {
10
- ensureAckDir();
11
- const signal = {
12
- taskId,
13
- assignedTo,
14
- dispatchedAt: (/* @__PURE__ */ new Date()).toISOString(),
15
- sessionName
16
- };
17
- writeFileSync(path.join(ACK_DIR, `${taskId}.pending`), JSON.stringify(signal), "utf-8");
18
- }
19
- function writeDispatchAck(taskId, agentId) {
20
- ensureAckDir();
21
- const pendingPath = path.join(ACK_DIR, `${taskId}.pending`);
22
- const ackPath = path.join(ACK_DIR, `${taskId}.ack`);
23
- let signal;
24
- try {
25
- signal = JSON.parse(readFileSync(pendingPath, "utf-8"));
26
- } catch {
27
- signal = { taskId, assignedTo: agentId, dispatchedAt: (/* @__PURE__ */ new Date()).toISOString() };
28
- }
29
- signal.ackedAt = (/* @__PURE__ */ new Date()).toISOString();
30
- writeFileSync(ackPath, JSON.stringify(signal), "utf-8");
31
- try {
32
- unlinkSync(pendingPath);
33
- } catch {
34
- }
35
- }
36
- function writeDispatchFailed(taskId, assignedTo, error, sessionName) {
37
- ensureAckDir();
38
- const pendingPath = path.join(ACK_DIR, `${taskId}.pending`);
39
- let signal;
40
- try {
41
- signal = JSON.parse(readFileSync(pendingPath, "utf-8"));
42
- } catch {
43
- signal = { taskId, assignedTo, dispatchedAt: (/* @__PURE__ */ new Date()).toISOString() };
44
- }
45
- signal.failedAt = (/* @__PURE__ */ new Date()).toISOString();
46
- signal.error = error;
47
- if (sessionName) signal.sessionName = sessionName;
48
- writeFileSync(path.join(ACK_DIR, `${taskId}.failed`), JSON.stringify(signal), "utf-8");
49
- try {
50
- unlinkSync(pendingPath);
51
- } catch {
52
- }
53
- }
54
- function checkDispatchStatus(taskId) {
55
- ensureAckDir();
56
- const ackPath = path.join(ACK_DIR, `${taskId}.ack`);
57
- const failedPath = path.join(ACK_DIR, `${taskId}.failed`);
58
- const pendingPath = path.join(ACK_DIR, `${taskId}.pending`);
59
- if (existsSync(ackPath)) {
60
- try {
61
- const signal = JSON.parse(readFileSync(ackPath, "utf-8"));
62
- return { status: "acked", signal };
63
- } catch {
64
- return { status: "acked" };
65
- }
66
- }
67
- if (existsSync(failedPath)) {
68
- try {
69
- const signal = JSON.parse(readFileSync(failedPath, "utf-8"));
70
- return { status: "failed", signal };
71
- } catch {
72
- return { status: "failed" };
73
- }
74
- }
75
- if (existsSync(pendingPath)) {
76
- try {
77
- const signal = JSON.parse(readFileSync(pendingPath, "utf-8"));
78
- return { status: "pending", signal };
79
- } catch {
80
- return { status: "pending" };
81
- }
82
- }
83
- return { status: "unknown" };
84
- }
85
- function cleanStaleDispatchAcks(maxAgeMs = 60 * 60 * 1e3) {
86
- ensureAckDir();
87
- const now = Date.now();
88
- let cleaned = 0;
89
- try {
90
- for (const file of readdirSync(ACK_DIR)) {
91
- const fullPath = path.join(ACK_DIR, file);
92
- try {
93
- const signal = JSON.parse(readFileSync(fullPath, "utf-8"));
94
- const ts = signal.ackedAt ?? signal.dispatchedAt;
95
- if (now - new Date(ts).getTime() > maxAgeMs) {
96
- unlinkSync(fullPath);
97
- cleaned++;
98
- }
99
- } catch {
100
- try {
101
- unlinkSync(fullPath);
102
- cleaned++;
103
- } catch {
104
- }
105
- }
106
- }
107
- } catch {
108
- }
109
- return cleaned;
110
- }
111
-
112
- export {
113
- writeDispatchPending,
114
- writeDispatchAck,
115
- writeDispatchFailed,
116
- checkDispatchStatus,
117
- cleanStaleDispatchAcks
118
- };
@@ -1,113 +0,0 @@
1
- // src/lib/play-mode.ts
2
- import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
3
- import { join, dirname } from "path";
4
- import { homedir } from "os";
5
- var PLAY_MODE_FILE = join(homedir(), ".exe-os", "play-modes.json");
6
- function resolvePlayModeFile() {
7
- return process.env.EXE_PLAY_MODE_FILE ?? PLAY_MODE_FILE;
8
- }
9
- var DEFAULT_EXPLORE_DURATION_MS = 60 * 60 * 1e3;
10
- function playModeKey(agentId, sessionScope) {
11
- return `${agentId}:${sessionScope}`;
12
- }
13
- function readStore() {
14
- try {
15
- const filePath = resolvePlayModeFile();
16
- if (!existsSync(filePath)) return {};
17
- const raw = readFileSync(filePath, "utf8");
18
- return JSON.parse(raw);
19
- } catch {
20
- return {};
21
- }
22
- }
23
- function writeStore(store) {
24
- const filePath = resolvePlayModeFile();
25
- const dir = dirname(filePath);
26
- if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
27
- writeFileSync(filePath, JSON.stringify(store, null, 2), "utf8");
28
- }
29
- function setPlayMode(agentId, sessionScope, mode, options = {}) {
30
- const key = playModeKey(agentId, sessionScope);
31
- const store = readStore();
32
- if (mode === "task") {
33
- delete store[key];
34
- writeStore(store);
35
- return {
36
- mode: "task",
37
- agentId,
38
- sessionScope,
39
- startedAt: (/* @__PURE__ */ new Date()).toISOString(),
40
- expiresAt: new Date(Date.now() + 1).toISOString()
41
- // immediate
42
- };
43
- }
44
- const durationMs = options.durationMs ?? DEFAULT_EXPLORE_DURATION_MS;
45
- const now = /* @__PURE__ */ new Date();
46
- const entry = {
47
- mode: "explore",
48
- agentId,
49
- sessionScope,
50
- startedAt: now.toISOString(),
51
- expiresAt: new Date(now.getTime() + durationMs).toISOString(),
52
- notes: options.notes
53
- };
54
- store[key] = entry;
55
- writeStore(store);
56
- return entry;
57
- }
58
- function getPlayMode(agentId, sessionScope) {
59
- const key = playModeKey(agentId, sessionScope);
60
- const store = readStore();
61
- const entry = store[key];
62
- if (!entry) return null;
63
- if (new Date(entry.expiresAt).getTime() <= Date.now()) {
64
- delete store[key];
65
- try {
66
- writeStore(store);
67
- } catch {
68
- }
69
- return null;
70
- }
71
- return entry;
72
- }
73
- function isExploreMode(agentId, sessionScope) {
74
- try {
75
- const entry = getPlayMode(agentId, sessionScope);
76
- return entry?.mode === "explore";
77
- } catch {
78
- return false;
79
- }
80
- }
81
- function listExploreSessions() {
82
- try {
83
- const store = readStore();
84
- const now = Date.now();
85
- const active = [];
86
- let pruned = false;
87
- for (const [key, entry] of Object.entries(store)) {
88
- if (new Date(entry.expiresAt).getTime() <= now) {
89
- delete store[key];
90
- pruned = true;
91
- } else {
92
- active.push(entry);
93
- }
94
- }
95
- if (pruned) {
96
- try {
97
- writeStore(store);
98
- } catch {
99
- }
100
- }
101
- return active;
102
- } catch {
103
- return [];
104
- }
105
- }
106
-
107
- export {
108
- DEFAULT_EXPLORE_DURATION_MS,
109
- setPlayMode,
110
- getPlayMode,
111
- isExploreMode,
112
- listExploreSessions
113
- };