@acme-engine/core 0.1.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 (137) hide show
  1. package/dist/common.d.ts +40 -0
  2. package/dist/common.d.ts.map +1 -0
  3. package/dist/common.js +2 -0
  4. package/dist/common.js.map +1 -0
  5. package/dist/contracts.d.ts +65 -0
  6. package/dist/contracts.d.ts.map +1 -0
  7. package/dist/contracts.js +2 -0
  8. package/dist/contracts.js.map +1 -0
  9. package/dist/errors.d.ts +24 -0
  10. package/dist/errors.d.ts.map +1 -0
  11. package/dist/errors.js +20 -0
  12. package/dist/errors.js.map +1 -0
  13. package/dist/evaluation.d.ts +14 -0
  14. package/dist/evaluation.d.ts.map +1 -0
  15. package/dist/evaluation.js +2 -0
  16. package/dist/evaluation.js.map +1 -0
  17. package/dist/execution-engine.d.ts +30 -0
  18. package/dist/execution-engine.d.ts.map +1 -0
  19. package/dist/execution-engine.js +885 -0
  20. package/dist/execution-engine.js.map +1 -0
  21. package/dist/execution-identity.d.ts +35 -0
  22. package/dist/execution-identity.d.ts.map +1 -0
  23. package/dist/execution-identity.js +177 -0
  24. package/dist/execution-identity.js.map +1 -0
  25. package/dist/execution-status.d.ts +2 -0
  26. package/dist/execution-status.d.ts.map +1 -0
  27. package/dist/execution-status.js +2 -0
  28. package/dist/execution-status.js.map +1 -0
  29. package/dist/execution-types.d.ts +58 -0
  30. package/dist/execution-types.d.ts.map +1 -0
  31. package/dist/execution-types.js +2 -0
  32. package/dist/execution-types.js.map +1 -0
  33. package/dist/hashing.d.ts +6 -0
  34. package/dist/hashing.d.ts.map +1 -0
  35. package/dist/hashing.js +73 -0
  36. package/dist/hashing.js.map +1 -0
  37. package/dist/index.d.ts +34 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +33 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/memory-engine.d.ts +13 -0
  42. package/dist/memory-engine.d.ts.map +1 -0
  43. package/dist/memory-engine.js +591 -0
  44. package/dist/memory-engine.js.map +1 -0
  45. package/dist/memory.d.ts +151 -0
  46. package/dist/memory.d.ts.map +1 -0
  47. package/dist/memory.js +2 -0
  48. package/dist/memory.js.map +1 -0
  49. package/dist/model-call-usage.d.ts +40 -0
  50. package/dist/model-call-usage.d.ts.map +1 -0
  51. package/dist/model-call-usage.js +0 -0
  52. package/dist/model-call-usage.js.map +1 -0
  53. package/dist/model-execution-engine.d.ts +16 -0
  54. package/dist/model-execution-engine.d.ts.map +1 -0
  55. package/dist/model-execution-engine.js +598 -0
  56. package/dist/model-execution-engine.js.map +1 -0
  57. package/dist/model-execution-identity.d.ts +16 -0
  58. package/dist/model-execution-identity.d.ts.map +1 -0
  59. package/dist/model-execution-identity.js +84 -0
  60. package/dist/model-execution-identity.js.map +1 -0
  61. package/dist/model-execution-types.d.ts +66 -0
  62. package/dist/model-execution-types.d.ts.map +1 -0
  63. package/dist/model-execution-types.js +8 -0
  64. package/dist/model-execution-types.js.map +1 -0
  65. package/dist/model-gateway-router.d.ts +11 -0
  66. package/dist/model-gateway-router.d.ts.map +1 -0
  67. package/dist/model-gateway-router.js +69 -0
  68. package/dist/model-gateway-router.js.map +1 -0
  69. package/dist/model-request-hash.d.ts +5 -0
  70. package/dist/model-request-hash.d.ts.map +1 -0
  71. package/dist/model-request-hash.js +11 -0
  72. package/dist/model-request-hash.js.map +1 -0
  73. package/dist/model-response-hash.d.ts +5 -0
  74. package/dist/model-response-hash.d.ts.map +1 -0
  75. package/dist/model-response-hash.js +11 -0
  76. package/dist/model-response-hash.js.map +1 -0
  77. package/dist/model-validation.d.ts +11 -0
  78. package/dist/model-validation.d.ts.map +1 -0
  79. package/dist/model-validation.js +580 -0
  80. package/dist/model-validation.js.map +1 -0
  81. package/dist/model.d.ts +125 -0
  82. package/dist/model.d.ts.map +1 -0
  83. package/dist/model.js +4 -0
  84. package/dist/model.js.map +1 -0
  85. package/dist/modules.d.ts +83 -0
  86. package/dist/modules.d.ts.map +1 -0
  87. package/dist/modules.js +7 -0
  88. package/dist/modules.js.map +1 -0
  89. package/dist/outbox.d.ts +88 -0
  90. package/dist/outbox.d.ts.map +1 -0
  91. package/dist/outbox.js +180 -0
  92. package/dist/outbox.js.map +1 -0
  93. package/dist/payload-encryptor.d.ts +92 -0
  94. package/dist/payload-encryptor.d.ts.map +1 -0
  95. package/dist/payload-encryptor.js +173 -0
  96. package/dist/payload-encryptor.js.map +1 -0
  97. package/dist/registries.d.ts +5 -0
  98. package/dist/registries.d.ts.map +1 -0
  99. package/dist/registries.js +159 -0
  100. package/dist/registries.js.map +1 -0
  101. package/dist/repository-digest.d.ts +5 -0
  102. package/dist/repository-digest.d.ts.map +1 -0
  103. package/dist/repository-digest.js +25 -0
  104. package/dist/repository-digest.js.map +1 -0
  105. package/dist/repository-model-call.d.ts +43 -0
  106. package/dist/repository-model-call.d.ts.map +1 -0
  107. package/dist/repository-model-call.js +2 -0
  108. package/dist/repository-model-call.js.map +1 -0
  109. package/dist/repository-model-execution.d.ts +49 -0
  110. package/dist/repository-model-execution.d.ts.map +1 -0
  111. package/dist/repository-model-execution.js +2 -0
  112. package/dist/repository-model-execution.js.map +1 -0
  113. package/dist/repository.d.ts +260 -0
  114. package/dist/repository.d.ts.map +1 -0
  115. package/dist/repository.js +2 -0
  116. package/dist/repository.js.map +1 -0
  117. package/dist/response-pipeline.d.ts +3 -0
  118. package/dist/response-pipeline.d.ts.map +1 -0
  119. package/dist/response-pipeline.js +132 -0
  120. package/dist/response-pipeline.js.map +1 -0
  121. package/dist/state-engine.d.ts +19 -0
  122. package/dist/state-engine.d.ts.map +1 -0
  123. package/dist/state-engine.js +272 -0
  124. package/dist/state-engine.js.map +1 -0
  125. package/dist/state-projection.d.ts +5 -0
  126. package/dist/state-projection.d.ts.map +1 -0
  127. package/dist/state-projection.js +145 -0
  128. package/dist/state-projection.js.map +1 -0
  129. package/dist/state.d.ts +41 -0
  130. package/dist/state.d.ts.map +1 -0
  131. package/dist/state.js +2 -0
  132. package/dist/state.js.map +1 -0
  133. package/dist/stranded-execution.d.ts +59 -0
  134. package/dist/stranded-execution.d.ts.map +1 -0
  135. package/dist/stranded-execution.js +235 -0
  136. package/dist/stranded-execution.js.map +1 -0
  137. package/package.json +36 -0
@@ -0,0 +1,260 @@
1
+ import type { DiagnosticFact, EntityId, ExecutionId, IsoTimestamp, JsonValue, Namespace, StoredDocument } from './common.js';
2
+ import type { ContractRef } from './contracts.js';
3
+ import type { AcmeErrorData } from './errors.js';
4
+ import type { EvaluationDecision } from './evaluation.js';
5
+ import type { ExecutionPolicy, ExecutionRequest, ExecutionResult, ExecutionStatus } from './execution-types.js';
6
+ import type { MemoryCandidate, MemoryQuery, MemoryRecord, PreparedMemory, PreparedMemoryDecision, RankedMemory } from './memory.js';
7
+ import type { CompletedModelCall, FailedModelCall, ModelCallRecord, ModelCallReservation } from './repository-model-call.js';
8
+ import type { CandidateDocument, CandidateEvent } from './modules.js';
9
+ import type { PreparedState, StateSnapshot, StateTransition } from './state.js';
10
+ export interface AcceptedExecution {
11
+ readonly executionId: ExecutionId;
12
+ readonly request: ExecutionRequest<JsonValue>;
13
+ readonly requestFingerprint: string;
14
+ readonly inputHash: string;
15
+ readonly contract: ContractRef;
16
+ readonly contractFingerprint: string;
17
+ readonly effectivePolicy: ExecutionPolicy;
18
+ readonly createdAt: IsoTimestamp;
19
+ }
20
+ export type AcceptResult = {
21
+ readonly kind: 'created';
22
+ readonly execution: ExecutionRecord;
23
+ } | {
24
+ readonly kind: 'existing';
25
+ readonly execution: ExecutionRecord;
26
+ } | {
27
+ readonly kind: 'conflict';
28
+ readonly existingExecutionId: ExecutionId;
29
+ };
30
+ export interface ExecutionRecord {
31
+ readonly executionId: ExecutionId;
32
+ readonly request: ExecutionRequest<JsonValue>;
33
+ readonly requestFingerprint: string;
34
+ readonly inputHash: string;
35
+ readonly contract: ContractRef;
36
+ readonly contractFingerprint: string;
37
+ readonly policy: ExecutionPolicy;
38
+ readonly status: ExecutionStatus;
39
+ readonly currentStage: ExecutionStatus;
40
+ readonly result?: ExecutionResult;
41
+ readonly error?: AcmeErrorData;
42
+ readonly createdAt: IsoTimestamp;
43
+ readonly updatedAt: IsoTimestamp;
44
+ }
45
+ /**
46
+ * Recorded evidence an interrupted execution can be resumed from (ADR-0017).
47
+ *
48
+ * `lastAttemptNumber` is `0` when no attempt has been recorded yet, so a
49
+ * resumed run always continues at `lastAttemptNumber + 1`.
50
+ */
51
+ export interface ExecutionResumeState {
52
+ readonly executionId: ExecutionId;
53
+ readonly lastAttemptNumber: number;
54
+ readonly modelCalls: readonly ModelCallRecord[];
55
+ }
56
+ export interface ExecutionAttempt {
57
+ readonly executionId: ExecutionId;
58
+ readonly attemptNumber: number;
59
+ readonly stage: ExecutionStatus;
60
+ readonly outcome: 'started' | 'succeeded' | 'failed' | 'retry-scheduled';
61
+ readonly retryAt?: IsoTimestamp;
62
+ readonly diagnostic?: DiagnosticFact;
63
+ readonly occurredAt: IsoTimestamp;
64
+ }
65
+ export interface ContextQuery {
66
+ readonly namespace: Namespace;
67
+ readonly entityId: EntityId;
68
+ readonly expectedRevision: number;
69
+ readonly memory: MemoryQuery;
70
+ readonly documentKinds?: readonly string[];
71
+ }
72
+ export interface ExecutionReadSet {
73
+ readonly state: StateSnapshot<JsonValue> | null;
74
+ readonly memories: readonly MemoryRecord[];
75
+ readonly documents: readonly StoredDocument[];
76
+ }
77
+ export interface RecordedRankedMemory extends RankedMemory {
78
+ readonly rank: number;
79
+ }
80
+ export interface ExecutionReplayReadSet {
81
+ readonly state: StateSnapshot<JsonValue> | null;
82
+ readonly loadedMemories: readonly MemoryRecord[];
83
+ readonly retrievedMemories: readonly RecordedRankedMemory[];
84
+ readonly documents: readonly StoredDocument[];
85
+ }
86
+ export interface PreparedReplayEvidence {
87
+ readonly taskInput: JsonValue;
88
+ readonly readSet: ExecutionReplayReadSet;
89
+ }
90
+ export interface PreparedEvaluatorRun {
91
+ readonly evaluatorId: string;
92
+ readonly evaluatorVersion: string;
93
+ readonly attempt: number;
94
+ readonly subjectHash: string;
95
+ readonly decision: EvaluationDecision;
96
+ }
97
+ export interface PreparedCommit {
98
+ readonly executionId: ExecutionId;
99
+ readonly expectedRevision: number;
100
+ readonly operationDigest: string;
101
+ readonly documents: readonly CandidateDocument[];
102
+ readonly memoryCandidates: readonly MemoryCandidate[];
103
+ readonly memory: PreparedMemory;
104
+ readonly state: PreparedState<JsonValue, JsonValue> | null;
105
+ readonly evaluatorRuns: readonly PreparedEvaluatorRun[];
106
+ readonly events: readonly CandidateEvent[];
107
+ readonly committedAt: IsoTimestamp;
108
+ readonly replayEvidence?: PreparedReplayEvidence;
109
+ }
110
+ export type PreparedCommitContent = Omit<PreparedCommit, 'operationDigest'>;
111
+ export interface CommittedExecution {
112
+ readonly executionId: ExecutionId;
113
+ readonly revision: number;
114
+ readonly documentKeys: readonly string[];
115
+ readonly eventIds: readonly string[];
116
+ readonly operationDigest: string;
117
+ }
118
+ export interface NonCommitTerminalRecord {
119
+ readonly executionId: ExecutionId;
120
+ readonly status: 'blocked' | 'conflicted' | 'cancelled' | 'failed';
121
+ readonly error: AcmeErrorData;
122
+ readonly terminalAt: IsoTimestamp;
123
+ }
124
+ export interface ExecutionReplayEvidence {
125
+ readonly executionId: ExecutionId;
126
+ readonly request: ExecutionRequest<JsonValue>;
127
+ readonly requestFingerprint: string;
128
+ readonly inputHash: string;
129
+ readonly contract: ContractRef;
130
+ readonly contractFingerprint: string;
131
+ readonly effectivePolicy: ExecutionPolicy;
132
+ readonly taskInput: JsonValue;
133
+ readonly readSet: ExecutionReplayReadSet;
134
+ readonly modelCalls: readonly ModelCallRecord[];
135
+ readonly preparedCommit: PreparedCommit;
136
+ }
137
+ export interface StoredMemoryCandidate {
138
+ readonly executionId: ExecutionId;
139
+ readonly candidate: MemoryCandidate;
140
+ readonly decision: PreparedMemoryDecision;
141
+ readonly createdAt: IsoTimestamp;
142
+ }
143
+ export interface StoredEvaluatorRun extends PreparedEvaluatorRun {
144
+ readonly executionId: ExecutionId;
145
+ readonly createdAt: IsoTimestamp;
146
+ }
147
+ export interface DomainEventRecord {
148
+ readonly eventId: string;
149
+ readonly executionId: ExecutionId;
150
+ readonly key: string;
151
+ readonly namespace: Namespace;
152
+ readonly entityId: EntityId;
153
+ readonly type: string;
154
+ readonly schemaVersion: string;
155
+ readonly payload: JsonValue;
156
+ readonly occurredAt: IsoTimestamp;
157
+ }
158
+ export interface OutboxRecord {
159
+ readonly eventId: string;
160
+ readonly status: 'pending' | 'claimed' | 'delivered' | 'failed';
161
+ readonly attemptCount: number;
162
+ readonly availableAt: IsoTimestamp;
163
+ readonly claimedAt?: IsoTimestamp;
164
+ readonly deliveredAt?: IsoTimestamp;
165
+ readonly lastError?: AcmeErrorData;
166
+ }
167
+ /** One leased outbox entry and the committed event it carries (ADR-0018). */
168
+ export interface LeasedOutboxEntry {
169
+ readonly record: OutboxRecord;
170
+ readonly event: DomainEventRecord;
171
+ }
172
+ export interface OutboxLease {
173
+ /** Entries due at or before this instant may be leased. */
174
+ readonly now: IsoTimestamp;
175
+ /** Maximum entries to lease. Must be greater than zero. */
176
+ readonly limit: number;
177
+ /** When the lease expires and the entry becomes available again. */
178
+ readonly leaseExpiresAt: IsoTimestamp;
179
+ }
180
+ export interface DeliveredOutboxEntry {
181
+ readonly eventId: string;
182
+ readonly deliveredAt: IsoTimestamp;
183
+ }
184
+ export interface FailedOutboxEntry {
185
+ readonly eventId: string;
186
+ readonly error: AcmeErrorData;
187
+ readonly failedAt: IsoTimestamp;
188
+ /** Present to retry later; absent to give up and mark the entry `failed`. */
189
+ readonly retryAt?: IsoTimestamp;
190
+ }
191
+ /**
192
+ * Operator redrive of a terminal `failed` outbox entry back to `pending`
193
+ * (gap plan O1 / ACME-0059). `lastError` is retained as evidence; attempt
194
+ * count is not reset.
195
+ */
196
+ export interface OutboxRedriveEntry {
197
+ readonly eventId: string;
198
+ /** When the entry becomes leasable again. */
199
+ readonly availableAt: IsoTimestamp;
200
+ }
201
+ export interface OutboxQuery {
202
+ readonly status?: OutboxRecord['status'];
203
+ readonly limit: number;
204
+ }
205
+ export interface ExecutionRepository {
206
+ accept(request: AcceptedExecution): Promise<AcceptResult>;
207
+ get(executionId: ExecutionId): Promise<ExecutionRecord | null>;
208
+ appendAttempt(attempt: ExecutionAttempt): Promise<void>;
209
+ reserveModelCall(call: ModelCallReservation): Promise<ModelCallRecord>;
210
+ completeModelCall(call: CompletedModelCall): Promise<void>;
211
+ failModelCall(call: FailedModelCall): Promise<void>;
212
+ loadContext(query: ContextQuery): Promise<ExecutionReadSet>;
213
+ /**
214
+ * Recorded model calls and attempt progress of an accepted execution,
215
+ * revealed with the same payload rules as `loadReplayEvidence`. Returns
216
+ * `null` only when the execution is unknown.
217
+ */
218
+ loadResumeState(executionId: ExecutionId): Promise<ExecutionResumeState | null>;
219
+ commit(prepared: PreparedCommit): Promise<CommittedExecution>;
220
+ markTerminal(terminal: NonCommitTerminalRecord): Promise<void>;
221
+ loadReplayEvidence(executionId: ExecutionId): Promise<ExecutionReplayEvidence | null>;
222
+ /**
223
+ * Atomically lease due outbox entries (ADR-0018). Entries are `pending`, or
224
+ * already leased past their expiry, with `availableAt <= now`. Ordering is
225
+ * `event.occurredAt` then `eventId`, and each lease increments the attempt
226
+ * count. The persisted status value stays `claimed` from the original
227
+ * schema; the API says lease because domain vocabulary owns the other word.
228
+ */
229
+ leaseOutbox(lease: OutboxLease): Promise<readonly LeasedOutboxEntry[]>;
230
+ /** Settle a leased entry as delivered. Idempotent. */
231
+ markOutboxDelivered(entry: DeliveredOutboxEntry): Promise<void>;
232
+ /** Settle a leased entry for retry, or as `failed` without `retryAt`. */
233
+ markOutboxFailed(entry: FailedOutboxEntry): Promise<void>;
234
+ /**
235
+ * Move a terminal `failed` outbox entry back to `pending` so a later drain
236
+ * may lease it. Refuses `delivered`, unknown ids and non-failed statuses.
237
+ * Does not delete evidence; keeps `lastError` and `attemptCount`.
238
+ */
239
+ redriveOutbox(entry: OutboxRedriveEntry): Promise<void>;
240
+ /** Read outbox entries and their events in lease order, leasing nothing. */
241
+ listOutbox(query: OutboxQuery): Promise<readonly LeasedOutboxEntry[]>;
242
+ }
243
+ export interface RepositoryStateEvidence {
244
+ readonly snapshots: readonly StateSnapshot<JsonValue>[];
245
+ readonly transitions: readonly StateTransition<JsonValue>[];
246
+ }
247
+ export interface RepositoryEvidence {
248
+ readonly executions: readonly ExecutionRecord[];
249
+ readonly attempts: readonly ExecutionAttempt[];
250
+ readonly modelCalls: readonly ModelCallRecord[];
251
+ readonly documents: readonly StoredDocument[];
252
+ readonly memoryCandidates: readonly StoredMemoryCandidate[];
253
+ readonly memoryRecords: readonly MemoryRecord[];
254
+ readonly state: RepositoryStateEvidence;
255
+ readonly evaluatorRuns: readonly StoredEvaluatorRun[];
256
+ readonly events: readonly DomainEventRecord[];
257
+ readonly outbox: readonly OutboxRecord[];
258
+ }
259
+ export type { CompletedModelCall, FailedModelCall, ModelCallRecord, ModelCallReservation, } from './repository-model-call.js';
260
+ //# sourceMappingURL=repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { ResponsePipeline, ResponsePipelineOptions } from './contracts.js';
2
+ export declare function createResponsePipeline(options?: ResponsePipelineOptions): ResponsePipeline;
3
+ //# sourceMappingURL=response-pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-pipeline.d.ts","sourceRoot":"","sources":["../src/response-pipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,gBAAgB,EAChB,uBAAuB,EAExB,MAAM,gBAAgB,CAAC;AAkOxB,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,uBAA4B,GACpC,gBAAgB,CAElB"}
@@ -0,0 +1,132 @@
1
+ import { nodeHashing } from './hashing.js';
2
+ const jsonFencePattern = /^```(?:json)?[ \t]*\r?\n([\s\S]*?)\r?\n```[ \t]*$/iu;
3
+ function issue(code, message, severity = 'error', path = []) {
4
+ return { code, path, message, severity };
5
+ }
6
+ function schemaIssuePath(path) {
7
+ return path.map((part) => (typeof part === 'symbol' ? String(part) : part));
8
+ }
9
+ function failed(stage, issues, repairable = true) {
10
+ return {
11
+ ok: false,
12
+ stage,
13
+ issues,
14
+ repairable,
15
+ };
16
+ }
17
+ function deepFreeze(value) {
18
+ if (value !== null && typeof value === 'object' && !Object.isFrozen(value)) {
19
+ Object.freeze(value);
20
+ for (const child of Object.values(value)) {
21
+ deepFreeze(child);
22
+ }
23
+ }
24
+ return value;
25
+ }
26
+ class StrictResponsePipeline {
27
+ #hashing;
28
+ constructor(options) {
29
+ this.#hashing = options.hashing ?? nodeHashing;
30
+ }
31
+ process(response, contract, input) {
32
+ const inputResult = contract.inputSchema.safeParse(input);
33
+ if (!inputResult.success) {
34
+ return failed('input', inputResult.error.issues.map((schemaIssue) => issue('CONTRACT_INPUT_SCHEMA', schemaIssue.message, 'error', schemaIssuePath(schemaIssue.path))), false);
35
+ }
36
+ let inputCanonical;
37
+ let validatedInputCanonical;
38
+ try {
39
+ inputCanonical = this.#hashing.canonicalJson(input);
40
+ validatedInputCanonical = this.#hashing.canonicalJson(inputResult.data);
41
+ }
42
+ catch {
43
+ return failed('input', [
44
+ issue('CONTRACT_INPUT_NON_JSON_VALUE', 'Validated contract input must remain a JSON value.'),
45
+ ], false);
46
+ }
47
+ if (inputCanonical !== validatedInputCanonical) {
48
+ return failed('input', [
49
+ issue('CONTRACT_INPUT_SCHEMA_COERCION', 'Input schema changed the supplied JSON value.'),
50
+ ], false);
51
+ }
52
+ const semanticInput = deepFreeze(JSON.parse(validatedInputCanonical));
53
+ const cleanupWarnings = [];
54
+ let text = response.text;
55
+ if (text.startsWith('\uFEFF')) {
56
+ text = text.slice(1);
57
+ cleanupWarnings.push(issue('MODEL_RESPONSE_BOM_REMOVED', 'Removed one leading byte-order mark.', 'warning'));
58
+ }
59
+ if (text.trim().length === 0) {
60
+ return failed('empty', [
61
+ ...cleanupWarnings,
62
+ issue('MODEL_RESPONSE_EMPTY', 'Model response is empty.'),
63
+ ]);
64
+ }
65
+ const trimmed = text.trim();
66
+ const fenceMatch = trimmed.match(jsonFencePattern);
67
+ if (fenceMatch !== null) {
68
+ text = fenceMatch[1] ?? '';
69
+ cleanupWarnings.push(issue('MODEL_RESPONSE_JSON_FENCE_REMOVED', 'Removed one enclosing Markdown JSON fence.', 'warning'));
70
+ }
71
+ else {
72
+ text = trimmed;
73
+ }
74
+ if (text.trim().length === 0) {
75
+ return failed('empty', [
76
+ ...cleanupWarnings,
77
+ issue('MODEL_RESPONSE_EMPTY', 'Model response is empty.'),
78
+ ]);
79
+ }
80
+ let parsed;
81
+ try {
82
+ parsed = JSON.parse(text);
83
+ }
84
+ catch {
85
+ return failed('parse', [
86
+ ...cleanupWarnings,
87
+ issue('MODEL_RESPONSE_PARSE', 'Model response is not strict JSON.'),
88
+ ]);
89
+ }
90
+ const schemaResult = contract.outputSchema.safeParse(parsed);
91
+ if (!schemaResult.success) {
92
+ return failed('schema', [
93
+ ...cleanupWarnings,
94
+ ...schemaResult.error.issues.map((schemaIssue) => issue('MODEL_RESPONSE_SCHEMA', schemaIssue.message, 'error', schemaIssuePath(schemaIssue.path))),
95
+ ]);
96
+ }
97
+ let parsedCanonical;
98
+ let validatedCanonical;
99
+ try {
100
+ parsedCanonical = this.#hashing.canonicalJson(parsed);
101
+ validatedCanonical = this.#hashing.canonicalJson(schemaResult.data);
102
+ }
103
+ catch {
104
+ return failed('schema', [
105
+ ...cleanupWarnings,
106
+ issue('MODEL_RESPONSE_NON_JSON_VALUE', 'Validated model output must remain a JSON value.'),
107
+ ]);
108
+ }
109
+ if (parsedCanonical !== validatedCanonical) {
110
+ return failed('schema', [
111
+ ...cleanupWarnings,
112
+ issue('MODEL_RESPONSE_SCHEMA_COERCION', 'Output schema changed the parsed JSON value.'),
113
+ ]);
114
+ }
115
+ const semanticOutput = deepFreeze(JSON.parse(validatedCanonical));
116
+ const semanticIssues = contract.validateSemantics(semanticOutput, semanticInput);
117
+ const semanticErrors = semanticIssues.filter(({ severity }) => severity === 'error');
118
+ if (semanticErrors.length > 0) {
119
+ return failed('semantic', [...cleanupWarnings, ...semanticIssues]);
120
+ }
121
+ return {
122
+ ok: true,
123
+ value: semanticOutput,
124
+ warnings: Object.freeze([...cleanupWarnings, ...semanticIssues]),
125
+ parsedHash: this.#hashing.sha256(validatedCanonical),
126
+ };
127
+ }
128
+ }
129
+ export function createResponsePipeline(options = {}) {
130
+ return new StrictResponsePipeline(options);
131
+ }
132
+ //# sourceMappingURL=response-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-pipeline.js","sourceRoot":"","sources":["../src/response-pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { Hashing } from './common.js';
2
+ import type { DomainModule, StateDelta, TaskMap } from './modules.js';
3
+ import type { PreparedState, StatePrepareContext, StateSnapshot } from './state.js';
4
+ export declare const ACME_TRANSITION_ID_ALGORITHM: "acme-transition-id-1";
5
+ export interface TransitionIdentityInput {
6
+ readonly executionId: string;
7
+ readonly operationKey: string;
8
+ readonly namespace: string;
9
+ readonly entityId: string;
10
+ }
11
+ export interface StateEngineOptions {
12
+ readonly hashing?: Hashing;
13
+ }
14
+ export interface StateEngine {
15
+ prepare<TState, TDelta, TTasks extends TaskMap<TState, TDelta>>(module: DomainModule<TState, TDelta, TTasks>, current: StateSnapshot<TState> | null, expectedRevision: number, delta: StateDelta<TDelta> | undefined, context: StatePrepareContext): PreparedState<TState, TDelta> | null;
16
+ }
17
+ export declare function deriveTransitionId(input: TransitionIdentityInput, hashing?: Hashing): string;
18
+ export declare function createStateEngine(options?: StateEngineOptions): StateEngine;
19
+ //# sourceMappingURL=state-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-engine.d.ts","sourceRoot":"","sources":["../src/state-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,aAAa,CAAC;AAG9D,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,KAAK,EAEV,aAAa,EACb,mBAAmB,EACnB,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,4BAA4B,EAAG,sBAA+B,CAAC;AAE5E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,SAAS,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5D,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAC5C,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI,EACrC,gBAAgB,EAAE,MAAM,EACxB,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,SAAS,EACrC,OAAO,EAAE,mBAAmB,GAC3B,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CACzC;AAsLD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,uBAAuB,EAC9B,OAAO,GAAE,OAAqB,GAC7B,MAAM,CAeR;AAwOD,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,kBAAuB,GAC/B,WAAW,CAEb"}