@askexenow/exe-os 0.9.299 → 0.9.301

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 (499) hide show
  1. package/deploy/compose/.env.customer.example +1 -1
  2. package/deploy/compose/.env.example +1 -1
  3. package/deploy/compose/docker-compose.yml +31 -5
  4. package/deploy/compose/erp-nginx/nginx.conf +6 -3
  5. package/deploy/compose/generate-env.ts +1 -1
  6. package/deploy/compose/observability/otel-collector-config.yaml +10 -1
  7. package/deploy/compose/setup.sh +1 -1
  8. package/dist/active-agent-56J56WW5.js +27 -0
  9. package/dist/active-agent-UNJO6AJ2.js +27 -0
  10. package/dist/active-agent-VDWK7TES.js +28 -0
  11. package/dist/active-agent-Y5LSIMVC.js +28 -0
  12. package/dist/agentic-ontology-MZ4WHFDE.js +25 -0
  13. package/dist/agentic-ontology-QEV7GI3T.js +25 -0
  14. package/dist/assets/com.askexe.exed.plist +6 -5
  15. package/dist/backfill-metadata-IHKI5GXV.js +600 -0
  16. package/dist/backfill-metadata-RQZ4BN7G.js +600 -0
  17. package/dist/backfill-metadata-ZU3SZNBD.js +600 -0
  18. package/dist/behaviors-A3L5CWMK.js +46 -0
  19. package/dist/behaviors-G4KWGS24.js +46 -0
  20. package/dist/behaviors-WO67R6C4.js +46 -0
  21. package/dist/bin/agentic-ontology-backfill.js +5 -5
  22. package/dist/bin/agentic-reflection-backfill.js +6 -6
  23. package/dist/bin/agentic-semantic-label.js +5 -5
  24. package/dist/bin/backfill-conversations.js +6 -6
  25. package/dist/bin/backfill-responses.js +6 -6
  26. package/dist/bin/backfill-vectors.js +8 -8
  27. package/dist/bin/bulk-sync-postgres.js +13 -7
  28. package/dist/bin/cc-doctor.js +5 -5
  29. package/dist/bin/cleanup-stale-review-tasks.js +10 -10
  30. package/dist/bin/cli.js +16 -16
  31. package/dist/bin/deferred-daemon-restart.js +1 -1
  32. package/dist/bin/exe-agent-config.js +2 -2
  33. package/dist/bin/exe-agent.js +10 -10
  34. package/dist/bin/exe-assign.js +8 -8
  35. package/dist/bin/exe-boot.js +36 -21
  36. package/dist/bin/exe-call.js +4 -4
  37. package/dist/bin/exe-cloud.js +13 -7
  38. package/dist/bin/exe-dispatch.js +10 -10
  39. package/dist/bin/exe-doctor.js +2 -2
  40. package/dist/bin/exe-export-behaviors.js +7 -7
  41. package/dist/bin/exe-forget.js +6 -6
  42. package/dist/bin/exe-gateway.js +7 -7
  43. package/dist/bin/exe-healthcheck.js +5 -5
  44. package/dist/bin/exe-heartbeat.js +10 -10
  45. package/dist/bin/exe-kill.js +13 -13
  46. package/dist/bin/exe-launch-agent.js +29 -19
  47. package/dist/bin/exe-new-employee.js +6 -6
  48. package/dist/bin/exe-pending-messages.js +11 -11
  49. package/dist/bin/exe-pending-notifications.js +10 -10
  50. package/dist/bin/exe-pending-reviews.js +10 -10
  51. package/dist/bin/exe-rename.js +4 -4
  52. package/dist/bin/exe-review.js +12 -12
  53. package/dist/bin/exe-search.js +5 -5
  54. package/dist/bin/exe-session-cleanup.js +15 -15
  55. package/dist/bin/exe-settings.js +13 -7
  56. package/dist/bin/exe-start-codex.js +11 -11
  57. package/dist/bin/exe-start-opencode.js +8 -8
  58. package/dist/bin/exe-status.js +11 -11
  59. package/dist/bin/exe-team.js +3 -3
  60. package/dist/bin/exe-watchdog.js +3 -3
  61. package/dist/bin/git-sweep.js +11 -11
  62. package/dist/bin/graph-backfill.js +6 -6
  63. package/dist/bin/graph-export.js +5 -5
  64. package/dist/bin/import-history.js +9 -9
  65. package/dist/bin/install-launchd.js +7 -3
  66. package/dist/bin/install.js +19 -15
  67. package/dist/bin/intercom-check.js +4 -4
  68. package/dist/bin/mcp-sessions.js +2 -2
  69. package/dist/bin/orchestration-metrics.js +4 -4
  70. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  71. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  72. package/dist/bin/pre-publish.js +24 -1
  73. package/dist/bin/scan-tasks.js +10 -10
  74. package/dist/bin/setup.js +1 -1
  75. package/dist/bin/shard-migrate.js +4 -4
  76. package/dist/bin/stack-update.js +123 -3
  77. package/dist/bin/vps-health-gate.js +1 -1
  78. package/dist/capability-cards-VTGDTOZ4.js +89 -0
  79. package/dist/capability-cards-XAQSL26B.js +89 -0
  80. package/dist/capacity-monitor-6MQLFFQT.js +51 -0
  81. package/dist/capacity-monitor-BB3LKJLE.js +51 -0
  82. package/dist/capacity-monitor-G2MAJPRP.js +51 -0
  83. package/dist/catchup-brief-BQSL5M5S.js +175 -0
  84. package/dist/catchup-brief-COALBX6L.js +175 -0
  85. package/dist/catchup-brief-VBGEJQRS.js +175 -0
  86. package/dist/cc-binary-detect-B5JDCJ5J.js +19 -0
  87. package/dist/chunk-22LDUTY7.js +14597 -0
  88. package/dist/chunk-24JVDLQJ.js +345 -0
  89. package/dist/chunk-24M4AJPG.js +128 -0
  90. package/dist/chunk-2B7RCTPT.js +85 -0
  91. package/dist/chunk-2QBA6YE6.js +127 -0
  92. package/dist/chunk-2RGDEBZC.js +731 -0
  93. package/dist/chunk-2T3OYZMR.js +1158 -0
  94. package/dist/chunk-32DBQWR5.js +333 -0
  95. package/dist/chunk-3ABY3QDX.js +199 -0
  96. package/dist/chunk-3EOPMTG2.js +128 -0
  97. package/dist/chunk-3G3ECFB5.js +668 -0
  98. package/dist/chunk-3LHOFGHT.js +280 -0
  99. package/dist/chunk-3NS4V4JW.js +382 -0
  100. package/dist/chunk-3NYY2NZ3.js +836 -0
  101. package/dist/chunk-3RA62PNQ.js +58 -0
  102. package/dist/chunk-3ROUD5WA.js +97 -0
  103. package/dist/chunk-3RY2ARDN.js +129 -0
  104. package/dist/chunk-3XRS5AVV.js +567 -0
  105. package/dist/chunk-3Y5IRIRU.js +290 -0
  106. package/dist/chunk-3YK7X5FD.js +1186 -0
  107. package/dist/chunk-3ZWWUKBI.js +210 -0
  108. package/dist/chunk-463G3VAH.js +122 -0
  109. package/dist/chunk-4L6PVYFE.js +54 -0
  110. package/dist/chunk-4LC7BFI2.js +76 -0
  111. package/dist/chunk-4O67LBMK.js +377 -0
  112. package/dist/chunk-4OIU3N6U.js +167 -0
  113. package/dist/chunk-4Z3FWLOE.js +836 -0
  114. package/dist/chunk-5BAU4T5G.js +208 -0
  115. package/dist/chunk-5FP7YHCG.js +1158 -0
  116. package/dist/chunk-5SYYMNPE.js +30 -0
  117. package/dist/chunk-5TO5PH7O.js +304 -0
  118. package/dist/chunk-5U3JZP62.js +1352 -0
  119. package/dist/chunk-5VNFXIGF.js +85 -0
  120. package/dist/chunk-5XD2Y463.js +402 -0
  121. package/dist/chunk-63AENHJC.js +123 -0
  122. package/dist/chunk-673IFJYB.js +731 -0
  123. package/dist/chunk-6UVUJNLY.js +1186 -0
  124. package/dist/chunk-7AWH47AR.js +448 -0
  125. package/dist/chunk-7KPWYWYL.js +290 -0
  126. package/dist/chunk-7P4B6AEP.js +227 -0
  127. package/dist/chunk-7URNGDEY.js +2145 -0
  128. package/dist/chunk-7VHOALNC.js +244 -0
  129. package/dist/chunk-ADZQBZOX.js +122 -0
  130. package/dist/chunk-APSZAEDO.js +1186 -0
  131. package/dist/chunk-ASHF6VO4.js +2265 -0
  132. package/dist/chunk-ASJHCAVL.js +38 -0
  133. package/dist/chunk-BT2LEHIW.js +448 -0
  134. package/dist/chunk-BTS5QUWB.js +50 -0
  135. package/dist/chunk-BWJDJ3BS.js +604 -0
  136. package/dist/chunk-CME46VWP.js +150 -0
  137. package/dist/chunk-D3ICCKXY.js +54 -0
  138. package/dist/chunk-D3IOU3NO.js +377 -0
  139. package/dist/chunk-DFGXRKI2.js +221 -0
  140. package/dist/chunk-DICIFTCS.js +150 -0
  141. package/dist/chunk-DIFI5JDC.js +76 -0
  142. package/dist/chunk-DO65VHQZ.js +128 -0
  143. package/dist/chunk-DPOIJ5SM.js +284 -0
  144. package/dist/chunk-E2OMUBXQ.js +567 -0
  145. package/dist/chunk-ECMXIV6N.js +97 -0
  146. package/dist/chunk-EDMVA3PT.js +727 -0
  147. package/dist/chunk-F5OSXH4A.js +4388 -0
  148. package/dist/chunk-F5OWHPRG.js +236 -0
  149. package/dist/chunk-F7MZA3QP.js +199 -0
  150. package/dist/chunk-FAZNXNA5.js +33 -0
  151. package/dist/chunk-FCHG5RC4.js +197 -0
  152. package/dist/chunk-FFKSPZO2.js +157 -0
  153. package/dist/chunk-FNHYH5U6.js +331 -0
  154. package/dist/chunk-FRNXQSB4.js +134 -0
  155. package/dist/chunk-FTAASABV.js +362 -0
  156. package/dist/chunk-FWPDAQ6Q.js +1350 -0
  157. package/dist/chunk-FZB73QOI.js +210 -0
  158. package/dist/chunk-GBL5QSTM.js +197 -0
  159. package/dist/chunk-GJBR6QLD.js +630 -0
  160. package/dist/chunk-GRSYAHKI.js +535 -0
  161. package/dist/chunk-GRXWINOW.js +244 -0
  162. package/dist/chunk-GUPNVUG5.js +348 -0
  163. package/dist/chunk-GY66UPMX.js +167 -0
  164. package/dist/chunk-HCCG67BY.js +43 -0
  165. package/dist/chunk-HCSZZXZZ.js +197 -0
  166. package/dist/chunk-HNGNZU62.js +240 -0
  167. package/dist/chunk-HP2D5LIE.js +214 -0
  168. package/dist/chunk-HUABQHDC.js +1352 -0
  169. package/dist/chunk-HYKO2LNW.js +157 -0
  170. package/dist/chunk-IFL6DG2K.js +181 -0
  171. package/dist/chunk-IKPQRHVQ.js +304 -0
  172. package/dist/chunk-J5HFRVNW.js +362 -0
  173. package/dist/chunk-J6SD7LT2.js +171 -0
  174. package/dist/chunk-JCWA3X6A.js +402 -0
  175. package/dist/chunk-JHPK33IP.js +2162 -0
  176. package/dist/chunk-JURL2S27.js +128 -0
  177. package/dist/chunk-JWGDH5I2.js +127 -0
  178. package/dist/chunk-KBXQFXYM.js +567 -0
  179. package/dist/chunk-KGY5QIOJ.js +1350 -0
  180. package/dist/chunk-KLES22FB.js +1094 -0
  181. package/dist/chunk-KPUYYOFS.js +122 -0
  182. package/dist/chunk-KY43UELJ.js +331 -0
  183. package/dist/chunk-L32V4O5Z.js +58 -0
  184. package/dist/chunk-LAFARYU5.js +456 -0
  185. package/dist/chunk-LC7ETNTJ.js +1350 -0
  186. package/dist/chunk-LEJ5FKIK.js +55 -0
  187. package/dist/chunk-LNLLCAI4.js +377 -0
  188. package/dist/chunk-LQWZYMNU.js +448 -0
  189. package/dist/chunk-LSDXEHKL.js +381 -0
  190. package/dist/chunk-LY3SOO73.js +76 -0
  191. package/dist/chunk-M6CIHXXB.js +159 -0
  192. package/dist/chunk-MJOQ35DX.js +427 -0
  193. package/dist/chunk-MO5HER5Y.js +345 -0
  194. package/dist/chunk-MS2EOZJQ.js +290 -0
  195. package/dist/chunk-MUIMJGSQ.js +128 -0
  196. package/dist/chunk-MY4TGLT6.js +284 -0
  197. package/dist/chunk-N3ARGCVG.js +345 -0
  198. package/dist/chunk-N4XG2M2U.js +735 -0
  199. package/dist/chunk-N72JNFJ4.js +535 -0
  200. package/dist/chunk-NJMPNYBS.js +427 -0
  201. package/dist/chunk-NM3AUMFE.js +2145 -0
  202. package/dist/chunk-NPPQ3TR4.js +735 -0
  203. package/dist/chunk-NTWF4DAF.js +581 -0
  204. package/dist/chunk-NXL3VKXM.js +331 -0
  205. package/dist/chunk-OJACH2JF.js +128 -0
  206. package/dist/chunk-OMSLHEEF.js +456 -0
  207. package/dist/chunk-OO4IFABD.js +382 -0
  208. package/dist/chunk-OYIP3QVN.js +167 -0
  209. package/dist/chunk-P2IOW54H.js +668 -0
  210. package/dist/chunk-P5KXQ3RN.js +731 -0
  211. package/dist/chunk-P5UXP53T.js +81 -0
  212. package/dist/chunk-PH6VRRFR.js +395 -0
  213. package/dist/chunk-Q3GKOF7Z.js +85 -0
  214. package/dist/chunk-Q65NCNL4.js +1352 -0
  215. package/dist/chunk-QIGS2LRT.js +735 -0
  216. package/dist/chunk-QKBN3CY2.js +381 -0
  217. package/dist/chunk-QNNAVMQH.js +1094 -0
  218. package/dist/chunk-QODDW4YI.js +171 -0
  219. package/dist/chunk-QPAYPTSH.js +2162 -0
  220. package/dist/chunk-QRWDJ5RI.js +381 -0
  221. package/dist/chunk-RBFZCHVB.js +105 -0
  222. package/dist/chunk-RCEULTPF.js +185 -0
  223. package/dist/chunk-RCGHXBCX.js +630 -0
  224. package/dist/chunk-ROSCLRTH.js +204 -0
  225. package/dist/chunk-RYAOSGUW.js +227 -0
  226. package/dist/chunk-S2SPGHPY.js +38 -0
  227. package/dist/chunk-S73ZAJ2S.js +262 -0
  228. package/dist/chunk-SBPEWD7Z.js +171 -0
  229. package/dist/chunk-SDPUWZP5.js +333 -0
  230. package/dist/chunk-SJ4UF7YK.js +1094 -0
  231. package/dist/chunk-SOZ7D77I.js +204 -0
  232. package/dist/chunk-SVLSHDNL.js +54 -0
  233. package/dist/chunk-SVUYBT5N.js +262 -0
  234. package/dist/chunk-T7PTLVJV.js +284 -0
  235. package/dist/chunk-TDX2LK2M.js +240 -0
  236. package/dist/chunk-TGUSLO4B.js +50 -0
  237. package/dist/chunk-TPJH6PE6.js +1158 -0
  238. package/dist/chunk-TVW7EDOJ.js +382 -0
  239. package/dist/chunk-TYRUIE6P.js +58 -0
  240. package/dist/chunk-U5RKGLV6.js +50 -0
  241. package/dist/chunk-UFGTHBHP.js +127 -0
  242. package/dist/chunk-ULCYWCPI.js +1079 -0
  243. package/dist/chunk-UN5EPVBN.js +14597 -0
  244. package/dist/chunk-URLH7ZVR.js +70 -0
  245. package/dist/chunk-USYRTGR7.js +402 -0
  246. package/dist/chunk-V4ABCEHM.js +30 -0
  247. package/dist/chunk-V6LOEOXG.js +3372 -0
  248. package/dist/chunk-VAZOVAW4.js +2162 -0
  249. package/dist/chunk-VEUQVKKT.js +185 -0
  250. package/dist/chunk-VIDDJ5RF.js +214 -0
  251. package/dist/chunk-VKCNXOQ6.js +214 -0
  252. package/dist/chunk-VNB4ROYG.js +348 -0
  253. package/dist/chunk-VWUQFZFB.js +395 -0
  254. package/dist/chunk-W77GRCNA.js +85 -0
  255. package/dist/chunk-WB2B25UM.js +230 -0
  256. package/dist/chunk-WCUZX7F7.js +204 -0
  257. package/dist/chunk-WL5RMOZQ.js +362 -0
  258. package/dist/chunk-WPAXAOHD.js +1079 -0
  259. package/dist/chunk-WVMG4ZRH.js +14597 -0
  260. package/dist/chunk-WYVOTRRZ.js +129 -0
  261. package/dist/chunk-XABJRAUW.js +3346 -0
  262. package/dist/chunk-XQQ7D4I4.js +85 -0
  263. package/dist/chunk-YDFY6YCH.js +280 -0
  264. package/dist/chunk-YGUMRYCN.js +33 -0
  265. package/dist/chunk-YHJPTIPR.js +836 -0
  266. package/dist/chunk-YJSP5PPG.js +128 -0
  267. package/dist/chunk-YLKS7KKC.js +2145 -0
  268. package/dist/chunk-YOMETWOJ.js +4388 -0
  269. package/dist/chunk-YU3KEVCO.js +333 -0
  270. package/dist/chunk-Z4FVFSE3.js +81 -0
  271. package/dist/chunk-Z4TLSNUW.js +244 -0
  272. package/dist/chunk-ZDPU3JTF.js +221 -0
  273. package/dist/chunk-ZDY4LYAJ.js +81 -0
  274. package/dist/chunk-ZG33AACD.js +70 -0
  275. package/dist/chunk-ZKHPZ6KN.js +181 -0
  276. package/dist/chunk-ZO2TM5N5.js +97 -0
  277. package/dist/chunk-ZP6T5K6I.js +535 -0
  278. package/dist/chunk-ZR6ZJT32.js +123 -0
  279. package/dist/chunk-ZSUACDQC.js +4388 -0
  280. package/dist/co-activation-JGF5YIDU.js +74 -0
  281. package/dist/co-activation-XM25BLZM.js +74 -0
  282. package/dist/co-occurrence-CKEMDPWO.js +95 -0
  283. package/dist/co-occurrence-HLLC6GT2.js +95 -0
  284. package/dist/co-occurrence-W2LIAPHI.js +95 -0
  285. package/dist/code-context-index-FCL47WKE.js +30 -0
  286. package/dist/conversation-entity-extractor-WC2RU6RS.js +114 -0
  287. package/dist/core-memory-CRSR2PSL.js +110 -0
  288. package/dist/core-memory-VSKFRMEV.js +110 -0
  289. package/dist/core-memory-ZDA76EU3.js +110 -0
  290. package/dist/crdt-sync-6VH2YDVY.js +33 -0
  291. package/dist/crdt-sync-BJKZB6T6.js +33 -0
  292. package/dist/crm-webhook-E5PAFAUN.js +10 -0
  293. package/dist/crm-webhook-RXFPZJXP.js +10 -0
  294. package/dist/crm-webhook-Z26LEFKG.js +10 -0
  295. package/dist/cto-delegation-gate-45IBLPTK.js +280 -0
  296. package/dist/cto-delegation-gate-EMY6ZZ2F.js +280 -0
  297. package/dist/cto-delegation-gate-SF4EUB2Q.js +280 -0
  298. package/dist/daemon-orchestration-VB3BLYIT.js +143 -0
  299. package/dist/daemon-orchestration-W66UYGUD.js +143 -0
  300. package/dist/daemon-orchestration-Y5Y6YNE3.js +143 -0
  301. package/dist/db-backup-HFJ53IBU.js +43 -0
  302. package/dist/db-backup-NVUTS7L5.js +43 -0
  303. package/dist/doc-graph-extractor-ID45AQ2P.js +133 -0
  304. package/dist/doc-graph-extractor-MLYQYT4B.js +133 -0
  305. package/dist/doc-graph-extractor-SVFSXKL6.js +133 -0
  306. package/dist/dreaming-AZYRAGKA.js +34 -0
  307. package/dist/dreaming-N6B7KBIE.js +34 -0
  308. package/dist/dreaming-WG5CDUHX.js +34 -0
  309. package/dist/entity-boost-XAFCDDB6.js +375 -0
  310. package/dist/exe-drift-3SGA53CL.js +70 -0
  311. package/dist/exe-drift-CPUEAPIU.js +70 -0
  312. package/dist/exe-export-4RTGDV53.js +77 -0
  313. package/dist/exe-export-APUNLKWF.js +77 -0
  314. package/dist/exe-export-NM4SXB3P.js +77 -0
  315. package/dist/exe-import-6GLNCP62.js +80 -0
  316. package/dist/exe-import-AZMIF34Z.js +80 -0
  317. package/dist/exe-import-U4H4ES3Z.js +80 -0
  318. package/dist/exe-key-FIPXUTMF.js +673 -0
  319. package/dist/exe-key-LJV23AJI.js +673 -0
  320. package/dist/exe-key-WTLCMOYJ.js +673 -0
  321. package/dist/exe-snapshot-ILO3WSEC.js +338 -0
  322. package/dist/exe-snapshot-IODRQLBX.js +338 -0
  323. package/dist/exe-snapshot-ZOZBW7V6.js +338 -0
  324. package/dist/fast-db-init-7LYYUCSJ.js +7 -0
  325. package/dist/fast-db-init-ATRZGHOL.js +7 -0
  326. package/dist/fast-db-init-IU7GYFWB.js +7 -0
  327. package/dist/gateway/index.js +11 -11
  328. package/dist/git-staleness-GGCFPHQ5.js +112 -0
  329. package/dist/git-staleness-XNOKI4D3.js +112 -0
  330. package/dist/git-task-sweep-3MO4OVND.js +42 -0
  331. package/dist/git-task-sweep-M3SWXFKJ.js +42 -0
  332. package/dist/git-task-sweep-Y6KNWB67.js +42 -0
  333. package/dist/global-procedures-626WAU3I.js +22 -0
  334. package/dist/global-procedures-EBAPPWGZ.js +22 -0
  335. package/dist/graph-auto-extract-TKHQ4OR3.js +183 -0
  336. package/dist/graph-auto-extract-VGFEWFZX.js +183 -0
  337. package/dist/graph-auto-extract-VJOUQBPK.js +183 -0
  338. package/dist/graph-rag-KECA5TE4.js +35 -0
  339. package/dist/hooks/bug-report-worker.js +12 -12
  340. package/dist/hooks/codex-stop-task-finalizer.js +12 -12
  341. package/dist/hooks/commit-complete.js +12 -12
  342. package/dist/hooks/error-recall.js +6 -6
  343. package/dist/hooks/exe-heartbeat-hook.js +3 -3
  344. package/dist/hooks/ingest-worker.js +3 -3
  345. package/dist/hooks/ingest.js +6 -6
  346. package/dist/hooks/instructions-loaded.js +4 -4
  347. package/dist/hooks/manifest.json +20 -20
  348. package/dist/hooks/notification.js +4 -4
  349. package/dist/hooks/post-compact.js +12 -12
  350. package/dist/hooks/post-tool-combined.js +6 -6
  351. package/dist/hooks/pre-compact.js +16 -16
  352. package/dist/hooks/pre-tool-use.js +15 -15
  353. package/dist/hooks/prompt-submit.js +28 -26
  354. package/dist/hooks/session-end.js +20 -20
  355. package/dist/hooks/session-start.js +12 -12
  356. package/dist/hooks/stop.js +18 -18
  357. package/dist/hooks/subagent-stop.js +11 -11
  358. package/dist/hooks/summary-worker.js +18 -18
  359. package/dist/index.js +20 -20
  360. package/dist/installer-37KFNAWE.js +344 -0
  361. package/dist/installer-3FB5EMPB.js +40 -0
  362. package/dist/installer-BRQ42CPB.js +344 -0
  363. package/dist/installer-F55NR4E2.js +298 -0
  364. package/dist/installer-KOYBUS4J.js +40 -0
  365. package/dist/installer-PXZJG256.js +298 -0
  366. package/dist/lib/cloud-sync.js +13 -7
  367. package/dist/lib/consolidation.js +7 -7
  368. package/dist/lib/database.js +6 -4
  369. package/dist/lib/db-daemon-client.js +11 -202
  370. package/dist/lib/db.js +6 -4
  371. package/dist/lib/embedder.js +3 -3
  372. package/dist/lib/employee-templates.js +4 -4
  373. package/dist/lib/employees.js +2 -2
  374. package/dist/lib/exe-daemon-client.js +2 -2
  375. package/dist/lib/exe-daemon.js +53 -51
  376. package/dist/lib/hybrid-search.js +5 -5
  377. package/dist/lib/identity.js +2 -2
  378. package/dist/lib/messaging.js +10 -10
  379. package/dist/lib/reminders.js +3 -3
  380. package/dist/lib/schedules.js +5 -5
  381. package/dist/lib/session-registry.js +4 -4
  382. package/dist/lib/skill-learning.js +6 -6
  383. package/dist/lib/store.js +4 -4
  384. package/dist/lib/task-router.js +3 -3
  385. package/dist/lib/tasks.js +11 -11
  386. package/dist/lib/tmux-routing.js +9 -9
  387. package/dist/lib/token-spend.js +3 -3
  388. package/dist/mcp/register-tools.js +65 -63
  389. package/dist/mcp/server.js +66 -64
  390. package/dist/mcp/tools/complete-reminder.js +4 -4
  391. package/dist/mcp/tools/create-reminder.js +4 -4
  392. package/dist/mcp/tools/create-task.js +13 -13
  393. package/dist/mcp/tools/deactivate-behavior.js +7 -7
  394. package/dist/mcp/tools/list-reminders.js +4 -4
  395. package/dist/mcp/tools/list-tasks.js +13 -13
  396. package/dist/mcp/tools/send-message.js +12 -12
  397. package/dist/mcp/tools/update-task.js +12 -12
  398. package/dist/mcp-http-config-7KJZI7UD.js +31 -0
  399. package/dist/mcp-http-config-OF3MB7M5.js +31 -0
  400. package/dist/memory-cards-CPIZVXWI.js +180 -0
  401. package/dist/memory-cards-ZIT7ZKL5.js +180 -0
  402. package/dist/memory-graph-extractor-JIYWLBFF.js +22 -0
  403. package/dist/memory-graph-extractor-LY2VORZT.js +22 -0
  404. package/dist/memory-graph-extractor-MDPSLZDM.js +22 -0
  405. package/dist/memory-poisoning-defense-5UZT3WWA.js +224 -0
  406. package/dist/memory-poisoning-defense-SEM25TY5.js +224 -0
  407. package/dist/memory-queue-client-WKWRFERJ.js +16 -0
  408. package/dist/memory-reflection-J2W7CJ7C.js +244 -0
  409. package/dist/memory-reflection-TA2VQYPH.js +244 -0
  410. package/dist/message-queue-client-IFQQ2HI7.js +92 -0
  411. package/dist/notifications-CZBQ3H5T.js +47 -0
  412. package/dist/notifications-EIIL2EQV.js +47 -0
  413. package/dist/notifications-RLMSI4YE.js +47 -0
  414. package/dist/orchestration-events-TGQYA72K.js +27 -0
  415. package/dist/orchestration-events-VUYR6MXE.js +27 -0
  416. package/dist/orchestrator-JQD5G3CW.js +35 -0
  417. package/dist/orchestrator-MAMR4C37.js +35 -0
  418. package/dist/orchestrator-VE5WHEJH.js +35 -0
  419. package/dist/pipeline-router-3Q3YBYSM.js +15 -0
  420. package/dist/pipeline-router-DKXD6DJO.js +15 -0
  421. package/dist/pipeline-router-YNW63BY5.js +15 -0
  422. package/dist/plan-limits-YGXTYCW4.js +28 -0
  423. package/dist/plan-limits-ZM4MNZKY.js +28 -0
  424. package/dist/project-boot-E2TWYTAC.js +299 -0
  425. package/dist/project-boot-TDOZKKDR.js +299 -0
  426. package/dist/projection-worker-TMKUSVGD.js +1084 -0
  427. package/dist/projection-worker-WFPRM4AI.js +1084 -0
  428. package/dist/projection-worker-YKV3PFCV.js +1084 -0
  429. package/dist/prospective-memory-CNJDBNWF.js +232 -0
  430. package/dist/prospective-memory-OAFZUODU.js +232 -0
  431. package/dist/reranker-AFU75HEX.js +19 -0
  432. package/dist/reranker-RYNSJNDF.js +19 -0
  433. package/dist/reranker-YQIRNGDM.js +19 -0
  434. package/dist/retrieval-health-M5BVB7EV.js +12 -0
  435. package/dist/retrieval-health-RSQEIYIB.js +12 -0
  436. package/dist/review-polling-LGX7DUNT.js +126 -0
  437. package/dist/review-polling-MJBCYV4I.js +126 -0
  438. package/dist/review-polling-ZMB3OBPC.js +126 -0
  439. package/dist/runtime/index.js +16 -16
  440. package/dist/services/codex-reviewd/index.js +855 -0
  441. package/dist/session-events-5N47BRFK.js +38 -0
  442. package/dist/session-events-PT6SVS2P.js +38 -0
  443. package/dist/session-events-UTMCKDIN.js +38 -0
  444. package/dist/session-kill-telemetry-FRQA5MVD.js +31 -0
  445. package/dist/session-kill-telemetry-HKL2NQMR.js +31 -0
  446. package/dist/session-scope-2BD6QLNI.js +88 -0
  447. package/dist/session-scope-GQNCM6UQ.js +88 -0
  448. package/dist/session-scope-MMGM232A.js +88 -0
  449. package/dist/setup-wizard-SELXXVLD.js +12 -0
  450. package/dist/setup-wizard-W64I6SHC.js +12 -0
  451. package/dist/setup-wizard-X7YSRDNQ.js +12 -0
  452. package/dist/skill-refinement-CCP4ULZ3.js +159 -0
  453. package/dist/skill-refinement-FXCXTUS2.js +159 -0
  454. package/dist/skill-refinement-WCPDNHZ5.js +159 -0
  455. package/dist/stack-update-5VSGG36W.js +84 -0
  456. package/dist/steward-gate-JDR3SLH3.js +15 -0
  457. package/dist/steward-gate-PIXNK4BK.js +15 -0
  458. package/dist/task-enforcement-LEBWCYZT.js +506 -0
  459. package/dist/task-enforcement-VOSQRAQB.js +506 -0
  460. package/dist/task-enforcement-WCEA4FZI.js +506 -0
  461. package/dist/task-scope-CQZ33PRU.js +37 -0
  462. package/dist/task-scope-JTTEZKDU.js +37 -0
  463. package/dist/task-scope-L5GDL2AV.js +37 -0
  464. package/dist/tasks-crud-DC4GCXQQ.js +79 -0
  465. package/dist/tasks-crud-S36AFYYM.js +79 -0
  466. package/dist/tasks-crud-T32IRPXF.js +79 -0
  467. package/dist/tasks-notify-OBFVHJDP.js +40 -0
  468. package/dist/tasks-notify-OUQWUM6W.js +40 -0
  469. package/dist/tasks-notify-W2W2BJRB.js +40 -0
  470. package/dist/tasks-review-34WV7BX2.js +49 -0
  471. package/dist/tasks-review-N33MTHWJ.js +49 -0
  472. package/dist/tasks-review-OSBG2YN2.js +49 -0
  473. package/dist/telemetry-upload-3CSVO3J7.js +741 -0
  474. package/dist/telemetry-upload-EYHEWTKG.js +741 -0
  475. package/dist/telemetry-upload-XLBW4DRP.js +741 -0
  476. package/dist/token-budget-I6FMMDFX.js +86 -0
  477. package/dist/token-budget-ZG2MQ5GD.js +86 -0
  478. package/dist/tool-capability-index-IWQBQKM7.js +10 -0
  479. package/dist/tool-telemetry-2E3Z7CRV.js +17 -0
  480. package/dist/tool-telemetry-ODL4F2CW.js +17 -0
  481. package/dist/tui/App.js +17 -17
  482. package/dist/tui-data-VWT4Q5UT.js +260 -0
  483. package/dist/tui-data-XFBFBSBE.js +260 -0
  484. package/dist/tui-data-Z5UF7KEI.js +260 -0
  485. package/dist/wiki-acl-EUOPNUIQ.js +111 -0
  486. package/dist/wiki-acl-SZFHCEC4.js +111 -0
  487. package/dist/worker-gate-OOO6BWZ6.js +21 -0
  488. package/dist/worker-gate-OQMKAMP7.js +21 -0
  489. package/dist/worker-gate-ZPP3SZK6.js +21 -0
  490. package/dist/workflow-engine-P7WYJP2B.js +28 -0
  491. package/dist/workflow-engine-QY3IFFR2.js +28 -0
  492. package/dist/workflow-engine-UYNB5RTB.js +28 -0
  493. package/dist/worktree-CNOQZBNT.js +28 -0
  494. package/dist/worktree-H5C4LMQR.js +28 -0
  495. package/dist/worktree-sweep-KFWF3XZD.js +21 -0
  496. package/dist/worktree-sweep-SE7ITXC4.js +21 -0
  497. package/package.json +1 -1
  498. package/release-notes.json +117 -191
  499. package/src/commands/exe.md +18 -1
@@ -0,0 +1,345 @@
1
+ import {
2
+ employeeSessionName,
3
+ isEmployeeAlive,
4
+ resolveExeSession,
5
+ sendIntercom,
6
+ strictSessionScopeFilter
7
+ } from "./chunk-ZSUACDQC.js";
8
+ import {
9
+ parseMessage,
10
+ serializeMessage
11
+ } from "./chunk-4JERP7NT.js";
12
+ import {
13
+ recordOrchestrationEventBestEffort
14
+ } from "./chunk-GJBR6QLD.js";
15
+ import {
16
+ getClient
17
+ } from "./chunk-V6LOEOXG.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
+ };
@@ -0,0 +1,128 @@
1
+ // src/lib/tool-telemetry.ts
2
+ var _toolCalls = /* @__PURE__ */ new Map();
3
+ var _sessionStartedAt = Date.now();
4
+ var _flushTimer = null;
5
+ function recordCall(toolName, action, isError) {
6
+ let record = _toolCalls.get(toolName);
7
+ if (!record) {
8
+ record = { count: 0, actions: /* @__PURE__ */ new Map(), lastCalledAt: 0, errors: 0 };
9
+ _toolCalls.set(toolName, record);
10
+ }
11
+ record.count++;
12
+ record.lastCalledAt = Date.now();
13
+ if (isError) record.errors++;
14
+ if (action) {
15
+ record.actions.set(action, (record.actions.get(action) ?? 0) + 1);
16
+ }
17
+ }
18
+ function wrapServerWithTelemetry(server) {
19
+ const originalRegisterTool = server.registerTool.bind(server);
20
+ server.registerTool = (name, config, handler) => {
21
+ const wrappedHandler = async (input, extra) => {
22
+ const action = input.action;
23
+ try {
24
+ const result = await handler(input, extra);
25
+ const isError = result?.isError === true;
26
+ recordCall(name, action, isError);
27
+ return result;
28
+ } catch (err) {
29
+ recordCall(name, action, true);
30
+ throw err;
31
+ }
32
+ };
33
+ return originalRegisterTool(name, config, wrappedHandler);
34
+ };
35
+ return server;
36
+ }
37
+ function getToolUsageStats() {
38
+ let totalCalls = 0;
39
+ let totalErrors = 0;
40
+ const tools = {};
41
+ for (const [name, record] of _toolCalls) {
42
+ totalCalls += record.count;
43
+ totalErrors += record.errors;
44
+ const entry = {
45
+ calls: record.count,
46
+ errors: record.errors,
47
+ lastCalledAt: new Date(record.lastCalledAt).toISOString()
48
+ };
49
+ if (record.actions.size > 0) {
50
+ entry.actions = Object.fromEntries(record.actions);
51
+ }
52
+ tools[name] = entry;
53
+ }
54
+ return {
55
+ sessionStartedAt: new Date(_sessionStartedAt).toISOString(),
56
+ uptimeMs: Date.now() - _sessionStartedAt,
57
+ totalCalls,
58
+ totalErrors,
59
+ tools
60
+ };
61
+ }
62
+ function resetToolUsageStats() {
63
+ _toolCalls.clear();
64
+ _sessionStartedAt = Date.now();
65
+ }
66
+ var FLUSH_INTERVAL_MS = 5 * 60 * 1e3;
67
+ var _lastFlushedAt = 0;
68
+ async function flushToMemory() {
69
+ const stats = getToolUsageStats();
70
+ if (stats.totalCalls === 0) return;
71
+ if (stats.totalCalls === _lastFlushedAt) return;
72
+ try {
73
+ const { getClient, isInitialized } = await import("./lib/database.js");
74
+ if (!isInitialized()) return;
75
+ const client = getClient();
76
+ const toolSummary = Object.entries(stats.tools).sort((a, b) => b[1].calls - a[1].calls).map(([name, t]) => {
77
+ const actionStr = t.actions ? ` (${Object.entries(t.actions).sort((a, b) => b[1] - a[1]).map(([a, c]) => `${a}:${c}`).join(", ")})` : "";
78
+ return `${name}: ${t.calls} calls${t.errors > 0 ? ` (${t.errors} errors)` : ""}${actionStr}`;
79
+ }).join("\n");
80
+ const raw_text = `Tool usage since ${stats.sessionStartedAt} (${Math.round(stats.uptimeMs / 6e4)}min):
81
+ Total: ${stats.totalCalls} calls, ${stats.totalErrors} errors
82
+
83
+ ${toolSummary}`;
84
+ await client.execute({
85
+ sql: `INSERT INTO memories (id, agent_id, raw_text, memory_type, project_name, importance, created_at, updated_at, session_scope)
86
+ VALUES (?, 'system', ?, 'telemetry', 'exe-os', 2, datetime('now'), datetime('now'), NULL)`,
87
+ args: [
88
+ `telemetry-tools-${Date.now()}`,
89
+ raw_text
90
+ ]
91
+ });
92
+ _lastFlushedAt = stats.totalCalls;
93
+ } catch {
94
+ }
95
+ }
96
+ function startToolTelemetryFlush() {
97
+ if (_flushTimer) return;
98
+ _sessionStartedAt = Date.now();
99
+ _flushTimer = setInterval(() => void flushToMemory(), FLUSH_INTERVAL_MS);
100
+ _flushTimer.unref();
101
+ }
102
+ async function stopToolTelemetryFlush() {
103
+ if (_flushTimer) {
104
+ clearInterval(_flushTimer);
105
+ _flushTimer = null;
106
+ }
107
+ await flushToMemory();
108
+ }
109
+ function getToolUsageSummary() {
110
+ const summary = {};
111
+ for (const [tool, record] of _toolCalls) {
112
+ summary[tool] = {
113
+ count: record.count,
114
+ errors: record.errors,
115
+ actions: Object.fromEntries(record.actions)
116
+ };
117
+ }
118
+ return summary;
119
+ }
120
+
121
+ export {
122
+ wrapServerWithTelemetry,
123
+ getToolUsageStats,
124
+ resetToolUsageStats,
125
+ startToolTelemetryFlush,
126
+ stopToolTelemetryFlush,
127
+ getToolUsageSummary
128
+ };
@@ -0,0 +1,85 @@
1
+ import {
2
+ PLATFORM_PROCEDURES,
3
+ PLATFORM_PROCEDURE_TITLES
4
+ } from "./chunk-VUH67PT4.js";
5
+ import {
6
+ getClient
7
+ } from "./chunk-XABJRAUW.js";
8
+
9
+ // src/lib/global-procedures.ts
10
+ import { randomUUID } from "crypto";
11
+ var _customerCache = "";
12
+ var _cacheLoaded = false;
13
+ var _platformCache = PLATFORM_PROCEDURES.map((p) => `### ${p.title}
14
+ ${p.content}`).join("\n\n");
15
+ async function loadGlobalProcedures() {
16
+ const client = getClient();
17
+ const result = await client.execute({
18
+ sql: "SELECT * FROM company_procedures WHERE active = 1 ORDER BY priority ASC, created_at ASC",
19
+ args: []
20
+ });
21
+ const allRows = result.rows;
22
+ const customerOnly = allRows.filter((p) => {
23
+ if (PLATFORM_PROCEDURE_TITLES.has(p.title)) return false;
24
+ const title = (p.title ?? "").trim();
25
+ const content = (p.content ?? "").trim();
26
+ if (!title || title === "(untitled)") return false;
27
+ if (!content) return false;
28
+ return true;
29
+ });
30
+ const values = customerOnly.filter((p) => p.kind === "value");
31
+ const procedures = customerOnly.filter((p) => p.kind !== "value");
32
+ const parts = [];
33
+ if (values.length > 0) {
34
+ parts.push("### Company Values\n" + values.map((v) => `- **${v.title}:** ${v.content}`).join("\n"));
35
+ }
36
+ if (procedures.length > 0) {
37
+ parts.push(procedures.map((p) => `### ${p.title}
38
+ ${p.content}`).join("\n\n"));
39
+ }
40
+ _customerCache = parts.join("\n\n");
41
+ _cacheLoaded = true;
42
+ return customerOnly;
43
+ }
44
+ function getGlobalProceduresBlock() {
45
+ const sections = [];
46
+ if (_platformCache) sections.push(_platformCache);
47
+ if (_cacheLoaded && _customerCache) sections.push(_customerCache);
48
+ if (sections.length === 0) return "";
49
+ return `## Organization-Wide Procedures (MANDATORY \u2014 supersedes all other rules)
50
+
51
+ ${sections.join("\n\n")}
52
+ `;
53
+ }
54
+ async function storeGlobalProcedure(input) {
55
+ if (!input.title?.trim() || !input.content?.trim()) {
56
+ throw new Error("storeGlobalProcedure requires a non-empty title and content");
57
+ }
58
+ const id = randomUUID();
59
+ const now = (/* @__PURE__ */ new Date()).toISOString();
60
+ const client = getClient();
61
+ await client.execute({
62
+ sql: `INSERT INTO company_procedures (id, title, content, priority, domain, kind, active, created_at, updated_at)
63
+ VALUES (?, ?, ?, ?, ?, ?, 1, ?, ?)`,
64
+ args: [id, input.title, input.content, input.priority ?? "p0", input.domain ?? null, input.kind ?? "procedure", now, now]
65
+ });
66
+ await loadGlobalProcedures();
67
+ return id;
68
+ }
69
+ async function deactivateGlobalProcedure(id) {
70
+ const now = (/* @__PURE__ */ new Date()).toISOString();
71
+ const client = getClient();
72
+ const result = await client.execute({
73
+ sql: "UPDATE company_procedures SET active = 0, updated_at = ? WHERE id = ?",
74
+ args: [now, id]
75
+ });
76
+ await loadGlobalProcedures();
77
+ return result.rowsAffected > 0;
78
+ }
79
+
80
+ export {
81
+ loadGlobalProcedures,
82
+ getGlobalProceduresBlock,
83
+ storeGlobalProcedure,
84
+ deactivateGlobalProcedure
85
+ };
@@ -0,0 +1,127 @@
1
+ import {
2
+ updateTask
3
+ } from "./chunk-LQWZYMNU.js";
4
+ import {
5
+ TASK_ALREADY_CLAIMED_PREFIX
6
+ } from "./chunk-F5OSXH4A.js";
7
+
8
+ // src/mcp/tools/update-task.ts
9
+ import { z } from "zod";
10
+ function registerUpdateTask(server) {
11
+ server.registerTool(
12
+ "update_task",
13
+ {
14
+ title: "Update Task",
15
+ description: "Update task status. Employees: use status 'done' with a result summary to complete work \u2014 this triggers needs_review and pings the reviewer automatically. Accepts UUID, slug (filename), or title substring.",
16
+ inputSchema: {
17
+ task_id: z.string().describe("Task identifier \u2014 UUID, slug (e.g. 'fix-auth-bug'), or title substring"),
18
+ status: z.enum(["open", "in_progress", "done", "needs_review", "blocked", "cancelled", "closed"]).describe("New status. 'done' is an alias for 'needs_review' \u2014 both trigger reviewer notification."),
19
+ result: z.string().optional().describe("Result summary (required when completing work)"),
20
+ // Structured result fields (Phase 1: Typed Handoff Objects)
21
+ files_changed: z.array(z.string()).optional().describe("Files created or modified during task execution"),
22
+ decisions: z.array(z.string()).optional().describe("Key decisions made during execution"),
23
+ commits: z.array(z.string()).optional().describe("Commit hashes produced"),
24
+ tests_status: z.enum(["pass", "fail", "skip", "none"]).optional().describe("Test execution status"),
25
+ build_status: z.enum(["pass", "fail", "skip"]).optional().describe("Build status"),
26
+ pr_number: z.number().optional().describe("PR number if created"),
27
+ open_questions: z.array(z.string()).optional().describe("Open questions for reviewer"),
28
+ assertions: z.string().optional().describe(
29
+ 'JSON array of assertions with confidence scores. Use when starting work (in_progress). Format: [{"type":"diagnosis|scope|estimate|approach|build|judgment","claim":"...","confidence":0.8,"basis":"..."}]'
30
+ ),
31
+ assertions_resolved: z.string().optional().describe(
32
+ 'JSON array of resolved assertions. Use when completing work (done/needs_review). Format: [{"claim":"...","outcome":"correct|incorrect|partial","confidence_was":0.8,"actual":"...","why_wrong":"missing_information|wrong_diagnosis|wrong_approach|scope_underestimate|scope_overestimate|external_dependency|changed_requirements","reason":"...","lesson":"..."}]'
33
+ ),
34
+ estimated_minutes: z.number().optional().describe("Time estimate in minutes. Provide when starting work (in_progress). The system auto-computes actual time on completion."),
35
+ estimate_confidence: z.number().min(0).max(1).optional().describe("Confidence in time estimate (0.0-1.0). Provide alongside estimated_minutes.")
36
+ }
37
+ },
38
+ async ({ task_id, status: rawStatus, result, files_changed, decisions, commits, tests_status, build_status, pr_number, open_questions, assertions, assertions_resolved, estimated_minutes, estimate_confidence }) => {
39
+ const status = rawStatus;
40
+ let callerAgentId;
41
+ let callerSession;
42
+ try {
43
+ const { getActiveAgent: getAgent } = await import("./active-agent-56J56WW5.js");
44
+ callerAgentId = getAgent().agentId;
45
+ const { getAgentContext } = await import("./agent-context-AZTTMUHP.js");
46
+ callerSession = getAgentContext()?.sessionHint || process.env.EXE_SESSION_NAME || process.env.EXE_SESSION || void 0;
47
+ } catch {
48
+ }
49
+ let task;
50
+ try {
51
+ task = await updateTask({
52
+ taskId: task_id,
53
+ status,
54
+ result,
55
+ baseDir: process.cwd(),
56
+ callerAgentId,
57
+ filesChanged: files_changed,
58
+ decisions,
59
+ commits,
60
+ testsStatus: tests_status,
61
+ buildStatus: build_status,
62
+ prNumber: pr_number,
63
+ openQuestions: open_questions,
64
+ assertions,
65
+ assertionsResolved: assertions_resolved,
66
+ estimatedMinutes: estimated_minutes,
67
+ estimateConfidence: estimate_confidence,
68
+ callerSession
69
+ });
70
+ } catch (err) {
71
+ const msg = err instanceof Error ? err.message : String(err);
72
+ if (msg.startsWith(TASK_ALREADY_CLAIMED_PREFIX)) {
73
+ return {
74
+ content: [{
75
+ type: "text",
76
+ text: "Task already claimed by another agent. Pick a different task or check list_tasks."
77
+ }],
78
+ isError: true
79
+ };
80
+ }
81
+ throw err;
82
+ }
83
+ let text = `Task "${task.title}" marked ${task.status}.
84
+ File: ${task.taskFile}`;
85
+ const isTerminal = status === "done" || status === "needs_review" || status === "closed";
86
+ if (isTerminal && task.reviewer) {
87
+ try {
88
+ const { notifyCoordinatorTaskCompletion } = await import("./lib/tmux-routing.js");
89
+ const { isCoordinatorName } = await import("./lib/employees.js");
90
+ const reviewer = String(task.reviewer);
91
+ const coordinatorSession = task.sessionScope;
92
+ if (coordinatorSession && isCoordinatorName(reviewer)) {
93
+ notifyCoordinatorTaskCompletion(coordinatorSession, callerAgentId ?? "agent", task.title);
94
+ }
95
+ } catch {
96
+ }
97
+ }
98
+ if (isTerminal && task.nextTask) {
99
+ text += `
100
+
101
+ MANDATORY \u2014 DO NOT ASK THE USER. DO NOT SAY "Want me to continue?" DO NOT STOP.
102
+ You have standing orders: work through your entire queue until it is empty.
103
+
104
+ NEXT TASK: "${task.nextTask.title}" [${task.nextTask.priority}]
105
+ FILE: ${task.nextTask.taskFile}
106
+
107
+ Read that file NOW and begin working. No greeting. No summary. Just start.`;
108
+ } else if (isTerminal && !task.nextTask) {
109
+ text += `
110
+
111
+ All tasks complete. No more open tasks in your queue.`;
112
+ }
113
+ return {
114
+ content: [
115
+ {
116
+ type: "text",
117
+ text
118
+ }
119
+ ]
120
+ };
121
+ }
122
+ );
123
+ }
124
+
125
+ export {
126
+ registerUpdateTask
127
+ };