chainlesschain 0.166.129 → 0.166.131
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/README.md +24 -2
- package/package.json +2 -2
- package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
- package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/AIOps-CHItp4vg.js +1 -0
- package/src/assets/web-panel/assets/AIOps-Cchx1iXI.css +1 -0
- package/src/assets/web-panel/assets/{ActionButton-_zlP_Z6z.js → ActionButton-nhMNWW_d.js} +1 -1
- package/src/assets/web-panel/assets/Analytics-DRc81BBI.js +3 -0
- package/src/assets/web-panel/assets/Analytics-Dr-1kvaM.css +1 -0
- package/src/assets/web-panel/assets/AppLayout-BTBIIl1e.css +1 -0
- package/src/assets/web-panel/assets/AppLayout-CVt7HMkp.js +3 -0
- package/src/assets/web-panel/assets/Artifacts-BuJgG5jf.js +1 -0
- package/src/assets/web-panel/assets/Artifacts-Dohtjyfl.css +1 -0
- package/src/assets/web-panel/assets/Audit-DDnViLtj.css +1 -0
- package/src/assets/web-panel/assets/Audit-msNg0aH-.js +1 -0
- package/src/assets/web-panel/assets/BackgroundAgents-BpcV8yWC.js +1 -0
- package/src/assets/web-panel/assets/BackgroundAgents-CH3Uc9sF.css +1 -0
- package/src/assets/web-panel/assets/Backup-CYh10zO3.css +1 -0
- package/src/assets/web-panel/assets/Backup-P53DADwG.js +1 -0
- package/src/assets/web-panel/assets/BaseInput-DFxT2yWN.js +1 -0
- package/src/assets/web-panel/assets/Chat-B5JvvQJb.css +1 -0
- package/src/assets/web-panel/assets/Chat-BXoHisHW.js +7 -0
- package/src/assets/web-panel/assets/ChatBubbleRenderer-CO908iBt.css +1 -0
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DMGtSdDx.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-nMgYkH8H.js → Checkbox-B4g_ckJq.js} +1 -1
- package/src/assets/web-panel/assets/Codegen-BLP7id2a.css +1 -0
- package/src/assets/web-panel/assets/Codegen-C6SSSOfp.js +1 -0
- package/src/assets/web-panel/assets/{Col-i0owJaGP.js → Col-IO1NEUYL.js} +1 -1
- package/src/assets/web-panel/assets/Community-C2RejeOY.css +1 -0
- package/src/assets/web-panel/assets/Community-CdEBl93F.js +1 -0
- package/src/assets/web-panel/assets/{Compact-DDXrvvm-.js → Compact-DYs0a9k7.js} +1 -1
- package/src/assets/web-panel/assets/Compliance-BPnk7948.js +1 -0
- package/src/assets/web-panel/assets/Compliance-DOys4Ov1.css +1 -0
- package/src/assets/web-panel/assets/Cowork-DsOst4XK.css +1 -0
- package/src/assets/web-panel/assets/Cowork-VLOTGbza.js +6 -0
- package/src/assets/web-panel/assets/Cron-_9GgQLJo.js +2 -0
- package/src/assets/web-panel/assets/Crosschain-B21yn0qy.js +1 -0
- package/src/assets/web-panel/assets/Crosschain-C7Le4Pte.css +1 -0
- package/src/assets/web-panel/assets/DID-BX6k3jZi.css +1 -0
- package/src/assets/web-panel/assets/DID-mBeDgRZ7.js +2 -0
- package/src/assets/web-panel/assets/Dashboard-BckYYzhP.js +3 -0
- package/src/assets/web-panel/assets/Dashboard-MFDcsVcM.css +1 -0
- package/src/assets/web-panel/assets/Dropdown-DEedqFiE.js +1 -0
- package/src/assets/web-panel/assets/EmailListRenderer-CMs0k9TB.js +1 -0
- package/src/assets/web-panel/assets/EmailListRenderer-CVJ1j3Ll.css +1 -0
- package/src/assets/web-panel/assets/EvolutionSettings-B00Qd0fN.js +1 -0
- package/src/assets/web-panel/assets/EvolutionSettings-BnQ91YHJ.css +1 -0
- package/src/assets/web-panel/assets/FamilyGuardDashboard-Df-D09Q4.css +1 -0
- package/src/assets/web-panel/assets/FamilyGuardDashboard-DxMTAMa8.js +1 -0
- package/src/assets/web-panel/assets/Federation-B-UZw0LO.js +1 -0
- package/src/assets/web-panel/assets/Federation-CgmfLbx1.css +1 -0
- package/src/assets/web-panel/assets/FormItemContext-CkafazEw.js +1 -0
- package/src/assets/web-panel/assets/GenericCardRenderer-DEUG25ZJ.js +1 -0
- package/src/assets/web-panel/assets/GenericCardRenderer-DtJFcJYl.css +1 -0
- package/src/assets/web-panel/assets/Git-D7dr9oz9.js +2 -0
- package/src/assets/web-panel/assets/{Git-BdHhxBWR.css → Git-DPuaGtg7.css} +1 -1
- package/src/assets/web-panel/assets/Governance-BoipmXaM.css +1 -0
- package/src/assets/web-panel/assets/Governance-DKlUJ1wg.js +1 -0
- package/src/assets/web-panel/assets/Inference-BJKqplap.js +1 -0
- package/src/assets/web-panel/assets/Inference-BWxYJF9-.css +1 -0
- package/src/assets/web-panel/assets/KnowledgeGraph-B78fB-bz.js +1 -0
- package/src/assets/web-panel/assets/KnowledgeGraph-CztPDA96.css +1 -0
- package/src/assets/web-panel/assets/Logs-DJGcHYH_.js +2 -0
- package/src/assets/web-panel/assets/Logs-Gf_Mv9Nx.css +1 -0
- package/src/assets/web-panel/assets/MarkdownRenderer-BAxj61I3.css +1 -0
- package/src/assets/web-panel/assets/MarkdownRenderer-DkcG_MxW.js +1 -0
- package/src/assets/web-panel/assets/Marketplace-Djp5q9dS.css +1 -0
- package/src/assets/web-panel/assets/Marketplace-ucTbwByD.js +1 -0
- package/src/assets/web-panel/assets/McpTools-Cu1xZYYk.js +2 -0
- package/src/assets/web-panel/assets/McpTools-DSGHWYS_.css +1 -0
- package/src/assets/web-panel/assets/Memory-Bcc2hxOA.css +1 -0
- package/src/assets/web-panel/assets/Memory-DCGpXmi-.js +2 -0
- package/src/assets/web-panel/assets/MobileBridge-BQ-Uwwg7.css +1 -0
- package/src/assets/web-panel/assets/MobileBridge-BnKr0aAS.js +1 -0
- package/src/assets/web-panel/assets/MobileProjects-C5UvYJTP.js +1 -0
- package/src/assets/web-panel/assets/MobileProjects-Ceaxrqzc.css +1 -0
- package/src/assets/web-panel/assets/Mtc-D1UUl4WH.js +6 -0
- package/src/assets/web-panel/assets/Mtc-DHwbdUqA.css +1 -0
- package/src/assets/web-panel/assets/MtcAudit-B0x8gahq.css +1 -0
- package/src/assets/web-panel/assets/MtcAudit-D3aa8XP4.js +19 -0
- package/src/assets/web-panel/assets/Multisig-DiXdfJjO.js +7 -0
- package/src/assets/web-panel/assets/Multisig-kwPDnXnl.css +1 -0
- package/src/assets/web-panel/assets/NLProgramming-CLOvy-35.css +1 -0
- package/src/assets/web-panel/assets/NLProgramming-DbWABgSE.js +1 -0
- package/src/assets/web-panel/assets/Notes-BP1DPl-R.js +7 -0
- package/src/assets/web-panel/assets/Notes-COE2q2gD.css +1 -0
- package/src/assets/web-panel/assets/NotificationSettings-Co0e0uEO.css +1 -0
- package/src/assets/web-panel/assets/NotificationSettings-xaB6ONe7.js +1 -0
- package/src/assets/web-panel/assets/OrderTableRenderer-BnOISpKI.css +1 -0
- package/src/assets/web-panel/assets/OrderTableRenderer-D1uNcz3b.js +1 -0
- package/src/assets/web-panel/assets/Organization-BM3Lh8Q8.css +1 -0
- package/src/assets/web-panel/assets/Organization-DMLDGaf1.js +4 -0
- package/src/assets/web-panel/assets/{Overflow-CaRUAOY_.js → Overflow-DH4QPEoI.js} +1 -1
- package/src/assets/web-panel/assets/{OverrideContext-C0w0P4A3.js → OverrideContext-DLR1AtLy.js} +1 -1
- package/src/assets/web-panel/assets/P2P-Bl4OS10o.js +2 -0
- package/src/assets/web-panel/assets/P2P-Cx88UaiD.css +1 -0
- package/src/assets/web-panel/assets/PdhVaultBrowser-B9ZGFpn4.css +1 -0
- package/src/assets/web-panel/assets/PdhVaultBrowser-D9XSE2YI.js +7 -0
- package/src/assets/web-panel/assets/Permissions-CUaPlr6d.js +4 -0
- package/src/assets/web-panel/assets/Permissions-Diejgkbs.css +1 -0
- package/src/assets/web-panel/assets/PersonalDataHub-Ba92dZk-.js +3 -0
- package/src/assets/web-panel/assets/PersonalDataHub-C_xhspRy.css +1 -0
- package/src/assets/web-panel/assets/Pipeline-Bh2okm-8.js +1 -0
- package/src/assets/web-panel/assets/Pipeline-DxkXqrH2.css +1 -0
- package/src/assets/web-panel/assets/Privacy-Bmq3p4gC.js +1 -0
- package/src/assets/web-panel/assets/Privacy-CrsfSFKd.css +1 -0
- package/src/assets/web-panel/assets/ProjectInit-BPu2fdKR.js +2 -0
- package/src/assets/web-panel/assets/ProjectInit-CteEo-wF.css +1 -0
- package/src/assets/web-panel/assets/ProjectSettings-D6ABLpmt.js +2 -0
- package/src/assets/web-panel/assets/ProjectSettings-pLSae-wy.css +1 -0
- package/src/assets/web-panel/assets/Projects-BX-SG9R4.css +1 -0
- package/src/assets/web-panel/assets/Projects-qWHEve0z.js +1 -0
- package/src/assets/web-panel/assets/Providers-CpAXh_6c.css +1 -0
- package/src/assets/web-panel/assets/Providers-D9DI-2hc.js +1 -0
- package/src/assets/web-panel/assets/{QrScannerModal-fFkycCT4.js → QrScannerModal-CxifoeD5.js} +1 -1
- package/src/assets/web-panel/assets/QrScannerModal-DFrn7rxS.css +1 -0
- package/src/assets/web-panel/assets/QuickAsk-DC1BvwR7.js +1 -0
- package/src/assets/web-panel/assets/Recommend-CH6wKzGo.css +1 -0
- package/src/assets/web-panel/assets/Recommend-CKqbMB5o.js +1 -0
- package/src/assets/web-panel/assets/RemoteSession-BGGzPdS5.js +5 -0
- package/src/assets/web-panel/assets/Reputation-D6VPNEd0.css +1 -0
- package/src/assets/web-panel/assets/Reputation-DH90O9-5.js +1 -0
- package/src/assets/web-panel/assets/Row-h7ovueJc.js +1 -0
- package/src/assets/web-panel/assets/RssFeed-Cze7YLaG.css +1 -0
- package/src/assets/web-panel/assets/RssFeed-DaHxXTZg.js +3 -0
- package/src/assets/web-panel/assets/Search-B6RalzTB.css +1 -0
- package/src/assets/web-panel/assets/Search-Bn6Nqpn4.js +1 -0
- package/src/assets/web-panel/assets/Security-13K57V_v.css +1 -0
- package/src/assets/web-panel/assets/Security-ClbBmPJi.js +4 -0
- package/src/assets/web-panel/assets/Services-C8Qs6KXv.css +1 -0
- package/src/assets/web-panel/assets/Services-ChHLQwRn.js +2 -0
- package/src/assets/web-panel/assets/{Skeleton-ASRgSh_Y.js → Skeleton-DfN6BFzt.js} +1 -1
- package/src/assets/web-panel/assets/Skills-BdjRyorN.css +1 -0
- package/src/assets/web-panel/assets/Skills-C926wDev.js +1 -0
- package/src/assets/web-panel/assets/Sla-DJzi1l1M.js +1 -0
- package/src/assets/web-panel/assets/Sla-K19oOyQc.css +1 -0
- package/src/assets/web-panel/assets/SpeechSettings-DYPJTDKz.css +1 -0
- package/src/assets/web-panel/assets/SpeechSettings-_GSyVjm_.js +1 -0
- package/src/assets/web-panel/assets/SyncSettings-B67xnERe.js +1 -0
- package/src/assets/web-panel/assets/SyncSettings-C6cDrwDR.css +1 -0
- package/src/assets/web-panel/assets/Tasks-BJjN_YEm.css +1 -0
- package/src/assets/web-panel/assets/Tasks-BaYZadcG.js +1 -0
- package/src/assets/web-panel/assets/Templates-BsMmCdZI.css +1 -0
- package/src/assets/web-panel/assets/Templates-Bu8kN1Xt.js +1 -0
- package/src/assets/web-panel/assets/Tenant-BM9qufw1.js +1 -0
- package/src/assets/web-panel/assets/Tenant-D3zkSAV0.css +1 -0
- package/src/assets/web-panel/assets/Terminal-MEdd5DjB.js +3 -0
- package/src/assets/web-panel/assets/Terminal-qPp9MaPu.css +1 -0
- package/src/assets/web-panel/assets/TimelineRenderer-C27kL2oU.js +1 -0
- package/src/assets/web-panel/assets/TimelineRenderer-DmztdsbF.css +1 -0
- package/src/assets/web-panel/assets/Tokens-BBOdNRHQ.css +1 -0
- package/src/assets/web-panel/assets/Tokens-Cvjd98VC.js +1 -0
- package/src/assets/web-panel/assets/{Trigger-DgGU_D0o.js → Trigger-CLym84HI.js} +1 -1
- package/src/assets/web-panel/assets/Trust-Bv2JTaNN.js +1 -0
- package/src/assets/web-panel/assets/Trust-DeOo0xAh.css +1 -0
- package/src/assets/web-panel/assets/UkeySign-CSCkNbtm.js +1 -0
- package/src/assets/web-panel/assets/VideoEditing-BFDXB4xh.js +1 -0
- package/src/assets/web-panel/assets/VideoEditing-DksiizfS.css +1 -0
- package/src/assets/web-panel/assets/Wallet-CMEFrG_b.js +4 -0
- package/src/assets/web-panel/assets/Wallet-Dw8uV4Ug.css +1 -0
- package/src/assets/web-panel/assets/WebAuthn-DKx6xPPl.css +1 -0
- package/src/assets/web-panel/assets/WebAuthn-x4eO_Q4y.js +5 -0
- package/src/assets/web-panel/assets/WorkflowEditor-ClWEPgV1.js +1 -0
- package/src/assets/web-panel/assets/WorkflowEditor-IiwsD8Kh.css +1 -0
- package/src/assets/web-panel/assets/{_getTag-DnrRH4E6.js → _getTag-BVc6NQ_K.js} +1 -1
- package/src/assets/web-panel/assets/{chat-C_kELmV6.js → chat-BdYOI4gM.js} +1 -1
- package/src/assets/web-panel/assets/{collapseMotion-CqM1QOwM.js → collapseMotion-B4IZiILV.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DE-ZxAv_.js → colors-DcTBrGvS.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BowulLDi.js → compact-item-Dn2ktVuj.js} +1 -1
- package/src/assets/web-panel/assets/createContext-XTreuyqp.js +1 -0
- package/src/assets/web-panel/assets/{debounce-CFGTTtN3.js → debounce-D9xTw4Sx.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-CNIS3FrJ.js +1 -0
- package/src/assets/web-panel/assets/echarts-CDp6K7pj.js +19 -0
- package/src/assets/web-panel/assets/{hasIn-Be7mK-iw.js → hasIn-CFRNsYQd.js} +1 -1
- package/src/assets/web-panel/assets/{icons-DG5UD-6K.js → icons-DlxlFL4g.js} +4 -4
- package/src/assets/web-panel/assets/index-3RqDry-K.js +71 -0
- package/src/assets/web-panel/assets/{index-nLHTuHoT.js → index-8METW_Wr.js} +1 -1
- package/src/assets/web-panel/assets/index-BBd64wj8.js +31 -0
- package/src/assets/web-panel/assets/index-BEyVNbNE.js +3 -0
- package/src/assets/web-panel/assets/index-BMLpP8QQ.js +1 -0
- package/src/assets/web-panel/assets/{index-DMKo49Um.js → index-BSqydcDa.js} +1 -1
- package/src/assets/web-panel/assets/index-BV6LojRv.js +21 -0
- package/src/assets/web-panel/assets/index-BbMWvjLZ.js +1 -0
- package/src/assets/web-panel/assets/{index-DjC2TJeH.js → index-Brc0BF-k.js} +2 -2
- package/src/assets/web-panel/assets/{index-3Ql7xQLn.js → index-CG9YLDmI.js} +1 -1
- package/src/assets/web-panel/assets/{index-lN916819.js → index-CNHWMMDX.js} +1 -1
- package/src/assets/web-panel/assets/{index-DLCzaLH4.js → index-COuEJdmr.js} +3 -3
- package/src/assets/web-panel/assets/{index-BdzVLz-c.js → index-CRW3AWdS.js} +1 -1
- package/src/assets/web-panel/assets/{index-_cYsz4df.js → index-CUT4h5JB.js} +2 -2
- package/src/assets/web-panel/assets/index-CXMa7Z-S.js +1 -0
- package/src/assets/web-panel/assets/index-CbaPXyNc.js +19 -0
- package/src/assets/web-panel/assets/{index-Cq93VfoF.css → index-CfX1DEtk.css} +1 -1
- package/src/assets/web-panel/assets/{index-OH54KMLN.js → index-CjHA_Q7s.js} +1 -1
- package/src/assets/web-panel/assets/index-CsnYp4qF.js +1 -0
- package/src/assets/web-panel/assets/index-D45vulkq.js +12 -0
- package/src/assets/web-panel/assets/index-D9kPBEqD.js +55 -0
- package/src/assets/web-panel/assets/index-DDTSgpXz.js +1 -0
- package/src/assets/web-panel/assets/index-DFl_a0n5.js +1 -0
- package/src/assets/web-panel/assets/index-DNdiAymC.js +1 -0
- package/src/assets/web-panel/assets/{index-DEDVYN7D.js → index-DQEu7uW0.js} +1 -1
- package/src/assets/web-panel/assets/index-DW9XncMy.js +21 -0
- package/src/assets/web-panel/assets/index-Daa1yCt_.js +1 -0
- package/src/assets/web-panel/assets/index-DdVpoNEQ.js +12 -0
- package/src/assets/web-panel/assets/index-Dhi4Oybt.js +1 -0
- package/src/assets/web-panel/assets/index-DoVoNjtJ.js +1 -0
- package/src/assets/web-panel/assets/{index-Ao-LXr-d.js → index-Vo7A4aiN.js} +4 -4
- package/src/assets/web-panel/assets/{index-LVrxqU88.js → index-XdlYkgCa.js} +1 -1
- package/src/assets/web-panel/assets/{index-4KkYmFy5.js → index-ir2ZwWz5.js} +2 -2
- package/src/assets/web-panel/assets/index-kzyCd8a0.js +3 -0
- package/src/assets/web-panel/assets/{index-Cvy4vdVW.js → index-lnTt0Jps.js} +2 -2
- package/src/assets/web-panel/assets/{index-D3lOYd9_.js → index-ma-rJkfE.js} +1 -1
- package/src/assets/web-panel/assets/index-oE4jTpHK.js +13 -0
- package/src/assets/web-panel/assets/{index-CXvy8HrM.js → index-r5sNECM5.js} +1 -1
- package/src/assets/web-panel/assets/index-uT4fRDzU.js +1 -0
- package/src/assets/web-panel/assets/index-xlS8pDS2.js +1 -0
- package/src/assets/web-panel/assets/{initDefaultProps-BNhziAal.js → initDefaultProps-mdL0oeZa.js} +1 -1
- package/src/assets/web-panel/assets/{isPlainObject-BWRMT62c.js → isPlainObject-_gz-soRW.js} +1 -1
- package/src/assets/web-panel/assets/isSymbol-DAy2hlR5.js +1 -0
- package/src/assets/web-panel/assets/motion-ZgVCKcEX.js +11 -0
- package/src/assets/web-panel/assets/{move-rFx211Cl.js → move-A_28O5T2.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-CEP1wN3R.js → mtc-parser-0zlMjabo.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DacHd_Zm.js → omit-DF7mU3yG.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-Dqp58Ep2.js → pickAttrs-Cmt8liJP.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-Cv6Rm0pV.js → placementArrow-DaMDC57b.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-rNE0p9ZW.js → responsiveObserve-CHw_f2d3.js} +1 -1
- package/src/assets/web-panel/assets/{slide-C97JxD4S.js → slide-DJS9fFQq.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-Cxk1gV9M.js → statusUtils-Bk3XdZwh.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CbtKKsPo.js → styleChecker-DMybAFsA.js} +1 -1
- package/src/assets/web-panel/assets/useFlexGapSupport-_tbIIFMu.js +1 -0
- package/src/assets/web-panel/assets/{useFs-6c7qrpE_.js → useFs-KPklVptS.js} +1 -1
- package/src/assets/web-panel/assets/{useMergedState-DXbJa_zE.js → useMergedState-d-EXs3xd.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-OjxtBGe7.js → usePersonalDataHub-C7FrKDhD.js} +1 -1
- package/src/assets/web-panel/assets/{useRefs-BrCfMLMc.js → useRefs-DHeCQehi.js} +1 -1
- package/src/assets/web-panel/assets/{useState-CnxtbLoC.js → useState-Dlgl7fUg.js} +1 -1
- package/src/assets/web-panel/assets/vendor-BXcBOG8b.js +1 -0
- package/src/assets/web-panel/assets/vnode-DB3JBusp.js +1 -0
- package/src/assets/web-panel/assets/warning-Pq00owYb.js +1 -0
- package/src/assets/web-panel/assets/{zoom-Cc1qKiSZ.js → zoom-C8rAdf81.js} +1 -1
- package/src/assets/web-panel/index.html +4 -4
- package/src/command-help-index.json +1 -1
- package/src/commands/agent.js +1 -1
- package/src/commands/governed-skill-marketplace.js +24 -10
- package/src/commands/llm.js +4 -3
- package/src/constants.js +1 -1
- package/src/data/changelog.json +27 -1
- package/src/harness/worktree-isolator.js +4 -1
- package/src/lib/compaction-host-provenance.js +24 -0
- package/src/lib/context-memory-kernel/durable-memory-port.js +46 -34
- package/src/lib/context-memory-kernel/live-compaction.js +12 -3
- package/src/lib/context-memory-kernel/memory-query-bundle.js +375 -0
- package/src/lib/context-memory-kernel/memory-query-control.js +28 -0
- package/src/lib/context-memory-kernel/memory-service.js +30 -16
- package/src/lib/context-memory-kernel/memory-shard-snapshots.js +63 -0
- package/src/lib/context-memory-kernel/provider-context.js +55 -24
- package/src/lib/context-memory-kernel/segmented-memory-port.js +347 -138
- package/src/lib/cost-budget.js +2 -0
- package/src/lib/ephemeral-worktree-scope.js +24 -0
- package/src/lib/evolution/evolution-deployment-loader.js +6 -4
- package/src/lib/evolution/governed-skill-marketplace-abort.js +14 -0
- package/src/lib/evolution/governed-skill-marketplace-candidate.js +10 -2
- package/src/lib/evolution/governed-skill-marketplace-cli-host.js +47 -20
- package/src/lib/evolution/governed-skill-marketplace.js +47 -24
- package/src/lib/goal-assess.js +4 -1
- package/src/lib/goal-check-evidence.js +77 -9
- package/src/lib/goal-condition-engine.js +20 -3
- package/src/lib/goal-model-call.js +107 -0
- package/src/lib/goal-verification-command.js +221 -0
- package/src/lib/goal-verification-plan.js +372 -0
- package/src/lib/goal-workspace-evidence.js +299 -0
- package/src/lib/llm-connection-probe.js +12 -5
- package/src/lib/llm-onboarding-catalog.json +2 -2
- package/src/lib/llm-pricing.js +34 -8
- package/src/lib/llm-providers.js +1 -0
- package/src/lib/mcp-tool-catalog-authority.js +244 -0
- package/src/lib/model-capabilities.js +6 -0
- package/src/lib/model-catalog-review.js +3 -0
- package/src/lib/model-context-catalog.js +44 -2
- package/src/lib/openai-responses.js +35 -6
- package/src/lib/sub-agent-context.js +12 -4
- package/src/lib/subagent-inheritance.js +162 -2
- package/src/lib/task-model-selector.js +1 -1
- package/src/lib/usage-pricing-context.js +34 -17
- package/src/repl/agent-repl.js +34 -2
- package/src/runtime/agent-core.js +226 -10
- package/src/runtime/compaction-host-context.js +72 -0
- package/src/runtime/headless-runner.js +331 -141
- package/src/runtime/headless-stream.js +38 -21
- package/src/runtime/mcp-agent-catalog.js +257 -0
- package/src/runtime/mcp-config.js +18 -69
- package/src/runtime/mcp-tool-search.js +16 -1
- package/src/runtime/system-prompt.js +9 -0
- package/src/assets/web-panel/assets/AIOps-CSpp7iGY.css +0 -1
- package/src/assets/web-panel/assets/AIOps-CjPaaF2r.js +0 -1
- package/src/assets/web-panel/assets/Analytics-C7X31L8l.js +0 -3
- package/src/assets/web-panel/assets/Analytics-DJcHjy5J.css +0 -1
- package/src/assets/web-panel/assets/AppLayout-BmYa34Se.js +0 -9
- package/src/assets/web-panel/assets/AppLayout-VlanTjPw.css +0 -1
- package/src/assets/web-panel/assets/Artifacts-B_YKNjlp.js +0 -1
- package/src/assets/web-panel/assets/Artifacts-CTVt96zW.css +0 -1
- package/src/assets/web-panel/assets/Audit-5JsI67XQ.js +0 -1
- package/src/assets/web-panel/assets/Audit-D8oxP0wr.css +0 -1
- package/src/assets/web-panel/assets/BackgroundAgents-BL3QbzvS.js +0 -1
- package/src/assets/web-panel/assets/BackgroundAgents-Dq2340Kl.css +0 -1
- package/src/assets/web-panel/assets/Backup-BRmg-gTa.js +0 -1
- package/src/assets/web-panel/assets/Backup-Wi9CaP3d.css +0 -1
- package/src/assets/web-panel/assets/BaseInput-DNE7mT3K.js +0 -1
- package/src/assets/web-panel/assets/Chat-KSGPtU0L.css +0 -1
- package/src/assets/web-panel/assets/Chat-OYwAopdM.js +0 -8
- package/src/assets/web-panel/assets/ChatBubbleRenderer-Dtxw3Wgt.js +0 -1
- package/src/assets/web-panel/assets/ChatBubbleRenderer-gy5SDGw2.css +0 -1
- package/src/assets/web-panel/assets/Codegen-B9G2ngLI.js +0 -1
- package/src/assets/web-panel/assets/Codegen-BB08p1fn.css +0 -1
- package/src/assets/web-panel/assets/Community-B3Ta0mI_.js +0 -1
- package/src/assets/web-panel/assets/Community-Cbq1nrpo.css +0 -1
- package/src/assets/web-panel/assets/Compliance-Bn4Uq6U1.js +0 -1
- package/src/assets/web-panel/assets/Compliance-NoXr2Vof.css +0 -1
- package/src/assets/web-panel/assets/Cowork-BlXJRu6L.css +0 -1
- package/src/assets/web-panel/assets/Cowork-CO5NKD6r.js +0 -6
- package/src/assets/web-panel/assets/Cron-ByjNese0.js +0 -2
- package/src/assets/web-panel/assets/Crosschain-BN1FUYyi.js +0 -1
- package/src/assets/web-panel/assets/Crosschain-CgRAecoR.css +0 -1
- package/src/assets/web-panel/assets/DID-CUFX5RL3.js +0 -2
- package/src/assets/web-panel/assets/DID-DVsYcgvs.css +0 -1
- package/src/assets/web-panel/assets/Dashboard-CAPSdFR4.css +0 -1
- package/src/assets/web-panel/assets/Dashboard-D_2FDPBP.js +0 -3
- package/src/assets/web-panel/assets/Dropdown-lGOMtIzb.js +0 -1
- package/src/assets/web-panel/assets/EmailListRenderer-DA3Qf1S2.js +0 -1
- package/src/assets/web-panel/assets/EmailListRenderer-DTPZPx_S.css +0 -1
- package/src/assets/web-panel/assets/EvolutionSettings-Bdw8ApoT.css +0 -1
- package/src/assets/web-panel/assets/EvolutionSettings-DLcnicCr.js +0 -1
- package/src/assets/web-panel/assets/FamilyGuardDashboard-BPOSaIN1.js +0 -1
- package/src/assets/web-panel/assets/FamilyGuardDashboard-nd3idUVb.css +0 -1
- package/src/assets/web-panel/assets/Federation-DzJUCQq8.js +0 -1
- package/src/assets/web-panel/assets/Federation-fGN6iMX_.css +0 -1
- package/src/assets/web-panel/assets/FormItemContext-DVx1XNKx.js +0 -2
- package/src/assets/web-panel/assets/GenericCardRenderer-BkqzO_lh.js +0 -1
- package/src/assets/web-panel/assets/GenericCardRenderer-o85VDYQS.css +0 -1
- package/src/assets/web-panel/assets/Git-Dr_rdT_j.js +0 -2
- package/src/assets/web-panel/assets/Governance-DtCS4NDm.css +0 -1
- package/src/assets/web-panel/assets/Governance-DyVkZddw.js +0 -1
- package/src/assets/web-panel/assets/Inference-IN2YDd4v.js +0 -1
- package/src/assets/web-panel/assets/Inference-t-w0NgIS.css +0 -1
- package/src/assets/web-panel/assets/KnowledgeGraph-4NU1S2Xm.css +0 -1
- package/src/assets/web-panel/assets/KnowledgeGraph-Ceiy4n6N.js +0 -1
- package/src/assets/web-panel/assets/Logs-DQbCaYhL.css +0 -1
- package/src/assets/web-panel/assets/Logs-d7pIEAX2.js +0 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-DbzhFwvz.css +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-DmSl0MNI.js +0 -1
- package/src/assets/web-panel/assets/Marketplace-Bvo5cuGa.css +0 -1
- package/src/assets/web-panel/assets/Marketplace-uVE7U14g.js +0 -1
- package/src/assets/web-panel/assets/McpTools-534Q95Mx.css +0 -1
- package/src/assets/web-panel/assets/McpTools-DUfBM--y.js +0 -4
- package/src/assets/web-panel/assets/Memory-6gkcR02J.js +0 -2
- package/src/assets/web-panel/assets/Memory-CleW_R6V.css +0 -1
- package/src/assets/web-panel/assets/MobileBridge-Cl6ys2O9.js +0 -1
- package/src/assets/web-panel/assets/MobileBridge-D3Arxfeg.css +0 -1
- package/src/assets/web-panel/assets/MobileProjects-5P8jN4gf.js +0 -1
- package/src/assets/web-panel/assets/MobileProjects-BD4alw6-.css +0 -1
- package/src/assets/web-panel/assets/Mtc-CXZGO9Sh.css +0 -1
- package/src/assets/web-panel/assets/Mtc-DtiT1Kol.js +0 -6
- package/src/assets/web-panel/assets/MtcAudit-C1JM8esp.css +0 -1
- package/src/assets/web-panel/assets/MtcAudit-DZz8iiTE.js +0 -19
- package/src/assets/web-panel/assets/Multisig-BryR2Jpr.css +0 -1
- package/src/assets/web-panel/assets/Multisig-DFH3-fBJ.js +0 -13
- package/src/assets/web-panel/assets/NLProgramming-BYNuDOt-.js +0 -1
- package/src/assets/web-panel/assets/NLProgramming-DGDHq6Z9.css +0 -1
- package/src/assets/web-panel/assets/Notes-BCY4jgYy.js +0 -7
- package/src/assets/web-panel/assets/Notes-BKKmMtqV.css +0 -1
- package/src/assets/web-panel/assets/NotificationSettings-Bk2ltghU.js +0 -1
- package/src/assets/web-panel/assets/NotificationSettings-CG3Kfuef.css +0 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-CfrDjSHT.css +0 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-OdeXEGAn.js +0 -1
- package/src/assets/web-panel/assets/Organization-CY4_mSiV.js +0 -4
- package/src/assets/web-panel/assets/Organization-LVvqwG0D.css +0 -1
- package/src/assets/web-panel/assets/P2P-Bd96rBWQ.js +0 -2
- package/src/assets/web-panel/assets/P2P-DcFvP7F-.css +0 -1
- package/src/assets/web-panel/assets/PdhVaultBrowser-DZZrUOr1.css +0 -1
- package/src/assets/web-panel/assets/PdhVaultBrowser-JjnExxan.js +0 -7
- package/src/assets/web-panel/assets/Permissions-CW1PUJB0.js +0 -4
- package/src/assets/web-panel/assets/Permissions-DsPE_IQy.css +0 -1
- package/src/assets/web-panel/assets/PersonalDataHub-BNn9alTk.js +0 -9
- package/src/assets/web-panel/assets/PersonalDataHub-BhpRlh9D.css +0 -1
- package/src/assets/web-panel/assets/Pipeline-01_PBiUu.js +0 -1
- package/src/assets/web-panel/assets/Pipeline-BItr5CyP.css +0 -1
- package/src/assets/web-panel/assets/Privacy-BP4DlVGb.js +0 -1
- package/src/assets/web-panel/assets/Privacy-F_ENsxZk.css +0 -1
- package/src/assets/web-panel/assets/ProjectInit-B86LEzDL.css +0 -1
- package/src/assets/web-panel/assets/ProjectInit-CAMnQj4n.js +0 -2
- package/src/assets/web-panel/assets/ProjectSettings-DK7KA_iX.css +0 -1
- package/src/assets/web-panel/assets/ProjectSettings-DKxV5On_.js +0 -2
- package/src/assets/web-panel/assets/Projects-B_4kRnM8.js +0 -1
- package/src/assets/web-panel/assets/Projects-CmJeUDBW.css +0 -1
- package/src/assets/web-panel/assets/Providers-C6q_fvea.css +0 -1
- package/src/assets/web-panel/assets/Providers-DeqqZyUv.js +0 -1
- package/src/assets/web-panel/assets/QrScannerModal-NwAHNfiJ.css +0 -1
- package/src/assets/web-panel/assets/QuickAsk-Ln6qQidy.js +0 -1
- package/src/assets/web-panel/assets/Recommend-D_bf91K6.css +0 -1
- package/src/assets/web-panel/assets/Recommend-DeENA-y0.js +0 -1
- package/src/assets/web-panel/assets/RemoteSession-CRxSYxo4.js +0 -5
- package/src/assets/web-panel/assets/Reputation-B2kU2F0l.js +0 -1
- package/src/assets/web-panel/assets/Reputation-DiOsOleI.css +0 -1
- package/src/assets/web-panel/assets/Row-lV_nLlFq.js +0 -1
- package/src/assets/web-panel/assets/RssFeed-CjcbkyUb.css +0 -1
- package/src/assets/web-panel/assets/RssFeed-Df21mCdF.js +0 -3
- package/src/assets/web-panel/assets/Search-8_Dz4qU9.js +0 -1
- package/src/assets/web-panel/assets/Search-Klk29S7C.css +0 -1
- package/src/assets/web-panel/assets/Security-BmrukMHn.css +0 -1
- package/src/assets/web-panel/assets/Security-Cl5-PEcp.js +0 -4
- package/src/assets/web-panel/assets/Services-C5qgCqA7.js +0 -2
- package/src/assets/web-panel/assets/Services-DAnVNhUG.css +0 -1
- package/src/assets/web-panel/assets/Skills-BUu9owbR.css +0 -1
- package/src/assets/web-panel/assets/Skills-DWx01ZJ7.js +0 -1
- package/src/assets/web-panel/assets/Sla-I2gbgtW8.js +0 -1
- package/src/assets/web-panel/assets/Sla-sodqCU4a.css +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-BqTikzfe.js +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-CgB9nFyq.css +0 -1
- package/src/assets/web-panel/assets/SyncSettings-B3hJqmBP.css +0 -1
- package/src/assets/web-panel/assets/SyncSettings-D3zCpBFV.js +0 -2
- package/src/assets/web-panel/assets/Tasks-DjMWII45.js +0 -1
- package/src/assets/web-panel/assets/Tasks-nbTUVXvt.css +0 -1
- package/src/assets/web-panel/assets/Templates-CpFsKk_l.css +0 -1
- package/src/assets/web-panel/assets/Templates-Cq7qDnHX.js +0 -1
- package/src/assets/web-panel/assets/Tenant-DEasKDpQ.js +0 -1
- package/src/assets/web-panel/assets/Tenant-MuPJnOjk.css +0 -1
- package/src/assets/web-panel/assets/Terminal-DHoveJwj.css +0 -1
- package/src/assets/web-panel/assets/Terminal-J6fLkTzi.js +0 -3
- package/src/assets/web-panel/assets/TimelineRenderer-BlTAtkOc.css +0 -1
- package/src/assets/web-panel/assets/TimelineRenderer-CNvWrWN-.js +0 -1
- package/src/assets/web-panel/assets/Tokens-BSgHJCKH.js +0 -1
- package/src/assets/web-panel/assets/Tokens-CynVae-o.css +0 -1
- package/src/assets/web-panel/assets/Trust-BANlv-uB.js +0 -1
- package/src/assets/web-panel/assets/Trust-C-WrW0Fj.css +0 -1
- package/src/assets/web-panel/assets/UkeySign-qh8GPRsU.js +0 -1
- package/src/assets/web-panel/assets/VideoEditing-BDFghpzP.css +0 -1
- package/src/assets/web-panel/assets/VideoEditing-DBiGTB4H.js +0 -1
- package/src/assets/web-panel/assets/Wallet-DMUFR7cL.js +0 -4
- package/src/assets/web-panel/assets/Wallet-DUbpTRcg.css +0 -1
- package/src/assets/web-panel/assets/WebAuthn-CVAFRfCQ.css +0 -1
- package/src/assets/web-panel/assets/WebAuthn-DP9nQQzW.js +0 -5
- package/src/assets/web-panel/assets/WorkflowEditor-429lPWYk.css +0 -1
- package/src/assets/web-panel/assets/WorkflowEditor-DT_6jDkL.js +0 -1
- package/src/assets/web-panel/assets/createContext-DCh8oMBQ.js +0 -1
- package/src/assets/web-panel/assets/devWarning-BVvJAp91.js +0 -1
- package/src/assets/web-panel/assets/echarts-C61Vn3mP.js +0 -25
- package/src/assets/web-panel/assets/index-6OluUVJJ.js +0 -55
- package/src/assets/web-panel/assets/index-B-3EDOlf.js +0 -1
- package/src/assets/web-panel/assets/index-B7IhCfsh.js +0 -1
- package/src/assets/web-panel/assets/index-BDIIR8g6.js +0 -1
- package/src/assets/web-panel/assets/index-BMrbe_Ey.js +0 -1
- package/src/assets/web-panel/assets/index-BlzMqaWB.js +0 -1
- package/src/assets/web-panel/assets/index-BwY31W-u.js +0 -12
- package/src/assets/web-panel/assets/index-C2pCquZC.js +0 -1
- package/src/assets/web-panel/assets/index-CKmC6ugN.js +0 -1
- package/src/assets/web-panel/assets/index-CL2hAUWh.js +0 -1
- package/src/assets/web-panel/assets/index-CUXfwAhF.js +0 -3
- package/src/assets/web-panel/assets/index-C_VnSUjh.js +0 -3
- package/src/assets/web-panel/assets/index-CecGCLWI.js +0 -31
- package/src/assets/web-panel/assets/index-Ck6MYKVN.js +0 -21
- package/src/assets/web-panel/assets/index-CwJfLNqv.js +0 -1
- package/src/assets/web-panel/assets/index-DMDaGPxG.js +0 -19
- package/src/assets/web-panel/assets/index-DN1AT3FH.js +0 -1
- package/src/assets/web-panel/assets/index-DOebEvgn.js +0 -1
- package/src/assets/web-panel/assets/index-DPX3N4T8.js +0 -13
- package/src/assets/web-panel/assets/index-DSRKtgJg.js +0 -1
- package/src/assets/web-panel/assets/index-DSqZBvQM.js +0 -12
- package/src/assets/web-panel/assets/index-DbrQO1p9.js +0 -21
- package/src/assets/web-panel/assets/index-Qx8cTReg.js +0 -75
- package/src/assets/web-panel/assets/isSymbol-S5WZT7lS.js +0 -1
- package/src/assets/web-panel/assets/motion-fUkbJz38.js +0 -11
- package/src/assets/web-panel/assets/useFlexGapSupport-CQATs2JQ.js +0 -1
- package/src/assets/web-panel/assets/vendor-Bn1JzzAn.js +0 -42
- package/src/assets/web-panel/assets/vnode-CSlXfUSh.js +0 -1
package/src/lib/cost-budget.js
CHANGED
|
@@ -75,6 +75,8 @@ export class CostBudget {
|
|
|
75
75
|
cacheCreationTokens,
|
|
76
76
|
cacheCreation5mTokens: pricingContext.cacheCreation5mTokens,
|
|
77
77
|
cacheCreation1hTokens: pricingContext.cacheCreation1hTokens,
|
|
78
|
+
cacheCreation30mTokens: pricingContext.cacheCreation30mTokens,
|
|
79
|
+
cacheCreation12hTokens: pricingContext.cacheCreation12hTokens,
|
|
78
80
|
cacheCreationInvalid: pricingContext.cacheCreationInvalid,
|
|
79
81
|
pricingContextInvalid:
|
|
80
82
|
pricingContext.pricingContextInvalid === true ||
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
|
|
3
|
+
const scopes = new AsyncLocalStorage();
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* An ephemeral checkout belongs to its awaited callback. This host scope is a
|
|
7
|
+
* capability restriction, not a process lease: tools that return before their
|
|
8
|
+
* consumers settle must refuse dispatch until they can transfer that ownership.
|
|
9
|
+
* Async descendants retain the restriction even after the callback returns.
|
|
10
|
+
*/
|
|
11
|
+
export function withEphemeralWorktreeScope(worktreePath, callback) {
|
|
12
|
+
return scopes.run(Object.freeze({ worktreePath }), callback);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function ephemeralWorktreeConsumerRefusal(operation) {
|
|
16
|
+
const scope = scopes.getStore();
|
|
17
|
+
if (!scope) return null;
|
|
18
|
+
return {
|
|
19
|
+
error: `${operation} cannot outlive an ephemeral worktree. Run this work in the foreground, or launch it from a persistent checkout with its own lifecycle owner.`,
|
|
20
|
+
code: "CC_EPHEMERAL_WORKTREE_CONSUMER_UNOWNED",
|
|
21
|
+
worktreePath: scope.worktreePath,
|
|
22
|
+
policy: { decision: "deny", via: "ephemeral-worktree-lifetime" },
|
|
23
|
+
};
|
|
24
|
+
}
|
|
@@ -8,10 +8,6 @@ import {
|
|
|
8
8
|
assertEvolutionDeploymentRevisionFloor,
|
|
9
9
|
readEvolutionDeploymentProfile,
|
|
10
10
|
} from "./evolution-deployment-profile.js";
|
|
11
|
-
import {
|
|
12
|
-
readEvolutionEnabled,
|
|
13
|
-
resolveEvolutionEnabled,
|
|
14
|
-
} from "./evolution-enabled.js";
|
|
15
11
|
|
|
16
12
|
export const EVOLUTION_DEPLOYMENT_DESCRIPTOR_SCHEMA =
|
|
17
13
|
"chainlesschain.evolution-deployment-descriptor/v1";
|
|
@@ -1038,6 +1034,12 @@ export async function loadEvolutionDeploymentCommandDependencies(
|
|
|
1038
1034
|
} = {},
|
|
1039
1035
|
) {
|
|
1040
1036
|
if (!SUPPORTED_COMMANDS.has(commandName)) return null;
|
|
1037
|
+
// Unsupported commands (including read-only session show) need no deployment
|
|
1038
|
+
// configuration. Loading it eagerly also loads secret-store and the full
|
|
1039
|
+
// process broker/platform sandbox graph before this early return.
|
|
1040
|
+
const { readEvolutionEnabled, resolveEvolutionEnabled } = await import(
|
|
1041
|
+
"./evolution-enabled.js"
|
|
1042
|
+
);
|
|
1041
1043
|
const localModelDependencies = () =>
|
|
1042
1044
|
dependencies(
|
|
1043
1045
|
{
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { raceWithAbort, throwIfAborted } from "../abort-utils.js";
|
|
2
|
+
|
|
3
|
+
// Only race reads/preparation. Durable commits must retain their acknowledgement
|
|
4
|
+
// and recovery path even when the caller interrupts after the append starts.
|
|
5
|
+
export function awaitMarketplaceRead(operation, signal) {
|
|
6
|
+
throwIfAborted(signal);
|
|
7
|
+
return raceWithAbort(
|
|
8
|
+
Promise.resolve().then(() => {
|
|
9
|
+
throwIfAborted(signal);
|
|
10
|
+
return operation();
|
|
11
|
+
}),
|
|
12
|
+
signal,
|
|
13
|
+
);
|
|
14
|
+
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { isAbsolute } from "node:path";
|
|
3
3
|
import { types as utilTypes } from "node:util";
|
|
4
|
+
import { throwIfAborted } from "../abort-utils.js";
|
|
5
|
+
import { awaitMarketplaceRead } from "./governed-skill-marketplace-abort.js";
|
|
4
6
|
import {
|
|
5
7
|
SkillCandidateRegistry,
|
|
6
8
|
SKILL_CANDIDATE_MAX_ARTIFACT_BYTES,
|
|
@@ -250,7 +252,8 @@ export function createGovernedSkillMarketplaceCandidateInstaller({
|
|
|
250
252
|
};
|
|
251
253
|
const installer = Object.freeze({
|
|
252
254
|
tenantId,
|
|
253
|
-
async materialize(inspected) {
|
|
255
|
+
async materialize(inspected, { signal } = {}) {
|
|
256
|
+
throwIfAborted(signal);
|
|
254
257
|
const { manifest, adapted, target } = inspected;
|
|
255
258
|
if (manifest.tenantId !== tenantId)
|
|
256
259
|
throw new Error("marketplace candidate tenant mismatch");
|
|
@@ -262,7 +265,11 @@ export function createGovernedSkillMarketplaceCandidateInstaller({
|
|
|
262
265
|
adaptedOutputDigest: adapted.outputDigest,
|
|
263
266
|
sbomDigest: manifest.sbomDigest,
|
|
264
267
|
});
|
|
265
|
-
const resolved = await
|
|
268
|
+
const resolved = await awaitMarketplaceRead(
|
|
269
|
+
() => Reflect.apply(resolve, artifacts, [request, { signal }]),
|
|
270
|
+
signal,
|
|
271
|
+
);
|
|
272
|
+
throwIfAborted(signal);
|
|
266
273
|
const sourceBytes = bytes(
|
|
267
274
|
resolved?.packageBytes,
|
|
268
275
|
request.packageDigest,
|
|
@@ -307,6 +314,7 @@ export function createGovernedSkillMarketplaceCandidateInstaller({
|
|
|
307
314
|
...core,
|
|
308
315
|
bindingDigest: bindingDigest(core),
|
|
309
316
|
});
|
|
317
|
+
throwIfAborted(signal);
|
|
310
318
|
const result = create(candidateInput(candidate));
|
|
311
319
|
if (result.candidate.candidateId !== candidate.candidateId)
|
|
312
320
|
throw new Error(
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { types as utilTypes } from "node:util";
|
|
2
|
+
import { throwIfAborted } from "../abort-utils.js";
|
|
3
|
+
import { awaitMarketplaceRead } from "./governed-skill-marketplace-abort.js";
|
|
2
4
|
import { GovernedSkillMarketplace } from "./governed-skill-marketplace.js";
|
|
3
5
|
import { isGovernedSkillMarketplaceLedgerAdapter } from "./governed-skill-marketplace-ledger-adapter.js";
|
|
4
6
|
import { isGovernedSkillMarketplaceCandidateInstaller } from "./governed-skill-marketplace-candidate.js";
|
|
@@ -105,12 +107,16 @@ export function createGovernedSkillMarketplaceCliHost({
|
|
|
105
107
|
candidateInstaller.verify(state);
|
|
106
108
|
return state;
|
|
107
109
|
};
|
|
108
|
-
const resolveManifest = async (skillName, version) => {
|
|
110
|
+
const resolveManifest = async (skillName, version, { signal } = {}) => {
|
|
111
|
+
throwIfAborted(signal);
|
|
109
112
|
id(skillName, "skillName");
|
|
110
113
|
if (version !== null) id(version, "version");
|
|
111
|
-
const manifest = await
|
|
112
|
-
|
|
114
|
+
const manifest = await awaitMarketplaceRead(
|
|
115
|
+
() =>
|
|
116
|
+
resolve(Object.freeze({ tenantId, skillName, version }), { signal }),
|
|
117
|
+
signal,
|
|
113
118
|
);
|
|
119
|
+
throwIfAborted(signal);
|
|
114
120
|
if (
|
|
115
121
|
manifest?.tenantId !== tenantId ||
|
|
116
122
|
manifest.skillName !== skillName ||
|
|
@@ -217,20 +223,30 @@ export function createGovernedSkillMarketplaceCliHost({
|
|
|
217
223
|
});
|
|
218
224
|
},
|
|
219
225
|
state: ({ skillName } = {}) => stateFor(skillName),
|
|
220
|
-
async install(
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
+
async install(
|
|
227
|
+
{
|
|
228
|
+
skillName,
|
|
229
|
+
version = null,
|
|
230
|
+
manifestDigest,
|
|
231
|
+
expectedStateDigest = null,
|
|
232
|
+
} = {},
|
|
233
|
+
{ signal } = {},
|
|
234
|
+
) {
|
|
235
|
+
throwIfAborted(signal);
|
|
226
236
|
digest(manifestDigest, "manifestDigest");
|
|
227
237
|
if (expectedStateDigest !== null)
|
|
228
238
|
digest(expectedStateDigest, "expectedStateDigest");
|
|
229
|
-
const manifest = await resolveManifest(skillName, version);
|
|
239
|
+
const manifest = await resolveManifest(skillName, version, { signal });
|
|
230
240
|
if (manifest.manifestDigest !== manifestDigest)
|
|
231
241
|
throw new Error("marketplace catalog manifest changed; inspect again");
|
|
232
|
-
const inspected = await marketplace.inspect(manifest, target);
|
|
233
|
-
|
|
242
|
+
const inspected = await marketplace.inspect(manifest, target, { signal });
|
|
243
|
+
throwIfAborted(signal);
|
|
244
|
+
if (
|
|
245
|
+
await awaitMarketplaceRead(
|
|
246
|
+
() => isManifestRevoked({ skillName, manifestDigest }),
|
|
247
|
+
signal,
|
|
248
|
+
)
|
|
249
|
+
)
|
|
234
250
|
throw new Error(
|
|
235
251
|
"marketplace manifest was revoked and cannot be staged again",
|
|
236
252
|
);
|
|
@@ -251,7 +267,12 @@ export function createGovernedSkillMarketplaceCliHost({
|
|
|
251
267
|
state,
|
|
252
268
|
});
|
|
253
269
|
};
|
|
254
|
-
|
|
270
|
+
throwIfAborted(signal);
|
|
271
|
+
const current = await awaitMarketplaceRead(
|
|
272
|
+
() => stateFor(skillName),
|
|
273
|
+
signal,
|
|
274
|
+
);
|
|
275
|
+
throwIfAborted(signal);
|
|
255
276
|
if (isReplay(current)) return result(current, true);
|
|
256
277
|
if (
|
|
257
278
|
current?.manifestDigest === manifestDigest &&
|
|
@@ -264,15 +285,21 @@ export function createGovernedSkillMarketplaceCliHost({
|
|
|
264
285
|
);
|
|
265
286
|
if ((current?.stateDigest ?? null) !== expectedStateDigest)
|
|
266
287
|
throw new Error("marketplace install baseline changed");
|
|
267
|
-
const candidateBinding = await candidateInstaller.materialize(inspected
|
|
288
|
+
const candidateBinding = await candidateInstaller.materialize(inspected, {
|
|
289
|
+
signal,
|
|
290
|
+
});
|
|
291
|
+
throwIfAborted(signal);
|
|
268
292
|
try {
|
|
269
293
|
return result(
|
|
270
|
-
await marketplace.stage(
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
294
|
+
await marketplace.stage(
|
|
295
|
+
{
|
|
296
|
+
manifest,
|
|
297
|
+
target,
|
|
298
|
+
expectedStateDigest,
|
|
299
|
+
candidateBinding,
|
|
300
|
+
},
|
|
301
|
+
{ signal },
|
|
302
|
+
),
|
|
276
303
|
false,
|
|
277
304
|
);
|
|
278
305
|
} catch (error) {
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { types as utilTypes } from "node:util";
|
|
3
|
+
import { throwIfAborted } from "../abort-utils.js";
|
|
4
|
+
import { awaitMarketplaceRead } from "./governed-skill-marketplace-abort.js";
|
|
3
5
|
import { verifyGovernedSkillMarketplaceCandidateBinding } from "./governed-skill-marketplace-candidate.js";
|
|
4
6
|
|
|
5
7
|
import {
|
|
@@ -322,23 +324,33 @@ export class GovernedSkillMarketplace {
|
|
|
322
324
|
this._verifyRevocation = capture(ports, "verifyRevocation");
|
|
323
325
|
}
|
|
324
326
|
|
|
325
|
-
async verifyListing(input, target) {
|
|
327
|
+
async verifyListing(input, target, { signal } = {}) {
|
|
328
|
+
throwIfAborted(signal);
|
|
326
329
|
const manifest = normalizeManifest(input, this.tenantId);
|
|
327
|
-
if (
|
|
330
|
+
if (
|
|
331
|
+
(await awaitMarketplaceRead(
|
|
332
|
+
() => this._verifySignature({ manifest }, { signal }),
|
|
333
|
+
signal,
|
|
334
|
+
)) !== true
|
|
335
|
+
)
|
|
328
336
|
throw new Error("marketplace manifest signature is invalid");
|
|
337
|
+
throwIfAborted(signal);
|
|
329
338
|
const cell = targetCell(manifest, target);
|
|
330
339
|
if (cell.safetyPassed !== true)
|
|
331
340
|
throw new Error("marketplace target safety gate failed");
|
|
332
341
|
return freeze({ manifest, target: clone(target), cell });
|
|
333
342
|
}
|
|
334
343
|
|
|
335
|
-
async inspect(input, target) {
|
|
336
|
-
const { manifest, cell } = await this.verifyListing(input, target
|
|
337
|
-
|
|
338
|
-
manifest,
|
|
339
|
-
target: clone(target),
|
|
340
|
-
cell,
|
|
344
|
+
async inspect(input, target, { signal } = {}) {
|
|
345
|
+
const { manifest, cell } = await this.verifyListing(input, target, {
|
|
346
|
+
signal,
|
|
341
347
|
});
|
|
348
|
+
throwIfAborted(signal);
|
|
349
|
+
const adapted = await awaitMarketplaceRead(
|
|
350
|
+
() => this._adapt({ manifest, target: clone(target), cell }, { signal }),
|
|
351
|
+
signal,
|
|
352
|
+
);
|
|
353
|
+
throwIfAborted(signal);
|
|
342
354
|
if (
|
|
343
355
|
adapted?.authenticated !== true ||
|
|
344
356
|
adapted.manifestDigest !== manifest.manifestDigest ||
|
|
@@ -357,16 +369,22 @@ export class GovernedSkillMarketplace {
|
|
|
357
369
|
});
|
|
358
370
|
}
|
|
359
371
|
|
|
360
|
-
async stage(
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
});
|
|
372
|
+
async stage(
|
|
373
|
+
{
|
|
374
|
+
manifest: input,
|
|
375
|
+
target,
|
|
376
|
+
expectedStateDigest = null,
|
|
377
|
+
candidateBinding = null,
|
|
378
|
+
} = {},
|
|
379
|
+
{ signal } = {},
|
|
380
|
+
) {
|
|
381
|
+
const inspected = await this.inspect(input, target, { signal });
|
|
382
|
+
throwIfAborted(signal);
|
|
383
|
+
const current = await awaitMarketplaceRead(
|
|
384
|
+
() => this._load({ skillName: inspected.manifest.skillName }),
|
|
385
|
+
signal,
|
|
386
|
+
);
|
|
387
|
+
throwIfAborted(signal);
|
|
370
388
|
if ((current?.stateDigest || null) !== expectedStateDigest)
|
|
371
389
|
throw new Error("marketplace install baseline changed");
|
|
372
390
|
const state = {
|
|
@@ -400,6 +418,9 @@ export class GovernedSkillMarketplace {
|
|
|
400
418
|
);
|
|
401
419
|
state.candidateBinding = binding;
|
|
402
420
|
}
|
|
421
|
+
// Once the durable append starts, await its acknowledgement/recovery. An
|
|
422
|
+
// abort cannot truthfully turn a committed state into a cancelled install.
|
|
423
|
+
throwIfAborted(signal);
|
|
403
424
|
return this._persist(state, expectedStateDigest, "marketplace.staged");
|
|
404
425
|
}
|
|
405
426
|
|
|
@@ -629,12 +650,14 @@ export class GovernedSkillMarketplace {
|
|
|
629
650
|
}
|
|
630
651
|
let current = await this._verifiedState(request.skillName);
|
|
631
652
|
const expectedStateDigest = request.dependency.digest;
|
|
632
|
-
if (
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
653
|
+
if (
|
|
654
|
+
!(
|
|
655
|
+
current.revoked === true &&
|
|
656
|
+
current.stage === "rolled-back" &&
|
|
657
|
+
current.revocationBaselineStateDigest === expectedStateDigest &&
|
|
658
|
+
current.revocationPropagationRequestDigest === request.requestDigest
|
|
659
|
+
)
|
|
660
|
+
) {
|
|
638
661
|
if (current.stateDigest !== expectedStateDigest) {
|
|
639
662
|
throw new Error("marketplace revocation dependency baseline changed");
|
|
640
663
|
}
|
package/src/lib/goal-assess.js
CHANGED
|
@@ -223,7 +223,10 @@ export async function assessGoalProgress({
|
|
|
223
223
|
} catch (error) {
|
|
224
224
|
if (
|
|
225
225
|
error?.code === "CC_AGENT_EVOLUTION_INGRESS_FAILED" ||
|
|
226
|
-
error?.runtimeLedgerPersistence === true
|
|
226
|
+
error?.runtimeLedgerPersistence === true ||
|
|
227
|
+
error?.goalModelFailure === true ||
|
|
228
|
+
(typeof error?.code === "string" &&
|
|
229
|
+
error.code.startsWith("CC_SESSION_BUDGET_"))
|
|
227
230
|
)
|
|
228
231
|
throw error;
|
|
229
232
|
return { assessment: null, goal };
|
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
// Bounded, current-turn observations for the optional model goal checker.
|
|
2
|
-
//
|
|
2
|
+
// Workspace binding verifies freshness, not the semantic truth of a verdict.
|
|
3
3
|
const MAX_TOOLS = 24;
|
|
4
4
|
const EXIT_CODE_TOOLS = new Set(["run_shell", "check_shell", "git"]);
|
|
5
5
|
|
|
6
|
+
export function sameGoalWorkspace(left, right) {
|
|
7
|
+
return (
|
|
8
|
+
left?.verified === true &&
|
|
9
|
+
right?.verified === true &&
|
|
10
|
+
["scope", "workspaceId", "digest", "freshnessDigest"].every(
|
|
11
|
+
(key) => left[key] === right[key],
|
|
12
|
+
)
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
|
|
6
16
|
function previewText(text, limit) {
|
|
7
17
|
if (text.length <= limit) return text;
|
|
8
18
|
const half = Math.floor((limit - 30) / 2);
|
|
@@ -37,8 +47,9 @@ function preview(value, limit) {
|
|
|
37
47
|
}
|
|
38
48
|
|
|
39
49
|
export class GoalCheckEvidence {
|
|
40
|
-
constructor({ readOnlyTools = [] } = {}) {
|
|
50
|
+
constructor({ readOnlyTools = [], captureWorkspace = null } = {}) {
|
|
41
51
|
this.readOnlyTools = new Set(readOnlyTools);
|
|
52
|
+
this.captureWorkspace = captureWorkspace;
|
|
42
53
|
this.beginTurn();
|
|
43
54
|
}
|
|
44
55
|
|
|
@@ -50,7 +61,7 @@ export class GoalCheckEvidence {
|
|
|
50
61
|
this.tools = [];
|
|
51
62
|
}
|
|
52
63
|
|
|
53
|
-
started(call) {
|
|
64
|
+
async started(call) {
|
|
54
65
|
// Unknown tools may mutate state. A later mutator makes earlier evidence
|
|
55
66
|
// stale, including reads/checks that were still running when it started.
|
|
56
67
|
if (!this.readOnlyTools.has(call.tool)) this.revision++;
|
|
@@ -61,14 +72,17 @@ export class GoalCheckEvidence {
|
|
|
61
72
|
revision: this.revision,
|
|
62
73
|
settled: false,
|
|
63
74
|
successful: false,
|
|
75
|
+
call,
|
|
64
76
|
};
|
|
65
77
|
this.pending.set(call, record);
|
|
66
78
|
this.pendingCount++;
|
|
67
79
|
this.tools.push(record);
|
|
68
80
|
if (this.tools.length > MAX_TOOLS) this.tools.shift();
|
|
81
|
+
if (this.captureWorkspace)
|
|
82
|
+
record.workspaceBefore = await this.captureWorkspace(call);
|
|
69
83
|
}
|
|
70
84
|
|
|
71
|
-
settled(call, result, isError) {
|
|
85
|
+
async settled(call, result, isError) {
|
|
72
86
|
const record = this.pending.get(call);
|
|
73
87
|
if (!record) return;
|
|
74
88
|
this.pending.delete(call);
|
|
@@ -97,6 +111,41 @@ export class GoalCheckEvidence {
|
|
|
97
111
|
].includes(result.status) &&
|
|
98
112
|
(hasExitCode ? result.exitCode === 0 : !EXIT_CODE_TOOLS.has(call.tool));
|
|
99
113
|
if (hasExitCode) record.exitCode = result.exitCode ?? null;
|
|
114
|
+
if (this.captureWorkspace && record.successful) {
|
|
115
|
+
const after = await this.captureWorkspace(call);
|
|
116
|
+
record.workspace = {
|
|
117
|
+
...after,
|
|
118
|
+
current: sameGoalWorkspace(record.workspaceBefore, after),
|
|
119
|
+
...(!sameGoalWorkspace(record.workspaceBefore, after)
|
|
120
|
+
? {
|
|
121
|
+
reason:
|
|
122
|
+
after.reason ||
|
|
123
|
+
record.workspaceBefore?.reason ||
|
|
124
|
+
"workspace-changed",
|
|
125
|
+
}
|
|
126
|
+
: {}),
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
async refreshWorkspace() {
|
|
132
|
+
if (!this.captureWorkspace) return;
|
|
133
|
+
const snapshots = new Map();
|
|
134
|
+
for (const record of this.tools) {
|
|
135
|
+
if (record.revision !== this.revision || !record.workspace?.current)
|
|
136
|
+
continue;
|
|
137
|
+
const key = JSON.stringify([
|
|
138
|
+
record.workspace.scope,
|
|
139
|
+
record.workspace.artifacts?.map((entry) => entry.path),
|
|
140
|
+
]);
|
|
141
|
+
if (!snapshots.has(key))
|
|
142
|
+
snapshots.set(key, await this.captureWorkspace(record.call));
|
|
143
|
+
const current = snapshots.get(key);
|
|
144
|
+
if (!sameGoalWorkspace(record.workspace, current)) {
|
|
145
|
+
record.workspace.current = false;
|
|
146
|
+
record.workspace.reason = current.reason || "workspace-changed";
|
|
147
|
+
}
|
|
148
|
+
}
|
|
100
149
|
}
|
|
101
150
|
|
|
102
151
|
snapshot() {
|
|
@@ -105,10 +154,13 @@ export class GoalCheckEvidence {
|
|
|
105
154
|
scope: "current-outer-turn",
|
|
106
155
|
pending: this.pendingCount,
|
|
107
156
|
omitted: Math.max(0, this.sequence - this.tools.length),
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
157
|
+
...(this.captureWorkspace ? { workspaceBindingRequired: true } : {}),
|
|
158
|
+
tools: this.tools.map(
|
|
159
|
+
({ revision, call, workspaceBefore, ...record }) => ({
|
|
160
|
+
...record,
|
|
161
|
+
current: revision === this.revision,
|
|
162
|
+
}),
|
|
163
|
+
),
|
|
112
164
|
};
|
|
113
165
|
}
|
|
114
166
|
}
|
|
@@ -116,7 +168,13 @@ export class GoalCheckEvidence {
|
|
|
116
168
|
export function usableGoalEvidence(evidence) {
|
|
117
169
|
if (!evidence || evidence.pending !== 0) return [];
|
|
118
170
|
return (evidence.tools || []).filter(
|
|
119
|
-
(record) =>
|
|
171
|
+
(record) =>
|
|
172
|
+
record.current &&
|
|
173
|
+
record.settled &&
|
|
174
|
+
record.successful &&
|
|
175
|
+
(!evidence.workspaceBindingRequired ||
|
|
176
|
+
(record.workspace?.verified === true &&
|
|
177
|
+
record.workspace.current === true)),
|
|
120
178
|
);
|
|
121
179
|
}
|
|
122
180
|
|
|
@@ -127,6 +185,7 @@ export function buildGoalJudgePrompt(condition, transcript) {
|
|
|
127
185
|
"The assistant output is a claim, not proof. Do not infer tests passed from a file write or a claim.",
|
|
128
186
|
"Earlier results marked current:false predate a possible mutation; they cannot verify the current workspace.",
|
|
129
187
|
"Use only settled, successful, current tool observations relevant to the condition. Unknown exits are not success.",
|
|
188
|
+
"When workspaceBindingRequired is true, cite only workspace verified:true/current:true observations. Artifact scope proves only the named file; Git scope excludes ignored and external files. A digest proves freshness, not test success or independent quality.",
|
|
130
189
|
"If evidence is missing, stale, contradictory, or insufficient, return met:false and say what check is needed.",
|
|
131
190
|
'Reply with STRICT JSON: {"met": false, "reason": "...", "evidenceIds": []}.',
|
|
132
191
|
"A true verdict must cite one or more relevant tool observation IDs in evidenceIds.",
|
|
@@ -154,6 +213,15 @@ export function validateGoalJudgeVerdict(verdict, evidence) {
|
|
|
154
213
|
kind: "model",
|
|
155
214
|
source: "current-turn-tools",
|
|
156
215
|
toolIds: grounded ? [...new Set(ids)] : [],
|
|
216
|
+
...(evidence?.workspaceBindingRequired
|
|
217
|
+
? {
|
|
218
|
+
workspaceBindings: grounded
|
|
219
|
+
? usableGoalEvidence(evidence)
|
|
220
|
+
.filter((record) => ids.includes(record.id))
|
|
221
|
+
.map((record) => ({ toolId: record.id, ...record.workspace }))
|
|
222
|
+
: [],
|
|
223
|
+
}
|
|
224
|
+
: {}),
|
|
157
225
|
},
|
|
158
226
|
};
|
|
159
227
|
}
|
|
@@ -81,6 +81,7 @@ export function normalizeGoalBudget(input = {}) {
|
|
|
81
81
|
* file-exists:dist/app.js → met iff the path exists
|
|
82
82
|
* contains:ALL GREEN → met iff the last output contains the text
|
|
83
83
|
* regex:^BUILD OK$ → met iff the last output matches
|
|
84
|
+
* verify:acceptance.json → all frozen host acceptance commands must pass
|
|
84
85
|
* model:the tests pass → a model judges the transcript
|
|
85
86
|
* the tests pass → (bare) model-judged
|
|
86
87
|
*/
|
|
@@ -99,6 +100,9 @@ export function parseGoalCondition(spec) {
|
|
|
99
100
|
case "file":
|
|
100
101
|
if (!rest) throw new Error("file-exists condition needs a path");
|
|
101
102
|
return { kind: "file-exists", path: rest, source: raw };
|
|
103
|
+
case "verify":
|
|
104
|
+
if (!rest) throw new Error("verify condition needs a manifest path");
|
|
105
|
+
return { kind: "verify", path: rest, source: raw };
|
|
102
106
|
case "contains":
|
|
103
107
|
if (!rest) throw new Error("contains condition needs text");
|
|
104
108
|
return { kind: "contains", text: rest, source: raw };
|
|
@@ -387,9 +391,22 @@ export class GoalConditionEngine {
|
|
|
387
391
|
const state = snap?.state;
|
|
388
392
|
if (
|
|
389
393
|
!snap?.condition ||
|
|
390
|
-
![
|
|
391
|
-
|
|
392
|
-
|
|
394
|
+
![
|
|
395
|
+
"model",
|
|
396
|
+
"exit-zero",
|
|
397
|
+
"file-exists",
|
|
398
|
+
"contains",
|
|
399
|
+
"regex",
|
|
400
|
+
"verify",
|
|
401
|
+
].includes(snap.condition.kind) ||
|
|
402
|
+
(snap.condition.kind === "verify" &&
|
|
403
|
+
(typeof snap.condition.path !== "string" ||
|
|
404
|
+
!snap.condition.path.trim() ||
|
|
405
|
+
snap.condition.verification?.schema !==
|
|
406
|
+
"chainlesschain.prepared-goal-verification/v1" ||
|
|
407
|
+
!/^sha256:[a-f0-9]{64}$/u.test(
|
|
408
|
+
snap.condition.verification?.digest || "",
|
|
409
|
+
))) ||
|
|
393
410
|
!state ||
|
|
394
411
|
!Number.isSafeInteger(state.outerTurns) ||
|
|
395
412
|
state.outerTurns < 0 ||
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { runMeteredDirectModelCall } from "./direct-model-usage.js";
|
|
2
|
+
|
|
3
|
+
// A verdict is small. Keep its output bounded even when the authoring model has
|
|
4
|
+
// a much larger default; a caller's smaller limit still wins.
|
|
5
|
+
export const GOAL_MODEL_MAX_OUTPUT_TOKENS = 2048;
|
|
6
|
+
|
|
7
|
+
export function goalModelCallError(reason, cause) {
|
|
8
|
+
const details = {
|
|
9
|
+
max_turns: ["error_max_turns", "No model turns remain for Goal evaluation"],
|
|
10
|
+
"cost-budget-exhausted": [
|
|
11
|
+
"error_max_budget",
|
|
12
|
+
"The run cost budget is exhausted",
|
|
13
|
+
],
|
|
14
|
+
"usage-unknown": [
|
|
15
|
+
"error_goal_usage_unknown",
|
|
16
|
+
"Goal model usage is unknown; reconcile the request before continuing",
|
|
17
|
+
],
|
|
18
|
+
cancelled: ["error_goal_cancelled", "Goal model evaluation was cancelled"],
|
|
19
|
+
}[reason];
|
|
20
|
+
return Object.assign(new Error(details[1], { cause }), {
|
|
21
|
+
goalModelFailure: true,
|
|
22
|
+
endReason: reason,
|
|
23
|
+
subtype: details[0],
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** One auxiliary Goal call, charged to the same run as the authoring loop. */
|
|
28
|
+
export async function runGoalModelCall({
|
|
29
|
+
sessionId,
|
|
30
|
+
persist,
|
|
31
|
+
sessionBudget,
|
|
32
|
+
iterationBudget,
|
|
33
|
+
costBudget,
|
|
34
|
+
signal,
|
|
35
|
+
operationId,
|
|
36
|
+
chat,
|
|
37
|
+
chatOptions,
|
|
38
|
+
prompt,
|
|
39
|
+
onUsage,
|
|
40
|
+
}) {
|
|
41
|
+
const signals = [signal, sessionBudget?.signal].filter(Boolean);
|
|
42
|
+
const dispatchSignal =
|
|
43
|
+
signals.length > 1 ? AbortSignal.any(signals) : signals[0];
|
|
44
|
+
const checkCancellation = () => {
|
|
45
|
+
if (dispatchSignal?.aborted)
|
|
46
|
+
throw goalModelCallError("cancelled", dispatchSignal.reason);
|
|
47
|
+
};
|
|
48
|
+
checkCancellation();
|
|
49
|
+
if (costBudget.exceeded()) throw goalModelCallError("cost-budget-exhausted");
|
|
50
|
+
if (iterationBudget.isExhausted()) throw goalModelCallError("max_turns");
|
|
51
|
+
const outputLimit = chatOptions.maxOutputTokens;
|
|
52
|
+
const maxOutputTokens =
|
|
53
|
+
Number.isSafeInteger(outputLimit) && outputLimit > 0
|
|
54
|
+
? Math.min(outputLimit, GOAL_MODEL_MAX_OUTPUT_TOKENS)
|
|
55
|
+
: GOAL_MODEL_MAX_OUTPUT_TOKENS;
|
|
56
|
+
|
|
57
|
+
let dispatched = false;
|
|
58
|
+
let settled;
|
|
59
|
+
// Reserve synchronously before awaiting persistence; other agents can share
|
|
60
|
+
// this iteration budget and must not take the same final turn meanwhile.
|
|
61
|
+
iterationBudget.consume();
|
|
62
|
+
try {
|
|
63
|
+
settled = await runMeteredDirectModelCall({
|
|
64
|
+
// Ephemeral runs still settle usage in memory. The callback below writes
|
|
65
|
+
// no session file when persistence is disabled, and makes no durable claim.
|
|
66
|
+
sessionId: sessionId || "ephemeral-goal-evaluation",
|
|
67
|
+
persist: async (type, event) => {
|
|
68
|
+
if (persist) await persist(type, event);
|
|
69
|
+
if (type === "token_usage") onUsage(event);
|
|
70
|
+
},
|
|
71
|
+
provider: chatOptions.provider,
|
|
72
|
+
model: chatOptions.model,
|
|
73
|
+
source: "model",
|
|
74
|
+
operationId,
|
|
75
|
+
sessionBudget,
|
|
76
|
+
dispatchSignal: dispatchSignal || null,
|
|
77
|
+
includeSettlement: true,
|
|
78
|
+
call: () => {
|
|
79
|
+
checkCancellation();
|
|
80
|
+
dispatched = true;
|
|
81
|
+
return chat([{ role: "user", content: prompt }], {
|
|
82
|
+
...chatOptions,
|
|
83
|
+
signal: dispatchSignal,
|
|
84
|
+
maxOutputTokens,
|
|
85
|
+
enabledToolNames: [],
|
|
86
|
+
});
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
} catch (error) {
|
|
90
|
+
if (
|
|
91
|
+
error?.runtimeLedgerPersistence ||
|
|
92
|
+
error?.goalModelFailure ||
|
|
93
|
+
error?.code === "CC_AGENT_EVOLUTION_INGRESS_FAILED" ||
|
|
94
|
+
(typeof error?.code === "string" &&
|
|
95
|
+
error.code.startsWith("CC_SESSION_BUDGET_"))
|
|
96
|
+
)
|
|
97
|
+
throw error;
|
|
98
|
+
checkCancellation();
|
|
99
|
+
// A failed request is not a negative verdict that authorizes another turn.
|
|
100
|
+
if (dispatched) throw goalModelCallError("usage-unknown", error);
|
|
101
|
+
throw error;
|
|
102
|
+
}
|
|
103
|
+
if (settled.settlement !== "known") throw goalModelCallError("usage-unknown");
|
|
104
|
+
checkCancellation();
|
|
105
|
+
if (costBudget.exceeded()) throw goalModelCallError("cost-budget-exhausted");
|
|
106
|
+
return settled.result;
|
|
107
|
+
}
|