chainlesschain 0.166.14 → 0.166.16
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/package.json +1 -1
- package/src/assets/web-panel/assets/{AIOps-C8SyFhOo.js → AIOps-CTxa2Wbq.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-Dup5gFK0.js → ActionButton-DHrQyYhy.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-8FyOWA7V.js → Analytics-DQiUqcNl.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-DBzdU9dg.js → AppLayout-_Iz4r6wt.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-C_0Z8gNy.js → Artifacts-BNs63YHo.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-Cf2a-58m.js → Audit-BgHIqRLn.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-M7w-2zgB.js → BackgroundAgents-DUQ5axBB.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-CCTHQXoL.js → Backup-CJ51E9Vw.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-DjXpeFwJ.js → BaseInput-o-5toA_R.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-cAvchsJU.js → Chat-Cu7a-x1L.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-DvEvxlZv.js → ChatBubbleRenderer-BUyYkAXr.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-DKs6qvOn.js → Checkbox-DwdmZ71L.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DlkA7b9X.js → Codegen-BrH2eYiP.js} +1 -1
- package/src/assets/web-panel/assets/{Col-CkfdKhyJ.js → Col-BVJQEP2j.js} +1 -1
- package/src/assets/web-panel/assets/{Community-iNXMHzj6.js → Community-FGO3vZPq.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DQxPEd09.js → Compact-DYGAFVnT.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CSKvMCjs.js → Compliance-CRvc8Bdt.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CkWqazpD.js → Cowork-D6Ah2m7A.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-k6W8IzhB.js → Cron-AXbU2ifR.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-C8MS1OuY.js → Crosschain-C5DXgEFd.js} +1 -1
- package/src/assets/web-panel/assets/{DID-DJuCcgiQ.js → DID-Bxh9QV9v.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-LeThKzp3.js → Dashboard-B-ZHEta-.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BvxwgpE4.js → Dropdown-66Ik1jqa.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-n3e_a1M3.js → EmailListRenderer-CCWk1BIM.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-509W6W6v.js → FamilyGuardDashboard--9faIULK.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-xgZReQm0.js → Federation-CejW9CgX.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-jZOhKcQx.js → FormItemContext-acHgcXki.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-Jo0ULzHv.js → GenericCardRenderer-D2ghd_K4.js} +1 -1
- package/src/assets/web-panel/assets/{Git-BsRcyWQP.js → Git-BOe1YJrV.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-JlpMYTAk.js → Governance-BjgzJsof.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CUEz872-.js → Inference-CXCD5rnP.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DgrvvEDU.js → KnowledgeGraph-CHA8QgJT.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-Df-KY4U3.js → Logs-DORPMcL6.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-CPPHz01z.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-kPZDTOeI.js → Marketplace-BCFlo1Yx.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-CRRzPqNX.js → McpTools-Dl_uZAKh.js} +2 -2
- package/src/assets/web-panel/assets/{Memory-D6pNSkg9.js → Memory-DupHamwz.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-g-pvtwRC.js → MobileBridge-BRSMPJxW.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-Bzayfrfe.js → MobileProjects-BHpuzsDl.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-B7S3W-XL.js → Mtc-Ch0jOQfZ.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-B8OMEWVb.js → MtcAudit-qzwQrDi7.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-CowRp7GH.js → Multisig-B5wHzUcm.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-BkQNyi4c.js → NLProgramming-Hy9uAiA0.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-Cm7gtkKz.js → Notes-DkuchMC7.js} +4 -4
- package/src/assets/web-panel/assets/{NotificationSettings-CbPTVh9m.js → NotificationSettings-CYZhD7Pi.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-Dswi26mJ.js → OrderTableRenderer-DKOoqajt.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-BkjQ9yy7.js → Organization-D9AXn6j8.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-DmRFXP7Y.js → Overflow-Bg15J6hX.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-DQE1toAu.js → P2P--B54HoQn.js} +2 -2
- package/src/assets/web-panel/assets/PdhVaultBrowser-Cz9Kk2Nb.js +7 -0
- package/src/assets/web-panel/assets/{Permissions-xSjfOaiU.js → Permissions-DHx38eS1.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-B9ICLqVP.js → PersonalDataHub-Dw8i2hAs.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-CUNwyN9E.js → Pipeline-B2o6Ur2G.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-SOoCricX.js → Privacy-8g-h2fnu.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-CSaFul0F.js → ProjectInit-DuVTcINx.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CueiB_oe.js → ProjectSettings-C8njvdZX.js} +2 -2
- package/src/assets/web-panel/assets/Projects-Ca9BAfu7.js +1 -0
- package/src/assets/web-panel/assets/{Providers-CTqf_31h.js → Providers-wFqgod_W.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-C8ZP31E9.js → QrScannerModal-9NCXrpmA.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-CPgn4713.js → QuickAsk-WUTNvFkY.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-8_e0zw0i.js → Recommend-xT4nYmju.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-iT7lbGqw.js → RemoteSession-fak1PBGC.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-B4q9SUOz.js → Reputation-D1AkQvD-.js} +1 -1
- package/src/assets/web-panel/assets/{Row-CA_nASyL.js → Row-DVfm6xGt.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-Cwb0E3yv.js → RssFeed-BDunoLSE.js} +3 -3
- package/src/assets/web-panel/assets/{Search-D9iVsOxJ.js → Search-OPycRoU3.js} +1 -1
- package/src/assets/web-panel/assets/{Security-DPLbYchG.js → Security-C8-Fm3Dt.js} +3 -3
- package/src/assets/web-panel/assets/{Services-DGMVL_LF.js → Services-qM_sMpMl.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-B_6kym0D.js → Skeleton-D3HBJjVF.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-Ds6r0dXB.js → Skills-jr67X-tP.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-BLHAbBhb.js → Sla-CS3ggyCg.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-CZuddd14.js → SpeechSettings-CTOCYxOi.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-CdBq7oSl.js → SyncSettings-D3s3cLT5.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-DfT60Nyl.js → Tasks-CdfoJ25m.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-RLfsKy2V.js → Templates-Drb4AI8X.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-Cw8xCNLE.js → Tenant-DzwR3Qkz.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-BOUkNu4f.js → Terminal-D-ESq7xp.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-CgGZWaRm.js → TimelineRenderer-BK-AUuws.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-CpwjVyir.js → Tokens-xGTouuNp.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DL21H-eb.js → Trigger-BvZj-v2H.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-B3ffFclW.js → Trust-BLC9CGmc.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-CkBeb5aI.js → UkeySign-BSuCXpmE.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-U2iVaE3r.js → VideoEditing-DT3A-_Ql.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-CQk2wzYd.js → Wallet-c1OXao85.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DYIuIYzT.js → WebAuthn-CuA-F7KJ.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-tg1c2mZQ.js → WorkflowEditor-MANZrf82.js} +1 -1
- package/src/assets/web-panel/assets/{chat-CtL61spq.js → chat-D4Y4Ey0O.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DKpbeo8s.js → colors-DDH06hKO.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-gPZsrswt.js → compact-item-Cym756Xj.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-CfHlwzVr.js → createContext-By4Nb1k-.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-KO3pAGeO.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-MV47g_6X.js → hasIn-Ch7OY258.js} +1 -1
- package/src/assets/web-panel/assets/{index-DMMvlLp9.js → index-6-2eYBXr.js} +1 -1
- package/src/assets/web-panel/assets/{index-DsH-i_3d.js → index-6CpOV3Pn.js} +1 -1
- package/src/assets/web-panel/assets/{index-CB1HnbNK.js → index-ArMrnx0v.js} +1 -1
- package/src/assets/web-panel/assets/{index-DU4rZpiK.js → index-B51otVoZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CRv_uMLV.js → index-BBBUn5v7.js} +1 -1
- package/src/assets/web-panel/assets/{index-srBc9U_s.js → index-BFydNU6a.js} +1 -1
- package/src/assets/web-panel/assets/{index-DnZ_zS1M.js → index-BIrRX-ra.js} +1 -1
- package/src/assets/web-panel/assets/{index-DGtEBodr.js → index-BZB9q-Lp.js} +1 -1
- package/src/assets/web-panel/assets/index-Bh4Rgkg2.js +1 -0
- package/src/assets/web-panel/assets/{index-BjlPD7GO.js → index-Bo20BfdS.js} +1 -1
- package/src/assets/web-panel/assets/{index-C_B9LiKs.js → index-CF3Lhyns.js} +1 -1
- package/src/assets/web-panel/assets/{index-Rb7CRMw9.js → index-CGsvEbbq.js} +1 -1
- package/src/assets/web-panel/assets/{index-DIeJmlAA.js → index-CJPks33Y.js} +1 -1
- package/src/assets/web-panel/assets/{index-xUlgG0Xe.js → index-CT-3FYwd.js} +1 -1
- package/src/assets/web-panel/assets/{index-6G0ETFTW.js → index-CUSUzaB8.js} +1 -1
- package/src/assets/web-panel/assets/{index-CzfxTSPW.js → index-CV1UC4zo.js} +1 -1
- package/src/assets/web-panel/assets/{index-CmPJpLoD.js → index-CV8qXTvb.js} +1 -1
- package/src/assets/web-panel/assets/{index-fYcS7NS0.js → index-CZn6dmZe.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cjv0kKCU.js → index-CjNUTBwe.js} +1 -1
- package/src/assets/web-panel/assets/{index-Df9sWKpl.js → index-CpudmDhf.js} +1 -1
- package/src/assets/web-panel/assets/{index-C9RF4ieu.js → index-CykROEJA.js} +1 -1
- package/src/assets/web-panel/assets/{index-Zvkt9xqi.js → index-D5sADPGY.js} +1 -1
- package/src/assets/web-panel/assets/{index-yxxXlqBA.js → index-D9le0-dc.js} +1 -1
- package/src/assets/web-panel/assets/{index-BBw52sEl.js → index-DAkk1M7x.js} +1 -1
- package/src/assets/web-panel/assets/{index-ExAGPAnX.js → index-DNEJzc0r.js} +1 -1
- package/src/assets/web-panel/assets/{index-BQp5M0s1.js → index-DNlxihs8.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ddcpj1El.js → index-DiewptTL.js} +1 -1
- package/src/assets/web-panel/assets/{index-BOyGUuBE.js → index-DjwgJ5Jd.js} +1 -1
- package/src/assets/web-panel/assets/index-Dox_coTY.js +1 -0
- package/src/assets/web-panel/assets/{index-CmM9jqwe.js → index-DtGValNi.js} +1 -1
- package/src/assets/web-panel/assets/{index-DfLyHCWi.js → index-DvnywwUj.js} +1 -1
- package/src/assets/web-panel/assets/{index-BN-wxSQ8.js → index-OU8DZ9BL.js} +1 -1
- package/src/assets/web-panel/assets/{index-D1XB5-t5.js → index-XGeQMvWK.js} +1 -1
- package/src/assets/web-panel/assets/{index-C4lF-f_z.js → index-ZY2Qs_Sn.js} +1 -1
- package/src/assets/web-panel/assets/{index-C9gtY4nG.js → index-jx7kr6mB.js} +3 -3
- package/src/assets/web-panel/assets/{index-C6nC_DyY.js → index-mL3nOcH6.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dd19vRwy.js → index-oBsfUbyH.js} +1 -1
- package/src/assets/web-panel/assets/{index-bSFrAszw.js → index-q-s04OKn.js} +1 -1
- package/src/assets/web-panel/assets/{index-D_Pl1GnW.js → index-tZ5BUdad.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-BeOZoSZ4.js → initDefaultProps-DGcX9iPP.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BXE8VMKx.js → motion-2SeL1D8A.js} +1 -1
- package/src/assets/web-panel/assets/{move-I9sdvPGX.js → move-3cYbQCpS.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-d25zrJd0.js → mtc-parser-IDdxfw0z.js} +1 -1
- package/src/assets/web-panel/assets/{omit-D71V_T4e.js → omit-BNswdKO6.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-BNZKpIAR.js → pickAttrs-BwCnem2I.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-jOcgxTTz.js → placementArrow-B9PtZ5rq.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-pta_O8AU.js → responsiveObserve-CPB6iSzV.js} +1 -1
- package/src/assets/web-panel/assets/{slide-Dlq6om7z.js → slide-DZgyblZa.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-BnkO_yRv.js → statusUtils-D82IBdsx.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-p8NfWmcG.js → styleChecker-qSHtosM-.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-KcjZZ5U7.js → useFlexGapSupport-CmWO7h0I.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-gqonDMWB.js → useFs-yLrs_ub4.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-jIIfE4go.js → usePersonalDataHub-CJ1VW6rh.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-Dyo7fBrM.js → vnode-CzY_moQ4.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-6l8BMg9W.js → zoom-DAa7rEY5.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/agent.js +62 -11
- package/src/commands/learning.js +71 -1
- package/src/commands/team.js +100 -3
- package/src/data/changelog.json +29 -3
- package/src/harness/worktree-isolator.js +74 -9
- package/src/lib/agent-team/task-lease.js +12 -1
- package/src/lib/agent-team/team-graph-runtime-adapter.js +6 -0
- package/src/lib/agent-team/team-runner.js +4 -0
- package/src/lib/agent-team/team-worktree.js +4 -0
- package/src/lib/capability-manifest.js +212 -1
- package/src/lib/evolution/evolution-artifact-ports.js +3277 -0
- package/src/lib/evolution/evolution-eval-gate.js +6442 -0
- package/src/lib/evolution/evolution-evidence-projector.js +3786 -0
- package/src/lib/evolution/evolution-ledger-ports.js +2689 -0
- package/src/lib/evolution/evolution-ledger.js +4280 -0
- package/src/lib/evolution/skill-candidate-registry.js +2258 -0
- package/src/lib/evolution/skill-execution-manifest.js +942 -0
- package/src/lib/evolution/skill-mutation-authority.js +1677 -0
- package/src/lib/evolution/skill-promotion-controller.js +506 -0
- package/src/lib/evolution/skill-release-registry.js +3277 -0
- package/src/lib/evolution/skill-target-matrix-eval.js +3233 -0
- package/src/lib/evolution/skill-writer-inventory-manifest.js +998 -0
- package/src/lib/evolution/skill-writer-inventory-validator.js +816 -0
- package/src/lib/formal-quality-eval-runtime.js +192 -0
- package/src/lib/graph-kernel/cutover-contract.js +7 -0
- package/src/lib/graph-kernel/cutover-ledger.js +8 -7
- package/src/lib/graph-kernel/evidence-digest.js +47 -0
- package/src/lib/graph-kernel/graph-runtime-surfaces.json +8 -1
- package/src/lib/graph-kernel/production-cutover-evidence.js +342 -15
- package/src/lib/graph-kernel/production-source-evidence.js +1599 -0
- package/src/lib/graph-kernel/retirement-evidence.js +15 -5
- package/src/lib/graph-kernel/runtime-surface-manifest.js +67 -2
- package/src/lib/headless-manifest.js +3 -1
- package/src/lib/learning/skill-improver.js +311 -43
- package/src/lib/learning/skill-synthesizer.js +236 -16
- package/src/lib/process-execution-broker/index.js +32 -0
- package/src/lib/process-execution-broker/platform-sandbox.js +5 -4
- package/src/lib/secure-fs.js +45 -2
- package/src/runtime/agent-core.js +17 -5
- package/src/runtime/headless-runner.js +16 -9
- package/src/assets/web-panel/assets/MarkdownRenderer-BEPDcSwz.js +0 -1
- package/src/assets/web-panel/assets/PdhVaultBrowser-BujyoDRG.js +0 -7
- package/src/assets/web-panel/assets/Projects-BOeXvU7y.js +0 -1
- package/src/assets/web-panel/assets/devWarning-DdqnMhzi.js +0 -1
- package/src/assets/web-panel/assets/index-BcK8o4ke.js +0 -1
- package/src/assets/web-panel/assets/index-DvbAjyYI.js +0 -1
|
@@ -81,6 +81,54 @@ export const CAPABILITY_MANIFEST = Object.freeze({
|
|
|
81
81
|
"remote_control",
|
|
82
82
|
]),
|
|
83
83
|
|
|
84
|
+
// Static evolution declarations. Runtime evidence is deliberately kept out
|
|
85
|
+
// of this manifest so timestamps and deployment state cannot churn the
|
|
86
|
+
// canonical capability digest. `buildEvolutionStatus()` combines these
|
|
87
|
+
// declarations with explicit runtime receipts.
|
|
88
|
+
evolutionCapabilities: Object.freeze([
|
|
89
|
+
Object.freeze({
|
|
90
|
+
id: "learning-synthesis",
|
|
91
|
+
implemented: true,
|
|
92
|
+
dependencies: Object.freeze([
|
|
93
|
+
"llm",
|
|
94
|
+
"candidate-registry",
|
|
95
|
+
"independent-evaluator",
|
|
96
|
+
]),
|
|
97
|
+
gates: Object.freeze([
|
|
98
|
+
"candidate-only-output",
|
|
99
|
+
"artifact-persisted",
|
|
100
|
+
"eval-before-promotion",
|
|
101
|
+
]),
|
|
102
|
+
mutationScope: "candidate-only",
|
|
103
|
+
}),
|
|
104
|
+
Object.freeze({
|
|
105
|
+
id: "skill-improvement",
|
|
106
|
+
implemented: true,
|
|
107
|
+
dependencies: Object.freeze([
|
|
108
|
+
"candidate-registry",
|
|
109
|
+
"independent-evaluator",
|
|
110
|
+
]),
|
|
111
|
+
gates: Object.freeze([
|
|
112
|
+
"candidate-only-output",
|
|
113
|
+
"active-write-denied",
|
|
114
|
+
"eval-before-promotion",
|
|
115
|
+
]),
|
|
116
|
+
mutationScope: "candidate-only",
|
|
117
|
+
}),
|
|
118
|
+
Object.freeze({
|
|
119
|
+
id: "skill-candidate-registry",
|
|
120
|
+
implemented: true,
|
|
121
|
+
dependencies: Object.freeze(["private-storage", "hard-link-cas"]),
|
|
122
|
+
gates: Object.freeze([
|
|
123
|
+
"content-addressed-artifact",
|
|
124
|
+
"digest-bound-lineage",
|
|
125
|
+
"immutable-publication",
|
|
126
|
+
"path-and-symlink-defense",
|
|
127
|
+
]),
|
|
128
|
+
mutationScope: "candidate-only",
|
|
129
|
+
}),
|
|
130
|
+
]),
|
|
131
|
+
|
|
84
132
|
mcpFeatures: Object.freeze([
|
|
85
133
|
"config_file",
|
|
86
134
|
"registry",
|
|
@@ -107,6 +155,121 @@ const manifestOr = (m) =>
|
|
|
107
155
|
m && typeof m === "object" ? m : CAPABILITY_MANIFEST;
|
|
108
156
|
const wireFeaturesOf = (m) =>
|
|
109
157
|
Array.isArray(manifestOr(m).wireFeatures) ? manifestOr(m).wireFeatures : [];
|
|
158
|
+
const evolutionCapabilitiesOf = (m) =>
|
|
159
|
+
Array.isArray(manifestOr(m).evolutionCapabilities)
|
|
160
|
+
? manifestOr(m).evolutionCapabilities
|
|
161
|
+
: [];
|
|
162
|
+
const EVOLUTION_EVIDENCE_DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/u;
|
|
163
|
+
|
|
164
|
+
function compareCanonicalStrings(left, right) {
|
|
165
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
function digestJson(value) {
|
|
169
|
+
return `sha256:${createHash("sha256")
|
|
170
|
+
.update(JSON.stringify(value))
|
|
171
|
+
.digest("hex")}`;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Static evolution capability definitions. Arrays are copied so consumers
|
|
176
|
+
* cannot mutate the canonical manifest through the projection.
|
|
177
|
+
*/
|
|
178
|
+
export function toEvolutionCapabilityDefinitions(m = CAPABILITY_MANIFEST) {
|
|
179
|
+
return evolutionCapabilitiesOf(m).map((capability) => ({
|
|
180
|
+
id: String(capability.id || ""),
|
|
181
|
+
implemented: capability.implemented === true,
|
|
182
|
+
dependencies: [...(capability.dependencies || [])],
|
|
183
|
+
gates: [...(capability.gates || [])],
|
|
184
|
+
mutationScope: String(capability.mutationScope || "none"),
|
|
185
|
+
}));
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Combine immutable declarations with explicit runtime evidence. Missing or
|
|
190
|
+
* inconsistent evidence always degrades availability; it can never turn a
|
|
191
|
+
* declaration on implicitly. `lastEvidence` is an opaque bounded receipt id or
|
|
192
|
+
* digest, not a timestamp stored in the static manifest.
|
|
193
|
+
*
|
|
194
|
+
* @param {{manifest?:object,evidence?:Record<string,object>}} options
|
|
195
|
+
*/
|
|
196
|
+
export function buildEvolutionStatus({
|
|
197
|
+
manifest = CAPABILITY_MANIFEST,
|
|
198
|
+
evidence = {},
|
|
199
|
+
} = {}) {
|
|
200
|
+
const definitions = toEvolutionCapabilityDefinitions(manifest);
|
|
201
|
+
const safeEvidence =
|
|
202
|
+
evidence && typeof evidence === "object" && !Array.isArray(evidence)
|
|
203
|
+
? evidence
|
|
204
|
+
: {};
|
|
205
|
+
const capabilities = definitions.map((definition) => {
|
|
206
|
+
const observed =
|
|
207
|
+
Object.hasOwn(safeEvidence, definition.id) &&
|
|
208
|
+
safeEvidence[definition.id] &&
|
|
209
|
+
typeof safeEvidence[definition.id] === "object" &&
|
|
210
|
+
!Array.isArray(safeEvidence[definition.id])
|
|
211
|
+
? safeEvidence[definition.id]
|
|
212
|
+
: {};
|
|
213
|
+
const implemented = definition.implemented === true;
|
|
214
|
+
const lastEvidence =
|
|
215
|
+
Object.hasOwn(observed, "lastEvidence") &&
|
|
216
|
+
typeof observed.lastEvidence === "string" &&
|
|
217
|
+
EVOLUTION_EVIDENCE_DIGEST_PATTERN.test(observed.lastEvidence.trim())
|
|
218
|
+
? observed.lastEvidence.trim()
|
|
219
|
+
: null;
|
|
220
|
+
const wired =
|
|
221
|
+
implemented &&
|
|
222
|
+
Object.hasOwn(observed, "wired") &&
|
|
223
|
+
observed.wired === true;
|
|
224
|
+
const verified =
|
|
225
|
+
implemented &&
|
|
226
|
+
Object.hasOwn(observed, "verified") &&
|
|
227
|
+
observed.verified === true &&
|
|
228
|
+
lastEvidence !== null;
|
|
229
|
+
const defaultEnabled =
|
|
230
|
+
implemented &&
|
|
231
|
+
wired &&
|
|
232
|
+
verified &&
|
|
233
|
+
Object.hasOwn(observed, "defaultEnabled") &&
|
|
234
|
+
observed.defaultEnabled === true;
|
|
235
|
+
const evidenceState = {
|
|
236
|
+
wired,
|
|
237
|
+
verified,
|
|
238
|
+
defaultEnabled,
|
|
239
|
+
lastEvidence,
|
|
240
|
+
};
|
|
241
|
+
const state = !implemented
|
|
242
|
+
? "unavailable"
|
|
243
|
+
: !wired
|
|
244
|
+
? "not-wired"
|
|
245
|
+
: !verified
|
|
246
|
+
? "unverified"
|
|
247
|
+
: defaultEnabled
|
|
248
|
+
? "available"
|
|
249
|
+
: "available-disabled";
|
|
250
|
+
return {
|
|
251
|
+
...definition,
|
|
252
|
+
...evidenceState,
|
|
253
|
+
state,
|
|
254
|
+
evidenceDigest: digestJson({ id: definition.id, ...evidenceState }),
|
|
255
|
+
};
|
|
256
|
+
});
|
|
257
|
+
const evidenceProjection = capabilities
|
|
258
|
+
.map((capability) => ({
|
|
259
|
+
id: capability.id,
|
|
260
|
+
wired: capability.wired,
|
|
261
|
+
verified: capability.verified,
|
|
262
|
+
defaultEnabled: capability.defaultEnabled,
|
|
263
|
+
lastEvidence: capability.lastEvidence,
|
|
264
|
+
}))
|
|
265
|
+
.sort((left, right) => compareCanonicalStrings(left.id, right.id));
|
|
266
|
+
return {
|
|
267
|
+
schemaVersion: 1,
|
|
268
|
+
manifestDigest: capabilityDigest(manifest),
|
|
269
|
+
evidenceDigest: digestJson(evidenceProjection),
|
|
270
|
+
capabilities,
|
|
271
|
+
};
|
|
272
|
+
}
|
|
110
273
|
|
|
111
274
|
/**
|
|
112
275
|
* The negotiable wire feature keys, in canonical declared order — the value
|
|
@@ -233,6 +396,13 @@ export function capabilityDigest(m = CAPABILITY_MANIFEST) {
|
|
|
233
396
|
])
|
|
234
397
|
.sort((a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0)),
|
|
235
398
|
runtime: [...(mm.runtimeFeatures || [])].sort(),
|
|
399
|
+
evolution: toEvolutionCapabilityDefinitions(mm)
|
|
400
|
+
.map((capability) => ({
|
|
401
|
+
...capability,
|
|
402
|
+
dependencies: [...capability.dependencies].sort(),
|
|
403
|
+
gates: [...capability.gates].sort(),
|
|
404
|
+
}))
|
|
405
|
+
.sort((a, b) => compareCanonicalStrings(a.id, b.id)),
|
|
236
406
|
mcp: [...(mm.mcpFeatures || [])].sort(),
|
|
237
407
|
sandbox: [...(mm.sandboxEngines || [])].sort(),
|
|
238
408
|
permissionModes: [...(mm.permissionModes || [])].sort(),
|
|
@@ -303,7 +473,10 @@ export function renderProtocolDoc(m = CAPABILITY_MANIFEST) {
|
|
|
303
473
|
* @returns {{protocolChange:{from:number,to:number}|null,
|
|
304
474
|
* addedWireFeatures:string[], removedWireFeatures:string[],
|
|
305
475
|
* changedWireFeatures:Array<{feature:string, from:object, to:object}>,
|
|
306
|
-
* addedRuntimeFeatures:string[], removedRuntimeFeatures:string[]
|
|
476
|
+
* addedRuntimeFeatures:string[], removedRuntimeFeatures:string[],
|
|
477
|
+
* addedEvolutionCapabilities:string[],
|
|
478
|
+
* removedEvolutionCapabilities:string[],
|
|
479
|
+
* changedEvolutionCapabilities:Array<{capability:string, from:object, to:object}>}}
|
|
307
480
|
*/
|
|
308
481
|
export function diffCapabilities(prev, next = CAPABILITY_MANIFEST) {
|
|
309
482
|
const wireMap = (m) => {
|
|
@@ -318,6 +491,18 @@ export function diffCapabilities(prev, next = CAPABILITY_MANIFEST) {
|
|
|
318
491
|
return out;
|
|
319
492
|
};
|
|
320
493
|
const runtimeSet = (m) => new Set(manifestOr(m).runtimeFeatures || []);
|
|
494
|
+
const evolutionMap = (m) =>
|
|
495
|
+
new Map(
|
|
496
|
+
toEvolutionCapabilityDefinitions(m).map((capability) => [
|
|
497
|
+
capability.id,
|
|
498
|
+
{
|
|
499
|
+
implemented: capability.implemented,
|
|
500
|
+
dependencies: [...capability.dependencies].sort(),
|
|
501
|
+
gates: [...capability.gates].sort(),
|
|
502
|
+
mutationScope: capability.mutationScope,
|
|
503
|
+
},
|
|
504
|
+
]),
|
|
505
|
+
);
|
|
321
506
|
|
|
322
507
|
const p = wireMap(prev);
|
|
323
508
|
const n = wireMap(next);
|
|
@@ -342,6 +527,29 @@ export function diffCapabilities(prev, next = CAPABILITY_MANIFEST) {
|
|
|
342
527
|
const addedRuntimeFeatures = [...nr].filter((k) => !pr.has(k)).sort();
|
|
343
528
|
const removedRuntimeFeatures = [...pr].filter((k) => !nr.has(k)).sort();
|
|
344
529
|
|
|
530
|
+
const pe = evolutionMap(prev);
|
|
531
|
+
const ne = evolutionMap(next);
|
|
532
|
+
const addedEvolutionCapabilities = [...ne.keys()]
|
|
533
|
+
.filter((key) => !pe.has(key))
|
|
534
|
+
.sort();
|
|
535
|
+
const removedEvolutionCapabilities = [...pe.keys()]
|
|
536
|
+
.filter((key) => !ne.has(key))
|
|
537
|
+
.sort();
|
|
538
|
+
const changedEvolutionCapabilities = [];
|
|
539
|
+
for (const [key, nextDefinition] of ne) {
|
|
540
|
+
const previousDefinition = pe.get(key);
|
|
541
|
+
if (
|
|
542
|
+
previousDefinition &&
|
|
543
|
+
JSON.stringify(previousDefinition) !== JSON.stringify(nextDefinition)
|
|
544
|
+
) {
|
|
545
|
+
changedEvolutionCapabilities.push({
|
|
546
|
+
capability: key,
|
|
547
|
+
from: previousDefinition,
|
|
548
|
+
to: nextDefinition,
|
|
549
|
+
});
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
|
|
345
553
|
const pVer = Number(manifestOr(prev).protocolVersion) || 1;
|
|
346
554
|
const nVer = Number(manifestOr(next).protocolVersion) || 1;
|
|
347
555
|
const protocolChange = pVer === nVer ? null : { from: pVer, to: nVer };
|
|
@@ -353,5 +561,8 @@ export function diffCapabilities(prev, next = CAPABILITY_MANIFEST) {
|
|
|
353
561
|
changedWireFeatures,
|
|
354
562
|
addedRuntimeFeatures,
|
|
355
563
|
removedRuntimeFeatures,
|
|
564
|
+
addedEvolutionCapabilities,
|
|
565
|
+
removedEvolutionCapabilities,
|
|
566
|
+
changedEvolutionCapabilities,
|
|
356
567
|
};
|
|
357
568
|
}
|