@axtary/policy 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/parity.js ADDED
@@ -0,0 +1,348 @@
1
+ import { analyzePostgresSelect, hashAction, hashPayload, NormalizedActionSchema, } from "@axtary/actionpass";
2
+ import { DEFAULT_POLICY_CONFIG, evaluateProvenanceGuard, mergePolicyConfig, toCedarRequest, toOpaInput, } from "./index.js";
3
+ export const PARITY_DECISIONS = ["allow", "deny", "step_up"];
4
+ export const AGENTCORE_CEDAR_EXPORT_SCHEMA_VERSION = "axtary.agentcore_cedar_export.v0";
5
+ /**
6
+ * Cedar cannot quantify over sets ("any file starts with prefix"), count
7
+ * elements, or split strings, so — per Cedar's own guidance — those become
8
+ * precomputed context attributes. Everything else (branch equality, channel
9
+ * allowlists, status step-up, missing-field checks) stays in the Cedar
10
+ * policies themselves, driven by `context.config`.
11
+ */
12
+ export function buildCedarParityRequest(actionInput, configInput) {
13
+ const action = NormalizedActionSchema.parse(actionInput);
14
+ const config = mergePolicyConfig(DEFAULT_POLICY_CONFIG, configInput);
15
+ const base = toCedarRequest(action);
16
+ const payload = stripNulls(action.capability.payload);
17
+ return {
18
+ principal: base.principal,
19
+ action: base.action,
20
+ resource: base.resource,
21
+ context: {
22
+ task_id: action.intent.taskId,
23
+ declared_goal: action.intent.declaredGoal,
24
+ runtime: action.actor.runtime,
25
+ human_owner: action.actor.humanOwner,
26
+ payload,
27
+ config: cedarConfigContext(config),
28
+ derived: cedarDerivedContext(action, config),
29
+ },
30
+ };
31
+ }
32
+ export function buildAgentCoreCedarAuthorizationRequest(actionInput, input = {}) {
33
+ const action = NormalizedActionSchema.parse(actionInput);
34
+ const payload = stripNulls(action.capability.payload);
35
+ const tags = {
36
+ agent_id: action.actor.agentId,
37
+ human_owner: action.actor.humanOwner,
38
+ runtime: action.actor.runtime,
39
+ };
40
+ if (action.actor.tenant) {
41
+ tags.tenant = action.actor.tenant;
42
+ }
43
+ return {
44
+ schemaVersion: AGENTCORE_CEDAR_EXPORT_SCHEMA_VERSION,
45
+ principal: {
46
+ type: "AgentCore::OAuthUser",
47
+ tags,
48
+ },
49
+ action: {
50
+ type: "AgentCore::Action",
51
+ id: agentCoreActionId(action.capability.tool),
52
+ },
53
+ resource: {
54
+ type: "AgentCore::Gateway",
55
+ id: input.gatewayResource ??
56
+ "arn:aws:bedrock-agentcore:local:000000000000:gateway/axtary-local",
57
+ },
58
+ context: {
59
+ input: payload,
60
+ axtary: {
61
+ actionHash: hashAction(action),
62
+ payloadHash: hashPayload(action.capability.payload),
63
+ tool: action.capability.tool,
64
+ resource: action.capability.resource,
65
+ taskId: action.intent.taskId,
66
+ policyVersion: input.policyVersion ?? DEFAULT_POLICY_CONFIG.version,
67
+ },
68
+ },
69
+ };
70
+ }
71
+ export function buildAgentCoreCedarExport(input) {
72
+ return {
73
+ schemaVersion: AGENTCORE_CEDAR_EXPORT_SCHEMA_VERSION,
74
+ status: "offline_mapping",
75
+ gatewayResource: input.gatewayResource ??
76
+ "arn:aws:bedrock-agentcore:local:000000000000:gateway/axtary-local",
77
+ note: "Offline Cedar-shaped AgentCore Gateway request mapping. This is not a deployed AWS AgentCore policy engine.",
78
+ fixtures: input.fixtures.map((fixture) => ({
79
+ fixtureId: fixture.id,
80
+ request: buildAgentCoreCedarAuthorizationRequest(fixture.action, {
81
+ gatewayResource: input.gatewayResource,
82
+ policyVersion: input.policyVersion,
83
+ }),
84
+ })),
85
+ };
86
+ }
87
+ function agentCoreActionId(tool) {
88
+ return tool.replace(/[^A-Za-z0-9]+/g, "___");
89
+ }
90
+ function cedarConfigContext(config) {
91
+ return {
92
+ required_base_branch: config.github.pullRequests.requiredBaseBranch,
93
+ max_files_changed: config.github.pullRequests.maxFilesChanged,
94
+ requires_tests: config.github.pullRequests.requiresTests,
95
+ allowed_channels: config.slack.messages.allowedChannels,
96
+ step_up_external_recipients: config.slack.messages.stepUpExternalRecipients,
97
+ allowed_project_keys: config.issueTrackers.linear.allowedProjectKeys,
98
+ step_up_statuses: config.issueTrackers.linear.stepUpStatuses,
99
+ postgres_allowed_databases: config.postgres.reads.allowedDatabases,
100
+ postgres_allowed_tables: config.postgres.reads.allowedTables,
101
+ postgres_allowed_functions: config.postgres.reads.allowedFunctions,
102
+ postgres_max_rows: config.postgres.reads.maxRows,
103
+ postgres_require_predicate: config.postgres.reads.requirePredicate,
104
+ drive_allowed_file_ids: config.drive.reads.allowedFileIds,
105
+ drive_max_read_bytes: config.drive.reads.maxReadBytes,
106
+ };
107
+ }
108
+ function cedarDerivedContext(action, config) {
109
+ const payload = action.capability.payload;
110
+ const prPolicy = config.github.pullRequests;
111
+ const filesChanged = stringArray(payload.filesChanged);
112
+ const path = typeof payload.path === "string" ? payload.path : undefined;
113
+ const issueKey = typeof payload.issueKey === "string" ? payload.issueKey : undefined;
114
+ const projectKey = typeof payload.projectKey === "string"
115
+ ? payload.projectKey
116
+ : issueKey?.split("-", 1)[0];
117
+ const postgres = postgresDerivedContext(action, config);
118
+ const drive = driveDerivedContext(action, config);
119
+ return {
120
+ files_changed_count: filesChanged.length,
121
+ any_file_in_deny_paths: anyPrefix(filesChanged, prPolicy.denyPathPrefixes),
122
+ any_file_in_step_up_paths: anyPrefix(filesChanged, prPolicy.stepUpPathPrefixes),
123
+ path_in_deny_read_paths: path
124
+ ? anyPrefix([path], config.github.contents.denyReadPathPrefixes)
125
+ : false,
126
+ path_in_deny_paths: path ? anyPrefix([path], prPolicy.denyPathPrefixes) : false,
127
+ path_in_step_up_paths: path ? anyPrefix([path], prPolicy.stepUpPathPrefixes) : false,
128
+ external_recipients_count: stringArray(payload.externalRecipients).length,
129
+ ...postgres,
130
+ ...drive,
131
+ ...(projectKey ? { project_key: projectKey } : {}),
132
+ };
133
+ }
134
+ function driveDerivedContext(action, config) {
135
+ if (action.capability.tool !== "drive.files.read")
136
+ return {};
137
+ const fileId = typeof action.capability.payload.fileId === "string"
138
+ ? action.capability.payload.fileId
139
+ : "";
140
+ const maxBytes = typeof action.capability.payload.maxBytes === "number"
141
+ ? action.capability.payload.maxBytes
142
+ : 0;
143
+ return {
144
+ drive_payload_valid: fileId.length > 0 && Number.isInteger(maxBytes) && maxBytes > 0,
145
+ drive_resource_matches: action.capability.resource === `drive:file:${fileId}`,
146
+ drive_file_allowed: config.drive.reads.allowedFileIds.includes(fileId),
147
+ drive_byte_limit_ok: Number.isInteger(maxBytes) &&
148
+ maxBytes > 0 &&
149
+ maxBytes <= config.drive.reads.maxReadBytes,
150
+ };
151
+ }
152
+ function postgresDerivedContext(action, config) {
153
+ if (action.capability.tool !== "postgres.query.select")
154
+ return {};
155
+ const statement = typeof action.capability.payload.statement === "string"
156
+ ? action.capability.payload.statement
157
+ : "";
158
+ const parameters = Array.isArray(action.capability.payload.parameters)
159
+ ? action.capability.payload.parameters
160
+ : [];
161
+ const maxRows = typeof action.capability.payload.maxRows === "number"
162
+ ? action.capability.payload.maxRows
163
+ : 0;
164
+ const analyzed = analyzePostgresSelect(statement);
165
+ if (!analyzed.ok) {
166
+ return {
167
+ postgres_parse_ok: false,
168
+ postgres_has_predicate: false,
169
+ postgres_parameter_count_match: false,
170
+ postgres_database_allowed: false,
171
+ postgres_tables_allowed: false,
172
+ postgres_tables_qualified: false,
173
+ postgres_functions_allowed: false,
174
+ postgres_row_limit_ok: false,
175
+ };
176
+ }
177
+ const { analysis } = analyzed;
178
+ return {
179
+ postgres_parse_ok: true,
180
+ postgres_has_predicate: analysis.hasPredicate,
181
+ postgres_parameter_count_match: analysis.parameterCount === parameters.length,
182
+ postgres_database_allowed: config.postgres.reads.allowedDatabases.includes(action.capability.resource),
183
+ postgres_tables_allowed: analysis.tables.every((table) => config.postgres.reads.allowedTables.includes(table)),
184
+ postgres_tables_qualified: analysis.tables.every((table) => table.includes(".")),
185
+ postgres_functions_allowed: analysis.functions.every((functionName) => config.postgres.reads.allowedFunctions.includes(functionName)),
186
+ postgres_row_limit_ok: Number.isInteger(maxRows) &&
187
+ maxRows > 0 &&
188
+ maxRows <= config.postgres.reads.maxRows,
189
+ };
190
+ }
191
+ /**
192
+ * Parses @id/@decision/@reason annotations from a Cedar policy file, in
193
+ * statement order, so Cedar's index-based determining-policy ids ("policy0")
194
+ * can be mapped back to native decisions and reason strings.
195
+ */
196
+ export function parseCedarPolicyMeta(policiesText) {
197
+ const statements = policiesText
198
+ .split(";")
199
+ .map((statement) => statement.trim())
200
+ .filter((statement) => /(^|\n)\s*(@\w+\("[^"]*"\)\s*)*\b(permit|forbid)\s*\(/.test(statement));
201
+ return statements.map((statement, index) => {
202
+ const id = statement.match(/@id\("([^"]+)"\)/)?.[1] ?? `policy${index}`;
203
+ const effect = /\bforbid\s*\(/.test(statement) ? "forbid" : "permit";
204
+ const annotatedDecision = statement.match(/@decision\("([^"]+)"\)/)?.[1];
205
+ const reason = statement.match(/@reason\("([^"]+)"\)/)?.[1];
206
+ return {
207
+ id,
208
+ effect,
209
+ decision: effect === "forbid"
210
+ ? "deny"
211
+ : annotatedDecision === "step_up"
212
+ ? "step_up"
213
+ : "allow",
214
+ reason,
215
+ };
216
+ });
217
+ }
218
+ /**
219
+ * Maps a Cedar authorization response onto the native decision model:
220
+ * any determining forbid => deny; otherwise an allow whose determining
221
+ * policies include a @decision("step_up") permit => step_up; plain allow
222
+ * => allow; no matching policy at all => fail-closed deny.
223
+ */
224
+ export function mapCedarResponse(response, meta) {
225
+ const metaById = new Map(meta.map((entry, index) => [`policy${index}`, entry]));
226
+ const determining = response.determiningPolicies
227
+ .map((policyId) => metaById.get(policyId))
228
+ .filter((entry) => entry !== undefined);
229
+ if (response.decision === "deny") {
230
+ const reasons = determining
231
+ .filter((entry) => entry.effect === "forbid")
232
+ .map((entry) => entry.reason ?? entry.id);
233
+ return {
234
+ decision: "deny",
235
+ reasons: reasons.length > 0 ? reasons.sort() : ["no_matching_policy"],
236
+ };
237
+ }
238
+ const stepUps = determining.filter((entry) => entry.decision === "step_up");
239
+ if (stepUps.length > 0) {
240
+ return {
241
+ decision: "step_up",
242
+ reasons: stepUps.map((entry) => entry.reason ?? entry.id).sort(),
243
+ };
244
+ }
245
+ return {
246
+ decision: "allow",
247
+ reasons: determining.map((entry) => entry.reason ?? entry.id).sort(),
248
+ };
249
+ }
250
+ /**
251
+ * Evaluates an action against a Cedar policy set using @cedar-policy/cedar-wasm.
252
+ * The engine is an optional dependency: install it (devDependency in this
253
+ * repo) before calling, or this throws `cedar_engine_unavailable`.
254
+ */
255
+ export async function evaluateCedarParity(input) {
256
+ let cedar;
257
+ try {
258
+ cedar = await import("@cedar-policy/cedar-wasm/nodejs");
259
+ }
260
+ catch {
261
+ throw new Error("cedar_engine_unavailable:install @cedar-policy/cedar-wasm");
262
+ }
263
+ const request = buildCedarParityRequest(input.action, input.config);
264
+ const result = cedar.isAuthorized({
265
+ ...request,
266
+ policies: { staticPolicies: input.policiesText },
267
+ entities: [],
268
+ });
269
+ if (result.type !== "success") {
270
+ throw new Error(`cedar_evaluation_failed:${JSON.stringify(result)}`);
271
+ }
272
+ const meta = parseCedarPolicyMeta(input.policiesText);
273
+ return applyParityProvenance(input.action, input.config, mapCedarResponse({
274
+ decision: result.response.decision === "allow" ? "allow" : "deny",
275
+ determiningPolicies: result.response.diagnostics.reason,
276
+ errors: result.response.diagnostics.errors.map((error) => typeof error === "string" ? error : JSON.stringify(error)),
277
+ }, meta));
278
+ }
279
+ /**
280
+ * Loads a compiled Rego wasm bundle (built with `opa build -t wasm
281
+ * -e axtary/policy/result`) using @open-policy-agent/opa-wasm and binds the
282
+ * policy config as `data.axtary.config`.
283
+ */
284
+ export async function loadRegoParityEvaluator(input) {
285
+ let opa;
286
+ try {
287
+ opa = await import("@open-policy-agent/opa-wasm");
288
+ }
289
+ catch {
290
+ throw new Error("rego_engine_unavailable:install @open-policy-agent/opa-wasm");
291
+ }
292
+ const policy = await opa.loadPolicy(input.wasm);
293
+ const config = mergePolicyConfig(DEFAULT_POLICY_CONFIG, input.config);
294
+ policy.setData({ axtary: { config } });
295
+ return {
296
+ evaluate(action) {
297
+ const normalizedAction = NormalizedActionSchema.parse(action);
298
+ const output = policy.evaluate({
299
+ ...toOpaInput(normalizedAction).input,
300
+ derived: cedarDerivedContext(normalizedAction, config),
301
+ });
302
+ const result = output[0]?.result;
303
+ if (!result ||
304
+ !PARITY_DECISIONS.includes(result.decision) ||
305
+ !Array.isArray(result.reasons)) {
306
+ throw new Error(`rego_evaluation_malformed:${JSON.stringify(output)}`);
307
+ }
308
+ return applyParityProvenance(action, config, {
309
+ decision: result.decision,
310
+ reasons: [...result.reasons].sort(),
311
+ });
312
+ },
313
+ };
314
+ }
315
+ function applyParityProvenance(action, config, base) {
316
+ if (base.decision === "deny")
317
+ return base;
318
+ const guard = evaluateProvenanceGuard(action, config ?? {});
319
+ if (!guard)
320
+ return base;
321
+ if (guard.decision === "deny") {
322
+ return { decision: "deny", reasons: [guard.reason] };
323
+ }
324
+ return {
325
+ decision: "step_up",
326
+ reasons: [...new Set([...base.reasons, guard.reason])].sort(),
327
+ };
328
+ }
329
+ function anyPrefix(paths, prefixes) {
330
+ return paths.some((path) => prefixes.some((prefix) => path.startsWith(prefix)));
331
+ }
332
+ function stringArray(value) {
333
+ return Array.isArray(value)
334
+ ? value.filter((entry) => typeof entry === "string")
335
+ : [];
336
+ }
337
+ function stripNulls(value) {
338
+ if (Array.isArray(value)) {
339
+ return value.map((entry) => stripNulls(entry));
340
+ }
341
+ if (value !== null && typeof value === "object") {
342
+ return Object.fromEntries(Object.entries(value)
343
+ .filter(([, entry]) => entry !== null)
344
+ .map(([key, entry]) => [key, stripNulls(entry)]));
345
+ }
346
+ return value;
347
+ }
348
+ //# sourceMappingURL=parity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parity.js","sourceRoot":"","sources":["../src/parity.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axtary/policy",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "private": false,
5
5
  "description": "Deterministic policy evaluation and Cedar/OPA mappings for Axtary agent actions.",
6
6
  "type": "module",
@@ -37,11 +37,19 @@
37
37
  ".": {
38
38
  "types": "./dist/index.d.ts",
39
39
  "import": "./dist/index.js"
40
+ },
41
+ "./parity": {
42
+ "types": "./dist/parity.d.ts",
43
+ "import": "./dist/parity.js"
44
+ },
45
+ "./acs": {
46
+ "types": "./dist/acs.d.ts",
47
+ "import": "./dist/acs.js"
40
48
  }
41
49
  },
42
50
  "types": "./dist/index.d.ts",
43
51
  "dependencies": {
44
- "@axtary/actionpass": "^0.1.0",
52
+ "@axtary/actionpass": "^0.3.0",
45
53
  "zod": "^4.4.3"
46
54
  }
47
55
  }