@agentplat/mesh-sim-postgres 0.3.0-beta.4

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/index.js ADDED
@@ -0,0 +1,510 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { Buffer } from 'node:buffer';
3
+ import { canonicalizePlanningJsonV1 } from '@agentplat/collective-planning';
4
+ import { validateCollectiveEvaluationCampaignExecutionV1, } from '@agentplat/collective-planning/evaluation';
5
+ import { digestCollectiveStatisticalCampaignArtifactV1, } from '@agentplat/mesh-sim';
6
+ import { defaultPostgresSchema, normalizePostgresIdentifier, quotePostgresIdentifier, } from '@agentplat/postgres';
7
+ export const MESH_SIM_POSTGRES_SCHEMA_VERSION_V1 = 1;
8
+ export const MESH_SIM_POSTGRES_MIGRATION_VERSION_V1 = 2;
9
+ export const DEFAULT_MESH_SIM_POSTGRES_LIMITS_V1 = Object.freeze({
10
+ maximumArtifactBytes: 16 * 1024 * 1024,
11
+ maximumArtifacts: 16_384,
12
+ maximumReadKeys: 4_096,
13
+ maximumStateBytes: 16 * 1024 * 1024,
14
+ });
15
+ /**
16
+ * PostgreSQL implementation with immutable artifact bindings and revision CAS.
17
+ * The caller owns the pool and is responsible for applying this package's migrations.
18
+ */
19
+ export class PostgresCollectiveStatisticalCampaignStoreV1 {
20
+ pool;
21
+ schemaVersion = 1;
22
+ #prefix;
23
+ #namespace;
24
+ #limits;
25
+ constructor(pool, options) {
26
+ this.pool = pool;
27
+ if (!pool || typeof pool.connect !== 'function')
28
+ throw new TypeError('PostgreSQL pool is required');
29
+ if (!options || typeof options !== 'object')
30
+ throw new TypeError('store options are required');
31
+ this.#namespace = token(options.namespace, 'namespace', 128);
32
+ this.#prefix = `${quotePostgresIdentifier(normalizePostgresIdentifier(options.schema ?? defaultPostgresSchema, 'schema'))}.`;
33
+ this.#limits = limits(options.limits);
34
+ }
35
+ createArtifactWriterV1() {
36
+ return Object.freeze({
37
+ schemaVersion: 1,
38
+ putArtifactV1: (input) => this.putArtifact(input, null),
39
+ putArtifactBeforeDeadlineV1: (input) => {
40
+ const { operationExpiresAtMs, ...artifact } = input;
41
+ return this.putArtifact(artifact, operationExpiresAtMs);
42
+ },
43
+ });
44
+ }
45
+ createArtifactReaderV1(artifacts) {
46
+ const indexed = new Map();
47
+ if (!Array.isArray(artifacts) ||
48
+ artifacts.length > this.#limits.maximumArtifacts)
49
+ throw new RangeError('artifact index exceeds limit');
50
+ for (const entry of artifacts) {
51
+ const id = token(entry?.artifactId, 'artifactId', 256);
52
+ if (indexed.has(id))
53
+ throw new TypeError('artifact index contains duplicate id');
54
+ indexed.set(id, Object.freeze({ ...entry }));
55
+ }
56
+ const ids = Object.freeze([...indexed.keys()].sort());
57
+ return Object.freeze({
58
+ schemaVersion: 1,
59
+ listArtifactIdsV1: async () => ids,
60
+ openArtifactV1: (artifactId) => this.openArtifact(indexed.get(token(artifactId, 'artifactId', 256))),
61
+ });
62
+ }
63
+ async readExecutionStateV1(input) {
64
+ const executionId = token(input.executionId, 'executionId', 256);
65
+ const registrationDigest = digest(input.registrationDigest, 'registrationDigest');
66
+ const result = await this.query(`SELECT state, state_sha256 FROM ${this.#prefix}mesh_sim_execution_states WHERE namespace = $1 AND execution_id = $2`, [this.#namespace, executionId]);
67
+ if (result.rowCount === 0)
68
+ return null;
69
+ const bytes = jsonBytes(result.rows[0].state, this.#limits.maximumStateBytes);
70
+ if (sha256(bytes) !== String(result.rows[0].state_sha256))
71
+ throw new TypeError('execution state hash mismatch');
72
+ const state = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(bytes));
73
+ if (state.executionId !== executionId ||
74
+ state.registrationDigest !== registrationDigest)
75
+ throw new TypeError('execution state identity conflict');
76
+ return state;
77
+ }
78
+ async compareAndSwapExecutionStateV1(input) {
79
+ const result = await this.compareAndSwapExecutionState(input, null);
80
+ if (result === 'expired')
81
+ throw new TypeError('unexpected operation expiry');
82
+ return result;
83
+ }
84
+ async compareAndSwapExecutionStateWithDeadlineV1(input) {
85
+ const operationExpiresAtMs = optionalTime(input.operationExpiresAtMs, 'operationExpiresAtMs');
86
+ if (operationExpiresAtMs === null)
87
+ throw new TypeError('operationExpiresAtMs is required');
88
+ return this.compareAndSwapExecutionState({
89
+ executionId: input.executionId,
90
+ expectedExecutionDigest: input.expectedExecutionDigest,
91
+ state: input.state,
92
+ }, operationExpiresAtMs);
93
+ }
94
+ async compareAndSwapExecutionState(input, operationExpiresAtMs) {
95
+ const executionId = token(input.executionId, 'executionId', 256);
96
+ if (input.expectedExecutionDigest !== null)
97
+ digest(input.expectedExecutionDigest, 'expectedExecutionDigest');
98
+ const state = validateCollectiveEvaluationCampaignExecutionV1(input.state);
99
+ if (state.executionId !== executionId)
100
+ throw new TypeError('execution state identity conflict');
101
+ const bytes = jsonBytes(state, this.#limits.maximumStateBytes);
102
+ const contentHash = sha256(bytes);
103
+ return this.transaction(async (db) => {
104
+ await this.query(`SELECT pg_advisory_xact_lock(hashtextextended($1, 0))`, [`${this.#namespace}\u001fstate\u001f${executionId}`], db);
105
+ const current = await this.query(`SELECT state, state_sha256 FROM ${this.#prefix}mesh_sim_execution_states WHERE namespace=$1 AND execution_id=$2 FOR UPDATE`, [this.#namespace, executionId], db);
106
+ if (operationExpiresAtMs !== null) {
107
+ const clockResult = await this.query(`SELECT floor(extract(epoch FROM clock_timestamp()) * 1000)::bigint AS now_ms`, [], db);
108
+ if (Number(clockResult.rows[0].now_ms) >= operationExpiresAtMs)
109
+ return 'expired';
110
+ }
111
+ if (current.rowCount === 0) {
112
+ if (input.expectedExecutionDigest !== null)
113
+ return 'conflict';
114
+ const inserted = await this.query(`INSERT INTO ${this.#prefix}mesh_sim_execution_states (namespace, execution_id, registration_digest, execution_digest, state, state_sha256) VALUES ($1,$2,$3,$4,$5::jsonb,$6) ON CONFLICT DO NOTHING RETURNING state`, [
115
+ this.#namespace,
116
+ executionId,
117
+ state.registrationDigest,
118
+ state.executionDigest,
119
+ new TextDecoder().decode(bytes),
120
+ contentHash,
121
+ ], db);
122
+ if (inserted.rowCount === 1)
123
+ return 'committed';
124
+ const raced = await this.query(`SELECT state, state_sha256 FROM ${this.#prefix}mesh_sim_execution_states WHERE namespace=$1 AND execution_id=$2 FOR UPDATE`, [this.#namespace, executionId], db);
125
+ if (raced.rowCount !== 1)
126
+ return 'conflict';
127
+ const racedBytes = jsonBytes(raced.rows[0].state, this.#limits.maximumStateBytes);
128
+ if (sha256(racedBytes) !== String(raced.rows[0].state_sha256))
129
+ throw new TypeError('execution state hash mismatch');
130
+ return equal(racedBytes, bytes) ? 'duplicate' : 'conflict';
131
+ }
132
+ const row = current.rows[0];
133
+ const existing = jsonBytes(row.state, this.#limits.maximumStateBytes);
134
+ if (sha256(existing) !== String(row.state_sha256))
135
+ throw new TypeError('execution state hash mismatch');
136
+ const prior = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(existing));
137
+ if (prior.executionDigest !== input.expectedExecutionDigest)
138
+ return 'conflict';
139
+ if (equal(existing, bytes))
140
+ return 'duplicate';
141
+ await this.query(`UPDATE ${this.#prefix}mesh_sim_execution_states SET registration_digest=$3, execution_digest=$4, state=$5::jsonb, state_sha256=$6, updated_at=transaction_timestamp() WHERE namespace=$1 AND execution_id=$2`, [
142
+ this.#namespace,
143
+ executionId,
144
+ state.registrationDigest,
145
+ state.executionDigest,
146
+ new TextDecoder().decode(bytes),
147
+ contentHash,
148
+ ], db);
149
+ return 'committed';
150
+ });
151
+ }
152
+ async readExecutionsV1(runKeys) {
153
+ if (!Array.isArray(runKeys) ||
154
+ runKeys.length > this.#limits.maximumReadKeys ||
155
+ new Set(runKeys).size !== runKeys.length)
156
+ throw new RangeError('execution read keys are invalid');
157
+ const values = await Promise.all(runKeys.map(async (runKey) => {
158
+ const key = token(runKey, 'runKey', 256);
159
+ const result = await this.query(`SELECT execution, execution_sha256 FROM ${this.#prefix}mesh_sim_slot_commits WHERE namespace=$1 AND run_key=$2`, [this.#namespace, key]);
160
+ if (result.rowCount === 0)
161
+ return Object.freeze({ runKey: key, execution: null });
162
+ const bytes = jsonBytes(result.rows[0].execution, this.#limits.maximumArtifactBytes);
163
+ if (sha256(bytes) !== String(result.rows[0].execution_sha256))
164
+ throw new TypeError('slot execution hash mismatch');
165
+ const execution = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(bytes));
166
+ if (execution.runKey !== key)
167
+ throw new TypeError('slot execution identity conflict');
168
+ return Object.freeze({ runKey: key, execution });
169
+ }));
170
+ return Object.freeze(values);
171
+ }
172
+ async commitExecutionV1(input) {
173
+ token(input.runKey, 'runKey', 256);
174
+ throw new TypeError('unfenced PostgreSQL execution commits are unsupported');
175
+ }
176
+ async readExecutionWithFenceV1(input) {
177
+ const executionId = token(input.executionId, 'executionId', 256);
178
+ const registrationDigest = digest(input.registrationDigest, 'registrationDigest');
179
+ const cellId = token(input.cellId, 'cellId', 256);
180
+ const runKey = token(input.runKey, 'runKey', 256);
181
+ const fence = normalizeFence(input.fence);
182
+ const operationExpiresAtMs = optionalTime(input.operationExpiresAtMs, 'operationExpiresAtMs');
183
+ const result = await this.query(`SELECT execution, execution_sha256, execution_id, registration_digest,
184
+ cell_id, fence_worker_id, fence_lease_token, fence_generation,
185
+ fence_expires_at_ms, operation_expires_at_ms
186
+ FROM ${this.#prefix}mesh_sim_slot_commits
187
+ WHERE namespace=$1 AND run_key=$2`, [this.#namespace, runKey]);
188
+ if (result.rowCount === 0)
189
+ return null;
190
+ const row = result.rows[0];
191
+ if (!sameStoredProvenance(row, executionId, registrationDigest, cellId, fence, operationExpiresAtMs))
192
+ throw new TypeError('slot commit fence provenance mismatch');
193
+ const bytes = jsonBytes(row.execution, this.#limits.maximumArtifactBytes);
194
+ if (sha256(bytes) !== String(row.execution_sha256))
195
+ throw new TypeError('slot execution hash mismatch');
196
+ const execution = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(bytes));
197
+ if (execution.executionId !== executionId ||
198
+ execution.cellId !== cellId ||
199
+ execution.runKey !== runKey)
200
+ throw new TypeError('slot execution identity conflict');
201
+ return execution;
202
+ }
203
+ async commitExecutionWithFenceV1(input) {
204
+ const executionId = token(input.executionId, 'executionId', 256);
205
+ const registrationDigest = digest(input.registrationDigest, 'registrationDigest');
206
+ const cellId = token(input.cellId, 'cellId', 256);
207
+ const runKey = token(input.runKey, 'runKey', 256);
208
+ const fence = normalizeFence(input.fence);
209
+ const operationExpiresAtMs = optionalTime(input.operationExpiresAtMs, 'operationExpiresAtMs');
210
+ if (!input.execution ||
211
+ input.execution.executionId !== executionId ||
212
+ input.execution.cellId !== cellId ||
213
+ input.execution.runKey !== runKey)
214
+ throw new TypeError('slot execution identity conflict');
215
+ const bytes = jsonBytes(input.execution, this.#limits.maximumArtifactBytes);
216
+ const hash = sha256(bytes);
217
+ return this.transaction(async (db) => {
218
+ const current = await this.query(`SELECT state, state_sha256
219
+ FROM ${this.#prefix}mesh_sim_execution_states
220
+ WHERE namespace=$1 AND execution_id=$2
221
+ FOR UPDATE`, [this.#namespace, executionId], db);
222
+ if (current.rowCount !== 1)
223
+ return 'stale_fence';
224
+ const stateBytes = jsonBytes(current.rows[0].state, this.#limits.maximumStateBytes);
225
+ if (sha256(stateBytes) !== String(current.rows[0].state_sha256))
226
+ throw new TypeError('execution state hash mismatch');
227
+ const state = validateCollectiveEvaluationCampaignExecutionV1(JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(stateBytes)));
228
+ const clockResult = await this.query(`SELECT floor(extract(epoch FROM clock_timestamp()) * 1000)::bigint AS now_ms`, [], db);
229
+ const nowMs = Number(clockResult.rows[0].now_ms);
230
+ if ((operationExpiresAtMs !== null && nowMs >= operationExpiresAtMs) ||
231
+ state.registrationDigest !== registrationDigest ||
232
+ !activeFence(state, cellId, runKey, fence, nowMs))
233
+ return 'stale_fence';
234
+ const existing = await this.query(`SELECT execution_sha256, execution_id, registration_digest, cell_id,
235
+ fence_worker_id, fence_lease_token, fence_generation,
236
+ fence_expires_at_ms, operation_expires_at_ms
237
+ FROM ${this.#prefix}mesh_sim_slot_commits
238
+ WHERE namespace=$1 AND run_key=$2
239
+ FOR UPDATE`, [this.#namespace, runKey], db);
240
+ if (existing.rowCount !== 0) {
241
+ if (String(existing.rows[0].execution_sha256) !== hash)
242
+ throw new TypeError('slot commit conflict');
243
+ if (!sameStoredProvenance(existing.rows[0], executionId, registrationDigest, cellId, fence, operationExpiresAtMs))
244
+ throw new TypeError('slot commit fence provenance mismatch');
245
+ return 'duplicate';
246
+ }
247
+ await this.query(`INSERT INTO ${this.#prefix}mesh_sim_slot_commits
248
+ (namespace,run_key,execution_id,registration_digest,cell_id,
249
+ fence_worker_id,fence_lease_token,fence_generation,
250
+ fence_expires_at_ms,operation_expires_at_ms,execution,execution_sha256)
251
+ VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11::jsonb,$12)`, [
252
+ this.#namespace,
253
+ runKey,
254
+ executionId,
255
+ registrationDigest,
256
+ cellId,
257
+ fence.workerId,
258
+ fence.leaseToken,
259
+ fence.generation,
260
+ fence.expiresAtMs,
261
+ operationExpiresAtMs,
262
+ new TextDecoder().decode(bytes),
263
+ hash,
264
+ ], db);
265
+ return 'committed';
266
+ });
267
+ }
268
+ async putArtifact(input, operationExpiresAtMs) {
269
+ if (operationExpiresAtMs !== null)
270
+ optionalTime(operationExpiresAtMs, 'operationExpiresAtMs');
271
+ const artifactId = token(input?.artifactId, 'artifactId', 256);
272
+ if (!Number.isSafeInteger(input.maximumBytes) ||
273
+ input.maximumBytes < 1 ||
274
+ input.maximumBytes > this.#limits.maximumArtifactBytes)
275
+ throw new RangeError('artifact maximumBytes is invalid');
276
+ const bytes = await collect(input.bytes, input.maximumBytes);
277
+ let value;
278
+ try {
279
+ value = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(bytes));
280
+ }
281
+ catch {
282
+ throw new TypeError('artifact is not valid UTF-8 JSON');
283
+ }
284
+ const sha = sha256(bytes);
285
+ const entry = Object.freeze({
286
+ schemaVersion: 1,
287
+ artifactId,
288
+ kind: input.kind,
289
+ path: `artifacts/sha256/${sha}.json`,
290
+ byteLength: bytes.byteLength,
291
+ sha256: sha,
292
+ canonicalDigest: digestCollectiveStatisticalCampaignArtifactV1(input.kind, value),
293
+ });
294
+ const binding = jsonBytes(entry, this.#limits.maximumArtifactBytes);
295
+ await this.transaction(async (db) => {
296
+ for (const lockKey of [
297
+ `${this.#namespace}\u001fartifact\u001f${artifactId}`,
298
+ `${this.#namespace}\u001fcontent\u001f${sha}`,
299
+ ])
300
+ await this.query(`SELECT pg_advisory_xact_lock(hashtextextended($1, 0))`, [lockKey], db);
301
+ if (operationExpiresAtMs !== null) {
302
+ const clockResult = await this.query(`SELECT floor(extract(epoch FROM clock_timestamp()) * 1000)::bigint AS now_ms`, [], db);
303
+ if (Number(clockResult.rows[0].now_ms) >= operationExpiresAtMs)
304
+ throw new TypeError('artifact operation deadline expired');
305
+ }
306
+ await this.query(`INSERT INTO ${this.#prefix}mesh_sim_artifact_blobs (namespace,content_sha256,bytes) VALUES ($1,$2,$3) ON CONFLICT DO NOTHING`, [this.#namespace, sha, Buffer.from(bytes)], db);
307
+ const blob = await this.query(`SELECT bytes FROM ${this.#prefix}mesh_sim_artifact_blobs WHERE namespace=$1 AND content_sha256=$2 FOR UPDATE`, [this.#namespace, sha], db);
308
+ if (sha256(asBytes(blob.rows[0].bytes)) !== sha)
309
+ throw new TypeError('artifact content hash mismatch');
310
+ const current = await this.query(`SELECT binding, binding_sha256, operation_expires_at_ms FROM ${this.#prefix}mesh_sim_artifact_bindings WHERE namespace=$1 AND artifact_id=$2 FOR UPDATE`, [this.#namespace, artifactId], db);
311
+ if (current.rowCount !== 0) {
312
+ const prior = asBytes(current.rows[0].binding);
313
+ if (sha256(prior) !== String(current.rows[0].binding_sha256) ||
314
+ !equal(prior, binding) ||
315
+ optionalStoredTime(current.rows[0].operation_expires_at_ms) !==
316
+ operationExpiresAtMs)
317
+ throw new TypeError('artifact binding conflict');
318
+ return;
319
+ }
320
+ const count = await this.query(`SELECT count(*)::text AS count FROM ${this.#prefix}mesh_sim_artifact_bindings WHERE namespace=$1`, [this.#namespace], db);
321
+ if (Number(count.rows[0].count) >= this.#limits.maximumArtifacts)
322
+ throw new RangeError('artifact limit exceeded');
323
+ await this.query(`INSERT INTO ${this.#prefix}mesh_sim_artifact_bindings (namespace,artifact_id,content_sha256,binding,binding_sha256,operation_expires_at_ms) VALUES ($1,$2,$3,$4,$5,$6)`, [
324
+ this.#namespace,
325
+ artifactId,
326
+ sha,
327
+ Buffer.from(binding),
328
+ sha256(binding),
329
+ operationExpiresAtMs,
330
+ ], db);
331
+ });
332
+ return entry;
333
+ }
334
+ async *openArtifact(entry) {
335
+ if (!entry)
336
+ throw new TypeError('artifact is not indexed');
337
+ const binding = await this.query(`SELECT content_sha256,binding,binding_sha256 FROM ${this.#prefix}mesh_sim_artifact_bindings WHERE namespace=$1 AND artifact_id=$2`, [this.#namespace, entry.artifactId]);
338
+ if (binding.rowCount !== 1)
339
+ throw new TypeError('artifact binding is missing');
340
+ const row = binding.rows[0];
341
+ const bytes = asBytes(row.binding);
342
+ if (sha256(bytes) !== String(row.binding_sha256) ||
343
+ !equal(bytes, jsonBytes(entry, this.#limits.maximumArtifactBytes)))
344
+ throw new TypeError('artifact binding changed');
345
+ const blob = await this.query(`SELECT bytes FROM ${this.#prefix}mesh_sim_artifact_blobs WHERE namespace=$1 AND content_sha256=$2`, [this.#namespace, String(row.content_sha256)]);
346
+ if (blob.rowCount !== 1)
347
+ throw new TypeError('artifact content is missing');
348
+ const content = asBytes(blob.rows[0].bytes);
349
+ if (content.byteLength !== entry.byteLength ||
350
+ sha256(content) !== entry.sha256)
351
+ throw new TypeError('artifact content hash mismatch');
352
+ yield content;
353
+ }
354
+ query(text, values, db = this.pool) {
355
+ return db.query(text, values);
356
+ }
357
+ async transaction(work) {
358
+ const client = await this.pool.connect();
359
+ try {
360
+ await client.query('BEGIN');
361
+ const value = await work(client);
362
+ await client.query('COMMIT');
363
+ return value;
364
+ }
365
+ catch (error) {
366
+ await client.query('ROLLBACK').catch(() => undefined);
367
+ throw error;
368
+ }
369
+ finally {
370
+ client.release();
371
+ }
372
+ }
373
+ }
374
+ export function createPostgresCollectiveStatisticalCampaignArtifactWriterV1(store) {
375
+ return store.createArtifactWriterV1();
376
+ }
377
+ export function createPostgresCollectiveStatisticalCampaignArtifactReaderV1(store, artifacts) {
378
+ return store.createArtifactReaderV1(artifacts);
379
+ }
380
+ function limits(input) {
381
+ const result = { ...DEFAULT_MESH_SIM_POSTGRES_LIMITS_V1, ...input };
382
+ for (const key of Object.keys(DEFAULT_MESH_SIM_POSTGRES_LIMITS_V1)) {
383
+ const value = result[key];
384
+ const hardMaximum = DEFAULT_MESH_SIM_POSTGRES_LIMITS_V1[key];
385
+ if (!Number.isSafeInteger(value) || value < 1 || value > hardMaximum)
386
+ throw new RangeError(`${key} is invalid`);
387
+ }
388
+ return Object.freeze(result);
389
+ }
390
+ function token(value, label, max) {
391
+ if (typeof value !== 'string' ||
392
+ value.length === 0 ||
393
+ value.length > max ||
394
+ !/^[A-Za-z0-9][A-Za-z0-9._:@/-]*$/u.test(value))
395
+ throw new TypeError(`${label} is invalid`);
396
+ return value;
397
+ }
398
+ function digest(value, label) {
399
+ if (typeof value !== 'string' || !/^sha256:[a-f0-9]{64}$/u.test(value))
400
+ throw new TypeError(`${label} is invalid`);
401
+ return value;
402
+ }
403
+ function jsonBytes(value, maximum) {
404
+ const bytes = new TextEncoder().encode(canonicalizePlanningJsonV1(value, {
405
+ maximumBytes: maximum,
406
+ maximumDepth: 64,
407
+ maximumNodes: 2_000_000,
408
+ maximumKeysPerObject: 4_096,
409
+ maximumItemsPerArray: 262_144,
410
+ }));
411
+ if (bytes.byteLength < 1 || bytes.byteLength > maximum)
412
+ throw new RangeError('stored value exceeds byte limit');
413
+ return bytes;
414
+ }
415
+ function sha256(bytes) {
416
+ return createHash('sha256').update(bytes).digest('hex');
417
+ }
418
+ function asBytes(value) {
419
+ if (Buffer.isBuffer(value))
420
+ return new Uint8Array(value);
421
+ if (value instanceof Uint8Array)
422
+ return new Uint8Array(value);
423
+ throw new TypeError('database bytea value is invalid');
424
+ }
425
+ function equal(a, b) {
426
+ return (a.byteLength === b.byteLength &&
427
+ a.every((value, index) => value === b[index]));
428
+ }
429
+ async function collect(stream, maximum) {
430
+ if (!stream || typeof stream[Symbol.asyncIterator] !== 'function')
431
+ throw new TypeError('artifact byte stream is invalid');
432
+ const chunks = [];
433
+ let size = 0, count = 0;
434
+ for await (const chunk of stream) {
435
+ if (!(chunk instanceof Uint8Array) ||
436
+ chunk.byteLength === 0 ||
437
+ ++count > 65_536 ||
438
+ (size += chunk.byteLength) > maximum)
439
+ throw new RangeError('artifact stream exceeds limit');
440
+ chunks.push(Uint8Array.from(chunk));
441
+ }
442
+ if (size < 1)
443
+ throw new RangeError('artifact stream is empty');
444
+ const result = new Uint8Array(size);
445
+ let at = 0;
446
+ for (const chunk of chunks) {
447
+ result.set(chunk, at);
448
+ at += chunk.byteLength;
449
+ }
450
+ return result;
451
+ }
452
+ function normalizeFence(value) {
453
+ if (!value ||
454
+ typeof value !== 'object' ||
455
+ !Number.isSafeInteger(value.generation) ||
456
+ value.generation < 1 ||
457
+ !Number.isSafeInteger(value.expiresAtMs) ||
458
+ value.expiresAtMs < 0)
459
+ throw new TypeError('execution fence is invalid');
460
+ return Object.freeze({
461
+ workerId: token(value.workerId, 'fence workerId', 256),
462
+ leaseToken: token(value.leaseToken, 'fence leaseToken', 256),
463
+ generation: value.generation,
464
+ expiresAtMs: value.expiresAtMs,
465
+ });
466
+ }
467
+ function optionalTime(value, label) {
468
+ if (value === null || value === undefined)
469
+ return null;
470
+ if (!Number.isSafeInteger(value) || value < 0)
471
+ throw new TypeError(`${label} is invalid`);
472
+ return value;
473
+ }
474
+ function sameStoredProvenance(row, executionId, registrationDigest, cellId, fence, operationExpiresAtMs) {
475
+ return (String(row.execution_id) === executionId &&
476
+ String(row.registration_digest) === registrationDigest &&
477
+ String(row.cell_id) === cellId &&
478
+ String(row.fence_worker_id) === fence.workerId &&
479
+ String(row.fence_lease_token) === fence.leaseToken &&
480
+ Number(row.fence_generation) === fence.generation &&
481
+ Number(row.fence_expires_at_ms) === fence.expiresAtMs &&
482
+ optionalStoredTime(row.operation_expires_at_ms) === operationExpiresAtMs);
483
+ }
484
+ function optionalStoredTime(value) {
485
+ if (value === null || value === undefined)
486
+ return null;
487
+ const parsed = Number(value);
488
+ if (!Number.isSafeInteger(parsed) || parsed < 0)
489
+ throw new TypeError('stored operation expiry is invalid');
490
+ return parsed;
491
+ }
492
+ function activeFence(state, cellId, runKey, fence, nowMs) {
493
+ if (!Number.isSafeInteger(nowMs) || nowMs < 0)
494
+ throw new TypeError('database clock is invalid');
495
+ const cell = state.cells.find((candidate) => candidate.cellId === cellId);
496
+ const current = cell?.lease;
497
+ const slot = cell?.runs.find((candidate) => candidate.runKey === runKey);
498
+ return (cell?.status === 'running' &&
499
+ slot?.status === 'running' &&
500
+ current !== null &&
501
+ current !== undefined &&
502
+ current.expiresAtMs > nowMs &&
503
+ current.workerId === fence.workerId &&
504
+ current.leaseToken === fence.leaseToken &&
505
+ current.generation === fence.generation &&
506
+ current.expiresAtMs === fence.expiresAtMs);
507
+ }
508
+ export { getMeshSimPostgresMigrationStatusV1, meshSimPostgresMigrationDirectoryV1, meshSimPostgresRollbackConfirmationV1, rollbackMeshSimPostgresMigrationV1, runMeshSimPostgresMigrationsV1, } from './migrations.js';
509
+ export * from './scalable-evaluation-checkpoint-store.js';
510
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type PostgresMigrationStatus } from '@agentplat/postgres';
2
+ import type { Pool } from 'pg';
3
+ export declare const meshSimPostgresMigrationDirectoryV1: string;
4
+ export interface MeshSimPostgresMigrationOptionsV1 {
5
+ readonly schema?: string;
6
+ }
7
+ export declare function runMeshSimPostgresMigrationsV1(pool: Pool, options?: MeshSimPostgresMigrationOptionsV1): Promise<PostgresMigrationStatus>;
8
+ export declare function getMeshSimPostgresMigrationStatusV1(pool: Pool, options?: MeshSimPostgresMigrationOptionsV1): Promise<PostgresMigrationStatus>;
9
+ export declare function rollbackMeshSimPostgresMigrationV1(pool: Pool, input: MeshSimPostgresMigrationOptionsV1 & Readonly<{
10
+ expectedCurrentVersion: number;
11
+ confirm: string;
12
+ allowDataLoss?: boolean;
13
+ }>): Promise<PostgresMigrationStatus>;
14
+ export declare function meshSimPostgresRollbackConfirmationV1(schema: string, version: number): string;
15
+ //# sourceMappingURL=migrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../src/migrations.ts"],"names":[],"mappings":"AAGA,OAAO,EAML,KAAK,uBAAuB,EAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAI/B,eAAO,MAAM,mCAAmC,QAE/C,CAAC;AAwCF,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,IAAI,EACV,OAAO,GAAE,iCAAsC,GAC9C,OAAO,CAAC,uBAAuB,CAAC,CAMlC;AAED,wBAAgB,mCAAmC,CACjD,IAAI,EAAE,IAAI,EACV,OAAO,GAAE,iCAAsC,GAC9C,OAAO,CAAC,uBAAuB,CAAC,CAMlC;AAED,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,iCAAiC,GACtC,QAAQ,CAAC;IACP,sBAAsB,EAAE,MAAM,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC,GACH,OAAO,CAAC,uBAAuB,CAAC,CASlC;AAED,wBAAgB,qCAAqC,CACnD,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,MAAM,CAER"}
@@ -0,0 +1,49 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { fileURLToPath } from 'node:url';
3
+ import { getPostgresMigrationStatus, postgresRollbackConfirmation, rollbackPostgresMigration, runPostgresMigrations, } from '@agentplat/postgres';
4
+ const APPLICATION_ID = 'agentplat-mesh-sim';
5
+ export const meshSimPostgresMigrationDirectoryV1 = fileURLToPath(new URL('../migrations/', import.meta.url));
6
+ const migrations = Object.freeze([
7
+ Object.freeze({
8
+ version: 1,
9
+ name: 'mesh_sim_durability',
10
+ up: readFileSync(new URL('../migrations/001_mesh_sim_durability.up.sql', import.meta.url), 'utf8'),
11
+ down: readFileSync(new URL('../migrations/001_mesh_sim_durability.down.sql', import.meta.url), 'utf8'),
12
+ destructiveDown: true,
13
+ }),
14
+ Object.freeze({
15
+ version: 2,
16
+ name: 'scalable_evaluation_checkpoints',
17
+ up: readFileSync(new URL('../migrations/002_scalable_evaluation_checkpoints.up.sql', import.meta.url), 'utf8'),
18
+ down: readFileSync(new URL('../migrations/002_scalable_evaluation_checkpoints.down.sql', import.meta.url), 'utf8'),
19
+ destructiveDown: true,
20
+ }),
21
+ ]);
22
+ export function runMeshSimPostgresMigrationsV1(pool, options = {}) {
23
+ return runPostgresMigrations(pool, {
24
+ applicationId: APPLICATION_ID,
25
+ schema: options.schema,
26
+ migrations,
27
+ });
28
+ }
29
+ export function getMeshSimPostgresMigrationStatusV1(pool, options = {}) {
30
+ return getPostgresMigrationStatus(pool, {
31
+ applicationId: APPLICATION_ID,
32
+ schema: options.schema,
33
+ migrations,
34
+ });
35
+ }
36
+ export function rollbackMeshSimPostgresMigrationV1(pool, input) {
37
+ return rollbackPostgresMigration(pool, {
38
+ applicationId: APPLICATION_ID,
39
+ schema: input.schema,
40
+ migrations,
41
+ expectedCurrentVersion: input.expectedCurrentVersion,
42
+ confirm: input.confirm,
43
+ allowDataLoss: input.allowDataLoss,
44
+ });
45
+ }
46
+ export function meshSimPostgresRollbackConfirmationV1(schema, version) {
47
+ return postgresRollbackConfirmation(APPLICATION_ID, schema, version);
48
+ }
49
+ //# sourceMappingURL=migrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../src/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,yBAAyB,EACzB,qBAAqB,GAGtB,MAAM,qBAAqB,CAAC;AAG7B,MAAM,cAAc,GAAG,oBAAoB,CAAC;AAE5C,MAAM,CAAC,MAAM,mCAAmC,GAAG,aAAa,CAC9D,IAAI,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAC3C,CAAC;AAEF,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/B,MAAM,CAAC,MAAM,CAAC;QACZ,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,qBAAqB;QAC3B,EAAE,EAAE,YAAY,CACd,IAAI,GAAG,CAAC,8CAA8C,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EACxE,MAAM,CACP;QACD,IAAI,EAAE,YAAY,CAChB,IAAI,GAAG,CACL,gDAAgD,EAChD,MAAM,CAAC,IAAI,CAAC,GAAG,CAChB,EACD,MAAM,CACP;QACD,eAAe,EAAE,IAAI;KACtB,CAAC;IACF,MAAM,CAAC,MAAM,CAAC;QACZ,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,iCAAiC;QACvC,EAAE,EAAE,YAAY,CACd,IAAI,GAAG,CACL,0DAA0D,EAC1D,MAAM,CAAC,IAAI,CAAC,GAAG,CAChB,EACD,MAAM,CACP;QACD,IAAI,EAAE,YAAY,CAChB,IAAI,GAAG,CACL,4DAA4D,EAC5D,MAAM,CAAC,IAAI,CAAC,GAAG,CAChB,EACD,MAAM,CACP;QACD,eAAe,EAAE,IAAI;KACtB,CAAC;CACoC,CAAC,CAAC;AAM1C,MAAM,UAAU,8BAA8B,CAC5C,IAAU,EACV,UAA6C,EAAE;IAE/C,OAAO,qBAAqB,CAAC,IAAI,EAAE;QACjC,aAAa,EAAE,cAAc;QAC7B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU;KACX,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,mCAAmC,CACjD,IAAU,EACV,UAA6C,EAAE;IAE/C,OAAO,0BAA0B,CAAC,IAAI,EAAE;QACtC,aAAa,EAAE,cAAc;QAC7B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU;KACX,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kCAAkC,CAChD,IAAU,EACV,KAKI;IAEJ,OAAO,yBAAyB,CAAC,IAAI,EAAE;QACrC,aAAa,EAAE,cAAc;QAC7B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,UAAU;QACV,sBAAsB,EAAE,KAAK,CAAC,sBAAsB;QACpD,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,aAAa,EAAE,KAAK,CAAC,aAAa;KACnC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qCAAqC,CACnD,MAAc,EACd,OAAe;IAEf,OAAO,4BAA4B,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACvE,CAAC"}