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.
Files changed (195) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/assets/{AIOps-C8SyFhOo.js → AIOps-CTxa2Wbq.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-Dup5gFK0.js → ActionButton-DHrQyYhy.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-8FyOWA7V.js → Analytics-DQiUqcNl.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-DBzdU9dg.js → AppLayout-_Iz4r6wt.js} +5 -5
  6. package/src/assets/web-panel/assets/{Artifacts-C_0Z8gNy.js → Artifacts-BNs63YHo.js} +1 -1
  7. package/src/assets/web-panel/assets/{Audit-Cf2a-58m.js → Audit-BgHIqRLn.js} +1 -1
  8. package/src/assets/web-panel/assets/{BackgroundAgents-M7w-2zgB.js → BackgroundAgents-DUQ5axBB.js} +1 -1
  9. package/src/assets/web-panel/assets/{Backup-CCTHQXoL.js → Backup-CJ51E9Vw.js} +1 -1
  10. package/src/assets/web-panel/assets/{BaseInput-DjXpeFwJ.js → BaseInput-o-5toA_R.js} +1 -1
  11. package/src/assets/web-panel/assets/{Chat-cAvchsJU.js → Chat-Cu7a-x1L.js} +6 -6
  12. package/src/assets/web-panel/assets/{ChatBubbleRenderer-DvEvxlZv.js → ChatBubbleRenderer-BUyYkAXr.js} +1 -1
  13. package/src/assets/web-panel/assets/{Checkbox-DKs6qvOn.js → Checkbox-DwdmZ71L.js} +1 -1
  14. package/src/assets/web-panel/assets/{Codegen-DlkA7b9X.js → Codegen-BrH2eYiP.js} +1 -1
  15. package/src/assets/web-panel/assets/{Col-CkfdKhyJ.js → Col-BVJQEP2j.js} +1 -1
  16. package/src/assets/web-panel/assets/{Community-iNXMHzj6.js → Community-FGO3vZPq.js} +1 -1
  17. package/src/assets/web-panel/assets/{Compact-DQxPEd09.js → Compact-DYGAFVnT.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compliance-CSKvMCjs.js → Compliance-CRvc8Bdt.js} +1 -1
  19. package/src/assets/web-panel/assets/{Cowork-CkWqazpD.js → Cowork-D6Ah2m7A.js} +3 -3
  20. package/src/assets/web-panel/assets/{Cron-k6W8IzhB.js → Cron-AXbU2ifR.js} +2 -2
  21. package/src/assets/web-panel/assets/{Crosschain-C8MS1OuY.js → Crosschain-C5DXgEFd.js} +1 -1
  22. package/src/assets/web-panel/assets/{DID-DJuCcgiQ.js → DID-Bxh9QV9v.js} +2 -2
  23. package/src/assets/web-panel/assets/{Dashboard-LeThKzp3.js → Dashboard-B-ZHEta-.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dropdown-BvxwgpE4.js → Dropdown-66Ik1jqa.js} +1 -1
  25. package/src/assets/web-panel/assets/{EmailListRenderer-n3e_a1M3.js → EmailListRenderer-CCWk1BIM.js} +1 -1
  26. package/src/assets/web-panel/assets/{FamilyGuardDashboard-509W6W6v.js → FamilyGuardDashboard--9faIULK.js} +1 -1
  27. package/src/assets/web-panel/assets/{Federation-xgZReQm0.js → Federation-CejW9CgX.js} +1 -1
  28. package/src/assets/web-panel/assets/{FormItemContext-jZOhKcQx.js → FormItemContext-acHgcXki.js} +1 -1
  29. package/src/assets/web-panel/assets/{GenericCardRenderer-Jo0ULzHv.js → GenericCardRenderer-D2ghd_K4.js} +1 -1
  30. package/src/assets/web-panel/assets/{Git-BsRcyWQP.js → Git-BOe1YJrV.js} +2 -2
  31. package/src/assets/web-panel/assets/{Governance-JlpMYTAk.js → Governance-BjgzJsof.js} +1 -1
  32. package/src/assets/web-panel/assets/{Inference-CUEz872-.js → Inference-CXCD5rnP.js} +1 -1
  33. package/src/assets/web-panel/assets/{KnowledgeGraph-DgrvvEDU.js → KnowledgeGraph-CHA8QgJT.js} +1 -1
  34. package/src/assets/web-panel/assets/{Logs-Df-KY4U3.js → Logs-DORPMcL6.js} +2 -2
  35. package/src/assets/web-panel/assets/MarkdownRenderer-CPPHz01z.js +1 -0
  36. package/src/assets/web-panel/assets/{Marketplace-kPZDTOeI.js → Marketplace-BCFlo1Yx.js} +1 -1
  37. package/src/assets/web-panel/assets/{McpTools-CRRzPqNX.js → McpTools-Dl_uZAKh.js} +2 -2
  38. package/src/assets/web-panel/assets/{Memory-D6pNSkg9.js → Memory-DupHamwz.js} +2 -2
  39. package/src/assets/web-panel/assets/{MobileBridge-g-pvtwRC.js → MobileBridge-BRSMPJxW.js} +1 -1
  40. package/src/assets/web-panel/assets/{MobileProjects-Bzayfrfe.js → MobileProjects-BHpuzsDl.js} +1 -1
  41. package/src/assets/web-panel/assets/{Mtc-B7S3W-XL.js → Mtc-Ch0jOQfZ.js} +2 -2
  42. package/src/assets/web-panel/assets/{MtcAudit-B8OMEWVb.js → MtcAudit-qzwQrDi7.js} +2 -2
  43. package/src/assets/web-panel/assets/{Multisig-CowRp7GH.js → Multisig-B5wHzUcm.js} +3 -3
  44. package/src/assets/web-panel/assets/{NLProgramming-BkQNyi4c.js → NLProgramming-Hy9uAiA0.js} +1 -1
  45. package/src/assets/web-panel/assets/{Notes-Cm7gtkKz.js → Notes-DkuchMC7.js} +4 -4
  46. package/src/assets/web-panel/assets/{NotificationSettings-CbPTVh9m.js → NotificationSettings-CYZhD7Pi.js} +1 -1
  47. package/src/assets/web-panel/assets/{OrderTableRenderer-Dswi26mJ.js → OrderTableRenderer-DKOoqajt.js} +1 -1
  48. package/src/assets/web-panel/assets/{Organization-BkjQ9yy7.js → Organization-D9AXn6j8.js} +4 -4
  49. package/src/assets/web-panel/assets/{Overflow-DmRFXP7Y.js → Overflow-Bg15J6hX.js} +1 -1
  50. package/src/assets/web-panel/assets/{P2P-DQE1toAu.js → P2P--B54HoQn.js} +2 -2
  51. package/src/assets/web-panel/assets/PdhVaultBrowser-Cz9Kk2Nb.js +7 -0
  52. package/src/assets/web-panel/assets/{Permissions-xSjfOaiU.js → Permissions-DHx38eS1.js} +4 -4
  53. package/src/assets/web-panel/assets/{PersonalDataHub-B9ICLqVP.js → PersonalDataHub-Dw8i2hAs.js} +4 -4
  54. package/src/assets/web-panel/assets/{Pipeline-CUNwyN9E.js → Pipeline-B2o6Ur2G.js} +1 -1
  55. package/src/assets/web-panel/assets/{Privacy-SOoCricX.js → Privacy-8g-h2fnu.js} +1 -1
  56. package/src/assets/web-panel/assets/{ProjectInit-CSaFul0F.js → ProjectInit-DuVTcINx.js} +2 -2
  57. package/src/assets/web-panel/assets/{ProjectSettings-CueiB_oe.js → ProjectSettings-C8njvdZX.js} +2 -2
  58. package/src/assets/web-panel/assets/Projects-Ca9BAfu7.js +1 -0
  59. package/src/assets/web-panel/assets/{Providers-CTqf_31h.js → Providers-wFqgod_W.js} +1 -1
  60. package/src/assets/web-panel/assets/{QrScannerModal-C8ZP31E9.js → QrScannerModal-9NCXrpmA.js} +1 -1
  61. package/src/assets/web-panel/assets/{QuickAsk-CPgn4713.js → QuickAsk-WUTNvFkY.js} +1 -1
  62. package/src/assets/web-panel/assets/{Recommend-8_e0zw0i.js → Recommend-xT4nYmju.js} +1 -1
  63. package/src/assets/web-panel/assets/{RemoteSession-iT7lbGqw.js → RemoteSession-fak1PBGC.js} +3 -3
  64. package/src/assets/web-panel/assets/{Reputation-B4q9SUOz.js → Reputation-D1AkQvD-.js} +1 -1
  65. package/src/assets/web-panel/assets/{Row-CA_nASyL.js → Row-DVfm6xGt.js} +1 -1
  66. package/src/assets/web-panel/assets/{RssFeed-Cwb0E3yv.js → RssFeed-BDunoLSE.js} +3 -3
  67. package/src/assets/web-panel/assets/{Search-D9iVsOxJ.js → Search-OPycRoU3.js} +1 -1
  68. package/src/assets/web-panel/assets/{Security-DPLbYchG.js → Security-C8-Fm3Dt.js} +3 -3
  69. package/src/assets/web-panel/assets/{Services-DGMVL_LF.js → Services-qM_sMpMl.js} +2 -2
  70. package/src/assets/web-panel/assets/{Skeleton-B_6kym0D.js → Skeleton-D3HBJjVF.js} +1 -1
  71. package/src/assets/web-panel/assets/{Skills-Ds6r0dXB.js → Skills-jr67X-tP.js} +1 -1
  72. package/src/assets/web-panel/assets/{Sla-BLHAbBhb.js → Sla-CS3ggyCg.js} +1 -1
  73. package/src/assets/web-panel/assets/{SpeechSettings-CZuddd14.js → SpeechSettings-CTOCYxOi.js} +1 -1
  74. package/src/assets/web-panel/assets/{SyncSettings-CdBq7oSl.js → SyncSettings-D3s3cLT5.js} +2 -2
  75. package/src/assets/web-panel/assets/{Tasks-DfT60Nyl.js → Tasks-CdfoJ25m.js} +1 -1
  76. package/src/assets/web-panel/assets/{Templates-RLfsKy2V.js → Templates-Drb4AI8X.js} +1 -1
  77. package/src/assets/web-panel/assets/{Tenant-Cw8xCNLE.js → Tenant-DzwR3Qkz.js} +1 -1
  78. package/src/assets/web-panel/assets/{Terminal-BOUkNu4f.js → Terminal-D-ESq7xp.js} +2 -2
  79. package/src/assets/web-panel/assets/{TimelineRenderer-CgGZWaRm.js → TimelineRenderer-BK-AUuws.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tokens-CpwjVyir.js → Tokens-xGTouuNp.js} +1 -1
  81. package/src/assets/web-panel/assets/{Trigger-DL21H-eb.js → Trigger-BvZj-v2H.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trust-B3ffFclW.js → Trust-BLC9CGmc.js} +1 -1
  83. package/src/assets/web-panel/assets/{UkeySign-CkBeb5aI.js → UkeySign-BSuCXpmE.js} +1 -1
  84. package/src/assets/web-panel/assets/{VideoEditing-U2iVaE3r.js → VideoEditing-DT3A-_Ql.js} +1 -1
  85. package/src/assets/web-panel/assets/{Wallet-CQk2wzYd.js → Wallet-c1OXao85.js} +4 -4
  86. package/src/assets/web-panel/assets/{WebAuthn-DYIuIYzT.js → WebAuthn-CuA-F7KJ.js} +5 -5
  87. package/src/assets/web-panel/assets/{WorkflowEditor-tg1c2mZQ.js → WorkflowEditor-MANZrf82.js} +1 -1
  88. package/src/assets/web-panel/assets/{chat-CtL61spq.js → chat-D4Y4Ey0O.js} +1 -1
  89. package/src/assets/web-panel/assets/{colors-DKpbeo8s.js → colors-DDH06hKO.js} +1 -1
  90. package/src/assets/web-panel/assets/{compact-item-gPZsrswt.js → compact-item-Cym756Xj.js} +1 -1
  91. package/src/assets/web-panel/assets/{createContext-CfHlwzVr.js → createContext-By4Nb1k-.js} +1 -1
  92. package/src/assets/web-panel/assets/devWarning-KO3pAGeO.js +1 -0
  93. package/src/assets/web-panel/assets/{hasIn-MV47g_6X.js → hasIn-Ch7OY258.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-DMMvlLp9.js → index-6-2eYBXr.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-DsH-i_3d.js → index-6CpOV3Pn.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-CB1HnbNK.js → index-ArMrnx0v.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-DU4rZpiK.js → index-B51otVoZ.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-CRv_uMLV.js → index-BBBUn5v7.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-srBc9U_s.js → index-BFydNU6a.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DnZ_zS1M.js → index-BIrRX-ra.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-DGtEBodr.js → index-BZB9q-Lp.js} +1 -1
  102. package/src/assets/web-panel/assets/index-Bh4Rgkg2.js +1 -0
  103. package/src/assets/web-panel/assets/{index-BjlPD7GO.js → index-Bo20BfdS.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-C_B9LiKs.js → index-CF3Lhyns.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-Rb7CRMw9.js → index-CGsvEbbq.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-DIeJmlAA.js → index-CJPks33Y.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-xUlgG0Xe.js → index-CT-3FYwd.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-6G0ETFTW.js → index-CUSUzaB8.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-CzfxTSPW.js → index-CV1UC4zo.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-CmPJpLoD.js → index-CV8qXTvb.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-fYcS7NS0.js → index-CZn6dmZe.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-Cjv0kKCU.js → index-CjNUTBwe.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-Df9sWKpl.js → index-CpudmDhf.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-C9RF4ieu.js → index-CykROEJA.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-Zvkt9xqi.js → index-D5sADPGY.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-yxxXlqBA.js → index-D9le0-dc.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-BBw52sEl.js → index-DAkk1M7x.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-ExAGPAnX.js → index-DNEJzc0r.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-BQp5M0s1.js → index-DNlxihs8.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-Ddcpj1El.js → index-DiewptTL.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-BOyGUuBE.js → index-DjwgJ5Jd.js} +1 -1
  122. package/src/assets/web-panel/assets/index-Dox_coTY.js +1 -0
  123. package/src/assets/web-panel/assets/{index-CmM9jqwe.js → index-DtGValNi.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-DfLyHCWi.js → index-DvnywwUj.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-BN-wxSQ8.js → index-OU8DZ9BL.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-D1XB5-t5.js → index-XGeQMvWK.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-C4lF-f_z.js → index-ZY2Qs_Sn.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-C9gtY4nG.js → index-jx7kr6mB.js} +3 -3
  129. package/src/assets/web-panel/assets/{index-C6nC_DyY.js → index-mL3nOcH6.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-Dd19vRwy.js → index-oBsfUbyH.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-bSFrAszw.js → index-q-s04OKn.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-D_Pl1GnW.js → index-tZ5BUdad.js} +1 -1
  133. package/src/assets/web-panel/assets/{initDefaultProps-BeOZoSZ4.js → initDefaultProps-DGcX9iPP.js} +1 -1
  134. package/src/assets/web-panel/assets/{motion-BXE8VMKx.js → motion-2SeL1D8A.js} +1 -1
  135. package/src/assets/web-panel/assets/{move-I9sdvPGX.js → move-3cYbQCpS.js} +1 -1
  136. package/src/assets/web-panel/assets/{mtc-parser-d25zrJd0.js → mtc-parser-IDdxfw0z.js} +1 -1
  137. package/src/assets/web-panel/assets/{omit-D71V_T4e.js → omit-BNswdKO6.js} +1 -1
  138. package/src/assets/web-panel/assets/{pickAttrs-BNZKpIAR.js → pickAttrs-BwCnem2I.js} +1 -1
  139. package/src/assets/web-panel/assets/{placementArrow-jOcgxTTz.js → placementArrow-B9PtZ5rq.js} +1 -1
  140. package/src/assets/web-panel/assets/{responsiveObserve-pta_O8AU.js → responsiveObserve-CPB6iSzV.js} +1 -1
  141. package/src/assets/web-panel/assets/{slide-Dlq6om7z.js → slide-DZgyblZa.js} +1 -1
  142. package/src/assets/web-panel/assets/{statusUtils-BnkO_yRv.js → statusUtils-D82IBdsx.js} +1 -1
  143. package/src/assets/web-panel/assets/{styleChecker-p8NfWmcG.js → styleChecker-qSHtosM-.js} +1 -1
  144. package/src/assets/web-panel/assets/{useFlexGapSupport-KcjZZ5U7.js → useFlexGapSupport-CmWO7h0I.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFs-gqonDMWB.js → useFs-yLrs_ub4.js} +1 -1
  146. package/src/assets/web-panel/assets/{usePersonalDataHub-jIIfE4go.js → usePersonalDataHub-CJ1VW6rh.js} +1 -1
  147. package/src/assets/web-panel/assets/{vnode-Dyo7fBrM.js → vnode-CzY_moQ4.js} +1 -1
  148. package/src/assets/web-panel/assets/{zoom-6l8BMg9W.js → zoom-DAa7rEY5.js} +1 -1
  149. package/src/assets/web-panel/index.html +1 -1
  150. package/src/commands/agent.js +62 -11
  151. package/src/commands/learning.js +71 -1
  152. package/src/commands/team.js +100 -3
  153. package/src/data/changelog.json +29 -3
  154. package/src/harness/worktree-isolator.js +74 -9
  155. package/src/lib/agent-team/task-lease.js +12 -1
  156. package/src/lib/agent-team/team-graph-runtime-adapter.js +6 -0
  157. package/src/lib/agent-team/team-runner.js +4 -0
  158. package/src/lib/agent-team/team-worktree.js +4 -0
  159. package/src/lib/capability-manifest.js +212 -1
  160. package/src/lib/evolution/evolution-artifact-ports.js +3277 -0
  161. package/src/lib/evolution/evolution-eval-gate.js +6442 -0
  162. package/src/lib/evolution/evolution-evidence-projector.js +3786 -0
  163. package/src/lib/evolution/evolution-ledger-ports.js +2689 -0
  164. package/src/lib/evolution/evolution-ledger.js +4280 -0
  165. package/src/lib/evolution/skill-candidate-registry.js +2258 -0
  166. package/src/lib/evolution/skill-execution-manifest.js +942 -0
  167. package/src/lib/evolution/skill-mutation-authority.js +1677 -0
  168. package/src/lib/evolution/skill-promotion-controller.js +506 -0
  169. package/src/lib/evolution/skill-release-registry.js +3277 -0
  170. package/src/lib/evolution/skill-target-matrix-eval.js +3233 -0
  171. package/src/lib/evolution/skill-writer-inventory-manifest.js +998 -0
  172. package/src/lib/evolution/skill-writer-inventory-validator.js +816 -0
  173. package/src/lib/formal-quality-eval-runtime.js +192 -0
  174. package/src/lib/graph-kernel/cutover-contract.js +7 -0
  175. package/src/lib/graph-kernel/cutover-ledger.js +8 -7
  176. package/src/lib/graph-kernel/evidence-digest.js +47 -0
  177. package/src/lib/graph-kernel/graph-runtime-surfaces.json +8 -1
  178. package/src/lib/graph-kernel/production-cutover-evidence.js +342 -15
  179. package/src/lib/graph-kernel/production-source-evidence.js +1599 -0
  180. package/src/lib/graph-kernel/retirement-evidence.js +15 -5
  181. package/src/lib/graph-kernel/runtime-surface-manifest.js +67 -2
  182. package/src/lib/headless-manifest.js +3 -1
  183. package/src/lib/learning/skill-improver.js +311 -43
  184. package/src/lib/learning/skill-synthesizer.js +236 -16
  185. package/src/lib/process-execution-broker/index.js +32 -0
  186. package/src/lib/process-execution-broker/platform-sandbox.js +5 -4
  187. package/src/lib/secure-fs.js +45 -2
  188. package/src/runtime/agent-core.js +17 -5
  189. package/src/runtime/headless-runner.js +16 -9
  190. package/src/assets/web-panel/assets/MarkdownRenderer-BEPDcSwz.js +0 -1
  191. package/src/assets/web-panel/assets/PdhVaultBrowser-BujyoDRG.js +0 -7
  192. package/src/assets/web-panel/assets/Projects-BOeXvU7y.js +0 -1
  193. package/src/assets/web-panel/assets/devWarning-DdqnMhzi.js +0 -1
  194. package/src/assets/web-panel/assets/index-BcK8o4ke.js +0 -1
  195. 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
  }