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/commands/plugin.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Plugin management commands
|
|
3
|
-
* chainlesschain plugin list|install|remove|enable|disable|update|info|search|registry|summary
|
|
3
|
+
* chainlesschain plugin list|install|remove|enable|disable|update|info|search|registry|summary|eval
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import chalk from "chalk";
|
|
7
7
|
import fs from "node:fs";
|
|
8
|
+
import path from "node:path";
|
|
8
9
|
import { logger } from "../lib/logger.js";
|
|
9
10
|
import {
|
|
10
11
|
enforcePluginPolicy,
|
|
@@ -1435,6 +1436,134 @@ export function registerPluginCommand(program) {
|
|
|
1435
1436
|
// component it contributes (skills/agents/hooks/mcp/lsp/monitors/bin/settings),
|
|
1436
1437
|
// plus path-traversal / schema problems. Optional signature/hash verification
|
|
1437
1438
|
// reuses the real crypto in plugin-security. No DB, no install — pure inspection.
|
|
1439
|
+
plugin
|
|
1440
|
+
.command("eval <dir>")
|
|
1441
|
+
.description(
|
|
1442
|
+
"Run a local control/candidate effectiveness eval for a plugin",
|
|
1443
|
+
)
|
|
1444
|
+
.option(
|
|
1445
|
+
"--suite <file>",
|
|
1446
|
+
"Suite JSON inside the plugin root (default: evals/suite.json)",
|
|
1447
|
+
)
|
|
1448
|
+
.option("--provider <provider>", "Fixed provider for both eval arms")
|
|
1449
|
+
.option("--model <model>", "Fixed model for both eval arms")
|
|
1450
|
+
.option(
|
|
1451
|
+
"--min-pass-rate-delta <pct>",
|
|
1452
|
+
"Override the suite's minimum candidate gain in percentage points",
|
|
1453
|
+
)
|
|
1454
|
+
.option("--json", "Output the bound report as JSON")
|
|
1455
|
+
.option("--html <file>", "Write a local HTML report")
|
|
1456
|
+
.option("--keep", "Keep per-task temporary workspaces")
|
|
1457
|
+
.option(
|
|
1458
|
+
"--dry-run",
|
|
1459
|
+
"Validate and exercise both arms without a model (never passes the evidence gate)",
|
|
1460
|
+
)
|
|
1461
|
+
.action(async (dir, options) => {
|
|
1462
|
+
try {
|
|
1463
|
+
if (!options.dryRun && (!options.provider || !options.model)) {
|
|
1464
|
+
throw new Error(
|
|
1465
|
+
"plugin eval requires explicit --provider and --model for comparable real runs",
|
|
1466
|
+
);
|
|
1467
|
+
}
|
|
1468
|
+
let minPassRateDelta;
|
|
1469
|
+
if (options.minPassRateDelta !== undefined) {
|
|
1470
|
+
const percentage = Number(options.minPassRateDelta);
|
|
1471
|
+
if (
|
|
1472
|
+
!Number.isFinite(percentage) ||
|
|
1473
|
+
percentage < -100 ||
|
|
1474
|
+
percentage > 100
|
|
1475
|
+
) {
|
|
1476
|
+
throw new Error(
|
|
1477
|
+
"--min-pass-rate-delta must be between -100 and 100",
|
|
1478
|
+
);
|
|
1479
|
+
}
|
|
1480
|
+
minPassRateDelta = percentage / 100;
|
|
1481
|
+
}
|
|
1482
|
+
const {
|
|
1483
|
+
loadPluginEvalDefinition,
|
|
1484
|
+
renderPluginEvalHtml,
|
|
1485
|
+
runPluginEval,
|
|
1486
|
+
} = await import("../lib/eval/plugin-suite.js");
|
|
1487
|
+
const { makeHeadlessRunAgent } = await import("./eval.js");
|
|
1488
|
+
const definition = loadPluginEvalDefinition(dir, {
|
|
1489
|
+
suiteFile: options.suite,
|
|
1490
|
+
});
|
|
1491
|
+
const dryRunAgent = async () => ({
|
|
1492
|
+
ok: true,
|
|
1493
|
+
output: `${JSON.stringify({
|
|
1494
|
+
type: "result",
|
|
1495
|
+
subtype: "success",
|
|
1496
|
+
is_error: false,
|
|
1497
|
+
result: "(dry-run: no agent)",
|
|
1498
|
+
tool_calls: [],
|
|
1499
|
+
usage: {},
|
|
1500
|
+
total_cost_usd: 0,
|
|
1501
|
+
num_turns: 0,
|
|
1502
|
+
})}\n`,
|
|
1503
|
+
});
|
|
1504
|
+
const shared = {
|
|
1505
|
+
provider: options.provider,
|
|
1506
|
+
model: options.model,
|
|
1507
|
+
ephemeral: true,
|
|
1508
|
+
};
|
|
1509
|
+
const controlRunAgent = options.dryRun
|
|
1510
|
+
? dryRunAgent
|
|
1511
|
+
: makeHeadlessRunAgent({
|
|
1512
|
+
...shared,
|
|
1513
|
+
env: { CC_PLUGINS: "0", CC_PLUGIN_SCOPES: "" },
|
|
1514
|
+
});
|
|
1515
|
+
const candidateRunAgent = options.dryRun
|
|
1516
|
+
? dryRunAgent
|
|
1517
|
+
: makeHeadlessRunAgent({
|
|
1518
|
+
...shared,
|
|
1519
|
+
env: { CC_PLUGINS: "1", CC_PLUGIN_SCOPES: "project" },
|
|
1520
|
+
});
|
|
1521
|
+
const report = await runPluginEval(definition, {
|
|
1522
|
+
controlRunAgent,
|
|
1523
|
+
candidateRunAgent,
|
|
1524
|
+
provider: options.provider || null,
|
|
1525
|
+
model: options.model || null,
|
|
1526
|
+
dryRun: options.dryRun === true,
|
|
1527
|
+
keepWorkspaces: options.keep === true,
|
|
1528
|
+
...(minPassRateDelta === undefined ? {} : { minPassRateDelta }),
|
|
1529
|
+
onResult: options.json
|
|
1530
|
+
? undefined
|
|
1531
|
+
: ({ arm, result }) =>
|
|
1532
|
+
logger.info(
|
|
1533
|
+
` ${arm.padEnd(9)} ${result.pass ? "✔" : "✗"} ${result.id} (${result.ms}ms)`,
|
|
1534
|
+
),
|
|
1535
|
+
});
|
|
1536
|
+
if (options.html) {
|
|
1537
|
+
fs.writeFileSync(
|
|
1538
|
+
path.resolve(options.html),
|
|
1539
|
+
renderPluginEvalHtml(report),
|
|
1540
|
+
"utf8",
|
|
1541
|
+
);
|
|
1542
|
+
}
|
|
1543
|
+
if (options.json) {
|
|
1544
|
+
console.log(JSON.stringify(report, null, 2));
|
|
1545
|
+
} else {
|
|
1546
|
+
logger.log(
|
|
1547
|
+
`\nPlugin eval: ${report.status} (${report.comparison.outcome}, delta ${(report.comparison.passRateDelta * 100).toFixed(1)} points)`,
|
|
1548
|
+
);
|
|
1549
|
+
logger.log(
|
|
1550
|
+
` Control: ${report.arms.control.effectivePassed}/${report.arms.control.total}; Candidate: ${report.arms.candidate.effectivePassed}/${report.arms.candidate.total}`,
|
|
1551
|
+
);
|
|
1552
|
+
logger.log(` Payload: ${report.plugin.payloadDigest}`);
|
|
1553
|
+
logger.log(` Suite: ${report.suite.digest}`);
|
|
1554
|
+
if (report.reasons.length) {
|
|
1555
|
+
logger.warn(` Reasons: ${report.reasons.join(", ")}`);
|
|
1556
|
+
}
|
|
1557
|
+
if (options.html)
|
|
1558
|
+
logger.info(` HTML: ${path.resolve(options.html)}`);
|
|
1559
|
+
}
|
|
1560
|
+
if (!report.passed) process.exitCode = 1;
|
|
1561
|
+
} catch (error) {
|
|
1562
|
+
logger.error(`Plugin eval failed: ${error.message}`);
|
|
1563
|
+
process.exitCode = 1;
|
|
1564
|
+
}
|
|
1565
|
+
});
|
|
1566
|
+
|
|
1438
1567
|
plugin
|
|
1439
1568
|
.command("validate <dir>")
|
|
1440
1569
|
.description("Validate a plugin manifest and list its components")
|
package/src/commands/sandbox.js
CHANGED
|
@@ -4,10 +4,15 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import chalk from "chalk";
|
|
7
|
-
import { intArg
|
|
7
|
+
import { intArg } from "../lib/cli-arg.js";
|
|
8
8
|
import ora from "ora";
|
|
9
9
|
import { logger } from "../lib/logger.js";
|
|
10
10
|
import { bootstrap, shutdown } from "../runtime/bootstrap.js";
|
|
11
|
+
import {
|
|
12
|
+
assessAgentSandboxCapabilities,
|
|
13
|
+
normalizeAgentSandboxMode,
|
|
14
|
+
probeSandboxAvailability,
|
|
15
|
+
} from "../lib/agent-sandbox.js";
|
|
11
16
|
import {
|
|
12
17
|
createSandbox,
|
|
13
18
|
acquireSandbox,
|
|
@@ -38,11 +43,125 @@ import {
|
|
|
38
43
|
getSandboxStatsV2,
|
|
39
44
|
} from "../lib/sandbox-v2.js";
|
|
40
45
|
|
|
41
|
-
|
|
46
|
+
function csvList(value) {
|
|
47
|
+
return String(value || "")
|
|
48
|
+
.split(",")
|
|
49
|
+
.map((entry) => entry.trim())
|
|
50
|
+
.filter(Boolean);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function printCapabilityEntries(label, entries) {
|
|
54
|
+
logger.log(`${chalk.bold(label)} (${entries.length})`);
|
|
55
|
+
if (entries.length === 0) {
|
|
56
|
+
logger.log(" none");
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
for (const entry of entries) {
|
|
60
|
+
const suffix = entry.message
|
|
61
|
+
? ` — ${entry.message}`
|
|
62
|
+
: entry.enforcement
|
|
63
|
+
? ` — ${entry.enforcement}`
|
|
64
|
+
: entry.entries
|
|
65
|
+
? ` — ${entry.entries} rule(s)`
|
|
66
|
+
: "";
|
|
67
|
+
logger.log(` ${entry.id}${suffix}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export function registerSandboxCommand(program, dependencies = {}) {
|
|
42
72
|
const sandbox = program
|
|
43
73
|
.command("sandbox")
|
|
44
74
|
.description("Security sandbox v2 — isolated agent execution environments");
|
|
45
75
|
|
|
76
|
+
// sandbox capabilities — read-only agent-shell backend preflight
|
|
77
|
+
sandbox
|
|
78
|
+
.command("capabilities")
|
|
79
|
+
.description(
|
|
80
|
+
"Report requested, enforceable, applied, and unsupported agent-shell sandbox capabilities",
|
|
81
|
+
)
|
|
82
|
+
.option(
|
|
83
|
+
"--engine <engine>",
|
|
84
|
+
"Agent shell backend (docker|bubblewrap)",
|
|
85
|
+
"docker",
|
|
86
|
+
)
|
|
87
|
+
.option(
|
|
88
|
+
"--mode <mode>",
|
|
89
|
+
"Agent sandbox posture (off|workspace-write|strict)",
|
|
90
|
+
"workspace-write",
|
|
91
|
+
)
|
|
92
|
+
.option("--network", "Request unrestricted network access")
|
|
93
|
+
.option("--allow-read <paths>", "Comma-separated additional read paths")
|
|
94
|
+
.option("--deny-read <paths>", "Comma-separated denied read paths")
|
|
95
|
+
.option("--allow-write <paths>", "Comma-separated additional write paths")
|
|
96
|
+
.option("--deny-write <paths>", "Comma-separated denied write paths")
|
|
97
|
+
.option("--allowed-domains <domains>", "Comma-separated allowed domains")
|
|
98
|
+
.option("--denied-domains <domains>", "Comma-separated denied domains")
|
|
99
|
+
.option("--no-probe", "Do not probe backend availability")
|
|
100
|
+
.option("--json", "Output the versioned report as JSON")
|
|
101
|
+
.action((options) => {
|
|
102
|
+
try {
|
|
103
|
+
const sandboxConfig = normalizeAgentSandboxMode(
|
|
104
|
+
options.mode,
|
|
105
|
+
options.mode === "off" ? false : true,
|
|
106
|
+
{
|
|
107
|
+
cwd: process.cwd(),
|
|
108
|
+
network: options.network === true,
|
|
109
|
+
settings: {
|
|
110
|
+
engine: options.engine,
|
|
111
|
+
filesystem: {
|
|
112
|
+
allowRead: csvList(options.allowRead),
|
|
113
|
+
denyRead: csvList(options.denyRead),
|
|
114
|
+
allowWrite: csvList(options.allowWrite),
|
|
115
|
+
denyWrite: csvList(options.denyWrite),
|
|
116
|
+
},
|
|
117
|
+
network: {
|
|
118
|
+
allowedDomains: csvList(options.allowedDomains),
|
|
119
|
+
deniedDomains: csvList(options.deniedDomains),
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
);
|
|
124
|
+
const availability =
|
|
125
|
+
sandboxConfig && options.probe !== false
|
|
126
|
+
? (
|
|
127
|
+
dependencies.probeSandboxAvailability ||
|
|
128
|
+
probeSandboxAvailability
|
|
129
|
+
)(sandboxConfig)
|
|
130
|
+
: null;
|
|
131
|
+
const report = assessAgentSandboxCapabilities(sandboxConfig, {
|
|
132
|
+
availability,
|
|
133
|
+
host: dependencies.host,
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
if (options.json) {
|
|
137
|
+
console.log(JSON.stringify(report, null, 2));
|
|
138
|
+
} else {
|
|
139
|
+
logger.log(chalk.bold("Agent Shell Sandbox Capabilities"));
|
|
140
|
+
logger.log(
|
|
141
|
+
` Host: ${report.host.platform} ${report.host.release} (${report.host.arch})`,
|
|
142
|
+
);
|
|
143
|
+
logger.log(
|
|
144
|
+
` Backend: ${report.backend.engine || "none"} (${report.backend.availabilityChecked ? (report.backend.available ? "available" : "unavailable") : "not probed"})`,
|
|
145
|
+
);
|
|
146
|
+
logger.log(` Status: ${report.status}`);
|
|
147
|
+
logger.log(
|
|
148
|
+
` Execution observed: ${report.execution.observed ? "yes" : "no"}`,
|
|
149
|
+
);
|
|
150
|
+
printCapabilityEntries("Requested", report.requested);
|
|
151
|
+
printCapabilityEntries("Enforceable", report.enforceable);
|
|
152
|
+
printCapabilityEntries("Applied", report.applied);
|
|
153
|
+
printCapabilityEntries("Unsupported", report.unsupported);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (["unsupported", "unavailable"].includes(report.status)) {
|
|
157
|
+
process.exitCode = 2;
|
|
158
|
+
}
|
|
159
|
+
} catch (error) {
|
|
160
|
+
logger.error(`Failed: ${error.message}`);
|
|
161
|
+
process.exitCode = 2;
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
|
|
46
165
|
// sandbox create <agent-id>
|
|
47
166
|
sandbox
|
|
48
167
|
.command("create")
|
package/src/commands/serve.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
import { logger } from "../lib/logger.js";
|
|
7
7
|
import { createAgentRuntimeFactory } from "../runtime/runtime-factory.js";
|
|
8
|
+
import { captureSkillRuntimeDependencies } from "../lib/evolution/skill-runtime-revalidation.js";
|
|
8
9
|
import { captureAgentSkillOutcomeIndex } from "../lib/evolution/agent-evolution-runtime-composition-brand.js";
|
|
9
10
|
import { captureSkillVectorAuthority } from "../lib/skill-vector-authority.js";
|
|
10
11
|
import { captureSkillRetrievalRevocationReader } from "../lib/evolution/skill-retrieval-revocation-authority.js";
|
|
@@ -184,7 +185,11 @@ export function registerServeCommand(program, dependencies = {}) {
|
|
|
184
185
|
tlsKeyPath: opts.appServerTlsKey,
|
|
185
186
|
maxConnections: parseInt(opts.maxConnections, 10),
|
|
186
187
|
store,
|
|
187
|
-
kernelFactory: () =>
|
|
188
|
+
kernelFactory: () =>
|
|
189
|
+
new CliAgentKernelAdapter({
|
|
190
|
+
cwd,
|
|
191
|
+
sessionOptions: captureSkillRuntimeDependencies(dependencies),
|
|
192
|
+
}),
|
|
188
193
|
evolutionCompositionFactory,
|
|
189
194
|
skillOutcomeIndex,
|
|
190
195
|
skillVectorAuthority,
|
|
@@ -218,7 +223,10 @@ export function registerServeCommand(program, dependencies = {}) {
|
|
|
218
223
|
try {
|
|
219
224
|
await runStdioAppServer({
|
|
220
225
|
store,
|
|
221
|
-
kernel: new CliAgentKernelAdapter({
|
|
226
|
+
kernel: new CliAgentKernelAdapter({
|
|
227
|
+
cwd,
|
|
228
|
+
sessionOptions: captureSkillRuntimeDependencies(dependencies),
|
|
229
|
+
}),
|
|
222
230
|
evolutionCompositionFactory,
|
|
223
231
|
skillOutcomeIndex,
|
|
224
232
|
skillVectorAuthority,
|
|
@@ -232,6 +240,7 @@ export function registerServeCommand(program, dependencies = {}) {
|
|
|
232
240
|
return;
|
|
233
241
|
}
|
|
234
242
|
const runtime = createAgentRuntimeFactory({
|
|
243
|
+
...captureSkillRuntimeDependencies(dependencies),
|
|
235
244
|
deps:
|
|
236
245
|
evolutionCompositionFactory === null
|
|
237
246
|
? {}
|
package/src/commands/skill.js
CHANGED
|
@@ -61,6 +61,10 @@ import { CLI_PACK_DOMAINS } from "../lib/skill-packs/schema.js";
|
|
|
61
61
|
import { registerRecordReplayCommands } from "./record-replay.js";
|
|
62
62
|
import { routeSkillDescriptors } from "../lib/skill-retrieval-router.js";
|
|
63
63
|
import { resolveSkillOutcomeAuthority } from "../lib/skill-outcome-authority.js";
|
|
64
|
+
import {
|
|
65
|
+
assertSkillRuntimeAdmission,
|
|
66
|
+
captureSkillRuntimeDependencies,
|
|
67
|
+
} from "../lib/evolution/skill-runtime-revalidation.js";
|
|
64
68
|
import {
|
|
65
69
|
captureSkillVectorAuthority,
|
|
66
70
|
unavailableSkillVectorEvidence,
|
|
@@ -277,6 +281,8 @@ export async function runControlledSkill(options = {}) {
|
|
|
277
281
|
loader,
|
|
278
282
|
executeTool = null,
|
|
279
283
|
llmOptions = null,
|
|
284
|
+
skillRuntimeAdmission = null,
|
|
285
|
+
skillRuntimeAdmissionRequired = false,
|
|
280
286
|
signal = null,
|
|
281
287
|
} = options;
|
|
282
288
|
throwIfAborted(signal, "Skill command interrupted before discovery");
|
|
@@ -299,8 +305,24 @@ export async function runControlledSkill(options = {}) {
|
|
|
299
305
|
}
|
|
300
306
|
const executionLease = loader.acquireSkillExecution?.(skill, { signal });
|
|
301
307
|
const executionSignal = executionLease?.signal || signal;
|
|
308
|
+
const selectedSkillName = skill.id || skill.dirName;
|
|
309
|
+
const runtimeAdmissionContext = {
|
|
310
|
+
llmOptions,
|
|
311
|
+
effectiveAllowedToolNames: ["read_file", "search_files", "list_dir"],
|
|
312
|
+
};
|
|
313
|
+
const assertRuntime = () =>
|
|
314
|
+
assertSkillRuntimeAdmission({
|
|
315
|
+
skill,
|
|
316
|
+
loader,
|
|
317
|
+
admission: skillRuntimeAdmission,
|
|
318
|
+
required: skillRuntimeAdmissionRequired,
|
|
319
|
+
expectedSkillName: selectedSkillName,
|
|
320
|
+
context: runtimeAdmissionContext,
|
|
321
|
+
});
|
|
302
322
|
try {
|
|
323
|
+
assertRuntime();
|
|
303
324
|
const executionContext = {
|
|
325
|
+
...runtimeAdmissionContext,
|
|
304
326
|
loadedBecause: "run_skill",
|
|
305
327
|
bodyIncluded: false,
|
|
306
328
|
signal: executionSignal,
|
|
@@ -315,6 +337,7 @@ export async function runControlledSkill(options = {}) {
|
|
|
315
337
|
skill = loader.materializeSkill(skill, executionContext);
|
|
316
338
|
}
|
|
317
339
|
executionLease?.assertActive?.();
|
|
340
|
+
assertRuntime();
|
|
318
341
|
if (skill.isolation !== true) {
|
|
319
342
|
return {
|
|
320
343
|
error:
|
|
@@ -343,6 +366,8 @@ export async function runControlledSkill(options = {}) {
|
|
|
343
366
|
{
|
|
344
367
|
cwd,
|
|
345
368
|
skillLoader: loader,
|
|
369
|
+
skillRuntimeAdmission,
|
|
370
|
+
skillRuntimeAdmissionRequired,
|
|
346
371
|
...(executionSignal ? { signal: executionSignal } : {}),
|
|
347
372
|
...(llmOptions ? { llmOptions: { ...llmOptions } } : {}),
|
|
348
373
|
},
|
|
@@ -369,6 +394,8 @@ export async function runControlledSkill(options = {}) {
|
|
|
369
394
|
}
|
|
370
395
|
|
|
371
396
|
export function registerSkillCommand(program, dependencies = {}) {
|
|
397
|
+
const runtimeAdmissionDependencies =
|
|
398
|
+
captureSkillRuntimeDependencies(dependencies);
|
|
372
399
|
const skillVectorAuthority =
|
|
373
400
|
dependencies.skillVectorAuthority == null
|
|
374
401
|
? null
|
|
@@ -641,6 +668,7 @@ export function registerSkillCommand(program, dependencies = {}) {
|
|
|
641
668
|
.option("-y, --yes", "Authorize the current isolated skill digest")
|
|
642
669
|
.action(async (name, inputParts, options) => {
|
|
643
670
|
const runLoader = new CLISkillLoader({
|
|
671
|
+
...runtimeAdmissionDependencies,
|
|
644
672
|
reauthorizeSkill: createCliSkillReauthorizer({
|
|
645
673
|
assumeYes: options.yes === true,
|
|
646
674
|
}),
|
|
@@ -654,6 +682,7 @@ export function registerSkillCommand(program, dependencies = {}) {
|
|
|
654
682
|
cwd: process.cwd(),
|
|
655
683
|
loader: runLoader,
|
|
656
684
|
llmOptions,
|
|
685
|
+
...runtimeAdmissionDependencies,
|
|
657
686
|
});
|
|
658
687
|
} catch (error) {
|
|
659
688
|
result = {
|
package/src/data/changelog.json
CHANGED
|
@@ -1,6 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"source": "CHANGELOG.md",
|
|
3
3
|
"releases": [
|
|
4
|
+
{
|
|
5
|
+
"productVersion": null,
|
|
6
|
+
"cliVersion": "0.166.47",
|
|
7
|
+
"cliVersions": ["0.166.47"],
|
|
8
|
+
"date": null,
|
|
9
|
+
"title": "",
|
|
10
|
+
"sections": [
|
|
11
|
+
{
|
|
12
|
+
"heading": "Added - cc CLI 0.166.47: govern Evolution runtime and scale background sessions",
|
|
13
|
+
"body": "- Add the durable Evolution ledger v2, evidence-bound Wiki maintenance, and\n runtime revalidation so governed learning and deployment decisions retain\n verifiable state across restarts.\n- Add native OpenAI Responses transport together with versioned model\n capability profiles, explicit model-egress inventory, and bounded runtime\n capability reporting.\n- Add bound plugin-evaluation and deferred-question flows for Agent sessions,\n while keeping deployment and evidence admission fail-closed.\n- Paginate `cc background session list` so installations with large background\n session histories can navigate results without loading the entire list."
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"productVersion": null,
|
|
19
|
+
"cliVersion": "0.166.46",
|
|
20
|
+
"cliVersions": ["0.166.46"],
|
|
21
|
+
"date": null,
|
|
22
|
+
"title": "",
|
|
23
|
+
"sections": [
|
|
24
|
+
{
|
|
25
|
+
"heading": "Fixed - cc CLI 0.166.46: restore Agent chat before Evolution deployment",
|
|
26
|
+
"body": "- Restore ordinary Agent and IDE stream chat for installations with no\n Evolution deployment configured.\n- Continue authenticating configured deployments and reject invalid, disabled,\n or unauthorized Agent deployments without falling back to ordinary chat.\n- Refresh public npm metadata during release verification retries."
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
},
|
|
4
30
|
{
|
|
5
31
|
"productVersion": "v5.0.3.137",
|
|
6
32
|
"cliVersion": "0.166.45",
|
|
@@ -535,9 +535,21 @@ async function ensureSessionHandler(
|
|
|
535
535
|
const { WebSocketInteractionAdapter } =
|
|
536
536
|
await import("../../lib/interaction-adapter.js");
|
|
537
537
|
const enablePhase5Envelopes = await _isPhase5EnvelopesEnabled();
|
|
538
|
+
const stateSnapshot =
|
|
539
|
+
typeof server.sessionManager.getSessionStateSnapshot === "function"
|
|
540
|
+
? server.sessionManager.getSessionStateSnapshot(session.id)
|
|
541
|
+
: null;
|
|
538
542
|
session.interaction = new WebSocketInteractionAdapter(ws, session.id, {
|
|
539
543
|
enablePhase5Envelopes,
|
|
540
544
|
envelopeBus: server.envelopeBus || null,
|
|
545
|
+
deferredState: stateSnapshot,
|
|
546
|
+
onDeferredQuestionChange: ({ type, payload }) => {
|
|
547
|
+
server.sessionManager?.recordSessionStateEvent?.(
|
|
548
|
+
session.id,
|
|
549
|
+
type,
|
|
550
|
+
payload,
|
|
551
|
+
);
|
|
552
|
+
},
|
|
541
553
|
onPendingApprovalChange: ({ type, payload }) => {
|
|
542
554
|
if (
|
|
543
555
|
server.sessionManager &&
|
|
@@ -651,6 +663,7 @@ async function ensureSessionHandler(
|
|
|
651
663
|
evolutionCompositionFactory: server.evolutionCompositionFactory,
|
|
652
664
|
skillOutcomeIndex: server.skillOutcomeIndex,
|
|
653
665
|
skillVectorAuthority: server.skillVectorAuthority,
|
|
666
|
+
...server.runtimeAdmissionDependencies,
|
|
654
667
|
});
|
|
655
668
|
sessionHostLease = null;
|
|
656
669
|
sessionBudgetRoot = null;
|
|
@@ -76,6 +76,7 @@ import {
|
|
|
76
76
|
import { sessionBudgetAdmissionError } from "../../lib/session-budget-production-root.js";
|
|
77
77
|
import { captureAgentSkillOutcomeIndex } from "../../lib/evolution/agent-evolution-runtime-composition-brand.js";
|
|
78
78
|
import { captureSkillVectorAuthority } from "../../lib/skill-vector-authority.js";
|
|
79
|
+
import { captureSkillRuntimeDependencies } from "../../lib/evolution/skill-runtime-revalidation.js";
|
|
79
80
|
import {
|
|
80
81
|
beginSessionBudgetUsage,
|
|
81
82
|
markSessionBudgetUsageUnknown,
|
|
@@ -84,6 +85,7 @@ import {
|
|
|
84
85
|
} from "../../lib/session-budget-usage.js";
|
|
85
86
|
import { HostResourceBudget } from "../../lib/host-resource-budget.js";
|
|
86
87
|
import { captureAgentEvolutionRuntimeComposition } from "../../lib/evolution/agent-evolution-runtime-composition-brand.js";
|
|
88
|
+
import { composePrepareCall } from "../../lib/goal-context.js";
|
|
87
89
|
|
|
88
90
|
const CANONICAL_WS_TURN_QUEUES = new Map();
|
|
89
91
|
const CANONICAL_WS_CLAIM_CAS_ATTEMPTS = 4;
|
|
@@ -182,8 +184,14 @@ export class WSAgentHandler {
|
|
|
182
184
|
evolutionCompositionFactory = null,
|
|
183
185
|
skillOutcomeIndex = null,
|
|
184
186
|
skillVectorAuthority = null,
|
|
187
|
+
skillRuntimeAdmission = null,
|
|
188
|
+
skillRuntimeAdmissionRequired = false,
|
|
185
189
|
}) {
|
|
186
190
|
this.session = session;
|
|
191
|
+
this._runtimeAdmissionDependencies = captureSkillRuntimeDependencies({
|
|
192
|
+
skillRuntimeAdmission,
|
|
193
|
+
skillRuntimeAdmissionRequired,
|
|
194
|
+
});
|
|
187
195
|
this.interaction = interaction;
|
|
188
196
|
this.db = db || null;
|
|
189
197
|
this._processing = false;
|
|
@@ -371,6 +379,10 @@ export class WSAgentHandler {
|
|
|
371
379
|
"WebSocket evolution composition and Skill vector authority must share one tenant",
|
|
372
380
|
);
|
|
373
381
|
}
|
|
382
|
+
captureSkillRuntimeDependencies(
|
|
383
|
+
this._runtimeAdmissionDependencies,
|
|
384
|
+
composition.tenantId,
|
|
385
|
+
);
|
|
374
386
|
await composition.evolutionIngress.start();
|
|
375
387
|
return composition;
|
|
376
388
|
} catch (cause) {
|
|
@@ -1373,6 +1385,7 @@ export class WSAgentHandler {
|
|
|
1373
1385
|
}
|
|
1374
1386
|
|
|
1375
1387
|
this._processing = true;
|
|
1388
|
+
this.interaction.beginContextRevision?.();
|
|
1376
1389
|
const abortController = new AbortController();
|
|
1377
1390
|
const turnSignal = this._turnSignal(abortController.signal);
|
|
1378
1391
|
this._abortController = abortController;
|
|
@@ -1539,9 +1552,13 @@ export class WSAgentHandler {
|
|
|
1539
1552
|
shellPolicyOverrides: session.shellPolicyOverrides || null,
|
|
1540
1553
|
slotFiller,
|
|
1541
1554
|
interaction: this.interaction,
|
|
1555
|
+
prepareCall: composePrepareCall([
|
|
1556
|
+
this.interaction.createDeferredPrepareCall?.(),
|
|
1557
|
+
]),
|
|
1542
1558
|
...(this._skillOutcomeIndex === null
|
|
1543
1559
|
? {}
|
|
1544
1560
|
: { skillOutcomeIndex: this._skillOutcomeIndex }),
|
|
1561
|
+
...this._runtimeAdmissionDependencies,
|
|
1545
1562
|
...(this._skillVectorAuthority === null
|
|
1546
1563
|
? {}
|
|
1547
1564
|
: { skillVectorAuthority: this._skillVectorAuthority }),
|
|
@@ -17,6 +17,7 @@ import { dirname, join } from "node:path";
|
|
|
17
17
|
import { WebSocketServer } from "ws";
|
|
18
18
|
import { captureAgentSkillOutcomeIndex } from "../../lib/evolution/agent-evolution-runtime-composition-brand.js";
|
|
19
19
|
import { captureSkillVectorAuthority } from "../../lib/skill-vector-authority.js";
|
|
20
|
+
import { captureSkillRuntimeDependencies } from "../../lib/evolution/skill-runtime-revalidation.js";
|
|
20
21
|
import {
|
|
21
22
|
createEnvelope,
|
|
22
23
|
envelopeFromStreamEvent,
|
|
@@ -332,6 +333,8 @@ export class ChainlessChainWSServer extends EventEmitter {
|
|
|
332
333
|
}
|
|
333
334
|
this.evolutionCompositionFactory =
|
|
334
335
|
options.evolutionCompositionFactory || null;
|
|
336
|
+
this.runtimeAdmissionDependencies =
|
|
337
|
+
captureSkillRuntimeDependencies(options);
|
|
335
338
|
this.skillOutcomeIndex =
|
|
336
339
|
options.skillOutcomeIndex == null
|
|
337
340
|
? null
|