@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
|
@@ -0,0 +1,545 @@
|
|
|
1
|
+
import {
|
|
2
|
+
parseInstant
|
|
3
|
+
} from "./chunk-YRUZK2QA.js";
|
|
4
|
+
|
|
5
|
+
// src/lib/delivery-schemas.ts
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
var DeliverySchemaError = class extends Error {
|
|
8
|
+
code;
|
|
9
|
+
path;
|
|
10
|
+
detail;
|
|
11
|
+
constructor(code, path, detail) {
|
|
12
|
+
super(`[${code}] ${path}: ${detail}`);
|
|
13
|
+
this.name = "DeliverySchemaError";
|
|
14
|
+
this.code = code;
|
|
15
|
+
this.path = path;
|
|
16
|
+
this.detail = detail;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
function assertNoDuplicateKeys(raw) {
|
|
20
|
+
const stack = [];
|
|
21
|
+
let i = 0;
|
|
22
|
+
while (i < raw.length) {
|
|
23
|
+
const c = raw[i];
|
|
24
|
+
if (c === '"') {
|
|
25
|
+
const start = i;
|
|
26
|
+
i += 1;
|
|
27
|
+
while (i < raw.length) {
|
|
28
|
+
if (raw[i] === "\\") {
|
|
29
|
+
i += 2;
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (raw[i] === '"') break;
|
|
33
|
+
i += 1;
|
|
34
|
+
}
|
|
35
|
+
const literal = raw.slice(start, i + 1);
|
|
36
|
+
i += 1;
|
|
37
|
+
const top = stack[stack.length - 1];
|
|
38
|
+
if (top?.isObject && top.expectKey) {
|
|
39
|
+
let key;
|
|
40
|
+
try {
|
|
41
|
+
key = JSON.parse(literal);
|
|
42
|
+
} catch {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (top.keys.has(key)) {
|
|
46
|
+
throw new DeliverySchemaError(
|
|
47
|
+
"duplicate_key",
|
|
48
|
+
`$.${key}`,
|
|
49
|
+
`key "${key}" appears more than once in the same object; JSON.parse would keep only the last value`
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
top.keys.add(key);
|
|
53
|
+
top.expectKey = false;
|
|
54
|
+
}
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (c === "{") {
|
|
58
|
+
stack.push({ isObject: true, keys: /* @__PURE__ */ new Set(), expectKey: true });
|
|
59
|
+
} else if (c === "[") {
|
|
60
|
+
stack.push({ isObject: false, keys: /* @__PURE__ */ new Set(), expectKey: false });
|
|
61
|
+
} else if (c === "}" || c === "]") {
|
|
62
|
+
stack.pop();
|
|
63
|
+
} else if (c === ",") {
|
|
64
|
+
const top = stack[stack.length - 1];
|
|
65
|
+
if (top?.isObject) top.expectKey = true;
|
|
66
|
+
}
|
|
67
|
+
i += 1;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function parseJsonStrict(raw) {
|
|
71
|
+
let value;
|
|
72
|
+
try {
|
|
73
|
+
value = JSON.parse(raw);
|
|
74
|
+
} catch (e) {
|
|
75
|
+
throw new DeliverySchemaError(
|
|
76
|
+
"json_parse",
|
|
77
|
+
"$",
|
|
78
|
+
e instanceof Error ? e.message : String(e)
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
assertNoDuplicateKeys(raw);
|
|
82
|
+
return value;
|
|
83
|
+
}
|
|
84
|
+
var GIT_SHA_RE = /^[0-9a-f]{40}$/;
|
|
85
|
+
var OCI_DIGEST_RE = /^sha256:[0-9a-f]{64}$/;
|
|
86
|
+
var NPM_INTEGRITY_RE = /^sha512-[A-Za-z0-9+/]{86}==$/;
|
|
87
|
+
var RELEASE_TAG_RE = /^askexe-v(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$/;
|
|
88
|
+
var SEMVER_RE = /^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$/;
|
|
89
|
+
var UTC_TIMESTAMP_RE = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,3})?Z$/;
|
|
90
|
+
var PLATFORM_RE = /^[a-z0-9]+\/[a-z0-9]+(\/v[0-9]+)?$/;
|
|
91
|
+
var SHA256_HEX_RE = /^[0-9a-f]{64}$/;
|
|
92
|
+
var gitSha = z.string().regex(GIT_SHA_RE, "must be a lowercase 40-hex commit SHA");
|
|
93
|
+
var ociDigest = z.string().regex(OCI_DIGEST_RE, "must be sha256:<64 lowercase hex>");
|
|
94
|
+
var npmIntegrity = z.string().regex(NPM_INTEGRITY_RE, "must be an npm SHA-512 integrity string");
|
|
95
|
+
var releaseTag = z.string().regex(RELEASE_TAG_RE, "must be askexe-vMAJOR.MINOR.PATCH");
|
|
96
|
+
var semver = z.string().regex(SEMVER_RE, "must be MAJOR.MINOR.PATCH");
|
|
97
|
+
function isRealUtcInstant(v) {
|
|
98
|
+
if (!UTC_TIMESTAMP_RE.test(v)) return false;
|
|
99
|
+
const ms = Date.parse(v);
|
|
100
|
+
if (!Number.isFinite(ms)) return false;
|
|
101
|
+
return new Date(ms).toISOString().slice(0, 19) === v.slice(0, 19);
|
|
102
|
+
}
|
|
103
|
+
var utcTimestamp = z.string().refine(isRealUtcInstant, "must be a real ISO-8601 UTC instant ending in Z");
|
|
104
|
+
var platform = z.string().regex(PLATFORM_RE, "must be an OCI platform string, e.g. linux/amd64");
|
|
105
|
+
var sha256Hex = z.string().regex(SHA256_HEX_RE, "must be 64 lowercase hex characters");
|
|
106
|
+
var nonEmpty = z.string().min(1);
|
|
107
|
+
var repositoryName = z.string().regex(/^[A-Za-z0-9._-]+\/[A-Za-z0-9._-]+$/);
|
|
108
|
+
var CHANNELS = ["canary", "stable"];
|
|
109
|
+
var channel = z.enum(CHANNELS);
|
|
110
|
+
var RELEASE_STATES = [
|
|
111
|
+
"INTENT",
|
|
112
|
+
"BUILDING",
|
|
113
|
+
"CANDIDATE",
|
|
114
|
+
"VERIFIED",
|
|
115
|
+
"RELEASED",
|
|
116
|
+
"PROPOSED",
|
|
117
|
+
"SIGNED",
|
|
118
|
+
"PUBLISHED",
|
|
119
|
+
"DEPLOYED",
|
|
120
|
+
"VERIFIED_DEPLOYMENT",
|
|
121
|
+
"BLOCKED",
|
|
122
|
+
"ABANDONED",
|
|
123
|
+
"SUPERSEDED_BY"
|
|
124
|
+
];
|
|
125
|
+
var ReleaseStateSchema = z.enum(RELEASE_STATES);
|
|
126
|
+
var RECOVERABLE_TERMINAL_STATES = ["BLOCKED"];
|
|
127
|
+
function isRecoverableTerminal(state) {
|
|
128
|
+
return RECOVERABLE_TERMINAL_STATES.includes(state);
|
|
129
|
+
}
|
|
130
|
+
var SCAN_RESULTS = ["pass", "policy_fail", "engine_error", "stale_database"];
|
|
131
|
+
var ScanEvidenceSchema = z.strictObject({
|
|
132
|
+
engine: nonEmpty,
|
|
133
|
+
engineVersion: nonEmpty,
|
|
134
|
+
databaseVersion: nonEmpty,
|
|
135
|
+
reportSha256: sha256Hex,
|
|
136
|
+
/**
|
|
137
|
+
* WHAT was scanned, named by the same identity the artifact is published
|
|
138
|
+
* under. An OCI digest for an image, an SHA-512 integrity for an npm tarball,
|
|
139
|
+
* a SHA-256 for a binary — because an exe-os release is npm AND images, and a
|
|
140
|
+
* contract that can only express "scanned this image digest" cannot record
|
|
141
|
+
* that the tarball was scanned at all.
|
|
142
|
+
*
|
|
143
|
+
* The descriptor refines this further: it must match an artifact THIS release
|
|
144
|
+
* actually ships. A scan of bytes we do not publish is not evidence.
|
|
145
|
+
*/
|
|
146
|
+
scannedDigest: z.union([ociDigest, npmIntegrity, sha256Hex]),
|
|
147
|
+
result: z.enum(SCAN_RESULTS),
|
|
148
|
+
completedAt: utcTimestamp
|
|
149
|
+
});
|
|
150
|
+
var NOT_APPLICABLE_CLASSIFICATIONS = [
|
|
151
|
+
"documentation_only",
|
|
152
|
+
"paths_not_affected",
|
|
153
|
+
"artifact_not_produced"
|
|
154
|
+
];
|
|
155
|
+
var PassedCheckSchema = z.strictObject({
|
|
156
|
+
name: nonEmpty,
|
|
157
|
+
conclusion: z.literal("success"),
|
|
158
|
+
headSha: gitSha
|
|
159
|
+
});
|
|
160
|
+
var NotApplicableCheckSchema = z.strictObject({
|
|
161
|
+
name: nonEmpty,
|
|
162
|
+
conclusion: z.literal("skipped"),
|
|
163
|
+
headSha: gitSha,
|
|
164
|
+
/** Mandatory. A skip with no accountable classification is not evidence. */
|
|
165
|
+
notApplicable: z.strictObject({
|
|
166
|
+
classification: z.enum(NOT_APPLICABLE_CLASSIFICATIONS),
|
|
167
|
+
/** Free text for the human who has to audit this later. */
|
|
168
|
+
reason: nonEmpty,
|
|
169
|
+
/** The role accountable for the classification. Not a department. */
|
|
170
|
+
approvedBy: nonEmpty
|
|
171
|
+
})
|
|
172
|
+
});
|
|
173
|
+
var RequiredCheckSchema = z.discriminatedUnion("conclusion", [
|
|
174
|
+
PassedCheckSchema,
|
|
175
|
+
NotApplicableCheckSchema
|
|
176
|
+
]);
|
|
177
|
+
var EvidenceSchema = z.strictObject({
|
|
178
|
+
requiredChecks: z.array(RequiredCheckSchema).min(1),
|
|
179
|
+
scans: z.array(ScanEvidenceSchema).min(1),
|
|
180
|
+
identityReportSha256: sha256Hex,
|
|
181
|
+
smokeReportSha256: sha256Hex
|
|
182
|
+
});
|
|
183
|
+
var ReferenceSchema = z.strictObject({
|
|
184
|
+
digest: ociDigest,
|
|
185
|
+
mediaType: nonEmpty
|
|
186
|
+
});
|
|
187
|
+
var PlatformDigestSchema = z.strictObject({
|
|
188
|
+
platform,
|
|
189
|
+
digest: ociDigest
|
|
190
|
+
});
|
|
191
|
+
var OciImageArtifactSchema = z.strictObject({
|
|
192
|
+
componentId: nonEmpty,
|
|
193
|
+
type: z.literal("oci-image"),
|
|
194
|
+
registry: nonEmpty,
|
|
195
|
+
repositoryPath: nonEmpty,
|
|
196
|
+
versionAlias: nonEmpty,
|
|
197
|
+
digest: ociDigest,
|
|
198
|
+
mediaType: nonEmpty,
|
|
199
|
+
platforms: z.array(PlatformDigestSchema).min(1),
|
|
200
|
+
sbom: ReferenceSchema.optional(),
|
|
201
|
+
provenance: ReferenceSchema.optional()
|
|
202
|
+
});
|
|
203
|
+
var NpmPackageArtifactSchema = z.strictObject({
|
|
204
|
+
componentId: nonEmpty,
|
|
205
|
+
type: z.literal("npm-package"),
|
|
206
|
+
registry: nonEmpty,
|
|
207
|
+
packageName: nonEmpty,
|
|
208
|
+
versionAlias: nonEmpty,
|
|
209
|
+
integrity: npmIntegrity,
|
|
210
|
+
provenance: ReferenceSchema.optional()
|
|
211
|
+
});
|
|
212
|
+
var BinaryArtifactSchema = z.strictObject({
|
|
213
|
+
componentId: nonEmpty,
|
|
214
|
+
type: z.literal("binary"),
|
|
215
|
+
releaseAsset: nonEmpty,
|
|
216
|
+
versionAlias: nonEmpty,
|
|
217
|
+
sha256: sha256Hex,
|
|
218
|
+
platform,
|
|
219
|
+
provenance: ReferenceSchema.optional()
|
|
220
|
+
});
|
|
221
|
+
var DesktopBundleArtifactSchema = z.strictObject({
|
|
222
|
+
componentId: nonEmpty,
|
|
223
|
+
type: z.literal("desktop-bundle"),
|
|
224
|
+
releaseAsset: nonEmpty,
|
|
225
|
+
versionAlias: nonEmpty,
|
|
226
|
+
sha256: sha256Hex,
|
|
227
|
+
platform,
|
|
228
|
+
signed: z.boolean(),
|
|
229
|
+
provenance: ReferenceSchema.optional()
|
|
230
|
+
});
|
|
231
|
+
var ArtifactSchema = z.discriminatedUnion("type", [
|
|
232
|
+
OciImageArtifactSchema,
|
|
233
|
+
NpmPackageArtifactSchema,
|
|
234
|
+
BinaryArtifactSchema,
|
|
235
|
+
DesktopBundleArtifactSchema
|
|
236
|
+
]);
|
|
237
|
+
var BuildInputsSchema = z.strictObject({
|
|
238
|
+
toolchain: z.record(z.string(), nonEmpty),
|
|
239
|
+
baseImages: z.array(z.strictObject({ ref: nonEmpty, digest: ociDigest })),
|
|
240
|
+
lockfiles: z.array(z.strictObject({ path: nonEmpty, sha256: sha256Hex })),
|
|
241
|
+
/**
|
|
242
|
+
* The version injected into the build workspace, plus the revision of the
|
|
243
|
+
* transformation that injected it. Recorded so a released artifact's version
|
|
244
|
+
* is traceable WITHOUT a bump-only commit mutating the tagged source tree.
|
|
245
|
+
*/
|
|
246
|
+
generatedVersion: z.strictObject({
|
|
247
|
+
version: semver,
|
|
248
|
+
transformationRevision: gitSha
|
|
249
|
+
})
|
|
250
|
+
});
|
|
251
|
+
var ROLLBACK_CLASSES = ["safe", "forward_only", "irreversible"];
|
|
252
|
+
var CompatibilitySchema = z.strictObject({
|
|
253
|
+
updaterFloor: semver,
|
|
254
|
+
apiRequirements: z.array(z.strictObject({ name: nonEmpty, range: nonEmpty })),
|
|
255
|
+
migrationIds: z.array(nonEmpty),
|
|
256
|
+
rollback: z.enum(ROLLBACK_CLASSES)
|
|
257
|
+
});
|
|
258
|
+
var WorkflowIdentitySchema = z.strictObject({
|
|
259
|
+
repository: repositoryName,
|
|
260
|
+
path: nonEmpty,
|
|
261
|
+
/** The FULL 40-char commit of the trusted reusable workflow — never `@v1`. */
|
|
262
|
+
workflowSha: gitSha,
|
|
263
|
+
runId: nonEmpty,
|
|
264
|
+
attempt: z.number().int().min(1),
|
|
265
|
+
event: nonEmpty,
|
|
266
|
+
evaluatedSourceSha: gitSha
|
|
267
|
+
});
|
|
268
|
+
var DESCRIPTOR_SCHEMA_VERSION = 1;
|
|
269
|
+
var ReleaseDescriptorSchema = z.strictObject({
|
|
270
|
+
schemaVersion: z.literal(DESCRIPTOR_SCHEMA_VERSION),
|
|
271
|
+
/** Full commit SHA of the trusted contract this release was produced under. */
|
|
272
|
+
contractRevision: gitSha,
|
|
273
|
+
/** Numeric GitHub repository ID — survives rename and transfer. */
|
|
274
|
+
repositoryId: z.number().int().positive(),
|
|
275
|
+
repository: repositoryName,
|
|
276
|
+
sourceSha: gitSha,
|
|
277
|
+
sourceTree: gitSha,
|
|
278
|
+
tag: releaseTag,
|
|
279
|
+
version: semver,
|
|
280
|
+
channel,
|
|
281
|
+
intentId: nonEmpty,
|
|
282
|
+
workflow: WorkflowIdentitySchema,
|
|
283
|
+
artifacts: z.array(ArtifactSchema).min(1),
|
|
284
|
+
buildInputs: BuildInputsSchema,
|
|
285
|
+
compatibility: CompatibilitySchema,
|
|
286
|
+
evidence: EvidenceSchema
|
|
287
|
+
}).superRefine((d, ctx) => {
|
|
288
|
+
if (d.tag !== `askexe-v${d.version}`) {
|
|
289
|
+
ctx.addIssue({
|
|
290
|
+
code: "custom",
|
|
291
|
+
path: ["version"],
|
|
292
|
+
message: `version "${d.version}" does not match tag "${d.tag}"`
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
if (d.workflow.evaluatedSourceSha !== d.sourceSha) {
|
|
296
|
+
ctx.addIssue({
|
|
297
|
+
code: "custom",
|
|
298
|
+
path: ["workflow", "evaluatedSourceSha"],
|
|
299
|
+
message: "workflow evaluated a different source SHA than the descriptor claims"
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
if (d.buildInputs.generatedVersion.version !== d.version) {
|
|
303
|
+
ctx.addIssue({
|
|
304
|
+
code: "custom",
|
|
305
|
+
path: ["buildInputs", "generatedVersion", "version"],
|
|
306
|
+
message: "generated build version does not match the released version"
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
const seen = /* @__PURE__ */ new Set();
|
|
310
|
+
d.artifacts.forEach((a, i) => {
|
|
311
|
+
if (seen.has(a.componentId)) {
|
|
312
|
+
ctx.addIssue({
|
|
313
|
+
code: "custom",
|
|
314
|
+
path: ["artifacts", i, "componentId"],
|
|
315
|
+
message: `duplicate componentId "${a.componentId}"`
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
seen.add(a.componentId);
|
|
319
|
+
const expectedAlias = a.type === "oci-image" ? d.tag : d.version;
|
|
320
|
+
if (a.versionAlias !== expectedAlias) {
|
|
321
|
+
ctx.addIssue({
|
|
322
|
+
code: "custom",
|
|
323
|
+
path: ["artifacts", i, "versionAlias"],
|
|
324
|
+
message: `versionAlias "${a.versionAlias}" must be "${expectedAlias}" for a ${a.type} artifact of ${d.tag}`
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
d.evidence.requiredChecks.forEach((c, i) => {
|
|
329
|
+
if (c.headSha !== d.sourceSha) {
|
|
330
|
+
ctx.addIssue({
|
|
331
|
+
code: "custom",
|
|
332
|
+
path: ["evidence", "requiredChecks", i, "headSha"],
|
|
333
|
+
message: `check "${c.name}" was evaluated on ${c.headSha}, not on the released source ${d.sourceSha}`
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
});
|
|
337
|
+
const artifactDigests = new Set(
|
|
338
|
+
d.artifacts.flatMap((a) => {
|
|
339
|
+
if (a.type === "oci-image") return [a.digest, ...a.platforms.map((p) => p.digest)];
|
|
340
|
+
if (a.type === "npm-package") return [a.integrity];
|
|
341
|
+
return [a.sha256];
|
|
342
|
+
})
|
|
343
|
+
);
|
|
344
|
+
d.evidence.scans.forEach((scan, i) => {
|
|
345
|
+
if (!artifactDigests.has(scan.scannedDigest)) {
|
|
346
|
+
ctx.addIssue({
|
|
347
|
+
code: "custom",
|
|
348
|
+
path: ["evidence", "scans", i, "scannedDigest"],
|
|
349
|
+
message: `scan targeted ${scan.scannedDigest}, which is not an artifact digest of this release`
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
});
|
|
353
|
+
});
|
|
354
|
+
var ReleaseIntentSchema = z.strictObject({
|
|
355
|
+
intentId: nonEmpty,
|
|
356
|
+
repositoryId: z.number().int().positive(),
|
|
357
|
+
repository: repositoryName,
|
|
358
|
+
sourceSha: gitSha,
|
|
359
|
+
channel,
|
|
360
|
+
/** The component IDs this intent is obliged to produce. A short set is a failure. */
|
|
361
|
+
expectedComponents: z.array(nonEmpty).min(1),
|
|
362
|
+
state: ReleaseStateSchema,
|
|
363
|
+
attempt: z.number().int().min(1),
|
|
364
|
+
queuedAt: utcTimestamp,
|
|
365
|
+
deadlineAt: utcTimestamp,
|
|
366
|
+
/** Reserved version, once allocated. Reservation survives a failed attempt. */
|
|
367
|
+
reservedVersion: semver.optional(),
|
|
368
|
+
/**
|
|
369
|
+
* The furthest stage this intent actually completed and verified.
|
|
370
|
+
*
|
|
371
|
+
* §6.5 requires "rerun the same intent from its LAST VERIFIED STAGE", and
|
|
372
|
+
* `state` alone cannot express that: the moment an attempt fails, `state`
|
|
373
|
+
* becomes `BLOCKED` and the stage it had reached is gone. Keeping the resume
|
|
374
|
+
* point only in the controller's own storage works right up until an intent
|
|
375
|
+
* crosses a process or repository boundary, at which point the trip silently
|
|
376
|
+
* costs you the resume and the retry rebuilds bytes that were already
|
|
377
|
+
* verified — which §6.5 explicitly forbids.
|
|
378
|
+
*/
|
|
379
|
+
lastVerifiedStage: ReleaseStateSchema.optional(),
|
|
380
|
+
/**
|
|
381
|
+
* The one terminal outcome `state` cannot express: this commit was audited and
|
|
382
|
+
* owes no release at all (a documentation-only change).
|
|
383
|
+
*
|
|
384
|
+
* It used to also carry BLOCKED / ABANDONED / SUPERSEDED_BY, which are already
|
|
385
|
+
* `state` values — so a record could say `state: BLOCKED, disposition:
|
|
386
|
+
* ABANDONED` and the contract permitted the contradiction. One fact belongs in
|
|
387
|
+
* one field; the duplicates are gone rather than merely discouraged.
|
|
388
|
+
*/
|
|
389
|
+
disposition: z.literal("NO_RELEASE_REQUIRED").optional(),
|
|
390
|
+
/** Required when state is SUPERSEDED_BY: the successor containing this commit. */
|
|
391
|
+
supersededBy: gitSha.optional(),
|
|
392
|
+
blockedReason: nonEmpty.optional(),
|
|
393
|
+
/**
|
|
394
|
+
* Lease held by the controller currently advancing this intent.
|
|
395
|
+
*
|
|
396
|
+
* §3 requires fencing tokens for leases, and without the lease ON the intent
|
|
397
|
+
* two controllers reading the same wire object cannot tell it is already
|
|
398
|
+
* claimed — they both proceed, and the fencing token that was supposed to
|
|
399
|
+
* settle the race exists only inside one of them. The token increases
|
|
400
|
+
* monotonically; a writer presenting a token older than the recorded one is
|
|
401
|
+
* refused.
|
|
402
|
+
*/
|
|
403
|
+
lease: z.strictObject({
|
|
404
|
+
holder: nonEmpty,
|
|
405
|
+
fencingToken: z.number().int().min(1),
|
|
406
|
+
expiresAt: utcTimestamp
|
|
407
|
+
}).optional()
|
|
408
|
+
}).superRefine((i, ctx) => {
|
|
409
|
+
if (i.state === "SUPERSEDED_BY" && !i.supersededBy) {
|
|
410
|
+
ctx.addIssue({
|
|
411
|
+
code: "custom",
|
|
412
|
+
path: ["supersededBy"],
|
|
413
|
+
message: "state SUPERSEDED_BY requires supersededBy to name the successor commit"
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
if (i.supersededBy && i.state !== "SUPERSEDED_BY") {
|
|
417
|
+
ctx.addIssue({
|
|
418
|
+
code: "custom",
|
|
419
|
+
path: ["state"],
|
|
420
|
+
message: `supersededBy is set but state is ${i.state}, not SUPERSEDED_BY`
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
if (i.state === "BLOCKED" && !i.blockedReason) {
|
|
424
|
+
ctx.addIssue({
|
|
425
|
+
code: "custom",
|
|
426
|
+
path: ["blockedReason"],
|
|
427
|
+
message: "state BLOCKED requires blockedReason \u2014 an unexplained block cannot be actioned"
|
|
428
|
+
});
|
|
429
|
+
}
|
|
430
|
+
const deadlineMs = parseInstant(i.deadlineAt);
|
|
431
|
+
const queuedMs = parseInstant(i.queuedAt);
|
|
432
|
+
if (deadlineMs === null || queuedMs === null) {
|
|
433
|
+
ctx.addIssue({
|
|
434
|
+
code: "custom",
|
|
435
|
+
path: ["deadlineAt"],
|
|
436
|
+
message: "deadlineAt and queuedAt must name real instants before they can be ordered"
|
|
437
|
+
});
|
|
438
|
+
} else if (deadlineMs < queuedMs) {
|
|
439
|
+
ctx.addIssue({
|
|
440
|
+
code: "custom",
|
|
441
|
+
path: ["deadlineAt"],
|
|
442
|
+
message: "deadlineAt precedes queuedAt"
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
});
|
|
446
|
+
var StackCompositionSchema = z.strictObject({
|
|
447
|
+
channel,
|
|
448
|
+
sequence: z.number().int().min(0),
|
|
449
|
+
compositionHash: sha256Hex,
|
|
450
|
+
previousSequence: z.number().int().min(0).nullable(),
|
|
451
|
+
/**
|
|
452
|
+
* MUST be sorted ascending by `componentId`, and the hasher MUST fold them in
|
|
453
|
+
* that order.
|
|
454
|
+
*
|
|
455
|
+
* `services` is an array, so `[a,b]` and `[b,a]` would otherwise be two
|
|
456
|
+
* documents describing one identical stack, each hashing differently. That
|
|
457
|
+
* would replace the clock with array order as a spurious release trigger —
|
|
458
|
+
* precisely the bug the absent timestamp above exists to prevent. Mandating
|
|
459
|
+
* the order in the CONTRACT, rather than only canonicalizing inside one
|
|
460
|
+
* hasher, means any independent implementation computes the same hash.
|
|
461
|
+
*/
|
|
462
|
+
services: z.array(
|
|
463
|
+
z.strictObject({
|
|
464
|
+
componentId: nonEmpty,
|
|
465
|
+
digest: ociDigest,
|
|
466
|
+
version: semver
|
|
467
|
+
})
|
|
468
|
+
).min(1).refine(
|
|
469
|
+
(svcs) => svcs.every((s, i) => i === 0 || svcs[i - 1].componentId < s.componentId),
|
|
470
|
+
{ message: "services must be sorted ascending by componentId, with no duplicates" }
|
|
471
|
+
),
|
|
472
|
+
compatibility: z.strictObject({
|
|
473
|
+
result: z.enum(["pass", "fail"]),
|
|
474
|
+
detail: nonEmpty.optional()
|
|
475
|
+
})
|
|
476
|
+
});
|
|
477
|
+
function issuePath(issue) {
|
|
478
|
+
if (issue.path.length === 0) return "$";
|
|
479
|
+
return `$.${issue.path.map((p) => typeof p === "number" ? `[${p}]` : String(p)).join(".").replace(/\.\[/g, "[")}`;
|
|
480
|
+
}
|
|
481
|
+
function parseReleaseDescriptor(raw) {
|
|
482
|
+
const value = parseJsonStrict(raw);
|
|
483
|
+
if (typeof value === "object" && value !== null && "schemaVersion" in value && value.schemaVersion !== DESCRIPTOR_SCHEMA_VERSION) {
|
|
484
|
+
throw new DeliverySchemaError(
|
|
485
|
+
"unsupported_schema_version",
|
|
486
|
+
"$.schemaVersion",
|
|
487
|
+
`this build understands schemaVersion ${DESCRIPTOR_SCHEMA_VERSION}, got ${String(
|
|
488
|
+
value.schemaVersion
|
|
489
|
+
)}`
|
|
490
|
+
);
|
|
491
|
+
}
|
|
492
|
+
return parseWith(ReleaseDescriptorSchema, value, "descriptor");
|
|
493
|
+
}
|
|
494
|
+
function parseWith(schema, value, label) {
|
|
495
|
+
const result = schema.safeParse(value);
|
|
496
|
+
if (!result.success) {
|
|
497
|
+
const first = result.error.issues[0];
|
|
498
|
+
throw new DeliverySchemaError(
|
|
499
|
+
"schema_invalid",
|
|
500
|
+
first ? issuePath(first) : "$",
|
|
501
|
+
first?.message ?? `${label} failed validation`
|
|
502
|
+
);
|
|
503
|
+
}
|
|
504
|
+
return result.data;
|
|
505
|
+
}
|
|
506
|
+
function parseEvidence(raw) {
|
|
507
|
+
return parseWith(EvidenceSchema, parseJsonStrict(raw), "evidence");
|
|
508
|
+
}
|
|
509
|
+
function parseReleaseIntent(raw) {
|
|
510
|
+
return parseWith(ReleaseIntentSchema, parseJsonStrict(raw), "release intent");
|
|
511
|
+
}
|
|
512
|
+
function parseStackComposition(raw) {
|
|
513
|
+
return parseWith(StackCompositionSchema, parseJsonStrict(raw), "stack composition");
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
export {
|
|
517
|
+
DeliverySchemaError,
|
|
518
|
+
parseJsonStrict,
|
|
519
|
+
GIT_SHA_RE,
|
|
520
|
+
OCI_DIGEST_RE,
|
|
521
|
+
NPM_INTEGRITY_RE,
|
|
522
|
+
RELEASE_TAG_RE,
|
|
523
|
+
SEMVER_RE,
|
|
524
|
+
UTC_TIMESTAMP_RE,
|
|
525
|
+
PLATFORM_RE,
|
|
526
|
+
SHA256_HEX_RE,
|
|
527
|
+
CHANNELS,
|
|
528
|
+
RELEASE_STATES,
|
|
529
|
+
ReleaseStateSchema,
|
|
530
|
+
RECOVERABLE_TERMINAL_STATES,
|
|
531
|
+
isRecoverableTerminal,
|
|
532
|
+
SCAN_RESULTS,
|
|
533
|
+
NOT_APPLICABLE_CLASSIFICATIONS,
|
|
534
|
+
EvidenceSchema,
|
|
535
|
+
ArtifactSchema,
|
|
536
|
+
ROLLBACK_CLASSES,
|
|
537
|
+
DESCRIPTOR_SCHEMA_VERSION,
|
|
538
|
+
ReleaseDescriptorSchema,
|
|
539
|
+
ReleaseIntentSchema,
|
|
540
|
+
StackCompositionSchema,
|
|
541
|
+
parseReleaseDescriptor,
|
|
542
|
+
parseEvidence,
|
|
543
|
+
parseReleaseIntent,
|
|
544
|
+
parseStackComposition
|
|
545
|
+
};
|
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
} from "./chunk-CBPNZFSU.js";
|
|
4
4
|
import {
|
|
5
5
|
initStore
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-UOPCVFVR.js";
|
|
7
7
|
import {
|
|
8
8
|
getClient,
|
|
9
9
|
isInitialized
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-GL47M7NY.js";
|
|
11
11
|
|
|
12
12
|
// src/lib/schedules.ts
|
|
13
13
|
import crypto from "crypto";
|
|
@@ -3,19 +3,19 @@ import {
|
|
|
3
3
|
getClient,
|
|
4
4
|
isInitialized,
|
|
5
5
|
loadEmployees
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-GL47M7NY.js";
|
|
7
7
|
import {
|
|
8
8
|
checkLicense,
|
|
9
9
|
isFeatureAllowed,
|
|
10
10
|
isPersonalFreeGrandfathered,
|
|
11
11
|
resolveClientLimits
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-TNS63ATU.js";
|
|
13
13
|
import {
|
|
14
14
|
PLAN_LIMITS
|
|
15
15
|
} from "./chunk-A7XLR3K7.js";
|
|
16
16
|
import {
|
|
17
17
|
EXE_AI_DIR
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-MMS2HBRT.js";
|
|
19
19
|
|
|
20
20
|
// src/lib/plan-limits.ts
|
|
21
21
|
import { readFileSync, existsSync } from "fs";
|