@weave_protocol/ward 0.1.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/README.md CHANGED
@@ -133,6 +133,46 @@ if (cap.decision === "require_approval") {
133
133
  Every check returns `{ decision: "allow" | "deny" | "require_approval", reason, severity }`
134
134
  so hosts can decide whether to block, log, prompt, or attest.
135
135
 
136
+ ### Evaluating a whole tool call (0.2.0+)
137
+
138
+ Harness adapters should use `evaluateToolCall`, which runs every check a tool call needs in one place:
139
+
140
+ ```typescript
141
+ import { parseWard, evaluateToolCall } from "@weave_protocol/ward";
142
+
143
+ const result = evaluateToolCall(policy, "Bash", { command: "curl https://a.example && cat ~/.ssh/id_rsa" }, {
144
+ mappings: { Bash: { capability: "shell_exec", commandField: "command" } },
145
+ cwd: process.cwd(),
146
+ });
147
+ // result.decision: "deny"; result.reasons names the offending token
148
+ ```
149
+
150
+ - **Capability:** checks the mapped capability and the raw tool name. An explicit rule for either beats a policy default.
151
+ - **Path and URL arguments:** checks every one of them, not just a single well-known field:
152
+ - any argument whose name ends in `path`, `file`, `dir`, `src`, `dest`, `target`, `output`, `url`, `uri`, `endpoint`, `href` or `link`, in any casing, including arrays;
153
+ - `dest`, `target` and `output` count as writes, and `src` counts as a read.
154
+ - **Shell commands:**
155
+ - every URL in the command is checked;
156
+ - so is every absolute or `~` path, and redirect targets and copy destinations count as writes;
157
+ - relative tokens count only when they match an explicit rule, so commit messages and regexes don't trip a default.
158
+
159
+ This scanning is best effort. To draw a hard line on shell use, gate `shell_exec` itself with `requireApproval` or `deny`.
160
+ - **Relative paths** resolve against `cwd`.
161
+ - **Strictness:** the strictest result wins (deny, then require_approval, then allow).
162
+
163
+ ### Reporting decisions to the dashboard (0.3.0+)
164
+
165
+ `reportEvent()` sends an enforcement decision to a local Weave API (`@weave_protocol/api`), which shows it on its dashboard. The Weave adapters, browser guard and Hundredmen call it for you.
166
+
167
+ ```bash
168
+ export WEAVE_DASHBOARD_URL=http://localhost:3000 # where the API runs
169
+ export WEAVE_API_KEY=... # the API's key
170
+ ```
171
+
172
+ - **Off by default.** Nothing is sent unless `WEAVE_DASHBOARD_URL` is set.
173
+ - **Sent:** the surface, the decision, the tool name or a URL with its query string removed, and a truncated reason with any argument value stripped. Command text and argument contents are never sent.
174
+ - **Never in the way.** A report never changes a decision, gives up after 250 ms, and never throws.
175
+
136
176
  ---
137
177
 
138
178
  ## Policy sections
@@ -1 +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,CAsCb;AAMD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,UAAkB,GACzB,WAAW,CA8Cb;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,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBlD;AAED,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CASvD;AAcD;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAYjE"}
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,CA4Cb;AAMD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,UAAkB,GACzB,WAAW,CA8Cb;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,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBlD;AAED,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CASvD;AAcD;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAYjE"}
@@ -19,7 +19,14 @@ export function checkFilesystem(policy, op, path) {
19
19
  // Match on the normalized path, so "a/../secrets" or "a//secrets" can't
20
20
  // slip past a deny rule or out of an allowed directory.
21
21
  path = normalizePath(path);
22
- const matches = (rule) => rule.op === op && matchGlob(path, normalizePath(rule.path));
22
+ // "dir/**" also covers "dir" itself, so a recursive tool pointed at a
23
+ // denied directory (grep, glob, ls) can't slip past its rule.
24
+ const matches = (rule) => {
25
+ if (rule.op !== op)
26
+ return false;
27
+ const pattern = normalizePath(rule.path);
28
+ return matchGlob(path, pattern) || (pattern.endsWith("/**") && path === pattern.slice(0, -3));
29
+ };
23
30
  // Deny rules take precedence
24
31
  for (const rule of fs.deny || []) {
25
32
  if (matches(rule)) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/enforcer/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/enforcer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAqBH,4DAA4D;AAC5D,aAAa;AACb,4DAA4D;AAE5D,MAAM,UAAU,eAAe,CAC7B,MAAkB,EAClB,EAAgB,EAChB,IAAY;IAEZ,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;IAC7B,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,gDAAgD,EAAE,CAAC;IAEhG,wEAAwE;IACxE,wDAAwD;IACxD,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3B,sEAAsE;IACtE,8DAA8D;IAC9D,MAAM,OAAO,GAAG,CAAC,IAAoB,EAAE,EAAE;QACvC,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE;YAAE,OAAO,KAAK,CAAC;QACjC,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChG,CAAC,CAAC;IAEF,6BAA6B;IAC7B,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;QACjC,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAClB,OAAO;gBACL,QAAQ,EAAE,MAAM;gBAChB,MAAM,EAAE,8BAA8B,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE;gBAC5D,WAAW,EAAE,GAAG,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,EAAE;gBACvC,QAAQ,EAAE,MAAM;aACjB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,cAAc;IACd,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QAClC,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAClB,OAAO;gBACL,QAAQ,EAAE,OAAO;gBACjB,MAAM,EAAE,+BAA+B,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE;gBAC7D,WAAW,EAAE,GAAG,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,EAAE;aACxC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,IAAI,MAAM,CAAC;IACjC,OAAO;QACL,QAAQ,EAAE,GAAG;QACb,MAAM,EAAE,uCAAuC,GAAG,GAAG;QACrD,QAAQ,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;KAChD,CAAC;AACJ,CAAC;AAED,4DAA4D;AAC5D,UAAU;AACV,4DAA4D;AAE5D,MAAM,UAAU,YAAY,CAC1B,MAAkB,EAClB,GAAW,EACX,MAAM,GAAe,KAAK;IAE1B,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;IAC3B,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,6CAA6C,EAAE,CAAC;IAE9F,8EAA8E;IAC9E,uEAAuE;IACvE,qDAAqD;IACrD,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrF,CAAC;IACD,GAAG,GAAG,SAAS,CAAC;IAEhB,MAAM,WAAW,GAAG,CAAC,IAAiB,EAAE,EAAE;QACxC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAC9D,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QAC5F,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;QAClC,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO;gBACL,QAAQ,EAAE,MAAM;gBAChB,MAAM,EAAE,2BAA2B,IAAI,CAAC,GAAG,EAAE;gBAC7C,WAAW,EAAE,IAAI,CAAC,GAAG;gBACrB,QAAQ,EAAE,MAAM;aACjB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACnC,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO;gBACL,QAAQ,EAAE,OAAO;gBACjB,MAAM,EAAE,4BAA4B,IAAI,CAAC,GAAG,EAAE;gBAC9C,WAAW,EAAE,IAAI,CAAC,GAAG;aACtB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC;IAClC,OAAO;QACL,QAAQ,EAAE,GAAG;QACb,MAAM,EAAE,+CAA+C,GAAG,GAAG;QAC7D,QAAQ,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;KAChD,CAAC;AACJ,CAAC;AAED,4DAA4D;AAC5D,uBAAuB;AACvB,4DAA4D;AAE5D,MAAM,UAAU,eAAe,CAAC,MAAkB,EAAE,QAAgB;IAClE,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC;IACjC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,kDAAkD,EAAE,CAAC;IAEpG,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,OAAO;YACL,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,SAAS,QAAQ,wBAAwB;YACjD,WAAW,EAAE,QAAQ;YACrB,QAAQ,EAAE,MAAM;SACjB,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,OAAO;YACL,QAAQ,EAAE,kBAAkB;YAC5B,MAAM,EAAE,SAAS,QAAQ,6CAA6C;YACtE,WAAW,EAAE,QAAQ;YACrB,QAAQ,EAAE,QAAQ;SACnB,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,OAAO;gBACL,QAAQ,EAAE,OAAO;gBACjB,MAAM,EAAE,SAAS,QAAQ,yBAAyB;aACnD,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC;QACnC,OAAO;YACL,QAAQ,EAAE,GAAG;YACb,MAAM,EAAE,SAAS,QAAQ,0CAA0C,GAAG,GAAG;YACzE,QAAQ,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;SAChD,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,MAAM,EAAE,6CAA6C,EAAE,CAAC;AACtG,CAAC;AAED,4DAA4D;AAC5D,cAAc;AACd,4DAA4D;AAE5D,MAAM,UAAU,eAAe,CAC7B,MAAkB,EAClB,cAAkC;IAElC,MAAM,EAAE,GAAG,MAAM,CAAC,cAAc,CAAC;IACjC,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,mCAAmC,EAAE,CAAC;IAEnF,IAAI,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAC5C,OAAO;YACL,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,wBAAwB,cAAc,qBAAqB;YACnE,WAAW,EAAE,cAAc;YAC3B,QAAQ,EAAE,cAAc,KAAK,aAAa,IAAI,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM;SAChG,CAAC;IACJ,CAAC;IAED,IAAI,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,IAAI,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAC5C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,uBAAuB,cAAc,IAAI,EAAE,CAAC;QAClF,CAAC;QACD,OAAO;YACL,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,wBAAwB,cAAc,oCAAoC;YAClF,WAAW,EAAE,cAAc;YAC3B,QAAQ,EAAE,QAAQ;SACnB,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,0CAA0C,EAAE,CAAC;AACnF,CAAC;AAeD,MAAM,UAAU,eAAe,CAAC,MAAkB,EAAE,KAAmB;IACrE,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;IAC5B,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,gCAAgC,EAAE,CAAC;IAE/E,IAAI,CAAC,CAAC,aAAa,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;QACzE,OAAO;YACL,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,4BAA4B,KAAK,CAAC,UAAU,OAAO,CAAC,CAAC,aAAa,IAAI;YAC9E,QAAQ,EAAE,MAAM;SACjB,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,CAAC,iBAAiB,KAAK,SAAS,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC,iBAAiB,EAAE,CAAC;QACrF,OAAO;YACL,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,yBAAyB,KAAK,CAAC,cAAc,QAAQ,CAAC,CAAC,iBAAiB,KAAK;YACrF,QAAQ,EAAE,MAAM;SACjB,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;QAChE,OAAO;YACL,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,uBAAuB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;YAC1F,QAAQ,EAAE,UAAU;SACrB,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;QAC7D,OAAO;YACL,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,wBAAwB,KAAK,CAAC,MAAM,OAAO,CAAC,CAAC,SAAS,IAAI;YAClE,QAAQ,EAAE,QAAQ;SACnB,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,CAAC,YAAY,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;QACtE,OAAO;YACL,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,4BAA4B,KAAK,CAAC,SAAS,OAAO,CAAC,CAAC,YAAY,IAAI;YAC5E,QAAQ,EAAE,QAAQ;SACnB,CAAC;IACJ,CAAC;IACD,IACE,CAAC,CAAC,mBAAmB,KAAK,SAAS;QACnC,KAAK,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,CAAC,mBAAmB,EACpD,CAAC;QACD,OAAO;YACL,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,mCAAmC,KAAK,CAAC,gBAAgB,CAAC,IAAI,OAAO,CAAC,CAAC,mBAAmB,IAAI;YACtG,QAAQ,EAAE,MAAM;SACjB,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC;AACxE,CAAC;AAED,4DAA4D;AAC5D,gEAAgE;AAChE,4DAA4D;AAE5D,8EAA8E;AAC9E,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,IAAI,GAAI,UAAyE,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC;IAC3G,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrG,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,GAAG;YAAE,SAAS;QACxC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI;gBAAE,GAAG,CAAC,GAAG,EAAE,CAAC;iBACrD,IAAI,CAAC,QAAQ;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnC,SAAS;QACX,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC;AACjD,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,IAAI,CAAM,CAAC;IACX,IAAI,CAAC;QACH,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,iFAAiF;IACjF,OAAO,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;AAC5D,CAAC;AAED,wEAAwE;AACxE,SAAS,gBAAgB,CAAC,OAAe;IACvC,MAAM,CAAC,GAAG,wCAAwC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjE,IAAI,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC;IACvB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9K,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,4DAA4D;AAC5D,kCAAkC;AAClC,4DAA4D;AAE5D;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,OAAe;IACtD,kDAAkD;IAClD,MAAM,WAAW,GACf,GAAG;QACH,OAAO;aACJ,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC;aACpC,OAAO,CAAC,OAAO,EAAE,gBAAgB,CAAC;aAClC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;aACvB,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;aAChC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;QACtB,GAAG,CAAC;IACN,OAAO,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Tool-call evaluation shared by every harness adapter.
3
+ *
4
+ * An adapter hands over a tool name and its arguments; this decides allow,
5
+ * deny or require_approval by checking the capability, every path and URL
6
+ * argument (not just one well-known field), and every URL and path in a
7
+ * shell command. Before Ward 0.2.0 each adapter carried its own copy of this
8
+ * logic, and all of them checked only one field per tool and the first URL
9
+ * of a shell command (WARD-2026-001).
10
+ *
11
+ * No Node built-ins: Ward also runs in browsers.
12
+ */
13
+ import type { FilesystemOp, WardPolicy } from "../types.js";
14
+ import { type CheckResult, type Decision } from "./index.js";
15
+ /** How a harness's tool maps onto WARD concepts. */
16
+ export interface ToolMapping {
17
+ /** WARD capability name (e.g. "shell_exec", "file_write") */
18
+ capability: string;
19
+ /** Argument holding the main path, checked with fsOp */
20
+ pathField?: string;
21
+ fsOp?: FilesystemOp;
22
+ /** Argument holding the main URL */
23
+ urlField?: string;
24
+ /** Argument holding a shell command */
25
+ commandField?: string;
26
+ }
27
+ export interface ToolCallCheck extends CheckResult {
28
+ type: "capability" | "filesystem" | "network" | "command";
29
+ /** The argument or command token this check covered */
30
+ subject?: string;
31
+ }
32
+ export interface ToolCallEvaluation {
33
+ decision: Decision;
34
+ /** Reasons for every non-allow check, strictest first */
35
+ reasons: string[];
36
+ checks: ToolCallCheck[];
37
+ }
38
+ export interface EvaluateOptions {
39
+ /** Harness-specific mappings, keyed by tool name */
40
+ mappings?: Record<string, ToolMapping>;
41
+ /** Working directory used to resolve relative paths */
42
+ cwd?: string;
43
+ }
44
+ /**
45
+ * Decide a tool call. The strictest check wins: deny over require_approval
46
+ * over allow.
47
+ */
48
+ export declare function evaluateToolCall(policy: WardPolicy, toolName: string, args: Record<string, unknown> | undefined, opts?: EvaluateOptions): ToolCallEvaluation;
49
+ //# sourceMappingURL=toolcall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolcall.d.ts","sourceRoot":"","sources":["../../src/enforcer/toolcall.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAc,UAAU,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAKL,KAAK,WAAW,EAChB,KAAK,QAAQ,EACd,MAAM,YAAY,CAAC;AAEpB,oDAAoD;AACpD,MAAM,WAAW,WAAW;IAC1B,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,IAAI,EAAE,YAAY,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC;IAC1D,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,QAAQ,CAAC;IACnB,yDAAyD;IACzD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACvC,uDAAuD;IACvD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,IAAI,GAAE,eAAoB,GACzB,kBAAkB,CA6BpB"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Tool-call evaluation shared by every harness adapter.
3
+ *
4
+ * An adapter hands over a tool name and its arguments; this decides allow,
5
+ * deny or require_approval by checking the capability, every path and URL
6
+ * argument (not just one well-known field), and every URL and path in a
7
+ * shell command. Before Ward 0.2.0 each adapter carried its own copy of this
8
+ * logic, and all of them checked only one field per tool and the first URL
9
+ * of a shell command (WARD-2026-001).
10
+ *
11
+ * No Node built-ins: Ward also runs in browsers.
12
+ */
13
+ import { checkCapability, checkFilesystem, checkNetwork, } from "./index.js";
14
+ /**
15
+ * Decide a tool call. The strictest check wins: deny over require_approval
16
+ * over allow.
17
+ */
18
+ export function evaluateToolCall(policy, toolName, args, opts = {}) {
19
+ const mapping = opts.mappings?.[toolName] ?? { capability: toolName };
20
+ const checks = [];
21
+ const input = args && typeof args === "object" ? args : {};
22
+ // 1. Capability: the mapped name or the raw tool name; an explicit rule
23
+ // for either beats a policy default.
24
+ checks.push({ type: "capability", ...mergeCapability(checkCapability(policy, mapping.capability), checkCapability(policy, toolName)) });
25
+ // 2. Every path argument
26
+ const defaultOp = mapping.fsOp ?? inferFsOp(`${mapping.capability} ${toolName}`);
27
+ for (const { key, value } of pathArgs(input, mapping)) {
28
+ const op = key === mapping.pathField ? defaultOp : DEST_KEY.test(key) ? "write" : SOURCE_KEY.test(key) ? "read" : defaultOp;
29
+ checks.push({ type: "filesystem", subject: `${key}=${value}`, ...checkFilesystem(policy, op, resolvePath(value, opts.cwd)) });
30
+ }
31
+ // 3. Every URL argument
32
+ const method = String(input.method ?? "GET").toUpperCase();
33
+ for (const { key, value } of urlArgs(input, mapping)) {
34
+ checks.push({ type: "network", subject: `${key}=${value}`, ...checkNetwork(policy, value, method) });
35
+ }
36
+ // 4. Shell commands: every URL and path token
37
+ for (const command of commandArgs(input, mapping)) {
38
+ checks.push(...scanCommand(policy, command, opts.cwd));
39
+ }
40
+ return aggregate(checks);
41
+ }
42
+ // ─────────────────────────────────────────────────────────
43
+ // Argument discovery
44
+ // ─────────────────────────────────────────────────────────
45
+ /** snake_case a key so "outputPath", "output-path" and "output_path" match alike. */
46
+ const snake = (key) => key.replace(/([a-z0-9])([A-Z])/g, "$1_$2").replace(/-/g, "_").toLowerCase();
47
+ const PATH_KEY = /(^|_)(path|paths|file|files|filepath|filename|dir|dirs|directory|dest|destination|src|source|target|output|out)$/;
48
+ const URL_KEY = /(^|_)(url|urls|uri|uris|endpoint|href|link)$/;
49
+ const COMMAND_KEY = /^(command|cmd|script|shell)$/;
50
+ const DEST_KEY = /(^|_)(dest|destination|target|output|out)$/;
51
+ const SOURCE_KEY = /(^|_)(src|source)$/;
52
+ const looksLikeUrl = (v) => /^[a-z][a-z0-9+.-]*:\/\//i.test(v);
53
+ function strings(v) {
54
+ if (typeof v === "string")
55
+ return [v];
56
+ if (Array.isArray(v))
57
+ return v.filter((x) => typeof x === "string");
58
+ return [];
59
+ }
60
+ function* entries(input, test, extra) {
61
+ for (const [key, raw] of Object.entries(input)) {
62
+ if (key !== extra && !test(snake(key)))
63
+ continue;
64
+ for (const value of strings(raw))
65
+ yield { key, value };
66
+ }
67
+ }
68
+ function pathArgs(input, m) {
69
+ return [...entries(input, (k) => PATH_KEY.test(k), m.pathField)].filter((e) => e.value !== "" && !looksLikeUrl(e.value));
70
+ }
71
+ function urlArgs(input, m) {
72
+ const urls = [...entries(input, (k) => URL_KEY.test(k), m.urlField)].filter((e) => e.value !== "");
73
+ // A URL passed in a path-named argument is still a network call
74
+ const fromPaths = [...entries(input, (k) => PATH_KEY.test(k), m.pathField)].filter((e) => looksLikeUrl(e.value));
75
+ return [...urls, ...fromPaths];
76
+ }
77
+ function commandArgs(input, m) {
78
+ return [...entries(input, (k) => COMMAND_KEY.test(k), m.commandField)].map((e) => e.value);
79
+ }
80
+ // ─────────────────────────────────────────────────────────
81
+ // Shell command scanning (best effort; gate shell_exec itself for a hard line)
82
+ // ─────────────────────────────────────────────────────────
83
+ const URL_IN_TEXT = /[a-z][a-z0-9+.-]*:\/\/[^\s'"`<>|;&()]+/gi;
84
+ // Path-like tokens: absolute, home, ./ or ../, or a relative path containing "/"
85
+ const PATH_TOKEN = /(?<=^|[\s'"`=<>|;&(])(~(?=\/)|\.{1,2}(?=\/)|\/|[\w.@-]+\/)[^\s'"`<>|;&()]*/g;
86
+ const REDIRECT = /(?:>>?|\btee(?:\s+-a)?)\s*(['"]?)([^\s'"`<>|;&()]+)\1/g;
87
+ function scanCommand(policy, command, cwd) {
88
+ const checks = [];
89
+ const urls = command.match(URL_IN_TEXT) ?? [];
90
+ for (const url of urls) {
91
+ checks.push({ type: "command", subject: url, ...checkNetwork(policy, url.replace(/[.,]+$/, ""), "GET") });
92
+ }
93
+ const withoutUrls = command.replace(URL_IN_TEXT, " ");
94
+ const writes = new Set([...withoutUrls.matchAll(REDIRECT)].map((m) => m[2]));
95
+ const deletes = /(?:^|[\s;|&(])(rm|rmdir|unlink|shred)\s/.test(withoutUrls);
96
+ const copies = /(?:^|[\s;|&(])(cp|mv|install|rsync|ln)\s/.test(withoutUrls) || /\bsed\s+-i/.test(withoutUrls);
97
+ const tokens = [...new Set(withoutUrls.match(PATH_TOKEN) ?? [])];
98
+ const last = tokens[tokens.length - 1];
99
+ for (const token of tokens) {
100
+ const ops = new Set(["read"]);
101
+ if (writes.has(token) || (copies && token === last))
102
+ ops.add("write");
103
+ if (deletes)
104
+ ops.add("delete");
105
+ const explicitPath = token.startsWith("/") || token.startsWith("~");
106
+ const path = resolvePath(token, cwd);
107
+ for (const op of ops) {
108
+ const result = checkFilesystem(policy, op, path);
109
+ // Relative tokens are often not paths at all (a commit message, a
110
+ // regex), so they only trip explicit rules, not the policy default.
111
+ if (!explicitPath && !result.matchedRule)
112
+ continue;
113
+ checks.push({ type: "command", subject: `${op} ${token}`, ...result });
114
+ }
115
+ }
116
+ return checks;
117
+ }
118
+ // ─────────────────────────────────────────────────────────
119
+ // Helpers
120
+ // ─────────────────────────────────────────────────────────
121
+ function resolvePath(path, cwd) {
122
+ if (!cwd || path.startsWith("/") || path.startsWith("~"))
123
+ return path;
124
+ return `${cwd.replace(/\/+$/, "")}/${path}`;
125
+ }
126
+ /** Infer the filesystem op from words in the capability and tool name. */
127
+ function inferFsOp(name) {
128
+ const words = new Set(snake(name).split(/[^a-z0-9]+/));
129
+ const has = (...w) => w.some((x) => words.has(x));
130
+ if (has("delete", "remove", "rm", "unlink", "rmdir"))
131
+ return "delete";
132
+ if (has("write", "create", "save", "edit", "append", "put", "upload", "move", "mv", "copy", "cp", "rename"))
133
+ return "write";
134
+ if (has("execute", "exec", "run", "spawn"))
135
+ return "execute";
136
+ if (has("list", "ls", "readdir", "glob"))
137
+ return "list";
138
+ return "read";
139
+ }
140
+ function isExplicit(r) {
141
+ return /is in the allow list|is in the deny list|requires human approval/.test(r.reason);
142
+ }
143
+ /** Explicit rules beat defaults; otherwise the stricter result wins. */
144
+ function mergeCapability(a, b) {
145
+ if (isExplicit(a) !== isExplicit(b))
146
+ return isExplicit(a) ? a : b;
147
+ return RANK[b.decision] > RANK[a.decision] ? b : a;
148
+ }
149
+ const RANK = { allow: 0, require_approval: 1, deny: 2 };
150
+ function aggregate(checks) {
151
+ let decision = "allow";
152
+ for (const c of checks)
153
+ if (RANK[c.decision] > RANK[decision])
154
+ decision = c.decision;
155
+ const reasons = checks
156
+ .filter((c) => c.decision !== "allow")
157
+ .sort((x, y) => RANK[y.decision] - RANK[x.decision])
158
+ .map((c) => (c.subject && c.type !== "capability" ? `${c.reason} (${c.subject})` : c.reason));
159
+ return { decision, reasons, checks };
160
+ }
161
+ //# sourceMappingURL=toolcall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolcall.js","sourceRoot":"","sources":["../../src/enforcer/toolcall.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -24,4 +24,8 @@ export { splitFrontmatter, parseYAML } from "./parser/yaml.js";
24
24
  export { splitSections, normalizeKey } from "./parser/markdown.js";
25
25
  export { checkFilesystem, checkNetwork, checkCapability, checkDataEgress, checkBehavioral, matchGlob, normalizePath, canonicalUrl, } from "./enforcer/index.js";
26
26
  export type { Decision, CheckResult, RuntimeState } from "./enforcer/index.js";
27
+ export { evaluateToolCall } from "./enforcer/toolcall.js";
28
+ export { reportEvent, dashboardUrl } from "./report.js";
29
+ export type { EnforcementEvent, ReportOptions, ReportSurface, ReportDecision } from "./report.js";
30
+ export type { ToolMapping, ToolCallCheck, ToolCallEvaluation, EvaluateOptions } from "./enforcer/toolcall.js";
27
31
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,mBAAmB,YAAY,CAAC;AAGhC,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGnE,OAAO,EACL,eAAe,EACf,YAAY,EACZ,eAAe,EACf,eAAe,EACf,eAAe,EACf,SAAS,EACT,aAAa,EACb,YAAY,GACb,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,mBAAmB,YAAY,CAAC;AAGhC,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGnE,OAAO,EACL,eAAe,EACf,YAAY,EACZ,eAAe,EACf,eAAe,EACf,eAAe,EACf,SAAS,EACT,aAAa,EACb,YAAY,GACb,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACxD,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClG,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
package/dist/index.js CHANGED
@@ -24,4 +24,6 @@ export { splitFrontmatter, parseYAML } from "./parser/yaml.js";
24
24
  export { splitSections, normalizeKey } from "./parser/markdown.js";
25
25
  // Enforcer
26
26
  export { checkFilesystem, checkNetwork, checkCapability, checkDataEgress, checkBehavioral, matchGlob, normalizePath, canonicalUrl, } from "./enforcer/index.js";
27
+ export { evaluateToolCall } from "./enforcer/toolcall.js";
28
+ export { reportEvent, dashboardUrl } from "./report.js";
27
29
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,SAAS;AACT,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEnE,WAAW;AACX,OAAO,EACL,eAAe,EACf,YAAY,EACZ,eAAe,EACf,eAAe,EACf,eAAe,EACf,SAAS,EACT,aAAa,EACb,YAAY,GACb,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,SAAS;AACT,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEnE,WAAW;AACX,OAAO,EACL,eAAe,EACf,YAAY,EACZ,eAAe,EACf,eAAe,EACf,eAAe,EACf,SAAS,EACT,aAAa,EACb,YAAY,GACb,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Report enforcement decisions to a local Weave API dashboard.
3
+ *
4
+ * Off unless a dashboard URL is configured (WEAVE_DASHBOARD_URL, or the
5
+ * `url` option). Reporting never changes a decision and never holds the
6
+ * caller longer than a short timeout: failures are swallowed.
7
+ *
8
+ * Only a summary is sent: the surface, the decision, the tool name or a
9
+ * URL without its query string, and a truncated reason with any quoted
10
+ * argument removed. Command text and argument contents are never sent.
11
+ *
12
+ * Uses fetch, so it works in Node 18+ and in browsers (no Node built-ins).
13
+ */
14
+ import type { Decision } from "./enforcer/index.js";
15
+ export type ReportSurface = "mcp" | "claude-code" | "antigravity" | "msaf" | "browser";
16
+ export type ReportDecision = Decision | "ipi_detected" | "scan";
17
+ export interface EnforcementEvent {
18
+ surface: ReportSurface;
19
+ decision: ReportDecision;
20
+ /** Tool name, or a URL (its query string and fragment are dropped) */
21
+ subject: string;
22
+ reason?: string;
23
+ /** ms since epoch; defaults to now */
24
+ timestamp?: number;
25
+ }
26
+ export interface ReportOptions {
27
+ /** Dashboard base URL, e.g. http://localhost:3000. Default: $WEAVE_DASHBOARD_URL */
28
+ url?: string;
29
+ /** API key. Default: $WEAVE_API_KEY */
30
+ apiKey?: string;
31
+ /** Default 250ms */
32
+ timeoutMs?: number;
33
+ }
34
+ /** The dashboard URL reportEvent would use, or undefined when reporting is off. */
35
+ export declare function dashboardUrl(opts?: ReportOptions): string | undefined;
36
+ /**
37
+ * Send one event to the dashboard. Resolves when sent, failed or timed out;
38
+ * never rejects. A no-op when no dashboard URL is configured.
39
+ */
40
+ export declare function reportEvent(event: EnforcementEvent, opts?: ReportOptions): Promise<void>;
41
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,aAAa,GAAG,aAAa,GAAG,MAAM,GAAG,SAAS,CAAC;AACvF,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,cAAc,GAAG,MAAM,CAAC;AAEhE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,cAAc,CAAC;IACzB,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,oFAAoF;IACpF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,IAAI,GAAE,aAAkB,GAAG,MAAM,GAAG,SAAS,CAGzE;AAqBD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BlG"}
package/dist/report.js ADDED
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Report enforcement decisions to a local Weave API dashboard.
3
+ *
4
+ * Off unless a dashboard URL is configured (WEAVE_DASHBOARD_URL, or the
5
+ * `url` option). Reporting never changes a decision and never holds the
6
+ * caller longer than a short timeout: failures are swallowed.
7
+ *
8
+ * Only a summary is sent: the surface, the decision, the tool name or a
9
+ * URL without its query string, and a truncated reason with any quoted
10
+ * argument removed. Command text and argument contents are never sent.
11
+ *
12
+ * Uses fetch, so it works in Node 18+ and in browsers (no Node built-ins).
13
+ */
14
+ const MAX = 200;
15
+ const env = (key) => globalThis.process?.env?.[key];
16
+ /** The dashboard URL reportEvent would use, or undefined when reporting is off. */
17
+ export function dashboardUrl(opts = {}) {
18
+ const url = opts.url ?? env("WEAVE_DASHBOARD_URL");
19
+ return url ? url.replace(/\/+$/, "") : undefined;
20
+ }
21
+ /** Strip a URL to origin + path, so tokens in query strings never leave. */
22
+ function safeSubject(subject) {
23
+ if (/^[a-z][a-z0-9+.-]*:\/\//i.test(subject)) {
24
+ try {
25
+ const u = new URL(subject);
26
+ return `${u.origin}${u.pathname}`.slice(0, MAX);
27
+ }
28
+ catch {
29
+ return "(unparseable URL)";
30
+ }
31
+ }
32
+ return subject.slice(0, MAX);
33
+ }
34
+ /** Drop the "(arg=value)" suffix evaluateToolCall adds, which can hold argument contents. */
35
+ function safeReason(reason) {
36
+ if (!reason)
37
+ return undefined;
38
+ return reason.replace(/\s*\([^()]*\)\s*$/, "").slice(0, MAX);
39
+ }
40
+ /**
41
+ * Send one event to the dashboard. Resolves when sent, failed or timed out;
42
+ * never rejects. A no-op when no dashboard URL is configured.
43
+ */
44
+ export async function reportEvent(event, opts = {}) {
45
+ const base = dashboardUrl(opts);
46
+ const doFetch = globalThis.fetch;
47
+ if (!base || !doFetch)
48
+ return;
49
+ const apiKey = opts.apiKey ?? env("WEAVE_API_KEY");
50
+ const controller = new AbortController();
51
+ const timer = setTimeout(() => controller.abort(), opts.timeoutMs ?? 250);
52
+ try {
53
+ await doFetch(`${base}/api/v1/events`, {
54
+ method: "POST",
55
+ headers: { "Content-Type": "application/json", ...(apiKey ? { "X-API-Key": apiKey } : {}) },
56
+ body: JSON.stringify({
57
+ surface: event.surface,
58
+ decision: event.decision,
59
+ subject: safeSubject(event.subject),
60
+ reason: safeReason(event.reason),
61
+ timestamp: event.timestamp ?? Date.now(),
62
+ }),
63
+ signal: controller.signal,
64
+ });
65
+ }
66
+ catch {
67
+ // The dashboard is optional: never let it affect enforcement.
68
+ }
69
+ finally {
70
+ clearTimeout(timer);
71
+ }
72
+ }
73
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AA0BH,MAAM,GAAG,GAAG,GAAG,CAAC;AAChB,MAAM,GAAG,GAAG,CAAC,GAAW,EAAsB,EAAE,CAC7C,UAAyE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;AAEjG,mFAAmF;AACnF,MAAM,UAAU,YAAY,CAAC,IAAI,GAAkB,EAAE;IACnD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnD,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,CAAC;AAED,4EAA4E;AAC5E,SAAS,WAAW,CAAC,OAAe;IAClC,IAAI,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;YAC3B,OAAO,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,mBAAmB,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,6FAA6F;AAC7F,SAAS,UAAU,CAAC,MAA0B;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,OAAO,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC/D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAuB,EAAE,IAAI,GAAkB,EAAE;IACjF,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,OAAO,GAAI,UAAuC,CAAC,KAAK,CAAC;IAC/D,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO;QAAE,OAAO;IAE9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC;IAC1E,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,IAAI,gBAAgB,EAAE;YACrC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;YAC3F,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC;gBACnC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;gBAChC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;aACzC,CAAC;YACF,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,8DAA8D;IAChE,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@weave_protocol/ward",
3
- "version": "0.1.3",
3
+ "version": "0.3.0",
4
4
  "description": "WARD.md — the agent security policy standard. Define what your agents can and cannot do, version-controlled alongside AGENTS.md and SKILL.md.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",