apcore-js 0.24.1 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Execution-time governance policy: external overrides for governance annotations.
3
+ *
4
+ * RFC pilot for apcore#76 ("first-class external governance / policy API").
5
+ * An {@link ExecutionPolicy} lets a platform operator override the governance
6
+ * annotations (`requiresApproval`, `destructive`) of already-registered modules
7
+ * at execution time, independent of how the modules were registered. It attaches
8
+ * to the {@link Executor} (`policy` option) and is consulted by the approval
9
+ * gate (Step 5).
10
+ *
11
+ * Precedence: a matched policy rule overrides the module's own declared or
12
+ * scanned annotations — external governance is the platform's word against the
13
+ * module author's. Matching uses the same wildcard semantics as the ACL system
14
+ * (Algorithm A08) and the same specificity scoring (Algorithm A10); on a
15
+ * specificity tie the more restrictive rule wins.
16
+ *
17
+ * Governance principle (apcore#76): a misconfigured or unreachable governance
18
+ * control must warn or error, never silently allow. {@link ExecutionPolicy.fromObject}
19
+ * therefore rejects unknown keys (a typo in a governance file must not silently
20
+ * no-op), and `strict=true` makes the approval gate fail closed when approval is
21
+ * required but no ApprovalHandler is configured.
22
+ */
23
+ import type { ModuleAnnotations } from './module.js';
24
+ /** Overrides accepted by the {@link PolicyRule} constructor. */
25
+ export interface PolicyRuleOverrides {
26
+ /**
27
+ * Override for the module's `requiresApproval` annotation. `null`/`undefined`
28
+ * leaves the module's own value in effect.
29
+ */
30
+ requiresApproval?: boolean | null;
31
+ /**
32
+ * Override for the module's `destructive` annotation. `null`/`undefined`
33
+ * leaves the module's own value in effect.
34
+ */
35
+ destructive?: boolean | null;
36
+ /** Human-readable rationale, carried into the audit trail. */
37
+ reason?: string | null;
38
+ }
39
+ /**
40
+ * A single pattern-based governance override (apcore#76 RFC pilot).
41
+ *
42
+ * Immutable; validates its fields eagerly so a malformed governance rule fails
43
+ * loud at construction rather than silently no-op'ing at execution time.
44
+ */
45
+ export declare class PolicyRule {
46
+ /**
47
+ * Module ID wildcard pattern (Algorithm A08 semantics, same as ACL rules).
48
+ * `*` matches any character sequence including dots.
49
+ */
50
+ readonly pattern: string;
51
+ readonly requiresApproval: boolean | null;
52
+ readonly destructive: boolean | null;
53
+ readonly reason: string | null;
54
+ constructor(pattern: string, overrides?: PolicyRuleOverrides);
55
+ }
56
+ /**
57
+ * The effective governance verdict for one module under a policy.
58
+ *
59
+ * - `requiresApproval` / `destructive`: effective values after overrides.
60
+ * - `needsApproval`: final approval-gate verdict — true when the effective
61
+ * `requiresApproval` is true, or when the policy gates destructive modules
62
+ * and the effective `destructive` is true.
63
+ * - `rule`: the matched {@link PolicyRule}, or `null` when no rule matched.
64
+ * - `overridden`: true when the matched rule changed a base annotation value.
65
+ */
66
+ export interface PolicyDecision {
67
+ readonly moduleId: string;
68
+ readonly requiresApproval: boolean;
69
+ readonly destructive: boolean;
70
+ readonly needsApproval: boolean;
71
+ readonly rule: PolicyRule | null;
72
+ readonly overridden: boolean;
73
+ }
74
+ /**
75
+ * Declarative execution-time governance overrides (apcore#76 RFC pilot).
76
+ *
77
+ * @example
78
+ * ```ts
79
+ * const policy = new ExecutionPolicy(
80
+ * [new PolicyRule('orders.delete_*', { requiresApproval: true, reason: 'human sign-off' })],
81
+ * { gateDestructive: true, strict: true },
82
+ * );
83
+ * const executor = new Executor({ registry, approvalHandler: handler, policy });
84
+ * ```
85
+ */
86
+ export declare class ExecutionPolicy {
87
+ private readonly _rules;
88
+ /**
89
+ * When true, modules whose effective `destructive` annotation is true require
90
+ * approval even if `requiresApproval` is false — the opt-in resolution of the
91
+ * destructive↔approval gap described in apcore#76.
92
+ */
93
+ readonly gateDestructive: boolean;
94
+ /**
95
+ * When true, the approval gate fails closed (denies) when a module needs
96
+ * approval but no ApprovalHandler is configured. When false (default), the
97
+ * gate keeps the PROTOCOL_SPEC §7.4 skip behavior but logs a warning.
98
+ */
99
+ readonly strict: boolean;
100
+ constructor(rules?: PolicyRule[] | null, options?: {
101
+ gateDestructive?: boolean;
102
+ strict?: boolean;
103
+ });
104
+ /** The policy's rules as an immutable array. */
105
+ get rules(): readonly PolicyRule[];
106
+ /**
107
+ * Compute the effective governance decision for a module.
108
+ *
109
+ * @param moduleId - Canonical module ID being invoked.
110
+ * @param annotations - The module's annotations (ModuleAnnotations, dict, or
111
+ * null). Only `requiresApproval`/`requires_approval` and `destructive` are
112
+ * consulted.
113
+ */
114
+ resolve(moduleId: string, annotations?: unknown): PolicyDecision;
115
+ /** Return the winning rule for a module ID, or null. */
116
+ private _match;
117
+ /**
118
+ * Build a policy from a plain object (parsed YAML/JSON governance file).
119
+ *
120
+ * Parsing is strict: unknown keys throw so a typo in a governance file fails
121
+ * loud instead of silently disabling a control.
122
+ *
123
+ * Expected shape:
124
+ * ```yaml
125
+ * gate_destructive: true
126
+ * strict: true
127
+ * rules:
128
+ * - pattern: "orders.delete_*"
129
+ * requires_approval: true
130
+ * reason: "destructive order operations need human sign-off"
131
+ * ```
132
+ *
133
+ * @throws {Error} On unknown keys, missing `pattern`, or wrong types.
134
+ */
135
+ static fromObject(data: unknown): ExecutionPolicy;
136
+ }
137
+ /**
138
+ * Build effective ModuleAnnotations for an ApprovalRequest under a policy
139
+ * decision, preserving the PROTOCOL_SPEC §7 "requiresApproval is guaranteed
140
+ * true" contract: the handler sees the effective governance values, not the
141
+ * module's raw declaration.
142
+ */
143
+ export declare function applyDecisionToAnnotations(annotations: ModuleAnnotations, decision: PolicyDecision): ModuleAnnotations;
144
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAMrD,gEAAgE;AAChE,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;;;GAKG;AACH,qBAAa,UAAU;IACrB;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEnB,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,mBAAwB;CAwBjE;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAkBD;;;;;;;;;;;GAWG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAC/C;;;;OAIG;IACH,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;gBAGvB,KAAK,GAAE,UAAU,EAAE,GAAG,IAAW,EACjC,OAAO,GAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAO;IAa/D,gDAAgD;IAChD,IAAI,KAAK,IAAI,SAAS,UAAU,EAAE,CAEjC;IAED;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAE,OAAc,GAAG,cAAc;IA4BtE,wDAAwD;IACxD,OAAO,CAAC,MAAM;IAoBd;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe;CAiDlD;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,iBAAiB,EAC9B,QAAQ,EAAE,cAAc,GACvB,iBAAiB,CAMnB"}
package/dist/policy.js ADDED
@@ -0,0 +1,242 @@
1
+ /**
2
+ * Execution-time governance policy: external overrides for governance annotations.
3
+ *
4
+ * RFC pilot for apcore#76 ("first-class external governance / policy API").
5
+ * An {@link ExecutionPolicy} lets a platform operator override the governance
6
+ * annotations (`requiresApproval`, `destructive`) of already-registered modules
7
+ * at execution time, independent of how the modules were registered. It attaches
8
+ * to the {@link Executor} (`policy` option) and is consulted by the approval
9
+ * gate (Step 5).
10
+ *
11
+ * Precedence: a matched policy rule overrides the module's own declared or
12
+ * scanned annotations — external governance is the platform's word against the
13
+ * module author's. Matching uses the same wildcard semantics as the ACL system
14
+ * (Algorithm A08) and the same specificity scoring (Algorithm A10); on a
15
+ * specificity tie the more restrictive rule wins.
16
+ *
17
+ * Governance principle (apcore#76): a misconfigured or unreachable governance
18
+ * control must warn or error, never silently allow. {@link ExecutionPolicy.fromObject}
19
+ * therefore rejects unknown keys (a typo in a governance file must not silently
20
+ * no-op), and `strict=true` makes the approval gate fail closed when approval is
21
+ * required but no ApprovalHandler is configured.
22
+ */
23
+ import { calculateSpecificity, matchPattern } from './utils/pattern.js';
24
+ const POLICY_KEYS = new Set(['rules', 'gate_destructive', 'strict']);
25
+ const RULE_KEYS = new Set(['pattern', 'requires_approval', 'destructive', 'reason']);
26
+ /**
27
+ * A single pattern-based governance override (apcore#76 RFC pilot).
28
+ *
29
+ * Immutable; validates its fields eagerly so a malformed governance rule fails
30
+ * loud at construction rather than silently no-op'ing at execution time.
31
+ */
32
+ export class PolicyRule {
33
+ /**
34
+ * Module ID wildcard pattern (Algorithm A08 semantics, same as ACL rules).
35
+ * `*` matches any character sequence including dots.
36
+ */
37
+ pattern;
38
+ requiresApproval;
39
+ destructive;
40
+ reason;
41
+ constructor(pattern, overrides = {}) {
42
+ if (typeof pattern !== 'string' || pattern.length === 0) {
43
+ throw new Error('PolicyRule.pattern must be a non-empty string');
44
+ }
45
+ const requiresApproval = overrides.requiresApproval ?? null;
46
+ const destructive = overrides.destructive ?? null;
47
+ const reason = overrides.reason ?? null;
48
+ for (const [name, value] of [
49
+ ['requiresApproval', requiresApproval],
50
+ ['destructive', destructive],
51
+ ]) {
52
+ if (value !== null && typeof value !== 'boolean') {
53
+ throw new Error(`PolicyRule.${name} must be a boolean or null, got ${typeof value}`);
54
+ }
55
+ }
56
+ if (reason !== null && typeof reason !== 'string') {
57
+ throw new Error(`PolicyRule.reason must be a string or null, got ${typeof reason}`);
58
+ }
59
+ this.pattern = pattern;
60
+ this.requiresApproval = requiresApproval;
61
+ this.destructive = destructive;
62
+ this.reason = reason;
63
+ Object.freeze(this);
64
+ }
65
+ }
66
+ /** Read a boolean annotation from a ModuleAnnotations object or a dict. */
67
+ function readAnnotationBool(annotations, camelKey, snakeKey) {
68
+ if (annotations == null || typeof annotations !== 'object')
69
+ return false;
70
+ const obj = annotations;
71
+ if (camelKey in obj)
72
+ return Boolean(obj[camelKey]);
73
+ if (snakeKey in obj)
74
+ return Boolean(obj[snakeKey]);
75
+ return false;
76
+ }
77
+ /** Tie-break key: rules that force gating rank above rules that relax it. */
78
+ function restrictiveness(rule) {
79
+ // (requiresApproval === true) outranks (destructive === true); encode as a
80
+ // 2-bit score so a lexicographic tuple comparison collapses to `>`.
81
+ return (rule.requiresApproval === true ? 2 : 0) + (rule.destructive === true ? 1 : 0);
82
+ }
83
+ /**
84
+ * Declarative execution-time governance overrides (apcore#76 RFC pilot).
85
+ *
86
+ * @example
87
+ * ```ts
88
+ * const policy = new ExecutionPolicy(
89
+ * [new PolicyRule('orders.delete_*', { requiresApproval: true, reason: 'human sign-off' })],
90
+ * { gateDestructive: true, strict: true },
91
+ * );
92
+ * const executor = new Executor({ registry, approvalHandler: handler, policy });
93
+ * ```
94
+ */
95
+ export class ExecutionPolicy {
96
+ _rules;
97
+ /**
98
+ * When true, modules whose effective `destructive` annotation is true require
99
+ * approval even if `requiresApproval` is false — the opt-in resolution of the
100
+ * destructive↔approval gap described in apcore#76.
101
+ */
102
+ gateDestructive;
103
+ /**
104
+ * When true, the approval gate fails closed (denies) when a module needs
105
+ * approval but no ApprovalHandler is configured. When false (default), the
106
+ * gate keeps the PROTOCOL_SPEC §7.4 skip behavior but logs a warning.
107
+ */
108
+ strict;
109
+ constructor(rules = null, options = {}) {
110
+ const frozen = Object.freeze([...(rules ?? [])]);
111
+ for (const rule of frozen) {
112
+ if (!(rule instanceof PolicyRule)) {
113
+ throw new Error(`ExecutionPolicy rules must be PolicyRule instances, got ${typeof rule}`);
114
+ }
115
+ }
116
+ this._rules = frozen;
117
+ this.gateDestructive = Boolean(options.gateDestructive);
118
+ this.strict = Boolean(options.strict);
119
+ }
120
+ /** The policy's rules as an immutable array. */
121
+ get rules() {
122
+ return this._rules;
123
+ }
124
+ /**
125
+ * Compute the effective governance decision for a module.
126
+ *
127
+ * @param moduleId - Canonical module ID being invoked.
128
+ * @param annotations - The module's annotations (ModuleAnnotations, dict, or
129
+ * null). Only `requiresApproval`/`requires_approval` and `destructive` are
130
+ * consulted.
131
+ */
132
+ resolve(moduleId, annotations = null) {
133
+ const baseRequiresApproval = readAnnotationBool(annotations, 'requiresApproval', 'requires_approval');
134
+ const baseDestructive = readAnnotationBool(annotations, 'destructive', 'destructive');
135
+ const rule = this._match(moduleId);
136
+ const effectiveRequiresApproval = rule === null || rule.requiresApproval === null
137
+ ? baseRequiresApproval
138
+ : rule.requiresApproval;
139
+ const effectiveDestructive = rule === null || rule.destructive === null ? baseDestructive : rule.destructive;
140
+ return {
141
+ moduleId,
142
+ requiresApproval: effectiveRequiresApproval,
143
+ destructive: effectiveDestructive,
144
+ needsApproval: effectiveRequiresApproval || (this.gateDestructive && effectiveDestructive),
145
+ rule,
146
+ overridden: effectiveRequiresApproval !== baseRequiresApproval ||
147
+ effectiveDestructive !== baseDestructive,
148
+ };
149
+ }
150
+ /** Return the winning rule for a module ID, or null. */
151
+ _match(moduleId) {
152
+ let best = null;
153
+ let bestScore = -1;
154
+ for (const rule of this._rules) {
155
+ if (!matchPattern(rule.pattern, moduleId))
156
+ continue;
157
+ const score = calculateSpecificity(rule.pattern);
158
+ if (score > bestScore) {
159
+ best = rule;
160
+ bestScore = score;
161
+ }
162
+ else if (score === bestScore &&
163
+ best !== null &&
164
+ restrictiveness(rule) > restrictiveness(best)) {
165
+ best = rule;
166
+ }
167
+ }
168
+ return best;
169
+ }
170
+ /**
171
+ * Build a policy from a plain object (parsed YAML/JSON governance file).
172
+ *
173
+ * Parsing is strict: unknown keys throw so a typo in a governance file fails
174
+ * loud instead of silently disabling a control.
175
+ *
176
+ * Expected shape:
177
+ * ```yaml
178
+ * gate_destructive: true
179
+ * strict: true
180
+ * rules:
181
+ * - pattern: "orders.delete_*"
182
+ * requires_approval: true
183
+ * reason: "destructive order operations need human sign-off"
184
+ * ```
185
+ *
186
+ * @throws {Error} On unknown keys, missing `pattern`, or wrong types.
187
+ */
188
+ static fromObject(data) {
189
+ if (data == null || typeof data !== 'object' || Array.isArray(data)) {
190
+ const kind = Array.isArray(data) ? 'array' : typeof data;
191
+ throw new Error(`Policy document must be a mapping, got ${kind}`);
192
+ }
193
+ const obj = data;
194
+ const unknown = Object.keys(obj).filter((k) => !POLICY_KEYS.has(k));
195
+ if (unknown.length > 0) {
196
+ throw new Error(`Unknown policy keys ${JSON.stringify(unknown.sort())}; a governance file must not silently no-op`);
197
+ }
198
+ const rulesRaw = obj['rules'] ?? [];
199
+ if (!Array.isArray(rulesRaw)) {
200
+ throw new Error(`Policy 'rules' must be a list, got ${typeof rulesRaw}`);
201
+ }
202
+ const rules = [];
203
+ rulesRaw.forEach((item, index) => {
204
+ if (item == null || typeof item !== 'object' || Array.isArray(item)) {
205
+ const kind = Array.isArray(item) ? 'array' : typeof item;
206
+ throw new Error(`Policy rule #${index} must be a mapping, got ${kind}`);
207
+ }
208
+ const ruleObj = item;
209
+ const unknownRule = Object.keys(ruleObj).filter((k) => !RULE_KEYS.has(k));
210
+ if (unknownRule.length > 0) {
211
+ throw new Error(`Policy rule #${index} has unknown keys ${JSON.stringify(unknownRule.sort())}; ` +
212
+ 'a governance rule must not silently no-op');
213
+ }
214
+ if (!('pattern' in ruleObj)) {
215
+ throw new Error(`Policy rule #${index} is missing required key 'pattern'`);
216
+ }
217
+ rules.push(new PolicyRule(ruleObj['pattern'], {
218
+ requiresApproval: (ruleObj['requires_approval'] ?? null),
219
+ destructive: (ruleObj['destructive'] ?? null),
220
+ reason: (ruleObj['reason'] ?? null),
221
+ }));
222
+ });
223
+ return new ExecutionPolicy(rules, {
224
+ gateDestructive: Boolean(obj['gate_destructive'] ?? false),
225
+ strict: Boolean(obj['strict'] ?? false),
226
+ });
227
+ }
228
+ }
229
+ /**
230
+ * Build effective ModuleAnnotations for an ApprovalRequest under a policy
231
+ * decision, preserving the PROTOCOL_SPEC §7 "requiresApproval is guaranteed
232
+ * true" contract: the handler sees the effective governance values, not the
233
+ * module's raw declaration.
234
+ */
235
+ export function applyDecisionToAnnotations(annotations, decision) {
236
+ return Object.freeze({
237
+ ...annotations,
238
+ requiresApproval: true,
239
+ destructive: decision.destructive,
240
+ });
241
+ }
242
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "apcore-js",
3
- "version": "0.24.1",
3
+ "version": "0.26.0",
4
4
  "description": "Schema-driven module standard for AI-perceivable interfaces",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",