@opengeni/artifact-tool 0.2.8 → 0.3.4-canary.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 (57) hide show
  1. package/dist/{chunk-ZCJYRJGB.js → chunk-4XJE7NRA.js} +2 -2
  2. package/dist/{chunk-N2IHNWBS.js → chunk-4YYYUZQH.js} +15 -6
  3. package/dist/chunk-4YYYUZQH.js.map +1 -0
  4. package/dist/{chunk-U5G2BKM2.js → chunk-LMLPFF3S.js} +12 -6
  5. package/dist/{chunk-U5G2BKM2.js.map → chunk-LMLPFF3S.js.map} +1 -1
  6. package/dist/{chunk-B2ZJRZDA.js → chunk-LVPFJH2Z.js} +7 -5
  7. package/dist/chunk-LVPFJH2Z.js.map +1 -0
  8. package/dist/{chunk-QZI5POCC.js → chunk-OVXX4G35.js} +2 -2
  9. package/dist/{chunk-6PBM7FKI.js → chunk-QA3NXBAG.js} +8 -7
  10. package/dist/chunk-QA3NXBAG.js.map +1 -0
  11. package/dist/{chunk-XT2EJFCU.js → chunk-SYFNJGH5.js} +30 -8
  12. package/dist/chunk-SYFNJGH5.js.map +1 -0
  13. package/dist/{chunk-RU5G3HNF.js → chunk-XAZTHG6W.js} +20 -9
  14. package/dist/chunk-XAZTHG6W.js.map +1 -0
  15. package/dist/index.js +4 -4
  16. package/dist/kernel.d.ts +0 -19
  17. package/dist/materializer-cli-entry.js +7 -7
  18. package/dist/materializer-cli.d.ts +4 -3
  19. package/dist/materializer-cli.js +7 -7
  20. package/dist/native.d.ts +1 -1
  21. package/dist/native.js +2 -2
  22. package/dist/office-import.d.ts +15 -5
  23. package/dist/office-import.js +25 -8
  24. package/dist/office-import.js.map +1 -1
  25. package/dist/production-document.js +4 -4
  26. package/dist/production-presentation.js +4 -4
  27. package/dist/production-spreadsheet.js +4 -4
  28. package/dist/reference.js +1 -365
  29. package/dist/reference.js.map +1 -1
  30. package/dist/runtime-cli-entry.js +3 -3
  31. package/dist/runtime-cli.js +2 -2
  32. package/dist/runtime-development.js +3 -3
  33. package/dist/runtime-receipt.d.ts +3 -2
  34. package/dist/runtime.d.ts +8 -6
  35. package/dist/runtime.js +1 -1
  36. package/dist/snapshot.d.ts +13 -6
  37. package/dist/snapshot.js +23 -11
  38. package/dist/snapshot.js.map +1 -1
  39. package/dist/spreadsheet-xlsx-codec.js +2 -2
  40. package/dist/spreadsheet.js +1 -1
  41. package/package.json +5 -5
  42. package/src/kernel.ts +1 -397
  43. package/src/materializer-cli.ts +20 -9
  44. package/src/native.ts +7 -5
  45. package/src/office-import.ts +47 -18
  46. package/src/production-spreadsheet-native.ts +4 -3
  47. package/src/runtime-receipt.ts +16 -5
  48. package/src/runtime.ts +22 -10
  49. package/src/snapshot.ts +39 -17
  50. package/src/spreadsheet-formula.ts +35 -7
  51. package/dist/chunk-6PBM7FKI.js.map +0 -1
  52. package/dist/chunk-B2ZJRZDA.js.map +0 -1
  53. package/dist/chunk-N2IHNWBS.js.map +0 -1
  54. package/dist/chunk-RU5G3HNF.js.map +0 -1
  55. package/dist/chunk-XT2EJFCU.js.map +0 -1
  56. /package/dist/{chunk-ZCJYRJGB.js.map → chunk-4XJE7NRA.js.map} +0 -0
  57. /package/dist/{chunk-QZI5POCC.js.map → chunk-OVXX4G35.js.map} +0 -0
package/dist/reference.js CHANGED
@@ -80,14 +80,13 @@ import {
80
80
  Worksheet,
81
81
  WorksheetCollection,
82
82
  validateSerializedWorkbook
83
- } from "./chunk-XT2EJFCU.js";
83
+ } from "./chunk-SYFNJGH5.js";
84
84
  import {
85
85
  InvalidSpreadsheetImageError
86
86
  } from "./chunk-4FRFNNBM.js";
87
87
  import "./chunk-FGZM4FQ6.js";
88
88
  import "./chunk-Q2FFHEY7.js";
89
89
  import {
90
- ArtifactLimitError,
91
90
  UnsupportedArtifactFeatureError
92
91
  } from "./chunk-O24KTEGP.js";
93
92
  import "./chunk-4BSENMAE.js";
@@ -124,373 +123,10 @@ var ArtifactKernelRegistry = class {
124
123
  return [...this.kernels.values()];
125
124
  }
126
125
  };
127
- var ARTIFACT_OPERATION_MAX_BYTES = 1024 * 1024;
128
- var ARTIFACT_OPERATION_MAX_COMMANDS = 1e4;
129
- var ARTIFACT_OPERATION_MAX_VECTOR_ACTORS = 1024;
130
- var ARTIFACT_OPERATION_MAX_STRING_BYTES = 256 * 1024;
131
- var ARTIFACT_OPERATION_MAX_JSON_DEPTH = 64;
132
- var ARTIFACT_OPERATION_MAX_JSON_NODES = 1e5;
133
- var OPERATION_MAGIC = new Uint8Array([79, 71, 65, 82]);
134
- var textEncoder = new TextEncoder();
135
- var textDecoder = new TextDecoder("utf-8", { fatal: true });
136
- var ArtifactCommandBatchCodec = {
137
- encode(batch) {
138
- validateBatch(batch);
139
- const writer = new BinaryWriter(ARTIFACT_OPERATION_MAX_BYTES);
140
- writer.bytes(OPERATION_MAGIC);
141
- writer.varint(batch.schemaVersion);
142
- writer.varint(modalityCode(batch.modality));
143
- writer.string(batch.artifactId);
144
- writer.string(batch.transactionId);
145
- writer.string(batch.actorId);
146
- writer.varint(batch.baseSequence);
147
- const vector = Object.entries(batch.baseVector).sort(
148
- ([left], [right]) => left < right ? -1 : left > right ? 1 : 0
149
- );
150
- writer.varint(vector.length);
151
- for (const [actor, counter] of vector) {
152
- writer.string(actor);
153
- writer.varint(counter);
154
- }
155
- writer.varint(batch.commands.length);
156
- for (const command of batch.commands) {
157
- writer.string(command.code);
158
- writer.string(command.targetId ?? "");
159
- let flags = 0;
160
- if (command.precondition?.objectRevision !== void 0) flags |= 1;
161
- if (command.precondition?.exists !== void 0) flags |= 2;
162
- if (command.payload !== void 0) flags |= 4;
163
- writer.byte(flags);
164
- if ((flags & 1) !== 0) writer.varint(command.precondition.objectRevision);
165
- if ((flags & 2) !== 0) writer.byte(command.precondition.exists ? 1 : 0);
166
- if ((flags & 4) !== 0) writer.string(canonicalJson(command.payload));
167
- }
168
- return writer.finish();
169
- },
170
- decode(bytes) {
171
- if (bytes.byteLength > ARTIFACT_OPERATION_MAX_BYTES) {
172
- throw new ArtifactLimitError(
173
- "operation bytes",
174
- bytes.byteLength,
175
- ARTIFACT_OPERATION_MAX_BYTES
176
- );
177
- }
178
- const reader = new BinaryReader(bytes);
179
- const magic = reader.bytes(OPERATION_MAGIC.length);
180
- if (!magic.every((value, index) => value === OPERATION_MAGIC[index])) {
181
- throw new Error("Invalid artifact operation magic");
182
- }
183
- const schemaVersion = reader.varint();
184
- if (schemaVersion !== 1)
185
- throw new Error(`Unsupported artifact operation schema: ${schemaVersion}`);
186
- const modality = modalityFromCode(reader.varint());
187
- const artifactId = reader.string();
188
- const transactionId = reader.string();
189
- const actorId = reader.string();
190
- const baseSequence = reader.varint();
191
- const vectorCount = reader.varint();
192
- if (vectorCount > ARTIFACT_OPERATION_MAX_VECTOR_ACTORS) {
193
- throw new ArtifactLimitError(
194
- "causal vector actors",
195
- vectorCount,
196
- ARTIFACT_OPERATION_MAX_VECTOR_ACTORS
197
- );
198
- }
199
- const vectorEntries = [];
200
- let previousActor = "";
201
- for (let index = 0; index < vectorCount; index += 1) {
202
- const actor = reader.string();
203
- if (actor <= previousActor) {
204
- throw new Error("Causal vector actors must be unique and sorted");
205
- }
206
- previousActor = actor;
207
- vectorEntries.push([actor, reader.varint()]);
208
- }
209
- const baseVector = Object.fromEntries(vectorEntries);
210
- const commandCount = reader.varint();
211
- if (commandCount > ARTIFACT_OPERATION_MAX_COMMANDS) {
212
- throw new ArtifactLimitError(
213
- "operation commands",
214
- commandCount,
215
- ARTIFACT_OPERATION_MAX_COMMANDS
216
- );
217
- }
218
- const commands = [];
219
- for (let index = 0; index < commandCount; index += 1) {
220
- const code = reader.string();
221
- const targetId = reader.string();
222
- const flags = reader.byte();
223
- if ((flags & ~7) !== 0) throw new Error("Unknown artifact command flags");
224
- const objectRevision = (flags & 1) !== 0 ? reader.varint() : void 0;
225
- let exists;
226
- if ((flags & 2) !== 0) {
227
- const encodedExists = reader.byte();
228
- if (encodedExists > 1) {
229
- throw new Error("Artifact command boolean uses a non-canonical encoding");
230
- }
231
- exists = encodedExists === 1;
232
- }
233
- const payload = (flags & 4) !== 0 ? parseCanonicalJson(reader.string()) : void 0;
234
- commands.push({
235
- code,
236
- ...targetId ? { targetId } : {},
237
- ...objectRevision !== void 0 || exists !== void 0 ? {
238
- precondition: {
239
- ...objectRevision !== void 0 ? { objectRevision } : {},
240
- ...exists !== void 0 ? { exists } : {}
241
- }
242
- } : {},
243
- ...payload !== void 0 ? { payload } : {}
244
- });
245
- }
246
- reader.done();
247
- const batch = {
248
- schemaVersion: 1,
249
- artifactId,
250
- modality,
251
- transactionId,
252
- actorId,
253
- baseSequence,
254
- baseVector,
255
- commands
256
- };
257
- validateBatch(batch);
258
- return batch;
259
- }
260
- };
261
- function validateBatch(batch) {
262
- if (batch.schemaVersion !== 1) throw new Error("Artifact operation schema must be 1");
263
- for (const [label, value] of [
264
- ["artifactId", batch.artifactId],
265
- ["transactionId", batch.transactionId],
266
- ["actorId", batch.actorId]
267
- ]) {
268
- if (!value || value.length > 512) throw new Error(`${label} must contain 1-512 characters`);
269
- }
270
- assertSafeInteger(batch.baseSequence, "baseSequence");
271
- const vector = Object.entries(batch.baseVector);
272
- if (vector.length > ARTIFACT_OPERATION_MAX_VECTOR_ACTORS) {
273
- throw new ArtifactLimitError(
274
- "causal vector actors",
275
- vector.length,
276
- ARTIFACT_OPERATION_MAX_VECTOR_ACTORS
277
- );
278
- }
279
- for (const [actor, counter] of vector) {
280
- if (!actor || actor.length > 512)
281
- throw new Error("Causal vector actor must contain 1-512 characters");
282
- assertSafeInteger(counter, `baseVector.${actor}`);
283
- }
284
- if (batch.commands.length > ARTIFACT_OPERATION_MAX_COMMANDS) {
285
- throw new ArtifactLimitError(
286
- "operation commands",
287
- batch.commands.length,
288
- ARTIFACT_OPERATION_MAX_COMMANDS
289
- );
290
- }
291
- if (batch.commands.length === 0) throw new Error("Artifact command batch must not be empty");
292
- for (const command of batch.commands) {
293
- if (!/^[a-z][a-z0-9_.-]{0,127}$/.test(command.code))
294
- throw new Error(`Invalid artifact command code: ${command.code}`);
295
- if (command.targetId !== void 0 && (command.targetId.length === 0 || command.targetId.length > 512)) {
296
- throw new Error("Artifact command target id must contain 1-512 characters");
297
- }
298
- if (command.precondition?.objectRevision !== void 0) {
299
- assertSafeInteger(command.precondition.objectRevision, "objectRevision");
300
- }
301
- }
302
- }
303
126
  function defaultKernelOrder() {
304
127
  return typeof window === "undefined" ? ["native"] : [];
305
128
  }
306
- function modalityCode(modality) {
307
- return { spreadsheet: 1, presentation: 2, document: 3 }[modality];
308
- }
309
- function modalityFromCode(value) {
310
- if (value === 1) return "spreadsheet";
311
- if (value === 2) return "presentation";
312
- if (value === 3) return "document";
313
- throw new Error(`Unknown artifact modality code: ${value}`);
314
- }
315
- function assertSafeInteger(value, label) {
316
- if (!Number.isSafeInteger(value) || value < 0)
317
- throw new Error(`${label} must be a non-negative safe integer`);
318
- }
319
- function canonicalJson(value) {
320
- return JSON.stringify(canonicalValue(value, { nodes: 0 }, 0));
321
- }
322
- function canonicalValue(value, state, depth) {
323
- state.nodes += 1;
324
- if (state.nodes > ARTIFACT_OPERATION_MAX_JSON_NODES) {
325
- throw new ArtifactLimitError(
326
- "operation JSON nodes",
327
- state.nodes,
328
- ARTIFACT_OPERATION_MAX_JSON_NODES
329
- );
330
- }
331
- if (depth > ARTIFACT_OPERATION_MAX_JSON_DEPTH) {
332
- throw new ArtifactLimitError("operation JSON depth", depth, ARTIFACT_OPERATION_MAX_JSON_DEPTH);
333
- }
334
- if (value === null || typeof value === "string" || typeof value === "boolean") return value;
335
- if (typeof value === "number") {
336
- if (!Number.isFinite(value))
337
- throw new Error("Artifact command JSON cannot contain non-finite numbers");
338
- return Object.is(value, -0) ? 0 : value;
339
- }
340
- if (Array.isArray(value)) {
341
- if (Object.keys(value).length !== value.length || Object.getOwnPropertySymbols(value).length) {
342
- throw new Error("Artifact command payload arrays must be dense JSON arrays");
343
- }
344
- const output = [];
345
- for (let index = 0; index < value.length; index += 1) {
346
- const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
347
- if (!descriptor || !("value" in descriptor) || !descriptor.enumerable) {
348
- throw new Error("Artifact command payload arrays must contain data properties");
349
- }
350
- output.push(canonicalValue(descriptor.value, state, depth + 1));
351
- }
352
- return output;
353
- }
354
- if (typeof value === "object") {
355
- if (Object.getPrototypeOf(value) !== Object.prototype)
356
- throw new Error("Artifact command payload must be plain JSON");
357
- const record = value;
358
- const keys = Reflect.ownKeys(record);
359
- if (keys.some((key) => typeof key !== "string")) {
360
- throw new Error("Artifact command payload cannot contain symbol properties");
361
- }
362
- return Object.fromEntries(
363
- keys.sort().map((key) => {
364
- const descriptor = Object.getOwnPropertyDescriptor(record, key);
365
- if (!descriptor || !("value" in descriptor) || !descriptor.enumerable) {
366
- throw new Error("Artifact command payload properties must be enumerable data properties");
367
- }
368
- return [key, canonicalValue(descriptor.value, state, depth + 1)];
369
- })
370
- );
371
- }
372
- throw new Error(`Artifact command payload contains unsupported ${typeof value}`);
373
- }
374
- function parseCanonicalJson(value) {
375
- const parsed = JSON.parse(value);
376
- if (canonicalJson(parsed) !== value)
377
- throw new Error("Artifact command payload is not canonical JSON");
378
- return parsed;
379
- }
380
- var BinaryWriter = class {
381
- constructor(maximum) {
382
- this.maximum = maximum;
383
- }
384
- buffer = new Uint8Array(1024);
385
- length = 0;
386
- byte(value) {
387
- this.ensure(1);
388
- this.buffer[this.length++] = value;
389
- }
390
- bytes(value) {
391
- this.ensure(value.byteLength);
392
- this.buffer.set(value, this.length);
393
- this.length += value.byteLength;
394
- }
395
- varint(value) {
396
- assertSafeInteger(value, "varint");
397
- let remaining = BigInt(value);
398
- do {
399
- let byte = Number(remaining & 0x7fn);
400
- remaining >>= 7n;
401
- if (remaining > 0n) byte |= 128;
402
- this.byte(byte);
403
- } while (remaining > 0n);
404
- }
405
- string(value) {
406
- const bytes = textEncoder.encode(value);
407
- if (bytes.byteLength > ARTIFACT_OPERATION_MAX_STRING_BYTES) {
408
- throw new ArtifactLimitError(
409
- "operation string bytes",
410
- bytes.byteLength,
411
- ARTIFACT_OPERATION_MAX_STRING_BYTES
412
- );
413
- }
414
- this.varint(bytes.byteLength);
415
- this.bytes(bytes);
416
- }
417
- finish() {
418
- return this.buffer.slice(0, this.length);
419
- }
420
- ensure(extra) {
421
- const required = this.length + extra;
422
- if (required > this.maximum)
423
- throw new ArtifactLimitError("operation bytes", required, this.maximum);
424
- if (required <= this.buffer.byteLength) return;
425
- let nextSize = this.buffer.byteLength;
426
- while (nextSize < required) nextSize = Math.min(this.maximum, nextSize * 2);
427
- const next = new Uint8Array(nextSize);
428
- next.set(this.buffer);
429
- this.buffer = next;
430
- }
431
- };
432
- var BinaryReader = class {
433
- constructor(input) {
434
- this.input = input;
435
- }
436
- offset = 0;
437
- byte() {
438
- const value = this.input[this.offset];
439
- if (value === void 0) throw new Error("Truncated artifact operation");
440
- this.offset += 1;
441
- return value;
442
- }
443
- bytes(length) {
444
- if (!Number.isSafeInteger(length) || length < 0 || this.offset + length > this.input.byteLength) {
445
- throw new Error("Truncated artifact operation bytes");
446
- }
447
- const value = this.input.subarray(this.offset, this.offset + length);
448
- this.offset += length;
449
- return value;
450
- }
451
- varint() {
452
- let value = 0n;
453
- let shift = 0n;
454
- for (let index = 0; index < 10; index += 1) {
455
- const byte = this.byte();
456
- value |= BigInt(byte & 127) << shift;
457
- if ((byte & 128) === 0) {
458
- if (index > 0 && byte === 0) {
459
- throw new Error("Artifact operation varint is non-canonical");
460
- }
461
- const number = Number(value);
462
- if (!Number.isSafeInteger(number))
463
- throw new Error("Artifact operation varint exceeds safe integer");
464
- return number;
465
- }
466
- shift += 7n;
467
- }
468
- throw new Error("Invalid artifact operation varint");
469
- }
470
- string() {
471
- const length = this.varint();
472
- if (length > ARTIFACT_OPERATION_MAX_STRING_BYTES) {
473
- throw new ArtifactLimitError(
474
- "operation string bytes",
475
- length,
476
- ARTIFACT_OPERATION_MAX_STRING_BYTES
477
- );
478
- }
479
- return textDecoder.decode(this.bytes(length));
480
- }
481
- done() {
482
- if (this.offset !== this.input.byteLength)
483
- throw new Error("Artifact operation has trailing bytes");
484
- }
485
- };
486
129
  export {
487
- ARTIFACT_OPERATION_MAX_BYTES,
488
- ARTIFACT_OPERATION_MAX_COMMANDS,
489
- ARTIFACT_OPERATION_MAX_JSON_DEPTH,
490
- ARTIFACT_OPERATION_MAX_JSON_NODES,
491
- ARTIFACT_OPERATION_MAX_STRING_BYTES,
492
- ARTIFACT_OPERATION_MAX_VECTOR_ACTORS,
493
- ArtifactCommandBatchCodec,
494
130
  ArtifactKernelRegistry,
495
131
  ChartCollection,
496
132
  ChartSeriesCollection,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/kernel.ts"],"sourcesContent":["import { ArtifactLimitError, UnsupportedArtifactFeatureError } from \"./errors\";\nimport { FileBlob } from \"./file-blob\";\n\nexport type ArtifactModality = \"spreadsheet\" | \"presentation\" | \"document\";\nexport type ArtifactKernelKind = \"native\" | \"wasm\" | \"reference\";\nexport type ArtifactObjectId = string & { readonly __artifactObjectId: unique symbol };\n\nexport type ArtifactKernelCapabilities = {\n modality: ArtifactModality;\n modelSchemaVersion: number;\n operationSchemaVersion: number;\n inspect: boolean;\n calculate: boolean;\n layout: boolean;\n renderFormats: readonly string[];\n importFormats: readonly string[];\n exportFormats: readonly string[];\n collaboration: boolean;\n};\n\nexport type ArtifactCausalVector = Readonly<Record<string, number>>;\n\nexport type ArtifactCommand = {\n code: string;\n targetId?: string;\n precondition?: {\n objectRevision?: number;\n exists?: boolean;\n };\n payload?: unknown;\n};\n\nexport type ArtifactCommandBatch = {\n schemaVersion: 1;\n artifactId: string;\n modality: ArtifactModality;\n transactionId: string;\n actorId: string;\n baseSequence: number;\n baseVector: ArtifactCausalVector;\n commands: readonly ArtifactCommand[];\n};\n\nexport type ArtifactApplyResult = {\n sequence: number;\n vector: ArtifactCausalVector;\n changedObjectIds: readonly string[];\n inverse?: ArtifactCommandBatch;\n};\n\nexport type ArtifactKernelOpenInput = {\n modality: ArtifactModality;\n snapshot?: Uint8Array;\n operationTail?: readonly Uint8Array[];\n};\n\nexport type ArtifactKernelDocument = {\n readonly modality: ArtifactModality;\n readonly revision: number;\n apply(batch: ArtifactCommandBatch): ArtifactApplyResult;\n snapshot(): Uint8Array;\n inspect(options: Record<string, unknown>): Promise<readonly Record<string, unknown>[]>;\n render(options: Record<string, unknown>): Promise<FileBlob>;\n materialize(format: string, options?: Record<string, unknown>): Promise<FileBlob>;\n close(): void;\n};\n\nexport interface ArtifactKernel {\n readonly kind: ArtifactKernelKind;\n readonly version: string;\n capabilities(modality: ArtifactModality): ArtifactKernelCapabilities;\n open(input: ArtifactKernelOpenInput): Promise<ArtifactKernelDocument>;\n}\n\nexport type ArtifactKernelSelection = {\n kernel: ArtifactKernel;\n capabilities: ArtifactKernelCapabilities;\n};\n\n/**\n * Kernel registry used by the universal facade. Hosts register loaders without\n * making application code depend on platform packages. Production selection is\n * deliberately fail-closed: Node/Bun selects only native. Browser editing goes\n * through the SDK's dedicated Worker/WASM session, and the reference backend is\n * selected only when a development/conformance caller explicitly asks for it.\n */\nexport class ArtifactKernelRegistry {\n private readonly kernels = new Map<ArtifactKernelKind, ArtifactKernel>();\n\n register(kernel: ArtifactKernel): () => void {\n if (this.kernels.has(kernel.kind))\n throw new Error(`Artifact ${kernel.kind} kernel already registered`);\n this.kernels.set(kernel.kind, kernel);\n return () => {\n if (this.kernels.get(kernel.kind) === kernel) this.kernels.delete(kernel.kind);\n };\n }\n\n select(\n modality: ArtifactModality,\n required: Partial<\n Pick<ArtifactKernelCapabilities, \"calculate\" | \"layout\" | \"collaboration\">\n > = {},\n order: readonly ArtifactKernelKind[] = defaultKernelOrder(),\n ): ArtifactKernelSelection {\n for (const kind of order) {\n const kernel = this.kernels.get(kind);\n if (!kernel) continue;\n const capabilities = kernel.capabilities(modality);\n if (required.calculate === true && !capabilities.calculate) continue;\n if (required.layout === true && !capabilities.layout) continue;\n if (required.collaboration === true && !capabilities.collaboration) continue;\n return { kernel, capabilities };\n }\n throw new UnsupportedArtifactFeatureError(\n modality,\n \"required kernel capabilities\",\n \"available\",\n );\n }\n\n available(): readonly ArtifactKernel[] {\n return [...this.kernels.values()];\n }\n}\n\nexport const ARTIFACT_OPERATION_MAX_BYTES = 1024 * 1024;\nexport const ARTIFACT_OPERATION_MAX_COMMANDS = 10_000;\nexport const ARTIFACT_OPERATION_MAX_VECTOR_ACTORS = 1_024;\nexport const ARTIFACT_OPERATION_MAX_STRING_BYTES = 256 * 1024;\nexport const ARTIFACT_OPERATION_MAX_JSON_DEPTH = 64;\nexport const ARTIFACT_OPERATION_MAX_JSON_NODES = 100_000;\nconst OPERATION_MAGIC = new Uint8Array([0x4f, 0x47, 0x41, 0x52]); // OGAR\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder(\"utf-8\", { fatal: true });\n\n/**\n * Deterministic codec retained only for historical TypeScript conformance\n * fixtures.\n *\n * @deprecated OGAR duplicates authored identity/causality and must never be\n * persisted, submitted, or lowered by a production runtime. Use the canonical\n * OGATX001 envelope with an identity-free OGASC001 command payload from\n * `@opengeni/contracts/editable-artifacts`.\n */\nexport const ArtifactCommandBatchCodec = {\n encode(batch: ArtifactCommandBatch): Uint8Array {\n validateBatch(batch);\n const writer = new BinaryWriter(ARTIFACT_OPERATION_MAX_BYTES);\n writer.bytes(OPERATION_MAGIC);\n writer.varint(batch.schemaVersion);\n writer.varint(modalityCode(batch.modality));\n writer.string(batch.artifactId);\n writer.string(batch.transactionId);\n writer.string(batch.actorId);\n writer.varint(batch.baseSequence);\n const vector = Object.entries(batch.baseVector).sort(([left], [right]) =>\n left < right ? -1 : left > right ? 1 : 0,\n );\n writer.varint(vector.length);\n for (const [actor, counter] of vector) {\n writer.string(actor);\n writer.varint(counter);\n }\n writer.varint(batch.commands.length);\n for (const command of batch.commands) {\n writer.string(command.code);\n writer.string(command.targetId ?? \"\");\n let flags = 0;\n if (command.precondition?.objectRevision !== undefined) flags |= 1;\n if (command.precondition?.exists !== undefined) flags |= 2;\n if (command.payload !== undefined) flags |= 4;\n writer.byte(flags);\n if ((flags & 1) !== 0) writer.varint(command.precondition!.objectRevision!);\n if ((flags & 2) !== 0) writer.byte(command.precondition!.exists ? 1 : 0);\n if ((flags & 4) !== 0) writer.string(canonicalJson(command.payload));\n }\n return writer.finish();\n },\n\n decode(bytes: Uint8Array): ArtifactCommandBatch {\n if (bytes.byteLength > ARTIFACT_OPERATION_MAX_BYTES) {\n throw new ArtifactLimitError(\n \"operation bytes\",\n bytes.byteLength,\n ARTIFACT_OPERATION_MAX_BYTES,\n );\n }\n const reader = new BinaryReader(bytes);\n const magic = reader.bytes(OPERATION_MAGIC.length);\n if (!magic.every((value, index) => value === OPERATION_MAGIC[index])) {\n throw new Error(\"Invalid artifact operation magic\");\n }\n const schemaVersion = reader.varint();\n if (schemaVersion !== 1)\n throw new Error(`Unsupported artifact operation schema: ${schemaVersion}`);\n const modality = modalityFromCode(reader.varint());\n const artifactId = reader.string();\n const transactionId = reader.string();\n const actorId = reader.string();\n const baseSequence = reader.varint();\n const vectorCount = reader.varint();\n if (vectorCount > ARTIFACT_OPERATION_MAX_VECTOR_ACTORS) {\n throw new ArtifactLimitError(\n \"causal vector actors\",\n vectorCount,\n ARTIFACT_OPERATION_MAX_VECTOR_ACTORS,\n );\n }\n const vectorEntries: Array<readonly [string, number]> = [];\n let previousActor = \"\";\n for (let index = 0; index < vectorCount; index += 1) {\n const actor = reader.string();\n if (actor <= previousActor) {\n throw new Error(\"Causal vector actors must be unique and sorted\");\n }\n previousActor = actor;\n vectorEntries.push([actor, reader.varint()]);\n }\n // Object.fromEntries defines data properties instead of invoking the legacy\n // `__proto__` setter. Actor identifiers therefore round-trip without\n // mutating the vector object's prototype or silently losing an entry.\n const baseVector = Object.fromEntries(vectorEntries);\n const commandCount = reader.varint();\n if (commandCount > ARTIFACT_OPERATION_MAX_COMMANDS) {\n throw new ArtifactLimitError(\n \"operation commands\",\n commandCount,\n ARTIFACT_OPERATION_MAX_COMMANDS,\n );\n }\n const commands: ArtifactCommand[] = [];\n for (let index = 0; index < commandCount; index += 1) {\n const code = reader.string();\n const targetId = reader.string();\n const flags = reader.byte();\n if ((flags & ~7) !== 0) throw new Error(\"Unknown artifact command flags\");\n const objectRevision = (flags & 1) !== 0 ? reader.varint() : undefined;\n let exists: boolean | undefined;\n if ((flags & 2) !== 0) {\n const encodedExists = reader.byte();\n if (encodedExists > 1) {\n throw new Error(\"Artifact command boolean uses a non-canonical encoding\");\n }\n exists = encodedExists === 1;\n }\n const payload = (flags & 4) !== 0 ? parseCanonicalJson(reader.string()) : undefined;\n commands.push({\n code,\n ...(targetId ? { targetId } : {}),\n ...(objectRevision !== undefined || exists !== undefined\n ? {\n precondition: {\n ...(objectRevision !== undefined ? { objectRevision } : {}),\n ...(exists !== undefined ? { exists } : {}),\n },\n }\n : {}),\n ...(payload !== undefined ? { payload } : {}),\n });\n }\n reader.done();\n const batch: ArtifactCommandBatch = {\n schemaVersion: 1,\n artifactId,\n modality,\n transactionId,\n actorId,\n baseSequence,\n baseVector,\n commands,\n };\n validateBatch(batch);\n return batch;\n },\n};\n\nfunction validateBatch(batch: ArtifactCommandBatch): void {\n if (batch.schemaVersion !== 1) throw new Error(\"Artifact operation schema must be 1\");\n for (const [label, value] of [\n [\"artifactId\", batch.artifactId],\n [\"transactionId\", batch.transactionId],\n [\"actorId\", batch.actorId],\n ] as const) {\n if (!value || value.length > 512) throw new Error(`${label} must contain 1-512 characters`);\n }\n assertSafeInteger(batch.baseSequence, \"baseSequence\");\n const vector = Object.entries(batch.baseVector);\n if (vector.length > ARTIFACT_OPERATION_MAX_VECTOR_ACTORS) {\n throw new ArtifactLimitError(\n \"causal vector actors\",\n vector.length,\n ARTIFACT_OPERATION_MAX_VECTOR_ACTORS,\n );\n }\n for (const [actor, counter] of vector) {\n if (!actor || actor.length > 512)\n throw new Error(\"Causal vector actor must contain 1-512 characters\");\n assertSafeInteger(counter, `baseVector.${actor}`);\n }\n if (batch.commands.length > ARTIFACT_OPERATION_MAX_COMMANDS) {\n throw new ArtifactLimitError(\n \"operation commands\",\n batch.commands.length,\n ARTIFACT_OPERATION_MAX_COMMANDS,\n );\n }\n if (batch.commands.length === 0) throw new Error(\"Artifact command batch must not be empty\");\n for (const command of batch.commands) {\n if (!/^[a-z][a-z0-9_.-]{0,127}$/.test(command.code))\n throw new Error(`Invalid artifact command code: ${command.code}`);\n if (\n command.targetId !== undefined &&\n (command.targetId.length === 0 || command.targetId.length > 512)\n ) {\n throw new Error(\"Artifact command target id must contain 1-512 characters\");\n }\n if (command.precondition?.objectRevision !== undefined) {\n assertSafeInteger(command.precondition.objectRevision, \"objectRevision\");\n }\n }\n}\n\nfunction defaultKernelOrder(): readonly ArtifactKernelKind[] {\n return typeof window === \"undefined\" ? [\"native\"] : [];\n}\n\nfunction modalityCode(modality: ArtifactModality): number {\n return { spreadsheet: 1, presentation: 2, document: 3 }[modality];\n}\n\nfunction modalityFromCode(value: number): ArtifactModality {\n if (value === 1) return \"spreadsheet\";\n if (value === 2) return \"presentation\";\n if (value === 3) return \"document\";\n throw new Error(`Unknown artifact modality code: ${value}`);\n}\n\nfunction assertSafeInteger(value: number, label: string): void {\n if (!Number.isSafeInteger(value) || value < 0)\n throw new Error(`${label} must be a non-negative safe integer`);\n}\n\nfunction canonicalJson(value: unknown): string {\n return JSON.stringify(canonicalValue(value, { nodes: 0 }, 0));\n}\n\nfunction canonicalValue(value: unknown, state: { nodes: number }, depth: number): unknown {\n state.nodes += 1;\n if (state.nodes > ARTIFACT_OPERATION_MAX_JSON_NODES) {\n throw new ArtifactLimitError(\n \"operation JSON nodes\",\n state.nodes,\n ARTIFACT_OPERATION_MAX_JSON_NODES,\n );\n }\n if (depth > ARTIFACT_OPERATION_MAX_JSON_DEPTH) {\n throw new ArtifactLimitError(\"operation JSON depth\", depth, ARTIFACT_OPERATION_MAX_JSON_DEPTH);\n }\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return value;\n if (typeof value === \"number\") {\n if (!Number.isFinite(value))\n throw new Error(\"Artifact command JSON cannot contain non-finite numbers\");\n return Object.is(value, -0) ? 0 : value;\n }\n if (Array.isArray(value)) {\n if (Object.keys(value).length !== value.length || Object.getOwnPropertySymbols(value).length) {\n throw new Error(\"Artifact command payload arrays must be dense JSON arrays\");\n }\n const output: unknown[] = [];\n for (let index = 0; index < value.length; index += 1) {\n const descriptor = Object.getOwnPropertyDescriptor(value, String(index));\n if (!descriptor || !(\"value\" in descriptor) || !descriptor.enumerable) {\n throw new Error(\"Artifact command payload arrays must contain data properties\");\n }\n output.push(canonicalValue(descriptor.value, state, depth + 1));\n }\n return output;\n }\n if (typeof value === \"object\") {\n if (Object.getPrototypeOf(value) !== Object.prototype)\n throw new Error(\"Artifact command payload must be plain JSON\");\n const record = value as Record<string, unknown>;\n const keys = Reflect.ownKeys(record);\n if (keys.some((key) => typeof key !== \"string\")) {\n throw new Error(\"Artifact command payload cannot contain symbol properties\");\n }\n return Object.fromEntries(\n (keys as string[]).sort().map((key) => {\n const descriptor = Object.getOwnPropertyDescriptor(record, key);\n if (!descriptor || !(\"value\" in descriptor) || !descriptor.enumerable) {\n throw new Error(\"Artifact command payload properties must be enumerable data properties\");\n }\n return [key, canonicalValue(descriptor.value, state, depth + 1)];\n }),\n );\n }\n throw new Error(`Artifact command payload contains unsupported ${typeof value}`);\n}\n\nfunction parseCanonicalJson(value: string): unknown {\n const parsed: unknown = JSON.parse(value);\n if (canonicalJson(parsed) !== value)\n throw new Error(\"Artifact command payload is not canonical JSON\");\n return parsed;\n}\n\nclass BinaryWriter {\n private buffer = new Uint8Array(1_024);\n private length = 0;\n constructor(private readonly maximum: number) {}\n\n byte(value: number): void {\n this.ensure(1);\n this.buffer[this.length++] = value;\n }\n\n bytes(value: Uint8Array): void {\n this.ensure(value.byteLength);\n this.buffer.set(value, this.length);\n this.length += value.byteLength;\n }\n\n varint(value: number): void {\n assertSafeInteger(value, \"varint\");\n let remaining = BigInt(value);\n do {\n let byte = Number(remaining & 0x7fn);\n remaining >>= 7n;\n if (remaining > 0n) byte |= 0x80;\n this.byte(byte);\n } while (remaining > 0n);\n }\n\n string(value: string): void {\n const bytes = textEncoder.encode(value);\n if (bytes.byteLength > ARTIFACT_OPERATION_MAX_STRING_BYTES) {\n throw new ArtifactLimitError(\n \"operation string bytes\",\n bytes.byteLength,\n ARTIFACT_OPERATION_MAX_STRING_BYTES,\n );\n }\n this.varint(bytes.byteLength);\n this.bytes(bytes);\n }\n\n finish(): Uint8Array {\n return this.buffer.slice(0, this.length);\n }\n\n private ensure(extra: number): void {\n const required = this.length + extra;\n if (required > this.maximum)\n throw new ArtifactLimitError(\"operation bytes\", required, this.maximum);\n if (required <= this.buffer.byteLength) return;\n let nextSize = this.buffer.byteLength;\n while (nextSize < required) nextSize = Math.min(this.maximum, nextSize * 2);\n const next = new Uint8Array(nextSize);\n next.set(this.buffer);\n this.buffer = next;\n }\n}\n\nclass BinaryReader {\n private offset = 0;\n constructor(private readonly input: Uint8Array) {}\n\n byte(): number {\n const value = this.input[this.offset];\n if (value === undefined) throw new Error(\"Truncated artifact operation\");\n this.offset += 1;\n return value;\n }\n\n bytes(length: number): Uint8Array {\n if (\n !Number.isSafeInteger(length) ||\n length < 0 ||\n this.offset + length > this.input.byteLength\n ) {\n throw new Error(\"Truncated artifact operation bytes\");\n }\n const value = this.input.subarray(this.offset, this.offset + length);\n this.offset += length;\n return value;\n }\n\n varint(): number {\n let value = 0n;\n let shift = 0n;\n for (let index = 0; index < 10; index += 1) {\n const byte = this.byte();\n value |= BigInt(byte & 0x7f) << shift;\n if ((byte & 0x80) === 0) {\n if (index > 0 && byte === 0) {\n throw new Error(\"Artifact operation varint is non-canonical\");\n }\n const number = Number(value);\n if (!Number.isSafeInteger(number))\n throw new Error(\"Artifact operation varint exceeds safe integer\");\n return number;\n }\n shift += 7n;\n }\n throw new Error(\"Invalid artifact operation varint\");\n }\n\n string(): string {\n const length = this.varint();\n if (length > ARTIFACT_OPERATION_MAX_STRING_BYTES) {\n throw new ArtifactLimitError(\n \"operation string bytes\",\n length,\n ARTIFACT_OPERATION_MAX_STRING_BYTES,\n );\n }\n return textDecoder.decode(this.bytes(length));\n }\n\n done(): void {\n if (this.offset !== this.input.byteLength)\n throw new Error(\"Artifact operation has trailing bytes\");\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/kernel.ts"],"sourcesContent":["import { UnsupportedArtifactFeatureError } from \"./errors\";\nimport { FileBlob } from \"./file-blob\";\n\nexport type ArtifactModality = \"spreadsheet\" | \"presentation\" | \"document\";\nexport type ArtifactKernelKind = \"native\" | \"wasm\" | \"reference\";\nexport type ArtifactObjectId = string & { readonly __artifactObjectId: unique symbol };\n\nexport type ArtifactKernelCapabilities = {\n modality: ArtifactModality;\n modelSchemaVersion: number;\n operationSchemaVersion: number;\n inspect: boolean;\n calculate: boolean;\n layout: boolean;\n renderFormats: readonly string[];\n importFormats: readonly string[];\n exportFormats: readonly string[];\n collaboration: boolean;\n};\n\nexport type ArtifactCausalVector = Readonly<Record<string, number>>;\n\nexport type ArtifactCommand = {\n code: string;\n targetId?: string;\n precondition?: {\n objectRevision?: number;\n exists?: boolean;\n };\n payload?: unknown;\n};\n\nexport type ArtifactCommandBatch = {\n schemaVersion: 1;\n artifactId: string;\n modality: ArtifactModality;\n transactionId: string;\n actorId: string;\n baseSequence: number;\n baseVector: ArtifactCausalVector;\n commands: readonly ArtifactCommand[];\n};\n\nexport type ArtifactApplyResult = {\n sequence: number;\n vector: ArtifactCausalVector;\n changedObjectIds: readonly string[];\n inverse?: ArtifactCommandBatch;\n};\n\nexport type ArtifactKernelOpenInput = {\n modality: ArtifactModality;\n snapshot?: Uint8Array;\n operationTail?: readonly Uint8Array[];\n};\n\nexport type ArtifactKernelDocument = {\n readonly modality: ArtifactModality;\n readonly revision: number;\n apply(batch: ArtifactCommandBatch): ArtifactApplyResult;\n snapshot(): Uint8Array;\n inspect(options: Record<string, unknown>): Promise<readonly Record<string, unknown>[]>;\n render(options: Record<string, unknown>): Promise<FileBlob>;\n materialize(format: string, options?: Record<string, unknown>): Promise<FileBlob>;\n close(): void;\n};\n\nexport interface ArtifactKernel {\n readonly kind: ArtifactKernelKind;\n readonly version: string;\n capabilities(modality: ArtifactModality): ArtifactKernelCapabilities;\n open(input: ArtifactKernelOpenInput): Promise<ArtifactKernelDocument>;\n}\n\nexport type ArtifactKernelSelection = {\n kernel: ArtifactKernel;\n capabilities: ArtifactKernelCapabilities;\n};\n\n/**\n * Kernel registry used by the universal facade. Hosts register loaders without\n * making application code depend on platform packages. Production selection is\n * deliberately fail-closed: Node/Bun selects only native. Browser editing goes\n * through the SDK's dedicated Worker/WASM session, and the reference backend is\n * selected only when a development/conformance caller explicitly asks for it.\n */\nexport class ArtifactKernelRegistry {\n private readonly kernels = new Map<ArtifactKernelKind, ArtifactKernel>();\n\n register(kernel: ArtifactKernel): () => void {\n if (this.kernels.has(kernel.kind))\n throw new Error(`Artifact ${kernel.kind} kernel already registered`);\n this.kernels.set(kernel.kind, kernel);\n return () => {\n if (this.kernels.get(kernel.kind) === kernel) this.kernels.delete(kernel.kind);\n };\n }\n\n select(\n modality: ArtifactModality,\n required: Partial<\n Pick<ArtifactKernelCapabilities, \"calculate\" | \"layout\" | \"collaboration\">\n > = {},\n order: readonly ArtifactKernelKind[] = defaultKernelOrder(),\n ): ArtifactKernelSelection {\n for (const kind of order) {\n const kernel = this.kernels.get(kind);\n if (!kernel) continue;\n const capabilities = kernel.capabilities(modality);\n if (required.calculate === true && !capabilities.calculate) continue;\n if (required.layout === true && !capabilities.layout) continue;\n if (required.collaboration === true && !capabilities.collaboration) continue;\n return { kernel, capabilities };\n }\n throw new UnsupportedArtifactFeatureError(\n modality,\n \"required kernel capabilities\",\n \"available\",\n );\n }\n\n available(): readonly ArtifactKernel[] {\n return [...this.kernels.values()];\n }\n}\n\nfunction defaultKernelOrder(): readonly ArtifactKernelKind[] {\n return typeof window === \"undefined\" ? [\"native\"] : [];\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsFO,IAAM,yBAAN,MAA6B;AAAA,EACjB,UAAU,oBAAI,IAAwC;AAAA,EAEvE,SAAS,QAAoC;AAC3C,QAAI,KAAK,QAAQ,IAAI,OAAO,IAAI;AAC9B,YAAM,IAAI,MAAM,YAAY,OAAO,IAAI,4BAA4B;AACrE,SAAK,QAAQ,IAAI,OAAO,MAAM,MAAM;AACpC,WAAO,MAAM;AACX,UAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,MAAM,OAAQ,MAAK,QAAQ,OAAO,OAAO,IAAI;AAAA,IAC/E;AAAA,EACF;AAAA,EAEA,OACE,UACA,WAEI,CAAC,GACL,QAAuC,mBAAmB,GACjC;AACzB,eAAW,QAAQ,OAAO;AACxB,YAAM,SAAS,KAAK,QAAQ,IAAI,IAAI;AACpC,UAAI,CAAC,OAAQ;AACb,YAAM,eAAe,OAAO,aAAa,QAAQ;AACjD,UAAI,SAAS,cAAc,QAAQ,CAAC,aAAa,UAAW;AAC5D,UAAI,SAAS,WAAW,QAAQ,CAAC,aAAa,OAAQ;AACtD,UAAI,SAAS,kBAAkB,QAAQ,CAAC,aAAa,cAAe;AACpE,aAAO,EAAE,QAAQ,aAAa;AAAA,IAChC;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,YAAuC;AACrC,WAAO,CAAC,GAAG,KAAK,QAAQ,OAAO,CAAC;AAAA,EAClC;AACF;AAEA,SAAS,qBAAoD;AAC3D,SAAO,OAAO,WAAW,cAAc,CAAC,QAAQ,IAAI,CAAC;AACvD;","names":[]}
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runConfiguredArtifactRuntimeCli
4
- } from "./chunk-U5G2BKM2.js";
5
- import "./chunk-ZCJYRJGB.js";
4
+ } from "./chunk-LMLPFF3S.js";
5
+ import "./chunk-4XJE7NRA.js";
6
6
  import {
7
7
  ArtifactRuntimeError
8
- } from "./chunk-N2IHNWBS.js";
8
+ } from "./chunk-4YYYUZQH.js";
9
9
  import "./chunk-VUNV25KB.js";
10
10
 
11
11
  // src/runtime-cli-entry.ts
@@ -9,8 +9,8 @@ import {
9
9
  resolveCurrentArtifactRuntimeTarget,
10
10
  resolveLinuxLibcFromRuntimeEvidence,
11
11
  runArtifactRuntimeCli
12
- } from "./chunk-ZCJYRJGB.js";
13
- import "./chunk-N2IHNWBS.js";
12
+ } from "./chunk-4XJE7NRA.js";
13
+ import "./chunk-4YYYUZQH.js";
14
14
  import "./chunk-VUNV25KB.js";
15
15
  export {
16
16
  canonicalArtifactRuntimeInstallationManifestBytes,
@@ -10,9 +10,9 @@ import {
10
10
  locateVerifiedDevelopmentArtifactRuntime,
11
11
  runConfiguredArtifactRuntimeCli,
12
12
  validateDevelopmentArtifactRuntimeManifest
13
- } from "./chunk-U5G2BKM2.js";
14
- import "./chunk-ZCJYRJGB.js";
15
- import "./chunk-N2IHNWBS.js";
13
+ } from "./chunk-LMLPFF3S.js";
14
+ import "./chunk-4XJE7NRA.js";
15
+ import "./chunk-4YYYUZQH.js";
16
16
  import "./chunk-VUNV25KB.js";
17
17
  export {
18
18
  DEVELOPMENT_ARTIFACT_RUNTIME_ENVIRONMENT,
@@ -1,7 +1,7 @@
1
1
  import { type ArtifactRuntimeTarget } from "./runtime.js";
2
2
  export type ArtifactKernelBuildReceipt = Readonly<{
3
- schemaVersion: 1;
4
- producer: "opengeni-artifact-kernel-smoke-v1";
3
+ schemaVersion: 2;
4
+ producer: "opengeni-artifact-kernel-smoke-v2";
5
5
  target: ArtifactRuntimeTarget;
6
6
  kind: "native" | "wasm";
7
7
  buildIdentity: string;
@@ -9,6 +9,7 @@ export type ArtifactKernelBuildReceipt = Readonly<{
9
9
  bytes: number;
10
10
  sha256: `sha256:${string}`;
11
11
  }>;
12
+ spreadsheetFormulaProjectionCorpusSha256: `sha256:${string}`;
12
13
  runtimeFiles: readonly Readonly<{
13
14
  path: string;
14
15
  bytes: number;
package/dist/runtime.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { COMMITTED_TRANSACTION_PROTOCOL_VERSION, SPREADSHEET_ARTIFACT_COMMAND_VERSION, SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION, SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION, SPREADSHEET_KERNEL_COMMAND_VERSION, SPREADSHEET_KERNEL_SNAPSHOT_VERSION } from "@opengeni/contracts/editable-artifact-versions";
1
2
  /**
2
3
  * Exact artifact-kernel distribution and runtime boundary.
3
4
  *
@@ -159,13 +160,14 @@ export type ArtifactRuntimeKernelDependencies = Pick<ArtifactRuntimeDependencies
159
160
  export type ArtifactKernelCapabilities = {
160
161
  readonly abiVersion: 1;
161
162
  readonly buildIdentityFormat: "utf8";
162
- readonly commandSchemaVersion: 1;
163
- readonly spreadsheetCommandVersion: 1;
164
- readonly kernelSnapshotVersion: 1;
163
+ readonly commandSchemaVersion: typeof SPREADSHEET_KERNEL_COMMAND_VERSION;
164
+ readonly spreadsheetCommandVersion: typeof SPREADSHEET_ARTIFACT_COMMAND_VERSION;
165
+ readonly spreadsheetModelSchemaVersion: typeof SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION;
166
+ readonly kernelSnapshotVersion: typeof SPREADSHEET_KERNEL_SNAPSHOT_VERSION;
165
167
  readonly receiptSchemaVersion: 1;
166
- readonly collaborationSnapshotVersion: 1;
168
+ readonly collaborationSnapshotVersion: typeof SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION;
167
169
  readonly editableArtifactIntentVersion: 1;
168
- readonly committedTransactionVersion: 1;
170
+ readonly committedTransactionVersion: typeof COMMITTED_TRANSACTION_PROTOCOL_VERSION;
169
171
  readonly queryVersion: 1;
170
172
  readonly queryResponseVersion: 1;
171
173
  readonly collaboration: true;
@@ -226,7 +228,7 @@ export type ArtifactKernelPackageModule = {
226
228
  readonly loadArtifactKernelBinding: () => unknown | Promise<unknown>;
227
229
  };
228
230
  export type ArtifactRuntimeModuleImporter = (specifier: string) => unknown | Promise<unknown>;
229
- export type ArtifactRuntimeErrorCode = "ARTIFACT_RUNTIME_INCOMPATIBLE" | "ARTIFACT_RUNTIME_INTEGRITY" | "ARTIFACT_RUNTIME_MANIFEST_INVALID" | "ARTIFACT_RUNTIME_UNAVAILABLE" | "ARTIFACT_RUNTIME_UNSUPPORTED_TARGET";
231
+ export type ArtifactRuntimeErrorCode = "ARTIFACT_RUNTIME_INCOMPATIBLE" | "ARTIFACT_RUNTIME_INTEGRITY" | "ARTIFACT_RUNTIME_MANIFEST_INVALID" | "ARTIFACT_RUNTIME_PROJECTION_PARITY" | "ARTIFACT_RUNTIME_UNAVAILABLE" | "ARTIFACT_RUNTIME_UNSUPPORTED_TARGET";
230
232
  export declare class ArtifactRuntimeError extends Error {
231
233
  readonly code: ArtifactRuntimeErrorCode;
232
234
  constructor(code: ArtifactRuntimeErrorCode, message: string, options?: ErrorOptions);
package/dist/runtime.js CHANGED
@@ -17,7 +17,7 @@ import {
17
17
  validateArtifactKernelPackageManifest,
18
18
  validateArtifactRuntimeInstallationManifest,
19
19
  validateCompleteArtifactRuntimeReleaseManifest
20
- } from "./chunk-N2IHNWBS.js";
20
+ } from "./chunk-4YYYUZQH.js";
21
21
  import "./chunk-VUNV25KB.js";
22
22
  export {
23
23
  ARTIFACT_RUNTIME_ENVIRONMENT,
@@ -1,24 +1,31 @@
1
+ import { COMMITTED_TRANSACTION_PROTOCOL_VERSION, DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION, DOCUMENT_ARTIFACT_SNAPSHOT_VERSION, PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION, PRESENTATION_ARTIFACT_SNAPSHOT_VERSION, SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION, SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION } from "@opengeni/contracts/editable-artifact-versions";
1
2
  import type { Document } from "./document.js";
2
3
  import type { Presentation } from "./presentation.js";
3
4
  import type { Workbook } from "./spreadsheet.js";
4
5
  type ArtifactSnapshotCommon = Readonly<{
5
6
  schemaVersion: 1;
6
- modality: "spreadsheet" | "document" | "presentation";
7
7
  runtimeTarget: string;
8
8
  kernelVersion: string;
9
- modelSchemaVersion: 1;
10
- snapshotVersion: 1;
11
9
  stateHash: string;
12
10
  snapshotBytes: Uint8Array;
13
11
  }>;
14
12
  /** Exact native-canonical state at one durable artifact boundary. */
15
13
  export type ArtifactSnapshot = (ArtifactSnapshotCommon & Readonly<{
16
14
  modality: "spreadsheet";
15
+ modelSchemaVersion: typeof SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION;
16
+ snapshotVersion: typeof SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION;
17
17
  coveredCausalFrontierBytes: Uint8Array;
18
- operationProtocolVersion: 1;
19
- crdtStateVersion: 1;
18
+ operationProtocolVersion: typeof COMMITTED_TRANSACTION_PROTOCOL_VERSION;
19
+ crdtStateVersion: typeof SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION;
20
20
  }>) | (ArtifactSnapshotCommon & Readonly<{
21
- modality: "document" | "presentation";
21
+ modality: "document";
22
+ modelSchemaVersion: typeof DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION;
23
+ snapshotVersion: typeof DOCUMENT_ARTIFACT_SNAPSHOT_VERSION;
24
+ nativeRevision: number;
25
+ }>) | (ArtifactSnapshotCommon & Readonly<{
26
+ modality: "presentation";
27
+ modelSchemaVersion: typeof PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION;
28
+ snapshotVersion: typeof PRESENTATION_ARTIFACT_SNAPSHOT_VERSION;
22
29
  nativeRevision: number;
23
30
  }>);
24
31
  /** Capture one immutable native snapshot from an open artifact object. */