@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.
- package/LICENSE +28 -0
- package/README.md +501 -0
- package/dist/bin/atbash.d.ts +2 -0
- package/dist/bin/atbash.js +38 -0
- package/dist/bin/atbash.js.map +1 -0
- package/dist/client.d.ts +111 -0
- package/dist/client.js +173 -0
- package/dist/client.js.map +1 -0
- package/dist/commands/config-cmd.d.ts +2 -0
- package/dist/commands/config-cmd.js +149 -0
- package/dist/commands/config-cmd.js.map +1 -0
- package/dist/commands/held.d.ts +2 -0
- package/dist/commands/held.js +158 -0
- package/dist/commands/held.js.map +1 -0
- package/dist/commands/history.d.ts +2 -0
- package/dist/commands/history.js +72 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/jail.d.ts +6 -0
- package/dist/commands/jail.js +44 -0
- package/dist/commands/jail.js.map +1 -0
- package/dist/commands/judge.d.ts +2 -0
- package/dist/commands/judge.js +218 -0
- package/dist/commands/judge.js.map +1 -0
- package/dist/commands/keygen.d.ts +2 -0
- package/dist/commands/keygen.js +90 -0
- package/dist/commands/keygen.js.map +1 -0
- package/dist/commands/org.d.ts +2 -0
- package/dist/commands/org.js +72 -0
- package/dist/commands/org.js.map +1 -0
- package/dist/commands/policy.d.ts +2 -0
- package/dist/commands/policy.js +115 -0
- package/dist/commands/policy.js.map +1 -0
- package/dist/commands/stats.d.ts +2 -0
- package/dist/commands/stats.js +62 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.js +70 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/tier.d.ts +2 -0
- package/dist/commands/tier.js +62 -0
- package/dist/commands/tier.js.map +1 -0
- package/dist/commands/tools.d.ts +2 -0
- package/dist/commands/tools.js +175 -0
- package/dist/commands/tools.js.map +1 -0
- package/dist/commands/whoami.d.ts +2 -0
- package/dist/commands/whoami.js +88 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/config.d.ts +23 -0
- package/dist/config.js +88 -0
- package/dist/config.js.map +1 -0
- package/dist/presets.d.ts +14 -0
- package/dist/presets.js +73 -0
- package/dist/presets.js.map +1 -0
- package/package.json +32 -0
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
export declare const DEFAULT_ENDPOINT = "https://atbash.ai";
|
|
2
|
+
export declare function isValidPrivateKey(hex: string): boolean;
|
|
3
|
+
export declare function derivePublicKey(privKeyHex: string): string;
|
|
4
|
+
export declare function generateKeyPair(): {
|
|
5
|
+
privKey: string;
|
|
6
|
+
pubKey: string;
|
|
7
|
+
};
|
|
8
|
+
export interface AgentAuth {
|
|
9
|
+
pubkey: string;
|
|
10
|
+
privkey: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function toPubkeyHex(val: unknown): string;
|
|
13
|
+
export interface ClientOpts {
|
|
14
|
+
endpoint?: string;
|
|
15
|
+
timeout?: number;
|
|
16
|
+
}
|
|
17
|
+
export interface JudgeResult {
|
|
18
|
+
verdict: string;
|
|
19
|
+
action_type: string;
|
|
20
|
+
reason: string;
|
|
21
|
+
confidence: number;
|
|
22
|
+
provider: string;
|
|
23
|
+
latency_ms: number;
|
|
24
|
+
tool_call_id: string;
|
|
25
|
+
on_chain: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface TierInfo {
|
|
28
|
+
org_name: string;
|
|
29
|
+
tier: string;
|
|
30
|
+
verdict_enabled: boolean;
|
|
31
|
+
enforcement_enabled: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface ToolCallRecord {
|
|
34
|
+
tool_call_id: string;
|
|
35
|
+
agent_pubkey: unknown;
|
|
36
|
+
tool_name: string;
|
|
37
|
+
command_text: string;
|
|
38
|
+
tool_args_json: string;
|
|
39
|
+
context_text: string;
|
|
40
|
+
org_name: string;
|
|
41
|
+
rowid: number;
|
|
42
|
+
}
|
|
43
|
+
export interface ToolCallFull {
|
|
44
|
+
tool_call_id: string;
|
|
45
|
+
agent_pubkey: unknown;
|
|
46
|
+
tool_name: string;
|
|
47
|
+
command_text: string;
|
|
48
|
+
context_text: string;
|
|
49
|
+
tool_args_json?: string;
|
|
50
|
+
org_name: string;
|
|
51
|
+
created_at?: number;
|
|
52
|
+
action_type?: string;
|
|
53
|
+
result_status?: string;
|
|
54
|
+
verdict_color?: string;
|
|
55
|
+
verdict_reason?: string;
|
|
56
|
+
verdict_source?: string;
|
|
57
|
+
verdict_response_time_ms?: number;
|
|
58
|
+
}
|
|
59
|
+
export interface HeldAction {
|
|
60
|
+
judgment_id: string;
|
|
61
|
+
agent_pubkey: unknown;
|
|
62
|
+
action_text: string;
|
|
63
|
+
action_context: string;
|
|
64
|
+
verdict: string;
|
|
65
|
+
reason: string;
|
|
66
|
+
created_at: number;
|
|
67
|
+
}
|
|
68
|
+
export interface HeldActionReview {
|
|
69
|
+
judgment_id: string;
|
|
70
|
+
action_text: string;
|
|
71
|
+
status: string;
|
|
72
|
+
review_note: string;
|
|
73
|
+
reviewed_by: unknown;
|
|
74
|
+
reviewed_at: number;
|
|
75
|
+
created_at: number;
|
|
76
|
+
}
|
|
77
|
+
export interface JudgmentStatus {
|
|
78
|
+
status: "pending" | "answered" | "error";
|
|
79
|
+
verdict: string;
|
|
80
|
+
reason: string;
|
|
81
|
+
judgmentId: string;
|
|
82
|
+
onChain?: boolean;
|
|
83
|
+
cached?: boolean;
|
|
84
|
+
responseTimeMs?: number;
|
|
85
|
+
}
|
|
86
|
+
export interface JudgeOptions extends ClientOpts {
|
|
87
|
+
provider?: string;
|
|
88
|
+
apiKey?: string;
|
|
89
|
+
providerEndpoint?: string;
|
|
90
|
+
model?: string;
|
|
91
|
+
toolName?: string;
|
|
92
|
+
toolArgsJson?: string;
|
|
93
|
+
}
|
|
94
|
+
export declare function judgeAction(action: string, context: string, auth: AgentAuth, opts?: JudgeOptions): Promise<JudgeResult>;
|
|
95
|
+
export declare function getJudgmentStatus(judgmentId: string, opts?: ClientOpts): Promise<JudgmentStatus>;
|
|
96
|
+
export declare function getToolCalls(maxCount: number, opts?: ClientOpts): Promise<ToolCallRecord[]>;
|
|
97
|
+
export declare function getOrgToolCalls(orgName: string, maxCount: number, opts?: ClientOpts): Promise<ToolCallRecord[]>;
|
|
98
|
+
export declare function getAgentToolCalls(agentPubkey: string, maxCount: number, opts?: ClientOpts): Promise<ToolCallRecord[]>;
|
|
99
|
+
export declare function getToolCallCount(opts?: ClientOpts): Promise<number>;
|
|
100
|
+
export declare function getToolCallFull(toolCallId: string, opts?: ClientOpts): Promise<ToolCallFull | null>;
|
|
101
|
+
export declare function getOrgTierInfo(orgName: string, opts?: ClientOpts): Promise<TierInfo | null>;
|
|
102
|
+
export declare function getPendingHeldActions(orgName: string, maxCount: number, opts?: ClientOpts): Promise<HeldAction[]>;
|
|
103
|
+
export declare function getHeldActionReviews(orgName: string, maxCount: number, opts?: ClientOpts): Promise<HeldActionReview[]>;
|
|
104
|
+
export declare function getAgentDetail(agentPubkey: string, opts?: ClientOpts): Promise<Record<string, unknown>>;
|
|
105
|
+
export declare function getAgentPolicy(agentPubkey: string, opts?: ClientOpts): Promise<{
|
|
106
|
+
policy: string;
|
|
107
|
+
is_jailed: boolean;
|
|
108
|
+
is_custom: boolean;
|
|
109
|
+
default_policy: string;
|
|
110
|
+
}>;
|
|
111
|
+
export declare function getSafetyStats(opts?: ClientOpts): Promise<Record<string, unknown>>;
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_ENDPOINT = void 0;
|
|
4
|
+
exports.isValidPrivateKey = isValidPrivateKey;
|
|
5
|
+
exports.derivePublicKey = derivePublicKey;
|
|
6
|
+
exports.generateKeyPair = generateKeyPair;
|
|
7
|
+
exports.toPubkeyHex = toPubkeyHex;
|
|
8
|
+
exports.judgeAction = judgeAction;
|
|
9
|
+
exports.getJudgmentStatus = getJudgmentStatus;
|
|
10
|
+
exports.getToolCalls = getToolCalls;
|
|
11
|
+
exports.getOrgToolCalls = getOrgToolCalls;
|
|
12
|
+
exports.getAgentToolCalls = getAgentToolCalls;
|
|
13
|
+
exports.getToolCallCount = getToolCallCount;
|
|
14
|
+
exports.getToolCallFull = getToolCallFull;
|
|
15
|
+
exports.getOrgTierInfo = getOrgTierInfo;
|
|
16
|
+
exports.getPendingHeldActions = getPendingHeldActions;
|
|
17
|
+
exports.getHeldActionReviews = getHeldActionReviews;
|
|
18
|
+
exports.getAgentDetail = getAgentDetail;
|
|
19
|
+
exports.getAgentPolicy = getAgentPolicy;
|
|
20
|
+
exports.getSafetyStats = getSafetyStats;
|
|
21
|
+
const crypto_1 = require("crypto");
|
|
22
|
+
exports.DEFAULT_ENDPOINT = "https://atbash.ai";
|
|
23
|
+
function isValidPrivateKey(hex) {
|
|
24
|
+
return /^[0-9a-fA-F]{64}$/.test(hex);
|
|
25
|
+
}
|
|
26
|
+
function derivePublicKey(privKeyHex) {
|
|
27
|
+
const ecdh = (0, crypto_1.createECDH)("secp256k1");
|
|
28
|
+
ecdh.setPrivateKey(Buffer.from(privKeyHex, "hex"));
|
|
29
|
+
return ecdh.getPublicKey("hex", "compressed");
|
|
30
|
+
}
|
|
31
|
+
function generateKeyPair() {
|
|
32
|
+
const ecdh = (0, crypto_1.createECDH)("secp256k1");
|
|
33
|
+
ecdh.generateKeys();
|
|
34
|
+
return {
|
|
35
|
+
privKey: ecdh.getPrivateKey("hex"),
|
|
36
|
+
pubKey: ecdh.getPublicKey("hex", "compressed"),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function toPubkeyHex(val) {
|
|
40
|
+
if (!val)
|
|
41
|
+
return "";
|
|
42
|
+
if (typeof val === "string")
|
|
43
|
+
return val;
|
|
44
|
+
if (Buffer.isBuffer(val))
|
|
45
|
+
return val.toString("hex");
|
|
46
|
+
if (typeof val === "object" && val !== null && "data" in val) {
|
|
47
|
+
return Buffer.from(val.data).toString("hex");
|
|
48
|
+
}
|
|
49
|
+
return "";
|
|
50
|
+
}
|
|
51
|
+
function baseUrl(opts) {
|
|
52
|
+
return opts?.endpoint || exports.DEFAULT_ENDPOINT;
|
|
53
|
+
}
|
|
54
|
+
async function postJson(url, body, opts) {
|
|
55
|
+
const resp = await fetch(url, {
|
|
56
|
+
method: "POST",
|
|
57
|
+
headers: { "Content-Type": "application/json" },
|
|
58
|
+
body: JSON.stringify(body),
|
|
59
|
+
signal: opts?.timeout ? AbortSignal.timeout(opts.timeout) : undefined,
|
|
60
|
+
});
|
|
61
|
+
if (!resp.ok) {
|
|
62
|
+
const text = await resp.text().catch(() => "");
|
|
63
|
+
throw new Error(`API error ${resp.status}: ${text || resp.statusText}`);
|
|
64
|
+
}
|
|
65
|
+
const ct = resp.headers.get("content-type") || "";
|
|
66
|
+
return ct.includes("application/json")
|
|
67
|
+
? resp.json()
|
|
68
|
+
: {};
|
|
69
|
+
}
|
|
70
|
+
async function getJson(url, opts) {
|
|
71
|
+
const resp = await fetch(url, {
|
|
72
|
+
method: "GET",
|
|
73
|
+
signal: opts?.timeout ? AbortSignal.timeout(opts.timeout) : undefined,
|
|
74
|
+
});
|
|
75
|
+
if (!resp.ok) {
|
|
76
|
+
const text = await resp.text().catch(() => "");
|
|
77
|
+
throw new Error(`API error ${resp.status}: ${text || resp.statusText}`);
|
|
78
|
+
}
|
|
79
|
+
return resp.json();
|
|
80
|
+
}
|
|
81
|
+
async function judgeAction(action, context, auth, opts) {
|
|
82
|
+
const url = `${baseUrl(opts)}/api/v1/judge`;
|
|
83
|
+
const data = await postJson(url, {
|
|
84
|
+
provider: opts?.provider || "",
|
|
85
|
+
action,
|
|
86
|
+
context: context || "",
|
|
87
|
+
agent_pubkey: auth.pubkey,
|
|
88
|
+
agent_privkey: auth.privkey,
|
|
89
|
+
tool_name: opts?.toolName || "",
|
|
90
|
+
tool_args_json: opts?.toolArgsJson || "",
|
|
91
|
+
api_key: opts?.apiKey || "",
|
|
92
|
+
endpoint_url: opts?.providerEndpoint || "",
|
|
93
|
+
model: opts?.model || "",
|
|
94
|
+
}, opts);
|
|
95
|
+
return {
|
|
96
|
+
verdict: String(data.verdict || "").toUpperCase(),
|
|
97
|
+
action_type: String(data.action_type || ""),
|
|
98
|
+
reason: String(data.reason || ""),
|
|
99
|
+
confidence: Number(data.confidence ?? 0),
|
|
100
|
+
provider: String(data.provider || ""),
|
|
101
|
+
latency_ms: Number(data.latency_ms ?? 0),
|
|
102
|
+
tool_call_id: String(data.tool_call_id || ""),
|
|
103
|
+
on_chain: Boolean(data.on_chain),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
async function getJudgmentStatus(judgmentId, opts) {
|
|
107
|
+
const url = `${baseUrl(opts)}/api/judge?id=${encodeURIComponent(judgmentId)}`;
|
|
108
|
+
const data = await getJson(url, opts);
|
|
109
|
+
return {
|
|
110
|
+
status: data.status || "error",
|
|
111
|
+
verdict: String(data.verdict || ""),
|
|
112
|
+
reason: String(data.reason || ""),
|
|
113
|
+
judgmentId: String(data.judgmentId || judgmentId),
|
|
114
|
+
onChain: Boolean(data.onChain),
|
|
115
|
+
cached: Boolean(data.cached),
|
|
116
|
+
responseTimeMs: Number(data.responseTimeMs ?? 0),
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
function riskEngineUrl(action, params, opts) {
|
|
120
|
+
const url = new URL(`${baseUrl(opts)}/api/risk-engine`);
|
|
121
|
+
url.searchParams.set("action", action);
|
|
122
|
+
for (const [k, v] of Object.entries(params)) {
|
|
123
|
+
if (v)
|
|
124
|
+
url.searchParams.set(k, v);
|
|
125
|
+
}
|
|
126
|
+
return url.toString();
|
|
127
|
+
}
|
|
128
|
+
async function getToolCalls(maxCount, opts) {
|
|
129
|
+
return getJson(riskEngineUrl("tool-calls", { limit: String(maxCount) }, opts), opts);
|
|
130
|
+
}
|
|
131
|
+
async function getOrgToolCalls(orgName, maxCount, opts) {
|
|
132
|
+
return getJson(riskEngineUrl("org-tool-calls", { org: orgName, limit: String(maxCount) }, opts), opts);
|
|
133
|
+
}
|
|
134
|
+
async function getAgentToolCalls(agentPubkey, maxCount, opts) {
|
|
135
|
+
return getJson(riskEngineUrl("agent-tool-calls", { agent: agentPubkey, limit: String(maxCount) }, opts), opts);
|
|
136
|
+
}
|
|
137
|
+
async function getToolCallCount(opts) {
|
|
138
|
+
const result = await getJson(riskEngineUrl("tool-call-count", {}, opts), opts);
|
|
139
|
+
return typeof result === "number" ? result : Number(result ?? 0);
|
|
140
|
+
}
|
|
141
|
+
async function getToolCallFull(toolCallId, opts) {
|
|
142
|
+
return getJson(riskEngineUrl("tool-call-full", { tool_call_id: toolCallId }, opts), opts);
|
|
143
|
+
}
|
|
144
|
+
async function getOrgTierInfo(orgName, opts) {
|
|
145
|
+
return getJson(riskEngineUrl("org-tier-info", { org: orgName }, opts), opts);
|
|
146
|
+
}
|
|
147
|
+
async function getPendingHeldActions(orgName, maxCount, opts) {
|
|
148
|
+
return getJson(riskEngineUrl("pending-held-actions", { org: orgName, limit: String(maxCount) }, opts), opts);
|
|
149
|
+
}
|
|
150
|
+
async function getHeldActionReviews(orgName, maxCount, opts) {
|
|
151
|
+
return getJson(riskEngineUrl("held-action-reviews", { org: orgName, limit: String(maxCount) }, opts), opts);
|
|
152
|
+
}
|
|
153
|
+
function riskEnginePostUrl(opts) {
|
|
154
|
+
return `${baseUrl(opts)}/api/risk-engine`;
|
|
155
|
+
}
|
|
156
|
+
async function getAgentDetail(agentPubkey, opts) {
|
|
157
|
+
return postJson(riskEnginePostUrl(opts), {
|
|
158
|
+
action: "agent-detail-batch",
|
|
159
|
+
agent: agentPubkey,
|
|
160
|
+
}, opts);
|
|
161
|
+
}
|
|
162
|
+
async function getAgentPolicy(agentPubkey, opts) {
|
|
163
|
+
return postJson(riskEnginePostUrl(opts), {
|
|
164
|
+
action: "agent-policy-batch",
|
|
165
|
+
agent: agentPubkey,
|
|
166
|
+
}, opts);
|
|
167
|
+
}
|
|
168
|
+
async function getSafetyStats(opts) {
|
|
169
|
+
const url = `${baseUrl(opts)}/api/insurance?action=safety-stats`;
|
|
170
|
+
const result = await getJson(url, opts);
|
|
171
|
+
return (result?.data || result);
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;;AAKA,8CAEC;AAED,0CAIC;AAED,0CAOC;AAMD,kCAQC;AAiID,kCAkCC;AAED,8CAgBC;AAeD,oCAQC;AAED,0CAaC;AAED,8CAaC;AAED,4CAMC;AAED,0CAQC;AAED,wCAQC;AAED,sDAaC;AAED,oDAaC;AAMD,wCAYC;AAED,wCAiBC;AAED,wCAMC;AArXD,mCAAoC;AAEvB,QAAA,gBAAgB,GAC3B,mBAAmB,CAAC;AAEtB,SAAgB,iBAAiB,CAAC,GAAW;IAC3C,OAAO,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvC,CAAC;AAED,SAAgB,eAAe,CAAC,UAAkB;IAChD,MAAM,IAAI,GAAG,IAAA,mBAAU,EAAC,WAAW,CAAC,CAAC;IACrC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;IACnD,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,eAAe;IAC7B,MAAM,IAAI,GAAG,IAAA,mBAAU,EAAC,WAAW,CAAC,CAAC;IACrC,IAAI,CAAC,YAAY,EAAE,CAAC;IACpB,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAClC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC;KAC/C,CAAC;AACJ,CAAC;AAMD,SAAgB,WAAW,CAAC,GAAY;IACtC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAC,IAAI,CAAE,GAA0B,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAOD,SAAS,OAAO,CAAC,IAAiB;IAChC,OAAO,IAAI,EAAE,QAAQ,IAAI,wBAAgB,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,GAAW,EACX,IAA6B,EAC7B,IAAiB;IAEjB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC5B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAC1B,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;KACtE,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAClD,OAAO,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACpC,CAAC,CAAE,IAAI,CAAC,IAAI,EAAiB;QAC7B,CAAC,CAAE,EAAQ,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,OAAO,CAAI,GAAW,EAAE,IAAiB;IACtD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC5B,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;KACtE,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,EAAgB,CAAC;AACnC,CAAC;AAuFM,KAAK,UAAU,WAAW,CAC/B,MAAc,EACd,OAAe,EACf,IAAe,EACf,IAAmB;IAEnB,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;IAC5C,MAAM,IAAI,GAAG,MAAM,QAAQ,CACzB,GAAG,EACH;QACE,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,EAAE;QAC9B,MAAM;QACN,OAAO,EAAE,OAAO,IAAI,EAAE;QACtB,YAAY,EAAE,IAAI,CAAC,MAAM;QACzB,aAAa,EAAE,IAAI,CAAC,OAAO;QAC3B,SAAS,EAAE,IAAI,EAAE,QAAQ,IAAI,EAAE;QAC/B,cAAc,EAAE,IAAI,EAAE,YAAY,IAAI,EAAE;QACxC,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE;QAC3B,YAAY,EAAE,IAAI,EAAE,gBAAgB,IAAI,EAAE;QAC1C,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE;KACzB,EACD,IAAI,CACL,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;QACjD,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;QAC3C,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QACjC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;QACxC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;QACrC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;QACxC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;QAC7C,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;KACjC,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,iBAAiB,CACrC,UAAkB,EAClB,IAAiB;IAEjB,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,iBAAiB,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;IAC9E,MAAM,IAAI,GAAG,MAAM,OAAO,CAA0B,GAAG,EAAE,IAAI,CAAC,CAAC;IAE/D,OAAO;QACL,MAAM,EAAG,IAAI,CAAC,MAAmC,IAAI,OAAO;QAC5D,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QACnC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QACjC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC;QACjD,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9B,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QAC5B,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,MAAc,EACd,MAA8B,EAC9B,IAAiB;IAEjB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACxD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACvC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC;YAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAEM,KAAK,UAAU,YAAY,CAChC,QAAgB,EAChB,IAAiB;IAEjB,OAAO,OAAO,CACZ,aAAa,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,EAC9D,IAAI,CACL,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,eAAe,CACnC,OAAe,EACf,QAAgB,EAChB,IAAiB;IAEjB,OAAO,OAAO,CACZ,aAAa,CACX,gBAAgB,EAChB,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,EACzC,IAAI,CACL,EACD,IAAI,CACL,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,iBAAiB,CACrC,WAAmB,EACnB,QAAgB,EAChB,IAAiB;IAEjB,OAAO,OAAO,CACZ,aAAa,CACX,kBAAkB,EAClB,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,EAC/C,IAAI,CACL,EACD,IAAI,CACL,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAAC,IAAiB;IACtD,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,aAAa,CAAC,iBAAiB,EAAE,EAAE,EAAE,IAAI,CAAC,EAC1C,IAAI,CACL,CAAC;IACF,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AACnE,CAAC;AAEM,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,IAAiB;IAEjB,OAAO,OAAO,CACZ,aAAa,CAAC,gBAAgB,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,IAAI,CAAC,EACnE,IAAI,CACL,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,cAAc,CAClC,OAAe,EACf,IAAiB;IAEjB,OAAO,OAAO,CACZ,aAAa,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,EACtD,IAAI,CACL,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,qBAAqB,CACzC,OAAe,EACf,QAAgB,EAChB,IAAiB;IAEjB,OAAO,OAAO,CACZ,aAAa,CACX,sBAAsB,EACtB,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,EACzC,IAAI,CACL,EACD,IAAI,CACL,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,oBAAoB,CACxC,OAAe,EACf,QAAgB,EAChB,IAAiB;IAEjB,OAAO,OAAO,CACZ,aAAa,CACX,qBAAqB,EACrB,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,EACzC,IAAI,CACL,EACD,IAAI,CACL,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAiB;IAC1C,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC5C,CAAC;AAEM,KAAK,UAAU,cAAc,CAClC,WAAmB,EACnB,IAAiB;IAEjB,OAAO,QAAQ,CACb,iBAAiB,CAAC,IAAI,CAAC,EACvB;QACE,MAAM,EAAE,oBAAoB;QAC5B,KAAK,EAAE,WAAW;KACnB,EACD,IAAI,CACL,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,cAAc,CAClC,WAAmB,EACnB,IAAiB;IAOjB,OAAO,QAAQ,CACb,iBAAiB,CAAC,IAAI,CAAC,EACvB;QACE,MAAM,EAAE,oBAAoB;QAC5B,KAAK,EAAE,WAAW;KACnB,EACD,IAAI,CACL,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,cAAc,CAClC,IAAiB;IAEjB,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC;IACjE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAqC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5E,OAAO,CAAC,MAAM,EAAE,IAAI,IAAI,MAAM,CAA4B,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,149 @@
|
|
|
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.registerConfigCommand = registerConfigCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const config_1 = require("../config");
|
|
9
|
+
const client_1 = require("../client");
|
|
10
|
+
function maskKey(key) {
|
|
11
|
+
return key.slice(0, 8) + "..." + key.slice(-6);
|
|
12
|
+
}
|
|
13
|
+
function registerConfigCommand(program) {
|
|
14
|
+
program
|
|
15
|
+
.command("set")
|
|
16
|
+
.description("Save a configuration value")
|
|
17
|
+
.argument("<key-type>", "What to set: agent-key, admin-key, org-name, or endpoint")
|
|
18
|
+
.argument("<value>", "The value to save")
|
|
19
|
+
.action((keyType, value) => {
|
|
20
|
+
const config = (0, config_1.loadConfig)();
|
|
21
|
+
switch (keyType) {
|
|
22
|
+
case "agent-key": {
|
|
23
|
+
const clean = value.replace(/^0x/, "").trim().toLowerCase();
|
|
24
|
+
if (!(0, client_1.isValidPrivateKey)(clean)) {
|
|
25
|
+
console.error(chalk_1.default.red("Invalid private key — must be exactly 64 hex characters."));
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
config.agentKey = clean;
|
|
29
|
+
(0, config_1.saveConfig)(config);
|
|
30
|
+
const pubKey = (0, client_1.derivePublicKey)(clean);
|
|
31
|
+
console.log(chalk_1.default.green("Agent key saved."));
|
|
32
|
+
console.log(chalk_1.default.dim(`Public key: ${pubKey}`));
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
case "admin-key": {
|
|
36
|
+
const clean = value.replace(/^0x/, "").trim().toLowerCase();
|
|
37
|
+
if (!(0, client_1.isValidPrivateKey)(clean)) {
|
|
38
|
+
console.error(chalk_1.default.red("Invalid admin key — must be exactly 64 hex characters."));
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
config.adminKey = clean;
|
|
42
|
+
(0, config_1.saveConfig)(config);
|
|
43
|
+
console.log(chalk_1.default.green("Admin key saved."));
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
case "org-name": {
|
|
47
|
+
config.orgName = value.trim();
|
|
48
|
+
(0, config_1.saveConfig)(config);
|
|
49
|
+
console.log(chalk_1.default.green(`Org name saved: ${config.orgName}`));
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
case "endpoint": {
|
|
53
|
+
config.judgeEndpoint = value.trim();
|
|
54
|
+
(0, config_1.saveConfig)(config);
|
|
55
|
+
console.log(chalk_1.default.green(`Endpoint saved: ${config.judgeEndpoint}`));
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
case "provider": {
|
|
59
|
+
const valid = ["atbash", "openai", "google", "microsoft", "custom"];
|
|
60
|
+
if (!valid.includes(value.toLowerCase())) {
|
|
61
|
+
console.error(chalk_1.default.red(`Invalid provider. Choose: ${valid.join(", ")}`));
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
config.provider = value.toLowerCase();
|
|
65
|
+
(0, config_1.saveConfig)(config);
|
|
66
|
+
console.log(chalk_1.default.green(`Provider saved: ${config.provider}`));
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
case "api-key": {
|
|
70
|
+
config.providerApiKey = value.trim();
|
|
71
|
+
(0, config_1.saveConfig)(config);
|
|
72
|
+
console.log(chalk_1.default.green("Provider API key saved."));
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
case "provider-endpoint": {
|
|
76
|
+
config.providerEndpoint = value.trim();
|
|
77
|
+
(0, config_1.saveConfig)(config);
|
|
78
|
+
console.log(chalk_1.default.green(`Provider endpoint saved: ${config.providerEndpoint}`));
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
case "model": {
|
|
82
|
+
config.providerModel = value.trim();
|
|
83
|
+
(0, config_1.saveConfig)(config);
|
|
84
|
+
console.log(chalk_1.default.green(`Model saved: ${config.providerModel}`));
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
default:
|
|
88
|
+
console.error(chalk_1.default.red(`Unknown key type: ${keyType}`));
|
|
89
|
+
console.error(chalk_1.default.dim("Valid: agent-key, admin-key, org-name, endpoint, provider, api-key, provider-endpoint, model"));
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
program
|
|
94
|
+
.command("wipe")
|
|
95
|
+
.description("Clear all saved configuration")
|
|
96
|
+
.action(() => {
|
|
97
|
+
(0, config_1.saveConfig)({});
|
|
98
|
+
console.log(chalk_1.default.green("All configuration cleared."));
|
|
99
|
+
});
|
|
100
|
+
// atbash config
|
|
101
|
+
program
|
|
102
|
+
.command("config")
|
|
103
|
+
.description("Show current configuration")
|
|
104
|
+
.action(() => {
|
|
105
|
+
const config = (0, config_1.loadConfig)();
|
|
106
|
+
console.log(chalk_1.default.bold("Atbash Configuration"));
|
|
107
|
+
console.log(chalk_1.default.dim(`File: ${config_1.CONFIG_FILE}`));
|
|
108
|
+
console.log();
|
|
109
|
+
if (config.agentKey) {
|
|
110
|
+
const pub = (0, client_1.derivePublicKey)(config.agentKey);
|
|
111
|
+
console.log(` Agent key: ${chalk_1.default.dim(maskKey(config.agentKey))} ${chalk_1.default.green("(set)")}`);
|
|
112
|
+
console.log(` Public key: ${chalk_1.default.cyan(pub)}`);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
console.log(` Agent key: ${chalk_1.default.yellow("not set")} ${chalk_1.default.dim("— run atbash set agent-key <key> or atbash keygen")}`);
|
|
116
|
+
}
|
|
117
|
+
if (config.adminKey) {
|
|
118
|
+
console.log(` Admin key: ${chalk_1.default.dim(maskKey(config.adminKey))} ${chalk_1.default.green("(set)")}`);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
console.log(` Admin key: ${chalk_1.default.dim("not set")}`);
|
|
122
|
+
}
|
|
123
|
+
if (config.orgName) {
|
|
124
|
+
console.log(` Org name: ${chalk_1.default.white(config.orgName)}`);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
console.log(` Org name: ${chalk_1.default.dim("not set")}`);
|
|
128
|
+
}
|
|
129
|
+
if (config.judgeEndpoint) {
|
|
130
|
+
console.log(` Endpoint: ${chalk_1.default.white(config.judgeEndpoint)}`);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
console.log(` Endpoint: ${chalk_1.default.dim(`default (${client_1.DEFAULT_ENDPOINT})`)}`);
|
|
134
|
+
}
|
|
135
|
+
console.log();
|
|
136
|
+
console.log(chalk_1.default.bold(" Provider"));
|
|
137
|
+
console.log(` Provider: ${chalk_1.default.white(config.provider || "atbash")}`);
|
|
138
|
+
if (config.providerApiKey) {
|
|
139
|
+
console.log(` API key: ${chalk_1.default.dim(maskKey(config.providerApiKey))} ${chalk_1.default.green("(set)")}`);
|
|
140
|
+
}
|
|
141
|
+
if (config.providerEndpoint) {
|
|
142
|
+
console.log(` Provider URL: ${chalk_1.default.white(config.providerEndpoint)}`);
|
|
143
|
+
}
|
|
144
|
+
if (config.providerModel) {
|
|
145
|
+
console.log(` Model: ${chalk_1.default.white(config.providerModel)}`);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=config-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-cmd.js","sourceRoot":"","sources":["../../src/commands/config-cmd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,158 @@
|
|
|
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.registerHeldCommand = registerHeldCommand;
|
|
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 requireOrgName(opts) {
|
|
12
|
+
const orgName = opts.org || (0, config_1.resolveOrgName)();
|
|
13
|
+
if (!orgName) {
|
|
14
|
+
console.error(chalk_1.default.red("Error: Org name required.\n") +
|
|
15
|
+
"Provide via --org, ATBASH_ORG_NAME env var, or run " +
|
|
16
|
+
chalk_1.default.cyan("atbash set org-name <name>"));
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
return orgName;
|
|
20
|
+
}
|
|
21
|
+
function formatHeldAction(ha, index) {
|
|
22
|
+
const ts = ha.created_at ? new Date(ha.created_at).toISOString() : "—";
|
|
23
|
+
const pk = (0, client_1.toPubkeyHex)(ha.agent_pubkey);
|
|
24
|
+
const agent = pk ? pk.slice(0, 8) + "..." + pk.slice(-6) : "—";
|
|
25
|
+
const lines = [
|
|
26
|
+
chalk_1.default.dim(` ${index + 1}. `) +
|
|
27
|
+
chalk_1.default.yellow.bold("HELD") +
|
|
28
|
+
" " +
|
|
29
|
+
chalk_1.default.white(ha.action_text || "—"),
|
|
30
|
+
` ID: ${chalk_1.default.cyan(ha.judgment_id)} Agent: ${chalk_1.default.dim(agent)}`,
|
|
31
|
+
];
|
|
32
|
+
if (ha.action_context) {
|
|
33
|
+
lines.push(` Context: ${chalk_1.default.dim(ha.action_context)}`);
|
|
34
|
+
}
|
|
35
|
+
lines.push(` Reason: ${chalk_1.default.dim(ha.reason || "—")}`);
|
|
36
|
+
lines.push(` ${chalk_1.default.dim(ts)}`);
|
|
37
|
+
return lines.join("\n");
|
|
38
|
+
}
|
|
39
|
+
function registerHeldCommand(program) {
|
|
40
|
+
const held = program
|
|
41
|
+
.command("held")
|
|
42
|
+
.description("View held actions (Enforcement tier)");
|
|
43
|
+
held
|
|
44
|
+
.option("--org <name>", "Org name")
|
|
45
|
+
.option("-n, --count <count>", "Max items to fetch", "10")
|
|
46
|
+
.option("--endpoint <url>", "API endpoint URL")
|
|
47
|
+
.option("--json", "Output result as JSON")
|
|
48
|
+
.action(async (opts) => {
|
|
49
|
+
const orgName = requireOrgName(opts);
|
|
50
|
+
const clientOpts = { endpoint: (0, config_1.resolveEndpoint)(opts.endpoint) };
|
|
51
|
+
const maxCount = Math.min(parseInt(opts.count, 10) || 10, 50);
|
|
52
|
+
const spinner = opts.json
|
|
53
|
+
? null
|
|
54
|
+
: (0, ora_1.default)("Fetching pending held actions...").start();
|
|
55
|
+
try {
|
|
56
|
+
const results = await (0, client_1.getPendingHeldActions)(orgName, maxCount, clientOpts);
|
|
57
|
+
spinner?.stop();
|
|
58
|
+
if (opts.json) {
|
|
59
|
+
console.log(JSON.stringify(results, null, 2));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (!results.length) {
|
|
63
|
+
console.log(chalk_1.default.dim("No pending held actions."));
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
console.log(chalk_1.default.bold(`Pending Held Actions (${results.length})`));
|
|
67
|
+
console.log();
|
|
68
|
+
results.forEach((ha, i) => {
|
|
69
|
+
console.log(formatHeldAction(ha, i));
|
|
70
|
+
if (i < results.length - 1)
|
|
71
|
+
console.log();
|
|
72
|
+
});
|
|
73
|
+
console.log();
|
|
74
|
+
console.log(chalk_1.default.dim(" Inspect: ") +
|
|
75
|
+
chalk_1.default.cyan("atbash tools inspect <id>"));
|
|
76
|
+
console.log(chalk_1.default.dim(" Review history: ") +
|
|
77
|
+
chalk_1.default.cyan("atbash held reviews --org <name>"));
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
spinner?.fail("Failed to fetch held actions");
|
|
81
|
+
console.error(chalk_1.default.red(`\nError: ${err instanceof Error ? err.message : String(err)}`));
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
held
|
|
86
|
+
.command("reviews")
|
|
87
|
+
.description("Show held action review history")
|
|
88
|
+
.option("--org <name>", "Org name")
|
|
89
|
+
.option("-n, --count <count>", "Max items to fetch", "10")
|
|
90
|
+
.option("--endpoint <url>", "API endpoint URL")
|
|
91
|
+
.option("--json", "Output result as JSON")
|
|
92
|
+
.action(async (opts, cmd) => {
|
|
93
|
+
const merged = { ...cmd.parent?.opts(), ...opts };
|
|
94
|
+
const orgName = requireOrgName(merged);
|
|
95
|
+
const clientOpts = { endpoint: (0, config_1.resolveEndpoint)(merged.endpoint) };
|
|
96
|
+
const maxCount = Math.min(parseInt(merged.count, 10) || 10, 50);
|
|
97
|
+
const spinner = merged.json
|
|
98
|
+
? null
|
|
99
|
+
: (0, ora_1.default)("Fetching review history...").start();
|
|
100
|
+
try {
|
|
101
|
+
const results = await (0, client_1.getHeldActionReviews)(orgName, maxCount, clientOpts);
|
|
102
|
+
spinner?.stop();
|
|
103
|
+
if (merged.json) {
|
|
104
|
+
console.log(JSON.stringify(results, null, 2));
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (!results.length) {
|
|
108
|
+
console.log(chalk_1.default.dim("No reviews found."));
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
console.log(chalk_1.default.bold(`Held Action Reviews (${results.length})`));
|
|
112
|
+
console.log();
|
|
113
|
+
results.forEach((r, i) => {
|
|
114
|
+
const status = r.status || "pending";
|
|
115
|
+
const isApproved = status === "approved";
|
|
116
|
+
const isPending = status === "pending";
|
|
117
|
+
const statusColor = isPending
|
|
118
|
+
? chalk_1.default.yellow
|
|
119
|
+
: isApproved
|
|
120
|
+
? chalk_1.default.green
|
|
121
|
+
: chalk_1.default.red;
|
|
122
|
+
const statusText = isPending
|
|
123
|
+
? "PENDING"
|
|
124
|
+
: isApproved
|
|
125
|
+
? "APPROVED"
|
|
126
|
+
: "REJECTED";
|
|
127
|
+
const createdAt = r.created_at
|
|
128
|
+
? new Date(r.created_at).toISOString()
|
|
129
|
+
: "—";
|
|
130
|
+
const reviewedAt = r.reviewed_at
|
|
131
|
+
? new Date(r.reviewed_at).toISOString()
|
|
132
|
+
: null;
|
|
133
|
+
const reviewedBy = (0, client_1.toPubkeyHex)(r.reviewed_by);
|
|
134
|
+
console.log(chalk_1.default.dim(` ${i + 1}. `) +
|
|
135
|
+
statusColor.bold(statusText) +
|
|
136
|
+
` ${chalk_1.default.cyan(r.judgment_id)}`);
|
|
137
|
+
if (r.action_text) {
|
|
138
|
+
const truncated = r.action_text.length > 80 ? r.action_text.slice(0, 77) + "..." : r.action_text;
|
|
139
|
+
console.log(` Action: ${chalk_1.default.white(truncated)}`);
|
|
140
|
+
}
|
|
141
|
+
if (r.review_note)
|
|
142
|
+
console.log(` Note: ${chalk_1.default.dim(r.review_note)}`);
|
|
143
|
+
console.log(` Submitted: ${chalk_1.default.dim(createdAt)}`);
|
|
144
|
+
if (reviewedAt) {
|
|
145
|
+
console.log(` Reviewed by: ${chalk_1.default.dim(reviewedBy || "—")} ${chalk_1.default.dim(reviewedAt)}`);
|
|
146
|
+
}
|
|
147
|
+
if (i < results.length - 1)
|
|
148
|
+
console.log();
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
spinner?.fail("Failed to fetch reviews");
|
|
153
|
+
console.error(chalk_1.default.red(`\nError: ${err instanceof Error ? err.message : String(err)}`));
|
|
154
|
+
process.exit(1);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=held.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"held.js","sourceRoot":"","sources":["../../src/commands/held.ts"],"names":[],"mappings":"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"}
|