@askexenow/exe-os 0.9.372 → 0.9.374
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.customer.example +45 -10
- package/deploy/compose/.env.example +46 -9
- package/deploy/compose/docker-compose.yml +136 -18
- package/deploy/compose/generate-env.ts +142 -34
- package/deploy/compose/sso-edge/default.conf.template +78 -7
- package/deploy/compose/sso-edge/sso-redirect.conf +109 -13
- package/deploy/stack-manifests/v0.9.30-apps.json +1 -1
- package/deploy/stack-manifests/v0.9.json +4 -4
- package/dist/.dist-verified.json +3 -3
- package/dist/{active-agent-GRT5MKD5.js → active-agent-ONPPEWQV.js} +7 -6
- package/dist/{active-agent-L2ZSSXDK.js → active-agent-UJKMG7LJ.js} +7 -6
- package/dist/{agent-defs-generator-M4ZNYIVX.js → agent-defs-generator-ZWI6DXOE.js} +6 -5
- package/dist/{agent-loop-FOK2IRZQ.js → agent-loop-OYHJKNYH.js} +1 -1
- package/dist/{agentic-ontology-DMPRDEUX.js → agentic-ontology-WHFJ3QFS.js} +1 -1
- package/dist/{artifact-backup-767STHSW.js → artifact-backup-WXZNB7KE.js} +2 -1
- package/dist/{backfill-gate-VX2RZTQV.js → backfill-gate-KWJQ35YX.js} +3 -2
- package/dist/{backfill-metadata-ZMEHJQ5M.js → backfill-metadata-3OUSQD5V.js} +8 -7
- package/dist/{background-jobs-LTPWCMA3.js → background-jobs-6VMD55PK.js} +3 -2
- package/dist/{backup-verify-EX2K732J.js → backup-verify-ZKTUYLTA.js} +4 -3
- package/dist/{behavior-injection-22AGMS25.js → behavior-injection-M6UYZCMW.js} +17 -15
- package/dist/{behaviors-DVFXAWF5.js → behaviors-ZJ45TFBJ.js} +21 -13
- package/dist/bin/age-ontology-load.js +3 -2
- package/dist/bin/agentic-ontology-backfill.js +10 -9
- package/dist/bin/agentic-reflection-backfill.js +11 -10
- package/dist/bin/agentic-semantic-label.js +10 -9
- package/dist/bin/backfill-conversations.js +13 -11
- package/dist/bin/backfill-responses.js +13 -11
- package/dist/bin/backfill-vectors.js +17 -15
- package/dist/bin/bulk-sync-postgres.js +22 -20
- package/dist/bin/cc-doctor.js +10 -9
- package/dist/bin/cleanup-stale-review-tasks.js +29 -26
- package/dist/bin/cli.js +36 -26
- package/dist/bin/deferred-daemon-restart.js +114 -110
- package/dist/bin/exe-agent-config.js +6 -5
- package/dist/bin/exe-agent.js +127 -33
- package/dist/bin/exe-assign.js +15 -13
- package/dist/bin/exe-boot.js +57 -54
- package/dist/bin/exe-call.js +8 -7
- package/dist/bin/exe-cloud.js +24 -22
- package/dist/bin/exe-config-dump.js +6 -5
- package/dist/bin/exe-dispatch.js +30 -27
- package/dist/bin/exe-doctor.js +14 -10
- package/dist/bin/exe-export-behaviors.js +19 -17
- package/dist/bin/exe-forget.js +10 -9
- package/dist/bin/exe-gateway.js +199 -19
- package/dist/bin/exe-grant.js +5 -5
- package/dist/bin/exe-healthcheck.js +10 -9
- package/dist/bin/exe-heartbeat.js +35 -32
- package/dist/bin/exe-kill.js +34 -31
- package/dist/bin/exe-launch-agent.js +126 -54
- package/dist/bin/exe-mcp.js +6 -5
- package/dist/bin/exe-memory-reads.js +8 -7
- package/dist/bin/exe-new-employee.js +12 -11
- package/dist/bin/exe-os-mcp-proxy.js +6 -5
- package/dist/bin/exe-pending-messages.js +30 -27
- package/dist/bin/exe-pending-notifications.js +29 -26
- package/dist/bin/exe-pending-reviews.js +30 -27
- package/dist/bin/exe-rename.js +8 -7
- package/dist/bin/exe-repo-truth.js +1 -1
- package/dist/bin/exe-review.js +33 -30
- package/dist/bin/exe-search.js +9 -8
- package/dist/bin/exe-session-cleanup.js +35 -32
- package/dist/bin/exe-settings.js +24 -22
- package/dist/bin/exe-start-codex.js +137 -55
- package/dist/bin/exe-start-opencode.js +121 -23
- package/dist/bin/exe-status.js +31 -28
- package/dist/bin/exe-support.js +5 -4
- package/dist/bin/exe-team.js +7 -6
- package/dist/bin/exe-watchdog.js +31 -11
- package/dist/bin/generate-hook-manifest.js +44 -7
- package/dist/bin/git-sweep.js +31 -28
- package/dist/bin/graph-backfill.js +89 -35
- package/dist/bin/graph-export.js +9 -8
- package/dist/bin/import-history.js +14 -13
- package/dist/bin/install.js +137 -113
- package/dist/bin/intercom-check.js +5 -5
- package/dist/bin/mcp-sessions.js +2 -2
- package/dist/bin/orchestration-metrics.js +7 -6
- package/dist/bin/postgres-agentic-reflection-backfill.js +5 -4
- package/dist/bin/postgres-agentic-semantic-backfill.js +4 -3
- package/dist/bin/pre-publish.js +1 -1
- package/dist/bin/reconcile-backlog.js +2 -2
- package/dist/bin/registry-proxy.js +1 -1
- package/dist/bin/scan-tasks.js +29 -26
- package/dist/bin/setup.js +5 -4
- package/dist/bin/shard-migrate.js +9 -8
- package/dist/bin/stack-update.js +40 -9
- package/dist/bin/verify-stack.js +2 -2
- package/dist/bin/vps-health-gate.js +1 -1
- package/dist/{boot-generation-OHXH4YC5.js → boot-generation-JKVZ4ZAT.js} +6 -5
- package/dist/{boot-review-sections-N5IXIGSS.js → boot-review-sections-2M6BTG73.js} +28 -25
- package/dist/{branch-hygiene-KCGXRAWP.js → branch-hygiene-U5GFRSTP.js} +31 -7
- package/dist/{branding-GH43W3PU.js → branding-I6KIMB7F.js} +3 -2
- package/dist/budget-fallback-XJRPMP2D.js +11 -0
- package/dist/build-manifest.json +1318 -1233
- package/dist/{capability-cards-4PXVLIVS.js → capability-cards-5IMJT6J7.js} +5 -4
- package/dist/{capacity-monitor-FKMQXORX.js → capacity-monitor-SAXCQK7O.js} +30 -27
- package/dist/{catchup-brief-SN5EKO4N.js → catchup-brief-U2TXBLHD.js} +34 -31
- package/dist/{chunk-CNC57JCS.js → chunk-23MVDXLY.js} +4 -4
- package/dist/{chunk-V4XAKXXF.js → chunk-2AJGV5UL.js} +1 -1
- package/dist/{chunk-FBYAXTDM.js → chunk-2ZOEC4KC.js} +10 -2
- package/dist/{chunk-ELXFSIIM.js → chunk-32YV32VA.js} +2 -2
- package/dist/{chunk-44C7QNZS.js → chunk-3KDCORDO.js} +1 -1
- package/dist/{chunk-JTB5V6BV.js → chunk-3SXHEQ7X.js} +1 -1
- package/dist/{chunk-HDW4XPDV.js → chunk-3UUX5OY4.js} +1 -1
- package/dist/{chunk-7PSLK36P.js → chunk-44TLJZJ5.js} +1 -1
- package/dist/{chunk-JTWTBX2M.js → chunk-4EN3IZ3Q.js} +2 -1
- package/dist/{chunk-KPMC7PY7.js → chunk-4HKTO2SV.js} +1 -1
- package/dist/{chunk-CDUB5Q6J.js → chunk-4IK2K3B3.js} +1 -1
- package/dist/{chunk-GH6YJOOC.js → chunk-4SJ4LK4V.js} +6 -6
- package/dist/{chunk-PVEM537A.js → chunk-4YLBKEL5.js} +2 -2
- package/dist/chunk-4YNA3CM6.js +872 -0
- package/dist/{chunk-KYFFVTGO.js → chunk-55BEFF4V.js} +3 -3
- package/dist/{chunk-SEP5ITFQ.js → chunk-636LKCKE.js} +2 -2
- package/dist/{chunk-QTI4QAWA.js → chunk-6EZQUNE6.js} +338 -5
- package/dist/{chunk-WAEKYKTK.js → chunk-6RKKVPYF.js} +1 -1
- package/dist/{chunk-VX2F4ZUY.js → chunk-6SCGLHJ7.js} +3 -3
- package/dist/{chunk-MEGRQ53A.js → chunk-6VHOQ3IM.js} +51 -6
- package/dist/{chunk-HIIXCAEE.js → chunk-6YVUR3OU.js} +3 -3
- package/dist/{chunk-L6ZNURWN.js → chunk-7GE2EQ23.js} +1 -1
- package/dist/{chunk-2CWS374F.js → chunk-7RI2CNXJ.js} +1 -1
- package/dist/{chunk-OL3QP3AU.js → chunk-7TSBV3SD.js} +1 -1
- package/dist/{chunk-DSOQUQTV.js → chunk-A27Q27CT.js} +27 -0
- package/dist/{chunk-5AHRZI3R.js → chunk-AETLDRZB.js} +1 -1
- package/dist/{chunk-RNLF3CBB.js → chunk-AKLJ4JH3.js} +1 -1
- package/dist/{chunk-XHYHX6F7.js → chunk-AKLQSC6W.js} +329 -164
- package/dist/chunk-ANLFH23R.js +261 -0
- package/dist/{chunk-QLA3RTH4.js → chunk-AWWKRZMB.js} +5 -5
- package/dist/{chunk-ERVQTR7P.js → chunk-BBSIEYF5.js} +17 -3
- package/dist/{chunk-IPMUWYRQ.js → chunk-BJ7AVSY6.js} +2 -2
- package/dist/{chunk-HV6Y6F4X.js → chunk-C2L622QJ.js} +89 -3
- package/dist/{chunk-TX3Q2GIL.js → chunk-C5HUMAA7.js} +24 -1
- package/dist/{chunk-QTYJPWJN.js → chunk-CBCGDEJA.js} +7 -7
- package/dist/{chunk-XXSNLM6R.js → chunk-DB55JZHU.js} +1 -1
- package/dist/{chunk-LAZKEJMS.js → chunk-DIXXEE3S.js} +840 -607
- package/dist/{chunk-FB343XQX.js → chunk-DJ7YXOTU.js} +2 -2
- package/dist/{chunk-YFCNWQAM.js → chunk-DJOIMFKV.js} +2 -2
- package/dist/{chunk-UTDMTQNH.js → chunk-DSJI76XL.js} +92 -14
- package/dist/{chunk-EEXX4UMQ.js → chunk-DZKPOSFD.js} +1 -1
- package/dist/{chunk-WSOA3WMC.js → chunk-E426DOSY.js} +161 -4
- package/dist/{chunk-ZISQOOER.js → chunk-EKE37MO4.js} +3 -3
- package/dist/{chunk-RIECV7SR.js → chunk-EKYYMIVT.js} +1 -1
- package/dist/{chunk-HIVZ53YB.js → chunk-EXTZSNWL.js} +2 -2
- package/dist/{chunk-YYA5LXCT.js → chunk-FNEZ4BWT.js} +1 -1
- package/dist/chunk-FTZET5YX.js +313 -0
- package/dist/chunk-GHR4ZPJ7.js +70 -0
- package/dist/{chunk-MINXPXAB.js → chunk-GJI77VDO.js} +3 -3
- package/dist/{chunk-AAMGHW5W.js → chunk-GLQEJOXE.js} +1 -0
- package/dist/{chunk-ADNBOKYZ.js → chunk-GM7TLYOK.js} +60 -18
- package/dist/{chunk-RUWWES2K.js → chunk-GNUAL43X.js} +2 -2
- package/dist/{chunk-QZL6E4UB.js → chunk-GOMQ7PVQ.js} +2 -2
- package/dist/{chunk-GB3AHV5F.js → chunk-GQOEWNVM.js} +1 -1
- package/dist/{chunk-NQZUSEAR.js → chunk-GS7LIT34.js} +246 -17
- package/dist/{chunk-XTWHNLGD.js → chunk-GZOG2MAX.js} +1 -1
- package/dist/{chunk-E5HAY3DQ.js → chunk-HDLAB7W3.js} +1 -1
- package/dist/{chunk-E5QQZDQN.js → chunk-HNWS7YHN.js} +358 -136
- package/dist/{chunk-VV5EZZNT.js → chunk-HTBEVCO2.js} +1 -1
- package/dist/{chunk-OZBII5E3.js → chunk-I4DNJFDR.js} +4 -4
- package/dist/{chunk-SI5SZAJA.js → chunk-IBS2FAI4.js} +21 -4
- package/dist/{chunk-J5EYOBFF.js → chunk-IHXW4VUI.js} +1 -1
- package/dist/{chunk-RUVO3NJC.js → chunk-IN6CAM4F.js} +9 -3
- package/dist/{chunk-53PYNYTW.js → chunk-IRVOXUSK.js} +5 -5
- package/dist/{chunk-THM7J6UI.js → chunk-JHI5WMK5.js} +5 -5
- package/dist/{chunk-3KTQWMHI.js → chunk-JSMDRKPJ.js} +12 -4
- package/dist/chunk-JTVIANUB.js +131 -0
- package/dist/{chunk-2ADYTOHQ.js → chunk-K4ESASPL.js} +1 -1
- package/dist/{chunk-YWUQVHDL.js → chunk-KTCXJWJG.js} +1 -1
- package/dist/{chunk-RGUDGC6A.js → chunk-KTU3EAWK.js} +5 -5
- package/dist/{chunk-DKBPCOU4.js → chunk-L6RXG36J.js} +2 -2
- package/dist/{chunk-T4EK56WI.js → chunk-LDNYSMPZ.js} +1 -1
- package/dist/{chunk-RIK5GRWI.js → chunk-LGS2V2XD.js} +3 -3
- package/dist/{chunk-JKXZGRWR.js → chunk-LP4GB656.js} +2 -2
- package/dist/{chunk-H74466TM.js → chunk-M7O7TGGU.js} +1 -1
- package/dist/chunk-MJCSEIFI.js +54 -0
- package/dist/{chunk-IDZPQG2D.js → chunk-MOGA4Q7F.js} +2 -2
- package/dist/{chunk-OYQNNKNS.js → chunk-MXPNVSXI.js} +37 -14
- package/dist/{chunk-UVW7YFAF.js → chunk-N7VEP5B3.js} +4 -4
- package/dist/{chunk-HHE2HV3V.js → chunk-NBXDXKLC.js} +1 -1
- package/dist/{chunk-LDL3S7AC.js → chunk-NKETJCB5.js} +7 -3
- package/dist/{chunk-ECHLVLA7.js → chunk-NMH5ZQPU.js} +1 -1
- package/dist/{chunk-U3XLRMJD.js → chunk-NT7W4RXD.js} +1 -1
- package/dist/{chunk-UQUUNGTP.js → chunk-NUK7EEN5.js} +11 -9
- package/dist/{chunk-GBNB4EWD.js → chunk-ORM7ZFKC.js} +16 -0
- package/dist/{chunk-O4ZFRK6W.js → chunk-OVEQE6YS.js} +244 -49
- package/dist/{chunk-4ZJ5BPY6.js → chunk-PB5S7YOF.js} +2 -2
- package/dist/{chunk-JR23BL74.js → chunk-PDVXWXTL.js} +4 -4
- package/dist/{chunk-3CIMDFXG.js → chunk-PFQ3VEEM.js} +1 -1
- package/dist/{chunk-SBJV2PCU.js → chunk-PHBU4LGO.js} +1 -1
- package/dist/{chunk-W25RLOQ2.js → chunk-PLZSZOZN.js} +3 -3
- package/dist/{chunk-THIJIOE2.js → chunk-PY3FOMRN.js} +18 -6
- package/dist/{chunk-AAUWFXOX.js → chunk-Q3AXXKDF.js} +3 -3
- package/dist/{chunk-VKXS2YGN.js → chunk-QHJR7IMX.js} +2 -2
- package/dist/chunk-QLZ46RCK.js +45 -0
- package/dist/{chunk-UHPMK6QZ.js → chunk-R3CZWFFC.js} +10 -2
- package/dist/{chunk-6XEYELCA.js → chunk-R4CBHKZ2.js} +1 -1
- package/dist/{chunk-5APCDDJZ.js → chunk-R522MWAR.js} +9 -9
- package/dist/chunk-RH4AH3YB.js +80 -0
- package/dist/{chunk-AMKSDKMK.js → chunk-S2WBS6BG.js} +22 -35
- package/dist/{chunk-WUKQVNLP.js → chunk-SEQIPGLU.js} +1 -1
- package/dist/{chunk-7WQRFSZI.js → chunk-SL6KQYDU.js} +26 -6
- package/dist/chunk-SLLLOOEI.js +103 -0
- package/dist/{chunk-5N4SG5NB.js → chunk-T35RCQFE.js} +3 -3
- package/dist/{chunk-7V6M3QUS.js → chunk-T3QUKNLI.js} +1 -1
- package/dist/{chunk-CW2UCKHS.js → chunk-TADAO3HV.js} +2 -2
- package/dist/{chunk-5DCCKHDY.js → chunk-TAMDAOCU.js} +109 -13
- package/dist/{chunk-ZXB56YR2.js → chunk-TFKCERAK.js} +101 -23
- package/dist/{chunk-RBYHJDAT.js → chunk-TQAZTRQ3.js} +3 -3
- package/dist/{chunk-OKGIOWOB.js → chunk-U6SUKSZR.js} +2 -2
- package/dist/{chunk-23QKEUF6.js → chunk-U73AC5AN.js} +34 -12
- package/dist/{chunk-PM6WSWVU.js → chunk-UBK7HK3J.js} +3 -3
- package/dist/{chunk-H37FSTF2.js → chunk-UBMZ3YQU.js} +1 -1
- package/dist/{chunk-JJUGI2YL.js → chunk-UCFC2AEI.js} +1 -1
- package/dist/{chunk-6IWLAQ7O.js → chunk-UCUOGVDX.js} +4 -0
- package/dist/{chunk-E7UCDSUE.js → chunk-UKLN57Q5.js} +2 -2
- package/dist/{chunk-ZYCLSEZT.js → chunk-ULIBLJ6W.js} +33 -11
- package/dist/{chunk-RLR6VVKV.js → chunk-UM3N6VND.js} +4 -4
- package/dist/{chunk-ZNUJFX7L.js → chunk-UQGSBM3U.js} +1 -1
- package/dist/{chunk-ZZXMB5F2.js → chunk-UZDF6FLJ.js} +1 -1
- package/dist/{chunk-LNOS24GV.js → chunk-V3WLC5TJ.js} +2 -95
- package/dist/{chunk-UXLO7VHX.js → chunk-VI4ATC6I.js} +1 -1
- package/dist/{chunk-77JP3LK4.js → chunk-VKJGHAZT.js} +92 -21
- package/dist/{chunk-7R73IAHU.js → chunk-VMTZ4RUW.js} +67 -150
- package/dist/{chunk-TGPQMMQP.js → chunk-VYQ7B7DI.js} +30 -17
- package/dist/{chunk-E2WEFZOR.js → chunk-W75GTHR3.js} +1 -1
- package/dist/{chunk-UKLF7F3Z.js → chunk-WJG344NC.js} +9 -9
- package/dist/{chunk-MBNIJXKI.js → chunk-WMEYJT4R.js} +18 -4
- package/dist/{chunk-R6FLELV6.js → chunk-XFTEX77S.js} +3 -3
- package/dist/{chunk-MDGYXUOV.js → chunk-XH7YL7JM.js} +1 -1
- package/dist/{chunk-JOO35RHR.js → chunk-XL5MFGMR.js} +3 -3
- package/dist/{chunk-OW5RZIDW.js → chunk-XNNECNDL.js} +95 -33
- package/dist/{chunk-5AHDQCTB.js → chunk-XXFKSJYA.js} +6 -6
- package/dist/{chunk-TGEPLJ66.js → chunk-XXOPG4BW.js} +3 -3
- package/dist/{chunk-PGLPUP37.js → chunk-XZ65ST2I.js} +1 -1
- package/dist/{chunk-3TTKAT6V.js → chunk-YKC7QDZH.js} +9 -4
- package/dist/{chunk-KXYFBBZR.js → chunk-YMP2QSOP.js} +20 -3
- package/dist/{chunk-TK4MI6F6.js → chunk-YSLGFPWX.js} +6 -6
- package/dist/{chunk-X2P43TB2.js → chunk-YTSXPJUQ.js} +1 -1
- package/dist/{chunk-HECXZGGZ.js → chunk-ZCERWHY2.js} +33 -35
- package/dist/{chunk-IVU3WN7S.js → chunk-ZG62LIK3.js} +74 -4
- package/dist/{chunk-GU62SNDH.js → chunk-ZGYNKA3O.js} +744 -111
- package/dist/{chunk-QMSEL5YS.js → chunk-ZIG7VPJV.js} +28 -76
- package/dist/{chunk-WZJVGA5I.js → chunk-ZL4AGWAH.js} +258 -13
- package/dist/{chunk-QR624DER.js → chunk-ZSODLMFV.js} +2 -2
- package/dist/{cleanup-graph-garbage-IPYDS5OX.js → cleanup-graph-garbage-DPJGO52H.js} +11 -10
- package/dist/{cloud-sync-command-JLNVG7H4.js → cloud-sync-command-JPNTT4OQ.js} +2 -2
- package/dist/{cloud-sync-db-init-JXUF6GI3.js → cloud-sync-db-init-V2LWIUQU.js} +1 -1
- package/dist/{cloud-sync-shutdown-Z4SBP6PL.js → cloud-sync-shutdown-BNALPWGX.js} +5 -4
- package/dist/{co-activation-74RDFTKS.js → co-activation-CMNSWS6B.js} +5 -4
- package/dist/{co-occurrence-CN3TBYVR.js → co-occurrence-WRI2NAN6.js} +9 -8
- package/dist/{code-context-index-D4MJ4VFX.js → code-context-index-NOJSHLPN.js} +12 -6
- package/dist/code-context-watcher-VZNZU3BO.js +118 -0
- package/dist/{codex-consolidation-PPXNBXCV.js → codex-consolidation-SH4UKFBQ.js} +2 -1
- package/dist/{conversation-entity-extractor-QGTLH4BP.js → conversation-entity-extractor-74252CAO.js} +4 -4
- package/dist/{conversation-wiki-populator-EBUZXYEU.js → conversation-wiki-populator-OS4C6W54.js} +1 -1
- package/dist/conversations-retention-C4BLKFEL.js +54 -0
- package/dist/coordinator-notice-MHUY7AQB.js +55 -0
- package/dist/{crdt-sync-7T4WCOKD.js → crdt-sync-B3JN6AIV.js} +1 -1
- package/dist/{crm-webhook-FTW3XZTO.js → crm-webhook-GYWQRFET.js} +2 -2
- package/dist/{cto-delegation-gate-SZCE34LB.js → cto-delegation-gate-LQHVLEMW.js} +29 -26
- package/dist/{daemon-auth-SSPY5ODS.js → daemon-auth-QZHEO7IQ.js} +3 -2
- package/dist/{daemon-orchestration-IGPHVNFR.js → daemon-orchestration-5HIQALZH.js} +36 -34
- package/dist/{daemon-ready-OT2VQLS7.js → daemon-ready-P2BR2XP5.js} +1 -1
- package/dist/{db-integrity-events-5DTASXJF.js → db-integrity-events-2DTFO37N.js} +3 -2
- package/dist/{db-restore-events-2FI4ZMKA.js → db-restore-events-G6NOQOVE.js} +2 -1
- package/dist/{destructive-data-guard-6I5MDFVD.js → destructive-data-guard-BVFWPPIS.js} +1 -1
- package/dist/doc-graph-extractor-PQHDHQPQ.js +367 -0
- package/dist/{documents-URULIXGM.js → documents-C4SSPJMC.js} +15 -13
- package/dist/{dreaming-VIZO3QDO.js → dreaming-XAO3FCBV.js} +33 -30
- package/dist/{employee-boot-brief-XLOG4ULP.js → employee-boot-brief-W4OHUMRQ.js} +37 -34
- package/dist/{exe-drift-TLQM3IHD.js → exe-drift-AG2KMKD5.js} +6 -5
- package/dist/{exe-export-7YWYWJHY.js → exe-export-IC5BT335.js} +17 -15
- package/dist/{exe-import-DW6VAUKW.js → exe-import-A35ZLDPG.js} +17 -15
- package/dist/{exe-key-TLJP2B4Y.js → exe-key-TCMJNYLA.js} +116 -112
- package/dist/{exe-org-LU46N36E.js → exe-org-JXCR3JYZ.js} +24 -23
- package/dist/{exe-snapshot-QHUZRS62.js → exe-snapshot-SV6SRIG6.js} +36 -33
- package/dist/{fast-db-init-SCTOOIUT.js → fast-db-init-L2RGKJWH.js} +1 -1
- package/dist/{founder-context-ZFZC4UHO.js → founder-context-D4HFIESJ.js} +4 -3
- package/dist/{founder-monitor-envelope-5KTKNL5G.js → founder-monitor-envelope-TFKRGCFE.js} +5 -4
- package/dist/{fts-integrity-LKAZEZJE.js → fts-integrity-4YB34KWX.js} +3 -2
- package/dist/gateway/index.js +19 -17
- package/dist/{git-main-guard-TN27QBAI.js → git-main-guard-VTW4N3CM.js} +7 -1
- package/dist/{git-staleness-GSGP344N.js → git-staleness-TN7CYGFG.js} +5 -4
- package/dist/{global-procedures-YAR7G4C6.js → global-procedures-YFDEIOG7.js} +7 -6
- package/dist/{graph-auto-extract-GNQS64F5.js → graph-auto-extract-3YR3TYRW.js} +9 -8
- package/dist/{graph-rag-RMSFLUOB.js → graph-rag-Z2KCJTPK.js} +6 -4
- package/dist/{hook-integrity-CF567MVN.js → hook-integrity-KGAV6ZC2.js} +14 -4
- package/dist/{hook-prefetch-36BK4F7U.js → hook-prefetch-K5DN3TOQ.js} +29 -26
- package/dist/hooks/bug-report-worker.js +34 -30
- package/dist/hooks/codex-stop-task-finalizer.js +36 -32
- package/dist/hooks/commit-complete.js +33 -30
- package/dist/hooks/error-recall.js +12 -11
- package/dist/hooks/exe-heartbeat-hook.js +8 -7
- package/dist/hooks/ingest-worker.js +23 -11
- package/dist/hooks/ingest.js +18 -17
- package/dist/hooks/instructions-loaded.js +10 -9
- package/dist/hooks/manifest.json +20 -20
- package/dist/hooks/notification.js +9 -8
- package/dist/hooks/post-compact.js +8 -7
- package/dist/hooks/post-tool-combined.js +26 -15
- package/dist/hooks/pre-compact.js +33 -30
- package/dist/hooks/pre-tool-use.js +404 -46
- package/dist/hooks/prompt-submit.js +57 -47
- package/dist/hooks/session-end.js +40 -41
- package/dist/hooks/session-start.js +21 -20
- package/dist/hooks/stop.js +40 -37
- package/dist/hooks/subagent-stop.js +38 -35
- package/dist/hooks/summary-worker.js +39 -36
- package/dist/hyde-MP4QNMU5.js +80 -0
- package/dist/index.js +44 -39
- package/dist/{installer-LUN4HQIC.js → installer-54HTN5RE.js} +8 -7
- package/dist/{installer-OC5VXNC7.js → installer-LK35OX6R.js} +8 -7
- package/dist/{installer-MPRFUQJE.js → installer-LLWKZI2S.js} +8 -7
- package/dist/intercom-ack-VCW755TN.js +13 -0
- package/dist/{intercom-queue-6DZ7BANV.js → intercom-queue-5NOT2RKI.js} +28 -25
- package/dist/{key-backup-status-6L2ARCXW.js → key-backup-status-LQPINQ3W.js} +2 -1
- package/dist/lib/agent-config.js +3 -2
- package/dist/lib/cloud-sync.js +26 -20
- package/dist/lib/config.js +2 -1
- package/dist/lib/consolidation.js +17 -10
- package/dist/lib/database.js +7 -4
- package/dist/lib/db-backup.js +17 -2
- package/dist/lib/db-daemon-client.js +8 -6
- package/dist/lib/db-write-worker-client.js +3 -1
- package/dist/lib/db-write-worker.js +20 -3
- package/dist/lib/db.js +7 -4
- package/dist/lib/device-registry.js +3 -2
- package/dist/lib/embed-worker.js +2 -1
- package/dist/lib/embedder.js +8 -6
- package/dist/lib/employee-templates.js +8 -7
- package/dist/lib/employees.js +5 -4
- package/dist/lib/exe-daemon-client.js +7 -5
- package/dist/lib/exe-daemon.js +467 -221
- package/dist/lib/hybrid-search.js +11 -8
- package/dist/lib/identity.js +5 -4
- package/dist/lib/license.js +4 -3
- package/dist/lib/messaging.js +29 -26
- package/dist/lib/post-tool-memory.js +16 -2
- package/dist/lib/registry-proxy.js +3 -1
- package/dist/lib/reminders.js +6 -5
- package/dist/lib/schedules.js +9 -8
- package/dist/lib/session-registry.js +7 -6
- package/dist/lib/skill-learning.js +16 -14
- package/dist/lib/stack-invariants.js +17 -1
- package/dist/lib/status-brief.js +5 -4
- package/dist/lib/store.js +10 -7
- package/dist/lib/task-router.js +6 -5
- package/dist/lib/tasks.js +31 -27
- package/dist/lib/tmux-routing.js +40 -25
- package/dist/lib/tmux-status.js +3 -1
- package/dist/lib/tmux-transport.js +2 -1
- package/dist/lib/token-spend.js +6 -5
- package/dist/lib/transport.js +3 -2
- package/dist/{license-gate-ESER24PJ.js → license-gate-JVMB6OFD.js} +5 -4
- package/dist/{license-sync-JVG5KNIY.js → license-sync-5VYS2F2W.js} +4 -3
- package/dist/mcp/register-tools.js +113 -109
- package/dist/mcp/server.js +118 -114
- package/dist/mcp/tools/complete-reminder.js +7 -6
- package/dist/mcp/tools/create-reminder.js +7 -6
- package/dist/mcp/tools/create-task.js +34 -30
- package/dist/mcp/tools/deactivate-behavior.js +18 -16
- package/dist/mcp/tools/list-reminders.js +7 -6
- package/dist/mcp/tools/list-tasks.js +34 -30
- package/dist/mcp/tools/send-message.js +32 -29
- package/dist/mcp/tools/update-task.js +32 -28
- package/dist/mcp-child-registry-OTG4MWO7.js +25 -0
- package/dist/{mcp-http-config-6K6IKH5F.js → mcp-http-config-DQWL7U2Z.js} +6 -5
- package/dist/{mcp-session-identity-LRC6WJSD.js → mcp-session-identity-277GASTQ.js} +28 -25
- package/dist/{memory-cards-V3OZHIYP.js → memory-cards-3S2ZQPR7.js} +17 -8
- package/dist/{memory-graph-extractor-JC2Z64L4.js → memory-graph-extractor-A6DFEFIN.js} +10 -9
- package/dist/{memory-poisoning-defense-YM4QJHCX.js → memory-poisoning-defense-ZVP4H6DY.js} +5 -4
- package/dist/{memory-pressure-watchdog-6F6KEQHN.js → memory-pressure-watchdog-6W5F6R7H.js} +29 -26
- package/dist/{memory-queue-QJNWKWKG.js → memory-queue-YF7IDSFY.js} +3 -2
- package/dist/{memory-queue-client-COA4ABEV.js → memory-queue-client-ADSDP6OX.js} +9 -7
- package/dist/{memory-reflection-QXHJPYPC.js → memory-reflection-BKB2YOE6.js} +52 -6
- package/dist/{monitor-grants-BW2WL4IU.js → monitor-grants-EV747HMW.js} +4 -3
- package/dist/{notification-ledger-6QRLQW4Q.js → notification-ledger-CLGM7ODF.js} +30 -27
- package/dist/{notifications-7B6D7Y5C.js → notifications-MACUZPYP.js} +28 -25
- package/dist/{oauth-server-TZFNQAFS.js → oauth-server-AYM37SQ4.js} +25 -4
- package/dist/{orchestration-events-GY5VP5LU.js → orchestration-events-N7LYMUGA.js} +6 -5
- package/dist/{orchestration-phase-UDS24CVQ.js → orchestration-phase-T2WD45UA.js} +3 -2
- package/dist/{orchestrator-JVPVOYWA.js → orchestrator-4X24EWHV.js} +30 -27
- package/dist/{org-brief-session-GRV5R5E3.js → org-brief-session-FZOFMO5U.js} +13 -12
- package/dist/{org-consent-policy-3FHHSYXV.js → org-consent-policy-O5E6HXBL.js} +1 -1
- package/dist/{org-join-BY4PV6UO.js → org-join-POWUG25F.js} +8 -7
- package/dist/{org-key-admin-WSCPT2CZ.js → org-key-admin-E7EMDOZZ.js} +9 -8
- package/dist/{org-key-pin-5WUSPGVN.js → org-key-pin-WHWHVWUO.js} +4 -3
- package/dist/{org-membership-ESALTLLN.js → org-membership-WRT2IHJK.js} +5 -4
- package/dist/{org-partner-config-YKHPDPZR.js → org-partner-config-B7T4CL2T.js} +7 -6
- package/dist/{org-partner-runtime-UJDGECZ4.js → org-partner-runtime-FODONVTM.js} +13 -12
- package/dist/{org-row-visibility-V5DXIHTE.js → org-row-visibility-VX4AVV5Q.js} +1 -1
- package/dist/{pipeline-router-YY5FQKTY.js → pipeline-router-6GGT2ZW3.js} +6 -5
- package/dist/{plan-limits-OVX6SN6B.js → plan-limits-FUN76LYY.js} +8 -7
- package/dist/{platform-procedures-I57ITMDC.js → platform-procedures-7YSCLF4Z.js} +1 -1
- package/dist/{postinstall-failure-B2JHNFPM.js → postinstall-failure-O6TSSNJB.js} +3 -2
- package/dist/{project-boot-LXLU2J32.js → project-boot-3Q65LCIP.js} +2 -1
- package/dist/project-name-LJVFMYTQ.js +30 -0
- package/dist/{projection-worker-D2472IOD.js → projection-worker-4OANGP5K.js} +5 -4
- package/dist/{prospective-memory-JXO2A6PL.js → prospective-memory-KR3P4T6N.js} +5 -4
- package/dist/{push-notifications-HR3FZRDI.js → push-notifications-NCZLH6DI.js} +29 -26
- package/dist/ref-provenance-gate-M4AQO4OT.js +269 -0
- package/dist/{reproject-worktree-memories-OSS3PGRF.js → reproject-worktree-memories-PWYKPB2U.js} +106 -23
- package/dist/{reranker-IMZRPYJ2.js → reranker-6V3C2AO4.js} +3 -2
- package/dist/resolve-image-labels-ZI6UBW5W.js +15 -0
- package/dist/{retrieval-health-W7OD44FE.js → retrieval-health-5D7O6VH6.js} +4 -3
- package/dist/{review-polling-2INP7H6M.js → review-polling-QW3LJ4KN.js} +29 -26
- package/dist/runtime/index.js +38 -34
- package/dist/{session-events-G4XUPVWV.js → session-events-T45SSTMF.js} +31 -26
- package/dist/{session-kill-telemetry-W7MHWJTQ.js → session-kill-telemetry-QSPVJGBF.js} +29 -26
- package/dist/{session-mcp-config-F7KATWOF.js → session-mcp-config-SC5BLWZG.js} +3 -2
- package/dist/{session-scope-LG2J4EMQ.js → session-scope-KRWE54C4.js} +28 -25
- package/dist/{setup-wizard-YQJI3SVM.js → setup-wizard-GP3TBTPF.js} +5 -4
- package/dist/{shard-manager-UROHZE46.js → shard-manager-OE36A4MY.js} +3 -2
- package/dist/{skill-refinement-RA37U756.js → skill-refinement-C7JTMLJG.js} +6 -5
- package/dist/stack-generate-manifest-MFMDWRUP.js +810 -0
- package/dist/{stack-promote-IYBRXHTA.js → stack-promote-EKSCYY63.js} +8 -6
- package/dist/{stack-release-OXWLVVG6.js → stack-release-2GZAAFO4.js} +8 -6
- package/dist/{stack-update-2CZEROPK.js → stack-update-J6JXSTAZ.js} +51 -5
- package/dist/{steward-gate-LTNFB3FY.js → steward-gate-BFCCMCSW.js} +6 -5
- package/dist/{subagent-brief-injection-OHLWLECQ.js → subagent-brief-injection-ED36PLYY.js} +44 -36
- package/dist/{subagent-spawn-ledger-USYZXU3M.js → subagent-spawn-ledger-E6U3OY6Z.js} +3 -2
- package/dist/{supervisor-handoff-CSJQMI53.js → supervisor-handoff-SGLEPOCY.js} +12 -3
- package/dist/{support-inbox-4KCEPAZQ.js → support-inbox-YW47SYJF.js} +20 -5
- package/dist/{task-enforcement-LGXWXGVZ.js → task-enforcement-CECTQX4U.js} +29 -26
- package/dist/{task-request-inbox-WHCOSUCP.js → task-request-inbox-Q5T4N5K7.js} +1 -1
- package/dist/{task-scope-KXF7Y6KA.js → task-scope-ERVEUEYU.js} +28 -25
- package/dist/{tasks-crud-5EM55WRZ.js → tasks-crud-ZRQNJXQ2.js} +28 -25
- package/dist/{tasks-notify-VFMAURTN.js → tasks-notify-MIZH4C2O.js} +29 -26
- package/dist/{tasks-review-MHGMBHUZ.js → tasks-review-Z7J2P6DG.js} +28 -25
- package/dist/{telemetry-upload-6NRTN7QJ.js → telemetry-upload-LVQUQYFP.js} +10 -9
- package/dist/{token-budget-LZPOYTRP.js → token-budget-BU4NOVZF.js} +6 -5
- package/dist/{tool-capability-index-ED5OAPMW.js → tool-capability-index-7F42MOJT.js} +1 -1
- package/dist/{tool-gates-7PLIOLAL.js → tool-gates-JWVSAYTW.js} +1 -1
- package/dist/{tool-gates-2OZY3GZM.js → tool-gates-VXITVRFQ.js} +1 -1
- package/dist/{tool-telemetry-ZX7VSAXK.js → tool-telemetry-O27EVMBR.js} +1 -1
- package/dist/tui/App.js +43 -40
- package/dist/{tui-data-CC5POSUV.js → tui-data-TPWWBIUQ.js} +28 -25
- package/dist/{update-support-KH6NSQON.js → update-support-F2F5537B.js} +22 -20
- package/dist/{whatsapp-QW3X7OCN.js → whatsapp-YM4A2CSK.js} +3 -1
- package/dist/{work-claims-MNK7PEPW.js → work-claims-B73X5NE7.js} +6 -5
- package/dist/{work-state-heartbeat-YEWT5NMZ.js → work-state-heartbeat-P4YX6E2R.js} +1 -1
- package/dist/{worker-gate-BOQSIU2Z.js → worker-gate-BEEIIVWA.js} +3 -2
- package/dist/{workflow-engine-MUUD7ZEX.js → workflow-engine-5X46PFCW.js} +4 -2
- package/dist/{worktree-GOGT2LZP.js → worktree-W47CIMJ6.js} +9 -6
- package/dist/worktree-ownership-guard-OUWJROW2.js +88 -0
- package/dist/{worktree-sweep-46VWPVQT.js → worktree-sweep-BNBD4RFX.js} +8 -7
- package/package.json +14 -5
- package/release-notes.json +5 -5
- package/src/commands/exe/call.md +1 -1
- package/stack.release.json +6 -0
- package/dist/chunk-KZXMP6JG.js +0 -319
- package/dist/chunk-TCTED52S.js +0 -120
- package/dist/chunk-W2IRQJ6R.js +0 -67
- package/dist/doc-graph-extractor-VPTRIEKN.js +0 -149
- package/dist/project-name-ILJTETUE.js +0 -14
- /package/dist/{chunk-3Y5THOU6.js → chunk-6WIFPD2P.js} +0 -0
- /package/dist/{chunk-7XGXRD22.js → chunk-AISULNGL.js} +0 -0
- /package/dist/{chunk-3F2UB4IQ.js → chunk-DN4YVV4Z.js} +0 -0
- /package/dist/{chunk-WV3TOOL7.js → chunk-KQ6RJWRW.js} +0 -0
- /package/dist/{chunk-HR2R2QER.js → chunk-M4IRPXSZ.js} +0 -0
- /package/dist/{chunk-ORA5BWCV.js → chunk-NRG7KZIP.js} +0 -0
- /package/dist/{chunk-7UTJA6HF.js → chunk-VZAFWPAY.js} +0 -0
- /package/dist/{chunk-VJSDGDNS.js → chunk-WSQASFLP.js} +0 -0
- /package/dist/{chunk-FZQWVQJG.js → chunk-YO4BO2CL.js} +0 -0
- /package/dist/{core-memory-6WBNT2HL.js → core-memory-7I7RE2SJ.js} +0 -0
- /package/dist/{entity-boost-MT336PI3.js → entity-boost-3UWGXG5O.js} +0 -0
- /package/dist/{memory-isolation-EJ45IXBH.js → memory-isolation-2TUZ7Z4K.js} +0 -0
- /package/dist/{message-queue-client-MVBTYCSV.js → message-queue-client-XQN7QABL.js} +0 -0
- /package/dist/{webhook-pipe-UQSEHFPO.js → webhook-pipe-W2FVXY7M.js} +0 -0
- /package/dist/{wiki-acl-WXRJGZ5Q.js → wiki-acl-IBQLLBTS.js} +0 -0
- /package/dist/{wiki-client-AXNM5FWY.js → wiki-client-W65IOSWF.js} +0 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import {
|
|
2
|
+
killIfSameProcess,
|
|
3
|
+
ownProcessStartedAt,
|
|
4
|
+
processStartedAt
|
|
5
|
+
} from "./chunk-SLLLOOEI.js";
|
|
6
|
+
import {
|
|
7
|
+
resolveDataDir
|
|
8
|
+
} from "./chunk-ZIG7VPJV.js";
|
|
9
|
+
|
|
10
|
+
// src/lib/mcp-child-registry.ts
|
|
11
|
+
import path from "path";
|
|
12
|
+
import {
|
|
13
|
+
existsSync,
|
|
14
|
+
mkdirSync,
|
|
15
|
+
readFileSync,
|
|
16
|
+
writeFileSync,
|
|
17
|
+
unlinkSync,
|
|
18
|
+
readdirSync
|
|
19
|
+
} from "fs";
|
|
20
|
+
var PID_IDENTITY_TOLERANCE_MS = 2e3;
|
|
21
|
+
function registryDir() {
|
|
22
|
+
return path.join(resolveDataDir(), "mcp-children");
|
|
23
|
+
}
|
|
24
|
+
function registryFile(sessionKey) {
|
|
25
|
+
const sanitized = sessionKey.replace(/[^A-Za-z0-9_.-]/g, "_");
|
|
26
|
+
return path.join(registryDir(), `mcp-children-${sanitized}.json`);
|
|
27
|
+
}
|
|
28
|
+
function defaultIsAlive(pid) {
|
|
29
|
+
try {
|
|
30
|
+
process.kill(pid, 0);
|
|
31
|
+
return true;
|
|
32
|
+
} catch {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function defaultSleep(ms) {
|
|
37
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
38
|
+
}
|
|
39
|
+
function quantizeToPsResolution(ms) {
|
|
40
|
+
return Math.floor(ms / 1e3) * 1e3;
|
|
41
|
+
}
|
|
42
|
+
var _sessionKey;
|
|
43
|
+
function currentMcpSessionKey() {
|
|
44
|
+
if (_sessionKey === void 0) {
|
|
45
|
+
_sessionKey = `${process.pid}-${quantizeToPsResolution(ownProcessStartedAt())}`;
|
|
46
|
+
}
|
|
47
|
+
return _sessionKey;
|
|
48
|
+
}
|
|
49
|
+
function registerMcpChild(sessionKey, pid, command, ownerPid = process.pid, spawnedAtMs) {
|
|
50
|
+
try {
|
|
51
|
+
mkdirSync(registryDir(), { recursive: true });
|
|
52
|
+
const file = registryFile(sessionKey);
|
|
53
|
+
const ownerStartedAtMs = ownerPid === process.pid ? ownProcessStartedAt() : processStartedAt(ownerPid);
|
|
54
|
+
let record;
|
|
55
|
+
try {
|
|
56
|
+
record = JSON.parse(readFileSync(file, "utf8"));
|
|
57
|
+
} catch {
|
|
58
|
+
record = { sessionKey, owner: { pid: ownerPid, startedAtMs: null }, children: [] };
|
|
59
|
+
}
|
|
60
|
+
if (record.children.length > 0 && !(record.owner?.pid === ownerPid && sameOwnerIdentity(record.owner?.startedAtMs ?? null, ownerStartedAtMs))) {
|
|
61
|
+
const foreign = record.children.map((c) => c.pid);
|
|
62
|
+
try {
|
|
63
|
+
process.stderr.write(
|
|
64
|
+
`[mcp-child-registry] REFUSING to adopt session ${sessionKey}: the existing record belongs to owner pid ${record.owner?.pid ?? "unknown"}, not to this process (${ownerPid}). Discarding ${foreign.length} inherited child entry(ies) [${foreign.join(", ")}] rather than claiming ownership of processes we did not spawn \u2014 a record that lies about ownership is never reaped.
|
|
65
|
+
`
|
|
66
|
+
);
|
|
67
|
+
} catch {
|
|
68
|
+
}
|
|
69
|
+
record.children = [];
|
|
70
|
+
}
|
|
71
|
+
record.sessionKey = sessionKey;
|
|
72
|
+
record.owner = { pid: ownerPid, startedAtMs: ownerStartedAtMs };
|
|
73
|
+
record.children = record.children.filter((c) => c.pid !== pid);
|
|
74
|
+
const spawnFallback = quantizeToPsResolution(spawnedAtMs ?? Date.now());
|
|
75
|
+
record.children.push({
|
|
76
|
+
pid,
|
|
77
|
+
startedAtMs: processStartedAt(pid) ?? spawnFallback,
|
|
78
|
+
command
|
|
79
|
+
});
|
|
80
|
+
writeFileSync(file, JSON.stringify(record));
|
|
81
|
+
} catch {
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function unregisterMcpChild(sessionKey, pid) {
|
|
85
|
+
try {
|
|
86
|
+
const file = registryFile(sessionKey);
|
|
87
|
+
if (!existsSync(file)) return;
|
|
88
|
+
let record;
|
|
89
|
+
try {
|
|
90
|
+
record = JSON.parse(readFileSync(file, "utf8"));
|
|
91
|
+
} catch {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
record.children = record.children.filter((c) => c.pid !== pid);
|
|
95
|
+
if (record.children.length === 0) {
|
|
96
|
+
try {
|
|
97
|
+
unlinkSync(file);
|
|
98
|
+
} catch {
|
|
99
|
+
}
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
writeFileSync(file, JSON.stringify(record));
|
|
103
|
+
} catch {
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function readSessionMcpChildren(sessionKey) {
|
|
107
|
+
try {
|
|
108
|
+
const raw = readFileSync(registryFile(sessionKey), "utf8");
|
|
109
|
+
return JSON.parse(raw);
|
|
110
|
+
} catch {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function clearSessionMcpChildren(sessionKey) {
|
|
115
|
+
try {
|
|
116
|
+
unlinkSync(registryFile(sessionKey));
|
|
117
|
+
} catch {
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
async function terminateSessionMcpChildren(sessionKey, opts = {}) {
|
|
121
|
+
const result = { sessionKey, terminated: [], sigkilled: [], skipped: [] };
|
|
122
|
+
const record = readSessionMcpChildren(sessionKey);
|
|
123
|
+
if (!record) {
|
|
124
|
+
clearSessionMcpChildren(sessionKey);
|
|
125
|
+
return result;
|
|
126
|
+
}
|
|
127
|
+
const graceMs = opts.graceMs ?? 3e3;
|
|
128
|
+
const kill = opts.kill;
|
|
129
|
+
const isAlive = opts.isAlive ?? defaultIsAlive;
|
|
130
|
+
const startedAt = opts.startedAt ?? processStartedAt;
|
|
131
|
+
const sleep = opts.sleep ?? defaultSleep;
|
|
132
|
+
const log = opts.log ?? ((m) => {
|
|
133
|
+
try {
|
|
134
|
+
process.stderr.write(m + "\n");
|
|
135
|
+
} catch {
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
const sentSigterm = [];
|
|
139
|
+
for (const child of record.children) {
|
|
140
|
+
const outcome = killIfSameProcess(child.pid, child.startedAtMs, "SIGTERM", {
|
|
141
|
+
sender: "mcp-child-registry",
|
|
142
|
+
reason: `session ${sessionKey} end`,
|
|
143
|
+
kill,
|
|
144
|
+
isAlive,
|
|
145
|
+
startedAt,
|
|
146
|
+
log
|
|
147
|
+
});
|
|
148
|
+
if (outcome === "sent") {
|
|
149
|
+
result.terminated.push(child.pid);
|
|
150
|
+
sentSigterm.push(child);
|
|
151
|
+
} else {
|
|
152
|
+
result.skipped.push(child.pid);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (sentSigterm.length > 0) {
|
|
156
|
+
await sleep(graceMs);
|
|
157
|
+
for (const child of sentSigterm) {
|
|
158
|
+
let alive;
|
|
159
|
+
try {
|
|
160
|
+
alive = isAlive(child.pid);
|
|
161
|
+
} catch {
|
|
162
|
+
alive = false;
|
|
163
|
+
}
|
|
164
|
+
if (!alive) continue;
|
|
165
|
+
const outcome = killIfSameProcess(child.pid, child.startedAtMs, "SIGKILL", {
|
|
166
|
+
sender: "mcp-child-registry",
|
|
167
|
+
reason: `session ${sessionKey} end (SIGKILL escalation)`,
|
|
168
|
+
kill,
|
|
169
|
+
isAlive,
|
|
170
|
+
startedAt,
|
|
171
|
+
log
|
|
172
|
+
});
|
|
173
|
+
if (outcome === "sent") {
|
|
174
|
+
result.sigkilled.push(child.pid);
|
|
175
|
+
} else if (outcome === "skipped-identity") {
|
|
176
|
+
result.skipped.push(child.pid);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
if (result.skipped.length === 0) {
|
|
181
|
+
clearSessionMcpChildren(sessionKey);
|
|
182
|
+
} else {
|
|
183
|
+
log(
|
|
184
|
+
`[mcp-child-registry] session ${sessionKey}: retaining registry record \u2014 ${result.skipped.length} child(ren) [${result.skipped.join(", ")}] could not be identity-verified and were NOT signalled. The record is kept so a later sweep can retry.`
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
return result;
|
|
188
|
+
}
|
|
189
|
+
function sameOwnerIdentity(expectedMs, actualMs) {
|
|
190
|
+
if (expectedMs === null || actualMs === null) return false;
|
|
191
|
+
return Math.abs(expectedMs - actualMs) <= PID_IDENTITY_TOLERANCE_MS;
|
|
192
|
+
}
|
|
193
|
+
async function reapOrphanedMcpChildren(opts = {}) {
|
|
194
|
+
const results = [];
|
|
195
|
+
let files;
|
|
196
|
+
try {
|
|
197
|
+
files = readdirSync(registryDir());
|
|
198
|
+
} catch {
|
|
199
|
+
return results;
|
|
200
|
+
}
|
|
201
|
+
const isAlive = opts.isAlive ?? defaultIsAlive;
|
|
202
|
+
const startedAt = opts.startedAt ?? processStartedAt;
|
|
203
|
+
const log = opts.log ?? ((m) => {
|
|
204
|
+
try {
|
|
205
|
+
process.stderr.write(m + "\n");
|
|
206
|
+
} catch {
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
for (const file of files) {
|
|
210
|
+
if (!file.startsWith("mcp-children-") || !file.endsWith(".json")) continue;
|
|
211
|
+
try {
|
|
212
|
+
const raw = readFileSync(path.join(registryDir(), file), "utf8");
|
|
213
|
+
const record = JSON.parse(raw);
|
|
214
|
+
if (!record || typeof record.sessionKey !== "string" || !Array.isArray(record.children)) {
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
let alive;
|
|
218
|
+
try {
|
|
219
|
+
alive = isAlive(record.owner.pid);
|
|
220
|
+
} catch {
|
|
221
|
+
alive = false;
|
|
222
|
+
}
|
|
223
|
+
if (alive && record.owner.startedAtMs == null) {
|
|
224
|
+
const childPids = record.children.map((c) => c.pid);
|
|
225
|
+
log(
|
|
226
|
+
`[mcp-child-registry] UNVERIFIABLE session ${record.sessionKey}: owner pid ${record.owner.pid} is alive but has NO recorded start time, so it cannot be confirmed as the original owner. Refusing to terminate its ${childPids.length} child(ren) [${childPids.join(", ")}] \u2014 signalling on unverified identity is how a recycled PID gets an innocent process killed. These children may be leaked; they will be reaped once that pid is gone.`
|
|
227
|
+
);
|
|
228
|
+
try {
|
|
229
|
+
opts.onUnverifiable?.({ sessionKey: record.sessionKey, ownerPid: record.owner.pid, childPids });
|
|
230
|
+
} catch {
|
|
231
|
+
}
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
let recycled = false;
|
|
235
|
+
if (alive && record.owner.startedAtMs != null) {
|
|
236
|
+
let actual;
|
|
237
|
+
try {
|
|
238
|
+
actual = startedAt(record.owner.pid);
|
|
239
|
+
} catch {
|
|
240
|
+
actual = null;
|
|
241
|
+
}
|
|
242
|
+
recycled = !sameOwnerIdentity(record.owner.startedAtMs, actual);
|
|
243
|
+
}
|
|
244
|
+
if (alive && !recycled) continue;
|
|
245
|
+
const result = await terminateSessionMcpChildren(record.sessionKey, opts);
|
|
246
|
+
results.push(result);
|
|
247
|
+
} catch {
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return results;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
export {
|
|
254
|
+
currentMcpSessionKey,
|
|
255
|
+
registerMcpChild,
|
|
256
|
+
unregisterMcpChild,
|
|
257
|
+
readSessionMcpChildren,
|
|
258
|
+
clearSessionMcpChildren,
|
|
259
|
+
terminateSessionMcpChildren,
|
|
260
|
+
reapOrphanedMcpChildren
|
|
261
|
+
};
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-SSC7EKY2.js";
|
|
4
4
|
import {
|
|
5
5
|
inventoryLocalSecretResidue
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-HDLAB7W3.js";
|
|
7
7
|
import {
|
|
8
8
|
CC_NATIVE_ONLY_CUTOFF,
|
|
9
9
|
compareSemver,
|
|
@@ -12,22 +12,22 @@ import {
|
|
|
12
12
|
import {
|
|
13
13
|
readMcpHttpEvents,
|
|
14
14
|
summarizeMcpTransport
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-FNEZ4BWT.js";
|
|
16
16
|
import {
|
|
17
17
|
mcpHttpPort
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-NKETJCB5.js";
|
|
19
19
|
import {
|
|
20
20
|
inspectKeyCustodySync
|
|
21
21
|
} from "./chunk-HPXFKUGU.js";
|
|
22
22
|
import {
|
|
23
23
|
checkSingleGotrueInstance
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-FTZET5YX.js";
|
|
25
25
|
import {
|
|
26
26
|
SYSTEMD_DAEMON_UNIT
|
|
27
27
|
} from "./chunk-A7JYF4RG.js";
|
|
28
28
|
import {
|
|
29
29
|
EXE_AI_DIR
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-ZIG7VPJV.js";
|
|
31
31
|
|
|
32
32
|
// src/bin/exe-healthcheck.ts
|
|
33
33
|
import { existsSync as existsSync2, readFileSync as readFileSync2, readdirSync } from "fs";
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
PLATFORM_PROCEDURE_TITLES
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-PY3FOMRN.js";
|
|
4
4
|
import {
|
|
5
5
|
isGhostBehaviorRow
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-WMEYJT4R.js";
|
|
7
7
|
import {
|
|
8
8
|
getClient,
|
|
9
9
|
getIdentity,
|
|
10
10
|
listIdentities,
|
|
11
11
|
updateIdentity
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-TAMDAOCU.js";
|
|
13
13
|
import {
|
|
14
14
|
atomicWriteJsonSync
|
|
15
15
|
} from "./chunk-HSGBZSCA.js";
|
|
@@ -126,13 +126,27 @@ function buildImportedRosterEntries(roster, timestamp) {
|
|
|
126
126
|
...entry.templateVersion != null ? { templateVersion: entry.templateVersion } : {}
|
|
127
127
|
}));
|
|
128
128
|
}
|
|
129
|
+
var behaviorKey = (agentId, content) => `${agentId}::${content}`;
|
|
129
130
|
async function insertBehaviors(behaviors, timestamp) {
|
|
130
131
|
const client = getClient();
|
|
132
|
+
const seen = /* @__PURE__ */ new Set();
|
|
133
|
+
const existing = await client.execute({
|
|
134
|
+
sql: "SELECT agent_id, content FROM behaviors WHERE active = 1",
|
|
135
|
+
args: []
|
|
136
|
+
});
|
|
137
|
+
for (const row of existing.rows) {
|
|
138
|
+
seen.add(behaviorKey(String(row.agent_id), String(row.content)));
|
|
139
|
+
}
|
|
131
140
|
let inserted = 0;
|
|
132
141
|
for (const behavior of behaviors) {
|
|
133
142
|
if (isGhostBehaviorRow({ id: "import", content: behavior.content, agent_id: behavior.agent_id })) {
|
|
134
143
|
continue;
|
|
135
144
|
}
|
|
145
|
+
const key = behaviorKey(behavior.agent_id, behavior.content);
|
|
146
|
+
if (seen.has(key)) {
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
seen.add(key);
|
|
136
150
|
await client.execute({
|
|
137
151
|
sql: `INSERT INTO behaviors (id, agent_id, project_name, domain, priority, content, active, created_at, updated_at)
|
|
138
152
|
VALUES (?, ?, ?, ?, ?, ?, 1, ?, ?)`,
|
|
@@ -130,12 +130,65 @@ function basename(tok) {
|
|
|
130
130
|
function isGitProgram(tok) {
|
|
131
131
|
return tok === "git" || /(?:^|\/)git$/.test(tok);
|
|
132
132
|
}
|
|
133
|
+
function isGhProgram(tok) {
|
|
134
|
+
return tok === "gh" || /(?:^|\/)gh$/.test(tok);
|
|
135
|
+
}
|
|
136
|
+
function ghHasDeleteMethod(tokens) {
|
|
137
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
138
|
+
const t = tokens[i];
|
|
139
|
+
if ((t === "-X" || t === "--method") && (tokens[i + 1] ?? "").toUpperCase() === "DELETE") return true;
|
|
140
|
+
const attached = /^(?:-X|--method)=(.+)$/.exec(t);
|
|
141
|
+
if (attached && attached[1].toUpperCase() === "DELETE") return true;
|
|
142
|
+
const combined = /^-X(.+)$/.exec(t);
|
|
143
|
+
if (combined && combined[1].toUpperCase() === "DELETE") return true;
|
|
144
|
+
}
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
function endpointRefPath(tok) {
|
|
148
|
+
const cut = tok.search(/[?#]/);
|
|
149
|
+
return cut >= 0 ? tok.slice(0, cut) : tok;
|
|
150
|
+
}
|
|
151
|
+
function classifyGhSegment(tokens) {
|
|
152
|
+
const ghIdx = tokens.findIndex(isGhProgram);
|
|
153
|
+
if (ghIdx === -1) return "none";
|
|
154
|
+
const hasApi = tokens.slice(ghIdx + 1).includes("api");
|
|
155
|
+
if (!hasApi) return "none";
|
|
156
|
+
if (!ghHasDeleteMethod(tokens)) return "none";
|
|
157
|
+
const endpoint = tokens.find(
|
|
158
|
+
(t, i) => i > ghIdx && !t.startsWith("-") && // not a flag / attached flag (-X, --method=..., --field=...)
|
|
159
|
+
!/^[A-Za-z_][\w.-]*=/.test(t) && // not a key=value field/header value
|
|
160
|
+
/git\/refs\//.test(endpointRefPath(t))
|
|
161
|
+
);
|
|
162
|
+
if (endpoint === void 0) return "none";
|
|
163
|
+
const refPath = endpointRefPath(endpoint);
|
|
164
|
+
if (/git\/refs\/tags\//.test(refPath)) return "tag";
|
|
165
|
+
return "block";
|
|
166
|
+
}
|
|
133
167
|
function isShellProgram(tok) {
|
|
134
168
|
return SHELLS.has(basename(tok));
|
|
135
169
|
}
|
|
136
170
|
function isDashC(tok) {
|
|
137
171
|
return /^-[a-z]*c[a-z]*$/i.test(tok) && tok.includes("c");
|
|
138
172
|
}
|
|
173
|
+
var SHELL_VALUE_OPTS = /* @__PURE__ */ new Set(["-o", "+o", "-O", "+O", "--rcfile", "--init-file"]);
|
|
174
|
+
function shellDashCScriptIndex(tokens, i) {
|
|
175
|
+
if (!isShellProgram(tokens[i])) return -1;
|
|
176
|
+
let j = i + 1;
|
|
177
|
+
while (j < tokens.length) {
|
|
178
|
+
const t = tokens[j];
|
|
179
|
+
if (isDashC(t)) return j + 1 < tokens.length ? j + 1 : -1;
|
|
180
|
+
if (SHELL_VALUE_OPTS.has(t)) {
|
|
181
|
+
j += 2;
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
if (t.startsWith("-")) {
|
|
185
|
+
j++;
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
return -1;
|
|
189
|
+
}
|
|
190
|
+
return -1;
|
|
191
|
+
}
|
|
139
192
|
function isLeadingAssignment(tok) {
|
|
140
193
|
return /^[A-Za-z_][A-Za-z0-9_]*=/.test(tok);
|
|
141
194
|
}
|
|
@@ -240,8 +293,9 @@ function containsDestructiveGitCandidate(command, depth = 0) {
|
|
|
240
293
|
if (depth > 3) return true;
|
|
241
294
|
const { tokens } = tokenizeShell(command);
|
|
242
295
|
for (let i = 0; i < tokens.length; i++) {
|
|
243
|
-
|
|
244
|
-
|
|
296
|
+
const si = shellDashCScriptIndex(tokens, i);
|
|
297
|
+
if (si >= 0) {
|
|
298
|
+
const script = tokens[si];
|
|
245
299
|
if (script && containsDestructiveGitCandidate(script, depth + 1)) return true;
|
|
246
300
|
}
|
|
247
301
|
}
|
|
@@ -259,6 +313,24 @@ function containsDestructiveGitCandidate(command, depth = 0) {
|
|
|
259
313
|
if (tokens.some((t) => /^alias\./.test(t))) return true;
|
|
260
314
|
return hasDestructiveVerbTokens(tokens);
|
|
261
315
|
}
|
|
316
|
+
function ghApiRefDeleteVerdict(command, depth = 0) {
|
|
317
|
+
if (depth > 3) return "block";
|
|
318
|
+
const { tokens } = tokenizeShell(command);
|
|
319
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
320
|
+
const si = shellDashCScriptIndex(tokens, i);
|
|
321
|
+
if (si >= 0) {
|
|
322
|
+
const script = tokens[si];
|
|
323
|
+
if (script && ghApiRefDeleteVerdict(script, depth + 1) === "block") return "block";
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
let sawTag = false;
|
|
327
|
+
for (const seg of splitShellSegments(command)) {
|
|
328
|
+
const v = classifyGhSegment(tokenizeShell(seg).tokens);
|
|
329
|
+
if (v === "block") return "block";
|
|
330
|
+
if (v === "tag") sawTag = true;
|
|
331
|
+
}
|
|
332
|
+
return sawTag ? "tag" : "none";
|
|
333
|
+
}
|
|
262
334
|
var PUSH_VALUE_OPTS = /* @__PURE__ */ new Set(["-o", "--push-option", "--repo", "--receive-pack", "--exec", "--recurse-submodules"]);
|
|
263
335
|
var REBASE_VALUE_OPTS = /* @__PURE__ */ new Set(["--onto", "-s", "--strategy", "-X", "--strategy-option", "--exec", "-x", "--whitespace"]);
|
|
264
336
|
function parseSingleGitCommand(tokens) {
|
|
@@ -572,7 +644,7 @@ function getCurrentBranch(cwd) {
|
|
|
572
644
|
}
|
|
573
645
|
function hasEmergencyOverride(command, env = process.env) {
|
|
574
646
|
if (env[MAIN_GUARD_OVERRIDE_ENV] === "1") return true;
|
|
575
|
-
return new RegExp(String.raw`^\s*${MAIN_GUARD_OVERRIDE_ENV}=1\s+git\b`).test(command);
|
|
647
|
+
return new RegExp(String.raw`^\s*${MAIN_GUARD_OVERRIDE_ENV}=1\s+(?:git|gh)\b`).test(command);
|
|
576
648
|
}
|
|
577
649
|
function normalizeCleanGit(tokens) {
|
|
578
650
|
const first = tokens[0];
|
|
@@ -586,6 +658,9 @@ function evaluateMainGuard(command, opts = {}) {
|
|
|
586
658
|
const env = opts.env ?? process.env;
|
|
587
659
|
const cwd = opts.cwd ?? process.cwd();
|
|
588
660
|
if (hasEmergencyOverride(command, env)) return { block: false, overridden: true };
|
|
661
|
+
if (ghApiRefDeleteVerdict(command) === "block") {
|
|
662
|
+
return { block: true, message: formatGhApiRefDeleteBlockMessage() };
|
|
663
|
+
}
|
|
589
664
|
if (!containsDestructiveGitCandidate(command)) return { block: false };
|
|
590
665
|
const { tokens, hasShellControl } = tokenizeShell(command);
|
|
591
666
|
if (hasShellControl) {
|
|
@@ -661,6 +736,14 @@ SAFE ALTERNATIVES:
|
|
|
661
736
|
\u2022 Resetting a NON-${info.branch} branch onto its own ancestor is allowed \u2014 check that branch out first (git checkout -B <branch> <sha>); this guard only fires when ${info.branch} itself moves.
|
|
662
737
|
${OVERRIDE_LINE}`;
|
|
663
738
|
}
|
|
739
|
+
function formatGhApiRefDeleteBlockMessage() {
|
|
740
|
+
return `\u{1F6AB} BLOCKED: deleting a remote ref via \`gh api -X DELETE .../git/refs/...\`.
|
|
741
|
+
WHY: this is the same destructive operation as \`git push --delete <branch>\`, which this guard gates. Routing the deletion through the REST API does not make it safe \u2014 a remote branch ref is being destroyed.
|
|
742
|
+
WHAT TO DO:
|
|
743
|
+
\u2022 Deleting a TAG is fine \u2014 target refs/tags explicitly: gh api -X DELETE .../git/refs/tags/<tag>
|
|
744
|
+
\u2022 If you truly intend to delete a remote BRANCH, do it deliberately and auditably with the documented override.
|
|
745
|
+
${OVERRIDE_LINE}`;
|
|
746
|
+
}
|
|
664
747
|
function formatForcePushBlockMessage(verb = "force/delete push to main") {
|
|
665
748
|
return `\u{1F6AB} BLOCKED: ${verb} would overwrite SHARED history on origin \u2014 it can silently discard commits other people (and other agents) pushed.
|
|
666
749
|
WHY: --force / --force-with-lease / --mirror / +refspec / --delete rewrites the remote branch everyone builds on (bug 6aaea78f).
|
|
@@ -696,8 +779,10 @@ export {
|
|
|
696
779
|
MAIN_GUARD_OVERRIDE_ENV,
|
|
697
780
|
tokenizeShell,
|
|
698
781
|
isGitProgram,
|
|
782
|
+
isGhProgram,
|
|
699
783
|
splitShellSegments,
|
|
700
784
|
containsDestructiveGitCandidate,
|
|
785
|
+
ghApiRefDeleteVerdict,
|
|
701
786
|
parseSingleGitCommand,
|
|
702
787
|
resolveRepoState,
|
|
703
788
|
isResolvableRefName,
|
|
@@ -710,6 +795,7 @@ export {
|
|
|
710
795
|
hasEmergencyOverride,
|
|
711
796
|
evaluateMainGuard,
|
|
712
797
|
formatMainAheadBlockMessage,
|
|
798
|
+
formatGhApiRefDeleteBlockMessage,
|
|
713
799
|
formatForcePushBlockMessage,
|
|
714
800
|
formatUnprovableDeleteBlockMessage,
|
|
715
801
|
formatUnverifiableBlockMessage,
|
|
@@ -65,6 +65,28 @@ function readDeployStalenessAlert(alertPath = deployStalenessAlertPath()) {
|
|
|
65
65
|
return null;
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
|
+
function stackLockCandidatePaths() {
|
|
69
|
+
const override = process.env.EXE_STACK_LOCK_FILE;
|
|
70
|
+
if (override) return [override];
|
|
71
|
+
return [
|
|
72
|
+
path.join("/opt/exe-stack", ".exe-stack-lock.json"),
|
|
73
|
+
path.join(process.cwd(), ".exe-stack-lock.json")
|
|
74
|
+
];
|
|
75
|
+
}
|
|
76
|
+
function readStackLockSnapshot(candidates = stackLockCandidatePaths()) {
|
|
77
|
+
for (const candidate of candidates) {
|
|
78
|
+
try {
|
|
79
|
+
if (!existsSync(candidate)) continue;
|
|
80
|
+
const parsed = JSON.parse(readFileSync(candidate, "utf8"));
|
|
81
|
+
if (parsed && typeof parsed === "object") return parsed;
|
|
82
|
+
} catch {
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
function resolveDeployStalenessAlert(alertPath = deployStalenessAlertPath(), candidates = stackLockCandidatePaths(), now = () => /* @__PURE__ */ new Date()) {
|
|
88
|
+
return readDeployStalenessAlert(alertPath) ?? evaluateDeployStaleness(readStackLockSnapshot(candidates), now);
|
|
89
|
+
}
|
|
68
90
|
function buildDeployStalenessBanner(alert) {
|
|
69
91
|
if (!alert) return [];
|
|
70
92
|
const lines = [];
|
|
@@ -90,8 +112,9 @@ function buildDeployStalenessBanner(alert) {
|
|
|
90
112
|
|
|
91
113
|
export {
|
|
92
114
|
evaluateDeployStaleness,
|
|
115
|
+
deployStalenessAlertPath,
|
|
93
116
|
writeDeployStalenessAlert,
|
|
94
117
|
clearDeployStalenessAlert,
|
|
95
|
-
|
|
118
|
+
resolveDeployStalenessAlert,
|
|
96
119
|
buildDeployStalenessBanner
|
|
97
120
|
};
|
|
@@ -6,20 +6,20 @@ import {
|
|
|
6
6
|
queryTaskRows,
|
|
7
7
|
resolveExeSession,
|
|
8
8
|
sendIntercom
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-AKLQSC6W.js";
|
|
10
10
|
import {
|
|
11
11
|
getTransport
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-VI4ATC6I.js";
|
|
13
13
|
import {
|
|
14
14
|
recordOrchestrationEventBestEffort
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-W75GTHR3.js";
|
|
16
16
|
import {
|
|
17
17
|
releaseDispatchClaim,
|
|
18
18
|
tryAcquireDispatchClaim
|
|
19
19
|
} from "./chunk-AJIXH5JF.js";
|
|
20
20
|
import {
|
|
21
21
|
getAgentRuntime
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-GZOG2MAX.js";
|
|
23
23
|
import {
|
|
24
24
|
getSessionKey
|
|
25
25
|
} from "./chunk-CVYC6DUW.js";
|
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
isCoordinatorName,
|
|
28
28
|
isMultiInstance,
|
|
29
29
|
shouldAutoInstance
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-TAMDAOCU.js";
|
|
31
31
|
|
|
32
32
|
// src/lib/tasks-notify.ts
|
|
33
33
|
var VERIFY_DELAY_MS = 1e4;
|
|
@@ -89,7 +89,7 @@ async function dispatchTaskToEmployee(input) {
|
|
|
89
89
|
let crossProject = false;
|
|
90
90
|
if (input.projectName) {
|
|
91
91
|
try {
|
|
92
|
-
const { assertSessionScope } = await import("./session-scope-
|
|
92
|
+
const { assertSessionScope } = await import("./session-scope-KRWE54C4.js");
|
|
93
93
|
const check = assertSessionScope("dispatch_task", input.projectName);
|
|
94
94
|
if (check.reason === "cross_session_denied") {
|
|
95
95
|
crossProject = true;
|
|
@@ -227,7 +227,7 @@ async function dispatchTaskToEmployee(input) {
|
|
|
227
227
|
return { dispatched: "skipped", session: sessionName, crossProject };
|
|
228
228
|
}
|
|
229
229
|
const result = sendIntercom(sessionName, { force: true });
|
|
230
|
-
const dispatched = result === "acknowledged" || result === "debounced" || result === "queued" ? "verified" : result === "delivered" ? "sent_unverified" : "session_dead";
|
|
230
|
+
const dispatched = result === "acknowledged" || result === "debounced" || result === "queued" ? "verified" : result === "delivered" || result === "sent" ? "sent_unverified" : "session_dead";
|
|
231
231
|
process.stderr.write(
|
|
232
232
|
`[dispatch-audit] intercom \u2192 ${sessionName} | task="${input.title}" [${input.priority}] | result=${dispatched} (sendIntercom=${result})
|
|
233
233
|
`
|