perp-cli 0.11.0 → 0.12.1

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 (240) hide show
  1. package/README.md +30 -25
  2. package/dist/_stderr-filter.d.ts +0 -0
  3. package/dist/_stderr-filter.js +30 -0
  4. package/dist/agent-wallet/expiry.d.ts +15 -0
  5. package/dist/agent-wallet/expiry.js +26 -0
  6. package/dist/agent-wallet/lighter-keystore.d.ts +34 -0
  7. package/dist/agent-wallet/lighter-keystore.js +232 -0
  8. package/dist/agent-wallet/passphrase.d.ts +13 -0
  9. package/dist/agent-wallet/passphrase.js +54 -0
  10. package/dist/agent-wallet/signing-strategy.d.ts +67 -0
  11. package/dist/agent-wallet/signing-strategy.js +51 -0
  12. package/dist/agent-wallet/store.d.ts +37 -0
  13. package/dist/agent-wallet/store.js +172 -0
  14. package/dist/api/public/_http.d.ts +15 -0
  15. package/dist/api/public/_http.js +24 -0
  16. package/dist/api/public/hyperliquid.js +36 -24
  17. package/dist/api/public/lighter.d.ts +7 -1
  18. package/dist/api/public/lighter.js +85 -37
  19. package/dist/api/public/pacifica.js +47 -18
  20. package/dist/bridge-engine.js +102 -49
  21. package/dist/cli-spec.js +1 -2
  22. package/dist/commands/account.js +2 -500
  23. package/dist/commands/agent.d.ts +8 -2
  24. package/dist/commands/agent.js +1903 -366
  25. package/dist/commands/alerts.js +3 -1
  26. package/dist/commands/arb/index.js +37 -7
  27. package/dist/commands/arb-auto.js +44 -11
  28. package/dist/commands/arb.js +83 -34
  29. package/dist/commands/bot.d.ts +1 -1
  30. package/dist/commands/bot.js +18 -14
  31. package/dist/commands/bridge.d.ts +1 -1
  32. package/dist/commands/bridge.js +4 -4
  33. package/dist/commands/funds.d.ts +1 -1
  34. package/dist/commands/funds.js +18 -68
  35. package/dist/commands/jobs.d.ts +1 -1
  36. package/dist/commands/jobs.js +2 -2
  37. package/dist/commands/manage.d.ts +1 -1
  38. package/dist/commands/manage.js +12 -84
  39. package/dist/commands/plan.d.ts +1 -1
  40. package/dist/commands/plan.js +2 -2
  41. package/dist/commands/portfolio.d.ts +19 -3
  42. package/dist/commands/portfolio.js +747 -163
  43. package/dist/commands/rebalance.d.ts +1 -1
  44. package/dist/commands/rebalance.js +18 -12
  45. package/dist/commands/risk.js +2 -6
  46. package/dist/commands/settings.js +30 -53
  47. package/dist/commands/trade.js +16 -15
  48. package/dist/commands/wallet.d.ts +2 -1
  49. package/dist/commands/wallet.js +756 -28
  50. package/dist/errors.d.ts +64 -0
  51. package/dist/errors.js +82 -2
  52. package/dist/event-stream.js +12 -1
  53. package/dist/exchanges/aster-typed-data.d.ts +156 -0
  54. package/dist/exchanges/aster-typed-data.js +189 -0
  55. package/dist/exchanges/aster.d.ts +60 -11
  56. package/dist/exchanges/aster.js +278 -136
  57. package/dist/exchanges/hyperliquid.d.ts +14 -0
  58. package/dist/exchanges/hyperliquid.js +84 -34
  59. package/dist/exchanges/lighter-spot.js +14 -3
  60. package/dist/exchanges/lighter.d.ts +66 -0
  61. package/dist/exchanges/lighter.js +199 -27
  62. package/dist/exchanges/pacifica-typed-data.d.ts +75 -0
  63. package/dist/exchanges/pacifica-typed-data.js +74 -0
  64. package/dist/exchanges/pacifica.d.ts +29 -1
  65. package/dist/exchanges/pacifica.js +94 -6
  66. package/dist/funding/rates.js +59 -21
  67. package/dist/guardrail/perp-guardrail.js +9 -1
  68. package/dist/index.d.ts +1 -1
  69. package/dist/index.js +268 -360
  70. package/dist/jobs.js +3 -1
  71. package/dist/mcp-server.js +85 -83
  72. package/dist/position-history.js +47 -4
  73. package/dist/settings.d.ts +67 -3
  74. package/dist/settings.js +1 -2
  75. package/dist/signer/ows-evm.d.ts +14 -0
  76. package/dist/signer/ows-evm.js +28 -9
  77. package/dist/smart-order.d.ts +8 -2
  78. package/dist/smart-order.js +46 -11
  79. package/dist/strategies/funding-arb.js +29 -8
  80. package/dist/trade-validator.js +30 -5
  81. package/dist/utils.d.ts +10 -0
  82. package/dist/utils.js +19 -0
  83. package/package.json +2 -2
  84. package/skills/perp-cli/SKILL.md +23 -14
  85. package/skills/perp-cli/references/agent-operations.md +6 -4
  86. package/skills/perp-cli/references/commands.md +55 -34
  87. package/skills/perp-cli/scripts/preflight.sh +4 -4
  88. package/skills/perp-cli/scripts/spot-perp-scan.sh +2 -2
  89. package/dist/__tests__/alert-logic.test.d.ts +0 -1
  90. package/dist/__tests__/alert-logic.test.js +0 -107
  91. package/dist/__tests__/arb-auto-3dex.test.d.ts +0 -1
  92. package/dist/__tests__/arb-auto-3dex.test.js +0 -397
  93. package/dist/__tests__/arb-history-stats.test.d.ts +0 -1
  94. package/dist/__tests__/arb-history-stats.test.js +0 -176
  95. package/dist/__tests__/arb-logic.test.d.ts +0 -1
  96. package/dist/__tests__/arb-logic.test.js +0 -84
  97. package/dist/__tests__/arb-manage.test.d.ts +0 -1
  98. package/dist/__tests__/arb-manage.test.js +0 -253
  99. package/dist/__tests__/arb-new-features.test.d.ts +0 -1
  100. package/dist/__tests__/arb-new-features.test.js +0 -457
  101. package/dist/__tests__/arb-sizing.test.d.ts +0 -1
  102. package/dist/__tests__/arb-sizing.test.js +0 -48
  103. package/dist/__tests__/arb-state.test.d.ts +0 -1
  104. package/dist/__tests__/arb-state.test.js +0 -284
  105. package/dist/__tests__/arb-userflow.test.d.ts +0 -1
  106. package/dist/__tests__/arb-userflow.test.js +0 -945
  107. package/dist/__tests__/arb-utils.test.d.ts +0 -1
  108. package/dist/__tests__/arb-utils.test.js +0 -264
  109. package/dist/__tests__/bot-conditions.test.d.ts +0 -1
  110. package/dist/__tests__/bot-conditions.test.js +0 -341
  111. package/dist/__tests__/client-id-tracker.test.d.ts +0 -1
  112. package/dist/__tests__/client-id-tracker.test.js +0 -137
  113. package/dist/__tests__/commands/new-atomic-commands.test.d.ts +0 -1
  114. package/dist/__tests__/commands/new-atomic-commands.test.js +0 -502
  115. package/dist/__tests__/commands/order-intent.test.d.ts +0 -1
  116. package/dist/__tests__/commands/order-intent.test.js +0 -600
  117. package/dist/__tests__/commands/trade-commands.test.d.ts +0 -1
  118. package/dist/__tests__/commands/trade-commands.test.js +0 -821
  119. package/dist/__tests__/config.test.d.ts +0 -1
  120. package/dist/__tests__/config.test.js +0 -86
  121. package/dist/__tests__/cross-chain-margin.test.d.ts +0 -1
  122. package/dist/__tests__/cross-chain-margin.test.js +0 -287
  123. package/dist/__tests__/dex-asset-map.test.d.ts +0 -1
  124. package/dist/__tests__/dex-asset-map.test.js +0 -191
  125. package/dist/__tests__/errors.test.d.ts +0 -1
  126. package/dist/__tests__/errors.test.js +0 -110
  127. package/dist/__tests__/event-stream.test.d.ts +0 -1
  128. package/dist/__tests__/event-stream.test.js +0 -276
  129. package/dist/__tests__/exchanges/interface.test.d.ts +0 -1
  130. package/dist/__tests__/exchanges/interface.test.js +0 -132
  131. package/dist/__tests__/exchanges/mock-adapter.d.ts +0 -69
  132. package/dist/__tests__/exchanges/mock-adapter.js +0 -137
  133. package/dist/__tests__/execution-log.test.d.ts +0 -1
  134. package/dist/__tests__/execution-log.test.js +0 -106
  135. package/dist/__tests__/funding-calc.test.d.ts +0 -1
  136. package/dist/__tests__/funding-calc.test.js +0 -71
  137. package/dist/__tests__/funding-history.test.d.ts +0 -1
  138. package/dist/__tests__/funding-history.test.js +0 -343
  139. package/dist/__tests__/funding-rates.test.d.ts +0 -1
  140. package/dist/__tests__/funding-rates.test.js +0 -342
  141. package/dist/__tests__/funding.test.d.ts +0 -1
  142. package/dist/__tests__/funding.test.js +0 -173
  143. package/dist/__tests__/gap-logic.test.d.ts +0 -1
  144. package/dist/__tests__/gap-logic.test.js +0 -43
  145. package/dist/__tests__/hip3-dex.test.d.ts +0 -1
  146. package/dist/__tests__/hip3-dex.test.js +0 -234
  147. package/dist/__tests__/integration/agent-features.integration.test.d.ts +0 -1
  148. package/dist/__tests__/integration/agent-features.integration.test.js +0 -553
  149. package/dist/__tests__/integration/atomic-commands.integration.test.d.ts +0 -13
  150. package/dist/__tests__/integration/atomic-commands.integration.test.js +0 -246
  151. package/dist/__tests__/integration/bridge-simulation.integration.test.d.ts +0 -1
  152. package/dist/__tests__/integration/bridge-simulation.integration.test.js +0 -453
  153. package/dist/__tests__/integration/bridge-strict.integration.test.d.ts +0 -1
  154. package/dist/__tests__/integration/bridge-strict.integration.test.js +0 -812
  155. package/dist/__tests__/integration/bridge.integration.test.d.ts +0 -1
  156. package/dist/__tests__/integration/bridge.integration.test.js +0 -309
  157. package/dist/__tests__/integration/cli-e2e.integration.test.d.ts +0 -1
  158. package/dist/__tests__/integration/cli-e2e.integration.test.js +0 -202
  159. package/dist/__tests__/integration/dex-arb.integration.test.d.ts +0 -1
  160. package/dist/__tests__/integration/dex-arb.integration.test.js +0 -116
  161. package/dist/__tests__/integration/envelope-consistency.integration.test.d.ts +0 -13
  162. package/dist/__tests__/integration/envelope-consistency.integration.test.js +0 -205
  163. package/dist/__tests__/integration/hip3-dex.integration.test.d.ts +0 -1
  164. package/dist/__tests__/integration/hip3-dex.integration.test.js +0 -147
  165. package/dist/__tests__/integration/hyperliquid.integration.test.d.ts +0 -1
  166. package/dist/__tests__/integration/hyperliquid.integration.test.js +0 -79
  167. package/dist/__tests__/integration/lighter.integration.test.d.ts +0 -1
  168. package/dist/__tests__/integration/lighter.integration.test.js +0 -53
  169. package/dist/__tests__/integration/new-commands-e2e.integration.test.d.ts +0 -9
  170. package/dist/__tests__/integration/new-commands-e2e.integration.test.js +0 -236
  171. package/dist/__tests__/integration/order-verification.integration.test.d.ts +0 -1
  172. package/dist/__tests__/integration/order-verification.integration.test.js +0 -321
  173. package/dist/__tests__/integration/pacifica.integration.test.d.ts +0 -1
  174. package/dist/__tests__/integration/pacifica.integration.test.js +0 -75
  175. package/dist/__tests__/integration/response-shapes.integration.test.d.ts +0 -1
  176. package/dist/__tests__/integration/response-shapes.integration.test.js +0 -278
  177. package/dist/__tests__/liquidity.test.d.ts +0 -1
  178. package/dist/__tests__/liquidity.test.js +0 -225
  179. package/dist/__tests__/plan-executor.test.d.ts +0 -1
  180. package/dist/__tests__/plan-executor.test.js +0 -314
  181. package/dist/__tests__/position-history.test.d.ts +0 -1
  182. package/dist/__tests__/position-history.test.js +0 -367
  183. package/dist/__tests__/retry.test.d.ts +0 -1
  184. package/dist/__tests__/retry.test.js +0 -310
  185. package/dist/__tests__/risk-assessment.test.d.ts +0 -1
  186. package/dist/__tests__/risk-assessment.test.js +0 -288
  187. package/dist/__tests__/security-adversarial.test.d.ts +0 -1
  188. package/dist/__tests__/security-adversarial.test.js +0 -574
  189. package/dist/__tests__/strategies.test.d.ts +0 -1
  190. package/dist/__tests__/strategies.test.js +0 -539
  191. package/dist/__tests__/trade-execution.test.d.ts +0 -1
  192. package/dist/__tests__/trade-execution.test.js +0 -129
  193. package/dist/__tests__/trade-validator.test.d.ts +0 -1
  194. package/dist/__tests__/trade-validator.test.js +0 -655
  195. package/dist/__tests__/utils.test.d.ts +0 -1
  196. package/dist/__tests__/utils.test.js +0 -76
  197. package/dist/arb/reconcile.d.ts +0 -28
  198. package/dist/arb/reconcile.js +0 -162
  199. package/dist/commands/alert.d.ts +0 -2
  200. package/dist/commands/alert.js +0 -421
  201. package/dist/commands/analytics.d.ts +0 -3
  202. package/dist/commands/analytics.js +0 -311
  203. package/dist/commands/arb-manage.d.ts +0 -5
  204. package/dist/commands/arb-manage.js +0 -5
  205. package/dist/commands/dashboard.d.ts +0 -3
  206. package/dist/commands/dashboard.js +0 -176
  207. package/dist/commands/deposit.d.ts +0 -4
  208. package/dist/commands/deposit.js +0 -573
  209. package/dist/commands/dex.d.ts +0 -3
  210. package/dist/commands/dex.js +0 -120
  211. package/dist/commands/env.d.ts +0 -2
  212. package/dist/commands/env.js +0 -136
  213. package/dist/commands/funding.d.ts +0 -3
  214. package/dist/commands/funding.js +0 -554
  215. package/dist/commands/gap.d.ts +0 -2
  216. package/dist/commands/gap.js +0 -305
  217. package/dist/commands/health.d.ts +0 -2
  218. package/dist/commands/health.js +0 -67
  219. package/dist/commands/multileg.d.ts +0 -16
  220. package/dist/commands/multileg.js +0 -174
  221. package/dist/commands/ows.d.ts +0 -2
  222. package/dist/commands/ows.js +0 -887
  223. package/dist/commands/pnl.d.ts +0 -12
  224. package/dist/commands/pnl.js +0 -243
  225. package/dist/commands/run.d.ts +0 -3
  226. package/dist/commands/run.js +0 -202
  227. package/dist/commands/stream.d.ts +0 -5
  228. package/dist/commands/stream.js +0 -200
  229. package/dist/commands/withdraw.d.ts +0 -3
  230. package/dist/commands/withdraw.js +0 -187
  231. package/dist/exchanges/edgex.d.ts +0 -62
  232. package/dist/exchanges/edgex.js +0 -552
  233. package/dist/exchanges/nado.d.ts +0 -52
  234. package/dist/exchanges/nado.js +0 -223
  235. package/dist/funding/index.d.ts +0 -3
  236. package/dist/funding/index.js +0 -3
  237. package/dist/retry.d.ts +0 -74
  238. package/dist/retry.js +0 -129
  239. package/dist/ws/market-feed.d.ts +0 -74
  240. package/dist/ws/market-feed.js +0 -227
@@ -3,8 +3,8 @@ import { printJson, jsonOk } from "../utils.js";
3
3
  import chalk from "chalk";
4
4
  import { existsSync, readFileSync } from "node:fs";
5
5
  import { execSync } from "node:child_process";
6
- export function registerJobsCommands(program, isJson) {
7
- const jobs = program.command("jobs").description("Background job management (tmux)");
6
+ export function registerBackgroundCommands(program, isJson) {
7
+ const jobs = program.command("background").description("Background process supervisor (tmux sessions for strategies, alerts, etc.)");
8
8
  jobs
9
9
  .command("list", { isDefault: true })
10
10
  .description("List all jobs")
@@ -1,3 +1,3 @@
1
1
  import { Command } from "commander";
2
2
  import type { ExchangeAdapter } from "../exchanges/index.js";
3
- export declare function registerManageCommands(program: Command, getAdapter: () => Promise<ExchangeAdapter>, isJson: () => boolean, getPacificaAdapter: () => unknown): void;
3
+ export declare function registerWalletManageCommands(parent: Command, getAdapter: () => Promise<ExchangeAdapter>, isJson: () => boolean, getPacificaAdapter: () => unknown): void;
@@ -1,9 +1,8 @@
1
1
  import { printJson, jsonOk, jsonError } from "../utils.js";
2
- import { setEnvVar } from "./init.js";
3
2
  import chalk from "chalk";
4
- import { hasPacificaSdk, hasLighterAccount } from "../exchanges/capabilities.js";
5
- export function registerManageCommands(program, getAdapter, isJson, getPacificaAdapter) {
6
- const manage = program.command("manage").description("Exchange account settings (margin, subaccount, API keys, builder)");
3
+ import { hasPacificaSdk } from "../exchanges/capabilities.js";
4
+ export function registerWalletManageCommands(parent, getAdapter, isJson, getPacificaAdapter) {
5
+ const manage = parent.command("manage").description("Exchange account settings (margin, subaccount, API keys, builder) — Pacifica + Lighter");
7
6
  // Ensure adapter is initialized before accessing PacificaAdapter
8
7
  async function pac() {
9
8
  const adapter = await getAdapter();
@@ -71,48 +70,10 @@ export function registerManageCommands(program, getAdapter, isJson, getPacificaA
71
70
  return printJson(jsonOk(result));
72
71
  console.log(chalk.green(`\n Transferred $${amount}.\n`));
73
72
  });
74
- // Agent wallets
75
- const agent = manage.command("agent").description("Agent wallet management");
76
- agent
77
- .command("bind <wallet>")
78
- .description("Bind an agent wallet")
79
- .action(async (wallet) => {
80
- const a = await pac();
81
- const result = await a.sdk.bindAgentWallet(wallet, a.publicKey, a.signer);
82
- if (isJson())
83
- return printJson(jsonOk(result));
84
- console.log(chalk.green(`\n Agent wallet ${wallet} bound.\n`));
85
- });
86
- agent
87
- .command("list")
88
- .description("List agent wallets")
89
- .action(async () => {
90
- const a = await pac();
91
- const result = await a.sdk.listAgentWallets(a.publicKey, a.signer);
92
- if (isJson())
93
- return printJson(jsonOk(result));
94
- console.log(JSON.stringify(result, null, 2));
95
- });
96
- agent
97
- .command("revoke <wallet>")
98
- .description("Revoke an agent wallet")
99
- .action(async (wallet) => {
100
- const a = await pac();
101
- const result = await a.sdk.revokeAgentWallet(wallet, a.publicKey, a.signer);
102
- if (isJson())
103
- return printJson(jsonOk(result));
104
- console.log(chalk.green(`\n Agent wallet ${wallet} revoked.\n`));
105
- });
106
- agent
107
- .command("revoke-all")
108
- .description("Revoke all agent wallets")
109
- .action(async () => {
110
- const a = await pac();
111
- const result = await a.sdk.revokeAllAgentWallets(a.publicKey, a.signer);
112
- if (isJson())
113
- return printJson(jsonOk(result));
114
- console.log(chalk.green("\n All agent wallets revoked.\n"));
115
- });
73
+ // Legacy `manage agent` removed in v0.12 (Phase 2c) — superseded by the
74
+ // unified `wallet agent {approve,revoke,rotate,list,verify} pacifica` flow.
75
+ // The unified command tree provides 3-tier signer routing, expiry tracking,
76
+ // and OWS at-rest encryption. See `wallet agent approve pacifica --help`.
116
77
  // Lake (liquidity vaults)
117
78
  const lake = manage.command("lake").description("Lake (liquidity vault) management");
118
79
  lake
@@ -270,42 +231,9 @@ export function registerManageCommands(program, getAdapter, isJson, getPacificaA
270
231
  return printJson(jsonOk(result));
271
232
  console.log(chalk.green(`\n API key revoked.\n`));
272
233
  });
273
- // === Lighter API Key Setup ===
274
- manage
275
- .command("setup-api-key")
276
- .description("Generate & register a Lighter API key (required for trading)")
277
- .option("--key-index <n>", "API key index (4-254, default: 4)", "4")
278
- .action(async (opts) => {
279
- const adapter = await getAdapter();
280
- if (!hasLighterAccount(adapter)) {
281
- throw new Error("This command requires --exchange lighter");
282
- }
283
- const keyIndex = parseInt(opts.keyIndex);
284
- if (!isJson()) {
285
- console.log(chalk.cyan.bold("\n Lighter API Key Setup\n"));
286
- console.log(chalk.gray(` Account: ${adapter.address} (index: ${adapter.accountIndex})`));
287
- console.log(chalk.gray(` API Key Index: ${keyIndex}\n`));
288
- console.log(chalk.gray(" Generating key pair + registering on-chain...\n"));
289
- }
290
- const { privateKey, publicKey } = await adapter.setupApiKey(keyIndex);
291
- // Auto-save to .env
292
- setEnvVar("LIGHTER_API_KEY", privateKey);
293
- setEnvVar("LIGHTER_ACCOUNT_INDEX", String(adapter.accountIndex));
294
- setEnvVar("LIGHTER_API_KEY_INDEX", String(keyIndex));
295
- if (isJson()) {
296
- return printJson(jsonOk({
297
- privateKey,
298
- publicKey,
299
- address: adapter.address,
300
- accountIndex: adapter.accountIndex,
301
- apiKeyIndex: keyIndex,
302
- savedToEnv: true,
303
- }));
304
- }
305
- console.log(chalk.green(" API Key Registered & saved to ~/.perp/.env\n"));
306
- console.log(` ${chalk.bold("Private Key:")} ${privateKey}`);
307
- console.log(` ${chalk.bold("Public Key:")} ${publicKey}`);
308
- console.log(` ${chalk.bold("Account:")} ${adapter.accountIndex}`);
309
- console.log();
310
- });
234
+ // Legacy `manage setup-api-key` removed in v0.12 (Phase 2d) — superseded by
235
+ // the unified `wallet agent approve lighter` flow. The agent flow provides
236
+ // 3-tier signer routing, expiry tracking, free-slot picking, and AgentMeta
237
+ // persistence. The auto-setup path in LighterAdapter.init() remains as the
238
+ // env-key fallback for users who haven't run the unified command yet.
311
239
  }
@@ -1,3 +1,3 @@
1
1
  import { Command } from "commander";
2
2
  import type { ExchangeAdapter } from "../exchanges/index.js";
3
- export declare function registerPlanCommands(program: Command, getAdapter: () => Promise<ExchangeAdapter>, isJson: () => boolean): void;
3
+ export declare function registerStrategyPlanCommands(parent: Command, getAdapter: () => Promise<ExchangeAdapter>, isJson: () => boolean): void;
@@ -2,8 +2,8 @@ import { readFileSync } from "fs";
2
2
  import { printJson, jsonOk, jsonError, withJsonErrors } from "../utils.js";
3
3
  import { validatePlan, executePlan } from "../plan-executor.js";
4
4
  import chalk from "chalk";
5
- export function registerPlanCommands(program, getAdapter, isJson) {
6
- const plan = program.command("plan").description("Composite execution plans (multi-step atomic operations)");
5
+ export function registerStrategyPlanCommands(parent, getAdapter, isJson) {
6
+ const plan = parent.command("plan").description("Composite execution plans (multi-step atomic operations)");
7
7
  // ── plan validate ──
8
8
  plan
9
9
  .command("validate <file>")
@@ -1,3 +1,19 @@
1
- import { Command } from "commander";
2
- import type { ExchangeAdapter } from "../exchanges/interface.js";
3
- export declare function registerPortfolioCommands(program: Command, getAdapterForExchange: (exchange: string) => Promise<ExchangeAdapter>, isJson: () => boolean): void;
1
+ /**
2
+ * Unified `perp portfolio` command — replaces:
3
+ * - `perp account balance` (single-exchange detail) → `perp portfolio -e <ex>`
4
+ * - prior `perp portfolio` → `perp portfolio` (rebuilt)
5
+ * - `perp status` → `perp portfolio --arb`
6
+ * - `perp status --health` → `perp portfolio --health`
7
+ * - `perp dashboard` → `perp portfolio --serve`
8
+ *
9
+ * Modes (mutually exclusive, picked by flag):
10
+ * snapshot (default) | health | watch | serve
11
+ *
12
+ * I/O contract:
13
+ * - Text mode → human-friendly tables + side-by-side panels (status-like)
14
+ * - JSON mode → canonical envelope (see spec); arb / health / serve keys conditional
15
+ * - --stdin → read JSON args from stdin, overrides CLI flags
16
+ */
17
+ import type { Command } from "commander";
18
+ import type { ExchangeAdapter } from "../exchanges/index.js";
19
+ export declare function registerPortfolioCommand(program: Command, getAdapterForExchange: (exchange: string) => Promise<ExchangeAdapter>, isJson: () => boolean, version: string, getHLAdapterForDex?: (dex: string) => Promise<ExchangeAdapter>): void;