@oxdeai/cli 0.2.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/CHANGELOG.md ADDED
@@ -0,0 +1,45 @@
1
+ # Changelog
2
+
3
+ All notable changes to `@oxdeai/cli` will be documented in this file.
4
+
5
+ The format is based on Keep a Changelog.
6
+ This project follows Semantic Versioning.
7
+
8
+ ---
9
+
10
+ ## [0.2.0] - 2026-03-08
11
+
12
+ ### Added
13
+
14
+ - Unified `verify` command support for:
15
+ - `snapshot`
16
+ - `audit`
17
+ - `envelope`
18
+ - `authorization`
19
+ - Support for authorization/envelope verification options:
20
+ - expected issuer/audience/policy
21
+ - trusted keyset input
22
+ - signature verification requirement toggles
23
+ - Machine-readable and human-readable output paths with consistent command summaries.
24
+ - Dedicated CLI README with command surface, examples, and exit code contract.
25
+
26
+ ### Changed
27
+
28
+ - Stabilized tooling command surface around:
29
+ - `oxdeai build`
30
+ - `oxdeai verify`
31
+ - `oxdeai replay` (protocol-aware explicit stub)
32
+ - Normalized verification exit codes:
33
+ - `0` = `ok`
34
+ - `1` = `invalid` / malformed runtime failure
35
+ - `2` = usage error
36
+ - `3` = `inconclusive`
37
+ - Expanded CLI tests for authorization verification and malformed-input fail-closed behavior.
38
+
39
+ ### Notes
40
+
41
+ - `@oxdeai/cli` is a tooling release line and is versioned independently from the protocol stack.
42
+ - Protocol compatibility claims are defined by:
43
+ - `@oxdeai/core`
44
+ - `@oxdeai/sdk`
45
+ - `@oxdeai/conformance`
package/README.md ADDED
@@ -0,0 +1,61 @@
1
+ # @oxdeai/cli
2
+
3
+ Protocol-oriented command-line tooling for OxDeAI.
4
+
5
+ `@oxdeai/cli` is a thin Node.js wrapper around `@oxdeai/core` verification and local state workflows. It is framework-agnostic and intended for local policy operations, artifact inspection, and deterministic verification.
6
+
7
+ ## Command Surface
8
+
9
+ - `oxdeai build`
10
+ - `oxdeai verify`
11
+ - `oxdeai replay`
12
+
13
+ Legacy helper commands are still available (`init`, `launch`, `state`, `audit`, `verify-audit`, `make-envelope`, `verify-envelope`, `snapshot-hash`) for local development workflows.
14
+
15
+ ## Core Commands
16
+
17
+ ### build
18
+
19
+ Builds a canonical snapshot verification payload from state.
20
+
21
+ ```bash
22
+ oxdeai build --state .oxdeai/state.json --out .oxdeai/snapshot.bin --json
23
+ ```
24
+
25
+ ### verify
26
+
27
+ Verifies one artifact kind at a time:
28
+
29
+ - `snapshot`
30
+ - `audit`
31
+ - `envelope`
32
+ - `authorization`
33
+
34
+ Examples:
35
+
36
+ ```bash
37
+ oxdeai verify --kind snapshot --file snapshot.bin --json
38
+ oxdeai verify --kind audit --file audit.ndjson --mode strict --json
39
+ oxdeai verify --kind envelope --file envelope.bin --trusted-keyset keyset.json --require-signature --json
40
+ oxdeai verify --kind authorization --file authorization.json --expected-issuer oxdeai://issuer --expected-audience rp://tool-gateway --json
41
+ ```
42
+
43
+ ### replay
44
+
45
+ Protocol-aware stub in `0.1.x`. It returns a clear unsupported response and points users to deterministic audit verification (`verify --kind audit`).
46
+
47
+ ## Output and Exit Codes
48
+
49
+ - Human-readable output by default
50
+ - Machine-readable output with `--json`
51
+
52
+ Exit codes:
53
+
54
+ - `0` = verification `ok` / command success
55
+ - `1` = verification `invalid` or malformed input/runtime failure
56
+ - `2` = usage/flag parsing error
57
+ - `3` = verification `inconclusive`
58
+
59
+ ## PDP / PEP Boundary
60
+
61
+ The CLI does not replace a runtime PEP. It is intended for deterministic protocol artifact handling, validation, and local operational tooling around the OxDeAI PDP/PEP model.
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,274 @@
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("launch allow path mutates state and appends audit", async () => {
67
+ const { policyFile, stateFile, auditFile } = await setup();
68
+ const cap = ioCapture();
69
+ await runCli(["init", "--file", policyFile, "--state", stateFile, "--audit", auditFile], cap.io);
70
+ const code = await runCli(["launch", "PROVISION", "320", "us-east-1", "--agent", "agent-1", "--nonce", "42", "--state", stateFile, "--audit", auditFile, "--json"], cap.io);
71
+ assert.equal(code, 0);
72
+ const latest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
73
+ assert.equal(latest.decision, "ALLOW");
74
+ assert.equal(typeof latest.authorization_id, "string");
75
+ const stateText = await readFile(stateFile, "utf8");
76
+ assert.ok(stateText.includes("\"spent_in_period\":{\"agent-1\":\"320n\"}"));
77
+ const auditText = await readFile(auditFile, "utf8");
78
+ assert.ok(auditText.trim().split("\n").length >= 3);
79
+ });
80
+ test("launch deny path keeps state unchanged", async () => {
81
+ const { policyFile, stateFile, auditFile } = await setup();
82
+ const denyState = baseState();
83
+ denyState.kill_switch.global = true;
84
+ await writeFile(policyFile, jsonWithBigInt(denyState), "utf8");
85
+ const cap = ioCapture();
86
+ await runCli(["init", "--file", policyFile, "--state", stateFile, "--audit", auditFile], cap.io);
87
+ const before = await readFile(stateFile, "utf8");
88
+ const code = await runCli(["launch", "PROVISION", "320", "us-east-1", "--agent", "agent-1", "--nonce", "77", "--state", stateFile, "--audit", auditFile, "--json"], cap.io);
89
+ assert.equal(code, 0);
90
+ const latest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
91
+ assert.equal(latest.decision, "DENY");
92
+ const after = await readFile(stateFile, "utf8");
93
+ assert.equal(after, before);
94
+ });
95
+ test("audit command reports verify=true on valid chain", async () => {
96
+ const { policyFile, stateFile, auditFile } = await setup();
97
+ const cap = ioCapture();
98
+ await runCli(["init", "--file", policyFile, "--state", stateFile, "--audit", auditFile], cap.io);
99
+ await runCli(["launch", "PROVISION", "100", "us-east-1", "--agent", "agent-1", "--nonce", "9", "--state", stateFile, "--audit", auditFile], cap.io);
100
+ const code = await runCli(["audit", "--audit", auditFile, "--json"], cap.io);
101
+ assert.equal(code, 0);
102
+ const latest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
103
+ assert.equal(latest.verify, true);
104
+ assert.equal(Array.isArray(latest.events), true);
105
+ });
106
+ test("state command prints valid json state", async () => {
107
+ const { policyFile, stateFile, auditFile } = await setup();
108
+ const cap = ioCapture();
109
+ await runCli(["init", "--file", policyFile, "--state", stateFile, "--audit", auditFile], cap.io);
110
+ const code = await runCli(["state", "--state", stateFile, "--json"], cap.io);
111
+ assert.equal(code, 0);
112
+ const latest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
113
+ assert.equal(latest.policy_version, "v1");
114
+ assert.ok(latest.velocity?.config);
115
+ });
116
+ test("verify-audit returns strict result for current audit file", 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", "11", "--state", stateFile, "--audit", auditFile], cap.io);
121
+ const code = await runCli(["verify-audit", "--audit", auditFile, "--json"], cap.io);
122
+ assert.equal(code, 3);
123
+ const latest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
124
+ assert.equal(typeof latest.status, "string");
125
+ assert.equal(latest.status, "inconclusive");
126
+ assert.equal(Array.isArray(latest.violations), true);
127
+ });
128
+ test("snapshot-hash returns policyId and stateHash", async () => {
129
+ const { policyFile, stateFile, auditFile } = await setup();
130
+ const cap = ioCapture();
131
+ await runCli(["init", "--file", policyFile, "--state", stateFile, "--audit", auditFile], cap.io);
132
+ const code = await runCli(["snapshot-hash", "--state", stateFile, "--json"], cap.io);
133
+ assert.equal(code, 0);
134
+ const latest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
135
+ assert.equal(typeof latest.policyId, "string");
136
+ assert.equal(typeof latest.stateHash, "string");
137
+ assert.equal(latest.status, "ok");
138
+ });
139
+ test("verify-envelope reads file and verifies", async () => {
140
+ const { policyFile, stateFile, auditFile, dir } = await setup();
141
+ const cap = ioCapture(1_770_000_123);
142
+ await runCli(["init", "--file", policyFile, "--state", stateFile, "--audit", auditFile], cap.io);
143
+ await runCli(["launch", "PROVISION", "100", "us-east-1", "--agent", "agent-1", "--nonce", "12", "--state", stateFile, "--audit", auditFile], cap.io);
144
+ const state = JSON.parse(await readFile(stateFile, "utf8"), (_k, v) => {
145
+ if (typeof v === "string" && /^-?\d+n$/.test(v))
146
+ return BigInt(v.slice(0, -1));
147
+ return v;
148
+ });
149
+ const events = (await readFile(auditFile, "utf8"))
150
+ .split("\n")
151
+ .map((l) => l.trim())
152
+ .filter(Boolean)
153
+ .map((line) => JSON.parse(line));
154
+ const engine = new PolicyEngine({
155
+ policy_version: state.policy_version,
156
+ engine_secret: "dev-secret",
157
+ authorization_ttl_seconds: 120
158
+ });
159
+ const snapshotBytes = encodeCanonicalState(engine.exportState(state));
160
+ const envelope = encodeEnvelope({ formatVersion: 1, snapshot: snapshotBytes, events });
161
+ const envelopePath = join(dir, "envelope.bin");
162
+ await writeFile(envelopePath, Buffer.from(envelope));
163
+ const code = await runCli(["verify-envelope", envelopePath, "--json"], cap.io);
164
+ assert.equal(code, 3);
165
+ const latest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
166
+ assert.equal(typeof latest.status, "string");
167
+ assert.equal(latest.status, "inconclusive");
168
+ assert.equal(Array.isArray(latest.violations), true);
169
+ });
170
+ test("make-envelope writes envelope file that verify-envelope accepts", async () => {
171
+ const { policyFile, stateFile, auditFile, dir } = await setup();
172
+ const cap = ioCapture(1_770_000_222);
173
+ await runCli(["init", "--file", policyFile, "--state", stateFile, "--audit", auditFile], cap.io);
174
+ await runCli(["launch", "PROVISION", "100", "us-east-1", "--agent", "agent-1", "--nonce", "13", "--state", stateFile, "--audit", auditFile], cap.io);
175
+ const envelopePath = join(dir, "made-envelope.bin");
176
+ const makeCode = await runCli(["make-envelope", "--out", envelopePath, "--state", stateFile, "--audit", auditFile, "--json"], cap.io);
177
+ assert.equal(makeCode, 0);
178
+ const verifyCode = await runCli(["verify-envelope", envelopePath, "--json"], cap.io);
179
+ assert.equal(verifyCode, 3);
180
+ const latest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
181
+ assert.equal(typeof latest.status, "string");
182
+ assert.equal(latest.status, "inconclusive");
183
+ assert.equal(Array.isArray(latest.violations), true);
184
+ });
185
+ test("build emits snapshot verification payload and optional file", async () => {
186
+ const { policyFile, stateFile, auditFile, dir } = await setup();
187
+ const cap = ioCapture();
188
+ await runCli(["init", "--file", policyFile, "--state", stateFile, "--audit", auditFile], cap.io);
189
+ const snapshotOut = join(dir, "snapshot.bin");
190
+ const code = await runCli(["build", "--state", stateFile, "--out", snapshotOut, "--json"], cap.io);
191
+ assert.equal(code, 0);
192
+ const latest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
193
+ assert.equal(latest.status, "ok");
194
+ assert.equal(typeof latest.policyId, "string");
195
+ assert.equal(typeof latest.stateHash, "string");
196
+ const bytes = await readFile(snapshotOut);
197
+ assert.ok(bytes.length > 0);
198
+ });
199
+ test("verify supports --kind audit from file and replay command is clear stub", async () => {
200
+ const { policyFile, stateFile, auditFile } = await setup();
201
+ const cap = ioCapture();
202
+ await runCli(["init", "--file", policyFile, "--state", stateFile, "--audit", auditFile], cap.io);
203
+ await runCli(["launch", "PROVISION", "100", "us-east-1", "--agent", "agent-1", "--nonce", "20", "--state", stateFile, "--audit", auditFile], cap.io);
204
+ const verifyCode = await runCli(["verify", "--kind", "audit", "--file", auditFile, "--mode", "strict", "--json"], cap.io);
205
+ assert.equal(verifyCode, 3); // strict mode without checkpoint => inconclusive
206
+ const verifyLatest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
207
+ assert.equal(verifyLatest.status, "inconclusive");
208
+ const replayCode = await runCli(["replay", "--json"], cap.io);
209
+ assert.equal(replayCode, 0);
210
+ const replayLatest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
211
+ assert.equal(replayLatest.status, "unsupported");
212
+ });
213
+ test("verify supports --kind authorization from file", async () => {
214
+ const { policyFile, stateFile, auditFile, dir } = await setup();
215
+ const cap = ioCapture(1_770_000_500);
216
+ await runCli(["init", "--file", policyFile, "--state", stateFile, "--audit", auditFile], cap.io);
217
+ await runCli(["launch", "PROVISION", "100", "us-east-1", "--agent", "agent-1", "--nonce", "21", "--state", stateFile, "--audit", auditFile], cap.io);
218
+ const state = JSON.parse(await readFile(stateFile, "utf8"), (_k, v) => {
219
+ if (typeof v === "string" && /^-?\d+n$/.test(v))
220
+ return BigInt(v.slice(0, -1));
221
+ return v;
222
+ });
223
+ const engine = new PolicyEngine({
224
+ policy_version: state.policy_version,
225
+ engine_secret: "dev-secret",
226
+ authorization_ttl_seconds: 120
227
+ });
228
+ const intent = {
229
+ intent_id: "intent:agent-1:22",
230
+ type: "EXECUTE",
231
+ agent_id: "agent-1",
232
+ action_type: "PROVISION",
233
+ amount: 100n,
234
+ asset: "a100",
235
+ target: "us-east-1",
236
+ timestamp: cap.io.now(),
237
+ metadata_hash: "0x" + "0".repeat(64),
238
+ nonce: 22n,
239
+ signature: "cli-signature-placeholder"
240
+ };
241
+ const evaluated = engine.evaluatePure(intent, state, { mode: "fail-fast" });
242
+ assert.equal(evaluated.decision, "ALLOW");
243
+ const authPath = join(dir, "authorization.json");
244
+ await writeFile(authPath, jsonWithBigInt(evaluated.authorization), "utf8");
245
+ const code = await runCli([
246
+ "verify",
247
+ "--kind",
248
+ "authorization",
249
+ "--file",
250
+ authPath,
251
+ "--expected-issuer",
252
+ evaluated.authorization.issuer,
253
+ "--expected-audience",
254
+ evaluated.authorization.audience,
255
+ "--json"
256
+ ], cap.io);
257
+ assert.equal(code, 0);
258
+ const latest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
259
+ assert.equal(latest.status, "ok");
260
+ assert.equal(Array.isArray(latest.violations), true);
261
+ assert.equal(latest.violations.length, 0);
262
+ });
263
+ test("verify fails closed on malformed authorization payload", async () => {
264
+ const { dir } = await setup();
265
+ const cap = ioCapture();
266
+ const malformedPath = join(dir, "bad-auth.json");
267
+ await writeFile(malformedPath, "{\"not\":\"authorization\"}", "utf8");
268
+ const code = await runCli(["verify", "--kind", "authorization", "--file", malformedPath, "--json"], cap.io);
269
+ assert.equal(code, 1);
270
+ const latest = JSON.parse(cap.out[cap.out.length - 1] ?? "{}");
271
+ assert.equal(latest.status, "invalid");
272
+ assert.ok((latest.violations ?? []).length > 0);
273
+ });
274
+ //# sourceMappingURL=cli.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../src/cli.test.ts"],"names":[],"mappings":"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"}
package/dist/main.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ type Io = {
2
+ out: (line: string) => void;
3
+ err: (line: string) => void;
4
+ now: () => number;
5
+ };
6
+ export declare function runCli(argv: string[], io?: Partial<Io>): Promise<number>;
7
+ export {};
package/dist/main.js ADDED
@@ -0,0 +1,552 @@
1
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { dirname } from "node:path";
3
+ import { pathToFileURL } from "node:url";
4
+ import { PolicyEngine, encodeCanonicalState, encodeEnvelope, verifyAuditEvents, verifyAuthorization, verifyEnvelope, verifySnapshot } from "@oxdeai/core";
5
+ import { appendAuditEvents, normalizeStateBigInts, readAuditEvents, readStateFile, resetAuditFile, writeStateFile } from "./store.js";
6
+ const DEFAULT_STATE_PATH = ".oxdeai/state.json";
7
+ const DEFAULT_AUDIT_PATH = ".oxdeai/audit.ndjson";
8
+ const ACTION_TYPES = new Set(["PAYMENT", "PURCHASE", "PROVISION", "ONCHAIN_TX"]);
9
+ const EXIT_CODE_OK = 0;
10
+ const EXIT_CODE_INVALID = 1;
11
+ const EXIT_CODE_USAGE = 2;
12
+ const EXIT_CODE_INCONCLUSIVE = 3;
13
+ function usage() {
14
+ return `oxdeai CLI
15
+
16
+ Usage:
17
+ oxdeai build [--state <state.json>] [--out <snapshot.bin>] [--json]
18
+ oxdeai verify --kind <snapshot|audit|envelope|authorization> [--file <path>|-] [--mode <strict|best-effort>] [--expected-policy-id <hex>] [--expected-issuer <id>] [--expected-audience <id>] [--consumed-auth-id <id>] [--trusted-keyset <keyset.json>] [--require-signature] [--legacy-hmac-secret <secret>] [--json]
19
+ oxdeai replay [--json]
20
+ oxdeai init --file <policy.json> [--state <state.json>] [--audit <audit.ndjson>] [--json]
21
+ oxdeai launch <actionType> <amount> <target> --agent <id> --nonce <n> [--asset <asset>] [--state <state.json>] [--audit <audit.ndjson>] [--json]
22
+ oxdeai make-envelope --out <file> [--state <state.json>] [--audit <audit.ndjson>] [--json]
23
+ oxdeai verify-envelope <file> [--json]
24
+ oxdeai verify-audit [--audit <audit.ndjson>] [--json]
25
+ oxdeai snapshot-hash [--state <state.json>] [--json]
26
+ oxdeai audit [--audit <audit.ndjson>] [--json]
27
+ oxdeai state [--state <state.json>] [--json]`;
28
+ }
29
+ function parseFlags(argv) {
30
+ const args = [];
31
+ const flags = {};
32
+ for (let i = 0; i < argv.length; i++) {
33
+ const a = argv[i];
34
+ if (a === "--")
35
+ continue;
36
+ if (!a.startsWith("--")) {
37
+ args.push(a);
38
+ continue;
39
+ }
40
+ if (a === "--json") {
41
+ flags.json = true;
42
+ continue;
43
+ }
44
+ const next = () => {
45
+ const v = argv[++i];
46
+ if (!v)
47
+ throw new Error(`Missing value for ${a}`);
48
+ return v;
49
+ };
50
+ if (a === "--state") {
51
+ flags.state = next();
52
+ continue;
53
+ }
54
+ if (a === "--audit") {
55
+ flags.audit = next();
56
+ continue;
57
+ }
58
+ if (a === "--file") {
59
+ flags.file = next();
60
+ continue;
61
+ }
62
+ if (a === "--out") {
63
+ flags.out = next();
64
+ continue;
65
+ }
66
+ if (a === "--agent") {
67
+ flags.agent = next();
68
+ continue;
69
+ }
70
+ if (a === "--nonce") {
71
+ flags.nonce = next();
72
+ continue;
73
+ }
74
+ if (a === "--asset") {
75
+ flags.asset = next();
76
+ continue;
77
+ }
78
+ if (a === "--kind") {
79
+ const v = next();
80
+ if (v !== "snapshot" && v !== "audit" && v !== "envelope" && v !== "authorization") {
81
+ throw new Error("Invalid --kind value (must be snapshot|audit|envelope|authorization)");
82
+ }
83
+ flags.kind = v;
84
+ continue;
85
+ }
86
+ if (a === "--mode") {
87
+ const v = next();
88
+ if (v !== "strict" && v !== "best-effort") {
89
+ throw new Error("Invalid --mode value (must be strict|best-effort)");
90
+ }
91
+ flags.mode = v;
92
+ continue;
93
+ }
94
+ if (a === "--expected-policy-id") {
95
+ flags.expectedPolicyId = next();
96
+ continue;
97
+ }
98
+ if (a === "--expected-issuer") {
99
+ flags.expectedIssuer = next();
100
+ continue;
101
+ }
102
+ if (a === "--expected-audience") {
103
+ flags.expectedAudience = next();
104
+ continue;
105
+ }
106
+ if (a === "--consumed-auth-id") {
107
+ flags.consumedAuthId = next();
108
+ continue;
109
+ }
110
+ if (a === "--trusted-keyset") {
111
+ flags.trustedKeyset = next();
112
+ continue;
113
+ }
114
+ if (a === "--require-signature") {
115
+ flags.requireSignatureVerification = true;
116
+ continue;
117
+ }
118
+ if (a === "--legacy-hmac-secret") {
119
+ flags.legacyHmacSecret = next();
120
+ continue;
121
+ }
122
+ if (a.startsWith("--state=")) {
123
+ flags.state = a.slice(8);
124
+ continue;
125
+ }
126
+ if (a.startsWith("--audit=")) {
127
+ flags.audit = a.slice(8);
128
+ continue;
129
+ }
130
+ if (a.startsWith("--file=")) {
131
+ flags.file = a.slice(7);
132
+ continue;
133
+ }
134
+ if (a.startsWith("--out=")) {
135
+ flags.out = a.slice(6);
136
+ continue;
137
+ }
138
+ if (a.startsWith("--agent=")) {
139
+ flags.agent = a.slice(8);
140
+ continue;
141
+ }
142
+ if (a.startsWith("--nonce=")) {
143
+ flags.nonce = a.slice(8);
144
+ continue;
145
+ }
146
+ if (a.startsWith("--asset=")) {
147
+ flags.asset = a.slice(8);
148
+ continue;
149
+ }
150
+ if (a.startsWith("--kind=")) {
151
+ const v = a.slice(7);
152
+ if (v !== "snapshot" && v !== "audit" && v !== "envelope" && v !== "authorization") {
153
+ throw new Error("Invalid --kind value (must be snapshot|audit|envelope|authorization)");
154
+ }
155
+ flags.kind = v;
156
+ continue;
157
+ }
158
+ if (a.startsWith("--mode=")) {
159
+ const v = a.slice(7);
160
+ if (v !== "strict" && v !== "best-effort") {
161
+ throw new Error("Invalid --mode value (must be strict|best-effort)");
162
+ }
163
+ flags.mode = v;
164
+ continue;
165
+ }
166
+ if (a.startsWith("--expected-policy-id=")) {
167
+ flags.expectedPolicyId = a.slice("--expected-policy-id=".length);
168
+ continue;
169
+ }
170
+ if (a.startsWith("--expected-issuer=")) {
171
+ flags.expectedIssuer = a.slice("--expected-issuer=".length);
172
+ continue;
173
+ }
174
+ if (a.startsWith("--expected-audience=")) {
175
+ flags.expectedAudience = a.slice("--expected-audience=".length);
176
+ continue;
177
+ }
178
+ if (a.startsWith("--consumed-auth-id=")) {
179
+ flags.consumedAuthId = a.slice("--consumed-auth-id=".length);
180
+ continue;
181
+ }
182
+ if (a.startsWith("--trusted-keyset=")) {
183
+ flags.trustedKeyset = a.slice("--trusted-keyset=".length);
184
+ continue;
185
+ }
186
+ if (a.startsWith("--legacy-hmac-secret=")) {
187
+ flags.legacyHmacSecret = a.slice("--legacy-hmac-secret=".length);
188
+ continue;
189
+ }
190
+ throw new Error(`Unknown flag: ${a}`);
191
+ }
192
+ return { args, flags };
193
+ }
194
+ function toJson(value) {
195
+ return JSON.stringify(value, (_k, v) => (typeof v === "bigint" ? `${v.toString()}n` : v), 2);
196
+ }
197
+ function parseBigIntArg(input) {
198
+ const s = input.endsWith("n") ? input.slice(0, -1) : input;
199
+ return BigInt(s);
200
+ }
201
+ async function readStdinBytes() {
202
+ const chunks = [];
203
+ for await (const chunk of process.stdin) {
204
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
205
+ }
206
+ return Uint8Array.from(Buffer.concat(chunks));
207
+ }
208
+ function parseAuditInputBytes(bytes) {
209
+ const text = new TextDecoder().decode(bytes).trim();
210
+ if (text.length === 0)
211
+ return [];
212
+ if (text.startsWith("[")) {
213
+ const parsed = JSON.parse(text);
214
+ if (!Array.isArray(parsed))
215
+ throw new Error("audit payload must be a JSON array or NDJSON");
216
+ return parsed;
217
+ }
218
+ return text
219
+ .split("\n")
220
+ .map((line) => line.trim())
221
+ .filter(Boolean)
222
+ .map((line) => JSON.parse(line));
223
+ }
224
+ function parseJsonObjectBytes(bytes, label) {
225
+ const text = new TextDecoder().decode(bytes).trim();
226
+ if (text.length === 0)
227
+ throw new Error(`${label} payload is empty`);
228
+ const parsed = JSON.parse(text);
229
+ if (parsed === null || Array.isArray(parsed) || typeof parsed !== "object") {
230
+ throw new Error(`${label} payload must be a JSON object`);
231
+ }
232
+ return parsed;
233
+ }
234
+ function verificationExitCode(result) {
235
+ if (result.status === "ok")
236
+ return EXIT_CODE_OK;
237
+ if (result.status === "inconclusive")
238
+ return EXIT_CODE_INCONCLUSIVE;
239
+ return EXIT_CODE_INVALID;
240
+ }
241
+ function writePayload(out, flags, payload, humanSummary) {
242
+ if (flags.json) {
243
+ out(toJson(payload));
244
+ return;
245
+ }
246
+ if (humanSummary) {
247
+ out(humanSummary);
248
+ return;
249
+ }
250
+ out(toJson(payload));
251
+ }
252
+ function verificationSummary(kind, result) {
253
+ const label = kind ?? "artifact";
254
+ const lines = [`${label}: ${result.status.toUpperCase()}`];
255
+ if (result.policyId)
256
+ lines.push(`policyId: ${result.policyId}`);
257
+ if (result.stateHash)
258
+ lines.push(`stateHash: ${result.stateHash}`);
259
+ if (result.auditHeadHash)
260
+ lines.push(`auditHeadHash: ${result.auditHeadHash}`);
261
+ if (result.violations.length === 0) {
262
+ lines.push("violations: none");
263
+ }
264
+ else {
265
+ lines.push(`violations: ${result.violations.map((v) => v.code).join(", ")}`);
266
+ }
267
+ return lines.join("\n");
268
+ }
269
+ async function readTrustedKeySet(path) {
270
+ if (!path)
271
+ return undefined;
272
+ const text = await readFile(path, "utf8");
273
+ const parsed = JSON.parse(text);
274
+ if (Array.isArray(parsed))
275
+ return parsed;
276
+ if (parsed && typeof parsed === "object")
277
+ return [parsed];
278
+ throw new Error("trusted keyset payload must be a JSON object or array");
279
+ }
280
+ function buildValidationIntent(state) {
281
+ const agent = Object.keys(state.budget.budget_limit)[0] ?? "agent";
282
+ const action_type = state.allowlists.action_types?.[0] ?? "PAYMENT";
283
+ const target = state.allowlists.targets?.[0] ?? "target:probe";
284
+ return {
285
+ intent_id: "validate-intent",
286
+ type: "EXECUTE",
287
+ agent_id: agent,
288
+ action_type,
289
+ amount: 0n,
290
+ asset: state.allowlists.assets?.[0],
291
+ target,
292
+ timestamp: 0,
293
+ metadata_hash: "0x" + "0".repeat(64),
294
+ nonce: 0n,
295
+ signature: "validate-signature"
296
+ };
297
+ }
298
+ function validateStateStructure(state) {
299
+ const engine = new PolicyEngine({
300
+ policy_version: state.policy_version,
301
+ engine_secret: "validate-secret",
302
+ authorization_ttl_seconds: 1
303
+ });
304
+ const probe = buildValidationIntent(state);
305
+ const out = engine.evaluatePure(probe, structuredClone(state), { mode: "fail-fast" });
306
+ if (out.decision === "DENY" && out.reasons.includes("STATE_INVALID")) {
307
+ throw new Error("STATE_INVALID");
308
+ }
309
+ }
310
+ function buildEngine(state) {
311
+ const secret = process.env["OXDEAI_ENGINE_SECRET"] ?? "dev-secret";
312
+ const ttl = Number(process.env["OXDEAI_AUTH_TTL_SECONDS"] ?? "120");
313
+ return new PolicyEngine({
314
+ policy_version: state.policy_version,
315
+ engine_secret: secret,
316
+ authorization_ttl_seconds: Number.isFinite(ttl) ? ttl : 120
317
+ });
318
+ }
319
+ export async function runCli(argv, io) {
320
+ const out = io?.out ?? ((line) => console.log(line));
321
+ const err = io?.err ?? ((line) => console.error(line));
322
+ const now = io?.now ?? (() => Math.floor(Date.now() / 1000));
323
+ let parsed;
324
+ try {
325
+ parsed = parseFlags(argv);
326
+ }
327
+ catch (e) {
328
+ err(e.message);
329
+ err(usage());
330
+ return EXIT_CODE_USAGE;
331
+ }
332
+ const { args, flags } = parsed;
333
+ const cmd = args[0];
334
+ if (!cmd) {
335
+ err(usage());
336
+ return EXIT_CODE_USAGE;
337
+ }
338
+ const statePath = flags.state ?? DEFAULT_STATE_PATH;
339
+ const auditPath = flags.audit ?? DEFAULT_AUDIT_PATH;
340
+ try {
341
+ if (cmd === "build") {
342
+ const state = await readStateFile(statePath);
343
+ const engine = buildEngine(state);
344
+ const snapshot = engine.exportState(state);
345
+ const snapshotBytes = encodeCanonicalState(snapshot);
346
+ const verified = verifySnapshot(snapshotBytes, flags.expectedPolicyId ? { expectedPolicyId: flags.expectedPolicyId } : undefined);
347
+ if (flags.out) {
348
+ await mkdir(dirname(flags.out), { recursive: true });
349
+ await writeFile(flags.out, Buffer.from(snapshotBytes));
350
+ }
351
+ const payload = {
352
+ ok: verified.ok,
353
+ status: verified.status,
354
+ policyId: snapshot.policyId,
355
+ stateHash: verified.stateHash,
356
+ violations: verified.violations,
357
+ snapshotBytes: snapshotBytes.length,
358
+ out: flags.out
359
+ };
360
+ writePayload(out, flags, payload, `build: ${verified.status.toUpperCase()}\npolicyId: ${snapshot.policyId}\nstateHash: ${verified.stateHash ?? "unknown"}${flags.out ? `\nout: ${flags.out}` : ""}`);
361
+ return verificationExitCode(verified);
362
+ }
363
+ if (cmd === "verify") {
364
+ if (!flags.kind)
365
+ throw new Error("Usage: verify --kind <snapshot|audit|envelope|authorization> [--file <path>|-]");
366
+ const mode = flags.mode ?? "strict";
367
+ const fromFile = flags.file && flags.file !== "-";
368
+ const bytes = fromFile
369
+ ? Uint8Array.from(await readFile(flags.file))
370
+ : await readStdinBytes();
371
+ if (flags.kind === "snapshot") {
372
+ const res = verifySnapshot(bytes, flags.expectedPolicyId ? { expectedPolicyId: flags.expectedPolicyId } : undefined);
373
+ writePayload(out, flags, res, verificationSummary(flags.kind, res));
374
+ return verificationExitCode(res);
375
+ }
376
+ if (flags.kind === "envelope") {
377
+ const trustedKeySets = await readTrustedKeySet(flags.trustedKeyset);
378
+ const res = verifyEnvelope(bytes, {
379
+ mode,
380
+ expectedPolicyId: flags.expectedPolicyId,
381
+ expectedIssuer: flags.expectedIssuer,
382
+ trustedKeySets,
383
+ requireSignatureVerification: flags.requireSignatureVerification
384
+ });
385
+ writePayload(out, flags, res, verificationSummary(flags.kind, res));
386
+ return verificationExitCode(res);
387
+ }
388
+ if (flags.kind === "authorization") {
389
+ const trustedKeySets = await readTrustedKeySet(flags.trustedKeyset);
390
+ const auth = parseJsonObjectBytes(bytes, "authorization");
391
+ const res = verifyAuthorization(auth, {
392
+ now: now(),
393
+ expectedIssuer: flags.expectedIssuer,
394
+ expectedAudience: flags.expectedAudience,
395
+ expectedPolicyId: flags.expectedPolicyId,
396
+ consumedAuthIds: flags.consumedAuthId ? [flags.consumedAuthId] : [],
397
+ trustedKeySets,
398
+ requireSignatureVerification: flags.requireSignatureVerification,
399
+ legacyHmacSecret: flags.legacyHmacSecret
400
+ });
401
+ writePayload(out, flags, res, verificationSummary(flags.kind, res));
402
+ return verificationExitCode(res);
403
+ }
404
+ const events = parseAuditInputBytes(bytes);
405
+ const res = verifyAuditEvents(events, {
406
+ mode,
407
+ expectedPolicyId: flags.expectedPolicyId
408
+ });
409
+ writePayload(out, flags, res, verificationSummary(flags.kind, res));
410
+ return verificationExitCode(res);
411
+ }
412
+ if (cmd === "replay") {
413
+ const payload = {
414
+ ok: false,
415
+ status: "unsupported",
416
+ message: "Replay verifier is a protocol-aware stub in @oxdeai/cli v0.1.x. Use verify --kind audit for deterministic offline chain checks."
417
+ };
418
+ writePayload(out, flags, payload, `${payload.status.toUpperCase()}: ${payload.message}`);
419
+ return EXIT_CODE_OK;
420
+ }
421
+ if (cmd === "init") {
422
+ if (!flags.file)
423
+ throw new Error("Missing --file <policy.json>");
424
+ const text = await readFile(flags.file, "utf8");
425
+ const state = normalizeStateBigInts(JSON.parse(text));
426
+ validateStateStructure(state);
427
+ await writeStateFile(statePath, state);
428
+ await resetAuditFile(auditPath);
429
+ writePayload(out, flags, { ok: true }, "OK");
430
+ return EXIT_CODE_OK;
431
+ }
432
+ if (cmd === "state") {
433
+ const state = await readStateFile(statePath);
434
+ writePayload(out, flags, state);
435
+ return EXIT_CODE_OK;
436
+ }
437
+ if (cmd === "audit") {
438
+ const events = await readAuditEvents(auditPath);
439
+ const verified = verifyAuditEvents(events, { mode: "best-effort" });
440
+ const payload = {
441
+ headHash: verified.auditHeadHash && verified.auditHeadHash.length > 0 ? verified.auditHeadHash : "GENESIS",
442
+ verify: verified.ok,
443
+ events
444
+ };
445
+ writePayload(out, flags, payload);
446
+ return EXIT_CODE_OK;
447
+ }
448
+ if (cmd === "verify-audit") {
449
+ const events = await readAuditEvents(auditPath);
450
+ const verified = verifyAuditEvents(events, { mode: "strict" });
451
+ writePayload(out, flags, verified, verificationSummary("audit", verified));
452
+ return verificationExitCode(verified);
453
+ }
454
+ if (cmd === "verify-envelope") {
455
+ const file = args[1] ?? flags.file;
456
+ if (!file)
457
+ throw new Error("Usage: verify-envelope <file>");
458
+ const bytes = Uint8Array.from(await readFile(file));
459
+ const verified = verifyEnvelope(bytes, { mode: "strict" });
460
+ writePayload(out, flags, verified, verificationSummary("envelope", verified));
461
+ return verificationExitCode(verified);
462
+ }
463
+ if (cmd === "make-envelope") {
464
+ if (!flags.out)
465
+ throw new Error("Usage: make-envelope --out <file>");
466
+ const state = await readStateFile(statePath);
467
+ const events = await readAuditEvents(auditPath);
468
+ const engine = buildEngine(state);
469
+ const snapshotBytes = encodeCanonicalState(engine.exportState(state));
470
+ const envelope = encodeEnvelope({
471
+ formatVersion: 1,
472
+ snapshot: snapshotBytes,
473
+ events: events
474
+ });
475
+ await mkdir(dirname(flags.out), { recursive: true });
476
+ await writeFile(flags.out, Buffer.from(envelope));
477
+ const payload = { ok: true, file: flags.out };
478
+ writePayload(out, flags, payload, `OK: ${flags.out}`);
479
+ return EXIT_CODE_OK;
480
+ }
481
+ if (cmd === "snapshot-hash") {
482
+ const state = await readStateFile(statePath);
483
+ const engine = buildEngine(state);
484
+ const snapshot = engine.exportState(state);
485
+ const bytes = encodeCanonicalState(snapshot);
486
+ const verified = verifySnapshot(bytes);
487
+ const payload = {
488
+ policyId: snapshot.policyId,
489
+ stateHash: verified.stateHash,
490
+ status: verified.status,
491
+ violations: verified.violations
492
+ };
493
+ writePayload(out, flags, payload, `snapshot: ${verified.status.toUpperCase()}\npolicyId: ${snapshot.policyId}\nstateHash: ${verified.stateHash ?? "unknown"}`);
494
+ return verificationExitCode(verified);
495
+ }
496
+ if (cmd === "launch") {
497
+ const action = args[1];
498
+ const amountRaw = args[2];
499
+ const target = args[3];
500
+ if (!action || !amountRaw || !target)
501
+ throw new Error("Usage: launch <actionType> <amount> <target> --agent <id> --nonce <n>");
502
+ if (!ACTION_TYPES.has(action))
503
+ throw new Error(`Invalid actionType: ${action}`);
504
+ if (!flags.agent)
505
+ throw new Error("Missing --agent <id>");
506
+ if (!flags.nonce)
507
+ throw new Error("Missing --nonce <n>");
508
+ const state = await readStateFile(statePath);
509
+ const engine = buildEngine(state);
510
+ const ts = now();
511
+ const intent = {
512
+ intent_id: `intent:${flags.agent}:${flags.nonce}`,
513
+ type: "EXECUTE",
514
+ agent_id: flags.agent,
515
+ action_type: action,
516
+ amount: parseBigIntArg(amountRaw),
517
+ asset: flags.asset,
518
+ target,
519
+ timestamp: ts,
520
+ metadata_hash: "0x" + "0".repeat(64),
521
+ nonce: parseBigIntArg(flags.nonce),
522
+ signature: "cli-signature-placeholder"
523
+ };
524
+ const outEval = engine.evaluatePure(intent, state, { mode: "fail-fast" });
525
+ const emitted = engine.audit.snapshot();
526
+ await appendAuditEvents(auditPath, emitted);
527
+ if (outEval.decision === "ALLOW") {
528
+ await writeStateFile(statePath, outEval.nextState);
529
+ const payload = { decision: "ALLOW", authorization_id: outEval.authorization.authorization_id, reasons: [] };
530
+ writePayload(out, flags, payload, `ALLOW: ${payload.authorization_id}`);
531
+ return EXIT_CODE_OK;
532
+ }
533
+ const payload = { decision: "DENY", reasons: outEval.reasons };
534
+ writePayload(out, flags, payload, `DENY: ${toJson(payload.reasons)}`);
535
+ return EXIT_CODE_OK;
536
+ }
537
+ err(usage());
538
+ return EXIT_CODE_USAGE;
539
+ }
540
+ catch (e) {
541
+ err(e.message);
542
+ return EXIT_CODE_INVALID;
543
+ }
544
+ }
545
+ async function main() {
546
+ const code = await runCli(process.argv.slice(2));
547
+ process.exit(code);
548
+ }
549
+ if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
550
+ void main();
551
+ }
552
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { State } from "@oxdeai/core";
2
+ export declare function canonicalStringify(value: unknown): string;
3
+ export declare function normalizeStateBigInts(raw: unknown): State;
4
+ export declare function readStateFile(path: string): Promise<State>;
5
+ export declare function writeStateFile(path: string, state: State): Promise<void>;
6
+ export declare function resetAuditFile(path: string): Promise<void>;
7
+ export declare function appendAuditEvents(path: string, events: readonly unknown[]): Promise<void>;
8
+ export declare function readAuditEvents(path: string): Promise<unknown[]>;
package/dist/store.js ADDED
@@ -0,0 +1,86 @@
1
+ import { mkdir, readFile, writeFile, appendFile } from "node:fs/promises";
2
+ import { dirname } from "node:path";
3
+ function canonicalize(value) {
4
+ if (value === null)
5
+ return null;
6
+ if (typeof value === "bigint")
7
+ return `${value.toString()}n`;
8
+ if (typeof value === "boolean" || typeof value === "number" || typeof value === "string")
9
+ return value;
10
+ if (Array.isArray(value))
11
+ return value.map((v) => canonicalize(v));
12
+ if (typeof value === "object") {
13
+ const obj = value;
14
+ const out = {};
15
+ for (const key of Object.keys(obj).sort()) {
16
+ out[key] = canonicalize(obj[key]);
17
+ }
18
+ return out;
19
+ }
20
+ return String(value);
21
+ }
22
+ export function canonicalStringify(value) {
23
+ return JSON.stringify(canonicalize(value));
24
+ }
25
+ function parseBigIntLike(value) {
26
+ if (typeof value === "bigint")
27
+ return value;
28
+ if (typeof value === "number")
29
+ return BigInt(value);
30
+ if (typeof value === "string") {
31
+ const s = value.endsWith("n") ? value.slice(0, -1) : value;
32
+ return BigInt(s);
33
+ }
34
+ throw new Error("invalid bigint-like value");
35
+ }
36
+ function mapRecordBigInt(input) {
37
+ const rec = (input ?? {});
38
+ const out = {};
39
+ for (const key of Object.keys(rec))
40
+ out[key] = parseBigIntLike(rec[key]);
41
+ return out;
42
+ }
43
+ export function normalizeStateBigInts(raw) {
44
+ const s = raw;
45
+ return {
46
+ ...s,
47
+ budget: {
48
+ ...s.budget,
49
+ budget_limit: mapRecordBigInt(s.budget?.budget_limit),
50
+ spent_in_period: mapRecordBigInt(s.budget?.spent_in_period)
51
+ },
52
+ max_amount_per_action: mapRecordBigInt(s.max_amount_per_action)
53
+ };
54
+ }
55
+ export async function readStateFile(path) {
56
+ const txt = await readFile(path, "utf8");
57
+ return normalizeStateBigInts(JSON.parse(txt));
58
+ }
59
+ export async function writeStateFile(path, state) {
60
+ await mkdir(dirname(path), { recursive: true });
61
+ await writeFile(path, `${canonicalStringify(state)}\n`, "utf8");
62
+ }
63
+ export async function resetAuditFile(path) {
64
+ await mkdir(dirname(path), { recursive: true });
65
+ await writeFile(path, "", "utf8");
66
+ }
67
+ export async function appendAuditEvents(path, events) {
68
+ if (events.length === 0)
69
+ return;
70
+ await mkdir(dirname(path), { recursive: true });
71
+ const body = events.map((e) => canonicalStringify(e)).join("\n") + "\n";
72
+ await appendFile(path, body, "utf8");
73
+ }
74
+ export async function readAuditEvents(path) {
75
+ try {
76
+ const txt = await readFile(path, "utf8");
77
+ const lines = txt.split("\n").map((l) => l.trim()).filter(Boolean);
78
+ return lines.map((line) => JSON.parse(line));
79
+ }
80
+ catch (error) {
81
+ if (error.code === "ENOENT")
82
+ return [];
83
+ throw error;
84
+ }
85
+ }
86
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "@oxdeai/cli",
3
+ "version": "0.2.0",
4
+ "description": "Protocol-focused CLI tooling for OxDeAI artifact build/verify/replay workflows",
5
+ "type": "module",
6
+ "bin": {
7
+ "oxdeai": "dist/main.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "README.md",
12
+ "CHANGELOG.md"
13
+ ],
14
+ "dependencies": {
15
+ "@oxdeai/core": "workspace:*"
16
+ },
17
+ "scripts": {
18
+ "typecheck": "tsc -p tsconfig.json --noEmit",
19
+ "build": "rm -rf dist && tsc -p tsconfig.json",
20
+ "start": "node dist/main.js",
21
+ "test": "pnpm build && node --test \"dist/**/*.test.js\""
22
+ }
23
+ }