@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
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-MMS2HBRT.js";
|
|
4
4
|
|
|
5
5
|
// src/lib/worker-gate.ts
|
|
6
|
-
import { readdirSync, writeFileSync, unlinkSync, mkdirSync,
|
|
6
|
+
import { readdirSync, writeFileSync, unlinkSync, mkdirSync, readFileSync } from "fs";
|
|
7
7
|
import path from "path";
|
|
8
8
|
import { totalmem, cpus } from "os";
|
|
9
9
|
var WORKER_PID_DIR = path.join(EXE_AI_DIR, "worker-pids");
|
|
@@ -15,11 +15,31 @@ function computeMaxWorkers() {
|
|
|
15
15
|
return Math.max(2, Math.min(8, Math.min(byRam, byCpu)));
|
|
16
16
|
}
|
|
17
17
|
var MAX_CONCURRENT_WORKERS = process.env.EXE_MAX_WORKERS ? Math.max(1, parseInt(process.env.EXE_MAX_WORKERS, 10) || 3) : computeMaxWorkers();
|
|
18
|
+
function errnoOf(err) {
|
|
19
|
+
return err?.code;
|
|
20
|
+
}
|
|
21
|
+
function describe(err) {
|
|
22
|
+
const code = errnoOf(err);
|
|
23
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
24
|
+
return code ? `${code}: ${msg}` : msg;
|
|
25
|
+
}
|
|
26
|
+
function pidLiveness(pid) {
|
|
27
|
+
try {
|
|
28
|
+
process.kill(pid, 0);
|
|
29
|
+
return true;
|
|
30
|
+
} catch (err) {
|
|
31
|
+
const code = errnoOf(err);
|
|
32
|
+
if (code === "ESRCH") return false;
|
|
33
|
+
if (code === "EPERM") return true;
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
18
37
|
function tryAcquireWorkerSlot() {
|
|
38
|
+
let reservationPath = null;
|
|
19
39
|
try {
|
|
20
40
|
mkdirSync(WORKER_PID_DIR, { recursive: true });
|
|
21
41
|
const reservationId = `res-${process.pid}-${Date.now()}`;
|
|
22
|
-
|
|
42
|
+
reservationPath = path.join(WORKER_PID_DIR, `${reservationId}.pid`);
|
|
23
43
|
writeFileSync(reservationPath, String(process.pid));
|
|
24
44
|
const files = readdirSync(WORKER_PID_DIR);
|
|
25
45
|
let alive = 0;
|
|
@@ -29,14 +49,13 @@ function tryAcquireWorkerSlot() {
|
|
|
29
49
|
const resParts = f.replace(".pid", "").split("-");
|
|
30
50
|
const resPid = parseInt(resParts[1] ?? "", 10);
|
|
31
51
|
if (!isNaN(resPid) && resPid > 0) {
|
|
32
|
-
|
|
33
|
-
process.kill(resPid, 0);
|
|
34
|
-
alive++;
|
|
35
|
-
} catch {
|
|
52
|
+
if (pidLiveness(resPid) === false) {
|
|
36
53
|
try {
|
|
37
54
|
unlinkSync(path.join(WORKER_PID_DIR, f));
|
|
38
55
|
} catch {
|
|
39
56
|
}
|
|
57
|
+
} else {
|
|
58
|
+
alive++;
|
|
40
59
|
}
|
|
41
60
|
} else {
|
|
42
61
|
alive++;
|
|
@@ -46,14 +65,13 @@ function tryAcquireWorkerSlot() {
|
|
|
46
65
|
const dashIdx = f.lastIndexOf("-");
|
|
47
66
|
const pid = parseInt(f.slice(dashIdx + 1).replace(".pid", ""), 10);
|
|
48
67
|
if (isNaN(pid)) continue;
|
|
49
|
-
|
|
50
|
-
process.kill(pid, 0);
|
|
51
|
-
alive++;
|
|
52
|
-
} catch {
|
|
68
|
+
if (pidLiveness(pid) === false) {
|
|
53
69
|
try {
|
|
54
70
|
unlinkSync(path.join(WORKER_PID_DIR, f));
|
|
55
71
|
} catch {
|
|
56
72
|
}
|
|
73
|
+
} else {
|
|
74
|
+
alive++;
|
|
57
75
|
}
|
|
58
76
|
}
|
|
59
77
|
if (alive >= MAX_CONCURRENT_WORKERS) {
|
|
@@ -68,15 +86,27 @@ function tryAcquireWorkerSlot() {
|
|
|
68
86
|
} catch {
|
|
69
87
|
}
|
|
70
88
|
return true;
|
|
71
|
-
} catch {
|
|
72
|
-
|
|
89
|
+
} catch (err) {
|
|
90
|
+
if (reservationPath) {
|
|
91
|
+
try {
|
|
92
|
+
unlinkSync(reservationPath);
|
|
93
|
+
} catch {
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
console.error(
|
|
97
|
+
`[worker-gate] Cannot count worker slots in ${WORKER_PID_DIR} (${describe(err)}) - refusing this spawn rather than bypassing MAX_CONCURRENT_WORKERS.`
|
|
98
|
+
);
|
|
99
|
+
return false;
|
|
73
100
|
}
|
|
74
101
|
}
|
|
75
102
|
function registerWorkerPid(pid) {
|
|
76
103
|
try {
|
|
77
104
|
mkdirSync(WORKER_PID_DIR, { recursive: true });
|
|
78
105
|
writeFileSync(path.join(WORKER_PID_DIR, `worker-${pid}.pid`), String(pid));
|
|
79
|
-
} catch {
|
|
106
|
+
} catch (err) {
|
|
107
|
+
console.error(
|
|
108
|
+
`[worker-gate] Failed to record worker pid ${pid} in ${WORKER_PID_DIR} (${describe(err)}) \u2014 it will not count toward MAX_CONCURRENT_WORKERS.`
|
|
109
|
+
);
|
|
80
110
|
}
|
|
81
111
|
}
|
|
82
112
|
function cleanupWorkerPid() {
|
|
@@ -89,26 +119,44 @@ var BACKFILL_LOCK = path.join(WORKER_PID_DIR, "backfill.lock");
|
|
|
89
119
|
function tryAcquireBackfillLock() {
|
|
90
120
|
try {
|
|
91
121
|
mkdirSync(WORKER_PID_DIR, { recursive: true });
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
122
|
+
let raw;
|
|
123
|
+
try {
|
|
124
|
+
raw = readFileSync(BACKFILL_LOCK, "utf8");
|
|
125
|
+
} catch (err) {
|
|
126
|
+
const code = errnoOf(err);
|
|
127
|
+
if (code === "ENOENT" || code === "ENOTDIR") {
|
|
128
|
+
raw = null;
|
|
129
|
+
} else {
|
|
130
|
+
console.error(
|
|
131
|
+
`[worker-gate] Backfill lock ${BACKFILL_LOCK} exists but could not be read (${describe(err)}) - refusing to start a second backfill.`
|
|
97
132
|
);
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (raw !== null) {
|
|
137
|
+
const pid = parseInt(raw.trim(), 10);
|
|
138
|
+
if (isNaN(pid) || pid <= 0) {
|
|
139
|
+
console.error(
|
|
140
|
+
`[worker-gate] Backfill lock ${BACKFILL_LOCK} holds no readable pid - refusing to start a second backfill. Delete that file if no backfill is running.`
|
|
141
|
+
);
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
const live = pidLiveness(pid);
|
|
145
|
+
if (live === true) return false;
|
|
146
|
+
if (live === null) {
|
|
147
|
+
console.error(
|
|
148
|
+
`[worker-gate] Could not determine whether backfill pid ${pid} is alive - refusing to start a second backfill.`
|
|
149
|
+
);
|
|
150
|
+
return false;
|
|
106
151
|
}
|
|
107
152
|
}
|
|
108
153
|
writeFileSync(BACKFILL_LOCK, String(process.pid));
|
|
109
154
|
return true;
|
|
110
|
-
} catch {
|
|
111
|
-
|
|
155
|
+
} catch (err) {
|
|
156
|
+
console.error(
|
|
157
|
+
`[worker-gate] Cannot evaluate the backfill lock in ${WORKER_PID_DIR} (${describe(err)}) - refusing to start a backfill.`
|
|
158
|
+
);
|
|
159
|
+
return false;
|
|
112
160
|
}
|
|
113
161
|
}
|
|
114
162
|
function releaseBackfillLock() {
|
|
@@ -126,8 +126,32 @@ function declaredArtifactsFromManifest(manifest, options) {
|
|
|
126
126
|
}
|
|
127
127
|
return out;
|
|
128
128
|
}
|
|
129
|
+
var OBSERVATION_MAX_AGE_HOURS = 24;
|
|
130
|
+
function creditObservation(obs, nowMs, maxAgeHours = OBSERVATION_MAX_AGE_HOURS) {
|
|
131
|
+
if (!obs || typeof obs !== "object") {
|
|
132
|
+
return { credited: false, why: "no observation was supplied" };
|
|
133
|
+
}
|
|
134
|
+
const source = typeof obs.source === "string" && obs.source.trim() !== "" ? obs.source : "<unnamed source>";
|
|
135
|
+
if (obs.ok !== true) {
|
|
136
|
+
return { credited: false, why: `${source} did not report success` };
|
|
137
|
+
}
|
|
138
|
+
const atMs = typeof obs.at === "string" ? Date.parse(obs.at) : Number.NaN;
|
|
139
|
+
if (!Number.isFinite(atMs)) {
|
|
140
|
+
return { credited: false, why: `${source} reported success at an unreadable time (${String(obs.at)})` };
|
|
141
|
+
}
|
|
142
|
+
const ageH = (nowMs - atMs) / 36e5;
|
|
143
|
+
if (!(ageH <= maxAgeHours)) {
|
|
144
|
+
return {
|
|
145
|
+
credited: false,
|
|
146
|
+
why: `${source} last succeeded ${ageH.toFixed(1)}h ago, older than the ${maxAgeHours}h window`
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
return { credited: true, why: `${source} succeeded ${Math.max(0, ageH).toFixed(1)}h ago` };
|
|
150
|
+
}
|
|
129
151
|
function evaluateDeliveryChannels(input) {
|
|
130
152
|
const { detected, registry, npmFiles } = input;
|
|
153
|
+
const observations = input.observations ?? {};
|
|
154
|
+
const nowMs = input.now ?? Date.now();
|
|
131
155
|
const normalizedFiles = npmFiles.map((f) => f.replace(/^\.\//, "").replace(/\/+$/, ""));
|
|
132
156
|
const covered = (p) => {
|
|
133
157
|
const path = p.replace(/^\.\//, "").replace(/\/+$/, "");
|
|
@@ -180,13 +204,25 @@ function evaluateDeliveryChannels(input) {
|
|
|
180
204
|
});
|
|
181
205
|
continue;
|
|
182
206
|
}
|
|
207
|
+
const credit = creditObservation(observations[d.path], nowMs);
|
|
208
|
+
if (credit.credited) {
|
|
209
|
+
out.push({
|
|
210
|
+
path: d.path,
|
|
211
|
+
channel,
|
|
212
|
+
verdict: "channel-declared",
|
|
213
|
+
evidence: "observation",
|
|
214
|
+
observed: true,
|
|
215
|
+
detail: `${d.path} declares the ${channel} channel, passes the checks that declaration implies, and a deployment WAS observed: ${credit.why}.`
|
|
216
|
+
});
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
183
219
|
out.push({
|
|
184
220
|
path: d.path,
|
|
185
221
|
channel,
|
|
186
222
|
verdict: "channel-declared",
|
|
187
223
|
evidence: "declaration",
|
|
188
224
|
observed: false,
|
|
189
|
-
detail: `${d.path} declares the ${channel} channel and passes the checks that declaration implies. No deployment was observed \u2014 this says where a change WOULD go, not that it went.`
|
|
225
|
+
detail: `${d.path} declares the ${channel} channel and passes the checks that declaration implies. No deployment was observed (${credit.why}) \u2014 this says where a change WOULD go, not that it went.`
|
|
190
226
|
});
|
|
191
227
|
}
|
|
192
228
|
return out;
|
|
@@ -305,6 +341,8 @@ export {
|
|
|
305
341
|
repositoryKey,
|
|
306
342
|
compareLiveArtifacts,
|
|
307
343
|
declaredArtifactsFromManifest,
|
|
344
|
+
OBSERVATION_MAX_AGE_HOURS,
|
|
345
|
+
creditObservation,
|
|
308
346
|
evaluateDeliveryChannels,
|
|
309
347
|
extractGateCookieNames,
|
|
310
348
|
evaluateAnonymousGate,
|
|
@@ -2,10 +2,10 @@ import {
|
|
|
2
2
|
BUSY_PATTERN,
|
|
3
3
|
sendIntercom,
|
|
4
4
|
updateTaskStatus
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-QDVLVLXP.js";
|
|
6
6
|
import {
|
|
7
7
|
recordOrchestrationEventBestEffort
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-DPYZW42H.js";
|
|
9
9
|
import {
|
|
10
10
|
hasPassed
|
|
11
11
|
} from "./chunk-YRUZK2QA.js";
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
baseAgentName,
|
|
14
14
|
getCoordinatorName,
|
|
15
15
|
isCoordinatorName
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-3UD3OF3X.js";
|
|
17
17
|
import {
|
|
18
18
|
isAutonomousTmuxSpawnEnabled
|
|
19
19
|
} from "./chunk-MMS2HBRT.js";
|
|
@@ -338,7 +338,7 @@ async function surfaceStaleDispatchPendingSignals(scopeList, now, thresholdMs =
|
|
|
338
338
|
const sessionScope = signalScope ?? (scopeList.length === 1 ? scopeList[0] : null);
|
|
339
339
|
if (allowedScopes.size > 0 && sessionScope && !allowedScopes.has(sessionScope)) continue;
|
|
340
340
|
try {
|
|
341
|
-
const { writeNotification } = await import("./notifications-
|
|
341
|
+
const { writeNotification } = await import("./notifications-3R6HNHDR.js");
|
|
342
342
|
await writeNotification({
|
|
343
343
|
agentId: getCoordinatorName(),
|
|
344
344
|
agentRole: "COO",
|
|
@@ -475,8 +475,32 @@ async function runTaskEnforcementTick(deps) {
|
|
|
475
475
|
source: "task-enforcement.runTaskEnforcementTick",
|
|
476
476
|
payload: { sessionCount: sessions.length }
|
|
477
477
|
});
|
|
478
|
+
if (deps.scopeFilter.failClosed) {
|
|
479
|
+
const why = deps.scopeFilter.reason ?? "session scope could not be resolved";
|
|
480
|
+
writeAuditEntry({
|
|
481
|
+
timestamp: new Date(now).toISOString(),
|
|
482
|
+
session: "-",
|
|
483
|
+
agent: "-",
|
|
484
|
+
role: "daemon",
|
|
485
|
+
action: "scope_unresolved",
|
|
486
|
+
reason: `enforcement REFUSED this tick \u2014 ${why}; no session was evaluated and no conclusion about open tasks was reached`
|
|
487
|
+
});
|
|
488
|
+
process.stderr.write(
|
|
489
|
+
`[exed] Task enforcement REFUSED this tick: ${why}. No session was evaluated \u2014 this is NOT a finding that agents have no open tasks. Resolve the coordinator scope (EXE_SESSION_SCOPE) or run one daemon per coordinator.
|
|
490
|
+
`
|
|
491
|
+
);
|
|
492
|
+
recordOrchestrationEventBestEffort({
|
|
493
|
+
eventType: "daemon.tick.refused",
|
|
494
|
+
source: "task-enforcement.runTaskEnforcementTick",
|
|
495
|
+
severity: "warn",
|
|
496
|
+
result: "refused",
|
|
497
|
+
payload: { reason: why }
|
|
498
|
+
});
|
|
499
|
+
return;
|
|
500
|
+
}
|
|
478
501
|
const hasScopeRestriction = deps.scopeFilter.sql.length > 0;
|
|
479
502
|
const allowedScope = hasScopeRestriction && deps.scopeFilter.args.length > 0 ? String(deps.scopeFilter.args[deps.scopeFilter.args.length - 1]) : null;
|
|
503
|
+
const scopeSkipped = [];
|
|
480
504
|
for (const session of sessions) {
|
|
481
505
|
if (!session.includes("-")) continue;
|
|
482
506
|
const rawAgent = session.split("-")[0];
|
|
@@ -484,7 +508,10 @@ async function runTaskEnforcementTick(deps) {
|
|
|
484
508
|
if (!agentName) continue;
|
|
485
509
|
if (allowedScope) {
|
|
486
510
|
const sessionSuffix = session.slice(session.indexOf("-") + 1);
|
|
487
|
-
if (sessionSuffix !== allowedScope)
|
|
511
|
+
if (sessionSuffix !== allowedScope) {
|
|
512
|
+
scopeSkipped.push(session);
|
|
513
|
+
continue;
|
|
514
|
+
}
|
|
488
515
|
}
|
|
489
516
|
if ("isAlive" in transport && typeof transport.isAlive === "function") {
|
|
490
517
|
if (!transport.isAlive(session)) continue;
|
|
@@ -656,6 +683,16 @@ async function runTaskEnforcementTick(deps) {
|
|
|
656
683
|
} catch {
|
|
657
684
|
}
|
|
658
685
|
}
|
|
686
|
+
if (scopeSkipped.length > 0) {
|
|
687
|
+
writeAuditEntry({
|
|
688
|
+
timestamp: new Date(now).toISOString(),
|
|
689
|
+
session: scopeSkipped.join(","),
|
|
690
|
+
agent: "-",
|
|
691
|
+
role: "daemon",
|
|
692
|
+
action: "scope_skipped",
|
|
693
|
+
reason: `${scopeSkipped.length} live session(s) not evaluated \u2014 outside this daemon's coordinator scope "${allowedScope}"`
|
|
694
|
+
});
|
|
695
|
+
}
|
|
659
696
|
if (processedAnyEmployee) {
|
|
660
697
|
try {
|
|
661
698
|
const scopeList = allowedScope ? [...processedScopes].filter((s) => s === allowedScope) : [...processedScopes];
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isExeSession
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-QDVLVLXP.js";
|
|
4
4
|
import {
|
|
5
5
|
recordOrchestrationEventBestEffort
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-DPYZW42H.js";
|
|
7
7
|
import {
|
|
8
8
|
getClient,
|
|
9
9
|
isCoordinatorName
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-3UD3OF3X.js";
|
|
11
11
|
import {
|
|
12
12
|
isDaemonAlive
|
|
13
13
|
} from "./chunk-QH5ZQ5SJ.js";
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
import {
|
|
2
2
|
MultiAgentOrchestrator
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-3GL3E4TD.js";
|
|
4
4
|
import {
|
|
5
5
|
createTokenBudgetMiddleware
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-TLSFGXXE.js";
|
|
7
7
|
import {
|
|
8
8
|
createQuietRenderer,
|
|
9
9
|
createTerminalRenderer,
|
|
10
10
|
renderAgentEvents
|
|
11
11
|
} from "./chunk-YZFZDJWZ.js";
|
|
12
|
-
import {
|
|
13
|
-
checkDangerousPatterns,
|
|
14
|
-
hasCriticalPattern
|
|
15
|
-
} from "./chunk-CMCYL2JC.js";
|
|
16
12
|
import {
|
|
17
13
|
checkPathSafety,
|
|
18
14
|
checkReadPathSafety,
|
|
19
15
|
containsPathTraversal
|
|
20
16
|
} from "./chunk-NGVOA6ZQ.js";
|
|
17
|
+
import {
|
|
18
|
+
checkDangerousPatterns,
|
|
19
|
+
hasCriticalPattern
|
|
20
|
+
} from "./chunk-CMCYL2JC.js";
|
|
21
21
|
import {
|
|
22
22
|
ContextManager,
|
|
23
23
|
agentLoop,
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
recordDenial,
|
|
31
31
|
recordSuccess,
|
|
32
32
|
shouldFallbackToAsk
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-U44Y7RC7.js";
|
|
34
34
|
import {
|
|
35
35
|
composeHooks,
|
|
36
36
|
createDefaultHooks
|
|
@@ -212,7 +212,7 @@ function createExeOSHooks(config) {
|
|
|
212
212
|
);
|
|
213
213
|
}
|
|
214
214
|
try {
|
|
215
|
-
const { listBehaviors } = await import("./behaviors-
|
|
215
|
+
const { listBehaviors } = await import("./behaviors-RMLDPLOF.js");
|
|
216
216
|
const behaviors = await listBehaviors(config.agentId, config.projectName, 12);
|
|
217
217
|
if (behaviors.length > 0) {
|
|
218
218
|
process.stderr.write(
|
|
@@ -250,7 +250,7 @@ function createExeOSHooks(config) {
|
|
|
250
250
|
const ALLOWED_RE = /^(Bash|Edit|Write|Read|Glob|Grep|Agent|mcp__.*)$/;
|
|
251
251
|
if (!ALLOWED_RE.test(toolName)) return;
|
|
252
252
|
try {
|
|
253
|
-
const { extractSemanticText } = await import("./content-extractor-
|
|
253
|
+
const { extractSemanticText } = await import("./content-extractor-OGXETBOX.js");
|
|
254
254
|
const { writeMemory } = await import("./lib/store.js");
|
|
255
255
|
const toolInput = block.input ?? {};
|
|
256
256
|
const toolResponse = result.isError ? { error: result.content } : { output: result.content };
|
|
@@ -333,7 +333,7 @@ function createExeOSHooks(config) {
|
|
|
333
333
|
async onSubagentStop(_reason) {
|
|
334
334
|
try {
|
|
335
335
|
const { getClient } = await import("./lib/database.js");
|
|
336
|
-
const { sessionScopeFilter } = await import("./task-scope-
|
|
336
|
+
const { sessionScopeFilter } = await import("./task-scope-32HQEV6W.js");
|
|
337
337
|
const client = getClient();
|
|
338
338
|
const ehScope = sessionScopeFilter();
|
|
339
339
|
const tasks = await client.execute({
|
|
@@ -373,7 +373,7 @@ function createExeOSHooks(config) {
|
|
|
373
373
|
setAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
374
374
|
});
|
|
375
375
|
try {
|
|
376
|
-
const { writeNotification } = await import("./notifications-
|
|
376
|
+
const { writeNotification } = await import("./notifications-3R6HNHDR.js");
|
|
377
377
|
await writeNotification({
|
|
378
378
|
agentId: config.agentId,
|
|
379
379
|
agentRole: "employee",
|
|
@@ -444,7 +444,7 @@ function createExeOSHooks(config) {
|
|
|
444
444
|
try {
|
|
445
445
|
const { writeMemory, flushBatch } = await import("./lib/store.js");
|
|
446
446
|
const { getClient } = await import("./lib/database.js");
|
|
447
|
-
const { sessionScopeFilter: cpScopeFilter } = await import("./task-scope-
|
|
447
|
+
const { sessionScopeFilter: cpScopeFilter } = await import("./task-scope-32HQEV6W.js");
|
|
448
448
|
const client = getClient();
|
|
449
449
|
const cpScope = cpScopeFilter();
|
|
450
450
|
const tasks = await client.execute({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
extractSemanticText
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-IWY2OGQG.js";
|
|
4
4
|
import {
|
|
5
5
|
detectError
|
|
6
6
|
} from "./chunk-G2M7WQ2M.js";
|
|
@@ -9,10 +9,10 @@ import {
|
|
|
9
9
|
} from "./chunk-5MOYSU5A.js";
|
|
10
10
|
import {
|
|
11
11
|
redactSecrets
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-ZUGQPYUY.js";
|
|
13
13
|
import {
|
|
14
14
|
getProjectName
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-ZZWFZ46U.js";
|
|
16
16
|
|
|
17
17
|
// src/lib/post-tool-memory.ts
|
|
18
18
|
var NON_INGESTIBLE_TOOLS = /* @__PURE__ */ new Set([
|
|
@@ -132,7 +132,7 @@ async function verifyOrBlock(hookPath) {
|
|
|
132
132
|
process.stderr.write(`[SECURITY] Hook tamper detected: ${filename} \u2014 ${result.reason}
|
|
133
133
|
`);
|
|
134
134
|
try {
|
|
135
|
-
const { pushNotifyAsync } = await import("./push-notifications-
|
|
135
|
+
const { pushNotifyAsync } = await import("./push-notifications-XC6EQEXF.js");
|
|
136
136
|
pushNotifyAsync({
|
|
137
137
|
event: "security_alert",
|
|
138
138
|
title: "Hook tamper detected",
|
|
@@ -38,6 +38,21 @@ var TOOL_GATES = {
|
|
|
38
38
|
* person is actually talking to.
|
|
39
39
|
*/
|
|
40
40
|
"org-member": [],
|
|
41
|
+
/**
|
|
42
|
+
* DECLARED unrestricted, not accidentally unrestricted.
|
|
43
|
+
*
|
|
44
|
+
* `isToolAllowed` now refuses a tool with no category (see below), so every
|
|
45
|
+
* registered tool must name one. These are the tools that were reachable by
|
|
46
|
+
* every role because they were simply MISSING from the map — the baseline
|
|
47
|
+
* `tests/tool-category-coverage.test.ts` used to carry. Declaring them here
|
|
48
|
+
* preserves exactly the access they have today while removing the fail-open
|
|
49
|
+
* default that made that access invisible.
|
|
50
|
+
*
|
|
51
|
+
* This is a holding category, not a verdict: each entry still deserves a real
|
|
52
|
+
* one. Moving an entry out of here is a deliberate, reviewable change to who
|
|
53
|
+
* can reach it — which is the whole point of it being written down.
|
|
54
|
+
*/
|
|
55
|
+
unrestricted: [],
|
|
41
56
|
admin: ["COO"],
|
|
42
57
|
// deploy, backup, daemon health, auto-wake, worker gate, memory audit, consolidation, cloud sync, agent config, list employees, agent spend, sessions, session kills
|
|
43
58
|
licensing: ["COO"],
|
|
@@ -66,6 +81,13 @@ var TOOL_CATEGORIES = {
|
|
|
66
81
|
// The member's own consent, refusal and exit. See the "org-member" gate.
|
|
67
82
|
registerOrgPartner: "org-member",
|
|
68
83
|
registerOrgMemoryConsent: "org-member",
|
|
84
|
+
// LEAVING IS A MEMBER ACTION, NOT AN ADMIN ONE. org_self is how a person
|
|
85
|
+
// reads their own roster row and WALKS OUT. Admin-gating it would mean an
|
|
86
|
+
// employee's own agent could not end their own membership — the exit would
|
|
87
|
+
// belong to the employer, which inverts the thing the org design exists to
|
|
88
|
+
// protect. `[]` here is the same deliberate choice as the other org-member
|
|
89
|
+
// surfaces, not a default that happened to land in the right place.
|
|
90
|
+
registerOrgSelf: "org-member",
|
|
69
91
|
// org_owner is the OWNER's half of delegation: assign work into a member's
|
|
70
92
|
// install, read what members report, poll the org's own inbox. `admin`, and
|
|
71
93
|
// deliberately NOT "org-member" — that category is `[]` (every role) on
|
|
@@ -210,7 +232,24 @@ var TOOL_CATEGORIES = {
|
|
|
210
232
|
registerGlobalProcedure: "orchestration",
|
|
211
233
|
registerStoreGlobalProcedure: "orchestration",
|
|
212
234
|
registerListGlobalProcedures: "orchestration",
|
|
213
|
-
registerDeactivateGlobalProcedure: "orchestration"
|
|
235
|
+
registerDeactivateGlobalProcedure: "orchestration",
|
|
236
|
+
// ── declared unrestricted (see the "unrestricted" gate) ──────────────────
|
|
237
|
+
// Previously absent from this map, and therefore reachable by every role via
|
|
238
|
+
// the fail-open default. Listed so the access is stated rather than implied.
|
|
239
|
+
registerCreateFeatureRequest: "unrestricted",
|
|
240
|
+
registerDependencyTree: "unrestricted",
|
|
241
|
+
registerDreaming: "unrestricted",
|
|
242
|
+
registerGetFeatureRequest: "unrestricted",
|
|
243
|
+
registerImportConversations: "unrestricted",
|
|
244
|
+
registerListFeatureRequests: "unrestricted",
|
|
245
|
+
registerPipeline: "unrestricted",
|
|
246
|
+
registerReactivateBehavior: "unrestricted",
|
|
247
|
+
registerResonance: "unrestricted",
|
|
248
|
+
registerSteward: "unrestricted",
|
|
249
|
+
registerTriageFeatureRequest: "unrestricted",
|
|
250
|
+
registerUpdateBugReport: "unrestricted",
|
|
251
|
+
registerUpdateFeatureRequest: "unrestricted",
|
|
252
|
+
registerWikiDocSeal: "unrestricted"
|
|
214
253
|
};
|
|
215
254
|
var PLAN_TIERS = {
|
|
216
255
|
free: 0,
|
|
@@ -234,14 +273,24 @@ var PLAN_GATES = {
|
|
|
234
273
|
documents: "pro",
|
|
235
274
|
gateway: "pro",
|
|
236
275
|
admin: "pro",
|
|
237
|
-
orchestration: "pro"
|
|
276
|
+
orchestration: "pro",
|
|
277
|
+
unrestricted: "free"
|
|
278
|
+
// exactly the plan tier these had while unmapped
|
|
238
279
|
};
|
|
239
280
|
function isToolAllowedForPlan(registerFnName, plan) {
|
|
240
281
|
const category = TOOL_CATEGORIES[registerFnName];
|
|
241
|
-
if (!category) return
|
|
282
|
+
if (!category) return false;
|
|
242
283
|
const requiredPlan = PLAN_GATES[category] ?? "free";
|
|
243
284
|
return PLAN_TIERS[plan] >= PLAN_TIERS[requiredPlan];
|
|
244
285
|
}
|
|
286
|
+
function resolveToolCategory(toolName) {
|
|
287
|
+
if (!toolName) return void 0;
|
|
288
|
+
const direct = TOOL_CATEGORIES[toolName];
|
|
289
|
+
if (direct) return direct;
|
|
290
|
+
const pascal = toolName.split(/[_\-.]+/).filter((part) => part.length > 0).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join("");
|
|
291
|
+
if (!pascal) return void 0;
|
|
292
|
+
return TOOL_CATEGORIES[`register${pascal}`];
|
|
293
|
+
}
|
|
245
294
|
var CHIEF_OF_STAFF_READ_TOOLS = /* @__PURE__ */ new Set([
|
|
246
295
|
"registerRecallMyMemory",
|
|
247
296
|
"registerAskTeamMemory",
|
|
@@ -270,7 +319,7 @@ function isToolAllowed(registerFnName) {
|
|
|
270
319
|
return CHIEF_OF_STAFF_READ_TOOLS.has(registerFnName);
|
|
271
320
|
}
|
|
272
321
|
const category = TOOL_CATEGORIES[registerFnName];
|
|
273
|
-
if (!category) return
|
|
322
|
+
if (!category) return false;
|
|
274
323
|
const allowedRoles = TOOL_GATES[category];
|
|
275
324
|
if (!allowedRoles || allowedRoles.length === 0) return true;
|
|
276
325
|
return allowedRoles.includes(role);
|
|
@@ -280,5 +329,6 @@ export {
|
|
|
280
329
|
TOOL_GATES,
|
|
281
330
|
TOOL_CATEGORIES,
|
|
282
331
|
isToolAllowedForPlan,
|
|
332
|
+
resolveToolCategory,
|
|
283
333
|
isToolAllowed
|
|
284
334
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getClient
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-3UD3OF3X.js";
|
|
4
4
|
|
|
5
5
|
// src/lib/pipeline-router.ts
|
|
6
6
|
import crypto from "crypto";
|
|
@@ -140,8 +140,8 @@ Agent response: ${agentResponse}` : ""
|
|
|
140
140
|
}
|
|
141
141
|
async function sinkEntityExtraction(msg, agentResponse, agentName) {
|
|
142
142
|
try {
|
|
143
|
-
const { extractFromConversation } = await import("./conversation-entity-extractor-
|
|
144
|
-
const { storeExtraction } = await import("./graph-rag-
|
|
143
|
+
const { extractFromConversation } = await import("./conversation-entity-extractor-FQCOAH4F.js");
|
|
144
|
+
const { storeExtraction } = await import("./graph-rag-H24CMFP2.js");
|
|
145
145
|
if ((msg.text?.length ?? 0) < 20) return false;
|
|
146
146
|
if (msg.isHistorical) return false;
|
|
147
147
|
const extraction = await extractFromConversation(msg, agentResponse, agentName);
|