@opengeni/artifact-tool 0.2.8 → 0.3.4-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/{chunk-ZCJYRJGB.js → chunk-4XJE7NRA.js} +2 -2
  2. package/dist/{chunk-N2IHNWBS.js → chunk-4YYYUZQH.js} +15 -6
  3. package/dist/chunk-4YYYUZQH.js.map +1 -0
  4. package/dist/{chunk-U5G2BKM2.js → chunk-LMLPFF3S.js} +12 -6
  5. package/dist/{chunk-U5G2BKM2.js.map → chunk-LMLPFF3S.js.map} +1 -1
  6. package/dist/{chunk-B2ZJRZDA.js → chunk-LVPFJH2Z.js} +7 -5
  7. package/dist/chunk-LVPFJH2Z.js.map +1 -0
  8. package/dist/{chunk-QZI5POCC.js → chunk-OVXX4G35.js} +2 -2
  9. package/dist/{chunk-6PBM7FKI.js → chunk-QA3NXBAG.js} +8 -7
  10. package/dist/chunk-QA3NXBAG.js.map +1 -0
  11. package/dist/{chunk-XT2EJFCU.js → chunk-SYFNJGH5.js} +30 -8
  12. package/dist/chunk-SYFNJGH5.js.map +1 -0
  13. package/dist/{chunk-RU5G3HNF.js → chunk-XAZTHG6W.js} +20 -9
  14. package/dist/chunk-XAZTHG6W.js.map +1 -0
  15. package/dist/index.js +4 -4
  16. package/dist/kernel.d.ts +0 -19
  17. package/dist/materializer-cli-entry.js +7 -7
  18. package/dist/materializer-cli.d.ts +4 -3
  19. package/dist/materializer-cli.js +7 -7
  20. package/dist/native.d.ts +1 -1
  21. package/dist/native.js +2 -2
  22. package/dist/office-import.d.ts +15 -5
  23. package/dist/office-import.js +25 -8
  24. package/dist/office-import.js.map +1 -1
  25. package/dist/production-document.js +4 -4
  26. package/dist/production-presentation.js +4 -4
  27. package/dist/production-spreadsheet.js +4 -4
  28. package/dist/reference.js +1 -365
  29. package/dist/reference.js.map +1 -1
  30. package/dist/runtime-cli-entry.js +3 -3
  31. package/dist/runtime-cli.js +2 -2
  32. package/dist/runtime-development.js +3 -3
  33. package/dist/runtime-receipt.d.ts +3 -2
  34. package/dist/runtime.d.ts +8 -6
  35. package/dist/runtime.js +1 -1
  36. package/dist/snapshot.d.ts +13 -6
  37. package/dist/snapshot.js +23 -11
  38. package/dist/snapshot.js.map +1 -1
  39. package/dist/spreadsheet-xlsx-codec.js +2 -2
  40. package/dist/spreadsheet.js +1 -1
  41. package/package.json +5 -5
  42. package/src/kernel.ts +1 -397
  43. package/src/materializer-cli.ts +20 -9
  44. package/src/native.ts +7 -5
  45. package/src/office-import.ts +47 -18
  46. package/src/production-spreadsheet-native.ts +4 -3
  47. package/src/runtime-receipt.ts +16 -5
  48. package/src/runtime.ts +22 -10
  49. package/src/snapshot.ts +39 -17
  50. package/src/spreadsheet-formula.ts +35 -7
  51. package/dist/chunk-6PBM7FKI.js.map +0 -1
  52. package/dist/chunk-B2ZJRZDA.js.map +0 -1
  53. package/dist/chunk-N2IHNWBS.js.map +0 -1
  54. package/dist/chunk-RU5G3HNF.js.map +0 -1
  55. package/dist/chunk-XT2EJFCU.js.map +0 -1
  56. /package/dist/{chunk-ZCJYRJGB.js.map → chunk-4XJE7NRA.js.map} +0 -0
  57. /package/dist/{chunk-QZI5POCC.js.map → chunk-OVXX4G35.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/runtime.ts"],"sourcesContent":["/**\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: 1;\n readonly spreadsheetCommandVersion: 1;\n readonly kernelSnapshotVersion: 1;\n readonly receiptSchemaVersion: 1;\n readonly collaborationSnapshotVersion: 1;\n readonly editableArtifactIntentVersion: 1;\n readonly committedTransactionVersion: 1;\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_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: 1,\n spreadsheetCommandVersion: 1,\n kernelSnapshotVersion: 1,\n receiptSchemaVersion: 1,\n collaborationSnapshotVersion: 1,\n editableArtifactIntentVersion: 1,\n committedTransactionVersion: 1,\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":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/materializer-cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { createHash } from \"node:crypto\";\nimport { once } from \"node:events\";\n\nimport {\n SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,\n SPREADSHEET_ARTIFACT_VIEWPORT_MAX_CELLS,\n decodeSpreadsheetMetadataKernelProjection,\n decodeSpreadsheetViewportKernelProjection,\n encodeSpreadsheetMetadataKernelQuery,\n encodeSpreadsheetViewportKernelQuery,\n type SpreadsheetArtifactProjectedCellValue,\n type SpreadsheetArtifactFormulaError,\n} from \"@opengeni/contracts/editable-artifacts\";\n\nimport { NativeSpreadsheetSession } from \"./native\";\nimport { SpreadsheetXlsxCodec } from \"./spreadsheet-xlsx-codec\";\nimport { Workbook, type SerializedWorkbook } from \"./spreadsheet\";\nimport { loadConfiguredArtifactKernelRuntime } from \"./runtime-development\";\nimport type { ArtifactKernelRuntime } from \"./runtime\";\n\nconst IDENTITY_ARGUMENT = \"--opengeni-materializer-identity-v1\";\nconst MATERIALIZE_ARGUMENT = \"--opengeni-materialize-v1\";\nconst VERIFY_ARGUMENT = \"--opengeni-verify-materialization-v1\";\nconst INPUT_MAGIC = bytes(\"OGAMI001\");\nconst VERIFY_INPUT_MAGIC = bytes(\"OGAVI001\");\nconst OUTPUT_MAGIC = bytes(\"OGAMO001\");\nconst VERIFY_OUTPUT_MAGIC = bytes(\"OGAVO001\");\nconst ERROR_MAGIC = bytes(\"OGAME001\");\nconst MAX_METADATA_BYTES = 256 * 1024;\nconst MAX_SOURCE_BYTES = 512 * 1024 * 1024;\nconst MAX_OUTPUT_BYTES = 512 * 1024 * 1024;\nconst MAX_PROJECTED_RECTANGLE_CELLS = 1_000_000;\nconst VIEWPORT_EDGE = 128;\nconst XLSX_CODEC_ID = \"opengeni.xlsx\";\nconst EMPTY_FONT_REGISTRY_HASH = sha256(bytes(\"opengeni:no-font-registry:v1\"));\nconst POLICY_HASH = sha256(bytes(\"opengeni:materializer:xlsx-native-projection:v1\"));\n\nexport type EditableArtifactNativeMaterializerCapabilities = Readonly<{\n protocol: \"OGAMC001\";\n runtimeKind: \"native\";\n runtimeTarget: string;\n kernelVersion: string;\n codecVersions: Readonly<Record<typeof XLSX_CODEC_ID, string>>;\n fontRegistryHash: string;\n policyHash: string;\n maxOutputBytes: number;\n supportedModelSchemaVersions: readonly [1];\n supportedOperationProtocolVersions: readonly [1];\n supportedSnapshotProtocolVersions: readonly [1];\n}>;\n\ntype MaterializationManifest = Readonly<{\n protocol: \"OGAMJ001\";\n artifactId: string;\n jobId: string;\n versionId: string;\n modality: \"spreadsheet\" | \"document\" | \"presentation\";\n inputSnapshotId: string;\n targetHeadSequence: number;\n stateHash: string;\n sourceByteSize: number;\n sourceContentHash: string;\n modelSchemaVersion: number;\n operationProtocolVersion: number;\n snapshotProtocolVersion: number;\n format: \"xlsx\" | \"pptx\" | \"docx\" | \"pdf\" | \"png\" | \"webp\";\n codecId: string;\n normalizedOptions: Readonly<Record<string, never>>;\n optionsHash: string;\n codecVersion: string;\n kernelVersion: string;\n fontRegistryHash: string;\n policyHash: string;\n}>;\n\ntype SemanticCell = Readonly<{\n row: number;\n column: number;\n formula: string | null;\n value: SpreadsheetArtifactProjectedCellValue;\n}>;\n\ntype SemanticWorkbook = Readonly<{\n version: 1;\n sheets: readonly Readonly<{ name: string; cells: readonly SemanticCell[] }>[];\n}>;\n\ntype ProjectedWorkbook = Readonly<{\n workbook: Workbook;\n semanticHash: string;\n}>;\n\ntype NativeSourceDiagnosticSubcode = \"input_framing\" | \"snapshot_open\" | \"state_mismatch\";\n\nexport async function runArtifactMaterializerCli(\n args: readonly string[],\n environment: Readonly<Record<string, string | undefined>> = process.env,\n): Promise<void> {\n if (args.length !== 1) throw new Error(\"unsupported materializer command\");\n const command = args[0];\n if (command === IDENTITY_ARGUMENT) {\n const capabilities = await loadCapabilities(environment);\n process.stdout.write(JSON.stringify(capabilities));\n return;\n }\n if (command === MATERIALIZE_ARGUMENT) {\n try {\n await materialize(environment);\n } catch (error) {\n if (!(error instanceof MaterializerCliError)) throw error;\n await writeTypedError(error.code, error.diagnosticSubcode);\n }\n return;\n }\n if (command === VERIFY_ARGUMENT) {\n try {\n await verifyMaterialization(environment);\n } catch (error) {\n if (!(error instanceof MaterializerCliError)) throw error;\n await writeTypedError(error.code, error.diagnosticSubcode);\n }\n return;\n }\n throw new Error(\"unsupported materializer command\");\n}\n\nasync function loadCapabilities(\n environment: Readonly<Record<string, string | undefined>>,\n): Promise<EditableArtifactNativeMaterializerCapabilities> {\n const loaded = await loadRuntime(environment);\n return editableArtifactMaterializerCapabilitiesForRuntime(\n loaded.runtime,\n loaded.location.artifactTool.packageVersion,\n );\n}\n\nasync function materialize(\n environment: Readonly<Record<string, string | undefined>>,\n): Promise<void> {\n let manifest: MaterializationManifest;\n let source: Uint8Array;\n try {\n const reader = new InputReader(process.stdin);\n assertBytes(await reader.readExactly(INPUT_MAGIC.byteLength), INPUT_MAGIC, \"input protocol\");\n const header = await reader.readExactly(12);\n const headerView = new DataView(header.buffer, header.byteOffset, header.byteLength);\n const metadataLength = headerView.getUint32(0, true);\n const sourceLength = safeU64(headerView, 4, \"source length\");\n if (metadataLength < 2 || metadataLength > MAX_METADATA_BYTES) throw invalidSource();\n if (sourceLength <= 0 || sourceLength > MAX_SOURCE_BYTES) throw unsupported();\n manifest = decodeManifest(await reader.readExactly(metadataLength));\n if (sourceLength !== manifest.sourceByteSize) throw invalidSource();\n source = await reader.readExactly(sourceLength);\n await reader.assertEof();\n if (sha256(source) !== manifest.sourceContentHash) throw invalidSource();\n } catch (error) {\n throw classifyInvalidSource(error, \"input_framing\");\n }\n\n const loaded = await loadRuntime(environment);\n const capabilities = editableArtifactMaterializerCapabilitiesForRuntime(\n loaded.runtime,\n loaded.location.artifactTool.packageVersion,\n );\n assertManifestCompatibility(manifest, capabilities);\n if (manifest.modality !== \"spreadsheet\" || manifest.format !== \"xlsx\") throw unsupported();\n\n const projected = projectSpreadsheet(loaded.runtime, source, manifest);\n const outputBlob = await SpreadsheetXlsxCodec.exportXlsx(projected.workbook, {\n unsupportedContent: \"error\",\n fileName: \"workbook.xlsx\",\n });\n const output = new Uint8Array(await outputBlob.arrayBuffer());\n if (output.byteLength <= 0 || output.byteLength > MAX_OUTPUT_BYTES) throw unsupported();\n // Export/import equivalence is checked here for early failure and again by a\n // distinct verifier process after immutable object publication.\n const imported = await SpreadsheetXlsxCodec.importXlsx(output, { unsupportedContent: \"error\" });\n if (semanticHashForWorkbook(imported) !== projected.semanticHash) throw unsupported();\n\n const metadata = canonicalBytes({\n byteSize: output.byteLength,\n codecId: manifest.codecId,\n codecVersion: manifest.codecVersion,\n contentHash: sha256(output),\n fontRegistryHash: manifest.fontRegistryHash,\n format: manifest.format,\n headSequence: manifest.targetHeadSequence,\n kernelVersion: manifest.kernelVersion,\n mimeType: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n policyHash: manifest.policyHash,\n protocol: \"OGAMR001\",\n semanticHash: projected.semanticHash,\n stateHash: manifest.stateHash,\n });\n await writeFrame(OUTPUT_MAGIC, metadata, output);\n}\n\nasync function verifyMaterialization(\n environment: Readonly<Record<string, string | undefined>>,\n): Promise<void> {\n const reader = new InputReader(process.stdin);\n assertBytes(\n await reader.readExactly(VERIFY_INPUT_MAGIC.byteLength),\n VERIFY_INPUT_MAGIC,\n \"verification protocol\",\n );\n const header = await reader.readExactly(12);\n const view = new DataView(header.buffer, header.byteOffset, header.byteLength);\n const metadataLength = view.getUint32(0, true);\n const outputLength = safeU64(view, 4, \"verification output length\");\n if (metadataLength < 2 || metadataLength > MAX_METADATA_BYTES) throw invalidSource();\n if (outputLength <= 0 || outputLength > MAX_OUTPUT_BYTES) throw unsupported();\n const metadata = decodeVerificationManifest(await reader.readExactly(metadataLength));\n const output = await reader.readExactly(outputLength);\n await reader.assertEof();\n const loaded = await loadCapabilities(environment);\n if (\n metadata.format !== \"xlsx\" ||\n metadata.codecId !== XLSX_CODEC_ID ||\n loaded.codecVersions[XLSX_CODEC_ID] !== metadata.codecVersion\n ) {\n throw unsupported();\n }\n let semanticHash: string;\n try {\n const imported = await SpreadsheetXlsxCodec.importXlsx(output, { unsupportedContent: \"error\" });\n semanticHash = semanticHashForWorkbook(imported);\n } catch {\n throw invalidOutput();\n }\n if (semanticHash !== metadata.expectedSemanticHash) throw invalidOutput();\n await writeFrame(\n VERIFY_OUTPUT_MAGIC,\n canonicalBytes({ protocol: \"OGAVR001\", semanticHash }),\n new Uint8Array(0),\n );\n}\n\nfunction projectSpreadsheet(\n runtime: ArtifactKernelRuntime,\n source: Uint8Array,\n manifest: MaterializationManifest,\n): ProjectedWorkbook {\n let session: NativeSpreadsheetSession;\n try {\n session = NativeSpreadsheetSession.open(runtime, source);\n } catch {\n throw invalidSource(\"snapshot_open\");\n }\n try {\n if (session.stateHash() !== manifest.stateHash) throw invalidSource(\"state_mismatch\");\n const metadataLimit = Math.min(\n session.capabilities.maxQueryResponseBytes,\n SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,\n );\n const metadata = decodeSpreadsheetMetadataKernelProjection(\n session.query(\n encodeSpreadsheetMetadataKernelQuery({\n maxSheets: Math.max(1, session.capabilities.maxMetadataSheets),\n maxBytes: metadataLimit,\n }),\n ),\n {\n maxSheets: Math.max(1, session.capabilities.maxMetadataSheets),\n maxBytes: metadataLimit,\n },\n );\n if (\n metadata.modeledFeatures.dimensions !== false ||\n metadata.modeledFeatures.hidden !== false ||\n metadata.modeledFeatures.merges !== false\n ) {\n throw unsupported();\n }\n let projectedRectangleCells = 0;\n const semanticSheets: Array<{ name: string; cells: SemanticCell[] }> = [];\n for (const sheet of metadata.sheets) {\n const cells: SemanticCell[] = [];\n if (sheet.usedBounds) {\n const rows = sheet.usedBounds.endRow - sheet.usedBounds.startRow + 1;\n const columns = sheet.usedBounds.endColumn - sheet.usedBounds.startColumn + 1;\n const area = rows * columns;\n if (!Number.isSafeInteger(area) || area <= 0) throw invalidSource();\n projectedRectangleCells += area;\n if (projectedRectangleCells > MAX_PROJECTED_RECTANGLE_CELLS) throw unsupported();\n for (\n let row = sheet.usedBounds.startRow;\n row <= sheet.usedBounds.endRow;\n row += VIEWPORT_EDGE\n ) {\n const rowCount = Math.min(VIEWPORT_EDGE, sheet.usedBounds.endRow - row + 1);\n for (\n let column = sheet.usedBounds.startColumn;\n column <= sheet.usedBounds.endColumn;\n column += VIEWPORT_EDGE\n ) {\n const columnCount = Math.min(VIEWPORT_EDGE, sheet.usedBounds.endColumn - column + 1);\n const maxCells = rowCount * columnCount;\n if (maxCells > SPREADSHEET_ARTIFACT_VIEWPORT_MAX_CELLS) throw unsupported();\n const query = {\n sheetId: sheet.sheetId,\n startRow: row,\n startColumn: column,\n rowCount,\n columnCount,\n maxCells,\n maxBytes: metadataLimit,\n } as const;\n const viewport = decodeSpreadsheetViewportKernelProjection(\n session.query(encodeSpreadsheetViewportKernelQuery(query)),\n query,\n );\n for (const cell of viewport.cells) {\n assertRepresentableValue(cell.value);\n cells.push({\n row: cell.row,\n column: cell.column,\n formula: cell.formula,\n value: cell.value,\n });\n }\n }\n }\n }\n cells.sort((left, right) => left.row - right.row || left.column - right.column);\n semanticSheets.push({ name: sheet.name, cells });\n }\n const semantic: SemanticWorkbook = Object.freeze({ version: 1, sheets: semanticSheets });\n const workbook = Workbook.fromJSON(toSerializedWorkbook(semantic));\n const semanticHash = sha256(canonicalBytes(semantic));\n // Recalculation through the host projection must agree with every native\n // formula result before the Office codec is allowed to run.\n if (semanticHashForWorkbook(workbook) !== semanticHash) throw unsupported();\n return Object.freeze({ workbook, semanticHash });\n } finally {\n session.dispose();\n }\n}\n\nfunction toSerializedWorkbook(semantic: SemanticWorkbook): SerializedWorkbook {\n return {\n version: 1,\n worksheets: semantic.sheets.map((sheet, index) => ({\n id: `ws/native-${index + 1}`,\n name: sheet.name,\n showGridLines: true,\n freezePanes: { rows: 0, columns: 0 },\n cells: sheet.cells.map((cell) => ({\n row: cell.row,\n col: cell.column,\n value: cell.formula ? null : hostValue(cell.value),\n formula: cell.formula,\n format: {},\n })),\n merges: [],\n columnWidths: [],\n rowHeights: [],\n tables: [],\n charts: [],\n sparklines: [],\n dataValidations: [],\n conditionalFormattings: [],\n images: [],\n })),\n comments: [],\n } as SerializedWorkbook;\n}\n\nfunction semanticHashForWorkbook(workbook: Workbook): string {\n const sheets = workbook.worksheets.items.map((sheet) => {\n const cells: SemanticCell[] = [];\n for (const { row, col, data } of sheet.cellEntries()) {\n const value = data.formula ? workbook.valueAt(sheet, { row, col }) : data.value;\n cells.push({\n row,\n column: col,\n formula: data.formula,\n value: semanticValue(value, data.formula !== null),\n });\n }\n cells.sort((left, right) => left.row - right.row || left.column - right.column);\n return { name: sheet.name, cells };\n });\n return sha256(canonicalBytes({ version: 1, sheets } satisfies SemanticWorkbook));\n}\n\nfunction semanticValue(value: unknown, formula: boolean): SpreadsheetArtifactProjectedCellValue {\n if (value === null || value === undefined) return { kind: \"empty\" };\n if (typeof value === \"boolean\") return { kind: \"boolean\", value };\n if (typeof value === \"number\" && Number.isFinite(value)) return { kind: \"number\", value };\n if (value instanceof Date) {\n const milliseconds = Date.prototype.getTime.call(value);\n if (!Number.isSafeInteger(milliseconds)) throw unsupported();\n return { kind: \"date\", value: new Date(milliseconds).toISOString() };\n }\n if (typeof value === \"string\") {\n if (formula) {\n const error = FORMULA_ERROR_TO_NATIVE[value];\n if (error) return { kind: \"error\", value: error };\n if (value === \"#CYCLE!\") return { kind: \"error\", value: { custom: value } };\n }\n return { kind: \"text\", value };\n }\n throw unsupported();\n}\n\nfunction hostValue(\n value: SpreadsheetArtifactProjectedCellValue,\n): string | number | boolean | Date | null {\n switch (value.kind) {\n case \"empty\":\n return null;\n case \"boolean\":\n case \"number\":\n case \"text\":\n return value.value;\n case \"date\":\n return new Date(value.value);\n case \"error\": {\n if (typeof value.value === \"object\") return value.value.custom;\n const projected = NATIVE_ERROR_TO_FORMULA[value.value];\n if (!projected) throw unsupported();\n return projected;\n }\n }\n}\n\nfunction assertRepresentableValue(value: SpreadsheetArtifactProjectedCellValue): void {\n hostValue(value);\n}\n\nconst NATIVE_ERROR_TO_FORMULA: Readonly<Record<string, string>> = Object.freeze({\n divide_by_zero: \"#DIV/0!\",\n value: \"#VALUE!\",\n reference: \"#REF!\",\n name: \"#NAME?\",\n number: \"#NUM!\",\n not_available: \"#N/A\",\n});\nconst FORMULA_ERROR_TO_NATIVE: Readonly<Record<string, SpreadsheetArtifactFormulaError>> =\n Object.freeze({\n \"#DIV/0!\": \"divide_by_zero\",\n \"#VALUE!\": \"value\",\n \"#REF!\": \"reference\",\n \"#NAME?\": \"name\",\n \"#NUM!\": \"number\",\n \"#N/A\": \"not_available\",\n });\n\n/**\n * Exact producer profile derived from the same verified native runtime used by\n * the materializer child. The API uses this rather than accepting job identity\n * facts from clients.\n */\nexport function editableArtifactMaterializerCapabilitiesForRuntime(\n runtime: ArtifactKernelRuntime,\n packageVersion: string,\n): EditableArtifactNativeMaterializerCapabilities {\n return Object.freeze({\n protocol: \"OGAMC001\",\n runtimeKind: \"native\",\n runtimeTarget: runtime.target,\n kernelVersion: runtime.buildIdentity,\n codecVersions: Object.freeze({ [XLSX_CODEC_ID]: codecVersion(packageVersion) }),\n fontRegistryHash: EMPTY_FONT_REGISTRY_HASH,\n policyHash: POLICY_HASH,\n maxOutputBytes: MAX_OUTPUT_BYTES,\n supportedModelSchemaVersions: Object.freeze([1] as const),\n supportedOperationProtocolVersions: Object.freeze([1] as const),\n supportedSnapshotProtocolVersions: Object.freeze([1] as const),\n });\n}\n\nfunction assertManifestCompatibility(\n manifest: MaterializationManifest,\n capabilities: EditableArtifactNativeMaterializerCapabilities,\n): void {\n if (\n manifest.modelSchemaVersion !== 1 ||\n manifest.operationProtocolVersion !== 1 ||\n manifest.snapshotProtocolVersion !== 1 ||\n manifest.kernelVersion !== capabilities.kernelVersion ||\n manifest.codecVersion !==\n (capabilities.codecVersions as Readonly<Record<string, string>>)[manifest.codecId] ||\n manifest.fontRegistryHash !== capabilities.fontRegistryHash ||\n manifest.policyHash !== capabilities.policyHash ||\n Object.keys(manifest.normalizedOptions).length !== 0\n ) {\n throw incompatible();\n }\n}\n\nfunction decodeManifest(value: Uint8Array): MaterializationManifest {\n const record = strictCanonicalRecord(value, [\n \"artifactId\",\n \"codecId\",\n \"codecVersion\",\n \"fontRegistryHash\",\n \"format\",\n \"inputSnapshotId\",\n \"jobId\",\n \"kernelVersion\",\n \"modality\",\n \"modelSchemaVersion\",\n \"normalizedOptions\",\n \"operationProtocolVersion\",\n \"optionsHash\",\n \"policyHash\",\n \"protocol\",\n \"snapshotProtocolVersion\",\n \"sourceByteSize\",\n \"sourceContentHash\",\n \"stateHash\",\n \"targetHeadSequence\",\n \"versionId\",\n ]);\n if (\n record.protocol !== \"OGAMJ001\" ||\n !positiveInteger(record.sourceByteSize) ||\n !positiveInteger(record.targetHeadSequence) ||\n !isHash(record.sourceContentHash) ||\n !isHash(record.stateHash) ||\n !isHash(record.optionsHash) ||\n !isHash(record.fontRegistryHash) ||\n !isHash(record.policyHash) ||\n !plainRecord(record.normalizedOptions)\n ) {\n throw invalidSource();\n }\n return record as MaterializationManifest;\n}\n\nfunction decodeVerificationManifest(value: Uint8Array): Readonly<{\n protocol: \"OGAVJ001\";\n format: string;\n codecId: string;\n codecVersion: string;\n expectedSemanticHash: string;\n}> {\n const record = strictCanonicalRecord(value, [\n \"codecId\",\n \"codecVersion\",\n \"expectedSemanticHash\",\n \"format\",\n \"protocol\",\n ]);\n if (record.protocol !== \"OGAVJ001\" || !isHash(record.expectedSemanticHash)) {\n throw invalidSource();\n }\n return record as never;\n}\n\nfunction strictCanonicalRecord(\n value: Uint8Array,\n keys: readonly string[],\n): Record<string, unknown> {\n const text = new TextDecoder(\"utf-8\", { fatal: true }).decode(value);\n const parsed = JSON.parse(text) as unknown;\n if (!plainRecord(parsed) || JSON.stringify(parsed) !== text) throw invalidSource();\n if (Object.keys(parsed).sort().join(\"\\0\") !== [...keys].sort().join(\"\\0\")) throw invalidSource();\n return parsed;\n}\n\nasync function writeTypedError(\n code: string,\n diagnosticSubcode?: NativeSourceDiagnosticSubcode,\n): Promise<void> {\n await writeFrame(\n ERROR_MAGIC,\n canonicalBytes({\n code,\n protocol: \"OGAMERR1\",\n ...(diagnosticSubcode ? { subcode: diagnosticSubcode } : {}),\n }),\n new Uint8Array(0),\n );\n}\n\nasync function writeFrame(\n magic: Uint8Array,\n metadata: Uint8Array,\n payload: Uint8Array,\n): Promise<void> {\n const header = new Uint8Array(12);\n const view = new DataView(header.buffer);\n view.setUint32(0, metadata.byteLength, true);\n view.setBigUint64(4, BigInt(payload.byteLength), true);\n await writeStdout(magic);\n await writeStdout(header);\n await writeStdout(metadata);\n for (let offset = 0; offset < payload.byteLength; offset += 1024 * 1024) {\n await writeStdout(payload.subarray(offset, Math.min(payload.byteLength, offset + 1024 * 1024)));\n }\n}\n\nasync function writeStdout(value: Uint8Array): Promise<void> {\n if (!process.stdout.write(value)) await once(process.stdout, \"drain\");\n}\n\nclass InputReader {\n readonly #iterator: AsyncIterator<Buffer | string>;\n #buffer = new Uint8Array(0);\n #done = false;\n\n constructor(stream: NodeJS.ReadableStream & AsyncIterable<Buffer | string>) {\n this.#iterator = stream[Symbol.asyncIterator]();\n }\n\n async readExactly(length: number): Promise<Uint8Array> {\n if (!Number.isSafeInteger(length) || length < 0 || length > MAX_SOURCE_BYTES)\n throw invalidSource();\n const result = new Uint8Array(length);\n let offset = 0;\n while (offset < length) {\n if (this.#buffer.byteLength === 0) await this.#fill();\n if (this.#buffer.byteLength === 0) throw invalidSource();\n const count = Math.min(length - offset, this.#buffer.byteLength);\n result.set(this.#buffer.subarray(0, count), offset);\n this.#buffer = this.#buffer.subarray(count);\n offset += count;\n }\n return result;\n }\n\n async assertEof(): Promise<void> {\n if (this.#buffer.byteLength > 0) throw invalidSource();\n if (!this.#done) await this.#fill();\n if (!this.#done || this.#buffer.byteLength > 0) throw invalidSource();\n }\n\n async #fill(): Promise<void> {\n const next = await this.#iterator.next();\n if (next.done) {\n this.#done = true;\n return;\n }\n if (typeof next.value === \"string\") throw invalidSource();\n this.#buffer = new Uint8Array(\n next.value.buffer,\n next.value.byteOffset,\n next.value.byteLength,\n ).slice();\n }\n}\n\nfunction codecVersion(packageVersion: string): string {\n return `xlsx-v1@${packageVersion}`;\n}\n\nfunction canonicalBytes(value: unknown): Uint8Array {\n return bytes(JSON.stringify(value));\n}\n\nfunction bytes(value: string): Uint8Array {\n return new TextEncoder().encode(value);\n}\n\nfunction sha256(value: Uint8Array): string {\n return `sha256:${createHash(\"sha256\").update(value).digest(\"hex\")}`;\n}\n\nfunction safeU64(view: DataView, offset: number, label: string): number {\n const value = view.getBigUint64(offset, true);\n if (value > BigInt(Number.MAX_SAFE_INTEGER)) throw new Error(`${label} exceeds safe integer`);\n return Number(value);\n}\n\nfunction assertBytes(actual: Uint8Array, expected: Uint8Array, label: string): void {\n if (\n actual.byteLength !== expected.byteLength ||\n !actual.every((byte, index) => byte === expected[index])\n ) {\n throw new Error(`${label} is invalid`);\n }\n}\n\nfunction plainRecord(value: unknown): value is Record<string, unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.getPrototypeOf(value) === Object.prototype\n );\n}\n\nfunction positiveInteger(value: unknown): value is number {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value > 0;\n}\n\nfunction isHash(value: unknown): value is string {\n return typeof value === \"string\" && /^sha256:[0-9a-f]{64}$/u.test(value);\n}\n\nclass MaterializerCliError extends Error {\n readonly code:\n | \"unsupported_semantics\"\n | \"source_identity_mismatch\"\n | \"kernel_incompatible\"\n | \"output_verification_failed\";\n\n constructor(\n code: MaterializerCliError[\"code\"],\n readonly diagnosticSubcode?: NativeSourceDiagnosticSubcode,\n ) {\n super(code);\n this.name = \"MaterializerCliError\";\n this.code = code;\n }\n}\n\nfunction unsupported(): MaterializerCliError {\n return new MaterializerCliError(\"unsupported_semantics\");\n}\nfunction invalidSource(diagnosticSubcode?: NativeSourceDiagnosticSubcode): MaterializerCliError {\n return new MaterializerCliError(\"source_identity_mismatch\", diagnosticSubcode);\n}\nfunction incompatible(): MaterializerCliError {\n return new MaterializerCliError(\"kernel_incompatible\");\n}\nfunction invalidOutput(): MaterializerCliError {\n return new MaterializerCliError(\"output_verification_failed\");\n}\n\nfunction classifyInvalidSource(\n error: unknown,\n diagnosticSubcode: NativeSourceDiagnosticSubcode,\n): unknown {\n return error instanceof MaterializerCliError && error.code === \"source_identity_mismatch\"\n ? invalidSource(error.diagnosticSubcode ?? diagnosticSubcode)\n : error;\n}\n\nasync function loadRuntime(\n environment: Readonly<Record<string, string | undefined>>,\n): Promise<Awaited<ReturnType<typeof loadConfiguredArtifactKernelRuntime>>> {\n try {\n return await loadConfiguredArtifactKernelRuntime(environment);\n } catch {\n throw incompatible();\n }\n}\n"],"mappings":"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","names":[]}