@opengeni/artifact-tool 0.2.10 → 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
@@ -6,7 +6,7 @@ import {
6
6
  resolveArtifactRuntimeTarget,
7
7
  validateArtifactRuntimeInstallationManifest,
8
8
  validateCompleteArtifactRuntimeReleaseManifest
9
- } from "./chunk-N2IHNWBS.js";
9
+ } from "./chunk-4YYYUZQH.js";
10
10
 
11
11
  // src/runtime-cli.ts
12
12
  import { createHash } from "crypto";
@@ -486,4 +486,4 @@ export {
486
486
  resolveLinuxLibcFromRuntimeEvidence,
487
487
  probeVerifiedArtifactSkillFacade
488
488
  };
489
- //# sourceMappingURL=chunk-ZCJYRJGB.js.map
489
+ //# sourceMappingURL=chunk-4XJE7NRA.js.map
@@ -1,4 +1,12 @@
1
1
  // src/runtime.ts
2
+ import {
3
+ COMMITTED_TRANSACTION_PROTOCOL_VERSION,
4
+ SPREADSHEET_ARTIFACT_COMMAND_VERSION,
5
+ SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,
6
+ SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION,
7
+ SPREADSHEET_KERNEL_COMMAND_VERSION,
8
+ SPREADSHEET_KERNEL_SNAPSHOT_VERSION
9
+ } from "@opengeni/contracts/editable-artifact-versions";
2
10
  var ARTIFACT_RUNTIME_ENVIRONMENT = {
3
11
  manifest: "OPENGENI_ARTIFACT_RUNTIME_MANIFEST",
4
12
  toolEntrypoint: "OPENGENI_ARTIFACT_TOOL_ENTRY"
@@ -776,13 +784,14 @@ function parseCapabilities(value) {
776
784
  const required = {
777
785
  abiVersion: 1,
778
786
  buildIdentityFormat: "utf8",
779
- commandSchemaVersion: 1,
780
- spreadsheetCommandVersion: 1,
781
- kernelSnapshotVersion: 1,
787
+ commandSchemaVersion: SPREADSHEET_KERNEL_COMMAND_VERSION,
788
+ spreadsheetCommandVersion: SPREADSHEET_ARTIFACT_COMMAND_VERSION,
789
+ spreadsheetModelSchemaVersion: SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,
790
+ kernelSnapshotVersion: SPREADSHEET_KERNEL_SNAPSHOT_VERSION,
782
791
  receiptSchemaVersion: 1,
783
- collaborationSnapshotVersion: 1,
792
+ collaborationSnapshotVersion: SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION,
784
793
  editableArtifactIntentVersion: 1,
785
- committedTransactionVersion: 1,
794
+ committedTransactionVersion: COMMITTED_TRANSACTION_PROTOCOL_VERSION,
786
795
  queryVersion: 1,
787
796
  queryResponseVersion: 1,
788
797
  collaboration: true,
@@ -999,4 +1008,4 @@ export {
999
1008
  ArtifactTextLayoutSession,
1000
1009
  encodeArtifactReplicaNamespace
1001
1010
  };
1002
- //# sourceMappingURL=chunk-N2IHNWBS.js.map
1011
+ //# sourceMappingURL=chunk-4YYYUZQH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/runtime.ts"],"sourcesContent":["import {\n COMMITTED_TRANSACTION_PROTOCOL_VERSION,\n SPREADSHEET_ARTIFACT_COMMAND_VERSION,\n SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,\n SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION,\n SPREADSHEET_KERNEL_COMMAND_VERSION,\n SPREADSHEET_KERNEL_SNAPSHOT_VERSION,\n} from \"@opengeni/contracts/editable-artifact-versions\";\n\n/**\n * Exact artifact-kernel distribution and runtime boundary.\n *\n * This module never downloads a binary, installs a package, guesses `latest`,\n * or falls back to the TypeScript reference implementation. A host supplies\n * one exact, locally installed target package and this boundary verifies its\n * manifest and byte ABI before exposing a kernel session.\n */\n\nexport const ARTIFACT_RUNTIME_ENVIRONMENT = {\n manifest: \"OPENGENI_ARTIFACT_RUNTIME_MANIFEST\",\n toolEntrypoint: \"OPENGENI_ARTIFACT_TOOL_ENTRY\",\n} as const;\n\nexport const ARTIFACT_RUNTIME_TARGETS = [\n \"darwin-x64\",\n \"darwin-arm64\",\n \"linux-x64-gnu\",\n \"linux-arm64-gnu\",\n \"linux-x64-musl\",\n \"linux-arm64-musl\",\n \"win32-x64-msvc\",\n \"wasm-web\",\n] as const;\n\nexport type ArtifactRuntimeTarget = (typeof ARTIFACT_RUNTIME_TARGETS)[number];\nexport type NativeArtifactRuntimeTarget = Exclude<ArtifactRuntimeTarget, \"wasm-web\">;\nexport type ArtifactRuntimeKind = \"native\" | \"wasm\";\nexport type ArtifactRuntimeLibc = \"gnu\" | \"musl\";\n\nexport type ArtifactRuntimeTargetDescriptor = {\n readonly target: ArtifactRuntimeTarget;\n readonly kind: ArtifactRuntimeKind;\n readonly packageName: ArtifactKernelPackageName;\n readonly platform: \"darwin\" | \"linux\" | \"win32\" | \"browser\";\n readonly arch: \"x64\" | \"arm64\" | \"wasm32\";\n readonly libc?: ArtifactRuntimeLibc;\n};\n\nexport const ARTIFACT_RUNTIME_MATRIX = [\n descriptor(\"darwin-x64\", \"native\", \"darwin\", \"x64\"),\n descriptor(\"darwin-arm64\", \"native\", \"darwin\", \"arm64\"),\n descriptor(\"linux-x64-gnu\", \"native\", \"linux\", \"x64\", \"gnu\"),\n descriptor(\"linux-arm64-gnu\", \"native\", \"linux\", \"arm64\", \"gnu\"),\n descriptor(\"linux-x64-musl\", \"native\", \"linux\", \"x64\", \"musl\"),\n descriptor(\"linux-arm64-musl\", \"native\", \"linux\", \"arm64\", \"musl\"),\n descriptor(\"win32-x64-msvc\", \"native\", \"win32\", \"x64\"),\n descriptor(\"wasm-web\", \"wasm\", \"browser\", \"wasm32\"),\n] as const satisfies readonly ArtifactRuntimeTargetDescriptor[];\n\nexport type ArtifactKernelPackageName = `@opengeni/artifact-kernel-${ArtifactRuntimeTarget}`;\n\nexport type ArtifactKernelPackageManifest = {\n readonly schemaVersion: 1;\n readonly target: ArtifactRuntimeTarget;\n readonly kind: ArtifactRuntimeKind;\n readonly packageName: ArtifactKernelPackageName;\n readonly packageVersion: string;\n readonly artifactToolVersion: string;\n readonly buildIdentity: string;\n readonly entrypoint: {\n readonly path: string;\n readonly bytes: number;\n readonly sha256: `sha256:${string}`;\n };\n readonly asset: {\n readonly path: string;\n readonly bytes: number;\n readonly sha256: `sha256:${string}`;\n };\n /** Additional executable runtime files (for example wasm-bindgen glue). */\n readonly supportFiles: readonly {\n readonly path: string;\n readonly bytes: number;\n readonly sha256: `sha256:${string}`;\n }[];\n};\n\n/** Self-contained identity embedded in executable package code (no self-hash). */\nexport type ArtifactKernelPackageIdentity = Pick<\n ArtifactKernelPackageManifest,\n | \"schemaVersion\"\n | \"target\"\n | \"kind\"\n | \"packageName\"\n | \"packageVersion\"\n | \"artifactToolVersion\"\n | \"buildIdentity\"\n>;\n\nexport type ArtifactRuntimeInstallationManifest = {\n readonly schemaVersion: 1;\n readonly target: ArtifactRuntimeTarget;\n readonly releaseManifest: {\n readonly path: string;\n readonly bytes: number;\n readonly sha256: `sha256:${string}`;\n };\n readonly artifactTool: {\n readonly packageName: \"@opengeni/artifact-tool\";\n readonly packageVersion: string;\n readonly integrity: `sha512-${string}`;\n };\n /** Exact packed package whose SHA-512 is `artifactTool.integrity`. */\n readonly artifactToolArchive?: {\n readonly path: string;\n readonly bytes: number;\n readonly sha256: `sha256:${string}`;\n };\n readonly skillFacadeEntrypoint: {\n readonly path: string;\n readonly bytes: number;\n readonly sha256: `sha256:${string}`;\n };\n /**\n * Optional, installation-local files dynamically loaded by the facade.\n *\n * A plain server installation can omit this when its package manager owns\n * those dependencies. A portable sandbox installation lists every vendored\n * runtime file here so locator/doctor verifies the complete executable\n * closure before evaluating the facade.\n */\n readonly skillFacadeSupportFiles?: readonly {\n readonly path: string;\n readonly bytes: number;\n readonly sha256: `sha256:${string}`;\n }[];\n readonly kernelPackageRoot: string;\n readonly kernel: ArtifactKernelPackageManifest;\n};\n\nexport type ArtifactRuntimeReleaseManifest = {\n readonly schemaVersion: 1;\n readonly artifactTool: {\n readonly packageName: \"@opengeni/artifact-tool\";\n readonly packageVersion: string;\n readonly integrity: `sha512-${string}`;\n };\n readonly targets: readonly ArtifactKernelPackageManifest[];\n};\n\nexport type ArtifactRuntimeDependencies = {\n readonly target: ArtifactRuntimeTargetDescriptor;\n readonly manifestUrl: URL;\n readonly releaseManifestUrl: URL;\n readonly artifactToolArchiveUrl?: URL;\n readonly skillFacadeEntrypoint: URL;\n readonly skillFacadeSupportFiles: readonly URL[];\n readonly kernelEntrypoint: URL;\n readonly kernelAsset: URL;\n readonly kernelSupportFiles: readonly URL[];\n readonly manifest: ArtifactRuntimeInstallationManifest;\n};\n\nexport type ArtifactRuntimeKernelDependencies = Pick<\n ArtifactRuntimeDependencies,\n \"target\" | \"kernelEntrypoint\"\n> &\n Readonly<{\n manifest: Pick<ArtifactRuntimeInstallationManifest, \"kernel\">;\n }>;\n\nexport type ArtifactKernelCapabilities = {\n readonly abiVersion: 1;\n readonly buildIdentityFormat: \"utf8\";\n readonly commandSchemaVersion: typeof SPREADSHEET_KERNEL_COMMAND_VERSION;\n readonly spreadsheetCommandVersion: typeof SPREADSHEET_ARTIFACT_COMMAND_VERSION;\n readonly spreadsheetModelSchemaVersion: typeof SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION;\n readonly kernelSnapshotVersion: typeof SPREADSHEET_KERNEL_SNAPSHOT_VERSION;\n readonly receiptSchemaVersion: 1;\n readonly collaborationSnapshotVersion: typeof SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION;\n readonly editableArtifactIntentVersion: 1;\n readonly committedTransactionVersion: typeof COMMITTED_TRANSACTION_PROTOCOL_VERSION;\n readonly queryVersion: 1;\n readonly queryResponseVersion: 1;\n readonly collaboration: true;\n readonly document: true;\n readonly documentCommandVersion: 1;\n readonly documentQueryResponseVersion: 1;\n readonly documentQueryVersion: 1;\n readonly documentReceiptVersion: 1;\n readonly documentSnapshotVersion: 1;\n readonly documentStatefulSessions: true;\n readonly presentation: true;\n readonly presentationCommandVersion: 1;\n readonly presentationQueryResponseVersion: 1;\n readonly presentationQueryVersion: 1;\n readonly presentationSnapshotVersion: 1;\n readonly presentationStatefulSessions: true;\n readonly textLayout: true;\n readonly textLayoutFontBundleVersion: 1;\n readonly textLayoutRequestVersion: 1;\n readonly textLayoutResponseVersion: 1;\n readonly textLayoutStatefulSessions: true;\n readonly retainedRenderPatchVersion: 1;\n readonly retainedRenderTileVersion: 1;\n readonly workbookMetadataQueries: true;\n readonly canonicalStateHash: \"sha256:canonical-snapshot\";\n readonly maxCellsPerBatch: number;\n readonly maxCommandBytes: number;\n readonly maxCommands: number;\n readonly maxCommittedTransactionBytes: number;\n readonly maxDocumentCommandBytes: number;\n readonly maxDocumentCommands: number;\n readonly maxDocumentQueryBytes: number;\n readonly maxDocumentQueryResponseBytes: number;\n readonly maxDocumentSnapshotBytes: number;\n readonly maxIntentBytes: number;\n readonly maxMetadataScannedCells: number;\n readonly maxMetadataSheets: number;\n readonly maxPresentationCommandBytes: number;\n readonly maxPresentationQueryBytes: number;\n readonly maxPresentationResponseBytes: number;\n readonly maxPresentationSnapshotBytes: number;\n readonly maxQueryBytes: number;\n readonly maxQueryResponseBytes: number;\n readonly maxSnapshotBytes: number;\n readonly maxSpreadsheetCommandBytes: number;\n readonly maxTextLayoutFontBundleBytes: number;\n readonly maxTextLayoutRequestBytes: number;\n readonly maxTextLayoutResponseBytes: number;\n readonly maxViewportArea: number;\n readonly maxViewportCells: number;\n readonly safeRust: true;\n readonly sessionForks: true;\n readonly statefulSessions: true;\n readonly transport: \"bounded-uint8array\";\n};\n\nexport type ArtifactKernelPackageModule = {\n readonly artifactKernelPackageIdentity: unknown;\n readonly loadArtifactKernelBinding: () => unknown | Promise<unknown>;\n};\n\nexport type ArtifactRuntimeModuleImporter = (specifier: string) => unknown | Promise<unknown>;\n\nexport type ArtifactRuntimeErrorCode =\n | \"ARTIFACT_RUNTIME_INCOMPATIBLE\"\n | \"ARTIFACT_RUNTIME_INTEGRITY\"\n | \"ARTIFACT_RUNTIME_MANIFEST_INVALID\"\n | \"ARTIFACT_RUNTIME_PROJECTION_PARITY\"\n | \"ARTIFACT_RUNTIME_UNAVAILABLE\"\n | \"ARTIFACT_RUNTIME_UNSUPPORTED_TARGET\";\n\nexport class ArtifactRuntimeError extends Error {\n readonly code: ArtifactRuntimeErrorCode;\n\n constructor(code: ArtifactRuntimeErrorCode, message: string, options?: ErrorOptions) {\n super(`[${code}] ${message}`, options);\n this.name = \"ArtifactRuntimeError\";\n this.code = code;\n }\n}\n\nexport function resolveArtifactRuntimeTarget(input: {\n readonly platform: string;\n readonly arch: string;\n readonly libc?: ArtifactRuntimeLibc;\n}): ArtifactRuntimeTargetDescriptor {\n const match = ARTIFACT_RUNTIME_MATRIX.find(\n (entry) =>\n entry.platform === input.platform &&\n entry.arch === input.arch &&\n (entry.platform !== \"linux\" || entry.libc === input.libc),\n );\n if (match) return match;\n const libc = input.platform === \"linux\" ? `/${input.libc ?? \"unknown-libc\"}` : \"\";\n throw new ArtifactRuntimeError(\n \"ARTIFACT_RUNTIME_UNSUPPORTED_TARGET\",\n `No artifact kernel is published for ${input.platform}/${input.arch}${libc}`,\n );\n}\n\nexport function artifactRuntimeTarget(\n target: ArtifactRuntimeTarget,\n): ArtifactRuntimeTargetDescriptor {\n const match = ARTIFACT_RUNTIME_MATRIX.find((entry) => entry.target === target);\n if (!match) {\n throw new ArtifactRuntimeError(\n \"ARTIFACT_RUNTIME_UNSUPPORTED_TARGET\",\n `Unknown artifact runtime target: ${String(target)}`,\n );\n }\n return match;\n}\n\nexport function validateArtifactKernelPackageManifest(\n value: unknown,\n expectedTarget?: ArtifactRuntimeTarget,\n): ArtifactKernelPackageManifest {\n const record = exactRecord(\n value,\n [\n \"schemaVersion\",\n \"target\",\n \"kind\",\n \"packageName\",\n \"packageVersion\",\n \"artifactToolVersion\",\n \"buildIdentity\",\n \"entrypoint\",\n \"asset\",\n \"supportFiles\",\n ],\n \"kernel package manifest\",\n );\n if (record.schemaVersion !== 1) invalid(\"kernel package manifest schemaVersion must be 1\");\n if (!isArtifactRuntimeTarget(record.target)) invalid(\"kernel package manifest target is invalid\");\n const target = artifactRuntimeTarget(record.target);\n if (expectedTarget !== undefined && target.target !== expectedTarget) {\n invalid(`kernel package target ${target.target} does not match ${expectedTarget}`);\n }\n if (record.kind !== target.kind) invalid(\"kernel package kind does not match its target\");\n if (record.packageName !== target.packageName) {\n invalid(\"kernel package name does not match its target\");\n }\n const packageVersion = exactStableVersion(record.packageVersion, \"kernel package version\");\n const artifactToolVersion = exactStableVersion(\n record.artifactToolVersion,\n \"artifact-tool compatibility version\",\n );\n if (packageVersion !== artifactToolVersion) {\n invalid(\"kernel and artifact-tool versions must be identical\");\n }\n const buildIdentity = boundedString(record.buildIdentity, \"kernel build identity\", 512);\n const entrypoint = exactRecord(\n record.entrypoint,\n [\"path\", \"bytes\", \"sha256\"],\n \"kernel entrypoint\",\n );\n const asset = exactRecord(record.asset, [\"path\", \"bytes\", \"sha256\"], \"kernel asset\");\n if (!Array.isArray(record.supportFiles) || record.supportFiles.length > 32) {\n invalid(\"kernel supportFiles must be an array with at most 32 entries\");\n }\n const supportFiles = record.supportFiles.map((supportFile, index) => {\n const file = exactRecord(\n supportFile,\n [\"path\", \"bytes\", \"sha256\"],\n `kernel support file ${index}`,\n );\n return {\n path: safeRelativePath(file.path, `kernel support file ${index} path`),\n bytes: positiveSafeInteger(file.bytes, `kernel support file ${index} bytes`),\n sha256: sha256(file.sha256, `kernel support file ${index} sha256`),\n };\n });\n const runtimePaths = [entrypoint.path, asset.path, ...supportFiles.map((file) => file.path)];\n if (new Set(runtimePaths).size !== runtimePaths.length) {\n invalid(\"kernel runtime file paths must be unique\");\n }\n if (\n !supportFiles.every((file, index) => index === 0 || supportFiles[index - 1]!.path < file.path)\n ) {\n invalid(\"kernel supportFiles must be strictly sorted by path\");\n }\n return {\n schemaVersion: 1,\n target: target.target,\n kind: target.kind,\n packageName: target.packageName,\n packageVersion,\n artifactToolVersion,\n buildIdentity,\n entrypoint: {\n path: safeRelativePath(entrypoint.path, \"kernel entrypoint path\"),\n bytes: positiveSafeInteger(entrypoint.bytes, \"kernel entrypoint bytes\"),\n sha256: sha256(entrypoint.sha256, \"kernel entrypoint sha256\"),\n },\n asset: {\n path: safeRelativePath(asset.path, \"kernel asset path\"),\n bytes: positiveSafeInteger(asset.bytes, \"kernel asset bytes\"),\n sha256: sha256(asset.sha256, \"kernel asset sha256\"),\n },\n supportFiles,\n };\n}\n\nexport function validateArtifactKernelPackageIdentity(\n value: unknown,\n expectedTarget?: ArtifactRuntimeTarget,\n): ArtifactKernelPackageIdentity {\n const record = exactRecord(\n value,\n [\n \"schemaVersion\",\n \"target\",\n \"kind\",\n \"packageName\",\n \"packageVersion\",\n \"artifactToolVersion\",\n \"buildIdentity\",\n ],\n \"kernel package identity\",\n );\n if (record.schemaVersion !== 1) invalid(\"kernel package identity schemaVersion must be 1\");\n if (!isArtifactRuntimeTarget(record.target)) invalid(\"kernel package identity target is invalid\");\n const target = artifactRuntimeTarget(record.target);\n if (expectedTarget !== undefined && target.target !== expectedTarget) {\n invalid(`kernel package identity target ${target.target} does not match ${expectedTarget}`);\n }\n if (record.kind !== target.kind)\n invalid(\"kernel package identity kind does not match its target\");\n if (record.packageName !== target.packageName) {\n invalid(\"kernel package identity name does not match its target\");\n }\n const packageVersion = exactStableVersion(\n record.packageVersion,\n \"kernel package identity version\",\n );\n const artifactToolVersion = exactStableVersion(\n record.artifactToolVersion,\n \"kernel package identity artifact-tool version\",\n );\n if (packageVersion !== artifactToolVersion) {\n invalid(\"kernel package identity versions must be identical\");\n }\n return {\n schemaVersion: 1,\n target: target.target,\n kind: target.kind,\n packageName: target.packageName,\n packageVersion,\n artifactToolVersion,\n buildIdentity: boundedString(\n record.buildIdentity,\n \"kernel package identity build identity\",\n 512,\n ),\n };\n}\n\nexport function validateArtifactRuntimeInstallationManifest(\n value: unknown,\n expectedTarget?: ArtifactRuntimeTarget,\n): ArtifactRuntimeInstallationManifest {\n const candidate = requiredRecord(value, \"artifact runtime installation manifest\");\n const record = exactRecord(\n candidate,\n [\n \"schemaVersion\",\n \"target\",\n \"releaseManifest\",\n \"artifactTool\",\n ...(Object.hasOwn(candidate, \"artifactToolArchive\") ? [\"artifactToolArchive\"] : []),\n \"skillFacadeEntrypoint\",\n ...(Object.hasOwn(candidate, \"skillFacadeSupportFiles\") ? [\"skillFacadeSupportFiles\"] : []),\n \"kernelPackageRoot\",\n \"kernel\",\n ],\n \"artifact runtime installation manifest\",\n );\n if (record.schemaVersion !== 1) invalid(\"installation manifest schemaVersion must be 1\");\n if (!isArtifactRuntimeTarget(record.target)) invalid(\"installation manifest target is invalid\");\n if (expectedTarget !== undefined && record.target !== expectedTarget) {\n invalid(`installation target ${record.target} does not match ${expectedTarget}`);\n }\n const releaseManifest = exactRecord(\n record.releaseManifest,\n [\"path\", \"bytes\", \"sha256\"],\n \"release manifest file\",\n );\n const artifactTool = exactRecord(\n record.artifactTool,\n [\"packageName\", \"packageVersion\", \"integrity\"],\n \"artifact-tool installation\",\n );\n if (artifactTool.packageName !== \"@opengeni/artifact-tool\") {\n invalid(\"artifact-tool package name is invalid\");\n }\n const packageVersion = exactStableVersion(artifactTool.packageVersion, \"artifact-tool version\");\n const integrity = sha512Integrity(artifactTool.integrity, \"artifact-tool integrity\");\n const artifactToolArchive = Object.hasOwn(candidate, \"artifactToolArchive\")\n ? exactRecord(record.artifactToolArchive, [\"path\", \"bytes\", \"sha256\"], \"artifact-tool archive\")\n : undefined;\n const skillFacadeEntrypoint = exactRecord(\n record.skillFacadeEntrypoint,\n [\"path\", \"bytes\", \"sha256\"],\n \"skill facade entrypoint\",\n );\n const rawSkillFacadeSupportFiles = record.skillFacadeSupportFiles ?? [];\n if (!Array.isArray(rawSkillFacadeSupportFiles) || rawSkillFacadeSupportFiles.length > 256) {\n invalid(\"skill facade supportFiles must be an array with at most 256 entries\");\n }\n const skillFacadeSupportFiles = rawSkillFacadeSupportFiles.map((supportFile, index) => {\n const file = exactRecord(\n supportFile,\n [\"path\", \"bytes\", \"sha256\"],\n `skill facade support file ${index}`,\n );\n return {\n path: safeRelativePath(file.path, `skill facade support file ${index} path`),\n bytes: positiveSafeInteger(file.bytes, `skill facade support file ${index} bytes`),\n sha256: sha256(file.sha256, `skill facade support file ${index} sha256`),\n };\n });\n if (\n !skillFacadeSupportFiles.every(\n (file, index) => index === 0 || skillFacadeSupportFiles[index - 1]!.path < file.path,\n )\n ) {\n invalid(\"skill facade supportFiles must be strictly sorted by path\");\n }\n const facadeRuntimePaths = [\n ...(artifactToolArchive\n ? [safeRelativePath(artifactToolArchive.path, \"artifact-tool archive path\")]\n : []),\n safeRelativePath(releaseManifest.path, \"release manifest path\"),\n safeRelativePath(skillFacadeEntrypoint.path, \"skill facade entrypoint path\"),\n ...skillFacadeSupportFiles.map((file) => file.path),\n ];\n const skillFacadeSupportBytes = skillFacadeSupportFiles.reduce(\n (total, file) => total + file.bytes,\n 0,\n );\n if (\n !Number.isSafeInteger(skillFacadeSupportBytes) ||\n skillFacadeSupportBytes > 256 * 1024 * 1024\n ) {\n invalid(\"skill facade supportFiles exceed the 256 MiB installation limit\");\n }\n const kernel = validateArtifactKernelPackageManifest(record.kernel, record.target);\n if (kernel.artifactToolVersion !== packageVersion) {\n invalid(\"installed artifact-tool and kernel versions must be identical\");\n }\n const kernelPackageRoot = safeRelativePath(record.kernelPackageRoot, \"kernel package root\");\n const installationFilePaths = [\n ...facadeRuntimePaths,\n `${kernelPackageRoot}/${kernel.entrypoint.path}`,\n `${kernelPackageRoot}/${kernel.asset.path}`,\n ...kernel.supportFiles.map((file) => `${kernelPackageRoot}/${file.path}`),\n ].sort();\n if (\n installationFilePaths.some(\n (path, index) =>\n index > 0 &&\n (path === installationFilePaths[index - 1] ||\n path.startsWith(`${installationFilePaths[index - 1]}/`)),\n )\n ) {\n invalid(\"installation runtime file paths must be collision-free\");\n }\n return {\n schemaVersion: 1,\n target: record.target,\n releaseManifest: {\n path: safeRelativePath(releaseManifest.path, \"release manifest path\"),\n bytes: positiveSafeInteger(releaseManifest.bytes, \"release manifest bytes\"),\n sha256: sha256(releaseManifest.sha256, \"release manifest sha256\"),\n },\n artifactTool: {\n packageName: \"@opengeni/artifact-tool\",\n packageVersion,\n integrity,\n },\n ...(artifactToolArchive\n ? {\n artifactToolArchive: {\n path: safeRelativePath(artifactToolArchive.path, \"artifact-tool archive path\"),\n bytes: positiveSafeInteger(artifactToolArchive.bytes, \"artifact-tool archive bytes\"),\n sha256: sha256(artifactToolArchive.sha256, \"artifact-tool archive sha256\"),\n },\n }\n : {}),\n skillFacadeEntrypoint: {\n path: safeRelativePath(skillFacadeEntrypoint.path, \"skill facade entrypoint path\"),\n bytes: positiveSafeInteger(skillFacadeEntrypoint.bytes, \"skill facade entrypoint bytes\"),\n sha256: sha256(skillFacadeEntrypoint.sha256, \"skill facade entrypoint sha256\"),\n },\n ...(Object.hasOwn(candidate, \"skillFacadeSupportFiles\") ? { skillFacadeSupportFiles } : {}),\n kernelPackageRoot,\n kernel: {\n ...kernel,\n },\n };\n}\n\nexport function validateCompleteArtifactRuntimeReleaseManifest(\n value: unknown,\n): ArtifactRuntimeReleaseManifest {\n const record = exactRecord(\n value,\n [\"schemaVersion\", \"artifactTool\", \"targets\"],\n \"release manifest\",\n );\n if (record.schemaVersion !== 1) invalid(\"release manifest schemaVersion must be 1\");\n const artifactTool = exactRecord(\n record.artifactTool,\n [\"packageName\", \"packageVersion\", \"integrity\"],\n \"release artifact-tool\",\n );\n if (artifactTool.packageName !== \"@opengeni/artifact-tool\") {\n invalid(\"release artifact-tool package name is invalid\");\n }\n const packageVersion = exactStableVersion(\n artifactTool.packageVersion,\n \"release artifact-tool version\",\n );\n const integrity = sha512Integrity(artifactTool.integrity, \"release artifact-tool integrity\");\n if (!Array.isArray(record.targets)) invalid(\"release targets must be an array\");\n if (record.targets.length !== ARTIFACT_RUNTIME_MATRIX.length) {\n invalid(`release manifest must contain exactly ${ARTIFACT_RUNTIME_MATRIX.length} targets`);\n }\n const targets = record.targets.map((entry, index) => {\n const expected = ARTIFACT_RUNTIME_MATRIX[index]!;\n const target = validateArtifactKernelPackageManifest(entry, expected.target);\n if (target.artifactToolVersion !== packageVersion) {\n invalid(`target ${target.target} does not match artifact-tool ${packageVersion}`);\n }\n return target;\n });\n const buildIdentities = new Set(targets.map((target) => target.buildIdentity));\n if (buildIdentities.size !== 1) invalid(\"all target packages must carry one build identity\");\n return {\n schemaVersion: 1,\n artifactTool: {\n packageName: \"@opengeni/artifact-tool\",\n packageVersion,\n integrity,\n },\n targets,\n };\n}\n\nexport function locateArtifactRuntimeDependencies(\n value: unknown,\n manifestUrl: URL,\n expectedTarget?: ArtifactRuntimeTarget,\n): ArtifactRuntimeDependencies {\n if (manifestUrl.protocol !== \"file:\") {\n throw new ArtifactRuntimeError(\n \"ARTIFACT_RUNTIME_MANIFEST_INVALID\",\n \"Installed runtime manifest must be a local file URL\",\n );\n }\n const manifest = validateArtifactRuntimeInstallationManifest(value, expectedTarget);\n const root = new URL(\"./\", manifestUrl);\n const kernelRoot = confinedUrl(root, `${manifest.kernelPackageRoot}/`);\n return {\n target: artifactRuntimeTarget(manifest.target),\n manifestUrl,\n releaseManifestUrl: confinedUrl(root, manifest.releaseManifest.path),\n ...(manifest.artifactToolArchive\n ? { artifactToolArchiveUrl: confinedUrl(root, manifest.artifactToolArchive.path) }\n : {}),\n skillFacadeEntrypoint: confinedUrl(root, manifest.skillFacadeEntrypoint.path),\n skillFacadeSupportFiles: (manifest.skillFacadeSupportFiles ?? []).map((file) =>\n confinedUrl(root, file.path),\n ),\n kernelEntrypoint: confinedUrl(kernelRoot, manifest.kernel.entrypoint.path),\n kernelAsset: confinedUrl(kernelRoot, manifest.kernel.asset.path),\n kernelSupportFiles: manifest.kernel.supportFiles.map((file) =>\n confinedUrl(kernelRoot, file.path),\n ),\n manifest,\n };\n}\n\nexport async function loadArtifactKernelRuntime(\n dependencies: ArtifactRuntimeKernelDependencies,\n importer: ArtifactRuntimeModuleImporter = defaultModuleImporter,\n): Promise<ArtifactKernelRuntime> {\n let imported: unknown;\n try {\n imported = await importer(dependencies.kernelEntrypoint.href);\n } catch (cause) {\n throw new ArtifactRuntimeError(\n \"ARTIFACT_RUNTIME_UNAVAILABLE\",\n `Could not load exact kernel package ${dependencies.manifest.kernel.packageName}`,\n { cause },\n );\n }\n const module = requiredRecord(imported, \"kernel package module\");\n const packagedIdentity = validateArtifactKernelPackageIdentity(\n module.artifactKernelPackageIdentity,\n dependencies.target.target,\n );\n assertSameKernelPackageIdentity(packagedIdentity, dependencies.manifest.kernel);\n if (typeof module.loadArtifactKernelBinding !== \"function\") {\n incompatible(\"kernel package does not export loadArtifactKernelBinding()\");\n }\n const candidate = await module.loadArtifactKernelBinding();\n return new ArtifactKernelRuntime(\n dependencies.target.kind,\n candidate,\n dependencies.manifest.kernel,\n );\n}\n\ntype RawCollaborationSession = {\n authorTransaction(intent: Uint8Array, resolvedBase: Uint8Array): Uint8Array;\n applyCommitted(operation: Uint8Array): void;\n query(request: Uint8Array): Uint8Array;\n snapshot(): Uint8Array;\n frontier(): Uint8Array;\n stateHash(): string;\n revision(): bigint | number;\n fork(): RawCollaborationSession;\n close?(): void;\n dispose?(): void;\n free?(): void;\n isClosed?(): boolean;\n readonly closed?: boolean;\n};\n\ntype RawCollaborationSessionConstructor = {\n create(namespace: Uint8Array): RawCollaborationSession;\n open(snapshot: Uint8Array): RawCollaborationSession;\n};\n\ntype RawModalitySession = {\n applyCommands(commands: Uint8Array): Uint8Array;\n query(request: Uint8Array): Uint8Array;\n snapshot(): Uint8Array;\n stateHash(): string;\n revision(): bigint | number;\n fork(): RawModalitySession;\n close?(): void;\n dispose?(): void;\n free?(): void;\n isClosed?(): boolean;\n readonly closed?: boolean;\n};\n\ntype RawModalitySessionConstructor = {\n create(namespace: Uint8Array): RawModalitySession;\n open(snapshot: Uint8Array): RawModalitySession;\n};\n\ntype RawTextLayoutSession = {\n layout(request: Uint8Array): Uint8Array;\n close?(): void;\n dispose?(): void;\n free?(): void;\n isClosed?(): boolean;\n readonly closed?: boolean;\n};\n\ntype RawTextLayoutSessionConstructor = {\n open(fontBundle: Uint8Array): RawTextLayoutSession;\n};\n\ntype RawArtifactKernelBinding = {\n capabilities(): Uint8Array;\n buildIdentity(): Uint8Array;\n createDocument(namespace: Uint8Array): Uint8Array;\n applyDocumentCommands(snapshot: Uint8Array, commands: Uint8Array): Uint8Array;\n queryDocument(snapshot: Uint8Array, query: Uint8Array): Uint8Array;\n canonicalizeDocumentSnapshot(snapshot: Uint8Array): Uint8Array;\n createPresentation(namespace: Uint8Array): Uint8Array;\n applyPresentationCommands(snapshot: Uint8Array, commands: Uint8Array): Uint8Array;\n queryPresentation(snapshot: Uint8Array, query: Uint8Array): Uint8Array;\n canonicalizePresentationSnapshot(snapshot: Uint8Array): Uint8Array;\n layoutText(fontBundle: Uint8Array, request: Uint8Array): Uint8Array;\n canonicalizeRenderTile(value: Uint8Array): Uint8Array;\n canonicalizeRenderPatch(value: Uint8Array): Uint8Array;\n canonicalizeCollaborationSnapshot(snapshot: Uint8Array): Uint8Array;\n ArtifactCollaborationSession: RawCollaborationSessionConstructor;\n ArtifactDocumentSession: RawModalitySessionConstructor;\n ArtifactPresentationSession: RawModalitySessionConstructor;\n ArtifactTextLayoutSession: RawTextLayoutSessionConstructor;\n};\n\nexport class ArtifactKernelRuntime {\n readonly kind: ArtifactRuntimeKind;\n readonly target: ArtifactRuntimeTarget;\n readonly capabilities: ArtifactKernelCapabilities;\n readonly buildIdentity: string;\n readonly #binding: RawArtifactKernelBinding;\n\n constructor(\n kind: ArtifactRuntimeKind,\n candidate: unknown,\n packageManifest: ArtifactKernelPackageManifest,\n ) {\n const manifest = validateArtifactKernelPackageManifest(packageManifest);\n if (kind !== manifest.kind) incompatible(\"binding kind does not match package manifest\");\n this.kind = kind;\n this.target = manifest.target;\n this.#binding = validateRawBinding(candidate);\n this.capabilities = parseCapabilities(this.#binding.capabilities());\n this.buildIdentity = decodeBuildIdentity(this.#binding.buildIdentity());\n if (this.buildIdentity !== manifest.buildIdentity) {\n throw new ArtifactRuntimeError(\n \"ARTIFACT_RUNTIME_INTEGRITY\",\n \"Loaded kernel build identity does not match its package manifest\",\n );\n }\n }\n\n canonicalizeCollaborationSnapshot(snapshot: Uint8Array): Uint8Array {\n return bytes(\n this.#binding.canonicalizeCollaborationSnapshot(snapshot),\n \"canonicalizeCollaborationSnapshot\",\n );\n }\n\n createDocument(namespace: bigint): Uint8Array {\n return bytes(\n this.#binding.createDocument(encodeArtifactReplicaNamespace(namespace)),\n \"createDocument\",\n );\n }\n\n applyDocumentCommands(snapshot: Uint8Array, commands: Uint8Array): Uint8Array {\n return bytes(this.#binding.applyDocumentCommands(snapshot, commands), \"applyDocumentCommands\");\n }\n\n queryDocument(snapshot: Uint8Array, query: Uint8Array): Uint8Array {\n return bytes(this.#binding.queryDocument(snapshot, query), \"queryDocument\");\n }\n\n canonicalizeDocumentSnapshot(snapshot: Uint8Array): Uint8Array {\n return bytes(\n this.#binding.canonicalizeDocumentSnapshot(snapshot),\n \"canonicalizeDocumentSnapshot\",\n );\n }\n\n createPresentation(namespace: bigint): Uint8Array {\n return bytes(\n this.#binding.createPresentation(encodeArtifactReplicaNamespace(namespace)),\n \"createPresentation\",\n );\n }\n\n applyPresentationCommands(snapshot: Uint8Array, commands: Uint8Array): Uint8Array {\n return bytes(\n this.#binding.applyPresentationCommands(snapshot, commands),\n \"applyPresentationCommands\",\n );\n }\n\n queryPresentation(snapshot: Uint8Array, query: Uint8Array): Uint8Array {\n return bytes(this.#binding.queryPresentation(snapshot, query), \"queryPresentation\");\n }\n\n canonicalizePresentationSnapshot(snapshot: Uint8Array): Uint8Array {\n return bytes(\n this.#binding.canonicalizePresentationSnapshot(snapshot),\n \"canonicalizePresentationSnapshot\",\n );\n }\n\n layoutText(fontBundle: Uint8Array, request: Uint8Array): Uint8Array {\n return bytes(this.#binding.layoutText(fontBundle, request), \"layoutText\");\n }\n\n canonicalizeRenderTile(value: Uint8Array): Uint8Array {\n return bytes(this.#binding.canonicalizeRenderTile(value), \"canonicalizeRenderTile\");\n }\n\n canonicalizeRenderPatch(value: Uint8Array): Uint8Array {\n return bytes(this.#binding.canonicalizeRenderPatch(value), \"canonicalizeRenderPatch\");\n }\n\n createCollaborationSession(namespace: bigint): ArtifactCollaborationSession {\n return new ArtifactCollaborationSession(\n this.#binding.ArtifactCollaborationSession.create(encodeArtifactReplicaNamespace(namespace)),\n );\n }\n\n openCollaborationSession(snapshot: Uint8Array): ArtifactCollaborationSession {\n return new ArtifactCollaborationSession(\n this.#binding.ArtifactCollaborationSession.open(snapshot),\n );\n }\n\n createDocumentSession(namespace: bigint): ArtifactDocumentSession {\n return new ArtifactDocumentSession(\n this.#binding.ArtifactDocumentSession.create(encodeArtifactReplicaNamespace(namespace)),\n );\n }\n\n openDocumentSession(snapshot: Uint8Array): ArtifactDocumentSession {\n return new ArtifactDocumentSession(this.#binding.ArtifactDocumentSession.open(snapshot));\n }\n\n createPresentationSession(namespace: bigint): ArtifactPresentationSession {\n return new ArtifactPresentationSession(\n this.#binding.ArtifactPresentationSession.create(encodeArtifactReplicaNamespace(namespace)),\n );\n }\n\n openPresentationSession(snapshot: Uint8Array): ArtifactPresentationSession {\n return new ArtifactPresentationSession(\n this.#binding.ArtifactPresentationSession.open(snapshot),\n );\n }\n\n openTextLayoutSession(fontBundle: Uint8Array): ArtifactTextLayoutSession {\n return new ArtifactTextLayoutSession(this.#binding.ArtifactTextLayoutSession.open(fontBundle));\n }\n}\n\nexport class ArtifactCollaborationSession {\n readonly #session: RawCollaborationSession;\n #disposed = false;\n\n constructor(session: RawCollaborationSession) {\n validateRawCollaborationSession(session);\n this.#session = session;\n }\n\n authorTransaction(intent: Uint8Array, resolvedBase: Uint8Array): Uint8Array {\n this.assertLive();\n return bytes(this.#session.authorTransaction(intent, resolvedBase), \"authorTransaction\");\n }\n\n applyCommitted(operation: Uint8Array): void {\n this.assertLive();\n this.#session.applyCommitted(operation);\n }\n\n queryViewport(request: Uint8Array): Uint8Array {\n return this.query(request);\n }\n\n query(request: Uint8Array): Uint8Array {\n this.assertLive();\n return bytes(this.#session.query(request), \"query\");\n }\n\n snapshot(): Uint8Array {\n this.assertLive();\n return bytes(this.#session.snapshot(), \"snapshot\");\n }\n\n frontier(): Uint8Array {\n this.assertLive();\n return bytes(this.#session.frontier(), \"frontier\");\n }\n\n stateHash(): string {\n this.assertLive();\n const returnedStateHash = this.#session.stateHash();\n if (!/^sha256:[0-9a-f]{64}$/u.test(returnedStateHash))\n incompatible(\"kernel returned invalid state hash\");\n return returnedStateHash;\n }\n\n revision(): bigint {\n this.assertLive();\n const revision = this.#session.revision();\n if (typeof revision === \"bigint\") {\n if (revision < 0n) incompatible(\"kernel returned a negative revision\");\n return revision;\n }\n if (!Number.isSafeInteger(revision) || revision < 0) {\n incompatible(\"kernel returned an unsafe revision\");\n }\n return BigInt(revision);\n }\n\n fork(): ArtifactCollaborationSession {\n this.assertLive();\n return new ArtifactCollaborationSession(this.#session.fork());\n }\n\n isClosed(): boolean {\n return (\n this.#disposed ||\n (typeof this.#session.isClosed === \"function\"\n ? this.#session.isClosed()\n : this.#session.closed === true)\n );\n }\n\n dispose(): void {\n if (this.#disposed) return;\n try {\n if (!this.isClosed()) {\n if (typeof this.#session.dispose === \"function\") this.#session.dispose();\n else this.#session.close?.();\n }\n } finally {\n this.#session.free?.();\n this.#disposed = true;\n }\n }\n\n private assertLive(): void {\n if (this.isClosed()) incompatible(\"artifact collaboration session is closed\");\n }\n}\n\nclass ArtifactModalitySession {\n readonly #session: RawModalitySession;\n #disposed = false;\n\n constructor(session: RawModalitySession) {\n validateRawModalitySession(session);\n this.#session = session;\n }\n\n applyCommands(commands: Uint8Array): Uint8Array {\n this.assertLive();\n return bytes(this.#session.applyCommands(commands), \"modality session applyCommands\");\n }\n\n query(request: Uint8Array): Uint8Array {\n this.assertLive();\n return bytes(this.#session.query(request), \"modality session query\");\n }\n\n snapshot(): Uint8Array {\n this.assertLive();\n return bytes(this.#session.snapshot(), \"modality session snapshot\");\n }\n\n revision(): bigint {\n this.assertLive();\n return safeRevision(this.#session.revision());\n }\n\n stateHash(): string {\n this.assertLive();\n return stateHash(this.#session.stateHash());\n }\n\n isClosed(): boolean {\n return rawSessionClosed(this.#disposed, this.#session);\n }\n\n dispose(): void {\n if (this.#disposed) return;\n try {\n if (!this.isClosed()) {\n if (typeof this.#session.dispose === \"function\") this.#session.dispose();\n else this.#session.close?.();\n }\n } finally {\n this.#session.free?.();\n this.#disposed = true;\n }\n }\n\n protected forkRaw(): RawModalitySession {\n this.assertLive();\n return this.#session.fork();\n }\n\n private assertLive(): void {\n if (this.isClosed()) incompatible(\"artifact modality session is closed\");\n }\n}\n\n/** Exact stateful N-API document session over OGADC/OGADQ/OGADOC bytes. */\nexport class ArtifactDocumentSession extends ArtifactModalitySession {\n fork(): ArtifactDocumentSession {\n return new ArtifactDocumentSession(this.forkRaw());\n }\n}\n\n/** Exact stateful N-API presentation session over OGAPC/OGAPQ/OGAPS bytes. */\nexport class ArtifactPresentationSession extends ArtifactModalitySession {\n fork(): ArtifactPresentationSession {\n return new ArtifactPresentationSession(this.forkRaw());\n }\n}\n\n/** Exact stateful N-API text-layout session with a retained validated font bundle. */\nexport class ArtifactTextLayoutSession {\n readonly #session: RawTextLayoutSession;\n #disposed = false;\n\n constructor(session: RawTextLayoutSession) {\n validateRawTextLayoutSession(session);\n this.#session = session;\n }\n\n layout(request: Uint8Array): Uint8Array {\n if (this.isClosed()) incompatible(\"artifact text-layout session is closed\");\n return bytes(this.#session.layout(request), \"text-layout session layout\");\n }\n\n isClosed(): boolean {\n return rawSessionClosed(this.#disposed, this.#session);\n }\n\n dispose(): void {\n if (this.#disposed) return;\n try {\n if (!this.isClosed()) {\n if (typeof this.#session.dispose === \"function\") this.#session.dispose();\n else this.#session.close?.();\n }\n } finally {\n this.#session.free?.();\n this.#disposed = true;\n }\n }\n}\n\nfunction descriptor<\n const Target extends ArtifactRuntimeTarget,\n const Kind extends ArtifactRuntimeKind,\n const Platform extends ArtifactRuntimeTargetDescriptor[\"platform\"],\n const Arch extends ArtifactRuntimeTargetDescriptor[\"arch\"],\n>(\n target: Target,\n kind: Kind,\n platform: Platform,\n arch: Arch,\n libc?: ArtifactRuntimeLibc,\n): ArtifactRuntimeTargetDescriptor & {\n readonly target: Target;\n readonly kind: Kind;\n readonly platform: Platform;\n readonly arch: Arch;\n} {\n return {\n target,\n kind,\n packageName: `@opengeni/artifact-kernel-${target}`,\n platform,\n arch,\n ...(libc ? { libc } : {}),\n };\n}\n\nfunction defaultModuleImporter(specifier: string): Promise<unknown> {\n return import(/* @vite-ignore */ specifier);\n}\n\nfunction validateRawBinding(value: unknown): RawArtifactKernelBinding {\n const binding = bindingRecord(value, \"artifact kernel binding\");\n for (const name of [\n \"capabilities\",\n \"buildIdentity\",\n \"canonicalizeCollaborationSnapshot\",\n \"createDocument\",\n \"applyDocumentCommands\",\n \"queryDocument\",\n \"canonicalizeDocumentSnapshot\",\n \"createPresentation\",\n \"applyPresentationCommands\",\n \"queryPresentation\",\n \"canonicalizePresentationSnapshot\",\n \"layoutText\",\n \"canonicalizeRenderTile\",\n \"canonicalizeRenderPatch\",\n ] as const) {\n if (typeof binding[name] !== \"function\") incompatible(`kernel binding is missing ${name}()`);\n }\n const session = bindingRecord(\n binding.ArtifactCollaborationSession,\n \"ArtifactCollaborationSession\",\n );\n if (typeof session.create !== \"function\" || typeof session.open !== \"function\") {\n incompatible(\"ArtifactCollaborationSession is missing create/open factories\");\n }\n for (const name of [\"ArtifactDocumentSession\", \"ArtifactPresentationSession\"] as const) {\n const constructor = bindingRecord(binding[name], name);\n if (typeof constructor.create !== \"function\" || typeof constructor.open !== \"function\") {\n incompatible(`${name} is missing create/open factories`);\n }\n }\n const textLayout = bindingRecord(binding.ArtifactTextLayoutSession, \"ArtifactTextLayoutSession\");\n if (typeof textLayout.open !== \"function\") {\n incompatible(\"ArtifactTextLayoutSession is missing open() factory\");\n }\n return value as RawArtifactKernelBinding;\n}\n\nfunction validateRawCollaborationSession(value: RawCollaborationSession): void {\n const session = bindingRecord(value, \"artifact collaboration session\");\n for (const name of [\n \"authorTransaction\",\n \"applyCommitted\",\n \"query\",\n \"snapshot\",\n \"frontier\",\n \"stateHash\",\n \"revision\",\n \"fork\",\n ] as const) {\n if (typeof session[name] !== \"function\")\n incompatible(`collaboration session is missing ${name}()`);\n }\n}\n\nfunction validateRawModalitySession(value: RawModalitySession): void {\n const session = bindingRecord(value, \"artifact modality session\");\n for (const name of [\n \"applyCommands\",\n \"query\",\n \"snapshot\",\n \"stateHash\",\n \"revision\",\n \"fork\",\n ] as const) {\n if (typeof session[name] !== \"function\") {\n incompatible(`artifact modality session is missing ${name}()`);\n }\n }\n}\n\nfunction validateRawTextLayoutSession(value: RawTextLayoutSession): void {\n const session = bindingRecord(value, \"artifact text-layout session\");\n if (typeof session.layout !== \"function\") {\n incompatible(\"artifact text-layout session is missing layout()\");\n }\n}\n\nfunction parseCapabilities(value: unknown): ArtifactKernelCapabilities {\n const decoded = JSON.parse(\n new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes(value, \"capabilities\")),\n ) as unknown;\n const capabilities = requiredRecord(decoded, \"artifact kernel capabilities\");\n const required = {\n abiVersion: 1,\n buildIdentityFormat: \"utf8\",\n commandSchemaVersion: SPREADSHEET_KERNEL_COMMAND_VERSION,\n spreadsheetCommandVersion: SPREADSHEET_ARTIFACT_COMMAND_VERSION,\n spreadsheetModelSchemaVersion: SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,\n kernelSnapshotVersion: SPREADSHEET_KERNEL_SNAPSHOT_VERSION,\n receiptSchemaVersion: 1,\n collaborationSnapshotVersion: SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION,\n editableArtifactIntentVersion: 1,\n committedTransactionVersion: COMMITTED_TRANSACTION_PROTOCOL_VERSION,\n queryVersion: 1,\n queryResponseVersion: 1,\n collaboration: true,\n document: true,\n documentCommandVersion: 1,\n documentQueryResponseVersion: 1,\n documentQueryVersion: 1,\n documentReceiptVersion: 1,\n documentSnapshotVersion: 1,\n documentStatefulSessions: true,\n presentation: true,\n presentationCommandVersion: 1,\n presentationQueryResponseVersion: 1,\n presentationQueryVersion: 1,\n presentationSnapshotVersion: 1,\n presentationStatefulSessions: true,\n textLayout: true,\n textLayoutFontBundleVersion: 1,\n textLayoutRequestVersion: 1,\n textLayoutResponseVersion: 1,\n textLayoutStatefulSessions: true,\n retainedRenderPatchVersion: 1,\n retainedRenderTileVersion: 1,\n workbookMetadataQueries: true,\n canonicalStateHash: \"sha256:canonical-snapshot\",\n safeRust: true,\n sessionForks: true,\n statefulSessions: true,\n transport: \"bounded-uint8array\",\n } as const;\n for (const [name, expected] of Object.entries(required)) {\n if (capabilities[name] !== expected) incompatible(`kernel capability ${name} is incompatible`);\n }\n for (const name of [\n \"maxCellsPerBatch\",\n \"maxCommandBytes\",\n \"maxCommands\",\n \"maxCommittedTransactionBytes\",\n \"maxDocumentCommandBytes\",\n \"maxDocumentCommands\",\n \"maxDocumentQueryBytes\",\n \"maxDocumentQueryResponseBytes\",\n \"maxDocumentSnapshotBytes\",\n \"maxIntentBytes\",\n \"maxMetadataScannedCells\",\n \"maxMetadataSheets\",\n \"maxPresentationCommandBytes\",\n \"maxPresentationQueryBytes\",\n \"maxPresentationResponseBytes\",\n \"maxPresentationSnapshotBytes\",\n \"maxQueryBytes\",\n \"maxQueryResponseBytes\",\n \"maxSnapshotBytes\",\n \"maxSpreadsheetCommandBytes\",\n \"maxTextLayoutFontBundleBytes\",\n \"maxTextLayoutRequestBytes\",\n \"maxTextLayoutResponseBytes\",\n \"maxViewportArea\",\n \"maxViewportCells\",\n ] as const) {\n positiveSafeInteger(capabilities[name], `kernel capability ${name}`);\n }\n return capabilities as ArtifactKernelCapabilities;\n}\n\nfunction decodeBuildIdentity(value: unknown): string {\n const identity = new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes(value, \"buildIdentity\"));\n return boundedString(identity, \"kernel build identity\", 512);\n}\n\nfunction safeRevision(value: bigint | number): bigint {\n if (typeof value === \"bigint\") {\n if (value < 0n) incompatible(\"kernel returned a negative revision\");\n return value;\n }\n if (!Number.isSafeInteger(value) || value < 0) {\n incompatible(\"kernel returned an unsafe revision\");\n }\n return BigInt(value);\n}\n\nfunction stateHash(value: string): string {\n if (!/^sha256:[0-9a-f]{64}$/u.test(value)) incompatible(\"kernel returned invalid state hash\");\n return value;\n}\n\nfunction rawSessionClosed(\n disposed: boolean,\n session: {\n isClosed?(): boolean;\n readonly closed?: boolean;\n },\n): boolean {\n return (\n disposed ||\n (typeof session.isClosed === \"function\" ? session.isClosed() : session.closed === true)\n );\n}\n\nexport function encodeArtifactReplicaNamespace(namespace: bigint): Uint8Array {\n if (namespace <= 0n || namespace > 0xffff_ffff_ffff_ffffn) {\n incompatible(\"artifact replica namespace must be a nonzero u64\");\n }\n const envelope = new Uint8Array(28);\n envelope.set(new TextEncoder().encode(\"OGAKN001\"));\n const view = new DataView(envelope.buffer);\n view.setUint16(8, 1, true);\n view.setBigUint64(12, namespace, true);\n view.setBigUint64(20, fnv64(envelope.subarray(0, 20)), true);\n return envelope;\n}\n\nfunction fnv64(value: Uint8Array): bigint {\n let hash = 0xcbf29ce484222325n;\n for (const byte of value) {\n hash ^= BigInt(byte);\n hash = BigInt.asUintN(64, hash * 0x100000001b3n);\n }\n return hash;\n}\n\nfunction assertSameKernelPackageIdentity(\n actual: ArtifactKernelPackageIdentity,\n expected: ArtifactKernelPackageManifest,\n): void {\n if (\n JSON.stringify(actual) !==\n JSON.stringify({\n schemaVersion: expected.schemaVersion,\n target: expected.target,\n kind: expected.kind,\n packageName: expected.packageName,\n packageVersion: expected.packageVersion,\n artifactToolVersion: expected.artifactToolVersion,\n buildIdentity: expected.buildIdentity,\n })\n ) {\n throw new ArtifactRuntimeError(\n \"ARTIFACT_RUNTIME_INTEGRITY\",\n \"Loaded kernel package identity differs from the installation manifest\",\n );\n }\n}\n\nfunction confinedUrl(root: URL, relativePath: string): URL {\n const candidate = new URL(relativePath, root);\n if (candidate.protocol !== \"file:\" || !candidate.href.startsWith(root.href)) {\n invalid(\"runtime dependency escapes the installation root\");\n }\n return candidate;\n}\n\nfunction safeRelativePath(value: unknown, name: string): string {\n const path = boundedString(value, name, 1024);\n if (\n path.startsWith(\"/\") ||\n path.startsWith(\"\\\\\") ||\n path.includes(\"\\\\\") ||\n path.split(\"/\").some((part) => part === \"\" || part === \".\" || part === \"..\") ||\n /[%?#\\0]/u.test(path)\n ) {\n invalid(`${name} must be a normalized relative POSIX path`);\n }\n return path;\n}\n\nfunction exactStableVersion(value: unknown, name: string): string {\n if (\n typeof value !== \"string\" ||\n !/^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)$/u.test(value)\n ) {\n invalid(`${name} must be an exact stable semantic version`);\n }\n return value;\n}\n\nfunction sha256(value: unknown, name: string): `sha256:${string}` {\n if (typeof value !== \"string\" || !/^sha256:[0-9a-f]{64}$/u.test(value)) {\n invalid(`${name} must be a lowercase SHA-256 digest`);\n }\n return value as `sha256:${string}`;\n}\n\nfunction sha512Integrity(value: unknown, name: string): `sha512-${string}` {\n if (typeof value !== \"string\" || !/^sha512-[A-Za-z0-9+/]+={0,2}$/u.test(value)) {\n invalid(`${name} is invalid`);\n }\n return value as `sha512-${string}`;\n}\n\nfunction positiveSafeInteger(value: unknown, name: string): number {\n if (!Number.isSafeInteger(value) || (value as number) <= 0) invalid(`${name} must be positive`);\n return value as number;\n}\n\nfunction boundedString(value: unknown, name: string, maximum: number): string {\n if (typeof value !== \"string\" || value.length === 0 || value.length > maximum) {\n invalid(`${name} is invalid`);\n }\n return value;\n}\n\nfunction isArtifactRuntimeTarget(value: unknown): value is ArtifactRuntimeTarget {\n return (\n typeof value === \"string\" && (ARTIFACT_RUNTIME_TARGETS as readonly string[]).includes(value)\n );\n}\n\nfunction exactRecord(\n value: unknown,\n keys: readonly string[],\n name: string,\n): Record<string, unknown> {\n const record = requiredRecord(value, name);\n const actualKeys = Object.keys(record).sort();\n const expectedKeys = [...keys].sort();\n if (JSON.stringify(actualKeys) !== JSON.stringify(expectedKeys))\n invalid(`${name} has unexpected fields`);\n return record;\n}\n\nfunction requiredRecord(value: unknown, name: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value))\n invalid(`${name} is invalid`);\n return value as Record<string, unknown>;\n}\n\nfunction bindingRecord(value: unknown, name: string): Record<string, unknown> {\n if ((typeof value !== \"object\" && typeof value !== \"function\") || value === null) {\n incompatible(`${name} is invalid`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction bytes(value: unknown, name: string): Uint8Array {\n if (!(value instanceof Uint8Array)) incompatible(`kernel ${name} did not return Uint8Array`);\n return value;\n}\n\nfunction invalid(message: string): never {\n throw new ArtifactRuntimeError(\"ARTIFACT_RUNTIME_MANIFEST_INVALID\", message);\n}\n\nfunction incompatible(message: string): never {\n throw new ArtifactRuntimeError(\"ARTIFACT_RUNTIME_INCOMPATIBLE\", message);\n}\n"],"mappings":"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","names":[]}
@@ -4,7 +4,7 @@ import {
4
4
  probeVerifiedArtifactSkillFacade,
5
5
  resolveCurrentArtifactRuntimeTarget,
6
6
  runArtifactRuntimeCli
7
- } from "./chunk-ZCJYRJGB.js";
7
+ } from "./chunk-4XJE7NRA.js";
8
8
  import {
9
9
  ARTIFACT_RUNTIME_ENVIRONMENT,
10
10
  ARTIFACT_RUNTIME_TARGETS,
@@ -12,7 +12,7 @@ import {
12
12
  artifactRuntimeTarget,
13
13
  loadArtifactKernelRuntime,
14
14
  validateArtifactKernelPackageManifest
15
- } from "./chunk-N2IHNWBS.js";
15
+ } from "./chunk-4YYYUZQH.js";
16
16
 
17
17
  // src/runtime-development.ts
18
18
  import { createHash } from "crypto";
@@ -43,11 +43,12 @@ function validateArtifactKernelBuildReceipt(value, expectedTarget) {
43
43
  "kind",
44
44
  "buildIdentity",
45
45
  "capabilities",
46
+ "spreadsheetFormulaProjectionCorpusSha256",
46
47
  "runtimeFiles"
47
48
  ],
48
49
  "target build receipt"
49
50
  );
50
- if (record.schemaVersion !== 1 || record.producer !== "opengeni-artifact-kernel-smoke-v1") {
51
+ if (record.schemaVersion !== 2 || record.producer !== "opengeni-artifact-kernel-smoke-v2") {
51
52
  invalid("target build receipt schema/producer is invalid");
52
53
  }
53
54
  if (typeof record.target !== "string" || !ARTIFACT_RUNTIME_TARGETS.includes(record.target)) {
@@ -65,6 +66,10 @@ function validateArtifactKernelBuildReceipt(value, expectedTarget) {
65
66
  if (capabilities.bytes > MAX_CAPABILITIES_BYTES) {
66
67
  invalid("target build capabilities exceed their maximum size");
67
68
  }
69
+ const spreadsheetFormulaProjectionCorpusSha256 = record.spreadsheetFormulaProjectionCorpusSha256;
70
+ if (typeof spreadsheetFormulaProjectionCorpusSha256 !== "string" || !/^sha256:[0-9a-f]{64}$/u.test(spreadsheetFormulaProjectionCorpusSha256)) {
71
+ invalid("target build formula projection corpus digest is invalid");
72
+ }
68
73
  if (!Array.isArray(record.runtimeFiles) || record.runtimeFiles.length === 0 || record.runtimeFiles.length > 8) {
69
74
  invalid("target build receipt runtimeFiles is invalid");
70
75
  }
@@ -79,12 +84,13 @@ function validateArtifactKernelBuildReceipt(value, expectedTarget) {
79
84
  invalid("target build receipt runtimeFiles do not match the target package");
80
85
  }
81
86
  return {
82
- schemaVersion: 1,
83
- producer: "opengeni-artifact-kernel-smoke-v1",
87
+ schemaVersion: 2,
88
+ producer: "opengeni-artifact-kernel-smoke-v2",
84
89
  target: descriptor.target,
85
90
  kind: descriptor.kind,
86
91
  buildIdentity: record.buildIdentity,
87
92
  capabilities: { bytes: capabilities.bytes, sha256: capabilities.sha256 },
93
+ spreadsheetFormulaProjectionCorpusSha256,
88
94
  runtimeFiles
89
95
  };
90
96
  }
@@ -610,4 +616,4 @@ export {
610
616
  loadConfiguredArtifactKernelRuntime,
611
617
  runConfiguredArtifactRuntimeCli
612
618
  };
613
- //# sourceMappingURL=chunk-U5G2BKM2.js.map
619
+ //# sourceMappingURL=chunk-LMLPFF3S.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/runtime-development.ts","../src/runtime-receipt.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { open, realpath, stat } from \"node:fs/promises\";\nimport { isAbsolute, relative, resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport {\n canonicalArtifactKernelBuildReceiptBytes,\n validateArtifactKernelBuildReceipt,\n type ArtifactKernelBuildReceipt,\n} from \"./runtime-receipt\";\nimport {\n ARTIFACT_RUNTIME_ENVIRONMENT,\n ArtifactRuntimeError,\n loadArtifactKernelRuntime,\n validateArtifactKernelPackageManifest,\n type ArtifactKernelPackageManifest,\n type ArtifactKernelRuntime,\n type ArtifactRuntimeKernelDependencies,\n type NativeArtifactRuntimeTarget,\n} from \"./runtime\";\nimport {\n doctorVerifiedArtifactRuntime,\n loadVerifiedArtifactKernelRuntime,\n probeVerifiedArtifactSkillFacade,\n resolveCurrentArtifactRuntimeTarget,\n runArtifactRuntimeCli,\n type VerifiedArtifactRuntimeLocation,\n} from \"./runtime-cli\";\n\nexport const DEVELOPMENT_ARTIFACT_RUNTIME_ENVIRONMENT = {\n manifest: \"OPENGENI_ARTIFACT_DEVELOPMENT_RUNTIME_MANIFEST\",\n} as const;\n\nconst MAX_MANIFEST_BYTES = 256 * 1024;\nconst MAX_IDENTITY_BYTES = 64 * 1024;\nconst MAX_RECEIPT_BYTES = 256 * 1024;\nconst MAX_JAVASCRIPT_BYTES = 32 * 1024 * 1024;\nconst MAX_KERNEL_ASSET_BYTES = 512 * 1024 * 1024;\nconst MAX_MATERIALIZER_EXECUTABLE_BYTES = 512 * 1024 * 1024;\n\ntype RuntimeEnvironment = Readonly<Record<string, string | undefined>>;\ntype FileDescriptor = Readonly<{\n path: string;\n bytes: number;\n sha256: `sha256:${string}`;\n}>;\n\nexport type DevelopmentArtifactRuntimeManifest = Readonly<{\n schemaVersion: 1;\n mode: \"development-current-host\";\n target: NativeArtifactRuntimeTarget;\n sourceFingerprint: `sha256:${string}`;\n artifactTool: Readonly<{\n packageName: \"@opengeni/artifact-tool\";\n packageVersion: string;\n }>;\n artifactToolIdentity: FileDescriptor;\n receipt: FileDescriptor;\n skillFacadeEntrypoint: FileDescriptor;\n materializerExecutable: FileDescriptor;\n kernelPackageRoot: string;\n kernel: ArtifactKernelPackageManifest;\n}>;\n\nexport type VerifiedDevelopmentArtifactRuntimeLocation = Readonly<{\n schemaVersion: 1;\n mode: \"development-current-host\";\n target: NativeArtifactRuntimeTarget;\n manifestPath: string;\n receiptPath: string;\n artifactTool: DevelopmentArtifactRuntimeManifest[\"artifactTool\"];\n skillFacadeEntrypoint: string;\n materializerExecutable: string;\n kernel: Readonly<{\n packageName: string;\n packageVersion: string;\n entrypoint: string;\n asset: string;\n supportFiles: readonly string[];\n buildIdentity: string;\n }>;\n}>;\n\nexport type ConfiguredArtifactRuntimeLocation =\n | VerifiedArtifactRuntimeLocation\n | VerifiedDevelopmentArtifactRuntimeLocation;\n\nexport type VerifiedConfiguredArtifactKernelRuntime = Readonly<{\n location: ConfiguredArtifactRuntimeLocation;\n runtime: ArtifactKernelRuntime;\n}>;\n\n/** True when any production/development runtime authority was explicitly supplied. */\nexport function isArtifactRuntimeConfigured(\n environment: RuntimeEnvironment = process.env,\n): boolean {\n return [\n ARTIFACT_RUNTIME_ENVIRONMENT.manifest,\n ARTIFACT_RUNTIME_ENVIRONMENT.toolEntrypoint,\n DEVELOPMENT_ARTIFACT_RUNTIME_ENVIRONMENT.manifest,\n ].some((name) => typeof environment[name] === \"string\");\n}\n\nexport function validateDevelopmentArtifactRuntimeManifest(\n value: unknown,\n expectedTarget?: NativeArtifactRuntimeTarget,\n): DevelopmentArtifactRuntimeManifest {\n const record = exactRecord(\n value,\n [\n \"schemaVersion\",\n \"mode\",\n \"target\",\n \"sourceFingerprint\",\n \"artifactTool\",\n \"artifactToolIdentity\",\n \"receipt\",\n \"skillFacadeEntrypoint\",\n \"materializerExecutable\",\n \"kernelPackageRoot\",\n \"kernel\",\n ],\n \"development runtime manifest\",\n );\n if (record.schemaVersion !== 1 || record.mode !== \"development-current-host\") {\n invalid(\"development runtime schema/mode is invalid\");\n }\n if (record.target === \"wasm-web\") invalid(\"development server runtime must be native\");\n const kernel = validateArtifactKernelPackageManifest(record.kernel);\n if (kernel.kind !== \"native\" || kernel.target !== record.target) {\n invalid(\"development runtime target differs from its native kernel\");\n }\n if (expectedTarget && kernel.target !== expectedTarget) {\n invalid(`development runtime target ${kernel.target} does not match ${expectedTarget}`);\n }\n const artifactTool = exactRecord(\n record.artifactTool,\n [\"packageName\", \"packageVersion\"],\n \"development artifact-tool identity\",\n );\n if (\n artifactTool.packageName !== \"@opengeni/artifact-tool\" ||\n artifactTool.packageVersion !== kernel.artifactToolVersion\n ) {\n invalid(\"development artifact-tool identity differs from its kernel\");\n }\n return Object.freeze({\n schemaVersion: 1,\n mode: \"development-current-host\",\n target: kernel.target as NativeArtifactRuntimeTarget,\n sourceFingerprint: digest(record.sourceFingerprint, \"development source fingerprint\"),\n artifactTool: Object.freeze({\n packageName: \"@opengeni/artifact-tool\",\n packageVersion: kernel.artifactToolVersion,\n }),\n artifactToolIdentity: fileDescriptor(\n record.artifactToolIdentity,\n \"development artifact-tool identity file\",\n ),\n receipt: fileDescriptor(record.receipt, \"development build receipt\"),\n skillFacadeEntrypoint: fileDescriptor(record.skillFacadeEntrypoint, \"development skill facade\"),\n materializerExecutable: fileDescriptor(\n record.materializerExecutable,\n \"development materializer executable\",\n ),\n kernelPackageRoot: safeRelativePath(record.kernelPackageRoot, \"development kernel root\"),\n kernel,\n });\n}\n\nexport function canonicalDevelopmentArtifactRuntimeManifestBytes(value: unknown): Uint8Array {\n const manifest = validateDevelopmentArtifactRuntimeManifest(value);\n return new TextEncoder().encode(`${JSON.stringify(manifest, null, 2)}\\n`);\n}\n\nexport function canonicalDevelopmentArtifactToolIdentityBytes(\n artifactTool: DevelopmentArtifactRuntimeManifest[\"artifactTool\"],\n): Uint8Array {\n if (\n artifactTool.packageName !== \"@opengeni/artifact-tool\" ||\n !stableVersion(artifactTool.packageVersion)\n ) {\n invalid(\"development artifact-tool identity is invalid\");\n }\n return new TextEncoder().encode(`${JSON.stringify(artifactTool, null, 2)}\\n`);\n}\n\nexport async function locateVerifiedDevelopmentArtifactRuntime(\n options: {\n environment?: RuntimeEnvironment;\n expectedTarget?: NativeArtifactRuntimeTarget;\n } = {},\n): Promise<VerifiedDevelopmentArtifactRuntimeLocation> {\n const environment = options.environment ?? process.env;\n assertDevelopmentEnvironment(environment);\n const expectedTarget = options.expectedTarget ?? currentNativeTarget();\n const manifestInput = requiredPath(\n environment,\n DEVELOPMENT_ARTIFACT_RUNTIME_ENVIRONMENT.manifest,\n );\n const facadeInput = requiredPath(environment, ARTIFACT_RUNTIME_ENVIRONMENT.toolEntrypoint);\n const manifestPath = await canonicalFile(manifestInput, \"development runtime manifest\");\n const manifestBytes = await readBoundedFile(\n manifestPath,\n MAX_MANIFEST_BYTES,\n \"development runtime manifest\",\n );\n const manifest = validateDevelopmentArtifactRuntimeManifest(\n parseJson(manifestBytes, \"development runtime manifest\"),\n expectedTarget,\n );\n if (!sameBytes(manifestBytes, canonicalDevelopmentArtifactRuntimeManifestBytes(manifest))) {\n integrity(\"Development runtime manifest is not canonical\");\n }\n const root = await realpath(resolve(manifestPath, \"..\"));\n const identityPath = await confinedFile(\n root,\n manifest.artifactToolIdentity.path,\n \"artifact-tool identity\",\n );\n const receiptPath = await confinedFile(root, manifest.receipt.path, \"kernel build receipt\");\n const skillFacadeEntrypoint = await confinedFile(\n root,\n manifest.skillFacadeEntrypoint.path,\n \"development skill facade\",\n );\n const materializerExecutable = await confinedFile(\n root,\n manifest.materializerExecutable.path,\n \"development materializer executable\",\n );\n const configuredFacade = await canonicalFile(facadeInput, \"configured development skill facade\");\n if (configuredFacade !== skillFacadeEntrypoint) {\n integrity(\n `${ARTIFACT_RUNTIME_ENVIRONMENT.toolEntrypoint} differs from the development manifest`,\n );\n }\n const kernelRoot = await confinedDirectory(\n root,\n manifest.kernelPackageRoot,\n \"kernel package root\",\n );\n const kernelEntrypoint = await confinedFile(\n kernelRoot,\n manifest.kernel.entrypoint.path,\n \"kernel entrypoint\",\n );\n const kernelAsset = await confinedFile(kernelRoot, manifest.kernel.asset.path, \"kernel asset\");\n const kernelSupportFiles = await Promise.all(\n manifest.kernel.supportFiles.map((file, index) =>\n confinedFile(kernelRoot, file.path, `kernel support file ${index}`),\n ),\n );\n\n const identityBytes = await readAndVerify(\n identityPath,\n manifest.artifactToolIdentity,\n MAX_IDENTITY_BYTES,\n \"artifact-tool identity\",\n );\n if (\n !sameBytes(identityBytes, canonicalDevelopmentArtifactToolIdentityBytes(manifest.artifactTool))\n ) {\n integrity(\"Development artifact-tool identity bytes differ from the manifest\");\n }\n const receiptBytes = await readAndVerify(\n receiptPath,\n manifest.receipt,\n MAX_RECEIPT_BYTES,\n \"kernel build receipt\",\n );\n const receipt = validateArtifactKernelBuildReceipt(\n parseJson(receiptBytes, \"kernel build receipt\"),\n manifest.target,\n );\n if (!sameBytes(receiptBytes, canonicalArtifactKernelBuildReceiptBytes(receipt))) {\n integrity(\"Development kernel receipt is not canonical\");\n }\n assertReceiptMatchesKernel(receipt, manifest.kernel);\n await verifyFile(\n skillFacadeEntrypoint,\n manifest.skillFacadeEntrypoint,\n MAX_JAVASCRIPT_BYTES,\n \"development skill facade\",\n );\n await verifyFile(\n materializerExecutable,\n manifest.materializerExecutable,\n MAX_MATERIALIZER_EXECUTABLE_BYTES,\n \"development materializer executable\",\n );\n await verifyFile(\n kernelEntrypoint,\n manifest.kernel.entrypoint,\n MAX_JAVASCRIPT_BYTES,\n \"kernel entrypoint\",\n );\n await verifyFile(kernelAsset, manifest.kernel.asset, MAX_KERNEL_ASSET_BYTES, \"kernel asset\");\n for (const [index, path] of kernelSupportFiles.entries()) {\n await verifyFile(\n path,\n manifest.kernel.supportFiles[index]!,\n MAX_JAVASCRIPT_BYTES,\n `kernel support file ${index}`,\n );\n }\n return Object.freeze({\n schemaVersion: 1,\n mode: \"development-current-host\",\n target: manifest.target,\n manifestPath,\n receiptPath,\n artifactTool: Object.freeze({ ...manifest.artifactTool }),\n skillFacadeEntrypoint,\n materializerExecutable,\n kernel: Object.freeze({\n packageName: manifest.kernel.packageName,\n packageVersion: manifest.kernel.packageVersion,\n entrypoint: kernelEntrypoint,\n asset: kernelAsset,\n supportFiles: Object.freeze(kernelSupportFiles),\n buildIdentity: manifest.kernel.buildIdentity,\n }),\n });\n}\n\nexport async function doctorVerifiedDevelopmentArtifactRuntime(\n options: {\n environment?: RuntimeEnvironment;\n expectedTarget?: NativeArtifactRuntimeTarget;\n importer?: (specifier: string) => unknown | Promise<unknown>;\n probe?: (module: Record<string, unknown>) => void | Promise<void>;\n } = {},\n): Promise<VerifiedDevelopmentArtifactRuntimeLocation> {\n const location = await locateVerifiedDevelopmentArtifactRuntime(options);\n let imported: unknown;\n try {\n imported = await (options.importer ?? defaultImporter)(\n pathToFileURL(location.skillFacadeEntrypoint).href,\n );\n } catch (cause) {\n throw new ArtifactRuntimeError(\n \"ARTIFACT_RUNTIME_UNAVAILABLE\",\n \"Verified development skill facade could not be evaluated\",\n { cause },\n );\n }\n if (!isRecord(imported)) incompatible(\"development skill facade returned an invalid module\");\n if (options.probe) await options.probe(imported);\n else probeVerifiedArtifactSkillFacade(imported, location);\n return location;\n}\n\nexport async function loadVerifiedDevelopmentArtifactKernelRuntime(\n options: {\n environment?: RuntimeEnvironment;\n expectedTarget?: NativeArtifactRuntimeTarget;\n } = {},\n): Promise<VerifiedConfiguredArtifactKernelRuntime> {\n const environment = options.environment ?? process.env;\n const expectedTarget = options.expectedTarget ?? currentNativeTarget();\n const before = await locateVerifiedDevelopmentArtifactRuntime({ environment, expectedTarget });\n const manifest = validateDevelopmentArtifactRuntimeManifest(\n parseJson(\n await readBoundedFile(\n before.manifestPath,\n MAX_MANIFEST_BYTES,\n \"development runtime manifest\",\n ),\n \"development runtime manifest\",\n ),\n expectedTarget,\n );\n const kernelRoot = pathToFileURL(\n `${resolve(before.manifestPath, \"..\", manifest.kernelPackageRoot)}/`,\n );\n const dependencies: ArtifactRuntimeKernelDependencies = {\n target: {\n target: manifest.target,\n kind: \"native\",\n packageName: manifest.kernel.packageName,\n platform: manifest.target.startsWith(\"darwin-\")\n ? \"darwin\"\n : manifest.target.startsWith(\"linux-\")\n ? \"linux\"\n : \"win32\",\n arch: manifest.target.includes(\"arm64\") ? \"arm64\" : \"x64\",\n ...(manifest.target.includes(\"-gnu\")\n ? { libc: \"gnu\" as const }\n : manifest.target.includes(\"-musl\")\n ? { libc: \"musl\" as const }\n : {}),\n },\n kernelEntrypoint: new URL(manifest.kernel.entrypoint.path, kernelRoot),\n manifest: {\n kernel: manifest.kernel,\n },\n };\n const runtime = await loadArtifactKernelRuntime(dependencies);\n const after = await locateVerifiedDevelopmentArtifactRuntime({ environment, expectedTarget });\n if (\n !sameJson(before, after) ||\n runtime.kind !== \"native\" ||\n runtime.target !== after.target ||\n runtime.buildIdentity !== after.kernel.buildIdentity\n ) {\n integrity(\"Loaded development kernel differs from its verified installation\");\n }\n return Object.freeze({ location: after, runtime });\n}\n\nexport async function doctorConfiguredArtifactRuntime(\n environment: RuntimeEnvironment = process.env,\n): Promise<ConfiguredArtifactRuntimeLocation> {\n return usesDevelopmentRuntime(environment)\n ? await doctorVerifiedDevelopmentArtifactRuntime({ environment })\n : await doctorVerifiedArtifactRuntime({ environment });\n}\n\nexport async function loadConfiguredArtifactKernelRuntime(\n environment: RuntimeEnvironment = process.env,\n): Promise<VerifiedConfiguredArtifactKernelRuntime> {\n return usesDevelopmentRuntime(environment)\n ? await loadVerifiedDevelopmentArtifactKernelRuntime({ environment })\n : await loadVerifiedArtifactKernelRuntime({ environment });\n}\n\nexport async function runConfiguredArtifactRuntimeCli(\n args: readonly string[],\n environment: RuntimeEnvironment = process.env,\n): Promise<string> {\n if (!usesDevelopmentRuntime(environment)) return await runArtifactRuntimeCli(args, environment);\n const [command, format, ...rest] = args;\n if ((command !== \"locate\" && command !== \"doctor\") || format !== \"--json\" || rest.length > 0) {\n invalid(\"Usage: opengeni-artifact-runtime <locate|doctor> --json\");\n }\n const location =\n command === \"doctor\"\n ? await doctorVerifiedDevelopmentArtifactRuntime({ environment })\n : await locateVerifiedDevelopmentArtifactRuntime({ environment });\n return `${JSON.stringify(location)}\\n`;\n}\n\nfunction usesDevelopmentRuntime(environment: RuntimeEnvironment): boolean {\n return Boolean(environment[DEVELOPMENT_ARTIFACT_RUNTIME_ENVIRONMENT.manifest]);\n}\n\nfunction assertDevelopmentEnvironment(environment: RuntimeEnvironment): void {\n if (environment.NODE_ENV === \"production\") {\n throw new ArtifactRuntimeError(\n \"ARTIFACT_RUNTIME_UNAVAILABLE\",\n \"Development artifact runtime is forbidden when NODE_ENV=production\",\n );\n }\n if (environment[ARTIFACT_RUNTIME_ENVIRONMENT.manifest]) {\n invalid(\"Production and development artifact runtime manifests cannot both be configured\");\n }\n}\n\nfunction currentNativeTarget(): NativeArtifactRuntimeTarget {\n const target = resolveCurrentArtifactRuntimeTarget();\n if (target === \"wasm-web\") {\n throw new ArtifactRuntimeError(\n \"ARTIFACT_RUNTIME_UNSUPPORTED_TARGET\",\n \"Development server runtime requires a native host\",\n );\n }\n return target;\n}\n\nfunction assertReceiptMatchesKernel(\n receipt: ArtifactKernelBuildReceipt,\n kernel: ArtifactKernelPackageManifest,\n): void {\n const runtimeFiles = [kernel.asset, ...kernel.supportFiles].sort((left, right) =>\n left.path < right.path ? -1 : left.path > right.path ? 1 : 0,\n );\n if (\n receipt.buildIdentity !== kernel.buildIdentity ||\n !sameJson(receipt.runtimeFiles, runtimeFiles)\n ) {\n integrity(\"Development build receipt differs from its kernel manifest\");\n }\n}\n\nasync function confinedFile(root: string, path: string, name: string): Promise<string> {\n return await confined(root, path, name, \"file\");\n}\n\nasync function confinedDirectory(root: string, path: string, name: string): Promise<string> {\n return await confined(root, path, name, \"directory\");\n}\n\nasync function confined(\n root: string,\n path: string,\n name: string,\n kind: \"file\" | \"directory\",\n): Promise<string> {\n const candidate = await realpath(resolve(root, path)).catch((cause) => {\n throw new ArtifactRuntimeError(\"ARTIFACT_RUNTIME_UNAVAILABLE\", `${name} is unavailable`, {\n cause,\n });\n });\n const fromRoot = relative(root, candidate);\n if (\n fromRoot === \"..\" ||\n fromRoot.startsWith(`..${process.platform === \"win32\" ? \"\\\\\" : \"/\"}`) ||\n isAbsolute(fromRoot)\n ) {\n invalid(`${name} resolves outside the development installation`);\n }\n const metadata = await stat(candidate);\n if (\n (kind === \"file\" && !metadata.isFile()) ||\n (kind === \"directory\" && !metadata.isDirectory())\n ) {\n throw new ArtifactRuntimeError(\"ARTIFACT_RUNTIME_UNAVAILABLE\", `${name} is not a ${kind}`);\n }\n return candidate;\n}\n\nasync function canonicalFile(input: string, name: string): Promise<string> {\n if (!isAbsolute(input)) invalid(`${name} path must be absolute`);\n try {\n const path = await realpath(input);\n if (!(await stat(path)).isFile()) throw new Error(\"not a file\");\n return path;\n } catch (cause) {\n throw new ArtifactRuntimeError(\"ARTIFACT_RUNTIME_UNAVAILABLE\", `${name} is unavailable`, {\n cause,\n });\n }\n}\n\nasync function readAndVerify(\n path: string,\n expected: FileDescriptor,\n maximumBytes: number,\n name: string,\n): Promise<Uint8Array> {\n const bytes = await readBoundedFile(path, maximumBytes, name);\n if (bytes.byteLength !== expected.bytes || sha256(bytes) !== expected.sha256) {\n integrity(`${name} differs from the development manifest`);\n }\n return bytes;\n}\n\nasync function verifyFile(\n path: string,\n expected: FileDescriptor,\n maximumBytes: number,\n name: string,\n): Promise<void> {\n await readAndVerify(path, expected, maximumBytes, name);\n}\n\nasync function readBoundedFile(\n path: string,\n maximumBytes: number,\n name: string,\n): Promise<Uint8Array> {\n let handle;\n try {\n handle = await open(path, \"r\");\n const before = await handle.stat();\n if (!before.isFile() || before.size <= 0 || before.size > maximumBytes) {\n integrity(`${name} size is invalid`);\n }\n const bytes = new Uint8Array(await handle.readFile());\n const after = await handle.stat();\n if (after.size !== before.size || bytes.byteLength !== before.size) {\n integrity(`${name} changed while reading`);\n }\n return bytes;\n } catch (cause) {\n if (cause instanceof ArtifactRuntimeError) throw cause;\n throw new ArtifactRuntimeError(\"ARTIFACT_RUNTIME_UNAVAILABLE\", `Could not read ${name}`, {\n cause,\n });\n } finally {\n await handle?.close();\n }\n}\n\nfunction fileDescriptor(value: unknown, name: string): FileDescriptor {\n const record = exactRecord(value, [\"path\", \"bytes\", \"sha256\"], name);\n if (!Number.isSafeInteger(record.bytes) || (record.bytes as number) <= 0) {\n invalid(`${name} byte size is invalid`);\n }\n return Object.freeze({\n path: safeRelativePath(record.path, `${name} path`),\n bytes: record.bytes as number,\n sha256: digest(record.sha256, `${name} digest`),\n });\n}\n\nfunction safeRelativePath(value: unknown, name: string): string {\n if (\n typeof value !== \"string\" ||\n value.length === 0 ||\n value.length > 1024 ||\n value.startsWith(\"/\") ||\n value.startsWith(\"\\\\\") ||\n value.includes(\"\\\\\") ||\n value.split(\"/\").some((part) => part === \"\" || part === \".\" || part === \"..\") ||\n /[%?#\\0]/u.test(value)\n ) {\n invalid(`${name} must be a normalized relative path`);\n }\n return value;\n}\n\nfunction digest(value: unknown, name: string): `sha256:${string}` {\n if (typeof value !== \"string\" || !/^sha256:[0-9a-f]{64}$/u.test(value)) {\n invalid(`${name} is invalid`);\n }\n return value as `sha256:${string}`;\n}\n\nfunction stableVersion(value: unknown): value is string {\n return (\n typeof value === \"string\" && /^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)$/u.test(value)\n );\n}\n\nfunction requiredPath(environment: RuntimeEnvironment, name: string): string {\n const value = environment[name];\n if (!value) {\n throw new ArtifactRuntimeError(\"ARTIFACT_RUNTIME_UNAVAILABLE\", `${name} is required`);\n }\n return value;\n}\n\nfunction parseJson(bytes: Uint8Array, name: string): unknown {\n try {\n return JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes));\n } catch (cause) {\n throw new ArtifactRuntimeError(\n \"ARTIFACT_RUNTIME_MANIFEST_INVALID\",\n `${name} is not strict UTF-8 JSON`,\n { cause },\n );\n }\n}\n\nfunction exactRecord(\n value: unknown,\n keys: readonly string[],\n name: string,\n): Record<string, unknown> {\n if (!isRecord(value)) invalid(`${name} is invalid`);\n if (JSON.stringify(Object.keys(value).sort()) !== JSON.stringify([...keys].sort())) {\n invalid(`${name} has unexpected fields`);\n }\n return value;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction sha256(value: Uint8Array): `sha256:${string}` {\n return `sha256:${createHash(\"sha256\").update(value).digest(\"hex\")}`;\n}\n\nfunction sameJson(left: unknown, right: unknown): boolean {\n return JSON.stringify(left) === JSON.stringify(right);\n}\n\nfunction sameBytes(left: Uint8Array, right: Uint8Array): boolean {\n return left.byteLength === right.byteLength && left.every((byte, index) => byte === right[index]);\n}\n\nfunction defaultImporter(specifier: string): Promise<unknown> {\n return import(/* @vite-ignore */ specifier);\n}\n\nfunction invalid(message: string): never {\n throw new ArtifactRuntimeError(\"ARTIFACT_RUNTIME_MANIFEST_INVALID\", message);\n}\n\nfunction integrity(message: string): never {\n throw new ArtifactRuntimeError(\"ARTIFACT_RUNTIME_INTEGRITY\", message);\n}\n\nfunction incompatible(message: string): never {\n throw new ArtifactRuntimeError(\"ARTIFACT_RUNTIME_INCOMPATIBLE\", message);\n}\n","import {\n ARTIFACT_RUNTIME_TARGETS,\n ArtifactRuntimeError,\n artifactRuntimeTarget,\n type ArtifactRuntimeTarget,\n} from \"./runtime\";\n\nconst NATIVE_ASSET = \"opengeni_artifact_kernel.node\";\nconst WASM_RUNTIME_FILES = [\n \"artifact_kernel.js\",\n \"artifact_kernel_bg.wasm\",\n \"artifact_kernel_document.js\",\n \"artifact_kernel_document_bg.wasm\",\n \"artifact_kernel_presentation.js\",\n \"artifact_kernel_presentation_bg.wasm\",\n \"artifact_kernel_spreadsheet.js\",\n \"artifact_kernel_spreadsheet_bg.wasm\",\n] as const;\nconst MAX_CAPABILITIES_BYTES = 1024 * 1024;\n\nexport type ArtifactKernelBuildReceipt = Readonly<{\n schemaVersion: 1;\n producer: \"opengeni-artifact-kernel-smoke-v1\";\n target: ArtifactRuntimeTarget;\n kind: \"native\" | \"wasm\";\n buildIdentity: string;\n capabilities: Readonly<{\n bytes: number;\n sha256: `sha256:${string}`;\n }>;\n runtimeFiles: readonly Readonly<{\n path: string;\n bytes: number;\n sha256: `sha256:${string}`;\n }>[];\n}>;\n\nexport function validateArtifactKernelBuildReceipt(\n value: unknown,\n expectedTarget?: ArtifactRuntimeTarget,\n): ArtifactKernelBuildReceipt {\n const record = exactRecord(\n value,\n [\n \"schemaVersion\",\n \"producer\",\n \"target\",\n \"kind\",\n \"buildIdentity\",\n \"capabilities\",\n \"runtimeFiles\",\n ],\n \"target build receipt\",\n );\n if (record.schemaVersion !== 1 || record.producer !== \"opengeni-artifact-kernel-smoke-v1\") {\n invalid(\"target build receipt schema/producer is invalid\");\n }\n if (\n typeof record.target !== \"string\" ||\n !ARTIFACT_RUNTIME_TARGETS.includes(record.target as ArtifactRuntimeTarget)\n ) {\n invalid(\"target build receipt target is invalid\");\n }\n const descriptor = artifactRuntimeTarget(record.target as ArtifactRuntimeTarget);\n if (expectedTarget !== undefined && descriptor.target !== expectedTarget) {\n invalid(`target build receipt ${descriptor.target} does not match ${expectedTarget}`);\n }\n if (record.kind !== descriptor.kind) invalid(\"target build receipt kind is invalid\");\n if (\n typeof record.buildIdentity !== \"string\" ||\n record.buildIdentity.length === 0 ||\n record.buildIdentity.length > 512\n ) {\n invalid(\"target build receipt identity is invalid\");\n }\n const capabilities = fileProof(record.capabilities, \"target build capabilities\", false);\n if (capabilities.bytes > MAX_CAPABILITIES_BYTES) {\n invalid(\"target build capabilities exceed their maximum size\");\n }\n if (\n !Array.isArray(record.runtimeFiles) ||\n record.runtimeFiles.length === 0 ||\n record.runtimeFiles.length > 8\n ) {\n invalid(\"target build receipt runtimeFiles is invalid\");\n }\n const runtimeFiles = record.runtimeFiles.map((entry, index) =>\n fileProof(entry, `target build runtime file ${index}`, true),\n );\n if (\n !runtimeFiles.every((entry, index) => index === 0 || runtimeFiles[index - 1]!.path < entry.path)\n ) {\n invalid(\"target build receipt runtimeFiles must be strictly sorted\");\n }\n const expectedPaths = descriptor.kind === \"native\" ? [NATIVE_ASSET] : WASM_RUNTIME_FILES;\n if (JSON.stringify(runtimeFiles.map(({ path }) => path)) !== JSON.stringify(expectedPaths)) {\n invalid(\"target build receipt runtimeFiles do not match the target package\");\n }\n return {\n schemaVersion: 1,\n producer: \"opengeni-artifact-kernel-smoke-v1\",\n target: descriptor.target,\n kind: descriptor.kind,\n buildIdentity: record.buildIdentity,\n capabilities: { bytes: capabilities.bytes, sha256: capabilities.sha256 },\n runtimeFiles,\n };\n}\n\nexport function canonicalArtifactKernelBuildReceiptBytes(value: unknown): Uint8Array {\n const receipt = validateArtifactKernelBuildReceipt(value);\n return new TextEncoder().encode(`${JSON.stringify(receipt, null, 2)}\\n`);\n}\n\nfunction fileProof(\n value: unknown,\n name: string,\n includePath: true,\n): { path: string; bytes: number; sha256: `sha256:${string}` };\nfunction fileProof(\n value: unknown,\n name: string,\n includePath: false,\n): { bytes: number; sha256: `sha256:${string}` };\nfunction fileProof(value: unknown, name: string, includePath: boolean) {\n const record = exactRecord(\n value,\n includePath ? [\"path\", \"bytes\", \"sha256\"] : [\"bytes\", \"sha256\"],\n name,\n );\n const bytes = record.bytes;\n const digest = record.sha256;\n if (!Number.isSafeInteger(bytes) || (bytes as number) <= 0) invalid(`${name} bytes is invalid`);\n if (typeof digest !== \"string\" || !/^sha256:[0-9a-f]{64}$/u.test(digest)) {\n invalid(`${name} digest is invalid`);\n }\n if (!includePath) return { bytes: bytes as number, sha256: digest as `sha256:${string}` };\n const path = record.path;\n if (\n typeof path !== \"string\" ||\n path.length === 0 ||\n path.includes(\"/\") ||\n path.includes(\"\\\\\") ||\n path === \".\" ||\n path === \"..\"\n ) {\n invalid(`${name} path is invalid`);\n }\n return { path, bytes: bytes as number, sha256: digest as `sha256:${string}` };\n}\n\nfunction exactRecord(\n value: unknown,\n keys: readonly string[],\n name: string,\n): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n invalid(`${name} is invalid`);\n }\n const record = value as Record<string, unknown>;\n if (JSON.stringify(Object.keys(record).sort()) !== JSON.stringify([...keys].sort())) {\n invalid(`${name} has unexpected fields`);\n }\n return record;\n}\n\nfunction invalid(message: string): never {\n throw new ArtifactRuntimeError(\"ARTIFACT_RUNTIME_MANIFEST_INVALID\", message);\n}\n"],"mappings":"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","names":["digest","exactRecord","invalid"]}
1
+ {"version":3,"sources":["../src/runtime-development.ts","../src/runtime-receipt.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { open, realpath, stat } from \"node:fs/promises\";\nimport { isAbsolute, relative, resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport {\n canonicalArtifactKernelBuildReceiptBytes,\n validateArtifactKernelBuildReceipt,\n type ArtifactKernelBuildReceipt,\n} from \"./runtime-receipt\";\nimport {\n ARTIFACT_RUNTIME_ENVIRONMENT,\n ArtifactRuntimeError,\n loadArtifactKernelRuntime,\n validateArtifactKernelPackageManifest,\n type ArtifactKernelPackageManifest,\n type ArtifactKernelRuntime,\n type ArtifactRuntimeKernelDependencies,\n type NativeArtifactRuntimeTarget,\n} from \"./runtime\";\nimport {\n doctorVerifiedArtifactRuntime,\n loadVerifiedArtifactKernelRuntime,\n probeVerifiedArtifactSkillFacade,\n resolveCurrentArtifactRuntimeTarget,\n runArtifactRuntimeCli,\n type VerifiedArtifactRuntimeLocation,\n} from \"./runtime-cli\";\n\nexport const DEVELOPMENT_ARTIFACT_RUNTIME_ENVIRONMENT = {\n manifest: \"OPENGENI_ARTIFACT_DEVELOPMENT_RUNTIME_MANIFEST\",\n} as const;\n\nconst MAX_MANIFEST_BYTES = 256 * 1024;\nconst MAX_IDENTITY_BYTES = 64 * 1024;\nconst MAX_RECEIPT_BYTES = 256 * 1024;\nconst MAX_JAVASCRIPT_BYTES = 32 * 1024 * 1024;\nconst MAX_KERNEL_ASSET_BYTES = 512 * 1024 * 1024;\nconst MAX_MATERIALIZER_EXECUTABLE_BYTES = 512 * 1024 * 1024;\n\ntype RuntimeEnvironment = Readonly<Record<string, string | undefined>>;\ntype FileDescriptor = Readonly<{\n path: string;\n bytes: number;\n sha256: `sha256:${string}`;\n}>;\n\nexport type DevelopmentArtifactRuntimeManifest = Readonly<{\n schemaVersion: 1;\n mode: \"development-current-host\";\n target: NativeArtifactRuntimeTarget;\n sourceFingerprint: `sha256:${string}`;\n artifactTool: Readonly<{\n packageName: \"@opengeni/artifact-tool\";\n packageVersion: string;\n }>;\n artifactToolIdentity: FileDescriptor;\n receipt: FileDescriptor;\n skillFacadeEntrypoint: FileDescriptor;\n materializerExecutable: FileDescriptor;\n kernelPackageRoot: string;\n kernel: ArtifactKernelPackageManifest;\n}>;\n\nexport type VerifiedDevelopmentArtifactRuntimeLocation = Readonly<{\n schemaVersion: 1;\n mode: \"development-current-host\";\n target: NativeArtifactRuntimeTarget;\n manifestPath: string;\n receiptPath: string;\n artifactTool: DevelopmentArtifactRuntimeManifest[\"artifactTool\"];\n skillFacadeEntrypoint: string;\n materializerExecutable: string;\n kernel: Readonly<{\n packageName: string;\n packageVersion: string;\n entrypoint: string;\n asset: string;\n supportFiles: readonly string[];\n buildIdentity: string;\n }>;\n}>;\n\nexport type ConfiguredArtifactRuntimeLocation =\n | VerifiedArtifactRuntimeLocation\n | VerifiedDevelopmentArtifactRuntimeLocation;\n\nexport type VerifiedConfiguredArtifactKernelRuntime = Readonly<{\n location: ConfiguredArtifactRuntimeLocation;\n runtime: ArtifactKernelRuntime;\n}>;\n\n/** True when any production/development runtime authority was explicitly supplied. */\nexport function isArtifactRuntimeConfigured(\n environment: RuntimeEnvironment = process.env,\n): boolean {\n return [\n ARTIFACT_RUNTIME_ENVIRONMENT.manifest,\n ARTIFACT_RUNTIME_ENVIRONMENT.toolEntrypoint,\n DEVELOPMENT_ARTIFACT_RUNTIME_ENVIRONMENT.manifest,\n ].some((name) => typeof environment[name] === \"string\");\n}\n\nexport function validateDevelopmentArtifactRuntimeManifest(\n value: unknown,\n expectedTarget?: NativeArtifactRuntimeTarget,\n): DevelopmentArtifactRuntimeManifest {\n const record = exactRecord(\n value,\n [\n \"schemaVersion\",\n \"mode\",\n \"target\",\n \"sourceFingerprint\",\n \"artifactTool\",\n \"artifactToolIdentity\",\n \"receipt\",\n \"skillFacadeEntrypoint\",\n \"materializerExecutable\",\n \"kernelPackageRoot\",\n \"kernel\",\n ],\n \"development runtime manifest\",\n );\n if (record.schemaVersion !== 1 || record.mode !== \"development-current-host\") {\n invalid(\"development runtime schema/mode is invalid\");\n }\n if (record.target === \"wasm-web\") invalid(\"development server runtime must be native\");\n const kernel = validateArtifactKernelPackageManifest(record.kernel);\n if (kernel.kind !== \"native\" || kernel.target !== record.target) {\n invalid(\"development runtime target differs from its native kernel\");\n }\n if (expectedTarget && kernel.target !== expectedTarget) {\n invalid(`development runtime target ${kernel.target} does not match ${expectedTarget}`);\n }\n const artifactTool = exactRecord(\n record.artifactTool,\n [\"packageName\", \"packageVersion\"],\n \"development artifact-tool identity\",\n );\n if (\n artifactTool.packageName !== \"@opengeni/artifact-tool\" ||\n artifactTool.packageVersion !== kernel.artifactToolVersion\n ) {\n invalid(\"development artifact-tool identity differs from its kernel\");\n }\n return Object.freeze({\n schemaVersion: 1,\n mode: \"development-current-host\",\n target: kernel.target as NativeArtifactRuntimeTarget,\n sourceFingerprint: digest(record.sourceFingerprint, \"development source fingerprint\"),\n artifactTool: Object.freeze({\n packageName: \"@opengeni/artifact-tool\",\n packageVersion: kernel.artifactToolVersion,\n }),\n artifactToolIdentity: fileDescriptor(\n record.artifactToolIdentity,\n \"development artifact-tool identity file\",\n ),\n receipt: fileDescriptor(record.receipt, \"development build receipt\"),\n skillFacadeEntrypoint: fileDescriptor(record.skillFacadeEntrypoint, \"development skill facade\"),\n materializerExecutable: fileDescriptor(\n record.materializerExecutable,\n \"development materializer executable\",\n ),\n kernelPackageRoot: safeRelativePath(record.kernelPackageRoot, \"development kernel root\"),\n kernel,\n });\n}\n\nexport function canonicalDevelopmentArtifactRuntimeManifestBytes(value: unknown): Uint8Array {\n const manifest = validateDevelopmentArtifactRuntimeManifest(value);\n return new TextEncoder().encode(`${JSON.stringify(manifest, null, 2)}\\n`);\n}\n\nexport function canonicalDevelopmentArtifactToolIdentityBytes(\n artifactTool: DevelopmentArtifactRuntimeManifest[\"artifactTool\"],\n): Uint8Array {\n if (\n artifactTool.packageName !== \"@opengeni/artifact-tool\" ||\n !stableVersion(artifactTool.packageVersion)\n ) {\n invalid(\"development artifact-tool identity is invalid\");\n }\n return new TextEncoder().encode(`${JSON.stringify(artifactTool, null, 2)}\\n`);\n}\n\nexport async function locateVerifiedDevelopmentArtifactRuntime(\n options: {\n environment?: RuntimeEnvironment;\n expectedTarget?: NativeArtifactRuntimeTarget;\n } = {},\n): Promise<VerifiedDevelopmentArtifactRuntimeLocation> {\n const environment = options.environment ?? process.env;\n assertDevelopmentEnvironment(environment);\n const expectedTarget = options.expectedTarget ?? currentNativeTarget();\n const manifestInput = requiredPath(\n environment,\n DEVELOPMENT_ARTIFACT_RUNTIME_ENVIRONMENT.manifest,\n );\n const facadeInput = requiredPath(environment, ARTIFACT_RUNTIME_ENVIRONMENT.toolEntrypoint);\n const manifestPath = await canonicalFile(manifestInput, \"development runtime manifest\");\n const manifestBytes = await readBoundedFile(\n manifestPath,\n MAX_MANIFEST_BYTES,\n \"development runtime manifest\",\n );\n const manifest = validateDevelopmentArtifactRuntimeManifest(\n parseJson(manifestBytes, \"development runtime manifest\"),\n expectedTarget,\n );\n if (!sameBytes(manifestBytes, canonicalDevelopmentArtifactRuntimeManifestBytes(manifest))) {\n integrity(\"Development runtime manifest is not canonical\");\n }\n const root = await realpath(resolve(manifestPath, \"..\"));\n const identityPath = await confinedFile(\n root,\n manifest.artifactToolIdentity.path,\n \"artifact-tool identity\",\n );\n const receiptPath = await confinedFile(root, manifest.receipt.path, \"kernel build receipt\");\n const skillFacadeEntrypoint = await confinedFile(\n root,\n manifest.skillFacadeEntrypoint.path,\n \"development skill facade\",\n );\n const materializerExecutable = await confinedFile(\n root,\n manifest.materializerExecutable.path,\n \"development materializer executable\",\n );\n const configuredFacade = await canonicalFile(facadeInput, \"configured development skill facade\");\n if (configuredFacade !== skillFacadeEntrypoint) {\n integrity(\n `${ARTIFACT_RUNTIME_ENVIRONMENT.toolEntrypoint} differs from the development manifest`,\n );\n }\n const kernelRoot = await confinedDirectory(\n root,\n manifest.kernelPackageRoot,\n \"kernel package root\",\n );\n const kernelEntrypoint = await confinedFile(\n kernelRoot,\n manifest.kernel.entrypoint.path,\n \"kernel entrypoint\",\n );\n const kernelAsset = await confinedFile(kernelRoot, manifest.kernel.asset.path, \"kernel asset\");\n const kernelSupportFiles = await Promise.all(\n manifest.kernel.supportFiles.map((file, index) =>\n confinedFile(kernelRoot, file.path, `kernel support file ${index}`),\n ),\n );\n\n const identityBytes = await readAndVerify(\n identityPath,\n manifest.artifactToolIdentity,\n MAX_IDENTITY_BYTES,\n \"artifact-tool identity\",\n );\n if (\n !sameBytes(identityBytes, canonicalDevelopmentArtifactToolIdentityBytes(manifest.artifactTool))\n ) {\n integrity(\"Development artifact-tool identity bytes differ from the manifest\");\n }\n const receiptBytes = await readAndVerify(\n receiptPath,\n manifest.receipt,\n MAX_RECEIPT_BYTES,\n \"kernel build receipt\",\n );\n const receipt = validateArtifactKernelBuildReceipt(\n parseJson(receiptBytes, \"kernel build receipt\"),\n manifest.target,\n );\n if (!sameBytes(receiptBytes, canonicalArtifactKernelBuildReceiptBytes(receipt))) {\n integrity(\"Development kernel receipt is not canonical\");\n }\n assertReceiptMatchesKernel(receipt, manifest.kernel);\n await verifyFile(\n skillFacadeEntrypoint,\n manifest.skillFacadeEntrypoint,\n MAX_JAVASCRIPT_BYTES,\n \"development skill facade\",\n );\n await verifyFile(\n materializerExecutable,\n manifest.materializerExecutable,\n MAX_MATERIALIZER_EXECUTABLE_BYTES,\n \"development materializer executable\",\n );\n await verifyFile(\n kernelEntrypoint,\n manifest.kernel.entrypoint,\n MAX_JAVASCRIPT_BYTES,\n \"kernel entrypoint\",\n );\n await verifyFile(kernelAsset, manifest.kernel.asset, MAX_KERNEL_ASSET_BYTES, \"kernel asset\");\n for (const [index, path] of kernelSupportFiles.entries()) {\n await verifyFile(\n path,\n manifest.kernel.supportFiles[index]!,\n MAX_JAVASCRIPT_BYTES,\n `kernel support file ${index}`,\n );\n }\n return Object.freeze({\n schemaVersion: 1,\n mode: \"development-current-host\",\n target: manifest.target,\n manifestPath,\n receiptPath,\n artifactTool: Object.freeze({ ...manifest.artifactTool }),\n skillFacadeEntrypoint,\n materializerExecutable,\n kernel: Object.freeze({\n packageName: manifest.kernel.packageName,\n packageVersion: manifest.kernel.packageVersion,\n entrypoint: kernelEntrypoint,\n asset: kernelAsset,\n supportFiles: Object.freeze(kernelSupportFiles),\n buildIdentity: manifest.kernel.buildIdentity,\n }),\n });\n}\n\nexport async function doctorVerifiedDevelopmentArtifactRuntime(\n options: {\n environment?: RuntimeEnvironment;\n expectedTarget?: NativeArtifactRuntimeTarget;\n importer?: (specifier: string) => unknown | Promise<unknown>;\n probe?: (module: Record<string, unknown>) => void | Promise<void>;\n } = {},\n): Promise<VerifiedDevelopmentArtifactRuntimeLocation> {\n const location = await locateVerifiedDevelopmentArtifactRuntime(options);\n let imported: unknown;\n try {\n imported = await (options.importer ?? defaultImporter)(\n pathToFileURL(location.skillFacadeEntrypoint).href,\n );\n } catch (cause) {\n throw new ArtifactRuntimeError(\n \"ARTIFACT_RUNTIME_UNAVAILABLE\",\n \"Verified development skill facade could not be evaluated\",\n { cause },\n );\n }\n if (!isRecord(imported)) incompatible(\"development skill facade returned an invalid module\");\n if (options.probe) await options.probe(imported);\n else probeVerifiedArtifactSkillFacade(imported, location);\n return location;\n}\n\nexport async function loadVerifiedDevelopmentArtifactKernelRuntime(\n options: {\n environment?: RuntimeEnvironment;\n expectedTarget?: NativeArtifactRuntimeTarget;\n } = {},\n): Promise<VerifiedConfiguredArtifactKernelRuntime> {\n const environment = options.environment ?? process.env;\n const expectedTarget = options.expectedTarget ?? currentNativeTarget();\n const before = await locateVerifiedDevelopmentArtifactRuntime({ environment, expectedTarget });\n const manifest = validateDevelopmentArtifactRuntimeManifest(\n parseJson(\n await readBoundedFile(\n before.manifestPath,\n MAX_MANIFEST_BYTES,\n \"development runtime manifest\",\n ),\n \"development runtime manifest\",\n ),\n expectedTarget,\n );\n const kernelRoot = pathToFileURL(\n `${resolve(before.manifestPath, \"..\", manifest.kernelPackageRoot)}/`,\n );\n const dependencies: ArtifactRuntimeKernelDependencies = {\n target: {\n target: manifest.target,\n kind: \"native\",\n packageName: manifest.kernel.packageName,\n platform: manifest.target.startsWith(\"darwin-\")\n ? \"darwin\"\n : manifest.target.startsWith(\"linux-\")\n ? \"linux\"\n : \"win32\",\n arch: manifest.target.includes(\"arm64\") ? \"arm64\" : \"x64\",\n ...(manifest.target.includes(\"-gnu\")\n ? { libc: \"gnu\" as const }\n : manifest.target.includes(\"-musl\")\n ? { libc: \"musl\" as const }\n : {}),\n },\n kernelEntrypoint: new URL(manifest.kernel.entrypoint.path, kernelRoot),\n manifest: {\n kernel: manifest.kernel,\n },\n };\n const runtime = await loadArtifactKernelRuntime(dependencies);\n const after = await locateVerifiedDevelopmentArtifactRuntime({ environment, expectedTarget });\n if (\n !sameJson(before, after) ||\n runtime.kind !== \"native\" ||\n runtime.target !== after.target ||\n runtime.buildIdentity !== after.kernel.buildIdentity\n ) {\n integrity(\"Loaded development kernel differs from its verified installation\");\n }\n return Object.freeze({ location: after, runtime });\n}\n\nexport async function doctorConfiguredArtifactRuntime(\n environment: RuntimeEnvironment = process.env,\n): Promise<ConfiguredArtifactRuntimeLocation> {\n return usesDevelopmentRuntime(environment)\n ? await doctorVerifiedDevelopmentArtifactRuntime({ environment })\n : await doctorVerifiedArtifactRuntime({ environment });\n}\n\nexport async function loadConfiguredArtifactKernelRuntime(\n environment: RuntimeEnvironment = process.env,\n): Promise<VerifiedConfiguredArtifactKernelRuntime> {\n return usesDevelopmentRuntime(environment)\n ? await loadVerifiedDevelopmentArtifactKernelRuntime({ environment })\n : await loadVerifiedArtifactKernelRuntime({ environment });\n}\n\nexport async function runConfiguredArtifactRuntimeCli(\n args: readonly string[],\n environment: RuntimeEnvironment = process.env,\n): Promise<string> {\n if (!usesDevelopmentRuntime(environment)) return await runArtifactRuntimeCli(args, environment);\n const [command, format, ...rest] = args;\n if ((command !== \"locate\" && command !== \"doctor\") || format !== \"--json\" || rest.length > 0) {\n invalid(\"Usage: opengeni-artifact-runtime <locate|doctor> --json\");\n }\n const location =\n command === \"doctor\"\n ? await doctorVerifiedDevelopmentArtifactRuntime({ environment })\n : await locateVerifiedDevelopmentArtifactRuntime({ environment });\n return `${JSON.stringify(location)}\\n`;\n}\n\nfunction usesDevelopmentRuntime(environment: RuntimeEnvironment): boolean {\n return Boolean(environment[DEVELOPMENT_ARTIFACT_RUNTIME_ENVIRONMENT.manifest]);\n}\n\nfunction assertDevelopmentEnvironment(environment: RuntimeEnvironment): void {\n if (environment.NODE_ENV === \"production\") {\n throw new ArtifactRuntimeError(\n \"ARTIFACT_RUNTIME_UNAVAILABLE\",\n \"Development artifact runtime is forbidden when NODE_ENV=production\",\n );\n }\n if (environment[ARTIFACT_RUNTIME_ENVIRONMENT.manifest]) {\n invalid(\"Production and development artifact runtime manifests cannot both be configured\");\n }\n}\n\nfunction currentNativeTarget(): NativeArtifactRuntimeTarget {\n const target = resolveCurrentArtifactRuntimeTarget();\n if (target === \"wasm-web\") {\n throw new ArtifactRuntimeError(\n \"ARTIFACT_RUNTIME_UNSUPPORTED_TARGET\",\n \"Development server runtime requires a native host\",\n );\n }\n return target;\n}\n\nfunction assertReceiptMatchesKernel(\n receipt: ArtifactKernelBuildReceipt,\n kernel: ArtifactKernelPackageManifest,\n): void {\n const runtimeFiles = [kernel.asset, ...kernel.supportFiles].sort((left, right) =>\n left.path < right.path ? -1 : left.path > right.path ? 1 : 0,\n );\n if (\n receipt.buildIdentity !== kernel.buildIdentity ||\n !sameJson(receipt.runtimeFiles, runtimeFiles)\n ) {\n integrity(\"Development build receipt differs from its kernel manifest\");\n }\n}\n\nasync function confinedFile(root: string, path: string, name: string): Promise<string> {\n return await confined(root, path, name, \"file\");\n}\n\nasync function confinedDirectory(root: string, path: string, name: string): Promise<string> {\n return await confined(root, path, name, \"directory\");\n}\n\nasync function confined(\n root: string,\n path: string,\n name: string,\n kind: \"file\" | \"directory\",\n): Promise<string> {\n const candidate = await realpath(resolve(root, path)).catch((cause) => {\n throw new ArtifactRuntimeError(\"ARTIFACT_RUNTIME_UNAVAILABLE\", `${name} is unavailable`, {\n cause,\n });\n });\n const fromRoot = relative(root, candidate);\n if (\n fromRoot === \"..\" ||\n fromRoot.startsWith(`..${process.platform === \"win32\" ? \"\\\\\" : \"/\"}`) ||\n isAbsolute(fromRoot)\n ) {\n invalid(`${name} resolves outside the development installation`);\n }\n const metadata = await stat(candidate);\n if (\n (kind === \"file\" && !metadata.isFile()) ||\n (kind === \"directory\" && !metadata.isDirectory())\n ) {\n throw new ArtifactRuntimeError(\"ARTIFACT_RUNTIME_UNAVAILABLE\", `${name} is not a ${kind}`);\n }\n return candidate;\n}\n\nasync function canonicalFile(input: string, name: string): Promise<string> {\n if (!isAbsolute(input)) invalid(`${name} path must be absolute`);\n try {\n const path = await realpath(input);\n if (!(await stat(path)).isFile()) throw new Error(\"not a file\");\n return path;\n } catch (cause) {\n throw new ArtifactRuntimeError(\"ARTIFACT_RUNTIME_UNAVAILABLE\", `${name} is unavailable`, {\n cause,\n });\n }\n}\n\nasync function readAndVerify(\n path: string,\n expected: FileDescriptor,\n maximumBytes: number,\n name: string,\n): Promise<Uint8Array> {\n const bytes = await readBoundedFile(path, maximumBytes, name);\n if (bytes.byteLength !== expected.bytes || sha256(bytes) !== expected.sha256) {\n integrity(`${name} differs from the development manifest`);\n }\n return bytes;\n}\n\nasync function verifyFile(\n path: string,\n expected: FileDescriptor,\n maximumBytes: number,\n name: string,\n): Promise<void> {\n await readAndVerify(path, expected, maximumBytes, name);\n}\n\nasync function readBoundedFile(\n path: string,\n maximumBytes: number,\n name: string,\n): Promise<Uint8Array> {\n let handle;\n try {\n handle = await open(path, \"r\");\n const before = await handle.stat();\n if (!before.isFile() || before.size <= 0 || before.size > maximumBytes) {\n integrity(`${name} size is invalid`);\n }\n const bytes = new Uint8Array(await handle.readFile());\n const after = await handle.stat();\n if (after.size !== before.size || bytes.byteLength !== before.size) {\n integrity(`${name} changed while reading`);\n }\n return bytes;\n } catch (cause) {\n if (cause instanceof ArtifactRuntimeError) throw cause;\n throw new ArtifactRuntimeError(\"ARTIFACT_RUNTIME_UNAVAILABLE\", `Could not read ${name}`, {\n cause,\n });\n } finally {\n await handle?.close();\n }\n}\n\nfunction fileDescriptor(value: unknown, name: string): FileDescriptor {\n const record = exactRecord(value, [\"path\", \"bytes\", \"sha256\"], name);\n if (!Number.isSafeInteger(record.bytes) || (record.bytes as number) <= 0) {\n invalid(`${name} byte size is invalid`);\n }\n return Object.freeze({\n path: safeRelativePath(record.path, `${name} path`),\n bytes: record.bytes as number,\n sha256: digest(record.sha256, `${name} digest`),\n });\n}\n\nfunction safeRelativePath(value: unknown, name: string): string {\n if (\n typeof value !== \"string\" ||\n value.length === 0 ||\n value.length > 1024 ||\n value.startsWith(\"/\") ||\n value.startsWith(\"\\\\\") ||\n value.includes(\"\\\\\") ||\n value.split(\"/\").some((part) => part === \"\" || part === \".\" || part === \"..\") ||\n /[%?#\\0]/u.test(value)\n ) {\n invalid(`${name} must be a normalized relative path`);\n }\n return value;\n}\n\nfunction digest(value: unknown, name: string): `sha256:${string}` {\n if (typeof value !== \"string\" || !/^sha256:[0-9a-f]{64}$/u.test(value)) {\n invalid(`${name} is invalid`);\n }\n return value as `sha256:${string}`;\n}\n\nfunction stableVersion(value: unknown): value is string {\n return (\n typeof value === \"string\" && /^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)$/u.test(value)\n );\n}\n\nfunction requiredPath(environment: RuntimeEnvironment, name: string): string {\n const value = environment[name];\n if (!value) {\n throw new ArtifactRuntimeError(\"ARTIFACT_RUNTIME_UNAVAILABLE\", `${name} is required`);\n }\n return value;\n}\n\nfunction parseJson(bytes: Uint8Array, name: string): unknown {\n try {\n return JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes));\n } catch (cause) {\n throw new ArtifactRuntimeError(\n \"ARTIFACT_RUNTIME_MANIFEST_INVALID\",\n `${name} is not strict UTF-8 JSON`,\n { cause },\n );\n }\n}\n\nfunction exactRecord(\n value: unknown,\n keys: readonly string[],\n name: string,\n): Record<string, unknown> {\n if (!isRecord(value)) invalid(`${name} is invalid`);\n if (JSON.stringify(Object.keys(value).sort()) !== JSON.stringify([...keys].sort())) {\n invalid(`${name} has unexpected fields`);\n }\n return value;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction sha256(value: Uint8Array): `sha256:${string}` {\n return `sha256:${createHash(\"sha256\").update(value).digest(\"hex\")}`;\n}\n\nfunction sameJson(left: unknown, right: unknown): boolean {\n return JSON.stringify(left) === JSON.stringify(right);\n}\n\nfunction sameBytes(left: Uint8Array, right: Uint8Array): boolean {\n return left.byteLength === right.byteLength && left.every((byte, index) => byte === right[index]);\n}\n\nfunction defaultImporter(specifier: string): Promise<unknown> {\n return import(/* @vite-ignore */ specifier);\n}\n\nfunction invalid(message: string): never {\n throw new ArtifactRuntimeError(\"ARTIFACT_RUNTIME_MANIFEST_INVALID\", message);\n}\n\nfunction integrity(message: string): never {\n throw new ArtifactRuntimeError(\"ARTIFACT_RUNTIME_INTEGRITY\", message);\n}\n\nfunction incompatible(message: string): never {\n throw new ArtifactRuntimeError(\"ARTIFACT_RUNTIME_INCOMPATIBLE\", message);\n}\n","import {\n ARTIFACT_RUNTIME_TARGETS,\n ArtifactRuntimeError,\n artifactRuntimeTarget,\n type ArtifactRuntimeTarget,\n} from \"./runtime\";\n\nconst NATIVE_ASSET = \"opengeni_artifact_kernel.node\";\nconst WASM_RUNTIME_FILES = [\n \"artifact_kernel.js\",\n \"artifact_kernel_bg.wasm\",\n \"artifact_kernel_document.js\",\n \"artifact_kernel_document_bg.wasm\",\n \"artifact_kernel_presentation.js\",\n \"artifact_kernel_presentation_bg.wasm\",\n \"artifact_kernel_spreadsheet.js\",\n \"artifact_kernel_spreadsheet_bg.wasm\",\n] as const;\nconst MAX_CAPABILITIES_BYTES = 1024 * 1024;\n\nexport type ArtifactKernelBuildReceipt = Readonly<{\n schemaVersion: 2;\n producer: \"opengeni-artifact-kernel-smoke-v2\";\n target: ArtifactRuntimeTarget;\n kind: \"native\" | \"wasm\";\n buildIdentity: string;\n capabilities: Readonly<{\n bytes: number;\n sha256: `sha256:${string}`;\n }>;\n spreadsheetFormulaProjectionCorpusSha256: `sha256:${string}`;\n runtimeFiles: readonly Readonly<{\n path: string;\n bytes: number;\n sha256: `sha256:${string}`;\n }>[];\n}>;\n\nexport function validateArtifactKernelBuildReceipt(\n value: unknown,\n expectedTarget?: ArtifactRuntimeTarget,\n): ArtifactKernelBuildReceipt {\n const record = exactRecord(\n value,\n [\n \"schemaVersion\",\n \"producer\",\n \"target\",\n \"kind\",\n \"buildIdentity\",\n \"capabilities\",\n \"spreadsheetFormulaProjectionCorpusSha256\",\n \"runtimeFiles\",\n ],\n \"target build receipt\",\n );\n if (record.schemaVersion !== 2 || record.producer !== \"opengeni-artifact-kernel-smoke-v2\") {\n invalid(\"target build receipt schema/producer is invalid\");\n }\n if (\n typeof record.target !== \"string\" ||\n !ARTIFACT_RUNTIME_TARGETS.includes(record.target as ArtifactRuntimeTarget)\n ) {\n invalid(\"target build receipt target is invalid\");\n }\n const descriptor = artifactRuntimeTarget(record.target as ArtifactRuntimeTarget);\n if (expectedTarget !== undefined && descriptor.target !== expectedTarget) {\n invalid(`target build receipt ${descriptor.target} does not match ${expectedTarget}`);\n }\n if (record.kind !== descriptor.kind) invalid(\"target build receipt kind is invalid\");\n if (\n typeof record.buildIdentity !== \"string\" ||\n record.buildIdentity.length === 0 ||\n record.buildIdentity.length > 512\n ) {\n invalid(\"target build receipt identity is invalid\");\n }\n const capabilities = fileProof(record.capabilities, \"target build capabilities\", false);\n if (capabilities.bytes > MAX_CAPABILITIES_BYTES) {\n invalid(\"target build capabilities exceed their maximum size\");\n }\n const spreadsheetFormulaProjectionCorpusSha256 = record.spreadsheetFormulaProjectionCorpusSha256;\n if (\n typeof spreadsheetFormulaProjectionCorpusSha256 !== \"string\" ||\n !/^sha256:[0-9a-f]{64}$/u.test(spreadsheetFormulaProjectionCorpusSha256)\n ) {\n invalid(\"target build formula projection corpus digest is invalid\");\n }\n if (\n !Array.isArray(record.runtimeFiles) ||\n record.runtimeFiles.length === 0 ||\n record.runtimeFiles.length > 8\n ) {\n invalid(\"target build receipt runtimeFiles is invalid\");\n }\n const runtimeFiles = record.runtimeFiles.map((entry, index) =>\n fileProof(entry, `target build runtime file ${index}`, true),\n );\n if (\n !runtimeFiles.every((entry, index) => index === 0 || runtimeFiles[index - 1]!.path < entry.path)\n ) {\n invalid(\"target build receipt runtimeFiles must be strictly sorted\");\n }\n const expectedPaths = descriptor.kind === \"native\" ? [NATIVE_ASSET] : WASM_RUNTIME_FILES;\n if (JSON.stringify(runtimeFiles.map(({ path }) => path)) !== JSON.stringify(expectedPaths)) {\n invalid(\"target build receipt runtimeFiles do not match the target package\");\n }\n return {\n schemaVersion: 2,\n producer: \"opengeni-artifact-kernel-smoke-v2\",\n target: descriptor.target,\n kind: descriptor.kind,\n buildIdentity: record.buildIdentity,\n capabilities: { bytes: capabilities.bytes, sha256: capabilities.sha256 },\n spreadsheetFormulaProjectionCorpusSha256:\n spreadsheetFormulaProjectionCorpusSha256 as `sha256:${string}`,\n runtimeFiles,\n };\n}\n\nexport function canonicalArtifactKernelBuildReceiptBytes(value: unknown): Uint8Array {\n const receipt = validateArtifactKernelBuildReceipt(value);\n return new TextEncoder().encode(`${JSON.stringify(receipt, null, 2)}\\n`);\n}\n\nfunction fileProof(\n value: unknown,\n name: string,\n includePath: true,\n): { path: string; bytes: number; sha256: `sha256:${string}` };\nfunction fileProof(\n value: unknown,\n name: string,\n includePath: false,\n): { bytes: number; sha256: `sha256:${string}` };\nfunction fileProof(value: unknown, name: string, includePath: boolean) {\n const record = exactRecord(\n value,\n includePath ? [\"path\", \"bytes\", \"sha256\"] : [\"bytes\", \"sha256\"],\n name,\n );\n const bytes = record.bytes;\n const digest = record.sha256;\n if (!Number.isSafeInteger(bytes) || (bytes as number) <= 0) invalid(`${name} bytes is invalid`);\n if (typeof digest !== \"string\" || !/^sha256:[0-9a-f]{64}$/u.test(digest)) {\n invalid(`${name} digest is invalid`);\n }\n if (!includePath) return { bytes: bytes as number, sha256: digest as `sha256:${string}` };\n const path = record.path;\n if (\n typeof path !== \"string\" ||\n path.length === 0 ||\n path.includes(\"/\") ||\n path.includes(\"\\\\\") ||\n path === \".\" ||\n path === \"..\"\n ) {\n invalid(`${name} path is invalid`);\n }\n return { path, bytes: bytes as number, sha256: digest as `sha256:${string}` };\n}\n\nfunction exactRecord(\n value: unknown,\n keys: readonly string[],\n name: string,\n): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n invalid(`${name} is invalid`);\n }\n const record = value as Record<string, unknown>;\n if (JSON.stringify(Object.keys(record).sort()) !== JSON.stringify([...keys].sort())) {\n invalid(`${name} has unexpected fields`);\n }\n return record;\n}\n\nfunction invalid(message: string): never {\n throw new ArtifactRuntimeError(\"ARTIFACT_RUNTIME_MANIFEST_INVALID\", message);\n}\n"],"mappings":"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","names":["digest","exactRecord","invalid"]}
@@ -1,10 +1,11 @@
1
1
  import {
2
2
  ArtifactRuntimeError
3
- } from "./chunk-N2IHNWBS.js";
3
+ } from "./chunk-4YYYUZQH.js";
4
4
 
5
5
  // src/native.ts
6
6
  import {
7
7
  EDITABLE_ARTIFACT_INTENT_VERSION,
8
+ EDITABLE_ARTIFACT_INTENT_PROTOCOL_VERSION,
8
9
  SPREADSHEET_ARTIFACT_COMMAND_VERSION,
9
10
  assertCanonicalSpreadsheetArtifactCommandBytes,
10
11
  decodeEditableArtifactMutationIntent,
@@ -12,6 +13,7 @@ import {
12
13
  encodeSpreadsheetArtifactCommandBatch,
13
14
  hashEditableArtifactMutationIntentBytes
14
15
  } from "@opengeni/contracts/editable-artifacts";
16
+ import { SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION } from "@opengeni/contracts/editable-artifact-versions";
15
17
  import {
16
18
  SPREADSHEET_ARTIFACT_COMMAND_VERSION as SPREADSHEET_ARTIFACT_COMMAND_VERSION2,
17
19
  assertCanonicalSpreadsheetArtifactCommandBytes as assertCanonicalSpreadsheetArtifactCommandBytes2,
@@ -60,8 +62,8 @@ var NativeSpreadsheetSession = class _NativeSpreadsheetSession {
60
62
  const intentBytes = encodeEditableArtifactMutationIntent({
61
63
  ...input.intent,
62
64
  envelopeVersion: EDITABLE_ARTIFACT_INTENT_VERSION,
63
- protocolVersion: 1,
64
- modelSchemaVersion: 1,
65
+ protocolVersion: EDITABLE_ARTIFACT_INTENT_PROTOCOL_VERSION,
66
+ modelSchemaVersion: SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,
65
67
  commandProtocolVersion: SPREADSHEET_ARTIFACT_COMMAND_VERSION,
66
68
  commandBytes
67
69
  });
@@ -241,7 +243,7 @@ function openNativeArtifactSession(runtime, input) {
241
243
  }
242
244
  function assertSpreadsheetIntent(intentBytes) {
243
245
  const intent = decodeEditableArtifactMutationIntent(intentBytes);
244
- if (intent.envelopeVersion !== EDITABLE_ARTIFACT_INTENT_VERSION || intent.protocolVersion !== 1 || intent.modelSchemaVersion !== 1 || intent.commandProtocolVersion !== SPREADSHEET_ARTIFACT_COMMAND_VERSION) {
246
+ if (intent.envelopeVersion !== EDITABLE_ARTIFACT_INTENT_VERSION || intent.protocolVersion !== EDITABLE_ARTIFACT_INTENT_PROTOCOL_VERSION || intent.modelSchemaVersion !== SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION || intent.commandProtocolVersion !== SPREADSHEET_ARTIFACT_COMMAND_VERSION) {
245
247
  throw new ArtifactRuntimeError(
246
248
  "ARTIFACT_RUNTIME_INCOMPATIBLE",
247
249
  "Spreadsheet intent versions do not match the loaded production kernel"
@@ -276,4 +278,4 @@ export {
276
278
  encodeSpreadsheetArtifactCommandBatch2 as encodeSpreadsheetArtifactCommandBatch,
277
279
  spreadsheetSheetId
278
280
  };
279
- //# sourceMappingURL=chunk-B2ZJRZDA.js.map
281
+ //# sourceMappingURL=chunk-LVPFJH2Z.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/native.ts"],"sourcesContent":["import {\n EDITABLE_ARTIFACT_INTENT_VERSION,\n EDITABLE_ARTIFACT_INTENT_PROTOCOL_VERSION,\n SPREADSHEET_ARTIFACT_COMMAND_VERSION,\n assertCanonicalSpreadsheetArtifactCommandBytes,\n decodeEditableArtifactMutationIntent,\n encodeEditableArtifactMutationIntent,\n encodeSpreadsheetArtifactCommandBatch,\n hashEditableArtifactMutationIntentBytes,\n type EditableArtifactMutationIntent,\n type SpreadsheetArtifactCommandBatch,\n} from \"@opengeni/contracts/editable-artifacts\";\nimport { SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION } from \"@opengeni/contracts/editable-artifact-versions\";\nimport {\n ArtifactCollaborationSession,\n ArtifactDocumentSession,\n ArtifactKernelRuntime,\n ArtifactPresentationSession,\n ArtifactRuntimeError,\n ArtifactTextLayoutSession,\n type ArtifactKernelCapabilities,\n type NativeArtifactRuntimeTarget,\n} from \"./runtime\";\n\nexport {\n SPREADSHEET_ARTIFACT_COMMAND_VERSION,\n assertCanonicalSpreadsheetArtifactCommandBytes,\n decodeSpreadsheetArtifactCommandBatch,\n editableArtifactStableId,\n encodeSpreadsheetArtifactCommandBatch,\n spreadsheetSheetId,\n} from \"@opengeni/contracts/editable-artifacts\";\nexport type {\n EditableArtifactStableId,\n SpreadsheetArtifactCommand,\n SpreadsheetArtifactCommandBatch,\n SpreadsheetCellInput,\n SpreadsheetCellPoint,\n SpreadsheetCellRange,\n SpreadsheetSheetGeneration,\n SpreadsheetSheetPrecondition,\n} from \"@opengeni/contracts/editable-artifacts\";\n\nexport type NativeArtifactModality = \"spreadsheet\" | \"document\" | \"presentation\";\n\nexport type NativeSpreadsheetIntentFields = Omit<\n EditableArtifactMutationIntent,\n | \"envelopeVersion\"\n | \"protocolVersion\"\n | \"modelSchemaVersion\"\n | \"commandProtocolVersion\"\n | \"commandBytes\"\n>;\n\nexport type NativeSpreadsheetAuthorCommandsInput = Readonly<{\n intent: NativeSpreadsheetIntentFields;\n commands: SpreadsheetArtifactCommandBatch;\n /** Exact authoritative OGACF001 base selected for this apply attempt. */\n resolvedBaseBytes: Uint8Array;\n}>;\n\nexport type NativeSpreadsheetAuthoredTransaction = Readonly<{\n /** Exact canonical OGATX001 bytes passed to Rust. */\n intentBytes: Uint8Array;\n requestHash: string;\n /** One whole canonical OGACO002 transaction returned by Rust. */\n committedTransactionBytes: Uint8Array;\n}>;\n\nexport type CreateNativeArtifactSessionInput = Readonly<{\n modality: NativeArtifactModality;\n replicaNamespace: bigint;\n}>;\n\nexport type OpenNativeArtifactSessionInput = Readonly<{\n modality: NativeArtifactModality;\n snapshot: Uint8Array;\n}>;\n\nexport type NativeArtifactSession =\n | NativeSpreadsheetSession\n | NativeDocumentSession\n | NativePresentationSession;\n\n/**\n * Synchronous Node/Bun production spreadsheet session backed only by the\n * verified Rust N-API collaboration kernel. It never selects the TypeScript\n * reference model and deliberately rejects a browser/WASM runtime; browsers\n * use the asynchronous `@opengeni/sdk/editable-artifacts` Worker API.\n */\nexport class NativeSpreadsheetSession {\n readonly kind = \"native\" as const;\n readonly modality = \"spreadsheet\" as const;\n readonly target: NativeArtifactRuntimeTarget;\n readonly capabilities: ArtifactKernelCapabilities;\n readonly buildIdentity: string;\n\n private constructor(\n private readonly runtime: ArtifactKernelRuntime,\n private readonly session: ArtifactCollaborationSession,\n ) {\n requireNativeSpreadsheetRuntime(runtime);\n this.target = runtime.target as NativeArtifactRuntimeTarget;\n this.capabilities = runtime.capabilities;\n this.buildIdentity = runtime.buildIdentity;\n }\n\n static create(\n runtime: ArtifactKernelRuntime,\n replicaNamespace: bigint,\n ): NativeSpreadsheetSession {\n requireNativeSpreadsheetRuntime(runtime);\n return new NativeSpreadsheetSession(\n runtime,\n runtime.createCollaborationSession(replicaNamespace),\n );\n }\n\n static open(runtime: ArtifactKernelRuntime, snapshot: Uint8Array): NativeSpreadsheetSession {\n requireNativeSpreadsheetRuntime(runtime);\n return new NativeSpreadsheetSession(runtime, runtime.openCollaborationSession(snapshot));\n }\n\n /**\n * Authors one already-canonical mutation. Rust independently validates the\n * exact OGATX/OGASC bytes, resolves typed operations, applies atomically, and\n * returns the whole canonical OGACO transaction.\n */\n authorTransaction(intentBytes: Uint8Array, resolvedBaseBytes: Uint8Array): Uint8Array {\n assertSpreadsheetIntent(intentBytes);\n return this.session.authorTransaction(intentBytes, resolvedBaseBytes);\n }\n\n /** Encodes one identity-free typed command batch and authors it atomically. */\n authorCommands(\n input: NativeSpreadsheetAuthorCommandsInput,\n ): NativeSpreadsheetAuthoredTransaction {\n const commandBytes = encodeSpreadsheetArtifactCommandBatch(input.commands);\n const intentBytes = encodeEditableArtifactMutationIntent({\n ...input.intent,\n envelopeVersion: EDITABLE_ARTIFACT_INTENT_VERSION,\n protocolVersion: EDITABLE_ARTIFACT_INTENT_PROTOCOL_VERSION,\n modelSchemaVersion: SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,\n commandProtocolVersion: SPREADSHEET_ARTIFACT_COMMAND_VERSION,\n commandBytes,\n });\n const requestHash = hashEditableArtifactMutationIntentBytes(intentBytes);\n const committedTransactionBytes = this.authorTransaction(intentBytes, input.resolvedBaseBytes);\n return Object.freeze({ intentBytes, requestHash, committedTransactionBytes });\n }\n\n /** Replays one whole authoritative OGACO transaction atomically. */\n applyCommitted(committedTransactionBytes: Uint8Array): void {\n this.session.applyCommitted(committedTransactionBytes);\n }\n\n /**\n * Executes one canonical OGAKQ request. Typed viewport/metadata helpers use\n * the shared contract codec; this raw method remains useful at server byte\n * boundaries and never exposes a Rust object layout.\n */\n query(queryBytes: Uint8Array): Uint8Array {\n return this.session.query(queryBytes);\n }\n\n snapshot(): Uint8Array {\n return this.session.snapshot();\n }\n\n frontier(): Uint8Array {\n return this.session.frontier();\n }\n\n stateHash(): string {\n return this.session.stateHash();\n }\n\n revision(): bigint {\n return this.session.revision();\n }\n\n fork(): NativeSpreadsheetSession {\n return new NativeSpreadsheetSession(this.runtime, this.session.fork());\n }\n\n isClosed(): boolean {\n return this.session.isClosed();\n }\n\n dispose(): void {\n this.session.dispose();\n }\n}\n\n/** Exact synchronous N-API structured-document byte session. */\nexport class NativeDocumentSession {\n readonly kind = \"native\" as const;\n readonly modality = \"document\" as const;\n readonly target: NativeArtifactRuntimeTarget;\n readonly capabilities: ArtifactKernelCapabilities;\n readonly buildIdentity: string;\n\n private constructor(\n private readonly runtime: ArtifactKernelRuntime,\n private readonly session: ArtifactDocumentSession,\n ) {\n requireNativeRuntime(runtime);\n this.target = runtime.target as NativeArtifactRuntimeTarget;\n this.capabilities = runtime.capabilities;\n this.buildIdentity = runtime.buildIdentity;\n }\n\n static create(runtime: ArtifactKernelRuntime, namespace: bigint): NativeDocumentSession {\n requireNativeRuntime(runtime);\n return new NativeDocumentSession(runtime, runtime.createDocumentSession(namespace));\n }\n\n static open(runtime: ArtifactKernelRuntime, snapshot: Uint8Array): NativeDocumentSession {\n requireNativeRuntime(runtime);\n return new NativeDocumentSession(runtime, runtime.openDocumentSession(snapshot));\n }\n\n applyCommands(commands: Uint8Array): Uint8Array {\n return this.session.applyCommands(commands);\n }\n query(request: Uint8Array): Uint8Array {\n return this.session.query(request);\n }\n snapshot(): Uint8Array {\n return this.session.snapshot();\n }\n revision(): bigint {\n return this.session.revision();\n }\n stateHash(): string {\n return this.session.stateHash();\n }\n fork(): NativeDocumentSession {\n return new NativeDocumentSession(this.runtime, this.session.fork());\n }\n isClosed(): boolean {\n return this.session.isClosed();\n }\n dispose(): void {\n this.session.dispose();\n }\n}\n\n/** Exact synchronous N-API presentation byte session. */\nexport class NativePresentationSession {\n readonly kind = \"native\" as const;\n readonly modality = \"presentation\" as const;\n readonly target: NativeArtifactRuntimeTarget;\n readonly capabilities: ArtifactKernelCapabilities;\n readonly buildIdentity: string;\n\n private constructor(\n private readonly runtime: ArtifactKernelRuntime,\n private readonly session: ArtifactPresentationSession,\n ) {\n requireNativeRuntime(runtime);\n this.target = runtime.target as NativeArtifactRuntimeTarget;\n this.capabilities = runtime.capabilities;\n this.buildIdentity = runtime.buildIdentity;\n }\n\n static create(runtime: ArtifactKernelRuntime, namespace: bigint): NativePresentationSession {\n requireNativeRuntime(runtime);\n return new NativePresentationSession(runtime, runtime.createPresentationSession(namespace));\n }\n\n static open(runtime: ArtifactKernelRuntime, snapshot: Uint8Array): NativePresentationSession {\n requireNativeRuntime(runtime);\n return new NativePresentationSession(runtime, runtime.openPresentationSession(snapshot));\n }\n\n applyCommands(commands: Uint8Array): Uint8Array {\n return this.session.applyCommands(commands);\n }\n query(request: Uint8Array): Uint8Array {\n return this.session.query(request);\n }\n snapshot(): Uint8Array {\n return this.session.snapshot();\n }\n revision(): bigint {\n return this.session.revision();\n }\n stateHash(): string {\n return this.session.stateHash();\n }\n fork(): NativePresentationSession {\n return new NativePresentationSession(this.runtime, this.session.fork());\n }\n isClosed(): boolean {\n return this.session.isClosed();\n }\n dispose(): void {\n this.session.dispose();\n }\n}\n\n/** Exact synchronous N-API retained-font text-layout session. */\nexport class NativeTextLayoutSession {\n readonly kind = \"native\" as const;\n readonly modality = \"text-layout\" as const;\n readonly target: NativeArtifactRuntimeTarget;\n readonly capabilities: ArtifactKernelCapabilities;\n readonly buildIdentity: string;\n\n private constructor(\n private readonly session: ArtifactTextLayoutSession,\n runtime: ArtifactKernelRuntime,\n ) {\n requireNativeRuntime(runtime);\n this.target = runtime.target as NativeArtifactRuntimeTarget;\n this.capabilities = runtime.capabilities;\n this.buildIdentity = runtime.buildIdentity;\n }\n\n static open(runtime: ArtifactKernelRuntime, fontBundle: Uint8Array): NativeTextLayoutSession {\n requireNativeRuntime(runtime);\n return new NativeTextLayoutSession(runtime.openTextLayoutSession(fontBundle), runtime);\n }\n\n layout(request: Uint8Array): Uint8Array {\n return this.session.layout(request);\n }\n isClosed(): boolean {\n return this.session.isClosed();\n }\n dispose(): void {\n this.session.dispose();\n }\n}\n\n/** Creates a production modality session; unsupported Rust modes fail closed. */\nexport function createNativeArtifactSession(\n runtime: ArtifactKernelRuntime,\n input: CreateNativeArtifactSessionInput,\n): NativeArtifactSession {\n if (input.modality === \"spreadsheet\") {\n return NativeSpreadsheetSession.create(runtime, input.replicaNamespace);\n }\n if (input.modality === \"document\") {\n return NativeDocumentSession.create(runtime, input.replicaNamespace);\n }\n return NativePresentationSession.create(runtime, input.replicaNamespace);\n}\n\n/** Opens a production modality session; unsupported Rust modes fail closed. */\nexport function openNativeArtifactSession(\n runtime: ArtifactKernelRuntime,\n input: OpenNativeArtifactSessionInput,\n): NativeArtifactSession {\n if (input.modality === \"spreadsheet\")\n return NativeSpreadsheetSession.open(runtime, input.snapshot);\n if (input.modality === \"document\") return NativeDocumentSession.open(runtime, input.snapshot);\n return NativePresentationSession.open(runtime, input.snapshot);\n}\n\nfunction assertSpreadsheetIntent(intentBytes: Uint8Array): void {\n const intent = decodeEditableArtifactMutationIntent(intentBytes);\n if (\n intent.envelopeVersion !== EDITABLE_ARTIFACT_INTENT_VERSION ||\n intent.protocolVersion !== EDITABLE_ARTIFACT_INTENT_PROTOCOL_VERSION ||\n intent.modelSchemaVersion !== SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION ||\n intent.commandProtocolVersion !== SPREADSHEET_ARTIFACT_COMMAND_VERSION\n ) {\n throw new ArtifactRuntimeError(\n \"ARTIFACT_RUNTIME_INCOMPATIBLE\",\n \"Spreadsheet intent versions do not match the loaded production kernel\",\n );\n }\n assertCanonicalSpreadsheetArtifactCommandBytes(intent.commandBytes);\n // Hashing decodes again by design and proves the exact outer bytes are an\n // acceptable canonical request before they cross the native boundary.\n hashEditableArtifactMutationIntentBytes(intentBytes);\n}\n\nfunction requireNativeSpreadsheetRuntime(runtime: ArtifactKernelRuntime): void {\n requireNativeRuntime(runtime);\n}\n\nfunction requireNativeRuntime(runtime: ArtifactKernelRuntime): void {\n if (runtime.kind !== \"native\" || runtime.target === \"wasm-web\") {\n throw new ArtifactRuntimeError(\n \"ARTIFACT_RUNTIME_UNAVAILABLE\",\n \"NativeSpreadsheetSession requires an exact local N-API kernel; browser editing uses @opengeni/sdk/editable-artifacts\",\n );\n }\n}\n"],"mappings":"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","names":["SPREADSHEET_ARTIFACT_COMMAND_VERSION","assertCanonicalSpreadsheetArtifactCommandBytes","encodeSpreadsheetArtifactCommandBatch"]}