@askexenow/exe-os 0.9.374 → 0.9.376

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 (455) hide show
  1. package/deploy/compose/.env.customer.example +16 -1
  2. package/deploy/compose/.env.example +16 -1
  3. package/deploy/compose/docker-compose.yml +80 -18
  4. package/deploy/compose/gateway-watchdog.sh +17 -0
  5. package/deploy/compose/generate-env.ts +41 -1
  6. package/deploy/compose/sso-edge/default.conf.template +59 -63
  7. package/deploy/compose/sso-edge/error-pages/404.html +129 -0
  8. package/deploy/compose/sso-edge/error-pages/500.html +129 -0
  9. package/deploy/compose/sso-edge/error-pages/503.html +118 -0
  10. package/deploy/compose/sso-edge/sso-redirect.conf +115 -92
  11. package/dist/.dist-verified.json +3 -3
  12. package/dist/{active-agent-ONPPEWQV.js → active-agent-BOBBUJ74.js} +6 -6
  13. package/dist/{active-agent-UJKMG7LJ.js → active-agent-GFGEGK2U.js} +6 -6
  14. package/dist/{agent-defs-generator-ZWI6DXOE.js → agent-defs-generator-OX6UFPRX.js} +5 -5
  15. package/dist/{agent-loop-OYHJKNYH.js → agent-loop-7ZRH56EX.js} +1 -1
  16. package/dist/{agentic-ontology-WHFJ3QFS.js → agentic-ontology-DT3VOXBT.js} +1 -1
  17. package/dist/{backfill-metadata-3OUSQD5V.js → backfill-metadata-VRP6PTPP.js} +9 -9
  18. package/dist/{backup-verify-ZKTUYLTA.js → backup-verify-LWHKGOOV.js} +1 -1
  19. package/dist/behavior-injection-GMZKZ3BT.js +83 -0
  20. package/dist/behavior-promotion-QPC4AQ24.js +62 -0
  21. package/dist/{behaviors-ZJ45TFBJ.js → behaviors-GPI4BLTC.js} +16 -14
  22. package/dist/bin/agentic-ontology-backfill.js +10 -10
  23. package/dist/bin/agentic-reflection-backfill.js +11 -11
  24. package/dist/bin/agentic-semantic-label.js +10 -10
  25. package/dist/bin/backfill-conversations.js +14 -12
  26. package/dist/bin/backfill-responses.js +14 -12
  27. package/dist/bin/backfill-vectors.js +16 -14
  28. package/dist/bin/bulk-sync-postgres.js +21 -19
  29. package/dist/bin/cc-doctor.js +19 -11
  30. package/dist/bin/cleanup-stale-review-tasks.js +27 -26
  31. package/dist/bin/cli.js +83 -109
  32. package/dist/bin/daemon-restart-handoff.js +2 -1
  33. package/dist/bin/deferred-daemon-restart.js +118 -110
  34. package/dist/bin/exe-actions.js +176 -0
  35. package/dist/bin/exe-agent-config.js +5 -5
  36. package/dist/bin/exe-agent.js +23 -23
  37. package/dist/bin/exe-assign.js +16 -14
  38. package/dist/bin/exe-boot.js +91 -71
  39. package/dist/bin/exe-call.js +8 -8
  40. package/dist/bin/exe-cicd.js +1210 -0
  41. package/dist/bin/exe-cloud.js +70 -37
  42. package/dist/bin/exe-config-dump.js +5 -5
  43. package/dist/bin/exe-dispatch.js +28 -27
  44. package/dist/bin/exe-doctor.js +12 -11
  45. package/dist/bin/exe-export-behaviors.js +20 -18
  46. package/dist/bin/exe-forget.js +11 -11
  47. package/dist/bin/exe-gateway.js +10 -10
  48. package/dist/bin/exe-healthcheck.js +22 -10
  49. package/dist/bin/exe-heartbeat.js +33 -32
  50. package/dist/bin/exe-kill.js +32 -31
  51. package/dist/bin/exe-launch-agent.js +76 -54
  52. package/dist/bin/exe-mcp.js +10 -6
  53. package/dist/bin/exe-memory-reads.js +9 -9
  54. package/dist/bin/exe-model-supervisor.js +138 -0
  55. package/dist/bin/exe-new-employee.js +14 -14
  56. package/dist/bin/exe-os-mcp-proxy.js +10 -6
  57. package/dist/bin/exe-pending-messages.js +28 -27
  58. package/dist/bin/exe-pending-notifications.js +27 -26
  59. package/dist/bin/exe-pending-reviews.js +28 -27
  60. package/dist/bin/exe-rename.js +9 -9
  61. package/dist/bin/exe-repo-truth.js +1 -1
  62. package/dist/bin/exe-review.js +31 -30
  63. package/dist/bin/exe-search.js +10 -10
  64. package/dist/bin/exe-session-cleanup.js +32 -31
  65. package/dist/bin/exe-settings.js +21 -19
  66. package/dist/bin/exe-start-codex.js +31 -25
  67. package/dist/bin/exe-start-opencode.js +24 -22
  68. package/dist/bin/exe-start.sh +11 -2
  69. package/dist/bin/exe-status.js +29 -28
  70. package/dist/bin/exe-support.js +3 -3
  71. package/dist/bin/exe-team.js +7 -7
  72. package/dist/bin/exe-timers.js +2 -1
  73. package/dist/bin/exe-watchdog.js +170 -16
  74. package/dist/bin/generate-hook-manifest.js +8 -41
  75. package/dist/bin/git-sweep.js +28 -27
  76. package/dist/bin/graph-backfill.js +11 -11
  77. package/dist/bin/graph-export.js +10 -10
  78. package/dist/bin/hooks-cli.js +289 -0
  79. package/dist/bin/import-history.js +14 -14
  80. package/dist/bin/install.js +130 -116
  81. package/dist/bin/intercom-check.js +5 -5
  82. package/dist/bin/mcp-sessions.js +2 -2
  83. package/dist/bin/orchestration-metrics.js +7 -7
  84. package/dist/bin/postgres-agentic-reflection-backfill.js +4 -4
  85. package/dist/bin/postgres-agentic-semantic-backfill.js +4 -4
  86. package/dist/bin/pre-publish.js +1 -1
  87. package/dist/bin/reconcile-backlog.js +2 -2
  88. package/dist/bin/registry-proxy.js +2 -2
  89. package/dist/bin/scan-tasks.js +52 -38
  90. package/dist/bin/setup.js +1 -1
  91. package/dist/bin/shard-migrate.js +9 -9
  92. package/dist/bin/stack-update.js +10 -5
  93. package/dist/bin/verify-stack.js +3 -1
  94. package/dist/bin/vps-health-gate.js +1 -1
  95. package/dist/{boot-generation-JKVZ4ZAT.js → boot-generation-BN6GKASY.js} +6 -6
  96. package/dist/{boot-review-sections-2M6BTG73.js → boot-review-sections-OQ5JGSOD.js} +26 -25
  97. package/dist/{branch-hygiene-U5GFRSTP.js → branch-hygiene-QLD77IMJ.js} +1 -1
  98. package/dist/build-manifest.json +1186 -1106
  99. package/dist/{capability-cards-5IMJT6J7.js → capability-cards-EDZ62HKG.js} +5 -5
  100. package/dist/{capacity-monitor-SAXCQK7O.js → capacity-monitor-6GMTVILS.js} +28 -27
  101. package/dist/{catchup-brief-U2TXBLHD.js → catchup-brief-SGGBMDUP.js} +32 -31
  102. package/dist/{cc-binary-detect-6TNIY5JX.js → cc-binary-detect-ZR6WNOUU.js} +1 -3
  103. package/dist/{chunk-NKETJCB5.js → chunk-2ODXCCMR.js} +18 -3
  104. package/dist/{hook-integrity-KGAV6ZC2.js → chunk-3L72UBUH.js} +28 -15
  105. package/dist/chunk-3OX5S7KZ.js +273 -0
  106. package/dist/{chunk-W75GTHR3.js → chunk-3SRZNJKD.js} +1 -1
  107. package/dist/{chunk-I4DNJFDR.js → chunk-42IFYZUN.js} +4 -4
  108. package/dist/{chunk-JHI5WMK5.js → chunk-473JUDCT.js} +5 -5
  109. package/dist/{chunk-ANLFH23R.js → chunk-4F5CNI65.js} +1 -1
  110. package/dist/{chunk-AWWKRZMB.js → chunk-4KVSCQND.js} +87 -14
  111. package/dist/{chunk-ZCERWHY2.js → chunk-4M6RXJEY.js} +33 -23
  112. package/dist/{chunk-YTSXPJUQ.js → chunk-4YJEEOYT.js} +3 -3
  113. package/dist/{chunk-6RKKVPYF.js → chunk-4YUGB637.js} +1 -1
  114. package/dist/{chunk-XXOPG4BW.js → chunk-4ZSOKEDY.js} +3 -3
  115. package/dist/{chunk-55BEFF4V.js → chunk-5DF4Y6EC.js} +1 -1
  116. package/dist/{chunk-4QCFFW2H.js → chunk-5QCIWWFA.js} +46 -0
  117. package/dist/{chunk-3UUX5OY4.js → chunk-5QKLWJ4Z.js} +1 -1
  118. package/dist/{chunk-YSLGFPWX.js → chunk-5UBWBXLF.js} +3 -3
  119. package/dist/chunk-5WA4DG2A.js +117 -0
  120. package/dist/{chunk-4EN3IZ3Q.js → chunk-64ODONK2.js} +67 -1
  121. package/dist/{chunk-TAMDAOCU.js → chunk-66CGXQUA.js} +239 -39
  122. package/dist/{chunk-QHJR7IMX.js → chunk-6F3FQCAQ.js} +3 -3
  123. package/dist/{chunk-WMEYJT4R.js → chunk-6FG34V6D.js} +15 -14
  124. package/dist/{chunk-NMH5ZQPU.js → chunk-6KQ6WMTI.js} +1 -1
  125. package/dist/{chunk-IRVOXUSK.js → chunk-6WKBTZVL.js} +10 -4
  126. package/dist/{chunk-NOKJCF27.js → chunk-7INEFMVU.js} +9 -3
  127. package/dist/{chunk-GSJLB6JI.js → chunk-7THUQU44.js} +34 -8
  128. package/dist/{chunk-HDLAB7W3.js → chunk-7UH2JWBF.js} +1 -1
  129. package/dist/{chunk-KTCXJWJG.js → chunk-7UNMSF5O.js} +1 -1
  130. package/dist/{chunk-JTVIANUB.js → chunk-AEUGIJDO.js} +3 -1
  131. package/dist/{chunk-DSJI76XL.js → chunk-AHNVFBVB.js} +113 -16
  132. package/dist/{chunk-IBS2FAI4.js → chunk-AUKRBHHZ.js} +4 -1
  133. package/dist/{chunk-AKLJ4JH3.js → chunk-BBK2TSK3.js} +1 -1
  134. package/dist/{chunk-ZL4AGWAH.js → chunk-BNWWVYRN.js} +6 -5
  135. package/dist/{chunk-PY3FOMRN.js → chunk-BQEZPRUC.js} +4 -4
  136. package/dist/{chunk-DIXXEE3S.js → chunk-BQXYXJYC.js} +721 -309
  137. package/dist/{chunk-ORM7ZFKC.js → chunk-BZ546I4Q.js} +32 -0
  138. package/dist/{chunk-3KDCORDO.js → chunk-C2UN464N.js} +1 -1
  139. package/dist/{chunk-75H4R62K.js → chunk-CBPNZFSU.js} +0 -2
  140. package/dist/{chunk-YLXTKI6M.js → chunk-CHO5SNWR.js} +1 -1
  141. package/dist/{chunk-MXPNVSXI.js → chunk-CIEVY5TD.js} +11 -11
  142. package/dist/{chunk-UBK7HK3J.js → chunk-CKLJT2DH.js} +2 -2
  143. package/dist/{chunk-MOGA4Q7F.js → chunk-CKOJP7JI.js} +1 -1
  144. package/dist/{chunk-V3W3SATA.js → chunk-CL4J4757.js} +1 -1
  145. package/dist/{chunk-XNNECNDL.js → chunk-CQFWTWC6.js} +13 -13
  146. package/dist/{chunk-PDVXWXTL.js → chunk-CROVXJ4S.js} +3 -3
  147. package/dist/{chunk-WJG344NC.js → chunk-CWSLTSL6.js} +8 -8
  148. package/dist/{chunk-VMTZ4RUW.js → chunk-DDMGQ5Q3.js} +60 -26
  149. package/dist/{chunk-YKC7QDZH.js → chunk-DN24VTS5.js} +31 -6
  150. package/dist/{chunk-IN6CAM4F.js → chunk-EHAN752X.js} +7 -7
  151. package/dist/{chunk-EXTZSNWL.js → chunk-EPHSISMT.js} +2 -2
  152. package/dist/{chunk-6EZQUNE6.js → chunk-FCMQVEVL.js} +36 -3
  153. package/dist/{chunk-3L2QU5ZF.js → chunk-FS7XF7SE.js} +1 -1
  154. package/dist/{chunk-LGS2V2XD.js → chunk-FUKVP54K.js} +66 -19
  155. package/dist/{chunk-44TLJZJ5.js → chunk-FX2QRSRT.js} +1 -1
  156. package/dist/{chunk-PWRC5XZO.js → chunk-FXZ6VGFW.js} +16 -8
  157. package/dist/{chunk-NT7W4RXD.js → chunk-GKDAQL45.js} +1 -1
  158. package/dist/{chunk-EKE37MO4.js → chunk-GOT5ZHPX.js} +3 -3
  159. package/dist/{chunk-SLLLOOEI.js → chunk-GPJIBLP4.js} +1 -0
  160. package/dist/{chunk-EKYYMIVT.js → chunk-GPUOUUHA.js} +10 -1
  161. package/dist/{chunk-PB5S7YOF.js → chunk-GXNBPTPJ.js} +1 -1
  162. package/dist/{chunk-4SJ4LK4V.js → chunk-HE34XVD5.js} +5 -5
  163. package/dist/{chunk-6VHOQ3IM.js → chunk-HHAKXIKX.js} +12 -9
  164. package/dist/{chunk-TFKCERAK.js → chunk-HHT527PV.js} +38 -41
  165. package/dist/{chunk-ZSODLMFV.js → chunk-HIVOLPLD.js} +1 -40
  166. package/dist/{chunk-UCFC2AEI.js → chunk-I3LDTSWU.js} +1 -1
  167. package/dist/{chunk-Q3AXXKDF.js → chunk-IKXH4BFC.js} +5 -5
  168. package/dist/chunk-IMYGYIAI.js +23 -0
  169. package/dist/{chunk-GS7LIT34.js → chunk-IPHLUZ37.js} +1 -1
  170. package/dist/{chunk-M4IRPXSZ.js → chunk-IZA7XW2Q.js} +3 -3
  171. package/dist/{chunk-SEQIPGLU.js → chunk-IZLML47J.js} +1 -1
  172. package/dist/{chunk-4HKTO2SV.js → chunk-JRMHGO5B.js} +1 -1
  173. package/dist/{chunk-U73AC5AN.js → chunk-JSTTPYL3.js} +16 -16
  174. package/dist/{chunk-6SCGLHJ7.js → chunk-JVWLHBAV.js} +4 -4
  175. package/dist/{chunk-OVEQE6YS.js → chunk-K7UNIEB4.js} +254 -48
  176. package/dist/{chunk-HNWS7YHN.js → chunk-KBR5LIWD.js} +1 -1
  177. package/dist/{chunk-AKLQSC6W.js → chunk-KI7O64XV.js} +328 -98
  178. package/dist/{chunk-XXFKSJYA.js → chunk-KK3MIY5C.js} +5 -5
  179. package/dist/{chunk-U6SUKSZR.js → chunk-KO3OHI6V.js} +3 -3
  180. package/dist/{chunk-NJFJWQNN.js → chunk-L5CGXEZC.js} +27 -22
  181. package/dist/{chunk-NBXDXKLC.js → chunk-LK3XQDBP.js} +1 -1
  182. package/dist/{chunk-T3QUKNLI.js → chunk-LM443ORV.js} +1 -1
  183. package/dist/{chunk-BBSIEYF5.js → chunk-LNAFLXL7.js} +12 -4
  184. package/dist/{chunk-32YV32VA.js → chunk-LTUA5EYI.js} +122 -11
  185. package/dist/{chunk-23MVDXLY.js → chunk-MAXD5JQL.js} +11 -10
  186. package/dist/{chunk-GNUAL43X.js → chunk-MFASHRJ6.js} +5 -5
  187. package/dist/chunk-MFYMDGE7.js +37 -0
  188. package/dist/{chunk-VKJGHAZT.js → chunk-MGVILAYU.js} +57 -13
  189. package/dist/{chunk-DB55JZHU.js → chunk-MSLWRWTI.js} +1 -1
  190. package/dist/{chunk-C2L622QJ.js → chunk-NB5IRTC4.js} +52 -44
  191. package/dist/{chunk-2ZOEC4KC.js → chunk-ND75TGPR.js} +2 -2
  192. package/dist/{chunk-VRTCVZND.js → chunk-NE34MWVL.js} +142 -16
  193. package/dist/{chunk-S2WBS6BG.js → chunk-NMOFLWDY.js} +1 -1
  194. package/dist/{chunk-CRCB5S7I.js → chunk-NPXKGBVZ.js} +140 -23
  195. package/dist/{chunk-JSMDRKPJ.js → chunk-NRBGUIPE.js} +1 -1
  196. package/dist/{chunk-4LWBC7CM.js → chunk-NY6SBR4O.js} +1 -1
  197. package/dist/{chunk-UCUOGVDX.js → chunk-O3K2C22L.js} +13 -1
  198. package/dist/{chunk-R522MWAR.js → chunk-OATET4BV.js} +2 -2
  199. package/dist/chunk-OOZU5H3T.js +86 -0
  200. package/dist/{chunk-XFTEX77S.js → chunk-OQ4FNDRG.js} +28 -6
  201. package/dist/{chunk-VYQ7B7DI.js → chunk-OWVX52XF.js} +4 -4
  202. package/dist/{chunk-AETLDRZB.js → chunk-PEAAX6UA.js} +1 -1
  203. package/dist/{chunk-UM3N6VND.js → chunk-PFAVHC5N.js} +5 -5
  204. package/dist/chunk-PMVVUIHH.js +85 -0
  205. package/dist/chunk-PPMGQFLJ.js +2317 -0
  206. package/dist/{chunk-7TSBV3SD.js → chunk-PTY2N23C.js} +310 -2
  207. package/dist/{chunk-UKLN57Q5.js → chunk-PZ5SKYK6.js} +4 -4
  208. package/dist/{chunk-636LKCKE.js → chunk-Q6ZLQMP2.js} +1 -1
  209. package/dist/{chunk-N7VEP5B3.js → chunk-QFR5EKZG.js} +29 -7
  210. package/dist/{chunk-YMP2QSOP.js → chunk-QN56VQ6Z.js} +1 -1
  211. package/dist/{chunk-6YVUR3OU.js → chunk-QR3BUMOS.js} +2 -2
  212. package/dist/{chunk-XZ65ST2I.js → chunk-QV5CQLQH.js} +2 -2
  213. package/dist/{chunk-DJOIMFKV.js → chunk-REZIGNA6.js} +2 -2
  214. package/dist/{chunk-UQGSBM3U.js → chunk-RFPMXR6B.js} +11 -0
  215. package/dist/{chunk-DN4YVV4Z.js → chunk-RSABKW6B.js} +1 -1
  216. package/dist/{chunk-LP4GB656.js → chunk-RZNP35SI.js} +2 -2
  217. package/dist/{chunk-NUTZJZKW.js → chunk-SKTAZGFI.js} +10 -42
  218. package/dist/{chunk-TQAZTRQ3.js → chunk-SVXUT2DN.js} +4 -4
  219. package/dist/{chunk-DJ7YXOTU.js → chunk-T7EF5CQO.js} +3 -3
  220. package/dist/{chunk-QAEWWYHL.js → chunk-TDF2XKLK.js} +5 -1
  221. package/dist/{chunk-ZGYNKA3O.js → chunk-TT5BBVLX.js} +29 -31
  222. package/dist/{chunk-5H47VHB7.js → chunk-UWX6MMCX.js} +1 -1
  223. package/dist/{chunk-XL5MFGMR.js → chunk-V4YNN7PA.js} +10 -3
  224. package/dist/{chunk-SL6KQYDU.js → chunk-V5DDXXMP.js} +7 -7
  225. package/dist/{chunk-DZKPOSFD.js → chunk-VH6SPPNA.js} +1 -1
  226. package/dist/{chunk-LDNYSMPZ.js → chunk-VJUUI2VT.js} +1 -1
  227. package/dist/{chunk-CBCGDEJA.js → chunk-VN5WOOAQ.js} +42 -6
  228. package/dist/{chunk-EXDW3E2R.js → chunk-VPHJ2LUI.js} +165 -15
  229. package/dist/{chunk-GOMQ7PVQ.js → chunk-WJC6AAJN.js} +1 -1
  230. package/dist/{chunk-GJI77VDO.js → chunk-WVBVUVZB.js} +6 -5
  231. package/dist/{chunk-A6PDF4BO.js → chunk-XTQ7R2PA.js} +2 -2
  232. package/dist/{chunk-L6RXG36J.js → chunk-Y2HD2YB7.js} +1 -1
  233. package/dist/{chunk-KTU3EAWK.js → chunk-YAACLBZ7.js} +5 -5
  234. package/dist/{chunk-7GE2EQ23.js → chunk-YGVAKKGJ.js} +11 -6
  235. package/dist/chunk-YLHACCCB.js +166 -0
  236. package/dist/{chunk-PLZSZOZN.js → chunk-YP6UGVEY.js} +3 -3
  237. package/dist/{chunk-ULIBLJ6W.js → chunk-YYC553FO.js} +5 -5
  238. package/dist/{chunk-T35RCQFE.js → chunk-YZPEQW7H.js} +9 -8
  239. package/dist/{chunk-KI5PFRG6.js → chunk-ZKGWHT56.js} +60 -2
  240. package/dist/{chunk-NUK7EEN5.js → chunk-ZKJ5S23O.js} +33 -13
  241. package/dist/chunk-ZLPS3GR7.js +146 -0
  242. package/dist/{chunk-XH7YL7JM.js → chunk-ZMX22HSS.js} +50 -6
  243. package/dist/{chunk-JY5GAZYC.js → chunk-ZQEJ4IX2.js} +4 -0
  244. package/dist/{chunk-R4CBHKZ2.js → chunk-ZS5JO6QV.js} +7 -6
  245. package/dist/{cleanup-graph-garbage-DPJGO52H.js → cleanup-graph-garbage-LAPIZGFX.js} +12 -12
  246. package/dist/{cloud-sync-command-JPNTT4OQ.js → cloud-sync-command-QAZ2NWRA.js} +11 -2
  247. package/dist/{cloud-sync-db-init-V2LWIUQU.js → cloud-sync-db-init-HAGVF32Y.js} +1 -1
  248. package/dist/{cloud-sync-shutdown-BNALPWGX.js → cloud-sync-shutdown-DAEPCFVK.js} +5 -5
  249. package/dist/{co-activation-CMNSWS6B.js → co-activation-523TKQPZ.js} +5 -5
  250. package/dist/{co-occurrence-WRI2NAN6.js → co-occurrence-PQUCTENN.js} +36 -17
  251. package/dist/{code-context-index-NOJSHLPN.js → code-context-index-LIDOFKOR.js} +6 -4
  252. package/dist/{code-context-watcher-VZNZU3BO.js → code-context-watcher-4F7K2N3U.js} +6 -4
  253. package/dist/{content-extractor-NXYNEF5K.js → content-extractor-DJM5EUDA.js} +2 -2
  254. package/dist/{conversation-entity-extractor-74252CAO.js → conversation-entity-extractor-THGKQ5RD.js} +5 -5
  255. package/dist/{crdt-sync-B3JN6AIV.js → crdt-sync-32B55NOJ.js} +1 -1
  256. package/dist/{crm-webhook-GYWQRFET.js → crm-webhook-FHRISFYQ.js} +2 -2
  257. package/dist/{cto-delegation-gate-LQHVLEMW.js → cto-delegation-gate-O6XPGECP.js} +27 -26
  258. package/dist/{daemon-auth-QZHEO7IQ.js → daemon-auth-PNKHERLV.js} +6 -1
  259. package/dist/daemon-drift-N2GKUBAO.js +15 -0
  260. package/dist/{daemon-orchestration-5HIQALZH.js → daemon-orchestration-BWLSJG2X.js} +33 -30
  261. package/dist/{daemon-ready-P2BR2XP5.js → daemon-ready-BN6EZLTQ.js} +1 -1
  262. package/dist/{daemon-ready-signal-CKXPUMJ2.js → daemon-ready-signal-PNDMVKPJ.js} +3 -1
  263. package/dist/{daemon-restart-circuit-breaker-SMTWFX27.js → daemon-restart-circuit-breaker-CD4VMCU7.js} +1 -1
  264. package/dist/daemon-restart-report-FIO5HZTJ.js +15 -0
  265. package/dist/{daemon-timer-report-TNJH5SFY.js → daemon-timer-report-6UK5PSDP.js} +2 -1
  266. package/dist/{db-integrity-events-2DTFO37N.js → db-integrity-events-GYGANKZV.js} +1 -1
  267. package/dist/{destructive-data-guard-BVFWPPIS.js → destructive-data-guard-HHWUBIGS.js} +1 -1
  268. package/dist/{doc-graph-extractor-PQHDHQPQ.js → doc-graph-extractor-HOKOV7BE.js} +10 -10
  269. package/dist/{documents-C4SSPJMC.js → documents-HWEJMONR.js} +16 -14
  270. package/dist/{dreaming-XAO3FCBV.js → dreaming-FMNDODG2.js} +31 -30
  271. package/dist/{employee-boot-brief-W4OHUMRQ.js → employee-boot-brief-DBFROOQJ.js} +35 -34
  272. package/dist/{entity-boost-3UWGXG5O.js → entity-boost-5V4W6NFA.js} +1 -1
  273. package/dist/{exe-drift-AG2KMKD5.js → exe-drift-V55UAYRT.js} +6 -6
  274. package/dist/{exe-export-IC5BT335.js → exe-export-LHN42ZUS.js} +18 -16
  275. package/dist/{exe-import-A35ZLDPG.js → exe-import-M536BEZC.js} +18 -16
  276. package/dist/{exe-key-TCMJNYLA.js → exe-key-37XIR22X.js} +111 -107
  277. package/dist/{exe-org-JXCR3JYZ.js → exe-org-7TDIRNTE.js} +14 -14
  278. package/dist/{exe-snapshot-SV6SRIG6.js → exe-snapshot-EOUBCIQK.js} +34 -33
  279. package/dist/{fast-db-init-L2RGKJWH.js → fast-db-init-GWUZ746B.js} +1 -1
  280. package/dist/{founder-context-D4HFIESJ.js → founder-context-6LQKET4A.js} +2 -2
  281. package/dist/{fts-integrity-4YB34KWX.js → fts-integrity-PLAL6NMG.js} +1 -1
  282. package/dist/gateway/index.js +17 -17
  283. package/dist/{git-main-guard-VTW4N3CM.js → git-main-guard-BGICS25C.js} +1 -1
  284. package/dist/{git-staleness-TN7CYGFG.js → git-staleness-QNNXJK3W.js} +5 -5
  285. package/dist/{global-procedures-YFDEIOG7.js → global-procedures-NMQGF54V.js} +7 -7
  286. package/dist/{gotrue-session-ODZ2ERJX.js → gotrue-session-U4H3UGHL.js} +1 -3
  287. package/dist/{graph-auto-extract-3YR3TYRW.js → graph-auto-extract-7POGAKHM.js} +10 -10
  288. package/dist/{graph-query-AP5R6ZHO.js → graph-query-ZEDO4BDF.js} +1 -1
  289. package/dist/{graph-rag-Z2KCJTPK.js → graph-rag-JA7XN7NO.js} +5 -5
  290. package/dist/hook-integrity-6NLSNTXD.js +15 -0
  291. package/dist/{hook-prefetch-K5DN3TOQ.js → hook-prefetch-4KH3D4YU.js} +28 -26
  292. package/dist/hook-tamper-log-Z4PWC7N4.js +90 -0
  293. package/dist/hooks/bug-report-worker.js +31 -30
  294. package/dist/hooks/codex-stop-task-finalizer.js +33 -32
  295. package/dist/hooks/commit-complete.js +30 -29
  296. package/dist/hooks/error-recall.js +12 -12
  297. package/dist/hooks/exe-heartbeat-hook.js +7 -7
  298. package/dist/hooks/ingest-worker.js +17 -15
  299. package/dist/hooks/ingest.js +20 -20
  300. package/dist/hooks/instructions-loaded.js +9 -9
  301. package/dist/hooks/manifest.json +20 -20
  302. package/dist/hooks/notification.js +8 -8
  303. package/dist/hooks/post-compact.js +7 -7
  304. package/dist/hooks/post-tool-combined.js +14 -14
  305. package/dist/hooks/pre-compact.js +30 -29
  306. package/dist/hooks/pre-tool-use.js +303 -489
  307. package/dist/hooks/prompt-submit.js +61 -54
  308. package/dist/hooks/session-end.js +35 -34
  309. package/dist/hooks/session-start.js +18 -18
  310. package/dist/hooks/stop.js +36 -35
  311. package/dist/hooks/subagent-stop.js +32 -31
  312. package/dist/hooks/summary-worker.js +36 -35
  313. package/dist/index.js +39 -38
  314. package/dist/{installer-LK35OX6R.js → installer-M34Q7LAS.js} +25 -10
  315. package/dist/{installer-54HTN5RE.js → installer-POV6TDQ5.js} +12 -8
  316. package/dist/{installer-LLWKZI2S.js → installer-S624ZOMB.js} +12 -8
  317. package/dist/{intercom-queue-5NOT2RKI.js → intercom-queue-MKDWAEUV.js} +26 -25
  318. package/dist/lib/cloud-sync.js +27 -19
  319. package/dist/lib/consolidation.js +12 -12
  320. package/dist/lib/database.js +5 -5
  321. package/dist/lib/db-backup.js +7 -1
  322. package/dist/lib/db-daemon-client.js +8 -6
  323. package/dist/lib/db-write-worker.js +4 -4
  324. package/dist/lib/db.js +5 -5
  325. package/dist/lib/device-registry.js +1 -1
  326. package/dist/lib/embedder.js +6 -4
  327. package/dist/lib/employee-templates.js +8 -8
  328. package/dist/lib/employees.js +5 -5
  329. package/dist/lib/exe-daemon-client.js +5 -3
  330. package/dist/lib/exe-daemon.js +333 -262
  331. package/dist/lib/hybrid-search.js +10 -10
  332. package/dist/lib/identity-templates.js +1 -1
  333. package/dist/lib/identity.js +17 -7
  334. package/dist/lib/license.js +2 -2
  335. package/dist/lib/messaging.js +27 -26
  336. package/dist/lib/post-tool-memory.js +9 -9
  337. package/dist/lib/registry-proxy.js +3 -1
  338. package/dist/lib/reminders.js +6 -6
  339. package/dist/lib/schedules.js +11 -11
  340. package/dist/lib/session-registry.js +11 -7
  341. package/dist/lib/session-wrappers.js +1 -1
  342. package/dist/lib/skill-learning.js +17 -15
  343. package/dist/lib/status-brief.js +2 -1
  344. package/dist/lib/store.js +9 -9
  345. package/dist/lib/task-router.js +6 -6
  346. package/dist/lib/tasks.js +28 -27
  347. package/dist/lib/tmux-routing.js +26 -25
  348. package/dist/lib/tmux-status.js +5 -1
  349. package/dist/lib/token-spend.js +6 -6
  350. package/dist/{license-gate-JVMB6OFD.js → license-gate-2QNMBAZU.js} +3 -3
  351. package/dist/{license-sync-5VYS2F2W.js → license-sync-FEDKH5MD.js} +2 -2
  352. package/dist/{mailbox-inbox-4MEUOL3J.js → mailbox-inbox-XE72D3AX.js} +2 -2
  353. package/dist/{mailbox-outbox-J6WIF3UY.js → mailbox-outbox-DNDDP2HW.js} +1 -1
  354. package/dist/mcp/register-tools.js +110 -106
  355. package/dist/mcp/server.js +113 -109
  356. package/dist/mcp/tools/complete-reminder.js +7 -7
  357. package/dist/mcp/tools/create-reminder.js +7 -7
  358. package/dist/mcp/tools/create-task.js +30 -29
  359. package/dist/mcp/tools/deactivate-behavior.js +18 -16
  360. package/dist/mcp/tools/list-reminders.js +7 -7
  361. package/dist/mcp/tools/list-tasks.js +30 -29
  362. package/dist/mcp/tools/send-message.js +33 -30
  363. package/dist/mcp/tools/update-task.js +29 -28
  364. package/dist/{mcp-child-registry-OTG4MWO7.js → mcp-child-registry-DVHYAHPW.js} +2 -2
  365. package/dist/{mcp-health-HNVSWKFA.js → mcp-health-B5EKRCZG.js} +2 -2
  366. package/dist/{mcp-http-config-DQWL7U2Z.js → mcp-http-config-ZJ7XHWT7.js} +10 -6
  367. package/dist/{mcp-session-identity-277GASTQ.js → mcp-session-identity-PEVM7VIP.js} +26 -25
  368. package/dist/{memory-cards-3S2ZQPR7.js → memory-cards-VN5DEWPD.js} +9 -9
  369. package/dist/{memory-graph-extractor-A6DFEFIN.js → memory-graph-extractor-TMEB6WLA.js} +11 -11
  370. package/dist/{memory-poisoning-defense-ZVP4H6DY.js → memory-poisoning-defense-DYHARQ2G.js} +5 -5
  371. package/dist/{memory-pressure-watchdog-6W5F6R7H.js → memory-pressure-watchdog-J6Q3SIBL.js} +27 -26
  372. package/dist/{memory-queue-client-ADSDP6OX.js → memory-queue-client-QC2OTMJB.js} +6 -4
  373. package/dist/{memory-reflection-BKB2YOE6.js → memory-reflection-ZYJUOSFX.js} +9 -9
  374. package/dist/{message-queue-client-XQN7QABL.js → message-queue-client-OEQCGSWC.js} +1 -25
  375. package/dist/{notification-ledger-CLGM7ODF.js → notification-ledger-TG6EFYBP.js} +29 -28
  376. package/dist/{notifications-MACUZPYP.js → notifications-LGYY22W5.js} +26 -25
  377. package/dist/{orchestration-events-N7LYMUGA.js → orchestration-events-JPHB6NPY.js} +6 -6
  378. package/dist/{orchestrator-4X24EWHV.js → orchestrator-IC4WGP6L.js} +28 -27
  379. package/dist/{org-brief-session-FZOFMO5U.js → org-brief-session-DEPHWCQR.js} +9 -9
  380. package/dist/{org-consent-policy-O5E6HXBL.js → org-consent-policy-T27AO5OJ.js} +2 -2
  381. package/dist/{org-join-POWUG25F.js → org-join-A3YXC5RB.js} +2 -2
  382. package/dist/{org-key-admin-E7EMDOZZ.js → org-key-admin-SQFHCVP2.js} +3 -3
  383. package/dist/{org-partner-runtime-FODONVTM.js → org-partner-runtime-L7L2WWGN.js} +10 -10
  384. package/dist/{org-row-visibility-VX4AVV5Q.js → org-row-visibility-M54Z6ZH3.js} +1 -1
  385. package/dist/{pipeline-router-6GGT2ZW3.js → pipeline-router-NKYAUR3Y.js} +6 -6
  386. package/dist/{plan-limits-FUN76LYY.js → plan-limits-ISRRGF23.js} +8 -8
  387. package/dist/{platform-procedures-7YSCLF4Z.js → platform-procedures-Z7ZGBJWN.js} +1 -1
  388. package/dist/{project-boot-3Q65LCIP.js → project-boot-BLYGVUJH.js} +4 -1
  389. package/dist/{project-name-LJVFMYTQ.js → project-name-WKSNNKXK.js} +6 -6
  390. package/dist/{projection-worker-4OANGP5K.js → projection-worker-RNYPE46G.js} +2 -2
  391. package/dist/{prospective-memory-KR3P4T6N.js → prospective-memory-GEO6E3UL.js} +5 -5
  392. package/dist/{push-notifications-NCZLH6DI.js → push-notifications-EY6BXZUY.js} +27 -26
  393. package/dist/{reproject-worktree-memories-PWYKPB2U.js → reproject-worktree-memories-DAA5GWMH.js} +28 -27
  394. package/dist/{reranker-6V3C2AO4.js → reranker-7OADQPMG.js} +1 -1
  395. package/dist/{retrieval-health-5D7O6VH6.js → retrieval-health-FCEDWN2P.js} +2 -2
  396. package/dist/{review-polling-QW3LJ4KN.js → review-polling-G52BR4MC.js} +27 -26
  397. package/dist/runtime/index.js +39 -38
  398. package/dist/{session-events-T45SSTMF.js → session-events-P6E2373E.js} +27 -26
  399. package/dist/{session-kill-telemetry-QSPVJGBF.js → session-kill-telemetry-OHNJMIVT.js} +27 -26
  400. package/dist/{session-mcp-config-SC5BLWZG.js → session-mcp-config-WFZAH6R5.js} +2 -1
  401. package/dist/{session-scope-KRWE54C4.js → session-scope-DKOHPQPJ.js} +26 -25
  402. package/dist/{setup-wizard-GP3TBTPF.js → setup-wizard-RNU3RFBE.js} +1 -1
  403. package/dist/{skill-refinement-C7JTMLJG.js → skill-refinement-AKJTHFXC.js} +6 -6
  404. package/dist/{stack-generate-manifest-MFMDWRUP.js → stack-generate-manifest-7WJZWSPK.js} +163 -15
  405. package/dist/{stack-promote-EKSCYY63.js → stack-promote-OP2URGFF.js} +4 -4
  406. package/dist/{stack-release-2GZAAFO4.js → stack-release-MY6U2QIO.js} +31 -8
  407. package/dist/{stack-update-J6JXSTAZ.js → stack-update-QSHSLUTZ.js} +3 -3
  408. package/dist/{steward-gate-BFCCMCSW.js → steward-gate-KMLS5ECC.js} +6 -6
  409. package/dist/{subagent-brief-injection-ED36PLYY.js → subagent-brief-injection-HCKZQZBF.js} +37 -36
  410. package/dist/{support-inbox-YW47SYJF.js → support-inbox-UBXU5RKV.js} +11 -11
  411. package/dist/{support-outbox-HFJWG52M.js → support-outbox-G2NG2U5K.js} +2 -2
  412. package/dist/{sweep-budget-KMPJ7O5Z.js → sweep-budget-YGLCNXZZ.js} +9 -3
  413. package/dist/{task-enforcement-CECTQX4U.js → task-enforcement-2GR7HU6V.js} +27 -26
  414. package/dist/{task-request-inbox-Q5T4N5K7.js → task-request-inbox-ANCVK2VG.js} +2 -2
  415. package/dist/{task-scope-ERVEUEYU.js → task-scope-QANJJXXB.js} +30 -29
  416. package/dist/{tasks-crud-ZRQNJXQ2.js → tasks-crud-45WOIMIM.js} +44 -25
  417. package/dist/{tasks-notify-MIZH4C2O.js → tasks-notify-ZJS4MA3S.js} +29 -26
  418. package/dist/{tasks-review-Z7J2P6DG.js → tasks-review-ZVPKY47Z.js} +26 -25
  419. package/dist/{telemetry-upload-LVQUQYFP.js → telemetry-upload-VY3UWAEL.js} +10 -10
  420. package/dist/{token-budget-BU4NOVZF.js → token-budget-XHX6XFEC.js} +6 -6
  421. package/dist/{tool-capability-index-7F42MOJT.js → tool-capability-index-6HLZU437.js} +1 -1
  422. package/dist/{tool-telemetry-O27EVMBR.js → tool-telemetry-GBDI4AXR.js} +1 -1
  423. package/dist/tui/App.js +36 -35
  424. package/dist/{tui-data-TPWWBIUQ.js → tui-data-IQFE3UW3.js} +30 -29
  425. package/dist/{typed-messages-RCMPEKJN.js → typed-messages-P2HLLA62.js} +1 -1
  426. package/dist/{update-support-F2F5537B.js → update-support-BDN5AK4R.js} +25 -22
  427. package/dist/{work-claims-B73X5NE7.js → work-claims-PDQNLE5K.js} +7 -7
  428. package/dist/{work-state-heartbeat-P4YX6E2R.js → work-state-heartbeat-CH6BLQKV.js} +1 -1
  429. package/dist/{worker-gate-BEEIIVWA.js → worker-gate-NUUSQMBT.js} +1 -3
  430. package/dist/{workflow-engine-5X46PFCW.js → workflow-engine-RZ7QEI3Z.js} +2 -2
  431. package/dist/{worktree-W47CIMJ6.js → worktree-Q25PZST6.js} +11 -7
  432. package/dist/worktree-ownership-guard-4LKMW6PW.js +421 -0
  433. package/dist/{worktree-sweep-BNBD4RFX.js → worktree-sweep-EV5YQ2OB.js} +8 -8
  434. package/package.json +15 -3
  435. package/release-notes.json +5 -5
  436. package/src/commands/exe.md +16 -16
  437. package/stack.release.json +9 -8
  438. package/dist/behavior-injection-M6UYZCMW.js +0 -63
  439. package/dist/chunk-BJ7AVSY6.js +0 -50
  440. package/dist/daemon-restart-report-EIVD6WDJ.js +0 -10
  441. package/dist/worktree-ownership-guard-OUWJROW2.js +0 -88
  442. /package/dist/{chunk-GQOEWNVM.js → chunk-4EG4DT4F.js} +0 -0
  443. /package/dist/{chunk-AISULNGL.js → chunk-BRAIWGMF.js} +0 -0
  444. /package/dist/{chunk-NRG7KZIP.js → chunk-HQEAZDAC.js} +0 -0
  445. /package/dist/{chunk-VZAFWPAY.js → chunk-IK4344V5.js} +0 -0
  446. /package/dist/{chunk-GM7TLYOK.js → chunk-K3VDF6II.js} +0 -0
  447. /package/dist/{chunk-2AJGV5UL.js → chunk-KM7DAG5J.js} +0 -0
  448. /package/dist/{chunk-YO4BO2CL.js → chunk-QIEYJ4KZ.js} +0 -0
  449. /package/dist/{chunk-WSQASFLP.js → chunk-VCTK5HRA.js} +0 -0
  450. /package/dist/{chunk-KQ6RJWRW.js → chunk-VPT6VMBG.js} +0 -0
  451. /package/dist/{chunk-6WIFPD2P.js → chunk-YZ4AEMR7.js} +0 -0
  452. /package/dist/{core-memory-7I7RE2SJ.js → core-memory-UIZKCY4L.js} +0 -0
  453. /package/dist/{memory-isolation-2TUZ7Z4K.js → memory-isolation-3GJ6WLYX.js} +0 -0
  454. /package/dist/{oauth-server-AYM37SQ4.js → oauth-server-ZRHXIRXQ.js} +0 -0
  455. /package/dist/{wiki-acl-IBQLLBTS.js → wiki-acl-MFOYK5F4.js} +0 -0
@@ -3,11 +3,12 @@ import {
3
3
  markSupportReportSentSync
4
4
  } from "./chunk-MMRUBN3I.js";
5
5
  import {
6
+ describeUpstreamFailure,
6
7
  isTelemetryRedactionEnabled,
7
8
  sanitizeSupportEndpointPath,
8
9
  sanitizeUpstreamId,
9
10
  sanitizeUpstreamPayload
10
- } from "./chunk-4QCFFW2H.js";
11
+ } from "./chunk-5QCIWWFA.js";
11
12
 
12
13
  // src/lib/support-outbox.ts
13
14
  import { mkdirSync, readdirSync, readFileSync, writeFileSync, existsSync } from "fs";
@@ -32,7 +33,7 @@ var MAX_BACKOFF_S = 30;
32
33
  var sentIds = /* @__PURE__ */ new Set();
33
34
  async function loadGoTrueAuthHeader() {
34
35
  try {
35
- const { getAuthHeader } = await import("./gotrue-session-ODZ2ERJX.js");
36
+ const { getAuthHeader } = await import("./gotrue-session-U4H3UGHL.js");
36
37
  return await getAuthHeader();
37
38
  } catch {
38
39
  return null;
@@ -409,6 +410,10 @@ ${DUPLICATE_MARKER}: ${dedupeHash}
409
410
  }
410
411
  return { sent, errors, skipped };
411
412
  }
413
+ var PERMANENT_4XX = /* @__PURE__ */ new Set([400, 404, 405, 409, 410, 413, 415, 422]);
414
+ function isDeterministicRejection(status) {
415
+ return PERMANENT_4XX.has(status);
416
+ }
412
417
  async function sendStatusUpdateRecord(record, filePath, licenseKey, licenseToken, adminToken, gotrueAuth) {
413
418
  const endpoint = buildStatusUpdateEndpoint(record.endpointPath, adminToken);
414
419
  const resp = await fetch(endpoint, {
@@ -429,16 +434,27 @@ async function sendStatusUpdateRecord(record, filePath, licenseKey, licenseToken
429
434
  if (resp.ok) {
430
435
  writeFileSync(filePath, JSON.stringify({ ...record, sent_at: (/* @__PURE__ */ new Date()).toISOString() }, null, 2), "utf-8");
431
436
  onNetworkSuccess();
432
- return true;
437
+ return "sent";
438
+ }
439
+ const lastError = await describeUpstreamFailure(resp);
440
+ if (isDeterministicRejection(resp.status)) {
441
+ writeFileSync(filePath, JSON.stringify({
442
+ ...record,
443
+ attempts: (record.attempts ?? 0) + 1,
444
+ last_error: lastError,
445
+ last_attempt_at: (/* @__PURE__ */ new Date()).toISOString(),
446
+ permanent_rejection: { status: resp.status, error: lastError, rejected_at: (/* @__PURE__ */ new Date()).toISOString() }
447
+ }, null, 2), "utf-8");
448
+ return "rejected";
433
449
  }
434
450
  writeFileSync(filePath, JSON.stringify({
435
451
  ...record,
436
452
  attempts: (record.attempts ?? 0) + 1,
437
- last_error: `HTTP ${resp.status}`,
453
+ last_error: lastError,
438
454
  last_attempt_at: (/* @__PURE__ */ new Date()).toISOString()
439
455
  }, null, 2), "utf-8");
440
456
  onNetworkFailure();
441
- return false;
457
+ return "failed";
442
458
  }
443
459
  async function flushStatusUpdates(licenseKey, licenseToken, adminToken, maxPerFlush, gotrueAuth) {
444
460
  let sent = 0;
@@ -466,6 +482,10 @@ async function flushStatusUpdates(licenseKey, licenseToken, adminToken, maxPerFl
466
482
  skipped++;
467
483
  continue;
468
484
  }
485
+ if (record.permanent_rejection) {
486
+ skipped++;
487
+ continue;
488
+ }
469
489
  try {
470
490
  if (Date.now() - new Date(record.created_at).getTime() > TTL_MS) {
471
491
  writeFileSync(filePath, JSON.stringify({
@@ -479,8 +499,9 @@ async function flushStatusUpdates(licenseKey, licenseToken, adminToken, maxPerFl
479
499
  } catch {
480
500
  }
481
501
  try {
482
- const ok = await sendStatusUpdateRecord(record, filePath, licenseKey, licenseToken, adminToken, gotrueAuth);
483
- if (ok) sent++;
502
+ const outcome = await sendStatusUpdateRecord(record, filePath, licenseKey, licenseToken, adminToken, gotrueAuth);
503
+ if (outcome === "sent") sent++;
504
+ else if (outcome === "rejected") skipped++;
484
505
  else errors++;
485
506
  } catch (err) {
486
507
  try {
@@ -609,10 +630,15 @@ function scanStatusDir(dir) {
609
630
  return { total: 0, unsent: 0 };
610
631
  }
611
632
  let unsent = 0;
633
+ let rejected = 0;
612
634
  let oldest;
613
635
  for (const file of files) {
614
636
  try {
615
637
  const record = JSON.parse(readFileSync(path.join(dir, file), "utf-8"));
638
+ if (record.permanent_rejection) {
639
+ rejected++;
640
+ continue;
641
+ }
616
642
  if (!record.sent_at) {
617
643
  unsent++;
618
644
  if (record.created_at && (!oldest || record.created_at < oldest)) oldest = record.created_at;
@@ -621,7 +647,7 @@ function scanStatusDir(dir) {
621
647
  unsent++;
622
648
  }
623
649
  }
624
- return { total: files.length, unsent, oldest };
650
+ return { total: files.length, unsent, rejected, oldest };
625
651
  }
626
652
 
627
653
  export {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  redactSecrets
3
- } from "./chunk-4QCFFW2H.js";
3
+ } from "./chunk-5QCIWWFA.js";
4
4
  import {
5
5
  EXE_AI_DIR
6
6
  } from "./chunk-ZIG7VPJV.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isCoordinatorRole
3
- } from "./chunk-TAMDAOCU.js";
3
+ } from "./chunk-66CGXQUA.js";
4
4
 
5
5
  // src/lib/task-router.ts
6
6
  import { randomUUID } from "crypto";
@@ -6,7 +6,7 @@ import {
6
6
  baseAgentName,
7
7
  getEmployee,
8
8
  loadEmployeesSync
9
- } from "./chunk-TAMDAOCU.js";
9
+ } from "./chunk-66CGXQUA.js";
10
10
 
11
11
  // src/lib/project-name.ts
12
12
  import { execSync } from "child_process";
@@ -15,6 +15,8 @@ import path from "path";
15
15
  var _cached = null;
16
16
  var _cachedCwd = null;
17
17
  function getProjectName(cwd) {
18
+ const override = process.env.EXE_PROJECT_NAME?.trim();
19
+ if (override) return override;
18
20
  if (!cwd) {
19
21
  try {
20
22
  const ctx = getAgentContext();
@@ -192,7 +192,7 @@ async function quickCheckBackupSourceAfterCopy(reason, backupPath) {
192
192
  });
193
193
  }
194
194
  })();
195
- const { recordDbIntegrityEvent } = await import("./db-integrity-events-2DTFO37N.js");
195
+ const { recordDbIntegrityEvent } = await import("./db-integrity-events-GYGANKZV.js");
196
196
  const backupName = path.basename(backupPath);
197
197
  const markUnverified = (detail) => {
198
198
  process.stderr.write(
@@ -205,7 +205,7 @@ async function quickCheckBackupSourceAfterCopy(reason, backupPath) {
205
205
  try {
206
206
  const { getClient } = await import("./lib/database.js");
207
207
  const client = getClient();
208
- const { canTrustIntegrityVerdict } = await import("./fts-integrity-4YB34KWX.js");
208
+ const { canTrustIntegrityVerdict } = await import("./fts-integrity-PLAL6NMG.js");
209
209
  if (!await canTrustIntegrityVerdict(client)) {
210
210
  return markUnverified("connection is query_only; an FTS5 verdict from it is not trustworthy");
211
211
  }
@@ -313,21 +313,41 @@ async function promoteTmpBackup(tmpBackupPath, backupPath, includeSidecars) {
313
313
  if (existsSync(tmpSidecar)) await rename(tmpSidecar, backupPath + suffix);
314
314
  }
315
315
  }
316
- async function createEncryptedByteBackup(dbPath, tmpBackupPath, encryptionKey) {
317
- const client = createClient({ url: `file:${dbPath}`, encryptionKey });
316
+ async function checkpointWalIntoMainDb(client) {
318
317
  try {
318
+ await client.execute(`PRAGMA busy_timeout = ${PRE_BACKUP_CHECKPOINT_BUSY_TIMEOUT_MS}`);
319
+ } catch {
320
+ }
321
+ const modes = ["TRUNCATE", "TRUNCATE", "TRUNCATE", "FULL"];
322
+ for (const mode of modes) {
319
323
  try {
320
- await client.execute(`PRAGMA busy_timeout = ${PRE_BACKUP_CHECKPOINT_BUSY_TIMEOUT_MS}`);
324
+ const res = await client.execute(`PRAGMA wal_checkpoint(${mode})`);
325
+ const row = res.rows?.[0];
326
+ const busy = Number(row?.busy ?? row?.[0] ?? 0);
327
+ if (busy === 0) return true;
321
328
  } catch {
322
329
  }
330
+ }
331
+ return false;
332
+ }
333
+ async function createEncryptedByteBackup(dbPath, tmpBackupPath, encryptionKey) {
334
+ let drained = false;
335
+ const client = createClient({ url: `file:${dbPath}`, encryptionKey });
336
+ try {
323
337
  await client.execute("SELECT 1");
324
- try {
325
- await client.execute("PRAGMA wal_checkpoint(TRUNCATE)");
326
- } catch {
327
- }
338
+ drained = await checkpointWalIntoMainDb(client);
328
339
  } finally {
329
340
  client.close();
330
341
  }
342
+ let walBytes = 0;
343
+ try {
344
+ walBytes = existsSync(dbPath + "-wal") ? statSync(dbPath + "-wal").size : 0;
345
+ } catch {
346
+ }
347
+ if (drained || walBytes === 0) {
348
+ await copyFile(dbPath, tmpBackupPath);
349
+ return false;
350
+ }
331
351
  return copyBytePreservingSnapshot(dbPath, tmpBackupPath);
332
352
  }
333
353
  async function resolveBackupEncryptionKey(dbPath, explicit) {
@@ -343,6 +363,25 @@ async function resolveBackupEncryptionKey(dbPath, explicit) {
343
363
  }
344
364
  return void 0;
345
365
  }
366
+ function shouldQuarantineDirtyWalBackup(input) {
367
+ if (input.reason === "pre-restore") return false;
368
+ return input.walBytes > 0 && !input.manifestPresent;
369
+ }
370
+ async function quarantineDirtyWalBackup(backupPath) {
371
+ const unverifiedPath = `${backupPath}${UNVERIFIED_SUFFIX}`;
372
+ try {
373
+ await rename(backupPath, unverifiedPath);
374
+ } catch {
375
+ return null;
376
+ }
377
+ for (const sfx of ["-wal", "-shm", ".manifest.json"]) {
378
+ try {
379
+ await unlink(backupPath + sfx);
380
+ } catch {
381
+ }
382
+ }
383
+ return unverifiedPath;
384
+ }
346
385
  async function createBackup(reason = "manual", opts = {}) {
347
386
  return createBackupAsync(reason, opts);
348
387
  }
@@ -376,6 +415,15 @@ async function createBackupAsync(reason = "manual", opts = {}) {
376
415
  message
377
416
  });
378
417
  alertMissedBackup(message, skipping);
418
+ try {
419
+ const { recordDbIntegrityEvent } = await import("./db-integrity-events-GYGANKZV.js");
420
+ recordDbIntegrityEvent({
421
+ kind: "backup-skipped-low-disk",
422
+ reason,
423
+ detail: `free=${lowDisk.freeBytes} bytes, required=${lowDisk.requiredBytes} bytes${skipping ? " (skip explicitly authorized)" : ""}`
424
+ });
425
+ } catch {
426
+ }
379
427
  if (!skipping) throw new BackupDiskSpaceError(message, { reason, ...lowDisk });
380
428
  return null;
381
429
  }
@@ -384,6 +432,7 @@ async function createBackupAsync(reason = "manual", opts = {}) {
384
432
  const backupPath = path.join(BACKUP_DIR, backupName);
385
433
  const tmpBackupPath = `${backupPath}.tmp`;
386
434
  void opts.checkpointMode;
435
+ const preserveForRestore = reason === "pre-restore";
387
436
  const encryptionKey = await resolveBackupEncryptionKey(dbPath, opts.encryptionKey);
388
437
  let bytePreservingSidecars = false;
389
438
  try {
@@ -393,11 +442,11 @@ async function createBackupAsync(reason = "manual", opts = {}) {
393
442
  await createOnlineBackup(dbPath, tmpBackupPath);
394
443
  }
395
444
  } catch (err) {
396
- if (reason !== "pre-restore") throw err;
445
+ if (!preserveForRestore) throw err;
397
446
  bytePreservingSidecars = await copyBytePreservingSnapshot(dbPath, tmpBackupPath);
398
447
  }
399
448
  await promoteTmpBackup(tmpBackupPath, backupPath, bytePreservingSidecars);
400
- const sourceStatus = await quickCheckBackupSourceAfterCopy(reason, backupPath);
449
+ const sourceStatus = preserveForRestore ? null : await quickCheckBackupSourceAfterCopy(reason, backupPath);
401
450
  if (sourceStatus === "failed") return null;
402
451
  if (sourceStatus === "repaired") {
403
452
  if (opts._retriedAfterFtsRepair) {
@@ -414,12 +463,14 @@ async function createBackupAsync(reason = "manual", opts = {}) {
414
463
  }
415
464
  }
416
465
  }
466
+ let manifestWritten = false;
417
467
  try {
418
- const { manifestWriteEnabled, writeBackupManifest } = await import("./backup-verify-ZKTUYLTA.js");
468
+ const { manifestWriteEnabled, writeBackupManifest, manifestPathFor } = await import("./backup-verify-LWHKGOOV.js");
419
469
  if (manifestWriteEnabled()) {
420
- const manifest = await writeBackupManifest(backupPath, dbName);
470
+ const manifest = await writeBackupManifest(backupPath, dbName, { keyHex: encryptionKey });
471
+ manifestWritten = manifest !== null && existsSync(manifestPathFor(backupPath));
421
472
  if (manifest && sourceStatus === "unverified") {
422
- const { recordDbIntegrityEvent } = await import("./db-integrity-events-2DTFO37N.js");
473
+ const { recordDbIntegrityEvent } = await import("./db-integrity-events-GYGANKZV.js");
423
474
  recordDbIntegrityEvent({
424
475
  kind: "backup-verified",
425
476
  reason,
@@ -427,9 +478,36 @@ async function createBackupAsync(reason = "manual", opts = {}) {
427
478
  detail: "proven readable by manifest read-back (source pragma unavailable)"
428
479
  });
429
480
  }
481
+ } else {
482
+ manifestWritten = true;
430
483
  }
431
484
  } catch {
432
485
  }
486
+ {
487
+ let walBytes = 0;
488
+ try {
489
+ walBytes = existsSync(backupPath + "-wal") ? statSync(backupPath + "-wal").size : 0;
490
+ } catch {
491
+ }
492
+ if (shouldQuarantineDirtyWalBackup({ walBytes, manifestPresent: manifestWritten, reason })) {
493
+ const quarantined = await quarantineDirtyWalBackup(backupPath);
494
+ try {
495
+ const { recordDbIntegrityEvent } = await import("./db-integrity-events-GYGANKZV.js");
496
+ recordDbIntegrityEvent({
497
+ kind: "backup-failed",
498
+ reason,
499
+ backup: path.basename(backupPath),
500
+ detail: `dirty-WAL backup could not be manifested (wal=${walBytes} bytes) \u2014 unverifiable image ${quarantined ? "quarantined" : "quarantine-rename FAILED; remove manually"}`
501
+ });
502
+ } catch {
503
+ }
504
+ process.stderr.write(
505
+ `[db-backup] ERROR: backup (${reason}) left a ${walBytes}-byte WAL with no manifest \u2014 unverifiable image. ` + (quarantined ? `Quarantined as ${path.basename(quarantined)}.` : `Quarantine rename FAILED \u2014 remove ${path.basename(backupPath)} manually.`) + ` This file is NOT a valid backup.
506
+ `
507
+ );
508
+ if (reason !== "pre-restore") return null;
509
+ }
510
+ }
433
511
  if (!opts.skipRetention) {
434
512
  try {
435
513
  enforceRetention(reason);
@@ -582,7 +660,7 @@ function recordMissedBackup(entry) {
582
660
  function alertMissedBackup(message, skipped) {
583
661
  void (async () => {
584
662
  try {
585
- const { pushNotifyAsync } = await import("./push-notifications-NCZLH6DI.js");
663
+ const { pushNotifyAsync } = await import("./push-notifications-EY6BXZUY.js");
586
664
  pushNotifyAsync({
587
665
  event: "backup_failed",
588
666
  title: skipped ? "Backup SKIPPED \u2014 disk full" : "Backup FAILED \u2014 disk full",
@@ -847,9 +925,23 @@ function hasRecentBackup(reason, withinMs, deps = REAL_RECENT_BACKUP_DEPS) {
847
925
  function shouldMakePreRestartBackup(existingBackupMtimesMs, now, windowMs = preRestartDedupWindowMs()) {
848
926
  return !existingBackupMtimesMs.some((mtime) => now - mtime <= windowMs);
849
927
  }
928
+ function isUnverifiableDirtyWalBackup(backupPath) {
929
+ try {
930
+ const wal = backupPath + "-wal";
931
+ if (!existsSync(wal)) return false;
932
+ if (statSync(wal).size <= 0) return false;
933
+ return !existsSync(backupPath + ".manifest.json");
934
+ } catch {
935
+ return false;
936
+ }
937
+ }
850
938
  function getLatestBackup() {
851
939
  const backups = listBackups();
852
- return backups.length > 0 ? backups[0].path : null;
940
+ for (const b of backups) {
941
+ if (isUnverifiableDirtyWalBackup(b.path)) continue;
942
+ return b.path;
943
+ }
944
+ return null;
853
945
  }
854
946
  async function restoreBackup(backupPath) {
855
947
  const dbPath = findActiveDb();
@@ -857,11 +949,13 @@ async function restoreBackup(backupPath) {
857
949
  const target = path.join(EXE_AI_DIR, DB_NAMES[0]);
858
950
  const source2 = backupPath ?? getLatestBackup();
859
951
  if (!source2 || !existsSync(source2)) return null;
952
+ if (isUnverifiableDirtyWalBackup(source2)) return null;
860
953
  await copyFile(source2, target);
861
954
  return { restored: path.basename(source2), preRestoreBackup: null };
862
955
  }
863
956
  const source = backupPath ?? getLatestBackup();
864
957
  if (!source || !existsSync(source)) return null;
958
+ if (isUnverifiableDirtyWalBackup(source)) return null;
865
959
  if (path.resolve(source) === path.resolve(dbPath)) return null;
866
960
  await quickCheckBackupSource(source);
867
961
  const preRestoreBackup = await createBackup("pre-restore");
@@ -910,6 +1004,8 @@ export {
910
1004
  resolveQuickCheckRoute,
911
1005
  resolveCheckpointWorkerPath,
912
1006
  preBackupCheckpoint,
1007
+ shouldQuarantineDirtyWalBackup,
1008
+ quarantineDirtyWalBackup,
913
1009
  createBackup,
914
1010
  createBackupAsync,
915
1011
  rotateBackups,
@@ -941,6 +1037,7 @@ export {
941
1037
  preRestartDedupWindowMs,
942
1038
  hasRecentBackup,
943
1039
  shouldMakePreRestartBackup,
1040
+ isUnverifiableDirtyWalBackup,
944
1041
  getLatestBackup,
945
1042
  restoreBackup,
946
1043
  getBackupDir
@@ -11,7 +11,10 @@ async function run(cmd, args, cwd, timeoutMs = REMOTE_TIMEOUT_MS) {
11
11
  cwd,
12
12
  encoding: "utf8",
13
13
  timeout: timeoutMs,
14
- maxBuffer: 16 * 1024 * 1024
14
+ maxBuffer: 16 * 1024 * 1024,
15
+ // GIT_TERMINAL_PROMPT=0: fail fast (or hit timeoutMs) instead of hanging
16
+ // on an interactive credential prompt — this runs in headless contexts.
17
+ env: { ...process.env, GIT_TERMINAL_PROMPT: "0" }
15
18
  });
16
19
  return stdout;
17
20
  }
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-WCGNCH3Q.js";
4
4
  import {
5
5
  registerAllTools
6
- } from "./chunk-DIXXEE3S.js";
6
+ } from "./chunk-BQXYXJYC.js";
7
7
 
8
8
  // src/mcp/mcp-surface-hash.ts
9
9
  function computeMcpSurfaceHash() {
@@ -4,7 +4,7 @@ import {
4
4
  supportProductSchema,
5
5
  supportTaskIdSchema,
6
6
  supportVersionSchema
7
- } from "./chunk-5H47VHB7.js";
7
+ } from "./chunk-UWX6MMCX.js";
8
8
  import {
9
9
  assessAttribution,
10
10
  assessDisposition,
@@ -14,17 +14,17 @@ import {
14
14
  } from "./chunk-4YNA3CM6.js";
15
15
  import {
16
16
  getActiveAgent
17
- } from "./chunk-55BEFF4V.js";
17
+ } from "./chunk-5DF4Y6EC.js";
18
18
  import {
19
19
  SUPPORT_PRODUCTS,
20
20
  sanitizeProductFilter,
21
21
  sanitizeUpstreamId,
22
22
  sanitizedUpstreamBody
23
- } from "./chunk-4QCFFW2H.js";
23
+ } from "./chunk-5QCIWWFA.js";
24
24
  import {
25
25
  loadLicense,
26
26
  readCachedLicenseToken
27
- } from "./chunk-L6RXG36J.js";
27
+ } from "./chunk-Y2HD2YB7.js";
28
28
 
29
29
  // src/mcp/tools/support-inbox.ts
30
30
  import { z as z2 } from "zod";
@@ -435,7 +435,7 @@ async function commentRequestJson(bugId, init) {
435
435
  const ownerHeaders = ownerAuthHeaders();
436
436
  if (!ownerHeaders.authorization && !ownerHeaders["x-exe-license-token"]) {
437
437
  throw new Error(
438
- "Not authenticated for support comments. Run `exe-os login` (GoTrue) or set a license key, or configure an AskExe admin token (ASKEXE_SUPPORT_ADMIN_TOKEN)."
438
+ "Not authenticated for support comments. Set a license key (`exe-os setup`), or store a support-issued token with `exe-os login --token <jwt>`, or configure an AskExe admin token (ASKEXE_SUPPORT_ADMIN_TOKEN)."
439
439
  );
440
440
  }
441
441
  const safeId = encodeURIComponent(sanitizeUpstreamId(bugId));
@@ -765,6 +765,7 @@ function registerTriageReview(server) {
765
765
 
766
766
  export {
767
767
  resolveAttribution,
768
+ isVerifiedStatus,
768
769
  verificationArtifactInputSchema,
769
770
  assertVerdictAttribution,
770
771
  resolveVerificationArtifact,
@@ -79,7 +79,7 @@ var PLATFORM_PROCEDURES = [
79
79
  title: "Dispatch Ladder \u2014 named subagents first; tmux employees are legacy",
80
80
  domain: "workflow",
81
81
  priority: "p0",
82
- content: "Three rungs \u2014 stop at the first that fits. (1) Do it yourself: trivial, in-scope work in main context. (2) Named/native subagents (Claude Code Agent tool + worktree isolation; Codex spawned agents; OpenCode sessions) \u2014 the DEFAULT for delegation AND parallelism: roster-employee work via named identity dispatch, bounded well-specified work, parallel research, isolated worktree fixes, verbose throwaway exploration. Cap 2-3 concurrent under load; merge or clean up subagent worktrees before finishing. MANDATORY: persist subagent results/lessons into the task record + memory BEFORE completing \u2014 subagent output must never die in a context window. (3) create_task -> tmux employee \u2014 LEGACY, reserved for work that must outlive the orchestrator's session or cross coordinator sessions/projects; gets no new investment. When used, create_task remains the only tmux dispatch path \u2014 no manual spawns, no send_message for actionable work."
82
+ content: "Three rungs \u2014 stop at the first that fits. (1) Do it yourself: trivial, in-scope work in main context. (2) Named/native subagents (Claude Code Agent tool + worktree isolation; Codex spawned agents; OpenCode sessions) \u2014 the DEFAULT for delegation AND parallelism: roster-employee work via named identity dispatch, bounded well-specified work, parallel research, isolated worktree fixes, verbose throwaway exploration. Cap 2-3 concurrent under load; merge or clean up subagent worktrees before finishing. MANDATORY: persist subagent results/lessons into the task record + memory BEFORE completing \u2014 subagent output must never die in a context window. Tasks created with task(action='create') are durable checklist items by default and never launch compute. (3) task(action='create', execution_mode='durable_tmux') -> tmux employee \u2014 LEGACY, reserved for work that must outlive the orchestrator's session or cross coordinator sessions/projects; gets no new investment. When used, the explicit durable_tmux mode remains the only tmux dispatch path \u2014 no manual spawns, no send_message for actionable work."
83
83
  },
84
84
  {
85
85
  title: "Subagent guardrails \u2014 fence scope, isolate Codex, never stash",
@@ -91,7 +91,7 @@ var PLATFORM_PROCEDURES = [
91
91
  title: "Right-size the model \u2014 match model cost to task difficulty",
92
92
  domain: "workflow",
93
93
  priority: "p1",
94
- content: "Tokens are money \u2014 pick the model per task. Mechanical/bounded work (renames, config edits, boilerplate, well-specified fixes) -> cheaper model and/or lower reasoning effort. Adversarial verification, hard design, security review, debugging unknowns -> strong model; never verify a strong model's work with a weaker one. Set per agent via set_agent_config, per task via create_task spawn_model/spawn_runtime. Audit spend with config(action='agent_spend')."
94
+ content: "Tokens are money \u2014 pick the model per task. Mechanical/bounded work (renames, config edits, boilerplate, well-specified fixes) -> cheaper model and/or lower reasoning effort. Adversarial verification, hard design, security review, debugging unknowns -> strong model; never verify a strong model's work with a weaker one. Set per agent via set_agent_config; legacy durable tmux dispatch may override spawn_model/spawn_runtime only with execution_mode='durable_tmux'. Audit spend with config(action='agent_spend')."
95
95
  },
96
96
  {
97
97
  title: "Fetch and scope-check before dispatching fix work",
@@ -276,7 +276,7 @@ var PLATFORM_PROCEDURES = [
276
276
  title: "Task lifecycle \u2014 the golden path every agent follows",
277
277
  domain: "workflow",
278
278
  priority: "p0",
279
- content: "For rung-3 work (tmux employees \u2014 see the Dispatch Ladder), create_task is dispatch + delivery. Task lifecycle: open -> in_progress (you start) -> done (update_task when finished) -> needs_review (reviewer nudged) -> closed (COO only via close_task). DB is the reliable delivery \u2014 intercom is just a speedup nudge. If you finish a task, self-chain: check for next task immediately (step 7). Never wait for a nudge. Never say 'standing by.'"
279
+ content: "Tasks are durable, session-scoped checklist/notepad records by default; native subagent execution is orchestrated separately in the current context. For rung-3 legacy work (tmux employees \u2014 see the Dispatch Ladder), execution_mode='durable_tmux' is explicit dispatch + delivery. Task lifecycle: open -> in_progress (you start) -> done (update_task when finished) -> needs_review (reviewer nudged) -> closed (COO only via close_task). DB is the reliable delivery \u2014 intercom is just a speedup nudge. If you finish a task, self-chain: check for next task immediately (step 7). Never wait for a nudge. Never say 'standing by.'"
280
280
  },
281
281
  {
282
282
  title: "Review chain \u2014 managers must actively pull completed work, never wait for nudges",
@@ -360,7 +360,7 @@ var PLATFORM_REFERENCE_PROCEDURES = [
360
360
  title: "MCP tool reference \u2014 all domains and key actions",
361
361
  domain: "tool-use",
362
362
  priority: "p1",
363
- 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 | restart_telemetry | 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 | stack_update_check | cloud_status | pending_work_summary | rename_employee | tool_search | drift. DREAMING: run | status | history. MCP_PING: daemon health + license + tool usage + retrieval health. Unsure an MCP path exists? diagnostics(action='tool_search', query='...') finds it before punting to the terminal. cloud_sync(cloud_action='reupload') is destructive \u2014 requires confirm_local_db_source_of_truth='LOCAL DB IS SOURCE OF TRUTH'."
363
+ 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; defaults to checklist with zero execution side effects; blocked_by, parent_task_id, reviewer, complexity, budget_tokens, group_id, work_ref; execution_mode='durable_tmux' is the explicit legacy dispatch opt-in and enables 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 | restart_telemetry | 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 | stack_update_check | cloud_status | pending_work_summary | rename_employee | tool_search | drift. DREAMING: run | status | history. MCP_PING: daemon health + license + tool usage + retrieval health. Unsure an MCP path exists? diagnostics(action='tool_search', query='...') finds it before punting to the terminal. cloud_sync(cloud_action='reupload') is destructive \u2014 requires confirm_local_db_source_of_truth='LOCAL DB IS SOURCE OF TRUTH'."
364
364
  },
365
365
  {
366
366
  title: "Cognition features \u2014 dreaming, reflexes, baselines, hot-path summary",