@oxdeai/cli 0.2.4 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,25 +1,36 @@
1
1
  {
2
2
  "name": "@oxdeai/cli",
3
- "version": "0.2.4",
4
- "description": "Protocol-focused CLI tooling for OxDeAI artifact build/verify/replay workflows",
3
+ "version": "0.3.1",
4
+ "description": "Protocol-focused CLI tooling for OxDeAI artifact build, verification, and inspection workflows",
5
+ "license": "Apache-2.0",
5
6
  "type": "module",
6
7
  "bin": {
7
8
  "oxdeai": "dist/main.js"
8
9
  },
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "git+https://github.com/oxdeai/oxdeai.git",
13
+ "directory": "packages/cli"
14
+ },
15
+ "homepage": "https://github.com/oxdeai/oxdeai",
16
+ "bugs": {
17
+ "url": "https://github.com/oxdeai/oxdeai/issues"
18
+ },
9
19
  "files": [
10
20
  "dist",
21
+ "!dist/**/*.test.*",
11
22
  "README.md",
12
- "CHANGELOG.md"
23
+ "CHANGELOG.md",
24
+ "LICENSE"
13
25
  ],
14
26
  "dependencies": {
15
- "@oxdeai/core": "^1.3.0"
27
+ "@oxdeai/core": "2.0.1"
16
28
  },
17
29
  "scripts": {
18
30
  "typecheck": "tsc -p tsconfig.json --noEmit",
19
31
  "build": "rm -rf dist && tsc -p tsconfig.json && node scripts/postbuild.mjs",
20
32
  "cli": "node dist/main.js",
21
33
  "start": "node dist/main.js",
22
- "prepack": "pnpm build",
23
34
  "test": "pnpm build && node --test \"dist/**/*.test.js\""
24
35
  }
25
- }
36
+ }
@@ -1 +0,0 @@
1
- export {};
package/dist/cli.test.js DELETED
@@ -1,335 +0,0 @@
1
- import test from "node:test";
2
- import assert from "node:assert/strict";
3
- import { mkdtemp, readFile, writeFile } from "node:fs/promises";
4
- import { join } from "node:path";
5
- import { tmpdir } from "node:os";
6
- import { PolicyEngine, encodeCanonicalState, encodeEnvelope } from "@oxdeai/core";
7
- import { runCli } from "./main.js";
8
- function baseState() {
9
- return {
10
- policy_version: "v1",
11
- period_id: "2026-03",
12
- kill_switch: { global: false, agents: {} },
13
- allowlists: {
14
- action_types: ["PROVISION"],
15
- assets: ["a100"],
16
- targets: ["us-east-1"]
17
- },
18
- budget: {
19
- budget_limit: { "agent-1": 1000000n },
20
- spent_in_period: { "agent-1": 0n }
21
- },
22
- max_amount_per_action: { "agent-1": 1000000n },
23
- velocity: { config: { window_seconds: 60, max_actions: 10 }, counters: {} },
24
- replay: { window_seconds: 3600, max_nonces_per_agent: 256, nonces: {} },
25
- concurrency: { max_concurrent: { "agent-1": 4 }, active: {}, active_auths: {} },
26
- recursion: { max_depth: { "agent-1": 5 } },
27
- tool_limits: { window_seconds: 60, max_calls: { "agent-1": 100 }, max_calls_by_tool: {}, calls: {} }
28
- };
29
- }
30
- function jsonWithBigInt(v) {
31
- return JSON.stringify(v, (_k, x) => (typeof x === "bigint" ? `${x.toString()}n` : x), 2);
32
- }
33
- async function setup() {
34
- const dir = await mkdtemp(join(tmpdir(), "oxdeai-cli-test-"));
35
- const policyFile = join(dir, "policy.json");
36
- const stateFile = join(dir, "state.json");
37
- const auditFile = join(dir, "audit.ndjson");
38
- await writeFile(policyFile, jsonWithBigInt(baseState()), "utf8");
39
- return { dir, policyFile, stateFile, auditFile };
40
- }
41
- function ioCapture(now = 1_770_000_000) {
42
- const out = [];
43
- const err = [];
44
- return {
45
- out,
46
- err,
47
- io: {
48
- out: (line) => out.push(line),
49
- err: (line) => err.push(line),
50
- now: () => now
51
- }
52
- };
53
- }
54
- test("init writes state and clears audit", async () => {
55
- const { policyFile, stateFile, auditFile } = await setup();
56
- await writeFile(auditFile, "{\"junk\":1}\n", "utf8");
57
- const cap = ioCapture();
58
- const code = await runCli(["init", "--file", policyFile, "--state", stateFile, "--audit", auditFile, "--json"], cap.io);
59
- assert.equal(code, 0);
60
- const stateText = await readFile(stateFile, "utf8");
61
- assert.ok(stateText.length > 0);
62
- const auditText = await readFile(auditFile, "utf8");
63
- assert.equal(auditText, "");
64
- assert.equal(cap.err.length, 0);
65
- });
66
- test("help and version behave like a normal CLI", async () => {
67
- const cap = ioCapture();
68
- assert.equal(await runCli(["--help"], cap.io), 0);
69
- assert.match(cap.out[0] ?? "", /oxdeai CLI/);
70
- cap.out.length = 0;
71
- assert.equal(await runCli(["help", "verify"], cap.io), 0);
72
- assert.match(cap.out[0] ?? "", /oxdeai verify --kind/);
73
- cap.out.length = 0;
74
- assert.equal(await runCli(["verify", "--help"], cap.io), 0);
75
- assert.match(cap.out[0] ?? "", /oxdeai verify --kind/);
76
- cap.out.length = 0;
77
- assert.equal(await runCli(["--version"], cap.io), 0);
78
- assert.match(cap.out[0] ?? "", /^\d+\.\d+\.\d+$/);
79
- });
80
- test("unknown top-level flag returns usage error", async () => {
81
- const cap = ioCapture();
82
- const code = await runCli(["--wat"], cap.io);
83
- assert.equal(code, 2);
84
- assert.match(cap.err[0] ?? "", /Unknown flag/);
85
- assert.match(cap.err[1] ?? "", /oxdeai CLI/);
86
- });
87
- test("launch allow path mutates state and appends audit", async () => {
88
- const { policyFile, stateFile, auditFile } = await setup();
89
- const cap = ioCapture();
90
- await runCli(["init", "--file", policyFile, "--state", stateFile, "--audit", auditFile], cap.io);
91
- const code = await runCli(["launch", "PROVISION", "320", "us-east-1", "--agent", "agent-1", "--nonce", "42", "--state", stateFile, "--audit", auditFile, "--json"], cap.io);
92
- assert.equal(code, 0);
93
- const latest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
94
- assert.equal(latest.decision, "ALLOW");
95
- assert.equal(typeof latest.authorization_id, "string");
96
- const stateText = await readFile(stateFile, "utf8");
97
- assert.ok(stateText.includes("\"spent_in_period\":{\"agent-1\":\"320n\"}"));
98
- const auditText = await readFile(auditFile, "utf8");
99
- assert.ok(auditText.trim().split("\n").length >= 3);
100
- });
101
- test("launch deny path keeps state unchanged", async () => {
102
- const { policyFile, stateFile, auditFile } = await setup();
103
- const denyState = baseState();
104
- denyState.kill_switch.global = true;
105
- await writeFile(policyFile, jsonWithBigInt(denyState), "utf8");
106
- const cap = ioCapture();
107
- await runCli(["init", "--file", policyFile, "--state", stateFile, "--audit", auditFile], cap.io);
108
- const before = await readFile(stateFile, "utf8");
109
- const code = await runCli(["launch", "PROVISION", "320", "us-east-1", "--agent", "agent-1", "--nonce", "77", "--state", stateFile, "--audit", auditFile, "--json"], cap.io);
110
- assert.equal(code, 0);
111
- const latest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
112
- assert.equal(latest.decision, "DENY");
113
- const after = await readFile(stateFile, "utf8");
114
- assert.equal(after, before);
115
- });
116
- test("audit command reports verify=true on valid chain", async () => {
117
- const { policyFile, stateFile, auditFile } = await setup();
118
- const cap = ioCapture();
119
- await runCli(["init", "--file", policyFile, "--state", stateFile, "--audit", auditFile], cap.io);
120
- await runCli(["launch", "PROVISION", "100", "us-east-1", "--agent", "agent-1", "--nonce", "9", "--state", stateFile, "--audit", auditFile], cap.io);
121
- const code = await runCli(["audit", "--audit", auditFile, "--json"], cap.io);
122
- assert.equal(code, 0);
123
- const latest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
124
- assert.equal(latest.verify, true);
125
- assert.equal(Array.isArray(latest.events), true);
126
- });
127
- test("state command prints valid json state", async () => {
128
- const { policyFile, stateFile, auditFile } = await setup();
129
- const cap = ioCapture();
130
- await runCli(["init", "--file", policyFile, "--state", stateFile, "--audit", auditFile], cap.io);
131
- const code = await runCli(["state", "--state", stateFile, "--json"], cap.io);
132
- assert.equal(code, 0);
133
- const latest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
134
- assert.equal(latest.policy_version, "v1");
135
- assert.ok(latest.velocity?.config);
136
- });
137
- test("verify-audit returns strict result for current audit file", async () => {
138
- const { policyFile, stateFile, auditFile } = await setup();
139
- const cap = ioCapture();
140
- await runCli(["init", "--file", policyFile, "--state", stateFile, "--audit", auditFile], cap.io);
141
- await runCli(["launch", "PROVISION", "100", "us-east-1", "--agent", "agent-1", "--nonce", "11", "--state", stateFile, "--audit", auditFile], cap.io);
142
- const code = await runCli(["verify-audit", "--audit", auditFile, "--json"], cap.io);
143
- assert.equal(code, 3);
144
- const latest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
145
- assert.equal(typeof latest.status, "string");
146
- assert.equal(latest.status, "inconclusive");
147
- assert.equal(Array.isArray(latest.violations), true);
148
- });
149
- test("snapshot-hash returns policyId and stateHash", async () => {
150
- const { policyFile, stateFile, auditFile } = await setup();
151
- const cap = ioCapture();
152
- await runCli(["init", "--file", policyFile, "--state", stateFile, "--audit", auditFile], cap.io);
153
- const code = await runCli(["snapshot-hash", "--state", stateFile, "--json"], cap.io);
154
- assert.equal(code, 0);
155
- const latest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
156
- assert.equal(typeof latest.policyId, "string");
157
- assert.equal(typeof latest.stateHash, "string");
158
- assert.equal(latest.status, "ok");
159
- });
160
- test("verify-envelope reads file and verifies", async () => {
161
- const { policyFile, stateFile, auditFile, dir } = await setup();
162
- const cap = ioCapture(1_770_000_123);
163
- await runCli(["init", "--file", policyFile, "--state", stateFile, "--audit", auditFile], cap.io);
164
- await runCli(["launch", "PROVISION", "100", "us-east-1", "--agent", "agent-1", "--nonce", "12", "--state", stateFile, "--audit", auditFile], cap.io);
165
- const state = JSON.parse(await readFile(stateFile, "utf8"), (_k, v) => {
166
- if (typeof v === "string" && /^-?\d+n$/.test(v))
167
- return BigInt(v.slice(0, -1));
168
- return v;
169
- });
170
- const events = (await readFile(auditFile, "utf8"))
171
- .split("\n")
172
- .map((l) => l.trim())
173
- .filter(Boolean)
174
- .map((line) => JSON.parse(line));
175
- const engine = new PolicyEngine({
176
- policy_version: state.policy_version,
177
- engine_secret: "dev-secret",
178
- authorization_ttl_seconds: 120
179
- });
180
- const snapshotBytes = encodeCanonicalState(engine.exportState(state));
181
- const envelope = encodeEnvelope({ formatVersion: 1, snapshot: snapshotBytes, events });
182
- const envelopePath = join(dir, "envelope.bin");
183
- await writeFile(envelopePath, Buffer.from(envelope));
184
- const code = await runCli(["verify-envelope", envelopePath, "--json"], cap.io);
185
- assert.equal(code, 3);
186
- const latest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
187
- assert.equal(typeof latest.status, "string");
188
- assert.equal(latest.status, "inconclusive");
189
- assert.equal(Array.isArray(latest.violations), true);
190
- });
191
- test("make-envelope writes envelope file that verify-envelope accepts", async () => {
192
- const { policyFile, stateFile, auditFile, dir } = await setup();
193
- const cap = ioCapture(1_770_000_222);
194
- await runCli(["init", "--file", policyFile, "--state", stateFile, "--audit", auditFile], cap.io);
195
- await runCli(["launch", "PROVISION", "100", "us-east-1", "--agent", "agent-1", "--nonce", "13", "--state", stateFile, "--audit", auditFile], cap.io);
196
- const envelopePath = join(dir, "made-envelope.bin");
197
- const makeCode = await runCli(["make-envelope", "--out", envelopePath, "--state", stateFile, "--audit", auditFile, "--json"], cap.io);
198
- assert.equal(makeCode, 0);
199
- const verifyCode = await runCli(["verify-envelope", envelopePath, "--json"], cap.io);
200
- assert.equal(verifyCode, 3);
201
- const latest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
202
- assert.equal(typeof latest.status, "string");
203
- assert.equal(latest.status, "inconclusive");
204
- assert.equal(Array.isArray(latest.violations), true);
205
- });
206
- test("build emits snapshot verification payload and optional file", async () => {
207
- const { policyFile, stateFile, auditFile, dir } = await setup();
208
- const cap = ioCapture();
209
- await runCli(["init", "--file", policyFile, "--state", stateFile, "--audit", auditFile], cap.io);
210
- const snapshotOut = join(dir, "snapshot.bin");
211
- const code = await runCli(["build", "--state", stateFile, "--out", snapshotOut, "--json"], cap.io);
212
- assert.equal(code, 0);
213
- const latest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
214
- assert.equal(latest.status, "ok");
215
- assert.equal(typeof latest.policyId, "string");
216
- assert.equal(typeof latest.stateHash, "string");
217
- const bytes = await readFile(snapshotOut);
218
- assert.ok(bytes.length > 0);
219
- });
220
- test("build supports positional snapshot target", async () => {
221
- const { policyFile, stateFile, auditFile, dir } = await setup();
222
- const cap = ioCapture();
223
- await runCli(["init", "--file", policyFile, "--state", stateFile, "--audit", auditFile], cap.io);
224
- const snapshotOut = join(dir, "snapshot-positional.bin");
225
- const code = await runCli(["build", "snapshot", "--state", stateFile, "--out", snapshotOut, "--json"], cap.io);
226
- assert.equal(code, 0);
227
- const latest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
228
- assert.equal(latest.status, "ok");
229
- const bytes = await readFile(snapshotOut);
230
- assert.ok(bytes.length > 0);
231
- });
232
- test("verify supports --kind audit from file and replay command is clear stub", async () => {
233
- const { policyFile, stateFile, auditFile } = await setup();
234
- const cap = ioCapture();
235
- await runCli(["init", "--file", policyFile, "--state", stateFile, "--audit", auditFile], cap.io);
236
- await runCli(["launch", "PROVISION", "100", "us-east-1", "--agent", "agent-1", "--nonce", "20", "--state", stateFile, "--audit", auditFile], cap.io);
237
- const verifyCode = await runCli(["verify", "--kind", "audit", "--file", auditFile, "--mode", "strict", "--json"], cap.io);
238
- assert.equal(verifyCode, 3); // strict mode without checkpoint => inconclusive
239
- const verifyLatest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
240
- assert.equal(verifyLatest.status, "inconclusive");
241
- const replayCode = await runCli(["replay", "--json"], cap.io);
242
- assert.equal(replayCode, 0);
243
- const replayLatest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
244
- assert.equal(replayLatest.status, "unsupported");
245
- });
246
- test("verify supports positional aliases and default files", async () => {
247
- const { policyFile, stateFile, auditFile, dir } = await setup();
248
- const cap = ioCapture(1_770_000_333);
249
- await runCli(["init", "--file", policyFile, "--state", stateFile, "--audit", auditFile], cap.io);
250
- await runCli(["launch", "PROVISION", "100", "us-east-1", "--agent", "agent-1", "--nonce", "21", "--state", stateFile, "--audit", auditFile], cap.io);
251
- const snapshotPath = join(dir, "snapshot.bin");
252
- await runCli(["build", "--state", stateFile, "--out", snapshotPath, "--json"], cap.io);
253
- const envelopePath = join(dir, "envelope.bin");
254
- await runCli(["make-envelope", "--out", envelopePath, "--state", stateFile, "--audit", auditFile, "--json"], cap.io);
255
- const snapshotCode = await runCli(["verify", "snap", "--file", snapshotPath, "--json"], cap.io);
256
- assert.equal(snapshotCode, 0);
257
- const snapshotLatest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
258
- assert.equal(snapshotLatest.status, "ok");
259
- const auditCode = await runCli(["verify", "audit", "--file", auditFile, "--mode", "strict", "--json"], cap.io);
260
- assert.equal(auditCode, 3);
261
- const auditLatest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
262
- assert.equal(auditLatest.status, "inconclusive");
263
- const envCode = await runCli(["verify", "envelope", "--file", envelopePath, "--json"], cap.io);
264
- assert.equal(envCode, 3);
265
- const envLatest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
266
- assert.equal(envLatest.status, "inconclusive");
267
- });
268
- test("verify supports --kind authorization from file", async () => {
269
- const { policyFile, stateFile, auditFile, dir } = await setup();
270
- const cap = ioCapture(1_770_000_500);
271
- await runCli(["init", "--file", policyFile, "--state", stateFile, "--audit", auditFile], cap.io);
272
- await runCli(["launch", "PROVISION", "100", "us-east-1", "--agent", "agent-1", "--nonce", "21", "--state", stateFile, "--audit", auditFile], cap.io);
273
- const state = JSON.parse(await readFile(stateFile, "utf8"), (_k, v) => {
274
- if (typeof v === "string" && /^-?\d+n$/.test(v))
275
- return BigInt(v.slice(0, -1));
276
- return v;
277
- });
278
- const engine = new PolicyEngine({
279
- policy_version: state.policy_version,
280
- engine_secret: "dev-secret",
281
- authorization_ttl_seconds: 120
282
- });
283
- const intent = {
284
- intent_id: "intent:agent-1:22",
285
- type: "EXECUTE",
286
- agent_id: "agent-1",
287
- action_type: "PROVISION",
288
- amount: 100n,
289
- asset: "a100",
290
- target: "us-east-1",
291
- timestamp: cap.io.now(),
292
- metadata_hash: "0x" + "0".repeat(64),
293
- nonce: 22n,
294
- signature: "cli-signature-placeholder"
295
- };
296
- const evaluated = engine.evaluatePure(intent, state, { mode: "fail-fast" });
297
- assert.equal(evaluated.decision, "ALLOW");
298
- const authPath = join(dir, "authorization.json");
299
- await writeFile(authPath, jsonWithBigInt(evaluated.authorization), "utf8");
300
- const code = await runCli([
301
- "verify",
302
- "--kind",
303
- "authorization",
304
- "--file",
305
- authPath,
306
- "--expected-issuer",
307
- evaluated.authorization.issuer,
308
- "--expected-audience",
309
- evaluated.authorization.audience,
310
- "--json"
311
- ], cap.io);
312
- assert.equal(code, 0);
313
- const latest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
314
- assert.equal(latest.status, "ok");
315
- assert.equal(Array.isArray(latest.violations), true);
316
- assert.equal(latest.violations.length, 0);
317
- });
318
- test("verify fails closed on malformed authorization payload", async () => {
319
- const { dir } = await setup();
320
- const cap = ioCapture();
321
- const malformedPath = join(dir, "bad-auth.json");
322
- await writeFile(malformedPath, "{\"not\":\"authorization\"}", "utf8");
323
- const code = await runCli(["verify", "--kind", "authorization", "--file", malformedPath, "--json"], cap.io);
324
- assert.equal(code, 1);
325
- const latest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
326
- assert.equal(latest.status, "invalid");
327
- assert.ok((latest.violations ?? []).length > 0);
328
- });
329
- test("verify auth without file returns actionable guidance", async () => {
330
- const cap = ioCapture();
331
- const code = await runCli(["verify", "auth"], cap.io);
332
- assert.equal(code, 1);
333
- assert.match(cap.err[0] ?? "", /authorization verification requires --file/);
334
- });
335
- //# sourceMappingURL=cli.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../src/cli.test.ts"],"names":[],"mappings":"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"}