poe-code 11.0.6 → 11.0.8

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,12 +14,13 @@ import {
14
14
  makeLogModule,
15
15
  makeMcpModule,
16
16
  makeMetricModule,
17
+ maskSource,
17
18
  migrateSnapshotFile,
18
19
  parseEnvConfig,
19
20
  parseMcpConfig,
20
21
  splitFrontmatter,
21
22
  withBrokenPipeGuard
22
- } from "./chunks/chunk-NP42RTIU.js";
23
+ } from "./chunks/chunk-776EUEUM.js";
23
24
  import {
24
25
  Budget,
25
26
  SandboxError,
@@ -31,7 +32,7 @@ import {
31
32
  replaceErrorStack,
32
33
  restore,
33
34
  run
34
- } from "./chunks/chunk-OPNWSDXC.js";
35
+ } from "./chunks/chunk-TVZKHJOO.js";
35
36
  import "./chunks/chunk-4YIDX44G.js";
36
37
 
37
38
  // packages/safejs/src/cli.ts
@@ -424,16 +425,15 @@ function loadExecutableSource(filepath, rawSource) {
424
425
  };
425
426
  }
426
427
  const { frontmatter, body } = splitFrontmatter(source);
427
- const bodyStartOffset = source.length - body.length;
428
- const executableBlock = extractBlock(body, countLineBreaks(source, 0, bodyStartOffset) + 1);
429
- const lineOffset = countLineBreaks(source, 0, bodyStartOffset + executableBlock.startOffset);
428
+ const bodyStartOffset = rawSource.length - body.length;
429
+ const executableBlock = extractBlock(body, countLineBreaks(rawSource, 0, bodyStartOffset) + 1);
430
430
  return {
431
- sourceOffset: byteOrderMarkLength + bodyStartOffset + executableBlock.startOffset - lineOffset,
431
+ sourceOffset: 0,
432
432
  fixRanges: executableBlock.ranges.map(([start, end]) => [
433
- start - executableBlock.startOffset + lineOffset,
434
- end - executableBlock.startOffset + lineOffset
433
+ bodyStartOffset + start,
434
+ bodyStartOffset + end
435
435
  ]),
436
- executableSource: createLineOffsetSource(executableBlock.source, lineOffset),
436
+ executableSource: maskSource(rawSource.slice(0, bodyStartOffset + executableBlock.startOffset)) + executableBlock.source,
437
437
  frontmatter,
438
438
  isRawScript: false,
439
439
  rawSource
@@ -638,9 +638,6 @@ function excludeHarnessModule(modules, isRawScript) {
638
638
  function stripByteOrderMark(source) {
639
639
  return source.startsWith("\uFEFF") ? source.slice(1) : source;
640
640
  }
641
- function createLineOffsetSource(source, lineOffset) {
642
- return `${"\n".repeat(Math.max(lineOffset, 0))}${source}`;
643
- }
644
641
  function normalizeLogEntry(entry) {
645
642
  return {
646
643
  ...entry,
@@ -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\";\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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,SAAS,OAAO,UAAU,UAAU,MAAM,iBAAiB;AAC3D,OAAO,QAAQ,SAAS,eAAe;AACvC,SAAS,yBAAyB;AAClC,SAAS,qBAAqB;AAkG9B,IAAM,eAAe;AACrB,IAAM,aAAa;AACnB,IAAM,cAAc;AACpB,IAAM,cAAc;AAEpB,eAAsB,OACpB,MACA,UAAyB,CAAC,GACT;AACjB,QAAM,aAAa,sBAAsB;AACzC,QAAM,SAAS,uBAAuB,QAAQ,UAAU,QAAQ,QAAQ,UAAU;AAClF,QAAM,SAAS,uBAAuB,QAAQ,UAAU,QAAQ,QAAQ,UAAU;AAElF,SAAO;AAAA,IACL,CAAC,QAAQ,UAAU,QAAQ,QAAQ,QAAQ,UAAU,QAAQ,MAAM;AAAA,IACnE;AAAA,IACA,YAAY;AACV,UAAI;AACF,YAAI,KAAK,SAAS,QAAQ,KAAK,KAAK,SAAS,IAAI,GAAG;AAClD,iBAAO,MAAM,GAAG,YAAY,CAAC;AAAA,CAAI;AACjC,iBAAO;AAAA,QACT;AAEA,YAAI,KAAK,CAAC,MAAM,WAAW;AACzB,gBAAM,SAAS,MAAM,oBAAoB;AAAA,YACvC,GAAG,mBAAmB,KAAK,MAAM,CAAC,CAAC;AAAA,YACnC,KAAK,QAAQ,OAAO,4BAA4B;AAAA,UAClD,CAAC;AACD,iBAAO,MAAM,GAAG,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA,CAAI;AACnD,iBAAO;AAAA,QACT;AACA,cAAM,SAAS,UAAU,IAAI;AAC7B,YAAI,OAAO,aAAa,QAAW;AACjC,iBAAO,MAAM,GAAG,YAAY,CAAC;AAAA,CAAI;AACjC,iBAAO,WAAW,SAAS,IAAI;AAAA,QACjC;AAEA,cAAM,MAAM,QAAQ,OAAO,4BAA4B;AACvD,cAAM,WAAW,KAAK,QAAQ,KAAK,OAAO,QAAQ;AAClD,cAAM,kBAAkB;AAAA,UACtB,aAAa,OAAO;AAAA,UACpB;AAAA,UACA,UAAU,QAAQ,QAAQ;AAAA,QAC5B,CAAC;AAED,eAAO,MAAM,cAAc,UAAU,QAAQ;AAAA,UAC3C;AAAA,UACA,KAAK,QAAQ;AAAA,UACb,KAAK,QAAQ;AAAA,UACb,YAAY,QAAQ;AAAA,UACpB,SAAS,QAAQ,WAAW;AAAA,UAC5B,UAAU,QAAQ,YAAY;AAAA,UAC9B;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW,QAAQ,aAAa;AAAA,QAClC,CAAC;AAAA,MACH,SAAS,OAAO;AACd,YAAI,WAAW,QAAQ;AACrB,iBAAO;AAAA,QACT;AACA,eAAO,MAAM,GAAG,iBAAiB,KAAK,CAAC;AAAA,CAAI;AAC3C,eAAO,WAAW,SACd,IACA,iBAAiB,eACf,MAAM,WACN,iBAAiB,KAAK;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,8BAAsC;AAC7C,MAAI;AACF,WAAO,QAAQ,IAAI;AAAA,EACrB,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,gDAAgD,iBAAiB,KAAK,CAAC,EAAE;AAAA,EAC3F;AACF;AAEA,SAAS,mBAAmB,MAAuD;AACjF,QAAM,SAAuC,EAAE,cAAc,IAAI,YAAY,GAAG;AAChF,QAAM,QAAQ,oBAAI,IAA2E;AAAA,IAC3F,CAAC,UAAU,YAAY;AAAA,IACvB,CAAC,QAAQ,kBAAkB;AAAA,IAC3B,CAAC,UAAU,UAAU;AAAA,IACrB,CAAC,YAAY,YAAY;AAAA,EAC3B,CAAC;AACD,QAAM,OAAO,oBAAI,IAAY;AAC7B,WAAS,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;AACnD,UAAM,WAAW,KAAK,KAAK;AAC3B,QAAI,CAAC,SAAS,WAAW,GAAG,GAAG;AAC7B,UAAI,OAAO,aAAa,SAAS;AAC/B,cAAM,IAAI,UAAU,8CAA8C;AACpE,aAAO,eAAe;AACtB;AAAA,IACF;AACA,QAAI,KAAK,IAAI,QAAQ,EAAG,OAAM,IAAI,UAAU,+BAA+B,QAAQ,EAAE;AACrF,SAAK,IAAI,QAAQ;AACjB,QAAI,aAAa,aAAa;AAC5B,aAAO,UAAU;AACjB;AAAA,IACF;AACA,QAAI,aAAa,aAAa;AAC5B,aAAO,SAAS;AAChB;AAAA,IACF;AACA,UAAM,MAAM,MAAM,IAAI,QAAQ;AAC9B,QAAI,QAAQ,OAAW,OAAM,IAAI,UAAU,6BAA6B,QAAQ,EAAE;AAClF,UAAM,QAAQ,KAAK,EAAE,KAAK;AAC1B,QAAI,UAAU,UAAa,MAAM,WAAW,IAAI;AAC9C,YAAM,IAAI,UAAU,GAAG,QAAQ,mBAAmB;AACpD,WAAO,GAAG,IAAI;AAAA,EAChB;AACA,SAAO;AACT;AAEA,SAAS,UAAU,MAAqC;AACtD,QAAM,SAAqB;AAAA,IACzB,KAAK;AAAA,IACL,IAAI;AAAA,EACN;AAEA,WAAS,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;AACnD,UAAM,MAAM,KAAK,KAAK;AAEtB,QAAI,QAAQ,SAAS;AACnB,aAAO,MAAM;AACb;AAAA,IACF;AAEA,QAAI,QAAQ,QAAQ;AAClB,aAAO,KAAK;AACZ;AAAA,IACF;AAEA,QAAI,QAAQ,aAAa;AACvB,aAAO,SAAS,cAAc,MAAM,OAAO,GAAG;AAC9C,eAAS;AACT;AAAA,IACF;AAEA,QAAI,QAAQ,gBAAgB;AAC1B,aAAO,YAAY,cAAc,MAAM,OAAO,GAAG;AACjD,eAAS;AACT;AAAA,IACF;AAEA,QAAI,QAAQ,gBAAgB;AAC1B,aAAO,YAAY,cAAc,MAAM,OAAO,GAAG;AACjD,eAAS;AACT;AAAA,IACF;AAEA,QAAI,QAAQ,cAAc;AACxB,aAAO,eAAe,cAAc,MAAM,OAAO,GAAG;AACpD,eAAS;AACT;AAAA,IACF;AAEA,QAAI,QAAQ,aAAa;AACvB,aAAO,cAAc,cAAc,MAAM,OAAO,GAAG;AACnD,eAAS;AACT;AAAA,IACF;AAEA,QAAI,QAAQ,eAAe;AACzB,aAAO,WAAW,oBAAoB,cAAc,MAAM,OAAO,GAAG,GAAG,GAAG;AAC1E,eAAS;AACT;AAAA,IACF;AAEA,QAAI,QAAQ,eAAe;AACzB,aAAO,WAAW,oBAAoB,cAAc,MAAM,OAAO,GAAG,GAAG,GAAG;AAC1E,eAAS;AACT;AAAA,IACF;AAEA,QAAI,IAAI,WAAW,GAAG,GAAG;AACvB,YAAM,IAAI,aAAa,iBAAiB,GAAG,IAAI,YAAY;AAAA,IAC7D;AAEA,QAAI,OAAO,aAAa,QAAW;AACjC,YAAM,IAAI,aAAa,wBAAwB,GAAG,IAAI,YAAY;AAAA,IACpE;AAEA,WAAO,WAAW;AAAA,EACpB;AAEA,MAAI,CAAC,OAAO,MAAM,OAAO,WAAW,QAAW;AAC7C,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,cAAc,MAAyB,OAAe,MAAsB;AACnF,QAAM,QAAQ,KAAK,QAAQ,CAAC;AAC5B,MAAI,UAAU,UAAa,MAAM,WAAW,GAAG;AAC7C,UAAM,IAAI,aAAa,qBAAqB,IAAI,IAAI,YAAY;AAAA,EAClE;AAEA,SAAO;AACT;AAEA,SAAS,oBAAoB,OAAe,MAAsB;AAChE,QAAM,SAAS,OAAO,KAAK;AAE3B,MAAI,CAAC,OAAO,UAAU,MAAM,KAAK,UAAU,GAAG;AAC5C,UAAM,IAAI,aAAa,GAAG,IAAI,+BAA+B,YAAY;AAAA,EAC3E;AAEA,SAAO;AACT;AAEA,eAAe,kBAAkB,OAIf;AAChB,MAAI;AACJ,MAAI;AACF,YAAQ,MAAM,MAAM,SAAS,MAAM,QAAQ;AAAA,EAC7C,SAAS,OAAO;AACd,QAAI,aAAa,OAAO,QAAQ,GAAG;AACjC,YAAM,IAAI,aAAa,mBAAmB,MAAM,WAAW,IAAI,YAAY;AAAA,IAC7E;AAEA,UAAM;AAAA,EACR;AAEA,MAAI,CAAC,MAAM,OAAO,GAAG;AACnB,UAAM,IAAI,aAAa,sCAAsC,MAAM,WAAW,IAAI,YAAY;AAAA,EAChG;AACF;AAEA,eAAe,cACb,UACA,QACA,SAYiB;AACjB,QAAM,SAAS,qBAAqB,UAAU,MAAM,QAAQ,SAAS,UAAU,MAAM,CAAC;AACtF,QAAM,OAAO;AAAA,IACX;AAAA,IACA,MAAM,OAAO,YAAY;AAAA,IACzB,SAAS,OAAO,YAAY;AAAA,EAC9B;AACA,QAAM,UAAU,cAAc,OAAO,aAAa,MAAM;AAAA,IACtD,IAAI,OAAO,KACP,EAAE,MAAM,KAAK,QAAQ,QAAQ,KAAK,OAAO,UAAU,QAAQ,QAAQ,CAAC,EAAE,IACtE;AAAA,IACJ,YAAY,QAAQ;AAAA,IACpB,QAAQ,QAAQ;AAAA,IAChB,QAAQ,QAAQ;AAAA,EAClB,CAAC;AACD,MAAI,MAAM,QAAQ;AAClB,MAAI,OAAO,cAAc,QAAW;AAClC,QAAI,QAAQ;AACV,YAAM,IAAI,UAAU,qDAAqD;AAC3E,UAAM,aAAa,KAAK,QAAQ,QAAQ,KAAK,OAAO,SAAS;AAC7D,UAAM,eAAe,MAAM,QAAQ,SAAS,YAAY,MAAM,CAAC;AAAA,EACjE;AACA,MAAI,QAAQ,QAAW;AACrB,UAAM,WAAW,IAAI;AAAA,MACnB,QAAQ,oBAAoB,MAAM,QAAQ,WAAW,OAAO,QAAQ,QAAQ,QAAQ;AAAA,IACtF;AACA,QAAI,SAAS,IAAI,KAAK;AACpB,YAAM,IAAI,UAAU,kDAAkD;AACxE,aAAS,IAAI,OAAO,cAAc,GAAG,CAAC;AACtC,YAAQ,WAAW;AAAA,EACrB;AACA,MAAI,MAAM,QAAQ;AAClB,MAAI,OAAO,cAAc,QAAW;AAClC,QAAI,QAAQ,OAAW,OAAM,IAAI,UAAU,6CAA6C;AACxF,UAAM,aAAa,KAAK,QAAQ,QAAQ,KAAK,OAAO,SAAS;AAC7D,UAAM,eAAe,MAAM,QAAQ,SAAS,YAAY,MAAM,GAAG,QAAQ,UAAU,CAAC;AAAA,EACtF;AACA,MAAI,QAAQ,QAAW;AACrB,UAAM,WAAW,IAAI;AAAA,MACnB,QAAQ,oBAAoB,MAAM,QAAQ,WAAW,OAAO,QAAQ,QAAQ,QAAQ;AAAA,IACtF;AACA,QAAI,SAAS,IAAI,KAAK,EAAG,OAAM,IAAI,UAAU,0CAA0C;AACvF,aAAS,IAAI,OAAO,cAAc,GAAG,CAAC;AACtC,YAAQ,WAAW;AAAA,EACrB;AACA,QAAM,UAAU,qBAAqB,QAAQ,UAAU,OAAO,WAAW;AACzE,MAAI,mBAAmB,OAAO;AAC9B,QAAM,aAAa,OAAO,MACtB,KAAK,kBAAkB;AAAA,IACrB,oBAAoB,CAAC,QAAQ;AAAA,IAC7B,UAAU;AAAA,IACV,KAAK;AAAA,IACL,WAAW,OAAO;AAAA,IAClB,mBAAmB,OAAO,KAAK,OAAO,WAAW;AAAA,IACjD,SAAS,qCAAqC,OAAO;AAAA,EACvD,CAAC,IACD,KAAK,kBAAkB;AAAA,IACrB,oBAAoB,CAAC,QAAQ;AAAA,IAC7B,UAAU;AAAA,IACV,mBAAmB,OAAO,KAAK,OAAO,WAAW;AAAA,IACjD,SAAS,qCAAqC,OAAO;AAAA,EACvD,CAAC;AACL,QAAM,cAAc,MAAM,QAAQ,UAAU,IAAI,aAAa,WAAW;AAExE,MAAI,CAAC,MAAM,QAAQ,UAAU,GAAG;AAC9B,uBAAmB,WAAW;AAC9B,QAAI,WAAW,UAAU,OAAO,kBAAkB;AAChD,YAAM,QAAQ;AAAA,QACZ;AAAA,QACA,wBAAwB,OAAO,WAAW,QAAQ,WAAW,KAAK;AAAA,QAClE;AAAA,UACE,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,aAAa,YAAY,OAAO,CAAC,eAAe,WAAW,aAAa,OAAO;AACrF,MAAI,WAAW,SAAS,GAAG;AACzB,YAAQ,OAAO,MAAM;AAAA,EAAiB,kBAAkB,UAAU,CAAC;AAAA,CAAI;AACvE,QAAI,QAAQ,WAAW,QAAQ;AAC7B,aAAO;AAAA,IACT;AACA,WAAO,WAAW,KAAK,CAAC,eAAe,WAAW,SAAS,OAAO,IAAI,aAAa;AAAA,EACrF;AAEA,QAAM,eAAe,YAAY,OAAO,CAAC,eAAe,WAAW,aAAa,SAAS;AACzF,MAAI,aAAa,SAAS,GAAG;AAC3B,YAAQ,OAAO,MAAM;AAAA,EAAmB,kBAAkB,YAAY,CAAC;AAAA,CAAI;AAC3E,QAAI,QAAQ,WAAW,QAAQ;AAC7B,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,WAAW,MAAM,oBAAoB,OAAO,aAAa,OAAO;AACtE,MAAI,aAAa,QAAW;AAC1B,YAAQ,UAAU,EAAE,QAAQ,iBAAiB,CAAC;AAAA,EAChD;AAEA,QAAM,kBAAkB,IAAI,gBAAgB;AAC5C,MAAI,cAAc;AAClB,MAAI;AACJ,MAAI;AACJ,QAAM,WAAW,MAAM;AACrB,kBAAc;AACd,oBAAgB,MAAM,iBAAiB,CAAC;AACxC,YAAQ,OAAO,MAAM,yBAAyB;AAE9C,QAAI,OAAO,iBAAiB,UAAa,eAAe,QAAW;AACjE,4BAAsB,qBAAqB,YAAY,OAAO,cAAc,OAAO;AAAA,IACrF;AAAA,EACF;AAEA,UAAQ,QAAQ,GAAG,UAAU,QAAQ;AACrC,MAAI;AACF,iBAAa,IAAI,kBAAkB;AAAA,MACjC,QACE,OAAO,aAAa,UAAa,OAAO,aAAa,SACjD,SACA,IAAI,OAAO,EAAE,UAAU,OAAO,UAAU,UAAU,OAAO,SAAS,CAAC;AAAA,MACzE,gBAAgB,iBAAiB,kBAAkB,QAAQ,IAAI,CAAC,IAAI;AAAA,MACpE,UAAU;AAAA,MACV;AAAA,MACA,QAAQ,gBAAgB;AAAA,MACxB,MAAM,kBAAkB,QAAQ,QAAQ,QAAQ,MAAM;AAAA,MACtD;AAAA,IACF,CAAC;AACD,UAAM,SAAS,MAAM;AACrB,UAAM;AAEN,QAAI,QAAQ,WAAW,QAAQ;AAC7B,aAAO;AAAA,IACT;AAEA,QAAI,OAAO,iBAAiB,QAAW;AACrC,YAAM,cAAc,OAAO,cAAc,MAAM,KAAK,MAAM,GAAG,OAAO;AAAA,IACtE;AAEA,QAAI,CAAC,OAAO,IAAI;AACd,cAAQ,OAAO;AAAA,QACb,GAAG,uBAAuB,OAAO,OAAO;AAAA,UACtC,UAAU;AAAA,UACV,QAAQ;AAAA,QACV,CAAC,CAAC;AAAA;AAAA,MACJ;AACA,UAAI,QAAQ,WAAW,QAAQ;AAC7B,eAAO;AAAA,MACT;AACA,aAAO,cAAc,cAAc,iBAAiB,OAAO,KAAK;AAAA,IAClE;AAEA,YAAQ,OAAO,MAAM,GAAG,KAAK,UAAU,EAAE,IAAI,MAAM,aAAa,OAAO,YAAY,CAAC,CAAC;AAAA,CAAI;AACzF,WAAO,QAAQ,WAAW,SAAS,IAAI,cAAc,cAAc;AAAA,EACrE,SAAS,OAAO;AACd,UAAM;AACN,QAAI,OAAO,iBAAiB,UAAa,eAAe,QAAW;AACjE,UAAI;AACF,cAAM;AAAA,UACJ,OAAO;AAAA,UACP,MAAM,KAAK,YAAY,EAAE,WAAW,aAAa,CAAC;AAAA,UAClD;AAAA,QACF;AAAA,MACF,SAAS,eAAe;AACtB,gBAAQ,OAAO;AAAA,UACb,wCAAwC,OAAO,YAAY,KAAK,iBAAiB,aAAa,CAAC;AAAA;AAAA,QACjG;AAAA,MACF;AAAA,IACF;AACA,QAAI,QAAQ,WAAW,QAAQ;AAC7B,aAAO;AAAA,IACT;AACA,YAAQ,OAAO;AAAA,MACb,GAAG,uBAAuB,OAAO;AAAA,QAC/B,UAAU;AAAA,QACV,QAAQ;AAAA,MACV,CAAC,CAAC;AAAA;AAAA,IACJ;AACA,WAAO,QAAQ,WAAW,SAAS,IAAI,cAAc,cAAc,iBAAiB,KAAK;AAAA,EAC3F,UAAE;AACA,YAAQ,QAAQ,IAAI,UAAU,QAAQ;AAAA,EACxC;AACF;AAEA,SAAS,qBAAqB,UAAkB,WAAiC;AAC/E,QAAM,SAAS,mBAAmB,SAAS;AAC3C,QAAM,sBAAsB,UAAU,SAAS,OAAO;AAEtD,MAAI,qBAAqB,QAAQ,QAAQ,CAAC,GAAG;AAC3C,WAAO;AAAA,MACL,cAAc;AAAA,MACd,kBAAkB;AAAA,MAClB,aAAa,CAAC;AAAA,MACd,aAAa;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAEA,QAAM,EAAE,aAAa,KAAK,IAAI,iBAAiB,MAAM;AACrD,QAAM,kBAAkB,OAAO,SAAS,KAAK;AAC7C,QAAM,kBAAkB,aAAa,MAAM,gBAAgB,QAAQ,GAAG,eAAe,IAAI,CAAC;AAC1F,QAAM,aAAa,gBAAgB,QAAQ,GAAG,kBAAkB,gBAAgB,WAAW;AAE3F,SAAO;AAAA,IACL,cAAc,sBAAsB,kBAAkB,gBAAgB,cAAc;AAAA,IACpF,WAAW,gBAAgB,OAAO,IAAI,CAAC,CAAC,OAAO,GAAG,MAAM;AAAA,MACtD,QAAQ,gBAAgB,cAAc;AAAA,MACtC,MAAM,gBAAgB,cAAc;AAAA,IACtC,CAAC;AAAA,IACD,kBAAkB,uBAAuB,gBAAgB,QAAQ,UAAU;AAAA,IAC3E;AAAA,IACA,aAAa;AAAA,IACb;AAAA,EACF;AACF;AAEA,SAAS,qBAAqB,WAA4B;AACxD,SAAO,cAAc,aAAa,cAAc;AAClD;AAEA,SAAS,wBACP,QACA,QACA,OACQ;AACR,SAAO,MAAM;AAAA,IACX,CAAC,QAAQ,QACP,GAAG,OAAO,MAAM,GAAG,OAAO,eAAe,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,WAAW,GAAG,OAAO,MAAM,OAAO,eAAe,IAAI,MAAM,CAAC,CAAC,CAAC;AAAA,IAC7H;AAAA,EACF;AACF;AAEA,SAAS,cACP,aACA,MACA,SAMY;AACZ,MAAI,QAAQ,eAAe,QAAW;AACpC,WAAO;AAAA,MACL,UAAU,QAAQ,WAAW,aAAa,MAAM;AAAA,QAC9C,QAAQ,QAAQ;AAAA,QAChB,QAAQ,QAAQ;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,QAAQ;AAAA,IACZ,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa,oBAAI,IAAoB;AAAA,IACrC,YAAY;AAAA,EACd;AACA,QAAM,UAAU,kBAAkB,aAAa,IAAI;AACnD,QAAM,QAAQ,gBAAgB,OAAO,UAAU;AAC7C,UAAM,cAAc;AAEpB,WAAO;AAAA,MACL,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,SAAS,GAAG,MAAM,KAAK,YAAY,gBAAgB,MAAM,MAAM,CAAC;AAAA,MAChE,YAAY,KAAK,MAAM;AAAA,IACzB;AAAA,EACF,CAAC;AACD,QAAM,MAAM;AAAA,IACV,MAAM,aAAa;AACjB,YAAM,mBAAmB;AACzB,aAAO;AAAA,QACL,MAAM,QAAQ,MAAM,eAAe;AAAA,QACnC,UAAU,aAAa,MAAM,eAAe;AAAA,MAC9C;AAAA,IACF;AAAA,IACA,MAAM,SAAS;AACb,YAAM,eAAe;AACrB,aAAO,UAAU,MAAM,WAAW;AAAA,IACpC;AAAA,IACA,MAAM,SAAS;AACb,aAAO;AAAA,IACT;AAAA,EACF;AACA,QAAM,MAAM,cAAc,CAAC,UAAU;AACnC,UAAM,aAAa,kBAAkB,KAAK;AAC1C,UAAM,SAAS,WAAW,SAAS,UAAU,QAAQ,SAAS,QAAQ;AACtE,WAAO,MAAM,GAAG,KAAK,UAAU,UAAU,CAAC;AAAA,CAAI;AAAA,EAChD,CAAC;AACD,QAAM,SAAS,iBAAiB,OAAO,eAAe,GAAG,gBAAgB,YAAY,KAAK,CAAC;AAAA,CAAI;AAE/F,SAAO;AAAA,IACL,UAAU;AAAA,MACR,OAAO,gBAAgB,KAAK;AAAA,MAC5B,MAAM,gBAAgB,oBAAI,IAAI,CAAC,CAAC,WAAW,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;AAAA;AAAA,MAEtE,GAAI,QAAQ,OAAO,SAAY,CAAC,IAAI,EAAE,IAAI,gBAAgB,aAAa,QAAQ,EAAE,CAAC,EAAE;AAAA,MACpF,KAAK;AAAA,QACH,oBAAI,IAAmC;AAAA,UACrC,CAAC,cAAc,IAAI,UAAU;AAAA,UAC7B,CAAC,UAAU,IAAI,MAAM;AAAA,UACrB,CAAC,UAAU,IAAI,MAAM;AAAA,QACvB,CAAC;AAAA,MACH;AAAA,MACA,SAAS,gBAAgB,OAAO;AAAA,MAChC,KAAK,gBAAgB,GAAG;AAAA,MACxB,QAAQ,gBAAgB,MAAM;AAAA,IAChC;AAAA,EACF;AACF;AAEA,eAAe,oBACb,aACA,SAIqC;AACrC,MAAI,gBAAgB,QAAW;AAC7B,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,KAAK,QAAQ,QAAQ,KAAK,WAAW;AAC1D,MAAI;AACJ,MAAI;AACF,kBAAc,MAAM,QAAQ,SAAS,cAAc,MAAM;AAAA,EAC3D,SAAS,OAAO;AACd,QAAI,aAAa,OAAO,QAAQ,GAAG;AACjC,YAAM,IAAI,aAAa,uBAAuB,WAAW,IAAI,YAAY;AAAA,IAC3E;AAEA,UAAM;AAAA,EACR;AAEA,MAAI;AACF,WAAO,KAAK,MAAM,WAAW;AAAA,EAC/B,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,+BAA+B,WAAW,KAAK,iBAAiB,KAAK,CAAC,EAAE;AAAA,EAC1F;AACF;AAEA,eAAe,qBACb,QACA,cACA,SAKe;AACf,MAAI;AACF,UAAM,cAAc,cAAc,MAAM,YAAY,MAAM,GAAG,OAAO;AAAA,EACtE,SAAS,OAAO;AACd,YAAQ,OAAO;AAAA,MACb,+BAA+B,YAAY,KAAK,iBAAiB,KAAK,CAAC;AAAA;AAAA,IACzE;AAAA,EACF;AACF;AAEA,eAAe,cACb,cACA,SACA,SAIe;AACf,QAAM,eAAe,KAAK,QAAQ,QAAQ,KAAK,YAAY;AAC3D,QAAM,MAAM,QAAQ,YAAY,GAAG,EAAE,WAAW,KAAK,CAAC;AACtD,QAAM,QAAQ,UAAU,cAAc,SAAS,EAAE,UAAU,OAAO,CAAC;AACrE;AAEA,SAAS,kBACP,QACA,QAIA;AACA,SAAO;AAAA,IACL,SAAS,MAAM;AACb,aAAO,MAAM,GAAG,kBAAkB,IAAI,CAAC;AAAA,CAAI;AAAA,IAC7C;AAAA,IACA,OAAO,MAAM;AACX,aAAO,MAAM,GAAG,kBAAkB,IAAI,CAAC;AAAA,CAAI;AAAA,IAC7C;AAAA,EACF;AACF;AAEA,SAAS,kBAAkB,MAAkC;AAC3D,SAAO,kBAAkB,EAAE,QAAQ,OAAO,OAAO,EAAE,GAAG,GAAG,IAAI;AAC/D;AAEA,SAAS,cAAsB;AAC7B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,SAAS,kBAAkB,aAA4C;AACrE,SAAO,YACJ;AAAA,IACC,CAAC,eACC,GAAG,WAAW,QAAQ,IAAI,WAAW,IAAI,IAAI,WAAW,MAAM,IAAI,WAAW,IAAI,IAAI,WAAW,OAAO;AAAA,EAC3G,EACC,KAAK,IAAI;AACd;AAEA,SAAS,iBAAiB,OAAwB;AAChD,MAAI,iBAAiB,gBAAgB,MAAM,SAAS,kBAAkB;AACpE,WAAO;AAAA,EACT;AAEA,MAAI,aAAa,KAAK,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,SAAS,aAAa,OAAyB;AAC7C,SAAO,iBAAiB,SAAS,MAAM,SAAS;AAClD;AAEA,SAAS,iBAAiB,QAAgB,UAA2B;AACnE,SAAO,YAAY,QAAQ,QAAQ,EAAE,KAAK;AAAA,IACxC,CAAC,cAAc,UAAU,SAAS;AAAA,EACpC;AACF;AAEA,SAAS,qBAAqB,SAAyB,aAAsC;AAC3F,MAAI,CAAC,aAAa;AAChB,WAAO;AAAA,EACT;AAEA,MAAI,mBAAmB,KAAK;AAC1B,UAAMA,cAAa,IAAI,IAAI,OAAO;AAClC,IAAAA,YAAW,OAAO,SAAS;AAC3B,WAAOA;AAAA,EACT;AAEA,QAAM,aAAa,uBAAO,OAAO,IAAI;AAErC,aAAW,CAAC,YAAY,aAAa,KAAK,OAAO,QAAQ,OAAO,GAAG;AACjE,QAAI,eAAe,WAAW;AAC5B,iBAAW,UAAU,IAAI;AAAA,IAC3B;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,mBAAmB,QAAwB;AAClD,SAAO,OAAO,WAAW,QAAQ,IAAI,OAAO,MAAM,CAAC,IAAI;AACzD;AAEA,SAAS,uBAAuB,QAAgB,YAA4B;AAC1E,SAAO,GAAG,KAAK,OAAO,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM;AACzD;AAEA,SAAS,kBAAkB,OAAuC;AAChE,SAAO;AAAA,IACL,GAAG;AAAA,IACH,IAAI;AAAA,EACN;AACF;AAEA,SAAS,gBAAgB,QAAwB;AAC/C,QAAM,mBAAmB,OAAO,KAAK,EAAE,WAAW,MAAM,GAAG;AAC3D,SAAO,iBAAiB,UAAU,KAAK,mBAAmB,GAAG,iBAAiB,MAAM,GAAG,EAAE,CAAC;AAC5F;AAEA,SAAS,gBACP,YACA,OAGQ;AACR,QAAM,aAAa,MAAM,YAAY,IAAI,UAAU,KAAK,KAAK;AAC7D,QAAM,YAAY,IAAI,YAAY,SAAS;AAE3C,MAAI,eAAe,WAAW,cAAc,GAAG;AAC7C,WAAO;AAAA,EACT;AAEA,MAAI,eAAe,WAAW,cAAc,GAAG;AAC7C,WAAO;AAAA,EACT;AAEA,SAAO,IAAI;AACb;AAEA,SAAS,gBAAgB,OAA+B;AACtD,SAAO;AACT;AAEA,SAAS,mBAA0B;AACjC,MAAI,OAAO,iBAAiB,YAAY;AACtC,UAAMC,SAAQ,IAAI,aAAa,8BAA8B,YAAY;AACzE,sBAAkBA,MAAK;AACvB,WAAOA;AAAA,EACT;AAEA,QAAM,QAAQ,IAAI,MAAM,4BAA4B;AACpD,QAAM,OAAO;AACb,oBAAkB,KAAK;AACvB,SAAO;AACT;AAEA,SAAS,aAAa,OAAgB,MAAuB;AAC3D,SAAO,gBAAgB,OAAO,IAAI;AACpC;AAEA,SAAS,iBAAiB,OAAwB;AAChD,MAAI,iBAAiB,OAAO;AAC1B,WAAO,MAAM;AAAA,EACf;AAEA,SAAO,OAAO,KAAK;AACrB;AAEA,IAAM,eAAN,cAA2B,MAAM;AAAA,EACtB;AAAA,EAET,YAAY,SAAiB,UAAkB;AAC7C,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,WAAW;AAAA,EAClB;AACF;AAEA,eAAe,kBAAkB,YAAkD;AACjF,MAAI,OAAO,eAAe,YAAY,WAAW,WAAW,GAAG;AAC7D,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,CAAC,oBAAoB,cAAc,IAAI,MAAM,QAAQ,IAAI;AAAA,MAC7D,SAAS,KAAK,QAAQ,UAAU,CAAC;AAAA,MACjC,SAAS,cAAc,YAAY,GAAG,CAAC;AAAA,IACzC,CAAC;AACD,WAAO,uBAAuB;AAAA,EAChC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,IAAI,MAAM,kBAAkB,QAAQ,KAAK,CAAC,CAAC,GAAG;AAC5C,UAAQ,WAAW,MAAM,OAAO,QAAQ,KAAK,MAAM,CAAC,CAAC;AACvD;",
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, maskSource } 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 = rawSource.length - body.length;\n const executableBlock = extractBlock(body, countLineBreaks(rawSource, 0, bodyStartOffset) + 1);\n\n return {\n sourceOffset: 0,\n fixRanges: executableBlock.ranges.map(([start, end]) => [\n bodyStartOffset + start,\n bodyStartOffset + end\n ]),\n executableSource:\n maskSource(rawSource.slice(0, bodyStartOffset + executableBlock.startOffset)) +\n executableBlock.source,\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 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-OPNWSDXC.js";
6
+ } from "./chunks/chunk-TVZKHJOO.js";
7
7
  import "./chunks/chunk-4YIDX44G.js";
8
8
  export {
9
9
  Budget,
@@ -1,6 +1,6 @@
1
1
  import { readFile, writeFile } from "node:fs/promises";
2
2
  import { pathToFileURL } from "node:url";
3
- import { countLineBreaks, extractBlock } from "./loader/extract-block.js";
3
+ import { countLineBreaks, extractBlock, maskSource } from "./loader/extract-block.js";
4
4
  import { splitFrontmatter } from "./loader/frontmatter.js";
5
5
  import { lint } from "./lint.js";
6
6
  import { createLintModulesFromRuntimeRegistry } from "./lint/runtime-modules.js";
@@ -101,14 +101,14 @@ function loadExecutableSource(source) {
101
101
  const bodyStartOffset = source.length - body.length;
102
102
  const executableBlock = extractBlock(body, countLineBreaks(source, 0, bodyStartOffset) + 1);
103
103
  const hasScriptBlock = executableBlock.source !== body || executableBlock.lineOffset !== 1;
104
- const lineOffset = countLineBreaks(source, 0, bodyStartOffset + executableBlock.startOffset);
105
104
  return {
106
- sourceOffset: bodyStartOffset + executableBlock.startOffset - lineOffset,
105
+ sourceOffset: 0,
107
106
  fixRanges: executableBlock.ranges.map(([start, end]) => [
108
- start - executableBlock.startOffset + lineOffset,
109
- end - executableBlock.startOffset + lineOffset
107
+ bodyStartOffset + start,
108
+ bodyStartOffset + end
110
109
  ]),
111
- executableSource: `${"\n".repeat(lineOffset)}${executableBlock.source}`,
110
+ executableSource: maskSource(source.slice(0, bodyStartOffset + executableBlock.startOffset)) +
111
+ executableBlock.source,
112
112
  frontmatter,
113
113
  hasScriptBlock
114
114
  };
@@ -18,6 +18,7 @@ import {
18
18
  makeLogModule,
19
19
  makeMcpModule,
20
20
  makeMetricModule,
21
+ maskSource,
21
22
  migrateSnapshot,
22
23
  migrateSnapshotFile,
23
24
  parseEnvConfig,
@@ -26,7 +27,7 @@ import {
26
27
  runWithSpawnUsageAccumulator,
27
28
  splitFrontmatter,
28
29
  supportsSpawnMode
29
- } from "./chunks/chunk-NP42RTIU.js";
30
+ } from "./chunks/chunk-776EUEUM.js";
30
31
  import {
31
32
  Budget,
32
33
  FileSnapshotBackend,
@@ -48,7 +49,7 @@ import {
48
49
  registerPendingHostCallPolicy,
49
50
  restore,
50
51
  run
51
- } from "./chunks/chunk-OPNWSDXC.js";
52
+ } from "./chunks/chunk-TVZKHJOO.js";
52
53
  import "./chunks/chunk-4YIDX44G.js";
53
54
 
54
55
  // packages/safejs/src/runner/run-harness.ts
@@ -96,7 +97,7 @@ var LintError = class extends Error {
96
97
  }
97
98
  };
98
99
  async function runHarness(filepath, options) {
99
- const rawSource = stripByteOrderMark(await readHarnessFile(filepath));
100
+ const rawSource = await readHarnessFile(filepath);
100
101
  const { executableSource, frontmatter, isRawScript } = loadExecutableSource(filepath, rawSource);
101
102
  assertFrontmatterAgentModes(frontmatter);
102
103
  const meta = createHarnessMeta(filepath, frontmatter);
@@ -180,11 +181,12 @@ async function readHarnessFile(filepath) {
180
181
  }
181
182
  function loadExecutableSource(filepath, source) {
182
183
  if (isRawScriptPath(filepath)) {
183
- if (source.length === 0) {
184
+ const executableSource = stripByteOrderMark(source);
185
+ if (executableSource.length === 0) {
184
186
  throw new Error(`No code block found in empty harness file: ${filepath}`);
185
187
  }
186
188
  return {
187
- executableSource: source,
189
+ executableSource,
188
190
  frontmatter: {},
189
191
  isRawScript: true
190
192
  };
@@ -198,9 +200,8 @@ function loadExecutableSource(filepath, source) {
198
200
  body,
199
201
  countLineBreaks(source, 0, bodyStartOffset) + 1
200
202
  );
201
- const absoluteLineOffset = countLineBreaks(source, 0, bodyStartOffset + startOffset);
202
203
  return {
203
- executableSource: createLineOffsetSource(stripHashbang(executableBlock), absoluteLineOffset),
204
+ executableSource: maskSource(source.slice(0, bodyStartOffset + startOffset)) + stripHashbang(executableBlock),
204
205
  frontmatter,
205
206
  isRawScript: false
206
207
  };
@@ -281,9 +282,6 @@ function stripHashbang(source) {
281
282
  while (end < source.length && source[end] !== "\n" && source[end] !== "\r") end += 1;
282
283
  return `${" ".repeat(end)}${source.slice(end)}`;
283
284
  }
284
- function createLineOffsetSource(source, lineOffset) {
285
- return `${"\n".repeat(Math.max(lineOffset, 0))}${source}`;
286
- }
287
285
  function formatLintErrorMessage(diagnostics) {
288
286
  if (diagnostics.length === 0) {
289
287
  return "Script lint failed.";
@@ -1,7 +1,7 @@
1
1
  {
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
- "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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",
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, maskSource } 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 = 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 const executableSource = stripByteOrderMark(source);\n if (executableSource.length === 0) {\n throw new Error(`No code block found in empty harness file: ${filepath}`);\n }\n\n return {\n executableSource,\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 return {\n executableSource:\n maskSource(source.slice(0, bodyStartOffset + startOffset)) + stripHashbang(executableBlock),\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 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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",
6
6
  "names": ["rawModules", "stat", "stat", "resolve", "resolve"]
7
7
  }