@askexenow/exe-os 0.9.372 → 0.9.374

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 (470) hide show
  1. package/deploy/compose/.env.customer.example +45 -10
  2. package/deploy/compose/.env.example +46 -9
  3. package/deploy/compose/docker-compose.yml +136 -18
  4. package/deploy/compose/generate-env.ts +142 -34
  5. package/deploy/compose/sso-edge/default.conf.template +78 -7
  6. package/deploy/compose/sso-edge/sso-redirect.conf +109 -13
  7. package/deploy/stack-manifests/v0.9.30-apps.json +1 -1
  8. package/deploy/stack-manifests/v0.9.json +4 -4
  9. package/dist/.dist-verified.json +3 -3
  10. package/dist/{active-agent-GRT5MKD5.js → active-agent-ONPPEWQV.js} +7 -6
  11. package/dist/{active-agent-L2ZSSXDK.js → active-agent-UJKMG7LJ.js} +7 -6
  12. package/dist/{agent-defs-generator-M4ZNYIVX.js → agent-defs-generator-ZWI6DXOE.js} +6 -5
  13. package/dist/{agent-loop-FOK2IRZQ.js → agent-loop-OYHJKNYH.js} +1 -1
  14. package/dist/{agentic-ontology-DMPRDEUX.js → agentic-ontology-WHFJ3QFS.js} +1 -1
  15. package/dist/{artifact-backup-767STHSW.js → artifact-backup-WXZNB7KE.js} +2 -1
  16. package/dist/{backfill-gate-VX2RZTQV.js → backfill-gate-KWJQ35YX.js} +3 -2
  17. package/dist/{backfill-metadata-ZMEHJQ5M.js → backfill-metadata-3OUSQD5V.js} +8 -7
  18. package/dist/{background-jobs-LTPWCMA3.js → background-jobs-6VMD55PK.js} +3 -2
  19. package/dist/{backup-verify-EX2K732J.js → backup-verify-ZKTUYLTA.js} +4 -3
  20. package/dist/{behavior-injection-22AGMS25.js → behavior-injection-M6UYZCMW.js} +17 -15
  21. package/dist/{behaviors-DVFXAWF5.js → behaviors-ZJ45TFBJ.js} +21 -13
  22. package/dist/bin/age-ontology-load.js +3 -2
  23. package/dist/bin/agentic-ontology-backfill.js +10 -9
  24. package/dist/bin/agentic-reflection-backfill.js +11 -10
  25. package/dist/bin/agentic-semantic-label.js +10 -9
  26. package/dist/bin/backfill-conversations.js +13 -11
  27. package/dist/bin/backfill-responses.js +13 -11
  28. package/dist/bin/backfill-vectors.js +17 -15
  29. package/dist/bin/bulk-sync-postgres.js +22 -20
  30. package/dist/bin/cc-doctor.js +10 -9
  31. package/dist/bin/cleanup-stale-review-tasks.js +29 -26
  32. package/dist/bin/cli.js +36 -26
  33. package/dist/bin/deferred-daemon-restart.js +114 -110
  34. package/dist/bin/exe-agent-config.js +6 -5
  35. package/dist/bin/exe-agent.js +127 -33
  36. package/dist/bin/exe-assign.js +15 -13
  37. package/dist/bin/exe-boot.js +57 -54
  38. package/dist/bin/exe-call.js +8 -7
  39. package/dist/bin/exe-cloud.js +24 -22
  40. package/dist/bin/exe-config-dump.js +6 -5
  41. package/dist/bin/exe-dispatch.js +30 -27
  42. package/dist/bin/exe-doctor.js +14 -10
  43. package/dist/bin/exe-export-behaviors.js +19 -17
  44. package/dist/bin/exe-forget.js +10 -9
  45. package/dist/bin/exe-gateway.js +199 -19
  46. package/dist/bin/exe-grant.js +5 -5
  47. package/dist/bin/exe-healthcheck.js +10 -9
  48. package/dist/bin/exe-heartbeat.js +35 -32
  49. package/dist/bin/exe-kill.js +34 -31
  50. package/dist/bin/exe-launch-agent.js +126 -54
  51. package/dist/bin/exe-mcp.js +6 -5
  52. package/dist/bin/exe-memory-reads.js +8 -7
  53. package/dist/bin/exe-new-employee.js +12 -11
  54. package/dist/bin/exe-os-mcp-proxy.js +6 -5
  55. package/dist/bin/exe-pending-messages.js +30 -27
  56. package/dist/bin/exe-pending-notifications.js +29 -26
  57. package/dist/bin/exe-pending-reviews.js +30 -27
  58. package/dist/bin/exe-rename.js +8 -7
  59. package/dist/bin/exe-repo-truth.js +1 -1
  60. package/dist/bin/exe-review.js +33 -30
  61. package/dist/bin/exe-search.js +9 -8
  62. package/dist/bin/exe-session-cleanup.js +35 -32
  63. package/dist/bin/exe-settings.js +24 -22
  64. package/dist/bin/exe-start-codex.js +137 -55
  65. package/dist/bin/exe-start-opencode.js +121 -23
  66. package/dist/bin/exe-status.js +31 -28
  67. package/dist/bin/exe-support.js +5 -4
  68. package/dist/bin/exe-team.js +7 -6
  69. package/dist/bin/exe-watchdog.js +31 -11
  70. package/dist/bin/generate-hook-manifest.js +44 -7
  71. package/dist/bin/git-sweep.js +31 -28
  72. package/dist/bin/graph-backfill.js +89 -35
  73. package/dist/bin/graph-export.js +9 -8
  74. package/dist/bin/import-history.js +14 -13
  75. package/dist/bin/install.js +137 -113
  76. package/dist/bin/intercom-check.js +5 -5
  77. package/dist/bin/mcp-sessions.js +2 -2
  78. package/dist/bin/orchestration-metrics.js +7 -6
  79. package/dist/bin/postgres-agentic-reflection-backfill.js +5 -4
  80. package/dist/bin/postgres-agentic-semantic-backfill.js +4 -3
  81. package/dist/bin/pre-publish.js +1 -1
  82. package/dist/bin/reconcile-backlog.js +2 -2
  83. package/dist/bin/registry-proxy.js +1 -1
  84. package/dist/bin/scan-tasks.js +29 -26
  85. package/dist/bin/setup.js +5 -4
  86. package/dist/bin/shard-migrate.js +9 -8
  87. package/dist/bin/stack-update.js +40 -9
  88. package/dist/bin/verify-stack.js +2 -2
  89. package/dist/bin/vps-health-gate.js +1 -1
  90. package/dist/{boot-generation-OHXH4YC5.js → boot-generation-JKVZ4ZAT.js} +6 -5
  91. package/dist/{boot-review-sections-N5IXIGSS.js → boot-review-sections-2M6BTG73.js} +28 -25
  92. package/dist/{branch-hygiene-KCGXRAWP.js → branch-hygiene-U5GFRSTP.js} +31 -7
  93. package/dist/{branding-GH43W3PU.js → branding-I6KIMB7F.js} +3 -2
  94. package/dist/budget-fallback-XJRPMP2D.js +11 -0
  95. package/dist/build-manifest.json +1318 -1233
  96. package/dist/{capability-cards-4PXVLIVS.js → capability-cards-5IMJT6J7.js} +5 -4
  97. package/dist/{capacity-monitor-FKMQXORX.js → capacity-monitor-SAXCQK7O.js} +30 -27
  98. package/dist/{catchup-brief-SN5EKO4N.js → catchup-brief-U2TXBLHD.js} +34 -31
  99. package/dist/{chunk-CNC57JCS.js → chunk-23MVDXLY.js} +4 -4
  100. package/dist/{chunk-V4XAKXXF.js → chunk-2AJGV5UL.js} +1 -1
  101. package/dist/{chunk-FBYAXTDM.js → chunk-2ZOEC4KC.js} +10 -2
  102. package/dist/{chunk-ELXFSIIM.js → chunk-32YV32VA.js} +2 -2
  103. package/dist/{chunk-44C7QNZS.js → chunk-3KDCORDO.js} +1 -1
  104. package/dist/{chunk-JTB5V6BV.js → chunk-3SXHEQ7X.js} +1 -1
  105. package/dist/{chunk-HDW4XPDV.js → chunk-3UUX5OY4.js} +1 -1
  106. package/dist/{chunk-7PSLK36P.js → chunk-44TLJZJ5.js} +1 -1
  107. package/dist/{chunk-JTWTBX2M.js → chunk-4EN3IZ3Q.js} +2 -1
  108. package/dist/{chunk-KPMC7PY7.js → chunk-4HKTO2SV.js} +1 -1
  109. package/dist/{chunk-CDUB5Q6J.js → chunk-4IK2K3B3.js} +1 -1
  110. package/dist/{chunk-GH6YJOOC.js → chunk-4SJ4LK4V.js} +6 -6
  111. package/dist/{chunk-PVEM537A.js → chunk-4YLBKEL5.js} +2 -2
  112. package/dist/chunk-4YNA3CM6.js +872 -0
  113. package/dist/{chunk-KYFFVTGO.js → chunk-55BEFF4V.js} +3 -3
  114. package/dist/{chunk-SEP5ITFQ.js → chunk-636LKCKE.js} +2 -2
  115. package/dist/{chunk-QTI4QAWA.js → chunk-6EZQUNE6.js} +338 -5
  116. package/dist/{chunk-WAEKYKTK.js → chunk-6RKKVPYF.js} +1 -1
  117. package/dist/{chunk-VX2F4ZUY.js → chunk-6SCGLHJ7.js} +3 -3
  118. package/dist/{chunk-MEGRQ53A.js → chunk-6VHOQ3IM.js} +51 -6
  119. package/dist/{chunk-HIIXCAEE.js → chunk-6YVUR3OU.js} +3 -3
  120. package/dist/{chunk-L6ZNURWN.js → chunk-7GE2EQ23.js} +1 -1
  121. package/dist/{chunk-2CWS374F.js → chunk-7RI2CNXJ.js} +1 -1
  122. package/dist/{chunk-OL3QP3AU.js → chunk-7TSBV3SD.js} +1 -1
  123. package/dist/{chunk-DSOQUQTV.js → chunk-A27Q27CT.js} +27 -0
  124. package/dist/{chunk-5AHRZI3R.js → chunk-AETLDRZB.js} +1 -1
  125. package/dist/{chunk-RNLF3CBB.js → chunk-AKLJ4JH3.js} +1 -1
  126. package/dist/{chunk-XHYHX6F7.js → chunk-AKLQSC6W.js} +329 -164
  127. package/dist/chunk-ANLFH23R.js +261 -0
  128. package/dist/{chunk-QLA3RTH4.js → chunk-AWWKRZMB.js} +5 -5
  129. package/dist/{chunk-ERVQTR7P.js → chunk-BBSIEYF5.js} +17 -3
  130. package/dist/{chunk-IPMUWYRQ.js → chunk-BJ7AVSY6.js} +2 -2
  131. package/dist/{chunk-HV6Y6F4X.js → chunk-C2L622QJ.js} +89 -3
  132. package/dist/{chunk-TX3Q2GIL.js → chunk-C5HUMAA7.js} +24 -1
  133. package/dist/{chunk-QTYJPWJN.js → chunk-CBCGDEJA.js} +7 -7
  134. package/dist/{chunk-XXSNLM6R.js → chunk-DB55JZHU.js} +1 -1
  135. package/dist/{chunk-LAZKEJMS.js → chunk-DIXXEE3S.js} +840 -607
  136. package/dist/{chunk-FB343XQX.js → chunk-DJ7YXOTU.js} +2 -2
  137. package/dist/{chunk-YFCNWQAM.js → chunk-DJOIMFKV.js} +2 -2
  138. package/dist/{chunk-UTDMTQNH.js → chunk-DSJI76XL.js} +92 -14
  139. package/dist/{chunk-EEXX4UMQ.js → chunk-DZKPOSFD.js} +1 -1
  140. package/dist/{chunk-WSOA3WMC.js → chunk-E426DOSY.js} +161 -4
  141. package/dist/{chunk-ZISQOOER.js → chunk-EKE37MO4.js} +3 -3
  142. package/dist/{chunk-RIECV7SR.js → chunk-EKYYMIVT.js} +1 -1
  143. package/dist/{chunk-HIVZ53YB.js → chunk-EXTZSNWL.js} +2 -2
  144. package/dist/{chunk-YYA5LXCT.js → chunk-FNEZ4BWT.js} +1 -1
  145. package/dist/chunk-FTZET5YX.js +313 -0
  146. package/dist/chunk-GHR4ZPJ7.js +70 -0
  147. package/dist/{chunk-MINXPXAB.js → chunk-GJI77VDO.js} +3 -3
  148. package/dist/{chunk-AAMGHW5W.js → chunk-GLQEJOXE.js} +1 -0
  149. package/dist/{chunk-ADNBOKYZ.js → chunk-GM7TLYOK.js} +60 -18
  150. package/dist/{chunk-RUWWES2K.js → chunk-GNUAL43X.js} +2 -2
  151. package/dist/{chunk-QZL6E4UB.js → chunk-GOMQ7PVQ.js} +2 -2
  152. package/dist/{chunk-GB3AHV5F.js → chunk-GQOEWNVM.js} +1 -1
  153. package/dist/{chunk-NQZUSEAR.js → chunk-GS7LIT34.js} +246 -17
  154. package/dist/{chunk-XTWHNLGD.js → chunk-GZOG2MAX.js} +1 -1
  155. package/dist/{chunk-E5HAY3DQ.js → chunk-HDLAB7W3.js} +1 -1
  156. package/dist/{chunk-E5QQZDQN.js → chunk-HNWS7YHN.js} +358 -136
  157. package/dist/{chunk-VV5EZZNT.js → chunk-HTBEVCO2.js} +1 -1
  158. package/dist/{chunk-OZBII5E3.js → chunk-I4DNJFDR.js} +4 -4
  159. package/dist/{chunk-SI5SZAJA.js → chunk-IBS2FAI4.js} +21 -4
  160. package/dist/{chunk-J5EYOBFF.js → chunk-IHXW4VUI.js} +1 -1
  161. package/dist/{chunk-RUVO3NJC.js → chunk-IN6CAM4F.js} +9 -3
  162. package/dist/{chunk-53PYNYTW.js → chunk-IRVOXUSK.js} +5 -5
  163. package/dist/{chunk-THM7J6UI.js → chunk-JHI5WMK5.js} +5 -5
  164. package/dist/{chunk-3KTQWMHI.js → chunk-JSMDRKPJ.js} +12 -4
  165. package/dist/chunk-JTVIANUB.js +131 -0
  166. package/dist/{chunk-2ADYTOHQ.js → chunk-K4ESASPL.js} +1 -1
  167. package/dist/{chunk-YWUQVHDL.js → chunk-KTCXJWJG.js} +1 -1
  168. package/dist/{chunk-RGUDGC6A.js → chunk-KTU3EAWK.js} +5 -5
  169. package/dist/{chunk-DKBPCOU4.js → chunk-L6RXG36J.js} +2 -2
  170. package/dist/{chunk-T4EK56WI.js → chunk-LDNYSMPZ.js} +1 -1
  171. package/dist/{chunk-RIK5GRWI.js → chunk-LGS2V2XD.js} +3 -3
  172. package/dist/{chunk-JKXZGRWR.js → chunk-LP4GB656.js} +2 -2
  173. package/dist/{chunk-H74466TM.js → chunk-M7O7TGGU.js} +1 -1
  174. package/dist/chunk-MJCSEIFI.js +54 -0
  175. package/dist/{chunk-IDZPQG2D.js → chunk-MOGA4Q7F.js} +2 -2
  176. package/dist/{chunk-OYQNNKNS.js → chunk-MXPNVSXI.js} +37 -14
  177. package/dist/{chunk-UVW7YFAF.js → chunk-N7VEP5B3.js} +4 -4
  178. package/dist/{chunk-HHE2HV3V.js → chunk-NBXDXKLC.js} +1 -1
  179. package/dist/{chunk-LDL3S7AC.js → chunk-NKETJCB5.js} +7 -3
  180. package/dist/{chunk-ECHLVLA7.js → chunk-NMH5ZQPU.js} +1 -1
  181. package/dist/{chunk-U3XLRMJD.js → chunk-NT7W4RXD.js} +1 -1
  182. package/dist/{chunk-UQUUNGTP.js → chunk-NUK7EEN5.js} +11 -9
  183. package/dist/{chunk-GBNB4EWD.js → chunk-ORM7ZFKC.js} +16 -0
  184. package/dist/{chunk-O4ZFRK6W.js → chunk-OVEQE6YS.js} +244 -49
  185. package/dist/{chunk-4ZJ5BPY6.js → chunk-PB5S7YOF.js} +2 -2
  186. package/dist/{chunk-JR23BL74.js → chunk-PDVXWXTL.js} +4 -4
  187. package/dist/{chunk-3CIMDFXG.js → chunk-PFQ3VEEM.js} +1 -1
  188. package/dist/{chunk-SBJV2PCU.js → chunk-PHBU4LGO.js} +1 -1
  189. package/dist/{chunk-W25RLOQ2.js → chunk-PLZSZOZN.js} +3 -3
  190. package/dist/{chunk-THIJIOE2.js → chunk-PY3FOMRN.js} +18 -6
  191. package/dist/{chunk-AAUWFXOX.js → chunk-Q3AXXKDF.js} +3 -3
  192. package/dist/{chunk-VKXS2YGN.js → chunk-QHJR7IMX.js} +2 -2
  193. package/dist/chunk-QLZ46RCK.js +45 -0
  194. package/dist/{chunk-UHPMK6QZ.js → chunk-R3CZWFFC.js} +10 -2
  195. package/dist/{chunk-6XEYELCA.js → chunk-R4CBHKZ2.js} +1 -1
  196. package/dist/{chunk-5APCDDJZ.js → chunk-R522MWAR.js} +9 -9
  197. package/dist/chunk-RH4AH3YB.js +80 -0
  198. package/dist/{chunk-AMKSDKMK.js → chunk-S2WBS6BG.js} +22 -35
  199. package/dist/{chunk-WUKQVNLP.js → chunk-SEQIPGLU.js} +1 -1
  200. package/dist/{chunk-7WQRFSZI.js → chunk-SL6KQYDU.js} +26 -6
  201. package/dist/chunk-SLLLOOEI.js +103 -0
  202. package/dist/{chunk-5N4SG5NB.js → chunk-T35RCQFE.js} +3 -3
  203. package/dist/{chunk-7V6M3QUS.js → chunk-T3QUKNLI.js} +1 -1
  204. package/dist/{chunk-CW2UCKHS.js → chunk-TADAO3HV.js} +2 -2
  205. package/dist/{chunk-5DCCKHDY.js → chunk-TAMDAOCU.js} +109 -13
  206. package/dist/{chunk-ZXB56YR2.js → chunk-TFKCERAK.js} +101 -23
  207. package/dist/{chunk-RBYHJDAT.js → chunk-TQAZTRQ3.js} +3 -3
  208. package/dist/{chunk-OKGIOWOB.js → chunk-U6SUKSZR.js} +2 -2
  209. package/dist/{chunk-23QKEUF6.js → chunk-U73AC5AN.js} +34 -12
  210. package/dist/{chunk-PM6WSWVU.js → chunk-UBK7HK3J.js} +3 -3
  211. package/dist/{chunk-H37FSTF2.js → chunk-UBMZ3YQU.js} +1 -1
  212. package/dist/{chunk-JJUGI2YL.js → chunk-UCFC2AEI.js} +1 -1
  213. package/dist/{chunk-6IWLAQ7O.js → chunk-UCUOGVDX.js} +4 -0
  214. package/dist/{chunk-E7UCDSUE.js → chunk-UKLN57Q5.js} +2 -2
  215. package/dist/{chunk-ZYCLSEZT.js → chunk-ULIBLJ6W.js} +33 -11
  216. package/dist/{chunk-RLR6VVKV.js → chunk-UM3N6VND.js} +4 -4
  217. package/dist/{chunk-ZNUJFX7L.js → chunk-UQGSBM3U.js} +1 -1
  218. package/dist/{chunk-ZZXMB5F2.js → chunk-UZDF6FLJ.js} +1 -1
  219. package/dist/{chunk-LNOS24GV.js → chunk-V3WLC5TJ.js} +2 -95
  220. package/dist/{chunk-UXLO7VHX.js → chunk-VI4ATC6I.js} +1 -1
  221. package/dist/{chunk-77JP3LK4.js → chunk-VKJGHAZT.js} +92 -21
  222. package/dist/{chunk-7R73IAHU.js → chunk-VMTZ4RUW.js} +67 -150
  223. package/dist/{chunk-TGPQMMQP.js → chunk-VYQ7B7DI.js} +30 -17
  224. package/dist/{chunk-E2WEFZOR.js → chunk-W75GTHR3.js} +1 -1
  225. package/dist/{chunk-UKLF7F3Z.js → chunk-WJG344NC.js} +9 -9
  226. package/dist/{chunk-MBNIJXKI.js → chunk-WMEYJT4R.js} +18 -4
  227. package/dist/{chunk-R6FLELV6.js → chunk-XFTEX77S.js} +3 -3
  228. package/dist/{chunk-MDGYXUOV.js → chunk-XH7YL7JM.js} +1 -1
  229. package/dist/{chunk-JOO35RHR.js → chunk-XL5MFGMR.js} +3 -3
  230. package/dist/{chunk-OW5RZIDW.js → chunk-XNNECNDL.js} +95 -33
  231. package/dist/{chunk-5AHDQCTB.js → chunk-XXFKSJYA.js} +6 -6
  232. package/dist/{chunk-TGEPLJ66.js → chunk-XXOPG4BW.js} +3 -3
  233. package/dist/{chunk-PGLPUP37.js → chunk-XZ65ST2I.js} +1 -1
  234. package/dist/{chunk-3TTKAT6V.js → chunk-YKC7QDZH.js} +9 -4
  235. package/dist/{chunk-KXYFBBZR.js → chunk-YMP2QSOP.js} +20 -3
  236. package/dist/{chunk-TK4MI6F6.js → chunk-YSLGFPWX.js} +6 -6
  237. package/dist/{chunk-X2P43TB2.js → chunk-YTSXPJUQ.js} +1 -1
  238. package/dist/{chunk-HECXZGGZ.js → chunk-ZCERWHY2.js} +33 -35
  239. package/dist/{chunk-IVU3WN7S.js → chunk-ZG62LIK3.js} +74 -4
  240. package/dist/{chunk-GU62SNDH.js → chunk-ZGYNKA3O.js} +744 -111
  241. package/dist/{chunk-QMSEL5YS.js → chunk-ZIG7VPJV.js} +28 -76
  242. package/dist/{chunk-WZJVGA5I.js → chunk-ZL4AGWAH.js} +258 -13
  243. package/dist/{chunk-QR624DER.js → chunk-ZSODLMFV.js} +2 -2
  244. package/dist/{cleanup-graph-garbage-IPYDS5OX.js → cleanup-graph-garbage-DPJGO52H.js} +11 -10
  245. package/dist/{cloud-sync-command-JLNVG7H4.js → cloud-sync-command-JPNTT4OQ.js} +2 -2
  246. package/dist/{cloud-sync-db-init-JXUF6GI3.js → cloud-sync-db-init-V2LWIUQU.js} +1 -1
  247. package/dist/{cloud-sync-shutdown-Z4SBP6PL.js → cloud-sync-shutdown-BNALPWGX.js} +5 -4
  248. package/dist/{co-activation-74RDFTKS.js → co-activation-CMNSWS6B.js} +5 -4
  249. package/dist/{co-occurrence-CN3TBYVR.js → co-occurrence-WRI2NAN6.js} +9 -8
  250. package/dist/{code-context-index-D4MJ4VFX.js → code-context-index-NOJSHLPN.js} +12 -6
  251. package/dist/code-context-watcher-VZNZU3BO.js +118 -0
  252. package/dist/{codex-consolidation-PPXNBXCV.js → codex-consolidation-SH4UKFBQ.js} +2 -1
  253. package/dist/{conversation-entity-extractor-QGTLH4BP.js → conversation-entity-extractor-74252CAO.js} +4 -4
  254. package/dist/{conversation-wiki-populator-EBUZXYEU.js → conversation-wiki-populator-OS4C6W54.js} +1 -1
  255. package/dist/conversations-retention-C4BLKFEL.js +54 -0
  256. package/dist/coordinator-notice-MHUY7AQB.js +55 -0
  257. package/dist/{crdt-sync-7T4WCOKD.js → crdt-sync-B3JN6AIV.js} +1 -1
  258. package/dist/{crm-webhook-FTW3XZTO.js → crm-webhook-GYWQRFET.js} +2 -2
  259. package/dist/{cto-delegation-gate-SZCE34LB.js → cto-delegation-gate-LQHVLEMW.js} +29 -26
  260. package/dist/{daemon-auth-SSPY5ODS.js → daemon-auth-QZHEO7IQ.js} +3 -2
  261. package/dist/{daemon-orchestration-IGPHVNFR.js → daemon-orchestration-5HIQALZH.js} +36 -34
  262. package/dist/{daemon-ready-OT2VQLS7.js → daemon-ready-P2BR2XP5.js} +1 -1
  263. package/dist/{db-integrity-events-5DTASXJF.js → db-integrity-events-2DTFO37N.js} +3 -2
  264. package/dist/{db-restore-events-2FI4ZMKA.js → db-restore-events-G6NOQOVE.js} +2 -1
  265. package/dist/{destructive-data-guard-6I5MDFVD.js → destructive-data-guard-BVFWPPIS.js} +1 -1
  266. package/dist/doc-graph-extractor-PQHDHQPQ.js +367 -0
  267. package/dist/{documents-URULIXGM.js → documents-C4SSPJMC.js} +15 -13
  268. package/dist/{dreaming-VIZO3QDO.js → dreaming-XAO3FCBV.js} +33 -30
  269. package/dist/{employee-boot-brief-XLOG4ULP.js → employee-boot-brief-W4OHUMRQ.js} +37 -34
  270. package/dist/{exe-drift-TLQM3IHD.js → exe-drift-AG2KMKD5.js} +6 -5
  271. package/dist/{exe-export-7YWYWJHY.js → exe-export-IC5BT335.js} +17 -15
  272. package/dist/{exe-import-DW6VAUKW.js → exe-import-A35ZLDPG.js} +17 -15
  273. package/dist/{exe-key-TLJP2B4Y.js → exe-key-TCMJNYLA.js} +116 -112
  274. package/dist/{exe-org-LU46N36E.js → exe-org-JXCR3JYZ.js} +24 -23
  275. package/dist/{exe-snapshot-QHUZRS62.js → exe-snapshot-SV6SRIG6.js} +36 -33
  276. package/dist/{fast-db-init-SCTOOIUT.js → fast-db-init-L2RGKJWH.js} +1 -1
  277. package/dist/{founder-context-ZFZC4UHO.js → founder-context-D4HFIESJ.js} +4 -3
  278. package/dist/{founder-monitor-envelope-5KTKNL5G.js → founder-monitor-envelope-TFKRGCFE.js} +5 -4
  279. package/dist/{fts-integrity-LKAZEZJE.js → fts-integrity-4YB34KWX.js} +3 -2
  280. package/dist/gateway/index.js +19 -17
  281. package/dist/{git-main-guard-TN27QBAI.js → git-main-guard-VTW4N3CM.js} +7 -1
  282. package/dist/{git-staleness-GSGP344N.js → git-staleness-TN7CYGFG.js} +5 -4
  283. package/dist/{global-procedures-YAR7G4C6.js → global-procedures-YFDEIOG7.js} +7 -6
  284. package/dist/{graph-auto-extract-GNQS64F5.js → graph-auto-extract-3YR3TYRW.js} +9 -8
  285. package/dist/{graph-rag-RMSFLUOB.js → graph-rag-Z2KCJTPK.js} +6 -4
  286. package/dist/{hook-integrity-CF567MVN.js → hook-integrity-KGAV6ZC2.js} +14 -4
  287. package/dist/{hook-prefetch-36BK4F7U.js → hook-prefetch-K5DN3TOQ.js} +29 -26
  288. package/dist/hooks/bug-report-worker.js +34 -30
  289. package/dist/hooks/codex-stop-task-finalizer.js +36 -32
  290. package/dist/hooks/commit-complete.js +33 -30
  291. package/dist/hooks/error-recall.js +12 -11
  292. package/dist/hooks/exe-heartbeat-hook.js +8 -7
  293. package/dist/hooks/ingest-worker.js +23 -11
  294. package/dist/hooks/ingest.js +18 -17
  295. package/dist/hooks/instructions-loaded.js +10 -9
  296. package/dist/hooks/manifest.json +20 -20
  297. package/dist/hooks/notification.js +9 -8
  298. package/dist/hooks/post-compact.js +8 -7
  299. package/dist/hooks/post-tool-combined.js +26 -15
  300. package/dist/hooks/pre-compact.js +33 -30
  301. package/dist/hooks/pre-tool-use.js +404 -46
  302. package/dist/hooks/prompt-submit.js +57 -47
  303. package/dist/hooks/session-end.js +40 -41
  304. package/dist/hooks/session-start.js +21 -20
  305. package/dist/hooks/stop.js +40 -37
  306. package/dist/hooks/subagent-stop.js +38 -35
  307. package/dist/hooks/summary-worker.js +39 -36
  308. package/dist/hyde-MP4QNMU5.js +80 -0
  309. package/dist/index.js +44 -39
  310. package/dist/{installer-LUN4HQIC.js → installer-54HTN5RE.js} +8 -7
  311. package/dist/{installer-OC5VXNC7.js → installer-LK35OX6R.js} +8 -7
  312. package/dist/{installer-MPRFUQJE.js → installer-LLWKZI2S.js} +8 -7
  313. package/dist/intercom-ack-VCW755TN.js +13 -0
  314. package/dist/{intercom-queue-6DZ7BANV.js → intercom-queue-5NOT2RKI.js} +28 -25
  315. package/dist/{key-backup-status-6L2ARCXW.js → key-backup-status-LQPINQ3W.js} +2 -1
  316. package/dist/lib/agent-config.js +3 -2
  317. package/dist/lib/cloud-sync.js +26 -20
  318. package/dist/lib/config.js +2 -1
  319. package/dist/lib/consolidation.js +17 -10
  320. package/dist/lib/database.js +7 -4
  321. package/dist/lib/db-backup.js +17 -2
  322. package/dist/lib/db-daemon-client.js +8 -6
  323. package/dist/lib/db-write-worker-client.js +3 -1
  324. package/dist/lib/db-write-worker.js +20 -3
  325. package/dist/lib/db.js +7 -4
  326. package/dist/lib/device-registry.js +3 -2
  327. package/dist/lib/embed-worker.js +2 -1
  328. package/dist/lib/embedder.js +8 -6
  329. package/dist/lib/employee-templates.js +8 -7
  330. package/dist/lib/employees.js +5 -4
  331. package/dist/lib/exe-daemon-client.js +7 -5
  332. package/dist/lib/exe-daemon.js +467 -221
  333. package/dist/lib/hybrid-search.js +11 -8
  334. package/dist/lib/identity.js +5 -4
  335. package/dist/lib/license.js +4 -3
  336. package/dist/lib/messaging.js +29 -26
  337. package/dist/lib/post-tool-memory.js +16 -2
  338. package/dist/lib/registry-proxy.js +3 -1
  339. package/dist/lib/reminders.js +6 -5
  340. package/dist/lib/schedules.js +9 -8
  341. package/dist/lib/session-registry.js +7 -6
  342. package/dist/lib/skill-learning.js +16 -14
  343. package/dist/lib/stack-invariants.js +17 -1
  344. package/dist/lib/status-brief.js +5 -4
  345. package/dist/lib/store.js +10 -7
  346. package/dist/lib/task-router.js +6 -5
  347. package/dist/lib/tasks.js +31 -27
  348. package/dist/lib/tmux-routing.js +40 -25
  349. package/dist/lib/tmux-status.js +3 -1
  350. package/dist/lib/tmux-transport.js +2 -1
  351. package/dist/lib/token-spend.js +6 -5
  352. package/dist/lib/transport.js +3 -2
  353. package/dist/{license-gate-ESER24PJ.js → license-gate-JVMB6OFD.js} +5 -4
  354. package/dist/{license-sync-JVG5KNIY.js → license-sync-5VYS2F2W.js} +4 -3
  355. package/dist/mcp/register-tools.js +113 -109
  356. package/dist/mcp/server.js +118 -114
  357. package/dist/mcp/tools/complete-reminder.js +7 -6
  358. package/dist/mcp/tools/create-reminder.js +7 -6
  359. package/dist/mcp/tools/create-task.js +34 -30
  360. package/dist/mcp/tools/deactivate-behavior.js +18 -16
  361. package/dist/mcp/tools/list-reminders.js +7 -6
  362. package/dist/mcp/tools/list-tasks.js +34 -30
  363. package/dist/mcp/tools/send-message.js +32 -29
  364. package/dist/mcp/tools/update-task.js +32 -28
  365. package/dist/mcp-child-registry-OTG4MWO7.js +25 -0
  366. package/dist/{mcp-http-config-6K6IKH5F.js → mcp-http-config-DQWL7U2Z.js} +6 -5
  367. package/dist/{mcp-session-identity-LRC6WJSD.js → mcp-session-identity-277GASTQ.js} +28 -25
  368. package/dist/{memory-cards-V3OZHIYP.js → memory-cards-3S2ZQPR7.js} +17 -8
  369. package/dist/{memory-graph-extractor-JC2Z64L4.js → memory-graph-extractor-A6DFEFIN.js} +10 -9
  370. package/dist/{memory-poisoning-defense-YM4QJHCX.js → memory-poisoning-defense-ZVP4H6DY.js} +5 -4
  371. package/dist/{memory-pressure-watchdog-6F6KEQHN.js → memory-pressure-watchdog-6W5F6R7H.js} +29 -26
  372. package/dist/{memory-queue-QJNWKWKG.js → memory-queue-YF7IDSFY.js} +3 -2
  373. package/dist/{memory-queue-client-COA4ABEV.js → memory-queue-client-ADSDP6OX.js} +9 -7
  374. package/dist/{memory-reflection-QXHJPYPC.js → memory-reflection-BKB2YOE6.js} +52 -6
  375. package/dist/{monitor-grants-BW2WL4IU.js → monitor-grants-EV747HMW.js} +4 -3
  376. package/dist/{notification-ledger-6QRLQW4Q.js → notification-ledger-CLGM7ODF.js} +30 -27
  377. package/dist/{notifications-7B6D7Y5C.js → notifications-MACUZPYP.js} +28 -25
  378. package/dist/{oauth-server-TZFNQAFS.js → oauth-server-AYM37SQ4.js} +25 -4
  379. package/dist/{orchestration-events-GY5VP5LU.js → orchestration-events-N7LYMUGA.js} +6 -5
  380. package/dist/{orchestration-phase-UDS24CVQ.js → orchestration-phase-T2WD45UA.js} +3 -2
  381. package/dist/{orchestrator-JVPVOYWA.js → orchestrator-4X24EWHV.js} +30 -27
  382. package/dist/{org-brief-session-GRV5R5E3.js → org-brief-session-FZOFMO5U.js} +13 -12
  383. package/dist/{org-consent-policy-3FHHSYXV.js → org-consent-policy-O5E6HXBL.js} +1 -1
  384. package/dist/{org-join-BY4PV6UO.js → org-join-POWUG25F.js} +8 -7
  385. package/dist/{org-key-admin-WSCPT2CZ.js → org-key-admin-E7EMDOZZ.js} +9 -8
  386. package/dist/{org-key-pin-5WUSPGVN.js → org-key-pin-WHWHVWUO.js} +4 -3
  387. package/dist/{org-membership-ESALTLLN.js → org-membership-WRT2IHJK.js} +5 -4
  388. package/dist/{org-partner-config-YKHPDPZR.js → org-partner-config-B7T4CL2T.js} +7 -6
  389. package/dist/{org-partner-runtime-UJDGECZ4.js → org-partner-runtime-FODONVTM.js} +13 -12
  390. package/dist/{org-row-visibility-V5DXIHTE.js → org-row-visibility-VX4AVV5Q.js} +1 -1
  391. package/dist/{pipeline-router-YY5FQKTY.js → pipeline-router-6GGT2ZW3.js} +6 -5
  392. package/dist/{plan-limits-OVX6SN6B.js → plan-limits-FUN76LYY.js} +8 -7
  393. package/dist/{platform-procedures-I57ITMDC.js → platform-procedures-7YSCLF4Z.js} +1 -1
  394. package/dist/{postinstall-failure-B2JHNFPM.js → postinstall-failure-O6TSSNJB.js} +3 -2
  395. package/dist/{project-boot-LXLU2J32.js → project-boot-3Q65LCIP.js} +2 -1
  396. package/dist/project-name-LJVFMYTQ.js +30 -0
  397. package/dist/{projection-worker-D2472IOD.js → projection-worker-4OANGP5K.js} +5 -4
  398. package/dist/{prospective-memory-JXO2A6PL.js → prospective-memory-KR3P4T6N.js} +5 -4
  399. package/dist/{push-notifications-HR3FZRDI.js → push-notifications-NCZLH6DI.js} +29 -26
  400. package/dist/ref-provenance-gate-M4AQO4OT.js +269 -0
  401. package/dist/{reproject-worktree-memories-OSS3PGRF.js → reproject-worktree-memories-PWYKPB2U.js} +106 -23
  402. package/dist/{reranker-IMZRPYJ2.js → reranker-6V3C2AO4.js} +3 -2
  403. package/dist/resolve-image-labels-ZI6UBW5W.js +15 -0
  404. package/dist/{retrieval-health-W7OD44FE.js → retrieval-health-5D7O6VH6.js} +4 -3
  405. package/dist/{review-polling-2INP7H6M.js → review-polling-QW3LJ4KN.js} +29 -26
  406. package/dist/runtime/index.js +38 -34
  407. package/dist/{session-events-G4XUPVWV.js → session-events-T45SSTMF.js} +31 -26
  408. package/dist/{session-kill-telemetry-W7MHWJTQ.js → session-kill-telemetry-QSPVJGBF.js} +29 -26
  409. package/dist/{session-mcp-config-F7KATWOF.js → session-mcp-config-SC5BLWZG.js} +3 -2
  410. package/dist/{session-scope-LG2J4EMQ.js → session-scope-KRWE54C4.js} +28 -25
  411. package/dist/{setup-wizard-YQJI3SVM.js → setup-wizard-GP3TBTPF.js} +5 -4
  412. package/dist/{shard-manager-UROHZE46.js → shard-manager-OE36A4MY.js} +3 -2
  413. package/dist/{skill-refinement-RA37U756.js → skill-refinement-C7JTMLJG.js} +6 -5
  414. package/dist/stack-generate-manifest-MFMDWRUP.js +810 -0
  415. package/dist/{stack-promote-IYBRXHTA.js → stack-promote-EKSCYY63.js} +8 -6
  416. package/dist/{stack-release-OXWLVVG6.js → stack-release-2GZAAFO4.js} +8 -6
  417. package/dist/{stack-update-2CZEROPK.js → stack-update-J6JXSTAZ.js} +51 -5
  418. package/dist/{steward-gate-LTNFB3FY.js → steward-gate-BFCCMCSW.js} +6 -5
  419. package/dist/{subagent-brief-injection-OHLWLECQ.js → subagent-brief-injection-ED36PLYY.js} +44 -36
  420. package/dist/{subagent-spawn-ledger-USYZXU3M.js → subagent-spawn-ledger-E6U3OY6Z.js} +3 -2
  421. package/dist/{supervisor-handoff-CSJQMI53.js → supervisor-handoff-SGLEPOCY.js} +12 -3
  422. package/dist/{support-inbox-4KCEPAZQ.js → support-inbox-YW47SYJF.js} +20 -5
  423. package/dist/{task-enforcement-LGXWXGVZ.js → task-enforcement-CECTQX4U.js} +29 -26
  424. package/dist/{task-request-inbox-WHCOSUCP.js → task-request-inbox-Q5T4N5K7.js} +1 -1
  425. package/dist/{task-scope-KXF7Y6KA.js → task-scope-ERVEUEYU.js} +28 -25
  426. package/dist/{tasks-crud-5EM55WRZ.js → tasks-crud-ZRQNJXQ2.js} +28 -25
  427. package/dist/{tasks-notify-VFMAURTN.js → tasks-notify-MIZH4C2O.js} +29 -26
  428. package/dist/{tasks-review-MHGMBHUZ.js → tasks-review-Z7J2P6DG.js} +28 -25
  429. package/dist/{telemetry-upload-6NRTN7QJ.js → telemetry-upload-LVQUQYFP.js} +10 -9
  430. package/dist/{token-budget-LZPOYTRP.js → token-budget-BU4NOVZF.js} +6 -5
  431. package/dist/{tool-capability-index-ED5OAPMW.js → tool-capability-index-7F42MOJT.js} +1 -1
  432. package/dist/{tool-gates-7PLIOLAL.js → tool-gates-JWVSAYTW.js} +1 -1
  433. package/dist/{tool-gates-2OZY3GZM.js → tool-gates-VXITVRFQ.js} +1 -1
  434. package/dist/{tool-telemetry-ZX7VSAXK.js → tool-telemetry-O27EVMBR.js} +1 -1
  435. package/dist/tui/App.js +43 -40
  436. package/dist/{tui-data-CC5POSUV.js → tui-data-TPWWBIUQ.js} +28 -25
  437. package/dist/{update-support-KH6NSQON.js → update-support-F2F5537B.js} +22 -20
  438. package/dist/{whatsapp-QW3X7OCN.js → whatsapp-YM4A2CSK.js} +3 -1
  439. package/dist/{work-claims-MNK7PEPW.js → work-claims-B73X5NE7.js} +6 -5
  440. package/dist/{work-state-heartbeat-YEWT5NMZ.js → work-state-heartbeat-P4YX6E2R.js} +1 -1
  441. package/dist/{worker-gate-BOQSIU2Z.js → worker-gate-BEEIIVWA.js} +3 -2
  442. package/dist/{workflow-engine-MUUD7ZEX.js → workflow-engine-5X46PFCW.js} +4 -2
  443. package/dist/{worktree-GOGT2LZP.js → worktree-W47CIMJ6.js} +9 -6
  444. package/dist/worktree-ownership-guard-OUWJROW2.js +88 -0
  445. package/dist/{worktree-sweep-46VWPVQT.js → worktree-sweep-BNBD4RFX.js} +8 -7
  446. package/package.json +14 -5
  447. package/release-notes.json +5 -5
  448. package/src/commands/exe/call.md +1 -1
  449. package/stack.release.json +6 -0
  450. package/dist/chunk-KZXMP6JG.js +0 -319
  451. package/dist/chunk-TCTED52S.js +0 -120
  452. package/dist/chunk-W2IRQJ6R.js +0 -67
  453. package/dist/doc-graph-extractor-VPTRIEKN.js +0 -149
  454. package/dist/project-name-ILJTETUE.js +0 -14
  455. /package/dist/{chunk-3Y5THOU6.js → chunk-6WIFPD2P.js} +0 -0
  456. /package/dist/{chunk-7XGXRD22.js → chunk-AISULNGL.js} +0 -0
  457. /package/dist/{chunk-3F2UB4IQ.js → chunk-DN4YVV4Z.js} +0 -0
  458. /package/dist/{chunk-WV3TOOL7.js → chunk-KQ6RJWRW.js} +0 -0
  459. /package/dist/{chunk-HR2R2QER.js → chunk-M4IRPXSZ.js} +0 -0
  460. /package/dist/{chunk-ORA5BWCV.js → chunk-NRG7KZIP.js} +0 -0
  461. /package/dist/{chunk-7UTJA6HF.js → chunk-VZAFWPAY.js} +0 -0
  462. /package/dist/{chunk-VJSDGDNS.js → chunk-WSQASFLP.js} +0 -0
  463. /package/dist/{chunk-FZQWVQJG.js → chunk-YO4BO2CL.js} +0 -0
  464. /package/dist/{core-memory-6WBNT2HL.js → core-memory-7I7RE2SJ.js} +0 -0
  465. /package/dist/{entity-boost-MT336PI3.js → entity-boost-3UWGXG5O.js} +0 -0
  466. /package/dist/{memory-isolation-EJ45IXBH.js → memory-isolation-2TUZ7Z4K.js} +0 -0
  467. /package/dist/{message-queue-client-MVBTYCSV.js → message-queue-client-XQN7QABL.js} +0 -0
  468. /package/dist/{webhook-pipe-UQSEHFPO.js → webhook-pipe-W2FVXY7M.js} +0 -0
  469. /package/dist/{wiki-acl-WXRJGZ5Q.js → wiki-acl-IBQLLBTS.js} +0 -0
  470. /package/dist/{wiki-client-AXNM5FWY.js → wiki-client-W65IOSWF.js} +0 -0
@@ -9,17 +9,17 @@ import {
9
9
  import {
10
10
  buildClaudeHttpMcpEntry,
11
11
  buildClaudeStdioProxyMcpEntry
12
- } from "./chunk-LDL3S7AC.js";
12
+ } from "./chunk-NKETJCB5.js";
13
13
  import {
14
14
  ensureAllAgentSymlinks
15
- } from "./chunk-WAEKYKTK.js";
15
+ } from "./chunk-6RKKVPYF.js";
16
16
  import {
17
17
  MCP_LEGACY_KEY,
18
18
  MCP_PRIMARY_KEY
19
19
  } from "./chunk-HYZV25LY.js";
20
20
  import {
21
21
  loadConfigSync
22
- } from "./chunk-QMSEL5YS.js";
22
+ } from "./chunk-ZIG7VPJV.js";
23
23
 
24
24
  // src/adapters/claude/installer.ts
25
25
  import { readFile, writeFile, mkdir, readdir, rm } from "fs/promises";
@@ -942,7 +942,7 @@ async function runInstaller(homeDir) {
942
942
  );
943
943
  }
944
944
  try {
945
- const { generateAgentDefs, summarizeAgentDefResults } = await import("./agent-defs-generator-M4ZNYIVX.js");
945
+ const { generateAgentDefs, summarizeAgentDefResults } = await import("./agent-defs-generator-ZWI6DXOE.js");
946
946
  const defResults = generateAgentDefs({ homeDir: resolvedHome });
947
947
  process.stderr.write(`Agent definitions: ${summarizeAgentDefResults(defResults)}
948
948
  `);
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-5YEUPUV4.js";
7
7
  import {
8
8
  EXE_AI_DIR
9
- } from "./chunk-QMSEL5YS.js";
9
+ } from "./chunk-ZIG7VPJV.js";
10
10
 
11
11
  // src/lib/shard-manager.ts
12
12
  import path from "path";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveDataDir
3
- } from "./chunk-QMSEL5YS.js";
3
+ } from "./chunk-ZIG7VPJV.js";
4
4
 
5
5
  // src/lib/postinstall-failure.ts
6
6
  import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "fs";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  withScopedReadWindow
3
- } from "./chunk-YFCNWQAM.js";
3
+ } from "./chunk-DJOIMFKV.js";
4
4
  import {
5
5
  requireOrgPartnerBinding,
6
6
  resolvePartnerIdentities
7
- } from "./chunk-PVEM537A.js";
7
+ } from "./chunk-4YLBKEL5.js";
8
8
  import {
9
9
  allocateOutboundSeq,
10
10
  approveBriefManually,
@@ -22,7 +22,7 @@ import {
22
22
  sealMailboxEnvelope,
23
23
  unrecordedText,
24
24
  verifyManifest
25
- } from "./chunk-RUVO3NJC.js";
25
+ } from "./chunk-IN6CAM4F.js";
26
26
  import {
27
27
  queueMailboxDeposit
28
28
  } from "./chunk-4LWBC7CM.js";
@@ -132,6 +132,12 @@ var PLATFORM_PROCEDURES = [
132
132
  priority: "p1",
133
133
  content: "Do NOT query bug/feature status during startup; the boot script owns the startup brief. When the founder asks about filed bugs or shipped features after boot, call support(action='list_my_bugs') and support(action='list_my_features'). If any bug has status 'closed' with fixed_version, tell the founder: 'N bug fix(es) available \u2014 run exe-os update to get vX.Y.Z'. If any feature has status 'shipped' with shipped_version, tell founder: 'N feature(s) shipped \u2014 run exe-os update to get vX.Y.Z'. Skip silently if the support tool is unavailable."
134
134
  },
135
+ {
136
+ title: "Link fix PRs to bugs at PR-open time",
137
+ domain: "support",
138
+ priority: "p1",
139
+ content: "When you open a PR that addresses a filed bug, immediately comment the linkage onto that bug: support(action='add_comment', id=<bug-id>, comment='Fix PR opened: <repo>#<PR number> (<branch>)'). Do this the moment the PR exists \u2014 before merge, not after. The bug stays open until the fix lands, but the bug\u2194PR linkage must be recorded at PR-open time so triage and other agents can see which PR owns which bug without guessing. Also reference the bug ID in the PR body for the reverse link."
140
+ },
135
141
  // --- Tool guidance ---
136
142
  {
137
143
  title: "How to use company_actions \u2014 execute business actions through gateway connectors",
@@ -247,12 +253,6 @@ var PLATFORM_PROCEDURES = [
247
253
  priority: "p0",
248
254
  content: "Before broad repo exploration, agents MUST use code_context and graph MCP tools instead of manual grep/read. code_context: action=search (multi-language code/doc search), action=trace (symbol imports/dependents), action=blast_radius (impact analysis), action=index/stats (refresh/check index). graph: action=query_relationships, action=hot_entities, action=entity_neighbors, action=stats. NEVER brute-force grep without checking code_context first. CLI parity: exe-os code-context init|index|status|stats|search|doctor. Keep code_context separate from durable memory \u2014 promote only validated decisions/lessons."
249
255
  },
250
- {
251
- title: "Retrieval architecture \u2014 three pillars, embeddings optional",
252
- domain: "tool-use",
253
- priority: "p1",
254
- content: "THREE equal pillars: (1) Keyword (FTS5), (2) Graph (entity relationships), (3) Vector (embedding similarity). All run in parallel; results merge via Reciprocal Rank Fusion. Keyword + Graph are FIRST-CLASS, not fallbacks. 8-16GB machines without embeddings = still excellent. 8GB: FTS+Graph only. 16GB: +optional 0.6B model. 32+GB: full hybrid with 4B model. Degrades gracefully. CLaRa (query expansion) runs automatically on every recall \u2014 LLM infers related terms, closing the gap between keyword and semantic search WITHOUT embeddings. No config needed. BENCHMARK: FTS+Graph (42.25%) BEATS full hybrid (41.75%) on BEAM 100K. DOCUMENT-AWARE: For ingested documents (PDFs, exports, wiki imports), use retrieval_mode='document_aware' for neighbor chunk expansion, project affinity boost, and scoring diagnostics. For quick fact lookups on agent memories, default recall is better."
255
- },
256
256
  {
257
257
  title: "Commit discipline \u2014 commit after every completed track, never batch",
258
258
  domain: "workflow",
@@ -326,6 +326,18 @@ var PLATFORM_PROCEDURES = [
326
326
  }
327
327
  ];
328
328
  var PLATFORM_REFERENCE_PROCEDURES = [
329
+ // Demoted from the always-injected block (2026-08-19). Reference-shaped:
330
+ // hardware tiers, benchmark percentages and architecture prose that no
331
+ // agent has to act on mid-task. The actionable half already lives inline
332
+ // as "Code context + graph first — MANDATORY". Demoted because the
333
+ // injected set had reached 26,969 of its 27,000-char cap, which is
334
+ // exactly the pressure that cap exists to create.
335
+ {
336
+ title: "Retrieval architecture \u2014 three pillars, embeddings optional",
337
+ domain: "tool-use",
338
+ priority: "p1",
339
+ content: "THREE equal pillars: (1) Keyword (FTS5), (2) Graph (entity relationships), (3) Vector (embedding similarity). All run in parallel; results merge via Reciprocal Rank Fusion. Keyword + Graph are FIRST-CLASS, not fallbacks. 8-16GB machines without embeddings = still excellent. 8GB: FTS+Graph only. 16GB: +optional 0.6B model. 32+GB: full hybrid with 4B model. Degrades gracefully. CLaRa (query expansion) runs automatically on every recall \u2014 LLM infers related terms, closing the gap between keyword and semantic search WITHOUT embeddings. No config needed. BENCHMARK: FTS+Graph (42.25%) BEATS full hybrid (41.75%) on BEAM 100K. DOCUMENT-AWARE: For ingested documents (PDFs, exports, wiki imports), use retrieval_mode='document_aware' for neighbor chunk expansion, project affinity boost, and scoring diagnostics. For quick fact lookups on agent memories, default recall is better."
340
+ },
329
341
  {
330
342
  title: "Use the diagnostics dashboards \u2014 never grep daemon logs",
331
343
  domain: "workflow",
@@ -2,13 +2,13 @@ import {
2
2
  InviteError,
3
3
  resolveAuth,
4
4
  resolveEndpoint
5
- } from "./chunk-5N4SG5NB.js";
5
+ } from "./chunk-T35RCQFE.js";
6
6
  import {
7
7
  resolvePartnerIdentities
8
- } from "./chunk-PVEM537A.js";
8
+ } from "./chunk-4YLBKEL5.js";
9
9
  import {
10
10
  orgKeyFingerprintDisplay
11
- } from "./chunk-H37FSTF2.js";
11
+ } from "./chunk-UBMZ3YQU.js";
12
12
  import {
13
13
  asOrgBillablePlan
14
14
  } from "./chunk-X2X3IGZU.js";
@@ -8,11 +8,11 @@ import {
8
8
  import {
9
9
  loadLicense,
10
10
  readCachedLicenseToken
11
- } from "./chunk-DKBPCOU4.js";
11
+ } from "./chunk-L6RXG36J.js";
12
12
  import {
13
13
  EXE_AI_DIR,
14
14
  loadConfig
15
- } from "./chunk-QMSEL5YS.js";
15
+ } from "./chunk-ZIG7VPJV.js";
16
16
 
17
17
  // src/bin/exe-support.ts
18
18
  import { mkdirSync, readFileSync, unlinkSync, writeFileSync } from "fs";
@@ -0,0 +1,45 @@
1
+ // src/lib/budget-fallback.ts
2
+ import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from "fs";
3
+ import path from "path";
4
+ function sessionCacheDir() {
5
+ const base = process.env.EXE_OS_DIR ?? path.join(process.env.HOME ?? "", ".exe-os");
6
+ return path.join(base, "session-cache");
7
+ }
8
+ function markerPath(taskId) {
9
+ const safe = String(taskId).replace(/[^a-zA-Z0-9_-]/g, "");
10
+ return path.join(sessionCacheDir(), `budget-fallback-${safe}.json`);
11
+ }
12
+ function setBudgetFallback(marker) {
13
+ if (!marker.taskId || !marker.fallbackModel) return;
14
+ try {
15
+ const dir = sessionCacheDir();
16
+ if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
17
+ writeFileSync(markerPath(marker.taskId), JSON.stringify(marker), { mode: 384 });
18
+ } catch {
19
+ }
20
+ }
21
+ function getBudgetFallback(taskId) {
22
+ if (!taskId) return null;
23
+ try {
24
+ const file = markerPath(taskId);
25
+ if (!existsSync(file)) return null;
26
+ const parsed = JSON.parse(readFileSync(file, "utf8"));
27
+ return parsed && parsed.taskId && parsed.fallbackModel ? parsed : null;
28
+ } catch {
29
+ return null;
30
+ }
31
+ }
32
+ function clearBudgetFallback(taskId) {
33
+ if (!taskId) return;
34
+ try {
35
+ const file = markerPath(taskId);
36
+ if (existsSync(file)) unlinkSync(file);
37
+ } catch {
38
+ }
39
+ }
40
+
41
+ export {
42
+ setBudgetFallback,
43
+ getBudgetFallback,
44
+ clearBudgetFallback
45
+ };
@@ -36,8 +36,8 @@ function rejectAllPending(reason) {
36
36
  function isWriteWorkerEnabled(env = process.env) {
37
37
  return env.EXE_WRITE_WORKER === "1";
38
38
  }
39
- function spawnDbWriteWorker(dbPath, encryptionKey) {
40
- if (!isWriteWorkerEnabled()) return;
39
+ function spawnDbWriteWorker(dbPath, encryptionKey, opts) {
40
+ if (!opts?.forMaintenance && !isWriteWorkerEnabled()) return;
41
41
  if (_worker) return;
42
42
  if (_spawnAttempts >= MAX_SPAWN_ATTEMPTS) return;
43
43
  _spawnAttempts++;
@@ -108,6 +108,13 @@ async function sweepSessionEventsRetentionInWorker(retentionDays) {
108
108
  });
109
109
  return { deleted: Number(result.deleted ?? 0) };
110
110
  }
111
+ async function sweepConversationsRetentionInWorker(retentionDays) {
112
+ const result = await sendWriteWorkerRequest({
113
+ type: "sweep-conversations-retention",
114
+ retentionDays
115
+ });
116
+ return { deleted: Number(result.deleted ?? 0) };
117
+ }
111
118
  function sendWriteWorkerRequest(payload) {
112
119
  if (!_worker || !_workerReady) {
113
120
  return Promise.reject(new Error("db write worker not available"));
@@ -150,6 +157,7 @@ export {
150
157
  isDbWriteWorkerReady,
151
158
  writeMemoryInWorker,
152
159
  sweepSessionEventsRetentionInWorker,
160
+ sweepConversationsRetentionInWorker,
153
161
  _getDbWriteWorkerForTests,
154
162
  disposeDbWriteWorker
155
163
  };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getGlobalProceduresBlock
3
- } from "./chunk-HIVZ53YB.js";
3
+ } from "./chunk-EXTZSNWL.js";
4
4
 
5
5
  // src/lib/employee-templates.ts
6
6
  var BASE_OPERATING_PROCEDURES = `
@@ -5,17 +5,17 @@ import {
5
5
  import {
6
6
  getBrandAsciiArt,
7
7
  getBrandName
8
- } from "./chunk-2CWS374F.js";
8
+ } from "./chunk-7RI2CNXJ.js";
9
9
  import {
10
10
  FREE_TIER_BACKUP_DISCLOSURE
11
11
  } from "./chunk-SO7KTH3Q.js";
12
+ import {
13
+ RUNTIME_TABLE
14
+ } from "./chunk-WNBZJSQT.js";
12
15
  import {
13
16
  getMasterKey,
14
17
  setMasterKey
15
18
  } from "./chunk-HPXFKUGU.js";
16
- import {
17
- RUNTIME_TABLE
18
- } from "./chunk-WNBZJSQT.js";
19
19
  import {
20
20
  WINDOWS_UNSUPPORTED_EXIT,
21
21
  isWSL,
@@ -27,7 +27,7 @@ import {
27
27
  MODELS_DIR,
28
28
  loadConfig,
29
29
  saveConfig
30
- } from "./chunk-QMSEL5YS.js";
30
+ } from "./chunk-ZIG7VPJV.js";
31
31
  import {
32
32
  atomicWriteJsonSync,
33
33
  atomicWriteSync
@@ -219,7 +219,7 @@ function clearSetupState() {
219
219
  }
220
220
  async function probeDaemonHealthAfterInstall() {
221
221
  try {
222
- const { waitForDaemonReady } = await import("./daemon-ready-OT2VQLS7.js");
222
+ const { waitForDaemonReady } = await import("./daemon-ready-P2BR2XP5.js");
223
223
  return await waitForDaemonReady(4, 500);
224
224
  } catch {
225
225
  return false;
@@ -771,7 +771,7 @@ async function runSetupWizard(opts = {}) {
771
771
  log(" The old directory will not be modified or deleted.");
772
772
  log("");
773
773
  }
774
- const { getKeyBackupStatus, markKeyBackupConfirmed } = await import("./key-backup-status-6L2ARCXW.js");
774
+ const { getKeyBackupStatus, markKeyBackupConfirmed } = await import("./key-backup-status-LQPINQ3W.js");
775
775
  const keyBackupBeforeStep1 = getKeyBackupStatus();
776
776
  const mustRunKeyCeremony = !state.completedSteps.includes(1) || !keyBackupBeforeStep1.exists;
777
777
  if (mustRunKeyCeremony) {
@@ -1043,7 +1043,7 @@ async function runSetupWizard(opts = {}) {
1043
1043
  } else if (cloudDeclined) {
1044
1044
  delete config.cloud;
1045
1045
  }
1046
- const { applyDefaultOrchestrationPhase } = await import("./orchestration-phase-UDS24CVQ.js");
1046
+ const { applyDefaultOrchestrationPhase } = await import("./orchestration-phase-T2WD45UA.js");
1047
1047
  applyDefaultOrchestrationPhase(config);
1048
1048
  await saveConfig(config);
1049
1049
  log("");
@@ -1425,7 +1425,7 @@ async function runSetupWizard(opts = {}) {
1425
1425
  log("");
1426
1426
  unlockExecutives = await askYesNo("Unlock Phase 2 executives now? (y/N): ", void 0, false);
1427
1427
  }
1428
- const { setOrchestrationPhase } = await import("./orchestration-phase-UDS24CVQ.js");
1428
+ const { setOrchestrationPhase } = await import("./orchestration-phase-T2WD45UA.js");
1429
1429
  if (!unlockExecutives) {
1430
1430
  await setOrchestrationPhase("phase_1_coo", "setup-wizard");
1431
1431
  log("");
@@ -0,0 +1,80 @@
1
+ // src/lib/hermetic-guard.ts
2
+ import { realpathSync } from "fs";
3
+ import os from "os";
4
+ import path from "path";
5
+ var SHARED_TMP_BASES = ["/tmp", os.tmpdir()];
6
+ function isHermeticTestEnv() {
7
+ return process.env.EXE_TEST_HERMETIC === "1";
8
+ }
9
+ function harnessRealHome() {
10
+ const v = process.env.EXE_HERMETIC_REAL_HOME ?? process.env.EXE_REAL_HOME;
11
+ return v && v.trim() ? v : null;
12
+ }
13
+ function harnessSandboxRoot() {
14
+ const v = process.env.EXE_HERMETIC_SANDBOX_ROOT;
15
+ return v && v.trim() ? v : null;
16
+ }
17
+ function canonical(p) {
18
+ let dir = path.resolve(p);
19
+ const tail = [];
20
+ for (; ; ) {
21
+ try {
22
+ return path.join(realpathSync(dir), ...tail);
23
+ } catch {
24
+ }
25
+ const parent = path.dirname(dir);
26
+ if (parent === dir) return path.resolve(p);
27
+ tail.unshift(path.basename(dir));
28
+ dir = parent;
29
+ }
30
+ }
31
+ function isInside(candidate, base) {
32
+ const rel = path.relative(canonical(base), canonical(candidate));
33
+ return rel === "" || !rel.startsWith("..") && !path.isAbsolute(rel);
34
+ }
35
+ function realInstallDirs(realHome) {
36
+ return [path.join(realHome, ".exe-os"), path.join(realHome, ".exe-mem")];
37
+ }
38
+ function assertHermeticPath(what, resolved) {
39
+ if (!isHermeticTestEnv()) return;
40
+ const realHome = harnessRealHome();
41
+ if (!realHome) return;
42
+ const sandboxRoot = harnessSandboxRoot();
43
+ if (sandboxRoot && isInside(resolved, sandboxRoot)) return;
44
+ const breached = realInstallDirs(realHome).find((dir) => isInside(resolved, dir));
45
+ if (!breached) return;
46
+ throw new Error(
47
+ `[hermetic-guard] Test isolation breach: ${what} resolved to ${resolved}, which is the REAL exe-os install at ${breached}.
48
+ This process runs under the hermetic test harness (EXE_TEST_HERMETIC=1) but is operating on the LIVE install. Real product code reached from here can and does kill the production daemon (bug 2b7072a7 / 7a915790).
49
+ Cause is almost always a spawn that overrode the sandbox: an explicit env: {...} that dropped EXE_OS_DIR/EXE_MEM_DIR, or HOME: os.homedir() captured outside the sandbox.
50
+ Fix: inherit ...process.env, or use the hermetic HOME (process.env.HOME), never os.homedir().`
51
+ );
52
+ }
53
+ function assertHermeticTmux() {
54
+ if (!isHermeticTestEnv()) return;
55
+ const realHome = harnessRealHome();
56
+ if (!realHome) return;
57
+ if (process.env.TMUX) {
58
+ throw new Error(
59
+ `[hermetic-guard] Test isolation breach: $TMUX is set (${process.env.TMUX}) under the hermetic test harness. A tmux client follows $TMUX to the LIVE tmux server regardless of -L, so this invocation would create, signal, or reap real agent sessions (bug 2b7072a7).
60
+ Fix: delete TMUX/TMUX_PANE from the child env \u2014 the harness does this for the worker itself.`
61
+ );
62
+ }
63
+ const tmpdir = process.env.TMUX_TMPDIR;
64
+ const sandboxRoot = harnessSandboxRoot();
65
+ const recordedTmuxDir = process.env.EXE_HERMETIC_TMUX_DIR;
66
+ const isOwnScratch = !!tmpdir && (!!recordedTmuxDir && isInside(tmpdir, recordedTmuxDir) || !!sandboxRoot && isInside(tmpdir, sandboxRoot) || // No harness breadcrumbs (a child spawned without them): fall back to the
67
+ // property that matters — it must not be a bare shared base.
68
+ !recordedTmuxDir && !sandboxRoot && !SHARED_TMP_BASES.some((base) => canonical(tmpdir) === canonical(base)));
69
+ if (!isOwnScratch) {
70
+ throw new Error(
71
+ `[hermetic-guard] Test isolation breach: TMUX_TMPDIR is ${tmpdir ? tmpdir : "unset"} under the hermetic test harness, so tmux would use a SHARED ${path.join("<base>", "tmux-<uid>")} server \u2014 the live one (bug 2b7072a7).
72
+ Fix: point TMUX_TMPDIR at a per-run scratch directory, as tests/setup/hermetic-env.ts does.`
73
+ );
74
+ }
75
+ }
76
+
77
+ export {
78
+ assertHermeticPath,
79
+ assertHermeticTmux
80
+ };
@@ -1,9 +1,10 @@
1
1
  import {
2
+ GIT_CRYPT_SMUDGE_BYPASS_ARGS,
2
3
  getGitRoot,
3
4
  getGitRootAsync,
4
5
  isWorktreeDirty,
5
6
  isWorktreeDirtyAsync
6
- } from "./chunk-JTWTBX2M.js";
7
+ } from "./chunk-4EN3IZ3Q.js";
7
8
 
8
9
  // src/lib/worktree-sweep.ts
9
10
  import { execFile } from "child_process";
@@ -303,25 +304,6 @@ async function pruneWorktreeRegistry(repoRoot) {
303
304
  } catch {
304
305
  }
305
306
  }
306
- async function clearStashes(repoRoot) {
307
- try {
308
- const stashList = (await execFileAsync("git", ["stash", "list"], {
309
- cwd: repoRoot,
310
- encoding: "utf8",
311
- timeout: GIT_TIMEOUT_MS
312
- })).stdout.trim();
313
- if (!stashList) return 0;
314
- const count = stashList.split("\n").length;
315
- await execFileAsync("git", ["stash", "clear"], {
316
- cwd: repoRoot,
317
- encoding: "utf8",
318
- timeout: GIT_TIMEOUT_MS
319
- });
320
- return count;
321
- } catch {
322
- return 0;
323
- }
324
- }
325
307
  function parseAgentName(wtPath) {
326
308
  const dirName = path.basename(wtPath);
327
309
  if (!dirName) return null;
@@ -338,17 +320,18 @@ async function archiveDirtyWorktree(wtPath, agentName) {
338
320
  const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-").slice(0, 19);
339
321
  const quarantineBranch = `quarantine/${agentName}-${timestamp}`;
340
322
  try {
341
- await execFileAsync("git", ["-C", wtPath, "checkout", "-b", quarantineBranch], {
323
+ await execFileAsync("git", ["-C", wtPath, ...GIT_CRYPT_SMUDGE_BYPASS_ARGS, "checkout", "-b", quarantineBranch], {
342
324
  encoding: "utf8",
343
325
  timeout: GIT_TIMEOUT_MS
344
326
  });
345
- await execFileAsync("git", ["-C", wtPath, "add", "-A"], {
327
+ await execFileAsync("git", ["-C", wtPath, ...GIT_CRYPT_SMUDGE_BYPASS_ARGS, "add", "-A"], {
346
328
  encoding: "utf8",
347
329
  timeout: GIT_TIMEOUT_MS
348
330
  });
349
331
  await execFileAsync("git", [
350
332
  "-C",
351
333
  wtPath,
334
+ ...GIT_CRYPT_SMUDGE_BYPASS_ARGS,
352
335
  "commit",
353
336
  "-m",
354
337
  `[quarantine] Auto-archived dirty orphan worktree
@@ -369,9 +352,19 @@ Archived by worktree-sweep after ${DIRTY_ORPHAN_MAX_AGE_MS / 864e5}-day dirty or
369
352
  });
370
353
  process.stderr.write(`[worktree-sweep] Archived dirty changes to branch ${quarantineBranch}
371
354
  `);
372
- return true;
373
- } catch {
374
- return false;
355
+ return { ok: true };
356
+ } catch (err) {
357
+ const detail = (() => {
358
+ if (!err || typeof err !== "object") return String(err);
359
+ const e = err;
360
+ const parts = [e.message, e.stderr, e.stdout].map((part) => Buffer.isBuffer(part) ? part.toString("utf8") : String(part ?? "")).filter(Boolean);
361
+ return parts.join(" | ").replace(/\s+/g, " ").trim().slice(0, 400);
362
+ })();
363
+ process.stderr.write(
364
+ `[worktree-sweep] Archive FAILED for ${wtPath} (branch ${quarantineBranch}): ${detail}
365
+ `
366
+ );
367
+ return { ok: false, detail };
375
368
  }
376
369
  }
377
370
  async function sweepWorktrees(options = {}) {
@@ -428,13 +421,15 @@ async function sweepWorktrees(options = {}) {
428
421
  `
429
422
  );
430
423
  const archived = await archiveDirtyWorktree(wt.path, agentName);
431
- if (archived) {
424
+ if (archived.ok) {
432
425
  } else {
433
426
  result.skipped.push({
434
427
  repo: repoName,
435
428
  worktree: wtName,
436
429
  branch: wt.branch,
437
- reason: `uncommitted changes (archive failed after ${ageD}d)`
430
+ // Carry the git error. Without it this read "archive failed" 205
431
+ // times over and gave an operator nothing to act on (42aa8c56).
432
+ reason: `uncommitted changes (archive failed after ${ageD}d: ${archived.detail})`
438
433
  });
439
434
  continue;
440
435
  }
@@ -492,14 +487,6 @@ async function sweepWorktrees(options = {}) {
492
487
  result.branchesDeleted.push({ repo: repoName, branch: wt.branch, remote: remoteDeleted });
493
488
  }
494
489
  }
495
- if (!dryRun) {
496
- const cleared = await clearStashes(repoRoot);
497
- if (cleared > 0) {
498
- result.stashesCleared += cleared;
499
- process.stderr.write(`[worktree-sweep] Cleared ${cleared} stash(es) in ${repoName}
500
- `);
501
- }
502
- }
503
490
  if (!dryRun) {
504
491
  await pruneWorktreeRegistry(repoRoot);
505
492
  }
@@ -2,7 +2,7 @@ import {
2
2
  getClient,
3
3
  isCoordinatorName,
4
4
  loadEmployeesSync
5
- } from "./chunk-5DCCKHDY.js";
5
+ } from "./chunk-TAMDAOCU.js";
6
6
 
7
7
  // src/lib/steward-gate.ts
8
8
  import crypto from "crypto";
@@ -1,20 +1,29 @@
1
1
  import {
2
2
  employeeSessionName,
3
+ extractRootExe,
4
+ getDispatchedBy,
3
5
  isEmployeeAlive,
6
+ isProvenIntercomDelivery,
4
7
  resolveExeSession,
5
8
  sendIntercom,
6
9
  strictSessionScopeFilter
7
- } from "./chunk-XHYHX6F7.js";
10
+ } from "./chunk-AKLQSC6W.js";
11
+ import {
12
+ isValidSessionScope
13
+ } from "./chunk-BTSWFMEH.js";
8
14
  import {
9
15
  parseMessage,
10
16
  serializeMessage
11
17
  } from "./chunk-QAEWWYHL.js";
12
18
  import {
13
19
  recordOrchestrationEventBestEffort
14
- } from "./chunk-E2WEFZOR.js";
20
+ } from "./chunk-W75GTHR3.js";
21
+ import {
22
+ getSessionKey
23
+ } from "./chunk-CVYC6DUW.js";
15
24
  import {
16
25
  getClient
17
- } from "./chunk-5DCCKHDY.js";
26
+ } from "./chunk-TAMDAOCU.js";
18
27
 
19
28
  // src/lib/messaging.ts
20
29
  import crypto from "crypto";
@@ -45,6 +54,18 @@ function rowToMessage(row) {
45
54
  };
46
55
  }
47
56
  var MAX_RETRIES = 10;
57
+ function resolveSenderSessionScope() {
58
+ const ambient = resolveExeSession();
59
+ if (ambient) return ambient;
60
+ try {
61
+ const dispatcher = getDispatchedBy(getSessionKey());
62
+ if (!dispatcher) return null;
63
+ const scope = extractRootExe(dispatcher) ?? dispatcher;
64
+ return isValidSessionScope(scope) ? scope : null;
65
+ } catch {
66
+ return null;
67
+ }
68
+ }
48
69
  function buildUnreadMessagesCountStatement(targetAgent, sessionScope) {
49
70
  const scope = strictSessionScopeFilter(sessionScope);
50
71
  return {
@@ -63,7 +84,7 @@ async function sendMessage(input) {
63
84
  const id = generateUlid();
64
85
  const now = (/* @__PURE__ */ new Date()).toISOString();
65
86
  const targetDevice = input.targetDevice ?? "local";
66
- const sessionScope = input.sessionScope === void 0 ? resolveExeSession() : input.sessionScope;
87
+ const sessionScope = input.sessionScope === void 0 ? resolveSenderSessionScope() : input.sessionScope;
67
88
  await client.execute({
68
89
  sql: `INSERT INTO messages (id, from_agent, from_device, target_agent, target_project, target_device, session_scope, content, priority, status, founder_id, created_at)
69
90
  VALUES (?, ?, 'local', ?, ?, ?, ?, ?, ?, 'pending', ?, ?)`,
@@ -176,8 +197,7 @@ async function deliverLocalMessage(messageId) {
176
197
  if (intercomResult === "failed") {
177
198
  throw new Error(`intercom delivery failed for ${sessionName}`);
178
199
  }
179
- const DELIVERED_RESULTS = /* @__PURE__ */ new Set(["acknowledged", "delivered"]);
180
- if (!DELIVERED_RESULTS.has(intercomResult)) {
200
+ if (!isProvenIntercomDelivery(intercomResult)) {
181
201
  return false;
182
202
  }
183
203
  await client.execute({