@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-KY43UELJ.js";
7
+ import {
8
+ getClient,
9
+ getIdentity,
10
+ listIdentities,
11
+ updateIdentity
12
+ } from "./chunk-XABJRAUW.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,105 @@
1
+ import {
2
+ connectEmbedDaemon,
3
+ disconnectClient,
4
+ embedViaClient
5
+ } from "./chunk-NTWF4DAF.js";
6
+ import {
7
+ EMBEDDING_DIM
8
+ } from "./chunk-FXU7JOXK.js";
9
+ import {
10
+ MODELS_DIR,
11
+ loadConfigSync
12
+ } from "./chunk-R36FAN53.js";
13
+
14
+ // src/lib/embedder.ts
15
+ var MAX_EMBED_CHARS = 24e3;
16
+ var DOMAIN_PREFIXES = {
17
+ memory: { query: "search_query: agent memory: ", passage: "search_document: agent memory: " },
18
+ decision: { query: "search_query: decision record: ", passage: "search_document: decision: " },
19
+ code: { query: "search_query: source code: ", passage: "search_document: code: " },
20
+ document: { query: "search_query: document: ", passage: "search_document: document: " },
21
+ general: { query: "", passage: "" }
22
+ };
23
+ function prepareEmbeddingText(text, kind, domain) {
24
+ const cfg = loadConfigSync();
25
+ const truncated = text.length > MAX_EMBED_CHARS ? text.slice(0, MAX_EMBED_CHARS) : text;
26
+ if (domain && domain !== "general") {
27
+ const domainPrefix = DOMAIN_PREFIXES[domain];
28
+ const prefix2 = kind === "passage" ? domainPrefix.passage : domainPrefix.query;
29
+ return prefix2 ? `${prefix2}${truncated}` : truncated;
30
+ }
31
+ if (!kind || !cfg.embeddingPrefixes.enabled) return truncated;
32
+ const prefix = kind === "query" ? cfg.embeddingPrefixes.query : cfg.embeddingPrefixes.passage;
33
+ return prefix ? `${prefix}${truncated}` : truncated;
34
+ }
35
+ async function getEmbedder() {
36
+ const ok = await connectEmbedDaemon();
37
+ if (!ok) {
38
+ throw new Error(
39
+ "Could not connect to embedding daemon. Embeddings may be disabled or the daemon may be unreachable."
40
+ );
41
+ }
42
+ }
43
+ async function embed(text) {
44
+ const priority = process.env.EXE_EMBED_PRIORITY === "low" ? "low" : "high";
45
+ const vector = await embedViaClient(prepareEmbeddingText(text), priority);
46
+ if (!vector) {
47
+ throw new Error(
48
+ "Embedding failed: daemon unavailable or no embedding model is loaded."
49
+ );
50
+ }
51
+ const expectedDim = loadConfigSync().embeddingDim || EMBEDDING_DIM;
52
+ if (vector.length !== expectedDim) {
53
+ throw new Error(
54
+ `Embedding dimension mismatch: expected ${expectedDim}, got ${vector.length}. Ensure the configured embedding model matches config.embeddingDim.`
55
+ );
56
+ }
57
+ return vector;
58
+ }
59
+ async function disposeEmbedder() {
60
+ disconnectClient();
61
+ }
62
+ var EMBED_WORKER_CONTEXT_ENV = "EXE_EMBED_WORKER_CONTEXT";
63
+ function assertEmbedWorkerContext(caller) {
64
+ if (process.env[EMBED_WORKER_CONTEXT_ENV] !== "1") {
65
+ throw new Error(
66
+ `Refusing to load the embedding model in-process from ${caller}: the model must load ONLY in the dedicated embed-worker (bug 5de6e765). The current process is not the embed worker (${EMBED_WORKER_CONTEXT_ENV} != 1). This guard prevents the daemon from OOM-crashing on embeddings.`
67
+ );
68
+ }
69
+ }
70
+ async function embedDirect(text) {
71
+ assertEmbedWorkerContext("embedDirect");
72
+ const llamaCpp = await import("node-llama-cpp");
73
+ const { existsSync } = await import("fs");
74
+ const path = await import("path");
75
+ const cfg = loadConfigSync();
76
+ const modelPath = path.join(MODELS_DIR, cfg.modelFile);
77
+ if (!existsSync(modelPath)) {
78
+ throw new Error(`Embedding model not found at ${modelPath}. Install or configure an embedding model to validate it.`);
79
+ }
80
+ const llama = await llamaCpp.getLlama();
81
+ const model = await llama.loadModel({ modelPath });
82
+ const context = await model.createEmbeddingContext();
83
+ try {
84
+ const embedding = await context.getEmbeddingFor(prepareEmbeddingText(text));
85
+ const vector = Array.from(embedding.vector);
86
+ const expectedDim = cfg.embeddingDim || EMBEDDING_DIM;
87
+ if (vector.length !== expectedDim) {
88
+ throw new Error(
89
+ `Embedding dimension mismatch: expected ${expectedDim}, got ${vector.length}.`
90
+ );
91
+ }
92
+ return vector;
93
+ } finally {
94
+ }
95
+ }
96
+
97
+ export {
98
+ prepareEmbeddingText,
99
+ getEmbedder,
100
+ embed,
101
+ disposeEmbedder,
102
+ EMBED_WORKER_CONTEXT_ENV,
103
+ assertEmbedWorkerContext,
104
+ embedDirect
105
+ };
@@ -0,0 +1,185 @@
1
+ import {
2
+ getSessionKey
3
+ } from "./chunk-CVYC6DUW.js";
4
+ import {
5
+ getAgentContext
6
+ } from "./chunk-GJV3WDWM.js";
7
+ import {
8
+ DEFAULT_COORDINATOR_TEMPLATE_NAME,
9
+ getCoordinatorEmployee,
10
+ getEmployee,
11
+ loadEmployeesSync
12
+ } from "./chunk-XABJRAUW.js";
13
+ import {
14
+ EXE_AI_DIR
15
+ } from "./chunk-R36FAN53.js";
16
+
17
+ // src/lib/active-agent.ts
18
+ import { readFileSync, writeFileSync, mkdirSync, unlinkSync, readdirSync } from "fs";
19
+ import { execSync } from "child_process";
20
+ import path from "path";
21
+ var CACHE_DIR = path.join(EXE_AI_DIR, "session-cache");
22
+ var STALE_MS = 24 * 60 * 60 * 1e3;
23
+ function isNameWithOptionalInstance(candidate, baseName) {
24
+ if (candidate === baseName) return true;
25
+ if (!candidate.startsWith(baseName)) return false;
26
+ return /^\d+$/.test(candidate.slice(baseName.length));
27
+ }
28
+ function resolveEmployeeFromSessionPrefix(prefix, employees) {
29
+ const sorted = [...employees].sort((a, b) => b.name.length - a.name.length);
30
+ for (const employee of sorted) {
31
+ if (isNameWithOptionalInstance(prefix, employee.name)) {
32
+ return { agentId: employee.name, agentRole: employee.role };
33
+ }
34
+ }
35
+ return null;
36
+ }
37
+ function resolveActiveAgentFromTmuxSession(sessionName) {
38
+ const employees = loadEmployeesSync();
39
+ const coordinator = getCoordinatorEmployee(employees);
40
+ const coordinatorName = coordinator?.name ?? DEFAULT_COORDINATOR_TEMPLATE_NAME;
41
+ if (isNameWithOptionalInstance(sessionName, coordinatorName)) {
42
+ return {
43
+ agentId: coordinatorName,
44
+ agentRole: coordinator?.role ?? "COO"
45
+ };
46
+ }
47
+ if (isNameWithOptionalInstance(sessionName, DEFAULT_COORDINATOR_TEMPLATE_NAME)) {
48
+ return {
49
+ agentId: coordinator?.name ?? DEFAULT_COORDINATOR_TEMPLATE_NAME,
50
+ agentRole: coordinator?.role ?? "COO"
51
+ };
52
+ }
53
+ if (sessionName.includes("-")) {
54
+ const prefix = sessionName.split("-")[0] ?? "";
55
+ const employee = resolveEmployeeFromSessionPrefix(prefix, employees);
56
+ if (employee) return employee;
57
+ const legacy = prefix.match(/^([a-zA-Z]+)\d*$/);
58
+ if (legacy?.[1] && legacy[1] !== DEFAULT_COORDINATOR_TEMPLATE_NAME) {
59
+ const emp = getEmployee(employees, legacy[1]);
60
+ return { agentId: emp?.name ?? legacy[1], agentRole: emp?.role ?? "employee" };
61
+ }
62
+ }
63
+ return null;
64
+ }
65
+ function getMarkerPath() {
66
+ return path.join(CACHE_DIR, `active-agent-${getSessionKey()}.json`);
67
+ }
68
+ function writeActiveAgent(agentId, agentRole) {
69
+ try {
70
+ mkdirSync(CACHE_DIR, { recursive: true });
71
+ writeFileSync(
72
+ getMarkerPath(),
73
+ JSON.stringify({ agentId, agentRole, startedAt: (/* @__PURE__ */ new Date()).toISOString() })
74
+ );
75
+ } catch {
76
+ }
77
+ }
78
+ function clearActiveAgent() {
79
+ try {
80
+ unlinkSync(getMarkerPath());
81
+ } catch {
82
+ }
83
+ }
84
+ function getActiveAgent() {
85
+ const httpCtx = getAgentContext();
86
+ if (httpCtx) return httpCtx;
87
+ try {
88
+ const markerPath = getMarkerPath();
89
+ const raw = readFileSync(markerPath, "utf8");
90
+ const data = JSON.parse(raw);
91
+ if (data.agentId) {
92
+ if (data.startedAt) {
93
+ const age = Date.now() - new Date(data.startedAt).getTime();
94
+ if (age > STALE_MS) {
95
+ try {
96
+ unlinkSync(markerPath);
97
+ } catch {
98
+ }
99
+ } else {
100
+ return {
101
+ agentId: data.agentId,
102
+ agentRole: data.agentRole || "employee"
103
+ };
104
+ }
105
+ } else {
106
+ return {
107
+ agentId: data.agentId,
108
+ agentRole: data.agentRole || "employee"
109
+ };
110
+ }
111
+ }
112
+ } catch {
113
+ }
114
+ if (process.env.EXE_TEST_HERMETIC !== "1") {
115
+ try {
116
+ const sessionName = execSync(
117
+ "tmux display-message -p '#{session_name}' 2>/dev/null",
118
+ { encoding: "utf8", timeout: 2e3 }
119
+ ).trim();
120
+ const resolved = resolveActiveAgentFromTmuxSession(sessionName);
121
+ if (resolved) return resolved;
122
+ } catch {
123
+ }
124
+ }
125
+ return {
126
+ agentId: process.env.AGENT_ID || "default",
127
+ agentRole: process.env.AGENT_ROLE || "employee"
128
+ };
129
+ }
130
+ function getAllActiveAgents() {
131
+ try {
132
+ const files = readdirSync(CACHE_DIR);
133
+ const sessions = [];
134
+ for (const file of files) {
135
+ if (!file.startsWith("active-agent-") || !file.endsWith(".json")) continue;
136
+ const key = file.slice("active-agent-".length, -".json".length);
137
+ if (key === "undefined") continue;
138
+ try {
139
+ const raw = readFileSync(path.join(CACHE_DIR, file), "utf8");
140
+ const data = JSON.parse(raw);
141
+ if (!data.agentId) continue;
142
+ if (data.startedAt) {
143
+ const age = Date.now() - new Date(data.startedAt).getTime();
144
+ if (age > STALE_MS) {
145
+ try {
146
+ unlinkSync(path.join(CACHE_DIR, file));
147
+ } catch {
148
+ }
149
+ continue;
150
+ }
151
+ }
152
+ sessions.push({
153
+ agentId: data.agentId,
154
+ agentRole: data.agentRole || "employee",
155
+ startedAt: data.startedAt || (/* @__PURE__ */ new Date()).toISOString(),
156
+ sessionKey: key
157
+ });
158
+ } catch {
159
+ }
160
+ }
161
+ return sessions;
162
+ } catch {
163
+ return [];
164
+ }
165
+ }
166
+ function cleanupSessionMarkers() {
167
+ const key = getSessionKey();
168
+ try {
169
+ unlinkSync(path.join(CACHE_DIR, `active-agent-${key}.json`));
170
+ } catch {
171
+ }
172
+ try {
173
+ unlinkSync(path.join(CACHE_DIR, "active-agent-undefined.json"));
174
+ } catch {
175
+ }
176
+ }
177
+
178
+ export {
179
+ resolveActiveAgentFromTmuxSession,
180
+ writeActiveAgent,
181
+ clearActiveAgent,
182
+ getActiveAgent,
183
+ getAllActiveAgents,
184
+ cleanupSessionMarkers
185
+ };