tether-name-cli 1.0.7 → 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 CHANGED
@@ -22,7 +22,7 @@ Requires Node.js >= 20.
22
22
  ## Quick Start
23
23
 
24
24
  ```bash
25
- # Interactive setup — configure credentials and generate a keypair
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 credential ID, private key path, and optionally generates a new RSA-2048 key pair.
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 — credential ID (masked), key file path, and API URL.
51
+ Show your current configuration — agent ID (masked) and key file path.
52
52
 
53
53
  ```bash
54
54
  tether status
@@ -84,18 +84,16 @@ 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** — `--credential-id`, `--key-path`, `--api-url`, `--api-key`
88
- 2. **Environment variables** — `TETHER_CREDENTIAL_ID`, `TETHER_PRIVATE_KEY_PATH`, `TETHER_API_URL`, `TETHER_API_KEY`
87
+ 1. **CLI flags** — `--agent-id`, `--key-path`, `--api-key`
88
+ 2. **Environment variables** — `TETHER_CREDENTIAL_ID`, `TETHER_PRIVATE_KEY_PATH`, `TETHER_API_KEY`
89
89
  3. **Config file** — `~/.tether/config.json` (created by `tether init`)
90
- 4. **Built-in defaults** — e.g. API URL defaults to `https://api.tether.name`
91
90
 
92
91
  ### Global Flags
93
92
 
94
93
  | Flag | Description |
95
94
  |---|---|
96
- | `--credential-id <id>` | Override credential ID |
95
+ | `--agent-id <id>` | Override agent ID |
97
96
  | `--key-path <path>` | Override private key file path |
98
- | `--api-url <url>` | Override API base URL |
99
97
  | `--api-key <key>` | Override API key |
100
98
  | `--verbose` | Enable debug output |
101
99
  | `--json` | Machine-readable JSON output (on supported commands) |
@@ -103,7 +101,7 @@ The CLI resolves configuration in this order (first wins):
103
101
  ## Example Workflow
104
102
 
105
103
  ```bash
106
- # 1. Set up credentials
104
+ # 1. Set up your agent
107
105
  tether init
108
106
 
109
107
  # 2. Check your config
package/dist/cli.js CHANGED
@@ -47,20 +47,18 @@ function printStatus(config, keyExists) {
47
47
  console.log();
48
48
  console.log(chalk.bold(" Tether Configuration"));
49
49
  console.log(chalk.dim(" " + "\u2500".repeat(30)));
50
- console.log(` Credential: ${config.credentialId ? maskId(config.credentialId) : chalk.dim("(not set)")}`);
50
+ console.log(` Agent ID: ${config.agentId ? maskId(config.agentId) : chalk.dim("(not set)")}`);
51
51
  console.log(` Key path: ${config.keyPath || chalk.dim("(not set)")}`);
52
52
  if (config.keyPath) {
53
53
  console.log(` Key exists: ${keyExists ? chalk.green("yes") : chalk.red("no")}`);
54
54
  }
55
- console.log(` API URL: ${config.apiUrl}`);
56
55
  console.log();
57
56
  }
58
57
  function printStatusJSON(config, keyExists) {
59
58
  console.log(JSON.stringify({
60
- credentialId: config.credentialId ? maskId(config.credentialId) : null,
59
+ agentId: config.agentId ? maskId(config.agentId) : null,
61
60
  keyPath: config.keyPath || null,
62
- keyExists,
63
- apiUrl: config.apiUrl
61
+ keyExists
64
62
  }, null, 2));
65
63
  }
66
64
  function printError(message) {
@@ -113,7 +111,6 @@ import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
113
111
  import { join } from "path";
114
112
  import { homedir } from "os";
115
113
  var CONFIG_DIR = join(homedir(), ".tether");
116
- var DEFAULT_API_URL = "https://api.tether.name";
117
114
  var CONFIG_FILE = join(CONFIG_DIR, "config.json");
118
115
  function getConfigPath() {
119
116
  return CONFIG_FILE;
@@ -136,9 +133,8 @@ function saveConfig(config) {
136
133
  function resolveConfig(flags = {}) {
137
134
  const file = loadConfigFile();
138
135
  return {
139
- credentialId: flags.credentialId || process.env.TETHER_CREDENTIAL_ID || file.credentialId || "",
136
+ agentId: flags.agentId || process.env.TETHER_AGENT_ID || file.agentId || "",
140
137
  keyPath: flags.keyPath || process.env.TETHER_PRIVATE_KEY_PATH || file.keyPath || "",
141
- apiUrl: flags.apiUrl || process.env.TETHER_API_URL || DEFAULT_API_URL,
142
138
  apiKey: flags.apiKey || process.env.TETHER_API_KEY || file.apiKey || ""
143
139
  };
144
140
  }
@@ -156,16 +152,16 @@ async function initCommand(opts) {
156
152
  console.log(chalk2.bold(" Tether Setup"));
157
153
  console.log(chalk2.dim(" " + "\u2500".repeat(30)));
158
154
  console.log();
159
- const envCredential = process.env.TETHER_CREDENTIAL_ID;
160
- let credentialId;
161
- if (envCredential) {
162
- console.log(chalk2.dim(` Using TETHER_CREDENTIAL_ID from environment`));
163
- credentialId = envCredential;
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;
164
160
  } else {
165
- credentialId = await prompt(rl, " Credential ID: ");
161
+ agentId = await prompt(rl, " Agent ID: ");
166
162
  }
167
- if (!credentialId) {
168
- console.log(chalk2.red("\n Credential ID is required."));
163
+ if (!agentId) {
164
+ console.log(chalk2.red("\n Agent ID is required."));
169
165
  return;
170
166
  }
171
167
  const envKeyPath = process.env.TETHER_PRIVATE_KEY_PATH;
@@ -190,7 +186,7 @@ async function initCommand(opts) {
190
186
  console.log(chalk2.yellow(`
191
187
  Warning: Key file not found at ${keyPath}`));
192
188
  }
193
- saveConfig({ credentialId, keyPath });
189
+ saveConfig({ agentId, keyPath });
194
190
  console.log();
195
191
  console.log(chalk2.green(" \u2713 Configuration saved to " + getConfigPath()));
196
192
  console.log();
@@ -222,8 +218,8 @@ function generateKeypair(verbose) {
222
218
  import { TetherClient } from "tether-name";
223
219
  async function verifyCommand(opts) {
224
220
  const config = resolveConfig(opts);
225
- if (!config.credentialId) {
226
- printError('No credential ID configured. Run "tether init" or set TETHER_CREDENTIAL_ID.');
221
+ if (!config.agentId) {
222
+ printError('No agent ID configured. Run "tether init" or set TETHER_AGENT_ID.');
227
223
  process.exitCode = 1;
228
224
  return;
229
225
  }
@@ -234,10 +230,10 @@ async function verifyCommand(opts) {
234
230
  }
235
231
  const verbose = opts.verbose ?? false;
236
232
  try {
237
- printVerbose(`Credential ID: ${config.credentialId}`, verbose);
233
+ printVerbose(`Agent ID: ${config.agentId}`, verbose);
238
234
  printVerbose(`Key path: ${config.keyPath}`, verbose);
239
235
  const client = new TetherClient({
240
- credentialId: config.credentialId,
236
+ agentId: config.agentId,
241
237
  privateKeyPath: config.keyPath
242
238
  });
243
239
  printVerbose("Requesting challenge...", verbose);
@@ -283,8 +279,8 @@ function statusCommand(opts) {
283
279
  import { TetherClient as TetherClient2 } from "tether-name";
284
280
  async function challengeCommand(opts) {
285
281
  const config = resolveConfig(opts);
286
- if (!config.credentialId) {
287
- printError('No credential ID configured. Run "tether init" or set TETHER_CREDENTIAL_ID.');
282
+ if (!config.agentId) {
283
+ printError('No agent ID configured. Run "tether init" or set TETHER_AGENT_ID.');
288
284
  process.exitCode = 1;
289
285
  return;
290
286
  }
@@ -295,7 +291,7 @@ async function challengeCommand(opts) {
295
291
  }
296
292
  try {
297
293
  const client = new TetherClient2({
298
- credentialId: config.credentialId,
294
+ agentId: config.agentId,
299
295
  privateKeyPath: config.keyPath
300
296
  });
301
297
  const code = await client.requestChallenge();
@@ -328,9 +324,12 @@ function signCommand(challenge, opts) {
328
324
 
329
325
  // src/commands/check.ts
330
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
+ }
331
331
  async function checkCommand(code, opts) {
332
- const config = resolveConfig(opts);
333
- const baseUrl = config.apiUrl;
332
+ const baseUrl = "https://api.tether.name";
334
333
  const verbose = opts.verbose ?? false;
335
334
  try {
336
335
  const url = `${baseUrl}/challenge/${encodeURIComponent(code)}`;
@@ -348,16 +347,21 @@ async function checkCommand(code, opts) {
348
347
  if (opts.json) {
349
348
  console.log(JSON.stringify(data, null, 2));
350
349
  } else {
350
+ const createdAt = formatEpochMs(data.createdAt);
351
+ const verifiedAt = formatEpochMs(data.verifiedAt);
351
352
  console.log();
352
353
  console.log(chalk3.bold(" Challenge Status"));
353
354
  console.log(chalk3.dim(" " + "\u2500".repeat(30)));
354
- console.log(` Code: ${data.code}`);
355
+ console.log(` Code: ${data.challenge || code}`);
355
356
  console.log(` Status: ${data.status}`);
356
- if (data.createdAt) {
357
- console.log(` Created: ${data.createdAt}`);
357
+ if (data.agentName) {
358
+ console.log(` Agent: ${data.agentName}`);
359
+ }
360
+ if (createdAt) {
361
+ console.log(` Created: ${createdAt}`);
358
362
  }
359
- if (data.verifiedAt) {
360
- console.log(` Verified: ${data.verifiedAt}`);
363
+ if (verifiedAt) {
364
+ console.log(` Verified: ${verifiedAt}`);
361
365
  }
362
366
  console.log();
363
367
  }
@@ -514,7 +518,7 @@ var VERSION = "1.0.7";
514
518
  var program = new Command();
515
519
  program.name("tether").description("CLI for tether.name \u2014 AI agent identity verification").version(chalk7.cyan(BANNER) + ` v${VERSION}
516
520
  `, "-v, --version", "Show version");
517
- var addGlobalOpts = (cmd) => cmd.option("--credential-id <id>", "Credential ID").option("--key-path <path>", "Path to private key file").option("--api-key <key>", "API key for management operations").option("--verbose", "Enable debug output");
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");
518
522
  program.command("init").description("Interactive setup wizard").option("--verbose", "Enable debug output").action((opts) => initCommand(opts));
519
523
  addGlobalOpts(
520
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/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('--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 { 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: ${config.apiUrl}`);\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: config.apiUrl,\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 // 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 { 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 apiUrl: string;\n apiKey: string;\n}\n\nexport interface CLIFlags {\n credentialId?: string;\n keyPath?: string;\n apiUrl?: string;\n apiKey?: string;\n}\n\nconst CONFIG_DIR = join(homedir(), '.tether');\nconst DEFAULT_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 apiUrl:\n flags.apiUrl ||\n process.env.TETHER_API_URL ||\n DEFAULT_API_URL,\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.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, 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 = config.apiUrl;\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":"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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"]}
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": "1.0.7",
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": "./dist/cli.js"
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": "^1.0.2"
45
+ "tether-name": "^2.0.0"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@types/node": "^22.13.0",