chainlesschain 0.166.15 → 0.166.17

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 (202) hide show
  1. package/README.md +3 -3
  2. package/completions/_cc +1 -1
  3. package/completions/cc.bash +1 -1
  4. package/completions/cc.fish +1 -1
  5. package/completions/cc.ps1 +1 -1
  6. package/package.json +2 -2
  7. package/src/assets/web-panel/assets/{AIOps-To-6rimH.js → AIOps-CVW2n2rh.js} +1 -1
  8. package/src/assets/web-panel/assets/{ActionButton-CpdCnTv3.js → ActionButton-DtuM163O.js} +1 -1
  9. package/src/assets/web-panel/assets/{Analytics-DK7VNES_.js → Analytics-BXvl_qHu.js} +3 -3
  10. package/src/assets/web-panel/assets/{AppLayout-NZ5FvhCx.js → AppLayout-VDBTFKOp.js} +5 -5
  11. package/src/assets/web-panel/assets/{Artifacts-NXceQPmN.js → Artifacts-BNz2xCiG.js} +1 -1
  12. package/src/assets/web-panel/assets/{Audit-B2d64DH2.js → Audit-DTu9Hn9P.js} +1 -1
  13. package/src/assets/web-panel/assets/{BackgroundAgents-ByYgvEVY.js → BackgroundAgents-D2OCPzLe.js} +1 -1
  14. package/src/assets/web-panel/assets/{Backup-BXvQLDvN.js → Backup-C9M-vG7G.js} +1 -1
  15. package/src/assets/web-panel/assets/{BaseInput-C4GZk-As.js → BaseInput-BUkCNiUQ.js} +1 -1
  16. package/src/assets/web-panel/assets/{Chat-CvPuohL8.js → Chat-OJ2ajF7l.js} +5 -5
  17. package/src/assets/web-panel/assets/{ChatBubbleRenderer-DTftcclX.js → ChatBubbleRenderer-BdZt76Ab.js} +1 -1
  18. package/src/assets/web-panel/assets/{Checkbox-C8dQGIqD.js → Checkbox-C1gXKDsc.js} +1 -1
  19. package/src/assets/web-panel/assets/{Codegen-DRM6S1W4.js → Codegen-BXbznLg7.js} +1 -1
  20. package/src/assets/web-panel/assets/{Col-BDM8l-r5.js → Col-CbCq5N0i.js} +1 -1
  21. package/src/assets/web-panel/assets/{Community-Bvmfi1fX.js → Community-V8Ks6Yun.js} +1 -1
  22. package/src/assets/web-panel/assets/{Compact-DGQTCima.js → Compact-DkeHQTpQ.js} +1 -1
  23. package/src/assets/web-panel/assets/{Compliance-D_0C-2P6.js → Compliance-JeLKwn4Q.js} +1 -1
  24. package/src/assets/web-panel/assets/{Cowork-3C_q99ok.js → Cowork-azfetcBz.js} +3 -3
  25. package/src/assets/web-panel/assets/{Cron-CIiMQ1Hl.js → Cron-Q691i_Gp.js} +2 -2
  26. package/src/assets/web-panel/assets/{Crosschain-peebGnES.js → Crosschain-BLjDRbr_.js} +1 -1
  27. package/src/assets/web-panel/assets/{DID-OkX4KB9T.js → DID-D8ptXplK.js} +2 -2
  28. package/src/assets/web-panel/assets/{Dashboard-D9lm0Wxa.js → Dashboard-Ctj2VVZL.js} +2 -2
  29. package/src/assets/web-panel/assets/{Dropdown-CitActXx.js → Dropdown-D8VgkMJ8.js} +1 -1
  30. package/src/assets/web-panel/assets/EmailListRenderer-CQPe5S6q.js +1 -0
  31. package/src/assets/web-panel/assets/{FamilyGuardDashboard-CBWAi8XL.js → FamilyGuardDashboard-ySA-7SiN.js} +1 -1
  32. package/src/assets/web-panel/assets/{Federation-afj8jDcp.js → Federation-1PMD-fBf.js} +1 -1
  33. package/src/assets/web-panel/assets/{FormItemContext-Dabt59KY.js → FormItemContext-C_jr6U4Q.js} +1 -1
  34. package/src/assets/web-panel/assets/{GenericCardRenderer-BQpXA9kj.js → GenericCardRenderer-Bu3bKf2B.js} +1 -1
  35. package/src/assets/web-panel/assets/{Git-D2p2Moo1.js → Git-Dv4Fa_T5.js} +2 -2
  36. package/src/assets/web-panel/assets/{Governance-DkFfPykv.js → Governance-DOEy1n1k.js} +1 -1
  37. package/src/assets/web-panel/assets/{Inference-C1DKpeN2.js → Inference-DkvqzWcJ.js} +1 -1
  38. package/src/assets/web-panel/assets/{KnowledgeGraph-CjfVg4oQ.js → KnowledgeGraph-DdUJK949.js} +1 -1
  39. package/src/assets/web-panel/assets/{Logs-D-zMvdSf.js → Logs-CRelcdUZ.js} +2 -2
  40. package/src/assets/web-panel/assets/{MarkdownRenderer-jzEpGkbc.js → MarkdownRenderer-0AHbbTA4.js} +1 -1
  41. package/src/assets/web-panel/assets/{Marketplace-DfAjJLyS.js → Marketplace-BuuBKsev.js} +1 -1
  42. package/src/assets/web-panel/assets/{McpTools-BGDHQES1.js → McpTools-DlgpEmA1.js} +3 -3
  43. package/src/assets/web-panel/assets/{Memory-BYqrGAPS.js → Memory-DTfdqUGy.js} +2 -2
  44. package/src/assets/web-panel/assets/{MobileBridge-CQ6FEtty.js → MobileBridge-CXLE5ZFO.js} +1 -1
  45. package/src/assets/web-panel/assets/{MobileProjects-BpMvh5JW.js → MobileProjects-Dz25OB0n.js} +1 -1
  46. package/src/assets/web-panel/assets/{Mtc-CWH25SrU.js → Mtc-kEL0fhgD.js} +2 -2
  47. package/src/assets/web-panel/assets/{MtcAudit-D6DiLmei.js → MtcAudit-BE4UvFJU.js} +2 -2
  48. package/src/assets/web-panel/assets/{Multisig-BSxRN4jD.js → Multisig-CSApSn8c.js} +3 -3
  49. package/src/assets/web-panel/assets/{NLProgramming-C0FDPKT4.js → NLProgramming-D11FpKWx.js} +1 -1
  50. package/src/assets/web-panel/assets/{Notes-VKR78bH-.js → Notes-CDL-D2CS.js} +3 -3
  51. package/src/assets/web-panel/assets/{NotificationSettings-DLSklSZB.js → NotificationSettings-C0Q6lO-c.js} +1 -1
  52. package/src/assets/web-panel/assets/OrderTableRenderer-ZRE0OKbj.js +1 -0
  53. package/src/assets/web-panel/assets/{Organization-BB3pB27e.js → Organization-Dc-maVAq.js} +4 -4
  54. package/src/assets/web-panel/assets/{Overflow-Cr7bzwcs.js → Overflow-B5mUpSvi.js} +1 -1
  55. package/src/assets/web-panel/assets/{P2P-D1fkMMzI.js → P2P-TjXV53wq.js} +2 -2
  56. package/src/assets/web-panel/assets/PdhVaultBrowser-DvV2btIr.js +7 -0
  57. package/src/assets/web-panel/assets/{Permissions-c3Ijv0v4.js → Permissions-DKRzQ2O6.js} +4 -4
  58. package/src/assets/web-panel/assets/{PersonalDataHub-BJwbh3P2.js → PersonalDataHub-Dx2eqft8.js} +4 -4
  59. package/src/assets/web-panel/assets/{Pipeline-C4fhXafB.js → Pipeline-CnYZMB5p.js} +1 -1
  60. package/src/assets/web-panel/assets/{Privacy-DzSx3CD-.js → Privacy-BonKpPnp.js} +1 -1
  61. package/src/assets/web-panel/assets/{ProjectInit-D9fL5fED.js → ProjectInit-DWO0Du3J.js} +2 -2
  62. package/src/assets/web-panel/assets/{ProjectSettings-CB5FVrOR.js → ProjectSettings-C9jqyYRv.js} +2 -2
  63. package/src/assets/web-panel/assets/{Projects-DWhwdgfY.js → Projects-CYpKwXbz.js} +1 -1
  64. package/src/assets/web-panel/assets/{Providers-B9ZH4faS.js → Providers-CW-fkwJq.js} +1 -1
  65. package/src/assets/web-panel/assets/{QrScannerModal-BLKDHT8_.js → QrScannerModal-Cw0J3Zud.js} +1 -1
  66. package/src/assets/web-panel/assets/{QuickAsk-D1oYUcSY.js → QuickAsk-BH4A4IpR.js} +1 -1
  67. package/src/assets/web-panel/assets/{Recommend-CC2nmrOD.js → Recommend-CDwMwJus.js} +1 -1
  68. package/src/assets/web-panel/assets/{RemoteSession-qW9QF4-r.js → RemoteSession-DKIPwzTf.js} +2 -2
  69. package/src/assets/web-panel/assets/{Reputation-BDWqfzcr.js → Reputation-CklDj7qS.js} +1 -1
  70. package/src/assets/web-panel/assets/{Row-BBV2iCjT.js → Row-DJWZKsH0.js} +1 -1
  71. package/src/assets/web-panel/assets/{RssFeed-CcwrNwZB.js → RssFeed-BfSLCewo.js} +3 -3
  72. package/src/assets/web-panel/assets/{Search-Dr6fZ0D_.js → Search-B0IST--x.js} +1 -1
  73. package/src/assets/web-panel/assets/{Security-BPzaoCU6.js → Security-h1sYNWtt.js} +4 -4
  74. package/src/assets/web-panel/assets/{Services-BoKUU1I_.js → Services-Gh0-oxI_.js} +2 -2
  75. package/src/assets/web-panel/assets/{Skeleton-C8lT8GUg.js → Skeleton-CNDV_jOs.js} +1 -1
  76. package/src/assets/web-panel/assets/{Skills-DPpWeicz.js → Skills-ByCLTh1n.js} +1 -1
  77. package/src/assets/web-panel/assets/{Sla-UiijzpMU.js → Sla-BfyrJTJz.js} +1 -1
  78. package/src/assets/web-panel/assets/{SpeechSettings-DoofrLwS.js → SpeechSettings-BQzo9kNX.js} +1 -1
  79. package/src/assets/web-panel/assets/{SyncSettings-DXnyfTDw.js → SyncSettings-B6fS6z_1.js} +2 -2
  80. package/src/assets/web-panel/assets/{Tasks-g_WHjKeg.js → Tasks-C-uKCP-l.js} +1 -1
  81. package/src/assets/web-panel/assets/{Templates-DRuCh9g2.js → Templates-D6oDy7wL.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tenant-QHIq1pH1.js → Tenant-D3LT2wNQ.js} +1 -1
  83. package/src/assets/web-panel/assets/{Terminal-G0fuI216.js → Terminal-BteLcv_O.js} +2 -2
  84. package/src/assets/web-panel/assets/{TimelineRenderer-4MT7SpGk.js → TimelineRenderer-DHHuxfqH.js} +1 -1
  85. package/src/assets/web-panel/assets/{Tokens-B5xT5umA.js → Tokens-BRQeykXw.js} +1 -1
  86. package/src/assets/web-panel/assets/{Trigger-D7HPbNgc.js → Trigger-p2XaFWEu.js} +1 -1
  87. package/src/assets/web-panel/assets/{Trust-CxH69dU5.js → Trust-BxadBMft.js} +1 -1
  88. package/src/assets/web-panel/assets/{UkeySign-CPPosveH.js → UkeySign-DRBP7LDk.js} +1 -1
  89. package/src/assets/web-panel/assets/{VideoEditing-Du5lGwAt.js → VideoEditing-CZ3NZkh7.js} +1 -1
  90. package/src/assets/web-panel/assets/{Wallet-BBIGNESK.js → Wallet-C3NTBN7G.js} +4 -4
  91. package/src/assets/web-panel/assets/{WebAuthn-Cc3HSGmv.js → WebAuthn-C7LVgMlb.js} +5 -5
  92. package/src/assets/web-panel/assets/{WorkflowEditor-DBoVPNCh.js → WorkflowEditor-0_Iveog7.js} +1 -1
  93. package/src/assets/web-panel/assets/{chat-DHcjgiem.js → chat-DzzluYo3.js} +1 -1
  94. package/src/assets/web-panel/assets/{colors-DrRrvJIV.js → colors-DSMYXpaj.js} +1 -1
  95. package/src/assets/web-panel/assets/{compact-item-BuY_sAoN.js → compact-item-W76u1VSV.js} +1 -1
  96. package/src/assets/web-panel/assets/{createContext-CepH1Fha.js → createContext-otsESjb5.js} +1 -1
  97. package/src/assets/web-panel/assets/devWarning-BztaXF84.js +1 -0
  98. package/src/assets/web-panel/assets/{hasIn-Dh80Ot6o.js → hasIn-3sNLrvug.js} +1 -1
  99. package/src/assets/web-panel/assets/index-4jP_hG_4.js +1 -0
  100. package/src/assets/web-panel/assets/{index-LBkSOwky.js → index-B1I1AYJs.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-B0rvJjId.js → index-B5LOYdYm.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-D6tOVlq-.js → index-B9X_jqXe.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-D7lstbTh.js → index-BA8mZxd-.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-BPDEOOlA.js → index-BDlDO2px.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-DuSUCH7h.js → index-BJsQio5O.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-CEfVkKIY.js → index-BRsD1PT2.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-CYydOga6.js → index-BXLx9HfA.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-DkZP_QaB.js → index-BcGJtmHM.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-BnVIvc15.js → index-BdtmEKat.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-DuRYBWrj.js → index-BpcQYzP7.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-By0qqC3S.js → index-C2aht9-M.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-C10033eO.js → index-CE7tSow-.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-9crgJ3Id.js → index-CENWwjef.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-CNQK9DIr.js → index-CKoFyHYQ.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-DUNyTmkS.js → index-Cg86EzNp.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-CnRK8_Dd.js → index-ClOFeZ-t.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-BW9Pycxh.js → index-CtFOt5x1.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-D5_K3GKu.js → index-D7A5U2IH.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-DRy3_beb.js → index-DH4cl52p.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-DWANFMlq.js → index-DLDh1OW3.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-C5vhNRqS.js → index-DMmdIpLA.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-Ca5d64IH.js → index-DS9WYDMf.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-zGH9zH3w.js → index-DTA8Iavv.js} +3 -3
  124. package/src/assets/web-panel/assets/{index-BoRy2yup.js → index-DZKAzEge.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-Cx21_p3m.js → index-DdU7IkKX.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-B9Gh-SOn.js → index-Ddd4mird.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-CiUx-tkV.js → index-DmpaC2yk.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-DYN49m7k.js → index-GlIOE4ja.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-CUnd5hyp.js → index-MhQQ3h8q.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-CW_23-gU.js → index-NaO9AE-F.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-0TYLnd11.js → index-UUHCwfNq.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-NS9dW1F1.js → index-pVm_iUre.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-hYaigdGm.js → index-q7ftLqNt.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-A5lVwYVq.js → index-uSCkbpZH.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-BtqigRzf.js → index-vBKPcmAP.js} +1 -1
  136. package/src/assets/web-panel/assets/{index-BiZQooWK.js → index-vUmYkqmu.js} +1 -1
  137. package/src/assets/web-panel/assets/index-zxwuAXL5.js +1 -0
  138. package/src/assets/web-panel/assets/{initDefaultProps-nI_X3wKl.js → initDefaultProps-DF6llUXV.js} +1 -1
  139. package/src/assets/web-panel/assets/{motion-LUHbQu_R.js → motion-vtDV8_5K.js} +1 -1
  140. package/src/assets/web-panel/assets/{move-DHI_KvJt.js → move-B6c0bdy2.js} +1 -1
  141. package/src/assets/web-panel/assets/{mtc-parser-AYdL_7Mo.js → mtc-parser-DlLYWuBK.js} +1 -1
  142. package/src/assets/web-panel/assets/{omit-CtV3HRKa.js → omit-BH0zOxLN.js} +1 -1
  143. package/src/assets/web-panel/assets/{pickAttrs-CcJLTOu4.js → pickAttrs-D9di8_In.js} +1 -1
  144. package/src/assets/web-panel/assets/{placementArrow-DHbiLUps.js → placementArrow-BDSngufM.js} +1 -1
  145. package/src/assets/web-panel/assets/{responsiveObserve-BC2DGkWP.js → responsiveObserve-C_EawMvP.js} +1 -1
  146. package/src/assets/web-panel/assets/{slide-B4ga4pPY.js → slide-B_4wShxA.js} +1 -1
  147. package/src/assets/web-panel/assets/{statusUtils-hzphgKfH.js → statusUtils-CbQu6qJ-.js} +1 -1
  148. package/src/assets/web-panel/assets/{styleChecker-IfN9Bxoi.js → styleChecker-CvXJWYXb.js} +1 -1
  149. package/src/assets/web-panel/assets/{useFlexGapSupport-pcGKJ4pT.js → useFlexGapSupport-jjY1XknO.js} +1 -1
  150. package/src/assets/web-panel/assets/{useFs-COXhQpTG.js → useFs-CMXBdsK_.js} +1 -1
  151. package/src/assets/web-panel/assets/{usePersonalDataHub-xp9F9szv.js → usePersonalDataHub-YbAhhPXx.js} +1 -1
  152. package/src/assets/web-panel/assets/{vnode-BdSQy1Ve.js → vnode-BFCTKc0H.js} +1 -1
  153. package/src/assets/web-panel/assets/{zoom-CHCt5P55.js → zoom-CY9aBl5O.js} +1 -1
  154. package/src/assets/web-panel/index.html +1 -1
  155. package/src/command-help-index.json +2 -2
  156. package/src/command-manifest.json +2 -2
  157. package/src/commands/evolution.js +30 -17
  158. package/src/commands/learning.js +95 -9
  159. package/src/commands/team.js +5 -0
  160. package/src/data/changelog.json +28 -2
  161. package/src/lib/agent-team/task-lease.js +12 -1
  162. package/src/lib/capability-manifest.js +212 -1
  163. package/src/lib/evolution/bounded-skill-improvement-pilot.js +498 -0
  164. package/src/lib/evolution/evolution-artifact-ports.js +3277 -0
  165. package/src/lib/evolution/evolution-eval-gate.js +6442 -0
  166. package/src/lib/evolution/evolution-evidence-projector.js +3786 -0
  167. package/src/lib/evolution/evolution-ledger-ports.js +2689 -0
  168. package/src/lib/evolution/evolution-ledger.js +4280 -0
  169. package/src/lib/evolution/evolution-run-runtime-adapter.js +5 -0
  170. package/src/lib/evolution/skill-candidate-registry.js +2258 -0
  171. package/src/lib/evolution/skill-evaluated-promotion-durability.js +899 -0
  172. package/src/lib/evolution/skill-evaluated-promotion.js +481 -0
  173. package/src/lib/evolution/skill-execution-manifest.js +942 -0
  174. package/src/lib/evolution/skill-mutation-authority.js +1677 -0
  175. package/src/lib/evolution/skill-promotion-controller.js +618 -0
  176. package/src/lib/evolution/skill-release-registry.js +3277 -0
  177. package/src/lib/evolution/skill-target-matrix-eval.js +3233 -0
  178. package/src/lib/evolution/skill-writer-inventory-manifest.js +998 -0
  179. package/src/lib/evolution/skill-writer-inventory-validator.js +816 -0
  180. package/src/lib/evolution/wiki-informed-skill-proposer.js +343 -0
  181. package/src/lib/formal-quality-eval-runtime.js +100 -0
  182. package/src/lib/graph-kernel/cutover-contract.js +7 -0
  183. package/src/lib/graph-kernel/cutover-ledger.js +8 -7
  184. package/src/lib/graph-kernel/evidence-digest.js +47 -0
  185. package/src/lib/graph-kernel/evolution-run-runtime-adapter.js +5 -0
  186. package/src/lib/graph-kernel/graph-runtime-surfaces.json +8 -1
  187. package/src/lib/graph-kernel/production-cutover-evidence.js +342 -15
  188. package/src/lib/graph-kernel/production-source-evidence.js +1599 -0
  189. package/src/lib/graph-kernel/retirement-evidence.js +15 -5
  190. package/src/lib/graph-kernel/runtime-surface-manifest.js +67 -2
  191. package/src/lib/headless-manifest.js +3 -1
  192. package/src/lib/hooks-v2-runtime.js +20 -0
  193. package/src/lib/learning/skill-improver.js +311 -43
  194. package/src/lib/learning/skill-synthesizer.js +236 -16
  195. package/src/lib/secure-fs.js +20 -0
  196. package/src/runtime/agent-core.js +68 -0
  197. package/src/assets/web-panel/assets/EmailListRenderer-DSmFkNKV.js +0 -1
  198. package/src/assets/web-panel/assets/OrderTableRenderer-Dpj7D6tC.js +0 -1
  199. package/src/assets/web-panel/assets/PdhVaultBrowser-BiDEbLNA.js +0 -7
  200. package/src/assets/web-panel/assets/devWarning-DIb8j04q.js +0 -1
  201. package/src/assets/web-panel/assets/index-BJc3t4PC.js +0 -1
  202. package/src/assets/web-panel/assets/index-CkksSUnI.js +0 -1
@@ -1,4 +1,4 @@
1
- import{K as n}from"./index-zGH9zH3w.js";import{i as e}from"./motion-LUHbQu_R.js";const m=new n("antSlideUpIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1}}),f=new n("antSlideUpOut",{"0%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0}}),c=new n("antSlideDownIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1}}),l=new n("antSlideDownOut",{"0%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0}}),y=new n("antSlideLeftIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1}}),p=new n("antSlideLeftOut",{"0%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0}}),O=new n("antSlideRightIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1}}),d=new n("antSlideRightOut",{"0%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0}}),g={"slide-up":{inKeyframes:m,outKeyframes:f},"slide-down":{inKeyframes:c,outKeyframes:l},"slide-left":{inKeyframes:y,outKeyframes:p},"slide-right":{inKeyframes:O,outKeyframes:d}},K=(t,r)=>{const{antCls:a}=t,i=`${a}-${r}`,{inKeyframes:s,outKeyframes:o}=g[r];return[e(i,s,o,t.motionDurationMid),{[`
1
+ import{K as n}from"./index-DTA8Iavv.js";import{i as e}from"./motion-vtDV8_5K.js";const m=new n("antSlideUpIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1}}),f=new n("antSlideUpOut",{"0%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0}}),c=new n("antSlideDownIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1}}),l=new n("antSlideDownOut",{"0%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0}}),y=new n("antSlideLeftIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1}}),p=new n("antSlideLeftOut",{"0%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0}}),O=new n("antSlideRightIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1}}),d=new n("antSlideRightOut",{"0%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0}}),g={"slide-up":{inKeyframes:m,outKeyframes:f},"slide-down":{inKeyframes:c,outKeyframes:l},"slide-left":{inKeyframes:y,outKeyframes:p},"slide-right":{inKeyframes:O,outKeyframes:d}},K=(t,r)=>{const{antCls:a}=t,i=`${a}-${r}`,{inKeyframes:s,outKeyframes:o}=g[r];return[e(i,s,o,t.motionDurationMid),{[`
2
2
  ${i}-enter,
3
3
  ${i}-appear
4
4
  `]:{transform:"scale(0)",transformOrigin:"0% 0%",opacity:0,animationTimingFunction:t.motionEaseOutQuint},[`${i}-leave`]:{animationTimingFunction:t.motionEaseInQuint}}]};export{f as a,c as b,m as c,K as i,l as s};
@@ -1 +1 @@
1
- import{i as e}from"./index-zGH9zH3w.js";function r(a,s,t){return e({[`${a}-status-success`]:s==="success",[`${a}-status-warning`]:s==="warning",[`${a}-status-error`]:s==="error",[`${a}-status-validating`]:s==="validating",[`${a}-has-feedback`]:t})}const c=(a,s)=>s||a;export{c as a,r as g};
1
+ import{i as e}from"./index-DTA8Iavv.js";function r(a,s,t){return e({[`${a}-status-success`]:s==="success",[`${a}-status-warning`]:s==="warning",[`${a}-status-error`]:s==="error",[`${a}-status-validating`]:s==="validating",[`${a}-has-feedback`]:t})}const c=(a,s)=>s||a;export{c as a,r as g};
@@ -1 +1 @@
1
- import{B as d}from"./index-zGH9zH3w.js";const i=()=>d()&&window.document.documentElement,c=e=>{if(d()&&window.document.documentElement){const t=Array.isArray(e)?e:[e],{documentElement:n}=window.document;return t.some(r=>r in n.style)}return!1},u=(e,t)=>{if(!c(e))return!1;const n=document.createElement("div"),r=n.style[e];return n.style[e]=t,n.style[e]!==r};function s(e,t){return!Array.isArray(e)&&t!==void 0?u(e,t):c(e)}let o;const p=()=>{if(!i())return!1;if(o!==void 0)return o;const e=document.createElement("div");return e.style.display="flex",e.style.flexDirection="column",e.style.rowGap="1px",e.appendChild(document.createElement("div")),e.appendChild(document.createElement("div")),document.body.appendChild(e),o=e.scrollHeight===1,document.body.removeChild(e),o};export{i as c,p as d,s as i};
1
+ import{B as d}from"./index-DTA8Iavv.js";const i=()=>d()&&window.document.documentElement,c=e=>{if(d()&&window.document.documentElement){const t=Array.isArray(e)?e:[e],{documentElement:n}=window.document;return t.some(r=>r in n.style)}return!1},u=(e,t)=>{if(!c(e))return!1;const n=document.createElement("div"),r=n.style[e];return n.style[e]=t,n.style[e]!==r};function s(e,t){return!Array.isArray(e)&&t!==void 0?u(e,t):c(e)}let o;const p=()=>{if(!i())return!1;if(o!==void 0)return o;const e=document.createElement("div");return e.style.display="flex",e.style.flexDirection="column",e.style.rowGap="1px",e.appendChild(document.createElement("div")),e.appendChild(document.createElement("div")),document.body.appendChild(e),o=e.scrollHeight===1,document.body.removeChild(e),o};export{i as c,p as d,s as i};
@@ -1 +1 @@
1
- import{o,s as t}from"./vendor-Bn1JzzAn.js";import{d as s}from"./styleChecker-IfN9Bxoi.js";const r=(()=>{const e=t(!1);return o(()=>{e.value=s()}),e});export{r as u};
1
+ import{o,s as t}from"./vendor-Bn1JzzAn.js";import{d as s}from"./styleChecker-CvXJWYXb.js";const r=(()=>{const e=t(!1);return o(()=>{e.value=s()}),e});export{r as u};
@@ -1 +1 @@
1
- import{u as d}from"./index-zGH9zH3w.js";import{u as c}from"./useShellMode-CgR0wCYM.js";function u({accept:l=""}={}){return new Promise(a=>{if(typeof document>"u"){a({canceled:!0,path:null,content:null});return}const n=document.createElement("input");n.type="file",l&&(n.accept=l),n.style.display="none",document.body.appendChild(n);let o=!1;const i=()=>{n.parentNode&&n.parentNode.removeChild(n)},r=()=>{if(o)return;o=!0;const e=n.files&&n.files[0];if(!e){i(),a({canceled:!0,path:null,content:null});return}const t=new FileReader;t.onload=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:typeof t.result=="string"?t.result:""})},t.onerror=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:null,reason:"read_failed"})},t.readAsText(e)};n.addEventListener("change",r),n.click()})}function f(l,{defaultPath:a="download.txt"}={}){if(typeof document>"u")return{canceled:!0,path:null};const n=new Blob([l],{type:"text/plain"}),o=URL.createObjectURL(n),i=document.createElement("a");return i.href=o,i.download=a,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(o),{canceled:!1,path:a}}function p(l){if(!Array.isArray(l))return"";const a=[];for(const n of l)if(Array.isArray(n.extensions))for(const o of n.extensions)a.push(`.${o.replace(/^\./,"")}`);return a.join(",")}function m(){const l=d();async function a(r={}){if(c().isEmbedded){const e=await l.sendRaw({type:"fs.openDialog",title:r.title,filters:r.filters},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDialog failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,content:t.content??null,size:t.size,reason:t.reason}}return u({accept:p(r.filters)})}async function n(r,e={}){if(typeof r!="string")throw new Error("content must be a string");if(c().isEmbedded){const t=await l.sendRaw({type:"fs.saveDialog",title:e.title,defaultPath:e.defaultPath,filters:e.filters,content:r},6e4);if(t&&t.ok===!1)throw new Error(t.error||"fs.saveDialog failed");const s=t?.result??t;return{canceled:!!s.canceled,path:s.path??null}}return f(r,{defaultPath:e.defaultPath})}async function o(r,e={}){const t=JSON.stringify(r,null,2),s={...e,defaultPath:e.defaultPath||"data.json",filters:e.filters||[{name:"JSON",extensions:["json"]}]};return n(t,s)}async function i(r={}){if(!c().isEmbedded)return{canceled:!0,path:null,initialized:!1,unsupported:!0};const e=await l.sendRaw({type:"fs.openDirectory",title:r.title},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDirectory failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,initialized:!!t.initialized}}return{pickFileText:a,saveText:n,saveJson:o,pickDirectory:i}}export{m as u};
1
+ import{u as d}from"./index-DTA8Iavv.js";import{u as c}from"./useShellMode-CgR0wCYM.js";function u({accept:l=""}={}){return new Promise(a=>{if(typeof document>"u"){a({canceled:!0,path:null,content:null});return}const n=document.createElement("input");n.type="file",l&&(n.accept=l),n.style.display="none",document.body.appendChild(n);let o=!1;const i=()=>{n.parentNode&&n.parentNode.removeChild(n)},r=()=>{if(o)return;o=!0;const e=n.files&&n.files[0];if(!e){i(),a({canceled:!0,path:null,content:null});return}const t=new FileReader;t.onload=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:typeof t.result=="string"?t.result:""})},t.onerror=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:null,reason:"read_failed"})},t.readAsText(e)};n.addEventListener("change",r),n.click()})}function f(l,{defaultPath:a="download.txt"}={}){if(typeof document>"u")return{canceled:!0,path:null};const n=new Blob([l],{type:"text/plain"}),o=URL.createObjectURL(n),i=document.createElement("a");return i.href=o,i.download=a,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(o),{canceled:!1,path:a}}function p(l){if(!Array.isArray(l))return"";const a=[];for(const n of l)if(Array.isArray(n.extensions))for(const o of n.extensions)a.push(`.${o.replace(/^\./,"")}`);return a.join(",")}function m(){const l=d();async function a(r={}){if(c().isEmbedded){const e=await l.sendRaw({type:"fs.openDialog",title:r.title,filters:r.filters},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDialog failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,content:t.content??null,size:t.size,reason:t.reason}}return u({accept:p(r.filters)})}async function n(r,e={}){if(typeof r!="string")throw new Error("content must be a string");if(c().isEmbedded){const t=await l.sendRaw({type:"fs.saveDialog",title:e.title,defaultPath:e.defaultPath,filters:e.filters,content:r},6e4);if(t&&t.ok===!1)throw new Error(t.error||"fs.saveDialog failed");const s=t?.result??t;return{canceled:!!s.canceled,path:s.path??null}}return f(r,{defaultPath:e.defaultPath})}async function o(r,e={}){const t=JSON.stringify(r,null,2),s={...e,defaultPath:e.defaultPath||"data.json",filters:e.filters||[{name:"JSON",extensions:["json"]}]};return n(t,s)}async function i(r={}){if(!c().isEmbedded)return{canceled:!0,path:null,initialized:!1,unsupported:!0};const e=await l.sendRaw({type:"fs.openDirectory",title:r.title},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDirectory failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,initialized:!!t.initialized}}return{pickFileText:a,saveText:n,saveJson:o,pickDirectory:i}}export{m as u};
@@ -1 +1 @@
1
- import{u as v}from"./index-zGH9zH3w.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-DTA8Iavv.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-zGH9zH3w.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-DTA8Iavv.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-zGH9zH3w.js";import{i as f}from"./motion-LUHbQu_R.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-DTA8Iavv.js";import{i as f}from"./motion-vtDV8_5K.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-zGH9zH3w.js"></script>
11
+ <script type="module" crossorigin src="./assets/index-DTA8Iavv.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">
@@ -56,7 +56,7 @@
56
56
  "ecosystem": "Usage: chainlesschain ecosystem|eco [options] [command]\n\nPlugin Ecosystem 2.0 (Phase 64) — registry + deps + install + AI review +\npublish + revenue + recommend\n\nOptions:\n -h, --help display help for command\n\nCommands:\n config Show ecosystem config (severities, statuses, rules, defaults)\n severities List review severities\n statuses List publish / install statuses\n revenue-types List revenue event types\n dep-kinds List dependency kinds\n rules List heuristic AI review rules\n register [options] Register a new plugin (status=draft)\n plugins [options] List plugins\n show <pluginId> Show plugin details\n update-stats [options] <pluginId> Update download count / avg rating\n dep-add [options] <pluginId> Add a dependency to a plugin\n deps <pluginId> List direct dependencies of a plugin\n resolve <pluginId> Resolve dependency tree (detects conflicts + cycles)\n install [options] Install a plugin for a user (auto-fails on cycle/conflict)\n installs [options] List install records\n uninstall <installId> Mark an install as uninstalled\n review [options] <pluginId> Run heuristic AI code review (regex rules + score)\n review-show <reviewId> Show a single review record\n reviews [options] List review records\n sandbox [options] <pluginId> Record a sandbox test result (caller pushes outcome)\n sandbox-show <testId> Show a single sandbox test record\n sandbox-tests [options] List sandbox test records\n submit <pluginId> Submit a plugin for review (draft/rejected → reviewing)\n approve <pluginId> Approve a reviewing plugin\n reject [options] <pluginId> Reject a reviewing plugin (appends a rejection review record)\n publish [options] <pluginId> Publish an approved plugin (computes sourceHash)\n rev-record [options] Record a revenue event (splits via developerShareRatio)\n revenue [options] <developerId> Aggregate a developer's revenue\n recommend [options] Heuristic plugin recommendations for a user\n stats Show ecosystem stats\n maturity-statuses-v2 List V2 plugin maturity statuses\n install-lifecycle-v2 List V2 install lifecycle statuses\n default-max-active-plugins-per-developer Show V2 default max active plugins per developer\n max-active-plugins-per-developer Show current V2 max active plugins per developer\n set-max-active-plugins-per-developer <n> Set V2 max active plugins per developer\n default-max-pending-installs-per-user Show V2 default max pending installs per user\n max-pending-installs-per-user Show current V2 max pending installs per user\n set-max-pending-installs-per-user <n> Set V2 max pending installs per user\n default-auto-deprecate-after-ms Show V2 default auto-deprecate threshold (ms)\n auto-deprecate-after-ms Show current V2 auto-deprecate threshold (ms)\n set-auto-deprecate-after-ms <ms> Set V2 auto-deprecate threshold (ms)\n default-auto-archive-after-ms Show V2 default auto-archive threshold (ms)\n auto-archive-after-ms Show current V2 auto-archive threshold (ms)\n set-auto-archive-after-ms <ms> Set V2 auto-archive threshold (ms)\n active-plugin-count [options] Count V2 active plugins (optionally scoped)\n pending-install-count [options] Count V2 pending+resolving installs (optionally scoped)\n register-plugin-v2 [options] <plugin-id> Register V2 plugin (status=active)\n maturity-v2 <plugin-id> Show V2 plugin maturity\n set-maturity-v2 [options] <plugin-id> <status> Transition V2 plugin maturity\n deprecate-plugin [options] <plugin-id> Deprecate V2 plugin\n archive-plugin-v2 [options] <plugin-id> Archive V2 plugin\n remove-plugin-v2 [options] <plugin-id> Remove V2 plugin (terminal)\n touch-plugin-activity <plugin-id> Bump lastActivityAt for V2 plugin\n submit-install-v2 [options] <install-id> Submit V2 install (status=pending)\n install-status-v2 <install-id> Show V2 install status\n set-install-status-v2 [options] <install-id> <status> Transition V2 install status\n resolve-install [options] <install-id> Mark V2 install as resolving\n complete-install [options] <install-id> Mark V2 install as installed\n fail-install [options] <install-id> Mark V2 install as failed\n uninstall-install-v2 [options] <install-id> Mark V2 install as uninstalled (terminal)\n retry-failed-install [options] <install-id> Retry a failed V2 install (failed → pending)\n auto-deprecate-stale-plugins Bulk-flip stale V2 ACTIVE plugins to DEPRECATED\n auto-archive-long-deprecated Bulk-flip long-deprecated V2 plugins to ARCHIVED\n stats-v2 Show V2 ecosystem stats (maturity + install)\n help [command] display help for command\n",
57
57
  "encrypt": "Usage: chainlesschain encrypt [options] [command]\n\nFile encryption and database encryption management\n\nOptions:\n -h, --help display help for command\n\nCommands:\n file [options] <path> Encrypt a file with AES-256-GCM\n db [options] Enable database encryption tracking\n info [options] <path> Check if a file is encrypted\n status [options] Show database encryption status\n key-maturities-v2 [options] [V2] List crypto key maturity states\n job-lifecycles-v2 [options] [V2] List crypto job lifecycle states\n config-v2 [options] [V2] Show governance config\n set-max-active-keys-per-owner-v2 <n> [V2] Set per-owner active key cap\n set-max-pending-jobs-per-key-v2 <n> [V2] Set per-key pending job cap\n set-key-idle-ms-v2 <ms> [V2] Set key idle threshold (ms)\n set-job-stuck-ms-v2 <ms> [V2] Set job stuck threshold (ms)\n register-key-v2 [options] <id> [V2] Register a crypto key profile\n (PENDING)\n activate-key-v2 <id> [V2] Activate key (pending|rotated ->\n active)\n rotate-key-v2 <id> [V2] Rotate key (active -> rotated)\n retire-key-v2 <id> [V2] Retire key (terminal)\n touch-key-v2 <id> [V2] Bump key lastSeenAt\n get-key-v2 [options] <id> [V2] Show crypto key profile\n list-keys-v2 [options] [V2] List crypto key profiles\n create-job-v2 [options] <id> [V2] Create a queued V2 crypto job\n start-job-v2 <id> [V2] Start crypto job (queued ->\n running)\n complete-job-v2 <id> [V2] Complete crypto job (running ->\n completed)\n fail-job-v2 <id> [V2] Fail crypto job (running ->\n failed)\n cancel-job-v2 <id> [V2] Cancel crypto job (queued|running\n -> cancelled)\n get-job-v2 [options] <id> [V2] Show crypto job\n list-jobs-v2 [options] [V2] List V2 crypto jobs\n active-key-count-v2 [options] [V2] Count active crypto keys (optional\n --owner)\n pending-job-count-v2 [options] [V2] Count pending crypto jobs\n (queued+running)\n auto-rotate-idle-keys-v2 [options] [V2] Rotate idle active keys\n auto-fail-stuck-jobs-v2 [options] [V2] Fail stuck running crypto jobs\n stats-v2 [options] [V2] Show governance stats\n help [command] display help for command\n",
58
58
  "eval": "Usage: chainlesschain eval [options]\n\nRun the reliability eval suite (self-checking coding tasks) and report the\ntask-success rate\n\nOptions:\n --suite <name> Suite to run (default: \"builtin\")\n --model <model> Model for the agent runs\n --provider <provider> Provider for the agent runs\n --json Output the summary as JSON\n --keep Keep the per-task temp workspaces (debug)\n --otlp <file> Write OpenTelemetry (OTLP/JSON) spans for the\n run to a file\n --dry-run Use a no-op agent (exercise the harness/report\n without a model)\n --history <file> Append this run's summary (JSONL) for trend\n tracking\n --label <label> Tag this run in the history (e.g. a\n version/commit)\n --trend Report the pass-rate trend from --history\n instead of running (CI gate)\n --regression-threshold <pct> With --trend: pass-rate drop (in points) that\n fails the gate on its own (default: \"0\")\n -h, --help display help for command\n",
59
- "evolution": "Usage: chainlesschain evolution [options] [command]\n\nSelf-evolving AI systemcapabilities, learning, diagnosis\n\nOptions:\n -h, --help display help for command\n\nCommands:\n assess [options] <name> <score> Assess and track a capability\n learn [options] <model-id> Train a model with incremental data\n diagnose [options] Run self-diagnosis on the system\n repair [options] <issue> Self-repair a diagnosed issue\n predict [options] [user-id] Predict user behavior\n growth [options] Show growth log\n stats [options] Show capabilities and models overview\n export [options] <model-id> Export a model for portability\n dimensions [options] List CAPABILITY_DIMENSION enum\n severities [options] List DIAGNOSIS_SEVERITY enum\n strategies [options] List REPAIR_STRATEGY enum\n milestones [options] List GROWTH_MILESTONE enum\n assess-v2 [options] <dimension> <score> Assess capability by canonical dimension\n capabilities-v2 [options] List V2 capabilities\n train-v2 [options] Record V2 incremental training run\n training-log-v2 [options] List V2 training runs\n diagnose-v2 [options] Run V2 self-diagnosis\n diagnoses-v2 [options] List V2 diagnoses\n diagnosis-show [options] <id> Show a specific diagnosis\n repair-v2 [options] <diagnosis-id> Apply V2 self-repair to a diagnosis\n predict-v2 [options] V2 behavior prediction\n record-milestone [options] <type> Record a growth milestone explicitly\n growth-v2 [options] List V2 growth milestones\n configure [options] Update evolution config\n config [options] Show evolution config\n stats-v2 [options] V2 evolution stats\n enums-v2 Show V2 enums (goal maturity + cycle lifecycle)\n config-v2 Show V2 config thresholds\n set-max-active-goals-v2 <n> Set max active goals per owner\n set-max-pending-cycles-v2 <n> Set max pending cycles per goal\n set-goal-idle-ms-v2 <n> Set goal idle threshold (ms)\n set-cycle-stuck-ms-v2 <n> Set cycle stuck threshold (ms)\n register-goal-v2 [options] <id> <owner> Register V2 evo goal\n activate-goal-v2 <id> Activate evo goal\n pause-goal-v2 <id> Pause evo goal\n archive-goal-v2 <id> Archive goal (terminal)\n touch-goal-v2 <id> Touch goal lastTouchedAt\n get-goal-v2 <id> Get V2 goal\n list-goals-v2 List all V2 goals\n create-cycle-v2 [options] <id> <goalId> Create V2 cycle (queued)\n start-cycle-v2 <id> Start cycle (queued→running)\n complete-cycle-v2 <id> Complete cycle (running→completed)\n fail-cycle-v2 <id> [reason] Fail cycle\n cancel-cycle-v2 <id> [reason] Cancel cycle\n get-cycle-v2 <id> Get V2 cycle\n list-cycles-v2 List all V2 cycles\n auto-pause-idle-v2 Auto-pause idle active goals\n auto-fail-stuck-v2 Auto-fail stuck running cycles\n gov-stats-v2 V2 governance aggregate stats\n help [command] display help for command\n",
59
+ "evolution": "Usage: chainlesschain evolution [options] [command]\n\nEvolution metrics and governance records not model training or active Skill\npromotion\n\nOptions:\n -h, --help display help for command\n\nCommands:\n assess [options] <name> <score> Assess and track a capability\n learn [options] <model-id> Record incremental model metrics (metrics-only)\n diagnose [options] Diagnose recorded evolution metrics\n repair [options] <issue> Apply a maintenance strategy to a recorded diagnosis\n predict [options] [user-id] Predict user behavior\n growth [options] Show growth log\n stats [options] Show capabilities and models overview\n export [options] <model-id> Export a model for portability\n dimensions [options] List CAPABILITY_DIMENSION enum\n severities [options] List DIAGNOSIS_SEVERITY enum\n strategies [options] List REPAIR_STRATEGY enum\n milestones [options] List GROWTH_MILESTONE enum\n assess-v2 [options] <dimension> <score> Assess capability by canonical dimension\n capabilities-v2 [options] List V2 capabilities\n train-v2 [options] Record V2 incremental training metrics (metrics-only)\n training-log-v2 [options] List V2 training runs\n diagnose-v2 [options] Diagnose recorded V2 evolution metrics\n diagnoses-v2 [options] List V2 diagnoses\n diagnosis-show [options] <id> Show a specific diagnosis\n repair-v2 [options] <diagnosis-id> Record a V2 maintenance strategy for a diagnosis\n predict-v2 [options] Project behavior from recorded V2 metrics\n record-milestone [options] <type> Record a growth milestone explicitly\n growth-v2 [options] List V2 growth milestones\n configure [options] Update evolution config\n config [options] Show evolution config\n stats-v2 [options] V2 evolution stats\n enums-v2 Show V2 enums (goal maturity + cycle lifecycle)\n config-v2 Show V2 config thresholds\n set-max-active-goals-v2 <n> Set max active goals per owner\n set-max-pending-cycles-v2 <n> Set max pending cycles per goal\n set-goal-idle-ms-v2 <n> Set goal idle threshold (ms)\n set-cycle-stuck-ms-v2 <n> Set cycle stuck threshold (ms)\n register-goal-v2 [options] <id> <owner> Register V2 evo goal\n activate-goal-v2 <id> Activate evo goal\n pause-goal-v2 <id> Pause evo goal\n archive-goal-v2 <id> Archive goal (terminal)\n touch-goal-v2 <id> Touch goal lastTouchedAt\n get-goal-v2 <id> Get V2 goal\n list-goals-v2 List all V2 goals\n create-cycle-v2 [options] <id> <goalId> Create V2 cycle (queued)\n start-cycle-v2 <id> Start cycle (queued→running)\n complete-cycle-v2 <id> Complete cycle (running→completed)\n fail-cycle-v2 <id> [reason] Fail cycle\n cancel-cycle-v2 <id> [reason] Cancel cycle\n get-cycle-v2 <id> Get V2 cycle\n list-cycles-v2 List all V2 cycles\n auto-pause-idle-v2 Auto-pause idle active goals\n auto-fail-stuck-v2 Auto-fail stuck running cycles\n gov-stats-v2 V2 governance aggregate stats\n help [command] display help for command\n",
60
60
  "evomap": "Usage: chainlesschain evomap [options] [command]\n\nEvoMap — gene exchange protocol for agent capabilities\n\nOptions:\n -h, --help display help for command\n\nCommands:\n search [options] <query> Search for genes on the hub\n download <geneId> Download a gene from the hub\n publish [options] Publish a gene to the hub\n list List locally installed genes\n hubs List configured EvoMap hubs\n federation Federated hub management and gene syncing\n gov EvoMap governance — ownership, proposals,\n voting\n enums-v2 Show V2 governance enums\n register-map-v2 [options] Register an evomap profile (pending)\n activate-map-v2 <id> Activate map\n stale-map-v2 <id> Mark map stale\n archive-map-v2 <id> Archive map (terminal)\n touch-map-v2 <id> Refresh lastTouchedAt\n get-map-v2 <id> Get map\n list-maps-v2 List maps\n create-evolution-v2 [options] Create an evolution (queued)\n start-evolution-v2 <id> Transition evolution to running\n complete-evolution-v2 <id> Transition evolution to completed\n fail-evolution-v2 [options] <id> Fail evolution\n cancel-evolution-v2 [options] <id> Cancel evolution\n get-evolution-v2 <id> Get evolution\n list-evolutions-v2 List evolutions\n set-max-active-maps-v2 <n> Set per-owner active cap\n set-max-pending-evolutions-v2 <n> Set per-map pending cap\n set-map-idle-ms-v2 <n> Set idle threshold\n set-evolution-stuck-ms-v2 <n> Set stuck threshold\n auto-stale-idle-maps-v2 Auto-stale idle maps\n auto-fail-stuck-evolutions-v2 Auto-fail stuck running evolutions\n gov-stats-v2 V2 governance aggregate stats\n help [command] display help for command\n",
61
61
  "execbe": "Usage: chainlesschain execbe [options] [command]\n\nExecution backend V2 governance\n\nOptions:\n -h, --help display help for command\n\nCommands:\n maturities-v2\n job-lifecycle-v2\n stats-v2\n config-v2\n register-backend-v2 <id> <owner> [kind]\n activate-backend-v2 <id>\n degrade-backend-v2 <id>\n retire-backend-v2 <id>\n touch-backend-v2 <id>\n get-backend-v2 <id>\n list-backends-v2\n create-job-v2 <id> <backendId> [cmd]\n start-job-v2 <id>\n succeed-job-v2 <id>\n fail-job-v2 <id> [reason]\n cancel-job-v2 <id> [reason]\n get-job-v2 <id>\n list-jobs-v2\n auto-degrade-idle-v2\n auto-fail-stuck-v2\n set-max-active-v2 <n>\n set-max-pending-v2 <n>\n set-idle-ms-v2 <n>\n set-stuck-ms-v2 <n>\n reset-state-v2\n help [command] display help for command\n",
62
62
  "export": "Usage: chainlesschain export [options] [command]\n\nExport knowledge base to external formats\n\nOptions:\n -h, --help display help for command\n\nCommands:\n markdown [options] Export notes as markdown files\n site [options] Export notes as a static HTML website\n target-maturities-v2 List V2 target maturity states\n export-job-lifecycles-v2 List V2 export-job lifecycle states\n stats-v2 V2 knowledge-exporter stats\n get-max-active-targets-v2 Get max active targets per owner (V2)\n set-max-active-targets-v2 <n> Set max active targets per owner (V2)\n get-max-pending-jobs-v2 Get max pending jobs per target (V2)\n set-max-pending-jobs-v2 <n> Set max pending jobs per target (V2)\n get-target-idle-ms-v2 Get target idle threshold (V2)\n set-target-idle-ms-v2 <ms> Set target idle threshold (V2)\n get-job-stuck-ms-v2 Get export-job stuck threshold (V2)\n set-job-stuck-ms-v2 <ms> Set export-job stuck threshold (V2)\n active-target-count-v2 <ownerId> Active target count for owner (V2)\n pending-job-count-v2 <targetId> Pending export-job count for target\n (V2)\n register-target-v2 [options] <id> Register a V2 export target\n get-target-v2 <id> Get a V2 target\n list-targets-v2 [options] List V2 targets\n set-target-status-v2 <id> <next> Set V2 target status\n activate-target-v2 <id> Activate a V2 target\n pause-target-v2 <id> Pause a V2 target\n archive-target-v2 <id> Archive a V2 target\n touch-target-v2 <id> Touch a V2 target\n create-export-job-v2 [options] <id> Create a V2 export job\n get-export-job-v2 <id> Get a V2 export job\n list-export-jobs-v2 [options] List V2 export jobs\n set-export-job-status-v2 <id> <next> Set V2 export-job status\n start-export-job-v2 <id> Start a V2 export job\n complete-export-job-v2 <id> Complete a V2 export job\n fail-export-job-v2 <id> Fail a V2 export job\n cancel-export-job-v2 <id> Cancel a V2 export job\n auto-pause-idle-targets-v2 Auto-pause idle V2 targets\n auto-fail-stuck-export-jobs-v2 Auto-fail stuck V2 export jobs\n help [command] display help for command\n",
@@ -81,7 +81,7 @@
81
81
  "ipfs": "Usage: chainlesschain ipfs [options] [command]\n\nIPFS decentralized storage (Phase 17)\n\nOptions:\n -h, --help display help for command\n\nCommands:\n modes [options] List node modes (embedded/external)\n statuses [options] List node statuses\n node-start [options] Start the IPFS node\n node-stop [options] Stop the IPFS node\n node-status [options] Show node status and uptime\n set-mode [options] <mode> Set node mode (stop node first)\n add [options] Add content to the store\n get [options] <cid> Get content by CID\n show [options] <cid> Show content metadata (no payload)\n list [options] List content entries\n pin [options] <cid> Pin a CID (quota-checked)\n unpin [options] <cid> Unpin a CID\n pins [options] List pinned content\n stats [options] Storage statistics\n gc [options] Garbage-collect unpinned content\n set-quota [options] <bytes> Set storage quota (bytes)\n attach [options] <knowledgeId> Attach content to a knowledge item (auto-pinned)\n attachments [options] <knowledgeId> List attachments for a knowledge item\n gateway-maturities-v2 [options] List V2 gateway maturity states\n pin-lifecycles-v2 [options] List V2 pin lifecycle states\n default-max-active-gateways-per-operator Show V2 default per-operator active-gateway cap\n max-active-gateways-per-operator Show current V2 per-operator active-gateway cap\n set-max-active-gateways-per-operator <n> Set V2 per-operator active-gateway cap\n default-max-pending-pins-per-owner Show V2 default per-owner pending-pin cap\n max-pending-pins-per-owner Show current V2 per-owner pending-pin cap\n set-max-pending-pins-per-owner <n> Set V2 per-owner pending-pin cap\n default-gateway-idle-ms Show V2 default gateway-idle window (ms)\n gateway-idle-ms Show current V2 gateway-idle window (ms)\n set-gateway-idle-ms <ms> Set V2 gateway-idle window (ms)\n default-pin-pending-ms Show V2 default pin-pending window (ms)\n pin-pending-ms Show current V2 pin-pending window (ms)\n set-pin-pending-ms <ms> Set V2 pin-pending window (ms)\n active-gateway-count [options] Count active V2 gateways (optionally scoped by operator)\n pending-pin-count [options] Count pending V2 pins (optionally scoped by owner)\n register-gateway-v2 [options] <gateway-id> Register a V2 gateway\n gateway-v2 <gateway-id> Show a V2 gateway\n set-gateway-maturity-v2 [options] <gateway-id> <status> Set V2 gateway maturity status\n activate-gateway [options] <gateway-id> Activate a V2 gateway\n degrade-gateway [options] <gateway-id> Degrade a V2 gateway\n offline-gateway [options] <gateway-id> Offline a V2 gateway\n retire-gateway [options] <gateway-id> Retire a V2 gateway\n touch-gateway-heartbeat <gateway-id> Bump lastHeartbeatAt on a V2 gateway\n register-pin-v2 [options] <pin-id> Register a V2 pin request\n pin-v2 <pin-id> Show a V2 pin record\n set-pin-status-v2 [options] <pin-id> <status> Set V2 pin lifecycle status\n confirm-pin [options] <pin-id> Confirm a V2 pin (pending -> pinned)\n fail-pin [options] <pin-id> Fail a V2 pin\n unpin-v2 [options] <pin-id> Unpin a V2 pin (terminal)\n auto-offline-stale-gateways Auto-flip stale ACTIVE/DEGRADED V2 gateways to OFFLINE\n auto-fail-stale-pending-pins Auto-flip stale PENDING V2 pins to FAILED\n stats-v2 V2 IPFS stats (counts by state + config)\n help [command] display help for command\n",
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
- "learning": "Usage: chainlesschain learning [options] [command]\n\nAutonomous learning loop — trajectories, reflection, skill synthesis\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] Synthesize new skills from eligible trajectories\n cleanup [options] Delete old trajectories beyond retention period\n help [command] display help for command\n",
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
85
  "llm": "Usage: chainlesschain llm [options] [command]\n\nLLM provider management\n\nOptions:\n -h, --help display help for command\n\nCommands:\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",
@@ -756,7 +756,7 @@
756
756
  "aliases": [],
757
757
  "module": "./commands/evolution.js",
758
758
  "register": "registerEvolutionCommand",
759
- "summary": "Self-evolving AI systemcapabilities, learning, diagnosis",
759
+ "summary": "Evolution metrics and governance records not model training or active Skill promotion",
760
760
  "stability": "compatibility",
761
761
  "category": "compatibility",
762
762
  "visibility": "extended",
@@ -1080,7 +1080,7 @@
1080
1080
  "aliases": [],
1081
1081
  "module": "./commands/learning.js",
1082
1082
  "register": "registerLearningCommand",
1083
- "summary": "Autonomous learning loop — trajectories, reflection, skill synthesis",
1083
+ "summary": "Learning records — trajectories, reflection, and governed candidate attempts",
1084
1084
  "stability": "compatibility",
1085
1085
  "category": "compatibility",
1086
1086
  "visibility": "extended",
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Self-Evolving System commands
2
+ * Evolution metrics and governance-record commands
3
3
  * chainlesschain evolution assess|learn|diagnose|repair|predict|growth|stats|export
4
4
  */
5
5
 
@@ -45,7 +45,9 @@ import {
45
45
  export function registerEvolutionCommand(program) {
46
46
  const evolution = program
47
47
  .command("evolution")
48
- .description("Self-evolving AI system — capabilities, learning, diagnosis");
48
+ .description(
49
+ "Evolution metrics and governance records — not model training or active Skill promotion",
50
+ );
49
51
 
50
52
  // evolution assess <name> <score>
51
53
  evolution
@@ -98,8 +100,8 @@ export function registerEvolutionCommand(program) {
98
100
  // evolution learn <model-id>
99
101
  evolution
100
102
  .command("learn")
101
- .description("Train a model with incremental data")
102
- .argument("<model-id>", "Model ID to train")
103
+ .description("Record incremental model metrics (metrics-only)")
104
+ .argument("<model-id>", "Model record ID")
103
105
  .option("--data <json>", "Training data as JSON array")
104
106
  .option(
105
107
  "--type <type>",
@@ -115,7 +117,7 @@ export function registerEvolutionCommand(program) {
115
117
  process.exit(1);
116
118
  }
117
119
  const db = ctx.db.getDatabase();
118
- const spinner = ora(`Training model: ${modelId}...`).start();
120
+ const spinner = ora(`Recording model metrics: ${modelId}...`).start();
119
121
 
120
122
  let data = [{ sample: true }];
121
123
  if (options.data) {
@@ -130,7 +132,7 @@ export function registerEvolutionCommand(program) {
130
132
  const result = trainIncremental(db, modelId, data, {
131
133
  type: options.type,
132
134
  });
133
- spinner.succeed("Model trained");
135
+ spinner.succeed("Model metrics recorded");
134
136
 
135
137
  if (options.json) {
136
138
  console.log(JSON.stringify(result, null, 2));
@@ -151,7 +153,7 @@ export function registerEvolutionCommand(program) {
151
153
  // evolution diagnose
152
154
  evolution
153
155
  .command("diagnose")
154
- .description("Run self-diagnosis on the system")
156
+ .description("Diagnose recorded evolution metrics")
155
157
  .option("--json", "Output as JSON")
156
158
  .action(async (options) => {
157
159
  try {
@@ -207,7 +209,7 @@ export function registerEvolutionCommand(program) {
207
209
  // evolution repair <issue>
208
210
  evolution
209
211
  .command("repair")
210
- .description("Self-repair a diagnosed issue")
212
+ .description("Apply a maintenance strategy to a recorded diagnosis")
211
213
  .argument("<issue>", "Issue type (high-memory|stale-cache|degraded-model)")
212
214
  .option("--json", "Output as JSON")
213
215
  .action(async (issue, options) => {
@@ -511,7 +513,7 @@ export function registerEvolutionCommand(program) {
511
513
 
512
514
  evolution
513
515
  .command("train-v2")
514
- .description("Record V2 incremental training run")
516
+ .description("Record V2 incremental training metrics (metrics-only)")
515
517
  .requiredOption(
516
518
  "-s, --strategy <s>",
517
519
  "replay|elastic-weight|knowledge-distill",
@@ -525,10 +527,19 @@ export function registerEvolutionCommand(program) {
525
527
  try {
526
528
  const r = trainIncrementalV2({
527
529
  strategy: options.strategy,
528
- dataSize: numericOption(options.dataSize, { name: "--data-size", min: 0 }),
529
- lossBefore: numericOption(options.lossBefore, { name: "--loss-before" }),
530
+ dataSize: numericOption(options.dataSize, {
531
+ name: "--data-size",
532
+ min: 0,
533
+ }),
534
+ lossBefore: numericOption(options.lossBefore, {
535
+ name: "--loss-before",
536
+ }),
530
537
  lossAfter: numericOption(options.lossAfter, { name: "--loss-after" }),
531
- durationMs: numericOption(options.durationMs, { name: "--duration-ms", min: 0, fallback: 0 }),
538
+ durationMs: numericOption(options.durationMs, {
539
+ name: "--duration-ms",
540
+ min: 0,
541
+ fallback: 0,
542
+ }),
532
543
  });
533
544
  if (options.json) console.log(JSON.stringify(r, null, 2));
534
545
  else {
@@ -565,7 +576,7 @@ export function registerEvolutionCommand(program) {
565
576
 
566
577
  evolution
567
578
  .command("diagnose-v2")
568
- .description("Run V2 self-diagnosis")
579
+ .description("Diagnose recorded V2 evolution metrics")
569
580
  .option("--scope <s>", "Scope", "system")
570
581
  .option("--depth <d>", "Depth", "shallow")
571
582
  .option("--json", "Output as JSON")
@@ -623,7 +634,7 @@ export function registerEvolutionCommand(program) {
623
634
 
624
635
  evolution
625
636
  .command("repair-v2")
626
- .description("Apply V2 self-repair to a diagnosis")
637
+ .description("Record a V2 maintenance strategy for a diagnosis")
627
638
  .argument("<diagnosis-id>", "Diagnosis ID")
628
639
  .requiredOption(
629
640
  "-s, --strategy <s>",
@@ -647,7 +658,7 @@ export function registerEvolutionCommand(program) {
647
658
 
648
659
  evolution
649
660
  .command("predict-v2")
650
- .description("V2 behavior prediction")
661
+ .description("Project behavior from recorded V2 metrics")
651
662
  .option("--horizon-ms <n>", "Time horizon in ms")
652
663
  .option("--json", "Output as JSON")
653
664
  .action((options) => {
@@ -705,8 +716,10 @@ export function registerEvolutionCommand(program) {
705
716
  .option("--json", "Output as JSON")
706
717
  .action((options) => {
707
718
  const period = {};
708
- if (options.from) period.fromMs = numericOption(options.from, { name: "--from", min: 0 });
709
- if (options.to) period.toMs = numericOption(options.to, { name: "--to", min: 0 });
719
+ if (options.from)
720
+ period.fromMs = numericOption(options.from, { name: "--from", min: 0 });
721
+ if (options.to)
722
+ period.toMs = numericOption(options.to, { name: "--to", min: 0 });
710
723
  const list = getGrowthLogV2({
711
724
  milestoneType: options.type,
712
725
  period: Object.keys(period).length ? period : undefined,
@@ -8,11 +8,61 @@ import ora from "ora";
8
8
  import { logger } from "../lib/logger.js";
9
9
  import { bootstrap, shutdown } from "../runtime/bootstrap.js";
10
10
 
11
+ export function classifySynthesisResult(result) {
12
+ if (result?.status === "unavailable") {
13
+ return {
14
+ kind: "unavailable",
15
+ exitCode: 1,
16
+ message: result.reason || "Synthesis dependencies unavailable",
17
+ jsonResult: result,
18
+ };
19
+ }
20
+ if (result?.status === "error") {
21
+ return {
22
+ kind: "failed",
23
+ exitCode: 1,
24
+ message:
25
+ result.reason ||
26
+ (Array.isArray(result.errors) && result.errors.length > 0
27
+ ? result.errors.join("; ")
28
+ : "Synthesis failed"),
29
+ jsonResult: result,
30
+ };
31
+ }
32
+ const wellFormedCompletion =
33
+ result?.status === "completed" &&
34
+ Array.isArray(result.created) &&
35
+ Array.isArray(result.skipped) &&
36
+ (!Object.hasOwn(result, "errors") ||
37
+ (Array.isArray(result.errors) && result.errors.length === 0));
38
+ if (wellFormedCompletion) {
39
+ return {
40
+ kind: "completed",
41
+ exitCode: 0,
42
+ message: null,
43
+ jsonResult: result,
44
+ };
45
+ }
46
+ const invalidResult = {
47
+ status: "error",
48
+ code: "LEARNING_SYNTHESIS_INVALID_RESULT",
49
+ reason: "Synthesis returned an invalid or unknown result",
50
+ created: [],
51
+ skipped: [],
52
+ };
53
+ return {
54
+ kind: "failed",
55
+ exitCode: 1,
56
+ message: invalidResult.reason,
57
+ jsonResult: invalidResult,
58
+ };
59
+ }
60
+
11
61
  export function registerLearningCommand(program) {
12
62
  const learning = program
13
63
  .command("learning")
14
64
  .description(
15
- "Autonomous learning loop — trajectories, reflection, skill synthesis",
65
+ "Learning records — trajectories, reflection, and governed candidate attempts",
16
66
  );
17
67
 
18
68
  // learning stats
@@ -112,7 +162,9 @@ export function registerLearningCommand(program) {
112
162
  // learning export — §8.3 cross-device backup: full dump of learning_trajectories
113
163
  learning
114
164
  .command("export")
115
- .description("Export all learning trajectories as JSON (module 101 §8.3 backup)")
165
+ .description(
166
+ "Export all learning trajectories as JSON (module 101 §8.3 backup)",
167
+ )
116
168
  .option("--output <file>", "Write JSON array to file (default: stdout)")
117
169
  .option("--json", "Output JSON ({ok,count} with --output; array otherwise)")
118
170
  .action(async (options) => {
@@ -122,15 +174,24 @@ export function registerLearningCommand(program) {
122
174
  logger.error("Database not available");
123
175
  process.exit(1);
124
176
  }
125
- const { exportTrajectories } = await import("../lib/learning/learning-tables.js");
177
+ const { exportTrajectories } =
178
+ await import("../lib/learning/learning-tables.js");
126
179
  const rows = exportTrajectories(ctx.db.getDatabase());
127
180
  if (options.output) {
128
181
  const fs = await import("fs");
129
182
  fs.writeFileSync(options.output, JSON.stringify(rows), "utf-8");
130
183
  if (options.json) {
131
- console.log(JSON.stringify({ ok: true, count: rows.length, output: options.output }));
184
+ console.log(
185
+ JSON.stringify({
186
+ ok: true,
187
+ count: rows.length,
188
+ output: options.output,
189
+ }),
190
+ );
132
191
  } else {
133
- logger.log(`exported ${rows.length} trajectories → ${options.output}`);
192
+ logger.log(
193
+ `exported ${rows.length} trajectories → ${options.output}`,
194
+ );
134
195
  }
135
196
  } else {
136
197
  console.log(JSON.stringify(rows));
@@ -145,7 +206,9 @@ export function registerLearningCommand(program) {
145
206
  // learning import — §8.3 restore: idempotent upsert by id from a JSON-array file
146
207
  learning
147
208
  .command("import")
148
- .description("Import learning trajectories from a JSON array file (idempotent upsert by id; §8.3)")
209
+ .description(
210
+ "Import learning trajectories from a JSON array file (idempotent upsert by id; §8.3)",
211
+ )
149
212
  .requiredOption("--input <file>", "JSON array of trajectories to import")
150
213
  .option("--json", "Output JSON result")
151
214
  .action(async (options) => {
@@ -160,7 +223,8 @@ export function registerLearningCommand(program) {
160
223
  logger.error("Database not available");
161
224
  process.exit(1);
162
225
  }
163
- const { importTrajectories } = await import("../lib/learning/learning-tables.js");
226
+ const { importTrajectories } =
227
+ await import("../lib/learning/learning-tables.js");
164
228
  const result = importTrajectories(ctx.db.getDatabase(), rows);
165
229
  if (options.json) {
166
230
  console.log(JSON.stringify(result));
@@ -252,7 +316,9 @@ export function registerLearningCommand(program) {
252
316
  // learning synthesize
253
317
  learning
254
318
  .command("synthesize")
255
- .description("Synthesize new skills from eligible trajectories")
319
+ .description(
320
+ "Attempt a governed Skill candidate from eligible trajectories",
321
+ )
256
322
  .option("--json", "Output as JSON")
257
323
  .action(async (options) => {
258
324
  try {
@@ -271,6 +337,24 @@ export function registerLearningCommand(program) {
271
337
 
272
338
  const spinner = ora("Scanning for synthesizable patterns...").start();
273
339
  const result = await synthesizer.synthesize();
340
+ const outcome = classifySynthesisResult(result);
341
+
342
+ if (outcome.exitCode !== 0) {
343
+ spinner.fail(
344
+ outcome.kind === "unavailable"
345
+ ? "Synthesis unavailable"
346
+ : "Synthesis failed",
347
+ );
348
+ if (options.json) {
349
+ console.log(JSON.stringify(outcome.jsonResult, null, 2));
350
+ } else {
351
+ logger.error(outcome.message);
352
+ }
353
+ await shutdown();
354
+ process.exitCode = outcome.exitCode;
355
+ return;
356
+ }
357
+
274
358
  spinner.succeed("Synthesis complete");
275
359
 
276
360
  if (options.json) {
@@ -278,7 +362,9 @@ export function registerLearningCommand(program) {
278
362
  } else {
279
363
  if (result.created.length > 0) {
280
364
  logger.log(
281
- chalk.green(`Created ${result.created.length} skill(s):`),
365
+ chalk.green(
366
+ `Created ${result.created.length} candidate skill(s):`,
367
+ ),
282
368
  );
283
369
  for (const name of result.created) {
284
370
  logger.log(` ${chalk.cyan(name)}`);
@@ -76,6 +76,7 @@ import {
76
76
  } from "../lib/secure-file-identity.js";
77
77
  import {
78
78
  FORMAL_QUALITY_ALLOWED_FILES_ENV,
79
+ formalQualityChildEnvironment,
79
80
  formalQualityTaskAllowedFiles,
80
81
  isFormalQualityHermeticRuntime,
81
82
  } from "../lib/formal-quality-eval-runtime.js";
@@ -2989,6 +2990,9 @@ export function registerTeamCommand(program, { logger } = {}) {
2989
2990
  const formalAllowedFiles = formalQualityTaskAllowedFiles(
2990
2991
  task.metadata?.formalQualityAllowedFiles,
2991
2992
  );
2993
+ const formalChildEnvironment = formalAllowedFiles
2994
+ ? formalQualityChildEnvironment(key)
2995
+ : null;
2992
2996
  return spawnAgent(
2993
2997
  buildTeamAgentPrompt(prompt, { inbox }),
2994
2998
  agentCwd,
@@ -3005,6 +3009,7 @@ export function registerTeamCommand(program, { logger } = {}) {
3005
3009
  ...(formalAllowedFiles
3006
3010
  ? {
3007
3011
  childEnv: {
3012
+ ...formalChildEnvironment,
3008
3013
  [FORMAL_QUALITY_ALLOWED_FILES_ENV]:
3009
3014
  JSON.stringify(formalAllowedFiles),
3010
3015
  },