chainlesschain 0.166.45 → 0.166.47
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 +6 -4
- package/package.json +3 -1
- package/src/assets/web-panel/assets/{AIOps-CrMhYNeH.js → AIOps-CDpT0WXV.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-DLY5blZ3.js → ActionButton-BNfUljWx.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-C0NhKQB0.js → Analytics-C9323DEx.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-DLyepgMq.js → AppLayout-CRrjb2db.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-Depk01Sa.js → Artifacts-Db-DGqJS.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-jKe6NQ3J.js → Audit-CJdHRJ0W.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-CG4GKT9s.js → BackgroundAgents-_RSCnTYs.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-DYWCkzwM.js → Backup-8GFQi-dM.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-xm5vodmJ.js → BaseInput-C87NtgUZ.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-B20_PNd3.js → Chat-DcTMWS8G.js} +5 -5
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-D4d-eh0F.js → ChatBubbleRenderer-5ZDPTW_H.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-CfgwkV_r.js → Checkbox-DM9EmYee.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DbnoWI44.js → Codegen-M2YqDRNN.js} +1 -1
- package/src/assets/web-panel/assets/{Col-CfzzhgGw.js → Col-oB1LLxyf.js} +1 -1
- package/src/assets/web-panel/assets/{Community-BU7mGM8p.js → Community-TcVZK5tF.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DpYim0an.js → Compact-XKmq-3K_.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BNJcO6ra.js → Compliance-C6CBiDRy.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CecZ-pWj.js → Cowork-Dz9CGqXH.js} +4 -4
- package/src/assets/web-panel/assets/{Cron-BG_C1fe3.js → Cron-CxJDgDVL.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-BAeILQLL.js → Crosschain-DMP0JsaQ.js} +1 -1
- package/src/assets/web-panel/assets/{DID-CYqOEkXi.js → DID-I5IQeogb.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-BYU8wmL1.js → Dashboard-BfLW2MXj.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-DYlJeTTa.js → Dropdown-BK8EjAlh.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-C0M6py3K.js → EmailListRenderer-C3iqSv5I.js} +1 -1
- package/src/assets/web-panel/assets/EvolutionSettings-BJmBzpW6.js +1 -0
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-Du90iDch.js → FamilyGuardDashboard-T19rnqm-.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-DkFp_hzB.js → Federation-CozrbPMy.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-BGgtGTfG.js → FormItemContext-k1dCLNNJ.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-BIDsSCei.js → GenericCardRenderer-DbaW_Jvt.js} +1 -1
- package/src/assets/web-panel/assets/{Git--d3Te93J.js → Git-CQHRyEIt.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-CZwD0vmO.js → Governance-BMJYZgMy.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-DiDcSFEW.js → Inference-B7mpNU7V.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-Bi0hSfzg.js → KnowledgeGraph-Br0Blg6B.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-C8NHSc0K.js → Logs-HIdk0S6M.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-DfDuADqF.js → MarkdownRenderer-HxeocBHy.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-D6kD0bNf.js → Marketplace-Bkfq69UP.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-mTSamCr5.js → McpTools-dtmx0bHO.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-YQBXfLjU.js → Memory-CrRlOuEf.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-D2awuupp.js → MobileBridge-D4ZIZiAH.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-Bl7lZc_-.js → MobileProjects-C90Rw7GE.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-CBqjLK2Q.js → Mtc-CC6k_uh4.js} +5 -5
- package/src/assets/web-panel/assets/{MtcAudit-C4poRInZ.js → MtcAudit-T_CUIYUy.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-C_J0zXYZ.js → Multisig-N_e0RRWk.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-Ci43sWOU.js → NLProgramming-Iq3VzEv0.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-DN7A-GFZ.js → Notes-B5sKJUJt.js} +4 -4
- package/src/assets/web-panel/assets/{NotificationSettings-D5jNm71V.js → NotificationSettings-K8UVp8qQ.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-C9UsPOG8.js → OrderTableRenderer-BWNyM-6m.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-BapYMJrP.js → Organization-DMO1NJxI.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-BwxwjhFw.js → Overflow-BBY6b31Z.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-TObXXOu3.js → P2P-DmsL0y0v.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-UwJvMbFO.js → PdhVaultBrowser-C65AX_RY.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-Damnxv-O.js → Permissions-CWcpRtWa.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-d_7jlBb-.js → PersonalDataHub--ZNDIdsn.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-DA87VjLw.js → Pipeline-DCdj5NGb.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-DzO_UvWn.js → Privacy-BRKu7Q3E.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-CwqECDhs.js → ProjectInit-BJ7ozIAb.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CT5YdIl6.js → ProjectSettings-B2cVLiXW.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-D3KdZPCv.js → Projects-Ce9r_W-p.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-BjBIS8kk.js → Providers-BDespvGZ.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-mMFqiKkI.js → QrScannerModal-BUNO4fDU.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-BwGi9ZU1.js → QuickAsk-D2TUqeBV.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-BY65SR5s.js → Recommend-BNNQPHBH.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-BGsVH_XU.js → RemoteSession-D2t1V_Cm.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-DpPbxSgI.js → Reputation-DVK5hEqI.js} +1 -1
- package/src/assets/web-panel/assets/{Row-B5YBYoVz.js → Row-BB9RTwmE.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-DvM5jaoh.js → RssFeed-DmEO7liZ.js} +2 -2
- package/src/assets/web-panel/assets/{Search-6RX39EPO.js → Search-UwEYjnDB.js} +1 -1
- package/src/assets/web-panel/assets/{Security-Beal-7cM.js → Security-DebqSsMp.js} +4 -4
- package/src/assets/web-panel/assets/{Services-D6rjVLe-.js → Services-CuuPts3C.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-Dur7R7vz.js → Skeleton-DbWpmbgf.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-D1QkGwMk.js → Skills-BaK7SxzT.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-3ObrX8Es.js → Sla-BFHv51Jb.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-DG_KAiH1.js → SpeechSettings-B9b1R6uK.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-BaHq0SJ2.js → SyncSettings-BnO0CN02.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-BDpAkBAB.js → Tasks-Dy01Vq49.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-tYdoRd-c.js → Templates-BCy2AMHc.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-yGS5zIQ1.js → Tenant-4Tx9y_Y1.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-B3QbmVFa.js → Terminal-CPOoUH8J.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-B_7Pr5dS.js → TimelineRenderer-C85GlJzu.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-DPvpDa53.js → Tokens-_xneFBGF.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DcSAD0GZ.js → Trigger-BizG4rTr.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BBzEq-uy.js → Trust-Dh8EIn3n.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-Dssav7-5.js → UkeySign-C5NWoHWQ.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-CPOZf4yi.js → VideoEditing-0YfrySL6.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-BzBVRXEq.js → Wallet-BZVH8Ags.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DdSGaCCh.js → WebAuthn-kNofa6vm.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-CKjBFoSs.js → WorkflowEditor-BNO34_j0.js} +1 -1
- package/src/assets/web-panel/assets/{chat-B9aMGLg0.js → chat-ifQ2FlwD.js} +1 -1
- package/src/assets/web-panel/assets/{colors-GFCMctSV.js → colors-1TL8H6EH.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BqSDFAYJ.js → compact-item-DBfRjs_T.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-BwUm3Ffp.js → createContext-Bs6V4iBf.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-BHnbnuYL.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-DN1kMJOT.js → hasIn-Bz6LMY_0.js} +1 -1
- package/src/assets/web-panel/assets/{index-B4dI_csl.js → index--WvT2Il3.js} +1 -1
- package/src/assets/web-panel/assets/{index-B7Yu5wwV.js → index-84mi5rsv.js} +1 -1
- package/src/assets/web-panel/assets/{index-DAK28GY8.js → index-B5SJCUZ7.js} +1 -1
- package/src/assets/web-panel/assets/{index-CmEHzOsw.js → index-B6RClMZl.js} +1 -1
- package/src/assets/web-panel/assets/{index-By9GbJhu.js → index-BB1Af7Fv.js} +1 -1
- package/src/assets/web-panel/assets/{index-7W1e9Vi4.js → index-BQL_tldd.js} +1 -1
- package/src/assets/web-panel/assets/{index-BDL2MwxN.js → index-BXJXMaZe.js} +1 -1
- package/src/assets/web-panel/assets/{index-CEMl-Qte.js → index-BhPDhmvN.js} +1 -1
- package/src/assets/web-panel/assets/{index-BCnbC2z7.js → index-BiZ7Nz5-.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cwih67e8.js → index-BoCTDcn6.js} +1 -1
- package/src/assets/web-panel/assets/{index-DI90Wo_P.js → index-BxqC3LiO.js} +1 -1
- package/src/assets/web-panel/assets/{index-THsr_UUJ.js → index-C6c0j-Ki.js} +1 -1
- package/src/assets/web-panel/assets/{index-PKwZkQDC.js → index-C7d6QlfR.js} +1 -1
- package/src/assets/web-panel/assets/{index-rCTtYCGu.js → index-C9QYxq61.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ci0zIpSX.js → index-CBh48_Mh.js} +1 -1
- package/src/assets/web-panel/assets/{index-tMF_deZb.js → index-CNKHoXWI.js} +1 -1
- package/src/assets/web-panel/assets/{index-B9Pe-EyB.js → index-CXVBQ82k.js} +3 -3
- package/src/assets/web-panel/assets/{index-B4MfxM5W.js → index-CXtiLagi.js} +1 -1
- package/src/assets/web-panel/assets/{index-DaFr7XB1.js → index-Cn7EIWmI.js} +1 -1
- package/src/assets/web-panel/assets/index-CsRz9-ZH.js +1 -0
- package/src/assets/web-panel/assets/{index-D8jcp9Rj.js → index-CtB45Hok.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cli0VREv.js → index-Cu_V6ZJH.js} +1 -1
- package/src/assets/web-panel/assets/{index-DO-IKERp.js → index-Cykt9BbN.js} +1 -1
- package/src/assets/web-panel/assets/{index-y7cfh9rP.js → index-DDhy4eCS.js} +1 -1
- package/src/assets/web-panel/assets/{index-CH2wK5dx.js → index-DEPPzM8I.js} +1 -1
- package/src/assets/web-panel/assets/{index-BeycSy7n.js → index-DMVktlxG.js} +1 -1
- package/src/assets/web-panel/assets/{index-BwssFWI1.js → index-DOww5Qny.js} +1 -1
- package/src/assets/web-panel/assets/{index-PJt1Zrx2.js → index-DWPp-d07.js} +1 -1
- package/src/assets/web-panel/assets/index-DnjMFf3m.js +1 -0
- package/src/assets/web-panel/assets/{index-BPGlcDvs.js → index-DvM2xBUA.js} +1 -1
- package/src/assets/web-panel/assets/{index-BL_0ndQc.js → index-EK3XtMxA.js} +1 -1
- package/src/assets/web-panel/assets/{index-DnJt9DaX.js → index-XJIV7HEw.js} +1 -1
- package/src/assets/web-panel/assets/{index-BpiR6uzH.js → index-cNwsev6n.js} +1 -1
- package/src/assets/web-panel/assets/{index-bwb4cg_D.js → index-f_7L9GvP.js} +1 -1
- package/src/assets/web-panel/assets/{index-DbDhKroq.js → index-lUL3bD2z.js} +1 -1
- package/src/assets/web-panel/assets/{index-DvvJWwT8.js → index-pOUFfRdN.js} +1 -1
- package/src/assets/web-panel/assets/{index-BBMW8bQO.js → index-rGhS02f8.js} +1 -1
- package/src/assets/web-panel/assets/{index-CRikhGgx.js → index-vHtnQsnV.js} +1 -1
- package/src/assets/web-panel/assets/{index-BHUxz4dy.js → index-vb1XIxEB.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-B6e5CZ5p.js → initDefaultProps-DpRIjwTt.js} +1 -1
- package/src/assets/web-panel/assets/{motion-riMM1KfJ.js → motion-CG4_9o-Z.js} +1 -1
- package/src/assets/web-panel/assets/{move-C1NSDMjc.js → move-Dku1fXtf.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-Bibuny9B.js → mtc-parser-BvAVeX-3.js} +1 -1
- package/src/assets/web-panel/assets/{omit-Cmf6FoRn.js → omit-DFu0x78D.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-BSsYBUCY.js → pickAttrs-CmI-FNcK.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-gSB7-GAS.js → placementArrow-CGERYewB.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-qaqttvKa.js → responsiveObserve-D7G8bF5J.js} +1 -1
- package/src/assets/web-panel/assets/{slide-RX2gxl3k.js → slide-B2sXwWXy.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-DEJmkhqw.js → statusUtils-DI5yh0n3.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CIWmJ78O.js → styleChecker-deGJ5dp_.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-D-UPSQBE.js → useFlexGapSupport-OqHBXEmi.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-9QFtqADc.js → useFs-Dqgx0Qv_.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-DM6kyift.js → usePersonalDataHub-Be-lveh2.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-C-q6FNSJ.js → vnode-CFxB876W.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-D4WJY2m8.js → zoom-BFOYrl4e.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +3 -3
- package/src/commands/agent.js +11 -7
- package/src/commands/background-session.js +31 -3
- package/src/commands/chat.js +5 -1
- package/src/commands/eval.js +86 -28
- package/src/commands/llm.js +104 -1
- package/src/commands/plugin.js +130 -1
- package/src/commands/sandbox.js +121 -2
- package/src/commands/serve.js +11 -2
- package/src/commands/skill.js +29 -0
- package/src/data/changelog.json +26 -0
- package/src/gateways/ws/session-protocol.js +13 -0
- package/src/gateways/ws/ws-agent-handler.js +17 -0
- package/src/gateways/ws/ws-server.js +3 -0
- package/src/gateways/ws/ws-session-state.js +131 -0
- package/src/generated/cc-agent-protocol.schema.json +4 -0
- package/src/lazy-dispatch.js +8 -1
- package/src/lib/agent-sandbox.js +337 -53
- package/src/lib/app-server/cli-agent-kernel-adapter.js +28 -0
- package/src/lib/app-server/server.js +93 -0
- package/src/lib/background-agent-keeper-client.js +2 -0
- package/src/lib/background-agent-keeper-protocol.js +7 -0
- package/src/lib/background-agent-supervisor.js +194 -47
- package/src/lib/codex-app-server-adapter.js +81 -27
- package/src/lib/context-memory-kernel/durable-memory-port.js +31 -8
- package/src/lib/context-memory-kernel/provider-context.js +53 -19
- package/src/lib/deferred-question-context.js +122 -0
- package/src/lib/eval/evidence.js +202 -64
- package/src/lib/eval/plugin-suite.js +917 -0
- package/src/lib/eval/runner.js +10 -3
- package/src/lib/evolution/agent-evolution-ingress.js +60 -8
- package/src/lib/evolution/agent-evolution-runtime-composition.js +236 -1
- package/src/lib/evolution/agent-model-projection.js +97 -1
- package/src/lib/evolution/evidence-backed-wiki-maintainer.js +154 -1
- package/src/lib/evolution/evolution-artifact-ports.js +6 -0
- package/src/lib/evolution/evolution-deployment-loader.js +188 -10
- package/src/lib/evolution/evolution-eval-gate.js +8 -0
- package/src/lib/evolution/evolution-eval-runtime-composition.js +255 -0
- package/src/lib/evolution/evolution-evidence-artifact-adapter.js +58 -2
- package/src/lib/evolution/evolution-ledger-file-backend.js +23 -2
- package/src/lib/evolution/evolution-ledger-manifest-chain.js +223 -7
- package/src/lib/evolution/evolution-ledger-v2-journal.js +525 -0
- package/src/lib/evolution/evolution-ledger-v2-manifest-backend.js +46 -2
- package/src/lib/evolution/evolution-ledger.js +57 -1
- package/src/lib/evolution/evolution-run-ledger-adapter.js +93 -0
- package/src/lib/evolution/evolution-run-wiki-evidence-resolver.js +259 -0
- package/src/lib/evolution/governed-hub-llm.js +238 -5
- package/src/lib/evolution/governed-hub-resolver.js +82 -4
- package/src/lib/evolution/governed-hub-skill.js +11 -5
- package/src/lib/evolution/governed-skill-synthesis-provider-chat.js +10 -1
- package/src/lib/evolution/skill-runtime-revalidation-ledger-adapter.js +254 -0
- package/src/lib/evolution/skill-runtime-revalidation.js +530 -0
- package/src/lib/evolution/skill-target-matrix-eval.js +4 -4
- package/src/lib/evolution/wiki-evidence-commit-guard.js +366 -0
- package/src/lib/evolution/wiki-informed-skill-proposer.js +13 -1
- package/src/lib/goal-context.js +14 -5
- package/src/lib/interaction-adapter.js +166 -1
- package/src/lib/model-capabilities.js +271 -0
- package/src/lib/model-context-catalog.js +105 -0
- package/src/lib/model-context-window.js +4 -49
- package/src/lib/openai-responses.js +428 -0
- package/src/lib/plugin-runtime/scopes.js +7 -1
- package/src/lib/remote-read-loop-guard.js +2 -2
- package/src/lib/runtime-usage-ledger.js +16 -0
- package/src/lib/skill-loader.js +12 -0
- package/src/lib/with-file-lock.js +3 -1
- package/src/repl/agent-repl.js +6 -2
- package/src/runtime/agent-core.js +357 -44
- package/src/runtime/agent-runtime.js +7 -0
- package/src/runtime/coding-agent-contract-shared.cjs +13 -1
- package/src/runtime/headless-runner.js +4 -1
- package/src/runtime/headless-stream.js +133 -44
- package/src/runtime/runtime-factory.js +26 -2
- package/src/workers/background-agent-keeper.js +23 -13
- package/src/workers/background-agent-worker.js +27 -13
- package/src/assets/web-panel/assets/EvolutionSettings-_QnjPFZJ.js +0 -1
- package/src/assets/web-panel/assets/devWarning-LxtRBsCm.js +0 -1
- package/src/assets/web-panel/assets/index-36hxBH-o.js +0 -1
- package/src/assets/web-panel/assets/index-C0b78zWZ.js +0 -1
package/src/lib/eval/runner.js
CHANGED
|
@@ -8,8 +8,9 @@
|
|
|
8
8
|
* runEvalSuite gives each task a fresh temp workspace, runs `setup` to lay down
|
|
9
9
|
* the starting files, hands `prompt` to the agent (via an injected `runAgent` so
|
|
10
10
|
* the harness is testable without a live LLM), then runs `check` to decide
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
* artifacts deterministically. Task success requires both a passing artifact
|
|
12
|
+
* check and an explicitly successful execution; failed runs can retain useful
|
|
13
|
+
* artifact-check results without inflating the reliability score.
|
|
13
14
|
*
|
|
14
15
|
* The real `cc eval` command wires `runAgent` to a headless `cc agent -p` run;
|
|
15
16
|
* unit tests inject a fake runAgent to exercise scoring/report logic offline.
|
|
@@ -146,9 +147,15 @@ export async function runEvalSuite(tasks, opts = {}) {
|
|
|
146
147
|
// and still run check() (the workspace may be partially done).
|
|
147
148
|
rec.error = `agent error: ${agentErr.message}`;
|
|
148
149
|
}
|
|
149
|
-
rec.executionSucceeded =
|
|
150
|
+
rec.executionSucceeded =
|
|
151
|
+
agentResult?.ok === true &&
|
|
152
|
+
!rec.error &&
|
|
153
|
+
(agentResult.error == null || agentResult.error === "");
|
|
150
154
|
rec.agentOk = rec.executionSucceeded;
|
|
151
155
|
rec.executionEvidence = agentResult?.executionEvidence || null;
|
|
156
|
+
if (agentResult?.evaluationMetrics !== undefined) {
|
|
157
|
+
rec.evaluationMetrics = agentResult.evaluationMetrics;
|
|
158
|
+
}
|
|
152
159
|
if (!rec.executionSucceeded && !rec.error) {
|
|
153
160
|
rec.error = `agent error: ${agentResult?.error || "execution did not report success"}`;
|
|
154
161
|
}
|
|
@@ -23,6 +23,14 @@ export const AGENT_EVOLUTION_INGRESS_SCHEMA =
|
|
|
23
23
|
export const AGENT_EVOLUTION_INGRESS_FAILED_CODE =
|
|
24
24
|
"CC_AGENT_EVOLUTION_INGRESS_FAILED";
|
|
25
25
|
|
|
26
|
+
const RESPONSE_CACHE_RECORD_SCHEMA =
|
|
27
|
+
"chainlesschain.model-response-cache/v2";
|
|
28
|
+
const LEGACY_RESPONSE_CACHE_RECORD_SCHEMA =
|
|
29
|
+
"chainlesschain.model-response-cache/v1";
|
|
30
|
+
const RESPONSE_CACHE_IDENTIFIER_BINDING_SCHEMA =
|
|
31
|
+
"chainlesschain.model-response-cache-identifier-binding/v1";
|
|
32
|
+
const HEX_ALPHA = "abcdefghijklmnop";
|
|
33
|
+
|
|
26
34
|
const INGRESSES = new WeakSet();
|
|
27
35
|
const CORE_EVENT_KINDS = new Map([
|
|
28
36
|
["tool-executing", "tool-requested"],
|
|
@@ -101,6 +109,22 @@ function digest(value) {
|
|
|
101
109
|
return `sha256:${crypto.createHash("sha256").update(canonical(value)).digest("hex")}`;
|
|
102
110
|
}
|
|
103
111
|
|
|
112
|
+
function cacheIdentifierBinding(kind, value) {
|
|
113
|
+
const input = requiredString(value, `Cache ${kind}`);
|
|
114
|
+
const bytes = crypto
|
|
115
|
+
.createHash("sha256")
|
|
116
|
+
.update(
|
|
117
|
+
`${RESPONSE_CACHE_IDENTIFIER_BINDING_SCHEMA}\0${kind}\0${input}`,
|
|
118
|
+
"utf8",
|
|
119
|
+
)
|
|
120
|
+
.digest();
|
|
121
|
+
let encoded = "";
|
|
122
|
+
for (const byte of bytes) {
|
|
123
|
+
encoded += HEX_ALPHA[byte >>> 4] + HEX_ALPHA[byte & 0x0f];
|
|
124
|
+
}
|
|
125
|
+
return encoded;
|
|
126
|
+
}
|
|
127
|
+
|
|
104
128
|
function timestamp(value, label) {
|
|
105
129
|
const date = new Date(value);
|
|
106
130
|
if (!Number.isFinite(date.getTime()) || date.toISOString() !== value) {
|
|
@@ -263,10 +287,21 @@ export function createAgentEvolutionIngress({
|
|
|
263
287
|
throw new Error("Cache receipt requires a recorded model response");
|
|
264
288
|
const payload = cacheRecord
|
|
265
289
|
? {
|
|
266
|
-
schema:
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
290
|
+
schema: RESPONSE_CACHE_RECORD_SCHEMA,
|
|
291
|
+
identifierBindingSchema:
|
|
292
|
+
RESPONSE_CACHE_IDENTIFIER_BINDING_SCHEMA,
|
|
293
|
+
requestKeyBinding: cacheIdentifierBinding(
|
|
294
|
+
"request key",
|
|
295
|
+
evidence.requestKey,
|
|
296
|
+
),
|
|
297
|
+
sourceRunIdBinding: cacheIdentifierBinding(
|
|
298
|
+
"source Run ID",
|
|
299
|
+
descriptor.runId,
|
|
300
|
+
),
|
|
301
|
+
sourceEventIdBinding: cacheIdentifierBinding(
|
|
302
|
+
"source event ID",
|
|
303
|
+
lastModelResponse.eventId,
|
|
304
|
+
),
|
|
270
305
|
responseEvent: clone(lastModelResponse.event),
|
|
271
306
|
}
|
|
272
307
|
: (modelRequest ?? clone(evidence));
|
|
@@ -433,6 +468,18 @@ export function createAgentEvolutionIngress({
|
|
|
433
468
|
);
|
|
434
469
|
const projection = resolved.bundle.modelProjection;
|
|
435
470
|
const record = projection.content;
|
|
471
|
+
const legacyRecord =
|
|
472
|
+
record?.schema === LEGACY_RESPONSE_CACHE_RECORD_SCHEMA;
|
|
473
|
+
const currentRecord =
|
|
474
|
+
record?.schema === RESPONSE_CACHE_RECORD_SCHEMA &&
|
|
475
|
+
record.identifierBindingSchema ===
|
|
476
|
+
RESPONSE_CACHE_IDENTIFIER_BINDING_SCHEMA &&
|
|
477
|
+
record.requestKeyBinding ===
|
|
478
|
+
cacheIdentifierBinding("request key", requestKey) &&
|
|
479
|
+
record.sourceRunIdBinding ===
|
|
480
|
+
cacheIdentifierBinding("source Run ID", receipt.runId) &&
|
|
481
|
+
typeof record.sourceEventIdBinding === "string" &&
|
|
482
|
+
/^[a-p]{64}$/u.test(record.sourceEventIdBinding);
|
|
436
483
|
if (
|
|
437
484
|
resolved.verification.verified !== true ||
|
|
438
485
|
resolved.verification.tenantId !== descriptor.tenantId ||
|
|
@@ -440,16 +487,21 @@ export function createAgentEvolutionIngress({
|
|
|
440
487
|
projection.visibility !== "model-visible" ||
|
|
441
488
|
projection.truncated ||
|
|
442
489
|
projection.injectionFindings.length !== 0 ||
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
490
|
+
(!currentRecord &&
|
|
491
|
+
(!legacyRecord ||
|
|
492
|
+
record.requestKey !== requestKey ||
|
|
493
|
+
record.sourceRunId !== receipt.runId)) ||
|
|
446
494
|
record.responseEvent?.type !== "response-complete"
|
|
447
495
|
)
|
|
448
496
|
throw new Error(
|
|
449
497
|
"Cache response projection is not safe or request-bound",
|
|
450
498
|
);
|
|
451
499
|
const responseEvent = loaded.events.find(
|
|
452
|
-
(item) =>
|
|
500
|
+
(item) =>
|
|
501
|
+
legacyRecord
|
|
502
|
+
? item.eventId === record.sourceEventId
|
|
503
|
+
: cacheIdentifierBinding("source event ID", item.eventId) ===
|
|
504
|
+
record.sourceEventIdBinding,
|
|
453
505
|
);
|
|
454
506
|
if (
|
|
455
507
|
responseEvent?.data?.evidenceKind !== "response-completed" ||
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
import {
|
|
12
12
|
EvolutionEvidenceBundleVerifier,
|
|
13
13
|
EvolutionEvidenceProjector,
|
|
14
|
+
EvolutionEvidenceReader,
|
|
14
15
|
} from "./evolution-evidence-projector.js";
|
|
15
16
|
import { EvolutionArtifactPorts } from "./evolution-artifact-ports.js";
|
|
16
17
|
import {
|
|
@@ -18,12 +19,17 @@ import {
|
|
|
18
19
|
createEvolutionLedgerFileBackend,
|
|
19
20
|
} from "./evolution-ledger-file-backend.js";
|
|
20
21
|
import { EvolutionRunLedgerAdapter } from "./evolution-run-ledger-adapter.js";
|
|
22
|
+
import { createEvolutionRunWikiEvidenceResolver } from "./evolution-run-wiki-evidence-resolver.js";
|
|
23
|
+
import { WikiMaintainerLedgerAdapter } from "./wiki-maintainer-ledger-adapter.js";
|
|
24
|
+
import { EvidenceBackedWikiMaintainer } from "./evidence-backed-wiki-maintainer.js";
|
|
25
|
+
import { createWikiEvidenceCommitGuard } from "./wiki-evidence-commit-guard.js";
|
|
21
26
|
import { EvolutionWorkbenchMetricsLedgerAdapter } from "./evolution-workbench-metrics-ledger-adapter.js";
|
|
22
27
|
import { EvolutionReleaseTrainLedgerAdapter } from "./evolution-release-train-ledger-adapter.js";
|
|
23
28
|
import { WikiSkillProposalLedgerAdapter } from "./wiki-skill-proposal-ledger-adapter.js";
|
|
24
29
|
import { EvolutionReleaseTrainStageOutputLedgerAdapter } from "./evolution-release-train-stage-output-ledger-adapter.js";
|
|
25
30
|
import { createEvolutionReleaseTrainDomainStages } from "./evolution-release-train-domain-stages.js";
|
|
26
31
|
import { createEvolutionReleaseTrain } from "./evolution-release-train.js";
|
|
32
|
+
import { createEvolutionEvalRuntimeStageConfiguration } from "./evolution-eval-runtime-composition.js";
|
|
27
33
|
import { captureSkillOutcomeSourceCatalogAuthority } from "./skill-outcome-source-catalog-authority.js";
|
|
28
34
|
import {
|
|
29
35
|
captureAgentEvolutionIngress,
|
|
@@ -62,6 +68,36 @@ const SKILL_OUTCOME_CATALOG_ENTRY_KEYS = new Set(["runId", "skillNames"]);
|
|
|
62
68
|
const MAX_SKILL_OUTCOME_SOURCES = 128;
|
|
63
69
|
const RELEASE_TRAIN_STAGE_KEYS = new Set(["plan", "stages"]);
|
|
64
70
|
const RELEASE_TRAIN_DOMAIN_KEYS = new Set(["plan", "domain"]);
|
|
71
|
+
const WIKI_MAINTENANCE_KEYS = new Set([
|
|
72
|
+
"principalEnvelope",
|
|
73
|
+
"schemaPolicies",
|
|
74
|
+
"readAuthorities",
|
|
75
|
+
"commitCoordinator",
|
|
76
|
+
"maintainer",
|
|
77
|
+
]);
|
|
78
|
+
const WIKI_READ_AUTHORITY_KEYS = new Set([
|
|
79
|
+
"evidenceState",
|
|
80
|
+
"principalResolver",
|
|
81
|
+
"accessPolicy",
|
|
82
|
+
]);
|
|
83
|
+
const WIKI_COMMIT_COORDINATOR_KEYS = new Set(["acquireCurrentEvidence"]);
|
|
84
|
+
const WIKI_MAINTAINER_KEYS = new Set([
|
|
85
|
+
"maintainerModel",
|
|
86
|
+
"rulesDigest",
|
|
87
|
+
"minCorroboratingSources",
|
|
88
|
+
"derive",
|
|
89
|
+
]);
|
|
90
|
+
const WIKI_STAGE_KEYS = new Set(["request", "usage"]);
|
|
91
|
+
const DOMAIN_STAGE_KEYS = new Set([
|
|
92
|
+
"wiki-maintain",
|
|
93
|
+
"propose",
|
|
94
|
+
"candidate",
|
|
95
|
+
"eval",
|
|
96
|
+
"review",
|
|
97
|
+
"pilot",
|
|
98
|
+
"promotion",
|
|
99
|
+
"wiki-impact",
|
|
100
|
+
]);
|
|
65
101
|
|
|
66
102
|
function exactRecord(value, keys, label) {
|
|
67
103
|
if (
|
|
@@ -191,6 +227,7 @@ export function createAgentEvolutionRuntimeComposition({
|
|
|
191
227
|
evidenceIdGenerator,
|
|
192
228
|
ingressIdGenerator,
|
|
193
229
|
wikiMaintenanceProducer = null,
|
|
230
|
+
wikiMaintenance: wikiMaintenanceInput = null,
|
|
194
231
|
releaseTrain: releaseTrainInput = null,
|
|
195
232
|
completionTriggerKind,
|
|
196
233
|
secure = true,
|
|
@@ -199,7 +236,18 @@ export function createAgentEvolutionRuntimeComposition({
|
|
|
199
236
|
random,
|
|
200
237
|
lockTimeoutMs,
|
|
201
238
|
witnessMaximumBytes,
|
|
239
|
+
ledgerV2: ledgerV2Input = null,
|
|
202
240
|
} = {}) {
|
|
241
|
+
const ledgerV2 =
|
|
242
|
+
ledgerV2Input === null
|
|
243
|
+
? null
|
|
244
|
+
: Object.freeze({
|
|
245
|
+
...exactRecord(
|
|
246
|
+
ledgerV2Input,
|
|
247
|
+
new Set(["createBackend", "minimumRetainedUntil"]),
|
|
248
|
+
"ledger v2 production composition",
|
|
249
|
+
),
|
|
250
|
+
});
|
|
203
251
|
const tenantId = identifier(tenantIdInput, "tenantId");
|
|
204
252
|
const runId = identifier(runIdInput, "runId");
|
|
205
253
|
const audience = identifier(audienceInput, "audience");
|
|
@@ -218,6 +266,79 @@ export function createAgentEvolutionRuntimeComposition({
|
|
|
218
266
|
"authorities.artifact",
|
|
219
267
|
);
|
|
220
268
|
const clock = normalizeClock(clockInput);
|
|
269
|
+
let wikiConfiguration = null;
|
|
270
|
+
if (wikiMaintenanceInput !== null) {
|
|
271
|
+
const input = exactRecord(
|
|
272
|
+
wikiMaintenanceInput,
|
|
273
|
+
WIKI_MAINTENANCE_KEYS,
|
|
274
|
+
"wikiMaintenance",
|
|
275
|
+
);
|
|
276
|
+
const readers = exactRecord(
|
|
277
|
+
input.readAuthorities,
|
|
278
|
+
WIKI_READ_AUTHORITY_KEYS,
|
|
279
|
+
"wikiMaintenance.readAuthorities",
|
|
280
|
+
);
|
|
281
|
+
const maintainer = exactRecord(
|
|
282
|
+
input.maintainer,
|
|
283
|
+
WIKI_MAINTAINER_KEYS,
|
|
284
|
+
"wikiMaintenance.maintainer",
|
|
285
|
+
);
|
|
286
|
+
const coordinator = exactRecord(
|
|
287
|
+
input.commitCoordinator,
|
|
288
|
+
WIKI_COMMIT_COORDINATOR_KEYS,
|
|
289
|
+
"wikiMaintenance.commitCoordinator",
|
|
290
|
+
);
|
|
291
|
+
if (
|
|
292
|
+
utilTypes.isAsyncFunction(coordinator.acquireCurrentEvidence) ||
|
|
293
|
+
utilTypes.isGeneratorFunction(coordinator.acquireCurrentEvidence)
|
|
294
|
+
) {
|
|
295
|
+
throw new TypeError("Wiki commit coordinator must be synchronous");
|
|
296
|
+
}
|
|
297
|
+
const commitCoordinator = Object.freeze({
|
|
298
|
+
acquireCurrentEvidence: capture(
|
|
299
|
+
coordinator,
|
|
300
|
+
"acquireCurrentEvidence",
|
|
301
|
+
"Wiki commit coordinator",
|
|
302
|
+
),
|
|
303
|
+
});
|
|
304
|
+
if (
|
|
305
|
+
!Number.isSafeInteger(maintainer.minCorroboratingSources) ||
|
|
306
|
+
maintainer.minCorroboratingSources < 2 ||
|
|
307
|
+
maintainer.minCorroboratingSources > 128
|
|
308
|
+
) {
|
|
309
|
+
throw new TypeError(
|
|
310
|
+
"Wiki corroboration threshold must be between 2 and 128",
|
|
311
|
+
);
|
|
312
|
+
}
|
|
313
|
+
wikiConfiguration = Object.freeze({
|
|
314
|
+
principalEnvelope: input.principalEnvelope,
|
|
315
|
+
schemaPolicies: input.schemaPolicies,
|
|
316
|
+
commitCoordinator,
|
|
317
|
+
descriptor: Object.freeze({
|
|
318
|
+
tenantId,
|
|
319
|
+
evolutionRunId: runId,
|
|
320
|
+
maintainerModel: maintainer.maintainerModel,
|
|
321
|
+
rulesDigest: maintainer.rulesDigest,
|
|
322
|
+
minCorroboratingSources: maintainer.minCorroboratingSources,
|
|
323
|
+
}),
|
|
324
|
+
derive: capture(maintainer, "derive", "Wiki maintainer"),
|
|
325
|
+
evidenceState: captureAuthority(
|
|
326
|
+
readers.evidenceState,
|
|
327
|
+
"resolve",
|
|
328
|
+
"Wiki evidence state",
|
|
329
|
+
),
|
|
330
|
+
principalResolver: captureAuthority(
|
|
331
|
+
readers.principalResolver,
|
|
332
|
+
"resolve",
|
|
333
|
+
"Wiki principal resolver",
|
|
334
|
+
),
|
|
335
|
+
accessPolicy: captureAuthority(
|
|
336
|
+
readers.accessPolicy,
|
|
337
|
+
"authorize",
|
|
338
|
+
"Wiki access policy",
|
|
339
|
+
),
|
|
340
|
+
});
|
|
341
|
+
}
|
|
221
342
|
if (
|
|
222
343
|
typeof evidenceIdGenerator !== "function" ||
|
|
223
344
|
utilTypes.isProxy(evidenceIdGenerator)
|
|
@@ -342,6 +463,15 @@ export function createAgentEvolutionRuntimeComposition({
|
|
|
342
463
|
ledgerAuthority: authorities.ledger,
|
|
343
464
|
witnessAuthority: authorities.witness,
|
|
344
465
|
artifactResolver: ledgerArtifactResolver,
|
|
466
|
+
...(ledgerV2 === null
|
|
467
|
+
? {}
|
|
468
|
+
: {
|
|
469
|
+
manifestV2: {
|
|
470
|
+
...ledgerV2,
|
|
471
|
+
artifactPorts,
|
|
472
|
+
descriptor: { tenantId, artifactTenantId: tenantId, audience },
|
|
473
|
+
},
|
|
474
|
+
}),
|
|
345
475
|
secure,
|
|
346
476
|
clock,
|
|
347
477
|
...(fsImpl === undefined ? {} : { fsImpl }),
|
|
@@ -384,6 +514,66 @@ export function createAgentEvolutionRuntimeComposition({
|
|
|
384
514
|
ledgerArtifactResolver,
|
|
385
515
|
now: clock,
|
|
386
516
|
});
|
|
517
|
+
let wikiMaintenance = null;
|
|
518
|
+
let wikiMaintainer = null;
|
|
519
|
+
if (wikiConfiguration !== null) {
|
|
520
|
+
const evidenceReader = new EvolutionEvidenceReader({
|
|
521
|
+
attestationVerifier: ports.attestationVerifier,
|
|
522
|
+
evidenceState: wikiConfiguration.evidenceState,
|
|
523
|
+
principalResolver: wikiConfiguration.principalResolver,
|
|
524
|
+
accessPolicy: wikiConfiguration.accessPolicy,
|
|
525
|
+
now: () => new Date(clock()),
|
|
526
|
+
});
|
|
527
|
+
const wikiEvidence = createEvolutionRunWikiEvidenceResolver({
|
|
528
|
+
runAdapter,
|
|
529
|
+
evidenceAdapter,
|
|
530
|
+
evidenceReader,
|
|
531
|
+
principalEnvelope: wikiConfiguration.principalEnvelope,
|
|
532
|
+
schemaPolicies: wikiConfiguration.schemaPolicies,
|
|
533
|
+
});
|
|
534
|
+
const wikiAdapter = new WikiMaintainerLedgerAdapter({
|
|
535
|
+
descriptor: {
|
|
536
|
+
tenantId,
|
|
537
|
+
artifactTenantId: tenantId,
|
|
538
|
+
evolutionRunId: runId,
|
|
539
|
+
audience,
|
|
540
|
+
purpose: "evolution-ledger",
|
|
541
|
+
},
|
|
542
|
+
artifactPorts,
|
|
543
|
+
ledger: backend.ledger,
|
|
544
|
+
ledgerArtifactResolver,
|
|
545
|
+
});
|
|
546
|
+
const wikiCommit = createWikiEvidenceCommitGuard({
|
|
547
|
+
wikiAdapter,
|
|
548
|
+
commitCoordinator: wikiConfiguration.commitCoordinator,
|
|
549
|
+
principalEnvelope: wikiConfiguration.principalEnvelope,
|
|
550
|
+
clock,
|
|
551
|
+
});
|
|
552
|
+
wikiMaintainer = new EvidenceBackedWikiMaintainer({
|
|
553
|
+
descriptor: wikiConfiguration.descriptor,
|
|
554
|
+
policy: {
|
|
555
|
+
trustedProjectionRead: true,
|
|
556
|
+
rawEvidenceRead: false,
|
|
557
|
+
activeSkillWrite: false,
|
|
558
|
+
shell: false,
|
|
559
|
+
network: false,
|
|
560
|
+
secretRead: false,
|
|
561
|
+
},
|
|
562
|
+
ports: {
|
|
563
|
+
...wikiAdapter.maintainerPorts({
|
|
564
|
+
resolveEvidence: wikiEvidence.resolveEvidence,
|
|
565
|
+
derive: wikiConfiguration.derive,
|
|
566
|
+
}),
|
|
567
|
+
commitRevision: wikiCommit.commitRevision,
|
|
568
|
+
},
|
|
569
|
+
});
|
|
570
|
+
// The host receives only scoped maintenance and authenticated Wiki reads,
|
|
571
|
+
// never a Raw store, caller-supplied bundle, or write/approval capability.
|
|
572
|
+
wikiMaintenance = Object.freeze({
|
|
573
|
+
maintain: Object.freeze(wikiMaintainer.maintain.bind(wikiMaintainer)),
|
|
574
|
+
loadWiki: Object.freeze(() => wikiAdapter.loadWiki()),
|
|
575
|
+
});
|
|
576
|
+
}
|
|
387
577
|
const skillOutcomeReaders = new Map();
|
|
388
578
|
const createSkillOutcomeReader = Object.freeze((skillNameInput) => {
|
|
389
579
|
const skillName = identifier(skillNameInput, "skillName");
|
|
@@ -415,6 +605,14 @@ export function createAgentEvolutionRuntimeComposition({
|
|
|
415
605
|
releaseTrainKeys,
|
|
416
606
|
"releaseTrain",
|
|
417
607
|
);
|
|
608
|
+
if (
|
|
609
|
+
wikiMaintainer !== null &&
|
|
610
|
+
!Object.hasOwn(releaseTrainConfig, "domain")
|
|
611
|
+
) {
|
|
612
|
+
throw new TypeError(
|
|
613
|
+
"authorized Wiki maintenance requires production release train domain stages",
|
|
614
|
+
);
|
|
615
|
+
}
|
|
418
616
|
if (
|
|
419
617
|
releaseTrainConfig.plan?.tenantId !== tenantId ||
|
|
420
618
|
typeof releaseTrainConfig.plan?.skillId !== "string"
|
|
@@ -463,8 +661,35 @@ export function createAgentEvolutionRuntimeComposition({
|
|
|
463
661
|
ledger: backend.ledger,
|
|
464
662
|
ledgerArtifactResolver,
|
|
465
663
|
});
|
|
664
|
+
let domain = releaseTrainConfig.domain;
|
|
665
|
+
exactRecord(domain, DOMAIN_STAGE_KEYS, "releaseTrain.domain");
|
|
666
|
+
domain = {
|
|
667
|
+
...domain,
|
|
668
|
+
eval: createEvolutionEvalRuntimeStageConfiguration({
|
|
669
|
+
configuration: domain.eval,
|
|
670
|
+
tenantId,
|
|
671
|
+
runId,
|
|
672
|
+
artifactPorts,
|
|
673
|
+
ledger: backend.ledger,
|
|
674
|
+
ledgerArtifactResolver,
|
|
675
|
+
audience,
|
|
676
|
+
now: clock,
|
|
677
|
+
}),
|
|
678
|
+
};
|
|
679
|
+
if (wikiMaintainer !== null) {
|
|
680
|
+
exactRecord(domain, DOMAIN_STAGE_KEYS, "releaseTrain.domain");
|
|
681
|
+
const wikiStage = exactRecord(
|
|
682
|
+
domain["wiki-maintain"],
|
|
683
|
+
WIKI_STAGE_KEYS,
|
|
684
|
+
"authorized wiki-maintain stage",
|
|
685
|
+
);
|
|
686
|
+
domain = {
|
|
687
|
+
...domain,
|
|
688
|
+
"wiki-maintain": { ...wikiStage, maintainer: wikiMaintainer },
|
|
689
|
+
};
|
|
690
|
+
}
|
|
466
691
|
stages = createEvolutionReleaseTrainDomainStages({
|
|
467
|
-
domain
|
|
692
|
+
domain,
|
|
468
693
|
proposalLedger,
|
|
469
694
|
outputLedger,
|
|
470
695
|
});
|
|
@@ -513,6 +738,15 @@ export function createAgentEvolutionRuntimeComposition({
|
|
|
513
738
|
ledgerAuthority: cacheSourceAuthorities.ledger,
|
|
514
739
|
witnessAuthority: cacheSourceAuthorities.witness,
|
|
515
740
|
artifactResolver: sourceResolver,
|
|
741
|
+
...(ledgerV2 === null
|
|
742
|
+
? {}
|
|
743
|
+
: {
|
|
744
|
+
manifestV2: {
|
|
745
|
+
...ledgerV2,
|
|
746
|
+
artifactPorts: sourcePorts,
|
|
747
|
+
descriptor: { tenantId, artifactTenantId: tenantId, audience },
|
|
748
|
+
},
|
|
749
|
+
}),
|
|
516
750
|
secure,
|
|
517
751
|
clock,
|
|
518
752
|
...(fsImpl === undefined ? {} : { fsImpl }),
|
|
@@ -553,6 +787,7 @@ export function createAgentEvolutionRuntimeComposition({
|
|
|
553
787
|
runId,
|
|
554
788
|
evolutionIngress,
|
|
555
789
|
createSkillOutcomeReader,
|
|
790
|
+
wikiMaintenance,
|
|
556
791
|
loadRun: Object.freeze(() => runAdapter.load()),
|
|
557
792
|
ledgerDescriptor: backend.descriptor,
|
|
558
793
|
storage,
|
|
@@ -11,6 +11,8 @@ const MESSAGE_KEYS = new Set([
|
|
|
11
11
|
"tool_call_id",
|
|
12
12
|
"name",
|
|
13
13
|
"_thinkingBlocks",
|
|
14
|
+
"_openaiReasoningItems",
|
|
15
|
+
"_openaiReasoningSummary",
|
|
14
16
|
]);
|
|
15
17
|
const OPAQUE_BLOCK_SCHEMA =
|
|
16
18
|
"chainlesschain.evolution-agent-opaque-transport-block/v1";
|
|
@@ -124,6 +126,9 @@ function opaqueKind(value, path) {
|
|
|
124
126
|
if (/^messages\.\d+\._thinkingBlocks\.\d+$/u.test(path)) {
|
|
125
127
|
return thinkingBlock(value) ? value.type : null;
|
|
126
128
|
}
|
|
129
|
+
if (/^messages\.\d+\._openaiReasoningItems\.\d+$/u.test(path)) {
|
|
130
|
+
return openAIReasoningItem(value) ? "openai_reasoning" : null;
|
|
131
|
+
}
|
|
127
132
|
return null;
|
|
128
133
|
}
|
|
129
134
|
|
|
@@ -142,13 +147,70 @@ function isOpaqueBlock(value) {
|
|
|
142
147
|
return (
|
|
143
148
|
exactKeys(value, OPAQUE_BLOCK_KEYS) &&
|
|
144
149
|
value.schema === OPAQUE_BLOCK_SCHEMA &&
|
|
145
|
-
["image", "thinking", "redacted_thinking"].includes(
|
|
150
|
+
["image", "thinking", "redacted_thinking", "openai_reasoning"].includes(
|
|
151
|
+
value.kind,
|
|
152
|
+
) &&
|
|
146
153
|
/^sha256:[a-f0-9]{64}$/u.test(value.digest) &&
|
|
147
154
|
Number.isSafeInteger(value.byteLength) &&
|
|
148
155
|
value.byteLength > 0
|
|
149
156
|
);
|
|
150
157
|
}
|
|
151
158
|
|
|
159
|
+
function openAIReasoningItem(value) {
|
|
160
|
+
if (
|
|
161
|
+
!value ||
|
|
162
|
+
typeof value !== "object" ||
|
|
163
|
+
Array.isArray(value) ||
|
|
164
|
+
![Object.prototype, null].includes(Object.getPrototypeOf(value)) ||
|
|
165
|
+
value.type !== "reasoning" ||
|
|
166
|
+
Object.keys(value).some(
|
|
167
|
+
(key) =>
|
|
168
|
+
!["type", "id", "encrypted_content", "summary", "status"].includes(key),
|
|
169
|
+
)
|
|
170
|
+
) {
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
if (
|
|
174
|
+
Object.hasOwn(value, "id") &&
|
|
175
|
+
(typeof value.id !== "string" ||
|
|
176
|
+
!/^[A-Za-z0-9._:-]{1,256}$/u.test(value.id))
|
|
177
|
+
) {
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
if (
|
|
181
|
+
Object.hasOwn(value, "encrypted_content") &&
|
|
182
|
+
(typeof value.encrypted_content !== "string" ||
|
|
183
|
+
value.encrypted_content.length < 1 ||
|
|
184
|
+
value.encrypted_content.length > 256 * 1024 ||
|
|
185
|
+
!/^[\x21-\x7e]+$/u.test(value.encrypted_content))
|
|
186
|
+
) {
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
if (Object.hasOwn(value, "summary")) {
|
|
190
|
+
if (
|
|
191
|
+
!Array.isArray(value.summary) ||
|
|
192
|
+
value.summary.length < 1 ||
|
|
193
|
+
value.summary.length > 16 ||
|
|
194
|
+
value.summary.some(
|
|
195
|
+
(part) =>
|
|
196
|
+
!exactKeys(part, new Set(["type", "text"])) ||
|
|
197
|
+
part.type !== "summary_text" ||
|
|
198
|
+
typeof part.text !== "string" ||
|
|
199
|
+
part.text.length > 8192,
|
|
200
|
+
)
|
|
201
|
+
) {
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (
|
|
206
|
+
Object.hasOwn(value, "status") &&
|
|
207
|
+
!["completed", "in_progress", "incomplete"].includes(value.status)
|
|
208
|
+
) {
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
return Object.keys(value).length > 1 ? value : null;
|
|
212
|
+
}
|
|
213
|
+
|
|
152
214
|
function assertContentBlock(value, path, allowOpaqueTransportBlocks) {
|
|
153
215
|
if (allowOpaqueTransportBlocks && isOpaqueBlock(value)) return;
|
|
154
216
|
if (
|
|
@@ -214,6 +276,36 @@ function assertMessageShape(message, index, allowOpaqueTransportBlocks) {
|
|
|
214
276
|
}
|
|
215
277
|
});
|
|
216
278
|
}
|
|
279
|
+
if (Object.hasOwn(message, "_openaiReasoningItems")) {
|
|
280
|
+
if (
|
|
281
|
+
message.role !== "assistant" ||
|
|
282
|
+
!Array.isArray(message._openaiReasoningItems) ||
|
|
283
|
+
!message._openaiReasoningItems.length ||
|
|
284
|
+
message._openaiReasoningItems.length > 16
|
|
285
|
+
) {
|
|
286
|
+
throw new TypeError(
|
|
287
|
+
"OpenAI reasoning replay requires bounded assistant items",
|
|
288
|
+
);
|
|
289
|
+
}
|
|
290
|
+
message._openaiReasoningItems.forEach((item, itemIndex) => {
|
|
291
|
+
if (
|
|
292
|
+
!(allowOpaqueTransportBlocks && isOpaqueBlock(item)) &&
|
|
293
|
+
!openAIReasoningItem(item)
|
|
294
|
+
) {
|
|
295
|
+
throw new TypeError(
|
|
296
|
+
`OpenAI reasoning item at messages.${index}._openaiReasoningItems.${itemIndex} is unsupported`,
|
|
297
|
+
);
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
if (
|
|
302
|
+
Object.hasOwn(message, "_openaiReasoningSummary") &&
|
|
303
|
+
(message.role !== "assistant" ||
|
|
304
|
+
typeof message._openaiReasoningSummary !== "string" ||
|
|
305
|
+
message._openaiReasoningSummary.length > 8192)
|
|
306
|
+
) {
|
|
307
|
+
throw new TypeError("OpenAI reasoning summary is unsupported");
|
|
308
|
+
}
|
|
217
309
|
}
|
|
218
310
|
|
|
219
311
|
// Capture before the first await. Accessors, proxies and exotic objects cannot
|
|
@@ -326,6 +418,10 @@ function textPath(path, allowStructuredArgumentText = true) {
|
|
|
326
418
|
/^messages\.\d+\._thinkingBlocks\.\d+\.(?:thinking|signature|data)$/u.test(
|
|
327
419
|
path,
|
|
328
420
|
) ||
|
|
421
|
+
/^messages\.\d+\._openaiReasoningItems\.\d+\.(?:encrypted_content|summary\.\d+\.text)$/u.test(
|
|
422
|
+
path,
|
|
423
|
+
) ||
|
|
424
|
+
/^messages\.\d+\._openaiReasoningSummary$/u.test(path) ||
|
|
329
425
|
(allowStructuredArgumentText
|
|
330
426
|
? /^messages\.\d+\.tool_calls\.\d+\.function\.arguments(?:\.|$)/u.test(
|
|
331
427
|
path,
|