@tasknet-protocol/cli 0.2.1 → 0.3.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 +2 -2
- package/dist/index.js +18 -16
- package/dist/index.js.map +1 -1
- package/package.json +13 -13
package/README.md
CHANGED
|
@@ -151,8 +151,8 @@ Skills (42 total)
|
|
|
151
151
|
|
|
152
152
|
Name Version Price Verification Timeout Tasks
|
|
153
153
|
-----------------------------------------------------------------
|
|
154
|
-
image-gen 1.0.0 1.00
|
|
155
|
-
translation 2.1.0 0.50
|
|
154
|
+
image-gen 1.0.0 1.00 SUI Deterministic 1h 156
|
|
155
|
+
translation 2.1.0 0.50 SUI TimeBound 30m 89
|
|
156
156
|
...
|
|
157
157
|
```
|
|
158
158
|
|
package/dist/index.js
CHANGED
|
@@ -79,10 +79,12 @@ function formatAddress(address, length = 8) {
|
|
|
79
79
|
if (address.length <= length * 2 + 2) return address;
|
|
80
80
|
return `${address.slice(0, length + 2)}...${address.slice(-length)}`;
|
|
81
81
|
}
|
|
82
|
-
|
|
82
|
+
var MIST_PER_SUI = 1e9;
|
|
83
|
+
function formatSui(amount) {
|
|
83
84
|
const value = typeof amount === "string" ? BigInt(amount) : amount;
|
|
84
|
-
const
|
|
85
|
-
|
|
85
|
+
const sui = Number(value) / MIST_PER_SUI;
|
|
86
|
+
const formatted = sui.toFixed(4).replace(/\.?0+$/, "");
|
|
87
|
+
return `${formatted} SUI`;
|
|
86
88
|
}
|
|
87
89
|
function formatTimestamp(timestamp) {
|
|
88
90
|
const ms = typeof timestamp === "bigint" ? Number(timestamp) : Number(timestamp);
|
|
@@ -307,7 +309,7 @@ ${colors.primary("Skills")} (${agent.skills.length})
|
|
|
307
309
|
const skillRows = agent.skills.map((s) => [
|
|
308
310
|
s.name,
|
|
309
311
|
s.version,
|
|
310
|
-
|
|
312
|
+
formatSui(s.base_price_mist)
|
|
311
313
|
]);
|
|
312
314
|
output2 += table(["Name", "Version", "Price"], skillRows);
|
|
313
315
|
}
|
|
@@ -356,7 +358,7 @@ ${colors.primary("Agent Statistics")}
|
|
|
356
358
|
`;
|
|
357
359
|
output2 += ` Tasks Expired: ${stats.workerTasksExpired}
|
|
358
360
|
`;
|
|
359
|
-
output2 += ` Total Earned: ${
|
|
361
|
+
output2 += ` Total Earned: ${formatSui(stats.workerTotalEarnedMist)}
|
|
360
362
|
`;
|
|
361
363
|
output2 += ` Completion Rate: ${formatPercent(stats.completionRate)}
|
|
362
364
|
`;
|
|
@@ -371,7 +373,7 @@ ${colors.highlight("Requester Stats")}
|
|
|
371
373
|
`;
|
|
372
374
|
output2 += ` Tasks Rejected: ${stats.requesterTasksRejected}
|
|
373
375
|
`;
|
|
374
|
-
output2 += ` Total Spent: ${
|
|
376
|
+
output2 += ` Total Spent: ${formatSui(stats.requesterTotalSpentMist)}
|
|
375
377
|
`;
|
|
376
378
|
output2 += ` Rejection Rate: ${formatPercent(stats.rejectionRate)}
|
|
377
379
|
`;
|
|
@@ -435,7 +437,7 @@ function registerSkillCommands(program2) {
|
|
|
435
437
|
const rows = result.data.map((skill) => [
|
|
436
438
|
skill.name,
|
|
437
439
|
skill.version,
|
|
438
|
-
|
|
440
|
+
formatSui(skill.base_price_mist),
|
|
439
441
|
skill.verification_type_label,
|
|
440
442
|
formatDuration(skill.timeout_seconds),
|
|
441
443
|
String(skill.tasks_count)
|
|
@@ -472,9 +474,9 @@ ${colors.primary("Skill Details")}
|
|
|
472
474
|
`;
|
|
473
475
|
output2 += `${colors.muted("Agent:")} ${formatAddress(skill.agent.id)}
|
|
474
476
|
`;
|
|
475
|
-
output2 += `${colors.muted("Price:")} ${
|
|
477
|
+
output2 += `${colors.muted("Price:")} ${formatSui(skill.base_price_mist)}
|
|
476
478
|
`;
|
|
477
|
-
output2 += `${colors.muted("Worker Bond:")} ${
|
|
479
|
+
output2 += `${colors.muted("Worker Bond:")} ${formatSui(skill.worker_bond_mist)}
|
|
478
480
|
`;
|
|
479
481
|
output2 += `${colors.muted("Verification:")} ${skill.verification_type_label}
|
|
480
482
|
`;
|
|
@@ -557,7 +559,7 @@ No skills found matching "${query}"
|
|
|
557
559
|
const rows = result.data.map((skill) => [
|
|
558
560
|
skill.name,
|
|
559
561
|
skill.version,
|
|
560
|
-
|
|
562
|
+
formatSui(skill.base_price_mist),
|
|
561
563
|
skill.verification_type_label,
|
|
562
564
|
formatAddress(skill.id)
|
|
563
565
|
]);
|
|
@@ -614,7 +616,7 @@ function registerTaskCommands(program2) {
|
|
|
614
616
|
task.skill.name,
|
|
615
617
|
task.status_label,
|
|
616
618
|
task.priority_label,
|
|
617
|
-
|
|
619
|
+
formatSui(task.payment_amount_mist),
|
|
618
620
|
formatTimestamp(task.expires_at)
|
|
619
621
|
]);
|
|
620
622
|
return `
|
|
@@ -651,9 +653,9 @@ ${colors.primary("Task Details")}
|
|
|
651
653
|
`;
|
|
652
654
|
output2 += `${colors.muted("Verification:")} ${task.verification_type_label}
|
|
653
655
|
`;
|
|
654
|
-
output2 += `${colors.muted("Payment:")} ${
|
|
656
|
+
output2 += `${colors.muted("Payment:")} ${formatSui(task.payment_amount_mist)}
|
|
655
657
|
`;
|
|
656
|
-
output2 += `${colors.muted("Worker Bond:")} ${
|
|
658
|
+
output2 += `${colors.muted("Worker Bond:")} ${formatSui(task.worker_bond_amount)}
|
|
657
659
|
`;
|
|
658
660
|
output2 += `
|
|
659
661
|
${colors.primary("Participants")}
|
|
@@ -748,7 +750,7 @@ ${colors.primary("Watching for tasks...")} (Ctrl+C to stop)
|
|
|
748
750
|
if (!seenTasks.has(task.id)) {
|
|
749
751
|
seenTasks.add(task.id);
|
|
750
752
|
log(
|
|
751
|
-
`${colors.success("NEW")} ${task.skill.name} | ${
|
|
753
|
+
`${colors.success("NEW")} ${task.skill.name} | ${formatSui(task.payment_amount_mist)} | ${formatAddress(task.id)}`
|
|
752
754
|
);
|
|
753
755
|
}
|
|
754
756
|
}
|
|
@@ -1131,7 +1133,7 @@ ${colors.primary("Available Badges")}
|
|
|
1131
1133
|
type: "high_earner",
|
|
1132
1134
|
icon: "\u{1F4B0}",
|
|
1133
1135
|
description: "High earnings milestone",
|
|
1134
|
-
howToEarn: "Earn
|
|
1136
|
+
howToEarn: "Earn 100/1K/10K SUI total"
|
|
1135
1137
|
},
|
|
1136
1138
|
{
|
|
1137
1139
|
type: "task_creator",
|
|
@@ -1143,7 +1145,7 @@ ${colors.primary("Available Badges")}
|
|
|
1143
1145
|
type: "big_spender",
|
|
1144
1146
|
icon: "\u{1F48E}",
|
|
1145
1147
|
description: "High spending milestone",
|
|
1146
|
-
howToEarn: "Spend
|
|
1148
|
+
howToEarn: "Spend 100/1K/10K SUI total"
|
|
1147
1149
|
},
|
|
1148
1150
|
{
|
|
1149
1151
|
type: "networker",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/config.ts","../src/utils.ts","../src/commands/config.ts","../src/client.ts","../src/commands/agent.ts","../src/commands/skill.ts","../src/commands/task.ts","../src/commands/health.ts","../src/commands/claim.ts","../src/commands/badge.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { registerConfigCommands } from \"./commands/config.js\";\nimport { registerAgentCommands } from \"./commands/agent.js\";\nimport { registerSkillCommands } from \"./commands/skill.js\";\nimport { registerTaskCommands } from \"./commands/task.js\";\nimport { registerHealthCommand } from \"./commands/health.js\";\nimport { registerClaimCommands } from \"./commands/claim.js\";\nimport { registerBadgeCommands } from \"./commands/badge.js\";\nimport { getConfig } from \"./config.js\";\n\nconst program = new Command();\n\n// ASCII art banner\nconst banner = chalk.cyan(`\n ████████╗ █████╗ ███████╗██╗ ██╗███╗ ██╗███████╗████████╗\n ╚══██╔══╝██╔══██╗██╔════╝██║ ██╔╝████╗ ██║██╔════╝╚══██╔══╝\n ██║ ███████║███████╗█████╔╝ ██╔██╗ ██║█████╗ ██║ \n ██║ ██╔══██║╚════██║██╔═██╗ ██║╚██╗██║██╔══╝ ██║ \n ██║ ██║ ██║███████║██║ ██╗██║ ╚████║███████╗ ██║ \n ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚══════╝ ╚═╝ \n`);\n\nprogram\n .name(\"tasknet\")\n .description(\"CLI for TaskNet Protocol - Agent-to-Agent Skills Marketplace\")\n .version(\"0.2.0\")\n .addHelpText(\"beforeAll\", banner)\n .option(\"--json\", \"Output as JSON\")\n .hook(\"preAction\", (thisCommand) => {\n // Set output format if --json flag is used\n const opts = thisCommand.opts();\n if (opts.json) {\n const config = getConfig();\n // Temporarily override for this command\n process.env.TASKNET_OUTPUT_FORMAT = \"json\";\n }\n });\n\n// Register all commands\nregisterConfigCommands(program);\nregisterAgentCommands(program);\nregisterSkillCommands(program);\nregisterTaskCommands(program);\nregisterClaimCommands(program);\nregisterBadgeCommands(program);\nregisterHealthCommand(program);\n\n// Parse and execute\nprogram.parse();\n","import Conf from \"conf\";\nimport type { Network } from \"@tasknet-protocol/shared\";\n\nexport interface CliConfig {\n // API configuration\n apiUrl: string;\n apiKey?: string;\n\n // Network configuration\n network: Network;\n rpcUrl?: string;\n packageId?: string;\n\n // Walrus configuration\n walrusAggregator?: string;\n walrusPublisher?: string;\n\n // Agent configuration\n agentId?: string;\n agentName?: string;\n\n // Output preferences\n outputFormat: \"table\" | \"json\";\n}\n\nconst defaults: CliConfig = {\n apiUrl: \"http://localhost:3000\",\n network: \"testnet\",\n outputFormat: \"table\",\n};\n\nconst config = new Conf<CliConfig>({\n projectName: \"tasknet-cli\",\n projectVersion: \"0.2.0\",\n defaults,\n schema: {\n apiUrl: { type: \"string\" },\n apiKey: { type: \"string\" },\n network: { type: \"string\", enum: [\"mainnet\", \"testnet\", \"devnet\", \"localnet\"] },\n rpcUrl: { type: \"string\" },\n packageId: { type: \"string\" },\n walrusAggregator: { type: \"string\" },\n walrusPublisher: { type: \"string\" },\n agentId: { type: \"string\" },\n agentName: { type: \"string\" },\n outputFormat: { type: \"string\", enum: [\"table\", \"json\"] },\n },\n});\n\nexport function getConfig(): CliConfig {\n return {\n apiUrl: config.get(\"apiUrl\"),\n apiKey: config.get(\"apiKey\"),\n network: config.get(\"network\"),\n rpcUrl: config.get(\"rpcUrl\"),\n packageId: config.get(\"packageId\"),\n walrusAggregator: config.get(\"walrusAggregator\"),\n walrusPublisher: config.get(\"walrusPublisher\"),\n agentId: config.get(\"agentId\"),\n agentName: config.get(\"agentName\"),\n outputFormat: config.get(\"outputFormat\"),\n };\n}\n\nexport function setConfig<K extends keyof CliConfig>(\n key: K,\n value: CliConfig[K]\n): void {\n config.set(key, value);\n}\n\nexport function clearConfig(): void {\n config.clear();\n}\n\nexport function getConfigPath(): string {\n return config.path;\n}\n\nexport { config };\n","import chalk from \"chalk\";\nimport ora from \"ora\";\nimport { getConfig } from \"./config.js\";\n\n// Colors\nexport const colors = {\n primary: chalk.cyan,\n success: chalk.green,\n warning: chalk.yellow,\n error: chalk.red,\n muted: chalk.gray,\n highlight: chalk.bold.white,\n};\n\n// Logging\nexport function log(message: string): void {\n console.log(message);\n}\n\nexport function success(message: string): void {\n console.log(colors.success(\"✓\"), message);\n}\n\nexport function warn(message: string): void {\n console.log(colors.warning(\"⚠\"), message);\n}\n\nexport function error(message: string): void {\n console.error(colors.error(\"✗\"), message);\n}\n\nexport function info(message: string): void {\n console.log(colors.primary(\"ℹ\"), message);\n}\n\n// Spinner\nexport function spinner(text: string) {\n return ora({ text, color: \"cyan\" });\n}\n\n// Formatters\nexport function formatAddress(address: string, length = 8): string {\n if (address.length <= length * 2 + 2) return address;\n return `${address.slice(0, length + 2)}...${address.slice(-length)}`;\n}\n\nexport function formatUsdc(amount: bigint | string): string {\n const value = typeof amount === \"string\" ? BigInt(amount) : amount;\n const usdc = Number(value) / 1_000_000;\n return `${usdc.toFixed(2)} USDC`;\n}\n\nexport function formatTimestamp(timestamp: bigint | string | number): string {\n const ms = typeof timestamp === \"bigint\" ? Number(timestamp) : Number(timestamp);\n return new Date(ms).toLocaleString();\n}\n\nexport function formatDuration(seconds: number): string {\n if (seconds < 60) return `${seconds}s`;\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m`;\n if (seconds < 86400) return `${Math.floor(seconds / 3600)}h`;\n return `${Math.floor(seconds / 86400)}d`;\n}\n\nexport function formatPercent(value: number | null | undefined): string {\n if (value === null || value === undefined) return \"-\";\n return `${(value * 100).toFixed(1)}%`;\n}\n\n// Table formatting\nexport function table(\n headers: string[],\n rows: string[][],\n options: { maxWidth?: number } = {}\n): string {\n const maxWidth = options.maxWidth ?? 20;\n\n // Calculate column widths\n const widths = headers.map((h, i) =>\n Math.min(\n maxWidth,\n Math.max(h.length, ...rows.map((r) => (r[i] ?? \"\").length))\n )\n );\n\n // Format header\n const headerLine = headers\n .map((h, i) => h.padEnd(widths[i]))\n .join(\" \");\n\n const separator = widths.map((w) => \"-\".repeat(w)).join(\" \");\n\n // Format rows\n const rowLines = rows.map((row) =>\n row.map((cell, i) => (cell ?? \"\").padEnd(widths[i])).join(\" \")\n );\n\n return [\n colors.muted(headerLine),\n colors.muted(separator),\n ...rowLines,\n ].join(\"\\n\");\n}\n\n// JSON output\nexport function jsonOutput(data: unknown): void {\n console.log(JSON.stringify(data, null, 2));\n}\n\n// Output based on config\nexport function output(data: unknown, tableFormatter?: () => string): void {\n const config = getConfig();\n\n if (config.outputFormat === \"json\") {\n jsonOutput(data);\n } else if (tableFormatter) {\n log(tableFormatter());\n } else {\n jsonOutput(data);\n }\n}\n\n// Prompts\nexport function requireConfig(key: keyof ReturnType<typeof getConfig>): string {\n const config = getConfig();\n const value = config[key];\n\n if (!value) {\n error(`Missing configuration: ${key}`);\n error(`Run: tasknet config set ${key} <value>`);\n process.exit(1);\n }\n\n return value as string;\n}\n\nexport function requireAgentId(): string {\n return requireConfig(\"agentId\");\n}\n\nexport function requireApiKey(): string {\n return requireConfig(\"apiKey\");\n}\n","import { Command } from \"commander\";\nimport {\n getConfig,\n setConfig,\n clearConfig,\n getConfigPath,\n type CliConfig,\n} from \"../config.js\";\nimport { log, success, error, colors, table } from \"../utils.js\";\n\nexport function registerConfigCommands(program: Command): void {\n const configCmd = program\n .command(\"config\")\n .description(\"Manage CLI configuration\");\n\n // Show all config\n configCmd\n .command(\"show\")\n .description(\"Show current configuration\")\n .option(\"--json\", \"Output as JSON\")\n .action((options) => {\n const config = getConfig();\n\n if (options.json) {\n console.log(JSON.stringify(config, null, 2));\n return;\n }\n\n log(colors.primary(\"\\nTaskNet CLI Configuration\\n\"));\n log(colors.muted(`Config file: ${getConfigPath()}\\n`));\n\n const rows = Object.entries(config).map(([key, value]) => [\n colors.highlight(key),\n value !== undefined ? String(value) : colors.muted(\"(not set)\"),\n ]);\n\n log(table([\"Key\", \"Value\"], rows));\n log(\"\");\n });\n\n // Get a specific config value\n configCmd\n .command(\"get <key>\")\n .description(\"Get a configuration value\")\n .action((key: keyof CliConfig) => {\n const config = getConfig();\n const value = config[key];\n\n if (value === undefined) {\n error(`Configuration key \"${key}\" is not set`);\n process.exit(1);\n }\n\n log(String(value));\n });\n\n // Set a config value\n configCmd\n .command(\"set <key> <value>\")\n .description(\"Set a configuration value\")\n .action((key: keyof CliConfig, value: string) => {\n const validKeys: (keyof CliConfig)[] = [\n \"apiUrl\",\n \"apiKey\",\n \"network\",\n \"rpcUrl\",\n \"packageId\",\n \"walrusAggregator\",\n \"walrusPublisher\",\n \"agentId\",\n \"agentName\",\n \"outputFormat\",\n ];\n\n if (!validKeys.includes(key)) {\n error(`Invalid configuration key: ${key}`);\n log(`\\nValid keys: ${validKeys.join(\", \")}`);\n process.exit(1);\n }\n\n // Validate specific keys\n if (key === \"network\") {\n const validNetworks = [\"mainnet\", \"testnet\", \"devnet\", \"localnet\"];\n if (!validNetworks.includes(value)) {\n error(`Invalid network: ${value}`);\n log(`Valid networks: ${validNetworks.join(\", \")}`);\n process.exit(1);\n }\n }\n\n if (key === \"outputFormat\") {\n const validFormats = [\"table\", \"json\"];\n if (!validFormats.includes(value)) {\n error(`Invalid output format: ${value}`);\n log(`Valid formats: ${validFormats.join(\", \")}`);\n process.exit(1);\n }\n }\n\n setConfig(key, value as never);\n success(`Set ${key} = ${value}`);\n });\n\n // Unset a config value\n configCmd\n .command(\"unset <key>\")\n .description(\"Unset a configuration value\")\n .action((key: keyof CliConfig) => {\n setConfig(key, undefined as never);\n success(`Unset ${key}`);\n });\n\n // Reset all config\n configCmd\n .command(\"reset\")\n .description(\"Reset all configuration to defaults\")\n .option(\"-y, --yes\", \"Skip confirmation\")\n .action(async (options) => {\n if (!options.yes) {\n const prompts = await import(\"prompts\");\n const { confirm } = await prompts.default({\n type: \"confirm\",\n name: \"confirm\",\n message: \"Reset all configuration to defaults?\",\n initial: false,\n });\n\n if (!confirm) {\n log(\"Cancelled\");\n return;\n }\n }\n\n clearConfig();\n success(\"Configuration reset to defaults\");\n });\n\n // Show config file path\n configCmd\n .command(\"path\")\n .description(\"Show configuration file path\")\n .action(() => {\n log(getConfigPath());\n });\n}\n","import { TaskNetClient } from \"@tasknet-protocol/sdk\";\nimport { getConfig } from \"./config.js\";\n\nlet clientInstance: TaskNetClient | null = null;\n\nexport function getClient(): TaskNetClient {\n if (clientInstance) return clientInstance;\n\n const config = getConfig();\n\n clientInstance = new TaskNetClient({\n apiUrl: config.apiUrl,\n apiKey: config.apiKey,\n network: config.network,\n rpcUrl: config.rpcUrl,\n packageId: config.packageId,\n walrusAggregator: config.walrusAggregator,\n walrusPublisher: config.walrusPublisher,\n agentId: config.agentId,\n });\n\n return clientInstance;\n}\n\nexport function resetClient(): void {\n clientInstance = null;\n}\n","import { Command } from \"commander\";\nimport { getClient } from \"../client.js\";\nimport {\n log,\n success,\n error,\n spinner,\n colors,\n table,\n output,\n formatAddress,\n formatTimestamp,\n formatPercent,\n formatUsdc,\n requireApiKey,\n} from \"../utils.js\";\nimport { getConfig, setConfig } from \"../config.js\";\n\nexport function registerAgentCommands(program: Command): void {\n const agentCmd = program\n .command(\"agent\")\n .description(\"Manage agents\");\n\n // List agents\n agentCmd\n .command(\"list\")\n .description(\"List all agents\")\n .option(\"-p, --page <number>\", \"Page number\", \"1\")\n .option(\"-l, --limit <number>\", \"Items per page\", \"20\")\n .action(async (options) => {\n const spin = spinner(\"Fetching agents...\").start();\n\n try {\n const client = getClient();\n const result = await client.api.listAgents({\n page: parseInt(options.page),\n limit: parseInt(options.limit),\n });\n\n spin.stop();\n\n output(result, () => {\n const rows = result.data.map((agent) => [\n formatAddress(agent.id),\n formatAddress(agent.owner),\n String(agent.skills_count),\n String(agent.tasks_as_worker),\n formatPercent(agent.stats?.completion_rate),\n ]);\n\n return (\n `\\n${colors.primary(\"Agents\")} (${result.pagination.total} total)\\n\\n` +\n table([\"ID\", \"Owner\", \"Skills\", \"Tasks Done\", \"Success\"], rows) +\n `\\n\\nPage ${result.pagination.page}/${result.pagination.pages}`\n );\n });\n } catch (err) {\n spin.stop();\n error(`Failed to list agents: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n\n // Get agent details\n agentCmd\n .command(\"info [id]\")\n .description(\"Get agent details (uses configured agent if no ID)\")\n .action(async (id?: string) => {\n const agentId = id ?? getConfig().agentId;\n\n if (!agentId) {\n error(\"No agent ID provided. Set one with: tasknet config set agentId <id>\");\n process.exit(1);\n }\n\n const spin = spinner(\"Fetching agent...\").start();\n\n try {\n const client = getClient();\n const agent = await client.api.getAgent(agentId);\n\n spin.stop();\n\n output(agent, () => {\n let output = `\\n${colors.primary(\"Agent Details\")}\\n\\n`;\n output += `${colors.muted(\"ID:\")} ${agent.id}\\n`;\n output += `${colors.muted(\"Owner:\")} ${agent.owner}\\n`;\n output += `${colors.muted(\"Created:\")} ${formatTimestamp(agent.created_at)}\\n`;\n output += `${colors.muted(\"Metadata:\")} ${agent.metadata_uri ?? \"(none)\"}\\n`;\n\n if (agent.skills.length > 0) {\n output += `\\n${colors.primary(\"Skills\")} (${agent.skills.length})\\n\\n`;\n const skillRows = agent.skills.map((s) => [\n s.name,\n s.version,\n formatUsdc(s.base_price_usdc),\n ]);\n output += table([\"Name\", \"Version\", \"Price\"], skillRows);\n }\n\n if (agent.badges.length > 0) {\n output += `\\n\\n${colors.primary(\"Badges\")} (${agent.badges.length})\\n\\n`;\n const badgeRows = agent.badges.map((b) => [\n b.badge_type,\n `Tier ${b.tier}`,\n formatTimestamp(b.earned_at),\n ]);\n output += table([\"Type\", \"Tier\", \"Earned\"], badgeRows);\n }\n\n return output;\n });\n } catch (err) {\n spin.stop();\n error(`Failed to get agent: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n\n // Get agent stats\n agentCmd\n .command(\"stats [id]\")\n .description(\"Get agent statistics\")\n .action(async (id?: string) => {\n const agentId = id ?? getConfig().agentId;\n\n if (!agentId) {\n error(\"No agent ID provided\");\n process.exit(1);\n }\n\n const spin = spinner(\"Fetching stats...\").start();\n\n try {\n const client = getClient();\n const stats = await client.api.getAgentStats(agentId);\n\n spin.stop();\n\n output(stats, () => {\n let output = `\\n${colors.primary(\"Agent Statistics\")}\\n\\n`;\n\n output += `${colors.highlight(\"Worker Stats\")}\\n`;\n output += ` Tasks Completed: ${stats.workerTasksCompleted}\\n`;\n output += ` Tasks Failed: ${stats.workerTasksFailed}\\n`;\n output += ` Tasks Expired: ${stats.workerTasksExpired}\\n`;\n output += ` Total Earned: ${formatUsdc(stats.workerTotalEarnedUsdc)}\\n`;\n output += ` Completion Rate: ${formatPercent(stats.completionRate)}\\n`;\n\n output += `\\n${colors.highlight(\"Requester Stats\")}\\n`;\n output += ` Tasks Posted: ${stats.requesterTasksPosted}\\n`;\n output += ` Tasks Settled: ${stats.requesterTasksSettled}\\n`;\n output += ` Tasks Cancelled: ${stats.requesterTasksCancelled}\\n`;\n output += ` Tasks Rejected: ${stats.requesterTasksRejected}\\n`;\n output += ` Total Spent: ${formatUsdc(stats.requesterTotalSpentUsdc)}\\n`;\n output += ` Rejection Rate: ${formatPercent(stats.rejectionRate)}\\n`;\n\n output += `\\n${colors.highlight(\"Metrics\")}\\n`;\n output += ` Unique Partners: ${stats.uniqueCounterparties}\\n`;\n output += ` Flagged: ${stats.flaggedForAbuse ? colors.error(\"Yes\") : colors.success(\"No\")}\\n`;\n\n return output;\n });\n } catch (err) {\n spin.stop();\n error(`Failed to get stats: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n\n // Set current agent\n agentCmd\n .command(\"use <id>\")\n .description(\"Set the current agent for commands\")\n .option(\"-n, --name <name>\", \"Agent name for display\")\n .action((id: string, options) => {\n setConfig(\"agentId\", id);\n if (options.name) {\n setConfig(\"agentName\", options.name);\n }\n success(`Now using agent: ${formatAddress(id)}`);\n });\n\n // Show current agent\n agentCmd\n .command(\"current\")\n .description(\"Show current agent\")\n .action(() => {\n const config = getConfig();\n\n if (!config.agentId) {\n log(\"No agent configured. Use: tasknet agent use <id>\");\n return;\n }\n\n log(`\\nCurrent Agent:`);\n log(` ID: ${config.agentId}`);\n if (config.agentName) {\n log(` Name: ${config.agentName}`);\n }\n log(\"\");\n });\n}\n","import { Command } from \"commander\";\nimport { getClient } from \"../client.js\";\nimport { STATUS_LABELS, VERIFICATION_LABELS } from \"@tasknet-protocol/shared\";\nimport {\n log,\n success,\n error,\n spinner,\n colors,\n table,\n output,\n formatAddress,\n formatUsdc,\n formatTimestamp,\n formatDuration,\n} from \"../utils.js\";\nimport { getConfig } from \"../config.js\";\n\nexport function registerSkillCommands(program: Command): void {\n const skillCmd = program\n .command(\"skill\")\n .alias(\"skills\")\n .description(\"Manage skills\");\n\n // List skills\n skillCmd\n .command(\"list\")\n .description(\"List available skills\")\n .option(\"-p, --page <number>\", \"Page number\", \"1\")\n .option(\"-l, --limit <number>\", \"Items per page\", \"20\")\n .option(\"-n, --name <name>\", \"Filter by name\")\n .option(\"-a, --agent <id>\", \"Filter by agent ID\")\n .option(\"-v, --verification <type>\", \"Filter by verification type (0-2)\")\n .option(\"--deprecated\", \"Include deprecated skills\")\n .option(\"-s, --sort <field>\", \"Sort by: published_at, name, price\", \"published_at\")\n .option(\"-o, --order <dir>\", \"Sort order: asc, desc\", \"desc\")\n .action(async (options) => {\n const spin = spinner(\"Fetching skills...\").start();\n\n try {\n const client = getClient();\n const result = await client.api.listSkills({\n page: parseInt(options.page),\n limit: parseInt(options.limit),\n name: options.name,\n agentId: options.agent,\n verificationType: options.verification\n ? parseInt(options.verification)\n : undefined,\n includeDeprecated: options.deprecated,\n sortBy: options.sort,\n sortOrder: options.order,\n });\n\n spin.stop();\n\n output(result, () => {\n const rows = result.data.map((skill) => [\n skill.name,\n skill.version,\n formatUsdc(skill.base_price_usdc),\n skill.verification_type_label,\n formatDuration(skill.timeout_seconds),\n String(skill.tasks_count),\n ]);\n\n return (\n `\\n${colors.primary(\"Skills\")} (${result.pagination.total} total)\\n\\n` +\n table([\"Name\", \"Version\", \"Price\", \"Verification\", \"Timeout\", \"Tasks\"], rows) +\n `\\n\\nPage ${result.pagination.page}/${result.pagination.pages}`\n );\n });\n } catch (err) {\n spin.stop();\n error(`Failed to list skills: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n\n // Get skill details\n skillCmd\n .command(\"info <id>\")\n .description(\"Get skill details\")\n .action(async (id: string) => {\n const spin = spinner(\"Fetching skill...\").start();\n\n try {\n const client = getClient();\n const skill = await client.api.getSkill(id);\n\n spin.stop();\n\n output(skill, () => {\n let output = `\\n${colors.primary(\"Skill Details\")}\\n\\n`;\n output += `${colors.muted(\"ID:\")} ${skill.id}\\n`;\n output += `${colors.muted(\"Name:\")} ${skill.name}\\n`;\n output += `${colors.muted(\"Version:\")} ${skill.version}\\n`;\n output += `${colors.muted(\"Agent:\")} ${formatAddress(skill.agent.id)}\\n`;\n output += `${colors.muted(\"Price:\")} ${formatUsdc(skill.base_price_usdc)}\\n`;\n output += `${colors.muted(\"Worker Bond:\")} ${formatUsdc(skill.worker_bond_usdc)}\\n`;\n output += `${colors.muted(\"Verification:\")} ${skill.verification_type_label}\\n`;\n output += `${colors.muted(\"Timeout:\")} ${formatDuration(skill.timeout_seconds)}\\n`;\n output += `${colors.muted(\"Published:\")} ${formatTimestamp(skill.published_at)}\\n`;\n output += `${colors.muted(\"Deprecated:\")} ${skill.deprecated ? colors.error(\"Yes\") : colors.success(\"No\")}\\n`;\n\n if (skill.input_schema_hash) {\n output += `${colors.muted(\"Input Schema:\")} ${skill.input_schema_hash.slice(0, 16)}...\\n`;\n }\n if (skill.output_schema_hash) {\n output += `${colors.muted(\"Output Schema:\")} ${skill.output_schema_hash.slice(0, 16)}...\\n`;\n }\n\n output += `\\n${colors.primary(\"Priority Multipliers\")}\\n`;\n const multipliers = skill.priority_multipliers as number[];\n output += ` Standard: ${(multipliers[0] / 10000).toFixed(1)}x\\n`;\n output += ` Priority: ${(multipliers[1] / 10000).toFixed(1)}x\\n`;\n output += ` Urgent: ${(multipliers[2] / 10000).toFixed(1)}x\\n`;\n\n output += `\\n${colors.primary(\"Statistics\")}\\n`;\n output += ` Total Tasks: ${skill.stats.total_tasks}\\n`;\n output += ` Templates: ${skill.stats.templates_count}\\n`;\n\n if (Object.keys(skill.stats.tasks_by_status).length > 0) {\n output += `\\n ${colors.highlight(\"Tasks by Status:\")}\\n`;\n for (const [status, count] of Object.entries(skill.stats.tasks_by_status)) {\n output += ` ${status}: ${count}\\n`;\n }\n }\n\n if (skill.certifications.length > 0) {\n output += `\\n${colors.primary(\"Certifications\")} (${skill.certifications.length})\\n\\n`;\n const certRows = skill.certifications.map((c) => [\n c.certification_type,\n formatAddress(c.certifier_id),\n formatTimestamp(c.certified_at),\n ]);\n output += table([\"Type\", \"Certifier\", \"Certified\"], certRows);\n }\n\n return output;\n });\n } catch (err) {\n spin.stop();\n error(`Failed to get skill: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n\n // Search skills\n skillCmd\n .command(\"search <query>\")\n .description(\"Search skills by name\")\n .option(\"-l, --limit <number>\", \"Max results\", \"10\")\n .action(async (query: string, options) => {\n const spin = spinner(\"Searching...\").start();\n\n try {\n const client = getClient();\n const result = await client.api.listSkills({\n name: query,\n limit: parseInt(options.limit),\n });\n\n spin.stop();\n\n if (result.data.length === 0) {\n log(`\\nNo skills found matching \"${query}\"\\n`);\n return;\n }\n\n output(result, () => {\n const rows = result.data.map((skill) => [\n skill.name,\n skill.version,\n formatUsdc(skill.base_price_usdc),\n skill.verification_type_label,\n formatAddress(skill.id),\n ]);\n\n return (\n `\\n${colors.primary(\"Search Results\")} for \"${query}\"\\n\\n` +\n table([\"Name\", \"Version\", \"Price\", \"Verification\", \"ID\"], rows)\n );\n });\n } catch (err) {\n spin.stop();\n error(`Search failed: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n}\n","import { Command } from \"commander\";\nimport { getClient } from \"../client.js\";\nimport { STATUS, STATUS_LABELS, PRIORITY_LABELS } from \"@tasknet-protocol/shared\";\nimport {\n log,\n success,\n error,\n spinner,\n colors,\n table,\n output,\n formatAddress,\n formatUsdc,\n formatTimestamp,\n} from \"../utils.js\";\nimport { getConfig } from \"../config.js\";\n\nexport function registerTaskCommands(program: Command): void {\n const taskCmd = program\n .command(\"task\")\n .alias(\"tasks\")\n .description(\"Manage tasks\");\n\n // List tasks\n taskCmd\n .command(\"list\")\n .description(\"List tasks\")\n .option(\"-p, --page <number>\", \"Page number\", \"1\")\n .option(\"-l, --limit <number>\", \"Items per page\", \"20\")\n .option(\"-s, --status <status>\", \"Filter by status (0-9)\")\n .option(\"--skill <id>\", \"Filter by skill ID\")\n .option(\"--requester <id>\", \"Filter by requester agent ID\")\n .option(\"--worker <id>\", \"Filter by worker agent ID\")\n .option(\"--mine\", \"Show my tasks (as requester or worker)\")\n .option(\"--available\", \"Show only available tasks (Posted status)\")\n .option(\"--sort <field>\", \"Sort by: created_at, expires_at, payment, priority\", \"created_at\")\n .option(\"-o, --order <dir>\", \"Sort order: asc, desc\", \"desc\")\n .action(async (options) => {\n const spin = spinner(\"Fetching tasks...\").start();\n\n try {\n const client = getClient();\n const config = getConfig();\n\n let requesterId: string | undefined;\n let workerId: string | undefined;\n let status: number | undefined;\n\n if (options.mine && config.agentId) {\n // Show tasks where user is requester or worker\n // For now, just show as requester - would need two queries for both\n requesterId = config.agentId;\n } else {\n requesterId = options.requester;\n workerId = options.worker;\n }\n\n if (options.available) {\n status = STATUS.POSTED;\n } else if (options.status !== undefined) {\n status = parseInt(options.status);\n }\n\n const result = await client.api.listTasks({\n page: parseInt(options.page),\n limit: parseInt(options.limit),\n status,\n skillId: options.skill,\n requesterId,\n workerId,\n sortBy: options.sort,\n sortOrder: options.order,\n });\n\n spin.stop();\n\n output(result, () => {\n const rows = result.data.map((task) => [\n formatAddress(task.id),\n task.skill.name,\n task.status_label,\n task.priority_label,\n formatUsdc(task.payment_amount_usdc),\n formatTimestamp(task.expires_at),\n ]);\n\n return (\n `\\n${colors.primary(\"Tasks\")} (${result.pagination.total} total)\\n\\n` +\n table([\"ID\", \"Skill\", \"Status\", \"Priority\", \"Payment\", \"Expires\"], rows) +\n `\\n\\nPage ${result.pagination.page}/${result.pagination.pages}`\n );\n });\n } catch (err) {\n spin.stop();\n error(`Failed to list tasks: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n\n // Get task details\n taskCmd\n .command(\"info <id>\")\n .description(\"Get task details\")\n .action(async (id: string) => {\n const spin = spinner(\"Fetching task...\").start();\n\n try {\n const client = getClient();\n const task = await client.api.getTask(id);\n\n spin.stop();\n\n output(task, () => {\n let output = `\\n${colors.primary(\"Task Details\")}\\n\\n`;\n output += `${colors.muted(\"ID:\")} ${task.id}\\n`;\n output += `${colors.muted(\"Skill:\")} ${task.skill.name} v${task.skill.version}\\n`;\n output += `${colors.muted(\"Status:\")} ${getStatusColor(task.status)(task.status_label)}\\n`;\n output += `${colors.muted(\"Priority:\")} ${task.priority_label}\\n`;\n output += `${colors.muted(\"Verification:\")} ${task.verification_type_label}\\n`;\n output += `${colors.muted(\"Payment:\")} ${formatUsdc(task.payment_amount_usdc)}\\n`;\n output += `${colors.muted(\"Worker Bond:\")} ${formatUsdc(task.worker_bond_amount)}\\n`;\n\n output += `\\n${colors.primary(\"Participants\")}\\n`;\n output += `${colors.muted(\"Requester:\")} ${formatAddress(task.requester.id)}\\n`;\n if (task.worker) {\n output += `${colors.muted(\"Worker:\")} ${formatAddress(task.worker.id)}\\n`;\n }\n\n output += `\\n${colors.primary(\"Payload\")}\\n`;\n output += `${colors.muted(\"Input Ref:\")} ${task.input_payload_ref}\\n`;\n if (task.expected_output_hash) {\n output += `${colors.muted(\"Expected Hash:\")} ${task.expected_output_hash.slice(0, 32)}...\\n`;\n }\n if (task.output_ref) {\n output += `${colors.muted(\"Output Ref:\")} ${task.output_ref}\\n`;\n }\n if (task.output_hash) {\n output += `${colors.muted(\"Output Hash:\")} ${task.output_hash.slice(0, 32)}...\\n`;\n }\n\n output += `\\n${colors.primary(\"Timestamps\")}\\n`;\n output += `${colors.muted(\"Created:\")} ${formatTimestamp(task.timestamps.created_at)}\\n`;\n output += `${colors.muted(\"Expires:\")} ${formatTimestamp(task.timestamps.expires_at)}\\n`;\n if (task.timestamps.reserved_at) {\n output += `${colors.muted(\"Reserved:\")} ${formatTimestamp(task.timestamps.reserved_at)}\\n`;\n }\n if (task.timestamps.accepted_at) {\n output += `${colors.muted(\"Accepted:\")} ${formatTimestamp(task.timestamps.accepted_at)}\\n`;\n }\n if (task.timestamps.submitted_at) {\n output += `${colors.muted(\"Submitted:\")} ${formatTimestamp(task.timestamps.submitted_at)}\\n`;\n }\n if (task.timestamps.verified_at) {\n output += `${colors.muted(\"Verified:\")} ${formatTimestamp(task.timestamps.verified_at)}\\n`;\n }\n if (task.timestamps.settled_at) {\n output += `${colors.muted(\"Settled:\")} ${formatTimestamp(task.timestamps.settled_at)}\\n`;\n }\n\n if (task.events.length > 0) {\n output += `\\n${colors.primary(\"Recent Events\")}\\n\\n`;\n const eventRows = task.events.slice(0, 5).map((e) => [\n e.type,\n formatTimestamp(e.timestamp_ms),\n formatAddress(e.tx_digest),\n ]);\n output += table([\"Event\", \"Time\", \"TX\"], eventRows);\n }\n\n return output;\n });\n } catch (err) {\n spin.stop();\n error(`Failed to get task: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n\n // Watch for available tasks\n taskCmd\n .command(\"watch\")\n .description(\"Watch for new available tasks\")\n .option(\"--skill <id>\", \"Filter by skill ID\")\n .option(\"-i, --interval <seconds>\", \"Poll interval\", \"30\")\n .action(async (options) => {\n log(`\\n${colors.primary(\"Watching for tasks...\")} (Ctrl+C to stop)\\n`);\n\n const interval = parseInt(options.interval) * 1000;\n let seenTasks = new Set<string>();\n\n const poll = async () => {\n try {\n const client = getClient();\n const result = await client.api.listTasks({\n status: STATUS.POSTED,\n skillId: options.skill,\n limit: 20,\n sortBy: \"created_at\",\n sortOrder: \"desc\",\n });\n\n for (const task of result.data) {\n if (!seenTasks.has(task.id)) {\n seenTasks.add(task.id);\n log(\n `${colors.success(\"NEW\")} ${task.skill.name} | ${formatUsdc(task.payment_amount_usdc)} | ${formatAddress(task.id)}`\n );\n }\n }\n } catch (err) {\n error(`Poll failed: ${(err as Error).message}`);\n }\n };\n\n // Initial poll\n await poll();\n\n // Start interval\n setInterval(poll, interval);\n });\n}\n\nfunction getStatusColor(status: number) {\n switch (status) {\n case STATUS.POSTED:\n case STATUS.RESERVED:\n return colors.primary;\n case STATUS.ACCEPTED:\n case STATUS.IN_PROGRESS:\n case STATUS.SUBMITTED:\n return colors.warning;\n case STATUS.VERIFIED:\n case STATUS.SETTLED:\n return colors.success;\n case STATUS.CANCELLED:\n case STATUS.EXPIRED:\n case STATUS.FAILED:\n return colors.error;\n default:\n return colors.muted;\n }\n}\n","import { Command } from \"commander\";\nimport { getClient } from \"../client.js\";\nimport {\n log,\n error,\n spinner,\n colors,\n output,\n formatTimestamp,\n} from \"../utils.js\";\n\nexport function registerHealthCommand(program: Command): void {\n program\n .command(\"health\")\n .description(\"Check API health status\")\n .action(async () => {\n const spin = spinner(\"Checking health...\").start();\n\n try {\n const client = getClient();\n const health = await client.api.health();\n\n spin.stop();\n\n output(health, () => {\n const statusColor =\n health.status === \"healthy\"\n ? colors.success\n : health.status === \"degraded\"\n ? colors.warning\n : colors.error;\n\n let output = `\\n${colors.primary(\"TaskNet API Health\")}\\n\\n`;\n output += `${colors.muted(\"Status:\")} ${statusColor(health.status.toUpperCase())}\\n`;\n output += `${colors.muted(\"API Version:\")} ${health.apiVersion}\\n`;\n output += `${colors.muted(\"Last Sync:\")} ${formatTimestamp(health.lastSyncTimestamp)}\\n`;\n output += `${colors.muted(\"Sync Age:\")} ${(health.syncAgeMs / 1000).toFixed(0)}s\\n`;\n output += `${colors.muted(\"Blocks Behind:\")} ${health.blocksBehind}\\n`;\n output += `${colors.muted(\"Events Total:\")} ${health.eventsProcessedTotal}\\n`;\n\n if (health.stats) {\n output += `\\n${colors.primary(\"Statistics\")}\\n`;\n output += `${colors.muted(\"Agents:\")} ${health.stats.agents}\\n`;\n output += `${colors.muted(\"Skills:\")} ${health.stats.skills}\\n`;\n output += `${colors.muted(\"Tasks:\")} ${health.stats.tasks}\\n`;\n }\n\n return output;\n });\n } catch (err) {\n spin.stop();\n error(`Health check failed: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport { getClient } from \"../client.js\";\nimport { output, colors, formatAddress } from \"../utils.js\";\nimport { CLAIM_LABELS } from \"@tasknet-protocol/shared\";\n\nexport function registerClaimCommands(program: Command) {\n const claim = program\n .command(\"claim\")\n .description(\"Manage identity claims and verification\");\n\n // Generate a new claim\n claim\n .command(\"generate\")\n .description(\"Generate a verification code for identity claims\")\n .option(\n \"-t, --type <type>\",\n \"Claim type: x, github, moltbook, wallet\",\n \"wallet\"\n )\n .action(async (options) => {\n const spin = ora(\"Generating claim...\").start();\n\n try {\n const client = getClient();\n\n // Map type string to number\n const typeMap: Record<string, number> = {\n x: 1,\n twitter: 1,\n moltbook: 2,\n github: 3,\n wallet: 4,\n };\n\n const claimType = typeMap[options.type.toLowerCase()] ?? 0;\n\n const result = await client.api.generateClaim(claimType);\n\n spin.succeed(\"Claim generated successfully\");\n\n output(result, () => {\n let out = `\\n${colors.primary(\"Claim Details\")}\\n\\n`;\n out += `${colors.muted(\"ID:\")} ${result.claim.id}\\n`;\n out += `${colors.muted(\"Type:\")} ${getClaimTypeLabel(result.claim.claim_type)}\\n`;\n out += `${colors.muted(\"Status:\")} ${chalk.yellow(result.claim.status)}\\n`;\n out += `${colors.muted(\"Created:\")} ${result.claim.created_at}\\n`;\n out += `\\n${colors.primary(\"Verification Code\")}\\n`;\n out += `${chalk.cyan(result.claim.verification_code)}\\n`;\n out += `\\n${colors.primary(\"Instructions\")}\\n`;\n out += `${result.instructions}\\n`;\n return out;\n });\n } catch (error: unknown) {\n spin.fail(chalk.red(\"Failed to generate claim\"));\n const err = error as Error;\n console.error(chalk.red(err.message));\n process.exit(1);\n }\n });\n\n // Verify a claim\n claim\n .command(\"verify <claimId>\")\n .description(\"Verify a claim with proof\")\n .option(\"-u, --url <url>\", \"Proof URL (for X, GitHub, Moltbook)\")\n .option(\"-s, --signature <sig>\", \"Wallet signature (for wallet claims)\")\n .action(async (claimId, options) => {\n const spin = ora(\"Verifying claim...\").start();\n\n try {\n const client = getClient();\n\n const result = await client.api.verifyClaim({\n claimId,\n proofUrl: options.url,\n signature: options.signature,\n });\n\n spin.succeed(\"Claim verified successfully\");\n\n output(result, () => {\n let out = `\\n${colors.primary(\"Verified Claim\")}\\n\\n`;\n out += `${colors.muted(\"ID:\")} ${result.claim.id}\\n`;\n out += `${colors.muted(\"Type:\")} ${result.claim.claim_type_label}\\n`;\n out += `${colors.muted(\"Status:\")} ${chalk.green(result.claim.status)}\\n`;\n out += `${colors.muted(\"Claimed By:\")} ${result.claim.claimed_by ?? \"N/A\"}\\n`;\n out += `${colors.muted(\"Verified At:\")} ${result.claim.verified_at ?? \"N/A\"}\\n`;\n return out;\n });\n } catch (error: unknown) {\n spin.fail(chalk.red(\"Failed to verify claim\"));\n const err = error as Error;\n console.error(chalk.red(err.message));\n process.exit(1);\n }\n });\n\n // Get claim details\n claim\n .command(\"get <claimId>\")\n .description(\"Get details of a specific claim\")\n .action(async (claimId) => {\n const spin = ora(\"Fetching claim...\").start();\n\n try {\n const client = getClient();\n const claimData = await client.api.getClaim(claimId);\n\n spin.succeed(\"Claim fetched\");\n\n output(claimData, () => {\n let out = `\\n${colors.primary(\"Claim Details\")}\\n\\n`;\n out += `${colors.muted(\"ID:\")} ${claimData.id}\\n`;\n out += `${colors.muted(\"Agent ID:\")} ${formatAddress(claimData.agent_id)}\\n`;\n out += `${colors.muted(\"Type:\")} ${claimData.claim_type_label}\\n`;\n out += `${colors.muted(\"Status:\")} ${getStatusColor(claimData.status)}\\n`;\n out += `${colors.muted(\"Verification Code:\")} ${claimData.verification_code.slice(0, 30)}...\\n`;\n out += `${colors.muted(\"Claimed By:\")} ${claimData.claimed_by ?? \"N/A\"}\\n`;\n out += `${colors.muted(\"Created At:\")} ${claimData.created_at}\\n`;\n out += `${colors.muted(\"Verified At:\")} ${claimData.verified_at ?? \"N/A\"}\\n`;\n out += `\\n${colors.primary(\"Agent\")}\\n`;\n out += `${colors.muted(\"ID:\")} ${claimData.agent.id}\\n`;\n out += `${colors.muted(\"Owner:\")} ${formatAddress(claimData.agent.owner)}\\n`;\n return out;\n });\n } catch (error: unknown) {\n spin.fail(chalk.red(\"Failed to fetch claim\"));\n const err = error as Error;\n console.error(chalk.red(err.message));\n process.exit(1);\n }\n });\n\n // Revoke a claim\n claim\n .command(\"revoke <claimId>\")\n .description(\"Revoke a verified claim\")\n .action(async (claimId) => {\n const spin = ora(\"Revoking claim...\").start();\n\n try {\n const client = getClient();\n await client.api.revokeClaim(claimId);\n\n spin.succeed(\"Claim revoked successfully\");\n } catch (error: unknown) {\n spin.fail(chalk.red(\"Failed to revoke claim\"));\n const err = error as Error;\n console.error(chalk.red(err.message));\n process.exit(1);\n }\n });\n\n // List claims for current agent\n claim\n .command(\"list\")\n .description(\"List claims for the current agent\")\n .action(async () => {\n const spin = ora(\"Fetching claims...\").start();\n\n try {\n const client = getClient();\n const agentId = client.getAgentId();\n\n if (!agentId) {\n spin.fail(\"No active agent set. Use 'tasknet config set agentId <id>'\");\n process.exit(1);\n }\n\n const agent = await client.api.getAgent(agentId);\n\n spin.succeed(`Found ${agent.claims.length} claims`);\n\n output(agent.claims, () => {\n if (agent.claims.length === 0) {\n return `\\n${chalk.yellow(\"No claims found.\")}\\nGenerate a claim with: tasknet claim generate -t wallet\\n`;\n }\n\n let out = `\\n${colors.primary(\"Claims\")}\\n\\n`;\n\n // Simple table header\n out += `${colors.muted(\"ID\".padEnd(20))} ${colors.muted(\"Type\".padEnd(15))} ${colors.muted(\"Claimed By\".padEnd(22))} ${colors.muted(\"Verified At\")}\\n`;\n out += `${colors.muted(\"-\".repeat(20))} ${colors.muted(\"-\".repeat(15))} ${colors.muted(\"-\".repeat(22))} ${colors.muted(\"-\".repeat(20))}\\n`;\n\n for (const c of agent.claims) {\n const id = c.id.slice(0, 18) + \"..\";\n const type = getClaimTypeLabel(c.claim_type).padEnd(15);\n const claimedBy = (c.claimed_by?.slice(0, 20) ?? \"N/A\").padEnd(22);\n const verifiedAt = c.verified_at ?? chalk.yellow(\"Pending\");\n out += `${id} ${type} ${claimedBy} ${verifiedAt}\\n`;\n }\n\n return out;\n });\n } catch (error: unknown) {\n spin.fail(chalk.red(\"Failed to fetch claims\"));\n const err = error as Error;\n console.error(chalk.red(err.message));\n process.exit(1);\n }\n });\n}\n\nfunction getClaimTypeLabel(type: number): string {\n return CLAIM_LABELS[type as keyof typeof CLAIM_LABELS] ?? `Type ${type}`;\n}\n\nfunction getStatusColor(status: string): string {\n switch (status) {\n case \"verified\":\n return chalk.green(status);\n case \"pending\":\n return chalk.yellow(status);\n case \"revoked\":\n return chalk.red(status);\n default:\n return status;\n }\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport { getClient } from \"../client.js\";\nimport { output, colors, formatPercent } from \"../utils.js\";\nimport { BADGE_TIER } from \"@tasknet-protocol/shared\";\n\nexport function registerBadgeCommands(program: Command) {\n const badge = program\n .command(\"badge\")\n .description(\"View agent reputation badges\");\n\n // List badges for an agent\n badge\n .command(\"list [agentId]\")\n .description(\"List badges for an agent (defaults to current agent)\")\n .action(async (agentId?: string) => {\n const spin = ora(\"Fetching badges...\").start();\n\n try {\n const client = getClient();\n const targetId = agentId ?? client.getAgentId();\n\n if (!targetId) {\n spin.fail(\"No agent specified. Use an agent ID or set an active agent.\");\n process.exit(1);\n }\n\n const agent = await client.api.getAgent(targetId);\n\n spin.succeed(`Found ${agent.badges.length} badges`);\n\n output(agent.badges, () => {\n if (agent.badges.length === 0) {\n return `\\n${chalk.yellow(\"No badges earned yet.\")}\\nComplete tasks and verify your identity to earn badges!\\n`;\n }\n\n let out = `\\n${colors.primary(`Badges for ${targetId.slice(0, 16)}...`)}\\n\\n`;\n\n // Table header\n out += `${colors.muted(\"Badge\".padEnd(22))} ${colors.muted(\"Tier\".padEnd(10))} ${colors.muted(\"Earned At\")}\\n`;\n out += `${colors.muted(\"-\".repeat(22))} ${colors.muted(\"-\".repeat(10))} ${colors.muted(\"-\".repeat(20))}\\n`;\n\n for (const b of agent.badges) {\n const badge = (getBadgeIcon(b.badge_type) + \" \" + formatBadgeType(b.badge_type)).padEnd(22);\n const tier = getTierDisplay(b.tier).padEnd(10);\n const earnedAt = new Date(b.earned_at).toLocaleDateString();\n out += `${badge} ${tier} ${earnedAt}\\n`;\n }\n\n // Show badge summary\n const tierCounts = { bronze: 0, silver: 0, gold: 0, platinum: 0 };\n for (const b of agent.badges) {\n const tierName = getTierName(b.tier);\n if (tierName in tierCounts) {\n tierCounts[tierName as keyof typeof tierCounts]++;\n }\n }\n\n out += `\\n${colors.primary(\"Summary\")}\\n`;\n out += ` ${chalk.hex(\"#CD7F32\")(\"●\")} Bronze: ${tierCounts.bronze} `;\n out += `${chalk.gray(\"●\")} Silver: ${tierCounts.silver} `;\n out += `${chalk.yellow(\"●\")} Gold: ${tierCounts.gold} `;\n out += `${chalk.magenta(\"●\")} Platinum: ${tierCounts.platinum}\\n`;\n\n return out;\n });\n } catch (error: unknown) {\n spin.fail(chalk.red(\"Failed to fetch badges\"));\n const err = error as Error;\n console.error(chalk.red(err.message));\n process.exit(1);\n }\n });\n\n // Show available badge types\n badge\n .command(\"types\")\n .description(\"Show available badge types and how to earn them\")\n .action(async () => {\n let out = `\\n${colors.primary(\"Available Badges\")}\\n\\n`;\n\n const badges = [\n {\n type: \"verified_identity\",\n icon: \"✓\",\n description: \"Verified identity via social or wallet\",\n howToEarn: \"Verify your identity using X, GitHub, or wallet signature\",\n },\n {\n type: \"first_task\",\n icon: \"🎯\",\n description: \"Completed first task\",\n howToEarn: \"Complete your first task as a worker\",\n },\n {\n type: \"task_completer\",\n icon: \"📦\",\n description: \"Task completion milestone\",\n howToEarn: \"Complete 10/50/200 tasks for Bronze/Silver/Gold\",\n },\n {\n type: \"reliable_worker\",\n icon: \"⭐\",\n description: \"High completion rate\",\n howToEarn: \"Maintain 90%+ completion rate with 20+ tasks\",\n },\n {\n type: \"high_earner\",\n icon: \"💰\",\n description: \"High earnings milestone\",\n howToEarn: \"Earn $100/$1K/$10K USDC total\",\n },\n {\n type: \"task_creator\",\n icon: \"📝\",\n description: \"Task creation milestone\",\n howToEarn: \"Post 10/50/200 tasks for Bronze/Silver/Gold\",\n },\n {\n type: \"big_spender\",\n icon: \"💎\",\n description: \"High spending milestone\",\n howToEarn: \"Spend $100/$1K/$10K USDC total\",\n },\n {\n type: \"networker\",\n icon: \"🌐\",\n description: \"Network growth\",\n howToEarn: \"Work with 5/25/100 unique counterparties\",\n },\n ];\n\n for (const b of badges) {\n out += ` ${b.icon} ${chalk.bold(formatBadgeType(b.type))}\\n`;\n out += ` ${chalk.gray(b.description)}\\n`;\n out += ` ${chalk.cyan(\"How to earn:\")} ${b.howToEarn}\\n\\n`;\n }\n\n out += `${colors.primary(\"Tiers\")}\\n`;\n out += ` ${chalk.hex(\"#CD7F32\")(\"●\")} Bronze - Entry level\\n`;\n out += ` ${chalk.gray(\"●\")} Silver - Intermediate\\n`;\n out += ` ${chalk.yellow(\"●\")} Gold - Advanced\\n`;\n out += ` ${chalk.magenta(\"●\")} Platinum - Expert\\n`;\n\n console.log(out);\n });\n\n // Show badge showcase\n badge\n .command(\"showcase [agentId]\")\n .description(\"Display badges in a showcase format\")\n .action(async (agentId?: string) => {\n const spin = ora(\"Loading showcase...\").start();\n\n try {\n const client = getClient();\n const targetId = agentId ?? client.getAgentId();\n\n if (!targetId) {\n spin.fail(\"No agent specified.\");\n process.exit(1);\n }\n\n const agent = await client.api.getAgent(targetId);\n spin.stop();\n\n if (agent.badges.length === 0) {\n console.log(chalk.yellow(\"\\nNo badges to showcase yet.\"));\n return;\n }\n\n // Group badges by tier\n const byTier: Record<number, typeof agent.badges> = {};\n for (const b of agent.badges) {\n if (!byTier[b.tier]) byTier[b.tier] = [];\n byTier[b.tier].push(b);\n }\n\n let out = `\\n${chalk.bold.underline(\"🏆 Badge Showcase\")}\\n\\n`;\n\n // Display from highest tier to lowest\n for (const tier of [3, 2, 1, 0]) {\n const tierBadges = byTier[tier];\n if (!tierBadges || tierBadges.length === 0) continue;\n\n const tierName = getTierName(tier);\n const tierColor = getTierColor(tier);\n\n out += tierColor(chalk.bold(`━━━ ${tierName.toUpperCase()} ━━━`)) + \"\\n\\n\";\n\n for (const b of tierBadges) {\n out += ` ${getBadgeIcon(b.badge_type)} ${formatBadgeType(b.badge_type)}\\n`;\n }\n out += \"\\n\";\n }\n\n // Stats\n const stats = await client.api.getAgentStats(targetId);\n out += `${colors.primary(\"Agent Stats\")}\\n`;\n out += ` Tasks Completed: ${stats.workerTasksCompleted}\\n`;\n out += ` Tasks Posted: ${stats.requesterTasksPosted}\\n`;\n if (stats.completionRate !== undefined) {\n out += ` Completion Rate: ${formatPercent(stats.completionRate)}\\n`;\n }\n\n console.log(out);\n } catch (error: unknown) {\n spin.fail(chalk.red(\"Failed to load showcase\"));\n const err = error as Error;\n console.error(chalk.red(err.message));\n process.exit(1);\n }\n });\n}\n\nfunction formatBadgeType(type: string): string {\n return type\n .split(\"_\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n}\n\nfunction getBadgeIcon(type: string): string {\n const icons: Record<string, string> = {\n verified_identity: \"✓\",\n first_task: \"🎯\",\n task_completer: \"📦\",\n reliable_worker: \"⭐\",\n high_earner: \"💰\",\n task_creator: \"📝\",\n big_spender: \"💎\",\n networker: \"🌐\",\n fast_worker: \"⚡\",\n top_performer: \"🏆\",\n };\n return icons[type] ?? \"🏅\";\n}\n\nfunction getTierName(tier: number): string {\n const names = [\"bronze\", \"silver\", \"gold\", \"platinum\"];\n return names[tier] ?? \"unknown\";\n}\n\nfunction getTierDisplay(tier: number): string {\n const tierName = getTierName(tier);\n const color = getTierColor(tier);\n return color(tierName.charAt(0).toUpperCase() + tierName.slice(1));\n}\n\nfunction getTierColor(tier: number): (text: string) => string {\n switch (tier) {\n case BADGE_TIER.BRONZE:\n return chalk.hex(\"#CD7F32\");\n case BADGE_TIER.SILVER:\n return chalk.gray;\n case BADGE_TIER.GOLD:\n return chalk.yellow;\n case 3: // Platinum\n return chalk.magenta;\n default:\n return chalk.white;\n }\n}\n"],"mappings":"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","names":["chalk","config","program","config","config","program","output","config","program","output","program","config","output","program","output","chalk","ora","program","ora","chalk","error","getStatusColor","chalk","ora","program","ora","chalk","badge","error","chalk","config"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/config.ts","../src/utils.ts","../src/commands/config.ts","../src/client.ts","../src/commands/agent.ts","../src/commands/skill.ts","../src/commands/task.ts","../src/commands/health.ts","../src/commands/claim.ts","../src/commands/badge.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { registerConfigCommands } from \"./commands/config.js\";\nimport { registerAgentCommands } from \"./commands/agent.js\";\nimport { registerSkillCommands } from \"./commands/skill.js\";\nimport { registerTaskCommands } from \"./commands/task.js\";\nimport { registerHealthCommand } from \"./commands/health.js\";\nimport { registerClaimCommands } from \"./commands/claim.js\";\nimport { registerBadgeCommands } from \"./commands/badge.js\";\nimport { getConfig } from \"./config.js\";\n\nconst program = new Command();\n\n// ASCII art banner\nconst banner = chalk.cyan(`\n ████████╗ █████╗ ███████╗██╗ ██╗███╗ ██╗███████╗████████╗\n ╚══██╔══╝██╔══██╗██╔════╝██║ ██╔╝████╗ ██║██╔════╝╚══██╔══╝\n ██║ ███████║███████╗█████╔╝ ██╔██╗ ██║█████╗ ██║ \n ██║ ██╔══██║╚════██║██╔═██╗ ██║╚██╗██║██╔══╝ ██║ \n ██║ ██║ ██║███████║██║ ██╗██║ ╚████║███████╗ ██║ \n ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚══════╝ ╚═╝ \n`);\n\nprogram\n .name(\"tasknet\")\n .description(\"CLI for TaskNet Protocol - Agent-to-Agent Skills Marketplace\")\n .version(\"0.2.0\")\n .addHelpText(\"beforeAll\", banner)\n .option(\"--json\", \"Output as JSON\")\n .hook(\"preAction\", (thisCommand) => {\n // Set output format if --json flag is used\n const opts = thisCommand.opts();\n if (opts.json) {\n const config = getConfig();\n // Temporarily override for this command\n process.env.TASKNET_OUTPUT_FORMAT = \"json\";\n }\n });\n\n// Register all commands\nregisterConfigCommands(program);\nregisterAgentCommands(program);\nregisterSkillCommands(program);\nregisterTaskCommands(program);\nregisterClaimCommands(program);\nregisterBadgeCommands(program);\nregisterHealthCommand(program);\n\n// Parse and execute\nprogram.parse();\n","import Conf from \"conf\";\nimport type { Network } from \"@tasknet-protocol/shared\";\n\nexport interface CliConfig {\n // API configuration\n apiUrl: string;\n apiKey?: string;\n\n // Network configuration\n network: Network;\n rpcUrl?: string;\n packageId?: string;\n\n // Walrus configuration\n walrusAggregator?: string;\n walrusPublisher?: string;\n\n // Agent configuration\n agentId?: string;\n agentName?: string;\n\n // Output preferences\n outputFormat: \"table\" | \"json\";\n}\n\nconst defaults: CliConfig = {\n apiUrl: \"http://localhost:3000\",\n network: \"testnet\",\n outputFormat: \"table\",\n};\n\nconst config = new Conf<CliConfig>({\n projectName: \"tasknet-cli\",\n projectVersion: \"0.2.0\",\n defaults,\n schema: {\n apiUrl: { type: \"string\" },\n apiKey: { type: \"string\" },\n network: { type: \"string\", enum: [\"mainnet\", \"testnet\", \"devnet\", \"localnet\"] },\n rpcUrl: { type: \"string\" },\n packageId: { type: \"string\" },\n walrusAggregator: { type: \"string\" },\n walrusPublisher: { type: \"string\" },\n agentId: { type: \"string\" },\n agentName: { type: \"string\" },\n outputFormat: { type: \"string\", enum: [\"table\", \"json\"] },\n },\n});\n\nexport function getConfig(): CliConfig {\n return {\n apiUrl: config.get(\"apiUrl\"),\n apiKey: config.get(\"apiKey\"),\n network: config.get(\"network\"),\n rpcUrl: config.get(\"rpcUrl\"),\n packageId: config.get(\"packageId\"),\n walrusAggregator: config.get(\"walrusAggregator\"),\n walrusPublisher: config.get(\"walrusPublisher\"),\n agentId: config.get(\"agentId\"),\n agentName: config.get(\"agentName\"),\n outputFormat: config.get(\"outputFormat\"),\n };\n}\n\nexport function setConfig<K extends keyof CliConfig>(\n key: K,\n value: CliConfig[K]\n): void {\n config.set(key, value);\n}\n\nexport function clearConfig(): void {\n config.clear();\n}\n\nexport function getConfigPath(): string {\n return config.path;\n}\n\nexport { config };\n","import chalk from \"chalk\";\nimport ora from \"ora\";\nimport { getConfig } from \"./config.js\";\n\n// Colors\nexport const colors = {\n primary: chalk.cyan,\n success: chalk.green,\n warning: chalk.yellow,\n error: chalk.red,\n muted: chalk.gray,\n highlight: chalk.bold.white,\n};\n\n// Logging\nexport function log(message: string): void {\n console.log(message);\n}\n\nexport function success(message: string): void {\n console.log(colors.success(\"✓\"), message);\n}\n\nexport function warn(message: string): void {\n console.log(colors.warning(\"⚠\"), message);\n}\n\nexport function error(message: string): void {\n console.error(colors.error(\"✗\"), message);\n}\n\nexport function info(message: string): void {\n console.log(colors.primary(\"ℹ\"), message);\n}\n\n// Spinner\nexport function spinner(text: string) {\n return ora({ text, color: \"cyan\" });\n}\n\n// Formatters\nexport function formatAddress(address: string, length = 8): string {\n if (address.length <= length * 2 + 2) return address;\n return `${address.slice(0, length + 2)}...${address.slice(-length)}`;\n}\n\n// MIST_PER_SUI = 1_000_000_000 (9 decimals)\nconst MIST_PER_SUI = 1_000_000_000;\n\nexport function formatSui(amount: bigint | string): string {\n const value = typeof amount === \"string\" ? BigInt(amount) : amount;\n const sui = Number(value) / MIST_PER_SUI;\n // Show up to 4 decimal places, trim trailing zeros\n const formatted = sui.toFixed(4).replace(/\\.?0+$/, '');\n return `${formatted} SUI`;\n}\n\n\nexport function formatTimestamp(timestamp: bigint | string | number): string {\n const ms = typeof timestamp === \"bigint\" ? Number(timestamp) : Number(timestamp);\n return new Date(ms).toLocaleString();\n}\n\nexport function formatDuration(seconds: number): string {\n if (seconds < 60) return `${seconds}s`;\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m`;\n if (seconds < 86400) return `${Math.floor(seconds / 3600)}h`;\n return `${Math.floor(seconds / 86400)}d`;\n}\n\nexport function formatPercent(value: number | null | undefined): string {\n if (value === null || value === undefined) return \"-\";\n return `${(value * 100).toFixed(1)}%`;\n}\n\n// Table formatting\nexport function table(\n headers: string[],\n rows: string[][],\n options: { maxWidth?: number } = {}\n): string {\n const maxWidth = options.maxWidth ?? 20;\n\n // Calculate column widths\n const widths = headers.map((h, i) =>\n Math.min(\n maxWidth,\n Math.max(h.length, ...rows.map((r) => (r[i] ?? \"\").length))\n )\n );\n\n // Format header\n const headerLine = headers\n .map((h, i) => h.padEnd(widths[i]))\n .join(\" \");\n\n const separator = widths.map((w) => \"-\".repeat(w)).join(\" \");\n\n // Format rows\n const rowLines = rows.map((row) =>\n row.map((cell, i) => (cell ?? \"\").padEnd(widths[i])).join(\" \")\n );\n\n return [\n colors.muted(headerLine),\n colors.muted(separator),\n ...rowLines,\n ].join(\"\\n\");\n}\n\n// JSON output\nexport function jsonOutput(data: unknown): void {\n console.log(JSON.stringify(data, null, 2));\n}\n\n// Output based on config\nexport function output(data: unknown, tableFormatter?: () => string): void {\n const config = getConfig();\n\n if (config.outputFormat === \"json\") {\n jsonOutput(data);\n } else if (tableFormatter) {\n log(tableFormatter());\n } else {\n jsonOutput(data);\n }\n}\n\n// Prompts\nexport function requireConfig(key: keyof ReturnType<typeof getConfig>): string {\n const config = getConfig();\n const value = config[key];\n\n if (!value) {\n error(`Missing configuration: ${key}`);\n error(`Run: tasknet config set ${key} <value>`);\n process.exit(1);\n }\n\n return value as string;\n}\n\nexport function requireAgentId(): string {\n return requireConfig(\"agentId\");\n}\n\nexport function requireApiKey(): string {\n return requireConfig(\"apiKey\");\n}\n","import { Command } from \"commander\";\nimport {\n getConfig,\n setConfig,\n clearConfig,\n getConfigPath,\n type CliConfig,\n} from \"../config.js\";\nimport { log, success, error, colors, table } from \"../utils.js\";\n\nexport function registerConfigCommands(program: Command): void {\n const configCmd = program\n .command(\"config\")\n .description(\"Manage CLI configuration\");\n\n // Show all config\n configCmd\n .command(\"show\")\n .description(\"Show current configuration\")\n .option(\"--json\", \"Output as JSON\")\n .action((options) => {\n const config = getConfig();\n\n if (options.json) {\n console.log(JSON.stringify(config, null, 2));\n return;\n }\n\n log(colors.primary(\"\\nTaskNet CLI Configuration\\n\"));\n log(colors.muted(`Config file: ${getConfigPath()}\\n`));\n\n const rows = Object.entries(config).map(([key, value]) => [\n colors.highlight(key),\n value !== undefined ? String(value) : colors.muted(\"(not set)\"),\n ]);\n\n log(table([\"Key\", \"Value\"], rows));\n log(\"\");\n });\n\n // Get a specific config value\n configCmd\n .command(\"get <key>\")\n .description(\"Get a configuration value\")\n .action((key: keyof CliConfig) => {\n const config = getConfig();\n const value = config[key];\n\n if (value === undefined) {\n error(`Configuration key \"${key}\" is not set`);\n process.exit(1);\n }\n\n log(String(value));\n });\n\n // Set a config value\n configCmd\n .command(\"set <key> <value>\")\n .description(\"Set a configuration value\")\n .action((key: keyof CliConfig, value: string) => {\n const validKeys: (keyof CliConfig)[] = [\n \"apiUrl\",\n \"apiKey\",\n \"network\",\n \"rpcUrl\",\n \"packageId\",\n \"walrusAggregator\",\n \"walrusPublisher\",\n \"agentId\",\n \"agentName\",\n \"outputFormat\",\n ];\n\n if (!validKeys.includes(key)) {\n error(`Invalid configuration key: ${key}`);\n log(`\\nValid keys: ${validKeys.join(\", \")}`);\n process.exit(1);\n }\n\n // Validate specific keys\n if (key === \"network\") {\n const validNetworks = [\"mainnet\", \"testnet\", \"devnet\", \"localnet\"];\n if (!validNetworks.includes(value)) {\n error(`Invalid network: ${value}`);\n log(`Valid networks: ${validNetworks.join(\", \")}`);\n process.exit(1);\n }\n }\n\n if (key === \"outputFormat\") {\n const validFormats = [\"table\", \"json\"];\n if (!validFormats.includes(value)) {\n error(`Invalid output format: ${value}`);\n log(`Valid formats: ${validFormats.join(\", \")}`);\n process.exit(1);\n }\n }\n\n setConfig(key, value as never);\n success(`Set ${key} = ${value}`);\n });\n\n // Unset a config value\n configCmd\n .command(\"unset <key>\")\n .description(\"Unset a configuration value\")\n .action((key: keyof CliConfig) => {\n setConfig(key, undefined as never);\n success(`Unset ${key}`);\n });\n\n // Reset all config\n configCmd\n .command(\"reset\")\n .description(\"Reset all configuration to defaults\")\n .option(\"-y, --yes\", \"Skip confirmation\")\n .action(async (options) => {\n if (!options.yes) {\n const prompts = await import(\"prompts\");\n const { confirm } = await prompts.default({\n type: \"confirm\",\n name: \"confirm\",\n message: \"Reset all configuration to defaults?\",\n initial: false,\n });\n\n if (!confirm) {\n log(\"Cancelled\");\n return;\n }\n }\n\n clearConfig();\n success(\"Configuration reset to defaults\");\n });\n\n // Show config file path\n configCmd\n .command(\"path\")\n .description(\"Show configuration file path\")\n .action(() => {\n log(getConfigPath());\n });\n}\n","import { TaskNetClient } from \"@tasknet-protocol/sdk\";\nimport { getConfig } from \"./config.js\";\n\nlet clientInstance: TaskNetClient | null = null;\n\nexport function getClient(): TaskNetClient {\n if (clientInstance) return clientInstance;\n\n const config = getConfig();\n\n clientInstance = new TaskNetClient({\n apiUrl: config.apiUrl,\n apiKey: config.apiKey,\n network: config.network,\n rpcUrl: config.rpcUrl,\n packageId: config.packageId,\n walrusAggregator: config.walrusAggregator,\n walrusPublisher: config.walrusPublisher,\n agentId: config.agentId,\n });\n\n return clientInstance;\n}\n\nexport function resetClient(): void {\n clientInstance = null;\n}\n","import { Command } from \"commander\";\nimport { getClient } from \"../client.js\";\nimport {\n log,\n success,\n error,\n spinner,\n colors,\n table,\n output,\n formatAddress,\n formatTimestamp,\n formatPercent,\n formatSui,\n requireApiKey,\n} from \"../utils.js\";\nimport { getConfig, setConfig } from \"../config.js\";\n\nexport function registerAgentCommands(program: Command): void {\n const agentCmd = program\n .command(\"agent\")\n .description(\"Manage agents\");\n\n // List agents\n agentCmd\n .command(\"list\")\n .description(\"List all agents\")\n .option(\"-p, --page <number>\", \"Page number\", \"1\")\n .option(\"-l, --limit <number>\", \"Items per page\", \"20\")\n .action(async (options) => {\n const spin = spinner(\"Fetching agents...\").start();\n\n try {\n const client = getClient();\n const result = await client.api.listAgents({\n page: parseInt(options.page),\n limit: parseInt(options.limit),\n });\n\n spin.stop();\n\n output(result, () => {\n const rows = result.data.map((agent) => [\n formatAddress(agent.id),\n formatAddress(agent.owner),\n String(agent.skills_count),\n String(agent.tasks_as_worker),\n formatPercent(agent.stats?.completion_rate),\n ]);\n\n return (\n `\\n${colors.primary(\"Agents\")} (${result.pagination.total} total)\\n\\n` +\n table([\"ID\", \"Owner\", \"Skills\", \"Tasks Done\", \"Success\"], rows) +\n `\\n\\nPage ${result.pagination.page}/${result.pagination.pages}`\n );\n });\n } catch (err) {\n spin.stop();\n error(`Failed to list agents: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n\n // Get agent details\n agentCmd\n .command(\"info [id]\")\n .description(\"Get agent details (uses configured agent if no ID)\")\n .action(async (id?: string) => {\n const agentId = id ?? getConfig().agentId;\n\n if (!agentId) {\n error(\"No agent ID provided. Set one with: tasknet config set agentId <id>\");\n process.exit(1);\n }\n\n const spin = spinner(\"Fetching agent...\").start();\n\n try {\n const client = getClient();\n const agent = await client.api.getAgent(agentId);\n\n spin.stop();\n\n output(agent, () => {\n let output = `\\n${colors.primary(\"Agent Details\")}\\n\\n`;\n output += `${colors.muted(\"ID:\")} ${agent.id}\\n`;\n output += `${colors.muted(\"Owner:\")} ${agent.owner}\\n`;\n output += `${colors.muted(\"Created:\")} ${formatTimestamp(agent.created_at)}\\n`;\n output += `${colors.muted(\"Metadata:\")} ${agent.metadata_uri ?? \"(none)\"}\\n`;\n\n if (agent.skills.length > 0) {\n output += `\\n${colors.primary(\"Skills\")} (${agent.skills.length})\\n\\n`;\n const skillRows = agent.skills.map((s) => [\n s.name,\n s.version,\n formatSui(s.base_price_mist),\n ]);\n output += table([\"Name\", \"Version\", \"Price\"], skillRows);\n }\n\n if (agent.badges.length > 0) {\n output += `\\n\\n${colors.primary(\"Badges\")} (${agent.badges.length})\\n\\n`;\n const badgeRows = agent.badges.map((b) => [\n b.badge_type,\n `Tier ${b.tier}`,\n formatTimestamp(b.earned_at),\n ]);\n output += table([\"Type\", \"Tier\", \"Earned\"], badgeRows);\n }\n\n return output;\n });\n } catch (err) {\n spin.stop();\n error(`Failed to get agent: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n\n // Get agent stats\n agentCmd\n .command(\"stats [id]\")\n .description(\"Get agent statistics\")\n .action(async (id?: string) => {\n const agentId = id ?? getConfig().agentId;\n\n if (!agentId) {\n error(\"No agent ID provided\");\n process.exit(1);\n }\n\n const spin = spinner(\"Fetching stats...\").start();\n\n try {\n const client = getClient();\n const stats = await client.api.getAgentStats(agentId);\n\n spin.stop();\n\n output(stats, () => {\n let output = `\\n${colors.primary(\"Agent Statistics\")}\\n\\n`;\n\n output += `${colors.highlight(\"Worker Stats\")}\\n`;\n output += ` Tasks Completed: ${stats.workerTasksCompleted}\\n`;\n output += ` Tasks Failed: ${stats.workerTasksFailed}\\n`;\n output += ` Tasks Expired: ${stats.workerTasksExpired}\\n`;\n output += ` Total Earned: ${formatSui(stats.workerTotalEarnedMist)}\\n`;\n output += ` Completion Rate: ${formatPercent(stats.completionRate)}\\n`;\n\n output += `\\n${colors.highlight(\"Requester Stats\")}\\n`;\n output += ` Tasks Posted: ${stats.requesterTasksPosted}\\n`;\n output += ` Tasks Settled: ${stats.requesterTasksSettled}\\n`;\n output += ` Tasks Cancelled: ${stats.requesterTasksCancelled}\\n`;\n output += ` Tasks Rejected: ${stats.requesterTasksRejected}\\n`;\n output += ` Total Spent: ${formatSui(stats.requesterTotalSpentMist)}\\n`;\n output += ` Rejection Rate: ${formatPercent(stats.rejectionRate)}\\n`;\n\n output += `\\n${colors.highlight(\"Metrics\")}\\n`;\n output += ` Unique Partners: ${stats.uniqueCounterparties}\\n`;\n output += ` Flagged: ${stats.flaggedForAbuse ? colors.error(\"Yes\") : colors.success(\"No\")}\\n`;\n\n return output;\n });\n } catch (err) {\n spin.stop();\n error(`Failed to get stats: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n\n // Set current agent\n agentCmd\n .command(\"use <id>\")\n .description(\"Set the current agent for commands\")\n .option(\"-n, --name <name>\", \"Agent name for display\")\n .action((id: string, options) => {\n setConfig(\"agentId\", id);\n if (options.name) {\n setConfig(\"agentName\", options.name);\n }\n success(`Now using agent: ${formatAddress(id)}`);\n });\n\n // Show current agent\n agentCmd\n .command(\"current\")\n .description(\"Show current agent\")\n .action(() => {\n const config = getConfig();\n\n if (!config.agentId) {\n log(\"No agent configured. Use: tasknet agent use <id>\");\n return;\n }\n\n log(`\\nCurrent Agent:`);\n log(` ID: ${config.agentId}`);\n if (config.agentName) {\n log(` Name: ${config.agentName}`);\n }\n log(\"\");\n });\n}\n","import { Command } from \"commander\";\nimport { getClient } from \"../client.js\";\nimport { STATUS_LABELS, VERIFICATION_LABELS } from \"@tasknet-protocol/shared\";\nimport {\n log,\n success,\n error,\n spinner,\n colors,\n table,\n output,\n formatAddress,\n formatSui,\n formatTimestamp,\n formatDuration,\n} from \"../utils.js\";\nimport { getConfig } from \"../config.js\";\n\nexport function registerSkillCommands(program: Command): void {\n const skillCmd = program\n .command(\"skill\")\n .alias(\"skills\")\n .description(\"Manage skills\");\n\n // List skills\n skillCmd\n .command(\"list\")\n .description(\"List available skills\")\n .option(\"-p, --page <number>\", \"Page number\", \"1\")\n .option(\"-l, --limit <number>\", \"Items per page\", \"20\")\n .option(\"-n, --name <name>\", \"Filter by name\")\n .option(\"-a, --agent <id>\", \"Filter by agent ID\")\n .option(\"-v, --verification <type>\", \"Filter by verification type (0-2)\")\n .option(\"--deprecated\", \"Include deprecated skills\")\n .option(\"-s, --sort <field>\", \"Sort by: published_at, name, price\", \"published_at\")\n .option(\"-o, --order <dir>\", \"Sort order: asc, desc\", \"desc\")\n .action(async (options) => {\n const spin = spinner(\"Fetching skills...\").start();\n\n try {\n const client = getClient();\n const result = await client.api.listSkills({\n page: parseInt(options.page),\n limit: parseInt(options.limit),\n name: options.name,\n agentId: options.agent,\n verificationType: options.verification\n ? parseInt(options.verification)\n : undefined,\n includeDeprecated: options.deprecated,\n sortBy: options.sort,\n sortOrder: options.order,\n });\n\n spin.stop();\n\n output(result, () => {\n const rows = result.data.map((skill) => [\n skill.name,\n skill.version,\n formatSui(skill.base_price_mist),\n skill.verification_type_label,\n formatDuration(skill.timeout_seconds),\n String(skill.tasks_count),\n ]);\n\n return (\n `\\n${colors.primary(\"Skills\")} (${result.pagination.total} total)\\n\\n` +\n table([\"Name\", \"Version\", \"Price\", \"Verification\", \"Timeout\", \"Tasks\"], rows) +\n `\\n\\nPage ${result.pagination.page}/${result.pagination.pages}`\n );\n });\n } catch (err) {\n spin.stop();\n error(`Failed to list skills: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n\n // Get skill details\n skillCmd\n .command(\"info <id>\")\n .description(\"Get skill details\")\n .action(async (id: string) => {\n const spin = spinner(\"Fetching skill...\").start();\n\n try {\n const client = getClient();\n const skill = await client.api.getSkill(id);\n\n spin.stop();\n\n output(skill, () => {\n let output = `\\n${colors.primary(\"Skill Details\")}\\n\\n`;\n output += `${colors.muted(\"ID:\")} ${skill.id}\\n`;\n output += `${colors.muted(\"Name:\")} ${skill.name}\\n`;\n output += `${colors.muted(\"Version:\")} ${skill.version}\\n`;\n output += `${colors.muted(\"Agent:\")} ${formatAddress(skill.agent.id)}\\n`;\n output += `${colors.muted(\"Price:\")} ${formatSui(skill.base_price_mist)}\\n`;\n output += `${colors.muted(\"Worker Bond:\")} ${formatSui(skill.worker_bond_mist)}\\n`;\n output += `${colors.muted(\"Verification:\")} ${skill.verification_type_label}\\n`;\n output += `${colors.muted(\"Timeout:\")} ${formatDuration(skill.timeout_seconds)}\\n`;\n output += `${colors.muted(\"Published:\")} ${formatTimestamp(skill.published_at)}\\n`;\n output += `${colors.muted(\"Deprecated:\")} ${skill.deprecated ? colors.error(\"Yes\") : colors.success(\"No\")}\\n`;\n\n if (skill.input_schema_hash) {\n output += `${colors.muted(\"Input Schema:\")} ${skill.input_schema_hash.slice(0, 16)}...\\n`;\n }\n if (skill.output_schema_hash) {\n output += `${colors.muted(\"Output Schema:\")} ${skill.output_schema_hash.slice(0, 16)}...\\n`;\n }\n\n output += `\\n${colors.primary(\"Priority Multipliers\")}\\n`;\n const multipliers = skill.priority_multipliers as number[];\n output += ` Standard: ${(multipliers[0] / 10000).toFixed(1)}x\\n`;\n output += ` Priority: ${(multipliers[1] / 10000).toFixed(1)}x\\n`;\n output += ` Urgent: ${(multipliers[2] / 10000).toFixed(1)}x\\n`;\n\n output += `\\n${colors.primary(\"Statistics\")}\\n`;\n output += ` Total Tasks: ${skill.stats.total_tasks}\\n`;\n output += ` Templates: ${skill.stats.templates_count}\\n`;\n\n if (Object.keys(skill.stats.tasks_by_status).length > 0) {\n output += `\\n ${colors.highlight(\"Tasks by Status:\")}\\n`;\n for (const [status, count] of Object.entries(skill.stats.tasks_by_status)) {\n output += ` ${status}: ${count}\\n`;\n }\n }\n\n if (skill.certifications.length > 0) {\n output += `\\n${colors.primary(\"Certifications\")} (${skill.certifications.length})\\n\\n`;\n const certRows = skill.certifications.map((c) => [\n c.certification_type,\n formatAddress(c.certifier_id),\n formatTimestamp(c.certified_at),\n ]);\n output += table([\"Type\", \"Certifier\", \"Certified\"], certRows);\n }\n\n return output;\n });\n } catch (err) {\n spin.stop();\n error(`Failed to get skill: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n\n // Search skills\n skillCmd\n .command(\"search <query>\")\n .description(\"Search skills by name\")\n .option(\"-l, --limit <number>\", \"Max results\", \"10\")\n .action(async (query: string, options) => {\n const spin = spinner(\"Searching...\").start();\n\n try {\n const client = getClient();\n const result = await client.api.listSkills({\n name: query,\n limit: parseInt(options.limit),\n });\n\n spin.stop();\n\n if (result.data.length === 0) {\n log(`\\nNo skills found matching \"${query}\"\\n`);\n return;\n }\n\n output(result, () => {\n const rows = result.data.map((skill) => [\n skill.name,\n skill.version,\n formatSui(skill.base_price_mist),\n skill.verification_type_label,\n formatAddress(skill.id),\n ]);\n\n return (\n `\\n${colors.primary(\"Search Results\")} for \"${query}\"\\n\\n` +\n table([\"Name\", \"Version\", \"Price\", \"Verification\", \"ID\"], rows)\n );\n });\n } catch (err) {\n spin.stop();\n error(`Search failed: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n}\n","import { Command } from \"commander\";\nimport { getClient } from \"../client.js\";\nimport { STATUS, STATUS_LABELS, PRIORITY_LABELS } from \"@tasknet-protocol/shared\";\nimport {\n log,\n success,\n error,\n spinner,\n colors,\n table,\n output,\n formatAddress,\n formatSui,\n formatTimestamp,\n} from \"../utils.js\";\nimport { getConfig } from \"../config.js\";\n\nexport function registerTaskCommands(program: Command): void {\n const taskCmd = program\n .command(\"task\")\n .alias(\"tasks\")\n .description(\"Manage tasks\");\n\n // List tasks\n taskCmd\n .command(\"list\")\n .description(\"List tasks\")\n .option(\"-p, --page <number>\", \"Page number\", \"1\")\n .option(\"-l, --limit <number>\", \"Items per page\", \"20\")\n .option(\"-s, --status <status>\", \"Filter by status (0-9)\")\n .option(\"--skill <id>\", \"Filter by skill ID\")\n .option(\"--requester <id>\", \"Filter by requester agent ID\")\n .option(\"--worker <id>\", \"Filter by worker agent ID\")\n .option(\"--mine\", \"Show my tasks (as requester or worker)\")\n .option(\"--available\", \"Show only available tasks (Posted status)\")\n .option(\"--sort <field>\", \"Sort by: created_at, expires_at, payment, priority\", \"created_at\")\n .option(\"-o, --order <dir>\", \"Sort order: asc, desc\", \"desc\")\n .action(async (options) => {\n const spin = spinner(\"Fetching tasks...\").start();\n\n try {\n const client = getClient();\n const config = getConfig();\n\n let requesterId: string | undefined;\n let workerId: string | undefined;\n let status: number | undefined;\n\n if (options.mine && config.agentId) {\n // Show tasks where user is requester or worker\n // For now, just show as requester - would need two queries for both\n requesterId = config.agentId;\n } else {\n requesterId = options.requester;\n workerId = options.worker;\n }\n\n if (options.available) {\n status = STATUS.POSTED;\n } else if (options.status !== undefined) {\n status = parseInt(options.status);\n }\n\n const result = await client.api.listTasks({\n page: parseInt(options.page),\n limit: parseInt(options.limit),\n status,\n skillId: options.skill,\n requesterId,\n workerId,\n sortBy: options.sort,\n sortOrder: options.order,\n });\n\n spin.stop();\n\n output(result, () => {\n const rows = result.data.map((task) => [\n formatAddress(task.id),\n task.skill.name,\n task.status_label,\n task.priority_label,\n formatSui(task.payment_amount_mist),\n formatTimestamp(task.expires_at),\n ]);\n\n return (\n `\\n${colors.primary(\"Tasks\")} (${result.pagination.total} total)\\n\\n` +\n table([\"ID\", \"Skill\", \"Status\", \"Priority\", \"Payment\", \"Expires\"], rows) +\n `\\n\\nPage ${result.pagination.page}/${result.pagination.pages}`\n );\n });\n } catch (err) {\n spin.stop();\n error(`Failed to list tasks: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n\n // Get task details\n taskCmd\n .command(\"info <id>\")\n .description(\"Get task details\")\n .action(async (id: string) => {\n const spin = spinner(\"Fetching task...\").start();\n\n try {\n const client = getClient();\n const task = await client.api.getTask(id);\n\n spin.stop();\n\n output(task, () => {\n let output = `\\n${colors.primary(\"Task Details\")}\\n\\n`;\n output += `${colors.muted(\"ID:\")} ${task.id}\\n`;\n output += `${colors.muted(\"Skill:\")} ${task.skill.name} v${task.skill.version}\\n`;\n output += `${colors.muted(\"Status:\")} ${getStatusColor(task.status)(task.status_label)}\\n`;\n output += `${colors.muted(\"Priority:\")} ${task.priority_label}\\n`;\n output += `${colors.muted(\"Verification:\")} ${task.verification_type_label}\\n`;\n output += `${colors.muted(\"Payment:\")} ${formatSui(task.payment_amount_mist)}\\n`;\n output += `${colors.muted(\"Worker Bond:\")} ${formatSui(task.worker_bond_amount)}\\n`;\n\n output += `\\n${colors.primary(\"Participants\")}\\n`;\n output += `${colors.muted(\"Requester:\")} ${formatAddress(task.requester.id)}\\n`;\n if (task.worker) {\n output += `${colors.muted(\"Worker:\")} ${formatAddress(task.worker.id)}\\n`;\n }\n\n output += `\\n${colors.primary(\"Payload\")}\\n`;\n output += `${colors.muted(\"Input Ref:\")} ${task.input_payload_ref}\\n`;\n if (task.expected_output_hash) {\n output += `${colors.muted(\"Expected Hash:\")} ${task.expected_output_hash.slice(0, 32)}...\\n`;\n }\n if (task.output_ref) {\n output += `${colors.muted(\"Output Ref:\")} ${task.output_ref}\\n`;\n }\n if (task.output_hash) {\n output += `${colors.muted(\"Output Hash:\")} ${task.output_hash.slice(0, 32)}...\\n`;\n }\n\n output += `\\n${colors.primary(\"Timestamps\")}\\n`;\n output += `${colors.muted(\"Created:\")} ${formatTimestamp(task.timestamps.created_at)}\\n`;\n output += `${colors.muted(\"Expires:\")} ${formatTimestamp(task.timestamps.expires_at)}\\n`;\n if (task.timestamps.reserved_at) {\n output += `${colors.muted(\"Reserved:\")} ${formatTimestamp(task.timestamps.reserved_at)}\\n`;\n }\n if (task.timestamps.accepted_at) {\n output += `${colors.muted(\"Accepted:\")} ${formatTimestamp(task.timestamps.accepted_at)}\\n`;\n }\n if (task.timestamps.submitted_at) {\n output += `${colors.muted(\"Submitted:\")} ${formatTimestamp(task.timestamps.submitted_at)}\\n`;\n }\n if (task.timestamps.verified_at) {\n output += `${colors.muted(\"Verified:\")} ${formatTimestamp(task.timestamps.verified_at)}\\n`;\n }\n if (task.timestamps.settled_at) {\n output += `${colors.muted(\"Settled:\")} ${formatTimestamp(task.timestamps.settled_at)}\\n`;\n }\n\n if (task.events.length > 0) {\n output += `\\n${colors.primary(\"Recent Events\")}\\n\\n`;\n const eventRows = task.events.slice(0, 5).map((e) => [\n e.type,\n formatTimestamp(e.timestamp_ms),\n formatAddress(e.tx_digest),\n ]);\n output += table([\"Event\", \"Time\", \"TX\"], eventRows);\n }\n\n return output;\n });\n } catch (err) {\n spin.stop();\n error(`Failed to get task: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n\n // Watch for available tasks\n taskCmd\n .command(\"watch\")\n .description(\"Watch for new available tasks\")\n .option(\"--skill <id>\", \"Filter by skill ID\")\n .option(\"-i, --interval <seconds>\", \"Poll interval\", \"30\")\n .action(async (options) => {\n log(`\\n${colors.primary(\"Watching for tasks...\")} (Ctrl+C to stop)\\n`);\n\n const interval = parseInt(options.interval) * 1000;\n let seenTasks = new Set<string>();\n\n const poll = async () => {\n try {\n const client = getClient();\n const result = await client.api.listTasks({\n status: STATUS.POSTED,\n skillId: options.skill,\n limit: 20,\n sortBy: \"created_at\",\n sortOrder: \"desc\",\n });\n\n for (const task of result.data) {\n if (!seenTasks.has(task.id)) {\n seenTasks.add(task.id);\n log(\n `${colors.success(\"NEW\")} ${task.skill.name} | ${formatSui(task.payment_amount_mist)} | ${formatAddress(task.id)}`\n );\n }\n }\n } catch (err) {\n error(`Poll failed: ${(err as Error).message}`);\n }\n };\n\n // Initial poll\n await poll();\n\n // Start interval\n setInterval(poll, interval);\n });\n}\n\nfunction getStatusColor(status: number) {\n switch (status) {\n case STATUS.POSTED:\n case STATUS.RESERVED:\n return colors.primary;\n case STATUS.ACCEPTED:\n case STATUS.IN_PROGRESS:\n case STATUS.SUBMITTED:\n return colors.warning;\n case STATUS.VERIFIED:\n case STATUS.SETTLED:\n return colors.success;\n case STATUS.CANCELLED:\n case STATUS.EXPIRED:\n case STATUS.FAILED:\n return colors.error;\n default:\n return colors.muted;\n }\n}\n","import { Command } from \"commander\";\nimport { getClient } from \"../client.js\";\nimport {\n log,\n error,\n spinner,\n colors,\n output,\n formatTimestamp,\n} from \"../utils.js\";\n\nexport function registerHealthCommand(program: Command): void {\n program\n .command(\"health\")\n .description(\"Check API health status\")\n .action(async () => {\n const spin = spinner(\"Checking health...\").start();\n\n try {\n const client = getClient();\n const health = await client.api.health();\n\n spin.stop();\n\n output(health, () => {\n const statusColor =\n health.status === \"healthy\"\n ? colors.success\n : health.status === \"degraded\"\n ? colors.warning\n : colors.error;\n\n let output = `\\n${colors.primary(\"TaskNet API Health\")}\\n\\n`;\n output += `${colors.muted(\"Status:\")} ${statusColor(health.status.toUpperCase())}\\n`;\n output += `${colors.muted(\"API Version:\")} ${health.apiVersion}\\n`;\n output += `${colors.muted(\"Last Sync:\")} ${formatTimestamp(health.lastSyncTimestamp)}\\n`;\n output += `${colors.muted(\"Sync Age:\")} ${(health.syncAgeMs / 1000).toFixed(0)}s\\n`;\n output += `${colors.muted(\"Blocks Behind:\")} ${health.blocksBehind}\\n`;\n output += `${colors.muted(\"Events Total:\")} ${health.eventsProcessedTotal}\\n`;\n\n if (health.stats) {\n output += `\\n${colors.primary(\"Statistics\")}\\n`;\n output += `${colors.muted(\"Agents:\")} ${health.stats.agents}\\n`;\n output += `${colors.muted(\"Skills:\")} ${health.stats.skills}\\n`;\n output += `${colors.muted(\"Tasks:\")} ${health.stats.tasks}\\n`;\n }\n\n return output;\n });\n } catch (err) {\n spin.stop();\n error(`Health check failed: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport { getClient } from \"../client.js\";\nimport { output, colors, formatAddress } from \"../utils.js\";\nimport { CLAIM_LABELS } from \"@tasknet-protocol/shared\";\n\nexport function registerClaimCommands(program: Command) {\n const claim = program\n .command(\"claim\")\n .description(\"Manage identity claims and verification\");\n\n // Generate a new claim\n claim\n .command(\"generate\")\n .description(\"Generate a verification code for identity claims\")\n .option(\n \"-t, --type <type>\",\n \"Claim type: x, github, moltbook, wallet\",\n \"wallet\"\n )\n .action(async (options) => {\n const spin = ora(\"Generating claim...\").start();\n\n try {\n const client = getClient();\n\n // Map type string to number\n const typeMap: Record<string, number> = {\n x: 1,\n twitter: 1,\n moltbook: 2,\n github: 3,\n wallet: 4,\n };\n\n const claimType = typeMap[options.type.toLowerCase()] ?? 0;\n\n const result = await client.api.generateClaim(claimType);\n\n spin.succeed(\"Claim generated successfully\");\n\n output(result, () => {\n let out = `\\n${colors.primary(\"Claim Details\")}\\n\\n`;\n out += `${colors.muted(\"ID:\")} ${result.claim.id}\\n`;\n out += `${colors.muted(\"Type:\")} ${getClaimTypeLabel(result.claim.claim_type)}\\n`;\n out += `${colors.muted(\"Status:\")} ${chalk.yellow(result.claim.status)}\\n`;\n out += `${colors.muted(\"Created:\")} ${result.claim.created_at}\\n`;\n out += `\\n${colors.primary(\"Verification Code\")}\\n`;\n out += `${chalk.cyan(result.claim.verification_code)}\\n`;\n out += `\\n${colors.primary(\"Instructions\")}\\n`;\n out += `${result.instructions}\\n`;\n return out;\n });\n } catch (error: unknown) {\n spin.fail(chalk.red(\"Failed to generate claim\"));\n const err = error as Error;\n console.error(chalk.red(err.message));\n process.exit(1);\n }\n });\n\n // Verify a claim\n claim\n .command(\"verify <claimId>\")\n .description(\"Verify a claim with proof\")\n .option(\"-u, --url <url>\", \"Proof URL (for X, GitHub, Moltbook)\")\n .option(\"-s, --signature <sig>\", \"Wallet signature (for wallet claims)\")\n .action(async (claimId, options) => {\n const spin = ora(\"Verifying claim...\").start();\n\n try {\n const client = getClient();\n\n const result = await client.api.verifyClaim({\n claimId,\n proofUrl: options.url,\n signature: options.signature,\n });\n\n spin.succeed(\"Claim verified successfully\");\n\n output(result, () => {\n let out = `\\n${colors.primary(\"Verified Claim\")}\\n\\n`;\n out += `${colors.muted(\"ID:\")} ${result.claim.id}\\n`;\n out += `${colors.muted(\"Type:\")} ${result.claim.claim_type_label}\\n`;\n out += `${colors.muted(\"Status:\")} ${chalk.green(result.claim.status)}\\n`;\n out += `${colors.muted(\"Claimed By:\")} ${result.claim.claimed_by ?? \"N/A\"}\\n`;\n out += `${colors.muted(\"Verified At:\")} ${result.claim.verified_at ?? \"N/A\"}\\n`;\n return out;\n });\n } catch (error: unknown) {\n spin.fail(chalk.red(\"Failed to verify claim\"));\n const err = error as Error;\n console.error(chalk.red(err.message));\n process.exit(1);\n }\n });\n\n // Get claim details\n claim\n .command(\"get <claimId>\")\n .description(\"Get details of a specific claim\")\n .action(async (claimId) => {\n const spin = ora(\"Fetching claim...\").start();\n\n try {\n const client = getClient();\n const claimData = await client.api.getClaim(claimId);\n\n spin.succeed(\"Claim fetched\");\n\n output(claimData, () => {\n let out = `\\n${colors.primary(\"Claim Details\")}\\n\\n`;\n out += `${colors.muted(\"ID:\")} ${claimData.id}\\n`;\n out += `${colors.muted(\"Agent ID:\")} ${formatAddress(claimData.agent_id)}\\n`;\n out += `${colors.muted(\"Type:\")} ${claimData.claim_type_label}\\n`;\n out += `${colors.muted(\"Status:\")} ${getStatusColor(claimData.status)}\\n`;\n out += `${colors.muted(\"Verification Code:\")} ${claimData.verification_code.slice(0, 30)}...\\n`;\n out += `${colors.muted(\"Claimed By:\")} ${claimData.claimed_by ?? \"N/A\"}\\n`;\n out += `${colors.muted(\"Created At:\")} ${claimData.created_at}\\n`;\n out += `${colors.muted(\"Verified At:\")} ${claimData.verified_at ?? \"N/A\"}\\n`;\n out += `\\n${colors.primary(\"Agent\")}\\n`;\n out += `${colors.muted(\"ID:\")} ${claimData.agent.id}\\n`;\n out += `${colors.muted(\"Owner:\")} ${formatAddress(claimData.agent.owner)}\\n`;\n return out;\n });\n } catch (error: unknown) {\n spin.fail(chalk.red(\"Failed to fetch claim\"));\n const err = error as Error;\n console.error(chalk.red(err.message));\n process.exit(1);\n }\n });\n\n // Revoke a claim\n claim\n .command(\"revoke <claimId>\")\n .description(\"Revoke a verified claim\")\n .action(async (claimId) => {\n const spin = ora(\"Revoking claim...\").start();\n\n try {\n const client = getClient();\n await client.api.revokeClaim(claimId);\n\n spin.succeed(\"Claim revoked successfully\");\n } catch (error: unknown) {\n spin.fail(chalk.red(\"Failed to revoke claim\"));\n const err = error as Error;\n console.error(chalk.red(err.message));\n process.exit(1);\n }\n });\n\n // List claims for current agent\n claim\n .command(\"list\")\n .description(\"List claims for the current agent\")\n .action(async () => {\n const spin = ora(\"Fetching claims...\").start();\n\n try {\n const client = getClient();\n const agentId = client.getAgentId();\n\n if (!agentId) {\n spin.fail(\"No active agent set. Use 'tasknet config set agentId <id>'\");\n process.exit(1);\n }\n\n const agent = await client.api.getAgent(agentId);\n\n spin.succeed(`Found ${agent.claims.length} claims`);\n\n output(agent.claims, () => {\n if (agent.claims.length === 0) {\n return `\\n${chalk.yellow(\"No claims found.\")}\\nGenerate a claim with: tasknet claim generate -t wallet\\n`;\n }\n\n let out = `\\n${colors.primary(\"Claims\")}\\n\\n`;\n\n // Simple table header\n out += `${colors.muted(\"ID\".padEnd(20))} ${colors.muted(\"Type\".padEnd(15))} ${colors.muted(\"Claimed By\".padEnd(22))} ${colors.muted(\"Verified At\")}\\n`;\n out += `${colors.muted(\"-\".repeat(20))} ${colors.muted(\"-\".repeat(15))} ${colors.muted(\"-\".repeat(22))} ${colors.muted(\"-\".repeat(20))}\\n`;\n\n for (const c of agent.claims) {\n const id = c.id.slice(0, 18) + \"..\";\n const type = getClaimTypeLabel(c.claim_type).padEnd(15);\n const claimedBy = (c.claimed_by?.slice(0, 20) ?? \"N/A\").padEnd(22);\n const verifiedAt = c.verified_at ?? chalk.yellow(\"Pending\");\n out += `${id} ${type} ${claimedBy} ${verifiedAt}\\n`;\n }\n\n return out;\n });\n } catch (error: unknown) {\n spin.fail(chalk.red(\"Failed to fetch claims\"));\n const err = error as Error;\n console.error(chalk.red(err.message));\n process.exit(1);\n }\n });\n}\n\nfunction getClaimTypeLabel(type: number): string {\n return CLAIM_LABELS[type as keyof typeof CLAIM_LABELS] ?? `Type ${type}`;\n}\n\nfunction getStatusColor(status: string): string {\n switch (status) {\n case \"verified\":\n return chalk.green(status);\n case \"pending\":\n return chalk.yellow(status);\n case \"revoked\":\n return chalk.red(status);\n default:\n return status;\n }\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport { getClient } from \"../client.js\";\nimport { output, colors, formatPercent } from \"../utils.js\";\nimport { BADGE_TIER } from \"@tasknet-protocol/shared\";\n\nexport function registerBadgeCommands(program: Command) {\n const badge = program\n .command(\"badge\")\n .description(\"View agent reputation badges\");\n\n // List badges for an agent\n badge\n .command(\"list [agentId]\")\n .description(\"List badges for an agent (defaults to current agent)\")\n .action(async (agentId?: string) => {\n const spin = ora(\"Fetching badges...\").start();\n\n try {\n const client = getClient();\n const targetId = agentId ?? client.getAgentId();\n\n if (!targetId) {\n spin.fail(\"No agent specified. Use an agent ID or set an active agent.\");\n process.exit(1);\n }\n\n const agent = await client.api.getAgent(targetId);\n\n spin.succeed(`Found ${agent.badges.length} badges`);\n\n output(agent.badges, () => {\n if (agent.badges.length === 0) {\n return `\\n${chalk.yellow(\"No badges earned yet.\")}\\nComplete tasks and verify your identity to earn badges!\\n`;\n }\n\n let out = `\\n${colors.primary(`Badges for ${targetId.slice(0, 16)}...`)}\\n\\n`;\n\n // Table header\n out += `${colors.muted(\"Badge\".padEnd(22))} ${colors.muted(\"Tier\".padEnd(10))} ${colors.muted(\"Earned At\")}\\n`;\n out += `${colors.muted(\"-\".repeat(22))} ${colors.muted(\"-\".repeat(10))} ${colors.muted(\"-\".repeat(20))}\\n`;\n\n for (const b of agent.badges) {\n const badge = (getBadgeIcon(b.badge_type) + \" \" + formatBadgeType(b.badge_type)).padEnd(22);\n const tier = getTierDisplay(b.tier).padEnd(10);\n const earnedAt = new Date(b.earned_at).toLocaleDateString();\n out += `${badge} ${tier} ${earnedAt}\\n`;\n }\n\n // Show badge summary\n const tierCounts = { bronze: 0, silver: 0, gold: 0, platinum: 0 };\n for (const b of agent.badges) {\n const tierName = getTierName(b.tier);\n if (tierName in tierCounts) {\n tierCounts[tierName as keyof typeof tierCounts]++;\n }\n }\n\n out += `\\n${colors.primary(\"Summary\")}\\n`;\n out += ` ${chalk.hex(\"#CD7F32\")(\"●\")} Bronze: ${tierCounts.bronze} `;\n out += `${chalk.gray(\"●\")} Silver: ${tierCounts.silver} `;\n out += `${chalk.yellow(\"●\")} Gold: ${tierCounts.gold} `;\n out += `${chalk.magenta(\"●\")} Platinum: ${tierCounts.platinum}\\n`;\n\n return out;\n });\n } catch (error: unknown) {\n spin.fail(chalk.red(\"Failed to fetch badges\"));\n const err = error as Error;\n console.error(chalk.red(err.message));\n process.exit(1);\n }\n });\n\n // Show available badge types\n badge\n .command(\"types\")\n .description(\"Show available badge types and how to earn them\")\n .action(async () => {\n let out = `\\n${colors.primary(\"Available Badges\")}\\n\\n`;\n\n const badges = [\n {\n type: \"verified_identity\",\n icon: \"✓\",\n description: \"Verified identity via social or wallet\",\n howToEarn: \"Verify your identity using X, GitHub, or wallet signature\",\n },\n {\n type: \"first_task\",\n icon: \"🎯\",\n description: \"Completed first task\",\n howToEarn: \"Complete your first task as a worker\",\n },\n {\n type: \"task_completer\",\n icon: \"📦\",\n description: \"Task completion milestone\",\n howToEarn: \"Complete 10/50/200 tasks for Bronze/Silver/Gold\",\n },\n {\n type: \"reliable_worker\",\n icon: \"⭐\",\n description: \"High completion rate\",\n howToEarn: \"Maintain 90%+ completion rate with 20+ tasks\",\n },\n {\n type: \"high_earner\",\n icon: \"💰\",\n description: \"High earnings milestone\",\n howToEarn: \"Earn 100/1K/10K SUI total\",\n },\n {\n type: \"task_creator\",\n icon: \"📝\",\n description: \"Task creation milestone\",\n howToEarn: \"Post 10/50/200 tasks for Bronze/Silver/Gold\",\n },\n {\n type: \"big_spender\",\n icon: \"💎\",\n description: \"High spending milestone\",\n howToEarn: \"Spend 100/1K/10K SUI total\",\n },\n {\n type: \"networker\",\n icon: \"🌐\",\n description: \"Network growth\",\n howToEarn: \"Work with 5/25/100 unique counterparties\",\n },\n ];\n\n for (const b of badges) {\n out += ` ${b.icon} ${chalk.bold(formatBadgeType(b.type))}\\n`;\n out += ` ${chalk.gray(b.description)}\\n`;\n out += ` ${chalk.cyan(\"How to earn:\")} ${b.howToEarn}\\n\\n`;\n }\n\n out += `${colors.primary(\"Tiers\")}\\n`;\n out += ` ${chalk.hex(\"#CD7F32\")(\"●\")} Bronze - Entry level\\n`;\n out += ` ${chalk.gray(\"●\")} Silver - Intermediate\\n`;\n out += ` ${chalk.yellow(\"●\")} Gold - Advanced\\n`;\n out += ` ${chalk.magenta(\"●\")} Platinum - Expert\\n`;\n\n console.log(out);\n });\n\n // Show badge showcase\n badge\n .command(\"showcase [agentId]\")\n .description(\"Display badges in a showcase format\")\n .action(async (agentId?: string) => {\n const spin = ora(\"Loading showcase...\").start();\n\n try {\n const client = getClient();\n const targetId = agentId ?? client.getAgentId();\n\n if (!targetId) {\n spin.fail(\"No agent specified.\");\n process.exit(1);\n }\n\n const agent = await client.api.getAgent(targetId);\n spin.stop();\n\n if (agent.badges.length === 0) {\n console.log(chalk.yellow(\"\\nNo badges to showcase yet.\"));\n return;\n }\n\n // Group badges by tier\n const byTier: Record<number, typeof agent.badges> = {};\n for (const b of agent.badges) {\n if (!byTier[b.tier]) byTier[b.tier] = [];\n byTier[b.tier].push(b);\n }\n\n let out = `\\n${chalk.bold.underline(\"🏆 Badge Showcase\")}\\n\\n`;\n\n // Display from highest tier to lowest\n for (const tier of [3, 2, 1, 0]) {\n const tierBadges = byTier[tier];\n if (!tierBadges || tierBadges.length === 0) continue;\n\n const tierName = getTierName(tier);\n const tierColor = getTierColor(tier);\n\n out += tierColor(chalk.bold(`━━━ ${tierName.toUpperCase()} ━━━`)) + \"\\n\\n\";\n\n for (const b of tierBadges) {\n out += ` ${getBadgeIcon(b.badge_type)} ${formatBadgeType(b.badge_type)}\\n`;\n }\n out += \"\\n\";\n }\n\n // Stats\n const stats = await client.api.getAgentStats(targetId);\n out += `${colors.primary(\"Agent Stats\")}\\n`;\n out += ` Tasks Completed: ${stats.workerTasksCompleted}\\n`;\n out += ` Tasks Posted: ${stats.requesterTasksPosted}\\n`;\n if (stats.completionRate !== undefined) {\n out += ` Completion Rate: ${formatPercent(stats.completionRate)}\\n`;\n }\n\n console.log(out);\n } catch (error: unknown) {\n spin.fail(chalk.red(\"Failed to load showcase\"));\n const err = error as Error;\n console.error(chalk.red(err.message));\n process.exit(1);\n }\n });\n}\n\nfunction formatBadgeType(type: string): string {\n return type\n .split(\"_\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n}\n\nfunction getBadgeIcon(type: string): string {\n const icons: Record<string, string> = {\n verified_identity: \"✓\",\n first_task: \"🎯\",\n task_completer: \"📦\",\n reliable_worker: \"⭐\",\n high_earner: \"💰\",\n task_creator: \"📝\",\n big_spender: \"💎\",\n networker: \"🌐\",\n fast_worker: \"⚡\",\n top_performer: \"🏆\",\n };\n return icons[type] ?? \"🏅\";\n}\n\nfunction getTierName(tier: number): string {\n const names = [\"bronze\", \"silver\", \"gold\", \"platinum\"];\n return names[tier] ?? \"unknown\";\n}\n\nfunction getTierDisplay(tier: number): string {\n const tierName = getTierName(tier);\n const color = getTierColor(tier);\n return color(tierName.charAt(0).toUpperCase() + tierName.slice(1));\n}\n\nfunction getTierColor(tier: number): (text: string) => string {\n switch (tier) {\n case BADGE_TIER.BRONZE:\n return chalk.hex(\"#CD7F32\");\n case BADGE_TIER.SILVER:\n return chalk.gray;\n case BADGE_TIER.GOLD:\n return chalk.yellow;\n case 3: // Platinum\n return chalk.magenta;\n default:\n return chalk.white;\n }\n}\n"],"mappings":"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","names":["chalk","config","program","config","config","program","output","config","program","output","program","config","output","program","output","chalk","ora","program","ora","chalk","error","getStatusColor","chalk","ora","program","ora","chalk","badge","error","chalk","config"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tasknet-protocol/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "CLI tool for TaskNet Protocol - Agent-to-Agent Skills Marketplace",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -10,22 +10,14 @@
|
|
|
10
10
|
"dist",
|
|
11
11
|
"README.md"
|
|
12
12
|
],
|
|
13
|
-
"scripts": {
|
|
14
|
-
"build": "tsup",
|
|
15
|
-
"dev": "tsup --watch",
|
|
16
|
-
"typecheck": "tsc --noEmit",
|
|
17
|
-
"start": "node dist/index.js",
|
|
18
|
-
"test": "vitest run",
|
|
19
|
-
"test:watch": "vitest"
|
|
20
|
-
},
|
|
21
13
|
"dependencies": {
|
|
22
|
-
"@tasknet-protocol/sdk": "^0.2.0",
|
|
23
|
-
"@tasknet-protocol/shared": "^0.2.0",
|
|
24
14
|
"chalk": "^5.4.0",
|
|
25
15
|
"commander": "^13.0.0",
|
|
26
16
|
"conf": "^13.0.0",
|
|
27
17
|
"ora": "^8.0.0",
|
|
28
|
-
"prompts": "^2.4.2"
|
|
18
|
+
"prompts": "^2.4.2",
|
|
19
|
+
"@tasknet-protocol/sdk": "0.3.1",
|
|
20
|
+
"@tasknet-protocol/shared": "0.3.1"
|
|
29
21
|
},
|
|
30
22
|
"devDependencies": {
|
|
31
23
|
"@types/node": "^20",
|
|
@@ -44,5 +36,13 @@
|
|
|
44
36
|
"repository": {
|
|
45
37
|
"type": "git",
|
|
46
38
|
"url": "https://github.com/mission69b/tasknet-protocol"
|
|
39
|
+
},
|
|
40
|
+
"scripts": {
|
|
41
|
+
"build": "tsup",
|
|
42
|
+
"dev": "tsup --watch",
|
|
43
|
+
"typecheck": "tsc --noEmit",
|
|
44
|
+
"start": "node dist/index.js",
|
|
45
|
+
"test": "vitest run",
|
|
46
|
+
"test:watch": "vitest"
|
|
47
47
|
}
|
|
48
|
-
}
|
|
48
|
+
}
|