@plurnk/plurnk-execs 0.4.32 → 0.4.33
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/SPEC.md +1 -1
- package/dist/policy.d.ts +1 -0
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +15 -2
- package/dist/policy.js.map +1 -1
- package/package.json +1 -1
package/SPEC.md
CHANGED
|
@@ -203,7 +203,7 @@ A **registration** bound — a sibling of the §3 trust gate, **not** the §3.2
|
|
|
203
203
|
| `PLURNK_EXECS_<TAG>=0` (or `false`) | surgical kill-switch for one tag |
|
|
204
204
|
| `PLURNK_EXECS_ONLY=a,b,c` | allowlist — a tag not listed is disabled |
|
|
205
205
|
|
|
206
|
-
The two compose within a layer (an allowlisted tag can still be individually killed). `ONLY` is reserved: a runtime tag may not be named `only`. Purely **subtractive** — there is no force-enable verb, by design.
|
|
206
|
+
The two compose within a layer (an allowlisted tag can still be individually killed). `ONLY` is reserved: a runtime tag may not be named `only`. **Keys are matched case-insensitively** — `PLURNK_EXECS_sh=0` ≡ `PLURNK_EXECS_SH=0`, the way the mcp config folds server names, so the natural lowercase-tag spelling doesn't silently no-op. Purely **subtractive** — there is no force-enable verb, by design.
|
|
207
207
|
|
|
208
208
|
**The cascade is an intersection.** A tag is live iff enabled in *every* layer: `enabled(tag) = service ∧ client ∧ …`. Because each layer only subtracts, order is irrelevant and no downstream layer can undo an upstream disable — **the client can never re-enable what the service disabled**, structurally, not by a policed rule.
|
|
209
209
|
|
package/dist/policy.d.ts
CHANGED
package/dist/policy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAqBA,MAAM,CAAC,OAAO,OAAO,MAAM
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAqBA,MAAM,CAAC,OAAO,OAAO,MAAM;;IAcvB,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GAAG,OAAO;IAc7F,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,OAAO;CAGhG"}
|
package/dist/policy.js
CHANGED
|
@@ -20,11 +20,24 @@
|
|
|
20
20
|
// `PLURNK_EXECS_*` format for the per-session client layer. One parser, both
|
|
21
21
|
// tiers — the consumer feeds the client's map straight to these methods.
|
|
22
22
|
export default class Policy {
|
|
23
|
+
// Read a PLURNK_EXECS_<suffix> key case-INSENSITIVELY. The env-var
|
|
24
|
+
// convention is uppercase, but an operator/agent naturally writes the tag as
|
|
25
|
+
// it appears (PLURNK_EXECS_sh=0) — matching the tag they see, not shouting
|
|
26
|
+
// it — and a case-sensitive miss would silently no-op (service#328). Fold
|
|
27
|
+
// the key the way the mcp config already folds server names. Direct hit
|
|
28
|
+
// first (the common uppercase form), then a folded scan.
|
|
29
|
+
static #read(env, suffix) {
|
|
30
|
+
const key = `PLURNK_EXECS_${suffix.toUpperCase()}`;
|
|
31
|
+
if (key in env)
|
|
32
|
+
return env[key];
|
|
33
|
+
const hit = Object.keys(env).find((k) => k.toUpperCase() === key);
|
|
34
|
+
return hit === undefined ? undefined : env[hit];
|
|
35
|
+
}
|
|
23
36
|
static isEnabled(tag, env = process.env) {
|
|
24
|
-
const off = env
|
|
37
|
+
const off = Policy.#read(env, tag);
|
|
25
38
|
if (off === "0" || off?.toLowerCase() === "false")
|
|
26
39
|
return false;
|
|
27
|
-
const only = env
|
|
40
|
+
const only = Policy.#read(env, "ONLY");
|
|
28
41
|
if (only) {
|
|
29
42
|
const allow = new Set(only.split(",").map((s) => s.trim().toLowerCase()).filter(Boolean));
|
|
30
43
|
if (!allow.has(tag.toLowerCase()))
|
package/dist/policy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,+EAA+E;AAC/E,gFAAgF;AAChF,sEAAsE;AACtE,2EAA2E;AAC3E,EAAE;AACF,iEAAiE;AACjE,oEAAoE;AACpE,4EAA4E;AAC5E,yEAAyE;AACzE,4EAA4E;AAC5E,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,+EAA+E;AAC/E,uCAAuC;AACvC,EAAE;AACF,uEAAuE;AACvE,mEAAmE;AACnE,6EAA6E;AAC7E,yEAAyE;AACzE,MAAM,CAAC,OAAO,OAAO,MAAM;IACvB,MAAM,CAAC,SAAS,CAAC,GAAW,EAAE,MAA0C,OAAO,CAAC,GAAG;QAC/E,MAAM,GAAG,GAAG,
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,+EAA+E;AAC/E,gFAAgF;AAChF,sEAAsE;AACtE,2EAA2E;AAC3E,EAAE;AACF,iEAAiE;AACjE,oEAAoE;AACpE,4EAA4E;AAC5E,yEAAyE;AACzE,4EAA4E;AAC5E,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,+EAA+E;AAC/E,uCAAuC;AACvC,EAAE;AACF,uEAAuE;AACvE,mEAAmE;AACnE,6EAA6E;AAC7E,yEAAyE;AACzE,MAAM,CAAC,OAAO,OAAO,MAAM;IACvB,mEAAmE;IACnE,6EAA6E;IAC7E,2EAA2E;IAC3E,0EAA0E;IAC1E,wEAAwE;IACxE,yDAAyD;IACzD,MAAM,CAAC,KAAK,CAAC,GAAuC,EAAE,MAAc;QAChE,MAAM,GAAG,GAAG,gBAAgB,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;QACnD,IAAI,GAAG,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC;QAClE,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,GAAW,EAAE,MAA0C,OAAO,CAAC,GAAG;QAC/E,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACnC,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,EAAE,WAAW,EAAE,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC;QAChE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACvC,IAAI,IAAI,EAAE,CAAC;YACP,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAC1F,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBAAE,OAAO,KAAK,CAAC;QACpD,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,mEAAmE;IACnE,yEAAyE;IACzE,iDAAiD;IACjD,MAAM,CAAC,aAAa,CAAC,GAAW,EAAE,MAAiD;QAC/E,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IACjE,CAAC;CACJ"}
|