tether-name-cli 1.0.5 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -6
- package/dist/cli.js +71 -66
- package/dist/cli.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -17,12 +17,12 @@ Or use without installing:
|
|
|
17
17
|
npx tether-name-cli verify
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
Requires Node.js >=
|
|
20
|
+
Requires Node.js >= 20.
|
|
21
21
|
|
|
22
22
|
## Quick Start
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
|
-
# Interactive setup — configure
|
|
25
|
+
# Interactive setup — configure your agent ID and generate a keypair
|
|
26
26
|
tether init
|
|
27
27
|
|
|
28
28
|
# Verify your agent identity
|
|
@@ -33,7 +33,7 @@ tether verify
|
|
|
33
33
|
|
|
34
34
|
### `tether init`
|
|
35
35
|
|
|
36
|
-
Interactive setup wizard. Walks you through configuring your
|
|
36
|
+
Interactive setup wizard. Walks you through configuring your agent ID, private key path, and optionally generates a new RSA-2048 key pair.
|
|
37
37
|
|
|
38
38
|
Saves configuration to `~/.tether/config.json`.
|
|
39
39
|
|
|
@@ -48,7 +48,7 @@ tether verify --json # Machine-readable output
|
|
|
48
48
|
|
|
49
49
|
### `tether status`
|
|
50
50
|
|
|
51
|
-
Show your current configuration —
|
|
51
|
+
Show your current configuration — agent ID (masked) and key file path.
|
|
52
52
|
|
|
53
53
|
```bash
|
|
54
54
|
tether status
|
|
@@ -84,21 +84,24 @@ tether check "a1b2c3d4-e5f6-7890-abcd-ef1234567890" --json
|
|
|
84
84
|
|
|
85
85
|
The CLI resolves configuration in this order (first wins):
|
|
86
86
|
|
|
87
|
+
1. **CLI flags** — `--agent-id`, `--key-path`, `--api-key`
|
|
88
|
+
2. **Environment variables** — `TETHER_CREDENTIAL_ID`, `TETHER_PRIVATE_KEY_PATH`, `TETHER_API_KEY`
|
|
87
89
|
3. **Config file** — `~/.tether/config.json` (created by `tether init`)
|
|
88
90
|
|
|
89
91
|
### Global Flags
|
|
90
92
|
|
|
91
93
|
| Flag | Description |
|
|
92
94
|
|---|---|
|
|
93
|
-
| `--
|
|
95
|
+
| `--agent-id <id>` | Override agent ID |
|
|
94
96
|
| `--key-path <path>` | Override private key file path |
|
|
97
|
+
| `--api-key <key>` | Override API key |
|
|
95
98
|
| `--verbose` | Enable debug output |
|
|
96
99
|
| `--json` | Machine-readable JSON output (on supported commands) |
|
|
97
100
|
|
|
98
101
|
## Example Workflow
|
|
99
102
|
|
|
100
103
|
```bash
|
|
101
|
-
# 1. Set up
|
|
104
|
+
# 1. Set up your agent
|
|
102
105
|
tether init
|
|
103
106
|
|
|
104
107
|
# 2. Check your config
|
package/dist/cli.js
CHANGED
|
@@ -6,42 +6,6 @@ import chalk7 from "chalk";
|
|
|
6
6
|
|
|
7
7
|
// src/utils/display.ts
|
|
8
8
|
import chalk from "chalk";
|
|
9
|
-
|
|
10
|
-
// src/config.ts
|
|
11
|
-
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
|
|
12
|
-
import { join } from "path";
|
|
13
|
-
import { homedir } from "os";
|
|
14
|
-
var CONFIG_DIR = join(homedir(), ".tether");
|
|
15
|
-
var API_URL = "https://api.tether.name";
|
|
16
|
-
var CONFIG_FILE = join(CONFIG_DIR, "config.json");
|
|
17
|
-
function getConfigPath() {
|
|
18
|
-
return CONFIG_FILE;
|
|
19
|
-
}
|
|
20
|
-
function loadConfigFile() {
|
|
21
|
-
try {
|
|
22
|
-
if (!existsSync(CONFIG_FILE)) {
|
|
23
|
-
return {};
|
|
24
|
-
}
|
|
25
|
-
const raw = readFileSync(CONFIG_FILE, "utf-8");
|
|
26
|
-
return JSON.parse(raw);
|
|
27
|
-
} catch {
|
|
28
|
-
return {};
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
function saveConfig(config) {
|
|
32
|
-
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
33
|
-
writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2) + "\n", "utf-8");
|
|
34
|
-
}
|
|
35
|
-
function resolveConfig(flags = {}) {
|
|
36
|
-
const file = loadConfigFile();
|
|
37
|
-
return {
|
|
38
|
-
credentialId: flags.credentialId || process.env.TETHER_CREDENTIAL_ID || file.credentialId || "",
|
|
39
|
-
keyPath: flags.keyPath || process.env.TETHER_PRIVATE_KEY_PATH || file.keyPath || "",
|
|
40
|
-
apiKey: flags.apiKey || process.env.TETHER_API_KEY || file.apiKey || ""
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// src/utils/display.ts
|
|
45
9
|
function maskId(id) {
|
|
46
10
|
if (id.length <= 4) return id;
|
|
47
11
|
return "\u2022\u2022\u2022\u2022" + id.slice(-4);
|
|
@@ -83,20 +47,18 @@ function printStatus(config, keyExists) {
|
|
|
83
47
|
console.log();
|
|
84
48
|
console.log(chalk.bold(" Tether Configuration"));
|
|
85
49
|
console.log(chalk.dim(" " + "\u2500".repeat(30)));
|
|
86
|
-
console.log(`
|
|
50
|
+
console.log(` Agent ID: ${config.agentId ? maskId(config.agentId) : chalk.dim("(not set)")}`);
|
|
87
51
|
console.log(` Key path: ${config.keyPath || chalk.dim("(not set)")}`);
|
|
88
52
|
if (config.keyPath) {
|
|
89
53
|
console.log(` Key exists: ${keyExists ? chalk.green("yes") : chalk.red("no")}`);
|
|
90
54
|
}
|
|
91
|
-
console.log(` API URL: ${API_URL}`);
|
|
92
55
|
console.log();
|
|
93
56
|
}
|
|
94
57
|
function printStatusJSON(config, keyExists) {
|
|
95
58
|
console.log(JSON.stringify({
|
|
96
|
-
|
|
59
|
+
agentId: config.agentId ? maskId(config.agentId) : null,
|
|
97
60
|
keyPath: config.keyPath || null,
|
|
98
|
-
keyExists
|
|
99
|
-
apiUrl: API_URL
|
|
61
|
+
keyExists
|
|
100
62
|
}, null, 2));
|
|
101
63
|
}
|
|
102
64
|
function printError(message) {
|
|
@@ -143,6 +105,41 @@ import { generateKeyPairSync } from "crypto";
|
|
|
143
105
|
import { writeFileSync as writeFileSync2, existsSync as existsSync2 } from "fs";
|
|
144
106
|
import { resolve } from "path";
|
|
145
107
|
import chalk2 from "chalk";
|
|
108
|
+
|
|
109
|
+
// src/config.ts
|
|
110
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
|
|
111
|
+
import { join } from "path";
|
|
112
|
+
import { homedir } from "os";
|
|
113
|
+
var CONFIG_DIR = join(homedir(), ".tether");
|
|
114
|
+
var CONFIG_FILE = join(CONFIG_DIR, "config.json");
|
|
115
|
+
function getConfigPath() {
|
|
116
|
+
return CONFIG_FILE;
|
|
117
|
+
}
|
|
118
|
+
function loadConfigFile() {
|
|
119
|
+
try {
|
|
120
|
+
if (!existsSync(CONFIG_FILE)) {
|
|
121
|
+
return {};
|
|
122
|
+
}
|
|
123
|
+
const raw = readFileSync(CONFIG_FILE, "utf-8");
|
|
124
|
+
return JSON.parse(raw);
|
|
125
|
+
} catch {
|
|
126
|
+
return {};
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
function saveConfig(config) {
|
|
130
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
131
|
+
writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2) + "\n", "utf-8");
|
|
132
|
+
}
|
|
133
|
+
function resolveConfig(flags = {}) {
|
|
134
|
+
const file = loadConfigFile();
|
|
135
|
+
return {
|
|
136
|
+
agentId: flags.agentId || process.env.TETHER_AGENT_ID || file.agentId || "",
|
|
137
|
+
keyPath: flags.keyPath || process.env.TETHER_PRIVATE_KEY_PATH || file.keyPath || "",
|
|
138
|
+
apiKey: flags.apiKey || process.env.TETHER_API_KEY || file.apiKey || ""
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// src/commands/init.ts
|
|
146
143
|
function prompt(rl, question) {
|
|
147
144
|
return new Promise((resolve2) => {
|
|
148
145
|
rl.question(question, (answer) => resolve2(answer.trim()));
|
|
@@ -155,16 +152,16 @@ async function initCommand(opts) {
|
|
|
155
152
|
console.log(chalk2.bold(" Tether Setup"));
|
|
156
153
|
console.log(chalk2.dim(" " + "\u2500".repeat(30)));
|
|
157
154
|
console.log();
|
|
158
|
-
const
|
|
159
|
-
let
|
|
160
|
-
if (
|
|
161
|
-
console.log(chalk2.dim(` Using
|
|
162
|
-
|
|
155
|
+
const envAgentId = process.env.TETHER_AGENT_ID;
|
|
156
|
+
let agentId;
|
|
157
|
+
if (envAgentId) {
|
|
158
|
+
console.log(chalk2.dim(` Using TETHER_AGENT_ID from environment`));
|
|
159
|
+
agentId = envAgentId;
|
|
163
160
|
} else {
|
|
164
|
-
|
|
161
|
+
agentId = await prompt(rl, " Agent ID: ");
|
|
165
162
|
}
|
|
166
|
-
if (!
|
|
167
|
-
console.log(chalk2.red("\n
|
|
163
|
+
if (!agentId) {
|
|
164
|
+
console.log(chalk2.red("\n Agent ID is required."));
|
|
168
165
|
return;
|
|
169
166
|
}
|
|
170
167
|
const envKeyPath = process.env.TETHER_PRIVATE_KEY_PATH;
|
|
@@ -189,7 +186,7 @@ async function initCommand(opts) {
|
|
|
189
186
|
console.log(chalk2.yellow(`
|
|
190
187
|
Warning: Key file not found at ${keyPath}`));
|
|
191
188
|
}
|
|
192
|
-
saveConfig({
|
|
189
|
+
saveConfig({ agentId, keyPath });
|
|
193
190
|
console.log();
|
|
194
191
|
console.log(chalk2.green(" \u2713 Configuration saved to " + getConfigPath()));
|
|
195
192
|
console.log();
|
|
@@ -221,8 +218,8 @@ function generateKeypair(verbose) {
|
|
|
221
218
|
import { TetherClient } from "tether-name";
|
|
222
219
|
async function verifyCommand(opts) {
|
|
223
220
|
const config = resolveConfig(opts);
|
|
224
|
-
if (!config.
|
|
225
|
-
printError('No
|
|
221
|
+
if (!config.agentId) {
|
|
222
|
+
printError('No agent ID configured. Run "tether init" or set TETHER_AGENT_ID.');
|
|
226
223
|
process.exitCode = 1;
|
|
227
224
|
return;
|
|
228
225
|
}
|
|
@@ -233,10 +230,10 @@ async function verifyCommand(opts) {
|
|
|
233
230
|
}
|
|
234
231
|
const verbose = opts.verbose ?? false;
|
|
235
232
|
try {
|
|
236
|
-
printVerbose(`
|
|
233
|
+
printVerbose(`Agent ID: ${config.agentId}`, verbose);
|
|
237
234
|
printVerbose(`Key path: ${config.keyPath}`, verbose);
|
|
238
235
|
const client = new TetherClient({
|
|
239
|
-
|
|
236
|
+
agentId: config.agentId,
|
|
240
237
|
privateKeyPath: config.keyPath
|
|
241
238
|
});
|
|
242
239
|
printVerbose("Requesting challenge...", verbose);
|
|
@@ -282,8 +279,8 @@ function statusCommand(opts) {
|
|
|
282
279
|
import { TetherClient as TetherClient2 } from "tether-name";
|
|
283
280
|
async function challengeCommand(opts) {
|
|
284
281
|
const config = resolveConfig(opts);
|
|
285
|
-
if (!config.
|
|
286
|
-
printError('No
|
|
282
|
+
if (!config.agentId) {
|
|
283
|
+
printError('No agent ID configured. Run "tether init" or set TETHER_AGENT_ID.');
|
|
287
284
|
process.exitCode = 1;
|
|
288
285
|
return;
|
|
289
286
|
}
|
|
@@ -294,7 +291,7 @@ async function challengeCommand(opts) {
|
|
|
294
291
|
}
|
|
295
292
|
try {
|
|
296
293
|
const client = new TetherClient2({
|
|
297
|
-
|
|
294
|
+
agentId: config.agentId,
|
|
298
295
|
privateKeyPath: config.keyPath
|
|
299
296
|
});
|
|
300
297
|
const code = await client.requestChallenge();
|
|
@@ -327,9 +324,12 @@ function signCommand(challenge, opts) {
|
|
|
327
324
|
|
|
328
325
|
// src/commands/check.ts
|
|
329
326
|
import chalk3 from "chalk";
|
|
327
|
+
function formatEpochMs(value) {
|
|
328
|
+
if (typeof value !== "number" || Number.isNaN(value)) return null;
|
|
329
|
+
return new Date(value).toISOString();
|
|
330
|
+
}
|
|
330
331
|
async function checkCommand(code, opts) {
|
|
331
|
-
const
|
|
332
|
-
const baseUrl = API_URL;
|
|
332
|
+
const baseUrl = "https://api.tether.name";
|
|
333
333
|
const verbose = opts.verbose ?? false;
|
|
334
334
|
try {
|
|
335
335
|
const url = `${baseUrl}/challenge/${encodeURIComponent(code)}`;
|
|
@@ -347,16 +347,21 @@ async function checkCommand(code, opts) {
|
|
|
347
347
|
if (opts.json) {
|
|
348
348
|
console.log(JSON.stringify(data, null, 2));
|
|
349
349
|
} else {
|
|
350
|
+
const createdAt = formatEpochMs(data.createdAt);
|
|
351
|
+
const verifiedAt = formatEpochMs(data.verifiedAt);
|
|
350
352
|
console.log();
|
|
351
353
|
console.log(chalk3.bold(" Challenge Status"));
|
|
352
354
|
console.log(chalk3.dim(" " + "\u2500".repeat(30)));
|
|
353
|
-
console.log(` Code: ${data.code}`);
|
|
355
|
+
console.log(` Code: ${data.challenge || code}`);
|
|
354
356
|
console.log(` Status: ${data.status}`);
|
|
355
|
-
if (data.
|
|
356
|
-
console.log(`
|
|
357
|
+
if (data.agentName) {
|
|
358
|
+
console.log(` Agent: ${data.agentName}`);
|
|
359
|
+
}
|
|
360
|
+
if (createdAt) {
|
|
361
|
+
console.log(` Created: ${createdAt}`);
|
|
357
362
|
}
|
|
358
|
-
if (
|
|
359
|
-
console.log(` Verified: ${
|
|
363
|
+
if (verifiedAt) {
|
|
364
|
+
console.log(` Verified: ${verifiedAt}`);
|
|
360
365
|
}
|
|
361
366
|
console.log();
|
|
362
367
|
}
|
|
@@ -509,11 +514,11 @@ async function agentDeleteCommand(id, opts) {
|
|
|
509
514
|
}
|
|
510
515
|
|
|
511
516
|
// src/cli.ts
|
|
512
|
-
var VERSION = "1.0.
|
|
517
|
+
var VERSION = "1.0.7";
|
|
513
518
|
var program = new Command();
|
|
514
519
|
program.name("tether").description("CLI for tether.name \u2014 AI agent identity verification").version(chalk7.cyan(BANNER) + ` v${VERSION}
|
|
515
520
|
`, "-v, --version", "Show version");
|
|
516
|
-
var addGlobalOpts = (cmd) => cmd.option("--
|
|
521
|
+
var addGlobalOpts = (cmd) => cmd.option("--agent-id <id>", "Agent ID").option("--key-path <path>", "Path to private key file").option("--api-key <key>", "API key for management operations").option("--verbose", "Enable debug output");
|
|
517
522
|
program.command("init").description("Interactive setup wizard").option("--verbose", "Enable debug output").action((opts) => initCommand(opts));
|
|
518
523
|
addGlobalOpts(
|
|
519
524
|
program.command("verify").description("Perform a full identity verification").option("--json", "Output result as JSON")
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../src/utils/display.ts","../src/config.ts","../src/commands/init.ts","../src/commands/verify.ts","../src/commands/status.ts","../src/commands/challenge.ts","../src/commands/sign.ts","../src/commands/check.ts","../src/commands/agent-create.ts","../src/commands/agent-list.ts","../src/commands/agent-delete.ts"],"sourcesContent":["import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { BANNER } from './utils/display.js';\nimport { initCommand } from './commands/init.js';\nimport { verifyCommand } from './commands/verify.js';\nimport { statusCommand } from './commands/status.js';\nimport { challengeCommand } from './commands/challenge.js';\nimport { signCommand } from './commands/sign.js';\nimport { checkCommand } from './commands/check.js';\nimport { agentCreateCommand } from './commands/agent-create.js';\nimport { agentListCommand } from './commands/agent-list.js';\nimport { agentDeleteCommand } from './commands/agent-delete.js';\n\nconst VERSION = '1.0.5';\n\nconst program = new Command();\n\nprogram\n .name('tether')\n .description('CLI for tether.name — AI agent identity verification')\n .version(chalk.cyan(BANNER) + ` v${VERSION}\\n`, '-v, --version', 'Show version');\n\n// Global options\nconst addGlobalOpts = (cmd: Command): Command =>\n cmd\n .option('--credential-id <id>', 'Credential ID')\n .option('--key-path <path>', 'Path to private key file')\n .option('--api-key <key>', 'API key for management operations')\n .option('--verbose', 'Enable debug output');\n\n// tether init\nprogram\n .command('init')\n .description('Interactive setup wizard')\n .option('--verbose', 'Enable debug output')\n .action((opts) => initCommand(opts));\n\n// tether verify\naddGlobalOpts(\n program\n .command('verify')\n .description('Perform a full identity verification')\n .option('--json', 'Output result as JSON'),\n).action((opts) => verifyCommand(opts));\n\n// tether status\naddGlobalOpts(\n program\n .command('status')\n .description('Show current configuration')\n .option('--json', 'Output result as JSON'),\n).action((opts) => statusCommand(opts));\n\n// tether challenge\naddGlobalOpts(\n program\n .command('challenge')\n .description('Request a challenge code from the API'),\n).action((opts) => challengeCommand(opts));\n\n// tether sign <challenge>\naddGlobalOpts(\n program\n .command('sign <challenge>')\n .description('Sign a challenge string and print the proof'),\n).action((challenge, opts) => signCommand(challenge, opts));\n\n// tether check <code>\naddGlobalOpts(\n program\n .command('check <code>')\n .description('Check the status of a challenge by code')\n .option('--json', 'Output result as JSON'),\n).action((code, opts) => checkCommand(code, opts));\n\n// tether agent (subcommand group)\nconst agent = program\n .command('agent')\n .description('Manage agents');\n\n// tether agent create <name>\naddGlobalOpts(\n agent\n .command('create <name>')\n .description('Create a new agent')\n .option('--description <text>', 'Agent description')\n .option('--json', 'Output result as JSON'),\n).action((name, opts) => agentCreateCommand(name, opts));\n\n// tether agent list\naddGlobalOpts(\n agent\n .command('list')\n .description('List all agents')\n .option('--json', 'Output result as JSON'),\n).action((opts) => agentListCommand(opts));\n\n// tether agent delete <id>\naddGlobalOpts(\n agent\n .command('delete <id>')\n .description('Delete an agent by ID')\n .option('--json', 'Output result as JSON'),\n).action((id, opts) => agentDeleteCommand(id, opts));\n\nprogram.parse();\n","import chalk from 'chalk';\nimport type { VerificationResult } from 'tether-name';\nimport { API_URL, type TetherConfig } from '../config.js';\n\nexport function maskId(id: string): string {\n if (id.length <= 4) return id;\n return '••••' + id.slice(-4);\n}\n\nexport function printVerifyResult(result: VerificationResult): void {\n const width = 48;\n const hr = '─'.repeat(width);\n\n console.log();\n if (result.verified) {\n console.log(chalk.green('┌' + hr + '┐'));\n console.log(chalk.green('│') + center(chalk.green.bold('✓ Identity Verified'), width, 19) + chalk.green('│'));\n console.log(chalk.green('├' + hr + '┤'));\n\n if (result.agentName) {\n console.log(chalk.green('│') + padLine(` Agent: ${result.agentName}`, width) + chalk.green('│'));\n }\n if (result.verifyUrl) {\n console.log(chalk.green('│') + padLine(` URL: ${result.verifyUrl}`, width) + chalk.green('│'));\n }\n if (result.registeredSince) {\n const date = formatDate(result.registeredSince);\n console.log(chalk.green('│') + padLine(` Since: ${date}`, width) + chalk.green('│'));\n }\n\n console.log(chalk.green('└' + hr + '┘'));\n } else {\n console.log(chalk.red('┌' + hr + '┐'));\n console.log(chalk.red('│') + center(chalk.red.bold('✗ Verification Failed'), width, 21) + chalk.red('│'));\n console.log(chalk.red('├' + hr + '┤'));\n\n if (result.error) {\n console.log(chalk.red('│') + padLine(` ${result.error}`, width) + chalk.red('│'));\n }\n\n console.log(chalk.red('└' + hr + '┘'));\n }\n console.log();\n}\n\nexport function printVerifyResultJSON(result: VerificationResult): void {\n console.log(JSON.stringify(result, null, 2));\n}\n\nexport function printStatus(config: TetherConfig, keyExists: boolean): void {\n console.log();\n console.log(chalk.bold(' Tether Configuration'));\n console.log(chalk.dim(' ' + '─'.repeat(30)));\n console.log(` Credential: ${config.credentialId ? maskId(config.credentialId) : chalk.dim('(not set)')}`);\n console.log(` Key path: ${config.keyPath || chalk.dim('(not set)')}`);\n if (config.keyPath) {\n console.log(` Key exists: ${keyExists ? chalk.green('yes') : chalk.red('no')}`);\n }\n console.log(` API URL: ${API_URL}`);\n console.log();\n}\n\nexport function printStatusJSON(config: TetherConfig, keyExists: boolean): void {\n console.log(JSON.stringify({\n credentialId: config.credentialId ? maskId(config.credentialId) : null,\n keyPath: config.keyPath || null,\n keyExists,\n apiUrl: API_URL,\n }, null, 2));\n}\n\nexport function printError(message: string): void {\n console.error(chalk.red(`Error: ${message}`));\n}\n\nexport function printVerbose(message: string, verbose: boolean): void {\n if (verbose) {\n console.error(chalk.dim(`[debug] ${message}`));\n }\n}\n\nexport const BANNER = `\n ╔╦╗╔═╗╔╦╗╦ ╦╔═╗╦═╗\n ║ ║╣ ║ ╠═╣║╣ ╠╦╝\n ╩ ╚═╝ ╩ ╩ ╩╚═╝╩╚═\n`;\n\nfunction padLine(text: string, width: number): string {\n const visible = stripAnsi(text);\n const pad = width - visible.length;\n return text + ' '.repeat(Math.max(0, pad));\n}\n\nfunction center(text: string, width: number, visibleLength: number): string {\n const leftPad = Math.floor((width - visibleLength) / 2);\n const rightPad = width - visibleLength - leftPad;\n return ' '.repeat(leftPad) + text + ' '.repeat(rightPad);\n}\n\nfunction stripAnsi(str: string): string {\n // eslint-disable-next-line no-control-regex\n return str.replace(/\\x1b\\[[0-9;]*m/g, '');\n}\n\nfunction formatDate(iso: string): string {\n try {\n return new Date(iso).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n } catch {\n return iso;\n }\n}\n","import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs';\nimport { join } from 'path';\nimport { homedir } from 'os';\n\nexport interface TetherConfig {\n credentialId: string;\n keyPath: string;\n apiKey: string;\n}\n\nexport interface CLIFlags {\n credentialId?: string;\n keyPath?: string;\n apiKey?: string;\n}\n\nconst CONFIG_DIR = join(homedir(), '.tether');\nexport const API_URL = 'https://api.tether.name';\nconst CONFIG_FILE = join(CONFIG_DIR, 'config.json');\n\nexport function getConfigPath(): string {\n return CONFIG_FILE;\n}\n\nexport function getConfigDir(): string {\n return CONFIG_DIR;\n}\n\nexport function loadConfigFile(): Partial<TetherConfig> {\n try {\n if (!existsSync(CONFIG_FILE)) {\n return {};\n }\n const raw = readFileSync(CONFIG_FILE, 'utf-8');\n return JSON.parse(raw);\n } catch {\n return {};\n }\n}\n\nexport function saveConfig(config: Partial<TetherConfig>): void {\n mkdirSync(CONFIG_DIR, { recursive: true });\n writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2) + '\\n', 'utf-8');\n}\n\nexport function resolveConfig(flags: CLIFlags = {}): TetherConfig {\n const file = loadConfigFile();\n\n return {\n credentialId:\n flags.credentialId ||\n process.env.TETHER_CREDENTIAL_ID ||\n file.credentialId ||\n '',\n keyPath:\n flags.keyPath ||\n process.env.TETHER_PRIVATE_KEY_PATH ||\n file.keyPath ||\n '',\n apiKey:\n flags.apiKey ||\n process.env.TETHER_API_KEY ||\n file.apiKey ||\n '',\n };\n}\n","import { createInterface } from 'readline';\nimport { generateKeyPairSync } from 'crypto';\nimport { writeFileSync, existsSync } from 'fs';\nimport { resolve } from 'path';\nimport chalk from 'chalk';\nimport { saveConfig, getConfigPath } from '../config.js';\n\nfunction prompt(rl: ReturnType<typeof createInterface>, question: string): Promise<string> {\n return new Promise((resolve) => {\n rl.question(question, (answer) => resolve(answer.trim()));\n });\n}\n\nexport async function initCommand(opts: { verbose?: boolean }): Promise<void> {\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n\n try {\n console.log();\n console.log(chalk.bold(' Tether Setup'));\n console.log(chalk.dim(' ' + '─'.repeat(30)));\n console.log();\n\n // Credential ID\n const envCredential = process.env.TETHER_CREDENTIAL_ID;\n let credentialId: string;\n if (envCredential) {\n console.log(chalk.dim(` Using TETHER_CREDENTIAL_ID from environment`));\n credentialId = envCredential;\n } else {\n credentialId = await prompt(rl, ' Credential ID: ');\n }\n\n if (!credentialId) {\n console.log(chalk.red('\\n Credential ID is required.'));\n return;\n }\n\n // Private key\n const envKeyPath = process.env.TETHER_PRIVATE_KEY_PATH;\n let keyPath: string;\n\n if (envKeyPath) {\n console.log(chalk.dim(` Using TETHER_PRIVATE_KEY_PATH from environment`));\n keyPath = envKeyPath;\n } else {\n const genAnswer = await prompt(rl, ' Generate a new RSA keypair? (y/N): ');\n\n if (genAnswer.toLowerCase() === 'y') {\n keyPath = await generateKeypair(opts.verbose);\n } else {\n keyPath = await prompt(rl, ' Path to private key: ');\n }\n }\n\n if (!keyPath) {\n console.log(chalk.red('\\n Private key path is required.'));\n return;\n }\n\n keyPath = resolve(keyPath);\n\n if (!existsSync(keyPath)) {\n console.log(chalk.yellow(`\\n Warning: Key file not found at ${keyPath}`));\n }\n\n // Save config\n saveConfig({ credentialId, keyPath });\n\n console.log();\n console.log(chalk.green(' ✓ Configuration saved to ' + getConfigPath()));\n console.log();\n } finally {\n rl.close();\n }\n}\n\nfunction generateKeypair(verbose?: boolean): string {\n const privatePath = resolve('.tether-private-key.pem');\n const publicPath = resolve('.tether-public-key.pem');\n\n if (verbose) {\n console.log(chalk.dim(` [debug] Generating RSA-2048 keypair...`));\n }\n\n const { publicKey, privateKey } = generateKeyPairSync('rsa', {\n modulusLength: 2048,\n publicKeyEncoding: { type: 'spki', format: 'pem' },\n privateKeyEncoding: { type: 'pkcs1', format: 'pem' },\n });\n\n writeFileSync(privatePath, privateKey, { mode: 0o600 });\n writeFileSync(publicPath, publicKey);\n\n console.log(chalk.green(` ✓ Private key: ${privatePath}`));\n console.log(chalk.green(` ✓ Public key: ${publicPath}`));\n console.log();\n console.log(chalk.dim(' Upload the public key to tether.name to complete registration.'));\n\n return privatePath;\n}\n","import { TetherClient } from 'tether-name';\nimport { resolveConfig, type CLIFlags } from '../config.js';\nimport { printVerifyResult, printVerifyResultJSON, printError, printVerbose } from '../utils/display.js';\n\nexport async function verifyCommand(opts: CLIFlags & { json?: boolean; verbose?: boolean }): Promise<void> {\n const config = resolveConfig(opts);\n\n if (!config.credentialId) {\n printError('No credential ID configured. Run \"tether init\" or set TETHER_CREDENTIAL_ID.');\n process.exitCode = 1;\n return;\n }\n\n if (!config.keyPath) {\n printError('No private key path configured. Run \"tether init\" or set TETHER_PRIVATE_KEY_PATH.');\n process.exitCode = 1;\n return;\n }\n\n const verbose = opts.verbose ?? false;\n\n try {\n printVerbose(`Credential ID: ${config.credentialId}`, verbose);\n printVerbose(`Key path: ${config.keyPath}`, verbose);\n\n const client = new TetherClient({\n credentialId: config.credentialId,\n privateKeyPath: config.keyPath,\n });\n\n printVerbose('Requesting challenge...', verbose);\n const challenge = await client.requestChallenge();\n printVerbose(`Challenge: ${challenge}`, verbose);\n\n printVerbose('Signing challenge...', verbose);\n const proof = client.sign(challenge);\n printVerbose(`Proof: ${proof.slice(0, 32)}...`, verbose);\n\n printVerbose('Submitting proof...', verbose);\n const result = await client.submitProof(challenge, proof);\n\n if (opts.json) {\n printVerifyResultJSON(result);\n } else {\n printVerifyResult(result);\n }\n\n if (!result.verified) {\n process.exitCode = 1;\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n if (opts.json) {\n console.log(JSON.stringify({ verified: false, error: message }, null, 2));\n } else {\n printError(message);\n }\n process.exitCode = 1;\n }\n}\n","import { existsSync } from 'fs';\nimport { resolveConfig, type CLIFlags } from '../config.js';\nimport { printStatus, printStatusJSON } from '../utils/display.js';\n\nexport function statusCommand(opts: CLIFlags & { json?: boolean }): void {\n const config = resolveConfig(opts);\n const keyExists = config.keyPath ? existsSync(config.keyPath) : false;\n\n if (opts.json) {\n printStatusJSON(config, keyExists);\n } else {\n printStatus(config, keyExists);\n }\n}\n","import { TetherClient } from 'tether-name';\nimport { resolveConfig, type CLIFlags } from '../config.js';\nimport { printError, printVerbose } from '../utils/display.js';\n\nexport async function challengeCommand(opts: CLIFlags & { verbose?: boolean }): Promise<void> {\n const config = resolveConfig(opts);\n\n if (!config.credentialId) {\n printError('No credential ID configured. Run \"tether init\" or set TETHER_CREDENTIAL_ID.');\n process.exitCode = 1;\n return;\n }\n\n if (!config.keyPath) {\n printError('No private key path configured. Run \"tether init\" or set TETHER_PRIVATE_KEY_PATH.');\n process.exitCode = 1;\n return;\n }\n\n try {\n\n const client = new TetherClient({\n credentialId: config.credentialId,\n privateKeyPath: config.keyPath,\n });\n\n const code = await client.requestChallenge();\n console.log(code);\n } catch (err) {\n printError(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n}\n","import { loadPrivateKey, signChallenge } from 'tether-name';\nimport { resolveConfig, type CLIFlags } from '../config.js';\nimport { printError, printVerbose } from '../utils/display.js';\n\nexport function signCommand(challenge: string, opts: CLIFlags & { verbose?: boolean }): void {\n const config = resolveConfig(opts);\n\n if (!config.keyPath) {\n printError('No private key path configured. Run \"tether init\" or set TETHER_PRIVATE_KEY_PATH.');\n process.exitCode = 1;\n return;\n }\n\n try {\n printVerbose(`Key path: ${config.keyPath}`, opts.verbose ?? false);\n\n const privateKey = loadPrivateKey({ keyPath: config.keyPath });\n const proof = signChallenge(privateKey, challenge);\n console.log(proof);\n } catch (err) {\n printError(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n}\n","import chalk from 'chalk';\nimport { resolveConfig, API_URL, type CLIFlags } from '../config.js';\nimport { printError, printVerbose } from '../utils/display.js';\n\ninterface ChallengeStatusResponse {\n code: string;\n status: string;\n credentialId?: string;\n createdAt?: string;\n verifiedAt?: string;\n [key: string]: unknown;\n}\n\nexport async function checkCommand(\n code: string,\n opts: CLIFlags & { json?: boolean; verbose?: boolean },\n): Promise<void> {\n const config = resolveConfig(opts);\n const baseUrl = API_URL;\n const verbose = opts.verbose ?? false;\n\n try {\n const url = `${baseUrl}/challenge/${encodeURIComponent(code)}`;\n printVerbose(`GET ${url}`, verbose);\n\n const response = await fetch(url, {\n headers: { 'Accept': 'application/json' },\n });\n\n if (!response.ok) {\n const text = await response.text().catch(() => '');\n printError(`API returned ${response.status}: ${text || response.statusText}`);\n process.exitCode = 1;\n return;\n }\n\n const data = (await response.json()) as ChallengeStatusResponse;\n\n if (opts.json) {\n console.log(JSON.stringify(data, null, 2));\n } else {\n console.log();\n console.log(chalk.bold(' Challenge Status'));\n console.log(chalk.dim(' ' + '─'.repeat(30)));\n console.log(` Code: ${data.code}`);\n console.log(` Status: ${data.status}`);\n if (data.createdAt) {\n console.log(` Created: ${data.createdAt}`);\n }\n if (data.verifiedAt) {\n console.log(` Verified: ${data.verifiedAt}`);\n }\n console.log();\n }\n } catch (err) {\n printError(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n}\n","import chalk from 'chalk';\nimport { TetherClient } from 'tether-name';\nimport { resolveConfig, type CLIFlags } from '../config.js';\nimport { printError, printVerbose } from '../utils/display.js';\n\nexport async function agentCreateCommand(\n name: string,\n opts: CLIFlags & { description?: string; json?: boolean; verbose?: boolean },\n): Promise<void> {\n const config = resolveConfig(opts);\n\n if (!config.apiKey) {\n printError('No API key configured. Set TETHER_API_KEY or pass --api-key.');\n process.exitCode = 1;\n return;\n }\n\n const verbose = opts.verbose ?? false;\n\n try {\n printVerbose(`Creating agent \"${name}\"...`, verbose);\n\n const client = new TetherClient({\n apiKey: config.apiKey,\n });\n\n const agent = await client.createAgent(name, opts.description || '');\n\n if (opts.json) {\n console.log(JSON.stringify(agent, null, 2));\n } else {\n console.log();\n console.log(chalk.green.bold(' ✓ Agent created'));\n console.log(chalk.dim(' ' + '─'.repeat(40)));\n console.log(` ID: ${agent.id}`);\n console.log(` Name: ${agent.agentName}`);\n if (agent.description) {\n console.log(` Description: ${agent.description}`);\n }\n console.log(` Registration Token: ${chalk.yellow(agent.registrationToken)}`);\n console.log();\n console.log(chalk.dim(' Save the registration token — it cannot be retrieved later.'));\n console.log();\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n if (opts.json) {\n console.log(JSON.stringify({ error: message }, null, 2));\n } else {\n printError(message);\n }\n process.exitCode = 1;\n }\n}\n","import chalk from 'chalk';\nimport { TetherClient } from 'tether-name';\nimport { resolveConfig, type CLIFlags } from '../config.js';\nimport { printError, printVerbose } from '../utils/display.js';\n\nexport async function agentListCommand(\n opts: CLIFlags & { json?: boolean; verbose?: boolean },\n): Promise<void> {\n const config = resolveConfig(opts);\n\n if (!config.apiKey) {\n printError('No API key configured. Set TETHER_API_KEY or pass --api-key.');\n process.exitCode = 1;\n return;\n }\n\n const verbose = opts.verbose ?? false;\n\n try {\n printVerbose('Listing agents...', verbose);\n\n const client = new TetherClient({\n apiKey: config.apiKey,\n });\n\n const agents = await client.listAgents();\n\n if (opts.json) {\n console.log(JSON.stringify(agents, null, 2));\n } else if (agents.length === 0) {\n console.log();\n console.log(chalk.dim(' No agents found.'));\n console.log();\n } else {\n console.log();\n console.log(chalk.bold(` Agents (${agents.length})`));\n console.log(chalk.dim(' ' + '─'.repeat(40)));\n for (const agent of agents) {\n const date = formatDate(agent.createdAt);\n console.log(` ${chalk.cyan(agent.agentName)} ${chalk.dim(`(${agent.id})`)}`);\n if (agent.description) {\n console.log(` ${agent.description}`);\n }\n console.log(` Created: ${date}`);\n if (agent.lastVerifiedAt) {\n console.log(` Last verified: ${formatDate(agent.lastVerifiedAt)}`);\n }\n console.log();\n }\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n if (opts.json) {\n console.log(JSON.stringify({ error: message }, null, 2));\n } else {\n printError(message);\n }\n process.exitCode = 1;\n }\n}\n\nfunction formatDate(ts: number): string {\n try {\n return new Date(ts).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n } catch {\n return String(ts);\n }\n}\n","import chalk from 'chalk';\nimport { TetherClient } from 'tether-name';\nimport { resolveConfig, type CLIFlags } from '../config.js';\nimport { printError, printVerbose } from '../utils/display.js';\n\nexport async function agentDeleteCommand(\n id: string,\n opts: CLIFlags & { json?: boolean; verbose?: boolean },\n): Promise<void> {\n const config = resolveConfig(opts);\n\n if (!config.apiKey) {\n printError('No API key configured. Set TETHER_API_KEY or pass --api-key.');\n process.exitCode = 1;\n return;\n }\n\n const verbose = opts.verbose ?? false;\n\n try {\n printVerbose(`Deleting agent ${id}...`, verbose);\n\n const client = new TetherClient({\n apiKey: config.apiKey,\n });\n\n await client.deleteAgent(id);\n\n if (opts.json) {\n console.log(JSON.stringify({ deleted: true, id }, null, 2));\n } else {\n console.log();\n console.log(chalk.green.bold(' ✓ Agent deleted'));\n console.log(chalk.dim(` ID: ${id}`));\n console.log();\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n if (opts.json) {\n console.log(JSON.stringify({ error: message }, null, 2));\n } else {\n printError(message);\n }\n process.exitCode = 1;\n }\n}\n"],"mappings":";;;AAAA,SAAS,eAAe;AACxB,OAAOA,YAAW;;;ACDlB,OAAO,WAAW;;;ACAlB,SAAS,cAAc,eAAe,WAAW,kBAAkB;AACnE,SAAS,YAAY;AACrB,SAAS,eAAe;AAcxB,IAAM,aAAa,KAAK,QAAQ,GAAG,SAAS;AACrC,IAAM,UAAU;AACvB,IAAM,cAAc,KAAK,YAAY,aAAa;AAE3C,SAAS,gBAAwB;AACtC,SAAO;AACT;AAMO,SAAS,iBAAwC;AACtD,MAAI;AACF,QAAI,CAAC,WAAW,WAAW,GAAG;AAC5B,aAAO,CAAC;AAAA,IACV;AACA,UAAM,MAAM,aAAa,aAAa,OAAO;AAC7C,WAAO,KAAK,MAAM,GAAG;AAAA,EACvB,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEO,SAAS,WAAW,QAAqC;AAC9D,YAAU,YAAY,EAAE,WAAW,KAAK,CAAC;AACzC,gBAAc,aAAa,KAAK,UAAU,QAAQ,MAAM,CAAC,IAAI,MAAM,OAAO;AAC5E;AAEO,SAAS,cAAc,QAAkB,CAAC,GAAiB;AAChE,QAAM,OAAO,eAAe;AAE5B,SAAO;AAAA,IACL,cACE,MAAM,gBACN,QAAQ,IAAI,wBACZ,KAAK,gBACL;AAAA,IACF,SACE,MAAM,WACN,QAAQ,IAAI,2BACZ,KAAK,WACL;AAAA,IACF,QACE,MAAM,UACN,QAAQ,IAAI,kBACZ,KAAK,UACL;AAAA,EACJ;AACF;;;AD7DO,SAAS,OAAO,IAAoB;AACzC,MAAI,GAAG,UAAU,EAAG,QAAO;AAC3B,SAAO,6BAAS,GAAG,MAAM,EAAE;AAC7B;AAEO,SAAS,kBAAkB,QAAkC;AAClE,QAAM,QAAQ;AACd,QAAM,KAAK,SAAI,OAAO,KAAK;AAE3B,UAAQ,IAAI;AACZ,MAAI,OAAO,UAAU;AACnB,YAAQ,IAAI,MAAM,MAAM,WAAM,KAAK,QAAG,CAAC;AACvC,YAAQ,IAAI,MAAM,MAAM,QAAG,IAAI,OAAO,MAAM,MAAM,KAAK,0BAAqB,GAAG,OAAO,EAAE,IAAI,MAAM,MAAM,QAAG,CAAC;AAC5G,YAAQ,IAAI,MAAM,MAAM,WAAM,KAAK,QAAG,CAAC;AAEvC,QAAI,OAAO,WAAW;AACpB,cAAQ,IAAI,MAAM,MAAM,QAAG,IAAI,QAAQ,aAAa,OAAO,SAAS,IAAI,KAAK,IAAI,MAAM,MAAM,QAAG,CAAC;AAAA,IACnG;AACA,QAAI,OAAO,WAAW;AACpB,cAAQ,IAAI,MAAM,MAAM,QAAG,IAAI,QAAQ,aAAa,OAAO,SAAS,IAAI,KAAK,IAAI,MAAM,MAAM,QAAG,CAAC;AAAA,IACnG;AACA,QAAI,OAAO,iBAAiB;AAC1B,YAAM,OAAO,WAAW,OAAO,eAAe;AAC9C,cAAQ,IAAI,MAAM,MAAM,QAAG,IAAI,QAAQ,aAAa,IAAI,IAAI,KAAK,IAAI,MAAM,MAAM,QAAG,CAAC;AAAA,IACvF;AAEA,YAAQ,IAAI,MAAM,MAAM,WAAM,KAAK,QAAG,CAAC;AAAA,EACzC,OAAO;AACL,YAAQ,IAAI,MAAM,IAAI,WAAM,KAAK,QAAG,CAAC;AACrC,YAAQ,IAAI,MAAM,IAAI,QAAG,IAAI,OAAO,MAAM,IAAI,KAAK,4BAAuB,GAAG,OAAO,EAAE,IAAI,MAAM,IAAI,QAAG,CAAC;AACxG,YAAQ,IAAI,MAAM,IAAI,WAAM,KAAK,QAAG,CAAC;AAErC,QAAI,OAAO,OAAO;AAChB,cAAQ,IAAI,MAAM,IAAI,QAAG,IAAI,QAAQ,KAAK,OAAO,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,QAAG,CAAC;AAAA,IACnF;AAEA,YAAQ,IAAI,MAAM,IAAI,WAAM,KAAK,QAAG,CAAC;AAAA,EACvC;AACA,UAAQ,IAAI;AACd;AAEO,SAAS,sBAAsB,QAAkC;AACtE,UAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAC7C;AAEO,SAAS,YAAY,QAAsB,WAA0B;AAC1E,UAAQ,IAAI;AACZ,UAAQ,IAAI,MAAM,KAAK,wBAAwB,CAAC;AAChD,UAAQ,IAAI,MAAM,IAAI,OAAO,SAAI,OAAO,EAAE,CAAC,CAAC;AAC5C,UAAQ,IAAI,kBAAkB,OAAO,eAAe,OAAO,OAAO,YAAY,IAAI,MAAM,IAAI,WAAW,CAAC,EAAE;AAC1G,UAAQ,IAAI,kBAAkB,OAAO,WAAW,MAAM,IAAI,WAAW,CAAC,EAAE;AACxE,MAAI,OAAO,SAAS;AAClB,YAAQ,IAAI,kBAAkB,YAAY,MAAM,MAAM,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,EAAE;AAAA,EAClF;AACA,UAAQ,IAAI,kBAAkB,OAAO,EAAE;AACvC,UAAQ,IAAI;AACd;AAEO,SAAS,gBAAgB,QAAsB,WAA0B;AAC9E,UAAQ,IAAI,KAAK,UAAU;AAAA,IACzB,cAAc,OAAO,eAAe,OAAO,OAAO,YAAY,IAAI;AAAA,IAClE,SAAS,OAAO,WAAW;AAAA,IAC3B;AAAA,IACA,QAAQ;AAAA,EACV,GAAG,MAAM,CAAC,CAAC;AACb;AAEO,SAAS,WAAW,SAAuB;AAChD,UAAQ,MAAM,MAAM,IAAI,UAAU,OAAO,EAAE,CAAC;AAC9C;AAEO,SAAS,aAAa,SAAiB,SAAwB;AACpE,MAAI,SAAS;AACX,YAAQ,MAAM,MAAM,IAAI,WAAW,OAAO,EAAE,CAAC;AAAA,EAC/C;AACF;AAEO,IAAM,SAAS;AAAA;AAAA;AAAA;AAAA;AAMtB,SAAS,QAAQ,MAAc,OAAuB;AACpD,QAAM,UAAU,UAAU,IAAI;AAC9B,QAAM,MAAM,QAAQ,QAAQ;AAC5B,SAAO,OAAO,IAAI,OAAO,KAAK,IAAI,GAAG,GAAG,CAAC;AAC3C;AAEA,SAAS,OAAO,MAAc,OAAe,eAA+B;AAC1E,QAAM,UAAU,KAAK,OAAO,QAAQ,iBAAiB,CAAC;AACtD,QAAM,WAAW,QAAQ,gBAAgB;AACzC,SAAO,IAAI,OAAO,OAAO,IAAI,OAAO,IAAI,OAAO,QAAQ;AACzD;AAEA,SAAS,UAAU,KAAqB;AAEtC,SAAO,IAAI,QAAQ,mBAAmB,EAAE;AAC1C;AAEA,SAAS,WAAW,KAAqB;AACvC,MAAI;AACF,WAAO,IAAI,KAAK,GAAG,EAAE,mBAAmB,SAAS;AAAA,MAC/C,MAAM;AAAA,MACN,OAAO;AAAA,MACP,KAAK;AAAA,IACP,CAAC;AAAA,EACH,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;AElHA,SAAS,uBAAuB;AAChC,SAAS,2BAA2B;AACpC,SAAS,iBAAAC,gBAAe,cAAAC,mBAAkB;AAC1C,SAAS,eAAe;AACxB,OAAOC,YAAW;AAGlB,SAAS,OAAO,IAAwC,UAAmC;AACzF,SAAO,IAAI,QAAQ,CAACC,aAAY;AAC9B,OAAG,SAAS,UAAU,CAAC,WAAWA,SAAQ,OAAO,KAAK,CAAC,CAAC;AAAA,EAC1D,CAAC;AACH;AAEA,eAAsB,YAAY,MAA4C;AAC5E,QAAM,KAAK,gBAAgB,EAAE,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAO,CAAC;AAE3E,MAAI;AACF,YAAQ,IAAI;AACZ,YAAQ,IAAIC,OAAM,KAAK,gBAAgB,CAAC;AACxC,YAAQ,IAAIA,OAAM,IAAI,OAAO,SAAI,OAAO,EAAE,CAAC,CAAC;AAC5C,YAAQ,IAAI;AAGZ,UAAM,gBAAgB,QAAQ,IAAI;AAClC,QAAI;AACJ,QAAI,eAAe;AACjB,cAAQ,IAAIA,OAAM,IAAI,+CAA+C,CAAC;AACtE,qBAAe;AAAA,IACjB,OAAO;AACL,qBAAe,MAAM,OAAO,IAAI,mBAAmB;AAAA,IACrD;AAEA,QAAI,CAAC,cAAc;AACjB,cAAQ,IAAIA,OAAM,IAAI,gCAAgC,CAAC;AACvD;AAAA,IACF;AAGA,UAAM,aAAa,QAAQ,IAAI;AAC/B,QAAI;AAEJ,QAAI,YAAY;AACd,cAAQ,IAAIA,OAAM,IAAI,kDAAkD,CAAC;AACzE,gBAAU;AAAA,IACZ,OAAO;AACL,YAAM,YAAY,MAAM,OAAO,IAAI,uCAAuC;AAE1E,UAAI,UAAU,YAAY,MAAM,KAAK;AACnC,kBAAU,MAAM,gBAAgB,KAAK,OAAO;AAAA,MAC9C,OAAO;AACL,kBAAU,MAAM,OAAO,IAAI,yBAAyB;AAAA,MACtD;AAAA,IACF;AAEA,QAAI,CAAC,SAAS;AACZ,cAAQ,IAAIA,OAAM,IAAI,mCAAmC,CAAC;AAC1D;AAAA,IACF;AAEA,cAAU,QAAQ,OAAO;AAEzB,QAAI,CAACC,YAAW,OAAO,GAAG;AACxB,cAAQ,IAAID,OAAM,OAAO;AAAA,mCAAsC,OAAO,EAAE,CAAC;AAAA,IAC3E;AAGA,eAAW,EAAE,cAAc,QAAQ,CAAC;AAEpC,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,MAAM,qCAAgC,cAAc,CAAC,CAAC;AACxE,YAAQ,IAAI;AAAA,EACd,UAAE;AACA,OAAG,MAAM;AAAA,EACX;AACF;AAEA,SAAS,gBAAgB,SAA2B;AAClD,QAAM,cAAc,QAAQ,yBAAyB;AACrD,QAAM,aAAa,QAAQ,wBAAwB;AAEnD,MAAI,SAAS;AACX,YAAQ,IAAIA,OAAM,IAAI,0CAA0C,CAAC;AAAA,EACnE;AAEA,QAAM,EAAE,WAAW,WAAW,IAAI,oBAAoB,OAAO;AAAA,IAC3D,eAAe;AAAA,IACf,mBAAmB,EAAE,MAAM,QAAQ,QAAQ,MAAM;AAAA,IACjD,oBAAoB,EAAE,MAAM,SAAS,QAAQ,MAAM;AAAA,EACrD,CAAC;AAED,EAAAE,eAAc,aAAa,YAAY,EAAE,MAAM,IAAM,CAAC;AACtD,EAAAA,eAAc,YAAY,SAAS;AAEnC,UAAQ,IAAIF,OAAM,MAAM,yBAAoB,WAAW,EAAE,CAAC;AAC1D,UAAQ,IAAIA,OAAM,MAAM,yBAAoB,UAAU,EAAE,CAAC;AACzD,UAAQ,IAAI;AACZ,UAAQ,IAAIA,OAAM,IAAI,kEAAkE,CAAC;AAEzF,SAAO;AACT;;;ACnGA,SAAS,oBAAoB;AAI7B,eAAsB,cAAc,MAAuE;AACzG,QAAM,SAAS,cAAc,IAAI;AAEjC,MAAI,CAAC,OAAO,cAAc;AACxB,eAAW,6EAA6E;AACxF,YAAQ,WAAW;AACnB;AAAA,EACF;AAEA,MAAI,CAAC,OAAO,SAAS;AACnB,eAAW,mFAAmF;AAC9F,YAAQ,WAAW;AACnB;AAAA,EACF;AAEA,QAAM,UAAU,KAAK,WAAW;AAEhC,MAAI;AACF,iBAAa,kBAAkB,OAAO,YAAY,IAAI,OAAO;AAC7D,iBAAa,aAAa,OAAO,OAAO,IAAI,OAAO;AAEnD,UAAM,SAAS,IAAI,aAAa;AAAA,MAC9B,cAAc,OAAO;AAAA,MACrB,gBAAgB,OAAO;AAAA,IACzB,CAAC;AAED,iBAAa,2BAA2B,OAAO;AAC/C,UAAM,YAAY,MAAM,OAAO,iBAAiB;AAChD,iBAAa,cAAc,SAAS,IAAI,OAAO;AAE/C,iBAAa,wBAAwB,OAAO;AAC5C,UAAM,QAAQ,OAAO,KAAK,SAAS;AACnC,iBAAa,UAAU,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,OAAO;AAEvD,iBAAa,uBAAuB,OAAO;AAC3C,UAAM,SAAS,MAAM,OAAO,YAAY,WAAW,KAAK;AAExD,QAAI,KAAK,MAAM;AACb,4BAAsB,MAAM;AAAA,IAC9B,OAAO;AACL,wBAAkB,MAAM;AAAA,IAC1B;AAEA,QAAI,CAAC,OAAO,UAAU;AACpB,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAK;AACZ,UAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,EAAE,UAAU,OAAO,OAAO,QAAQ,GAAG,MAAM,CAAC,CAAC;AAAA,IAC1E,OAAO;AACL,iBAAW,OAAO;AAAA,IACpB;AACA,YAAQ,WAAW;AAAA,EACrB;AACF;;;AC3DA,SAAS,cAAAG,mBAAkB;AAIpB,SAAS,cAAc,MAA2C;AACvE,QAAM,SAAS,cAAc,IAAI;AACjC,QAAM,YAAY,OAAO,UAAUC,YAAW,OAAO,OAAO,IAAI;AAEhE,MAAI,KAAK,MAAM;AACb,oBAAgB,QAAQ,SAAS;AAAA,EACnC,OAAO;AACL,gBAAY,QAAQ,SAAS;AAAA,EAC/B;AACF;;;ACbA,SAAS,gBAAAC,qBAAoB;AAI7B,eAAsB,iBAAiB,MAAuD;AAC5F,QAAM,SAAS,cAAc,IAAI;AAEjC,MAAI,CAAC,OAAO,cAAc;AACxB,eAAW,6EAA6E;AACxF,YAAQ,WAAW;AACnB;AAAA,EACF;AAEA,MAAI,CAAC,OAAO,SAAS;AACnB,eAAW,mFAAmF;AAC9F,YAAQ,WAAW;AACnB;AAAA,EACF;AAEA,MAAI;AAEF,UAAM,SAAS,IAAIC,cAAa;AAAA,MAC9B,cAAc,OAAO;AAAA,MACrB,gBAAgB,OAAO;AAAA,IACzB,CAAC;AAED,UAAM,OAAO,MAAM,OAAO,iBAAiB;AAC3C,YAAQ,IAAI,IAAI;AAAA,EAClB,SAAS,KAAK;AACZ,eAAW,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAC3D,YAAQ,WAAW;AAAA,EACrB;AACF;;;AChCA,SAAS,gBAAgB,qBAAqB;AAIvC,SAAS,YAAY,WAAmB,MAA8C;AAC3F,QAAM,SAAS,cAAc,IAAI;AAEjC,MAAI,CAAC,OAAO,SAAS;AACnB,eAAW,mFAAmF;AAC9F,YAAQ,WAAW;AACnB;AAAA,EACF;AAEA,MAAI;AACF,iBAAa,aAAa,OAAO,OAAO,IAAI,KAAK,WAAW,KAAK;AAEjE,UAAM,aAAa,eAAe,EAAE,SAAS,OAAO,QAAQ,CAAC;AAC7D,UAAM,QAAQ,cAAc,YAAY,SAAS;AACjD,YAAQ,IAAI,KAAK;AAAA,EACnB,SAAS,KAAK;AACZ,eAAW,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAC3D,YAAQ,WAAW;AAAA,EACrB;AACF;;;ACvBA,OAAOC,YAAW;AAalB,eAAsB,aACpB,MACA,MACe;AACf,QAAM,SAAS,cAAc,IAAI;AACjC,QAAM,UAAU;AAChB,QAAM,UAAU,KAAK,WAAW;AAEhC,MAAI;AACF,UAAM,MAAM,GAAG,OAAO,cAAc,mBAAmB,IAAI,CAAC;AAC5D,iBAAa,OAAO,GAAG,IAAI,OAAO;AAElC,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,SAAS,EAAE,UAAU,mBAAmB;AAAA,IAC1C,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,OAAO,MAAM,SAAS,KAAK,EAAE,MAAM,MAAM,EAAE;AACjD,iBAAW,gBAAgB,SAAS,MAAM,KAAK,QAAQ,SAAS,UAAU,EAAE;AAC5E,cAAQ,WAAW;AACnB;AAAA,IACF;AAEA,UAAM,OAAQ,MAAM,SAAS,KAAK;AAElC,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAAA,IAC3C,OAAO;AACL,cAAQ,IAAI;AACZ,cAAQ,IAAIC,OAAM,KAAK,oBAAoB,CAAC;AAC5C,cAAQ,IAAIA,OAAM,IAAI,OAAO,SAAI,OAAO,EAAE,CAAC,CAAC;AAC5C,cAAQ,IAAI,eAAe,KAAK,IAAI,EAAE;AACtC,cAAQ,IAAI,eAAe,KAAK,MAAM,EAAE;AACxC,UAAI,KAAK,WAAW;AAClB,gBAAQ,IAAI,eAAe,KAAK,SAAS,EAAE;AAAA,MAC7C;AACA,UAAI,KAAK,YAAY;AACnB,gBAAQ,IAAI,eAAe,KAAK,UAAU,EAAE;AAAA,MAC9C;AACA,cAAQ,IAAI;AAAA,IACd;AAAA,EACF,SAAS,KAAK;AACZ,eAAW,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAC3D,YAAQ,WAAW;AAAA,EACrB;AACF;;;AC1DA,OAAOC,YAAW;AAClB,SAAS,gBAAAC,qBAAoB;AAI7B,eAAsB,mBACpB,MACA,MACe;AACf,QAAM,SAAS,cAAc,IAAI;AAEjC,MAAI,CAAC,OAAO,QAAQ;AAClB,eAAW,8DAA8D;AACzE,YAAQ,WAAW;AACnB;AAAA,EACF;AAEA,QAAM,UAAU,KAAK,WAAW;AAEhC,MAAI;AACF,iBAAa,mBAAmB,IAAI,QAAQ,OAAO;AAEnD,UAAM,SAAS,IAAIC,cAAa;AAAA,MAC9B,QAAQ,OAAO;AAAA,IACjB,CAAC;AAED,UAAMC,SAAQ,MAAM,OAAO,YAAY,MAAM,KAAK,eAAe,EAAE;AAEnE,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAUA,QAAO,MAAM,CAAC,CAAC;AAAA,IAC5C,OAAO;AACL,cAAQ,IAAI;AACZ,cAAQ,IAAIC,OAAM,MAAM,KAAK,wBAAmB,CAAC;AACjD,cAAQ,IAAIA,OAAM,IAAI,OAAO,SAAI,OAAO,EAAE,CAAC,CAAC;AAC5C,cAAQ,IAAI,yBAAyBD,OAAM,EAAE,EAAE;AAC/C,cAAQ,IAAI,yBAAyBA,OAAM,SAAS,EAAE;AACtD,UAAIA,OAAM,aAAa;AACrB,gBAAQ,IAAI,yBAAyBA,OAAM,WAAW,EAAE;AAAA,MAC1D;AACA,cAAQ,IAAI,yBAAyBC,OAAM,OAAOD,OAAM,iBAAiB,CAAC,EAAE;AAC5E,cAAQ,IAAI;AACZ,cAAQ,IAAIC,OAAM,IAAI,oEAA+D,CAAC;AACtF,cAAQ,IAAI;AAAA,IACd;AAAA,EACF,SAAS,KAAK;AACZ,UAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,EAAE,OAAO,QAAQ,GAAG,MAAM,CAAC,CAAC;AAAA,IACzD,OAAO;AACL,iBAAW,OAAO;AAAA,IACpB;AACA,YAAQ,WAAW;AAAA,EACrB;AACF;;;ACrDA,OAAOC,YAAW;AAClB,SAAS,gBAAAC,qBAAoB;AAI7B,eAAsB,iBACpB,MACe;AACf,QAAM,SAAS,cAAc,IAAI;AAEjC,MAAI,CAAC,OAAO,QAAQ;AAClB,eAAW,8DAA8D;AACzE,YAAQ,WAAW;AACnB;AAAA,EACF;AAEA,QAAM,UAAU,KAAK,WAAW;AAEhC,MAAI;AACF,iBAAa,qBAAqB,OAAO;AAEzC,UAAM,SAAS,IAAIC,cAAa;AAAA,MAC9B,QAAQ,OAAO;AAAA,IACjB,CAAC;AAED,UAAM,SAAS,MAAM,OAAO,WAAW;AAEvC,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA,IAC7C,WAAW,OAAO,WAAW,GAAG;AAC9B,cAAQ,IAAI;AACZ,cAAQ,IAAIC,OAAM,IAAI,oBAAoB,CAAC;AAC3C,cAAQ,IAAI;AAAA,IACd,OAAO;AACL,cAAQ,IAAI;AACZ,cAAQ,IAAIA,OAAM,KAAK,aAAa,OAAO,MAAM,GAAG,CAAC;AACrD,cAAQ,IAAIA,OAAM,IAAI,OAAO,SAAI,OAAO,EAAE,CAAC,CAAC;AAC5C,iBAAWC,UAAS,QAAQ;AAC1B,cAAM,OAAOC,YAAWD,OAAM,SAAS;AACvC,gBAAQ,IAAI,KAAKD,OAAM,KAAKC,OAAM,SAAS,CAAC,IAAID,OAAM,IAAI,IAAIC,OAAM,EAAE,GAAG,CAAC,EAAE;AAC5E,YAAIA,OAAM,aAAa;AACrB,kBAAQ,IAAI,OAAOA,OAAM,WAAW,EAAE;AAAA,QACxC;AACA,gBAAQ,IAAI,gBAAgB,IAAI,EAAE;AAClC,YAAIA,OAAM,gBAAgB;AACxB,kBAAQ,IAAI,sBAAsBC,YAAWD,OAAM,cAAc,CAAC,EAAE;AAAA,QACtE;AACA,gBAAQ,IAAI;AAAA,MACd;AAAA,IACF;AAAA,EACF,SAAS,KAAK;AACZ,UAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,EAAE,OAAO,QAAQ,GAAG,MAAM,CAAC,CAAC;AAAA,IACzD,OAAO;AACL,iBAAW,OAAO;AAAA,IACpB;AACA,YAAQ,WAAW;AAAA,EACrB;AACF;AAEA,SAASC,YAAW,IAAoB;AACtC,MAAI;AACF,WAAO,IAAI,KAAK,EAAE,EAAE,mBAAmB,SAAS;AAAA,MAC9C,MAAM;AAAA,MACN,OAAO;AAAA,MACP,KAAK;AAAA,IACP,CAAC;AAAA,EACH,QAAQ;AACN,WAAO,OAAO,EAAE;AAAA,EAClB;AACF;;;ACvEA,OAAOC,YAAW;AAClB,SAAS,gBAAAC,qBAAoB;AAI7B,eAAsB,mBACpB,IACA,MACe;AACf,QAAM,SAAS,cAAc,IAAI;AAEjC,MAAI,CAAC,OAAO,QAAQ;AAClB,eAAW,8DAA8D;AACzE,YAAQ,WAAW;AACnB;AAAA,EACF;AAEA,QAAM,UAAU,KAAK,WAAW;AAEhC,MAAI;AACF,iBAAa,kBAAkB,EAAE,OAAO,OAAO;AAE/C,UAAM,SAAS,IAAIC,cAAa;AAAA,MAC9B,QAAQ,OAAO;AAAA,IACjB,CAAC;AAED,UAAM,OAAO,YAAY,EAAE;AAE3B,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,EAAE,SAAS,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC;AAAA,IAC5D,OAAO;AACL,cAAQ,IAAI;AACZ,cAAQ,IAAIC,OAAM,MAAM,KAAK,wBAAmB,CAAC;AACjD,cAAQ,IAAIA,OAAM,IAAI,SAAS,EAAE,EAAE,CAAC;AACpC,cAAQ,IAAI;AAAA,IACd;AAAA,EACF,SAAS,KAAK;AACZ,UAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,EAAE,OAAO,QAAQ,GAAG,MAAM,CAAC,CAAC;AAAA,IACzD,OAAO;AACL,iBAAW,OAAO;AAAA,IACpB;AACA,YAAQ,WAAW;AAAA,EACrB;AACF;;;AXhCA,IAAM,UAAU;AAEhB,IAAM,UAAU,IAAI,QAAQ;AAE5B,QACG,KAAK,QAAQ,EACb,YAAY,2DAAsD,EAClE,QAAQC,OAAM,KAAK,MAAM,IAAI,MAAM,OAAO;AAAA,GAAM,iBAAiB,cAAc;AAGlF,IAAM,gBAAgB,CAAC,QACrB,IACG,OAAO,wBAAwB,eAAe,EAC9C,OAAO,qBAAqB,0BAA0B,EACtD,OAAO,mBAAmB,mCAAmC,EAC7D,OAAO,aAAa,qBAAqB;AAG9C,QACG,QAAQ,MAAM,EACd,YAAY,0BAA0B,EACtC,OAAO,aAAa,qBAAqB,EACzC,OAAO,CAAC,SAAS,YAAY,IAAI,CAAC;AAGrC;AAAA,EACE,QACG,QAAQ,QAAQ,EAChB,YAAY,sCAAsC,EAClD,OAAO,UAAU,uBAAuB;AAC7C,EAAE,OAAO,CAAC,SAAS,cAAc,IAAI,CAAC;AAGtC;AAAA,EACE,QACG,QAAQ,QAAQ,EAChB,YAAY,4BAA4B,EACxC,OAAO,UAAU,uBAAuB;AAC7C,EAAE,OAAO,CAAC,SAAS,cAAc,IAAI,CAAC;AAGtC;AAAA,EACE,QACG,QAAQ,WAAW,EACnB,YAAY,uCAAuC;AACxD,EAAE,OAAO,CAAC,SAAS,iBAAiB,IAAI,CAAC;AAGzC;AAAA,EACE,QACG,QAAQ,kBAAkB,EAC1B,YAAY,6CAA6C;AAC9D,EAAE,OAAO,CAAC,WAAW,SAAS,YAAY,WAAW,IAAI,CAAC;AAG1D;AAAA,EACE,QACG,QAAQ,cAAc,EACtB,YAAY,yCAAyC,EACrD,OAAO,UAAU,uBAAuB;AAC7C,EAAE,OAAO,CAAC,MAAM,SAAS,aAAa,MAAM,IAAI,CAAC;AAGjD,IAAM,QAAQ,QACX,QAAQ,OAAO,EACf,YAAY,eAAe;AAG9B;AAAA,EACE,MACG,QAAQ,eAAe,EACvB,YAAY,oBAAoB,EAChC,OAAO,wBAAwB,mBAAmB,EAClD,OAAO,UAAU,uBAAuB;AAC7C,EAAE,OAAO,CAAC,MAAM,SAAS,mBAAmB,MAAM,IAAI,CAAC;AAGvD;AAAA,EACE,MACG,QAAQ,MAAM,EACd,YAAY,iBAAiB,EAC7B,OAAO,UAAU,uBAAuB;AAC7C,EAAE,OAAO,CAAC,SAAS,iBAAiB,IAAI,CAAC;AAGzC;AAAA,EACE,MACG,QAAQ,aAAa,EACrB,YAAY,uBAAuB,EACnC,OAAO,UAAU,uBAAuB;AAC7C,EAAE,OAAO,CAAC,IAAI,SAAS,mBAAmB,IAAI,IAAI,CAAC;AAEnD,QAAQ,MAAM;","names":["chalk","writeFileSync","existsSync","chalk","resolve","chalk","existsSync","writeFileSync","existsSync","existsSync","TetherClient","TetherClient","chalk","chalk","chalk","TetherClient","TetherClient","agent","chalk","chalk","TetherClient","TetherClient","chalk","agent","formatDate","chalk","TetherClient","TetherClient","chalk","chalk"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/utils/display.ts","../src/commands/init.ts","../src/config.ts","../src/commands/verify.ts","../src/commands/status.ts","../src/commands/challenge.ts","../src/commands/sign.ts","../src/commands/check.ts","../src/commands/agent-create.ts","../src/commands/agent-list.ts","../src/commands/agent-delete.ts"],"sourcesContent":["import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { BANNER } from './utils/display.js';\nimport { initCommand } from './commands/init.js';\nimport { verifyCommand } from './commands/verify.js';\nimport { statusCommand } from './commands/status.js';\nimport { challengeCommand } from './commands/challenge.js';\nimport { signCommand } from './commands/sign.js';\nimport { checkCommand } from './commands/check.js';\nimport { agentCreateCommand } from './commands/agent-create.js';\nimport { agentListCommand } from './commands/agent-list.js';\nimport { agentDeleteCommand } from './commands/agent-delete.js';\n\nconst VERSION = '1.0.7';\n\nconst program = new Command();\n\nprogram\n .name('tether')\n .description('CLI for tether.name — AI agent identity verification')\n .version(chalk.cyan(BANNER) + ` v${VERSION}\\n`, '-v, --version', 'Show version');\n\n// Global options\nconst addGlobalOpts = (cmd: Command): Command =>\n cmd\n .option('--agent-id <id>', 'Agent ID')\n .option('--key-path <path>', 'Path to private key file')\n .option('--api-key <key>', 'API key for management operations')\n .option('--verbose', 'Enable debug output');\n\n// tether init\nprogram\n .command('init')\n .description('Interactive setup wizard')\n .option('--verbose', 'Enable debug output')\n .action((opts) => initCommand(opts));\n\n// tether verify\naddGlobalOpts(\n program\n .command('verify')\n .description('Perform a full identity verification')\n .option('--json', 'Output result as JSON'),\n).action((opts) => verifyCommand(opts));\n\n// tether status\naddGlobalOpts(\n program\n .command('status')\n .description('Show current configuration')\n .option('--json', 'Output result as JSON'),\n).action((opts) => statusCommand(opts));\n\n// tether challenge\naddGlobalOpts(\n program\n .command('challenge')\n .description('Request a challenge code from the API'),\n).action((opts) => challengeCommand(opts));\n\n// tether sign <challenge>\naddGlobalOpts(\n program\n .command('sign <challenge>')\n .description('Sign a challenge string and print the proof'),\n).action((challenge, opts) => signCommand(challenge, opts));\n\n// tether check <code>\naddGlobalOpts(\n program\n .command('check <code>')\n .description('Check the status of a challenge by code')\n .option('--json', 'Output result as JSON'),\n).action((code, opts) => checkCommand(code, opts));\n\n// tether agent (subcommand group)\nconst agent = program\n .command('agent')\n .description('Manage agents');\n\n// tether agent create <name>\naddGlobalOpts(\n agent\n .command('create <name>')\n .description('Create a new agent')\n .option('--description <text>', 'Agent description')\n .option('--json', 'Output result as JSON'),\n).action((name, opts) => agentCreateCommand(name, opts));\n\n// tether agent list\naddGlobalOpts(\n agent\n .command('list')\n .description('List all agents')\n .option('--json', 'Output result as JSON'),\n).action((opts) => agentListCommand(opts));\n\n// tether agent delete <id>\naddGlobalOpts(\n agent\n .command('delete <id>')\n .description('Delete an agent by ID')\n .option('--json', 'Output result as JSON'),\n).action((id, opts) => agentDeleteCommand(id, opts));\n\nprogram.parse();\n","import chalk from 'chalk';\nimport type { VerificationResult } from 'tether-name';\nimport { type TetherConfig } from '../config.js';\n\nexport function maskId(id: string): string {\n if (id.length <= 4) return id;\n return '••••' + id.slice(-4);\n}\n\nexport function printVerifyResult(result: VerificationResult): void {\n const width = 48;\n const hr = '─'.repeat(width);\n\n console.log();\n if (result.verified) {\n console.log(chalk.green('┌' + hr + '┐'));\n console.log(chalk.green('│') + center(chalk.green.bold('✓ Identity Verified'), width, 19) + chalk.green('│'));\n console.log(chalk.green('├' + hr + '┤'));\n\n if (result.agentName) {\n console.log(chalk.green('│') + padLine(` Agent: ${result.agentName}`, width) + chalk.green('│'));\n }\n if (result.verifyUrl) {\n console.log(chalk.green('│') + padLine(` URL: ${result.verifyUrl}`, width) + chalk.green('│'));\n }\n if (result.registeredSince) {\n const date = formatDate(result.registeredSince);\n console.log(chalk.green('│') + padLine(` Since: ${date}`, width) + chalk.green('│'));\n }\n\n console.log(chalk.green('└' + hr + '┘'));\n } else {\n console.log(chalk.red('┌' + hr + '┐'));\n console.log(chalk.red('│') + center(chalk.red.bold('✗ Verification Failed'), width, 21) + chalk.red('│'));\n console.log(chalk.red('├' + hr + '┤'));\n\n if (result.error) {\n console.log(chalk.red('│') + padLine(` ${result.error}`, width) + chalk.red('│'));\n }\n\n console.log(chalk.red('└' + hr + '┘'));\n }\n console.log();\n}\n\nexport function printVerifyResultJSON(result: VerificationResult): void {\n console.log(JSON.stringify(result, null, 2));\n}\n\nexport function printStatus(config: TetherConfig, keyExists: boolean): void {\n console.log();\n console.log(chalk.bold(' Tether Configuration'));\n console.log(chalk.dim(' ' + '─'.repeat(30)));\n console.log(` Agent ID: ${config.agentId ? maskId(config.agentId) : chalk.dim('(not set)')}`);\n console.log(` Key path: ${config.keyPath || chalk.dim('(not set)')}`);\n if (config.keyPath) {\n console.log(` Key exists: ${keyExists ? chalk.green('yes') : chalk.red('no')}`);\n }\n console.log();\n}\n\nexport function printStatusJSON(config: TetherConfig, keyExists: boolean): void {\n console.log(JSON.stringify({\n agentId: config.agentId ? maskId(config.agentId) : null,\n keyPath: config.keyPath || null,\n keyExists,\n }, null, 2));\n}\n\nexport function printError(message: string): void {\n console.error(chalk.red(`Error: ${message}`));\n}\n\nexport function printVerbose(message: string, verbose: boolean): void {\n if (verbose) {\n console.error(chalk.dim(`[debug] ${message}`));\n }\n}\n\nexport const BANNER = `\n ╔╦╗╔═╗╔╦╗╦ ╦╔═╗╦═╗\n ║ ║╣ ║ ╠═╣║╣ ╠╦╝\n ╩ ╚═╝ ╩ ╩ ╩╚═╝╩╚═\n`;\n\nfunction padLine(text: string, width: number): string {\n const visible = stripAnsi(text);\n const pad = width - visible.length;\n return text + ' '.repeat(Math.max(0, pad));\n}\n\nfunction center(text: string, width: number, visibleLength: number): string {\n const leftPad = Math.floor((width - visibleLength) / 2);\n const rightPad = width - visibleLength - leftPad;\n return ' '.repeat(leftPad) + text + ' '.repeat(rightPad);\n}\n\nfunction stripAnsi(str: string): string {\n // eslint-disable-next-line no-control-regex\n return str.replace(/\\x1b\\[[0-9;]*m/g, '');\n}\n\nfunction formatDate(iso: string): string {\n try {\n return new Date(iso).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n } catch {\n return iso;\n }\n}\n","import { createInterface } from 'readline';\nimport { generateKeyPairSync } from 'crypto';\nimport { writeFileSync, existsSync } from 'fs';\nimport { resolve } from 'path';\nimport chalk from 'chalk';\nimport { saveConfig, getConfigPath } from '../config.js';\n\nfunction prompt(rl: ReturnType<typeof createInterface>, question: string): Promise<string> {\n return new Promise((resolve) => {\n rl.question(question, (answer) => resolve(answer.trim()));\n });\n}\n\nexport async function initCommand(opts: { verbose?: boolean }): Promise<void> {\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n\n try {\n console.log();\n console.log(chalk.bold(' Tether Setup'));\n console.log(chalk.dim(' ' + '─'.repeat(30)));\n console.log();\n\n // Agent ID\n const envAgentId = process.env.TETHER_AGENT_ID;\n let agentId: string;\n if (envAgentId) {\n console.log(chalk.dim(` Using TETHER_AGENT_ID from environment`));\n agentId = envAgentId;\n } else {\n agentId = await prompt(rl, ' Agent ID: ');\n }\n\n if (!agentId) {\n console.log(chalk.red('\\n Agent ID is required.'));\n return;\n }\n\n // Private key\n const envKeyPath = process.env.TETHER_PRIVATE_KEY_PATH;\n let keyPath: string;\n\n if (envKeyPath) {\n console.log(chalk.dim(` Using TETHER_PRIVATE_KEY_PATH from environment`));\n keyPath = envKeyPath;\n } else {\n const genAnswer = await prompt(rl, ' Generate a new RSA keypair? (y/N): ');\n\n if (genAnswer.toLowerCase() === 'y') {\n keyPath = await generateKeypair(opts.verbose);\n } else {\n keyPath = await prompt(rl, ' Path to private key: ');\n }\n }\n\n if (!keyPath) {\n console.log(chalk.red('\\n Private key path is required.'));\n return;\n }\n\n keyPath = resolve(keyPath);\n\n if (!existsSync(keyPath)) {\n console.log(chalk.yellow(`\\n Warning: Key file not found at ${keyPath}`));\n }\n\n // Save config\n saveConfig({ agentId, keyPath });\n\n console.log();\n console.log(chalk.green(' ✓ Configuration saved to ' + getConfigPath()));\n console.log();\n } finally {\n rl.close();\n }\n}\n\nfunction generateKeypair(verbose?: boolean): string {\n const privatePath = resolve('.tether-private-key.pem');\n const publicPath = resolve('.tether-public-key.pem');\n\n if (verbose) {\n console.log(chalk.dim(` [debug] Generating RSA-2048 keypair...`));\n }\n\n const { publicKey, privateKey } = generateKeyPairSync('rsa', {\n modulusLength: 2048,\n publicKeyEncoding: { type: 'spki', format: 'pem' },\n privateKeyEncoding: { type: 'pkcs1', format: 'pem' },\n });\n\n writeFileSync(privatePath, privateKey, { mode: 0o600 });\n writeFileSync(publicPath, publicKey);\n\n console.log(chalk.green(` ✓ Private key: ${privatePath}`));\n console.log(chalk.green(` ✓ Public key: ${publicPath}`));\n console.log();\n console.log(chalk.dim(' Upload the public key to tether.name to complete registration.'));\n\n return privatePath;\n}\n","import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs';\nimport { join } from 'path';\nimport { homedir } from 'os';\n\nexport interface TetherConfig {\n agentId: string;\n keyPath: string;\n apiKey: string;\n}\n\nexport interface CLIFlags {\n agentId?: string;\n keyPath?: string;\n apiKey?: string;\n}\n\nconst CONFIG_DIR = join(homedir(), '.tether');\nconst CONFIG_FILE = join(CONFIG_DIR, 'config.json');\n\nexport function getConfigPath(): string {\n return CONFIG_FILE;\n}\n\nexport function getConfigDir(): string {\n return CONFIG_DIR;\n}\n\nexport function loadConfigFile(): Partial<TetherConfig> {\n try {\n if (!existsSync(CONFIG_FILE)) {\n return {};\n }\n const raw = readFileSync(CONFIG_FILE, 'utf-8');\n return JSON.parse(raw);\n } catch {\n return {};\n }\n}\n\nexport function saveConfig(config: Partial<TetherConfig>): void {\n mkdirSync(CONFIG_DIR, { recursive: true });\n writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2) + '\\n', 'utf-8');\n}\n\nexport function resolveConfig(flags: CLIFlags = {}): TetherConfig {\n const file = loadConfigFile();\n\n return {\n agentId:\n flags.agentId ||\n process.env.TETHER_AGENT_ID ||\n file.agentId ||\n '',\n keyPath:\n flags.keyPath ||\n process.env.TETHER_PRIVATE_KEY_PATH ||\n file.keyPath ||\n '',\n apiKey:\n flags.apiKey ||\n process.env.TETHER_API_KEY ||\n file.apiKey ||\n '',\n };\n}\n","import { TetherClient } from 'tether-name';\nimport { resolveConfig, type CLIFlags } from '../config.js';\nimport { printVerifyResult, printVerifyResultJSON, printError, printVerbose } from '../utils/display.js';\n\nexport async function verifyCommand(opts: CLIFlags & { json?: boolean; verbose?: boolean }): Promise<void> {\n const config = resolveConfig(opts);\n\n if (!config.agentId) {\n printError('No agent ID configured. Run \"tether init\" or set TETHER_AGENT_ID.');\n process.exitCode = 1;\n return;\n }\n\n if (!config.keyPath) {\n printError('No private key path configured. Run \"tether init\" or set TETHER_PRIVATE_KEY_PATH.');\n process.exitCode = 1;\n return;\n }\n\n const verbose = opts.verbose ?? false;\n\n try {\n printVerbose(`Agent ID: ${config.agentId}`, verbose);\n printVerbose(`Key path: ${config.keyPath}`, verbose);\n\n const client = new TetherClient({\n agentId: config.agentId,\n privateKeyPath: config.keyPath,\n });\n\n printVerbose('Requesting challenge...', verbose);\n const challenge = await client.requestChallenge();\n printVerbose(`Challenge: ${challenge}`, verbose);\n\n printVerbose('Signing challenge...', verbose);\n const proof = client.sign(challenge);\n printVerbose(`Proof: ${proof.slice(0, 32)}...`, verbose);\n\n printVerbose('Submitting proof...', verbose);\n const result = await client.submitProof(challenge, proof);\n\n if (opts.json) {\n printVerifyResultJSON(result);\n } else {\n printVerifyResult(result);\n }\n\n if (!result.verified) {\n process.exitCode = 1;\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n if (opts.json) {\n console.log(JSON.stringify({ verified: false, error: message }, null, 2));\n } else {\n printError(message);\n }\n process.exitCode = 1;\n }\n}\n","import { existsSync } from 'fs';\nimport { resolveConfig, type CLIFlags } from '../config.js';\nimport { printStatus, printStatusJSON } from '../utils/display.js';\n\nexport function statusCommand(opts: CLIFlags & { json?: boolean }): void {\n const config = resolveConfig(opts);\n const keyExists = config.keyPath ? existsSync(config.keyPath) : false;\n\n if (opts.json) {\n printStatusJSON(config, keyExists);\n } else {\n printStatus(config, keyExists);\n }\n}\n","import { TetherClient } from 'tether-name';\nimport { resolveConfig, type CLIFlags } from '../config.js';\nimport { printError, printVerbose } from '../utils/display.js';\n\nexport async function challengeCommand(opts: CLIFlags & { verbose?: boolean }): Promise<void> {\n const config = resolveConfig(opts);\n\n if (!config.agentId) {\n printError('No agent ID configured. Run \"tether init\" or set TETHER_AGENT_ID.');\n process.exitCode = 1;\n return;\n }\n\n if (!config.keyPath) {\n printError('No private key path configured. Run \"tether init\" or set TETHER_PRIVATE_KEY_PATH.');\n process.exitCode = 1;\n return;\n }\n\n try {\n\n const client = new TetherClient({\n agentId: config.agentId,\n privateKeyPath: config.keyPath,\n });\n\n const code = await client.requestChallenge();\n console.log(code);\n } catch (err) {\n printError(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n}\n","import { loadPrivateKey, signChallenge } from 'tether-name';\nimport { resolveConfig, type CLIFlags } from '../config.js';\nimport { printError, printVerbose } from '../utils/display.js';\n\nexport function signCommand(challenge: string, opts: CLIFlags & { verbose?: boolean }): void {\n const config = resolveConfig(opts);\n\n if (!config.keyPath) {\n printError('No private key path configured. Run \"tether init\" or set TETHER_PRIVATE_KEY_PATH.');\n process.exitCode = 1;\n return;\n }\n\n try {\n printVerbose(`Key path: ${config.keyPath}`, opts.verbose ?? false);\n\n const privateKey = loadPrivateKey({ keyPath: config.keyPath });\n const proof = signChallenge(privateKey, challenge);\n console.log(proof);\n } catch (err) {\n printError(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n}\n","import chalk from 'chalk';\nimport { type CLIFlags } from '../config.js';\nimport { printError, printVerbose } from '../utils/display.js';\n\ninterface ChallengeStatusResponse {\n challenge: string;\n status: string;\n createdAt?: number;\n verifiedAt?: number;\n agentName?: string;\n poll?: {\n intervalMs: number;\n maxAttempts: number;\n };\n [key: string]: unknown;\n}\n\nexport function formatEpochMs(value?: number): string | null {\n if (typeof value !== 'number' || Number.isNaN(value)) return null;\n return new Date(value).toISOString();\n}\n\nexport async function checkCommand(\n code: string,\n opts: CLIFlags & { json?: boolean; verbose?: boolean },\n): Promise<void> {\n const baseUrl = 'https://api.tether.name';\n const verbose = opts.verbose ?? false;\n\n try {\n const url = `${baseUrl}/challenge/${encodeURIComponent(code)}`;\n printVerbose(`GET ${url}`, verbose);\n\n const response = await fetch(url, {\n headers: { 'Accept': 'application/json' },\n });\n\n if (!response.ok) {\n const text = await response.text().catch(() => '');\n printError(`API returned ${response.status}: ${text || response.statusText}`);\n process.exitCode = 1;\n return;\n }\n\n const data = (await response.json()) as ChallengeStatusResponse;\n\n if (opts.json) {\n console.log(JSON.stringify(data, null, 2));\n } else {\n const createdAt = formatEpochMs(data.createdAt);\n const verifiedAt = formatEpochMs(data.verifiedAt);\n\n console.log();\n console.log(chalk.bold(' Challenge Status'));\n console.log(chalk.dim(' ' + '─'.repeat(30)));\n console.log(` Code: ${data.challenge || code}`);\n console.log(` Status: ${data.status}`);\n if (data.agentName) {\n console.log(` Agent: ${data.agentName}`);\n }\n if (createdAt) {\n console.log(` Created: ${createdAt}`);\n }\n if (verifiedAt) {\n console.log(` Verified: ${verifiedAt}`);\n }\n console.log();\n }\n } catch (err) {\n printError(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n}\n","import chalk from 'chalk';\nimport { TetherClient } from 'tether-name';\nimport { resolveConfig, type CLIFlags } from '../config.js';\nimport { printError, printVerbose } from '../utils/display.js';\n\nexport async function agentCreateCommand(\n name: string,\n opts: CLIFlags & { description?: string; json?: boolean; verbose?: boolean },\n): Promise<void> {\n const config = resolveConfig(opts);\n\n if (!config.apiKey) {\n printError('No API key configured. Set TETHER_API_KEY or pass --api-key.');\n process.exitCode = 1;\n return;\n }\n\n const verbose = opts.verbose ?? false;\n\n try {\n printVerbose(`Creating agent \"${name}\"...`, verbose);\n\n const client = new TetherClient({\n apiKey: config.apiKey,\n });\n\n const agent = await client.createAgent(name, opts.description || '');\n\n if (opts.json) {\n console.log(JSON.stringify(agent, null, 2));\n } else {\n console.log();\n console.log(chalk.green.bold(' ✓ Agent created'));\n console.log(chalk.dim(' ' + '─'.repeat(40)));\n console.log(` ID: ${agent.id}`);\n console.log(` Name: ${agent.agentName}`);\n if (agent.description) {\n console.log(` Description: ${agent.description}`);\n }\n console.log(` Registration Token: ${chalk.yellow(agent.registrationToken)}`);\n console.log();\n console.log(chalk.dim(' Save the registration token — it cannot be retrieved later.'));\n console.log();\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n if (opts.json) {\n console.log(JSON.stringify({ error: message }, null, 2));\n } else {\n printError(message);\n }\n process.exitCode = 1;\n }\n}\n","import chalk from 'chalk';\nimport { TetherClient } from 'tether-name';\nimport { resolveConfig, type CLIFlags } from '../config.js';\nimport { printError, printVerbose } from '../utils/display.js';\n\nexport async function agentListCommand(\n opts: CLIFlags & { json?: boolean; verbose?: boolean },\n): Promise<void> {\n const config = resolveConfig(opts);\n\n if (!config.apiKey) {\n printError('No API key configured. Set TETHER_API_KEY or pass --api-key.');\n process.exitCode = 1;\n return;\n }\n\n const verbose = opts.verbose ?? false;\n\n try {\n printVerbose('Listing agents...', verbose);\n\n const client = new TetherClient({\n apiKey: config.apiKey,\n });\n\n const agents = await client.listAgents();\n\n if (opts.json) {\n console.log(JSON.stringify(agents, null, 2));\n } else if (agents.length === 0) {\n console.log();\n console.log(chalk.dim(' No agents found.'));\n console.log();\n } else {\n console.log();\n console.log(chalk.bold(` Agents (${agents.length})`));\n console.log(chalk.dim(' ' + '─'.repeat(40)));\n for (const agent of agents) {\n const date = formatDate(agent.createdAt);\n console.log(` ${chalk.cyan(agent.agentName)} ${chalk.dim(`(${agent.id})`)}`);\n if (agent.description) {\n console.log(` ${agent.description}`);\n }\n console.log(` Created: ${date}`);\n if (agent.lastVerifiedAt) {\n console.log(` Last verified: ${formatDate(agent.lastVerifiedAt)}`);\n }\n console.log();\n }\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n if (opts.json) {\n console.log(JSON.stringify({ error: message }, null, 2));\n } else {\n printError(message);\n }\n process.exitCode = 1;\n }\n}\n\nfunction formatDate(ts: number): string {\n try {\n return new Date(ts).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n } catch {\n return String(ts);\n }\n}\n","import chalk from 'chalk';\nimport { TetherClient } from 'tether-name';\nimport { resolveConfig, type CLIFlags } from '../config.js';\nimport { printError, printVerbose } from '../utils/display.js';\n\nexport async function agentDeleteCommand(\n id: string,\n opts: CLIFlags & { json?: boolean; verbose?: boolean },\n): Promise<void> {\n const config = resolveConfig(opts);\n\n if (!config.apiKey) {\n printError('No API key configured. Set TETHER_API_KEY or pass --api-key.');\n process.exitCode = 1;\n return;\n }\n\n const verbose = opts.verbose ?? false;\n\n try {\n printVerbose(`Deleting agent ${id}...`, verbose);\n\n const client = new TetherClient({\n apiKey: config.apiKey,\n });\n\n await client.deleteAgent(id);\n\n if (opts.json) {\n console.log(JSON.stringify({ deleted: true, id }, null, 2));\n } else {\n console.log();\n console.log(chalk.green.bold(' ✓ Agent deleted'));\n console.log(chalk.dim(` ID: ${id}`));\n console.log();\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n if (opts.json) {\n console.log(JSON.stringify({ error: message }, null, 2));\n } else {\n printError(message);\n }\n process.exitCode = 1;\n }\n}\n"],"mappings":"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","names":["chalk","writeFileSync","existsSync","chalk","resolve","chalk","existsSync","writeFileSync","existsSync","existsSync","TetherClient","TetherClient","chalk","chalk","chalk","TetherClient","TetherClient","agent","chalk","chalk","TetherClient","TetherClient","chalk","agent","formatDate","chalk","TetherClient","TetherClient","chalk","chalk"]}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tether-name-cli",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "CLI for tether.name - AI agent identity verification",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
|
-
"tether": "
|
|
7
|
+
"tether": "dist/cli.js"
|
|
8
8
|
},
|
|
9
9
|
"main": "./dist/cli.js",
|
|
10
10
|
"files": [
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"chalk": "^5.4.1",
|
|
44
44
|
"commander": "^13.1.0",
|
|
45
|
-
"tether-name": "^
|
|
45
|
+
"tether-name": "^2.0.0"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@types/node": "^22.13.0",
|