@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,271 @@
1
+ import {
2
+ vectorToSqlLiteral
3
+ } from "./chunk-JDSJ3NU7.js";
4
+ import {
5
+ blobToVector
6
+ } from "./chunk-OTVEIJUQ.js";
7
+ import {
8
+ getClient
9
+ } from "./chunk-ZJP3ZONM.js";
10
+
11
+ // src/lib/behaviors.ts
12
+ import crypto from "crypto";
13
+ function formatReflexContent(trigger, action) {
14
+ return `\u26A1 REFLEX: When ${trigger} \u2192 ${action}. Decide whether to act.`;
15
+ }
16
+ function isReflexBehavior(behavior) {
17
+ return behavior.domain === "reflex";
18
+ }
19
+ async function storeReflexBehavior(opts) {
20
+ const content = formatReflexContent(opts.trigger, opts.action);
21
+ return storeBehavior({
22
+ agentId: opts.agentId,
23
+ content,
24
+ domain: "reflex",
25
+ projectName: opts.projectName,
26
+ priority: "p0",
27
+ // Always injected — impossible to miss
28
+ deviceScoped: opts.deviceScoped ?? false
29
+ });
30
+ }
31
+ async function storeBehavior(opts) {
32
+ try {
33
+ const { loadEmployeesSync, baseAgentName } = await import("./lib/employees.js");
34
+ const roster = loadEmployeesSync();
35
+ if (roster.length > 0) {
36
+ const base = baseAgentName(opts.agentId, roster);
37
+ if (!roster.some((e) => e.name === opts.agentId || e.name === base)) {
38
+ process.stderr.write(
39
+ `[behaviors] WARNING: Agent "${opts.agentId}" not found in roster. Storing behavior anyway \u2014 may be orphaned.
40
+ `
41
+ );
42
+ }
43
+ }
44
+ } catch {
45
+ }
46
+ const client = getClient();
47
+ const id = crypto.randomUUID();
48
+ const now = (/* @__PURE__ */ new Date()).toISOString();
49
+ const duplicate = await client.execute({
50
+ sql: `SELECT id FROM behaviors
51
+ WHERE agent_id = ?
52
+ AND COALESCE(domain, '') = COALESCE(?, '')
53
+ AND COALESCE(project_name, '') = COALESCE(?, '')
54
+ AND active = 1
55
+ AND lower(trim(content)) = lower(trim(?))
56
+ ORDER BY updated_at DESC
57
+ LIMIT 1`,
58
+ args: [opts.agentId, opts.domain ?? null, opts.projectName ?? null, opts.content]
59
+ });
60
+ const existingId = duplicate.rows[0]?.id;
61
+ if (existingId) return String(existingId);
62
+ let vector = null;
63
+ if (!process.env.VITEST) {
64
+ try {
65
+ const { embed } = await import("./lib/embedder.js");
66
+ const vec = await embed(opts.content);
67
+ vector = new Float32Array(vec);
68
+ } catch {
69
+ }
70
+ }
71
+ let createdByDevice = null;
72
+ try {
73
+ const { loadDeviceId } = await import("./lib/license.js");
74
+ createdByDevice = loadDeviceId() ?? null;
75
+ } catch {
76
+ }
77
+ const createdByAgent = process.env.AGENT_ID ?? null;
78
+ const sourceSessionId = process.env.CLAUDE_SESSION_ID ?? process.env.SESSION_ID ?? null;
79
+ let deviceId = null;
80
+ if (opts.deviceScoped) {
81
+ try {
82
+ const { loadDeviceId } = await import("./lib/license.js");
83
+ deviceId = loadDeviceId() ?? null;
84
+ } catch {
85
+ }
86
+ }
87
+ await client.execute({
88
+ sql: `INSERT INTO behaviors (id, agent_id, project_name, domain, priority, content, active, created_at, updated_at, vector, created_by_agent, created_by_device, source_session_id, device_id)
89
+ VALUES (?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?, ?, ?)`,
90
+ args: [id, opts.agentId, opts.projectName ?? null, opts.domain ?? null, opts.priority ?? "p1", opts.content, now, now, vector ? vectorToSqlLiteral(vector) : null, createdByAgent, createdByDevice, sourceSessionId, deviceId]
91
+ });
92
+ return id;
93
+ }
94
+ async function listBehaviors(agentId, projectName, limit = 30) {
95
+ const client = getClient();
96
+ let currentDeviceId = null;
97
+ try {
98
+ const { loadDeviceId } = await import("./lib/license.js");
99
+ currentDeviceId = loadDeviceId() ?? null;
100
+ } catch {
101
+ }
102
+ const result = await client.execute({
103
+ sql: `SELECT id, agent_id, project_name, domain, priority, content, active, created_at, updated_at, vector, created_by_agent, created_by_device, source_session_id, device_id
104
+ FROM behaviors
105
+ WHERE agent_id = ? AND active = 1
106
+ AND (project_name IS NULL OR project_name = ?)
107
+ AND (device_id IS NULL OR device_id = ?)
108
+ ORDER BY
109
+ CASE WHEN priority = 'p0' THEN 0
110
+ WHEN priority = 'p1' THEN 1
111
+ ELSE 2 END,
112
+ CASE
113
+ WHEN lower(coalesce(domain, '')) IN ('identity', 'title', 'role') THEN 0
114
+ WHEN lower(content) LIKE '%identity%' THEN 0
115
+ WHEN lower(content) LIKE '%title%' THEN 0
116
+ WHEN lower(content) LIKE '%who are you%' THEN 0
117
+ ELSE 1
118
+ END,
119
+ updated_at DESC
120
+ LIMIT ?`,
121
+ args: [agentId, projectName ?? "", currentDeviceId ?? "", limit]
122
+ });
123
+ return result.rows.map((r) => ({
124
+ id: String(r.id),
125
+ agent_id: String(r.agent_id),
126
+ project_name: r.project_name ? String(r.project_name) : null,
127
+ domain: r.domain ? String(r.domain) : null,
128
+ priority: String(r.priority || "p1"),
129
+ content: String(r.content),
130
+ active: Number(r.active),
131
+ created_at: String(r.created_at),
132
+ updated_at: String(r.updated_at),
133
+ vector: r.vector ? blobToVector(r.vector) : null,
134
+ created_by_agent: r.created_by_agent ? String(r.created_by_agent) : null,
135
+ created_by_device: r.created_by_device ? String(r.created_by_device) : null,
136
+ source_session_id: r.source_session_id ? String(r.source_session_id) : null,
137
+ device_id: r.device_id ? String(r.device_id) : null
138
+ }));
139
+ }
140
+ async function listBehaviorsByDomain(agentId, domain) {
141
+ const client = getClient();
142
+ const result = await client.execute({
143
+ sql: `SELECT id, agent_id, project_name, domain, priority, content, active, created_at, updated_at, vector
144
+ FROM behaviors
145
+ WHERE agent_id = ? AND domain = ? AND active = 1`,
146
+ args: [agentId, domain]
147
+ });
148
+ return result.rows.map((r) => ({
149
+ id: String(r.id),
150
+ agent_id: String(r.agent_id),
151
+ project_name: r.project_name ? String(r.project_name) : null,
152
+ domain: r.domain ? String(r.domain) : null,
153
+ priority: String(r.priority || "p1"),
154
+ content: String(r.content),
155
+ active: Number(r.active),
156
+ created_at: String(r.created_at),
157
+ updated_at: String(r.updated_at),
158
+ vector: r.vector ? blobToVector(r.vector) : null,
159
+ created_by_agent: r.created_by_agent ? String(r.created_by_agent) : null,
160
+ created_by_device: r.created_by_device ? String(r.created_by_device) : null,
161
+ source_session_id: r.source_session_id ? String(r.source_session_id) : null,
162
+ device_id: r.device_id ? String(r.device_id) : null
163
+ }));
164
+ }
165
+ async function listBehaviorsSince(agentId, sinceIso, projectName, limit = 15) {
166
+ const client = getClient();
167
+ let currentDeviceId = null;
168
+ try {
169
+ const { loadDeviceId } = await import("./lib/license.js");
170
+ currentDeviceId = loadDeviceId() ?? null;
171
+ } catch {
172
+ }
173
+ const result = await client.execute({
174
+ sql: `SELECT id, agent_id, project_name, domain, priority, content, active, created_at, updated_at, vector, created_by_agent, created_by_device, source_session_id, device_id
175
+ FROM behaviors
176
+ WHERE agent_id = ? AND active = 1
177
+ AND (project_name IS NULL OR project_name = ?)
178
+ AND (device_id IS NULL OR device_id = ?)
179
+ AND (created_at > ? OR updated_at > ?)
180
+ ORDER BY
181
+ CASE WHEN priority = 'p0' THEN 0
182
+ WHEN priority = 'p1' THEN 1
183
+ ELSE 2 END,
184
+ updated_at DESC
185
+ LIMIT ?`,
186
+ args: [agentId, projectName ?? "", currentDeviceId ?? "", sinceIso, sinceIso, limit]
187
+ });
188
+ return result.rows.map((r) => ({
189
+ id: String(r.id),
190
+ agent_id: String(r.agent_id),
191
+ project_name: r.project_name ? String(r.project_name) : null,
192
+ domain: r.domain ? String(r.domain) : null,
193
+ priority: String(r.priority || "p1"),
194
+ content: String(r.content),
195
+ active: Number(r.active),
196
+ created_at: String(r.created_at),
197
+ updated_at: String(r.updated_at),
198
+ vector: r.vector ? blobToVector(r.vector) : null,
199
+ created_by_agent: r.created_by_agent ? String(r.created_by_agent) : null,
200
+ created_by_device: r.created_by_device ? String(r.created_by_device) : null,
201
+ source_session_id: r.source_session_id ? String(r.source_session_id) : null,
202
+ device_id: r.device_id ? String(r.device_id) : null
203
+ }));
204
+ }
205
+ async function listSharedSkills(currentAgentId, projectName, limit = 30) {
206
+ const client = getClient();
207
+ let currentDeviceId = null;
208
+ try {
209
+ const { loadDeviceId } = await import("./lib/license.js");
210
+ currentDeviceId = loadDeviceId() ?? null;
211
+ } catch {
212
+ }
213
+ const result = await client.execute({
214
+ sql: `SELECT id, agent_id, project_name, domain, priority, content, active, created_at, updated_at, vector, created_by_agent, created_by_device, source_session_id, device_id
215
+ FROM behaviors
216
+ WHERE domain = 'skill' AND active = 1
217
+ AND (project_name IS NULL OR project_name = ?)
218
+ AND (device_id IS NULL OR device_id = ?)
219
+ ORDER BY
220
+ CASE WHEN agent_id = ? THEN 0 ELSE 1 END,
221
+ updated_at DESC
222
+ LIMIT ?`,
223
+ args: [projectName ?? "", currentDeviceId ?? "", currentAgentId, limit]
224
+ });
225
+ return result.rows.map((r) => ({
226
+ id: String(r.id),
227
+ agent_id: String(r.agent_id),
228
+ project_name: r.project_name ? String(r.project_name) : null,
229
+ domain: r.domain ? String(r.domain) : null,
230
+ priority: String(r.priority || "p1"),
231
+ content: String(r.content),
232
+ active: Number(r.active),
233
+ created_at: String(r.created_at),
234
+ updated_at: String(r.updated_at),
235
+ vector: r.vector ? blobToVector(r.vector) : null,
236
+ created_by_agent: r.created_by_agent ? String(r.created_by_agent) : null,
237
+ created_by_device: r.created_by_device ? String(r.created_by_device) : null,
238
+ source_session_id: r.source_session_id ? String(r.source_session_id) : null,
239
+ device_id: r.device_id ? String(r.device_id) : null,
240
+ shared: String(r.agent_id) !== currentAgentId
241
+ }));
242
+ }
243
+ async function deactivateBehavior(id) {
244
+ const client = getClient();
245
+ const result = await client.execute({
246
+ sql: `UPDATE behaviors SET active = 0, updated_at = ? WHERE id = ? AND active = 1`,
247
+ args: [(/* @__PURE__ */ new Date()).toISOString(), id]
248
+ });
249
+ return (result.rowsAffected ?? 0) > 0;
250
+ }
251
+ async function reactivateBehavior(id) {
252
+ const client = getClient();
253
+ const result = await client.execute({
254
+ sql: `UPDATE behaviors SET active = 1, updated_at = ? WHERE id = ? AND active = 0`,
255
+ args: [(/* @__PURE__ */ new Date()).toISOString(), id]
256
+ });
257
+ return (result.rowsAffected ?? 0) > 0;
258
+ }
259
+
260
+ export {
261
+ formatReflexContent,
262
+ isReflexBehavior,
263
+ storeReflexBehavior,
264
+ storeBehavior,
265
+ listBehaviors,
266
+ listBehaviorsByDomain,
267
+ listBehaviorsSince,
268
+ listSharedSkills,
269
+ deactivateBehavior,
270
+ reactivateBehavior
271
+ };
@@ -0,0 +1,54 @@
1
+ import {
2
+ processCRMEvent
3
+ } from "./chunk-YMUH7TWT.js";
4
+
5
+ // src/gateway/adapters/crm-webhook.ts
6
+ function parseTwentyWebhook(payload) {
7
+ if (!payload || typeof payload !== "object") return null;
8
+ const p = payload;
9
+ const eventName = p.eventName;
10
+ if (!eventName || typeof eventName !== "string") return null;
11
+ const dotIndex = eventName.indexOf(".");
12
+ if (dotIndex === -1) return null;
13
+ const objectType = eventName.slice(0, dotIndex);
14
+ const eventType = eventName.slice(dotIndex + 1);
15
+ if (!objectType || !eventType) return null;
16
+ const normalizedObjectType = objectType.charAt(0).toUpperCase() + objectType.slice(1);
17
+ const record = p.record ?? {};
18
+ if (typeof record !== "object") return null;
19
+ return {
20
+ eventType,
21
+ objectType: normalizedObjectType,
22
+ record
23
+ };
24
+ }
25
+ function createCRMWebhookHandler(options) {
26
+ return async (body) => {
27
+ const event = parseTwentyWebhook(body);
28
+ if (!event) {
29
+ console.warn(
30
+ "[crm-webhook] Malformed CRM webhook payload \u2014 skipping"
31
+ );
32
+ return;
33
+ }
34
+ console.log(
35
+ `[crm-webhook] ${event.objectType}.${event.eventType} received`
36
+ );
37
+ try {
38
+ const logs = await processCRMEvent(event, options?.executor, options?.triggers);
39
+ if (logs.length > 0 && options?.onFired) {
40
+ options.onFired(logs);
41
+ }
42
+ } catch (err) {
43
+ console.error(
44
+ "[crm-webhook] Error processing CRM event:",
45
+ err instanceof Error ? err.message : err
46
+ );
47
+ }
48
+ };
49
+ }
50
+
51
+ export {
52
+ parseTwentyWebhook,
53
+ createCRMWebhookHandler
54
+ };
@@ -0,0 +1,345 @@
1
+ import {
2
+ employeeSessionName,
3
+ isEmployeeAlive,
4
+ resolveExeSession,
5
+ sendIntercom,
6
+ strictSessionScopeFilter
7
+ } from "./chunk-IPZ4JWBG.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
+ };