@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
|
@@ -5,6 +5,9 @@ import {
|
|
|
5
5
|
checkPermission
|
|
6
6
|
} from "./chunk-2O2UKMUE.js";
|
|
7
7
|
|
|
8
|
+
// src/runtime/agent-loop.ts
|
|
9
|
+
import { basename } from "path";
|
|
10
|
+
|
|
8
11
|
// src/runtime/stall-detection.ts
|
|
9
12
|
import { createHash } from "crypto";
|
|
10
13
|
var STALL_LIMITS = {
|
|
@@ -291,6 +294,8 @@ var ContextManager = class {
|
|
|
291
294
|
*/
|
|
292
295
|
async postCompact(removedCount, summaryLength) {
|
|
293
296
|
this.state.estimatedTokens = 0;
|
|
297
|
+
this.state.inputTokens = 0;
|
|
298
|
+
this.state.outputTokens = 0;
|
|
294
299
|
const currentPercent = this.percentUsed;
|
|
295
300
|
for (const threshold of PRESSURE_THRESHOLDS) {
|
|
296
301
|
if (currentPercent < threshold) {
|
|
@@ -347,176 +352,393 @@ function shouldWarnDenials(state) {
|
|
|
347
352
|
}
|
|
348
353
|
|
|
349
354
|
// src/runtime/agent-loop.ts
|
|
355
|
+
var DeadlineExceededError = class extends Error {
|
|
356
|
+
constructor() {
|
|
357
|
+
super("agent loop deadline exceeded");
|
|
358
|
+
this.name = "DeadlineExceededError";
|
|
359
|
+
}
|
|
360
|
+
};
|
|
361
|
+
async function raceDeadline(work, remainingMs, onDeadline) {
|
|
362
|
+
if (remainingMs <= 0) {
|
|
363
|
+
onDeadline();
|
|
364
|
+
throw new DeadlineExceededError();
|
|
365
|
+
}
|
|
366
|
+
let timer;
|
|
367
|
+
const deadline = new Promise((_, reject) => {
|
|
368
|
+
timer = setTimeout(() => {
|
|
369
|
+
onDeadline();
|
|
370
|
+
reject(new DeadlineExceededError());
|
|
371
|
+
}, remainingMs);
|
|
372
|
+
timer.unref?.();
|
|
373
|
+
});
|
|
374
|
+
try {
|
|
375
|
+
return await Promise.race([work, deadline]);
|
|
376
|
+
} finally {
|
|
377
|
+
if (timer) clearTimeout(timer);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
var TIMED_OUT = /* @__PURE__ */ Symbol("timed-out");
|
|
381
|
+
function withTimeout(p, ms) {
|
|
382
|
+
let timer;
|
|
383
|
+
const timeout = new Promise((resolve) => {
|
|
384
|
+
timer = setTimeout(() => resolve(TIMED_OUT), ms);
|
|
385
|
+
timer.unref?.();
|
|
386
|
+
});
|
|
387
|
+
return Promise.race([p, timeout]).finally(() => {
|
|
388
|
+
if (timer) clearTimeout(timer);
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
async function settleMutationAtDeadline(work, remainingMs, graceMs, onDeadline) {
|
|
392
|
+
const settled = work.then(
|
|
393
|
+
(value) => ({ status: "fulfilled", value }),
|
|
394
|
+
(reason) => ({ status: "rejected", reason })
|
|
395
|
+
);
|
|
396
|
+
if (remainingMs > 0) {
|
|
397
|
+
const first = await withTimeout(settled, remainingMs);
|
|
398
|
+
if (first !== TIMED_OUT) return { pastDeadline: false, settlement: first };
|
|
399
|
+
}
|
|
400
|
+
onDeadline();
|
|
401
|
+
if (graceMs > 0) {
|
|
402
|
+
const second = await withTimeout(settled, graceMs);
|
|
403
|
+
if (second !== TIMED_OUT) return { pastDeadline: true, settlement: second };
|
|
404
|
+
}
|
|
405
|
+
return { pastDeadline: true, settlement: { status: "indeterminate" } };
|
|
406
|
+
}
|
|
407
|
+
function createRunAbortController(parent) {
|
|
408
|
+
const controller = new AbortController();
|
|
409
|
+
if (!parent) return { controller, dispose: () => {
|
|
410
|
+
} };
|
|
411
|
+
if (parent.aborted) {
|
|
412
|
+
controller.abort(parent.reason);
|
|
413
|
+
return { controller, dispose: () => {
|
|
414
|
+
} };
|
|
415
|
+
}
|
|
416
|
+
const onParentAbort = () => controller.abort(parent.reason);
|
|
417
|
+
parent.addEventListener("abort", onParentAbort, { once: true });
|
|
418
|
+
return {
|
|
419
|
+
controller,
|
|
420
|
+
dispose: () => parent.removeEventListener("abort", onParentAbort)
|
|
421
|
+
};
|
|
422
|
+
}
|
|
350
423
|
async function* agentLoop(userMessage, history, config) {
|
|
351
424
|
const messages = [
|
|
352
425
|
...history,
|
|
353
426
|
{ role: "user", content: userMessage }
|
|
354
427
|
];
|
|
355
428
|
const totalUsage = { inputTokens: 0, outputTokens: 0 };
|
|
356
|
-
const
|
|
429
|
+
const userAbortSignal = config.abortController?.signal;
|
|
430
|
+
const { controller: abortController, dispose: disposeRunAbort } = createRunAbortController(userAbortSignal);
|
|
357
431
|
const context = {
|
|
358
432
|
cwd: config.cwd,
|
|
359
433
|
agentId: config.agentId,
|
|
360
434
|
abortSignal: abortController.signal,
|
|
361
435
|
sessionState: /* @__PURE__ */ new Map()
|
|
362
436
|
};
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
response
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
437
|
+
try {
|
|
438
|
+
const allowedTools = config.tools.toAllowedNormalizedTools(config.permissions);
|
|
439
|
+
const contextManager = createContextManager(config.model, config.hooks);
|
|
440
|
+
let denialState = createDenialTrackingState();
|
|
441
|
+
let stallState = createStallState();
|
|
442
|
+
let turns = 0;
|
|
443
|
+
let activeModel = config.model;
|
|
444
|
+
let routedToFallback = false;
|
|
445
|
+
const loopStartedAt = Date.now();
|
|
446
|
+
const maxDurationMs = config.maxDurationMs ?? 30 * 6e4;
|
|
447
|
+
const maxConsecutiveFailures = config.maxConsecutiveFailures ?? 6;
|
|
448
|
+
const mutationGraceMs = config.mutationGraceMs ?? 3e4;
|
|
449
|
+
let consecutiveFailedTurns = 0;
|
|
450
|
+
while (turns < config.maxTurns) {
|
|
451
|
+
turns++;
|
|
452
|
+
if (Date.now() - loopStartedAt >= maxDurationMs) {
|
|
453
|
+
yield {
|
|
454
|
+
type: "error",
|
|
455
|
+
error: new Error(
|
|
456
|
+
`Agent loop exceeded max duration (${maxDurationMs}ms) after ${turns - 1} turns \u2014 terminating to avoid an unbounded fetch loop.`
|
|
457
|
+
)
|
|
458
|
+
};
|
|
459
|
+
break;
|
|
460
|
+
}
|
|
461
|
+
if (abortController.signal.aborted) {
|
|
462
|
+
yield {
|
|
463
|
+
type: "aborted",
|
|
464
|
+
reason: userAbortSignal?.aborted ? "Agent stopped by user" : "Agent run aborted (internal wall-clock deadline or token cap)"
|
|
465
|
+
};
|
|
466
|
+
break;
|
|
467
|
+
}
|
|
468
|
+
if (config.maxTokenBudget && totalUsage.inputTokens + totalUsage.outputTokens >= config.maxTokenBudget) {
|
|
469
|
+
yield { type: "error", error: new Error("Token budget exceeded") };
|
|
470
|
+
break;
|
|
471
|
+
}
|
|
472
|
+
let response;
|
|
473
|
+
try {
|
|
474
|
+
response = await raceDeadline(
|
|
475
|
+
config.provider.createMessage({
|
|
476
|
+
model: activeModel,
|
|
477
|
+
system: config.systemPrompt,
|
|
478
|
+
messages,
|
|
479
|
+
tools: allowedTools.length > 0 ? allowedTools : void 0,
|
|
480
|
+
maxTokens: 4096,
|
|
481
|
+
abortSignal: abortController.signal
|
|
482
|
+
}),
|
|
483
|
+
maxDurationMs - (Date.now() - loopStartedAt),
|
|
484
|
+
() => abortController.abort()
|
|
405
485
|
);
|
|
486
|
+
} catch (err) {
|
|
487
|
+
if (err instanceof DeadlineExceededError) {
|
|
488
|
+
yield {
|
|
489
|
+
type: "error",
|
|
490
|
+
error: new Error(
|
|
491
|
+
`Agent loop exceeded max duration (${maxDurationMs}ms) during a provider call after ${turns - 1} completed turns \u2014 aborted the in-flight request to enforce the wall-clock ceiling.`
|
|
492
|
+
)
|
|
493
|
+
};
|
|
494
|
+
break;
|
|
495
|
+
}
|
|
496
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
497
|
+
yield { type: "error", error };
|
|
498
|
+
if (config.hooks.onError) await config.hooks.onError(error, context);
|
|
499
|
+
break;
|
|
406
500
|
}
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
501
|
+
totalUsage.inputTokens += response.usage.inputTokens;
|
|
502
|
+
totalUsage.outputTokens += response.usage.outputTokens;
|
|
503
|
+
if (config.tokenBudgetMiddleware) {
|
|
504
|
+
const result = await config.tokenBudgetMiddleware.onTokenUsed(
|
|
505
|
+
response.usage.inputTokens,
|
|
506
|
+
response.usage.outputTokens
|
|
507
|
+
);
|
|
508
|
+
if (result.warned && config.hooks.onNotification) {
|
|
509
|
+
await config.hooks.onNotification(
|
|
510
|
+
`\u26A0\uFE0F Token budget at ${result.percentUsed}%. Fallback model: ${result.fallback ?? "none (task will terminate at 100%)"}.`
|
|
511
|
+
);
|
|
410
512
|
}
|
|
411
|
-
if (result.
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
513
|
+
if (result.exceeded && !routedToFallback) {
|
|
514
|
+
if (config.hooks.onTokenBudgetExceeded) {
|
|
515
|
+
await config.hooks.onTokenBudgetExceeded(context, result.fallback);
|
|
516
|
+
}
|
|
517
|
+
if (result.fallback && result.fallback !== activeModel) {
|
|
518
|
+
routedToFallback = true;
|
|
519
|
+
activeModel = result.fallback;
|
|
520
|
+
if (config.hooks.onNotification) {
|
|
521
|
+
await config.hooks.onNotification(
|
|
522
|
+
`\u{1F53B} Token budget exceeded \u2014 routing to fallback model ${result.fallback} to finish the task.`
|
|
523
|
+
);
|
|
524
|
+
}
|
|
525
|
+
} else {
|
|
526
|
+
abortController.abort();
|
|
527
|
+
yield { type: "error", error: new Error("Token budget exceeded. Task requires manual continuation.") };
|
|
528
|
+
break;
|
|
418
529
|
}
|
|
419
|
-
} else {
|
|
420
|
-
abortController.abort();
|
|
421
|
-
yield { type: "error", error: new Error("Token budget exceeded. Task requires manual continuation.") };
|
|
422
|
-
break;
|
|
423
530
|
}
|
|
424
531
|
}
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
messages.slice(0, -10)
|
|
432
|
-
);
|
|
433
|
-
if (memoriesToExtract.length > 0 && config.hooks.onNotification) {
|
|
434
|
-
await config.hooks.onNotification(
|
|
435
|
-
`Pre-compaction: extracted ${memoriesToExtract.length} key decisions to memory`
|
|
532
|
+
contextManager.updateFromApiUsage(response.usage.inputTokens, response.usage.outputTokens);
|
|
533
|
+
contextManager.updateFromMessages(messages);
|
|
534
|
+
await contextManager.checkPressure();
|
|
535
|
+
if (contextManager.shouldCompact() && messages.length > 12) {
|
|
536
|
+
const { memoriesToExtract } = await contextManager.preCompact(
|
|
537
|
+
messages.slice(0, -10)
|
|
436
538
|
);
|
|
539
|
+
if (memoriesToExtract.length > 0) {
|
|
540
|
+
const persist = config.persistMemory ?? (await import("./memory-queue-client-ADSDP6OX.js")).writeMemoryViaDaemon;
|
|
541
|
+
const projectName = basename(config.cwd) || "unknown";
|
|
542
|
+
const sessionId = `exe-agent-${loopStartedAt}`;
|
|
543
|
+
let persistedCount = 0;
|
|
544
|
+
for (const decision of memoriesToExtract) {
|
|
545
|
+
try {
|
|
546
|
+
await persist({
|
|
547
|
+
raw_text: decision,
|
|
548
|
+
agent_id: config.agentId,
|
|
549
|
+
tool_name: "pre-compaction",
|
|
550
|
+
project_name: projectName,
|
|
551
|
+
session_id: sessionId,
|
|
552
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
553
|
+
importance: 7,
|
|
554
|
+
memory_type: "decision"
|
|
555
|
+
});
|
|
556
|
+
persistedCount++;
|
|
557
|
+
} catch {
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
if (persistedCount > 0 && config.hooks.onNotification) {
|
|
561
|
+
await config.hooks.onNotification(
|
|
562
|
+
`Pre-compaction: extracted ${persistedCount} key decisions to memory`
|
|
563
|
+
);
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
const compacted = await compactMessages(messages, config.provider, config.model);
|
|
567
|
+
const removedCount = compacted.removedCount;
|
|
568
|
+
if (removedCount > 0) {
|
|
569
|
+
messages.length = 0;
|
|
570
|
+
messages.push(...compacted.messages);
|
|
571
|
+
await contextManager.postCompact(removedCount, messages[0]?.content?.toString().length ?? 0);
|
|
572
|
+
}
|
|
437
573
|
}
|
|
438
|
-
const
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
messages.push(...compacted.messages);
|
|
443
|
-
await contextManager.postCompact(removedCount, messages[0]?.content?.toString().length ?? 0);
|
|
574
|
+
for (const block of response.content) {
|
|
575
|
+
if (block.type === "text" && block.text) {
|
|
576
|
+
yield { type: "text", text: block.text };
|
|
577
|
+
}
|
|
444
578
|
}
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
579
|
+
messages.push({ role: "assistant", content: response.content });
|
|
580
|
+
if (response.stopReason === "end_turn" || response.stopReason === "max_tokens") {
|
|
581
|
+
yield { type: "turn_complete", turn: turns, usage: response.usage };
|
|
582
|
+
break;
|
|
449
583
|
}
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
if (response.stopReason === "end_turn" || response.stopReason === "max_tokens") {
|
|
453
|
-
yield { type: "turn_complete", turn: turns, usage: response.usage };
|
|
454
|
-
break;
|
|
455
|
-
}
|
|
456
|
-
const toolUseBlocks = response.content.filter(
|
|
457
|
-
(b) => b.type === "tool_use"
|
|
458
|
-
);
|
|
459
|
-
if (toolUseBlocks.length === 0) {
|
|
460
|
-
yield { type: "turn_complete", turn: turns, usage: response.usage };
|
|
461
|
-
break;
|
|
462
|
-
}
|
|
463
|
-
const { concurrent, sequential } = partitionTools(toolUseBlocks, config.tools);
|
|
464
|
-
const toolResults = [];
|
|
465
|
-
if (concurrent.length > 0) {
|
|
466
|
-
const concurrentResults = await Promise.all(
|
|
467
|
-
concurrent.map(
|
|
468
|
-
(block) => executeToolBlock(
|
|
469
|
-
block,
|
|
470
|
-
config,
|
|
471
|
-
context,
|
|
472
|
-
denialState
|
|
473
|
-
)
|
|
474
|
-
)
|
|
584
|
+
const toolUseBlocks = response.content.filter(
|
|
585
|
+
(b) => b.type === "tool_use"
|
|
475
586
|
);
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
587
|
+
if (toolUseBlocks.length === 0) {
|
|
588
|
+
yield { type: "turn_complete", turn: turns, usage: response.usage };
|
|
589
|
+
break;
|
|
590
|
+
}
|
|
591
|
+
const { concurrent, sequential } = partitionTools(toolUseBlocks, config.tools);
|
|
592
|
+
const toolResults = [];
|
|
593
|
+
if (concurrent.length > 0) {
|
|
594
|
+
let concurrentResults;
|
|
595
|
+
try {
|
|
596
|
+
concurrentResults = await raceDeadline(
|
|
597
|
+
Promise.all(
|
|
598
|
+
concurrent.map(
|
|
599
|
+
(block) => executeToolBlock(
|
|
600
|
+
block,
|
|
601
|
+
config,
|
|
602
|
+
context,
|
|
603
|
+
denialState
|
|
604
|
+
)
|
|
605
|
+
)
|
|
606
|
+
),
|
|
607
|
+
maxDurationMs - (Date.now() - loopStartedAt),
|
|
608
|
+
() => abortController.abort()
|
|
609
|
+
);
|
|
610
|
+
} catch (err) {
|
|
611
|
+
if (err instanceof DeadlineExceededError) {
|
|
612
|
+
yield {
|
|
613
|
+
type: "error",
|
|
614
|
+
error: new Error(
|
|
615
|
+
`Agent loop exceeded max duration (${maxDurationMs}ms) during read-only tool execution after ${turns - 1} completed turns \u2014 abandoned the in-flight read-only calls to enforce the wall-clock ceiling.`
|
|
616
|
+
)
|
|
617
|
+
};
|
|
618
|
+
break;
|
|
619
|
+
}
|
|
620
|
+
throw err;
|
|
621
|
+
}
|
|
622
|
+
for (let i = 0; i < concurrent.length; i++) {
|
|
623
|
+
const block = concurrent[i];
|
|
624
|
+
const execResult = concurrentResults[i];
|
|
625
|
+
denialState = execResult.denialState;
|
|
626
|
+
yield execResult.event;
|
|
627
|
+
if (execResult.permissionEvent) yield execResult.permissionEvent;
|
|
628
|
+
yield { type: "tool_result", name: block.name, id: block.id, result: execResult.result };
|
|
629
|
+
toolResults.push({
|
|
630
|
+
type: "tool_result",
|
|
631
|
+
tool_use_id: block.id,
|
|
632
|
+
content: execResult.result.content,
|
|
633
|
+
is_error: execResult.result.isError
|
|
634
|
+
});
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
let sequentialTimedOut = false;
|
|
638
|
+
let indeterminateTool = null;
|
|
639
|
+
for (const block of sequential) {
|
|
640
|
+
const typedBlock = block;
|
|
641
|
+
const isMutating = !(config.tools.get(typedBlock.name)?.isReadOnly === true);
|
|
642
|
+
const remainingMs = maxDurationMs - (Date.now() - loopStartedAt);
|
|
643
|
+
let execResult;
|
|
644
|
+
if (!isMutating) {
|
|
645
|
+
try {
|
|
646
|
+
execResult = await raceDeadline(
|
|
647
|
+
executeToolBlock(typedBlock, config, context, denialState),
|
|
648
|
+
remainingMs,
|
|
649
|
+
() => abortController.abort()
|
|
650
|
+
);
|
|
651
|
+
} catch (err) {
|
|
652
|
+
if (err instanceof DeadlineExceededError) {
|
|
653
|
+
sequentialTimedOut = true;
|
|
654
|
+
break;
|
|
655
|
+
}
|
|
656
|
+
throw err;
|
|
657
|
+
}
|
|
658
|
+
} else {
|
|
659
|
+
const { pastDeadline, settlement } = await settleMutationAtDeadline(
|
|
660
|
+
executeToolBlock(typedBlock, config, context, denialState),
|
|
661
|
+
remainingMs,
|
|
662
|
+
mutationGraceMs,
|
|
663
|
+
() => abortController.abort()
|
|
664
|
+
);
|
|
665
|
+
if (settlement.status === "indeterminate") {
|
|
666
|
+
indeterminateTool = typedBlock.name;
|
|
667
|
+
const result = {
|
|
668
|
+
content: `INDETERMINATE: "${typedBlock.name}" was still running when the agent loop's wall-clock deadline (${maxDurationMs}ms) and the ${mutationGraceMs}ms mutation grace window both elapsed. It is a mutating tool, so it may or may not have applied its changes. Do NOT assume it did not happen \u2014 verify the target state before retrying.`,
|
|
669
|
+
isError: true
|
|
670
|
+
};
|
|
671
|
+
yield { type: "tool_result", name: typedBlock.name, id: typedBlock.id, result };
|
|
672
|
+
toolResults.push({
|
|
673
|
+
type: "tool_result",
|
|
674
|
+
tool_use_id: typedBlock.id,
|
|
675
|
+
content: result.content,
|
|
676
|
+
is_error: true
|
|
677
|
+
});
|
|
678
|
+
sequentialTimedOut = true;
|
|
679
|
+
break;
|
|
680
|
+
}
|
|
681
|
+
if (settlement.status === "rejected") {
|
|
682
|
+
const reason = settlement.reason;
|
|
683
|
+
throw reason instanceof Error ? reason : new Error(String(reason));
|
|
684
|
+
}
|
|
685
|
+
execResult = settlement.value;
|
|
686
|
+
if (pastDeadline) sequentialTimedOut = true;
|
|
687
|
+
}
|
|
479
688
|
denialState = execResult.denialState;
|
|
480
689
|
yield execResult.event;
|
|
481
690
|
if (execResult.permissionEvent) yield execResult.permissionEvent;
|
|
482
|
-
yield { type: "tool_result", name:
|
|
691
|
+
yield { type: "tool_result", name: typedBlock.name, id: typedBlock.id, result: execResult.result };
|
|
483
692
|
toolResults.push({
|
|
484
693
|
type: "tool_result",
|
|
485
|
-
tool_use_id:
|
|
694
|
+
tool_use_id: typedBlock.id,
|
|
486
695
|
content: execResult.result.content,
|
|
487
696
|
is_error: execResult.result.isError
|
|
488
697
|
});
|
|
698
|
+
if (sequentialTimedOut) break;
|
|
699
|
+
}
|
|
700
|
+
if (sequentialTimedOut) {
|
|
701
|
+
yield {
|
|
702
|
+
type: "error",
|
|
703
|
+
error: new Error(
|
|
704
|
+
indeterminateTool ? `Agent loop exceeded max duration (${maxDurationMs}ms) during tool execution after ${turns - 1} completed turns. The mutating tool "${indeterminateTool}" did not finish within the ${mutationGraceMs}ms grace window, so its outcome is INDETERMINATE \u2014 it may still apply changes.` : `Agent loop exceeded max duration (${maxDurationMs}ms) during tool execution after ${turns - 1} completed turns \u2014 in-flight read-only calls were abandoned; any in-flight mutation was awaited to completion and its result recorded.`
|
|
705
|
+
)
|
|
706
|
+
};
|
|
707
|
+
break;
|
|
708
|
+
}
|
|
709
|
+
messages.push({ role: "user", content: toolResults });
|
|
710
|
+
yield { type: "turn_complete", turn: turns, usage: response.usage };
|
|
711
|
+
stallState = recordTurn(stallState, turnSignature(
|
|
712
|
+
toolUseBlocks.map((b) => ({ name: b.name, input: b.input })),
|
|
713
|
+
toolResults.map((r) => ({
|
|
714
|
+
content: typeof r.content === "string" ? r.content : "",
|
|
715
|
+
isError: Boolean(r.is_error)
|
|
716
|
+
}))
|
|
717
|
+
));
|
|
718
|
+
if (isStalled(stallState)) {
|
|
719
|
+
yield { type: "error", error: new Error(stallReason(stallState, toolUseBlocks.map((b) => b.name))) };
|
|
720
|
+
break;
|
|
721
|
+
}
|
|
722
|
+
const allToolsFailed = toolUseBlocks.length > 0 && toolResults.length > 0 && toolResults.every((r) => Boolean(r.is_error));
|
|
723
|
+
if (allToolsFailed) {
|
|
724
|
+
consecutiveFailedTurns++;
|
|
725
|
+
} else {
|
|
726
|
+
consecutiveFailedTurns = 0;
|
|
727
|
+
}
|
|
728
|
+
if (consecutiveFailedTurns >= maxConsecutiveFailures) {
|
|
729
|
+
yield {
|
|
730
|
+
type: "error",
|
|
731
|
+
error: new Error(
|
|
732
|
+
`Agent loop circuit breaker tripped: ${consecutiveFailedTurns} consecutive turns with only failing tool calls \u2014 terminating to avoid an unbounded fetch loop.`
|
|
733
|
+
)
|
|
734
|
+
};
|
|
735
|
+
break;
|
|
489
736
|
}
|
|
490
737
|
}
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
denialState = execResult.denialState;
|
|
495
|
-
yield execResult.event;
|
|
496
|
-
if (execResult.permissionEvent) yield execResult.permissionEvent;
|
|
497
|
-
yield { type: "tool_result", name: typedBlock.name, id: typedBlock.id, result: execResult.result };
|
|
498
|
-
toolResults.push({
|
|
499
|
-
type: "tool_result",
|
|
500
|
-
tool_use_id: typedBlock.id,
|
|
501
|
-
content: execResult.result.content,
|
|
502
|
-
is_error: execResult.result.isError
|
|
503
|
-
});
|
|
504
|
-
}
|
|
505
|
-
messages.push({ role: "user", content: toolResults });
|
|
506
|
-
yield { type: "turn_complete", turn: turns, usage: response.usage };
|
|
507
|
-
stallState = recordTurn(stallState, turnSignature(
|
|
508
|
-
toolUseBlocks.map((b) => ({ name: b.name, input: b.input })),
|
|
509
|
-
toolResults.map((r) => ({
|
|
510
|
-
content: typeof r.content === "string" ? r.content : "",
|
|
511
|
-
isError: Boolean(r.is_error)
|
|
512
|
-
}))
|
|
513
|
-
));
|
|
514
|
-
if (isStalled(stallState)) {
|
|
515
|
-
yield { type: "error", error: new Error(stallReason(stallState, toolUseBlocks.map((b) => b.name))) };
|
|
516
|
-
break;
|
|
517
|
-
}
|
|
738
|
+
yield { type: "done", totalUsage, turns };
|
|
739
|
+
} finally {
|
|
740
|
+
disposeRunAbort();
|
|
518
741
|
}
|
|
519
|
-
yield { type: "done", totalUsage, turns };
|
|
520
742
|
}
|
|
521
743
|
async function executeToolBlock(block, config, context, denialState) {
|
|
522
744
|
const startEvent = { type: "tool_use_start", name: block.name, id: block.id };
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
deactivateBehavior
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-WMEYJT4R.js";
|
|
4
4
|
import {
|
|
5
5
|
getActiveAgent
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-55BEFF4V.js";
|
|
7
7
|
import {
|
|
8
8
|
canCoordinate,
|
|
9
9
|
getClient
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-TAMDAOCU.js";
|
|
11
11
|
|
|
12
12
|
// src/mcp/tools/deactivate-behavior.ts
|
|
13
13
|
import { z } from "zod";
|
|
@@ -24,7 +24,7 @@ function registerDeactivateBehavior(server) {
|
|
|
24
24
|
async ({ behavior_id }) => {
|
|
25
25
|
const caller = getActiveAgent();
|
|
26
26
|
try {
|
|
27
|
-
const { StewardGate } = await import("./steward-gate-
|
|
27
|
+
const { StewardGate } = await import("./steward-gate-BFCCMCSW.js");
|
|
28
28
|
const steward = new StewardGate();
|
|
29
29
|
const gateDecision = await steward.checkAuthority(caller.agentId || "unknown", "deactivate_behavior", behavior_id);
|
|
30
30
|
if (!gateDecision.allowed) {
|
|
@@ -95,6 +95,11 @@ function parsePrJson(raw) {
|
|
|
95
95
|
return [];
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
|
+
function parseSupersededByTrailer(body) {
|
|
99
|
+
if (!body) return null;
|
|
100
|
+
const m = /^\s*(?:superseded-by|closed-in-favor-of|replaced-by)\s*:\s*#(\d+)\s*$/im.exec(body);
|
|
101
|
+
return m ? parseInt(m[1], 10) : null;
|
|
102
|
+
}
|
|
98
103
|
async function mapPool(items, concurrency, fn) {
|
|
99
104
|
const results = new Array(items.length);
|
|
100
105
|
let next = 0;
|
|
@@ -123,15 +128,20 @@ var ghPrStateLookup = async (repoRoot, branchNames) => {
|
|
|
123
128
|
"--limit",
|
|
124
129
|
String(BULK_PR_LIMIT),
|
|
125
130
|
"--json",
|
|
126
|
-
"number,state,mergedAt,headRefName"
|
|
131
|
+
"number,state,mergedAt,headRefName,body"
|
|
127
132
|
],
|
|
128
133
|
repoRoot
|
|
129
134
|
);
|
|
130
135
|
} catch {
|
|
131
136
|
return null;
|
|
132
137
|
}
|
|
138
|
+
const allPrs = parsePrJson(bulkRaw);
|
|
139
|
+
const mergedByNumber = /* @__PURE__ */ new Map();
|
|
140
|
+
for (const pr of allPrs) {
|
|
141
|
+
if (typeof pr.number === "number") mergedByNumber.set(pr.number, !!pr.mergedAt);
|
|
142
|
+
}
|
|
133
143
|
const best = /* @__PURE__ */ new Map();
|
|
134
|
-
for (const pr of
|
|
144
|
+
for (const pr of allPrs) {
|
|
135
145
|
const head = pr.headRefName;
|
|
136
146
|
if (!head) continue;
|
|
137
147
|
const cur = best.get(head);
|
|
@@ -141,8 +151,15 @@ var ghPrStateLookup = async (repoRoot, branchNames) => {
|
|
|
141
151
|
const missing = [];
|
|
142
152
|
for (const name of branchNames) {
|
|
143
153
|
const pr = best.get(name);
|
|
144
|
-
if (pr)
|
|
145
|
-
|
|
154
|
+
if (pr) {
|
|
155
|
+
const state = toState(pr);
|
|
156
|
+
let supersededByMerged = false;
|
|
157
|
+
if (state === "closed_unmerged") {
|
|
158
|
+
const target = parseSupersededByTrailer(pr.body);
|
|
159
|
+
if (target !== null && mergedByNumber.get(target) === true) supersededByMerged = true;
|
|
160
|
+
}
|
|
161
|
+
result.set(name, { state, number: pr.number ?? null, supersededByMerged });
|
|
162
|
+
} else missing.push(name);
|
|
146
163
|
}
|
|
147
164
|
const targeted = missing.slice(0, MAX_TARGETED_PR_LOOKUPS);
|
|
148
165
|
const overflow = missing.slice(MAX_TARGETED_PR_LOOKUPS);
|