@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,567 @@
1
+ import {
2
+ writeDispatchFailed,
3
+ writeDispatchPending
4
+ } from "./chunk-HMP5VT6A.js";
5
+ import {
6
+ createTask
7
+ } from "./chunk-BT2LEHIW.js";
8
+ import {
9
+ getActiveAgent
10
+ } from "./chunk-RCEULTPF.js";
11
+ import {
12
+ ensureEmployee,
13
+ logTaskDispatch,
14
+ resolveExeSession
15
+ } from "./chunk-YOMETWOJ.js";
16
+ import {
17
+ recordOrchestrationEventBestEffort
18
+ } from "./chunk-RCGHXBCX.js";
19
+ import {
20
+ getAgentRuntime,
21
+ validateRuntimeModel
22
+ } from "./chunk-QRTJNSKU.js";
23
+ import {
24
+ getLicenseSync
25
+ } from "./chunk-3RY2ARDN.js";
26
+ import {
27
+ getAgentContext
28
+ } from "./chunk-GJV3WDWM.js";
29
+ import {
30
+ isCoordinatorName
31
+ } from "./chunk-XABJRAUW.js";
32
+
33
+ // src/mcp/tools/create-task.ts
34
+ import { z } from "zod";
35
+ import { existsSync, readdirSync, statSync, writeFileSync, mkdirSync } from "fs";
36
+ import { basename, join } from "path";
37
+ import { homedir } from "os";
38
+ function rootFromSessionName(sessionName) {
39
+ const raw = (sessionName ?? "").trim();
40
+ if (!raw) return "";
41
+ const lastDash = raw.lastIndexOf("-");
42
+ return lastDash >= 0 ? raw.slice(lastDash + 1) : raw;
43
+ }
44
+ function isRootSessionName(sessionName) {
45
+ return sessionName.length > 0 && !sessionName.includes("-");
46
+ }
47
+ function projectDirMatches(projectDir, projectName) {
48
+ const dirBasename = basename(projectDir).toLowerCase();
49
+ const normalizedProject = projectName.toLowerCase();
50
+ return dirBasename === normalizedProject || dirBasename === normalizedProject.replace(/^exe-/, "") || `exe-${dirBasename}` === normalizedProject || projectDir.toLowerCase().includes(normalizedProject);
51
+ }
52
+ function findProjectChildDir(parentDir, projectName) {
53
+ if (!existsSync(parentDir)) return null;
54
+ const normalizedProject = projectName.toLowerCase();
55
+ const aliases = /* @__PURE__ */ new Set([
56
+ normalizedProject,
57
+ normalizedProject.replace(/^exe-/, "")
58
+ ]);
59
+ const exactCandidate = join(parentDir, projectName);
60
+ if (existsSync(exactCandidate) && statSync(exactCandidate).isDirectory()) return exactCandidate;
61
+ try {
62
+ for (const entry of readdirSync(parentDir, { withFileTypes: true })) {
63
+ if (!entry.isDirectory()) continue;
64
+ const lower = entry.name.toLowerCase();
65
+ if (aliases.has(lower) || `exe-${lower}` === normalizedProject) {
66
+ return join(parentDir, entry.name);
67
+ }
68
+ }
69
+ } catch {
70
+ }
71
+ return null;
72
+ }
73
+ async function listCoordinatorRoots() {
74
+ const roots = /* @__PURE__ */ new Set();
75
+ let liveTmux = null;
76
+ try {
77
+ const { listTmuxSessions } = await import("./lib/tmux-status.js");
78
+ liveTmux = listTmuxSessions();
79
+ } catch {
80
+ }
81
+ const liveTmuxSet = liveTmux ? new Set(liveTmux) : null;
82
+ try {
83
+ const { listSessions } = await import("./lib/session-registry.js");
84
+ for (const session of listSessions()) {
85
+ if (!isRootSessionName(session.windowName)) continue;
86
+ if (liveTmuxSet && !liveTmuxSet.has(session.windowName)) continue;
87
+ roots.add(session.windowName);
88
+ }
89
+ } catch {
90
+ }
91
+ if (liveTmux) {
92
+ for (const sessionName of liveTmux) {
93
+ if (isRootSessionName(sessionName) && /^exe\d*$/i.test(sessionName)) roots.add(sessionName);
94
+ }
95
+ }
96
+ return [...roots].sort();
97
+ }
98
+ async function inferCoordinatorRootForProject(projectName) {
99
+ try {
100
+ const liveRoots = new Set(await listCoordinatorRoots());
101
+ const { listSessions } = await import("./lib/session-registry.js");
102
+ const matches = listSessions().filter((session) => isRootSessionName(session.windowName)).filter((session) => !liveRoots.size || liveRoots.has(session.windowName)).filter((session) => session.projectDir && existsSync(session.projectDir)).filter((session) => projectDirMatches(session.projectDir, projectName)).map((session) => session.windowName);
103
+ return [...new Set(matches)].length === 1 ? matches[0] : "";
104
+ } catch {
105
+ return "";
106
+ }
107
+ }
108
+ function resolveDispatchRuntime(agentId, override) {
109
+ if (override) return override;
110
+ try {
111
+ return getAgentRuntime(agentId).runtime ?? null;
112
+ } catch {
113
+ return null;
114
+ }
115
+ }
116
+ async function resolveProjectDir(projectName, callerSession) {
117
+ const home = homedir();
118
+ if (callerSession) {
119
+ try {
120
+ const { listSessions } = await import("./lib/session-registry.js");
121
+ const sessions = listSessions();
122
+ const coordName = callerSession.includes("-") ? callerSession.slice(callerSession.indexOf("-") + 1) : callerSession;
123
+ const coordSession = sessions.find((s) => s.windowName === coordName) ?? sessions.find((s) => s.windowName === callerSession);
124
+ if (coordSession?.projectDir && existsSync(coordSession.projectDir)) {
125
+ if (projectDirMatches(coordSession.projectDir, projectName)) {
126
+ return coordSession.projectDir;
127
+ }
128
+ const childProjectDir = findProjectChildDir(coordSession.projectDir, projectName);
129
+ if (childProjectDir) {
130
+ return childProjectDir;
131
+ }
132
+ process.stderr.write(
133
+ `[create-task] project mismatch: coordinator dir="${coordSession.projectDir}" (${basename(coordSession.projectDir).toLowerCase()}) vs task project="${projectName}". Falling through.
134
+ `
135
+ );
136
+ }
137
+ } catch (err) {
138
+ process.stderr.write(
139
+ `[create-task] resolveProjectDir: coordinator-session resolution failed for callerSession="${callerSession}": ${err instanceof Error ? err.message : String(err)}
140
+ `
141
+ );
142
+ }
143
+ }
144
+ try {
145
+ const ctx = getAgentContext();
146
+ if (ctx?.projectName) {
147
+ const alsCandidate = join(home, ctx.projectName);
148
+ if (existsSync(alsCandidate)) return alsCandidate;
149
+ }
150
+ } catch {
151
+ }
152
+ const candidates = [
153
+ join(home, projectName),
154
+ join(home, projectName.replace(/^exe-/, ""))
155
+ ];
156
+ for (const candidate of candidates) {
157
+ if (existsSync(candidate)) return candidate;
158
+ }
159
+ const cwd = process.cwd();
160
+ if (cwd !== home && existsSync(join(cwd, ".git"))) {
161
+ process.stderr.write(
162
+ `[create-task] WARN: could not resolve project dir for "${projectName}" \u2014 falling back to cwd (${cwd}). This may cause agents to spawn in the wrong repo.
163
+ `
164
+ );
165
+ return cwd;
166
+ }
167
+ const fallback = join(home, projectName);
168
+ process.stderr.write(
169
+ `[create-task] ERROR: could not resolve project dir for "${projectName}". cwd=${cwd} is not a valid project directory. Using ${fallback} as fallback (may not exist). Ensure the project is cloned or the coordinator session registry is populated.
170
+ `
171
+ );
172
+ return fallback;
173
+ }
174
+ function registerCreateTask(server) {
175
+ server.registerTool(
176
+ "create_task",
177
+ {
178
+ title: "Create Task",
179
+ description: "Create and assign a task to an employee. Writes a .md task file and DB row.",
180
+ inputSchema: {
181
+ title: z.string().describe("Task title"),
182
+ assigned_to: z.string().describe("Employee name to assign to"),
183
+ project_name: z.string().describe("Project name"),
184
+ priority: z.enum(["p0", "p1", "p2"]).default("p1").describe("Priority level"),
185
+ complexity: z.enum(["routine", "standard", "complex", "critical"]).default("standard").describe("Bloom taxonomy complexity level. Affects routing tier and review requirements."),
186
+ context: z.string().describe("Full task description and context"),
187
+ blocked_by: z.string().optional().describe("Task ID or slug of the blocking task. If set, task starts as 'blocked'."),
188
+ parent_task_id: z.string().optional().describe("Parent task ID or slug. Links this task as a subtask."),
189
+ reviewer: z.string().optional().describe("Who should review this task when done. Defaults to assigner."),
190
+ budget_tokens: z.number().optional().describe("Max tokens allowed for this task (null = unlimited)"),
191
+ budget_fallback_model: z.string().optional().describe("Model to route to when budget is exhausted"),
192
+ spawn_runtime: z.string().optional().describe("Override runtime for spawned session (e.g., 'claude', 'codex', 'opencode')"),
193
+ spawn_model: z.string().optional().describe("Override model for spawned session (e.g., 'claude-sonnet-4.6', 'claude-haiku-4.5')")
194
+ }
195
+ },
196
+ async ({ title, assigned_to, project_name, priority, complexity, context, blocked_by, parent_task_id, reviewer, budget_tokens, budget_fallback_model, spawn_runtime, spawn_model }) => {
197
+ if (!isCoordinatorName(assigned_to)) {
198
+ const license = getLicenseSync();
199
+ if (license.plan === "free") {
200
+ return {
201
+ content: [{
202
+ type: "text",
203
+ text: "Upgrade to hire specialists. Free plan includes your coordinator only. Get a license at https://askexe.com"
204
+ }],
205
+ isError: true
206
+ };
207
+ }
208
+ }
209
+ const { agentId: assignedBy } = getActiveAgent();
210
+ let callerTmux = "";
211
+ let callerSource = "";
212
+ try {
213
+ callerTmux = getAgentContext()?.sessionHint ?? "";
214
+ if (callerTmux) callerSource = "als";
215
+ } catch {
216
+ }
217
+ if (!callerTmux) {
218
+ callerTmux = process.env.EXE_SESSION_NAME || process.env.EXE_SESSION || "";
219
+ if (callerTmux) callerSource = "env";
220
+ }
221
+ let callerRoot = rootFromSessionName(callerTmux);
222
+ if (!callerRoot) {
223
+ const projectRoot = await inferCoordinatorRootForProject(project_name);
224
+ if (projectRoot) {
225
+ callerRoot = projectRoot;
226
+ callerTmux = projectRoot;
227
+ callerSource = "project_registry";
228
+ process.stderr.write(
229
+ `[create_task] INFO: inferred session "${projectRoot}" from project "${project_name}" because X-Exe-Session was missing.
230
+ `
231
+ );
232
+ }
233
+ }
234
+ if (!callerRoot) {
235
+ const coordinatorSessions = await listCoordinatorRoots();
236
+ if (coordinatorSessions.length > 1 && process.env.VITEST !== "true" && process.env.NODE_ENV !== "test") {
237
+ const message = `BLOCKED: create_task cannot determine the caller session. ${coordinatorSessions.length} coordinator sessions are active (${coordinatorSessions.join(", ")}), X-Exe-Session is missing, and project "${project_name}" did not map to exactly one registered coordinator. Refusing to guess because guessing causes cross-session dispatch (for example exe2 tasks spawning yoshi2-exe1). Restart this coordinator or ensure the MCP client sends X-Exe-Session.`;
238
+ process.stderr.write(`[create_task] ${message}
239
+ `);
240
+ recordOrchestrationEventBestEffort({
241
+ eventType: "dispatch.failed",
242
+ source: "create-task.mcp",
243
+ severity: "error",
244
+ agentId: assigned_to,
245
+ projectName: project_name,
246
+ errorCode: "missing_session_hint_ambiguous",
247
+ payload: { coordinatorSessions, priority }
248
+ });
249
+ return {
250
+ content: [{ type: "text", text: message }],
251
+ isError: true
252
+ };
253
+ }
254
+ try {
255
+ const resolved = resolveExeSession();
256
+ if (resolved) {
257
+ callerRoot = resolved;
258
+ callerTmux = resolved;
259
+ callerSource = "resolve_fallback";
260
+ }
261
+ } catch {
262
+ }
263
+ }
264
+ const effectiveRuntime = spawn_runtime ?? getAgentRuntime(assigned_to).runtime;
265
+ let effectiveSpawnModel = spawn_model;
266
+ if (spawn_model) {
267
+ const validated = validateRuntimeModel(effectiveRuntime, spawn_model);
268
+ if (!validated.ok) {
269
+ return {
270
+ content: [{ type: "text", text: validated.error }],
271
+ isError: true
272
+ };
273
+ }
274
+ effectiveSpawnModel = validated.model;
275
+ }
276
+ const projectDir = await resolveProjectDir(project_name, callerRoot);
277
+ const task = await createTask({
278
+ title,
279
+ assignedTo: assigned_to,
280
+ assignedBy,
281
+ projectName: project_name,
282
+ priority,
283
+ complexity,
284
+ context,
285
+ baseDir: projectDir,
286
+ blockedBy: blocked_by,
287
+ parentTaskId: parent_task_id,
288
+ reviewer: reviewer ?? assignedBy,
289
+ budgetTokens: budget_tokens,
290
+ budgetFallbackModel: budget_fallback_model,
291
+ spawnRuntime: spawn_runtime,
292
+ spawnModel: effectiveSpawnModel,
293
+ // Pass the pre-resolved caller session to tasks-crud so it doesn't
294
+ // re-resolve independently (eliminates cross-session scope divergence).
295
+ callerSession: callerTmux || callerRoot || void 0,
296
+ // Skip internal dispatch — we handle it below with autoInstance
297
+ // support. Without this, createTask fires dispatchTaskToEmployee
298
+ // (no autoInstance) in parallel, racing with our ensureEmployee
299
+ // (autoInstance: true) and spawning duplicate sessions.
300
+ skipDispatch: true
301
+ });
302
+ try {
303
+ const { existsSync: existsSync2, mkdirSync: mkdirSync2, writeFileSync: writeFileSync2 } = await import("fs");
304
+ const { identityPath } = await import("./lib/identity.js");
305
+ const idPath = identityPath(assigned_to);
306
+ if (!existsSync2(idPath)) {
307
+ const { loadEmployees } = await import("./lib/employees.js");
308
+ const employees = await loadEmployees();
309
+ const emp = employees.find((e) => e.name === assigned_to);
310
+ if (emp) {
311
+ const { getTemplateForTitle } = await import("./lib/identity-templates.js");
312
+ const template = getTemplateForTitle(emp.role);
313
+ if (template) {
314
+ const dir = (await import("path")).dirname(idPath);
315
+ if (!existsSync2(dir)) mkdirSync2(dir, { recursive: true });
316
+ writeFileSync2(idPath, template.replace(/^agent_id: \w+/m, `agent_id: ${assigned_to}`), "utf-8");
317
+ }
318
+ }
319
+ }
320
+ } catch {
321
+ }
322
+ try {
323
+ const sessionScope = task.sessionScope || callerRoot || "default";
324
+ const { taskSignalPath: getSignalPath } = await import("./signal-paths-4GOIRLGH.js");
325
+ const { taskSignalDir } = await import("./signal-paths-4GOIRLGH.js");
326
+ const signalDir = taskSignalDir(sessionScope);
327
+ mkdirSync(signalDir, { recursive: true });
328
+ const signalPath = getSignalPath(sessionScope, assigned_to, task.id);
329
+ writeFileSync(signalPath, JSON.stringify({
330
+ task_id: task.id,
331
+ title,
332
+ priority,
333
+ assigned_by: assignedBy,
334
+ session_scope: sessionScope,
335
+ created_at: (/* @__PURE__ */ new Date()).toISOString()
336
+ }), "utf-8");
337
+ const { recordOrchestrationEventBestEffort: recordOE } = await import("./orchestration-events-VUYR6MXE.js");
338
+ recordOE({
339
+ eventType: "signal.created",
340
+ source: "create-task.mcp",
341
+ taskId: task.id,
342
+ agentId: assigned_to,
343
+ sessionScope,
344
+ payload: { priority }
345
+ });
346
+ } catch {
347
+ }
348
+ let dispatchStatus = "";
349
+ if (task.status !== "blocked" && !process.env.VITEST) {
350
+ try {
351
+ const exeSession = task.sessionScope || callerRoot;
352
+ const dispatchRuntime = resolveDispatchRuntime(assigned_to, spawn_runtime ?? null);
353
+ recordOrchestrationEventBestEffort({
354
+ eventType: "dispatch.attempted",
355
+ source: "create-task.mcp",
356
+ taskId: task.id,
357
+ agentId: assigned_to,
358
+ sessionScope: task.sessionScope || callerRoot || exeSession || null,
359
+ projectName: project_name,
360
+ runtime: dispatchRuntime,
361
+ payload: { priority }
362
+ });
363
+ if (exeSession) {
364
+ const { shouldAutoInstance } = await import("./lib/employees.js");
365
+ const autoOpts = shouldAutoInstance(assigned_to);
366
+ let projectConflictOpts = {};
367
+ try {
368
+ const { getClient } = await import("./lib/database.js");
369
+ const { sessionScopeFilter } = await import("./task-scope-CQZ33PRU.js");
370
+ const client = getClient();
371
+ const scope = sessionScopeFilter(task.sessionScope || callerRoot || exeSession || null);
372
+ const existing = await client.execute({
373
+ sql: `SELECT project_name FROM tasks WHERE assigned_to = ? AND status = 'in_progress'${scope.sql} LIMIT 1`,
374
+ args: [assigned_to, ...scope.args]
375
+ });
376
+ if (existing.rows.length > 0) {
377
+ const existingProject = String(existing.rows[0].project_name ?? "");
378
+ if (existingProject && existingProject !== project_name) {
379
+ process.stderr.write(
380
+ `[create-task] project conflict: ${assigned_to} has in_progress task for "${existingProject}", spawning new instance for "${project_name}"
381
+ `
382
+ );
383
+ projectConflictOpts = { autoInstance: true, maxAutoInstances: 5 };
384
+ }
385
+ }
386
+ } catch {
387
+ }
388
+ try {
389
+ writeDispatchPending(task.id, assigned_to);
390
+ } catch {
391
+ }
392
+ const result = ensureEmployee(assigned_to, exeSession, projectDir, {
393
+ ...autoOpts,
394
+ ...projectConflictOpts,
395
+ runtimeOverride: spawn_runtime ?? void 0,
396
+ modelOverride: effectiveSpawnModel ?? void 0
397
+ });
398
+ switch (result.status) {
399
+ case "intercom_sent":
400
+ dispatchStatus = `
401
+ Dispatched: intercom sent to ${result.sessionName}`;
402
+ break;
403
+ case "intercom_unprocessed":
404
+ dispatchStatus = `
405
+ Dispatched: intercom delivered to ${result.sessionName}`;
406
+ break;
407
+ case "spawned":
408
+ dispatchStatus = `
409
+ Dispatched: spawned ${result.sessionName}`;
410
+ break;
411
+ case "failed":
412
+ dispatchStatus = `
413
+ Dispatch failed: ${result.error ?? "unknown"}`;
414
+ break;
415
+ }
416
+ if (result.status === "failed") {
417
+ try {
418
+ writeDispatchFailed(task.id, assigned_to, result.error ?? "spawn failed", result.sessionName);
419
+ } catch {
420
+ }
421
+ }
422
+ recordOrchestrationEventBestEffort({
423
+ eventType: result.status === "failed" ? "dispatch.failed" : "dispatch.completed",
424
+ source: "create-task.mcp",
425
+ severity: result.status === "failed" ? "warn" : "info",
426
+ taskId: task.id,
427
+ agentId: assigned_to,
428
+ sessionScope: task.sessionScope || callerRoot || exeSession,
429
+ projectName: project_name,
430
+ tmuxSession: result.sessionName || null,
431
+ runtime: dispatchRuntime,
432
+ result: result.status,
433
+ errorCode: result.status === "failed" ? "ensure_employee_failed" : null,
434
+ payload: { priority, error: result.error ?? null }
435
+ });
436
+ try {
437
+ const { sendIntercom: si } = await import("./lib/tmux-routing.js");
438
+ const { listTmuxSessions } = await import("./lib/tmux-status.js");
439
+ if (!autoOpts.autoInstance) {
440
+ const liveSessions = listTmuxSessions();
441
+ for (const s of liveSessions) {
442
+ const agentPart = s.split("-")[0]?.replace(/\d+$/, "") ?? "";
443
+ if (agentPart === assigned_to && s !== result.sessionName) {
444
+ si(s, { force: true });
445
+ }
446
+ }
447
+ }
448
+ } catch {
449
+ }
450
+ if (result.sessionName && result.status !== "failed") {
451
+ try {
452
+ const { getClient: gc } = await import("./lib/database.js");
453
+ await gc().execute({
454
+ // Audited 2026: intentionally unscoped PK update. The task was
455
+ // just created in this request, and WHERE id = ? binds one row.
456
+ sql: `UPDATE tasks
457
+ SET instance_id = ?,
458
+ assigned_tmux = CASE
459
+ WHEN assigned_tmux IS NULL OR assigned_tmux = 'unknown' THEN ?
460
+ ELSE assigned_tmux
461
+ END
462
+ WHERE id = ?`,
463
+ args: [result.sessionName, result.sessionName, task.id]
464
+ });
465
+ } catch {
466
+ }
467
+ try {
468
+ const sessionScope = task.sessionScope || callerRoot || "default";
469
+ const { taskSignalPath: getSignalPath } = await import("./signal-paths-4GOIRLGH.js");
470
+ const signalPath = getSignalPath(sessionScope, assigned_to, task.id);
471
+ writeFileSync(signalPath, JSON.stringify({
472
+ task_id: task.id,
473
+ title,
474
+ priority,
475
+ assigned_by: assignedBy,
476
+ session_scope: sessionScope,
477
+ instance_id: result.sessionName,
478
+ created_at: (/* @__PURE__ */ new Date()).toISOString()
479
+ }), "utf-8");
480
+ } catch {
481
+ }
482
+ }
483
+ try {
484
+ writeDispatchPending(task.id, assigned_to, result.sessionName);
485
+ } catch {
486
+ }
487
+ logTaskDispatch({
488
+ taskId: task.id,
489
+ assignedTo: assigned_to,
490
+ callerRoot,
491
+ exeSession,
492
+ callerSource,
493
+ dispatchResult: result.status,
494
+ sessionName: result.sessionName,
495
+ error: result.error
496
+ });
497
+ } else {
498
+ recordOrchestrationEventBestEffort({
499
+ eventType: "dispatch.failed",
500
+ source: "create-task.mcp",
501
+ severity: "warn",
502
+ taskId: task.id,
503
+ agentId: assigned_to,
504
+ sessionScope: task.sessionScope || callerRoot || null,
505
+ projectName: project_name,
506
+ runtime: dispatchRuntime,
507
+ errorCode: "no_exe_session",
508
+ payload: { priority }
509
+ });
510
+ }
511
+ } catch (dispatchErr) {
512
+ recordOrchestrationEventBestEffort({
513
+ eventType: "dispatch.failed",
514
+ source: "create-task.mcp",
515
+ severity: "warn",
516
+ taskId: task.id,
517
+ agentId: assigned_to,
518
+ sessionScope: task.sessionScope || callerRoot || null,
519
+ projectName: project_name,
520
+ runtime: resolveDispatchRuntime(assigned_to, spawn_runtime ?? null),
521
+ errorCode: "exception"
522
+ });
523
+ process.stderr.write(`[create-task] dispatch error for ${assigned_to}: ${dispatchErr instanceof Error ? dispatchErr.message : String(dispatchErr)}
524
+ ${dispatchErr instanceof Error ? dispatchErr.stack : ""}
525
+ `);
526
+ }
527
+ }
528
+ let dupWarning = "";
529
+ try {
530
+ const { findMatchingBranches } = await import("./branch-hygiene-55TKIWAZ.js");
531
+ const matches = findMatchingBranches(projectDir, { title });
532
+ if (matches.length > 0) {
533
+ const top = matches.slice(0, 3).map((m) => {
534
+ const age = m.ageHours >= 24 ? `${(m.ageHours / 24).toFixed(1)}d` : `${m.ageHours.toFixed(0)}h`;
535
+ return `${m.name} (+${m.ahead} commits, ${age})`;
536
+ }).join(", ");
537
+ dupWarning = `
538
+ \u26A0 Possible existing work \u2014 ${matches.length} branch(es) may already implement this: ${top}. Review before dispatching to avoid redoing work.`;
539
+ }
540
+ } catch {
541
+ }
542
+ let text = `Task created: ${task.id}
543
+ File: ${task.taskFile}
544
+ Assigned to: ${task.assignedTo} [${task.priority.toUpperCase()}]${dispatchStatus}${dupWarning}`;
545
+ if (task.status === "blocked") {
546
+ text += `
547
+ Status: blocked (waiting on ${blocked_by})`;
548
+ }
549
+ if (task.warning) {
550
+ text += `
551
+ Warning: ${task.warning}`;
552
+ }
553
+ return {
554
+ content: [
555
+ {
556
+ type: "text",
557
+ text
558
+ }
559
+ ]
560
+ };
561
+ }
562
+ );
563
+ }
564
+
565
+ export {
566
+ registerCreateTask
567
+ };
@@ -0,0 +1,97 @@
1
+ import {
2
+ listBehaviors
3
+ } from "./chunk-NXL3VKXM.js";
4
+ import {
5
+ loadConfigSync
6
+ } from "./chunk-R36FAN53.js";
7
+
8
+ // src/lib/behaviors-export.ts
9
+ import os from "os";
10
+ import path from "path";
11
+ import {
12
+ existsSync,
13
+ mkdirSync,
14
+ readdirSync,
15
+ statSync,
16
+ unlinkSync,
17
+ writeFileSync
18
+ } from "fs";
19
+ var BEHAVIORS_EXPORT_DIR = path.join(
20
+ os.homedir(),
21
+ ".exe-os",
22
+ "behaviors-export"
23
+ );
24
+ var STALE_EXPORT_AGE_MS = 60 * 60 * 1e3;
25
+ var DEFAULT_BEHAVIOR_LIMIT = 30;
26
+ function getBehaviorLimit() {
27
+ try {
28
+ const cfg = loadConfigSync();
29
+ return cfg.behaviorExportLimit ?? DEFAULT_BEHAVIOR_LIMIT;
30
+ } catch {
31
+ return DEFAULT_BEHAVIOR_LIMIT;
32
+ }
33
+ }
34
+ function sweepStaleBehaviorExports(now = Date.now()) {
35
+ if (!existsSync(BEHAVIORS_EXPORT_DIR)) return;
36
+ let entries;
37
+ try {
38
+ entries = readdirSync(BEHAVIORS_EXPORT_DIR);
39
+ } catch {
40
+ return;
41
+ }
42
+ for (const entry of entries) {
43
+ const filePath = path.join(BEHAVIORS_EXPORT_DIR, entry);
44
+ try {
45
+ const stat = statSync(filePath);
46
+ if (now - stat.mtimeMs > STALE_EXPORT_AGE_MS) {
47
+ unlinkSync(filePath);
48
+ }
49
+ } catch {
50
+ }
51
+ }
52
+ }
53
+ function renderBehaviorLine(row) {
54
+ const tag = row.domain ? `[${row.domain}] ` : "";
55
+ const scope = row.project_name ? ` (${row.project_name})` : "";
56
+ return `- ${tag}${row.content}${scope}`;
57
+ }
58
+ function renderBehaviorExport(behaviors) {
59
+ if (behaviors.length === 0) {
60
+ return "";
61
+ }
62
+ const lines = behaviors.map(renderBehaviorLine);
63
+ return [
64
+ "<system-reminder>",
65
+ "## Your Behavioral Memory",
66
+ "Validated patterns and corrections for this session. Follow them.",
67
+ "Sourced from exe-os Layer 2 (Expertise). Changes apply on next spawn.",
68
+ "",
69
+ ...lines,
70
+ "</system-reminder>",
71
+ ""
72
+ ].join("\n");
73
+ }
74
+ function exportFilePath(agentId, projectName, sessionKey) {
75
+ if (!sessionKey) {
76
+ return path.join(BEHAVIORS_EXPORT_DIR, `${agentId}.md`);
77
+ }
78
+ const safeProject = projectName.replace(/[^a-zA-Z0-9_-]/g, "_");
79
+ return path.join(
80
+ BEHAVIORS_EXPORT_DIR,
81
+ `${agentId}-${safeProject}-${sessionKey}.md`
82
+ );
83
+ }
84
+ async function exportBehaviorsForAgent(agentId, projectName, sessionKey) {
85
+ mkdirSync(BEHAVIORS_EXPORT_DIR, { recursive: true });
86
+ sweepStaleBehaviorExports();
87
+ const behaviors = await listBehaviors(agentId, projectName, getBehaviorLimit());
88
+ if (behaviors.length === 0) return null;
89
+ const body = renderBehaviorExport(behaviors);
90
+ const target = exportFilePath(agentId, projectName, sessionKey);
91
+ writeFileSync(target, body, "utf-8");
92
+ return target;
93
+ }
94
+
95
+ export {
96
+ exportBehaviorsForAgent
97
+ };