chainlesschain 0.166.21 → 0.166.24

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 (301) hide show
  1. package/README.md +67 -9
  2. package/package.json +4 -3
  3. package/src/assets/web-panel/assets/{AIOps-BjMnsUci.js → AIOps-DR-MWcZc.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-DdYFP03A.js → ActionButton-DT8B7sEb.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-Bb8TuuK_.js → Analytics-asjh3dQJ.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-Kn3TIOtk.js → AppLayout-DivQ491i.js} +5 -5
  7. package/src/assets/web-panel/assets/{Artifacts-4IxpqI_b.js → Artifacts-DPH2uUmy.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-BOV2caqU.js → Audit-Bp2nLyc-.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-B86k-ay4.js → BackgroundAgents-CHS28khl.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-C5_ie1e3.js → Backup-CKeaFSfz.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-xpwg6QCW.js → BaseInput-CxwM9BAH.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-CVZOcZau.js → Chat-DYLDwaCv.js} +4 -4
  13. package/src/assets/web-panel/assets/{ChatBubbleRenderer-D8fPYhUu.js → ChatBubbleRenderer-DdBJDBP0.js} +1 -1
  14. package/src/assets/web-panel/assets/{Checkbox-MKTq3zdP.js → Checkbox-uYTWOB8j.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-JUk3wzep.js → Codegen-CvYa_dwT.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-JPvTA0kC.js → Col-CanMAX4m.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-Tqgl87NQ.js → Community-B4WaDtHw.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-BuAFYBmN.js → Compact-K93Uof_3.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-CXS9WIPZ.js → Compliance-CKeDLgUW.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-Ds2bFHrr.js → Cowork-P93grAeB.js} +3 -3
  21. package/src/assets/web-panel/assets/{Cron-C_dV_OeW.js → Cron-BSHnMtDn.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-BsO6tIRo.js → Crosschain-epAOpUVJ.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-rNOFqBac.js → DID-ByjXfP7t.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-C2fcKKVY.js → Dashboard-QztTU8tb.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-Y7Ndr0X_.js → Dropdown-DhUc9yhN.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-DcP_uPmL.js → EmailListRenderer-C2sLhJJN.js} +1 -1
  27. package/src/assets/web-panel/assets/{FamilyGuardDashboard-Cwn3gDzk.js → FamilyGuardDashboard-CdfbWNDn.js} +1 -1
  28. package/src/assets/web-panel/assets/{Federation-ClQuOsqb.js → Federation-CcF_R7NW.js} +1 -1
  29. package/src/assets/web-panel/assets/{FormItemContext-DfwtmlcK.js → FormItemContext-Cm_X2IBk.js} +1 -1
  30. package/src/assets/web-panel/assets/{GenericCardRenderer-zNZhtbC5.js → GenericCardRenderer-DUi4NWlb.js} +1 -1
  31. package/src/assets/web-panel/assets/{Git-BZmdW-G5.js → Git-4Sq5FjBt.js} +2 -2
  32. package/src/assets/web-panel/assets/{Governance-CqBk4lEn.js → Governance-Dx2_v4V6.js} +1 -1
  33. package/src/assets/web-panel/assets/{Inference-Dbmt3ZXk.js → Inference-7Vr1xekR.js} +1 -1
  34. package/src/assets/web-panel/assets/{KnowledgeGraph-hMTH6qf3.js → KnowledgeGraph-Cnd2XOzf.js} +1 -1
  35. package/src/assets/web-panel/assets/{Logs-CkiYgiW2.js → Logs-B66QPVf-.js} +2 -2
  36. package/src/assets/web-panel/assets/{MarkdownRenderer-BL1FElXg.js → MarkdownRenderer-PLsEvhly.js} +1 -1
  37. package/src/assets/web-panel/assets/{Marketplace-CbB6wfin.js → Marketplace-BMIK9BmC.js} +1 -1
  38. package/src/assets/web-panel/assets/{McpTools-BSwiFtte.js → McpTools-BDbyp3J_.js} +3 -3
  39. package/src/assets/web-panel/assets/{Memory-B03PeHrz.js → Memory-CJdzfZGi.js} +2 -2
  40. package/src/assets/web-panel/assets/{MobileBridge-CRGrnd-X.js → MobileBridge-C2TH5Y3-.js} +1 -1
  41. package/src/assets/web-panel/assets/{MobileProjects-CE_5v2kO.js → MobileProjects-D1dYXkvV.js} +1 -1
  42. package/src/assets/web-panel/assets/{Mtc-Dp11QVx1.js → Mtc-B-4A1I1j.js} +4 -4
  43. package/src/assets/web-panel/assets/{MtcAudit-CYu-3JBu.js → MtcAudit-Bgcc9UOl.js} +5 -5
  44. package/src/assets/web-panel/assets/{Multisig-CGyJ0Xl3.js → Multisig-DqOe-etP.js} +3 -3
  45. package/src/assets/web-panel/assets/{NLProgramming-CoWi_ov1.js → NLProgramming-7VnhzE_6.js} +1 -1
  46. package/src/assets/web-panel/assets/Notes-BxawpeUQ.js +7 -0
  47. package/src/assets/web-panel/assets/{NotificationSettings-DX4I2b4W.js → NotificationSettings-Cr08G2aE.js} +1 -1
  48. package/src/assets/web-panel/assets/OrderTableRenderer-Ce8bEGlK.js +1 -0
  49. package/src/assets/web-panel/assets/{Organization-oopLO_tk.js → Organization-BC7lveGv.js} +4 -4
  50. package/src/assets/web-panel/assets/{Overflow-BFVvjMyf.js → Overflow-CakOW-G0.js} +1 -1
  51. package/src/assets/web-panel/assets/{P2P-CBy5t-Tk.js → P2P-Cf8CaOBZ.js} +2 -2
  52. package/src/assets/web-panel/assets/{PdhVaultBrowser--YWJNsu6.js → PdhVaultBrowser-Dc7b98W9.js} +3 -3
  53. package/src/assets/web-panel/assets/{Permissions-C2dZ8scb.js → Permissions-DGJyMEfS.js} +4 -4
  54. package/src/assets/web-panel/assets/{PersonalDataHub-Bs3l7Hlx.js → PersonalDataHub-DNIwSdwu.js} +6 -6
  55. package/src/assets/web-panel/assets/{Pipeline-DEBWbZuD.js → Pipeline-5B1S12wa.js} +1 -1
  56. package/src/assets/web-panel/assets/{Privacy-CjHBb6NU.js → Privacy-CMB6Ke5t.js} +1 -1
  57. package/src/assets/web-panel/assets/{ProjectInit-D2WipUz5.js → ProjectInit-D5PqTFiT.js} +2 -2
  58. package/src/assets/web-panel/assets/{ProjectSettings-B6WfnrGB.js → ProjectSettings-CbKNdSjV.js} +2 -2
  59. package/src/assets/web-panel/assets/Projects-ccXaHzYL.js +1 -0
  60. package/src/assets/web-panel/assets/{Providers-CCv5M_Dv.js → Providers-CJF5_-Gs.js} +1 -1
  61. package/src/assets/web-panel/assets/{QrScannerModal-CGthxU54.js → QrScannerModal-CT6iEAdi.js} +1 -1
  62. package/src/assets/web-panel/assets/{QuickAsk-CnPmXPFb.js → QuickAsk-Ci0h9mJ_.js} +1 -1
  63. package/src/assets/web-panel/assets/{Recommend-Df_tGEa9.js → Recommend-Da5mobZu.js} +1 -1
  64. package/src/assets/web-panel/assets/{RemoteSession-Z58N0Loe.js → RemoteSession-BaCY8eey.js} +2 -2
  65. package/src/assets/web-panel/assets/{Reputation-CZTBQ2Vt.js → Reputation-CaITfTsI.js} +1 -1
  66. package/src/assets/web-panel/assets/{Row-CdK3YpCQ.js → Row-DtUDamyP.js} +1 -1
  67. package/src/assets/web-panel/assets/{RssFeed-CFMVT5sb.js → RssFeed-DX27gFpg.js} +3 -3
  68. package/src/assets/web-panel/assets/{Search-DrF8RIvD.js → Search-DFL69osN.js} +1 -1
  69. package/src/assets/web-panel/assets/{Security-Ddk2f2DM.js → Security-BqGeoWv-.js} +3 -3
  70. package/src/assets/web-panel/assets/{Services-CCuK-VOo.js → Services-3z1WnEAc.js} +2 -2
  71. package/src/assets/web-panel/assets/{Skeleton-DxCpHzeM.js → Skeleton-C_OJQQ9Z.js} +1 -1
  72. package/src/assets/web-panel/assets/{Skills-t2oTDgcv.js → Skills-BY7aT6Mo.js} +1 -1
  73. package/src/assets/web-panel/assets/{Sla-Df63M9_R.js → Sla-BZv7DSaD.js} +1 -1
  74. package/src/assets/web-panel/assets/SpeechSettings-6lJKLhCn.js +1 -0
  75. package/src/assets/web-panel/assets/{SyncSettings-COd_tgPp.js → SyncSettings-B6D7STlI.js} +2 -2
  76. package/src/assets/web-panel/assets/{Tasks-CzDCcrik.js → Tasks-Co_FCZAO.js} +1 -1
  77. package/src/assets/web-panel/assets/{Templates-D-vfxTGA.js → Templates-CnY-9fgz.js} +1 -1
  78. package/src/assets/web-panel/assets/{Tenant-BlpT_Gxc.js → Tenant-B71yXfZ8.js} +1 -1
  79. package/src/assets/web-panel/assets/{Terminal-D5rq52Hg.js → Terminal-Dd_P7awo.js} +2 -2
  80. package/src/assets/web-panel/assets/{TimelineRenderer-DdoMndkK.js → TimelineRenderer-CvIEMyli.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tokens-BhgBsI6g.js → Tokens-DknFBGOi.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trigger-DwwzoikZ.js → Trigger-D_4nJONB.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trust-HkTpzXFb.js → Trust-BNl21fa7.js} +1 -1
  84. package/src/assets/web-panel/assets/{UkeySign-D9nk6Ehe.js → UkeySign-CFrCI7uK.js} +1 -1
  85. package/src/assets/web-panel/assets/{VideoEditing-BKk0rfoy.js → VideoEditing-BVfY6JLg.js} +1 -1
  86. package/src/assets/web-panel/assets/{Wallet-IVWIU_Lq.js → Wallet-Cj9CAK0J.js} +4 -4
  87. package/src/assets/web-panel/assets/{WebAuthn-CFTCpfsG.js → WebAuthn-DcqZlzA3.js} +4 -4
  88. package/src/assets/web-panel/assets/{WorkflowEditor-Dnf4Obif.js → WorkflowEditor-Dfr_dMld.js} +1 -1
  89. package/src/assets/web-panel/assets/{chat-D2snERdj.js → chat-Yv6UF0AD.js} +1 -1
  90. package/src/assets/web-panel/assets/{colors-DKEjK1N1.js → colors-CDW_-1fs.js} +1 -1
  91. package/src/assets/web-panel/assets/{compact-item-BEDLwQdt.js → compact-item-BYOQvd-6.js} +1 -1
  92. package/src/assets/web-panel/assets/{createContext-DA9iW1a0.js → createContext-BCGO0BiP.js} +1 -1
  93. package/src/assets/web-panel/assets/devWarning-H-kXSuf-.js +1 -0
  94. package/src/assets/web-panel/assets/{hasIn-5l2xEcY9.js → hasIn-DY-70cfQ.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-B7_W_rYd.js → index-366wfQBU.js} +1 -1
  96. package/src/assets/web-panel/assets/index-B0o4MeNK.js +1 -0
  97. package/src/assets/web-panel/assets/{index-CxEtQYdi.js → index-B9ZogJJM.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-B00GeekA.js → index-B9m5QAMg.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-C7sKbM5s.js → index-BBs2mv5M.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-CX1x4AFn.js → index-BFv1hzF6.js} +1 -1
  101. package/src/assets/web-panel/assets/index-BVafOL_I.js +1 -0
  102. package/src/assets/web-panel/assets/{index-DU2TXJu-.js → index-BXlEx4UH.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-e-e40id6.js → index-BayRTE5w.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-DXet1xol.js → index-Bb9nyts1.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-D7z4zB_a.js → index-Bf_Va0S-.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-fccZmC_h.js → index-Br3wQLVY.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-Bqc8tdIF.js → index-BvK4fjkk.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BO9dQjpt.js → index-C40UdtlS.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-Csfb-7hw.js → index-C4UJA2ju.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-Td8ZwyoC.js → index-CB_Iw73G.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-BZ5lY2zx.js → index-CCwWp3mT.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-DpqtbXdE.js → index-CFa2fPCk.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-NJieh3T1.js → index-CIyHxV4u.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-Dbkghqn_.js → index-CUP-A2_h.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-DqwPFbOb.js → index-CUo27q9J.js} +3 -3
  116. package/src/assets/web-panel/assets/{index-B4QYBliR.js → index-CaT8trvf.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-BgfImyZI.js → index-CnZNbcux.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-Dbd7eEex.js → index-Cy2NE6AO.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-CbTPvp2_.js → index-CzeEEazr.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-5pW4t1iD.js → index-D--TEyDj.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-Dg2a9owQ.js → index-DCtsjhhT.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-B_eCoZgW.js → index-DLOf7BSz.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-7P1b8HZo.js → index-DM5c4pc-.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-CRPrHE7h.js → index-DRFC2Qt0.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-Bq5P3piS.js → index-DT_qVaaV.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-CjWltbi_.js → index-DUDoRk9r.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-CkMKuqUs.js → index-Dg-AQYDf.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-DLoalqRX.js → index-DuIPq5MX.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-CGlotREA.js → index-NYVBUAVN.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-yYEQXYaU.js → index-NaCESahy.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-CmruhzFi.js → index-RjIMPG0u.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-fgYk0QXO.js → index-Y9akzgFO.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-DvV03Ayk.js → index-hZ0Eyrrw.js} +1 -1
  134. package/src/assets/web-panel/assets/{initDefaultProps-CPrcB1TC.js → initDefaultProps-CG99CcR4.js} +1 -1
  135. package/src/assets/web-panel/assets/{motion-BQ7mWRh_.js → motion-Z7MH0_0G.js} +1 -1
  136. package/src/assets/web-panel/assets/{move-CzOEq99p.js → move-BX67lOdq.js} +1 -1
  137. package/src/assets/web-panel/assets/{mtc-parser-BlQI5jrw.js → mtc-parser-CmAbG1fE.js} +1 -1
  138. package/src/assets/web-panel/assets/{omit-DlW4gxmv.js → omit-DiU5tI1_.js} +1 -1
  139. package/src/assets/web-panel/assets/{pickAttrs-BBYms5nP.js → pickAttrs-BGfvLrYL.js} +1 -1
  140. package/src/assets/web-panel/assets/{placementArrow-az2MPJ_7.js → placementArrow-CggLEgaJ.js} +1 -1
  141. package/src/assets/web-panel/assets/{responsiveObserve-D1-ibEol.js → responsiveObserve-t3nlghPZ.js} +1 -1
  142. package/src/assets/web-panel/assets/{slide-DHGqa4GA.js → slide-BkV4dL9s.js} +1 -1
  143. package/src/assets/web-panel/assets/{statusUtils-CYGDo6lD.js → statusUtils-qec1PUoC.js} +1 -1
  144. package/src/assets/web-panel/assets/{styleChecker-Cl2EM9K6.js → styleChecker-ChjX6T8D.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFlexGapSupport-DdYhzuv1.js → useFlexGapSupport-B1jLoZcM.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFs-DWumPuBW.js → useFs-C3X53s4E.js} +1 -1
  147. package/src/assets/web-panel/assets/{usePersonalDataHub-DxAO-Aqi.js → usePersonalDataHub-DOvbbnkZ.js} +1 -1
  148. package/src/assets/web-panel/assets/{vnode-CplsQf_N.js → vnode-Ie0TEVFT.js} +1 -1
  149. package/src/assets/web-panel/assets/{zoom-Cw5HXNSG.js → zoom-CRUMVS8l.js} +1 -1
  150. package/src/assets/web-panel/index.html +1 -1
  151. package/src/command-help-index.json +3 -3
  152. package/src/commands/agent.js +18 -1
  153. package/src/commands/evolution-benchmark.js +72 -0
  154. package/src/commands/evolution.js +2 -0
  155. package/src/commands/governed-skill-marketplace.js +142 -0
  156. package/src/commands/marketplace.js +4 -1
  157. package/src/commands/serve.js +41 -0
  158. package/src/commands/skill.js +3 -0
  159. package/src/data/changelog.json +39 -0
  160. package/src/gateways/ws/ws-agent-handler.js +59 -2
  161. package/src/gateways/ws/ws-server.js +2 -0
  162. package/src/harness/golden-transcript.js +1 -0
  163. package/src/harness/prompt-compressor.js +51 -5
  164. package/src/harness/provider-backed-compaction.js +28 -1
  165. package/src/harness/remote-session-registry.js +15 -3
  166. package/src/index.js +30 -4
  167. package/src/lazy-dispatch.js +15 -1
  168. package/src/lib/advisor-runtime.js +55 -2
  169. package/src/lib/app-server/cli-agent-kernel-adapter.js +4 -0
  170. package/src/lib/app-server/graph-runtime.js +32 -0
  171. package/src/lib/app-server/server.js +45 -1
  172. package/src/lib/app-server/websocket-transport.js +23 -0
  173. package/src/lib/autonomous-agent.js +63 -13
  174. package/src/lib/cowork/ab-comparator-cli.js +4 -3
  175. package/src/lib/cowork/debate-review-cli.js +4 -3
  176. package/src/lib/cowork/decision-kb-cli.js +5 -0
  177. package/src/lib/cowork-adapter.js +38 -16
  178. package/src/lib/evolution/agent-evolution-ingress.js +95 -15
  179. package/src/lib/evolution/agent-evolution-runtime-composition.js +82 -0
  180. package/src/lib/evolution/agent-evolution-session-lifecycle.js +46 -0
  181. package/src/lib/evolution/agent-model-projection.js +217 -0
  182. package/src/lib/evolution/bounded-descriptor-read.js +29 -0
  183. package/src/lib/evolution/controlled-skill-pilot-ledger-adapter.js +551 -0
  184. package/src/lib/evolution/controlled-skill-production-pilot.js +308 -18
  185. package/src/lib/evolution/evidence-backed-wiki-maintainer.js +10 -1
  186. package/src/lib/evolution/evidence-json-text.js +236 -0
  187. package/src/lib/evolution/evolution-artifact-ports.js +202 -21
  188. package/src/lib/evolution/evolution-deployment-loader.js +369 -0
  189. package/src/lib/evolution/evolution-eval-child-evidence-ledger-adapter.js +373 -0
  190. package/src/lib/evolution/evolution-eval-gate.js +14 -1
  191. package/src/lib/evolution/evolution-eval-process-supervisor-worker.mjs +14 -0
  192. package/src/lib/evolution/evolution-eval-process-supervisor.js +607 -0
  193. package/src/lib/evolution/evolution-evidence-artifact-adapter.js +14 -1
  194. package/src/lib/evolution/evolution-evidence-projector.js +240 -37
  195. package/src/lib/evolution/evolution-file-witness.js +153 -30
  196. package/src/lib/evolution/evolution-ledger-ports.js +1027 -66
  197. package/src/lib/evolution/evolution-ledger.js +66 -2
  198. package/src/lib/evolution/evolution-raw-crypto-shred.js +29 -15
  199. package/src/lib/evolution/evolution-raw-deletion-ledger-adapter.js +865 -0
  200. package/src/lib/evolution/evolution-release-train-domain-stages.js +769 -0
  201. package/src/lib/evolution/evolution-release-train-ledger-adapter.js +335 -0
  202. package/src/lib/evolution/evolution-release-train-stage-output-ledger-adapter.js +333 -0
  203. package/src/lib/evolution/evolution-release-train.js +586 -0
  204. package/src/lib/evolution/evolution-workbench-batch-executor.js +101 -144
  205. package/src/lib/evolution/evolution-workbench-control-ports.js +203 -0
  206. package/src/lib/evolution/evolution-workbench-file-resources.js +403 -0
  207. package/src/lib/evolution/evolution-workbench-projection.js +152 -25
  208. package/src/lib/evolution/evolution-workbench-registry-source.js +482 -0
  209. package/src/lib/evolution/evolution-workbench-review-ledger-adapter.js +823 -0
  210. package/src/lib/evolution/evolution-workbench-review-protocol.js +157 -0
  211. package/src/lib/evolution/evolution-workbench-rollback-authorization.js +57 -0
  212. package/src/lib/evolution/evolution-workbench-rollback-ledger-adapter.js +1016 -0
  213. package/src/lib/evolution/evolution-workbench-runtime.js +133 -0
  214. package/src/lib/evolution/evolution-workbench-version-control.js +70 -36
  215. package/src/lib/evolution/evolvable-artifact-ledger-adapter.js +736 -0
  216. package/src/lib/evolution/governed-knowledge-artifact-lifecycle.js +364 -0
  217. package/src/lib/evolution/governed-knowledge-candidate-rejection.js +343 -0
  218. package/src/lib/evolution/governed-knowledge-dependency-authority.js +227 -44
  219. package/src/lib/evolution/governed-knowledge-dependency-ledger-executor.js +95 -83
  220. package/src/lib/evolution/governed-knowledge-merge-ledger-executor.js +29 -2
  221. package/src/lib/evolution/governed-knowledge-merge-publisher-authority.js +31 -3
  222. package/src/lib/evolution/governed-knowledge-record.js +148 -0
  223. package/src/lib/evolution/governed-knowledge-revocation-record.js +135 -0
  224. package/src/lib/evolution/governed-knowledge-skill-rollback.js +475 -0
  225. package/src/lib/evolution/governed-knowledge-sync-ledger-adapter.js +92 -6
  226. package/src/lib/evolution/governed-knowledge-sync-merge-publisher.js +57 -4
  227. package/src/lib/evolution/governed-knowledge-sync.js +332 -99
  228. package/src/lib/evolution/governed-knowledge-wiki-tombstone.js +462 -0
  229. package/src/lib/evolution/governed-skill-marketplace-badge.js +208 -0
  230. package/src/lib/evolution/governed-skill-marketplace-candidate.js +330 -0
  231. package/src/lib/evolution/governed-skill-marketplace-cli-host.js +308 -0
  232. package/src/lib/evolution/governed-skill-marketplace-ledger-adapter.js +420 -0
  233. package/src/lib/evolution/governed-skill-marketplace.js +288 -5
  234. package/src/lib/evolution/governed-wiki-pruning-journal.js +302 -0
  235. package/src/lib/evolution/governed-wiki-pruning-ledger-adapter.js +459 -0
  236. package/src/lib/evolution/governed-wiki-pruning-maintenance.js +576 -0
  237. package/src/lib/evolution/governed-wiki-pruning-plan-authority.js +169 -0
  238. package/src/lib/evolution/governed-wiki-pruning-raw-shred.js +207 -0
  239. package/src/lib/evolution/governed-wiki-pruning-retrieval.js +587 -0
  240. package/src/lib/evolution/governed-wiki-pruning-runtime.js +153 -0
  241. package/src/lib/evolution/governed-wiki-pruning-skill-rollback.js +360 -0
  242. package/src/lib/evolution/governed-wiki-pruning.js +322 -143
  243. package/src/lib/evolution/independent-skill-revocation-source.js +231 -0
  244. package/src/lib/evolution/knowledge-wiki-source-admission.js +124 -0
  245. package/src/lib/evolution/knowledge-wiki-source-provenance.js +359 -0
  246. package/src/lib/evolution/progressive-canary-external-watchdog.js +578 -0
  247. package/src/lib/evolution/progressive-canary-traffic-worker.js +628 -0
  248. package/src/lib/evolution/progressive-canary-watchdog-file-store.js +285 -0
  249. package/src/lib/evolution/progressive-canary-watchdog-node-pki.js +265 -0
  250. package/src/lib/evolution/skill-candidate-registry.js +22 -0
  251. package/src/lib/evolution/skill-promotion-controller.js +25 -0
  252. package/src/lib/evolution/skill-promotion-review-ledger-adapter.js +100 -0
  253. package/src/lib/evolution/skill-registry-transition-ledger-adapter.js +131 -2
  254. package/src/lib/evolution/skill-release-registry.js +25 -4
  255. package/src/lib/evolution/skill-retrieval-revocation-authority.js +361 -0
  256. package/src/lib/evolution/skill-retrieval-revocation-ledger-adapter.js +346 -0
  257. package/src/lib/evolution/skill-revocation-propagation.js +467 -0
  258. package/src/lib/evolution/skill-target-matrix-eval.js +162 -11
  259. package/src/lib/evolution/skill-wiki-reconciliation.js +985 -0
  260. package/src/lib/evolution/skill-writer-inventory-manifest.js +15 -12
  261. package/src/lib/evolution/statistical-progressive-canary.js +845 -0
  262. package/src/lib/evolution/structured-memory-agent-control-plane.js +120 -0
  263. package/src/lib/evolution/structured-memory-authority-ledger-adapter.js +5 -1
  264. package/src/lib/evolution/structured-memory-promotion-receipt-writer.js +126 -0
  265. package/src/lib/evolution/wiki-informed-skill-proposer.js +127 -21
  266. package/src/lib/evolution/wiki-maintainer-ledger-adapter.js +760 -100
  267. package/src/lib/evolution/wiki-revision-protocol.js +120 -0
  268. package/src/lib/evolution/wiki-skill-proposal-ledger-adapter.js +307 -0
  269. package/src/lib/evolution/wiki-target-tombstone-revision.js +101 -0
  270. package/src/lib/evolution/wikiskill-benchmark-cli-host.js +178 -0
  271. package/src/lib/evolution/wikiskill-benchmark-execution-host.js +702 -0
  272. package/src/lib/evolution/wikiskill-benchmark-ledger-adapter.js +613 -0
  273. package/src/lib/evolution/wikiskill-benchmark.js +574 -0
  274. package/src/lib/goal-assess.js +17 -10
  275. package/src/lib/interactive-planner.js +9 -1
  276. package/src/lib/iteration-budget.js +16 -2
  277. package/src/lib/micro-compact.js +4 -1
  278. package/src/lib/model-failure-policy.js +21 -0
  279. package/src/lib/process-execution-broker/index.js +1 -0
  280. package/src/lib/process-execution-broker/windows-sandbox-helper.dll +0 -0
  281. package/src/lib/process-execution-broker/windows-sandbox-helper.exe +0 -0
  282. package/src/lib/process-execution-broker/windows-sandbox.cs +33 -15
  283. package/src/lib/read-file-page.js +191 -0
  284. package/src/lib/runnable-provider.js +2 -1
  285. package/src/lib/session-host-lease.js +11 -16
  286. package/src/lib/skill-retrieval-router.js +22 -1
  287. package/src/repl/agent-repl.js +127 -33
  288. package/src/runtime/agent-core.js +224 -80
  289. package/src/runtime/agent-runtime.js +43 -0
  290. package/src/runtime/coding-agent-contract-shared.cjs +7 -1
  291. package/src/runtime/fallback-model.js +143 -62
  292. package/src/runtime/headless-runner.js +54 -10
  293. package/src/runtime/headless-stream.js +53 -6
  294. package/src/runtime/runtime-factory.js +41 -2
  295. package/src/assets/web-panel/assets/Notes-CgU9DDo9.js +0 -7
  296. package/src/assets/web-panel/assets/OrderTableRenderer-CwHc15Zs.js +0 -1
  297. package/src/assets/web-panel/assets/Projects-FF_thRi6.js +0 -1
  298. package/src/assets/web-panel/assets/SpeechSettings-l7ox6KuX.js +0 -1
  299. package/src/assets/web-panel/assets/devWarning-DyhgpXPf.js +0 -1
  300. package/src/assets/web-panel/assets/index-Ck1jhFE0.js +0 -1
  301. package/src/assets/web-panel/assets/index-c8jJEHVs.js +0 -1
@@ -0,0 +1,702 @@
1
+ import { createHash } from "node:crypto";
2
+
3
+ import {
4
+ buildWikiSkillBenchmarkReport,
5
+ signWikiSkillBenchmarkReport,
6
+ verifyWikiSkillBenchmarkPlan,
7
+ } from "./wikiskill-benchmark.js";
8
+
9
+ export const WIKISKILL_BENCHMARK_EXECUTION_MANIFEST_SCHEMA =
10
+ "chainlesschain.wikiskill-benchmark-execution-manifest/v1";
11
+ export const WIKISKILL_BENCHMARK_DATASET_RESOLUTION_SCHEMA =
12
+ "chainlesschain.wikiskill-benchmark-dataset-resolution/v1";
13
+ export const WIKISKILL_BENCHMARK_RUNNER_RECEIPT_SCHEMA =
14
+ "chainlesschain.wikiskill-benchmark-runner-receipt/v1";
15
+ export const WIKISKILL_BENCHMARK_GRADER_RECEIPT_SCHEMA =
16
+ "chainlesschain.wikiskill-benchmark-grader-receipt/v1";
17
+ export const WIKISKILL_BENCHMARK_REPORT_ATTESTATION_SCHEMA =
18
+ "chainlesschain.wikiskill-benchmark-report-attestation/v1";
19
+
20
+ const DIGEST = /^sha256:[a-f0-9]{64}$/u;
21
+ const FAILURE_CLASSES = new Set([
22
+ "none",
23
+ "model",
24
+ "tool",
25
+ "provider",
26
+ "sandbox",
27
+ "permission",
28
+ "infrastructure",
29
+ "grader",
30
+ "unknown",
31
+ ]);
32
+ const DATASET_PROVIDERS = new WeakSet();
33
+ const RUNNER_PROVIDERS = new WeakSet();
34
+ const GRADER_PROVIDERS = new WeakSet();
35
+ const REPORT_ATTESTORS = new WeakSet();
36
+
37
+ function canonical(value) {
38
+ if (value === null || typeof value !== "object") return JSON.stringify(value);
39
+ if (Array.isArray(value)) return `[${value.map(canonical).join(",")}]`;
40
+ return `{${Object.keys(value)
41
+ .sort()
42
+ .map((key) => `${JSON.stringify(key)}:${canonical(value[key])}`)
43
+ .join(",")}}`;
44
+ }
45
+
46
+ function hash(domain, value) {
47
+ return `sha256:${createHash("sha256")
48
+ .update(domain)
49
+ .update("\0")
50
+ .update(canonical(value))
51
+ .digest("hex")}`;
52
+ }
53
+
54
+ function exact(value, keys, label) {
55
+ if (
56
+ !value ||
57
+ typeof value !== "object" ||
58
+ Array.isArray(value) ||
59
+ Object.keys(value).length !== keys.length ||
60
+ Object.keys(value).some((key) => !keys.includes(key))
61
+ ) {
62
+ throw new TypeError(`${label} has unexpected or missing fields`);
63
+ }
64
+ }
65
+
66
+ function text(value, label) {
67
+ if (typeof value !== "string" || value.trim() === "")
68
+ throw new TypeError(`${label} is required`);
69
+ return value;
70
+ }
71
+
72
+ function digest(value, label) {
73
+ if (!DIGEST.test(value ?? ""))
74
+ throw new TypeError(`${label} must be a sha256 digest`);
75
+ return value;
76
+ }
77
+
78
+ function integer(value, label) {
79
+ if (!Number.isSafeInteger(value) || value < 0)
80
+ throw new TypeError(`${label} must be a non-negative safe integer`);
81
+ return value;
82
+ }
83
+
84
+ function finite(value, label) {
85
+ if (!Number.isFinite(value) || value < 0)
86
+ throw new TypeError(`${label} must be finite and non-negative`);
87
+ return value;
88
+ }
89
+
90
+ function json(value, label, maxBytes = 1024 * 1024) {
91
+ let encoded;
92
+ let result;
93
+ try {
94
+ encoded = JSON.stringify(value);
95
+ result = JSON.parse(encoded);
96
+ } catch (cause) {
97
+ throw new TypeError(`${label} must be JSON data`, { cause });
98
+ }
99
+ if (!encoded || Buffer.byteLength(encoded) > maxBytes)
100
+ throw new TypeError(`${label} is outside its size bound`);
101
+ if (canonical(result) !== canonical(value))
102
+ throw new TypeError(`${label} contains non-JSON values`);
103
+ return Object.freeze(result);
104
+ }
105
+
106
+ function authorityDescriptor(value, label) {
107
+ exact(value, ["authorityId", "revision", "handlerArtifactDigest"], label);
108
+ return Object.freeze({
109
+ authorityId: text(value.authorityId, `${label}.authorityId`),
110
+ revision:
111
+ Number.isSafeInteger(value.revision) && value.revision >= 1
112
+ ? value.revision
113
+ : (() => {
114
+ throw new TypeError(`${label}.revision is invalid`);
115
+ })(),
116
+ handlerArtifactDigest: digest(
117
+ value.handlerArtifactDigest,
118
+ `${label}.handlerArtifactDigest`,
119
+ ),
120
+ });
121
+ }
122
+
123
+ function sameAuthority(left, right) {
124
+ return canonical(left) === canonical(right);
125
+ }
126
+
127
+ function receiptCore(value) {
128
+ return Object.fromEntries(
129
+ Object.entries(value).filter(
130
+ ([key]) => !["receiptDigest", "attestation"].includes(key),
131
+ ),
132
+ );
133
+ }
134
+
135
+ async function verifyReceipt({
136
+ value,
137
+ schema,
138
+ domain,
139
+ authority,
140
+ verifier,
141
+ label,
142
+ }) {
143
+ if (
144
+ value.schema !== schema ||
145
+ value.authenticated !== true ||
146
+ value.durable !== true ||
147
+ value.authorityId !== authority.authorityId ||
148
+ value.revision !== authority.revision ||
149
+ value.handlerArtifactDigest !== authority.handlerArtifactDigest
150
+ ) {
151
+ throw new Error(`${label} is not authenticated by its bound authority`);
152
+ }
153
+ const expectedDigest = hash(domain, receiptCore(value));
154
+ if (value.receiptDigest !== expectedDigest)
155
+ throw new Error(`${label} digest mismatch`);
156
+ if (
157
+ (await verifier({
158
+ digest: expectedDigest,
159
+ attestation: value.attestation,
160
+ authority,
161
+ })) !== true
162
+ ) {
163
+ throw new Error(`${label} attestation rejected`);
164
+ }
165
+ }
166
+
167
+ export function createWikiSkillBenchmarkExecutionManifest(input = {}) {
168
+ exact(
169
+ input,
170
+ [
171
+ "datasetProvider",
172
+ "runner",
173
+ "grader",
174
+ "reportAttestor",
175
+ "targetEnvironmentDigest",
176
+ ],
177
+ "benchmark execution manifest",
178
+ );
179
+ const core = {
180
+ schema: WIKISKILL_BENCHMARK_EXECUTION_MANIFEST_SCHEMA,
181
+ datasetProvider: authorityDescriptor(
182
+ input.datasetProvider,
183
+ "datasetProvider",
184
+ ),
185
+ runner: authorityDescriptor(input.runner, "runner"),
186
+ grader: authorityDescriptor(input.grader, "grader"),
187
+ reportAttestor: authorityDescriptor(input.reportAttestor, "reportAttestor"),
188
+ targetEnvironmentDigest: digest(
189
+ input.targetEnvironmentDigest,
190
+ "targetEnvironmentDigest",
191
+ ),
192
+ };
193
+ return Object.freeze({
194
+ ...core,
195
+ manifestDigest: hash(WIKISKILL_BENCHMARK_EXECUTION_MANIFEST_SCHEMA, core),
196
+ });
197
+ }
198
+
199
+ export function verifyWikiSkillBenchmarkExecutionManifest(value) {
200
+ exact(
201
+ value,
202
+ [
203
+ "schema",
204
+ "datasetProvider",
205
+ "runner",
206
+ "grader",
207
+ "reportAttestor",
208
+ "targetEnvironmentDigest",
209
+ "manifestDigest",
210
+ ],
211
+ "benchmark execution manifest",
212
+ );
213
+ if (value.schema !== WIKISKILL_BENCHMARK_EXECUTION_MANIFEST_SCHEMA)
214
+ throw new TypeError("benchmark execution manifest schema is invalid");
215
+ const recreated = createWikiSkillBenchmarkExecutionManifest({
216
+ datasetProvider: value.datasetProvider,
217
+ runner: value.runner,
218
+ grader: value.grader,
219
+ reportAttestor: value.reportAttestor,
220
+ targetEnvironmentDigest: value.targetEnvironmentDigest,
221
+ });
222
+ if (canonical(recreated) !== canonical(value))
223
+ throw new Error("benchmark execution manifest digest mismatch");
224
+ return recreated;
225
+ }
226
+
227
+ export function verifyWikiSkillBenchmarkExecutionBinding({
228
+ plan: planInput,
229
+ executionManifest: manifestInput,
230
+ } = {}) {
231
+ const plan = verifyWikiSkillBenchmarkPlan(planInput);
232
+ const executionManifest =
233
+ verifyWikiSkillBenchmarkExecutionManifest(manifestInput);
234
+ if (
235
+ plan.executionManifestDigest !== executionManifest.manifestDigest ||
236
+ plan.runnerDigest !== executionManifest.runner.handlerArtifactDigest ||
237
+ hash(
238
+ "chainlesschain.wikiskill-benchmark-target-environment/v1",
239
+ plan.environment,
240
+ ) !== executionManifest.targetEnvironmentDigest
241
+ ) {
242
+ throw new Error("benchmark plan is not bound to its execution manifest");
243
+ }
244
+ return Object.freeze({ plan, executionManifest });
245
+ }
246
+
247
+ function createProvider({
248
+ descriptor: input,
249
+ method,
250
+ handler,
251
+ verifyAttestation,
252
+ instances,
253
+ label,
254
+ }) {
255
+ const descriptor = authorityDescriptor(input, `${label} descriptor`);
256
+ if (typeof handler !== "function")
257
+ throw new TypeError(`${label} handler is required`);
258
+ if (typeof verifyAttestation !== "function")
259
+ throw new TypeError(`${label} receipt verifier is required`);
260
+ const provider = {
261
+ descriptor,
262
+ [method]: handler,
263
+ verifyAttestation,
264
+ };
265
+ instances.add(provider);
266
+ return Object.freeze(provider);
267
+ }
268
+
269
+ export function createWikiSkillBenchmarkDatasetProvider(options = {}) {
270
+ return createProvider({
271
+ descriptor: options.descriptor,
272
+ method: "load",
273
+ handler: options.load,
274
+ verifyAttestation: options.verifyAttestation,
275
+ instances: DATASET_PROVIDERS,
276
+ label: "dataset provider",
277
+ });
278
+ }
279
+
280
+ export function createWikiSkillBenchmarkRunner(options = {}) {
281
+ return createProvider({
282
+ descriptor: options.descriptor,
283
+ method: "run",
284
+ handler: options.run,
285
+ verifyAttestation: options.verifyAttestation,
286
+ instances: RUNNER_PROVIDERS,
287
+ label: "benchmark runner",
288
+ });
289
+ }
290
+
291
+ export function createWikiSkillBenchmarkGrader(options = {}) {
292
+ return createProvider({
293
+ descriptor: options.descriptor,
294
+ method: "grade",
295
+ handler: options.grade,
296
+ verifyAttestation: options.verifyAttestation,
297
+ instances: GRADER_PROVIDERS,
298
+ label: "benchmark grader",
299
+ });
300
+ }
301
+
302
+ export function createWikiSkillBenchmarkReportAttestor(options = {}) {
303
+ return createProvider({
304
+ descriptor: options.descriptor,
305
+ method: "attest",
306
+ handler: options.attest,
307
+ verifyAttestation: options.verifyAttestation,
308
+ instances: REPORT_ATTESTORS,
309
+ label: "benchmark report attestor",
310
+ });
311
+ }
312
+
313
+ export function isWikiSkillBenchmarkDatasetProvider(value) {
314
+ return Boolean(value && DATASET_PROVIDERS.has(value));
315
+ }
316
+
317
+ export function isWikiSkillBenchmarkRunner(value) {
318
+ return Boolean(value && RUNNER_PROVIDERS.has(value));
319
+ }
320
+
321
+ export function isWikiSkillBenchmarkGrader(value) {
322
+ return Boolean(value && GRADER_PROVIDERS.has(value));
323
+ }
324
+
325
+ export function isWikiSkillBenchmarkReportAttestor(value) {
326
+ return Boolean(value && REPORT_ATTESTORS.has(value));
327
+ }
328
+
329
+ function captureProvider(value, instances, method, label) {
330
+ if (!value || !instances.has(value))
331
+ throw new TypeError(`a branded ${label} is required`);
332
+ return Object.freeze({
333
+ descriptor: value.descriptor,
334
+ invoke: value[method].bind(value),
335
+ verify: value.verifyAttestation.bind(value),
336
+ });
337
+ }
338
+
339
+ async function loadDataset(provider, plan, dataset) {
340
+ const request = Object.freeze({
341
+ planDigest: plan.planDigest,
342
+ datasetId: dataset.id,
343
+ version: dataset.version,
344
+ datasetDigest: dataset.digest,
345
+ splitDigest: dataset.splitDigest,
346
+ });
347
+ const requestDigest = hash(
348
+ "chainlesschain.wikiskill-benchmark-dataset-request/v1",
349
+ request,
350
+ );
351
+ const value = await provider.invoke({ ...request, requestDigest });
352
+ exact(
353
+ value,
354
+ [
355
+ "schema",
356
+ "authenticated",
357
+ "durable",
358
+ "authorityId",
359
+ "revision",
360
+ "handlerArtifactDigest",
361
+ "requestDigest",
362
+ "datasetId",
363
+ "version",
364
+ "datasetDigest",
365
+ "splitDigest",
366
+ "cases",
367
+ "receiptDigest",
368
+ "attestation",
369
+ ],
370
+ "dataset resolution",
371
+ );
372
+ if (
373
+ value.requestDigest !== requestDigest ||
374
+ value.datasetId !== dataset.id ||
375
+ value.version !== dataset.version ||
376
+ value.datasetDigest !== dataset.digest ||
377
+ value.splitDigest !== dataset.splitDigest ||
378
+ !Array.isArray(value.cases) ||
379
+ value.cases.length !== dataset.splitIds.length
380
+ ) {
381
+ throw new Error("dataset resolution differs from the benchmark plan");
382
+ }
383
+ const seen = new Set();
384
+ const cases = value.cases.map((entry, index) => {
385
+ exact(entry, ["splitId", "input", "inputDigest"], `dataset case ${index}`);
386
+ if (!dataset.splitIds.includes(entry.splitId) || seen.has(entry.splitId))
387
+ throw new Error("dataset resolution has an absent or duplicate split");
388
+ seen.add(entry.splitId);
389
+ const input = json(entry.input, `dataset case ${index} input`);
390
+ const inputDigest = hash(
391
+ "chainlesschain.wikiskill-benchmark-input/v1",
392
+ input,
393
+ );
394
+ if (entry.inputDigest !== inputDigest)
395
+ throw new Error("dataset input digest mismatch");
396
+ return Object.freeze({ splitId: entry.splitId, input, inputDigest });
397
+ });
398
+ await verifyReceipt({
399
+ value,
400
+ schema: WIKISKILL_BENCHMARK_DATASET_RESOLUTION_SCHEMA,
401
+ domain: WIKISKILL_BENCHMARK_DATASET_RESOLUTION_SCHEMA,
402
+ authority: provider.descriptor,
403
+ verifier: provider.verify,
404
+ label: "dataset resolution",
405
+ });
406
+ return { cases, receiptDigest: value.receiptDigest };
407
+ }
408
+
409
+ async function runArm({
410
+ runner,
411
+ grader,
412
+ plan,
413
+ manifest,
414
+ dataset,
415
+ datasetReceiptDigest,
416
+ item,
417
+ seed,
418
+ arm,
419
+ }) {
420
+ const request = {
421
+ planDigest: plan.planDigest,
422
+ executionManifestDigest: manifest.manifestDigest,
423
+ environmentDigest: manifest.targetEnvironmentDigest,
424
+ seed,
425
+ datasetId: dataset.id,
426
+ datasetDigest: dataset.digest,
427
+ datasetReceiptDigest,
428
+ splitId: item.splitId,
429
+ input: item.input,
430
+ inputDigest: item.inputDigest,
431
+ arm,
432
+ skillDigest: arm === "skill" ? plan.skillDigest : null,
433
+ wikiDigest: arm === "skill" ? plan.wikiDigest : null,
434
+ model: plan.model,
435
+ inference: plan.inference,
436
+ environment: plan.environment,
437
+ toolDigest: plan.toolDigest,
438
+ apiDigest: plan.apiDigest,
439
+ promptDigest: plan.promptDigest,
440
+ };
441
+ const requestDigest = hash(
442
+ "chainlesschain.wikiskill-benchmark-runner-request/v1",
443
+ request,
444
+ );
445
+ const result = await runner.invoke(
446
+ Object.freeze({ ...request, requestDigest }),
447
+ );
448
+ exact(
449
+ result,
450
+ [
451
+ "schema",
452
+ "authenticated",
453
+ "durable",
454
+ "authorityId",
455
+ "revision",
456
+ "handlerArtifactDigest",
457
+ "requestDigest",
458
+ "outputRef",
459
+ "outputDigest",
460
+ "traceDigest",
461
+ "failureClass",
462
+ "tokens",
463
+ "cost",
464
+ "latencyMs",
465
+ "receiptDigest",
466
+ "attestation",
467
+ ],
468
+ "runner receipt",
469
+ );
470
+ if (
471
+ result.requestDigest !== requestDigest ||
472
+ !FAILURE_CLASSES.has(result.failureClass)
473
+ ) {
474
+ throw new Error("runner receipt differs from its request");
475
+ }
476
+ text(result.outputRef, "runner outputRef");
477
+ digest(result.outputDigest, "runner outputDigest");
478
+ digest(result.traceDigest, "runner traceDigest");
479
+ integer(result.tokens, "runner tokens");
480
+ finite(result.cost, "runner cost");
481
+ finite(result.latencyMs, "runner latencyMs");
482
+ await verifyReceipt({
483
+ value: result,
484
+ schema: WIKISKILL_BENCHMARK_RUNNER_RECEIPT_SCHEMA,
485
+ domain: WIKISKILL_BENCHMARK_RUNNER_RECEIPT_SCHEMA,
486
+ authority: runner.descriptor,
487
+ verifier: runner.verify,
488
+ label: "runner receipt",
489
+ });
490
+
491
+ const gradeRequest = {
492
+ planDigest: plan.planDigest,
493
+ executionManifestDigest: manifest.manifestDigest,
494
+ datasetId: dataset.id,
495
+ datasetDigest: dataset.digest,
496
+ splitId: item.splitId,
497
+ inputDigest: item.inputDigest,
498
+ seed,
499
+ arm,
500
+ runnerReceiptDigest: result.receiptDigest,
501
+ outputRef: result.outputRef,
502
+ outputDigest: result.outputDigest,
503
+ traceDigest: result.traceDigest,
504
+ };
505
+ const gradeRequestDigest = hash(
506
+ "chainlesschain.wikiskill-benchmark-grader-request/v1",
507
+ gradeRequest,
508
+ );
509
+ const grade = await grader.invoke(
510
+ Object.freeze({ ...gradeRequest, requestDigest: gradeRequestDigest }),
511
+ );
512
+ exact(
513
+ grade,
514
+ [
515
+ "schema",
516
+ "authenticated",
517
+ "durable",
518
+ "authorityId",
519
+ "revision",
520
+ "handlerArtifactDigest",
521
+ "requestDigest",
522
+ "score",
523
+ "receiptDigest",
524
+ "attestation",
525
+ ],
526
+ "grader receipt",
527
+ );
528
+ if (
529
+ grade.requestDigest !== gradeRequestDigest ||
530
+ !Number.isFinite(grade.score) ||
531
+ grade.score < 0 ||
532
+ grade.score > 1
533
+ ) {
534
+ throw new Error("grader receipt differs from its request");
535
+ }
536
+ await verifyReceipt({
537
+ value: grade,
538
+ schema: WIKISKILL_BENCHMARK_GRADER_RECEIPT_SCHEMA,
539
+ domain: WIKISKILL_BENCHMARK_GRADER_RECEIPT_SCHEMA,
540
+ authority: grader.descriptor,
541
+ verifier: grader.verify,
542
+ label: "grader receipt",
543
+ });
544
+ return Object.freeze({
545
+ score: grade.score,
546
+ traceDigest: result.traceDigest,
547
+ graderReceiptDigest: grade.receiptDigest,
548
+ failureClass: result.failureClass,
549
+ tokens: result.tokens,
550
+ cost: result.cost,
551
+ latencyMs: result.latencyMs,
552
+ });
553
+ }
554
+
555
+ export async function executeWikiSkillBenchmarkProduction({
556
+ plan: planInput,
557
+ executionManifest: manifestInput,
558
+ datasetProvider,
559
+ runner,
560
+ grader,
561
+ reportAttestor,
562
+ } = {}) {
563
+ const { plan, executionManifest: manifest } =
564
+ verifyWikiSkillBenchmarkExecutionBinding({
565
+ plan: planInput,
566
+ executionManifest: manifestInput,
567
+ });
568
+ const datasets = captureProvider(
569
+ datasetProvider,
570
+ DATASET_PROVIDERS,
571
+ "load",
572
+ "benchmark dataset provider",
573
+ );
574
+ const targetRunner = captureProvider(
575
+ runner,
576
+ RUNNER_PROVIDERS,
577
+ "run",
578
+ "benchmark runner",
579
+ );
580
+ const independentGrader = captureProvider(
581
+ grader,
582
+ GRADER_PROVIDERS,
583
+ "grade",
584
+ "benchmark grader",
585
+ );
586
+ const attestor = captureProvider(
587
+ reportAttestor,
588
+ REPORT_ATTESTORS,
589
+ "attest",
590
+ "benchmark report attestor",
591
+ );
592
+ for (const [actual, expected, label] of [
593
+ [datasets.descriptor, manifest.datasetProvider, "dataset provider"],
594
+ [targetRunner.descriptor, manifest.runner, "runner"],
595
+ [independentGrader.descriptor, manifest.grader, "grader"],
596
+ [attestor.descriptor, manifest.reportAttestor, "report attestor"],
597
+ ]) {
598
+ if (!sameAuthority(actual, expected))
599
+ throw new Error(`${label} differs from the execution manifest`);
600
+ }
601
+
602
+ const loaded = new Map();
603
+ for (const dataset of plan.datasets) {
604
+ loaded.set(dataset.id, await loadDataset(datasets, plan, dataset));
605
+ }
606
+ const runs = [];
607
+ for (const seed of plan.seedSchedule) {
608
+ const cases = [];
609
+ for (const dataset of plan.datasets) {
610
+ const resolved = loaded.get(dataset.id);
611
+ for (const splitId of dataset.splitIds) {
612
+ const item = resolved.cases.find((entry) => entry.splitId === splitId);
613
+ const baseline = await runArm({
614
+ runner: targetRunner,
615
+ grader: independentGrader,
616
+ plan,
617
+ manifest,
618
+ dataset,
619
+ datasetReceiptDigest: resolved.receiptDigest,
620
+ item,
621
+ seed,
622
+ arm: "no-skill",
623
+ });
624
+ const skill = await runArm({
625
+ runner: targetRunner,
626
+ grader: independentGrader,
627
+ plan,
628
+ manifest,
629
+ dataset,
630
+ datasetReceiptDigest: resolved.receiptDigest,
631
+ item,
632
+ seed,
633
+ arm: "skill",
634
+ });
635
+ cases.push({ datasetId: dataset.id, splitId, baseline, skill });
636
+ }
637
+ }
638
+ runs.push({
639
+ runId: hash("chainlesschain.wikiskill-benchmark-production-run/v1", {
640
+ planDigest: plan.planDigest,
641
+ executionManifestDigest: manifest.manifestDigest,
642
+ seed,
643
+ }),
644
+ seed,
645
+ cases,
646
+ });
647
+ }
648
+ const report = buildWikiSkillBenchmarkReport({ plan, runs });
649
+ const envelope = await signWikiSkillBenchmarkReport({
650
+ report,
651
+ attestor: async (reportDigest) => {
652
+ const value = await attestor.invoke({
653
+ reportDigest,
654
+ planDigest: plan.planDigest,
655
+ executionManifestDigest: manifest.manifestDigest,
656
+ });
657
+ exact(
658
+ value,
659
+ [
660
+ "schema",
661
+ "authorityId",
662
+ "revision",
663
+ "handlerArtifactDigest",
664
+ "reportDigest",
665
+ "planDigest",
666
+ "executionManifestDigest",
667
+ "issuedAt",
668
+ "signature",
669
+ ],
670
+ "benchmark report attestation",
671
+ );
672
+ if (
673
+ value.schema !== WIKISKILL_BENCHMARK_REPORT_ATTESTATION_SCHEMA ||
674
+ value.reportDigest !== reportDigest ||
675
+ value.planDigest !== plan.planDigest ||
676
+ value.executionManifestDigest !== manifest.manifestDigest ||
677
+ !sameAuthority(
678
+ {
679
+ authorityId: value.authorityId,
680
+ revision: value.revision,
681
+ handlerArtifactDigest: value.handlerArtifactDigest,
682
+ },
683
+ attestor.descriptor,
684
+ ) ||
685
+ !Number.isFinite(Date.parse(value.issuedAt ?? "")) ||
686
+ typeof value.signature !== "string" ||
687
+ value.signature.length < 32 ||
688
+ (await attestor.verify({
689
+ digest: reportDigest,
690
+ attestation: value,
691
+ authority: attestor.descriptor,
692
+ })) !== true
693
+ ) {
694
+ throw new Error("benchmark report attestation rejected");
695
+ }
696
+ return value;
697
+ },
698
+ });
699
+ return Object.freeze({ report, envelope });
700
+ }
701
+
702
+ export const computeWikiSkillBenchmarkExecutionDigest = hash;