@askexenow/exe-os 0.9.279 → 0.9.280

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 (504) hide show
  1. package/dist/active-agent-2G5ARPXZ.js +26 -0
  2. package/dist/active-agent-2IAUPOJO.js +27 -0
  3. package/dist/agentic-ontology-YLZRGG7G.js +25 -0
  4. package/dist/backfill-metadata-GHUTESVD.js +599 -0
  5. package/dist/backfill-metadata-MSIZ5PV2.js +599 -0
  6. package/dist/backfill-metadata-SKUAF4QY.js +599 -0
  7. package/dist/backfill-metadata-WXUP5OVY.js +599 -0
  8. package/dist/behaviors-27D52NU4.js +39 -0
  9. package/dist/behaviors-BHIVZRAN.js +39 -0
  10. package/dist/behaviors-HAEVJHQN.js +39 -0
  11. package/dist/behaviors-LDDK7WEB.js +39 -0
  12. package/dist/bin/agentic-ontology-backfill.js +6 -6
  13. package/dist/bin/agentic-reflection-backfill.js +7 -7
  14. package/dist/bin/agentic-semantic-label.js +6 -6
  15. package/dist/bin/backfill-conversations.js +7 -7
  16. package/dist/bin/backfill-responses.js +7 -7
  17. package/dist/bin/backfill-vectors.js +9 -9
  18. package/dist/bin/bulk-sync-postgres.js +7 -7
  19. package/dist/bin/cc-doctor.js +4 -4
  20. package/dist/bin/cleanup-stale-review-tasks.js +9 -9
  21. package/dist/bin/cli.js +151 -16
  22. package/dist/bin/deferred-daemon-restart.js +1 -1
  23. package/dist/bin/exe-agent-config.js +2 -2
  24. package/dist/bin/exe-agent.js +7 -7
  25. package/dist/bin/exe-assign.js +9 -9
  26. package/dist/bin/exe-boot.js +17 -17
  27. package/dist/bin/exe-call.js +4 -4
  28. package/dist/bin/exe-cloud.js +5 -5
  29. package/dist/bin/exe-dispatch.js +9 -9
  30. package/dist/bin/exe-doctor.js +1 -1
  31. package/dist/bin/exe-export-behaviors.js +8 -8
  32. package/dist/bin/exe-forget.js +7 -7
  33. package/dist/bin/exe-gateway.js +7 -7
  34. package/dist/bin/exe-healthcheck.js +4 -4
  35. package/dist/bin/exe-heartbeat.js +9 -9
  36. package/dist/bin/exe-kill.js +13 -13
  37. package/dist/bin/exe-launch-agent.js +17 -17
  38. package/dist/bin/exe-new-employee.js +6 -6
  39. package/dist/bin/exe-pending-messages.js +10 -10
  40. package/dist/bin/exe-pending-notifications.js +9 -9
  41. package/dist/bin/exe-pending-reviews.js +9 -9
  42. package/dist/bin/exe-rename.js +4 -4
  43. package/dist/bin/exe-review.js +12 -12
  44. package/dist/bin/exe-search.js +6 -6
  45. package/dist/bin/exe-session-cleanup.js +15 -15
  46. package/dist/bin/exe-settings.js +4 -4
  47. package/dist/bin/exe-start-codex.js +24 -13
  48. package/dist/bin/exe-start-opencode.js +9 -9
  49. package/dist/bin/exe-start.sh +2 -2
  50. package/dist/bin/exe-status.js +10 -10
  51. package/dist/bin/exe-support.js +1 -1
  52. package/dist/bin/exe-team.js +3 -3
  53. package/dist/bin/exe-watchdog.js +52 -4
  54. package/dist/bin/git-sweep.js +10 -10
  55. package/dist/bin/graph-backfill.js +7 -7
  56. package/dist/bin/graph-export.js +6 -6
  57. package/dist/bin/import-history.js +10 -10
  58. package/dist/bin/install.js +7 -7
  59. package/dist/bin/intercom-check.js +4 -4
  60. package/dist/bin/mcp-sessions.js +2 -2
  61. package/dist/bin/orchestration-metrics.js +4 -4
  62. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  63. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  64. package/dist/bin/scan-tasks.js +9 -9
  65. package/dist/bin/setup.js +2 -2
  66. package/dist/bin/shard-migrate.js +5 -5
  67. package/dist/capability-cards-JG75HHOF.js +88 -0
  68. package/dist/capacity-monitor-CNW7PRLG.js +50 -0
  69. package/dist/capacity-monitor-HET7G4MG.js +50 -0
  70. package/dist/capacity-monitor-SAY7CD46.js +50 -0
  71. package/dist/capacity-monitor-V7LY63U6.js +50 -0
  72. package/dist/catchup-brief-E7IF2QGR.js +154 -0
  73. package/dist/catchup-brief-JPOHC6UH.js +154 -0
  74. package/dist/catchup-brief-JQID2BF7.js +154 -0
  75. package/dist/catchup-brief-RW5GN43K.js +154 -0
  76. package/dist/chunk-2IA7BLFA.js +2078 -0
  77. package/dist/chunk-2UATPAHA.js +244 -0
  78. package/dist/chunk-2XEWT25L.js +290 -0
  79. package/dist/chunk-2ZFUZKF5.js +197 -0
  80. package/dist/chunk-37C3FRF2.js +1352 -0
  81. package/dist/chunk-3ABB3GEN.js +97 -0
  82. package/dist/chunk-3FCQSK7F.js +4318 -0
  83. package/dist/chunk-3LEZZS52.js +2113 -0
  84. package/dist/chunk-3O46YCET.js +30 -0
  85. package/dist/chunk-3SDHTGTT.js +369 -0
  86. package/dist/chunk-3XLXETYH.js +128 -0
  87. package/dist/chunk-433KKYLZ.js +539 -0
  88. package/dist/chunk-4CCAANIM.js +85 -0
  89. package/dist/chunk-4J5TKW7C.js +1352 -0
  90. package/dist/chunk-4QN4XAB5.js +227 -0
  91. package/dist/chunk-4T2F5SJA.js +2078 -0
  92. package/dist/chunk-52HOURUP.js +369 -0
  93. package/dist/chunk-52XEYRFA.js +362 -0
  94. package/dist/chunk-54XM4CYO.js +1076 -0
  95. package/dist/chunk-5BECNOD5.js +14219 -0
  96. package/dist/chunk-5BUPCYCN.js +604 -0
  97. package/dist/chunk-5CVQOWOY.js +1350 -0
  98. package/dist/chunk-5DGFPLCO.js +214 -0
  99. package/dist/chunk-5DSH4NNZ.js +731 -0
  100. package/dist/chunk-5MCJQCAM.js +128 -0
  101. package/dist/chunk-5OCQ4NMK.js +284 -0
  102. package/dist/chunk-5ODRK4TE.js +1076 -0
  103. package/dist/chunk-5QDLLWZ3.js +510 -0
  104. package/dist/chunk-5TT4VL25.js +167 -0
  105. package/dist/chunk-5VV3WZB6.js +76 -0
  106. package/dist/chunk-6H74SOGI.js +204 -0
  107. package/dist/chunk-6M74TBVW.js +290 -0
  108. package/dist/chunk-6MDKSLYM.js +123 -0
  109. package/dist/chunk-6OFFJSL5.js +33 -0
  110. package/dist/chunk-6ST7MMLG.js +240 -0
  111. package/dist/chunk-6WFUH2B4.js +345 -0
  112. package/dist/chunk-74YEBPGM.js +271 -0
  113. package/dist/chunk-77C3E5LS.js +54 -0
  114. package/dist/chunk-7EAYV7G2.js +345 -0
  115. package/dist/chunk-7FT4TXF3.js +4318 -0
  116. package/dist/chunk-7L2EV3XX.js +366 -0
  117. package/dist/chunk-7MAQO7FA.js +394 -0
  118. package/dist/chunk-7NPWPF2X.js +712 -0
  119. package/dist/chunk-7NWWQ6QX.js +1094 -0
  120. package/dist/chunk-AB5QAKU3.js +1119 -0
  121. package/dist/chunk-AEQOKSU4.js +214 -0
  122. package/dist/chunk-AFPNLGJJ.js +377 -0
  123. package/dist/chunk-ARWKPNWX.js +284 -0
  124. package/dist/chunk-B3UT6H2X.js +14219 -0
  125. package/dist/chunk-BDEB2THB.js +127 -0
  126. package/dist/chunk-BIISXDSB.js +50 -0
  127. package/dist/chunk-BOCQAH6E.js +171 -0
  128. package/dist/chunk-BVETHEMM.js +456 -0
  129. package/dist/chunk-C3N2MXIP.js +85 -0
  130. package/dist/chunk-C3PAAUNW.js +54 -0
  131. package/dist/chunk-C7CRZGD7.js +81 -0
  132. package/dist/chunk-CAQE2WME.js +214 -0
  133. package/dist/chunk-CAWCO2VR.js +2078 -0
  134. package/dist/chunk-CB4SB3VJ.js +377 -0
  135. package/dist/chunk-CFLJBUHT.js +1094 -0
  136. package/dist/chunk-CITYIYX5.js +89 -0
  137. package/dist/chunk-CLBCRQWU.js +210 -0
  138. package/dist/chunk-D5IPAFJO.js +82 -0
  139. package/dist/chunk-DA53BA7V.js +271 -0
  140. package/dist/chunk-DHBIRCFL.js +290 -0
  141. package/dist/chunk-DHP3ISXV.js +185 -0
  142. package/dist/chunk-DIAOAGZ6.js +38 -0
  143. package/dist/chunk-DJ2MBAAF.js +280 -0
  144. package/dist/chunk-DKH2VU3V.js +97 -0
  145. package/dist/chunk-DOTMUSXW.js +81 -0
  146. package/dist/chunk-DQM5DO5S.js +128 -0
  147. package/dist/chunk-EGFKI6W2.js +129 -0
  148. package/dist/chunk-EMA5YFAV.js +362 -0
  149. package/dist/chunk-EQQNJ4B3.js +128 -0
  150. package/dist/chunk-EVVR5QCW.js +290 -0
  151. package/dist/chunk-EXECVV2I.js +539 -0
  152. package/dist/chunk-F73FLMUA.js +668 -0
  153. package/dist/chunk-FECRU7AB.js +221 -0
  154. package/dist/chunk-FGMF5K2G.js +231 -0
  155. package/dist/chunk-FIWKVHEU.js +204 -0
  156. package/dist/chunk-FJ5WSXU5.js +97 -0
  157. package/dist/chunk-FLBMX6YY.js +75 -0
  158. package/dist/chunk-FLKGAL3F.js +333 -0
  159. package/dist/chunk-FRXQSRTO.js +1076 -0
  160. package/dist/chunk-FVHQL6ND.js +89 -0
  161. package/dist/chunk-G2FYKVRB.js +54 -0
  162. package/dist/chunk-G4RPL2RH.js +333 -0
  163. package/dist/chunk-GACE3UCH.js +271 -0
  164. package/dist/chunk-GAQ2OCPU.js +204 -0
  165. package/dist/chunk-GMM3ALHG.js +1350 -0
  166. package/dist/chunk-GSNDMSWZ.js +1119 -0
  167. package/dist/chunk-H4IGERTU.js +712 -0
  168. package/dist/chunk-HCIMNY45.js +2078 -0
  169. package/dist/chunk-HKB4GOGL.js +159 -0
  170. package/dist/chunk-HMMM6YFN.js +1068 -0
  171. package/dist/chunk-HVKPZCXA.js +271 -0
  172. package/dist/chunk-HZJDZ6NX.js +89 -0
  173. package/dist/chunk-I5BYXBAD.js +1350 -0
  174. package/dist/chunk-I6NQVJYF.js +97 -0
  175. package/dist/chunk-I6YJU2DE.js +128 -0
  176. package/dist/chunk-I7GRBEFS.js +690 -0
  177. package/dist/chunk-IFYEMOZG.js +85 -0
  178. package/dist/chunk-IHR5L3YV.js +244 -0
  179. package/dist/chunk-ILIAYMKP.js +362 -0
  180. package/dist/chunk-IPZ4JWBG.js +4318 -0
  181. package/dist/chunk-IQHXWJ2Q.js +402 -0
  182. package/dist/chunk-J2PDHWJV.js +448 -0
  183. package/dist/chunk-J373WY35.js +82 -0
  184. package/dist/chunk-JAZEO27N.js +1094 -0
  185. package/dist/chunk-JDSJ3NU7.js +836 -0
  186. package/dist/chunk-JMK2BOGQ.js +2113 -0
  187. package/dist/chunk-JS2KQWMD.js +377 -0
  188. package/dist/chunk-JU42WYSP.js +448 -0
  189. package/dist/chunk-K26DLCUP.js +299 -0
  190. package/dist/chunk-K4JTUUWC.js +1094 -0
  191. package/dist/chunk-KBUQ4X5Y.js +1076 -0
  192. package/dist/chunk-KFSW4EKI.js +50 -0
  193. package/dist/chunk-KT2XEGXZ.js +345 -0
  194. package/dist/chunk-KZ57MNYJ.js +562 -0
  195. package/dist/chunk-LFAX3MCC.js +668 -0
  196. package/dist/chunk-LJZZS4B5.js +81 -0
  197. package/dist/chunk-LNV6OOHY.js +150 -0
  198. package/dist/chunk-LYH3ZLYF.js +197 -0
  199. package/dist/chunk-M2QK3YD5.js +214 -0
  200. package/dist/chunk-M5N2TE3L.js +76 -0
  201. package/dist/chunk-MJ44I6HG.js +244 -0
  202. package/dist/chunk-MRRYZQUS.js +510 -0
  203. package/dist/chunk-MZV4HV2T.js +363 -0
  204. package/dist/chunk-N663LPHD.js +97 -0
  205. package/dist/chunk-NDG4GHYH.js +171 -0
  206. package/dist/chunk-NGK4DUTW.js +85 -0
  207. package/dist/chunk-O25CS3BH.js +836 -0
  208. package/dist/chunk-OADURIIN.js +258 -0
  209. package/dist/chunk-OCYNSIQR.js +204 -0
  210. package/dist/chunk-OGYVGJ7F.js +402 -0
  211. package/dist/chunk-OUKLRG7K.js +54 -0
  212. package/dist/chunk-OVOWVZXV.js +127 -0
  213. package/dist/chunk-P3AUAXMW.js +712 -0
  214. package/dist/chunk-P3YEMU7L.js +167 -0
  215. package/dist/chunk-P73YSDV7.js +284 -0
  216. package/dist/chunk-PAMQBA5K.js +157 -0
  217. package/dist/chunk-PDOGDOO6.js +81 -0
  218. package/dist/chunk-PDSMTX4H.js +448 -0
  219. package/dist/chunk-PN5VKI6G.js +448 -0
  220. package/dist/chunk-PW4S2SN7.js +14219 -0
  221. package/dist/chunk-PWJI2O5R.js +171 -0
  222. package/dist/chunk-PZLB7XHF.js +1119 -0
  223. package/dist/chunk-QLBF5REP.js +731 -0
  224. package/dist/chunk-QMU256CS.js +262 -0
  225. package/dist/chunk-QMVUSITJ.js +539 -0
  226. package/dist/chunk-QOWE36S5.js +1119 -0
  227. package/dist/chunk-QRLP3WDY.js +373 -0
  228. package/dist/chunk-QWFF3NWP.js +382 -0
  229. package/dist/chunk-RUF7DGXX.js +1350 -0
  230. package/dist/chunk-S5JWN7XT.js +382 -0
  231. package/dist/chunk-SEIYC4D4.js +197 -0
  232. package/dist/chunk-SFQXO7I6.js +1352 -0
  233. package/dist/chunk-SO4SCJZ2.js +362 -0
  234. package/dist/chunk-SOLGWOCM.js +836 -0
  235. package/dist/chunk-SVHHWATZ.js +377 -0
  236. package/dist/chunk-SVOMFAJM.js +50 -0
  237. package/dist/chunk-SYIROM36.js +197 -0
  238. package/dist/chunk-SYSDSINS.js +76 -0
  239. package/dist/chunk-T5XMAQAC.js +85 -0
  240. package/dist/chunk-TGHIBL4B.js +244 -0
  241. package/dist/chunk-TH22CNKK.js +70 -0
  242. package/dist/chunk-TJMNFB2W.js +58 -0
  243. package/dist/chunk-TWPNURFU.js +50 -0
  244. package/dist/chunk-U3PEZZ7D.js +712 -0
  245. package/dist/chunk-U76CXW3D.js +55 -0
  246. package/dist/chunk-UJUPYSVY.js +333 -0
  247. package/dist/chunk-UKVPGFD4.js +4318 -0
  248. package/dist/chunk-UVD2VXDC.js +127 -0
  249. package/dist/chunk-V6M2GKUD.js +89 -0
  250. package/dist/chunk-VD5NF6RG.js +348 -0
  251. package/dist/chunk-VFPBTJBN.js +58 -0
  252. package/dist/chunk-VIFBK7VL.js +510 -0
  253. package/dist/chunk-VNBHLJTU.js +76 -0
  254. package/dist/chunk-VO73AAFF.js +539 -0
  255. package/dist/chunk-VOZL5CBT.js +731 -0
  256. package/dist/chunk-WK2X6PE6.js +167 -0
  257. package/dist/chunk-WYU7FFTV.js +127 -0
  258. package/dist/chunk-WZLKGEUJ.js +510 -0
  259. package/dist/chunk-X46O77S4.js +630 -0
  260. package/dist/chunk-X6C2EL46.js +836 -0
  261. package/dist/chunk-XZ2KJ3OG.js +103 -0
  262. package/dist/chunk-Y2PCFIJE.js +345 -0
  263. package/dist/chunk-Y5OXHXCP.js +731 -0
  264. package/dist/chunk-YKRQXHXX.js +1352 -0
  265. package/dist/chunk-YMUH7TWT.js +382 -0
  266. package/dist/chunk-YO43YXZS.js +1076 -0
  267. package/dist/chunk-YWN6DKZJ.js +181 -0
  268. package/dist/chunk-Z42MXYWW.js +691 -0
  269. package/dist/chunk-Z75DAPMI.js +14219 -0
  270. package/dist/chunk-ZDCRV6PH.js +58 -0
  271. package/dist/chunk-ZDIKSXMV.js +58 -0
  272. package/dist/chunk-ZFU7SITA.js +284 -0
  273. package/dist/chunk-ZGBIUKNK.js +668 -0
  274. package/dist/chunk-ZJP3ZONM.js +3208 -0
  275. package/dist/chunk-ZLXATOXN.js +167 -0
  276. package/dist/chunk-ZM5WXR57.js +382 -0
  277. package/dist/chunk-ZQ4CBSJ3.js +171 -0
  278. package/dist/chunk-ZQXOZ4U2.js +14219 -0
  279. package/dist/chunk-ZTS2KRU5.js +333 -0
  280. package/dist/co-activation-PLLVFEDK.js +73 -0
  281. package/dist/co-occurrence-OIK6WLXN.js +94 -0
  282. package/dist/co-occurrence-QB4MQSY7.js +94 -0
  283. package/dist/code-context-index-CG4P2JZI.js +30 -0
  284. package/dist/conversation-entity-extractor-ZN3J4WGY.js +114 -0
  285. package/dist/core-memory-D3AWRAMA.js +110 -0
  286. package/dist/core-memory-JUTA3DWM.js +110 -0
  287. package/dist/core-memory-NW6GT543.js +110 -0
  288. package/dist/core-memory-TPY5XO3E.js +110 -0
  289. package/dist/crdt-sync-6GDTEJBT.js +33 -0
  290. package/dist/crm-webhook-2BYS65SZ.js +10 -0
  291. package/dist/crm-webhook-3AZQWNMQ.js +10 -0
  292. package/dist/crm-webhook-AUYAFOV3.js +10 -0
  293. package/dist/crm-webhook-VM72DSLW.js +10 -0
  294. package/dist/cto-delegation-gate-GQNNQON7.js +279 -0
  295. package/dist/cto-delegation-gate-LTI5OTGF.js +279 -0
  296. package/dist/cto-delegation-gate-Q2IIOK3T.js +279 -0
  297. package/dist/cto-delegation-gate-VVDKZGQ6.js +279 -0
  298. package/dist/daemon-orchestration-2ZD3N5AP.js +138 -0
  299. package/dist/daemon-orchestration-3J4K62I5.js +138 -0
  300. package/dist/daemon-orchestration-L47GDSJG.js +138 -0
  301. package/dist/daemon-orchestration-ZAQF437L.js +138 -0
  302. package/dist/db-backup-L64NT6GW.js +33 -0
  303. package/dist/doc-graph-extractor-7EXXBHN5.js +132 -0
  304. package/dist/doc-graph-extractor-M3G5IZAT.js +132 -0
  305. package/dist/dreaming-3CVAKE4O.js +33 -0
  306. package/dist/dreaming-DMKA2UH6.js +33 -0
  307. package/dist/dreaming-EP3WNLQ3.js +33 -0
  308. package/dist/dreaming-INJT3QVE.js +33 -0
  309. package/dist/entity-boost-DVQU26WN.js +375 -0
  310. package/dist/exe-drift-ZCUGNELY.js +69 -0
  311. package/dist/exe-export-5LKQALH2.js +75 -0
  312. package/dist/exe-export-7CME3MXT.js +75 -0
  313. package/dist/exe-export-GQMMQWON.js +75 -0
  314. package/dist/exe-export-Q5O2YADE.js +75 -0
  315. package/dist/exe-import-25AMCNVB.js +78 -0
  316. package/dist/exe-import-DMXDVIF2.js +78 -0
  317. package/dist/exe-import-EHJM6OZW.js +78 -0
  318. package/dist/exe-import-J6BPUDJ3.js +78 -0
  319. package/dist/exe-key-4SRZOC5W.js +580 -0
  320. package/dist/exe-key-5QK7VKBJ.js +580 -0
  321. package/dist/exe-key-GFLJRRHG.js +580 -0
  322. package/dist/exe-key-XWTYIY3B.js +580 -0
  323. package/dist/exe-snapshot-CR2AFYRP.js +337 -0
  324. package/dist/exe-snapshot-DWXKW6SC.js +337 -0
  325. package/dist/exe-snapshot-IYPOSAWY.js +337 -0
  326. package/dist/exe-snapshot-QIIQZXZM.js +337 -0
  327. package/dist/fast-db-init-BSUZIK6R.js +7 -0
  328. package/dist/fast-db-init-MAISJZ3L.js +7 -0
  329. package/dist/fast-db-init-WKK5SPFG.js +7 -0
  330. package/dist/fast-db-init-XZ6WHYNC.js +7 -0
  331. package/dist/gateway/index.js +8 -8
  332. package/dist/gateway-client-GRBOJQYC.js +11 -0
  333. package/dist/git-staleness-G7347RT3.js +111 -0
  334. package/dist/git-task-sweep-GGTGURJ6.js +41 -0
  335. package/dist/git-task-sweep-TQA4QTSM.js +41 -0
  336. package/dist/git-task-sweep-UCJ3KLDS.js +41 -0
  337. package/dist/git-task-sweep-XFX3OTBY.js +41 -0
  338. package/dist/global-procedures-3NYFIROX.js +21 -0
  339. package/dist/global-procedures-NOBNQDNA.js +21 -0
  340. package/dist/global-procedures-ZFIEDO7E.js +21 -0
  341. package/dist/gotrue-session-2IT7MDGW.js +171 -0
  342. package/dist/graph-auto-extract-HC576FNS.js +182 -0
  343. package/dist/graph-auto-extract-RMZT3EYN.js +182 -0
  344. package/dist/graph-rag-HFBYZF3M.js +31 -0
  345. package/dist/hooks/bug-report-worker.js +11 -11
  346. package/dist/hooks/codex-stop-task-finalizer.js +11 -11
  347. package/dist/hooks/commit-complete.js +11 -11
  348. package/dist/hooks/error-recall.js +7 -7
  349. package/dist/hooks/exe-heartbeat-hook.js +3 -3
  350. package/dist/hooks/ingest-worker.js +3 -3
  351. package/dist/hooks/ingest.js +6 -6
  352. package/dist/hooks/instructions-loaded.js +4 -4
  353. package/dist/hooks/manifest.json +20 -20
  354. package/dist/hooks/notification.js +4 -4
  355. package/dist/hooks/post-compact.js +10 -10
  356. package/dist/hooks/post-tool-combined.js +6 -6
  357. package/dist/hooks/pre-compact.js +14 -14
  358. package/dist/hooks/pre-tool-use.js +14 -14
  359. package/dist/hooks/prompt-submit.js +24 -24
  360. package/dist/hooks/session-end.js +19 -19
  361. package/dist/hooks/session-start.js +11 -11
  362. package/dist/hooks/stop.js +17 -17
  363. package/dist/hooks/subagent-stop.js +10 -10
  364. package/dist/hooks/summary-worker.js +18 -18
  365. package/dist/index.js +17 -17
  366. package/dist/installer-3QCLMBSY.js +297 -0
  367. package/dist/installer-6SAIKLV6.js +343 -0
  368. package/dist/installer-RN25LFX6.js +39 -0
  369. package/dist/lib/cloud-sync.js +4 -4
  370. package/dist/lib/consolidation.js +8 -8
  371. package/dist/lib/database.js +2 -2
  372. package/dist/lib/db-daemon-client.js +2 -2
  373. package/dist/lib/db.js +2 -2
  374. package/dist/lib/embedder.js +3 -3
  375. package/dist/lib/employee-templates.js +4 -4
  376. package/dist/lib/employees.js +2 -2
  377. package/dist/lib/exe-daemon-client.js +2 -2
  378. package/dist/lib/exe-daemon.js +41 -41
  379. package/dist/lib/hybrid-search.js +6 -6
  380. package/dist/lib/identity.js +2 -2
  381. package/dist/lib/keychain.js +1 -1
  382. package/dist/lib/messaging.js +9 -9
  383. package/dist/lib/reminders.js +3 -3
  384. package/dist/lib/schedules.js +6 -6
  385. package/dist/lib/session-registry.js +4 -4
  386. package/dist/lib/skill-learning.js +7 -7
  387. package/dist/lib/store.js +5 -5
  388. package/dist/lib/task-router.js +3 -3
  389. package/dist/lib/tasks.js +10 -10
  390. package/dist/lib/tmux-routing.js +8 -8
  391. package/dist/lib/token-spend.js +3 -3
  392. package/dist/lib/ws-client.js +1 -1
  393. package/dist/mcp/register-tools.js +63 -63
  394. package/dist/mcp/server.js +64 -64
  395. package/dist/mcp/tools/complete-reminder.js +4 -4
  396. package/dist/mcp/tools/create-reminder.js +4 -4
  397. package/dist/mcp/tools/create-task.js +12 -12
  398. package/dist/mcp/tools/deactivate-behavior.js +8 -8
  399. package/dist/mcp/tools/list-reminders.js +4 -4
  400. package/dist/mcp/tools/list-tasks.js +12 -12
  401. package/dist/mcp/tools/send-message.js +11 -11
  402. package/dist/mcp/tools/update-task.js +11 -11
  403. package/dist/mcp-http-config-YFZWGX4W.js +28 -0
  404. package/dist/memory-cards-AKXTAQZG.js +179 -0
  405. package/dist/memory-graph-extractor-O7KEZROX.js +21 -0
  406. package/dist/memory-graph-extractor-Q66O22GE.js +21 -0
  407. package/dist/memory-poisoning-defense-ADIGRTRJ.js +223 -0
  408. package/dist/memory-queue-client-4ZAOMEJR.js +16 -0
  409. package/dist/memory-reflection-RAWMCOLK.js +243 -0
  410. package/dist/message-queue-client-EDB46D6M.js +92 -0
  411. package/dist/notifications-JRKUMV4T.js +46 -0
  412. package/dist/notifications-MOTAHF7S.js +46 -0
  413. package/dist/notifications-SSRKYMKV.js +46 -0
  414. package/dist/notifications-XIMWAK7P.js +46 -0
  415. package/dist/orchestration-events-H6EZJEMV.js +26 -0
  416. package/dist/orchestrator-BCSQHCCZ.js +34 -0
  417. package/dist/orchestrator-J2EDJBWJ.js +34 -0
  418. package/dist/orchestrator-QODIF3U2.js +34 -0
  419. package/dist/orchestrator-W6AO4RZM.js +34 -0
  420. package/dist/pipeline-router-2IFHZ5KC.js +14 -0
  421. package/dist/pipeline-router-VCJCI5W7.js +14 -0
  422. package/dist/pipeline-router-VEP3NSZF.js +14 -0
  423. package/dist/pipeline-router-WV34UOJV.js +14 -0
  424. package/dist/plan-limits-IQK6XLCF.js +27 -0
  425. package/dist/project-boot-QWRBVBFG.js +299 -0
  426. package/dist/projection-worker-74KP2LHZ.js +1034 -0
  427. package/dist/projection-worker-GJ2M2BUF.js +1034 -0
  428. package/dist/projection-worker-HOLOWWX7.js +1034 -0
  429. package/dist/projection-worker-JEC7EM5Y.js +1034 -0
  430. package/dist/reranker-SIUVV2JD.js +19 -0
  431. package/dist/reranker-TEEWFPPU.js +19 -0
  432. package/dist/reranker-USWG7L7N.js +19 -0
  433. package/dist/reranker-VI3T6F2P.js +19 -0
  434. package/dist/retrieval-health-WIEQKVAV.js +7 -0
  435. package/dist/review-polling-DNBH4D7X.js +125 -0
  436. package/dist/review-polling-FAG2O7R4.js +125 -0
  437. package/dist/review-polling-RRD7IIEV.js +125 -0
  438. package/dist/review-polling-WVH6DK22.js +125 -0
  439. package/dist/runtime/index.js +11 -11
  440. package/dist/session-events-67N3ESQN.js +37 -0
  441. package/dist/session-events-NCPIQK5Q.js +37 -0
  442. package/dist/session-events-SF75L7NG.js +37 -0
  443. package/dist/session-events-VTP7KQQM.js +37 -0
  444. package/dist/session-kill-telemetry-5MTQD4JW.js +30 -0
  445. package/dist/session-scope-6QDWFFGE.js +87 -0
  446. package/dist/session-scope-FZ7CJ2PU.js +87 -0
  447. package/dist/session-scope-QGR72GYJ.js +87 -0
  448. package/dist/session-scope-YRJWFFQ5.js +87 -0
  449. package/dist/setup-wizard-2MGNOCDA.js +12 -0
  450. package/dist/setup-wizard-2ZHU6PBC.js +12 -0
  451. package/dist/setup-wizard-LGMBT5MA.js +12 -0
  452. package/dist/setup-wizard-MC6OYLSN.js +12 -0
  453. package/dist/skill-refinement-645HA6R7.js +158 -0
  454. package/dist/skill-refinement-6S5GJPBC.js +158 -0
  455. package/dist/skill-refinement-7M3OO2KL.js +158 -0
  456. package/dist/skill-refinement-HBS65LE7.js +158 -0
  457. package/dist/steward-gate-JSGYBZRR.js +14 -0
  458. package/dist/support-outbox-TIC66SRX.js +494 -0
  459. package/dist/support-outbox-YLXLMEKF.js +503 -0
  460. package/dist/task-enforcement-7CV4AMJY.js +439 -0
  461. package/dist/task-enforcement-BQ4L3T2J.js +439 -0
  462. package/dist/task-enforcement-L5EZK5MJ.js +439 -0
  463. package/dist/task-enforcement-S6KEUCL6.js +439 -0
  464. package/dist/task-scope-47VM3OGT.js +36 -0
  465. package/dist/task-scope-MONXB37O.js +36 -0
  466. package/dist/task-scope-RPYOVJOD.js +36 -0
  467. package/dist/task-scope-V6BS7L5C.js +36 -0
  468. package/dist/tasks-crud-AMWLBEJT.js +78 -0
  469. package/dist/tasks-crud-LD2WCC5Z.js +78 -0
  470. package/dist/tasks-crud-SMVAMAK7.js +78 -0
  471. package/dist/tasks-crud-UVSMJ7SQ.js +78 -0
  472. package/dist/tasks-notify-5KWFXJBA.js +39 -0
  473. package/dist/tasks-notify-6Q2CJIR5.js +39 -0
  474. package/dist/tasks-notify-FG2NXZP6.js +39 -0
  475. package/dist/tasks-notify-NBHN537I.js +39 -0
  476. package/dist/tasks-review-333PSSFU.js +48 -0
  477. package/dist/tasks-review-B6VOLVVZ.js +48 -0
  478. package/dist/tasks-review-MFD4VTZL.js +48 -0
  479. package/dist/tasks-review-MYPYFT6C.js +48 -0
  480. package/dist/telemetry-upload-45DH7FR7.js +740 -0
  481. package/dist/telemetry-upload-OSTVGOIS.js +740 -0
  482. package/dist/telemetry-upload-PNLXKL43.js +740 -0
  483. package/dist/telemetry-upload-QOKD4NUY.js +740 -0
  484. package/dist/token-budget-RJ2VKVYI.js +85 -0
  485. package/dist/tool-capability-index-ANXYTG5M.js +10 -0
  486. package/dist/tool-telemetry-W6I2BO5E.js +17 -0
  487. package/dist/tui/App.js +17 -17
  488. package/dist/tui-data-A6PDJW45.js +259 -0
  489. package/dist/tui-data-GOGDXQF5.js +259 -0
  490. package/dist/tui-data-VIY77WXK.js +259 -0
  491. package/dist/tui-data-YOZSLQMZ.js +259 -0
  492. package/dist/wiki-acl-Z5XZ6X4K.js +111 -0
  493. package/dist/worker-gate-34CD6WYY.js +21 -0
  494. package/dist/worker-gate-7T2DKS3A.js +21 -0
  495. package/dist/worker-gate-LN2IHRFB.js +21 -0
  496. package/dist/worker-gate-MQJTGE5N.js +21 -0
  497. package/dist/workflow-engine-KWAYDFUW.js +28 -0
  498. package/dist/workflow-engine-PXQ6N3C7.js +28 -0
  499. package/dist/workflow-engine-TECXAR65.js +28 -0
  500. package/dist/workflow-engine-UWEMT2OU.js +28 -0
  501. package/dist/worktree-5Q4VB2LR.js +27 -0
  502. package/dist/worktree-sweep-5KENYHYC.js +20 -0
  503. package/package.json +1 -1
  504. package/release-notes.json +87 -24
@@ -0,0 +1,33 @@
1
+ import {
2
+ completeReminder
3
+ } from "./chunk-YWN6DKZJ.js";
4
+
5
+ // src/mcp/tools/complete-reminder.ts
6
+ import { z } from "zod";
7
+ function registerCompleteReminder(server) {
8
+ server.registerTool(
9
+ "complete_reminder",
10
+ {
11
+ title: "Complete Reminder",
12
+ description: "Mark a reminder as done. Accepts UUID or text substring.",
13
+ inputSchema: {
14
+ reminder_id: z.string().describe("Reminder UUID or text substring to match")
15
+ }
16
+ },
17
+ async ({ reminder_id }) => {
18
+ const reminder = await completeReminder(reminder_id);
19
+ if (!reminder) {
20
+ return {
21
+ content: [{ type: "text", text: `No active reminder matching "${reminder_id}".` }]
22
+ };
23
+ }
24
+ return {
25
+ content: [{ type: "text", text: `Reminder completed: "${reminder.text}"` }]
26
+ };
27
+ }
28
+ );
29
+ }
30
+
31
+ export {
32
+ registerCompleteReminder
33
+ };
@@ -0,0 +1,240 @@
1
+ import {
2
+ getClient,
3
+ isCoordinatorName,
4
+ loadEmployeesSync
5
+ } from "./chunk-ZJP3ZONM.js";
6
+
7
+ // src/lib/steward-gate.ts
8
+ import crypto from "crypto";
9
+ var ROLE_PERMISSIONS = {
10
+ coordinator: /* @__PURE__ */ new Set([
11
+ "close_task",
12
+ "cancel_task",
13
+ "merge_entities",
14
+ "purge_document",
15
+ "deactivate_behavior",
16
+ "override"
17
+ ]),
18
+ manager: /* @__PURE__ */ new Set([
19
+ "close_task",
20
+ // their team only — enforced contextually
21
+ "deactivate_behavior"
22
+ // their team's behaviors
23
+ ]),
24
+ specialist: /* @__PURE__ */ new Set([
25
+ "deactivate_behavior_own",
26
+ // own behaviors only
27
+ "delete_own_memory"
28
+ ])
29
+ };
30
+ var UNIVERSAL_OPS = /* @__PURE__ */ new Set([
31
+ "update_own_task",
32
+ "store_memory",
33
+ "store_behavior"
34
+ ]);
35
+ var MANAGER_ROLES = /* @__PURE__ */ new Set(["CTO", "CMO"]);
36
+ var StewardGate = class {
37
+ /**
38
+ * Check whether an agent has authority for a destructive operation.
39
+ */
40
+ async checkAuthority(agent, operation, target) {
41
+ const role = await this.resolveRole(agent);
42
+ if (UNIVERSAL_OPS.has(operation)) {
43
+ const decision2 = {
44
+ allowed: true,
45
+ reason: `Operation "${operation}" is universally permitted.`,
46
+ confidence: 1,
47
+ requires_override: false
48
+ };
49
+ await this.logDecision(agent, operation, target, decision2);
50
+ return decision2;
51
+ }
52
+ const permissions = ROLE_PERMISSIONS[role];
53
+ let allowed = permissions.has(operation);
54
+ let reason;
55
+ if (!allowed && role === "specialist" && operation === "deactivate_behavior") {
56
+ const isOwn = await this.isOwnBehavior(agent, target);
57
+ if (isOwn) {
58
+ allowed = true;
59
+ reason = `Specialist "${agent}" can deactivate their own behavior.`;
60
+ } else {
61
+ reason = `Specialist "${agent}" cannot deactivate behaviors belonging to other agents.`;
62
+ }
63
+ } else if (allowed) {
64
+ reason = `Role "${role}" has authority for "${operation}".`;
65
+ } else {
66
+ reason = `Role "${role}" does not have authority for "${operation}". Requires coordinator override.`;
67
+ }
68
+ let requiresOverride = !allowed;
69
+ let confidence = allowed ? 0.95 : 0.9;
70
+ try {
71
+ const dreamingPath = "./dreaming.js";
72
+ const dreaming = await import(
73
+ /* @vite-ignore */
74
+ dreamingPath
75
+ );
76
+ if (typeof dreaming.calculateDrift === "function") {
77
+ const driftScore = await dreaming.calculateDrift(agent);
78
+ if (typeof driftScore === "number" && driftScore > 0.8) {
79
+ requiresOverride = true;
80
+ confidence = Math.max(0.5, confidence - 0.3);
81
+ reason += ` (\u26A0\uFE0F High drift score: ${driftScore.toFixed(2)} \u2014 requires override.)`;
82
+ }
83
+ }
84
+ } catch {
85
+ }
86
+ const decision = {
87
+ allowed: allowed && !requiresOverride,
88
+ reason,
89
+ confidence,
90
+ requires_override: requiresOverride
91
+ };
92
+ await this.logDecision(agent, operation, target, decision);
93
+ return decision;
94
+ }
95
+ /**
96
+ * Record an explicit coordinator override that bypasses the gate.
97
+ */
98
+ async override(agent, operation, target, reason) {
99
+ const role = await this.resolveRole(agent);
100
+ if (role !== "coordinator") {
101
+ const decision2 = {
102
+ allowed: false,
103
+ reason: `Only coordinators can issue overrides. "${agent}" is a ${role}.`,
104
+ confidence: 1,
105
+ requires_override: false
106
+ };
107
+ await this.logDecision(agent, `override:${operation}`, target, decision2);
108
+ return decision2;
109
+ }
110
+ const decision = {
111
+ allowed: true,
112
+ reason: `Coordinator override: ${reason}`,
113
+ confidence: 1,
114
+ requires_override: false
115
+ };
116
+ await this.logDecision(agent, `override:${operation}`, target, decision);
117
+ return decision;
118
+ }
119
+ /**
120
+ * Query the audit trail.
121
+ */
122
+ async getAuditLog(opts) {
123
+ await this.ensureAuditTable();
124
+ const client = getClient();
125
+ const conditions = [];
126
+ const args = [];
127
+ if (opts?.agent) {
128
+ conditions.push("agent = ?");
129
+ args.push(opts.agent);
130
+ }
131
+ if (opts?.operation) {
132
+ conditions.push("operation = ?");
133
+ args.push(opts.operation);
134
+ }
135
+ const where = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
136
+ const limit = opts?.limit ?? 50;
137
+ const result = await client.execute({
138
+ sql: `SELECT * FROM steward_audit ${where} ORDER BY created_at DESC LIMIT ?`,
139
+ args: [...args, limit]
140
+ });
141
+ return result.rows.map((row) => ({
142
+ id: String(row.id),
143
+ agent: String(row.agent),
144
+ operation: String(row.operation),
145
+ target: String(row.target),
146
+ decision: {
147
+ allowed: Number(row.allowed) === 1,
148
+ reason: String(row.reason),
149
+ confidence: Number(row.confidence),
150
+ requires_override: Number(row.requires_override) === 1
151
+ },
152
+ timestamp: String(row.created_at)
153
+ }));
154
+ }
155
+ // -------------------------------------------------------------------------
156
+ // Internal methods
157
+ // -------------------------------------------------------------------------
158
+ /**
159
+ * Resolve an agent name to a role category.
160
+ */
161
+ async resolveRole(agent) {
162
+ if (isCoordinatorName(agent)) return "coordinator";
163
+ try {
164
+ const employees = loadEmployeesSync();
165
+ const employee = employees.find((e) => e.name === agent);
166
+ if (employee && MANAGER_ROLES.has(employee.role)) return "manager";
167
+ } catch {
168
+ }
169
+ return "specialist";
170
+ }
171
+ /**
172
+ * Check if a behavior belongs to the given agent.
173
+ */
174
+ async isOwnBehavior(agent, behaviorId) {
175
+ try {
176
+ const client = getClient();
177
+ const result = await client.execute({
178
+ sql: "SELECT agent_id FROM behaviors WHERE id = ? LIMIT 1",
179
+ args: [behaviorId]
180
+ });
181
+ if (result.rows.length === 0) return false;
182
+ return String(result.rows[0].agent_id) === agent;
183
+ } catch {
184
+ return false;
185
+ }
186
+ }
187
+ /**
188
+ * Ensure the steward_audit table exists.
189
+ */
190
+ async ensureAuditTable() {
191
+ const client = getClient();
192
+ await client.execute({
193
+ sql: `CREATE TABLE IF NOT EXISTS steward_audit (
194
+ id TEXT PRIMARY KEY,
195
+ agent TEXT NOT NULL,
196
+ operation TEXT NOT NULL,
197
+ target TEXT NOT NULL,
198
+ allowed INTEGER NOT NULL,
199
+ reason TEXT NOT NULL,
200
+ confidence REAL NOT NULL,
201
+ requires_override INTEGER NOT NULL DEFAULT 0,
202
+ created_at TEXT NOT NULL
203
+ )`,
204
+ args: []
205
+ });
206
+ }
207
+ /**
208
+ * Log a gate decision to the audit trail.
209
+ */
210
+ async logDecision(agent, operation, target, decision) {
211
+ try {
212
+ await this.ensureAuditTable();
213
+ const client = getClient();
214
+ await client.execute({
215
+ sql: `INSERT INTO steward_audit (id, agent, operation, target, allowed, reason, confidence, requires_override, created_at)
216
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
217
+ args: [
218
+ crypto.randomUUID(),
219
+ agent,
220
+ operation,
221
+ target,
222
+ decision.allowed ? 1 : 0,
223
+ decision.reason,
224
+ decision.confidence,
225
+ decision.requires_override ? 1 : 0,
226
+ (/* @__PURE__ */ new Date()).toISOString()
227
+ ]
228
+ });
229
+ } catch {
230
+ process.stderr.write(
231
+ `[steward-gate] Audit log write failed for ${agent}:${operation}
232
+ `
233
+ );
234
+ }
235
+ }
236
+ };
237
+
238
+ export {
239
+ StewardGate
240
+ };
@@ -0,0 +1,345 @@
1
+ import {
2
+ employeeSessionName,
3
+ isEmployeeAlive,
4
+ resolveExeSession,
5
+ sendIntercom,
6
+ strictSessionScopeFilter
7
+ } from "./chunk-UKVPGFD4.js";
8
+ import {
9
+ parseMessage,
10
+ serializeMessage
11
+ } from "./chunk-4JERP7NT.js";
12
+ import {
13
+ recordOrchestrationEventBestEffort
14
+ } from "./chunk-X46O77S4.js";
15
+ import {
16
+ getClient
17
+ } from "./chunk-ZJP3ZONM.js";
18
+
19
+ // src/lib/messaging.ts
20
+ import crypto from "crypto";
21
+ function generateUlid() {
22
+ const timestamp = Date.now().toString(36).padStart(10, "0");
23
+ const random = crypto.randomBytes(10).toString("hex").slice(0, 16);
24
+ return (timestamp + random).toUpperCase();
25
+ }
26
+ function rowToMessage(row) {
27
+ return {
28
+ id: row.id,
29
+ fromAgent: row.from_agent,
30
+ fromDevice: row.from_device,
31
+ targetAgent: row.target_agent,
32
+ targetProject: row.target_project ?? null,
33
+ targetDevice: row.target_device,
34
+ sessionScope: row.session_scope ?? null,
35
+ content: row.content,
36
+ priority: row.priority ?? "normal",
37
+ status: row.status ?? "pending",
38
+ serverSeq: row.server_seq != null ? Number(row.server_seq) : null,
39
+ retryCount: Number(row.retry_count ?? 0),
40
+ createdAt: row.created_at,
41
+ deliveredAt: row.delivered_at ?? null,
42
+ processedAt: row.processed_at ?? null,
43
+ failedAt: row.failed_at ?? null,
44
+ failureReason: row.failure_reason ?? null
45
+ };
46
+ }
47
+ var MAX_RETRIES = 10;
48
+ async function countUnreadMessages(targetAgent, sessionScope) {
49
+ const client = getClient();
50
+ const scope = strictSessionScopeFilter(sessionScope);
51
+ const result = await client.execute({
52
+ sql: `SELECT COUNT(*) AS count FROM messages
53
+ WHERE target_agent = ? AND status IN ('pending', 'delivered')${scope.sql}`,
54
+ args: [targetAgent, ...scope.args]
55
+ });
56
+ return Number(result.rows[0]?.count ?? 0);
57
+ }
58
+ async function sendMessage(input) {
59
+ const client = getClient();
60
+ const id = generateUlid();
61
+ const now = (/* @__PURE__ */ new Date()).toISOString();
62
+ const targetDevice = input.targetDevice ?? "local";
63
+ const sessionScope = input.sessionScope === void 0 ? resolveExeSession() : input.sessionScope;
64
+ await client.execute({
65
+ sql: `INSERT INTO messages (id, from_agent, from_device, target_agent, target_project, target_device, session_scope, content, priority, status, founder_id, created_at)
66
+ VALUES (?, ?, 'local', ?, ?, ?, ?, ?, ?, 'pending', ?, ?)`,
67
+ args: [
68
+ id,
69
+ input.fromAgent,
70
+ input.targetAgent,
71
+ input.targetProject ?? null,
72
+ targetDevice,
73
+ sessionScope,
74
+ input.content,
75
+ input.priority ?? "normal",
76
+ input.founderId ?? null,
77
+ now
78
+ ]
79
+ });
80
+ recordOrchestrationEventBestEffort({
81
+ eventType: "message.sent",
82
+ source: "messaging.sendMessage",
83
+ agentId: input.fromAgent,
84
+ payload: { targetAgent: input.targetAgent, priority: input.priority ?? "normal", targetDevice },
85
+ sessionScope: sessionScope ?? null
86
+ });
87
+ try {
88
+ if (targetDevice !== "local") {
89
+ await deliverCrossMachineMessage(id, targetDevice);
90
+ } else {
91
+ await deliverLocalMessage(id);
92
+ }
93
+ } catch {
94
+ }
95
+ const sentScope = strictSessionScopeFilter(sessionScope);
96
+ const result = await client.execute({
97
+ sql: `SELECT * FROM messages WHERE id = ?${sentScope.sql}`,
98
+ args: [id, ...sentScope.args]
99
+ });
100
+ return rowToMessage(result.rows[0]);
101
+ }
102
+ var _wsClientSend = null;
103
+ function setWsClientSend(fn) {
104
+ _wsClientSend = fn;
105
+ }
106
+ async function deliverCrossMachineMessage(messageId, targetDevice) {
107
+ const client = getClient();
108
+ const result = await client.execute({
109
+ sql: "SELECT * FROM messages WHERE id = ?",
110
+ args: [messageId]
111
+ });
112
+ if (result.rows.length === 0) return false;
113
+ const msg = rowToMessage(result.rows[0]);
114
+ if (msg.status !== "pending") return false;
115
+ if (!_wsClientSend) {
116
+ return false;
117
+ }
118
+ const payload = JSON.stringify({
119
+ id: msg.id,
120
+ fromAgent: msg.fromAgent,
121
+ targetAgent: msg.targetAgent,
122
+ targetProject: msg.targetProject,
123
+ sessionScope: msg.sessionScope,
124
+ content: msg.content,
125
+ priority: msg.priority,
126
+ createdAt: msg.createdAt
127
+ });
128
+ const sent = _wsClientSend(targetDevice, payload);
129
+ if (sent) {
130
+ await client.execute({
131
+ sql: "UPDATE messages SET status = 'synced' WHERE id = ?",
132
+ args: [messageId]
133
+ });
134
+ return true;
135
+ }
136
+ return false;
137
+ }
138
+ async function deliverLocalMessage(messageId) {
139
+ const client = getClient();
140
+ const result = await client.execute({
141
+ sql: "SELECT * FROM messages WHERE id = ?",
142
+ args: [messageId]
143
+ });
144
+ if (result.rows.length === 0) return false;
145
+ const msg = rowToMessage(result.rows[0]);
146
+ if (msg.status !== "pending") return false;
147
+ const targetAgent = msg.targetAgent;
148
+ const now = (/* @__PURE__ */ new Date()).toISOString();
149
+ try {
150
+ const exeSession = resolveExeSession();
151
+ if (!exeSession) {
152
+ throw new Error("No coordinator session found");
153
+ }
154
+ process.stderr.write(`[messaging] ENTER deliverLocal: target=${targetAgent} exeSession=${exeSession}
155
+ `);
156
+ const { isCoordinatorName: isCoord } = await import("./lib/employees.js");
157
+ const isCOO = isCoord(targetAgent);
158
+ process.stderr.write(`[messaging] COO check: targetAgent="${targetAgent}" isCOO=${isCOO}
159
+ `);
160
+ const sessionName = isCOO ? exeSession : employeeSessionName(targetAgent, exeSession);
161
+ process.stderr.write(`[messaging] delivery attempt: target=${targetAgent} session=${sessionName} isCOO=${isCOO}
162
+ `);
163
+ if (!isCOO && !isEmployeeAlive(sessionName)) {
164
+ throw new Error("Session not running \u2014 message stays queued");
165
+ }
166
+ const unreadCount = await countUnreadMessages(targetAgent, msg.sessionScope);
167
+ if (unreadCount <= 0) {
168
+ return false;
169
+ }
170
+ const intercomResult = sendIntercom(sessionName, { force: true, reason: "message" });
171
+ process.stderr.write(`[messaging] intercom result for ${sessionName}: ${intercomResult}
172
+ `);
173
+ await client.execute({
174
+ sql: "UPDATE messages SET status = 'delivered', delivered_at = ? WHERE id = ?",
175
+ args: [now, messageId]
176
+ });
177
+ recordOrchestrationEventBestEffort({
178
+ eventType: "message.delivered",
179
+ source: "messaging.deliverLocalMessage",
180
+ agentId: msg.targetAgent,
181
+ payload: { fromAgent: msg.fromAgent, priority: msg.priority }
182
+ });
183
+ return true;
184
+ } catch (err) {
185
+ process.stderr.write(
186
+ `[messaging] delivery failed for message ${messageId}: ${err instanceof Error ? err.message : String(err)}
187
+ `
188
+ );
189
+ const newRetryCount = msg.retryCount + 1;
190
+ if (newRetryCount >= MAX_RETRIES) {
191
+ await markFailed(messageId, "session unavailable after 10 retries", msg.sessionScope);
192
+ } else {
193
+ await client.execute({
194
+ sql: "UPDATE messages SET retry_count = ? WHERE id = ?",
195
+ args: [newRetryCount, messageId]
196
+ });
197
+ }
198
+ return false;
199
+ }
200
+ }
201
+ async function getPendingMessages(targetAgent, sessionScope) {
202
+ const client = getClient();
203
+ const scope = strictSessionScopeFilter(sessionScope);
204
+ const result = await client.execute({
205
+ sql: `SELECT * FROM messages
206
+ WHERE target_agent = ? AND status IN ('pending', 'delivered')${scope.sql}
207
+ ORDER BY id`,
208
+ args: [targetAgent, ...scope.args]
209
+ });
210
+ return result.rows.map((row) => rowToMessage(row));
211
+ }
212
+ async function markRead(messageId, sessionScope) {
213
+ const client = getClient();
214
+ const scope = strictSessionScopeFilter(sessionScope);
215
+ await client.execute({
216
+ sql: `UPDATE messages SET status = 'read'
217
+ WHERE id = ? AND status IN ('pending', 'delivered')${scope.sql}`,
218
+ args: [messageId, ...scope.args]
219
+ });
220
+ recordOrchestrationEventBestEffort({
221
+ eventType: "message.read",
222
+ source: "messaging.markRead",
223
+ payload: { messageId }
224
+ });
225
+ }
226
+ async function markAcknowledged(messageId, sessionScope) {
227
+ const client = getClient();
228
+ const scope = strictSessionScopeFilter(sessionScope);
229
+ await client.execute({
230
+ sql: `UPDATE messages SET status = 'acknowledged', processed_at = ?
231
+ WHERE id = ? AND status = 'read'${scope.sql}`,
232
+ args: [(/* @__PURE__ */ new Date()).toISOString(), messageId, ...scope.args]
233
+ });
234
+ }
235
+ async function markProcessed(messageId, sessionScope) {
236
+ const client = getClient();
237
+ const scope = strictSessionScopeFilter(sessionScope);
238
+ await client.execute({
239
+ sql: `UPDATE messages SET status = 'processed', processed_at = ?
240
+ WHERE id = ?${scope.sql}`,
241
+ args: [(/* @__PURE__ */ new Date()).toISOString(), messageId, ...scope.args]
242
+ });
243
+ }
244
+ async function getMessageStatus(messageId, sessionScope) {
245
+ const client = getClient();
246
+ const scope = strictSessionScopeFilter(sessionScope);
247
+ const result = await client.execute({
248
+ sql: `SELECT status FROM messages WHERE id = ?${scope.sql}`,
249
+ args: [messageId, ...scope.args]
250
+ });
251
+ return result.rows[0]?.status ?? null;
252
+ }
253
+ async function getUnacknowledgedMessages(targetAgent, sessionScope) {
254
+ const client = getClient();
255
+ const scope = strictSessionScopeFilter(sessionScope);
256
+ const result = await client.execute({
257
+ sql: `SELECT * FROM messages
258
+ WHERE target_agent = ? AND status IN ('pending', 'delivered', 'read')${scope.sql}
259
+ ORDER BY id`,
260
+ args: [targetAgent, ...scope.args]
261
+ });
262
+ return result.rows.map((row) => rowToMessage(row));
263
+ }
264
+ async function getReadMessages(targetAgent, sessionScope) {
265
+ const client = getClient();
266
+ const scope = strictSessionScopeFilter(sessionScope);
267
+ const result = await client.execute({
268
+ sql: `SELECT * FROM messages
269
+ WHERE target_agent = ? AND status = 'read'${scope.sql}
270
+ ORDER BY id`,
271
+ args: [targetAgent, ...scope.args]
272
+ });
273
+ return result.rows.map((row) => rowToMessage(row));
274
+ }
275
+ async function markFailed(messageId, reason, sessionScope) {
276
+ const client = getClient();
277
+ const scope = strictSessionScopeFilter(sessionScope);
278
+ await client.execute({
279
+ sql: `UPDATE messages SET status = 'failed', failed_at = ?, failure_reason = ?
280
+ WHERE id = ?${scope.sql}`,
281
+ args: [(/* @__PURE__ */ new Date()).toISOString(), reason, messageId, ...scope.args]
282
+ });
283
+ }
284
+ async function getFailedMessages(sessionScope) {
285
+ const client = getClient();
286
+ const scope = strictSessionScopeFilter(sessionScope);
287
+ const result = await client.execute({
288
+ sql: `SELECT * FROM messages WHERE status = 'failed'${scope.sql} ORDER BY created_at DESC`,
289
+ args: [...scope.args]
290
+ });
291
+ return result.rows.map((row) => rowToMessage(row));
292
+ }
293
+ async function retryPendingMessages(sessionScope) {
294
+ const client = getClient();
295
+ const scope = strictSessionScopeFilter(sessionScope);
296
+ const result = await client.execute({
297
+ sql: `SELECT * FROM messages
298
+ WHERE status = 'pending' AND retry_count < ?${scope.sql}
299
+ ORDER BY id`,
300
+ args: [MAX_RETRIES, ...scope.args]
301
+ });
302
+ let delivered = 0;
303
+ for (const row of result.rows) {
304
+ const msg = rowToMessage(row);
305
+ try {
306
+ const success = await deliverLocalMessage(msg.id);
307
+ if (success) delivered++;
308
+ } catch {
309
+ }
310
+ }
311
+ return delivered;
312
+ }
313
+ async function sendTypedMessage(envelope, targetAgent, opts) {
314
+ return sendMessage({
315
+ fromAgent: envelope.from,
316
+ targetAgent,
317
+ targetProject: opts?.targetProject,
318
+ targetDevice: opts?.targetDevice,
319
+ content: serializeMessage(envelope),
320
+ priority: opts?.priority,
321
+ sessionScope: opts?.sessionScope
322
+ });
323
+ }
324
+ function parseIncomingMessage(content) {
325
+ return parseMessage(content);
326
+ }
327
+
328
+ export {
329
+ countUnreadMessages,
330
+ sendMessage,
331
+ setWsClientSend,
332
+ deliverLocalMessage,
333
+ getPendingMessages,
334
+ markRead,
335
+ markAcknowledged,
336
+ markProcessed,
337
+ getMessageStatus,
338
+ getUnacknowledgedMessages,
339
+ getReadMessages,
340
+ markFailed,
341
+ getFailedMessages,
342
+ retryPendingMessages,
343
+ sendTypedMessage,
344
+ parseIncomingMessage
345
+ };