agentaos 0.2.0

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 (183) hide show
  1. package/LICENSE +199 -0
  2. package/README.md +249 -0
  3. package/dist/cli/commands/admin.command.d.ts +3 -0
  4. package/dist/cli/commands/admin.command.d.ts.map +1 -0
  5. package/dist/cli/commands/admin.command.js +415 -0
  6. package/dist/cli/commands/admin.command.js.map +1 -0
  7. package/dist/cli/commands/balance.command.d.ts +3 -0
  8. package/dist/cli/commands/balance.command.d.ts.map +1 -0
  9. package/dist/cli/commands/balance.command.js +65 -0
  10. package/dist/cli/commands/balance.command.js.map +1 -0
  11. package/dist/cli/commands/deploy.command.d.ts +3 -0
  12. package/dist/cli/commands/deploy.command.d.ts.map +1 -0
  13. package/dist/cli/commands/deploy.command.js +101 -0
  14. package/dist/cli/commands/deploy.command.js.map +1 -0
  15. package/dist/cli/commands/info.command.d.ts +3 -0
  16. package/dist/cli/commands/info.command.d.ts.map +1 -0
  17. package/dist/cli/commands/info.command.js +30 -0
  18. package/dist/cli/commands/info.command.js.map +1 -0
  19. package/dist/cli/commands/init.command.d.ts +3 -0
  20. package/dist/cli/commands/init.command.d.ts.map +1 -0
  21. package/dist/cli/commands/init.command.js +364 -0
  22. package/dist/cli/commands/init.command.js.map +1 -0
  23. package/dist/cli/commands/link.command.d.ts +3 -0
  24. package/dist/cli/commands/link.command.d.ts.map +1 -0
  25. package/dist/cli/commands/link.command.js +111 -0
  26. package/dist/cli/commands/link.command.js.map +1 -0
  27. package/dist/cli/commands/login.command.d.ts +4 -0
  28. package/dist/cli/commands/login.command.d.ts.map +1 -0
  29. package/dist/cli/commands/login.command.js +149 -0
  30. package/dist/cli/commands/login.command.js.map +1 -0
  31. package/dist/cli/commands/network.command.d.ts +3 -0
  32. package/dist/cli/commands/network.command.d.ts.map +1 -0
  33. package/dist/cli/commands/network.command.js +206 -0
  34. package/dist/cli/commands/network.command.js.map +1 -0
  35. package/dist/cli/commands/proxy.command.d.ts +3 -0
  36. package/dist/cli/commands/proxy.command.d.ts.map +1 -0
  37. package/dist/cli/commands/proxy.command.js +248 -0
  38. package/dist/cli/commands/proxy.command.js.map +1 -0
  39. package/dist/cli/commands/receive.command.d.ts +3 -0
  40. package/dist/cli/commands/receive.command.d.ts.map +1 -0
  41. package/dist/cli/commands/receive.command.js +360 -0
  42. package/dist/cli/commands/receive.command.js.map +1 -0
  43. package/dist/cli/commands/send.command.d.ts +3 -0
  44. package/dist/cli/commands/send.command.d.ts.map +1 -0
  45. package/dist/cli/commands/send.command.js +83 -0
  46. package/dist/cli/commands/send.command.js.map +1 -0
  47. package/dist/cli/commands/sign.command.d.ts +3 -0
  48. package/dist/cli/commands/sign.command.d.ts.map +1 -0
  49. package/dist/cli/commands/sign.command.js +53 -0
  50. package/dist/cli/commands/sign.command.js.map +1 -0
  51. package/dist/cli/commands/status.command.d.ts +3 -0
  52. package/dist/cli/commands/status.command.d.ts.map +1 -0
  53. package/dist/cli/commands/status.command.js +109 -0
  54. package/dist/cli/commands/status.command.js.map +1 -0
  55. package/dist/cli/index.d.ts +2 -0
  56. package/dist/cli/index.d.ts.map +1 -0
  57. package/dist/cli/index.js +50 -0
  58. package/dist/cli/index.js.map +1 -0
  59. package/dist/cli/theme.d.ts +35 -0
  60. package/dist/cli/theme.d.ts.map +1 -0
  61. package/dist/cli/theme.js +96 -0
  62. package/dist/cli/theme.js.map +1 -0
  63. package/dist/index.d.ts +3 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +20 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/lib/__tests__/transfer-crypto.test.d.ts +2 -0
  68. package/dist/lib/__tests__/transfer-crypto.test.d.ts.map +1 -0
  69. package/dist/lib/__tests__/transfer-crypto.test.js +151 -0
  70. package/dist/lib/__tests__/transfer-crypto.test.js.map +1 -0
  71. package/dist/lib/authenticated-fetch.d.ts +6 -0
  72. package/dist/lib/authenticated-fetch.d.ts.map +1 -0
  73. package/dist/lib/authenticated-fetch.js +74 -0
  74. package/dist/lib/authenticated-fetch.js.map +1 -0
  75. package/dist/lib/config.d.ts +42 -0
  76. package/dist/lib/config.d.ts.map +1 -0
  77. package/dist/lib/config.js +163 -0
  78. package/dist/lib/config.js.map +1 -0
  79. package/dist/lib/erc20-abi.d.ts +43 -0
  80. package/dist/lib/erc20-abi.d.ts.map +1 -0
  81. package/dist/lib/erc20-abi.js +34 -0
  82. package/dist/lib/erc20-abi.js.map +1 -0
  83. package/dist/lib/errors.d.ts +12 -0
  84. package/dist/lib/errors.d.ts.map +1 -0
  85. package/dist/lib/errors.js +23 -0
  86. package/dist/lib/errors.js.map +1 -0
  87. package/dist/lib/keychain.d.ts +11 -0
  88. package/dist/lib/keychain.d.ts.map +1 -0
  89. package/dist/lib/keychain.js +216 -0
  90. package/dist/lib/keychain.js.map +1 -0
  91. package/dist/lib/policy-conversions.d.ts +19 -0
  92. package/dist/lib/policy-conversions.d.ts.map +1 -0
  93. package/dist/lib/policy-conversions.js +62 -0
  94. package/dist/lib/policy-conversions.js.map +1 -0
  95. package/dist/lib/signer-manager.d.ts +17 -0
  96. package/dist/lib/signer-manager.d.ts.map +1 -0
  97. package/dist/lib/signer-manager.js +80 -0
  98. package/dist/lib/signer-manager.js.map +1 -0
  99. package/dist/lib/transfer-crypto.d.ts +36 -0
  100. package/dist/lib/transfer-crypto.d.ts.map +1 -0
  101. package/dist/lib/transfer-crypto.js +109 -0
  102. package/dist/lib/transfer-crypto.js.map +1 -0
  103. package/dist/lib/x402-client.d.ts +63 -0
  104. package/dist/lib/x402-client.d.ts.map +1 -0
  105. package/dist/lib/x402-client.js +236 -0
  106. package/dist/lib/x402-client.js.map +1 -0
  107. package/dist/mcp/index.d.ts +6 -0
  108. package/dist/mcp/index.d.ts.map +1 -0
  109. package/dist/mcp/index.js +73 -0
  110. package/dist/mcp/index.js.map +1 -0
  111. package/dist/mcp/tools/call-contract.d.ts +4 -0
  112. package/dist/mcp/tools/call-contract.d.ts.map +1 -0
  113. package/dist/mcp/tools/call-contract.js +68 -0
  114. package/dist/mcp/tools/call-contract.js.map +1 -0
  115. package/dist/mcp/tools/execute.d.ts +4 -0
  116. package/dist/mcp/tools/execute.d.ts.map +1 -0
  117. package/dist/mcp/tools/execute.js +59 -0
  118. package/dist/mcp/tools/execute.js.map +1 -0
  119. package/dist/mcp/tools/get-audit-log.d.ts +4 -0
  120. package/dist/mcp/tools/get-audit-log.d.ts.map +1 -0
  121. package/dist/mcp/tools/get-audit-log.js +85 -0
  122. package/dist/mcp/tools/get-audit-log.js.map +1 -0
  123. package/dist/mcp/tools/get-balances.d.ts +4 -0
  124. package/dist/mcp/tools/get-balances.d.ts.map +1 -0
  125. package/dist/mcp/tools/get-balances.js +84 -0
  126. package/dist/mcp/tools/get-balances.js.map +1 -0
  127. package/dist/mcp/tools/get-status.d.ts +4 -0
  128. package/dist/mcp/tools/get-status.d.ts.map +1 -0
  129. package/dist/mcp/tools/get-status.js +66 -0
  130. package/dist/mcp/tools/get-status.js.map +1 -0
  131. package/dist/mcp/tools/list-networks.d.ts +4 -0
  132. package/dist/mcp/tools/list-networks.d.ts.map +1 -0
  133. package/dist/mcp/tools/list-networks.js +36 -0
  134. package/dist/mcp/tools/list-networks.js.map +1 -0
  135. package/dist/mcp/tools/list-signers.d.ts +4 -0
  136. package/dist/mcp/tools/list-signers.d.ts.map +1 -0
  137. package/dist/mcp/tools/list-signers.js +36 -0
  138. package/dist/mcp/tools/list-signers.js.map +1 -0
  139. package/dist/mcp/tools/read-contract.d.ts +4 -0
  140. package/dist/mcp/tools/read-contract.d.ts.map +1 -0
  141. package/dist/mcp/tools/read-contract.js +62 -0
  142. package/dist/mcp/tools/read-contract.js.map +1 -0
  143. package/dist/mcp/tools/resolve-address.d.ts +4 -0
  144. package/dist/mcp/tools/resolve-address.d.ts.map +1 -0
  145. package/dist/mcp/tools/resolve-address.js +37 -0
  146. package/dist/mcp/tools/resolve-address.js.map +1 -0
  147. package/dist/mcp/tools/send-eth.d.ts +4 -0
  148. package/dist/mcp/tools/send-eth.d.ts.map +1 -0
  149. package/dist/mcp/tools/send-eth.js +52 -0
  150. package/dist/mcp/tools/send-eth.js.map +1 -0
  151. package/dist/mcp/tools/send-token.d.ts +4 -0
  152. package/dist/mcp/tools/send-token.d.ts.map +1 -0
  153. package/dist/mcp/tools/send-token.js +102 -0
  154. package/dist/mcp/tools/send-token.js.map +1 -0
  155. package/dist/mcp/tools/sign-message.d.ts +4 -0
  156. package/dist/mcp/tools/sign-message.d.ts.map +1 -0
  157. package/dist/mcp/tools/sign-message.js +33 -0
  158. package/dist/mcp/tools/sign-message.js.map +1 -0
  159. package/dist/mcp/tools/sign-typed-data.d.ts +4 -0
  160. package/dist/mcp/tools/sign-typed-data.d.ts.map +1 -0
  161. package/dist/mcp/tools/sign-typed-data.js +48 -0
  162. package/dist/mcp/tools/sign-typed-data.js.map +1 -0
  163. package/dist/mcp/tools/simulate.d.ts +4 -0
  164. package/dist/mcp/tools/simulate.d.ts.map +1 -0
  165. package/dist/mcp/tools/simulate.js +54 -0
  166. package/dist/mcp/tools/simulate.js.map +1 -0
  167. package/dist/mcp/tools/wallet-overview.d.ts +4 -0
  168. package/dist/mcp/tools/wallet-overview.d.ts.map +1 -0
  169. package/dist/mcp/tools/wallet-overview.js +109 -0
  170. package/dist/mcp/tools/wallet-overview.js.map +1 -0
  171. package/dist/mcp/tools/x402-check.d.ts +3 -0
  172. package/dist/mcp/tools/x402-check.d.ts.map +1 -0
  173. package/dist/mcp/tools/x402-check.js +44 -0
  174. package/dist/mcp/tools/x402-check.js.map +1 -0
  175. package/dist/mcp/tools/x402-discover.d.ts +3 -0
  176. package/dist/mcp/tools/x402-discover.d.ts.map +1 -0
  177. package/dist/mcp/tools/x402-discover.js +42 -0
  178. package/dist/mcp/tools/x402-discover.js.map +1 -0
  179. package/dist/mcp/tools/x402-fetch.d.ts +4 -0
  180. package/dist/mcp/tools/x402-fetch.d.ts.map +1 -0
  181. package/dist/mcp/tools/x402-fetch.js +45 -0
  182. package/dist/mcp/tools/x402-fetch.js.map +1 -0
  183. package/package.json +68 -0
@@ -0,0 +1,415 @@
1
+ import { CRITERION_CATALOG } from '@agentaos/core';
2
+ import { confirm, input, select } from '@inquirer/prompts';
3
+ import chalk from 'chalk';
4
+ import { Command } from 'commander';
5
+ import ora from 'ora';
6
+ import { formatEther } from 'viem';
7
+ import { loadSignerConfig } from '../../lib/config.js';
8
+ import { getSession } from '../../lib/keychain.js';
9
+ import { buildRules, parseFormValues } from '../../lib/policy-conversions.js';
10
+ import { brand, danger, dim, failMark, promptTheme, success, warn } from '../theme.js';
11
+ // ---------------------------------------------------------------------------
12
+ // Error handler (clean output, no stack traces)
13
+ // ---------------------------------------------------------------------------
14
+ function withErrorHandler(
15
+ // biome-ignore lint/suspicious/noExplicitAny: commander action callbacks use any[]
16
+ fn) {
17
+ // biome-ignore lint/suspicious/noExplicitAny: commander action callbacks use any[]
18
+ return async (...args) => {
19
+ try {
20
+ await fn(...args);
21
+ }
22
+ catch (error) {
23
+ if (error instanceof Error && error.name === 'ExitPromptError') {
24
+ console.log(dim('\n Cancelled.\n'));
25
+ return;
26
+ }
27
+ const message = error instanceof Error ? error.message : 'Unknown error';
28
+ console.error(`\n ${failMark(message)}\n`);
29
+ process.exitCode = 1;
30
+ }
31
+ };
32
+ }
33
+ // ---------------------------------------------------------------------------
34
+ // Auth resolution — uses session JWT from `agenta login`
35
+ // ---------------------------------------------------------------------------
36
+ async function getAdminContext(command) {
37
+ const signerName = command.optsWithGlobals().signer;
38
+ const config = loadSignerConfig(signerName);
39
+ if (!config.signerId) {
40
+ throw new Error('No signer ID in config. Re-run `agenta init` or add signerId to config.');
41
+ }
42
+ const token = await getSession();
43
+ if (!token) {
44
+ throw new Error(`Not logged in. Run ${chalk.bold('agenta login')} first.`);
45
+ }
46
+ const headers = {
47
+ 'content-type': 'application/json',
48
+ authorization: `Bearer ${token}`,
49
+ };
50
+ return { config, signerName: config.signerName, signerId: config.signerId, headers };
51
+ }
52
+ function getAuditContext(command) {
53
+ const signerName = command.optsWithGlobals().signer;
54
+ const config = loadSignerConfig(signerName);
55
+ return {
56
+ config,
57
+ headers: {
58
+ 'x-api-key': config.apiKey,
59
+ 'content-type': 'application/json',
60
+ },
61
+ };
62
+ }
63
+ // ---------------------------------------------------------------------------
64
+ // Fetch helper
65
+ // ---------------------------------------------------------------------------
66
+ async function adminFetch(baseUrl, path, headers, method = 'GET', body) {
67
+ const url = `${baseUrl.replace(/\/+$/, '')}/api/v1${path}`;
68
+ const response = await fetch(url, {
69
+ method,
70
+ headers,
71
+ body: body ? JSON.stringify(body) : undefined,
72
+ signal: AbortSignal.timeout(30_000),
73
+ });
74
+ if (!response.ok) {
75
+ const text = await response.text();
76
+ throw new Error(`Server returned ${response.status}: ${text}`);
77
+ }
78
+ if (response.status === 204)
79
+ return undefined;
80
+ return response.json();
81
+ }
82
+ // ---------------------------------------------------------------------------
83
+ // Visual helpers
84
+ // ---------------------------------------------------------------------------
85
+ function fmtAddr(address) {
86
+ if (!address || address.length < 10)
87
+ return dim('—');
88
+ return `${address.slice(0, 6)}…${address.slice(-4)}`;
89
+ }
90
+ function fmtId(id) {
91
+ return id.length > 12 ? `${id.slice(0, 8)}…` : id;
92
+ }
93
+ function fmtCriterion(type, criterion) {
94
+ switch (type) {
95
+ case 'evmAddress': {
96
+ const op = criterion.operator;
97
+ const addrs = criterion.addresses ?? [];
98
+ const label = op === 'not_in' ? 'Blocked' : 'Approved';
99
+ return `${label}: ${addrs.map(fmtAddr).join(', ') || dim('none')}`;
100
+ }
101
+ case 'maxPerTxUsd':
102
+ return `Max/tx: $${criterion.maxUsd}`;
103
+ case 'dailyLimitUsd':
104
+ return `Daily: $${criterion.maxUsd}`;
105
+ case 'monthlyLimitUsd':
106
+ return `Monthly: $${criterion.maxUsd}`;
107
+ case 'ethValue':
108
+ return `ETH value ${criterion.operator ?? '<='} ${criterion.value}`;
109
+ case 'rateLimit':
110
+ return `Rate: ${criterion.maxPerHour}/hr`;
111
+ case 'timeWindow':
112
+ return `Hours: ${criterion.startHour}:00–${criterion.endHour}:00 UTC`;
113
+ case 'evmNetwork': {
114
+ const ids = criterion.chainIds ?? [];
115
+ return `Chains: ${ids.join(', ')}`;
116
+ }
117
+ case 'evmFunction': {
118
+ const sels = criterion.selectors ?? [];
119
+ return `Functions: ${sels.join(', ') || dim('any')}`;
120
+ }
121
+ case 'ipAddress': {
122
+ const ips = criterion.ips ?? [];
123
+ return `IPs: ${ips.join(', ')}`;
124
+ }
125
+ case 'blockInfiniteApprovals':
126
+ return 'Block infinite approvals';
127
+ case 'maxSlippage':
128
+ return `Max slippage: ${criterion.maxPercent}%`;
129
+ case 'mevProtection':
130
+ return `MEV protection ${dim('(advisory)')}`;
131
+ default:
132
+ return `${type}: ${JSON.stringify(criterion)}`;
133
+ }
134
+ }
135
+ function formatWei(weiStr) {
136
+ if (!weiStr || weiStr === '0')
137
+ return '0';
138
+ try {
139
+ return formatEther(BigInt(weiStr));
140
+ }
141
+ catch {
142
+ return weiStr;
143
+ }
144
+ }
145
+ // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape stripping is intentional
146
+ const ANSI_RE = /\u001B\[[0-9;]*m/g;
147
+ function pad(str, width) {
148
+ const visible = str.replace(ANSI_RE, '');
149
+ return str + ' '.repeat(Math.max(0, width - visible.length));
150
+ }
151
+ // ---------------------------------------------------------------------------
152
+ // ---------------------------------------------------------------------------
153
+ // Subcommands
154
+ // ---------------------------------------------------------------------------
155
+ // -- Policies ----------------------------------------------------------------
156
+ async function handlePoliciesList(command) {
157
+ const ctx = await getAdminContext(command);
158
+ const spinner = ora({ text: 'Fetching policy\u2026', indent: 2 }).start();
159
+ let doc = null;
160
+ try {
161
+ doc = await adminFetch(ctx.config.serverUrl, `/signers/${ctx.signerId}/policy`, ctx.headers);
162
+ }
163
+ catch {
164
+ // No active policy
165
+ }
166
+ spinner.stop();
167
+ console.log('');
168
+ console.log(` Policy for ${chalk.bold(ctx.signerName)} ${dim(`(${fmtAddr(ctx.config.ethAddress)})`)}`);
169
+ console.log('');
170
+ if (!doc || !doc.rules || doc.rules.length === 0) {
171
+ console.log(dim(' No policy configured.'));
172
+ console.log(dim(` Run ${chalk.reset('agenta admin policies edit')} to create one.`));
173
+ }
174
+ else {
175
+ console.log(` ${dim('Status:')} ${success('active')}`);
176
+ if (doc.version)
177
+ console.log(` ${dim('Version:')} ${doc.version}`);
178
+ console.log('');
179
+ for (const rule of doc.rules) {
180
+ const action = rule.action ?? 'accept';
181
+ const criteria = rule.criteria ?? [];
182
+ const actionLabel = action === 'reject' ? danger('REJECT') : success('ACCEPT');
183
+ console.log(` ${actionLabel} if:`);
184
+ for (const criterion of criteria) {
185
+ const type = criterion.type;
186
+ console.log(` ${fmtCriterion(type, criterion)}`);
187
+ }
188
+ console.log('');
189
+ }
190
+ console.log(dim(' Always-on: Scam blacklist, Contract scanner'));
191
+ }
192
+ console.log('');
193
+ }
194
+ const policiesEditCommand = new Command('edit')
195
+ .description('Edit policy rules interactively')
196
+ .action(withErrorHandler(async (_opts, command) => {
197
+ const ctx = await getAdminContext(command);
198
+ const spinner = ora({ text: 'Fetching current policy\u2026', indent: 2 }).start();
199
+ let currentRules = [];
200
+ try {
201
+ const doc = await adminFetch(ctx.config.serverUrl, `/signers/${ctx.signerId}/policy`, ctx.headers);
202
+ currentRules = doc.rules ?? [];
203
+ }
204
+ catch {
205
+ // No active policy
206
+ }
207
+ spinner.stop();
208
+ const { values, enabled } = parseFormValues(currentRules);
209
+ const newEnabled = { ...enabled };
210
+ const newValues = { ...values };
211
+ const editableCriteria = CRITERION_CATALOG.filter((m) => !m.alwaysOn);
212
+ console.log('');
213
+ console.log(brand(' Configure policy rules'));
214
+ console.log(dim(' Toggle rules on/off, then set values for enabled rules.'));
215
+ console.log('');
216
+ for (const meta of editableCriteria) {
217
+ const isEnabled = newEnabled[meta.type] ?? false;
218
+ const shouldEnable = await confirm({
219
+ message: `${meta.label} \u2014 ${meta.description}`,
220
+ default: isEnabled,
221
+ theme: promptTheme,
222
+ });
223
+ newEnabled[meta.type] = shouldEnable;
224
+ if (shouldEnable && meta.fields.length > 0) {
225
+ const fieldValues = newValues[meta.type] ?? meta.fromCriterion({});
226
+ for (const field of meta.fields) {
227
+ const currentVal = fieldValues[field.key];
228
+ if (field.type === 'toggle') {
229
+ fieldValues[field.key] = await confirm({
230
+ message: ` ${field.label}`,
231
+ default: currentVal !== false,
232
+ theme: promptTheme,
233
+ });
234
+ }
235
+ else if (field.type === 'addresses' ||
236
+ field.type === 'selectors' ||
237
+ field.type === 'ips') {
238
+ const current = currentVal ?? [];
239
+ const answer = await input({
240
+ message: ` ${field.label} (comma-separated)`,
241
+ default: current.join(', '),
242
+ theme: promptTheme,
243
+ });
244
+ fieldValues[field.key] = answer
245
+ .split(',')
246
+ .map((s) => s.trim())
247
+ .filter(Boolean);
248
+ }
249
+ else if (field.type === 'chains') {
250
+ const current = currentVal ?? [];
251
+ const answer = await input({
252
+ message: ` ${field.label} (chain IDs, comma-separated)`,
253
+ default: current.join(', '),
254
+ theme: promptTheme,
255
+ });
256
+ fieldValues[field.key] = answer
257
+ .split(',')
258
+ .map((s) => Number(s.trim()))
259
+ .filter((n) => !Number.isNaN(n));
260
+ }
261
+ else {
262
+ const suffix = field.unit ? ` (${field.unit})` : '';
263
+ const answer = await input({
264
+ message: ` ${field.label}${suffix}`,
265
+ default: currentVal !== undefined ? String(currentVal) : undefined,
266
+ theme: promptTheme,
267
+ });
268
+ fieldValues[field.key] = answer === '' ? undefined : Number(answer);
269
+ }
270
+ }
271
+ newValues[meta.type] = fieldValues;
272
+ }
273
+ }
274
+ // Build rules
275
+ const rules = buildRules(newValues, newEnabled);
276
+ const enabledCount = Object.values(newEnabled).filter(Boolean).length;
277
+ console.log('');
278
+ console.log(` ${enabledCount} rule${enabledCount !== 1 ? 's' : ''} configured.`);
279
+ if (rules.length === 0) {
280
+ console.log(warn(' No rules \u2014 all transactions will use default deny.'));
281
+ }
282
+ const ok = await confirm({
283
+ message: 'Save policy?',
284
+ default: true,
285
+ theme: promptTheme,
286
+ });
287
+ if (!ok) {
288
+ console.log(dim('\n Cancelled.\n'));
289
+ return;
290
+ }
291
+ const saveSpinner = ora({ text: 'Saving policy\u2026', indent: 2 }).start();
292
+ await adminFetch(ctx.config.serverUrl, `/signers/${ctx.signerId}/policy`, ctx.headers, 'PUT', { rules });
293
+ saveSpinner.succeed(`Policy saved (${enabledCount} rules)`);
294
+ console.log('');
295
+ }));
296
+ // -- Pause / Resume ----------------------------------------------------------
297
+ const pauseCommand = new Command('pause').description('Pause wallet (blocks all signing)').action(withErrorHandler(async (_opts, command) => {
298
+ const ctx = await getAdminContext(command);
299
+ console.log('');
300
+ console.log(` Pause ${chalk.bold(ctx.signerName)} ${dim(`(${fmtAddr(ctx.config.ethAddress)})`)}`);
301
+ console.log(warn(' This will block ALL signing requests until resumed.'));
302
+ console.log('');
303
+ const ok = await confirm({ message: 'Confirm pause?', default: false, theme: promptTheme });
304
+ if (!ok) {
305
+ console.log(dim('\n Cancelled.\n'));
306
+ return;
307
+ }
308
+ const spinner = ora({ text: 'Pausing…', indent: 2 }).start();
309
+ await adminFetch(ctx.config.serverUrl, `/signers/${ctx.signerId}/pause`, ctx.headers, 'POST');
310
+ spinner.succeed('Wallet paused');
311
+ console.log('');
312
+ }));
313
+ const resumeCommand = new Command('resume')
314
+ .description('Resume wallet (re-enables signing)')
315
+ .action(withErrorHandler(async (_opts, command) => {
316
+ const ctx = await getAdminContext(command);
317
+ const ok = await confirm({
318
+ message: `Resume "${ctx.signerName}"?`,
319
+ default: true,
320
+ theme: promptTheme,
321
+ });
322
+ if (!ok) {
323
+ console.log(dim('\n Cancelled.\n'));
324
+ return;
325
+ }
326
+ const spinner = ora({ text: 'Resuming…', indent: 2 }).start();
327
+ await adminFetch(ctx.config.serverUrl, `/signers/${ctx.signerId}/resume`, ctx.headers, 'POST');
328
+ spinner.succeed('Wallet resumed');
329
+ console.log('');
330
+ }));
331
+ // -- Audit -------------------------------------------------------------------
332
+ const auditCommand = new Command('audit')
333
+ .description('View signing request audit log')
334
+ .option('--limit <n>', 'Number of entries', '20')
335
+ .option('--status <status>', 'Filter: completed, blocked, failed, pending')
336
+ .option('--export', 'Output CSV to stdout')
337
+ .action(withErrorHandler(async (opts, command) => {
338
+ const params = new URLSearchParams();
339
+ // Export requires session auth (SessionGuard); list accepts either
340
+ if (opts.export) {
341
+ const { config, headers } = await getAdminContext(command);
342
+ if (!config.signerId)
343
+ throw new Error('No signer ID in config.');
344
+ params.set('signerId', config.signerId);
345
+ if (opts.status)
346
+ params.set('status', opts.status);
347
+ const baseUrl = config.serverUrl.replace(/\/+$/, '');
348
+ const url = `${baseUrl}/api/v1/audit-log/export?${params}`;
349
+ const response = await fetch(url, { headers, signal: AbortSignal.timeout(30_000) });
350
+ if (!response.ok)
351
+ throw new Error(`Server returned ${response.status}`);
352
+ const csv = await response.text();
353
+ process.stdout.write(csv);
354
+ return;
355
+ }
356
+ const { config } = getAuditContext(command);
357
+ const signerId = config.signerId;
358
+ if (!signerId)
359
+ throw new Error('No signer ID in config.');
360
+ params.set('signerId', signerId);
361
+ params.set('limit', opts.limit);
362
+ if (opts.status)
363
+ params.set('status', opts.status);
364
+ const baseUrl = config.serverUrl.replace(/\/+$/, '');
365
+ const headers = { 'x-api-key': config.apiKey };
366
+ const spinner = ora({ text: 'Fetching audit log…', indent: 2 }).start();
367
+ const url = `${baseUrl}/api/v1/audit-log?${params}`;
368
+ const response = await fetch(url, { headers, signal: AbortSignal.timeout(30_000) });
369
+ if (!response.ok)
370
+ throw new Error(`Server returned ${response.status}`);
371
+ const data = (await response.json());
372
+ const entries = data.entries || data.data || [];
373
+ spinner.stop();
374
+ console.log('');
375
+ console.log(` Audit log for ${chalk.bold(config.signerName)}`);
376
+ console.log('');
377
+ if (entries.length === 0) {
378
+ console.log(dim(' No entries found.'));
379
+ }
380
+ else {
381
+ const tw = 12;
382
+ const pw = 14;
383
+ const sw = 10;
384
+ const aw = 14;
385
+ console.log(` ${pad(dim('Time'), 19)} ${pad(dim('Type'), tw)} ${pad(dim('Path'), pw)} ${pad(dim('Status'), sw)} ${pad(dim('To'), aw)} ${dim('Value')}`);
386
+ console.log(dim(` ${'─'.repeat(19)} ${'─'.repeat(tw)} ${'─'.repeat(pw)} ${'─'.repeat(sw)} ${'─'.repeat(aw)} ${'─'.repeat(10)}`));
387
+ for (const e of entries) {
388
+ const time = new Date(e.createdAt).toISOString().replace('T', ' ').slice(0, 19);
389
+ const type = pad(e.requestType || '—', tw);
390
+ const path = pad(e.signingPath || '—', pw);
391
+ const statusFn = e.status === 'completed' ? success : e.status === 'blocked' ? danger : warn;
392
+ const status = pad(statusFn(e.status), sw);
393
+ const to = pad(e.toAddress ? fmtAddr(e.toAddress) : '—', aw);
394
+ const value = e.valueWei ? `${formatWei(e.valueWei)} ETH` : '—';
395
+ console.log(` ${time} ${type} ${path} ${status} ${to} ${value}`);
396
+ }
397
+ console.log('');
398
+ console.log(dim(` ${entries.length} entries. Use --limit to see more, --export for CSV.`));
399
+ }
400
+ console.log('');
401
+ }));
402
+ // ---------------------------------------------------------------------------
403
+ // Main command group
404
+ // ---------------------------------------------------------------------------
405
+ const policiesCommand = new Command('policies').description('Manage signing policies').action(withErrorHandler(async (_opts, command) => {
406
+ await handlePoliciesList(command);
407
+ }));
408
+ policiesCommand.addCommand(policiesEditCommand);
409
+ export const adminCommand = new Command('admin')
410
+ .description('Admin operations — requires agenta login (policies, pause/resume, audit)')
411
+ .addCommand(policiesCommand)
412
+ .addCommand(pauseCommand)
413
+ .addCommand(resumeCommand)
414
+ .addCommand(auditCommand);
415
+ //# sourceMappingURL=admin.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.command.js","sourceRoot":"","sources":["../../../src/cli/commands/admin.command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const balanceCommand: Command;
3
+ //# sourceMappingURL=balance.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance.command.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/balance.command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAA+B,MAAM,WAAW,CAAC;AAMjE,eAAO,MAAM,cAAc,SA6DxB,CAAC"}
@@ -0,0 +1,65 @@
1
+ import chalk from 'chalk';
2
+ import { Command } from 'commander';
3
+ import ora from 'ora';
4
+ import { formatUnits } from 'viem';
5
+ import { createClientFromConfig, loadSignerConfig } from '../../lib/config.js';
6
+ import { brand, danger, dim, statusColor, warn } from '../theme.js';
7
+ export const balanceCommand = new Command('balance')
8
+ .description('Show ETH balance for the configured account')
9
+ .option('-n, --network <network>', 'Override default network')
10
+ .action(async (options, command) => {
11
+ const spinner = ora({ text: 'Loading configuration...', indent: 2 }).start();
12
+ let config;
13
+ try {
14
+ config = loadSignerConfig(command.optsWithGlobals().signer);
15
+ }
16
+ catch (error) {
17
+ const message = error instanceof Error ? error.message : 'Unknown error';
18
+ spinner.fail(message);
19
+ process.exitCode = 1;
20
+ return;
21
+ }
22
+ const network = options.network ?? config.network;
23
+ if (!network) {
24
+ spinner.fail('No network specified. Use --network <name> or set it in signer config.');
25
+ process.exitCode = 1;
26
+ return;
27
+ }
28
+ spinner.text = `Fetching balance on ${network}...`;
29
+ const { api } = createClientFromConfig(config);
30
+ try {
31
+ const signer = await api.getDefaultSigner();
32
+ const bal = await api.getBalance(signer.id, network);
33
+ spinner.succeed(`Balance on ${network}`);
34
+ console.log('');
35
+ console.log(` ${chalk.bold(signer.name)}`);
36
+ console.log(` Address: ${brand(signer.ethAddress)}`);
37
+ if (bal.balances.length === 0) {
38
+ console.log(` ${warn(' No balance data available')}`);
39
+ }
40
+ else {
41
+ for (const nb of bal.balances) {
42
+ const ethDisplay = formatUnits(BigInt(nb.balance), 18);
43
+ const label = ` ${nb.network}:`;
44
+ if (nb.rpcError) {
45
+ console.log(`${label.padEnd(20)}${warn('RPC error')}`);
46
+ }
47
+ else {
48
+ console.log(`${label.padEnd(20)}${chalk.bold(ethDisplay)} ETH`);
49
+ }
50
+ }
51
+ }
52
+ console.log(` Status: ${statusColor(signer.status)}`);
53
+ const explorerUrl = await api.getExplorerTxUrl(network, signer.ethAddress);
54
+ if (explorerUrl) {
55
+ console.log(` Explorer: ${dim(explorerUrl)}`);
56
+ }
57
+ console.log('');
58
+ }
59
+ catch (error) {
60
+ const message = error instanceof Error ? error.message : 'Unknown error';
61
+ spinner.fail(`Failed to fetch balance: ${message}`);
62
+ process.exitCode = 1;
63
+ }
64
+ });
65
+ //# sourceMappingURL=balance.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance.command.js","sourceRoot":"","sources":["../../../src/cli/commands/balance.command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const deployCommand: Command;
3
+ //# sourceMappingURL=deploy.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.command.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/deploy.command.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAA+B,MAAM,WAAW,CAAC;AAiCjE,eAAO,MAAM,aAAa,SA6FxB,CAAC"}
@@ -0,0 +1,101 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import chalk from 'chalk';
3
+ import { Command } from 'commander';
4
+ import ora from 'ora';
5
+ import { createClientFromConfig, createSignerFromConfig, loadSignerConfig, } from '../../lib/config.js';
6
+ import { brand, danger, dim } from '../theme.js';
7
+ function isHexString(value) {
8
+ const clean = value.startsWith('0x') ? value.slice(2) : value;
9
+ return /^[0-9a-fA-F]*$/.test(clean) && clean.length > 0 && clean.length % 2 === 0;
10
+ }
11
+ function loadBytecode(bytecodeArg) {
12
+ if (existsSync(bytecodeArg)) {
13
+ const content = readFileSync(bytecodeArg, 'utf-8').trim();
14
+ if (!isHexString(content)) {
15
+ throw new Error('File does not contain valid hex bytecode.');
16
+ }
17
+ return content.startsWith('0x') ? content : `0x${content}`;
18
+ }
19
+ if (!isHexString(bytecodeArg)) {
20
+ throw new Error('Bytecode must be a valid hex string or a path to a file containing hex bytecode.');
21
+ }
22
+ return bytecodeArg.startsWith('0x') ? bytecodeArg : `0x${bytecodeArg}`;
23
+ }
24
+ export const deployCommand = new Command('deploy')
25
+ .description('Deploy a smart contract')
26
+ .argument('<bytecode>', 'Contract bytecode (hex string or file path)')
27
+ .option('-n, --network <network>', 'Override default network')
28
+ .option('--constructor-args <args>', 'ABI-encoded constructor arguments (hex)')
29
+ .action(async (bytecodeArg, options, command) => {
30
+ let config;
31
+ try {
32
+ config = loadSignerConfig(command.optsWithGlobals().signer);
33
+ }
34
+ catch (error) {
35
+ const message = error instanceof Error ? error.message : 'Unknown error';
36
+ console.error(danger(`\n Error: ${message}\n`));
37
+ process.exitCode = 1;
38
+ return;
39
+ }
40
+ let bytecode;
41
+ try {
42
+ bytecode = loadBytecode(bytecodeArg);
43
+ }
44
+ catch (error) {
45
+ const message = error instanceof Error ? error.message : 'Unknown error';
46
+ console.error(danger(`\n Error: ${message}\n`));
47
+ process.exitCode = 1;
48
+ return;
49
+ }
50
+ if (options.constructorArgs) {
51
+ const args = options.constructorArgs.startsWith('0x')
52
+ ? options.constructorArgs.slice(2)
53
+ : options.constructorArgs;
54
+ bytecode = `${bytecode}${args}`;
55
+ }
56
+ const network = options.network ?? config.network;
57
+ if (!network) {
58
+ console.error(danger('\n Error: No network specified. Use --network <name>.\n'));
59
+ process.exitCode = 1;
60
+ return;
61
+ }
62
+ const { api } = createClientFromConfig(config);
63
+ console.log(chalk.bold('\n Contract Deployment'));
64
+ console.log(dim(` ${'-'.repeat(40)}`));
65
+ console.log(` Network: ${network}`);
66
+ console.log(` Bytecode: ${dim(bytecode.slice(0, 24))}...${dim(`(${bytecode.length} chars)`)}`);
67
+ if (options.constructorArgs) {
68
+ console.log(` Args: ${dim(options.constructorArgs.slice(0, 24))}...`);
69
+ }
70
+ console.log('');
71
+ const spinner = ora({ text: 'Loading keyshare...', indent: 2 }).start();
72
+ let signer;
73
+ try {
74
+ signer = await createSignerFromConfig(config);
75
+ spinner.text = 'Deploying contract (threshold ECDSA)...';
76
+ const transaction = {
77
+ to: null,
78
+ data: bytecode,
79
+ value: '0',
80
+ network,
81
+ };
82
+ const result = await signer.signTransaction(transaction);
83
+ spinner.succeed('Contract deployed successfully');
84
+ console.log('');
85
+ console.log(` ${chalk.bold('Tx Hash:')} ${brand(result.txHash)}`);
86
+ const txExplorer = await api.getExplorerTxUrl(network, result.txHash);
87
+ if (txExplorer) {
88
+ console.log(` ${chalk.bold('Tx URL:')} ${dim(txExplorer)}`);
89
+ }
90
+ console.log('');
91
+ }
92
+ catch (error) {
93
+ const message = error instanceof Error ? error.message : 'Unknown error';
94
+ spinner.fail(`Deployment failed: ${message}`);
95
+ process.exitCode = 1;
96
+ }
97
+ finally {
98
+ signer?.destroy();
99
+ }
100
+ });
101
+ //# sourceMappingURL=deploy.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.command.js","sourceRoot":"","sources":["../../../src/cli/commands/deploy.command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const infoCommand: Command;
3
+ //# sourceMappingURL=info.command.d.ts.map