chainlesschain 0.162.100 → 0.162.102

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 (209) hide show
  1. package/package.json +2 -2
  2. package/src/assets/web-panel/assets/{AIOps-C4AUvxsD.js → AIOps-C1k00Gsz.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-CQx5g40U.js → ActionButton-BinI6ZDq.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-Cj8kniQB.js → Analytics-Cg0jo_cd.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-uksktrtP.js → AppLayout-CClMs_AA.js} +4 -4
  6. package/src/assets/web-panel/assets/{Audit-Ddw1D-Sa.js → Audit-BtQgvFdM.js} +1 -1
  7. package/src/assets/web-panel/assets/{Backup-FY6UxY3D.js → Backup-43FRi7ZI.js} +1 -1
  8. package/src/assets/web-panel/assets/{BaseInput-Dyy3sgKP.js → BaseInput-Cfza-FZU.js} +1 -1
  9. package/src/assets/web-panel/assets/{Chat-tiAnsEKt.js → Chat-7AjHSiSC.js} +6 -6
  10. package/src/assets/web-panel/assets/{ChatBubbleRenderer-DdrOqOOC.js → ChatBubbleRenderer-Bh1YNdtx.js} +1 -1
  11. package/src/assets/web-panel/assets/{Checkbox-BNcfTk-N.js → Checkbox-DgjfqlWW.js} +1 -1
  12. package/src/assets/web-panel/assets/{Codegen-pRCacnwB.js → Codegen-CkwOBThj.js} +1 -1
  13. package/src/assets/web-panel/assets/{Col-B6YlZPJZ.js → Col-Cohk5WYM.js} +1 -1
  14. package/src/assets/web-panel/assets/{Community-CVxyOMmk.js → Community-D3LMGh3F.js} +1 -1
  15. package/src/assets/web-panel/assets/{Compact-DUcI72Cz.js → Compact-DqoMJmh0.js} +1 -1
  16. package/src/assets/web-panel/assets/{Compliance-Jwoo1gAe.js → Compliance-BVjWZlEj.js} +1 -1
  17. package/src/assets/web-panel/assets/{Cowork-Dy4KE7GI.js → Cowork-C0lqQPqu.js} +2 -2
  18. package/src/assets/web-panel/assets/{Cron-CuK2QRSM.js → Cron-DHd_PJZS.js} +2 -2
  19. package/src/assets/web-panel/assets/{Crosschain-CLVhl9qA.js → Crosschain-BphK2Q9u.js} +1 -1
  20. package/src/assets/web-panel/assets/{DID-CbbeulSb.js → DID-CWIw0aG4.js} +2 -2
  21. package/src/assets/web-panel/assets/{Dashboard-B5mZKvMY.js → Dashboard-CKgDU9U6.js} +2 -2
  22. package/src/assets/web-panel/assets/{Dropdown-R_QKvEks.js → Dropdown-DkIlDUXF.js} +1 -1
  23. package/src/assets/web-panel/assets/{EmailListRenderer-MLN19CuX.js → EmailListRenderer-5sXA9hwZ.js} +1 -1
  24. package/src/assets/web-panel/assets/{FamilyGuardDashboard-Da6P7Opx.js → FamilyGuardDashboard-CgcdJLH7.js} +1 -1
  25. package/src/assets/web-panel/assets/{Federation-DSIDBZjI.js → Federation-DPOcJISA.js} +1 -1
  26. package/src/assets/web-panel/assets/{FormItemContext-Tg9XUdYt.js → FormItemContext-DxOutBMJ.js} +1 -1
  27. package/src/assets/web-panel/assets/{GenericCardRenderer-D6BoiR4f.js → GenericCardRenderer-BYVNtkcd.js} +1 -1
  28. package/src/assets/web-panel/assets/{Git-BwKxt-az.js → Git-B37LKxOu.js} +2 -2
  29. package/src/assets/web-panel/assets/{Governance-CZ6acDLS.js → Governance-CnKcx5un.js} +1 -1
  30. package/src/assets/web-panel/assets/{Inference-FpwqxLVZ.js → Inference-CbRAWN3_.js} +1 -1
  31. package/src/assets/web-panel/assets/{KnowledgeGraph-BptTOYDC.js → KnowledgeGraph-D0w6RfE_.js} +1 -1
  32. package/src/assets/web-panel/assets/{Logs-BqqAJttN.js → Logs-DxBDKpzq.js} +2 -2
  33. package/src/assets/web-panel/assets/{Marketplace-BBWAUKbG.js → Marketplace-DNLi6O_3.js} +1 -1
  34. package/src/assets/web-panel/assets/{McpTools-B3SbHbb2.js → McpTools-s0sBCPXw.js} +4 -4
  35. package/src/assets/web-panel/assets/{Memory-B2TeOSG3.js → Memory-BdSEgpmP.js} +2 -2
  36. package/src/assets/web-panel/assets/{MobileBridge-Cc23XCoy.js → MobileBridge-Dz7nz4K9.js} +2 -2
  37. package/src/assets/web-panel/assets/{MobileProjects-BNVM6ZVt.js → MobileProjects-DakdA2PC.js} +1 -1
  38. package/src/assets/web-panel/assets/{Mtc-BpCkBS7F.js → Mtc-Be9OBypk.js} +5 -5
  39. package/src/assets/web-panel/assets/{MtcAudit-CVGrJf70.js → MtcAudit-KI2ih4Tl.js} +2 -2
  40. package/src/assets/web-panel/assets/{Multisig-CDjGMJeY.js → Multisig-Cg3jHFjL.js} +3 -3
  41. package/src/assets/web-panel/assets/{NLProgramming-CzQV0HBf.js → NLProgramming-BepHx8fU.js} +1 -1
  42. package/src/assets/web-panel/assets/{Notes-opsvQMjX.js → Notes-2f05HyqN.js} +3 -3
  43. package/src/assets/web-panel/assets/{NotificationSettings-YcsTplJb.js → NotificationSettings-Blwio_G5.js} +1 -1
  44. package/src/assets/web-panel/assets/{OrderTableRenderer-D5nRE_x6.js → OrderTableRenderer-D7HJfvo_.js} +1 -1
  45. package/src/assets/web-panel/assets/{Organization-WjorRlbN.js → Organization-Uihlz1cI.js} +4 -4
  46. package/src/assets/web-panel/assets/{Overflow-Bp5-oTQ9.js → Overflow-gZx8kADL.js} +1 -1
  47. package/src/assets/web-panel/assets/{P2P-OkFf348U.js → P2P-DqEEGqba.js} +2 -2
  48. package/src/assets/web-panel/assets/PdhVaultBrowser-BHUi1nb5.js +7 -0
  49. package/src/assets/web-panel/assets/{Permissions-cKThyS90.js → Permissions-ERF2ZQ3G.js} +4 -4
  50. package/src/assets/web-panel/assets/{PersonalDataHub-_GrM7ozt.js → PersonalDataHub-CzDy9CFB.js} +2 -2
  51. package/src/assets/web-panel/assets/{Pipeline-CkY3lGDl.js → Pipeline-Dy4x9Ejw.js} +1 -1
  52. package/src/assets/web-panel/assets/{Privacy-CnS_dd_g.js → Privacy-C6UJys52.js} +1 -1
  53. package/src/assets/web-panel/assets/{ProjectInit-CUcPk9vr.js → ProjectInit-Bmi027fa.js} +2 -2
  54. package/src/assets/web-panel/assets/{ProjectSettings-i2i7Ykz7.js → ProjectSettings-NinSZmGA.js} +2 -2
  55. package/src/assets/web-panel/assets/{Projects-DB8eQuaI.js → Projects-DeW-p-hT.js} +1 -1
  56. package/src/assets/web-panel/assets/{Providers-C_c6uhkR.js → Providers-4hxrBTLo.js} +1 -1
  57. package/src/assets/web-panel/assets/{QuickAsk-CzGlGrW2.js → QuickAsk-B5inZlW8.js} +1 -1
  58. package/src/assets/web-panel/assets/{Recommend-BgubzHgA.js → Recommend-7lpBm00-.js} +1 -1
  59. package/src/assets/web-panel/assets/{Reputation-CJm5qyVb.js → Reputation-QfdGZxYO.js} +1 -1
  60. package/src/assets/web-panel/assets/{Row-DTo8pzXo.js → Row-DqHC7BCT.js} +1 -1
  61. package/src/assets/web-panel/assets/{RssFeed-D9dBFFbB.js → RssFeed-B3F1aGP6.js} +3 -3
  62. package/src/assets/web-panel/assets/{Search-CdtKcva0.js → Search-BXtjuoYO.js} +1 -1
  63. package/src/assets/web-panel/assets/{Security-I_w7dCJB.js → Security-Iy0MOV-A.js} +4 -4
  64. package/src/assets/web-panel/assets/{Services-BNkH7gB_.js → Services-C_puMp_6.js} +2 -2
  65. package/src/assets/web-panel/assets/{Skeleton-CmjuiQ-X.js → Skeleton-Bg6mTVZU.js} +1 -1
  66. package/src/assets/web-panel/assets/{Skills-DwWRjcC9.js → Skills-D4wXhanR.js} +1 -1
  67. package/src/assets/web-panel/assets/{Sla-reA2nX1r.js → Sla-Cgr2B9R6.js} +1 -1
  68. package/src/assets/web-panel/assets/{SpeechSettings-29sZleYf.js → SpeechSettings-ctYqZEY5.js} +1 -1
  69. package/src/assets/web-panel/assets/{SyncSettings-DpREiryw.js → SyncSettings-C3qWh9y4.js} +2 -2
  70. package/src/assets/web-panel/assets/{Tasks-DSFhXmqt.js → Tasks-D3AAgUx1.js} +1 -1
  71. package/src/assets/web-panel/assets/{Templates-ocxFfRbU.js → Templates-Bm_Dyz8T.js} +1 -1
  72. package/src/assets/web-panel/assets/{Tenant-CB8ceTRF.js → Tenant-DOSrOw9X.js} +1 -1
  73. package/src/assets/web-panel/assets/Terminal-DrG0bEOS.js +3 -0
  74. package/src/assets/web-panel/assets/{TimelineRenderer-5gi8YyK8.js → TimelineRenderer-BB8Qq6Cx.js} +1 -1
  75. package/src/assets/web-panel/assets/{Tokens-5ei6T7Fr.js → Tokens-DqyF_Flh.js} +1 -1
  76. package/src/assets/web-panel/assets/{Trigger-CCCK4AdU.js → Trigger-ClwQC2hP.js} +1 -1
  77. package/src/assets/web-panel/assets/{Trust-u_Ai2JnF.js → Trust-DGQSLPQ0.js} +1 -1
  78. package/src/assets/web-panel/assets/{UkeySign-DOYAKABP.js → UkeySign-BAkeYsUO.js} +1 -1
  79. package/src/assets/web-panel/assets/{VideoEditing-BCijqxrL.js → VideoEditing-WyUxS65Y.js} +1 -1
  80. package/src/assets/web-panel/assets/{Wallet-B3DYN-Zc.js → Wallet-Br7GdjEg.js} +4 -4
  81. package/src/assets/web-panel/assets/{WebAuthn-DtUm68s2.js → WebAuthn-bKs1dahj.js} +5 -5
  82. package/src/assets/web-panel/assets/{WorkflowEditor-DLeKMTsN.js → WorkflowEditor-CVqAALYe.js} +1 -1
  83. package/src/assets/web-panel/assets/{chat-CQaZBF2-.js → chat-BDGDRbab.js} +1 -1
  84. package/src/assets/web-panel/assets/{colors-FgoJ2BwA.js → colors-DIUxZwT8.js} +1 -1
  85. package/src/assets/web-panel/assets/{compact-item-eO7813ss.js → compact-item-C2iM4GmN.js} +1 -1
  86. package/src/assets/web-panel/assets/{createContext-Dmmz4MHV.js → createContext-D27NeHwO.js} +1 -1
  87. package/src/assets/web-panel/assets/devWarning-Daz0PHhS.js +1 -0
  88. package/src/assets/web-panel/assets/{hasIn-Dsqq2vZS.js → hasIn-D1lXdsFj.js} +1 -1
  89. package/src/assets/web-panel/assets/{index-iQRQbgks.js → index-B5ZB5lsV.js} +1 -1
  90. package/src/assets/web-panel/assets/{index-DdQeoRb5.js → index-B6kc4-nD.js} +1 -1
  91. package/src/assets/web-panel/assets/{index-BPTR7Mec.js → index-B8POWlbO.js} +1 -1
  92. package/src/assets/web-panel/assets/{index-amwzyKGM.js → index-BE9bNvdn.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-PQCrkiem.js → index-BIVYPlpl.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-Bc9ttIaX.js → index-BTUFhfHs.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-DXoO_gOa.js → index-BTedVe_v.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-CzmnOjxM.js → index-Bi8u5GsP.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-D5R74AU3.js → index-Bil9t91t.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-ZGiG2FFd.js → index-BqbjsJcS.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-uVTBfxr4.js → index-CAnMUhHO.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-D9EiKGCp.js → index-CDzSUTpa.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-tvGjyRJX.js → index-CEO9vhv7.js} +3 -3
  102. package/src/assets/web-panel/assets/{index-FxdLXcjM.js → index-CFEwtE3q.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-zfGbhmH7.js → index-CFY1KjB1.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-BNoEuwKO.js → index-CKMDgjfh.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-DHiXX4Vs.js → index-CNk98bb1.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-CGivPnGs.js → index-Ca8n97h9.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-FmwguCzK.js → index-Cb9u9MMo.js} +1 -1
  108. package/src/assets/web-panel/assets/index-Cbe_eJAR.js +1 -0
  109. package/src/assets/web-panel/assets/{index-CjH-1YTY.js → index-Cbqr8kW6.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-DqmgVJGi.js → index-CfR3Pvsu.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-Ds1EXfXm.js → index-Cgf3zMwq.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-Dt5foqaR.js → index-CiA-L5ld.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-DhJPhaFo.js → index-CoygRreE.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-BNRSfhkU.js → index-CsIw-YQF.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-DYX4azu5.js → index-DFhdJm7M.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-BOmxCZDa.js → index-DK0jgmJg.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-CWKCFa8f.js → index-Dc4k4V1u.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-laG9PnzA.js → index-DfSav-yQ.js} +1 -1
  119. package/src/assets/web-panel/assets/index-DgcPjW1c.js +1 -0
  120. package/src/assets/web-panel/assets/{index-CoCyHNT3.js → index-DkOu8er7.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-BbY4e6os.js → index-DnCVI295.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-D0wmbnlR.js → index-Do13fQ5W.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-RbLIx9Bf.js → index-DrS-Mrm-.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-DAsxek9K.js → index-ET5LYk9B.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-0QR3T83p.js → index-HZGu1woY.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-3j2RiDPG.js → index-Y1rkRas5.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-G_MQzt5R.js → index-yIM-KxVm.js} +1 -1
  128. package/src/assets/web-panel/assets/{initDefaultProps-C3uZWt9M.js → initDefaultProps-C0Yrc6yY.js} +1 -1
  129. package/src/assets/web-panel/assets/{motion-Br29X6q6.js → motion-DnOI85ek.js} +1 -1
  130. package/src/assets/web-panel/assets/{move-B2uHAfsg.js → move-DT9zQPZp.js} +1 -1
  131. package/src/assets/web-panel/assets/{omit-DY4JQnIP.js → omit-DFtDi5Wd.js} +1 -1
  132. package/src/assets/web-panel/assets/{pickAttrs-DUANwwrT.js → pickAttrs-Cobkb_rd.js} +1 -1
  133. package/src/assets/web-panel/assets/{placementArrow-ClrBK_Je.js → placementArrow-DWQDu4i-.js} +1 -1
  134. package/src/assets/web-panel/assets/{responsiveObserve-FzBdoJrD.js → responsiveObserve-daoQcWcX.js} +1 -1
  135. package/src/assets/web-panel/assets/{slide-Bn6of40H.js → slide-BLkzd2OV.js} +1 -1
  136. package/src/assets/web-panel/assets/{statusUtils-By0_n-TE.js → statusUtils-Uyxi81M0.js} +1 -1
  137. package/src/assets/web-panel/assets/{styleChecker-Rj-gDlgS.js → styleChecker-Dtw5lUcs.js} +1 -1
  138. package/src/assets/web-panel/assets/{useFlexGapSupport-mAGJOuoi.js → useFlexGapSupport-_JpMgpdt.js} +1 -1
  139. package/src/assets/web-panel/assets/{useFs-CUheuma1.js → useFs-huwAlPD-.js} +1 -1
  140. package/src/assets/web-panel/assets/{usePersonalDataHub-DRIdZ3Xz.js → usePersonalDataHub-7cafj8_f.js} +1 -1
  141. package/src/assets/web-panel/assets/{vnode-0B469T9A.js → vnode-DYUSfRt7.js} +1 -1
  142. package/src/assets/web-panel/assets/{zoom-yAup1syc.js → zoom-B-tjvmer.js} +1 -1
  143. package/src/assets/web-panel/index.html +1 -1
  144. package/src/commands/a2a.js +2 -1
  145. package/src/commands/bi.js +4 -3
  146. package/src/commands/browse.js +3 -2
  147. package/src/commands/codegen.js +7 -6
  148. package/src/commands/collab.js +2 -1
  149. package/src/commands/crosschain.js +5 -4
  150. package/src/commands/dao.js +10 -10
  151. package/src/commands/dbevo.js +3 -2
  152. package/src/commands/economy.js +8 -6
  153. package/src/commands/evolution.js +10 -8
  154. package/src/commands/export.js +2 -1
  155. package/src/commands/federation.js +8 -7
  156. package/src/commands/fusion.js +4 -3
  157. package/src/commands/git.js +2 -1
  158. package/src/commands/governance.js +6 -5
  159. package/src/commands/hardening.js +3 -2
  160. package/src/commands/hmemory.js +2 -1
  161. package/src/commands/hub.js +107 -0
  162. package/src/commands/inference.js +9 -8
  163. package/src/commands/infra.js +9 -8
  164. package/src/commands/instinct.js +66 -0
  165. package/src/commands/learning.js +66 -0
  166. package/src/commands/marketplace.js +5 -4
  167. package/src/commands/matrix.js +2 -1
  168. package/src/commands/memory.js +66 -0
  169. package/src/commands/nlprog.js +4 -3
  170. package/src/commands/nostr.js +4 -3
  171. package/src/commands/note.js +2 -1
  172. package/src/commands/ops.js +3 -2
  173. package/src/commands/perception.js +6 -5
  174. package/src/commands/privacy.js +13 -12
  175. package/src/commands/quantization.js +3 -2
  176. package/src/commands/recommend.js +8 -7
  177. package/src/commands/reputation.js +4 -3
  178. package/src/commands/runtime.js +6 -5
  179. package/src/commands/sandbox.js +5 -4
  180. package/src/commands/session.js +2 -1
  181. package/src/commands/sla.js +6 -5
  182. package/src/commands/social.js +6 -5
  183. package/src/commands/stress.js +7 -6
  184. package/src/commands/sync.js +2 -1
  185. package/src/commands/tenant.js +3 -2
  186. package/src/commands/trust.js +7 -6
  187. package/src/commands/wallet.js +2 -1
  188. package/src/lib/__tests__/agents.test.js +225 -0
  189. package/src/lib/__tests__/cowork-observe-html.test.js +141 -0
  190. package/src/lib/__tests__/logger.test.js +110 -0
  191. package/src/lib/__tests__/project-inventory.test.js +280 -0
  192. package/src/lib/__tests__/project-root.test.js +96 -0
  193. package/src/lib/__tests__/provider-stream.test.js +190 -0
  194. package/src/lib/cli-arg.js +41 -0
  195. package/src/lib/cli-numeric.js +12 -3
  196. package/src/lib/instinct-manager.js +64 -0
  197. package/src/lib/learning/learning-tables.js +83 -0
  198. package/src/lib/mcp-oauth.js +10 -2
  199. package/src/lib/memory-manager.js +67 -0
  200. package/src/lib/plan-mode.js +3 -2
  201. package/src/repl/__tests__/mcp-prompt.test.js +155 -0
  202. package/src/repl/__tests__/slash-macro.test.js +81 -0
  203. package/src/runtime/__tests__/coding-agent-contract-shared.test.js +136 -0
  204. package/src/runtime/__tests__/coding-agent-events.test.js +263 -0
  205. package/src/assets/web-panel/assets/PdhVaultBrowser-ue3TxFAw.js +0 -7
  206. package/src/assets/web-panel/assets/Terminal-Zx-Q7Yq2.js +0 -3
  207. package/src/assets/web-panel/assets/devWarning-UPy4WDBL.js +0 -1
  208. package/src/assets/web-panel/assets/index-B3QyuL3m.js +0 -1
  209. package/src/assets/web-panel/assets/index-CCeQm4U9.js +0 -1
@@ -1 +1 @@
1
- import{u as f}from"./index-tvGjyRJX.js";function d(n){if(!n)return n;if(n.error)throw new Error(n.error);return n.result!==void 0?n.result:n}function p(n,t,a,e,r){return typeof n.onMessage!="function"||typeof n.sendRaw!="function"?n.sendRaw({type:t,...a},r).then(d):new Promise((u,s)=>{const l=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`,w=`${t}.event`,g=`${t}.end`;let c=!1,y=()=>{};const o=(i,b)=>{if(!c){c=!0,clearTimeout(m);try{y()}catch{}i(b)}},m=setTimeout(()=>{o(s,new Error(`stream timeout (${r}ms): ${t}`))},r),h=n.onMessage(i=>{if(!(c||!i)&&!(i.id!==l&&i.requestId!==l)){if(i.type===w){if(typeof e=="function")try{e(i.event||i)}catch{}return}if(i.type===g){o(u,d(i));return}i.type==="error"&&o(s,new Error(i.message||"stream error"))}});y=typeof h=="function"?h:()=>{},Promise.resolve(n.sendRaw({id:l,type:t,...a},r)).catch(()=>{})})}function D(){const n=f(),t=(a,e={},r=3e4)=>n.sendRaw({type:a,...e},r).then(d);return{async health(){return await t("personal-data-hub.health",{},8e3)},async stats(){return await t("personal-data-hub.stats",{},8e3)},async listAdapters(){return await t("personal-data-hub.list-adapters",{},5e3)},async pickFile(a={}){try{const e=await n.sendRaw({type:"fs.openDialog",title:a.title,filters:a.filters},6e4),r=e&&e.result!==void 0?e.result:e;return r&&r.ok&&typeof r.filePath=="string"?r.filePath:null}catch{return null}},async adapterReadiness(a){return await t("personal-data-hub.adapter-readiness",Number.isInteger(a)?{timeoutMs:a}:{},15e3)},async syncAdapter(a,e={}){return await t("personal-data-hub.sync-adapter",{name:a,options:e},12e4)},async syncAll(a={}){return await t("personal-data-hub.sync-all",{options:a},6e5)},async registerMock({name:a="mock",count:e=20,seed:r=1}={}){return await t("personal-data-hub.register-mock",{name:a,count:e,seed:r})},async unregister(a){return await t("personal-data-hub.unregister",{name:a})},async ask(a,e={}){return await t("personal-data-hub.ask",{question:a,options:e},18e4)},async queryEvents(a={}){return await t("personal-data-hub.query-events",a,1e4)},async recentAudit(a={}){return await t("personal-data-hub.recent-audit",a,1e4)},async searchEvents(a={}){return await t("personal-data-hub.search-events",a,15e3)},async facetCounts(a={}){return await t("personal-data-hub.facet-counts",a,1e4)},async testEmailAuth(a){return await t("personal-data-hub.test-email-auth",{account:a},3e4)},async registerEmail(a,e={}){return await t("personal-data-hub.register-email",{account:a,opts:e},15e3)},async unregisterEmail(a){return await t("personal-data-hub.unregister-email",{email:a},5e3)},async listEmailAccounts(){return await t("personal-data-hub.list-email-accounts",{},5e3)},async eventDetail(a){return await t("personal-data-hub.event-detail",{eventId:a},5e3)},async syncAdapterStream(a,e={},r){return await p(n,"personal-data-hub.sync-adapter-stream",{name:a,options:e},r,6e5)},async syncAllStream(a={},e){return await p(n,"personal-data-hub.sync-all-stream",{options:a},e,9e5)},async registerAlipay(a,e={}){return await t("personal-data-hub.register-alipay",{account:a,opts:e},15e3)},async unregisterAlipay(a){return await t("personal-data-hub.unregister-alipay",{email:a},5e3)},async listAlipayAccounts(){return await t("personal-data-hub.list-alipay-accounts",{},5e3)},async importAlipayBill({zipPath:a,csvPath:e,zipPassword:r}={}){return await t("personal-data-hub.import-alipay-bill",{zipPath:a,csvPath:e,zipPassword:r},3e5)},async reviewQueueList(a=50){return await t("personal-data-hub.review-queue-list",{limit:a},5e3)},async reviewDecision(a,e){return await t("personal-data-hub.review-decision",{reviewId:a,decision:e},5e3)},async manualMerge(a,e){return await t("personal-data-hub.manual-merge",{aId:a,bId:e},5e3)},async manualUnmerge(a){return await t("personal-data-hub.manual-unmerge",{personId:a},5e3)},async resolverDrain(a=50){return await t("personal-data-hub.resolver-drain",{limit:a},18e4)},async resolverStats(){return await t("personal-data-hub.resolver-stats",{},5e3)},async skillsList(){return await t("personal-data-hub.skills-list",{},5e3)},async runSkill(a,e={}){return await t("personal-data-hub.run-skill",{name:a,options:e},12e4)},async openAichatLogin(a,e={}){return await t("personal-data-hub.aichat-open-login",{vendor:a,opts:e},1e4)},async probeAichatCookies(a,e){return await t("personal-data-hub.aichat-probe-cookies",{vendor:a,cookieHeader:e},1e4)},async registerAichatVendor(a,e,r={}){return await t("personal-data-hub.aichat-register-vendor",{vendor:a,cookies:e,opts:r},3e4)},async rotateAichatLogin(a){return await t("personal-data-hub.aichat-rotate-login",{vendor:a},1e4)},async listAichatAccounts(){return await t("personal-data-hub.list-aichat-accounts",{},5e3)},async unregisterAichat(a){return await t("personal-data-hub.unregister-aichat",{vendor:a},5e3)},async aichatHealthCheckOnce(){return await t("personal-data-hub.aichat-health-check-once",{},3e4)},async probeWechatEnv(){return await t("personal-data-hub.wechat-env-probe",{},15e3)},async registerWechat({account:a,dbPath:e,wechatDataPath:r,fridaOpts:u,keyProviderOverride:s}={}){return await t("personal-data-hub.register-wechat",{account:a,dbPath:e,wechatDataPath:r,fridaOpts:u,keyProviderOverride:s},45e3)},async listWechatAccounts(){return await t("personal-data-hub.list-wechat-accounts",{},5e3)},async unregisterWechat(a){return await t("personal-data-hub.unregister-wechat",{uin:a},5e3)},async bilibiliAdbSync(a={}){return await t("personal-data-hub.bilibili-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bilibiliAdbDoctor(){return await t("personal-data-hub.bilibili-adb-doctor",{},15e3)},async weiboAdbSync(a={}){return await t("personal-data-hub.weibo-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async xhsAdbSync(a={}){return await t("personal-data-hub.xhs-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async toutiaoAdbSync(a={}){return await t("personal-data-hub.toutiao-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},9e4)},async kuaishouAdbSync(a={}){return await t("personal-data-hub.kuaishou-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bridgeDoctor(){return await t("personal-data-hub.bridge-doctor",{},6e4)},async douyinAdbSync(a={}){return await t("personal-data-hub.douyin-adb-sync",{uid:a.uid,limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)}}}export{D as u};
1
+ import{u as f}from"./index-CEO9vhv7.js";function d(n){if(!n)return n;if(n.error)throw new Error(n.error);return n.result!==void 0?n.result:n}function p(n,t,a,e,r){return typeof n.onMessage!="function"||typeof n.sendRaw!="function"?n.sendRaw({type:t,...a},r).then(d):new Promise((u,s)=>{const l=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`,w=`${t}.event`,g=`${t}.end`;let c=!1,y=()=>{};const o=(i,b)=>{if(!c){c=!0,clearTimeout(m);try{y()}catch{}i(b)}},m=setTimeout(()=>{o(s,new Error(`stream timeout (${r}ms): ${t}`))},r),h=n.onMessage(i=>{if(!(c||!i)&&!(i.id!==l&&i.requestId!==l)){if(i.type===w){if(typeof e=="function")try{e(i.event||i)}catch{}return}if(i.type===g){o(u,d(i));return}i.type==="error"&&o(s,new Error(i.message||"stream error"))}});y=typeof h=="function"?h:()=>{},Promise.resolve(n.sendRaw({id:l,type:t,...a},r)).catch(()=>{})})}function D(){const n=f(),t=(a,e={},r=3e4)=>n.sendRaw({type:a,...e},r).then(d);return{async health(){return await t("personal-data-hub.health",{},8e3)},async stats(){return await t("personal-data-hub.stats",{},8e3)},async listAdapters(){return await t("personal-data-hub.list-adapters",{},5e3)},async pickFile(a={}){try{const e=await n.sendRaw({type:"fs.openDialog",title:a.title,filters:a.filters},6e4),r=e&&e.result!==void 0?e.result:e;return r&&r.ok&&typeof r.filePath=="string"?r.filePath:null}catch{return null}},async adapterReadiness(a){return await t("personal-data-hub.adapter-readiness",Number.isInteger(a)?{timeoutMs:a}:{},15e3)},async syncAdapter(a,e={}){return await t("personal-data-hub.sync-adapter",{name:a,options:e},12e4)},async syncAll(a={}){return await t("personal-data-hub.sync-all",{options:a},6e5)},async registerMock({name:a="mock",count:e=20,seed:r=1}={}){return await t("personal-data-hub.register-mock",{name:a,count:e,seed:r})},async unregister(a){return await t("personal-data-hub.unregister",{name:a})},async ask(a,e={}){return await t("personal-data-hub.ask",{question:a,options:e},18e4)},async queryEvents(a={}){return await t("personal-data-hub.query-events",a,1e4)},async recentAudit(a={}){return await t("personal-data-hub.recent-audit",a,1e4)},async searchEvents(a={}){return await t("personal-data-hub.search-events",a,15e3)},async facetCounts(a={}){return await t("personal-data-hub.facet-counts",a,1e4)},async testEmailAuth(a){return await t("personal-data-hub.test-email-auth",{account:a},3e4)},async registerEmail(a,e={}){return await t("personal-data-hub.register-email",{account:a,opts:e},15e3)},async unregisterEmail(a){return await t("personal-data-hub.unregister-email",{email:a},5e3)},async listEmailAccounts(){return await t("personal-data-hub.list-email-accounts",{},5e3)},async eventDetail(a){return await t("personal-data-hub.event-detail",{eventId:a},5e3)},async syncAdapterStream(a,e={},r){return await p(n,"personal-data-hub.sync-adapter-stream",{name:a,options:e},r,6e5)},async syncAllStream(a={},e){return await p(n,"personal-data-hub.sync-all-stream",{options:a},e,9e5)},async registerAlipay(a,e={}){return await t("personal-data-hub.register-alipay",{account:a,opts:e},15e3)},async unregisterAlipay(a){return await t("personal-data-hub.unregister-alipay",{email:a},5e3)},async listAlipayAccounts(){return await t("personal-data-hub.list-alipay-accounts",{},5e3)},async importAlipayBill({zipPath:a,csvPath:e,zipPassword:r}={}){return await t("personal-data-hub.import-alipay-bill",{zipPath:a,csvPath:e,zipPassword:r},3e5)},async reviewQueueList(a=50){return await t("personal-data-hub.review-queue-list",{limit:a},5e3)},async reviewDecision(a,e){return await t("personal-data-hub.review-decision",{reviewId:a,decision:e},5e3)},async manualMerge(a,e){return await t("personal-data-hub.manual-merge",{aId:a,bId:e},5e3)},async manualUnmerge(a){return await t("personal-data-hub.manual-unmerge",{personId:a},5e3)},async resolverDrain(a=50){return await t("personal-data-hub.resolver-drain",{limit:a},18e4)},async resolverStats(){return await t("personal-data-hub.resolver-stats",{},5e3)},async skillsList(){return await t("personal-data-hub.skills-list",{},5e3)},async runSkill(a,e={}){return await t("personal-data-hub.run-skill",{name:a,options:e},12e4)},async openAichatLogin(a,e={}){return await t("personal-data-hub.aichat-open-login",{vendor:a,opts:e},1e4)},async probeAichatCookies(a,e){return await t("personal-data-hub.aichat-probe-cookies",{vendor:a,cookieHeader:e},1e4)},async registerAichatVendor(a,e,r={}){return await t("personal-data-hub.aichat-register-vendor",{vendor:a,cookies:e,opts:r},3e4)},async rotateAichatLogin(a){return await t("personal-data-hub.aichat-rotate-login",{vendor:a},1e4)},async listAichatAccounts(){return await t("personal-data-hub.list-aichat-accounts",{},5e3)},async unregisterAichat(a){return await t("personal-data-hub.unregister-aichat",{vendor:a},5e3)},async aichatHealthCheckOnce(){return await t("personal-data-hub.aichat-health-check-once",{},3e4)},async probeWechatEnv(){return await t("personal-data-hub.wechat-env-probe",{},15e3)},async registerWechat({account:a,dbPath:e,wechatDataPath:r,fridaOpts:u,keyProviderOverride:s}={}){return await t("personal-data-hub.register-wechat",{account:a,dbPath:e,wechatDataPath:r,fridaOpts:u,keyProviderOverride:s},45e3)},async listWechatAccounts(){return await t("personal-data-hub.list-wechat-accounts",{},5e3)},async unregisterWechat(a){return await t("personal-data-hub.unregister-wechat",{uin:a},5e3)},async bilibiliAdbSync(a={}){return await t("personal-data-hub.bilibili-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bilibiliAdbDoctor(){return await t("personal-data-hub.bilibili-adb-doctor",{},15e3)},async weiboAdbSync(a={}){return await t("personal-data-hub.weibo-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async xhsAdbSync(a={}){return await t("personal-data-hub.xhs-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async toutiaoAdbSync(a={}){return await t("personal-data-hub.toutiao-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},9e4)},async kuaishouAdbSync(a={}){return await t("personal-data-hub.kuaishou-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bridgeDoctor(){return await t("personal-data-hub.bridge-doctor",{},6e4)},async douyinAdbSync(a={}){return await t("personal-data-hub.douyin-adb-sync",{uid:a.uid,limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)}}}export{D as u};
@@ -1 +1 @@
1
- import{M as i,h as a,w as l}from"./index-tvGjyRJX.js";import{a7 as o,k as g,C as d,F as f,A as p}from"./vendor-BvqAck49.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 N(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,N as t};
1
+ import{M as i,h as a,w as l}from"./index-CEO9vhv7.js";import{a7 as o,k as g,C as d,F as f,A as p}from"./vendor-BvqAck49.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 N(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,N as t};
@@ -1,4 +1,4 @@
1
- import{K as o}from"./index-tvGjyRJX.js";import{i as f}from"./motion-Br29X6q6.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-CEO9vhv7.js";import{i as f}from"./motion-DnOI85ek.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-tvGjyRJX.js"></script>
11
+ <script type="module" crossorigin src="./assets/index-CEO9vhv7.js"></script>
12
12
  <link rel="modulepreload" crossorigin href="./assets/vendor-BvqAck49.js">
13
13
  <link rel="modulepreload" crossorigin href="./assets/icons-DP3uiYxy.js">
14
14
  <link rel="stylesheet" crossorigin href="./assets/index-Cq93VfoF.css">
@@ -4,6 +4,7 @@
4
4
  */
5
5
 
6
6
  import chalk from "chalk";
7
+ import { intArg, floatArg } from "../lib/cli-arg.js";
7
8
  import ora from "ora";
8
9
  import { logger } from "../lib/logger.js";
9
10
  import { bootstrap, shutdown } from "../runtime/bootstrap.js";
@@ -514,7 +515,7 @@ export function registerA2aCommand(program) {
514
515
  .description("Submit a V2 task (in-memory, with optional timeout)")
515
516
  .argument("<agentId>", "Agent ID")
516
517
  .argument("<input>", "Task input")
517
- .option("--timeout-ms <ms>", "Timeout in ms", parseInt)
518
+ .option("--timeout-ms <ms>", "Timeout in ms", intArg("--timeout-ms"))
518
519
  .option("--json", "Output as JSON")
519
520
  .action((agentId, input, options) => {
520
521
  const res = sendTaskV2(null, {
@@ -4,6 +4,7 @@
4
4
  */
5
5
 
6
6
  import chalk from "chalk";
7
+ import { numericOption } from "../lib/cli-numeric.js";
7
8
  import { logger } from "../lib/logger.js";
8
9
  import { parseJsonOption } from "../lib/parse-json-option.js";
9
10
  import { bootstrap, shutdown } from "../runtime/bootstrap.js";
@@ -180,7 +181,7 @@ export function registerBiCommand(program) {
180
181
  try {
181
182
  const data = parseJsonOption(options.data, "--data", []);
182
183
  const result = detectAnomaly(data, {
183
- threshold: parseFloat(options.threshold),
184
+ threshold: numericOption(options.threshold, { name: "--threshold", fallback: 2 }),
184
185
  });
185
186
 
186
187
  if (options.json) {
@@ -213,7 +214,7 @@ export function registerBiCommand(program) {
213
214
  .action(async (options) => {
214
215
  try {
215
216
  const data = parseJsonOption(options.data, "--data", []);
216
- const result = predictTrend(data, parseInt(options.periods));
217
+ const result = predictTrend(data, numericOption(options.periods, { name: "--periods", integer: true, min: 1, fallback: 3 }));
217
218
 
218
219
  if (options.json) {
219
220
  console.log(JSON.stringify(result, null, 2));
@@ -343,7 +344,7 @@ export function registerBiCommand(program) {
343
344
  const data = parseJsonOption(options.data, "--data", []);
344
345
  const threshold =
345
346
  options.threshold !== undefined
346
- ? parseFloat(options.threshold)
347
+ ? numericOption(options.threshold, { name: "--threshold" })
347
348
  : undefined;
348
349
  const result = detectAnomalyV2({
349
350
  data,
@@ -4,6 +4,7 @@
4
4
  */
5
5
 
6
6
  import chalk from "chalk";
7
+ import { numericOption } from "../lib/cli-numeric.js";
7
8
  import ora from "ora";
8
9
  import { logger } from "../lib/logger.js";
9
10
  import {
@@ -162,8 +163,8 @@ export function registerBrowseCommand(program) {
162
163
  try {
163
164
  const spinner = ora(`Taking screenshot of ${url}...`).start();
164
165
  const result = await takeScreenshot(url, options.output, {
165
- width: parseInt(options.width),
166
- height: parseInt(options.height),
166
+ width: numericOption(options.width, { name: "--width", integer: true, min: 1, fallback: 1280 }),
167
+ height: numericOption(options.height, { name: "--height", integer: true, min: 1, fallback: 720 }),
167
168
  fullPage: !!options.fullPage,
168
169
  });
169
170
  spinner.stop();
@@ -3,6 +3,7 @@
3
3
  */
4
4
 
5
5
  import { Command } from "commander";
6
+ import { intArg, floatArg } from "../lib/cli-arg.js";
6
7
 
7
8
  import {
8
9
  SCAFFOLD_TEMPLATE,
@@ -117,8 +118,8 @@ export function registerCodegenCommand(program) {
117
118
  .option("-l, --language <lang>", "Programming language")
118
119
  .option("-f, --framework <fw>", "Framework used")
119
120
  .option("--code <code>", "Generated code")
120
- .option("--files <n>", "Files generated", parseInt)
121
- .option("--tokens <n>", "Tokens consumed", parseInt)
121
+ .option("--files <n>", "Files generated", intArg("--files"))
122
+ .option("--tokens <n>", "Tokens consumed", intArg("--tokens"))
122
123
  .option("-m, --metadata <json>", "Metadata JSON")
123
124
  .option("--json", "JSON output")
124
125
  .action((opts) => {
@@ -158,7 +159,7 @@ export function registerCodegenCommand(program) {
158
159
  .description("List code generations")
159
160
  .option("-l, --language <lang>", "Filter by language")
160
161
  .option("-f, --framework <fw>", "Filter by framework")
161
- .option("--limit <n>", "Max results", parseInt)
162
+ .option("--limit <n>", "Max results", intArg("--limit"))
162
163
  .option("--json", "JSON output")
163
164
  .action((opts) => {
164
165
  const db = _dbFromCtx(cg);
@@ -233,7 +234,7 @@ export function registerCodegenCommand(program) {
233
234
  cg.command("reviews")
234
235
  .description("List code reviews")
235
236
  .option("-l, --language <lang>", "Filter by language")
236
- .option("--limit <n>", "Max results", parseInt)
237
+ .option("--limit <n>", "Max results", intArg("--limit"))
237
238
  .option("--json", "JSON output")
238
239
  .action((opts) => {
239
240
  const db = _dbFromCtx(cg);
@@ -260,7 +261,7 @@ export function registerCodegenCommand(program) {
260
261
  )
261
262
  .requiredOption("-n, --name <name>", "Project name")
262
263
  .option("-o, --options <json>", "Options JSON")
263
- .option("--files <n>", "Files generated", parseInt)
264
+ .option("--files <n>", "Files generated", intArg("--files"))
264
265
  .option("--output <path>", "Output path")
265
266
  .option("--json", "JSON output")
266
267
  .action((opts) => {
@@ -297,7 +298,7 @@ export function registerCodegenCommand(program) {
297
298
  cg.command("scaffolds")
298
299
  .description("List scaffolds")
299
300
  .option("-t, --template <type>", "Filter by template")
300
- .option("--limit <n>", "Max results", parseInt)
301
+ .option("--limit <n>", "Max results", intArg("--limit"))
301
302
  .option("--json", "JSON output")
302
303
  .action((opts) => {
303
304
  const db = _dbFromCtx(cg);
@@ -6,6 +6,7 @@
6
6
  */
7
7
 
8
8
  import fs from "fs";
9
+ import { intArg, floatArg } from "../lib/cli-arg.js";
9
10
  import chalk from "chalk";
10
11
  import { logger } from "../lib/logger.js";
11
12
  import { bootstrap, shutdown } from "../runtime/bootstrap.js";
@@ -421,7 +422,7 @@ export function registerCollabCommand(program) {
421
422
  collab
422
423
  .command("agents")
423
424
  .description("List agents with autonomy levels")
424
- .option("-l, --level <n>", "Filter by level 0..4", parseInt)
425
+ .option("-l, --level <n>", "Filter by level 0..4", intArg("--level"))
425
426
  .option("--limit <n>", "Maximum entries", parseInt, 50)
426
427
  .option("--json", "Output as JSON")
427
428
  .action(async (options) => {
@@ -8,6 +8,7 @@
8
8
  */
9
9
 
10
10
  import fs from "node:fs";
11
+ import { intArg, floatArg } from "../lib/cli-arg.js";
11
12
 
12
13
  import { Command } from "commander";
13
14
 
@@ -651,7 +652,7 @@ export function registerCrossChainCommand(program) {
651
652
  .option("-f, --from <chain>", "Filter by source chain")
652
653
  .option("-t, --to <chain>", "Filter by destination chain")
653
654
  .option("-s, --status <status>", "Filter by status")
654
- .option("--limit <n>", "Max results", parseInt)
655
+ .option("--limit <n>", "Max results", intArg("--limit"))
655
656
  .option("--json", "JSON output")
656
657
  .action((opts) => {
657
658
  const db = _dbFromCtx(cc);
@@ -677,7 +678,7 @@ export function registerCrossChainCommand(program) {
677
678
  .option("-a, --from-asset <asset>", "Source asset", "native")
678
679
  .option("-b, --to-asset <asset>", "Target asset", "native")
679
680
  .option("-c, --counterparty <address>", "Counterparty address")
680
- .option("-t, --timeout <ms>", "Timeout in ms", parseInt)
681
+ .option("-t, --timeout <ms>", "Timeout in ms", intArg("--timeout"))
681
682
  .option("--mtc", "On success, stage an MTC swap-init envelope")
682
683
  .option("--mtc-config-dir <dir>", "Override MTC config root")
683
684
  .option("--json", "JSON output")
@@ -779,7 +780,7 @@ export function registerCrossChainCommand(program) {
779
780
  .description("List swaps")
780
781
  .option("-f, --from <chain>", "Filter by source chain")
781
782
  .option("-s, --status <status>", "Filter by status")
782
- .option("--limit <n>", "Max results", parseInt)
783
+ .option("--limit <n>", "Max results", intArg("--limit"))
783
784
  .option("--json", "JSON output")
784
785
  .action((opts) => {
785
786
  const db = _dbFromCtx(cc);
@@ -871,7 +872,7 @@ export function registerCrossChainCommand(program) {
871
872
  .option("-f, --from <chain>", "Filter by source chain")
872
873
  .option("-t, --to <chain>", "Filter by destination chain")
873
874
  .option("-s, --status <status>", "Filter by status")
874
- .option("--limit <n>", "Max results", parseInt)
875
+ .option("--limit <n>", "Max results", intArg("--limit"))
875
876
  .option("--json", "JSON output")
876
877
  .action((opts) => {
877
878
  const db = _dbFromCtx(cc);
@@ -388,7 +388,7 @@ export function registerDaoCommand(program) {
388
388
  type: options.type,
389
389
  actions: parseJsonOption(options.actions, "--actions"),
390
390
  votingDurationMs: options.votingDuration
391
- ? parseInt(options.votingDuration)
391
+ ? numericOption(options.votingDuration, { name: "--voting-duration", integer: true, min: 0 })
392
392
  : undefined,
393
393
  });
394
394
 
@@ -457,8 +457,8 @@ export function registerDaoCommand(program) {
457
457
  proposalId,
458
458
  voterDid: options.voter,
459
459
  voteType: options.type,
460
- voteCount: parseInt(options.count),
461
- balance: options.balance ? parseFloat(options.balance) : undefined,
460
+ voteCount: numericOption(options.count, { name: "--count", integer: true, min: 1 }),
461
+ balance: options.balance ? numericOption(options.balance, { name: "--balance", min: 0 }) : undefined,
462
462
  });
463
463
 
464
464
  logger.success("Vote cast");
@@ -779,7 +779,7 @@ export function registerDaoCommand(program) {
779
779
  const db = ctx.db.getDatabase();
780
780
  ensureDAOv2Tables(db);
781
781
 
782
- const s = getGovernanceStatsV2(parseInt(options.members));
782
+ const s = getGovernanceStatsV2(numericOption(options.members, { name: "--members", integer: true, min: 0, fallback: 0 }));
783
783
  if (options.json) {
784
784
  console.log(JSON.stringify(s, null, 2));
785
785
  } else {
@@ -833,19 +833,19 @@ export function registerDaoCommand(program) {
833
833
  try {
834
834
  const updates = {};
835
835
  if (options.votingDuration)
836
- updates.votingDurationMs = parseInt(options.votingDuration);
836
+ updates.votingDurationMs = numericOption(options.votingDuration, { name: "--voting-duration", integer: true, min: 0 });
837
837
  if (options.quorumPercentage)
838
- updates.quorumPercentage = parseFloat(options.quorumPercentage);
838
+ updates.quorumPercentage = numericOption(options.quorumPercentage, { name: "--quorum-percentage", min: 0, max: 100 });
839
839
  if (options.timelockMs)
840
- updates.timelockMs = parseInt(options.timelockMs);
840
+ updates.timelockMs = numericOption(options.timelockMs, { name: "--timelock-ms", integer: true, min: 0 });
841
841
  if (options.quadraticEnabled !== undefined)
842
842
  updates.quadraticEnabled = options.quadraticEnabled === "true";
843
843
  if (options.maxDelegationDepth)
844
- updates.maxDelegationDepth = parseInt(options.maxDelegationDepth);
844
+ updates.maxDelegationDepth = numericOption(options.maxDelegationDepth, { name: "--max-delegation-depth", integer: true, min: 0 });
845
845
  if (options.proposalThreshold)
846
- updates.proposalThreshold = parseFloat(options.proposalThreshold);
846
+ updates.proposalThreshold = numericOption(options.proposalThreshold, { name: "--proposal-threshold", min: 0 });
847
847
  if (options.maxSingleAllocation)
848
- updates.maxSingleAllocation = parseFloat(options.maxSingleAllocation);
848
+ updates.maxSingleAllocation = numericOption(options.maxSingleAllocation, { name: "--max-single-allocation", min: 0 });
849
849
 
850
850
  const cfg = configureV2(updates);
851
851
  if (options.json) {
@@ -3,6 +3,7 @@
3
3
  */
4
4
 
5
5
  import { Command } from "commander";
6
+ import { intArg, floatArg } from "../lib/cli-arg.js";
6
7
 
7
8
  import {
8
9
  MIGRATION_STATUS,
@@ -239,7 +240,7 @@ export function registerDbEvoCommand(program) {
239
240
  dbevo
240
241
  .command("history")
241
242
  .description("Show migration history")
242
- .option("--limit <n>", "Max results", parseInt)
243
+ .option("--limit <n>", "Max results", intArg("--limit"))
243
244
  .option("--json", "JSON output")
244
245
  .action((opts) => {
245
246
  const db = _dbFromCtx(dbevo);
@@ -340,7 +341,7 @@ export function registerDbEvoCommand(program) {
340
341
  dbevo
341
342
  .command("analyze")
342
343
  .description("Analyze slow queries and generate index suggestions")
343
- .option("--min-count <n>", "Min query count for suggestion", parseInt)
344
+ .option("--min-count <n>", "Min query count for suggestion", intArg("--min-count"))
344
345
  .option("--json", "JSON output")
345
346
  .action((opts) => {
346
347
  const db = _dbFromCtx(dbevo);
@@ -4,6 +4,8 @@
4
4
  */
5
5
 
6
6
  import chalk from "chalk";
7
+ import { intArg, floatArg } from "../lib/cli-arg.js";
8
+ import { numericOption } from "../lib/cli-numeric.js";
7
9
  import { logger } from "../lib/logger.js";
8
10
  import { parseJsonOption } from "../lib/parse-json-option.js";
9
11
  import { bootstrap, shutdown } from "../runtime/bootstrap.js";
@@ -166,7 +168,7 @@ export function registerEconomyCommand(program) {
166
168
  const db = ctx.db.getDatabase();
167
169
  ensureEconomyTables(db);
168
170
 
169
- const ch = openChannel(db, partyA, partyB, parseFloat(options.deposit));
171
+ const ch = openChannel(db, partyA, partyB, numericOption(options.deposit, { name: "--deposit", min: 0 }));
170
172
  logger.success("Channel opened");
171
173
  logger.log(` ${chalk.bold("ID:")} ${chalk.cyan(ch.id)}`);
172
174
  logger.log(` ${chalk.bold("Party A:")} ${ch.partyA} (${ch.balanceA})`);
@@ -501,9 +503,9 @@ export function registerEconomyCommand(program) {
501
503
  .argument("<from>", "From agent ID")
502
504
  .argument("<to>", "To agent ID")
503
505
  .argument("<service-id>", "Service ID")
504
- .option("--tokens <n>", "Token count (for per_token)", parseInt)
505
- .option("--minutes <n>", "Minute count (for per_minute)", parseFloat)
506
- .option("--calls <n>", "Call count (for per_call)", parseInt)
506
+ .option("--tokens <n>", "Token count (for per_token)", intArg("--tokens"))
507
+ .option("--minutes <n>", "Minute count (for per_minute)", floatArg("--minutes"))
508
+ .option("--calls <n>", "Call count (for per_call)", intArg("--calls"))
507
509
  .option("--json", "Output as JSON")
508
510
  .action(async (from, to, serviceId, options) => {
509
511
  try {
@@ -534,8 +536,8 @@ export function registerEconomyCommand(program) {
534
536
  .description("Open a two-sided channel (Phase 85)")
535
537
  .argument("<party-a>", "Party A ID")
536
538
  .argument("<party-b>", "Party B ID")
537
- .option("--deposit-a <n>", "Deposit from party A", parseFloat)
538
- .option("--deposit-b <n>", "Deposit from party B", parseFloat)
539
+ .option("--deposit-a <n>", "Deposit from party A", floatArg("--deposit-a"))
540
+ .option("--deposit-b <n>", "Deposit from party B", floatArg("--deposit-b"))
539
541
  .option("--json", "Output as JSON")
540
542
  .action(async (a, b, options) => {
541
543
  try {
@@ -4,6 +4,8 @@
4
4
  */
5
5
 
6
6
  import chalk from "chalk";
7
+ import { intArg, floatArg } from "../lib/cli-arg.js";
8
+ import { numericOption } from "../lib/cli-numeric.js";
7
9
  import ora from "ora";
8
10
  import { logger } from "../lib/logger.js";
9
11
  import { parseJsonOption } from "../lib/parse-json-option.js";
@@ -291,7 +293,7 @@ export function registerEvolutionCommand(program) {
291
293
  .command("growth")
292
294
  .description("Show growth log")
293
295
  .option("--type <filter>", "Filter by event type")
294
- .option("--limit <n>", "Limit entries", parseInt)
296
+ .option("--limit <n>", "Limit entries", intArg("--limit"))
295
297
  .option("--json", "Output as JSON")
296
298
  .action(async (options) => {
297
299
  try {
@@ -523,10 +525,10 @@ export function registerEvolutionCommand(program) {
523
525
  try {
524
526
  const r = trainIncrementalV2({
525
527
  strategy: options.strategy,
526
- dataSize: parseFloat(options.dataSize),
527
- lossBefore: parseFloat(options.lossBefore),
528
- lossAfter: parseFloat(options.lossAfter),
529
- durationMs: parseFloat(options.durationMs),
528
+ dataSize: numericOption(options.dataSize, { name: "--data-size", min: 0 }),
529
+ lossBefore: numericOption(options.lossBefore, { name: "--loss-before" }),
530
+ lossAfter: numericOption(options.lossAfter, { name: "--loss-after" }),
531
+ durationMs: numericOption(options.durationMs, { name: "--duration-ms", min: 0, fallback: 0 }),
530
532
  });
531
533
  if (options.json) console.log(JSON.stringify(r, null, 2));
532
534
  else {
@@ -650,7 +652,7 @@ export function registerEvolutionCommand(program) {
650
652
  .option("--json", "Output as JSON")
651
653
  .action((options) => {
652
654
  const horizon = options.horizonMs
653
- ? parseFloat(options.horizonMs)
655
+ ? numericOption(options.horizonMs, { name: "--horizon-ms", min: 0 })
654
656
  : undefined;
655
657
  const r = predictBehaviorV2({ timeHorizonMs: horizon });
656
658
  if (options.json) console.log(JSON.stringify(r, null, 2));
@@ -703,8 +705,8 @@ export function registerEvolutionCommand(program) {
703
705
  .option("--json", "Output as JSON")
704
706
  .action((options) => {
705
707
  const period = {};
706
- if (options.from) period.fromMs = parseFloat(options.from);
707
- if (options.to) period.toMs = parseFloat(options.to);
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 });
708
710
  const list = getGrowthLogV2({
709
711
  milestoneType: options.type,
710
712
  period: Object.keys(period).length ? period : undefined,
@@ -4,6 +4,7 @@
4
4
  */
5
5
 
6
6
  import chalk from "chalk";
7
+ import { numericOption } from "../lib/cli-numeric.js";
7
8
  import ora from "ora";
8
9
  import { resolve } from "path";
9
10
  import { logger } from "../lib/logger.js";
@@ -72,7 +73,7 @@ export function registerExportCommand(program) {
72
73
  const exported = exportToMarkdown(db, outputDir, {
73
74
  category: options.category,
74
75
  tag: options.tag,
75
- limit: options.limit ? parseInt(options.limit) : undefined,
76
+ limit: options.limit ? numericOption(options.limit, { name: "--limit", integer: true, min: 1 }) : undefined,
76
77
  });
77
78
  spinner.stop();
78
79
 
@@ -3,6 +3,7 @@
3
3
  */
4
4
 
5
5
  import { Command } from "commander";
6
+ import { intArg, floatArg } from "../lib/cli-arg.js";
6
7
 
7
8
  import {
8
9
  CIRCUIT_STATE,
@@ -109,8 +110,8 @@ export function registerFederationCommand(program) {
109
110
  "Failure threshold before tripping",
110
111
  parseInt,
111
112
  )
112
- .option("-s, --success-threshold <n>", "Success probes to close", parseInt)
113
- .option("-t, --open-timeout <ms>", "Open timeout in ms", parseInt)
113
+ .option("-s, --success-threshold <n>", "Success probes to close", intArg("--success-threshold"))
114
+ .option("-t, --open-timeout <ms>", "Open timeout in ms", intArg("--open-timeout"))
114
115
  .option("-m, --metadata <json>", "Metadata JSON")
115
116
  .option("--json", "JSON output")
116
117
  .action((nodeId, opts) => {
@@ -165,7 +166,7 @@ export function registerFederationCommand(program) {
165
166
  .command("breakers")
166
167
  .description("List circuit breakers")
167
168
  .option("-s, --state <state>", "Filter by state (closed/open/half_open)")
168
- .option("--limit <n>", "Max results", parseInt)
169
+ .option("--limit <n>", "Max results", intArg("--limit"))
169
170
  .option("--json", "JSON output")
170
171
  .action((opts) => {
171
172
  const db = _dbFromCtx(fed);
@@ -295,7 +296,7 @@ export function registerFederationCommand(program) {
295
296
  .option("-n, --node <id>", "Filter by node ID")
296
297
  .option("-t, --type <type>", "Filter by check type")
297
298
  .option("-s, --status <status>", "Filter by status")
298
- .option("--limit <n>", "Max results", parseInt)
299
+ .option("--limit <n>", "Max results", intArg("--limit"))
299
300
  .option("--json", "JSON output")
300
301
  .action((opts) => {
301
302
  const db = _dbFromCtx(fed);
@@ -337,9 +338,9 @@ export function registerFederationCommand(program) {
337
338
  fed
338
339
  .command("pool-init <node-id>")
339
340
  .description("Initialize a connection pool for a node")
340
- .option("--min <n>", "Min connections", parseInt)
341
- .option("--max <n>", "Max connections", parseInt)
342
- .option("--idle-timeout <ms>", "Idle timeout in ms", parseInt)
341
+ .option("--min <n>", "Min connections", intArg("--min"))
342
+ .option("--max <n>", "Max connections", intArg("--max"))
343
+ .option("--idle-timeout <ms>", "Idle timeout in ms", intArg("--idle-timeout"))
343
344
  .option("--json", "JSON output")
344
345
  .action((nodeId, opts) => {
345
346
  const result = initPool(nodeId, {
@@ -3,6 +3,7 @@
3
3
  */
4
4
 
5
5
  import { Command } from "commander";
6
+ import { intArg, floatArg } from "../lib/cli-arg.js";
6
7
 
7
8
  import {
8
9
  PROTOCOL,
@@ -145,7 +146,7 @@ export function registerFusionCommand(program) {
145
146
  fu.command("messages")
146
147
  .description("List unified messages")
147
148
  .option("-p, --protocol <name>", "Filter by protocol")
148
- .option("--limit <n>", "Max results", parseInt)
149
+ .option("--limit <n>", "Max results", intArg("--limit"))
149
150
  .option("--json", "JSON output")
150
151
  .action((opts) => {
151
152
  const db = _dbFromCtx(fu);
@@ -203,7 +204,7 @@ export function registerFusionCommand(program) {
203
204
 
204
205
  fu.command("identities")
205
206
  .description("List identity mappings")
206
- .option("--limit <n>", "Max results", parseInt)
207
+ .option("--limit <n>", "Max results", intArg("--limit"))
207
208
  .option("--json", "JSON output")
208
209
  .action((opts) => {
209
210
  const db = _dbFromCtx(fu);
@@ -269,7 +270,7 @@ export function registerFusionCommand(program) {
269
270
  fu.command("quality-scores")
270
271
  .description("List quality scores")
271
272
  .option("-l, --level <level>", "Filter by quality level")
272
- .option("--limit <n>", "Max results", parseInt)
273
+ .option("--limit <n>", "Max results", intArg("--limit"))
273
274
  .option("--json", "JSON output")
274
275
  .action((opts) => {
275
276
  const db = _dbFromCtx(fu);
@@ -4,6 +4,7 @@
4
4
  */
5
5
 
6
6
  import chalk from "chalk";
7
+ import { numericOption } from "../lib/cli-numeric.js";
7
8
  import { resolve } from "path";
8
9
  import { logger } from "../lib/logger.js";
9
10
  import {
@@ -165,7 +166,7 @@ export function registerGitCommand(program) {
165
166
  }
166
167
 
167
168
  const analysis = gitHistoryAnalyze(dir);
168
- const recentLog = gitLog(dir, parseInt(options.limit));
169
+ const recentLog = gitLog(dir, numericOption(options.limit, { name: "--limit", integer: true, min: 1, fallback: 10 }));
169
170
 
170
171
  if (options.json) {
171
172
  console.log(
@@ -6,6 +6,7 @@
6
6
  */
7
7
 
8
8
  import chalk from "chalk";
9
+ import { intArg, floatArg } from "../lib/cli-arg.js";
9
10
  import { logger } from "../lib/logger.js";
10
11
  import { parseJsonOption } from "../lib/parse-json-option.js";
11
12
  import { bootstrap, shutdown } from "../runtime/bootstrap.js";
@@ -290,8 +291,8 @@ export function registerGovernanceCommand(program) {
290
291
  gov
291
292
  .command("close <proposal-id>")
292
293
  .description("Close voting — auto-resolves to passed/rejected")
293
- .option("-q, --quorum <n>", "Quorum threshold (0-1)", parseFloat)
294
- .option("-t, --threshold <n>", "Pass threshold (0-1)", parseFloat)
294
+ .option("-q, --quorum <n>", "Quorum threshold (0-1)", floatArg("--quorum"))
295
+ .option("-t, --threshold <n>", "Pass threshold (0-1)", floatArg("--threshold"))
295
296
  .option(
296
297
  "-n, --total-voters <n>",
297
298
  "Total eligible voters (for quorum)",
@@ -402,9 +403,9 @@ export function registerGovernanceCommand(program) {
402
403
  gov
403
404
  .command("tally <proposal-id>")
404
405
  .description("Show vote tally with quorum/threshold check")
405
- .option("-q, --quorum <n>", "Quorum threshold (0-1)", parseFloat)
406
- .option("-t, --threshold <n>", "Pass threshold (0-1)", parseFloat)
407
- .option("-n, --total-voters <n>", "Total eligible voters", parseInt)
406
+ .option("-q, --quorum <n>", "Quorum threshold (0-1)", floatArg("--quorum"))
407
+ .option("-t, --threshold <n>", "Pass threshold (0-1)", floatArg("--threshold"))
408
+ .option("-n, --total-voters <n>", "Total eligible voters", intArg("--total-voters"))
408
409
  .option("--json", "Output as JSON")
409
410
  .action(async (proposalId, options) => {
410
411
  try {
@@ -4,6 +4,7 @@
4
4
  */
5
5
 
6
6
  import chalk from "chalk";
7
+ import { intArg, floatArg } from "../lib/cli-arg.js";
7
8
  import { logger } from "../lib/logger.js";
8
9
  import { parseJsonOption } from "../lib/parse-json-option.js";
9
10
  import { bootstrap, shutdown } from "../runtime/bootstrap.js";
@@ -556,8 +557,8 @@ export function registerHardeningCommand(program) {
556
557
  hardening
557
558
  .command("complete-audit <audit-id>")
558
559
  .description("Complete a RUNNING audit")
559
- .option("-p, --passed <n>", "Passed check count", parseInt)
560
- .option("-f, --failed <n>", "Failed check count", parseInt)
560
+ .option("-p, --passed <n>", "Passed check count", intArg("--passed"))
561
+ .option("-f, --failed <n>", "Failed check count", intArg("--failed"))
561
562
  .option("-w, --warning-threshold <n>", "Score threshold for WARNING (0–1)")
562
563
  .option("--json", "JSON output")
563
564
  .action(async (auditId, opts) => {
@@ -4,6 +4,7 @@
4
4
  */
5
5
 
6
6
  import chalk from "chalk";
7
+ import { numericOption } from "../lib/cli-numeric.js";
7
8
  import ora from "ora";
8
9
  import { logger } from "../lib/logger.js";
9
10
  import { bootstrap, shutdown } from "../runtime/bootstrap.js";
@@ -661,7 +662,7 @@ export function registerHmemoryCommand(program) {
661
662
  maxAge: parseFloat(options.maxAge) || 720,
662
663
  threshold:
663
664
  options.threshold !== undefined
664
- ? parseFloat(options.threshold)
665
+ ? numericOption(options.threshold, { name: "--threshold", min: 0, max: 1 })
665
666
  : undefined,
666
667
  });
667
668
  if (options.json) console.log(JSON.stringify(result, null, 2));