chainlesschain 0.166.20 → 0.166.21

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 (214) hide show
  1. package/package.json +2 -2
  2. package/src/assets/web-panel/assets/{AIOps-CcJst5Zs.js → AIOps-BjMnsUci.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-BpHPFKd3.js → ActionButton-DdYFP03A.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-DHAsASuS.js → Analytics-Bb8TuuK_.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-BTKwo5RC.js → AppLayout-Kn3TIOtk.js} +5 -5
  6. package/src/assets/web-panel/assets/{Artifacts-BcCBTggA.js → Artifacts-4IxpqI_b.js} +1 -1
  7. package/src/assets/web-panel/assets/{Audit-z1JvJYbT.js → Audit-BOV2caqU.js} +1 -1
  8. package/src/assets/web-panel/assets/{BackgroundAgents-CJ7DCMDR.js → BackgroundAgents-B86k-ay4.js} +1 -1
  9. package/src/assets/web-panel/assets/{Backup-CKpxw4uw.js → Backup-C5_ie1e3.js} +1 -1
  10. package/src/assets/web-panel/assets/{BaseInput-2jI_IlUB.js → BaseInput-xpwg6QCW.js} +1 -1
  11. package/src/assets/web-panel/assets/{Chat-C_4RfBeN.js → Chat-CVZOcZau.js} +5 -5
  12. package/src/assets/web-panel/assets/ChatBubbleRenderer-D8fPYhUu.js +1 -0
  13. package/src/assets/web-panel/assets/{Checkbox-BnF4z4N1.js → Checkbox-MKTq3zdP.js} +1 -1
  14. package/src/assets/web-panel/assets/{Codegen-m_LMamhM.js → Codegen-JUk3wzep.js} +1 -1
  15. package/src/assets/web-panel/assets/{Col-DzMbA760.js → Col-JPvTA0kC.js} +1 -1
  16. package/src/assets/web-panel/assets/{Community-SScuZUcW.js → Community-Tqgl87NQ.js} +1 -1
  17. package/src/assets/web-panel/assets/{Compact-CiOHRvwQ.js → Compact-BuAFYBmN.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compliance-97FzYz-6.js → Compliance-CXS9WIPZ.js} +1 -1
  19. package/src/assets/web-panel/assets/{Cowork-C0ss-SRl.js → Cowork-Ds2bFHrr.js} +2 -2
  20. package/src/assets/web-panel/assets/{Cron-CCbdc9fp.js → Cron-C_dV_OeW.js} +2 -2
  21. package/src/assets/web-panel/assets/{Crosschain-BPnabXej.js → Crosschain-BsO6tIRo.js} +1 -1
  22. package/src/assets/web-panel/assets/{DID-B65hFnHs.js → DID-rNOFqBac.js} +2 -2
  23. package/src/assets/web-panel/assets/{Dashboard-B6qR_TF2.js → Dashboard-C2fcKKVY.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dropdown-6c-2Fxm-.js → Dropdown-Y7Ndr0X_.js} +1 -1
  25. package/src/assets/web-panel/assets/{EmailListRenderer-GD57mfiz.js → EmailListRenderer-DcP_uPmL.js} +1 -1
  26. package/src/assets/web-panel/assets/{FamilyGuardDashboard-B2mxG6LN.js → FamilyGuardDashboard-Cwn3gDzk.js} +1 -1
  27. package/src/assets/web-panel/assets/{Federation-cZS-uvAo.js → Federation-ClQuOsqb.js} +1 -1
  28. package/src/assets/web-panel/assets/{FormItemContext-UbSfBIe1.js → FormItemContext-DfwtmlcK.js} +1 -1
  29. package/src/assets/web-panel/assets/GenericCardRenderer-zNZhtbC5.js +1 -0
  30. package/src/assets/web-panel/assets/{Git-DAlhOiDA.js → Git-BZmdW-G5.js} +2 -2
  31. package/src/assets/web-panel/assets/{Governance-B-RRVaP8.js → Governance-CqBk4lEn.js} +1 -1
  32. package/src/assets/web-panel/assets/{Inference-DBl-pXYR.js → Inference-Dbmt3ZXk.js} +1 -1
  33. package/src/assets/web-panel/assets/{KnowledgeGraph-DjqOkvgY.js → KnowledgeGraph-hMTH6qf3.js} +1 -1
  34. package/src/assets/web-panel/assets/{Logs-CEV7AEAD.js → Logs-CkiYgiW2.js} +2 -2
  35. package/src/assets/web-panel/assets/{MarkdownRenderer-BDCxa4d1.js → MarkdownRenderer-BL1FElXg.js} +1 -1
  36. package/src/assets/web-panel/assets/{Marketplace-oRjzfmYJ.js → Marketplace-CbB6wfin.js} +1 -1
  37. package/src/assets/web-panel/assets/{McpTools-BiTnznLw.js → McpTools-BSwiFtte.js} +3 -3
  38. package/src/assets/web-panel/assets/{Memory-DR0C5K4N.js → Memory-B03PeHrz.js} +2 -2
  39. package/src/assets/web-panel/assets/{MobileBridge--oR8wEcp.js → MobileBridge-CRGrnd-X.js} +1 -1
  40. package/src/assets/web-panel/assets/{MobileProjects-DKqpYMuG.js → MobileProjects-CE_5v2kO.js} +1 -1
  41. package/src/assets/web-panel/assets/{Mtc-Dg0D6fDQ.js → Mtc-Dp11QVx1.js} +2 -2
  42. package/src/assets/web-panel/assets/{MtcAudit-D4_-yWTK.js → MtcAudit-CYu-3JBu.js} +5 -5
  43. package/src/assets/web-panel/assets/{Multisig-Coz55FxA.js → Multisig-CGyJ0Xl3.js} +3 -3
  44. package/src/assets/web-panel/assets/{NLProgramming-BWVjgW9Y.js → NLProgramming-CoWi_ov1.js} +1 -1
  45. package/src/assets/web-panel/assets/{Notes-BflVuGwr.js → Notes-CgU9DDo9.js} +3 -3
  46. package/src/assets/web-panel/assets/{NotificationSettings-CT0F_dJ7.js → NotificationSettings-DX4I2b4W.js} +1 -1
  47. package/src/assets/web-panel/assets/OrderTableRenderer-CwHc15Zs.js +1 -0
  48. package/src/assets/web-panel/assets/{Organization-CMDTM2z5.js → Organization-oopLO_tk.js} +4 -4
  49. package/src/assets/web-panel/assets/{Overflow-acKvvYpC.js → Overflow-BFVvjMyf.js} +1 -1
  50. package/src/assets/web-panel/assets/{P2P-CRq5j9Ax.js → P2P-CBy5t-Tk.js} +2 -2
  51. package/src/assets/web-panel/assets/{PdhVaultBrowser-DmtzN6Kn.js → PdhVaultBrowser--YWJNsu6.js} +4 -4
  52. package/src/assets/web-panel/assets/{Permissions-SZ-kjJDa.js → Permissions-C2dZ8scb.js} +3 -3
  53. package/src/assets/web-panel/assets/{PersonalDataHub-DXh-ZfgJ.js → PersonalDataHub-Bs3l7Hlx.js} +6 -6
  54. package/src/assets/web-panel/assets/{Pipeline-DhBU9ftP.js → Pipeline-DEBWbZuD.js} +1 -1
  55. package/src/assets/web-panel/assets/{Privacy-BgEXpO_V.js → Privacy-CjHBb6NU.js} +1 -1
  56. package/src/assets/web-panel/assets/{ProjectInit-B2DJ-dmK.js → ProjectInit-D2WipUz5.js} +2 -2
  57. package/src/assets/web-panel/assets/{ProjectSettings-ve3SocWc.js → ProjectSettings-B6WfnrGB.js} +2 -2
  58. package/src/assets/web-panel/assets/{Projects-5ZvFasSJ.js → Projects-FF_thRi6.js} +1 -1
  59. package/src/assets/web-panel/assets/{Providers-C8fcF3BK.js → Providers-CCv5M_Dv.js} +1 -1
  60. package/src/assets/web-panel/assets/{QrScannerModal-unjO8lNO.js → QrScannerModal-CGthxU54.js} +1 -1
  61. package/src/assets/web-panel/assets/{QuickAsk-BT1QtT7D.js → QuickAsk-CnPmXPFb.js} +1 -1
  62. package/src/assets/web-panel/assets/{Recommend-BSjFrY1w.js → Recommend-Df_tGEa9.js} +1 -1
  63. package/src/assets/web-panel/assets/{RemoteSession-CWV0bICg.js → RemoteSession-Z58N0Loe.js} +2 -2
  64. package/src/assets/web-panel/assets/{Reputation-BMjiMsk2.js → Reputation-CZTBQ2Vt.js} +1 -1
  65. package/src/assets/web-panel/assets/{Row-9XCY22PM.js → Row-CdK3YpCQ.js} +1 -1
  66. package/src/assets/web-panel/assets/{RssFeed-DQ9PDy7Q.js → RssFeed-CFMVT5sb.js} +3 -3
  67. package/src/assets/web-panel/assets/{Search-Boym2HwG.js → Search-DrF8RIvD.js} +1 -1
  68. package/src/assets/web-panel/assets/{Security-Gbq3lGQb.js → Security-Ddk2f2DM.js} +4 -4
  69. package/src/assets/web-panel/assets/{Services-OcUfLdnu.js → Services-CCuK-VOo.js} +2 -2
  70. package/src/assets/web-panel/assets/{Skeleton-BjTog6cA.js → Skeleton-DxCpHzeM.js} +1 -1
  71. package/src/assets/web-panel/assets/{Skills-Dny4ft_1.js → Skills-t2oTDgcv.js} +1 -1
  72. package/src/assets/web-panel/assets/{Sla-Cy_VnhpZ.js → Sla-Df63M9_R.js} +1 -1
  73. package/src/assets/web-panel/assets/{SpeechSettings-CrFuL_lp.js → SpeechSettings-l7ox6KuX.js} +1 -1
  74. package/src/assets/web-panel/assets/{SyncSettings-k-FnjuOR.js → SyncSettings-COd_tgPp.js} +2 -2
  75. package/src/assets/web-panel/assets/{Tasks-ZEqDSo0_.js → Tasks-CzDCcrik.js} +1 -1
  76. package/src/assets/web-panel/assets/{Templates-CYYksYV5.js → Templates-D-vfxTGA.js} +1 -1
  77. package/src/assets/web-panel/assets/{Tenant-BvTTRTHS.js → Tenant-BlpT_Gxc.js} +1 -1
  78. package/src/assets/web-panel/assets/{Terminal-DMOQOtkj.js → Terminal-D5rq52Hg.js} +2 -2
  79. package/src/assets/web-panel/assets/TimelineRenderer-DdoMndkK.js +1 -0
  80. package/src/assets/web-panel/assets/{Tokens-VW6Wocdp.js → Tokens-BhgBsI6g.js} +1 -1
  81. package/src/assets/web-panel/assets/{Trigger-BtOxZqP6.js → Trigger-DwwzoikZ.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trust-XcGJoTQx.js → Trust-HkTpzXFb.js} +1 -1
  83. package/src/assets/web-panel/assets/{UkeySign-aASNCs5j.js → UkeySign-D9nk6Ehe.js} +1 -1
  84. package/src/assets/web-panel/assets/{VideoEditing-Bz89M52u.js → VideoEditing-BKk0rfoy.js} +1 -1
  85. package/src/assets/web-panel/assets/{Wallet-uU4dSS_N.js → Wallet-IVWIU_Lq.js} +4 -4
  86. package/src/assets/web-panel/assets/{WebAuthn-Brrroxgr.js → WebAuthn-CFTCpfsG.js} +4 -4
  87. package/src/assets/web-panel/assets/{WorkflowEditor-Cny-evI9.js → WorkflowEditor-Dnf4Obif.js} +1 -1
  88. package/src/assets/web-panel/assets/{chat-CJ5iSwWq.js → chat-D2snERdj.js} +1 -1
  89. package/src/assets/web-panel/assets/{colors-DWa-2flG.js → colors-DKEjK1N1.js} +1 -1
  90. package/src/assets/web-panel/assets/{compact-item-DFwUfptU.js → compact-item-BEDLwQdt.js} +1 -1
  91. package/src/assets/web-panel/assets/{createContext-FHWWcyeB.js → createContext-DA9iW1a0.js} +1 -1
  92. package/src/assets/web-panel/assets/devWarning-DyhgpXPf.js +1 -0
  93. package/src/assets/web-panel/assets/{hasIn-QY_TElrN.js → hasIn-5l2xEcY9.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-hw1J_Oxs.js → index-5pW4t1iD.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-BR4RMPnB.js → index-7P1b8HZo.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-BUNwuu5v.js → index-B00GeekA.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-B18zERdP.js → index-B4QYBliR.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-wqiOz655.js → index-B7_W_rYd.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-BQCtBurK.js → index-BO9dQjpt.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DUfILsc-.js → index-BZ5lY2zx.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-DUepuy7O.js → index-B_eCoZgW.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-uRUZdL7I.js → index-BgfImyZI.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-CUoLd1dt.js → index-Bq5P3piS.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-BiHRihC0.js → index-Bqc8tdIF.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-BcVr-LOk.js → index-C7sKbM5s.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-DDpXDi4J.js → index-CGlotREA.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-CjejB-z9.js → index-CRPrHE7h.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-D2rPJ6Sv.js → index-CX1x4AFn.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-w3SdYwaC.js → index-CbTPvp2_.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-D-Mhq8K6.js → index-CjWltbi_.js} +1 -1
  111. package/src/assets/web-panel/assets/index-Ck1jhFE0.js +1 -0
  112. package/src/assets/web-panel/assets/{index-Bd7McYpJ.js → index-CkMKuqUs.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-BYbwQ7SP.js → index-CmruhzFi.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-2ufsNuVn.js → index-Csfb-7hw.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-0umhind6.js → index-CxEtQYdi.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-B33frlaD.js → index-D7z4zB_a.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-Dy2PnKZx.js → index-DLoalqRX.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-CUiTugu3.js → index-DU2TXJu-.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-CGv5In_T.js → index-DXet1xol.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-DCHMVYG1.js → index-Dbd7eEex.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-th467RN6.js → index-Dbkghqn_.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-CkmgbT7h.js → index-Dg2a9owQ.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-aTiI7lOQ.js → index-DpqtbXdE.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-C5F1vwec.js → index-DqwPFbOb.js} +3 -3
  125. package/src/assets/web-panel/assets/{index-DaHvj4jA.js → index-DvV03Ayk.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-BRsGZBHc.js → index-NJieh3T1.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-CeGn0A4W.js → index-Td8ZwyoC.js} +1 -1
  128. package/src/assets/web-panel/assets/index-c8jJEHVs.js +1 -0
  129. package/src/assets/web-panel/assets/{index-va4Rt-yM.js → index-e-e40id6.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-CKS7n6mE.js → index-fccZmC_h.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-BEjwv2x6.js → index-fgYk0QXO.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-Dlq-u9E4.js → index-yYEQXYaU.js} +1 -1
  133. package/src/assets/web-panel/assets/{initDefaultProps-BeSPUFDz.js → initDefaultProps-CPrcB1TC.js} +1 -1
  134. package/src/assets/web-panel/assets/{motion-Dcajvjm9.js → motion-BQ7mWRh_.js} +1 -1
  135. package/src/assets/web-panel/assets/{move-B76orau-.js → move-CzOEq99p.js} +1 -1
  136. package/src/assets/web-panel/assets/{mtc-parser-zB6yFwcX.js → mtc-parser-BlQI5jrw.js} +1 -1
  137. package/src/assets/web-panel/assets/{omit-BsbNjz8w.js → omit-DlW4gxmv.js} +1 -1
  138. package/src/assets/web-panel/assets/{pickAttrs-BiJ9tssQ.js → pickAttrs-BBYms5nP.js} +1 -1
  139. package/src/assets/web-panel/assets/{placementArrow-BdfMjMeN.js → placementArrow-az2MPJ_7.js} +1 -1
  140. package/src/assets/web-panel/assets/{responsiveObserve-rV4LGpbU.js → responsiveObserve-D1-ibEol.js} +1 -1
  141. package/src/assets/web-panel/assets/{slide-HsVw1qFQ.js → slide-DHGqa4GA.js} +1 -1
  142. package/src/assets/web-panel/assets/{statusUtils-D1ry8XPE.js → statusUtils-CYGDo6lD.js} +1 -1
  143. package/src/assets/web-panel/assets/{styleChecker-B1t6aQQ_.js → styleChecker-Cl2EM9K6.js} +1 -1
  144. package/src/assets/web-panel/assets/{useFlexGapSupport-C8qbl-9w.js → useFlexGapSupport-DdYhzuv1.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFs-R7g_mYTC.js → useFs-DWumPuBW.js} +1 -1
  146. package/src/assets/web-panel/assets/{usePersonalDataHub-Cd-kCe7Z.js → usePersonalDataHub-DxAO-Aqi.js} +1 -1
  147. package/src/assets/web-panel/assets/{vnode-9WhK5UWA.js → vnode-CplsQf_N.js} +1 -1
  148. package/src/assets/web-panel/assets/{zoom-CUqppPco.js → zoom-Cw5HXNSG.js} +1 -1
  149. package/src/assets/web-panel/index.html +1 -1
  150. package/src/command-help-index.json +2 -2
  151. package/src/commands/agent.js +19 -1
  152. package/src/commands/evolution-knowledge.js +54 -0
  153. package/src/commands/evolution-workbench.js +83 -0
  154. package/src/commands/evolution.js +6 -1
  155. package/src/commands/serve.js +16 -0
  156. package/src/commands/skill.js +158 -16
  157. package/src/data/changelog.json +13 -0
  158. package/src/gateways/ws/session-protocol.js +2 -0
  159. package/src/gateways/ws/ws-agent-handler.js +124 -69
  160. package/src/gateways/ws/ws-server.js +19 -0
  161. package/src/generated/cc-agent-protocol.schema.json +7 -1
  162. package/src/harness/jsonl-session-store.js +25 -1
  163. package/src/index.js +1 -1
  164. package/src/lib/app-server/cli-agent-kernel-adapter.js +8 -0
  165. package/src/lib/app-server/graph-runtime.js +40 -1
  166. package/src/lib/app-server/server.js +181 -3
  167. package/src/lib/app-server/websocket-transport.js +2 -0
  168. package/src/lib/evolution/agent-evolution-runtime-composition-brand.js +17 -0
  169. package/src/lib/evolution/agent-evolution-runtime-composition.js +165 -1
  170. package/src/lib/evolution/controlled-skill-production-pilot.js +912 -0
  171. package/src/lib/evolution/evolution-artifact-ports.js +21 -0
  172. package/src/lib/evolution/evolution-raw-crypto-shred.js +185 -0
  173. package/src/lib/evolution/evolution-workbench-batch-executor.js +195 -0
  174. package/src/lib/evolution/evolution-workbench-cli-host.js +169 -0
  175. package/src/lib/evolution/evolution-workbench-metrics-ledger-adapter.js +648 -0
  176. package/src/lib/evolution/evolution-workbench-metrics.js +943 -0
  177. package/src/lib/evolution/evolution-workbench-projection.js +734 -0
  178. package/src/lib/evolution/evolution-workbench-version-control.js +272 -0
  179. package/src/lib/evolution/governed-knowledge-conflict-merge.js +352 -0
  180. package/src/lib/evolution/governed-knowledge-dependency-authority.js +273 -0
  181. package/src/lib/evolution/governed-knowledge-dependency-ledger-executor.js +646 -0
  182. package/src/lib/evolution/governed-knowledge-merge-ledger-executor.js +644 -0
  183. package/src/lib/evolution/governed-knowledge-merge-publisher-authority.js +282 -0
  184. package/src/lib/evolution/governed-knowledge-node-crypto-authority.js +348 -0
  185. package/src/lib/evolution/governed-knowledge-rbac-approval-authority.js +621 -0
  186. package/src/lib/evolution/governed-knowledge-review-host.js +249 -0
  187. package/src/lib/evolution/governed-knowledge-sync-ledger-adapter.js +643 -0
  188. package/src/lib/evolution/governed-knowledge-sync-merge-publisher.js +259 -0
  189. package/src/lib/evolution/governed-knowledge-sync.js +485 -0
  190. package/src/lib/evolution/governed-knowledge-trust-ledger.js +707 -0
  191. package/src/lib/evolution/governed-skill-marketplace.js +430 -0
  192. package/src/lib/evolution/governed-wiki-pruning.js +435 -0
  193. package/src/lib/evolution/skill-outcome-index-authority.js +268 -0
  194. package/src/lib/evolution/skill-outcome-source-catalog-authority.js +237 -0
  195. package/src/lib/public-ide-capability-manifest.js +4 -0
  196. package/src/lib/skill-outcome-authority.js +43 -0
  197. package/src/lib/skill-outcome-transcript-authority.js +252 -0
  198. package/src/lib/skill-retrieval-router-benchmark.js +135 -0
  199. package/src/lib/skill-retrieval-router.js +235 -0
  200. package/src/lib/skill-vector-authority.js +325 -0
  201. package/src/lib/skill-vector-process-authority.js +386 -0
  202. package/src/repl/agent-repl.js +7 -1
  203. package/src/runtime/agent-core.js +72 -6
  204. package/src/runtime/agent-runtime.js +42 -0
  205. package/src/runtime/headless-runner.js +32 -0
  206. package/src/runtime/headless-stream.js +36 -1
  207. package/src/runtime/runtime-factory.js +62 -4
  208. package/src/assets/web-panel/assets/ChatBubbleRenderer-eMmw1eZF.js +0 -1
  209. package/src/assets/web-panel/assets/GenericCardRenderer-BMAtvGt1.js +0 -1
  210. package/src/assets/web-panel/assets/OrderTableRenderer-Dyrnqy_o.js +0 -1
  211. package/src/assets/web-panel/assets/TimelineRenderer-CnudkJxk.js +0 -1
  212. package/src/assets/web-panel/assets/devWarning-DxufPwXC.js +0 -1
  213. package/src/assets/web-panel/assets/index-ZMTB9p5z.js +0 -1
  214. package/src/assets/web-panel/assets/index-_PvIDelE.js +0 -1
@@ -56,7 +56,7 @@
56
56
  "ecosystem": "Usage: chainlesschain ecosystem|eco [options] [command]\n\nPlugin Ecosystem 2.0 (Phase 64) — registry + deps + install + AI review +\npublish + revenue + recommend\n\nOptions:\n -h, --help display help for command\n\nCommands:\n config Show ecosystem config (severities, statuses, rules, defaults)\n severities List review severities\n statuses List publish / install statuses\n revenue-types List revenue event types\n dep-kinds List dependency kinds\n rules List heuristic AI review rules\n register [options] Register a new plugin (status=draft)\n plugins [options] List plugins\n show <pluginId> Show plugin details\n update-stats [options] <pluginId> Update download count / avg rating\n dep-add [options] <pluginId> Add a dependency to a plugin\n deps <pluginId> List direct dependencies of a plugin\n resolve <pluginId> Resolve dependency tree (detects conflicts + cycles)\n install [options] Install a plugin for a user (auto-fails on cycle/conflict)\n installs [options] List install records\n uninstall <installId> Mark an install as uninstalled\n review [options] <pluginId> Run heuristic AI code review (regex rules + score)\n review-show <reviewId> Show a single review record\n reviews [options] List review records\n sandbox [options] <pluginId> Record a sandbox test result (caller pushes outcome)\n sandbox-show <testId> Show a single sandbox test record\n sandbox-tests [options] List sandbox test records\n submit <pluginId> Submit a plugin for review (draft/rejected → reviewing)\n approve <pluginId> Approve a reviewing plugin\n reject [options] <pluginId> Reject a reviewing plugin (appends a rejection review record)\n publish [options] <pluginId> Publish an approved plugin (computes sourceHash)\n rev-record [options] Record a revenue event (splits via developerShareRatio)\n revenue [options] <developerId> Aggregate a developer's revenue\n recommend [options] Heuristic plugin recommendations for a user\n stats Show ecosystem stats\n maturity-statuses-v2 List V2 plugin maturity statuses\n install-lifecycle-v2 List V2 install lifecycle statuses\n default-max-active-plugins-per-developer Show V2 default max active plugins per developer\n max-active-plugins-per-developer Show current V2 max active plugins per developer\n set-max-active-plugins-per-developer <n> Set V2 max active plugins per developer\n default-max-pending-installs-per-user Show V2 default max pending installs per user\n max-pending-installs-per-user Show current V2 max pending installs per user\n set-max-pending-installs-per-user <n> Set V2 max pending installs per user\n default-auto-deprecate-after-ms Show V2 default auto-deprecate threshold (ms)\n auto-deprecate-after-ms Show current V2 auto-deprecate threshold (ms)\n set-auto-deprecate-after-ms <ms> Set V2 auto-deprecate threshold (ms)\n default-auto-archive-after-ms Show V2 default auto-archive threshold (ms)\n auto-archive-after-ms Show current V2 auto-archive threshold (ms)\n set-auto-archive-after-ms <ms> Set V2 auto-archive threshold (ms)\n active-plugin-count [options] Count V2 active plugins (optionally scoped)\n pending-install-count [options] Count V2 pending+resolving installs (optionally scoped)\n register-plugin-v2 [options] <plugin-id> Register V2 plugin (status=active)\n maturity-v2 <plugin-id> Show V2 plugin maturity\n set-maturity-v2 [options] <plugin-id> <status> Transition V2 plugin maturity\n deprecate-plugin [options] <plugin-id> Deprecate V2 plugin\n archive-plugin-v2 [options] <plugin-id> Archive V2 plugin\n remove-plugin-v2 [options] <plugin-id> Remove V2 plugin (terminal)\n touch-plugin-activity <plugin-id> Bump lastActivityAt for V2 plugin\n submit-install-v2 [options] <install-id> Submit V2 install (status=pending)\n install-status-v2 <install-id> Show V2 install status\n set-install-status-v2 [options] <install-id> <status> Transition V2 install status\n resolve-install [options] <install-id> Mark V2 install as resolving\n complete-install [options] <install-id> Mark V2 install as installed\n fail-install [options] <install-id> Mark V2 install as failed\n uninstall-install-v2 [options] <install-id> Mark V2 install as uninstalled (terminal)\n retry-failed-install [options] <install-id> Retry a failed V2 install (failed → pending)\n auto-deprecate-stale-plugins Bulk-flip stale V2 ACTIVE plugins to DEPRECATED\n auto-archive-long-deprecated Bulk-flip long-deprecated V2 plugins to ARCHIVED\n stats-v2 Show V2 ecosystem stats (maturity + install)\n help [command] display help for command\n",
57
57
  "encrypt": "Usage: chainlesschain encrypt [options] [command]\n\nFile encryption and database encryption management\n\nOptions:\n -h, --help display help for command\n\nCommands:\n file [options] <path> Encrypt a file with AES-256-GCM\n db [options] Enable database encryption tracking\n info [options] <path> Check if a file is encrypted\n status [options] Show database encryption status\n key-maturities-v2 [options] [V2] List crypto key maturity states\n job-lifecycles-v2 [options] [V2] List crypto job lifecycle states\n config-v2 [options] [V2] Show governance config\n set-max-active-keys-per-owner-v2 <n> [V2] Set per-owner active key cap\n set-max-pending-jobs-per-key-v2 <n> [V2] Set per-key pending job cap\n set-key-idle-ms-v2 <ms> [V2] Set key idle threshold (ms)\n set-job-stuck-ms-v2 <ms> [V2] Set job stuck threshold (ms)\n register-key-v2 [options] <id> [V2] Register a crypto key profile\n (PENDING)\n activate-key-v2 <id> [V2] Activate key (pending|rotated ->\n active)\n rotate-key-v2 <id> [V2] Rotate key (active -> rotated)\n retire-key-v2 <id> [V2] Retire key (terminal)\n touch-key-v2 <id> [V2] Bump key lastSeenAt\n get-key-v2 [options] <id> [V2] Show crypto key profile\n list-keys-v2 [options] [V2] List crypto key profiles\n create-job-v2 [options] <id> [V2] Create a queued V2 crypto job\n start-job-v2 <id> [V2] Start crypto job (queued ->\n running)\n complete-job-v2 <id> [V2] Complete crypto job (running ->\n completed)\n fail-job-v2 <id> [V2] Fail crypto job (running ->\n failed)\n cancel-job-v2 <id> [V2] Cancel crypto job (queued|running\n -> cancelled)\n get-job-v2 [options] <id> [V2] Show crypto job\n list-jobs-v2 [options] [V2] List V2 crypto jobs\n active-key-count-v2 [options] [V2] Count active crypto keys (optional\n --owner)\n pending-job-count-v2 [options] [V2] Count pending crypto jobs\n (queued+running)\n auto-rotate-idle-keys-v2 [options] [V2] Rotate idle active keys\n auto-fail-stuck-jobs-v2 [options] [V2] Fail stuck running crypto jobs\n stats-v2 [options] [V2] Show governance stats\n help [command] display help for command\n",
58
58
  "eval": "Usage: chainlesschain eval [options]\n\nRun the reliability eval suite (self-checking coding tasks) and report the\ntask-success rate\n\nOptions:\n --suite <name> Suite to run (default: \"builtin\")\n --model <model> Model for the agent runs\n --provider <provider> Provider for the agent runs\n --json Output the summary as JSON\n --keep Keep the per-task temp workspaces (debug)\n --otlp <file> Write OpenTelemetry (OTLP/JSON) spans for the\n run to a file\n --dry-run Use a no-op agent (exercise the harness/report\n without a model)\n --history <file> Append this run's summary (JSONL) for trend\n tracking\n --label <label> Tag this run in the history (e.g. a\n version/commit)\n --trend Report the pass-rate trend from --history\n instead of running (CI gate)\n --regression-threshold <pct> With --trend: pass-rate drop (in points) that\n fails the gate on its own (default: \"0\")\n -h, --help display help for command\n",
59
- "evolution": "Usage: chainlesschain evolution [options] [command]\n\nEvolution metrics and governance records — not model training or active Skill\npromotion\n\nOptions:\n -h, --help display help for command\n\nCommands:\n assess [options] <name> <score> Assess and track a capability\n record-model-metrics [options] <model-id> Record a synthetic model metric estimate (no training)\n diagnose [options] Diagnose recorded evolution metrics\n repair [options] <issue> Apply a maintenance strategy to a recorded diagnosis\n predict [options] [user-id] Predict user behavior\n growth [options] Show growth log\n stats [options] Show capabilities and models overview\n export [options] <model-id> Export a model metric record for portability\n dimensions [options] List CAPABILITY_DIMENSION enum\n severities [options] List DIAGNOSIS_SEVERITY enum\n strategies [options] List REPAIR_STRATEGY enum\n milestones [options] List GROWTH_MILESTONE enum\n assess-v2 [options] <dimension> <score> Assess capability by canonical dimension\n capabilities-v2 [options] List V2 capabilities\n record-training-metrics-v2 [options] Record caller-supplied loss metrics (no training)\n training-metrics-v2 [options] List V2 training metric records\n diagnose-v2 [options] Diagnose recorded V2 evolution metrics\n diagnoses-v2 [options] List V2 diagnoses\n diagnosis-show [options] <id> Show a specific diagnosis\n repair-v2 [options] <diagnosis-id> Record a V2 maintenance strategy for a diagnosis\n predict-v2 [options] Project behavior from recorded V2 metrics\n record-milestone [options] <type> Record a growth milestone explicitly\n growth-v2 [options] List V2 growth milestones\n configure [options] Update evolution config\n config [options] Show evolution config\n stats-v2 [options] V2 evolution stats\n enums-v2 Show V2 enums (goal maturity + cycle lifecycle)\n config-v2 Show V2 config thresholds\n set-max-active-goals-v2 <n> Set max active goals per owner\n set-max-pending-cycles-v2 <n> Set max pending cycles per goal\n set-goal-idle-ms-v2 <n> Set goal idle threshold (ms)\n set-cycle-stuck-ms-v2 <n> Set cycle stuck threshold (ms)\n register-goal-v2 [options] <id> <owner> Register V2 evo goal\n activate-goal-v2 <id> Activate evo goal\n pause-goal-v2 <id> Pause evo goal\n archive-goal-v2 <id> Archive goal (terminal)\n touch-goal-v2 <id> Touch goal lastTouchedAt\n get-goal-v2 <id> Get V2 goal\n list-goals-v2 List all V2 goals\n create-cycle-v2 [options] <id> <goalId> Create V2 cycle (queued)\n start-cycle-v2 <id> Start cycle (queued→running)\n complete-cycle-v2 <id> Complete cycle (running→completed)\n fail-cycle-v2 <id> [reason] Fail cycle\n cancel-cycle-v2 <id> [reason] Cancel cycle\n get-cycle-v2 <id> Get V2 cycle\n list-cycles-v2 List all V2 cycles\n auto-pause-idle-v2 Auto-pause idle active goals\n auto-fail-stuck-v2 Auto-fail stuck running cycles\n gov-stats-v2 V2 governance aggregate stats\n help [command] display help for command\n",
59
+ "evolution": "Usage: chainlesschain evolution [options] [command]\n\nEvolution metrics and governance records — not model training or active Skill\npromotion\n\nOptions:\n -h, --help display help for command\n\nCommands:\n workbench Review governed Skill evolution evidence and versions\n knowledge Review encrypted governed knowledge conflicts\n assess [options] <name> <score> Assess and track a capability\n record-model-metrics [options] <model-id> Record a synthetic model metric estimate (no training)\n diagnose [options] Diagnose recorded evolution metrics\n repair [options] <issue> Apply a maintenance strategy to a recorded diagnosis\n predict [options] [user-id] Predict user behavior\n growth [options] Show growth log\n stats [options] Show capabilities and models overview\n export [options] <model-id> Export a model metric record for portability\n dimensions [options] List CAPABILITY_DIMENSION enum\n severities [options] List DIAGNOSIS_SEVERITY enum\n strategies [options] List REPAIR_STRATEGY enum\n milestones [options] List GROWTH_MILESTONE enum\n assess-v2 [options] <dimension> <score> Assess capability by canonical dimension\n capabilities-v2 [options] List V2 capabilities\n record-training-metrics-v2 [options] Record caller-supplied loss metrics (no training)\n training-metrics-v2 [options] List V2 training metric records\n diagnose-v2 [options] Diagnose recorded V2 evolution metrics\n diagnoses-v2 [options] List V2 diagnoses\n diagnosis-show [options] <id> Show a specific diagnosis\n repair-v2 [options] <diagnosis-id> Record a V2 maintenance strategy for a diagnosis\n predict-v2 [options] Project behavior from recorded V2 metrics\n record-milestone [options] <type> Record a growth milestone explicitly\n growth-v2 [options] List V2 growth milestones\n configure [options] Update evolution config\n config [options] Show evolution config\n stats-v2 [options] V2 evolution stats\n enums-v2 Show V2 enums (goal maturity + cycle lifecycle)\n config-v2 Show V2 config thresholds\n set-max-active-goals-v2 <n> Set max active goals per owner\n set-max-pending-cycles-v2 <n> Set max pending cycles per goal\n set-goal-idle-ms-v2 <n> Set goal idle threshold (ms)\n set-cycle-stuck-ms-v2 <n> Set cycle stuck threshold (ms)\n register-goal-v2 [options] <id> <owner> Register V2 evo goal\n activate-goal-v2 <id> Activate evo goal\n pause-goal-v2 <id> Pause evo goal\n archive-goal-v2 <id> Archive goal (terminal)\n touch-goal-v2 <id> Touch goal lastTouchedAt\n get-goal-v2 <id> Get V2 goal\n list-goals-v2 List all V2 goals\n create-cycle-v2 [options] <id> <goalId> Create V2 cycle (queued)\n start-cycle-v2 <id> Start cycle (queued→running)\n complete-cycle-v2 <id> Complete cycle (running→completed)\n fail-cycle-v2 <id> [reason] Fail cycle\n cancel-cycle-v2 <id> [reason] Cancel cycle\n get-cycle-v2 <id> Get V2 cycle\n list-cycles-v2 List all V2 cycles\n auto-pause-idle-v2 Auto-pause idle active goals\n auto-fail-stuck-v2 Auto-fail stuck running cycles\n gov-stats-v2 V2 governance aggregate stats\n help [command] display help for command\n",
60
60
  "evomap": "Usage: chainlesschain evomap [options] [command]\n\nEvoMap — gene exchange protocol for agent capabilities\n\nOptions:\n -h, --help display help for command\n\nCommands:\n search [options] <query> Search for genes on the hub\n download <geneId> Download a gene from the hub\n publish [options] Publish a gene to the hub\n list List locally installed genes\n hubs List configured EvoMap hubs\n federation Federated hub management and gene syncing\n gov EvoMap governance — ownership, proposals,\n voting\n enums-v2 Show V2 governance enums\n register-map-v2 [options] Register an evomap profile (pending)\n activate-map-v2 <id> Activate map\n stale-map-v2 <id> Mark map stale\n archive-map-v2 <id> Archive map (terminal)\n touch-map-v2 <id> Refresh lastTouchedAt\n get-map-v2 <id> Get map\n list-maps-v2 List maps\n create-evolution-v2 [options] Create an evolution (queued)\n start-evolution-v2 <id> Transition evolution to running\n complete-evolution-v2 <id> Transition evolution to completed\n fail-evolution-v2 [options] <id> Fail evolution\n cancel-evolution-v2 [options] <id> Cancel evolution\n get-evolution-v2 <id> Get evolution\n list-evolutions-v2 List evolutions\n set-max-active-maps-v2 <n> Set per-owner active cap\n set-max-pending-evolutions-v2 <n> Set per-map pending cap\n set-map-idle-ms-v2 <n> Set idle threshold\n set-evolution-stuck-ms-v2 <n> Set stuck threshold\n auto-stale-idle-maps-v2 Auto-stale idle maps\n auto-fail-stuck-evolutions-v2 Auto-fail stuck running evolutions\n gov-stats-v2 V2 governance aggregate stats\n help [command] display help for command\n",
61
61
  "execbe": "Usage: chainlesschain execbe [options] [command]\n\nExecution backend V2 governance\n\nOptions:\n -h, --help display help for command\n\nCommands:\n maturities-v2\n job-lifecycle-v2\n stats-v2\n config-v2\n register-backend-v2 <id> <owner> [kind]\n activate-backend-v2 <id>\n degrade-backend-v2 <id>\n retire-backend-v2 <id>\n touch-backend-v2 <id>\n get-backend-v2 <id>\n list-backends-v2\n create-job-v2 <id> <backendId> [cmd]\n start-job-v2 <id>\n succeed-job-v2 <id>\n fail-job-v2 <id> [reason]\n cancel-job-v2 <id> [reason]\n get-job-v2 <id>\n list-jobs-v2\n auto-degrade-idle-v2\n auto-fail-stuck-v2\n set-max-active-v2 <n>\n set-max-pending-v2 <n>\n set-idle-ms-v2 <n>\n set-stuck-ms-v2 <n>\n reset-state-v2\n help [command] display help for command\n",
62
62
  "export": "Usage: chainlesschain export [options] [command]\n\nExport knowledge base to external formats\n\nOptions:\n -h, --help display help for command\n\nCommands:\n markdown [options] Export notes as markdown files\n site [options] Export notes as a static HTML website\n target-maturities-v2 List V2 target maturity states\n export-job-lifecycles-v2 List V2 export-job lifecycle states\n stats-v2 V2 knowledge-exporter stats\n get-max-active-targets-v2 Get max active targets per owner (V2)\n set-max-active-targets-v2 <n> Set max active targets per owner (V2)\n get-max-pending-jobs-v2 Get max pending jobs per target (V2)\n set-max-pending-jobs-v2 <n> Set max pending jobs per target (V2)\n get-target-idle-ms-v2 Get target idle threshold (V2)\n set-target-idle-ms-v2 <ms> Set target idle threshold (V2)\n get-job-stuck-ms-v2 Get export-job stuck threshold (V2)\n set-job-stuck-ms-v2 <ms> Set export-job stuck threshold (V2)\n active-target-count-v2 <ownerId> Active target count for owner (V2)\n pending-job-count-v2 <targetId> Pending export-job count for target\n (V2)\n register-target-v2 [options] <id> Register a V2 export target\n get-target-v2 <id> Get a V2 target\n list-targets-v2 [options] List V2 targets\n set-target-status-v2 <id> <next> Set V2 target status\n activate-target-v2 <id> Activate a V2 target\n pause-target-v2 <id> Pause a V2 target\n archive-target-v2 <id> Archive a V2 target\n touch-target-v2 <id> Touch a V2 target\n create-export-job-v2 [options] <id> Create a V2 export job\n get-export-job-v2 <id> Get a V2 export job\n list-export-jobs-v2 [options] List V2 export jobs\n set-export-job-status-v2 <id> <next> Set V2 export-job status\n start-export-job-v2 <id> Start a V2 export job\n complete-export-job-v2 <id> Complete a V2 export job\n fail-export-job-v2 <id> Fail a V2 export job\n cancel-export-job-v2 <id> Cancel a V2 export job\n auto-pause-idle-targets-v2 Auto-pause idle V2 targets\n auto-fail-stuck-export-jobs-v2 Auto-fail stuck V2 export jobs\n help [command] display help for command\n",
@@ -144,7 +144,7 @@
144
144
  "setup": "Usage: chainlesschain setup [options]\n\nInteractive setup wizard for ChainlessChain\n\nOptions:\n --skip-download Skip binary download\n --skip-services Skip Docker service setup\n -h, --help display help for command\n",
145
145
  "sganal": "Usage: chainlesschain sganal [options] [command]\n\nSocial Graph Analytics V2 governance (in-memory, CLI v0.143.0)\n\nOptions:\n -h, --help display help for command\n\nCommands:\n enums-v2\n register-profile-v2 [options]\n activate-profile-v2 <id>\n stale-profile-v2 <id>\n archive-profile-v2 <id>\n touch-profile-v2 <id>\n get-profile-v2 <id>\n list-profiles-v2\n create-run-v2 [options]\n running-run-v2 <id>\n complete-run-v2 <id>\n fail-run-v2 [options] <id>\n cancel-run-v2 [options] <id>\n get-run-v2 <id>\n list-runs-v2\n config-v2\n set-max-active-profiles-v2 <n>\n set-max-pending-runs-v2 <n>\n set-profile-idle-ms-v2 <ms>\n set-run-stuck-ms-v2 <ms>\n auto-stale-idle-v2\n auto-fail-stuck-v2\n gov-stats-v2\n help [command] display help for command\n",
146
146
  "siem": "Usage: chainlesschain siem [options] [command]\n\nSIEM integration — log export to external targets\n\nOptions:\n -h, --help display help for command\n\nCommands:\n targets [options] List SIEM export targets\n add-target [options] <type> <url> Add a SIEM target (splunk_hec, elasticsearch, azure_sentinel)\n export <target-id> Export logs to a SIEM target\n stats [options] Show SIEM export statistics\n formats List SIEM export formats (V2)\n target-types List SIEM target types (V2)\n severities List SIEM severity levels (V2)\n statuses List SIEM target statuses (V2)\n default-batch-size Show default SIEM batch size (V2)\n severity-cef <severity> Map a SIEM severity to its CEF integer (0-10)\n format-log [options] <format> Format a JSON log payload as cef|leef|json\n add-target-v2 [options] Add a SIEM target via canonical options (V2)\n remove-target <target-id> Remove a SIEM target (V2)\n set-status <target-id> <status> Transition a SIEM target's status (V2)\n export-v2 [options] <target-id> Batch-export logs to a target (V2)\n stats-v2 Show extended SIEM stats (byFormat/byType/byStatus, V2)\n by-status <status> List SIEM targets filtered by status (V2)\n enums-v2 Show V2 enums (target maturity + export lifecycle)\n config-v2 Show V2 config thresholds\n set-max-active-targets-v2 <n> Set max active targets per operator\n set-max-pending-exports-v2 <n> Set max pending exports per target\n set-target-idle-ms-v2 <n> Set target idle threshold (ms)\n set-export-stuck-ms-v2 <n> Set export stuck threshold (ms)\n register-target-v2 [options] <id> <operator> Register V2 SIEM target\n activate-target-v2 <id> Activate target\n degrade-target-v2 <id> Degrade target\n retire-target-v2 <id> Retire target (terminal)\n touch-target-v2 <id> Touch target lastTouchedAt\n get-target-v2 <id> Get V2 target\n list-targets-v2 List V2 targets\n create-export-v2 [options] <id> <targetId> Create V2 export (queued)\n start-export-v2 <id> Start export\n deliver-export-v2 <id> Deliver export\n fail-export-v2 <id> [reason] Fail export\n cancel-export-v2 <id> [reason] Cancel export\n get-export-v2 <id> Get V2 export\n list-exports-v2 List V2 exports\n auto-degrade-idle-v2 Auto-degrade idle targets\n auto-fail-stuck-v2 Auto-fail stuck sending exports\n gov-stats-v2 V2 governance aggregate stats\n help [command] display help for command\n",
147
- "skill": "Usage: chainlesschain skill [options] [command]\n\nManage and run AI skills (multi-layer: bundled + global + project)\n\nOptions:\n -h, --help display help for command\n\nCommands:\n recording|record-replay Record, review, replay, enable, and\n govern deterministic UI skills\n list [options] List all available skills\n categories List skill categories\n info [options] <name> Show detailed info about a skill\n search <query> Search skills by keyword\n run [options] <name> [input...] Execute a skill through a controlled\n agent/tool route\n add [options] <name> Create a custom skill\n remove [options] <name> Remove a custom skill (project or\n global)\n sync-cli [options] Generate or update CLI command skill\n packs (9 domain packs wrapping all 62\n CLI commands)\n sources [options] Show skill source layers, paths, and\n counts\n skill-maturities-v2 List V2 skill maturity states\n execution-lifecycles-v2 List V2 execution lifecycle states\n stats-v2 V2 skill-loader stats\n get-max-active-skills-v2 Get max active skills per owner (V2)\n set-max-active-skills-v2 <n> Set max active skills per owner (V2)\n get-max-pending-executions-v2 Get max pending executions per skill\n (V2)\n set-max-pending-executions-v2 <n> Set max pending executions per skill\n (V2)\n get-skill-idle-ms-v2 Get skill idle threshold (V2)\n set-skill-idle-ms-v2 <ms> Set skill idle threshold (V2)\n get-exec-stuck-ms-v2 Get execution stuck threshold (V2)\n set-exec-stuck-ms-v2 <ms> Set execution stuck threshold (V2)\n active-skill-count-v2 <ownerId> Active skill count for owner (V2)\n pending-execution-count-v2 <skillId> Pending execution count for skill (V2)\n register-skill-v2 [options] <id> Register a V2 skill\n get-skill-v2 <id> Get a V2 skill\n list-skills-v2 [options] List V2 skills\n set-skill-status-v2 <id> <next> Set V2 skill status\n activate-skill-v2 <id> Activate a V2 skill\n deprecate-skill-v2 <id> Deprecate a V2 skill\n archive-skill-v2 <id> Archive a V2 skill\n touch-skill-v2 <id> Touch a V2 skill\n create-execution-v2 [options] <id> Create a V2 execution\n get-execution-v2 <id> Get a V2 execution\n list-executions-v2 [options] List V2 executions\n set-execution-status-v2 <id> <next> Set V2 execution status\n start-execution-v2 <id> Start a V2 execution\n succeed-execution-v2 <id> Succeed a V2 execution\n fail-execution-v2 <id> Fail a V2 execution\n cancel-execution-v2 <id> Cancel a V2 execution\n auto-deprecate-idle-skills-v2 Auto-deprecate idle V2 skills\n auto-fail-stuck-executions-v2 Auto-fail stuck V2 executions\n help [command] display help for command\n",
147
+ "skill": "Usage: chainlesschain skill [options] [command]\n\nManage and run AI skills (multi-layer: bundled + global + project)\n\nOptions:\n -h, --help display help for command\n\nCommands:\n recording|record-replay Record, review, replay, enable, and\n govern deterministic UI skills\n list [options] List all available skills\n categories List skill categories\n info [options] <name> Show detailed info about a skill\n search [options] <query> Search digest-bound skills with the\n canonical router\n run [options] <name> [input...] Execute a skill through a controlled\n agent/tool route\n add [options] <name> Create a custom skill\n remove [options] <name> Remove a custom skill (project or\n global)\n sync-cli [options] Generate or update CLI command skill\n packs (9 domain packs wrapping all 62\n CLI commands)\n sources [options] Show skill source layers, paths, and\n counts\n skill-maturities-v2 List V2 skill maturity states\n execution-lifecycles-v2 List V2 execution lifecycle states\n stats-v2 V2 skill-loader stats\n get-max-active-skills-v2 Get max active skills per owner (V2)\n set-max-active-skills-v2 <n> Set max active skills per owner (V2)\n get-max-pending-executions-v2 Get max pending executions per skill\n (V2)\n set-max-pending-executions-v2 <n> Set max pending executions per skill\n (V2)\n get-skill-idle-ms-v2 Get skill idle threshold (V2)\n set-skill-idle-ms-v2 <ms> Set skill idle threshold (V2)\n get-exec-stuck-ms-v2 Get execution stuck threshold (V2)\n set-exec-stuck-ms-v2 <ms> Set execution stuck threshold (V2)\n active-skill-count-v2 <ownerId> Active skill count for owner (V2)\n pending-execution-count-v2 <skillId> Pending execution count for skill (V2)\n register-skill-v2 [options] <id> Register a V2 skill\n get-skill-v2 <id> Get a V2 skill\n list-skills-v2 [options] List V2 skills\n set-skill-status-v2 <id> <next> Set V2 skill status\n activate-skill-v2 <id> Activate a V2 skill\n deprecate-skill-v2 <id> Deprecate a V2 skill\n archive-skill-v2 <id> Archive a V2 skill\n touch-skill-v2 <id> Touch a V2 skill\n create-execution-v2 [options] <id> Create a V2 execution\n get-execution-v2 <id> Get a V2 execution\n list-executions-v2 [options] List V2 executions\n set-execution-status-v2 <id> <next> Set V2 execution status\n start-execution-v2 <id> Start a V2 execution\n succeed-execution-v2 <id> Succeed a V2 execution\n fail-execution-v2 <id> Fail a V2 execution\n cancel-execution-v2 <id> Cancel a V2 execution\n auto-deprecate-idle-skills-v2 Auto-deprecate idle V2 skills\n auto-fail-stuck-executions-v2 Auto-fail stuck V2 executions\n help [command] display help for command\n",
148
148
  "sla": "Usage: chainlesschain sla [options] [command]\n\nCross-org SLA management — contracts, metrics, violations, compensation\n\nOptions:\n -h, --help display help for command\n\nCommands:\n tiers [options] List built-in SLA tiers\n create [options] <org-id> Create a new SLA contract\n list [options] List SLA contracts\n show [options] <sla-id> Show a single SLA contract\n terminate <sla-id> Terminate an SLA contract\n record [options] <sla-id> <term> <value> Record a metric (term: availability|response_time|throughput|error_rate)\n metrics [options] <sla-id> Show aggregated metrics for an SLA\n check [options] <sla-id> Detect violations against the contract's terms\n violations [options] List recorded violations\n compensate [options] <violation-id> Calculate compensation for a violation\n report [options] <sla-id> Generate an SLA compliance report\n statuses List SLA_STATUS_V2 values\n tier-names List SLA_TIER_V2 values\n term-names List SLA_TERM_V2 values\n severities List VIOLATION_SEVERITY_V2 values\n violation-statuses List VIOLATION_STATUS_V2 values\n default-max-active Show SLA_DEFAULT_MAX_ACTIVE_PER_ORG\n max-active Show current max active SLAs per org\n set-max-active <n> Set per-org active-contract admission cap\n active-count <org-id> Show active SLA count for an org\n create-v2 [options] <org-id> Create a V2 SLA contract (enforces per-org active cap)\n set-status <sla-id> <status> Transition SLA to a given status (state-machine guarded)\n expire <sla-id> Expire an SLA (shortcut for set-status ... expired)\n auto-expire [options] Bulk-flip ACTIVE contracts past endDate to EXPIRED\n set-violation-status [options] <violation-id> <status> Transition a violation (open→{acknowledged,resolved,waived})\n acknowledge-violation [options] <violation-id> Acknowledge a violation\n resolve-violation [options] <violation-id> Resolve a violation\n waive-violation [options] <violation-id> Waive a violation\n stats-v2 Show aggregate V2 SLA stats (byStatus/byTier/violations)\n help [command] display help for command\n",
149
149
  "slotfill": "Usage: chainlesschain slotfill [options] [command]\n\nSlot Filler V2 governance\n\nOptions:\n -h, --help display help for command\n\nCommands:\n enums-v2\n config-v2\n set-max-active-v2 <n>\n set-max-pending-v2 <n>\n set-idle-ms-v2 <n>\n set-stuck-ms-v2 <n>\n register-template-v2 [options] <id> <owner>\n activate-template-v2 <id>\n stale-template-v2 <id>\n archive-template-v2 <id>\n touch-template-v2 <id>\n get-template-v2 <id>\n list-templates-v2\n create-fill-v2 [options] <id> <templateId>\n filling-fill-v2 <id>\n fill-fill-v2 <id>\n fail-fill-v2 <id> [reason]\n cancel-fill-v2 <id> [reason]\n get-fill-v2 <id>\n list-fills-v2\n auto-stale-idle-v2\n auto-fail-stuck-v2\n gov-stats-v2\n reset-state-v2\n help [command] display help for command\n",
150
150
  "social": "Usage: chainlesschain social [options] [command]\n\nSocial platform — contacts, friends, posts, chat\n\nOptions:\n -h, --help display help for command\n\nCommands:\n contact Contact management\n friend Friend management\n post Social posts\n chat Direct messaging\n stats [options] Show social statistics\n analyze [options] <text> Classify text into topics (language-aware, multilingual)\n detect-lang [options] <text> Detect dominant language of text (zh|ja|en|other)\n graph Social graph — typed edges, neighbors, live event stream\n relationship-maturities-v2 [options] List V2 relationship maturity states\n thread-lifecycles-v2 [options] List V2 thread lifecycle states\n stats-v2 [options] Show V2 social stats\n get-max-connected-v2 Get max connected per user\n set-max-connected-v2 <n> Set max connected per user\n get-max-open-threads-v2 Get max open threads per user\n set-max-open-threads-v2 <n> Set max open threads per user\n get-relationship-idle-ms-v2 Get relationship idle ms\n set-relationship-idle-ms-v2 <ms> Set relationship idle ms\n get-thread-stuck-ms-v2 Get thread stuck ms\n set-thread-stuck-ms-v2 <ms> Set thread stuck ms\n connected-count-v2 <userId> Count connected relationships for user\n open-thread-count-v2 <userId> Count open+engaged threads for user\n register-relationship-v2 [options] <id> Register V2 relationship (initial=pending)\n get-relationship-v2 <id> Get V2 relationship by id\n list-relationships-v2 [options] List V2 relationships\n connect-relationship-v2 <id> Transition relationship → connected\n mute-relationship-v2 <id> Transition relationship → muted\n block-relationship-v2 <id> Transition relationship → blocked (terminal)\n touch-relationship-v2 <id> Update relationship lastSeenAt\n create-thread-v2 [options] <id> Create V2 thread (initial=open)\n get-thread-v2 <id> Get V2 thread by id\n list-threads-v2 [options] List V2 threads\n engage-thread-v2 <id> Transition thread → engaged\n resolve-thread-v2 <id> Transition thread → resolved (terminal)\n abandon-thread-v2 <id> Transition thread → abandoned (terminal)\n report-thread-v2 <id> Transition thread → reported (terminal)\n auto-mute-idle-rel-v2 Auto-mute idle connected relationships; output flipped\n auto-abandon-stuck-threads-v2 Auto-abandon stuck threads; output flipped\n sg-enums-v2\n sg-config-v2\n sg-set-max-active-v2 <n>\n sg-set-max-pending-v2 <n>\n sg-set-idle-ms-v2 <n>\n sg-set-stuck-ms-v2 <n>\n sg-register-node-v2 [options] <id> <owner>\n sg-activate-node-v2 <id>\n sg-deactivate-node-v2 <id>\n sg-remove-node-v2 <id>\n sg-touch-node-v2 <id>\n sg-get-node-v2 <id>\n sg-list-nodes-v2\n sg-create-edge-v2 [options] <id> <nodeId>\n sg-establish-edge-v2 <id>\n sg-sever-edge-v2 <id> [reason]\n sg-expire-edge-v2 <id>\n sg-cancel-edge-v2 <id> [reason]\n sg-get-edge-v2 <id>\n sg-list-edges-v2\n sg-auto-deactivate-idle-v2\n sg-auto-expire-stale-v2\n sg-gov-stats-v2\n sg-reset-state-v2\n help [command] display help for command\n",
@@ -10,7 +10,11 @@ import path from "node:path";
10
10
  import fs from "node:fs";
11
11
  import { randomUUID } from "node:crypto";
12
12
  import { createAgentRuntimeFactory } from "../runtime/runtime-factory.js";
13
- import { captureAgentEvolutionRuntimeComposition } from "../lib/evolution/agent-evolution-runtime-composition-brand.js";
13
+ import {
14
+ captureAgentEvolutionRuntimeComposition,
15
+ captureAgentSkillOutcomeIndex,
16
+ } from "../lib/evolution/agent-evolution-runtime-composition-brand.js";
17
+ import { captureSkillVectorAuthority } from "../lib/skill-vector-authority.js";
14
18
  import { resolvePromptText } from "../runtime/system-prompt.js";
15
19
  import {
16
20
  makeFallbackChatFn,
@@ -264,6 +268,14 @@ export async function resolveAgentCommandEvolutionComposition(
264
268
  export function registerAgentCommand(program, dependencies = {}) {
265
269
  const evolutionCompositionFactory =
266
270
  dependencies.evolutionCompositionFactory ?? null;
271
+ const skillOutcomeIndex =
272
+ dependencies.skillOutcomeIndex == null
273
+ ? null
274
+ : captureAgentSkillOutcomeIndex(dependencies.skillOutcomeIndex);
275
+ const skillVectorAuthority =
276
+ dependencies.skillVectorAuthority == null
277
+ ? null
278
+ : captureSkillVectorAuthority(dependencies.skillVectorAuthority);
267
279
  program
268
280
  .command("agent")
269
281
  .aliases(["a", "exec"])
@@ -1558,6 +1570,8 @@ export function registerAgentCommand(program, dependencies = {}) {
1558
1570
  // appended after each turn (parity with single-prompt --json-schema).
1559
1571
  jsonSchema: options.jsonSchema || null,
1560
1572
  claudeStorageLaunchEnv,
1573
+ ...(skillOutcomeIndex === null ? {} : { skillOutcomeIndex }),
1574
+ ...(skillVectorAuthority === null ? {} : { skillVectorAuthority }),
1561
1575
  ...(evolutionComposition === null
1562
1576
  ? {}
1563
1577
  : { evolutionIngress: evolutionComposition.evolutionIngress }),
@@ -1898,6 +1912,8 @@ export function registerAgentCommand(program, dependencies = {}) {
1898
1912
  // --fallback-model: retry once on a backup model on transient errors
1899
1913
  chatFn: fallbackChatFn,
1900
1914
  claudeStorageLaunchEnv,
1915
+ ...(skillOutcomeIndex === null ? {} : { skillOutcomeIndex }),
1916
+ ...(skillVectorAuthority === null ? {} : { skillVectorAuthority }),
1901
1917
  ...(evolutionComposition === null
1902
1918
  ? {}
1903
1919
  : { evolutionIngress: evolutionComposition.evolutionIngress }),
@@ -2010,6 +2026,8 @@ export function registerAgentCommand(program, dependencies = {}) {
2010
2026
  }
2011
2027
  const runtime = createAgentRuntimeFactory({
2012
2028
  evolutionComposition,
2029
+ skillOutcomeIndex,
2030
+ skillVectorAuthority,
2013
2031
  }).createAgentRuntime({
2014
2032
  model: options.model,
2015
2033
  thinking,
@@ -0,0 +1,54 @@
1
+ import { intArg } from "../lib/cli-arg.js";
2
+ import { isGovernedKnowledgeReviewHost } from "../lib/evolution/governed-knowledge-review-host.js";
3
+ import { parseJsonOption } from "../lib/parse-json-option.js";
4
+
5
+ function host(value) {
6
+ if (!isGovernedKnowledgeReviewHost(value)) {
7
+ throw new Error(
8
+ "Governed knowledge review is unavailable: a trusted deployment host is required",
9
+ );
10
+ }
11
+ return value;
12
+ }
13
+
14
+ function output(value) {
15
+ console.log(JSON.stringify(value, null, 2));
16
+ }
17
+
18
+ export function registerGovernedKnowledgeCommands(
19
+ evolution,
20
+ { governedKnowledgeReviewHost = null } = {},
21
+ ) {
22
+ const knowledge = evolution
23
+ .command("knowledge")
24
+ .description("Review encrypted governed knowledge conflicts");
25
+
26
+ knowledge
27
+ .command("conflicts")
28
+ .description("List redacted conflicts awaiting human merge")
29
+ .option("--cursor <n>", "Conflict cursor", intArg("--cursor"), 0)
30
+ .option("--limit <n>", "Page size (1..256)", intArg("--limit"), 50)
31
+ .action(async (options) => {
32
+ output(
33
+ await host(governedKnowledgeReviewHost).list({
34
+ cursor: options.cursor,
35
+ limit: options.limit,
36
+ }),
37
+ );
38
+ });
39
+
40
+ knowledge
41
+ .command("merge <conflict-envelope-digest>")
42
+ .description("Submit a human-reviewed merged governed record")
43
+ .requiredOption("--record <json>", "Canonical merged knowledge record")
44
+ .requiredOption("--reason <text>", "Human merge rationale")
45
+ .action(async (conflictEnvelopeDigest, options) => {
46
+ output(
47
+ await host(governedKnowledgeReviewHost).merge({
48
+ conflictEnvelopeDigest,
49
+ mergedRecord: parseJsonOption(options.record, "--record"),
50
+ reason: options.reason,
51
+ }),
52
+ );
53
+ });
54
+ }
@@ -0,0 +1,83 @@
1
+ import { intArg } from "../lib/cli-arg.js";
2
+ import { isEvolutionWorkbenchCliHost } from "../lib/evolution/evolution-workbench-cli-host.js";
3
+
4
+ function host(value) {
5
+ if (!isEvolutionWorkbenchCliHost(value)) {
6
+ throw new Error(
7
+ "Evolution Workbench is unavailable: a trusted deployment host is required",
8
+ );
9
+ }
10
+ return value;
11
+ }
12
+
13
+ function output(value) {
14
+ console.log(JSON.stringify(value, null, 2));
15
+ }
16
+
17
+ export function registerEvolutionWorkbenchCommands(
18
+ evolution,
19
+ { workbenchHost = null } = {},
20
+ ) {
21
+ const workbench = evolution
22
+ .command("workbench")
23
+ .description("Review governed Skill evolution evidence and versions");
24
+
25
+ workbench
26
+ .command("list")
27
+ .description("List verified candidate review packets")
28
+ .option(
29
+ "--query <text>",
30
+ "Search evidence, digest, runtime or capability",
31
+ "",
32
+ )
33
+ .option("--status <status>", "Filter pending|approved|rejected|expired")
34
+ .option("--offset <n>", "Result offset", intArg("--offset"), 0)
35
+ .option("--limit <n>", "Result limit (1..500)", intArg("--limit"), 100)
36
+ .action(async (options) => {
37
+ output(
38
+ await host(workbenchHost).list({
39
+ query: options.query,
40
+ status: options.status ?? null,
41
+ offset: options.offset,
42
+ limit: options.limit,
43
+ }),
44
+ );
45
+ });
46
+
47
+ workbench
48
+ .command("compare <left-packet-digest> <right-packet-digest>")
49
+ .description("Compare two verified Skill versions")
50
+ .action(async (left, right) => {
51
+ output(await host(workbenchHost).compare(left, right));
52
+ });
53
+
54
+ workbench
55
+ .command("review <decision> <packet-digests...>")
56
+ .description(
57
+ "Approve or reject pending packets with per-item human decisions",
58
+ )
59
+ .requiredOption("--reason <text>", "Human review reason")
60
+ .action(async (decision, packetDigests, options) => {
61
+ output(
62
+ await host(workbenchHost).review({
63
+ decision,
64
+ packetDigests,
65
+ reason: options.reason,
66
+ }),
67
+ );
68
+ });
69
+
70
+ workbench
71
+ .command("rollback <from-packet-digest> <to-packet-digest>")
72
+ .description("Roll back the active Skill to an approved exact version")
73
+ .requiredOption("--reason <text>", "Human rollback reason")
74
+ .action(async (fromPacketDigest, toPacketDigest, options) => {
75
+ output(
76
+ await host(workbenchHost).rollback({
77
+ fromPacketDigest,
78
+ toPacketDigest,
79
+ reason: options.reason,
80
+ }),
81
+ );
82
+ });
83
+ }
@@ -10,6 +10,8 @@ import ora from "ora";
10
10
  import { logger } from "../lib/logger.js";
11
11
  import { parseJsonOption } from "../lib/parse-json-option.js";
12
12
  import { bootstrap, shutdown } from "../runtime/bootstrap.js";
13
+ import { registerEvolutionWorkbenchCommands } from "./evolution-workbench.js";
14
+ import { registerGovernedKnowledgeCommands } from "./evolution-knowledge.js";
13
15
  import {
14
16
  assessCapability,
15
17
  recordIncrementalModelMetrics,
@@ -41,13 +43,16 @@ import {
41
43
  getEvolutionStatsV2,
42
44
  } from "../lib/evolution-system.js";
43
45
 
44
- export function registerEvolutionCommand(program) {
46
+ export function registerEvolutionCommand(program, dependencies = {}) {
45
47
  const evolution = program
46
48
  .command("evolution")
47
49
  .description(
48
50
  "Evolution metrics and governance records — not model training or active Skill promotion",
49
51
  );
50
52
 
53
+ registerEvolutionWorkbenchCommands(evolution, dependencies);
54
+ registerGovernedKnowledgeCommands(evolution, dependencies);
55
+
51
56
  // evolution assess <name> <score>
52
57
  evolution
53
58
  .command("assess")
@@ -5,11 +5,21 @@
5
5
 
6
6
  import { logger } from "../lib/logger.js";
7
7
  import { createAgentRuntimeFactory } from "../runtime/runtime-factory.js";
8
+ import { captureAgentSkillOutcomeIndex } from "../lib/evolution/agent-evolution-runtime-composition-brand.js";
9
+ import { captureSkillVectorAuthority } from "../lib/skill-vector-authority.js";
8
10
  import path from "node:path";
9
11
 
10
12
  export function registerServeCommand(program, dependencies = {}) {
11
13
  const evolutionCompositionFactory =
12
14
  dependencies.evolutionCompositionFactory ?? null;
15
+ const skillOutcomeIndex =
16
+ dependencies.skillOutcomeIndex == null
17
+ ? null
18
+ : captureAgentSkillOutcomeIndex(dependencies.skillOutcomeIndex);
19
+ const skillVectorAuthority =
20
+ dependencies.skillVectorAuthority == null
21
+ ? null
22
+ : captureSkillVectorAuthority(dependencies.skillVectorAuthority);
13
23
  const serve = program
14
24
  .command("serve")
15
25
  .description("Start WebSocket server for remote CLI access")
@@ -129,6 +139,8 @@ export function registerServeCommand(program, dependencies = {}) {
129
139
  store,
130
140
  kernelFactory: () => new CliAgentKernelAdapter({ cwd }),
131
141
  evolutionCompositionFactory,
142
+ skillOutcomeIndex,
143
+ skillVectorAuthority,
132
144
  maxQueuedRequests,
133
145
  });
134
146
  const info = await host.start();
@@ -159,6 +171,8 @@ export function registerServeCommand(program, dependencies = {}) {
159
171
  store,
160
172
  kernel: new CliAgentKernelAdapter({ cwd }),
161
173
  evolutionCompositionFactory,
174
+ skillOutcomeIndex,
175
+ skillVectorAuthority,
162
176
  maxQueuedRequests,
163
177
  });
164
178
  } finally {
@@ -171,6 +185,8 @@ export function registerServeCommand(program, dependencies = {}) {
171
185
  evolutionCompositionFactory === null
172
186
  ? {}
173
187
  : { evolutionCompositionFactory },
188
+ skillOutcomeIndex,
189
+ skillVectorAuthority,
174
190
  }).createServerRuntime({
175
191
  port: parseInt(opts.port, 10),
176
192
  host: opts.host,
@@ -59,6 +59,12 @@ import {
59
59
  } from "../lib/skill-packs/generator.js";
60
60
  import { CLI_PACK_DOMAINS } from "../lib/skill-packs/schema.js";
61
61
  import { registerRecordReplayCommands } from "./record-replay.js";
62
+ import { routeSkillDescriptors } from "../lib/skill-retrieval-router.js";
63
+ import { resolveSkillOutcomeAuthority } from "../lib/skill-outcome-authority.js";
64
+ import {
65
+ captureSkillVectorAuthority,
66
+ unavailableSkillVectorEvidence,
67
+ } from "../lib/skill-vector-authority.js";
62
68
 
63
69
  const LAYER_LABELS = {
64
70
  bundled: chalk.blue("[bundled]"),
@@ -75,6 +81,84 @@ function canRunOnPlatform(skill) {
75
81
  return skill.os.includes(process.platform);
76
82
  }
77
83
 
84
+ function validateSkillSearchRequest(skills, query, options = {}) {
85
+ if (
86
+ !Array.isArray(skills) ||
87
+ typeof query !== "string" ||
88
+ query.trim().length < 1 ||
89
+ query.length > 4096 ||
90
+ !options ||
91
+ typeof options !== "object" ||
92
+ Array.isArray(options)
93
+ ) {
94
+ throw new TypeError("Skill search request is invalid");
95
+ }
96
+ const limit = options.limit === undefined ? 20 : Number(options.limit);
97
+ if (!Number.isSafeInteger(limit) || limit < 1 || limit > 64) {
98
+ throw new TypeError("Skill search limit must be an integer from 1 to 64");
99
+ }
100
+ for (const [name, value] of [
101
+ ["category", options.category],
102
+ ["source", options.source],
103
+ ["tag", options.tag],
104
+ ["os", options.os],
105
+ ]) {
106
+ if (
107
+ value !== undefined &&
108
+ (typeof value !== "string" || value.length < 1 || value.length > 128)
109
+ ) {
110
+ throw new TypeError(`Skill search ${name} is invalid or unbounded`);
111
+ }
112
+ }
113
+ return limit;
114
+ }
115
+
116
+ export function routeSkillSearch(skills, query, options = {}) {
117
+ const limit = validateSkillSearchRequest(skills, query, options);
118
+ const category = options.category ?? null;
119
+ const routedSkills =
120
+ category === null
121
+ ? skills
122
+ : skills.filter(
123
+ (candidate) =>
124
+ String(candidate.category || "").toLowerCase() ===
125
+ category.toLowerCase(),
126
+ );
127
+ return routeSkillDescriptors({
128
+ skills: routedSkills,
129
+ query,
130
+ namespace: options.source ?? null,
131
+ tags: options.tag ? [options.tag] : [],
132
+ target: { os: options.os || process.platform },
133
+ outcomeMetrics: options.outcomeMetrics ?? null,
134
+ vectorScores: options.vectorScores ?? null,
135
+ topK: limit,
136
+ });
137
+ }
138
+
139
+ export async function routeSkillSearchWithVectorAuthority(
140
+ skills,
141
+ query,
142
+ options = {},
143
+ authority = null,
144
+ ) {
145
+ validateSkillSearchRequest(skills, query, options);
146
+ const vectorAuthority =
147
+ authority === null ? null : captureSkillVectorAuthority(authority);
148
+ const vector =
149
+ vectorAuthority === null
150
+ ? null
151
+ : await vectorAuthority.score({ query, skills });
152
+ const routed = routeSkillSearch(skills, query, {
153
+ ...options,
154
+ vectorScores: vector?.scores ?? null,
155
+ });
156
+ return Object.freeze({
157
+ ...routed,
158
+ vectorAuthority: vector?.evidence ?? unavailableSkillVectorEvidence(),
159
+ });
160
+ }
161
+
78
162
  export const SKILL_TEMPLATE_MD = (name) => `---
79
163
  name: ${name}
80
164
  display-name: ${name}
@@ -283,7 +367,11 @@ export async function runControlledSkill(options = {}) {
283
367
  }
284
368
  }
285
369
 
286
- export function registerSkillCommand(program) {
370
+ export function registerSkillCommand(program, dependencies = {}) {
371
+ const skillVectorAuthority =
372
+ dependencies.skillVectorAuthority == null
373
+ ? null
374
+ : captureSkillVectorAuthority(dependencies.skillVectorAuthority);
287
375
  const skill = program
288
376
  .command("skill")
289
377
  .description(
@@ -455,32 +543,86 @@ export function registerSkillCommand(program) {
455
543
  // skill search
456
544
  skill
457
545
  .command("search")
458
- .description("Search skills by keyword")
546
+ .description("Search digest-bound skills with the canonical router")
459
547
  .argument("<query>", "Search query")
460
- .action(async (query) => {
548
+ .option("--category <category>", "Filter by exact category")
549
+ .option("--tag <tag>", "Require an exact tag")
550
+ .option(
551
+ "--source <layer>",
552
+ "Filter by source layer (bundled, marketplace, managed, workspace)",
553
+ )
554
+ .option("--limit <count>", "Maximum results (1-64)", "20")
555
+ .option("--json", "Output the canonical routing result as JSON")
556
+ .action(async (query, options) => {
461
557
  const skills = loader.loadAll();
462
- const q = query.toLowerCase();
463
- const matches = skills.filter(
464
- (s) =>
465
- s.id.includes(q) ||
466
- s.displayName.toLowerCase().includes(q) ||
467
- s.description.toLowerCase().includes(q) ||
468
- s.tags.some((t) => t.toLowerCase().includes(q)),
558
+ try {
559
+ validateSkillSearchRequest(skills, query, options);
560
+ } catch (error) {
561
+ logger.error(error.message);
562
+ process.exitCode = 1;
563
+ return;
564
+ }
565
+ const outcomeAuthority = resolveSkillOutcomeAuthority(
566
+ Object.prototype.hasOwnProperty.call(dependencies, "skillOutcomeIndex")
567
+ ? { index: dependencies.skillOutcomeIndex }
568
+ : {},
469
569
  );
570
+ let result;
571
+ try {
572
+ result = await routeSkillSearchWithVectorAuthority(
573
+ skills,
574
+ query,
575
+ {
576
+ ...options,
577
+ outcomeMetrics: outcomeAuthority.metrics,
578
+ },
579
+ skillVectorAuthority,
580
+ );
581
+ result = Object.freeze({
582
+ ...result,
583
+ outcomeAuthority: outcomeAuthority.evidence,
584
+ });
585
+ } catch (error) {
586
+ logger.error(error.message);
587
+ process.exitCode = 1;
588
+ return;
589
+ }
470
590
 
471
- if (matches.length === 0) {
591
+ if (options.json) {
592
+ console.log(JSON.stringify(result, null, 2));
593
+ return;
594
+ }
595
+
596
+ if (result.candidates.length === 0) {
472
597
  logger.info(`No skills matching "${query}"`);
473
598
  return;
474
599
  }
475
600
 
601
+ if (!["verified", "verified-indexed"].includes(outcomeAuthority.status)) {
602
+ logger.warn(
603
+ "Verified Skill outcome history is unavailable; retrieval is not using partial transcript metrics.",
604
+ );
605
+ }
606
+
476
607
  logger.log(
477
- chalk.bold(`\nSearch results for "${query}" (${matches.length}):\n`),
608
+ chalk.bold(
609
+ `\nSearch results for "${query}" (${result.candidates.length}):\n`,
610
+ ),
478
611
  );
479
- for (const s of matches) {
480
- const handler = s.hasHandler ? chalk.green("●") : chalk.gray("○");
481
- const label = LAYER_LABELS[s.source] || "";
612
+ if (result.selected === null && result.conflicts.length > 0) {
613
+ logger.warn(
614
+ "No automatic selection: narrow the query or filters to resolve the reported conflict.",
615
+ );
616
+ }
617
+ for (const candidate of result.candidates) {
618
+ const label = LAYER_LABELS[candidate.namespace] || "";
619
+ logger.log(
620
+ ` ${chalk.cyan(candidate.id.padEnd(30))} ${chalk.gray(`v${candidate.version}`)} ${label}`,
621
+ );
482
622
  logger.log(
483
- ` ${handler} ${chalk.cyan(s.id.padEnd(30))} ${chalk.gray(s.description.substring(0, 40))} ${label}`,
623
+ chalk.gray(
624
+ ` ${candidate.digest} score=${candidate.score.toFixed(3)} ${candidate.reason}`,
625
+ ),
484
626
  );
485
627
  }
486
628
  logger.log("");
@@ -1,6 +1,19 @@
1
1
  {
2
2
  "source": "CHANGELOG.md",
3
3
  "releases": [
4
+ {
5
+ "productVersion": null,
6
+ "cliVersion": "0.166.21",
7
+ "cliVersions": ["0.1.8", "0.2.8", "0.3.11", "0.166.20", "0.166.21"],
8
+ "date": "2026-09-04",
9
+ "title": "",
10
+ "sections": [
11
+ {
12
+ "heading": "Added - cc CLI 0.166.21: governed evolution knowledge and IDE review",
13
+ "body": "> `chainlesschain` **0.166.20 -> 0.166.21**,\n> `@chainlesschain/session-core` **0.3.10 -> 0.3.11**,\n> `@chainlesschain/agent-protocol` **0.1.7 -> 0.1.8**,\n> `@chainlesschain/agent-sdk` **0.2.7 -> 0.2.8**, and\n> `chainlesschain-agent-sdk` **0.2.7 -> 0.2.8** (release candidates,\n> 2026-09-04).\n\n- **Governed knowledge synchronization**: add tenant-scoped encrypted sharing,\n durable conflict review, human-approved merge publication, revocation\n dependency settlement, reviewer key lifecycle, and response-loss recovery.\n- **Evolution Workbench and Skill Retrieval**: expose bounded, digest-verified\n review and evidence-ranked search through CLI, App Server, Desktop, VS Code,\n and JetBrains surfaces without moving mutation authority into IDE clients.\n- **Coordinated runtime contracts**: ship durable Skill-invocation receipts in\n Session Core, refreshed Kotlin and Swift protocol projections, and the latest\n App Server pilot client behavior in both TypeScript and Python SDKs. Personal\n Data Hub remains `0.4.59` because its published source has not changed.\n- **Release boundary**: publication requires this exact release commit to pass\n every configured Linux, Windows, and macOS job in `CLI CI` and\n `CLI Strict Sandbox`, plus the affected protocol and SDK gates. Publish the\n dependency packages before the pinned CLI, followed by registry and IDE\n marketplace readback."
14
+ }
15
+ ]
16
+ },
4
17
  {
5
18
  "productVersion": null,
6
19
  "cliVersion": "0.166.20",
@@ -648,6 +648,8 @@ async function ensureSessionHandler(
648
648
  sessionHostLease,
649
649
  sessionBudgetRoot,
650
650
  evolutionCompositionFactory: server.evolutionCompositionFactory,
651
+ skillOutcomeIndex: server.skillOutcomeIndex,
652
+ skillVectorAuthority: server.skillVectorAuthority,
651
653
  });
652
654
  sessionHostLease = null;
653
655
  sessionBudgetRoot = null;