@atbash/cli 0.1.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.
Files changed (54) hide show
  1. package/LICENSE +28 -0
  2. package/README.md +501 -0
  3. package/dist/bin/atbash.d.ts +2 -0
  4. package/dist/bin/atbash.js +38 -0
  5. package/dist/bin/atbash.js.map +1 -0
  6. package/dist/client.d.ts +111 -0
  7. package/dist/client.js +173 -0
  8. package/dist/client.js.map +1 -0
  9. package/dist/commands/config-cmd.d.ts +2 -0
  10. package/dist/commands/config-cmd.js +149 -0
  11. package/dist/commands/config-cmd.js.map +1 -0
  12. package/dist/commands/held.d.ts +2 -0
  13. package/dist/commands/held.js +158 -0
  14. package/dist/commands/held.js.map +1 -0
  15. package/dist/commands/history.d.ts +2 -0
  16. package/dist/commands/history.js +72 -0
  17. package/dist/commands/history.js.map +1 -0
  18. package/dist/commands/jail.d.ts +6 -0
  19. package/dist/commands/jail.js +44 -0
  20. package/dist/commands/jail.js.map +1 -0
  21. package/dist/commands/judge.d.ts +2 -0
  22. package/dist/commands/judge.js +218 -0
  23. package/dist/commands/judge.js.map +1 -0
  24. package/dist/commands/keygen.d.ts +2 -0
  25. package/dist/commands/keygen.js +90 -0
  26. package/dist/commands/keygen.js.map +1 -0
  27. package/dist/commands/org.d.ts +2 -0
  28. package/dist/commands/org.js +72 -0
  29. package/dist/commands/org.js.map +1 -0
  30. package/dist/commands/policy.d.ts +2 -0
  31. package/dist/commands/policy.js +115 -0
  32. package/dist/commands/policy.js.map +1 -0
  33. package/dist/commands/stats.d.ts +2 -0
  34. package/dist/commands/stats.js +62 -0
  35. package/dist/commands/stats.js.map +1 -0
  36. package/dist/commands/status.d.ts +2 -0
  37. package/dist/commands/status.js +70 -0
  38. package/dist/commands/status.js.map +1 -0
  39. package/dist/commands/tier.d.ts +2 -0
  40. package/dist/commands/tier.js +62 -0
  41. package/dist/commands/tier.js.map +1 -0
  42. package/dist/commands/tools.d.ts +2 -0
  43. package/dist/commands/tools.js +175 -0
  44. package/dist/commands/tools.js.map +1 -0
  45. package/dist/commands/whoami.d.ts +2 -0
  46. package/dist/commands/whoami.js +88 -0
  47. package/dist/commands/whoami.js.map +1 -0
  48. package/dist/config.d.ts +23 -0
  49. package/dist/config.js +88 -0
  50. package/dist/config.js.map +1 -0
  51. package/dist/presets.d.ts +14 -0
  52. package/dist/presets.js +73 -0
  53. package/dist/presets.js.map +1 -0
  54. package/package.json +32 -0
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerPolicyCommand = registerPolicyCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const ora_1 = __importDefault(require("ora"));
9
+ const client_1 = require("../client");
10
+ const config_1 = require("../config");
11
+ const presets_1 = require("../presets");
12
+ function registerPolicyCommand(program) {
13
+ const policyCmd = program
14
+ .command("policy")
15
+ .description("View your agent's safety policy");
16
+ // atbash policy show
17
+ policyCmd
18
+ .command("show")
19
+ .description("Show your agent's current policy")
20
+ .option("-k, --agent-key <key>", "Agent private key (64 hex chars)")
21
+ .option("--endpoint <url>", "API endpoint URL")
22
+ .option("--json", "Output as JSON")
23
+ .action(async (opts) => {
24
+ const agentKey = (0, config_1.resolveAgentKey)(opts.agentKey);
25
+ if (!agentKey) {
26
+ console.error(chalk_1.default.red("Error: Agent key required."));
27
+ process.exit(1);
28
+ }
29
+ const cleanKey = agentKey.replace(/^0x/, "").trim().toLowerCase();
30
+ if (!(0, client_1.isValidPrivateKey)(cleanKey)) {
31
+ console.error(chalk_1.default.red("Error: Invalid private key."));
32
+ process.exit(1);
33
+ }
34
+ const agentPub = (0, client_1.derivePublicKey)(cleanKey);
35
+ const spinner = opts.json ? null : (0, ora_1.default)("Fetching policy...").start();
36
+ try {
37
+ const result = await (0, client_1.getAgentPolicy)(agentPub, {
38
+ endpoint: (0, config_1.resolveEndpoint)(opts.endpoint),
39
+ });
40
+ spinner?.stop();
41
+ if (opts.json) {
42
+ console.log(JSON.stringify({ agentPubkey: agentPub, ...result }, null, 2));
43
+ return;
44
+ }
45
+ console.log(chalk_1.default.bold("Agent Policy"));
46
+ console.log(chalk_1.default.dim(`Agent: ${agentPub.slice(0, 8)}...${agentPub.slice(-6)}`));
47
+ console.log();
48
+ if (result.is_custom && result.policy) {
49
+ console.log(chalk_1.default.green(" Custom policy active") +
50
+ chalk_1.default.dim(` (${result.policy.length} chars)`));
51
+ console.log();
52
+ for (const line of result.policy.split("\n")) {
53
+ console.log(` ${line}`);
54
+ }
55
+ }
56
+ else if (result.default_policy) {
57
+ console.log(chalk_1.default.yellow(" No custom policy — using default policy."));
58
+ console.log();
59
+ for (const line of result.default_policy.split("\n").slice(0, 10)) {
60
+ console.log(chalk_1.default.dim(` ${line}`));
61
+ }
62
+ }
63
+ else {
64
+ console.log(chalk_1.default.yellow(" No policy configured."));
65
+ }
66
+ if (result.is_jailed) {
67
+ console.log();
68
+ console.log(chalk_1.default.red.bold(" Agent is JAILED"));
69
+ }
70
+ }
71
+ catch (err) {
72
+ spinner?.stop();
73
+ const msg = err instanceof Error ? err.message : String(err);
74
+ if (msg.includes("503") ||
75
+ msg.includes("Query failed") ||
76
+ msg.includes("Resource not found") ||
77
+ msg.includes("not found")) {
78
+ console.log(chalk_1.default.yellow("Agent not registered on chain yet."));
79
+ console.log(chalk_1.default.dim('Run a judge command first to register your agent: atbash judge "test action"'));
80
+ }
81
+ else {
82
+ console.error(chalk_1.default.red(`\nError: ${msg}`));
83
+ }
84
+ process.exit(1);
85
+ }
86
+ });
87
+ // atbash policy presets (local only)
88
+ policyCmd
89
+ .command("presets")
90
+ .description("List available policy presets")
91
+ .option("--json", "Output as JSON")
92
+ .action((opts) => {
93
+ if (opts.json) {
94
+ console.log(JSON.stringify(Object.entries(presets_1.PRESETS).map(([key, p]) => ({
95
+ key,
96
+ name: p.name,
97
+ description: p.description,
98
+ ruleCount: (p.policy.match(/<!--/g) || []).length,
99
+ chars: p.policy.length,
100
+ })), null, 2));
101
+ return;
102
+ }
103
+ console.log(chalk_1.default.bold("Reference Policy Shapes"));
104
+ console.log();
105
+ for (const [key, preset] of Object.entries(presets_1.PRESETS)) {
106
+ const ruleCount = (preset.policy.match(/<!--/g) || []).length;
107
+ console.log(` ${chalk_1.default.cyan(key.padEnd(12))} ${preset.name} — ${preset.description}`);
108
+ console.log(` ${" ".repeat(12)} ${chalk_1.default.dim(`${ruleCount} rules, ${preset.policy.length} chars`)}`);
109
+ console.log();
110
+ }
111
+ console.log(chalk_1.default.dim(" Reference only. Production policies are authored, versioned, and"));
112
+ console.log(chalk_1.default.dim(" signed in the dashboard — the CLI cannot author or assign packs."));
113
+ });
114
+ }
115
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/commands/policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerStatsCommand(program: Command): void;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerStatsCommand = registerStatsCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const ora_1 = __importDefault(require("ora"));
9
+ const client_1 = require("../client");
10
+ const config_1 = require("../config");
11
+ function registerStatsCommand(program) {
12
+ program
13
+ .command("stats")
14
+ .description("Show chain-wide verdict statistics")
15
+ .option("--endpoint <url>", "API endpoint URL")
16
+ .option("--json", "Output result as JSON")
17
+ .action(async (opts) => {
18
+ const spinner = opts.json ? null : (0, ora_1.default)("Fetching stats...").start();
19
+ try {
20
+ const r = await (0, client_1.getSafetyStats)({
21
+ endpoint: (0, config_1.resolveEndpoint)(opts.endpoint),
22
+ });
23
+ spinner?.stop();
24
+ const total = Number(r.total_judgments ?? 0);
25
+ const green = Number(r.green_count ?? 0);
26
+ const yellow = Number(r.yellow_count ?? 0);
27
+ const red = Number(r.red_count ?? 0);
28
+ const cacheHits = Number(r.cache_hits ?? 0);
29
+ const cacheMisses = Number(r.cache_misses ?? 0);
30
+ const cacheEntries = Number(r.cache_entries ?? 0);
31
+ const hitRate = total > 0 ? (cacheHits / (cacheHits + cacheMisses)) * 100 : 0;
32
+ if (opts.json) {
33
+ console.log(JSON.stringify({
34
+ totalJudgments: total,
35
+ green,
36
+ yellow,
37
+ red,
38
+ cacheHits,
39
+ cacheMisses,
40
+ cacheEntries,
41
+ cacheHitRate: Math.round(hitRate * 100) / 100,
42
+ }, null, 2));
43
+ return;
44
+ }
45
+ console.log(chalk_1.default.bold("Safety Stats"));
46
+ console.log();
47
+ console.log(` Total judgments: ${chalk_1.default.white(total.toLocaleString())}`);
48
+ console.log(` ${chalk_1.default.green("PASS")}: ${chalk_1.default.green(green.toLocaleString())}`);
49
+ console.log(` ${chalk_1.default.yellow("HOLD")}: ${chalk_1.default.yellow(yellow.toLocaleString())}`);
50
+ console.log(` ${chalk_1.default.red("BLOCK")}: ${chalk_1.default.red(red.toLocaleString())}`);
51
+ console.log();
52
+ console.log(` Cache entries: ${chalk_1.default.white(cacheEntries.toLocaleString())}`);
53
+ console.log(` Cache hit rate: ${chalk_1.default.cyan(hitRate.toFixed(1) + "%")}`);
54
+ }
55
+ catch (err) {
56
+ spinner?.fail("Failed to fetch stats");
57
+ console.error(chalk_1.default.red(`\nError: ${err instanceof Error ? err.message : String(err)}`));
58
+ process.exit(1);
59
+ }
60
+ });
61
+ }
62
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerStatusCommand(program: Command): void;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerStatusCommand = registerStatusCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const client_1 = require("../client");
9
+ const config_1 = require("../config");
10
+ function registerStatusCommand(program) {
11
+ program
12
+ .command("status")
13
+ .description("Check the status of a judgment by ID")
14
+ .argument("<judgment-id>", "The judgment ID to check")
15
+ .option("--endpoint <url>", "API endpoint URL")
16
+ .option("--json", "Output result as JSON")
17
+ .action(async (judgmentId, opts) => {
18
+ try {
19
+ const result = await (0, client_1.getJudgmentStatus)(judgmentId, {
20
+ endpoint: (0, config_1.resolveEndpoint)(opts.endpoint),
21
+ });
22
+ if (opts.json) {
23
+ console.log(JSON.stringify(result, null, 2));
24
+ process.exit(0);
25
+ }
26
+ if (result.status === "error") {
27
+ console.log(chalk_1.default.yellow(`Judgment ${judgmentId}: ${result.reason || "error"}`));
28
+ process.exit(1);
29
+ }
30
+ if (result.status === "pending") {
31
+ console.log(chalk_1.default.yellow(`Judgment ${judgmentId} is still pending...`));
32
+ process.exit(0);
33
+ }
34
+ const verdictUpper = result.verdict.toUpperCase();
35
+ const verdictColor = verdictUpper === "GREEN"
36
+ ? chalk_1.default.green
37
+ : verdictUpper === "YELLOW"
38
+ ? chalk_1.default.yellow
39
+ : verdictUpper === "RED"
40
+ ? chalk_1.default.red
41
+ : chalk_1.default.gray;
42
+ const label = verdictUpper === "GREEN"
43
+ ? "PASS"
44
+ : verdictUpper === "YELLOW"
45
+ ? "HOLD"
46
+ : verdictUpper === "RED"
47
+ ? "BLOCK"
48
+ : "PENDING";
49
+ console.log(verdictColor.bold(` ${label} ${verdictUpper}`));
50
+ if (result.reason) {
51
+ console.log(chalk_1.default.white(" Reason: ") + result.reason);
52
+ }
53
+ if (result.cached) {
54
+ console.log(chalk_1.default.dim(" Source: cached verdict"));
55
+ }
56
+ if (result.responseTimeMs) {
57
+ console.log(chalk_1.default.dim(` Inference time: ${result.responseTimeMs}ms`));
58
+ }
59
+ if (result.onChain) {
60
+ console.log(chalk_1.default.dim(" On-chain: yes"));
61
+ }
62
+ }
63
+ catch (err) {
64
+ const msg = err instanceof Error ? err.message : String(err);
65
+ console.error(chalk_1.default.red(`Error: ${msg}`));
66
+ process.exit(1);
67
+ }
68
+ });
69
+ }
70
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerTierCommand(program: Command): void;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerTierCommand = registerTierCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const ora_1 = __importDefault(require("ora"));
9
+ const client_1 = require("../client");
10
+ const config_1 = require("../config");
11
+ const TIER_LABELS = {
12
+ audit: "Audit",
13
+ audit_plus: "Audit+",
14
+ enforcement: "Enforcement",
15
+ };
16
+ function registerTierCommand(program) {
17
+ program
18
+ .command("tier")
19
+ .description("Show tier info for your org")
20
+ .option("--org <name>", "Org name (required)")
21
+ .option("--endpoint <url>", "API endpoint URL")
22
+ .option("--json", "Output result as JSON")
23
+ .action(async (opts) => {
24
+ const orgName = opts.org || (0, config_1.resolveOrgName)();
25
+ if (!orgName) {
26
+ console.error(chalk_1.default.red("Error: Org name required.\n") +
27
+ "Provide via --org, ATBASH_ORG_NAME env var, or run " +
28
+ chalk_1.default.cyan("atbash set org-name <name>"));
29
+ process.exit(1);
30
+ }
31
+ const spinner = opts.json ? null : (0, ora_1.default)("Fetching tier info...").start();
32
+ try {
33
+ const info = await (0, client_1.getOrgTierInfo)(orgName, {
34
+ endpoint: (0, config_1.resolveEndpoint)(opts.endpoint),
35
+ });
36
+ spinner?.stop();
37
+ if (!info) {
38
+ console.log(opts.json
39
+ ? JSON.stringify({ error: "Org not found", orgName })
40
+ : chalk_1.default.yellow(`Org "${orgName}" not found.`));
41
+ process.exit(1);
42
+ }
43
+ if (opts.json) {
44
+ console.log(JSON.stringify(info, null, 2));
45
+ return;
46
+ }
47
+ const label = TIER_LABELS[info.tier] || info.tier;
48
+ console.log(chalk_1.default.bold("Org Tier Info"));
49
+ console.log();
50
+ console.log(` Org: ${chalk_1.default.white(info.org_name)}`);
51
+ console.log(` Tier: ${chalk_1.default.cyan.bold(label)}`);
52
+ console.log(` Verdicts: ${info.verdict_enabled ? chalk_1.default.green("enabled") : chalk_1.default.dim("disabled")}`);
53
+ console.log(` Enforcement: ${info.enforcement_enabled ? chalk_1.default.green("enabled") : chalk_1.default.dim("disabled")}`);
54
+ }
55
+ catch (err) {
56
+ spinner?.fail("Failed to fetch tier info");
57
+ console.error(chalk_1.default.red(`\nError: ${err instanceof Error ? err.message : String(err)}`));
58
+ process.exit(1);
59
+ }
60
+ });
61
+ }
62
+ //# sourceMappingURL=tier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier.js","sourceRoot":"","sources":["../../src/commands/tier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerToolsCommand(program: Command): void;
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerToolsCommand = registerToolsCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const ora_1 = __importDefault(require("ora"));
9
+ const client_1 = require("../client");
10
+ function getVerdictFromRecord(tc) {
11
+ const raw = tc;
12
+ const details = raw.verdict_details || {};
13
+ return (details.verdict || raw.verdict || "").toUpperCase() || undefined;
14
+ }
15
+ const config_1 = require("../config");
16
+ function formatToolCall(tc, index, verdictColor) {
17
+ const pk = (0, client_1.toPubkeyHex)(tc.agent_pubkey);
18
+ const tool = tc.tool_name || "unknown";
19
+ const action = tc.command_text || tc.tool_call_id;
20
+ const truncated = action.length > 80 ? action.slice(0, 77) + "..." : action;
21
+ const verdictLabel = verdictColor === "GREEN"
22
+ ? chalk_1.default.green("PASS")
23
+ : verdictColor === "YELLOW"
24
+ ? chalk_1.default.yellow("HOLD")
25
+ : verdictColor === "RED"
26
+ ? chalk_1.default.red("BLOCK")
27
+ : chalk_1.default.dim("—");
28
+ return [
29
+ chalk_1.default.dim(` ${String(index + 1).padStart(2)}.`) + ` ${verdictLabel} ${chalk_1.default.white(truncated)}`,
30
+ ` ${chalk_1.default.dim("Tool:")} ${chalk_1.default.yellow(tool)}`,
31
+ ` ${chalk_1.default.dim("Agent:")} ${chalk_1.default.cyan(pk || "—")}`,
32
+ ` ${chalk_1.default.dim("ID:")} ${chalk_1.default.dim(tc.tool_call_id)}`,
33
+ ].join("\n");
34
+ }
35
+ function registerToolsCommand(program) {
36
+ const tools = program.command("tools").description("Query tool call logs");
37
+ tools
38
+ .option("-n, --count <count>", "Number of tool calls to fetch", "10")
39
+ .option("--org <name>", "Filter by org name")
40
+ .option("--agent <pubkey>", "Filter by agent public key")
41
+ .option("--endpoint <url>", "API endpoint URL")
42
+ .option("--json", "Output result as JSON")
43
+ .action(async (opts) => {
44
+ const clientOpts = { endpoint: (0, config_1.resolveEndpoint)(opts.endpoint) };
45
+ const maxCount = Math.min(parseInt(opts.count, 10) || 10, 50);
46
+ const spinner = opts.json ? null : (0, ora_1.default)("Fetching tool calls...").start();
47
+ try {
48
+ let results;
49
+ if (opts.agent) {
50
+ results = await (0, client_1.getAgentToolCalls)(opts.agent, maxCount, clientOpts);
51
+ }
52
+ else {
53
+ const orgName = opts.org || (0, config_1.resolveOrgName)();
54
+ results = orgName
55
+ ? await (0, client_1.getOrgToolCalls)(orgName, maxCount, clientOpts)
56
+ : await (0, client_1.getToolCalls)(maxCount, clientOpts);
57
+ }
58
+ spinner?.stop();
59
+ if (opts.json) {
60
+ console.log(JSON.stringify(results, null, 2));
61
+ return;
62
+ }
63
+ if (!results.length) {
64
+ console.log(chalk_1.default.dim("No tool calls found."));
65
+ return;
66
+ }
67
+ console.log(chalk_1.default.bold(`Tool Calls (${results.length})`));
68
+ console.log();
69
+ results.forEach((tc, i) => {
70
+ console.log(formatToolCall(tc, i, getVerdictFromRecord(tc)));
71
+ if (i < results.length - 1)
72
+ console.log();
73
+ });
74
+ }
75
+ catch (err) {
76
+ spinner?.fail("Failed to fetch tool calls");
77
+ console.error(chalk_1.default.red(`\nError: ${err instanceof Error ? err.message : String(err)}`));
78
+ process.exit(1);
79
+ }
80
+ });
81
+ tools
82
+ .command("inspect")
83
+ .description("Show full details for a tool call")
84
+ .argument("<tool-call-id>", "The tool call ID to inspect")
85
+ .option("--endpoint <url>", "API endpoint URL")
86
+ .option("--json", "Output result as JSON")
87
+ .action(async (toolCallId, opts) => {
88
+ const clientOpts = { endpoint: (0, config_1.resolveEndpoint)(opts.endpoint) };
89
+ const spinner = opts.json
90
+ ? null
91
+ : (0, ora_1.default)("Fetching tool call details...").start();
92
+ try {
93
+ const result = await (0, client_1.getToolCallFull)(toolCallId, clientOpts);
94
+ spinner?.stop();
95
+ if (!result || !result.tool_call_id) {
96
+ console.log(opts.json
97
+ ? JSON.stringify({ error: "Not found", toolCallId })
98
+ : chalk_1.default.yellow(`Tool call ${toolCallId} not found.`));
99
+ process.exit(1);
100
+ }
101
+ if (opts.json) {
102
+ console.log(JSON.stringify(result, null, 2));
103
+ return;
104
+ }
105
+ console.log(chalk_1.default.bold("Tool Call Details"));
106
+ console.log();
107
+ console.log(` ID: ${chalk_1.default.cyan(result.tool_call_id)}`);
108
+ console.log(` Action: ${chalk_1.default.white(result.command_text || "—")}`);
109
+ console.log(` Tool: ${chalk_1.default.white(result.tool_name || "—")}`);
110
+ console.log(` Agent: ${chalk_1.default.dim((0, client_1.toPubkeyHex)(result.agent_pubkey) || "—")}`);
111
+ if (result.org_name)
112
+ console.log(` Org: ${chalk_1.default.dim(result.org_name)}`);
113
+ if (result.context_text)
114
+ console.log(` Context: ${chalk_1.default.dim(result.context_text)}`);
115
+ if (result.tool_args_json)
116
+ console.log(` Args: ${chalk_1.default.dim(result.tool_args_json)}`);
117
+ if (result.verdict_color) {
118
+ const color = result.verdict_color === "GREEN"
119
+ ? chalk_1.default.green
120
+ : result.verdict_color === "YELLOW"
121
+ ? chalk_1.default.yellow
122
+ : result.verdict_color === "RED"
123
+ ? chalk_1.default.red
124
+ : chalk_1.default.gray;
125
+ const label = result.verdict_color === "GREEN"
126
+ ? "PASS"
127
+ : result.verdict_color === "YELLOW"
128
+ ? "HOLD"
129
+ : result.verdict_color === "RED"
130
+ ? "BLOCK"
131
+ : result.verdict_color;
132
+ console.log();
133
+ console.log(` Verdict: ${color.bold(label)} ${chalk_1.default.dim("(" + result.verdict_color + ")")} Source: ${chalk_1.default.white(result.verdict_source || "—")}`);
134
+ if (result.verdict_reason)
135
+ console.log(` Reason: ${chalk_1.default.white(result.verdict_reason)}`);
136
+ if (typeof result.verdict_response_time_ms === "number")
137
+ console.log(` Latency: ${chalk_1.default.dim(result.verdict_response_time_ms + "ms")}`);
138
+ }
139
+ if (result.action_type || result.result_status) {
140
+ console.log();
141
+ if (result.action_type)
142
+ console.log(` Action type: ${chalk_1.default.dim(result.action_type)}`);
143
+ if (result.result_status)
144
+ console.log(` Outcome: ${chalk_1.default.dim(result.result_status)}`);
145
+ }
146
+ }
147
+ catch (err) {
148
+ spinner?.fail("Failed to fetch tool call details");
149
+ console.error(chalk_1.default.red(`\nError: ${err instanceof Error ? err.message : String(err)}`));
150
+ process.exit(1);
151
+ }
152
+ });
153
+ tools
154
+ .command("count")
155
+ .description("Show total tool call count")
156
+ .option("--endpoint <url>", "API endpoint URL")
157
+ .option("--json", "Output result as JSON")
158
+ .action(async (opts) => {
159
+ const clientOpts = { endpoint: (0, config_1.resolveEndpoint)(opts.endpoint) };
160
+ const spinner = opts.json ? null : (0, ora_1.default)("Fetching count...").start();
161
+ try {
162
+ const count = await (0, client_1.getToolCallCount)(clientOpts);
163
+ spinner?.stop();
164
+ console.log(opts.json
165
+ ? JSON.stringify({ totalToolCalls: count }, null, 2)
166
+ : `Total tool calls: ${chalk_1.default.white(count.toLocaleString())}`);
167
+ }
168
+ catch (err) {
169
+ spinner?.fail("Failed to fetch count");
170
+ console.error(chalk_1.default.red(`\nError: ${err instanceof Error ? err.message : String(err)}`));
171
+ process.exit(1);
172
+ }
173
+ });
174
+ }
175
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerWhoamiCommand(program: Command): void;
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerWhoamiCommand = registerWhoamiCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const ora_1 = __importDefault(require("ora"));
9
+ const client_1 = require("../client");
10
+ const config_1 = require("../config");
11
+ function registerWhoamiCommand(program) {
12
+ program
13
+ .command("whoami")
14
+ .description("Show your agent's on-chain info")
15
+ .option("-k, --agent-key <key>", "Agent private key (64 hex chars)")
16
+ .option("--endpoint <url>", "API endpoint URL")
17
+ .option("--json", "Output result as JSON")
18
+ .action(async (opts) => {
19
+ const agentKey = (0, config_1.resolveAgentKey)(opts.agentKey);
20
+ if (!agentKey) {
21
+ console.error(chalk_1.default.red("Error: Agent key required."));
22
+ process.exit(1);
23
+ }
24
+ const cleanKey = agentKey.replace(/^0x/, "").trim().toLowerCase();
25
+ if (!(0, client_1.isValidPrivateKey)(cleanKey)) {
26
+ console.error(chalk_1.default.red("Error: Invalid private key."));
27
+ process.exit(1);
28
+ }
29
+ const agentPub = (0, client_1.derivePublicKey)(cleanKey);
30
+ const clientOpts = { endpoint: (0, config_1.resolveEndpoint)(opts.endpoint) };
31
+ const spinner = opts.json ? null : (0, ora_1.default)("Fetching agent info...").start();
32
+ const toolCallsP = (0, client_1.getAgentToolCalls)(agentPub, 50, clientOpts).catch((err) => ({ __error: err }));
33
+ const policyP = (0, client_1.getAgentPolicy)(agentPub, clientOpts).catch((err) => ({ __error: err }));
34
+ const [toolCallsRes, policyRes] = await Promise.all([
35
+ toolCallsP,
36
+ policyP,
37
+ ]);
38
+ spinner?.stop();
39
+ const toolCalls = Array.isArray(toolCallsRes) ? toolCallsRes : null;
40
+ const policy = policyRes && !("__error" in policyRes) ? policyRes : null;
41
+ const bothFailed = !toolCalls && !policy;
42
+ if (bothFailed) {
43
+ const err = "__error" in toolCallsRes ? toolCallsRes.__error : null;
44
+ const msg = err instanceof Error ? err.message : String(err);
45
+ if (msg.includes("503") ||
46
+ msg.includes("Query failed") ||
47
+ msg.includes("Resource not found") ||
48
+ msg.includes("not found")) {
49
+ console.log(chalk_1.default.yellow("Agent not registered on chain yet."));
50
+ console.log(chalk_1.default.dim('Run a judge command first to register your agent: atbash judge "test action"'));
51
+ }
52
+ else {
53
+ console.error(chalk_1.default.red(`\nError: ${msg}`));
54
+ }
55
+ process.exit(1);
56
+ }
57
+ const jailed = policy?.is_jailed === true;
58
+ if (opts.json) {
59
+ console.log(JSON.stringify({
60
+ pubkey: agentPub,
61
+ is_jailed: policy ? jailed : null,
62
+ toolCalls: toolCalls ? toolCalls.length : null,
63
+ hasPolicy: policy
64
+ ? (policy.is_custom && !!policy.policy) ||
65
+ !!policy.default_policy
66
+ : null,
67
+ }, null, 2));
68
+ return;
69
+ }
70
+ const statusColor = jailed ? chalk_1.default.red : chalk_1.default.green;
71
+ const statusText = policy ? (jailed ? "JAILED" : "ACTIVE") : "UNKNOWN";
72
+ console.log(chalk_1.default.bold("Agent Info"));
73
+ console.log();
74
+ console.log(` Pubkey: ${chalk_1.default.cyan(agentPub)}`);
75
+ console.log(` Status: ${statusColor.bold(statusText)}`);
76
+ if (toolCalls) {
77
+ console.log(` Tool calls: ${chalk_1.default.white(String(toolCalls.length))}`);
78
+ }
79
+ else {
80
+ console.log(` Tool calls: ${chalk_1.default.dim("unavailable")}`);
81
+ }
82
+ if (!policy) {
83
+ console.log();
84
+ console.log(chalk_1.default.dim(" Note: jail/policy status unavailable — agent may have no policy assigned yet."));
85
+ }
86
+ });
87
+ }
88
+ //# sourceMappingURL=whoami.js.map