codealmanac 0.2.6 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/LICENSE +21 -133
  2. package/README.md +20 -15
  3. package/dist/{agents-HYRWRHRX.js → agents-V2ZOIACP.js} +6 -5
  4. package/dist/{chunk-PDFS5VFE.js → chunk-447U3GQJ.js} +5 -17
  5. package/dist/chunk-447U3GQJ.js.map +1 -0
  6. package/dist/{chunk-3E7JNMTZ.js → chunk-5BWUMAOX.js} +4 -29
  7. package/dist/chunk-5BWUMAOX.js.map +1 -0
  8. package/dist/{chunk-KQUVMF27.js → chunk-BFIG2CXM.js} +2 -516
  9. package/dist/chunk-BFIG2CXM.js.map +1 -0
  10. package/dist/{chunk-K2JBCB7R.js → chunk-BQY5L3DL.js} +7 -43
  11. package/dist/chunk-BQY5L3DL.js.map +1 -0
  12. package/dist/{chunk-F53U6JQG.js → chunk-CQJVM34R.js} +2 -2
  13. package/dist/chunk-FUBE6KCO.js +124 -0
  14. package/dist/chunk-FUBE6KCO.js.map +1 -0
  15. package/dist/chunk-IZBXXAVL.js +524 -0
  16. package/dist/chunk-IZBXXAVL.js.map +1 -0
  17. package/dist/{chunk-7JUX4ADQ.js → chunk-IZT6RBHS.js} +1 -1
  18. package/dist/{chunk-DW32TL5W.js → chunk-JLQZELHQ.js} +18 -58
  19. package/dist/chunk-JLQZELHQ.js.map +1 -0
  20. package/dist/{chunk-2BNDNGUR.js → chunk-KZXWPG4P.js} +4 -8
  21. package/dist/{chunk-2BNDNGUR.js.map → chunk-KZXWPG4P.js.map} +1 -1
  22. package/dist/{chunk-GPFVEF6V.js → chunk-QIA22IAM.js} +6 -24
  23. package/dist/chunk-QIA22IAM.js.map +1 -0
  24. package/dist/{chunk-J7DNV2DH.js → chunk-RALBM6HZ.js} +43 -355
  25. package/dist/chunk-RALBM6HZ.js.map +1 -0
  26. package/dist/{chunk-HJ3WREGP.js → chunk-U5DLLWIC.js} +3 -3
  27. package/dist/chunk-WL4UE7Q6.js +1386 -0
  28. package/dist/chunk-WL4UE7Q6.js.map +1 -0
  29. package/dist/{chunk-VXDPUOQ5.js → chunk-ZUQN5Y3K.js} +129 -382
  30. package/dist/chunk-ZUQN5Y3K.js.map +1 -0
  31. package/dist/{chunk-ODJAAJGZ.js → chunk-ZZLLOAI6.js} +3 -3
  32. package/dist/{cli-MKXCNEMW.js → cli-XWPNARA6.js} +37 -20
  33. package/dist/cli-XWPNARA6.js.map +1 -0
  34. package/dist/codealmanac.js +1 -1
  35. package/dist/{config-F7FKEQ7F.js → config-KH3JUMG6.js} +4 -4
  36. package/dist/doctor-ENJT665Z.js +18 -0
  37. package/dist/{hook-4SVX446M.js → hook-2NP3UE7U.js} +2 -4
  38. package/dist/paths-O5CZADP2.js +14 -0
  39. package/dist/process-KFSLENL3.js +61 -0
  40. package/dist/{register-commands-2F6SXLDI.js → register-commands-LULZUSPO.js} +999 -1030
  41. package/dist/register-commands-LULZUSPO.js.map +1 -0
  42. package/dist/uninstall-BD4MMQ7M.js +16 -0
  43. package/dist/uninstall-BD4MMQ7M.js.map +1 -0
  44. package/dist/update-XSKPDFMJ.js +11 -0
  45. package/dist/update-XSKPDFMJ.js.map +1 -0
  46. package/dist/{wiki-IGNRNLUZ.js → wiki-O4RWMAE6.js} +8 -6
  47. package/dist/wiki-O4RWMAE6.js.map +1 -0
  48. package/guides/mini.md +8 -6
  49. package/guides/reference.md +89 -32
  50. package/hooks/almanac-capture.sh +7 -8
  51. package/package.json +3 -4
  52. package/prompts/agents/.gitkeep +1 -0
  53. package/prompts/base/notability.md +139 -0
  54. package/prompts/base/purpose.md +85 -0
  55. package/prompts/base/syntax.md +114 -0
  56. package/prompts/operations/absorb.md +43 -0
  57. package/prompts/operations/build.md +49 -0
  58. package/prompts/operations/garden.md +51 -0
  59. package/COMMERCIAL.md +0 -9
  60. package/dist/chunk-3E7JNMTZ.js.map +0 -1
  61. package/dist/chunk-DW32TL5W.js.map +0 -1
  62. package/dist/chunk-GPFVEF6V.js.map +0 -1
  63. package/dist/chunk-J7DNV2DH.js.map +0 -1
  64. package/dist/chunk-K2JBCB7R.js.map +0 -1
  65. package/dist/chunk-KQUVMF27.js.map +0 -1
  66. package/dist/chunk-PDFS5VFE.js.map +0 -1
  67. package/dist/chunk-VXDPUOQ5.js.map +0 -1
  68. package/dist/cli-MKXCNEMW.js.map +0 -1
  69. package/dist/doctor-37UH3HT5.js +0 -17
  70. package/dist/register-commands-2F6SXLDI.js.map +0 -1
  71. package/dist/uninstall-C62ZOK32.js +0 -17
  72. package/dist/update-2UGOFN5C.js +0 -11
  73. package/dist/wiki-IGNRNLUZ.js.map +0 -1
  74. package/prompts/bootstrap.md +0 -176
  75. package/prompts/reviewer.md +0 -129
  76. package/prompts/writer.md +0 -134
  77. /package/dist/{agents-HYRWRHRX.js.map → agents-V2ZOIACP.js.map} +0 -0
  78. /package/dist/{chunk-F53U6JQG.js.map → chunk-CQJVM34R.js.map} +0 -0
  79. /package/dist/{chunk-7JUX4ADQ.js.map → chunk-IZT6RBHS.js.map} +0 -0
  80. /package/dist/{chunk-HJ3WREGP.js.map → chunk-U5DLLWIC.js.map} +0 -0
  81. /package/dist/{chunk-ODJAAJGZ.js.map → chunk-ZZLLOAI6.js.map} +0 -0
  82. /package/dist/{config-F7FKEQ7F.js.map → config-KH3JUMG6.js.map} +0 -0
  83. /package/dist/{doctor-37UH3HT5.js.map → doctor-ENJT665Z.js.map} +0 -0
  84. /package/dist/{hook-4SVX446M.js.map → hook-2NP3UE7U.js.map} +0 -0
  85. /package/dist/{uninstall-C62ZOK32.js.map → paths-O5CZADP2.js.map} +0 -0
  86. /package/dist/{update-2UGOFN5C.js.map → process-KFSLENL3.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/process/ids.ts","../src/process/background.ts","../src/process/logs.ts","../src/process/manager.ts","../src/harness/providers/claude.ts","../src/harness/providers/metadata.ts","../src/harness/providers/codex.ts","../src/harness/providers/not-implemented.ts","../src/harness/providers/cursor.ts","../src/harness/providers/index.ts","../src/process/records.ts","../src/process/snapshots.ts","../src/process/spec.ts"],"sourcesContent":["import { randomBytes } from \"node:crypto\";\n\nexport function createRunId(now: Date = new Date()): string {\n const stamp = now\n .toISOString()\n .replace(/\\D/g, \"\")\n .slice(0, 14);\n const suffix = randomBytes(4).toString(\"hex\");\n return `run_${stamp}_${suffix}`;\n}\n","import { spawn } from \"node:child_process\";\nimport type { ChildProcess } from \"node:child_process\";\n\nimport type { AgentRunSpec, HarnessRunHooks } from \"../harness/types.js\";\nimport type { HarnessResult } from \"../harness/events.js\";\nimport { createRunId } from \"./ids.js\";\nimport { initializeRunLog } from \"./logs.js\";\nimport { startForegroundProcess, type StartProcessResult } from \"./manager.js\";\nimport {\n buildQueuedRunRecord,\n finishRunRecord,\n readRunRecord,\n runRecordPath,\n writeRunRecord,\n} from \"./records.js\";\nimport { readRunSpec, writeRunSpec } from \"./spec.js\";\nimport type { RunRecord } from \"./types.js\";\n\nexport interface BackgroundChild {\n pid?: number;\n unref?: () => void;\n}\n\nexport type SpawnBackgroundFn = (args: {\n command: string;\n args: string[];\n cwd: string;\n env: NodeJS.ProcessEnv;\n}) => BackgroundChild;\n\nexport interface StartBackgroundProcessOptions {\n repoRoot: string;\n spec: AgentRunSpec;\n runId?: string;\n now?: () => Date;\n spawnBackground?: SpawnBackgroundFn;\n entrypoint?: string;\n}\n\nexport interface StartBackgroundProcessResult {\n runId: string;\n record: RunRecord;\n childPid: number;\n}\n\nexport async function startBackgroundProcess(\n options: StartBackgroundProcessOptions,\n): Promise<StartBackgroundProcessResult> {\n const now = options.now ?? (() => new Date());\n const runId = options.runId ?? createRunId(now());\n await writeRunSpec(options.repoRoot, runId, options.spec);\n const recordPath = runRecordPath(options.repoRoot, runId);\n const queued = buildQueuedRunRecord({\n runId,\n repoRoot: options.repoRoot,\n spec: options.spec,\n queuedAt: now(),\n });\n await writeRunRecord(recordPath, queued);\n await initializeRunLog(queued.logPath);\n\n const entrypoint = options.entrypoint ?? process.argv[1];\n if (entrypoint === undefined || entrypoint.length === 0) {\n const error = \"cannot start background process without an entrypoint\";\n await writeRunRecord(\n recordPath,\n finishRunRecord({\n record: queued,\n status: \"failed\",\n finishedAt: now(),\n error,\n }),\n );\n throw new Error(error);\n }\n\n const spawnFn = options.spawnBackground ?? defaultSpawnBackground;\n let child: BackgroundChild;\n try {\n child = spawnFn({\n command: process.execPath,\n args: [entrypoint, \"__run-job\", runId],\n cwd: options.repoRoot,\n env: {\n ...process.env,\n CODEALMANAC_INTERNAL_SESSION: \"1\",\n },\n });\n } catch (err: unknown) {\n await writeRunRecord(\n recordPath,\n finishRunRecord({\n record: queued,\n status: \"failed\",\n finishedAt: now(),\n error: err instanceof Error ? err.message : String(err),\n }),\n );\n throw err;\n }\n child.unref?.();\n const childPid = child.pid ?? 0;\n return { runId, record: queued, childPid };\n}\n\nexport interface RunBackgroundChildOptions {\n repoRoot: string;\n runId: string;\n now?: () => Date;\n pid?: number;\n onEvent?: (event: import(\"../harness/events.js\").HarnessEvent) => void | Promise<void>;\n harnessRun?: (\n spec: AgentRunSpec,\n hooks?: HarnessRunHooks,\n ) => Promise<HarnessResult>;\n}\n\nexport async function runBackgroundChild(\n options: RunBackgroundChildOptions,\n): Promise<StartProcessResult> {\n const existing = await readRunRecord(runRecordPath(options.repoRoot, options.runId));\n if (existing?.status === \"cancelled\") {\n return {\n runId: options.runId,\n record: existing,\n result: {\n success: false,\n result: \"\",\n error: \"run cancelled before start\",\n },\n };\n }\n const spec = await readRunSpec(options.repoRoot, options.runId);\n return startForegroundProcess({\n repoRoot: options.repoRoot,\n spec,\n runId: options.runId,\n now: options.now,\n pid: options.pid,\n onEvent: options.onEvent,\n harnessRun: options.harnessRun,\n });\n}\n\nfunction defaultSpawnBackground(args: {\n command: string;\n args: string[];\n cwd: string;\n env: NodeJS.ProcessEnv;\n}): ChildProcess {\n return spawn(args.command, args.args, {\n cwd: args.cwd,\n env: args.env,\n detached: true,\n stdio: \"ignore\",\n });\n}\n","import { mkdir, writeFile, appendFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\n\nimport type { HarnessEvent } from \"../harness/events.js\";\n\nexport interface RunLogEntry {\n timestamp: string;\n event: HarnessEvent;\n}\n\nexport async function initializeRunLog(path: string): Promise<void> {\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, \"\", \"utf8\");\n}\n\nexport async function appendRunEvent(\n path: string,\n event: HarnessEvent,\n now: Date = new Date(),\n): Promise<void> {\n const entry: RunLogEntry = {\n timestamp: now.toISOString(),\n event,\n };\n await appendFile(path, `${JSON.stringify(entry)}\\n`, \"utf8\");\n}\n","import { join } from \"node:path\";\n\nimport type { HarnessEvent, HarnessResult } from \"../harness/events.js\";\nimport type { AgentRunSpec, HarnessRunHooks } from \"../harness/types.js\";\nimport { getHarnessProvider } from \"../harness/providers/index.js\";\nimport { runIndexer } from \"../indexer/index.js\";\nimport { createRunId } from \"./ids.js\";\nimport { appendRunEvent, initializeRunLog } from \"./logs.js\";\nimport {\n buildStartedRunRecord,\n finishRunRecord,\n isRunCancellationRequested,\n readRunRecord,\n runRecordPath,\n writeRunRecord,\n} from \"./records.js\";\nimport { diffPageSnapshots, snapshotPages } from \"./snapshots.js\";\nimport type { RunRecord, RunSummary } from \"./types.js\";\n\nexport interface StartProcessOptions {\n repoRoot: string;\n spec: AgentRunSpec;\n runId?: string;\n now?: () => Date;\n pid?: number;\n onEvent?: (event: HarnessEvent) => void | Promise<void>;\n harnessRun?: (\n spec: AgentRunSpec,\n hooks?: HarnessRunHooks,\n ) => Promise<HarnessResult>;\n}\n\nexport interface StartProcessResult {\n runId: string;\n record: RunRecord;\n result: HarnessResult;\n}\n\nexport async function startForegroundProcess(\n options: StartProcessOptions,\n): Promise<StartProcessResult> {\n const now = options.now ?? (() => new Date());\n const runId = options.runId ?? createRunId(now());\n const startedAt = now();\n const recordPath = runRecordPath(options.repoRoot, runId);\n const started = buildStartedRunRecord({\n runId,\n repoRoot: options.repoRoot,\n spec: options.spec,\n startedAt,\n pid: options.pid,\n });\n\n const preStart = await cancelledRecordIfRequested({\n recordPath,\n repoRoot: options.repoRoot,\n runId,\n fallback: started,\n finishedAt: now(),\n });\n if (preStart !== null) {\n return {\n runId,\n record: preStart,\n result: {\n success: false,\n result: \"\",\n error: \"run cancelled before start\",\n },\n };\n }\n\n await writeRunRecord(recordPath, started);\n await initializeRunLog(started.logPath);\n const afterStart = await cancelledRecordIfRequested({\n recordPath,\n repoRoot: options.repoRoot,\n runId,\n fallback: started,\n finishedAt: now(),\n });\n if (afterStart !== null) {\n return {\n runId,\n record: afterStart,\n result: {\n success: false,\n result: \"\",\n error: \"run cancelled before start\",\n },\n };\n }\n\n const harnessRun =\n options.harnessRun ??\n ((spec, hooks) => getHarnessProvider(spec.provider.id).run(spec, hooks));\n const eventWrites: Promise<void>[] = [];\n\n let result: HarnessResult;\n let finalRecord: RunRecord;\n try {\n const pagesDir = join(options.repoRoot, \".almanac\", \"pages\");\n const before = await snapshotPages(pagesDir);\n try {\n result = await harnessRun(options.spec, {\n onEvent: eventLogger(started.logPath, now, eventWrites, options.onEvent),\n });\n } catch (err: unknown) {\n result = {\n success: false,\n result: \"\",\n error: err instanceof Error ? err.message : String(err),\n };\n await appendRunEvent(started.logPath, {\n type: \"error\",\n error: result.error ?? \"unknown error\",\n }, now());\n }\n await Promise.allSettled(eventWrites);\n\n const after = await snapshotPages(pagesDir);\n const delta = diffPageSnapshots(before, after);\n if (result.success) {\n await runIndexer({ repoRoot: options.repoRoot });\n }\n\n const summary: RunSummary = {\n created: delta.created,\n updated: delta.updated,\n archived: delta.archived,\n costUsd: result.costUsd,\n turns: result.turns,\n usage: result.usage,\n };\n finalRecord = await finishUnlessCancelled({\n recordPath,\n fallback: started,\n status: result.success ? \"done\" : \"failed\",\n finishedAt: now(),\n providerSessionId: result.providerSessionId,\n summary,\n error: result.error,\n failure: result.failure,\n });\n } catch (err: unknown) {\n result = {\n success: false,\n result: \"\",\n error: err instanceof Error ? err.message : String(err),\n };\n try {\n await appendRunEvent(started.logPath, {\n type: \"error\",\n error: result.error ?? \"unknown error\",\n }, now());\n } catch {\n // The run record is the source of truth; do not let a broken log write\n // prevent terminal status recording.\n }\n await Promise.allSettled(eventWrites);\n finalRecord = await finishUnlessCancelled({\n recordPath,\n fallback: started,\n status: \"failed\",\n finishedAt: now(),\n error: result.error,\n failure: result.failure,\n });\n }\n\n if (finalRecord.status === \"cancelled\" && result.success) {\n result = {\n success: false,\n result: \"\",\n error: \"run cancelled before final status\",\n };\n }\n return { runId, record: finalRecord, result };\n}\n\nasync function finishUnlessCancelled(args: {\n recordPath: string;\n fallback: RunRecord;\n status: \"done\" | \"failed\";\n finishedAt: Date;\n providerSessionId?: string;\n summary?: RunSummary;\n error?: string;\n failure?: import(\"../harness/events.js\").HarnessFailure;\n}): Promise<RunRecord> {\n const current = await readRunRecord(args.recordPath);\n if (\n current?.status === \"cancelled\" ||\n isRunCancellationRequested(args.fallback.repoRoot, args.fallback.id)\n ) {\n return finishCancelled({\n recordPath: args.recordPath,\n fallback: current ?? args.fallback,\n finishedAt: args.finishedAt,\n });\n }\n const base = current ?? args.fallback;\n const finished = finishRunRecord({\n record: base,\n status: args.status,\n finishedAt: args.finishedAt,\n providerSessionId: args.providerSessionId,\n summary: args.summary,\n error: args.error,\n failure: args.failure,\n });\n await writeRunRecord(args.recordPath, finished);\n return finished;\n}\n\nasync function cancelledRecordIfRequested(args: {\n recordPath: string;\n repoRoot: string;\n runId: string;\n fallback: RunRecord;\n finishedAt: Date;\n}): Promise<RunRecord | null> {\n const current = await readRunRecord(args.recordPath);\n if (\n current?.status !== \"cancelled\" &&\n !isRunCancellationRequested(args.repoRoot, args.runId)\n ) {\n return null;\n }\n return finishCancelled({\n recordPath: args.recordPath,\n fallback: current ?? args.fallback,\n finishedAt: args.finishedAt,\n });\n}\n\nasync function finishCancelled(args: {\n recordPath: string;\n fallback: RunRecord;\n finishedAt: Date;\n}): Promise<RunRecord> {\n const cancelled =\n args.fallback.status === \"cancelled\"\n ? args.fallback\n : finishRunRecord({\n record: args.fallback,\n status: \"cancelled\",\n finishedAt: args.finishedAt,\n });\n await writeRunRecord(args.recordPath, cancelled);\n return cancelled;\n}\n\nfunction eventLogger(\n path: string,\n now: () => Date,\n writes: Promise<void>[],\n observer?: (event: HarnessEvent) => void | Promise<void>,\n): (event: HarnessEvent) => void {\n return (event) => {\n writes.push(appendRunEvent(path, event, now()));\n if (observer !== undefined) {\n writes.push(Promise.resolve(observer(event)));\n }\n };\n}\n","import {\n query,\n type AgentDefinition,\n type Options as ClaudeOptions,\n type SDKMessage,\n} from \"@anthropic-ai/claude-agent-sdk\";\n\nimport type { HarnessEvent, HarnessFailure, HarnessResult } from \"../events.js\";\nimport type { ToolRequest } from \"../tools.js\";\nimport type {\n AgentRunSpec,\n AgentSpec,\n HarnessProvider,\n HarnessRunHooks,\n ProviderStatus,\n} from \"../types.js\";\nimport { HARNESS_PROVIDER_METADATA } from \"./metadata.js\";\nimport {\n checkClaudeAuth,\n resolveClaudeExecutable,\n type ClaudeAuthStatus,\n} from \"../../agent/providers/claude/auth.js\";\n\ntype ClaudeQuery = AsyncIterable<SDKMessage>;\ntype ClaudeQueryFn = (params: {\n prompt: string;\n options?: ClaudeOptions;\n}) => ClaudeQuery;\n\nexport interface ClaudeHarnessProviderDeps {\n query?: ClaudeQueryFn;\n checkAuth?: () => Promise<ClaudeAuthStatus>;\n resolveExecutable?: () => string | undefined;\n}\n\nexport function createClaudeHarnessProvider(\n deps: ClaudeHarnessProviderDeps = {},\n): HarnessProvider {\n const queryFn = deps.query ?? query;\n const checkAuthFn = deps.checkAuth ?? (() => checkClaudeAuth());\n const resolveExecutable = deps.resolveExecutable ?? resolveClaudeExecutable;\n const metadata = HARNESS_PROVIDER_METADATA.claude;\n\n return {\n metadata,\n checkStatus: async (): Promise<ProviderStatus> => {\n let auth: ClaudeAuthStatus = { loggedIn: false };\n try {\n auth = await checkAuthFn();\n } catch {\n auth = { loggedIn: false };\n }\n const hasApiKey =\n process.env.ANTHROPIC_API_KEY !== undefined &&\n process.env.ANTHROPIC_API_KEY.length > 0;\n const installed = resolveExecutable() !== undefined;\n const authenticated = auth.loggedIn || hasApiKey;\n const detail = authenticated\n ? auth.email ?? (hasApiKey ? \"ANTHROPIC_API_KEY set\" : \"logged in\")\n : installed\n ? \"not logged in\"\n : \"claude not found on PATH\";\n return { id: metadata.id, installed, authenticated, detail };\n },\n run: async (spec, hooks): Promise<HarnessResult> =>\n runClaudeHarness(spec, hooks, queryFn, resolveExecutable),\n };\n}\n\nexport const claudeHarnessProvider = createClaudeHarnessProvider();\n\nasync function runClaudeHarness(\n spec: AgentRunSpec,\n hooks: HarnessRunHooks | undefined,\n queryFn: ClaudeQueryFn,\n resolveExecutable: () => string | undefined,\n): Promise<HarnessResult> {\n const options = buildClaudeOptions(spec, resolveExecutable);\n const stream = queryFn({\n prompt: spec.prompt,\n options,\n });\n\n let costUsd: number | undefined;\n let turns: number | undefined;\n let result = \"\";\n let providerSessionId: string | undefined;\n let success = false;\n let error: string | undefined;\n let failure: HarnessFailure | undefined;\n let usage: HarnessResult[\"usage\"];\n\n try {\n for await (const message of stream) {\n providerSessionId = providerSessionId ?? getSessionId(message);\n for (const event of toHarnessEvents(message)) {\n await hooks?.onEvent?.(event);\n }\n\n if (message.type === \"result\") {\n costUsd = message.total_cost_usd;\n turns = message.num_turns;\n usage = mapUsage(message.usage);\n providerSessionId = providerSessionId ?? message.session_id;\n if (message.subtype === \"success\") {\n success = true;\n result = message.result;\n } else {\n success = false;\n error =\n message.errors.length > 0\n ? message.errors.join(\"; \")\n : `agent error: ${message.subtype}`;\n failure = classifyClaudeFailure(error, message.subtype);\n }\n }\n }\n } catch (err: unknown) {\n success = false;\n error = err instanceof Error ? err.message : String(err);\n failure = classifyClaudeFailure(error);\n await hooks?.onEvent?.({ type: \"error\", error, failure });\n }\n\n await hooks?.onEvent?.({\n type: \"done\",\n result,\n providerSessionId,\n costUsd,\n turns,\n usage,\n error,\n failure,\n });\n\n return {\n success,\n result,\n providerSessionId,\n costUsd,\n turns,\n usage,\n error,\n failure,\n };\n}\n\nfunction classifyClaudeFailure(\n raw: string,\n subtype?: string,\n): HarnessFailure {\n if (raw.includes(\"Not logged in\") || raw.includes(\"authentication\")) {\n return {\n provider: \"claude\",\n code: \"claude.not_authenticated\",\n message: \"Claude is not authenticated in this environment.\",\n fix: \"Run `claude` and log in, or configure ANTHROPIC_API_KEY for this process.\",\n raw,\n details: subtype !== undefined ? { subtype } : undefined,\n };\n }\n\n if (subtype === \"error_max_budget_usd\") {\n return {\n provider: \"claude\",\n code: \"claude.max_budget_exceeded\",\n message: \"Claude stopped because the run exceeded its maximum budget.\",\n fix: \"Raise the budget for this run or use a cheaper model.\",\n raw,\n details: { subtype },\n };\n }\n\n return {\n provider: \"claude\",\n code: subtype !== undefined ? `claude.${subtype}` : \"claude.process_failed\",\n message: raw,\n raw,\n details: subtype !== undefined ? { subtype } : undefined,\n };\n}\n\nfunction buildClaudeOptions(\n spec: AgentRunSpec,\n resolveExecutable: () => string | undefined,\n): ClaudeOptions {\n const tools = toClaudeTools(spec.tools ?? []);\n const agents = toClaudeAgents(spec.agents ?? {});\n if (Object.keys(agents).length > 0 && !tools.includes(\"Agent\")) {\n tools.push(\"Agent\");\n }\n\n const claudeExecutable = resolveExecutable();\n return pruneUndefined({\n systemPrompt: spec.systemPrompt,\n cwd: spec.cwd,\n model: spec.provider.model ?? HARNESS_PROVIDER_METADATA.claude.defaultModel ?? undefined,\n effort: toClaudeEffort(spec.provider.effort),\n tools,\n allowedTools: tools,\n agents,\n mcpServers: spec.mcpServers as ClaudeOptions[\"mcpServers\"],\n maxTurns: spec.limits?.maxTurns ?? 100,\n maxBudgetUsd: spec.limits?.maxCostUsd,\n permissionMode: \"dontAsk\",\n includePartialMessages: true,\n env: {\n ...process.env,\n CODEALMANAC_INTERNAL_SESSION: \"1\",\n },\n ...(claudeExecutable !== undefined\n ? { pathToClaudeCodeExecutable: claudeExecutable }\n : {}),\n });\n}\n\nfunction toClaudeAgents(\n agents: Record<string, AgentSpec>,\n): Record<string, AgentDefinition> {\n const out: Record<string, AgentDefinition> = {};\n for (const [name, agent] of Object.entries(agents)) {\n out[name] = pruneUndefined({\n description: agent.description,\n prompt: agent.prompt,\n tools: agent.tools !== undefined ? toClaudeTools(agent.tools) : undefined,\n model: agent.model,\n maxTurns: agent.maxTurns,\n mcpServers: agent.mcpServers as AgentDefinition[\"mcpServers\"],\n skills: agent.skills,\n });\n }\n return out;\n}\n\nfunction toClaudeTools(tools: readonly ToolRequest[]): string[] {\n const out = new Set<string>();\n for (const tool of tools) {\n switch (tool.id) {\n case \"read\":\n out.add(\"Read\");\n break;\n case \"write\":\n out.add(\"Write\");\n break;\n case \"edit\":\n out.add(\"Edit\");\n break;\n case \"search\":\n out.add(\"Glob\");\n out.add(\"Grep\");\n break;\n case \"shell\":\n out.add(\"Bash\");\n break;\n case \"web\":\n out.add(\"WebSearch\");\n out.add(\"WebFetch\");\n break;\n case \"mcp\":\n break;\n }\n }\n return [...out];\n}\n\nfunction toClaudeEffort(effort: string | undefined): ClaudeOptions[\"effort\"] {\n if (\n effort === \"low\" ||\n effort === \"medium\" ||\n effort === \"high\" ||\n effort === \"max\"\n ) {\n return effort;\n }\n return undefined;\n}\n\nfunction toHarnessEvents(message: SDKMessage): HarnessEvent[] {\n if (message.type === \"stream_event\") {\n const text = getTextDelta(message.event);\n return text !== undefined ? [{ type: \"text_delta\", content: text }] : [];\n }\n\n if (message.type === \"assistant\") {\n const content = message.message.content;\n if (!Array.isArray(content)) return [];\n const events: HarnessEvent[] = [];\n for (const block of content) {\n if (block.type === \"text\") {\n events.push({ type: \"text\", content: block.text });\n continue;\n }\n if (block.type === \"tool_use\") {\n events.push({\n type: \"tool_use\",\n id: block.id,\n tool: block.name,\n input: stringifyInput(block.input),\n });\n }\n }\n return events;\n }\n\n if (message.type === \"user\") {\n const content = message.message.content;\n if (!Array.isArray(content)) return [];\n return content.flatMap((block) => {\n if (block.type !== \"tool_result\") return [];\n return [\n {\n type: \"tool_result\",\n id: block.tool_use_id,\n content: block.content,\n isError: block.is_error,\n } satisfies HarnessEvent,\n ];\n });\n }\n\n if (message.type === \"tool_use_summary\") {\n return [{ type: \"tool_summary\", summary: message.summary }];\n }\n\n if (message.type === \"result\" && message.subtype !== \"success\") {\n return message.errors.map((err) => ({ type: \"error\", error: err }));\n }\n\n return [];\n}\n\nfunction getTextDelta(event: unknown): string | undefined {\n if (event === null || typeof event !== \"object\") return undefined;\n const raw = event as {\n type?: unknown;\n delta?: { type?: unknown; text?: unknown };\n };\n return raw.type === \"content_block_delta\" &&\n raw.delta?.type === \"text_delta\" &&\n typeof raw.delta.text === \"string\"\n ? raw.delta.text\n : undefined;\n}\n\nfunction getSessionId(message: SDKMessage): string | undefined {\n return \"session_id\" in message && typeof message.session_id === \"string\"\n ? message.session_id\n : undefined;\n}\n\nfunction stringifyInput(input: unknown): string | undefined {\n if (input === undefined) return undefined;\n if (typeof input === \"string\") return input;\n try {\n return JSON.stringify(input);\n } catch {\n return String(input);\n }\n}\n\nfunction mapUsage(value: unknown): HarnessResult[\"usage\"] {\n if (value === null || typeof value !== \"object\") return undefined;\n const usage = value as Record<string, unknown>;\n const inputTokens = numberField(usage, \"input_tokens\");\n const cachedInputTokens = numberField(usage, \"cache_read_input_tokens\");\n const outputTokens = numberField(usage, \"output_tokens\");\n return pruneUndefined({\n inputTokens,\n cachedInputTokens,\n outputTokens,\n totalTokens:\n inputTokens !== undefined || outputTokens !== undefined\n ? (inputTokens ?? 0) + (outputTokens ?? 0)\n : undefined,\n });\n}\n\nfunction numberField(\n record: Record<string, unknown>,\n field: string,\n): number | undefined {\n const value = record[field];\n return typeof value === \"number\" ? value : undefined;\n}\n\nfunction pruneUndefined<T extends Record<string, unknown>>(value: T): T {\n for (const key of Object.keys(value)) {\n if (value[key] === undefined) {\n delete value[key];\n }\n }\n return value;\n}\n","import type {\n HarnessCapabilities,\n HarnessProviderId,\n ProviderMetadata,\n} from \"../types.js\";\n\nconst BASE_CAPABILITIES: Omit<\n HarnessCapabilities,\n | \"reasoningEffort\"\n | \"sessionPersistence\"\n | \"threadResume\"\n | \"interrupt\"\n | \"mcp\"\n | \"skills\"\n | \"usage\"\n | \"cost\"\n | \"contextUsage\"\n | \"structuredOutput\"\n | \"subagents\"\n | \"policy\"\n> = {\n nonInteractive: true,\n streaming: true,\n modelOverride: true,\n modelOptions: false,\n fileRead: true,\n fileWrite: true,\n shell: true,\n};\n\nexport const HARNESS_PROVIDER_METADATA: Record<HarnessProviderId, ProviderMetadata> = {\n claude: {\n id: \"claude\",\n displayName: \"Claude\",\n defaultModel: \"claude-sonnet-4-6\",\n capabilities: {\n ...BASE_CAPABILITIES,\n reasoningEffort: false,\n sessionPersistence: true,\n threadResume: true,\n interrupt: true,\n mcp: true,\n skills: true,\n usage: true,\n cost: true,\n contextUsage: false,\n structuredOutput: false,\n subagents: {\n supported: true,\n programmaticPerRun: true,\n enforcedToolScopes: true,\n },\n policy: {\n sandbox: true,\n strictToolAllowlist: true,\n commandApproval: true,\n toolHook: true,\n },\n },\n },\n codex: {\n id: \"codex\",\n displayName: \"Codex\",\n defaultModel: null,\n capabilities: {\n ...BASE_CAPABILITIES,\n modelOptions: true,\n reasoningEffort: false,\n sessionPersistence: false,\n threadResume: false,\n interrupt: false,\n mcp: false,\n skills: false,\n usage: true,\n cost: false,\n contextUsage: false,\n structuredOutput: true,\n subagents: {\n supported: false,\n programmaticPerRun: false,\n enforcedToolScopes: false,\n },\n policy: {\n sandbox: true,\n strictToolAllowlist: false,\n commandApproval: false,\n toolHook: false,\n },\n },\n },\n cursor: {\n id: \"cursor\",\n displayName: \"Cursor\",\n defaultModel: null,\n capabilities: {\n nonInteractive: false,\n streaming: false,\n modelOverride: false,\n modelOptions: false,\n fileRead: false,\n fileWrite: false,\n shell: false,\n reasoningEffort: false,\n sessionPersistence: false,\n threadResume: false,\n interrupt: false,\n mcp: false,\n skills: false,\n usage: false,\n cost: false,\n contextUsage: false,\n structuredOutput: false,\n subagents: {\n supported: false,\n programmaticPerRun: false,\n enforcedToolScopes: false,\n },\n policy: {\n sandbox: false,\n strictToolAllowlist: false,\n commandApproval: false,\n toolHook: false,\n },\n },\n },\n};\n","import { spawn, spawnSync, type ChildProcess } from \"node:child_process\";\n\nimport type { AgentUsage, HarnessFailure, HarnessResult } from \"../events.js\";\nimport type {\n AgentRunSpec,\n HarnessProvider,\n HarnessRunHooks,\n ProviderStatus,\n} from \"../types.js\";\nimport { HARNESS_PROVIDER_METADATA } from \"./metadata.js\";\n\nexport interface CodexExecRequest {\n command: \"codex\";\n args: string[];\n cwd: string;\n env: NodeJS.ProcessEnv;\n}\n\nexport type CodexCliRunFn = (\n request: CodexExecRequest,\n hooks?: HarnessRunHooks,\n) => Promise<HarnessResult>;\n\nexport interface CodexHarnessProviderDeps {\n commandExists?: (command: string) => boolean;\n runStatus?: (command: string, args: string[]) => Promise<{\n ok: boolean;\n detail: string;\n }>;\n runCli?: CodexCliRunFn;\n}\n\ninterface CodexRunState {\n success: boolean;\n result: string;\n providerSessionId?: string;\n turns?: number;\n usage?: AgentUsage;\n error?: string;\n failure?: HarnessFailure;\n}\n\nexport function createCodexHarnessProvider(\n deps: CodexHarnessProviderDeps = {},\n): HarnessProvider {\n const metadata = HARNESS_PROVIDER_METADATA.codex;\n const commandExists = deps.commandExists ?? defaultCommandExists;\n const runStatus = deps.runStatus ?? defaultRunStatus;\n const runCli = deps.runCli ?? runCodexCli;\n\n return {\n metadata,\n checkStatus: async (): Promise<ProviderStatus> => {\n if (!commandExists(\"codex\")) {\n return {\n id: metadata.id,\n installed: false,\n authenticated: false,\n detail: \"codex not found on PATH\",\n };\n }\n\n const auth = await runStatus(\"codex\", [\"login\", \"status\"]);\n return {\n id: metadata.id,\n installed: true,\n authenticated: auth.ok,\n detail: auth.detail,\n };\n },\n run: async (spec, hooks): Promise<HarnessResult> => {\n if (spec.agents !== undefined && Object.keys(spec.agents).length > 0) {\n return {\n success: false,\n result: \"\",\n error:\n \"Codex exec adapter does not support per-run programmatic agents\",\n failure: {\n provider: \"codex\",\n code: \"codex.unsupported_feature\",\n message:\n \"Codex exec adapter does not support per-run programmatic agents.\",\n fix: \"Run this operation with a provider that supports per-run subagents.\",\n },\n };\n }\n return runCli(buildCodexExecRequest(spec), hooks);\n },\n };\n}\n\nexport const codexHarnessProvider = createCodexHarnessProvider();\n\nexport function buildCodexExecRequest(spec: AgentRunSpec): CodexExecRequest {\n const unsupported = unsupportedCodexSpecFields(spec);\n if (unsupported.length > 0) {\n throw new Error(\n `Codex exec adapter does not support: ${unsupported.join(\", \")}`,\n );\n }\n const args = [\n \"exec\",\n \"--json\",\n \"--sandbox\",\n \"workspace-write\",\n \"--skip-git-repo-check\",\n \"-C\",\n spec.cwd,\n ];\n if (spec.provider.model !== undefined && spec.provider.model.length > 0) {\n args.push(\"--model\", spec.provider.model);\n }\n if (spec.output?.schemaPath !== undefined) {\n args.push(\"--output-schema\", spec.output.schemaPath);\n }\n args.push(combineCodexPrompt(spec));\n return {\n command: \"codex\",\n args,\n cwd: spec.cwd,\n env: {\n ...process.env,\n CODEALMANAC_INTERNAL_SESSION: \"1\",\n },\n };\n}\n\nfunction unsupportedCodexSpecFields(spec: AgentRunSpec): string[] {\n const unsupported: string[] = [];\n if (spec.provider.effort !== undefined) unsupported.push(\"provider.effort\");\n if (spec.skills !== undefined && spec.skills.length > 0) unsupported.push(\"skills\");\n if (spec.mcpServers !== undefined && Object.keys(spec.mcpServers).length > 0) {\n unsupported.push(\"mcpServers\");\n }\n if (spec.limits?.maxCostUsd !== undefined) unsupported.push(\"limits.maxCostUsd\");\n return unsupported;\n}\n\nexport function combineCodexPrompt(spec: AgentRunSpec): string {\n const blocks = [spec.systemPrompt, spec.prompt].filter(\n (block): block is string => block !== undefined && block.trim().length > 0,\n );\n return blocks.join(\"\\n\\n---\\n\\n\");\n}\n\nexport function runCodexCli(\n request: CodexExecRequest,\n hooks?: HarnessRunHooks,\n): Promise<HarnessResult> {\n return new Promise((resolve) => {\n const child = spawn(request.command, request.args, {\n cwd: request.cwd,\n env: request.env,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n let stdoutBuf = \"\";\n let stderr = \"\";\n const state: CodexRunState = {\n success: false,\n result: \"\",\n };\n const eventWrites: Promise<void>[] = [];\n\n const observe = (msg: Record<string, unknown>): void => {\n eventWrites.push(applyCodexJsonlEvent(state, msg, hooks));\n };\n\n const flushLines = (): void => {\n let idx = stdoutBuf.indexOf(\"\\n\");\n while (idx !== -1) {\n const rawLine = stdoutBuf.slice(0, idx);\n stdoutBuf = stdoutBuf.slice(idx + 1);\n const line = rawLine.trim();\n if (line.length > 0) {\n try {\n observe(JSON.parse(line) as Record<string, unknown>);\n } catch {\n // Ignore non-JSON chatter; stderr is captured for failures.\n }\n }\n idx = stdoutBuf.indexOf(\"\\n\");\n }\n };\n\n child.stdout.on(\"data\", (chunk) => {\n stdoutBuf += chunk.toString(\"utf8\");\n flushLines();\n });\n child.stderr.on(\"data\", (chunk) => {\n stderr += chunk.toString(\"utf8\");\n });\n child.on(\"error\", (err: NodeJS.ErrnoException) => {\n resolve({\n success: false,\n result: state.result,\n providerSessionId: state.providerSessionId,\n turns: state.turns,\n usage: state.usage,\n error:\n err.code === \"ENOENT\"\n ? `${request.command} not found on PATH`\n : err.message,\n });\n });\n child.on(\"close\", async (code) => {\n flushLines();\n if (stdoutBuf.trim().length > 0) {\n try {\n observe(JSON.parse(stdoutBuf.trim()) as Record<string, unknown>);\n } catch {\n // Ignore trailing non-JSON.\n }\n }\n await Promise.allSettled(eventWrites);\n\n if (code === 0 && state.success) {\n resolve(toHarnessResult(state));\n return;\n }\n\n const firstStderr = stderr.trim().split(\"\\n\")[0];\n const fallbackError =\n firstStderr !== undefined && firstStderr.length > 0\n ? firstStderr\n : `${request.command} exited ${code ?? 1}`;\n const failure = state.failure ?? classifyCodexFailure(fallbackError);\n resolve({\n ...toHarnessResult(state),\n success: false,\n error: state.error ?? failure.message,\n failure,\n });\n });\n });\n}\n\nexport async function applyCodexJsonlEvent(\n state: CodexRunState,\n input: Record<string, unknown>,\n hooks?: HarnessRunHooks,\n): Promise<void> {\n const msg = unwrapCodexJsonlEvent(input);\n const sessionId = stringField(msg, \"session_id\") ?? stringField(msg, \"thread_id\");\n if (state.providerSessionId === undefined && sessionId !== undefined) {\n state.providerSessionId = sessionId;\n }\n\n if (msg.type === \"item.completed\") {\n const item = objectField(msg, \"item\");\n if (item?.type === \"agent_message\") {\n const text = stringField(item, \"text\");\n if (text !== undefined) {\n state.result = text;\n await hooks?.onEvent?.({ type: \"text\", content: text });\n }\n }\n if (item?.type === \"tool_call\") {\n await emitToolUse(item, hooks);\n }\n return;\n }\n\n if (msg.type === \"turn.completed\") {\n state.success = true;\n state.turns = 1;\n state.usage = parseCodexUsage(msg.usage);\n await hooks?.onEvent?.({\n type: \"done\",\n result: state.result,\n providerSessionId: state.providerSessionId,\n turns: state.turns,\n usage: state.usage,\n });\n return;\n }\n\n if (msg.type === \"turn.failed\" || msg.type === \"error\") {\n state.success = false;\n const raw =\n stringField(msg, \"message\") ??\n stringField(msg, \"error\") ??\n \"codex turn failed\";\n const failure = classifyCodexFailure(raw);\n state.error = failure.message;\n state.failure = failure;\n await hooks?.onEvent?.({\n type: \"error\",\n error: state.error,\n failure,\n });\n }\n}\n\nfunction toHarnessResult(state: CodexRunState): HarnessResult {\n return {\n success: state.success,\n result: state.result,\n providerSessionId: state.providerSessionId,\n turns: state.turns,\n usage: state.usage,\n error: state.error,\n failure: state.failure,\n };\n}\n\nfunction unwrapCodexJsonlEvent(\n input: Record<string, unknown>,\n): Record<string, unknown> {\n const msg = objectField(input, \"msg\");\n return msg ?? input;\n}\n\nfunction classifyCodexFailure(raw: string): HarnessFailure {\n const detail = extractJsonDetail(raw);\n const text = detail ?? raw;\n const statusCode = extractStatusCode(raw);\n const model =\n matchFirst(text, /The '([^']+)' model requires a newer version of Codex/) ??\n matchFirst(text, /The '([^']+)' model is not supported/);\n\n if (text.includes(\"requires a newer version of Codex\") && model !== undefined) {\n return {\n provider: \"codex\",\n code: \"codex.model_requires_newer_cli\",\n message: `Codex model ${model} requires a newer Codex CLI.`,\n fix: \"Upgrade Codex, or run with --using codex/<supported-model>.\",\n raw,\n details: codexFailureDetails({ model, statusCode }),\n };\n }\n\n if (text.includes(\"model is not supported\") && model !== undefined) {\n return {\n provider: \"codex\",\n code: \"codex.model_unavailable\",\n message: `Codex model ${model} is not available for this account.`,\n fix: \"Choose a supported model with --using codex/<model>, or update the configured Codex model.\",\n raw,\n details: codexFailureDetails({ model, statusCode }),\n };\n }\n\n if (text.includes(\"401 Unauthorized\") || text.includes(\"Unauthorized\")) {\n return {\n provider: \"codex\",\n code: \"codex.not_authenticated\",\n message: \"Codex is not authenticated in this environment.\",\n fix: \"Run `codex login` in the same environment, or make the existing Codex auth available to this process.\",\n raw,\n details: codexFailureDetails({ statusCode: statusCode ?? 401 }),\n };\n }\n\n if (text.includes(\"not found on PATH\")) {\n return {\n provider: \"codex\",\n code: \"codex.not_installed\",\n message: \"Codex was not found on PATH.\",\n fix: \"Install Codex or update PATH so the `codex` command is available.\",\n raw,\n };\n }\n\n return {\n provider: \"codex\",\n code: \"codex.process_failed\",\n message: text,\n raw,\n details: codexFailureDetails({ statusCode }),\n };\n}\n\nfunction codexFailureDetails(\n details: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n const pruned = pruneUndefined(details);\n return Object.keys(pruned).length > 0 ? pruned : undefined;\n}\n\nfunction extractJsonDetail(raw: string): string | undefined {\n const start = raw.indexOf(\"{\");\n const end = raw.lastIndexOf(\"}\");\n if (start === -1 || end <= start) return undefined;\n try {\n const parsed = JSON.parse(raw.slice(start, end + 1)) as unknown;\n if (parsed !== null && typeof parsed === \"object\") {\n const detail = (parsed as Record<string, unknown>).detail;\n return typeof detail === \"string\" && detail.length > 0 ? detail : undefined;\n }\n } catch {\n return undefined;\n }\n return undefined;\n}\n\nfunction extractStatusCode(raw: string): number | undefined {\n const match = raw.match(/status\\s+(\\d{3})|(\\d{3})\\s+(?:Bad Request|Unauthorized)/);\n if (match === null) return undefined;\n const value = match[1] ?? match[2];\n return value !== undefined ? Number.parseInt(value, 10) : undefined;\n}\n\nfunction matchFirst(text: string, pattern: RegExp): string | undefined {\n const match = text.match(pattern);\n return match?.[1];\n}\n\nasync function emitToolUse(\n item: Record<string, unknown>,\n hooks: HarnessRunHooks | undefined,\n): Promise<void> {\n const tool = stringField(item, \"name\") ?? stringField(item, \"tool_name\");\n if (tool === undefined) return;\n await hooks?.onEvent?.({\n type: \"tool_use\",\n id: stringField(item, \"id\"),\n tool,\n input: stringifyInput(item.input ?? item.arguments),\n });\n}\n\nexport function parseCodexUsage(value: unknown): AgentUsage | undefined {\n if (value === null || typeof value !== \"object\") return undefined;\n const obj = value as Record<string, unknown>;\n const inputTokens =\n numberField(obj, \"input_tokens\") ?? numberField(obj, \"inputTokens\");\n const cachedInputTokens =\n numberField(obj, \"cached_input_tokens\") ??\n numberField(obj, \"cachedInputTokens\") ??\n numberField(obj, \"cacheReadTokens\");\n const outputTokens =\n numberField(obj, \"output_tokens\") ?? numberField(obj, \"outputTokens\");\n const reasoningOutputTokens =\n numberField(obj, \"reasoning_output_tokens\") ??\n numberField(obj, \"reasoningOutputTokens\");\n return pruneUndefined({\n inputTokens,\n cachedInputTokens,\n outputTokens,\n reasoningOutputTokens,\n totalTokens:\n inputTokens !== undefined || outputTokens !== undefined\n ? (inputTokens ?? 0) + (outputTokens ?? 0)\n : undefined,\n });\n}\n\nfunction objectField(\n record: Record<string, unknown>,\n field: string,\n): Record<string, unknown> | undefined {\n const value = record[field];\n return value !== null && typeof value === \"object\"\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nfunction stringField(\n record: Record<string, unknown>,\n field: string,\n): string | undefined {\n const value = record[field];\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction numberField(\n record: Record<string, unknown>,\n field: string,\n): number | undefined {\n const value = record[field];\n return typeof value === \"number\" ? value : undefined;\n}\n\nfunction stringifyInput(input: unknown): string | undefined {\n if (input === undefined) return undefined;\n if (typeof input === \"string\") return input;\n try {\n return JSON.stringify(input);\n } catch {\n return String(input);\n }\n}\n\nfunction pruneUndefined<T extends Record<string, unknown>>(value: T): T {\n for (const key of Object.keys(value)) {\n if (value[key] === undefined) {\n delete value[key];\n }\n }\n return value;\n}\n\nfunction defaultCommandExists(command: string): boolean {\n const result = spawnSync(\"sh\", [\"-lc\", `command -v ${command}`], {\n encoding: \"utf8\",\n });\n return result.status === 0 && result.stdout.trim().length > 0;\n}\n\nfunction defaultRunStatus(\n command: string,\n args: string[],\n): Promise<{ ok: boolean; detail: string }> {\n return new Promise((resolve) => {\n let child: ChildProcess;\n let stdout = \"\";\n let stderr = \"\";\n try {\n child = spawn(command, args, { stdio: [\"ignore\", \"pipe\", \"pipe\"] });\n } catch (err: unknown) {\n resolve({\n ok: false,\n detail: err instanceof Error ? err.message : String(err),\n });\n return;\n }\n\n child.stdout?.on(\"data\", (chunk) => {\n stdout += chunk.toString(\"utf8\");\n });\n child.stderr?.on(\"data\", (chunk) => {\n stderr += chunk.toString(\"utf8\");\n });\n child.on(\"error\", (err) => {\n resolve({ ok: false, detail: err.message });\n });\n child.on(\"close\", (code) => {\n const text = `${stdout}\\n${stderr}`.trim();\n resolve({\n ok: code === 0,\n detail:\n text\n .split(\"\\n\")\n .find((line) => line.trim().length > 0)\n ?.trim() ?? (code === 0 ? \"ready\" : `${command} exited ${code ?? 1}`),\n });\n });\n });\n}\n","import type {\n AgentRunSpec,\n HarnessProvider,\n ProviderMetadata,\n ProviderStatus,\n} from \"../types.js\";\n\nexport function createNotImplementedProvider(\n metadata: ProviderMetadata,\n): HarnessProvider {\n return {\n metadata,\n checkStatus: async (): Promise<ProviderStatus> => ({\n id: metadata.id,\n installed: false,\n authenticated: false,\n detail: `${metadata.displayName} harness adapter is not implemented yet`,\n }),\n run: async (spec: AgentRunSpec) => ({\n success: false,\n result: \"\",\n error:\n `${metadata.displayName} harness adapter is not implemented yet ` +\n `for ${spec.metadata?.operation ?? \"unknown\"} runs`,\n }),\n };\n}\n","import type { HarnessProvider } from \"../types.js\";\nimport { HARNESS_PROVIDER_METADATA } from \"./metadata.js\";\nimport { createNotImplementedProvider } from \"./not-implemented.js\";\n\nexport const cursorHarnessProvider: HarnessProvider = createNotImplementedProvider(\n HARNESS_PROVIDER_METADATA.cursor,\n);\n","import type { HarnessProvider, HarnessProviderId } from \"../types.js\";\nimport { claudeHarnessProvider } from \"./claude.js\";\nimport { codexHarnessProvider } from \"./codex.js\";\nimport { cursorHarnessProvider } from \"./cursor.js\";\nimport { HARNESS_PROVIDER_METADATA } from \"./metadata.js\";\n\nconst HARNESS_PROVIDERS = {\n claude: claudeHarnessProvider,\n codex: codexHarnessProvider,\n cursor: cursorHarnessProvider,\n} satisfies Record<HarnessProviderId, HarnessProvider>;\n\nexport function getHarnessProvider(id: HarnessProviderId): HarnessProvider {\n return HARNESS_PROVIDERS[id];\n}\n\nexport function listHarnessProviders(): HarnessProvider[] {\n return Object.values(HARNESS_PROVIDERS);\n}\n\nexport { HARNESS_PROVIDER_METADATA };\n","import { existsSync } from \"node:fs\";\nimport { mkdir, readFile, readdir, rename, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\n\nimport type { AgentRunSpec } from \"../harness/types.js\";\nimport type { HarnessFailure } from \"../harness/events.js\";\nimport { getRepoAlmanacDir } from \"../paths.js\";\nimport type { RunRecord, RunStatus, RunSummary, RunView } from \"./types.js\";\n\nexport function runsDir(repoRoot: string): string {\n return join(getRepoAlmanacDir(repoRoot), \"runs\");\n}\n\nexport function runRecordPath(repoRoot: string, runId: string): string {\n return join(runsDir(repoRoot), `${runId}.json`);\n}\n\nexport function runLogPath(repoRoot: string, runId: string): string {\n return join(runsDir(repoRoot), `${runId}.jsonl`);\n}\n\nexport function runCancelPath(repoRoot: string, runId: string): string {\n return join(runsDir(repoRoot), `${runId}.cancel`);\n}\n\nexport async function markRunCancelled(\n repoRoot: string,\n runId: string,\n): Promise<void> {\n const path = runCancelPath(repoRoot, runId);\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, \"cancelled\\n\", \"utf8\");\n}\n\nexport function isRunCancellationRequested(\n repoRoot: string,\n runId: string,\n): boolean {\n return existsSync(runCancelPath(repoRoot, runId));\n}\n\nexport async function writeRunRecord(\n path: string,\n record: RunRecord,\n): Promise<void> {\n await mkdir(dirname(path), { recursive: true });\n const tmp = `${path}.tmp-${process.pid}`;\n await writeFile(tmp, `${JSON.stringify(record, null, 2)}\\n`, \"utf8\");\n await rename(tmp, path);\n}\n\nexport function buildStartedRunRecord(args: {\n runId: string;\n repoRoot: string;\n spec: AgentRunSpec;\n startedAt: Date;\n pid?: number;\n}): RunRecord {\n return {\n version: 1,\n id: args.runId,\n operation: args.spec.metadata?.operation ?? \"absorb\",\n status: \"running\",\n repoRoot: args.repoRoot,\n pid: args.pid ?? process.pid,\n provider: args.spec.provider.id,\n model: args.spec.provider.model,\n startedAt: args.startedAt.toISOString(),\n logPath: runLogPath(args.repoRoot, args.runId),\n targetKind: args.spec.metadata?.targetKind,\n targetPaths: args.spec.metadata?.targetPaths,\n };\n}\n\nexport function buildQueuedRunRecord(args: {\n runId: string;\n repoRoot: string;\n spec: AgentRunSpec;\n queuedAt: Date;\n}): RunRecord {\n return {\n ...buildStartedRunRecord({\n runId: args.runId,\n repoRoot: args.repoRoot,\n spec: args.spec,\n startedAt: args.queuedAt,\n pid: 0,\n }),\n status: \"queued\",\n };\n}\n\nexport function finishRunRecord(args: {\n record: RunRecord;\n status: Extract<RunStatus, \"done\" | \"failed\" | \"cancelled\">;\n finishedAt: Date;\n providerSessionId?: string;\n summary?: RunSummary;\n error?: string;\n failure?: HarnessFailure;\n}): RunRecord {\n const started = Date.parse(args.record.startedAt);\n const finished = args.finishedAt.getTime();\n return {\n ...args.record,\n status: args.status,\n providerSessionId: args.providerSessionId ?? args.record.providerSessionId,\n finishedAt: args.finishedAt.toISOString(),\n durationMs: Number.isFinite(started)\n ? Math.max(0, finished - started)\n : undefined,\n summary: args.summary,\n error: args.error,\n failure: args.failure,\n };\n}\n\nexport async function readRunRecord(path: string): Promise<RunRecord | null> {\n try {\n const parsed = JSON.parse(await readFile(path, \"utf8\")) as unknown;\n return isRunRecord(parsed) ? parsed : null;\n } catch {\n return null;\n }\n}\n\nexport async function listRunRecords(repoRoot: string): Promise<RunRecord[]> {\n const dir = runsDir(repoRoot);\n if (!existsSync(dir)) return [];\n let entries: string[];\n try {\n entries = await readdir(dir);\n } catch {\n return [];\n }\n const records: RunRecord[] = [];\n for (const entry of entries) {\n if (!entry.startsWith(\"run_\") || !entry.endsWith(\".json\")) continue;\n const record = await readRunRecord(join(dir, entry));\n if (record !== null) records.push(record);\n }\n return records.sort((a, b) => b.startedAt.localeCompare(a.startedAt));\n}\n\nexport function toRunView(args: {\n record: RunRecord;\n now: Date;\n isPidAlive: (pid: number) => boolean;\n}): RunView {\n const started = Date.parse(args.record.startedAt);\n const finished =\n args.record.finishedAt !== undefined\n ? Date.parse(args.record.finishedAt)\n : undefined;\n const elapsedMs =\n args.record.durationMs ??\n (Number.isFinite(started)\n ? Math.max(0, (finished ?? args.now.getTime()) - started)\n : 0);\n const displayStatus =\n args.record.status === \"running\" && !args.isPidAlive(args.record.pid)\n ? \"stale\"\n : args.record.status;\n return {\n ...args.record,\n displayStatus,\n elapsedMs,\n error:\n displayStatus === \"stale\"\n ? \"process ended without a final status\"\n : args.record.error,\n };\n}\n\nexport function isRunRecord(value: unknown): value is RunRecord {\n if (value === null || typeof value !== \"object\") return false;\n const v = value as Partial<RunRecord>;\n return (\n v.version === 1 &&\n typeof v.id === \"string\" &&\n v.id.startsWith(\"run_\") &&\n (v.operation === \"build\" || v.operation === \"absorb\" || v.operation === \"garden\") &&\n (v.status === \"queued\" ||\n v.status === \"running\" ||\n v.status === \"done\" ||\n v.status === \"failed\" ||\n v.status === \"cancelled\") &&\n typeof v.repoRoot === \"string\" &&\n typeof v.pid === \"number\" &&\n (v.provider === \"claude\" || v.provider === \"codex\" || v.provider === \"cursor\") &&\n typeof v.startedAt === \"string\" &&\n typeof v.logPath === \"string\"\n );\n}\n","import { createHash } from \"node:crypto\";\nimport { existsSync, statSync } from \"node:fs\";\nimport { readFile, readdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nimport { parseFrontmatter } from \"../indexer/frontmatter.js\";\n\nexport interface PageSnapshotEntry {\n slug: string;\n hash: string;\n archived: boolean;\n}\n\nexport type PageSnapshot = Map<string, PageSnapshotEntry>;\n\nexport interface PageSnapshotDelta {\n created: number;\n updated: number;\n archived: number;\n deleted: number;\n}\n\nexport async function snapshotPages(pagesDir: string): Promise<PageSnapshot> {\n const out: PageSnapshot = new Map();\n if (!existsSync(pagesDir)) return out;\n\n let entries: string[];\n try {\n entries = await readdir(pagesDir);\n } catch {\n return out;\n }\n\n for (const entry of entries) {\n if (!entry.endsWith(\".md\")) continue;\n const slug = entry.slice(0, -3);\n const full = join(pagesDir, entry);\n try {\n const st = statSync(full);\n if (!st.isFile()) continue;\n const content = await readFile(full, \"utf8\");\n out.set(slug, {\n slug,\n hash: createHash(\"sha256\").update(content).digest(\"hex\"),\n archived: parseFrontmatter(content).archived_at !== null,\n });\n } catch {\n continue;\n }\n }\n\n return out;\n}\n\nexport function diffPageSnapshots(\n before: PageSnapshot,\n after: PageSnapshot,\n): PageSnapshotDelta {\n let created = 0;\n let updated = 0;\n let archived = 0;\n let deleted = 0;\n\n for (const [slug, entry] of after) {\n const prev = before.get(slug);\n if (prev === undefined) {\n created += 1;\n continue;\n }\n if (prev.hash === entry.hash) continue;\n if (!prev.archived && entry.archived) {\n archived += 1;\n } else {\n updated += 1;\n }\n }\n\n for (const slug of before.keys()) {\n if (!after.has(slug)) deleted += 1;\n }\n\n return { created, updated, archived, deleted };\n}\n\nexport function isNoopPageDelta(delta: PageSnapshotDelta): boolean {\n return (\n delta.created === 0 &&\n delta.updated === 0 &&\n delta.archived === 0 &&\n delta.deleted === 0\n );\n}\n","import { mkdir, readFile, rename, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\n\nimport type {\n AgentRunSpec,\n HarnessProviderId,\n OperationKind,\n} from \"../harness/types.js\";\nimport { runsDir } from \"./records.js\";\n\nexport function runSpecPath(repoRoot: string, runId: string): string {\n return join(runsDir(repoRoot), `${runId}.spec.json`);\n}\n\nexport async function writeRunSpec(\n repoRoot: string,\n runId: string,\n spec: AgentRunSpec,\n): Promise<void> {\n const path = runSpecPath(repoRoot, runId);\n await mkdir(dirname(path), { recursive: true });\n const tmp = `${path}.tmp-${process.pid}`;\n await writeFile(tmp, `${JSON.stringify(spec, null, 2)}\\n`, \"utf8\");\n await rename(tmp, path);\n}\n\nexport async function readRunSpec(\n repoRoot: string,\n runId: string,\n): Promise<AgentRunSpec> {\n const parsed = JSON.parse(\n await readFile(runSpecPath(repoRoot, runId), \"utf8\"),\n ) as unknown;\n if (!isAgentRunSpec(parsed)) {\n throw new Error(`invalid run spec for ${runId}`);\n }\n return parsed;\n}\n\nfunction isAgentRunSpec(value: unknown): value is AgentRunSpec {\n if (value === null || typeof value !== \"object\") return false;\n const spec = value as Partial<AgentRunSpec>;\n return (\n spec.provider !== undefined &&\n typeof spec.provider === \"object\" &&\n spec.provider !== null &&\n isProviderId((spec.provider as { id?: unknown }).id) &&\n typeof spec.cwd === \"string\" &&\n typeof spec.prompt === \"string\" &&\n (spec.metadata === undefined ||\n (typeof spec.metadata === \"object\" &&\n spec.metadata !== null &&\n ((spec.metadata as { operation?: unknown }).operation === undefined ||\n isOperationKind((spec.metadata as { operation?: unknown }).operation))))\n );\n}\n\nfunction isProviderId(value: unknown): value is HarnessProviderId {\n return value === \"claude\" || value === \"codex\" || value === \"cursor\";\n}\n\nfunction isOperationKind(value: unknown): value is OperationKind {\n return value === \"build\" || value === \"absorb\" || value === \"garden\";\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,mBAAmB;AAErB,SAAS,YAAY,MAAY,oBAAI,KAAK,GAAW;AAC1D,QAAM,QAAQ,IACX,YAAY,EACZ,QAAQ,OAAO,EAAE,EACjB,MAAM,GAAG,EAAE;AACd,QAAM,SAAS,YAAY,CAAC,EAAE,SAAS,KAAK;AAC5C,SAAO,OAAO,KAAK,IAAI,MAAM;AAC/B;;;ACTA,SAAS,SAAAA,cAAa;;;ACAtB,SAAS,OAAO,WAAW,kBAAkB;AAC7C,SAAS,eAAe;AASxB,eAAsB,iBAAiB,MAA6B;AAClE,QAAM,MAAM,QAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AAC9C,QAAM,UAAU,MAAM,IAAI,MAAM;AAClC;AAEA,eAAsB,eACpB,MACA,OACA,MAAY,oBAAI,KAAK,GACN;AACf,QAAM,QAAqB;AAAA,IACzB,WAAW,IAAI,YAAY;AAAA,IAC3B;AAAA,EACF;AACA,QAAM,WAAW,MAAM,GAAG,KAAK,UAAU,KAAK,CAAC;AAAA,GAAM,MAAM;AAC7D;;;ACzBA,SAAS,QAAAC,aAAY;;;ACArB;AAAA,EACE;AAAA,OAIK;;;ACCP,IAAM,oBAcF;AAAA,EACF,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,eAAe;AAAA,EACf,cAAc;AAAA,EACd,UAAU;AAAA,EACV,WAAW;AAAA,EACX,OAAO;AACT;AAEO,IAAM,4BAAyE;AAAA,EACpF,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,aAAa;AAAA,IACb,cAAc;AAAA,IACd,cAAc;AAAA,MACZ,GAAG;AAAA,MACH,iBAAiB;AAAA,MACjB,oBAAoB;AAAA,MACpB,cAAc;AAAA,MACd,WAAW;AAAA,MACX,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,kBAAkB;AAAA,MAClB,WAAW;AAAA,QACT,WAAW;AAAA,QACX,oBAAoB;AAAA,QACpB,oBAAoB;AAAA,MACtB;AAAA,MACA,QAAQ;AAAA,QACN,SAAS;AAAA,QACT,qBAAqB;AAAA,QACrB,iBAAiB;AAAA,QACjB,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,aAAa;AAAA,IACb,cAAc;AAAA,IACd,cAAc;AAAA,MACZ,GAAG;AAAA,MACH,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,oBAAoB;AAAA,MACpB,cAAc;AAAA,MACd,WAAW;AAAA,MACX,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,kBAAkB;AAAA,MAClB,WAAW;AAAA,QACT,WAAW;AAAA,QACX,oBAAoB;AAAA,QACpB,oBAAoB;AAAA,MACtB;AAAA,MACA,QAAQ;AAAA,QACN,SAAS;AAAA,QACT,qBAAqB;AAAA,QACrB,iBAAiB;AAAA,QACjB,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,aAAa;AAAA,IACb,cAAc;AAAA,IACd,cAAc;AAAA,MACZ,gBAAgB;AAAA,MAChB,WAAW;AAAA,MACX,eAAe;AAAA,MACf,cAAc;AAAA,MACd,UAAU;AAAA,MACV,WAAW;AAAA,MACX,OAAO;AAAA,MACP,iBAAiB;AAAA,MACjB,oBAAoB;AAAA,MACpB,cAAc;AAAA,MACd,WAAW;AAAA,MACX,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,kBAAkB;AAAA,MAClB,WAAW;AAAA,QACT,WAAW;AAAA,QACX,oBAAoB;AAAA,QACpB,oBAAoB;AAAA,MACtB;AAAA,MACA,QAAQ;AAAA,QACN,SAAS;AAAA,QACT,qBAAqB;AAAA,QACrB,iBAAiB;AAAA,QACjB,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACF;;;AD1FO,SAAS,4BACd,OAAkC,CAAC,GAClB;AACjB,QAAM,UAAU,KAAK,SAAS;AAC9B,QAAM,cAAc,KAAK,cAAc,MAAM,gBAAgB;AAC7D,QAAM,oBAAoB,KAAK,qBAAqB;AACpD,QAAM,WAAW,0BAA0B;AAE3C,SAAO;AAAA,IACL;AAAA,IACA,aAAa,YAAqC;AAChD,UAAI,OAAyB,EAAE,UAAU,MAAM;AAC/C,UAAI;AACF,eAAO,MAAM,YAAY;AAAA,MAC3B,QAAQ;AACN,eAAO,EAAE,UAAU,MAAM;AAAA,MAC3B;AACA,YAAM,YACJ,QAAQ,IAAI,sBAAsB,UAClC,QAAQ,IAAI,kBAAkB,SAAS;AACzC,YAAM,YAAY,kBAAkB,MAAM;AAC1C,YAAM,gBAAgB,KAAK,YAAY;AACvC,YAAM,SAAS,gBACX,KAAK,UAAU,YAAY,0BAA0B,eACrD,YACE,kBACA;AACN,aAAO,EAAE,IAAI,SAAS,IAAI,WAAW,eAAe,OAAO;AAAA,IAC7D;AAAA,IACA,KAAK,OAAO,MAAM,UAChB,iBAAiB,MAAM,OAAO,SAAS,iBAAiB;AAAA,EAC5D;AACF;AAEO,IAAM,wBAAwB,4BAA4B;AAEjE,eAAe,iBACb,MACA,OACA,SACA,mBACwB;AACxB,QAAM,UAAU,mBAAmB,MAAM,iBAAiB;AAC1D,QAAM,SAAS,QAAQ;AAAA,IACrB,QAAQ,KAAK;AAAA,IACb;AAAA,EACF,CAAC;AAED,MAAI;AACJ,MAAI;AACJ,MAAI,SAAS;AACb,MAAI;AACJ,MAAI,UAAU;AACd,MAAI;AACJ,MAAI;AACJ,MAAI;AAEJ,MAAI;AACF,qBAAiB,WAAW,QAAQ;AAClC,0BAAoB,qBAAqB,aAAa,OAAO;AAC7D,iBAAW,SAAS,gBAAgB,OAAO,GAAG;AAC5C,cAAM,OAAO,UAAU,KAAK;AAAA,MAC9B;AAEA,UAAI,QAAQ,SAAS,UAAU;AAC7B,kBAAU,QAAQ;AAClB,gBAAQ,QAAQ;AAChB,gBAAQ,SAAS,QAAQ,KAAK;AAC9B,4BAAoB,qBAAqB,QAAQ;AACjD,YAAI,QAAQ,YAAY,WAAW;AACjC,oBAAU;AACV,mBAAS,QAAQ;AAAA,QACnB,OAAO;AACL,oBAAU;AACV,kBACE,QAAQ,OAAO,SAAS,IACpB,QAAQ,OAAO,KAAK,IAAI,IACxB,gBAAgB,QAAQ,OAAO;AACrC,oBAAU,sBAAsB,OAAO,QAAQ,OAAO;AAAA,QACxD;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,KAAc;AACrB,cAAU;AACV,YAAQ,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AACvD,cAAU,sBAAsB,KAAK;AACrC,UAAM,OAAO,UAAU,EAAE,MAAM,SAAS,OAAO,QAAQ,CAAC;AAAA,EAC1D;AAEA,QAAM,OAAO,UAAU;AAAA,IACrB,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,sBACP,KACA,SACgB;AAChB,MAAI,IAAI,SAAS,eAAe,KAAK,IAAI,SAAS,gBAAgB,GAAG;AACnE,WAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,MACT,KAAK;AAAA,MACL;AAAA,MACA,SAAS,YAAY,SAAY,EAAE,QAAQ,IAAI;AAAA,IACjD;AAAA,EACF;AAEA,MAAI,YAAY,wBAAwB;AACtC,WAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,MACT,KAAK;AAAA,MACL;AAAA,MACA,SAAS,EAAE,QAAQ;AAAA,IACrB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,UAAU;AAAA,IACV,MAAM,YAAY,SAAY,UAAU,OAAO,KAAK;AAAA,IACpD,SAAS;AAAA,IACT;AAAA,IACA,SAAS,YAAY,SAAY,EAAE,QAAQ,IAAI;AAAA,EACjD;AACF;AAEA,SAAS,mBACP,MACA,mBACe;AACf,QAAM,QAAQ,cAAc,KAAK,SAAS,CAAC,CAAC;AAC5C,QAAM,SAAS,eAAe,KAAK,UAAU,CAAC,CAAC;AAC/C,MAAI,OAAO,KAAK,MAAM,EAAE,SAAS,KAAK,CAAC,MAAM,SAAS,OAAO,GAAG;AAC9D,UAAM,KAAK,OAAO;AAAA,EACpB;AAEA,QAAM,mBAAmB,kBAAkB;AAC3C,SAAO,eAAe;AAAA,IACpB,cAAc,KAAK;AAAA,IACnB,KAAK,KAAK;AAAA,IACV,OAAO,KAAK,SAAS,SAAS,0BAA0B,OAAO,gBAAgB;AAAA,IAC/E,QAAQ,eAAe,KAAK,SAAS,MAAM;AAAA,IAC3C;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA,YAAY,KAAK;AAAA,IACjB,UAAU,KAAK,QAAQ,YAAY;AAAA,IACnC,cAAc,KAAK,QAAQ;AAAA,IAC3B,gBAAgB;AAAA,IAChB,wBAAwB;AAAA,IACxB,KAAK;AAAA,MACH,GAAG,QAAQ;AAAA,MACX,8BAA8B;AAAA,IAChC;AAAA,IACA,GAAI,qBAAqB,SACrB,EAAE,4BAA4B,iBAAiB,IAC/C,CAAC;AAAA,EACP,CAAC;AACH;AAEA,SAAS,eACP,QACiC;AACjC,QAAM,MAAuC,CAAC;AAC9C,aAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AAClD,QAAI,IAAI,IAAI,eAAe;AAAA,MACzB,aAAa,MAAM;AAAA,MACnB,QAAQ,MAAM;AAAA,MACd,OAAO,MAAM,UAAU,SAAY,cAAc,MAAM,KAAK,IAAI;AAAA,MAChE,OAAO,MAAM;AAAA,MACb,UAAU,MAAM;AAAA,MAChB,YAAY,MAAM;AAAA,MAClB,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEA,SAAS,cAAc,OAAyC;AAC9D,QAAM,MAAM,oBAAI,IAAY;AAC5B,aAAW,QAAQ,OAAO;AACxB,YAAQ,KAAK,IAAI;AAAA,MACf,KAAK;AACH,YAAI,IAAI,MAAM;AACd;AAAA,MACF,KAAK;AACH,YAAI,IAAI,OAAO;AACf;AAAA,MACF,KAAK;AACH,YAAI,IAAI,MAAM;AACd;AAAA,MACF,KAAK;AACH,YAAI,IAAI,MAAM;AACd,YAAI,IAAI,MAAM;AACd;AAAA,MACF,KAAK;AACH,YAAI,IAAI,MAAM;AACd;AAAA,MACF,KAAK;AACH,YAAI,IAAI,WAAW;AACnB,YAAI,IAAI,UAAU;AAClB;AAAA,MACF,KAAK;AACH;AAAA,IACJ;AAAA,EACF;AACA,SAAO,CAAC,GAAG,GAAG;AAChB;AAEA,SAAS,eAAe,QAAqD;AAC3E,MACE,WAAW,SACX,WAAW,YACX,WAAW,UACX,WAAW,OACX;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB,SAAqC;AAC5D,MAAI,QAAQ,SAAS,gBAAgB;AACnC,UAAM,OAAO,aAAa,QAAQ,KAAK;AACvC,WAAO,SAAS,SAAY,CAAC,EAAE,MAAM,cAAc,SAAS,KAAK,CAAC,IAAI,CAAC;AAAA,EACzE;AAEA,MAAI,QAAQ,SAAS,aAAa;AAChC,UAAM,UAAU,QAAQ,QAAQ;AAChC,QAAI,CAAC,MAAM,QAAQ,OAAO,EAAG,QAAO,CAAC;AACrC,UAAM,SAAyB,CAAC;AAChC,eAAW,SAAS,SAAS;AAC3B,UAAI,MAAM,SAAS,QAAQ;AACzB,eAAO,KAAK,EAAE,MAAM,QAAQ,SAAS,MAAM,KAAK,CAAC;AACjD;AAAA,MACF;AACA,UAAI,MAAM,SAAS,YAAY;AAC7B,eAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,IAAI,MAAM;AAAA,UACV,MAAM,MAAM;AAAA,UACZ,OAAO,eAAe,MAAM,KAAK;AAAA,QACnC,CAAC;AAAA,MACH;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,SAAS,QAAQ;AAC3B,UAAM,UAAU,QAAQ,QAAQ;AAChC,QAAI,CAAC,MAAM,QAAQ,OAAO,EAAG,QAAO,CAAC;AACrC,WAAO,QAAQ,QAAQ,CAAC,UAAU;AAChC,UAAI,MAAM,SAAS,cAAe,QAAO,CAAC;AAC1C,aAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,IAAI,MAAM;AAAA,UACV,SAAS,MAAM;AAAA,UACf,SAAS,MAAM;AAAA,QACjB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,QAAQ,SAAS,oBAAoB;AACvC,WAAO,CAAC,EAAE,MAAM,gBAAgB,SAAS,QAAQ,QAAQ,CAAC;AAAA,EAC5D;AAEA,MAAI,QAAQ,SAAS,YAAY,QAAQ,YAAY,WAAW;AAC9D,WAAO,QAAQ,OAAO,IAAI,CAAC,SAAS,EAAE,MAAM,SAAS,OAAO,IAAI,EAAE;AAAA,EACpE;AAEA,SAAO,CAAC;AACV;AAEA,SAAS,aAAa,OAAoC;AACxD,MAAI,UAAU,QAAQ,OAAO,UAAU,SAAU,QAAO;AACxD,QAAM,MAAM;AAIZ,SAAO,IAAI,SAAS,yBAClB,IAAI,OAAO,SAAS,gBACpB,OAAO,IAAI,MAAM,SAAS,WACxB,IAAI,MAAM,OACV;AACN;AAEA,SAAS,aAAa,SAAyC;AAC7D,SAAO,gBAAgB,WAAW,OAAO,QAAQ,eAAe,WAC5D,QAAQ,aACR;AACN;AAEA,SAAS,eAAe,OAAoC;AAC1D,MAAI,UAAU,OAAW,QAAO;AAChC,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI;AACF,WAAO,KAAK,UAAU,KAAK;AAAA,EAC7B,QAAQ;AACN,WAAO,OAAO,KAAK;AAAA,EACrB;AACF;AAEA,SAAS,SAAS,OAAwC;AACxD,MAAI,UAAU,QAAQ,OAAO,UAAU,SAAU,QAAO;AACxD,QAAM,QAAQ;AACd,QAAM,cAAc,YAAY,OAAO,cAAc;AACrD,QAAM,oBAAoB,YAAY,OAAO,yBAAyB;AACtE,QAAM,eAAe,YAAY,OAAO,eAAe;AACvD,SAAO,eAAe;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA,aACE,gBAAgB,UAAa,iBAAiB,UACzC,eAAe,MAAM,gBAAgB,KACtC;AAAA,EACR,CAAC;AACH;AAEA,SAAS,YACP,QACA,OACoB;AACpB,QAAM,QAAQ,OAAO,KAAK;AAC1B,SAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAAS,eAAkD,OAAa;AACtE,aAAW,OAAO,OAAO,KAAK,KAAK,GAAG;AACpC,QAAI,MAAM,GAAG,MAAM,QAAW;AAC5B,aAAO,MAAM,GAAG;AAAA,IAClB;AAAA,EACF;AACA,SAAO;AACT;;;AExYA,SAAS,OAAO,iBAAoC;AA0C7C,SAAS,2BACd,OAAiC,CAAC,GACjB;AACjB,QAAM,WAAW,0BAA0B;AAC3C,QAAM,gBAAgB,KAAK,iBAAiB;AAC5C,QAAM,YAAY,KAAK,aAAa;AACpC,QAAM,SAAS,KAAK,UAAU;AAE9B,SAAO;AAAA,IACL;AAAA,IACA,aAAa,YAAqC;AAChD,UAAI,CAAC,cAAc,OAAO,GAAG;AAC3B,eAAO;AAAA,UACL,IAAI,SAAS;AAAA,UACb,WAAW;AAAA,UACX,eAAe;AAAA,UACf,QAAQ;AAAA,QACV;AAAA,MACF;AAEA,YAAM,OAAO,MAAM,UAAU,SAAS,CAAC,SAAS,QAAQ,CAAC;AACzD,aAAO;AAAA,QACL,IAAI,SAAS;AAAA,QACb,WAAW;AAAA,QACX,eAAe,KAAK;AAAA,QACpB,QAAQ,KAAK;AAAA,MACf;AAAA,IACF;AAAA,IACA,KAAK,OAAO,MAAM,UAAkC;AAClD,UAAI,KAAK,WAAW,UAAa,OAAO,KAAK,KAAK,MAAM,EAAE,SAAS,GAAG;AACpE,eAAO;AAAA,UACL,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,OACE;AAAA,UACF,SAAS;AAAA,YACP,UAAU;AAAA,YACV,MAAM;AAAA,YACN,SACE;AAAA,YACF,KAAK;AAAA,UACP;AAAA,QACF;AAAA,MACF;AACA,aAAO,OAAO,sBAAsB,IAAI,GAAG,KAAK;AAAA,IAClD;AAAA,EACF;AACF;AAEO,IAAM,uBAAuB,2BAA2B;AAExD,SAAS,sBAAsB,MAAsC;AAC1E,QAAM,cAAc,2BAA2B,IAAI;AACnD,MAAI,YAAY,SAAS,GAAG;AAC1B,UAAM,IAAI;AAAA,MACR,wCAAwC,YAAY,KAAK,IAAI,CAAC;AAAA,IAChE;AAAA,EACF;AACA,QAAM,OAAO;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,KAAK;AAAA,EACP;AACA,MAAI,KAAK,SAAS,UAAU,UAAa,KAAK,SAAS,MAAM,SAAS,GAAG;AACvE,SAAK,KAAK,WAAW,KAAK,SAAS,KAAK;AAAA,EAC1C;AACA,MAAI,KAAK,QAAQ,eAAe,QAAW;AACzC,SAAK,KAAK,mBAAmB,KAAK,OAAO,UAAU;AAAA,EACrD;AACA,OAAK,KAAK,mBAAmB,IAAI,CAAC;AAClC,SAAO;AAAA,IACL,SAAS;AAAA,IACT;AAAA,IACA,KAAK,KAAK;AAAA,IACV,KAAK;AAAA,MACH,GAAG,QAAQ;AAAA,MACX,8BAA8B;AAAA,IAChC;AAAA,EACF;AACF;AAEA,SAAS,2BAA2B,MAA8B;AAChE,QAAM,cAAwB,CAAC;AAC/B,MAAI,KAAK,SAAS,WAAW,OAAW,aAAY,KAAK,iBAAiB;AAC1E,MAAI,KAAK,WAAW,UAAa,KAAK,OAAO,SAAS,EAAG,aAAY,KAAK,QAAQ;AAClF,MAAI,KAAK,eAAe,UAAa,OAAO,KAAK,KAAK,UAAU,EAAE,SAAS,GAAG;AAC5E,gBAAY,KAAK,YAAY;AAAA,EAC/B;AACA,MAAI,KAAK,QAAQ,eAAe,OAAW,aAAY,KAAK,mBAAmB;AAC/E,SAAO;AACT;AAEO,SAAS,mBAAmB,MAA4B;AAC7D,QAAM,SAAS,CAAC,KAAK,cAAc,KAAK,MAAM,EAAE;AAAA,IAC9C,CAAC,UAA2B,UAAU,UAAa,MAAM,KAAK,EAAE,SAAS;AAAA,EAC3E;AACA,SAAO,OAAO,KAAK,aAAa;AAClC;AAEO,SAAS,YACd,SACA,OACwB;AACxB,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,QAAQ,MAAM,QAAQ,SAAS,QAAQ,MAAM;AAAA,MACjD,KAAK,QAAQ;AAAA,MACb,KAAK,QAAQ;AAAA,MACb,OAAO,CAAC,UAAU,QAAQ,MAAM;AAAA,IAClC,CAAC;AAED,QAAI,YAAY;AAChB,QAAI,SAAS;AACb,UAAM,QAAuB;AAAA,MAC3B,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AACA,UAAM,cAA+B,CAAC;AAEtC,UAAM,UAAU,CAAC,QAAuC;AACtD,kBAAY,KAAK,qBAAqB,OAAO,KAAK,KAAK,CAAC;AAAA,IAC1D;AAEA,UAAM,aAAa,MAAY;AAC7B,UAAI,MAAM,UAAU,QAAQ,IAAI;AAChC,aAAO,QAAQ,IAAI;AACjB,cAAM,UAAU,UAAU,MAAM,GAAG,GAAG;AACtC,oBAAY,UAAU,MAAM,MAAM,CAAC;AACnC,cAAM,OAAO,QAAQ,KAAK;AAC1B,YAAI,KAAK,SAAS,GAAG;AACnB,cAAI;AACF,oBAAQ,KAAK,MAAM,IAAI,CAA4B;AAAA,UACrD,QAAQ;AAAA,UAER;AAAA,QACF;AACA,cAAM,UAAU,QAAQ,IAAI;AAAA,MAC9B;AAAA,IACF;AAEA,UAAM,OAAO,GAAG,QAAQ,CAAC,UAAU;AACjC,mBAAa,MAAM,SAAS,MAAM;AAClC,iBAAW;AAAA,IACb,CAAC;AACD,UAAM,OAAO,GAAG,QAAQ,CAAC,UAAU;AACjC,gBAAU,MAAM,SAAS,MAAM;AAAA,IACjC,CAAC;AACD,UAAM,GAAG,SAAS,CAAC,QAA+B;AAChD,cAAQ;AAAA,QACN,SAAS;AAAA,QACT,QAAQ,MAAM;AAAA,QACd,mBAAmB,MAAM;AAAA,QACzB,OAAO,MAAM;AAAA,QACb,OAAO,MAAM;AAAA,QACb,OACE,IAAI,SAAS,WACT,GAAG,QAAQ,OAAO,uBAClB,IAAI;AAAA,MACZ,CAAC;AAAA,IACH,CAAC;AACD,UAAM,GAAG,SAAS,OAAO,SAAS;AAChC,iBAAW;AACX,UAAI,UAAU,KAAK,EAAE,SAAS,GAAG;AAC/B,YAAI;AACF,kBAAQ,KAAK,MAAM,UAAU,KAAK,CAAC,CAA4B;AAAA,QACjE,QAAQ;AAAA,QAER;AAAA,MACF;AACA,YAAM,QAAQ,WAAW,WAAW;AAEpC,UAAI,SAAS,KAAK,MAAM,SAAS;AAC/B,gBAAQ,gBAAgB,KAAK,CAAC;AAC9B;AAAA,MACF;AAEA,YAAM,cAAc,OAAO,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC;AAC/C,YAAM,gBACJ,gBAAgB,UAAa,YAAY,SAAS,IAC9C,cACA,GAAG,QAAQ,OAAO,WAAW,QAAQ,CAAC;AAC5C,YAAM,UAAU,MAAM,WAAW,qBAAqB,aAAa;AACnE,cAAQ;AAAA,QACN,GAAG,gBAAgB,KAAK;AAAA,QACxB,SAAS;AAAA,QACT,OAAO,MAAM,SAAS,QAAQ;AAAA,QAC9B;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH;AAEA,eAAsB,qBACpB,OACA,OACA,OACe;AACf,QAAM,MAAM,sBAAsB,KAAK;AACvC,QAAM,YAAY,YAAY,KAAK,YAAY,KAAK,YAAY,KAAK,WAAW;AAChF,MAAI,MAAM,sBAAsB,UAAa,cAAc,QAAW;AACpE,UAAM,oBAAoB;AAAA,EAC5B;AAEA,MAAI,IAAI,SAAS,kBAAkB;AACjC,UAAM,OAAO,YAAY,KAAK,MAAM;AACpC,QAAI,MAAM,SAAS,iBAAiB;AAClC,YAAM,OAAO,YAAY,MAAM,MAAM;AACrC,UAAI,SAAS,QAAW;AACtB,cAAM,SAAS;AACf,cAAM,OAAO,UAAU,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,MACxD;AAAA,IACF;AACA,QAAI,MAAM,SAAS,aAAa;AAC9B,YAAM,YAAY,MAAM,KAAK;AAAA,IAC/B;AACA;AAAA,EACF;AAEA,MAAI,IAAI,SAAS,kBAAkB;AACjC,UAAM,UAAU;AAChB,UAAM,QAAQ;AACd,UAAM,QAAQ,gBAAgB,IAAI,KAAK;AACvC,UAAM,OAAO,UAAU;AAAA,MACrB,MAAM;AAAA,MACN,QAAQ,MAAM;AAAA,MACd,mBAAmB,MAAM;AAAA,MACzB,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,IACf,CAAC;AACD;AAAA,EACF;AAEA,MAAI,IAAI,SAAS,iBAAiB,IAAI,SAAS,SAAS;AACtD,UAAM,UAAU;AAChB,UAAM,MACJ,YAAY,KAAK,SAAS,KAC1B,YAAY,KAAK,OAAO,KACxB;AACF,UAAM,UAAU,qBAAqB,GAAG;AACxC,UAAM,QAAQ,QAAQ;AACtB,UAAM,UAAU;AAChB,UAAM,OAAO,UAAU;AAAA,MACrB,MAAM;AAAA,MACN,OAAO,MAAM;AAAA,MACb;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,SAAS,gBAAgB,OAAqC;AAC5D,SAAO;AAAA,IACL,SAAS,MAAM;AAAA,IACf,QAAQ,MAAM;AAAA,IACd,mBAAmB,MAAM;AAAA,IACzB,OAAO,MAAM;AAAA,IACb,OAAO,MAAM;AAAA,IACb,OAAO,MAAM;AAAA,IACb,SAAS,MAAM;AAAA,EACjB;AACF;AAEA,SAAS,sBACP,OACyB;AACzB,QAAM,MAAM,YAAY,OAAO,KAAK;AACpC,SAAO,OAAO;AAChB;AAEA,SAAS,qBAAqB,KAA6B;AACzD,QAAM,SAAS,kBAAkB,GAAG;AACpC,QAAM,OAAO,UAAU;AACvB,QAAM,aAAa,kBAAkB,GAAG;AACxC,QAAM,QACJ,WAAW,MAAM,uDAAuD,KACxE,WAAW,MAAM,sCAAsC;AAEzD,MAAI,KAAK,SAAS,mCAAmC,KAAK,UAAU,QAAW;AAC7E,WAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAM;AAAA,MACN,SAAS,eAAe,KAAK;AAAA,MAC7B,KAAK;AAAA,MACL;AAAA,MACA,SAAS,oBAAoB,EAAE,OAAO,WAAW,CAAC;AAAA,IACpD;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,wBAAwB,KAAK,UAAU,QAAW;AAClE,WAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAM;AAAA,MACN,SAAS,eAAe,KAAK;AAAA,MAC7B,KAAK;AAAA,MACL;AAAA,MACA,SAAS,oBAAoB,EAAE,OAAO,WAAW,CAAC;AAAA,IACpD;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,kBAAkB,KAAK,KAAK,SAAS,cAAc,GAAG;AACtE,WAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,MACT,KAAK;AAAA,MACL;AAAA,MACA,SAAS,oBAAoB,EAAE,YAAY,cAAc,IAAI,CAAC;AAAA,IAChE;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,mBAAmB,GAAG;AACtC,WAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,MACT,KAAK;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,IACT;AAAA,IACA,SAAS,oBAAoB,EAAE,WAAW,CAAC;AAAA,EAC7C;AACF;AAEA,SAAS,oBACP,SACqC;AACrC,QAAM,SAASC,gBAAe,OAAO;AACrC,SAAO,OAAO,KAAK,MAAM,EAAE,SAAS,IAAI,SAAS;AACnD;AAEA,SAAS,kBAAkB,KAAiC;AAC1D,QAAM,QAAQ,IAAI,QAAQ,GAAG;AAC7B,QAAM,MAAM,IAAI,YAAY,GAAG;AAC/B,MAAI,UAAU,MAAM,OAAO,MAAO,QAAO;AACzC,MAAI;AACF,UAAM,SAAS,KAAK,MAAM,IAAI,MAAM,OAAO,MAAM,CAAC,CAAC;AACnD,QAAI,WAAW,QAAQ,OAAO,WAAW,UAAU;AACjD,YAAM,SAAU,OAAmC;AACnD,aAAO,OAAO,WAAW,YAAY,OAAO,SAAS,IAAI,SAAS;AAAA,IACpE;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,KAAiC;AAC1D,QAAM,QAAQ,IAAI,MAAM,yDAAyD;AACjF,MAAI,UAAU,KAAM,QAAO;AAC3B,QAAM,QAAQ,MAAM,CAAC,KAAK,MAAM,CAAC;AACjC,SAAO,UAAU,SAAY,OAAO,SAAS,OAAO,EAAE,IAAI;AAC5D;AAEA,SAAS,WAAW,MAAc,SAAqC;AACrE,QAAM,QAAQ,KAAK,MAAM,OAAO;AAChC,SAAO,QAAQ,CAAC;AAClB;AAEA,eAAe,YACb,MACA,OACe;AACf,QAAM,OAAO,YAAY,MAAM,MAAM,KAAK,YAAY,MAAM,WAAW;AACvE,MAAI,SAAS,OAAW;AACxB,QAAM,OAAO,UAAU;AAAA,IACrB,MAAM;AAAA,IACN,IAAI,YAAY,MAAM,IAAI;AAAA,IAC1B;AAAA,IACA,OAAOC,gBAAe,KAAK,SAAS,KAAK,SAAS;AAAA,EACpD,CAAC;AACH;AAEO,SAAS,gBAAgB,OAAwC;AACtE,MAAI,UAAU,QAAQ,OAAO,UAAU,SAAU,QAAO;AACxD,QAAM,MAAM;AACZ,QAAM,cACJC,aAAY,KAAK,cAAc,KAAKA,aAAY,KAAK,aAAa;AACpE,QAAM,oBACJA,aAAY,KAAK,qBAAqB,KACtCA,aAAY,KAAK,mBAAmB,KACpCA,aAAY,KAAK,iBAAiB;AACpC,QAAM,eACJA,aAAY,KAAK,eAAe,KAAKA,aAAY,KAAK,cAAc;AACtE,QAAM,wBACJA,aAAY,KAAK,yBAAyB,KAC1CA,aAAY,KAAK,uBAAuB;AAC1C,SAAOF,gBAAe;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aACE,gBAAgB,UAAa,iBAAiB,UACzC,eAAe,MAAM,gBAAgB,KACtC;AAAA,EACR,CAAC;AACH;AAEA,SAAS,YACP,QACA,OACqC;AACrC,QAAM,QAAQ,OAAO,KAAK;AAC1B,SAAO,UAAU,QAAQ,OAAO,UAAU,WACrC,QACD;AACN;AAEA,SAAS,YACP,QACA,OACoB;AACpB,QAAM,QAAQ,OAAO,KAAK;AAC1B,SAAO,OAAO,UAAU,YAAY,MAAM,SAAS,IAAI,QAAQ;AACjE;AAEA,SAASE,aACP,QACA,OACoB;AACpB,QAAM,QAAQ,OAAO,KAAK;AAC1B,SAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAASD,gBAAe,OAAoC;AAC1D,MAAI,UAAU,OAAW,QAAO;AAChC,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI;AACF,WAAO,KAAK,UAAU,KAAK;AAAA,EAC7B,QAAQ;AACN,WAAO,OAAO,KAAK;AAAA,EACrB;AACF;AAEA,SAASD,gBAAkD,OAAa;AACtE,aAAW,OAAO,OAAO,KAAK,KAAK,GAAG;AACpC,QAAI,MAAM,GAAG,MAAM,QAAW;AAC5B,aAAO,MAAM,GAAG;AAAA,IAClB;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,qBAAqB,SAA0B;AACtD,QAAM,SAAS,UAAU,MAAM,CAAC,OAAO,cAAc,OAAO,EAAE,GAAG;AAAA,IAC/D,UAAU;AAAA,EACZ,CAAC;AACD,SAAO,OAAO,WAAW,KAAK,OAAO,OAAO,KAAK,EAAE,SAAS;AAC9D;AAEA,SAAS,iBACP,SACA,MAC0C;AAC1C,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,QAAI;AACJ,QAAI,SAAS;AACb,QAAI,SAAS;AACb,QAAI;AACF,cAAQ,MAAM,SAAS,MAAM,EAAE,OAAO,CAAC,UAAU,QAAQ,MAAM,EAAE,CAAC;AAAA,IACpE,SAAS,KAAc;AACrB,cAAQ;AAAA,QACN,IAAI;AAAA,QACJ,QAAQ,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,MACzD,CAAC;AACD;AAAA,IACF;AAEA,UAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU;AAClC,gBAAU,MAAM,SAAS,MAAM;AAAA,IACjC,CAAC;AACD,UAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU;AAClC,gBAAU,MAAM,SAAS,MAAM;AAAA,IACjC,CAAC;AACD,UAAM,GAAG,SAAS,CAAC,QAAQ;AACzB,cAAQ,EAAE,IAAI,OAAO,QAAQ,IAAI,QAAQ,CAAC;AAAA,IAC5C,CAAC;AACD,UAAM,GAAG,SAAS,CAAC,SAAS;AAC1B,YAAM,OAAO,GAAG,MAAM;AAAA,EAAK,MAAM,GAAG,KAAK;AACzC,cAAQ;AAAA,QACN,IAAI,SAAS;AAAA,QACb,QACE,KACG,MAAM,IAAI,EACV,KAAK,CAAC,SAAS,KAAK,KAAK,EAAE,SAAS,CAAC,GACpC,KAAK,MAAM,SAAS,IAAI,UAAU,GAAG,OAAO,WAAW,QAAQ,CAAC;AAAA,MACxE,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH;;;ACphBO,SAAS,6BACd,UACiB;AACjB,SAAO;AAAA,IACL;AAAA,IACA,aAAa,aAAsC;AAAA,MACjD,IAAI,SAAS;AAAA,MACb,WAAW;AAAA,MACX,eAAe;AAAA,MACf,QAAQ,GAAG,SAAS,WAAW;AAAA,IACjC;AAAA,IACA,KAAK,OAAO,UAAwB;AAAA,MAClC,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,OACE,GAAG,SAAS,WAAW,+CAChB,KAAK,UAAU,aAAa,SAAS;AAAA,IAChD;AAAA,EACF;AACF;;;ACtBO,IAAM,wBAAyC;AAAA,EACpD,0BAA0B;AAC5B;;;ACAA,IAAM,oBAAoB;AAAA,EACxB,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AACV;AAEO,SAAS,mBAAmB,IAAwC;AACzE,SAAO,kBAAkB,EAAE;AAC7B;;;ACdA,SAAS,kBAAkB;AAC3B,SAAS,SAAAG,QAAO,UAAU,SAAS,QAAQ,aAAAC,kBAAiB;AAC5D,SAAS,WAAAC,UAAS,YAAY;AAOvB,SAAS,QAAQ,UAA0B;AAChD,SAAO,KAAK,kBAAkB,QAAQ,GAAG,MAAM;AACjD;AAEO,SAAS,cAAc,UAAkB,OAAuB;AACrE,SAAO,KAAK,QAAQ,QAAQ,GAAG,GAAG,KAAK,OAAO;AAChD;AAEO,SAAS,WAAW,UAAkB,OAAuB;AAClE,SAAO,KAAK,QAAQ,QAAQ,GAAG,GAAG,KAAK,QAAQ;AACjD;AAEO,SAAS,cAAc,UAAkB,OAAuB;AACrE,SAAO,KAAK,QAAQ,QAAQ,GAAG,GAAG,KAAK,SAAS;AAClD;AAEA,eAAsB,iBACpB,UACA,OACe;AACf,QAAM,OAAO,cAAc,UAAU,KAAK;AAC1C,QAAMC,OAAMC,SAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AAC9C,QAAMC,WAAU,MAAM,eAAe,MAAM;AAC7C;AAEO,SAAS,2BACd,UACA,OACS;AACT,SAAO,WAAW,cAAc,UAAU,KAAK,CAAC;AAClD;AAEA,eAAsB,eACpB,MACA,QACe;AACf,QAAMF,OAAMC,SAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AAC9C,QAAM,MAAM,GAAG,IAAI,QAAQ,QAAQ,GAAG;AACtC,QAAMC,WAAU,KAAK,GAAG,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA,GAAM,MAAM;AACnE,QAAM,OAAO,KAAK,IAAI;AACxB;AAEO,SAAS,sBAAsB,MAMxB;AACZ,SAAO;AAAA,IACL,SAAS;AAAA,IACT,IAAI,KAAK;AAAA,IACT,WAAW,KAAK,KAAK,UAAU,aAAa;AAAA,IAC5C,QAAQ;AAAA,IACR,UAAU,KAAK;AAAA,IACf,KAAK,KAAK,OAAO,QAAQ;AAAA,IACzB,UAAU,KAAK,KAAK,SAAS;AAAA,IAC7B,OAAO,KAAK,KAAK,SAAS;AAAA,IAC1B,WAAW,KAAK,UAAU,YAAY;AAAA,IACtC,SAAS,WAAW,KAAK,UAAU,KAAK,KAAK;AAAA,IAC7C,YAAY,KAAK,KAAK,UAAU;AAAA,IAChC,aAAa,KAAK,KAAK,UAAU;AAAA,EACnC;AACF;AAEO,SAAS,qBAAqB,MAKvB;AACZ,SAAO;AAAA,IACL,GAAG,sBAAsB;AAAA,MACvB,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,MAAM,KAAK;AAAA,MACX,WAAW,KAAK;AAAA,MAChB,KAAK;AAAA,IACP,CAAC;AAAA,IACD,QAAQ;AAAA,EACV;AACF;AAEO,SAAS,gBAAgB,MAQlB;AACZ,QAAM,UAAU,KAAK,MAAM,KAAK,OAAO,SAAS;AAChD,QAAM,WAAW,KAAK,WAAW,QAAQ;AACzC,SAAO;AAAA,IACL,GAAG,KAAK;AAAA,IACR,QAAQ,KAAK;AAAA,IACb,mBAAmB,KAAK,qBAAqB,KAAK,OAAO;AAAA,IACzD,YAAY,KAAK,WAAW,YAAY;AAAA,IACxC,YAAY,OAAO,SAAS,OAAO,IAC/B,KAAK,IAAI,GAAG,WAAW,OAAO,IAC9B;AAAA,IACJ,SAAS,KAAK;AAAA,IACd,OAAO,KAAK;AAAA,IACZ,SAAS,KAAK;AAAA,EAChB;AACF;AAEA,eAAsB,cAAc,MAAyC;AAC3E,MAAI;AACF,UAAM,SAAS,KAAK,MAAM,MAAM,SAAS,MAAM,MAAM,CAAC;AACtD,WAAO,YAAY,MAAM,IAAI,SAAS;AAAA,EACxC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,eAAe,UAAwC;AAC3E,QAAM,MAAM,QAAQ,QAAQ;AAC5B,MAAI,CAAC,WAAW,GAAG,EAAG,QAAO,CAAC;AAC9B,MAAI;AACJ,MAAI;AACF,cAAU,MAAM,QAAQ,GAAG;AAAA,EAC7B,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACA,QAAM,UAAuB,CAAC;AAC9B,aAAW,SAAS,SAAS;AAC3B,QAAI,CAAC,MAAM,WAAW,MAAM,KAAK,CAAC,MAAM,SAAS,OAAO,EAAG;AAC3D,UAAM,SAAS,MAAM,cAAc,KAAK,KAAK,KAAK,CAAC;AACnD,QAAI,WAAW,KAAM,SAAQ,KAAK,MAAM;AAAA,EAC1C;AACA,SAAO,QAAQ,KAAK,CAAC,GAAG,MAAM,EAAE,UAAU,cAAc,EAAE,SAAS,CAAC;AACtE;AAEO,SAAS,UAAU,MAId;AACV,QAAM,UAAU,KAAK,MAAM,KAAK,OAAO,SAAS;AAChD,QAAM,WACJ,KAAK,OAAO,eAAe,SACvB,KAAK,MAAM,KAAK,OAAO,UAAU,IACjC;AACN,QAAM,YACJ,KAAK,OAAO,eACX,OAAO,SAAS,OAAO,IACpB,KAAK,IAAI,IAAI,YAAY,KAAK,IAAI,QAAQ,KAAK,OAAO,IACtD;AACN,QAAM,gBACJ,KAAK,OAAO,WAAW,aAAa,CAAC,KAAK,WAAW,KAAK,OAAO,GAAG,IAChE,UACA,KAAK,OAAO;AAClB,SAAO;AAAA,IACL,GAAG,KAAK;AAAA,IACR;AAAA,IACA;AAAA,IACA,OACE,kBAAkB,UACd,yCACA,KAAK,OAAO;AAAA,EACpB;AACF;AAEO,SAAS,YAAY,OAAoC;AAC9D,MAAI,UAAU,QAAQ,OAAO,UAAU,SAAU,QAAO;AACxD,QAAM,IAAI;AACV,SACE,EAAE,YAAY,KACd,OAAO,EAAE,OAAO,YAChB,EAAE,GAAG,WAAW,MAAM,MACrB,EAAE,cAAc,WAAW,EAAE,cAAc,YAAY,EAAE,cAAc,cACvE,EAAE,WAAW,YACZ,EAAE,WAAW,aACb,EAAE,WAAW,UACb,EAAE,WAAW,YACb,EAAE,WAAW,gBACf,OAAO,EAAE,aAAa,YACtB,OAAO,EAAE,QAAQ,aAChB,EAAE,aAAa,YAAY,EAAE,aAAa,WAAW,EAAE,aAAa,aACrE,OAAO,EAAE,cAAc,YACvB,OAAO,EAAE,YAAY;AAEzB;;;ACjMA,SAAS,kBAAkB;AAC3B,SAAS,cAAAC,aAAY,gBAAgB;AACrC,SAAS,YAAAC,WAAU,WAAAC,gBAAe;AAClC,SAAS,QAAAC,aAAY;AAmBrB,eAAsB,cAAc,UAAyC;AAC3E,QAAM,MAAoB,oBAAI,IAAI;AAClC,MAAI,CAACC,YAAW,QAAQ,EAAG,QAAO;AAElC,MAAI;AACJ,MAAI;AACF,cAAU,MAAMC,SAAQ,QAAQ;AAAA,EAClC,QAAQ;AACN,WAAO;AAAA,EACT;AAEA,aAAW,SAAS,SAAS;AAC3B,QAAI,CAAC,MAAM,SAAS,KAAK,EAAG;AAC5B,UAAM,OAAO,MAAM,MAAM,GAAG,EAAE;AAC9B,UAAM,OAAOC,MAAK,UAAU,KAAK;AACjC,QAAI;AACF,YAAM,KAAK,SAAS,IAAI;AACxB,UAAI,CAAC,GAAG,OAAO,EAAG;AAClB,YAAM,UAAU,MAAMC,UAAS,MAAM,MAAM;AAC3C,UAAI,IAAI,MAAM;AAAA,QACZ;AAAA,QACA,MAAM,WAAW,QAAQ,EAAE,OAAO,OAAO,EAAE,OAAO,KAAK;AAAA,QACvD,UAAU,iBAAiB,OAAO,EAAE,gBAAgB;AAAA,MACtD,CAAC;AAAA,IACH,QAAQ;AACN;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,kBACd,QACA,OACmB;AACnB,MAAI,UAAU;AACd,MAAI,UAAU;AACd,MAAI,WAAW;AACf,MAAI,UAAU;AAEd,aAAW,CAAC,MAAM,KAAK,KAAK,OAAO;AACjC,UAAM,OAAO,OAAO,IAAI,IAAI;AAC5B,QAAI,SAAS,QAAW;AACtB,iBAAW;AACX;AAAA,IACF;AACA,QAAI,KAAK,SAAS,MAAM,KAAM;AAC9B,QAAI,CAAC,KAAK,YAAY,MAAM,UAAU;AACpC,kBAAY;AAAA,IACd,OAAO;AACL,iBAAW;AAAA,IACb;AAAA,EACF;AAEA,aAAW,QAAQ,OAAO,KAAK,GAAG;AAChC,QAAI,CAAC,MAAM,IAAI,IAAI,EAAG,YAAW;AAAA,EACnC;AAEA,SAAO,EAAE,SAAS,SAAS,UAAU,QAAQ;AAC/C;AAEO,SAAS,gBAAgB,OAAmC;AACjE,SACE,MAAM,YAAY,KAClB,MAAM,YAAY,KAClB,MAAM,aAAa,KACnB,MAAM,YAAY;AAEtB;;;ARrDA,eAAsB,uBACpB,SAC6B;AAC7B,QAAM,MAAM,QAAQ,QAAQ,MAAM,oBAAI,KAAK;AAC3C,QAAM,QAAQ,QAAQ,SAAS,YAAY,IAAI,CAAC;AAChD,QAAM,YAAY,IAAI;AACtB,QAAM,aAAa,cAAc,QAAQ,UAAU,KAAK;AACxD,QAAM,UAAU,sBAAsB;AAAA,IACpC;AAAA,IACA,UAAU,QAAQ;AAAA,IAClB,MAAM,QAAQ;AAAA,IACd;AAAA,IACA,KAAK,QAAQ;AAAA,EACf,CAAC;AAED,QAAM,WAAW,MAAM,2BAA2B;AAAA,IAChD;AAAA,IACA,UAAU,QAAQ;AAAA,IAClB;AAAA,IACA,UAAU;AAAA,IACV,YAAY,IAAI;AAAA,EAClB,CAAC;AACD,MAAI,aAAa,MAAM;AACrB,WAAO;AAAA,MACL;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ;AAAA,QACN,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,QAAM,eAAe,YAAY,OAAO;AACxC,QAAM,iBAAiB,QAAQ,OAAO;AACtC,QAAM,aAAa,MAAM,2BAA2B;AAAA,IAClD;AAAA,IACA,UAAU,QAAQ;AAAA,IAClB;AAAA,IACA,UAAU;AAAA,IACV,YAAY,IAAI;AAAA,EAClB,CAAC;AACD,MAAI,eAAe,MAAM;AACvB,WAAO;AAAA,MACL;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ;AAAA,QACN,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,QAAM,aACJ,QAAQ,eACP,CAAC,MAAM,UAAU,mBAAmB,KAAK,SAAS,EAAE,EAAE,IAAI,MAAM,KAAK;AACxE,QAAM,cAA+B,CAAC;AAEtC,MAAI;AACJ,MAAI;AACJ,MAAI;AACF,UAAM,WAAWC,MAAK,QAAQ,UAAU,YAAY,OAAO;AAC3D,UAAM,SAAS,MAAM,cAAc,QAAQ;AAC3C,QAAI;AACF,eAAS,MAAM,WAAW,QAAQ,MAAM;AAAA,QACtC,SAAS,YAAY,QAAQ,SAAS,KAAK,aAAa,QAAQ,OAAO;AAAA,MACzE,CAAC;AAAA,IACH,SAAS,KAAc;AACrB,eAAS;AAAA,QACP,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,MACxD;AACA,YAAM,eAAe,QAAQ,SAAS;AAAA,QACpC,MAAM;AAAA,QACN,OAAO,OAAO,SAAS;AAAA,MACzB,GAAG,IAAI,CAAC;AAAA,IACV;AACA,UAAM,QAAQ,WAAW,WAAW;AAEpC,UAAM,QAAQ,MAAM,cAAc,QAAQ;AAC1C,UAAM,QAAQ,kBAAkB,QAAQ,KAAK;AAC7C,QAAI,OAAO,SAAS;AAClB,YAAM,WAAW,EAAE,UAAU,QAAQ,SAAS,CAAC;AAAA,IACjD;AAEA,UAAM,UAAsB;AAAA,MAC1B,SAAS,MAAM;AAAA,MACf,SAAS,MAAM;AAAA,MACf,UAAU,MAAM;AAAA,MAChB,SAAS,OAAO;AAAA,MAChB,OAAO,OAAO;AAAA,MACd,OAAO,OAAO;AAAA,IAChB;AACA,kBAAc,MAAM,sBAAsB;AAAA,MACxC;AAAA,MACA,UAAU;AAAA,MACV,QAAQ,OAAO,UAAU,SAAS;AAAA,MAClC,YAAY,IAAI;AAAA,MAChB,mBAAmB,OAAO;AAAA,MAC1B;AAAA,MACA,OAAO,OAAO;AAAA,MACd,SAAS,OAAO;AAAA,IAClB,CAAC;AAAA,EACH,SAAS,KAAc;AACrB,aAAS;AAAA,MACP,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,IACxD;AACA,QAAI;AACF,YAAM,eAAe,QAAQ,SAAS;AAAA,QACpC,MAAM;AAAA,QACN,OAAO,OAAO,SAAS;AAAA,MACzB,GAAG,IAAI,CAAC;AAAA,IACV,QAAQ;AAAA,IAGR;AACA,UAAM,QAAQ,WAAW,WAAW;AACpC,kBAAc,MAAM,sBAAsB;AAAA,MACxC;AAAA,MACA,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,YAAY,IAAI;AAAA,MAChB,OAAO,OAAO;AAAA,MACd,SAAS,OAAO;AAAA,IAClB,CAAC;AAAA,EACH;AAEA,MAAI,YAAY,WAAW,eAAe,OAAO,SAAS;AACxD,aAAS;AAAA,MACP,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO,EAAE,OAAO,QAAQ,aAAa,OAAO;AAC9C;AAEA,eAAe,sBAAsB,MASd;AACrB,QAAM,UAAU,MAAM,cAAc,KAAK,UAAU;AACnD,MACE,SAAS,WAAW,eACpB,2BAA2B,KAAK,SAAS,UAAU,KAAK,SAAS,EAAE,GACnE;AACA,WAAO,gBAAgB;AAAA,MACrB,YAAY,KAAK;AAAA,MACjB,UAAU,WAAW,KAAK;AAAA,MAC1B,YAAY,KAAK;AAAA,IACnB,CAAC;AAAA,EACH;AACA,QAAM,OAAO,WAAW,KAAK;AAC7B,QAAM,WAAW,gBAAgB;AAAA,IAC/B,QAAQ;AAAA,IACR,QAAQ,KAAK;AAAA,IACb,YAAY,KAAK;AAAA,IACjB,mBAAmB,KAAK;AAAA,IACxB,SAAS,KAAK;AAAA,IACd,OAAO,KAAK;AAAA,IACZ,SAAS,KAAK;AAAA,EAChB,CAAC;AACD,QAAM,eAAe,KAAK,YAAY,QAAQ;AAC9C,SAAO;AACT;AAEA,eAAe,2BAA2B,MAMZ;AAC5B,QAAM,UAAU,MAAM,cAAc,KAAK,UAAU;AACnD,MACE,SAAS,WAAW,eACpB,CAAC,2BAA2B,KAAK,UAAU,KAAK,KAAK,GACrD;AACA,WAAO;AAAA,EACT;AACA,SAAO,gBAAgB;AAAA,IACrB,YAAY,KAAK;AAAA,IACjB,UAAU,WAAW,KAAK;AAAA,IAC1B,YAAY,KAAK;AAAA,EACnB,CAAC;AACH;AAEA,eAAe,gBAAgB,MAIR;AACrB,QAAM,YACJ,KAAK,SAAS,WAAW,cACrB,KAAK,WACL,gBAAgB;AAAA,IACd,QAAQ,KAAK;AAAA,IACb,QAAQ;AAAA,IACR,YAAY,KAAK;AAAA,EACnB,CAAC;AACP,QAAM,eAAe,KAAK,YAAY,SAAS;AAC/C,SAAO;AACT;AAEA,SAAS,YACP,MACA,KACA,QACA,UAC+B;AAC/B,SAAO,CAAC,UAAU;AAChB,WAAO,KAAK,eAAe,MAAM,OAAO,IAAI,CAAC,CAAC;AAC9C,QAAI,aAAa,QAAW;AAC1B,aAAO,KAAK,QAAQ,QAAQ,SAAS,KAAK,CAAC,CAAC;AAAA,IAC9C;AAAA,EACF;AACF;;;ASzQA,SAAS,SAAAC,QAAO,YAAAC,WAAU,UAAAC,SAAQ,aAAAC,kBAAiB;AACnD,SAAS,WAAAC,UAAS,QAAAC,aAAY;AASvB,SAAS,YAAY,UAAkB,OAAuB;AACnE,SAAOC,MAAK,QAAQ,QAAQ,GAAG,GAAG,KAAK,YAAY;AACrD;AAEA,eAAsB,aACpB,UACA,OACA,MACe;AACf,QAAM,OAAO,YAAY,UAAU,KAAK;AACxC,QAAMC,OAAMC,SAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AAC9C,QAAM,MAAM,GAAG,IAAI,QAAQ,QAAQ,GAAG;AACtC,QAAMC,WAAU,KAAK,GAAG,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAAA,GAAM,MAAM;AACjE,QAAMC,QAAO,KAAK,IAAI;AACxB;AAEA,eAAsB,YACpB,UACA,OACuB;AACvB,QAAM,SAAS,KAAK;AAAA,IAClB,MAAMC,UAAS,YAAY,UAAU,KAAK,GAAG,MAAM;AAAA,EACrD;AACA,MAAI,CAAC,eAAe,MAAM,GAAG;AAC3B,UAAM,IAAI,MAAM,wBAAwB,KAAK,EAAE;AAAA,EACjD;AACA,SAAO;AACT;AAEA,SAAS,eAAe,OAAuC;AAC7D,MAAI,UAAU,QAAQ,OAAO,UAAU,SAAU,QAAO;AACxD,QAAM,OAAO;AACb,SACE,KAAK,aAAa,UAClB,OAAO,KAAK,aAAa,YACzB,KAAK,aAAa,QAClB,aAAc,KAAK,SAA8B,EAAE,KACnD,OAAO,KAAK,QAAQ,YACpB,OAAO,KAAK,WAAW,aACtB,KAAK,aAAa,UAChB,OAAO,KAAK,aAAa,YACxB,KAAK,aAAa,SAChB,KAAK,SAAqC,cAAc,UACxD,gBAAiB,KAAK,SAAqC,SAAS;AAE9E;AAEA,SAAS,aAAa,OAA4C;AAChE,SAAO,UAAU,YAAY,UAAU,WAAW,UAAU;AAC9D;AAEA,SAAS,gBAAgB,OAAwC;AAC/D,SAAO,UAAU,WAAW,UAAU,YAAY,UAAU;AAC9D;;;AXlBA,eAAsB,uBACpB,SACuC;AACvC,QAAM,MAAM,QAAQ,QAAQ,MAAM,oBAAI,KAAK;AAC3C,QAAM,QAAQ,QAAQ,SAAS,YAAY,IAAI,CAAC;AAChD,QAAM,aAAa,QAAQ,UAAU,OAAO,QAAQ,IAAI;AACxD,QAAM,aAAa,cAAc,QAAQ,UAAU,KAAK;AACxD,QAAM,SAAS,qBAAqB;AAAA,IAClC;AAAA,IACA,UAAU,QAAQ;AAAA,IAClB,MAAM,QAAQ;AAAA,IACd,UAAU,IAAI;AAAA,EAChB,CAAC;AACD,QAAM,eAAe,YAAY,MAAM;AACvC,QAAM,iBAAiB,OAAO,OAAO;AAErC,QAAM,aAAa,QAAQ,cAAc,QAAQ,KAAK,CAAC;AACvD,MAAI,eAAe,UAAa,WAAW,WAAW,GAAG;AACvD,UAAM,QAAQ;AACd,UAAM;AAAA,MACJ;AAAA,MACA,gBAAgB;AAAA,QACd,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,YAAY,IAAI;AAAA,QAChB;AAAA,MACF,CAAC;AAAA,IACH;AACA,UAAM,IAAI,MAAM,KAAK;AAAA,EACvB;AAEA,QAAM,UAAU,QAAQ,mBAAmB;AAC3C,MAAI;AACJ,MAAI;AACF,YAAQ,QAAQ;AAAA,MACd,SAAS,QAAQ;AAAA,MACjB,MAAM,CAAC,YAAY,aAAa,KAAK;AAAA,MACrC,KAAK,QAAQ;AAAA,MACb,KAAK;AAAA,QACH,GAAG,QAAQ;AAAA,QACX,8BAA8B;AAAA,MAChC;AAAA,IACF,CAAC;AAAA,EACH,SAAS,KAAc;AACrB,UAAM;AAAA,MACJ;AAAA,MACA,gBAAgB;AAAA,QACd,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,YAAY,IAAI;AAAA,QAChB,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,MACxD,CAAC;AAAA,IACH;AACA,UAAM;AAAA,EACR;AACA,QAAM,QAAQ;AACd,QAAM,WAAW,MAAM,OAAO;AAC9B,SAAO,EAAE,OAAO,QAAQ,QAAQ,SAAS;AAC3C;AAcA,eAAsB,mBACpB,SAC6B;AAC7B,QAAM,WAAW,MAAM,cAAc,cAAc,QAAQ,UAAU,QAAQ,KAAK,CAAC;AACnF,MAAI,UAAU,WAAW,aAAa;AACpC,WAAO;AAAA,MACL,OAAO,QAAQ;AAAA,MACf,QAAQ;AAAA,MACR,QAAQ;AAAA,QACN,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,QAAM,OAAO,MAAM,YAAY,QAAQ,UAAU,QAAQ,KAAK;AAC9D,SAAO,uBAAuB;AAAA,IAC5B,UAAU,QAAQ;AAAA,IAClB;AAAA,IACA,OAAO,QAAQ;AAAA,IACf,KAAK,QAAQ;AAAA,IACb,KAAK,QAAQ;AAAA,IACb,SAAS,QAAQ;AAAA,IACjB,YAAY,QAAQ;AAAA,EACtB,CAAC;AACH;AAEA,SAAS,uBAAuB,MAKf;AACf,SAAOC,OAAM,KAAK,SAAS,KAAK,MAAM;AAAA,IACpC,KAAK,KAAK;AAAA,IACV,KAAK,KAAK;AAAA,IACV,UAAU;AAAA,IACV,OAAO;AAAA,EACT,CAAC;AACH;","names":["spawn","join","pruneUndefined","stringifyInput","numberField","mkdir","writeFile","dirname","mkdir","dirname","writeFile","existsSync","readFile","readdir","join","existsSync","readdir","join","readFile","join","mkdir","readFile","rename","writeFile","dirname","join","join","mkdir","dirname","writeFile","rename","readFile","spawn"]}