@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,381 @@
1
+ import {
2
+ PLATFORM_PROCEDURE_TITLES
3
+ } from "./chunk-VUH67PT4.js";
4
+ import {
5
+ isGhostBehaviorRow
6
+ } from "./chunk-FNHYH5U6.js";
7
+ import {
8
+ getClient,
9
+ getIdentity,
10
+ listIdentities,
11
+ updateIdentity
12
+ } from "./chunk-V6LOEOXG.js";
13
+ import {
14
+ atomicWriteJsonSync
15
+ } from "./chunk-LYH5HE24.js";
16
+
17
+ // src/lib/orchestration-package.ts
18
+ import { randomUUID } from "crypto";
19
+ import { copyFileSync, existsSync, mkdirSync, readFileSync } from "fs";
20
+ import os from "os";
21
+ import path from "path";
22
+ var PACKAGE_VERSION = "1.0";
23
+ var ROSTER_FILENAME = "exe-employees.json";
24
+ var ROSTER_BACKUP_FILENAME = "exe-employees.json.bak";
25
+ var EXE_OS_DIRNAME = ".exe-os";
26
+ var DEFAULT_BEHAVIOR_PRIORITY = "p1";
27
+ var DEFAULT_PROCEDURE_PRIORITY = "p0";
28
+ var DEFAULT_IDENTITY_UPDATED_BY = "orchestration-import";
29
+ function ensureObject(value, label) {
30
+ if (value == null || Array.isArray(value) || typeof value !== "object") {
31
+ throw new Error(`${label} must be an object`);
32
+ }
33
+ return value;
34
+ }
35
+ function ensureString(value, label) {
36
+ if (typeof value !== "string") {
37
+ throw new Error(`${label} must be a string`);
38
+ }
39
+ return value;
40
+ }
41
+ function ensureOptionalString(value, label) {
42
+ if (value == null) return void 0;
43
+ return ensureString(value, label);
44
+ }
45
+ function ensureNullableString(value, label) {
46
+ if (value == null) return null;
47
+ return ensureString(value, label);
48
+ }
49
+ function ensurePriority(value, label, fallback) {
50
+ if (value == null) return fallback;
51
+ if (value === "p0" || value === "p1" || value === "p2") {
52
+ return value;
53
+ }
54
+ throw new Error(`${label} must be one of: p0, p1, p2`);
55
+ }
56
+ function validateRosterEntry(value, index) {
57
+ const record = ensureObject(value, `roster[${index}]`);
58
+ return {
59
+ name: ensureString(record.name, `roster[${index}].name`),
60
+ role: ensureString(record.role, `roster[${index}].role`),
61
+ systemPrompt: ensureString(record.systemPrompt, `roster[${index}].systemPrompt`),
62
+ createdAt: typeof record.createdAt === "string" ? record.createdAt : "",
63
+ templateName: ensureOptionalString(record.templateName, `roster[${index}].templateName`),
64
+ templateVersion: typeof record.templateVersion === "number" ? record.templateVersion : void 0
65
+ };
66
+ }
67
+ function validateBehaviorEntry(value, index) {
68
+ const record = ensureObject(value, `behaviors[${index}]`);
69
+ return {
70
+ agent_id: ensureString(record.agent_id, `behaviors[${index}].agent_id`),
71
+ project_name: ensureNullableString(record.project_name, `behaviors[${index}].project_name`),
72
+ domain: ensureNullableString(record.domain, `behaviors[${index}].domain`),
73
+ content: ensureString(record.content, `behaviors[${index}].content`),
74
+ priority: ensurePriority(record.priority, `behaviors[${index}].priority`, DEFAULT_BEHAVIOR_PRIORITY)
75
+ };
76
+ }
77
+ function validateProcedureEntry(value, index) {
78
+ const record = ensureObject(value, `procedures[${index}]`);
79
+ return {
80
+ title: ensureString(record.title, `procedures[${index}].title`),
81
+ content: ensureString(record.content, `procedures[${index}].content`),
82
+ priority: ensurePriority(record.priority, `procedures[${index}].priority`, DEFAULT_PROCEDURE_PRIORITY),
83
+ domain: ensureNullableString(record.domain, `procedures[${index}].domain`)
84
+ };
85
+ }
86
+ function getRosterPath() {
87
+ return path.join(os.homedir(), EXE_OS_DIRNAME, ROSTER_FILENAME);
88
+ }
89
+ function getBackupPath() {
90
+ return path.join(os.homedir(), EXE_OS_DIRNAME, ROSTER_BACKUP_FILENAME);
91
+ }
92
+ function readRosterFile() {
93
+ const rosterPath = getRosterPath();
94
+ if (!existsSync(rosterPath)) return [];
95
+ const raw = readFileSync(rosterPath, "utf-8");
96
+ const parsed = JSON.parse(raw);
97
+ if (!Array.isArray(parsed)) {
98
+ throw new Error("Roster file must contain a JSON array");
99
+ }
100
+ return parsed.map((entry, index) => validateRosterEntry(entry, index));
101
+ }
102
+ function writeRosterFile(roster) {
103
+ if (roster.length === 0) {
104
+ throw new Error("Refusing to write empty roster \u2014 this would delete all employees");
105
+ }
106
+ const rosterPath = getRosterPath();
107
+ mkdirSync(path.dirname(rosterPath), { recursive: true });
108
+ if (existsSync(rosterPath)) {
109
+ const currentRoster = readRosterFile();
110
+ if (roster.length < currentRoster.length) {
111
+ throw new Error(
112
+ `Refusing to write roster with ${roster.length} entries \u2014 current roster has ${currentRoster.length}. Import would delete ${currentRoster.length - roster.length} employee(s). Use merge strategy instead, or add the missing entries to the package.`
113
+ );
114
+ }
115
+ copyFileSync(rosterPath, getBackupPath());
116
+ }
117
+ atomicWriteJsonSync(rosterPath, roster);
118
+ }
119
+ function buildImportedRosterEntries(roster, timestamp) {
120
+ return roster.map((entry) => ({
121
+ name: entry.name,
122
+ role: entry.role,
123
+ systemPrompt: entry.systemPrompt,
124
+ createdAt: timestamp,
125
+ ...entry.templateName != null ? { templateName: entry.templateName } : {},
126
+ ...entry.templateVersion != null ? { templateVersion: entry.templateVersion } : {}
127
+ }));
128
+ }
129
+ async function insertBehaviors(behaviors, timestamp) {
130
+ const client = getClient();
131
+ let inserted = 0;
132
+ for (const behavior of behaviors) {
133
+ if (isGhostBehaviorRow({ id: "import", content: behavior.content, agent_id: behavior.agent_id })) {
134
+ continue;
135
+ }
136
+ await client.execute({
137
+ sql: `INSERT INTO behaviors (id, agent_id, project_name, domain, priority, content, active, created_at, updated_at)
138
+ VALUES (?, ?, ?, ?, ?, ?, 1, ?, ?)`,
139
+ args: [
140
+ randomUUID(),
141
+ behavior.agent_id,
142
+ behavior.project_name,
143
+ behavior.domain,
144
+ behavior.priority,
145
+ behavior.content,
146
+ timestamp,
147
+ timestamp
148
+ ]
149
+ });
150
+ inserted++;
151
+ }
152
+ return inserted;
153
+ }
154
+ async function insertProcedures(procedures, timestamp, options) {
155
+ const client = getClient();
156
+ const skipTitles = options?.skipTitles ?? /* @__PURE__ */ new Set();
157
+ let inserted = 0;
158
+ try {
159
+ const existing = await client.execute("SELECT title FROM company_procedures WHERE active = 1");
160
+ for (const r of existing.rows) {
161
+ if (r.title) skipTitles.add(r.title);
162
+ }
163
+ } catch {
164
+ }
165
+ for (const procedure of procedures) {
166
+ if (!procedure.title?.trim() || !procedure.content?.trim()) {
167
+ continue;
168
+ }
169
+ if (skipTitles.has(procedure.title) || PLATFORM_PROCEDURE_TITLES.has(procedure.title)) {
170
+ continue;
171
+ }
172
+ await client.execute({
173
+ sql: `INSERT INTO company_procedures (id, title, content, priority, domain, active, created_at, updated_at)
174
+ VALUES (?, ?, ?, ?, ?, 1, ?, ?)`,
175
+ args: [
176
+ randomUUID(),
177
+ procedure.title,
178
+ procedure.content,
179
+ procedure.priority,
180
+ procedure.domain,
181
+ timestamp,
182
+ timestamp
183
+ ]
184
+ });
185
+ skipTitles.add(procedure.title);
186
+ inserted += 1;
187
+ }
188
+ return inserted;
189
+ }
190
+ async function replaceBehaviorsAndProcedures(behaviors, procedures, timestamp) {
191
+ const client = getClient();
192
+ const existingBehaviors = await client.execute({
193
+ sql: "SELECT agent_id, content FROM behaviors WHERE active = 1",
194
+ args: []
195
+ });
196
+ const existingBehaviorKeys = new Set(
197
+ existingBehaviors.rows.map((row) => `${String(row.agent_id)}::${String(row.content)}`)
198
+ );
199
+ const newBehaviors = behaviors.filter(
200
+ (b) => !existingBehaviorKeys.has(`${b.agent_id}::${b.content}`)
201
+ );
202
+ const existingProcedureTitles = await getActiveProcedureTitles();
203
+ return {
204
+ behaviors: await insertBehaviors(newBehaviors, timestamp),
205
+ procedures: await insertProcedures(procedures, timestamp, { skipTitles: existingProcedureTitles })
206
+ };
207
+ }
208
+ async function mergeRosterEntries(importedRoster, timestamp) {
209
+ const currentRoster = readRosterFile();
210
+ const existingNames = new Set(currentRoster.map((entry) => entry.name.toLowerCase()));
211
+ const additions = buildImportedRosterEntries(
212
+ importedRoster.filter((entry) => !existingNames.has(entry.name.toLowerCase())),
213
+ timestamp
214
+ );
215
+ if (additions.length > 0) {
216
+ writeRosterFile([...currentRoster, ...additions]);
217
+ }
218
+ return additions.length;
219
+ }
220
+ async function replaceRosterEntries(importedRoster, timestamp) {
221
+ const currentRoster = readRosterFile();
222
+ const importedByName = new Map(
223
+ buildImportedRosterEntries(importedRoster, timestamp).map((entry) => [entry.name.toLowerCase(), entry])
224
+ );
225
+ const merged = currentRoster.map((existing) => {
226
+ const imported = importedByName.get(existing.name.toLowerCase());
227
+ if (imported) {
228
+ importedByName.delete(existing.name.toLowerCase());
229
+ return imported;
230
+ }
231
+ return existing;
232
+ });
233
+ for (const newEntry of importedByName.values()) {
234
+ merged.push(newEntry);
235
+ }
236
+ writeRosterFile(merged);
237
+ return importedRoster.length;
238
+ }
239
+ async function importIdentities(identities, updatedBy) {
240
+ const entries = Object.entries(identities);
241
+ let imported = 0;
242
+ for (const [agentId, content] of entries) {
243
+ const existing = getIdentity(agentId);
244
+ if (existing?.raw) {
245
+ continue;
246
+ }
247
+ await updateIdentity(agentId, content, updatedBy);
248
+ imported += 1;
249
+ }
250
+ return imported;
251
+ }
252
+ async function getActiveProcedureTitles() {
253
+ const client = getClient();
254
+ const result = await client.execute({
255
+ sql: "SELECT title FROM company_procedures WHERE active = 1",
256
+ args: []
257
+ });
258
+ return new Set(result.rows.map((row) => String(row.title)));
259
+ }
260
+ async function exportOrchestration(createdBy) {
261
+ const client = getClient();
262
+ const roster = readRosterFile().map((entry) => ({
263
+ ...entry,
264
+ createdAt: ""
265
+ }));
266
+ const identities = {};
267
+ for (const identitySummary of listIdentities()) {
268
+ const identity = getIdentity(identitySummary.agentId);
269
+ if (identity?.raw) {
270
+ identities[identitySummary.agentId] = identity.raw;
271
+ }
272
+ }
273
+ const behaviorResult = await client.execute({
274
+ sql: "SELECT agent_id, project_name, domain, content, priority FROM behaviors WHERE active = 1",
275
+ args: []
276
+ });
277
+ const procedureResult = await client.execute({
278
+ sql: "SELECT title, content, priority, domain FROM company_procedures WHERE active = 1",
279
+ args: []
280
+ });
281
+ const behaviors = behaviorResult.rows.map((row) => ({
282
+ agent_id: String(row.agent_id),
283
+ project_name: row.project_name == null ? null : String(row.project_name),
284
+ domain: row.domain == null ? null : String(row.domain),
285
+ content: String(row.content),
286
+ priority: ensurePriority(row.priority, "behaviors.priority", DEFAULT_BEHAVIOR_PRIORITY)
287
+ }));
288
+ const procedures = procedureResult.rows.map((row) => ({
289
+ title: String(row.title),
290
+ content: String(row.content),
291
+ priority: ensurePriority(row.priority, "procedures.priority", DEFAULT_PROCEDURE_PRIORITY),
292
+ domain: row.domain == null ? null : String(row.domain)
293
+ })).filter((procedure) => !PLATFORM_PROCEDURE_TITLES.has(procedure.title));
294
+ return {
295
+ version: PACKAGE_VERSION,
296
+ created_by: createdBy,
297
+ created_at: (/* @__PURE__ */ new Date()).toISOString(),
298
+ roster,
299
+ identities,
300
+ behaviors,
301
+ procedures
302
+ };
303
+ }
304
+ async function importOrchestration(pkg, strategy) {
305
+ const validated = validatePackage(pkg);
306
+ const timestamp = (/* @__PURE__ */ new Date()).toISOString();
307
+ const updatedBy = validated.created_by || DEFAULT_IDENTITY_UPDATED_BY;
308
+ const rosterCount = strategy === "replace" ? await replaceRosterEntries(validated.roster, timestamp) : await mergeRosterEntries(validated.roster, timestamp);
309
+ const identityCount = await importIdentities(validated.identities, updatedBy);
310
+ if (strategy === "replace") {
311
+ const replaced = await replaceBehaviorsAndProcedures(
312
+ validated.behaviors,
313
+ validated.procedures,
314
+ timestamp
315
+ );
316
+ return {
317
+ imported: {
318
+ roster: rosterCount,
319
+ identities: identityCount,
320
+ behaviors: replaced.behaviors,
321
+ procedures: replaced.procedures
322
+ }
323
+ };
324
+ }
325
+ const existingProcedureTitles = await getActiveProcedureTitles();
326
+ const behaviorCount = await insertBehaviors(validated.behaviors, timestamp);
327
+ const procedureCount = await insertProcedures(
328
+ validated.procedures,
329
+ timestamp,
330
+ { skipTitles: existingProcedureTitles }
331
+ );
332
+ return {
333
+ imported: {
334
+ roster: rosterCount,
335
+ identities: identityCount,
336
+ behaviors: behaviorCount,
337
+ procedures: procedureCount
338
+ }
339
+ };
340
+ }
341
+ function validatePackage(data) {
342
+ const record = ensureObject(data, "package");
343
+ const version = ensureString(record.version, "version");
344
+ if (version !== PACKAGE_VERSION) {
345
+ throw new Error(`Unsupported orchestration package version: ${version}`);
346
+ }
347
+ if (!Array.isArray(record.roster)) {
348
+ throw new Error("roster is required and must be an array");
349
+ }
350
+ if (record.identities == null || Array.isArray(record.identities) || typeof record.identities !== "object") {
351
+ throw new Error("identities is required and must be an object");
352
+ }
353
+ if (!Array.isArray(record.behaviors)) {
354
+ throw new Error("behaviors is required and must be an array");
355
+ }
356
+ if (!Array.isArray(record.procedures)) {
357
+ throw new Error("procedures is required and must be an array");
358
+ }
359
+ const identities = Object.entries(record.identities).reduce(
360
+ (acc, [agentId, content]) => {
361
+ acc[agentId] = ensureString(content, `identities.${agentId}`);
362
+ return acc;
363
+ },
364
+ {}
365
+ );
366
+ return {
367
+ version: PACKAGE_VERSION,
368
+ created_by: ensureString(record.created_by, "created_by"),
369
+ created_at: ensureString(record.created_at, "created_at"),
370
+ roster: record.roster.map((entry, index) => validateRosterEntry(entry, index)),
371
+ identities,
372
+ behaviors: record.behaviors.map((entry, index) => validateBehaviorEntry(entry, index)),
373
+ procedures: record.procedures.map((entry, index) => validateProcedureEntry(entry, index))
374
+ };
375
+ }
376
+
377
+ export {
378
+ exportOrchestration,
379
+ importOrchestration,
380
+ validatePackage
381
+ };
@@ -0,0 +1,76 @@
1
+ import {
2
+ fastDbInit
3
+ } from "./chunk-P5UXP53T.js";
4
+ import {
5
+ sessionScopeFilter
6
+ } from "./chunk-F5OSXH4A.js";
7
+ import {
8
+ formatStatusAll,
9
+ formatStatusDeep,
10
+ getEmployeeStatuses,
11
+ inTmux
12
+ } from "./chunk-SSTLTIF3.js";
13
+ import {
14
+ getClient,
15
+ isCoordinatorRole,
16
+ loadEmployees
17
+ } from "./chunk-XABJRAUW.js";
18
+ import {
19
+ isMainModule
20
+ } from "./chunk-6Y4B3QF6.js";
21
+
22
+ // src/bin/exe-status.ts
23
+ async function status(targetEmployee) {
24
+ if (!inTmux()) {
25
+ return "Not in a tmux session. Start tmux first: tmux new-session -s work";
26
+ }
27
+ const employees = await loadEmployees();
28
+ const names = employees.filter((e) => !isCoordinatorRole(e.role)).map((e) => e.name);
29
+ const roles = new Map(employees.map((e) => [e.name, e.role ?? ""]));
30
+ await fastDbInit();
31
+ const client = getClient();
32
+ const taskMap = /* @__PURE__ */ new Map();
33
+ try {
34
+ const esScope = sessionScopeFilter();
35
+ const result = await client.execute({
36
+ sql: `SELECT assigned_to, title, priority FROM tasks
37
+ WHERE status = 'in_progress'${esScope.sql}
38
+ ORDER BY priority ASC, created_at ASC`,
39
+ args: [...esScope.args]
40
+ });
41
+ for (const row of result.rows) {
42
+ const assignee = String(row.assigned_to);
43
+ if (!taskMap.has(assignee)) {
44
+ taskMap.set(assignee, {
45
+ title: String(row.title),
46
+ priority: String(row.priority)
47
+ });
48
+ }
49
+ }
50
+ } catch {
51
+ }
52
+ if (targetEmployee) {
53
+ if (!names.includes(targetEmployee)) {
54
+ return `Employee "${targetEmployee}" not found. Available: ${names.join(", ")}`;
55
+ }
56
+ const statuses2 = getEmployeeStatuses([targetEmployee]);
57
+ const s = statuses2[0];
58
+ return formatStatusDeep(s, taskMap.get(targetEmployee), roles.get(targetEmployee) ?? "");
59
+ }
60
+ const statuses = getEmployeeStatuses(names);
61
+ return formatStatusAll(statuses, taskMap, roles);
62
+ }
63
+ if (isMainModule(import.meta.url)) {
64
+ const target = process.argv[2];
65
+ status(target).then((output) => {
66
+ process.stdout.write(output + "\n");
67
+ }).catch((err) => {
68
+ process.stderr.write(`Error: ${err instanceof Error ? err.message : String(err)}
69
+ `);
70
+ process.exit(1);
71
+ });
72
+ }
73
+
74
+ export {
75
+ status
76
+ };
@@ -0,0 +1,159 @@
1
+ import {
2
+ EMBEDDING_DIM
3
+ } from "./chunk-FXU7JOXK.js";
4
+
5
+ // src/lib/tool-capability-index.ts
6
+ var ALWAYS_ON = /* @__PURE__ */ new Set([
7
+ "mcp_ping",
8
+ "memory",
9
+ "task",
10
+ "message",
11
+ "identity",
12
+ "diagnostics",
13
+ "session"
14
+ ]);
15
+ function categoryForToolName(toolName, categoryMap) {
16
+ const normalized = toolName.replace(/[_-]/g, "").toLowerCase();
17
+ for (const [registerFn, cat] of Object.entries(categoryMap)) {
18
+ const fnNormalized = registerFn.replace(/^register/, "").toLowerCase();
19
+ if (fnNormalized === normalized) return cat;
20
+ }
21
+ return "unknown";
22
+ }
23
+ function extractParamNames(inputSchema) {
24
+ if (!inputSchema || typeof inputSchema !== "object") return "";
25
+ return Object.keys(inputSchema).join(", ");
26
+ }
27
+ function cosineSimilarity(a, b) {
28
+ if (a.length !== b.length || a.length === 0) return 0;
29
+ let dot = 0, normA = 0, normB = 0;
30
+ for (let i = 0; i < a.length; i++) {
31
+ dot += a[i] * b[i];
32
+ normA += a[i] * a[i];
33
+ normB += b[i] * b[i];
34
+ }
35
+ const denom = Math.sqrt(normA) * Math.sqrt(normB);
36
+ return denom === 0 ? 0 : dot / denom;
37
+ }
38
+ function keywordScore(query, tool) {
39
+ const words = query.toLowerCase().split(/\s+/).filter((w) => w.length > 2);
40
+ if (words.length === 0) return 0;
41
+ const searchText = `${tool.name} ${tool.description} ${tool.category} ${tool.paramSummary}`.toLowerCase();
42
+ let matches = 0;
43
+ for (const word of words) {
44
+ if (searchText.includes(word)) matches++;
45
+ }
46
+ return matches / words.length;
47
+ }
48
+ var ToolCapabilityIndex = class {
49
+ capabilities = [];
50
+ initialized = false;
51
+ /**
52
+ * Build the index by intercepting registerAllTools via a fake McpServer.
53
+ *
54
+ * @param registerFn - function that registers tools on a server (e.g. registerAllTools)
55
+ * @param categoryMap - optional map of registerFnName → category (from tool-gates TOOL_CATEGORIES)
56
+ */
57
+ async buildIndex(registerFn, categoryMap, directEmbedFn) {
58
+ const captured = [];
59
+ const fakeServer = {
60
+ registerTool(name, config, _handler) {
61
+ captured.push({
62
+ name,
63
+ description: config.description ?? "",
64
+ inputSchema: config.inputSchema ?? {}
65
+ });
66
+ }
67
+ };
68
+ registerFn(fakeServer);
69
+ const capabilityDocs = [];
70
+ for (const tool of captured) {
71
+ const paramSummary = extractParamNames(tool.inputSchema);
72
+ const category = categoryMap ? categoryForToolName(tool.name, categoryMap) : "unknown";
73
+ const doc = `${tool.name}: ${tool.description}. Parameters: ${paramSummary}`;
74
+ capabilityDocs.push({ name: tool.name, description: tool.description, category, paramSummary, doc });
75
+ }
76
+ let vectors = capabilityDocs.map(() => null);
77
+ try {
78
+ if (directEmbedFn) {
79
+ const allVectors = await directEmbedFn(capabilityDocs.map((c) => c.doc));
80
+ vectors = allVectors.map((v) => v.length === EMBEDDING_DIM ? v : null);
81
+ } else {
82
+ const { embed } = await import("./lib/embedder.js");
83
+ const test = await embed("test");
84
+ if (test.length === EMBEDDING_DIM) {
85
+ for (let i = 0; i < capabilityDocs.length; i++) {
86
+ try {
87
+ vectors[i] = await embed(capabilityDocs[i].doc);
88
+ } catch {
89
+ }
90
+ }
91
+ }
92
+ }
93
+ } catch {
94
+ }
95
+ const capabilities = capabilityDocs.map((c, i) => ({
96
+ name: c.name,
97
+ description: c.description,
98
+ category: c.category,
99
+ vector: vectors[i] ?? null,
100
+ paramSummary: c.paramSummary
101
+ }));
102
+ this.capabilities = capabilities;
103
+ this.initialized = true;
104
+ process.stderr.write(
105
+ `[tool-capability-index] Indexed ${capabilities.length} tools (${capabilities.filter((c) => c.vector).length} with vectors)
106
+ `
107
+ );
108
+ }
109
+ /**
110
+ * Semantic search for tools matching a natural-language query.
111
+ * Returns tools sorted by relevance, with always-on tools boosted.
112
+ */
113
+ async search(query, limit = 20) {
114
+ if (!this.initialized || this.capabilities.length === 0) return [];
115
+ let queryVector = null;
116
+ try {
117
+ const { embed } = await import("./lib/embedder.js");
118
+ queryVector = await embed(query);
119
+ } catch {
120
+ }
121
+ const scored = [];
122
+ for (const tool of this.capabilities) {
123
+ let relevance;
124
+ if (queryVector && tool.vector) {
125
+ const vecScore = cosineSimilarity(queryVector, tool.vector);
126
+ const kwScore = keywordScore(query, tool);
127
+ relevance = vecScore * 0.8 + kwScore * 0.2;
128
+ } else {
129
+ relevance = keywordScore(query, tool);
130
+ }
131
+ if (ALWAYS_ON.has(tool.name)) {
132
+ relevance = Math.max(relevance, 0.5);
133
+ }
134
+ scored.push({ ...tool, relevance });
135
+ }
136
+ scored.sort((a, b) => b.relevance - a.relevance);
137
+ return scored.slice(0, limit);
138
+ }
139
+ /** Whether the index has been built. */
140
+ isReady() {
141
+ return this.initialized;
142
+ }
143
+ /** Total number of indexed tools. */
144
+ get toolCount() {
145
+ return this.capabilities.length;
146
+ }
147
+ };
148
+ var _instance = null;
149
+ function getToolCapabilityIndex() {
150
+ if (!_instance) {
151
+ _instance = new ToolCapabilityIndex();
152
+ }
153
+ return _instance;
154
+ }
155
+
156
+ export {
157
+ ToolCapabilityIndex,
158
+ getToolCapabilityIndex
159
+ };