witnora 0.8.1 → 0.9.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 (87) hide show
  1. package/README.md +275 -12
  2. package/dist/artifact-manifest.js +37 -0
  3. package/dist/artifact-validation.js +102 -0
  4. package/dist/badge.js +31 -0
  5. package/dist/browser-adapter.js +156 -0
  6. package/dist/bundle.js +100 -0
  7. package/dist/cli.js +971 -0
  8. package/dist/command-help.js +71 -0
  9. package/dist/companion-artifacts.js +170 -0
  10. package/dist/conformance.js +115 -0
  11. package/dist/control-plane.js +409 -0
  12. package/dist/corpus-governance.js +126 -0
  13. package/dist/corpus-store.js +239 -0
  14. package/dist/corpus.js +438 -0
  15. package/dist/credentials.js +127 -0
  16. package/dist/evidence-signing.js +85 -0
  17. package/dist/failure-review.js +188 -0
  18. package/dist/guided-setup.js +101 -0
  19. package/dist/index.js +16 -0
  20. package/dist/lab.js +323 -0
  21. package/dist/local-server.js +491 -0
  22. package/dist/monitor.js +100 -0
  23. package/dist/normalizers.js +265 -0
  24. package/dist/onboarding-templates.js +158 -0
  25. package/dist/release-gate.js +457 -0
  26. package/dist/report.js +165 -0
  27. package/dist/runner.js +349 -0
  28. package/dist/sandbox.js +424 -0
  29. package/dist/schema-validator.js +503 -0
  30. package/dist/try.js +135 -0
  31. package/dist/types.js +3 -0
  32. package/dist/vendor/onegent-runtime/browser-adapter-kit.d.ts +107 -0
  33. package/dist/vendor/onegent-runtime/browser-adapter-kit.d.ts.map +1 -0
  34. package/dist/vendor/onegent-runtime/browser-adapter-kit.js +187 -0
  35. package/dist/vendor/onegent-runtime/browser-enforcement-runtime.d.ts +183 -0
  36. package/dist/vendor/onegent-runtime/browser-enforcement-runtime.d.ts.map +1 -0
  37. package/dist/vendor/onegent-runtime/browser-enforcement-runtime.js +344 -0
  38. package/dist/vendor/onegent-runtime/controlled-adapter.d.ts +6 -0
  39. package/dist/vendor/onegent-runtime/controlled-adapter.d.ts.map +1 -0
  40. package/dist/vendor/onegent-runtime/controlled-adapter.js +40 -0
  41. package/dist/vendor/onegent-runtime/mock-procurement.d.ts +6 -0
  42. package/dist/vendor/onegent-runtime/mock-procurement.d.ts.map +1 -0
  43. package/dist/vendor/onegent-runtime/mock-procurement.js +33 -0
  44. package/dist/vendor/onegent-runtime/policies.d.ts +6 -0
  45. package/dist/vendor/onegent-runtime/policies.d.ts.map +1 -0
  46. package/dist/vendor/onegent-runtime/policies.js +109 -0
  47. package/dist/vendor/onegent-runtime/risk.d.ts +3 -0
  48. package/dist/vendor/onegent-runtime/risk.d.ts.map +1 -0
  49. package/dist/vendor/onegent-runtime/risk.js +54 -0
  50. package/dist/vendor/onegent-runtime/sandbox-adapter-kit.d.ts +45 -0
  51. package/dist/vendor/onegent-runtime/sandbox-adapter-kit.d.ts.map +1 -0
  52. package/dist/vendor/onegent-runtime/sandbox-adapter-kit.js +148 -0
  53. package/dist/vendor/onegent-runtime/sandbox-harness.d.ts +167 -0
  54. package/dist/vendor/onegent-runtime/sandbox-harness.d.ts.map +1 -0
  55. package/dist/vendor/onegent-runtime/sandbox-harness.js +729 -0
  56. package/dist/vendor/onegent-runtime/sandbox-hosted.d.ts +77 -0
  57. package/dist/vendor/onegent-runtime/sandbox-hosted.d.ts.map +1 -0
  58. package/dist/vendor/onegent-runtime/sandbox-hosted.js +152 -0
  59. package/dist/vendor/onegent-runtime/sdk.d.ts +29 -0
  60. package/dist/vendor/onegent-runtime/sdk.d.ts.map +1 -0
  61. package/dist/vendor/onegent-runtime/sdk.js +140 -0
  62. package/dist/vendor/onegent-runtime/service.d.ts +27 -0
  63. package/dist/vendor/onegent-runtime/service.d.ts.map +1 -0
  64. package/dist/vendor/onegent-runtime/service.js +423 -0
  65. package/dist/vendor/onegent-runtime/store.d.ts +16 -0
  66. package/dist/vendor/onegent-runtime/store.d.ts.map +1 -0
  67. package/dist/vendor/onegent-runtime/store.js +29 -0
  68. package/dist/vendor/onegent-runtime/stripe-test-readonly.d.ts +79 -0
  69. package/dist/vendor/onegent-runtime/stripe-test-readonly.d.ts.map +1 -0
  70. package/dist/vendor/onegent-runtime/stripe-test-readonly.js +163 -0
  71. package/dist/vendor/onegent-runtime/trust-crypto.d.ts +11 -0
  72. package/dist/vendor/onegent-runtime/trust-crypto.d.ts.map +1 -0
  73. package/dist/vendor/onegent-runtime/trust-crypto.js +70 -0
  74. package/dist/vendor/onegent-runtime/trust-types.d.ts +163 -0
  75. package/dist/vendor/onegent-runtime/trust-types.d.ts.map +1 -0
  76. package/dist/vendor/onegent-runtime/trust-types.js +7 -0
  77. package/dist/vendor/onegent-runtime/trusted-recorder.d.ts +49 -0
  78. package/dist/vendor/onegent-runtime/trusted-recorder.d.ts.map +1 -0
  79. package/dist/vendor/onegent-runtime/trusted-recorder.js +347 -0
  80. package/dist/vendor/onegent-runtime/types.d.ts +287 -0
  81. package/dist/vendor/onegent-runtime/types.d.ts.map +1 -0
  82. package/dist/vendor/onegent-runtime/types.js +1 -0
  83. package/dist/vendor/onegent-runtime/vendor-sandbox-egress.d.ts +49 -0
  84. package/dist/vendor/onegent-runtime/vendor-sandbox-egress.d.ts.map +1 -0
  85. package/dist/vendor/onegent-runtime/vendor-sandbox-egress.js +152 -0
  86. package/package.json +33 -13
  87. package/bin/witnora.js +0 -3
@@ -0,0 +1,347 @@
1
+ import { mkdir, open, readFile, rename, writeFile } from "node:fs/promises";
2
+ import { dirname, join, resolve } from "node:path";
3
+ import { randomUUID } from "node:crypto";
4
+ import { canonicalJson, publicKeyPemFor, publicKeySha256, sha256, signDigest, verifyDigest } from "./trust-crypto.js";
5
+ export class TrustedActionRecorder {
6
+ runId;
7
+ journalPath;
8
+ ackPath;
9
+ collector;
10
+ sourcePublicKeyPem;
11
+ records;
12
+ signer;
13
+ now;
14
+ recoveredTailBytes;
15
+ ackSequence;
16
+ writeChain = Promise.resolve();
17
+ constructor(runId, storageDirectory, collector, signer, publicKeyPem, records, recoveredTailBytes, ackSequence, now) {
18
+ this.runId = runId;
19
+ const base = safeFileName(runId);
20
+ this.journalPath = join(resolve(storageDirectory), `${base}.journal.jsonl`);
21
+ this.ackPath = join(resolve(storageDirectory), `${base}.ack.json`);
22
+ this.collector = collector;
23
+ this.signer = signer;
24
+ this.sourcePublicKeyPem = publicKeyPem;
25
+ this.records = records;
26
+ this.recoveredTailBytes = recoveredTailBytes;
27
+ this.ackSequence = ackSequence;
28
+ this.now = now;
29
+ }
30
+ static async open(options) {
31
+ required(options.runId, "runId");
32
+ required(options.collector.id, "collector.id");
33
+ required(options.collector.version, "collector.version");
34
+ required(options.collector.environment, "collector.environment");
35
+ required(options.signer.keyId, "signer.keyId");
36
+ const storage = resolve(options.storageDirectory);
37
+ await mkdir(storage, { recursive: true });
38
+ const publicKeyPem = publicKeyPemFor(options.signer);
39
+ const collector = {
40
+ ...structuredClone(options.collector),
41
+ keyId: options.signer.keyId,
42
+ publicKeySha256: publicKeySha256(publicKeyPem),
43
+ };
44
+ const journalPath = join(storage, `${safeFileName(options.runId)}.journal.jsonl`);
45
+ const recovered = await recoverJournal(journalPath);
46
+ for (const record of recovered.records) {
47
+ if (record.runId !== options.runId)
48
+ throw new Error(`Recorder journal contains a record for run ${record.runId}.`);
49
+ if (canonicalJson(record.collector) !== canonicalJson(collector))
50
+ throw new Error("Recorder collector identity does not match the existing journal.");
51
+ }
52
+ const ackSequence = await readAck(join(storage, `${safeFileName(options.runId)}.ack.json`), recovered.records);
53
+ return new TrustedActionRecorder(options.runId, storage, collector, options.signer, publicKeyPem, recovered.records, recovered.recoveredTailBytes, ackSequence, options.now ?? (() => new Date()));
54
+ }
55
+ async start(payload = {}) {
56
+ if (this.records.length) {
57
+ const first = this.records[0];
58
+ if (first.type !== "RUN_STARTED")
59
+ throw new Error("Recorder journal does not begin with RUN_STARTED.");
60
+ if (this.recoveredTailBytes > 0 && this.records.at(-1)?.type !== "RUN_COMPLETED") {
61
+ const recoveredTailBytes = this.recoveredTailBytes;
62
+ await this.append("JOURNAL_RECOVERED", { recoveredTailBytes, droppedFragments: 1 });
63
+ this.recoveredTailBytes = 0;
64
+ }
65
+ return structuredClone(first);
66
+ }
67
+ const started = await this.appendAt("RUN_STARTED", payload, { absoluteSequence: 0 });
68
+ if (this.recoveredTailBytes > 0) {
69
+ const recoveredTailBytes = this.recoveredTailBytes;
70
+ await this.append("JOURNAL_RECOVERED", { recoveredTailBytes, droppedFragments: 1 });
71
+ this.recoveredTailBytes = 0;
72
+ }
73
+ return started;
74
+ }
75
+ async append(type, payload = {}) {
76
+ if (!this.records.length)
77
+ throw new Error("Recorder must start the run before appending events.");
78
+ if (this.records.at(-1)?.type === "RUN_COMPLETED")
79
+ throw new Error("Recorder run is already complete.");
80
+ return this.appendAt(type, payload);
81
+ }
82
+ async recordDropped(count, reason) {
83
+ if (!Number.isSafeInteger(count) || count <= 0)
84
+ throw new Error("Dropped event count must be a positive safe integer.");
85
+ required(reason, "dropped event reason");
86
+ return this.appendAt("EVENTS_DROPPED", { count, reason }, { skippedSequences: count });
87
+ }
88
+ async complete(payload = {}) {
89
+ if (!this.records.length)
90
+ throw new Error("Recorder must start the run before completion.");
91
+ const existing = this.records.at(-1);
92
+ if (existing?.type === "RUN_COMPLETED")
93
+ return structuredClone(existing);
94
+ return this.appendAt("RUN_COMPLETED", payload);
95
+ }
96
+ validation() {
97
+ return validateTrustedJournal(this.records, this.sourcePublicKeyPem, this.recoveredTailBytes);
98
+ }
99
+ listRecords() {
100
+ return structuredClone(this.records);
101
+ }
102
+ pendingRecords() {
103
+ return structuredClone(this.records.filter((record) => record.sequence > this.ackSequence));
104
+ }
105
+ async flush(sink) {
106
+ let delivered = 0;
107
+ for (const record of this.records.filter((item) => item.sequence > this.ackSequence)) {
108
+ await sink.write(structuredClone(record));
109
+ await this.persistAck({ sequence: record.sequence, eventHash: record.eventHash });
110
+ this.ackSequence = record.sequence;
111
+ delivered += 1;
112
+ }
113
+ return delivered;
114
+ }
115
+ createReceipt(input) {
116
+ const validation = this.validation();
117
+ if (!validation.complete)
118
+ throw new Error("Cannot create a trusted run receipt before RUN_COMPLETED.");
119
+ const first = this.records[0];
120
+ const last = this.records.at(-1);
121
+ const payload = {
122
+ schemaVersion: "agentcert.trusted_run_receipt.v0.1",
123
+ runId: this.runId,
124
+ collector: this.collector,
125
+ startedAt: first.occurredAt,
126
+ completedAt: last.occurredAt,
127
+ eventCount: this.records.length,
128
+ droppedEventCount: validation.droppedEventCount,
129
+ firstEventHash: first.eventHash,
130
+ lastEventHash: last.eventHash,
131
+ mandateDigests: [...new Set(input.mandateDigests)].sort(),
132
+ actionIds: [...new Set(input.actionIds)].sort(),
133
+ journal: validation,
134
+ evidenceStrength: input.evidenceStrength,
135
+ sourcePublicKeyPem: this.sourcePublicKeyPem,
136
+ };
137
+ const receiptSha256 = sha256(canonicalJson(payload));
138
+ return { ...payload, receiptSha256, sourceSignature: signDigest(receiptSha256, this.signer) };
139
+ }
140
+ async appendAt(type, payload, options = {}) {
141
+ let result;
142
+ const operation = this.writeChain.then(async () => {
143
+ const previous = this.records.at(-1);
144
+ const sequence = options.absoluteSequence ?? (previous?.sequence ?? -1) + 1 + (options.skippedSequences ?? 0);
145
+ if (previous && sequence <= previous.sequence)
146
+ throw new Error(`Sequence ${sequence} must be greater than ${previous.sequence}.`);
147
+ const occurredAt = this.now().toISOString();
148
+ const payloadCopy = structuredClone(payload);
149
+ const payloadSha256 = sha256(canonicalJson(payloadCopy));
150
+ const unsigned = {
151
+ schemaVersion: "agentcert.trusted_action_record.v0.1",
152
+ recordId: randomUUID(),
153
+ runId: this.runId,
154
+ sequence,
155
+ occurredAt,
156
+ type,
157
+ collector: this.collector,
158
+ previousEventHash: previous?.eventHash,
159
+ payload: payloadCopy,
160
+ payloadSha256,
161
+ };
162
+ const eventHash = sha256(canonicalJson(unsigned));
163
+ result = { ...unsigned, eventHash, sourceSignature: signDigest(eventHash, this.signer) };
164
+ await appendDurably(this.journalPath, `${JSON.stringify(result)}\n`);
165
+ this.records.push(result);
166
+ });
167
+ this.writeChain = operation.catch(() => undefined);
168
+ await operation;
169
+ return structuredClone(result);
170
+ }
171
+ async persistAck(ack) {
172
+ const temporary = `${this.ackPath}.${process.pid}.${randomUUID()}.tmp`;
173
+ await writeFile(temporary, JSON.stringify(ack), "utf8");
174
+ await rename(temporary, this.ackPath);
175
+ }
176
+ }
177
+ export function verifyTrustedRunReceipt(receipt) {
178
+ const errors = [];
179
+ const { receiptSha256, sourceSignature, ...payload } = receipt;
180
+ const actualDigest = sha256(canonicalJson(payload));
181
+ const digestMatches = actualDigest === receiptSha256;
182
+ if (!digestMatches)
183
+ errors.push("Trusted run receipt digest does not match its payload.");
184
+ const collectorKeyMatches = receipt.collector.keyId === sourceSignature.keyId
185
+ && receipt.collector.publicKeySha256 === publicKeySha256(receipt.sourcePublicKeyPem);
186
+ if (!collectorKeyMatches)
187
+ errors.push("Trusted run receipt collector identity does not match its source key.");
188
+ const signatureMatches = verifyDigest(receiptSha256, sourceSignature, receipt.sourcePublicKeyPem);
189
+ if (!signatureMatches)
190
+ errors.push("Trusted run receipt source signature is invalid.");
191
+ return { valid: digestMatches && collectorKeyMatches && signatureMatches, digestMatches, signatureMatches, collectorKeyMatches, errors };
192
+ }
193
+ export function validateTrustedJournal(records, publicKeyPem, recoveredTailBytes = 0) {
194
+ const gaps = [];
195
+ const duplicateSequences = [];
196
+ const duplicateRecordIds = [];
197
+ const hashMismatches = [];
198
+ const signatureFailures = [];
199
+ const errors = [];
200
+ const sequences = new Set();
201
+ const recordIds = new Set();
202
+ let droppedEventCount = recoveredTailBytes > 0 ? 1 : 0;
203
+ for (const [index, record] of records.entries()) {
204
+ if (sequences.has(record.sequence))
205
+ duplicateSequences.push(record.sequence);
206
+ sequences.add(record.sequence);
207
+ if (recordIds.has(record.recordId))
208
+ duplicateRecordIds.push(record.recordId);
209
+ recordIds.add(record.recordId);
210
+ const previous = records[index - 1];
211
+ if (previous) {
212
+ if (record.sequence > previous.sequence + 1) {
213
+ const missing = record.sequence - previous.sequence - 1;
214
+ const declared = record.type === "EVENTS_DROPPED" && record.payload.count === missing;
215
+ gaps.push({ afterSequence: previous.sequence, beforeSequence: record.sequence, missing, declared });
216
+ if (declared)
217
+ droppedEventCount += missing;
218
+ }
219
+ else if (record.sequence <= previous.sequence) {
220
+ errors.push(`Sequence ${record.sequence} is not strictly greater than ${previous.sequence}.`);
221
+ }
222
+ if (record.previousEventHash !== previous.eventHash)
223
+ hashMismatches.push(record.sequence);
224
+ }
225
+ else {
226
+ if (record.sequence !== 0)
227
+ gaps.push({ afterSequence: -1, beforeSequence: record.sequence, missing: record.sequence, declared: false });
228
+ if (record.previousEventHash !== undefined)
229
+ hashMismatches.push(record.sequence);
230
+ }
231
+ if (record.type === "JOURNAL_RECOVERED")
232
+ droppedEventCount += numeric(record.payload.droppedFragments);
233
+ const expectedPayloadHash = sha256(canonicalJson(record.payload));
234
+ if (record.payloadSha256 !== expectedPayloadHash)
235
+ hashMismatches.push(record.sequence);
236
+ const expectedEventHash = sha256(canonicalJson(unsignedRecord(record)));
237
+ if (record.eventHash !== expectedEventHash)
238
+ hashMismatches.push(record.sequence);
239
+ if (!verifyDigest(record.eventHash, record.sourceSignature, publicKeyPem))
240
+ signatureFailures.push(record.sequence);
241
+ }
242
+ const undeclaredGaps = gaps.filter((gap) => !gap.declared);
243
+ if (undeclaredGaps.length)
244
+ errors.push("Journal contains undeclared sequence gaps.");
245
+ if (duplicateSequences.length)
246
+ errors.push("Journal contains duplicate sequences.");
247
+ if (duplicateRecordIds.length)
248
+ errors.push("Journal contains duplicate record identifiers.");
249
+ if (hashMismatches.length)
250
+ errors.push("Journal hash chain does not reconcile.");
251
+ if (signatureFailures.length)
252
+ errors.push("Journal contains invalid source signatures.");
253
+ const complete = records[0]?.type === "RUN_STARTED" && records.at(-1)?.type === "RUN_COMPLETED";
254
+ return {
255
+ valid: errors.length === 0,
256
+ complete,
257
+ sourceSigned: records.length > 0 && signatureFailures.length === 0,
258
+ gaps,
259
+ duplicateSequences: [...new Set(duplicateSequences)],
260
+ duplicateRecordIds: [...new Set(duplicateRecordIds)],
261
+ hashMismatches: [...new Set(hashMismatches)],
262
+ signatureFailures: [...new Set(signatureFailures)],
263
+ droppedEventCount,
264
+ recoveredTailBytes,
265
+ errors,
266
+ };
267
+ }
268
+ function unsignedRecord(record) {
269
+ const { eventHash: _eventHash, sourceSignature: _sourceSignature, ...unsigned } = record;
270
+ return unsigned;
271
+ }
272
+ async function recoverJournal(filePath) {
273
+ let raw = "";
274
+ try {
275
+ raw = await readFile(filePath, "utf8");
276
+ }
277
+ catch (error) {
278
+ if (error.code !== "ENOENT")
279
+ throw error;
280
+ }
281
+ if (!raw)
282
+ return { records: [], recoveredTailBytes: 0 };
283
+ const lines = raw.split("\n");
284
+ const records = [];
285
+ let recoveredTailBytes = 0;
286
+ for (let index = 0; index < lines.length; index += 1) {
287
+ const line = lines[index];
288
+ if (!line.trim())
289
+ continue;
290
+ try {
291
+ records.push(JSON.parse(line));
292
+ }
293
+ catch {
294
+ const isTail = lines.slice(index + 1).every((candidate) => !candidate.trim());
295
+ if (!isTail)
296
+ throw new Error(`Trusted recorder journal contains invalid JSON at line ${index + 1}.`);
297
+ recoveredTailBytes = Buffer.byteLength(line);
298
+ await writeFile(filePath, records.length ? `${records.map((record) => JSON.stringify(record)).join("\n")}\n` : "", "utf8");
299
+ break;
300
+ }
301
+ }
302
+ return { records, recoveredTailBytes };
303
+ }
304
+ async function readAck(filePath, records) {
305
+ let raw = "";
306
+ try {
307
+ raw = await readFile(filePath, "utf8");
308
+ }
309
+ catch (error) {
310
+ if (error.code === "ENOENT")
311
+ return -1;
312
+ throw error;
313
+ }
314
+ let ack;
315
+ try {
316
+ ack = JSON.parse(raw);
317
+ }
318
+ catch {
319
+ throw new Error("Recorder acknowledgement file is invalid JSON.");
320
+ }
321
+ const record = records.find((item) => item.sequence === ack.sequence);
322
+ if (!record || record.eventHash !== ack.eventHash)
323
+ throw new Error("Recorder acknowledgement does not match the journal.");
324
+ return ack.sequence;
325
+ }
326
+ async function appendDurably(filePath, value) {
327
+ await mkdir(dirname(filePath), { recursive: true });
328
+ const handle = await open(filePath, "a");
329
+ try {
330
+ await handle.write(value);
331
+ await handle.sync();
332
+ }
333
+ finally {
334
+ await handle.close();
335
+ }
336
+ }
337
+ function safeFileName(value) {
338
+ return value.replace(/[^a-zA-Z0-9._-]/g, "_").slice(0, 160);
339
+ }
340
+ function required(value, field) {
341
+ if (!value?.trim())
342
+ throw new Error(`Recorder ${field} is required.`);
343
+ return value;
344
+ }
345
+ function numeric(value) {
346
+ return typeof value === "number" && Number.isSafeInteger(value) && value > 0 ? value : 0;
347
+ }
@@ -0,0 +1,287 @@
1
+ export type ActionType = "SUBMIT" | "PAY" | "SEND" | "UPDATE";
2
+ export type ActionEnvironment = "demo" | "staging" | "production";
3
+ export type ActionIntentStatus = "CAPTURED" | "NEEDS_REVIEW" | "APPROVED" | "REJECTED" | "EXECUTED" | "VERIFIED" | "FAILED_VERIFICATION" | "ROLLED_BACK" | "ROLLBACK_FAILED" | "CANCELLED";
4
+ export type RiskLevel = "LOW" | "MEDIUM" | "HIGH" | "CRITICAL";
5
+ export type PolicyEffect = "ALLOW" | "REQUIRE_APPROVAL" | "BLOCK";
6
+ export type ApprovalStatus = "PENDING" | "APPROVED" | "REJECTED" | "EXPIRED";
7
+ export type VerificationMethod = "MOCK" | "LOCAL_MOCK_ERP" | "LOCAL_ADAPTER" | "INDEPENDENT_PROBE";
8
+ export interface ActionFieldChange {
9
+ field: string;
10
+ before?: unknown;
11
+ after?: unknown;
12
+ }
13
+ export interface AgentPrincipal {
14
+ id: string;
15
+ type: "agent" | "service";
16
+ version?: string;
17
+ owner?: string;
18
+ }
19
+ export interface ActionIntent {
20
+ id: string;
21
+ idempotencyKey: string;
22
+ workspaceId: string;
23
+ workflowId: string;
24
+ sourceAgentName: string;
25
+ sourceAgentRunId?: string;
26
+ principal: AgentPrincipal;
27
+ requestedPermissions: string[];
28
+ mandateId?: string;
29
+ actionType: ActionType;
30
+ targetSystem: string;
31
+ targetUrl?: string;
32
+ environment: ActionEnvironment;
33
+ title: string;
34
+ description: string;
35
+ businessObjectType: string;
36
+ businessObjectId: string;
37
+ amount?: number;
38
+ currency?: string;
39
+ recipient?: string;
40
+ vendorName?: string;
41
+ beforeState: Record<string, unknown>;
42
+ proposedAfterState: Record<string, unknown>;
43
+ fieldsChanged: ActionFieldChange[];
44
+ rawAgentReasoningSummary?: string;
45
+ createdAt: string;
46
+ status: ActionIntentStatus;
47
+ }
48
+ export interface CreateActionIntentInput {
49
+ idempotencyKey?: string;
50
+ workspaceId?: string;
51
+ workflowId?: string;
52
+ sourceAgentName: string;
53
+ sourceAgentRunId?: string;
54
+ principal?: AgentPrincipal;
55
+ requestedPermissions?: string[];
56
+ mandateId?: string;
57
+ actionType: ActionType;
58
+ targetSystem: string;
59
+ targetUrl?: string;
60
+ environment?: ActionEnvironment;
61
+ title: string;
62
+ description: string;
63
+ businessObjectType: string;
64
+ businessObjectId: string;
65
+ amount?: number;
66
+ currency?: string;
67
+ recipient?: string;
68
+ vendorName?: string;
69
+ beforeState?: Record<string, unknown>;
70
+ proposedAfterState?: Record<string, unknown>;
71
+ fieldsChanged?: ActionFieldChange[];
72
+ rawAgentReasoningSummary?: string;
73
+ }
74
+ export interface RiskAssessment {
75
+ id: string;
76
+ actionIntentId: string;
77
+ riskLevel: RiskLevel;
78
+ riskScore: number;
79
+ reasons: string[];
80
+ triggeredPolicies: string[];
81
+ requiresHumanApproval: boolean;
82
+ createdAt: string;
83
+ }
84
+ export interface PolicyRule {
85
+ id: string;
86
+ name: string;
87
+ description: string;
88
+ actionTypes: ActionType[];
89
+ effect: PolicyEffect;
90
+ enabled: boolean;
91
+ conditions?: PolicyCondition[];
92
+ }
93
+ export interface PolicyCondition {
94
+ field: string;
95
+ operator: "equals" | "notEquals" | "greaterThan" | "greaterThanOrEqual" | "lessThan" | "lessThanOrEqual" | "includes";
96
+ value: unknown;
97
+ }
98
+ export interface PolicyConfig {
99
+ schemaVersion: "1";
100
+ rules: PolicyRule[];
101
+ }
102
+ export interface PolicyEvaluation {
103
+ effect: PolicyEffect;
104
+ triggeredPolicies: string[];
105
+ reasons: string[];
106
+ requiresHumanApproval: boolean;
107
+ blocked: boolean;
108
+ }
109
+ export interface PolicyEngine {
110
+ evaluate(action: ActionIntent, risk: RiskAssessment, rules: PolicyRule[]): PolicyEvaluation;
111
+ }
112
+ export interface AuthorizationPolicyResult {
113
+ allowed: boolean;
114
+ grantedPermissions: string[];
115
+ policyVersion?: string;
116
+ reason: string;
117
+ }
118
+ export interface AuthorizationPolicy {
119
+ name: string;
120
+ authorize(action: ActionIntent): AuthorizationPolicyResult;
121
+ }
122
+ export interface AuthorizationDecision {
123
+ id: string;
124
+ actionIntentId: string;
125
+ principalId: string;
126
+ decision: "ALLOW" | "DENY";
127
+ requestedPermissions: string[];
128
+ grantedPermissions: string[];
129
+ policyName: string;
130
+ policyVersion?: string;
131
+ reason: string;
132
+ createdAt: string;
133
+ }
134
+ export interface ApprovalRequest {
135
+ id: string;
136
+ actionIntentId: string;
137
+ riskAssessmentId: string;
138
+ requestedBy: string;
139
+ assignedTo: string;
140
+ status: ApprovalStatus;
141
+ reviewerComment?: string;
142
+ createdAt: string;
143
+ reviewedAt?: string;
144
+ }
145
+ export interface ApprovalAdapterDecision {
146
+ approved?: boolean;
147
+ reviewerId?: string;
148
+ reviewerComment?: string;
149
+ decisionId?: string;
150
+ decidedAt?: string;
151
+ expiresAt?: string;
152
+ }
153
+ export interface ApprovalAdapterRequest {
154
+ action: ActionIntent;
155
+ risk: RiskAssessment;
156
+ policy: PolicyEvaluation;
157
+ approvalRequest: ApprovalRequest;
158
+ }
159
+ export interface ApprovalAdapter {
160
+ name: string;
161
+ requestApproval(input: ApprovalAdapterRequest): ApprovalAdapterDecision | void | Promise<ApprovalAdapterDecision | void>;
162
+ }
163
+ export interface VerificationResult {
164
+ id: string;
165
+ actionIntentId: string;
166
+ expectedState: Record<string, unknown>;
167
+ observedState: Record<string, unknown>;
168
+ success: boolean;
169
+ differences: string[];
170
+ verificationMethod: VerificationMethod;
171
+ createdAt: string;
172
+ }
173
+ export type AuditEventType = "ACTION_CAPTURED" | "AUTHORIZATION_CHECKED" | "RISK_ASSESSED" | "POLICY_EVALUATED" | "APPROVAL_REQUESTED" | "ACTION_APPROVED" | "ACTION_REJECTED" | "MOCK_EXECUTION_STARTED" | "MOCK_EXECUTION_COMPLETED" | "EXECUTION_REUSED" | "ROLLBACK_STARTED" | "ROLLBACK_COMPLETED" | "ROLLBACK_FAILED" | "VERIFICATION_PASSED" | "VERIFICATION_FAILED" | "AUDIT_PACKET_GENERATED";
174
+ export interface AuditEvent {
175
+ id: string;
176
+ actionIntentId: string;
177
+ eventType: AuditEventType;
178
+ actorType: "AGENT" | "HUMAN" | "SYSTEM";
179
+ actorId: string;
180
+ message: string;
181
+ metadata?: Record<string, unknown>;
182
+ createdAt: string;
183
+ }
184
+ export interface MockPurchaseOrder {
185
+ id: string;
186
+ vendor: string;
187
+ amount: number;
188
+ currency: string;
189
+ status: "DRAFT" | "SUBMITTED";
190
+ vendorApproved: boolean;
191
+ lineItem: string;
192
+ lastUpdatedAt: string;
193
+ actionIntentId?: string;
194
+ }
195
+ export interface ActionReview {
196
+ action: ActionIntent;
197
+ riskAssessment: RiskAssessment;
198
+ authorizationDecision?: AuthorizationDecision;
199
+ approvalRequest?: ApprovalRequest;
200
+ verificationResult?: VerificationResult;
201
+ auditEvents: AuditEvent[];
202
+ policyRules: PolicyRule[];
203
+ blocked: boolean;
204
+ }
205
+ export interface ActionExecutionSummary {
206
+ method: VerificationMethod;
207
+ status: "NOT_EXECUTED" | "COMPLETED";
208
+ targetSystem: string;
209
+ previousState?: Record<string, unknown>;
210
+ observedState?: Record<string, unknown>;
211
+ rollbackToken?: string;
212
+ }
213
+ export interface LocalActionAdapterResult {
214
+ method?: VerificationMethod;
215
+ targetSystem?: string;
216
+ previousState?: Record<string, unknown>;
217
+ observedState: Record<string, unknown>;
218
+ rollbackToken?: string;
219
+ }
220
+ export interface LocalActionAdapterSafety {
221
+ mode: "sandbox";
222
+ allowedTargetSystems: string[];
223
+ networkAccess: false;
224
+ }
225
+ export interface ActionExecutionContext {
226
+ idempotencyKey: string;
227
+ attempt: number;
228
+ }
229
+ export interface ActionRollbackContext {
230
+ idempotencyKey: string;
231
+ reason: string;
232
+ rollbackToken?: string;
233
+ }
234
+ export interface ActionRollbackResult {
235
+ success: boolean;
236
+ observedState: Record<string, unknown>;
237
+ message?: string;
238
+ }
239
+ export interface LocalActionAdapter {
240
+ name: string;
241
+ safety?: LocalActionAdapterSafety;
242
+ execute(action: ActionIntent, context?: ActionExecutionContext): LocalActionAdapterResult | Promise<LocalActionAdapterResult>;
243
+ rollback?(action: ActionIntent, execution: ActionExecutionSummary, context: ActionRollbackContext): ActionRollbackResult | Promise<ActionRollbackResult>;
244
+ }
245
+ export interface ActionExecutionReceipt {
246
+ idempotencyKey: string;
247
+ actionIntentId: string;
248
+ adapterName: string;
249
+ status: "COMPLETED" | "ROLLED_BACK" | "ROLLBACK_FAILED";
250
+ execution: ActionExecutionSummary;
251
+ rollbackToken?: string;
252
+ executedAt: string;
253
+ rollback?: ActionRollbackResult & {
254
+ attemptedAt: string;
255
+ reason: string;
256
+ };
257
+ }
258
+ export interface ExecutionStore {
259
+ name: string;
260
+ get(idempotencyKey: string): ActionExecutionReceipt | undefined | Promise<ActionExecutionReceipt | undefined>;
261
+ put(receipt: ActionExecutionReceipt): void | Promise<void>;
262
+ }
263
+ export interface ActionAuditPacket {
264
+ demo: true;
265
+ product: "Witnora Runtime";
266
+ scenario: string;
267
+ actionIntent: ActionIntent;
268
+ riskAssessment: RiskAssessment;
269
+ authorizationDecision?: AuthorizationDecision;
270
+ triggeredPolicies: PolicyRule[];
271
+ approvalRequest?: ApprovalRequest;
272
+ execution: ActionExecutionSummary;
273
+ verificationResult?: VerificationResult;
274
+ auditEvents: AuditEvent[];
275
+ trustedActionEvidence?: import("./trust-types.js").TrustedActionEvidence;
276
+ disclaimer: string;
277
+ }
278
+ export interface AuditStore {
279
+ name: string;
280
+ writeAuditPacket(packet: ActionAuditPacket): void | Promise<void>;
281
+ }
282
+ export interface ProcurementWalkthroughState {
283
+ purchaseOrder: MockPurchaseOrder;
284
+ review: ActionReview;
285
+ auditPacket?: ActionAuditPacket;
286
+ }
287
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../onegent-runtime/src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};