@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
@@ -25,18 +25,17 @@ var PLATFORM_PROCEDURES = [
25
25
  priority: "p1",
26
26
  content: "exe-os supports three tools: Claude Code (Anthropic), Codex (OpenAI), OpenCode (open source, 75+ providers). Each agent can use a different tool and model. COO uses set_agent_config MCP tool to view/change settings. No args = show all agents. agent_id + runtime + model = change. Claude models: claude-sonnet-4.6, claude-opus-4.6, claude-sonnet-4.8, claude-opus-4.8, claude-opus-4.8-1m, fable (claude-fable-5). Interactive selection: `exe-os settings` from terminal."
27
27
  },
28
- // --- Updates and deployment (consolidated) ---
29
- {
30
- title: "How to update exe-os \u2014 channels, versions, and lifecycle",
31
- domain: "operations",
32
- priority: "p0",
33
- content: "TWO-STEP UPDATE: (1) CLI: `npm install -g @askexenow/exe-os@latest` \u2014 updates tools, MCP, procedures. Must happen first. (2) Stack (VPS only): `exe-os stack-update --target <version> --yes` \u2014 pulls new Docker images. CLI MUST precede stack \u2014 the stack-update command itself may have fixes. `exe-os update` is the recommended interactive path (runs npm install + install --global + daemon restart). Agents should NEVER run npm install or stack-update autonomously \u2014 confirm with user first. THREE CHANNELS: stable (default, @latest on npm), canary (@canary, experimental), pinned (blocks updates unless --force). View: `exe-os channel`. Change: `exe-os channel <name>`. TWO VERSION TRACKS: CLI version (e.g. 0.9.90) updates frequently; stack version (e.g. 0.9.8) updates rarely. CLI > stack is normal \u2014 do NOT attempt to make them match. Only update stack when boot brief says so or `exe-os stack-update --check` shows pending changes. WHAT PICKS UP NEW CODE: postinstall restarts daemon automatically. MCP picks up new code on next /mcp reconnect. Hooks pick up on next session (fresh processes). `npm run deploy` is dev-only (build + install + daemon restart). Never run from a worktree. NEVER confuse `exe-os setup` (first-time wizard) with `exe-os update` (replace code + restart). If stack-update fails with EACCES: `sudo mkdir -p /opt/exe-stack && sudo chown $(whoami) /opt/exe-stack`."
34
- },
35
- {
36
- title: "First install \u2014 setup wizard and license activation",
28
+ // --- Reference pointer (boot-perf audit 2026-07-06 §P1) ---
29
+ // The heavy reference sections (update lifecycle, first-install wizard, full
30
+ // MCP tool reference, cognition features, platform capabilities) were moved OUT
31
+ // of the always-injected block into PLATFORM_REFERENCE_PROCEDURES (read on
32
+ // demand) to cut the per-session token cost. This one compact pointer stays
33
+ // inline so agents know the reference exists and how to reach it.
34
+ {
35
+ title: "Platform reference \u2014 read on demand, not injected",
37
36
  domain: "operations",
38
37
  priority: "p1",
39
- content: "Fresh install: `npm install -g @askexenow/exe-os` then run `exe` to start the setup wizard. Wizard prompts for: encryption passphrase (creates master key), license key (exe_sk_*), COO name, optional team members. No license key = free tier (1 employee, 5K memories). After setup: hooks auto-install, MCP registers in ~/.claude.json, daemon starts. Verify: `exe-os healthcheck` or mcp_ping()."
38
+ content: "Reference-heavy platform docs are NOT injected into every session (token budget). Read them on demand from ~/.exe-os/reference/platform-reference.md (auto-written at COO boot), which covers: the full MCP tool reference (all domains + key actions); how to update exe-os (channels, CLI vs stack, `exe-os update`); the first-install setup wizard + license activation; cognition features (dreaming, reflexes, baselines, hot-path summary); and platform capabilities (watchdog, diagnostics, graph extraction, discovery hooks, cloud reminders). For LIVE MCP tool discovery use diagnostics(action='tool_search'); for update status use diagnostics(action='check_update'). When a task needs these details, read the file or recall \u2014 never guess update/setup steps."
40
39
  },
41
40
  // --- Project boundary ---
42
41
  {
@@ -275,27 +274,6 @@ var PLATFORM_PROCEDURES = [
275
274
  priority: "p0",
276
275
  content: "If MCP tools are unavailable, disconnected, or returning connection errors: STOP. Tell the user: 'MCP server is disconnected. Please run /mcp to reconnect.' No workarounds \u2014 no raw Node imports, no direct DB, no CLI hacks, no daemon socket calls, no tmux send-keys. MCP is the ONLY data interface AND dispatch path. When down, you cannot create tasks, send messages, or coordinate agents. Ask once, wait, proceed when reconnected."
277
276
  },
278
- // --- MCP Tool Reference (consolidated from 8 procedures) ---
279
- {
280
- title: "MCP tool reference \u2014 all domains and key actions",
281
- domain: "tool-use",
282
- priority: "p1",
283
- content: "exe-os MCP uses action-based dispatch (19 consolidated tools). Legacy 108-tool surface via EXE_MCP_TOOL_SURFACE=legacy. MEMORY: recall (search, as_of for bi-temporal, kind filter, retrieval_mode: all|decisions_only|procedures_only|operational|recent_high_value|document_aware) | ask_team | store (kind, procedure_for) | commit (high-importance) | search_everything | session_context | get_by_id | consolidate | cardinality | supersede. DECISION: store (domain, decision, rationale) | get (domain or query). TASK: create (title, assigned_to, context; blocked_by, parent_task_id, reviewer, complexity, budget_tokens, spawn_runtime, spawn_model) | list | get | update (in_progress/done/blocked/cancelled + assertions) | close (COO only) | checkpoint | resume. GRAPH: query_relationships | entity_neighbors | hot_entities | stats | export | merge_entities | similar_trajectories. IDENTITY: get | update. BEHAVIOR: store | list | deactivate. SUPPORT: create_bug (title, description, severity p0-p3, product param for any AskExe product) | create_feature (title, description, use_case, proposed_solution) | list_my_bugs | list_my_features | triage_bug (AskExe-internal, uses triage_notes NOT notes) | health. MESSAGE: send | acknowledge. REMINDER: create | list | complete. SESSION: events | last_response. WIKI: list | get. DOCUMENT: ingest | list | purge | set_importance | rerank. CRM: list_people | get_person | list_tables | describe_table. RAW_DATA: list_sources | query | get. GATEWAY: send_whatsapp | query_conversations | query_company_brain. CONFIG: list_employees | set_agent_config | agent_spend | daemon_health | license_status | cloud_sync (cloud_action: status|sync|reupload) | memory_audit | run_consolidation | worker_gate | auto_wake_status | orchestration_phase | company_procedure (store|list|deactivate) | global_procedure | create_trigger | list_triggers | export_orchestration | import_orchestration | closeout | capability_cards (query param for best-agent match). DIAGNOSTICS: healthcheck | doctor | status_brief | check_update | cloud_status | pending_work_summary | rename_employee | tool_search | drift. DREAMING: run | status | history. MCP_PING: daemon health + license + tool usage + retrieval health."
284
- },
285
- // --- Cognition features (consolidated from reflex, baselines, hot-path) ---
286
- {
287
- title: "Cognition features \u2014 dreaming, reflexes, baselines, hot-path summary",
288
- domain: "cognition",
289
- priority: "p1",
290
- content: "DREAMING: Analyzes recent work for patterns \u2014 mistakes, strategies, knowledge gaps. `dreaming(action='run')` triggers manually; `config(action='closeout')` runs as session closeout. Returns: patterns, behavior proposals (review before adopting), drift score (0-1, >0.8 triggers steward gate). status/history actions show past cycles. REFLEXES: Store trigger->action suggestions via behavior(action='store', domain='reflex', trigger='...', trigger_action='...'). Agent always decides \u2014 prominent suggestions, not auto-execution. EMOTIONAL BASELINES: Each role has target tone and anti-patterns. Dreaming tracks emotional drift. Baselines in identity files. HOT-PATH SUMMARY: ~200-token compressed last-session summary injected at boot before any recall. Don't re-search for context already in your session summary."
291
- },
292
- // --- Platform capabilities (consolidated from watchdog, diagnostics, doc-graph, attachments, reminders, discovery, roster) ---
293
- {
294
- title: "Platform capabilities \u2014 watchdog, diagnostics, graph extraction, discovery hooks, cloud reminders",
295
- domain: "operations",
296
- priority: "p2",
297
- content: "WATCHDOG: Out-of-process, pings daemon every 10s. After 3 failures (30s), force-restarts via SIGTERM->SIGKILL->launchd. MCP outages bounded to ~30-40s. Wait and retry before telling user to /mcp. DIAGNOSTICS: mcp_ping/cloud_status/memory_audit report embed daemon status, search mode, query router, vector backfill, graph coverage, event loop lag (degraded when >5s). DOC-GRAPH: ingest_document auto-extracts concepts/relationships to knowledge graph. Manual: graph(action='extract_from_document', document_id='...'). ATTACHMENTS: support(action='create_bug/create_feature') accepts attachments=[{filename, content}] (4KB truncated). REMINDERS: Auto-sync to cloud (Cloudflare KV). Created on Mac, visible on VPS. Dedup by text+due_date. DISCOVERY: Compact tool catalog injected at boot (~300 tokens). Per-prompt contextual hints (max 3, ~150 tokens). ROSTER: Team roster injected at boot (name+role). Don't recall for team info. Use config(action='capability_cards') for full agent manifests."
298
- },
299
277
  // --- Engineering discipline (coding agents) ---
300
278
  {
301
279
  title: "Engineering discipline \u2014 lazy ladder, surgical diffs, named failure modes",
@@ -318,11 +296,51 @@ var PLATFORM_PROCEDURES = [
318
296
  content: "Your plan (free / pro / team / agency / enterprise) governs your limits \u2014 including how many agents/employees you can run. Enterprise = unlimited. HOW VALIDATION WORKS: your instance validates your license key (or login) against the cloud (api.askexe.com), which reads the users store \u2014 the SINGLE SOURCE OF TRUTH \u2014 and returns your plan as a signed token, cached locally at ~/.exe-os/license-cache.json (works fast, and offline within a grace window). That cached token is what your limits run on day-to-day. IF YOUR PLAN WAS CHANGED (e.g. upgraded to enterprise for more agents): the change lands on the SERVER first; your instance keeps the OLD cached plan until it re-validates \u2014 so nothing changes for you until you refresh. To pick it up IMMEDIATELY, do one of: (1) run the `refresh_license` MCP action, or (2) run the `exe-os license refresh` CLI. Either forces a re-check against the cloud, caches the new plan, and lifts your agent limit on the spot (shows old plan -> new plan + new limits). AUTOMATIC: on your next boot, your instance auto-detects a plan change (cheap cloud check, gated to ~10-min cache freshness) and announces it \u2014 e.g. 'Plan changed: pro -> enterprise. Employee limit now unlimited.' No cache-file editing, ever. ASKEXE ADMINS ONLY: to change a CUSTOMER's plan, use the admin-gated set-customer-plan path (requires the AskExe admin token \u2014 customers can never change their own or anyone's plan). It writes the users store (source of truth); the hourly license sync then reflects it into billing, and the customer runs `refresh_license` to pick it up. (Self-serve refresh available in exe-os 0.9.322+.)"
319
297
  }
320
298
  ];
299
+ var PLATFORM_REFERENCE_PROCEDURES = [
300
+ {
301
+ title: "How to update exe-os \u2014 channels, versions, and lifecycle",
302
+ domain: "operations",
303
+ priority: "p0",
304
+ content: "TWO-STEP UPDATE: (1) CLI: `npm install -g @askexenow/exe-os@latest` \u2014 updates tools, MCP, procedures. Must happen first. (2) Stack (VPS only): `exe-os stack-update --target <version> --yes` \u2014 pulls new Docker images. CLI MUST precede stack \u2014 the stack-update command itself may have fixes. `exe-os update` is the recommended interactive path (runs npm install + install --global + daemon restart). Agents should NEVER run npm install or stack-update autonomously \u2014 confirm with user first. THREE CHANNELS: stable (default, @latest on npm), canary (@canary, experimental), pinned (blocks updates unless --force). View: `exe-os channel`. Change: `exe-os channel <name>`. TWO VERSION TRACKS: CLI version (e.g. 0.9.90) updates frequently; stack version (e.g. 0.9.8) updates rarely. CLI > stack is normal \u2014 do NOT attempt to make them match. Only update stack when boot brief says so or `exe-os stack-update --check` shows pending changes. WHAT PICKS UP NEW CODE: postinstall restarts daemon automatically. MCP picks up new code on next /mcp reconnect. Hooks pick up on next session (fresh processes). `npm run deploy` is dev-only (build + install + daemon restart). Never run from a worktree. NEVER confuse `exe-os setup` (first-time wizard) with `exe-os update` (replace code + restart). If stack-update fails with EACCES: `sudo mkdir -p /opt/exe-stack && sudo chown $(whoami) /opt/exe-stack`."
305
+ },
306
+ {
307
+ title: "First install \u2014 setup wizard and license activation",
308
+ domain: "operations",
309
+ priority: "p1",
310
+ content: "Fresh install: `npm install -g @askexenow/exe-os` then run `exe` to start the setup wizard. Wizard prompts for: encryption passphrase (creates master key), license key (exe_sk_*), COO name, optional team members. No license key = free tier (1 employee, 5K memories). After setup: hooks auto-install, MCP registers in ~/.claude.json, daemon starts. Verify: `exe-os healthcheck` or mcp_ping()."
311
+ },
312
+ {
313
+ title: "MCP tool reference \u2014 all domains and key actions",
314
+ domain: "tool-use",
315
+ priority: "p1",
316
+ content: "exe-os MCP uses action-based dispatch (19 consolidated tools). Legacy 108-tool surface via EXE_MCP_TOOL_SURFACE=legacy. MEMORY: recall (search, as_of for bi-temporal, kind filter, retrieval_mode: all|decisions_only|procedures_only|operational|recent_high_value|document_aware) | ask_team | store (kind, procedure_for) | commit (high-importance) | search_everything | session_context | get_by_id | consolidate | cardinality | supersede. DECISION: store (domain, decision, rationale) | get (domain or query). TASK: create (title, assigned_to, context; blocked_by, parent_task_id, reviewer, complexity, budget_tokens, spawn_runtime, spawn_model) | list | get | update (in_progress/done/blocked/cancelled + assertions) | close (COO only) | checkpoint | resume. GRAPH: query_relationships | entity_neighbors | hot_entities | stats | export | merge_entities | similar_trajectories. IDENTITY: get | update. BEHAVIOR: store | list | deactivate. SUPPORT: create_bug (title, description, severity p0-p3, product param for any AskExe product) | create_feature (title, description, use_case, proposed_solution) | list_my_bugs | list_my_features | triage_bug (AskExe-internal, uses triage_notes NOT notes) | health. MESSAGE: send | acknowledge. REMINDER: create | list | complete. SESSION: events | last_response. WIKI: list | get. DOCUMENT: ingest | list | purge | set_importance | rerank. CRM: list_people | get_person | list_tables | describe_table. RAW_DATA: list_sources | query | get. GATEWAY: send_whatsapp | query_conversations | query_company_brain. CONFIG: list_employees | set_agent_config | agent_spend | daemon_health | license_status | cloud_sync (cloud_action: status|sync|reupload) | memory_audit | run_consolidation | worker_gate | auto_wake_status | orchestration_phase | company_procedure (store|list|deactivate) | global_procedure | create_trigger | list_triggers | export_orchestration | import_orchestration | closeout | capability_cards (query param for best-agent match). DIAGNOSTICS: healthcheck | doctor | status_brief | check_update | cloud_status | pending_work_summary | rename_employee | tool_search | drift. DREAMING: run | status | history. MCP_PING: daemon health + license + tool usage + retrieval health."
317
+ },
318
+ {
319
+ title: "Cognition features \u2014 dreaming, reflexes, baselines, hot-path summary",
320
+ domain: "cognition",
321
+ priority: "p1",
322
+ content: "DREAMING: Analyzes recent work for patterns \u2014 mistakes, strategies, knowledge gaps. `dreaming(action='run')` triggers manually; `config(action='closeout')` runs as session closeout. Returns: patterns, behavior proposals (review before adopting), drift score (0-1, >0.8 triggers steward gate). status/history actions show past cycles. REFLEXES: Store trigger->action suggestions via behavior(action='store', domain='reflex', trigger='...', trigger_action='...'). Agent always decides \u2014 prominent suggestions, not auto-execution. EMOTIONAL BASELINES: Each role has target tone and anti-patterns. Dreaming tracks emotional drift. Baselines in identity files. HOT-PATH SUMMARY: ~200-token compressed last-session summary injected at boot before any recall. Don't re-search for context already in your session summary."
323
+ },
324
+ {
325
+ title: "Platform capabilities \u2014 watchdog, diagnostics, graph extraction, discovery hooks, cloud reminders",
326
+ domain: "operations",
327
+ priority: "p2",
328
+ content: "WATCHDOG: Out-of-process, pings daemon every 10s. After 3 failures (30s), force-restarts via SIGTERM->SIGKILL->launchd. MCP outages bounded to ~30-40s. Wait and retry before telling user to /mcp. DIAGNOSTICS: mcp_ping/cloud_status/memory_audit report embed daemon status, search mode, query router, vector backfill, graph coverage, event loop lag (degraded when >5s). DOC-GRAPH: ingest_document auto-extracts concepts/relationships to knowledge graph. Manual: graph(action='extract_from_document', document_id='...'). ATTACHMENTS: support(action='create_bug/create_feature') accepts attachments=[{filename, content}] (4KB truncated). REMINDERS: Auto-sync to cloud (Cloudflare KV). Created on Mac, visible on VPS. Dedup by text+due_date. DISCOVERY: Compact tool catalog injected at boot (~300 tokens). Per-prompt contextual hints (max 3, ~150 tokens). ROSTER: Team roster injected at boot (name+role). Don't recall for team info. Use config(action='capability_cards') for full agent manifests."
329
+ }
330
+ ];
331
+ function getPlatformReferenceMarkdown() {
332
+ const body = PLATFORM_REFERENCE_PROCEDURES.map((p) => `## ${p.title}
333
+
334
+ ${p.content}`).join("\n\n");
335
+ return "# exe-os Platform Reference (read on demand)\n\nAuto-generated at COO boot from the installed exe-os version. These sections are intentionally NOT injected into every session's system prompt \u2014 read them here when a task needs them.\n\n" + body + "\n";
336
+ }
321
337
  var PLATFORM_PROCEDURE_TITLES = new Set(
322
- PLATFORM_PROCEDURES.map((p) => p.title)
338
+ [...PLATFORM_PROCEDURES, ...PLATFORM_REFERENCE_PROCEDURES].map((p) => p.title)
323
339
  );
324
340
 
325
341
  export {
326
342
  PLATFORM_PROCEDURES,
343
+ PLATFORM_REFERENCE_PROCEDURES,
344
+ getPlatformReferenceMarkdown,
327
345
  PLATFORM_PROCEDURE_TITLES
328
346
  };
@@ -2,7 +2,7 @@ import {
2
2
  getClient,
3
3
  isCoordinatorName,
4
4
  loadEmployeesSync
5
- } from "./chunk-HEPR6QTL.js";
5
+ } from "./chunk-AOHXREB7.js";
6
6
 
7
7
  // src/lib/steward-gate.ts
8
8
  import crypto from "crypto";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getClient
3
- } from "./chunk-HEPR6QTL.js";
3
+ } from "./chunk-AOHXREB7.js";
4
4
 
5
5
  // src/lib/skill-refinement.ts
6
6
  import crypto from "crypto";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  completeReminder
3
- } from "./chunk-KMBEL7VB.js";
3
+ } from "./chunk-UUEKJDK6.js";
4
4
 
5
5
  // src/mcp/tools/complete-reminder.ts
6
6
  import { z } from "zod";
@@ -1,7 +1,9 @@
1
1
  // src/lib/update-check.ts
2
- import { execSync } from "child_process";
2
+ import { execFile, execSync } from "child_process";
3
3
  import { readFileSync } from "fs";
4
4
  import path from "path";
5
+ import { promisify } from "util";
6
+ var execFileAsync = promisify(execFile);
5
7
  function getLocalVersion(packageRoot) {
6
8
  const pkgPath = path.join(packageRoot, "package.json");
7
9
  const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
@@ -20,6 +22,19 @@ function getRemoteVersion(tag) {
20
22
  return null;
21
23
  }
22
24
  }
25
+ async function getRemoteVersionAsync(tag) {
26
+ try {
27
+ const distTag = tag ?? "latest";
28
+ const { stdout } = await execFileAsync(
29
+ "npm",
30
+ ["view", `@askexenow/exe-os@${distTag}`, "version"],
31
+ { encoding: "utf-8", timeout: 15e3 }
32
+ );
33
+ return String(stdout ?? "").trim() || null;
34
+ } catch {
35
+ return null;
36
+ }
37
+ }
23
38
  function channelToDistTag(channel) {
24
39
  switch (channel) {
25
40
  case "canary":
@@ -51,6 +66,24 @@ function checkForUpdate(packageRoot, channel) {
51
66
  }
52
67
  const distTag = channelToDistTag(effectiveChannel);
53
68
  const remoteVersion = getRemoteVersion(distTag);
69
+ return buildUpdateResult(localVersion, remoteVersion, effectiveChannel);
70
+ }
71
+ async function checkForUpdateAsync(packageRoot, channel) {
72
+ const effectiveChannel = channel ?? "stable";
73
+ const localVersion = getLocalVersion(packageRoot);
74
+ if (effectiveChannel === "pinned") {
75
+ return {
76
+ updateAvailable: false,
77
+ localVersion,
78
+ channel: effectiveChannel,
79
+ error: "Updates pinned. Run with --force to override."
80
+ };
81
+ }
82
+ const distTag = channelToDistTag(effectiveChannel);
83
+ const remoteVersion = await getRemoteVersionAsync(distTag);
84
+ return buildUpdateResult(localVersion, remoteVersion, effectiveChannel);
85
+ }
86
+ function buildUpdateResult(localVersion, remoteVersion, effectiveChannel) {
54
87
  if (!remoteVersion) {
55
88
  return {
56
89
  updateAvailable: false,
@@ -68,7 +101,9 @@ function checkForUpdate(packageRoot, channel) {
68
101
  export {
69
102
  getLocalVersion,
70
103
  getRemoteVersion,
104
+ getRemoteVersionAsync,
71
105
  channelToDistTag,
72
106
  channelToInstallTag,
73
- checkForUpdate
107
+ checkForUpdate,
108
+ checkForUpdateAsync
74
109
  };
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-2I23RPSI.js";
4
4
  import {
5
5
  EXE_AI_DIR
6
- } from "./chunk-7Y5UDEVM.js";
6
+ } from "./chunk-WZHZCDDO.js";
7
7
 
8
8
  // src/lib/shard-manager.ts
9
9
  import path from "path";
@@ -1,24 +1,24 @@
1
1
  import {
2
2
  recordSessionKill
3
- } from "./chunk-T4KZ2Z2N.js";
3
+ } from "./chunk-L4A5DL6Z.js";
4
4
  import {
5
5
  sessionScopeFilter,
6
6
  verifyPaneAtCapacity,
7
7
  writeNotification
8
- } from "./chunk-PLRIJALF.js";
8
+ } from "./chunk-UP75Z5X7.js";
9
9
  import {
10
10
  listSessions
11
- } from "./chunk-UIV2WPBT.js";
11
+ } from "./chunk-KGWRTRKC.js";
12
12
  import {
13
13
  getTransport
14
- } from "./chunk-RMOBQ6A5.js";
14
+ } from "./chunk-AD2VCHSS.js";
15
15
  import {
16
16
  recordOrchestrationEventBestEffort
17
- } from "./chunk-FUIIVSW6.js";
17
+ } from "./chunk-2WAVZ5UJ.js";
18
18
  import {
19
19
  getClient,
20
20
  isCoordinatorName
21
- } from "./chunk-HEPR6QTL.js";
21
+ } from "./chunk-AOHXREB7.js";
22
22
 
23
23
  // src/lib/capacity-monitor.ts
24
24
  var CAPACITY_PATTERNS = [
@@ -4,13 +4,13 @@ import {
4
4
  import {
5
5
  ensureDaemonToken,
6
6
  readDaemonToken
7
- } from "./chunk-3NGZ4PL7.js";
7
+ } from "./chunk-X2Q5NLUL.js";
8
8
  import {
9
9
  computeDaemonHeapCapMb
10
10
  } from "./chunk-NLEW62VC.js";
11
11
  import {
12
12
  EXE_AI_DIR
13
- } from "./chunk-7Y5UDEVM.js";
13
+ } from "./chunk-WZHZCDDO.js";
14
14
 
15
15
  // src/lib/exe-daemon-client.ts
16
16
  import net from "net";
@@ -42,6 +42,7 @@ function isBootFast() {
42
42
  var _socket = null;
43
43
  var _connected = false;
44
44
  var _autoReconnecting = false;
45
+ var _intentionalDisconnect = false;
45
46
  var _autoReconnectTimer = null;
46
47
  var _buffer = "";
47
48
  var _requestCount = 0;
@@ -359,6 +360,7 @@ function connectToSocket() {
359
360
  _socket = socket;
360
361
  _connected = true;
361
362
  _buffer = "";
363
+ _intentionalDisconnect = false;
362
364
  socket.on("data", handleData);
363
365
  socket.on("close", () => {
364
366
  _connected = false;
@@ -368,7 +370,9 @@ function connectToSocket() {
368
370
  _pending.delete(id);
369
371
  entry.resolve({ error: "Connection closed" });
370
372
  }
371
- if (!_autoReconnecting && !isBootFast()) {
373
+ const wasIntentional = _intentionalDisconnect;
374
+ _intentionalDisconnect = false;
375
+ if (!wasIntentional && !_autoReconnecting && !isBootFast()) {
372
376
  startAutoReconnectLoop();
373
377
  }
374
378
  });
@@ -586,6 +590,7 @@ async function embedBatchViaClient(texts, priority = "high") {
586
590
  function disconnectClient() {
587
591
  clearAutoReconnectTimer();
588
592
  _autoReconnecting = false;
593
+ _intentionalDisconnect = true;
589
594
  if (_socket) {
590
595
  _socket.destroy();
591
596
  _socket = null;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isCoordinatorRole
3
- } from "./chunk-HEPR6QTL.js";
3
+ } from "./chunk-AOHXREB7.js";
4
4
 
5
5
  // src/lib/task-router.ts
6
6
  import { randomUUID } from "crypto";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getClient
3
- } from "./chunk-HEPR6QTL.js";
3
+ } from "./chunk-AOHXREB7.js";
4
4
 
5
5
  // src/lib/pipeline-router.ts
6
6
  import crypto from "crypto";
@@ -116,12 +116,12 @@ async function sinkCRM(msg, agentResponse, agentName) {
116
116
  }
117
117
  async function sinkWiki(msg, agentResponse) {
118
118
  try {
119
- const { createWikiClient } = await import("./wiki-client-VNDOBK63.js");
119
+ const { createWikiClient } = await import("./wiki-client-EAN7F5LV.js");
120
120
  const client = await createWikiClient();
121
121
  if (!client) return false;
122
122
  const content = msg.text ?? "";
123
123
  if (content.length < 50) return false;
124
- const { chatInWorkspace } = await import("./wiki-client-VNDOBK63.js");
124
+ const { chatInWorkspace } = await import("./wiki-client-EAN7F5LV.js");
125
125
  const ingestText = [
126
126
  `[${msg.platform}] Message from ${msg.senderName ?? msg.senderId} (${msg.timestamp}):`,
127
127
  content,
@@ -149,7 +149,7 @@ async function sinkEntityExtraction(msg, agentResponse, agentName) {
149
149
  const client = getClient();
150
150
  const memoryId = `conv:${msg.messageId}`;
151
151
  await storeExtraction(client, extraction, memoryId, msg.timestamp);
152
- import("./conversation-wiki-populator-WU4HEQ7C.js").then(
152
+ import("./conversation-wiki-populator-WQN3IUU6.js").then(
153
153
  ({ populateWikiFromExtraction }) => populateWikiFromExtraction(extraction, msg, agentResponse, agentName)
154
154
  ).catch((err) => {
155
155
  process.stderr.write(
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  processCRMEvent
3
- } from "./chunk-KTPG4XKI.js";
3
+ } from "./chunk-KP3U5QGJ.js";
4
4
 
5
5
  // src/gateway/adapters/crm-webhook.ts
6
6
  function parseTwentyWebhook(payload) {
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  sanitizePort
3
- } from "./chunk-X2FHTDIU.js";
3
+ } from "./chunk-IBYL4DHM.js";
4
4
  import {
5
5
  loadEmployeesSync
6
- } from "./chunk-HEPR6QTL.js";
6
+ } from "./chunk-AOHXREB7.js";
7
7
 
8
8
  // src/adapters/mcp-http-config.ts
9
9
  import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  PLATFORM_PROCEDURES,
3
3
  PLATFORM_PROCEDURE_TITLES
4
- } from "./chunk-A47MXY2I.js";
4
+ } from "./chunk-EQHQF5IM.js";
5
5
  import {
6
6
  getClient
7
- } from "./chunk-HEPR6QTL.js";
7
+ } from "./chunk-AOHXREB7.js";
8
8
 
9
9
  // src/lib/global-procedures.ts
10
10
  import { randomUUID } from "crypto";
@@ -0,0 +1,104 @@
1
+ // src/gateway/whatsapp-accounts.ts
2
+ import { readFileSync } from "fs";
3
+ import { join } from "path";
4
+ import { homedir } from "os";
5
+ var CONFIG_PATH = join(homedir(), ".exe-os", "whatsapp-accounts.json");
6
+ var GATEWAY_CONFIG_PATH = join(homedir(), ".exe-os", "gateway.json");
7
+ var cachedAccounts = null;
8
+ function loadLegacyGatewayAccounts() {
9
+ try {
10
+ const raw = readFileSync(GATEWAY_CONFIG_PATH, "utf8");
11
+ const cfg = JSON.parse(raw);
12
+ const legacy = cfg?.adapters?.whatsapp?.accounts;
13
+ if (!Array.isArray(legacy)) return [];
14
+ const out = [];
15
+ for (const a of legacy) {
16
+ const name = typeof a?.name === "string" ? a.name : void 0;
17
+ if (!name) continue;
18
+ out.push({
19
+ name,
20
+ phoneNumberId: typeof a.phoneNumberId === "string" ? a.phoneNumberId : "",
21
+ accessToken: typeof a.accessToken === "string" ? a.accessToken : "",
22
+ businessAccountId: typeof a.businessAccountId === "string" ? a.businessAccountId : "",
23
+ verifyToken: typeof a.verifyToken === "string" ? a.verifyToken : "",
24
+ ...typeof a.defaultAgent === "string" ? { defaultAgent: a.defaultAgent } : {}
25
+ });
26
+ }
27
+ return out;
28
+ } catch (err) {
29
+ if (err.code !== "ENOENT") {
30
+ console.warn("[whatsapp] Failed to load legacy gateway.json accounts:", err.message);
31
+ }
32
+ return [];
33
+ }
34
+ }
35
+ function loadPrimaryAccounts() {
36
+ try {
37
+ const raw = readFileSync(CONFIG_PATH, "utf8");
38
+ const parsed = JSON.parse(raw);
39
+ if (!Array.isArray(parsed)) {
40
+ console.warn("[whatsapp] Config is not an array, ignoring");
41
+ return [];
42
+ }
43
+ return parsed.filter((a) => a && typeof a.name === "string");
44
+ } catch (err) {
45
+ if (err.code !== "ENOENT") {
46
+ console.warn("[whatsapp] Failed to load accounts config:", err.message);
47
+ }
48
+ return [];
49
+ }
50
+ }
51
+ function hasCredentials(a) {
52
+ return Boolean(a.phoneNumberId && a.accessToken);
53
+ }
54
+ function sameCredentials(a, b) {
55
+ return a.phoneNumberId === b.phoneNumberId && a.accessToken === b.accessToken;
56
+ }
57
+ function loadAccounts() {
58
+ if (cachedAccounts !== null) return cachedAccounts;
59
+ const byName = /* @__PURE__ */ new Map();
60
+ for (const a of loadPrimaryAccounts()) byName.set(a.name, a);
61
+ for (const legacy of loadLegacyGatewayAccounts()) {
62
+ const existing = byName.get(legacy.name);
63
+ if (!existing) {
64
+ byName.set(legacy.name, legacy);
65
+ continue;
66
+ }
67
+ const existingHasCreds = hasCredentials(existing);
68
+ const legacyHasCreds = hasCredentials(legacy);
69
+ if (existingHasCreds && !legacyHasCreds) continue;
70
+ if (!existingHasCreds && legacyHasCreds) {
71
+ byName.set(legacy.name, legacy);
72
+ continue;
73
+ }
74
+ if (existingHasCreds && legacyHasCreds && !sameCredentials(existing, legacy)) {
75
+ console.warn(
76
+ `[whatsapp] account "${legacy.name}" has CONFLICTING credentials in whatsapp-accounts.json and gateway.json (phoneNumberId "${existing.phoneNumberId}" vs "${legacy.phoneNumberId}"). Using whatsapp-accounts.json (validated store). Reconcile via gateway(action='configure_whatsapp').`
77
+ );
78
+ continue;
79
+ }
80
+ }
81
+ cachedAccounts = Array.from(byName.values());
82
+ return cachedAccounts;
83
+ }
84
+ function getAccountByName(name) {
85
+ return loadAccounts().find((a) => a.name === name);
86
+ }
87
+ function getAccountByPhoneNumberId(phoneNumberId) {
88
+ return loadAccounts().find((a) => a.phoneNumberId === phoneNumberId);
89
+ }
90
+ function getDefaultAccount() {
91
+ const accounts = loadAccounts();
92
+ return accounts[0];
93
+ }
94
+ function _resetCache() {
95
+ cachedAccounts = null;
96
+ }
97
+
98
+ export {
99
+ loadAccounts,
100
+ getAccountByName,
101
+ getAccountByPhoneNumberId,
102
+ getDefaultAccount,
103
+ _resetCache
104
+ };
@@ -0,0 +1,6 @@
1
+ // src/lib/session-busy-pattern.ts
2
+ var BUSY_PATTERN = /[✻✽✶✳].*…|Running…|• Working|• Ran |• Explored|• Called|esc to interrupt/;
3
+
4
+ export {
5
+ BUSY_PATTERN
6
+ };
@@ -1,22 +1,25 @@
1
1
  import {
2
2
  getBrandAsciiArt,
3
3
  getBrandName
4
- } from "./chunk-TPHCZDE3.js";
4
+ } from "./chunk-O5V57XYE.js";
5
5
  import {
6
6
  getMasterKey,
7
7
  setMasterKey
8
- } from "./chunk-Z42MXYWW.js";
8
+ } from "./chunk-QWVXN224.js";
9
+ import {
10
+ RUNTIME_TABLE
11
+ } from "./chunk-NGP6LSV2.js";
9
12
  import {
10
13
  EXE_AI_DIR,
11
14
  LEGACY_LANCE_PATH,
12
15
  MODELS_DIR,
13
16
  loadConfig,
14
17
  saveConfig
15
- } from "./chunk-7Y5UDEVM.js";
18
+ } from "./chunk-WZHZCDDO.js";
16
19
  import {
17
20
  atomicWriteJsonSync,
18
21
  atomicWriteSync
19
- } from "./chunk-SHIICYJW.js";
22
+ } from "./chunk-BYTDMAGB.js";
20
23
 
21
24
  // src/lib/setup-wizard.ts
22
25
  import crypto from "crypto";
@@ -204,7 +207,7 @@ function clearSetupState() {
204
207
  }
205
208
  async function probeDaemonHealthAfterInstall() {
206
209
  try {
207
- const { waitForDaemonReady } = await import("./daemon-ready-5XI5BIJD.js");
210
+ const { waitForDaemonReady } = await import("./daemon-ready-4JTSFKAY.js");
208
211
  return await waitForDaemonReady(4, 500);
209
212
  } catch {
210
213
  return false;
@@ -488,7 +491,7 @@ async function runSetupWizard(opts = {}) {
488
491
  log(" The old directory will not be modified or deleted.");
489
492
  log("");
490
493
  }
491
- const { getKeyBackupStatus, markKeyBackupConfirmed } = await import("./key-backup-status-TNEHXA2X.js");
494
+ const { getKeyBackupStatus, markKeyBackupConfirmed } = await import("./key-backup-status-LOSMVATJ.js");
492
495
  const keyBackupBeforeStep1 = getKeyBackupStatus();
493
496
  const mustRunKeyCeremony = !state.completedSteps.includes(1) || !keyBackupBeforeStep1.exists;
494
497
  if (mustRunKeyCeremony) {
@@ -509,20 +512,22 @@ async function runSetupWizard(opts = {}) {
509
512
  log("");
510
513
  const { exportMnemonic } = await import("./lib/keychain.js");
511
514
  const mnemonic = await exportMnemonic(key);
512
- log("=============================================================");
513
- log(" YOUR 24-WORD RECOVERY PHRASE");
514
- log("=============================================================");
515
- log("");
516
- log(" " + mnemonic);
517
- log("");
518
- log(" SAVE THIS NOW before continuing.");
519
- log(" Best: put it in your password manager, or write it down and keep it safe.");
520
- log(" This phrase is the ONLY way to decrypt your memories if you lose this computer.");
521
- log(" We cannot recover it for you.");
522
- log("");
523
- log(" Like a Bitcoin wallet \u2014 lose the phrase, lose everything.");
524
- log("=============================================================");
525
- log("");
515
+ if (!nonInteractive) {
516
+ log("=============================================================");
517
+ log(" YOUR 24-WORD RECOVERY PHRASE");
518
+ log("=============================================================");
519
+ log("");
520
+ log(" " + mnemonic);
521
+ log("");
522
+ log(" SAVE THIS NOW before continuing.");
523
+ log(" Best: put it in your password manager, or write it down and keep it safe.");
524
+ log(" This phrase is the ONLY way to decrypt your memories if you lose this computer.");
525
+ log(" We cannot recover it for you.");
526
+ log("");
527
+ log(" Like a Bitcoin wallet \u2014 lose the phrase, lose everything.");
528
+ log("=============================================================");
529
+ log("");
530
+ }
526
531
  const confirmation = nonInteractive ? "" : await ask(rl, 'Type "I SAVED MY RECOVERY PHRASE" after you have saved it: ', true);
527
532
  if (nonInteractive) {
528
533
  const recoveryPath = path2.join(EXE_AI_DIR, "recovery-phrase.txt");
@@ -530,6 +535,16 @@ async function runSetupWizard(opts = {}) {
530
535
  writeFileSync(recoveryPath, mnemonic + "\n", { mode: 384 });
531
536
  chmodSync(recoveryPath, 384);
532
537
  log(`[headless] Recovery phrase written to ${recoveryPath} (0600). It is not marked as confirmed.`);
538
+ log("");
539
+ log(" ============================================================");
540
+ log(" \u26A0 SECURITY: recovery-phrase.txt is PLAINTEXT on disk.");
541
+ log(" Record the 24-word phrase in a password manager or offline");
542
+ log(" vault, then DELETE the file \u2014 it is not deleted for you:");
543
+ log(" exe-os doctor --delete-local-secret-residue");
544
+ log(" Leaving it on disk defeats end-to-end encryption if this");
545
+ log(" machine is compromised.");
546
+ log(" ============================================================");
547
+ log("");
533
548
  }
534
549
  if (!nonInteractive && confirmation.toUpperCase().trim() !== "I SAVED MY RECOVERY PHRASE") {
535
550
  throw new Error(
@@ -711,7 +726,7 @@ async function runSetupWizard(opts = {}) {
711
726
  if (cloudConfig) {
712
727
  config.cloud = cloudConfig;
713
728
  }
714
- const { applyDefaultOrchestrationPhase } = await import("./orchestration-phase-CXRCBCK7.js");
729
+ const { applyDefaultOrchestrationPhase } = await import("./orchestration-phase-AWBXPO52.js");
715
730
  applyDefaultOrchestrationPhase(config);
716
731
  await saveConfig(config);
717
732
  log("");
@@ -737,7 +752,7 @@ async function runSetupWizard(opts = {}) {
737
752
  log("Step 5 already complete \u2014 skipping.");
738
753
  }
739
754
  if (!state.completedSteps.includes(55)) {
740
- const { savePreferences, loadPreferences: loadPrefs } = await import("./preferences-TYTGDXQZ.js");
755
+ const { savePreferences, loadPreferences: loadPrefs } = await import("./preferences-TWIXZBKS.js");
741
756
  const existingPrefs = loadPrefs();
742
757
  const prefs = { ...existingPrefs };
743
758
  if (!fast) {
@@ -808,7 +823,7 @@ async function runSetupWizard(opts = {}) {
808
823
  }
809
824
  const rtMap = {
810
825
  "1": { runtime: "claude", defaultModel: "claude-sonnet-4.6" },
811
- "2": { runtime: "codex", defaultModel: "o3" },
826
+ "2": { runtime: "codex", defaultModel: RUNTIME_TABLE.codex.defaultModel },
812
827
  "3": { runtime: "opencode", defaultModel: "anthropic/claude-sonnet-4-6" }
813
828
  };
814
829
  const selected = rtMap[rtChoice.trim()] ?? rtMap["1"];
@@ -1097,7 +1112,7 @@ async function runSetupWizard(opts = {}) {
1097
1112
  log("");
1098
1113
  unlockExecutives = (await askOrEnv("Unlock Phase 2 executives now? (y/N): ", void 0, "n")).toLowerCase() === "y";
1099
1114
  }
1100
- const { setOrchestrationPhase } = await import("./orchestration-phase-CXRCBCK7.js");
1115
+ const { setOrchestrationPhase } = await import("./orchestration-phase-AWBXPO52.js");
1101
1116
  if (!unlockExecutives) {
1102
1117
  await setOrchestrationPhase("phase_1_coo", "setup-wizard");
1103
1118
  log("");