@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.
- package/deploy/compose/.env.askexe-control-plane.example +6 -0
- package/deploy/compose/.env.customer.example +1 -1
- package/deploy/compose/.env.example +1 -1
- package/deploy/compose/docker-compose.yml +16 -0
- package/deploy/compose/generate-env.ts +1 -1
- package/deploy/compose/sso-edge/sso-redirect.conf +18 -3
- package/deploy/stack-manifests/v0.9.json +1160 -1
- package/dist/.dist-verified.json +3 -3
- package/dist/{active-agent-F5V4E4UL.js → active-agent-RZ24KSJN.js} +8 -6
- package/dist/{active-agent-YTBB4ZQM.js → active-agent-YWSWPIEA.js} +8 -6
- package/dist/{agent-defs-generator-7TFISIJQ.js → agent-defs-generator-GY3UBREJ.js} +8 -6
- package/dist/{agent-heartbeat-CQPGJIFF.js → agent-heartbeat-GUVUUQVM.js} +1 -1
- package/dist/{agent-loop-EZ7LDAGD.js → agent-loop-HPNCH3HK.js} +1 -1
- package/dist/{agentic-ontology-XVTUVV7W.js → agentic-ontology-RHYNXEKE.js} +1 -1
- package/dist/{artifact-backup-TF6YWQT2.js → artifact-backup-HGUFSIJH.js} +19 -6
- package/dist/{backfill-metadata-J6MXIDCW.js → backfill-metadata-XLFASEOD.js} +11 -9
- package/dist/{backup-verify-6DVBQMDP.js → backup-verify-TUQEICWA.js} +1 -1
- package/dist/{behavior-injection-XDA7ZCYN.js → behavior-injection-GXO7ERGN.js} +14 -12
- package/dist/{behavior-promotion-4VLQ7LXK.js → behavior-promotion-V63WIZ4N.js} +13 -11
- package/dist/{behaviors-SCCZP7RZ.js → behaviors-RMLDPLOF.js} +18 -11
- package/dist/bin/agentic-ontology-backfill.js +12 -10
- package/dist/bin/agentic-reflection-backfill.js +13 -11
- package/dist/bin/agentic-semantic-label.js +12 -10
- package/dist/bin/backfill-conversations.js +11 -9
- package/dist/bin/backfill-responses.js +11 -9
- package/dist/bin/backfill-vectors.js +13 -11
- package/dist/bin/bulk-sync-postgres.js +20 -18
- package/dist/bin/cc-doctor.js +15 -13
- package/dist/bin/cleanup-stale-review-tasks.js +44 -32
- package/dist/bin/cli.js +109 -30
- package/dist/bin/customer-readiness.js +55 -25
- package/dist/bin/deferred-daemon-restart.js +111 -108
- package/dist/bin/exe-actions.js +7 -1
- package/dist/bin/exe-agent-config.js +8 -6
- package/dist/bin/exe-agent.js +18 -16
- package/dist/bin/exe-assign.js +13 -11
- package/dist/bin/exe-boot.js +49 -47
- package/dist/bin/exe-call.js +9 -7
- package/dist/bin/exe-cicd.js +19 -8
- package/dist/bin/exe-cloud.js +59 -25
- package/dist/bin/exe-config-dump.js +8 -6
- package/dist/bin/exe-dispatch.js +23 -21
- package/dist/bin/exe-doctor.js +11 -8
- package/dist/bin/exe-export-behaviors.js +16 -14
- package/dist/bin/exe-forget.js +14 -12
- package/dist/bin/exe-gateway.js +12 -10
- package/dist/bin/exe-grant.js +6 -6
- package/dist/bin/exe-healthcheck.js +15 -13
- package/dist/bin/exe-heartbeat.js +28 -26
- package/dist/bin/exe-kill.js +28 -26
- package/dist/bin/exe-launch-agent.js +35 -33
- package/dist/bin/exe-mcp.js +9 -7
- package/dist/bin/exe-memory-reads.js +11 -9
- package/dist/bin/exe-new-employee.js +13 -11
- package/dist/bin/exe-os-mcp-proxy.js +9 -7
- package/dist/bin/exe-pending-messages.js +23 -21
- package/dist/bin/exe-pending-notifications.js +22 -20
- package/dist/bin/exe-pending-reviews.js +23 -21
- package/dist/bin/exe-preflight.js +1 -1
- package/dist/bin/exe-rename.js +9 -7
- package/dist/bin/exe-review.js +59 -55
- package/dist/bin/exe-search-quality.js +16 -3
- package/dist/bin/exe-search.js +13 -11
- package/dist/bin/exe-session-cleanup.js +29 -27
- package/dist/bin/exe-settings.js +22 -20
- package/dist/bin/exe-start-codex.js +23 -21
- package/dist/bin/exe-start-opencode.js +21 -19
- package/dist/bin/exe-status.js +24 -22
- package/dist/bin/exe-support.js +3 -3
- package/dist/bin/exe-team.js +8 -6
- package/dist/bin/exe-verify-running-images.js +644 -17
- package/dist/bin/git-sweep.js +24 -22
- package/dist/bin/graph-backfill.js +12 -10
- package/dist/bin/graph-export.js +12 -10
- package/dist/bin/hooks-cli.js +4 -4
- package/dist/bin/import-history.js +16 -14
- package/dist/bin/install.js +113 -110
- package/dist/bin/intercom-check.js +5 -5
- package/dist/bin/mcp-sessions.js +2 -2
- package/dist/bin/orchestration-metrics.js +8 -6
- package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
- package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
- package/dist/bin/pre-build-guard.js +55 -16
- package/dist/bin/pre-publish.js +1 -1
- package/dist/bin/prune-orphan-chunks.js +154 -28
- package/dist/bin/reconcile-backlog.js +5 -3
- package/dist/bin/registry-proxy.js +1 -1
- package/dist/bin/repair-document-chunks.js +11 -9
- package/dist/bin/scan-tasks.js +23 -21
- package/dist/bin/setup.js +3 -3
- package/dist/bin/shard-migrate.js +12 -10
- package/dist/bin/stack-update.js +622 -43
- package/dist/bin/verify-stack.js +2 -2
- package/dist/bin/vps-health-gate.js +1 -1
- package/dist/{boot-generation-Q7LGQ3AO.js → boot-generation-VCQXVYGT.js} +7 -5
- package/dist/{boot-review-sections-G5774FR5.js → boot-review-sections-3QO6Q7MP.js} +21 -19
- package/dist/{branch-hygiene-44WLSOZR.js → branch-hygiene-DDXXI6ZA.js} +59 -21
- package/dist/bug-landed-reconciler-TQVNOUCU.js +353 -0
- package/dist/build-manifest.json +1269 -1194
- package/dist/{capability-cards-I3RHCF4F.js → capability-cards-XPDLT6LU.js} +6 -4
- package/dist/{capacity-monitor-7I7GDONU.js → capacity-monitor-N3AW242L.js} +23 -21
- package/dist/{catchup-brief-3T5PARIR.js → catchup-brief-3PKX7FUP.js} +29 -27
- package/dist/{chunk-C5ISP5FO.js → chunk-2BKJAOO4.js} +11 -1
- package/dist/{chunk-JJTPPAZY.js → chunk-2CUQHG6H.js} +1609 -1356
- package/dist/{chunk-HU3VD4MQ.js → chunk-2Q2GGYBX.js} +1 -1
- package/dist/{chunk-CHIUS5QB.js → chunk-36LMIOVU.js} +9 -9
- package/dist/{chunk-46VSBDUW.js → chunk-3DCBDG4T.js} +2 -2
- package/dist/{chunk-W3KPQE7H.js → chunk-3GL3E4TD.js} +3 -3
- package/dist/{chunk-GL47M7NY.js → chunk-3UD3OF3X.js} +202 -117
- package/dist/{chunk-WNBZJSQT.js → chunk-3VW5ZP2F.js} +1 -1
- package/dist/{chunk-JDDM6C57.js → chunk-3X74IQBU.js} +1 -1
- package/dist/{chunk-NVFNADTX.js → chunk-3ZL4MDQ6.js} +18 -4
- package/dist/{chunk-R5E7WNAC.js → chunk-4ESNDGMB.js} +3 -3
- package/dist/{chunk-CYCIX7AW.js → chunk-4FLLIQRQ.js} +2 -2
- package/dist/{chunk-3RGTLZNO.js → chunk-4GAKF7KR.js} +99 -74
- package/dist/{chunk-RVO5O5SR.js → chunk-4S3A52AV.js} +38 -10
- package/dist/{chunk-7J2ZQ4XN.js → chunk-4VQ3QR6B.js} +29 -28
- package/dist/{chunk-MROSARM5.js → chunk-5BJBTFFQ.js} +7 -1
- package/dist/chunk-5LQZABW5.js +6 -0
- package/dist/chunk-5ONMHTNI.js +236 -0
- package/dist/{chunk-APL7HUE3.js → chunk-5QQJUO3F.js} +200 -31
- package/dist/{chunk-UOPCVFVR.js → chunk-5RK75SWH.js} +205 -278
- package/dist/{chunk-T5FEAQES.js → chunk-5TYJYGS5.js} +1 -1
- package/dist/{chunk-P3QQ52QK.js → chunk-5U6EOTZV.js} +3 -3
- package/dist/{chunk-ALRHGEAJ.js → chunk-637FL62O.js} +1 -1
- package/dist/{chunk-PUBA5B4M.js → chunk-6L4VIYLZ.js} +33 -19
- package/dist/{chunk-VF2KRROX.js → chunk-754P2UXM.js} +1 -1
- package/dist/{chunk-CM7N5MBY.js → chunk-7FZG7WP4.js} +5 -5
- package/dist/{chunk-NYLJQ2M2.js → chunk-7NEBFB3L.js} +4 -4
- package/dist/{chunk-E7C2WNR5.js → chunk-AEIOFFFX.js} +5 -5
- package/dist/{chunk-VOVFUKEB.js → chunk-AIB2EWO2.js} +5 -5
- package/dist/{chunk-EGOEB42T.js → chunk-AP2C4OGS.js} +3 -3
- package/dist/{chunk-MPZ2AVNS.js → chunk-ATNV3BVZ.js} +1 -1
- package/dist/{chunk-F4BBMIPG.js → chunk-B4XJQBQB.js} +2 -2
- package/dist/{chunk-BPVFZ6Q4.js → chunk-B5EGDNG6.js} +2 -2
- package/dist/{chunk-AGC2V7JS.js → chunk-B6CBN6EF.js} +1 -1
- package/dist/{chunk-KTKIFXIP.js → chunk-B7FDRN7G.js} +1 -1
- package/dist/{chunk-C5HUMAA7.js → chunk-B7WVYLAQ.js} +67 -15
- package/dist/chunk-BGVP5RMT.js +185 -0
- package/dist/{chunk-FVLNNNH6.js → chunk-BNI4LIU5.js} +35 -4
- package/dist/{chunk-P4XLIPB7.js → chunk-BU5JRLZT.js} +1 -1
- package/dist/{chunk-PHUHIVD5.js → chunk-C6U7XWOC.js} +34 -5
- package/dist/chunk-C7GHNJPW.js +8 -0
- package/dist/{chunk-4AR5XKCH.js → chunk-CL2MU3OX.js} +1 -1
- package/dist/{chunk-ZPP63JSQ.js → chunk-CL3AB7Z2.js} +1 -1
- package/dist/{chunk-FHIFTSPL.js → chunk-CP7XUSOF.js} +8 -3
- package/dist/{chunk-3OX34OC3.js → chunk-CUDNRHHT.js} +30 -10
- package/dist/chunk-CYUUNIEL.js +21 -0
- package/dist/{chunk-P2UY34XE.js → chunk-D4C57S2H.js} +5 -5
- package/dist/{chunk-XSUALA32.js → chunk-DDYFNBYV.js} +3 -3
- package/dist/{chunk-LSNBTGW4.js → chunk-DPYZW42H.js} +1 -1
- package/dist/{chunk-FMIYFHLE.js → chunk-E2PRXEZK.js} +9 -3
- package/dist/{chunk-L63V25HS.js → chunk-E54SPUYJ.js} +3 -3
- package/dist/{chunk-DMUOTCDN.js → chunk-E5CKRHIZ.js} +1 -1
- package/dist/{chunk-BV2IET6B.js → chunk-EVMOKRBC.js} +15 -2
- package/dist/{chunk-YLFCH3VA.js → chunk-FDWI3T6I.js} +133 -31
- package/dist/{chunk-PWC3C5ME.js → chunk-FNJTCJGY.js} +4 -4
- package/dist/{chunk-TNS63ATU.js → chunk-FWRPDSO3.js} +350 -50
- package/dist/{chunk-JA3Y5TV6.js → chunk-GDLB6BPM.js} +141 -74
- package/dist/{chunk-IGJMS7C5.js → chunk-GOVGG7HU.js} +2 -2
- package/dist/{chunk-MB47DRF5.js → chunk-GP7CTIUK.js} +2 -2
- package/dist/{chunk-L5EPGGDP.js → chunk-GWAN2BDB.js} +4 -4
- package/dist/{chunk-YRQ26MNP.js → chunk-H3YF7X4J.js} +12 -5
- package/dist/{chunk-VLBHZ6TF.js → chunk-H6PLIFUE.js} +2 -2
- package/dist/{chunk-GSLFH4AI.js → chunk-HRNM3N4Y.js} +6 -15
- package/dist/chunk-IG2ISRTF.js +48 -0
- package/dist/{chunk-MWEIBVBS.js → chunk-IJCWBYA5.js} +14 -1
- package/dist/{chunk-NKEFYE4R.js → chunk-IPTUKX3N.js} +1 -1
- package/dist/{chunk-RB3J2WYQ.js → chunk-IVE7H6KA.js} +1 -1
- package/dist/{chunk-HA63SH5W.js → chunk-IWY2OGQG.js} +1 -1
- package/dist/{chunk-BQEZPRUC.js → chunk-IZWMWJZT.js} +64 -46
- package/dist/{chunk-AHESD3KW.js → chunk-J4UVI652.js} +1 -1
- package/dist/{chunk-PLII76NJ.js → chunk-JBUCA4OX.js} +33 -6
- package/dist/{chunk-2PZTMSMG.js → chunk-JOF4HQDF.js} +5 -5
- package/dist/{chunk-OBBO6EJR.js → chunk-JQN3QGSF.js} +1 -1
- package/dist/{chunk-P4PIZOL2.js → chunk-JWYIH5DR.js} +3 -3
- package/dist/{chunk-3XY57PKT.js → chunk-KZLKE7I3.js} +210 -48
- package/dist/{chunk-DYVLEMKS.js → chunk-L3GXMYBK.js} +1 -1
- package/dist/{chunk-72V3S44T.js → chunk-LUA4SLJY.js} +46 -19
- package/dist/{chunk-ZT4LFTUJ.js → chunk-LW3JCBXP.js} +20 -3
- package/dist/{chunk-YLB365YX.js → chunk-M5XHN4OM.js} +3 -3
- package/dist/{chunk-VHHX4UCP.js → chunk-MDTWARSF.js} +22 -93
- package/dist/{chunk-JFJP6ATJ.js → chunk-MWKXQSF6.js} +3 -2
- package/dist/{chunk-VJEJ7JNB.js → chunk-N32DVIKY.js} +1 -1
- package/dist/{chunk-MUCNYSJP.js → chunk-NRLJOV7M.js} +32 -4
- package/dist/{chunk-PL4CFSQ7.js → chunk-NSXJOSH7.js} +1 -1
- package/dist/{chunk-NF5FOSLD.js → chunk-NVTG66CK.js} +1 -1
- package/dist/chunk-O45GBJEH.js +1500 -0
- package/dist/{chunk-4AAMFWJT.js → chunk-OHZSTZXN.js} +4 -2
- package/dist/chunk-OSIS7ZQW.js +344 -0
- package/dist/{chunk-E3ZM32LF.js → chunk-P22VFGFK.js} +14 -5
- package/dist/{chunk-KILR4FBR.js → chunk-PAFLR7WD.js} +3 -3
- package/dist/{chunk-R3CZWFFC.js → chunk-PEYQ6MWO.js} +15 -3
- package/dist/{chunk-RDWIKDMY.js → chunk-PZR54BEI.js} +8 -20
- package/dist/{chunk-2FKU4ZEO.js → chunk-QDBKMEYY.js} +9 -9
- package/dist/{chunk-7UHZBVP3.js → chunk-QDVLVLXP.js} +97 -31
- package/dist/{chunk-PRDDPQLC.js → chunk-QLXEQRHD.js} +5 -5
- package/dist/{chunk-MUAWCFW6.js → chunk-QNPDXV5V.js} +5 -2
- package/dist/{chunk-LR5O2XWZ.js → chunk-QUZYLDNJ.js} +5 -5
- package/dist/chunk-RBQUXHYK.js +48 -0
- package/dist/{chunk-3SUPEE6H.js → chunk-RDMBSHGG.js} +3 -3
- package/dist/{chunk-I5XIW2BP.js → chunk-RGUM474V.js} +7 -7
- package/dist/{chunk-OAFENIHN.js → chunk-RJ67XAJU.js} +76 -28
- package/dist/{chunk-LFUBEHFW.js → chunk-RT57D7C4.js} +39 -1
- package/dist/{chunk-MKM6D7JM.js → chunk-RWG7DLOG.js} +42 -5
- package/dist/{chunk-P3UX5EH4.js → chunk-RWKAHHIX.js} +3 -3
- package/dist/{chunk-XEBKIWI7.js → chunk-RYNT3HB7.js} +12 -12
- package/dist/{chunk-EUGEFBGV.js → chunk-S2V272KJ.js} +3 -3
- package/dist/{chunk-W6BZ4UGA.js → chunk-SGYEM2PD.js} +1 -1
- package/dist/{chunk-VROK4X2L.js → chunk-SJP57MQM.js} +1 -1
- package/dist/{chunk-5MVKTNZP.js → chunk-SL4JWAMQ.js} +54 -4
- package/dist/{chunk-MOANZQXF.js → chunk-SLMKLEU6.js} +1 -1
- package/dist/{chunk-RZN2LEAK.js → chunk-SQA7XCYI.js} +3 -3
- package/dist/{chunk-4YNA3CM6.js → chunk-SSFS4NCH.js} +262 -56
- package/dist/{chunk-6FIC57PH.js → chunk-T4P2G3PO.js} +1 -1
- package/dist/{chunk-5U2IJBFV.js → chunk-TA3B4N24.js} +1 -1
- package/dist/{chunk-ZOTTYCP5.js → chunk-TEWWBVQP.js} +40 -4
- package/dist/{chunk-SDYWZRPN.js → chunk-TLSFGXXE.js} +1 -1
- package/dist/{chunk-L3VUW5M4.js → chunk-TQS2YHLB.js} +1 -1
- package/dist/{chunk-KXYKSLW4.js → chunk-TU4M757W.js} +399 -116
- package/dist/{chunk-MC4IM2CC.js → chunk-TYD4F4XU.js} +6 -6
- package/dist/{chunk-TKS5GMYA.js → chunk-U44Y7RC7.js} +2 -0
- package/dist/{chunk-B7AMNZTC.js → chunk-UKBPEEEQ.js} +2 -2
- package/dist/{chunk-ZBPZDADW.js → chunk-UWVXQEQQ.js} +467 -78
- package/dist/{chunk-P2VVMGMI.js → chunk-V4WH3FV7.js} +35 -16
- package/dist/{worktree-ownership-guard-O6JQF2CL.js → chunk-V6F4I2XY.js} +13 -14
- package/dist/{chunk-JFTUAV4J.js → chunk-VBKUESIW.js} +1 -1
- package/dist/{chunk-AZSTIAVL.js → chunk-VBPYYJPC.js} +1 -1
- package/dist/{chunk-LKTN22L6.js → chunk-VIP4LKLO.js} +57 -24
- package/dist/{chunk-L5CGXEZC.js → chunk-WAAGVFFN.js} +63 -71
- package/dist/{chunk-D3LXVAIQ.js → chunk-WC7AE3PT.js} +244 -103
- package/dist/{chunk-EOTZSAQL.js → chunk-WUCUDHKR.js} +1 -1
- package/dist/{chunk-VF3BZOZK.js → chunk-X7HZHKY4.js} +50 -3
- package/dist/{chunk-LFBLQE2P.js → chunk-XCAKYVKI.js} +1 -1
- package/dist/{chunk-UXN4BICC.js → chunk-XMX5J52Z.js} +1 -1
- package/dist/{chunk-6YDY6ZTD.js → chunk-XTCXGWTV.js} +9 -4
- package/dist/{chunk-XUZK23V7.js → chunk-XW2FW6LS.js} +2 -2
- package/dist/{chunk-CH7BUBP3.js → chunk-XWVHUDEK.js} +5 -4
- package/dist/{chunk-S26CV7BE.js → chunk-YA5LK6KB.js} +45 -8
- package/dist/{chunk-ELCRJGCH.js → chunk-YMRQIENV.js} +2 -2
- package/dist/{chunk-QNZ4562V.js → chunk-Z3LXWCB7.js} +1 -1
- package/dist/{chunk-EYMFVITZ.js → chunk-Z7I6NQMA.js} +2 -2
- package/dist/{chunk-6BJCDWSM.js → chunk-ZB4FS2EG.js} +1 -1
- package/dist/{chunk-ZAEUEDTN.js → chunk-ZD6FZ3WL.js} +1 -1
- package/dist/{chunk-FEU6QEEL.js → chunk-ZM6EZAVY.js} +1 -0
- package/dist/{chunk-2KY7WZZF.js → chunk-ZPA4R2UI.js} +1 -1
- package/dist/chunk-ZPPPHVSU.js +285 -0
- package/dist/{chunk-ELEGH4DX.js → chunk-ZUGQPYUY.js} +51 -4
- package/dist/{chunk-UX2EO653.js → chunk-ZZWFZ46U.js} +66 -8
- package/dist/{cleanup-graph-garbage-VQAJ2RBT.js → cleanup-graph-garbage-HFUD5ZQT.js} +12 -10
- package/dist/{cloud-sync-command-J7NEFUY7.js → cloud-sync-command-3JHJJKPN.js} +25 -3
- package/dist/{cloud-sync-db-init-KWEMNMGA.js → cloud-sync-db-init-2LHIQOSF.js} +1 -1
- package/dist/{cloud-sync-shutdown-P63AUTUI.js → cloud-sync-shutdown-ZXAXA3Z7.js} +6 -4
- package/dist/{cloud-sync-state-QF3TMMJ4.js → cloud-sync-state-VSQFGPP6.js} +1 -1
- package/dist/{co-activation-7IHRPBZN.js → co-activation-NX4EH4AP.js} +6 -4
- package/dist/{co-occurrence-R5AG4OAU.js → co-occurrence-5LBYCW3U.js} +10 -8
- package/dist/{consent-passphrase-5ZBDJ5G7.js → consent-passphrase-65W3DJIJ.js} +2 -2
- package/dist/{content-extractor-ZLXC6GNR.js → content-extractor-OGXETBOX.js} +2 -2
- package/dist/{conversation-entity-extractor-7FRKLLBD.js → conversation-entity-extractor-FQCOAH4F.js} +5 -4
- package/dist/conversations-retention-XTBFJBUM.js +166 -0
- package/dist/{crdt-sync-IFRZOEIS.js → crdt-sync-7TDUBTLH.js} +4 -4
- package/dist/{crm-webhook-L2S63ASV.js → crm-webhook-776JTY55.js} +2 -2
- package/dist/{cto-delegation-gate-3WU7OHX7.js → cto-delegation-gate-ZNUWVYCN.js} +25 -23
- package/dist/{daemon-orchestration-3VQYKLOR.js → daemon-orchestration-76BOFDEP.js} +30 -24
- package/dist/{doc-graph-extractor-YIR5E7OF.js → doc-graph-extractor-F724KZJX.js} +10 -8
- package/dist/{documents-QEHPTYIY.js → documents-Q24V4GRD.js} +13 -11
- package/dist/{dreaming-LNFE7DTN.js → dreaming-IY6NQTSP.js} +27 -25
- package/dist/{employee-boot-brief-ZTXDYNWM.js → employee-boot-brief-CCTXO5DQ.js} +35 -29
- package/dist/{entity-boost-R5N6JWXD.js → entity-boost-XGOB7HDM.js} +1 -1
- package/dist/{exe-drift-WYSJVZFO.js → exe-drift-NEPXLNGP.js} +7 -5
- package/dist/{exe-export-GOLNAEAV.js → exe-export-ZHJQFKR2.js} +14 -12
- package/dist/{exe-import-U4BSI6OH.js → exe-import-7SVNI4FW.js} +14 -12
- package/dist/{exe-key-V42G3NGO.js → exe-key-QJKU56WZ.js} +119 -108
- package/dist/{exe-org-U4GLQ6OP.js → exe-org-SJXHLV6K.js} +76 -51
- package/dist/{exe-snapshot-U7ONBYNY.js → exe-snapshot-EFWPXTXE.js} +45 -36
- package/dist/{fast-db-init-W3NGKAEU.js → fast-db-init-BQZOQNT3.js} +1 -1
- package/dist/{founder-context-ZSIBRVDM.js → founder-context-KG2ZAOXY.js} +2 -2
- package/dist/{founder-monitor-envelope-L3IWZLFY.js → founder-monitor-envelope-NYB5LLU4.js} +4 -4
- package/dist/gateway/index.js +20 -18
- package/dist/{gateway-client-DJFCVIPT.js → gateway-client-ODMUXUL3.js} +1 -1
- package/dist/{git-staleness-OF24QXFZ.js → git-staleness-OPGEAJA7.js} +6 -4
- package/dist/{global-procedures-WSIOWO43.js → global-procedures-3KXY4LL6.js} +8 -6
- package/dist/{graph-auto-extract-IEVVN3L3.js → graph-auto-extract-I7H2F5NJ.js} +10 -8
- package/dist/{graph-query-JDZWAVCU.js → graph-query-E7JBSNY5.js} +1 -1
- package/dist/{graph-rag-BKAD2XQA.js → graph-rag-H24CMFP2.js} +5 -4
- package/dist/{hook-integrity-TPWDGX2M.js → hook-integrity-PGQ3OX4S.js} +1 -1
- package/dist/{hook-prefetch-FD6VGJJA.js → hook-prefetch-7AZJER6Z.js} +23 -21
- package/dist/hook-registration-liveness-NGQRFKAA.js +11 -0
- package/dist/hooks/bug-report-worker.js +26 -24
- package/dist/hooks/codex-stop-task-finalizer.js +28 -26
- package/dist/hooks/commit-complete.js +26 -24
- package/dist/hooks/error-recall.js +16 -14
- package/dist/hooks/exe-heartbeat-hook.js +9 -7
- package/dist/hooks/ingest-worker.js +12 -10
- package/dist/hooks/ingest.js +22 -17
- package/dist/hooks/instructions-loaded.js +11 -9
- package/dist/hooks/manifest.json +20 -20
- package/dist/hooks/notification.js +10 -8
- package/dist/hooks/post-compact.js +9 -7
- package/dist/hooks/post-tool-combined.js +14 -14
- package/dist/hooks/pre-compact.js +26 -24
- package/dist/hooks/pre-tool-use.js +2 -2
- package/dist/hooks/prompt-submit.js +47 -41
- package/dist/hooks/session-end.js +38 -42
- package/dist/hooks/session-start.js +26 -18
- package/dist/hooks/stop.js +29 -27
- package/dist/hooks/subagent-stop.js +29 -27
- package/dist/hooks/summary-worker.js +32 -30
- package/dist/index.js +37 -35
- package/dist/{installer-OTI5SA43.js → installer-2ZS3LHCU.js} +12 -9
- package/dist/{installer-NMOBSEZ2.js → installer-NH3A3HWC.js} +14 -9
- package/dist/{installer-SRJGE4GU.js → installer-UJ73PGRD.js} +21 -9
- package/dist/{intercom-queue-4FFXCBHO.js → intercom-queue-OE25GJF2.js} +21 -19
- package/dist/lib/agent-config.js +2 -2
- package/dist/lib/cloud-sync.js +24 -18
- package/dist/lib/consolidation.js +13 -11
- package/dist/lib/crypto.js +3 -3
- package/dist/lib/database.js +6 -4
- package/dist/lib/db-backup.js +1 -1
- package/dist/lib/db-write-worker-client.js +3 -1
- package/dist/lib/db-write-worker.js +65 -89
- package/dist/lib/db.js +6 -4
- package/dist/lib/delivery-truth.js +5 -1
- package/dist/lib/device-registry.js +1 -1
- package/dist/lib/embedder.js +2 -2
- package/dist/lib/employee-templates.js +9 -7
- package/dist/lib/employees.js +6 -4
- package/dist/lib/exe-daemon.js +425 -314
- package/dist/lib/file-grep.js +15 -21
- package/dist/lib/hybrid-search.js +19 -13
- package/dist/lib/identity-templates.js +1 -1
- package/dist/lib/identity.js +6 -4
- package/dist/lib/keychain.js +1 -1
- package/dist/lib/license.js +22 -6
- package/dist/lib/messaging.js +22 -20
- package/dist/lib/post-tool-memory.js +10 -8
- package/dist/lib/registry-proxy.js +1 -1
- package/dist/lib/reminders.js +7 -5
- package/dist/lib/runtime-table.js +1 -1
- package/dist/lib/schedules.js +12 -10
- package/dist/lib/session-registry.js +8 -6
- package/dist/lib/skill-learning.js +13 -11
- package/dist/lib/status-brief.js +2 -2
- package/dist/lib/store.js +17 -9
- package/dist/lib/task-router.js +7 -5
- package/dist/lib/tasks.js +23 -21
- package/dist/lib/tmux-routing.js +21 -19
- package/dist/lib/tmux-status.js +4 -1
- package/dist/lib/token-spend.js +7 -5
- package/dist/lib/ws-client.js +1 -1
- package/dist/{license-gate-R4JWTWM4.js → license-gate-XQ2KN5I5.js} +3 -3
- package/dist/{license-recheck-3MBJ4IJX.js → license-recheck-IIBKR2V5.js} +1 -1
- package/dist/{license-sync-BVSG3WMW.js → license-sync-76JVI2M5.js} +151 -8
- package/dist/{local-secret-inventory-JWNBHZZ4.js → local-secret-inventory-MJT7NJLY.js} +2 -2
- package/dist/{mailbox-inbox-MTAT4MXX.js → mailbox-inbox-BPZP4GIZ.js} +1 -1
- package/dist/maintenance-worker-54VZTFIK.js +371 -0
- package/dist/mcp/register-tools.js +110 -107
- package/dist/mcp/server.js +113 -110
- package/dist/mcp/tools/complete-reminder.js +8 -6
- package/dist/mcp/tools/create-reminder.js +8 -6
- package/dist/mcp/tools/create-task.js +26 -24
- package/dist/mcp/tools/deactivate-behavior.js +15 -13
- package/dist/mcp/tools/list-reminders.js +8 -6
- package/dist/mcp/tools/list-tasks.js +26 -24
- package/dist/mcp/tools/send-message.js +25 -23
- package/dist/mcp/tools/update-task.js +24 -22
- package/dist/{mcp-child-registry-TIZERM7O.js → mcp-child-registry-5VUG5ATZ.js} +1 -1
- package/dist/{mcp-http-config-VUMSFWFH.js → mcp-http-config-SKXESWHA.js} +9 -7
- package/dist/{mcp-session-identity-DZHWEJRV.js → mcp-session-identity-HYMLJXXA.js} +21 -19
- package/dist/{memory-cards-JVXTMSAT.js → memory-cards-PAZDUQ3B.js} +16 -32
- package/dist/{memory-graph-extractor-PPBJMYFJ.js → memory-graph-extractor-BC6QKBY6.js} +11 -9
- package/dist/{memory-poisoning-defense-K5Q74XQ4.js → memory-poisoning-defense-BRGIHF6J.js} +9 -7
- package/dist/{memory-pressure-watchdog-YMJH5CSA.js → memory-pressure-watchdog-HR6TPOMT.js} +22 -20
- package/dist/{memory-reflection-7BZWIHRE.js → memory-reflection-LO7VFBL3.js} +38 -59
- package/dist/memory-write-repository-J25USX63.js +16 -0
- package/dist/{monitor-grants-Q7X3MYQP.js → monitor-grants-YQTO6NWR.js} +3 -3
- package/dist/{monitor-identity-ZQB4IXEE.js → monitor-identity-POVTG76Y.js} +2 -2
- package/dist/{notification-ledger-XRAXL5OI.js → notification-ledger-KLD6GZTG.js} +22 -20
- package/dist/{notifications-JE3PX55X.js → notifications-3R6HNHDR.js} +21 -19
- package/dist/{orchestration-events-JCQ5F5IJ.js → orchestration-events-CHY3GOJD.js} +7 -5
- package/dist/{orchestrator-X65INDTR.js → orchestrator-GAL3HOAD.js} +23 -21
- package/dist/{org-brief-session-3PQ22UIX.js → org-brief-session-LQ2DBYVF.js} +17 -15
- package/dist/{org-consent-policy-VGELJ7K7.js → org-consent-policy-KFUP7QPG.js} +5 -5
- package/dist/{org-join-6TO5ZYUZ.js → org-join-MXZCIQWX.js} +8 -8
- package/dist/{org-key-admin-XHYVRRAZ.js → org-key-admin-4UK6QUT7.js} +9 -9
- package/dist/{org-key-pin-TTTYGTQL.js → org-key-pin-ZOX4OM3O.js} +3 -3
- package/dist/{org-membership-Y7T2BS57.js → org-membership-D5TPN45F.js} +4 -4
- package/dist/{org-partner-config-OP4NEUNF.js → org-partner-config-3FXSYPQA.js} +7 -7
- package/dist/{org-partner-runtime-YNVUNT2R.js → org-partner-runtime-TH3LMPII.js} +20 -16
- package/dist/{org-row-visibility-JBBXNYXD.js → org-row-visibility-Y5R33C5U.js} +1 -1
- package/dist/{pipeline-router-EIBB7QNG.js → pipeline-router-E2JZLDK6.js} +7 -5
- package/dist/{plan-limits-MEWXYLEN.js → plan-limits-NYI6R4IK.js} +9 -7
- package/dist/{platform-procedures-Z7ZGBJWN.js → platform-procedures-RTD5E3BD.js} +5 -3
- package/dist/{pre-tool-use-impl-C6KJY22W.js → pre-tool-use-impl-LT4FRXBP.js} +127 -83
- package/dist/{project-boot-VEYFCCSL.js → project-boot-LIMXQKAF.js} +25 -17
- package/dist/{project-name-UYORSNGE.js → project-name-V62GWALX.js} +7 -5
- package/dist/{projection-worker-WYFDWS57.js → projection-worker-KLE3IZQ2.js} +5 -2
- package/dist/{prospective-memory-E6XBQFJA.js → prospective-memory-HRN7JFT2.js} +6 -4
- package/dist/{push-notifications-M7YU63FY.js → push-notifications-XC6EQEXF.js} +22 -20
- package/dist/{reproject-worktree-memories-B5XMGJSD.js → reproject-worktree-memories-4CAVZSFE.js} +21 -19
- package/dist/{reranker-SRA4BR7N.js → reranker-2RU6IIX2.js} +1 -1
- package/dist/{retrieval-health-P2JPZUPV.js → retrieval-health-4Q5TOV2S.js} +1 -1
- package/dist/{review-polling-KQPN7IQE.js → review-polling-WOWIMBCL.js} +22 -20
- package/dist/runtime/index.js +30 -28
- package/dist/{session-events-6LDDKKY3.js → session-events-OPMS2C5F.js} +22 -20
- package/dist/{session-kill-telemetry-5DSRGWCL.js → session-kill-telemetry-3GWATSIX.js} +22 -20
- package/dist/{session-scope-XG5R3P3D.js → session-scope-TIRGR4MH.js} +21 -19
- package/dist/{setup-wizard-7QFLZIKT.js → setup-wizard-B2JBVGNH.js} +3 -3
- package/dist/{shard-manager-HHHHV2KZ.js → shard-manager-C7LYX6E4.js} +5 -1
- package/dist/{skill-refinement-I5RMAHSC.js → skill-refinement-FWQFYNBI.js} +7 -5
- package/dist/skill-retrieval-PPLFC5RY.js +166 -0
- package/dist/skill-usage-NDB67PU2.js +25 -0
- package/dist/{stack-generate-manifest-AKMZ3AUX.js → stack-generate-manifest-AXI55MEQ.js} +6 -6
- package/dist/{stack-promote-34CE2HHF.js → stack-promote-6N23OGZY.js} +6 -6
- package/dist/stack-release-2CXFYVWM.js +2770 -0
- package/dist/{stack-update-ZQQ5YYPJ.js → stack-update-U53FBVCQ.js} +13 -5
- package/dist/{steward-gate-AQJ6KT2C.js → steward-gate-TUA3QCN7.js} +7 -5
- package/dist/{subagent-brief-injection-3GU7YAWY.js → subagent-brief-injection-N52RWYFZ.js} +34 -32
- package/dist/{subagent-spawn-ledger-52I66CLW.js → subagent-spawn-ledger-OI23OT4I.js} +1 -1
- package/dist/support-bug-actions-XWCJI6S5.js +30 -0
- package/dist/support-inbox-MMVTCXRX.js +77 -0
- package/dist/{support-outbox-KNI3FR3G.js → support-outbox-2TG2UV6J.js} +2 -2
- package/dist/{task-enforcement-CAA6D2MH.js → task-enforcement-JDMBAAOY.js} +22 -20
- package/dist/{task-request-inbox-QBZVU66E.js → task-request-inbox-PKJCYKJV.js} +9 -5
- package/dist/{task-scope-NHXB4ZRN.js → task-scope-32HQEV6W.js} +27 -19
- package/dist/{tasks-crud-JHSWL5NM.js → tasks-crud-CYKUKS3F.js} +21 -19
- package/dist/{tasks-notify-7PBE4U7T.js → tasks-notify-YND5MKWJ.js} +22 -20
- package/dist/{tasks-review-PPPVEE62.js → tasks-review-CG2A5GM3.js} +23 -19
- package/dist/{telemetry-upload-YU2VRNHX.js → telemetry-upload-WLUMEFAB.js} +11 -9
- package/dist/{token-budget-QCMWKG3K.js → token-budget-3YHAY5LL.js} +7 -5
- package/dist/{tool-capability-index-7AWQAJRP.js → tool-capability-index-2ADOWH43.js} +2 -2
- package/dist/{tool-gates-5Q3RSQEG.js → tool-gates-7ENOOYMR.js} +5 -3
- package/dist/{tool-gates-QD26D2NE.js → tool-gates-EKJTLVGN.js} +1 -1
- package/dist/{tool-telemetry-LTOIC64I.js → tool-telemetry-VUP7S6HC.js} +1 -1
- package/dist/tui/App.js +59 -35
- package/dist/{tui-data-NDBXD6U7.js → tui-data-BOQTOW2G.js} +25 -23
- package/dist/{update-support-BMJM4NG7.js → update-support-WT3S3AQ4.js} +21 -21
- package/dist/{whatsapp-QQLDAHUX.js → whatsapp-OZGIF2EM.js} +2 -2
- package/dist/{wiki-acl-W6WDCVCP.js → wiki-acl-LTEQJVDA.js} +1 -1
- package/dist/{work-claims-6DM32MGO.js → work-claims-CMV2GWIW.js} +8 -6
- package/dist/{work-state-heartbeat-HG7D4AWJ.js → work-state-heartbeat-S45TXK4M.js} +1 -1
- package/dist/{worker-gate-FTMW7GBB.js → worker-gate-7Z6NMM3G.js} +1 -1
- package/dist/{workflow-engine-ZWC6CCXE.js → workflow-engine-ZSQDXZQ7.js} +2 -2
- package/dist/{worktree-EMQCPGFE.js → worktree-NMWDVT6N.js} +8 -6
- package/dist/worktree-ownership-guard-ZVIWJAOP.js +35 -0
- package/dist/{worktree-sweep-XVUJZBXV.js → worktree-sweep-Q62ZIT3U.js} +9 -7
- package/package.json +14 -8
- package/release-notes.json +7 -41
- package/src/commands/exe/afk.md +6 -0
- package/src/commands/exe/call.md +6 -0
- package/src/commands/exe/employee-heartbeat.md +6 -0
- package/src/commands/exe/intercom.md +6 -0
- package/src/commands/exe/kill.md +6 -0
- package/src/commands/exe/launch.md +6 -0
- package/src/commands/exe/logs.md +1 -1
- package/src/commands/exe/sessions.md +6 -0
- package/src/commands/exe/setup.md +7 -3
- package/src/commands/exe/status.md +6 -0
- package/src/commands/exe-reference.md +25 -36
- package/src/commands/exe.md +19 -28
- package/stack.release.json +11 -11
- package/dist/chunk-3B6FLNLV.js +0 -30
- package/dist/chunk-FXU7JOXK.js +0 -6
- package/dist/chunk-QFAFKEB5.js +0 -820
- package/dist/conversations-retention-C4BLKFEL.js +0 -54
- package/dist/stack-release-5PGWV5D4.js +0 -1607
- package/dist/support-inbox-NY5TB3FN.js +0 -51
- /package/dist/{chunk-U2D6PJ5T.js → chunk-65G7ZTGE.js} +0 -0
- /package/dist/{chunk-DN3ZR3UE.js → chunk-CP7Z35MJ.js} +0 -0
- /package/dist/{chunk-XDVOGDBC.js → chunk-KBBWALJV.js} +0 -0
- /package/dist/{chunk-JRIH6I7D.js → chunk-LZXYPTY4.js} +0 -0
- /package/dist/{chunk-GIRD7O5X.js → chunk-MCWEW2SG.js} +0 -0
- /package/dist/{chunk-TKAU7IJ2.js → chunk-MQHUJLCA.js} +0 -0
- /package/dist/{chunk-M4XY4JRK.js → chunk-O53LTOXK.js} +0 -0
- /package/dist/{chunk-DZN7SDY2.js → chunk-OSVTH3SG.js} +0 -0
- /package/dist/{chunk-AJK2PVQW.js → chunk-QXXEXGX3.js} +0 -0
- /package/dist/{chunk-AWWDKF22.js → chunk-SFWNTO2F.js} +0 -0
- /package/dist/{chunk-2Q2CD6CD.js → chunk-WC5HF2FN.js} +0 -0
- /package/dist/{core-memory-O6D5UC3T.js → core-memory-MMMW3TF3.js} +0 -0
- /package/dist/{memory-isolation-EBFFC6HF.js → memory-isolation-67ACKQ2M.js} +0 -0
- /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
|
|
21
|
-
if (TRIGGER_COOLDOWN_MS <= 0) return
|
|
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
|
-
|
|
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
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
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
|
-
|
|
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
|
-
|
|
415
|
-
isSessionAliveFs,
|
|
410
|
+
evaluateNestedSpawnGuard,
|
|
416
411
|
ownerLockDirFs,
|
|
417
|
-
pidFromSessionKey,
|
|
418
|
-
readOwnerSessionFs,
|
|
419
412
|
readOwnerStampFs,
|
|
420
|
-
|
|
413
|
+
readOwnerSessionFs,
|
|
414
|
+
writeOwnerSessionFs,
|
|
415
|
+
pidFromSessionKey,
|
|
416
|
+
isSessionAliveFs,
|
|
417
|
+
evaluateWorktreeOwnership,
|
|
418
|
+
isEscapeOrReadOnly,
|
|
419
|
+
isInertAssignment
|
|
421
420
|
};
|
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
} from "./chunk-S2YTU74T.js";
|
|
8
8
|
import {
|
|
9
9
|
createTask
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-QDBKMEYY.js";
|
|
11
11
|
import {
|
|
12
12
|
getActiveAgent
|
|
13
|
-
} from "./chunk-
|
|
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-
|
|
21
|
+
} from "./chunk-QDVLVLXP.js";
|
|
22
22
|
import {
|
|
23
23
|
getPaneCwdAsync
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-6L4VIYLZ.js";
|
|
25
25
|
import {
|
|
26
26
|
recordOrchestrationEventBestEffort
|
|
27
|
-
} from "./chunk-
|
|
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-
|
|
37
|
+
} from "./chunk-GWAN2BDB.js";
|
|
38
38
|
import {
|
|
39
39
|
getLicenseSync
|
|
40
|
-
} from "./chunk-
|
|
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-
|
|
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.
|
|
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
|
|
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
|
|
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("
|
|
679
|
-
spawn_model: z.string().optional().describe("
|
|
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
|
-
|
|
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
|
-
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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-
|
|
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-
|
|
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,
|