@melra/policy-core 0.3.0-alpha.4 → 0.3.0-alpha.6

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 ADDED
@@ -0,0 +1,78 @@
1
+ # @melra/policy-core
2
+
3
+ Policy evaluation and scoped approval primitives for
4
+ [MELRA](https://github.com/XAGI-Lab/melra). Decides allow, deny, or confirm for
5
+ a typed operation before any adapter runs, and issues and validates the
6
+ task-scoped approval challenges that gate mutations.
7
+
8
+ ```bash
9
+ npm install @melra/policy-core
10
+ ```
11
+
12
+ ```ts
13
+ import { createDefaultPolicy, evaluatePolicy } from "@melra/policy-core";
14
+
15
+ const policy = createDefaultPolicy(process.cwd());
16
+ const { decision, challenge } = evaluatePolicy(taskId, request, policy);
17
+ ```
18
+
19
+ An `allow` runs. A `confirm` returns a `challenge` whose exact phrase must be
20
+ echoed back before execution, bound to the task and to a digest of the operation
21
+ — so a plan cannot be swapped for a different action after approval. A `deny`
22
+ never reaches a runtime.
23
+
24
+ ## Defaults worth knowing
25
+
26
+ - A non-empty `constraints` array is denied. Freeform prose is not enforceable,
27
+ so the honest answer is to refuse rather than pretend it was applied.
28
+ - Any non-`read` effect with no `requiredEvidence` is denied. A mutation nobody
29
+ can check is not a mutation worth running.
30
+ - Terminal commands must be allowlisted by basename. Shell interpreters and
31
+ `sudo`/`su` are denied unconditionally. `git` counts as a read only for a small
32
+ read-only subcommand set; `npm`, `npx`, and `pnpm` are high-risk mutations.
33
+ - Browser destinations default to `allowedDomains: ["*"]` with localhost allowed,
34
+ because the allowlist is a narrowing control, not the safety boundary — the
35
+ browser runtime independently blocks private and metadata destinations.
36
+ - `classifyOperation` is the single place effect and risk are decided. An action
37
+ that is not classified there is mis-classified, not unclassified.
38
+
39
+ ## Capability grants
40
+
41
+ `policy.capabilities` is authority; everything above is rules. It is empty by
42
+ default and changes nothing when it is. A non-empty list is a closed world,
43
+ checked before any allowlist — because an allowlist describes what a grant
44
+ holder may do, not whether they hold one.
45
+
46
+ ```ts
47
+ import { createDefaultPolicy, type LocalPolicy } from "@melra/policy-core";
48
+
49
+ const policy: LocalPolicy = {
50
+ ...createDefaultPolicy(process.cwd()),
51
+ capabilities: [
52
+ {
53
+ id: "build-writes",
54
+ capability: "file.*",
55
+ effects: ["read", "mutate"],
56
+ target: "*/build/*",
57
+ principal: "agent:ci-runner",
58
+ },
59
+ ],
60
+ };
61
+ ```
62
+
63
+ `capability` and `target` are matched against what `classifyOperation` reported,
64
+ with `*` standing for any run of characters. `principal` is matched against
65
+ `request.identity.principal` written `kind:id`; a request that declares no
66
+ identity is `agent:local`. An effect with no matching grant is denied
67
+ `capability_not_granted`, an expired one `capability_expired`, and one issued
68
+ against a superseded `policyVersion` is refused rather than reinterpreted under
69
+ rules it was not written for.
70
+
71
+ `unhinged: true` short-circuits evaluation to `allow` — but only after the
72
+ caller's own `forbiddenEffects` and `constraints` are honoured, because those are
73
+ the caller bounding its own task rather than a guardrail MELRA imposes.
74
+
75
+ Requires Node.js 22 or newer. Full documentation:
76
+ [github.com/XAGI-Lab/melra](https://github.com/XAGI-Lab/melra)
77
+
78
+ Apache-2.0
package/dist/index.d.ts CHANGED
@@ -1,19 +1,119 @@
1
- import type { ApprovalChallenge, ApprovalResponse, Effect, EvidencePredicate, Operation, PolicyDecision, Risk, TaskRequest } from "@melra/protocol";
1
+ import type { ApprovalChallenge, ApprovalResponse, CapabilityGrant, CapabilityTrait, Effect, EvidencePredicate, Identity, Operation, PolicyDecision, Risk, TaskRequest } from "@melra/protocol";
2
2
  export interface LocalPolicy {
3
3
  version: string;
4
4
  workspaceRoot: string;
5
5
  allowedCommands: string[];
6
6
  allowedDomains: string[];
7
7
  allowLocalhost: boolean;
8
+ /**
9
+ * What to do with a window a page opens by itself.
10
+ *
11
+ * `"block"` closes it and reports it on the action that provoked it, which is
12
+ * the honest default for an unattended agent: a popup nobody asked for is the
13
+ * page deciding what the caller looks at next. `"allow"` keeps it as an
14
+ * addressable tab. Either way it is reported — this governs whether it stays,
15
+ * not whether the caller is told. `assertSafeUrl` still governs where it may
16
+ * load from.
17
+ */
18
+ popups: "allow" | "block";
8
19
  mutations: "deny" | "confirm";
9
20
  approvalTtlMs: number;
10
21
  maxFileBytes: number;
22
+ /**
23
+ * How long unreachable memory rows are kept before compaction reclaims them,
24
+ * and an optional hard ceiling on live memories per scope.
25
+ *
26
+ * `maxPerScope: 0` means no ceiling, which is the default: evicting a live
27
+ * memory throws away something the caller stored and can still read, so it
28
+ * is opt-in. Expired and superseded rows are reclaimed regardless — no read
29
+ * path can return them.
30
+ */
31
+ memoryRetention: {
32
+ maxAgeDays: number;
33
+ maxPerScope: number;
34
+ };
35
+ /**
36
+ * Traits an operation may not carry. Empty by default — the shipped policy
37
+ * still confirms every mutation, so nothing runs unattended, and denying
38
+ * installs or the network outright is a choice only some installs want.
39
+ *
40
+ * `["package-install"]` lets a task run `npm test` but not `npm install`,
41
+ * which `allowedCommands` cannot express because it matches on the basename.
42
+ * `["network"]` refuses anything that reaches another host, browsing
43
+ * included.
44
+ */
45
+ deniedTraits: CapabilityTrait[];
46
+ /**
47
+ * Bounded authority the operator has issued, matched against the effect and
48
+ * the immediate principal before any allowlist is consulted.
49
+ *
50
+ * Empty by default, which means no capability narrowing: policy behaves as it
51
+ * always has. A non-empty list is a closed world — an effect with no matching
52
+ * grant is denied with `capability_not_granted`. This is how a caller ends up
53
+ * holding authority over one directory rather than over the whole workspace.
54
+ */
55
+ capabilities: CapabilityGrant[];
56
+ /**
57
+ * Stops a task from re-running an operation whose target keeps failing.
58
+ *
59
+ * A retry inside one task only covers a transient blip; nothing carried the
60
+ * knowledge that the last three tasks against this same file, host, or command
61
+ * all failed, so a workflow would keep spending its budget rediscovering it.
62
+ * After `threshold` consecutive failures against one target, the next task
63
+ * touching it fails immediately with `circuit_open:<target>` until
64
+ * `cooldownMs` has passed; the first task after the cooldown is the trial, and
65
+ * one success clears the count. `threshold: 0` switches it off.
66
+ */
67
+ circuitBreaker: {
68
+ threshold: number;
69
+ cooldownMs: number;
70
+ };
71
+ /**
72
+ * Switches off every guardrail this policy exists to apply: allowlists,
73
+ * evidence requirements, approval challenges, and — through the runtimes
74
+ * constructed from this policy — workspace confinement and the browser's
75
+ * private-destination block.
76
+ *
77
+ * Off unless the operator asks for it twice, once through `MELRA_UNHINGED=1`
78
+ * or `--unhinged` and once by accepting the banner the CLI prints. Nothing
79
+ * derives it from another setting.
80
+ */
81
+ unhinged: boolean;
11
82
  }
12
83
  export interface PolicyEvaluation {
13
84
  decision: PolicyDecision;
14
85
  challenge?: ApprovalChallenge;
15
86
  }
16
87
  export declare function normalizeCommandName(command: string): string;
88
+ /**
89
+ * What an operation does beyond changing local state, named so a policy can
90
+ * refuse it.
91
+ *
92
+ * `effect` answers "does this write" and `risk` answers "how badly could it
93
+ * go", but neither distinguishes `npm test` from `npm install left-pad`, and
94
+ * `allowedCommands` matches on the basename so it cannot either. An operator
95
+ * who wants a package manager for its scripts but not for fetching code from
96
+ * a registry had no way to say so. Traits are that missing axis.
97
+ *
98
+ * - `package-install` — resolves and installs third-party code, which is the
99
+ * one terminal action that can add executable content the operator never
100
+ * reviewed.
101
+ * - `network` — reaches a host outside this machine. Browser navigation
102
+ * carries it too, because it is true: `deniedTraits: ["network"]` means no
103
+ * network at all, not "no network except the browser".
104
+ */
105
+ export type { CapabilityTrait } from "@melra/protocol";
106
+ /**
107
+ * Classify a terminal command by what it does, not just by its name.
108
+ *
109
+ * Exported because the accurate answer is worth having outside policy — the
110
+ * CLI's `policy test` prints it, and it is the only place `npm ls` and `npm
111
+ * install` are told apart.
112
+ */
113
+ export declare function classifyCommand(command: string, args: readonly string[]): {
114
+ read: boolean;
115
+ traits: CapabilityTrait[];
116
+ };
17
117
  export declare function createDefaultPolicy(workspaceRoot: string): LocalPolicy;
18
118
  export declare function loadPolicy(path: string | undefined, workspaceRoot: string): Promise<LocalPolicy>;
19
119
  export declare function classifyOperation(operation: Operation): {
@@ -21,6 +121,7 @@ export declare function classifyOperation(operation: Operation): {
21
121
  risk: Risk;
22
122
  capability: string;
23
123
  target: string;
124
+ traits: CapabilityTrait[];
24
125
  };
25
126
  /**
26
127
  * Evidence a mutation must satisfy when the caller declared none.
@@ -38,6 +139,16 @@ export declare function classifyOperation(operation: Operation): {
38
139
  * unattended.
39
140
  */
40
141
  export declare function defaultEvidenceFor(operation: Operation): EvidencePredicate[];
142
+ /**
143
+ * Why the issued capabilities do not cover this effect, or `undefined` if they
144
+ * do. An empty grant list is not a closed world — it means the operator has not
145
+ * issued grants at all, and the rest of policy decides on its own.
146
+ */
147
+ export declare function capabilityRefusal(classified: {
148
+ effect: Effect;
149
+ capability: string;
150
+ target: string;
151
+ }, identity: Identity, policy: LocalPolicy): string | undefined;
41
152
  export declare function evaluatePolicy(taskId: string, request: TaskRequest, policy: LocalPolicy): PolicyEvaluation;
42
153
  export declare function digestOperation(taskId: string, operation: Operation): string;
43
154
  export declare function validateApproval(challenge: ApprovalChallenge | undefined, response: ApprovalResponse | undefined): {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,MAAM,EACN,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,IAAI,EACJ,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B;AAqDD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAI5D;AAED,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW,CAgCtE;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,WAAW,CAAC,CAWtB;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,GAAG;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,CA0HA;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,GACnB,iBAAiB,EAAE,CAyCrB;AAoCD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,WAAW,GAClB,gBAAgB,CAoGlB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,CAI5E;AAYD,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,iBAAiB,GAAG,SAAS,EACxC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,GACrC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAc9C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,MAAM,EACN,iBAAiB,EACjB,QAAQ,EACR,SAAS,EACT,cAAc,EACd,IAAI,EACJ,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAOzB,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB;;;;;;;;;OASG;IACH,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;;;;OAQG;IACH,eAAe,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D;;;;;;;;;OASG;IACH,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC;;;;;;;;OAQG;IACH,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC;;;;;;;;;;OAUG;IACH,cAAc,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D;;;;;;;;;OASG;IACH,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B;AAqDD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAI5D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AA6HvD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,GACtB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,eAAe,EAAE,CAAA;CAAE,CA6C9C;AAED,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW,CAsCtE;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,WAAW,CAAC,CAuBtB;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,GAAG;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B,CA2IA;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,GACnB,iBAAiB,EAAE,CAiDrB;AAiDD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAClE,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,WAAW,GAClB,MAAM,GAAG,SAAS,CA2BpB;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,WAAW,GAClB,gBAAgB,CA6FlB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,CAI5E;AAYD,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,iBAAiB,GAAG,SAAS,EACxC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,GACrC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAc9C"}
package/dist/index.js CHANGED
@@ -3,6 +3,7 @@
3
3
  import { readFile } from "node:fs/promises";
4
4
  import { basename, resolve } from "node:path";
5
5
  import { createHash, randomUUID } from "node:crypto";
6
+ import { CapabilityGrantSchema, LOCAL_IDENTITY, principalRef, } from "@melra/protocol";
6
7
  const READ_ONLY_GIT_ACTIONS = new Set([
7
8
  "branch",
8
9
  "diff",
@@ -56,6 +57,171 @@ export function normalizeCommandName(command) {
56
57
  const suffix = EXECUTABLE_SUFFIXES.find((item) => name.endsWith(item));
57
58
  return suffix === undefined ? name : name.slice(0, -suffix.length);
58
59
  }
60
+ /**
61
+ * Subcommands that install, per package manager, and the ones that only read.
62
+ *
63
+ * Anything unlisted falls in between: a mutation, but not an install — `npm
64
+ * run build` writes to the workspace and reaches nothing.
65
+ */
66
+ const PACKAGE_MANAGERS = {
67
+ npm: {
68
+ install: new Set(["install", "i", "add", "ci", "update", "up", "publish"]),
69
+ read: new Set(["ls", "list", "view", "info", "outdated", "why", "config"]),
70
+ },
71
+ pnpm: {
72
+ install: new Set(["install", "i", "add", "update", "up", "publish", "dlx"]),
73
+ read: new Set(["ls", "list", "view", "info", "outdated", "why", "licenses"]),
74
+ },
75
+ yarn: {
76
+ install: new Set(["install", "add", "up", "upgrade", "publish", "dlx"]),
77
+ read: new Set(["info", "why", "list", "outdated"]),
78
+ },
79
+ pip: {
80
+ install: new Set(["install", "download", "wheel"]),
81
+ read: new Set(["list", "show", "freeze", "check"]),
82
+ },
83
+ pip3: {
84
+ install: new Set(["install", "download", "wheel"]),
85
+ read: new Set(["list", "show", "freeze", "check"]),
86
+ },
87
+ uv: {
88
+ install: new Set(["add", "sync", "install", "pip", "tool", "publish"]),
89
+ read: new Set(["tree", "lock", "version"]),
90
+ },
91
+ cargo: {
92
+ install: new Set(["install", "add", "update", "publish", "fetch"]),
93
+ read: new Set(["tree", "metadata", "search"]),
94
+ },
95
+ gem: {
96
+ install: new Set(["install", "update", "push"]),
97
+ read: new Set(["list", "info", "which"]),
98
+ },
99
+ brew: {
100
+ install: new Set(["install", "upgrade", "reinstall", "tap"]),
101
+ read: new Set(["list", "info", "search", "outdated"]),
102
+ },
103
+ apt: {
104
+ install: new Set(["install", "upgrade", "full-upgrade", "update"]),
105
+ read: new Set(["list", "show", "search", "policy"]),
106
+ },
107
+ "apt-get": {
108
+ install: new Set(["install", "upgrade", "dist-upgrade", "update"]),
109
+ read: new Set(["show", "download"]),
110
+ },
111
+ go: {
112
+ install: new Set(["install", "get", "mod"]),
113
+ read: new Set(["list", "version", "env", "vet"]),
114
+ },
115
+ };
116
+ /** `npx`/`pnpx` fetch and execute a package by name; there is no read form. */
117
+ const ALWAYS_INSTALLING = new Set(["npx", "pnpx", "uvx", "pipx"]);
118
+ /** Programs whose whole purpose is to talk to another host. */
119
+ const NETWORK_COMMANDS = new Set([
120
+ "curl",
121
+ "wget",
122
+ "scp",
123
+ "sftp",
124
+ "ssh",
125
+ "rsync",
126
+ "nc",
127
+ "ncat",
128
+ "telnet",
129
+ "ftp",
130
+ ]);
131
+ /** `git` subcommands that contact a remote. */
132
+ const NETWORK_GIT_ACTIONS = new Set([
133
+ "clone",
134
+ "fetch",
135
+ "pull",
136
+ "push",
137
+ "submodule",
138
+ "ls-remote",
139
+ ]);
140
+ /**
141
+ * Flags that take their value as the next argument, so that argument is not
142
+ * the subcommand. `git -c core.pager=cat push` pushes; a naive "first
143
+ * non-flag" scan reads `core.pager=cat` as the subcommand and calls it local.
144
+ *
145
+ * The list is short on purpose: it covers the value-taking flags of the
146
+ * commands this module classifies. An unlisted one costs an unrecognised
147
+ * subcommand, which falls back to `mutate`/`medium` — the cautious answer.
148
+ */
149
+ const VALUE_TAKING_FLAGS = new Set([
150
+ "-c",
151
+ "-C",
152
+ "--config",
153
+ "--cwd",
154
+ "--dir",
155
+ "--prefix",
156
+ "--workspace",
157
+ "-w",
158
+ "--filter",
159
+ "--registry",
160
+ ]);
161
+ function subcommandOf(args) {
162
+ for (let index = 0; index < args.length; index += 1) {
163
+ const arg = args[index];
164
+ if (VALUE_TAKING_FLAGS.has(arg)) {
165
+ index += 1;
166
+ continue;
167
+ }
168
+ // `--filter=foo` carries its value inline, so nothing is skipped.
169
+ if (arg.startsWith("-"))
170
+ continue;
171
+ return arg.toLowerCase();
172
+ }
173
+ return undefined;
174
+ }
175
+ /**
176
+ * Classify a terminal command by what it does, not just by its name.
177
+ *
178
+ * Exported because the accurate answer is worth having outside policy — the
179
+ * CLI's `policy test` prints it, and it is the only place `npm ls` and `npm
180
+ * install` are told apart.
181
+ */
182
+ export function classifyCommand(command, args) {
183
+ const name = normalizeCommandName(command);
184
+ const subcommand = subcommandOf(args);
185
+ const traits = new Set();
186
+ if (NETWORK_COMMANDS.has(name))
187
+ traits.add("network");
188
+ if (name === "git" && subcommand !== undefined && NETWORK_GIT_ACTIONS.has(subcommand)) {
189
+ traits.add("network");
190
+ }
191
+ if (ALWAYS_INSTALLING.has(name)) {
192
+ traits.add("package-install");
193
+ traits.add("network");
194
+ }
195
+ const manager = PACKAGE_MANAGERS[name];
196
+ if (manager !== undefined && subcommand !== undefined) {
197
+ if (manager.install.has(subcommand)) {
198
+ traits.add("package-install");
199
+ traits.add("network");
200
+ }
201
+ if (manager.read.has(subcommand)) {
202
+ // A read subcommand of a package manager still queries the registry in
203
+ // the general case, so it keeps `network` while dropping the mutation.
204
+ return { read: true, traits: [...traits, "network"] };
205
+ }
206
+ }
207
+ const READ_COMMANDS = new Set([
208
+ "cat",
209
+ "findstr",
210
+ "head",
211
+ "ls",
212
+ "pwd",
213
+ "rg",
214
+ "tail",
215
+ "tasklist",
216
+ "wc",
217
+ "where",
218
+ ]);
219
+ const read = READ_COMMANDS.has(name) ||
220
+ (name === "git" &&
221
+ subcommand !== undefined &&
222
+ READ_ONLY_GIT_ACTIONS.has(subcommand));
223
+ return { read, traits: [...traits] };
224
+ }
59
225
  export function createDefaultPolicy(workspaceRoot) {
60
226
  return {
61
227
  version: "1",
@@ -84,9 +250,15 @@ export function createDefaultPolicy(workspaceRoot) {
84
250
  ],
85
251
  allowedDomains: ["*"],
86
252
  allowLocalhost: true,
253
+ popups: "block",
87
254
  mutations: "confirm",
88
255
  approvalTtlMs: 5 * 60_000,
89
256
  maxFileBytes: 10 * 1024 * 1024,
257
+ memoryRetention: { maxAgeDays: 30, maxPerScope: 0 },
258
+ deniedTraits: [],
259
+ capabilities: [],
260
+ circuitBreaker: { threshold: 3, cooldownMs: 60_000 },
261
+ unhinged: false,
90
262
  };
91
263
  }
92
264
  export async function loadPolicy(path, workspaceRoot) {
@@ -100,6 +272,17 @@ export async function loadPolicy(path, workspaceRoot) {
100
272
  workspaceRoot: resolve(parsed.workspaceRoot ?? workspaceRoot),
101
273
  allowedCommands: parsed.allowedCommands ?? defaults.allowedCommands,
102
274
  allowedDomains: parsed.allowedDomains ?? defaults.allowedDomains,
275
+ // Spread, not replace: a file naming only `maxPerScope` should not silently
276
+ // drop `maxAgeDays` to `undefined` and make compaction delete everything.
277
+ memoryRetention: { ...defaults.memoryRetention, ...parsed.memoryRetention },
278
+ circuitBreaker: { ...defaults.circuitBreaker, ...parsed.circuitBreaker },
279
+ deniedTraits: parsed.deniedTraits ?? defaults.deniedTraits,
280
+ // Parsed, not spread: a grant is the file claiming authority exists, so a
281
+ // malformed one has to fail loudly rather than land as an object that
282
+ // matches nothing or — worse — everything.
283
+ capabilities: parsed.capabilities === undefined
284
+ ? defaults.capabilities
285
+ : CapabilityGrantSchema.array().max(200).parse(parsed.capabilities),
103
286
  };
104
287
  }
105
288
  export function classifyOperation(operation) {
@@ -112,6 +295,7 @@ export function classifyOperation(operation) {
112
295
  risk: destructive ? "high" : read ? "low" : "medium",
113
296
  capability: `file.${operation.action}`,
114
297
  target: operation.path,
298
+ traits: [],
115
299
  };
116
300
  }
117
301
  case "terminal": {
@@ -121,34 +305,38 @@ export function classifyOperation(operation) {
121
305
  risk: "low",
122
306
  capability: `terminal.${operation.action}`,
123
307
  target: `job:${operation.jobId ?? "unknown"}`,
308
+ traits: [],
309
+ };
310
+ }
311
+ // `send` writes to a running process's stdin. It carries no command of
312
+ // its own, so it cannot be classified by one: whatever the input does is
313
+ // the already-approved job's doing, and answering a prompt is a mutation.
314
+ if (operation.action === "send") {
315
+ return {
316
+ effect: "mutate",
317
+ risk: "medium",
318
+ capability: "terminal.send",
319
+ target: `job:${operation.jobId ?? "unknown"}`,
320
+ traits: [],
124
321
  };
125
322
  }
126
323
  const command = normalizeCommandName(operation.command ?? "");
127
- const gitRead = operation.action === "run" &&
128
- command === "git" &&
129
- operation.args.length > 0 &&
130
- READ_ONLY_GIT_ACTIONS.has(operation.args[0] ?? "");
131
- const readCommands = new Set([
132
- "cat",
133
- "findstr",
134
- "head",
135
- "ls",
136
- "pwd",
137
- "rg",
138
- "tail",
139
- "tasklist",
140
- "wc",
141
- "where",
142
- ]);
143
- const read = readCommands.has(command) || gitRead;
144
- const packageMutation = new Set(["npm", "npx", "pnpm"]).has(command);
324
+ const { read, traits } = classifyCommand(operation.command ?? "", operation.args);
145
325
  return {
146
326
  effect: read ? "read" : "mutate",
147
- risk: packageMutation ? "high" : read ? "low" : "medium",
327
+ // Installing third-party code is the high-risk case, not the package
328
+ // manager's name: `npm run build` is an ordinary mutation and `npm ls`
329
+ // is a read, which the old blanket rule called high-risk alongside it.
330
+ risk: traits.includes("package-install")
331
+ ? "high"
332
+ : read
333
+ ? "low"
334
+ : "medium",
148
335
  capability: `terminal.${operation.action}`,
149
336
  target: operation.action === "stop"
150
337
  ? `job:${operation.jobId ?? "unknown"}`
151
338
  : `command:${command}`,
339
+ traits,
152
340
  };
153
341
  }
154
342
  case "browser": {
@@ -185,6 +373,9 @@ export function classifyOperation(operation) {
185
373
  target.hash = "";
186
374
  return target.toString();
187
375
  })(),
376
+ // Driving a page is a network act whether or not the caller named a
377
+ // URL: a click can fetch, and a stale tab is still a live connection.
378
+ traits: ["network"],
188
379
  };
189
380
  }
190
381
  case "memory": {
@@ -195,18 +386,24 @@ export function classifyOperation(operation) {
195
386
  risk: destructive ? "high" : read ? "low" : "medium",
196
387
  capability: `memory.${operation.action}`,
197
388
  target: `${operation.scope}:${operation.action}:${operation.id ?? operation.key ?? "*"}`,
389
+ traits: [],
198
390
  };
199
391
  }
200
392
  case "computer": {
201
393
  const read = operation.action === "capabilities" ||
394
+ operation.action === "inspect" ||
202
395
  operation.action === "screenshot";
396
+ const positional = operation.action === "click" ||
397
+ operation.action === "move" ||
398
+ operation.action === "drag";
203
399
  return {
204
400
  effect: read ? "read" : "mutate",
205
401
  risk: read ? "low" : "high",
206
402
  capability: `computer.${operation.action}`,
207
- target: operation.action === "click" || operation.action === "move"
403
+ target: positional
208
404
  ? `${operation.coordinateSpace}:${operation.x ?? "?"},${operation.y ?? "?"}`
209
405
  : "active-desktop",
406
+ traits: [],
210
407
  };
211
408
  }
212
409
  case "system":
@@ -215,6 +412,7 @@ export function classifyOperation(operation) {
215
412
  risk: "low",
216
413
  capability: "system.info",
217
414
  target: "local-system",
415
+ traits: [],
218
416
  };
219
417
  }
220
418
  }
@@ -272,21 +470,29 @@ export function defaultEvidenceFor(operation) {
272
470
  // These adapters report an explicit `success` flag; hold the task to it
273
471
  // rather than letting a silent no-op pass as a completed action.
274
472
  return [{ type: "result_equals", path: "success", value: true }];
473
+ case "terminal":
474
+ // `run`/`start` say nothing about what the command should leave behind,
475
+ // so there is no honest post-condition. `send` does: the runtime reports
476
+ // whether the bytes reached a job that was still running and accepting
477
+ // input, and a write to a dead or non-interactive job throws instead.
478
+ return operation.action === "send"
479
+ ? [{ type: "result_equals", path: "sent", value: true }]
480
+ : [];
275
481
  default:
276
482
  return [];
277
483
  }
278
484
  }
279
- function deny(effect, risk, reason, version) {
280
- return { outcome: "deny", effect, risk, reason, policyVersion: version };
281
- }
282
485
  function isCommandAllowed(operation, policy) {
283
486
  if (operation.kind !== "terminal")
284
487
  return true;
285
488
  if (operation.action === "status" || operation.action === "output") {
286
489
  return operation.jobId !== undefined;
287
490
  }
288
- if (operation.action === "stop")
491
+ // `stop` and `send` act on a job the allowlist already cleared when it
492
+ // started, so the job id is the whole gate — there is no command to match.
493
+ if (operation.action === "stop" || operation.action === "send") {
289
494
  return operation.jobId !== undefined;
495
+ }
290
496
  if (operation.command === undefined)
291
497
  return false;
292
498
  const command = normalizeCommandName(operation.command);
@@ -309,60 +515,113 @@ function domainAllowed(operation, policy) {
309
515
  host === domain.toLowerCase() ||
310
516
  host.endsWith(`.${domain.toLowerCase()}`));
311
517
  }
518
+ /**
519
+ * `*` stands for any run of characters; everything else is literal. Enough for
520
+ * `file.*` and `/repo/build/*`, and small enough that a policy author can
521
+ * predict what it matches.
522
+ */
523
+ function patternMatches(pattern, value) {
524
+ if (pattern === "*")
525
+ return true;
526
+ const escaped = pattern
527
+ .replace(/[.*+?^${}()|[\]\\]/g, "\\$&")
528
+ .replaceAll("\\*", ".*");
529
+ return new RegExp(`^${escaped}$`).test(value);
530
+ }
531
+ /**
532
+ * Why the issued capabilities do not cover this effect, or `undefined` if they
533
+ * do. An empty grant list is not a closed world — it means the operator has not
534
+ * issued grants at all, and the rest of policy decides on its own.
535
+ */
536
+ export function capabilityRefusal(classified, identity, policy) {
537
+ if (policy.capabilities.length === 0)
538
+ return undefined;
539
+ const holder = principalRef(identity.principal);
540
+ const matching = policy.capabilities.filter((grant) => patternMatches(grant.capability, classified.capability) &&
541
+ grant.effects.includes(classified.effect) &&
542
+ patternMatches(grant.target, classified.target) &&
543
+ patternMatches(grant.principal, holder));
544
+ if (matching.length === 0) {
545
+ return `capability_not_granted:${classified.capability}`;
546
+ }
547
+ const usable = matching.filter((grant) => (grant.validUntil === undefined ||
548
+ Date.parse(grant.validUntil) > Date.now()) &&
549
+ (grant.policyVersion === undefined ||
550
+ grant.policyVersion === policy.version));
551
+ if (usable.length > 0)
552
+ return undefined;
553
+ // Every candidate matched the effect and was refused for a reason the holder
554
+ // can act on, so name it rather than reporting a missing grant.
555
+ const stale = matching.find((grant) => grant.policyVersion !== policy.version);
556
+ return stale?.policyVersion !== undefined
557
+ ? `capability_policy_version_mismatch:${stale.id}`
558
+ : `capability_expired:${matching[0]?.id ?? classified.capability}`;
559
+ }
312
560
  export function evaluatePolicy(taskId, request, policy) {
313
561
  const classified = classifyOperation(request.operation);
562
+ // Every decision reports the same classification it was made from, including
563
+ // the traits, so an approver reading a `confirm` sees that the command
564
+ // installs packages and reaches a registry before echoing the phrase back.
565
+ const decide = (outcome, reason, risk = classified.risk) => ({
566
+ outcome,
567
+ effect: classified.effect,
568
+ risk,
569
+ reason,
570
+ policyVersion: policy.version,
571
+ traits: classified.traits,
572
+ });
314
573
  if (request.constraints.length > 0) {
315
574
  return {
316
- decision: deny(classified.effect, classified.risk, "freeform_constraints_not_enforceable", policy.version),
575
+ decision: decide("deny", "freeform_constraints_not_enforceable"),
317
576
  };
318
577
  }
319
578
  if (request.forbiddenEffects.includes(classified.effect)) {
320
- return {
321
- decision: deny(classified.effect, classified.risk, "effect_forbidden_by_request", policy.version),
322
- };
579
+ return { decision: decide("deny", "effect_forbidden_by_request") };
580
+ }
581
+ // Unhinged mode allows everything the operator did not forbid in this very
582
+ // request. It sits after the `forbiddenEffects` check on purpose: that field
583
+ // is the caller declaring a limit on its own task, not a guardrail MELRA
584
+ // imposes, and a caller that asked for no destructive effects should still get
585
+ // none. Everything below — allowlists, evidence, approval — is MELRA's own
586
+ // judgement, and unhinged mode is the operator saying they do not want it.
587
+ if (policy.unhinged) {
588
+ return { decision: decide("allow", "unhinged_mode_no_guardrails") };
589
+ }
590
+ // Authority before rules: a caller that was never granted this effect is
591
+ // refused without consulting the allowlists, which describe what the grant
592
+ // holder may do, not whether they hold one.
593
+ const ungranted = capabilityRefusal(classified, request.identity ?? LOCAL_IDENTITY, policy);
594
+ if (ungranted !== undefined) {
595
+ return { decision: decide("deny", ungranted, "critical") };
596
+ }
597
+ const deniedTrait = classified.traits.find((trait) => policy.deniedTraits.includes(trait));
598
+ if (deniedTrait !== undefined) {
599
+ return { decision: decide("deny", `trait_denied:${deniedTrait}`) };
323
600
  }
324
601
  if (!isCommandAllowed(request.operation, policy)) {
325
602
  return {
326
- decision: deny(classified.effect, "critical", "command_not_allowlisted", policy.version),
603
+ decision: decide("deny", "command_not_allowlisted", "critical"),
327
604
  };
328
605
  }
329
606
  if (!domainAllowed(request.operation, policy)) {
330
607
  return {
331
- decision: deny(classified.effect, "high", "browser_domain_not_allowed", policy.version),
608
+ decision: decide("deny", "browser_domain_not_allowed", "high"),
332
609
  };
333
610
  }
334
611
  if (classified.effect !== "read" && request.requiredEvidence.length === 0) {
335
- return {
336
- decision: deny(classified.effect, classified.risk, "mutation_requires_evidence", policy.version),
337
- };
612
+ return { decision: decide("deny", "mutation_requires_evidence") };
338
613
  }
339
614
  if (classified.effect === "read") {
340
- return {
341
- decision: {
342
- outcome: "allow",
343
- effect: classified.effect,
344
- risk: classified.risk,
345
- reason: "read_only_operation",
346
- policyVersion: policy.version,
347
- },
348
- };
615
+ return { decision: decide("allow", "read_only_operation") };
349
616
  }
350
617
  if (policy.mutations === "deny") {
351
- return {
352
- decision: deny(classified.effect, classified.risk, "mutations_disabled", policy.version),
353
- };
618
+ return { decision: decide("deny", "mutations_disabled") };
354
619
  }
355
620
  const digest = digestOperation(taskId, request.operation);
356
621
  const approvalId = randomUUID();
357
622
  const phrase = `APPROVE ${digest.slice(0, 12)}`;
358
623
  return {
359
- decision: {
360
- outcome: "confirm",
361
- effect: classified.effect,
362
- risk: classified.risk,
363
- reason: "explicit_approval_required",
364
- policyVersion: policy.version,
365
- },
624
+ decision: decide("confirm", "explicit_approval_required"),
366
625
  challenge: {
367
626
  approvalId,
368
627
  taskId,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,sCAAsC;AAEtC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA4BrD,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,QAAQ;IACR,MAAM;IACN,KAAK;IACL,WAAW;IACX,MAAM;IACN,QAAQ;IACR,KAAK;CACN,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;IACrC,MAAM;IACN,KAAK;IACL,MAAM;IACN,WAAW;IACX,YAAY;IACZ,MAAM;IACN,IAAI;IACJ,MAAM;IACN,IAAI;IACJ,KAAK;CACN,CAAC,CAAC;AAEH;;;;;;;;;;;;;;GAcG;AACH;;;;;;;;;;GAUG;AACH,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAErE,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACnE,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACvE,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,aAAqB;IACvD,OAAO;QACL,OAAO,EAAE,GAAG;QACZ,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC;QACrC,2EAA2E;QAC3E,2EAA2E;QAC3E,2EAA2E;QAC3E,2EAA2E;QAC3E,eAAe,EAAE;YACf,KAAK;YACL,MAAM;YACN,SAAS;YACT,KAAK;YACL,MAAM;YACN,IAAI;YACJ,MAAM;YACN,KAAK;YACL,KAAK;YACL,MAAM;YACN,KAAK;YACL,IAAI;YACJ,MAAM;YACN,UAAU;YACV,IAAI;YACJ,OAAO;SACR;QACD,cAAc,EAAE,CAAC,GAAG,CAAC;QACrB,cAAc,EAAE,IAAI;QACpB,SAAS,EAAE,SAAS;QACpB,aAAa,EAAE,CAAC,GAAG,MAAM;QACzB,YAAY,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;KAC/B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAwB,EACxB,aAAqB;IAErB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;IACpD,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAyB,CAAC;IAChF,OAAO;QACL,GAAG,QAAQ;QACX,GAAG,MAAM;QACT,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,IAAI,aAAa,CAAC;QAC7D,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,QAAQ,CAAC,eAAe;QACnE,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,QAAQ,CAAC,cAAc;KACjE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAAoB;IAMpD,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC7E,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC;YAClD,OAAO;gBACL,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;gBAC9D,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;gBACpD,UAAU,EAAE,QAAQ,SAAS,CAAC,MAAM,EAAE;gBACtC,MAAM,EAAE,SAAS,CAAC,IAAI;aACvB,CAAC;QACJ,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,IAAI,SAAS,CAAC,MAAM,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACnE,OAAO;oBACL,MAAM,EAAE,MAAM;oBACd,IAAI,EAAE,KAAK;oBACX,UAAU,EAAE,YAAY,SAAS,CAAC,MAAM,EAAE;oBAC1C,MAAM,EAAE,OAAO,SAAS,CAAC,KAAK,IAAI,SAAS,EAAE;iBAC9C,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,GAAG,oBAAoB,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAC9D,MAAM,OAAO,GACX,SAAS,CAAC,MAAM,KAAK,KAAK;gBAC1B,OAAO,KAAK,KAAK;gBACjB,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;gBACzB,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACrD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;gBAC3B,KAAK;gBACL,SAAS;gBACT,MAAM;gBACN,IAAI;gBACJ,KAAK;gBACL,IAAI;gBACJ,MAAM;gBACN,UAAU;gBACV,IAAI;gBACJ,OAAO;aACR,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC;YAClD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrE,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;gBAChC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;gBACxD,UAAU,EAAE,YAAY,SAAS,CAAC,MAAM,EAAE;gBAC1C,MAAM,EACJ,SAAS,CAAC,MAAM,KAAK,MAAM;oBACzB,CAAC,CAAC,OAAO,SAAS,CAAC,KAAK,IAAI,SAAS,EAAE;oBACvC,CAAC,CAAC,WAAW,OAAO,EAAE;aAC3B,CAAC;QACJ,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,yEAAyE;YACzE,iEAAiE;YACjE,yEAAyE;YACzE,wEAAwE;YACxE,yEAAyE;YACzE,cAAc;YACd,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC;gBACnB,UAAU;gBACV,MAAM;gBACN,SAAS;gBACT,QAAQ;gBACR,SAAS;gBACT,MAAM;gBACN,YAAY;gBACZ,MAAM;gBACN,SAAS;gBACT,YAAY;gBACZ,QAAQ;aACT,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACzB,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;gBAChC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;gBAC7B,UAAU,EAAE,WAAW,SAAS,CAAC,MAAM,EAAE;gBACzC,MAAM,EACJ,SAAS,CAAC,GAAG,KAAK,SAAS;oBACzB,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ;wBAC1B,SAAS,CAAC,MAAM,EAAE,IAAI;wBACtB,aAAa;oBACf,CAAC,CAAC,CAAC,GAAG,EAAE;wBACJ,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;wBACtC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;wBACnB,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;wBACjB,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;oBAC3B,CAAC,CAAC,EAAE;aACX,CAAC;QACJ,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM,CAAC;YAC1E,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,KAAK,OAAO,CAAC;YAClF,OAAO;gBACL,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;gBAC9D,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;gBACpD,UAAU,EAAE,UAAU,SAAS,CAAC,MAAM,EAAE;gBACxC,MAAM,EAAE,GAAG,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,IAC5C,SAAS,CAAC,EAAE,IAAI,SAAS,CAAC,GAAG,IAAI,GACnC,EAAE;aACH,CAAC;QACJ,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,IAAI,GACR,SAAS,CAAC,MAAM,KAAK,cAAc;gBACnC,SAAS,CAAC,MAAM,KAAK,YAAY,CAAC;YACpC,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;gBAChC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;gBAC3B,UAAU,EAAE,YAAY,SAAS,CAAC,MAAM,EAAE;gBAC1C,MAAM,EACJ,SAAS,CAAC,MAAM,KAAK,OAAO,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM;oBACzD,CAAC,CAAC,GAAG,SAAS,CAAC,eAAe,IAAI,SAAS,CAAC,CAAC,IAAI,GAAG,IAAI,SAAS,CAAC,CAAC,IAAI,GAAG,EAAE;oBAC5E,CAAC,CAAC,gBAAgB;aACvB,CAAC;QACJ,CAAC;QACD,KAAK,QAAQ;YACX,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,KAAK;gBACX,UAAU,EAAE,aAAa;gBACzB,MAAM,EAAE,cAAc;aACvB,CAAC;IACN,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAAoB;IAEpB,yEAAyE;IACzE,6EAA6E;IAC7E,wEAAwE;IACxE,IAAI,iBAAiB,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC;IAC9D,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;QACvB,KAAK,MAAM;YACT,QAAQ,SAAS,CAAC,MAAM,EAAE,CAAC;gBACzB,KAAK,OAAO,CAAC;gBACb,KAAK,OAAO;oBACV,OAAO,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;gBACzD,KAAK,QAAQ;oBACX,OAAO,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;gBACzD,KAAK,MAAM;oBACT,OAAO,SAAS,CAAC,WAAW,KAAK,SAAS;wBACxC,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC;4BACE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE;4BAC7C,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,CAAC,WAAW,EAAE;yBACrD,CAAC;gBACR;oBACE,OAAO,EAAE,CAAC;YACd,CAAC;QACH,KAAK,QAAQ;YACX,2EAA2E;YAC3E,uEAAuE;YACvE,mEAAmE;YACnE,4BAA4B;YAC5B,OAAO,SAAS,CAAC,MAAM,KAAK,KAAK;gBAC/B,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;gBAC1D,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,QAAQ;oBAC7B,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;oBAC3D,CAAC,CAAC,EAAE,CAAC;QACX,KAAK,SAAS,CAAC;QACf,KAAK,UAAU;YACb,wEAAwE;YACxE,iEAAiE;YACjE,OAAO,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,IAAI,CAAC,MAAc,EAAE,IAAU,EAAE,MAAc,EAAE,OAAe;IACvE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;AAC3E,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAoB,EAAE,MAAmB;IACjE,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,SAAS,CAAC,MAAM,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACnE,OAAO,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC;IACvC,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC;IACtE,IAAI,SAAS,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,OAAO,GAAG,oBAAoB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACxD,6EAA6E;IAC7E,gFAAgF;IAChF,IAAI,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACtD,OAAO,MAAM,CAAC,eAAe,CAAC,IAAI,CAChC,CAAC,OAAO,EAAE,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,KAAK,OAAO,CACvD,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,SAAoB,EAAE,MAAmB;IAC9D,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,GAAG,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC7E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IACxC,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,MAAM,CAAC,cAAc,CAAC;IACtF,OAAO,MAAM,CAAC,cAAc,CAAC,IAAI,CAC/B,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,KAAK,GAAG;QACd,IAAI,KAAK,MAAM,CAAC,WAAW,EAAE;QAC7B,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAC5C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,OAAoB,EACpB,MAAmB;IAEnB,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAExD,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO;YACL,QAAQ,EAAE,IAAI,CACZ,UAAU,CAAC,MAAM,EACjB,UAAU,CAAC,IAAI,EACf,sCAAsC,EACtC,MAAM,CAAC,OAAO,CACf;SACF,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,OAAO;YACL,QAAQ,EAAE,IAAI,CACZ,UAAU,CAAC,MAAM,EACjB,UAAU,CAAC,IAAI,EACf,6BAA6B,EAC7B,MAAM,CAAC,OAAO,CACf;SACF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC;QACjD,OAAO;YACL,QAAQ,EAAE,IAAI,CACZ,UAAU,CAAC,MAAM,EACjB,UAAU,EACV,yBAAyB,EACzB,MAAM,CAAC,OAAO,CACf;SACF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC;QAC9C,OAAO;YACL,QAAQ,EAAE,IAAI,CACZ,UAAU,CAAC,MAAM,EACjB,MAAM,EACN,4BAA4B,EAC5B,MAAM,CAAC,OAAO,CACf;SACF,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1E,OAAO;YACL,QAAQ,EAAE,IAAI,CACZ,UAAU,CAAC,MAAM,EACjB,UAAU,CAAC,IAAI,EACf,4BAA4B,EAC5B,MAAM,CAAC,OAAO,CACf;SACF,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QACjC,OAAO;YACL,QAAQ,EAAE;gBACR,OAAO,EAAE,OAAO;gBAChB,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,MAAM,EAAE,qBAAqB;gBAC7B,aAAa,EAAE,MAAM,CAAC,OAAO;aAC9B;SACF,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;QAChC,OAAO;YACL,QAAQ,EAAE,IAAI,CACZ,UAAU,CAAC,MAAM,EACjB,UAAU,CAAC,IAAI,EACf,oBAAoB,EACpB,MAAM,CAAC,OAAO,CACf;SACF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,WAAW,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAChD,OAAO;QACL,QAAQ,EAAE;YACR,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,MAAM,EAAE,4BAA4B;YACpC,aAAa,EAAE,MAAM,CAAC,OAAO;SAC9B;QACD,SAAS,EAAE;YACT,UAAU;YACV,MAAM;YACN,YAAY,EAAE,MAAM;YACpB,MAAM;YACN,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE;SACrE;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,SAAoB;IAClE,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;SACzC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC;IACxF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACxE,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;SAC3B,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;SACjE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,SAAwC,EACxC,QAAsC;IAEtC,IAAI,SAAS,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACtD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IACpD,CAAC;IACD,IAAI,SAAS,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC;QACjD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;IACvD,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QACzC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,0BAA0B,EAAE,CAAC;IAC3D,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAClD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;IACnD,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  import { describe, expect, it } from "vitest";
4
4
  import { TaskRequestSchema } from "@melra/protocol";
5
- import { createDefaultPolicy, defaultEvidenceFor, evaluatePolicy, validateApproval, } from "./index.js";
5
+ import { classifyCommand, classifyOperation, createDefaultPolicy, defaultEvidenceFor, evaluatePolicy, validateApproval, } from "./index.js";
6
6
  const root = "/tmp/melra-policy-test";
7
7
  describe("local policy", () => {
8
8
  it("allows a read-only file operation", () => {
@@ -162,6 +162,8 @@ describe("default evidence", () => {
162
162
  action: "run",
163
163
  command: "npm",
164
164
  args: ["run", "build"],
165
+ interactive: false,
166
+ appendNewline: true,
165
167
  timeoutMs: 30_000,
166
168
  maxOutputChars: 100_000,
167
169
  })).toEqual([]);
@@ -256,4 +258,225 @@ describe("Windows command spellings", () => {
256
258
  expect(plan("npm.cmd", ["install"]).risk).toBe("high");
257
259
  });
258
260
  });
261
+ describe("interactive terminal input", () => {
262
+ const send = (jobId) => evaluatePolicy("00000000-0000-4000-8000-000000000000", TaskRequestSchema.parse({
263
+ goal: "Answer a prompt",
264
+ operation: {
265
+ kind: "terminal",
266
+ action: "send",
267
+ ...(jobId === undefined ? {} : { jobId }),
268
+ input: "y",
269
+ },
270
+ // What `defaultEvidenceFor` supplies on the controller's path; spelled
271
+ // out here because `evaluatePolicy` does not derive it.
272
+ requiredEvidence: [{ type: "result_equals", path: "sent", value: true }],
273
+ }), createDefaultPolicy(root));
274
+ it("gates on the job id, since the command was allowlisted at start", () => {
275
+ // `send` carries no command, so the allowlist has nothing to match. Falling
276
+ // through to the command branch would deny every prompt answer outright.
277
+ expect(send().decision.reason).toBe("command_not_allowlisted");
278
+ const decision = send("d1a4c4de-1b0e-4e17-9f4d-2f5c9b6a71e2").decision;
279
+ expect(decision.outcome).toBe("confirm");
280
+ expect(decision.effect).toBe("mutate");
281
+ });
282
+ it("derives the post-condition the runtime actually reports", () => {
283
+ // Without this, a `send` with no declared evidence is denied for missing
284
+ // evidence and interactive commands are unusable through the default path.
285
+ expect(defaultEvidenceFor({
286
+ kind: "terminal",
287
+ action: "send",
288
+ jobId: "d1a4c4de-1b0e-4e17-9f4d-2f5c9b6a71e2",
289
+ input: "y",
290
+ interactive: false,
291
+ appendNewline: true,
292
+ timeoutMs: 30_000,
293
+ maxOutputChars: 100_000,
294
+ })).toEqual([{ type: "result_equals", path: "sent", value: true }]);
295
+ });
296
+ });
297
+ describe("unhinged mode", () => {
298
+ const unhinged = { ...createDefaultPolicy(root), unhinged: true };
299
+ const plan = (request, policy = unhinged) => evaluatePolicy("00000000-0000-4000-8000-000000000000", TaskRequestSchema.parse(request), policy);
300
+ it("is off unless something explicitly turns it on", () => {
301
+ expect(createDefaultPolicy(root).unhinged).toBe(false);
302
+ });
303
+ it("allows a shell, an unlisted command, and evidence-free destruction", () => {
304
+ for (const operation of [
305
+ { kind: "terminal", action: "run", command: "bash", args: ["-c", "id"] },
306
+ { kind: "terminal", action: "run", command: "curl", args: ["example.com"] },
307
+ { kind: "file", action: "delete", path: "everything" },
308
+ ]) {
309
+ const result = plan({ goal: "Do it anyway", operation });
310
+ expect(result.decision.outcome).toBe("allow");
311
+ expect(result.decision.reason).toBe("unhinged_mode_no_guardrails");
312
+ // No challenge means no approval step: nothing to echo back, nothing to
313
+ // expire. That is the whole point of the mode and the whole danger of it.
314
+ expect(result.challenge).toBeUndefined();
315
+ }
316
+ });
317
+ it("reports the real effect and risk rather than flattening them", () => {
318
+ // Allowing everything is not the same as pretending everything is harmless:
319
+ // the receipt still has to say a destructive operation was destructive.
320
+ const result = plan({
321
+ goal: "Delete it",
322
+ operation: { kind: "file", action: "delete", path: "everything" },
323
+ });
324
+ expect(result.decision.effect).toBe("destructive");
325
+ expect(result.decision.risk).toBe("high");
326
+ });
327
+ it("still honours limits the caller declared on its own request", () => {
328
+ // `forbiddenEffects` and `constraints` are the caller bounding its own task,
329
+ // not MELRA imposing a guardrail, so unhinged mode does not overrule them.
330
+ expect(plan({
331
+ goal: "Delete it",
332
+ operation: { kind: "file", action: "delete", path: "everything" },
333
+ forbiddenEffects: ["destructive"],
334
+ }).decision.reason).toBe("effect_forbidden_by_request");
335
+ expect(plan({
336
+ goal: "Delete it",
337
+ operation: { kind: "file", action: "delete", path: "everything" },
338
+ constraints: ["be careful"],
339
+ }).decision.reason).toBe("freeform_constraints_not_enforceable");
340
+ });
341
+ it("changes nothing for a policy that did not ask for it", () => {
342
+ expect(plan({
343
+ goal: "Run a shell",
344
+ operation: { kind: "terminal", action: "run", command: "bash" },
345
+ requiredEvidence: [{ type: "exit_code", value: 0 }],
346
+ }, createDefaultPolicy(root)).decision.reason).toBe("command_not_allowlisted");
347
+ });
348
+ });
349
+ describe("capability traits", () => {
350
+ const terminal = (command, args = []) => classifyOperation({
351
+ kind: "terminal",
352
+ action: "run",
353
+ command,
354
+ args,
355
+ env: {},
356
+ timeoutMs: 30_000,
357
+ maxOutputChars: 10_000,
358
+ });
359
+ it("tells a package manager's subcommands apart", () => {
360
+ // The old rule was the command's name alone, so all three of these were
361
+ // high-risk mutations — including the one that only reads.
362
+ expect(terminal("npm", ["ls"]).effect).toBe("read");
363
+ expect(terminal("npm", ["run", "build"])).toMatchObject({
364
+ effect: "mutate",
365
+ risk: "medium",
366
+ traits: [],
367
+ });
368
+ expect(terminal("npm", ["install", "left-pad"])).toMatchObject({
369
+ effect: "mutate",
370
+ risk: "high",
371
+ traits: ["package-install", "network"],
372
+ });
373
+ });
374
+ it("reads past flags to find the subcommand", () => {
375
+ expect(classifyCommand("npm", ["--silent", "install"]).traits).toContain("package-install");
376
+ expect(classifyCommand("git", ["-c", "core.pager=cat", "push"])).toEqual({
377
+ read: false,
378
+ traits: ["network"],
379
+ });
380
+ });
381
+ it("marks commands that reach another host", () => {
382
+ expect(classifyCommand("curl", ["https://example.com"]).traits).toEqual([
383
+ "network",
384
+ ]);
385
+ expect(classifyCommand("git", ["status"])).toEqual({
386
+ read: true,
387
+ traits: [],
388
+ });
389
+ expect(classifyCommand("npx", ["cowsay"]).traits).toEqual([
390
+ "package-install",
391
+ "network",
392
+ ]);
393
+ // Browsing is a network act too, so denying `network` denies it as well.
394
+ expect(classifyOperation({
395
+ kind: "browser",
396
+ action: "navigate",
397
+ url: "https://example.com",
398
+ }).traits).toEqual(["network"]);
399
+ });
400
+ it("refuses a denied trait before the allowlist is consulted", () => {
401
+ const policy = createDefaultPolicy(root);
402
+ policy.deniedTraits = ["package-install"];
403
+ const run = (args) => evaluatePolicy("4c5a0130-71a5-4c48-b22d-c7901f12688f", TaskRequestSchema.parse({
404
+ goal: "Use npm",
405
+ operation: { kind: "terminal", action: "run", command: "npm", args },
406
+ requiredEvidence: [{ type: "exit_code", value: 0 }],
407
+ }), policy).decision;
408
+ // `allowedCommands` matches on the basename, so it cannot express this.
409
+ expect(run(["install", "left-pad"])).toMatchObject({
410
+ outcome: "deny",
411
+ reason: "trait_denied:package-install",
412
+ });
413
+ expect(run(["run", "test"]).outcome).toBe("confirm");
414
+ });
415
+ it("allows a denied trait when there are no guardrails at all", () => {
416
+ const policy = { ...createDefaultPolicy(root), unhinged: true };
417
+ policy.deniedTraits = ["network"];
418
+ expect(evaluatePolicy("4c5a0130-71a5-4c48-b22d-c7901f12688f", TaskRequestSchema.parse({
419
+ goal: "Fetch a page",
420
+ operation: { kind: "browser", action: "navigate", url: "https://example.com" },
421
+ }), policy).decision.reason).toBe("unhinged_mode_no_guardrails");
422
+ });
423
+ });
424
+ describe("capability grants", () => {
425
+ const taskId = "4c5a0130-71a5-4c48-b22d-c7901f12688f";
426
+ const identity = {
427
+ principal: { kind: "agent", id: "claude-code" },
428
+ onBehalfOf: [
429
+ { kind: "organization", id: "acme" },
430
+ { kind: "human", id: "dheeraj" },
431
+ ],
432
+ };
433
+ const read = (extra = {}) => TaskRequestSchema.parse({
434
+ goal: "Read the changelog",
435
+ operation: { kind: "file", action: "read", path: "CHANGELOG.md" },
436
+ ...extra,
437
+ });
438
+ const grant = (overrides = {}) => ({
439
+ id: "g1",
440
+ capability: "file.*",
441
+ effects: ["read"],
442
+ target: "*",
443
+ principal: "agent:claude-code",
444
+ ...overrides,
445
+ });
446
+ const decide = (request, capabilities) => evaluatePolicy(taskId, request, {
447
+ ...createDefaultPolicy(root),
448
+ capabilities: capabilities,
449
+ }).decision;
450
+ it("leaves policy alone when no grants are issued", () => {
451
+ expect(decide(read({ identity }), []).outcome).toBe("allow");
452
+ });
453
+ it("denies an effect no grant covers", () => {
454
+ expect(decide(read({ identity }), [grant({ capability: "browser.*" })])).toMatchObject({
455
+ outcome: "deny",
456
+ reason: "capability_not_granted:file.read",
457
+ });
458
+ });
459
+ it("matches the capability, effect, target, and holder", () => {
460
+ expect(decide(read({ identity }), [grant()]).outcome).toBe("allow");
461
+ // Same grant, different holder.
462
+ expect(decide(read({ identity }), [grant({ principal: "agent:other" })]).reason).toBe("capability_not_granted:file.read");
463
+ // Same holder, target outside the grant.
464
+ expect(decide(read({ identity }), [grant({ target: "/elsewhere/*" })]).reason).toBe("capability_not_granted:file.read");
465
+ });
466
+ it("refuses a grant that has expired or names another policy version", () => {
467
+ expect(decide(read({ identity }), [grant({ validUntil: "2020-01-01T00:00:00.000Z" })])).toMatchObject({ outcome: "deny", reason: "capability_expired:g1" });
468
+ expect(decide(read({ identity }), [grant({ policyVersion: "99" })]).reason).toBe("capability_policy_version_mismatch:g1");
469
+ });
470
+ it("falls back to the local principal when the caller declares none", () => {
471
+ expect(decide(read(), [grant({ principal: "agent:local" })]).outcome).toBe("allow");
472
+ expect(decide(read(), [grant()]).reason).toBe("capability_not_granted:file.read");
473
+ });
474
+ it("grants nothing when there are no guardrails at all", () => {
475
+ expect(evaluatePolicy(taskId, read({ identity }), {
476
+ ...createDefaultPolicy(root),
477
+ unhinged: true,
478
+ capabilities: [grant({ capability: "browser.*" })],
479
+ }).decision.reason).toBe("unhinged_mode_no_guardrails");
480
+ });
481
+ });
259
482
  //# sourceMappingURL=index.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,sCAAsC;AAEtC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAEpB,MAAM,IAAI,GAAG,wBAAwB,CAAC;AAEtC,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC;YACtC,IAAI,EAAE,oBAAoB;YAC1B,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE;SAClE,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,cAAc,CAC3B,sCAAsC,EACtC,OAAO,EACP,mBAAmB,CAAC,IAAI,CAAC,CAC1B,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,eAAe,GAAG,iBAAiB,CAAC,KAAK,CAAC;YAC9C,IAAI,EAAE,cAAc;YACpB,SAAS,EAAE;gBACT,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,OAAO;gBACf,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,UAAU;aACpB;SACF,CAAC,CAAC;QACH,MAAM,CACJ,cAAc,CACZ,sCAAsC,EACtC,eAAe,EACf,mBAAmB,CAAC,IAAI,CAAC,CAC1B,CAAC,QAAQ,CAAC,MAAM,CAClB,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAErC,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC;YACtC,GAAG,eAAe;YAClB,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;SAChE,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,cAAc,CAC3B,sCAAsC,EACtC,OAAO,EACP,mBAAmB,CAAC,IAAI,CAAC,CAC1B,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC;YACtC,IAAI,EAAE,2BAA2B;YACjC,SAAS,EAAE;gBACT,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC;aAC7B;SACF,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,CACJ,cAAc,CACZ,sCAAsC,EACtC,OAAO,EACP,MAAM,CACP,CAAC,QAAQ,CAAC,MAAM,CAClB,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC;YACtC,IAAI,EAAE,oCAAoC;YAC1C,SAAS,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE;SACxD,CAAC,CAAC;QACH,MAAM,CACJ,cAAc,CACZ,sCAAsC,EACtC,OAAO,EACP,mBAAmB,CAAC,IAAI,CAAC,CAC1B,CAAC,QAAQ,CAAC,OAAO,CACnB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEhB,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC;YACpC,IAAI,EAAE,iCAAiC;YACvC,SAAS,EAAE;gBACT,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,OAAO;gBACf,eAAe,EAAE,YAAY;gBAC7B,CAAC,EAAE,GAAG;gBACN,CAAC,EAAE,GAAG;aACP;YACD,gBAAgB,EAAE;gBAChB,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE;aACxD;SACF,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,cAAc,CAC7B,sCAAsC,EACtC,KAAK,EACL,mBAAmB,CAAC,IAAI,CAAC,CAC1B,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC;YACtC,IAAI,EAAE,gBAAgB;YACtB,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,WAAW;gBAClB,GAAG,EAAE,SAAS;gBACd,KAAK,EAAE,OAAO;aACf;YACD,gBAAgB,EAAE;gBAChB,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE;aACvD;SACF,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,cAAc,CAC3B,sCAAsC,EACtC,OAAO,EACP,mBAAmB,CAAC,IAAI,CAAC,CAC1B,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACnC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,CACJ,gBAAgB,CAAC,SAAS,EAAE;YAC1B,UAAU,EAAE,SAAU,CAAC,UAAU;YACjC,MAAM,EAAE,SAAU,CAAC,MAAM;SAC1B,CAAC,CACH,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC;YAC1C,IAAI,EAAE,wDAAwD;YAC9D,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE;YAC9D,WAAW,EAAE,CAAC,4BAA4B,CAAC;SAC5C,CAAC,CAAC;QACH,MAAM,CACJ,cAAc,CACZ,sCAAsC,EACtC,WAAW,EACX,mBAAmB,CAAC,IAAI,CAAC,CAC1B,CAAC,QAAQ,CAAC,MAAM,CAClB,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QAE/C,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC;YACxC,IAAI,EAAE,0BAA0B;YAChC,SAAS,EAAE;gBACT,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,OAAO;gBACf,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,SAAS;aACnB;YACD,gBAAgB,EAAE,CAAC,QAAQ,CAAC;YAC5B,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;SAChE,CAAC,CAAC;QACH,MAAM,CACJ,cAAc,CACZ,sCAAsC,EACtC,SAAS,EACT,mBAAmB,CAAC,IAAI,CAAC,CAC1B,CAAC,QAAQ,CAAC,MAAM,CAClB,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,yEAAyE;QACzE,8EAA8E;QAC9E,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC;YACtC,IAAI,EAAE,kBAAkB;YACxB,SAAS,EAAE;gBACT,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,UAAU;gBAClB,GAAG,EAAE,0BAA0B;aAChC;SACF,CAAC,CAAC;QACH,MAAM,CACJ,cAAc,CACZ,sCAAsC,EACtC,OAAO,EACP,mBAAmB,CAAC,IAAI,CAAC,CAC1B,CAAC,QAAQ,CAAC,OAAO,CACnB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,CACJ,kBAAkB,CAAC;YACjB,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,KAAK;SACjB,CAAC,CACH,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QACtD,MAAM,CACJ,kBAAkB,CAAC;YACjB,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,KAAK;SACjB,CAAC,CACH,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QACtD,MAAM,CACJ,kBAAkB,CAAC;YACjB,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,OAAO;YACpB,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,KAAK;SACjB,CAAC,CACH,CAAC,OAAO,CAAC;YACR,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE;YACtC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE;SACvC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,0EAA0E;QAC1E,mDAAmD;QACnD,MAAM,CACJ,kBAAkB,CAAC;YACjB,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;YACtB,SAAS,EAAE,MAAM;YACjB,cAAc,EAAE,OAAO;SACxB,CAAC,CACH,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,CACJ,kBAAkB,CAAC;YACjB,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,KAAK;SACjB,CAAC,CACH,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,CACJ,kBAAkB,CAAC;YACjB,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,WAAW;YAClB,GAAG,EAAE,GAAG;YACR,KAAK,EAAE,GAAG;YACV,UAAU,EAAE,CAAC;YACb,IAAI,EAAE,EAAE;YACR,iBAAiB,EAAE,KAAK;YACxB,KAAK,EAAE,EAAE;SACV,CAAC,CACH,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACpE,mEAAmE;QACnE,MAAM,CACJ,kBAAkB,CAAC;YACjB,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,OAAO;YACf,KAAK,EAAE,WAAW;YAClB,UAAU,EAAE,CAAC;YACb,IAAI,EAAE,EAAE;YACR,iBAAiB,EAAE,KAAK;YACxB,KAAK,EAAE,EAAE;SACV,CAAC,CACH,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,wEAAwE;QACxE,2EAA2E;QAC3E,sEAAsE;QACtE,yDAAyD;QACzD,MAAM,CACJ,kBAAkB,CAAC;YACjB,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,OAAO;YACf,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;YAC3B,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,MAAM;YACjB,aAAa,EAAE,GAAG;YAClB,eAAe,EAAE,KAAK;YACtB,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,CAAC;YACV,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,GAAG;SACZ,CAAC,CACH,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,MAAM,IAAI,GAAG,CAAC,OAAe,EAAE,OAAiB,EAAE,EAAE,EAAE,CACpD,cAAc,CACZ,sCAAsC,EACtC,iBAAiB,CAAC,KAAK,CAAC;QACtB,IAAI,EAAE,4BAA4B;QAClC,SAAS,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;QAC7D,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;KACpD,CAAC,EACF,mBAAmB,CAAC,IAAI,CAAC,CAC1B,CAAC,QAAQ,CAAC;IAEb,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,0EAA0E;QAC1E,6EAA6E;QAC7E,+DAA+D;QAC/D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAC/D,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAChE,yBAAyB,CAC1B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,4EAA4E;QAC5E,sCAAsC;QACtC,KAAK,MAAM,OAAO,IAAI;YACpB,YAAY;YACZ,gBAAgB;YAChB,gBAAgB;YAChB,gCAAgC;YAChC,UAAU;YACV,WAAW;SACZ,EAAE,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,mEAAmE;QACnE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@melra/policy-core",
3
- "version": "0.3.0-alpha.4",
3
+ "version": "0.3.0-alpha.6",
4
4
  "description": "Policy evaluation and scoped approval primitives for MELRA.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -21,7 +21,7 @@
21
21
  "dist"
22
22
  ],
23
23
  "dependencies": {
24
- "@melra/protocol": "0.3.0-alpha.4"
24
+ "@melra/protocol": "0.3.0-alpha.6"
25
25
  },
26
26
  "scripts": {
27
27
  "build": "tsc -p tsconfig.json",