chainlesschain 0.166.46 → 0.166.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/README.md +6 -4
  2. package/package.json +4 -2
  3. package/src/assets/web-panel/assets/{AIOps-Cp8KiMmv.js → AIOps-BLGEffkh.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-B4d9BGsm.js → ActionButton-Cz1z2VGD.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-Cf9yXTkv.js → Analytics-C3j9cf6q.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-40UkmxtP.js → AppLayout-BR9ERuCA.js} +4 -4
  7. package/src/assets/web-panel/assets/{Artifacts-Ckkb4oOA.js → Artifacts-CozJCm4y.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-Dnf569k5.js → Audit-DC5g9Ra2.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-CA6bLem4.js → BackgroundAgents-B1zrQ0dW.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-ChQU0I_Q.js → Backup-ChVnfjpm.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-BHeZXnNN.js → BaseInput-8_vLQsLf.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-DcFVYB2E.js → Chat-Dct9bm6L.js} +5 -5
  13. package/src/assets/web-panel/assets/ChatBubbleRenderer-BvoSsCKh.js +1 -0
  14. package/src/assets/web-panel/assets/{Checkbox-2PDbejv2.js → Checkbox-DZQIsCIC.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-DJBn1RAu.js → Codegen-CdzHxmnq.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-CPRq7n6y.js → Col-DdAN8LeW.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-axvINFMi.js → Community-CNgjT9MA.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-_OX4Qbe0.js → Compact-BtQiX6G-.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-DWAkvzRL.js → Compliance-OGX5ma3j.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-CUIJ25oj.js → Cowork-CgugQnGM.js} +3 -3
  21. package/src/assets/web-panel/assets/{Cron-nR0m7H3_.js → Cron-Bpg7cPFD.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-CgTLXzh_.js → Crosschain-D1hsuswf.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-BllzRB6Q.js → DID-miDRsMBw.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-C9f0IIBN.js → Dashboard-CGcl8htP.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-BkahetiO.js → Dropdown-BFaxTdVE.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-rartVC-k.js → EmailListRenderer-BQdGLZIO.js} +1 -1
  27. package/src/assets/web-panel/assets/{EvolutionSettings-BqpG3XHV.js → EvolutionSettings-bMvgBk6r.js} +1 -1
  28. package/src/assets/web-panel/assets/{FamilyGuardDashboard-DgUdFvw1.js → FamilyGuardDashboard-c1WVC_--.js} +1 -1
  29. package/src/assets/web-panel/assets/{Federation-oFpIQU6g.js → Federation-DyAcFrQY.js} +1 -1
  30. package/src/assets/web-panel/assets/{FormItemContext-BUH5xlyP.js → FormItemContext-CfwpfD2B.js} +1 -1
  31. package/src/assets/web-panel/assets/{GenericCardRenderer-ilRa-ueg.js → GenericCardRenderer-DkJcbBpS.js} +1 -1
  32. package/src/assets/web-panel/assets/{Git-DlHHSF8j.js → Git-DgYIrPJh.js} +2 -2
  33. package/src/assets/web-panel/assets/{Governance-yQiiXIWe.js → Governance-BF1tYPJ6.js} +1 -1
  34. package/src/assets/web-panel/assets/{Inference-BUDRVGOP.js → Inference-BFkwRIrU.js} +1 -1
  35. package/src/assets/web-panel/assets/{KnowledgeGraph-BaGyIoN1.js → KnowledgeGraph-DpCoqhBa.js} +1 -1
  36. package/src/assets/web-panel/assets/{Logs-C1cO6zE0.js → Logs-DU2qAJmD.js} +2 -2
  37. package/src/assets/web-panel/assets/{MarkdownRenderer-_z_Iaoes.js → MarkdownRenderer-QWv7UJLq.js} +1 -1
  38. package/src/assets/web-panel/assets/{Marketplace-CM8cGL0K.js → Marketplace-Dz9NUrfo.js} +1 -1
  39. package/src/assets/web-panel/assets/{McpTools-CDqAMU0U.js → McpTools-B67I3d5v.js} +3 -3
  40. package/src/assets/web-panel/assets/{Memory-CfB0-Ofv.js → Memory-crkElJSy.js} +2 -2
  41. package/src/assets/web-panel/assets/{MobileBridge-BL18ytvB.js → MobileBridge-BO20VbdX.js} +1 -1
  42. package/src/assets/web-panel/assets/{MobileProjects-PIyyxbuJ.js → MobileProjects-Ba-3gZZd.js} +1 -1
  43. package/src/assets/web-panel/assets/{Mtc-BTTrFCol.js → Mtc-BAHZM084.js} +4 -4
  44. package/src/assets/web-panel/assets/{MtcAudit-JHZn037c.js → MtcAudit-CL3DzajL.js} +4 -4
  45. package/src/assets/web-panel/assets/{Multisig-CMf9NEdB.js → Multisig-BSWWzvWH.js} +3 -3
  46. package/src/assets/web-panel/assets/{NLProgramming-Dhk3qaus.js → NLProgramming-fnxqXM_3.js} +1 -1
  47. package/src/assets/web-panel/assets/{Notes-6F8EarNN.js → Notes-qUZPIQXT.js} +3 -3
  48. package/src/assets/web-panel/assets/{NotificationSettings-gxdaVEit.js → NotificationSettings-x9Xrixqu.js} +1 -1
  49. package/src/assets/web-panel/assets/{OrderTableRenderer-gVgXQWdc.js → OrderTableRenderer-BtMtQUt7.js} +1 -1
  50. package/src/assets/web-panel/assets/{Organization-CzvHcDNO.js → Organization-C946Hzna.js} +4 -4
  51. package/src/assets/web-panel/assets/{Overflow-Dclx30Vv.js → Overflow-BYf8KIts.js} +1 -1
  52. package/src/assets/web-panel/assets/{P2P-CM0Wm9vZ.js → P2P-Cbqf5dnv.js} +2 -2
  53. package/src/assets/web-panel/assets/PdhVaultBrowser-rmxp0cuF.js +7 -0
  54. package/src/assets/web-panel/assets/{Permissions-B_oATenG.js → Permissions-CZBw45EW.js} +3 -3
  55. package/src/assets/web-panel/assets/{PersonalDataHub-CptiVBh5.js → PersonalDataHub-BKwUAt43.js} +4 -4
  56. package/src/assets/web-panel/assets/{Pipeline-DkHzgyyI.js → Pipeline-DmFD2QW4.js} +1 -1
  57. package/src/assets/web-panel/assets/{Privacy-DzZvwcKh.js → Privacy-KpuwWvt5.js} +1 -1
  58. package/src/assets/web-panel/assets/{ProjectInit-CzkCs-5G.js → ProjectInit-Bt8UheX6.js} +2 -2
  59. package/src/assets/web-panel/assets/{ProjectSettings-BB8dcxRD.js → ProjectSettings-2ZeAn9CP.js} +2 -2
  60. package/src/assets/web-panel/assets/{Projects-B7PW9CFY.js → Projects-zBuet8Zs.js} +1 -1
  61. package/src/assets/web-panel/assets/{Providers-Tfx-ti1V.js → Providers-DcEAnw6L.js} +1 -1
  62. package/src/assets/web-panel/assets/{QrScannerModal-EvWlNhfX.js → QrScannerModal-qF7liYG9.js} +1 -1
  63. package/src/assets/web-panel/assets/{QuickAsk-CUspgbNC.js → QuickAsk-qiESlVBJ.js} +1 -1
  64. package/src/assets/web-panel/assets/{Recommend-COY2g77J.js → Recommend-Bk-cQyi9.js} +1 -1
  65. package/src/assets/web-panel/assets/{RemoteSession-BzMBU6E6.js → RemoteSession-CwrekErS.js} +2 -2
  66. package/src/assets/web-panel/assets/{Reputation-RtYRF4YP.js → Reputation-Bmw_UQtW.js} +1 -1
  67. package/src/assets/web-panel/assets/{Row-Bva3l9Lc.js → Row-CPdqZIUX.js} +1 -1
  68. package/src/assets/web-panel/assets/{RssFeed-BhjzLvW3.js → RssFeed-D_W-xxvS.js} +2 -2
  69. package/src/assets/web-panel/assets/{Search-BYzT2PTR.js → Search-Hu0oDFj_.js} +1 -1
  70. package/src/assets/web-panel/assets/{Security-Bcl4-KTv.js → Security-DeRxUwmq.js} +3 -3
  71. package/src/assets/web-panel/assets/{Services-BRRa4A0f.js → Services-CsNmHFkf.js} +2 -2
  72. package/src/assets/web-panel/assets/{Skeleton-DYQ016qy.js → Skeleton-gv_Vz0tN.js} +1 -1
  73. package/src/assets/web-panel/assets/{Skills-CAUKL9JA.js → Skills-Dgg-_rCB.js} +1 -1
  74. package/src/assets/web-panel/assets/{Sla-BTyUqfuD.js → Sla-Bpu-bsEJ.js} +1 -1
  75. package/src/assets/web-panel/assets/{SpeechSettings-CUjMihrs.js → SpeechSettings-CrhleHuF.js} +1 -1
  76. package/src/assets/web-panel/assets/{SyncSettings-CvfOSupr.js → SyncSettings-JHjUN6I9.js} +2 -2
  77. package/src/assets/web-panel/assets/{Tasks-EvjNXrWH.js → Tasks-DKRWKkl9.js} +1 -1
  78. package/src/assets/web-panel/assets/{Templates-wPAp0EoM.js → Templates-leiWntLq.js} +1 -1
  79. package/src/assets/web-panel/assets/{Tenant-CP0D-q9Q.js → Tenant--1bYulvn.js} +1 -1
  80. package/src/assets/web-panel/assets/{Terminal-CQ0f2iFg.js → Terminal-C0y6FvSS.js} +2 -2
  81. package/src/assets/web-panel/assets/{TimelineRenderer-D3JrGSPb.js → TimelineRenderer-CQK4PVv4.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tokens-yXf2PPp9.js → Tokens-DbIvF-DV.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trigger-DfmMOoZ2.js → Trigger-CkXJ2vuq.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trust-BTCyMgf1.js → Trust-B02WXJPw.js} +1 -1
  85. package/src/assets/web-panel/assets/{UkeySign-DKCwIBHi.js → UkeySign-VPMkfzmw.js} +1 -1
  86. package/src/assets/web-panel/assets/{VideoEditing-CQpDSzLO.js → VideoEditing-C5ezUnah.js} +1 -1
  87. package/src/assets/web-panel/assets/{Wallet-CyFrzC3K.js → Wallet-CYfvYRrY.js} +4 -4
  88. package/src/assets/web-panel/assets/{WebAuthn-D6Nr_1kd.js → WebAuthn-DtKl-kpr.js} +4 -4
  89. package/src/assets/web-panel/assets/{WorkflowEditor-CgR9tNrB.js → WorkflowEditor-DACITF-u.js} +1 -1
  90. package/src/assets/web-panel/assets/{chat-CRG_IeyP.js → chat-qnygfnLi.js} +1 -1
  91. package/src/assets/web-panel/assets/{colors-MdE3TStI.js → colors-D4mISLBD.js} +1 -1
  92. package/src/assets/web-panel/assets/{compact-item-B0LRuiNV.js → compact-item-BBPfxYGL.js} +1 -1
  93. package/src/assets/web-panel/assets/{createContext-B_V5fjcX.js → createContext-Byx4ndHp.js} +1 -1
  94. package/src/assets/web-panel/assets/devWarning-DBy6gsuI.js +1 -0
  95. package/src/assets/web-panel/assets/{hasIn-DSL-c_hr.js → hasIn-CGjLkkn3.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-DE7bSYmW.js → index-B8UpadHC.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-BD0w-888.js → index-B9jH-h4X.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-BbZZ7P_c.js → index-BN7_TSgU.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-BIDCNwy6.js → index-BNe2lCk6.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-CkN53KiJ.js → index-B_fHPZ8E.js} +1 -1
  101. package/src/assets/web-panel/assets/index-BfEDXk_E.js +1 -0
  102. package/src/assets/web-panel/assets/{index-BsAEd-Do.js → index-BklGH3YI.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-CS3bOhV7.js → index-BmKYaaGP.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-B3iW-mhn.js → index-BxQF1wCU.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-SmQfEHjp.js → index-ByA1NyFP.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-0200QxC4.js → index-BzeBBAl5.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-c8OqO3rq.js → index-C3abGsSW.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-C-aKWR2v.js → index-C9tcHs46.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-BNhWoD6d.js → index-CD5Btq6p.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-CVDi4rS9.js → index-CFMWjuav.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-CEOAZm5j.js → index-CMj8qmpX.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-C67dPW0L.js → index-CVUJjQAT.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-D3pJBTvo.js → index-CWhI8G14.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-DtOTppk8.js → index-CZjNamSU.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-DRRY44XP.js → index-CmHE-lY_.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-Tg3yl8wc.js → index-CoA8WsVr.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-CXMeisJK.js → index-Cpg3AWRy.js} +1 -1
  118. package/src/assets/web-panel/assets/index-CrxUwNM8.js +1 -0
  119. package/src/assets/web-panel/assets/{index-Bq8-2Ibv.js → index-CsVuQsY1.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-BHp1nSur.js → index-CydHMjwc.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-CPYshcic.js → index-DH6iC5b2.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-DBwBZwio.js → index-DZXhKAk9.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-Didyuq2Z.js → index-D_g9mA1N.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-CdHMc9LQ.js → index-DboTeuPF.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-C5dqieYX.js → index-DfgpKd64.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-CdplnAS9.js → index-Dmfe0L2Z.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-KaSejHjf.js → index-Dzni_5Qw.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-BpwGsAA-.js → index-J5JkStvY.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-OBhlHSMN.js → index-Ne8UGllV.js} +3 -3
  130. package/src/assets/web-panel/assets/{index-CZICtYJ0.js → index-O09jXbir.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-DVgTf7CZ.js → index-Y7el_3WS.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-BQAsL19t.js → index-c_tBkIlU.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-BMm8tO2X.js → index-lKJWAmd4.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-CNytQuFq.js → index-xzRKTy0R.js} +1 -1
  135. package/src/assets/web-panel/assets/{initDefaultProps-P8SBN6Di.js → initDefaultProps-XuhfEIhB.js} +1 -1
  136. package/src/assets/web-panel/assets/{motion-BubbjUT_.js → motion-Cbxh6AxO.js} +1 -1
  137. package/src/assets/web-panel/assets/{move-Chcykv0I.js → move-C7IEnFly.js} +1 -1
  138. package/src/assets/web-panel/assets/{mtc-parser-DyiYuGDu.js → mtc-parser-lLADx4LL.js} +1 -1
  139. package/src/assets/web-panel/assets/{omit-Rdwb_Neb.js → omit-mIbic_k-.js} +1 -1
  140. package/src/assets/web-panel/assets/{pickAttrs-CCr0MYHl.js → pickAttrs-_xIYEqu3.js} +1 -1
  141. package/src/assets/web-panel/assets/{placementArrow-B1ZXz3bb.js → placementArrow-ClB-E0ny.js} +1 -1
  142. package/src/assets/web-panel/assets/{responsiveObserve-BGEdwej6.js → responsiveObserve-D36Bg2ut.js} +1 -1
  143. package/src/assets/web-panel/assets/{slide-CpnsUMaT.js → slide-CUuO08Bl.js} +1 -1
  144. package/src/assets/web-panel/assets/{statusUtils-C7x-TVp_.js → statusUtils-BKahwLbv.js} +1 -1
  145. package/src/assets/web-panel/assets/{styleChecker-CC5k_791.js → styleChecker-2pT-T8vy.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFlexGapSupport-BpZFKsJW.js → useFlexGapSupport-DyH5g7Rg.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFs-CVq5HySy.js → useFs-CTOauB3X.js} +1 -1
  148. package/src/assets/web-panel/assets/{usePersonalDataHub-BGkdLryu.js → usePersonalDataHub-B02JYIMe.js} +1 -1
  149. package/src/assets/web-panel/assets/{vnode-uLtOUEK-.js → vnode-Do22wQrc.js} +1 -1
  150. package/src/assets/web-panel/assets/{zoom-BfVC9iUs.js → zoom-BfnL7rit.js} +1 -1
  151. package/src/assets/web-panel/index.html +1 -1
  152. package/src/command-help-index.json +3 -3
  153. package/src/commands/agent.js +8 -0
  154. package/src/commands/background-session.js +31 -3
  155. package/src/commands/chat.js +5 -1
  156. package/src/commands/eval.js +86 -28
  157. package/src/commands/llm.js +104 -1
  158. package/src/commands/plugin.js +161 -1
  159. package/src/commands/sandbox.js +121 -2
  160. package/src/commands/serve.js +11 -2
  161. package/src/commands/skill.js +29 -0
  162. package/src/data/changelog.json +26 -0
  163. package/src/gateways/ws/session-protocol.js +13 -0
  164. package/src/gateways/ws/ws-agent-handler.js +17 -0
  165. package/src/gateways/ws/ws-server.js +3 -0
  166. package/src/gateways/ws/ws-session-state.js +131 -0
  167. package/src/generated/cc-agent-protocol.schema.json +48 -1
  168. package/src/lazy-dispatch.js +8 -1
  169. package/src/lib/agent-sandbox.js +337 -53
  170. package/src/lib/app-server/cli-agent-kernel-adapter.js +28 -0
  171. package/src/lib/app-server/server.js +93 -0
  172. package/src/lib/background-agent-keeper-client.js +2 -0
  173. package/src/lib/background-agent-keeper-protocol.js +7 -0
  174. package/src/lib/background-agent-list-index.js +222 -0
  175. package/src/lib/background-agent-supervisor.js +232 -47
  176. package/src/lib/codex-app-server-adapter.js +82 -27
  177. package/src/lib/context-memory-kernel/durable-memory-port.js +31 -8
  178. package/src/lib/context-memory-kernel/provider-context.js +118 -19
  179. package/src/lib/deferred-question-context.js +278 -0
  180. package/src/lib/eval/evidence.js +202 -64
  181. package/src/lib/eval/plugin-suite.js +1181 -0
  182. package/src/lib/eval/runner.js +10 -3
  183. package/src/lib/evolution/agent-evolution-runtime-composition.js +236 -1
  184. package/src/lib/evolution/agent-model-projection.js +97 -1
  185. package/src/lib/evolution/evidence-backed-wiki-maintainer.js +154 -1
  186. package/src/lib/evolution/evolution-artifact-ports.js +6 -0
  187. package/src/lib/evolution/evolution-deployment-loader.js +87 -3
  188. package/src/lib/evolution/evolution-eval-gate.js +8 -0
  189. package/src/lib/evolution/evolution-eval-runtime-composition.js +255 -0
  190. package/src/lib/evolution/evolution-evidence-artifact-adapter.js +58 -2
  191. package/src/lib/evolution/evolution-ledger-file-backend.js +23 -2
  192. package/src/lib/evolution/evolution-ledger-manifest-chain.js +223 -7
  193. package/src/lib/evolution/evolution-ledger-v2-journal.js +525 -0
  194. package/src/lib/evolution/evolution-ledger-v2-manifest-backend.js +46 -2
  195. package/src/lib/evolution/evolution-ledger.js +57 -1
  196. package/src/lib/evolution/evolution-run-ledger-adapter.js +93 -0
  197. package/src/lib/evolution/evolution-run-wiki-evidence-resolver.js +259 -0
  198. package/src/lib/evolution/governed-hub-llm.js +238 -5
  199. package/src/lib/evolution/governed-hub-resolver.js +82 -4
  200. package/src/lib/evolution/governed-hub-skill.js +11 -5
  201. package/src/lib/evolution/governed-skill-synthesis-provider-chat.js +10 -1
  202. package/src/lib/evolution/skill-runtime-revalidation-ledger-adapter.js +254 -0
  203. package/src/lib/evolution/skill-runtime-revalidation.js +530 -0
  204. package/src/lib/evolution/skill-target-matrix-eval.js +4 -4
  205. package/src/lib/evolution/wiki-evidence-commit-guard.js +366 -0
  206. package/src/lib/evolution/wiki-informed-skill-proposer.js +13 -1
  207. package/src/lib/goal-context.js +14 -5
  208. package/src/lib/interaction-adapter.js +166 -1
  209. package/src/lib/model-capabilities.js +271 -0
  210. package/src/lib/model-context-catalog.js +105 -0
  211. package/src/lib/model-context-window.js +4 -49
  212. package/src/lib/openai-responses.js +428 -0
  213. package/src/lib/plugin-runtime/scopes.js +7 -1
  214. package/src/lib/remote-read-loop-guard.js +2 -2
  215. package/src/lib/runtime-usage-ledger.js +16 -0
  216. package/src/lib/session-host-snapshot.js +16 -0
  217. package/src/lib/skill-loader.js +12 -0
  218. package/src/lib/with-file-lock.js +3 -1
  219. package/src/repl/agent-repl.js +5 -1
  220. package/src/runtime/agent-core.js +348 -23
  221. package/src/runtime/agent-runtime.js +7 -0
  222. package/src/runtime/coding-agent-contract-shared.cjs +13 -1
  223. package/src/runtime/headless-runner.js +4 -1
  224. package/src/runtime/headless-stream.js +283 -45
  225. package/src/runtime/runtime-factory.js +26 -2
  226. package/src/workers/background-agent-keeper.js +23 -13
  227. package/src/workers/background-agent-worker.js +27 -13
  228. package/src/assets/web-panel/assets/ChatBubbleRenderer-Bi2SY9E_.js +0 -1
  229. package/src/assets/web-panel/assets/PdhVaultBrowser-fYmQzmTA.js +0 -7
  230. package/src/assets/web-panel/assets/devWarning-BtFLt3qI.js +0 -1
  231. package/src/assets/web-panel/assets/index-BhuWQHeG.js +0 -1
  232. package/src/assets/web-panel/assets/index-D-4tFek3.js +0 -1
@@ -1 +1 @@
1
- import{u as v}from"./index-OBhlHSMN.js";import{u as _}from"./useShellMode-CgR0wCYM.js";function d(r){if(!r)return r;if(r.error)throw new Error(r.error);return r.result!==void 0?r.result:r}async function p(r,s={},e=!0){try{if(e!==!0||!r||typeof r.sendRaw!="function")return{status:"unavailable",path:null};const a=await r.sendRaw({type:"fs.openDirectory",title:s.title},6e4);if(a&&(a.ok===!1||a.error))return{status:"unavailable",path:null};const t=a&&a.result!==void 0?a.result:a;return t&&(t.ok===!1||t.error||t.unsupported===!0)?{status:"unavailable",path:null}:t&&t.canceled===!0?{status:"cancelled",path:null}:t&&typeof t.path=="string"&&t.path.length>0?{status:"selected",path:t.path}:{status:"unavailable",path:null}}catch{return{status:"unavailable",path:null}}}function b(r,s,e,a,t){return typeof r.onMessage!="function"||typeof r.sendRaw!="function"?r.sendRaw({type:s,...e},t).then(d):new Promise((n,u)=>{const l=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`,w=`${s}.event`,m=`${s}.end`;let c=!1,h=()=>{};const o=(i,f)=>{if(!c){c=!0,clearTimeout(g);try{h()}catch{}i(f)}},g=setTimeout(()=>{o(u,new Error(`stream timeout (${t}ms): ${s}`))},t),y=r.onMessage(i=>{if(!(c||!i)&&!(i.id!==l&&i.requestId!==l)){if(i.type===w){if(typeof a=="function")try{a(i.event||i)}catch{}return}if(i.type===m){o(n,d(i));return}i.type==="error"&&o(u,new Error(i.message||"stream error"))}});h=typeof y=="function"?y:()=>{},Promise.resolve(r.sendRaw({id:l,type:s,...e},t)).catch(()=>{})})}function k(){const r=v(),s=_(),e=(a,t={},n=3e4)=>r.sendRaw({type:a,...t},n).then(d);return{async health(){return await e("personal-data-hub.health",{},8e3)},async stats(){return await e("personal-data-hub.stats",{},8e3)},async listAdapters(){return await e("personal-data-hub.list-adapters",{},5e3)},async pickFile(a={}){try{const t=await r.sendRaw({type:"fs.openDialog",title:a.title,filters:a.filters},6e4),n=t&&t.result!==void 0?t.result:t,u=n&&typeof n.path=="string"?n.path:n&&typeof n.filePath=="string"?n.filePath:null;return n&&n.canceled!==!0&&u?u:null}catch{return null}},async pickDirectoryResult(a={}){return await p(r,a,s.isEmbedded)},async pickDirectory(a={}){const t=await p(r,a,s.isEmbedded);return t.status==="selected"?t.path:null},async adapterReadiness(a){return await e("personal-data-hub.adapter-readiness",Number.isInteger(a)?{timeoutMs:a}:{},15e3)},async syncAdapter(a,t={}){return await e("personal-data-hub.sync-adapter",{name:a,options:t},6e5)},async syncAll(a={}){return await e("personal-data-hub.sync-all",{options:a},6e5)},async registerMock({name:a="mock",count:t=20,seed:n=1}={}){return await e("personal-data-hub.register-mock",{name:a,count:t,seed:n})},async unregister(a){return await e("personal-data-hub.unregister",{name:a})},async ask(a,t={}){return await e("personal-data-hub.ask",{question:a,options:t},18e4)},async queryEvents(a={}){return await e("personal-data-hub.query-events",a,1e4)},async recentAudit(a={}){return await e("personal-data-hub.recent-audit",a,1e4)},async searchEvents(a={}){return await e("personal-data-hub.search-events",a,15e3)},async facetCounts(a={}){return await e("personal-data-hub.facet-counts",a,1e4)},async testEmailAuth(a){return await e("personal-data-hub.test-email-auth",{account:a},3e4)},async registerEmail(a,t={}){return await e("personal-data-hub.register-email",{account:a,opts:t},15e3)},async unregisterEmail(a){return await e("personal-data-hub.unregister-email",{email:a},5e3)},async listEmailAccounts(){return await e("personal-data-hub.list-email-accounts",{},5e3)},async activateEmail(a){return await e("personal-data-hub.activate-email",{email:a},5e3)},async eventDetail(a){return await e("personal-data-hub.event-detail",{eventId:a},5e3)},async syncAdapterStream(a,t={},n){return await b(r,"personal-data-hub.sync-adapter-stream",{name:a,options:t},n,6e5)},async syncAllStream(a={},t){return await b(r,"personal-data-hub.sync-all-stream",{options:a},t,9e5)},async registerAlipay(a,t={}){return await e("personal-data-hub.register-alipay",{account:a,opts:t},15e3)},async unregisterAlipay(a){return await e("personal-data-hub.unregister-alipay",{email:a},5e3)},async listAlipayAccounts(){return await e("personal-data-hub.list-alipay-accounts",{},5e3)},async activateAlipay(a){return await e("personal-data-hub.activate-alipay",{email:a},5e3)},async importAlipayBill({zipPath:a,csvPath:t,zipPassword:n}={}){return await e("personal-data-hub.import-alipay-bill",{zipPath:a,csvPath:t,zipPassword:n},3e5)},async reviewQueueList(a=50){return await e("personal-data-hub.review-queue-list",{limit:a},5e3)},async reviewDecision(a,t){return await e("personal-data-hub.review-decision",{reviewId:a,decision:t},5e3)},async manualMerge(a,t){return await e("personal-data-hub.manual-merge",{aId:a,bId:t},5e3)},async manualUnmerge(a){return await e("personal-data-hub.manual-unmerge",{personId:a},5e3)},async resolverDrain(a=50){return await e("personal-data-hub.resolver-drain",{limit:a},18e4)},async resolverStats(){return await e("personal-data-hub.resolver-stats",{},5e3)},async skillsList(){return await e("personal-data-hub.skills-list",{},5e3)},async runSkill(a,t={}){return await e("personal-data-hub.run-skill",{name:a,options:t},12e4)},async openAichatLogin(a,t={}){return await e("personal-data-hub.aichat-open-login",{vendor:a,opts:t},1e4)},async probeAichatCookies(a,t){return await e("personal-data-hub.aichat-probe-cookies",{vendor:a,cookieHeader:t},1e4)},async registerAichatVendor(a,t,n={}){return await e("personal-data-hub.aichat-register-vendor",{vendor:a,cookies:t,opts:n},3e4)},async rotateAichatLogin(a){return await e("personal-data-hub.aichat-rotate-login",{vendor:a},1e4)},async listAichatAccounts(){return await e("personal-data-hub.list-aichat-accounts",{},5e3)},async unregisterAichat(a){return await e("personal-data-hub.unregister-aichat",{vendor:a},5e3)},async aichatHealthCheckOnce(){return await e("personal-data-hub.aichat-health-check-once",{},3e4)},async probeWechatEnv(){return await e("personal-data-hub.wechat-env-probe",{},15e3)},async registerWechat({account:a,dbPath:t,wechatDataPath:n,fridaOpts:u,keyProviderOverride:l}={}){return await e("personal-data-hub.register-wechat",{account:a,dbPath:t,wechatDataPath:n,fridaOpts:u,keyProviderOverride:l},45e3)},async listWechatAccounts(){return await e("personal-data-hub.list-wechat-accounts",{},5e3)},async activateWechat(a,t={}){return await e("personal-data-hub.activate-wechat",{uin:a,fridaOpts:t.fridaOpts,keyProviderOverride:t.keyProviderOverride},45e3)},async unregisterWechat(a){return await e("personal-data-hub.unregister-wechat",{uin:a},5e3)},async bilibiliAdbSync(a={}){return await e("personal-data-hub.bilibili-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bilibiliAdbDoctor(){return await e("personal-data-hub.bilibili-adb-doctor",{},15e3)},async weiboAdbSync(a={}){return await e("personal-data-hub.weibo-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async xhsAdbSync(a={}){return await e("personal-data-hub.xhs-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async toutiaoAdbSync(a={}){return await e("personal-data-hub.toutiao-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},9e4)},async kuaishouAdbSync(a={}){return await e("personal-data-hub.kuaishou-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bridgeDoctor(){return await e("personal-data-hub.bridge-doctor",{},6e4)},async douyinAdbSync(a={}){return await e("personal-data-hub.douyin-adb-sync",{uid:a.uid,limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)}}}export{k as u};
1
+ import{u as v}from"./index-Ne8UGllV.js";import{u as _}from"./useShellMode-CgR0wCYM.js";function d(r){if(!r)return r;if(r.error)throw new Error(r.error);return r.result!==void 0?r.result:r}async function p(r,s={},e=!0){try{if(e!==!0||!r||typeof r.sendRaw!="function")return{status:"unavailable",path:null};const a=await r.sendRaw({type:"fs.openDirectory",title:s.title},6e4);if(a&&(a.ok===!1||a.error))return{status:"unavailable",path:null};const t=a&&a.result!==void 0?a.result:a;return t&&(t.ok===!1||t.error||t.unsupported===!0)?{status:"unavailable",path:null}:t&&t.canceled===!0?{status:"cancelled",path:null}:t&&typeof t.path=="string"&&t.path.length>0?{status:"selected",path:t.path}:{status:"unavailable",path:null}}catch{return{status:"unavailable",path:null}}}function b(r,s,e,a,t){return typeof r.onMessage!="function"||typeof r.sendRaw!="function"?r.sendRaw({type:s,...e},t).then(d):new Promise((n,u)=>{const l=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`,w=`${s}.event`,m=`${s}.end`;let c=!1,h=()=>{};const o=(i,f)=>{if(!c){c=!0,clearTimeout(g);try{h()}catch{}i(f)}},g=setTimeout(()=>{o(u,new Error(`stream timeout (${t}ms): ${s}`))},t),y=r.onMessage(i=>{if(!(c||!i)&&!(i.id!==l&&i.requestId!==l)){if(i.type===w){if(typeof a=="function")try{a(i.event||i)}catch{}return}if(i.type===m){o(n,d(i));return}i.type==="error"&&o(u,new Error(i.message||"stream error"))}});h=typeof y=="function"?y:()=>{},Promise.resolve(r.sendRaw({id:l,type:s,...e},t)).catch(()=>{})})}function k(){const r=v(),s=_(),e=(a,t={},n=3e4)=>r.sendRaw({type:a,...t},n).then(d);return{async health(){return await e("personal-data-hub.health",{},8e3)},async stats(){return await e("personal-data-hub.stats",{},8e3)},async listAdapters(){return await e("personal-data-hub.list-adapters",{},5e3)},async pickFile(a={}){try{const t=await r.sendRaw({type:"fs.openDialog",title:a.title,filters:a.filters},6e4),n=t&&t.result!==void 0?t.result:t,u=n&&typeof n.path=="string"?n.path:n&&typeof n.filePath=="string"?n.filePath:null;return n&&n.canceled!==!0&&u?u:null}catch{return null}},async pickDirectoryResult(a={}){return await p(r,a,s.isEmbedded)},async pickDirectory(a={}){const t=await p(r,a,s.isEmbedded);return t.status==="selected"?t.path:null},async adapterReadiness(a){return await e("personal-data-hub.adapter-readiness",Number.isInteger(a)?{timeoutMs:a}:{},15e3)},async syncAdapter(a,t={}){return await e("personal-data-hub.sync-adapter",{name:a,options:t},6e5)},async syncAll(a={}){return await e("personal-data-hub.sync-all",{options:a},6e5)},async registerMock({name:a="mock",count:t=20,seed:n=1}={}){return await e("personal-data-hub.register-mock",{name:a,count:t,seed:n})},async unregister(a){return await e("personal-data-hub.unregister",{name:a})},async ask(a,t={}){return await e("personal-data-hub.ask",{question:a,options:t},18e4)},async queryEvents(a={}){return await e("personal-data-hub.query-events",a,1e4)},async recentAudit(a={}){return await e("personal-data-hub.recent-audit",a,1e4)},async searchEvents(a={}){return await e("personal-data-hub.search-events",a,15e3)},async facetCounts(a={}){return await e("personal-data-hub.facet-counts",a,1e4)},async testEmailAuth(a){return await e("personal-data-hub.test-email-auth",{account:a},3e4)},async registerEmail(a,t={}){return await e("personal-data-hub.register-email",{account:a,opts:t},15e3)},async unregisterEmail(a){return await e("personal-data-hub.unregister-email",{email:a},5e3)},async listEmailAccounts(){return await e("personal-data-hub.list-email-accounts",{},5e3)},async activateEmail(a){return await e("personal-data-hub.activate-email",{email:a},5e3)},async eventDetail(a){return await e("personal-data-hub.event-detail",{eventId:a},5e3)},async syncAdapterStream(a,t={},n){return await b(r,"personal-data-hub.sync-adapter-stream",{name:a,options:t},n,6e5)},async syncAllStream(a={},t){return await b(r,"personal-data-hub.sync-all-stream",{options:a},t,9e5)},async registerAlipay(a,t={}){return await e("personal-data-hub.register-alipay",{account:a,opts:t},15e3)},async unregisterAlipay(a){return await e("personal-data-hub.unregister-alipay",{email:a},5e3)},async listAlipayAccounts(){return await e("personal-data-hub.list-alipay-accounts",{},5e3)},async activateAlipay(a){return await e("personal-data-hub.activate-alipay",{email:a},5e3)},async importAlipayBill({zipPath:a,csvPath:t,zipPassword:n}={}){return await e("personal-data-hub.import-alipay-bill",{zipPath:a,csvPath:t,zipPassword:n},3e5)},async reviewQueueList(a=50){return await e("personal-data-hub.review-queue-list",{limit:a},5e3)},async reviewDecision(a,t){return await e("personal-data-hub.review-decision",{reviewId:a,decision:t},5e3)},async manualMerge(a,t){return await e("personal-data-hub.manual-merge",{aId:a,bId:t},5e3)},async manualUnmerge(a){return await e("personal-data-hub.manual-unmerge",{personId:a},5e3)},async resolverDrain(a=50){return await e("personal-data-hub.resolver-drain",{limit:a},18e4)},async resolverStats(){return await e("personal-data-hub.resolver-stats",{},5e3)},async skillsList(){return await e("personal-data-hub.skills-list",{},5e3)},async runSkill(a,t={}){return await e("personal-data-hub.run-skill",{name:a,options:t},12e4)},async openAichatLogin(a,t={}){return await e("personal-data-hub.aichat-open-login",{vendor:a,opts:t},1e4)},async probeAichatCookies(a,t){return await e("personal-data-hub.aichat-probe-cookies",{vendor:a,cookieHeader:t},1e4)},async registerAichatVendor(a,t,n={}){return await e("personal-data-hub.aichat-register-vendor",{vendor:a,cookies:t,opts:n},3e4)},async rotateAichatLogin(a){return await e("personal-data-hub.aichat-rotate-login",{vendor:a},1e4)},async listAichatAccounts(){return await e("personal-data-hub.list-aichat-accounts",{},5e3)},async unregisterAichat(a){return await e("personal-data-hub.unregister-aichat",{vendor:a},5e3)},async aichatHealthCheckOnce(){return await e("personal-data-hub.aichat-health-check-once",{},3e4)},async probeWechatEnv(){return await e("personal-data-hub.wechat-env-probe",{},15e3)},async registerWechat({account:a,dbPath:t,wechatDataPath:n,fridaOpts:u,keyProviderOverride:l}={}){return await e("personal-data-hub.register-wechat",{account:a,dbPath:t,wechatDataPath:n,fridaOpts:u,keyProviderOverride:l},45e3)},async listWechatAccounts(){return await e("personal-data-hub.list-wechat-accounts",{},5e3)},async activateWechat(a,t={}){return await e("personal-data-hub.activate-wechat",{uin:a,fridaOpts:t.fridaOpts,keyProviderOverride:t.keyProviderOverride},45e3)},async unregisterWechat(a){return await e("personal-data-hub.unregister-wechat",{uin:a},5e3)},async bilibiliAdbSync(a={}){return await e("personal-data-hub.bilibili-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bilibiliAdbDoctor(){return await e("personal-data-hub.bilibili-adb-doctor",{},15e3)},async weiboAdbSync(a={}){return await e("personal-data-hub.weibo-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async xhsAdbSync(a={}){return await e("personal-data-hub.xhs-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async toutiaoAdbSync(a={}){return await e("personal-data-hub.toutiao-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},9e4)},async kuaishouAdbSync(a={}){return await e("personal-data-hub.kuaishou-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bridgeDoctor(){return await e("personal-data-hub.bridge-doctor",{},6e4)},async douyinAdbSync(a={}){return await e("personal-data-hub.douyin-adb-sync",{uid:a.uid,limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)}}}export{k as u};
@@ -1 +1 @@
1
- import{N as i,h as a,w as l}from"./index-OBhlHSMN.js";import{a7 as o,k as g,C as d,F as f,A as p}from"./vendor-Bn1JzzAn.js";function c(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,u=e;if(Array.isArray(e)&&(u=i(e)[0]),!u)return null;const n=o(u,r,s);return n.props=t?a(a({},n.props),r):n.props,l(typeof n.props.class!="object","class must be string"),n}function V(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return e.map(s=>c(s,r,t))}function v(e,r,t){p(o(e,a({},r)),t)}const m=e=>(e||[]).some(r=>g(r)?!(r.type===d||r.type===f&&!m(r.children)):!0)?e:null;function h(e,r,t,s){var u;const n=(u=e[r])===null||u===void 0?void 0:u.call(e,t);return m(n)?n:s?.()}export{h as a,V as b,c,v as t};
1
+ import{N as i,h as a,w as l}from"./index-Ne8UGllV.js";import{a7 as o,k as g,C as d,F as f,A as p}from"./vendor-Bn1JzzAn.js";function c(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,u=e;if(Array.isArray(e)&&(u=i(e)[0]),!u)return null;const n=o(u,r,s);return n.props=t?a(a({},n.props),r):n.props,l(typeof n.props.class!="object","class must be string"),n}function V(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return e.map(s=>c(s,r,t))}function v(e,r,t){p(o(e,a({},r)),t)}const m=e=>(e||[]).some(r=>g(r)?!(r.type===d||r.type===f&&!m(r.children)):!0)?e:null;function h(e,r,t,s){var u;const n=(u=e[r])===null||u===void 0?void 0:u.call(e,t);return m(n)?n:s?.()}export{h as a,V as b,c,v as t};
@@ -1,4 +1,4 @@
1
- import{K as o}from"./index-OBhlHSMN.js";import{i as f}from"./motion-BubbjUT_.js";const c=new o("antZoomIn",{"0%":{transform:"scale(0.2)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),y=new o("antZoomOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.2)",opacity:0}}),a=new o("antZoomBigIn",{"0%":{transform:"scale(0.8)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),s=new o("antZoomBigOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.8)",opacity:0}}),g=new o("antZoomUpIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 0%"}}),O=new o("antZoomUpOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 0%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0}}),l=new o("antZoomLeftIn",{"0%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"0% 50%"}}),u=new o("antZoomLeftOut",{"0%":{transform:"scale(1)",transformOrigin:"0% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0}}),p=new o("antZoomRightIn",{"0%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"100% 50%"}}),z=new o("antZoomRightOut",{"0%":{transform:"scale(1)",transformOrigin:"100% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0}}),K=new o("antZoomDownIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 100%"}}),w=new o("antZoomDownOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 100%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0}}),I={zoom:{inKeyframes:c,outKeyframes:y},"zoom-big":{inKeyframes:a,outKeyframes:s},"zoom-big-fast":{inKeyframes:a,outKeyframes:s},"zoom-left":{inKeyframes:l,outKeyframes:u},"zoom-right":{inKeyframes:p,outKeyframes:z},"zoom-up":{inKeyframes:g,outKeyframes:O},"zoom-down":{inKeyframes:K,outKeyframes:w}},h=(n,r)=>{const{antCls:m}=n,t=`${m}-${r}`,{inKeyframes:i,outKeyframes:e}=I[r];return[f(t,i,e,r==="zoom-big-fast"?n.motionDurationFast:n.motionDurationMid),{[`
1
+ import{K as o}from"./index-Ne8UGllV.js";import{i as f}from"./motion-Cbxh6AxO.js";const c=new o("antZoomIn",{"0%":{transform:"scale(0.2)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),y=new o("antZoomOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.2)",opacity:0}}),a=new o("antZoomBigIn",{"0%":{transform:"scale(0.8)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),s=new o("antZoomBigOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.8)",opacity:0}}),g=new o("antZoomUpIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 0%"}}),O=new o("antZoomUpOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 0%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0}}),l=new o("antZoomLeftIn",{"0%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"0% 50%"}}),u=new o("antZoomLeftOut",{"0%":{transform:"scale(1)",transformOrigin:"0% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0}}),p=new o("antZoomRightIn",{"0%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"100% 50%"}}),z=new o("antZoomRightOut",{"0%":{transform:"scale(1)",transformOrigin:"100% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0}}),K=new o("antZoomDownIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 100%"}}),w=new o("antZoomDownOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 100%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0}}),I={zoom:{inKeyframes:c,outKeyframes:y},"zoom-big":{inKeyframes:a,outKeyframes:s},"zoom-big-fast":{inKeyframes:a,outKeyframes:s},"zoom-left":{inKeyframes:l,outKeyframes:u},"zoom-right":{inKeyframes:p,outKeyframes:z},"zoom-up":{inKeyframes:g,outKeyframes:O},"zoom-down":{inKeyframes:K,outKeyframes:w}},h=(n,r)=>{const{antCls:m}=n,t=`${m}-${r}`,{inKeyframes:i,outKeyframes:e}=I[r];return[f(t,i,e,r==="zoom-big-fast"?n.motionDurationFast:n.motionDurationMid),{[`
2
2
  ${t}-enter,
3
3
  ${t}-appear
4
4
  `]:{transform:"scale(0)",opacity:0,animationTimingFunction:n.motionEaseOutCirc,"&-prepare":{transform:"none"}},[`${t}-leave`]:{animationTimingFunction:n.motionEaseInOutCirc}}]};export{h as i,c as z};
@@ -8,7 +8,7 @@
8
8
  // Injected by web-ui-server.js at serve time
9
9
  window.__CC_CONFIG__ = __CC_CONFIG_PLACEHOLDER__;
10
10
  </script>
11
- <script type="module" crossorigin src="./assets/index-OBhlHSMN.js"></script>
11
+ <script type="module" crossorigin src="./assets/index-Ne8UGllV.js"></script>
12
12
  <link rel="modulepreload" crossorigin href="./assets/vendor-Bn1JzzAn.js">
13
13
  <link rel="modulepreload" crossorigin href="./assets/icons-DG5UD-6K.js">
14
14
  <link rel="stylesheet" crossorigin href="./assets/index-Cq93VfoF.css">
@@ -82,7 +82,7 @@
82
82
  "itbudget": "Usage: chainlesschain itbudget [options] [command]\n\nIteration Budget 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-profile-v2 [options] <id> <owner>\n activate-profile-v2 <id>\n pause-profile-v2 <id>\n exhaust-profile-v2 <id>\n touch-profile-v2 <id>\n get-profile-v2 <id>\n list-profiles-v2\n create-run-v2 [options] <id> <profileId>\n start-run-v2 <id>\n complete-run-v2 <id>\n fail-run-v2 <id> [reason]\n cancel-run-v2 <id> [reason]\n get-run-v2 <id>\n list-runs-v2\n auto-pause-idle-v2\n auto-fail-stuck-v2\n gov-stats-v2\n reset-state-v2\n help [command] display help for command\n",
83
83
  "kg": "Usage: chainlesschain kg [options] [command]\n\nKnowledge graph — entities, relations, multi-hop reasoning, stats\n\nOptions:\n -h, --help display help for command\n\nCommands:\n entity-types [options] List recommended entity types\n add [options] <name> <type> Add an entity\n list [options] List entities\n show [options] <entity-id> Show entity details\n remove <entity-id> Remove entity (cascades to relations)\n add-relation [options] <source-id> <target-id> <relation-type> Add a directed relation between two entities\n relations [options] List relations\n reason [options] <start-id> BFS multi-hop reasoning from a start entity\n stats [options] Graph statistics — counts, type distribution, density\n export [output-file] Export entire graph as JSON (stdout if no file)\n import [options] <input-file> Import graph from JSON file ({entities[], relations[]})\n entity-statuses-v2 [options] List V2 entity maturity statuses\n relation-statuses-v2 [options] List V2 relation statuses\n default-max-active-entities-per-owner Show default V2 per-owner active-entity cap\n max-active-entities-per-owner Show current V2 per-owner active-entity cap\n set-max-active-entities-per-owner <n> Set V2 per-owner active-entity cap\n default-max-relations-per-entity Show default V2 per-entity active-relation cap\n max-relations-per-entity Show current V2 per-entity active-relation cap\n set-max-relations-per-entity <n> Set V2 per-entity active-relation cap\n default-entity-stale-ms Show default V2 entity staleness threshold (ms)\n entity-stale-ms Show current V2 entity staleness threshold (ms)\n set-entity-stale-ms <ms> Set V2 entity staleness threshold (ms)\n default-relation-stale-ms Show default V2 relation staleness threshold (ms)\n relation-stale-ms Show current V2 relation staleness threshold (ms)\n set-relation-stale-ms <ms> Set V2 relation staleness threshold (ms)\n active-entity-count [options] Active V2 entity count (scoped by owner)\n active-relation-count [options] Active V2 relation count (scoped by source entity)\n register-entity-v2 [options] <entity-id> Register a V2 entity\n entity-v2 [options] <entity-id> Show V2 entity lifecycle state\n set-entity-status-v2 [options] <entity-id> <status> Transition a V2 entity status\n deprecate-entity [options] <entity-id> Deprecate a V2 entity (grace period)\n archive-entity-v2 [options] <entity-id> Archive a V2 entity\n remove-entity-v2 [options] <entity-id> Remove a V2 entity (terminal)\n revive-entity [options] <entity-id> Restore a V2 entity to active\n touch-entity-activity <entity-id> Bump lastActivityAt on a V2 entity\n register-relation-v2 [options] <relation-id> Register a V2 relation\n relation-v2 [options] <relation-id> Show V2 relation lifecycle state\n set-relation-status-v2 [options] <relation-id> <status> Transition a V2 relation status\n deprecate-relation [options] <relation-id> Deprecate a V2 relation\n remove-relation-v2 [options] <relation-id> Remove a V2 relation (terminal)\n revive-relation [options] <relation-id> Restore a V2 relation to active\n auto-archive-stale-entities [options] Bulk-flip stale V2 entities → archived\n auto-remove-stale-relations [options] Bulk-flip stale V2 relations → removed\n stats-v2 [options] V2 knowledge graph stats (all-enum-key zero-init)\n help [command] display help for command\n",
84
84
  "learning": "Usage: chainlesschain learning [options] [command]\n\nLearning records — trajectories, reflection, and governed candidate attempts\n\nOptions:\n -h, --help display help for command\n\nCommands:\n stats [options] Show learning loop statistics\n trajectories [options] List recent trajectories\n export [options] Export all learning trajectories as JSON (module 101\n §8.3 backup)\n import [options] Import learning trajectories from a JSON array file\n (idempotent upsert by id; §8.3)\n reflect [options] Run a reflection cycle and generate report\n synthesize [options] Attempt a governed Skill candidate from eligible\n trajectories\n cleanup [options] Delete old trajectories beyond retention period\n help [command] display help for command\n",
85
- "llm": "Usage: chainlesschain llm [options] [command]\n\nLLM provider management\n\nOptions:\n -h, --help display help for command\n\nCommands:\n configure [options] Atomically save an LLM connection from\n stdin JSON (secrets never enter argv)\n models [options] List available models from the current\n provider\n test [options] Test LLM provider connectivity\n (defaults to configured provider)\n providers [options] List all available LLM providers\n add-provider [options] <name> Add a custom LLM provider\n switch [options] <name> Switch the active LLM provider\n provider-maturities-v2 List V2 provider maturity states\n request-lifecycles-v2 List V2 request lifecycle states\n stats-v2 V2 llm-providers stats\n get-max-active-profiles-v2 Get max active profiles per owner (V2)\n set-max-active-profiles-v2 <n> Set max active profiles per owner (V2)\n get-max-pending-requests-v2 Get max pending requests per profile\n (V2)\n set-max-pending-requests-v2 <n> Set max pending requests per profile\n (V2)\n get-profile-idle-ms-v2 Get profile idle threshold (V2)\n set-profile-idle-ms-v2 <ms> Set profile idle threshold (V2)\n get-request-stuck-ms-v2 Get request stuck threshold (V2)\n set-request-stuck-ms-v2 <ms> Set request stuck threshold (V2)\n active-profile-count-v2 <ownerId> Active profile count for owner (V2)\n pending-request-count-v2 <profileId> Pending request count for profile (V2)\n register-profile-v2 [options] <id> Register a V2 profile\n get-profile-v2 <id> Get a V2 profile\n list-profiles-v2 [options] List V2 profiles\n set-profile-status-v2 <id> <next> Set V2 profile status\n activate-profile-v2 <id> Activate a V2 profile\n suspend-profile-v2 <id> Suspend a V2 profile\n retire-profile-v2 <id> Retire a V2 profile\n touch-profile-v2 <id> Touch a V2 profile\n create-request-v2 [options] <id> Create a V2 request\n get-request-v2 <id> Get a V2 request\n list-requests-v2 [options] List V2 requests\n set-request-status-v2 <id> <next> Set V2 request status\n start-request-v2 <id> Start a V2 request\n complete-request-v2 <id> Complete a V2 request\n fail-request-v2 <id> Fail a V2 request\n cancel-request-v2 <id> Cancel a V2 request\n auto-suspend-idle-profiles-v2 Auto-suspend idle V2 profiles\n auto-fail-stuck-requests-v2 Auto-fail stuck V2 requests\n help [command] display help for command\n",
85
+ "llm": "Usage: chainlesschain llm [options] [command]\n\nLLM provider management\n\nOptions:\n -h, --help display help for command\n\nCommands:\n capabilities [options] Inspect a static model capability\n profile without network or runtime\n verification\n configure [options] Atomically save an LLM connection from\n stdin JSON (secrets never enter argv)\n models [options] List available models from the current\n provider\n test [options] Test LLM provider connectivity\n (defaults to configured provider)\n providers [options] List all available LLM providers\n add-provider [options] <name> Add a custom LLM provider\n switch [options] <name> Switch the active LLM provider\n provider-maturities-v2 List V2 provider maturity states\n request-lifecycles-v2 List V2 request lifecycle states\n stats-v2 V2 llm-providers stats\n get-max-active-profiles-v2 Get max active profiles per owner (V2)\n set-max-active-profiles-v2 <n> Set max active profiles per owner (V2)\n get-max-pending-requests-v2 Get max pending requests per profile\n (V2)\n set-max-pending-requests-v2 <n> Set max pending requests per profile\n (V2)\n get-profile-idle-ms-v2 Get profile idle threshold (V2)\n set-profile-idle-ms-v2 <ms> Set profile idle threshold (V2)\n get-request-stuck-ms-v2 Get request stuck threshold (V2)\n set-request-stuck-ms-v2 <ms> Set request stuck threshold (V2)\n active-profile-count-v2 <ownerId> Active profile count for owner (V2)\n pending-request-count-v2 <profileId> Pending request count for profile (V2)\n register-profile-v2 [options] <id> Register a V2 profile\n get-profile-v2 <id> Get a V2 profile\n list-profiles-v2 [options] List V2 profiles\n set-profile-status-v2 <id> <next> Set V2 profile status\n activate-profile-v2 <id> Activate a V2 profile\n suspend-profile-v2 <id> Suspend a V2 profile\n retire-profile-v2 <id> Retire a V2 profile\n touch-profile-v2 <id> Touch a V2 profile\n create-request-v2 [options] <id> Create a V2 request\n get-request-v2 <id> Get a V2 request\n list-requests-v2 [options] List V2 requests\n set-request-status-v2 <id> <next> Set V2 request status\n start-request-v2 <id> Start a V2 request\n complete-request-v2 <id> Complete a V2 request\n fail-request-v2 <id> Fail a V2 request\n cancel-request-v2 <id> Cancel a V2 request\n auto-suspend-idle-profiles-v2 Auto-suspend idle V2 profiles\n auto-fail-stuck-requests-v2 Auto-fail stuck V2 requests\n help [command] display help for command\n",
86
86
  "logs": "Usage: chainlesschain logs [options] <id>\n\nPrint recent output from a background agent\n\nOptions:\n -n, --lines <n> Number of lines (default: \"100\")\n -h, --help display help for command\n",
87
87
  "loop": "Usage: chainlesschain loop [options] [parts...]\n\nRepeatedly run an agent prompt or `-- <command>` on a fixed interval\n\nOptions:\n --every <dur> Interval between iterations (e.g. 30s, 5m, 1.5h;\n bare number = seconds) (default: \"5m\")\n -n, --max-iterations <n> Stop after N iterations\n --until-exit-zero Stop once an iteration exits with code 0 (e.g.\n tests pass)\n --until <regex> Stop once an iteration's output matches this JS\n regex\n --dynamic Let each iteration self-pace via [[loop:next\n <dur>]] / [[loop:stop]] directives (prompt mode\n augments the prompt)\n --save [id] Persist this loop to a resumable session\n (auto-generates an id if omitted)\n --resume <id> Continue a previously --save'd loop session\n --json Print a JSON summary when the loop ends\n -h, --help display help for command\n",
88
88
  "lowcode": "Usage: chainlesschain lowcode [options] [command]\n\nLow-code application platform\n\nOptions:\n -h, --help display help for command\n\nCommands:\n create [options] <name> Create a new low-code application\n list [options] List all low-code applications\n preview <app-id> Preview application info\n publish <app-id> Publish an application\n components [options] List available built-in components\n datasource [options] <app-id> <name> <type> Add a data source to an application\n versions [options] <app-id> Show version history for an application\n rollback <app-id> <version> Rollback application to a previous version\n export [options] <app-id> Export application definition\n categories [options] List component categories (V2)\n datasource-types [options] List supported data source types (V2)\n statuses [options] List canonical app statuses (V2)\n components-v2 [options] List built-in components with category filter (V2)\n datasource-v2 [options] <app-id> <name> <type> Register a validated data source (V2)\n test-connection [options] <datasource-id> Heuristic connection check for a data source (V2)\n set-status <app-id> <status> Update app status with validated transition (V2)\n archive <app-id> Archive an application (V2)\n status-history [options] <app-id> Show status transition history for an app (V2)\n clone [options] <source-id> Clone an application (V2)\n export-json [options] <app-id> Export an app as canonical JSON (V2)\n import-json <file> Import an app from a canonical JSON file (V2)\n stats-v2 [options] Low-code platform statistics (V2)\n deploy [options] <app-id> Deploy application as static HTML bundle\n enums-v2 Show V2 enums (app maturity + build lifecycle)\n config-v2 Show V2 config thresholds\n set-max-active-apps-v2 <n> Set max active apps per owner\n set-max-pending-builds-v2 <n> Set max pending builds per app\n set-app-idle-ms-v2 <n> Set app idle threshold (ms)\n set-build-stuck-ms-v2 <n> Set build stuck threshold (ms)\n register-app-v2 [options] <id> <owner> Register V2 app\n activate-app-v2 <id> Activate app\n pause-app-v2 <id> Pause app\n archive-app-v2 <id> Archive app (terminal)\n touch-app-v2 <id> Touch app lastTouchedAt\n get-app-v2 <id> Get V2 app\n list-apps-v2 List V2 apps\n create-build-v2 [options] <id> <appId> Create V2 app build (queued)\n start-build-v2 <id> Start build\n succeed-build-v2 <id> Succeed build\n fail-build-v2 <id> [reason] Fail build\n cancel-build-v2 <id> [reason] Cancel build\n get-build-v2 <id> Get V2 build\n list-builds-v2 List V2 builds\n auto-pause-idle-v2 Auto-pause idle active apps\n auto-fail-stuck-v2 Auto-fail stuck building builds\n gov-stats-v2 V2 governance aggregate stats\n help [command] display help for command\n",
@@ -117,7 +117,7 @@
117
117
  "persona": "Usage: chainlesschain persona [options] [command]\n\nManage project AI persona configuration\n\nOptions:\n -h, --help display help for command\n\nCommands:\n show Show the current project persona\n set [options] Set or update the project persona\n list [options] List named personas registered in config.personas (Phase 3d\n registry)\n activate <name> Activate a named persona from config.personas (Phase 3d;\n equivalent to `cc skill enable` for persona-category skills)\n reset Remove the project persona, restoring the default coding\n assistant\n help [command] display help for command\n",
118
118
  "pipeline": "Usage: chainlesschain pipeline|pipe [options] [command]\n\nDevelopment Pipeline Orchestration (Phase 26) — 7-stage AI dev pipeline + gates\n+ deploys\n\nOptions:\n -h, --help display help for command\n\nCommands:\n config Show pipeline system config (stages, statuses, strategies)\n templates List project templates (feature / bugfix / refactor / security-audit)\n stages List all 7 pipeline stage names\n deploy-strategies List 6 deployment strategies\n statuses List pipeline + stage status values\n create [options] Create a new pipeline from a template\n start <pipelineId> Start pipeline execution (advances to first stage)\n pause <pipelineId> Pause running pipeline\n resume <pipelineId> Resume paused pipeline\n cancel [options] <pipelineId> Cancel pipeline\n complete [options] <pipelineId> Complete current stage with output and advance\n fail [options] <pipelineId> Fail current stage and pipeline\n retry [options] <pipelineId> Retry a specific stage (reset to running)\n approve <pipelineId> Approve current gate (code-review / deploy)\n reject [options] <pipelineId> Reject current gate (fails the pipeline)\n artifact-add [options] <pipelineId> Add an artifact to a stage\n artifacts [options] <pipelineId> List artifacts for a pipeline\n show <pipelineId> Show pipeline with stages\n list [options] List pipelines\n stage <pipelineId> <stageIndex> Show a specific stage\n deploy [options] Record a deployment (CLI does not actually deploy)\n deploys [options] List deployments\n deploy-show <deployId> Show a deployment record\n rollback [options] <deployId> Rollback a succeeded deployment\n monitor-record [options] <deployId> Record a post-deploy monitoring event (health check)\n monitor-events [options] <deployId> List monitoring events for a deploy\n monitor-status <deployId> Show latest monitoring status\n export <pipelineId> Export pipeline + stages + artifacts + deploys as JSON\n stats Show pipeline system stats\n enums-v2 Show V2 enums (pipeline maturity + run lifecycle)\n config-v2 Show V2 config thresholds\n set-max-active-pipelines-v2 <n> Set max active pipelines per owner\n set-max-pending-runs-v2 <n> Set max pending runs per pipeline\n set-pipeline-idle-ms-v2 <n> Set pipeline idle threshold (ms)\n set-run-stuck-ms-v2 <n> Set run stuck threshold (ms)\n register-pipeline-v2 [options] <id> <owner> Register V2 pipeline\n activate-pipeline-v2 <id> Activate pipeline\n pause-pipeline-v2 <id> Pause pipeline\n archive-pipeline-v2 <id> Archive pipeline (terminal)\n touch-pipeline-v2 <id> Touch pipeline lastTouchedAt\n get-pipeline-v2 <id> Get V2 pipeline\n list-pipelines-v2 List all V2 pipelines\n create-run-v2 [options] <id> <pipelineId> Create V2 pipeline run (queued)\n start-run-v2 <id> Start run (queued→running)\n complete-run-v2 <id> Complete run (running→completed)\n fail-run-v2 <id> [reason] Fail run\n cancel-run-v2 <id> [reason] Cancel run\n get-run-v2 <id> Get V2 run\n list-runs-v2 List all V2 runs\n auto-pause-idle-v2 Auto-pause idle active pipelines\n auto-fail-stuck-v2 Auto-fail stuck running runs\n gov-stats-v2 V2 governance aggregate stats\n help [command] display help for command\n",
119
119
  "planmode": "Usage: chainlesschain planmode [options] [command]\n\nPlan Mode 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-profile-v2 [options] <id> <owner>\n activate-profile-v2 <id>\n pause-profile-v2 <id>\n archive-profile-v2 <id>\n touch-profile-v2 <id>\n get-profile-v2 <id>\n list-profiles-v2\n create-step-v2 [options] <id> <profileId>\n start-step-v2 <id>\n complete-step-v2 <id>\n fail-step-v2 <id> [reason]\n cancel-step-v2 <id> [reason]\n get-step-v2 <id>\n list-steps-v2\n auto-pause-idle-v2\n auto-fail-stuck-v2\n gov-stats-v2\n reset-state-v2\n help [command] display help for command\n",
120
- "plugin": "Usage: chainlesschain plugin [options] [command]\n\nPlugin and marketplace management\n\nOptions:\n -h, --help display help for command\n\nCommands:\n list [options] List installed plugins\n install [options] <name> Install a plugin\n remove [options] <name> Remove a plugin\n enable [options] <name> Enable a plugin\n disable [options] <name> Disable a plugin\n update <name> <version> Update a plugin version\n info [options] <name> Show plugin details\n search [options] <query> Search plugin registry\n registry [options] List all plugins in registry\n summary [options] Show plugin summary statistics\n validate [options] <dir> Validate a plugin manifest and list its\n components\n add [options] <source> Install a plugin from a local dir, git\n URL, owner/repo[#ref], or registry URL\n (scope: user|project|local)\n browse [options] [query] List plugins in a remote registry\n (--registry <url>); filter by [query]\n catalog [options] [query] Review digest, signature, SBOM, license,\n capability, dependency, and health\n metadata across registries\n select [options] <name> Select the highest-ranked install\n candidate across an exact registry set\n impact [options] <name> Preview version, source, integrity,\n license, capability, and dependency\n impact before a registry upgrade\n installed [options] List plugins installed in the unified\n runtime (scope dirs)\n transaction [options] <name> Inspect a durable cross-process plugin\n lifecycle transaction\n recover [options] <name> Recover a durable plugin transaction\n after its owner died\n provenance-plan [options] <name> Build exact payload-bound authority\n bytes for a signed legacy provenance\n migration\n provenance-migrate [options] <name> Apply a signed, payload-bound provenance\n record to one legacy install\n evidence [options] <name> Read back installed manifest, license,\n signature, and payload-SBOM evidence\n trust [options] <name> Trust a plugin so its hooks / LSP\n servers may run\n untrust [options] <name> Revoke trust for a plugin (its hooks /\n LSP servers stop running)\n consent [options] [name] View or grant a plugin's capability\n consent (--grant / --revoke / --list)\n options [options] <name> View or set a plugin's typed options\n (--set key=value, --scope user|project)\n monitors [options] List installed plugins' background\n monitors (trusted only)\n uninstall [options] <name> Uninstall a runtime plugin from a scope\n (user|project|local)\n upgrade [options] <source> Update a runtime plugin from its pinned\n local, git, or registry source; repoints\n .active\n use [options] <name> <version> Pin a plugin's active version (rollback\n or switch)\n help [command] display help for command\n",
120
+ "plugin": "Usage: chainlesschain plugin [options] [command]\n\nPlugin and marketplace management\n\nOptions:\n -h, --help display help for command\n\nCommands:\n list [options] List installed plugins\n install [options] <name> Install a plugin\n remove [options] <name> Remove a plugin\n enable [options] <name> Enable a plugin\n disable [options] <name> Disable a plugin\n update <name> <version> Update a plugin version\n info [options] <name> Show plugin details\n search [options] <query> Search plugin registry\n registry [options] List all plugins in registry\n summary [options] Show plugin summary statistics\n eval [options] <dir> Run a local control/candidate\n effectiveness eval for a plugin\n validate [options] <dir> Validate a plugin manifest and list its\n components\n add [options] <source> Install a plugin from a local dir, git\n URL, owner/repo[#ref], or registry URL\n (scope: user|project|local)\n browse [options] [query] List plugins in a remote registry\n (--registry <url>); filter by [query]\n catalog [options] [query] Review digest, signature, SBOM, license,\n capability, dependency, and health\n metadata across registries\n select [options] <name> Select the highest-ranked install\n candidate across an exact registry set\n impact [options] <name> Preview version, source, integrity,\n license, capability, and dependency\n impact before a registry upgrade\n installed [options] List plugins installed in the unified\n runtime (scope dirs)\n transaction [options] <name> Inspect a durable cross-process plugin\n lifecycle transaction\n recover [options] <name> Recover a durable plugin transaction\n after its owner died\n provenance-plan [options] <name> Build exact payload-bound authority\n bytes for a signed legacy provenance\n migration\n provenance-migrate [options] <name> Apply a signed, payload-bound provenance\n record to one legacy install\n evidence [options] <name> Read back installed manifest, license,\n signature, and payload-SBOM evidence\n trust [options] <name> Trust a plugin so its hooks / LSP\n servers may run\n untrust [options] <name> Revoke trust for a plugin (its hooks /\n LSP servers stop running)\n consent [options] [name] View or grant a plugin's capability\n consent (--grant / --revoke / --list)\n options [options] <name> View or set a plugin's typed options\n (--set key=value, --scope user|project)\n monitors [options] List installed plugins' background\n monitors (trusted only)\n uninstall [options] <name> Uninstall a runtime plugin from a scope\n (user|project|local)\n upgrade [options] <source> Update a runtime plugin from its pinned\n local, git, or registry source; repoints\n .active\n use [options] <name> <version> Pin a plugin's active version (rollback\n or switch)\n help [command] display help for command\n",
121
121
  "pqc": "Usage: chainlesschain pqc [options] [command]\n\nPost-quantum cryptography — key management and migration\n\nOptions:\n -h, --help display help for command\n\nCommands:\n keys [options] List PQC keys\n generate [options] <algorithm> Generate a PQC key pair\n migration-status [options] Show PQC migration status\n algorithms [options] List supported PQC algorithms (FIPS 203/204/205 + hybrid)\n migrate [options] <plan-name> <target-algorithm> Execute PQC key migration\n key-maturities-v2 [options] [V2] List key maturity states\n migration-lifecycles-v2 [options] [V2] List migration 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-migrations-per-key-v2 <n> [V2] Set per-key pending migration cap\n set-key-idle-ms-v2 <ms> [V2] Set key idle threshold (ms)\n set-migration-stuck-ms-v2 <ms> [V2] Set migration stuck threshold (ms)\n register-key-v2 [options] <id> [V2] Register a key profile (PENDING)\n activate-key-v2 <id> [V2] Activate a key (pending|deprecated -> active)\n deprecate-key-v2 <id> [V2] Deprecate a key (active -> deprecated)\n archive-key-v2 <id> [V2] Archive a key (terminal)\n touch-key-v2 <id> [V2] Bump key lastSeenAt\n get-key-v2 [options] <id> [V2] Show a key profile\n list-keys-v2 [options] [V2] List key profiles\n create-migration-v2 [options] <id> [V2] Create a queued V2 migration\n start-migration-v2 <id> [V2] Start a migration (queued -> running)\n complete-migration-v2 <id> [V2] Complete a migration (running -> completed)\n fail-migration-v2 <id> [V2] Fail a migration (running -> failed)\n cancel-migration-v2 <id> [V2] Cancel a migration (queued|running -> cancelled)\n get-migration-v2 [options] <id> [V2] Show migration job\n list-migrations-v2 [options] [V2] List V2 migrations\n active-key-count-v2 [options] [V2] Count active keys (optional --owner filter)\n pending-migration-count-v2 [options] [V2] Count pending migrations (queued+running) (optional --key filter)\n auto-deprecate-idle-keys-v2 [options] [V2] Deprecate idle active keys\n auto-fail-stuck-migrations-v2 [options] [V2] Fail stuck running migrations\n stats-v2 [options] [V2] Show governance stats\n help [command] display help for command\n",
122
122
  "privacy": "Usage: chainlesschain privacy [options] [command]\n\nPrivacy computing (Phase 91)\n\nOptions:\n -h, --help display help for command\n\nCommands:\n protocols [options] List MPC protocols\n dp-mechanisms [options] List differential privacy mechanisms\n he-schemes [options] List homomorphic encryption schemes\n fl-statuses [options] List federated learning statuses\n create-model [options] <name> Create federated learning model\n train [options] <model-id> Run one training round\n fail-model [options] <model-id> Mark model as failed\n show-model [options] <model-id> Show model details\n models [options] List federated learning models\n create-computation [options] <type> Create MPC computation\n submit-share [options] <computation-id> Submit a share to MPC computation\n show-computation [options] <computation-id> Show computation details\n computations [options] List MPC computations\n dp-publish [options] Publish data with differential privacy noise\n he-query [options] Query encrypted data (simulated HE)\n report [options] Privacy computing report\n fl-statuses-v2 [options] List V2 FL statuses\n mpc-statuses-v2 [options] List V2 MPC statuses\n dp-mechanisms-v2 [options] List V2 DP mechanisms\n he-schemes-v2 [options] List V2 HE schemes\n mpc-protocols-v2 [options] List V2 MPC protocols\n default-max-active-mpc Show V2 default max active MPC computations\n max-active-mpc Show current max active MPC computations\n active-mpc-count Show currently-active MPC computation count\n set-max-active-mpc <n> Set max concurrent active MPC computations\n budget-limit Show privacy budget limit\n budget-spent Show privacy budget spent\n set-budget-limit <n> Set privacy budget limit\n reset-budget Reset privacy budget spent counter to 0\n create-model-v2 [options] <name> V2 create FL model (throws on invalid input)\n train-round-v2 [options] <model-id> V2 train one FL round (auto initializing → training)\n aggregate-round [options] <model-id> Aggregate FL round (training → training next / completed)\n fail-model-v2 [options] <model-id> V2 fail FL model (any non-terminal → failed)\n set-fl-status [options] <model-id> <status> V2 state-machine guarded FL status setter\n create-computation-v2 [options] <type> V2 create MPC computation (throws on invalid input)\n submit-share-v2 [options] <comp-id> V2 submit MPC share (state-guarded)\n fail-computation [options] <comp-id> Fail MPC computation (any non-terminal → failed)\n set-mpc-status [options] <comp-id> <status> V2 state-machine guarded MPC status setter\n dp-publish-v2 [options] V2 DP publish (throws on invalid input / exceeded budget)\n he-query-v2 [options] V2 HE query (throws on invalid input)\n stats-v2 [options] V2 all-enum-key zero-init stats\n help [command] display help for command\n",
123
123
  "project": "Usage: chainlesschain project [options] [command]\n\nManage desktop projects (shared SQLite, syncs to mobile via Phase 3d)\n\nOptions:\n -h, --help display help for command\n\nCommands:\n init [options] <name> Create a new project in desktop DB\n list [options] List projects\n show [options] <id> Show project details\n delete [options] <id> Delete a project (soft by default; --hard to truly\n remove)\n help [command] display help for command\n",
@@ -131,7 +131,7 @@
131
131
  "router": "Usage: chainlesschain router [options] [command]\n\nAgent router V2 governance\n\nOptions:\n -h, --help display help for command\n\nCommands:\n maturities-v2 List router profile maturity states (V2)\n dispatch-lifecycle-v2 List router dispatch lifecycle states (V2)\n stats-v2 Show agent-router V2 stats\n config-v2 Show agent-router V2 config\n register-profile-v2 <id> <owner> Register a router profile (V2)\n activate-profile-v2 <id>\n degrade-profile-v2 <id>\n retire-profile-v2 <id>\n touch-profile-v2 <id>\n get-profile-v2 <id>\n list-profiles-v2\n create-dispatch-v2 <id> <profileId> [task]\n dispatch-v2 <id>\n complete-dispatch-v2 <id>\n fail-dispatch-v2 <id> [reason]\n cancel-dispatch-v2 <id> [reason]\n get-dispatch-v2 <id>\n list-dispatches-v2\n auto-degrade-idle-v2\n auto-fail-stuck-v2\n set-max-active-profiles-v2 <n>\n set-max-pending-dispatches-v2 <n>\n set-profile-idle-ms-v2 <n>\n set-dispatch-stuck-ms-v2 <n>\n reset-state-v2\n help [command] display help for command\n",
132
132
  "routine": "Usage: chainlesschain routine [options] [command]\n\nNamed scheduled/triggered agent tasks with run history\n(cron/once/webhook/github)\n\nOptions:\n -h, --help display help for command\n\nCommands:\n create [options] <name> Create a routine (exactly one of\n --cron/--at/--webhook/--github)\n list [options] List routines with run/cost summaries\n enable <id> Enable a routine\n disable <id> Disable a routine (kept, never fires)\n remove <id> Delete a routine (run history is kept)\n trigger [options] <id> Fire a routine NOW (the webhook/API entry point)\n run [options] Driver: fire due cron/once routines and poll github\n triggers\n runs [options] [id] Run history (all routines, or one)\n logs <runId> Print a run's full agent output\n help [command] display help for command\n",
133
133
  "runtime": "Usage: chainlesschain runtime [options] [command]\n\nUniversal application runtime (Phase 63)\n\nOptions:\n -h, --help display help for command\n\nCommands:\n plugin-statuses [options] List plugin lifecycle statuses\n update-types [options] List update types (patch/minor/major/rollback)\n health-levels [options] List health levels\n profile-types [options] List profile sample types (cpu/memory/flamegraph)\n plugin-load [options] Load a plugin\n plugin-unload [options] <id> Unload a plugin\n plugin-status [options] <id> <status> Set plugin status (loading/active/suspended/error/unloaded)\n plugin-show [options] <id> Show plugin details\n plugins [options] List plugins\n hot-update [options] <pluginId> <newVersion> Apply a hot update to a plugin\n rollback [options] <updateId> Roll back a previous update\n updates [options] List updates\n profile [options] Take a runtime profile sample\n profile-show [options] <id> Show profile details\n profiles [options] List profiles\n state-set [options] <key> <value> Set a synced state value (JSON or string)\n state-get [options] <key> Get a synced state value\n state-list [options] List synced state keys\n state-delete [options] <key> Delete a synced state entry\n platform [options] Show platform info\n health [options] Run a runtime health check\n metrics [options] Show runtime metrics\n configure [options] <key> <value> Update a runtime config key (JSON or string)\n config [options] Show current runtime config\n stats [options] Runtime statistics (plugins/updates/profiles/state counts)\n plugin-maturities-v2 [options] List Phase 63 V2 plugin maturity states\n runtime-task-lifecycles-v2 [options] List Phase 63 V2 runtime-task lifecycle states\n default-max-active-plugins-per-owner\n max-active-plugins-per-owner\n set-max-active-plugins-per-owner <n>\n default-max-running-tasks-per-owner\n max-running-tasks-per-owner\n set-max-running-tasks-per-owner <n>\n default-plugin-idle-ms\n plugin-idle-ms\n set-plugin-idle-ms <ms>\n default-task-stuck-ms\n task-stuck-ms\n set-task-stuck-ms <ms>\n active-plugin-count [options]\n running-task-count [options]\n register-plugin-v2 [options] <plugin-id>\n plugin-v2 [options] <plugin-id>\n set-plugin-maturity-v2 [options] <plugin-id> <status>\n activate-plugin-v2 [options] <plugin-id>\n deprecate-plugin-v2 [options] <plugin-id>\n retire-plugin-v2 [options] <plugin-id>\n touch-plugin-invocation <plugin-id>\n enqueue-runtime-task-v2 [options] <task-id>\n runtime-task-v2 [options] <task-id>\n set-runtime-task-status-v2 [options] <task-id> <status>\n start-runtime-task [options] <task-id>\n complete-runtime-task [options] <task-id>\n fail-runtime-task [options] <task-id>\n cancel-runtime-task [options] <task-id>\n auto-retire-idle-plugins [options]\n auto-fail-stuck-runtime-tasks [options]\n stats-v2 [options] Phase 63 V2 statistics\n help [command] display help for command\n",
134
- "sandbox": "Usage: chainlesschain sandbox [options] [command]\n\nSecurity sandbox v2 — isolated agent execution environments\n\nOptions:\n -h, --help display help for command\n\nCommands:\n create [options] <agent-id> Create a new sandbox for an agent\n exec [options] <sandbox-id> <code> Execute code within a sandbox\n destroy [options] <sandbox-id> Destroy a sandbox\n list [options] List active sandboxes\n audit [options] [sandbox-id] Show audit log for sandboxes\n quota [options] <sandbox-id> Show or set sandbox quota\n monitor [options] <sandbox-id> Monitor sandbox behavior and detect suspicious patterns\n prune [options] Destroy sandboxes whose ttl or idle-ttl has expired (Phase 4)\n statuses [options] List sandbox lifecycle status enum values (Phase 87)\n permission-types [options] List permission type enum values (Phase 87)\n risk-levels [options] List risk level enum values (Phase 87)\n quota-types [options] List quota type enum values (Phase 87)\n pause [options] <id> Pause a running sandbox (Phase 87)\n resume [options] <id> Resume a paused sandbox (Phase 87)\n terminate [options] <id> Terminate a sandbox (Phase 87 canonical; more explicit than destroy)\n set-quota-typed [options] <id> <type> <limit> Set a single quota by type (Phase 87)\n check-permission [options] <id> <type> <target> Check whether a sandbox may perform a permission op (Phase 87)\n check-quota [options] <id> <type> [amount] Check quota availability for a type (Phase 87)\n risk-score [options] <id> Compute risk score + risk level for a sandbox (Phase 87)\n risk-level [options] <score> Map a risk score to a RISK_LEVEL bucket (Phase 87)\n auto-isolate [options] <id> Auto-isolate a sandbox: record + terminate (Phase 87)\n isolations [options] List isolation records (Phase 87)\n audit-filter [options] [id] Filter audit log by event types / time range (Phase 87)\n stats-v2 [options] Extended V2 stats (byStatus / auditByAction / isolations) (Phase 87)\n help [command] display help for command\n",
134
+ "sandbox": "Usage: chainlesschain sandbox [options] [command]\n\nSecurity sandbox v2 — isolated agent execution environments\n\nOptions:\n -h, --help display help for command\n\nCommands:\n capabilities [options] Report requested, enforceable, applied, and unsupported agent-shell sandbox capabilities\n create [options] <agent-id> Create a new sandbox for an agent\n exec [options] <sandbox-id> <code> Execute code within a sandbox\n destroy [options] <sandbox-id> Destroy a sandbox\n list [options] List active sandboxes\n audit [options] [sandbox-id] Show audit log for sandboxes\n quota [options] <sandbox-id> Show or set sandbox quota\n monitor [options] <sandbox-id> Monitor sandbox behavior and detect suspicious patterns\n prune [options] Destroy sandboxes whose ttl or idle-ttl has expired (Phase 4)\n statuses [options] List sandbox lifecycle status enum values (Phase 87)\n permission-types [options] List permission type enum values (Phase 87)\n risk-levels [options] List risk level enum values (Phase 87)\n quota-types [options] List quota type enum values (Phase 87)\n pause [options] <id> Pause a running sandbox (Phase 87)\n resume [options] <id> Resume a paused sandbox (Phase 87)\n terminate [options] <id> Terminate a sandbox (Phase 87 canonical; more explicit than destroy)\n set-quota-typed [options] <id> <type> <limit> Set a single quota by type (Phase 87)\n check-permission [options] <id> <type> <target> Check whether a sandbox may perform a permission op (Phase 87)\n check-quota [options] <id> <type> [amount] Check quota availability for a type (Phase 87)\n risk-score [options] <id> Compute risk score + risk level for a sandbox (Phase 87)\n risk-level [options] <score> Map a risk score to a RISK_LEVEL bucket (Phase 87)\n auto-isolate [options] <id> Auto-isolate a sandbox: record + terminate (Phase 87)\n isolations [options] List isolation records (Phase 87)\n audit-filter [options] [id] Filter audit log by event types / time range (Phase 87)\n stats-v2 [options] Extended V2 stats (byStatus / auditByAction / isolations) (Phase 87)\n help [command] display help for command\n",
135
135
  "scim": "Usage: chainlesschain scim [options] [command]\n\nSCIM provisioning — user management, connectors, sync\n\nOptions:\n -h, --help display help for command\n\nCommands:\n users SCIM user management\n connectors [options] List SCIM connectors\n sync <connector-id> Trigger SCIM provisioning sync\n status [options] Show SCIM provisioning status\n identity-lifecycles-v2 [options] List V2 identity lifecycle states\n sync-lifecycles-v2 [options] List V2 sync-job lifecycle states\n stats-v2 [options] Show V2 SCIM stats\n get-max-provisioned-v2 Get max provisioned identities per\n connector\n set-max-provisioned-v2 <n> Set max provisioned identities per\n connector\n get-max-running-sync-v2 Get max running sync jobs per connector\n set-max-running-sync-v2 <n> Set max running sync jobs per connector\n get-identity-idle-ms-v2 Get identity idle ms\n set-identity-idle-ms-v2 <ms> Set identity idle ms\n get-sync-stuck-ms-v2 Get sync-job stuck ms\n set-sync-stuck-ms-v2 <ms> Set sync-job stuck ms\n provisioned-count-v2 <connectorId> Count provisioned identities for\n connector\n running-sync-count-v2 <connectorId> Count running sync jobs for connector\n register-identity-v2 [options] <id> Register V2 identity (initial=pending)\n get-identity-v2 <id> Get V2 identity by id\n list-identities-v2 [options] List V2 identities\n provision-identity-v2 <id> Transition identity → provisioned\n suspend-identity-v2 <id> Transition identity → suspended\n deprovision-identity-v2 <id> Transition identity → deprovisioned\n (terminal)\n touch-identity-v2 <id> Update identity lastSeenAt\n create-sync-job-v2 [options] <id> Create V2 sync job (initial=queued)\n get-sync-job-v2 <id> Get V2 sync job by id\n list-sync-jobs-v2 [options] List V2 sync jobs\n start-sync-job-v2 <id> Transition sync job → running\n succeed-sync-job-v2 <id> Transition sync job → succeeded\n (terminal)\n fail-sync-job-v2 <id> Transition sync job → failed (terminal)\n cancel-sync-job-v2 <id> Transition sync job → cancelled\n (terminal)\n auto-deprovision-idle-v2 Auto-deprovision idle identities; output\n flipped\n auto-fail-stuck-sync-v2 Auto-fail stuck running syncs; output\n flipped\n help [command] display help for command\n",
136
136
  "search": "Usage: chainlesschain search [options] <query>\n\nSearch knowledge base (BM25 + vector hybrid)\n\nArguments:\n query Search query\n\nOptions:\n --mode <mode> Search mode: bm25, vector, hybrid (default: \"hybrid\")\n --top-k <n> Number of results (default: \"10\")\n --threshold <n> Minimum score threshold (default: \"0\")\n --json Output as JSON\n -h, --help display help for command\n",
137
137
  "serve": "Usage: chainlesschain serve [options] [command]\n\nStart WebSocket server for remote CLI access\n\nOptions:\n --app-server Run the canonical CC App Server over stdio\n instead of the legacy WebSocket server\n --app-server-websocket Use the experimental canonical App Server\n WebSocket transport (requires --app-server)\n --app-server-state-dir <path> Owner-controlled rollout directory (JSONL\n directory or SQLite parent)\n --app-server-state-path <path> Exact JSONL directory or SQLite database\n path for --app-server\n --app-server-store <backend> Physical rollout adapter: jsonl or sqlite\n (default: jsonl)\n --app-server-queue-cap <n> Maximum queued App Server requests\n (default: \"256\")\n --app-server-tls-cert <path> TLS certificate for non-loopback App Server\n WebSocket binding\n --app-server-tls-key <path> TLS private key for non-loopback App Server\n WebSocket binding\n -p, --port <port> Port number (default: \"18800\")\n -H, --host <host> Bind host (default: \"127.0.0.1\")\n --token <token> Authentication token (required for remote\n access and App Server WebSocket)\n --max-connections <n> Maximum concurrent connections (default:\n \"10\")\n --timeout <ms> Command execution timeout in milliseconds\n (default: \"30000\")\n --allow-remote Allow non-localhost connections (requires\n --token)\n --project <path> Default project root for sessions\n --remote-session-relay-url <url> Signaling relay URL for Remote Session\n pairing\n --remote-session-peer-id <id> Stable relay peer ID for this local runtime\n --http-port <port> Hosted HTTP port for Phase 5 envelope SSE\n (disabled if unset)\n --bundle <path> Agent bundle directory; may execute local\n MCP commands from mcp.json\n -h, --help display help for command\n\nCommands:\n migrate-rollouts [options] Verify or copy canonical rollouts between\n physical storage adapters\n",
@@ -15,6 +15,7 @@ import {
15
15
  captureAgentSkillOutcomeIndex,
16
16
  } from "../lib/evolution/agent-evolution-runtime-composition-brand.js";
17
17
  import { captureSkillVectorAuthority } from "../lib/skill-vector-authority.js";
18
+ import { captureSkillRuntimeDependencies } from "../lib/evolution/skill-runtime-revalidation.js";
18
19
  import { captureSkillRetrievalRevocationReader } from "../lib/evolution/skill-retrieval-revocation-authority.js";
19
20
  import { resolvePromptText } from "../runtime/system-prompt.js";
20
21
  import {
@@ -24,6 +25,7 @@ import {
24
25
  import { resolveImages, resolveVisionLlm } from "../lib/image-input.js";
25
26
  import { loadConfig } from "../lib/config-manager.js";
26
27
  import {
28
+ assertSandboxCapabilities,
27
29
  normalizeAgentSandboxMode,
28
30
  assertSandboxAvailable,
29
31
  enforceSandboxFailClosed,
@@ -269,6 +271,8 @@ export async function resolveAgentCommandEvolutionComposition(
269
271
  }
270
272
 
271
273
  export function registerAgentCommand(program, dependencies = {}) {
274
+ const runtimeAdmissionDependencies =
275
+ captureSkillRuntimeDependencies(dependencies);
272
276
  const evolutionCompositionFactory =
273
277
  dependencies.evolutionCompositionFactory ?? null;
274
278
  const skillOutcomeIndex =
@@ -1272,6 +1276,7 @@ export function registerAgentCommand(program, dependencies = {}) {
1272
1276
  options.permissionMode === "auto" ? "auto" : "safe",
1273
1277
  );
1274
1278
  }
1279
+ assertSandboxCapabilities(resolvedAgentSandbox);
1275
1280
  assertSandboxAvailable(resolvedAgentSandbox);
1276
1281
  if (options.sandboxMode === "off") {
1277
1282
  // The formal quality harness runs in an isolated temporary home and
@@ -1588,6 +1593,7 @@ export function registerAgentCommand(program, dependencies = {}) {
1588
1593
  jsonSchema: options.jsonSchema || null,
1589
1594
  claudeStorageLaunchEnv,
1590
1595
  ...(skillOutcomeIndex === null ? {} : { skillOutcomeIndex }),
1596
+ ...runtimeAdmissionDependencies,
1591
1597
  ...(skillVectorAuthority === null ? {} : { skillVectorAuthority }),
1592
1598
  ...(skillRetrievalRevocationReader === null
1593
1599
  ? {}
@@ -1939,6 +1945,7 @@ export function registerAgentCommand(program, dependencies = {}) {
1939
1945
  chatFn: fallbackChatFn,
1940
1946
  claudeStorageLaunchEnv,
1941
1947
  ...(skillOutcomeIndex === null ? {} : { skillOutcomeIndex }),
1948
+ ...runtimeAdmissionDependencies,
1942
1949
  ...(skillVectorAuthority === null ? {} : { skillVectorAuthority }),
1943
1950
  ...(skillRetrievalRevocationReader === null
1944
1951
  ? {}
@@ -2054,6 +2061,7 @@ export function registerAgentCommand(program, dependencies = {}) {
2054
2061
  return;
2055
2062
  }
2056
2063
  const runtime = createAgentRuntimeFactory({
2064
+ ...runtimeAdmissionDependencies,
2057
2065
  evolutionComposition,
2058
2066
  skillOutcomeIndex,
2059
2067
  skillVectorAuthority,
@@ -1022,12 +1022,32 @@ export function registerBackgroundSessionCommands(program) {
1022
1022
  .command("status")
1023
1023
  .description("Show background agent supervisor status")
1024
1024
  .option("--all", "Include completed, failed, stopped and lost sessions")
1025
+ .option(
1026
+ "--limit <n>",
1027
+ "Return at most n sessions (1-200) and include a cursor when more remain",
1028
+ )
1029
+ .option(
1030
+ "--cursor <cursor>",
1031
+ "Continue a prior paged status result with its opaque cursor",
1032
+ )
1025
1033
  .option("--json", "Output as JSON")
1026
1034
  .action(async (options) => {
1027
1035
  try {
1028
- const { backgroundAgentsDir, listBackgroundAgents } =
1029
- await loadSupervisor();
1030
- const sessions = listBackgroundAgents({ all: options.all === true });
1036
+ const {
1037
+ backgroundAgentsDir,
1038
+ listBackgroundAgents,
1039
+ listBackgroundAgentsPage,
1040
+ } = await loadSupervisor();
1041
+ const paged =
1042
+ options.limit !== undefined || options.cursor !== undefined;
1043
+ const page = paged
1044
+ ? listBackgroundAgentsPage({
1045
+ all: options.all === true,
1046
+ limit: options.limit,
1047
+ cursor: options.cursor,
1048
+ })
1049
+ : { sessions: listBackgroundAgents({ all: options.all === true }) };
1050
+ const sessions = page.sessions;
1031
1051
  const running = sessions.filter((s) => s.status === "running").length;
1032
1052
  if (options.json) {
1033
1053
  console.log(
@@ -1038,6 +1058,7 @@ export function registerBackgroundSessionCommands(program) {
1038
1058
  running,
1039
1059
  total: sessions.length,
1040
1060
  sessions,
1061
+ ...(paged ? { nextCursor: page.nextCursor } : {}),
1041
1062
  },
1042
1063
  null,
1043
1064
  2,
@@ -1050,6 +1071,13 @@ export function registerBackgroundSessionCommands(program) {
1050
1071
  );
1051
1072
  logger.log(chalk.gray(` dir ${backgroundAgentsDir()}`));
1052
1073
  printBackgroundAgents(sessions);
1074
+ if (paged && page.nextCursor) {
1075
+ logger.log(
1076
+ chalk.gray(
1077
+ ` next: cc daemon status${options.all ? " --all" : ""} --limit ${options.limit || 50} --cursor ${page.nextCursor}`,
1078
+ ),
1079
+ );
1080
+ }
1053
1081
  } catch (error) {
1054
1082
  logger.error(chalk.red(error.message));
1055
1083
  process.exitCode = 1;
@@ -4,6 +4,7 @@
4
4
  */
5
5
 
6
6
  import { createAgentRuntimeFactory } from "../runtime/runtime-factory.js";
7
+ import { captureSkillRuntimeDependencies } from "../lib/evolution/skill-runtime-revalidation.js";
7
8
  import { assertChatSessionUsageAdmission } from "../lib/chat-session-admission.js";
8
9
  import { randomUUID } from "node:crypto";
9
10
  import { types as utilTypes } from "node:util";
@@ -100,7 +101,10 @@ export function registerChatCommand(program, dependencies = {}) {
100
101
  evolutionCompositionFactory,
101
102
  { agent: Boolean(options.agent) },
102
103
  );
103
- const factory = createRuntimeFactory({ evolutionComposition });
104
+ const factory = createRuntimeFactory({
105
+ evolutionComposition,
106
+ ...captureSkillRuntimeDependencies(dependencies),
107
+ });
104
108
  const runtimeOptions = {
105
109
  model: options.model,
106
110
  provider: options.provider,
@@ -4,7 +4,8 @@
4
4
  *
5
5
  * Each task gets a fresh temp workspace; the agent is invoked headlessly
6
6
  * (`cc agent -p` in that cwd with acceptEdits so it can write files) and the
7
- * task's objective check() decides pass/fail. `--dry-run` swaps in a no-op agent
7
+ * task's objective check() and successful Agent completion decide pass/fail.
8
+ * `--dry-run` swaps in a no-op agent
8
9
  * so the harness + report can be exercised without a model.
9
10
  */
10
11
 
@@ -49,13 +50,26 @@ const BIN = path.resolve(__dirname, "..", "..", "bin", "chainlesschain.js");
49
50
 
50
51
  function verifyAgentTerminal(output) {
51
52
  try {
52
- const events = output.split(/\r?\n/u).filter((line) => line.trim()).map((line) => JSON.parse(line));
53
+ const events = output
54
+ .split(/\r?\n/u)
55
+ .filter((line) => line.trim())
56
+ .map((line) => JSON.parse(line));
53
57
  const results = events.filter((event) => event?.type === "result");
54
58
  const terminal = results[0];
55
- return results.length === 1 && events.at(-1) === terminal &&
56
- terminal.subtype === "success" && terminal.is_error !== true &&
57
- !events.some((event) => event?.type === "error");
58
- } catch { return false; }
59
+ return {
60
+ terminalVerified:
61
+ results.length === 1 &&
62
+ events.at(-1) === terminal &&
63
+ terminal.subtype === "success" &&
64
+ terminal.is_error === false &&
65
+ !events.some((event) => event?.type === "error"),
66
+ observedFallback: events.some((event) =>
67
+ ["provider_fallback", "model_fallback"].includes(event?.subtype),
68
+ ),
69
+ };
70
+ } catch {
71
+ return { terminalVerified: false, observedFallback: null };
72
+ }
59
73
  }
60
74
 
61
75
  /**
@@ -121,10 +135,11 @@ function makeHeadlessRunAgent(opts = {}) {
121
135
  ];
122
136
  if (opts.model) args.push("--model", opts.model);
123
137
  if (opts.provider) args.push("--provider", opts.provider);
138
+ if (opts.ephemeral === true) args.push("--ephemeral");
124
139
  }
125
140
  const child = _deps.spawn(process.execPath, args, {
126
141
  cwd,
127
- env: { ...process.env, CLAUDECODE: "1" },
142
+ env: { ...process.env, ...(opts.env || {}), CLAUDECODE: "1" },
128
143
  windowsHide: true,
129
144
  // Own process group on POSIX so a timeout can reap the whole tree.
130
145
  detached: _deps.platform !== "win32",
@@ -149,6 +164,7 @@ function makeHeadlessRunAgent(opts = {}) {
149
164
  exitCode: result.exitCode ?? null,
150
165
  signal: result.signal ?? null,
151
166
  terminalVerified: result.terminalVerified === true,
167
+ observedFallback: result.observedFallback ?? null,
152
168
  },
153
169
  });
154
170
  };
@@ -188,14 +204,22 @@ function makeHeadlessRunAgent(opts = {}) {
188
204
  });
189
205
  return;
190
206
  }
191
- const terminalVerified = !opts._argv && verifyAgentTerminal(out);
207
+ const { terminalVerified, observedFallback } = opts._argv
208
+ ? { terminalVerified: false, observedFallback: null }
209
+ : verifyAgentTerminal(out);
192
210
  const ok = code === 0 && !signal && (opts._argv || terminalVerified);
193
211
  done({
194
- ok: Boolean(ok), output: out, exitCode: code, signal: signal || null,
212
+ ok: Boolean(ok),
213
+ output: out,
214
+ exitCode: code,
215
+ signal: signal || null,
195
216
  terminalVerified,
196
- error: ok ? null : code === 0 && !signal
197
- ? "agent stream lacks a valid success terminal"
198
- : err || `agent process exited with ${signal || code}`,
217
+ observedFallback,
218
+ error: ok
219
+ ? null
220
+ : code === 0 && !signal
221
+ ? "agent stream lacks a valid success terminal"
222
+ : err || `agent process exited with ${signal || code}`,
199
223
  });
200
224
  });
201
225
  });
@@ -237,9 +261,19 @@ export function registerEvalCommand(program, { logger } = {}) {
237
261
  "--trend",
238
262
  "Report the diagnostic pass-rate trend from --history instead of running",
239
263
  )
240
- .option("--strict", "With --trend: require complete, comparable recent evidence; legacy history cannot pass")
241
- .option("--max-age-hours <hours>", "With --strict: maximum age of both compared runs", "168")
242
- .option("--comparison-context <file>", "Bind explicit provider/model to operator-declared modelRevision and environment/permission/inference digests (not production attestation)")
264
+ .option(
265
+ "--strict",
266
+ "With --trend: require complete, comparable recent evidence; legacy history cannot pass",
267
+ )
268
+ .option(
269
+ "--max-age-hours <hours>",
270
+ "With --strict: maximum age of both compared runs",
271
+ "168",
272
+ )
273
+ .option(
274
+ "--comparison-context <file>",
275
+ "Bind explicit provider/model to operator-declared modelRevision and environment/permission/inference digests (not production attestation)",
276
+ )
243
277
  .option(
244
278
  "--regression-threshold <pct>",
245
279
  "With --trend: pass-rate drop (in points) that fails the gate on its own",
@@ -247,7 +281,16 @@ export function registerEvalCommand(program, { logger } = {}) {
247
281
  )
248
282
  .action(async (options) => {
249
283
  if (options.strict && !options.trend) {
250
- (log.error || console.error)("--strict requires --trend --history <file>");
284
+ (log.error || console.error)(
285
+ "--strict requires --trend --history <file>",
286
+ );
287
+ process.exitCode = 1;
288
+ return;
289
+ }
290
+ if (options.strict && options.dryRun) {
291
+ (log.error || console.error)(
292
+ "--dry-run cannot be combined with --strict",
293
+ );
251
294
  process.exitCode = 1;
252
295
  return;
253
296
  }
@@ -261,8 +304,9 @@ export function registerEvalCommand(program, { logger } = {}) {
261
304
  return;
262
305
  }
263
306
  let history;
264
- try { history = readEvalHistory(options.history); }
265
- catch {
307
+ try {
308
+ history = readEvalHistory(options.history);
309
+ } catch {
266
310
  history = { runs: [], issues: [{ code: "history_unreadable" }] };
267
311
  }
268
312
  const threshold = Number(options.regressionThreshold) / 100;
@@ -272,20 +316,28 @@ export function registerEvalCommand(program, { logger } = {}) {
272
316
  regressionThreshold: threshold,
273
317
  });
274
318
  if (options.json) console.log(JSON.stringify(gate, null, 2));
275
- else (log.log || console.log)(
276
- `Eval comparison: ${gate.status}\n` +
277
- ` Scope: local configuration comparison; operator declarations are not production attestation.\n` +
278
- (gate.reasons.length ? ` ${gate.reasons.join(", ")}` : " Comparable executions and candidate checks passed."),
279
- );
319
+ else
320
+ (log.log || console.log)(
321
+ `Eval comparison: ${gate.status}\n` +
322
+ ` Scope: local configuration comparison; operator declarations are not production attestation.\n` +
323
+ (gate.reasons.length
324
+ ? ` ${gate.reasons.join(", ")}`
325
+ : " Comparable executions and candidate checks passed."),
326
+ );
280
327
  if (!gate.passed) process.exitCode = 1;
281
328
  return;
282
329
  }
283
- const trend = computeTrend(history.runs, { regressionThreshold: Math.max(0, threshold || 0) });
330
+ const trend = computeTrend(history.runs, {
331
+ regressionThreshold: Math.max(0, threshold || 0),
332
+ });
284
333
  if (history.issues.length) trend.historyIssues = history.issues;
285
334
  if (options.json) console.log(JSON.stringify(trend, null, 2));
286
335
  else {
287
336
  (log.log || console.log)(formatTrend(trend));
288
- if (history.issues.length) (log.error || console.error)("History contains invalid or unreadable records; this diagnostic is not release evidence.");
337
+ if (history.issues.length)
338
+ (log.error || console.error)(
339
+ "History contains invalid or unreadable records; this diagnostic is not release evidence.",
340
+ );
289
341
  }
290
342
  if (trend.regressed) process.exitCode = 1;
291
343
  return;
@@ -297,11 +349,16 @@ export function registerEvalCommand(program, { logger } = {}) {
297
349
  tasks = _deps.getSuite(options.suite);
298
350
  comparison = createEvalComparison({
299
351
  suite: options.suite,
300
- corpusDigest: evalDigest(fs.readFileSync(new URL("../lib/eval/tasks.js", import.meta.url))),
352
+ corpusDigest: evalDigest(
353
+ fs.readFileSync(new URL("../lib/eval/tasks.js", import.meta.url)),
354
+ ),
301
355
  provider: options.provider,
302
356
  model: options.model,
303
357
  context: options.comparisonContext
304
- ? readComparisonContext(options.comparisonContext, { provider: options.provider, model: options.model })
358
+ ? readComparisonContext(options.comparisonContext, {
359
+ provider: options.provider,
360
+ model: options.model,
361
+ })
305
362
  : null,
306
363
  });
307
364
  } catch (err) {
@@ -391,7 +448,8 @@ export function registerEvalCommand(program, { logger } = {}) {
391
448
  }
392
449
  }
393
450
  // Non-zero exit when not every task passed — usable as a CI gate.
394
- if (summary.total === 0 || summary.passed < summary.total) process.exitCode = 1;
451
+ if (summary.total === 0 || summary.passed < summary.total)
452
+ process.exitCode = 1;
395
453
  });
396
454
  return program;
397
455
  }