@xrkseek/harness 0.6.4 → 0.6.5
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/node_modules/@xrkseek/core-agent/dist/index.d.ts +4 -0
- package/node_modules/@xrkseek/core-agent/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-agent/dist/index.js +6 -0
- package/node_modules/@xrkseek/core-agent/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/core-agent-loop/dist/index.d.ts +18 -0
- package/node_modules/@xrkseek/core-agent-loop/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-agent-loop/dist/index.js +38 -4
- package/node_modules/@xrkseek/core-agent-loop/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/core-tools/dist/std-tools.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-tools/dist/std-tools.js +2 -1
- package/node_modules/@xrkseek/core-tools/dist/std-tools.js.map +1 -1
- package/node_modules/@xrkseek/exec-environment/dist/http.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-environment/dist/http.js +2 -0
- package/node_modules/@xrkseek/exec-environment/dist/http.js.map +1 -1
- package/node_modules/@xrkseek/exec-environment/dist/memory.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-environment/dist/memory.js +13 -9
- package/node_modules/@xrkseek/exec-environment/dist/memory.js.map +1 -1
- package/node_modules/@xrkseek/exec-fs/dist/edit-text.d.ts +6 -1
- package/node_modules/@xrkseek/exec-fs/dist/edit-text.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-fs/dist/edit-text.js +139 -11
- package/node_modules/@xrkseek/exec-fs/dist/edit-text.js.map +1 -1
- package/node_modules/@xrkseek/exec-fs/dist/index.d.ts +7 -2
- package/node_modules/@xrkseek/exec-fs/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-fs/dist/index.js +36 -9
- package/node_modules/@xrkseek/exec-fs/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/exec-fs/dist/open-nofollow.d.ts +13 -0
- package/node_modules/@xrkseek/exec-fs/dist/open-nofollow.d.ts.map +1 -0
- package/node_modules/@xrkseek/exec-fs/dist/open-nofollow.js +90 -0
- package/node_modules/@xrkseek/exec-fs/dist/open-nofollow.js.map +1 -0
- package/node_modules/@xrkseek/exec-pty/dist/env.d.ts +3 -23
- package/node_modules/@xrkseek/exec-pty/dist/env.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-pty/dist/env.js +3 -48
- package/node_modules/@xrkseek/exec-pty/dist/env.js.map +1 -1
- package/node_modules/@xrkseek/exec-pty/package.json +2 -1
- package/node_modules/@xrkseek/exec-ssh/dist/fs.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-ssh/dist/fs.js +2 -1
- package/node_modules/@xrkseek/exec-ssh/dist/fs.js.map +1 -1
- package/node_modules/@xrkseek/exec-subprocess/dist/env.d.ts +26 -0
- package/node_modules/@xrkseek/exec-subprocess/dist/env.d.ts.map +1 -0
- package/node_modules/@xrkseek/exec-subprocess/dist/env.js +65 -0
- package/node_modules/@xrkseek/exec-subprocess/dist/env.js.map +1 -0
- package/node_modules/@xrkseek/exec-subprocess/dist/index.d.ts +1 -0
- package/node_modules/@xrkseek/exec-subprocess/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-subprocess/dist/index.js +5 -1
- package/node_modules/@xrkseek/exec-subprocess/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/llm/dist/failure.d.ts.map +1 -1
- package/node_modules/@xrkseek/llm/dist/failure.js +7 -2
- package/node_modules/@xrkseek/llm/dist/failure.js.map +1 -1
- package/node_modules/@xrkseek/llm/dist/index.d.ts +1 -0
- package/node_modules/@xrkseek/llm/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/llm/dist/index.js +1 -0
- package/node_modules/@xrkseek/llm/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/llm/dist/trace-context.d.ts +32 -0
- package/node_modules/@xrkseek/llm/dist/trace-context.d.ts.map +1 -0
- package/node_modules/@xrkseek/llm/dist/trace-context.js +89 -0
- package/node_modules/@xrkseek/llm/dist/trace-context.js.map +1 -0
- package/node_modules/@xrkseek/llm-anthropic/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/llm-anthropic/dist/index.js +3 -3
- package/node_modules/@xrkseek/llm-anthropic/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/llm-gemini/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/llm-gemini/dist/index.js +3 -3
- package/node_modules/@xrkseek/llm-gemini/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/llm-openai-compatible/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/llm-openai-compatible/dist/index.js +2 -2
- package/node_modules/@xrkseek/llm-openai-compatible/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/llm-openai-responses/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/llm-openai-responses/dist/index.js +3 -3
- package/node_modules/@xrkseek/llm-openai-responses/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/policy/dist/index.d.ts +1 -0
- package/node_modules/@xrkseek/policy/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/policy/dist/index.js +1 -0
- package/node_modules/@xrkseek/policy/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/policy/dist/ruleset.d.ts +6 -0
- package/node_modules/@xrkseek/policy/dist/ruleset.d.ts.map +1 -1
- package/node_modules/@xrkseek/policy/dist/ruleset.js +67 -14
- package/node_modules/@xrkseek/policy/dist/ruleset.js.map +1 -1
- package/node_modules/@xrkseek/policy/dist/schema.d.ts +6 -0
- package/node_modules/@xrkseek/policy/dist/schema.d.ts.map +1 -1
- package/node_modules/@xrkseek/policy/dist/schema.js +6 -0
- package/node_modules/@xrkseek/policy/dist/schema.js.map +1 -1
- package/node_modules/@xrkseek/policy/dist/when-expr.d.ts +30 -0
- package/node_modules/@xrkseek/policy/dist/when-expr.d.ts.map +1 -0
- package/node_modules/@xrkseek/policy/dist/when-expr.js +514 -0
- package/node_modules/@xrkseek/policy/dist/when-expr.js.map +1 -0
- package/node_modules/@xrkseek/preset-harness/dist/preset.d.ts.map +1 -1
- package/node_modules/@xrkseek/preset-harness/dist/preset.js +41 -1
- package/node_modules/@xrkseek/preset-harness/dist/preset.js.map +1 -1
- package/node_modules/@xrkseek/preset-harness/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@xrkseek/preset-minimal/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@xrkseek/preset-server/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@xrkseek/server-face/dist/index.d.ts +1 -1
- package/node_modules/@xrkseek/server-face/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/index.js +1 -1
- package/node_modules/@xrkseek/server-face/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/runtime.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/runtime.js +4 -3
- package/node_modules/@xrkseek/server-face/dist/runtime.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/wire/index.d.ts +1 -1
- package/node_modules/@xrkseek/server-face/dist/wire/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/wire/index.js +1 -1
- package/node_modules/@xrkseek/server-face/dist/wire/index.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/wire/loopback.d.ts +5 -0
- package/node_modules/@xrkseek/server-face/dist/wire/loopback.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/wire/loopback.js +14 -0
- package/node_modules/@xrkseek/server-face/dist/wire/loopback.js.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/index.js +2 -2
- package/node_modules/@xrkseek/server-host/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-classifier.d.ts +2 -2
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-classifier.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-classifier.js +7 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-classifier.js.map +1 -1
- package/node_modules/@xrkseek/server-loader/dist/index.d.ts +1 -1
- package/node_modules/@xrkseek/server-loader/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-loader/dist/index.js +1 -1
- package/node_modules/@xrkseek/server-loader/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/server-loader/dist/shell-hooks.d.ts +31 -1
- package/node_modules/@xrkseek/server-loader/dist/shell-hooks.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-loader/dist/shell-hooks.js +126 -14
- package/node_modules/@xrkseek/server-loader/dist/shell-hooks.js.map +1 -1
- package/node_modules/@xrkseek/workspace/dist/durable-inject.d.ts +10 -0
- package/node_modules/@xrkseek/workspace/dist/durable-inject.d.ts.map +1 -1
- package/node_modules/@xrkseek/workspace/dist/durable-inject.js +38 -0
- package/node_modules/@xrkseek/workspace/dist/durable-inject.js.map +1 -1
- package/node_modules/@xrkseek/workspace/dist/ecosystem-instructions.d.ts.map +1 -1
- package/node_modules/@xrkseek/workspace/dist/ecosystem-instructions.js +23 -11
- package/node_modules/@xrkseek/workspace/dist/ecosystem-instructions.js.map +1 -1
- package/node_modules/@xrkseek/workspace/dist/index.d.ts +1 -0
- package/node_modules/@xrkseek/workspace/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/workspace/dist/index.js +1 -0
- package/node_modules/@xrkseek/workspace/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/workspace/dist/scan-guards.d.ts +21 -0
- package/node_modules/@xrkseek/workspace/dist/scan-guards.d.ts.map +1 -1
- package/node_modules/@xrkseek/workspace/dist/scan-guards.js +48 -0
- package/node_modules/@xrkseek/workspace/dist/scan-guards.js.map +1 -1
- package/node_modules/@xrkseek/workspace/dist/skill-select.d.ts +29 -0
- package/node_modules/@xrkseek/workspace/dist/skill-select.d.ts.map +1 -0
- package/node_modules/@xrkseek/workspace/dist/skill-select.js +77 -0
- package/node_modules/@xrkseek/workspace/dist/skill-select.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,EAClB,uBAAuB,GAExB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,eAAe,EACf,eAAe,GAKhB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAChB,aAAa,GACd,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,EAC3B,uBAAuB,EACvB,qBAAqB,GAKtB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,6BAA6B,EAC7B,kBAAkB,GAInB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,qBAAqB,EACrB,2BAA2B,GAE5B,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,EAClB,uBAAuB,GAExB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,eAAe,EACf,eAAe,GAKhB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAChB,aAAa,GACd,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,EAC3B,uBAAuB,EACvB,qBAAqB,GAKtB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,6BAA6B,EAC7B,kBAAkB,GAInB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,qBAAqB,EACrB,2BAA2B,GAE5B,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,kBAAkB,GAEnB,MAAM,gBAAgB,CAAC"}
|
|
@@ -11,8 +11,14 @@ export interface PolicyRulesetRuleJson {
|
|
|
11
11
|
/**
|
|
12
12
|
* Name / id / action / scheme / op lists depending on kind.
|
|
13
13
|
* Ignored for mcp.connect / office.connect deny-all rules.
|
|
14
|
+
* Optional when `when` is set (deny/ask only).
|
|
14
15
|
*/
|
|
15
16
|
readonly names?: readonly string[];
|
|
17
|
+
/**
|
|
18
|
+
* Restricted boolean expression over the subject (`name`, `args`, …).
|
|
19
|
+
* Compiled at load; see `compileWhenExpr`. No second engine — filter only.
|
|
20
|
+
*/
|
|
21
|
+
readonly when?: string;
|
|
16
22
|
};
|
|
17
23
|
}
|
|
18
24
|
export interface PolicyRulesetJson {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ruleset.d.ts","sourceRoot":"","sources":["../src/ruleset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"ruleset.d.ts","sourceRoot":"","sources":["../src/ruleset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,YAAY,EAEZ,iBAAiB,EACjB,aAAa,EACd,MAAM,YAAY,CAAC;AAepB,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,aAAa,CAAC;AAQrB,eAAO,MAAM,sBAAsB,EAAG,CAAU,CAAC;AAEjD,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,KAAK,GAAG,YAAY,CAAC;AAE7D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;QACjC;;;;WAIG;QACH,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QACnC;;;WAGG;QACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC,CAAC;IACtE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACnD;AAED,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,OAAO,EAAE,MAAM;CAI5B;AAwND;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,yBAAyB,CA8C5E;AAED,2DAA2D;AAC3D,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAE1E"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { allowProviderIdsOnly, allowToolNamesOnly, askHostOpenActions, askToolNames, denyHostOpenActions, denyMcpConnect, denyMcpResourceServers, denyOfficeConnect, denyProviderIds, denySidebarEmbedSchemes, denySidebarFsOps, denyToolNames, } from "./rules.js";
|
|
2
2
|
import { createPolicyEngine, } from "./engine.js";
|
|
3
|
+
import { WhenExprError, compileWhenExpr, whenEnvFromSubject, } from "./when-expr.js";
|
|
3
4
|
export const POLICY_RULESET_VERSION = 1;
|
|
4
5
|
export class PolicyRulesetParseError extends Error {
|
|
5
6
|
constructor(message) {
|
|
@@ -22,6 +23,46 @@ const ACTIONS = new Set(["deny", "ask", "allow-only"]);
|
|
|
22
23
|
function isObject(v) {
|
|
23
24
|
return v !== null && typeof v === "object" && !Array.isArray(v);
|
|
24
25
|
}
|
|
26
|
+
function parseWhen(value, ruleId) {
|
|
27
|
+
if (value === undefined)
|
|
28
|
+
return undefined;
|
|
29
|
+
if (typeof value !== "string" || !value.trim()) {
|
|
30
|
+
throw new PolicyRulesetParseError(`rule ${ruleId}: match.when must be a non-empty string`);
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
return compileWhenExpr(value);
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
if (err instanceof WhenExprError) {
|
|
37
|
+
throw new PolicyRulesetParseError(`rule ${ruleId}: ${err.message}`);
|
|
38
|
+
}
|
|
39
|
+
throw err;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function withWhen(rule, when) {
|
|
43
|
+
if (when === undefined)
|
|
44
|
+
return rule;
|
|
45
|
+
return {
|
|
46
|
+
id: rule.id,
|
|
47
|
+
match(subject) {
|
|
48
|
+
if (!when(whenEnvFromSubject(subject)))
|
|
49
|
+
return undefined;
|
|
50
|
+
return rule.match(subject);
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/** Kind-wide deny/ask used when `when` is set and `names` is omitted. */
|
|
55
|
+
function kindWide(kind, action, opts) {
|
|
56
|
+
const reason = opts.reason ?? `${action} ${kind} (when)`;
|
|
57
|
+
return {
|
|
58
|
+
id: opts.id,
|
|
59
|
+
match(subject) {
|
|
60
|
+
if (subject.kind !== kind)
|
|
61
|
+
return undefined;
|
|
62
|
+
return { verdict: action, reason, ruleId: opts.id };
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
25
66
|
function parseNames(value, ruleId) {
|
|
26
67
|
if (!Array.isArray(value) || value.length === 0) {
|
|
27
68
|
throw new PolicyRulesetParseError(`rule ${ruleId}: names must be a non-empty string array`);
|
|
@@ -43,8 +84,12 @@ function ruleFromJson(raw, index) {
|
|
|
43
84
|
if (typeof id !== "string" || !id.trim()) {
|
|
44
85
|
throw new PolicyRulesetParseError(`rules[${index}]: missing string id`);
|
|
45
86
|
}
|
|
46
|
-
|
|
47
|
-
|
|
87
|
+
// Bind as the union instead of `unknown`: a Set membership test does not narrow,
|
|
88
|
+
// and kindWide() only accepts "deny" | "ask" once "allow-only" has thrown.
|
|
89
|
+
const action = ACTIONS.has(raw.action)
|
|
90
|
+
? raw.action
|
|
91
|
+
: undefined;
|
|
92
|
+
if (action === undefined) {
|
|
48
93
|
throw new PolicyRulesetParseError(`rule ${id}: action must be deny|ask|allow-only`);
|
|
49
94
|
}
|
|
50
95
|
const reason = raw.reason === undefined
|
|
@@ -65,59 +110,67 @@ function ruleFromJson(raw, index) {
|
|
|
65
110
|
id,
|
|
66
111
|
...(reason !== undefined ? { reason } : {}),
|
|
67
112
|
};
|
|
113
|
+
const when = parseWhen(raw.match.when, id);
|
|
114
|
+
const finish = (rule) => withWhen(rule, when);
|
|
68
115
|
if (kind === "mcp.connect") {
|
|
69
116
|
if (action !== "deny") {
|
|
70
117
|
throw new PolicyRulesetParseError(`rule ${id}: mcp.connect only supports action deny`);
|
|
71
118
|
}
|
|
72
|
-
return denyMcpConnect(opts);
|
|
119
|
+
return finish(denyMcpConnect(opts));
|
|
73
120
|
}
|
|
74
121
|
if (kind === "office.connect") {
|
|
75
122
|
if (action !== "deny") {
|
|
76
123
|
throw new PolicyRulesetParseError(`rule ${id}: office.connect only supports action deny`);
|
|
77
124
|
}
|
|
78
|
-
return denyOfficeConnect(opts);
|
|
125
|
+
return finish(denyOfficeConnect(opts));
|
|
126
|
+
}
|
|
127
|
+
if (raw.match.names === undefined) {
|
|
128
|
+
if (when === undefined || action === "allow-only") {
|
|
129
|
+
throw new PolicyRulesetParseError(`rule ${id}: names must be a non-empty string array`);
|
|
130
|
+
}
|
|
131
|
+
return finish(kindWide(kind, action, opts));
|
|
79
132
|
}
|
|
80
133
|
const names = parseNames(raw.match.names, id);
|
|
81
134
|
if (kind === "mcp.resource") {
|
|
82
135
|
if (action !== "deny") {
|
|
83
136
|
throw new PolicyRulesetParseError(`rule ${id}: mcp.resource only supports action deny`);
|
|
84
137
|
}
|
|
85
|
-
return denyMcpResourceServers(names, opts);
|
|
138
|
+
return finish(denyMcpResourceServers(names, opts));
|
|
86
139
|
}
|
|
87
140
|
if (kind === "host.open") {
|
|
88
141
|
if (action === "allow-only") {
|
|
89
142
|
throw new PolicyRulesetParseError(`rule ${id}: host.open does not support allow-only (use deny or ask)`);
|
|
90
143
|
}
|
|
91
144
|
if (action === "ask")
|
|
92
|
-
return askHostOpenActions(names, opts);
|
|
93
|
-
return denyHostOpenActions(names, opts);
|
|
145
|
+
return finish(askHostOpenActions(names, opts));
|
|
146
|
+
return finish(denyHostOpenActions(names, opts));
|
|
94
147
|
}
|
|
95
148
|
if (kind === "sidebar.embed") {
|
|
96
149
|
if (action !== "deny") {
|
|
97
150
|
throw new PolicyRulesetParseError(`rule ${id}: sidebar.embed only supports action deny`);
|
|
98
151
|
}
|
|
99
|
-
return denySidebarEmbedSchemes(names, opts);
|
|
152
|
+
return finish(denySidebarEmbedSchemes(names, opts));
|
|
100
153
|
}
|
|
101
154
|
if (kind === "sidebar.fs") {
|
|
102
155
|
if (action !== "deny") {
|
|
103
156
|
throw new PolicyRulesetParseError(`rule ${id}: sidebar.fs only supports action deny`);
|
|
104
157
|
}
|
|
105
|
-
return denySidebarFsOps(names, opts);
|
|
158
|
+
return finish(denySidebarFsOps(names, opts));
|
|
106
159
|
}
|
|
107
160
|
if (kind === "tool.call") {
|
|
108
161
|
if (action === "deny")
|
|
109
|
-
return denyToolNames(names, opts);
|
|
162
|
+
return finish(denyToolNames(names, opts));
|
|
110
163
|
if (action === "ask")
|
|
111
|
-
return askToolNames(names, opts);
|
|
112
|
-
return allowToolNamesOnly(names, opts);
|
|
164
|
+
return finish(askToolNames(names, opts));
|
|
165
|
+
return finish(allowToolNamesOnly(names, opts));
|
|
113
166
|
}
|
|
114
167
|
// provider.use
|
|
115
168
|
if (action === "ask") {
|
|
116
169
|
throw new PolicyRulesetParseError(`rule ${id}: provider.use does not support ask (use deny or allow-only)`);
|
|
117
170
|
}
|
|
118
171
|
if (action === "deny")
|
|
119
|
-
return denyProviderIds(names, opts);
|
|
120
|
-
return allowProviderIdsOnly(names, opts);
|
|
172
|
+
return finish(denyProviderIds(names, opts));
|
|
173
|
+
return finish(allowProviderIdsOnly(names, opts));
|
|
121
174
|
}
|
|
122
175
|
/**
|
|
123
176
|
* Parse a policy ruleset JSON document into engine options.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ruleset.js","sourceRoot":"","sources":["../src/ruleset.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ruleset.js","sourceRoot":"","sources":["../src/ruleset.ts"],"names":[],"mappings":"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"}
|
|
@@ -76,6 +76,12 @@ export declare const policyRulesetJsonSchema: {
|
|
|
76
76
|
};
|
|
77
77
|
readonly minItems: 1;
|
|
78
78
|
};
|
|
79
|
+
readonly when: {
|
|
80
|
+
readonly type: "string";
|
|
81
|
+
readonly minLength: 1;
|
|
82
|
+
readonly maxLength: 512;
|
|
83
|
+
readonly description: "Optional restricted boolean filter over the subject (name, args, path). Not a second policy engine.";
|
|
84
|
+
};
|
|
79
85
|
};
|
|
80
86
|
};
|
|
81
87
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,uBAAuB
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqE1B,CAAC"}
|
|
@@ -57,6 +57,12 @@ export const policyRulesetJsonSchema = {
|
|
|
57
57
|
items: { type: "string", minLength: 1 },
|
|
58
58
|
minItems: 1,
|
|
59
59
|
},
|
|
60
|
+
when: {
|
|
61
|
+
type: "string",
|
|
62
|
+
minLength: 1,
|
|
63
|
+
maxLength: 512,
|
|
64
|
+
description: "Optional restricted boolean filter over the subject (name, args, path). Not a second policy engine.",
|
|
65
|
+
},
|
|
60
66
|
},
|
|
61
67
|
},
|
|
62
68
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,GAAG,EAAE,iDAAiD;IACtD,KAAK,EAAE,eAAe;IACtB,WAAW,EACT,oDAAoD;IACtD,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,CAAC,SAAS,CAAC;IACrB,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE;QACV,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QACrB,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE;gBACV,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;gBAC/C,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;gBAClD,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;gBACjD,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;gBAClD,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;gBAC/C,eAAe,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;gBACnD,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;gBAChD,gBAAgB,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;aACrD;SACF;QACD,KAAK,EAAE;YACL,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;gBACnC,oBAAoB,EAAE,KAAK;gBAC3B,UAAU,EAAE;oBACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE;oBACpC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,EAAE;oBAC/C,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC1B,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,QAAQ,EAAE,CAAC,MAAM,CAAC;wBAClB,oBAAoB,EAAE,KAAK;wBAC3B,UAAU,EAAE;4BACV,IAAI,EAAE;gCACJ,IAAI,EAAE;oCACJ,WAAW;oCACX,cAAc;oCACd,aAAa;oCACb,cAAc;oCACd,WAAW;oCACX,eAAe;oCACf,YAAY;oCACZ,gBAAgB;iCACjB;6BACF;4BACD,KAAK,EAAE;gCACL,IAAI,EAAE,OAAO;gCACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE;gCACvC,QAAQ,EAAE,CAAC;6BACZ;yBACF;qBACF;iBACF;aACF;SACF;KACF;CACO,CAAC"}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,GAAG,EAAE,iDAAiD;IACtD,KAAK,EAAE,eAAe;IACtB,WAAW,EACT,oDAAoD;IACtD,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,CAAC,SAAS,CAAC;IACrB,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE;QACV,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QACrB,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE;gBACV,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;gBAC/C,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;gBAClD,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;gBACjD,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;gBAClD,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;gBAC/C,eAAe,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;gBACnD,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;gBAChD,gBAAgB,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;aACrD;SACF;QACD,KAAK,EAAE;YACL,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;gBACnC,oBAAoB,EAAE,KAAK;gBAC3B,UAAU,EAAE;oBACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE;oBACpC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,EAAE;oBAC/C,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC1B,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,QAAQ,EAAE,CAAC,MAAM,CAAC;wBAClB,oBAAoB,EAAE,KAAK;wBAC3B,UAAU,EAAE;4BACV,IAAI,EAAE;gCACJ,IAAI,EAAE;oCACJ,WAAW;oCACX,cAAc;oCACd,aAAa;oCACb,cAAc;oCACd,WAAW;oCACX,eAAe;oCACf,YAAY;oCACZ,gBAAgB;iCACjB;6BACF;4BACD,KAAK,EAAE;gCACL,IAAI,EAAE,OAAO;gCACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE;gCACvC,QAAQ,EAAE,CAAC;6BACZ;4BACD,IAAI,EAAE;gCACJ,IAAI,EAAE,QAAQ;gCACd,SAAS,EAAE,CAAC;gCACZ,SAAS,EAAE,GAAG;gCACd,WAAW,EACT,qGAAqG;6BACxG;yBACF;qBACF;iBACF;aACF;SACF;KACF;CACO,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Restricted boolean expressions for policy ruleset `match.when`.
|
|
3
|
+
*
|
|
4
|
+
* Hand-rolled — no `eval` / `vm` / Function. Grammar is a boolean subset with
|
|
5
|
+
* subject bindings and a tiny string/RegExp method whitelist. Unknown
|
|
6
|
+
* identifiers, assignment, and prototype walks are rejected at compile time.
|
|
7
|
+
*
|
|
8
|
+
* Does **not** introduce a second policy engine: ruleset JSON stays the only
|
|
9
|
+
* surface; `when` is an optional filter on an existing rule.
|
|
10
|
+
*/
|
|
11
|
+
import type { PolicySubject } from "./types.js";
|
|
12
|
+
export declare class WhenExprError extends Error {
|
|
13
|
+
constructor(message: string);
|
|
14
|
+
}
|
|
15
|
+
/** Max source length (chars). */
|
|
16
|
+
export declare const WHEN_EXPR_MAX_CHARS = 512;
|
|
17
|
+
/** Max AST depth while compiling. */
|
|
18
|
+
export declare const WHEN_EXPR_MAX_DEPTH = 32;
|
|
19
|
+
/** Bindings exposed to `when` (frozen plain data only). */
|
|
20
|
+
export type WhenEnv = Readonly<Record<string, unknown>>;
|
|
21
|
+
/** Compile subject → env once per evaluate. */
|
|
22
|
+
export declare function whenEnvFromSubject(subject: PolicySubject): WhenEnv;
|
|
23
|
+
/**
|
|
24
|
+
* Compile a `when` source string. Throws {@link WhenExprError} on syntax /
|
|
25
|
+
* safety violations (fail closed at ruleset load).
|
|
26
|
+
*/
|
|
27
|
+
export declare function compileWhenExpr(source: string): (env: WhenEnv) => boolean;
|
|
28
|
+
/** Evaluate `when` against a subject (compile + run). */
|
|
29
|
+
export declare function evalWhenExpr(source: string, subject: PolicySubject): boolean;
|
|
30
|
+
//# sourceMappingURL=when-expr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"when-expr.d.ts","sourceRoot":"","sources":["../src/when-expr.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B;AAED,iCAAiC;AACjC,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,qCAAqC;AACrC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAkBtC,2DAA2D;AAC3D,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAExD,+CAA+C;AAC/C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CA4ClE;AAiBD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAuBzE;AAED,yDAAyD;AACzD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAE5E"}
|