@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,72 @@
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.registerHistoryCommand = registerHistoryCommand;
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 registerHistoryCommand(program) {
12
+ program
13
+ .command("history")
14
+ .description("Show recent tool call activity")
15
+ .option("-n, --count <count>", "Number of entries to fetch", "10")
16
+ .option("--endpoint <url>", "API endpoint URL")
17
+ .option("--json", "Output result as JSON")
18
+ .action(async (opts) => {
19
+ const maxCount = Math.min(parseInt(opts.count, 10) || 10, 50);
20
+ const spinner = opts.json
21
+ ? null
22
+ : (0, ora_1.default)("Fetching recent activity...").start();
23
+ try {
24
+ const items = await (0, client_1.getToolCalls)(maxCount, {
25
+ endpoint: (0, config_1.resolveEndpoint)(opts.endpoint),
26
+ });
27
+ spinner?.stop();
28
+ if (opts.json) {
29
+ console.log(JSON.stringify(items, null, 2));
30
+ return;
31
+ }
32
+ if (!items.length) {
33
+ console.log(chalk_1.default.dim("No activity found."));
34
+ return;
35
+ }
36
+ console.log(chalk_1.default.bold(`Recent Activity (${items.length})`));
37
+ console.log();
38
+ items.forEach((j, i) => {
39
+ const action = j.command_text || j.tool_call_id;
40
+ const truncated = action.length > 80 ? action.slice(0, 77) + "..." : action;
41
+ const pk = (0, client_1.toPubkeyHex)(j.agent_pubkey);
42
+ const raw = j;
43
+ const details = raw.verdict_details || {};
44
+ const verdictRaw = (details.verdict || raw.verdict || "").toUpperCase();
45
+ const verdictLabel = verdictRaw === "GREEN"
46
+ ? chalk_1.default.green("PASS")
47
+ : verdictRaw === "YELLOW"
48
+ ? chalk_1.default.yellow("HOLD")
49
+ : verdictRaw === "RED"
50
+ ? chalk_1.default.red("BLOCK")
51
+ : chalk_1.default.dim("—");
52
+ console.log(chalk_1.default.dim(` ${String(i + 1).padStart(2)}.`) + ` ${verdictLabel} ${chalk_1.default.white(truncated)}`);
53
+ if (j.tool_name) {
54
+ console.log(` ${chalk_1.default.dim("Tool:")} ${chalk_1.default.yellow(j.tool_name)}`);
55
+ }
56
+ if (details.reason) {
57
+ console.log(` ${chalk_1.default.dim("Reason:")} ${details.reason}`);
58
+ }
59
+ console.log(` ${chalk_1.default.dim("Agent:")} ${chalk_1.default.cyan(pk || "—")}`);
60
+ console.log(` ${chalk_1.default.dim("ID:")} ${chalk_1.default.dim(j.tool_call_id)}`);
61
+ if (i < items.length - 1)
62
+ console.log();
63
+ });
64
+ }
65
+ catch (err) {
66
+ spinner?.fail("Failed to fetch history");
67
+ console.error(chalk_1.default.red(`\nError: ${err instanceof Error ? err.message : String(err)}`));
68
+ process.exit(1);
69
+ }
70
+ });
71
+ }
72
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * `atbash unjail` — Unjail an agent via POST /api/risk-engine action=unjail-agent.
3
+ * Jail command removed — jailing happens automatically on RED verdict in Enforcement tier.
4
+ */
5
+ import { Command } from "commander";
6
+ export declare function registerUnjailCommand(program: Command): void;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ /**
3
+ * `atbash unjail` — Unjail an agent via POST /api/risk-engine action=unjail-agent.
4
+ * Jail command removed — jailing happens automatically on RED verdict in Enforcement tier.
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.registerUnjailCommand = registerUnjailCommand;
11
+ const chalk_1 = __importDefault(require("chalk"));
12
+ const ora_1 = __importDefault(require("ora"));
13
+ const client_1 = require("../client");
14
+ const config_1 = require("../config");
15
+ function registerUnjailCommand(program) {
16
+ program
17
+ .command("unjail")
18
+ .description("Unjail an agent")
19
+ .argument("<agent-pubkey>", "Agent public key to unjail (hex)")
20
+ .option("--endpoint <url>", "API endpoint URL")
21
+ .option("--json", "Output result as JSON")
22
+ .action(async (agentPubkey, opts) => {
23
+ const spinner = opts.json ? null : (0, ora_1.default)("Unjailing agent...").start();
24
+ try {
25
+ await (0, client_1.unjailAgent)(agentPubkey, {
26
+ endpoint: (0, config_1.resolveEndpoint)(opts.endpoint),
27
+ });
28
+ spinner?.succeed("Agent unjailed");
29
+ if (opts.json) {
30
+ console.log(JSON.stringify({ agentPubkey, action: "unjailed" }, null, 2));
31
+ return;
32
+ }
33
+ console.log();
34
+ console.log(` Agent: ${chalk_1.default.dim(agentPubkey.slice(0, 8) + "..." + agentPubkey.slice(-6))}`);
35
+ console.log(` Status: ${chalk_1.default.green.bold("ACTIVE")}`);
36
+ }
37
+ catch (err) {
38
+ spinner?.fail("Failed to unjail agent");
39
+ console.error(chalk_1.default.red(`\nError: ${err instanceof Error ? err.message : String(err)}`));
40
+ process.exit(1);
41
+ }
42
+ });
43
+ }
44
+ //# sourceMappingURL=jail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jail.js","sourceRoot":"","sources":["../../src/commands/jail.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AAQH,sDA+BC;AApCD,kDAA0B;AAC1B,8CAAsB;AACtB,sCAAwC;AACxC,sCAA4C;AAE5C,SAAgB,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,iBAAiB,CAAC;SAC9B,QAAQ,CAAC,gBAAgB,EAAE,kCAAkC,CAAC;SAC9D,MAAM,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;SAC9C,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,WAAmB,EAAE,IAAI,EAAE,EAAE;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAA,aAAG,EAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;QAErE,IAAI,CAAC;YACH,MAAM,IAAA,oBAAW,EAAC,WAAW,EAAE;gBAC7B,QAAQ,EAAE,IAAA,wBAAe,EAAC,IAAI,CAAC,QAAQ,CAAC;aACzC,CAAC,CAAC;YAEH,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;YAEnC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC1E,OAAO;YACT,CAAC;YAED,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,aAAa,eAAK,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC/F,OAAO,CAAC,GAAG,CAAC,aAAa,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerJudgeCommand(program: Command): void;
@@ -0,0 +1,218 @@
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.registerJudgeCommand = registerJudgeCommand;
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 registerJudgeCommand(program) {
12
+ program
13
+ .command("judge")
14
+ .description("Submit a pending irreversible action for a verdict (allow/hold/block)")
15
+ .argument("<action>", "The action text to evaluate (max 1000 chars)")
16
+ .option("-c, --context <context>", "Additional context for the judgment", "")
17
+ .option("-k, --agent-key <key>", "Agent private key (64 hex chars)")
18
+ .option("--provider <name>", "AI provider: atbash, openai, google, microsoft, custom")
19
+ .option("--api-key <key>", "API key for the AI provider")
20
+ .option("--provider-endpoint <url>", "Custom endpoint for microsoft/custom provider")
21
+ .option("--model <model>", "Model override (e.g. gpt-4o-mini)")
22
+ .option("--org <name>", "Org name (for tier validation)")
23
+ .option("--endpoint <url>", "Judge API base URL")
24
+ .option("--timeout <ms>", "Max time to wait for verdict (ms)", "60000")
25
+ .option("--json", "Output result as JSON")
26
+ .action(async (action, opts) => {
27
+ const agentKey = (0, config_1.resolveAgentKey)(opts.agentKey);
28
+ if (!agentKey) {
29
+ console.error(chalk_1.default.red("Error: Agent key required.\n") +
30
+ "Provide via --agent-key, ATBASH_AGENT_KEY env var, or run " +
31
+ chalk_1.default.cyan("atbash set agent-key <key>"));
32
+ process.exit(1);
33
+ }
34
+ const cleanKey = agentKey.replace(/^0x/, "").trim().toLowerCase();
35
+ if (!(0, client_1.isValidPrivateKey)(cleanKey)) {
36
+ console.error(chalk_1.default.red("Error: Invalid private key — must be exactly 64 hex characters."));
37
+ process.exit(1);
38
+ }
39
+ if (action.length > 1000) {
40
+ console.error(chalk_1.default.red("Error: Action text exceeds 1000 character limit."));
41
+ process.exit(1);
42
+ }
43
+ const agentPub = (0, client_1.derivePublicKey)(cleanKey);
44
+ const provider = (0, config_1.resolveProvider)(opts.provider);
45
+ const timeoutMs = parseInt(opts.timeout, 10);
46
+ const clientOpts = { endpoint: (0, config_1.resolveEndpoint)(opts.endpoint) };
47
+ // ── Pre-flight: org tier check ──
48
+ const orgName = opts.org || (0, config_1.resolveOrgName)();
49
+ if (orgName) {
50
+ const preflight = opts.json
51
+ ? null
52
+ : (0, ora_1.default)("Checking org tier...").start();
53
+ try {
54
+ const tier = await (0, client_1.getOrgTierInfo)(orgName, clientOpts);
55
+ preflight?.stop();
56
+ if (!tier) {
57
+ console.error(chalk_1.default.red(`Error: Org "${orgName}" not found.`));
58
+ process.exit(1);
59
+ }
60
+ if (!tier.verdict_enabled) {
61
+ console.error(chalk_1.default.red("Error: Org tier does not support verdicts.\n") +
62
+ chalk_1.default.dim(`Current tier: ${tier.tier}. Upgrade to audit+ or enforcement to use judgments.`));
63
+ process.exit(1);
64
+ }
65
+ }
66
+ catch {
67
+ preflight?.stop();
68
+ if (!opts.json) {
69
+ console.warn(chalk_1.default.yellow("Warning: Could not verify org tier — proceeding anyway."));
70
+ }
71
+ }
72
+ }
73
+ // ── Pre-flight: agent policy check ──
74
+ {
75
+ const preflight = opts.json
76
+ ? null
77
+ : (0, ora_1.default)("Checking agent policy...").start();
78
+ try {
79
+ const pol = await (0, client_1.getAgentPolicy)(agentPub, clientOpts);
80
+ preflight?.stop();
81
+ const hasPolicy = (pol.is_custom && pol.policy) || pol.default_policy;
82
+ if (!hasPolicy) {
83
+ console.error(chalk_1.default.red("Error: Agent has no policy configured.\n") +
84
+ "Onboard the agent and assign a default or custom policy before requesting judgments.\n" +
85
+ chalk_1.default.dim(`Agent: ${agentPub.slice(0, 8)}...${agentPub.slice(-6)}`));
86
+ process.exit(1);
87
+ }
88
+ if (pol.is_jailed) {
89
+ console.error(chalk_1.default.red("Error: Agent is jailed.\n") +
90
+ "Unjail the agent in dashboard Settings at " +
91
+ chalk_1.default.cyan("https://atbash.ai/") +
92
+ " before requesting judgments.");
93
+ process.exit(1);
94
+ }
95
+ }
96
+ catch {
97
+ preflight?.stop();
98
+ if (!opts.json) {
99
+ console.warn(chalk_1.default.yellow("Warning: Could not verify agent policy — proceeding anyway."));
100
+ }
101
+ }
102
+ }
103
+ if (!opts.json) {
104
+ console.log(chalk_1.default.dim(`Agent: ${agentPub.slice(0, 8)}...${agentPub.slice(-6)}`));
105
+ console.log(chalk_1.default.dim(`Provider: ${provider || "server default"}`));
106
+ console.log(chalk_1.default.dim(`Action: ${action.length > 80 ? action.slice(0, 77) + "..." : action}`));
107
+ if (opts.context)
108
+ console.log(chalk_1.default.dim(`Context: ${opts.context}`));
109
+ console.log();
110
+ }
111
+ const spinner = opts.json
112
+ ? null
113
+ : (0, ora_1.default)("Submitting action for judgment...").start();
114
+ try {
115
+ const result = await (0, client_1.judgeAction)(action, opts.context || "", {
116
+ pubkey: agentPub,
117
+ privkey: cleanKey,
118
+ }, {
119
+ endpoint: (0, config_1.resolveEndpoint)(opts.endpoint),
120
+ timeout: timeoutMs,
121
+ provider,
122
+ apiKey: (0, config_1.resolveProviderApiKey)(opts.apiKey),
123
+ providerEndpoint: (0, config_1.resolveProviderEndpoint)(opts.providerEndpoint),
124
+ model: (0, config_1.resolveProviderModel)(opts.model),
125
+ });
126
+ spinner?.stop();
127
+ const verdictUpper = result.verdict.toUpperCase();
128
+ if (opts.json) {
129
+ console.log(JSON.stringify({
130
+ verdict: result.verdict.toLowerCase(),
131
+ action_type: result.action_type,
132
+ reason: result.reason,
133
+ confidence: result.confidence,
134
+ provider: result.provider,
135
+ latency_ms: result.latency_ms,
136
+ tool_call_id: result.tool_call_id,
137
+ on_chain: result.on_chain,
138
+ agentPubkey: agentPub,
139
+ }, null, 2));
140
+ process.exit(verdictUpper === "RED" ? 2 : 0);
141
+ }
142
+ const verdictColor = verdictUpper === "GREEN"
143
+ ? chalk_1.default.green
144
+ : verdictUpper === "YELLOW"
145
+ ? chalk_1.default.yellow
146
+ : verdictUpper === "RED"
147
+ ? chalk_1.default.red
148
+ : chalk_1.default.gray;
149
+ const label = verdictUpper === "GREEN"
150
+ ? "PASS"
151
+ : verdictUpper === "YELLOW"
152
+ ? "HOLD"
153
+ : verdictUpper === "RED"
154
+ ? "BLOCK"
155
+ : "PENDING";
156
+ console.log(verdictColor.bold(` ${label} ${verdictUpper}`));
157
+ console.log();
158
+ if (result.reason) {
159
+ console.log(chalk_1.default.white(" Reason: ") + result.reason);
160
+ }
161
+ console.log();
162
+ if (result.confidence) {
163
+ console.log(chalk_1.default.dim(` Confidence: ${(result.confidence * 100).toFixed(0)}%`));
164
+ }
165
+ if (result.provider) {
166
+ console.log(chalk_1.default.dim(` Provider: ${result.provider}`));
167
+ }
168
+ if (result.latency_ms) {
169
+ console.log(chalk_1.default.dim(` Latency: ${result.latency_ms}ms`));
170
+ }
171
+ if (result.tool_call_id) {
172
+ console.log(chalk_1.default.dim(` Tool call ID: ${result.tool_call_id}`));
173
+ }
174
+ if (result.on_chain) {
175
+ console.log(chalk_1.default.dim(" On-chain: yes"));
176
+ }
177
+ if (verdictUpper === "YELLOW") {
178
+ console.log();
179
+ console.log(chalk_1.default.yellow(" ⟶ Action held for operator review."));
180
+ console.log(chalk_1.default.dim(" Run ") +
181
+ chalk_1.default.cyan("atbash held --org <name>") +
182
+ chalk_1.default.dim(" to review pending actions."));
183
+ }
184
+ if (verdictUpper === "RED") {
185
+ console.log();
186
+ console.log(chalk_1.default.red(" ⟶ Action blocked. Agent is now jailed."));
187
+ console.log(chalk_1.default.dim(" An operator must review and unjail this agent via the Atbash dashboard."));
188
+ }
189
+ process.exit(verdictUpper === "RED" ? 2 : 0);
190
+ }
191
+ catch (err) {
192
+ spinner?.fail("Judgment failed");
193
+ const msg = err instanceof Error ? err.message : String(err);
194
+ if (msg.includes("Agent not registered") || msg.includes("404")) {
195
+ console.error(chalk_1.default.red("\nError: Agent not onboarded.\n") +
196
+ "Onboard this agent at " +
197
+ chalk_1.default.cyan("https://atbash.ai/") +
198
+ " — assign it to an organisation and attach an operator policy, then retry.");
199
+ }
200
+ else if (msg.includes("audit tier") ||
201
+ (msg.includes("Upgrade to Audit+") && msg.includes("403"))) {
202
+ console.error(chalk_1.default.red("\nError: Organisation is on Audit tier — verdicts are disabled.\n") +
203
+ "Upgrade the org to " +
204
+ chalk_1.default.bold("Audit+") +
205
+ " or " +
206
+ chalk_1.default.bold("Enforcement") +
207
+ " in dashboard Settings at " +
208
+ chalk_1.default.cyan("https://atbash.ai/") +
209
+ ", then retry.");
210
+ }
211
+ else {
212
+ console.error(chalk_1.default.red(`\nError: ${msg}`));
213
+ }
214
+ process.exit(1);
215
+ }
216
+ });
217
+ }
218
+ //# sourceMappingURL=judge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judge.js","sourceRoot":"","sources":["../../src/commands/judge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerKeygenCommand(program: Command): void;
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.registerKeygenCommand = registerKeygenCommand;
40
+ const fs = __importStar(require("fs"));
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const client_1 = require("../client");
43
+ const config_1 = require("../config");
44
+ function registerKeygenCommand(program) {
45
+ program
46
+ .command("keygen")
47
+ .description("Generate a new agent keypair and save it to config")
48
+ .option("--no-save", "Don't save the key to config")
49
+ .option("-o, --output <file>", "Export keys to a file")
50
+ .option("--json", "Output as JSON")
51
+ .action((opts) => {
52
+ const keyPair = (0, client_1.generateKeyPair)();
53
+ const privKeyHex = keyPair.privKey;
54
+ const pubKeyHex = keyPair.pubKey;
55
+ // Save to config by default
56
+ if (opts.save !== false) {
57
+ const config = (0, config_1.loadConfig)();
58
+ config.agentKey = privKeyHex;
59
+ (0, config_1.saveConfig)(config);
60
+ }
61
+ // Export to file if requested
62
+ if (opts.output) {
63
+ const content = `Agent Public Key: ${pubKeyHex}\nAgent Private Key: ${privKeyHex}\n`;
64
+ fs.writeFileSync(opts.output, content, "utf-8");
65
+ }
66
+ if (opts.json) {
67
+ console.log(JSON.stringify({
68
+ privateKey: privKeyHex,
69
+ publicKey: pubKeyHex,
70
+ saved: opts.save !== false,
71
+ }, null, 2));
72
+ return;
73
+ }
74
+ console.log(chalk_1.default.bold("New Agent Keypair"));
75
+ console.log();
76
+ console.log(chalk_1.default.white(" Public Key: ") + chalk_1.default.cyan(pubKeyHex));
77
+ console.log(chalk_1.default.white(" Private Key: ") + chalk_1.default.red(privKeyHex));
78
+ console.log();
79
+ if (opts.save !== false) {
80
+ console.log(chalk_1.default.green(" Saved to config.") +
81
+ chalk_1.default.dim(" Run `atbash config` to verify."));
82
+ }
83
+ if (opts.output) {
84
+ console.log(chalk_1.default.green(` Exported to ${opts.output}`));
85
+ }
86
+ console.log();
87
+ console.log(chalk_1.default.yellow(" Save your private key securely — it cannot be recovered."));
88
+ });
89
+ }
90
+ //# sourceMappingURL=keygen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keygen.js","sourceRoot":"","sources":["../../src/commands/keygen.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,sDA8DC;AApED,uCAAyB;AAEzB,kDAA0B;AAC1B,sCAA4C;AAC5C,sCAAmD;AAEnD,SAAgB,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oDAAoD,CAAC;SACjE,MAAM,CAAC,WAAW,EAAE,8BAA8B,CAAC;SACnD,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,CAAC;SACtD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACf,MAAM,OAAO,GAAG,IAAA,wBAAe,GAAE,CAAC;QAElC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;QACnC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;QAEjC,4BAA4B;QAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,IAAA,mBAAU,GAAE,CAAC;YAC5B,MAAM,CAAC,QAAQ,GAAG,UAAU,CAAC;YAC7B,IAAA,mBAAU,EAAC,MAAM,CAAC,CAAC;QACrB,CAAC;QAED,8BAA8B;QAC9B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,sBAAsB,SAAS,wBAAwB,UAAU,IAAI,CAAC;YACtF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;gBACE,UAAU,EAAE,UAAU;gBACtB,SAAS,EAAE,SAAS;gBACpB,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,KAAK;aAC3B,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YACF,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,eAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC;gBAC/B,eAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAC/C,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,MAAM,CACV,4DAA4D,CAC7D,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerOrgCommand(program: Command): void;
@@ -0,0 +1,72 @@
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.registerOrgCommand = registerOrgCommand;
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 registerOrgCommand(program) {
12
+ const org = program
13
+ .command("org")
14
+ .description("Manage org membership");
15
+ org
16
+ .command("join")
17
+ .description("Add your agent to an org")
18
+ .option("--org <name>", "Org name to join")
19
+ .option("-k, --agent-key <key>", "Agent private key (to derive pubkey)")
20
+ .option("--agent-pubkey <pubkey>", "Agent public key directly (66 hex chars)")
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
+ let pubkey = opts.agentPubkey || "";
32
+ if (!pubkey) {
33
+ const agentKey = (0, config_1.resolveAgentKey)(opts.agentKey);
34
+ if (!agentKey) {
35
+ console.error(chalk_1.default.red("Error: Agent key or --agent-pubkey required.\n") +
36
+ "Provide via --agent-key, --agent-pubkey, or run " +
37
+ chalk_1.default.cyan("atbash set agent-key <key>"));
38
+ process.exit(1);
39
+ return;
40
+ }
41
+ const cleanKey = agentKey.replace(/^0x/, "").trim().toLowerCase();
42
+ if (!(0, client_1.isValidPrivateKey)(cleanKey)) {
43
+ console.error(chalk_1.default.red("Error: Invalid private key."));
44
+ process.exit(1);
45
+ }
46
+ pubkey = (0, client_1.derivePublicKey)(cleanKey);
47
+ }
48
+ const spinner = opts.json
49
+ ? null
50
+ : (0, ora_1.default)(`Adding agent to ${orgName}...`).start();
51
+ try {
52
+ await (0, client_1.addAgentToOrg)(pubkey, orgName, {
53
+ endpoint: (0, config_1.resolveEndpoint)(opts.endpoint),
54
+ });
55
+ spinner?.succeed(`Agent added to ${orgName}`);
56
+ if (opts.json) {
57
+ console.log(JSON.stringify({ agentPubkey: pubkey, orgName, status: "added" }, null, 2));
58
+ return;
59
+ }
60
+ console.log();
61
+ console.log(` Agent: ${chalk_1.default.cyan(pubkey)}`);
62
+ console.log(` Org: ${chalk_1.default.white(orgName)}`);
63
+ }
64
+ catch (err) {
65
+ spinner?.fail("Failed to add agent to org");
66
+ const msg = err instanceof Error ? err.message : String(err);
67
+ console.error(chalk_1.default.red(`\nError: ${msg}`));
68
+ process.exit(1);
69
+ }
70
+ });
71
+ }
72
+ //# sourceMappingURL=org.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org.js","sourceRoot":"","sources":["../../src/commands/org.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerPolicyCommand(program: Command): void;