@t2000/cli 0.17.22 → 0.17.24

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 (138) hide show
  1. package/README.md +1 -1
  2. package/dist/commands/address.d.ts +3 -0
  3. package/dist/commands/address.d.ts.map +1 -0
  4. package/dist/commands/address.js +26 -0
  5. package/dist/commands/address.js.map +1 -0
  6. package/dist/commands/balance.d.ts +3 -0
  7. package/dist/commands/balance.d.ts.map +1 -0
  8. package/dist/commands/balance.js +134 -0
  9. package/dist/commands/balance.js.map +1 -0
  10. package/dist/commands/borrow.d.ts +3 -0
  11. package/dist/commands/borrow.d.ts.map +1 -0
  12. package/dist/commands/borrow.js +40 -0
  13. package/dist/commands/borrow.js.map +1 -0
  14. package/dist/commands/claimRewards.d.ts +3 -0
  15. package/dist/commands/claimRewards.d.ts.map +1 -0
  16. package/dist/commands/claimRewards.js +49 -0
  17. package/dist/commands/claimRewards.js.map +1 -0
  18. package/dist/commands/config.d.ts +3 -0
  19. package/dist/commands/config.d.ts.map +1 -0
  20. package/dist/commands/config.js +139 -0
  21. package/dist/commands/config.js.map +1 -0
  22. package/dist/commands/contacts.d.ts +3 -0
  23. package/dist/commands/contacts.d.ts.map +1 -0
  24. package/dist/commands/contacts.js +83 -0
  25. package/dist/commands/contacts.js.map +1 -0
  26. package/dist/commands/deposit.d.ts +3 -0
  27. package/dist/commands/deposit.d.ts.map +1 -0
  28. package/dist/commands/deposit.js +27 -0
  29. package/dist/commands/deposit.js.map +1 -0
  30. package/dist/commands/earn.d.ts +3 -0
  31. package/dist/commands/earn.d.ts.map +1 -0
  32. package/dist/commands/earn.js +186 -0
  33. package/dist/commands/earn.js.map +1 -0
  34. package/dist/commands/earnings.d.ts +3 -0
  35. package/dist/commands/earnings.d.ts.map +1 -0
  36. package/dist/commands/earnings.js +38 -0
  37. package/dist/commands/earnings.js.map +1 -0
  38. package/dist/commands/exchange.d.ts +3 -0
  39. package/dist/commands/exchange.d.ts.map +1 -0
  40. package/dist/commands/exchange.js +45 -0
  41. package/dist/commands/exchange.js.map +1 -0
  42. package/dist/commands/exportKey.d.ts +3 -0
  43. package/dist/commands/exportKey.d.ts.map +1 -0
  44. package/dist/commands/exportKey.js +81 -0
  45. package/dist/commands/exportKey.js.map +1 -0
  46. package/dist/commands/fundStatus.d.ts +3 -0
  47. package/dist/commands/fundStatus.d.ts.map +1 -0
  48. package/dist/commands/fundStatus.js +50 -0
  49. package/dist/commands/fundStatus.js.map +1 -0
  50. package/dist/commands/health.d.ts +3 -0
  51. package/dist/commands/health.d.ts.map +1 -0
  52. package/dist/commands/health.js +44 -0
  53. package/dist/commands/health.js.map +1 -0
  54. package/dist/commands/history.d.ts +3 -0
  55. package/dist/commands/history.d.ts.map +1 -0
  56. package/dist/commands/history.js +37 -0
  57. package/dist/commands/history.js.map +1 -0
  58. package/dist/commands/importKey.d.ts +3 -0
  59. package/dist/commands/importKey.d.ts.map +1 -0
  60. package/dist/commands/importKey.js +39 -0
  61. package/dist/commands/importKey.js.map +1 -0
  62. package/dist/commands/init.d.ts +3 -0
  63. package/dist/commands/init.d.ts.map +1 -0
  64. package/dist/commands/init.js +56 -0
  65. package/dist/commands/init.js.map +1 -0
  66. package/dist/commands/invest.d.ts +3 -0
  67. package/dist/commands/invest.d.ts.map +1 -0
  68. package/dist/commands/invest.js +635 -0
  69. package/dist/commands/invest.js.map +1 -0
  70. package/dist/commands/lock.d.ts +3 -0
  71. package/dist/commands/lock.d.ts.map +1 -0
  72. package/dist/commands/lock.js +66 -0
  73. package/dist/commands/lock.js.map +1 -0
  74. package/dist/commands/mcp.d.ts +3 -0
  75. package/dist/commands/mcp.d.ts.map +1 -0
  76. package/dist/commands/mcp.js +141 -0
  77. package/dist/commands/mcp.js.map +1 -0
  78. package/dist/commands/pay.d.ts +3 -0
  79. package/dist/commands/pay.d.ts.map +1 -0
  80. package/dist/commands/pay.js +96 -0
  81. package/dist/commands/pay.js.map +1 -0
  82. package/dist/commands/portfolio.d.ts +3 -0
  83. package/dist/commands/portfolio.d.ts.map +1 -0
  84. package/dist/commands/portfolio.js +104 -0
  85. package/dist/commands/portfolio.js.map +1 -0
  86. package/dist/commands/positions.d.ts +3 -0
  87. package/dist/commands/positions.d.ts.map +1 -0
  88. package/dist/commands/positions.js +73 -0
  89. package/dist/commands/positions.js.map +1 -0
  90. package/dist/commands/rates.d.ts +3 -0
  91. package/dist/commands/rates.d.ts.map +1 -0
  92. package/dist/commands/rates.js +64 -0
  93. package/dist/commands/rates.js.map +1 -0
  94. package/dist/commands/rebalance.d.ts +3 -0
  95. package/dist/commands/rebalance.d.ts.map +1 -0
  96. package/dist/commands/rebalance.js +109 -0
  97. package/dist/commands/rebalance.js.map +1 -0
  98. package/dist/commands/repay.d.ts +3 -0
  99. package/dist/commands/repay.d.ts.map +1 -0
  100. package/dist/commands/repay.js +35 -0
  101. package/dist/commands/repay.js.map +1 -0
  102. package/dist/commands/save.d.ts +3 -0
  103. package/dist/commands/save.d.ts.map +1 -0
  104. package/dist/commands/save.js +57 -0
  105. package/dist/commands/save.js.map +1 -0
  106. package/dist/commands/send.d.ts +3 -0
  107. package/dist/commands/send.d.ts.map +1 -0
  108. package/dist/commands/send.js +52 -0
  109. package/dist/commands/send.js.map +1 -0
  110. package/dist/commands/sentinel.d.ts +3 -0
  111. package/dist/commands/sentinel.d.ts.map +1 -0
  112. package/dist/commands/sentinel.js +142 -0
  113. package/dist/commands/sentinel.js.map +1 -0
  114. package/dist/commands/serve.d.ts +3 -0
  115. package/dist/commands/serve.d.ts.map +1 -0
  116. package/dist/commands/serve.js +341 -0
  117. package/dist/commands/serve.js.map +1 -0
  118. package/dist/commands/withdraw.d.ts +3 -0
  119. package/dist/commands/withdraw.d.ts.map +1 -0
  120. package/dist/commands/withdraw.js +34 -0
  121. package/dist/commands/withdraw.js.map +1 -0
  122. package/dist/index.d.ts +2 -0
  123. package/dist/index.d.ts.map +1 -0
  124. package/dist/index.js +2 -2708
  125. package/dist/index.js.map +1 -1
  126. package/dist/output.d.ts +16 -0
  127. package/dist/output.d.ts.map +1 -0
  128. package/dist/output.js +85 -0
  129. package/dist/output.js.map +1 -0
  130. package/dist/program.d.ts +3 -0
  131. package/dist/program.d.ts.map +1 -0
  132. package/dist/program.js +80 -0
  133. package/dist/program.js.map +1 -0
  134. package/dist/prompts.d.ts +16 -0
  135. package/dist/prompts.d.ts.map +1 -0
  136. package/dist/prompts.js +69 -0
  137. package/dist/prompts.js.map +1 -0
  138. package/package.json +4 -4
package/README.md CHANGED
@@ -273,7 +273,7 @@ t2000 mcp uninstall
273
273
  t2000 mcp
274
274
  ```
275
275
 
276
- 22 tools, 12 prompts, safeguard enforced. See [MCP setup guide](../../docs/mcp-setup.md) for details.
276
+ 23 tools, 15 prompts, safeguard enforced. See [MCP setup guide](../../docs/mcp-setup.md) for details.
277
277
 
278
278
  ### HTTP API Server
279
279
 
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerAddress(program: Command): void;
3
+ //# sourceMappingURL=address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../src/commands/address.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,QAsB/C"}
@@ -0,0 +1,26 @@
1
+ import { T2000 } from '@t2000/sdk';
2
+ import { resolvePin } from '../prompts.js';
3
+ import { printKeyValue, printBlank, printJson, isJsonMode, handleError } from '../output.js';
4
+ export function registerAddress(program) {
5
+ program
6
+ .command('address')
7
+ .description('Show wallet address')
8
+ .option('--key <path>', 'Key file path')
9
+ .action(async (opts) => {
10
+ try {
11
+ const pin = await resolvePin();
12
+ const agent = await T2000.create({ pin, keyPath: opts.key });
13
+ if (isJsonMode()) {
14
+ printJson({ address: agent.address() });
15
+ return;
16
+ }
17
+ printBlank();
18
+ printKeyValue('Address', agent.address());
19
+ printBlank();
20
+ }
21
+ catch (error) {
22
+ handleError(error);
23
+ }
24
+ });
25
+ }
26
+ //# sourceMappingURL=address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.js","sourceRoot":"","sources":["../../src/commands/address.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE7F,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,qBAAqB,CAAC;SAClC,MAAM,CAAC,cAAc,EAAE,eAAe,CAAC;SACvC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAE7D,IAAI,UAAU,EAAE,EAAE,CAAC;gBACjB,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACxC,OAAO;YACT,CAAC;YAED,UAAU,EAAE,CAAC;YACb,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1C,UAAU,EAAE,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerBalance(program: Command): void;
3
+ //# sourceMappingURL=balance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../src/commands/balance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BzC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,QAsH/C"}
@@ -0,0 +1,134 @@
1
+ import pc from 'picocolors';
2
+ import { T2000, formatUsd } from '@t2000/sdk';
3
+ import { resolvePin } from '../prompts.js';
4
+ import { printKeyValue, printBlank, printJson, isJsonMode, handleError, printHeader, printSeparator, printLine } from '../output.js';
5
+ async function fetchLimits(agent) {
6
+ const [maxWithdraw, maxBorrow, hf] = await Promise.all([
7
+ agent.maxWithdraw(),
8
+ agent.maxBorrow(),
9
+ agent.healthFactor(),
10
+ ]);
11
+ return {
12
+ maxWithdraw: maxWithdraw.maxAmount.toFixed(2),
13
+ maxBorrow: maxBorrow.maxAmount.toFixed(2),
14
+ healthFactor: hf.borrowed >= 0.01 ? hf.healthFactor : null,
15
+ };
16
+ }
17
+ export function registerBalance(program) {
18
+ program
19
+ .command('balance')
20
+ .description('Show wallet balance')
21
+ .option('--key <path>', 'Key file path')
22
+ .option('--show-limits', 'Include maxWithdraw, maxBorrow, and health factor')
23
+ .action(async (opts) => {
24
+ try {
25
+ const pin = await resolvePin();
26
+ const agent = await T2000.create({ pin, keyPath: opts.key });
27
+ const bal = await agent.balance();
28
+ const limits = opts.showLimits ? await fetchLimits(agent) : undefined;
29
+ if (isJsonMode()) {
30
+ const output = limits
31
+ ? { ...bal, limits }
32
+ : bal;
33
+ printJson(output);
34
+ return;
35
+ }
36
+ printBlank();
37
+ const stables = bal.stables ?? {};
38
+ const stableEntries = Object.entries(stables).filter(([, v]) => v >= 0.01);
39
+ if (stableEntries.length <= 1) {
40
+ printKeyValue('Available', `${formatUsd(bal.available)} ${pc.dim('(checking — spendable)')}`);
41
+ }
42
+ else {
43
+ printKeyValue('Available', `${formatUsd(bal.available)} ${pc.dim('(total stablecoins)')}`);
44
+ for (const [symbol, amount] of stableEntries) {
45
+ printLine(` ${pc.dim(symbol)} ${formatUsd(amount)}`);
46
+ }
47
+ }
48
+ if (bal.savings > 0.01) {
49
+ const positions = await agent.positions();
50
+ const saves = positions.positions.filter(p => p.type === 'save');
51
+ const borrows = positions.positions.filter(p => p.type === 'borrow');
52
+ const weightedApy = saves.length > 0
53
+ ? saves.reduce((sum, p) => sum + p.amount * p.apy, 0) / saves.reduce((sum, p) => sum + p.amount, 0)
54
+ : 0;
55
+ const dailyEarning = bal.savings * (weightedApy / 100) / 365;
56
+ printKeyValue('Savings', `${formatUsd(bal.savings)} ${pc.dim(`(earning ${weightedApy.toFixed(2)}% APY)`)}`);
57
+ if (bal.debt > 0.01) {
58
+ const borrowApy = borrows.length > 0
59
+ ? borrows.reduce((sum, p) => sum + p.amount * p.apy, 0) / borrows.reduce((sum, p) => sum + p.amount, 0)
60
+ : 0;
61
+ printKeyValue('Credit', `${pc.red(`-${formatUsd(bal.debt)}`)} ${pc.dim(`(${borrowApy.toFixed(2)}% APY)`)}`);
62
+ }
63
+ if (bal.investment > 0.01) {
64
+ const pnlColor = bal.investmentPnL >= 0 ? pc.green : pc.red;
65
+ const pnlSign = bal.investmentPnL >= 0 ? '+' : '';
66
+ const pnlPct = bal.investment > 0 ? ((bal.investmentPnL / (bal.investment - bal.investmentPnL)) * 100) : 0;
67
+ let earningInfo = '';
68
+ try {
69
+ const portfolio = await agent.getPortfolio();
70
+ const earningPositions = portfolio.positions.filter(p => p.earning && p.earningApy);
71
+ if (earningPositions.length > 0) {
72
+ const avgApy = earningPositions.reduce((s, p) => s + (p.earningApy ?? 0) * p.currentValue, 0)
73
+ / earningPositions.reduce((s, p) => s + p.currentValue, 0);
74
+ earningInfo = `, earning ${avgApy.toFixed(1)}% APY`;
75
+ }
76
+ }
77
+ catch { /* skip */ }
78
+ printKeyValue('Investment', `${formatUsd(bal.investment)} ${pnlColor(`(${pnlSign}${pnlPct.toFixed(1)}%${earningInfo})`)}`);
79
+ }
80
+ else {
81
+ printKeyValue('Investment', pc.dim('—'));
82
+ }
83
+ printSeparator();
84
+ printKeyValue('Total', `${formatUsd(bal.total)}`);
85
+ if (dailyEarning >= 0.005) {
86
+ printLine(` ${pc.dim(`Earning ~${formatUsd(dailyEarning)}/day`)}`);
87
+ }
88
+ }
89
+ else {
90
+ if (bal.debt > 0.01) {
91
+ printKeyValue('Credit', `${pc.red(`-${formatUsd(bal.debt)}`)}`);
92
+ }
93
+ printKeyValue('Savings', `${formatUsd(bal.savings)}`);
94
+ if (bal.investment > 0.01) {
95
+ const pnlColor = bal.investmentPnL >= 0 ? pc.green : pc.red;
96
+ const pnlSign = bal.investmentPnL >= 0 ? '+' : '';
97
+ const pnlPct = bal.investment > 0 ? ((bal.investmentPnL / (bal.investment - bal.investmentPnL)) * 100) : 0;
98
+ let earningInfo = '';
99
+ try {
100
+ const portfolio = await agent.getPortfolio();
101
+ const earningPositions = portfolio.positions.filter(p => p.earning && p.earningApy);
102
+ if (earningPositions.length > 0) {
103
+ const avgApy = earningPositions.reduce((s, p) => s + (p.earningApy ?? 0) * p.currentValue, 0)
104
+ / earningPositions.reduce((s, p) => s + p.currentValue, 0);
105
+ earningInfo = `, earning ${avgApy.toFixed(1)}% APY`;
106
+ }
107
+ }
108
+ catch { /* skip */ }
109
+ printKeyValue('Investment', `${formatUsd(bal.investment)} ${pnlColor(`(${pnlSign}${pnlPct.toFixed(1)}%${earningInfo})`)}`);
110
+ }
111
+ else {
112
+ printKeyValue('Investment', pc.dim('—'));
113
+ }
114
+ printSeparator();
115
+ printKeyValue('Total', `${formatUsd(bal.total)}`);
116
+ }
117
+ if (limits) {
118
+ printBlank();
119
+ printHeader('Limits');
120
+ printKeyValue('Max withdraw', `${formatUsd(Number(limits.maxWithdraw))} USDC`, 4);
121
+ printKeyValue('Max borrow', `${formatUsd(Number(limits.maxBorrow))} USDC`, 4);
122
+ const hfDisplay = limits.healthFactor !== null
123
+ ? limits.healthFactor.toFixed(2)
124
+ : `${pc.green('∞')} ${pc.dim('(no active loan)')}`;
125
+ printKeyValue('Health factor', hfDisplay, 4);
126
+ }
127
+ printBlank();
128
+ }
129
+ catch (error) {
130
+ handleError(error);
131
+ }
132
+ });
133
+ }
134
+ //# sourceMappingURL=balance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance.js","sourceRoot":"","sources":["../../src/commands/balance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerBorrow(program: Command): void;
3
+ //# sourceMappingURL=borrow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"borrow.d.ts","sourceRoot":"","sources":["../../src/commands/borrow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,QAuC9C"}
@@ -0,0 +1,40 @@
1
+ import { T2000, formatUsd } from '@t2000/sdk';
2
+ import { resolvePin } from '../prompts.js';
3
+ import { printSuccess, printKeyValue, printBlank, printJson, isJsonMode, handleError, printWarning, explorerUrl } from '../output.js';
4
+ export function registerBorrow(program) {
5
+ program
6
+ .command('borrow')
7
+ .description('Borrow USDC against savings collateral')
8
+ .argument('<amount>', 'Amount to borrow')
9
+ .option('--key <path>', 'Key file path')
10
+ .option('--protocol <name>', 'Protocol to use (e.g. navi)')
11
+ .action(async (amountStr, opts) => {
12
+ try {
13
+ const amount = parseFloat(amountStr);
14
+ if (isNaN(amount) || amount <= 0) {
15
+ throw new Error('Amount must be a positive number');
16
+ }
17
+ const pin = await resolvePin();
18
+ const agent = await T2000.create({ pin, keyPath: opts.key });
19
+ const maxResult = await agent.maxBorrow();
20
+ if (amount > maxResult.maxAmount) {
21
+ printWarning(`Max safe borrow: ${formatUsd(maxResult.maxAmount)} (HF ${maxResult.currentHF.toFixed(2)} → min 1.5)`);
22
+ return;
23
+ }
24
+ const result = await agent.borrow({ amount, protocol: opts.protocol });
25
+ if (isJsonMode()) {
26
+ printJson(result);
27
+ return;
28
+ }
29
+ printBlank();
30
+ printSuccess(`Borrowed ${formatUsd(amount)} USDC`);
31
+ printKeyValue('Health Factor', result.healthFactor.toFixed(2));
32
+ printKeyValue('Tx', explorerUrl(result.tx));
33
+ printBlank();
34
+ }
35
+ catch (error) {
36
+ handleError(error);
37
+ }
38
+ });
39
+ }
40
+ //# sourceMappingURL=borrow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"borrow.js","sourceRoot":"","sources":["../../src/commands/borrow.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEtI,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,wCAAwC,CAAC;SACrD,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;SACxC,MAAM,CAAC,cAAc,EAAE,eAAe,CAAC;SACvC,MAAM,CAAC,mBAAmB,EAAE,6BAA6B,CAAC;SAC1D,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACtD,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAE7D,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;YAC1C,IAAI,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;gBACjC,YAAY,CAAC,oBAAoB,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;gBACpH,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEvE,IAAI,UAAU,EAAE,EAAE,CAAC;gBACjB,SAAS,CAAC,MAAM,CAAC,CAAC;gBAClB,OAAO;YACT,CAAC;YAED,UAAU,EAAE,CAAC;YACb,YAAY,CAAC,YAAY,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnD,aAAa,CAAC,eAAe,EAAE,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/D,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5C,UAAU,EAAE,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerClaimRewards(program: Command): void;
3
+ //# sourceMappingURL=claimRewards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claimRewards.d.ts","sourceRoot":"","sources":["../../src/commands/claimRewards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAgDpD"}
@@ -0,0 +1,49 @@
1
+ import pc from 'picocolors';
2
+ import { T2000, formatUsd } from '@t2000/sdk';
3
+ import { resolvePin } from '../prompts.js';
4
+ import { printKeyValue, printBlank, printJson, isJsonMode, handleError, printSeparator, printLine } from '../output.js';
5
+ export function registerClaimRewards(program) {
6
+ program
7
+ .command('claim-rewards')
8
+ .description('Claim pending protocol rewards')
9
+ .option('--key <path>', 'Key file path')
10
+ .action(async (opts) => {
11
+ try {
12
+ const pin = await resolvePin();
13
+ const agent = await T2000.create({ pin, keyPath: opts.key });
14
+ const result = await agent.claimRewards();
15
+ if (isJsonMode()) {
16
+ printJson(result);
17
+ return;
18
+ }
19
+ printBlank();
20
+ if (result.rewards.length === 0) {
21
+ printLine(` ${pc.dim('No rewards to claim')}`);
22
+ printBlank();
23
+ return;
24
+ }
25
+ const protocols = [...new Set(result.rewards.map(r => r.protocol))];
26
+ printLine(` ${pc.green('✓')} Claimed and converted rewards to USDC`);
27
+ printSeparator();
28
+ const received = result.usdcReceived;
29
+ if (received >= 0.01) {
30
+ printKeyValue('Received', `${pc.green(formatUsd(received))} USDC`);
31
+ }
32
+ else if (received > 0) {
33
+ printKeyValue('Received', `${pc.green('< $0.01')} USDC`);
34
+ }
35
+ else {
36
+ printKeyValue('Received', `${pc.dim('< $0.01 USDC (rewards are still accruing)')}`);
37
+ }
38
+ printKeyValue('Source', protocols.join(', '));
39
+ if (result.tx) {
40
+ printKeyValue('Tx', `https://suiscan.xyz/mainnet/tx/${result.tx}`);
41
+ }
42
+ printBlank();
43
+ }
44
+ catch (error) {
45
+ handleError(error);
46
+ }
47
+ });
48
+ }
49
+ //# sourceMappingURL=claimRewards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claimRewards.js","sourceRoot":"","sources":["../../src/commands/claimRewards.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAExH,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,cAAc,EAAE,eAAe,CAAC;SACvC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAE7D,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE,CAAC;YAE1C,IAAI,UAAU,EAAE,EAAE,CAAC;gBACjB,SAAS,CAAC,MAAM,CAAC,CAAC;gBAClB,OAAO;YACT,CAAC;YAED,UAAU,EAAE,CAAC;YAEb,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChC,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;gBAChD,UAAU,EAAE,CAAC;gBACb,OAAO;YACT,CAAC;YAED,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACpE,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;YACtE,cAAc,EAAE,CAAC;YAEjB,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC;YACrC,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;gBACrB,aAAa,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC;YACrE,CAAC;iBAAM,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;gBACxB,aAAa,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,2CAA2C,CAAC,EAAE,CAAC,CAAC;YACtF,CAAC;YACD,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAE9C,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;gBACd,aAAa,CAAC,IAAI,EAAE,kCAAkC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YACrE,CAAC;YAED,UAAU,EAAE,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerConfig(program: Command): void;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,QAqH9C"}
@@ -0,0 +1,139 @@
1
+ import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ import { SafeguardEnforcer } from '@t2000/sdk';
5
+ import { printKeyValue, printBlank, printJson, isJsonMode, handleError, printSuccess, printInfo, printHeader, printDivider } from '../output.js';
6
+ const CONFIG_DIR = join(homedir(), '.t2000');
7
+ const CONFIG_PATH = join(CONFIG_DIR, 'config.json');
8
+ const SAFEGUARD_KEYS = new Set(['locked', 'maxPerTx', 'maxDailySend', 'dailyUsed', 'dailyResetDate', 'alertThreshold', 'maxLeverage', 'maxPositionSize']);
9
+ function loadConfig() {
10
+ try {
11
+ return JSON.parse(readFileSync(CONFIG_PATH, 'utf-8'));
12
+ }
13
+ catch {
14
+ return {};
15
+ }
16
+ }
17
+ function saveConfig(config) {
18
+ if (!existsSync(CONFIG_DIR)) {
19
+ mkdirSync(CONFIG_DIR, { recursive: true });
20
+ }
21
+ writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2) + '\n');
22
+ }
23
+ function formatUsd(amount) {
24
+ return `$${amount.toFixed(2)}`;
25
+ }
26
+ export function registerConfig(program) {
27
+ const configCmd = program
28
+ .command('config')
29
+ .description('Show or set configuration');
30
+ configCmd
31
+ .command('show')
32
+ .description('Show safeguard settings')
33
+ .action(() => {
34
+ try {
35
+ const enforcer = new SafeguardEnforcer(CONFIG_DIR);
36
+ enforcer.load();
37
+ const config = enforcer.getConfig();
38
+ if (isJsonMode()) {
39
+ printJson({
40
+ locked: config.locked,
41
+ maxPerTx: config.maxPerTx,
42
+ maxDailySend: config.maxDailySend,
43
+ dailyUsed: config.dailyUsed,
44
+ });
45
+ return;
46
+ }
47
+ printHeader('Agent Safeguards');
48
+ printDivider();
49
+ printKeyValue('Locked', config.locked ? 'Yes' : 'No');
50
+ printKeyValue('Per-transaction', config.maxPerTx > 0 ? formatUsd(config.maxPerTx) : 'Unlimited');
51
+ printKeyValue('Daily send limit', config.maxDailySend > 0
52
+ ? `${formatUsd(config.maxDailySend)} (${formatUsd(config.dailyUsed)} used today)`
53
+ : 'Unlimited');
54
+ printBlank();
55
+ }
56
+ catch (error) {
57
+ handleError(error);
58
+ }
59
+ });
60
+ configCmd
61
+ .command('get')
62
+ .argument('[key]', 'Config key to get (omit for all)')
63
+ .action((key) => {
64
+ try {
65
+ const config = loadConfig();
66
+ if (isJsonMode()) {
67
+ printJson(key ? { [key]: config[key] } : config);
68
+ return;
69
+ }
70
+ printBlank();
71
+ if (key) {
72
+ printKeyValue(key, String(config[key] ?? '(not set)'));
73
+ }
74
+ else {
75
+ if (Object.keys(config).length === 0) {
76
+ printInfo('No configuration set.');
77
+ }
78
+ else {
79
+ for (const [k, v] of Object.entries(config)) {
80
+ printKeyValue(k, String(v));
81
+ }
82
+ }
83
+ }
84
+ printBlank();
85
+ }
86
+ catch (error) {
87
+ handleError(error);
88
+ }
89
+ });
90
+ configCmd
91
+ .command('set')
92
+ .argument('<key>', 'Config key')
93
+ .argument('<value>', 'Config value')
94
+ .action((key, value) => {
95
+ try {
96
+ if (SAFEGUARD_KEYS.has(key)) {
97
+ const enforcer = new SafeguardEnforcer(CONFIG_DIR);
98
+ enforcer.load();
99
+ let parsed = value;
100
+ if (value === 'true')
101
+ parsed = true;
102
+ else if (value === 'false')
103
+ parsed = false;
104
+ else if (!isNaN(Number(value)) && value.trim() !== '')
105
+ parsed = Number(value);
106
+ enforcer.set(key, parsed);
107
+ if (isJsonMode()) {
108
+ printJson({ [key]: parsed });
109
+ return;
110
+ }
111
+ printBlank();
112
+ printSuccess(`Set ${key} = ${String(parsed)}`);
113
+ printBlank();
114
+ return;
115
+ }
116
+ const config = loadConfig();
117
+ let parsed = value;
118
+ if (value === 'true')
119
+ parsed = true;
120
+ else if (value === 'false')
121
+ parsed = false;
122
+ else if (!isNaN(Number(value)) && value.trim() !== '')
123
+ parsed = Number(value);
124
+ config[key] = parsed;
125
+ saveConfig(config);
126
+ if (isJsonMode()) {
127
+ printJson({ [key]: parsed });
128
+ return;
129
+ }
130
+ printBlank();
131
+ printSuccess(`Set ${key} = ${String(parsed)}`);
132
+ printBlank();
133
+ }
134
+ catch (error) {
135
+ handleError(error);
136
+ }
137
+ });
138
+ }
139
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerContacts(program: Command): void;
3
+ //# sourceMappingURL=contacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts.d.ts","sourceRoot":"","sources":["../../src/commands/contacts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,QAuFhD"}
@@ -0,0 +1,83 @@
1
+ import { ContactManager, truncateAddress } from '@t2000/sdk';
2
+ import { printSuccess, printError, printHeader, printLine, printBlank, printJson, isJsonMode, handleError } from '../output.js';
3
+ export function registerContacts(program) {
4
+ const contacts = program
5
+ .command('contacts')
6
+ .description('Manage contacts (send by name instead of address)');
7
+ contacts
8
+ .command('add <name> <address>')
9
+ .description('Add or update a contact')
10
+ .action((name, address) => {
11
+ try {
12
+ const manager = new ContactManager();
13
+ const result = manager.add(name, address);
14
+ if (isJsonMode()) {
15
+ const contact = manager.get(name);
16
+ printJson({ action: result.action, name: contact.name, address: contact.address });
17
+ return;
18
+ }
19
+ const contact = manager.get(name);
20
+ printBlank();
21
+ printSuccess(`${result.action === 'added' ? 'Added' : 'Updated'} ${contact.name} (${truncateAddress(contact.address)})`);
22
+ printBlank();
23
+ }
24
+ catch (error) {
25
+ handleError(error);
26
+ }
27
+ });
28
+ contacts
29
+ .command('remove <name>')
30
+ .description('Remove a contact')
31
+ .action((name) => {
32
+ try {
33
+ const manager = new ContactManager();
34
+ const removed = manager.remove(name);
35
+ if (isJsonMode()) {
36
+ printJson({ removed, name });
37
+ return;
38
+ }
39
+ printBlank();
40
+ if (removed) {
41
+ printSuccess(`Removed ${name}`);
42
+ }
43
+ else {
44
+ printError(`Contact "${name}" not found`);
45
+ }
46
+ printBlank();
47
+ }
48
+ catch (error) {
49
+ handleError(error);
50
+ }
51
+ });
52
+ contacts
53
+ .command('list', { isDefault: true })
54
+ .description('List all contacts')
55
+ .action(() => {
56
+ try {
57
+ const manager = new ContactManager();
58
+ const list = manager.list();
59
+ if (isJsonMode()) {
60
+ printJson(list);
61
+ return;
62
+ }
63
+ if (list.length === 0) {
64
+ printBlank();
65
+ printLine('No contacts yet.');
66
+ printLine('Add one: t2000 contacts add Tom 0x...');
67
+ printBlank();
68
+ return;
69
+ }
70
+ printHeader('Contacts');
71
+ const maxNameLen = Math.max(...list.map((c) => c.name.length));
72
+ for (const contact of list) {
73
+ const padded = contact.name.padEnd(maxNameLen + 4);
74
+ printLine(`${padded}${truncateAddress(contact.address)}`);
75
+ }
76
+ printBlank();
77
+ }
78
+ catch (error) {
79
+ handleError(error);
80
+ }
81
+ });
82
+ }
83
+ //# sourceMappingURL=contacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../src/commands/contacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerDeposit(program: Command): void;
3
+ //# sourceMappingURL=deposit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deposit.d.ts","sourceRoot":"","sources":["../../src/commands/deposit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,QAwB/C"}
@@ -0,0 +1,27 @@
1
+ import { T2000 } from '@t2000/sdk';
2
+ import { resolvePin } from '../prompts.js';
3
+ import { printHeader, printBlank, printJson, isJsonMode, handleError } from '../output.js';
4
+ export function registerDeposit(program) {
5
+ program
6
+ .command('deposit')
7
+ .description('Show funding instructions')
8
+ .option('--key <path>', 'Key file path')
9
+ .action(async (opts) => {
10
+ try {
11
+ const pin = await resolvePin();
12
+ const agent = await T2000.create({ pin, keyPath: opts.key });
13
+ const info = await agent.deposit();
14
+ if (isJsonMode()) {
15
+ printJson(info);
16
+ return;
17
+ }
18
+ printHeader('Fund your wallet');
19
+ console.log(info.instructions);
20
+ printBlank();
21
+ }
22
+ catch (error) {
23
+ handleError(error);
24
+ }
25
+ });
26
+ }
27
+ //# sourceMappingURL=deposit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deposit.js","sourceRoot":"","sources":["../../src/commands/deposit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3F,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,cAAc,EAAE,eAAe,CAAC;SACvC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAE7D,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;YAEnC,IAAI,UAAU,EAAE,EAAE,CAAC;gBACjB,SAAS,CAAC,IAAI,CAAC,CAAC;gBAChB,OAAO;YACT,CAAC;YAED,WAAW,CAAC,kBAAkB,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC/B,UAAU,EAAE,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerEarn(program: Command): void;
3
+ //# sourceMappingURL=earn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"earn.d.ts","sourceRoot":"","sources":["../../src/commands/earn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BzC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,QAqL5C"}