@zanii/cli 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/commands.d.ts +12 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +210 -0
- package/dist/commands.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- package/package.json +13 -8
- package/src/commands.ts +211 -0
- package/src/index.ts +6 -2
package/README.md
CHANGED
|
@@ -75,6 +75,7 @@ Also exported as a library: `import { run } from '@zanii/cli'`.
|
|
|
75
75
|
|
|
76
76
|
## Changelog
|
|
77
77
|
|
|
78
|
+
- **0.2.3** — New commands: `init` (owner + agent identities and a delegation; sealed when ZANII_PASSPHRASE is set), `doctor`, `tail`, `diff` (exports may only append), `conform` (protocol vectors against this build), `policy test`, `rotate` (signed key succession), `report` and `offline-verify` (prints the verifier's own hash).
|
|
78
79
|
- **0.2.2** — now on `@zanii/core` and `@zanii/sdk` 0.5 (protocol 1.2): audit bundles with swarm receipts and session closes verify. No API change.
|
|
79
80
|
- **0.2.0**: `audit`: live + offline (zero-network) data-subject audits over evidence bundles, via `@zanii/subject` + `@zanii/custody-verdicts`.
|
|
80
81
|
- **0.1.0**: initial release: `keygen`, `did`, `delegate`, `revoke`, `verify`, `bundle`, `export`, `stats`, `agent`.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type FetchLike = (input: string, init?: RequestInit) => Promise<Response>;
|
|
2
|
+
interface Ctx {
|
|
3
|
+
log: (s: string) => void;
|
|
4
|
+
fetchImpl: FetchLike;
|
|
5
|
+
server: string;
|
|
6
|
+
json: boolean;
|
|
7
|
+
out?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const EXTENDED_HELP = "\n zanii init [--dir .zanii] [--scopes '*'] [--exp 2027-01-01] owner + agent identities and a delegation (sealed if ZANII_PASSPHRASE is set)\n zanii doctor --identity <id> [--delegation <cert>] check keys, delegation, server, clock\n zanii tail <did> [--once] [--interval 5000] stream an agent's new receipts\n zanii diff <bundleA> <bundleB> did the later export only append?\n zanii conform run the protocol conformance vectors against this build\n zanii policy test <policy.json> <actions.json> what a policy would have allowed, denied or held\n zanii rotate --owner <id> --from <id> [--reason rotation] new agent key with signed continuity\n zanii report <bundle.json> compliance report (Markdown)\n zanii offline-verify <bundle.json> verify with no network; prints this verifier's hash";
|
|
10
|
+
export declare function runExtended(cmd: string | undefined, positional: string[], flags: Record<string, string | boolean>, ctx: Ctx): Promise<number | undefined>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAoBA,KAAK,SAAS,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1E,UAAU,GAAG;IACX,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzB,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAKD,eAAO,MAAM,aAAa,k+BAS0F,CAAC;AAErH,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgJ/J"}
|
package/dist/commands.js
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The newer CLI commands: init, doctor, tail, diff, conform, policy test, rotate, report and
|
|
3
|
+
* offline-verify. Each returns an exit code, or undefined when the command is not one of these.
|
|
4
|
+
*/
|
|
5
|
+
import { createHash } from 'node:crypto';
|
|
6
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { fileURLToPath } from 'node:url';
|
|
9
|
+
import { ed25519 } from '@noble/curves/ed25519';
|
|
10
|
+
import { bytesToHex, hexToBytes } from '@noble/hashes/utils';
|
|
11
|
+
import { canonicalBytes, createCert, didFromPublicKey, generateKeypair, merkleRoot, payloadBytes, verifyAuditBundle, verifyCertSignature, verifyChain, verifyConsistency, verifyInclusion, verifyReceipt, verifySTH, } from '@zanii/core';
|
|
12
|
+
import { runConformance } from '@zanii/conformance';
|
|
13
|
+
import { buildComplianceReport, renderComplianceMarkdown } from '@zanii/compliance';
|
|
14
|
+
import { sealIdentity } from '@zanii/kms';
|
|
15
|
+
import { createPolicyEngine } from '@zanii/policy';
|
|
16
|
+
import { assembleSuccession, buildSuccessionBody, signSuccession, verifySuccession } from '@zanii/succession';
|
|
17
|
+
const readJson = (p) => JSON.parse(readFileSync(p, 'utf8'));
|
|
18
|
+
const hex = (b) => bytesToHex(b);
|
|
19
|
+
export const EXTENDED_HELP = `
|
|
20
|
+
zanii init [--dir .zanii] [--scopes '*'] [--exp 2027-01-01] owner + agent identities and a delegation (sealed if ZANII_PASSPHRASE is set)
|
|
21
|
+
zanii doctor --identity <id> [--delegation <cert>] check keys, delegation, server, clock
|
|
22
|
+
zanii tail <did> [--once] [--interval 5000] stream an agent's new receipts
|
|
23
|
+
zanii diff <bundleA> <bundleB> did the later export only append?
|
|
24
|
+
zanii conform run the protocol conformance vectors against this build
|
|
25
|
+
zanii policy test <policy.json> <actions.json> what a policy would have allowed, denied or held
|
|
26
|
+
zanii rotate --owner <id> --from <id> [--reason rotation] new agent key with signed continuity
|
|
27
|
+
zanii report <bundle.json> compliance report (Markdown)
|
|
28
|
+
zanii offline-verify <bundle.json> verify with no network; prints this verifier's hash`;
|
|
29
|
+
export async function runExtended(cmd, positional, flags, ctx) {
|
|
30
|
+
const emit = (obj, human) => ctx.log(ctx.json ? JSON.stringify(obj, null, 2) : human);
|
|
31
|
+
switch (cmd) {
|
|
32
|
+
case 'init': {
|
|
33
|
+
const dir = String(flags.dir ?? '.zanii');
|
|
34
|
+
if (existsSync(join(dir, 'agent.json')) || existsSync(join(dir, 'agent.sealed.json'))) {
|
|
35
|
+
ctx.log(`error: ${dir} already holds an agent identity; refusing to overwrite`);
|
|
36
|
+
return 1;
|
|
37
|
+
}
|
|
38
|
+
mkdirSync(dir, { recursive: true });
|
|
39
|
+
const owner = generateKeypair();
|
|
40
|
+
const agent = generateKeypair();
|
|
41
|
+
const scopes = String(flags.scopes ?? '*').split(',').map((s) => s.trim()).filter(Boolean);
|
|
42
|
+
const cert = createCert({ issuer: owner.did, subject: agent.did, scopes, exp: String(flags.exp ?? new Date(Date.now() + 365 * 86_400_000).toISOString()) }, owner.privateKey);
|
|
43
|
+
writeFileSync(join(dir, 'owner.json'), JSON.stringify({ did: owner.did, privateKey: hex(owner.privateKey) }, null, 2), { mode: 0o600 });
|
|
44
|
+
const pass = process.env.ZANII_PASSPHRASE;
|
|
45
|
+
if (pass)
|
|
46
|
+
writeFileSync(join(dir, 'agent.sealed.json'), JSON.stringify(sealIdentity({ did: agent.did, privateKey: agent.privateKey }, pass), null, 2), { mode: 0o600 });
|
|
47
|
+
else
|
|
48
|
+
writeFileSync(join(dir, 'agent.json'), JSON.stringify({ did: agent.did, privateKey: hex(agent.privateKey) }, null, 2), { mode: 0o600 });
|
|
49
|
+
writeFileSync(join(dir, 'delegation.json'), JSON.stringify(cert, null, 2));
|
|
50
|
+
emit({ owner: owner.did, agent: agent.did, dir, sealed: !!pass }, [
|
|
51
|
+
`owner ${owner.did}`,
|
|
52
|
+
`agent ${agent.did}${pass ? ' (sealed with ZANII_PASSPHRASE)' : ' (plaintext: set ZANII_PASSPHRASE to seal it)'}`,
|
|
53
|
+
`files ${dir}/owner.json, ${dir}/${pass ? 'agent.sealed.json' : 'agent.json'}, ${dir}/delegation.json`,
|
|
54
|
+
'next move owner.json off this machine; add `zanii doctor --identity ... --delegation ...` to CI',
|
|
55
|
+
].join('\n'));
|
|
56
|
+
return 0;
|
|
57
|
+
}
|
|
58
|
+
case 'doctor': {
|
|
59
|
+
const checks = [];
|
|
60
|
+
let did;
|
|
61
|
+
try {
|
|
62
|
+
const id = readJson(String(flags.identity));
|
|
63
|
+
did = id.did;
|
|
64
|
+
const derived = id.privateKey ? didFromPublicKey(ed25519.getPublicKey(hexToBytes(id.privateKey))) : id.did;
|
|
65
|
+
checks.push({ check: 'identity', ok: derived === id.did, detail: id.privateKey ? 'plaintext key on disk: consider kms sealing or signerd' : 'sealed or public identity' });
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
checks.push({ check: 'identity', ok: false, detail: `cannot read --identity: ${e.message}` });
|
|
69
|
+
}
|
|
70
|
+
if (typeof flags.delegation === 'string' && did) {
|
|
71
|
+
try {
|
|
72
|
+
const raw = readJson(flags.delegation);
|
|
73
|
+
const chain = (Array.isArray(raw) ? raw : [raw]);
|
|
74
|
+
const r = verifyChain(chain, { agentId: did, at: new Date() });
|
|
75
|
+
checks.push({ check: 'delegation', ok: r.ok, detail: r.ok ? `scopes ${r.effectiveScopes?.join(', ')}; expires ${chain.at(-1)?.exp}` : r.error ?? 'invalid' });
|
|
76
|
+
}
|
|
77
|
+
catch (e) {
|
|
78
|
+
checks.push({ check: 'delegation', ok: false, detail: e.message });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
const res = await ctx.fetchImpl(`${ctx.server}/v1/sth`);
|
|
83
|
+
const sth = (await res.json());
|
|
84
|
+
const skew = Math.abs(Date.now() - Date.parse(sth.ts));
|
|
85
|
+
checks.push({ check: 'server', ok: res.ok && verifySTH(sth), detail: `${ctx.server}: tree size ${sth.size}, signed tree head ${verifySTH(sth) ? 'valid' : 'INVALID'}` });
|
|
86
|
+
checks.push({ check: 'clock', ok: skew < 15 * 60_000, detail: `latest tree head is ${Math.round(skew / 1000)} s old` });
|
|
87
|
+
}
|
|
88
|
+
catch (e) {
|
|
89
|
+
checks.push({ check: 'server', ok: false, detail: `${ctx.server} unreachable: ${e.message}` });
|
|
90
|
+
}
|
|
91
|
+
emit(checks, checks.map((c) => `${c.ok ? '✓' : '✘'} ${c.check.padEnd(10)} ${c.detail}`).join('\n'));
|
|
92
|
+
return checks.every((c) => c.ok) ? 0 : 1;
|
|
93
|
+
}
|
|
94
|
+
case 'tail': {
|
|
95
|
+
const did = positional[0];
|
|
96
|
+
if (!did)
|
|
97
|
+
return usage(ctx, 'tail <did>');
|
|
98
|
+
const seen = new Set();
|
|
99
|
+
const poll = async () => {
|
|
100
|
+
const res = await ctx.fetchImpl(`${ctx.server}/v1/recent?limit=100`);
|
|
101
|
+
const { receipts } = (await res.json());
|
|
102
|
+
for (const r of [...receipts].reverse()) {
|
|
103
|
+
const mine = r.receipt.agent_id === did || r.receipt.body?.participants?.includes?.(did);
|
|
104
|
+
const h = r.hash ?? JSON.stringify(r.receipt).slice(0, 64);
|
|
105
|
+
if (!mine || seen.has(h))
|
|
106
|
+
continue;
|
|
107
|
+
seen.add(h);
|
|
108
|
+
ctx.log(`${verifyReceipt(r.receipt).ok ? '✓' : '·'} ${r.receipt.ts ?? r.receipt.body?.ts ?? ''} ${r.receipt.target ?? r.receipt.body?.target ?? r.receipt.type}`);
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
await poll();
|
|
112
|
+
if (flags.once)
|
|
113
|
+
return 0;
|
|
114
|
+
const ms = Number(flags.interval ?? 5000);
|
|
115
|
+
for (;;) {
|
|
116
|
+
await new Promise((r) => setTimeout(r, ms));
|
|
117
|
+
await poll().catch((e) => ctx.log(`(poll failed: ${e.message})`));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
case 'diff': {
|
|
121
|
+
if (positional.length < 2)
|
|
122
|
+
return usage(ctx, 'diff <bundleA> <bundleB>');
|
|
123
|
+
const a = readJson(positional[0]);
|
|
124
|
+
const b = readJson(positional[1]);
|
|
125
|
+
const inB = new Set(b.receipts.map((r) => r.hash));
|
|
126
|
+
const removed = a.receipts.filter((r) => !inB.has(r.hash)).map((r) => r.hash);
|
|
127
|
+
const reordered = !removed.length && a.receipts.some((r, i) => b.receipts[i]?.hash !== r.hash);
|
|
128
|
+
const result = { appendOnly: !removed.length && !reordered, added: b.receipts.length - (a.receipts.length - removed.length), removed, reordered };
|
|
129
|
+
emit(result, result.appendOnly ? `✓ append-only: ${result.added} new receipt(s)` : `✘ NOT append-only: ${removed.length} removed${reordered ? ', reordered' : ''}`);
|
|
130
|
+
return result.appendOnly ? 0 : 1;
|
|
131
|
+
}
|
|
132
|
+
case 'conform': {
|
|
133
|
+
const report = runConformance(coreImplementation);
|
|
134
|
+
emit(report, report.failures.length ? `✘ ${report.failures.length} of ${report.total} vectors failed` : `✓ all ${report.total} conformance vectors pass`);
|
|
135
|
+
return report.failures.length ? 1 : 0;
|
|
136
|
+
}
|
|
137
|
+
case 'policy': {
|
|
138
|
+
if (positional[0] !== 'test' || positional.length < 3)
|
|
139
|
+
return usage(ctx, 'policy test <policy.json> <actions.json>');
|
|
140
|
+
const engine = createPolicyEngine(readJson(positional[1]));
|
|
141
|
+
const actions = readJson(positional[2]);
|
|
142
|
+
const results = actions.map((a) => ({ target: a.target, ...engine.evaluate(a) }));
|
|
143
|
+
const count = (d) => results.filter((r) => r.decision === d).length;
|
|
144
|
+
emit(results, `${count('allow')} allowed · ${count('deny')} denied · ${count('require_approval')} held for approval\n` +
|
|
145
|
+
results.filter((r) => r.decision !== 'allow').map((r) => ` ${r.decision.padEnd(16)} ${r.target} (${r.rule ?? 'default'}: ${r.reason})`).join('\n'));
|
|
146
|
+
return 0;
|
|
147
|
+
}
|
|
148
|
+
case 'rotate': {
|
|
149
|
+
if (typeof flags.owner !== 'string' || typeof flags.from !== 'string')
|
|
150
|
+
return usage(ctx, 'rotate --owner <id> --from <id>');
|
|
151
|
+
const owner = readJson(flags.owner);
|
|
152
|
+
const prev = readJson(flags.from);
|
|
153
|
+
const reason = (flags.reason ?? 'rotation');
|
|
154
|
+
const next = generateKeypair();
|
|
155
|
+
const body = buildSuccessionBody({ predecessor: prev.did, successor: next.did, owner: owner.did, reason, ts: new Date().toISOString(),
|
|
156
|
+
...(reason === 'compromise' ? { compromisedAt: String(flags['compromised-at'] ?? new Date().toISOString()) } : {}) });
|
|
157
|
+
const sigs = [signSuccession(body, owner.did, hexToBytes(owner.privateKey))];
|
|
158
|
+
if (reason !== 'compromise' && prev.privateKey)
|
|
159
|
+
sigs.push(signSuccession(body, prev.did, hexToBytes(prev.privateKey)));
|
|
160
|
+
const succession = assembleSuccession(body, sigs);
|
|
161
|
+
const check = verifySuccession(succession);
|
|
162
|
+
const outDir = ctx.out ?? '.';
|
|
163
|
+
writeFileSync(join(outDir, 'agent.next.json'), JSON.stringify({ did: next.did, privateKey: hex(next.privateKey) }, null, 2), { mode: 0o600 });
|
|
164
|
+
writeFileSync(join(outDir, 'succession.json'), JSON.stringify(succession, null, 2));
|
|
165
|
+
emit({ successor: next.did, check }, `${check.ok ? '✓' : '✘'} ${prev.did.slice(0, 24)}… → ${next.did.slice(0, 24)}… (${reason}${check.cosigned ? ', co-signed by the old key' : ''})\n wrote agent.next.json and succession.json; issue the new agent a delegation, then record the succession`);
|
|
166
|
+
return check.ok ? 0 : 1;
|
|
167
|
+
}
|
|
168
|
+
case 'report': {
|
|
169
|
+
if (!positional[0])
|
|
170
|
+
return usage(ctx, 'report <bundle.json>');
|
|
171
|
+
const md = renderComplianceMarkdown(buildComplianceReport(readJson(positional[0])));
|
|
172
|
+
if (ctx.out)
|
|
173
|
+
writeFileSync(ctx.out, md);
|
|
174
|
+
ctx.log(ctx.out ? `report written to ${ctx.out}` : md);
|
|
175
|
+
return 0;
|
|
176
|
+
}
|
|
177
|
+
case 'offline-verify': {
|
|
178
|
+
if (!positional[0])
|
|
179
|
+
return usage(ctx, 'offline-verify <bundle.json>');
|
|
180
|
+
const report = verifyAuditBundle(readJson(positional[0]));
|
|
181
|
+
const self = createHash('sha256').update(readFileSync(fileURLToPath(import.meta.url))).digest('hex');
|
|
182
|
+
emit({ ok: report.ok, verifier: `sha256:${self}`, report }, `${report.ok ? '✓ PROVEN' : '✘ FAILED'} (${report.stats.receipts} receipts, no network used)\n verifier build sha256:${self}`);
|
|
183
|
+
return report.ok ? 0 : 1;
|
|
184
|
+
}
|
|
185
|
+
default:
|
|
186
|
+
return undefined;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
function usage(ctx, u) {
|
|
190
|
+
ctx.log(`usage: zanii ${u}`);
|
|
191
|
+
return 2;
|
|
192
|
+
}
|
|
193
|
+
/** @zanii/core behind the conformance runner's interface. */
|
|
194
|
+
const coreImplementation = {
|
|
195
|
+
canonicalBytes: (v) => canonicalBytes(v),
|
|
196
|
+
payloadBytes: (v) => payloadBytes(v),
|
|
197
|
+
didFromPrivateKey: (h) => didFromPublicKey(ed25519.getPublicKey(hexToBytes(h))),
|
|
198
|
+
verifyCertSignature: (c) => verifyCertSignature(c),
|
|
199
|
+
verifyChain: (chain, agentId, at) => {
|
|
200
|
+
const r = verifyChain(chain, { agentId, at: new Date(at) });
|
|
201
|
+
return { ok: r.ok, effectiveScopes: r.effectiveScopes };
|
|
202
|
+
},
|
|
203
|
+
verifyReceipt: (r) => verifyReceipt(r).ok,
|
|
204
|
+
merkleRoot: (leaves) => bytesToHex(merkleRoot(leaves.map(hexToBytes))),
|
|
205
|
+
verifyInclusion: (leaf, i, n, proof, root) => verifyInclusion(hexToBytes(leaf), i, n, proof.map(hexToBytes), hexToBytes(root)),
|
|
206
|
+
verifyConsistency: (m, n, a, b, proof) => verifyConsistency(m, n, hexToBytes(a), hexToBytes(b), proof.map(hexToBytes)),
|
|
207
|
+
verifySTH: (s) => verifySTH(s),
|
|
208
|
+
verifyAuditBundle: (b) => verifyAuditBundle(b).ok,
|
|
209
|
+
};
|
|
210
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AA2IjF,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,SAAS,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CA2J1H"}
|
package/dist/index.js
CHANGED
|
@@ -10,6 +10,7 @@ import { computeVerdicts } from '@zanii/custody-verdicts';
|
|
|
10
10
|
import { fetchAndVerifyProof } from '@zanii/sdk';
|
|
11
11
|
import { fetchSubjectHistory } from '@zanii/subject';
|
|
12
12
|
import { proveAbsence } from '@zanii/train';
|
|
13
|
+
import { EXTENDED_HELP, runExtended } from './commands.js';
|
|
13
14
|
const hex = (b) => Buffer.from(b).toString('hex');
|
|
14
15
|
const unhex = (s) => new Uint8Array(Buffer.from(s, 'hex'));
|
|
15
16
|
function asPayload(p) {
|
|
@@ -111,7 +112,7 @@ const HELP = `zanii: verifiable identity & proof-of-action for AI agents
|
|
|
111
112
|
(8 custody verdict rows; pass --jurisdiction, --declared-subprocessors, --trusted-signers)
|
|
112
113
|
zanii audit <tag> --bundle <file> offline audit of a bundle: zero network calls
|
|
113
114
|
zanii stats [--server <url>] ledger counters
|
|
114
|
-
zanii agent <did> [--server <url>] an agent's trust summary
|
|
115
|
+
zanii agent <did> [--server <url>] an agent's trust summary${EXTENDED_HELP}
|
|
115
116
|
|
|
116
117
|
Global: --server (or ZANII_SERVER); default https://ledger.zanii.agency. --json for raw output.`;
|
|
117
118
|
export async function run(argv, opts = {}) {
|
|
@@ -291,9 +292,13 @@ export async function run(argv, opts = {}) {
|
|
|
291
292
|
case undefined:
|
|
292
293
|
ctx.log(HELP);
|
|
293
294
|
return 0;
|
|
294
|
-
default:
|
|
295
|
+
default: {
|
|
296
|
+
const code = await runExtended(cmd, positional, flags, { ...ctx, server, json, out });
|
|
297
|
+
if (code !== undefined)
|
|
298
|
+
return code;
|
|
295
299
|
ctx.log(`unknown command '${cmd}'\n\n${HELP}`);
|
|
296
300
|
return 2;
|
|
301
|
+
}
|
|
297
302
|
}
|
|
298
303
|
}
|
|
299
304
|
catch (e) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zanii/cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"description": "The Zanii command line: generate identities, sign delegations, record + verify proofs, and export audit bundles, no code required.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://ledger.zanii.agency",
|
|
@@ -29,18 +29,23 @@
|
|
|
29
29
|
"node": ">=18"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@
|
|
32
|
+
"@noble/curves": "^1.8.1",
|
|
33
|
+
"@noble/hashes": "^1.7.1",
|
|
34
|
+
"@zanii/core": "^0.5.4",
|
|
33
35
|
"@zanii/custody-verdicts": "^0.2.1",
|
|
34
|
-
"@zanii/
|
|
35
|
-
"@zanii/
|
|
36
|
-
"@zanii/minimization": "^0.1.2",
|
|
36
|
+
"@zanii/sdk": "^0.5.3",
|
|
37
|
+
"@zanii/subject": "^0.1.2",
|
|
37
38
|
"@zanii/train": "^0.2.1",
|
|
39
|
+
"@zanii/minimization": "^0.1.2",
|
|
40
|
+
"@zanii/compliance": "^0.2.3",
|
|
41
|
+
"@zanii/residency": "^0.2.1",
|
|
38
42
|
"@zanii/subprocessor": "^0.2.1",
|
|
39
|
-
"@zanii/
|
|
43
|
+
"@zanii/conformance": "^0.2.0",
|
|
44
|
+
"@zanii/kms": "^0.1.0",
|
|
45
|
+
"@zanii/policy": "^0.1.2",
|
|
46
|
+
"@zanii/succession": "^0.1.1"
|
|
40
47
|
},
|
|
41
48
|
"devDependencies": {
|
|
42
|
-
"@noble/curves": "^1.8.1",
|
|
43
|
-
"@noble/hashes": "^1.7.1",
|
|
44
49
|
"@types/node": "^26.1.0",
|
|
45
50
|
"@zanii/data-custody": "^0.1.0",
|
|
46
51
|
"typescript": "^5.8.2",
|
package/src/commands.ts
ADDED
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The newer CLI commands: init, doctor, tail, diff, conform, policy test, rotate, report and
|
|
3
|
+
* offline-verify. Each returns an exit code, or undefined when the command is not one of these.
|
|
4
|
+
*/
|
|
5
|
+
import { createHash } from 'node:crypto';
|
|
6
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { fileURLToPath } from 'node:url';
|
|
9
|
+
import { ed25519 } from '@noble/curves/ed25519';
|
|
10
|
+
import { bytesToHex, hexToBytes } from '@noble/hashes/utils';
|
|
11
|
+
import {
|
|
12
|
+
canonicalBytes, createCert, didFromPublicKey, generateKeypair, merkleRoot, payloadBytes, verifyAuditBundle, verifyCertSignature, verifyChain,
|
|
13
|
+
verifyConsistency, verifyInclusion, verifyReceipt, verifySTH, type AuditBundle, type DelegationCert, type Receipt, type SignedTreeHead,
|
|
14
|
+
} from '@zanii/core';
|
|
15
|
+
import { runConformance, type Implementation } from '@zanii/conformance';
|
|
16
|
+
import { buildComplianceReport, renderComplianceMarkdown } from '@zanii/compliance';
|
|
17
|
+
import { sealIdentity } from '@zanii/kms';
|
|
18
|
+
import { createPolicyEngine, type Policy } from '@zanii/policy';
|
|
19
|
+
import { assembleSuccession, buildSuccessionBody, signSuccession, verifySuccession } from '@zanii/succession';
|
|
20
|
+
|
|
21
|
+
type FetchLike = (input: string, init?: RequestInit) => Promise<Response>;
|
|
22
|
+
interface Ctx {
|
|
23
|
+
log: (s: string) => void;
|
|
24
|
+
fetchImpl: FetchLike;
|
|
25
|
+
server: string;
|
|
26
|
+
json: boolean;
|
|
27
|
+
out?: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const readJson = (p: string) => JSON.parse(readFileSync(p, 'utf8'));
|
|
31
|
+
const hex = (b: Uint8Array) => bytesToHex(b);
|
|
32
|
+
|
|
33
|
+
export const EXTENDED_HELP = `
|
|
34
|
+
zanii init [--dir .zanii] [--scopes '*'] [--exp 2027-01-01] owner + agent identities and a delegation (sealed if ZANII_PASSPHRASE is set)
|
|
35
|
+
zanii doctor --identity <id> [--delegation <cert>] check keys, delegation, server, clock
|
|
36
|
+
zanii tail <did> [--once] [--interval 5000] stream an agent's new receipts
|
|
37
|
+
zanii diff <bundleA> <bundleB> did the later export only append?
|
|
38
|
+
zanii conform run the protocol conformance vectors against this build
|
|
39
|
+
zanii policy test <policy.json> <actions.json> what a policy would have allowed, denied or held
|
|
40
|
+
zanii rotate --owner <id> --from <id> [--reason rotation] new agent key with signed continuity
|
|
41
|
+
zanii report <bundle.json> compliance report (Markdown)
|
|
42
|
+
zanii offline-verify <bundle.json> verify with no network; prints this verifier's hash`;
|
|
43
|
+
|
|
44
|
+
export async function runExtended(cmd: string | undefined, positional: string[], flags: Record<string, string | boolean>, ctx: Ctx): Promise<number | undefined> {
|
|
45
|
+
const emit = (obj: unknown, human: string) => ctx.log(ctx.json ? JSON.stringify(obj, null, 2) : human);
|
|
46
|
+
switch (cmd) {
|
|
47
|
+
case 'init': {
|
|
48
|
+
const dir = String(flags.dir ?? '.zanii');
|
|
49
|
+
if (existsSync(join(dir, 'agent.json')) || existsSync(join(dir, 'agent.sealed.json'))) {
|
|
50
|
+
ctx.log(`error: ${dir} already holds an agent identity; refusing to overwrite`);
|
|
51
|
+
return 1;
|
|
52
|
+
}
|
|
53
|
+
mkdirSync(dir, { recursive: true });
|
|
54
|
+
const owner = generateKeypair();
|
|
55
|
+
const agent = generateKeypair();
|
|
56
|
+
const scopes = String(flags.scopes ?? '*').split(',').map((s) => s.trim()).filter(Boolean);
|
|
57
|
+
const cert = createCert({ issuer: owner.did, subject: agent.did, scopes, exp: String(flags.exp ?? new Date(Date.now() + 365 * 86_400_000).toISOString()) }, owner.privateKey);
|
|
58
|
+
writeFileSync(join(dir, 'owner.json'), JSON.stringify({ did: owner.did, privateKey: hex(owner.privateKey) }, null, 2), { mode: 0o600 });
|
|
59
|
+
const pass = process.env.ZANII_PASSPHRASE;
|
|
60
|
+
if (pass) writeFileSync(join(dir, 'agent.sealed.json'), JSON.stringify(sealIdentity({ did: agent.did, privateKey: agent.privateKey }, pass), null, 2), { mode: 0o600 });
|
|
61
|
+
else writeFileSync(join(dir, 'agent.json'), JSON.stringify({ did: agent.did, privateKey: hex(agent.privateKey) }, null, 2), { mode: 0o600 });
|
|
62
|
+
writeFileSync(join(dir, 'delegation.json'), JSON.stringify(cert, null, 2));
|
|
63
|
+
emit({ owner: owner.did, agent: agent.did, dir, sealed: !!pass }, [
|
|
64
|
+
`owner ${owner.did}`,
|
|
65
|
+
`agent ${agent.did}${pass ? ' (sealed with ZANII_PASSPHRASE)' : ' (plaintext: set ZANII_PASSPHRASE to seal it)'}`,
|
|
66
|
+
`files ${dir}/owner.json, ${dir}/${pass ? 'agent.sealed.json' : 'agent.json'}, ${dir}/delegation.json`,
|
|
67
|
+
'next move owner.json off this machine; add `zanii doctor --identity ... --delegation ...` to CI',
|
|
68
|
+
].join('\n'));
|
|
69
|
+
return 0;
|
|
70
|
+
}
|
|
71
|
+
case 'doctor': {
|
|
72
|
+
const checks: Array<{ check: string; ok: boolean; detail: string }> = [];
|
|
73
|
+
let did: string | undefined;
|
|
74
|
+
try {
|
|
75
|
+
const id = readJson(String(flags.identity));
|
|
76
|
+
did = id.did;
|
|
77
|
+
const derived = id.privateKey ? didFromPublicKey(ed25519.getPublicKey(hexToBytes(id.privateKey))) : id.did;
|
|
78
|
+
checks.push({ check: 'identity', ok: derived === id.did, detail: id.privateKey ? 'plaintext key on disk: consider kms sealing or signerd' : 'sealed or public identity' });
|
|
79
|
+
} catch (e) {
|
|
80
|
+
checks.push({ check: 'identity', ok: false, detail: `cannot read --identity: ${(e as Error).message}` });
|
|
81
|
+
}
|
|
82
|
+
if (typeof flags.delegation === 'string' && did) {
|
|
83
|
+
try {
|
|
84
|
+
const raw = readJson(flags.delegation);
|
|
85
|
+
const chain = (Array.isArray(raw) ? raw : [raw]) as DelegationCert[];
|
|
86
|
+
const r = verifyChain(chain, { agentId: did, at: new Date() });
|
|
87
|
+
checks.push({ check: 'delegation', ok: r.ok, detail: r.ok ? `scopes ${r.effectiveScopes?.join(', ')}; expires ${chain.at(-1)?.exp}` : r.error ?? 'invalid' });
|
|
88
|
+
} catch (e) {
|
|
89
|
+
checks.push({ check: 'delegation', ok: false, detail: (e as Error).message });
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
const res = await ctx.fetchImpl(`${ctx.server}/v1/sth`);
|
|
94
|
+
const sth = (await res.json()) as SignedTreeHead;
|
|
95
|
+
const skew = Math.abs(Date.now() - Date.parse(sth.ts));
|
|
96
|
+
checks.push({ check: 'server', ok: res.ok && verifySTH(sth), detail: `${ctx.server}: tree size ${sth.size}, signed tree head ${verifySTH(sth) ? 'valid' : 'INVALID'}` });
|
|
97
|
+
checks.push({ check: 'clock', ok: skew < 15 * 60_000, detail: `latest tree head is ${Math.round(skew / 1000)} s old` });
|
|
98
|
+
} catch (e) {
|
|
99
|
+
checks.push({ check: 'server', ok: false, detail: `${ctx.server} unreachable: ${(e as Error).message}` });
|
|
100
|
+
}
|
|
101
|
+
emit(checks, checks.map((c) => `${c.ok ? '✓' : '✘'} ${c.check.padEnd(10)} ${c.detail}`).join('\n'));
|
|
102
|
+
return checks.every((c) => c.ok) ? 0 : 1;
|
|
103
|
+
}
|
|
104
|
+
case 'tail': {
|
|
105
|
+
const did = positional[0];
|
|
106
|
+
if (!did) return usage(ctx, 'tail <did>');
|
|
107
|
+
const seen = new Set<string>();
|
|
108
|
+
const poll = async () => {
|
|
109
|
+
const res = await ctx.fetchImpl(`${ctx.server}/v1/recent?limit=100`);
|
|
110
|
+
const { receipts } = (await res.json()) as { receipts: Array<{ receipt: Receipt & { body?: any }; hash?: string }> };
|
|
111
|
+
for (const r of [...receipts].reverse()) {
|
|
112
|
+
const mine = r.receipt.agent_id === did || r.receipt.body?.participants?.includes?.(did);
|
|
113
|
+
const h = r.hash ?? JSON.stringify(r.receipt).slice(0, 64);
|
|
114
|
+
if (!mine || seen.has(h)) continue;
|
|
115
|
+
seen.add(h);
|
|
116
|
+
ctx.log(`${verifyReceipt(r.receipt).ok ? '✓' : '·'} ${r.receipt.ts ?? r.receipt.body?.ts ?? ''} ${r.receipt.target ?? r.receipt.body?.target ?? (r.receipt as { type?: string }).type}`);
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
await poll();
|
|
120
|
+
if (flags.once) return 0;
|
|
121
|
+
const ms = Number(flags.interval ?? 5000);
|
|
122
|
+
for (;;) {
|
|
123
|
+
await new Promise((r) => setTimeout(r, ms));
|
|
124
|
+
await poll().catch((e) => ctx.log(`(poll failed: ${(e as Error).message})`));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
case 'diff': {
|
|
128
|
+
if (positional.length < 2) return usage(ctx, 'diff <bundleA> <bundleB>');
|
|
129
|
+
const a = readJson(positional[0]!) as AuditBundle;
|
|
130
|
+
const b = readJson(positional[1]!) as AuditBundle;
|
|
131
|
+
const inB = new Set(b.receipts.map((r) => r.hash));
|
|
132
|
+
const removed = a.receipts.filter((r) => !inB.has(r.hash)).map((r) => r.hash);
|
|
133
|
+
const reordered = !removed.length && a.receipts.some((r, i) => b.receipts[i]?.hash !== r.hash);
|
|
134
|
+
const result = { appendOnly: !removed.length && !reordered, added: b.receipts.length - (a.receipts.length - removed.length), removed, reordered };
|
|
135
|
+
emit(result, result.appendOnly ? `✓ append-only: ${result.added} new receipt(s)` : `✘ NOT append-only: ${removed.length} removed${reordered ? ', reordered' : ''}`);
|
|
136
|
+
return result.appendOnly ? 0 : 1;
|
|
137
|
+
}
|
|
138
|
+
case 'conform': {
|
|
139
|
+
const report = runConformance(coreImplementation);
|
|
140
|
+
emit(report, report.failures.length ? `✘ ${report.failures.length} of ${report.total} vectors failed` : `✓ all ${report.total} conformance vectors pass`);
|
|
141
|
+
return report.failures.length ? 1 : 0;
|
|
142
|
+
}
|
|
143
|
+
case 'policy': {
|
|
144
|
+
if (positional[0] !== 'test' || positional.length < 3) return usage(ctx, 'policy test <policy.json> <actions.json>');
|
|
145
|
+
const engine = createPolicyEngine(readJson(positional[1]!) as Policy);
|
|
146
|
+
const actions = readJson(positional[2]!) as Array<{ target: string; payload?: Record<string, unknown>; risk?: any; key?: string; now?: number }>;
|
|
147
|
+
const results = actions.map((a) => ({ target: a.target, ...engine.evaluate(a) }));
|
|
148
|
+
const count = (d: string) => results.filter((r) => r.decision === d).length;
|
|
149
|
+
emit(results, `${count('allow')} allowed · ${count('deny')} denied · ${count('require_approval')} held for approval\n` +
|
|
150
|
+
results.filter((r) => r.decision !== 'allow').map((r) => ` ${r.decision.padEnd(16)} ${r.target} (${r.rule ?? 'default'}: ${r.reason})`).join('\n'));
|
|
151
|
+
return 0;
|
|
152
|
+
}
|
|
153
|
+
case 'rotate': {
|
|
154
|
+
if (typeof flags.owner !== 'string' || typeof flags.from !== 'string') return usage(ctx, 'rotate --owner <id> --from <id>');
|
|
155
|
+
const owner = readJson(flags.owner);
|
|
156
|
+
const prev = readJson(flags.from);
|
|
157
|
+
const reason = (flags.reason ?? 'rotation') as 'rotation' | 'compromise' | 'retirement';
|
|
158
|
+
const next = generateKeypair();
|
|
159
|
+
const body = buildSuccessionBody({ predecessor: prev.did, successor: next.did, owner: owner.did, reason, ts: new Date().toISOString(),
|
|
160
|
+
...(reason === 'compromise' ? { compromisedAt: String(flags['compromised-at'] ?? new Date().toISOString()) } : {}) });
|
|
161
|
+
const sigs = [signSuccession(body, owner.did, hexToBytes(owner.privateKey))];
|
|
162
|
+
if (reason !== 'compromise' && prev.privateKey) sigs.push(signSuccession(body, prev.did, hexToBytes(prev.privateKey)));
|
|
163
|
+
const succession = assembleSuccession(body, sigs);
|
|
164
|
+
const check = verifySuccession(succession);
|
|
165
|
+
const outDir = ctx.out ?? '.';
|
|
166
|
+
writeFileSync(join(outDir, 'agent.next.json'), JSON.stringify({ did: next.did, privateKey: hex(next.privateKey) }, null, 2), { mode: 0o600 });
|
|
167
|
+
writeFileSync(join(outDir, 'succession.json'), JSON.stringify(succession, null, 2));
|
|
168
|
+
emit({ successor: next.did, check }, `${check.ok ? '✓' : '✘'} ${prev.did.slice(0, 24)}… → ${next.did.slice(0, 24)}… (${reason}${check.cosigned ? ', co-signed by the old key' : ''})\n wrote agent.next.json and succession.json; issue the new agent a delegation, then record the succession`);
|
|
169
|
+
return check.ok ? 0 : 1;
|
|
170
|
+
}
|
|
171
|
+
case 'report': {
|
|
172
|
+
if (!positional[0]) return usage(ctx, 'report <bundle.json>');
|
|
173
|
+
const md = renderComplianceMarkdown(buildComplianceReport(readJson(positional[0]) as AuditBundle));
|
|
174
|
+
if (ctx.out) writeFileSync(ctx.out, md);
|
|
175
|
+
ctx.log(ctx.out ? `report written to ${ctx.out}` : md);
|
|
176
|
+
return 0;
|
|
177
|
+
}
|
|
178
|
+
case 'offline-verify': {
|
|
179
|
+
if (!positional[0]) return usage(ctx, 'offline-verify <bundle.json>');
|
|
180
|
+
const report = verifyAuditBundle(readJson(positional[0]) as AuditBundle);
|
|
181
|
+
const self = createHash('sha256').update(readFileSync(fileURLToPath(import.meta.url))).digest('hex');
|
|
182
|
+
emit({ ok: report.ok, verifier: `sha256:${self}`, report }, `${report.ok ? '✓ PROVEN' : '✘ FAILED'} (${report.stats.receipts} receipts, no network used)\n verifier build sha256:${self}`);
|
|
183
|
+
return report.ok ? 0 : 1;
|
|
184
|
+
}
|
|
185
|
+
default:
|
|
186
|
+
return undefined;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
function usage(ctx: Ctx, u: string): number {
|
|
191
|
+
ctx.log(`usage: zanii ${u}`);
|
|
192
|
+
return 2;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/** @zanii/core behind the conformance runner's interface. */
|
|
196
|
+
const coreImplementation: Implementation = {
|
|
197
|
+
canonicalBytes: (v) => canonicalBytes(v),
|
|
198
|
+
payloadBytes: (v) => payloadBytes(v),
|
|
199
|
+
didFromPrivateKey: (h) => didFromPublicKey(ed25519.getPublicKey(hexToBytes(h))),
|
|
200
|
+
verifyCertSignature: (c) => verifyCertSignature(c as DelegationCert),
|
|
201
|
+
verifyChain: (chain, agentId, at) => {
|
|
202
|
+
const r = verifyChain(chain as DelegationCert[], { agentId, at: new Date(at) });
|
|
203
|
+
return { ok: r.ok, effectiveScopes: r.effectiveScopes };
|
|
204
|
+
},
|
|
205
|
+
verifyReceipt: (r) => verifyReceipt(r as Receipt).ok,
|
|
206
|
+
merkleRoot: (leaves) => bytesToHex(merkleRoot(leaves.map(hexToBytes))),
|
|
207
|
+
verifyInclusion: (leaf, i, n, proof, root) => verifyInclusion(hexToBytes(leaf), i, n, proof.map(hexToBytes), hexToBytes(root)),
|
|
208
|
+
verifyConsistency: (m, n, a, b, proof) => verifyConsistency(m, n, hexToBytes(a), hexToBytes(b), proof.map(hexToBytes)),
|
|
209
|
+
verifySTH: (s) => verifySTH(s as SignedTreeHead),
|
|
210
|
+
verifyAuditBundle: (b) => verifyAuditBundle(b as AuditBundle).ok,
|
|
211
|
+
};
|
package/src/index.ts
CHANGED
|
@@ -10,6 +10,7 @@ import { computeVerdicts, type ExtraEvidence, type TrainingEvidence, type Covera
|
|
|
10
10
|
import { fetchAndVerifyProof } from '@zanii/sdk';
|
|
11
11
|
import { fetchSubjectHistory, type SubjectHistory } from '@zanii/subject';
|
|
12
12
|
import { proveAbsence, type TrainingManifest } from '@zanii/train';
|
|
13
|
+
import { EXTENDED_HELP, runExtended } from './commands.js';
|
|
13
14
|
|
|
14
15
|
export type FetchLike = (input: string, init?: RequestInit) => Promise<Response>;
|
|
15
16
|
|
|
@@ -146,7 +147,7 @@ const HELP = `zanii: verifiable identity & proof-of-action for AI agents
|
|
|
146
147
|
(8 custody verdict rows; pass --jurisdiction, --declared-subprocessors, --trusted-signers)
|
|
147
148
|
zanii audit <tag> --bundle <file> offline audit of a bundle: zero network calls
|
|
148
149
|
zanii stats [--server <url>] ledger counters
|
|
149
|
-
zanii agent <did> [--server <url>] an agent's trust summary
|
|
150
|
+
zanii agent <did> [--server <url>] an agent's trust summary${EXTENDED_HELP}
|
|
150
151
|
|
|
151
152
|
Global: --server (or ZANII_SERVER); default https://ledger.zanii.agency. --json for raw output.`;
|
|
152
153
|
|
|
@@ -294,9 +295,12 @@ export async function run(argv: string[], opts: { log?: (s: string) => void; fet
|
|
|
294
295
|
case 'help': case '--help': case '-h': case undefined:
|
|
295
296
|
ctx.log(HELP);
|
|
296
297
|
return 0;
|
|
297
|
-
default:
|
|
298
|
+
default: {
|
|
299
|
+
const code = await runExtended(cmd, positional, flags, { ...ctx, server, json, out });
|
|
300
|
+
if (code !== undefined) return code;
|
|
298
301
|
ctx.log(`unknown command '${cmd}'\n\n${HELP}`);
|
|
299
302
|
return 2;
|
|
303
|
+
}
|
|
300
304
|
}
|
|
301
305
|
} catch (e) {
|
|
302
306
|
ctx.log(`error: ${String(e instanceof Error ? e.message : e)}`);
|