chainlesschain 0.166.20 → 0.166.22
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 +67 -9
- package/package.json +2 -2
- package/src/assets/web-panel/assets/{AIOps-CcJst5Zs.js → AIOps-oJ7USzMC.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BpHPFKd3.js → ActionButton-BlgnZe_C.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-DHAsASuS.js → Analytics-D2rRbTLu.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-BTKwo5RC.js → AppLayout-FwS3f0B2.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-BcCBTggA.js → Artifacts-iF-_08Hi.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-z1JvJYbT.js → Audit-D24p0zQw.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-CJ7DCMDR.js → BackgroundAgents-Cg3mRVi9.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-CKpxw4uw.js → Backup-EOqht3H-.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-2jI_IlUB.js → BaseInput-9XWYq2hj.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-C_4RfBeN.js → Chat-Dq5yardA.js} +5 -5
- package/src/assets/web-panel/assets/ChatBubbleRenderer-Ds3pA-ET.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-BnF4z4N1.js → Checkbox-CuyCBoBf.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-m_LMamhM.js → Codegen-DjWtYHNe.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DzMbA760.js → Col-CrVr_iuG.js} +1 -1
- package/src/assets/web-panel/assets/{Community-SScuZUcW.js → Community-C6QxpfGc.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-CiOHRvwQ.js → Compact-B-v5r6Pa.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-97FzYz-6.js → Compliance-zNiLiFgD.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-C0ss-SRl.js → Cowork-D9K7lMOu.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-CCbdc9fp.js → Cron-DAjO36z4.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-BPnabXej.js → Crosschain-Bxqn0aqB.js} +1 -1
- package/src/assets/web-panel/assets/{DID-B65hFnHs.js → DID-DfRmLUe-.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-B6qR_TF2.js → Dashboard-Cz8KF3fr.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-6c-2Fxm-.js → Dropdown-C4oVfkP0.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-GD57mfiz.js → EmailListRenderer-ivyZKN8k.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-B2mxG6LN.js → FamilyGuardDashboard-DoxY1CPW.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-cZS-uvAo.js → Federation-C93gZxnb.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-UbSfBIe1.js → FormItemContext-D_lEjYJE.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-BMAtvGt1.js → GenericCardRenderer-BNFN9YjN.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DAlhOiDA.js → Git-mUu2HcLI.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-B-RRVaP8.js → Governance-CNuosrge.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-DBl-pXYR.js → Inference-DwY5pbCB.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DjqOkvgY.js → KnowledgeGraph-aRUxhACD.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-CEV7AEAD.js → Logs-DFfsWYy_.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-BDCxa4d1.js → MarkdownRenderer-DqTx7_u1.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-oRjzfmYJ.js → Marketplace-COI-ciM-.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BiTnznLw.js → McpTools-BJJwaIpe.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-DR0C5K4N.js → Memory-CDO6SGDZ.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge--oR8wEcp.js → MobileBridge-BlZ5tFf4.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-DKqpYMuG.js → MobileProjects-DuoxbgWz.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-Dg0D6fDQ.js → Mtc-6ec9j70b.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-D4_-yWTK.js → MtcAudit-BuL7HkC7.js} +5 -5
- package/src/assets/web-panel/assets/{Multisig-Coz55FxA.js → Multisig-CJxR85lk.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-BWVjgW9Y.js → NLProgramming-B71O1S4l.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-BflVuGwr.js → Notes-Bsw5zbpV.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-CT0F_dJ7.js → NotificationSettings-BnAhXuK_.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-Dyrnqy_o.js → OrderTableRenderer-BJ0R5GGz.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-CMDTM2z5.js → Organization-B7wwNxoP.js} +2 -2
- package/src/assets/web-panel/assets/{Overflow-acKvvYpC.js → Overflow-CfAGr0gM.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CRq5j9Ax.js → P2P-KhMg22Fz.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-DmtzN6Kn.js → PdhVaultBrowser-NdAXI9ft.js} +4 -4
- package/src/assets/web-panel/assets/{Permissions-SZ-kjJDa.js → Permissions-CIYjqyT7.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-DXh-ZfgJ.js → PersonalDataHub-D2ht3P_R.js} +6 -6
- package/src/assets/web-panel/assets/{Pipeline-DhBU9ftP.js → Pipeline-i6flZW1m.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-BgEXpO_V.js → Privacy-DE0lhYVc.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-B2DJ-dmK.js → ProjectInit-BL3YbyxS.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-ve3SocWc.js → ProjectSettings-CEtdg7ni.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-5ZvFasSJ.js → Projects-CvtU5peJ.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-C8fcF3BK.js → Providers-DKt_Cg-j.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-unjO8lNO.js → QrScannerModal-DA61jNSx.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-BT1QtT7D.js → QuickAsk-fS9ryUmq.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-BSjFrY1w.js → Recommend-CR9dZU5Y.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-CWV0bICg.js → RemoteSession-BV0BR2Dz.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-BMjiMsk2.js → Reputation-BIeGUvYD.js} +1 -1
- package/src/assets/web-panel/assets/{Row-9XCY22PM.js → Row-DHDT1aro.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-DQ9PDy7Q.js → RssFeed-Cq6YKb1h.js} +3 -3
- package/src/assets/web-panel/assets/{Search-Boym2HwG.js → Search-DEF6vsy6.js} +1 -1
- package/src/assets/web-panel/assets/{Security-Gbq3lGQb.js → Security-CHtYiKY9.js} +4 -4
- package/src/assets/web-panel/assets/{Services-OcUfLdnu.js → Services-u16lvBJN.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-BjTog6cA.js → Skeleton-CGbizyDj.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-Dny4ft_1.js → Skills-BZMQcAa7.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-Cy_VnhpZ.js → Sla-Bm-CycVi.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-CrFuL_lp.js → SpeechSettings-BudpA5kr.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-k-FnjuOR.js → SyncSettings-B8q1C1eC.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-ZEqDSo0_.js → Tasks-SU1pBWc-.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-CYYksYV5.js → Templates-CyOfJzmt.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BvTTRTHS.js → Tenant-xqWSm2GP.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-DMOQOtkj.js → Terminal-D1Ttgjsi.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-CnudkJxk.js → TimelineRenderer-Da2lYs5D.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-VW6Wocdp.js → Tokens-B34-SduO.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-BtOxZqP6.js → Trigger-C8zyYm4R.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-XcGJoTQx.js → Trust-D1Pvqems.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-aASNCs5j.js → UkeySign-Do3VVnAy.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-Bz89M52u.js → VideoEditing-Dz7egVIA.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-uU4dSS_N.js → Wallet-Dcuw-OxR.js} +3 -3
- package/src/assets/web-panel/assets/{WebAuthn-Brrroxgr.js → WebAuthn-DPlw-QsB.js} +3 -3
- package/src/assets/web-panel/assets/{WorkflowEditor-Cny-evI9.js → WorkflowEditor-h4OsnU5q.js} +1 -1
- package/src/assets/web-panel/assets/{chat-CJ5iSwWq.js → chat-eO9wEwrW.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DWa-2flG.js → colors-34lSmOXw.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-DFwUfptU.js → compact-item-CK4kEWJ4.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-FHWWcyeB.js → createContext-E0A57xed.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-CF3xafX2.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-QY_TElrN.js → hasIn-BD9ZMGAl.js} +1 -1
- package/src/assets/web-panel/assets/{index-BcVr-LOk.js → index--N0u6kTG.js} +1 -1
- package/src/assets/web-panel/assets/{index-CUiTugu3.js → index-8qMA1DWQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-0umhind6.js → index-B0rkHxKK.js} +1 -1
- package/src/assets/web-panel/assets/{index-wqiOz655.js → index-B_G_ElKO.js} +1 -1
- package/src/assets/web-panel/assets/{index-B18zERdP.js → index-BbX_Dted.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dy2PnKZx.js → index-Bjs90Eh9.js} +1 -1
- package/src/assets/web-panel/assets/{index-th467RN6.js → index-BmNbU2Z6.js} +1 -1
- package/src/assets/web-panel/assets/{index-uRUZdL7I.js → index-Brqc9Emx.js} +1 -1
- package/src/assets/web-panel/assets/{index-hw1J_Oxs.js → index-BsGmo6v1.js} +1 -1
- package/src/assets/web-panel/assets/index-C907rPwd.js +1 -0
- package/src/assets/web-panel/assets/{index-CjejB-z9.js → index-CT1_eRL-.js} +1 -1
- package/src/assets/web-panel/assets/{index-DaHvj4jA.js → index-CZBaqe3d.js} +1 -1
- package/src/assets/web-panel/assets/{index-B33frlaD.js → index-CZkFMeWL.js} +1 -1
- package/src/assets/web-panel/assets/{index-BYbwQ7SP.js → index-Ch175NUw.js} +1 -1
- package/src/assets/web-panel/assets/{index-va4Rt-yM.js → index-CsrKJJcX.js} +1 -1
- package/src/assets/web-panel/assets/{index-DDpXDi4J.js → index-CuSau5ya.js} +1 -1
- package/src/assets/web-panel/assets/{index-D-Mhq8K6.js → index-Cx3Jn1r0.js} +1 -1
- package/src/assets/web-panel/assets/{index-CKS7n6mE.js → index-Cz3unNfL.js} +1 -1
- package/src/assets/web-panel/assets/{index-BRsGZBHc.js → index-D4bB_x_v.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bd7McYpJ.js → index-DCn-ECvK.js} +1 -1
- package/src/assets/web-panel/assets/{index-DUfILsc-.js → index-DFLE2qO9.js} +1 -1
- package/src/assets/web-panel/assets/{index-DUepuy7O.js → index-DGRxt5wj.js} +1 -1
- package/src/assets/web-panel/assets/{index-BR4RMPnB.js → index-DONOUtlz.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dlq-u9E4.js → index-DP-UZAQN.js} +1 -1
- package/src/assets/web-panel/assets/{index-DCHMVYG1.js → index-Da5fmOHB.js} +1 -1
- package/src/assets/web-panel/assets/{index-BiHRihC0.js → index-DcE1BspQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CGv5In_T.js → index-DcbgVLOH.js} +1 -1
- package/src/assets/web-panel/assets/{index-BQCtBurK.js → index-DeXNCyQJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-D2rPJ6Sv.js → index-DiT_REby.js} +1 -1
- package/src/assets/web-panel/assets/{index-CUoLd1dt.js → index-DpfisY1g.js} +1 -1
- package/src/assets/web-panel/assets/{index-2ufsNuVn.js → index-DrOalGut.js} +1 -1
- package/src/assets/web-panel/assets/{index-aTiI7lOQ.js → index-DrSAAuJj.js} +1 -1
- package/src/assets/web-panel/assets/{index-BUNwuu5v.js → index-DrsDA_md.js} +1 -1
- package/src/assets/web-panel/assets/{index-CkmgbT7h.js → index-DvKcroix.js} +1 -1
- package/src/assets/web-panel/assets/{index-BEjwv2x6.js → index-DzXjP44T.js} +1 -1
- package/src/assets/web-panel/assets/{index-CeGn0A4W.js → index-MIg5Z8qe.js} +1 -1
- package/src/assets/web-panel/assets/{index-C5F1vwec.js → index-o8pYehRq.js} +3 -3
- package/src/assets/web-panel/assets/index-wueRSK2d.js +1 -0
- package/src/assets/web-panel/assets/{index-w3SdYwaC.js → index-yAGBu2E0.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-BeSPUFDz.js → initDefaultProps-DMTkAomF.js} +1 -1
- package/src/assets/web-panel/assets/{motion-Dcajvjm9.js → motion-Cnti1F5g.js} +1 -1
- package/src/assets/web-panel/assets/{move-B76orau-.js → move-CGxmHUga.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-zB6yFwcX.js → mtc-parser-CuwwLoq7.js} +1 -1
- package/src/assets/web-panel/assets/{omit-BsbNjz8w.js → omit-BpdlTkPM.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-BiJ9tssQ.js → pickAttrs-D7nWrThp.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-BdfMjMeN.js → placementArrow-Bhx0TV8F.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-rV4LGpbU.js → responsiveObserve-CZ1KesZh.js} +1 -1
- package/src/assets/web-panel/assets/{slide-HsVw1qFQ.js → slide-CnldF8J6.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-D1ry8XPE.js → statusUtils-CZfo_GOA.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-B1t6aQQ_.js → styleChecker-B2QCcAv5.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-C8qbl-9w.js → useFlexGapSupport-DzzjIS4J.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-R7g_mYTC.js → useFs-B_atg9M0.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-Cd-kCe7Z.js → usePersonalDataHub-DhZs3QYN.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-9WhK5UWA.js → vnode-DcePTYAm.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-CUqppPco.js → zoom-BYmlnjRk.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +2 -2
- package/src/commands/agent.js +19 -1
- package/src/commands/evolution-knowledge.js +54 -0
- package/src/commands/evolution-workbench.js +83 -0
- package/src/commands/evolution.js +6 -1
- package/src/commands/serve.js +47 -0
- package/src/commands/skill.js +158 -16
- package/src/data/changelog.json +26 -0
- package/src/gateways/ws/session-protocol.js +2 -0
- package/src/gateways/ws/ws-agent-handler.js +124 -69
- package/src/gateways/ws/ws-server.js +19 -0
- package/src/generated/cc-agent-protocol.schema.json +7 -1
- package/src/harness/jsonl-session-store.js +25 -1
- package/src/index.js +11 -3
- package/src/lazy-dispatch.js +9 -1
- package/src/lib/app-server/cli-agent-kernel-adapter.js +8 -0
- package/src/lib/app-server/graph-runtime.js +40 -1
- package/src/lib/app-server/server.js +181 -3
- package/src/lib/app-server/websocket-transport.js +23 -0
- package/src/lib/evolution/agent-evolution-runtime-composition-brand.js +17 -0
- package/src/lib/evolution/agent-evolution-runtime-composition.js +165 -1
- package/src/lib/evolution/controlled-skill-production-pilot.js +912 -0
- package/src/lib/evolution/evolution-artifact-ports.js +30 -0
- package/src/lib/evolution/evolution-deployment-loader.js +208 -0
- package/src/lib/evolution/evolution-raw-crypto-shred.js +185 -0
- package/src/lib/evolution/evolution-release-train-ledger-adapter.js +335 -0
- package/src/lib/evolution/evolution-release-train.js +538 -0
- package/src/lib/evolution/evolution-workbench-batch-executor.js +195 -0
- package/src/lib/evolution/evolution-workbench-cli-host.js +169 -0
- package/src/lib/evolution/evolution-workbench-metrics-ledger-adapter.js +648 -0
- package/src/lib/evolution/evolution-workbench-metrics.js +943 -0
- package/src/lib/evolution/evolution-workbench-projection.js +753 -0
- package/src/lib/evolution/evolution-workbench-version-control.js +272 -0
- package/src/lib/evolution/evolvable-artifact-ledger-adapter.js +688 -0
- package/src/lib/evolution/governed-knowledge-artifact-lifecycle.js +364 -0
- package/src/lib/evolution/governed-knowledge-conflict-merge.js +352 -0
- package/src/lib/evolution/governed-knowledge-dependency-authority.js +273 -0
- package/src/lib/evolution/governed-knowledge-dependency-ledger-executor.js +646 -0
- package/src/lib/evolution/governed-knowledge-merge-ledger-executor.js +671 -0
- package/src/lib/evolution/governed-knowledge-merge-publisher-authority.js +310 -0
- package/src/lib/evolution/governed-knowledge-node-crypto-authority.js +348 -0
- package/src/lib/evolution/governed-knowledge-rbac-approval-authority.js +621 -0
- package/src/lib/evolution/governed-knowledge-review-host.js +249 -0
- package/src/lib/evolution/governed-knowledge-sync-ledger-adapter.js +729 -0
- package/src/lib/evolution/governed-knowledge-sync-merge-publisher.js +312 -0
- package/src/lib/evolution/governed-knowledge-sync.js +795 -0
- package/src/lib/evolution/governed-knowledge-trust-ledger.js +707 -0
- package/src/lib/evolution/governed-skill-marketplace.js +430 -0
- package/src/lib/evolution/governed-wiki-pruning.js +435 -0
- package/src/lib/evolution/skill-outcome-index-authority.js +268 -0
- package/src/lib/evolution/skill-outcome-source-catalog-authority.js +237 -0
- package/src/lib/evolution/skill-writer-inventory-manifest.js +7 -6
- package/src/lib/evolution/statistical-progressive-canary.js +683 -0
- package/src/lib/evolution/wikiskill-benchmark.js +510 -0
- package/src/lib/public-ide-capability-manifest.js +4 -0
- package/src/lib/session-host-lease.js +11 -16
- package/src/lib/skill-outcome-authority.js +43 -0
- package/src/lib/skill-outcome-transcript-authority.js +252 -0
- package/src/lib/skill-retrieval-router-benchmark.js +135 -0
- package/src/lib/skill-retrieval-router.js +235 -0
- package/src/lib/skill-vector-authority.js +325 -0
- package/src/lib/skill-vector-process-authority.js +386 -0
- package/src/repl/agent-repl.js +7 -1
- package/src/runtime/agent-core.js +133 -13
- package/src/runtime/agent-runtime.js +42 -0
- package/src/runtime/headless-runner.js +32 -0
- package/src/runtime/headless-stream.js +39 -1
- package/src/runtime/runtime-factory.js +62 -4
- package/src/assets/web-panel/assets/ChatBubbleRenderer-eMmw1eZF.js +0 -1
- package/src/assets/web-panel/assets/devWarning-DxufPwXC.js +0 -1
- package/src/assets/web-panel/assets/index-ZMTB9p5z.js +0 -1
- package/src/assets/web-panel/assets/index-_PvIDelE.js +0 -1
|
@@ -90,6 +90,9 @@ import {
|
|
|
90
90
|
verifyExecutionLocationResultBundle,
|
|
91
91
|
} from "../lib/execution-location-result.js";
|
|
92
92
|
import { normalizeExecutionLocationResultStoreReceipt } from "../lib/execution-location-result-store.js";
|
|
93
|
+
import skillInvocationReceipt from "@chainlesschain/session-core/skill-invocation-receipt";
|
|
94
|
+
|
|
95
|
+
const { verifySkillInvocationReceipt } = skillInvocationReceipt;
|
|
93
96
|
|
|
94
97
|
let securedSessionsDir = null;
|
|
95
98
|
let securedSessionsDirIdentity = null;
|
|
@@ -3189,7 +3192,16 @@ export function appendToolCall(sessionId, toolName, args) {
|
|
|
3189
3192
|
*/
|
|
3190
3193
|
export function appendToolCallCompact(
|
|
3191
3194
|
sessionId,
|
|
3192
|
-
{
|
|
3195
|
+
{
|
|
3196
|
+
id,
|
|
3197
|
+
tool,
|
|
3198
|
+
isError,
|
|
3199
|
+
skill,
|
|
3200
|
+
plugin,
|
|
3201
|
+
pluginVersion,
|
|
3202
|
+
durationMs,
|
|
3203
|
+
invocationReceipt,
|
|
3204
|
+
} = {},
|
|
3193
3205
|
) {
|
|
3194
3206
|
const cleanId =
|
|
3195
3207
|
id === undefined
|
|
@@ -3203,6 +3215,15 @@ export function appendToolCallCompact(
|
|
|
3203
3215
|
if (id !== undefined && !cleanId) {
|
|
3204
3216
|
throw new TypeError("compact tool call id must be a bounded string");
|
|
3205
3217
|
}
|
|
3218
|
+
const verifiedInvocationReceipt =
|
|
3219
|
+
invocationReceipt === undefined || invocationReceipt === null
|
|
3220
|
+
? null
|
|
3221
|
+
: verifySkillInvocationReceipt(invocationReceipt);
|
|
3222
|
+
if (verifiedInvocationReceipt !== null && tool !== "run_skill") {
|
|
3223
|
+
throw new TypeError(
|
|
3224
|
+
"Skill invocation receipt can only be attached to run_skill",
|
|
3225
|
+
);
|
|
3226
|
+
}
|
|
3206
3227
|
const duration = normalizeCompactDuration(durationMs);
|
|
3207
3228
|
appendEvent(sessionId, "tool_call", {
|
|
3208
3229
|
...(cleanId ? { id: cleanId } : {}),
|
|
@@ -3212,6 +3233,9 @@ export function appendToolCallCompact(
|
|
|
3212
3233
|
...(plugin ? { plugin: String(plugin) } : {}),
|
|
3213
3234
|
...(pluginVersion ? { plugin_version: String(pluginVersion) } : {}),
|
|
3214
3235
|
...(duration !== null ? { duration_ms: duration } : {}),
|
|
3236
|
+
...(verifiedInvocationReceipt
|
|
3237
|
+
? { skill_invocation_receipt: verifiedInvocationReceipt }
|
|
3238
|
+
: {}),
|
|
3215
3239
|
});
|
|
3216
3240
|
}
|
|
3217
3241
|
|
package/src/index.js
CHANGED
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
startDefaultEventRuntimeHost,
|
|
14
14
|
stopDefaultEventRuntimeHost,
|
|
15
15
|
} from "./lib/event-runtime-host.js";
|
|
16
|
+
import { loadEvolutionDeploymentCommandDependencies } from "./lib/evolution/evolution-deployment-loader.js";
|
|
16
17
|
|
|
17
18
|
// The manifest entry is the canonical registration point for learning. Keep
|
|
18
19
|
// these names visible here for tooling that audits the CLI's command surface:
|
|
@@ -29,7 +30,9 @@ for (const entry of manifest.commands) {
|
|
|
29
30
|
const modulePath = join(__dirname, entry.module.replace("./", ""));
|
|
30
31
|
const moduleUrl = pathToFileURL(modulePath).href;
|
|
31
32
|
const mod = await import(moduleUrl);
|
|
32
|
-
|
|
33
|
+
const deploymentDependencies =
|
|
34
|
+
await loadEvolutionDeploymentCommandDependencies(entry.name);
|
|
35
|
+
commandModules.push({ entry, mod, deploymentDependencies });
|
|
33
36
|
} catch (err) {
|
|
34
37
|
// Store error for later reporting
|
|
35
38
|
commandModules.push({ entry, error: err });
|
|
@@ -79,7 +82,7 @@ export function createProgram(options = {}) {
|
|
|
79
82
|
});
|
|
80
83
|
|
|
81
84
|
// Register all preloaded commands
|
|
82
|
-
for (const { entry, mod, error } of commandModules) {
|
|
85
|
+
for (const { entry, mod, error, deploymentDependencies } of commandModules) {
|
|
83
86
|
if (shouldFilter && !allowedCommands.has(entry.name)) continue;
|
|
84
87
|
if (error) {
|
|
85
88
|
if (process.env.DEBUG) {
|
|
@@ -99,7 +102,12 @@ export function createProgram(options = {}) {
|
|
|
99
102
|
`Register function '${entry.register}' not found in ${entry.module}`,
|
|
100
103
|
);
|
|
101
104
|
}
|
|
102
|
-
registerFn(
|
|
105
|
+
registerFn(
|
|
106
|
+
program,
|
|
107
|
+
options.commandDependencies?.[entry.name] ??
|
|
108
|
+
deploymentDependencies ??
|
|
109
|
+
undefined,
|
|
110
|
+
);
|
|
103
111
|
} catch (err) {
|
|
104
112
|
if (process.env.DEBUG) {
|
|
105
113
|
console.warn(
|
package/src/lazy-dispatch.js
CHANGED
|
@@ -682,6 +682,12 @@ async function defaultLoadFullProgram() {
|
|
|
682
682
|
return createProgramAsync();
|
|
683
683
|
}
|
|
684
684
|
|
|
685
|
+
async function defaultLoadCommandDependencies(commandName) {
|
|
686
|
+
const { loadEvolutionDeploymentCommandDependencies } =
|
|
687
|
+
await import("./lib/evolution/evolution-deployment-loader.js");
|
|
688
|
+
return loadEvolutionDeploymentCommandDependencies(commandName);
|
|
689
|
+
}
|
|
690
|
+
|
|
685
691
|
/**
|
|
686
692
|
* Load/register may fall back to the compatibility program. parseAsync is
|
|
687
693
|
* intentionally outside that catch: once an action begins, any failure must
|
|
@@ -692,6 +698,7 @@ export async function dispatchManifestEntry(
|
|
|
692
698
|
entry,
|
|
693
699
|
{
|
|
694
700
|
loadCommandModule = defaultLoadCommandModule,
|
|
701
|
+
loadCommandDependencies = defaultLoadCommandDependencies,
|
|
695
702
|
createBaseProgram = defaultCreateBaseProgram,
|
|
696
703
|
loadFullProgram = defaultLoadFullProgram,
|
|
697
704
|
stderr = process.stderr,
|
|
@@ -708,7 +715,8 @@ export async function dispatchManifestEntry(
|
|
|
708
715
|
`Register function '${entry.register}' not found in ${entry.module}`,
|
|
709
716
|
);
|
|
710
717
|
}
|
|
711
|
-
|
|
718
|
+
const dependencies = await loadCommandDependencies(entry.name);
|
|
719
|
+
registerFn(program, dependencies ?? undefined);
|
|
712
720
|
} catch (error) {
|
|
713
721
|
if (env.DEBUG || env.CC_DEBUG) {
|
|
714
722
|
stderr.write(
|
|
@@ -200,6 +200,14 @@ export class CliAgentKernelAdapter {
|
|
|
200
200
|
turnOptions.evolutionIngress ??
|
|
201
201
|
this.sessionOptions.evolutionIngress ??
|
|
202
202
|
null,
|
|
203
|
+
skillOutcomeIndex:
|
|
204
|
+
turnOptions.skillOutcomeIndex ??
|
|
205
|
+
this.sessionOptions.skillOutcomeIndex ??
|
|
206
|
+
null,
|
|
207
|
+
skillVectorAuthority:
|
|
208
|
+
turnOptions.skillVectorAuthority ??
|
|
209
|
+
this.sessionOptions.skillVectorAuthority ??
|
|
210
|
+
null,
|
|
203
211
|
},
|
|
204
212
|
{
|
|
205
213
|
...this.dependencies,
|
|
@@ -6,7 +6,11 @@ import {
|
|
|
6
6
|
import { createGraphAuthorityBinding } from "../graph-kernel/authority.js";
|
|
7
7
|
import { GraphEventStore } from "../graph-kernel/event-store.js";
|
|
8
8
|
import { GraphKernel } from "../graph-kernel/runtime.js";
|
|
9
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
captureAgentEvolutionRuntimeComposition,
|
|
11
|
+
captureAgentSkillOutcomeIndex,
|
|
12
|
+
} from "../evolution/agent-evolution-runtime-composition-brand.js";
|
|
13
|
+
import { captureSkillVectorAuthority } from "../skill-vector-authority.js";
|
|
10
14
|
import {
|
|
11
15
|
diffGraphTrace,
|
|
12
16
|
locateBlockedRoot,
|
|
@@ -145,6 +149,8 @@ export class AppServerGraphRuntime {
|
|
|
145
149
|
createId = randomUUID,
|
|
146
150
|
onEvent = null,
|
|
147
151
|
evolutionCompositionFactory = null,
|
|
152
|
+
skillOutcomeIndex = null,
|
|
153
|
+
skillVectorAuthority = null,
|
|
148
154
|
writerLeaseTtlMs = 24 * 60 * 60 * 1000,
|
|
149
155
|
} = {}) {
|
|
150
156
|
if (typeof executeNode !== "function") {
|
|
@@ -165,6 +171,21 @@ export class AppServerGraphRuntime {
|
|
|
165
171
|
this.createId = createId;
|
|
166
172
|
this.onEvent = typeof onEvent === "function" ? onEvent : null;
|
|
167
173
|
this.evolutionCompositionFactory = evolutionCompositionFactory;
|
|
174
|
+
this.skillOutcomeIndex =
|
|
175
|
+
skillOutcomeIndex === null
|
|
176
|
+
? null
|
|
177
|
+
: captureAgentSkillOutcomeIndex(skillOutcomeIndex);
|
|
178
|
+
this.skillVectorAuthority =
|
|
179
|
+
skillVectorAuthority === null
|
|
180
|
+
? null
|
|
181
|
+
: captureSkillVectorAuthority(skillVectorAuthority);
|
|
182
|
+
if (
|
|
183
|
+
this.skillOutcomeIndex !== null &&
|
|
184
|
+
this.skillVectorAuthority !== null &&
|
|
185
|
+
this.skillOutcomeIndex.tenantId !== this.skillVectorAuthority.tenantId
|
|
186
|
+
) {
|
|
187
|
+
throw new TypeError("Graph retrieval authorities must share one tenant");
|
|
188
|
+
}
|
|
168
189
|
this.writerLeaseTtlMs = writerLeaseTtlMs;
|
|
169
190
|
this.runs = new Map();
|
|
170
191
|
this.drives = new Map();
|
|
@@ -190,6 +211,22 @@ export class AppServerGraphRuntime {
|
|
|
190
211
|
"Agent evolution composition belongs to another Graph run",
|
|
191
212
|
);
|
|
192
213
|
}
|
|
214
|
+
if (
|
|
215
|
+
this.skillOutcomeIndex !== null &&
|
|
216
|
+
composition.tenantId !== this.skillOutcomeIndex.tenantId
|
|
217
|
+
) {
|
|
218
|
+
throw new TypeError(
|
|
219
|
+
"Graph evolution composition and Skill outcome index must share one tenant",
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
if (
|
|
223
|
+
this.skillVectorAuthority !== null &&
|
|
224
|
+
composition.tenantId !== this.skillVectorAuthority.tenantId
|
|
225
|
+
) {
|
|
226
|
+
throw new TypeError(
|
|
227
|
+
"Graph evolution composition and Skill vector authority must share one tenant",
|
|
228
|
+
);
|
|
229
|
+
}
|
|
193
230
|
if (
|
|
194
231
|
typeof composition.evolutionIngress?.start !== "function" ||
|
|
195
232
|
typeof composition.evolutionIngress?.complete !== "function"
|
|
@@ -693,6 +730,8 @@ export class AppServerGraphRuntime {
|
|
|
693
730
|
input: nodeInput(entry.inputs, nodeId),
|
|
694
731
|
signal: controller.signal,
|
|
695
732
|
evolutionIngress: evolutionComposition?.evolutionIngress || null,
|
|
733
|
+
skillOutcomeIndex: this.skillOutcomeIndex,
|
|
734
|
+
skillVectorAuthority: this.skillVectorAuthority,
|
|
696
735
|
});
|
|
697
736
|
if (!result || !["succeeded", "completed"].includes(result.status)) {
|
|
698
737
|
const error = runtimeError(
|
|
@@ -7,8 +7,12 @@ import {
|
|
|
7
7
|
createRolloutStore,
|
|
8
8
|
} from "./rollout-store-factory.js";
|
|
9
9
|
import { AppServerGraphRuntime } from "./graph-runtime.js";
|
|
10
|
+
import { captureAgentSkillOutcomeIndex } from "../evolution/agent-evolution-runtime-composition-brand.js";
|
|
11
|
+
import { captureSkillVectorAuthority } from "../skill-vector-authority.js";
|
|
10
12
|
import { compileGraphDefinition } from "../graph-kernel/compiler.js";
|
|
11
13
|
import { createCliContextMemoryRuntime } from "../context-memory-kernel/runtime.js";
|
|
14
|
+
import { isEvolutionWorkbenchCliHost } from "../evolution/evolution-workbench-cli-host.js";
|
|
15
|
+
import { isGovernedKnowledgeReviewHost } from "../evolution/governed-knowledge-review-host.js";
|
|
12
16
|
import {
|
|
13
17
|
contextPlanCreatedNotification,
|
|
14
18
|
memoryDeletionNotification,
|
|
@@ -145,6 +149,10 @@ export class CcAppServer {
|
|
|
145
149
|
transport = "stdio",
|
|
146
150
|
graphRuntime = null,
|
|
147
151
|
evolutionCompositionFactory = null,
|
|
152
|
+
skillOutcomeIndex = null,
|
|
153
|
+
skillVectorAuthority = null,
|
|
154
|
+
evolutionWorkbenchHost = null,
|
|
155
|
+
governedKnowledgeReviewHost = null,
|
|
148
156
|
contextMemoryRuntimeFactory = createCliContextMemoryRuntime,
|
|
149
157
|
} = {}) {
|
|
150
158
|
if (typeof send !== "function") {
|
|
@@ -166,9 +174,47 @@ export class CcAppServer {
|
|
|
166
174
|
throw new TypeError("contextMemoryRuntimeFactory must be a function");
|
|
167
175
|
}
|
|
168
176
|
this.contextMemoryRuntimeFactory = contextMemoryRuntimeFactory;
|
|
169
|
-
if (
|
|
177
|
+
if (
|
|
178
|
+
evolutionWorkbenchHost !== null &&
|
|
179
|
+
!isEvolutionWorkbenchCliHost(evolutionWorkbenchHost)
|
|
180
|
+
) {
|
|
181
|
+
throw new TypeError(
|
|
182
|
+
"CcAppServer evolutionWorkbenchHost must be a branded Workbench host",
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
this.evolutionWorkbenchHost = evolutionWorkbenchHost;
|
|
186
|
+
if (
|
|
187
|
+
governedKnowledgeReviewHost !== null &&
|
|
188
|
+
!isGovernedKnowledgeReviewHost(governedKnowledgeReviewHost)
|
|
189
|
+
) {
|
|
190
|
+
throw new TypeError(
|
|
191
|
+
"CcAppServer governedKnowledgeReviewHost must be a branded review host",
|
|
192
|
+
);
|
|
193
|
+
}
|
|
194
|
+
this.governedKnowledgeReviewHost = governedKnowledgeReviewHost;
|
|
195
|
+
this.skillOutcomeIndex =
|
|
196
|
+
skillOutcomeIndex === null
|
|
197
|
+
? null
|
|
198
|
+
: captureAgentSkillOutcomeIndex(skillOutcomeIndex);
|
|
199
|
+
this.skillVectorAuthority =
|
|
200
|
+
skillVectorAuthority === null
|
|
201
|
+
? null
|
|
202
|
+
: captureSkillVectorAuthority(skillVectorAuthority);
|
|
203
|
+
if (
|
|
204
|
+
this.skillOutcomeIndex !== null &&
|
|
205
|
+
this.skillVectorAuthority !== null &&
|
|
206
|
+
this.skillOutcomeIndex.tenantId !== this.skillVectorAuthority.tenantId
|
|
207
|
+
) {
|
|
208
|
+
throw new TypeError(
|
|
209
|
+
"App Server retrieval authorities must share one tenant",
|
|
210
|
+
);
|
|
211
|
+
}
|
|
212
|
+
if (
|
|
213
|
+
graphRuntime &&
|
|
214
|
+
(evolutionCompositionFactory || skillOutcomeIndex || skillVectorAuthority)
|
|
215
|
+
) {
|
|
170
216
|
throw new TypeError(
|
|
171
|
-
"graphRuntime and
|
|
217
|
+
"graphRuntime and host-owned Graph authorities cannot both be provided",
|
|
172
218
|
);
|
|
173
219
|
}
|
|
174
220
|
this.graphRuntime =
|
|
@@ -178,6 +224,8 @@ export class CcAppServer {
|
|
|
178
224
|
now,
|
|
179
225
|
createId,
|
|
180
226
|
evolutionCompositionFactory,
|
|
227
|
+
skillOutcomeIndex: this.skillOutcomeIndex,
|
|
228
|
+
skillVectorAuthority: this.skillVectorAuthority,
|
|
181
229
|
executeNode: (context) => this._executeGraphNode(context),
|
|
182
230
|
requestHumanTask: (context) => this._requestHumanTask(context),
|
|
183
231
|
onEvent: (event) => {
|
|
@@ -353,6 +401,18 @@ export class CcAppServer {
|
|
|
353
401
|
"memory/decide": () => this._memoryDecide(message.params),
|
|
354
402
|
"memory/delete": () => this._memoryDelete(message.params),
|
|
355
403
|
"memory/reconcile": () => this._memoryReconcile(message.params),
|
|
404
|
+
"evolution/workbench/list": () =>
|
|
405
|
+
this._evolutionWorkbenchList(message.params),
|
|
406
|
+
"evolution/workbench/compare": () =>
|
|
407
|
+
this._evolutionWorkbenchCompare(message.params),
|
|
408
|
+
"evolution/workbench/review": () =>
|
|
409
|
+
this._evolutionWorkbenchReview(message.params),
|
|
410
|
+
"evolution/workbench/rollback": () =>
|
|
411
|
+
this._evolutionWorkbenchRollback(message.params),
|
|
412
|
+
"evolution/knowledge/conflicts": () =>
|
|
413
|
+
this._governedKnowledgeConflicts(message.params),
|
|
414
|
+
"evolution/knowledge/merge": () =>
|
|
415
|
+
this._governedKnowledgeMerge(message.params),
|
|
356
416
|
};
|
|
357
417
|
const handler = handlers[method];
|
|
358
418
|
if (!handler) {
|
|
@@ -400,6 +460,20 @@ export class CcAppServer {
|
|
|
400
460
|
websocket: { stability: "experimental" },
|
|
401
461
|
limits: this.requestQueue.snapshot(),
|
|
402
462
|
graphRuntime: this.graphRuntime.runtimeClaims(),
|
|
463
|
+
evolutionWorkbench: {
|
|
464
|
+
available: this.evolutionWorkbenchHost !== null,
|
|
465
|
+
methods:
|
|
466
|
+
this.evolutionWorkbenchHost === null
|
|
467
|
+
? []
|
|
468
|
+
: ["list", "compare", "review", "rollback"],
|
|
469
|
+
},
|
|
470
|
+
governedKnowledgeReview: {
|
|
471
|
+
available: this.governedKnowledgeReviewHost !== null,
|
|
472
|
+
methods:
|
|
473
|
+
this.governedKnowledgeReviewHost === null
|
|
474
|
+
? []
|
|
475
|
+
: ["conflicts", "merge"],
|
|
476
|
+
},
|
|
403
477
|
schema: {
|
|
404
478
|
id: APP_SERVER_SCHEMA.$id,
|
|
405
479
|
version: APP_SERVER_PROTOCOL_VERSION,
|
|
@@ -415,6 +489,91 @@ export class CcAppServer {
|
|
|
415
489
|
return runtime;
|
|
416
490
|
}
|
|
417
491
|
|
|
492
|
+
_requireEvolutionWorkbenchHost() {
|
|
493
|
+
if (this.evolutionWorkbenchHost === null) {
|
|
494
|
+
throw new JsonRpcError(
|
|
495
|
+
JSON_RPC_ERROR.NOT_FOUND,
|
|
496
|
+
"Evolution Workbench is not configured for this App Server",
|
|
497
|
+
);
|
|
498
|
+
}
|
|
499
|
+
return this.evolutionWorkbenchHost;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
_evolutionWorkbenchList(rawParams = {}) {
|
|
503
|
+
const params = requireObject(rawParams);
|
|
504
|
+
return this._requireEvolutionWorkbenchHost().list({
|
|
505
|
+
query: typeof params.query === "string" ? params.query : "",
|
|
506
|
+
status: params.status ?? null,
|
|
507
|
+
offset: params.offset ?? 0,
|
|
508
|
+
limit: params.limit ?? 100,
|
|
509
|
+
});
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
_evolutionWorkbenchCompare(rawParams) {
|
|
513
|
+
const params = requireObject(rawParams);
|
|
514
|
+
return this._requireEvolutionWorkbenchHost().compare(
|
|
515
|
+
requiredString(params.leftPacketDigest, "leftPacketDigest"),
|
|
516
|
+
requiredString(params.rightPacketDigest, "rightPacketDigest"),
|
|
517
|
+
);
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
_evolutionWorkbenchReview(rawParams) {
|
|
521
|
+
const params = requireObject(rawParams);
|
|
522
|
+
if (!Array.isArray(params.packetDigests)) {
|
|
523
|
+
throw new JsonRpcError(
|
|
524
|
+
JSON_RPC_ERROR.INVALID_PARAMS,
|
|
525
|
+
"packetDigests must be an array",
|
|
526
|
+
);
|
|
527
|
+
}
|
|
528
|
+
return this._requireEvolutionWorkbenchHost().review({
|
|
529
|
+
packetDigests: params.packetDigests,
|
|
530
|
+
decision: requiredString(params.decision, "decision"),
|
|
531
|
+
reason: requiredString(params.reason, "reason"),
|
|
532
|
+
});
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
_evolutionWorkbenchRollback(rawParams) {
|
|
536
|
+
const params = requireObject(rawParams);
|
|
537
|
+
return this._requireEvolutionWorkbenchHost().rollback({
|
|
538
|
+
fromPacketDigest: requiredString(
|
|
539
|
+
params.fromPacketDigest,
|
|
540
|
+
"fromPacketDigest",
|
|
541
|
+
),
|
|
542
|
+
toPacketDigest: requiredString(params.toPacketDigest, "toPacketDigest"),
|
|
543
|
+
reason: requiredString(params.reason, "reason"),
|
|
544
|
+
});
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
_requireGovernedKnowledgeReviewHost() {
|
|
548
|
+
if (this.governedKnowledgeReviewHost === null) {
|
|
549
|
+
throw new JsonRpcError(
|
|
550
|
+
JSON_RPC_ERROR.NOT_FOUND,
|
|
551
|
+
"Governed knowledge review is not configured for this App Server",
|
|
552
|
+
);
|
|
553
|
+
}
|
|
554
|
+
return this.governedKnowledgeReviewHost;
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
_governedKnowledgeConflicts(rawParams = {}) {
|
|
558
|
+
const params = requireObject(rawParams);
|
|
559
|
+
return this._requireGovernedKnowledgeReviewHost().list({
|
|
560
|
+
cursor: params.cursor ?? 0,
|
|
561
|
+
limit: params.limit ?? 50,
|
|
562
|
+
});
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
_governedKnowledgeMerge(rawParams) {
|
|
566
|
+
const params = requireObject(rawParams);
|
|
567
|
+
return this._requireGovernedKnowledgeReviewHost().merge({
|
|
568
|
+
conflictEnvelopeDigest: requiredString(
|
|
569
|
+
params.conflictEnvelopeDigest,
|
|
570
|
+
"conflictEnvelopeDigest",
|
|
571
|
+
),
|
|
572
|
+
mergedRecord: requireObject(params.mergedRecord, "mergedRecord"),
|
|
573
|
+
reason: requiredString(params.reason, "reason"),
|
|
574
|
+
});
|
|
575
|
+
}
|
|
576
|
+
|
|
418
577
|
async _contextPlan(rawParams) {
|
|
419
578
|
const params = requireObject(rawParams);
|
|
420
579
|
const runtime = this._contextMemoryRuntime({
|
|
@@ -612,6 +771,8 @@ export class CcAppServer {
|
|
|
612
771
|
input,
|
|
613
772
|
signal,
|
|
614
773
|
evolutionIngress,
|
|
774
|
+
skillOutcomeIndex,
|
|
775
|
+
skillVectorAuthority,
|
|
615
776
|
}) {
|
|
616
777
|
const threadId = `graph-agent:${runId}:${nodeId}`;
|
|
617
778
|
const turn = { id: attempt.id, threadId };
|
|
@@ -622,9 +783,17 @@ export class CcAppServer {
|
|
|
622
783
|
try {
|
|
623
784
|
const turnOptions = { ...(input?.options || {}) };
|
|
624
785
|
delete turnOptions.evolutionIngress;
|
|
786
|
+
delete turnOptions.skillOutcomeIndex;
|
|
787
|
+
delete turnOptions.skillVectorAuthority;
|
|
625
788
|
if (evolutionIngress !== null && evolutionIngress !== undefined) {
|
|
626
789
|
turnOptions.evolutionIngress = evolutionIngress;
|
|
627
790
|
}
|
|
791
|
+
if (skillOutcomeIndex !== null && skillOutcomeIndex !== undefined) {
|
|
792
|
+
turnOptions.skillOutcomeIndex = skillOutcomeIndex;
|
|
793
|
+
}
|
|
794
|
+
if (skillVectorAuthority !== null && skillVectorAuthority !== undefined) {
|
|
795
|
+
turnOptions.skillVectorAuthority = skillVectorAuthority;
|
|
796
|
+
}
|
|
628
797
|
const result = await this.kernel.startTurn({
|
|
629
798
|
threadId,
|
|
630
799
|
turnId: attempt.id,
|
|
@@ -866,11 +1035,20 @@ export class CcAppServer {
|
|
|
866
1035
|
async _runTurn(active, input, options) {
|
|
867
1036
|
const { turn } = active;
|
|
868
1037
|
try {
|
|
1038
|
+
const turnOptions = { ...options };
|
|
1039
|
+
delete turnOptions.skillOutcomeIndex;
|
|
1040
|
+
delete turnOptions.skillVectorAuthority;
|
|
1041
|
+
if (this.skillOutcomeIndex !== null) {
|
|
1042
|
+
turnOptions.skillOutcomeIndex = this.skillOutcomeIndex;
|
|
1043
|
+
}
|
|
1044
|
+
if (this.skillVectorAuthority !== null) {
|
|
1045
|
+
turnOptions.skillVectorAuthority = this.skillVectorAuthority;
|
|
1046
|
+
}
|
|
869
1047
|
const result = await this.kernel.startTurn({
|
|
870
1048
|
threadId: turn.threadId,
|
|
871
1049
|
turnId: turn.id,
|
|
872
1050
|
input,
|
|
873
|
-
options,
|
|
1051
|
+
options: turnOptions,
|
|
874
1052
|
emit: (event) => this._emitKernelEvent(turn, event),
|
|
875
1053
|
requestApproval: (event) => this._requestApproval(turn, event),
|
|
876
1054
|
});
|
|
@@ -10,6 +10,8 @@ import { WebSocketServer } from "ws";
|
|
|
10
10
|
import { BoundedAsyncQueue, QueueOverloadedError } from "./bounded-queue.js";
|
|
11
11
|
import { CcAppServer } from "./server.js";
|
|
12
12
|
import { JSON_RPC_ERROR, JsonRpcError, rpcError } from "./protocol.js";
|
|
13
|
+
import { isEvolutionWorkbenchCliHost } from "../evolution/evolution-workbench-cli-host.js";
|
|
14
|
+
import { isGovernedKnowledgeReviewHost } from "../evolution/governed-knowledge-review-host.js";
|
|
13
15
|
|
|
14
16
|
export const APP_SERVER_WEBSOCKET_PROTOCOL =
|
|
15
17
|
"chainlesschain.app-server.experimental.v1";
|
|
@@ -250,6 +252,22 @@ export class WebSocketConnectionTransport extends EventEmitter {
|
|
|
250
252
|
export class WebSocketAppServerHost extends EventEmitter {
|
|
251
253
|
constructor(options = {}) {
|
|
252
254
|
super();
|
|
255
|
+
if (
|
|
256
|
+
options.evolutionWorkbenchHost != null &&
|
|
257
|
+
!isEvolutionWorkbenchCliHost(options.evolutionWorkbenchHost)
|
|
258
|
+
) {
|
|
259
|
+
throw new TypeError(
|
|
260
|
+
"WebSocket App Server evolutionWorkbenchHost must be a branded Workbench host",
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
if (
|
|
264
|
+
options.governedKnowledgeReviewHost != null &&
|
|
265
|
+
!isGovernedKnowledgeReviewHost(options.governedKnowledgeReviewHost)
|
|
266
|
+
) {
|
|
267
|
+
throw new TypeError(
|
|
268
|
+
"WebSocket App Server governedKnowledgeReviewHost must be a branded review host",
|
|
269
|
+
);
|
|
270
|
+
}
|
|
253
271
|
this.options = options;
|
|
254
272
|
this.binding = validateWebSocketAppServerOptions(options);
|
|
255
273
|
this.port = boundedInteger(options.port, 18800, 0, 65_535);
|
|
@@ -398,6 +416,11 @@ export class WebSocketAppServerHost extends EventEmitter {
|
|
|
398
416
|
kernel: this.kernelFactory?.(),
|
|
399
417
|
evolutionCompositionFactory:
|
|
400
418
|
this.options.evolutionCompositionFactory ?? null,
|
|
419
|
+
skillOutcomeIndex: this.options.skillOutcomeIndex ?? null,
|
|
420
|
+
skillVectorAuthority: this.options.skillVectorAuthority ?? null,
|
|
421
|
+
evolutionWorkbenchHost: this.options.evolutionWorkbenchHost ?? null,
|
|
422
|
+
governedKnowledgeReviewHost:
|
|
423
|
+
this.options.governedKnowledgeReviewHost ?? null,
|
|
401
424
|
transport: "websocket",
|
|
402
425
|
maxQueuedRequests: this.options.maxQueuedRequests,
|
|
403
426
|
maxQueuedRequestBytes: this.options.maxQueuedRequestBytes,
|
|
@@ -2,6 +2,7 @@ export const AGENT_EVOLUTION_RUNTIME_COMPOSITION_SCHEMA =
|
|
|
2
2
|
"chainlesschain.agent-evolution-runtime-composition/v1";
|
|
3
3
|
|
|
4
4
|
const COMPOSITIONS = new WeakSet();
|
|
5
|
+
const SKILL_OUTCOME_INDEXES = new WeakSet();
|
|
5
6
|
|
|
6
7
|
export function sealAgentEvolutionRuntimeComposition(fields) {
|
|
7
8
|
const composition = Object.freeze({
|
|
@@ -20,3 +21,19 @@ export function captureAgentEvolutionRuntimeComposition(value) {
|
|
|
20
21
|
}
|
|
21
22
|
return value;
|
|
22
23
|
}
|
|
24
|
+
|
|
25
|
+
export function sealAgentSkillOutcomeIndex(fields) {
|
|
26
|
+
const index = Object.freeze({
|
|
27
|
+
schema: "chainlesschain.agent-skill-outcome-index/v1",
|
|
28
|
+
...fields,
|
|
29
|
+
});
|
|
30
|
+
SKILL_OUTCOME_INDEXES.add(index);
|
|
31
|
+
return index;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function captureAgentSkillOutcomeIndex(value) {
|
|
35
|
+
if (!SKILL_OUTCOME_INDEXES.has(value)) {
|
|
36
|
+
throw new TypeError("a branded Agent Skill outcome index is required");
|
|
37
|
+
}
|
|
38
|
+
return value;
|
|
39
|
+
}
|