chainlesschain 0.166.16 → 0.166.18

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 (223) hide show
  1. package/README.md +17 -10
  2. package/completions/_cc +1 -1
  3. package/completions/cc.bash +1 -1
  4. package/completions/cc.fish +1 -1
  5. package/completions/cc.ps1 +1 -1
  6. package/package.json +2 -2
  7. package/src/assets/web-panel/assets/{AIOps-CTxa2Wbq.js → AIOps-CQSBl3hY.js} +1 -1
  8. package/src/assets/web-panel/assets/{ActionButton-DHrQyYhy.js → ActionButton-IQt-vRLt.js} +1 -1
  9. package/src/assets/web-panel/assets/{Analytics-DQiUqcNl.js → Analytics-DkHC8O7k.js} +3 -3
  10. package/src/assets/web-panel/assets/{AppLayout-_Iz4r6wt.js → AppLayout-CSti2P2T.js} +5 -5
  11. package/src/assets/web-panel/assets/{Artifacts-BNs63YHo.js → Artifacts-C57hxn3v.js} +1 -1
  12. package/src/assets/web-panel/assets/{Audit-BgHIqRLn.js → Audit-DByLntcf.js} +1 -1
  13. package/src/assets/web-panel/assets/{BackgroundAgents-DUQ5axBB.js → BackgroundAgents-D1Bd2EOa.js} +1 -1
  14. package/src/assets/web-panel/assets/{Backup-CJ51E9Vw.js → Backup-VstHzHng.js} +1 -1
  15. package/src/assets/web-panel/assets/{BaseInput-o-5toA_R.js → BaseInput-CLhdexIf.js} +1 -1
  16. package/src/assets/web-panel/assets/{Chat-Cu7a-x1L.js → Chat-BefC_JZS.js} +6 -6
  17. package/src/assets/web-panel/assets/{ChatBubbleRenderer-BUyYkAXr.js → ChatBubbleRenderer-DbXMvgmn.js} +1 -1
  18. package/src/assets/web-panel/assets/{Checkbox-DwdmZ71L.js → Checkbox-CEY982vx.js} +1 -1
  19. package/src/assets/web-panel/assets/{Codegen-BrH2eYiP.js → Codegen-Dcm_DTvJ.js} +1 -1
  20. package/src/assets/web-panel/assets/{Col-BVJQEP2j.js → Col-C8SSu4KA.js} +1 -1
  21. package/src/assets/web-panel/assets/{Community-FGO3vZPq.js → Community-BVV9vwRR.js} +1 -1
  22. package/src/assets/web-panel/assets/{Compact-DYGAFVnT.js → Compact-B7c5Vo18.js} +1 -1
  23. package/src/assets/web-panel/assets/{Compliance-CRvc8Bdt.js → Compliance-Tq9jSZ5a.js} +1 -1
  24. package/src/assets/web-panel/assets/{Cowork-D6Ah2m7A.js → Cowork-BJUjT09Q.js} +3 -3
  25. package/src/assets/web-panel/assets/{Cron-AXbU2ifR.js → Cron-CjV9PEaS.js} +2 -2
  26. package/src/assets/web-panel/assets/{Crosschain-C5DXgEFd.js → Crosschain-Dl7ReL8F.js} +1 -1
  27. package/src/assets/web-panel/assets/{DID-Bxh9QV9v.js → DID-CG8PjWmM.js} +2 -2
  28. package/src/assets/web-panel/assets/{Dashboard-B-ZHEta-.js → Dashboard-CDBM6wmF.js} +2 -2
  29. package/src/assets/web-panel/assets/{Dropdown-66Ik1jqa.js → Dropdown-8_55bXTD.js} +1 -1
  30. package/src/assets/web-panel/assets/{EmailListRenderer-CCWk1BIM.js → EmailListRenderer-D3qOU1Cm.js} +1 -1
  31. package/src/assets/web-panel/assets/{FamilyGuardDashboard--9faIULK.js → FamilyGuardDashboard-Bv5oWMZF.js} +1 -1
  32. package/src/assets/web-panel/assets/{Federation-CejW9CgX.js → Federation-hpZ1xkKd.js} +1 -1
  33. package/src/assets/web-panel/assets/{FormItemContext-acHgcXki.js → FormItemContext-BN7GT191.js} +1 -1
  34. package/src/assets/web-panel/assets/{GenericCardRenderer-D2ghd_K4.js → GenericCardRenderer-PCRhfA7M.js} +1 -1
  35. package/src/assets/web-panel/assets/{Git-BOe1YJrV.js → Git-CIlP2vy7.js} +2 -2
  36. package/src/assets/web-panel/assets/{Governance-BjgzJsof.js → Governance-81lgm7YL.js} +1 -1
  37. package/src/assets/web-panel/assets/{Inference-CXCD5rnP.js → Inference-Cs24xMOV.js} +1 -1
  38. package/src/assets/web-panel/assets/{KnowledgeGraph-CHA8QgJT.js → KnowledgeGraph-CrJLVCZo.js} +1 -1
  39. package/src/assets/web-panel/assets/{Logs-DORPMcL6.js → Logs-DLyO8RKT.js} +2 -2
  40. package/src/assets/web-panel/assets/{MarkdownRenderer-CPPHz01z.js → MarkdownRenderer-DBOqijrP.js} +1 -1
  41. package/src/assets/web-panel/assets/{Marketplace-BCFlo1Yx.js → Marketplace-Dz7AbQZc.js} +1 -1
  42. package/src/assets/web-panel/assets/{McpTools-Dl_uZAKh.js → McpTools-BM0aFiWv.js} +3 -3
  43. package/src/assets/web-panel/assets/{Memory-DupHamwz.js → Memory-C9SJzENX.js} +2 -2
  44. package/src/assets/web-panel/assets/{MobileBridge-BRSMPJxW.js → MobileBridge-BO2HnNRk.js} +1 -1
  45. package/src/assets/web-panel/assets/{MobileProjects-BHpuzsDl.js → MobileProjects-CK_jMz0l.js} +1 -1
  46. package/src/assets/web-panel/assets/{Mtc-Ch0jOQfZ.js → Mtc-CfhrJsdO.js} +2 -2
  47. package/src/assets/web-panel/assets/{MtcAudit-qzwQrDi7.js → MtcAudit-BE2ELxgI.js} +4 -4
  48. package/src/assets/web-panel/assets/{Multisig-B5wHzUcm.js → Multisig-CgR_E3Jd.js} +3 -3
  49. package/src/assets/web-panel/assets/{NLProgramming-Hy9uAiA0.js → NLProgramming-Cw9445_K.js} +1 -1
  50. package/src/assets/web-panel/assets/{Notes-DkuchMC7.js → Notes-DZimkTrb.js} +3 -3
  51. package/src/assets/web-panel/assets/{NotificationSettings-CYZhD7Pi.js → NotificationSettings-DxHVh4uT.js} +1 -1
  52. package/src/assets/web-panel/assets/{OrderTableRenderer-DKOoqajt.js → OrderTableRenderer-Iy-pnX56.js} +1 -1
  53. package/src/assets/web-panel/assets/{Organization-D9AXn6j8.js → Organization-pPXJtWo4.js} +4 -4
  54. package/src/assets/web-panel/assets/{Overflow-Bg15J6hX.js → Overflow-YamdTJwA.js} +1 -1
  55. package/src/assets/web-panel/assets/{P2P--B54HoQn.js → P2P-BvqP53x7.js} +2 -2
  56. package/src/assets/web-panel/assets/{PdhVaultBrowser-Cz9Kk2Nb.js → PdhVaultBrowser-Blz1Xn2n.js} +3 -3
  57. package/src/assets/web-panel/assets/{Permissions-DHx38eS1.js → Permissions-CgFRQqFJ.js} +4 -4
  58. package/src/assets/web-panel/assets/{PersonalDataHub-Dw8i2hAs.js → PersonalDataHub-CFeo3-6O.js} +4 -4
  59. package/src/assets/web-panel/assets/{Pipeline-B2o6Ur2G.js → Pipeline-BkaRojEK.js} +1 -1
  60. package/src/assets/web-panel/assets/{Privacy-8g-h2fnu.js → Privacy-BNZEx2Qp.js} +1 -1
  61. package/src/assets/web-panel/assets/{ProjectInit-DuVTcINx.js → ProjectInit-HUBOgEEK.js} +2 -2
  62. package/src/assets/web-panel/assets/{ProjectSettings-C8njvdZX.js → ProjectSettings-CFMmhROS.js} +2 -2
  63. package/src/assets/web-panel/assets/Projects-Dc517BXp.js +1 -0
  64. package/src/assets/web-panel/assets/{Providers-wFqgod_W.js → Providers-DTLf8bgj.js} +1 -1
  65. package/src/assets/web-panel/assets/{QrScannerModal-9NCXrpmA.js → QrScannerModal-BBNjPszk.js} +1 -1
  66. package/src/assets/web-panel/assets/{QuickAsk-WUTNvFkY.js → QuickAsk-DCsHvk3G.js} +1 -1
  67. package/src/assets/web-panel/assets/{Recommend-xT4nYmju.js → Recommend-Dpr5YSop.js} +1 -1
  68. package/src/assets/web-panel/assets/{RemoteSession-fak1PBGC.js → RemoteSession-DmKnvqGg.js} +2 -2
  69. package/src/assets/web-panel/assets/{Reputation-D1AkQvD-.js → Reputation-CSRfuurX.js} +1 -1
  70. package/src/assets/web-panel/assets/{Row-DVfm6xGt.js → Row-CDj3pQ_w.js} +1 -1
  71. package/src/assets/web-panel/assets/{RssFeed-BDunoLSE.js → RssFeed-DI0a_kNq.js} +2 -2
  72. package/src/assets/web-panel/assets/{Search-OPycRoU3.js → Search-jAy7B2nU.js} +1 -1
  73. package/src/assets/web-panel/assets/{Security-C8-Fm3Dt.js → Security-CkHTqYhc.js} +4 -4
  74. package/src/assets/web-panel/assets/{Services-qM_sMpMl.js → Services-CP-0Nzga.js} +2 -2
  75. package/src/assets/web-panel/assets/{Skeleton-D3HBJjVF.js → Skeleton-BkF5-p3n.js} +1 -1
  76. package/src/assets/web-panel/assets/{Skills-jr67X-tP.js → Skills-BDu-utDE.js} +1 -1
  77. package/src/assets/web-panel/assets/{Sla-CS3ggyCg.js → Sla-CQvq_2Qb.js} +1 -1
  78. package/src/assets/web-panel/assets/{SpeechSettings-CTOCYxOi.js → SpeechSettings-T7Ap512g.js} +1 -1
  79. package/src/assets/web-panel/assets/{SyncSettings-D3s3cLT5.js → SyncSettings-Bt-PLvot.js} +2 -2
  80. package/src/assets/web-panel/assets/{Tasks-CdfoJ25m.js → Tasks-yLEcCogg.js} +1 -1
  81. package/src/assets/web-panel/assets/{Templates-Drb4AI8X.js → Templates-ByN3fmbr.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tenant-DzwR3Qkz.js → Tenant-DBI7hITH.js} +1 -1
  83. package/src/assets/web-panel/assets/{Terminal-D-ESq7xp.js → Terminal-B77_DlGX.js} +2 -2
  84. package/src/assets/web-panel/assets/{TimelineRenderer-BK-AUuws.js → TimelineRenderer-CsLTB_QO.js} +1 -1
  85. package/src/assets/web-panel/assets/{Tokens-xGTouuNp.js → Tokens-BV2N6cR8.js} +1 -1
  86. package/src/assets/web-panel/assets/{Trigger-BvZj-v2H.js → Trigger-CjXWGH3p.js} +1 -1
  87. package/src/assets/web-panel/assets/{Trust-BLC9CGmc.js → Trust-uqXIq3WC.js} +1 -1
  88. package/src/assets/web-panel/assets/{UkeySign-BSuCXpmE.js → UkeySign-D-6qu4vY.js} +1 -1
  89. package/src/assets/web-panel/assets/{VideoEditing-DT3A-_Ql.js → VideoEditing-CxGmx_2e.js} +1 -1
  90. package/src/assets/web-panel/assets/{Wallet-c1OXao85.js → Wallet-DSq7WlAg.js} +4 -4
  91. package/src/assets/web-panel/assets/{WebAuthn-CuA-F7KJ.js → WebAuthn-CDBiD57O.js} +2 -2
  92. package/src/assets/web-panel/assets/{WorkflowEditor-MANZrf82.js → WorkflowEditor-Z8f63TSb.js} +1 -1
  93. package/src/assets/web-panel/assets/{chat-D4Y4Ey0O.js → chat-B-UZFBjy.js} +1 -1
  94. package/src/assets/web-panel/assets/{colors-DDH06hKO.js → colors-CFk7K-7Q.js} +1 -1
  95. package/src/assets/web-panel/assets/{compact-item-Cym756Xj.js → compact-item-X0IVMvgi.js} +1 -1
  96. package/src/assets/web-panel/assets/{createContext-By4Nb1k-.js → createContext-DWg4j2n6.js} +1 -1
  97. package/src/assets/web-panel/assets/devWarning-B2IW1J_J.js +1 -0
  98. package/src/assets/web-panel/assets/{hasIn-Ch7OY258.js → hasIn-CkVCwNNF.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-D9le0-dc.js → index-5OcZHdzc.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-CykROEJA.js → index-B273IY-E.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-DjwgJ5Jd.js → index-B3-B3FWD.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-CjNUTBwe.js → index-BB4KHHcv.js} +1 -1
  103. package/src/assets/web-panel/assets/index-BCp2ir-1.js +1 -0
  104. package/src/assets/web-panel/assets/{index-BFydNU6a.js → index-BG-GaZri.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-mL3nOcH6.js → index-BPBia4b-.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-XGeQMvWK.js → index-BipwEbTA.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-D5sADPGY.js → index-BoskgPt9.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-CV8qXTvb.js → index-Btqk6zWb.js} +1 -1
  109. package/src/assets/web-panel/assets/index-Bw4iuzRD.js +1 -0
  110. package/src/assets/web-panel/assets/{index-CJPks33Y.js → index-BzXjYUmd.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-BBBUn5v7.js → index-C1ZAOJRW.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-DiewptTL.js → index-CCLwoATF.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-OU8DZ9BL.js → index-CDfSD07S.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-DvnywwUj.js → index-CLlP1E4X.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-CT-3FYwd.js → index-CMCEXBRh.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-tZ5BUdad.js → index-CN8HZlLH.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-DNlxihs8.js → index-CNKFsBlz.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-CF3Lhyns.js → index-CUBkvFPH.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-CV1UC4zo.js → index-Ca0mij1n.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-DAkk1M7x.js → index-CbIAWbma.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-DNEJzc0r.js → index-CbihMThv.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-q-s04OKn.js → index-CvOa-IFV.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-BZB9q-Lp.js → index-Cvwu_rA_.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-oBsfUbyH.js → index-D-EJNxgR.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-ZY2Qs_Sn.js → index-D8uEL8Uw.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-DtGValNi.js → index-D92g4l3n.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-CpudmDhf.js → index-DCqpl_E_.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-Bo20BfdS.js → index-DLSBks8h.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-CUSUzaB8.js → index-Db_5xhrU.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-CZn6dmZe.js → index-DcDggpWR.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-CGsvEbbq.js → index-DeWKPQGs.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-jx7kr6mB.js → index-DhVHoqGL.js} +3 -3
  133. package/src/assets/web-panel/assets/{index-BIrRX-ra.js → index-DyWlOuak.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-6CpOV3Pn.js → index-LU54bChK.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-6-2eYBXr.js → index-OjnAwUJo.js} +1 -1
  136. package/src/assets/web-panel/assets/{index-B51otVoZ.js → index-P83LDnCz.js} +1 -1
  137. package/src/assets/web-panel/assets/{index-ArMrnx0v.js → index-_-9k3Tna.js} +1 -1
  138. package/src/assets/web-panel/assets/{initDefaultProps-DGcX9iPP.js → initDefaultProps-CFNgY8lJ.js} +1 -1
  139. package/src/assets/web-panel/assets/{motion-2SeL1D8A.js → motion-D-5RrDzn.js} +1 -1
  140. package/src/assets/web-panel/assets/{move-3cYbQCpS.js → move-DN-L0Bd-.js} +1 -1
  141. package/src/assets/web-panel/assets/{mtc-parser-IDdxfw0z.js → mtc-parser-6mgLSeCK.js} +1 -1
  142. package/src/assets/web-panel/assets/{omit-BNswdKO6.js → omit-ClWW8eTP.js} +1 -1
  143. package/src/assets/web-panel/assets/{pickAttrs-BwCnem2I.js → pickAttrs-Vystq3R8.js} +1 -1
  144. package/src/assets/web-panel/assets/{placementArrow-B9PtZ5rq.js → placementArrow-D0H9hK4W.js} +1 -1
  145. package/src/assets/web-panel/assets/{responsiveObserve-CPB6iSzV.js → responsiveObserve-B3iNRU-a.js} +1 -1
  146. package/src/assets/web-panel/assets/{slide-DZgyblZa.js → slide-CiMXe6am.js} +1 -1
  147. package/src/assets/web-panel/assets/{statusUtils-D82IBdsx.js → statusUtils-CGDZJ1uT.js} +1 -1
  148. package/src/assets/web-panel/assets/{styleChecker-qSHtosM-.js → styleChecker-D2zA6NkY.js} +1 -1
  149. package/src/assets/web-panel/assets/{useFlexGapSupport-CmWO7h0I.js → useFlexGapSupport-C1sYU6QE.js} +1 -1
  150. package/src/assets/web-panel/assets/{useFs-yLrs_ub4.js → useFs-BzUHSjg2.js} +1 -1
  151. package/src/assets/web-panel/assets/{usePersonalDataHub-CJ1VW6rh.js → usePersonalDataHub-CxB5yZCq.js} +1 -1
  152. package/src/assets/web-panel/assets/{vnode-CzY_moQ4.js → vnode-BfUfMwtc.js} +1 -1
  153. package/src/assets/web-panel/assets/{zoom-DAa7rEY5.js → zoom-CFYmj1TO.js} +1 -1
  154. package/src/assets/web-panel/index.html +1 -1
  155. package/src/command-help-index.json +2 -2
  156. package/src/command-manifest.json +2 -2
  157. package/src/commands/agent.js +80 -2
  158. package/src/commands/evolution.js +61 -42
  159. package/src/commands/learning.js +24 -8
  160. package/src/commands/serve.js +11 -2
  161. package/src/data/changelog.json +13 -0
  162. package/src/gateways/ws/session-protocol.js +1 -0
  163. package/src/gateways/ws/ws-agent-handler.js +70 -2
  164. package/src/gateways/ws/ws-server.js +8 -0
  165. package/src/lib/app-server/cli-agent-kernel-adapter.js +4 -0
  166. package/src/lib/app-server/graph-runtime.js +115 -8
  167. package/src/lib/app-server/server.js +21 -2
  168. package/src/lib/app-server/websocket-transport.js +2 -0
  169. package/src/lib/evolution/agent-evolution-ingress.js +300 -0
  170. package/src/lib/evolution/agent-evolution-runtime-composition-brand.js +22 -0
  171. package/src/lib/evolution/agent-evolution-runtime-composition.js +369 -0
  172. package/src/lib/evolution/bounded-skill-improvement-pilot.js +498 -0
  173. package/src/lib/evolution/evidence-backed-wiki-maintainer.js +752 -0
  174. package/src/lib/evolution/evolution-artifact-ports.js +48 -0
  175. package/src/lib/evolution/evolution-eval-gate.js +11 -4
  176. package/src/lib/evolution/evolution-evidence-artifact-adapter.js +499 -0
  177. package/src/lib/evolution/evolution-evidence-projector.js +61 -1
  178. package/src/lib/evolution/evolution-file-witness.js +601 -0
  179. package/src/lib/evolution/evolution-ledger-file-backend.js +176 -0
  180. package/src/lib/evolution/evolution-ledger-ports.js +353 -16
  181. package/src/lib/evolution/evolution-ledger.js +1355 -54
  182. package/src/lib/evolution/evolution-run-ledger-adapter.js +409 -0
  183. package/src/lib/evolution/evolution-run-runtime-adapter.js +5 -0
  184. package/src/lib/evolution/evolution-run-wiki-maintenance-source.js +300 -0
  185. package/src/lib/evolution/scheduled-batch-wiki-maintenance-source.js +368 -0
  186. package/src/lib/evolution/skill-candidate-registry.js +649 -0
  187. package/src/lib/evolution/skill-evaluated-promotion-durability.js +899 -0
  188. package/src/lib/evolution/skill-evaluated-promotion.js +481 -0
  189. package/src/lib/evolution/skill-promotion-controller.js +220 -37
  190. package/src/lib/evolution/skill-promotion-review-ledger-adapter.js +451 -0
  191. package/src/lib/evolution/skill-promotion-review.js +793 -0
  192. package/src/lib/evolution/skill-registry-transition-capability.js +55 -0
  193. package/src/lib/evolution/skill-registry-transition-ledger-adapter.js +1280 -0
  194. package/src/lib/evolution/skill-registry-transition-source.js +372 -0
  195. package/src/lib/evolution/skill-release-registry.js +2191 -11
  196. package/src/lib/evolution/skill-target-matrix-eval.js +133 -10
  197. package/src/lib/evolution/structured-memory-agent-control-plane.js +222 -0
  198. package/src/lib/evolution/structured-memory-authority-ledger-adapter.js +351 -0
  199. package/src/lib/evolution/structured-memory-ledger-adapter.js +220 -0
  200. package/src/lib/evolution/structured-memory-policy-receipt-writer.js +164 -0
  201. package/src/lib/evolution/structured-memory-post-compact-hook.js +87 -0
  202. package/src/lib/evolution/structured-memory-promotion-receipt-writer.js +221 -0
  203. package/src/lib/evolution/structured-memory-semantic-review-pipeline.js +313 -0
  204. package/src/lib/evolution/wiki-informed-skill-proposer.js +343 -0
  205. package/src/lib/evolution/wiki-maintainer-ledger-adapter.js +200 -0
  206. package/src/lib/evolution/wiki-maintenance-trigger-ledger-adapter.js +687 -0
  207. package/src/lib/evolution-system.js +65 -30
  208. package/src/lib/graph-kernel/evolution-run-runtime-adapter.js +5 -0
  209. package/src/lib/hooks-v2-runtime.js +20 -0
  210. package/src/lib/mcp-lifecycle-authority.js +21 -2
  211. package/src/lib/remote-approval-bridge.js +24 -0
  212. package/src/lib/scheduler-kernel/store.js +62 -14
  213. package/src/repl/agent-repl.js +45 -0
  214. package/src/runtime/agent-core.js +68 -0
  215. package/src/runtime/agent-runtime.js +114 -1
  216. package/src/runtime/headless-runner.js +19 -0
  217. package/src/runtime/headless-stream.js +43 -0
  218. package/src/runtime/runtime-factory.js +19 -1
  219. package/src/assets/web-panel/assets/Projects-Ca9BAfu7.js +0 -1
  220. package/src/assets/web-panel/assets/devWarning-KO3pAGeO.js +0 -1
  221. package/src/assets/web-panel/assets/index-Bh4Rgkg2.js +0 -1
  222. package/src/assets/web-panel/assets/index-Dox_coTY.js +0 -1
  223. package/src/lib/learning/learning-hooks.js +0 -123
@@ -12,6 +12,13 @@ import {
12
12
  verifySkillMutationConsumptionReceipt,
13
13
  verifySkillMutationRequest,
14
14
  } from "./skill-mutation-authority.js";
15
+ import { captureSkillEvaluatedPromotionProvider } from "./skill-evaluated-promotion.js";
16
+ import { captureStructuredMemoryPromotionReceiptWriter } from "./structured-memory-promotion-receipt-writer.js";
17
+ import {
18
+ consumeRegistryTransitionCapability,
19
+ issueRegistryTransitionCapability,
20
+ } from "./skill-registry-transition-capability.js";
21
+ import { captureSkillPromotionReviewProvider } from "./skill-promotion-review.js";
15
22
 
16
23
  const DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/u;
17
24
  const EMPTY_ACTIVE_DOMAIN = "chainlesschain.skill-active/empty/v1\0";
@@ -22,7 +29,24 @@ export const EMPTY_SKILL_ACTIVE_DIGEST = `sha256:${crypto
22
29
  .update(EMPTY_ACTIVE_DOMAIN, "utf8")
23
30
  .digest("hex")}`;
24
31
 
25
- const TRANSITION_CAPABILITIES = new WeakMap();
32
+ const EVALUATED_CONTROL_PLANE_OPTION_KEYS = new Set([
33
+ "candidateRegistry",
34
+ "releaseRegistry",
35
+ "authority",
36
+ "evaluatedPromotionProvider",
37
+ "memoryPromotionReceiptWriter",
38
+ "promotionReviewProvider",
39
+ ]);
40
+ const EVALUATED_CONTROL_PLANE_REQUIRED_KEYS = new Set([
41
+ "candidateRegistry",
42
+ "releaseRegistry",
43
+ "authority",
44
+ "evaluatedPromotionProvider",
45
+ ]);
46
+
47
+ export const SKILL_EVALUATED_PROMOTION_CONTROL_PLANE_SCHEMA =
48
+ "chainlesschain.skill-evaluated-promotion-control-plane/v1";
49
+ const EVALUATED_PROMOTION_CONTROL_PLANES = new WeakSet();
26
50
 
27
51
  export class SkillPromotionControllerError extends Error {
28
52
  constructor(code, message, details = {}) {
@@ -201,40 +225,7 @@ function assertTransitionSubject(request, expectedDigest) {
201
225
  }
202
226
  }
203
227
 
204
- function issueRegistryTransitionCapability(registry, payload) {
205
- const capability = Object.freeze(Object.create(null));
206
- TRANSITION_CAPABILITIES.set(capability, {
207
- registry,
208
- payload: deepFreeze(payload),
209
- status: "issued",
210
- });
211
- return capability;
212
- }
213
-
214
- /**
215
- * Registry-only broker. It is exported solely to break the module boundary;
216
- * callers cannot manufacture a WeakMap-backed capability or replay one.
217
- */
218
- export function consumeRegistryTransitionCapability(capability, registry) {
219
- const state =
220
- capability && typeof capability === "object"
221
- ? TRANSITION_CAPABILITIES.get(capability)
222
- : null;
223
- if (!state || state.registry !== registry) {
224
- throw failure(
225
- "SKILL_PROMOTION_TRANSITION_CAPABILITY_INVALID",
226
- "registry transition capability is forged or bound to another registry",
227
- );
228
- }
229
- if (state.status !== "issued") {
230
- throw failure(
231
- "SKILL_PROMOTION_TRANSITION_CAPABILITY_REPLAYED",
232
- "registry transition capability has already been consumed",
233
- );
234
- }
235
- state.status = "consumed";
236
- return state.payload;
237
- }
228
+ export { consumeRegistryTransitionCapability };
238
229
 
239
230
  export class SkillPromotionController {
240
231
  #tenantId;
@@ -251,7 +242,26 @@ export class SkillPromotionController {
251
242
 
252
243
  #consumeAuthority;
253
244
 
254
- constructor({ candidateRegistry, releaseRegistry, authority } = {}) {
245
+ #evaluatedPromotionProvider;
246
+
247
+ #requireEvaluatedPromotion;
248
+
249
+ #memoryPromotionReceiptWriter;
250
+
251
+ #promotionReviewProvider;
252
+
253
+ #requireHumanReview;
254
+
255
+ constructor({
256
+ candidateRegistry,
257
+ releaseRegistry,
258
+ authority,
259
+ evaluatedPromotionProvider = null,
260
+ requireEvaluatedPromotion = false,
261
+ memoryPromotionReceiptWriter = null,
262
+ promotionReviewProvider = null,
263
+ requireHumanReview = false,
264
+ } = {}) {
255
265
  if (!candidateRegistry || typeof candidateRegistry.read !== "function") {
256
266
  throw failure(
257
267
  "SKILL_PROMOTION_CANDIDATE_REGISTRY_REQUIRED",
@@ -288,6 +298,30 @@ export class SkillPromotionController {
288
298
  "SkillMutationAuthority.consume is required",
289
299
  );
290
300
  }
301
+ if (typeof requireEvaluatedPromotion !== "boolean") {
302
+ throw failure(
303
+ "SKILL_PROMOTION_INVALID",
304
+ "requireEvaluatedPromotion must be boolean",
305
+ );
306
+ }
307
+ if (requireEvaluatedPromotion && evaluatedPromotionProvider === null) {
308
+ throw failure(
309
+ "SKILL_PROMOTION_EVALUATION_REQUIRED",
310
+ "evaluated-only promotion requires a captured evidence provider",
311
+ );
312
+ }
313
+ if (typeof requireHumanReview !== "boolean") {
314
+ throw failure(
315
+ "SKILL_PROMOTION_INVALID",
316
+ "requireHumanReview must be boolean",
317
+ );
318
+ }
319
+ if (requireHumanReview && promotionReviewProvider === null) {
320
+ throw failure(
321
+ "SKILL_PROMOTION_REVIEW_REQUIRED",
322
+ "human-reviewed promotion requires a captured review provider",
323
+ );
324
+ }
291
325
 
292
326
  this.#tenantId = candidateRegistry.tenantId;
293
327
  this.#registryIdentity = releaseRegistry;
@@ -297,6 +331,22 @@ export class SkillPromotionController {
297
331
  this.#applyTransition =
298
332
  releaseRegistry.applyTransition.bind(releaseRegistry);
299
333
  this.#consumeAuthority = authority.consume.bind(authority);
334
+ this.#evaluatedPromotionProvider =
335
+ evaluatedPromotionProvider === null
336
+ ? null
337
+ : captureSkillEvaluatedPromotionProvider(evaluatedPromotionProvider);
338
+ this.#requireEvaluatedPromotion = requireEvaluatedPromotion;
339
+ this.#memoryPromotionReceiptWriter =
340
+ memoryPromotionReceiptWriter === null
341
+ ? null
342
+ : captureStructuredMemoryPromotionReceiptWriter(
343
+ memoryPromotionReceiptWriter,
344
+ );
345
+ this.#promotionReviewProvider =
346
+ promotionReviewProvider === null
347
+ ? null
348
+ : captureSkillPromotionReviewProvider(promotionReviewProvider);
349
+ this.#requireHumanReview = requireHumanReview;
300
350
 
301
351
  Object.freeze(candidateRegistry);
302
352
  Object.freeze(releaseRegistry);
@@ -352,7 +402,7 @@ export class SkillPromotionController {
352
402
  return verifyDirectConsumptionReceipt(directReceipt, request);
353
403
  }
354
404
 
355
- async promote(input = {}) {
405
+ async #promote(input = {}) {
356
406
  assertDataRecord(
357
407
  input,
358
408
  new Set(["authorization", "candidateId"]),
@@ -425,6 +475,77 @@ export class SkillPromotionController {
425
475
  return this.#applyTransition(transitionCapability);
426
476
  }
427
477
 
478
+ async promote(input = {}) {
479
+ if (this.#requireEvaluatedPromotion) {
480
+ throw failure(
481
+ "SKILL_PROMOTION_EVALUATION_REQUIRED",
482
+ "direct promotion is disabled by the evaluated-only controller policy",
483
+ );
484
+ }
485
+ const result = await this.#promote(input);
486
+ if (this.#memoryPromotionReceiptWriter === null) return result;
487
+ const memoryAuthorityReceipt =
488
+ await this.#memoryPromotionReceiptWriter.retainPromotion(result);
489
+ return deepFreeze({ ...result, memoryAuthorityReceipt });
490
+ }
491
+
492
+ async promoteEvaluated(input = {}) {
493
+ assertDataRecord(
494
+ input,
495
+ new Set(["authorization", "candidateId", "matrixContext"]),
496
+ "evaluated promotion input",
497
+ );
498
+ if (this.#evaluatedPromotionProvider === null) {
499
+ throw failure(
500
+ "SKILL_PROMOTION_EVALUATION_REQUIRED",
501
+ "evaluated promotion requires a captured evidence provider",
502
+ );
503
+ }
504
+ const candidate = this.#readCandidate(input.candidateId);
505
+ const state = this.#readState(candidate.skillName);
506
+ const activeContentDigest = this.#currentContentDigest(state);
507
+ const matrixBinding = await this.#evaluatedPromotionProvider.verify({
508
+ matrixContext: input.matrixContext,
509
+ authorization: input.authorization,
510
+ candidate,
511
+ state,
512
+ activeContentDigest,
513
+ });
514
+ let reviewBinding = null;
515
+ if (this.#requireHumanReview) {
516
+ const activeRelease =
517
+ state.activeReleaseDigest === null
518
+ ? null
519
+ : this.#readRelease(state.activeReleaseDigest);
520
+ reviewBinding = await this.#promotionReviewProvider.verify({
521
+ activeRelease,
522
+ authorization: input.authorization,
523
+ candidate,
524
+ matrixBinding,
525
+ state,
526
+ });
527
+ }
528
+ const result = await this.#promote({
529
+ authorization: input.authorization,
530
+ candidateId: input.candidateId,
531
+ });
532
+ if (this.#memoryPromotionReceiptWriter === null) {
533
+ return deepFreeze({ ...result, matrixBinding, reviewBinding });
534
+ }
535
+ const memoryAuthorityReceipt =
536
+ await this.#memoryPromotionReceiptWriter.retainPromotion(
537
+ result,
538
+ matrixBinding,
539
+ reviewBinding,
540
+ );
541
+ return deepFreeze({
542
+ ...result,
543
+ matrixBinding,
544
+ reviewBinding,
545
+ memoryAuthorityReceipt,
546
+ });
547
+ }
548
+
428
549
  async rollback(input = {}) {
429
550
  assertDataRecord(
430
551
  input,
@@ -503,4 +624,66 @@ export class SkillPromotionController {
503
624
  }
504
625
  }
505
626
 
627
+ /**
628
+ * Builds the narrow promotion surface intended for production adapters.
629
+ *
630
+ * This is a composition primitive, not proof that any production entry point
631
+ * uses it. The returned facade deliberately withholds both the controller and
632
+ * direct promote(), while retaining authorized rollback as the recovery path.
633
+ */
634
+ export function createSkillEvaluatedPromotionControlPlane(options = {}) {
635
+ assertDataRecord(
636
+ options,
637
+ EVALUATED_CONTROL_PLANE_OPTION_KEYS,
638
+ "evaluated promotion control plane options",
639
+ { required: EVALUATED_CONTROL_PLANE_REQUIRED_KEYS },
640
+ );
641
+ const provider = captureSkillEvaluatedPromotionProvider(
642
+ options.evaluatedPromotionProvider,
643
+ );
644
+ const reviewProvider = captureSkillPromotionReviewProvider(
645
+ options.promotionReviewProvider,
646
+ );
647
+ const controller = new SkillPromotionController({
648
+ candidateRegistry: options.candidateRegistry,
649
+ releaseRegistry: options.releaseRegistry,
650
+ authority: options.authority,
651
+ evaluatedPromotionProvider: options.evaluatedPromotionProvider,
652
+ memoryPromotionReceiptWriter: options.memoryPromotionReceiptWriter ?? null,
653
+ promotionReviewProvider: options.promotionReviewProvider,
654
+ requireEvaluatedPromotion: true,
655
+ requireHumanReview: true,
656
+ });
657
+ const controlPlane = {
658
+ schema: SKILL_EVALUATED_PROMOTION_CONTROL_PLANE_SCHEMA,
659
+ tenantId: options.candidateRegistry.tenantId,
660
+ providerAuthorityId: provider.authorityId,
661
+ providerRevision: provider.revision,
662
+ providerHandlerArtifactDigest: provider.handlerArtifactDigest,
663
+ reviewAuthorityId: reviewProvider.authorityId,
664
+ reviewRevision: reviewProvider.revision,
665
+ reviewHandlerArtifactDigest: reviewProvider.handlerArtifactDigest,
666
+ promoteEvaluated: Object.freeze((input) =>
667
+ controller.promoteEvaluated(input),
668
+ ),
669
+ rollback: Object.freeze((input) => controller.rollback(input)),
670
+ };
671
+ EVALUATED_PROMOTION_CONTROL_PLANES.add(controlPlane);
672
+ return Object.freeze(controlPlane);
673
+ }
674
+
675
+ export function captureSkillEvaluatedPromotionControlPlane(value) {
676
+ if (!value || !EVALUATED_PROMOTION_CONTROL_PLANES.has(value)) {
677
+ throw failure(
678
+ "SKILL_PROMOTION_CONTROL_PLANE_REQUIRED",
679
+ "a branded evaluated promotion control plane is required",
680
+ );
681
+ }
682
+ return Object.freeze({
683
+ schema: value.schema,
684
+ tenantId: value.tenantId,
685
+ promoteEvaluated: value.promoteEvaluated.bind(value),
686
+ });
687
+ }
688
+
506
689
  Object.freeze(SkillPromotionController.prototype);