@weave_protocol/ward 0.1.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/dist/cli.js ADDED
@@ -0,0 +1,465 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * weave-ward CLI
4
+ *
5
+ * weave-ward init Generate a starter WARD.md
6
+ * weave-ward parse <file> Print parsed policy as JSON
7
+ * weave-ward validate <file> Validate and show issues
8
+ * weave-ward explain <file> Human-readable policy summary
9
+ * weave-ward help
10
+ */
11
+ import { readFileSync, writeFileSync, existsSync } from "node:fs";
12
+ import { resolve } from "node:path";
13
+ import { parseWard, parseAndValidate } from "./parser/index.js";
14
+ // ─────────────────────────────────────────────────────────
15
+ // Colors
16
+ // ─────────────────────────────────────────────────────────
17
+ const tty = process.stdout.isTTY && !process.env.NO_COLOR;
18
+ const c = {
19
+ reset: tty ? "\x1b[0m" : "",
20
+ bold: tty ? "\x1b[1m" : "",
21
+ dim: tty ? "\x1b[2m" : "",
22
+ red: tty ? "\x1b[31m" : "",
23
+ green: tty ? "\x1b[32m" : "",
24
+ yellow: tty ? "\x1b[33m" : "",
25
+ blue: tty ? "\x1b[34m" : "",
26
+ cyan: tty ? "\x1b[36m" : "",
27
+ gray: tty ? "\x1b[90m" : "",
28
+ };
29
+ function banner() {
30
+ console.log(`
31
+ ${c.cyan}${c.bold}🛡️ weave-ward${c.reset}
32
+ ${c.gray}Agent security policy parser & validator${c.reset}
33
+ `);
34
+ }
35
+ function help() {
36
+ banner();
37
+ console.log(`${c.bold}Usage:${c.reset} weave-ward <command> [options]\n`);
38
+ console.log(`${c.bold}Commands:${c.reset}`);
39
+ console.log(` ${c.cyan}init${c.reset} ${c.gray}[--strict]${c.reset} Create a starter WARD.md in the current directory`);
40
+ console.log(` ${c.cyan}parse${c.reset} ${c.gray}<file>${c.reset} Print parsed policy as JSON`);
41
+ console.log(` ${c.cyan}validate${c.reset} ${c.gray}<file>${c.reset} Validate the file and report issues`);
42
+ console.log(` ${c.cyan}explain${c.reset} ${c.gray}<file>${c.reset} Human-readable summary of the policy`);
43
+ console.log(` ${c.cyan}help${c.reset} Show this message\n`);
44
+ console.log(`${c.bold}Examples:${c.reset}`);
45
+ console.log(` ${c.gray}$${c.reset} weave-ward init`);
46
+ console.log(` ${c.gray}$${c.reset} weave-ward validate WARD.md`);
47
+ console.log(` ${c.gray}$${c.reset} weave-ward explain ./agents/data-fetcher/WARD.md\n`);
48
+ console.log(`${c.gray}Docs: https://github.com/Tyox-all/Weave_Protocol/tree/main/ward${c.reset}\n`);
49
+ }
50
+ // ─────────────────────────────────────────────────────────
51
+ // Templates
52
+ // ─────────────────────────────────────────────────────────
53
+ const STARTER_BASIC = `---
54
+ ward: "1.0"
55
+ agent: my-agent
56
+ name: My Agent Security Policy
57
+ description: Starter WARD.md - customize for your agent.
58
+ ---
59
+
60
+ # WARD.md
61
+
62
+ Security policy for this agent. Customize the sections below to define
63
+ what the agent can and cannot do.
64
+
65
+ ## Filesystem
66
+
67
+ allow:
68
+ - read: /workspace/**
69
+ - write: /workspace/output/**
70
+ deny:
71
+ - read: /workspace/secrets/**
72
+ default: deny
73
+
74
+ ## Network
75
+
76
+ allow:
77
+ - url: "https://api.openai.com/**"
78
+ - url: "https://api.anthropic.com/**"
79
+ default: deny
80
+
81
+ ## Capabilities
82
+
83
+ allow:
84
+ - file_read
85
+ - file_write
86
+ - http_request
87
+ deny:
88
+ - shell_exec
89
+ - ssh
90
+ default: deny
91
+
92
+ ## Behavioral Limits
93
+
94
+ maxIterations: 50
95
+ maxRuntimeSeconds: 300
96
+ maxCostUSD: 5.00
97
+ maxTokens: 100000
98
+
99
+ ## Verification
100
+
101
+ required: true
102
+ backend: domere
103
+ frequency: session_end
104
+
105
+ ## Incident Response
106
+
107
+ onViolation:
108
+ - log
109
+ - alert
110
+ severityThreshold: medium
111
+ `;
112
+ const STARTER_STRICT = `---
113
+ ward: "1.0"
114
+ agent: my-agent
115
+ name: Strict Policy (high-security agent)
116
+ description: Locked-down policy for agents operating on sensitive systems or data.
117
+ ---
118
+
119
+ # WARD.md
120
+
121
+ Strict security policy. Default-deny everywhere. Approval required for any
122
+ elevated action. Mandatory attestation with blockchain anchoring.
123
+
124
+ ## Filesystem
125
+
126
+ allow:
127
+ - read: /workspace/input/**
128
+ - write: /workspace/output/**
129
+ deny:
130
+ - read: /workspace/secrets/**
131
+ - read: ~/.ssh/**
132
+ - read: ~/.aws/**
133
+ - write: /etc/**
134
+ - execute: "**"
135
+ default: deny
136
+
137
+ ## Network
138
+
139
+ allow:
140
+ - url: "https://api.company.com/**"
141
+ methods: [GET]
142
+ default: deny
143
+
144
+ ## Capabilities
145
+
146
+ allow:
147
+ - file_read
148
+ - file_write
149
+ requireApproval:
150
+ - http_request
151
+ - code_exec
152
+ deny:
153
+ - shell_exec
154
+ - ssh
155
+ - sudo
156
+ default: deny
157
+
158
+ ## Data Boundaries
159
+
160
+ egressAllow:
161
+ - public
162
+ - internal
163
+ egressDeny:
164
+ - confidential
165
+ - secret
166
+ - pii
167
+ - phi
168
+ - pci
169
+ - credentials
170
+
171
+ ## Behavioral Limits
172
+
173
+ maxIterations: 25
174
+ maxRuntimeSeconds: 120
175
+ maxCostUSD: 2.00
176
+ maxTokens: 50000
177
+ maxToolCalls: 30
178
+ maxExternalServices: 3
179
+
180
+ ## Multi-Agent
181
+
182
+ isolation: strict
183
+ maxSemanticDrift: 0.3
184
+
185
+ ## Verification
186
+
187
+ required: true
188
+ backend: domere
189
+ blockchain: solana
190
+ frequency: every_action
191
+
192
+ ## Threat Model
193
+
194
+ inScope:
195
+ - prompt_injection
196
+ - data_exfil
197
+ - credential_theft
198
+ - tool_misuse
199
+ - semantic_drift
200
+ - emergent_behavior
201
+
202
+ ## Incident Response
203
+
204
+ onViolation:
205
+ - log
206
+ - alert
207
+ - terminate
208
+ - attest_violation
209
+ - notify_human
210
+ severityThreshold: low
211
+ `;
212
+ // ─────────────────────────────────────────────────────────
213
+ // Commands
214
+ // ─────────────────────────────────────────────────────────
215
+ function runInit(args) {
216
+ const strict = args.includes("--strict");
217
+ const target = resolve(process.cwd(), "WARD.md");
218
+ if (existsSync(target)) {
219
+ console.error(`${c.red}✗${c.reset} WARD.md already exists at ${target}`);
220
+ console.error(`${c.gray} Delete it first or use a different directory.${c.reset}`);
221
+ return 1;
222
+ }
223
+ const template = strict ? STARTER_STRICT : STARTER_BASIC;
224
+ writeFileSync(target, template, "utf8");
225
+ console.log(`${c.green}✓${c.reset} Created ${c.cyan}WARD.md${c.reset} ${c.gray}(${strict ? "strict" : "basic"} template)${c.reset}`);
226
+ console.log("");
227
+ console.log(`Next:`);
228
+ console.log(` ${c.gray}1.${c.reset} Edit ${c.cyan}WARD.md${c.reset} to customize the policy for your agent`);
229
+ console.log(` ${c.gray}2.${c.reset} Run ${c.cyan}weave-ward validate WARD.md${c.reset} to check for issues`);
230
+ console.log(` ${c.gray}3.${c.reset} Commit it alongside your AGENTS.md / SKILL.md files`);
231
+ console.log("");
232
+ return 0;
233
+ }
234
+ function runParse(args) {
235
+ const path = args[0];
236
+ if (!path) {
237
+ console.error(`${c.red}✗${c.reset} Usage: weave-ward parse <file>`);
238
+ return 2;
239
+ }
240
+ if (!existsSync(path)) {
241
+ console.error(`${c.red}✗${c.reset} File not found: ${path}`);
242
+ return 2;
243
+ }
244
+ const source = readFileSync(path, "utf8");
245
+ const policy = parseWard(source);
246
+ console.log(JSON.stringify(policy, null, 2));
247
+ return 0;
248
+ }
249
+ function runValidate(args) {
250
+ const path = args[0];
251
+ if (!path) {
252
+ console.error(`${c.red}✗${c.reset} Usage: weave-ward validate <file>`);
253
+ return 2;
254
+ }
255
+ if (!existsSync(path)) {
256
+ console.error(`${c.red}✗${c.reset} File not found: ${path}`);
257
+ return 2;
258
+ }
259
+ banner();
260
+ console.log(`Validating ${c.cyan}${path}${c.reset}...\n`);
261
+ const source = readFileSync(path, "utf8");
262
+ const result = parseAndValidate(source);
263
+ if (result.errors.length > 0) {
264
+ console.log(`${c.red}${c.bold}Errors (${result.errors.length})${c.reset}`);
265
+ for (const e of result.errors) {
266
+ console.log(` ${c.red}✗${c.reset} ${e.section ? c.gray + `[${e.section}] ` + c.reset : ""}${e.message}`);
267
+ if (e.suggestion)
268
+ console.log(` ${c.gray}→ ${e.suggestion}${c.reset}`);
269
+ }
270
+ console.log("");
271
+ }
272
+ if (result.warnings.length > 0) {
273
+ console.log(`${c.yellow}${c.bold}Warnings (${result.warnings.length})${c.reset}`);
274
+ for (const w of result.warnings) {
275
+ console.log(` ${c.yellow}⚠${c.reset} ${w.section ? c.gray + `[${w.section}] ` + c.reset : ""}${w.message}`);
276
+ if (w.suggestion)
277
+ console.log(` ${c.gray}→ ${w.suggestion}${c.reset}`);
278
+ }
279
+ console.log("");
280
+ }
281
+ if (result.valid && result.warnings.length === 0) {
282
+ console.log(`${c.green}✓ Valid${c.reset} — no errors or warnings.\n`);
283
+ return 0;
284
+ }
285
+ if (result.valid) {
286
+ console.log(`${c.green}✓ Valid${c.reset} ${c.gray}(with ${result.warnings.length} warning(s))${c.reset}\n`);
287
+ return 0;
288
+ }
289
+ console.log(`${c.red}✗ Invalid${c.reset}\n`);
290
+ return 1;
291
+ }
292
+ function runExplain(args) {
293
+ const path = args[0];
294
+ if (!path) {
295
+ console.error(`${c.red}✗${c.reset} Usage: weave-ward explain <file>`);
296
+ return 2;
297
+ }
298
+ if (!existsSync(path)) {
299
+ console.error(`${c.red}✗${c.reset} File not found: ${path}`);
300
+ return 2;
301
+ }
302
+ banner();
303
+ const source = readFileSync(path, "utf8");
304
+ const policy = parseWard(source);
305
+ explainPolicy(policy);
306
+ return 0;
307
+ }
308
+ function explainPolicy(p) {
309
+ const line = (label, value) => console.log(` ${c.gray}${label.padEnd(18)}${c.reset} ${value}`);
310
+ const heading = (text) => console.log(`\n${c.bold}${text}${c.reset}\n${c.gray}${"─".repeat(60)}${c.reset}`);
311
+ heading("Overview");
312
+ if (p.name)
313
+ line("Name:", c.cyan + p.name + c.reset);
314
+ if (p.agent)
315
+ line("Agent:", c.cyan + p.agent + c.reset);
316
+ if (p.description)
317
+ line("Description:", p.description);
318
+ line("WARD version:", p.version);
319
+ if (p.filesystem) {
320
+ heading("Filesystem");
321
+ line("Default:", p.filesystem.default || "(deny)");
322
+ if (p.filesystem.allow?.length) {
323
+ console.log(` ${c.green}Allow:${c.reset}`);
324
+ for (const r of p.filesystem.allow)
325
+ console.log(` ${c.green}✓${c.reset} ${r.op} ${c.cyan}${r.path}${c.reset}`);
326
+ }
327
+ if (p.filesystem.deny?.length) {
328
+ console.log(` ${c.red}Deny:${c.reset}`);
329
+ for (const r of p.filesystem.deny)
330
+ console.log(` ${c.red}✗${c.reset} ${r.op} ${c.cyan}${r.path}${c.reset}`);
331
+ }
332
+ }
333
+ if (p.network) {
334
+ heading("Network");
335
+ line("Default:", p.network.default || "(deny)");
336
+ if (p.network.allow?.length) {
337
+ console.log(` ${c.green}Allow:${c.reset}`);
338
+ for (const r of p.network.allow)
339
+ console.log(` ${c.green}✓${c.reset} ${c.cyan}${r.url}${c.reset}${r.methods ? c.gray + " [" + r.methods.join(", ") + "]" + c.reset : ""}`);
340
+ }
341
+ if (p.network.deny?.length) {
342
+ console.log(` ${c.red}Deny:${c.reset}`);
343
+ for (const r of p.network.deny)
344
+ console.log(` ${c.red}✗${c.reset} ${c.cyan}${r.url}${c.reset}`);
345
+ }
346
+ }
347
+ if (p.capabilities) {
348
+ heading("Capabilities");
349
+ if (p.capabilities.allow?.length)
350
+ console.log(` ${c.green}Allow:${c.reset} ${p.capabilities.allow.join(", ")}`);
351
+ if (p.capabilities.deny?.length)
352
+ console.log(` ${c.red}Deny:${c.reset} ${p.capabilities.deny.join(", ")}`);
353
+ if (p.capabilities.requireApproval?.length)
354
+ console.log(` ${c.yellow}Approval:${c.reset} ${p.capabilities.requireApproval.join(", ")}`);
355
+ }
356
+ if (p.behavioral) {
357
+ heading("Behavioral Limits");
358
+ if (p.behavioral.maxIterations !== undefined)
359
+ line("Max iterations:", String(p.behavioral.maxIterations));
360
+ if (p.behavioral.maxRuntimeSeconds !== undefined)
361
+ line("Max runtime:", p.behavioral.maxRuntimeSeconds + "s");
362
+ if (p.behavioral.maxCostUSD !== undefined)
363
+ line("Max cost:", "$" + p.behavioral.maxCostUSD.toFixed(2));
364
+ if (p.behavioral.maxTokens !== undefined)
365
+ line("Max tokens:", String(p.behavioral.maxTokens));
366
+ if (p.behavioral.maxToolCalls !== undefined)
367
+ line("Max tool calls:", String(p.behavioral.maxToolCalls));
368
+ }
369
+ if (p.dataBoundaries) {
370
+ heading("Data Boundaries");
371
+ if (p.dataBoundaries.egressAllow?.length)
372
+ console.log(` ${c.green}Egress allow:${c.reset} ${p.dataBoundaries.egressAllow.join(", ")}`);
373
+ if (p.dataBoundaries.egressDeny?.length)
374
+ console.log(` ${c.red}Egress deny:${c.reset} ${p.dataBoundaries.egressDeny.join(", ")}`);
375
+ }
376
+ if (p.multiAgent) {
377
+ heading("Multi-Agent");
378
+ if (p.multiAgent.isolation)
379
+ line("Isolation:", p.multiAgent.isolation);
380
+ if (p.multiAgent.maxSemanticDrift !== undefined)
381
+ line("Max drift:", String(p.multiAgent.maxSemanticDrift));
382
+ if (p.multiAgent.trustChain?.upstream?.length)
383
+ line("Upstream:", p.multiAgent.trustChain.upstream.join(", "));
384
+ if (p.multiAgent.trustChain?.downstream?.length)
385
+ line("Downstream:", p.multiAgent.trustChain.downstream.join(", "));
386
+ }
387
+ if (p.compliance) {
388
+ heading("Compliance");
389
+ if (p.compliance.frameworks?.length)
390
+ line("Frameworks:", p.compliance.frameworks.join(", ").toUpperCase());
391
+ if (p.compliance.backend)
392
+ line("Backend:", p.compliance.backend);
393
+ }
394
+ if (p.verification) {
395
+ heading("Verification");
396
+ line("Required:", p.verification.required ? c.green + "yes" + c.reset : c.gray + "no" + c.reset);
397
+ if (p.verification.backend)
398
+ line("Backend:", p.verification.backend);
399
+ if (p.verification.blockchain)
400
+ line("Blockchain:", p.verification.blockchain);
401
+ if (p.verification.frequency)
402
+ line("Frequency:", p.verification.frequency);
403
+ }
404
+ if (p.threatModel) {
405
+ heading("Threat Model");
406
+ if (p.threatModel.inScope?.length)
407
+ console.log(` ${c.green}In scope:${c.reset} ${p.threatModel.inScope.join(", ")}`);
408
+ if (p.threatModel.outOfScope?.length)
409
+ console.log(` ${c.gray}Out of scope:${c.reset} ${p.threatModel.outOfScope.join(", ")}`);
410
+ }
411
+ if (p.incidentResponse) {
412
+ heading("Incident Response");
413
+ if (p.incidentResponse.severityThreshold)
414
+ line("Threshold:", p.incidentResponse.severityThreshold);
415
+ if (p.incidentResponse.onViolation?.length) {
416
+ console.log(` ${c.red}On violation:${c.reset}`);
417
+ for (const a of p.incidentResponse.onViolation) {
418
+ console.log(` ${c.red}●${c.reset} ${a.type}${a.minSeverity ? c.gray + " (min: " + a.minSeverity + ")" + c.reset : ""}`);
419
+ }
420
+ }
421
+ }
422
+ console.log("");
423
+ }
424
+ // ─────────────────────────────────────────────────────────
425
+ // Router
426
+ // ─────────────────────────────────────────────────────────
427
+ async function main() {
428
+ const [, , cmd, ...rest] = process.argv;
429
+ let code = 0;
430
+ try {
431
+ switch (cmd) {
432
+ case "init":
433
+ code = runInit(rest);
434
+ break;
435
+ case "parse":
436
+ code = runParse(rest);
437
+ break;
438
+ case "validate":
439
+ code = runValidate(rest);
440
+ break;
441
+ case "explain":
442
+ code = runExplain(rest);
443
+ break;
444
+ case "help":
445
+ case "--help":
446
+ case "-h":
447
+ case undefined:
448
+ help();
449
+ break;
450
+ default:
451
+ console.error(`${c.red}Unknown command: ${cmd}${c.reset}\n`);
452
+ help();
453
+ code = 2;
454
+ }
455
+ }
456
+ catch (err) {
457
+ console.error(`${c.red}Error: ${err instanceof Error ? err.message : String(err)}${c.reset}`);
458
+ if (process.env.DEBUG)
459
+ console.error(err);
460
+ code = 2;
461
+ }
462
+ process.exit(code);
463
+ }
464
+ main();
465
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Runtime policy checks.
3
+ *
4
+ * The enforcer doesn't execute anything itself — it answers questions like
5
+ * "is this proposed file write allowed?" given a parsed WardPolicy. Hosts
6
+ * (Mund, Hundredmen, custom harnesses) plug this in at the right points in
7
+ * their agent loop.
8
+ *
9
+ * Decisions are explicit: ALLOW, DENY, REQUIRE_APPROVAL. Hosts decide what
10
+ * to do with a REQUIRE_APPROVAL result (human-in-the-loop, etc.).
11
+ */
12
+ import type { WardPolicy, FilesystemOp, HttpMethod, DataClassification, ViolationSeverity } from "../types.js";
13
+ export type Decision = "allow" | "deny" | "require_approval";
14
+ export interface CheckResult {
15
+ decision: Decision;
16
+ reason: string;
17
+ matchedRule?: string;
18
+ severity?: ViolationSeverity;
19
+ }
20
+ export declare function checkFilesystem(policy: WardPolicy, op: FilesystemOp, path: string): CheckResult;
21
+ export declare function checkNetwork(policy: WardPolicy, url: string, method?: HttpMethod): CheckResult;
22
+ export declare function checkCapability(policy: WardPolicy, toolName: string): CheckResult;
23
+ export declare function checkDataEgress(policy: WardPolicy, classification: DataClassification): CheckResult;
24
+ export interface RuntimeState {
25
+ iterations: number;
26
+ runtimeSeconds: number;
27
+ costUSD: number;
28
+ tokens: number;
29
+ toolCalls: number;
30
+ externalServices: Set<string>;
31
+ }
32
+ export declare function checkBehavioral(policy: WardPolicy, state: RuntimeState): CheckResult;
33
+ /**
34
+ * Match a string against a glob pattern.
35
+ * * matches anything except "/"
36
+ * ** matches anything including "/"
37
+ * ? matches a single char
38
+ * any other char matches literally
39
+ */
40
+ export declare function matchGlob(input: string, pattern: string): boolean;
41
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/enforcer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EAGZ,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,kBAAkB,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAMD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,UAAU,EAClB,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,MAAM,GACX,WAAW,CAiCb;AAMD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,UAAkB,GACzB,WAAW,CAqCb;AAMD,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAsCjF;AAMD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,UAAU,EAClB,cAAc,EAAE,kBAAkB,GACjC,WAAW,CA0Bb;AAMD,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,GAAG,WAAW,CAmDpF;AAMD;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAYjE"}