@oxdeai/cli 0.2.3 → 0.3.0

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.3",
4
- "description": "Protocol-focused CLI tooling for OxDeAI artifact build/verify/replay workflows",
3
+ "version": "0.3.0",
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.0"
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,329 +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
- //# 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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"}