@askexenow/exe-os 0.9.384 → 0.9.389

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 (481) hide show
  1. package/deploy/compose/.env.askexe-control-plane.example +6 -0
  2. package/deploy/compose/.env.customer.example +1 -1
  3. package/deploy/compose/.env.example +1 -1
  4. package/deploy/compose/docker-compose.yml +16 -0
  5. package/deploy/compose/generate-env.ts +1 -1
  6. package/deploy/compose/sso-edge/sso-redirect.conf +18 -3
  7. package/deploy/stack-manifests/v0.9.json +1160 -1
  8. package/dist/.dist-verified.json +3 -3
  9. package/dist/{active-agent-F5V4E4UL.js → active-agent-RZ24KSJN.js} +8 -6
  10. package/dist/{active-agent-YTBB4ZQM.js → active-agent-YWSWPIEA.js} +8 -6
  11. package/dist/{agent-defs-generator-7TFISIJQ.js → agent-defs-generator-GY3UBREJ.js} +8 -6
  12. package/dist/{agent-heartbeat-CQPGJIFF.js → agent-heartbeat-GUVUUQVM.js} +1 -1
  13. package/dist/{agent-loop-EZ7LDAGD.js → agent-loop-HPNCH3HK.js} +1 -1
  14. package/dist/{agentic-ontology-XVTUVV7W.js → agentic-ontology-RHYNXEKE.js} +1 -1
  15. package/dist/{artifact-backup-TF6YWQT2.js → artifact-backup-HGUFSIJH.js} +19 -6
  16. package/dist/{backfill-metadata-J6MXIDCW.js → backfill-metadata-XLFASEOD.js} +11 -9
  17. package/dist/{backup-verify-6DVBQMDP.js → backup-verify-TUQEICWA.js} +1 -1
  18. package/dist/{behavior-injection-XDA7ZCYN.js → behavior-injection-GXO7ERGN.js} +14 -12
  19. package/dist/{behavior-promotion-4VLQ7LXK.js → behavior-promotion-V63WIZ4N.js} +13 -11
  20. package/dist/{behaviors-SCCZP7RZ.js → behaviors-RMLDPLOF.js} +18 -11
  21. package/dist/bin/agentic-ontology-backfill.js +12 -10
  22. package/dist/bin/agentic-reflection-backfill.js +13 -11
  23. package/dist/bin/agentic-semantic-label.js +12 -10
  24. package/dist/bin/backfill-conversations.js +11 -9
  25. package/dist/bin/backfill-responses.js +11 -9
  26. package/dist/bin/backfill-vectors.js +13 -11
  27. package/dist/bin/bulk-sync-postgres.js +20 -18
  28. package/dist/bin/cc-doctor.js +15 -13
  29. package/dist/bin/cleanup-stale-review-tasks.js +44 -32
  30. package/dist/bin/cli.js +109 -30
  31. package/dist/bin/customer-readiness.js +55 -25
  32. package/dist/bin/deferred-daemon-restart.js +111 -108
  33. package/dist/bin/exe-actions.js +7 -1
  34. package/dist/bin/exe-agent-config.js +8 -6
  35. package/dist/bin/exe-agent.js +18 -16
  36. package/dist/bin/exe-assign.js +13 -11
  37. package/dist/bin/exe-boot.js +49 -47
  38. package/dist/bin/exe-call.js +9 -7
  39. package/dist/bin/exe-cicd.js +19 -8
  40. package/dist/bin/exe-cloud.js +59 -25
  41. package/dist/bin/exe-config-dump.js +8 -6
  42. package/dist/bin/exe-dispatch.js +23 -21
  43. package/dist/bin/exe-doctor.js +11 -8
  44. package/dist/bin/exe-export-behaviors.js +16 -14
  45. package/dist/bin/exe-forget.js +14 -12
  46. package/dist/bin/exe-gateway.js +12 -10
  47. package/dist/bin/exe-grant.js +6 -6
  48. package/dist/bin/exe-healthcheck.js +15 -13
  49. package/dist/bin/exe-heartbeat.js +28 -26
  50. package/dist/bin/exe-kill.js +28 -26
  51. package/dist/bin/exe-launch-agent.js +35 -33
  52. package/dist/bin/exe-mcp.js +9 -7
  53. package/dist/bin/exe-memory-reads.js +11 -9
  54. package/dist/bin/exe-new-employee.js +13 -11
  55. package/dist/bin/exe-os-mcp-proxy.js +9 -7
  56. package/dist/bin/exe-pending-messages.js +23 -21
  57. package/dist/bin/exe-pending-notifications.js +22 -20
  58. package/dist/bin/exe-pending-reviews.js +23 -21
  59. package/dist/bin/exe-preflight.js +1 -1
  60. package/dist/bin/exe-rename.js +9 -7
  61. package/dist/bin/exe-review.js +59 -55
  62. package/dist/bin/exe-search-quality.js +16 -3
  63. package/dist/bin/exe-search.js +13 -11
  64. package/dist/bin/exe-session-cleanup.js +29 -27
  65. package/dist/bin/exe-settings.js +22 -20
  66. package/dist/bin/exe-start-codex.js +23 -21
  67. package/dist/bin/exe-start-opencode.js +21 -19
  68. package/dist/bin/exe-status.js +24 -22
  69. package/dist/bin/exe-support.js +3 -3
  70. package/dist/bin/exe-team.js +8 -6
  71. package/dist/bin/exe-verify-running-images.js +644 -17
  72. package/dist/bin/git-sweep.js +24 -22
  73. package/dist/bin/graph-backfill.js +12 -10
  74. package/dist/bin/graph-export.js +12 -10
  75. package/dist/bin/hooks-cli.js +4 -4
  76. package/dist/bin/import-history.js +16 -14
  77. package/dist/bin/install.js +113 -110
  78. package/dist/bin/intercom-check.js +5 -5
  79. package/dist/bin/mcp-sessions.js +2 -2
  80. package/dist/bin/orchestration-metrics.js +8 -6
  81. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  82. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  83. package/dist/bin/pre-build-guard.js +55 -16
  84. package/dist/bin/pre-publish.js +1 -1
  85. package/dist/bin/prune-orphan-chunks.js +154 -28
  86. package/dist/bin/reconcile-backlog.js +5 -3
  87. package/dist/bin/registry-proxy.js +1 -1
  88. package/dist/bin/repair-document-chunks.js +11 -9
  89. package/dist/bin/scan-tasks.js +23 -21
  90. package/dist/bin/setup.js +3 -3
  91. package/dist/bin/shard-migrate.js +12 -10
  92. package/dist/bin/stack-update.js +622 -43
  93. package/dist/bin/verify-stack.js +2 -2
  94. package/dist/bin/vps-health-gate.js +1 -1
  95. package/dist/{boot-generation-Q7LGQ3AO.js → boot-generation-VCQXVYGT.js} +7 -5
  96. package/dist/{boot-review-sections-G5774FR5.js → boot-review-sections-3QO6Q7MP.js} +21 -19
  97. package/dist/{branch-hygiene-44WLSOZR.js → branch-hygiene-DDXXI6ZA.js} +59 -21
  98. package/dist/bug-landed-reconciler-TQVNOUCU.js +353 -0
  99. package/dist/build-manifest.json +1269 -1194
  100. package/dist/{capability-cards-I3RHCF4F.js → capability-cards-XPDLT6LU.js} +6 -4
  101. package/dist/{capacity-monitor-7I7GDONU.js → capacity-monitor-N3AW242L.js} +23 -21
  102. package/dist/{catchup-brief-3T5PARIR.js → catchup-brief-3PKX7FUP.js} +29 -27
  103. package/dist/{chunk-C5ISP5FO.js → chunk-2BKJAOO4.js} +11 -1
  104. package/dist/{chunk-JJTPPAZY.js → chunk-2CUQHG6H.js} +1609 -1356
  105. package/dist/{chunk-HU3VD4MQ.js → chunk-2Q2GGYBX.js} +1 -1
  106. package/dist/{chunk-CHIUS5QB.js → chunk-36LMIOVU.js} +9 -9
  107. package/dist/{chunk-46VSBDUW.js → chunk-3DCBDG4T.js} +2 -2
  108. package/dist/{chunk-W3KPQE7H.js → chunk-3GL3E4TD.js} +3 -3
  109. package/dist/{chunk-GL47M7NY.js → chunk-3UD3OF3X.js} +202 -117
  110. package/dist/{chunk-WNBZJSQT.js → chunk-3VW5ZP2F.js} +1 -1
  111. package/dist/{chunk-JDDM6C57.js → chunk-3X74IQBU.js} +1 -1
  112. package/dist/{chunk-NVFNADTX.js → chunk-3ZL4MDQ6.js} +18 -4
  113. package/dist/{chunk-R5E7WNAC.js → chunk-4ESNDGMB.js} +3 -3
  114. package/dist/{chunk-CYCIX7AW.js → chunk-4FLLIQRQ.js} +2 -2
  115. package/dist/{chunk-3RGTLZNO.js → chunk-4GAKF7KR.js} +99 -74
  116. package/dist/{chunk-RVO5O5SR.js → chunk-4S3A52AV.js} +38 -10
  117. package/dist/{chunk-7J2ZQ4XN.js → chunk-4VQ3QR6B.js} +29 -28
  118. package/dist/{chunk-MROSARM5.js → chunk-5BJBTFFQ.js} +7 -1
  119. package/dist/chunk-5LQZABW5.js +6 -0
  120. package/dist/chunk-5ONMHTNI.js +236 -0
  121. package/dist/{chunk-APL7HUE3.js → chunk-5QQJUO3F.js} +200 -31
  122. package/dist/{chunk-UOPCVFVR.js → chunk-5RK75SWH.js} +205 -278
  123. package/dist/{chunk-T5FEAQES.js → chunk-5TYJYGS5.js} +1 -1
  124. package/dist/{chunk-P3QQ52QK.js → chunk-5U6EOTZV.js} +3 -3
  125. package/dist/{chunk-ALRHGEAJ.js → chunk-637FL62O.js} +1 -1
  126. package/dist/{chunk-PUBA5B4M.js → chunk-6L4VIYLZ.js} +33 -19
  127. package/dist/{chunk-VF2KRROX.js → chunk-754P2UXM.js} +1 -1
  128. package/dist/{chunk-CM7N5MBY.js → chunk-7FZG7WP4.js} +5 -5
  129. package/dist/{chunk-NYLJQ2M2.js → chunk-7NEBFB3L.js} +4 -4
  130. package/dist/{chunk-E7C2WNR5.js → chunk-AEIOFFFX.js} +5 -5
  131. package/dist/{chunk-VOVFUKEB.js → chunk-AIB2EWO2.js} +5 -5
  132. package/dist/{chunk-EGOEB42T.js → chunk-AP2C4OGS.js} +3 -3
  133. package/dist/{chunk-MPZ2AVNS.js → chunk-ATNV3BVZ.js} +1 -1
  134. package/dist/{chunk-F4BBMIPG.js → chunk-B4XJQBQB.js} +2 -2
  135. package/dist/{chunk-BPVFZ6Q4.js → chunk-B5EGDNG6.js} +2 -2
  136. package/dist/{chunk-AGC2V7JS.js → chunk-B6CBN6EF.js} +1 -1
  137. package/dist/{chunk-KTKIFXIP.js → chunk-B7FDRN7G.js} +1 -1
  138. package/dist/{chunk-C5HUMAA7.js → chunk-B7WVYLAQ.js} +67 -15
  139. package/dist/chunk-BGVP5RMT.js +185 -0
  140. package/dist/{chunk-FVLNNNH6.js → chunk-BNI4LIU5.js} +35 -4
  141. package/dist/{chunk-P4XLIPB7.js → chunk-BU5JRLZT.js} +1 -1
  142. package/dist/{chunk-PHUHIVD5.js → chunk-C6U7XWOC.js} +34 -5
  143. package/dist/chunk-C7GHNJPW.js +8 -0
  144. package/dist/{chunk-4AR5XKCH.js → chunk-CL2MU3OX.js} +1 -1
  145. package/dist/{chunk-ZPP63JSQ.js → chunk-CL3AB7Z2.js} +1 -1
  146. package/dist/{chunk-FHIFTSPL.js → chunk-CP7XUSOF.js} +8 -3
  147. package/dist/{chunk-3OX34OC3.js → chunk-CUDNRHHT.js} +30 -10
  148. package/dist/chunk-CYUUNIEL.js +21 -0
  149. package/dist/{chunk-P2UY34XE.js → chunk-D4C57S2H.js} +5 -5
  150. package/dist/{chunk-XSUALA32.js → chunk-DDYFNBYV.js} +3 -3
  151. package/dist/{chunk-LSNBTGW4.js → chunk-DPYZW42H.js} +1 -1
  152. package/dist/{chunk-FMIYFHLE.js → chunk-E2PRXEZK.js} +9 -3
  153. package/dist/{chunk-L63V25HS.js → chunk-E54SPUYJ.js} +3 -3
  154. package/dist/{chunk-DMUOTCDN.js → chunk-E5CKRHIZ.js} +1 -1
  155. package/dist/{chunk-BV2IET6B.js → chunk-EVMOKRBC.js} +15 -2
  156. package/dist/{chunk-YLFCH3VA.js → chunk-FDWI3T6I.js} +133 -31
  157. package/dist/{chunk-PWC3C5ME.js → chunk-FNJTCJGY.js} +4 -4
  158. package/dist/{chunk-TNS63ATU.js → chunk-FWRPDSO3.js} +350 -50
  159. package/dist/{chunk-JA3Y5TV6.js → chunk-GDLB6BPM.js} +141 -74
  160. package/dist/{chunk-IGJMS7C5.js → chunk-GOVGG7HU.js} +2 -2
  161. package/dist/{chunk-MB47DRF5.js → chunk-GP7CTIUK.js} +2 -2
  162. package/dist/{chunk-L5EPGGDP.js → chunk-GWAN2BDB.js} +4 -4
  163. package/dist/{chunk-YRQ26MNP.js → chunk-H3YF7X4J.js} +12 -5
  164. package/dist/{chunk-VLBHZ6TF.js → chunk-H6PLIFUE.js} +2 -2
  165. package/dist/{chunk-GSLFH4AI.js → chunk-HRNM3N4Y.js} +6 -15
  166. package/dist/chunk-IG2ISRTF.js +48 -0
  167. package/dist/{chunk-MWEIBVBS.js → chunk-IJCWBYA5.js} +14 -1
  168. package/dist/{chunk-NKEFYE4R.js → chunk-IPTUKX3N.js} +1 -1
  169. package/dist/{chunk-RB3J2WYQ.js → chunk-IVE7H6KA.js} +1 -1
  170. package/dist/{chunk-HA63SH5W.js → chunk-IWY2OGQG.js} +1 -1
  171. package/dist/{chunk-BQEZPRUC.js → chunk-IZWMWJZT.js} +64 -46
  172. package/dist/{chunk-AHESD3KW.js → chunk-J4UVI652.js} +1 -1
  173. package/dist/{chunk-PLII76NJ.js → chunk-JBUCA4OX.js} +33 -6
  174. package/dist/{chunk-2PZTMSMG.js → chunk-JOF4HQDF.js} +5 -5
  175. package/dist/{chunk-OBBO6EJR.js → chunk-JQN3QGSF.js} +1 -1
  176. package/dist/{chunk-P4PIZOL2.js → chunk-JWYIH5DR.js} +3 -3
  177. package/dist/{chunk-3XY57PKT.js → chunk-KZLKE7I3.js} +210 -48
  178. package/dist/{chunk-DYVLEMKS.js → chunk-L3GXMYBK.js} +1 -1
  179. package/dist/{chunk-72V3S44T.js → chunk-LUA4SLJY.js} +46 -19
  180. package/dist/{chunk-ZT4LFTUJ.js → chunk-LW3JCBXP.js} +20 -3
  181. package/dist/{chunk-YLB365YX.js → chunk-M5XHN4OM.js} +3 -3
  182. package/dist/{chunk-VHHX4UCP.js → chunk-MDTWARSF.js} +22 -93
  183. package/dist/{chunk-JFJP6ATJ.js → chunk-MWKXQSF6.js} +3 -2
  184. package/dist/{chunk-VJEJ7JNB.js → chunk-N32DVIKY.js} +1 -1
  185. package/dist/{chunk-MUCNYSJP.js → chunk-NRLJOV7M.js} +32 -4
  186. package/dist/{chunk-PL4CFSQ7.js → chunk-NSXJOSH7.js} +1 -1
  187. package/dist/{chunk-NF5FOSLD.js → chunk-NVTG66CK.js} +1 -1
  188. package/dist/chunk-O45GBJEH.js +1500 -0
  189. package/dist/{chunk-4AAMFWJT.js → chunk-OHZSTZXN.js} +4 -2
  190. package/dist/chunk-OSIS7ZQW.js +344 -0
  191. package/dist/{chunk-E3ZM32LF.js → chunk-P22VFGFK.js} +14 -5
  192. package/dist/{chunk-KILR4FBR.js → chunk-PAFLR7WD.js} +3 -3
  193. package/dist/{chunk-R3CZWFFC.js → chunk-PEYQ6MWO.js} +15 -3
  194. package/dist/{chunk-RDWIKDMY.js → chunk-PZR54BEI.js} +8 -20
  195. package/dist/{chunk-2FKU4ZEO.js → chunk-QDBKMEYY.js} +9 -9
  196. package/dist/{chunk-7UHZBVP3.js → chunk-QDVLVLXP.js} +97 -31
  197. package/dist/{chunk-PRDDPQLC.js → chunk-QLXEQRHD.js} +5 -5
  198. package/dist/{chunk-MUAWCFW6.js → chunk-QNPDXV5V.js} +5 -2
  199. package/dist/{chunk-LR5O2XWZ.js → chunk-QUZYLDNJ.js} +5 -5
  200. package/dist/chunk-RBQUXHYK.js +48 -0
  201. package/dist/{chunk-3SUPEE6H.js → chunk-RDMBSHGG.js} +3 -3
  202. package/dist/{chunk-I5XIW2BP.js → chunk-RGUM474V.js} +7 -7
  203. package/dist/{chunk-OAFENIHN.js → chunk-RJ67XAJU.js} +76 -28
  204. package/dist/{chunk-LFUBEHFW.js → chunk-RT57D7C4.js} +39 -1
  205. package/dist/{chunk-MKM6D7JM.js → chunk-RWG7DLOG.js} +42 -5
  206. package/dist/{chunk-P3UX5EH4.js → chunk-RWKAHHIX.js} +3 -3
  207. package/dist/{chunk-XEBKIWI7.js → chunk-RYNT3HB7.js} +12 -12
  208. package/dist/{chunk-EUGEFBGV.js → chunk-S2V272KJ.js} +3 -3
  209. package/dist/{chunk-W6BZ4UGA.js → chunk-SGYEM2PD.js} +1 -1
  210. package/dist/{chunk-VROK4X2L.js → chunk-SJP57MQM.js} +1 -1
  211. package/dist/{chunk-5MVKTNZP.js → chunk-SL4JWAMQ.js} +54 -4
  212. package/dist/{chunk-MOANZQXF.js → chunk-SLMKLEU6.js} +1 -1
  213. package/dist/{chunk-RZN2LEAK.js → chunk-SQA7XCYI.js} +3 -3
  214. package/dist/{chunk-4YNA3CM6.js → chunk-SSFS4NCH.js} +262 -56
  215. package/dist/{chunk-6FIC57PH.js → chunk-T4P2G3PO.js} +1 -1
  216. package/dist/{chunk-5U2IJBFV.js → chunk-TA3B4N24.js} +1 -1
  217. package/dist/{chunk-ZOTTYCP5.js → chunk-TEWWBVQP.js} +40 -4
  218. package/dist/{chunk-SDYWZRPN.js → chunk-TLSFGXXE.js} +1 -1
  219. package/dist/{chunk-L3VUW5M4.js → chunk-TQS2YHLB.js} +1 -1
  220. package/dist/{chunk-KXYKSLW4.js → chunk-TU4M757W.js} +399 -116
  221. package/dist/{chunk-MC4IM2CC.js → chunk-TYD4F4XU.js} +6 -6
  222. package/dist/{chunk-TKS5GMYA.js → chunk-U44Y7RC7.js} +2 -0
  223. package/dist/{chunk-B7AMNZTC.js → chunk-UKBPEEEQ.js} +2 -2
  224. package/dist/{chunk-ZBPZDADW.js → chunk-UWVXQEQQ.js} +467 -78
  225. package/dist/{chunk-P2VVMGMI.js → chunk-V4WH3FV7.js} +35 -16
  226. package/dist/{worktree-ownership-guard-O6JQF2CL.js → chunk-V6F4I2XY.js} +13 -14
  227. package/dist/{chunk-JFTUAV4J.js → chunk-VBKUESIW.js} +1 -1
  228. package/dist/{chunk-AZSTIAVL.js → chunk-VBPYYJPC.js} +1 -1
  229. package/dist/{chunk-LKTN22L6.js → chunk-VIP4LKLO.js} +57 -24
  230. package/dist/{chunk-L5CGXEZC.js → chunk-WAAGVFFN.js} +63 -71
  231. package/dist/{chunk-D3LXVAIQ.js → chunk-WC7AE3PT.js} +244 -103
  232. package/dist/{chunk-EOTZSAQL.js → chunk-WUCUDHKR.js} +1 -1
  233. package/dist/{chunk-VF3BZOZK.js → chunk-X7HZHKY4.js} +50 -3
  234. package/dist/{chunk-LFBLQE2P.js → chunk-XCAKYVKI.js} +1 -1
  235. package/dist/{chunk-UXN4BICC.js → chunk-XMX5J52Z.js} +1 -1
  236. package/dist/{chunk-6YDY6ZTD.js → chunk-XTCXGWTV.js} +9 -4
  237. package/dist/{chunk-XUZK23V7.js → chunk-XW2FW6LS.js} +2 -2
  238. package/dist/{chunk-CH7BUBP3.js → chunk-XWVHUDEK.js} +5 -4
  239. package/dist/{chunk-S26CV7BE.js → chunk-YA5LK6KB.js} +45 -8
  240. package/dist/{chunk-ELCRJGCH.js → chunk-YMRQIENV.js} +2 -2
  241. package/dist/{chunk-QNZ4562V.js → chunk-Z3LXWCB7.js} +1 -1
  242. package/dist/{chunk-EYMFVITZ.js → chunk-Z7I6NQMA.js} +2 -2
  243. package/dist/{chunk-6BJCDWSM.js → chunk-ZB4FS2EG.js} +1 -1
  244. package/dist/{chunk-ZAEUEDTN.js → chunk-ZD6FZ3WL.js} +1 -1
  245. package/dist/{chunk-FEU6QEEL.js → chunk-ZM6EZAVY.js} +1 -0
  246. package/dist/{chunk-2KY7WZZF.js → chunk-ZPA4R2UI.js} +1 -1
  247. package/dist/chunk-ZPPPHVSU.js +285 -0
  248. package/dist/{chunk-ELEGH4DX.js → chunk-ZUGQPYUY.js} +51 -4
  249. package/dist/{chunk-UX2EO653.js → chunk-ZZWFZ46U.js} +66 -8
  250. package/dist/{cleanup-graph-garbage-VQAJ2RBT.js → cleanup-graph-garbage-HFUD5ZQT.js} +12 -10
  251. package/dist/{cloud-sync-command-J7NEFUY7.js → cloud-sync-command-3JHJJKPN.js} +25 -3
  252. package/dist/{cloud-sync-db-init-KWEMNMGA.js → cloud-sync-db-init-2LHIQOSF.js} +1 -1
  253. package/dist/{cloud-sync-shutdown-P63AUTUI.js → cloud-sync-shutdown-ZXAXA3Z7.js} +6 -4
  254. package/dist/{cloud-sync-state-QF3TMMJ4.js → cloud-sync-state-VSQFGPP6.js} +1 -1
  255. package/dist/{co-activation-7IHRPBZN.js → co-activation-NX4EH4AP.js} +6 -4
  256. package/dist/{co-occurrence-R5AG4OAU.js → co-occurrence-5LBYCW3U.js} +10 -8
  257. package/dist/{consent-passphrase-5ZBDJ5G7.js → consent-passphrase-65W3DJIJ.js} +2 -2
  258. package/dist/{content-extractor-ZLXC6GNR.js → content-extractor-OGXETBOX.js} +2 -2
  259. package/dist/{conversation-entity-extractor-7FRKLLBD.js → conversation-entity-extractor-FQCOAH4F.js} +5 -4
  260. package/dist/conversations-retention-XTBFJBUM.js +166 -0
  261. package/dist/{crdt-sync-IFRZOEIS.js → crdt-sync-7TDUBTLH.js} +4 -4
  262. package/dist/{crm-webhook-L2S63ASV.js → crm-webhook-776JTY55.js} +2 -2
  263. package/dist/{cto-delegation-gate-3WU7OHX7.js → cto-delegation-gate-ZNUWVYCN.js} +25 -23
  264. package/dist/{daemon-orchestration-3VQYKLOR.js → daemon-orchestration-76BOFDEP.js} +30 -24
  265. package/dist/{doc-graph-extractor-YIR5E7OF.js → doc-graph-extractor-F724KZJX.js} +10 -8
  266. package/dist/{documents-QEHPTYIY.js → documents-Q24V4GRD.js} +13 -11
  267. package/dist/{dreaming-LNFE7DTN.js → dreaming-IY6NQTSP.js} +27 -25
  268. package/dist/{employee-boot-brief-ZTXDYNWM.js → employee-boot-brief-CCTXO5DQ.js} +35 -29
  269. package/dist/{entity-boost-R5N6JWXD.js → entity-boost-XGOB7HDM.js} +1 -1
  270. package/dist/{exe-drift-WYSJVZFO.js → exe-drift-NEPXLNGP.js} +7 -5
  271. package/dist/{exe-export-GOLNAEAV.js → exe-export-ZHJQFKR2.js} +14 -12
  272. package/dist/{exe-import-U4BSI6OH.js → exe-import-7SVNI4FW.js} +14 -12
  273. package/dist/{exe-key-V42G3NGO.js → exe-key-QJKU56WZ.js} +119 -108
  274. package/dist/{exe-org-U4GLQ6OP.js → exe-org-SJXHLV6K.js} +76 -51
  275. package/dist/{exe-snapshot-U7ONBYNY.js → exe-snapshot-EFWPXTXE.js} +45 -36
  276. package/dist/{fast-db-init-W3NGKAEU.js → fast-db-init-BQZOQNT3.js} +1 -1
  277. package/dist/{founder-context-ZSIBRVDM.js → founder-context-KG2ZAOXY.js} +2 -2
  278. package/dist/{founder-monitor-envelope-L3IWZLFY.js → founder-monitor-envelope-NYB5LLU4.js} +4 -4
  279. package/dist/gateway/index.js +20 -18
  280. package/dist/{gateway-client-DJFCVIPT.js → gateway-client-ODMUXUL3.js} +1 -1
  281. package/dist/{git-staleness-OF24QXFZ.js → git-staleness-OPGEAJA7.js} +6 -4
  282. package/dist/{global-procedures-WSIOWO43.js → global-procedures-3KXY4LL6.js} +8 -6
  283. package/dist/{graph-auto-extract-IEVVN3L3.js → graph-auto-extract-I7H2F5NJ.js} +10 -8
  284. package/dist/{graph-query-JDZWAVCU.js → graph-query-E7JBSNY5.js} +1 -1
  285. package/dist/{graph-rag-BKAD2XQA.js → graph-rag-H24CMFP2.js} +5 -4
  286. package/dist/{hook-integrity-TPWDGX2M.js → hook-integrity-PGQ3OX4S.js} +1 -1
  287. package/dist/{hook-prefetch-FD6VGJJA.js → hook-prefetch-7AZJER6Z.js} +23 -21
  288. package/dist/hook-registration-liveness-NGQRFKAA.js +11 -0
  289. package/dist/hooks/bug-report-worker.js +26 -24
  290. package/dist/hooks/codex-stop-task-finalizer.js +28 -26
  291. package/dist/hooks/commit-complete.js +26 -24
  292. package/dist/hooks/error-recall.js +16 -14
  293. package/dist/hooks/exe-heartbeat-hook.js +9 -7
  294. package/dist/hooks/ingest-worker.js +12 -10
  295. package/dist/hooks/ingest.js +22 -17
  296. package/dist/hooks/instructions-loaded.js +11 -9
  297. package/dist/hooks/manifest.json +20 -20
  298. package/dist/hooks/notification.js +10 -8
  299. package/dist/hooks/post-compact.js +9 -7
  300. package/dist/hooks/post-tool-combined.js +14 -14
  301. package/dist/hooks/pre-compact.js +26 -24
  302. package/dist/hooks/pre-tool-use.js +2 -2
  303. package/dist/hooks/prompt-submit.js +47 -41
  304. package/dist/hooks/session-end.js +38 -42
  305. package/dist/hooks/session-start.js +26 -18
  306. package/dist/hooks/stop.js +29 -27
  307. package/dist/hooks/subagent-stop.js +29 -27
  308. package/dist/hooks/summary-worker.js +32 -30
  309. package/dist/index.js +37 -35
  310. package/dist/{installer-OTI5SA43.js → installer-2ZS3LHCU.js} +12 -9
  311. package/dist/{installer-NMOBSEZ2.js → installer-NH3A3HWC.js} +14 -9
  312. package/dist/{installer-SRJGE4GU.js → installer-UJ73PGRD.js} +21 -9
  313. package/dist/{intercom-queue-4FFXCBHO.js → intercom-queue-OE25GJF2.js} +21 -19
  314. package/dist/lib/agent-config.js +2 -2
  315. package/dist/lib/cloud-sync.js +24 -18
  316. package/dist/lib/consolidation.js +13 -11
  317. package/dist/lib/crypto.js +3 -3
  318. package/dist/lib/database.js +6 -4
  319. package/dist/lib/db-backup.js +1 -1
  320. package/dist/lib/db-write-worker-client.js +3 -1
  321. package/dist/lib/db-write-worker.js +65 -89
  322. package/dist/lib/db.js +6 -4
  323. package/dist/lib/delivery-truth.js +5 -1
  324. package/dist/lib/device-registry.js +1 -1
  325. package/dist/lib/embedder.js +2 -2
  326. package/dist/lib/employee-templates.js +9 -7
  327. package/dist/lib/employees.js +6 -4
  328. package/dist/lib/exe-daemon.js +425 -314
  329. package/dist/lib/file-grep.js +15 -21
  330. package/dist/lib/hybrid-search.js +19 -13
  331. package/dist/lib/identity-templates.js +1 -1
  332. package/dist/lib/identity.js +6 -4
  333. package/dist/lib/keychain.js +1 -1
  334. package/dist/lib/license.js +22 -6
  335. package/dist/lib/messaging.js +22 -20
  336. package/dist/lib/post-tool-memory.js +10 -8
  337. package/dist/lib/registry-proxy.js +1 -1
  338. package/dist/lib/reminders.js +7 -5
  339. package/dist/lib/runtime-table.js +1 -1
  340. package/dist/lib/schedules.js +12 -10
  341. package/dist/lib/session-registry.js +8 -6
  342. package/dist/lib/skill-learning.js +13 -11
  343. package/dist/lib/status-brief.js +2 -2
  344. package/dist/lib/store.js +17 -9
  345. package/dist/lib/task-router.js +7 -5
  346. package/dist/lib/tasks.js +23 -21
  347. package/dist/lib/tmux-routing.js +21 -19
  348. package/dist/lib/tmux-status.js +4 -1
  349. package/dist/lib/token-spend.js +7 -5
  350. package/dist/lib/ws-client.js +1 -1
  351. package/dist/{license-gate-R4JWTWM4.js → license-gate-XQ2KN5I5.js} +3 -3
  352. package/dist/{license-recheck-3MBJ4IJX.js → license-recheck-IIBKR2V5.js} +1 -1
  353. package/dist/{license-sync-BVSG3WMW.js → license-sync-76JVI2M5.js} +151 -8
  354. package/dist/{local-secret-inventory-JWNBHZZ4.js → local-secret-inventory-MJT7NJLY.js} +2 -2
  355. package/dist/{mailbox-inbox-MTAT4MXX.js → mailbox-inbox-BPZP4GIZ.js} +1 -1
  356. package/dist/maintenance-worker-54VZTFIK.js +371 -0
  357. package/dist/mcp/register-tools.js +110 -107
  358. package/dist/mcp/server.js +113 -110
  359. package/dist/mcp/tools/complete-reminder.js +8 -6
  360. package/dist/mcp/tools/create-reminder.js +8 -6
  361. package/dist/mcp/tools/create-task.js +26 -24
  362. package/dist/mcp/tools/deactivate-behavior.js +15 -13
  363. package/dist/mcp/tools/list-reminders.js +8 -6
  364. package/dist/mcp/tools/list-tasks.js +26 -24
  365. package/dist/mcp/tools/send-message.js +25 -23
  366. package/dist/mcp/tools/update-task.js +24 -22
  367. package/dist/{mcp-child-registry-TIZERM7O.js → mcp-child-registry-5VUG5ATZ.js} +1 -1
  368. package/dist/{mcp-http-config-VUMSFWFH.js → mcp-http-config-SKXESWHA.js} +9 -7
  369. package/dist/{mcp-session-identity-DZHWEJRV.js → mcp-session-identity-HYMLJXXA.js} +21 -19
  370. package/dist/{memory-cards-JVXTMSAT.js → memory-cards-PAZDUQ3B.js} +16 -32
  371. package/dist/{memory-graph-extractor-PPBJMYFJ.js → memory-graph-extractor-BC6QKBY6.js} +11 -9
  372. package/dist/{memory-poisoning-defense-K5Q74XQ4.js → memory-poisoning-defense-BRGIHF6J.js} +9 -7
  373. package/dist/{memory-pressure-watchdog-YMJH5CSA.js → memory-pressure-watchdog-HR6TPOMT.js} +22 -20
  374. package/dist/{memory-reflection-7BZWIHRE.js → memory-reflection-LO7VFBL3.js} +38 -59
  375. package/dist/memory-write-repository-J25USX63.js +16 -0
  376. package/dist/{monitor-grants-Q7X3MYQP.js → monitor-grants-YQTO6NWR.js} +3 -3
  377. package/dist/{monitor-identity-ZQB4IXEE.js → monitor-identity-POVTG76Y.js} +2 -2
  378. package/dist/{notification-ledger-XRAXL5OI.js → notification-ledger-KLD6GZTG.js} +22 -20
  379. package/dist/{notifications-JE3PX55X.js → notifications-3R6HNHDR.js} +21 -19
  380. package/dist/{orchestration-events-JCQ5F5IJ.js → orchestration-events-CHY3GOJD.js} +7 -5
  381. package/dist/{orchestrator-X65INDTR.js → orchestrator-GAL3HOAD.js} +23 -21
  382. package/dist/{org-brief-session-3PQ22UIX.js → org-brief-session-LQ2DBYVF.js} +17 -15
  383. package/dist/{org-consent-policy-VGELJ7K7.js → org-consent-policy-KFUP7QPG.js} +5 -5
  384. package/dist/{org-join-6TO5ZYUZ.js → org-join-MXZCIQWX.js} +8 -8
  385. package/dist/{org-key-admin-XHYVRRAZ.js → org-key-admin-4UK6QUT7.js} +9 -9
  386. package/dist/{org-key-pin-TTTYGTQL.js → org-key-pin-ZOX4OM3O.js} +3 -3
  387. package/dist/{org-membership-Y7T2BS57.js → org-membership-D5TPN45F.js} +4 -4
  388. package/dist/{org-partner-config-OP4NEUNF.js → org-partner-config-3FXSYPQA.js} +7 -7
  389. package/dist/{org-partner-runtime-YNVUNT2R.js → org-partner-runtime-TH3LMPII.js} +20 -16
  390. package/dist/{org-row-visibility-JBBXNYXD.js → org-row-visibility-Y5R33C5U.js} +1 -1
  391. package/dist/{pipeline-router-EIBB7QNG.js → pipeline-router-E2JZLDK6.js} +7 -5
  392. package/dist/{plan-limits-MEWXYLEN.js → plan-limits-NYI6R4IK.js} +9 -7
  393. package/dist/{platform-procedures-Z7ZGBJWN.js → platform-procedures-RTD5E3BD.js} +5 -3
  394. package/dist/{pre-tool-use-impl-C6KJY22W.js → pre-tool-use-impl-LT4FRXBP.js} +127 -83
  395. package/dist/{project-boot-VEYFCCSL.js → project-boot-LIMXQKAF.js} +25 -17
  396. package/dist/{project-name-UYORSNGE.js → project-name-V62GWALX.js} +7 -5
  397. package/dist/{projection-worker-WYFDWS57.js → projection-worker-KLE3IZQ2.js} +5 -2
  398. package/dist/{prospective-memory-E6XBQFJA.js → prospective-memory-HRN7JFT2.js} +6 -4
  399. package/dist/{push-notifications-M7YU63FY.js → push-notifications-XC6EQEXF.js} +22 -20
  400. package/dist/{reproject-worktree-memories-B5XMGJSD.js → reproject-worktree-memories-4CAVZSFE.js} +21 -19
  401. package/dist/{reranker-SRA4BR7N.js → reranker-2RU6IIX2.js} +1 -1
  402. package/dist/{retrieval-health-P2JPZUPV.js → retrieval-health-4Q5TOV2S.js} +1 -1
  403. package/dist/{review-polling-KQPN7IQE.js → review-polling-WOWIMBCL.js} +22 -20
  404. package/dist/runtime/index.js +30 -28
  405. package/dist/{session-events-6LDDKKY3.js → session-events-OPMS2C5F.js} +22 -20
  406. package/dist/{session-kill-telemetry-5DSRGWCL.js → session-kill-telemetry-3GWATSIX.js} +22 -20
  407. package/dist/{session-scope-XG5R3P3D.js → session-scope-TIRGR4MH.js} +21 -19
  408. package/dist/{setup-wizard-7QFLZIKT.js → setup-wizard-B2JBVGNH.js} +3 -3
  409. package/dist/{shard-manager-HHHHV2KZ.js → shard-manager-C7LYX6E4.js} +5 -1
  410. package/dist/{skill-refinement-I5RMAHSC.js → skill-refinement-FWQFYNBI.js} +7 -5
  411. package/dist/skill-retrieval-PPLFC5RY.js +166 -0
  412. package/dist/skill-usage-NDB67PU2.js +25 -0
  413. package/dist/{stack-generate-manifest-AKMZ3AUX.js → stack-generate-manifest-AXI55MEQ.js} +6 -6
  414. package/dist/{stack-promote-34CE2HHF.js → stack-promote-6N23OGZY.js} +6 -6
  415. package/dist/stack-release-2CXFYVWM.js +2770 -0
  416. package/dist/{stack-update-ZQQ5YYPJ.js → stack-update-U53FBVCQ.js} +13 -5
  417. package/dist/{steward-gate-AQJ6KT2C.js → steward-gate-TUA3QCN7.js} +7 -5
  418. package/dist/{subagent-brief-injection-3GU7YAWY.js → subagent-brief-injection-N52RWYFZ.js} +34 -32
  419. package/dist/{subagent-spawn-ledger-52I66CLW.js → subagent-spawn-ledger-OI23OT4I.js} +1 -1
  420. package/dist/support-bug-actions-XWCJI6S5.js +30 -0
  421. package/dist/support-inbox-MMVTCXRX.js +77 -0
  422. package/dist/{support-outbox-KNI3FR3G.js → support-outbox-2TG2UV6J.js} +2 -2
  423. package/dist/{task-enforcement-CAA6D2MH.js → task-enforcement-JDMBAAOY.js} +22 -20
  424. package/dist/{task-request-inbox-QBZVU66E.js → task-request-inbox-PKJCYKJV.js} +9 -5
  425. package/dist/{task-scope-NHXB4ZRN.js → task-scope-32HQEV6W.js} +27 -19
  426. package/dist/{tasks-crud-JHSWL5NM.js → tasks-crud-CYKUKS3F.js} +21 -19
  427. package/dist/{tasks-notify-7PBE4U7T.js → tasks-notify-YND5MKWJ.js} +22 -20
  428. package/dist/{tasks-review-PPPVEE62.js → tasks-review-CG2A5GM3.js} +23 -19
  429. package/dist/{telemetry-upload-YU2VRNHX.js → telemetry-upload-WLUMEFAB.js} +11 -9
  430. package/dist/{token-budget-QCMWKG3K.js → token-budget-3YHAY5LL.js} +7 -5
  431. package/dist/{tool-capability-index-7AWQAJRP.js → tool-capability-index-2ADOWH43.js} +2 -2
  432. package/dist/{tool-gates-5Q3RSQEG.js → tool-gates-7ENOOYMR.js} +5 -3
  433. package/dist/{tool-gates-QD26D2NE.js → tool-gates-EKJTLVGN.js} +1 -1
  434. package/dist/{tool-telemetry-LTOIC64I.js → tool-telemetry-VUP7S6HC.js} +1 -1
  435. package/dist/tui/App.js +59 -35
  436. package/dist/{tui-data-NDBXD6U7.js → tui-data-BOQTOW2G.js} +25 -23
  437. package/dist/{update-support-BMJM4NG7.js → update-support-WT3S3AQ4.js} +21 -21
  438. package/dist/{whatsapp-QQLDAHUX.js → whatsapp-OZGIF2EM.js} +2 -2
  439. package/dist/{wiki-acl-W6WDCVCP.js → wiki-acl-LTEQJVDA.js} +1 -1
  440. package/dist/{work-claims-6DM32MGO.js → work-claims-CMV2GWIW.js} +8 -6
  441. package/dist/{work-state-heartbeat-HG7D4AWJ.js → work-state-heartbeat-S45TXK4M.js} +1 -1
  442. package/dist/{worker-gate-FTMW7GBB.js → worker-gate-7Z6NMM3G.js} +1 -1
  443. package/dist/{workflow-engine-ZWC6CCXE.js → workflow-engine-ZSQDXZQ7.js} +2 -2
  444. package/dist/{worktree-EMQCPGFE.js → worktree-NMWDVT6N.js} +8 -6
  445. package/dist/worktree-ownership-guard-ZVIWJAOP.js +35 -0
  446. package/dist/{worktree-sweep-XVUJZBXV.js → worktree-sweep-Q62ZIT3U.js} +9 -7
  447. package/package.json +14 -8
  448. package/release-notes.json +7 -41
  449. package/src/commands/exe/afk.md +6 -0
  450. package/src/commands/exe/call.md +6 -0
  451. package/src/commands/exe/employee-heartbeat.md +6 -0
  452. package/src/commands/exe/intercom.md +6 -0
  453. package/src/commands/exe/kill.md +6 -0
  454. package/src/commands/exe/launch.md +6 -0
  455. package/src/commands/exe/logs.md +1 -1
  456. package/src/commands/exe/sessions.md +6 -0
  457. package/src/commands/exe/setup.md +7 -3
  458. package/src/commands/exe/status.md +6 -0
  459. package/src/commands/exe-reference.md +25 -36
  460. package/src/commands/exe.md +19 -28
  461. package/stack.release.json +11 -11
  462. package/dist/chunk-3B6FLNLV.js +0 -30
  463. package/dist/chunk-FXU7JOXK.js +0 -6
  464. package/dist/chunk-QFAFKEB5.js +0 -820
  465. package/dist/conversations-retention-C4BLKFEL.js +0 -54
  466. package/dist/stack-release-5PGWV5D4.js +0 -1607
  467. package/dist/support-inbox-NY5TB3FN.js +0 -51
  468. /package/dist/{chunk-U2D6PJ5T.js → chunk-65G7ZTGE.js} +0 -0
  469. /package/dist/{chunk-DN3ZR3UE.js → chunk-CP7Z35MJ.js} +0 -0
  470. /package/dist/{chunk-XDVOGDBC.js → chunk-KBBWALJV.js} +0 -0
  471. /package/dist/{chunk-JRIH6I7D.js → chunk-LZXYPTY4.js} +0 -0
  472. /package/dist/{chunk-GIRD7O5X.js → chunk-MCWEW2SG.js} +0 -0
  473. /package/dist/{chunk-TKAU7IJ2.js → chunk-MQHUJLCA.js} +0 -0
  474. /package/dist/{chunk-M4XY4JRK.js → chunk-O53LTOXK.js} +0 -0
  475. /package/dist/{chunk-DZN7SDY2.js → chunk-OSVTH3SG.js} +0 -0
  476. /package/dist/{chunk-AJK2PVQW.js → chunk-QXXEXGX3.js} +0 -0
  477. /package/dist/{chunk-AWWDKF22.js → chunk-SFWNTO2F.js} +0 -0
  478. /package/dist/{chunk-2Q2CD6CD.js → chunk-WC5HF2FN.js} +0 -0
  479. /package/dist/{core-memory-O6D5UC3T.js → core-memory-MMMW3TF3.js} +0 -0
  480. /package/dist/{memory-isolation-EBFFC6HF.js → memory-isolation-67ACKQ2M.js} +0 -0
  481. /package/dist/{oauth-server-ZKBUHDFI.js → oauth-server-OILIKR7D.js} +0 -0
@@ -17,17 +17,21 @@ function triggerCooldownKey(triggerId, record) {
17
17
  const recordPart = rid == null ? "_" : String(rid).slice(0, 200);
18
18
  return `${triggerId}:${recordPart}`;
19
19
  }
20
- async function isTriggerFireAllowed(triggerId, record) {
21
- if (TRIGGER_COOLDOWN_MS <= 0) return true;
20
+ async function triggerCooldownVerdict(triggerId, record) {
21
+ if (TRIGGER_COOLDOWN_MS <= 0) return "allow";
22
22
  try {
23
- const { recordTriggerFire } = await import("./lib/database.js");
23
+ const { recordTriggerFire, isInitialized } = await import("./lib/database.js");
24
+ if (!isInitialized()) return "allow";
24
25
  const { allowed } = await recordTriggerFire(
25
26
  triggerCooldownKey(triggerId, record),
26
27
  TRIGGER_COOLDOWN_MS
27
28
  );
28
- return allowed;
29
- } catch {
30
- return true;
29
+ return allowed ? "allow" : "suppress";
30
+ } catch (err) {
31
+ console.error(
32
+ `[trigger-engine] Cooldown store unreadable for trigger ${triggerId}: ${err instanceof Error ? err.message : String(err)}`
33
+ );
34
+ return "unknown";
31
35
  }
32
36
  }
33
37
  var OUTBOUND_RATE_LIMIT_PER_HOUR = 100;
@@ -111,17 +115,25 @@ function evaluateConditions(conditions, record) {
111
115
  }
112
116
  function loadTriggers(project) {
113
117
  if (!existsSync(TRIGGERS_PATH)) return [];
118
+ let all;
114
119
  try {
115
- const raw = readFileSync(TRIGGERS_PATH, "utf-8");
116
- const all = JSON.parse(raw);
117
- if (!Array.isArray(all)) return [];
118
- if (project) {
119
- return all.filter((t) => !t.project || t.project === project);
120
- }
121
- return all;
122
- } catch {
123
- return [];
120
+ all = JSON.parse(readFileSync(TRIGGERS_PATH, "utf-8"));
121
+ } catch (err) {
122
+ throw new Error(
123
+ `refusing to treat ${TRIGGERS_PATH} as empty: the file exists but could not be read (${err.message}). Saving over it would destroy every configured trigger; running against it would silently fire none.`,
124
+ { cause: err }
125
+ );
124
126
  }
127
+ if (!Array.isArray(all)) {
128
+ throw new Error(
129
+ `refusing to treat ${TRIGGERS_PATH} as empty: the file parsed to ${all === null ? "null" : typeof all}, not an array of triggers. Saving over it would destroy every configured trigger.`
130
+ );
131
+ }
132
+ const triggers = all;
133
+ if (project) {
134
+ return triggers.filter((t) => !t.project || t.project === project);
135
+ }
136
+ return triggers;
125
137
  }
126
138
  function saveTriggers(triggers) {
127
139
  const dir = path.dirname(TRIGGERS_PATH);
@@ -379,12 +391,19 @@ async function _processCRMEventInner(event, executor, triggersOverride) {
379
391
  if (!trigger.enabled) continue;
380
392
  if (trigger.event !== eventString && trigger.event !== "*") continue;
381
393
  if (!evaluateConditions(trigger.conditions, event.record)) continue;
382
- if (!await isTriggerFireAllowed(trigger.id, event.record)) {
394
+ const verdict = await triggerCooldownVerdict(trigger.id, event.record);
395
+ if (verdict === "suppress") {
383
396
  console.warn(
384
397
  `[trigger-engine] Suppressed "${trigger.name}" on ${eventString}: re-fired within ${TRIGGER_COOLDOWN_MS}ms cooldown for the same record (loop guard).`
385
398
  );
386
399
  continue;
387
400
  }
401
+ if (verdict === "unknown") {
402
+ console.error(
403
+ `[trigger-engine] Suppressed "${trigger.name}" on ${eventString}: the persisted cooldown could not be consulted, so a cross-process re-fire cannot be ruled out. Fix the cooldown store (or set EXE_TRIGGER_COOLDOWN_MS=0 to disable the window deliberately) to resume firing.`
404
+ );
405
+ continue;
406
+ }
388
407
  const actionResults = [];
389
408
  for (const action of trigger.actions) {
390
409
  const result = await executeAction(action, event.record, executor, trigger.name);
@@ -1,7 +1,3 @@
1
- import {
2
- LockTimeoutError,
3
- withLock
4
- } from "./chunk-5WA4DG2A.js";
5
1
  import {
6
2
  basename,
7
3
  isLeadingAssignment,
@@ -9,15 +5,16 @@ import {
9
5
  shellDashCScriptIndex,
10
6
  tokenizeShell
11
7
  } from "./chunk-NB5IRTC4.js";
8
+ import {
9
+ LockTimeoutError,
10
+ withLock
11
+ } from "./chunk-5WA4DG2A.js";
12
12
  import {
13
13
  EXE_AI_DIR
14
14
  } from "./chunk-MMS2HBRT.js";
15
- import "./chunk-RH4AH3YB.js";
16
15
  import {
17
16
  atomicWriteJsonSync
18
17
  } from "./chunk-HSGBZSCA.js";
19
- import "./chunk-JKKZGDLP.js";
20
- import "./chunk-MLKGABMK.js";
21
18
 
22
19
  // src/lib/worktree-ownership-guard.ts
23
20
  import path from "path";
@@ -406,16 +403,18 @@ function isReadOnlyTokens(tokens, cwd, worktreeRoot, depth) {
406
403
  }
407
404
  return READ_ONLY_COMMANDS.has(base);
408
405
  }
406
+
409
407
  export {
410
408
  OWNERSHIP_STAMP_TTL_MS,
411
- evaluateNestedSpawnGuard,
412
- evaluateWorktreeOwnership,
413
409
  getWorktreeOwner,
414
- isEscapeOrReadOnly,
415
- isSessionAliveFs,
410
+ evaluateNestedSpawnGuard,
416
411
  ownerLockDirFs,
417
- pidFromSessionKey,
418
- readOwnerSessionFs,
419
412
  readOwnerStampFs,
420
- writeOwnerSessionFs
413
+ readOwnerSessionFs,
414
+ writeOwnerSessionFs,
415
+ pidFromSessionKey,
416
+ isSessionAliveFs,
417
+ evaluateWorktreeOwnership,
418
+ isEscapeOrReadOnly,
419
+ isInertAssignment
421
420
  };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getClient
3
- } from "./chunk-GL47M7NY.js";
3
+ } from "./chunk-3UD3OF3X.js";
4
4
 
5
5
  // src/lib/boot-generation.ts
6
6
  var SYNC_META_KEY = "daemon_boot_generation";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  redactSecrets
3
- } from "./chunk-ELEGH4DX.js";
3
+ } from "./chunk-ZUGQPYUY.js";
4
4
  import {
5
5
  EXE_AI_DIR
6
6
  } from "./chunk-MMS2HBRT.js";
@@ -7,10 +7,10 @@ import {
7
7
  } from "./chunk-S2YTU74T.js";
8
8
  import {
9
9
  createTask
10
- } from "./chunk-2FKU4ZEO.js";
10
+ } from "./chunk-QDBKMEYY.js";
11
11
  import {
12
12
  getActiveAgent
13
- } from "./chunk-F4BBMIPG.js";
13
+ } from "./chunk-B4XJQBQB.js";
14
14
  import {
15
15
  deriveTaskIdempotencyKey,
16
16
  ensureEmployeeAsync,
@@ -18,13 +18,13 @@ import {
18
18
  isExeSession,
19
19
  logTaskDispatch,
20
20
  resolveExeSession
21
- } from "./chunk-7UHZBVP3.js";
21
+ } from "./chunk-QDVLVLXP.js";
22
22
  import {
23
23
  getPaneCwdAsync
24
- } from "./chunk-PUBA5B4M.js";
24
+ } from "./chunk-6L4VIYLZ.js";
25
25
  import {
26
26
  recordOrchestrationEventBestEffort
27
- } from "./chunk-LSNBTGW4.js";
27
+ } from "./chunk-DPYZW42H.js";
28
28
  import {
29
29
  releaseDispatchClaim,
30
30
  tryAcquireDispatchClaim,
@@ -34,10 +34,10 @@ import {
34
34
  import {
35
35
  getAgentRuntime,
36
36
  validateRuntimeModel
37
- } from "./chunk-L5EPGGDP.js";
37
+ } from "./chunk-GWAN2BDB.js";
38
38
  import {
39
39
  getLicenseSync
40
- } from "./chunk-BPVFZ6Q4.js";
40
+ } from "./chunk-B5EGDNG6.js";
41
41
  import {
42
42
  isValidSessionScope
43
43
  } from "./chunk-BTSWFMEH.js";
@@ -46,7 +46,7 @@ import {
46
46
  } from "./chunk-GJV3WDWM.js";
47
47
  import {
48
48
  isCoordinatorName
49
- } from "./chunk-GL47M7NY.js";
49
+ } from "./chunk-3UD3OF3X.js";
50
50
  import {
51
51
  EXE_AI_DIR
52
52
  } from "./chunk-MMS2HBRT.js";
@@ -173,6 +173,19 @@ async function sessionIncarnationId(sessionName) {
173
173
  return null;
174
174
  }
175
175
 
176
+ // src/lib/tmux-dispatch-gate.ts
177
+ var TMUX_DISPATCH_RETIRED_MESSAGE = "tmux dispatch is retired; dispatch a named subagent: Agent(subagent_type='<name>') \u2014 worktree isolation for code, brief it with a file fence and the guardrails, and persist its result into the task checklist row + memory before you finish. task(action='create') stays a durable checklist row for tracking and never launches compute.";
178
+ var TMUX_DISPATCH_ESCAPE_HATCH = "EXE_ALLOW_TMUX_DISPATCH";
179
+ function isTmuxDispatchAllowed(env = process.env) {
180
+ return env[TMUX_DISPATCH_ESCAPE_HATCH] === "1";
181
+ }
182
+ function tmuxDispatchRefusal(toolName) {
183
+ return `${toolName}: ${TMUX_DISPATCH_RETIRED_MESSAGE} Nothing was created or dispatched.`;
184
+ }
185
+ function spawnOverrideNoopNotice(fields) {
186
+ return `Ignored ${fields.join(", ")} \u2014 ${TMUX_DISPATCH_RETIRED_MESSAGE} Set a subagent's model per employee with set_agent_config, or per dispatch with the Agent tool's own model argument.`;
187
+ }
188
+
176
189
  // src/mcp/tools/create-task.ts
177
190
  var ProjectScopeCheckFailedError = class extends Error {
178
191
  constructor(message, options) {
@@ -654,18 +667,18 @@ async function resolveCoordinatorOwnProjectDir(callerRoot) {
654
667
  }
655
668
  return null;
656
669
  }
657
- function registerCreateTask(server) {
670
+ function registerCreateTask(server, deps = {}) {
658
671
  server.registerTool(
659
672
  "create_task",
660
673
  {
661
674
  title: "Create Task",
662
- description: "Create a durable, session-scoped checklist item. Creation has no execution side effects by default; use execution_mode='durable_tmux' only for explicit legacy tmux dispatch.",
675
+ description: "Create a durable, session-scoped checklist item. Creating a task NEVER dispatches or launches compute \u2014 to delegate, dispatch a named subagent with Agent(subagent_type='<employee>').",
663
676
  inputSchema: {
664
677
  execution_mode: z.enum(["checklist", "durable_tmux"]).default("checklist").describe(
665
- "Execution behavior. 'checklist' (default) only persists the task for native-subagent orchestration in the current coordinator context. 'durable_tmux' explicitly opts into legacy project resolution, employee validation, tmux spawn/wake, intercom, and signal delivery."
678
+ "Execution behavior. 'checklist' (default, and the only supported value) persists the task as a durable checklist row with zero execution side effects. 'durable_tmux' is RETIRED: background tmux employees are gone and the value is refused \u2014 delegate with Agent(subagent_type='<employee>') instead. The parameter is kept so older clients that still send it get a clear refusal rather than a schema error."
666
679
  ),
667
680
  title: z.string().describe("Task title"),
668
- assigned_to: z.string().describe("Checklist owner/assignee label. It is not validated against the employee roster unless execution_mode='durable_tmux'."),
681
+ assigned_to: z.string().describe("Checklist owner/assignee label. It records who owns the row; it does not dispatch anyone and is not validated against the employee roster."),
669
682
  project_name: z.string().describe("Project name"),
670
683
  priority: z.enum(["p0", "p1", "p2"]).default("p1").describe("Priority level"),
671
684
  complexity: z.enum(["routine", "standard", "complex", "critical"]).default("standard").describe("Bloom taxonomy complexity level. Affects routing tier and review requirements."),
@@ -675,8 +688,8 @@ function registerCreateTask(server) {
675
688
  reviewer: z.string().optional().describe("Who should review this task when done. Defaults to assigner."),
676
689
  budget_tokens: z.number().optional().describe("Max tokens allowed for this task (null = unlimited)"),
677
690
  budget_fallback_model: z.string().optional().describe("Model to route to when budget is exhausted"),
678
- spawn_runtime: z.string().optional().describe("Override runtime for spawned session (e.g., 'claude', 'codex', 'opencode')"),
679
- spawn_model: z.string().optional().describe("Override model for spawned session (e.g., 'claude-sonnet-4.6', 'claude-haiku-4.5')"),
691
+ spawn_runtime: z.string().optional().describe("RETIRED no-op \u2014 nothing is spawned. Accepted and ignored (the response says so). Set a subagent's runtime per employee with set_agent_config."),
692
+ spawn_model: z.string().optional().describe("RETIRED no-op \u2014 nothing is spawned. Accepted and ignored (the response says so). Set a subagent's model per employee with set_agent_config, or per dispatch with the Agent tool's own model argument."),
680
693
  spawn_worktree: z.boolean().optional().describe(
681
694
  "Worktree isolation for code-role agents. Default true (REQUIRED \u2014 a code-role agent that cannot get an isolated git worktree is refused, never spawned on main). Set false ONLY to dispatch a code-role agent into a NON-git 'automation' project (a plain folder with no repo to protect); the agent then runs in the project root and a loud worktree.bypassed event is logged. Genuine non-git projects are auto-detected, so this is rarely needed by hand."
682
695
  ),
@@ -691,6 +704,16 @@ function registerCreateTask(server) {
691
704
  async ({ execution_mode, title, assigned_to, project_name, priority, complexity, context, blocked_by, parent_task_id, reviewer, budget_tokens, budget_fallback_model, spawn_runtime, spawn_model, spawn_worktree, idempotency_key, idempotency_window, session_scope, work_ref, group_id, override_claim_reason }) => {
692
705
  const executionMode = execution_mode ?? "checklist";
693
706
  const isDurableTmuxDispatch = executionMode === "durable_tmux";
707
+ if (isDurableTmuxDispatch && !isTmuxDispatchAllowed()) {
708
+ return {
709
+ isError: true,
710
+ content: [{ type: "text", text: tmuxDispatchRefusal("create_task") }]
711
+ };
712
+ }
713
+ const ignoredSpawnOverrides = isDurableTmuxDispatch ? [] : [
714
+ spawn_runtime ? "spawn_runtime" : null,
715
+ spawn_model ? "spawn_model" : null
716
+ ].filter((f) => f !== null);
694
717
  if (isDurableTmuxDispatch && !isCoordinatorName(assigned_to)) {
695
718
  const license = getLicenseSync();
696
719
  if (license.plan === "free") {
@@ -755,7 +778,8 @@ function registerCreateTask(server) {
755
778
  }
756
779
  if (!callerRoot && isDurableTmuxDispatch) {
757
780
  const coordinatorSessions = await listCoordinatorRoots();
758
- if (coordinatorSessions.length > 1 && process.env.VITEST !== "true" && process.env.NODE_ENV !== "test") {
781
+ const isTestEnv = process.env.VITEST === "true" || process.env.NODE_ENV === "test";
782
+ if (coordinatorSessions.length > 1 && (!isTestEnv || !!deps.enforceAmbiguityGuard)) {
759
783
  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.` + HEADLESS_SCOPE_REMEDY;
760
784
  process.stderr.write(`[create_task] ${message}
761
785
  `);
@@ -783,7 +807,8 @@ function registerCreateTask(server) {
783
807
  } catch {
784
808
  }
785
809
  }
786
- if (!callerRoot && process.env.VITEST !== "true" && process.env.NODE_ENV !== "test") {
810
+ const isTestEnvScope = process.env.VITEST === "true" || process.env.NODE_ENV === "test";
811
+ if (!callerRoot && (!isTestEnvScope || !!deps.enforceScopeGuard)) {
787
812
  const scopeRemedy = isDurableTmuxDispatch ? HEADLESS_SCOPE_REMEDY : ` Pass a valid session_scope parameter or ensure the MCP client supplies X-Exe-Session; checklist creation never guesses scope from tmux.`;
788
813
  const message = `BLOCKED: create_task resolved no session_scope for project "${project_name}". Refusing to create an unscoped task.` + scopeRemedy;
789
814
  process.stderr.write(`[create_task] ${message}
@@ -866,7 +891,7 @@ Idempotent no-op (existing task unchanged; no execution side effects)`
866
891
  let claimWarning = "";
867
892
  const claimRefRaw = (work_ref ?? "").trim();
868
893
  try {
869
- const { findConflicts, findConflictsInText, describeConflict, normalizeTarget } = await import("./work-claims-6DM32MGO.js");
894
+ const { findConflicts, findConflictsInText, describeConflict, normalizeTarget } = await import("./work-claims-CMV2GWIW.js");
870
895
  const conflicts = claimRefRaw ? await findConflicts(
871
896
  [normalizeTarget({ kind: "work_ref", value: claimRefRaw })],
872
897
  callerRoot
@@ -933,7 +958,7 @@ Nothing was created or dispatched. Either pick different work, or \u2014 if that
933
958
  });
934
959
  if (claimRefRaw) {
935
960
  try {
936
- const { acquireClaim } = await import("./work-claims-6DM32MGO.js");
961
+ const { acquireClaim } = await import("./work-claims-CMV2GWIW.js");
937
962
  const acquired = await acquireClaim({
938
963
  targets: [{ kind: "work_ref", value: claimRefRaw }],
939
964
  holderSession: callerRoot,
@@ -960,6 +985,10 @@ Status: blocked (waiting on ${blocked_by})`;
960
985
  }
961
986
  if (task2.warning) text2 += `
962
987
  Warning: ${task2.warning}`;
988
+ if (ignoredSpawnOverrides.length > 0) {
989
+ text2 += `
990
+ Note: ${spawnOverrideNoopNotice(ignoredSpawnOverrides)}`;
991
+ }
963
992
  return { content: [{ type: "text", text: text2 }] };
964
993
  }
965
994
  let projectDir;
@@ -995,7 +1024,8 @@ Warning: ${task2.warning}`;
995
1024
  );
996
1025
  }
997
1026
  }
998
- if (projectDir == null && process.env.VITEST !== "true" && process.env.NODE_ENV !== "test") {
1027
+ const isTestEnvProjectDir = process.env.VITEST === "true" || process.env.NODE_ENV === "test";
1028
+ if (projectDir == null && (!isTestEnvProjectDir || !!deps.enforceProjectDirGuard)) {
999
1029
  const message = `BLOCKED: create_task could not resolve an existing project directory for "${project_name}" within the caller's coordinator scope. Refusing to create/dispatch into a fabricated or cross-scope path. Clone the project (or ensure the coordinator session registry points at it) and retry. If "${project_name}" is a non-git automation project, dispatch it from a session whose coordinator dir contains it.` + HEADLESS_SCOPE_REMEDY;
1000
1030
  process.stderr.write(`[create_task] ${message}
1001
1031
  `);
@@ -1124,7 +1154,7 @@ Warning: ${task2.warning}`;
1124
1154
  }
1125
1155
  if (claimRefRaw) {
1126
1156
  try {
1127
- const { acquireClaim } = await import("./work-claims-6DM32MGO.js");
1157
+ const { acquireClaim } = await import("./work-claims-CMV2GWIW.js");
1128
1158
  const acquired = await acquireClaim({
1129
1159
  targets: [{ kind: "work_ref", value: claimRefRaw }],
1130
1160
  holderSession: callerRoot,
@@ -1177,7 +1207,7 @@ Claimed ${claimRefRaw} for session ${callerRoot} (claim_group ${acquired.claimGr
1177
1207
  session_scope: sessionScope,
1178
1208
  created_at: (/* @__PURE__ */ new Date()).toISOString()
1179
1209
  }), "utf-8");
1180
- const { recordOrchestrationEventBestEffort: recordOE } = await import("./orchestration-events-JCQ5F5IJ.js");
1210
+ const { recordOrchestrationEventBestEffort: recordOE } = await import("./orchestration-events-CHY3GOJD.js");
1181
1211
  recordOE({
1182
1212
  eventType: "signal.created",
1183
1213
  source: "create-task.mcp",
@@ -1190,7 +1220,8 @@ Claimed ${claimRefRaw} for session ${callerRoot} (claim_group ${acquired.claimGr
1190
1220
  }
1191
1221
  let dispatchStatus = "";
1192
1222
  let dispatchOutcome = "ok";
1193
- if (task.status !== "blocked" && !process.env.VITEST && !task.deduplicated) {
1223
+ const isTestEnvDispatch = !!process.env.VITEST;
1224
+ if (task.status !== "blocked" && (!isTestEnvDispatch || !!deps.enforceDispatchBranch) && !task.deduplicated) {
1194
1225
  try {
1195
1226
  const exeSession = task.sessionScope || callerRoot;
1196
1227
  const dispatchRuntime = resolveDispatchRuntime(assigned_to, spawn_runtime ?? null);
@@ -1209,7 +1240,7 @@ Claimed ${claimRefRaw} for session ${callerRoot} (claim_group ${acquired.claimGr
1209
1240
  let projectConflictOpts = {};
1210
1241
  try {
1211
1242
  const { getClient } = await import("./lib/database.js");
1212
- const { sessionScopeFilter } = await import("./task-scope-NHXB4ZRN.js");
1243
+ const { sessionScopeFilter } = await import("./task-scope-32HQEV6W.js");
1213
1244
  const client = getClient();
1214
1245
  const scope = sessionScopeFilter(task.sessionScope || callerRoot || exeSession || null);
1215
1246
  const existing = await client.execute({
@@ -1442,7 +1473,7 @@ ${dispatchErr instanceof Error ? dispatchErr.stack : ""}
1442
1473
  }
1443
1474
  let dupWarning = "";
1444
1475
  try {
1445
- const { findMatchingBranches } = await import("./branch-hygiene-44WLSOZR.js");
1476
+ const { findMatchingBranches } = await import("./branch-hygiene-DDXXI6ZA.js");
1446
1477
  const matches = await findMatchingBranches(resolvedProjectDir, { title });
1447
1478
  if (matches.length > 0) {
1448
1479
  const top = matches.slice(0, 3).map((m) => {
@@ -1505,6 +1536,8 @@ Do NOT call create_task again \u2014 that duplicates the row. Re-dispatch the EX
1505
1536
  }
1506
1537
 
1507
1538
  export {
1539
+ isTmuxDispatchAllowed,
1540
+ tmuxDispatchRefusal,
1508
1541
  ProjectScopeCheckFailedError,
1509
1542
  isSafeProjectName,
1510
1543
  findProjectChildDir,