agentcert 0.2.7 → 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.
Files changed (36) hide show
  1. package/README.md +25 -0
  2. package/dist/cli.js +8 -0
  3. package/dist/command-help.js +2 -0
  4. package/dist/index.js +1 -0
  5. package/dist/sandbox.js +258 -0
  6. package/dist/vendor/onegent-runtime/mock-procurement.d.ts +6 -0
  7. package/dist/vendor/onegent-runtime/mock-procurement.d.ts.map +1 -0
  8. package/dist/vendor/onegent-runtime/mock-procurement.js +33 -0
  9. package/dist/vendor/onegent-runtime/policies.d.ts +6 -0
  10. package/dist/vendor/onegent-runtime/policies.d.ts.map +1 -0
  11. package/dist/vendor/onegent-runtime/policies.js +109 -0
  12. package/dist/vendor/onegent-runtime/risk.d.ts +3 -0
  13. package/dist/vendor/onegent-runtime/risk.d.ts.map +1 -0
  14. package/dist/vendor/onegent-runtime/risk.js +54 -0
  15. package/dist/vendor/onegent-runtime/sandbox-adapter-kit.d.ts +45 -0
  16. package/dist/vendor/onegent-runtime/sandbox-adapter-kit.d.ts.map +1 -0
  17. package/dist/vendor/onegent-runtime/sandbox-adapter-kit.js +148 -0
  18. package/dist/vendor/onegent-runtime/sandbox-harness.d.ts +167 -0
  19. package/dist/vendor/onegent-runtime/sandbox-harness.d.ts.map +1 -0
  20. package/dist/vendor/onegent-runtime/sandbox-harness.js +729 -0
  21. package/dist/vendor/onegent-runtime/sandbox-hosted.d.ts +76 -0
  22. package/dist/vendor/onegent-runtime/sandbox-hosted.d.ts.map +1 -0
  23. package/dist/vendor/onegent-runtime/sandbox-hosted.js +129 -0
  24. package/dist/vendor/onegent-runtime/sdk.d.ts +29 -0
  25. package/dist/vendor/onegent-runtime/sdk.d.ts.map +1 -0
  26. package/dist/vendor/onegent-runtime/sdk.js +140 -0
  27. package/dist/vendor/onegent-runtime/service.d.ts +27 -0
  28. package/dist/vendor/onegent-runtime/service.d.ts.map +1 -0
  29. package/dist/vendor/onegent-runtime/service.js +421 -0
  30. package/dist/vendor/onegent-runtime/store.d.ts +16 -0
  31. package/dist/vendor/onegent-runtime/store.d.ts.map +1 -0
  32. package/dist/vendor/onegent-runtime/store.js +29 -0
  33. package/dist/vendor/onegent-runtime/types.d.ts +284 -0
  34. package/dist/vendor/onegent-runtime/types.d.ts.map +1 -0
  35. package/dist/vendor/onegent-runtime/types.js +1 -0
  36. package/package.json +2 -2
@@ -0,0 +1,421 @@
1
+ import { DEFAULT_POLICY_RULES, evaluatePolicy, getPolicyRules } from "./policies.js";
2
+ import { assessRisk } from "./risk.js";
3
+ import { nextId, nowIso, store } from "./store.js";
4
+ import { getPurchaseOrder, submitMockPurchaseOrder } from "./mock-procurement.js";
5
+ export function captureActionIntent(input, options = {}) {
6
+ const idempotencyKey = input.idempotencyKey?.trim();
7
+ if (idempotencyKey && idempotencyKey.length > 200)
8
+ throw new Error("Action idempotencyKey cannot exceed 200 characters.");
9
+ const action = {
10
+ id: nextId("act"),
11
+ idempotencyKey: idempotencyKey || "",
12
+ workspaceId: input.workspaceId ?? "demo-workspace",
13
+ workflowId: input.workflowId ?? "demo-workflow",
14
+ sourceAgentName: input.sourceAgentName,
15
+ sourceAgentRunId: input.sourceAgentRunId,
16
+ principal: input.principal ?? { id: input.sourceAgentName, type: "agent" },
17
+ requestedPermissions: input.requestedPermissions ?? [`${input.targetSystem}:${input.actionType}`],
18
+ actionType: input.actionType,
19
+ targetSystem: input.targetSystem,
20
+ targetUrl: input.targetUrl,
21
+ environment: input.environment ?? "demo",
22
+ title: input.title,
23
+ description: input.description,
24
+ businessObjectType: input.businessObjectType,
25
+ businessObjectId: input.businessObjectId,
26
+ amount: input.amount,
27
+ currency: input.currency,
28
+ recipient: input.recipient,
29
+ vendorName: input.vendorName,
30
+ beforeState: input.beforeState ?? {},
31
+ proposedAfterState: input.proposedAfterState ?? {},
32
+ fieldsChanged: input.fieldsChanged ?? [],
33
+ rawAgentReasoningSummary: input.rawAgentReasoningSummary,
34
+ createdAt: nowIso(),
35
+ status: "CAPTURED",
36
+ };
37
+ action.idempotencyKey ||= action.id;
38
+ store.actions.set(action.id, action);
39
+ appendAudit(action.id, "ACTION_CAPTURED", "AGENT", action.sourceAgentName, "Action intent captured from agent.", {
40
+ actionType: action.actionType,
41
+ targetSystem: action.targetSystem,
42
+ });
43
+ const risk = assessRisk(action);
44
+ store.riskAssessments.set(action.id, risk);
45
+ appendAudit(action.id, "RISK_ASSESSED", "SYSTEM", "onegent-runtime", "Risk assessment completed.", {
46
+ riskLevel: risk.riskLevel,
47
+ riskScore: risk.riskScore,
48
+ });
49
+ if (options.authorizationPolicy) {
50
+ const authorization = evaluateAuthorization(action, options.authorizationPolicy);
51
+ store.authorizationDecisions.set(action.id, authorization);
52
+ appendAudit(action.id, "AUTHORIZATION_CHECKED", "SYSTEM", options.authorizationPolicy.name, "Action authorization checked.", {
53
+ decision: authorization.decision,
54
+ principalId: authorization.principalId,
55
+ requestedPermissions: authorization.requestedPermissions,
56
+ grantedPermissions: authorization.grantedPermissions,
57
+ policyVersion: authorization.policyVersion,
58
+ });
59
+ if (authorization.decision === "DENY") {
60
+ action.status = "CANCELLED";
61
+ store.actions.set(action.id, action);
62
+ store.policyRulesByAction.set(action.id, []);
63
+ return getActionReview(action.id);
64
+ }
65
+ }
66
+ const configuredRules = options.policyRules ?? DEFAULT_POLICY_RULES;
67
+ const policy = options.policyEngine?.evaluate(action, risk, configuredRules) ?? evaluatePolicy(action, risk, options.policyRules);
68
+ store.policyRulesByAction.set(action.id, getPolicyRules(policy.triggeredPolicies, configuredRules === DEFAULT_POLICY_RULES ? DEFAULT_POLICY_RULES : [...configuredRules, ...DEFAULT_POLICY_RULES]));
69
+ appendAudit(action.id, "POLICY_EVALUATED", "SYSTEM", "onegent-runtime", "Policy evaluation completed.", {
70
+ effect: policy.effect,
71
+ triggeredPolicies: policy.triggeredPolicies,
72
+ });
73
+ if (policy.blocked) {
74
+ action.status = "CANCELLED";
75
+ store.actions.set(action.id, action);
76
+ return getActionReview(action.id);
77
+ }
78
+ if (policy.requiresHumanApproval) {
79
+ action.status = "NEEDS_REVIEW";
80
+ store.actions.set(action.id, action);
81
+ const approvalRequest = {
82
+ id: nextId("approval"),
83
+ actionIntentId: action.id,
84
+ riskAssessmentId: risk.id,
85
+ requestedBy: action.sourceAgentName,
86
+ assignedTo: "human-approver@example.local",
87
+ status: "PENDING",
88
+ createdAt: nowIso(),
89
+ };
90
+ store.approvals.set(action.id, approvalRequest);
91
+ appendAudit(action.id, "APPROVAL_REQUESTED", "SYSTEM", "onegent-runtime", "Human approval requested.", {
92
+ assignedTo: approvalRequest.assignedTo,
93
+ });
94
+ return getActionReview(action.id);
95
+ }
96
+ executeMockAction(action.id);
97
+ verifyAction(action.id);
98
+ return getActionReview(action.id);
99
+ }
100
+ export function approveAction(actionId, reviewerId = "human-approver@example.local", reviewerComment = "Approved for local demo execution.", options = {}) {
101
+ const action = requireAction(actionId);
102
+ const approval = requireApproval(actionId);
103
+ if (approval.status !== "PENDING") {
104
+ throw new Error(`Action ${actionId} does not have a pending approval request.`);
105
+ }
106
+ approval.status = "APPROVED";
107
+ approval.reviewedAt = nowIso();
108
+ approval.reviewerComment = reviewerComment;
109
+ store.approvals.set(actionId, approval);
110
+ action.status = "APPROVED";
111
+ store.actions.set(actionId, action);
112
+ appendAudit(action.id, "ACTION_APPROVED", "HUMAN", reviewerId, "Human approver approved the action.", {
113
+ reviewerComment,
114
+ });
115
+ if (options.autoExecute ?? true) {
116
+ executeMockAction(action.id);
117
+ verifyAction(action.id);
118
+ }
119
+ return getActionReview(action.id);
120
+ }
121
+ export function requestApproval(actionId, assignedTo = "human-approver@example.local", requestedBy = "onegent-runtime") {
122
+ const action = requireAction(actionId);
123
+ const existingApproval = store.approvals.get(actionId);
124
+ if (existingApproval) {
125
+ return existingApproval;
126
+ }
127
+ if (action.status === "REJECTED" || action.status === "EXECUTED" || action.status === "VERIFIED") {
128
+ throw new Error(`Action ${actionId} cannot request approval from status ${action.status}.`);
129
+ }
130
+ const risk = store.riskAssessments.get(actionId) ?? assessRisk(action);
131
+ store.riskAssessments.set(actionId, risk);
132
+ const approvalRequest = {
133
+ id: nextId("approval"),
134
+ actionIntentId: action.id,
135
+ riskAssessmentId: risk.id,
136
+ requestedBy,
137
+ assignedTo,
138
+ status: "PENDING",
139
+ createdAt: nowIso(),
140
+ };
141
+ action.status = "NEEDS_REVIEW";
142
+ store.actions.set(action.id, action);
143
+ store.approvals.set(action.id, approvalRequest);
144
+ appendAudit(action.id, "APPROVAL_REQUESTED", "SYSTEM", "onegent-runtime", "Human approval requested.", {
145
+ assignedTo: approvalRequest.assignedTo,
146
+ });
147
+ return approvalRequest;
148
+ }
149
+ export function rejectAction(actionId, reviewerId = "human-approver@example.local", reviewerComment = "Rejected by human approver.") {
150
+ const action = requireAction(actionId);
151
+ const approval = requireApproval(actionId);
152
+ if (approval.status !== "PENDING") {
153
+ throw new Error(`Action ${actionId} does not have a pending approval request.`);
154
+ }
155
+ approval.status = "REJECTED";
156
+ approval.reviewedAt = nowIso();
157
+ approval.reviewerComment = reviewerComment;
158
+ store.approvals.set(actionId, approval);
159
+ action.status = "REJECTED";
160
+ store.actions.set(action.id, action);
161
+ appendAudit(action.id, "ACTION_REJECTED", "HUMAN", reviewerId, "Human approver rejected the action.", {
162
+ reviewerComment,
163
+ });
164
+ return getActionReview(action.id);
165
+ }
166
+ export function executeAfterApproval(actionId) {
167
+ const action = requireAction(actionId);
168
+ const approval = store.approvals.get(actionId);
169
+ assertExecutableAfterApproval(action, approval);
170
+ if (action.status === "EXECUTED" || action.status === "VERIFIED" || action.status === "FAILED_VERIFICATION") {
171
+ return buildExecutionSummary(action);
172
+ }
173
+ return executeMockAction(actionId);
174
+ }
175
+ export async function executeAfterApprovalWithAdapter(actionId, adapter, context) {
176
+ const action = requireAction(actionId);
177
+ const approval = store.approvals.get(actionId);
178
+ assertExecutableAfterApproval(action, approval);
179
+ if (action.status === "EXECUTED" || action.status === "VERIFIED" || action.status === "FAILED_VERIFICATION") {
180
+ return buildExecutionSummary(action);
181
+ }
182
+ appendAudit(action.id, "MOCK_EXECUTION_STARTED", "SYSTEM", "onegent-runtime", "Local adapter execution started.", {
183
+ adapter: adapter.name,
184
+ targetSystem: action.targetSystem,
185
+ });
186
+ const result = await adapter.execute(action, context);
187
+ action.status = "EXECUTED";
188
+ store.actions.set(action.id, action);
189
+ appendAudit(action.id, "MOCK_EXECUTION_COMPLETED", "SYSTEM", "onegent-runtime", "Local adapter execution completed.", {
190
+ adapter: adapter.name,
191
+ method: result.method ?? "LOCAL_ADAPTER",
192
+ observedState: result.observedState,
193
+ });
194
+ return {
195
+ method: result.method ?? "LOCAL_ADAPTER",
196
+ status: "COMPLETED",
197
+ targetSystem: result.targetSystem ?? action.targetSystem,
198
+ previousState: result.previousState ?? action.beforeState,
199
+ observedState: result.observedState,
200
+ rollbackToken: result.rollbackToken,
201
+ };
202
+ }
203
+ export function recordRollback(actionId, adapterName, reason, result) {
204
+ const action = requireAction(actionId);
205
+ appendAudit(action.id, "ROLLBACK_STARTED", "SYSTEM", "onegent-runtime", "Compensating rollback started.", {
206
+ adapter: adapterName,
207
+ reason,
208
+ idempotencyKey: action.idempotencyKey,
209
+ });
210
+ action.status = result.success ? "ROLLED_BACK" : "ROLLBACK_FAILED";
211
+ store.actions.set(action.id, action);
212
+ appendAudit(action.id, result.success ? "ROLLBACK_COMPLETED" : "ROLLBACK_FAILED", "SYSTEM", "onegent-runtime", result.success ? "Compensating rollback completed." : "Compensating rollback failed.", { adapter: adapterName, reason, observedState: result.observedState, message: result.message });
213
+ return getActionReview(action.id);
214
+ }
215
+ export function executeMockAction(actionId) {
216
+ const action = requireAction(actionId);
217
+ if (action.status === "NEEDS_REVIEW") {
218
+ throw new Error(`Action ${actionId} requires human approval before execution.`);
219
+ }
220
+ appendAudit(action.id, "MOCK_EXECUTION_STARTED", "SYSTEM", "onegent-runtime", "Local mock execution started.", {
221
+ targetSystem: action.targetSystem,
222
+ });
223
+ let observedState = action.proposedAfterState;
224
+ let previousState = action.beforeState;
225
+ let method = "MOCK";
226
+ if (action.actionType === "SUBMIT" &&
227
+ action.businessObjectType === "purchase_order" &&
228
+ action.targetSystem === "MockERP") {
229
+ const previousPurchaseOrder = getPurchaseOrder(action.businessObjectId);
230
+ previousState = previousPurchaseOrder ? purchaseOrderState(previousPurchaseOrder) : action.beforeState;
231
+ const updatedPurchaseOrder = submitMockPurchaseOrder(action);
232
+ observedState = purchaseOrderState(updatedPurchaseOrder);
233
+ method = "LOCAL_MOCK_ERP";
234
+ }
235
+ action.status = "EXECUTED";
236
+ store.actions.set(action.id, action);
237
+ appendAudit(action.id, "MOCK_EXECUTION_COMPLETED", "SYSTEM", "onegent-runtime", "Local mock execution completed.", {
238
+ method,
239
+ observedState,
240
+ });
241
+ return {
242
+ method,
243
+ status: "COMPLETED",
244
+ targetSystem: action.targetSystem,
245
+ previousState,
246
+ observedState,
247
+ };
248
+ }
249
+ export function verifyOutcome(actionId, observedState) {
250
+ return verifyAction(actionId, observedState);
251
+ }
252
+ export function verifyAction(actionId, observedState) {
253
+ const action = requireAction(actionId);
254
+ if (action.status !== "EXECUTED" && action.status !== "VERIFIED" && action.status !== "FAILED_VERIFICATION") {
255
+ throw new Error(`Action ${actionId} must be mock-executed before verification.`);
256
+ }
257
+ const effectiveObservedState = observedState ?? observeActionState(action);
258
+ const differences = diffState(action.proposedAfterState, effectiveObservedState);
259
+ const success = differences.length === 0;
260
+ const method = action.businessObjectType === "purchase_order" && action.targetSystem === "MockERP" ? "LOCAL_MOCK_ERP" : "MOCK";
261
+ const result = {
262
+ id: nextId("verify"),
263
+ actionIntentId: action.id,
264
+ expectedState: action.proposedAfterState,
265
+ observedState: effectiveObservedState,
266
+ success,
267
+ differences,
268
+ verificationMethod: method,
269
+ createdAt: nowIso(),
270
+ };
271
+ store.verifications.set(action.id, result);
272
+ action.status = success ? "VERIFIED" : "FAILED_VERIFICATION";
273
+ store.actions.set(action.id, action);
274
+ appendAudit(action.id, success ? "VERIFICATION_PASSED" : "VERIFICATION_FAILED", "SYSTEM", "onegent-runtime", success ? "Observed state matched expected state." : "Observed state did not match expected state.", { differences });
275
+ return result;
276
+ }
277
+ export function getActionReview(actionId) {
278
+ const action = requireAction(actionId);
279
+ const riskAssessment = store.riskAssessments.get(actionId);
280
+ if (!riskAssessment) {
281
+ throw new Error(`Risk assessment for action ${actionId} was not found.`);
282
+ }
283
+ const approvalRequest = store.approvals.get(actionId);
284
+ const authorizationDecision = store.authorizationDecisions.get(actionId);
285
+ const verificationResult = store.verifications.get(actionId);
286
+ const auditEvents = store.auditEvents.filter((event) => event.actionIntentId === actionId);
287
+ const policyRules = store.policyRulesByAction.get(actionId) ?? getPolicyRules(riskAssessment.triggeredPolicies);
288
+ return {
289
+ action,
290
+ riskAssessment,
291
+ authorizationDecision,
292
+ approvalRequest,
293
+ verificationResult,
294
+ auditEvents,
295
+ policyRules,
296
+ blocked: action.status === "CANCELLED",
297
+ };
298
+ }
299
+ export function listActionReviews() {
300
+ return [...store.actions.keys()].map((actionId) => getActionReview(actionId));
301
+ }
302
+ export function writeAuditPacket(actionId) {
303
+ return generateAuditPacket(actionId);
304
+ }
305
+ export function generateAuditPacket(actionId) {
306
+ const review = getActionReview(actionId);
307
+ const execution = buildExecutionSummary(review.action);
308
+ appendAudit(actionId, "AUDIT_PACKET_GENERATED", "SYSTEM", "onegent-runtime", "Audit packet generated for customer demo.");
309
+ const refreshedReview = getActionReview(actionId);
310
+ return {
311
+ demo: true,
312
+ product: "AgentCert Onegent Runtime",
313
+ scenario: refreshedReview.action.businessObjectType === "purchase_order" && refreshedReview.action.targetSystem === "MockERP"
314
+ ? "Procurement purchase-order approval walkthrough"
315
+ : `${refreshedReview.action.actionType} ${refreshedReview.action.businessObjectType} action in ${refreshedReview.action.targetSystem}`,
316
+ actionIntent: refreshedReview.action,
317
+ riskAssessment: refreshedReview.riskAssessment,
318
+ authorizationDecision: refreshedReview.authorizationDecision,
319
+ triggeredPolicies: refreshedReview.policyRules,
320
+ approvalRequest: refreshedReview.approvalRequest,
321
+ execution,
322
+ verificationResult: refreshedReview.verificationResult,
323
+ auditEvents: refreshedReview.auditEvents,
324
+ disclaimer: "Local demo only. No real payments, emails, vendor portals, credentials, or production systems are used.",
325
+ };
326
+ }
327
+ function evaluateAuthorization(action, policy) {
328
+ const result = policy.authorize(action);
329
+ const missingPermissions = action.requestedPermissions.filter((permission) => !result.grantedPermissions.includes(permission));
330
+ const allowed = result.allowed && missingPermissions.length === 0;
331
+ const suffix = missingPermissions.length > 0 ? ` Missing permissions: ${missingPermissions.join(", ")}.` : "";
332
+ return {
333
+ id: nextId("authz"),
334
+ actionIntentId: action.id,
335
+ principalId: action.principal.id,
336
+ decision: allowed ? "ALLOW" : "DENY",
337
+ requestedPermissions: [...action.requestedPermissions],
338
+ grantedPermissions: [...result.grantedPermissions],
339
+ policyName: policy.name,
340
+ policyVersion: result.policyVersion,
341
+ reason: `${result.reason}${suffix}`.trim(),
342
+ createdAt: nowIso(),
343
+ };
344
+ }
345
+ function observeActionState(action) {
346
+ if (action.businessObjectType === "purchase_order" &&
347
+ action.targetSystem === "MockERP" &&
348
+ action.businessObjectId.length > 0) {
349
+ const purchaseOrder = getPurchaseOrder(action.businessObjectId);
350
+ if (purchaseOrder) {
351
+ return purchaseOrderState(purchaseOrder);
352
+ }
353
+ }
354
+ return action.status === "EXECUTED" ? action.proposedAfterState : action.beforeState;
355
+ }
356
+ function purchaseOrderState(purchaseOrder) {
357
+ return {
358
+ id: purchaseOrder.id,
359
+ vendor: purchaseOrder.vendor,
360
+ amount: purchaseOrder.amount,
361
+ currency: purchaseOrder.currency,
362
+ status: purchaseOrder.status,
363
+ };
364
+ }
365
+ function diffState(expected, observed) {
366
+ const differences = [];
367
+ for (const [key, expectedValue] of Object.entries(expected)) {
368
+ const observedValue = observed[key];
369
+ if (JSON.stringify(expectedValue) !== JSON.stringify(observedValue)) {
370
+ differences.push(`${key}: expected ${JSON.stringify(expectedValue)}, observed ${JSON.stringify(observedValue)}`);
371
+ }
372
+ }
373
+ return differences;
374
+ }
375
+ function buildExecutionSummary(action) {
376
+ const verification = store.verifications.get(action.id);
377
+ const method = action.businessObjectType === "purchase_order" && action.targetSystem === "MockERP" ? "LOCAL_MOCK_ERP" : "MOCK";
378
+ return {
379
+ method,
380
+ status: new Set(["EXECUTED", "VERIFIED", "FAILED_VERIFICATION", "ROLLED_BACK", "ROLLBACK_FAILED"]).has(action.status) ? "COMPLETED" : "NOT_EXECUTED",
381
+ targetSystem: action.targetSystem,
382
+ previousState: action.beforeState,
383
+ observedState: verification?.observedState,
384
+ };
385
+ }
386
+ function assertExecutableAfterApproval(action, approval) {
387
+ if (approval && approval.status !== "APPROVED") {
388
+ throw new Error(`Action ${action.id} cannot execute while approval status is ${approval.status}.`);
389
+ }
390
+ if (action.status === "REJECTED" || action.status === "CANCELLED") {
391
+ throw new Error(`Action ${action.id} cannot execute from status ${action.status}.`);
392
+ }
393
+ }
394
+ function appendAudit(actionIntentId, eventType, actorType, actorId, message, metadata) {
395
+ const event = {
396
+ id: nextId("audit"),
397
+ actionIntentId,
398
+ eventType,
399
+ actorType,
400
+ actorId,
401
+ message,
402
+ metadata,
403
+ createdAt: nowIso(),
404
+ };
405
+ store.auditEvents.push(event);
406
+ return event;
407
+ }
408
+ function requireAction(actionId) {
409
+ const action = store.actions.get(actionId);
410
+ if (!action) {
411
+ throw new Error(`Action ${actionId} was not found.`);
412
+ }
413
+ return action;
414
+ }
415
+ function requireApproval(actionId) {
416
+ const approval = store.approvals.get(actionId);
417
+ if (!approval) {
418
+ throw new Error(`Approval request for action ${actionId} was not found.`);
419
+ }
420
+ return approval;
421
+ }
@@ -0,0 +1,16 @@
1
+ import type { ActionIntent, AuthorizationDecision, ApprovalRequest, AuditEvent, MockPurchaseOrder, PolicyRule, RiskAssessment, VerificationResult } from "./types.js";
2
+ export interface ActionGatewayStore {
3
+ actions: Map<string, ActionIntent>;
4
+ riskAssessments: Map<string, RiskAssessment>;
5
+ authorizationDecisions: Map<string, AuthorizationDecision>;
6
+ approvals: Map<string, ApprovalRequest>;
7
+ verifications: Map<string, VerificationResult>;
8
+ auditEvents: AuditEvent[];
9
+ purchaseOrders: Map<string, MockPurchaseOrder>;
10
+ policyRulesByAction: Map<string, PolicyRule[]>;
11
+ }
12
+ export declare const store: ActionGatewayStore;
13
+ export declare function nextId(prefix: string): string;
14
+ export declare function nowIso(): string;
15
+ export declare function resetActionGatewayStore(): void;
16
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../onegent-runtime/src/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,qBAAqB,EACrB,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACnC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC7C,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAC3D,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC/C,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC/C,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;CAChD;AAED,eAAO,MAAM,KAAK,EAAE,kBASnB,CAAC;AAIF,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,wBAAgB,MAAM,IAAI,MAAM,CAE/B;AAED,wBAAgB,uBAAuB,IAAI,IAAI,CAU9C"}
@@ -0,0 +1,29 @@
1
+ export const store = {
2
+ actions: new Map(),
3
+ riskAssessments: new Map(),
4
+ authorizationDecisions: new Map(),
5
+ approvals: new Map(),
6
+ verifications: new Map(),
7
+ auditEvents: [],
8
+ purchaseOrders: new Map(),
9
+ policyRulesByAction: new Map(),
10
+ };
11
+ let sequence = 0;
12
+ export function nextId(prefix) {
13
+ sequence += 1;
14
+ return `${prefix}_${String(sequence).padStart(6, "0")}`;
15
+ }
16
+ export function nowIso() {
17
+ return new Date().toISOString();
18
+ }
19
+ export function resetActionGatewayStore() {
20
+ sequence = 0;
21
+ store.actions.clear();
22
+ store.riskAssessments.clear();
23
+ store.authorizationDecisions.clear();
24
+ store.approvals.clear();
25
+ store.verifications.clear();
26
+ store.auditEvents = [];
27
+ store.purchaseOrders.clear();
28
+ store.policyRulesByAction.clear();
29
+ }