poe-code 10.0.3 → 10.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,11 +14,12 @@ import {
14
14
  makeLogModule,
15
15
  makeMcpModule,
16
16
  makeMetricModule,
17
+ migrateSnapshotFile,
17
18
  parseEnvConfig,
18
19
  parseMcpConfig,
19
20
  splitFrontmatter,
20
21
  withBrokenPipeGuard
21
- } from "./chunks/chunk-MRH5YDMR.js";
22
+ } from "./chunks/chunk-SA7XBTIL.js";
22
23
  import {
23
24
  Budget,
24
25
  SandboxError,
@@ -30,7 +31,7 @@ import {
30
31
  replaceErrorStack,
31
32
  restore,
32
33
  run
33
- } from "./chunks/chunk-A2XBEN3H.js";
34
+ } from "./chunks/chunk-JLYBD3E6.js";
34
35
  import "./chunks/chunk-4YIDX44G.js";
35
36
 
36
37
  // packages/safejs/src/cli.ts
@@ -53,6 +54,15 @@ async function runCli(argv, options = {}) {
53
54
  try {
54
55
  if (argv.includes("--help") || argv.includes("-h")) {
55
56
  stdout.write(`${createUsage()}
57
+ `);
58
+ return 0;
59
+ }
60
+ if (argv[0] === "migrate") {
61
+ const result = await migrateSnapshotFile({
62
+ ...parseMigrationArgs(argv.slice(1)),
63
+ cwd: options.cwd ?? readCurrentWorkingDirectory()
64
+ });
65
+ stdout.write(`${JSON.stringify(result, null, 2)}
56
66
  `);
57
67
  return 0;
58
68
  }
@@ -99,6 +109,42 @@ function readCurrentWorkingDirectory() {
99
109
  throw new Error(`Unable to resolve current working directory: ${readErrorMessage(error)}`);
100
110
  }
101
111
  }
112
+ function parseMigrationArgs(argv) {
113
+ const result = { snapshotPath: "", sourcePath: "" };
114
+ const paths = /* @__PURE__ */ new Map([
115
+ ["--from", "sourcePath"],
116
+ ["--to", "targetSourcePath"],
117
+ ["--plan", "planPath"],
118
+ ["--output", "outputPath"]
119
+ ]);
120
+ const seen = /* @__PURE__ */ new Set();
121
+ for (let index = 0; index < argv.length; index += 1) {
122
+ const argument = argv[index];
123
+ if (!argument.startsWith("-")) {
124
+ if (result.snapshotPath.length > 0)
125
+ throw new TypeError("Migration accepts exactly one snapshot path.");
126
+ result.snapshotPath = argument;
127
+ continue;
128
+ }
129
+ if (seen.has(argument)) throw new TypeError(`Duplicate migration option: ${argument}`);
130
+ seen.add(argument);
131
+ if (argument === "--inspect") {
132
+ result.inspect = true;
133
+ continue;
134
+ }
135
+ if (argument === "--dry-run") {
136
+ result.dryRun = true;
137
+ continue;
138
+ }
139
+ const key = paths.get(argument);
140
+ if (key === void 0) throw new TypeError(`Unknown migration option: ${argument}`);
141
+ const value = argv[++index];
142
+ if (value === void 0 || value.startsWith("--"))
143
+ throw new TypeError(`${argument} requires a path.`);
144
+ result[key] = value;
145
+ }
146
+ return result;
147
+ }
102
148
  function parseArgs(argv) {
103
149
  const parsed = {
104
150
  fix: false,
@@ -524,6 +570,9 @@ function formatConsoleArgs(args) {
524
570
  function createUsage() {
525
571
  return [
526
572
  "Usage: poe-safejs [options] <script.md|script.safejs|script.ajs>",
573
+ " poe-safejs migrate <checkpoint.json> --from <original.ajs> --inspect",
574
+ " poe-safejs migrate <checkpoint.json> --from <original.ajs> --to <continuation.ajs>",
575
+ " --plan <migration.json> --output <new-checkpoint.json> [--dry-run]",
527
576
  "",
528
577
  "Options:",
529
578
  " --fix apply lint fixes before running",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/cli.ts"],
4
- "sourcesContent": ["#!/usr/bin/env node\nimport { mkdir, readFile, realpath, stat, writeFile } from \"node:fs/promises\";\nimport path, { dirname, extname } from \"node:path\";\nimport { formatWithOptions } from \"node:util\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { hasOwnErrorCode } from \"./error-codes.js\";\nimport { formatInterpreterError } from \"./error/format.js\";\nimport { replaceErrorStack } from \"./error/shape.js\";\nimport { Budget, SandboxError } from \"./interp/budget.js\";\nimport { countLineBreaks, extractBlock } from \"./loader/extract-block.js\";\nimport { splitFrontmatter } from \"./loader/frontmatter.js\";\nimport { lint, type Diagnostic, type Fix } from \"./lint.js\";\nimport { createLintModulesFromRuntimeRegistry } from \"./lint/runtime-modules.js\";\nimport { makeAgentModule } from \"./modules/agent.js\";\nimport { makeEnvModule, parseEnvConfig, type EnvModuleOptions } from \"./modules/env.js\";\nimport { makeFailModule } from \"./modules/fail.js\";\nimport { makeFsModule, type FsModuleOptions } from \"./modules/fs.js\";\nimport { makeMcpModule } from \"./modules/mcp.js\";\nimport { parseMcpConfig, type McpModuleOptions } from \"./modules/mcp-transport.js\";\nimport { makeHarnessModule } from \"./modules/harness.js\";\nimport { makeLogModule, type LogModuleEntry } from \"./modules/log.js\";\nimport { makeMetricModule } from \"./modules/metric.js\";\nimport {\n createBrokenPipeState,\n createSafeOutputStream,\n withBrokenPipeGuard,\n type BrokenPipeState,\n type OutputStream\n} from \"./output-stream.js\";\nimport type { CallerInjectedBinding } from \"./interp/host-bridge.js\";\nimport type { ModuleExports, ModuleRegistry } from \"./modules/registry.js\";\nimport { parseModule } from \"./parse/parser.js\";\nimport { restore, type SafeJSSnapshot } from \"./restore.js\";\nimport { run, type RunResult } from \"./run.js\";\nimport { dump, dumpCurrent } from \"./snapshot/dump.js\";\n\ntype CliStream = OutputStream;\n\ntype CliProcess = Pick<NodeJS.Process, \"off\" | \"on\">;\n\ntype FileStats = {\n isFile(): boolean;\n};\n\nexport type ReadMarkdownFile = (filepath: string, encoding: \"utf8\") => Promise<string>;\nexport type WriteMarkdownFile = (\n filepath: string,\n source: string,\n options: { encoding: \"utf8\" }\n) => Promise<void>;\n\nexport type RunCliOptions = {\n cwd?: string;\n env?: EnvModuleOptions;\n mcp?: McpModuleOptions;\n modulesFor?: (\n frontmatter: Record<string, unknown>,\n meta: HarnessMeta,\n streams: { stderr: CliStream; stdout: CliStream }\n ) => ModuleRegistry;\n process?: CliProcess;\n readFile?: ReadMarkdownFile;\n stat?: (filepath: string) => Promise<FileStats>;\n stdout?: CliStream;\n stderr?: CliStream;\n writeFile?: WriteMarkdownFile;\n};\n\ntype HarnessMeta = {\n filepath: string;\n kind: unknown;\n version: unknown;\n};\n\ntype ParsedArgs = {\n filepath?: string;\n fix: boolean;\n fs: boolean;\n fsRoot?: string;\n envConfig?: string;\n mcpConfig?: string;\n dataSize?: number;\n maxSteps?: number;\n restorePath?: string;\n snapshotPath?: string;\n};\n\ntype LoadedSource = {\n sourceOffset: number;\n fixRanges?: readonly Fix[\"range\"][];\n executableSource: string;\n frontmatter: Record<string, unknown>;\n isRawScript: boolean;\n rawSource: string;\n};\n\ntype CliRuntime = {\n registry: ModuleRegistry;\n};\n\nconst EXIT_RUNTIME = 1;\nconst EXIT_PARSE = 2;\nconst EXIT_BUDGET = 3;\nconst EXIT_SIGINT = 130;\n\nexport async function runCli(\n argv: readonly string[],\n options: RunCliOptions = {}\n): Promise<number> {\n const brokenPipe = createBrokenPipeState();\n const stdout = createSafeOutputStream(options.stdout ?? process.stdout, brokenPipe);\n const stderr = createSafeOutputStream(options.stderr ?? process.stderr, brokenPipe);\n\n return withBrokenPipeGuard(\n [options.stdout ?? process.stdout, options.stderr ?? process.stderr],\n brokenPipe,\n async () => {\n try {\n if (argv.includes(\"--help\") || argv.includes(\"-h\")) {\n stdout.write(`${createUsage()}\\n`);\n return 0;\n }\n\n const parsed = parseArgs(argv);\n if (parsed.filepath === undefined) {\n stderr.write(`${createUsage()}\\n`);\n return brokenPipe.closed ? 0 : EXIT_RUNTIME;\n }\n\n const cwd = options.cwd ?? readCurrentWorkingDirectory();\n const filepath = path.resolve(cwd, parsed.filepath);\n await assertHarnessFile({\n displayPath: parsed.filepath,\n filepath,\n statFile: options.stat ?? stat\n });\n\n return await runScriptFile(filepath, parsed, {\n cwd,\n env: options.env,\n mcp: options.mcp,\n modulesFor: options.modulesFor,\n process: options.process ?? process,\n readFile: options.readFile ?? readFile,\n brokenPipe,\n stderr,\n stdout,\n writeFile: options.writeFile ?? writeFile\n });\n } catch (error) {\n if (brokenPipe.closed) {\n return 0;\n }\n stderr.write(`${readErrorMessage(error)}\\n`);\n return brokenPipe.closed\n ? 0\n : error instanceof CliExitError\n ? error.exitCode\n : exitCodeForError(error);\n }\n }\n );\n}\n\nfunction readCurrentWorkingDirectory(): string {\n try {\n return process.cwd();\n } catch (error) {\n throw new Error(`Unable to resolve current working directory: ${readErrorMessage(error)}`);\n }\n}\n\nfunction parseArgs(argv: readonly string[]): ParsedArgs {\n const parsed: ParsedArgs = {\n fix: false,\n fs: false\n };\n\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n\n if (arg === \"--fix\") {\n parsed.fix = true;\n continue;\n }\n\n if (arg === \"--fs\") {\n parsed.fs = true;\n continue;\n }\n\n if (arg === \"--fs-root\") {\n parsed.fsRoot = readFlagValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--mcp-config\") {\n parsed.mcpConfig = readFlagValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--env-config\") {\n parsed.envConfig = readFlagValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--snapshot\") {\n parsed.snapshotPath = readFlagValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--restore\") {\n parsed.restorePath = readFlagValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--max-steps\") {\n parsed.maxSteps = readPositiveInteger(readFlagValue(argv, index, arg), arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--data-size\") {\n parsed.dataSize = readPositiveInteger(readFlagValue(argv, index, arg), arg);\n index += 1;\n continue;\n }\n\n if (arg.startsWith(\"-\")) {\n throw new CliExitError(`Unknown flag: ${arg}`, EXIT_RUNTIME);\n }\n\n if (parsed.filepath !== undefined) {\n throw new CliExitError(`Unexpected argument: ${arg}`, EXIT_RUNTIME);\n }\n\n parsed.filepath = arg;\n }\n\n if (!parsed.fs && parsed.fsRoot !== undefined) {\n throw new CliExitError(\n \"--fs-root requires --fs. Pass --fs to give the script a filesystem confined to that root, or drop --fs-root.\",\n EXIT_RUNTIME\n );\n }\n\n return parsed;\n}\n\nfunction readFlagValue(argv: readonly string[], index: number, flag: string): string {\n const value = argv[index + 1];\n if (value === undefined || value.length === 0) {\n throw new CliExitError(`Missing value for ${flag}`, EXIT_RUNTIME);\n }\n\n return value;\n}\n\nfunction readPositiveInteger(value: string, flag: string): number {\n const parsed = Number(value);\n\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new CliExitError(`${flag} must be a positive integer`, EXIT_RUNTIME);\n }\n\n return parsed;\n}\n\nasync function assertHarnessFile(input: {\n displayPath: string;\n filepath: string;\n statFile: (filepath: string) => Promise<FileStats>;\n}): Promise<void> {\n let stats: FileStats;\n try {\n stats = await input.statFile(input.filepath);\n } catch (error) {\n if (hasErrorCode(error, \"ENOENT\")) {\n throw new CliExitError(`File not found: ${input.displayPath}`, EXIT_RUNTIME);\n }\n\n throw error;\n }\n\n if (!stats.isFile()) {\n throw new CliExitError(`Harness path must point to a file: ${input.displayPath}`, EXIT_RUNTIME);\n }\n}\n\nasync function runScriptFile(\n filepath: string,\n parsed: ParsedArgs,\n options: {\n cwd: string;\n env: EnvModuleOptions | undefined;\n mcp: McpModuleOptions | undefined;\n modulesFor: RunCliOptions[\"modulesFor\"];\n brokenPipe: BrokenPipeState;\n process: CliProcess;\n readFile: ReadMarkdownFile;\n stderr: CliStream;\n stdout: CliStream;\n writeFile: WriteMarkdownFile;\n }\n): Promise<number> {\n const loaded = loadExecutableSource(filepath, await options.readFile(filepath, \"utf8\"));\n const meta = {\n filepath,\n kind: loaded.frontmatter.kind,\n version: loaded.frontmatter.version\n };\n const runtime = createRuntime(loaded.frontmatter, meta, {\n fs: parsed.fs\n ? { root: path.resolve(options.cwd, parsed.fsRoot ?? dirname(filepath)) }\n : undefined,\n modulesFor: options.modulesFor,\n stderr: options.stderr,\n stdout: options.stdout\n });\n let env = options.env;\n if (parsed.envConfig !== undefined) {\n if (env !== undefined)\n throw new TypeError(\"Pass environment options or --env-config, not both.\");\n const configPath = path.resolve(options.cwd, parsed.envConfig);\n env = parseEnvConfig(await options.readFile(configPath, \"utf8\"));\n }\n if (env !== undefined) {\n const registry = new Map(\n runtime.registry instanceof Map ? runtime.registry : Object.entries(runtime.registry)\n );\n if (registry.has(\"env\"))\n throw new TypeError(\"Environment is already registered by modulesFor.\");\n registry.set(\"env\", makeEnvModule(env));\n runtime.registry = registry;\n }\n let mcp = options.mcp;\n if (parsed.mcpConfig !== undefined) {\n if (mcp !== undefined) throw new TypeError(\"Pass MCP options or --mcp-config, not both.\");\n const configPath = path.resolve(options.cwd, parsed.mcpConfig);\n mcp = parseMcpConfig(await options.readFile(configPath, \"utf8\"), dirname(configPath));\n }\n if (mcp !== undefined) {\n const registry = new Map(\n runtime.registry instanceof Map ? runtime.registry : Object.entries(runtime.registry)\n );\n if (registry.has(\"mcp\")) throw new TypeError(\"MCP is already registered by modulesFor.\");\n registry.set(\"mcp\", makeMcpModule(mcp));\n runtime.registry = registry;\n }\n const modules = excludeHarnessModule(runtime.registry, loaded.isRawScript);\n let executableSource = loaded.executableSource;\n const lintResult = parsed.fix\n ? lint(executableSource, {\n allowedExportNames: [\"schema\"],\n filename: filepath,\n fix: true,\n fixRanges: loaded.fixRanges,\n frontmatterFields: Object.keys(loaded.frontmatter),\n modules: createLintModulesFromRuntimeRegistry(modules)\n })\n : lint(executableSource, {\n allowedExportNames: [\"schema\"],\n filename: filepath,\n frontmatterFields: Object.keys(loaded.frontmatter),\n modules: createLintModulesFromRuntimeRegistry(modules)\n });\n const diagnostics = Array.isArray(lintResult) ? lintResult : lintResult.diagnostics;\n\n if (!Array.isArray(lintResult)) {\n executableSource = lintResult.fixed;\n if (lintResult.fixed !== loaded.executableSource) {\n await options.writeFile(\n filepath,\n replaceExecutableSource(loaded.rawSource, loaded, lintResult.fixes),\n {\n encoding: \"utf8\"\n }\n );\n }\n }\n\n const lintErrors = diagnostics.filter((diagnostic) => diagnostic.severity === \"error\");\n if (lintErrors.length > 0) {\n options.stderr.write(`Lint failed:\\n${formatDiagnostics(lintErrors)}\\n`);\n if (options.brokenPipe.closed) {\n return 0;\n }\n return lintErrors.some((diagnostic) => diagnostic.code === \"AS001\") ? EXIT_PARSE : EXIT_RUNTIME;\n }\n\n const lintWarnings = diagnostics.filter((diagnostic) => diagnostic.severity === \"warning\");\n if (lintWarnings.length > 0) {\n options.stderr.write(`Lint warnings:\\n${formatDiagnostics(lintWarnings)}\\n`);\n if (options.brokenPipe.closed) {\n return 0;\n }\n }\n\n const snapshot = await readRestoreSnapshot(parsed.restorePath, options);\n if (snapshot !== undefined) {\n restore(snapshot, { source: executableSource });\n }\n\n const abortController = new AbortController();\n let interrupted = false;\n let runPromise: Promise<RunResult> | undefined;\n let signalSnapshotWrite: Promise<void> | undefined;\n const onSigint = () => {\n interrupted = true;\n abortController.abort(createAbortError());\n options.stderr.write(\"Interrupted by SIGINT\\n\");\n\n if (parsed.snapshotPath !== undefined && runPromise !== undefined) {\n signalSnapshotWrite = writeCurrentSnapshot(runPromise, parsed.snapshotPath, options);\n }\n };\n\n options.process.on(\"SIGINT\", onSigint);\n try {\n runPromise = run(executableSource, {\n budget:\n parsed.maxSteps === undefined && parsed.dataSize === undefined\n ? undefined\n : new Budget({ dataSize: parsed.dataSize, maxSteps: parsed.maxSteps }),\n entryPointArgs: hasDefaultExport(executableSource, filepath) ? [] : undefined,\n filename: filepath,\n modules,\n signal: abortController.signal,\n sink: createConsoleSink(options.stdout, options.stderr),\n snapshot\n });\n const result = await runPromise;\n await signalSnapshotWrite;\n\n if (options.brokenPipe.closed) {\n return 0;\n }\n\n if (parsed.snapshotPath !== undefined) {\n await writeSnapshot(parsed.snapshotPath, await dump(result), options);\n }\n\n if (!result.ok) {\n options.stderr.write(\n `${formatInterpreterError(result.error, {\n filename: filepath,\n source: executableSource\n })}\\n`\n );\n if (options.brokenPipe.closed) {\n return 0;\n }\n return interrupted ? EXIT_SIGINT : exitCodeForError(result.error);\n }\n\n options.stdout.write(`${JSON.stringify({ ok: true, returnValue: result.returnValue })}\\n`);\n return options.brokenPipe.closed ? 0 : interrupted ? EXIT_SIGINT : 0;\n } catch (error) {\n await signalSnapshotWrite;\n if (parsed.snapshotPath !== undefined && runPromise !== undefined) {\n try {\n await writeSnapshot(\n parsed.snapshotPath,\n await dump(runPromise, { onFailure: \"checkpoint\" }),\n options\n );\n } catch (snapshotError) {\n options.stderr.write(\n `Failed to write recovery snapshot at ${parsed.snapshotPath}: ${readErrorMessage(snapshotError)}. Any existing snapshot may be stale.\\n`\n );\n }\n }\n if (options.brokenPipe.closed) {\n return 0;\n }\n options.stderr.write(\n `${formatInterpreterError(error, {\n filename: filepath,\n source: executableSource\n })}\\n`\n );\n return options.brokenPipe.closed ? 0 : interrupted ? EXIT_SIGINT : exitCodeForError(error);\n } finally {\n options.process.off(\"SIGINT\", onSigint);\n }\n}\n\nfunction loadExecutableSource(filepath: string, rawSource: string): LoadedSource {\n const source = stripByteOrderMark(rawSource);\n const byteOrderMarkLength = rawSource.length - source.length;\n\n if (isRawScriptExtension(extname(filepath))) {\n return {\n sourceOffset: byteOrderMarkLength,\n executableSource: source,\n frontmatter: {},\n isRawScript: true,\n rawSource\n };\n }\n\n const { frontmatter, body } = splitFrontmatter(source);\n const bodyStartOffset = source.length - body.length;\n const executableBlock = extractBlock(body, countLineBreaks(source, 0, bodyStartOffset) + 1);\n const lineOffset = countLineBreaks(source, 0, bodyStartOffset + executableBlock.startOffset);\n\n return {\n sourceOffset: byteOrderMarkLength + bodyStartOffset + executableBlock.startOffset - lineOffset,\n fixRanges: executableBlock.ranges.map(([start, end]) => [\n start - executableBlock.startOffset + lineOffset,\n end - executableBlock.startOffset + lineOffset\n ]),\n executableSource: createLineOffsetSource(executableBlock.source, lineOffset),\n frontmatter,\n isRawScript: false,\n rawSource\n };\n}\n\nfunction isRawScriptExtension(extension: string): boolean {\n return extension === \".safejs\" || extension === \".ajs\";\n}\n\nfunction replaceExecutableSource(\n source: string,\n loaded: LoadedSource,\n fixes: readonly Fix[]\n): string {\n return fixes.reduce(\n (result, fix) =>\n `${result.slice(0, loaded.sourceOffset + fix.range[0])}${fix.replacement}${result.slice(loaded.sourceOffset + fix.range[1])}`,\n source\n );\n}\n\nfunction createRuntime(\n frontmatter: Record<string, unknown>,\n meta: HarnessMeta,\n options: {\n fs: FsModuleOptions | undefined;\n modulesFor: RunCliOptions[\"modulesFor\"];\n stderr: CliStream;\n stdout: CliStream;\n }\n): CliRuntime {\n if (options.modulesFor !== undefined) {\n return {\n registry: options.modulesFor(frontmatter, meta, {\n stderr: options.stderr,\n stdout: options.stdout\n })\n };\n }\n\n const state = {\n checkpointCount: 0,\n commitCount: 0,\n metricCalls: new Map<string, number>(),\n spawnCount: 0\n };\n const harness = makeHarnessModule(frontmatter, meta);\n const agent = makeAgentModule(async (input) => {\n state.spawnCount += 1;\n\n return {\n exitCode: 0,\n stdout: \"\",\n stderr: \"\",\n summary: `${input.agent} handled ${summarizePrompt(input.prompt)}`,\n durationMs: 25 * state.spawnCount\n };\n });\n const git = {\n async checkpoint() {\n state.checkpointCount += 1;\n return {\n head: `head-${state.checkpointCount}`,\n stashRef: `savepoint-${state.checkpointCount}`\n };\n },\n async commit() {\n state.commitCount += 1;\n return `commit-${state.commitCount}`;\n },\n async revert() {\n return undefined;\n }\n };\n const log = makeLogModule((entry) => {\n const normalized = normalizeLogEntry(entry);\n const stream = normalized.type === \"error\" ? options.stderr : options.stdout;\n stream.write(`${JSON.stringify(normalized)}\\n`);\n });\n const metric = makeMetricModule(async (scriptName) => `${readMetricScore(scriptName, state)}\\n`);\n\n return {\n registry: {\n agent: toModuleExports(agent),\n fail: toModuleExports(new Map([[\"default\", makeFailModule().default]])),\n // The one module here that is not a stub, so it is registered only when asked for.\n ...(options.fs === undefined ? {} : { fs: toModuleExports(makeFsModule(options.fs)) }),\n git: toModuleExports(\n new Map<string, CallerInjectedBinding>([\n [\"checkpoint\", git.checkpoint],\n [\"commit\", git.commit],\n [\"revert\", git.revert]\n ])\n ),\n harness: toModuleExports(harness),\n log: toModuleExports(log),\n metric: toModuleExports(metric)\n }\n };\n}\n\nasync function readRestoreSnapshot(\n restorePath: string | undefined,\n options: {\n cwd: string;\n readFile: ReadMarkdownFile;\n }\n): Promise<SafeJSSnapshot | undefined> {\n if (restorePath === undefined) {\n return undefined;\n }\n\n const snapshotPath = path.resolve(options.cwd, restorePath);\n let rawSnapshot: string;\n try {\n rawSnapshot = await options.readFile(snapshotPath, \"utf8\");\n } catch (error) {\n if (hasErrorCode(error, \"ENOENT\")) {\n throw new CliExitError(`Snapshot not found: ${restorePath}`, EXIT_RUNTIME);\n }\n\n throw error;\n }\n\n try {\n return JSON.parse(rawSnapshot) as SafeJSSnapshot;\n } catch (error) {\n throw new Error(`Failed to parse snapshot at ${restorePath}: ${readErrorMessage(error)}`);\n }\n}\n\nasync function writeCurrentSnapshot(\n result: PromiseLike<RunResult>,\n snapshotPath: string,\n options: {\n cwd: string;\n stderr: CliStream;\n writeFile: WriteMarkdownFile;\n }\n): Promise<void> {\n try {\n await writeSnapshot(snapshotPath, await dumpCurrent(result), options);\n } catch (error) {\n options.stderr.write(\n `Failed to write snapshot at ${snapshotPath}: ${readErrorMessage(error)}\\n`\n );\n }\n}\n\nasync function writeSnapshot(\n snapshotPath: string,\n content: string,\n options: {\n cwd: string;\n writeFile: WriteMarkdownFile;\n }\n): Promise<void> {\n const resolvedPath = path.resolve(options.cwd, snapshotPath);\n await mkdir(dirname(resolvedPath), { recursive: true });\n await options.writeFile(resolvedPath, content, { encoding: \"utf8\" });\n}\n\nfunction createConsoleSink(\n stdout: CliStream,\n stderr: CliStream\n): {\n error: (...args: unknown[]) => void;\n log: (...args: unknown[]) => void;\n} {\n return {\n error(...args) {\n stderr.write(`${formatConsoleArgs(args)}\\n`);\n },\n log(...args) {\n stdout.write(`${formatConsoleArgs(args)}\\n`);\n }\n };\n}\n\nfunction formatConsoleArgs(args: readonly unknown[]): string {\n return formatWithOptions({ colors: false, depth: 4 }, ...args);\n}\n\nfunction createUsage(): string {\n return [\n \"Usage: poe-safejs [options] <script.md|script.safejs|script.ajs>\",\n \"\",\n \"Options:\",\n \" --fix apply lint fixes before running\",\n \" --fs register the fs module: a real filesystem, unlike the agent,\",\n \" git, and metric stubs this runner bundles\",\n \" --fs-root <path> directory --fs confines the script to (default: the script's\",\n \" directory)\",\n \" --mcp-config <path> register named MCP servers from an explicit JSON config\",\n \" --env-config <path> grant environment reads from an explicit JSON config\",\n \" --snapshot <path> write success/failure state; best-effort snapshot on SIGINT\",\n \" --restore <path> restore from a snapshot before running\",\n \" --max-steps <n> cap interpreter step budget\",\n \" --data-size <n> cap retained sandbox data units\",\n \" -h, --help print this help\",\n \"\",\n \"Exit codes:\",\n \" 0 success\",\n \" 1 runtime, usage, file, or restore error\",\n \" 2 parse error\",\n \" 3 budget exceeded\",\n \" 130 interrupted by SIGINT\"\n ].join(\"\\n\");\n}\n\nfunction formatDiagnostics(diagnostics: readonly Diagnostic[]): string {\n return diagnostics\n .map(\n (diagnostic) =>\n `${diagnostic.filename}:${diagnostic.line}:${diagnostic.column} ${diagnostic.code} ${diagnostic.message}`\n )\n .join(\"\\n\");\n}\n\nfunction exitCodeForError(error: unknown): number {\n if (error instanceof SandboxError && error.code === \"budgetExceeded\") {\n return EXIT_BUDGET;\n }\n\n if (isParseError(error)) {\n return EXIT_PARSE;\n }\n\n return EXIT_RUNTIME;\n}\n\nfunction isParseError(error: unknown): boolean {\n return error instanceof Error && error.name === \"ParseError\";\n}\n\nfunction hasDefaultExport(source: string, filename: string): boolean {\n return parseModule(source, filename).body.some(\n (statement) => statement.type === \"ExportDefaultDeclaration\"\n );\n}\n\nfunction excludeHarnessModule(modules: ModuleRegistry, isRawScript: boolean): ModuleRegistry {\n if (!isRawScript) {\n return modules;\n }\n\n if (modules instanceof Map) {\n const rawModules = new Map(modules);\n rawModules.delete(\"harness\");\n return rawModules;\n }\n\n const rawModules = Object.create(null) as Record<string, ModuleExports>;\n\n for (const [moduleName, moduleExports] of Object.entries(modules)) {\n if (moduleName !== \"harness\") {\n rawModules[moduleName] = moduleExports;\n }\n }\n\n return rawModules;\n}\n\nfunction stripByteOrderMark(source: string): string {\n return source.startsWith(\"\\uFEFF\") ? source.slice(1) : source;\n}\n\nfunction createLineOffsetSource(source: string, lineOffset: number): string {\n return `${\"\\n\".repeat(Math.max(lineOffset, 0))}${source}`;\n}\n\nfunction normalizeLogEntry(entry: LogModuleEntry): LogModuleEntry {\n return {\n ...entry,\n ts: \"2026-04-29T00:00:00.000Z\"\n };\n}\n\nfunction summarizePrompt(prompt: string): string {\n const normalizedPrompt = prompt.trim().replaceAll(\"\\n\", \" \");\n return normalizedPrompt.length <= 48 ? normalizedPrompt : `${normalizedPrompt.slice(0, 45)}...`;\n}\n\nfunction readMetricScore(\n scriptName: string,\n state: {\n metricCalls: Map<string, number>;\n }\n): number {\n const callCount = (state.metricCalls.get(scriptName) ?? 0) + 1;\n state.metricCalls.set(scriptName, callCount);\n\n if (scriptName === \"tests\" && callCount === 1) {\n return 10;\n }\n\n if (scriptName === \"tests\" && callCount === 2) {\n return 9;\n }\n\n return 9 + callCount;\n}\n\nfunction toModuleExports(value: unknown): ModuleExports {\n return value as ModuleExports;\n}\n\nfunction createAbortError(): Error {\n if (typeof DOMException === \"function\") {\n const error = new DOMException(\"This operation was aborted\", \"AbortError\");\n replaceErrorStack(error);\n return error;\n }\n\n const error = new Error(\"This operation was aborted\");\n error.name = \"AbortError\";\n replaceErrorStack(error);\n return error;\n}\n\nfunction hasErrorCode(error: unknown, code: string): boolean {\n return hasOwnErrorCode(error, code);\n}\n\nfunction readErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n\n return String(error);\n}\n\nclass CliExitError extends Error {\n readonly exitCode: number;\n\n constructor(message: string, exitCode: number) {\n super(message);\n this.name = \"CliExitError\";\n this.exitCode = exitCode;\n }\n}\n\nasync function isDirectExecution(entryPoint: string | undefined): Promise<boolean> {\n if (typeof entryPoint !== \"string\" || entryPoint.length === 0) {\n return false;\n }\n\n try {\n const [resolvedEntryPoint, resolvedModule] = await Promise.all([\n realpath(path.resolve(entryPoint)),\n realpath(fileURLToPath(import.meta.url))\n ]);\n return resolvedEntryPoint === resolvedModule;\n } catch {\n return false;\n }\n}\n\nif (await isDirectExecution(process.argv[1])) {\n process.exitCode = await runCli(process.argv.slice(2));\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["#!/usr/bin/env node\nimport { mkdir, readFile, realpath, stat, writeFile } from \"node:fs/promises\";\nimport path, { dirname, extname } from \"node:path\";\nimport { formatWithOptions } from \"node:util\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { hasOwnErrorCode } from \"./error-codes.js\";\nimport { formatInterpreterError } from \"./error/format.js\";\nimport { replaceErrorStack } from \"./error/shape.js\";\nimport { Budget, SandboxError } from \"./interp/budget.js\";\nimport { countLineBreaks, extractBlock } from \"./loader/extract-block.js\";\nimport { splitFrontmatter } from \"./loader/frontmatter.js\";\nimport { lint, type Diagnostic, type Fix } from \"./lint.js\";\nimport { createLintModulesFromRuntimeRegistry } from \"./lint/runtime-modules.js\";\nimport { makeAgentModule } from \"./modules/agent.js\";\nimport { makeEnvModule, parseEnvConfig, type EnvModuleOptions } from \"./modules/env.js\";\nimport { makeFailModule } from \"./modules/fail.js\";\nimport { makeFsModule, type FsModuleOptions } from \"./modules/fs.js\";\nimport { makeMcpModule } from \"./modules/mcp.js\";\nimport { parseMcpConfig, type McpModuleOptions } from \"./modules/mcp-transport.js\";\nimport { makeHarnessModule } from \"./modules/harness.js\";\nimport { makeLogModule, type LogModuleEntry } from \"./modules/log.js\";\nimport { makeMetricModule } from \"./modules/metric.js\";\nimport {\n createBrokenPipeState,\n createSafeOutputStream,\n withBrokenPipeGuard,\n type BrokenPipeState,\n type OutputStream\n} from \"./output-stream.js\";\nimport type { CallerInjectedBinding } from \"./interp/host-bridge.js\";\nimport type { ModuleExports, ModuleRegistry } from \"./modules/registry.js\";\nimport { parseModule } from \"./parse/parser.js\";\nimport { restore, type SafeJSSnapshot } from \"./restore.js\";\nimport { run, type RunResult } from \"./run.js\";\nimport { dump, dumpCurrent } from \"./snapshot/dump.js\";\nimport { migrateSnapshotFile, type SnapshotMigrationFileOptions } from \"./migration-file.js\";\n\ntype CliStream = OutputStream;\n\ntype CliProcess = Pick<NodeJS.Process, \"off\" | \"on\">;\n\ntype FileStats = {\n isFile(): boolean;\n};\n\nexport type ReadMarkdownFile = (filepath: string, encoding: \"utf8\") => Promise<string>;\nexport type WriteMarkdownFile = (\n filepath: string,\n source: string,\n options: { encoding: \"utf8\" }\n) => Promise<void>;\n\nexport type RunCliOptions = {\n cwd?: string;\n env?: EnvModuleOptions;\n mcp?: McpModuleOptions;\n modulesFor?: (\n frontmatter: Record<string, unknown>,\n meta: HarnessMeta,\n streams: { stderr: CliStream; stdout: CliStream }\n ) => ModuleRegistry;\n process?: CliProcess;\n readFile?: ReadMarkdownFile;\n stat?: (filepath: string) => Promise<FileStats>;\n stdout?: CliStream;\n stderr?: CliStream;\n writeFile?: WriteMarkdownFile;\n};\n\ntype HarnessMeta = {\n filepath: string;\n kind: unknown;\n version: unknown;\n};\n\ntype ParsedArgs = {\n filepath?: string;\n fix: boolean;\n fs: boolean;\n fsRoot?: string;\n envConfig?: string;\n mcpConfig?: string;\n dataSize?: number;\n maxSteps?: number;\n restorePath?: string;\n snapshotPath?: string;\n};\n\ntype LoadedSource = {\n sourceOffset: number;\n fixRanges?: readonly Fix[\"range\"][];\n executableSource: string;\n frontmatter: Record<string, unknown>;\n isRawScript: boolean;\n rawSource: string;\n};\n\ntype CliRuntime = {\n registry: ModuleRegistry;\n};\n\nconst EXIT_RUNTIME = 1;\nconst EXIT_PARSE = 2;\nconst EXIT_BUDGET = 3;\nconst EXIT_SIGINT = 130;\n\nexport async function runCli(\n argv: readonly string[],\n options: RunCliOptions = {}\n): Promise<number> {\n const brokenPipe = createBrokenPipeState();\n const stdout = createSafeOutputStream(options.stdout ?? process.stdout, brokenPipe);\n const stderr = createSafeOutputStream(options.stderr ?? process.stderr, brokenPipe);\n\n return withBrokenPipeGuard(\n [options.stdout ?? process.stdout, options.stderr ?? process.stderr],\n brokenPipe,\n async () => {\n try {\n if (argv.includes(\"--help\") || argv.includes(\"-h\")) {\n stdout.write(`${createUsage()}\\n`);\n return 0;\n }\n\n if (argv[0] === \"migrate\") {\n const result = await migrateSnapshotFile({\n ...parseMigrationArgs(argv.slice(1)),\n cwd: options.cwd ?? readCurrentWorkingDirectory()\n });\n stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return 0;\n }\n const parsed = parseArgs(argv);\n if (parsed.filepath === undefined) {\n stderr.write(`${createUsage()}\\n`);\n return brokenPipe.closed ? 0 : EXIT_RUNTIME;\n }\n\n const cwd = options.cwd ?? readCurrentWorkingDirectory();\n const filepath = path.resolve(cwd, parsed.filepath);\n await assertHarnessFile({\n displayPath: parsed.filepath,\n filepath,\n statFile: options.stat ?? stat\n });\n\n return await runScriptFile(filepath, parsed, {\n cwd,\n env: options.env,\n mcp: options.mcp,\n modulesFor: options.modulesFor,\n process: options.process ?? process,\n readFile: options.readFile ?? readFile,\n brokenPipe,\n stderr,\n stdout,\n writeFile: options.writeFile ?? writeFile\n });\n } catch (error) {\n if (brokenPipe.closed) {\n return 0;\n }\n stderr.write(`${readErrorMessage(error)}\\n`);\n return brokenPipe.closed\n ? 0\n : error instanceof CliExitError\n ? error.exitCode\n : exitCodeForError(error);\n }\n }\n );\n}\n\nfunction readCurrentWorkingDirectory(): string {\n try {\n return process.cwd();\n } catch (error) {\n throw new Error(`Unable to resolve current working directory: ${readErrorMessage(error)}`);\n }\n}\n\nfunction parseMigrationArgs(argv: readonly string[]): SnapshotMigrationFileOptions {\n const result: SnapshotMigrationFileOptions = { snapshotPath: \"\", sourcePath: \"\" };\n const paths = new Map<string, \"sourcePath\" | \"targetSourcePath\" | \"planPath\" | \"outputPath\">([\n [\"--from\", \"sourcePath\"],\n [\"--to\", \"targetSourcePath\"],\n [\"--plan\", \"planPath\"],\n [\"--output\", \"outputPath\"]\n ]);\n const seen = new Set<string>();\n for (let index = 0; index < argv.length; index += 1) {\n const argument = argv[index]!;\n if (!argument.startsWith(\"-\")) {\n if (result.snapshotPath.length > 0)\n throw new TypeError(\"Migration accepts exactly one snapshot path.\");\n result.snapshotPath = argument;\n continue;\n }\n if (seen.has(argument)) throw new TypeError(`Duplicate migration option: ${argument}`);\n seen.add(argument);\n if (argument === \"--inspect\") {\n result.inspect = true;\n continue;\n }\n if (argument === \"--dry-run\") {\n result.dryRun = true;\n continue;\n }\n const key = paths.get(argument);\n if (key === undefined) throw new TypeError(`Unknown migration option: ${argument}`);\n const value = argv[++index];\n if (value === undefined || value.startsWith(\"--\"))\n throw new TypeError(`${argument} requires a path.`);\n result[key] = value;\n }\n return result;\n}\n\nfunction parseArgs(argv: readonly string[]): ParsedArgs {\n const parsed: ParsedArgs = {\n fix: false,\n fs: false\n };\n\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n\n if (arg === \"--fix\") {\n parsed.fix = true;\n continue;\n }\n\n if (arg === \"--fs\") {\n parsed.fs = true;\n continue;\n }\n\n if (arg === \"--fs-root\") {\n parsed.fsRoot = readFlagValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--mcp-config\") {\n parsed.mcpConfig = readFlagValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--env-config\") {\n parsed.envConfig = readFlagValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--snapshot\") {\n parsed.snapshotPath = readFlagValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--restore\") {\n parsed.restorePath = readFlagValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--max-steps\") {\n parsed.maxSteps = readPositiveInteger(readFlagValue(argv, index, arg), arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--data-size\") {\n parsed.dataSize = readPositiveInteger(readFlagValue(argv, index, arg), arg);\n index += 1;\n continue;\n }\n\n if (arg.startsWith(\"-\")) {\n throw new CliExitError(`Unknown flag: ${arg}`, EXIT_RUNTIME);\n }\n\n if (parsed.filepath !== undefined) {\n throw new CliExitError(`Unexpected argument: ${arg}`, EXIT_RUNTIME);\n }\n\n parsed.filepath = arg;\n }\n\n if (!parsed.fs && parsed.fsRoot !== undefined) {\n throw new CliExitError(\n \"--fs-root requires --fs. Pass --fs to give the script a filesystem confined to that root, or drop --fs-root.\",\n EXIT_RUNTIME\n );\n }\n\n return parsed;\n}\n\nfunction readFlagValue(argv: readonly string[], index: number, flag: string): string {\n const value = argv[index + 1];\n if (value === undefined || value.length === 0) {\n throw new CliExitError(`Missing value for ${flag}`, EXIT_RUNTIME);\n }\n\n return value;\n}\n\nfunction readPositiveInteger(value: string, flag: string): number {\n const parsed = Number(value);\n\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new CliExitError(`${flag} must be a positive integer`, EXIT_RUNTIME);\n }\n\n return parsed;\n}\n\nasync function assertHarnessFile(input: {\n displayPath: string;\n filepath: string;\n statFile: (filepath: string) => Promise<FileStats>;\n}): Promise<void> {\n let stats: FileStats;\n try {\n stats = await input.statFile(input.filepath);\n } catch (error) {\n if (hasErrorCode(error, \"ENOENT\")) {\n throw new CliExitError(`File not found: ${input.displayPath}`, EXIT_RUNTIME);\n }\n\n throw error;\n }\n\n if (!stats.isFile()) {\n throw new CliExitError(`Harness path must point to a file: ${input.displayPath}`, EXIT_RUNTIME);\n }\n}\n\nasync function runScriptFile(\n filepath: string,\n parsed: ParsedArgs,\n options: {\n cwd: string;\n env: EnvModuleOptions | undefined;\n mcp: McpModuleOptions | undefined;\n modulesFor: RunCliOptions[\"modulesFor\"];\n brokenPipe: BrokenPipeState;\n process: CliProcess;\n readFile: ReadMarkdownFile;\n stderr: CliStream;\n stdout: CliStream;\n writeFile: WriteMarkdownFile;\n }\n): Promise<number> {\n const loaded = loadExecutableSource(filepath, await options.readFile(filepath, \"utf8\"));\n const meta = {\n filepath,\n kind: loaded.frontmatter.kind,\n version: loaded.frontmatter.version\n };\n const runtime = createRuntime(loaded.frontmatter, meta, {\n fs: parsed.fs\n ? { root: path.resolve(options.cwd, parsed.fsRoot ?? dirname(filepath)) }\n : undefined,\n modulesFor: options.modulesFor,\n stderr: options.stderr,\n stdout: options.stdout\n });\n let env = options.env;\n if (parsed.envConfig !== undefined) {\n if (env !== undefined)\n throw new TypeError(\"Pass environment options or --env-config, not both.\");\n const configPath = path.resolve(options.cwd, parsed.envConfig);\n env = parseEnvConfig(await options.readFile(configPath, \"utf8\"));\n }\n if (env !== undefined) {\n const registry = new Map(\n runtime.registry instanceof Map ? runtime.registry : Object.entries(runtime.registry)\n );\n if (registry.has(\"env\"))\n throw new TypeError(\"Environment is already registered by modulesFor.\");\n registry.set(\"env\", makeEnvModule(env));\n runtime.registry = registry;\n }\n let mcp = options.mcp;\n if (parsed.mcpConfig !== undefined) {\n if (mcp !== undefined) throw new TypeError(\"Pass MCP options or --mcp-config, not both.\");\n const configPath = path.resolve(options.cwd, parsed.mcpConfig);\n mcp = parseMcpConfig(await options.readFile(configPath, \"utf8\"), dirname(configPath));\n }\n if (mcp !== undefined) {\n const registry = new Map(\n runtime.registry instanceof Map ? runtime.registry : Object.entries(runtime.registry)\n );\n if (registry.has(\"mcp\")) throw new TypeError(\"MCP is already registered by modulesFor.\");\n registry.set(\"mcp\", makeMcpModule(mcp));\n runtime.registry = registry;\n }\n const modules = excludeHarnessModule(runtime.registry, loaded.isRawScript);\n let executableSource = loaded.executableSource;\n const lintResult = parsed.fix\n ? lint(executableSource, {\n allowedExportNames: [\"schema\"],\n filename: filepath,\n fix: true,\n fixRanges: loaded.fixRanges,\n frontmatterFields: Object.keys(loaded.frontmatter),\n modules: createLintModulesFromRuntimeRegistry(modules)\n })\n : lint(executableSource, {\n allowedExportNames: [\"schema\"],\n filename: filepath,\n frontmatterFields: Object.keys(loaded.frontmatter),\n modules: createLintModulesFromRuntimeRegistry(modules)\n });\n const diagnostics = Array.isArray(lintResult) ? lintResult : lintResult.diagnostics;\n\n if (!Array.isArray(lintResult)) {\n executableSource = lintResult.fixed;\n if (lintResult.fixed !== loaded.executableSource) {\n await options.writeFile(\n filepath,\n replaceExecutableSource(loaded.rawSource, loaded, lintResult.fixes),\n {\n encoding: \"utf8\"\n }\n );\n }\n }\n\n const lintErrors = diagnostics.filter((diagnostic) => diagnostic.severity === \"error\");\n if (lintErrors.length > 0) {\n options.stderr.write(`Lint failed:\\n${formatDiagnostics(lintErrors)}\\n`);\n if (options.brokenPipe.closed) {\n return 0;\n }\n return lintErrors.some((diagnostic) => diagnostic.code === \"AS001\") ? EXIT_PARSE : EXIT_RUNTIME;\n }\n\n const lintWarnings = diagnostics.filter((diagnostic) => diagnostic.severity === \"warning\");\n if (lintWarnings.length > 0) {\n options.stderr.write(`Lint warnings:\\n${formatDiagnostics(lintWarnings)}\\n`);\n if (options.brokenPipe.closed) {\n return 0;\n }\n }\n\n const snapshot = await readRestoreSnapshot(parsed.restorePath, options);\n if (snapshot !== undefined) {\n restore(snapshot, { source: executableSource });\n }\n\n const abortController = new AbortController();\n let interrupted = false;\n let runPromise: Promise<RunResult> | undefined;\n let signalSnapshotWrite: Promise<void> | undefined;\n const onSigint = () => {\n interrupted = true;\n abortController.abort(createAbortError());\n options.stderr.write(\"Interrupted by SIGINT\\n\");\n\n if (parsed.snapshotPath !== undefined && runPromise !== undefined) {\n signalSnapshotWrite = writeCurrentSnapshot(runPromise, parsed.snapshotPath, options);\n }\n };\n\n options.process.on(\"SIGINT\", onSigint);\n try {\n runPromise = run(executableSource, {\n budget:\n parsed.maxSteps === undefined && parsed.dataSize === undefined\n ? undefined\n : new Budget({ dataSize: parsed.dataSize, maxSteps: parsed.maxSteps }),\n entryPointArgs: hasDefaultExport(executableSource, filepath) ? [] : undefined,\n filename: filepath,\n modules,\n signal: abortController.signal,\n sink: createConsoleSink(options.stdout, options.stderr),\n snapshot\n });\n const result = await runPromise;\n await signalSnapshotWrite;\n\n if (options.brokenPipe.closed) {\n return 0;\n }\n\n if (parsed.snapshotPath !== undefined) {\n await writeSnapshot(parsed.snapshotPath, await dump(result), options);\n }\n\n if (!result.ok) {\n options.stderr.write(\n `${formatInterpreterError(result.error, {\n filename: filepath,\n source: executableSource\n })}\\n`\n );\n if (options.brokenPipe.closed) {\n return 0;\n }\n return interrupted ? EXIT_SIGINT : exitCodeForError(result.error);\n }\n\n options.stdout.write(`${JSON.stringify({ ok: true, returnValue: result.returnValue })}\\n`);\n return options.brokenPipe.closed ? 0 : interrupted ? EXIT_SIGINT : 0;\n } catch (error) {\n await signalSnapshotWrite;\n if (parsed.snapshotPath !== undefined && runPromise !== undefined) {\n try {\n await writeSnapshot(\n parsed.snapshotPath,\n await dump(runPromise, { onFailure: \"checkpoint\" }),\n options\n );\n } catch (snapshotError) {\n options.stderr.write(\n `Failed to write recovery snapshot at ${parsed.snapshotPath}: ${readErrorMessage(snapshotError)}. Any existing snapshot may be stale.\\n`\n );\n }\n }\n if (options.brokenPipe.closed) {\n return 0;\n }\n options.stderr.write(\n `${formatInterpreterError(error, {\n filename: filepath,\n source: executableSource\n })}\\n`\n );\n return options.brokenPipe.closed ? 0 : interrupted ? EXIT_SIGINT : exitCodeForError(error);\n } finally {\n options.process.off(\"SIGINT\", onSigint);\n }\n}\n\nfunction loadExecutableSource(filepath: string, rawSource: string): LoadedSource {\n const source = stripByteOrderMark(rawSource);\n const byteOrderMarkLength = rawSource.length - source.length;\n\n if (isRawScriptExtension(extname(filepath))) {\n return {\n sourceOffset: byteOrderMarkLength,\n executableSource: source,\n frontmatter: {},\n isRawScript: true,\n rawSource\n };\n }\n\n const { frontmatter, body } = splitFrontmatter(source);\n const bodyStartOffset = source.length - body.length;\n const executableBlock = extractBlock(body, countLineBreaks(source, 0, bodyStartOffset) + 1);\n const lineOffset = countLineBreaks(source, 0, bodyStartOffset + executableBlock.startOffset);\n\n return {\n sourceOffset: byteOrderMarkLength + bodyStartOffset + executableBlock.startOffset - lineOffset,\n fixRanges: executableBlock.ranges.map(([start, end]) => [\n start - executableBlock.startOffset + lineOffset,\n end - executableBlock.startOffset + lineOffset\n ]),\n executableSource: createLineOffsetSource(executableBlock.source, lineOffset),\n frontmatter,\n isRawScript: false,\n rawSource\n };\n}\n\nfunction isRawScriptExtension(extension: string): boolean {\n return extension === \".safejs\" || extension === \".ajs\";\n}\n\nfunction replaceExecutableSource(\n source: string,\n loaded: LoadedSource,\n fixes: readonly Fix[]\n): string {\n return fixes.reduce(\n (result, fix) =>\n `${result.slice(0, loaded.sourceOffset + fix.range[0])}${fix.replacement}${result.slice(loaded.sourceOffset + fix.range[1])}`,\n source\n );\n}\n\nfunction createRuntime(\n frontmatter: Record<string, unknown>,\n meta: HarnessMeta,\n options: {\n fs: FsModuleOptions | undefined;\n modulesFor: RunCliOptions[\"modulesFor\"];\n stderr: CliStream;\n stdout: CliStream;\n }\n): CliRuntime {\n if (options.modulesFor !== undefined) {\n return {\n registry: options.modulesFor(frontmatter, meta, {\n stderr: options.stderr,\n stdout: options.stdout\n })\n };\n }\n\n const state = {\n checkpointCount: 0,\n commitCount: 0,\n metricCalls: new Map<string, number>(),\n spawnCount: 0\n };\n const harness = makeHarnessModule(frontmatter, meta);\n const agent = makeAgentModule(async (input) => {\n state.spawnCount += 1;\n\n return {\n exitCode: 0,\n stdout: \"\",\n stderr: \"\",\n summary: `${input.agent} handled ${summarizePrompt(input.prompt)}`,\n durationMs: 25 * state.spawnCount\n };\n });\n const git = {\n async checkpoint() {\n state.checkpointCount += 1;\n return {\n head: `head-${state.checkpointCount}`,\n stashRef: `savepoint-${state.checkpointCount}`\n };\n },\n async commit() {\n state.commitCount += 1;\n return `commit-${state.commitCount}`;\n },\n async revert() {\n return undefined;\n }\n };\n const log = makeLogModule((entry) => {\n const normalized = normalizeLogEntry(entry);\n const stream = normalized.type === \"error\" ? options.stderr : options.stdout;\n stream.write(`${JSON.stringify(normalized)}\\n`);\n });\n const metric = makeMetricModule(async (scriptName) => `${readMetricScore(scriptName, state)}\\n`);\n\n return {\n registry: {\n agent: toModuleExports(agent),\n fail: toModuleExports(new Map([[\"default\", makeFailModule().default]])),\n // The one module here that is not a stub, so it is registered only when asked for.\n ...(options.fs === undefined ? {} : { fs: toModuleExports(makeFsModule(options.fs)) }),\n git: toModuleExports(\n new Map<string, CallerInjectedBinding>([\n [\"checkpoint\", git.checkpoint],\n [\"commit\", git.commit],\n [\"revert\", git.revert]\n ])\n ),\n harness: toModuleExports(harness),\n log: toModuleExports(log),\n metric: toModuleExports(metric)\n }\n };\n}\n\nasync function readRestoreSnapshot(\n restorePath: string | undefined,\n options: {\n cwd: string;\n readFile: ReadMarkdownFile;\n }\n): Promise<SafeJSSnapshot | undefined> {\n if (restorePath === undefined) {\n return undefined;\n }\n\n const snapshotPath = path.resolve(options.cwd, restorePath);\n let rawSnapshot: string;\n try {\n rawSnapshot = await options.readFile(snapshotPath, \"utf8\");\n } catch (error) {\n if (hasErrorCode(error, \"ENOENT\")) {\n throw new CliExitError(`Snapshot not found: ${restorePath}`, EXIT_RUNTIME);\n }\n\n throw error;\n }\n\n try {\n return JSON.parse(rawSnapshot) as SafeJSSnapshot;\n } catch (error) {\n throw new Error(`Failed to parse snapshot at ${restorePath}: ${readErrorMessage(error)}`);\n }\n}\n\nasync function writeCurrentSnapshot(\n result: PromiseLike<RunResult>,\n snapshotPath: string,\n options: {\n cwd: string;\n stderr: CliStream;\n writeFile: WriteMarkdownFile;\n }\n): Promise<void> {\n try {\n await writeSnapshot(snapshotPath, await dumpCurrent(result), options);\n } catch (error) {\n options.stderr.write(\n `Failed to write snapshot at ${snapshotPath}: ${readErrorMessage(error)}\\n`\n );\n }\n}\n\nasync function writeSnapshot(\n snapshotPath: string,\n content: string,\n options: {\n cwd: string;\n writeFile: WriteMarkdownFile;\n }\n): Promise<void> {\n const resolvedPath = path.resolve(options.cwd, snapshotPath);\n await mkdir(dirname(resolvedPath), { recursive: true });\n await options.writeFile(resolvedPath, content, { encoding: \"utf8\" });\n}\n\nfunction createConsoleSink(\n stdout: CliStream,\n stderr: CliStream\n): {\n error: (...args: unknown[]) => void;\n log: (...args: unknown[]) => void;\n} {\n return {\n error(...args) {\n stderr.write(`${formatConsoleArgs(args)}\\n`);\n },\n log(...args) {\n stdout.write(`${formatConsoleArgs(args)}\\n`);\n }\n };\n}\n\nfunction formatConsoleArgs(args: readonly unknown[]): string {\n return formatWithOptions({ colors: false, depth: 4 }, ...args);\n}\n\nfunction createUsage(): string {\n return [\n \"Usage: poe-safejs [options] <script.md|script.safejs|script.ajs>\",\n \" poe-safejs migrate <checkpoint.json> --from <original.ajs> --inspect\",\n \" poe-safejs migrate <checkpoint.json> --from <original.ajs> --to <continuation.ajs>\",\n \" --plan <migration.json> --output <new-checkpoint.json> [--dry-run]\",\n \"\",\n \"Options:\",\n \" --fix apply lint fixes before running\",\n \" --fs register the fs module: a real filesystem, unlike the agent,\",\n \" git, and metric stubs this runner bundles\",\n \" --fs-root <path> directory --fs confines the script to (default: the script's\",\n \" directory)\",\n \" --mcp-config <path> register named MCP servers from an explicit JSON config\",\n \" --env-config <path> grant environment reads from an explicit JSON config\",\n \" --snapshot <path> write success/failure state; best-effort snapshot on SIGINT\",\n \" --restore <path> restore from a snapshot before running\",\n \" --max-steps <n> cap interpreter step budget\",\n \" --data-size <n> cap retained sandbox data units\",\n \" -h, --help print this help\",\n \"\",\n \"Exit codes:\",\n \" 0 success\",\n \" 1 runtime, usage, file, or restore error\",\n \" 2 parse error\",\n \" 3 budget exceeded\",\n \" 130 interrupted by SIGINT\"\n ].join(\"\\n\");\n}\n\nfunction formatDiagnostics(diagnostics: readonly Diagnostic[]): string {\n return diagnostics\n .map(\n (diagnostic) =>\n `${diagnostic.filename}:${diagnostic.line}:${diagnostic.column} ${diagnostic.code} ${diagnostic.message}`\n )\n .join(\"\\n\");\n}\n\nfunction exitCodeForError(error: unknown): number {\n if (error instanceof SandboxError && error.code === \"budgetExceeded\") {\n return EXIT_BUDGET;\n }\n\n if (isParseError(error)) {\n return EXIT_PARSE;\n }\n\n return EXIT_RUNTIME;\n}\n\nfunction isParseError(error: unknown): boolean {\n return error instanceof Error && error.name === \"ParseError\";\n}\n\nfunction hasDefaultExport(source: string, filename: string): boolean {\n return parseModule(source, filename).body.some(\n (statement) => statement.type === \"ExportDefaultDeclaration\"\n );\n}\n\nfunction excludeHarnessModule(modules: ModuleRegistry, isRawScript: boolean): ModuleRegistry {\n if (!isRawScript) {\n return modules;\n }\n\n if (modules instanceof Map) {\n const rawModules = new Map(modules);\n rawModules.delete(\"harness\");\n return rawModules;\n }\n\n const rawModules = Object.create(null) as Record<string, ModuleExports>;\n\n for (const [moduleName, moduleExports] of Object.entries(modules)) {\n if (moduleName !== \"harness\") {\n rawModules[moduleName] = moduleExports;\n }\n }\n\n return rawModules;\n}\n\nfunction stripByteOrderMark(source: string): string {\n return source.startsWith(\"\\uFEFF\") ? source.slice(1) : source;\n}\n\nfunction createLineOffsetSource(source: string, lineOffset: number): string {\n return `${\"\\n\".repeat(Math.max(lineOffset, 0))}${source}`;\n}\n\nfunction normalizeLogEntry(entry: LogModuleEntry): LogModuleEntry {\n return {\n ...entry,\n ts: \"2026-04-29T00:00:00.000Z\"\n };\n}\n\nfunction summarizePrompt(prompt: string): string {\n const normalizedPrompt = prompt.trim().replaceAll(\"\\n\", \" \");\n return normalizedPrompt.length <= 48 ? normalizedPrompt : `${normalizedPrompt.slice(0, 45)}...`;\n}\n\nfunction readMetricScore(\n scriptName: string,\n state: {\n metricCalls: Map<string, number>;\n }\n): number {\n const callCount = (state.metricCalls.get(scriptName) ?? 0) + 1;\n state.metricCalls.set(scriptName, callCount);\n\n if (scriptName === \"tests\" && callCount === 1) {\n return 10;\n }\n\n if (scriptName === \"tests\" && callCount === 2) {\n return 9;\n }\n\n return 9 + callCount;\n}\n\nfunction toModuleExports(value: unknown): ModuleExports {\n return value as ModuleExports;\n}\n\nfunction createAbortError(): Error {\n if (typeof DOMException === \"function\") {\n const error = new DOMException(\"This operation was aborted\", \"AbortError\");\n replaceErrorStack(error);\n return error;\n }\n\n const error = new Error(\"This operation was aborted\");\n error.name = \"AbortError\";\n replaceErrorStack(error);\n return error;\n}\n\nfunction hasErrorCode(error: unknown, code: string): boolean {\n return hasOwnErrorCode(error, code);\n}\n\nfunction readErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n\n return String(error);\n}\n\nclass CliExitError extends Error {\n readonly exitCode: number;\n\n constructor(message: string, exitCode: number) {\n super(message);\n this.name = \"CliExitError\";\n this.exitCode = exitCode;\n }\n}\n\nasync function isDirectExecution(entryPoint: string | undefined): Promise<boolean> {\n if (typeof entryPoint !== \"string\" || entryPoint.length === 0) {\n return false;\n }\n\n try {\n const [resolvedEntryPoint, resolvedModule] = await Promise.all([\n realpath(path.resolve(entryPoint)),\n realpath(fileURLToPath(import.meta.url))\n ]);\n return resolvedEntryPoint === resolvedModule;\n } catch {\n return false;\n }\n}\n\nif (await isDirectExecution(process.argv[1])) {\n process.exitCode = await runCli(process.argv.slice(2));\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["rawModules", "error"]
7
7
  }
@@ -3,7 +3,7 @@ import {
3
3
  createReplayableRandom,
4
4
  lint,
5
5
  run
6
- } from "./chunks/chunk-A2XBEN3H.js";
6
+ } from "./chunks/chunk-JLYBD3E6.js";
7
7
  import "./chunks/chunk-4YIDX44G.js";
8
8
  export {
9
9
  Budget,
@@ -15,6 +15,9 @@ export { HostOperationResumePolicyError, registerPendingHostCallPolicy } from ".
15
15
  export type { PendingHostCallPolicyMode, PendingHostCallPolicyRegistration } from "./snapshot/policy.js";
16
16
  export { dump, type DumpOptions } from "./dump.js";
17
17
  export { restore } from "./restore.js";
18
+ export { inspectSnapshotMigration, migrateSnapshot } from "./migrate.js";
19
+ export { migrateSnapshotFile, type SnapshotMigrationFileOptions } from "./migration-file.js";
20
+ export type { SnapshotMigration, SnapshotMigrationOptions, SnapshotMigrationReconciliation, SnapshotMigrationResolution } from "./migrate.js";
18
21
  export { SnapshotValidationError } from "./snapshot/validation.js";
19
22
  export type { SnapshotValidationCode } from "./snapshot/validation.js";
20
23
  export { Budget, SandboxError } from "./interp/budget.js";
@@ -8,6 +8,7 @@ import {
8
8
  createSpawnUsageAccumulator,
9
9
  extractBlock,
10
10
  formatInterpreterError,
11
+ inspectSnapshotMigration,
11
12
  isSamePath,
12
13
  makeAgentModule,
13
14
  makeEnvModule,
@@ -17,13 +18,15 @@ import {
17
18
  makeLogModule,
18
19
  makeMcpModule,
19
20
  makeMetricModule,
21
+ migrateSnapshot,
22
+ migrateSnapshotFile,
20
23
  parseEnvConfig,
21
24
  parseMcpConfig,
22
25
  resolveCanonicalPath,
23
26
  runWithSpawnUsageAccumulator,
24
27
  splitFrontmatter,
25
28
  supportsSpawnMode
26
- } from "./chunks/chunk-MRH5YDMR.js";
29
+ } from "./chunks/chunk-SA7XBTIL.js";
27
30
  import {
28
31
  Budget,
29
32
  FileSnapshotBackend,
@@ -45,7 +48,7 @@ import {
45
48
  registerPendingHostCallPolicy,
46
49
  restore,
47
50
  run
48
- } from "./chunks/chunk-A2XBEN3H.js";
51
+ } from "./chunks/chunk-JLYBD3E6.js";
49
52
  import "./chunks/chunk-4YIDX44G.js";
50
53
 
51
54
  // packages/safejs/src/runner/run-harness.ts
@@ -739,6 +742,7 @@ export {
739
742
  extractBlock,
740
743
  findExportedConstInitializer,
741
744
  formatInterpreterError,
745
+ inspectSnapshotMigration,
742
746
  lint,
743
747
  makeAgentModule,
744
748
  makeEnvModule,
@@ -750,6 +754,8 @@ export {
750
754
  makeMcpModule,
751
755
  makeMetricModule,
752
756
  makeTimeModule,
757
+ migrateSnapshot,
758
+ migrateSnapshotFile,
753
759
  noopOtelSink,
754
760
  parse,
755
761
  parseEnvConfig,
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/runner/run-harness.ts", "../src/loader/find-exported.ts", "../src/modules/git.ts", "../src/modules/time.ts"],
4
4
  "sourcesContent": ["import { readFile, stat } from \"node:fs/promises\";\nimport { extname } from \"node:path\";\n\nimport { supportsSpawnMode } from \"@poe-code/agent-spawn/configs\";\nimport { SPAWN_MODES, type SpawnMode } from \"@poe-code/agent-spawn/types\";\nimport { hasOwnErrorCode } from \"../error-codes.js\";\nimport { countLineBreaks, extractBlock } from \"../loader/extract-block.js\";\nimport { splitFrontmatter } from \"../loader/frontmatter.js\";\nimport { lint, type Diagnostic } from \"../lint.js\";\nimport { createLintModulesFromRuntimeRegistry } from \"../lint/runtime-modules.js\";\nimport type { ModuleExports, ModuleRegistry } from \"../modules/registry.js\";\nimport type { OtelSink } from \"../observability/otel.js\";\nimport { parseModule } from \"../parse/parser.js\";\nimport { run, type RunOptions, type RunResult } from \"../run.js\";\nimport type { SnapshotBackend } from \"../snapshot/backend.js\";\n\ntype HarnessMeta = {\n filepath: string;\n kind: unknown;\n version: unknown;\n};\n\nexport type RunHarnessOptions = {\n budget?: RunOptions[\"budget\"];\n modulesFor: (frontmatter: Record<string, unknown>, meta: HarnessMeta) => ModuleRegistry;\n otelSink?: OtelSink;\n signal?: AbortSignal;\n snapshotBackend?: SnapshotBackend;\n snapshotIntervalMs?: number;\n snapshotPath?: string;\n};\n\nexport type RunHarnessExecutionErrorResult = {\n aborted?: true;\n error: unknown;\n ok: false;\n};\n\nexport type RunHarnessResult = RunResult | RunHarnessExecutionErrorResult;\n\nfunction getOwnEntry(record: Record<string, unknown>, key: string): unknown {\n return Object.prototype.hasOwnProperty.call(record, key) ? record[key] : undefined;\n}\n\nfunction createHarnessMeta(filepath: string, frontmatter: Record<string, unknown>): HarnessMeta {\n return {\n filepath,\n kind: getOwnEntry(frontmatter, \"kind\"),\n version: getOwnEntry(frontmatter, \"version\")\n };\n}\n\nfunction assertFrontmatterAgentModes(frontmatter: Record<string, unknown>): void {\n const agents = getOwnEntry(frontmatter, \"agents\");\n if (typeof agents !== \"object\" || agents === null || Array.isArray(agents)) {\n return;\n }\n\n for (const [name, definition] of Object.entries(agents)) {\n if (typeof definition !== \"object\" || definition === null || Array.isArray(definition)) {\n continue;\n }\n\n const record = definition as Record<string, unknown>;\n const agent = getOwnEntry(record, \"agent\");\n const mode = getOwnEntry(record, \"mode\");\n if (typeof agent !== \"string\" || typeof mode !== \"string\") {\n continue;\n }\n\n // Malformed mode strings are reported by the agent module's own validation.\n if (!SPAWN_MODES.includes(mode as SpawnMode)) {\n continue;\n }\n\n if (!supportsSpawnMode(agent, mode as SpawnMode)) {\n throw new Error(`Harness agent \"${name}\": agent \"${agent}\" does not support mode \"${mode}\".`);\n }\n }\n}\n\nexport class LintError extends Error {\n readonly diagnostics: readonly Diagnostic[];\n\n constructor(diagnostics: readonly Diagnostic[]) {\n super(formatLintErrorMessage(diagnostics));\n this.name = \"LintError\";\n this.diagnostics = diagnostics;\n }\n}\n\nexport async function runHarness(\n filepath: string,\n options: RunHarnessOptions\n): Promise<RunHarnessResult> {\n const rawSource = stripByteOrderMark(await readHarnessFile(filepath));\n const { executableSource, frontmatter, isRawScript } = loadExecutableSource(filepath, rawSource);\n assertFrontmatterAgentModes(frontmatter);\n const meta = createHarnessMeta(filepath, frontmatter);\n const modules = excludeHarnessModule(options.modulesFor(frontmatter, meta), isRawScript);\n const diagnostics = lint(executableSource, {\n filename: filepath,\n modules: createLintModulesFromRuntimeRegistry(modules)\n });\n const lintErrors = diagnostics.filter((diagnostic) => diagnostic.severity === \"error\");\n\n if (lintErrors.length > 0) {\n throw new LintError(lintErrors);\n }\n\n return runHarnessSource(executableSource, {\n budget: options.budget,\n entryPointArgs: hasDefaultExport(executableSource, filepath) ? [] : undefined,\n filename: filepath,\n modules,\n otelSink: options.otelSink,\n signal: options.signal,\n snapshotBackend: options.snapshotBackend,\n snapshotIntervalMs: options.snapshotIntervalMs,\n snapshotPath: options.snapshotPath\n });\n}\n\nexport async function runHarnessPair(\n filepath: string,\n options: RunHarnessOptions\n): Promise<RunHarnessResult> {\n const pair = resolveHarnessPair(filepath);\n const [rawMarkdown, rawScript] = await Promise.all([\n readHarnessFile(pair.markdownPath),\n readHarnessFile(pair.scriptPath)\n ]);\n const { frontmatter, body } = splitFrontmatter(stripByteOrderMark(rawMarkdown));\n assertFrontmatterAgentModes(frontmatter);\n const executableSource = stripByteOrderMark(rawScript);\n const meta = createHarnessMeta(pair.markdownPath, frontmatter);\n const modules = options.modulesFor(frontmatter, meta);\n const diagnostics = lint(executableSource, {\n allowedExportNames: [\"schema\"],\n defaultExport: {\n parameters: [\"frontmatter\"],\n required: true\n },\n filename: pair.scriptPath,\n frontmatterFields: Object.keys(frontmatter),\n modules: createLintModulesFromRuntimeRegistry(modules)\n });\n const lintErrors = diagnostics.filter((diagnostic) => diagnostic.severity === \"error\");\n\n if (lintErrors.length > 0) {\n throw new LintError(lintErrors);\n }\n\n return runHarnessSource(executableSource, {\n budget: options.budget,\n entryPointArgs: [frontmatter],\n filename: pair.scriptPath,\n importMeta: {\n body,\n filepath: pair.markdownPath,\n kind: meta.kind,\n version: meta.version\n },\n modules,\n otelSink: options.otelSink,\n signal: options.signal,\n snapshotBackend: options.snapshotBackend,\n snapshotIntervalMs: options.snapshotIntervalMs,\n snapshotPath: options.snapshotPath\n });\n}\n\nasync function readHarnessFile(filepath: string): Promise<string> {\n try {\n const stats = await stat(filepath);\n if (!stats.isFile()) {\n throw new Error(`Harness path must point to a file: ${filepath}`);\n }\n\n return await readFile(filepath, \"utf8\");\n } catch (error) {\n if (hasOwnErrorCode(error, \"ENOENT\") || hasOwnErrorCode(error, \"ENOTDIR\")) {\n throw new Error(`Harness file not found: ${filepath}`);\n }\n\n throw error;\n }\n}\n\nfunction loadExecutableSource(\n filepath: string,\n source: string\n): {\n executableSource: string;\n frontmatter: Record<string, unknown>;\n isRawScript: boolean;\n} {\n if (isRawScriptPath(filepath)) {\n if (source.length === 0) {\n throw new Error(`No code block found in empty harness file: ${filepath}`);\n }\n\n return {\n executableSource: source,\n frontmatter: {},\n isRawScript: true\n };\n }\n\n const { frontmatter, body } = splitFrontmatter(source);\n if (source.length === 0 || body.trim().length === 0) {\n throw new Error(`No code block found in empty harness file: ${filepath}`);\n }\n\n const bodyStartOffset = source.length - body.length;\n const { source: executableBlock, startOffset } = extractBlock(\n body,\n countLineBreaks(source, 0, bodyStartOffset) + 1\n );\n const absoluteLineOffset = countLineBreaks(source, 0, bodyStartOffset + startOffset);\n\n return {\n executableSource: createLineOffsetSource(stripHashbang(executableBlock), absoluteLineOffset),\n frontmatter,\n isRawScript: false\n };\n}\n\nfunction resolveHarnessPair(filepath: string): { markdownPath: string; scriptPath: string } {\n const extension = extname(filepath);\n const basename = extension.length === 0 ? filepath : filepath.slice(0, -extension.length);\n\n if (isRawScriptExtension(extension)) {\n return {\n markdownPath: `${basename}.md`,\n scriptPath: filepath\n };\n }\n\n return {\n markdownPath: filepath,\n scriptPath: `${basename}.ajs`\n };\n}\n\nfunction isRawScriptPath(filepath: string): boolean {\n return isRawScriptExtension(extname(filepath));\n}\n\nfunction isRawScriptExtension(extension: string): boolean {\n return extension === \".safejs\" || extension === \".ajs\";\n}\n\nasync function runHarnessSource(\n executableSource: string,\n options: Parameters<typeof run>[1]\n): Promise<RunHarnessResult> {\n try {\n return await run(executableSource, options);\n } catch (error) {\n if (isSetupError(error)) {\n throw error;\n }\n\n return {\n ...(isAbortError(error) ? { aborted: true as const } : {}),\n error,\n ok: false\n };\n }\n}\n\nfunction isSetupError(error: unknown): boolean {\n return error instanceof Error && error.name === \"ParseError\";\n}\n\nfunction isAbortError(error: unknown): boolean {\n if (error instanceof Error) {\n return error.name === \"AbortError\";\n }\n\n return (\n typeof error === \"object\" &&\n error !== null &&\n Object.prototype.hasOwnProperty.call(error, \"name\") &&\n (error as { name?: unknown }).name === \"AbortError\"\n );\n}\n\nfunction hasDefaultExport(source: string, filename: string): boolean {\n return parseModule(source, filename).body.some(\n (statement) => statement.type === \"ExportDefaultDeclaration\"\n );\n}\n\nfunction excludeHarnessModule(modules: ModuleRegistry, isRawScript: boolean): ModuleRegistry {\n if (!isRawScript) {\n return modules;\n }\n\n if (modules instanceof Map) {\n const rawModules = new Map(modules);\n rawModules.delete(\"harness\");\n return rawModules;\n }\n\n const rawModules: Record<string, ModuleExports> = {};\n\n for (const [moduleName, moduleExports] of Object.entries(modules)) {\n if (moduleName !== \"harness\") {\n rawModules[moduleName] = moduleExports;\n }\n }\n\n return rawModules;\n}\n\nfunction stripByteOrderMark(source: string): string {\n return source.startsWith(\"\\uFEFF\") ? source.slice(1) : source;\n}\n\nfunction stripHashbang(source: string): string {\n if (!source.startsWith(\"#!\")) {\n return source;\n }\n\n let end = 2;\n while (end < source.length && source[end] !== \"\\n\" && source[end] !== \"\\r\") end += 1;\n return `${\" \".repeat(end)}${source.slice(end)}`;\n}\n\nfunction createLineOffsetSource(source: string, lineOffset: number): string {\n return `${\"\\n\".repeat(Math.max(lineOffset, 0))}${source}`;\n}\n\nfunction formatLintErrorMessage(diagnostics: readonly Diagnostic[]): string {\n if (diagnostics.length === 0) {\n return \"Script lint failed.\";\n }\n\n return diagnostics\n .map(\n (diagnostic) =>\n `${diagnostic.filename}:${diagnostic.line}:${diagnostic.column} ${diagnostic.code} ${diagnostic.message}`\n )\n .join(\"\\n\");\n}\n", "import type { Expression, Module } from \"../parse/parser.js\";\n\nexport function findExportedConstInitializer(module: Module, name: string): Expression | undefined {\n for (const statement of module.body) {\n if (statement.type === \"ExportDefaultDeclaration\") {\n if (name === \"default\") {\n return statement.declaration;\n }\n\n continue;\n }\n\n if (statement.type !== \"ExportNamedDeclaration\") {\n continue;\n }\n\n const declaration = statement.declaration;\n if (declaration.kind !== \"const\") {\n throw new Error(`Exported '${name}' must be declared with const.`);\n }\n\n if (declaration.declarations.length !== 1) {\n throw new Error(\"Exported const declarations must contain exactly one declarator.\");\n }\n\n const declarator = declaration.declarations[0]!;\n if (declarator.id.type !== \"Identifier\") {\n throw new Error(\"Destructured exported const bindings are not supported.\");\n }\n\n if (declarator.id.name !== name) {\n continue;\n }\n\n if (declarator.init === undefined) {\n throw new Error(`Exported const '${name}' must have an initializer.`);\n }\n\n return declarator.init;\n }\n\n return undefined;\n}\n", "import { execFile } from \"node:child_process\";\nimport { mkdir, readlink, realpath, rm, stat } from \"node:fs/promises\";\nimport { dirname, isAbsolute, resolve } from \"node:path\";\nimport { containsPath, isSamePath, resolveCanonicalPath } from \"./canonical-path.js\";\n\nexport type GitSavepoint = {\n head: string;\n stashRef?: string;\n};\n\nexport type GitCommitOptions = {\n message: string;\n files?: string[];\n};\n\nexport type GitWorktree = {\n path: string;\n branch: string;\n};\n\nexport type GitWorktreeCreateOptions = {\n base?: string;\n path?: string;\n};\n\ntype ExecFileResult = {\n stdout: string;\n stderr: string;\n};\n\nconst GIT_EXEC_MAX_BUFFER = 10 * 1024 * 1024;\nconst SAVEPOINT_REF_PREFIX = \"refs/poe-code/checkpoints/\";\n\nexport function makeGitModule(cwd: string): {\n head(): Promise<string>;\n checkpoint(): Promise<GitSavepoint>;\n commit(options: GitCommitOptions): Promise<string>;\n revert(savepoint: GitSavepoint): Promise<void>;\n diff(): Promise<string>;\n worktreeCreate(branch: string, options?: GitWorktreeCreateOptions): Promise<GitWorktree>;\n worktreeRemove(path: string): Promise<void>;\n worktreeList(): Promise<GitWorktree[]>;\n} {\n const normalizedCwd = readNonEmptyString(cwd, \"Git module cwd\");\n\n return {\n async head() {\n return runGitAndTrim(normalizedCwd, [\"rev-parse\", \"HEAD\"]);\n },\n\n async checkpoint() {\n const currentHead = await runGitAndTrim(normalizedCwd, [\"rev-parse\", \"HEAD\"]);\n const status = await runGitAndTrim(normalizedCwd, [\"status\", \"--porcelain\"]);\n\n if (status.length === 0) {\n return {\n head: currentHead\n };\n }\n\n const stashRef = createSavepointRef();\n const stashMessage = `poe-code checkpoint ${stashRef}`;\n\n await runGit(normalizedCwd, [\n \"stash\",\n \"push\",\n \"--include-untracked\",\n \"--message\",\n stashMessage\n ]);\n\n try {\n const stashOid = await runGitAndTrim(normalizedCwd, [\"rev-parse\", \"stash@{0}\"]);\n await runGit(normalizedCwd, [\"update-ref\", stashRef, stashOid]);\n await runGit(normalizedCwd, [\"stash\", \"apply\", \"--index\", stashRef]);\n await runGit(normalizedCwd, [\"stash\", \"drop\", \"stash@{0}\"]);\n\n return {\n head: currentHead,\n stashRef\n };\n } catch (error) {\n await cleanupFailedCheckpoint(normalizedCwd, stashRef);\n throw error;\n }\n },\n\n async commit(options) {\n const normalizedOptions = normalizeCommitOptions(options);\n\n if (normalizedOptions.files === undefined) {\n await runGit(normalizedCwd, [\"add\", \"--all\"]);\n await runGit(normalizedCwd, [\"commit\", \"--message\", normalizedOptions.message]);\n } else {\n await runGit(normalizedCwd, [\"add\", \"--\", ...normalizedOptions.files]);\n await runGit(normalizedCwd, [\n \"commit\",\n \"--message\",\n normalizedOptions.message,\n \"--\",\n ...normalizedOptions.files\n ]);\n }\n return runGitAndTrim(normalizedCwd, [\"rev-parse\", \"HEAD\"]);\n },\n\n async revert(savepoint) {\n const normalizedSavepoint = normalizeSavepoint(savepoint);\n\n try {\n await runGit(normalizedCwd, [\"reset\", \"--hard\", normalizedSavepoint.head]);\n await runGit(normalizedCwd, [\"clean\", \"--force\", \"-d\"]);\n\n if (normalizedSavepoint.stashRef !== undefined) {\n await runGit(normalizedCwd, [\"stash\", \"apply\", \"--index\", normalizedSavepoint.stashRef]);\n }\n } finally {\n if (normalizedSavepoint.stashRef !== undefined) {\n await deleteSavepointRef(normalizedCwd, normalizedSavepoint.stashRef);\n }\n }\n },\n\n async diff() {\n const { stdout } = await runGit(normalizedCwd, [\"diff\", \"HEAD\", \"--\"]);\n return stdout;\n },\n\n async worktreeCreate(branch, options) {\n const normalizedBranch = readNonEmptyString(branch, \"Git worktree branch\");\n const normalizedOptions = normalizeWorktreeCreateOptions(options);\n const repoRoot = await getRepoRoot(normalizedCwd);\n const worktreePath = await resolveWorktreePath(\n repoRoot,\n normalizedOptions.path ?? createDefaultWorktreePath(repoRoot, normalizedBranch),\n \"Git worktree path\"\n );\n\n if (await gitRefExists(normalizedCwd, `refs/heads/${normalizedBranch}`)) {\n throw new Error(`Git worktree branch '${normalizedBranch}' already exists.`);\n }\n\n await mkdir(dirname(worktreePath), { recursive: true });\n\n try {\n await runGit(normalizedCwd, [\n \"worktree\",\n \"add\",\n \"-b\",\n normalizedBranch,\n worktreePath,\n normalizedOptions.base\n ]);\n } catch (error) {\n if (isBranchAlreadyExistsError(error, normalizedBranch)) {\n throw new Error(`Git worktree branch '${normalizedBranch}' already exists.`);\n }\n\n throw error;\n }\n\n return {\n path: worktreePath,\n branch: normalizedBranch\n };\n },\n\n async worktreeRemove(path) {\n const repoRoot = await getRepoRoot(normalizedCwd);\n const worktreePath = await resolveWorktreePath(repoRoot, path, \"Git worktree path\");\n const worktrees = await listWorktrees(normalizedCwd);\n\n if (!worktrees.some((worktree) => resolve(worktree.path) === worktreePath)) {\n return;\n }\n\n await runGit(normalizedCwd, [\"worktree\", \"remove\", \"--force\", worktreePath]);\n await rm(worktreePath, { recursive: true, force: true });\n },\n\n async worktreeList() {\n return listWorktrees(normalizedCwd);\n }\n };\n}\n\nfunction normalizeCommitOptions(options: GitCommitOptions | unknown): GitCommitOptions {\n if (!isRecord(options)) {\n throw new Error(\"Git commit options must be an object.\");\n }\n\n const files = getOwnProperty(options, \"files\");\n\n return {\n message: readNonEmptyString(getOwnProperty(options, \"message\"), \"Git commit options message\"),\n files:\n files === undefined ? undefined : readNonEmptyStringArray(files, \"Git commit options files\")\n };\n}\n\nfunction normalizeSavepoint(savepoint: GitSavepoint | unknown): GitSavepoint {\n if (!isRecord(savepoint)) {\n throw new Error(\"Git savepoint must be an object.\");\n }\n\n const stashRefValue = getOwnProperty(savepoint, \"stashRef\");\n const stashRef =\n stashRefValue === undefined\n ? undefined\n : readNonEmptyString(stashRefValue, \"Git savepoint stashRef\");\n if (stashRef !== undefined && !stashRef.startsWith(SAVEPOINT_REF_PREFIX)) {\n throw new Error(\"Git savepoint stashRef must be a Poe checkpoint ref.\");\n }\n\n return {\n head: readNonEmptyString(getOwnProperty(savepoint, \"head\"), \"Git savepoint head\"),\n stashRef\n };\n}\n\nfunction normalizeWorktreeCreateOptions(\n options: GitWorktreeCreateOptions | unknown\n): GitWorktreeCreateOptions & {\n base: string;\n} {\n if (options === undefined) {\n return {\n base: \"HEAD\"\n };\n }\n\n if (!isRecord(options)) {\n throw new Error(\"Git worktree create options must be an object.\");\n }\n\n const base = getOwnProperty(options, \"base\");\n const path = getOwnProperty(options, \"path\");\n\n return {\n base:\n base === undefined ? \"HEAD\" : readNonEmptyString(base, \"Git worktree create options base\"),\n path:\n path === undefined ? undefined : readNonEmptyString(path, \"Git worktree create options path\")\n };\n}\n\nfunction createSavepointRef(): string {\n return `${SAVEPOINT_REF_PREFIX}${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction createDefaultWorktreePath(repoRoot: string, branch: string): string {\n return resolve(repoRoot, \".poe-code\", \"worktrees\", createSafeBranchDirectoryName(branch));\n}\n\nfunction createSafeBranchDirectoryName(branch: string): string {\n return encodeURIComponent(branch);\n}\n\nasync function getRepoRoot(cwd: string): Promise<string> {\n return runGitAndTrim(cwd, [\"rev-parse\", \"--show-toplevel\"]);\n}\n\nasync function gitRefExists(cwd: string, ref: string): Promise<boolean> {\n try {\n await runGit(cwd, [\"show-ref\", \"--verify\", \"--quiet\", ref]);\n return true;\n } catch (error) {\n void error;\n return false;\n }\n}\n\nasync function listWorktrees(cwd: string): Promise<GitWorktree[]> {\n const { stdout } = await runGit(cwd, [\"worktree\", \"list\", \"--porcelain\"]);\n return parseWorktreeList(stdout);\n}\n\nfunction parseWorktreeList(output: string): GitWorktree[] {\n const worktrees: GitWorktree[] = [];\n let current: Partial<GitWorktree> = {};\n\n const finishCurrent = () => {\n if (current.path !== undefined && current.branch !== undefined) {\n worktrees.push({\n path: current.path,\n branch: current.branch\n });\n }\n\n current = {};\n };\n\n for (const line of output.split(\"\\n\")) {\n if (line.length === 0) {\n finishCurrent();\n continue;\n }\n\n if (line.startsWith(\"worktree \")) {\n current.path = line.slice(\"worktree \".length);\n continue;\n }\n\n if (line.startsWith(\"branch \")) {\n current.branch = parseBranchRef(line.slice(\"branch \".length));\n }\n }\n\n finishCurrent();\n return worktrees;\n}\n\nfunction parseBranchRef(ref: string): string {\n const branchPrefix = \"refs/heads/\";\n return ref.startsWith(branchPrefix) ? ref.slice(branchPrefix.length) : ref;\n}\n\nasync function resolveWorktreePath(repoRoot: string, path: string, label: string): Promise<string> {\n const resolvedRoot = resolve(repoRoot);\n const resolvedPath = isAbsolute(path) ? resolve(path) : resolve(resolvedRoot, path);\n const canonicalRoot = await realpath(resolvedRoot);\n const canonicalPath = await resolveCanonicalPath({ realpath, readlink }, resolvedPath);\n\n // A worktree lives somewhere under the repository, never at the repository root\n // itself, so root-itself is rejected alongside anything outside it. Both answers\n // come from the filesystem rather than the spelling: on a case-insensitive\n // filesystem a differently cased path still names the repository root.\n const [inside, isRootItself] = await Promise.all([\n containsPath(stat, canonicalRoot, canonicalPath),\n isSamePath(stat, canonicalPath, canonicalRoot)\n ]);\n\n if (!inside || isRootItself) {\n throw new Error(`${label} must be inside the git repository.`);\n }\n\n return canonicalPath;\n}\n\nfunction isBranchAlreadyExistsError(error: unknown, branch: string): boolean {\n return (\n error instanceof Error &&\n error.message.includes(branch) &&\n error.message.includes(\"already exists\")\n );\n}\n\nasync function runGitAndTrim(cwd: string, args: string[]): Promise<string> {\n const { stdout } = await runGit(cwd, args);\n return stdout.trim();\n}\n\nasync function runGit(cwd: string, args: string[]): Promise<ExecFileResult> {\n return new Promise((resolve, reject) => {\n execFile(\n \"git\",\n args,\n {\n cwd,\n encoding: \"utf8\",\n maxBuffer: GIT_EXEC_MAX_BUFFER\n },\n (error, stdout, stderr) => {\n if (error) {\n reject(\n new Error(\n `${formatGitCommand(args)} failed: ${pickGitFailureMessage(stdout, stderr, error)}`\n )\n );\n return;\n }\n\n resolve({\n stdout,\n stderr\n });\n }\n );\n });\n}\n\nasync function cleanupFailedCheckpoint(cwd: string, stashRef: string): Promise<void> {\n await deleteSavepointRef(cwd, stashRef);\n const restored = await tryRunGit(cwd, [\"stash\", \"apply\", \"--index\", \"stash@{0}\"]);\n if (restored) {\n await tryRunGit(cwd, [\"stash\", \"drop\", \"stash@{0}\"]);\n }\n}\n\nasync function deleteSavepointRef(cwd: string, stashRef: string): Promise<void> {\n await tryRunGit(cwd, [\"update-ref\", \"--delete\", stashRef]);\n}\n\nasync function tryRunGit(cwd: string, args: string[]): Promise<boolean> {\n try {\n await runGit(cwd, args);\n return true;\n } catch (error) {\n void error;\n return false;\n }\n}\n\nfunction formatGitCommand(args: string[]): string {\n return [\"git\", ...args].join(\" \");\n}\n\nfunction pickGitFailureMessage(stdout: string, stderr: string, error: Error): string {\n const stderrText = stderr.trim();\n\n if (stderrText.length > 0) {\n return stderrText;\n }\n\n const stdoutText = stdout.trim();\n\n if (stdoutText.length > 0) {\n return stdoutText;\n }\n\n return error.message;\n}\n\nfunction readNonEmptyString(value: unknown, label: string): string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new Error(`${label} must be a non-empty string.`);\n }\n\n return value;\n}\n\nfunction readNonEmptyStringArray(value: unknown, label: string): string[] {\n if (!Array.isArray(value) || value.length === 0) {\n throw new Error(`${label} must be a non-empty array of strings.`);\n }\n\n const entries = value.map((entry, index) => readNonEmptyString(entry, `${label}[${index}]`));\n return [...entries];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction getOwnProperty<Name extends PropertyKey>(value: object, name: Name): unknown {\n return hasOwnProperty(value, name) ? value[name] : undefined;\n}\n\nfunction hasOwnProperty<Name extends PropertyKey>(\n value: object,\n name: Name\n): value is Record<Name, unknown> {\n return Object.prototype.hasOwnProperty.call(value, name);\n}\n", "import { createSeededRandom } from \"../interp/globals/math.js\";\n\nexport type TimeModuleOptions = {\n now?: () => number;\n random?: () => number;\n seed?: number;\n signal?: AbortSignal;\n};\n\nexport function makeTimeModule(options: TimeModuleOptions = {}): {\n random: () => number;\n now: () => number;\n sleep: (ms: number) => Promise<void>;\n uuid: () => string;\n} {\n const hasDeterministicRandom = options.random !== undefined || options.seed !== undefined;\n const random =\n options.random ??\n (options.seed === undefined ? () => Math.random() : createSeededRandom(options.seed).next);\n const now = options.now ?? (() => Date.now());\n const signal = options.signal;\n\n async function sleep(ms: number): Promise<void> {\n assertSleepDelay(ms);\n\n return await new Promise<void>((resolve, reject) => {\n if (signal?.aborted === true) {\n reject(createSleepAbortError());\n return;\n }\n\n const start = performance.now();\n let timeout = setTimeout(resolveSleep, ms);\n\n function cleanup(): void {\n clearTimeout(timeout);\n signal?.removeEventListener(\"abort\", rejectSleep);\n }\n\n function resolveSleep(): void {\n const remainingMs = ms - (performance.now() - start);\n if (remainingMs > 0) {\n timeout = setTimeout(resolveSleep, remainingMs);\n return;\n }\n\n cleanup();\n resolve();\n }\n\n function rejectSleep(): void {\n cleanup();\n reject(createSleepAbortError());\n }\n\n signal?.addEventListener(\"abort\", rejectSleep, { once: true });\n });\n }\n\n return {\n random,\n now,\n sleep,\n uuid: hasDeterministicRandom ? () => createRandomUuid(random) : () => crypto.randomUUID()\n };\n}\n\nfunction createRandomUuid(random: () => number): string {\n const bytes = Array.from({ length: 16 }, () => Math.floor(readRandomUnit(random()) * 256));\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = bytes.map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n\n return [\n hex.slice(0, 8),\n hex.slice(8, 12),\n hex.slice(12, 16),\n hex.slice(16, 20),\n hex.slice(20)\n ].join(\"-\");\n}\n\nfunction readRandomUnit(value: number): number {\n if (Number.isFinite(value) && value >= 0 && value < 1) {\n return value;\n }\n\n throw new RangeError(\"time.uuid() random source must return a number in [0, 1).\");\n}\n\nfunction assertSleepDelay(ms: number): void {\n if (Number.isFinite(ms) && ms >= 0) {\n return;\n }\n\n throw new RangeError(\"time.sleep(ms) requires a non-negative finite millisecond delay.\");\n}\n\nfunction createSleepAbortError(): Error {\n return new Error(\"time.sleep aborted.\");\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["rawModules", "stat", "stat", "resolve", "resolve"]
7
7
  }
@@ -0,0 +1,33 @@
1
+ import type { SafeJSSnapshot } from "./restore.js";
2
+ import { type SnapshotMigration, type SnapshotMigrationReconciliation } from "./snapshot/migration.js";
3
+ export type { SnapshotMigration, SnapshotMigrationReconciliation, SnapshotMigrationResolution } from "./snapshot/migration.js";
4
+ export type SnapshotMigrationOptions = {
5
+ source: string;
6
+ targetSource: string;
7
+ state: unknown;
8
+ reconciliation: SnapshotMigrationReconciliation;
9
+ };
10
+ export declare function inspectSnapshotMigration(snapshot: SafeJSSnapshot, options: {
11
+ source: string;
12
+ }): {
13
+ checkpointDigest: string;
14
+ sourceHash: string;
15
+ executionSemantics: string;
16
+ calls: (Omit<import("./index.js").HostCallRecord, "outcome" | "asynchronous"> & {
17
+ asynchronous: boolean;
18
+ outcome?: {
19
+ status: "fulfilled" | "rejected";
20
+ data: import("./snapshot/replay-data.js").ReplayData;
21
+ };
22
+ })[];
23
+ unresolvedCalls: (Omit<import("./index.js").HostCallRecord, "outcome" | "asynchronous"> & {
24
+ asynchronous: boolean;
25
+ outcome?: {
26
+ status: "fulfilled" | "rejected";
27
+ data: import("./snapshot/replay-data.js").ReplayData;
28
+ };
29
+ })[];
30
+ };
31
+ export declare function migrateSnapshot(snapshot: SafeJSSnapshot, options: SnapshotMigrationOptions): SafeJSSnapshot & {
32
+ migration: SnapshotMigration;
33
+ };
@@ -0,0 +1,70 @@
1
+ import { createHash } from "node:crypto";
2
+ import { assertSnapshotInactive } from "./interp/running-state.js";
3
+ import { deepCopyToSandbox } from "./interp/values.js";
4
+ import { hashSource } from "./parse/hash.js";
5
+ import { parseModule } from "./parse/parser.js";
6
+ import { DUMP_FORMAT_VERSION, EXECUTION_SEMANTICS } from "./snapshot/dump-format.js";
7
+ import { validateMigrationJournal, validateMigrationReconciliation, validateMigrationSemantics, validateSnapshotMigration } from "./snapshot/migration.js";
8
+ import { encodeReplayData } from "./snapshot/replay-data.js";
9
+ import { validateDumpEnvelope, validateSnapshotData } from "./snapshot/validation.js";
10
+ export function inspectSnapshotMigration(snapshot, options) {
11
+ assertSnapshotInactive(snapshot);
12
+ validateSnapshotData(snapshot);
13
+ validateDumpEnvelope(snapshot);
14
+ validateMigrationSemantics(snapshot.executionSemantics);
15
+ const sourceHash = hashSource(options.source);
16
+ if (snapshot.sourceHash !== sourceHash)
17
+ throw new TypeError(`Migration requires the original executable source (checkpoint hash ${snapshot.sourceHash}, supplied ${sourceHash}). Preserve the checkpoint; do not replace its hash.`);
18
+ validateSnapshotMigration(snapshot.migration, sourceHash);
19
+ const replay = validateMigrationJournal(sourceHash, snapshot.replay, snapshot.hostCalls);
20
+ return {
21
+ checkpointDigest: createHash("sha256").update(canonicalData(snapshot)).digest("hex"),
22
+ sourceHash,
23
+ executionSemantics: snapshot.executionSemantics,
24
+ calls: replay.calls,
25
+ unresolvedCalls: replay.calls.filter((call) => !["settled", "consumed"].includes(call.lifecycle))
26
+ };
27
+ }
28
+ export function migrateSnapshot(snapshot, options) {
29
+ if (!Object.hasOwn(options, "state"))
30
+ throw new TypeError("Migration requires explicit application state.");
31
+ const inspection = inspectSnapshotMigration(snapshot, { source: options.source });
32
+ parseModule(options.targetSource);
33
+ const targetSourceHash = hashSource(options.targetSource);
34
+ validateMigrationReconciliation(options.reconciliation, inspection.checkpointDigest, inspection.calls);
35
+ const state = encodeReplayData(deepCopyToSandbox(options.state));
36
+ const previous = snapshot.migration;
37
+ const migration = {
38
+ version: 1,
39
+ state,
40
+ history: [
41
+ ...structuredClone(previous?.history ?? []),
42
+ {
43
+ sourceHash: inspection.sourceHash,
44
+ targetSourceHash,
45
+ executionSemantics: inspection.executionSemantics,
46
+ replay: { version: 1, calls: inspection.calls },
47
+ reconciliation: structuredClone(options.reconciliation)
48
+ }
49
+ ]
50
+ };
51
+ validateSnapshotMigration(migration, targetSourceHash);
52
+ return {
53
+ version: DUMP_FORMAT_VERSION,
54
+ executionSemantics: EXECUTION_SEMANTICS,
55
+ sourceHash: targetSourceHash,
56
+ bindings: {},
57
+ replay: { version: 1, calls: [] },
58
+ migration
59
+ };
60
+ }
61
+ function canonicalData(value) {
62
+ if (Array.isArray(value))
63
+ return `[${value.map(canonicalData).join(",")}]`;
64
+ if (value !== null && typeof value === "object")
65
+ return `{${Object.keys(value)
66
+ .sort()
67
+ .map((key) => `${JSON.stringify(key)}:${canonicalData(value[key])}`)
68
+ .join(",")}}`;
69
+ return JSON.stringify(value);
70
+ }