chainlesschain 0.166.130 → 0.166.132
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 +30 -4
- 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-Dzv1ReHF.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-B5uzaLLP.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-D3I2kUGu.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-5GigOmb8.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-ky9UfGv4.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-er_HkLCI.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-CrFs6rUL.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-CXrW4Nry.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-BpJsXlTK.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-CUNg0-fh.js → colors-DcTBrGvS.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-C3tFHnhu.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-CU6RIciB.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-BPWJw4Ji.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-BzhobTgZ.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-KgR1f2Gq.js → index-Brc0BF-k.js} +2 -2
- package/src/assets/web-panel/assets/{index-D4njcYFw.js → index-CG9YLDmI.js} +1 -1
- package/src/assets/web-panel/assets/{index-6EwPIfXu.js → index-CNHWMMDX.js} +1 -1
- package/src/assets/web-panel/assets/{index-CEIoRm_c.js → index-COuEJdmr.js} +3 -3
- package/src/assets/web-panel/assets/{index-BG4zuFf0.js → index-CRW3AWdS.js} +1 -1
- package/src/assets/web-panel/assets/{index-BOlAutGy.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-X6e0cGRU.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-BJjEAoDb.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-111hR8WZ.js → index-Vo7A4aiN.js} +4 -4
- package/src/assets/web-panel/assets/{index-lo9rgpyj.js → index-XdlYkgCa.js} +1 -1
- package/src/assets/web-panel/assets/{index-1L0tt7G2.js → index-ir2ZwWz5.js} +2 -2
- package/src/assets/web-panel/assets/index-kzyCd8a0.js +3 -0
- package/src/assets/web-panel/assets/{index-CyyhilXV.js → index-lnTt0Jps.js} +2 -2
- package/src/assets/web-panel/assets/{index-CLQjdKmE.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-K2Uqqkr1.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-FI8D7E2x.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-Vl1vUReW.js → move-A_28O5T2.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-6Cu2aFME.js → mtc-parser-0zlMjabo.js} +1 -1
- package/src/assets/web-panel/assets/{omit-VRKL8iSO.js → omit-DF7mU3yG.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DZfWsOe0.js → pickAttrs-Cmt8liJP.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-qmcOUc4W.js → placementArrow-DaMDC57b.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BLB6SsSw.js → responsiveObserve-CHw_f2d3.js} +1 -1
- package/src/assets/web-panel/assets/{slide-41jdYeSH.js → slide-DJS9fFQq.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-Yn8OQ5ey.js → statusUtils-Bk3XdZwh.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-4CEwz9Zd.js → styleChecker-DMybAFsA.js} +1 -1
- package/src/assets/web-panel/assets/useFlexGapSupport-_tbIIFMu.js +1 -0
- package/src/assets/web-panel/assets/{useFs-Bugo8HuF.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-B-q2ElB0.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-DM1y_KKP.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/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/message-adapter.js +27 -6
- package/src/lib/context-memory-kernel/provider-context.js +103 -27
- 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-condition-engine.js +20 -3
- package/src/lib/goal-verification-command.js +221 -0
- package/src/lib/goal-verification-plan.js +372 -0
- package/src/lib/llm-connection-probe.js +12 -5
- package/src/lib/llm-onboarding-catalog.json +1 -1
- package/src/lib/llm-pricing.js +34 -8
- 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/usage-pricing-context.js +34 -17
- package/src/repl/agent-repl.js +34 -2
- package/src/runtime/agent-core.js +335 -18
- package/src/runtime/compaction-host-context.js +72 -0
- package/src/runtime/headless-runner.js +133 -37
- 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/message-roles.js +67 -3
- package/src/runtime/provider-stream-state.js +35 -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-o-rFKEYL.js +0 -1
- package/src/assets/web-panel/assets/Analytics-Bt7H_jrh.js +0 -3
- package/src/assets/web-panel/assets/Analytics-DJcHjy5J.css +0 -1
- package/src/assets/web-panel/assets/AppLayout-CgynsRFP.js +0 -9
- package/src/assets/web-panel/assets/AppLayout-VlanTjPw.css +0 -1
- package/src/assets/web-panel/assets/Artifacts-CTVt96zW.css +0 -1
- package/src/assets/web-panel/assets/Artifacts-gghOGDyE.js +0 -1
- package/src/assets/web-panel/assets/Audit-D8oxP0wr.css +0 -1
- package/src/assets/web-panel/assets/Audit-DBXn-AZ6.js +0 -1
- package/src/assets/web-panel/assets/BackgroundAgents--dxPftKa.js +0 -1
- package/src/assets/web-panel/assets/BackgroundAgents-Dq2340Kl.css +0 -1
- package/src/assets/web-panel/assets/Backup-D9Zf_2tH.js +0 -1
- package/src/assets/web-panel/assets/Backup-Wi9CaP3d.css +0 -1
- package/src/assets/web-panel/assets/BaseInput-DDTOjovq.js +0 -1
- package/src/assets/web-panel/assets/Chat-2ETqdBLn.js +0 -8
- package/src/assets/web-panel/assets/Chat-KSGPtU0L.css +0 -1
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DSg2Xs8G.js +0 -1
- package/src/assets/web-panel/assets/ChatBubbleRenderer-gy5SDGw2.css +0 -1
- package/src/assets/web-panel/assets/Codegen-4ieEEIwt.js +0 -1
- package/src/assets/web-panel/assets/Codegen-BB08p1fn.css +0 -1
- package/src/assets/web-panel/assets/Community-Cbq1nrpo.css +0 -1
- package/src/assets/web-panel/assets/Community-DeYxFMJb.js +0 -1
- package/src/assets/web-panel/assets/Compliance-DLVjbVUh.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-DfUKa0T5.js +0 -6
- package/src/assets/web-panel/assets/Cron-_RpktpO5.js +0 -2
- package/src/assets/web-panel/assets/Crosschain-7x6xdbwH.js +0 -1
- package/src/assets/web-panel/assets/Crosschain-CgRAecoR.css +0 -1
- package/src/assets/web-panel/assets/DID-DVsYcgvs.css +0 -1
- package/src/assets/web-panel/assets/DID-ccVhToC1.js +0 -2
- package/src/assets/web-panel/assets/Dashboard-CAPSdFR4.css +0 -1
- package/src/assets/web-panel/assets/Dashboard-DhygcaoK.js +0 -3
- package/src/assets/web-panel/assets/Dropdown-DFplwXK7.js +0 -1
- package/src/assets/web-panel/assets/EmailListRenderer-Bm01soCN.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-C4v--DkD.js +0 -1
- package/src/assets/web-panel/assets/FamilyGuardDashboard-ChQXDBA3.js +0 -1
- package/src/assets/web-panel/assets/FamilyGuardDashboard-nd3idUVb.css +0 -1
- package/src/assets/web-panel/assets/Federation-C0yomE-M.js +0 -1
- package/src/assets/web-panel/assets/Federation-fGN6iMX_.css +0 -1
- package/src/assets/web-panel/assets/FormItemContext-DtT3ZEZK.js +0 -2
- package/src/assets/web-panel/assets/GenericCardRenderer-DgITtFRv.js +0 -1
- package/src/assets/web-panel/assets/GenericCardRenderer-o85VDYQS.css +0 -1
- package/src/assets/web-panel/assets/Git-CCY42R8S.js +0 -2
- package/src/assets/web-panel/assets/Governance-DtCS4NDm.css +0 -1
- package/src/assets/web-panel/assets/Governance-N66Bwvqg.js +0 -1
- package/src/assets/web-panel/assets/Inference-BkbPuR_2.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-B3PibXdA.js +0 -1
- package/src/assets/web-panel/assets/Logs-CUtNB_N6.js +0 -2
- package/src/assets/web-panel/assets/Logs-DQbCaYhL.css +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-D-V4dOe3.js +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-DbzhFwvz.css +0 -1
- package/src/assets/web-panel/assets/Marketplace-Bvo5cuGa.css +0 -1
- package/src/assets/web-panel/assets/Marketplace-DLNJb6Nr.js +0 -1
- package/src/assets/web-panel/assets/McpTools-2zGjJb5K.js +0 -4
- package/src/assets/web-panel/assets/McpTools-534Q95Mx.css +0 -1
- package/src/assets/web-panel/assets/Memory-9rNZ1EvR.js +0 -2
- package/src/assets/web-panel/assets/Memory-CleW_R6V.css +0 -1
- package/src/assets/web-panel/assets/MobileBridge-Cw7sAAgn.js +0 -1
- package/src/assets/web-panel/assets/MobileBridge-D3Arxfeg.css +0 -1
- package/src/assets/web-panel/assets/MobileProjects-8XACrqqy.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-mg02JNy-.js +0 -6
- package/src/assets/web-panel/assets/MtcAudit-B1Vkhj2l.js +0 -19
- package/src/assets/web-panel/assets/MtcAudit-C1JM8esp.css +0 -1
- package/src/assets/web-panel/assets/Multisig-BQEeA7GG.js +0 -13
- package/src/assets/web-panel/assets/Multisig-BryR2Jpr.css +0 -1
- package/src/assets/web-panel/assets/NLProgramming-BIbkjZV3.js +0 -1
- package/src/assets/web-panel/assets/NLProgramming-DGDHq6Z9.css +0 -1
- package/src/assets/web-panel/assets/Notes-BKKmMtqV.css +0 -1
- package/src/assets/web-panel/assets/Notes-DIwhkZNY.js +0 -7
- package/src/assets/web-panel/assets/NotificationSettings-CG3Kfuef.css +0 -1
- package/src/assets/web-panel/assets/NotificationSettings-Cj9175ce.js +0 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-CfrDjSHT.css +0 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-IfNpXT2R.js +0 -1
- package/src/assets/web-panel/assets/Organization-DPFp6G9o.js +0 -4
- package/src/assets/web-panel/assets/Organization-LVvqwG0D.css +0 -1
- package/src/assets/web-panel/assets/P2P-DcFvP7F-.css +0 -1
- package/src/assets/web-panel/assets/P2P-tXck8GLq.js +0 -2
- package/src/assets/web-panel/assets/PdhVaultBrowser-DSvpQl9k.js +0 -7
- package/src/assets/web-panel/assets/PdhVaultBrowser-DZZrUOr1.css +0 -1
- package/src/assets/web-panel/assets/Permissions-CKPkdLj-.js +0 -4
- package/src/assets/web-panel/assets/Permissions-DsPE_IQy.css +0 -1
- package/src/assets/web-panel/assets/PersonalDataHub-BhpRlh9D.css +0 -1
- package/src/assets/web-panel/assets/PersonalDataHub-DnqXc12l.js +0 -9
- package/src/assets/web-panel/assets/Pipeline-BItr5CyP.css +0 -1
- package/src/assets/web-panel/assets/Pipeline-BKjFU_kd.js +0 -1
- package/src/assets/web-panel/assets/Privacy-ChC-J5Tn.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-ByFZG9sY.js +0 -2
- package/src/assets/web-panel/assets/ProjectSettings-Bbv1Kiw-.js +0 -2
- package/src/assets/web-panel/assets/ProjectSettings-DK7KA_iX.css +0 -1
- package/src/assets/web-panel/assets/Projects-CmJeUDBW.css +0 -1
- package/src/assets/web-panel/assets/Projects-QYyGW31-.js +0 -1
- package/src/assets/web-panel/assets/Providers-C6q_fvea.css +0 -1
- package/src/assets/web-panel/assets/Providers-CJLnWw0r.js +0 -1
- package/src/assets/web-panel/assets/QrScannerModal-NwAHNfiJ.css +0 -1
- package/src/assets/web-panel/assets/QuickAsk-DoXU0np9.js +0 -1
- package/src/assets/web-panel/assets/Recommend-DCo_vuaf.js +0 -1
- package/src/assets/web-panel/assets/Recommend-D_bf91K6.css +0 -1
- package/src/assets/web-panel/assets/RemoteSession-CLuL925Z.js +0 -5
- package/src/assets/web-panel/assets/Reputation-CNNCA_-M.js +0 -1
- package/src/assets/web-panel/assets/Reputation-DiOsOleI.css +0 -1
- package/src/assets/web-panel/assets/Row-Vu4j631i.js +0 -1
- package/src/assets/web-panel/assets/RssFeed-C18B4xiy.js +0 -3
- package/src/assets/web-panel/assets/RssFeed-CjcbkyUb.css +0 -1
- package/src/assets/web-panel/assets/Search-DxiqccE2.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-Droe_hHI.js +0 -4
- package/src/assets/web-panel/assets/Services-CwmmyXzq.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-Dp-d2miK.js +0 -1
- package/src/assets/web-panel/assets/Sla-2DFXVbK4.js +0 -1
- package/src/assets/web-panel/assets/Sla-sodqCU4a.css +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-Cdd9lCoy.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-CxQhcYSk.js +0 -2
- package/src/assets/web-panel/assets/Tasks-BHWVRfXx.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-DNFk3a5_.js +0 -1
- package/src/assets/web-panel/assets/Tenant-B6X6dPo8.js +0 -1
- package/src/assets/web-panel/assets/Tenant-MuPJnOjk.css +0 -1
- package/src/assets/web-panel/assets/Terminal-BuUNoLGM.js +0 -3
- package/src/assets/web-panel/assets/Terminal-DHoveJwj.css +0 -1
- package/src/assets/web-panel/assets/TimelineRenderer-BlTAtkOc.css +0 -1
- package/src/assets/web-panel/assets/TimelineRenderer-DThrBYj8.js +0 -1
- package/src/assets/web-panel/assets/Tokens-CA_u4Blu.js +0 -1
- package/src/assets/web-panel/assets/Tokens-CynVae-o.css +0 -1
- package/src/assets/web-panel/assets/Trust-C-WrW0Fj.css +0 -1
- package/src/assets/web-panel/assets/Trust-DHcLpNy3.js +0 -1
- package/src/assets/web-panel/assets/UkeySign-B_fni4C2.js +0 -1
- package/src/assets/web-panel/assets/VideoEditing-BDFghpzP.css +0 -1
- package/src/assets/web-panel/assets/VideoEditing-g9nf2EhS.js +0 -1
- package/src/assets/web-panel/assets/Wallet-C8pOjIve.js +0 -4
- package/src/assets/web-panel/assets/Wallet-DUbpTRcg.css +0 -1
- package/src/assets/web-panel/assets/WebAuthn-BaKNjxZt.js +0 -5
- package/src/assets/web-panel/assets/WebAuthn-CVAFRfCQ.css +0 -1
- package/src/assets/web-panel/assets/WorkflowEditor-429lPWYk.css +0 -1
- package/src/assets/web-panel/assets/WorkflowEditor-CX030Wb1.js +0 -1
- package/src/assets/web-panel/assets/createContext-B8rTvO61.js +0 -1
- package/src/assets/web-panel/assets/devWarning-B4_IVU_n.js +0 -1
- package/src/assets/web-panel/assets/echarts-C61Vn3mP.js +0 -25
- package/src/assets/web-panel/assets/index--6BUI55w.js +0 -1
- package/src/assets/web-panel/assets/index-5Q1bepcM.js +0 -1
- package/src/assets/web-panel/assets/index-B10Ia2KL.js +0 -21
- package/src/assets/web-panel/assets/index-B1SLBLli.js +0 -3
- package/src/assets/web-panel/assets/index-B8_VQAav.js +0 -1
- package/src/assets/web-panel/assets/index-BMuPJra-.js +0 -1
- package/src/assets/web-panel/assets/index-BOCjph-k.js +0 -12
- package/src/assets/web-panel/assets/index-BpBaOWmV.js +0 -1
- package/src/assets/web-panel/assets/index-CDlHvQtw.js +0 -1
- package/src/assets/web-panel/assets/index-CPF7Vqri.js +0 -55
- package/src/assets/web-panel/assets/index-CPmgKQcl.js +0 -1
- package/src/assets/web-panel/assets/index-CcpMHPWd.js +0 -21
- package/src/assets/web-panel/assets/index-Cyksnofp.js +0 -1
- package/src/assets/web-panel/assets/index-Dc9pcin6.js +0 -1
- package/src/assets/web-panel/assets/index-DfAC55QA.js +0 -19
- package/src/assets/web-panel/assets/index-DgNCfwvg.js +0 -1
- package/src/assets/web-panel/assets/index-DvfhIBNZ.js +0 -1
- package/src/assets/web-panel/assets/index-Hbzd9WeI.js +0 -1
- package/src/assets/web-panel/assets/index-IiS7WoUl.js +0 -13
- package/src/assets/web-panel/assets/index-Xa6TlaD7.js +0 -31
- package/src/assets/web-panel/assets/index-YczWc2_0.js +0 -12
- package/src/assets/web-panel/assets/index-h_ANnbR8.js +0 -3
- package/src/assets/web-panel/assets/index-k7QsBwyo.js +0 -75
- package/src/assets/web-panel/assets/isSymbol-S5WZT7lS.js +0 -1
- package/src/assets/web-panel/assets/motion-B1hpJYSD.js +0 -11
- package/src/assets/web-panel/assets/useFlexGapSupport-BClv53kR.js +0 -1
- package/src/assets/web-panel/assets/vendor-Bn1JzzAn.js +0 -42
- package/src/assets/web-panel/assets/vnode-ejVeFJ0x.js +0 -1
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { createHash } from "node:crypto";
|
|
4
|
+
import { captureGoalWorkspace } from "./goal-workspace-evidence.js";
|
|
5
|
+
import { sameGoalWorkspace } from "./goal-check-evidence.js";
|
|
6
|
+
import {
|
|
7
|
+
checkGoalVerificationCancellation,
|
|
8
|
+
goalVerificationError,
|
|
9
|
+
runGoalVerificationCommand,
|
|
10
|
+
} from "./goal-verification-command.js";
|
|
11
|
+
|
|
12
|
+
export const GOAL_VERIFICATION_SCHEMA = "chainlesschain.goal-verification/v1";
|
|
13
|
+
const PREPARED_SCHEMA = "chainlesschain.prepared-goal-verification/v1";
|
|
14
|
+
const digest = (value) =>
|
|
15
|
+
`sha256:${createHash("sha256").update(value).digest("hex")}`;
|
|
16
|
+
const fail = (message) => {
|
|
17
|
+
throw goalVerificationError(message);
|
|
18
|
+
};
|
|
19
|
+
const fileCall = (file) => ({ tool: "read_file", args: { path: file } });
|
|
20
|
+
|
|
21
|
+
function fields(value, allowed, label) {
|
|
22
|
+
if (
|
|
23
|
+
!value ||
|
|
24
|
+
typeof value !== "object" ||
|
|
25
|
+
Array.isArray(value) ||
|
|
26
|
+
Object.keys(value).some((key) => !allowed.includes(key))
|
|
27
|
+
)
|
|
28
|
+
fail(`${label} contains unsupported fields`);
|
|
29
|
+
}
|
|
30
|
+
function text(value, label, maximum = 4096) {
|
|
31
|
+
if (
|
|
32
|
+
typeof value !== "string" ||
|
|
33
|
+
!value.trim() ||
|
|
34
|
+
value.length > maximum ||
|
|
35
|
+
/[\0\r\n]/u.test(value)
|
|
36
|
+
)
|
|
37
|
+
fail(`${label} is invalid`);
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
function list(value, label, maximum) {
|
|
41
|
+
if (!Array.isArray(value) || value.length === 0 || value.length > maximum)
|
|
42
|
+
fail(`${label} must contain 1-${maximum} entries`);
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
function freeze(value) {
|
|
46
|
+
if (value && typeof value === "object") {
|
|
47
|
+
Object.values(value).forEach(freeze);
|
|
48
|
+
Object.freeze(value);
|
|
49
|
+
}
|
|
50
|
+
return value;
|
|
51
|
+
}
|
|
52
|
+
function remaining(deadline) {
|
|
53
|
+
const ms = deadline - Date.now();
|
|
54
|
+
if (ms <= 0)
|
|
55
|
+
fail("Goal verification preparation exceeded its resource limit");
|
|
56
|
+
return ms;
|
|
57
|
+
}
|
|
58
|
+
async function bindFile(
|
|
59
|
+
file,
|
|
60
|
+
signal,
|
|
61
|
+
deadline,
|
|
62
|
+
maxFileBytes = 8 * 1024 * 1024,
|
|
63
|
+
) {
|
|
64
|
+
checkGoalVerificationCancellation(signal);
|
|
65
|
+
const binding = await captureGoalWorkspace(
|
|
66
|
+
path.dirname(file),
|
|
67
|
+
fileCall(path.basename(file)),
|
|
68
|
+
{
|
|
69
|
+
signal,
|
|
70
|
+
limits: {
|
|
71
|
+
maxFileBytes,
|
|
72
|
+
maxBytes: maxFileBytes,
|
|
73
|
+
maxMs: Math.min(15_000, remaining(deadline)),
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
);
|
|
77
|
+
checkGoalVerificationCancellation(signal);
|
|
78
|
+
if (!binding.verified)
|
|
79
|
+
fail(`Goal checker input is unavailable (${binding.reason}): ${file}`);
|
|
80
|
+
return { path: file, binding };
|
|
81
|
+
}
|
|
82
|
+
async function readManifest(file, signal, deadline) {
|
|
83
|
+
const before = await bindFile(file, signal, deadline, 64 * 1024);
|
|
84
|
+
const handle = await fs.open(file, "r");
|
|
85
|
+
let bytes;
|
|
86
|
+
try {
|
|
87
|
+
const buffer = Buffer.alloc(64 * 1024 + 1);
|
|
88
|
+
let size = 0;
|
|
89
|
+
while (size < buffer.length) {
|
|
90
|
+
checkGoalVerificationCancellation(signal);
|
|
91
|
+
const next = await handle.read(buffer, size, buffer.length - size, size);
|
|
92
|
+
if (next.bytesRead === 0) break;
|
|
93
|
+
size += next.bytesRead;
|
|
94
|
+
}
|
|
95
|
+
if (size > 64 * 1024) fail("Goal verification manifest is too large");
|
|
96
|
+
bytes = buffer.subarray(0, size);
|
|
97
|
+
} finally {
|
|
98
|
+
await handle.close();
|
|
99
|
+
}
|
|
100
|
+
const after = await bindFile(file, signal, deadline, 64 * 1024);
|
|
101
|
+
if (
|
|
102
|
+
!sameGoalWorkspace(before.binding, after.binding) ||
|
|
103
|
+
digest(bytes) !== before.binding.artifacts[0].digest
|
|
104
|
+
)
|
|
105
|
+
fail("Goal verification manifest changed while it was read");
|
|
106
|
+
let manifest;
|
|
107
|
+
try {
|
|
108
|
+
manifest = JSON.parse(
|
|
109
|
+
new TextDecoder("utf-8", { fatal: true }).decode(bytes),
|
|
110
|
+
);
|
|
111
|
+
} catch {
|
|
112
|
+
fail("Goal verification manifest must be valid UTF-8 JSON");
|
|
113
|
+
}
|
|
114
|
+
return { manifest, input: after };
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** Prepare before any author turn. On resume, the original definition and
|
|
118
|
+
* checker input identities win; replacing a manifest cannot weaken the goal.
|
|
119
|
+
*/
|
|
120
|
+
export async function prepareGoalVerification(condition, cwd, { signal } = {}) {
|
|
121
|
+
const deadline = Date.now() + 30_000;
|
|
122
|
+
const manifestPath = path.resolve(cwd, text(condition.path, "manifest path"));
|
|
123
|
+
const { manifest, input } = await readManifest(
|
|
124
|
+
manifestPath,
|
|
125
|
+
signal,
|
|
126
|
+
deadline,
|
|
127
|
+
);
|
|
128
|
+
fields(
|
|
129
|
+
manifest,
|
|
130
|
+
["schema", "checks", "artifacts"],
|
|
131
|
+
"Goal verification manifest",
|
|
132
|
+
);
|
|
133
|
+
if (manifest.schema !== GOAL_VERIFICATION_SCHEMA)
|
|
134
|
+
fail("Unknown Goal verification manifest schema");
|
|
135
|
+
const root = await fs.realpath(path.resolve(cwd));
|
|
136
|
+
const artifacts = list(manifest.artifacts, "artifacts", 32).map((name) => {
|
|
137
|
+
const target = path.resolve(root, text(name, "artifact path"));
|
|
138
|
+
const relative = path.relative(root, target);
|
|
139
|
+
if (
|
|
140
|
+
!relative ||
|
|
141
|
+
relative === ".." ||
|
|
142
|
+
relative.startsWith(`..${path.sep}`) ||
|
|
143
|
+
path.isAbsolute(relative)
|
|
144
|
+
)
|
|
145
|
+
fail("Goal verification artifacts must be files inside the workspace");
|
|
146
|
+
return relative.split(path.sep).join("/");
|
|
147
|
+
});
|
|
148
|
+
const ids = new Set(),
|
|
149
|
+
inputs = new Map([[manifestPath, input]]);
|
|
150
|
+
const checks = [];
|
|
151
|
+
for (const value of list(manifest.checks, "checks", 8)) {
|
|
152
|
+
fields(
|
|
153
|
+
value,
|
|
154
|
+
["id", "executable", "args", "checkerFiles", "timeoutMs", "requirements"],
|
|
155
|
+
"Goal check",
|
|
156
|
+
);
|
|
157
|
+
const id = text(value.id, "check id", 80);
|
|
158
|
+
if (!/^[a-zA-Z0-9][a-zA-Z0-9_.-]*$/u.test(id) || ids.has(id))
|
|
159
|
+
fail("Goal check IDs must be distinct identifiers");
|
|
160
|
+
ids.add(id);
|
|
161
|
+
const requirements = list(value.requirements, "requirements", 32).map(
|
|
162
|
+
(requirement) => text(requirement, "requirement ID", 80),
|
|
163
|
+
);
|
|
164
|
+
if (
|
|
165
|
+
new Set(requirements).size !== requirements.length ||
|
|
166
|
+
requirements.some(
|
|
167
|
+
(requirement) => !/^[a-zA-Z0-9][a-zA-Z0-9_.-]*$/u.test(requirement),
|
|
168
|
+
)
|
|
169
|
+
)
|
|
170
|
+
fail("Requirement IDs must be distinct identifiers within each check");
|
|
171
|
+
const executable = text(value.executable, "checker executable");
|
|
172
|
+
if (executable !== "node" && !path.isAbsolute(executable))
|
|
173
|
+
fail("Use node or an absolute checker executable path");
|
|
174
|
+
if (
|
|
175
|
+
!Array.isArray(value.args) ||
|
|
176
|
+
value.args.length > 64 ||
|
|
177
|
+
value.args.some(
|
|
178
|
+
(arg) =>
|
|
179
|
+
typeof arg !== "string" || arg.length > 4096 || arg.includes("\0"),
|
|
180
|
+
)
|
|
181
|
+
)
|
|
182
|
+
fail("Goal checker args must be a bounded string array");
|
|
183
|
+
const timeoutMs = value.timeoutMs ?? 30_000;
|
|
184
|
+
if (!Number.isSafeInteger(timeoutMs) || timeoutMs < 1 || timeoutMs > 60_000)
|
|
185
|
+
fail("Goal checker timeout must be 1-60000ms");
|
|
186
|
+
const checkerFiles = [];
|
|
187
|
+
for (const name of list(value.checkerFiles, "checkerFiles", 32)) {
|
|
188
|
+
const file = path.resolve(
|
|
189
|
+
path.dirname(manifestPath),
|
|
190
|
+
text(name, "checker input"),
|
|
191
|
+
);
|
|
192
|
+
if (
|
|
193
|
+
artifacts.some(
|
|
194
|
+
(artifact) =>
|
|
195
|
+
path.relative(file, path.resolve(root, artifact)) === "",
|
|
196
|
+
)
|
|
197
|
+
)
|
|
198
|
+
fail("A mutable deliverable cannot also be a frozen checker input");
|
|
199
|
+
if (!inputs.has(file)) {
|
|
200
|
+
if (inputs.size >= 65) fail("Too many frozen checker inputs");
|
|
201
|
+
inputs.set(file, await bindFile(file, signal, deadline));
|
|
202
|
+
}
|
|
203
|
+
checkerFiles.push(file);
|
|
204
|
+
}
|
|
205
|
+
checks.push({
|
|
206
|
+
id,
|
|
207
|
+
executable,
|
|
208
|
+
args: [...value.args],
|
|
209
|
+
checkerFiles,
|
|
210
|
+
timeoutMs,
|
|
211
|
+
requirements,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
const prepared = {
|
|
215
|
+
schema: PREPARED_SCHEMA,
|
|
216
|
+
workspace: root,
|
|
217
|
+
manifestPath,
|
|
218
|
+
checks,
|
|
219
|
+
artifacts,
|
|
220
|
+
inputs: [...inputs.values()],
|
|
221
|
+
};
|
|
222
|
+
const planDigest = digest(JSON.stringify(prepared));
|
|
223
|
+
if (
|
|
224
|
+
condition.verification &&
|
|
225
|
+
(condition.verification.schema !== PREPARED_SCHEMA ||
|
|
226
|
+
condition.verification.digest !== planDigest)
|
|
227
|
+
)
|
|
228
|
+
fail(
|
|
229
|
+
"The frozen Goal verification definition changed; resume cannot replace its acceptance checks",
|
|
230
|
+
);
|
|
231
|
+
return freeze({
|
|
232
|
+
...condition,
|
|
233
|
+
verification: { ...prepared, digest: planDigest },
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
async function currentInputs(plan, signal) {
|
|
238
|
+
const deadline = Date.now() + 30_000;
|
|
239
|
+
for (const input of plan.inputs) {
|
|
240
|
+
try {
|
|
241
|
+
const current = await bindFile(input.path, signal, deadline);
|
|
242
|
+
if (!sameGoalWorkspace(input.binding, current.binding)) return false;
|
|
243
|
+
} catch {
|
|
244
|
+
checkGoalVerificationCancellation(signal);
|
|
245
|
+
return false;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return true;
|
|
249
|
+
}
|
|
250
|
+
async function captureInputs(plan, signal) {
|
|
251
|
+
checkGoalVerificationCancellation(signal);
|
|
252
|
+
const source = await captureGoalWorkspace(
|
|
253
|
+
plan.workspace,
|
|
254
|
+
{ tool: "run_shell" },
|
|
255
|
+
{ signal },
|
|
256
|
+
);
|
|
257
|
+
const artifacts = [];
|
|
258
|
+
for (const artifact of plan.artifacts) {
|
|
259
|
+
checkGoalVerificationCancellation(signal);
|
|
260
|
+
artifacts.push(
|
|
261
|
+
await captureGoalWorkspace(plan.workspace, fileCall(artifact), {
|
|
262
|
+
signal,
|
|
263
|
+
}),
|
|
264
|
+
);
|
|
265
|
+
}
|
|
266
|
+
checkGoalVerificationCancellation(signal);
|
|
267
|
+
return {
|
|
268
|
+
source,
|
|
269
|
+
artifacts,
|
|
270
|
+
verified: source.verified && artifacts.every((entry) => entry.verified),
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
function sameInputs(left, right) {
|
|
274
|
+
return (
|
|
275
|
+
sameGoalWorkspace(left.source, right.source) &&
|
|
276
|
+
left.artifacts.length === right.artifacts.length &&
|
|
277
|
+
left.artifacts.every((entry, index) =>
|
|
278
|
+
sameGoalWorkspace(entry, right.artifacts[index]),
|
|
279
|
+
)
|
|
280
|
+
);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/** All independently declared checks must pass against one unchanged candidate.
|
|
284
|
+
* The author/model cannot supply the command result or select a passing subset.
|
|
285
|
+
*/
|
|
286
|
+
export async function evaluateGoalVerification(
|
|
287
|
+
condition,
|
|
288
|
+
{
|
|
289
|
+
cwd,
|
|
290
|
+
signal,
|
|
291
|
+
deadline = Infinity,
|
|
292
|
+
runCommand = runGoalVerificationCommand,
|
|
293
|
+
onCheckStart = () => {},
|
|
294
|
+
} = {},
|
|
295
|
+
) {
|
|
296
|
+
checkGoalVerificationCancellation(signal);
|
|
297
|
+
const plan = condition.verification;
|
|
298
|
+
if (!plan || plan.schema !== PREPARED_SCHEMA)
|
|
299
|
+
fail("Goal verification was not prepared before the author turn");
|
|
300
|
+
if ((await fs.realpath(path.resolve(cwd))) !== plan.workspace)
|
|
301
|
+
fail("Goal verification workspace changed");
|
|
302
|
+
const evidence = {
|
|
303
|
+
kind: "verification",
|
|
304
|
+
source: "host-prepared-checks",
|
|
305
|
+
planDigest: plan.digest,
|
|
306
|
+
manifestPath: plan.manifestPath,
|
|
307
|
+
requiredChecks: plan.checks.map((check) => check.id),
|
|
308
|
+
checks: [],
|
|
309
|
+
checkerInputs: plan.inputs,
|
|
310
|
+
coverage: { required: plan.checks.length, executed: 0, passed: 0 },
|
|
311
|
+
manualReviewRequired: false,
|
|
312
|
+
};
|
|
313
|
+
const unmet = (reason) => ({ met: false, reason, evidence });
|
|
314
|
+
if (Date.now() >= deadline)
|
|
315
|
+
return unmet("Goal time budget exhausted before independent verification");
|
|
316
|
+
if (!(await currentInputs(plan, signal)))
|
|
317
|
+
fail(
|
|
318
|
+
"Frozen Goal checker inputs changed; stop and review the acceptance definition",
|
|
319
|
+
);
|
|
320
|
+
const before = await captureInputs(plan, signal);
|
|
321
|
+
evidence.workspace = before;
|
|
322
|
+
if (!before.verified)
|
|
323
|
+
return unmet(
|
|
324
|
+
"Goal source or required artifact evidence is missing or incomplete",
|
|
325
|
+
);
|
|
326
|
+
for (const check of plan.checks) {
|
|
327
|
+
checkGoalVerificationCancellation(signal);
|
|
328
|
+
await onCheckStart({
|
|
329
|
+
met: false,
|
|
330
|
+
reason: `Independent Goal check ${check.id} is starting`,
|
|
331
|
+
evidence: { ...structuredClone(evidence), pendingCheckId: check.id },
|
|
332
|
+
});
|
|
333
|
+
checkGoalVerificationCancellation(signal);
|
|
334
|
+
const remainingMs = deadline - Date.now();
|
|
335
|
+
if (remainingMs <= 0)
|
|
336
|
+
return unmet(
|
|
337
|
+
"Goal time budget exhausted before independent verification",
|
|
338
|
+
);
|
|
339
|
+
const result = await runCommand(check, {
|
|
340
|
+
cwd: plan.workspace,
|
|
341
|
+
signal,
|
|
342
|
+
timeoutMs: Math.min(check.timeoutMs, remainingMs),
|
|
343
|
+
});
|
|
344
|
+
checkGoalVerificationCancellation(signal);
|
|
345
|
+
evidence.checks.push(result);
|
|
346
|
+
evidence.coverage.executed++;
|
|
347
|
+
if (!(await currentInputs(plan, signal)))
|
|
348
|
+
fail(
|
|
349
|
+
"Frozen Goal checker inputs changed during verification; stop and review",
|
|
350
|
+
);
|
|
351
|
+
const after = await captureInputs(plan, signal);
|
|
352
|
+
evidence.workspaceCurrent = after.verified && sameInputs(before, after);
|
|
353
|
+
if (!evidence.workspaceCurrent)
|
|
354
|
+
return unmet(
|
|
355
|
+
"Goal source or artifacts changed during independent verification",
|
|
356
|
+
);
|
|
357
|
+
if (result?.status !== "passed" || result.exitCode !== 0 || result.signal)
|
|
358
|
+
return unmet(
|
|
359
|
+
`Independent Goal check ${check.id} did not pass (${result?.status || "unknown"})`,
|
|
360
|
+
);
|
|
361
|
+
evidence.coverage.passed++;
|
|
362
|
+
}
|
|
363
|
+
if (Date.now() >= deadline)
|
|
364
|
+
return unmet("Goal time budget expired before verification settled");
|
|
365
|
+
checkGoalVerificationCancellation(signal);
|
|
366
|
+
return {
|
|
367
|
+
met: true,
|
|
368
|
+
reason:
|
|
369
|
+
"All independent Goal checks passed for the current source and required artifacts",
|
|
370
|
+
evidence,
|
|
371
|
+
};
|
|
372
|
+
}
|
|
@@ -4,6 +4,10 @@ import { providerFetch } from "./formal-budget-provider-scope.js";
|
|
|
4
4
|
import { isFormalBudgetError } from "./formal-budget-errors.js";
|
|
5
5
|
import { normalizeOllamaBaseUrl } from "./ollama-base-url.js";
|
|
6
6
|
import { resolveModelCapabilityProfile } from "./model-capabilities.js";
|
|
7
|
+
import {
|
|
8
|
+
projectEnvelopePricingContext,
|
|
9
|
+
projectUsagePricingContext,
|
|
10
|
+
} from "./usage-pricing-context.js";
|
|
7
11
|
import {
|
|
8
12
|
createOpenAIResponsesBody,
|
|
9
13
|
normalizeOpenAIResponsesResponse,
|
|
@@ -23,10 +27,6 @@ export function normalizeLlmProbeUsage(provider, data, runtimeProtocol = null) {
|
|
|
23
27
|
if (!data || typeof data !== "object" || Array.isArray(data)) return null;
|
|
24
28
|
let usage;
|
|
25
29
|
if (provider === "openai" && runtimeProtocol === "openai-responses") {
|
|
26
|
-
// The existing Responses codec owns cached/reasoning token accounting.
|
|
27
|
-
// Do not invent a priced cache-write split that the probe has not verified.
|
|
28
|
-
const writes = data.usage?.input_tokens_details?.cache_write_tokens;
|
|
29
|
-
if (writes !== undefined && writes !== 0) return null;
|
|
30
30
|
usage = normalizeOpenAIResponsesUsage(data.usage);
|
|
31
31
|
} else if (provider === "ollama") {
|
|
32
32
|
usage = {
|
|
@@ -91,7 +91,9 @@ export function normalizeLlmProbeUsage(provider, data, runtimeProtocol = null) {
|
|
|
91
91
|
? 0
|
|
92
92
|
: usage.cache_creation_input_tokens,
|
|
93
93
|
};
|
|
94
|
-
return Object.values(normalized).every(count)
|
|
94
|
+
return Object.values(normalized).every(count)
|
|
95
|
+
? { ...normalized, ...projectEnvelopePricingContext(usage, data) }
|
|
96
|
+
: null;
|
|
95
97
|
}
|
|
96
98
|
|
|
97
99
|
export function priceLlmProbeUsage(target, usage) {
|
|
@@ -105,6 +107,7 @@ export function priceLlmProbeUsage(target, usage) {
|
|
|
105
107
|
].every(count)
|
|
106
108
|
)
|
|
107
109
|
return null;
|
|
110
|
+
const context = projectUsagePricingContext(usage);
|
|
108
111
|
const estimate = estimateCost({
|
|
109
112
|
provider: target.provider,
|
|
110
113
|
model: target.model,
|
|
@@ -112,6 +115,9 @@ export function priceLlmProbeUsage(target, usage) {
|
|
|
112
115
|
outputTokens: usage.output_tokens,
|
|
113
116
|
cacheReadTokens: usage.cache_read_input_tokens,
|
|
114
117
|
cacheCreationTokens: usage.cache_creation_input_tokens,
|
|
118
|
+
...context,
|
|
119
|
+
serviceTier: context.service_tier ?? "standard",
|
|
120
|
+
regionalProcessing: context.regional_processing === true,
|
|
115
121
|
});
|
|
116
122
|
return estimate.matched && Number.isFinite(estimate.totalCost)
|
|
117
123
|
? estimate.totalCost
|
|
@@ -130,6 +136,7 @@ export function llmProbeReceipt(
|
|
|
130
136
|
output_tokens: usage.output_tokens,
|
|
131
137
|
cache_read_input_tokens: usage.cache_read_input_tokens,
|
|
132
138
|
cache_creation_input_tokens: usage.cache_creation_input_tokens,
|
|
139
|
+
...projectUsagePricingContext(usage),
|
|
133
140
|
};
|
|
134
141
|
return {
|
|
135
142
|
schema: LLM_PROBE_SCHEMA,
|
package/src/lib/llm-pricing.js
CHANGED
|
@@ -220,6 +220,7 @@ export function normalizePricingTerms(value) {
|
|
|
220
220
|
"cacheReadMultiplier",
|
|
221
221
|
"cacheWriteMultiplier",
|
|
222
222
|
"cacheWrite1hMultiplier",
|
|
223
|
+
"cacheWrite12hMultiplier",
|
|
223
224
|
"longContext",
|
|
224
225
|
"serviceMultipliers",
|
|
225
226
|
]);
|
|
@@ -230,6 +231,7 @@ export function normalizePricingTerms(value) {
|
|
|
230
231
|
"cacheReadMultiplier",
|
|
231
232
|
"cacheWriteMultiplier",
|
|
232
233
|
"cacheWrite1hMultiplier",
|
|
234
|
+
"cacheWrite12hMultiplier",
|
|
233
235
|
]) {
|
|
234
236
|
if (!Object.hasOwn(value, key)) continue;
|
|
235
237
|
if (!finite(value[key])) fail();
|
|
@@ -333,8 +335,8 @@ export function lookupRate(provider, model, table = PRICE_TABLE) {
|
|
|
333
335
|
* currency:string, matched:boolean, free:boolean, rate:object|null }}
|
|
334
336
|
*/
|
|
335
337
|
// Prompt-cache price multipliers relative to the input rate. A cache WRITE
|
|
336
|
-
// (Anthropic 5-minute
|
|
337
|
-
//
|
|
338
|
+
// (Anthropic 5-minute / OpenAI 30-minute) bills at 125%; longer TTLs have
|
|
339
|
+
// separate rates and require usage evidence. Cache READ pricing differs — Anthropic
|
|
338
340
|
// ~10%, OpenAI ~50%, DeepSeek ~25% of the input rate — so the default below is
|
|
339
341
|
// overridden per provider. Applied only when cache token counts are present, so
|
|
340
342
|
// non-caching usage is priced exactly as before. Public list-price estimates
|
|
@@ -361,6 +363,8 @@ export function estimateCost({
|
|
|
361
363
|
cacheCreationTokens = 0,
|
|
362
364
|
cacheCreation5mTokens,
|
|
363
365
|
cacheCreation1hTokens,
|
|
366
|
+
cacheCreation30mTokens,
|
|
367
|
+
cacheCreation12hTokens,
|
|
364
368
|
cacheCreationInvalid = false,
|
|
365
369
|
pricingContextInvalid = false,
|
|
366
370
|
requestInputTokens,
|
|
@@ -378,9 +382,25 @@ export function estimateCost({
|
|
|
378
382
|
Number.isSafeInteger(cacheCreation1hTokens) &&
|
|
379
383
|
cacheCreation1hTokens >= 0 &&
|
|
380
384
|
cacheCreation5mTokens + cacheCreation1hTokens === cacheCreationTokens;
|
|
385
|
+
const openaiSplitPresent =
|
|
386
|
+
cacheCreation30mTokens != null || cacheCreation12hTokens != null;
|
|
387
|
+
const openaiSplitValid =
|
|
388
|
+
openaiSplitPresent &&
|
|
389
|
+
Number.isSafeInteger(cacheCreation30mTokens) &&
|
|
390
|
+
cacheCreation30mTokens >= 0 &&
|
|
391
|
+
Number.isSafeInteger(cacheCreation12hTokens) &&
|
|
392
|
+
cacheCreation12hTokens >= 0 &&
|
|
393
|
+
cacheCreation30mTokens + cacheCreation12hTokens === cacheCreationTokens;
|
|
381
394
|
const missingCacheEvidence =
|
|
382
395
|
cacheCreationInvalid ||
|
|
383
396
|
(splitPresent && !splitValid) ||
|
|
397
|
+
(openaiSplitPresent && !openaiSplitValid) ||
|
|
398
|
+
(openaiSplitPresent && splitPresent) ||
|
|
399
|
+
(openaiSplitPresent && rate?.terms?.cacheWrite12hMultiplier == null) ||
|
|
400
|
+
(splitPresent && rate?.terms?.cacheWrite12hMultiplier != null) ||
|
|
401
|
+
(rate?.terms?.cacheWrite12hMultiplier != null &&
|
|
402
|
+
cacheCreationTokens > 0 &&
|
|
403
|
+
!openaiSplitValid) ||
|
|
384
404
|
(rate?.terms?.cacheWrite1hMultiplier != null &&
|
|
385
405
|
cacheCreationTokens > 0 &&
|
|
386
406
|
!splitValid);
|
|
@@ -432,12 +452,16 @@ export function estimateCost({
|
|
|
432
452
|
inputMultiplier *
|
|
433
453
|
multiplier;
|
|
434
454
|
const cacheCreationCost =
|
|
435
|
-
((
|
|
436
|
-
?
|
|
437
|
-
(rate.terms
|
|
438
|
-
|
|
439
|
-
:
|
|
440
|
-
|
|
455
|
+
((openaiSplitValid
|
|
456
|
+
? cacheCreation30mTokens *
|
|
457
|
+
(rate.terms.cacheWriteMultiplier ?? CACHE_WRITE_MULTIPLIER) +
|
|
458
|
+
cacheCreation12hTokens * rate.terms.cacheWrite12hMultiplier
|
|
459
|
+
: splitValid
|
|
460
|
+
? cacheCreation5mTokens *
|
|
461
|
+
(rate.terms?.cacheWriteMultiplier ?? CACHE_WRITE_MULTIPLIER) +
|
|
462
|
+
cacheCreation1hTokens * (rate.terms?.cacheWrite1hMultiplier ?? 2)
|
|
463
|
+
: Number(cacheCreationTokens) *
|
|
464
|
+
(rate.terms?.cacheWriteMultiplier ?? CACHE_WRITE_MULTIPLIER)) /
|
|
441
465
|
1e6) *
|
|
442
466
|
rate.in *
|
|
443
467
|
inputMultiplier *
|
|
@@ -474,6 +498,8 @@ export function priceRollup(aggregate, { table } = {}) {
|
|
|
474
498
|
cacheCreationTokens: row.cacheCreationTokens,
|
|
475
499
|
cacheCreation5mTokens: row.cacheCreation5mTokens,
|
|
476
500
|
cacheCreation1hTokens: row.cacheCreation1hTokens,
|
|
501
|
+
cacheCreation30mTokens: row.cacheCreation30mTokens,
|
|
502
|
+
cacheCreation12hTokens: row.cacheCreation12hTokens,
|
|
477
503
|
cacheCreationInvalid: row.cacheCreationInvalid,
|
|
478
504
|
pricingContextInvalid:
|
|
479
505
|
row.pricingContextInvalid === true ||
|