@askexenow/exe-os 0.9.382 → 0.9.384
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/delivery/catalog.json +1254 -0
- package/deploy/compose/.env.customer.example +5 -5
- package/deploy/compose/.env.example +3 -3
- package/deploy/compose/docker-compose.yml +1 -1
- package/deploy/compose/generate-env.ts +65 -9
- package/deploy/compose/setup.sh +205 -7
- package/deploy/compose/sso-edge/default.conf.template +45 -0
- package/deploy/compose/sso-edge/sso-redirect.conf +11 -2
- package/deploy/stack-manifests/v0.9.30-apps.json +1 -1
- package/deploy/stack-manifests/v0.9.json +254 -2
- package/dist/.dist-verified.json +3 -3
- package/dist/{active-agent-GFUUCFLD.js → active-agent-F5V4E4UL.js} +7 -7
- package/dist/{active-agent-LE6FE6SO.js → active-agent-YTBB4ZQM.js} +7 -7
- package/dist/{agent-defs-generator-EIUA3SH5.js → agent-defs-generator-7TFISIJQ.js} +6 -6
- package/dist/{agent-loop-7ZRH56EX.js → agent-loop-EZ7LDAGD.js} +1 -1
- package/dist/{agentic-ontology-67JGSP7G.js → agentic-ontology-XVTUVV7W.js} +1 -1
- package/dist/{artifact-backup-NYXAYASJ.js → artifact-backup-TF6YWQT2.js} +5 -5
- package/dist/{backfill-gate-KWJQ35YX.js → backfill-gate-FWYLCGNJ.js} +3 -3
- package/dist/{backfill-metadata-RQYG2WUJ.js → backfill-metadata-J6MXIDCW.js} +10 -10
- package/dist/{background-jobs-6VMD55PK.js → background-jobs-V3DZRFKU.js} +3 -3
- package/dist/{backup-verify-HC4YDSGN.js → backup-verify-6DVBQMDP.js} +67 -18
- package/dist/{behavior-injection-6HSXP43Q.js → behavior-injection-XDA7ZCYN.js} +21 -20
- package/dist/{behavior-promotion-SJDQ2Y3U.js → behavior-promotion-4VLQ7LXK.js} +20 -19
- package/dist/{behaviors-6ITLA2CK.js → behaviors-SCCZP7RZ.js} +19 -18
- package/dist/bin/age-ontology-load.js +3 -3
- package/dist/bin/agentic-ontology-backfill.js +12 -12
- package/dist/bin/agentic-reflection-backfill.js +13 -13
- package/dist/bin/agentic-semantic-label.js +12 -12
- package/dist/bin/backfill-conversations.js +17 -16
- package/dist/bin/backfill-responses.js +17 -16
- package/dist/bin/backfill-vectors.js +23 -22
- package/dist/bin/bulk-sync-postgres.js +28 -27
- package/dist/bin/cc-doctor.js +17 -16
- package/dist/bin/cleanup-stale-review-tasks.js +29 -28
- package/dist/bin/cli.js +35 -26
- package/dist/bin/deferred-daemon-restart.js +124 -123
- package/dist/bin/exe-actions.js +1 -1
- package/dist/bin/exe-agent-config.js +6 -6
- package/dist/bin/exe-agent.js +22 -22
- package/dist/bin/exe-assign.js +19 -18
- package/dist/bin/exe-boot.js +57 -56
- package/dist/bin/exe-call.js +7 -7
- package/dist/bin/exe-cicd.js +38 -8
- package/dist/bin/exe-cloud.js +30 -29
- package/dist/bin/exe-config-dump.js +6 -6
- package/dist/bin/exe-dispatch.js +30 -29
- package/dist/bin/exe-doctor.js +11 -11
- package/dist/bin/exe-export-behaviors.js +23 -22
- package/dist/bin/exe-forget.js +13 -13
- package/dist/bin/exe-gateway.js +47 -14
- package/dist/bin/exe-grant.js +6 -6
- package/dist/bin/exe-healthcheck.js +17 -16
- package/dist/bin/exe-heartbeat.js +41 -35
- package/dist/bin/exe-kill.js +35 -34
- package/dist/bin/exe-launch-agent.js +43 -42
- package/dist/bin/exe-mcp.js +9 -9
- package/dist/bin/exe-memory-reads.js +10 -10
- package/dist/bin/exe-new-employee.js +11 -11
- package/dist/bin/exe-os-mcp-proxy.js +9 -9
- package/dist/bin/exe-pending-messages.js +30 -29
- package/dist/bin/exe-pending-notifications.js +29 -28
- package/dist/bin/exe-pending-reviews.js +30 -29
- package/dist/bin/exe-preflight.js +1 -1
- package/dist/bin/exe-rename.js +9 -9
- package/dist/bin/exe-review.js +34 -33
- package/dist/bin/exe-search.js +12 -12
- package/dist/bin/exe-session-cleanup.js +35 -34
- package/dist/bin/exe-settings.js +29 -28
- package/dist/bin/exe-start-codex.js +30 -29
- package/dist/bin/exe-start-opencode.js +27 -26
- package/dist/bin/exe-status.js +31 -30
- package/dist/bin/exe-support.js +5 -5
- package/dist/bin/exe-team.js +7 -7
- package/dist/bin/exe-verify-running-images.js +1 -1
- package/dist/bin/exe-watchdog.js +8 -8
- package/dist/bin/generate-hook-manifest.js +7 -1
- package/dist/bin/git-sweep.js +30 -29
- package/dist/bin/graph-backfill.js +12 -12
- package/dist/bin/graph-export.js +11 -11
- package/dist/bin/hooks-cli.js +1 -1
- package/dist/bin/import-history.js +15 -15
- package/dist/bin/install.js +130 -129
- package/dist/bin/intercom-check.js +11 -7
- package/dist/bin/mcp-sessions.js +2 -2
- package/dist/bin/orchestration-metrics.js +7 -7
- package/dist/bin/postgres-agentic-reflection-backfill.js +5 -5
- package/dist/bin/postgres-agentic-semantic-backfill.js +4 -4
- package/dist/bin/reconcile-backlog.js +2 -2
- package/dist/bin/registry-proxy.js +1 -1
- package/dist/bin/repair-document-chunks.js +161 -0
- package/dist/bin/scan-tasks.js +30 -29
- package/dist/bin/setup.js +5 -5
- package/dist/bin/shard-migrate.js +11 -11
- package/dist/bin/stack-update.js +625 -33
- package/dist/bin/update.js +96 -22
- package/dist/bin/verify-stack.js +2 -2
- package/dist/bin/vps-health-gate.js +1 -1
- package/dist/{boot-generation-L55QANCX.js → boot-generation-Q7LGQ3AO.js} +6 -6
- package/dist/{boot-review-sections-AON5ZCR2.js → boot-review-sections-G5774FR5.js} +28 -27
- package/dist/{branch-hygiene-QLD77IMJ.js → branch-hygiene-44WLSOZR.js} +2 -2
- package/dist/{branding-I6KIMB7F.js → branding-KMWCY5HZ.js} +3 -3
- package/dist/build-manifest.json +1259 -1219
- package/dist/{capability-cards-WTOXY7O6.js → capability-cards-I3RHCF4F.js} +5 -5
- package/dist/{capacity-monitor-ZLG7FSWM.js → capacity-monitor-7I7GDONU.js} +30 -29
- package/dist/{catchup-brief-QHY7D7N2.js → catchup-brief-3T5PARIR.js} +39 -36
- package/dist/check-image-pullability-2AIVB4BX.js +338 -0
- package/dist/{chunk-CTCCYKOV.js → chunk-2FKU4ZEO.js} +55 -29
- package/dist/{chunk-M7O7TGGU.js → chunk-2NW4LRDU.js} +1 -1
- package/dist/{chunk-XTFM4KMW.js → chunk-2PZTMSMG.js} +6 -6
- package/dist/{chunk-UWX6MMCX.js → chunk-3B6FLNLV.js} +1 -1
- package/dist/{chunk-GPJIBLP4.js → chunk-3DAEZILW.js} +1 -1
- package/dist/{chunk-NY6SBR4O.js → chunk-3FGBBJYM.js} +15 -3
- package/dist/{chunk-C4OZVVSG.js → chunk-3OX34OC3.js} +50 -18
- package/dist/{chunk-TXTXC3QG.js → chunk-3RGTLZNO.js} +12 -12
- package/dist/{chunk-PYRO25A5.js → chunk-3SUPEE6H.js} +10 -11
- package/dist/{chunk-PPMGQFLJ.js → chunk-3XY57PKT.js} +2 -2
- package/dist/{chunk-CRHI5QTZ.js → chunk-46VSBDUW.js} +2 -2
- package/dist/{chunk-VZT66WWP.js → chunk-4AAMFWJT.js} +2 -2
- package/dist/{chunk-4GZTBLJG.js → chunk-4AR5XKCH.js} +1 -1
- package/dist/{chunk-IHXW4VUI.js → chunk-5IADGFGR.js} +1 -1
- package/dist/{chunk-GLQEJOXE.js → chunk-5MVKTNZP.js} +57 -0
- package/dist/{chunk-AVMLC2MR.js → chunk-5U2IJBFV.js} +290 -41
- package/dist/{chunk-JUKDL5MF.js → chunk-6BJCDWSM.js} +1 -1
- package/dist/{chunk-6WWNK7UX.js → chunk-6FIC57PH.js} +1 -1
- package/dist/{chunk-ASUICGPX.js → chunk-6YDY6ZTD.js} +4 -4
- package/dist/{chunk-FU5O2REK.js → chunk-72V3S44T.js} +108 -29
- package/dist/{chunk-LTIIZHNA.js → chunk-7J2ZQ4XN.js} +1 -1
- package/dist/{chunk-7RI2CNXJ.js → chunk-7OTR2OET.js} +1 -1
- package/dist/{chunk-ZVBVPX4W.js → chunk-7UHZBVP3.js} +82 -51
- package/dist/{chunk-PTY2N23C.js → chunk-AGC2V7JS.js} +26 -13
- package/dist/{chunk-44VR3PFW.js → chunk-AHESD3KW.js} +1 -1
- package/dist/{chunk-NPGV4MZ3.js → chunk-ALRHGEAJ.js} +1 -1
- package/dist/{chunk-WJC6AAJN.js → chunk-ANVHWV2X.js} +2 -2
- package/dist/{chunk-AGZSGAEN.js → chunk-APL7HUE3.js} +105 -32
- package/dist/{chunk-7UH2JWBF.js → chunk-AZSTIAVL.js} +176 -11
- package/dist/chunk-AZXMR25O.js +545 -0
- package/dist/{chunk-WPWEBZ37.js → chunk-B7AMNZTC.js} +2 -2
- package/dist/{chunk-4CF5KUWH.js → chunk-BPVFZ6Q4.js} +3 -3
- package/dist/{chunk-XTQ7R2PA.js → chunk-BV2IET6B.js} +73 -17
- package/dist/{chunk-4F5CNI65.js → chunk-C5ISP5FO.js} +2 -2
- package/dist/{chunk-NPWNXJ3U.js → chunk-CH7BUBP3.js} +7 -7
- package/dist/{chunk-X5Q66EOG.js → chunk-CHIUS5QB.js} +16 -16
- package/dist/{chunk-ZG62LIK3.js → chunk-CIPDQRFO.js} +1 -1
- package/dist/{chunk-4PYIRIU6.js → chunk-CM7N5MBY.js} +5 -5
- package/dist/{chunk-L5YDAFUH.js → chunk-CYCIX7AW.js} +5 -5
- package/dist/{chunk-76YRJKKF.js → chunk-D3LXVAIQ.js} +28 -16
- package/dist/{chunk-2GNAHBRD.js → chunk-DMUOTCDN.js} +1 -1
- package/dist/{chunk-QMUFSRQX.js → chunk-DN3ZR3UE.js} +1 -1
- package/dist/{chunk-V3WLC5TJ.js → chunk-DRTJCG6B.js} +1 -1
- package/dist/{chunk-275WHBEN.js → chunk-DYVLEMKS.js} +1 -1
- package/dist/{chunk-O34F5EP5.js → chunk-DZN7SDY2.js} +1 -1
- package/dist/{chunk-ZDIXMHY7.js → chunk-E3ZM32LF.js} +8 -8
- package/dist/{chunk-N2HXR5MB.js → chunk-E7C2WNR5.js} +4 -4
- package/dist/{chunk-VVGXWVZU.js → chunk-EGOEB42T.js} +3 -3
- package/dist/{chunk-QV5CQLQH.js → chunk-EIOGV75A.js} +2 -2
- package/dist/{chunk-ZY4IGUOS.js → chunk-ELCRJGCH.js} +3 -3
- package/dist/{chunk-5QCIWWFA.js → chunk-ELEGH4DX.js} +130 -14
- package/dist/{chunk-S7CTCPSW.js → chunk-EOTZSAQL.js} +1 -1
- package/dist/{chunk-PPLQ4ECD.js → chunk-EUGEFBGV.js} +3 -3
- package/dist/{chunk-UFNCL6MS.js → chunk-EYMFVITZ.js} +1 -1
- package/dist/{chunk-F6H7GP2O.js → chunk-F4BBMIPG.js} +3 -3
- package/dist/{chunk-FNEZ4BWT.js → chunk-FEU6QEEL.js} +1 -1
- package/dist/{chunk-JKOC2L6P.js → chunk-FHIFTSPL.js} +1 -1
- package/dist/{chunk-4RTKETV3.js → chunk-FMIYFHLE.js} +3 -3
- package/dist/{chunk-TK544DEW.js → chunk-FVLNNNH6.js} +3 -3
- package/dist/{chunk-AY2U4NZ5.js → chunk-GL47M7NY.js} +85 -17
- package/dist/{chunk-DN24VTS5.js → chunk-GSLFH4AI.js} +25 -13
- package/dist/{chunk-CHO5SNWR.js → chunk-HA63SH5W.js} +1 -1
- package/dist/{chunk-4IK2K3B3.js → chunk-HME6ITKV.js} +1 -1
- package/dist/{chunk-H2T6TFJZ.js → chunk-HU3VD4MQ.js} +2 -2
- package/dist/{chunk-ZW32RI66.js → chunk-I5XIW2BP.js} +49 -11
- package/dist/{chunk-3CL2I3RG.js → chunk-IGJMS7C5.js} +2 -2
- package/dist/{chunk-BRPO6GOH.js → chunk-JA3Y5TV6.js} +2 -2
- package/dist/{chunk-SFFXAPYK.js → chunk-JDDM6C57.js} +1 -1
- package/dist/{chunk-W4EGAQXW.js → chunk-JFJP6ATJ.js} +2 -2
- package/dist/{chunk-ENCUOZXX.js → chunk-JFTUAV4J.js} +1 -1
- package/dist/{chunk-3UOQH2DJ.js → chunk-JJTPPAZY.js} +2568 -345
- package/dist/{chunk-A6QBAUJH.js → chunk-KILR4FBR.js} +4 -4
- package/dist/{chunk-CGFGNHSP.js → chunk-KTKIFXIP.js} +1 -1
- package/dist/{chunk-NCJBPXGM.js → chunk-KXYKSLW4.js} +108 -24
- package/dist/{chunk-3MUARHPO.js → chunk-L3VUW5M4.js} +1 -1
- package/dist/{chunk-GZOG2MAX.js → chunk-L5EPGGDP.js} +1 -1
- package/dist/{chunk-T7VSKWES.js → chunk-L63V25HS.js} +6 -5
- package/dist/{chunk-R4VNGRKU.js → chunk-LFBLQE2P.js} +1 -1
- package/dist/{chunk-W5MCOZTW.js → chunk-LFUBEHFW.js} +12 -2
- package/dist/{chunk-AIBIEP4R.js → chunk-LKTN22L6.js} +61 -25
- package/dist/{chunk-3KFQCFQB.js → chunk-LR5O2XWZ.js} +5 -5
- package/dist/{chunk-VUOAPKPI.js → chunk-LSNBTGW4.js} +1 -1
- package/dist/{chunk-P5U3GAWU.js → chunk-MB47DRF5.js} +2 -2
- package/dist/{chunk-HZESME3B.js → chunk-MC4IM2CC.js} +16 -13
- package/dist/{chunk-ZKJ5S23O.js → chunk-MFAOAIUE.js} +12 -9
- package/dist/{chunk-62J64CHO.js → chunk-MKM6D7JM.js} +26 -7
- package/dist/{chunk-ZIG7VPJV.js → chunk-MMS2HBRT.js} +15 -3
- package/dist/{chunk-FHSV4BSW.js → chunk-MOANZQXF.js} +12 -4
- package/dist/{chunk-RTZZBWQC.js → chunk-MPZ2AVNS.js} +16 -5
- package/dist/{chunk-AZ6KLVDX.js → chunk-MROSARM5.js} +2 -2
- package/dist/{chunk-RV2FFCDS.js → chunk-MUAWCFW6.js} +6 -2
- package/dist/{chunk-K4ESASPL.js → chunk-MUCNYSJP.js} +1 -1
- package/dist/{chunk-5QGKMP6T.js → chunk-NF5FOSLD.js} +1 -1
- package/dist/{chunk-CKOJP7JI.js → chunk-NKEFYE4R.js} +2 -2
- package/dist/{chunk-3SXHEQ7X.js → chunk-NPXIS2RY.js} +1 -1
- package/dist/{chunk-A5USSF66.js → chunk-NVFNADTX.js} +12 -8
- package/dist/{chunk-VVUO3RJS.js → chunk-NYLJQ2M2.js} +4 -4
- package/dist/{chunk-HIVOLPLD.js → chunk-OAFENIHN.js} +1 -1
- package/dist/{chunk-PMZHZQ6K.js → chunk-OBBO6EJR.js} +1 -1
- package/dist/{chunk-SS6EMDLL.js → chunk-P2UY34XE.js} +6 -6
- package/dist/{chunk-Y4T5IUEP.js → chunk-P3QQ52QK.js} +2 -2
- package/dist/{chunk-GGEKMY6G.js → chunk-P3UX5EH4.js} +4 -4
- package/dist/{chunk-F7IRZU5G.js → chunk-P4PIZOL2.js} +3 -3
- package/dist/{chunk-GEPFKUUR.js → chunk-P4XLIPB7.js} +1 -1
- package/dist/{chunk-GPUOUUHA.js → chunk-PCV52RYM.js} +1 -1
- package/dist/{chunk-XR3773KZ.js → chunk-PL4CFSQ7.js} +1 -1
- package/dist/{chunk-LLZNPOGB.js → chunk-PLII76NJ.js} +58 -0
- package/dist/{chunk-FT5PPV2C.js → chunk-PRDDPQLC.js} +5 -5
- package/dist/{chunk-BZ546I4Q.js → chunk-PUBA5B4M.js} +24 -0
- package/dist/{chunk-2TGJ5XCV.js → chunk-PWC3C5ME.js} +4 -4
- package/dist/{chunk-A4YCLD3L.js → chunk-QFAFKEB5.js} +40 -4
- package/dist/{chunk-CL4J4757.js → chunk-QH5ZQ5SJ.js} +26 -0
- package/dist/{chunk-UJWZYK46.js → chunk-QNZ4562V.js} +1 -1
- package/dist/{chunk-IPHLUZ37.js → chunk-QPTSA4PP.js} +2 -2
- package/dist/{chunk-O3YJTHWI.js → chunk-R5E7WNAC.js} +3 -3
- package/dist/{chunk-V3M4LJRA.js → chunk-RB3J2WYQ.js} +1 -1
- package/dist/{chunk-IUCWOI4Y.js → chunk-RDWIKDMY.js} +237 -11
- package/dist/{chunk-ENN6DY4T.js → chunk-RVO5O5SR.js} +46 -21
- package/dist/{chunk-LY4AXCYJ.js → chunk-RZN2LEAK.js} +6 -6
- package/dist/{chunk-2YIB75UQ.js → chunk-S26CV7BE.js} +57 -13
- package/dist/{chunk-XC36HYP6.js → chunk-SDYWZRPN.js} +1 -1
- package/dist/{chunk-PHBU4LGO.js → chunk-SNHYZYGZ.js} +1 -1
- package/dist/{chunk-4KTTBKWQ.js → chunk-T5FEAQES.js} +1 -1
- package/dist/{chunk-XU57KFD6.js → chunk-T5SM4RXY.js} +5 -1
- package/dist/{chunk-KUV5VBAO.js → chunk-TKAU7IJ2.js} +1 -1
- package/dist/{chunk-KBR5LIWD.js → chunk-TKS5GMYA.js} +1 -1
- package/dist/{chunk-5DFE2NAF.js → chunk-TNS63ATU.js} +96 -22
- package/dist/{chunk-RFPMXR6B.js → chunk-U4GMOT4M.js} +1 -1
- package/dist/{chunk-CO5ZVE3D.js → chunk-UOPCVFVR.js} +17 -17
- package/dist/{chunk-22LNFCDF.js → chunk-UX2EO653.js} +1 -1
- package/dist/{chunk-LGC6TBA3.js → chunk-UXN4BICC.js} +2 -2
- package/dist/{chunk-7J5X4AK7.js → chunk-VF2KRROX.js} +1 -1
- package/dist/{chunk-7THUQU44.js → chunk-VF3BZOZK.js} +5 -2
- package/dist/{chunk-M2B35MUK.js → chunk-VHHX4UCP.js} +1 -1
- package/dist/{chunk-AZBJXATK.js → chunk-VJEJ7JNB.js} +1 -1
- package/dist/{chunk-4TRVALTR.js → chunk-VLBHZ6TF.js} +2 -2
- package/dist/{chunk-7BMSBACY.js → chunk-VOVFUKEB.js} +5 -5
- package/dist/{chunk-MDPGZS6C.js → chunk-VROK4X2L.js} +1 -1
- package/dist/{chunk-J6ABJDZ4.js → chunk-W3KPQE7H.js} +4 -4
- package/dist/{chunk-3Q7NEDHB.js → chunk-W6BZ4UGA.js} +48 -9
- package/dist/{chunk-IZ3IFLL2.js → chunk-XEBKIWI7.js} +14 -14
- package/dist/{chunk-UZDF6FLJ.js → chunk-XHU3KOKJ.js} +1 -1
- package/dist/{chunk-PA37MXV5.js → chunk-XSUALA32.js} +2 -2
- package/dist/{chunk-GR5WJPKF.js → chunk-XUZK23V7.js} +11 -6
- package/dist/{chunk-IDB3EZLW.js → chunk-YLB365YX.js} +148 -5
- package/dist/{chunk-JDQ7JU3A.js → chunk-YLFCH3VA.js} +24 -16
- package/dist/{chunk-ZJJL2Z23.js → chunk-YRQ26MNP.js} +4 -4
- package/dist/chunk-YRUZK2QA.js +35 -0
- package/dist/{chunk-7HLJ4BSF.js → chunk-ZAEUEDTN.js} +2 -2
- package/dist/{chunk-NY74W3S4.js → chunk-ZBPZDADW.js} +313 -43
- package/dist/{chunk-ZLPS3GR7.js → chunk-ZJQ56DZZ.js} +42 -1
- package/dist/{chunk-VMZZTFXT.js → chunk-ZOTTYCP5.js} +4 -4
- package/dist/{chunk-MP4ST7RO.js → chunk-ZPP63JSQ.js} +51 -11
- package/dist/{chunk-N4J5WHO2.js → chunk-ZT4LFTUJ.js} +1 -1
- package/dist/{cleanup-graph-garbage-GE2DYOTB.js → cleanup-graph-garbage-VQAJ2RBT.js} +11 -11
- package/dist/{cloud-sync-command-T6KF3ARK.js → cloud-sync-command-J7NEFUY7.js} +2 -2
- package/dist/{cloud-sync-db-init-RSHCCY74.js → cloud-sync-db-init-KWEMNMGA.js} +1 -1
- package/dist/{cloud-sync-shutdown-6IVCSLM5.js → cloud-sync-shutdown-P63AUTUI.js} +5 -5
- package/dist/{co-activation-AF7RCJPX.js → co-activation-7IHRPBZN.js} +5 -5
- package/dist/{co-occurrence-DMOOGBVV.js → co-occurrence-R5AG4OAU.js} +9 -9
- package/dist/{code-context-index-LIDOFKOR.js → code-context-index-WFLLZBVB.js} +10 -9
- package/dist/{code-context-watcher-4F7K2N3U.js → code-context-watcher-3QAPHO7N.js} +10 -9
- package/dist/{codex-consolidation-SH4UKFBQ.js → codex-consolidation-ONZ2AQFX.js} +2 -2
- package/dist/{consent-passphrase-WV7MZPMO.js → consent-passphrase-5ZBDJ5G7.js} +2 -2
- package/dist/{content-extractor-DJM5EUDA.js → content-extractor-ZLXC6GNR.js} +2 -2
- package/dist/{conversation-entity-extractor-4UG7BKWL.js → conversation-entity-extractor-7FRKLLBD.js} +4 -4
- package/dist/{conversation-wiki-populator-OS4C6W54.js → conversation-wiki-populator-YAOVCUGO.js} +1 -1
- package/dist/{crdt-sync-VL4KXZB7.js → crdt-sync-IFRZOEIS.js} +4 -4
- package/dist/{crm-webhook-IDBJ7X5Y.js → crm-webhook-L2S63ASV.js} +2 -2
- package/dist/{cto-delegation-gate-4FLSHSLO.js → cto-delegation-gate-3WU7OHX7.js} +29 -28
- package/dist/{daemon-auth-PNKHERLV.js → daemon-auth-OWLFYEFR.js} +3 -3
- package/dist/{daemon-orchestration-HFCB6OK4.js → daemon-orchestration-3VQYKLOR.js} +33 -32
- package/dist/{daemon-ready-BN6EZLTQ.js → daemon-ready-VZ6ZHA2C.js} +1 -1
- package/dist/{db-integrity-events-GYGANKZV.js → db-integrity-events-7NKWS5MT.js} +3 -3
- package/dist/{db-restore-events-G6NOQOVE.js → db-restore-events-XYL6CGPC.js} +2 -2
- package/dist/{destructive-data-guard-HHWUBIGS.js → destructive-data-guard-JDUJ2ULM.js} +58 -2
- package/dist/{dispatch-ack-X4DXUSKP.js → dispatch-ack-UYEAKON5.js} +2 -1
- package/dist/{doc-graph-extractor-E36PQUCS.js → doc-graph-extractor-YIR5E7OF.js} +9 -9
- package/dist/{documents-SCKKHDR7.js → documents-QEHPTYIY.js} +19 -18
- package/dist/{dreaming-Q26JBH56.js → dreaming-LNFE7DTN.js} +34 -33
- package/dist/{employee-boot-brief-XU6EI2EO.js → employee-boot-brief-ZTXDYNWM.js} +39 -38
- package/dist/{entity-boost-VNQLLR3Q.js → entity-boost-R5N6JWXD.js} +1 -1
- package/dist/{exe-drift-YZ6OIUAY.js → exe-drift-WYSJVZFO.js} +6 -6
- package/dist/{exe-export-HHRQMLSS.js → exe-export-GOLNAEAV.js} +20 -19
- package/dist/{exe-import-5XR4NQAB.js → exe-import-U4BSI6OH.js} +20 -19
- package/dist/{exe-key-5XOFVP3I.js → exe-key-V42G3NGO.js} +152 -130
- package/dist/{exe-org-TPAX4AAK.js → exe-org-U4GLQ6OP.js} +27 -27
- package/dist/{exe-snapshot-GIRP3XCJ.js → exe-snapshot-U7ONBYNY.js} +38 -37
- package/dist/{fast-db-init-MGY6VCLG.js → fast-db-init-W3NGKAEU.js} +1 -1
- package/dist/{founder-context-WD72OL2P.js → founder-context-ZSIBRVDM.js} +4 -4
- package/dist/{founder-monitor-envelope-XGYMHT4W.js → founder-monitor-envelope-L3IWZLFY.js} +7 -7
- package/dist/{fts-integrity-PLAL6NMG.js → fts-integrity-PHCKKOBC.js} +3 -3
- package/dist/gateway/index.js +23 -22
- package/dist/{gateway-client-VO3BRLV5.js → gateway-client-DJFCVIPT.js} +1 -1
- package/dist/{git-staleness-KGZABPP3.js → git-staleness-OF24QXFZ.js} +5 -5
- package/dist/{global-procedures-KOU6A5E5.js → global-procedures-WSIOWO43.js} +6 -6
- package/dist/{graph-auto-extract-OZNRDAHE.js → graph-auto-extract-IEVVN3L3.js} +9 -9
- package/dist/{graph-query-36K6VXFF.js → graph-query-JDZWAVCU.js} +1 -1
- package/dist/{graph-rag-TZLH3CTQ.js → graph-rag-BKAD2XQA.js} +4 -4
- package/dist/{hook-integrity-BWFFISJV.js → hook-integrity-TPWDGX2M.js} +3 -1
- package/dist/{hook-prefetch-MFUJRAIM.js → hook-prefetch-FD6VGJJA.js} +29 -28
- package/dist/hooks/bug-report-worker.js +34 -33
- package/dist/hooks/codex-stop-task-finalizer.js +36 -35
- package/dist/hooks/commit-complete.js +40 -36
- package/dist/hooks/error-recall.js +15 -15
- package/dist/hooks/exe-heartbeat-hook.js +8 -8
- package/dist/hooks/ingest-worker.js +21 -20
- package/dist/hooks/ingest.js +23 -23
- package/dist/hooks/instructions-loaded.js +10 -10
- package/dist/hooks/manifest.json +20 -20
- package/dist/hooks/notification.js +9 -9
- package/dist/hooks/post-compact.js +8 -8
- package/dist/hooks/post-tool-combined.js +15 -15
- package/dist/hooks/pre-compact.js +33 -32
- package/dist/hooks/pre-tool-use.js +2 -2
- package/dist/hooks/prompt-submit.js +52 -51
- package/dist/hooks/session-end.js +38 -37
- package/dist/hooks/session-start.js +25 -22
- package/dist/hooks/stop.js +40 -39
- package/dist/hooks/subagent-stop.js +36 -35
- package/dist/hooks/summary-worker.js +41 -40
- package/dist/index.js +43 -42
- package/dist/{inrun-inbox-DRKVDPLY.js → inrun-inbox-RGNFFGMU.js} +5 -0
- package/dist/{installer-RM4ASY7U.js → installer-NMOBSEZ2.js} +11 -11
- package/dist/{installer-IESPHXVH.js → installer-OTI5SA43.js} +11 -11
- package/dist/{installer-SQZRVD36.js → installer-SRJGE4GU.js} +11 -11
- package/dist/{intercom-queue-DGLAC224.js → intercom-queue-4FFXCBHO.js} +28 -27
- package/dist/{key-backup-status-LQPINQ3W.js → key-backup-status-6U7D5GOD.js} +2 -2
- package/dist/lib/agent-config.js +3 -3
- package/dist/lib/cloud-sync.js +28 -27
- package/dist/lib/config.js +4 -2
- package/dist/lib/consolidation.js +14 -12
- package/dist/lib/crypto.js +5 -3
- package/dist/lib/database.js +5 -5
- package/dist/lib/db-backup.js +11 -3
- package/dist/lib/db-daemon-client.js +11 -10
- package/dist/lib/db-write-worker.js +4 -4
- package/dist/lib/db.js +5 -5
- package/dist/lib/delivery-catalog.js +431 -0
- package/dist/lib/delivery-schemas.js +62 -0
- package/dist/lib/delivery-truth.js +1 -1
- package/dist/lib/device-registry.js +3 -3
- package/dist/lib/embed-worker.js +2 -2
- package/dist/lib/embedder.js +10 -9
- package/dist/lib/employee-templates.js +7 -7
- package/dist/lib/employees.js +5 -5
- package/dist/lib/exe-daemon-client.js +9 -8
- package/dist/lib/exe-daemon.js +186 -117
- package/dist/lib/hybrid-search.js +12 -12
- package/dist/lib/identity.js +5 -5
- package/dist/lib/keychain.js +13 -1
- package/dist/lib/license.js +8 -4
- package/dist/lib/messaging.js +39 -30
- package/dist/lib/post-tool-memory.js +9 -9
- package/dist/lib/registry-proxy.js +9 -1
- package/dist/lib/reminders.js +6 -6
- package/dist/lib/schedules.js +11 -11
- package/dist/lib/session-registry.js +7 -7
- package/dist/lib/skill-learning.js +20 -19
- package/dist/lib/status-brief.js +5 -4
- package/dist/lib/store.js +10 -10
- package/dist/lib/task-router.js +6 -6
- package/dist/lib/tasks.js +30 -29
- package/dist/lib/tmux-routing.js +28 -27
- package/dist/lib/tmux-status.js +3 -1
- package/dist/lib/token-spend.js +6 -6
- package/dist/lib/ws-client.js +1 -1
- package/dist/{license-gate-E6GTRYBA.js → license-gate-R4JWTWM4.js} +5 -5
- package/dist/{license-recheck-RBAO6Z2H.js → license-recheck-3MBJ4IJX.js} +1 -1
- package/dist/{license-sync-ZCZ2LIHK.js → license-sync-BVSG3WMW.js} +4 -4
- package/dist/local-secret-inventory-JWNBHZZ4.js +20 -0
- package/dist/mailbox-inbox-MTAT4MXX.js +13 -0
- package/dist/{mailbox-outbox-DNDDP2HW.js → mailbox-outbox-OY4IU6S4.js} +2 -1
- package/dist/mcp/register-tools.js +121 -120
- package/dist/mcp/server.js +123 -122
- package/dist/mcp/tools/complete-reminder.js +7 -7
- package/dist/mcp/tools/create-reminder.js +7 -7
- package/dist/mcp/tools/create-task.js +35 -32
- package/dist/mcp/tools/deactivate-behavior.js +22 -21
- package/dist/mcp/tools/list-reminders.js +7 -7
- package/dist/mcp/tools/list-tasks.js +33 -32
- package/dist/mcp/tools/send-message.js +32 -31
- package/dist/mcp/tools/update-task.js +31 -30
- package/dist/{mcp-child-registry-DVHYAHPW.js → mcp-child-registry-TIZERM7O.js} +5 -5
- package/dist/{mcp-health-B5EKRCZG.js → mcp-health-4ZHU67LM.js} +9 -3
- package/dist/{mcp-http-config-ME67QDOF.js → mcp-http-config-VUMSFWFH.js} +12 -12
- package/dist/{mcp-session-identity-DNG4ULAE.js → mcp-session-identity-DZHWEJRV.js} +28 -27
- package/dist/{memory-cards-WCISXY62.js → memory-cards-JVXTMSAT.js} +10 -10
- package/dist/{memory-graph-extractor-GXIK4QUF.js → memory-graph-extractor-PPBJMYFJ.js} +10 -10
- package/dist/{memory-poisoning-defense-25LZ5FJI.js → memory-poisoning-defense-K5Q74XQ4.js} +5 -5
- package/dist/{memory-pressure-watchdog-XGXI7WGE.js → memory-pressure-watchdog-YMJH5CSA.js} +29 -28
- package/dist/{memory-queue-YF7IDSFY.js → memory-queue-2MA67TAA.js} +3 -3
- package/dist/{memory-queue-client-QC2OTMJB.js → memory-queue-client-4G7HVRSX.js} +11 -10
- package/dist/{memory-reflection-GFGT44NT.js → memory-reflection-7BZWIHRE.js} +10 -10
- package/dist/{monitor-grants-Z2SEFE6E.js → monitor-grants-Q7X3MYQP.js} +6 -6
- package/dist/{monitor-identity-AEMHCVHV.js → monitor-identity-ZQB4IXEE.js} +2 -2
- package/dist/{notification-ledger-ETQBGRP7.js → notification-ledger-XRAXL5OI.js} +32 -29
- package/dist/{notifications-LPRCFJYY.js → notifications-JE3PX55X.js} +28 -27
- package/dist/{orchestration-events-T2GXV2NG.js → orchestration-events-JCQ5F5IJ.js} +6 -6
- package/dist/{orchestration-phase-T2WD45UA.js → orchestration-phase-QKTGQ2YT.js} +3 -3
- package/dist/{orchestrator-HY2IB3NA.js → orchestrator-X65INDTR.js} +30 -29
- package/dist/{org-brief-session-UWFCFEEB.js → org-brief-session-3PQ22UIX.js} +19 -18
- package/dist/{org-consent-policy-XXMST37J.js → org-consent-policy-VGELJ7K7.js} +7 -6
- package/dist/{org-join-72QKM7JR.js → org-join-6TO5ZYUZ.js} +12 -12
- package/dist/{org-key-admin-YCIAYP7V.js → org-key-admin-XHYVRRAZ.js} +12 -12
- package/dist/{org-key-pin-F7BQPI5P.js → org-key-pin-TTTYGTQL.js} +6 -6
- package/dist/{org-membership-JQSU4Z5P.js → org-membership-Y7T2BS57.js} +7 -7
- package/dist/{org-partner-config-PVJ45SLC.js → org-partner-config-OP4NEUNF.js} +10 -10
- package/dist/{org-partner-runtime-U4CTLWLC.js → org-partner-runtime-YNVUNT2R.js} +20 -19
- package/dist/{org-row-visibility-WUX4N3FX.js → org-row-visibility-JBBXNYXD.js} +1 -1
- package/dist/{pipeline-router-2RMBCBRM.js → pipeline-router-EIBB7QNG.js} +6 -6
- package/dist/{plan-limits-Z47XYEJR.js → plan-limits-MEWXYLEN.js} +8 -8
- package/dist/{postinstall-failure-O6TSSNJB.js → postinstall-failure-VETYYWEZ.js} +3 -3
- package/dist/{pre-tool-use-impl-JPE6XMRJ.js → pre-tool-use-impl-C6KJY22W.js} +60 -49
- package/dist/{project-boot-UFQDAFU5.js → project-boot-VEYFCCSL.js} +2 -2
- package/dist/{project-name-V4IREGHO.js → project-name-UYORSNGE.js} +6 -6
- package/dist/{projection-worker-HAD6H3VJ.js → projection-worker-WYFDWS57.js} +5 -5
- package/dist/{prospective-memory-KIF4JLFF.js → prospective-memory-E6XBQFJA.js} +5 -5
- package/dist/{push-notifications-GDKRTYXH.js → push-notifications-M7YU63FY.js} +29 -28
- package/dist/{reproject-worktree-memories-SG4BZJ3Z.js → reproject-worktree-memories-B5XMGJSD.js} +28 -27
- package/dist/{reranker-G2AZ67JP.js → reranker-SRA4BR7N.js} +3 -3
- package/dist/{retrieval-health-GBJRXTBZ.js → retrieval-health-P2JPZUPV.js} +4 -4
- package/dist/{review-polling-VUZPAAGT.js → review-polling-KQPN7IQE.js} +29 -28
- package/dist/runtime/index.js +37 -36
- package/dist/{session-events-BI6NIFIR.js → session-events-6LDDKKY3.js} +29 -28
- package/dist/{session-kill-telemetry-HPBDOPHT.js → session-kill-telemetry-5DSRGWCL.js} +29 -28
- package/dist/{session-mcp-config-WFZAH6R5.js → session-mcp-config-F7RCERUG.js} +3 -3
- package/dist/{session-scope-UB3HA5E7.js → session-scope-XG5R3P3D.js} +28 -27
- package/dist/{setup-wizard-6XULOT3L.js → setup-wizard-7QFLZIKT.js} +5 -5
- package/dist/{shard-manager-DYEJ6ETD.js → shard-manager-HHHHV2KZ.js} +3 -3
- package/dist/{skill-refinement-MKBQIWZ6.js → skill-refinement-I5RMAHSC.js} +6 -6
- package/dist/{stack-generate-manifest-7ODQ6W2O.js → stack-generate-manifest-AKMZ3AUX.js} +246 -13
- package/dist/stack-init-5VKL5PL5.js +136 -0
- package/dist/{stack-promote-3UKJBJSP.js → stack-promote-34CE2HHF.js} +7 -6
- package/dist/{stack-release-5CVXMJM5.js → stack-release-5PGWV5D4.js} +123 -12
- package/dist/{stack-update-Z53KG2P5.js → stack-update-ZQQ5YYPJ.js} +20 -5
- package/dist/{steward-gate-OKUYYIX6.js → steward-gate-AQJ6KT2C.js} +6 -6
- package/dist/{subagent-brief-injection-T2CVQLAS.js → subagent-brief-injection-3GU7YAWY.js} +50 -42
- package/dist/{subagent-spawn-ledger-E6U3OY6Z.js → subagent-spawn-ledger-52I66CLW.js} +3 -3
- package/dist/{supervisor-handoff-SGLEPOCY.js → supervisor-handoff-BWJW6CKZ.js} +4 -4
- package/dist/{support-inbox-WJIDCKJC.js → support-inbox-NY5TB3FN.js} +12 -12
- package/dist/{support-outbox-G2NG2U5K.js → support-outbox-KNI3FR3G.js} +3 -2
- package/dist/{task-enforcement-JL5ADPS6.js → task-enforcement-CAA6D2MH.js} +29 -28
- package/dist/{task-request-inbox-54BRRFHZ.js → task-request-inbox-QBZVU66E.js} +9 -6
- package/dist/{task-scope-OBPZBID5.js → task-scope-NHXB4ZRN.js} +32 -27
- package/dist/{tasks-crud-YBCPT7TY.js → tasks-crud-JHSWL5NM.js} +28 -27
- package/dist/{tasks-notify-CEEQSDJF.js → tasks-notify-7PBE4U7T.js} +29 -28
- package/dist/{tasks-review-JIEI656P.js → tasks-review-PPPVEE62.js} +28 -27
- package/dist/{telemetry-upload-ZZSEZR2U.js → telemetry-upload-YU2VRNHX.js} +10 -10
- package/dist/{token-budget-AUFMEMQ2.js → token-budget-QCMWKG3K.js} +6 -6
- package/dist/{tool-capability-index-6HLZU437.js → tool-capability-index-7AWQAJRP.js} +1 -1
- package/dist/{tool-gates-VXITVRFQ.js → tool-gates-5Q3RSQEG.js} +1 -1
- package/dist/{tool-gates-JWVSAYTW.js → tool-gates-QD26D2NE.js} +1 -1
- package/dist/{tool-telemetry-RHSEK2TO.js → tool-telemetry-LTOIC64I.js} +1 -1
- package/dist/tui/App.js +43 -42
- package/dist/{tui-data-PBZNN5YB.js → tui-data-NDBXD6U7.js} +32 -31
- package/dist/{update-support-V3ZCJR6L.js → update-support-BMJM4NG7.js} +27 -26
- package/dist/{whatsapp-NAM2CRVQ.js → whatsapp-QQLDAHUX.js} +2 -2
- package/dist/{wiki-acl-NUBAPLCD.js → wiki-acl-W6WDCVCP.js} +1 -1
- package/dist/{work-claims-Q2NU6JON.js → work-claims-6DM32MGO.js} +6 -6
- package/dist/{work-state-heartbeat-HAQRV3RK.js → work-state-heartbeat-HG7D4AWJ.js} +1 -1
- package/dist/{worker-gate-NUUSQMBT.js → worker-gate-FTMW7GBB.js} +3 -3
- package/dist/{workflow-engine-GEWPU5YR.js → workflow-engine-ZWC6CCXE.js} +2 -2
- package/dist/{worktree-C7LFMRKW.js → worktree-EMQCPGFE.js} +7 -7
- package/dist/{worktree-ownership-guard-4LKMW6PW.js → worktree-ownership-guard-O6JQF2CL.js} +2 -2
- package/dist/{worktree-sweep-SYF62ANH.js → worktree-sweep-XVUJZBXV.js} +8 -8
- package/package.json +23 -7
- package/release-notes.json +39 -12
- package/stack.release.json +4 -4
- package/dist/mailbox-inbox-XE72D3AX.js +0 -10
- /package/dist/{chunk-QIEYJ4KZ.js → chunk-2KY7WZZF.js} +0 -0
- /package/dist/{chunk-T3667X2B.js → chunk-2Q2CD6CD.js} +0 -0
- /package/dist/{chunk-JZJZYKMW.js → chunk-AJK2PVQW.js} +0 -0
- /package/dist/{chunk-ZEGEFBZV.js → chunk-AWWDKF22.js} +0 -0
- /package/dist/{chunk-QNTKRGJ6.js → chunk-GIRD7O5X.js} +0 -0
- /package/dist/{chunk-FWA4MYTA.js → chunk-JRIH6I7D.js} +0 -0
- /package/dist/{chunk-C7H2D7LX.js → chunk-M4XY4JRK.js} +0 -0
- /package/dist/{chunk-Q3DN5J6F.js → chunk-P2VVMGMI.js} +0 -0
- /package/dist/{chunk-BRAIWGMF.js → chunk-Q46NYJ77.js} +0 -0
- /package/dist/{chunk-3LQ2N4H7.js → chunk-U2D6PJ5T.js} +0 -0
- /package/dist/{chunk-3O6OGZL3.js → chunk-XDVOGDBC.js} +0 -0
- /package/dist/{core-memory-UNCAPGD4.js → core-memory-O6D5UC3T.js} +0 -0
- /package/dist/{hook-tamper-log-Z4PWC7N4.js → hook-tamper-log-ARGWCXKJ.js} +0 -0
- /package/dist/{memory-isolation-ALPJWLR5.js → memory-isolation-EBFFC6HF.js} +0 -0
- /package/dist/{oauth-server-AC2KB7NB.js → oauth-server-ZKBUHDFI.js} +0 -0
- /package/dist/{webhook-pipe-W2FVXY7M.js → webhook-pipe-PXH5MBRM.js} +0 -0
- /package/dist/{wiki-client-W65IOSWF.js → wiki-client-DD2NVWK2.js} +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveExeSession
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-UJWZYK46.js";
|
|
3
|
+
} from "./chunk-7UHZBVP3.js";
|
|
4
|
+
import "./chunk-6BJCDWSM.js";
|
|
5
|
+
import "./chunk-JDDM6C57.js";
|
|
7
6
|
import "./chunk-ZKGWHT56.js";
|
|
7
|
+
import "./chunk-QNZ4562V.js";
|
|
8
8
|
import "./chunk-WT4RI36X.js";
|
|
9
9
|
import "./chunk-E23LNUWJ.js";
|
|
10
10
|
import "./chunk-TDF2XKLK.js";
|
|
@@ -12,54 +12,55 @@ import "./chunk-EIKATSE4.js";
|
|
|
12
12
|
import "./chunk-MJCSEIFI.js";
|
|
13
13
|
import {
|
|
14
14
|
listSessions
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-ALRHGEAJ.js";
|
|
16
|
+
import "./chunk-PUBA5B4M.js";
|
|
16
17
|
import "./chunk-VI4ATC6I.js";
|
|
17
18
|
import "./chunk-A27Q27CT.js";
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
22
|
-
import "./chunk-GZOG2MAX.js";
|
|
19
|
+
import "./chunk-LSNBTGW4.js";
|
|
20
|
+
import "./chunk-T5SM4RXY.js";
|
|
21
|
+
import "./chunk-VJEJ7JNB.js";
|
|
22
|
+
import "./chunk-L5EPGGDP.js";
|
|
23
23
|
import "./chunk-AM7S2TY6.js";
|
|
24
|
-
import "./chunk-
|
|
24
|
+
import "./chunk-BPVFZ6Q4.js";
|
|
25
25
|
import "./chunk-CVYC6DUW.js";
|
|
26
|
-
import "./chunk-
|
|
27
|
-
import "./chunk-
|
|
28
|
-
import "./chunk-
|
|
29
|
-
import "./chunk-
|
|
26
|
+
import "./chunk-ANVHWV2X.js";
|
|
27
|
+
import "./chunk-HME6ITKV.js";
|
|
28
|
+
import "./chunk-MFAOAIUE.js";
|
|
29
|
+
import "./chunk-PCV52RYM.js";
|
|
30
30
|
import "./chunk-BTSWFMEH.js";
|
|
31
|
-
import "./chunk-
|
|
32
|
-
import "./chunk-IMYGYIAI.js";
|
|
31
|
+
import "./chunk-CIPDQRFO.js";
|
|
33
32
|
import "./chunk-NLEW62VC.js";
|
|
34
|
-
import "./chunk-
|
|
35
|
-
import "./chunk-
|
|
33
|
+
import "./chunk-IMYGYIAI.js";
|
|
34
|
+
import "./chunk-3DAEZILW.js";
|
|
35
|
+
import "./chunk-DRTJCG6B.js";
|
|
36
36
|
import {
|
|
37
37
|
getProjectName
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-UX2EO653.js";
|
|
39
39
|
import "./chunk-HYZV25LY.js";
|
|
40
40
|
import "./chunk-GJV3WDWM.js";
|
|
41
41
|
import "./chunk-MP2AFCGL.js";
|
|
42
|
+
import "./chunk-YRUZK2QA.js";
|
|
42
43
|
import {
|
|
43
44
|
isCoordinatorName
|
|
44
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-GL47M7NY.js";
|
|
45
46
|
import "./chunk-BBMTVAE3.js";
|
|
46
47
|
import "./chunk-TKDITWDN.js";
|
|
47
48
|
import "./chunk-5YEUPUV4.js";
|
|
48
|
-
import "./chunk-
|
|
49
|
+
import "./chunk-72V3S44T.js";
|
|
49
50
|
import "./chunk-YYB5PMTK.js";
|
|
50
51
|
import "./chunk-L5CGXEZC.js";
|
|
51
|
-
import "./chunk-
|
|
52
|
+
import "./chunk-QH5ZQ5SJ.js";
|
|
52
53
|
import "./chunk-ZQEJ4IX2.js";
|
|
53
54
|
import "./chunk-FXU7JOXK.js";
|
|
54
55
|
import "./chunk-WNBZJSQT.js";
|
|
55
|
-
import "./chunk-
|
|
56
|
+
import "./chunk-TNS63ATU.js";
|
|
56
57
|
import "./chunk-A7XLR3K7.js";
|
|
57
|
-
import "./chunk-
|
|
58
|
+
import "./chunk-DZN7SDY2.js";
|
|
58
59
|
import "./chunk-A7JYF4RG.js";
|
|
59
60
|
import "./chunk-ARX6TAGN.js";
|
|
60
|
-
import "./chunk-
|
|
61
|
-
import "./chunk-HSGBZSCA.js";
|
|
61
|
+
import "./chunk-MMS2HBRT.js";
|
|
62
62
|
import "./chunk-RH4AH3YB.js";
|
|
63
|
+
import "./chunk-HSGBZSCA.js";
|
|
63
64
|
import "./chunk-JKKZGDLP.js";
|
|
64
65
|
import "./chunk-MLKGABMK.js";
|
|
65
66
|
|
|
@@ -10,16 +10,16 @@ import {
|
|
|
10
10
|
runSetupWizard,
|
|
11
11
|
validateModel,
|
|
12
12
|
wslKeyCustodyLines
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-D3LXVAIQ.js";
|
|
14
14
|
import "./chunk-J6KMGEJW.js";
|
|
15
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-7OTR2OET.js";
|
|
16
16
|
import "./chunk-SO7KTH3Q.js";
|
|
17
17
|
import "./chunk-WNBZJSQT.js";
|
|
18
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-5U2IJBFV.js";
|
|
19
19
|
import "./chunk-ARX6TAGN.js";
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-HSGBZSCA.js";
|
|
20
|
+
import "./chunk-MMS2HBRT.js";
|
|
22
21
|
import "./chunk-RH4AH3YB.js";
|
|
22
|
+
import "./chunk-HSGBZSCA.js";
|
|
23
23
|
import "./chunk-JKKZGDLP.js";
|
|
24
24
|
import "./chunk-MLKGABMK.js";
|
|
25
25
|
export {
|
|
@@ -12,12 +12,12 @@ import {
|
|
|
12
12
|
isShardingEnabled,
|
|
13
13
|
listShards,
|
|
14
14
|
shardExists
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-MUAWCFW6.js";
|
|
16
16
|
import "./chunk-TKDITWDN.js";
|
|
17
17
|
import "./chunk-5YEUPUV4.js";
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-HSGBZSCA.js";
|
|
18
|
+
import "./chunk-MMS2HBRT.js";
|
|
20
19
|
import "./chunk-RH4AH3YB.js";
|
|
20
|
+
import "./chunk-HSGBZSCA.js";
|
|
21
21
|
import "./chunk-JKKZGDLP.js";
|
|
22
22
|
import "./chunk-MLKGABMK.js";
|
|
23
23
|
export {
|
|
@@ -2,20 +2,20 @@ import {
|
|
|
2
2
|
incrementSkillSuccess,
|
|
3
3
|
incrementSkillUsage,
|
|
4
4
|
runSkillRefinement
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-VJEJ7JNB.js";
|
|
6
|
+
import "./chunk-GL47M7NY.js";
|
|
7
7
|
import "./chunk-BBMTVAE3.js";
|
|
8
8
|
import "./chunk-TKDITWDN.js";
|
|
9
9
|
import "./chunk-5YEUPUV4.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-72V3S44T.js";
|
|
11
11
|
import "./chunk-YYB5PMTK.js";
|
|
12
12
|
import "./chunk-L5CGXEZC.js";
|
|
13
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-QH5ZQ5SJ.js";
|
|
14
14
|
import "./chunk-ZQEJ4IX2.js";
|
|
15
15
|
import "./chunk-FXU7JOXK.js";
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-HSGBZSCA.js";
|
|
16
|
+
import "./chunk-MMS2HBRT.js";
|
|
18
17
|
import "./chunk-RH4AH3YB.js";
|
|
18
|
+
import "./chunk-HSGBZSCA.js";
|
|
19
19
|
import "./chunk-JKKZGDLP.js";
|
|
20
20
|
import "./chunk-MLKGABMK.js";
|
|
21
21
|
export {
|
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
writeSignedStackManifest
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-MOANZQXF.js";
|
|
5
|
+
import "./chunk-ZBPZDADW.js";
|
|
6
6
|
import "./chunk-EC5H53YD.js";
|
|
7
7
|
import "./chunk-C5HUMAA7.js";
|
|
8
8
|
import "./chunk-L25OAFOU.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-LFUBEHFW.js";
|
|
10
|
+
import "./chunk-TNS63ATU.js";
|
|
10
11
|
import "./chunk-A7XLR3K7.js";
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-HSGBZSCA.js";
|
|
12
|
+
import "./chunk-DZN7SDY2.js";
|
|
13
|
+
import "./chunk-MMS2HBRT.js";
|
|
14
14
|
import "./chunk-RH4AH3YB.js";
|
|
15
15
|
import {
|
|
16
16
|
isMainModule
|
|
17
17
|
} from "./chunk-6Y4B3QF6.js";
|
|
18
|
+
import "./chunk-HSGBZSCA.js";
|
|
18
19
|
import "./chunk-JKKZGDLP.js";
|
|
19
20
|
import "./chunk-MLKGABMK.js";
|
|
20
21
|
|
|
@@ -33,6 +34,12 @@ var STACK_SERVICE_SPECS = Object.freeze([
|
|
|
33
34
|
origin: "askexe-release",
|
|
34
35
|
deployment: "stack",
|
|
35
36
|
ghRepo: "AskExe/exe-os",
|
|
37
|
+
// Confirmed via `gh api repos/AskExe/exe-os/actions/workflows` (2026-09-08):
|
|
38
|
+
// id 274190265, path .github/workflows/release-stack-image.yml. exe-os's
|
|
39
|
+
// repo ALSO runs "Release dashboard image" (id 338670900) at the same tag
|
|
40
|
+
// commit during a stack release — the exact sibling-workflow ambiguity
|
|
41
|
+
// this field exists to eliminate for dashboard below.
|
|
42
|
+
releaseWorkflowFile: "release-stack-image.yml",
|
|
36
43
|
imageName: "update.askexe.com/askexe/exe-os",
|
|
37
44
|
sourceImageName: "ghcr.io/askexe/exe-os",
|
|
38
45
|
// The version tag and the commit tag live in DIFFERENT ghcr repositories:
|
|
@@ -51,6 +58,8 @@ var STACK_SERVICE_SPECS = Object.freeze([
|
|
|
51
58
|
origin: "askexe-release",
|
|
52
59
|
deployment: "stack",
|
|
53
60
|
ghRepo: "AskExe/exe-crm",
|
|
61
|
+
// Confirmed via `gh api repos/AskExe/exe-crm/actions/workflows` (2026-09-08).
|
|
62
|
+
releaseWorkflowFile: "release-stack-image.yml",
|
|
54
63
|
imageName: "update.askexe.com/askexe/exe-crm",
|
|
55
64
|
sourceImageName: "ghcr.io/askexe/exe-crm",
|
|
56
65
|
env: "CRM_IMAGE_TAG",
|
|
@@ -65,6 +74,8 @@ var STACK_SERVICE_SPECS = Object.freeze([
|
|
|
65
74
|
origin: "askexe-release",
|
|
66
75
|
deployment: "stack",
|
|
67
76
|
ghRepo: "AskExe/exe-wiki",
|
|
77
|
+
// Confirmed via `gh api repos/AskExe/exe-wiki/actions/workflows` (2026-09-08).
|
|
78
|
+
releaseWorkflowFile: "release-stack-image.yml",
|
|
68
79
|
imageName: "update.askexe.com/askexe/exe-wiki",
|
|
69
80
|
sourceImageName: "ghcr.io/askexe/exe-wiki",
|
|
70
81
|
env: "WIKI_IMAGE_TAG",
|
|
@@ -77,6 +88,11 @@ var STACK_SERVICE_SPECS = Object.freeze([
|
|
|
77
88
|
origin: "askexe-release",
|
|
78
89
|
deployment: "stack",
|
|
79
90
|
ghRepo: "AskExe/exe-gateway",
|
|
91
|
+
// Confirmed via `gh api repos/AskExe/exe-gateway/actions/workflows`
|
|
92
|
+
// (2026-09-08): the producer here is named "Release image", NOT "Release
|
|
93
|
+
// stack image" like its siblings — exactly why this is a file, not a name
|
|
94
|
+
// pattern shared across the roster.
|
|
95
|
+
releaseWorkflowFile: "release-image.yml",
|
|
80
96
|
imageName: "update.askexe.com/askexe/exe-gateway",
|
|
81
97
|
sourceImageName: "ghcr.io/askexe/exe-gateway",
|
|
82
98
|
env: "GATEWAY_IMAGE_TAG",
|
|
@@ -96,6 +112,12 @@ var STACK_SERVICE_SPECS = Object.freeze([
|
|
|
96
112
|
// AUTH_REGISTRY constant). Probing ghcr.io for its `sha-*`/version tags
|
|
97
113
|
// resolves nothing, so provenance is read from — and the pin emitted for —
|
|
98
114
|
// the one registry the artifact actually exists in.
|
|
115
|
+
// Confirmed via `gh api repos/AskExe/exe-auth/actions/workflows`
|
|
116
|
+
// (2026-09-08): exe-auth has no dedicated release workflow at all — it
|
|
117
|
+
// publishes from its `ci.yml` ("CI") on a `push: tags: ['v*']` trigger.
|
|
118
|
+
// A name pattern would NEVER have matched this producer even before this
|
|
119
|
+
// fix; scoping by file is what makes it checkable at all.
|
|
120
|
+
releaseWorkflowFile: "ci.yml",
|
|
99
121
|
imageName: "update.askexe.com/askexe/exe-auth",
|
|
100
122
|
env: "AUTH_IMAGE_TAG",
|
|
101
123
|
healthUrl: "http://127.0.0.1:3300/api/health",
|
|
@@ -108,6 +130,13 @@ var STACK_SERVICE_SPECS = Object.freeze([
|
|
|
108
130
|
origin: "askexe-release",
|
|
109
131
|
deployment: "stack",
|
|
110
132
|
ghRepo: "AskExe/exe-erp",
|
|
133
|
+
// Confirmed via `gh api repos/AskExe/exe-erp/actions/workflows`
|
|
134
|
+
// (2026-09-08). NOTE (bug e49ac42b adversarial review): this workflow's
|
|
135
|
+
// build-push-action step pushes BOTH the version tag and `sha-<sha>` in
|
|
136
|
+
// one step, then a LATER "Enforce digest pins (fail closed)" step can
|
|
137
|
+
// still fail the run — so `digestByTag` resolving must never be read as
|
|
138
|
+
// "this run's gates passed" (see Guard 5b).
|
|
139
|
+
releaseWorkflowFile: "release-stack-image.yml",
|
|
111
140
|
imageName: "update.askexe.com/askexe/exe-erp",
|
|
112
141
|
sourceImageName: "ghcr.io/askexe/exe-erp",
|
|
113
142
|
env: "ERP_IMAGE_TAG",
|
|
@@ -123,6 +152,13 @@ var STACK_SERVICE_SPECS = Object.freeze([
|
|
|
123
152
|
origin: "askexe-release",
|
|
124
153
|
deployment: "stack",
|
|
125
154
|
ghRepo: "AskExe/exe-monitor",
|
|
155
|
+
// Confirmed via `gh api repos/AskExe/exe-monitor/actions/workflows`
|
|
156
|
+
// (2026-09-08). NOTE (bug e49ac42b adversarial review): this workflow
|
|
157
|
+
// triggers on `push` tags AND `workflow_run` (CI completion) AND
|
|
158
|
+
// `schedule` AND `workflow_dispatch` — querying only `event=push` would
|
|
159
|
+
// exclude the very trigger paths PR #42 deliberately publishes through.
|
|
160
|
+
// Guard queries this workflow file with no `event=` filter at all.
|
|
161
|
+
releaseWorkflowFile: "release-stack-images.yml",
|
|
126
162
|
imageName: "update.askexe.com/askexe/exe-monitor-hub",
|
|
127
163
|
sourceImageName: "ghcr.io/askexe/exe-monitor-hub",
|
|
128
164
|
env: "MONITOR_HUB_IMAGE_TAG",
|
|
@@ -134,6 +170,8 @@ var STACK_SERVICE_SPECS = Object.freeze([
|
|
|
134
170
|
origin: "askexe-release",
|
|
135
171
|
deployment: "stack",
|
|
136
172
|
ghRepo: "AskExe/exe-monitor",
|
|
173
|
+
// Same producer as monitorHub — one workflow builds both images.
|
|
174
|
+
releaseWorkflowFile: "release-stack-images.yml",
|
|
137
175
|
imageName: "update.askexe.com/askexe/exe-monitor-agent",
|
|
138
176
|
sourceImageName: "ghcr.io/askexe/exe-monitor-agent",
|
|
139
177
|
env: "MONITOR_AGENT_IMAGE_TAG",
|
|
@@ -153,12 +191,31 @@ var STACK_SERVICE_SPECS = Object.freeze([
|
|
|
153
191
|
// `:sha-<sha>` and `:main`, sets no org.opencontainers.image.version, and
|
|
154
192
|
// neither stack.release.json nor the stack manifest mentions it. Production
|
|
155
193
|
// is three builds stale and nothing auto-deploys it.
|
|
194
|
+
// FAIL-CLOSED DEFAULT ONLY (bug 61e7096e) — this is stale as of
|
|
195
|
+
// 2026-09-08: release-dashboard-image.yml now calls release-service.yml@v1
|
|
196
|
+
// and stack.release.json's `components.dashboard` describes it. Leaving
|
|
197
|
+
// "none" here is deliberate anyway: a constant like this one is exactly
|
|
198
|
+
// what went stale last time, so it must never by itself be trusted to stay
|
|
199
|
+
// OPEN — it is trusted only to stay CLOSED. The CLI derives the real
|
|
200
|
+
// answer from stack.release.json at run time (`releaseLaneWired` in
|
|
201
|
+
// ServiceFacts) and that is what actually decides Guard 2. If the
|
|
202
|
+
// descriptor entry is ever removed, this default is what re-closes the
|
|
203
|
+
// gate without anyone having to remember to flip a flag back.
|
|
156
204
|
releaseLane: "none",
|
|
205
|
+
// Wired ahead of the release lane itself (bug e49ac42b): once dashboard is
|
|
206
|
+
// flipped into the release lane, its producer is `.github/workflows/
|
|
207
|
+
// release-dashboard-image.yml` ("Release dashboard image", id 338670900) —
|
|
208
|
+
// a DIFFERENT workflow than exe-os's own "Release stack image"
|
|
209
|
+
// (id 274190265), even though both live in this repo, both match
|
|
210
|
+
// /release/i, and both can run at the same tag commit during a stack
|
|
211
|
+
// release. This is the concrete scenario adversarial review flagged: name
|
|
212
|
+
// matching would let exe-os's release stand in for dashboard's own.
|
|
213
|
+
releaseWorkflowFile: "release-dashboard-image.yml",
|
|
157
214
|
imageName: "ghcr.io/askexe/exe-dashboard",
|
|
158
215
|
env: "DASHBOARD_IMAGE_TAG",
|
|
159
216
|
category: "app",
|
|
160
217
|
description: "Customer dashboard (credits, usage, keys, billing)",
|
|
161
|
-
note: "
|
|
218
|
+
note: "Release lane wiring is now DERIVED from stack.release.json's components.dashboard entry (bug 61e7096e), not asserted here. Dashboard may still fail generation for other, real reasons \u2014 e.g. bug d85b98c7 (the release stamp step refuses to publish from an unclean tree, so no v* dashboard image has ever actually been produced) \u2014 but it will fail with an accurate reason from a later guard, not with a stale claim that the lane doesn't exist."
|
|
162
219
|
},
|
|
163
220
|
{
|
|
164
221
|
key: "exe-build",
|
|
@@ -169,6 +226,9 @@ var STACK_SERVICE_SPECS = Object.freeze([
|
|
|
169
226
|
// customer manifest is a decision on the record, not an omission.
|
|
170
227
|
deployment: "control-plane",
|
|
171
228
|
ghRepo: "AskExe/exe-build",
|
|
229
|
+
// Confirmed via `gh api repos/AskExe/exe-build/actions/workflows`
|
|
230
|
+
// (2026-09-08): named "Release" (path release.yml).
|
|
231
|
+
releaseWorkflowFile: "release.yml",
|
|
172
232
|
imageName: "update.askexe.com/askexe/exe-build",
|
|
173
233
|
env: "EXE_BUILD_IMAGE_TAG",
|
|
174
234
|
category: "control-plane"
|
|
@@ -281,10 +341,18 @@ function parseVersionCore(tag) {
|
|
|
281
341
|
}
|
|
282
342
|
return nums.length > 0 ? nums : null;
|
|
283
343
|
}
|
|
344
|
+
function classifyVersionScheme(tag) {
|
|
345
|
+
const core = parseVersionCore(tag);
|
|
346
|
+
if (!core) return null;
|
|
347
|
+
const looksStamped = typeof tag === "string" && /-stamped\s*$/i.test(tag.trim());
|
|
348
|
+
const firstComponentLooksLikeAYear = (core[0] ?? 0) >= 1e3;
|
|
349
|
+
return looksStamped || firstComponentLooksLikeAYear ? "date-stamped" : "semver";
|
|
350
|
+
}
|
|
284
351
|
function compareVersionTags(a, b) {
|
|
285
352
|
const ca = parseVersionCore(a);
|
|
286
353
|
const cb = parseVersionCore(b);
|
|
287
354
|
if (!ca || !cb) return null;
|
|
355
|
+
if (classifyVersionScheme(a) !== classifyVersionScheme(b)) return null;
|
|
288
356
|
const len = Math.max(ca.length, cb.length);
|
|
289
357
|
for (let i = 0; i < len; i++) {
|
|
290
358
|
const x = ca[i] ?? 0;
|
|
@@ -298,6 +366,9 @@ var REQUIRED_IMAGE_LABELS = Object.freeze([
|
|
|
298
366
|
"org.opencontainers.image.version",
|
|
299
367
|
"org.opencontainers.image.revision"
|
|
300
368
|
]);
|
|
369
|
+
function isReleaseLaneWired(spec, facts) {
|
|
370
|
+
return spec.releaseLane !== "none" || facts.releaseLaneWired === true;
|
|
371
|
+
}
|
|
301
372
|
function evaluateService(spec, facts = {}, options = {}) {
|
|
302
373
|
const refuse = (reason) => ({ ok: false, service: spec.key, reason });
|
|
303
374
|
const sourceName = spec.sourceImageName ?? spec.imageName;
|
|
@@ -343,7 +414,7 @@ function evaluateService(spec, facts = {}, options = {}) {
|
|
|
343
414
|
`no source repo identified \u2014 ${spec.key} is deployed from ${spec.imageName} but no repository in the AskExe org builds it. Identify (or create) the source repo and cut a tagged release. This is a block, not an exemption: the repo name must not be guessed.`
|
|
344
415
|
);
|
|
345
416
|
}
|
|
346
|
-
if (spec
|
|
417
|
+
if (!isReleaseLaneWired(spec, facts)) {
|
|
347
418
|
return refuse(
|
|
348
419
|
`not wired into the release lane \u2014 ${spec.ghRepo} builds ${spec.imageName}, but only as floating refs (:main / :sha-<sha>) with no version stamp, and no release descriptor references it. There is no released artifact to pin. Give its workflow a versioned tag plus org.opencontainers.image.version/.revision stamps and add it to the release descriptor.`
|
|
349
420
|
);
|
|
@@ -385,10 +456,45 @@ function evaluateService(spec, facts = {}, options = {}) {
|
|
|
385
456
|
}
|
|
386
457
|
const resolvedDigest = facts.digestByCommit ?? facts.digestByTag;
|
|
387
458
|
if (!resolvedDigest || !/^sha256:[0-9a-f]{64}$/i.test(resolvedDigest)) {
|
|
459
|
+
const refEntries = [
|
|
460
|
+
{ label: `${commitName}:sha-${facts.tagCommit} (commit-addressed)`, classification: facts.digestByCommitClassification },
|
|
461
|
+
{ label: `${sourceName}:${facts.latestTag} (version tag)`, classification: facts.digestByTagClassification }
|
|
462
|
+
];
|
|
463
|
+
const classifiedEntries = refEntries.filter(
|
|
464
|
+
(e) => e.classification !== void 0
|
|
465
|
+
);
|
|
466
|
+
const missingEntries = classifiedEntries.filter((e) => e.classification.classification === "missing");
|
|
467
|
+
const uncertainEntries = classifiedEntries.filter((e) => e.classification.classification !== "missing");
|
|
468
|
+
const kindPhrase = (kind) => kind === "authentication" ? "AUTHENTICATION FAILURE" : "UNAVAILABLE";
|
|
469
|
+
const uncertainDetail = (e) => `${e.label}: ${kindPhrase(e.classification.classification)} \u2014 ${e.classification.detail}`;
|
|
470
|
+
const credentialHint = `Set the matching credential (EXE_REGISTRY_PROXY_PULL_TOKENS or EXE_LICENSE_KEY for update.askexe.com; GHCR_TOKEN for ghcr.io) and re-run before concluding anything about the release workflow.`;
|
|
471
|
+
if (classifiedEntries.length > 0 && missingEntries.length === 0) {
|
|
472
|
+
return refuse(
|
|
473
|
+
`UNVERIFIED, not missing: could not determine whether an artifact exists for release ${facts.latestTag} \u2014 ${uncertainEntries.map(uncertainDetail).join("; ")}. A rejected credential or an unreachable/erroring registry is NOT evidence the release has no artifact. ${credentialHint}`
|
|
474
|
+
);
|
|
475
|
+
}
|
|
476
|
+
if (missingEntries.length > 0 && uncertainEntries.length > 0) {
|
|
477
|
+
return refuse(
|
|
478
|
+
`PARTIALLY VERIFIED for release ${facts.latestTag}: ${missingEntries.map((e) => `${e.label} is confirmed MISSING (${e.classification.detail})`).join("; ")}; ${uncertainEntries.map(uncertainDetail).join("; ")}. Refusing to publish either way (fail-closed), but this is NOT proof that neither artifact exists \u2014 only that one ref does not, and the other could not be checked. ${credentialHint}`
|
|
479
|
+
);
|
|
480
|
+
}
|
|
388
481
|
return refuse(
|
|
389
482
|
`no resolvable image for release ${facts.latestTag}: neither ${commitName}:sha-${facts.tagCommit} (commit-addressed) nor ${sourceName}:${facts.latestTag} could be resolved to a digest. A release with no artifact cannot be deployed \u2014 fix the release workflow rather than hand-pinning an older image.`
|
|
390
483
|
);
|
|
391
484
|
}
|
|
485
|
+
{
|
|
486
|
+
const gate = facts.releaseGateStatus;
|
|
487
|
+
if (!gate || gate.classification === "unverified") {
|
|
488
|
+
return refuse(
|
|
489
|
+
`UNVERIFIED, not passed: could not determine whether the release that produced ${resolvedDigest} (${commitName}:sha-${facts.tagCommit}${facts.digestByTag ? `, also tagged ${sourceName}:${facts.latestTag}` : ""}) passed its gates \u2014 ${gate?.detail ?? "no release-gate check was performed for this candidate."} This is NOT evidence the release gates passed \u2014 the question was never actually answered. Fix the missing credential (gh CLI auth / GH_TOKEN with 'actions:read' on ${spec.ghRepo}) or, if unverified because no producer workflow is identified for this service, set releaseWorkflowFile in the roster \u2014 and re-run before concluding anything about this release.`
|
|
490
|
+
);
|
|
491
|
+
}
|
|
492
|
+
if (gate.classification !== "passed") {
|
|
493
|
+
return refuse(
|
|
494
|
+
`RELEASE GATES DID NOT PASS for ${resolvedDigest} (${commitName}:sha-${facts.tagCommit}): ${gate.detail} ${facts.digestByTag ? `The version tag ${facts.latestTag} resolving does NOT mean this run's gates passed \u2014 a tag can be pushed by a step that runs before later checks in the same job fail it closed.` : `The version tag ${facts.latestTag} was never published for ${spec.ghRepo} \u2014 that omission IS the gate working as designed, not a resolution failure to fall back past.`} Fix the finding the release gate flagged and cut a new release; a rejected artifact does not become pinnable because SOME reference to it still resolves in the registry.`
|
|
495
|
+
);
|
|
496
|
+
}
|
|
497
|
+
}
|
|
392
498
|
if (facts.digestByTag && facts.digestByCommit && facts.digestByTag.toLowerCase() !== facts.digestByCommit.toLowerCase()) {
|
|
393
499
|
return refuse(
|
|
394
500
|
`TAG/COMMIT MISMATCH: the image tagged ${facts.latestTag} is ${facts.digestByTag}, but the image built from the commit that tag names (${facts.tagCommit}) is ${facts.digestByCommit}. The image called ${facts.latestTag} was not built from the commit called ${facts.latestTag}. A version tag in this registry is not provenance \u2014 refusing to pin either until the release workflow is fixed so the two agree.`
|
|
@@ -566,6 +672,27 @@ function repoRoot() {
|
|
|
566
672
|
}
|
|
567
673
|
return process.cwd();
|
|
568
674
|
}
|
|
675
|
+
var OWN_REPO = "AskExe/exe-os";
|
|
676
|
+
var cachedReleaseDescriptorComponents;
|
|
677
|
+
function ownReleaseDescriptorComponents(root = repoRoot()) {
|
|
678
|
+
if (cachedReleaseDescriptorComponents) return cachedReleaseDescriptorComponents;
|
|
679
|
+
const descriptorPath = path.join(root, "stack.release.json");
|
|
680
|
+
try {
|
|
681
|
+
const parsed = JSON.parse(readFileSync(descriptorPath, "utf8"));
|
|
682
|
+
cachedReleaseDescriptorComponents = new Set(Object.keys(parsed.components ?? {}));
|
|
683
|
+
} catch (err) {
|
|
684
|
+
process.stderr.write(
|
|
685
|
+
`[stack-generate-manifest] WARNING: could not read/parse ${descriptorPath} to derive release-lane wiring (${err instanceof Error ? err.message : String(err)}); treating no service as newly wired.
|
|
686
|
+
`
|
|
687
|
+
);
|
|
688
|
+
cachedReleaseDescriptorComponents = /* @__PURE__ */ new Set();
|
|
689
|
+
}
|
|
690
|
+
return cachedReleaseDescriptorComponents;
|
|
691
|
+
}
|
|
692
|
+
function deriveReleaseLaneWiring(spec, root) {
|
|
693
|
+
if (spec.ghRepo !== OWN_REPO) return void 0;
|
|
694
|
+
return ownReleaseDescriptorComponents(root).has(spec.key);
|
|
695
|
+
}
|
|
569
696
|
function parseGenerateArgs(argv, root = repoRoot()) {
|
|
570
697
|
const opts = {
|
|
571
698
|
manifestPath: path.join(root, "deploy", "stack-manifests", "v0.9.json"),
|
|
@@ -597,6 +724,14 @@ async function run(cmd, args) {
|
|
|
597
724
|
return { ok: false, stdout: "" };
|
|
598
725
|
}
|
|
599
726
|
}
|
|
727
|
+
async function runWithDiagnostics(cmd, args) {
|
|
728
|
+
try {
|
|
729
|
+
const { stdout } = await execFile(cmd, args, { maxBuffer: 16 * 1024 * 1024 });
|
|
730
|
+
return { ok: true, stdout: stdout.toString().trim() };
|
|
731
|
+
} catch (err) {
|
|
732
|
+
return { ok: false, stdout: "", error: err instanceof Error ? err.message : String(err) };
|
|
733
|
+
}
|
|
734
|
+
}
|
|
600
735
|
var MAX_TAG_PROBES = 50;
|
|
601
736
|
async function tagCreatorEmail(ghRepo, tag) {
|
|
602
737
|
const ref = await run("gh", [
|
|
@@ -709,6 +844,38 @@ async function resolveImageDigest(ref) {
|
|
|
709
844
|
const match = res.stdout.match(/^\s*Digest:\s*(sha256:[0-9a-f]{64})\s*$/m);
|
|
710
845
|
return match?.[1];
|
|
711
846
|
}
|
|
847
|
+
async function classifyUnresolvedImage(ref, {
|
|
848
|
+
env = process.env,
|
|
849
|
+
fetchImpl = globalThis.fetch
|
|
850
|
+
} = {}) {
|
|
851
|
+
const { checkImagePullability, credentialHintForRegistry } = await import("./check-image-pullability-2AIVB4BX.js");
|
|
852
|
+
const result = await checkImagePullability({ ref }, { fetchImpl, env });
|
|
853
|
+
if (result.classification === "unverified") {
|
|
854
|
+
return {
|
|
855
|
+
classification: "unavailable",
|
|
856
|
+
detail: `${ref}: ${result.error ?? `no credential was available to check it (${credentialHintForRegistry(result.registry)})`}`
|
|
857
|
+
};
|
|
858
|
+
}
|
|
859
|
+
if (result.classification === "drift") {
|
|
860
|
+
if (result.credentialOffered && (result.status === 401 || result.status === 403)) {
|
|
861
|
+
return {
|
|
862
|
+
classification: "authentication",
|
|
863
|
+
detail: `${ref}: registry rejected the credential it was offered (HTTP ${result.status}) \u2014 this proves the credential is bad, not that the image is missing`
|
|
864
|
+
};
|
|
865
|
+
}
|
|
866
|
+
if (result.status >= 500) {
|
|
867
|
+
return {
|
|
868
|
+
classification: "unavailable",
|
|
869
|
+
detail: `${ref}: registry returned a server error (HTTP ${result.status})`
|
|
870
|
+
};
|
|
871
|
+
}
|
|
872
|
+
return { classification: "missing", detail: `${ref}: registry returned HTTP ${result.status}` };
|
|
873
|
+
}
|
|
874
|
+
return {
|
|
875
|
+
classification: "unavailable",
|
|
876
|
+
detail: `${ref}: registry HEAD succeeded (HTTP ${result.status}) but docker buildx could not resolve a digest`
|
|
877
|
+
};
|
|
878
|
+
}
|
|
712
879
|
async function readProvenanceLabels(ref) {
|
|
713
880
|
const { resolveImageLabels } = await import("./resolve-image-labels-N27XXTUG.js");
|
|
714
881
|
return resolveImageLabels(ref, [
|
|
@@ -725,30 +892,93 @@ function loadDeployedState(filePath) {
|
|
|
725
892
|
return JSON.parse(readFileSync(filePath, "utf8"));
|
|
726
893
|
}
|
|
727
894
|
function unsampledPinnedServices(specs, deployed) {
|
|
728
|
-
return specs.filter(
|
|
895
|
+
return specs.filter(
|
|
896
|
+
(spec) => spec.origin !== "upstream-pinned" && spec.ghRepo && isReleaseLaneWired(spec, { releaseLaneWired: deriveReleaseLaneWiring(spec) === true })
|
|
897
|
+
).filter((spec) => {
|
|
729
898
|
const entry = deployed[spec.key];
|
|
730
899
|
if (entry?.ref) return false;
|
|
731
900
|
if (entry?.absent) return false;
|
|
732
901
|
return true;
|
|
733
902
|
}).map((spec) => spec.key);
|
|
734
903
|
}
|
|
904
|
+
async function checkReleaseGatePassed(ghRepo, workflowFile, tagCommit, latestTag) {
|
|
905
|
+
if (!workflowFile) {
|
|
906
|
+
return {
|
|
907
|
+
classification: "unverified",
|
|
908
|
+
detail: `no producer workflow is identified for ${ghRepo} (releaseWorkflowFile unset in the service roster). Matching runs by NAME (e.g. anything matching /release/i) is not provenance \u2014 this org has multiple workflows whose names match that pattern in the same repository. Identify the exact .github/workflows file that publishes this service's artifact and set releaseWorkflowFile before this can be verified.`
|
|
909
|
+
};
|
|
910
|
+
}
|
|
911
|
+
const res = await runWithDiagnostics("gh", [
|
|
912
|
+
"api",
|
|
913
|
+
`repos/${ghRepo}/actions/workflows/${encodeURIComponent(workflowFile)}/runs?head_sha=${tagCommit}&per_page=100`
|
|
914
|
+
]);
|
|
915
|
+
if (!res.ok) {
|
|
916
|
+
return {
|
|
917
|
+
classification: "unverified",
|
|
918
|
+
detail: `could not query GitHub Actions runs for ${ghRepo}'s ${workflowFile}@${tagCommit}: ${res.error ?? "gh api call failed"}. Likely missing credential: gh CLI auth (GH_TOKEN / GH_PAT) with 'actions:read' on ${ghRepo} \u2014 or ${workflowFile} does not exist in ${ghRepo} at all (roster drift).`
|
|
919
|
+
};
|
|
920
|
+
}
|
|
921
|
+
let runs;
|
|
922
|
+
try {
|
|
923
|
+
const parsed = JSON.parse(res.stdout || "{}");
|
|
924
|
+
runs = parsed.workflow_runs ?? [];
|
|
925
|
+
} catch {
|
|
926
|
+
return {
|
|
927
|
+
classification: "unverified",
|
|
928
|
+
detail: `GitHub Actions API returned unparseable output for ${ghRepo}'s ${workflowFile}@${tagCommit}.`
|
|
929
|
+
};
|
|
930
|
+
}
|
|
931
|
+
if (runs.length === 0) {
|
|
932
|
+
return {
|
|
933
|
+
classification: "no-run-found",
|
|
934
|
+
detail: `no run of ${workflowFile} (the producer workflow for ${ghRepo}) was found at commit ${tagCommit} (tag ${latestTag}). An image with no producer run behind it cannot be attributed to a release that passed anything.`
|
|
935
|
+
};
|
|
936
|
+
}
|
|
937
|
+
const succeeded = runs.some((r) => r.status === "completed" && r.conclusion === "success");
|
|
938
|
+
if (succeeded) {
|
|
939
|
+
return {
|
|
940
|
+
classification: "passed",
|
|
941
|
+
detail: `${workflowFile} (${ghRepo}) concluded successfully for commit ${tagCommit}.`
|
|
942
|
+
};
|
|
943
|
+
}
|
|
944
|
+
const newest = runs[0];
|
|
945
|
+
return {
|
|
946
|
+
classification: "gate-failed",
|
|
947
|
+
detail: `${workflowFile} (${ghRepo}, event=${newest.event ?? "unknown"}) for commit ${tagCommit} (tag ${latestTag}) did not conclude successfully (status=${newest.status ?? "unknown"}, conclusion=${newest.conclusion ?? "n/a"}${newest.html_url ? `, ${newest.html_url}` : ""}).`
|
|
948
|
+
};
|
|
949
|
+
}
|
|
735
950
|
async function gatherFacts(spec, previous, deployed) {
|
|
736
951
|
const facts = {
|
|
737
952
|
previousImageRef: previous[spec.key],
|
|
738
953
|
// An `{ absent: true }` marker records that the host is NOT running this
|
|
739
954
|
// service. It is an answer to the coverage question, not an image, so it
|
|
740
955
|
// must not flow into the deployed-provenance guards as one.
|
|
741
|
-
deployed: deployed[spec.key]?.ref ? deployed[spec.key] : void 0
|
|
956
|
+
deployed: deployed[spec.key]?.ref ? deployed[spec.key] : void 0,
|
|
957
|
+
// Derived from the repo's own release descriptor, never asserted (bug
|
|
958
|
+
// 61e7096e) — see `deriveReleaseLaneWiring` and `isReleaseLaneWired`.
|
|
959
|
+
releaseLaneWired: deriveReleaseLaneWiring(spec)
|
|
742
960
|
};
|
|
743
|
-
if (spec.origin === "upstream-pinned" || !spec.ghRepo || spec
|
|
961
|
+
if (spec.origin === "upstream-pinned" || !spec.ghRepo || !isReleaseLaneWired(spec, facts)) return facts;
|
|
744
962
|
facts.latestTag = await fetchLatestTag(spec.ghRepo);
|
|
745
963
|
if (!facts.latestTag) return facts;
|
|
746
964
|
facts.tagCommit = await resolveTagCommit(spec.ghRepo, facts.latestTag);
|
|
747
965
|
if (!facts.tagCommit) return facts;
|
|
748
966
|
const source = spec.sourceImageName ?? spec.imageName;
|
|
749
967
|
const commitSource = spec.commitImageName ?? source;
|
|
750
|
-
|
|
751
|
-
facts.
|
|
968
|
+
const commitRef = `${commitSource}:sha-${facts.tagCommit}`;
|
|
969
|
+
facts.digestByCommit = await resolveImageDigest(commitRef);
|
|
970
|
+
if (!facts.digestByCommit) facts.digestByCommitClassification = await classifyUnresolvedImage(commitRef);
|
|
971
|
+
const tagRef = `${source}:${facts.latestTag}`;
|
|
972
|
+
facts.digestByTag = await resolveImageDigest(tagRef);
|
|
973
|
+
if (!facts.digestByTag) facts.digestByTagClassification = await classifyUnresolvedImage(tagRef);
|
|
974
|
+
if (facts.digestByCommit || facts.digestByTag) {
|
|
975
|
+
facts.releaseGateStatus = await checkReleaseGatePassed(
|
|
976
|
+
spec.ghRepo,
|
|
977
|
+
spec.releaseWorkflowFile,
|
|
978
|
+
facts.tagCommit,
|
|
979
|
+
facts.latestTag
|
|
980
|
+
);
|
|
981
|
+
}
|
|
752
982
|
const resolved = facts.digestByCommit ?? facts.digestByTag;
|
|
753
983
|
if (!resolved) return facts;
|
|
754
984
|
facts.labels = await readProvenanceLabels(
|
|
@@ -941,8 +1171,11 @@ if (isMainModule(import.meta.url) && process.argv[1]?.includes("stack-generate-m
|
|
|
941
1171
|
});
|
|
942
1172
|
}
|
|
943
1173
|
export {
|
|
1174
|
+
checkReleaseGatePassed,
|
|
1175
|
+
classifyUnresolvedImage,
|
|
944
1176
|
commitIsAncestorOfTag,
|
|
945
1177
|
deployedTagIsOurRelease,
|
|
1178
|
+
deriveReleaseLaneWiring,
|
|
946
1179
|
fetchLatestTag,
|
|
947
1180
|
fetchReleaseTags,
|
|
948
1181
|
gatherFacts,
|