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.
- package/LICENSE +199 -0
- package/README.md +249 -0
- package/dist/cli/commands/admin.command.d.ts +3 -0
- package/dist/cli/commands/admin.command.d.ts.map +1 -0
- package/dist/cli/commands/admin.command.js +415 -0
- package/dist/cli/commands/admin.command.js.map +1 -0
- package/dist/cli/commands/balance.command.d.ts +3 -0
- package/dist/cli/commands/balance.command.d.ts.map +1 -0
- package/dist/cli/commands/balance.command.js +65 -0
- package/dist/cli/commands/balance.command.js.map +1 -0
- package/dist/cli/commands/deploy.command.d.ts +3 -0
- package/dist/cli/commands/deploy.command.d.ts.map +1 -0
- package/dist/cli/commands/deploy.command.js +101 -0
- package/dist/cli/commands/deploy.command.js.map +1 -0
- package/dist/cli/commands/info.command.d.ts +3 -0
- package/dist/cli/commands/info.command.d.ts.map +1 -0
- package/dist/cli/commands/info.command.js +30 -0
- package/dist/cli/commands/info.command.js.map +1 -0
- package/dist/cli/commands/init.command.d.ts +3 -0
- package/dist/cli/commands/init.command.d.ts.map +1 -0
- package/dist/cli/commands/init.command.js +364 -0
- package/dist/cli/commands/init.command.js.map +1 -0
- package/dist/cli/commands/link.command.d.ts +3 -0
- package/dist/cli/commands/link.command.d.ts.map +1 -0
- package/dist/cli/commands/link.command.js +111 -0
- package/dist/cli/commands/link.command.js.map +1 -0
- package/dist/cli/commands/login.command.d.ts +4 -0
- package/dist/cli/commands/login.command.d.ts.map +1 -0
- package/dist/cli/commands/login.command.js +149 -0
- package/dist/cli/commands/login.command.js.map +1 -0
- package/dist/cli/commands/network.command.d.ts +3 -0
- package/dist/cli/commands/network.command.d.ts.map +1 -0
- package/dist/cli/commands/network.command.js +206 -0
- package/dist/cli/commands/network.command.js.map +1 -0
- package/dist/cli/commands/proxy.command.d.ts +3 -0
- package/dist/cli/commands/proxy.command.d.ts.map +1 -0
- package/dist/cli/commands/proxy.command.js +248 -0
- package/dist/cli/commands/proxy.command.js.map +1 -0
- package/dist/cli/commands/receive.command.d.ts +3 -0
- package/dist/cli/commands/receive.command.d.ts.map +1 -0
- package/dist/cli/commands/receive.command.js +360 -0
- package/dist/cli/commands/receive.command.js.map +1 -0
- package/dist/cli/commands/send.command.d.ts +3 -0
- package/dist/cli/commands/send.command.d.ts.map +1 -0
- package/dist/cli/commands/send.command.js +83 -0
- package/dist/cli/commands/send.command.js.map +1 -0
- package/dist/cli/commands/sign.command.d.ts +3 -0
- package/dist/cli/commands/sign.command.d.ts.map +1 -0
- package/dist/cli/commands/sign.command.js +53 -0
- package/dist/cli/commands/sign.command.js.map +1 -0
- package/dist/cli/commands/status.command.d.ts +3 -0
- package/dist/cli/commands/status.command.d.ts.map +1 -0
- package/dist/cli/commands/status.command.js +109 -0
- package/dist/cli/commands/status.command.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +50 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/theme.d.ts +35 -0
- package/dist/cli/theme.d.ts.map +1 -0
- package/dist/cli/theme.js +96 -0
- package/dist/cli/theme.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/__tests__/transfer-crypto.test.d.ts +2 -0
- package/dist/lib/__tests__/transfer-crypto.test.d.ts.map +1 -0
- package/dist/lib/__tests__/transfer-crypto.test.js +151 -0
- package/dist/lib/__tests__/transfer-crypto.test.js.map +1 -0
- package/dist/lib/authenticated-fetch.d.ts +6 -0
- package/dist/lib/authenticated-fetch.d.ts.map +1 -0
- package/dist/lib/authenticated-fetch.js +74 -0
- package/dist/lib/authenticated-fetch.js.map +1 -0
- package/dist/lib/config.d.ts +42 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +163 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/erc20-abi.d.ts +43 -0
- package/dist/lib/erc20-abi.d.ts.map +1 -0
- package/dist/lib/erc20-abi.js +34 -0
- package/dist/lib/erc20-abi.js.map +1 -0
- package/dist/lib/errors.d.ts +12 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +23 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/keychain.d.ts +11 -0
- package/dist/lib/keychain.d.ts.map +1 -0
- package/dist/lib/keychain.js +216 -0
- package/dist/lib/keychain.js.map +1 -0
- package/dist/lib/policy-conversions.d.ts +19 -0
- package/dist/lib/policy-conversions.d.ts.map +1 -0
- package/dist/lib/policy-conversions.js +62 -0
- package/dist/lib/policy-conversions.js.map +1 -0
- package/dist/lib/signer-manager.d.ts +17 -0
- package/dist/lib/signer-manager.d.ts.map +1 -0
- package/dist/lib/signer-manager.js +80 -0
- package/dist/lib/signer-manager.js.map +1 -0
- package/dist/lib/transfer-crypto.d.ts +36 -0
- package/dist/lib/transfer-crypto.d.ts.map +1 -0
- package/dist/lib/transfer-crypto.js +109 -0
- package/dist/lib/transfer-crypto.js.map +1 -0
- package/dist/lib/x402-client.d.ts +63 -0
- package/dist/lib/x402-client.d.ts.map +1 -0
- package/dist/lib/x402-client.js +236 -0
- package/dist/lib/x402-client.js.map +1 -0
- package/dist/mcp/index.d.ts +6 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +73 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/tools/call-contract.d.ts +4 -0
- package/dist/mcp/tools/call-contract.d.ts.map +1 -0
- package/dist/mcp/tools/call-contract.js +68 -0
- package/dist/mcp/tools/call-contract.js.map +1 -0
- package/dist/mcp/tools/execute.d.ts +4 -0
- package/dist/mcp/tools/execute.d.ts.map +1 -0
- package/dist/mcp/tools/execute.js +59 -0
- package/dist/mcp/tools/execute.js.map +1 -0
- package/dist/mcp/tools/get-audit-log.d.ts +4 -0
- package/dist/mcp/tools/get-audit-log.d.ts.map +1 -0
- package/dist/mcp/tools/get-audit-log.js +85 -0
- package/dist/mcp/tools/get-audit-log.js.map +1 -0
- package/dist/mcp/tools/get-balances.d.ts +4 -0
- package/dist/mcp/tools/get-balances.d.ts.map +1 -0
- package/dist/mcp/tools/get-balances.js +84 -0
- package/dist/mcp/tools/get-balances.js.map +1 -0
- package/dist/mcp/tools/get-status.d.ts +4 -0
- package/dist/mcp/tools/get-status.d.ts.map +1 -0
- package/dist/mcp/tools/get-status.js +66 -0
- package/dist/mcp/tools/get-status.js.map +1 -0
- package/dist/mcp/tools/list-networks.d.ts +4 -0
- package/dist/mcp/tools/list-networks.d.ts.map +1 -0
- package/dist/mcp/tools/list-networks.js +36 -0
- package/dist/mcp/tools/list-networks.js.map +1 -0
- package/dist/mcp/tools/list-signers.d.ts +4 -0
- package/dist/mcp/tools/list-signers.d.ts.map +1 -0
- package/dist/mcp/tools/list-signers.js +36 -0
- package/dist/mcp/tools/list-signers.js.map +1 -0
- package/dist/mcp/tools/read-contract.d.ts +4 -0
- package/dist/mcp/tools/read-contract.d.ts.map +1 -0
- package/dist/mcp/tools/read-contract.js +62 -0
- package/dist/mcp/tools/read-contract.js.map +1 -0
- package/dist/mcp/tools/resolve-address.d.ts +4 -0
- package/dist/mcp/tools/resolve-address.d.ts.map +1 -0
- package/dist/mcp/tools/resolve-address.js +37 -0
- package/dist/mcp/tools/resolve-address.js.map +1 -0
- package/dist/mcp/tools/send-eth.d.ts +4 -0
- package/dist/mcp/tools/send-eth.d.ts.map +1 -0
- package/dist/mcp/tools/send-eth.js +52 -0
- package/dist/mcp/tools/send-eth.js.map +1 -0
- package/dist/mcp/tools/send-token.d.ts +4 -0
- package/dist/mcp/tools/send-token.d.ts.map +1 -0
- package/dist/mcp/tools/send-token.js +102 -0
- package/dist/mcp/tools/send-token.js.map +1 -0
- package/dist/mcp/tools/sign-message.d.ts +4 -0
- package/dist/mcp/tools/sign-message.d.ts.map +1 -0
- package/dist/mcp/tools/sign-message.js +33 -0
- package/dist/mcp/tools/sign-message.js.map +1 -0
- package/dist/mcp/tools/sign-typed-data.d.ts +4 -0
- package/dist/mcp/tools/sign-typed-data.d.ts.map +1 -0
- package/dist/mcp/tools/sign-typed-data.js +48 -0
- package/dist/mcp/tools/sign-typed-data.js.map +1 -0
- package/dist/mcp/tools/simulate.d.ts +4 -0
- package/dist/mcp/tools/simulate.d.ts.map +1 -0
- package/dist/mcp/tools/simulate.js +54 -0
- package/dist/mcp/tools/simulate.js.map +1 -0
- package/dist/mcp/tools/wallet-overview.d.ts +4 -0
- package/dist/mcp/tools/wallet-overview.d.ts.map +1 -0
- package/dist/mcp/tools/wallet-overview.js +109 -0
- package/dist/mcp/tools/wallet-overview.js.map +1 -0
- package/dist/mcp/tools/x402-check.d.ts +3 -0
- package/dist/mcp/tools/x402-check.d.ts.map +1 -0
- package/dist/mcp/tools/x402-check.js +44 -0
- package/dist/mcp/tools/x402-check.js.map +1 -0
- package/dist/mcp/tools/x402-discover.d.ts +3 -0
- package/dist/mcp/tools/x402-discover.d.ts.map +1 -0
- package/dist/mcp/tools/x402-discover.js +42 -0
- package/dist/mcp/tools/x402-discover.js.map +1 -0
- package/dist/mcp/tools/x402-fetch.d.ts +4 -0
- package/dist/mcp/tools/x402-fetch.d.ts.map +1 -0
- package/dist/mcp/tools/x402-fetch.js +45 -0
- package/dist/mcp/tools/x402-fetch.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.command.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/info.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA+B,MAAM,WAAW,CAAC;AAIjE,eAAO,MAAM,WAAW,SA2BtB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { getSignerConfigPath, loadSignerConfig } from '../../lib/config.js';
|
|
3
|
+
import { brand, brandBold, dim, failMark } from '../theme.js';
|
|
4
|
+
export const infoCommand = new Command('info')
|
|
5
|
+
.description('Show full wallet details (copyable)')
|
|
6
|
+
.argument('[name]', 'Wallet name')
|
|
7
|
+
.action(async (name, _options, command) => {
|
|
8
|
+
let config;
|
|
9
|
+
try {
|
|
10
|
+
config = loadSignerConfig(name ?? command.optsWithGlobals().signer);
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
14
|
+
console.error(`\n ${failMark(message)}\n`);
|
|
15
|
+
process.exitCode = 1;
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
console.log('');
|
|
19
|
+
console.log(` ${brand('●')} ${brandBold(config.signerName)}`);
|
|
20
|
+
console.log('');
|
|
21
|
+
console.log(` ${dim('Address')} ${config.ethAddress}`);
|
|
22
|
+
console.log(` ${dim('API Key')} ${config.apiKey.slice(0, 12)}…`);
|
|
23
|
+
console.log(` ${dim('Policy')} ${config.serverUrl}`);
|
|
24
|
+
if (config.signerId) {
|
|
25
|
+
console.log(` ${dim('Account ID')} ${config.signerId}`);
|
|
26
|
+
}
|
|
27
|
+
console.log(` ${dim('Config')} ${getSignerConfigPath(config.signerName)}`);
|
|
28
|
+
console.log('');
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=info.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.command.js","sourceRoot":"","sources":["../../../src/cli/commands/info.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA+B,MAAM,WAAW,CAAC;AACjE,OAAO,EAAqB,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC5C,WAAW,CAAC,qCAAqC,CAAC;KAClD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;KACjC,MAAM,CACN,KAAK,EAAE,IAAwB,EAAE,QAAiC,EAAE,OAAoB,EAAE,EAAE;IAC3F,IAAI,MAAoB,CAAC;IACzB,IAAI,CAAC;QACJ,MAAM,GAAG,gBAAgB,CAAC,IAAI,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,OAAO,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACR,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,SAAS,CAAC,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,SAAS,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,QAAQ,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAC1D,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,QAAQ,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACjB,CAAC,CACD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.command.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.command.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoEpC,eAAO,MAAM,WAAW,SAwDrB,CAAC"}
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { createInterface } from 'node:readline';
|
|
3
|
+
import { input, password, select } from '@inquirer/prompts';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import ora from 'ora';
|
|
7
|
+
import { createClientFromConfig, getDefaultSignerName, getSignerConfigPath, listSigners, loadSignerConfig, saveSignerConfig, setDefaultSigner, validateSignerName, } from '../../lib/config.js';
|
|
8
|
+
import { getSession, isKeychainAvailable, storeUserShare } from '../../lib/keychain.js';
|
|
9
|
+
import { BRAND_BANNER, brand, brandBold, brandDot, dim, failMark, hint, promptTheme, section, success, successMark, } from '../theme.js';
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// Visual helpers
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape stripping is intentional
|
|
14
|
+
const ANSI_RE = /\u001B\[[0-9;]*m/g;
|
|
15
|
+
function pad(str, width) {
|
|
16
|
+
const visible = str.replace(ANSI_RE, '');
|
|
17
|
+
return str + ' '.repeat(Math.max(0, width - visible.length));
|
|
18
|
+
}
|
|
19
|
+
function fmtAddr(address) {
|
|
20
|
+
if (!address || address.length < 10)
|
|
21
|
+
return dim('—');
|
|
22
|
+
return dim(`${address.slice(0, 6)}…${address.slice(-4)}`);
|
|
23
|
+
}
|
|
24
|
+
function walletCard(name, address, extra) {
|
|
25
|
+
console.log('');
|
|
26
|
+
console.log(` ${brand('●')} ${brandBold(name)}`);
|
|
27
|
+
console.log(` ${dim(address)}`);
|
|
28
|
+
if (extra)
|
|
29
|
+
console.log(` ${dim(extra)}`);
|
|
30
|
+
}
|
|
31
|
+
function step(icon, text) {
|
|
32
|
+
console.log(` ${icon} ${text}`);
|
|
33
|
+
}
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
// Command
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
export const initCommand = new Command('init')
|
|
38
|
+
.description('Set up your AgentaOS wallet')
|
|
39
|
+
.action(async () => {
|
|
40
|
+
console.log(BRAND_BANNER);
|
|
41
|
+
try {
|
|
42
|
+
const existing = listSigners();
|
|
43
|
+
const defaultName = getDefaultSignerName();
|
|
44
|
+
const choices = [
|
|
45
|
+
{
|
|
46
|
+
name: 'Create a new wallet',
|
|
47
|
+
value: 'create',
|
|
48
|
+
description: 'Get started — takes about 10 seconds',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'I already have a wallet',
|
|
52
|
+
value: 'import',
|
|
53
|
+
description: 'Connect using an API Key and API Secret',
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
if (existing.length > 1) {
|
|
57
|
+
choices.push({
|
|
58
|
+
name: 'Switch active wallet',
|
|
59
|
+
value: 'switch',
|
|
60
|
+
description: `Current: ${defaultName ?? 'none'}`,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
const choice = await select({
|
|
64
|
+
message: 'What would you like to do?',
|
|
65
|
+
choices,
|
|
66
|
+
loop: false,
|
|
67
|
+
theme: promptTheme,
|
|
68
|
+
});
|
|
69
|
+
switch (choice) {
|
|
70
|
+
case 'create':
|
|
71
|
+
await handleCreate();
|
|
72
|
+
break;
|
|
73
|
+
case 'import':
|
|
74
|
+
await handleImport();
|
|
75
|
+
break;
|
|
76
|
+
case 'switch':
|
|
77
|
+
await handleSwitch();
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
if (error instanceof Error && error.name === 'ExitPromptError') {
|
|
83
|
+
console.log(dim('\n Cancelled.\n'));
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
87
|
+
console.error(`\n ${failMark(message)}\n`);
|
|
88
|
+
process.exitCode = 1;
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
// ---------------------------------------------------------------------------
|
|
92
|
+
// Create
|
|
93
|
+
// ---------------------------------------------------------------------------
|
|
94
|
+
async function handleCreate() {
|
|
95
|
+
// ── 0. Require login ─────────────────────────────────────────────────
|
|
96
|
+
const token = await getSession();
|
|
97
|
+
if (!token) {
|
|
98
|
+
console.log('');
|
|
99
|
+
console.log(` ${failMark(`Not logged in. Run ${chalk.bold('agenta login')} first.`)}`);
|
|
100
|
+
console.log('');
|
|
101
|
+
process.exitCode = 1;
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
// ── 1. Basics ─────────────────────────────────────────────────────────
|
|
105
|
+
section('Basics');
|
|
106
|
+
const name = await input({
|
|
107
|
+
message: 'Wallet name',
|
|
108
|
+
theme: promptTheme,
|
|
109
|
+
validate: (v) => {
|
|
110
|
+
const err = validateSignerName(v);
|
|
111
|
+
if (err)
|
|
112
|
+
return err;
|
|
113
|
+
if (existsSync(getSignerConfigPath(v)))
|
|
114
|
+
return `"${v}" already exists. Pick a different name.`;
|
|
115
|
+
return true;
|
|
116
|
+
},
|
|
117
|
+
});
|
|
118
|
+
const serverUrl = process.env.AGENTA_SERVER ?? 'https://api.agentaos.ai';
|
|
119
|
+
// ── 2. Security ───────────────────────────────────────────────────────
|
|
120
|
+
section('Security');
|
|
121
|
+
hint('Your recovery key lets you manage policies and sign without the server.');
|
|
122
|
+
const keychainOk = await isKeychainAvailable();
|
|
123
|
+
let storage = 'file';
|
|
124
|
+
if (keychainOk) {
|
|
125
|
+
console.log('');
|
|
126
|
+
storage = await select({
|
|
127
|
+
message: 'Recovery key storage',
|
|
128
|
+
choices: [
|
|
129
|
+
{
|
|
130
|
+
name: 'System keychain (recommended)',
|
|
131
|
+
value: 'keychain',
|
|
132
|
+
description: 'Encrypted by your OS, Touch ID protected',
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: 'Local file',
|
|
136
|
+
value: 'file',
|
|
137
|
+
description: `Saved in ${getSignerConfigPath(name).replace(/\.json$/, '.user-share')}`,
|
|
138
|
+
},
|
|
139
|
+
],
|
|
140
|
+
loop: false,
|
|
141
|
+
theme: promptTheme,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
hint('System keychain not available — recovery key will be saved as a local file.');
|
|
146
|
+
}
|
|
147
|
+
// ── 3. Generate ───────────────────────────────────────────────────────
|
|
148
|
+
section('Creating wallet');
|
|
149
|
+
hint('Running distributed key generation — this takes a few seconds.');
|
|
150
|
+
console.log('');
|
|
151
|
+
const spinner = ora({ text: 'Generating wallet…', indent: 2 }).start();
|
|
152
|
+
const url = `${serverUrl.replace(/\/+$/, '')}/api/v1/signers`;
|
|
153
|
+
const response = await fetch(url, {
|
|
154
|
+
method: 'POST',
|
|
155
|
+
headers: {
|
|
156
|
+
'Content-Type': 'application/json',
|
|
157
|
+
Authorization: `Bearer ${token}`,
|
|
158
|
+
},
|
|
159
|
+
body: JSON.stringify({ name }),
|
|
160
|
+
signal: AbortSignal.timeout(120_000),
|
|
161
|
+
});
|
|
162
|
+
if (!response.ok) {
|
|
163
|
+
const text = await response.text();
|
|
164
|
+
spinner.fail('Failed');
|
|
165
|
+
throw new Error(`Server returned ${response.status}: ${text}`);
|
|
166
|
+
}
|
|
167
|
+
const result = (await response.json());
|
|
168
|
+
spinner.succeed('Wallet created');
|
|
169
|
+
// ── Save everything ───────────────────────────────────────────────────
|
|
170
|
+
// Store user share FIRST — if this fails, we haven't written config yet.
|
|
171
|
+
// Once config is saved, the signer is "registered" locally.
|
|
172
|
+
await storeUserShare(name, result.userShare, storage);
|
|
173
|
+
const config = {
|
|
174
|
+
version: 1,
|
|
175
|
+
serverUrl,
|
|
176
|
+
apiKey: result.apiKey,
|
|
177
|
+
apiSecret: result.signerShare,
|
|
178
|
+
signerName: name,
|
|
179
|
+
ethAddress: result.ethAddress,
|
|
180
|
+
signerId: result.signerId,
|
|
181
|
+
createdAt: new Date().toISOString(),
|
|
182
|
+
};
|
|
183
|
+
saveSignerConfig(name, config);
|
|
184
|
+
setDefaultSigner(name);
|
|
185
|
+
// ── Summary ───────────────────────────────────────────────────────────
|
|
186
|
+
walletCard(name, result.ethAddress, `API key: ${result.apiKey.slice(0, 16)}…`);
|
|
187
|
+
console.log('');
|
|
188
|
+
step(successMark(storage === 'keychain' ? 'Recovery key → system keychain' : 'Recovery key → local file'), '');
|
|
189
|
+
step(successMark('Set as active wallet'), '');
|
|
190
|
+
console.log('');
|
|
191
|
+
console.log(` ${dim(`Config: ${getSignerConfigPath(name)}`)}`);
|
|
192
|
+
console.log('');
|
|
193
|
+
console.log(` ${success('Done!')} Run ${chalk.bold('agenta status')} to see your wallets.`);
|
|
194
|
+
console.log(` Run ${chalk.bold('agenta admin policies')} to manage policies.`);
|
|
195
|
+
console.log('');
|
|
196
|
+
}
|
|
197
|
+
// ---------------------------------------------------------------------------
|
|
198
|
+
// Secret input — hidden with live character counter
|
|
199
|
+
// ---------------------------------------------------------------------------
|
|
200
|
+
function readSecret(label) {
|
|
201
|
+
return new Promise((resolve) => {
|
|
202
|
+
const rl = createInterface({ input: process.stdin, terminal: false });
|
|
203
|
+
// Mute stdin echo so the huge base64 blob never renders
|
|
204
|
+
if (process.stdin.isTTY)
|
|
205
|
+
process.stdin.setRawMode(true);
|
|
206
|
+
process.stdout.write(` ${chalk.bold('?')} ${chalk.bold(label)}: `);
|
|
207
|
+
let buf = '';
|
|
208
|
+
const onData = (key) => {
|
|
209
|
+
const ch = key.toString();
|
|
210
|
+
// Enter
|
|
211
|
+
if (ch === '\r' || ch === '\n') {
|
|
212
|
+
if (process.stdin.isTTY)
|
|
213
|
+
process.stdin.setRawMode(false);
|
|
214
|
+
process.stdin.removeListener('data', onData);
|
|
215
|
+
rl.close();
|
|
216
|
+
// Clear the counter line and move to next line
|
|
217
|
+
process.stdout.write('\r\x1b[K');
|
|
218
|
+
process.stdout.write(` ${chalk.bold('?')} ${chalk.bold(label)}: ${chalk.dim(`[${buf.length.toLocaleString()} chars]`)}\n`);
|
|
219
|
+
resolve(buf);
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
// Ctrl+C
|
|
223
|
+
if (ch === '\x03') {
|
|
224
|
+
if (process.stdin.isTTY)
|
|
225
|
+
process.stdin.setRawMode(false);
|
|
226
|
+
rl.close();
|
|
227
|
+
process.exit(1);
|
|
228
|
+
}
|
|
229
|
+
// Backspace
|
|
230
|
+
if (ch === '\x7f' || ch === '\b') {
|
|
231
|
+
buf = buf.slice(0, -1);
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
buf += ch;
|
|
235
|
+
}
|
|
236
|
+
// Rewrite the prompt with live char count
|
|
237
|
+
process.stdout.write('\r\x1b[K');
|
|
238
|
+
process.stdout.write(` ${chalk.bold('?')} ${chalk.bold(label)}: ${chalk.dim(`[${buf.length.toLocaleString()} chars]`)}`);
|
|
239
|
+
};
|
|
240
|
+
process.stdin.on('data', onData);
|
|
241
|
+
process.stdin.resume();
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
// ---------------------------------------------------------------------------
|
|
245
|
+
// Import
|
|
246
|
+
// ---------------------------------------------------------------------------
|
|
247
|
+
async function handleImport() {
|
|
248
|
+
// ── 1. Basics ─────────────────────────────────────────────────────────
|
|
249
|
+
section('Basics');
|
|
250
|
+
const name = await input({
|
|
251
|
+
message: 'Wallet name',
|
|
252
|
+
theme: promptTheme,
|
|
253
|
+
validate: (v) => {
|
|
254
|
+
const err = validateSignerName(v);
|
|
255
|
+
if (err)
|
|
256
|
+
return err;
|
|
257
|
+
if (existsSync(getSignerConfigPath(v)))
|
|
258
|
+
return `"${v}" already exists. Pick a different name.`;
|
|
259
|
+
return true;
|
|
260
|
+
},
|
|
261
|
+
});
|
|
262
|
+
const serverUrl = process.env.AGENTA_SERVER ?? 'https://api.agentaos.ai';
|
|
263
|
+
// ── 2. Credentials ───────────────────────────────────────────────────
|
|
264
|
+
section('Credentials');
|
|
265
|
+
hint('Find your API Key and API Secret in AgentaOS.');
|
|
266
|
+
console.log('');
|
|
267
|
+
const apiKey = await input({
|
|
268
|
+
message: 'API Key',
|
|
269
|
+
theme: promptTheme,
|
|
270
|
+
validate: (v) => (v.trim() ? true : 'API Key is required.'),
|
|
271
|
+
});
|
|
272
|
+
console.log('');
|
|
273
|
+
const apiSecret = await readSecret('API Secret');
|
|
274
|
+
if (!apiSecret)
|
|
275
|
+
throw new Error('API Secret is required.');
|
|
276
|
+
console.log(` ${chalk.green('✓')} Received ${apiSecret.length.toLocaleString()} chars ${chalk.dim(`(${apiSecret.slice(0, 8)}…${apiSecret.slice(-4)})`)}`);
|
|
277
|
+
// ── 3. Connect ────────────────────────────────────────────────────────
|
|
278
|
+
section('Connecting');
|
|
279
|
+
const spinner = ora({ text: 'Verifying with server…', indent: 2 }).start();
|
|
280
|
+
let signerId;
|
|
281
|
+
let ethAddress = '';
|
|
282
|
+
try {
|
|
283
|
+
const { api } = createClientFromConfig({ serverUrl, apiKey });
|
|
284
|
+
const signers = await api.listSigners();
|
|
285
|
+
const [s] = signers;
|
|
286
|
+
if (s) {
|
|
287
|
+
signerId = s.id;
|
|
288
|
+
ethAddress = s.ethAddress;
|
|
289
|
+
spinner.succeed('Connected');
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
spinner.warn('Connected — no wallet found for this API key');
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
catch {
|
|
296
|
+
spinner.warn('Server unreachable — config saved, you can connect later');
|
|
297
|
+
}
|
|
298
|
+
const config = {
|
|
299
|
+
version: 1,
|
|
300
|
+
serverUrl,
|
|
301
|
+
apiKey,
|
|
302
|
+
apiSecret,
|
|
303
|
+
signerName: name,
|
|
304
|
+
ethAddress,
|
|
305
|
+
signerId,
|
|
306
|
+
createdAt: new Date().toISOString(),
|
|
307
|
+
};
|
|
308
|
+
saveSignerConfig(name, config);
|
|
309
|
+
setDefaultSigner(name);
|
|
310
|
+
if (ethAddress) {
|
|
311
|
+
walletCard(name, ethAddress);
|
|
312
|
+
}
|
|
313
|
+
console.log('');
|
|
314
|
+
step(successMark('Config saved'), '');
|
|
315
|
+
step(successMark('Set as active wallet'), '');
|
|
316
|
+
console.log('');
|
|
317
|
+
console.log(` ${dim(`Config: ${getSignerConfigPath(name)}`)}`);
|
|
318
|
+
console.log('');
|
|
319
|
+
console.log(` ${success('Done!')} Run ${chalk.bold('agenta status')} to see your wallets.`);
|
|
320
|
+
console.log('');
|
|
321
|
+
}
|
|
322
|
+
// ---------------------------------------------------------------------------
|
|
323
|
+
// Switch
|
|
324
|
+
// ---------------------------------------------------------------------------
|
|
325
|
+
async function handleSwitch() {
|
|
326
|
+
const current = listSigners();
|
|
327
|
+
if (current.length === 0) {
|
|
328
|
+
console.log(chalk.yellow('\n No wallets found. Create one first.\n'));
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
const defaultName = getDefaultSignerName();
|
|
332
|
+
const nw = Math.max(4, ...current.map((n) => n.length)) + 3;
|
|
333
|
+
const choices = current.map((name) => {
|
|
334
|
+
const isCurrent = name === defaultName;
|
|
335
|
+
let addr = '';
|
|
336
|
+
try {
|
|
337
|
+
const config = loadSignerConfig(name);
|
|
338
|
+
if (config.ethAddress)
|
|
339
|
+
addr = fmtAddr(config.ethAddress);
|
|
340
|
+
}
|
|
341
|
+
catch {
|
|
342
|
+
// ignore
|
|
343
|
+
}
|
|
344
|
+
const dot = brandDot(isCurrent);
|
|
345
|
+
const label = isCurrent ? brandBold(name) : name;
|
|
346
|
+
const tag = isCurrent ? dim(' (current)') : '';
|
|
347
|
+
return {
|
|
348
|
+
name: `${dot} ${pad(label, nw)} ${addr}${tag}`,
|
|
349
|
+
value: name,
|
|
350
|
+
};
|
|
351
|
+
});
|
|
352
|
+
const selected = await select({
|
|
353
|
+
message: 'Switch to',
|
|
354
|
+
choices,
|
|
355
|
+
default: defaultName ?? undefined,
|
|
356
|
+
loop: false,
|
|
357
|
+
theme: promptTheme,
|
|
358
|
+
});
|
|
359
|
+
setDefaultSigner(selected);
|
|
360
|
+
console.log('');
|
|
361
|
+
step(successMark(`${chalk.bold(selected)} is now active`), '');
|
|
362
|
+
console.log('');
|
|
363
|
+
}
|
|
364
|
+
//# sourceMappingURL=init.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.command.js","sourceRoot":"","sources":["../../../src/cli/commands/init.command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.command.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/link.command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,WAAW,SA2HrB,CAAC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import ora from 'ora';
|
|
4
|
+
import { loadSignerConfig, resolveSignerName } from '../../lib/config.js';
|
|
5
|
+
import { getSession, getUserShare } from '../../lib/keychain.js';
|
|
6
|
+
import { encryptShareForTransfer, generateTransferCode } from '../../lib/transfer-crypto.js';
|
|
7
|
+
import { brand, dim, failMark, hint, section, success } from '../theme.js';
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// agenta link <signer> — Export share to another device via 6-word code
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
export const linkCommand = new Command('link')
|
|
12
|
+
.description('Send recovery key to AgentaOS (via 6-word transfer code)')
|
|
13
|
+
.argument('[signer]', 'Signer name')
|
|
14
|
+
.option('--server <url>', 'Server URL override')
|
|
15
|
+
.action(async (signerArg, opts) => {
|
|
16
|
+
try {
|
|
17
|
+
// 1. Require session
|
|
18
|
+
const token = await getSession();
|
|
19
|
+
if (!token) {
|
|
20
|
+
console.error(`\n ${failMark(`Not logged in. Run ${chalk.bold('agenta login')} first.`)}\n`);
|
|
21
|
+
process.exitCode = 1;
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const signerName = resolveSignerName(signerArg);
|
|
25
|
+
const config = loadSignerConfig(signerName);
|
|
26
|
+
const signerId = config.signerId;
|
|
27
|
+
if (!signerId) {
|
|
28
|
+
throw new Error('No signer ID in config. Re-run `agenta init` or add signerId to config.');
|
|
29
|
+
}
|
|
30
|
+
const baseUrl = (opts.server ?? config.serverUrl).replace(/\/+$/, '');
|
|
31
|
+
// 2. Read user share from keychain (triggers biometric)
|
|
32
|
+
section('Send to AgentaOS');
|
|
33
|
+
hint('Reading recovery key from keychain — you may be prompted for biometric auth.');
|
|
34
|
+
console.log('');
|
|
35
|
+
const spinner = ora({ text: 'Reading recovery key…', indent: 2 }).start();
|
|
36
|
+
const userShare = await getUserShare(signerName);
|
|
37
|
+
if (!userShare) {
|
|
38
|
+
spinner.fail('No recovery key found');
|
|
39
|
+
console.error(dim('\n Was this wallet created via `agenta init`?\n'));
|
|
40
|
+
process.exitCode = 1;
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
spinner.succeed('Recovery key loaded');
|
|
44
|
+
// 3. Initiate transfer on server
|
|
45
|
+
const initSpinner = ora({ text: 'Creating transfer session…', indent: 2 }).start();
|
|
46
|
+
const initResponse = await fetch(`${baseUrl}/api/v1/auth/transfer/initiate`, {
|
|
47
|
+
method: 'POST',
|
|
48
|
+
headers: {
|
|
49
|
+
'content-type': 'application/json',
|
|
50
|
+
authorization: `Bearer ${token}`,
|
|
51
|
+
},
|
|
52
|
+
body: JSON.stringify({ signerId, direction: 'cli_to_dashboard' }),
|
|
53
|
+
signal: AbortSignal.timeout(15_000),
|
|
54
|
+
});
|
|
55
|
+
if (!initResponse.ok) {
|
|
56
|
+
const text = await initResponse.text();
|
|
57
|
+
initSpinner.fail('Failed to create transfer');
|
|
58
|
+
throw new Error(`Server returned ${initResponse.status}: ${text}`);
|
|
59
|
+
}
|
|
60
|
+
const { transferId, expiresAt } = (await initResponse.json());
|
|
61
|
+
initSpinner.succeed('Transfer session created');
|
|
62
|
+
// 4. Generate 6-word code + encrypt share
|
|
63
|
+
const encryptSpinner = ora({ text: 'Encrypting share…', indent: 2 }).start();
|
|
64
|
+
const { words, transferKey } = generateTransferCode(transferId);
|
|
65
|
+
const shareBytes = Buffer.from(userShare, 'base64');
|
|
66
|
+
const encryptedPayload = await encryptShareForTransfer(shareBytes, transferKey);
|
|
67
|
+
// Wipe sensitive material
|
|
68
|
+
shareBytes.fill(0);
|
|
69
|
+
transferKey.fill(0);
|
|
70
|
+
encryptSpinner.succeed('Share encrypted');
|
|
71
|
+
// 5. Upload encrypted payload
|
|
72
|
+
const uploadSpinner = ora({ text: 'Uploading…', indent: 2 }).start();
|
|
73
|
+
const uploadResponse = await fetch(`${baseUrl}/api/v1/auth/transfer/${transferId}`, {
|
|
74
|
+
method: 'PATCH',
|
|
75
|
+
headers: {
|
|
76
|
+
'content-type': 'application/json',
|
|
77
|
+
authorization: `Bearer ${token}`,
|
|
78
|
+
},
|
|
79
|
+
body: JSON.stringify({ encryptedPayload }),
|
|
80
|
+
signal: AbortSignal.timeout(15_000),
|
|
81
|
+
});
|
|
82
|
+
if (!uploadResponse.ok) {
|
|
83
|
+
const text = await uploadResponse.text();
|
|
84
|
+
uploadSpinner.fail('Failed to upload');
|
|
85
|
+
throw new Error(`Server returned ${uploadResponse.status}: ${text}`);
|
|
86
|
+
}
|
|
87
|
+
uploadSpinner.succeed('Transfer ready');
|
|
88
|
+
// 6. Display code
|
|
89
|
+
const expiresIn = Math.max(0, Math.round((new Date(expiresAt).getTime() - Date.now()) / 60_000));
|
|
90
|
+
console.log('');
|
|
91
|
+
console.log(` ${brand('Transfer code:')}`);
|
|
92
|
+
console.log('');
|
|
93
|
+
console.log(` ${chalk.bold.cyan(words.join(' '))}`);
|
|
94
|
+
console.log('');
|
|
95
|
+
console.log(` ${dim(`Expires in ${expiresIn} minutes. Enter this code in AgentaOS.`)}`);
|
|
96
|
+
console.log(` ${dim(`Open AgentaOS → click ${chalk.reset('Receive')} on the signer card.`)}`);
|
|
97
|
+
console.log('');
|
|
98
|
+
console.log(` ${success('✓')} ${dim('The code is single-use. Once claimed, it cannot be reused.')}`);
|
|
99
|
+
console.log('');
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
if (error instanceof Error && error.name === 'ExitPromptError') {
|
|
103
|
+
console.log(dim('\n Cancelled.\n'));
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
107
|
+
console.error(`\n ${failMark(message)}\n`);
|
|
108
|
+
process.exitCode = 1;
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
//# sourceMappingURL=link.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.command.js","sourceRoot":"","sources":["../../../src/cli/commands/link.command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.command.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/login.command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2CpC,eAAO,MAAM,YAAY,SAqFtB,CAAC;AAMJ,eAAO,MAAM,aAAa,SAmCvB,CAAC"}
|