chainlesschain 0.166.46 → 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.
Files changed (232) hide show
  1. package/README.md +6 -4
  2. package/package.json +3 -1
  3. package/src/assets/web-panel/assets/{AIOps-Cp8KiMmv.js → AIOps-CDpT0WXV.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-B4d9BGsm.js → ActionButton-BNfUljWx.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-Cf9yXTkv.js → Analytics-C9323DEx.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-40UkmxtP.js → AppLayout-CRrjb2db.js} +4 -4
  7. package/src/assets/web-panel/assets/{Artifacts-Ckkb4oOA.js → Artifacts-Db-DGqJS.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-Dnf569k5.js → Audit-CJdHRJ0W.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-CA6bLem4.js → BackgroundAgents-_RSCnTYs.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-ChQU0I_Q.js → Backup-8GFQi-dM.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-BHeZXnNN.js → BaseInput-C87NtgUZ.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-DcFVYB2E.js → Chat-DcTMWS8G.js} +5 -5
  13. package/src/assets/web-panel/assets/ChatBubbleRenderer-5ZDPTW_H.js +1 -0
  14. package/src/assets/web-panel/assets/{Checkbox-2PDbejv2.js → Checkbox-DM9EmYee.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-DJBn1RAu.js → Codegen-M2YqDRNN.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-CPRq7n6y.js → Col-oB1LLxyf.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-axvINFMi.js → Community-TcVZK5tF.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-_OX4Qbe0.js → Compact-XKmq-3K_.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-DWAkvzRL.js → Compliance-C6CBiDRy.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-CUIJ25oj.js → Cowork-Dz9CGqXH.js} +4 -4
  21. package/src/assets/web-panel/assets/{Cron-nR0m7H3_.js → Cron-CxJDgDVL.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-CgTLXzh_.js → Crosschain-DMP0JsaQ.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-BllzRB6Q.js → DID-I5IQeogb.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-C9f0IIBN.js → Dashboard-BfLW2MXj.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-BkahetiO.js → Dropdown-BK8EjAlh.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-rartVC-k.js → EmailListRenderer-C3iqSv5I.js} +1 -1
  27. package/src/assets/web-panel/assets/EvolutionSettings-BJmBzpW6.js +1 -0
  28. package/src/assets/web-panel/assets/{FamilyGuardDashboard-DgUdFvw1.js → FamilyGuardDashboard-T19rnqm-.js} +1 -1
  29. package/src/assets/web-panel/assets/{Federation-oFpIQU6g.js → Federation-CozrbPMy.js} +1 -1
  30. package/src/assets/web-panel/assets/{FormItemContext-BUH5xlyP.js → FormItemContext-k1dCLNNJ.js} +1 -1
  31. package/src/assets/web-panel/assets/{GenericCardRenderer-ilRa-ueg.js → GenericCardRenderer-DbaW_Jvt.js} +1 -1
  32. package/src/assets/web-panel/assets/{Git-DlHHSF8j.js → Git-CQHRyEIt.js} +2 -2
  33. package/src/assets/web-panel/assets/{Governance-yQiiXIWe.js → Governance-BMJYZgMy.js} +1 -1
  34. package/src/assets/web-panel/assets/{Inference-BUDRVGOP.js → Inference-B7mpNU7V.js} +1 -1
  35. package/src/assets/web-panel/assets/{KnowledgeGraph-BaGyIoN1.js → KnowledgeGraph-Br0Blg6B.js} +1 -1
  36. package/src/assets/web-panel/assets/{Logs-C1cO6zE0.js → Logs-HIdk0S6M.js} +2 -2
  37. package/src/assets/web-panel/assets/{MarkdownRenderer-_z_Iaoes.js → MarkdownRenderer-HxeocBHy.js} +1 -1
  38. package/src/assets/web-panel/assets/{Marketplace-CM8cGL0K.js → Marketplace-Bkfq69UP.js} +1 -1
  39. package/src/assets/web-panel/assets/{McpTools-CDqAMU0U.js → McpTools-dtmx0bHO.js} +3 -3
  40. package/src/assets/web-panel/assets/{Memory-CfB0-Ofv.js → Memory-CrRlOuEf.js} +2 -2
  41. package/src/assets/web-panel/assets/{MobileBridge-BL18ytvB.js → MobileBridge-D4ZIZiAH.js} +1 -1
  42. package/src/assets/web-panel/assets/{MobileProjects-PIyyxbuJ.js → MobileProjects-C90Rw7GE.js} +1 -1
  43. package/src/assets/web-panel/assets/{Mtc-BTTrFCol.js → Mtc-CC6k_uh4.js} +4 -4
  44. package/src/assets/web-panel/assets/{MtcAudit-JHZn037c.js → MtcAudit-T_CUIYUy.js} +4 -4
  45. package/src/assets/web-panel/assets/{Multisig-CMf9NEdB.js → Multisig-N_e0RRWk.js} +3 -3
  46. package/src/assets/web-panel/assets/{NLProgramming-Dhk3qaus.js → NLProgramming-Iq3VzEv0.js} +1 -1
  47. package/src/assets/web-panel/assets/Notes-B5sKJUJt.js +7 -0
  48. package/src/assets/web-panel/assets/{NotificationSettings-gxdaVEit.js → NotificationSettings-K8UVp8qQ.js} +1 -1
  49. package/src/assets/web-panel/assets/OrderTableRenderer-BWNyM-6m.js +1 -0
  50. package/src/assets/web-panel/assets/{Organization-CzvHcDNO.js → Organization-DMO1NJxI.js} +4 -4
  51. package/src/assets/web-panel/assets/{Overflow-Dclx30Vv.js → Overflow-BBY6b31Z.js} +1 -1
  52. package/src/assets/web-panel/assets/{P2P-CM0Wm9vZ.js → P2P-DmsL0y0v.js} +2 -2
  53. package/src/assets/web-panel/assets/{PdhVaultBrowser-fYmQzmTA.js → PdhVaultBrowser-C65AX_RY.js} +3 -3
  54. package/src/assets/web-panel/assets/{Permissions-B_oATenG.js → Permissions-CWcpRtWa.js} +4 -4
  55. package/src/assets/web-panel/assets/{PersonalDataHub-CptiVBh5.js → PersonalDataHub--ZNDIdsn.js} +3 -3
  56. package/src/assets/web-panel/assets/{Pipeline-DkHzgyyI.js → Pipeline-DCdj5NGb.js} +1 -1
  57. package/src/assets/web-panel/assets/{Privacy-DzZvwcKh.js → Privacy-BRKu7Q3E.js} +1 -1
  58. package/src/assets/web-panel/assets/{ProjectInit-CzkCs-5G.js → ProjectInit-BJ7ozIAb.js} +2 -2
  59. package/src/assets/web-panel/assets/{ProjectSettings-BB8dcxRD.js → ProjectSettings-B2cVLiXW.js} +2 -2
  60. package/src/assets/web-panel/assets/{Projects-B7PW9CFY.js → Projects-Ce9r_W-p.js} +1 -1
  61. package/src/assets/web-panel/assets/{Providers-Tfx-ti1V.js → Providers-BDespvGZ.js} +1 -1
  62. package/src/assets/web-panel/assets/{QrScannerModal-EvWlNhfX.js → QrScannerModal-BUNO4fDU.js} +1 -1
  63. package/src/assets/web-panel/assets/{QuickAsk-CUspgbNC.js → QuickAsk-D2TUqeBV.js} +1 -1
  64. package/src/assets/web-panel/assets/{Recommend-COY2g77J.js → Recommend-BNNQPHBH.js} +1 -1
  65. package/src/assets/web-panel/assets/{RemoteSession-BzMBU6E6.js → RemoteSession-D2t1V_Cm.js} +2 -2
  66. package/src/assets/web-panel/assets/{Reputation-RtYRF4YP.js → Reputation-DVK5hEqI.js} +1 -1
  67. package/src/assets/web-panel/assets/{Row-Bva3l9Lc.js → Row-BB9RTwmE.js} +1 -1
  68. package/src/assets/web-panel/assets/{RssFeed-BhjzLvW3.js → RssFeed-DmEO7liZ.js} +2 -2
  69. package/src/assets/web-panel/assets/{Search-BYzT2PTR.js → Search-UwEYjnDB.js} +1 -1
  70. package/src/assets/web-panel/assets/{Security-Bcl4-KTv.js → Security-DebqSsMp.js} +4 -4
  71. package/src/assets/web-panel/assets/{Services-BRRa4A0f.js → Services-CuuPts3C.js} +2 -2
  72. package/src/assets/web-panel/assets/{Skeleton-DYQ016qy.js → Skeleton-DbWpmbgf.js} +1 -1
  73. package/src/assets/web-panel/assets/{Skills-CAUKL9JA.js → Skills-BaK7SxzT.js} +1 -1
  74. package/src/assets/web-panel/assets/{Sla-BTyUqfuD.js → Sla-BFHv51Jb.js} +1 -1
  75. package/src/assets/web-panel/assets/{SpeechSettings-CUjMihrs.js → SpeechSettings-B9b1R6uK.js} +1 -1
  76. package/src/assets/web-panel/assets/{SyncSettings-CvfOSupr.js → SyncSettings-BnO0CN02.js} +2 -2
  77. package/src/assets/web-panel/assets/{Tasks-EvjNXrWH.js → Tasks-Dy01Vq49.js} +1 -1
  78. package/src/assets/web-panel/assets/{Templates-wPAp0EoM.js → Templates-BCy2AMHc.js} +1 -1
  79. package/src/assets/web-panel/assets/{Tenant-CP0D-q9Q.js → Tenant-4Tx9y_Y1.js} +1 -1
  80. package/src/assets/web-panel/assets/{Terminal-CQ0f2iFg.js → Terminal-CPOoUH8J.js} +2 -2
  81. package/src/assets/web-panel/assets/{TimelineRenderer-D3JrGSPb.js → TimelineRenderer-C85GlJzu.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tokens-yXf2PPp9.js → Tokens-_xneFBGF.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trigger-DfmMOoZ2.js → Trigger-BizG4rTr.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trust-BTCyMgf1.js → Trust-Dh8EIn3n.js} +1 -1
  85. package/src/assets/web-panel/assets/{UkeySign-DKCwIBHi.js → UkeySign-C5NWoHWQ.js} +1 -1
  86. package/src/assets/web-panel/assets/{VideoEditing-CQpDSzLO.js → VideoEditing-0YfrySL6.js} +1 -1
  87. package/src/assets/web-panel/assets/{Wallet-CyFrzC3K.js → Wallet-BZVH8Ags.js} +4 -4
  88. package/src/assets/web-panel/assets/{WebAuthn-D6Nr_1kd.js → WebAuthn-kNofa6vm.js} +3 -3
  89. package/src/assets/web-panel/assets/{WorkflowEditor-CgR9tNrB.js → WorkflowEditor-BNO34_j0.js} +1 -1
  90. package/src/assets/web-panel/assets/{chat-CRG_IeyP.js → chat-ifQ2FlwD.js} +1 -1
  91. package/src/assets/web-panel/assets/{colors-MdE3TStI.js → colors-1TL8H6EH.js} +1 -1
  92. package/src/assets/web-panel/assets/{compact-item-B0LRuiNV.js → compact-item-DBfRjs_T.js} +1 -1
  93. package/src/assets/web-panel/assets/{createContext-B_V5fjcX.js → createContext-Bs6V4iBf.js} +1 -1
  94. package/src/assets/web-panel/assets/devWarning-BHnbnuYL.js +1 -0
  95. package/src/assets/web-panel/assets/{hasIn-DSL-c_hr.js → hasIn-Bz6LMY_0.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-DE7bSYmW.js → index--WvT2Il3.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-DBwBZwio.js → index-84mi5rsv.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-BsAEd-Do.js → index-B5SJCUZ7.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-CdHMc9LQ.js → index-B6RClMZl.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-B3iW-mhn.js → index-BB1Af7Fv.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-C67dPW0L.js → index-BQL_tldd.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-BpwGsAA-.js → index-BXJXMaZe.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-CZICtYJ0.js → index-BhPDhmvN.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-BbZZ7P_c.js → index-BiZ7Nz5-.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-Didyuq2Z.js → index-BoCTDcn6.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-BNhWoD6d.js → index-BxqC3LiO.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-DRRY44XP.js → index-C6c0j-Ki.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-D3pJBTvo.js → index-C7d6QlfR.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-CdplnAS9.js → index-C9QYxq61.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-CPYshcic.js → index-CBh48_Mh.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-CkN53KiJ.js → index-CNKHoXWI.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-OBhlHSMN.js → index-CXVBQ82k.js} +3 -3
  113. package/src/assets/web-panel/assets/{index-DtOTppk8.js → index-CXtiLagi.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-CNytQuFq.js → index-Cn7EIWmI.js} +1 -1
  115. package/src/assets/web-panel/assets/index-CsRz9-ZH.js +1 -0
  116. package/src/assets/web-panel/assets/{index-BIDCNwy6.js → index-CtB45Hok.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-BQAsL19t.js → index-Cu_V6ZJH.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-c8OqO3rq.js → index-Cykt9BbN.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-Bq8-2Ibv.js → index-DDhy4eCS.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-CXMeisJK.js → index-DEPPzM8I.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-BD0w-888.js → index-DMVktlxG.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-CVDi4rS9.js → index-DOww5Qny.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-Tg3yl8wc.js → index-DWPp-d07.js} +1 -1
  124. package/src/assets/web-panel/assets/index-DnjMFf3m.js +1 -0
  125. package/src/assets/web-panel/assets/{index-DVgTf7CZ.js → index-DvM2xBUA.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-SmQfEHjp.js → index-EK3XtMxA.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-C5dqieYX.js → index-XJIV7HEw.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-0200QxC4.js → index-cNwsev6n.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-C-aKWR2v.js → index-f_7L9GvP.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-KaSejHjf.js → index-lUL3bD2z.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-CS3bOhV7.js → index-pOUFfRdN.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-CEOAZm5j.js → index-rGhS02f8.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-BMm8tO2X.js → index-vHtnQsnV.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-BHp1nSur.js → index-vb1XIxEB.js} +1 -1
  135. package/src/assets/web-panel/assets/{initDefaultProps-P8SBN6Di.js → initDefaultProps-DpRIjwTt.js} +1 -1
  136. package/src/assets/web-panel/assets/{motion-BubbjUT_.js → motion-CG4_9o-Z.js} +1 -1
  137. package/src/assets/web-panel/assets/{move-Chcykv0I.js → move-Dku1fXtf.js} +1 -1
  138. package/src/assets/web-panel/assets/{mtc-parser-DyiYuGDu.js → mtc-parser-BvAVeX-3.js} +1 -1
  139. package/src/assets/web-panel/assets/{omit-Rdwb_Neb.js → omit-DFu0x78D.js} +1 -1
  140. package/src/assets/web-panel/assets/{pickAttrs-CCr0MYHl.js → pickAttrs-CmI-FNcK.js} +1 -1
  141. package/src/assets/web-panel/assets/{placementArrow-B1ZXz3bb.js → placementArrow-CGERYewB.js} +1 -1
  142. package/src/assets/web-panel/assets/{responsiveObserve-BGEdwej6.js → responsiveObserve-D7G8bF5J.js} +1 -1
  143. package/src/assets/web-panel/assets/{slide-CpnsUMaT.js → slide-B2sXwWXy.js} +1 -1
  144. package/src/assets/web-panel/assets/{statusUtils-C7x-TVp_.js → statusUtils-DI5yh0n3.js} +1 -1
  145. package/src/assets/web-panel/assets/{styleChecker-CC5k_791.js → styleChecker-deGJ5dp_.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFlexGapSupport-BpZFKsJW.js → useFlexGapSupport-OqHBXEmi.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFs-CVq5HySy.js → useFs-Dqgx0Qv_.js} +1 -1
  148. package/src/assets/web-panel/assets/{usePersonalDataHub-BGkdLryu.js → usePersonalDataHub-Be-lveh2.js} +1 -1
  149. package/src/assets/web-panel/assets/{vnode-uLtOUEK-.js → vnode-CFxB876W.js} +1 -1
  150. package/src/assets/web-panel/assets/{zoom-BfVC9iUs.js → zoom-BFOYrl4e.js} +1 -1
  151. package/src/assets/web-panel/index.html +1 -1
  152. package/src/command-help-index.json +3 -3
  153. package/src/commands/agent.js +8 -0
  154. package/src/commands/background-session.js +31 -3
  155. package/src/commands/chat.js +5 -1
  156. package/src/commands/eval.js +86 -28
  157. package/src/commands/llm.js +104 -1
  158. package/src/commands/plugin.js +130 -1
  159. package/src/commands/sandbox.js +121 -2
  160. package/src/commands/serve.js +11 -2
  161. package/src/commands/skill.js +29 -0
  162. package/src/data/changelog.json +13 -0
  163. package/src/gateways/ws/session-protocol.js +13 -0
  164. package/src/gateways/ws/ws-agent-handler.js +17 -0
  165. package/src/gateways/ws/ws-server.js +3 -0
  166. package/src/gateways/ws/ws-session-state.js +131 -0
  167. package/src/generated/cc-agent-protocol.schema.json +4 -0
  168. package/src/lazy-dispatch.js +8 -1
  169. package/src/lib/agent-sandbox.js +337 -53
  170. package/src/lib/app-server/cli-agent-kernel-adapter.js +28 -0
  171. package/src/lib/app-server/server.js +93 -0
  172. package/src/lib/background-agent-keeper-client.js +2 -0
  173. package/src/lib/background-agent-keeper-protocol.js +7 -0
  174. package/src/lib/background-agent-supervisor.js +194 -47
  175. package/src/lib/codex-app-server-adapter.js +81 -27
  176. package/src/lib/context-memory-kernel/durable-memory-port.js +31 -8
  177. package/src/lib/context-memory-kernel/provider-context.js +53 -19
  178. package/src/lib/deferred-question-context.js +122 -0
  179. package/src/lib/eval/evidence.js +202 -64
  180. package/src/lib/eval/plugin-suite.js +917 -0
  181. package/src/lib/eval/runner.js +10 -3
  182. package/src/lib/evolution/agent-evolution-runtime-composition.js +236 -1
  183. package/src/lib/evolution/agent-model-projection.js +97 -1
  184. package/src/lib/evolution/evidence-backed-wiki-maintainer.js +154 -1
  185. package/src/lib/evolution/evolution-artifact-ports.js +6 -0
  186. package/src/lib/evolution/evolution-deployment-loader.js +87 -3
  187. package/src/lib/evolution/evolution-eval-gate.js +8 -0
  188. package/src/lib/evolution/evolution-eval-runtime-composition.js +255 -0
  189. package/src/lib/evolution/evolution-evidence-artifact-adapter.js +58 -2
  190. package/src/lib/evolution/evolution-ledger-file-backend.js +23 -2
  191. package/src/lib/evolution/evolution-ledger-manifest-chain.js +223 -7
  192. package/src/lib/evolution/evolution-ledger-v2-journal.js +525 -0
  193. package/src/lib/evolution/evolution-ledger-v2-manifest-backend.js +46 -2
  194. package/src/lib/evolution/evolution-ledger.js +57 -1
  195. package/src/lib/evolution/evolution-run-ledger-adapter.js +93 -0
  196. package/src/lib/evolution/evolution-run-wiki-evidence-resolver.js +259 -0
  197. package/src/lib/evolution/governed-hub-llm.js +238 -5
  198. package/src/lib/evolution/governed-hub-resolver.js +82 -4
  199. package/src/lib/evolution/governed-hub-skill.js +11 -5
  200. package/src/lib/evolution/governed-skill-synthesis-provider-chat.js +10 -1
  201. package/src/lib/evolution/skill-runtime-revalidation-ledger-adapter.js +254 -0
  202. package/src/lib/evolution/skill-runtime-revalidation.js +530 -0
  203. package/src/lib/evolution/skill-target-matrix-eval.js +4 -4
  204. package/src/lib/evolution/wiki-evidence-commit-guard.js +366 -0
  205. package/src/lib/evolution/wiki-informed-skill-proposer.js +13 -1
  206. package/src/lib/goal-context.js +14 -5
  207. package/src/lib/interaction-adapter.js +166 -1
  208. package/src/lib/model-capabilities.js +271 -0
  209. package/src/lib/model-context-catalog.js +105 -0
  210. package/src/lib/model-context-window.js +4 -49
  211. package/src/lib/openai-responses.js +428 -0
  212. package/src/lib/plugin-runtime/scopes.js +7 -1
  213. package/src/lib/remote-read-loop-guard.js +2 -2
  214. package/src/lib/runtime-usage-ledger.js +16 -0
  215. package/src/lib/skill-loader.js +12 -0
  216. package/src/lib/with-file-lock.js +3 -1
  217. package/src/repl/agent-repl.js +5 -1
  218. package/src/runtime/agent-core.js +348 -23
  219. package/src/runtime/agent-runtime.js +7 -0
  220. package/src/runtime/coding-agent-contract-shared.cjs +13 -1
  221. package/src/runtime/headless-runner.js +4 -1
  222. package/src/runtime/headless-stream.js +133 -44
  223. package/src/runtime/runtime-factory.js +26 -2
  224. package/src/workers/background-agent-keeper.js +23 -13
  225. package/src/workers/background-agent-worker.js +27 -13
  226. package/src/assets/web-panel/assets/ChatBubbleRenderer-Bi2SY9E_.js +0 -1
  227. package/src/assets/web-panel/assets/EvolutionSettings-BqpG3XHV.js +0 -1
  228. package/src/assets/web-panel/assets/Notes-6F8EarNN.js +0 -7
  229. package/src/assets/web-panel/assets/OrderTableRenderer-gVgXQWdc.js +0 -1
  230. package/src/assets/web-panel/assets/devWarning-BtFLt3qI.js +0 -1
  231. package/src/assets/web-panel/assets/index-BhuWQHeG.js +0 -1
  232. package/src/assets/web-panel/assets/index-D-4tFek3.js +0 -1
@@ -78,6 +78,8 @@ export const EVOLUTION_ARTIFACT_LEDGER_RETENTION_TYPES = Object.freeze([
78
78
  "skill-registry-transition-request",
79
79
  "skill-registry-transition-settlement",
80
80
  "skill-retrieval-revocation-state",
81
+ "skill-runtime-revalidation-state",
82
+ "evolution-ledger-v2-journal",
81
83
  "evolution-run-event",
82
84
  "evolution-eval-child-evidence",
83
85
  "evolution-raw-deletion-receipt",
@@ -177,6 +179,8 @@ export const EVOLUTION_ARTIFACT_TYPES = Object.freeze([
177
179
  "skill-registry-transition-request",
178
180
  "skill-registry-transition-settlement",
179
181
  "skill-retrieval-revocation-state",
182
+ "skill-runtime-revalidation-state",
183
+ "evolution-ledger-v2-journal",
180
184
  "skill-release-finalization",
181
185
  "skill-release-state-migration",
182
186
  "structured-memory-authority-receipt",
@@ -381,6 +385,8 @@ const LEDGER_RETENTION_PURPOSES_BY_TYPE = new Map([
381
385
  ["skill-registry-transition-request", new Set(["evolution-ledger"])],
382
386
  ["skill-registry-transition-settlement", new Set(["evolution-ledger"])],
383
387
  ["skill-retrieval-revocation-state", new Set(["evolution-ledger"])],
388
+ ["skill-runtime-revalidation-state", new Set(["evolution-ledger"])],
389
+ ["evolution-ledger-v2-journal", new Set(["evolution-ledger"])],
384
390
  ["wiki-pruning-journal", new Set(["evolution-ledger"])],
385
391
  ["wiki-pruning-retrieval-projection", new Set(["evolution-ledger"])],
386
392
  ["evolution-run-event", new Set(["evolution-ledger"])],
@@ -27,6 +27,7 @@ const SUPPORTED_COMMANDS = new Set([
27
27
  "marketplace",
28
28
  "orchestrate",
29
29
  "serve",
30
+ "skill",
30
31
  "stream",
31
32
  "ui",
32
33
  ]);
@@ -128,7 +129,12 @@ function dependencies(value, commandName) {
128
129
  throw new TypeError(
129
130
  `evolution deployment returned invalid dependencies for ${commandName}`,
130
131
  );
131
- return Object.freeze({ ...value });
132
+ return Object.freeze({
133
+ ...value,
134
+ ...(["agent", "skill", "chat", "serve"].includes(commandName)
135
+ ? { skillRuntimeAdmissionRequired: true }
136
+ : {}),
137
+ });
132
138
  }
133
139
 
134
140
  function deniedAgentDependencies(commandName, code, message, source = null) {
@@ -204,6 +210,48 @@ function authenticatedDependencies(value, commandName) {
204
210
 
205
211
  async function loadBuiltInFactories(commandName) {
206
212
  const factories = {};
213
+ if (
214
+ ["agent", "skill", "chat", "serve", "evolution", "learning"].includes(
215
+ commandName,
216
+ )
217
+ ) {
218
+ const [
219
+ runtime,
220
+ adapter,
221
+ registry,
222
+ ledgerPorts,
223
+ artifactPorts,
224
+ ledgerBackend,
225
+ artifactStore,
226
+ manifest,
227
+ ] = await Promise.all([
228
+ import("./skill-runtime-revalidation.js"),
229
+ import("./skill-runtime-revalidation-ledger-adapter.js"),
230
+ import("./skill-release-registry.js"),
231
+ import("./evolution-ledger-ports.js"),
232
+ import("./evolution-artifact-ports.js"),
233
+ import("./evolution-ledger-file-backend.js"),
234
+ import("../artifact-store.js"),
235
+ import("./skill-execution-manifest.js"),
236
+ ]);
237
+ Object.assign(factories, {
238
+ createSkillRuntimeRevalidationAuthority:
239
+ runtime.createSkillRuntimeRevalidationAuthority,
240
+ createSkillRuntimeRevalidationLedgerAdapter: (options) =>
241
+ new adapter.SkillRuntimeRevalidationLedgerAdapter(options),
242
+ createSkillReleaseRegistry: (options) =>
243
+ new registry.SkillReleaseRegistry(options),
244
+ createEvolutionLedgerPorts: ledgerPorts.createEvolutionLedgerPorts,
245
+ createEvolutionArtifactPorts: (options) =>
246
+ new artifactPorts.EvolutionArtifactPorts(options),
247
+ createEvolutionLedgerFileBackend:
248
+ ledgerBackend.createEvolutionLedgerFileBackend,
249
+ createArtifactStore: (options) =>
250
+ new artifactStore.ArtifactStore(options),
251
+ buildSkillRuntimeManifest: manifest.buildSkillRuntimeManifest,
252
+ buildSkillDependencyLock: manifest.buildSkillDependencyLock,
253
+ });
254
+ }
207
255
  if (commandName === "learning") {
208
256
  const [
209
257
  { createGovernedSkillSynthesisCliHost },
@@ -415,6 +463,7 @@ async function loadBuiltInFactories(commandName) {
415
463
  }
416
464
  if (
417
465
  commandName === "agent" ||
466
+ commandName === "learning" ||
418
467
  commandName === "ask" ||
419
468
  commandName === "chat" ||
420
469
  commandName === "compact" ||
@@ -424,13 +473,47 @@ async function loadBuiltInFactories(commandName) {
424
473
  commandName === "cowork" ||
425
474
  commandName === "orchestrate" ||
426
475
  commandName === "serve" ||
476
+ commandName === "skill" ||
427
477
  commandName === "stream" ||
428
478
  commandName === "ui"
429
479
  ) {
430
- const { createAgentEvolutionRuntimeComposition } =
431
- await import("./agent-evolution-runtime-composition.js");
480
+ const {
481
+ assembleAgentSkillOutcomeIndexFromCatalog,
482
+ createAgentEvolutionRuntimeComposition,
483
+ } = await import("./agent-evolution-runtime-composition.js");
432
484
  factories.createAgentEvolutionRuntimeComposition =
433
485
  createAgentEvolutionRuntimeComposition;
486
+ const [
487
+ { createEvolutionEvalRuntimeComposition },
488
+ { EvolutionEvalGate, EvolutionEvalReceiptVerifier },
489
+ { createEvolutionEvalProcessSupervisor },
490
+ ] = await Promise.all([
491
+ import("./evolution-eval-runtime-composition.js"),
492
+ import("./evolution-eval-gate.js"),
493
+ import("./evolution-eval-process-supervisor.js"),
494
+ ]);
495
+ Object.assign(factories, {
496
+ createEvolutionEvalRuntimeComposition,
497
+ createEvolutionEvalGate: (options) => new EvolutionEvalGate(options),
498
+ createEvolutionEvalReceiptVerifier: (options) =>
499
+ new EvolutionEvalReceiptVerifier(options),
500
+ createEvolutionEvalProcessSupervisor,
501
+ });
502
+ if (commandName === "skill") {
503
+ const [
504
+ { createSkillOutcomeSourceCatalogAuthority },
505
+ { createSkillVectorProcessAuthority },
506
+ ] = await Promise.all([
507
+ import("./skill-outcome-source-catalog-authority.js"),
508
+ import("../skill-vector-process-authority.js"),
509
+ ]);
510
+ factories.assembleAgentSkillOutcomeIndexFromCatalog =
511
+ assembleAgentSkillOutcomeIndexFromCatalog;
512
+ factories.createSkillOutcomeSourceCatalogAuthority =
513
+ createSkillOutcomeSourceCatalogAuthority;
514
+ factories.createSkillVectorProcessAuthority =
515
+ createSkillVectorProcessAuthority;
516
+ }
434
517
  }
435
518
  return Object.freeze(factories);
436
519
  }
@@ -450,6 +533,7 @@ function bindFactoriesToModule(factories, moduleDigest) {
450
533
  "createWikiSkillBenchmarkGrader",
451
534
  "createWikiSkillBenchmarkReportAttestor",
452
535
  "createWikiSkillBenchmarkRunner",
536
+ "createEvolutionEvalRuntimeComposition",
453
537
  ];
454
538
  for (const name of providerFactories) {
455
539
  if (typeof factories[name] !== "function") continue;
@@ -6437,6 +6437,14 @@ export class EvolutionEvalReceiptVerifier {
6437
6437
  Object.freeze(EvolutionEvalGate.prototype);
6438
6438
  Object.freeze(EvolutionEvalReceiptVerifier.prototype);
6439
6439
 
6440
+ export function isEvolutionEvalGate(value) {
6441
+ return GATE_INSTANCES.has(value);
6442
+ }
6443
+
6444
+ export function isEvolutionEvalReceiptVerifier(value) {
6445
+ return RECEIPT_VERIFIER_INSTANCES.has(value);
6446
+ }
6447
+
6440
6448
  export async function runEvolutionEvalGate(gate, request) {
6441
6449
  if (!GATE_INSTANCES.has(gate)) {
6442
6450
  throw evalError(
@@ -0,0 +1,255 @@
1
+ import { types as utilTypes } from "node:util";
2
+
3
+ import {
4
+ EvolutionEvalChildEvidenceLedgerAdapter,
5
+ createEvolutionEvalChildEvidenceStorePort,
6
+ } from "./evolution-eval-child-evidence-ledger-adapter.js";
7
+ import {
8
+ SkillTargetMatrixEvalAggregator,
9
+ SkillTargetMatrixEvalReceiptVerifier,
10
+ } from "./skill-target-matrix-eval.js";
11
+ import { createSkillEvaluatedPromotionDurabilityAdapter } from "./skill-evaluated-promotion-durability.js";
12
+
13
+ export const EVOLUTION_EVAL_RUNTIME_COMPOSITION_SCHEMA =
14
+ "chainlesschain.evolution-eval-runtime-composition/v1";
15
+ export const EVOLUTION_EVAL_COMPOSITION_UNAVAILABLE_CODE =
16
+ "CC_EVOLUTION_EVAL_COMPOSITION_UNAVAILABLE";
17
+
18
+ const COMPOSITIONS = new WeakMap();
19
+ const DESCRIPTOR_KEYS = [
20
+ "tenantId",
21
+ "runId",
22
+ "authorityId",
23
+ "revision",
24
+ "handlerArtifactDigest",
25
+ ];
26
+ const ID = /^[A-Za-z0-9][A-Za-z0-9._:@/-]{0,255}$/u;
27
+ const DIGEST = /^sha256:[a-f0-9]{64}$/u;
28
+
29
+ function unavailable(message, cause) {
30
+ const error = new Error(message, cause ? { cause } : undefined);
31
+ error.code = EVOLUTION_EVAL_COMPOSITION_UNAVAILABLE_CODE;
32
+ return error;
33
+ }
34
+
35
+ function record(value, keys, label) {
36
+ if (
37
+ !value ||
38
+ typeof value !== "object" ||
39
+ utilTypes.isProxy(value) ||
40
+ ![Object.prototype, null].includes(Object.getPrototypeOf(value))
41
+ )
42
+ throw unavailable(`${label} must be a plain data record`);
43
+ const ownKeys = Reflect.ownKeys(value);
44
+ if (
45
+ keys &&
46
+ (ownKeys.length !== keys.length ||
47
+ ownKeys.some((key) => !keys.includes(key)))
48
+ )
49
+ throw unavailable(`${label} must contain exactly the required ports`);
50
+ for (const key of ownKeys) {
51
+ const property = Object.getOwnPropertyDescriptor(value, key);
52
+ if (
53
+ typeof key !== "string" ||
54
+ !property ||
55
+ !("value" in property) ||
56
+ !property.enumerable
57
+ )
58
+ throw unavailable(`${label}.${String(key)} must be an own data property`);
59
+ }
60
+ return value;
61
+ }
62
+
63
+ function descriptor(input) {
64
+ record(input, DESCRIPTOR_KEYS, "Eval composition descriptor");
65
+ for (const key of ["tenantId", "runId", "authorityId"])
66
+ if (typeof input[key] !== "string" || !ID.test(input[key]))
67
+ throw unavailable(`Eval composition ${key} is invalid`);
68
+ if (
69
+ !Number.isSafeInteger(input.revision) ||
70
+ input.revision < 1 ||
71
+ typeof input.handlerArtifactDigest !== "string" ||
72
+ !DIGEST.test(input.handlerArtifactDigest)
73
+ )
74
+ throw unavailable("Eval composition authority revision/digest is invalid");
75
+ return Object.freeze({ ...input });
76
+ }
77
+
78
+ /**
79
+ * Host-authorized construction only: supplies no signing keys, policy defaults,
80
+ * grader, corpus, reservation service, supervisor, or durability authority.
81
+ * Receipt verification uses the exact authority pair captured by the aggregator.
82
+ */
83
+ export function createEvolutionEvalRuntimeComposition(options) {
84
+ try {
85
+ record(
86
+ options,
87
+ [
88
+ "descriptor",
89
+ "aggregatorOptions",
90
+ "verificationLimits",
91
+ "durabilityOptions",
92
+ ],
93
+ "Eval composition options",
94
+ );
95
+ const binding = descriptor(options.descriptor);
96
+ const matrix = {
97
+ ...record(options.aggregatorOptions, null, "Eval aggregator options"),
98
+ };
99
+ const limits = record(
100
+ options.verificationLimits,
101
+ ["maximumReceiptTtlMs", "maximumVerificationMs"],
102
+ "Eval verification limits",
103
+ );
104
+ if (matrix.tenantId !== binding.tenantId)
105
+ throw unavailable("Eval aggregator belongs to another tenant");
106
+ const aggregator = new SkillTargetMatrixEvalAggregator(matrix);
107
+ const receiptVerifier = new SkillTargetMatrixEvalReceiptVerifier({
108
+ matrixReceiptVerifier: matrix.matrixReceiptVerifier,
109
+ matrixReceiptSignerDescriptor:
110
+ matrix.matrixReceiptSigner.authorityDescriptor,
111
+ matrixReceiptTrust: matrix.matrixReceiptTrust,
112
+ matrixSupervisor: matrix.matrixSupervisor,
113
+ supervisorPolicy: matrix.supervisorPolicy,
114
+ clock: matrix.clock,
115
+ clockPolicy: matrix.clockPolicy,
116
+ ...limits,
117
+ });
118
+ const durability = createSkillEvaluatedPromotionDurabilityAdapter(
119
+ options.durabilityOptions,
120
+ );
121
+ const composition = Object.freeze({
122
+ schema: EVOLUTION_EVAL_RUNTIME_COMPOSITION_SCHEMA,
123
+ descriptor: binding,
124
+ // Downstream promotion can reuse the same read-only receipt authorities.
125
+ receiptVerifier,
126
+ receiptResolver: durability.resolver,
127
+ });
128
+ COMPOSITIONS.set(
129
+ composition,
130
+ Object.freeze({
131
+ aggregator,
132
+ receiptVerifier,
133
+ durability,
134
+ childReceiptStore: matrix.childReceiptStore,
135
+ }),
136
+ );
137
+ return composition;
138
+ } catch (cause) {
139
+ if (cause?.code === EVOLUTION_EVAL_COMPOSITION_UNAVAILABLE_CODE)
140
+ throw cause;
141
+ throw unavailable("Eval production authority construction failed", cause);
142
+ }
143
+ }
144
+
145
+ export function captureEvolutionEvalRuntimeComposition(value, expected) {
146
+ const ports = COMPOSITIONS.get(value);
147
+ if (!ports)
148
+ throw unavailable("a branded Eval runtime composition is required");
149
+ if (expected) {
150
+ for (const key of DESCRIPTOR_KEYS)
151
+ if (value.descriptor[key] !== expected.descriptor[key])
152
+ throw unavailable(`Eval composition differs from runtime ${key}`);
153
+ if (ports.childReceiptStore !== expected.childReceiptStore)
154
+ throw unavailable(
155
+ "Eval composition must use the runtime child evidence store",
156
+ );
157
+ }
158
+ return ports;
159
+ }
160
+
161
+ /** Root-owned authenticated storage; the host receives no ledger write port. */
162
+ export function createEvolutionEvalRuntimeChildEvidenceStore({
163
+ descriptor: input,
164
+ artifactPorts,
165
+ ledger,
166
+ ledgerArtifactResolver,
167
+ audience,
168
+ now,
169
+ }) {
170
+ const binding = descriptor(input);
171
+ const storeDescriptor = Object.freeze({
172
+ tenantId: binding.tenantId,
173
+ streamId: binding.runId,
174
+ authorityId: binding.authorityId,
175
+ revision: binding.revision,
176
+ handlerArtifactDigest: binding.handlerArtifactDigest,
177
+ });
178
+ const adapter = new EvolutionEvalChildEvidenceLedgerAdapter({
179
+ descriptor: {
180
+ ...storeDescriptor,
181
+ artifactTenantId: binding.tenantId,
182
+ audience,
183
+ purpose: "evolution-ledger",
184
+ },
185
+ artifactPorts,
186
+ ledger,
187
+ ledgerArtifactResolver,
188
+ now,
189
+ });
190
+ return createEvolutionEvalChildEvidenceStorePort({
191
+ descriptor: storeDescriptor,
192
+ retain: adapter.retain.bind(adapter),
193
+ resolve: adapter.resolve.bind(adapter),
194
+ });
195
+ }
196
+
197
+ /** Called only by the Agent root after constructing its authenticated backend. */
198
+ export function createEvolutionEvalRuntimeStageConfiguration({
199
+ configuration,
200
+ tenantId,
201
+ runId,
202
+ ...storage
203
+ }) {
204
+ try {
205
+ record(
206
+ configuration,
207
+ [
208
+ "descriptor",
209
+ "createComposition",
210
+ "planRef",
211
+ "expectedReceipt",
212
+ "usage",
213
+ ],
214
+ "releaseTrain.domain.eval",
215
+ );
216
+ record(
217
+ configuration.descriptor,
218
+ ["authorityId", "revision", "handlerArtifactDigest"],
219
+ "releaseTrain.domain.eval.descriptor",
220
+ );
221
+ const binding = descriptor({
222
+ ...configuration.descriptor,
223
+ tenantId,
224
+ runId,
225
+ });
226
+ const factory = configuration.createComposition;
227
+ if (
228
+ typeof factory !== "function" ||
229
+ utilTypes.isProxy(factory) ||
230
+ utilTypes.isAsyncFunction(factory) ||
231
+ utilTypes.isGeneratorFunction(factory)
232
+ )
233
+ throw unavailable("Eval createComposition must be a synchronous factory");
234
+ const childReceiptStore = createEvolutionEvalRuntimeChildEvidenceStore({
235
+ descriptor: binding,
236
+ ...storage,
237
+ });
238
+ const context = Object.freeze({ descriptor: binding, childReceiptStore });
239
+ const composition = Reflect.apply(factory, undefined, [context]);
240
+ const { aggregator, receiptVerifier, durability } =
241
+ captureEvolutionEvalRuntimeComposition(composition, context);
242
+ return Object.freeze({
243
+ aggregator,
244
+ receiptVerifier,
245
+ durability,
246
+ planRef: configuration.planRef,
247
+ expectedReceipt: configuration.expectedReceipt,
248
+ usage: configuration.usage,
249
+ });
250
+ } catch (cause) {
251
+ if (cause?.code === EVOLUTION_EVAL_COMPOSITION_UNAVAILABLE_CODE)
252
+ throw cause;
253
+ throw unavailable("Eval production composition is unavailable", cause);
254
+ }
255
+ }
@@ -12,9 +12,11 @@ import { types as utilTypes } from "node:util";
12
12
  import { ArtifactStore } from "../artifact-store.js";
13
13
  import {
14
14
  EvolutionArtifactPorts,
15
+ EVOLUTION_DURABLE_ARTIFACT_RECORD_SCHEMA,
15
16
  EVOLUTION_ARTIFACT_DEFAULT_TTL_MS,
16
17
  EVOLUTION_ARTIFACT_MAX_TTL_MS,
17
18
  } from "./evolution-artifact-ports.js";
19
+ import { EVOLUTION_ARTIFACT_REF_SCHEMA } from "./evolution-ledger.js";
18
20
  import {
19
21
  EVOLUTION_RAW_STORAGE_RECEIPT_SCHEMA,
20
22
  EvolutionEvidenceBundleVerifier,
@@ -340,6 +342,7 @@ export class EvolutionEvidenceArtifactAdapter {
340
342
  #projectAgentModel;
341
343
  #verify;
342
344
  #ports;
345
+ #resolveManifestRef;
343
346
 
344
347
  constructor({
345
348
  tenantId,
@@ -384,6 +387,10 @@ export class EvolutionEvidenceArtifactAdapter {
384
387
  );
385
388
  this.#verify = captureMethod(bundleVerifier, "verify", "bundleVerifier");
386
389
  this.#ports = artifactPorts;
390
+ this.#resolveManifestRef =
391
+ artifactPorts.createEvolutionLedgerArtifactResolver({
392
+ purpose: this.#purpose,
393
+ });
387
394
  Object.freeze(this);
388
395
  }
389
396
 
@@ -468,11 +475,60 @@ export class EvolutionEvidenceArtifactAdapter {
468
475
  purpose: this.#purpose,
469
476
  tenantId: this.#tenantId,
470
477
  });
471
- const manifest = manifestResolved.value;
478
+ return this.#resolveManifest(manifestResolved.value, result.evidenceId);
479
+ }
480
+
481
+ /**
482
+ * Authenticate retained bytes at a Run's manifest locator. This is NOT Run
483
+ * membership or caller read authorization: the Wiki resolver obtains the
484
+ * event from its captured Run capability and separately calls readTrusted.
485
+ */
486
+ async resolveRunEvidence({ event, ledgerId, epoch } = {}) {
487
+ if (
488
+ event?.type !== "raw-event-referenced" ||
489
+ event.tenantId !== this.#tenantId ||
490
+ event.data?.derivationManifestDigest !== event.payloadDigest
491
+ ) {
492
+ throw new TypeError("Run evidence manifest binding is invalid");
493
+ }
494
+ const evidenceId = normalizeId(event.subjectId, "Run evidenceId");
495
+ const resolved = this.#resolveManifestRef({
496
+ tenantId: this.#tenantId,
497
+ ledgerId,
498
+ epoch,
499
+ ref: {
500
+ schema: EVOLUTION_ARTIFACT_REF_SCHEMA,
501
+ ref: event.artifactRef,
502
+ digest: event.payloadDigest,
503
+ },
504
+ });
505
+ if (
506
+ resolved.authenticated !== true ||
507
+ resolved.found !== true ||
508
+ resolved.digest !== event.payloadDigest ||
509
+ resolved.ref !== event.artifactRef ||
510
+ !Buffer.isBuffer(resolved.bytes)
511
+ ) {
512
+ throw new Error("Run evidence manifest resolution is unbound");
513
+ }
514
+ const record = JSON.parse(resolved.bytes.toString("utf8"));
515
+ if (
516
+ record.schema !== EVOLUTION_DURABLE_ARTIFACT_RECORD_SCHEMA ||
517
+ record.tenantId !== this.#tenantId ||
518
+ record.audience !== this.#audience ||
519
+ record.purpose !== this.#purpose ||
520
+ record.type !== "evidence"
521
+ ) {
522
+ throw new Error("Run evidence manifest record is unbound");
523
+ }
524
+ return this.#resolveManifest(record.value, evidenceId);
525
+ }
526
+
527
+ async #resolveManifest(manifest, evidenceId) {
472
528
  if (
473
529
  manifest.schema !== EVOLUTION_EVIDENCE_DERIVATION_MANIFEST_SCHEMA ||
474
530
  manifest.tenantId !== this.#tenantId ||
475
- manifest.evidenceId !== result.evidenceId
531
+ manifest.evidenceId !== evidenceId
476
532
  ) {
477
533
  throw new Error("evidence derivation manifest is invalid");
478
534
  }
@@ -1,7 +1,11 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
3
  import { createEvolutionFileWitness } from "./evolution-file-witness.js";
4
- import { EvolutionLedger } from "./evolution-ledger.js";
4
+ import {
5
+ EvolutionLedger,
6
+ captureEvolutionLedgerMigrationSource,
7
+ } from "./evolution-ledger.js";
8
+ import { createEvolutionLedgerV2JournalFromFactory } from "./evolution-ledger-v2-journal.js";
5
9
 
6
10
  export const EVOLUTION_LEDGER_FILE_BACKEND_SCHEMA =
7
11
  "chainlesschain.evolution-ledger-file-backend/v1";
@@ -110,6 +114,7 @@ export function createEvolutionLedgerFileBackend({
110
114
  crashHook = null,
111
115
  witnessMaximumBytes,
112
116
  witnessMaximumHistoryBytes,
117
+ manifestV2 = null,
113
118
  } = {}) {
114
119
  if (typeof artifactResolver !== "function") {
115
120
  throw new TypeError("artifactResolver port is required");
@@ -151,7 +156,7 @@ export function createEvolutionLedgerFileBackend({
151
156
  : { maximumHistoryBytes: witnessMaximumHistoryBytes }),
152
157
  };
153
158
  const witness = createEvolutionFileWitness(witnessOptions);
154
- const ledger = new EvolutionLedger({
159
+ const sourceLedger = new EvolutionLedger({
155
160
  rootDir: paths.eventRoot,
156
161
  authorityRootDir: paths.authorityRoot,
157
162
  secure,
@@ -170,6 +175,22 @@ export function createEvolutionLedgerFileBackend({
170
175
  ...(lockTimeoutMs === undefined ? {} : { lockTimeoutMs }),
171
176
  crashHook,
172
177
  });
178
+ if (
179
+ manifestV2 === null &&
180
+ captureEvolutionLedgerMigrationSource(sourceLedger).requiresV2()
181
+ ) {
182
+ throw Object.assign(
183
+ new Error("migrated ledger requires its authenticated v2 composition"),
184
+ { code: "CC_EVOLUTION_LEDGER_V2_REQUIRED" },
185
+ );
186
+ }
187
+ const ledger =
188
+ manifestV2 === null
189
+ ? sourceLedger
190
+ : createEvolutionLedgerV2JournalFromFactory(sourceLedger, manifestV2, {
191
+ ...(lock === undefined ? {} : { lock }),
192
+ ...(lockTimeoutMs === undefined ? {} : { lockTimeoutMs }),
193
+ });
173
194
  const backend = Object.freeze({
174
195
  schema: EVOLUTION_LEDGER_FILE_BACKEND_SCHEMA,
175
196
  descriptor: Object.freeze({