chainlesschain 0.166.15 → 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-To-6rimH.js → AIOps-CTxa2Wbq.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CpdCnTv3.js → ActionButton-DHrQyYhy.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-DK7VNES_.js → Analytics-DQiUqcNl.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-NZ5FvhCx.js → AppLayout-_Iz4r6wt.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-NXceQPmN.js → Artifacts-BNs63YHo.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-B2d64DH2.js → Audit-BgHIqRLn.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-ByYgvEVY.js → BackgroundAgents-DUQ5axBB.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-BXvQLDvN.js → Backup-CJ51E9Vw.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-C4GZk-As.js → BaseInput-o-5toA_R.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-CvPuohL8.js → Chat-Cu7a-x1L.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-DTftcclX.js → ChatBubbleRenderer-BUyYkAXr.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-C8dQGIqD.js → Checkbox-DwdmZ71L.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DRM6S1W4.js → Codegen-BrH2eYiP.js} +1 -1
- package/src/assets/web-panel/assets/{Col-BDM8l-r5.js → Col-BVJQEP2j.js} +1 -1
- package/src/assets/web-panel/assets/{Community-Bvmfi1fX.js → Community-FGO3vZPq.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DGQTCima.js → Compact-DYGAFVnT.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-D_0C-2P6.js → Compliance-CRvc8Bdt.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-3C_q99ok.js → Cowork-D6Ah2m7A.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-CIiMQ1Hl.js → Cron-AXbU2ifR.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-peebGnES.js → Crosschain-C5DXgEFd.js} +1 -1
- package/src/assets/web-panel/assets/{DID-OkX4KB9T.js → DID-Bxh9QV9v.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-D9lm0Wxa.js → Dashboard-B-ZHEta-.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CitActXx.js → Dropdown-66Ik1jqa.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-DSmFkNKV.js → EmailListRenderer-CCWk1BIM.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-CBWAi8XL.js → FamilyGuardDashboard--9faIULK.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-afj8jDcp.js → Federation-CejW9CgX.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-Dabt59KY.js → FormItemContext-acHgcXki.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-BQpXA9kj.js → GenericCardRenderer-D2ghd_K4.js} +1 -1
- package/src/assets/web-panel/assets/{Git-D2p2Moo1.js → Git-BOe1YJrV.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-DkFfPykv.js → Governance-BjgzJsof.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-C1DKpeN2.js → Inference-CXCD5rnP.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-CjfVg4oQ.js → KnowledgeGraph-CHA8QgJT.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-D-zMvdSf.js → Logs-DORPMcL6.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-jzEpGkbc.js → MarkdownRenderer-CPPHz01z.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-DfAjJLyS.js → Marketplace-BCFlo1Yx.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BGDHQES1.js → McpTools-Dl_uZAKh.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-BYqrGAPS.js → Memory-DupHamwz.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-CQ6FEtty.js → MobileBridge-BRSMPJxW.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-BpMvh5JW.js → MobileProjects-BHpuzsDl.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-CWH25SrU.js → Mtc-Ch0jOQfZ.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-D6DiLmei.js → MtcAudit-qzwQrDi7.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-BSxRN4jD.js → Multisig-B5wHzUcm.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-C0FDPKT4.js → NLProgramming-Hy9uAiA0.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-VKR78bH-.js → Notes-DkuchMC7.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-DLSklSZB.js → NotificationSettings-CYZhD7Pi.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-Dpj7D6tC.js → OrderTableRenderer-DKOoqajt.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-BB3pB27e.js → Organization-D9AXn6j8.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-Cr7bzwcs.js → Overflow-Bg15J6hX.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-D1fkMMzI.js → P2P--B54HoQn.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-BiDEbLNA.js → PdhVaultBrowser-Cz9Kk2Nb.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-c3Ijv0v4.js → Permissions-DHx38eS1.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-BJwbh3P2.js → PersonalDataHub-Dw8i2hAs.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-C4fhXafB.js → Pipeline-B2o6Ur2G.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-DzSx3CD-.js → Privacy-8g-h2fnu.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-D9fL5fED.js → ProjectInit-DuVTcINx.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CB5FVrOR.js → ProjectSettings-C8njvdZX.js} +2 -2
- package/src/assets/web-panel/assets/Projects-Ca9BAfu7.js +1 -0
- package/src/assets/web-panel/assets/{Providers-B9ZH4faS.js → Providers-wFqgod_W.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-BLKDHT8_.js → QrScannerModal-9NCXrpmA.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-D1oYUcSY.js → QuickAsk-WUTNvFkY.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-CC2nmrOD.js → Recommend-xT4nYmju.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-qW9QF4-r.js → RemoteSession-fak1PBGC.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-BDWqfzcr.js → Reputation-D1AkQvD-.js} +1 -1
- package/src/assets/web-panel/assets/{Row-BBV2iCjT.js → Row-DVfm6xGt.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CcwrNwZB.js → RssFeed-BDunoLSE.js} +3 -3
- package/src/assets/web-panel/assets/{Search-Dr6fZ0D_.js → Search-OPycRoU3.js} +1 -1
- package/src/assets/web-panel/assets/{Security-BPzaoCU6.js → Security-C8-Fm3Dt.js} +4 -4
- package/src/assets/web-panel/assets/{Services-BoKUU1I_.js → Services-qM_sMpMl.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-C8lT8GUg.js → Skeleton-D3HBJjVF.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-DPpWeicz.js → Skills-jr67X-tP.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-UiijzpMU.js → Sla-CS3ggyCg.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-DoofrLwS.js → SpeechSettings-CTOCYxOi.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-DXnyfTDw.js → SyncSettings-D3s3cLT5.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-g_WHjKeg.js → Tasks-CdfoJ25m.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-DRuCh9g2.js → Templates-Drb4AI8X.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-QHIq1pH1.js → Tenant-DzwR3Qkz.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-G0fuI216.js → Terminal-D-ESq7xp.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-4MT7SpGk.js → TimelineRenderer-BK-AUuws.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-B5xT5umA.js → Tokens-xGTouuNp.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-D7HPbNgc.js → Trigger-BvZj-v2H.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-CxH69dU5.js → Trust-BLC9CGmc.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-CPPosveH.js → UkeySign-BSuCXpmE.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-Du5lGwAt.js → VideoEditing-DT3A-_Ql.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-BBIGNESK.js → Wallet-c1OXao85.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-Cc3HSGmv.js → WebAuthn-CuA-F7KJ.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-DBoVPNCh.js → WorkflowEditor-MANZrf82.js} +1 -1
- package/src/assets/web-panel/assets/{chat-DHcjgiem.js → chat-D4Y4Ey0O.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DrRrvJIV.js → colors-DDH06hKO.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BuY_sAoN.js → compact-item-Cym756Xj.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-CepH1Fha.js → createContext-By4Nb1k-.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-KO3pAGeO.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-Dh80Ot6o.js → hasIn-Ch7OY258.js} +1 -1
- package/src/assets/web-panel/assets/{index-BW9Pycxh.js → index-6-2eYBXr.js} +1 -1
- package/src/assets/web-panel/assets/{index-D7lstbTh.js → index-6CpOV3Pn.js} +1 -1
- package/src/assets/web-panel/assets/{index-CUnd5hyp.js → index-ArMrnx0v.js} +1 -1
- package/src/assets/web-panel/assets/{index-B0rvJjId.js → index-B51otVoZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-D6tOVlq-.js → index-BBBUn5v7.js} +1 -1
- package/src/assets/web-panel/assets/{index-NS9dW1F1.js → index-BFydNU6a.js} +1 -1
- package/src/assets/web-panel/assets/{index-CiUx-tkV.js → index-BIrRX-ra.js} +1 -1
- package/src/assets/web-panel/assets/{index-By0qqC3S.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-CNQK9DIr.js → index-Bo20BfdS.js} +1 -1
- package/src/assets/web-panel/assets/{index-C10033eO.js → index-CF3Lhyns.js} +1 -1
- package/src/assets/web-panel/assets/{index-DRy3_beb.js → index-CGsvEbbq.js} +1 -1
- package/src/assets/web-panel/assets/{index-DWANFMlq.js → index-CJPks33Y.js} +1 -1
- package/src/assets/web-panel/assets/{index-CnRK8_Dd.js → index-CT-3FYwd.js} +1 -1
- package/src/assets/web-panel/assets/{index-BPDEOOlA.js → index-CUSUzaB8.js} +1 -1
- package/src/assets/web-panel/assets/{index-DYN49m7k.js → index-CV1UC4zo.js} +1 -1
- package/src/assets/web-panel/assets/{index-C5vhNRqS.js → index-CV8qXTvb.js} +1 -1
- package/src/assets/web-panel/assets/{index-9crgJ3Id.js → index-CZn6dmZe.js} +1 -1
- package/src/assets/web-panel/assets/{index-DkZP_QaB.js → index-CjNUTBwe.js} +1 -1
- package/src/assets/web-panel/assets/{index-BoRy2yup.js → index-CpudmDhf.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ca5d64IH.js → index-CykROEJA.js} +1 -1
- package/src/assets/web-panel/assets/{index-A5lVwYVq.js → index-D5sADPGY.js} +1 -1
- package/src/assets/web-panel/assets/{index-BnVIvc15.js → index-D9le0-dc.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cx21_p3m.js → index-DAkk1M7x.js} +1 -1
- package/src/assets/web-panel/assets/{index-0TYLnd11.js → index-DNEJzc0r.js} +1 -1
- package/src/assets/web-panel/assets/{index-B9Gh-SOn.js → index-DNlxihs8.js} +1 -1
- package/src/assets/web-panel/assets/{index-BtqigRzf.js → index-DiewptTL.js} +1 -1
- package/src/assets/web-panel/assets/{index-CW_23-gU.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-LBkSOwky.js → index-DtGValNi.js} +1 -1
- package/src/assets/web-panel/assets/{index-D5_K3GKu.js → index-DvnywwUj.js} +1 -1
- package/src/assets/web-panel/assets/{index-BiZQooWK.js → index-OU8DZ9BL.js} +1 -1
- package/src/assets/web-panel/assets/{index-CYydOga6.js → index-XGeQMvWK.js} +1 -1
- package/src/assets/web-panel/assets/{index-hYaigdGm.js → index-ZY2Qs_Sn.js} +1 -1
- package/src/assets/web-panel/assets/{index-zGH9zH3w.js → index-jx7kr6mB.js} +3 -3
- package/src/assets/web-panel/assets/{index-DuRYBWrj.js → index-mL3nOcH6.js} +1 -1
- package/src/assets/web-panel/assets/{index-DuSUCH7h.js → index-oBsfUbyH.js} +1 -1
- package/src/assets/web-panel/assets/{index-CEfVkKIY.js → index-q-s04OKn.js} +1 -1
- package/src/assets/web-panel/assets/{index-DUNyTmkS.js → index-tZ5BUdad.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-nI_X3wKl.js → initDefaultProps-DGcX9iPP.js} +1 -1
- package/src/assets/web-panel/assets/{motion-LUHbQu_R.js → motion-2SeL1D8A.js} +1 -1
- package/src/assets/web-panel/assets/{move-DHI_KvJt.js → move-3cYbQCpS.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-AYdL_7Mo.js → mtc-parser-IDdxfw0z.js} +1 -1
- package/src/assets/web-panel/assets/{omit-CtV3HRKa.js → omit-BNswdKO6.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-CcJLTOu4.js → pickAttrs-BwCnem2I.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-DHbiLUps.js → placementArrow-B9PtZ5rq.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BC2DGkWP.js → responsiveObserve-CPB6iSzV.js} +1 -1
- package/src/assets/web-panel/assets/{slide-B4ga4pPY.js → slide-DZgyblZa.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-hzphgKfH.js → statusUtils-D82IBdsx.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-IfN9Bxoi.js → styleChecker-qSHtosM-.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-pcGKJ4pT.js → useFlexGapSupport-CmWO7h0I.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-COXhQpTG.js → useFs-yLrs_ub4.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-xp9F9szv.js → usePersonalDataHub-CJ1VW6rh.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-BdSQy1Ve.js → vnode-CzY_moQ4.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-CHCt5P55.js → zoom-DAa7rEY5.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/learning.js +71 -1
- package/src/commands/team.js +5 -0
- package/src/data/changelog.json +15 -2
- package/src/lib/agent-team/task-lease.js +12 -1
- 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 +100 -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/secure-fs.js +20 -0
- package/src/assets/web-panel/assets/Projects-DWhwdgfY.js +0 -1
- package/src/assets/web-panel/assets/devWarning-DIb8j04q.js +0 -1
- package/src/assets/web-panel/assets/index-BJc3t4PC.js +0 -1
- package/src/assets/web-panel/assets/index-CkksSUnI.js +0 -1
|
@@ -1988,7 +1988,18 @@ export class TaskLeaseRegistry {
|
|
|
1988
1988
|
patch,
|
|
1989
1989
|
actor: patch.assignee,
|
|
1990
1990
|
});
|
|
1991
|
-
|
|
1991
|
+
// Lease lifecycle changes do not alter the dependency-priority graph.
|
|
1992
|
+
// In particular, a successfully completed task can only have completed
|
|
1993
|
+
// ancestors because acquire() gates on every dependency. Cancelling is
|
|
1994
|
+
// different: recovery may fail a blocked descendant closed, which must
|
|
1995
|
+
// withdraw its donated priority from unfinished ancestors.
|
|
1996
|
+
if (
|
|
1997
|
+
(patch.priority !== undefined && patch.priority !== task.priority) ||
|
|
1998
|
+
(patch.status === TASK_STATUS.CANCELLED &&
|
|
1999
|
+
task.status !== TASK_STATUS.CANCELLED)
|
|
2000
|
+
) {
|
|
2001
|
+
this._priorityInheritanceCache = null;
|
|
2002
|
+
}
|
|
1992
2003
|
return true;
|
|
1993
2004
|
} catch {
|
|
1994
2005
|
// ConcurrencyError (rev changed under us) — caller re-reads and retries.
|
|
@@ -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
|
}
|