alchemylab-opencode 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/build.mjs +153 -0
  2. package/dist/chunk-7JG6KCBC.js +78 -0
  3. package/dist/chunk-7JG6KCBC.js.map +7 -0
  4. package/dist/chunk-CMAI7CAJ.js +2270 -0
  5. package/dist/chunk-CMAI7CAJ.js.map +7 -0
  6. package/dist/chunk-FPPWDLO7.js +117 -0
  7. package/dist/chunk-FPPWDLO7.js.map +7 -0
  8. package/dist/chunk-K4ME3WTI.js +6525 -0
  9. package/dist/chunk-K4ME3WTI.js.map +7 -0
  10. package/dist/chunk-KMHCMDYS.js +309 -0
  11. package/dist/chunk-KMHCMDYS.js.map +7 -0
  12. package/dist/chunk-NBI23JB4.js +23721 -0
  13. package/dist/chunk-NBI23JB4.js.map +7 -0
  14. package/dist/chunk-P44FI4UK.js +21 -0
  15. package/dist/chunk-P44FI4UK.js.map +7 -0
  16. package/dist/chunk-SM4I7RU4.js +718 -0
  17. package/dist/chunk-SM4I7RU4.js.map +7 -0
  18. package/dist/chunk-WCK3PNT7.js +5015 -0
  19. package/dist/chunk-WCK3PNT7.js.map +7 -0
  20. package/dist/mcp-6ID7DRNS.js +12 -0
  21. package/dist/mcp-6ID7DRNS.js.map +7 -0
  22. package/dist/pty.node-IR7ZMJYY.js +30 -0
  23. package/dist/pty.node-IR7ZMJYY.js.map +7 -0
  24. package/dist/registry-O4THPVFS.js +13 -0
  25. package/dist/registry-O4THPVFS.js.map +7 -0
  26. package/dist/run-HRWKT4NL.js +4781 -0
  27. package/dist/run-HRWKT4NL.js.map +7 -0
  28. package/dist/run-service-23VXHTA6.js +12 -0
  29. package/dist/run-service-23VXHTA6.js.map +7 -0
  30. package/dist/run.js +12 -0
  31. package/dist/run.js.map +7 -0
  32. package/dist/schema-YARWYUAH.js +14 -0
  33. package/dist/schema-YARWYUAH.js.map +7 -0
  34. package/dist/serve.js +31 -0
  35. package/dist/serve.js.map +7 -0
  36. package/dist/server-MHSLBRNZ.js +16 -0
  37. package/dist/server-MHSLBRNZ.js.map +7 -0
  38. package/dist/session-3UEFY5NC.js +13 -0
  39. package/dist/session-3UEFY5NC.js.map +7 -0
  40. package/dist/share-next-Q5WQ2ELY.js +14 -0
  41. package/dist/share-next-Q5WQ2ELY.js.map +7 -0
  42. package/dist/worktree-E5I74P2A.js +53 -0
  43. package/dist/worktree-E5I74P2A.js.map +7 -0
  44. package/package.json +10 -3
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../packages/opencode/src/effect/run-service.ts", "../packages/opencode/src/bus/global.ts", "../packages/opencode/src/effect/instance-registry.ts", "../packages/opencode/src/util/filesystem.ts", "../packages/opencode/src/util/glob.ts", "../packages/opencode/src/util/iife.ts", "../packages/opencode/src/util/log.ts", "../packages/opencode/src/global/index.ts", "../packages/opencode/src/util/context.ts", "../packages/opencode/src/project/project.ts", "../packages/opencode/src/storage/db.ts", "../packages/opencode/src/util/lazy.ts", "../packages/util/src/error.ts", "../packages/opencode/src/flag/flag.ts", "../packages/opencode/src/installation/meta.ts", "../packages/opencode/src/effect/instance-state.ts", "../packages/opencode/src/effect/instance-ref.ts", "../packages/opencode/src/storage/db.node.ts", "../packages/opencode/src/project/project.sql.ts", "../packages/opencode/src/storage/schema.sql.ts", "../packages/opencode/src/session/session.sql.ts", "../packages/opencode/src/bus/bus-event.ts", "../packages/opencode/src/util/which.ts", "../packages/opencode/src/project/schema.ts", "../packages/opencode/src/filesystem/index.ts", "../packages/opencode/src/effect/cross-spawn-spawner.ts", "../packages/opencode/src/project/state.ts", "../packages/opencode/src/project/instance.ts"],
4
+ "sourcesContent": ["import { Effect, Layer, ManagedRuntime } from \"effect\"\nimport * as ServiceMap from \"effect/ServiceMap\"\nimport { Instance } from \"@/project/instance\"\nimport { Context } from \"@/util/context\"\nimport { InstanceRef } from \"./instance-ref\"\n\nexport const memoMap = Layer.makeMemoMapUnsafe()\n\nfunction attach<A, E, R>(effect: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> {\n try {\n const ctx = Instance.current\n return Effect.provideService(effect, InstanceRef, ctx)\n } catch (err) {\n if (!(err instanceof Context.NotFound)) throw err\n }\n return effect\n}\n\nexport function makeRuntime<I, S, E>(service: ServiceMap.Service<I, S>, layer: Layer.Layer<I, E>) {\n let rt: ManagedRuntime.ManagedRuntime<I, E> | undefined\n const getRuntime = () => (rt ??= ManagedRuntime.make(layer, { memoMap }))\n\n return {\n runSync: <A, Err>(fn: (svc: S) => Effect.Effect<A, Err, I>) => getRuntime().runSync(attach(service.use(fn))),\n runPromiseExit: <A, Err>(fn: (svc: S) => Effect.Effect<A, Err, I>, options?: Effect.RunOptions) =>\n getRuntime().runPromiseExit(attach(service.use(fn)), options),\n runPromise: <A, Err>(fn: (svc: S) => Effect.Effect<A, Err, I>, options?: Effect.RunOptions) =>\n getRuntime().runPromise(attach(service.use(fn)), options),\n runFork: <A, Err>(fn: (svc: S) => Effect.Effect<A, Err, I>) => getRuntime().runFork(attach(service.use(fn))),\n runCallback: <A, Err>(fn: (svc: S) => Effect.Effect<A, Err, I>) =>\n getRuntime().runCallback(attach(service.use(fn))),\n }\n}\n", "import { EventEmitter } from \"events\"\n\nexport const GlobalBus = new EventEmitter<{\n event: [\n {\n directory?: string\n payload: any\n },\n ]\n}>()\n", "const disposers = new Set<(directory: string) => Promise<void>>()\n\nexport function registerDisposer(disposer: (directory: string) => Promise<void>) {\n disposers.add(disposer)\n return () => {\n disposers.delete(disposer)\n }\n}\n\nexport async function disposeInstance(directory: string) {\n await Promise.allSettled([...disposers].map((disposer) => disposer(directory)))\n}\n", "import { chmod, mkdir, readFile, stat as statFile, writeFile } from \"fs/promises\"\nimport { createWriteStream, existsSync, statSync } from \"fs\"\nimport { lookup } from \"mime-types\"\nimport { realpathSync } from \"fs\"\nimport { dirname, join, relative, resolve as pathResolve, win32 } from \"path\"\nimport { Readable } from \"stream\"\nimport { pipeline } from \"stream/promises\"\nimport { Glob } from \"./glob\"\n\nexport namespace Filesystem {\n // Fast sync version for metadata checks\n export async function exists(p: string): Promise<boolean> {\n return existsSync(p)\n }\n\n export async function isDir(p: string): Promise<boolean> {\n try {\n return statSync(p).isDirectory()\n } catch {\n return false\n }\n }\n\n export function stat(p: string): ReturnType<typeof statSync> | undefined {\n return statSync(p, { throwIfNoEntry: false }) ?? undefined\n }\n\n export async function statAsync(p: string): Promise<ReturnType<typeof statSync> | undefined> {\n return statFile(p).catch((e) => {\n if (isEnoent(e)) return undefined\n throw e\n })\n }\n\n export async function size(p: string): Promise<number> {\n const s = stat(p)?.size ?? 0\n return typeof s === \"bigint\" ? Number(s) : s\n }\n\n export async function readText(p: string): Promise<string> {\n return readFile(p, \"utf-8\")\n }\n\n export async function readJson<T = any>(p: string): Promise<T> {\n return JSON.parse(await readFile(p, \"utf-8\"))\n }\n\n export async function readBytes(p: string): Promise<Buffer> {\n return readFile(p)\n }\n\n export async function readArrayBuffer(p: string): Promise<ArrayBuffer> {\n const buf = await readFile(p)\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) as ArrayBuffer\n }\n\n function isEnoent(e: unknown): e is { code: \"ENOENT\" } {\n return typeof e === \"object\" && e !== null && \"code\" in e && (e as { code: string }).code === \"ENOENT\"\n }\n\n export async function write(p: string, content: string | Buffer | Uint8Array, mode?: number): Promise<void> {\n try {\n if (mode) {\n await writeFile(p, content, { mode })\n } else {\n await writeFile(p, content)\n }\n } catch (e) {\n if (isEnoent(e)) {\n await mkdir(dirname(p), { recursive: true })\n if (mode) {\n await writeFile(p, content, { mode })\n } else {\n await writeFile(p, content)\n }\n return\n }\n throw e\n }\n }\n\n export async function writeJson(p: string, data: unknown, mode?: number): Promise<void> {\n return write(p, JSON.stringify(data, null, 2), mode)\n }\n\n export async function writeStream(\n p: string,\n stream: ReadableStream<Uint8Array> | Readable,\n mode?: number,\n ): Promise<void> {\n const dir = dirname(p)\n if (!existsSync(dir)) {\n await mkdir(dir, { recursive: true })\n }\n\n const nodeStream = stream instanceof ReadableStream ? Readable.fromWeb(stream as any) : stream\n const writeStream = createWriteStream(p)\n await pipeline(nodeStream, writeStream)\n\n if (mode) {\n await chmod(p, mode)\n }\n }\n\n export function mimeType(p: string): string {\n return lookup(p) || \"application/octet-stream\"\n }\n\n /**\n * On Windows, normalize a path to its canonical casing using the filesystem.\n * This is needed because Windows paths are case-insensitive but LSP servers\n * may return paths with different casing than what we send them.\n */\n export function normalizePath(p: string): string {\n if (process.platform !== \"win32\") return p\n const resolved = win32.normalize(win32.resolve(windowsPath(p)))\n try {\n return realpathSync.native(resolved)\n } catch {\n return resolved\n }\n }\n\n export function normalizePathPattern(p: string): string {\n if (process.platform !== \"win32\") return p\n if (p === \"*\") return p\n const match = p.match(/^(.*)[\\\\/]\\*$/)\n if (!match) return normalizePath(p)\n const dir = /^[A-Za-z]:$/.test(match[1]) ? match[1] + \"\\\\\" : match[1]\n return join(normalizePath(dir), \"*\")\n }\n\n // We cannot rely on path.resolve() here because git.exe may come from Git Bash, Cygwin, or MSYS2, so we need to translate these paths at the boundary.\n // Also resolves symlinks so that callers using the result as a cache key\n // always get the same canonical path for a given physical directory.\n export function resolve(p: string): string {\n const resolved = pathResolve(windowsPath(p))\n try {\n return normalizePath(realpathSync(resolved))\n } catch (e) {\n if (isEnoent(e)) return normalizePath(resolved)\n throw e\n }\n }\n\n export function windowsPath(p: string): string {\n if (process.platform !== \"win32\") return p\n return (\n p\n .replace(/^\\/([a-zA-Z]):(?:[\\\\/]|$)/, (_, drive) => `${drive.toUpperCase()}:/`)\n // Git Bash for Windows paths are typically /<drive>/...\n .replace(/^\\/([a-zA-Z])(?:\\/|$)/, (_, drive) => `${drive.toUpperCase()}:/`)\n // Cygwin git paths are typically /cygdrive/<drive>/...\n .replace(/^\\/cygdrive\\/([a-zA-Z])(?:\\/|$)/, (_, drive) => `${drive.toUpperCase()}:/`)\n // WSL paths are typically /mnt/<drive>/...\n .replace(/^\\/mnt\\/([a-zA-Z])(?:\\/|$)/, (_, drive) => `${drive.toUpperCase()}:/`)\n )\n }\n export function overlaps(a: string, b: string) {\n const relA = relative(a, b)\n const relB = relative(b, a)\n return !relA || !relA.startsWith(\"..\") || !relB || !relB.startsWith(\"..\")\n }\n\n export function contains(parent: string, child: string) {\n return !relative(parent, child).startsWith(\"..\")\n }\n\n export async function findUp(\n target: string,\n start: string,\n stop?: string,\n options?: { rootFirst?: boolean },\n ): Promise<string[]>\n export async function findUp(\n target: string[],\n start: string,\n stop?: string,\n options?: { rootFirst?: boolean },\n ): Promise<string[]>\n export async function findUp(\n target: string | string[],\n start: string,\n stop?: string,\n options?: { rootFirst?: boolean },\n ) {\n const dirs = [start]\n let current = start\n while (true) {\n if (stop === current) break\n const parent = dirname(current)\n if (parent === current) break\n dirs.push(parent)\n current = parent\n }\n\n const targets = Array.isArray(target) ? target : [target]\n const result = []\n for (const dir of options?.rootFirst ? dirs.toReversed() : dirs) {\n for (const item of targets) {\n const search = join(dir, item)\n if (await exists(search)) result.push(search)\n }\n }\n return result\n }\n\n export async function* up(options: { targets: string[]; start: string; stop?: string }) {\n const { targets, start, stop } = options\n let current = start\n while (true) {\n for (const target of targets) {\n const search = join(current, target)\n if (await exists(search)) yield search\n }\n if (stop === current) break\n const parent = dirname(current)\n if (parent === current) break\n current = parent\n }\n }\n\n export async function globUp(pattern: string, start: string, stop?: string) {\n let current = start\n const result = []\n while (true) {\n try {\n const matches = await Glob.scan(pattern, {\n cwd: current,\n absolute: true,\n include: \"file\",\n dot: true,\n })\n result.push(...matches)\n } catch {\n // Skip invalid glob patterns\n }\n if (stop === current) break\n const parent = dirname(current)\n if (parent === current) break\n current = parent\n }\n return result\n }\n}\n", "import { glob, globSync, type GlobOptions } from \"glob\"\nimport { minimatch } from \"minimatch\"\n\nexport namespace Glob {\n export interface Options {\n cwd?: string\n absolute?: boolean\n include?: \"file\" | \"all\"\n dot?: boolean\n symlink?: boolean\n }\n\n function toGlobOptions(options: Options): GlobOptions {\n return {\n cwd: options.cwd,\n absolute: options.absolute,\n dot: options.dot,\n follow: options.symlink ?? false,\n nodir: options.include !== \"all\",\n }\n }\n\n export async function scan(pattern: string, options: Options = {}): Promise<string[]> {\n return glob(pattern, toGlobOptions(options)) as Promise<string[]>\n }\n\n export function scanSync(pattern: string, options: Options = {}): string[] {\n return globSync(pattern, toGlobOptions(options)) as string[]\n }\n\n export function match(pattern: string, filepath: string): boolean {\n return minimatch(filepath, pattern, { dot: true })\n }\n}\n", "export function iife<T>(fn: () => T) {\n return fn()\n}\n", "import path from \"path\"\nimport fs from \"fs/promises\"\nimport { createWriteStream } from \"fs\"\nimport { Global } from \"../global\"\nimport z from \"zod\"\nimport { Glob } from \"./glob\"\n\nexport namespace Log {\n export const Level = z.enum([\"DEBUG\", \"INFO\", \"WARN\", \"ERROR\"]).meta({ ref: \"LogLevel\", description: \"Log level\" })\n export type Level = z.infer<typeof Level>\n\n const levelPriority: Record<Level, number> = {\n DEBUG: 0,\n INFO: 1,\n WARN: 2,\n ERROR: 3,\n }\n\n let level: Level = \"INFO\"\n\n function shouldLog(input: Level): boolean {\n return levelPriority[input] >= levelPriority[level]\n }\n\n export type Logger = {\n debug(message?: any, extra?: Record<string, any>): void\n info(message?: any, extra?: Record<string, any>): void\n error(message?: any, extra?: Record<string, any>): void\n warn(message?: any, extra?: Record<string, any>): void\n tag(key: string, value: string): Logger\n clone(): Logger\n time(\n message: string,\n extra?: Record<string, any>,\n ): {\n stop(): void\n [Symbol.dispose](): void\n }\n }\n\n const loggers = new Map<string, Logger>()\n\n export const Default = create({ service: \"default\" })\n\n export interface Options {\n print: boolean\n dev?: boolean\n level?: Level\n }\n\n let logpath = \"\"\n export function file() {\n return logpath\n }\n let write = (msg: any) => {\n process.stderr.write(msg)\n return msg.length\n }\n\n export async function init(options: Options) {\n if (options.level) level = options.level\n cleanup(Global.Path.log)\n if (options.print) return\n logpath = path.join(\n Global.Path.log,\n options.dev ? \"dev.log\" : new Date().toISOString().split(\".\")[0].replace(/:/g, \"\") + \".log\",\n )\n await fs.truncate(logpath).catch(() => {})\n const stream = createWriteStream(logpath, { flags: \"a\" })\n write = async (msg: any) => {\n return new Promise((resolve, reject) => {\n stream.write(msg, (err) => {\n if (err) reject(err)\n else resolve(msg.length)\n })\n })\n }\n }\n\n async function cleanup(dir: string) {\n const files = await Glob.scan(\"????-??-??T??????.log\", {\n cwd: dir,\n absolute: true,\n include: \"file\",\n })\n if (files.length <= 5) return\n\n const filesToDelete = files.slice(0, -10)\n await Promise.all(filesToDelete.map((file) => fs.unlink(file).catch(() => {})))\n }\n\n function formatError(error: Error, depth = 0): string {\n const result = error.message\n return error.cause instanceof Error && depth < 10\n ? result + \" Caused by: \" + formatError(error.cause, depth + 1)\n : result\n }\n\n let last = Date.now()\n export function create(tags?: Record<string, any>) {\n tags = tags || {}\n\n const service = tags[\"service\"]\n if (service && typeof service === \"string\") {\n const cached = loggers.get(service)\n if (cached) {\n return cached\n }\n }\n\n function build(message: any, extra?: Record<string, any>) {\n const prefix = Object.entries({\n ...tags,\n ...extra,\n })\n .filter(([_, value]) => value !== undefined && value !== null)\n .map(([key, value]) => {\n const prefix = `${key}=`\n if (value instanceof Error) return prefix + formatError(value)\n if (typeof value === \"object\") return prefix + JSON.stringify(value)\n return prefix + value\n })\n .join(\" \")\n const next = new Date()\n const diff = next.getTime() - last\n last = next.getTime()\n return [next.toISOString().split(\".\")[0], \"+\" + diff + \"ms\", prefix, message].filter(Boolean).join(\" \") + \"\\n\"\n }\n const result: Logger = {\n debug(message?: any, extra?: Record<string, any>) {\n if (shouldLog(\"DEBUG\")) {\n write(\"DEBUG \" + build(message, extra))\n }\n },\n info(message?: any, extra?: Record<string, any>) {\n if (shouldLog(\"INFO\")) {\n write(\"INFO \" + build(message, extra))\n }\n },\n error(message?: any, extra?: Record<string, any>) {\n if (shouldLog(\"ERROR\")) {\n write(\"ERROR \" + build(message, extra))\n }\n },\n warn(message?: any, extra?: Record<string, any>) {\n if (shouldLog(\"WARN\")) {\n write(\"WARN \" + build(message, extra))\n }\n },\n tag(key: string, value: string) {\n if (tags) tags[key] = value\n return result\n },\n clone() {\n return Log.create({ ...tags })\n },\n time(message: string, extra?: Record<string, any>) {\n const now = Date.now()\n result.info(message, { status: \"started\", ...extra })\n function stop() {\n result.info(message, {\n status: \"completed\",\n duration: Date.now() - now,\n ...extra,\n })\n }\n return {\n stop,\n [Symbol.dispose]() {\n stop()\n },\n }\n },\n }\n\n if (service && typeof service === \"string\") {\n loggers.set(service, result)\n }\n\n return result\n }\n}\n", "import fs from \"fs/promises\"\nimport { xdgData, xdgCache, xdgConfig, xdgState } from \"xdg-basedir\"\nimport path from \"path\"\nimport os from \"os\"\nimport { Filesystem } from \"../util/filesystem\"\n\nconst app = \"opencode\"\n\n// OPENCODE_DATA_DIR: override data/state/config/log to a custom directory (e.g. alchemylab isolation)\nconst customDataDir = process.env[\"OPENCODE_DATA_DIR\"]\nconst data = customDataDir || path.join(xdgData!, app)\nconst cache = path.join(xdgCache!, app)\nconst config = customDataDir ? path.join(customDataDir, \"config\") : path.join(xdgConfig!, app)\nconst state = customDataDir ? path.join(customDataDir, \"state\") : path.join(xdgState!, app)\n\nexport namespace Global {\n export const Path = {\n // Allow override via OPENCODE_TEST_HOME for test isolation\n get home() {\n return process.env.OPENCODE_TEST_HOME || os.homedir()\n },\n data,\n bin: path.join(cache, \"bin\"),\n log: path.join(data, \"log\"),\n cache,\n config,\n state,\n }\n}\n\nawait Promise.all([\n fs.mkdir(Global.Path.data, { recursive: true }),\n fs.mkdir(Global.Path.config, { recursive: true }),\n fs.mkdir(Global.Path.state, { recursive: true }),\n fs.mkdir(Global.Path.log, { recursive: true }),\n fs.mkdir(Global.Path.bin, { recursive: true }),\n])\n\nconst CACHE_VERSION = \"21\"\n\nconst version = await Filesystem.readText(path.join(Global.Path.cache, \"version\")).catch(() => \"0\")\n\nif (version !== CACHE_VERSION) {\n try {\n const contents = await fs.readdir(Global.Path.cache)\n await Promise.all(\n contents.map((item) =>\n fs.rm(path.join(Global.Path.cache, item), {\n recursive: true,\n force: true,\n }),\n ),\n )\n } catch (e) {}\n await Filesystem.write(path.join(Global.Path.cache, \"version\"), CACHE_VERSION)\n}\n", "import { AsyncLocalStorage } from \"async_hooks\"\n\nexport namespace Context {\n export class NotFound extends Error {\n constructor(public override readonly name: string) {\n super(`No context found for ${name}`)\n }\n }\n\n export function create<T>(name: string) {\n const storage = new AsyncLocalStorage<T>()\n return {\n use() {\n const result = storage.getStore()\n if (!result) {\n throw new NotFound(name)\n }\n return result\n },\n provide<R>(value: T, fn: () => R) {\n return storage.run(value, fn)\n },\n }\n }\n}\n", "import z from \"zod\"\nimport { and, Database, eq } from \"../storage/db\"\nimport { ProjectTable } from \"./project.sql\"\nimport { SessionTable } from \"../session/session.sql\"\nimport { Log } from \"../util/log\"\nimport { Flag } from \"@/flag/flag\"\nimport { BusEvent } from \"@/bus/bus-event\"\nimport { GlobalBus } from \"@/bus/global\"\nimport { which } from \"../util/which\"\nimport { ProjectID } from \"./schema\"\nimport { Effect, Layer, Path, Scope, ServiceMap, Stream } from \"effect\"\nimport { ChildProcess, ChildProcessSpawner } from \"effect/unstable/process\"\nimport { NodeFileSystem, NodePath } from \"@effect/platform-node\"\nimport { makeRuntime } from \"@/effect/run-service\"\nimport { AppFileSystem } from \"@/filesystem\"\nimport * as CrossSpawnSpawner from \"@/effect/cross-spawn-spawner\"\n\nexport namespace Project {\n const log = Log.create({ service: \"project\" })\n\n export const Info = z\n .object({\n id: ProjectID.zod,\n worktree: z.string(),\n vcs: z.literal(\"git\").optional(),\n name: z.string().optional(),\n icon: z\n .object({\n url: z.string().optional(),\n override: z.string().optional(),\n color: z.string().optional(),\n })\n .optional(),\n commands: z\n .object({\n start: z.string().optional().describe(\"Startup script to run when creating a new workspace (worktree)\"),\n })\n .optional(),\n time: z.object({\n created: z.number(),\n updated: z.number(),\n initialized: z.number().optional(),\n }),\n sandboxes: z.array(z.string()),\n })\n .meta({\n ref: \"Project\",\n })\n export type Info = z.infer<typeof Info>\n\n export const Event = {\n Updated: BusEvent.define(\"project.updated\", Info),\n }\n\n type Row = typeof ProjectTable.$inferSelect\n\n export function fromRow(row: Row): Info {\n const icon =\n row.icon_url || row.icon_color\n ? { url: row.icon_url ?? undefined, color: row.icon_color ?? undefined }\n : undefined\n return {\n id: row.id,\n worktree: row.worktree,\n vcs: row.vcs ? Info.shape.vcs.parse(row.vcs) : undefined,\n name: row.name ?? undefined,\n icon,\n time: {\n created: row.time_created,\n updated: row.time_updated,\n initialized: row.time_initialized ?? undefined,\n },\n sandboxes: row.sandboxes,\n commands: row.commands ?? undefined,\n }\n }\n\n export const UpdateInput = z.object({\n projectID: ProjectID.zod,\n name: z.string().optional(),\n icon: Info.shape.icon.optional(),\n commands: Info.shape.commands.optional(),\n })\n export type UpdateInput = z.infer<typeof UpdateInput>\n\n // ---------------------------------------------------------------------------\n // Effect service\n // ---------------------------------------------------------------------------\n\n export interface Interface {\n readonly fromDirectory: (directory: string) => Effect.Effect<{ project: Info; sandbox: string }>\n readonly discover: (input: Info) => Effect.Effect<void>\n readonly list: () => Effect.Effect<Info[]>\n readonly get: (id: ProjectID) => Effect.Effect<Info | undefined>\n readonly update: (input: UpdateInput) => Effect.Effect<Info>\n readonly initGit: (input: { directory: string; project: Info }) => Effect.Effect<Info>\n readonly setInitialized: (id: ProjectID) => Effect.Effect<void>\n readonly sandboxes: (id: ProjectID) => Effect.Effect<string[]>\n readonly addSandbox: (id: ProjectID, directory: string) => Effect.Effect<void>\n readonly removeSandbox: (id: ProjectID, directory: string) => Effect.Effect<void>\n }\n\n export class Service extends ServiceMap.Service<Service, Interface>()(\"@opencode/Project\") {}\n\n type GitResult = { code: number; text: string; stderr: string }\n\n export const layer: Layer.Layer<\n Service,\n never,\n AppFileSystem.Service | Path.Path | ChildProcessSpawner.ChildProcessSpawner\n > = Layer.effect(\n Service,\n Effect.gen(function* () {\n const fs = yield* AppFileSystem.Service\n const pathSvc = yield* Path.Path\n const spawner = yield* ChildProcessSpawner.ChildProcessSpawner\n\n const git = Effect.fnUntraced(\n function* (args: string[], opts?: { cwd?: string }) {\n const handle = yield* spawner.spawn(\n ChildProcess.make(\"git\", args, { cwd: opts?.cwd, extendEnv: true, stdin: \"ignore\" }),\n )\n const [text, stderr] = yield* Effect.all(\n [Stream.mkString(Stream.decodeText(handle.stdout)), Stream.mkString(Stream.decodeText(handle.stderr))],\n { concurrency: 2 },\n )\n const code = yield* handle.exitCode\n return { code, text, stderr } satisfies GitResult\n },\n Effect.scoped,\n Effect.catch(() => Effect.succeed({ code: 1, text: \"\", stderr: \"\" } satisfies GitResult)),\n )\n\n const db = <T>(fn: (d: Parameters<typeof Database.use>[0] extends (trx: infer D) => any ? D : never) => T) =>\n Effect.sync(() => Database.use(fn))\n\n const emitUpdated = (data: Info) =>\n Effect.sync(() =>\n GlobalBus.emit(\"event\", {\n payload: { type: Event.Updated.type, properties: data },\n }),\n )\n\n const fakeVcs = Info.shape.vcs.parse(Flag.OPENCODE_FAKE_VCS)\n\n const resolveGitPath = (cwd: string, name: string) => {\n if (!name) return cwd\n name = name.replace(/[\\r\\n]+$/, \"\")\n if (!name) return cwd\n name = AppFileSystem.windowsPath(name)\n if (pathSvc.isAbsolute(name)) return pathSvc.normalize(name)\n return pathSvc.resolve(cwd, name)\n }\n\n const scope = yield* Scope.Scope\n\n const readCachedProjectId = Effect.fnUntraced(function* (dir: string) {\n return yield* fs.readFileString(pathSvc.join(dir, \"opencode\")).pipe(\n Effect.map((x) => x.trim()),\n Effect.map(ProjectID.make),\n Effect.catch(() => Effect.succeed(undefined)),\n )\n })\n\n const fromDirectory = Effect.fn(\"Project.fromDirectory\")(function* (directory: string) {\n log.info(\"fromDirectory\", { directory })\n\n // Phase 1: discover git info\n type DiscoveryResult = { id: ProjectID; worktree: string; sandbox: string; vcs: Info[\"vcs\"] }\n\n const data: DiscoveryResult = yield* Effect.gen(function* () {\n const dotgitMatches = yield* fs.up({ targets: [\".git\"], start: directory }).pipe(Effect.orDie)\n const dotgit = dotgitMatches[0]\n\n if (!dotgit) {\n return {\n id: ProjectID.global,\n worktree: \"/\",\n sandbox: \"/\",\n vcs: fakeVcs,\n }\n }\n\n let sandbox = pathSvc.dirname(dotgit)\n const gitBinary = yield* Effect.sync(() => which(\"git\"))\n let id = yield* readCachedProjectId(dotgit)\n\n if (!gitBinary) {\n return {\n id: id ?? ProjectID.global,\n worktree: sandbox,\n sandbox,\n vcs: fakeVcs,\n }\n }\n\n const commonDir = yield* git([\"rev-parse\", \"--git-common-dir\"], { cwd: sandbox })\n if (commonDir.code !== 0) {\n return {\n id: id ?? ProjectID.global,\n worktree: sandbox,\n sandbox,\n vcs: fakeVcs,\n }\n }\n const worktree = (() => {\n const common = resolveGitPath(sandbox, commonDir.text.trim())\n return common === sandbox ? sandbox : pathSvc.dirname(common)\n })()\n\n if (id == null) {\n id = yield* readCachedProjectId(pathSvc.join(worktree, \".git\"))\n }\n\n if (!id) {\n const revList = yield* git([\"rev-list\", \"--max-parents=0\", \"HEAD\"], { cwd: sandbox })\n const roots = revList.text\n .split(\"\\n\")\n .filter(Boolean)\n .map((x) => x.trim())\n .toSorted()\n\n id = roots[0] ? ProjectID.make(roots[0]) : undefined\n if (id) {\n yield* fs.writeFileString(pathSvc.join(worktree, \".git\", \"opencode\"), id).pipe(Effect.ignore)\n }\n }\n\n if (!id) {\n return { id: ProjectID.global, worktree: sandbox, sandbox, vcs: \"git\" as const }\n }\n\n const topLevel = yield* git([\"rev-parse\", \"--show-toplevel\"], { cwd: sandbox })\n if (topLevel.code !== 0) {\n return {\n id,\n worktree: sandbox,\n sandbox,\n vcs: fakeVcs,\n }\n }\n sandbox = resolveGitPath(sandbox, topLevel.text.trim())\n\n return { id, sandbox, worktree, vcs: \"git\" as const }\n })\n\n // Phase 2: upsert\n const row = yield* db((d) => d.select().from(ProjectTable).where(eq(ProjectTable.id, data.id)).get())\n const existing = row\n ? fromRow(row)\n : {\n id: data.id,\n worktree: data.worktree,\n vcs: data.vcs,\n sandboxes: [] as string[],\n time: { created: Date.now(), updated: Date.now() },\n }\n\n if (Flag.OPENCODE_EXPERIMENTAL_ICON_DISCOVERY)\n yield* discover(existing).pipe(Effect.ignore, Effect.forkIn(scope))\n\n const result: Info = {\n ...existing,\n worktree: data.worktree,\n vcs: data.vcs,\n time: { ...existing.time, updated: Date.now() },\n }\n if (data.sandbox !== result.worktree && !result.sandboxes.includes(data.sandbox))\n result.sandboxes.push(data.sandbox)\n result.sandboxes = yield* Effect.forEach(\n result.sandboxes,\n (s) =>\n fs.exists(s).pipe(\n Effect.orDie,\n Effect.map((exists) => (exists ? s : undefined)),\n ),\n { concurrency: \"unbounded\" },\n ).pipe(Effect.map((arr) => arr.filter((x): x is string => x !== undefined)))\n\n yield* db((d) =>\n d\n .insert(ProjectTable)\n .values({\n id: result.id,\n worktree: result.worktree,\n vcs: result.vcs ?? null,\n name: result.name,\n icon_url: result.icon?.url,\n icon_color: result.icon?.color,\n time_created: result.time.created,\n time_updated: result.time.updated,\n time_initialized: result.time.initialized,\n sandboxes: result.sandboxes,\n commands: result.commands,\n })\n .onConflictDoUpdate({\n target: ProjectTable.id,\n set: {\n worktree: result.worktree,\n vcs: result.vcs ?? null,\n name: result.name,\n icon_url: result.icon?.url,\n icon_color: result.icon?.color,\n time_updated: result.time.updated,\n time_initialized: result.time.initialized,\n sandboxes: result.sandboxes,\n commands: result.commands,\n },\n })\n .run(),\n )\n\n if (data.id !== ProjectID.global) {\n yield* db((d) =>\n d\n .update(SessionTable)\n .set({ project_id: data.id })\n .where(and(eq(SessionTable.project_id, ProjectID.global), eq(SessionTable.directory, data.worktree)))\n .run(),\n )\n }\n\n yield* emitUpdated(result)\n return { project: result, sandbox: data.sandbox }\n })\n\n const discover = Effect.fn(\"Project.discover\")(function* (input: Info) {\n if (input.vcs !== \"git\") return\n if (input.icon?.override) return\n if (input.icon?.url) return\n\n const matches = yield* fs\n .glob(\"**/favicon.{ico,png,svg,jpg,jpeg,webp}\", {\n cwd: input.worktree,\n absolute: true,\n include: \"file\",\n })\n .pipe(Effect.orDie)\n const shortest = matches.sort((a, b) => a.length - b.length)[0]\n if (!shortest) return\n\n const buffer = yield* fs.readFile(shortest).pipe(Effect.orDie)\n const base64 = Buffer.from(buffer).toString(\"base64\")\n const mime = AppFileSystem.mimeType(shortest)\n const url = `data:${mime};base64,${base64}`\n yield* update({ projectID: input.id, icon: { url } })\n })\n\n const list = Effect.fn(\"Project.list\")(function* () {\n return yield* db((d) => d.select().from(ProjectTable).all().map(fromRow))\n })\n\n const get = Effect.fn(\"Project.get\")(function* (id: ProjectID) {\n const row = yield* db((d) => d.select().from(ProjectTable).where(eq(ProjectTable.id, id)).get())\n return row ? fromRow(row) : undefined\n })\n\n const update = Effect.fn(\"Project.update\")(function* (input: UpdateInput) {\n const result = yield* db((d) =>\n d\n .update(ProjectTable)\n .set({\n name: input.name,\n icon_url: input.icon?.url,\n icon_color: input.icon?.color,\n commands: input.commands,\n time_updated: Date.now(),\n })\n .where(eq(ProjectTable.id, input.projectID))\n .returning()\n .get(),\n )\n if (!result) throw new Error(`Project not found: ${input.projectID}`)\n const data = fromRow(result)\n yield* emitUpdated(data)\n return data\n })\n\n const initGit = Effect.fn(\"Project.initGit\")(function* (input: { directory: string; project: Info }) {\n if (input.project.vcs === \"git\") return input.project\n if (!(yield* Effect.sync(() => which(\"git\")))) throw new Error(\"Git is not installed\")\n const result = yield* git([\"init\", \"--quiet\"], { cwd: input.directory })\n if (result.code !== 0) {\n throw new Error(result.stderr.trim() || result.text.trim() || \"Failed to initialize git repository\")\n }\n const { project } = yield* fromDirectory(input.directory)\n return project\n })\n\n const setInitialized = Effect.fn(\"Project.setInitialized\")(function* (id: ProjectID) {\n yield* db((d) =>\n d.update(ProjectTable).set({ time_initialized: Date.now() }).where(eq(ProjectTable.id, id)).run(),\n )\n })\n\n const sandboxes = Effect.fn(\"Project.sandboxes\")(function* (id: ProjectID) {\n const row = yield* db((d) => d.select().from(ProjectTable).where(eq(ProjectTable.id, id)).get())\n if (!row) return []\n const data = fromRow(row)\n return yield* Effect.forEach(\n data.sandboxes,\n (dir) =>\n fs.isDir(dir).pipe(\n Effect.orDie,\n Effect.map((ok) => (ok ? dir : undefined)),\n ),\n { concurrency: \"unbounded\" },\n ).pipe(Effect.map((arr) => arr.filter((x): x is string => x !== undefined)))\n })\n\n const addSandbox = Effect.fn(\"Project.addSandbox\")(function* (id: ProjectID, directory: string) {\n const row = yield* db((d) => d.select().from(ProjectTable).where(eq(ProjectTable.id, id)).get())\n if (!row) throw new Error(`Project not found: ${id}`)\n const sboxes = [...row.sandboxes]\n if (!sboxes.includes(directory)) sboxes.push(directory)\n const result = yield* db((d) =>\n d\n .update(ProjectTable)\n .set({ sandboxes: sboxes, time_updated: Date.now() })\n .where(eq(ProjectTable.id, id))\n .returning()\n .get(),\n )\n if (!result) throw new Error(`Project not found: ${id}`)\n yield* emitUpdated(fromRow(result))\n })\n\n const removeSandbox = Effect.fn(\"Project.removeSandbox\")(function* (id: ProjectID, directory: string) {\n const row = yield* db((d) => d.select().from(ProjectTable).where(eq(ProjectTable.id, id)).get())\n if (!row) throw new Error(`Project not found: ${id}`)\n const sboxes = row.sandboxes.filter((s) => s !== directory)\n const result = yield* db((d) =>\n d\n .update(ProjectTable)\n .set({ sandboxes: sboxes, time_updated: Date.now() })\n .where(eq(ProjectTable.id, id))\n .returning()\n .get(),\n )\n if (!result) throw new Error(`Project not found: ${id}`)\n yield* emitUpdated(fromRow(result))\n })\n\n return Service.of({\n fromDirectory,\n discover,\n list,\n get,\n update,\n initGit,\n setInitialized,\n sandboxes,\n addSandbox,\n removeSandbox,\n })\n }),\n )\n\n export const defaultLayer = layer.pipe(\n Layer.provide(CrossSpawnSpawner.defaultLayer),\n Layer.provide(AppFileSystem.defaultLayer),\n Layer.provide(NodePath.layer),\n )\n const { runPromise } = makeRuntime(Service, defaultLayer)\n\n // ---------------------------------------------------------------------------\n // Promise-based API (delegates to Effect service via runPromise)\n // ---------------------------------------------------------------------------\n\n export function fromDirectory(directory: string) {\n return runPromise((svc) => svc.fromDirectory(directory))\n }\n\n export function discover(input: Info) {\n return runPromise((svc) => svc.discover(input))\n }\n\n export function list() {\n return Database.use((db) =>\n db\n .select()\n .from(ProjectTable)\n .all()\n .map((row) => fromRow(row)),\n )\n }\n\n export function get(id: ProjectID): Info | undefined {\n const row = Database.use((db) => db.select().from(ProjectTable).where(eq(ProjectTable.id, id)).get())\n if (!row) return undefined\n return fromRow(row)\n }\n\n export function setInitialized(id: ProjectID) {\n Database.use((db) =>\n db.update(ProjectTable).set({ time_initialized: Date.now() }).where(eq(ProjectTable.id, id)).run(),\n )\n }\n\n export function initGit(input: { directory: string; project: Info }) {\n return runPromise((svc) => svc.initGit(input))\n }\n\n export function update(input: UpdateInput) {\n return runPromise((svc) => svc.update(input))\n }\n\n export function sandboxes(id: ProjectID) {\n return runPromise((svc) => svc.sandboxes(id))\n }\n\n export function addSandbox(id: ProjectID, directory: string) {\n return runPromise((svc) => svc.addSandbox(id, directory))\n }\n\n export function removeSandbox(id: ProjectID, directory: string) {\n return runPromise((svc) => svc.removeSandbox(id, directory))\n }\n}\n", "import { type NodeSQLiteDatabase } from \"drizzle-orm/node-sqlite\"\nimport { migrate } from \"drizzle-orm/node-sqlite/migrator\"\nimport { type SQLiteTransaction } from \"drizzle-orm/sqlite-core\"\nexport * from \"drizzle-orm\"\nimport { Context } from \"../util/context\"\nimport { lazy } from \"../util/lazy\"\nimport { Global } from \"../global\"\nimport { Log } from \"../util/log\"\nimport { NamedError } from \"@opencode-ai/util/error\"\nimport z from \"zod\"\nimport path from \"path\"\nimport { readFileSync, readdirSync, existsSync } from \"fs\"\nimport { Flag } from \"../flag/flag\"\nimport { CHANNEL } from \"../installation/meta\"\nimport { InstanceState } from \"@/effect/instance-state\"\nimport { iife } from \"@/util/iife\"\nimport { init } from \"#db\"\n\ndeclare const OPENCODE_MIGRATIONS: { sql: string; timestamp: number; name: string }[] | undefined\n\nexport const NotFoundError = NamedError.create(\n \"NotFoundError\",\n z.object({\n message: z.string(),\n }),\n)\n\nconst log = Log.create({ service: \"db\" })\n\nexport namespace Database {\n export function getChannelPath() {\n if ([\"latest\", \"beta\"].includes(CHANNEL) || Flag.OPENCODE_DISABLE_CHANNEL_DB)\n return path.join(Global.Path.data, \"opencode.db\")\n const safe = CHANNEL.replace(/[^a-zA-Z0-9._-]/g, \"-\")\n return path.join(Global.Path.data, `opencode-${safe}.db`)\n }\n\n export const Path = iife(() => {\n if (Flag.OPENCODE_DB) {\n if (Flag.OPENCODE_DB === \":memory:\" || path.isAbsolute(Flag.OPENCODE_DB)) return Flag.OPENCODE_DB\n return path.join(Global.Path.data, Flag.OPENCODE_DB)\n }\n return getChannelPath()\n })\n\n export type Transaction = SQLiteTransaction<\"sync\", void>\n\n type Client = NodeSQLiteDatabase\n\n type Journal = { sql: string; timestamp: number; name: string }[]\n\n function time(tag: string) {\n const match = /^(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})/.exec(tag)\n if (!match) return 0\n return Date.UTC(\n Number(match[1]),\n Number(match[2]) - 1,\n Number(match[3]),\n Number(match[4]),\n Number(match[5]),\n Number(match[6]),\n )\n }\n\n function migrations(dir: string): Journal {\n const dirs = readdirSync(dir, { withFileTypes: true })\n .filter((entry) => entry.isDirectory())\n .map((entry) => entry.name)\n\n const sql = dirs\n .map((name) => {\n const file = path.join(dir, name, \"migration.sql\")\n if (!existsSync(file)) return\n return {\n sql: readFileSync(file, \"utf-8\"),\n timestamp: time(name),\n name,\n }\n })\n .filter(Boolean) as Journal\n\n return sql.sort((a, b) => a.timestamp - b.timestamp)\n }\n\n export const Client = lazy(() => {\n log.info(\"opening database\", { path: Path })\n\n const db = init(Path)\n\n db.run(\"PRAGMA journal_mode = WAL\")\n db.run(\"PRAGMA synchronous = NORMAL\")\n db.run(\"PRAGMA busy_timeout = 5000\")\n db.run(\"PRAGMA cache_size = -64000\")\n db.run(\"PRAGMA foreign_keys = ON\")\n db.run(\"PRAGMA wal_checkpoint(PASSIVE)\")\n\n // Apply schema migrations\n const migrationsDir = path.join(import.meta.dirname, \"../packages/opencode/migration\")\n if (typeof OPENCODE_MIGRATIONS !== \"undefined\") {\n // Bundled mode (bun build) \u2014 raw journal entries\n const entries = OPENCODE_MIGRATIONS\n if (entries.length > 0) {\n log.info(\"applying migrations\", { count: entries.length, mode: \"bundled\" })\n if (Flag.OPENCODE_SKIP_MIGRATIONS) {\n for (const item of entries) item.sql = \"select 1;\"\n }\n migrate(db, entries as any)\n }\n } else {\n // Dev mode \u2014 pass folder path (compatible with both bun-sqlite and node-sqlite migrators)\n const entries = migrations(migrationsDir)\n log.info(\"applying migrations\", { count: entries.length, mode: \"dev\" })\n if (!Flag.OPENCODE_SKIP_MIGRATIONS && entries.length > 0) {\n migrate(db, { migrationsFolder: migrationsDir } as any)\n }\n }\n\n return db\n })\n\n export function close() {\n Client().$client.close()\n Client.reset()\n }\n\n export type TxOrDb = Transaction | Client\n\n const ctx = Context.create<{\n tx: TxOrDb\n effects: (() => void | Promise<void>)[]\n }>(\"database\")\n\n export function use<T>(callback: (trx: TxOrDb) => T): T {\n try {\n return callback(ctx.use().tx)\n } catch (err) {\n if (err instanceof Context.NotFound) {\n const effects: (() => void | Promise<void>)[] = []\n const result = ctx.provide({ effects, tx: Client() }, () => callback(Client()))\n for (const effect of effects) effect()\n return result\n }\n throw err\n }\n }\n\n export function effect(fn: () => any | Promise<any>) {\n const bound = InstanceState.bind(fn)\n try {\n ctx.use().effects.push(bound)\n } catch {\n bound()\n }\n }\n\n type NotPromise<T> = T extends Promise<any> ? never : T\n\n export function transaction<T>(\n callback: (tx: TxOrDb) => NotPromise<T>,\n options?: {\n behavior?: \"deferred\" | \"immediate\" | \"exclusive\"\n },\n ): NotPromise<T> {\n try {\n return callback(ctx.use().tx)\n } catch (err) {\n if (err instanceof Context.NotFound) {\n const effects: (() => void | Promise<void>)[] = []\n const txCallback = InstanceState.bind((tx: TxOrDb) => ctx.provide({ tx, effects }, () => callback(tx)))\n const result = Client().transaction(txCallback, { behavior: options?.behavior })\n for (const effect of effects) effect()\n return result as NotPromise<T>\n }\n throw err\n }\n }\n}\n", "export function lazy<T>(fn: () => T) {\n let value: T | undefined\n let loaded = false\n\n const result = (): T => {\n if (loaded) return value as T\n try {\n value = fn()\n loaded = true\n return value as T\n } catch (e) {\n // Don't mark as loaded if initialization failed\n throw e\n }\n }\n\n result.reset = () => {\n loaded = false\n value = undefined\n }\n\n return result\n}\n", "import z from \"zod\"\n\nexport abstract class NamedError extends Error {\n abstract schema(): z.core.$ZodType\n abstract toObject(): { name: string; data: any }\n\n static create<Name extends string, Data extends z.core.$ZodType>(name: Name, data: Data) {\n const schema = z\n .object({\n name: z.literal(name),\n data,\n })\n .meta({\n ref: name,\n })\n const result = class extends NamedError {\n public static readonly Schema = schema\n\n public override readonly name = name as Name\n\n constructor(\n public readonly data: z.input<Data>,\n options?: ErrorOptions,\n ) {\n super(name, options)\n this.name = name\n }\n\n static isInstance(input: any): input is InstanceType<typeof result> {\n return typeof input === \"object\" && \"name\" in input && input.name === name\n }\n\n schema() {\n return schema\n }\n\n toObject() {\n return {\n name: name,\n data: this.data,\n }\n }\n }\n Object.defineProperty(result, \"name\", { value: name })\n return result\n }\n\n public static readonly Unknown = NamedError.create(\n \"UnknownError\",\n z.object({\n message: z.string(),\n }),\n )\n}\n", "import { Config } from \"effect\"\n\nfunction truthy(key: string) {\n const value = process.env[key]?.toLowerCase()\n return value === \"true\" || value === \"1\"\n}\n\nfunction falsy(key: string) {\n const value = process.env[key]?.toLowerCase()\n return value === \"false\" || value === \"0\"\n}\n\nexport namespace Flag {\n export const OPENCODE_AUTO_SHARE = truthy(\"OPENCODE_AUTO_SHARE\")\n export const OPENCODE_AUTO_HEAP_SNAPSHOT = truthy(\"OPENCODE_AUTO_HEAP_SNAPSHOT\")\n export const OPENCODE_GIT_BASH_PATH = process.env[\"OPENCODE_GIT_BASH_PATH\"]\n export const OPENCODE_CONFIG = process.env[\"OPENCODE_CONFIG\"]\n export declare const OPENCODE_PURE: boolean\n export declare const OPENCODE_TUI_CONFIG: string | undefined\n export declare const OPENCODE_CONFIG_DIR: string | undefined\n export declare const OPENCODE_PLUGIN_META_FILE: string | undefined\n export const OPENCODE_CONFIG_CONTENT = process.env[\"OPENCODE_CONFIG_CONTENT\"]\n export const OPENCODE_DISABLE_AUTOUPDATE = truthy(\"OPENCODE_DISABLE_AUTOUPDATE\")\n export const OPENCODE_ALWAYS_NOTIFY_UPDATE = truthy(\"OPENCODE_ALWAYS_NOTIFY_UPDATE\")\n export const OPENCODE_DISABLE_PRUNE = truthy(\"OPENCODE_DISABLE_PRUNE\")\n export const OPENCODE_DISABLE_TERMINAL_TITLE = truthy(\"OPENCODE_DISABLE_TERMINAL_TITLE\")\n export const OPENCODE_SHOW_TTFD = truthy(\"OPENCODE_SHOW_TTFD\")\n export const OPENCODE_PERMISSION = process.env[\"OPENCODE_PERMISSION\"]\n export const OPENCODE_DISABLE_DEFAULT_PLUGINS = truthy(\"OPENCODE_DISABLE_DEFAULT_PLUGINS\")\n export const OPENCODE_DISABLE_LSP_DOWNLOAD = truthy(\"OPENCODE_DISABLE_LSP_DOWNLOAD\")\n export const OPENCODE_ENABLE_EXPERIMENTAL_MODELS = truthy(\"OPENCODE_ENABLE_EXPERIMENTAL_MODELS\")\n export const OPENCODE_DISABLE_AUTOCOMPACT = truthy(\"OPENCODE_DISABLE_AUTOCOMPACT\")\n export const OPENCODE_DISABLE_MODELS_FETCH = truthy(\"OPENCODE_DISABLE_MODELS_FETCH\")\n export const OPENCODE_DISABLE_MOUSE = truthy(\"OPENCODE_DISABLE_MOUSE\")\n export const OPENCODE_DISABLE_CLAUDE_CODE = truthy(\"OPENCODE_DISABLE_CLAUDE_CODE\")\n export const OPENCODE_DISABLE_CLAUDE_CODE_PROMPT =\n OPENCODE_DISABLE_CLAUDE_CODE || truthy(\"OPENCODE_DISABLE_CLAUDE_CODE_PROMPT\")\n export const OPENCODE_DISABLE_CLAUDE_CODE_SKILLS =\n OPENCODE_DISABLE_CLAUDE_CODE || truthy(\"OPENCODE_DISABLE_CLAUDE_CODE_SKILLS\")\n export const OPENCODE_DISABLE_EXTERNAL_SKILLS =\n OPENCODE_DISABLE_CLAUDE_CODE_SKILLS || truthy(\"OPENCODE_DISABLE_EXTERNAL_SKILLS\")\n export declare const OPENCODE_DISABLE_PROJECT_CONFIG: boolean\n export const OPENCODE_FAKE_VCS = process.env[\"OPENCODE_FAKE_VCS\"]\n export declare const OPENCODE_CLIENT: string\n export const OPENCODE_SERVER_PASSWORD = process.env[\"OPENCODE_SERVER_PASSWORD\"]\n export const OPENCODE_SERVER_USERNAME = process.env[\"OPENCODE_SERVER_USERNAME\"]\n export const OPENCODE_ENABLE_QUESTION_TOOL = truthy(\"OPENCODE_ENABLE_QUESTION_TOOL\")\n\n // Experimental\n export const OPENCODE_EXPERIMENTAL = truthy(\"OPENCODE_EXPERIMENTAL\")\n export const OPENCODE_EXPERIMENTAL_FILEWATCHER = Config.boolean(\"OPENCODE_EXPERIMENTAL_FILEWATCHER\").pipe(\n Config.withDefault(false),\n )\n export const OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER = Config.boolean(\n \"OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER\",\n ).pipe(Config.withDefault(false))\n export const OPENCODE_EXPERIMENTAL_ICON_DISCOVERY =\n OPENCODE_EXPERIMENTAL || truthy(\"OPENCODE_EXPERIMENTAL_ICON_DISCOVERY\")\n\n const copy = process.env[\"OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT\"]\n export const OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT =\n copy === undefined ? process.platform === \"win32\" : truthy(\"OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT\")\n export const OPENCODE_ENABLE_EXA =\n truthy(\"OPENCODE_ENABLE_EXA\") || OPENCODE_EXPERIMENTAL || truthy(\"OPENCODE_EXPERIMENTAL_EXA\")\n export const OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS = number(\"OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS\")\n export const OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX = number(\"OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX\")\n export const OPENCODE_EXPERIMENTAL_OXFMT = OPENCODE_EXPERIMENTAL || truthy(\"OPENCODE_EXPERIMENTAL_OXFMT\")\n export const OPENCODE_EXPERIMENTAL_LSP_TY = truthy(\"OPENCODE_EXPERIMENTAL_LSP_TY\")\n export const OPENCODE_EXPERIMENTAL_LSP_TOOL = OPENCODE_EXPERIMENTAL || truthy(\"OPENCODE_EXPERIMENTAL_LSP_TOOL\")\n export const OPENCODE_DISABLE_FILETIME_CHECK = Config.boolean(\"OPENCODE_DISABLE_FILETIME_CHECK\").pipe(\n Config.withDefault(false),\n )\n export const OPENCODE_EXPERIMENTAL_PLAN_MODE = OPENCODE_EXPERIMENTAL || truthy(\"OPENCODE_EXPERIMENTAL_PLAN_MODE\")\n export const OPENCODE_EXPERIMENTAL_WORKSPACES = OPENCODE_EXPERIMENTAL || truthy(\"OPENCODE_EXPERIMENTAL_WORKSPACES\")\n export const OPENCODE_EXPERIMENTAL_MARKDOWN = !falsy(\"OPENCODE_EXPERIMENTAL_MARKDOWN\")\n export const OPENCODE_MODELS_URL = process.env[\"OPENCODE_MODELS_URL\"]\n export const OPENCODE_MODELS_PATH = process.env[\"OPENCODE_MODELS_PATH\"]\n export const OPENCODE_DISABLE_EMBEDDED_WEB_UI = truthy(\"OPENCODE_DISABLE_EMBEDDED_WEB_UI\")\n export const OPENCODE_DB = process.env[\"OPENCODE_DB\"]\n export const OPENCODE_DISABLE_CHANNEL_DB = truthy(\"OPENCODE_DISABLE_CHANNEL_DB\")\n export const OPENCODE_SKIP_MIGRATIONS = truthy(\"OPENCODE_SKIP_MIGRATIONS\")\n export const OPENCODE_STRICT_CONFIG_DEPS = truthy(\"OPENCODE_STRICT_CONFIG_DEPS\")\n\n function number(key: string) {\n const value = process.env[key]\n if (!value) return undefined\n const parsed = Number(value)\n return Number.isInteger(parsed) && parsed > 0 ? parsed : undefined\n }\n}\n\n// Dynamic getter for OPENCODE_DISABLE_PROJECT_CONFIG\n// This must be evaluated at access time, not module load time,\n// because external tooling may set this env var at runtime\nObject.defineProperty(Flag, \"OPENCODE_DISABLE_PROJECT_CONFIG\", {\n get() {\n return truthy(\"OPENCODE_DISABLE_PROJECT_CONFIG\")\n },\n enumerable: true,\n configurable: false,\n})\n\n// Dynamic getter for OPENCODE_TUI_CONFIG\n// This must be evaluated at access time, not module load time,\n// because tests and external tooling may set this env var at runtime\nObject.defineProperty(Flag, \"OPENCODE_TUI_CONFIG\", {\n get() {\n return process.env[\"OPENCODE_TUI_CONFIG\"]\n },\n enumerable: true,\n configurable: false,\n})\n\n// Dynamic getter for OPENCODE_CONFIG_DIR\n// This must be evaluated at access time, not module load time,\n// because external tooling may set this env var at runtime\nObject.defineProperty(Flag, \"OPENCODE_CONFIG_DIR\", {\n get() {\n return process.env[\"OPENCODE_CONFIG_DIR\"]\n },\n enumerable: true,\n configurable: false,\n})\n\n// Dynamic getter for OPENCODE_PURE\n// This must be evaluated at access time, not module load time,\n// because the CLI can set this flag at runtime\nObject.defineProperty(Flag, \"OPENCODE_PURE\", {\n get() {\n return truthy(\"OPENCODE_PURE\")\n },\n enumerable: true,\n configurable: false,\n})\n\n// Dynamic getter for OPENCODE_PLUGIN_META_FILE\n// This must be evaluated at access time, not module load time,\n// because tests and external tooling may set this env var at runtime\nObject.defineProperty(Flag, \"OPENCODE_PLUGIN_META_FILE\", {\n get() {\n return process.env[\"OPENCODE_PLUGIN_META_FILE\"]\n },\n enumerable: true,\n configurable: false,\n})\n\n// Dynamic getter for OPENCODE_CLIENT\n// This must be evaluated at access time, not module load time,\n// because some commands override the client at runtime\nObject.defineProperty(Flag, \"OPENCODE_CLIENT\", {\n get() {\n return process.env[\"OPENCODE_CLIENT\"] ?? \"cli\"\n },\n enumerable: true,\n configurable: false,\n})\n", "declare global {\n const OPENCODE_VERSION: string\n const OPENCODE_CHANNEL: string\n}\n\nexport const VERSION = typeof OPENCODE_VERSION === \"string\" ? OPENCODE_VERSION : \"local\"\nexport const CHANNEL = typeof OPENCODE_CHANNEL === \"string\" ? OPENCODE_CHANNEL : \"local\"\n", "import { Effect, Fiber, ScopedCache, Scope, ServiceMap } from \"effect\"\nimport { Instance, type InstanceContext } from \"@/project/instance\"\nimport { Context } from \"@/util/context\"\nimport { InstanceRef } from \"./instance-ref\"\nimport { registerDisposer } from \"./instance-registry\"\n\nconst TypeId = \"~opencode/InstanceState\"\n\nexport interface InstanceState<A, E = never, R = never> {\n readonly [TypeId]: typeof TypeId\n readonly cache: ScopedCache.ScopedCache<string, A, E, R>\n}\n\nexport namespace InstanceState {\n export const bind = <F extends (...args: any[]) => any>(fn: F): F => {\n try {\n return Instance.bind(fn)\n } catch (err) {\n if (!(err instanceof Context.NotFound)) throw err\n }\n const fiber = Fiber.getCurrent()\n const ctx = fiber ? ServiceMap.getReferenceUnsafe(fiber.services, InstanceRef) : undefined\n if (!ctx) return fn\n return ((...args: any[]) => Instance.restore(ctx, () => fn(...args))) as F\n }\n\n export const context = Effect.gen(function* () {\n return (yield* InstanceRef) ?? Instance.current\n })\n\n export const directory = Effect.map(context, (ctx) => ctx.directory)\n\n export const make = <A, E = never, R = never>(\n init: (ctx: InstanceContext) => Effect.Effect<A, E, R | Scope.Scope>,\n ): Effect.Effect<InstanceState<A, E, Exclude<R, Scope.Scope>>, never, R | Scope.Scope> =>\n Effect.gen(function* () {\n const cache = yield* ScopedCache.make<string, A, E, R>({\n capacity: Number.POSITIVE_INFINITY,\n lookup: () =>\n Effect.gen(function* () {\n return yield* init(yield* context)\n }),\n })\n\n const off = registerDisposer((directory) => Effect.runPromise(ScopedCache.invalidate(cache, directory)))\n yield* Effect.addFinalizer(() => Effect.sync(off))\n\n return {\n [TypeId]: TypeId,\n cache,\n }\n })\n\n export const get = <A, E, R>(self: InstanceState<A, E, R>) =>\n Effect.gen(function* () {\n return yield* ScopedCache.get(self.cache, yield* directory)\n })\n\n export const use = <A, E, R, B>(self: InstanceState<A, E, R>, select: (value: A) => B) =>\n Effect.map(get(self), select)\n\n export const useEffect = <A, E, R, B, E2, R2>(\n self: InstanceState<A, E, R>,\n select: (value: A) => Effect.Effect<B, E2, R2>,\n ) => Effect.flatMap(get(self), select)\n\n export const has = <A, E, R>(self: InstanceState<A, E, R>) =>\n Effect.gen(function* () {\n return yield* ScopedCache.has(self.cache, yield* directory)\n })\n\n export const invalidate = <A, E, R>(self: InstanceState<A, E, R>) =>\n Effect.gen(function* () {\n return yield* ScopedCache.invalidate(self.cache, yield* directory)\n })\n\n /**\n * Effect finalizers run on the fiber scheduler after the original async\n * boundary, so ALS reads like Instance.directory can be gone by then.\n */\n export const withALS = <T>(fn: () => T) => Effect.map(context, (ctx) => Instance.restore(ctx, fn))\n}\n", "import { ServiceMap } from \"effect\"\nimport type { InstanceContext } from \"@/project/instance\"\n\nexport const InstanceRef = ServiceMap.Reference<InstanceContext | undefined>(\"~opencode/InstanceRef\", {\n defaultValue: () => undefined,\n})\n", "import { DatabaseSync } from \"node:sqlite\"\nimport { drizzle } from \"drizzle-orm/node-sqlite\"\n\nexport function init(path: string) {\n const sqlite = new DatabaseSync(path)\n const db = drizzle({ client: sqlite })\n return db\n}\n", "import { sqliteTable, text, integer } from \"drizzle-orm/sqlite-core\"\nimport { Timestamps } from \"../storage/schema.sql\"\nimport type { ProjectID } from \"./schema\"\n\nexport const ProjectTable = sqliteTable(\"project\", {\n id: text().$type<ProjectID>().primaryKey(),\n worktree: text().notNull(),\n vcs: text(),\n name: text(),\n icon_url: text(),\n icon_color: text(),\n ...Timestamps,\n time_initialized: integer(),\n sandboxes: text({ mode: \"json\" }).notNull().$type<string[]>(),\n commands: text({ mode: \"json\" }).$type<{ start?: string }>(),\n})\n", "import { integer } from \"drizzle-orm/sqlite-core\"\n\nexport const Timestamps = {\n time_created: integer()\n .notNull()\n .$default(() => Date.now()),\n time_updated: integer()\n .notNull()\n .$onUpdate(() => Date.now()),\n}\n", "import { sqliteTable, text, integer, index, primaryKey } from \"drizzle-orm/sqlite-core\"\nimport { ProjectTable } from \"../project/project.sql\"\nimport type { MessageV2 } from \"./message-v2\"\nimport type { Snapshot } from \"../snapshot\"\nimport type { Permission } from \"../permission\"\nimport type { ProjectID } from \"../project/schema\"\nimport type { SessionID, MessageID, PartID } from \"./schema\"\nimport type { WorkspaceID } from \"../control-plane/schema\"\nimport { Timestamps } from \"../storage/schema.sql\"\n\ntype PartData = Omit<MessageV2.Part, \"id\" | \"sessionID\" | \"messageID\">\ntype InfoData = Omit<MessageV2.Info, \"id\" | \"sessionID\">\n\nexport const SessionTable = sqliteTable(\n \"session\",\n {\n id: text().$type<SessionID>().primaryKey(),\n project_id: text()\n .$type<ProjectID>()\n .notNull()\n .references(() => ProjectTable.id, { onDelete: \"cascade\" }),\n workspace_id: text().$type<WorkspaceID>(),\n parent_id: text().$type<SessionID>(),\n slug: text().notNull(),\n directory: text().notNull(),\n title: text().notNull(),\n version: text().notNull(),\n share_url: text(),\n summary_additions: integer(),\n summary_deletions: integer(),\n summary_files: integer(),\n summary_diffs: text({ mode: \"json\" }).$type<Snapshot.FileDiff[]>(),\n revert: text({ mode: \"json\" }).$type<{ messageID: MessageID; partID?: PartID; snapshot?: string; diff?: string }>(),\n permission: text({ mode: \"json\" }).$type<Permission.Ruleset>(),\n ...Timestamps,\n time_compacting: integer(),\n time_archived: integer(),\n },\n (table) => [\n index(\"session_project_idx\").on(table.project_id),\n index(\"session_workspace_idx\").on(table.workspace_id),\n index(\"session_parent_idx\").on(table.parent_id),\n ],\n)\n\nexport const MessageTable = sqliteTable(\n \"message\",\n {\n id: text().$type<MessageID>().primaryKey(),\n session_id: text()\n .$type<SessionID>()\n .notNull()\n .references(() => SessionTable.id, { onDelete: \"cascade\" }),\n ...Timestamps,\n data: text({ mode: \"json\" }).notNull().$type<InfoData>(),\n },\n (table) => [index(\"message_session_time_created_id_idx\").on(table.session_id, table.time_created, table.id)],\n)\n\nexport const PartTable = sqliteTable(\n \"part\",\n {\n id: text().$type<PartID>().primaryKey(),\n message_id: text()\n .$type<MessageID>()\n .notNull()\n .references(() => MessageTable.id, { onDelete: \"cascade\" }),\n session_id: text().$type<SessionID>().notNull(),\n ...Timestamps,\n data: text({ mode: \"json\" }).notNull().$type<PartData>(),\n },\n (table) => [\n index(\"part_message_id_id_idx\").on(table.message_id, table.id),\n index(\"part_session_idx\").on(table.session_id),\n ],\n)\n\nexport const TodoTable = sqliteTable(\n \"todo\",\n {\n session_id: text()\n .$type<SessionID>()\n .notNull()\n .references(() => SessionTable.id, { onDelete: \"cascade\" }),\n content: text().notNull(),\n status: text().notNull(),\n priority: text().notNull(),\n position: integer().notNull(),\n ...Timestamps,\n },\n (table) => [\n primaryKey({ columns: [table.session_id, table.position] }),\n index(\"todo_session_idx\").on(table.session_id),\n ],\n)\n\nexport const PermissionTable = sqliteTable(\"permission\", {\n project_id: text()\n .primaryKey()\n .references(() => ProjectTable.id, { onDelete: \"cascade\" }),\n ...Timestamps,\n data: text({ mode: \"json\" }).notNull().$type<Permission.Ruleset>(),\n})\n", "import z from \"zod\"\nimport type { ZodType } from \"zod\"\n\nexport namespace BusEvent {\n export type Definition = ReturnType<typeof define>\n\n const registry = new Map<string, Definition>()\n\n export function define<Type extends string, Properties extends ZodType>(type: Type, properties: Properties) {\n const result = {\n type,\n properties,\n }\n registry.set(type, result)\n return result\n }\n\n export function payloads() {\n return z\n .discriminatedUnion(\n \"type\",\n registry\n .entries()\n .map(([type, def]) => {\n return z\n .object({\n type: z.literal(type),\n properties: def.properties,\n })\n .meta({\n ref: \"Event\" + \".\" + def.type,\n })\n })\n .toArray() as any,\n )\n .meta({\n ref: \"Event\",\n })\n }\n}\n", "import whichPkg from \"which\"\nimport path from \"path\"\nimport { Global } from \"../global\"\n\nexport function which(cmd: string, env?: NodeJS.ProcessEnv) {\n const base = env?.PATH ?? env?.Path ?? process.env.PATH ?? process.env.Path ?? \"\"\n const full = base ? base + path.delimiter + Global.Path.bin : Global.Path.bin\n const result = whichPkg.sync(cmd, {\n nothrow: true,\n path: full,\n pathExt: env?.PATHEXT ?? env?.PathExt ?? process.env.PATHEXT ?? process.env.PathExt,\n })\n return typeof result === \"string\" ? result : null\n}\n", "import { Schema } from \"effect\"\nimport z from \"zod\"\n\nimport { withStatics } from \"@/util/schema\"\n\nconst projectIdSchema = Schema.String.pipe(Schema.brand(\"ProjectID\"))\n\nexport type ProjectID = typeof projectIdSchema.Type\n\nexport const ProjectID = projectIdSchema.pipe(\n withStatics((schema: typeof projectIdSchema) => ({\n global: schema.makeUnsafe(\"global\"),\n make: (id: string) => schema.makeUnsafe(id),\n zod: z.string().pipe(z.custom<ProjectID>()),\n })),\n)\n", "import { NodeFileSystem } from \"@effect/platform-node\"\nimport { dirname, join, relative, resolve as pathResolve } from \"path\"\nimport { realpathSync } from \"fs\"\nimport * as NFS from \"fs/promises\"\nimport { lookup } from \"mime-types\"\nimport { Effect, FileSystem, Layer, Schema, ServiceMap } from \"effect\"\nimport type { PlatformError } from \"effect/PlatformError\"\nimport { Glob } from \"../util/glob\"\n\nexport namespace AppFileSystem {\n export class FileSystemError extends Schema.TaggedErrorClass<FileSystemError>()(\"FileSystemError\", {\n method: Schema.String,\n cause: Schema.optional(Schema.Defect),\n }) {}\n\n export type Error = PlatformError | FileSystemError\n\n export interface DirEntry {\n readonly name: string\n readonly type: \"file\" | \"directory\" | \"symlink\" | \"other\"\n }\n\n export interface Interface extends FileSystem.FileSystem {\n readonly isDir: (path: string) => Effect.Effect<boolean>\n readonly isFile: (path: string) => Effect.Effect<boolean>\n readonly existsSafe: (path: string) => Effect.Effect<boolean>\n readonly readJson: (path: string) => Effect.Effect<unknown, Error>\n readonly writeJson: (path: string, data: unknown, mode?: number) => Effect.Effect<void, Error>\n readonly ensureDir: (path: string) => Effect.Effect<void, Error>\n readonly writeWithDirs: (path: string, content: string | Uint8Array, mode?: number) => Effect.Effect<void, Error>\n readonly readDirectoryEntries: (path: string) => Effect.Effect<DirEntry[], Error>\n readonly findUp: (target: string, start: string, stop?: string) => Effect.Effect<string[], Error>\n readonly up: (options: { targets: string[]; start: string; stop?: string }) => Effect.Effect<string[], Error>\n readonly globUp: (pattern: string, start: string, stop?: string) => Effect.Effect<string[], Error>\n readonly glob: (pattern: string, options?: Glob.Options) => Effect.Effect<string[], Error>\n readonly globMatch: (pattern: string, filepath: string) => boolean\n }\n\n export class Service extends ServiceMap.Service<Service, Interface>()(\"@opencode/FileSystem\") {}\n\n export const layer = Layer.effect(\n Service,\n Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem\n\n const existsSafe = Effect.fn(\"FileSystem.existsSafe\")(function* (path: string) {\n return yield* fs.exists(path).pipe(Effect.orElseSucceed(() => false))\n })\n\n const isDir = Effect.fn(\"FileSystem.isDir\")(function* (path: string) {\n const info = yield* fs.stat(path).pipe(Effect.catch(() => Effect.void))\n return info?.type === \"Directory\"\n })\n\n const isFile = Effect.fn(\"FileSystem.isFile\")(function* (path: string) {\n const info = yield* fs.stat(path).pipe(Effect.catch(() => Effect.void))\n return info?.type === \"File\"\n })\n\n const readDirectoryEntries = Effect.fn(\"FileSystem.readDirectoryEntries\")(function* (dirPath: string) {\n return yield* Effect.tryPromise({\n try: async () => {\n const entries = await NFS.readdir(dirPath, { withFileTypes: true })\n return entries.map(\n (e): DirEntry => ({\n name: e.name,\n type: e.isDirectory() ? \"directory\" : e.isSymbolicLink() ? \"symlink\" : e.isFile() ? \"file\" : \"other\",\n }),\n )\n },\n catch: (cause) => new FileSystemError({ method: \"readDirectoryEntries\", cause }),\n })\n })\n\n const readJson = Effect.fn(\"FileSystem.readJson\")(function* (path: string) {\n const text = yield* fs.readFileString(path)\n return JSON.parse(text)\n })\n\n const writeJson = Effect.fn(\"FileSystem.writeJson\")(function* (path: string, data: unknown, mode?: number) {\n const content = JSON.stringify(data, null, 2)\n yield* fs.writeFileString(path, content)\n if (mode) yield* fs.chmod(path, mode)\n })\n\n const ensureDir = Effect.fn(\"FileSystem.ensureDir\")(function* (path: string) {\n yield* fs.makeDirectory(path, { recursive: true })\n })\n\n const writeWithDirs = Effect.fn(\"FileSystem.writeWithDirs\")(function* (\n path: string,\n content: string | Uint8Array,\n mode?: number,\n ) {\n const write = typeof content === \"string\" ? fs.writeFileString(path, content) : fs.writeFile(path, content)\n\n yield* write.pipe(\n Effect.catchIf(\n (e) => e.reason._tag === \"NotFound\",\n () =>\n Effect.gen(function* () {\n yield* fs.makeDirectory(dirname(path), { recursive: true })\n yield* write\n }),\n ),\n )\n if (mode) yield* fs.chmod(path, mode)\n })\n\n const glob = Effect.fn(\"FileSystem.glob\")(function* (pattern: string, options?: Glob.Options) {\n return yield* Effect.tryPromise({\n try: () => Glob.scan(pattern, options),\n catch: (cause) => new FileSystemError({ method: \"glob\", cause }),\n })\n })\n\n const findUp = Effect.fn(\"FileSystem.findUp\")(function* (target: string, start: string, stop?: string) {\n const result: string[] = []\n let current = start\n while (true) {\n const search = join(current, target)\n if (yield* fs.exists(search)) result.push(search)\n if (stop === current) break\n const parent = dirname(current)\n if (parent === current) break\n current = parent\n }\n return result\n })\n\n const up = Effect.fn(\"FileSystem.up\")(function* (options: { targets: string[]; start: string; stop?: string }) {\n const result: string[] = []\n let current = options.start\n while (true) {\n for (const target of options.targets) {\n const search = join(current, target)\n if (yield* fs.exists(search)) result.push(search)\n }\n if (options.stop === current) break\n const parent = dirname(current)\n if (parent === current) break\n current = parent\n }\n return result\n })\n\n const globUp = Effect.fn(\"FileSystem.globUp\")(function* (pattern: string, start: string, stop?: string) {\n const result: string[] = []\n let current = start\n while (true) {\n const matches = yield* glob(pattern, { cwd: current, absolute: true, include: \"file\", dot: true }).pipe(\n Effect.catch(() => Effect.succeed([] as string[])),\n )\n result.push(...matches)\n if (stop === current) break\n const parent = dirname(current)\n if (parent === current) break\n current = parent\n }\n return result\n })\n\n return Service.of({\n ...fs,\n existsSafe,\n isDir,\n isFile,\n readDirectoryEntries,\n readJson,\n writeJson,\n ensureDir,\n writeWithDirs,\n findUp,\n up,\n globUp,\n glob,\n globMatch: Glob.match,\n })\n }),\n )\n\n export const defaultLayer = layer.pipe(Layer.provide(NodeFileSystem.layer))\n\n // Pure helpers that don't need Effect (path manipulation, sync operations)\n export function mimeType(p: string): string {\n return lookup(p) || \"application/octet-stream\"\n }\n\n export function normalizePath(p: string): string {\n if (process.platform !== \"win32\") return p\n const resolved = pathResolve(windowsPath(p))\n try {\n return realpathSync.native(resolved)\n } catch {\n return resolved\n }\n }\n\n export function normalizePathPattern(p: string): string {\n if (process.platform !== \"win32\") return p\n if (p === \"*\") return p\n const match = p.match(/^(.*)[\\\\/]\\*$/)\n if (!match) return normalizePath(p)\n const dir = /^[A-Za-z]:$/.test(match[1]) ? match[1] + \"\\\\\" : match[1]\n return join(normalizePath(dir), \"*\")\n }\n\n export function resolve(p: string): string {\n const resolved = pathResolve(windowsPath(p))\n try {\n return normalizePath(realpathSync(resolved))\n } catch (e: any) {\n if (e?.code === \"ENOENT\") return normalizePath(resolved)\n throw e\n }\n }\n\n export function windowsPath(p: string): string {\n if (process.platform !== \"win32\") return p\n return p\n .replace(/^\\/([a-zA-Z]):(?:[\\\\/]|$)/, (_, drive) => `${drive.toUpperCase()}:/`)\n .replace(/^\\/([a-zA-Z])(?:\\/|$)/, (_, drive) => `${drive.toUpperCase()}:/`)\n .replace(/^\\/cygdrive\\/([a-zA-Z])(?:\\/|$)/, (_, drive) => `${drive.toUpperCase()}:/`)\n .replace(/^\\/mnt\\/([a-zA-Z])(?:\\/|$)/, (_, drive) => `${drive.toUpperCase()}:/`)\n }\n\n export function overlaps(a: string, b: string) {\n const relA = relative(a, b)\n const relB = relative(b, a)\n return !relA || !relA.startsWith(\"..\") || !relB || !relB.startsWith(\"..\")\n }\n\n export function contains(parent: string, child: string) {\n return !relative(parent, child).startsWith(\"..\")\n }\n}\n", "import type * as Arr from \"effect/Array\"\nimport { NodeFileSystem, NodeSink, NodeStream } from \"@effect/platform-node\"\nimport * as NodePath from \"@effect/platform-node/NodePath\"\nimport * as Deferred from \"effect/Deferred\"\nimport * as Effect from \"effect/Effect\"\nimport * as Exit from \"effect/Exit\"\nimport * as FileSystem from \"effect/FileSystem\"\nimport * as Layer from \"effect/Layer\"\nimport * as Path from \"effect/Path\"\nimport * as PlatformError from \"effect/PlatformError\"\nimport * as Predicate from \"effect/Predicate\"\nimport type * as Scope from \"effect/Scope\"\nimport * as Sink from \"effect/Sink\"\nimport * as Stream from \"effect/Stream\"\nimport * as ChildProcess from \"effect/unstable/process/ChildProcess\"\nimport type { ChildProcessHandle } from \"effect/unstable/process/ChildProcessSpawner\"\nimport {\n ChildProcessSpawner,\n ExitCode,\n make as makeSpawner,\n makeHandle,\n ProcessId,\n} from \"effect/unstable/process/ChildProcessSpawner\"\nimport * as NodeChildProcess from \"node:child_process\"\nimport { PassThrough } from \"node:stream\"\nimport launch from \"cross-spawn\"\n\nconst toError = (err: unknown): Error => (err instanceof globalThis.Error ? err : new globalThis.Error(String(err)))\n\nconst toTag = (err: NodeJS.ErrnoException): PlatformError.SystemErrorTag => {\n switch (err.code) {\n case \"ENOENT\":\n return \"NotFound\"\n case \"EACCES\":\n return \"PermissionDenied\"\n case \"EEXIST\":\n return \"AlreadyExists\"\n case \"EISDIR\":\n return \"BadResource\"\n case \"ENOTDIR\":\n return \"BadResource\"\n case \"EBUSY\":\n return \"Busy\"\n case \"ELOOP\":\n return \"BadResource\"\n default:\n return \"Unknown\"\n }\n}\n\nconst flatten = (command: ChildProcess.Command) => {\n const commands: Array<ChildProcess.StandardCommand> = []\n const opts: Array<ChildProcess.PipeOptions> = []\n\n const walk = (cmd: ChildProcess.Command): void => {\n switch (cmd._tag) {\n case \"StandardCommand\":\n commands.push(cmd)\n return\n case \"PipedCommand\":\n walk(cmd.left)\n opts.push(cmd.options)\n walk(cmd.right)\n return\n }\n }\n\n walk(command)\n if (commands.length === 0) throw new Error(\"flatten produced empty commands array\")\n const [head, ...tail] = commands\n return {\n commands: [head, ...tail] as Arr.NonEmptyReadonlyArray<ChildProcess.StandardCommand>,\n opts,\n }\n}\n\nconst toPlatformError = (\n method: string,\n err: NodeJS.ErrnoException,\n command: ChildProcess.Command,\n): PlatformError.PlatformError => {\n const cmd = flatten(command)\n .commands.map((x) => `${x.command} ${x.args.join(\" \")}`)\n .join(\" | \")\n return PlatformError.systemError({\n _tag: toTag(err),\n module: \"ChildProcess\",\n method,\n pathOrDescriptor: cmd,\n syscall: err.syscall,\n cause: err,\n })\n}\n\ntype ExitSignal = Deferred.Deferred<readonly [code: number | null, signal: NodeJS.Signals | null]>\n\nexport const make = Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem\n const path = yield* Path.Path\n\n const cwd = Effect.fnUntraced(function* (opts: ChildProcess.CommandOptions) {\n if (Predicate.isUndefined(opts.cwd)) return undefined\n yield* fs.access(opts.cwd)\n return path.resolve(opts.cwd)\n })\n\n const env = (opts: ChildProcess.CommandOptions) =>\n opts.extendEnv ? { ...globalThis.process.env, ...opts.env } : opts.env\n\n const input = (x: ChildProcess.CommandInput | undefined): NodeChildProcess.IOType | undefined =>\n Stream.isStream(x) ? \"pipe\" : x\n\n const output = (x: ChildProcess.CommandOutput | undefined): NodeChildProcess.IOType | undefined =>\n Sink.isSink(x) ? \"pipe\" : x\n\n const stdin = (opts: ChildProcess.CommandOptions): ChildProcess.StdinConfig => {\n const cfg: ChildProcess.StdinConfig = { stream: \"pipe\", encoding: \"utf-8\", endOnDone: true }\n if (Predicate.isUndefined(opts.stdin)) return cfg\n if (typeof opts.stdin === \"string\") return { ...cfg, stream: opts.stdin }\n if (Stream.isStream(opts.stdin)) return { ...cfg, stream: opts.stdin }\n return {\n stream: opts.stdin.stream,\n encoding: opts.stdin.encoding ?? cfg.encoding,\n endOnDone: opts.stdin.endOnDone ?? cfg.endOnDone,\n }\n }\n\n const stdio = (opts: ChildProcess.CommandOptions, key: \"stdout\" | \"stderr\"): ChildProcess.StdoutConfig => {\n const cfg = opts[key]\n if (Predicate.isUndefined(cfg)) return { stream: \"pipe\" }\n if (typeof cfg === \"string\") return { stream: cfg }\n if (Sink.isSink(cfg)) return { stream: cfg }\n return { stream: cfg.stream }\n }\n\n const fds = (opts: ChildProcess.CommandOptions) => {\n if (Predicate.isUndefined(opts.additionalFds)) return []\n return Object.entries(opts.additionalFds)\n .flatMap(([name, config]) => {\n const fd = ChildProcess.parseFdName(name)\n return Predicate.isUndefined(fd) ? [] : [{ fd, config }]\n })\n .toSorted((a, b) => a.fd - b.fd)\n }\n\n const stdios = (\n sin: ChildProcess.StdinConfig,\n sout: ChildProcess.StdoutConfig,\n serr: ChildProcess.StderrConfig,\n extra: ReadonlyArray<{ fd: number; config: ChildProcess.AdditionalFdConfig }>,\n ): NodeChildProcess.StdioOptions => {\n const pipe = (x: NodeChildProcess.IOType | undefined) =>\n process.platform === \"win32\" && x === \"pipe\" ? \"overlapped\" : x\n const arr: Array<NodeChildProcess.IOType | undefined> = [\n pipe(input(sin.stream)),\n pipe(output(sout.stream)),\n pipe(output(serr.stream)),\n ]\n if (extra.length === 0) return arr as NodeChildProcess.StdioOptions\n const max = extra.reduce((acc, x) => Math.max(acc, x.fd), 2)\n for (let i = 3; i <= max; i++) arr[i] = \"ignore\"\n for (const x of extra) arr[x.fd] = pipe(\"pipe\")\n return arr as NodeChildProcess.StdioOptions\n }\n\n const setupFds = Effect.fnUntraced(function* (\n command: ChildProcess.StandardCommand,\n proc: NodeChildProcess.ChildProcess,\n extra: ReadonlyArray<{ fd: number; config: ChildProcess.AdditionalFdConfig }>,\n ) {\n if (extra.length === 0) {\n return {\n getInputFd: () => Sink.drain,\n getOutputFd: () => Stream.empty,\n }\n }\n\n const ins = new Map<number, Sink.Sink<void, Uint8Array, never, PlatformError.PlatformError>>()\n const outs = new Map<number, Stream.Stream<Uint8Array, PlatformError.PlatformError>>()\n\n for (const x of extra) {\n const node = proc.stdio[x.fd]\n switch (x.config.type) {\n case \"input\": {\n let sink: Sink.Sink<void, Uint8Array, never, PlatformError.PlatformError> = Sink.drain\n if (node && \"write\" in node) {\n sink = NodeSink.fromWritable({\n evaluate: () => node,\n onError: (err) => toPlatformError(`fromWritable(fd${x.fd})`, toError(err), command),\n endOnDone: true,\n })\n }\n if (x.config.stream) yield* Effect.forkScoped(Stream.run(x.config.stream, sink))\n ins.set(x.fd, sink)\n break\n }\n case \"output\": {\n let stream: Stream.Stream<Uint8Array, PlatformError.PlatformError> = Stream.empty\n if (node && \"read\" in node) {\n const tap = new PassThrough()\n node.on(\"error\", (err) => tap.destroy(toError(err)))\n node.pipe(tap)\n stream = NodeStream.fromReadable({\n evaluate: () => tap,\n onError: (err) => toPlatformError(`fromReadable(fd${x.fd})`, toError(err), command),\n })\n }\n if (x.config.sink) stream = Stream.transduce(stream, x.config.sink)\n outs.set(x.fd, stream)\n break\n }\n }\n }\n\n return {\n getInputFd: (fd: number) => ins.get(fd) ?? Sink.drain,\n getOutputFd: (fd: number) => outs.get(fd) ?? Stream.empty,\n }\n })\n\n const setupStdin = (\n command: ChildProcess.StandardCommand,\n proc: NodeChildProcess.ChildProcess,\n cfg: ChildProcess.StdinConfig,\n ) =>\n Effect.suspend(() => {\n let sink: Sink.Sink<void, unknown, never, PlatformError.PlatformError> = Sink.drain\n if (Predicate.isNotNull(proc.stdin)) {\n sink = NodeSink.fromWritable({\n evaluate: () => proc.stdin!,\n onError: (err) => toPlatformError(\"fromWritable(stdin)\", toError(err), command),\n endOnDone: cfg.endOnDone,\n encoding: cfg.encoding,\n })\n }\n if (Stream.isStream(cfg.stream)) return Effect.as(Effect.forkScoped(Stream.run(cfg.stream, sink)), sink)\n return Effect.succeed(sink)\n })\n\n const setupOutput = (\n command: ChildProcess.StandardCommand,\n proc: NodeChildProcess.ChildProcess,\n out: ChildProcess.StdoutConfig,\n err: ChildProcess.StderrConfig,\n ) => {\n let stdout = proc.stdout\n ? NodeStream.fromReadable({\n evaluate: () => proc.stdout!,\n onError: (cause) => toPlatformError(\"fromReadable(stdout)\", toError(cause), command),\n })\n : Stream.empty\n let stderr = proc.stderr\n ? NodeStream.fromReadable({\n evaluate: () => proc.stderr!,\n onError: (cause) => toPlatformError(\"fromReadable(stderr)\", toError(cause), command),\n })\n : Stream.empty\n\n if (Sink.isSink(out.stream)) stdout = Stream.transduce(stdout, out.stream)\n if (Sink.isSink(err.stream)) stderr = Stream.transduce(stderr, err.stream)\n\n return { stdout, stderr, all: Stream.merge(stdout, stderr) }\n }\n\n const spawn = (command: ChildProcess.StandardCommand, opts: NodeChildProcess.SpawnOptions) =>\n Effect.callback<readonly [NodeChildProcess.ChildProcess, ExitSignal], PlatformError.PlatformError>((resume) => {\n const signal = Deferred.makeUnsafe<readonly [code: number | null, signal: NodeJS.Signals | null]>()\n const proc = launch(command.command, command.args, opts)\n let end = false\n let exit: readonly [code: number | null, signal: NodeJS.Signals | null] | undefined\n proc.on(\"error\", (err) => {\n resume(Effect.fail(toPlatformError(\"spawn\", err, command)))\n })\n proc.on(\"exit\", (...args) => {\n exit = args\n })\n proc.on(\"close\", (...args) => {\n if (end) return\n end = true\n Deferred.doneUnsafe(signal, Exit.succeed(exit ?? args))\n })\n proc.on(\"spawn\", () => {\n resume(Effect.succeed([proc, signal]))\n })\n return Effect.sync(() => {\n proc.kill(\"SIGTERM\")\n })\n })\n\n const killGroup = (\n command: ChildProcess.StandardCommand,\n proc: NodeChildProcess.ChildProcess,\n signal: NodeJS.Signals,\n ) => {\n if (globalThis.process.platform === \"win32\") {\n return Effect.callback<void, PlatformError.PlatformError>((resume) => {\n NodeChildProcess.exec(`taskkill /pid ${proc.pid} /T /F`, { windowsHide: true }, (err) => {\n if (err) return resume(Effect.fail(toPlatformError(\"kill\", toError(err), command)))\n resume(Effect.void)\n })\n })\n }\n\n return Effect.try({\n try: () => {\n globalThis.process.kill(-proc.pid!, signal)\n },\n catch: (err) => toPlatformError(\"kill\", toError(err), command),\n })\n }\n\n const killOne = (\n command: ChildProcess.StandardCommand,\n proc: NodeChildProcess.ChildProcess,\n signal: NodeJS.Signals,\n ) =>\n Effect.suspend(() => {\n if (proc.kill(signal)) return Effect.void\n return Effect.fail(toPlatformError(\"kill\", new Error(\"Failed to kill child process\"), command))\n })\n\n const timeout =\n (\n proc: NodeChildProcess.ChildProcess,\n command: ChildProcess.StandardCommand,\n opts: ChildProcess.KillOptions | undefined,\n ) =>\n <A, E, R>(\n f: (\n command: ChildProcess.StandardCommand,\n proc: NodeChildProcess.ChildProcess,\n signal: NodeJS.Signals,\n ) => Effect.Effect<A, E, R>,\n ) => {\n const signal = opts?.killSignal ?? \"SIGTERM\"\n if (Predicate.isUndefined(opts?.forceKillAfter)) return f(command, proc, signal)\n return Effect.timeoutOrElse(f(command, proc, signal), {\n duration: opts.forceKillAfter,\n orElse: () => f(command, proc, \"SIGKILL\"),\n })\n }\n\n const source = (handle: ChildProcessHandle, from: ChildProcess.PipeFromOption | undefined) => {\n const opt = from ?? \"stdout\"\n switch (opt) {\n case \"stdout\":\n return handle.stdout\n case \"stderr\":\n return handle.stderr\n case \"all\":\n return handle.all\n default: {\n const fd = ChildProcess.parseFdName(opt)\n return Predicate.isNotUndefined(fd) ? handle.getOutputFd(fd) : handle.stdout\n }\n }\n }\n\n const spawnCommand: (\n command: ChildProcess.Command,\n ) => Effect.Effect<ChildProcessHandle, PlatformError.PlatformError, Scope.Scope> = Effect.fnUntraced(\n function* (command) {\n switch (command._tag) {\n case \"StandardCommand\": {\n const sin = stdin(command.options)\n const sout = stdio(command.options, \"stdout\")\n const serr = stdio(command.options, \"stderr\")\n const extra = fds(command.options)\n const dir = yield* cwd(command.options)\n\n const [proc, signal] = yield* Effect.acquireRelease(\n spawn(command, {\n cwd: dir,\n env: env(command.options),\n stdio: stdios(sin, sout, serr, extra),\n detached: command.options.detached ?? process.platform !== \"win32\",\n shell: command.options.shell,\n windowsHide: process.platform === \"win32\",\n }),\n Effect.fnUntraced(function* ([proc, signal]) {\n const done = yield* Deferred.isDone(signal)\n const kill = timeout(proc, command, command.options)\n if (done) {\n const [code] = yield* Deferred.await(signal)\n if (process.platform === \"win32\") return yield* Effect.void\n if (code !== 0 && Predicate.isNotNull(code)) return yield* Effect.ignore(kill(killGroup))\n return yield* Effect.void\n }\n const send = (s: NodeJS.Signals) =>\n Effect.catch(killGroup(command, proc, s), () => killOne(command, proc, s))\n const sig = command.options.killSignal ?? \"SIGTERM\"\n const attempt = send(sig).pipe(Effect.andThen(Deferred.await(signal)), Effect.asVoid)\n const escalated = command.options.forceKillAfter\n ? Effect.timeoutOrElse(attempt, {\n duration: command.options.forceKillAfter,\n orElse: () => send(\"SIGKILL\").pipe(Effect.andThen(Deferred.await(signal)), Effect.asVoid),\n })\n : attempt\n return yield* Effect.ignore(escalated)\n }),\n )\n\n const fd = yield* setupFds(command, proc, extra)\n const out = setupOutput(command, proc, sout, serr)\n return makeHandle({\n pid: ProcessId(proc.pid!),\n stdin: yield* setupStdin(command, proc, sin),\n stdout: out.stdout,\n stderr: out.stderr,\n all: out.all,\n getInputFd: fd.getInputFd,\n getOutputFd: fd.getOutputFd,\n isRunning: Effect.map(Deferred.isDone(signal), (done) => !done),\n exitCode: Effect.flatMap(Deferred.await(signal), ([code, signal]) => {\n if (Predicate.isNotNull(code)) return Effect.succeed(ExitCode(code))\n return Effect.fail(\n toPlatformError(\n \"exitCode\",\n new Error(`Process interrupted due to receipt of signal: '${signal}'`),\n command,\n ),\n )\n }),\n kill: (opts?: ChildProcess.KillOptions) => {\n const sig = opts?.killSignal ?? \"SIGTERM\"\n const send = (s: NodeJS.Signals) =>\n Effect.catch(killGroup(command, proc, s), () => killOne(command, proc, s))\n const attempt = send(sig).pipe(Effect.andThen(Deferred.await(signal)), Effect.asVoid)\n if (!opts?.forceKillAfter) return attempt\n return Effect.timeoutOrElse(attempt, {\n duration: opts.forceKillAfter,\n orElse: () => send(\"SIGKILL\").pipe(Effect.andThen(Deferred.await(signal)), Effect.asVoid),\n })\n },\n })\n }\n case \"PipedCommand\": {\n const flat = flatten(command)\n const [head, ...tail] = flat.commands\n let handle = spawnCommand(head)\n for (let i = 0; i < tail.length; i++) {\n const next = tail[i]\n const opts = flat.opts[i] ?? {}\n const sin = stdin(next.options)\n const stream = Stream.unwrap(Effect.map(handle, (x) => source(x, opts.from)))\n const to = opts.to ?? \"stdin\"\n if (to === \"stdin\") {\n handle = spawnCommand(\n ChildProcess.make(next.command, next.args, {\n ...next.options,\n stdin: { ...sin, stream },\n }),\n )\n continue\n }\n const fd = ChildProcess.parseFdName(to)\n if (Predicate.isUndefined(fd)) {\n handle = spawnCommand(\n ChildProcess.make(next.command, next.args, {\n ...next.options,\n stdin: { ...sin, stream },\n }),\n )\n continue\n }\n handle = spawnCommand(\n ChildProcess.make(next.command, next.args, {\n ...next.options,\n additionalFds: {\n ...next.options.additionalFds,\n [ChildProcess.fdName(fd) as `fd${number}`]: { type: \"input\", stream },\n },\n }),\n )\n }\n return yield* handle\n }\n }\n },\n )\n\n return makeSpawner(spawnCommand)\n})\n\nexport const layer: Layer.Layer<ChildProcessSpawner, never, FileSystem.FileSystem | Path.Path> = Layer.effect(\n ChildProcessSpawner,\n make,\n)\n\nexport const defaultLayer = layer.pipe(Layer.provide(NodeFileSystem.layer), Layer.provide(NodePath.layer))\n\nimport { lazy } from \"@/util/lazy\"\n\nconst rt = lazy(async () => {\n // Dynamic import to avoid circular dep: cross-spawn-spawner \u2192 run-service \u2192 Instance \u2192 project \u2192 cross-spawn-spawner\n const { makeRuntime } = await import(\"@/effect/run-service\")\n return makeRuntime(ChildProcessSpawner, defaultLayer)\n})\n\ntype RT = Awaited<ReturnType<typeof rt>>\nexport const runPromiseExit: RT[\"runPromiseExit\"] = async (...args) => (await rt()).runPromiseExit(...(args as [any]))\nexport const runPromise: RT[\"runPromise\"] = async (...args) => (await rt()).runPromise(...(args as [any]))\n", "import { Log } from \"@/util/log\"\n\nexport namespace State {\n interface Entry {\n state: any\n dispose?: (state: any) => Promise<void>\n }\n\n const log = Log.create({ service: \"state\" })\n const recordsByKey = new Map<string, Map<any, Entry>>()\n\n export function create<S>(root: () => string, init: () => S, dispose?: (state: Awaited<S>) => Promise<void>) {\n return () => {\n const key = root()\n let entries = recordsByKey.get(key)\n if (!entries) {\n entries = new Map<string, Entry>()\n recordsByKey.set(key, entries)\n }\n const exists = entries.get(init)\n if (exists) return exists.state as S\n const state = init()\n entries.set(init, {\n state,\n dispose,\n })\n return state\n }\n }\n\n export async function dispose(key: string) {\n const entries = recordsByKey.get(key)\n if (!entries) return\n\n log.info(\"waiting for state disposal to complete\", { key })\n\n let disposalFinished = false\n\n setTimeout(() => {\n if (!disposalFinished) {\n log.warn(\n \"state disposal is taking an unusually long time - if it does not complete in a reasonable time, please report this as a bug\",\n { key },\n )\n }\n }, 10000).unref()\n\n const tasks: Promise<void>[] = []\n for (const [init, entry] of entries) {\n if (!entry.dispose) continue\n\n const label = typeof init === \"function\" ? init.name : String(init)\n\n const task = Promise.resolve(entry.state)\n .then((state) => entry.dispose!(state))\n .catch((error) => {\n log.error(\"Error while disposing state:\", { error, key, init: label })\n })\n\n tasks.push(task)\n }\n await Promise.all(tasks)\n\n entries.clear()\n recordsByKey.delete(key)\n\n disposalFinished = true\n log.info(\"state disposal completed\", { key })\n }\n}\n", "import { GlobalBus } from \"@/bus/global\"\nimport { disposeInstance } from \"@/effect/instance-registry\"\nimport { Filesystem } from \"@/util/filesystem\"\nimport { iife } from \"@/util/iife\"\nimport { Log } from \"@/util/log\"\nimport { Context } from \"../util/context\"\nimport { Project } from \"./project\"\nimport { State } from \"./state\"\n\nexport interface InstanceContext {\n directory: string\n worktree: string\n project: Project.Info\n}\n\nconst context = Context.create<InstanceContext>(\"instance\")\nconst cache = new Map<string, Promise<InstanceContext>>()\n\nconst disposal = {\n all: undefined as Promise<void> | undefined,\n}\n\nfunction emit(directory: string) {\n GlobalBus.emit(\"event\", {\n directory,\n payload: {\n type: \"server.instance.disposed\",\n properties: {\n directory,\n },\n },\n })\n}\n\nfunction boot(input: { directory: string; init?: () => Promise<any>; project?: Project.Info; worktree?: string }) {\n return iife(async () => {\n const ctx =\n input.project && input.worktree\n ? {\n directory: input.directory,\n worktree: input.worktree,\n project: input.project,\n }\n : await Project.fromDirectory(input.directory).then(({ project, sandbox }) => ({\n directory: input.directory,\n worktree: sandbox,\n project,\n }))\n await context.provide(ctx, async () => {\n await input.init?.()\n })\n return ctx\n })\n}\n\nfunction track(directory: string, next: Promise<InstanceContext>) {\n const task = next.catch((error) => {\n if (cache.get(directory) === task) cache.delete(directory)\n throw error\n })\n cache.set(directory, task)\n return task\n}\n\nexport const Instance = {\n async provide<R>(input: { directory: string; init?: () => Promise<any>; fn: () => R }): Promise<R> {\n const directory = Filesystem.resolve(input.directory)\n let existing = cache.get(directory)\n if (!existing) {\n Log.Default.info(\"creating instance\", { directory })\n existing = track(\n directory,\n boot({\n directory,\n init: input.init,\n }),\n )\n }\n const ctx = await existing\n return context.provide(ctx, async () => {\n return input.fn()\n })\n },\n get current() {\n return context.use()\n },\n get directory() {\n return context.use().directory\n },\n get worktree() {\n return context.use().worktree\n },\n get project() {\n return context.use().project\n },\n /**\n * Check if a path is within the project boundary.\n * Returns true if path is inside Instance.directory OR Instance.worktree.\n * Paths within the worktree but outside the working directory should not trigger external_directory permission.\n */\n containsPath(filepath: string) {\n if (Filesystem.contains(Instance.directory, filepath)) return true\n // Non-git projects set worktree to \"/\" which would match ANY absolute path.\n // Skip worktree check in this case to preserve external_directory permissions.\n if (Instance.worktree === \"/\") return false\n return Filesystem.contains(Instance.worktree, filepath)\n },\n /**\n * Captures the current instance ALS context and returns a wrapper that\n * restores it when called. Use this for callbacks that fire outside the\n * instance async context (native addons, event emitters, timers, etc.).\n */\n bind<F extends (...args: any[]) => any>(fn: F): F {\n const ctx = context.use()\n return ((...args: any[]) => context.provide(ctx, () => fn(...args))) as F\n },\n /**\n * Run a synchronous function within the given instance context ALS.\n * Use this to bridge from Effect (where InstanceRef carries context)\n * back to sync code that reads Instance.directory from ALS.\n */\n restore<R>(ctx: InstanceContext, fn: () => R): R {\n return context.provide(ctx, fn)\n },\n state<S>(init: () => S, dispose?: (state: Awaited<S>) => Promise<void>): () => S {\n return State.create(() => Instance.directory, init, dispose)\n },\n async reload(input: { directory: string; init?: () => Promise<any>; project?: Project.Info; worktree?: string }) {\n const directory = Filesystem.resolve(input.directory)\n Log.Default.info(\"reloading instance\", { directory })\n await Promise.all([State.dispose(directory), disposeInstance(directory)])\n cache.delete(directory)\n const next = track(directory, boot({ ...input, directory }))\n emit(directory)\n return await next\n },\n async dispose() {\n const directory = Instance.directory\n Log.Default.info(\"disposing instance\", { directory })\n await Promise.all([State.dispose(directory), disposeInstance(directory)])\n cache.delete(directory)\n emit(directory)\n },\n async disposeAll() {\n if (disposal.all) return disposal.all\n\n disposal.all = iife(async () => {\n Log.Default.info(\"disposing all instances\")\n const entries = [...cache.entries()]\n for (const [key, value] of entries) {\n if (cache.get(key) !== value) continue\n\n const ctx = await value.catch((error) => {\n Log.Default.warn(\"instance dispose failed\", { key, error })\n return undefined\n })\n\n if (!ctx) {\n if (cache.get(key) === value) cache.delete(key)\n continue\n }\n\n if (cache.get(key) !== value) continue\n\n await context.provide(ctx, async () => {\n await Instance.dispose()\n })\n }\n }).finally(() => {\n disposal.all = undefined\n })\n\n return disposal.all\n },\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["Effect", "Layer", "Glob", "Filesystem", "data", "writeStream", "path", "fs", "createWriteStream", "Global", "Log", "init", "path", "fs", "createWriteStream", "file", "prefix", "Context", "z", "z", "data", "z", "path", "existsSync", "Flag", "ServiceMap", "InstanceState", "ServiceMap", "init", "cache", "directory", "path", "z", "Database", "path", "existsSync", "callback", "effect", "integer", "integer", "sqliteTable", "text", "integer", "sqliteTable", "text", "integer", "z", "BusEvent", "path", "path", "z", "z", "Effect", "Layer", "Path", "Scope", "ServiceMap", "Stream", "ChildProcess", "ChildProcessSpawner", "NodePath", "dirname", "join", "relative", "pathResolve", "realpathSync", "lookup", "Effect", "Schema", "ServiceMap", "AppFileSystem", "Schema", "ServiceMap", "Effect", "fs", "path", "text", "data", "dirname", "glob", "join", "lookup", "pathResolve", "realpathSync", "relative", "NodeFileSystem", "Effect", "FileSystem", "Layer", "make", "fs", "path", "config", "proc", "signal", "layer", "NodeFileSystem", "makeRuntime", "Project", "log", "z", "ServiceMap", "Layer", "Effect", "fs", "Path", "ChildProcessSpawner", "ChildProcess", "text", "Stream", "data", "Scope", "fromDirectory", "discover", "update", "list", "get", "initGit", "setInitialized", "sandboxes", "addSandbox", "removeSandbox", "NodePath", "State", "log", "init", "dispose", "state", "cache", "init", "Layer", "effect", "Effect", "layer", "rt"]
7
+ }
@@ -0,0 +1,117 @@
1
+ // Built by esbuild from opencode-server source
2
+ import {
3
+ withStatics
4
+ } from "./chunk-P44FI4UK.js";
5
+
6
+ // packages/opencode/src/session/schema.ts
7
+ import { Schema } from "effect";
8
+ import z2 from "zod";
9
+
10
+ // packages/opencode/src/id/id.ts
11
+ import z from "zod";
12
+ import { randomBytes } from "crypto";
13
+ var Identifier;
14
+ ((Identifier2) => {
15
+ const prefixes = {
16
+ event: "evt",
17
+ session: "ses",
18
+ message: "msg",
19
+ permission: "per",
20
+ question: "que",
21
+ user: "usr",
22
+ part: "prt",
23
+ pty: "pty",
24
+ tool: "tool",
25
+ workspace: "wrk"
26
+ };
27
+ function schema(prefix) {
28
+ return z.string().startsWith(prefixes[prefix]);
29
+ }
30
+ Identifier2.schema = schema;
31
+ const LENGTH = 26;
32
+ let lastTimestamp = 0;
33
+ let counter = 0;
34
+ function ascending(prefix, given) {
35
+ return generateID(prefix, false, given);
36
+ }
37
+ Identifier2.ascending = ascending;
38
+ function descending(prefix, given) {
39
+ return generateID(prefix, true, given);
40
+ }
41
+ Identifier2.descending = descending;
42
+ function generateID(prefix, descending2, given) {
43
+ if (!given) {
44
+ return create(prefix, descending2);
45
+ }
46
+ if (!given.startsWith(prefixes[prefix])) {
47
+ throw new Error(`ID ${given} does not start with ${prefixes[prefix]}`);
48
+ }
49
+ return given;
50
+ }
51
+ function randomBase62(length) {
52
+ const chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
53
+ let result = "";
54
+ const bytes = randomBytes(length);
55
+ for (let i = 0; i < length; i++) {
56
+ result += chars[bytes[i] % 62];
57
+ }
58
+ return result;
59
+ }
60
+ function create(prefix, descending2, timestamp2) {
61
+ const currentTimestamp = timestamp2 ?? Date.now();
62
+ if (currentTimestamp !== lastTimestamp) {
63
+ lastTimestamp = currentTimestamp;
64
+ counter = 0;
65
+ }
66
+ counter++;
67
+ let now = BigInt(currentTimestamp) * BigInt(4096) + BigInt(counter);
68
+ now = descending2 ? ~now : now;
69
+ const timeBytes = Buffer.alloc(6);
70
+ for (let i = 0; i < 6; i++) {
71
+ timeBytes[i] = Number(now >> BigInt(40 - 8 * i) & BigInt(255));
72
+ }
73
+ return prefixes[prefix] + "_" + timeBytes.toString("hex") + randomBase62(LENGTH - 12);
74
+ }
75
+ Identifier2.create = create;
76
+ function timestamp(id) {
77
+ const prefix = id.split("_")[0];
78
+ const hex = id.slice(prefix.length + 1, prefix.length + 13);
79
+ const encoded = BigInt("0x" + hex);
80
+ return Number(encoded / BigInt(4096));
81
+ }
82
+ Identifier2.timestamp = timestamp;
83
+ })(Identifier || (Identifier = {}));
84
+
85
+ // packages/opencode/src/session/schema.ts
86
+ var SessionID = Schema.String.pipe(
87
+ Schema.brand("SessionID"),
88
+ withStatics((s) => ({
89
+ make: (id) => s.makeUnsafe(id),
90
+ descending: (id) => s.makeUnsafe(Identifier.descending("session", id)),
91
+ zod: Identifier.schema("session").pipe(z2.custom())
92
+ }))
93
+ );
94
+ var MessageID = Schema.String.pipe(
95
+ Schema.brand("MessageID"),
96
+ withStatics((s) => ({
97
+ make: (id) => s.makeUnsafe(id),
98
+ ascending: (id) => s.makeUnsafe(Identifier.ascending("message", id)),
99
+ zod: Identifier.schema("message").pipe(z2.custom())
100
+ }))
101
+ );
102
+ var PartID = Schema.String.pipe(
103
+ Schema.brand("PartID"),
104
+ withStatics((s) => ({
105
+ make: (id) => s.makeUnsafe(id),
106
+ ascending: (id) => s.makeUnsafe(Identifier.ascending("part", id)),
107
+ zod: Identifier.schema("part").pipe(z2.custom())
108
+ }))
109
+ );
110
+
111
+ export {
112
+ Identifier,
113
+ SessionID,
114
+ MessageID,
115
+ PartID
116
+ };
117
+ //# sourceMappingURL=chunk-FPPWDLO7.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../packages/opencode/src/session/schema.ts", "../packages/opencode/src/id/id.ts"],
4
+ "sourcesContent": ["import { Schema } from \"effect\"\nimport z from \"zod\"\n\nimport { Identifier } from \"@/id/id\"\nimport { withStatics } from \"@/util/schema\"\n\nexport const SessionID = Schema.String.pipe(\n Schema.brand(\"SessionID\"),\n withStatics((s) => ({\n make: (id: string) => s.makeUnsafe(id),\n descending: (id?: string) => s.makeUnsafe(Identifier.descending(\"session\", id)),\n zod: Identifier.schema(\"session\").pipe(z.custom<Schema.Schema.Type<typeof s>>()),\n })),\n)\n\nexport type SessionID = Schema.Schema.Type<typeof SessionID>\n\nexport const MessageID = Schema.String.pipe(\n Schema.brand(\"MessageID\"),\n withStatics((s) => ({\n make: (id: string) => s.makeUnsafe(id),\n ascending: (id?: string) => s.makeUnsafe(Identifier.ascending(\"message\", id)),\n zod: Identifier.schema(\"message\").pipe(z.custom<Schema.Schema.Type<typeof s>>()),\n })),\n)\n\nexport type MessageID = Schema.Schema.Type<typeof MessageID>\n\nexport const PartID = Schema.String.pipe(\n Schema.brand(\"PartID\"),\n withStatics((s) => ({\n make: (id: string) => s.makeUnsafe(id),\n ascending: (id?: string) => s.makeUnsafe(Identifier.ascending(\"part\", id)),\n zod: Identifier.schema(\"part\").pipe(z.custom<Schema.Schema.Type<typeof s>>()),\n })),\n)\n\nexport type PartID = Schema.Schema.Type<typeof PartID>\n", "import z from \"zod\"\nimport { randomBytes } from \"crypto\"\n\nexport namespace Identifier {\n const prefixes = {\n event: \"evt\",\n session: \"ses\",\n message: \"msg\",\n permission: \"per\",\n question: \"que\",\n user: \"usr\",\n part: \"prt\",\n pty: \"pty\",\n tool: \"tool\",\n workspace: \"wrk\",\n } as const\n\n export function schema(prefix: keyof typeof prefixes) {\n return z.string().startsWith(prefixes[prefix])\n }\n\n const LENGTH = 26\n\n // State for monotonic ID generation\n let lastTimestamp = 0\n let counter = 0\n\n export function ascending(prefix: keyof typeof prefixes, given?: string) {\n return generateID(prefix, false, given)\n }\n\n export function descending(prefix: keyof typeof prefixes, given?: string) {\n return generateID(prefix, true, given)\n }\n\n function generateID(prefix: keyof typeof prefixes, descending: boolean, given?: string): string {\n if (!given) {\n return create(prefix, descending)\n }\n\n if (!given.startsWith(prefixes[prefix])) {\n throw new Error(`ID ${given} does not start with ${prefixes[prefix]}`)\n }\n return given\n }\n\n function randomBase62(length: number): string {\n const chars = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\"\n let result = \"\"\n const bytes = randomBytes(length)\n for (let i = 0; i < length; i++) {\n result += chars[bytes[i] % 62]\n }\n return result\n }\n\n export function create(prefix: keyof typeof prefixes, descending: boolean, timestamp?: number): string {\n const currentTimestamp = timestamp ?? Date.now()\n\n if (currentTimestamp !== lastTimestamp) {\n lastTimestamp = currentTimestamp\n counter = 0\n }\n counter++\n\n let now = BigInt(currentTimestamp) * BigInt(0x1000) + BigInt(counter)\n\n now = descending ? ~now : now\n\n const timeBytes = Buffer.alloc(6)\n for (let i = 0; i < 6; i++) {\n timeBytes[i] = Number((now >> BigInt(40 - 8 * i)) & BigInt(0xff))\n }\n\n return prefixes[prefix] + \"_\" + timeBytes.toString(\"hex\") + randomBase62(LENGTH - 12)\n }\n\n /** Extract timestamp from an ascending ID. Does not work with descending IDs. */\n export function timestamp(id: string): number {\n const prefix = id.split(\"_\")[0]\n const hex = id.slice(prefix.length + 1, prefix.length + 13)\n const encoded = BigInt(\"0x\" + hex)\n return Number(encoded / BigInt(0x1000))\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["z", "Identifier", "descending", "timestamp", "z"]
7
+ }