cwm-assistant 0.3.2 → 0.3.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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../../../node_modules/@sinclair/typebox/build/esm/type/guard/value.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/clone/value.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/clone/type.mjs","../../../node_modules/@sinclair/typebox/build/esm/value/guard/guard.mjs","../../../node_modules/@sinclair/typebox/build/esm/system/policy.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/create/immutable.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/create/type.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/error/error.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/symbols/symbols.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/guard/kind.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/guard/type.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/patterns/patterns.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/sets/set.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/any/any.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/array/array.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/argument/argument.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/async-iterator/async-iterator.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/computed/computed.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/discard/discard.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/never/never.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/mapped/mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/constructor/constructor.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/function/function.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/union/union-create.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/union/union-evaluated.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/union/union.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/template-literal/parse.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/template-literal/finite.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/template-literal/generate.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/literal/literal.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/boolean/boolean.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/bigint/bigint.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/number/number.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/string/string.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/template-literal/syntax.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/template-literal/pattern.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/template-literal/union.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/template-literal/template-literal.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-property-keys.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/indexed/indexed.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-key.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/iterator/iterator.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/object/object.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/promise/promise.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/readonly/readonly.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/readonly/readonly-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/tuple/tuple.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/mapped/mapped.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/optional/optional.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/optional/optional-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-create.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-evaluated.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intersect/intersect.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/ref/ref.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/awaited/awaited.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-property-keys.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/keyof/keyof.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/composite/composite.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/date/date.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/null/null.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/symbol/symbol.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/undefined/undefined.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/uint8array/uint8array.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/unknown/unknown.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/const/const.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/constructor-parameters/constructor-parameters.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/enum/enum.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/extends/extends-check.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/extends/extends.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-key.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-template-literal.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/exclude/exclude.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-template-literal.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/extract/extract.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/instance-type/instance-type.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/readonly-optional/readonly-optional.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/record/record.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/instantiate/instantiate.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/integer/integer.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic-from-mapped-key.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/capitalize.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/lowercase.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/uncapitalize.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/uppercase.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/omit/omit.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-key.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/pick/pick.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-key.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/partial/partial.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/partial/partial-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/required/required.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/required/required-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/module/compute.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/module/module.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/not/not.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/parameters/parameters.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/recursive/recursive.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/regexp/regexp.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/rest/rest.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/return-type/return-type.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/transform/transform.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/unsafe/unsafe.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/void/void.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/type/type.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/type/index.mjs","../../../packages/contracts/src/assistant.ts","../../../packages/contracts/src/index.ts","../../../packages/runtime/src/git/commands.ts","../../../packages/runtime/src/git/context.ts","../src/autostart.ts","../src/server.ts","../../../packages/runtime/src/assistant/tokens.ts","../src/delete-route.ts","../../../packages/runtime/src/workspaces/delete.ts","../../../packages/runtime/src/platform/directory-picker.ts","../../../packages/runtime/src/tools/commands.ts","../../../packages/runtime/src/tools/cursor-agent.ts","../../../packages/runtime/src/tools/process.ts","../../../packages/runtime/src/tools/windows.ts","../../../packages/runtime/src/tools/launch.ts","../../../packages/runtime/src/platform/uri.ts","../../../packages/runtime/src/workspaces/create.ts","../src/routes.ts","../src/paths.ts","../src/state.ts","../src/mount-receipts.ts","../src/workspace-files.ts","../src/adopt-routes.ts","../src/jobs.ts","../../../packages/runtime/src/workspaces/edit.ts","../src/origins.ts","../src/query-routes.ts","../../../packages/runtime/src/agent-sessions/service.ts","../../../packages/runtime/src/agent-sessions/matching.ts","../../../packages/runtime/src/agent-sessions/providers/claude.ts","../../../packages/runtime/src/agent-sessions/storage.ts","../../../packages/runtime/src/agent-sessions/status.ts","../../../packages/runtime/src/agent-sessions/providers/codex.ts","../../../packages/runtime/src/agent-sessions/providers/cursor.ts","../../../packages/runtime/src/agent-sessions/sqlite-reader.ts","../../../packages/runtime/src/agent-sessions/providers/opencode.ts","../../../packages/runtime/src/git/commits.ts","../src/review-route.ts","../../../packages/runtime/src/reviews/audit.ts","../../../packages/runtime/src/reviews/branch-scope.ts","../../../packages/runtime/src/reviews/report-format.ts","../src/upgrade.ts"],"sourcesContent":["import { spawn } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { createInterface } from \"node:readline/promises\";\nimport { ASSISTANT_PORT, ASSISTANT_VERSION } from \"@code-workspace/contracts\";\nimport { runGit } from \"../../../packages/runtime/src/git/commands.ts\";\nimport { gitExecution } from \"../../../packages/runtime/src/git/context.ts\";\nimport { configureAutostart, startAutostart } from \"./autostart.ts\";\nimport { buildAssistant } from \"./server.ts\";\nimport { StateStore, defaultStateDirectory } from \"./state.ts\";\n\nexport async function cli(args: string[], entry: string) {\n if ([\"-v\", \"--version\", \"version\"].includes(args[0])) {\n console.log(ASSISTANT_VERSION);\n return;\n }\n const dirIndex = args.indexOf(\"--state-dir\");\n const directory = dirIndex >= 0 ? path.resolve(args[dirIndex + 1]) : defaultStateDirectory();\n const command = args[0] || \"status\";\n const store = new StateStore(directory);\n const control = async (action: string) => {\n const response = await fetch(`http://127.0.0.1:${ASSISTANT_PORT}/control`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: \"Bearer \" + store.state.controlKey,\n },\n body: JSON.stringify({ action }),\n signal: AbortSignal.timeout(3000),\n });\n const result = (await response.json()) as { error?: string; busy?: boolean; code?: string };\n if (!response.ok) throw new Error(result.error || \"助手控制请求失败\");\n return result;\n };\n async function start() {\n try {\n await control(\"status\");\n console.log(\"Workspace 助手已运行\");\n return;\n } catch {}\n if (store.state.autostart) await startAutostart();\n else {\n const log = fs.openSync(path.join(directory, \"assistant.log\"), \"a\", 0o600);\n const child = spawn(process.execPath, [entry, \"serve\", \"--state-dir\", directory], {\n detached: true,\n windowsHide: true,\n stdio: [\"ignore\", log, log],\n });\n child.unref();\n fs.closeSync(log);\n }\n const deadline = Date.now() + 10_000;\n while (Date.now() < deadline) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n try {\n await control(\"status\");\n console.log(\"Workspace 助手已启动\");\n return;\n } catch {}\n }\n throw new Error(\"启动失败,请运行 cwm-assistant logs 检查端口和运行环境\");\n }\n if (command === \"serve\") {\n const lock = path.join(directory, \"process.lock\");\n if (fs.existsSync(lock)) {\n const pid = Number(fs.readFileSync(lock, \"utf8\"));\n try {\n process.kill(pid, 0);\n throw new Error(\"Workspace 助手已运行\");\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ESRCH\") throw error;\n fs.unlinkSync(lock);\n }\n }\n fs.writeFileSync(lock, String(process.pid), { flag: \"wx\", mode: 0o600 });\n store.reload();\n store.recover();\n const { app, jobs } = await buildAssistant(store, {}, entry);\n app.post(\"/control\", async (request, reply) => {\n const action = (request.body as { action: string }).action;\n if (action === \"status\")\n return {\n running: true,\n busy: jobs.busy(),\n version: store.state.identity.version,\n port: ASSISTANT_PORT,\n autostart: store.state.autostart,\n };\n if (action === \"pair\") return { code: store.pairingCode() };\n if (action === \"stop\") {\n if (jobs.busy())\n return reply.code(409).send({ error: \"本地任务运行中,请等待完成或取消任务\" });\n setTimeout(() => void app.close().then(() => process.exit(0)), 100);\n return { ok: true };\n }\n return reply.code(400).send({ error: \"控制操作无效\" });\n });\n app.addHook(\"onClose\", async () => {\n fs.rmSync(lock, { force: true });\n });\n try {\n await app.listen({ host: \"127.0.0.1\", port: ASSISTANT_PORT });\n } catch (error) {\n fs.rmSync(lock, { force: true });\n throw error;\n }\n for (const signal of [\"SIGTERM\", \"SIGINT\"] as const)\n process.on(signal, () => void app.close().then(() => process.exit(0)));\n return;\n }\n if (command === \"start\") return start();\n if (command === \"install\") {\n const prefixIndex = args.indexOf(\"--prefix\");\n // Kept in a local as well: the reloads below rebuild state from disk, and a failed autostart\n // registration skips the branch that would otherwise write this back.\n const installPrefix = prefixIndex >= 0 ? args[prefixIndex + 1] : store.state.installPrefix;\n if (installPrefix) store.state.installPrefix = installPrefix;\n // Driven by scripts/postinstall.mjs: the package was just (re)installed, so make it live\n // without asking the user anything. Working directory and workbench trust are settled later,\n // in the browser dialog.\n const running = await control(\"status\").catch(() => undefined);\n if (running?.busy) {\n console.error(\n \"本地任务运行中,已保留当前进程;任务结束后运行 cwm-assistant restart 完成更新。\",\n );\n return;\n }\n if (running) {\n await configureAutostart(false, directory, entry).catch(() => {});\n await control(\"stop\").catch(() => {});\n const deadline = Date.now() + 10_000;\n while (fs.existsSync(path.join(directory, \"process.lock\")) && Date.now() < deadline) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n }\n let autostart = false;\n try {\n await configureAutostart(true, directory, entry);\n autostart = true;\n } catch {\n // A root-owned HOME or a locked-down policy can reject LaunchAgents. A detached process\n // still gives the user a working assistant; the dialog can retry the login item later.\n console.error(\"未能注册登录自启动,助手将只作为后台进程运行。\");\n }\n store.reload();\n store.state.autostart = autostart;\n if (installPrefix) store.state.installPrefix = installPrefix;\n store.save();\n await start();\n return;\n }\n if (command === \"status\") {\n try {\n console.log(JSON.stringify(await control(\"status\"), null, 2));\n } catch {\n console.log(\"Workspace 助手未运行\");\n process.exitCode = 1;\n }\n return;\n }\n if (command === \"pair\") {\n console.log(\"配对码(5 分钟有效):\" + (await control(\"pair\")).code);\n return;\n }\n if (command === \"logs\") {\n const file = path.join(directory, \"assistant.log\");\n console.log(\n fs.existsSync(file)\n ? fs.readFileSync(file, \"utf8\").split(\"\\n\").slice(-100).join(\"\\n\")\n : \"暂无日志\",\n );\n return;\n }\n if ([\"stop\", \"restart\", \"uninstall\"].includes(command)) {\n const running = await control(\"status\").catch(() => undefined);\n if (running?.busy) throw new Error(\"本地任务运行中,暂不能停止或更新\");\n const restoreAutostart = store.state.autostart && command === \"restart\";\n if (store.state.autostart) {\n await configureAutostart(false, directory, entry);\n }\n if (running) {\n await control(\"stop\").catch(() => {});\n const deadline = Date.now() + 10_000;\n while (fs.existsSync(path.join(directory, \"process.lock\")) && Date.now() < deadline) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n if (fs.existsSync(path.join(directory, \"process.lock\")))\n throw new Error(\"助手尚未停止,请稍后重试;未修改本地状态\");\n }\n store.reload();\n store.state.autostart = restoreAutostart;\n store.save();\n if (restoreAutostart) await configureAutostart(true, directory, entry);\n if (command === \"restart\") await start();\n if (command === \"uninstall\") {\n store.state.bindings = [];\n delete store.state.pairing;\n store.save();\n console.log(\n \"助手已停止并撤销配对;项目文件已保留。可执行 npm uninstall -g cwm-assistant 移除程序。 \",\n );\n }\n return;\n }\n if (command === \"autostart\") {\n if (![\"enable\", \"disable\"].includes(args[1])) throw new Error(\"请选择 enable 或 disable\");\n if (await control(\"status\").catch(() => undefined))\n throw new Error(\"请先运行 cwm-assistant stop,再修改自启动设置\");\n const enabled = args[1] === \"enable\";\n await configureAutostart(enabled, directory, entry);\n store.state.autostart = enabled;\n store.save();\n return;\n }\n if (command === \"doctor\") {\n const gitVersion = await gitExecution\n .run({ executable: store.state.git }, () => runGit(os.homedir(), [\"--version\"]))\n .catch((error) => \"不可用:\" + (error as Error).message);\n console.log(\n JSON.stringify(\n {\n node: process.version,\n nodePath: process.execPath,\n entryExists: fs.existsSync(entry),\n git: store.state.git,\n gitVersion,\n platform: process.platform,\n rootExists: Boolean(store.state.root && fs.existsSync(store.state.root)),\n configuredWorkbenches: Object.keys(store.state.workbenches),\n autostart: store.state.autostart,\n process: await control(\"status\").catch(() => \"未运行\"),\n },\n null,\n 2,\n ),\n );\n return;\n }\n if (command === \"setup\") {\n const running = await control(\"status\").catch(() => undefined);\n if (running)\n throw new Error(\n \"助手已经运行。如需新浏览器配对,请执行 cwm-assistant pair;修改服务配置前请先 stop。\",\n );\n // --root/--yes make setup a single non-interactive command:\n // cwm-assistant setup --root ~/code-workspace --yes\n // Workbench origins are not recorded here: the assistant trusts any web workbench that\n // answers its identity endpoint with a valid center key.\n const flag = (name: string) => {\n const index = args.indexOf(name);\n return index >= 0 ? args[index + 1] : undefined;\n };\n const rootArg = flag(\"--root\");\n const assumeYes = args.includes(\"--yes\");\n const wantAutostart = args.includes(\"--autostart\");\n const input = createInterface({ input: process.stdin, output: process.stdout });\n const ask = async (question: string) =>\n assumeYes ? \"\" : (await input.question(question)).trim();\n try {\n if (!assumeYes) {\n console.log(\"Node.js:\" + process.version);\n try {\n console.log(\n await gitExecution.run({ executable: store.state.git }, () =>\n runGit(os.homedir(), [\"--version\"]),\n ),\n );\n } catch {\n console.log(\"尚未检测到 Git,完成配对后请在网页配置 Git 的绝对路径。\");\n }\n }\n if (rootArg) {\n if (!path.isAbsolute(rootArg) || !fs.statSync(rootArg).isDirectory())\n throw new Error(\"工作目录必须是已存在的绝对路径\");\n store.state.root = fs.realpathSync(rootArg);\n }\n const auto =\n wantAutostart || (!assumeYes && (await ask(\"登录电脑时自动启动?[Y/n] \")) !== \"n\");\n store.save();\n if (auto) {\n store.state.autostart = true;\n store.save();\n try {\n await configureAutostart(true, directory, entry);\n } catch (error) {\n store.reload();\n store.state.autostart = false;\n store.save();\n throw error;\n }\n }\n await start();\n console.log(\"请返回工作台页面,助手会自动完成连接。\");\n } finally {\n input.close();\n }\n return;\n }\n throw new Error(\n \"命令:setup | install | start | stop | restart | status | doctor | pair | autostart enable/disable | logs | uninstall\",\n );\n}\n","// --------------------------------------------------------------------------\n// PropertyKey\n// --------------------------------------------------------------------------\n/** Returns true if this value has this property key */\nexport function HasPropertyKey(value, key) {\n return key in value;\n}\n// --------------------------------------------------------------------------\n// Object Instances\n// --------------------------------------------------------------------------\n/** Returns true if this value is an async iterator */\nexport function IsAsyncIterator(value) {\n return IsObject(value) && !IsArray(value) && !IsUint8Array(value) && Symbol.asyncIterator in value;\n}\n/** Returns true if this value is an array */\nexport function IsArray(value) {\n return Array.isArray(value);\n}\n/** Returns true if this value is bigint */\nexport function IsBigInt(value) {\n return typeof value === 'bigint';\n}\n/** Returns true if this value is a boolean */\nexport function IsBoolean(value) {\n return typeof value === 'boolean';\n}\n/** Returns true if this value is a Date object */\nexport function IsDate(value) {\n return value instanceof globalThis.Date;\n}\n/** Returns true if this value is a function */\nexport function IsFunction(value) {\n return typeof value === 'function';\n}\n/** Returns true if this value is an iterator */\nexport function IsIterator(value) {\n return IsObject(value) && !IsArray(value) && !IsUint8Array(value) && Symbol.iterator in value;\n}\n/** Returns true if this value is null */\nexport function IsNull(value) {\n return value === null;\n}\n/** Returns true if this value is number */\nexport function IsNumber(value) {\n return typeof value === 'number';\n}\n/** Returns true if this value is an object */\nexport function IsObject(value) {\n return typeof value === 'object' && value !== null;\n}\n/** Returns true if this value is RegExp */\nexport function IsRegExp(value) {\n return value instanceof globalThis.RegExp;\n}\n/** Returns true if this value is string */\nexport function IsString(value) {\n return typeof value === 'string';\n}\n/** Returns true if this value is symbol */\nexport function IsSymbol(value) {\n return typeof value === 'symbol';\n}\n/** Returns true if this value is a Uint8Array */\nexport function IsUint8Array(value) {\n return value instanceof globalThis.Uint8Array;\n}\n/** Returns true if this value is undefined */\nexport function IsUndefined(value) {\n return value === undefined;\n}\n","import * as ValueGuard from '../guard/value.mjs';\nfunction ArrayType(value) {\n return value.map((value) => Visit(value));\n}\nfunction DateType(value) {\n return new Date(value.getTime());\n}\nfunction Uint8ArrayType(value) {\n return new Uint8Array(value);\n}\nfunction RegExpType(value) {\n return new RegExp(value.source, value.flags);\n}\nfunction ObjectType(value) {\n const result = {};\n for (const key of Object.getOwnPropertyNames(value)) {\n result[key] = Visit(value[key]);\n }\n for (const key of Object.getOwnPropertySymbols(value)) {\n result[key] = Visit(value[key]);\n }\n return result;\n}\n// prettier-ignore\nfunction Visit(value) {\n return (ValueGuard.IsArray(value) ? ArrayType(value) :\n ValueGuard.IsDate(value) ? DateType(value) :\n ValueGuard.IsUint8Array(value) ? Uint8ArrayType(value) :\n ValueGuard.IsRegExp(value) ? RegExpType(value) :\n ValueGuard.IsObject(value) ? ObjectType(value) :\n value);\n}\n/** Clones a value */\nexport function Clone(value) {\n return Visit(value);\n}\n","import { Clone } from './value.mjs';\n/** Clones a Rest */\nexport function CloneRest(schemas) {\n return schemas.map((schema) => CloneType(schema));\n}\n/** Clones a Type */\nexport function CloneType(schema, options) {\n return options === undefined ? Clone(schema) : Clone({ ...options, ...schema });\n}\n","// --------------------------------------------------------------------------\n// Iterators\n// --------------------------------------------------------------------------\n/** Returns true if this value is an async iterator */\nexport function IsAsyncIterator(value) {\n return IsObject(value) && globalThis.Symbol.asyncIterator in value;\n}\n/** Returns true if this value is an iterator */\nexport function IsIterator(value) {\n return IsObject(value) && globalThis.Symbol.iterator in value;\n}\n// --------------------------------------------------------------------------\n// Object Instances\n// --------------------------------------------------------------------------\n/** Returns true if this value is not an instance of a class */\nexport function IsStandardObject(value) {\n return IsObject(value) && (globalThis.Object.getPrototypeOf(value) === Object.prototype || globalThis.Object.getPrototypeOf(value) === null);\n}\n/** Returns true if this value is an instance of a class */\nexport function IsInstanceObject(value) {\n return IsObject(value) && !IsArray(value) && IsFunction(value.constructor) && value.constructor.name !== 'Object';\n}\n// --------------------------------------------------------------------------\n// JavaScript\n// --------------------------------------------------------------------------\n/** Returns true if this value is a Promise */\nexport function IsPromise(value) {\n return value instanceof globalThis.Promise;\n}\n/** Returns true if this value is a Date */\nexport function IsDate(value) {\n return value instanceof Date && globalThis.Number.isFinite(value.getTime());\n}\n/** Returns true if this value is an instance of Map<K, T> */\nexport function IsMap(value) {\n return value instanceof globalThis.Map;\n}\n/** Returns true if this value is an instance of Set<T> */\nexport function IsSet(value) {\n return value instanceof globalThis.Set;\n}\n/** Returns true if this value is RegExp */\nexport function IsRegExp(value) {\n return value instanceof globalThis.RegExp;\n}\n/** Returns true if this value is a typed array */\nexport function IsTypedArray(value) {\n return globalThis.ArrayBuffer.isView(value);\n}\n/** Returns true if the value is a Int8Array */\nexport function IsInt8Array(value) {\n return value instanceof globalThis.Int8Array;\n}\n/** Returns true if the value is a Uint8Array */\nexport function IsUint8Array(value) {\n return value instanceof globalThis.Uint8Array;\n}\n/** Returns true if the value is a Uint8ClampedArray */\nexport function IsUint8ClampedArray(value) {\n return value instanceof globalThis.Uint8ClampedArray;\n}\n/** Returns true if the value is a Int16Array */\nexport function IsInt16Array(value) {\n return value instanceof globalThis.Int16Array;\n}\n/** Returns true if the value is a Uint16Array */\nexport function IsUint16Array(value) {\n return value instanceof globalThis.Uint16Array;\n}\n/** Returns true if the value is a Int32Array */\nexport function IsInt32Array(value) {\n return value instanceof globalThis.Int32Array;\n}\n/** Returns true if the value is a Uint32Array */\nexport function IsUint32Array(value) {\n return value instanceof globalThis.Uint32Array;\n}\n/** Returns true if the value is a Float32Array */\nexport function IsFloat32Array(value) {\n return value instanceof globalThis.Float32Array;\n}\n/** Returns true if the value is a Float64Array */\nexport function IsFloat64Array(value) {\n return value instanceof globalThis.Float64Array;\n}\n/** Returns true if the value is a BigInt64Array */\nexport function IsBigInt64Array(value) {\n return value instanceof globalThis.BigInt64Array;\n}\n/** Returns true if the value is a BigUint64Array */\nexport function IsBigUint64Array(value) {\n return value instanceof globalThis.BigUint64Array;\n}\n// --------------------------------------------------------------------------\n// PropertyKey\n// --------------------------------------------------------------------------\n/** Returns true if this value has this property key */\nexport function HasPropertyKey(value, key) {\n return key in value;\n}\n// --------------------------------------------------------------------------\n// Standard\n// --------------------------------------------------------------------------\n/** Returns true of this value is an object type */\nexport function IsObject(value) {\n return value !== null && typeof value === 'object';\n}\n/** Returns true if this value is an array, but not a typed array */\nexport function IsArray(value) {\n return globalThis.Array.isArray(value) && !globalThis.ArrayBuffer.isView(value);\n}\n/** Returns true if this value is an undefined */\nexport function IsUndefined(value) {\n return value === undefined;\n}\n/** Returns true if this value is an null */\nexport function IsNull(value) {\n return value === null;\n}\n/** Returns true if this value is an boolean */\nexport function IsBoolean(value) {\n return typeof value === 'boolean';\n}\n/** Returns true if this value is an number */\nexport function IsNumber(value) {\n return typeof value === 'number';\n}\n/** Returns true if this value is an integer */\nexport function IsInteger(value) {\n return globalThis.Number.isInteger(value);\n}\n/** Returns true if this value is bigint */\nexport function IsBigInt(value) {\n return typeof value === 'bigint';\n}\n/** Returns true if this value is string */\nexport function IsString(value) {\n return typeof value === 'string';\n}\n/** Returns true if this value is a function */\nexport function IsFunction(value) {\n return typeof value === 'function';\n}\n/** Returns true if this value is a symbol */\nexport function IsSymbol(value) {\n return typeof value === 'symbol';\n}\n/** Returns true if this value is a value type such as number, string, boolean */\nexport function IsValueType(value) {\n // prettier-ignore\n return (IsBigInt(value) ||\n IsBoolean(value) ||\n IsNull(value) ||\n IsNumber(value) ||\n IsString(value) ||\n IsSymbol(value) ||\n IsUndefined(value));\n}\n","import { IsObject, IsArray, IsNumber, IsUndefined } from '../value/guard/index.mjs';\nexport var TypeSystemPolicy;\n(function (TypeSystemPolicy) {\n // ------------------------------------------------------------------\n // TypeSystemPolicy: Instancing\n // ------------------------------------------------------------------\n /**\n * Configures the instantiation behavior of TypeBox types. The `default` option assigns raw JavaScript\n * references for embedded types, which may cause side effects if type properties are explicitly updated\n * outside the TypeBox type builder. The `clone` option creates copies of any shared types upon creation,\n * preventing unintended side effects. The `freeze` option applies `Object.freeze()` to the type, making\n * it fully readonly and immutable. Implementations should use `default` whenever possible, as it is the\n * fastest way to instantiate types. The default setting is `default`.\n */\n TypeSystemPolicy.InstanceMode = 'default';\n // ------------------------------------------------------------------\n // TypeSystemPolicy: Checking\n // ------------------------------------------------------------------\n /** Sets whether TypeBox should assert optional properties using the TypeScript `exactOptionalPropertyTypes` assertion policy. The default is `false` */\n TypeSystemPolicy.ExactOptionalPropertyTypes = false;\n /** Sets whether arrays should be treated as a kind of objects. The default is `false` */\n TypeSystemPolicy.AllowArrayObject = false;\n /** Sets whether `NaN` or `Infinity` should be treated as valid numeric values. The default is `false` */\n TypeSystemPolicy.AllowNaN = false;\n /** Sets whether `null` should validate for void types. The default is `false` */\n TypeSystemPolicy.AllowNullVoid = false;\n /** Checks this value using the ExactOptionalPropertyTypes policy */\n function IsExactOptionalProperty(value, key) {\n return TypeSystemPolicy.ExactOptionalPropertyTypes ? key in value : value[key] !== undefined;\n }\n TypeSystemPolicy.IsExactOptionalProperty = IsExactOptionalProperty;\n /** Checks this value using the AllowArrayObjects policy */\n function IsObjectLike(value) {\n const isObject = IsObject(value);\n return TypeSystemPolicy.AllowArrayObject ? isObject : isObject && !IsArray(value);\n }\n TypeSystemPolicy.IsObjectLike = IsObjectLike;\n /** Checks this value as a record using the AllowArrayObjects policy */\n function IsRecordLike(value) {\n return IsObjectLike(value) && !(value instanceof Date) && !(value instanceof Uint8Array);\n }\n TypeSystemPolicy.IsRecordLike = IsRecordLike;\n /** Checks this value using the AllowNaN policy */\n function IsNumberLike(value) {\n return TypeSystemPolicy.AllowNaN ? IsNumber(value) : Number.isFinite(value);\n }\n TypeSystemPolicy.IsNumberLike = IsNumberLike;\n /** Checks this value using the AllowVoidNull policy */\n function IsVoidLike(value) {\n const isUndefined = IsUndefined(value);\n return TypeSystemPolicy.AllowNullVoid ? isUndefined || value === null : isUndefined;\n }\n TypeSystemPolicy.IsVoidLike = IsVoidLike;\n})(TypeSystemPolicy || (TypeSystemPolicy = {}));\n","import * as ValueGuard from '../guard/value.mjs';\nfunction ImmutableArray(value) {\n return globalThis.Object.freeze(value).map((value) => Immutable(value));\n}\nfunction ImmutableDate(value) {\n return value;\n}\nfunction ImmutableUint8Array(value) {\n return value;\n}\nfunction ImmutableRegExp(value) {\n return value;\n}\nfunction ImmutableObject(value) {\n const result = {};\n for (const key of Object.getOwnPropertyNames(value)) {\n result[key] = Immutable(value[key]);\n }\n for (const key of Object.getOwnPropertySymbols(value)) {\n result[key] = Immutable(value[key]);\n }\n return globalThis.Object.freeze(result);\n}\n/** Specialized deep immutable value. Applies freeze recursively to the given value */\n// prettier-ignore\nexport function Immutable(value) {\n return (ValueGuard.IsArray(value) ? ImmutableArray(value) :\n ValueGuard.IsDate(value) ? ImmutableDate(value) :\n ValueGuard.IsUint8Array(value) ? ImmutableUint8Array(value) :\n ValueGuard.IsRegExp(value) ? ImmutableRegExp(value) :\n ValueGuard.IsObject(value) ? ImmutableObject(value) :\n value);\n}\n","import { TypeSystemPolicy } from '../../system/policy.mjs';\nimport { Immutable } from './immutable.mjs';\nimport { Clone } from '../clone/value.mjs';\n/** Creates TypeBox schematics using the configured InstanceMode */\nexport function CreateType(schema, options) {\n const result = options !== undefined ? { ...options, ...schema } : schema;\n switch (TypeSystemPolicy.InstanceMode) {\n case 'freeze':\n return Immutable(result);\n case 'clone':\n return Clone(result);\n default:\n return result;\n }\n}\n","/** The base Error type thrown for all TypeBox exceptions */\nexport class TypeBoxError extends Error {\n constructor(message) {\n super(message);\n }\n}\n","/** Symbol key applied to transform types */\nexport const TransformKind = Symbol.for('TypeBox.Transform');\n/** Symbol key applied to readonly types */\nexport const ReadonlyKind = Symbol.for('TypeBox.Readonly');\n/** Symbol key applied to optional types */\nexport const OptionalKind = Symbol.for('TypeBox.Optional');\n/** Symbol key applied to types */\nexport const Hint = Symbol.for('TypeBox.Hint');\n/** Symbol key applied to types */\nexport const Kind = Symbol.for('TypeBox.Kind');\n","import * as ValueGuard from './value.mjs';\nimport { Kind, Hint, TransformKind, ReadonlyKind, OptionalKind } from '../symbols/index.mjs';\n/** `[Kind-Only]` Returns true if this value has a Readonly symbol */\nexport function IsReadonly(value) {\n return ValueGuard.IsObject(value) && value[ReadonlyKind] === 'Readonly';\n}\n/** `[Kind-Only]` Returns true if this value has a Optional symbol */\nexport function IsOptional(value) {\n return ValueGuard.IsObject(value) && value[OptionalKind] === 'Optional';\n}\n/** `[Kind-Only]` Returns true if the given value is TAny */\nexport function IsAny(value) {\n return IsKindOf(value, 'Any');\n}\n/** `[Kind-Only]` Returns true if the given value is TArgument */\nexport function IsArgument(value) {\n return IsKindOf(value, 'Argument');\n}\n/** `[Kind-Only]` Returns true if the given value is TArray */\nexport function IsArray(value) {\n return IsKindOf(value, 'Array');\n}\n/** `[Kind-Only]` Returns true if the given value is TAsyncIterator */\nexport function IsAsyncIterator(value) {\n return IsKindOf(value, 'AsyncIterator');\n}\n/** `[Kind-Only]` Returns true if the given value is TBigInt */\nexport function IsBigInt(value) {\n return IsKindOf(value, 'BigInt');\n}\n/** `[Kind-Only]` Returns true if the given value is TBoolean */\nexport function IsBoolean(value) {\n return IsKindOf(value, 'Boolean');\n}\n/** `[Kind-Only]` Returns true if the given value is TComputed */\nexport function IsComputed(value) {\n return IsKindOf(value, 'Computed');\n}\n/** `[Kind-Only]` Returns true if the given value is TConstructor */\nexport function IsConstructor(value) {\n return IsKindOf(value, 'Constructor');\n}\n/** `[Kind-Only]` Returns true if the given value is TDate */\nexport function IsDate(value) {\n return IsKindOf(value, 'Date');\n}\n/** `[Kind-Only]` Returns true if the given value is TFunction */\nexport function IsFunction(value) {\n return IsKindOf(value, 'Function');\n}\n/** `[Kind-Only]` Returns true if the given value is TInteger */\nexport function IsImport(value) {\n return IsKindOf(value, 'Import');\n}\n/** `[Kind-Only]` Returns true if the given value is TInteger */\nexport function IsInteger(value) {\n return IsKindOf(value, 'Integer');\n}\n/** `[Kind-Only]` Returns true if the given schema is TProperties */\nexport function IsProperties(value) {\n return ValueGuard.IsObject(value);\n}\n/** `[Kind-Only]` Returns true if the given value is TIntersect */\nexport function IsIntersect(value) {\n return IsKindOf(value, 'Intersect');\n}\n/** `[Kind-Only]` Returns true if the given value is TIterator */\nexport function IsIterator(value) {\n return IsKindOf(value, 'Iterator');\n}\n/** `[Kind-Only]` Returns true if the given value is a TKind with the given name. */\nexport function IsKindOf(value, kind) {\n return ValueGuard.IsObject(value) && Kind in value && value[Kind] === kind;\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral<string> */\nexport function IsLiteralString(value) {\n return IsLiteral(value) && ValueGuard.IsString(value.const);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral<number> */\nexport function IsLiteralNumber(value) {\n return IsLiteral(value) && ValueGuard.IsNumber(value.const);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral<boolean> */\nexport function IsLiteralBoolean(value) {\n return IsLiteral(value) && ValueGuard.IsBoolean(value.const);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteralValue */\nexport function IsLiteralValue(value) {\n return ValueGuard.IsBoolean(value) || ValueGuard.IsNumber(value) || ValueGuard.IsString(value);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral */\nexport function IsLiteral(value) {\n return IsKindOf(value, 'Literal');\n}\n/** `[Kind-Only]` Returns true if the given value is a TMappedKey */\nexport function IsMappedKey(value) {\n return IsKindOf(value, 'MappedKey');\n}\n/** `[Kind-Only]` Returns true if the given value is TMappedResult */\nexport function IsMappedResult(value) {\n return IsKindOf(value, 'MappedResult');\n}\n/** `[Kind-Only]` Returns true if the given value is TNever */\nexport function IsNever(value) {\n return IsKindOf(value, 'Never');\n}\n/** `[Kind-Only]` Returns true if the given value is TNot */\nexport function IsNot(value) {\n return IsKindOf(value, 'Not');\n}\n/** `[Kind-Only]` Returns true if the given value is TNull */\nexport function IsNull(value) {\n return IsKindOf(value, 'Null');\n}\n/** `[Kind-Only]` Returns true if the given value is TNumber */\nexport function IsNumber(value) {\n return IsKindOf(value, 'Number');\n}\n/** `[Kind-Only]` Returns true if the given value is TObject */\nexport function IsObject(value) {\n return IsKindOf(value, 'Object');\n}\n/** `[Kind-Only]` Returns true if the given value is TPromise */\nexport function IsPromise(value) {\n return IsKindOf(value, 'Promise');\n}\n/** `[Kind-Only]` Returns true if the given value is TRecord */\nexport function IsRecord(value) {\n return IsKindOf(value, 'Record');\n}\n/** `[Kind-Only]` Returns true if this value is TRecursive */\nexport function IsRecursive(value) {\n return ValueGuard.IsObject(value) && Hint in value && value[Hint] === 'Recursive';\n}\n/** `[Kind-Only]` Returns true if the given value is TRef */\nexport function IsRef(value) {\n return IsKindOf(value, 'Ref');\n}\n/** `[Kind-Only]` Returns true if the given value is TRegExp */\nexport function IsRegExp(value) {\n return IsKindOf(value, 'RegExp');\n}\n/** `[Kind-Only]` Returns true if the given value is TString */\nexport function IsString(value) {\n return IsKindOf(value, 'String');\n}\n/** `[Kind-Only]` Returns true if the given value is TSymbol */\nexport function IsSymbol(value) {\n return IsKindOf(value, 'Symbol');\n}\n/** `[Kind-Only]` Returns true if the given value is TTemplateLiteral */\nexport function IsTemplateLiteral(value) {\n return IsKindOf(value, 'TemplateLiteral');\n}\n/** `[Kind-Only]` Returns true if the given value is TThis */\nexport function IsThis(value) {\n return IsKindOf(value, 'This');\n}\n/** `[Kind-Only]` Returns true of this value is TTransform */\nexport function IsTransform(value) {\n return ValueGuard.IsObject(value) && TransformKind in value;\n}\n/** `[Kind-Only]` Returns true if the given value is TTuple */\nexport function IsTuple(value) {\n return IsKindOf(value, 'Tuple');\n}\n/** `[Kind-Only]` Returns true if the given value is TUndefined */\nexport function IsUndefined(value) {\n return IsKindOf(value, 'Undefined');\n}\n/** `[Kind-Only]` Returns true if the given value is TUnion */\nexport function IsUnion(value) {\n return IsKindOf(value, 'Union');\n}\n/** `[Kind-Only]` Returns true if the given value is TUint8Array */\nexport function IsUint8Array(value) {\n return IsKindOf(value, 'Uint8Array');\n}\n/** `[Kind-Only]` Returns true if the given value is TUnknown */\nexport function IsUnknown(value) {\n return IsKindOf(value, 'Unknown');\n}\n/** `[Kind-Only]` Returns true if the given value is a raw TUnsafe */\nexport function IsUnsafe(value) {\n return IsKindOf(value, 'Unsafe');\n}\n/** `[Kind-Only]` Returns true if the given value is TVoid */\nexport function IsVoid(value) {\n return IsKindOf(value, 'Void');\n}\n/** `[Kind-Only]` Returns true if the given value is TKind */\nexport function IsKind(value) {\n return ValueGuard.IsObject(value) && Kind in value && ValueGuard.IsString(value[Kind]);\n}\n/** `[Kind-Only]` Returns true if the given value is TSchema */\nexport function IsSchema(value) {\n // prettier-ignore\n return (IsAny(value) ||\n IsArgument(value) ||\n IsArray(value) ||\n IsBoolean(value) ||\n IsBigInt(value) ||\n IsAsyncIterator(value) ||\n IsComputed(value) ||\n IsConstructor(value) ||\n IsDate(value) ||\n IsFunction(value) ||\n IsInteger(value) ||\n IsIntersect(value) ||\n IsIterator(value) ||\n IsLiteral(value) ||\n IsMappedKey(value) ||\n IsMappedResult(value) ||\n IsNever(value) ||\n IsNot(value) ||\n IsNull(value) ||\n IsNumber(value) ||\n IsObject(value) ||\n IsPromise(value) ||\n IsRecord(value) ||\n IsRef(value) ||\n IsRegExp(value) ||\n IsString(value) ||\n IsSymbol(value) ||\n IsTemplateLiteral(value) ||\n IsThis(value) ||\n IsTuple(value) ||\n IsUndefined(value) ||\n IsUnion(value) ||\n IsUint8Array(value) ||\n IsUnknown(value) ||\n IsUnsafe(value) ||\n IsVoid(value) ||\n IsKind(value));\n}\n","import * as ValueGuard from './value.mjs';\nimport { Kind, Hint, TransformKind, ReadonlyKind, OptionalKind } from '../symbols/index.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\nexport class TypeGuardUnknownTypeError extends TypeBoxError {\n}\nconst KnownTypes = [\n 'Argument',\n 'Any',\n 'Array',\n 'AsyncIterator',\n 'BigInt',\n 'Boolean',\n 'Computed',\n 'Constructor',\n 'Date',\n 'Enum',\n 'Function',\n 'Integer',\n 'Intersect',\n 'Iterator',\n 'Literal',\n 'MappedKey',\n 'MappedResult',\n 'Not',\n 'Null',\n 'Number',\n 'Object',\n 'Promise',\n 'Record',\n 'Ref',\n 'RegExp',\n 'String',\n 'Symbol',\n 'TemplateLiteral',\n 'This',\n 'Tuple',\n 'Undefined',\n 'Union',\n 'Uint8Array',\n 'Unknown',\n 'Void',\n];\nfunction IsPattern(value) {\n try {\n new RegExp(value);\n return true;\n }\n catch {\n return false;\n }\n}\nfunction IsControlCharacterFree(value) {\n if (!ValueGuard.IsString(value))\n return false;\n for (let i = 0; i < value.length; i++) {\n const code = value.charCodeAt(i);\n if ((code >= 7 && code <= 13) || code === 27 || code === 127) {\n return false;\n }\n }\n return true;\n}\nfunction IsAdditionalProperties(value) {\n return IsOptionalBoolean(value) || IsSchema(value);\n}\nfunction IsOptionalBigInt(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsBigInt(value);\n}\nfunction IsOptionalNumber(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsNumber(value);\n}\nfunction IsOptionalBoolean(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsBoolean(value);\n}\nfunction IsOptionalString(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsString(value);\n}\nfunction IsOptionalPattern(value) {\n return ValueGuard.IsUndefined(value) || (ValueGuard.IsString(value) && IsControlCharacterFree(value) && IsPattern(value));\n}\nfunction IsOptionalFormat(value) {\n return ValueGuard.IsUndefined(value) || (ValueGuard.IsString(value) && IsControlCharacterFree(value));\n}\nfunction IsOptionalSchema(value) {\n return ValueGuard.IsUndefined(value) || IsSchema(value);\n}\n// ------------------------------------------------------------------\n// Modifiers\n// ------------------------------------------------------------------\n/** Returns true if this value has a Readonly symbol */\nexport function IsReadonly(value) {\n return ValueGuard.IsObject(value) && value[ReadonlyKind] === 'Readonly';\n}\n/** Returns true if this value has a Optional symbol */\nexport function IsOptional(value) {\n return ValueGuard.IsObject(value) && value[OptionalKind] === 'Optional';\n}\n// ------------------------------------------------------------------\n// Types\n// ------------------------------------------------------------------\n/** Returns true if the given value is TAny */\nexport function IsAny(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Any') &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TArgument */\nexport function IsArgument(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Argument') &&\n ValueGuard.IsNumber(value.index));\n}\n/** Returns true if the given value is TArray */\nexport function IsArray(value) {\n return (IsKindOf(value, 'Array') &&\n value.type === 'array' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.items) &&\n IsOptionalNumber(value.minItems) &&\n IsOptionalNumber(value.maxItems) &&\n IsOptionalBoolean(value.uniqueItems) &&\n IsOptionalSchema(value.contains) &&\n IsOptionalNumber(value.minContains) &&\n IsOptionalNumber(value.maxContains));\n}\n/** Returns true if the given value is TAsyncIterator */\nexport function IsAsyncIterator(value) {\n // prettier-ignore\n return (IsKindOf(value, 'AsyncIterator') &&\n value.type === 'AsyncIterator' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.items));\n}\n/** Returns true if the given value is TBigInt */\nexport function IsBigInt(value) {\n // prettier-ignore\n return (IsKindOf(value, 'BigInt') &&\n value.type === 'bigint' &&\n IsOptionalString(value.$id) &&\n IsOptionalBigInt(value.exclusiveMaximum) &&\n IsOptionalBigInt(value.exclusiveMinimum) &&\n IsOptionalBigInt(value.maximum) &&\n IsOptionalBigInt(value.minimum) &&\n IsOptionalBigInt(value.multipleOf));\n}\n/** Returns true if the given value is TBoolean */\nexport function IsBoolean(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Boolean') &&\n value.type === 'boolean' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TComputed */\nexport function IsComputed(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Computed') &&\n ValueGuard.IsString(value.target) &&\n ValueGuard.IsArray(value.parameters) &&\n value.parameters.every((schema) => IsSchema(schema)));\n}\n/** Returns true if the given value is TConstructor */\nexport function IsConstructor(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Constructor') &&\n value.type === 'Constructor' &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsArray(value.parameters) &&\n value.parameters.every(schema => IsSchema(schema)) &&\n IsSchema(value.returns));\n}\n/** Returns true if the given value is TDate */\nexport function IsDate(value) {\n return (IsKindOf(value, 'Date') &&\n value.type === 'Date' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.exclusiveMaximumTimestamp) &&\n IsOptionalNumber(value.exclusiveMinimumTimestamp) &&\n IsOptionalNumber(value.maximumTimestamp) &&\n IsOptionalNumber(value.minimumTimestamp) &&\n IsOptionalNumber(value.multipleOfTimestamp));\n}\n/** Returns true if the given value is TFunction */\nexport function IsFunction(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Function') &&\n value.type === 'Function' &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsArray(value.parameters) &&\n value.parameters.every(schema => IsSchema(schema)) &&\n IsSchema(value.returns));\n}\n/** Returns true if the given value is TImport */\nexport function IsImport(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Import') &&\n ValueGuard.HasPropertyKey(value, '$defs') &&\n ValueGuard.IsObject(value.$defs) &&\n IsProperties(value.$defs) &&\n ValueGuard.HasPropertyKey(value, '$ref') &&\n ValueGuard.IsString(value.$ref) &&\n value.$ref in value.$defs // required\n );\n}\n/** Returns true if the given value is TInteger */\nexport function IsInteger(value) {\n return (IsKindOf(value, 'Integer') &&\n value.type === 'integer' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.exclusiveMaximum) &&\n IsOptionalNumber(value.exclusiveMinimum) &&\n IsOptionalNumber(value.maximum) &&\n IsOptionalNumber(value.minimum) &&\n IsOptionalNumber(value.multipleOf));\n}\n/** Returns true if the given schema is TProperties */\nexport function IsProperties(value) {\n // prettier-ignore\n return (ValueGuard.IsObject(value) &&\n Object.entries(value).every(([key, schema]) => IsControlCharacterFree(key) && IsSchema(schema)));\n}\n/** Returns true if the given value is TIntersect */\nexport function IsIntersect(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Intersect') &&\n (ValueGuard.IsString(value.type) && value.type !== 'object' ? false : true) &&\n ValueGuard.IsArray(value.allOf) &&\n value.allOf.every(schema => IsSchema(schema) && !IsTransform(schema)) &&\n IsOptionalString(value.type) &&\n (IsOptionalBoolean(value.unevaluatedProperties) || IsOptionalSchema(value.unevaluatedProperties)) &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TIterator */\nexport function IsIterator(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Iterator') &&\n value.type === 'Iterator' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.items));\n}\n/** Returns true if the given value is a TKind with the given name. */\nexport function IsKindOf(value, kind) {\n return ValueGuard.IsObject(value) && Kind in value && value[Kind] === kind;\n}\n/** Returns true if the given value is TLiteral<string> */\nexport function IsLiteralString(value) {\n return IsLiteral(value) && ValueGuard.IsString(value.const);\n}\n/** Returns true if the given value is TLiteral<number> */\nexport function IsLiteralNumber(value) {\n return IsLiteral(value) && ValueGuard.IsNumber(value.const);\n}\n/** Returns true if the given value is TLiteral<boolean> */\nexport function IsLiteralBoolean(value) {\n return IsLiteral(value) && ValueGuard.IsBoolean(value.const);\n}\n/** Returns true if the given value is TLiteral */\nexport function IsLiteral(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Literal') &&\n IsOptionalString(value.$id) && IsLiteralValue(value.const));\n}\n/** Returns true if the given value is a TLiteralValue */\nexport function IsLiteralValue(value) {\n return ValueGuard.IsBoolean(value) || ValueGuard.IsNumber(value) || ValueGuard.IsString(value);\n}\n/** Returns true if the given value is a TMappedKey */\nexport function IsMappedKey(value) {\n // prettier-ignore\n return (IsKindOf(value, 'MappedKey') &&\n ValueGuard.IsArray(value.keys) &&\n value.keys.every(key => ValueGuard.IsNumber(key) || ValueGuard.IsString(key)));\n}\n/** Returns true if the given value is TMappedResult */\nexport function IsMappedResult(value) {\n // prettier-ignore\n return (IsKindOf(value, 'MappedResult') &&\n IsProperties(value.properties));\n}\n/** Returns true if the given value is TNever */\nexport function IsNever(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Never') &&\n ValueGuard.IsObject(value.not) &&\n Object.getOwnPropertyNames(value.not).length === 0);\n}\n/** Returns true if the given value is TNot */\nexport function IsNot(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Not') &&\n IsSchema(value.not));\n}\n/** Returns true if the given value is TNull */\nexport function IsNull(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Null') &&\n value.type === 'null' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TNumber */\nexport function IsNumber(value) {\n return (IsKindOf(value, 'Number') &&\n value.type === 'number' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.exclusiveMaximum) &&\n IsOptionalNumber(value.exclusiveMinimum) &&\n IsOptionalNumber(value.maximum) &&\n IsOptionalNumber(value.minimum) &&\n IsOptionalNumber(value.multipleOf));\n}\n/** Returns true if the given value is TObject */\nexport function IsObject(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Object') &&\n value.type === 'object' &&\n IsOptionalString(value.$id) &&\n IsProperties(value.properties) &&\n IsAdditionalProperties(value.additionalProperties) &&\n IsOptionalNumber(value.minProperties) &&\n IsOptionalNumber(value.maxProperties));\n}\n/** Returns true if the given value is TPromise */\nexport function IsPromise(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Promise') &&\n value.type === 'Promise' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.item));\n}\n/** Returns true if the given value is TRecord */\nexport function IsRecord(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Record') &&\n value.type === 'object' &&\n IsOptionalString(value.$id) &&\n IsAdditionalProperties(value.additionalProperties) &&\n ValueGuard.IsObject(value.patternProperties) &&\n ((schema) => {\n const keys = Object.getOwnPropertyNames(schema.patternProperties);\n return (keys.length === 1 &&\n IsPattern(keys[0]) &&\n ValueGuard.IsObject(schema.patternProperties) &&\n IsSchema(schema.patternProperties[keys[0]]));\n })(value));\n}\n/** Returns true if this value is TRecursive */\nexport function IsRecursive(value) {\n return ValueGuard.IsObject(value) && Hint in value && value[Hint] === 'Recursive';\n}\n/** Returns true if the given value is TRef */\nexport function IsRef(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Ref') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsString(value.$ref));\n}\n/** Returns true if the given value is TRegExp */\nexport function IsRegExp(value) {\n // prettier-ignore\n return (IsKindOf(value, 'RegExp') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsString(value.source) &&\n ValueGuard.IsString(value.flags) &&\n IsOptionalNumber(value.maxLength) &&\n IsOptionalNumber(value.minLength));\n}\n/** Returns true if the given value is TString */\nexport function IsString(value) {\n // prettier-ignore\n return (IsKindOf(value, 'String') &&\n value.type === 'string' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.minLength) &&\n IsOptionalNumber(value.maxLength) &&\n IsOptionalPattern(value.pattern) &&\n IsOptionalFormat(value.format));\n}\n/** Returns true if the given value is TSymbol */\nexport function IsSymbol(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Symbol') &&\n value.type === 'symbol' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TTemplateLiteral */\nexport function IsTemplateLiteral(value) {\n // prettier-ignore\n return (IsKindOf(value, 'TemplateLiteral') &&\n value.type === 'string' &&\n ValueGuard.IsString(value.pattern) &&\n value.pattern[0] === '^' &&\n value.pattern[value.pattern.length - 1] === '$');\n}\n/** Returns true if the given value is TThis */\nexport function IsThis(value) {\n // prettier-ignore\n return (IsKindOf(value, 'This') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsString(value.$ref));\n}\n/** Returns true of this value is TTransform */\nexport function IsTransform(value) {\n return ValueGuard.IsObject(value) && TransformKind in value;\n}\n/** Returns true if the given value is TTuple */\nexport function IsTuple(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Tuple') &&\n value.type === 'array' &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsNumber(value.minItems) &&\n ValueGuard.IsNumber(value.maxItems) &&\n value.minItems === value.maxItems &&\n (( // empty\n ValueGuard.IsUndefined(value.items) &&\n ValueGuard.IsUndefined(value.additionalItems) &&\n value.minItems === 0) || (ValueGuard.IsArray(value.items) &&\n value.items.every(schema => IsSchema(schema)))));\n}\n/** Returns true if the given value is TUndefined */\nexport function IsUndefined(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Undefined') &&\n value.type === 'undefined' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TUnion<Literal<string | number>[]> */\nexport function IsUnionLiteral(value) {\n return IsUnion(value) && value.anyOf.every((schema) => IsLiteralString(schema) || IsLiteralNumber(schema));\n}\n/** Returns true if the given value is TUnion */\nexport function IsUnion(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Union') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsObject(value) &&\n ValueGuard.IsArray(value.anyOf) &&\n value.anyOf.every(schema => IsSchema(schema)));\n}\n/** Returns true if the given value is TUint8Array */\nexport function IsUint8Array(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Uint8Array') &&\n value.type === 'Uint8Array' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.minByteLength) &&\n IsOptionalNumber(value.maxByteLength));\n}\n/** Returns true if the given value is TUnknown */\nexport function IsUnknown(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Unknown') &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is a raw TUnsafe */\nexport function IsUnsafe(value) {\n return IsKindOf(value, 'Unsafe');\n}\n/** Returns true if the given value is TVoid */\nexport function IsVoid(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Void') &&\n value.type === 'void' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TKind */\nexport function IsKind(value) {\n return ValueGuard.IsObject(value) && Kind in value && ValueGuard.IsString(value[Kind]) && !KnownTypes.includes(value[Kind]);\n}\n/** Returns true if the given value is TSchema */\nexport function IsSchema(value) {\n // prettier-ignore\n return (ValueGuard.IsObject(value)) && (IsAny(value) ||\n IsArgument(value) ||\n IsArray(value) ||\n IsBoolean(value) ||\n IsBigInt(value) ||\n IsAsyncIterator(value) ||\n IsComputed(value) ||\n IsConstructor(value) ||\n IsDate(value) ||\n IsFunction(value) ||\n IsInteger(value) ||\n IsIntersect(value) ||\n IsIterator(value) ||\n IsLiteral(value) ||\n IsMappedKey(value) ||\n IsMappedResult(value) ||\n IsNever(value) ||\n IsNot(value) ||\n IsNull(value) ||\n IsNumber(value) ||\n IsObject(value) ||\n IsPromise(value) ||\n IsRecord(value) ||\n IsRef(value) ||\n IsRegExp(value) ||\n IsString(value) ||\n IsSymbol(value) ||\n IsTemplateLiteral(value) ||\n IsThis(value) ||\n IsTuple(value) ||\n IsUndefined(value) ||\n IsUnion(value) ||\n IsUint8Array(value) ||\n IsUnknown(value) ||\n IsUnsafe(value) ||\n IsVoid(value) ||\n IsKind(value));\n}\n","export const PatternBoolean = '(true|false)';\nexport const PatternNumber = '(0|[1-9][0-9]*)';\nexport const PatternString = '(.*)';\nexport const PatternNever = '(?!.*)';\nexport const PatternBooleanExact = `^${PatternBoolean}$`;\nexport const PatternNumberExact = `^${PatternNumber}$`;\nexport const PatternStringExact = `^${PatternString}$`;\nexport const PatternNeverExact = `^${PatternNever}$`;\n","/** Returns true if element right is in the set of left */\n// prettier-ignore\nexport function SetIncludes(T, S) {\n return T.includes(S);\n}\n/** Returns true if left is a subset of right */\nexport function SetIsSubset(T, S) {\n return T.every((L) => SetIncludes(S, L));\n}\n/** Returns a distinct set of elements */\nexport function SetDistinct(T) {\n return [...new Set(T)];\n}\n/** Returns the Intersect of the given sets */\nexport function SetIntersect(T, S) {\n return T.filter((L) => S.includes(L));\n}\n/** Returns the Union of the given sets */\nexport function SetUnion(T, S) {\n return [...T, ...S];\n}\n/** Returns the Complement by omitting elements in T that are in S */\n// prettier-ignore\nexport function SetComplement(T, S) {\n return T.filter(L => !S.includes(L));\n}\n// prettier-ignore\nfunction SetIntersectManyResolve(T, Init) {\n return T.reduce((Acc, L) => {\n return SetIntersect(Acc, L);\n }, Init);\n}\n// prettier-ignore\nexport function SetIntersectMany(T) {\n return (T.length === 1\n ? T[0]\n // Use left to initialize the accumulator for resolve\n : T.length > 1\n ? SetIntersectManyResolve(T.slice(1), T[0])\n : []);\n}\n/** Returns the Union of multiple sets */\nexport function SetUnionMany(T) {\n const Acc = [];\n for (const L of T)\n Acc.push(...L);\n return Acc;\n}\n","import { CreateType } from '../create/index.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Any type */\nexport function Any(options) {\n return CreateType({ [Kind]: 'Any' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Array type */\nexport function Array(items, options) {\n return CreateType({ [Kind]: 'Array', type: 'array', items }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates an Argument Type. */\nexport function Argument(index) {\n return CreateType({ [Kind]: 'Argument', index });\n}\n","import { Kind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/type.mjs';\n/** `[JavaScript]` Creates a AsyncIterator type */\nexport function AsyncIterator(items, options) {\n return CreateType({ [Kind]: 'AsyncIterator', type: 'AsyncIterator', items }, options);\n}\n","import { CreateType } from '../create/index.mjs';\nimport { Kind } from '../symbols/symbols.mjs';\n/** `[Internal]` Creates a deferred computed type. This type is used exclusively in modules to defer resolution of computable types that contain interior references */\nexport function Computed(target, parameters, options) {\n return CreateType({ [Kind]: 'Computed', target, parameters }, options);\n}\n","function DiscardKey(value, key) {\n const { [key]: _, ...rest } = value;\n return rest;\n}\n/** Discards property keys from the given value. This function returns a shallow Clone. */\nexport function Discard(value, keys) {\n return keys.reduce((acc, key) => DiscardKey(acc, key), value);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Never type */\nexport function Never(options) {\n return CreateType({ [Kind]: 'Never', not: {} }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// prettier-ignore\nexport function MappedResult(properties) {\n return CreateType({\n [Kind]: 'MappedResult',\n properties\n });\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Constructor type */\nexport function Constructor(parameters, returns, options) {\n return CreateType({ [Kind]: 'Constructor', type: 'Constructor', parameters, returns }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Function type */\nexport function Function(parameters, returns, options) {\n return CreateType({ [Kind]: 'Function', type: 'Function', parameters, returns }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\nexport function UnionCreate(T, options) {\n return CreateType({ [Kind]: 'Union', anyOf: T }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { OptionalKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { UnionCreate } from './union-create.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsOptional } from '../guard/kind.mjs';\n// prettier-ignore\nfunction IsUnionOptional(types) {\n return types.some(type => IsOptional(type));\n}\n// prettier-ignore\nfunction RemoveOptionalFromRest(types) {\n return types.map(left => IsOptional(left) ? RemoveOptionalFromType(left) : left);\n}\n// prettier-ignore\nfunction RemoveOptionalFromType(T) {\n return (Discard(T, [OptionalKind]));\n}\n// prettier-ignore\nfunction ResolveUnion(types, options) {\n const isOptional = IsUnionOptional(types);\n return (isOptional\n ? Optional(UnionCreate(RemoveOptionalFromRest(types), options))\n : UnionCreate(RemoveOptionalFromRest(types), options));\n}\n/** `[Json]` Creates an evaluated Union type */\nexport function UnionEvaluated(T, options) {\n // prettier-ignore\n return (T.length === 1 ? CreateType(T[0], options) :\n T.length === 0 ? Never(options) :\n ResolveUnion(T, options));\n}\n","import { Never } from '../never/index.mjs';\nimport { CreateType } from '../create/type.mjs';\nimport { UnionCreate } from './union-create.mjs';\n/** `[Json]` Creates a Union type */\nexport function Union(types, options) {\n // prettier-ignore\n return (types.length === 0 ? Never(options) :\n types.length === 1 ? CreateType(types[0], options) :\n UnionCreate(types, options));\n}\n","import { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralParserError\n// ------------------------------------------------------------------\nexport class TemplateLiteralParserError extends TypeBoxError {\n}\n// -------------------------------------------------------------------\n// Unescape\n//\n// Unescape for these control characters specifically. Note that this\n// function is only called on non union group content, and where we\n// still want to allow the user to embed control characters in that\n// content. For review.\n// -------------------------------------------------------------------\n// prettier-ignore\nfunction Unescape(pattern) {\n return pattern\n .replace(/\\\\\\$/g, '$')\n .replace(/\\\\\\*/g, '*')\n .replace(/\\\\\\^/g, '^')\n .replace(/\\\\\\|/g, '|')\n .replace(/\\\\\\(/g, '(')\n .replace(/\\\\\\)/g, ')');\n}\n// -------------------------------------------------------------------\n// Control Characters\n// -------------------------------------------------------------------\nfunction IsNonEscaped(pattern, index, char) {\n return pattern[index] === char && pattern.charCodeAt(index - 1) !== 92;\n}\nfunction IsOpenParen(pattern, index) {\n return IsNonEscaped(pattern, index, '(');\n}\nfunction IsCloseParen(pattern, index) {\n return IsNonEscaped(pattern, index, ')');\n}\nfunction IsSeparator(pattern, index) {\n return IsNonEscaped(pattern, index, '|');\n}\n// -------------------------------------------------------------------\n// Control Groups\n// -------------------------------------------------------------------\nfunction IsGroup(pattern) {\n if (!(IsOpenParen(pattern, 0) && IsCloseParen(pattern, pattern.length - 1)))\n return false;\n let count = 0;\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n count += 1;\n if (IsCloseParen(pattern, index))\n count -= 1;\n if (count === 0 && index !== pattern.length - 1)\n return false;\n }\n return true;\n}\n// prettier-ignore\nfunction InGroup(pattern) {\n return pattern.slice(1, pattern.length - 1);\n}\n// prettier-ignore\nfunction IsPrecedenceOr(pattern) {\n let count = 0;\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n count += 1;\n if (IsCloseParen(pattern, index))\n count -= 1;\n if (IsSeparator(pattern, index) && count === 0)\n return true;\n }\n return false;\n}\n// prettier-ignore\nfunction IsPrecedenceAnd(pattern) {\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n return true;\n }\n return false;\n}\n// prettier-ignore\nfunction Or(pattern) {\n let [count, start] = [0, 0];\n const expressions = [];\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n count += 1;\n if (IsCloseParen(pattern, index))\n count -= 1;\n if (IsSeparator(pattern, index) && count === 0) {\n const range = pattern.slice(start, index);\n if (range.length > 0)\n expressions.push(TemplateLiteralParse(range));\n start = index + 1;\n }\n }\n const range = pattern.slice(start);\n if (range.length > 0)\n expressions.push(TemplateLiteralParse(range));\n if (expressions.length === 0)\n return { type: 'const', const: '' };\n if (expressions.length === 1)\n return expressions[0];\n return { type: 'or', expr: expressions };\n}\n// prettier-ignore\nfunction And(pattern) {\n function Group(value, index) {\n if (!IsOpenParen(value, index))\n throw new TemplateLiteralParserError(`TemplateLiteralParser: Index must point to open parens`);\n let count = 0;\n for (let scan = index; scan < value.length; scan++) {\n if (IsOpenParen(value, scan))\n count += 1;\n if (IsCloseParen(value, scan))\n count -= 1;\n if (count === 0)\n return [index, scan];\n }\n throw new TemplateLiteralParserError(`TemplateLiteralParser: Unclosed group parens in expression`);\n }\n function Range(pattern, index) {\n for (let scan = index; scan < pattern.length; scan++) {\n if (IsOpenParen(pattern, scan))\n return [index, scan];\n }\n return [index, pattern.length];\n }\n const expressions = [];\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index)) {\n const [start, end] = Group(pattern, index);\n const range = pattern.slice(start, end + 1);\n expressions.push(TemplateLiteralParse(range));\n index = end;\n }\n else {\n const [start, end] = Range(pattern, index);\n const range = pattern.slice(start, end);\n if (range.length > 0)\n expressions.push(TemplateLiteralParse(range));\n index = end - 1;\n }\n }\n return ((expressions.length === 0) ? { type: 'const', const: '' } :\n (expressions.length === 1) ? expressions[0] :\n { type: 'and', expr: expressions });\n}\n// ------------------------------------------------------------------\n// TemplateLiteralParse\n// ------------------------------------------------------------------\n/** Parses a pattern and returns an expression tree */\nexport function TemplateLiteralParse(pattern) {\n // prettier-ignore\n return (IsGroup(pattern) ? TemplateLiteralParse(InGroup(pattern)) :\n IsPrecedenceOr(pattern) ? Or(pattern) :\n IsPrecedenceAnd(pattern) ? And(pattern) :\n { type: 'const', const: Unescape(pattern) });\n}\n// ------------------------------------------------------------------\n// TemplateLiteralParseExact\n// ------------------------------------------------------------------\n/** Parses a pattern and strips forward and trailing ^ and $ */\nexport function TemplateLiteralParseExact(pattern) {\n return TemplateLiteralParse(pattern.slice(1, pattern.length - 1));\n}\n","import { TemplateLiteralParseExact } from './parse.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralFiniteError\n// ------------------------------------------------------------------\nexport class TemplateLiteralFiniteError extends TypeBoxError {\n}\n// ------------------------------------------------------------------\n// IsTemplateLiteralFiniteCheck\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsNumberExpression(expression) {\n return (expression.type === 'or' &&\n expression.expr.length === 2 &&\n expression.expr[0].type === 'const' &&\n expression.expr[0].const === '0' &&\n expression.expr[1].type === 'const' &&\n expression.expr[1].const === '[1-9][0-9]*');\n}\n// prettier-ignore\nfunction IsBooleanExpression(expression) {\n return (expression.type === 'or' &&\n expression.expr.length === 2 &&\n expression.expr[0].type === 'const' &&\n expression.expr[0].const === 'true' &&\n expression.expr[1].type === 'const' &&\n expression.expr[1].const === 'false');\n}\n// prettier-ignore\nfunction IsStringExpression(expression) {\n return expression.type === 'const' && expression.const === '.*';\n}\n// ------------------------------------------------------------------\n// IsTemplateLiteralExpressionFinite\n// ------------------------------------------------------------------\n// prettier-ignore\nexport function IsTemplateLiteralExpressionFinite(expression) {\n return (IsNumberExpression(expression) || IsStringExpression(expression) ? false :\n IsBooleanExpression(expression) ? true :\n (expression.type === 'and') ? expression.expr.every((expr) => IsTemplateLiteralExpressionFinite(expr)) :\n (expression.type === 'or') ? expression.expr.every((expr) => IsTemplateLiteralExpressionFinite(expr)) :\n (expression.type === 'const') ? true :\n (() => { throw new TemplateLiteralFiniteError(`Unknown expression type`); })());\n}\n/** Returns true if this TemplateLiteral resolves to a finite set of values */\nexport function IsTemplateLiteralFinite(schema) {\n const expression = TemplateLiteralParseExact(schema.pattern);\n return IsTemplateLiteralExpressionFinite(expression);\n}\n","import { IsTemplateLiteralExpressionFinite } from './finite.mjs';\nimport { TemplateLiteralParseExact } from './parse.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralGenerateError\n// ------------------------------------------------------------------\nexport class TemplateLiteralGenerateError extends TypeBoxError {\n}\n// ------------------------------------------------------------------\n// TemplateLiteralExpressionGenerate\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction* GenerateReduce(buffer) {\n if (buffer.length === 1)\n return yield* buffer[0];\n for (const left of buffer[0]) {\n for (const right of GenerateReduce(buffer.slice(1))) {\n yield `${left}${right}`;\n }\n }\n}\n// prettier-ignore\nfunction* GenerateAnd(expression) {\n return yield* GenerateReduce(expression.expr.map((expr) => [...TemplateLiteralExpressionGenerate(expr)]));\n}\n// prettier-ignore\nfunction* GenerateOr(expression) {\n for (const expr of expression.expr)\n yield* TemplateLiteralExpressionGenerate(expr);\n}\n// prettier-ignore\nfunction* GenerateConst(expression) {\n return yield expression.const;\n}\nexport function* TemplateLiteralExpressionGenerate(expression) {\n return expression.type === 'and'\n ? yield* GenerateAnd(expression)\n : expression.type === 'or'\n ? yield* GenerateOr(expression)\n : expression.type === 'const'\n ? yield* GenerateConst(expression)\n : (() => {\n throw new TemplateLiteralGenerateError('Unknown expression');\n })();\n}\n/** Generates a tuple of strings from the given TemplateLiteral. Returns an empty tuple if infinite. */\nexport function TemplateLiteralGenerate(schema) {\n const expression = TemplateLiteralParseExact(schema.pattern);\n // prettier-ignore\n return (IsTemplateLiteralExpressionFinite(expression)\n ? [...TemplateLiteralExpressionGenerate(expression)]\n : []);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Literal type */\nexport function Literal(value, options) {\n return CreateType({\n [Kind]: 'Literal',\n const: value,\n type: typeof value,\n }, options);\n}\n","import { Kind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/index.mjs';\n/** `[Json]` Creates a Boolean type */\nexport function Boolean(options) {\n return CreateType({ [Kind]: 'Boolean', type: 'boolean' }, options);\n}\n","import { Kind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/index.mjs';\n/** `[JavaScript]` Creates a BigInt type */\nexport function BigInt(options) {\n return CreateType({ [Kind]: 'BigInt', type: 'bigint' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Number type */\nexport function Number(options) {\n return CreateType({ [Kind]: 'Number', type: 'number' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a String type */\nexport function String(options) {\n return CreateType({ [Kind]: 'String', type: 'string' }, options);\n}\n","import { Literal } from '../literal/index.mjs';\nimport { Boolean } from '../boolean/index.mjs';\nimport { BigInt } from '../bigint/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { String } from '../string/index.mjs';\nimport { UnionEvaluated } from '../union/index.mjs';\nimport { Never } from '../never/index.mjs';\n// ------------------------------------------------------------------\n// SyntaxParsers\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction* FromUnion(syntax) {\n const trim = syntax.trim().replace(/\"|'/g, '');\n return (trim === 'boolean' ? yield Boolean() :\n trim === 'number' ? yield Number() :\n trim === 'bigint' ? yield BigInt() :\n trim === 'string' ? yield String() :\n yield (() => {\n const literals = trim.split('|').map((literal) => Literal(literal.trim()));\n return (literals.length === 0 ? Never() :\n literals.length === 1 ? literals[0] :\n UnionEvaluated(literals));\n })());\n}\n// prettier-ignore\nfunction* FromTerminal(syntax) {\n if (syntax[1] !== '{') {\n const L = Literal('$');\n const R = FromSyntax(syntax.slice(1));\n return yield* [L, ...R];\n }\n for (let i = 2; i < syntax.length; i++) {\n if (syntax[i] === '}') {\n const L = FromUnion(syntax.slice(2, i));\n const R = FromSyntax(syntax.slice(i + 1));\n return yield* [...L, ...R];\n }\n }\n yield Literal(syntax);\n}\n// prettier-ignore\nfunction* FromSyntax(syntax) {\n for (let i = 0; i < syntax.length; i++) {\n if (syntax[i] === '$') {\n const L = Literal(syntax.slice(0, i));\n const R = FromTerminal(syntax.slice(i));\n return yield* [L, ...R];\n }\n }\n yield Literal(syntax);\n}\n/** Parses TemplateLiteralSyntax and returns a tuple of TemplateLiteralKinds */\nexport function TemplateLiteralSyntax(syntax) {\n return [...FromSyntax(syntax)];\n}\n","import { PatternNumber, PatternString, PatternBoolean } from '../patterns/index.mjs';\nimport { Kind } from '../symbols/index.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTemplateLiteral, IsUnion, IsNumber, IsInteger, IsBigInt, IsString, IsLiteral, IsBoolean } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralPatternError\n// ------------------------------------------------------------------\nexport class TemplateLiteralPatternError extends TypeBoxError {\n}\n// ------------------------------------------------------------------\n// TemplateLiteralPattern\n// ------------------------------------------------------------------\nfunction Escape(value) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n// prettier-ignore\nfunction Visit(schema, acc) {\n return (IsTemplateLiteral(schema) ? schema.pattern.slice(1, schema.pattern.length - 1) :\n IsUnion(schema) ? `(${schema.anyOf.map((schema) => Visit(schema, acc)).join('|')})` :\n IsNumber(schema) ? `${acc}${PatternNumber}` :\n IsInteger(schema) ? `${acc}${PatternNumber}` :\n IsBigInt(schema) ? `${acc}${PatternNumber}` :\n IsString(schema) ? `${acc}${PatternString}` :\n IsLiteral(schema) ? `${acc}${Escape(schema.const.toString())}` :\n IsBoolean(schema) ? `${acc}${PatternBoolean}` :\n (() => { throw new TemplateLiteralPatternError(`Unexpected Kind '${schema[Kind]}'`); })());\n}\nexport function TemplateLiteralPattern(kinds) {\n return `^${kinds.map((schema) => Visit(schema, '')).join('')}\\$`;\n}\n","import { UnionEvaluated } from '../union/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { TemplateLiteralGenerate } from './generate.mjs';\n/** Returns a Union from the given TemplateLiteral */\nexport function TemplateLiteralToUnion(schema) {\n const R = TemplateLiteralGenerate(schema);\n const L = R.map((S) => Literal(S));\n return UnionEvaluated(L);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { TemplateLiteralSyntax } from './syntax.mjs';\nimport { TemplateLiteralPattern } from './pattern.mjs';\nimport { IsString } from '../guard/value.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a TemplateLiteral type */\n// prettier-ignore\nexport function TemplateLiteral(unresolved, options) {\n const pattern = IsString(unresolved)\n ? TemplateLiteralPattern(TemplateLiteralSyntax(unresolved))\n : TemplateLiteralPattern(unresolved);\n return CreateType({ [Kind]: 'TemplateLiteral', type: 'string', pattern }, options);\n}\n","import { TemplateLiteralGenerate } from '../template-literal/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTemplateLiteral, IsUnion, IsLiteral, IsNumber, IsInteger } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromTemplateLiteral(templateLiteral) {\n const keys = TemplateLiteralGenerate(templateLiteral);\n return keys.map(key => key.toString());\n}\n// prettier-ignore\nfunction FromUnion(types) {\n const result = [];\n for (const type of types)\n result.push(...IndexPropertyKeys(type));\n return result;\n}\n// prettier-ignore\nfunction FromLiteral(literalValue) {\n return ([literalValue.toString()] // TS 5.4 observes TLiteralValue as not having a toString()\n );\n}\n/** Returns a tuple of PropertyKeys derived from the given TSchema */\n// prettier-ignore\nexport function IndexPropertyKeys(type) {\n return [...new Set((IsTemplateLiteral(type) ? FromTemplateLiteral(type) :\n IsUnion(type) ? FromUnion(type.anyOf) :\n IsLiteral(type) ? FromLiteral(type.const) :\n IsNumber(type) ? ['[number]'] :\n IsInteger(type) ? ['[number]'] :\n []))];\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { IndexPropertyKeys } from './indexed-property-keys.mjs';\nimport { Index } from './index.mjs';\n// prettier-ignore\nfunction FromProperties(type, properties, options) {\n const result = {};\n for (const K2 of Object.getOwnPropertyNames(properties)) {\n result[K2] = Index(type, IndexPropertyKeys(properties[K2]), options);\n }\n return result;\n}\n// prettier-ignore\nfunction FromMappedResult(type, mappedResult, options) {\n return FromProperties(type, mappedResult.properties, options);\n}\n// prettier-ignore\nexport function IndexFromMappedResult(type, mappedResult, options) {\n const properties = FromMappedResult(type, mappedResult, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { IntersectEvaluated } from '../intersect/index.mjs';\nimport { UnionEvaluated } from '../union/index.mjs';\nimport { IndexPropertyKeys } from './indexed-property-keys.mjs';\nimport { IndexFromMappedKey } from './indexed-from-mapped-key.mjs';\nimport { IndexFromMappedResult } from './indexed-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsArray, IsIntersect, IsObject, IsMappedKey, IsMappedResult, IsNever, IsSchema, IsTuple, IsUnion, IsRef } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromRest(types, key) {\n return types.map(type => IndexFromPropertyKey(type, key));\n}\n// prettier-ignore\nfunction FromIntersectRest(types) {\n return types.filter(type => !IsNever(type));\n}\n// prettier-ignore\nfunction FromIntersect(types, key) {\n return (IntersectEvaluated(FromIntersectRest(FromRest(types, key))));\n}\n// prettier-ignore\nfunction FromUnionRest(types) {\n return (types.some(L => IsNever(L))\n ? []\n : types);\n}\n// prettier-ignore\nfunction FromUnion(types, key) {\n return (UnionEvaluated(FromUnionRest(FromRest(types, key))));\n}\n// prettier-ignore\nfunction FromTuple(types, key) {\n return (key in types ? types[key] :\n key === '[number]' ? UnionEvaluated(types) :\n Never());\n}\n// prettier-ignore\nfunction FromArray(type, key) {\n return (key === '[number]'\n ? type\n : Never());\n}\n// prettier-ignore\nfunction FromProperty(properties, propertyKey) {\n return (propertyKey in properties ? properties[propertyKey] : Never());\n}\n// prettier-ignore\nexport function IndexFromPropertyKey(type, propertyKey) {\n return (IsIntersect(type) ? FromIntersect(type.allOf, propertyKey) :\n IsUnion(type) ? FromUnion(type.anyOf, propertyKey) :\n IsTuple(type) ? FromTuple(type.items ?? [], propertyKey) :\n IsArray(type) ? FromArray(type.items, propertyKey) :\n IsObject(type) ? FromProperty(type.properties, propertyKey) :\n Never());\n}\n// prettier-ignore\nexport function IndexFromPropertyKeys(type, propertyKeys) {\n return propertyKeys.map(propertyKey => IndexFromPropertyKey(type, propertyKey));\n}\n// prettier-ignore\nfunction FromSchema(type, propertyKeys) {\n return (UnionEvaluated(IndexFromPropertyKeys(type, propertyKeys)));\n}\n// prettier-ignore\nexport function IndexFromComputed(type, key) {\n return Computed('Index', [type, key]);\n}\n/** `[Json]` Returns an Indexed property type for the given keys */\nexport function Index(type, key, options) {\n // computed-type\n if (IsRef(type) || IsRef(key)) {\n const error = `Index types using Ref parameters require both Type and Key to be of TSchema`;\n if (!IsSchema(type) || !IsSchema(key))\n throw new TypeBoxError(error);\n return Computed('Index', [type, key]);\n }\n // mapped-types\n if (IsMappedResult(key))\n return IndexFromMappedResult(type, key, options);\n if (IsMappedKey(key))\n return IndexFromMappedKey(type, key, options);\n // prettier-ignore\n return CreateType(IsSchema(key)\n ? FromSchema(type, IndexPropertyKeys(key))\n : FromSchema(type, key), options);\n}\n","import { Index } from './indexed.mjs';\nimport { MappedResult } from '../mapped/index.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction MappedIndexPropertyKey(type, key, options) {\n return { [key]: Index(type, [key], Clone(options)) };\n}\n// prettier-ignore\nfunction MappedIndexPropertyKeys(type, propertyKeys, options) {\n return propertyKeys.reduce((result, left) => {\n return { ...result, ...MappedIndexPropertyKey(type, left, options) };\n }, {});\n}\n// prettier-ignore\nfunction MappedIndexProperties(type, mappedKey, options) {\n return MappedIndexPropertyKeys(type, mappedKey.keys, options);\n}\n// prettier-ignore\nexport function IndexFromMappedKey(type, mappedKey, options) {\n const properties = MappedIndexProperties(type, mappedKey, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates an Iterator type */\nexport function Iterator(items, options) {\n return CreateType({ [Kind]: 'Iterator', type: 'Iterator', items }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsOptional } from '../guard/kind.mjs';\n/** Creates a RequiredArray derived from the given TProperties value. */\nfunction RequiredArray(properties) {\n return globalThis.Object.keys(properties).filter((key) => !IsOptional(properties[key]));\n}\n/** `[Json]` Creates an Object type */\nfunction _Object_(properties, options) {\n const required = RequiredArray(properties);\n const schema = required.length > 0 ? { [Kind]: 'Object', type: 'object', required, properties } : { [Kind]: 'Object', type: 'object', properties };\n return CreateType(schema, options);\n}\n// ------------------------------------------------------------------\n// TypeScript 7: CommonJS TS2441\n//\n// TypeScript generates a CommonJS shim that patches local variables\n// via an unqualified reference to Object (e.g. the __esModule shim's\n// Object.defineProperty call). Other compiler tools have been\n// observed patching in the same way, but TypeScript 7 has correctly\n// begun flagging variables named Object in CommonJS, since they\n// conflict with the shim and can cause \"used before definition\"\n// errors. This is CommonJS-specific; no such shim exists for ESM.\n//\n// TypeBox works around this using a `var` declaration, which is\n// known to avoid use-before-definition errors. TypeBox 1.x employs\n// a similar strategy.\n// ------------------------------------------------------------------\n/** `[Json]` Creates an Object type */\n// @ts-ignore - error TS2441: Duplicate identifier 'Object'. Compiler reserves name 'Object' in top level scope of a module.\nexport var Object = _Object_;\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Promise type */\nexport function Promise(item, options) {\n return CreateType({ [Kind]: 'Promise', type: 'Promise', item }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { ReadonlyKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { ReadonlyFromMappedResult } from './readonly-from-mapped-result.mjs';\nimport { IsMappedResult } from '../guard/kind.mjs';\nfunction RemoveReadonly(schema) {\n return CreateType(Discard(schema, [ReadonlyKind]));\n}\nfunction AddReadonly(schema) {\n return CreateType({ ...schema, [ReadonlyKind]: 'Readonly' });\n}\n// prettier-ignore\nfunction ReadonlyWithFlag(schema, F) {\n return (F === false\n ? RemoveReadonly(schema)\n : AddReadonly(schema));\n}\n/** `[Json]` Creates a Readonly property */\nexport function Readonly(schema, enable) {\n const F = enable ?? true;\n return IsMappedResult(schema) ? ReadonlyFromMappedResult(schema, F) : ReadonlyWithFlag(schema, F);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Readonly } from './readonly.mjs';\n// prettier-ignore\nfunction FromProperties(K, F) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(K))\n Acc[K2] = Readonly(K[K2], F);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, F) {\n return FromProperties(R.properties, F);\n}\n// prettier-ignore\nexport function ReadonlyFromMappedResult(R, F) {\n const P = FromMappedResult(R, F);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Tuple type */\nexport function Tuple(types, options) {\n // prettier-ignore\n return CreateType(types.length > 0 ?\n { [Kind]: 'Tuple', type: 'array', items: types, additionalItems: false, minItems: types.length, maxItems: types.length } :\n { [Kind]: 'Tuple', type: 'array', minItems: types.length, maxItems: types.length }, options);\n}\n","import { Kind, OptionalKind, ReadonlyKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\n// evaluation types\nimport { Array } from '../array/index.mjs';\nimport { AsyncIterator } from '../async-iterator/index.mjs';\nimport { Constructor } from '../constructor/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Iterator } from '../iterator/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Object as _Object_ } from '../object/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { Promise } from '../promise/index.mjs';\nimport { Readonly } from '../readonly/index.mjs';\nimport { Tuple } from '../tuple/index.mjs';\nimport { Union } from '../union/index.mjs';\n// operator\nimport { SetIncludes } from '../sets/index.mjs';\n// mapping types\nimport { MappedResult } from './mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsArray, IsAsyncIterator, IsConstructor, IsFunction, IsIntersect, IsIterator, IsReadonly, IsMappedResult, IsMappedKey, IsObject, IsOptional, IsPromise, IsSchema, IsTuple, IsUnion } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromMappedResult(K, P) {\n return (K in P\n ? FromSchemaType(K, P[K])\n : MappedResult(P));\n}\n// prettier-ignore\nfunction MappedKeyToKnownMappedResultProperties(K) {\n return { [K]: Literal(K) };\n}\n// prettier-ignore\nfunction MappedKeyToUnknownMappedResultProperties(P) {\n const Acc = {};\n for (const L of P)\n Acc[L] = Literal(L);\n return Acc;\n}\n// prettier-ignore\nfunction MappedKeyToMappedResultProperties(K, P) {\n return (SetIncludes(P, K)\n ? MappedKeyToKnownMappedResultProperties(K)\n : MappedKeyToUnknownMappedResultProperties(P));\n}\n// prettier-ignore\nfunction FromMappedKey(K, P) {\n const R = MappedKeyToMappedResultProperties(K, P);\n return FromMappedResult(K, R);\n}\n// prettier-ignore\nfunction FromRest(K, T) {\n return T.map(L => FromSchemaType(K, L));\n}\n// prettier-ignore\nfunction FromProperties(K, T) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(T))\n Acc[K2] = FromSchemaType(K, T[K2]);\n return Acc;\n}\n// prettier-ignore\nfunction FromSchemaType(K, T) {\n // required to retain user defined options for mapped type\n const options = { ...T };\n return (\n // unevaluated modifier types\n IsOptional(T) ? Optional(FromSchemaType(K, Discard(T, [OptionalKind]))) :\n IsReadonly(T) ? Readonly(FromSchemaType(K, Discard(T, [ReadonlyKind]))) :\n // unevaluated mapped types\n IsMappedResult(T) ? FromMappedResult(K, T.properties) :\n IsMappedKey(T) ? FromMappedKey(K, T.keys) :\n // unevaluated types\n IsConstructor(T) ? Constructor(FromRest(K, T.parameters), FromSchemaType(K, T.returns), options) :\n IsFunction(T) ? FunctionType(FromRest(K, T.parameters), FromSchemaType(K, T.returns), options) :\n IsAsyncIterator(T) ? AsyncIterator(FromSchemaType(K, T.items), options) :\n IsIterator(T) ? Iterator(FromSchemaType(K, T.items), options) :\n IsIntersect(T) ? Intersect(FromRest(K, T.allOf), options) :\n IsUnion(T) ? Union(FromRest(K, T.anyOf), options) :\n IsTuple(T) ? Tuple(FromRest(K, T.items ?? []), options) :\n IsObject(T) ? _Object_(FromProperties(K, T.properties), options) :\n IsArray(T) ? Array(FromSchemaType(K, T.items), options) :\n IsPromise(T) ? Promise(FromSchemaType(K, T.item), options) :\n T);\n}\n// prettier-ignore\nexport function MappedFunctionReturnType(K, T) {\n const Acc = {};\n for (const L of K)\n Acc[L] = FromSchemaType(L, T);\n return Acc;\n}\n/** `[Json]` Creates a Mapped object type */\nexport function Mapped(key, map, options) {\n const K = IsSchema(key) ? IndexPropertyKeys(key) : key;\n const RT = map({ [Kind]: 'MappedKey', keys: K });\n const R = MappedFunctionReturnType(K, RT);\n return _Object_(R, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { OptionalKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { OptionalFromMappedResult } from './optional-from-mapped-result.mjs';\nimport { IsMappedResult } from '../guard/kind.mjs';\nfunction RemoveOptional(schema) {\n return CreateType(Discard(schema, [OptionalKind]));\n}\nfunction AddOptional(schema) {\n return CreateType({ ...schema, [OptionalKind]: 'Optional' });\n}\n// prettier-ignore\nfunction OptionalWithFlag(schema, F) {\n return (F === false\n ? RemoveOptional(schema)\n : AddOptional(schema));\n}\n/** `[Json]` Creates a Optional property */\nexport function Optional(schema, enable) {\n const F = enable ?? true;\n return IsMappedResult(schema) ? OptionalFromMappedResult(schema, F) : OptionalWithFlag(schema, F);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Optional } from './optional.mjs';\n// prettier-ignore\nfunction FromProperties(P, F) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Optional(P[K2], F);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, F) {\n return FromProperties(R.properties, F);\n}\n// prettier-ignore\nexport function OptionalFromMappedResult(R, F) {\n const P = FromMappedResult(R, F);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsObject, IsSchema } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// IntersectCreate\n// ------------------------------------------------------------------\n// prettier-ignore\nexport function IntersectCreate(T, options = {}) {\n const allObjects = T.every((schema) => IsObject(schema));\n const clonedUnevaluatedProperties = IsSchema(options.unevaluatedProperties)\n ? { unevaluatedProperties: options.unevaluatedProperties }\n : {};\n return CreateType((options.unevaluatedProperties === false || IsSchema(options.unevaluatedProperties) || allObjects\n ? { ...clonedUnevaluatedProperties, [Kind]: 'Intersect', type: 'object', allOf: T }\n : { ...clonedUnevaluatedProperties, [Kind]: 'Intersect', allOf: T }), options);\n}\n","import { OptionalKind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/type.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { IntersectCreate } from './intersect-create.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsOptional, IsTransform } from '../guard/kind.mjs';\n// prettier-ignore\nfunction IsIntersectOptional(types) {\n return types.every(left => IsOptional(left));\n}\n// prettier-ignore\nfunction RemoveOptionalFromType(type) {\n return (Discard(type, [OptionalKind]));\n}\n// prettier-ignore\nfunction RemoveOptionalFromRest(types) {\n return types.map(left => IsOptional(left) ? RemoveOptionalFromType(left) : left);\n}\n// prettier-ignore\nfunction ResolveIntersect(types, options) {\n return (IsIntersectOptional(types)\n ? Optional(IntersectCreate(RemoveOptionalFromRest(types), options))\n : IntersectCreate(RemoveOptionalFromRest(types), options));\n}\n/** `[Json]` Creates an evaluated Intersect type */\nexport function IntersectEvaluated(types, options = {}) {\n if (types.length === 1)\n return CreateType(types[0], options);\n if (types.length === 0)\n return Never(options);\n if (types.some((schema) => IsTransform(schema)))\n throw new Error('Cannot intersect transform types');\n return ResolveIntersect(types, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Never } from '../never/index.mjs';\nimport { IntersectCreate } from './intersect-create.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTransform } from '../guard/kind.mjs';\n/** `[Json]` Creates an evaluated Intersect type */\nexport function Intersect(types, options) {\n if (types.length === 1)\n return CreateType(types[0], options);\n if (types.length === 0)\n return Never(options);\n if (types.some((schema) => IsTransform(schema)))\n throw new Error('Cannot intersect transform types');\n return IntersectCreate(types, options);\n}\n","import { TypeBoxError } from '../error/index.mjs';\nimport { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Ref type. The referenced type must contain a $id */\nexport function Ref(...args) {\n const [$ref, options] = typeof args[0] === 'string' ? [args[0], args[1]] : [args[0].$id, args[1]];\n if (typeof $ref !== 'string')\n throw new TypeBoxError('Ref: $ref must be a string');\n return CreateType({ [Kind]: 'Ref', $ref }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Ref } from '../ref/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsIntersect, IsUnion, IsPromise, IsRef, IsComputed } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromComputed(target, parameters) {\n return Computed('Awaited', [Computed(target, parameters)]);\n}\n// prettier-ignore\nfunction FromRef($ref) {\n return Computed('Awaited', [Ref($ref)]);\n}\n// prettier-ignore\nfunction FromIntersect(types) {\n return Intersect(FromRest(types));\n}\n// prettier-ignore\nfunction FromUnion(types) {\n return Union(FromRest(types));\n}\n// prettier-ignore\nfunction FromPromise(type) {\n return Awaited(type);\n}\n// prettier-ignore\nfunction FromRest(types) {\n return types.map(type => Awaited(type));\n}\n/** `[JavaScript]` Constructs a type by recursively unwrapping Promise types */\nexport function Awaited(type, options) {\n return CreateType(IsComputed(type) ? FromComputed(type.target, type.parameters) : IsIntersect(type) ? FromIntersect(type.allOf) : IsUnion(type) ? FromUnion(type.anyOf) : IsPromise(type) ? FromPromise(type.item) : IsRef(type) ? FromRef(type.$ref) : type, options);\n}\n","import { SetUnionMany, SetIntersectMany } from '../sets/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsIntersect, IsUnion, IsTuple, IsArray, IsObject, IsRecord } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromRest(types) {\n const result = [];\n for (const L of types)\n result.push(KeyOfPropertyKeys(L));\n return result;\n}\n// prettier-ignore\nfunction FromIntersect(types) {\n const propertyKeysArray = FromRest(types);\n const propertyKeys = SetUnionMany(propertyKeysArray);\n return propertyKeys;\n}\n// prettier-ignore\nfunction FromUnion(types) {\n const propertyKeysArray = FromRest(types);\n const propertyKeys = SetIntersectMany(propertyKeysArray);\n return propertyKeys;\n}\n// prettier-ignore\nfunction FromTuple(types) {\n return types.map((_, indexer) => indexer.toString());\n}\n// prettier-ignore\nfunction FromArray(_) {\n return (['[number]']);\n}\n// prettier-ignore\nfunction FromProperties(T) {\n return (globalThis.Object.getOwnPropertyNames(T));\n}\n// ------------------------------------------------------------------\n// FromPatternProperties\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromPatternProperties(patternProperties) {\n if (!includePatternProperties)\n return [];\n const patternPropertyKeys = globalThis.Object.getOwnPropertyNames(patternProperties);\n return patternPropertyKeys.map(key => {\n return (key[0] === '^' && key[key.length - 1] === '$')\n ? key.slice(1, key.length - 1)\n : key;\n });\n}\n/** Returns a tuple of PropertyKeys derived from the given TSchema. */\n// prettier-ignore\nexport function KeyOfPropertyKeys(type) {\n return (IsIntersect(type) ? FromIntersect(type.allOf) :\n IsUnion(type) ? FromUnion(type.anyOf) :\n IsTuple(type) ? FromTuple(type.items ?? []) :\n IsArray(type) ? FromArray(type.items) :\n IsObject(type) ? FromProperties(type.properties) :\n IsRecord(type) ? FromPatternProperties(type.patternProperties) :\n []);\n}\n// ----------------------------------------------------------------\n// KeyOfPattern\n// ----------------------------------------------------------------\nlet includePatternProperties = false;\n/** Returns a regular expression pattern derived from the given TSchema */\nexport function KeyOfPattern(schema) {\n includePatternProperties = true;\n const keys = KeyOfPropertyKeys(schema);\n includePatternProperties = false;\n const pattern = keys.map((key) => `(${key})`);\n return `^(${pattern.join('|')})$`;\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Ref } from '../ref/index.mjs';\nimport { KeyOfPropertyKeys } from './keyof-property-keys.mjs';\nimport { UnionEvaluated } from '../union/index.mjs';\nimport { KeyOfFromMappedResult } from './keyof-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedResult, IsRef, IsComputed } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromComputed(target, parameters) {\n return Computed('KeyOf', [Computed(target, parameters)]);\n}\n// prettier-ignore\nfunction FromRef($ref) {\n return Computed('KeyOf', [Ref($ref)]);\n}\n// prettier-ignore\nfunction KeyOfFromType(type, options) {\n const propertyKeys = KeyOfPropertyKeys(type);\n const propertyKeyTypes = KeyOfPropertyKeysToRest(propertyKeys);\n const result = UnionEvaluated(propertyKeyTypes);\n return CreateType(result, options);\n}\n// prettier-ignore\nexport function KeyOfPropertyKeysToRest(propertyKeys) {\n return propertyKeys.map(L => L === '[number]' ? Number() : Literal(L));\n}\n/** `[Json]` Creates a KeyOf type */\nexport function KeyOf(type, options) {\n return (IsComputed(type) ? FromComputed(type.target, type.parameters) : IsRef(type) ? FromRef(type.$ref) : IsMappedResult(type) ? KeyOfFromMappedResult(type, options) : KeyOfFromType(type, options));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { KeyOf } from './keyof.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(properties, options) {\n const result = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(properties))\n result[K2] = KeyOf(properties[K2], Clone(options));\n return result;\n}\n// prettier-ignore\nfunction FromMappedResult(mappedResult, options) {\n return FromProperties(mappedResult.properties, options);\n}\n// prettier-ignore\nexport function KeyOfFromMappedResult(mappedResult, options) {\n const properties = FromMappedResult(mappedResult, options);\n return MappedResult(properties);\n}\n","import { IntersectEvaluated } from '../intersect/index.mjs';\nimport { IndexFromPropertyKeys } from '../indexed/index.mjs';\nimport { KeyOfPropertyKeys } from '../keyof/index.mjs';\nimport { Object as _Object_ } from '../object/index.mjs';\nimport { SetDistinct } from '../sets/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsNever } from '../guard/kind.mjs';\n// prettier-ignore\nfunction CompositeKeys(T) {\n const Acc = [];\n for (const L of T)\n Acc.push(...KeyOfPropertyKeys(L));\n return SetDistinct(Acc);\n}\n// prettier-ignore\nfunction FilterNever(T) {\n return T.filter(L => !IsNever(L));\n}\n// prettier-ignore\nfunction CompositeProperty(T, K) {\n const Acc = [];\n for (const L of T)\n Acc.push(...IndexFromPropertyKeys(L, [K]));\n return FilterNever(Acc);\n}\n// prettier-ignore\nfunction CompositeProperties(T, K) {\n const Acc = {};\n for (const L of K) {\n Acc[L] = IntersectEvaluated(CompositeProperty(T, L));\n }\n return Acc;\n}\n// prettier-ignore\nexport function Composite(T, options) {\n const K = CompositeKeys(T);\n const P = CompositeProperties(T, K);\n const R = _Object_(P, options);\n return R;\n}\n","import { Kind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/type.mjs';\n/** `[JavaScript]` Creates a Date type */\nexport function Date(options) {\n return CreateType({ [Kind]: 'Date', type: 'Date' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Null type */\nexport function Null(options) {\n return CreateType({ [Kind]: 'Null', type: 'null' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Symbol type */\nexport function Symbol(options) {\n return CreateType({ [Kind]: 'Symbol', type: 'symbol' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Undefined type */\nexport function Undefined(options) {\n return CreateType({ [Kind]: 'Undefined', type: 'undefined' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Uint8Array type */\nexport function Uint8Array(options) {\n return CreateType({ [Kind]: 'Uint8Array', type: 'Uint8Array' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Unknown type */\nexport function Unknown(options) {\n return CreateType({ [Kind]: 'Unknown' }, options);\n}\n","import { Any } from '../any/index.mjs';\nimport { BigInt } from '../bigint/index.mjs';\nimport { Date } from '../date/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Null } from '../null/index.mjs';\nimport { Object as _Object_ } from '../object/index.mjs';\nimport { Symbol } from '../symbol/index.mjs';\nimport { Tuple } from '../tuple/index.mjs';\nimport { Readonly } from '../readonly/index.mjs';\nimport { Undefined } from '../undefined/index.mjs';\nimport { Uint8Array } from '../uint8array/index.mjs';\nimport { Unknown } from '../unknown/index.mjs';\nimport { CreateType } from '../create/index.mjs';\n// ------------------------------------------------------------------\n// ValueGuard\n// ------------------------------------------------------------------\nimport { IsArray, IsNumber, IsBigInt, IsUint8Array, IsDate, IsIterator, IsObject, IsAsyncIterator, IsFunction, IsUndefined, IsNull, IsSymbol, IsBoolean, IsString } from '../guard/value.mjs';\n// prettier-ignore\nfunction FromArray(T) {\n return T.map(L => FromValue(L, false));\n}\n// prettier-ignore\nfunction FromProperties(value) {\n const Acc = {};\n for (const K of globalThis.Object.getOwnPropertyNames(value))\n Acc[K] = Readonly(FromValue(value[K], false));\n return Acc;\n}\nfunction ConditionalReadonly(T, root) {\n return (root === true ? T : Readonly(T));\n}\n// prettier-ignore\nfunction FromValue(value, root) {\n return (IsAsyncIterator(value) ? ConditionalReadonly(Any(), root) :\n IsIterator(value) ? ConditionalReadonly(Any(), root) :\n IsArray(value) ? Readonly(Tuple(FromArray(value))) :\n IsUint8Array(value) ? Uint8Array() :\n IsDate(value) ? Date() :\n IsObject(value) ? ConditionalReadonly(_Object_(FromProperties(value)), root) :\n IsFunction(value) ? ConditionalReadonly(FunctionType([], Unknown()), root) :\n IsUndefined(value) ? Undefined() :\n IsNull(value) ? Null() :\n IsSymbol(value) ? Symbol() :\n IsBigInt(value) ? BigInt() :\n IsNumber(value) ? Literal(value) :\n IsBoolean(value) ? Literal(value) :\n IsString(value) ? Literal(value) :\n _Object_({}));\n}\n/** `[JavaScript]` Creates a readonly const type from the given value. */\nexport function Const(T, options) {\n return CreateType(FromValue(T, true), options);\n}\n","import { Tuple } from '../tuple/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n/** `[JavaScript]` Extracts the ConstructorParameters from the given Constructor type */\nexport function ConstructorParameters(schema, options) {\n return (KindGuard.IsConstructor(schema) ? Tuple(schema.parameters, options) : Never(options));\n}\n","import { Literal } from '../literal/index.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\nimport { Union } from '../union/index.mjs';\n// ------------------------------------------------------------------\n// ValueGuard\n// ------------------------------------------------------------------\nimport { IsUndefined } from '../guard/value.mjs';\n/** `[Json]` Creates a Enum type */\nexport function Enum(item, options) {\n if (IsUndefined(item))\n throw new Error('Enum undefined or empty');\n const values1 = globalThis.Object.getOwnPropertyNames(item)\n .filter((key) => isNaN(key))\n .map((key) => item[key]);\n const values2 = [...new Set(values1)];\n const anyOf = values2.map((value) => Literal(value));\n return Union(anyOf, { ...options, [Hint]: 'Enum' });\n}\n","import { Any } from '../any/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { String } from '../string/index.mjs';\nimport { Unknown } from '../unknown/index.mjs';\nimport { TemplateLiteralToUnion } from '../template-literal/index.mjs';\nimport { PatternNumberExact, PatternStringExact } from '../patterns/index.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\nimport { TypeGuard, ValueGuard } from '../guard/index.mjs';\nexport class ExtendsResolverError extends TypeBoxError {\n}\nexport var ExtendsResult;\n(function (ExtendsResult) {\n ExtendsResult[ExtendsResult[\"Union\"] = 0] = \"Union\";\n ExtendsResult[ExtendsResult[\"True\"] = 1] = \"True\";\n ExtendsResult[ExtendsResult[\"False\"] = 2] = \"False\";\n})(ExtendsResult || (ExtendsResult = {}));\n// ------------------------------------------------------------------\n// IntoBooleanResult\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IntoBooleanResult(result) {\n return result === ExtendsResult.False ? result : ExtendsResult.True;\n}\n// ------------------------------------------------------------------\n// Throw\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction Throw(message) {\n throw new ExtendsResolverError(message);\n}\n// ------------------------------------------------------------------\n// StructuralRight\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsStructuralRight(right) {\n return (TypeGuard.IsNever(right) ||\n TypeGuard.IsIntersect(right) ||\n TypeGuard.IsUnion(right) ||\n TypeGuard.IsUnknown(right) ||\n TypeGuard.IsAny(right));\n}\n// prettier-ignore\nfunction StructuralRight(left, right) {\n return (TypeGuard.IsNever(right) ? FromNeverRight(left, right) :\n TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n TypeGuard.IsUnion(right) ? FromUnionRight(left, right) :\n TypeGuard.IsUnknown(right) ? FromUnknownRight(left, right) :\n TypeGuard.IsAny(right) ? FromAnyRight(left, right) :\n Throw('StructuralRight'));\n}\n// ------------------------------------------------------------------\n// Any\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromAnyRight(left, right) {\n return ExtendsResult.True;\n}\n// prettier-ignore\nfunction FromAny(left, right) {\n return (TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n (TypeGuard.IsUnion(right) && right.anyOf.some((schema) => TypeGuard.IsAny(schema) || TypeGuard.IsUnknown(schema))) ? ExtendsResult.True :\n TypeGuard.IsUnion(right) ? ExtendsResult.Union :\n TypeGuard.IsUnknown(right) ? ExtendsResult.True :\n TypeGuard.IsAny(right) ? ExtendsResult.True :\n ExtendsResult.Union);\n}\n// ------------------------------------------------------------------\n// Array\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromArrayRight(left, right) {\n return (TypeGuard.IsUnknown(left) ? ExtendsResult.False :\n TypeGuard.IsAny(left) ? ExtendsResult.Union :\n TypeGuard.IsNever(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromArray(left, right) {\n return (TypeGuard.IsObject(right) && IsObjectArrayLike(right) ? ExtendsResult.True :\n IsStructuralRight(right) ? StructuralRight(left, right) :\n !TypeGuard.IsArray(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.items, right.items)));\n}\n// ------------------------------------------------------------------\n// AsyncIterator\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromAsyncIterator(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n !TypeGuard.IsAsyncIterator(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.items, right.items)));\n}\n// ------------------------------------------------------------------\n// BigInt\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromBigInt(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsBigInt(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Boolean\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromBooleanRight(left, right) {\n return (TypeGuard.IsLiteralBoolean(left) ? ExtendsResult.True :\n TypeGuard.IsBoolean(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromBoolean(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsBoolean(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Constructor\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromConstructor(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n !TypeGuard.IsConstructor(right) ? ExtendsResult.False :\n left.parameters.length > right.parameters.length ? ExtendsResult.False :\n (!left.parameters.every((schema, index) => IntoBooleanResult(Visit(right.parameters[index], schema)) === ExtendsResult.True)) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.returns, right.returns)));\n}\n// ------------------------------------------------------------------\n// Date\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromDate(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsDate(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Function\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromFunction(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n !TypeGuard.IsFunction(right) ? ExtendsResult.False :\n left.parameters.length > right.parameters.length ? ExtendsResult.False :\n (!left.parameters.every((schema, index) => IntoBooleanResult(Visit(right.parameters[index], schema)) === ExtendsResult.True)) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.returns, right.returns)));\n}\n// ------------------------------------------------------------------\n// Integer\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromIntegerRight(left, right) {\n return (TypeGuard.IsLiteral(left) && ValueGuard.IsNumber(left.const) ? ExtendsResult.True :\n TypeGuard.IsNumber(left) || TypeGuard.IsInteger(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromInteger(left, right) {\n return (TypeGuard.IsInteger(right) || TypeGuard.IsNumber(right) ? ExtendsResult.True :\n IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Intersect\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromIntersectRight(left, right) {\n return right.allOf.every((schema) => Visit(left, schema) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// prettier-ignore\nfunction FromIntersect(left, right) {\n return left.allOf.some((schema) => Visit(schema, right) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// ------------------------------------------------------------------\n// Iterator\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromIterator(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n !TypeGuard.IsIterator(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.items, right.items)));\n}\n// ------------------------------------------------------------------\n// Literal\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromLiteral(left, right) {\n return (TypeGuard.IsLiteral(right) && right.const === left.const ? ExtendsResult.True :\n IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsString(right) ? FromStringRight(left, right) :\n TypeGuard.IsNumber(right) ? FromNumberRight(left, right) :\n TypeGuard.IsInteger(right) ? FromIntegerRight(left, right) :\n TypeGuard.IsBoolean(right) ? FromBooleanRight(left, right) :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Never\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromNeverRight(left, right) {\n return ExtendsResult.False;\n}\n// prettier-ignore\nfunction FromNever(left, right) {\n return ExtendsResult.True;\n}\n// ------------------------------------------------------------------\n// Not\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction UnwrapTNot(schema) {\n let [current, depth] = [schema, 0];\n while (true) {\n if (!TypeGuard.IsNot(current))\n break;\n current = current.not;\n depth += 1;\n }\n return depth % 2 === 0 ? current : Unknown();\n}\n// prettier-ignore\nfunction FromNot(left, right) {\n // TypeScript has no concept of negated types, and attempts to correctly check the negated\n // type at runtime would put TypeBox at odds with TypeScripts ability to statically infer\n // the type. Instead we unwrap to either unknown or T and continue evaluating.\n // prettier-ignore\n return (TypeGuard.IsNot(left) ? Visit(UnwrapTNot(left), right) :\n TypeGuard.IsNot(right) ? Visit(left, UnwrapTNot(right)) :\n Throw('Invalid fallthrough for Not'));\n}\n// ------------------------------------------------------------------\n// Null\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromNull(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsNull(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Number\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromNumberRight(left, right) {\n return (TypeGuard.IsLiteralNumber(left) ? ExtendsResult.True :\n TypeGuard.IsNumber(left) || TypeGuard.IsInteger(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromNumber(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsInteger(right) || TypeGuard.IsNumber(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Object\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsObjectPropertyCount(schema, count) {\n return Object.getOwnPropertyNames(schema.properties).length === count;\n}\n// prettier-ignore\nfunction IsObjectStringLike(schema) {\n return IsObjectArrayLike(schema);\n}\n// prettier-ignore\nfunction IsObjectSymbolLike(schema) {\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'description' in schema.properties && TypeGuard.IsUnion(schema.properties.description) && schema.properties.description.anyOf.length === 2 && ((TypeGuard.IsString(schema.properties.description.anyOf[0]) &&\n TypeGuard.IsUndefined(schema.properties.description.anyOf[1])) || (TypeGuard.IsString(schema.properties.description.anyOf[1]) &&\n TypeGuard.IsUndefined(schema.properties.description.anyOf[0]))));\n}\n// prettier-ignore\nfunction IsObjectNumberLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectBooleanLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectBigIntLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectDateLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectUint8ArrayLike(schema) {\n return IsObjectArrayLike(schema);\n}\n// prettier-ignore\nfunction IsObjectFunctionLike(schema) {\n const length = Number();\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'length' in schema.properties && IntoBooleanResult(Visit(schema.properties['length'], length)) === ExtendsResult.True);\n}\n// prettier-ignore\nfunction IsObjectConstructorLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectArrayLike(schema) {\n const length = Number();\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'length' in schema.properties && IntoBooleanResult(Visit(schema.properties['length'], length)) === ExtendsResult.True);\n}\n// prettier-ignore\nfunction IsObjectPromiseLike(schema) {\n const then = FunctionType([Any()], Any());\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'then' in schema.properties && IntoBooleanResult(Visit(schema.properties['then'], then)) === ExtendsResult.True);\n}\n// ------------------------------------------------------------------\n// Property\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction Property(left, right) {\n return (Visit(left, right) === ExtendsResult.False ? ExtendsResult.False :\n TypeGuard.IsOptional(left) && !TypeGuard.IsOptional(right) ? ExtendsResult.False :\n ExtendsResult.True);\n}\n// prettier-ignore\nfunction FromObjectRight(left, right) {\n return (TypeGuard.IsUnknown(left) ? ExtendsResult.False :\n TypeGuard.IsAny(left) ? ExtendsResult.Union : (TypeGuard.IsNever(left) ||\n (TypeGuard.IsLiteralString(left) && IsObjectStringLike(right)) ||\n (TypeGuard.IsLiteralNumber(left) && IsObjectNumberLike(right)) ||\n (TypeGuard.IsLiteralBoolean(left) && IsObjectBooleanLike(right)) ||\n (TypeGuard.IsSymbol(left) && IsObjectSymbolLike(right)) ||\n (TypeGuard.IsBigInt(left) && IsObjectBigIntLike(right)) ||\n (TypeGuard.IsString(left) && IsObjectStringLike(right)) ||\n (TypeGuard.IsSymbol(left) && IsObjectSymbolLike(right)) ||\n (TypeGuard.IsNumber(left) && IsObjectNumberLike(right)) ||\n (TypeGuard.IsInteger(left) && IsObjectNumberLike(right)) ||\n (TypeGuard.IsBoolean(left) && IsObjectBooleanLike(right)) ||\n (TypeGuard.IsUint8Array(left) && IsObjectUint8ArrayLike(right)) ||\n (TypeGuard.IsDate(left) && IsObjectDateLike(right)) ||\n (TypeGuard.IsConstructor(left) && IsObjectConstructorLike(right)) ||\n (TypeGuard.IsFunction(left) && IsObjectFunctionLike(right))) ? ExtendsResult.True :\n (TypeGuard.IsRecord(left) && TypeGuard.IsString(RecordKey(left))) ? (() => {\n // When expressing a Record with literal key values, the Record is converted into a Object with\n // the Hint assigned as `Record`. This is used to invert the extends logic.\n return right[Hint] === 'Record' ? ExtendsResult.True : ExtendsResult.False;\n })() :\n (TypeGuard.IsRecord(left) && TypeGuard.IsNumber(RecordKey(left))) ? (() => {\n return IsObjectPropertyCount(right, 0) ? ExtendsResult.True : ExtendsResult.False;\n })() :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromObject(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n !TypeGuard.IsObject(right) ? ExtendsResult.False :\n (() => {\n for (const key of Object.getOwnPropertyNames(right.properties)) {\n if (!(key in left.properties) && !TypeGuard.IsOptional(right.properties[key])) {\n return ExtendsResult.False;\n }\n if (TypeGuard.IsOptional(right.properties[key])) {\n return ExtendsResult.True;\n }\n if (Property(left.properties[key], right.properties[key]) === ExtendsResult.False) {\n return ExtendsResult.False;\n }\n }\n return ExtendsResult.True;\n })());\n}\n// ------------------------------------------------------------------\n// Promise\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromPromise(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) && IsObjectPromiseLike(right) ? ExtendsResult.True :\n !TypeGuard.IsPromise(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.item, right.item)));\n}\n// ------------------------------------------------------------------\n// Record\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RecordKey(schema) {\n return (PatternNumberExact in schema.patternProperties ? Number() :\n PatternStringExact in schema.patternProperties ? String() :\n Throw('Unknown record key pattern'));\n}\n// prettier-ignore\nfunction RecordValue(schema) {\n return (PatternNumberExact in schema.patternProperties ? schema.patternProperties[PatternNumberExact] :\n PatternStringExact in schema.patternProperties ? schema.patternProperties[PatternStringExact] :\n Throw('Unable to get record value schema'));\n}\n// prettier-ignore\nfunction FromRecordRight(left, right) {\n const [Key, Value] = [RecordKey(right), RecordValue(right)];\n return ((TypeGuard.IsLiteralString(left) && TypeGuard.IsNumber(Key) && IntoBooleanResult(Visit(left, Value)) === ExtendsResult.True) ? ExtendsResult.True :\n TypeGuard.IsUint8Array(left) && TypeGuard.IsNumber(Key) ? Visit(left, Value) :\n TypeGuard.IsString(left) && TypeGuard.IsNumber(Key) ? Visit(left, Value) :\n TypeGuard.IsArray(left) && TypeGuard.IsNumber(Key) ? Visit(left, Value) :\n TypeGuard.IsObject(left) ? (() => {\n for (const key of Object.getOwnPropertyNames(left.properties)) {\n if (Property(Value, left.properties[key]) === ExtendsResult.False) {\n return ExtendsResult.False;\n }\n }\n return ExtendsResult.True;\n })() :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromRecord(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n !TypeGuard.IsRecord(right) ? ExtendsResult.False :\n Visit(RecordValue(left), RecordValue(right)));\n}\n// ------------------------------------------------------------------\n// RegExp\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromRegExp(left, right) {\n // Note: RegExp types evaluate as strings, not RegExp objects.\n // Here we remap either into string and continue evaluating.\n const L = TypeGuard.IsRegExp(left) ? String() : left;\n const R = TypeGuard.IsRegExp(right) ? String() : right;\n return Visit(L, R);\n}\n// ------------------------------------------------------------------\n// String\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromStringRight(left, right) {\n return (TypeGuard.IsLiteral(left) && ValueGuard.IsString(left.const) ? ExtendsResult.True :\n TypeGuard.IsString(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromString(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsString(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Symbol\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromSymbol(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsSymbol(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// TemplateLiteral\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromTemplateLiteral(left, right) {\n // TemplateLiteral types are resolved to either unions for finite expressions or string\n // for infinite expressions. Here we call to TemplateLiteralResolver to resolve for\n // either type and continue evaluating.\n return (TypeGuard.IsTemplateLiteral(left) ? Visit(TemplateLiteralToUnion(left), right) :\n TypeGuard.IsTemplateLiteral(right) ? Visit(left, TemplateLiteralToUnion(right)) :\n Throw('Invalid fallthrough for TemplateLiteral'));\n}\n// ------------------------------------------------------------------\n// Tuple\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsArrayOfTuple(left, right) {\n return (TypeGuard.IsArray(right) &&\n left.items !== undefined &&\n left.items.every((schema) => Visit(schema, right.items) === ExtendsResult.True));\n}\n// prettier-ignore\nfunction FromTupleRight(left, right) {\n return (TypeGuard.IsNever(left) ? ExtendsResult.True :\n TypeGuard.IsUnknown(left) ? ExtendsResult.False :\n TypeGuard.IsAny(left) ? ExtendsResult.Union :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromTuple(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) && IsObjectArrayLike(right) ? ExtendsResult.True :\n TypeGuard.IsArray(right) && IsArrayOfTuple(left, right) ? ExtendsResult.True :\n !TypeGuard.IsTuple(right) ? ExtendsResult.False :\n (ValueGuard.IsUndefined(left.items) && !ValueGuard.IsUndefined(right.items)) || (!ValueGuard.IsUndefined(left.items) && ValueGuard.IsUndefined(right.items)) ? ExtendsResult.False :\n (ValueGuard.IsUndefined(left.items) && !ValueGuard.IsUndefined(right.items)) ? ExtendsResult.True :\n left.items.every((schema, index) => Visit(schema, right.items[index]) === ExtendsResult.True) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Uint8Array\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUint8Array(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsUint8Array(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Undefined\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUndefined(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsVoid(right) ? FromVoidRight(left, right) :\n TypeGuard.IsUndefined(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Union\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUnionRight(left, right) {\n return right.anyOf.some((schema) => Visit(left, schema) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// prettier-ignore\nfunction FromUnion(left, right) {\n return left.anyOf.every((schema) => Visit(schema, right) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// ------------------------------------------------------------------\n// Unknown\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUnknownRight(left, right) {\n return ExtendsResult.True;\n}\n// prettier-ignore\nfunction FromUnknown(left, right) {\n return (TypeGuard.IsNever(right) ? FromNeverRight(left, right) :\n TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n TypeGuard.IsUnion(right) ? FromUnionRight(left, right) :\n TypeGuard.IsAny(right) ? FromAnyRight(left, right) :\n TypeGuard.IsString(right) ? FromStringRight(left, right) :\n TypeGuard.IsNumber(right) ? FromNumberRight(left, right) :\n TypeGuard.IsInteger(right) ? FromIntegerRight(left, right) :\n TypeGuard.IsBoolean(right) ? FromBooleanRight(left, right) :\n TypeGuard.IsArray(right) ? FromArrayRight(left, right) :\n TypeGuard.IsTuple(right) ? FromTupleRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsUnknown(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Void\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromVoidRight(left, right) {\n return (TypeGuard.IsUndefined(left) ? ExtendsResult.True :\n TypeGuard.IsUndefined(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromVoid(left, right) {\n return (TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n TypeGuard.IsUnion(right) ? FromUnionRight(left, right) :\n TypeGuard.IsUnknown(right) ? FromUnknownRight(left, right) :\n TypeGuard.IsAny(right) ? FromAnyRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsVoid(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction Visit(left, right) {\n return (\n // resolvable\n (TypeGuard.IsTemplateLiteral(left) || TypeGuard.IsTemplateLiteral(right)) ? FromTemplateLiteral(left, right) :\n (TypeGuard.IsRegExp(left) || TypeGuard.IsRegExp(right)) ? FromRegExp(left, right) :\n (TypeGuard.IsNot(left) || TypeGuard.IsNot(right)) ? FromNot(left, right) :\n // standard\n TypeGuard.IsAny(left) ? FromAny(left, right) :\n TypeGuard.IsArray(left) ? FromArray(left, right) :\n TypeGuard.IsBigInt(left) ? FromBigInt(left, right) :\n TypeGuard.IsBoolean(left) ? FromBoolean(left, right) :\n TypeGuard.IsAsyncIterator(left) ? FromAsyncIterator(left, right) :\n TypeGuard.IsConstructor(left) ? FromConstructor(left, right) :\n TypeGuard.IsDate(left) ? FromDate(left, right) :\n TypeGuard.IsFunction(left) ? FromFunction(left, right) :\n TypeGuard.IsInteger(left) ? FromInteger(left, right) :\n TypeGuard.IsIntersect(left) ? FromIntersect(left, right) :\n TypeGuard.IsIterator(left) ? FromIterator(left, right) :\n TypeGuard.IsLiteral(left) ? FromLiteral(left, right) :\n TypeGuard.IsNever(left) ? FromNever(left, right) :\n TypeGuard.IsNull(left) ? FromNull(left, right) :\n TypeGuard.IsNumber(left) ? FromNumber(left, right) :\n TypeGuard.IsObject(left) ? FromObject(left, right) :\n TypeGuard.IsRecord(left) ? FromRecord(left, right) :\n TypeGuard.IsString(left) ? FromString(left, right) :\n TypeGuard.IsSymbol(left) ? FromSymbol(left, right) :\n TypeGuard.IsTuple(left) ? FromTuple(left, right) :\n TypeGuard.IsPromise(left) ? FromPromise(left, right) :\n TypeGuard.IsUint8Array(left) ? FromUint8Array(left, right) :\n TypeGuard.IsUndefined(left) ? FromUndefined(left, right) :\n TypeGuard.IsUnion(left) ? FromUnion(left, right) :\n TypeGuard.IsUnknown(left) ? FromUnknown(left, right) :\n TypeGuard.IsVoid(left) ? FromVoid(left, right) :\n Throw(`Unknown left type operand '${left[Kind]}'`));\n}\nexport function ExtendsCheck(left, right) {\n return Visit(left, right);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Extends } from './extends.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(P, Right, True, False, options) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Extends(P[K2], Right, True, False, Clone(options));\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(Left, Right, True, False, options) {\n return FromProperties(Left.properties, Right, True, False, options);\n}\n// prettier-ignore\nexport function ExtendsFromMappedResult(Left, Right, True, False, options) {\n const P = FromMappedResult(Left, Right, True, False, options);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Union } from '../union/index.mjs';\nimport { ExtendsCheck, ExtendsResult } from './extends-check.mjs';\nimport { ExtendsFromMappedKey } from './extends-from-mapped-key.mjs';\nimport { ExtendsFromMappedResult } from './extends-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsMappedResult } from '../guard/kind.mjs';\n// prettier-ignore\nfunction ExtendsResolve(left, right, trueType, falseType) {\n const R = ExtendsCheck(left, right);\n return (R === ExtendsResult.Union ? Union([trueType, falseType]) :\n R === ExtendsResult.True ? trueType :\n falseType);\n}\n/** `[Json]` Creates a Conditional type */\nexport function Extends(L, R, T, F, options) {\n // prettier-ignore\n return (IsMappedResult(L) ? ExtendsFromMappedResult(L, R, T, F, options) :\n IsMappedKey(L) ? CreateType(ExtendsFromMappedKey(L, R, T, F, options)) :\n CreateType(ExtendsResolve(L, R, T, F), options));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Extends } from './extends.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromPropertyKey(K, U, L, R, options) {\n return {\n [K]: Extends(Literal(K), U, L, R, Clone(options))\n };\n}\n// prettier-ignore\nfunction FromPropertyKeys(K, U, L, R, options) {\n return K.reduce((Acc, LK) => {\n return { ...Acc, ...FromPropertyKey(LK, U, L, R, options) };\n }, {});\n}\n// prettier-ignore\nfunction FromMappedKey(K, U, L, R, options) {\n return FromPropertyKeys(K.keys, U, L, R, options);\n}\n// prettier-ignore\nexport function ExtendsFromMappedKey(T, U, L, R, options) {\n const P = FromMappedKey(T, U, L, R, options);\n return MappedResult(P);\n}\n","import { Exclude } from './exclude.mjs';\nimport { TemplateLiteralToUnion } from '../template-literal/index.mjs';\nexport function ExcludeFromTemplateLiteral(L, R) {\n return Exclude(TemplateLiteralToUnion(L), R);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { ExtendsCheck, ExtendsResult } from '../extends/index.mjs';\nimport { ExcludeFromMappedResult } from './exclude-from-mapped-result.mjs';\nimport { ExcludeFromTemplateLiteral } from './exclude-from-template-literal.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedResult, IsTemplateLiteral, IsUnion } from '../guard/kind.mjs';\nfunction ExcludeRest(L, R) {\n const excluded = L.filter((inner) => ExtendsCheck(inner, R) === ExtendsResult.False);\n return excluded.length === 1 ? excluded[0] : Union(excluded);\n}\n/** `[Json]` Constructs a type by excluding from unionType all union members that are assignable to excludedMembers */\nexport function Exclude(L, R, options = {}) {\n // overloads\n if (IsTemplateLiteral(L))\n return CreateType(ExcludeFromTemplateLiteral(L, R), options);\n if (IsMappedResult(L))\n return CreateType(ExcludeFromMappedResult(L, R), options);\n // prettier-ignore\n return CreateType(IsUnion(L) ? ExcludeRest(L.anyOf, R) :\n ExtendsCheck(L, R) !== ExtendsResult.False ? Never() : L, options);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Exclude } from './exclude.mjs';\n// prettier-ignore\nfunction FromProperties(P, U) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Exclude(P[K2], U);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, T) {\n return FromProperties(R.properties, T);\n}\n// prettier-ignore\nexport function ExcludeFromMappedResult(R, T) {\n const P = FromMappedResult(R, T);\n return MappedResult(P);\n}\n","import { Extract } from './extract.mjs';\nimport { TemplateLiteralToUnion } from '../template-literal/index.mjs';\nexport function ExtractFromTemplateLiteral(L, R) {\n return Extract(TemplateLiteralToUnion(L), R);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { ExtendsCheck, ExtendsResult } from '../extends/index.mjs';\nimport { ExtractFromMappedResult } from './extract-from-mapped-result.mjs';\nimport { ExtractFromTemplateLiteral } from './extract-from-template-literal.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedResult, IsTemplateLiteral, IsUnion } from '../guard/kind.mjs';\nfunction ExtractRest(L, R) {\n const extracted = L.filter((inner) => ExtendsCheck(inner, R) !== ExtendsResult.False);\n return extracted.length === 1 ? extracted[0] : Union(extracted);\n}\n/** `[Json]` Constructs a type by extracting from type all union members that are assignable to union */\nexport function Extract(L, R, options) {\n // overloads\n if (IsTemplateLiteral(L))\n return CreateType(ExtractFromTemplateLiteral(L, R), options);\n if (IsMappedResult(L))\n return CreateType(ExtractFromMappedResult(L, R), options);\n // prettier-ignore\n return CreateType(IsUnion(L) ? ExtractRest(L.anyOf, R) :\n ExtendsCheck(L, R) !== ExtendsResult.False ? L : Never(), options);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Extract } from './extract.mjs';\n// prettier-ignore\nfunction FromProperties(P, T) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Extract(P[K2], T);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, T) {\n return FromProperties(R.properties, T);\n}\n// prettier-ignore\nexport function ExtractFromMappedResult(R, T) {\n const P = FromMappedResult(R, T);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Never } from '../never/index.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n/** `[JavaScript]` Extracts the InstanceType from the given Constructor type */\nexport function InstanceType(schema, options) {\n return (KindGuard.IsConstructor(schema) ? CreateType(schema.returns, options) : Never(options));\n}\n","import { Readonly } from '../readonly/index.mjs';\nimport { Optional } from '../optional/index.mjs';\n/** `[Json]` Creates a Readonly and Optional property */\nexport function ReadonlyOptional(schema) {\n return Readonly(Optional(schema));\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { Object as _Object_ } from '../object/index.mjs';\nimport { String } from '../string/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { IsTemplateLiteralFinite } from '../template-literal/index.mjs';\nimport { PatternStringExact, PatternNumberExact, PatternNeverExact } from '../patterns/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\n// ------------------------------------------------------------------\n// ValueGuard\n// ------------------------------------------------------------------\nimport { IsUndefined } from '../guard/value.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsInteger, IsLiteral, IsAny, IsBoolean, IsNever, IsNumber, IsString, IsRegExp, IsTemplateLiteral, IsUnion } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// RecordCreateFromPattern\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RecordCreateFromPattern(pattern, T, options) {\n return CreateType({ [Kind]: 'Record', type: 'object', patternProperties: { [pattern]: T } }, options);\n}\n// ------------------------------------------------------------------\n// RecordCreateFromKeys\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RecordCreateFromKeys(K, T, options) {\n const result = {};\n for (const K2 of K)\n result[K2] = T;\n return _Object_(result, { ...options, [Hint]: 'Record' });\n}\n// prettier-ignore\nfunction FromTemplateLiteralKey(K, T, options) {\n return (IsTemplateLiteralFinite(K)\n ? RecordCreateFromKeys(IndexPropertyKeys(K), T, options)\n : RecordCreateFromPattern(K.pattern, T, options));\n}\n// prettier-ignore\nfunction FromUnionKey(key, type, options) {\n return RecordCreateFromKeys(IndexPropertyKeys(Union(key)), type, options);\n}\n// prettier-ignore\nfunction FromLiteralKey(key, type, options) {\n return RecordCreateFromKeys([key.toString()], type, options);\n}\n// prettier-ignore\nfunction FromRegExpKey(key, type, options) {\n return RecordCreateFromPattern(key.source, type, options);\n}\n// prettier-ignore\nfunction FromStringKey(key, type, options) {\n const pattern = IsUndefined(key.pattern) ? PatternStringExact : key.pattern;\n return RecordCreateFromPattern(pattern, type, options);\n}\n// prettier-ignore\nfunction FromAnyKey(_, type, options) {\n return RecordCreateFromPattern(PatternStringExact, type, options);\n}\n// prettier-ignore\nfunction FromNeverKey(_key, type, options) {\n return RecordCreateFromPattern(PatternNeverExact, type, options);\n}\n// prettier-ignore\nfunction FromBooleanKey(_key, type, options) {\n return _Object_({ true: type, false: type }, options);\n}\n// prettier-ignore\nfunction FromIntegerKey(_key, type, options) {\n return RecordCreateFromPattern(PatternNumberExact, type, options);\n}\n// prettier-ignore\nfunction FromNumberKey(_, type, options) {\n return RecordCreateFromPattern(PatternNumberExact, type, options);\n}\n// ------------------------------------------------------------------\n// TRecordOrObject\n// ------------------------------------------------------------------\n/** `[Json]` Creates a Record type */\nexport function Record(key, type, options = {}) {\n // prettier-ignore\n return (IsUnion(key) ? FromUnionKey(key.anyOf, type, options) :\n IsTemplateLiteral(key) ? FromTemplateLiteralKey(key, type, options) :\n IsLiteral(key) ? FromLiteralKey(key.const, type, options) :\n IsBoolean(key) ? FromBooleanKey(key, type, options) :\n IsInteger(key) ? FromIntegerKey(key, type, options) :\n IsNumber(key) ? FromNumberKey(key, type, options) :\n IsRegExp(key) ? FromRegExpKey(key, type, options) :\n IsString(key) ? FromStringKey(key, type, options) :\n IsAny(key) ? FromAnyKey(key, type, options) :\n IsNever(key) ? FromNeverKey(key, type, options) :\n Never(options));\n}\n// ------------------------------------------------------------------\n// Record Utilities\n// ------------------------------------------------------------------\n/** Gets the Records Pattern */\nexport function RecordPattern(record) {\n return globalThis.Object.getOwnPropertyNames(record.patternProperties)[0];\n}\n/** Gets the Records Key Type */\n// prettier-ignore\nexport function RecordKey(type) {\n const pattern = RecordPattern(type);\n return (pattern === PatternStringExact ? String() :\n pattern === PatternNumberExact ? Number() :\n String({ pattern }));\n}\n/** Gets a Record Value Type */\n// prettier-ignore\nexport function RecordValue(type) {\n return type.patternProperties[RecordPattern(type)];\n}\n","import { CloneType } from '../clone/type.mjs';\nimport { Unknown } from '../unknown/index.mjs';\nimport { ReadonlyOptional } from '../readonly-optional/index.mjs';\nimport { Readonly } from '../readonly/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { Object as _Object_ } from '../object/index.mjs';\nimport { Record, RecordKey, RecordValue } from '../record/index.mjs';\nimport * as ValueGuard from '../guard/value.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromConstructor(args, type) {\n type.parameters = FromTypes(args, type.parameters);\n type.returns = FromType(args, type.returns);\n return type;\n}\n// prettier-ignore\nfunction FromFunction(args, type) {\n type.parameters = FromTypes(args, type.parameters);\n type.returns = FromType(args, type.returns);\n return type;\n}\n// prettier-ignore\nfunction FromIntersect(args, type) {\n type.allOf = FromTypes(args, type.allOf);\n return type;\n}\n// prettier-ignore\nfunction FromUnion(args, type) {\n type.anyOf = FromTypes(args, type.anyOf);\n return type;\n}\n// prettier-ignore\nfunction FromTuple(args, type) {\n if (ValueGuard.IsUndefined(type.items))\n return type;\n type.items = FromTypes(args, type.items);\n return type;\n}\n// prettier-ignore\nfunction FromArray(args, type) {\n type.items = FromType(args, type.items);\n return type;\n}\n// prettier-ignore\nfunction FromAsyncIterator(args, type) {\n type.items = FromType(args, type.items);\n return type;\n}\n// prettier-ignore\nfunction FromIterator(args, type) {\n type.items = FromType(args, type.items);\n return type;\n}\n// prettier-ignore\nfunction FromPromise(args, type) {\n type.item = FromType(args, type.item);\n return type;\n}\n// prettier-ignore\nfunction FromObject(args, type) {\n const mappedProperties = FromProperties(args, type.properties);\n return { ...type, ..._Object_(mappedProperties) }; // retain options\n}\n// prettier-ignore\nfunction FromRecord(args, type) {\n const mappedKey = FromType(args, RecordKey(type));\n const mappedValue = FromType(args, RecordValue(type));\n const result = Record(mappedKey, mappedValue);\n return { ...type, ...result }; // retain options\n}\n// prettier-ignore\nfunction FromArgument(args, argument) {\n return argument.index in args ? args[argument.index] : Unknown();\n}\n// prettier-ignore\nfunction FromProperty(args, type) {\n const isReadonly = KindGuard.IsReadonly(type);\n const isOptional = KindGuard.IsOptional(type);\n const mapped = FromType(args, type);\n return (isReadonly && isOptional ? ReadonlyOptional(mapped) :\n isReadonly && !isOptional ? Readonly(mapped) :\n !isReadonly && isOptional ? Optional(mapped) :\n mapped);\n}\n// prettier-ignore\nfunction FromProperties(args, properties) {\n return globalThis.Object.getOwnPropertyNames(properties).reduce((result, key) => {\n return { ...result, [key]: FromProperty(args, properties[key]) };\n }, {});\n}\n// prettier-ignore\nexport function FromTypes(args, types) {\n return types.map(type => FromType(args, type));\n}\n// prettier-ignore\nfunction FromType(args, type) {\n return (KindGuard.IsConstructor(type) ? FromConstructor(args, type) :\n KindGuard.IsFunction(type) ? FromFunction(args, type) :\n KindGuard.IsIntersect(type) ? FromIntersect(args, type) :\n KindGuard.IsUnion(type) ? FromUnion(args, type) :\n KindGuard.IsTuple(type) ? FromTuple(args, type) :\n KindGuard.IsArray(type) ? FromArray(args, type) :\n KindGuard.IsAsyncIterator(type) ? FromAsyncIterator(args, type) :\n KindGuard.IsIterator(type) ? FromIterator(args, type) :\n KindGuard.IsPromise(type) ? FromPromise(args, type) :\n KindGuard.IsObject(type) ? FromObject(args, type) :\n KindGuard.IsRecord(type) ? FromRecord(args, type) :\n KindGuard.IsArgument(type) ? FromArgument(args, type) :\n type);\n}\n/** `[JavaScript]` Instantiates a type with the given parameters */\n// prettier-ignore\nexport function Instantiate(type, args) {\n return FromType(args, CloneType(type));\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Integer type */\nexport function Integer(options) {\n return CreateType({ [Kind]: 'Integer', type: 'integer' }, options);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Intrinsic } from './intrinsic.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction MappedIntrinsicPropertyKey(K, M, options) {\n return {\n [K]: Intrinsic(Literal(K), M, Clone(options))\n };\n}\n// prettier-ignore\nfunction MappedIntrinsicPropertyKeys(K, M, options) {\n const result = K.reduce((Acc, L) => {\n return { ...Acc, ...MappedIntrinsicPropertyKey(L, M, options) };\n }, {});\n return result;\n}\n// prettier-ignore\nfunction MappedIntrinsicProperties(T, M, options) {\n return MappedIntrinsicPropertyKeys(T['keys'], M, options);\n}\n// prettier-ignore\nexport function IntrinsicFromMappedKey(T, M, options) {\n const P = MappedIntrinsicProperties(T, M, options);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { TemplateLiteral, TemplateLiteralParseExact, IsTemplateLiteralExpressionFinite, TemplateLiteralExpressionGenerate } from '../template-literal/index.mjs';\nimport { IntrinsicFromMappedKey } from './intrinsic-from-mapped-key.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Union } from '../union/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsTemplateLiteral, IsUnion, IsLiteral } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// Apply\n// ------------------------------------------------------------------\nfunction ApplyUncapitalize(value) {\n const [first, rest] = [value.slice(0, 1), value.slice(1)];\n return [first.toLowerCase(), rest].join('');\n}\nfunction ApplyCapitalize(value) {\n const [first, rest] = [value.slice(0, 1), value.slice(1)];\n return [first.toUpperCase(), rest].join('');\n}\nfunction ApplyUppercase(value) {\n return value.toUpperCase();\n}\nfunction ApplyLowercase(value) {\n return value.toLowerCase();\n}\nfunction FromTemplateLiteral(schema, mode, options) {\n // note: template literals require special runtime handling as they are encoded in string patterns.\n // This diverges from the mapped type which would otherwise map on the template literal kind.\n const expression = TemplateLiteralParseExact(schema.pattern);\n const finite = IsTemplateLiteralExpressionFinite(expression);\n if (!finite)\n return { ...schema, pattern: FromLiteralValue(schema.pattern, mode) };\n const strings = [...TemplateLiteralExpressionGenerate(expression)];\n const literals = strings.map((value) => Literal(value));\n const mapped = FromRest(literals, mode);\n const union = Union(mapped);\n return TemplateLiteral([union], options);\n}\n// prettier-ignore\nfunction FromLiteralValue(value, mode) {\n return (typeof value === 'string' ? (mode === 'Uncapitalize' ? ApplyUncapitalize(value) :\n mode === 'Capitalize' ? ApplyCapitalize(value) :\n mode === 'Uppercase' ? ApplyUppercase(value) :\n mode === 'Lowercase' ? ApplyLowercase(value) :\n value) : value.toString());\n}\n// prettier-ignore\nfunction FromRest(T, M) {\n return T.map(L => Intrinsic(L, M));\n}\n/** Applies an intrinsic string manipulation to the given type. */\nexport function Intrinsic(schema, mode, options = {}) {\n // prettier-ignore\n return (\n // Intrinsic-Mapped-Inference\n IsMappedKey(schema) ? IntrinsicFromMappedKey(schema, mode, options) :\n // Standard-Inference\n IsTemplateLiteral(schema) ? FromTemplateLiteral(schema, mode, options) :\n IsUnion(schema) ? Union(FromRest(schema.anyOf, mode), options) :\n IsLiteral(schema) ? Literal(FromLiteralValue(schema.const, mode), options) :\n // Default Type\n CreateType(schema, options));\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Capitalize LiteralString types */\nexport function Capitalize(T, options = {}) {\n return Intrinsic(T, 'Capitalize', options);\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Lowercase LiteralString types */\nexport function Lowercase(T, options = {}) {\n return Intrinsic(T, 'Lowercase', options);\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Uncapitalize LiteralString types */\nexport function Uncapitalize(T, options = {}) {\n return Intrinsic(T, 'Uncapitalize', options);\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Uppercase LiteralString types */\nexport function Uppercase(T, options = {}) {\n return Intrinsic(T, 'Uppercase', options);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Omit } from './omit.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(properties, propertyKeys, options) {\n const result = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(properties))\n result[K2] = Omit(properties[K2], propertyKeys, Clone(options));\n return result;\n}\n// prettier-ignore\nfunction FromMappedResult(mappedResult, propertyKeys, options) {\n return FromProperties(mappedResult.properties, propertyKeys, options);\n}\n// prettier-ignore\nexport function OmitFromMappedResult(mappedResult, propertyKeys, options) {\n const properties = FromMappedResult(mappedResult, propertyKeys, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Discard } from '../discard/discard.mjs';\nimport { TransformKind } from '../symbols/symbols.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Object as _Object_ } from '../object/index.mjs';\n// ------------------------------------------------------------------\n// Mapped\n// ------------------------------------------------------------------\nimport { OmitFromMappedKey } from './omit-from-mapped-key.mjs';\nimport { OmitFromMappedResult } from './omit-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsIntersect, IsUnion, IsObject, IsSchema, IsMappedResult, IsLiteralValue, IsRef } from '../guard/kind.mjs';\nimport { IsArray as IsArrayValue } from '../guard/value.mjs';\n// prettier-ignore\nfunction FromIntersect(types, propertyKeys) {\n return types.map((type) => OmitResolve(type, propertyKeys));\n}\n// prettier-ignore\nfunction FromUnion(types, propertyKeys) {\n return types.map((type) => OmitResolve(type, propertyKeys));\n}\n// ------------------------------------------------------------------\n// FromProperty\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromProperty(properties, key) {\n const { [key]: _, ...R } = properties;\n return R;\n}\n// prettier-ignore\nfunction FromProperties(properties, propertyKeys) {\n return propertyKeys.reduce((T, K2) => FromProperty(T, K2), properties);\n}\n// prettier-ignore\nfunction FromObject(type, propertyKeys, properties) {\n const options = Discard(type, [TransformKind, '$id', 'required', 'properties']);\n const mappedProperties = FromProperties(properties, propertyKeys);\n return _Object_(mappedProperties, options);\n}\n// prettier-ignore\nfunction UnionFromPropertyKeys(propertyKeys) {\n const result = propertyKeys.reduce((result, key) => IsLiteralValue(key) ? [...result, Literal(key)] : result, []);\n return Union(result);\n}\n// prettier-ignore\nfunction OmitResolve(type, propertyKeys) {\n return (IsIntersect(type) ? Intersect(FromIntersect(type.allOf, propertyKeys)) :\n IsUnion(type) ? Union(FromUnion(type.anyOf, propertyKeys)) :\n IsObject(type) ? FromObject(type, propertyKeys, type.properties) :\n _Object_({}));\n}\n/** `[Json]` Constructs a type whose keys are picked from the given type */\n// prettier-ignore\nexport function Omit(type, key, options) {\n const typeKey = IsArrayValue(key) ? UnionFromPropertyKeys(key) : key;\n const propertyKeys = IsSchema(key) ? IndexPropertyKeys(key) : key;\n const isTypeRef = IsRef(type);\n const isKeyRef = IsRef(key);\n return (IsMappedResult(type) ? OmitFromMappedResult(type, propertyKeys, options) :\n IsMappedKey(key) ? OmitFromMappedKey(type, key, options) :\n (isTypeRef && isKeyRef) ? Computed('Omit', [type, typeKey], options) :\n (!isTypeRef && isKeyRef) ? Computed('Omit', [type, typeKey], options) :\n (isTypeRef && !isKeyRef) ? Computed('Omit', [type, typeKey], options) :\n CreateType({ ...OmitResolve(type, propertyKeys), ...options }));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Omit } from './omit.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromPropertyKey(type, key, options) {\n return { [key]: Omit(type, [key], Clone(options)) };\n}\n// prettier-ignore\nfunction FromPropertyKeys(type, propertyKeys, options) {\n return propertyKeys.reduce((Acc, LK) => {\n return { ...Acc, ...FromPropertyKey(type, LK, options) };\n }, {});\n}\n// prettier-ignore\nfunction FromMappedKey(type, mappedKey, options) {\n return FromPropertyKeys(type, mappedKey.keys, options);\n}\n// prettier-ignore\nexport function OmitFromMappedKey(type, mappedKey, options) {\n const properties = FromMappedKey(type, mappedKey, options);\n return MappedResult(properties);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Pick } from './pick.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(properties, propertyKeys, options) {\n const result = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(properties))\n result[K2] = Pick(properties[K2], propertyKeys, Clone(options));\n return result;\n}\n// prettier-ignore\nfunction FromMappedResult(mappedResult, propertyKeys, options) {\n return FromProperties(mappedResult.properties, propertyKeys, options);\n}\n// prettier-ignore\nexport function PickFromMappedResult(mappedResult, propertyKeys, options) {\n const properties = FromMappedResult(mappedResult, propertyKeys, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Discard } from '../discard/discard.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Object as _Object_ } from '../object/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\nimport { TransformKind } from '../symbols/symbols.mjs';\n// ------------------------------------------------------------------\n// Guards\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsMappedResult, IsIntersect, IsUnion, IsObject, IsSchema, IsLiteralValue, IsRef } from '../guard/kind.mjs';\nimport { IsArray as IsArrayValue } from '../guard/value.mjs';\n// ------------------------------------------------------------------\n// Infrastructure\n// ------------------------------------------------------------------\nimport { PickFromMappedKey } from './pick-from-mapped-key.mjs';\nimport { PickFromMappedResult } from './pick-from-mapped-result.mjs';\nfunction FromIntersect(types, propertyKeys) {\n return types.map((type) => PickResolve(type, propertyKeys));\n}\n// prettier-ignore\nfunction FromUnion(types, propertyKeys) {\n return types.map((type) => PickResolve(type, propertyKeys));\n}\n// prettier-ignore\nfunction FromProperties(properties, propertyKeys) {\n const result = {};\n for (const K2 of propertyKeys)\n if (K2 in properties)\n result[K2] = properties[K2];\n return result;\n}\n// prettier-ignore\nfunction FromObject(Type, keys, properties) {\n const options = Discard(Type, [TransformKind, '$id', 'required', 'properties']);\n const mappedProperties = FromProperties(properties, keys);\n return _Object_(mappedProperties, options);\n}\n// prettier-ignore\nfunction UnionFromPropertyKeys(propertyKeys) {\n const result = propertyKeys.reduce((result, key) => IsLiteralValue(key) ? [...result, Literal(key)] : result, []);\n return Union(result);\n}\n// prettier-ignore\nfunction PickResolve(type, propertyKeys) {\n return (IsIntersect(type) ? Intersect(FromIntersect(type.allOf, propertyKeys)) :\n IsUnion(type) ? Union(FromUnion(type.anyOf, propertyKeys)) :\n IsObject(type) ? FromObject(type, propertyKeys, type.properties) :\n _Object_({}));\n}\n/** `[Json]` Constructs a type whose keys are picked from the given type */\n// prettier-ignore\nexport function Pick(type, key, options) {\n const typeKey = IsArrayValue(key) ? UnionFromPropertyKeys(key) : key;\n const propertyKeys = IsSchema(key) ? IndexPropertyKeys(key) : key;\n const isTypeRef = IsRef(type);\n const isKeyRef = IsRef(key);\n return (IsMappedResult(type) ? PickFromMappedResult(type, propertyKeys, options) :\n IsMappedKey(key) ? PickFromMappedKey(type, key, options) :\n (isTypeRef && isKeyRef) ? Computed('Pick', [type, typeKey], options) :\n (!isTypeRef && isKeyRef) ? Computed('Pick', [type, typeKey], options) :\n (isTypeRef && !isKeyRef) ? Computed('Pick', [type, typeKey], options) :\n CreateType({ ...PickResolve(type, propertyKeys), ...options }));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Pick } from './pick.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromPropertyKey(type, key, options) {\n return {\n [key]: Pick(type, [key], Clone(options))\n };\n}\n// prettier-ignore\nfunction FromPropertyKeys(type, propertyKeys, options) {\n return propertyKeys.reduce((result, leftKey) => {\n return { ...result, ...FromPropertyKey(type, leftKey, options) };\n }, {});\n}\n// prettier-ignore\nfunction FromMappedKey(type, mappedKey, options) {\n return FromPropertyKeys(type, mappedKey.keys, options);\n}\n// prettier-ignore\nexport function PickFromMappedKey(type, mappedKey, options) {\n const properties = FromMappedKey(type, mappedKey, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { Object as _Object_ } from '../object/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Ref } from '../ref/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { TransformKind } from '../symbols/index.mjs';\nimport { PartialFromMappedResult } from './partial-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// KindGuard\n// ------------------------------------------------------------------\nimport * as KindGuard from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromComputed(target, parameters) {\n return Computed('Partial', [Computed(target, parameters)]);\n}\n// prettier-ignore\nfunction FromRef($ref) {\n return Computed('Partial', [Ref($ref)]);\n}\n// prettier-ignore\nfunction FromProperties(properties) {\n const partialProperties = {};\n for (const K of globalThis.Object.getOwnPropertyNames(properties))\n partialProperties[K] = Optional(properties[K]);\n return partialProperties;\n}\n// prettier-ignore\nfunction FromObject(type, properties) {\n const options = Discard(type, [TransformKind, '$id', 'required', 'properties']);\n const mappedProperties = FromProperties(properties);\n return _Object_(mappedProperties, options);\n}\n// prettier-ignore\nfunction FromRest(types) {\n return types.map(type => PartialResolve(type));\n}\n// ------------------------------------------------------------------\n// PartialResolve\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction PartialResolve(type) {\n return (\n // Mappable\n KindGuard.IsComputed(type) ? FromComputed(type.target, type.parameters) :\n KindGuard.IsRef(type) ? FromRef(type.$ref) :\n KindGuard.IsIntersect(type) ? Intersect(FromRest(type.allOf)) :\n KindGuard.IsUnion(type) ? Union(FromRest(type.anyOf)) :\n KindGuard.IsObject(type) ? FromObject(type, type.properties) :\n // Intrinsic\n KindGuard.IsBigInt(type) ? type :\n KindGuard.IsBoolean(type) ? type :\n KindGuard.IsInteger(type) ? type :\n KindGuard.IsLiteral(type) ? type :\n KindGuard.IsNull(type) ? type :\n KindGuard.IsNumber(type) ? type :\n KindGuard.IsString(type) ? type :\n KindGuard.IsSymbol(type) ? type :\n KindGuard.IsUndefined(type) ? type :\n // Passthrough\n _Object_({}));\n}\n/** `[Json]` Constructs a type where all properties are optional */\nexport function Partial(type, options) {\n if (KindGuard.IsMappedResult(type)) {\n return PartialFromMappedResult(type, options);\n }\n else {\n // special: mapping types require overridable options\n return CreateType({ ...PartialResolve(type), ...options });\n }\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Partial } from './partial.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(K, options) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(K))\n Acc[K2] = Partial(K[K2], Clone(options));\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, options) {\n return FromProperties(R.properties, options);\n}\n// prettier-ignore\nexport function PartialFromMappedResult(R, options) {\n const P = FromMappedResult(R, options);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Object as _Object_ } from '../object/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Ref } from '../ref/index.mjs';\nimport { OptionalKind, TransformKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { RequiredFromMappedResult } from './required-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport * as KindGuard from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromComputed(target, parameters) {\n return Computed('Required', [Computed(target, parameters)]);\n}\n// prettier-ignore\nfunction FromRef($ref) {\n return Computed('Required', [Ref($ref)]);\n}\n// prettier-ignore\nfunction FromProperties(properties) {\n const requiredProperties = {};\n for (const K of globalThis.Object.getOwnPropertyNames(properties))\n requiredProperties[K] = Discard(properties[K], [OptionalKind]);\n return requiredProperties;\n}\n// prettier-ignore\nfunction FromObject(type, properties) {\n const options = Discard(type, [TransformKind, '$id', 'required', 'properties']);\n const mappedProperties = FromProperties(properties);\n return _Object_(mappedProperties, options);\n}\n// prettier-ignore\nfunction FromRest(types) {\n return types.map(type => RequiredResolve(type));\n}\n// ------------------------------------------------------------------\n// RequiredResolve\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RequiredResolve(type) {\n return (\n // Mappable\n KindGuard.IsComputed(type) ? FromComputed(type.target, type.parameters) :\n KindGuard.IsRef(type) ? FromRef(type.$ref) :\n KindGuard.IsIntersect(type) ? Intersect(FromRest(type.allOf)) :\n KindGuard.IsUnion(type) ? Union(FromRest(type.anyOf)) :\n KindGuard.IsObject(type) ? FromObject(type, type.properties) :\n // Intrinsic\n KindGuard.IsBigInt(type) ? type :\n KindGuard.IsBoolean(type) ? type :\n KindGuard.IsInteger(type) ? type :\n KindGuard.IsLiteral(type) ? type :\n KindGuard.IsNull(type) ? type :\n KindGuard.IsNumber(type) ? type :\n KindGuard.IsString(type) ? type :\n KindGuard.IsSymbol(type) ? type :\n KindGuard.IsUndefined(type) ? type :\n // Passthrough\n _Object_({}));\n}\n/** `[Json]` Constructs a type where all properties are required */\nexport function Required(type, options) {\n if (KindGuard.IsMappedResult(type)) {\n return RequiredFromMappedResult(type, options);\n }\n else {\n // special: mapping types require overridable options\n return CreateType({ ...RequiredResolve(type), ...options });\n }\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Required } from './required.mjs';\n// prettier-ignore\nfunction FromProperties(P, options) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Required(P[K2], options);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, options) {\n return FromProperties(R.properties, options);\n}\n// prettier-ignore\nexport function RequiredFromMappedResult(R, options) {\n const P = FromMappedResult(R, options);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/index.mjs';\nimport { CloneType } from '../clone/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { Array } from '../array/index.mjs';\nimport { Awaited } from '../awaited/index.mjs';\nimport { AsyncIterator } from '../async-iterator/index.mjs';\nimport { Constructor } from '../constructor/index.mjs';\nimport { Index } from '../indexed/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Iterator } from '../iterator/index.mjs';\nimport { KeyOf } from '../keyof/index.mjs';\nimport { Object as _Object_ } from '../object/index.mjs';\nimport { Omit } from '../omit/index.mjs';\nimport { Pick } from '../pick/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Partial } from '../partial/index.mjs';\nimport { RecordValue, RecordPattern } from '../record/index.mjs';\nimport { Required } from '../required/index.mjs';\nimport { Tuple } from '../tuple/index.mjs';\nimport { Union } from '../union/index.mjs';\n// ------------------------------------------------------------------\n// Symbols\n// ------------------------------------------------------------------\nimport { TransformKind, OptionalKind, ReadonlyKind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// KindGuard\n// ------------------------------------------------------------------\nimport * as KindGuard from '../guard/kind.mjs';\n// prettier-ignore\nfunction DereferenceParameters(moduleProperties, types) {\n return types.map((type) => {\n return KindGuard.IsRef(type)\n ? Dereference(moduleProperties, type.$ref)\n : FromType(moduleProperties, type);\n });\n}\n// prettier-ignore\nfunction Dereference(moduleProperties, ref) {\n return (ref in moduleProperties\n ? KindGuard.IsRef(moduleProperties[ref])\n ? Dereference(moduleProperties, moduleProperties[ref].$ref)\n : FromType(moduleProperties, moduleProperties[ref])\n : Never());\n}\n// prettier-ignore\nfunction FromAwaited(parameters) {\n return Awaited(parameters[0]);\n}\n// prettier-ignore\nfunction FromIndex(parameters) {\n return Index(parameters[0], parameters[1]);\n}\n// prettier-ignore\nfunction FromKeyOf(parameters) {\n return KeyOf(parameters[0]);\n}\n// prettier-ignore\nfunction FromPartial(parameters) {\n return Partial(parameters[0]);\n}\n// prettier-ignore\nfunction FromOmit(parameters) {\n return Omit(parameters[0], parameters[1]);\n}\n// prettier-ignore\nfunction FromPick(parameters) {\n return Pick(parameters[0], parameters[1]);\n}\n// prettier-ignore\nfunction FromRequired(parameters) {\n return Required(parameters[0]);\n}\n// prettier-ignore\nfunction FromComputed(moduleProperties, target, parameters) {\n const dereferenced = DereferenceParameters(moduleProperties, parameters);\n return (target === 'Awaited' ? FromAwaited(dereferenced) :\n target === 'Index' ? FromIndex(dereferenced) :\n target === 'KeyOf' ? FromKeyOf(dereferenced) :\n target === 'Partial' ? FromPartial(dereferenced) :\n target === 'Omit' ? FromOmit(dereferenced) :\n target === 'Pick' ? FromPick(dereferenced) :\n target === 'Required' ? FromRequired(dereferenced) :\n Never());\n}\nfunction FromArray(moduleProperties, type) {\n return Array(FromType(moduleProperties, type));\n}\nfunction FromAsyncIterator(moduleProperties, type) {\n return AsyncIterator(FromType(moduleProperties, type));\n}\n// prettier-ignore\nfunction FromConstructor(moduleProperties, parameters, instanceType) {\n return Constructor(FromTypes(moduleProperties, parameters), FromType(moduleProperties, instanceType));\n}\n// prettier-ignore\nfunction FromFunction(moduleProperties, parameters, returnType) {\n return FunctionType(FromTypes(moduleProperties, parameters), FromType(moduleProperties, returnType));\n}\nfunction FromIntersect(moduleProperties, types) {\n return Intersect(FromTypes(moduleProperties, types));\n}\nfunction FromIterator(moduleProperties, type) {\n return Iterator(FromType(moduleProperties, type));\n}\nfunction FromObject(moduleProperties, properties) {\n return _Object_(globalThis.Object.keys(properties).reduce((result, key) => {\n return { ...result, [key]: FromType(moduleProperties, properties[key]) };\n }, {}));\n}\n// prettier-ignore\nfunction FromRecord(moduleProperties, type) {\n const [value, pattern] = [FromType(moduleProperties, RecordValue(type)), RecordPattern(type)];\n const result = CloneType(type);\n result.patternProperties[pattern] = value;\n return result;\n}\n// prettier-ignore\nfunction FromTransform(moduleProperties, transform) {\n return (KindGuard.IsRef(transform))\n ? { ...Dereference(moduleProperties, transform.$ref), [TransformKind]: transform[TransformKind] }\n : transform;\n}\nfunction FromTuple(moduleProperties, types) {\n return Tuple(FromTypes(moduleProperties, types));\n}\nfunction FromUnion(moduleProperties, types) {\n return Union(FromTypes(moduleProperties, types));\n}\nfunction FromTypes(moduleProperties, types) {\n return types.map((type) => FromType(moduleProperties, type));\n}\n// prettier-ignore\nexport function FromType(moduleProperties, type) {\n return (\n // Modifiers\n KindGuard.IsOptional(type) ? CreateType(FromType(moduleProperties, Discard(type, [OptionalKind])), type) :\n KindGuard.IsReadonly(type) ? CreateType(FromType(moduleProperties, Discard(type, [ReadonlyKind])), type) :\n // Transform\n KindGuard.IsTransform(type) ? CreateType(FromTransform(moduleProperties, type), type) :\n // Types\n KindGuard.IsArray(type) ? CreateType(FromArray(moduleProperties, type.items), type) :\n KindGuard.IsAsyncIterator(type) ? CreateType(FromAsyncIterator(moduleProperties, type.items), type) :\n KindGuard.IsComputed(type) ? CreateType(FromComputed(moduleProperties, type.target, type.parameters)) :\n KindGuard.IsConstructor(type) ? CreateType(FromConstructor(moduleProperties, type.parameters, type.returns), type) :\n KindGuard.IsFunction(type) ? CreateType(FromFunction(moduleProperties, type.parameters, type.returns), type) :\n KindGuard.IsIntersect(type) ? CreateType(FromIntersect(moduleProperties, type.allOf), type) :\n KindGuard.IsIterator(type) ? CreateType(FromIterator(moduleProperties, type.items), type) :\n KindGuard.IsObject(type) ? CreateType(FromObject(moduleProperties, type.properties), type) :\n KindGuard.IsRecord(type) ? CreateType(FromRecord(moduleProperties, type)) :\n KindGuard.IsTuple(type) ? CreateType(FromTuple(moduleProperties, type.items || []), type) :\n KindGuard.IsUnion(type) ? CreateType(FromUnion(moduleProperties, type.anyOf), type) :\n type);\n}\n// prettier-ignore\nexport function ComputeType(moduleProperties, key) {\n return (key in moduleProperties\n ? FromType(moduleProperties, moduleProperties[key])\n : Never());\n}\n// prettier-ignore\nexport function ComputeModuleProperties(moduleProperties) {\n return globalThis.Object.getOwnPropertyNames(moduleProperties).reduce((result, key) => {\n return { ...result, [key]: ComputeType(moduleProperties, key) };\n }, {});\n}\n","import { CreateType } from '../create/index.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// Module Infrastructure Types\n// ------------------------------------------------------------------\nimport { ComputeModuleProperties } from './compute.mjs';\n// ------------------------------------------------------------------\n// Module\n// ------------------------------------------------------------------\n// prettier-ignore\nexport class TModule {\n constructor($defs) {\n const computed = ComputeModuleProperties($defs);\n const identified = this.WithIdentifiers(computed);\n this.$defs = identified;\n }\n /** `[Json]` Imports a Type by Key. */\n Import(key, options) {\n const $defs = { ...this.$defs, [key]: CreateType(this.$defs[key], options) };\n return CreateType({ [Kind]: 'Import', $defs, $ref: key });\n }\n // prettier-ignore\n WithIdentifiers($defs) {\n return globalThis.Object.getOwnPropertyNames($defs).reduce((result, key) => {\n return { ...result, [key]: { ...$defs[key], $id: key } };\n }, {});\n }\n}\n/** `[Json]` Creates a Type Definition Module. */\nexport function Module(properties) {\n return new TModule(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Not type */\nexport function Not(type, options) {\n return CreateType({ [Kind]: 'Not', not: type }, options);\n}\n","import { Tuple } from '../tuple/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n/** `[JavaScript]` Extracts the Parameters from the given Function type */\nexport function Parameters(schema, options) {\n return (KindGuard.IsFunction(schema) ? Tuple(schema.parameters, options) : Never());\n}\n","import { CloneType } from '../clone/type.mjs';\nimport { CreateType } from '../create/type.mjs';\nimport { IsUndefined } from '../guard/value.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\n// Auto Tracked For Recursive Types without ID's\nlet Ordinal = 0;\n/** `[Json]` Creates a Recursive type */\nexport function Recursive(callback, options = {}) {\n if (IsUndefined(options.$id))\n options.$id = `T${Ordinal++}`;\n const thisType = CloneType(callback({ [Kind]: 'This', $ref: `${options.$id}` }));\n thisType.$id = options.$id;\n // prettier-ignore\n return CreateType({ [Hint]: 'Recursive', ...thisType }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { IsString } from '../guard/value.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a RegExp type */\nexport function RegExp(unresolved, options) {\n const expr = IsString(unresolved) ? new globalThis.RegExp(unresolved) : unresolved;\n return CreateType({ [Kind]: 'RegExp', type: 'RegExp', source: expr.source, flags: expr.flags }, options);\n}\n","// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsIntersect, IsUnion, IsTuple } from '../guard/kind.mjs';\n// prettier-ignore\nfunction RestResolve(T) {\n return (IsIntersect(T) ? T.allOf :\n IsUnion(T) ? T.anyOf :\n IsTuple(T) ? T.items ?? [] :\n []);\n}\n/** `[Json]` Extracts interior Rest elements from Tuple, Intersect and Union types */\nexport function Rest(T) {\n return RestResolve(T);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Never } from '../never/index.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n/** `[JavaScript]` Extracts the ReturnType from the given Function type */\nexport function ReturnType(schema, options) {\n return (KindGuard.IsFunction(schema) ? CreateType(schema.returns, options) : Never(options));\n}\n","import { TransformKind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTransform } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// TransformBuilders\n// ------------------------------------------------------------------\nexport class TransformDecodeBuilder {\n constructor(schema) {\n this.schema = schema;\n }\n Decode(decode) {\n return new TransformEncodeBuilder(this.schema, decode);\n }\n}\n// prettier-ignore\nexport class TransformEncodeBuilder {\n constructor(schema, decode) {\n this.schema = schema;\n this.decode = decode;\n }\n EncodeTransform(encode, schema) {\n const Encode = (value) => schema[TransformKind].Encode(encode(value));\n const Decode = (value) => this.decode(schema[TransformKind].Decode(value));\n const Codec = { Encode: Encode, Decode: Decode };\n return { ...schema, [TransformKind]: Codec };\n }\n EncodeSchema(encode, schema) {\n const Codec = { Decode: this.decode, Encode: encode };\n return { ...schema, [TransformKind]: Codec };\n }\n Encode(encode) {\n return (IsTransform(this.schema) ? this.EncodeTransform(encode, this.schema) : this.EncodeSchema(encode, this.schema));\n }\n}\n/** `[Json]` Creates a Transform type */\nexport function Transform(schema) {\n return new TransformDecodeBuilder(schema);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Unsafe type that will infers as the generic argument T */\nexport function Unsafe(options = {}) {\n return CreateType({ [Kind]: options[Kind] ?? 'Unsafe' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Void type */\nexport function Void(options) {\n return CreateType({ [Kind]: 'Void', type: 'void' }, options);\n}\n","// ------------------------------------------------------------------\n// Type: Module\n// ------------------------------------------------------------------\nexport { Any } from '../any/index.mjs';\nexport { Argument } from '../argument/index.mjs';\nexport { Array } from '../array/index.mjs';\nexport { AsyncIterator } from '../async-iterator/index.mjs';\nexport { Awaited } from '../awaited/index.mjs';\nexport { BigInt } from '../bigint/index.mjs';\nexport { Boolean } from '../boolean/index.mjs';\nexport { Composite } from '../composite/index.mjs';\nexport { Const } from '../const/index.mjs';\nexport { Constructor } from '../constructor/index.mjs';\nexport { ConstructorParameters } from '../constructor-parameters/index.mjs';\nexport { Date } from '../date/index.mjs';\nexport { Enum } from '../enum/index.mjs';\nexport { Exclude } from '../exclude/index.mjs';\nexport { Extends } from '../extends/index.mjs';\nexport { Extract } from '../extract/index.mjs';\nexport { Function } from '../function/index.mjs';\nexport { Index } from '../indexed/index.mjs';\nexport { InstanceType } from '../instance-type/index.mjs';\nexport { Instantiate } from '../instantiate/index.mjs';\nexport { Integer } from '../integer/index.mjs';\nexport { Intersect } from '../intersect/index.mjs';\nexport { Capitalize, Uncapitalize, Lowercase, Uppercase } from '../intrinsic/index.mjs';\nexport { Iterator } from '../iterator/index.mjs';\nexport { KeyOf } from '../keyof/index.mjs';\nexport { Literal } from '../literal/index.mjs';\nexport { Mapped } from '../mapped/index.mjs';\nexport { Module } from '../module/index.mjs';\nexport { Never } from '../never/index.mjs';\nexport { Not } from '../not/index.mjs';\nexport { Null } from '../null/index.mjs';\nexport { Number } from '../number/index.mjs';\nexport { Object } from '../object/index.mjs';\nexport { Omit } from '../omit/index.mjs';\nexport { Optional } from '../optional/index.mjs';\nexport { Parameters } from '../parameters/index.mjs';\nexport { Partial } from '../partial/index.mjs';\nexport { Pick } from '../pick/index.mjs';\nexport { Promise } from '../promise/index.mjs';\nexport { Readonly } from '../readonly/index.mjs';\nexport { ReadonlyOptional } from '../readonly-optional/index.mjs';\nexport { Record } from '../record/index.mjs';\nexport { Recursive } from '../recursive/index.mjs';\nexport { Ref } from '../ref/index.mjs';\nexport { RegExp } from '../regexp/index.mjs';\nexport { Required } from '../required/index.mjs';\nexport { Rest } from '../rest/index.mjs';\nexport { ReturnType } from '../return-type/index.mjs';\nexport { String } from '../string/index.mjs';\nexport { Symbol } from '../symbol/index.mjs';\nexport { TemplateLiteral } from '../template-literal/index.mjs';\nexport { Transform } from '../transform/index.mjs';\nexport { Tuple } from '../tuple/index.mjs';\nexport { Uint8Array } from '../uint8array/index.mjs';\nexport { Undefined } from '../undefined/index.mjs';\nexport { Union } from '../union/index.mjs';\nexport { Unknown } from '../unknown/index.mjs';\nexport { Unsafe } from '../unsafe/index.mjs';\nexport { Void } from '../void/index.mjs';\n","// ------------------------------------------------------------------\n// JsonTypeBuilder\n// ------------------------------------------------------------------\nexport { JsonTypeBuilder } from './json.mjs';\n// ------------------------------------------------------------------\n// JavaScriptTypeBuilder\n// ------------------------------------------------------------------\nimport * as TypeBuilder from './type.mjs';\nimport { JavaScriptTypeBuilder } from './javascript.mjs';\n/** JavaScript Type Builder with Static Resolution for TypeScript */\nconst Type = TypeBuilder;\nexport { JavaScriptTypeBuilder };\nexport { Type };\n","import type { RepositoryMode } from \"./index.ts\";\n\nexport const ASSISTANT_PROTOCOL = 1;\nexport const ASSISTANT_VERSION = \"0.3.2\";\nexport const ASSISTANT_PORT = 46322;\n\nexport type AssistantConnectionState =\n \"checking\" | \"disconnected\" | \"unpaired\" | \"unconfigured\" | \"connected\" | \"incompatible\";\n\nexport interface DeviceIdentity {\n id: string;\n name: string;\n platform: string;\n publicKey: string;\n version: string;\n}\n\nexport interface AssistantGrant {\n kind: \"session\" | \"operation\";\n workbenchId: string;\n userId: string;\n origin: string;\n browserId: string;\n deviceId: string;\n bindingId?: string;\n operationId?: string;\n inputHash?: string;\n exp: number;\n nonce: string;\n}\n\nexport interface WorkspaceDefinition {\n id: string;\n slug: string;\n description: string;\n revision: number;\n repositories: Array<{\n repositoryId: string;\n alias: string;\n remoteUrl: string;\n branch: string;\n branchAction?: \"existing\" | \"create\";\n fromRef: string;\n mode: RepositoryMode;\n subpath: string;\n }>;\n}\n\nexport interface LocalOperationIntent {\n id: string;\n deviceId: string;\n workbenchId: string;\n userId: string;\n definition: WorkspaceDefinition;\n token: string;\n}\n\nexport interface WorkspaceMount {\n workspaceId: string;\n workbenchId: string;\n userId: string;\n revision: number;\n managedRoot?: string;\n workspaceFile: string;\n directory: string;\n /** Repository aliases from the shared definition; used when no .code-workspace exists. */\n aliases?: string[];\n verifiedAt: string;\n}\n\nexport interface LocalJob {\n id: string;\n workbenchId: string;\n userId: string;\n state: \"queued\" | \"running\" | \"succeeded\" | \"failed\" | \"cancelled\" | \"interrupted\";\n input: { slug: string; workspaceId: string };\n intent: LocalOperationIntent;\n logs: string[];\n logOffset?: number;\n error?: string;\n result?: { workspaceId: string; deviceId: string };\n pendingSync: boolean;\n updatedAt: string;\n}\n\nexport interface AssistantError {\n code: string;\n error: string;\n recovery: \"connect\" | \"pair\" | \"configure\" | \"retry\" | \"update\" | \"login\";\n}\n","import { Type, type Static } from \"@sinclair/typebox\";\nexport * from \"./assistant.ts\";\n\nexport const IdeSchema = Type.Union([\n Type.Literal(\"vscode\"),\n Type.Literal(\"cursor\"),\n Type.Literal(\"cursor-agent\"),\n Type.Literal(\"idea\"),\n Type.Literal(\"codex\"),\n Type.Literal(\"claude\"),\n Type.Literal(\"opencode\"),\n Type.Literal(\"codex-cli\"),\n Type.Literal(\"cursor-cli\"),\n Type.Literal(\"opencode-cli\"),\n Type.Literal(\"claudecode-cli\"),\n]);\nexport const AgentSchema = Type.Union([\n Type.Literal(\"none\"),\n Type.Literal(\"claude\"),\n Type.Literal(\"codex\"),\n]);\nexport const RepositoryModeSchema = Type.Union([\n Type.Literal(\"worktree\"),\n Type.Literal(\"checkout\"),\n]);\nexport const AuditResultSchema = Type.Union([\n Type.Literal(\"PASS\"),\n Type.Literal(\"WARN\"),\n Type.Literal(\"FAIL\"),\n]);\nexport const EntityIdParamsSchema = Type.Object({\n id: Type.String({ minLength: 1, maxLength: 128 }),\n});\nexport const ErrorSchema = Type.Object({\n error: Type.String(),\n code: Type.Optional(Type.String()),\n details: Type.Optional(Type.Unknown()),\n});\n\nexport type Ide = Static<typeof IdeSchema>;\nexport type Agent = Static<typeof AgentSchema>;\nexport type RepositoryMode = Static<typeof RepositoryModeSchema>;\nexport type AuditResult = Static<typeof AuditResultSchema>;\n\nexport interface RepositoryRecord {\n id: string;\n alias: string;\n path: string;\n subpath: string;\n remoteUrl?: string;\n}\n\nexport interface WorkspaceRepository {\n alias: string;\n branch: string;\n fromBranch: string;\n fromMode: RepositoryMode;\n folderPath: string;\n pathExists: boolean;\n}\n\nexport interface WorkspaceRecord {\n id: string;\n slug: string;\n filePath: string;\n description: string;\n mtimeMs: number;\n requirementId?: string | null;\n repositories: WorkspaceRepository[];\n}\n\nexport interface AuditFinding {\n kind: string;\n severity: \"WARN\" | \"FAIL\";\n message: string;\n evidence: Record<string, unknown>;\n}\n","import { spawn } from \"node:child_process\";\nimport { gitExecution } from \"./context.ts\";\n\nexport class GitCommandError extends Error {\n readonly exitCode: number | null;\n stdout = \"\";\n\n constructor(message: string, exitCode: number | null) {\n super(message);\n this.name = \"GitCommandError\";\n this.exitCode = exitCode;\n }\n}\n\n/**\n * Git for Windows still caps paths at MAX_PATH unless told otherwise, and deep Java package\n * trees exceed it. `-c core.longpaths=true` makes git handle the `\\\\?\\` prefix itself, so it works\n * without the machine-wide LongPathsEnabled policy. Harmless elsewhere, but only added on Windows.\n */\nexport function longPathArgs(platform: NodeJS.Platform = process.platform): string[] {\n return platform === \"win32\" ? [\"-c\", \"core.longpaths=true\"] : [];\n}\n\n/** Execute Git directly: never interpolate arguments into a shell command. */\nexport function runGit(\n cwd: string,\n args: string[],\n options: { timeoutMs?: number; onLog?: (line: string) => void } = {},\n): Promise<string> {\n return new Promise((resolve, reject) => {\n const execution = gitExecution.getStore();\n execution?.signal?.throwIfAborted();\n const child = spawn(execution?.executable || \"git\", [...longPathArgs(), \"-C\", cwd, ...args], {\n signal: execution?.signal,\n shell: false,\n windowsHide: true,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: { ...process.env, GIT_TERMINAL_PROMPT: \"0\" },\n });\n let stdout = \"\",\n stderr = \"\",\n pending = \"\";\n let failure: Error | undefined;\n const stop = (message: string) => {\n if (failure) return;\n failure = new GitCommandError(message, null);\n child.kill(\"SIGKILL\");\n clearTimeout(timer);\n child.stdout.destroy();\n child.stderr.destroy();\n reject(failure);\n };\n const timer = setTimeout(() => stop(`Git 操作超时:${args[0]}`), options.timeoutMs ?? 120_000);\n child.stdout.setEncoding(\"utf8\");\n child.stderr.setEncoding(\"utf8\");\n child.stdout.on(\"data\", (chunk: string) => {\n if (failure) return;\n stdout += chunk;\n if (stdout.length > 1024 * 1024) stop(\"Git 输出超过限制\");\n });\n child.stderr.on(\"data\", (chunk: string) => {\n if (failure) return;\n stderr += chunk;\n pending += chunk;\n const lines = pending.split(/[\\r\\n]+/);\n pending = lines.pop() ?? \"\";\n for (const line of lines) if (line) options.onLog?.(line);\n if (stderr.length > 1024 * 1024) stop(\"Git 输出超过限制\");\n });\n child.once(\"error\", (error) => {\n clearTimeout(timer);\n reject(error);\n });\n child.once(\"close\", (code) => {\n clearTimeout(timer);\n if (pending) options.onLog?.(pending);\n if (failure) return reject(failure);\n if (code !== 0)\n return reject(\n Object.assign(\n new GitCommandError(stderr.trim() || `Git ${args[0]} 失败(退出码 ${code})`, code),\n { stdout: stdout.trimEnd() },\n ),\n );\n resolve(stdout.trimEnd());\n });\n });\n}\n\n/** A missing ref is expected; launch errors and timeouts are not. */\nexport async function tryGit(cwd: string, args: string[]): Promise<string | undefined> {\n try {\n return await runGit(cwd, args);\n } catch (error) {\n if (error instanceof GitCommandError && error.exitCode !== null) return undefined;\n throw error;\n }\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\n\nexport const gitExecution = new AsyncLocalStorage<{ executable: string; signal?: AbortSignal }>();\n","import { execFile } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\n\nconst execute = promisify(execFile);\nconst xml = (value: string) =>\n value\n .replaceAll(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\");\n\n/** Start the registered user service without spawning a competing daemon. */\nexport async function startAutostart() {\n if (process.platform === \"darwin\")\n await execute(\"launchctl\", [\"kickstart\", `gui/${process.getuid!()}/com.cwm.assistant`]);\n else if (process.platform === \"win32\")\n await execute(\"schtasks.exe\", [\"/Run\", \"/TN\", \"CWM Assistant\"]);\n else throw new Error(\"自启动仅支持 Windows 和 macOS\");\n}\n\n/** Disable future launches without terminating the process handling the request. */\nexport async function disableAutostart() {\n if (process.platform === \"darwin\") {\n const domain = `gui/${process.getuid!()}/com.cwm.assistant`;\n await execute(\"launchctl\", [\"disable\", domain]);\n fs.rmSync(path.join(os.homedir(), \"Library\", \"LaunchAgents\", \"com.cwm.assistant.plist\"), {\n force: true,\n });\n } else if (process.platform === \"win32\") {\n await execute(\"schtasks.exe\", [\"/Delete\", \"/TN\", \"CWM Assistant\", \"/F\"]);\n } else throw new Error(\"自启动仅支持 Windows 和 macOS\");\n}\nexport async function configureAutostart(enable: boolean, directory: string, entry: string) {\n if (process.platform === \"darwin\") {\n const file = path.join(os.homedir(), \"Library\", \"LaunchAgents\", \"com.cwm.assistant.plist\");\n const domain = `gui/${process.getuid!()}`;\n try {\n await execute(\"launchctl\", [\"bootout\", domain + \"/com.cwm.assistant\"]);\n } catch {}\n if (!enable) {\n fs.rmSync(file, { force: true });\n return;\n }\n fs.mkdirSync(path.dirname(file), { recursive: true });\n fs.writeFileSync(\n file,\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<plist version=\"1.0\"><dict>\n<key>Label</key><string>com.cwm.assistant</string>\n<key>ProgramArguments</key><array><string>${xml(process.execPath)}</string><string>${xml(entry)}</string><string>serve</string></array>\n<key>EnvironmentVariables</key><dict><key>CWM_ASSISTANT_HOME</key><string>${xml(directory)}</string></dict>\n<key>RunAtLoad</key><true/><key>KeepAlive</key><true/>\n<key>StandardOutPath</key><string>${xml(path.join(directory, \"assistant.log\"))}</string>\n<key>StandardErrorPath</key><string>${xml(path.join(directory, \"assistant.log\"))}</string>\n</dict></plist>`,\n { mode: 0o600 },\n );\n await execute(\"launchctl\", [\"enable\", domain + \"/com.cwm.assistant\"]);\n await execute(\"launchctl\", [\"bootstrap\", domain, file]);\n } else if (process.platform === \"win32\") {\n const task = \"CWM Assistant\";\n if (!enable) {\n await execute(\"schtasks.exe\", [\"/Delete\", \"/TN\", task, \"/F\"]);\n return;\n }\n const user = os.userInfo().username;\n const file = path.join(directory, \"autostart.xml\");\n fs.writeFileSync(\n file,\n `\\uFEFF<?xml version=\"1.0\" encoding=\"UTF-16\"?>\n<Task version=\"1.2\" xmlns=\"http://schemas.microsoft.com/windows/2004/02/mit/task\"><Triggers><LogonTrigger><Enabled>true</Enabled><UserId>${xml(user)}</UserId></LogonTrigger></Triggers><Principals><Principal id=\"Author\"><UserId>${xml(user)}</UserId><LogonType>InteractiveToken</LogonType><RunLevel>LeastPrivilege</RunLevel></Principal></Principals><Settings><MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy><DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries><StopIfGoingOnBatteries>false</StopIfGoingOnBatteries><ExecutionTimeLimit>PT0S</ExecutionTimeLimit><RestartOnFailure><Interval>PT1M</Interval><Count>3</Count></RestartOnFailure></Settings><Actions Context=\"Author\"><Exec><Command>${xml(process.execPath)}</Command><Arguments>"${xml(entry)}" serve --state-dir "${xml(directory)}"</Arguments></Exec></Actions></Task>`,\n { encoding: \"utf16le\" },\n );\n await execute(\"schtasks.exe\", [\"/Create\", \"/TN\", task, \"/XML\", file, \"/F\"]);\n await execute(\"schtasks.exe\", [\"/Run\", \"/TN\", task]);\n } else throw new Error(\"自启动仅支持 Windows 和 macOS\");\n}\n","import type {\n AssistantGrant,\n DeviceIdentity,\n LocalOperationIntent,\n} from \"@code-workspace/contracts\";\nimport { ASSISTANT_PORT, ASSISTANT_PROTOCOL, ASSISTANT_VERSION } from \"@code-workspace/contracts\";\nimport Fastify from \"fastify\";\nimport { randomBytes, randomUUID, timingSafeEqual } from \"node:crypto\";\nimport { signMessage, verifyGrant } from \"../../../packages/runtime/src/assistant/tokens.ts\";\nimport { registerDeleteRoute } from \"./delete-route.ts\";\nimport { registerAdoptRoutes } from \"./adopt-routes.ts\";\nimport { LocalJobs } from \"./jobs.ts\";\nimport { fetchWorkbenchIdentity, trustedOrigin } from \"./origins.ts\";\nimport { registerQueryRoutes } from \"./query-routes.ts\";\nimport { registerReviewRoute } from \"./review-route.ts\";\nimport { registerLocalRoutes } from \"./routes.ts\";\nimport { registerUpgradeRoutes } from \"./upgrade.ts\";\nimport { StateStore, digest } from \"./state.ts\";\n\nimport { syncMountReceipts } from \"./mount-receipts.ts\";\n\ninterface PairingResult {\n device: DeviceIdentity;\n bindingId: string;\n secret: string;\n receipt: string;\n}\n\nexport async function buildAssistant(\n store: StateStore,\n options: Parameters<typeof registerLocalRoutes>[2] = {},\n entry?: string,\n upgrade: Parameters<typeof registerUpgradeRoutes>[3] = {},\n) {\n const app = Fastify({ logger: false, bodyLimit: 1024 * 1024 });\n const jobs = new LocalJobs(store);\n app.setErrorHandler((error, _request, reply) =>\n reply\n .code((error as { statusCode?: number }).statusCode || 400)\n .send({ code: \"ASSISTANT_ERROR\", error: (error as Error).message }),\n );\n app.addHook(\"onRequest\", async (request, reply) => {\n const host = request.headers.host;\n if (host !== `127.0.0.1:${ASSISTANT_PORT}`) return reply.code(403).send({ error: \"Host 无效\" });\n if (request.url === \"/control\") {\n if (\n request.headers.origin ||\n request.headers.authorization !== \"Bearer \" + store.state.controlKey\n )\n return reply.code(403).send({ error: \"控制凭据无效\" });\n return;\n }\n const origin = request.headers.origin || \"\";\n const path = request.url.split(\"?\")[0];\n // Any web workbench may connect. What makes that safe is not the address but the identity\n // fetch below: grants are only verifiable against a center's own key, so a page that is not a\n // CWM center cannot complete a request no matter which origin it claims.\n let workbench: { id: string; publicKey: string } | undefined = store.state.workbenches[origin];\n if (!workbench && trustedOrigin(origin)) {\n try {\n workbench = await fetchWorkbenchIdentity(origin);\n store.state.workbenches[origin] = workbench;\n store.save();\n } catch {\n workbench = undefined;\n }\n }\n if (!workbench)\n return reply.code(403).send({ error: \"无法识别此工作台\", code: \"ORIGIN_NOT_PAIRED\" });\n reply.header(\"Access-Control-Allow-Origin\", origin);\n reply.header(\"Vary\", \"Origin\");\n reply.header(\"Cache-Control\", \"no-store\");\n if (request.method === \"OPTIONS\") {\n reply.header(\"Access-Control-Allow-Methods\", \"GET, POST, PATCH, DELETE, OPTIONS\");\n if (request.headers[\"access-control-request-private-network\"] === \"true\")\n reply.header(\"Access-Control-Allow-Private-Network\", \"true\");\n reply.header(\"Access-Control-Allow-Headers\", \"Authorization, Content-Type, X-CWM-Binding\");\n return reply.code(204).send();\n }\n if (path === \"/v1/health\" || path === \"/v1/pairings\") return;\n try {\n const token = request.headers.authorization?.replace(/^Bearer /, \"\") || \"\";\n const grant = verifyGrant(token, workbench.publicKey);\n const binding = store.state.bindings.find((item) => item.id === grant.bindingId);\n const proof = String(request.headers[\"x-cwm-binding\"] || \"\");\n if (\n !binding ||\n grant.kind !== \"session\" ||\n binding.workbenchId !== workbench.id ||\n binding.origin !== origin ||\n grant.origin !== origin ||\n grant.deviceId !== store.state.identity.id ||\n grant.workbenchId !== workbench.id ||\n grant.userId !== binding.userId ||\n grant.browserId !== binding.browserId ||\n digest(proof) !== binding.secretHash\n )\n throw new Error(\"绑定无效\");\n let response;\n try {\n response = await fetch(origin + \"/api/assistant/validate\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ token }),\n signal: AbortSignal.timeout(5000),\n });\n } catch {\n return reply.code(503).send({\n code: \"CENTER_UNAVAILABLE\",\n error: \"中心服务暂不可用,绑定已保留,请恢复网络后重试\",\n });\n }\n if (!response.ok) throw new Error(\"账号授权或绑定已失效\");\n (request as unknown as { assistantGrant: AssistantGrant }).assistantGrant = grant;\n } catch (error) {\n return reply.code(401).send({ error: (error as Error).message, code: \"PAIRING_REQUIRED\" });\n }\n });\n app.get(\"/v1/health\", async () => ({\n protocol: ASSISTANT_PROTOCOL,\n version: ASSISTANT_VERSION,\n deviceId: store.state.identity.id,\n }));\n /**\n * Approving a pending request is a local decision, so it produces the binding directly.\n * The legacy pairing-code path below stays for scripted installs.\n */\n function approve(\n origin: string,\n grant: Pick<AssistantGrant, \"userId\" | \"browserId\" | \"workbenchId\">,\n ): PairingResult {\n const secret = randomBytes(32).toString(\"base64url\"),\n id = randomUUID();\n store.state.bindings.push({\n id,\n origin,\n userId: grant.userId,\n browserId: grant.browserId,\n workbenchId: grant.workbenchId,\n secretHash: digest(secret),\n });\n store.save();\n const { privateKey, ...device } = store.state.identity;\n return {\n device,\n bindingId: id,\n secret,\n receipt: signMessage(\n {\n userId: grant.userId,\n browserId: grant.browserId,\n workbenchId: grant.workbenchId,\n deviceId: device.id,\n bindingId: id,\n exp: Date.now() + 60_000,\n },\n privateKey,\n ),\n };\n }\n app.post(\"/v1/pairings\", async (request, reply) => {\n const origin = request.headers.origin || \"\";\n const body = request.body as { token: string; code?: string };\n // onRequest admits /v1/pairings before checking a binding, so read the workbench defensively.\n const workbench = store.state.workbenches[origin];\n if (!workbench) return reply.code(403).send({ error: \"请先通过 setup 授权此工作台\" });\n const grant = verifyGrant(body.token, workbench.publicKey);\n if (\n grant.origin !== origin ||\n grant.deviceId !== store.state.identity.id ||\n grant.workbenchId !== workbench.id ||\n grant.kind !== \"session\"\n )\n return reply.code(403).send({ error: \"授权不匹配\" });\n // A code is only needed when the request comes from the terminal. The browser reaches the\n // assistant on loopback, and its origin is in the setup-time allow-list above, so that\n // origin was already authorised by someone at this machine.\n if (body.code) {\n const pairing = store.state.pairing;\n if (!pairing || pairing.expiresAt <= Date.now() || pairing.failures >= 5)\n return reply.code(403).send({ error: \"配对码已失效,请运行 cwm-assistant pair\" });\n if (\n !timingSafeEqual(\n Buffer.from(pairing.hash),\n Buffer.from(digest(String(body.code).trim().toUpperCase())),\n )\n ) {\n pairing.failures++;\n store.save();\n return reply.code(403).send({ error: \"配对码错误\" });\n }\n delete store.state.pairing;\n }\n return approve(origin, grant);\n });\n app.post(\"/v1/jobs\", async (request) => {\n const intent = request.body as LocalOperationIntent;\n const session = (request as unknown as { assistantGrant: AssistantGrant }).assistantGrant;\n const grant = verifyGrant(intent.token, store.state.workbenches[session.origin].publicKey);\n if (\n grant.kind !== \"operation\" ||\n grant.operationId !== intent.id ||\n grant.deviceId !== session.deviceId ||\n intent.deviceId !== session.deviceId ||\n grant.userId !== session.userId ||\n intent.userId !== session.userId ||\n grant.workbenchId !== session.workbenchId ||\n intent.workbenchId !== session.workbenchId ||\n grant.browserId !== session.browserId ||\n grant.origin !== session.origin ||\n grant.bindingId !== session.bindingId ||\n grant.inputHash !== digest(JSON.stringify(intent.definition))\n )\n throw new Error(\"任务授权不匹配\");\n const job = jobs.submit(intent);\n return { jobId: \"local:\" + job.id };\n });\n app.get(\"/v1/jobs/:id\", async (request, reply) => {\n const grant = (request as unknown as { assistantGrant: AssistantGrant }).assistantGrant;\n const id = (request.params as { id: string }).id;\n const job = store.state.jobs[id] || store.state.activities[id];\n if (!job || job.userId !== grant.userId || job.workbenchId !== grant.workbenchId)\n return reply.code(404).send({ error: \"任务不存在\" });\n const { intent: _intent, ...summary } = {\n ...job,\n intent: \"intent\" in job ? job.intent : undefined,\n };\n return {\n ...summary,\n pendingSync:\n (\"pendingSync\" in job && job.pendingSync) ||\n Object.values(store.state.mountReceipts).some(\n (receipt) =>\n receipt.workbenchId === job.workbenchId &&\n receipt.userId === job.userId &&\n receipt.workspaceId === job.input.workspaceId,\n ),\n };\n });\n app.get(\"/v1/jobs\", async (request) => {\n const grant = (request as unknown as { assistantGrant: AssistantGrant }).assistantGrant;\n return [...Object.values(store.state.jobs), ...Object.values(store.state.activities)]\n .filter((job) => job.userId === grant.userId && job.workbenchId === grant.workbenchId)\n .map((job) => ({\n id: \"local:\" + job.id,\n input: job.input,\n state: job.state,\n error: job.error,\n // The list is used to pick the newest job per workspace, so ordering needs a timestamp.\n updatedAt: \"updatedAt\" in job ? job.updatedAt : undefined,\n deviceId: store.state.identity.id,\n }));\n });\n app.get(\"/v1/jobs/:id/events\", async (request, reply) => {\n const grant = (request as unknown as { assistantGrant: AssistantGrant }).assistantGrant;\n const id = (request.params as { id: string }).id;\n const job = store.state.jobs[id] || store.state.activities[id];\n if (!job || job.userId !== grant.userId || job.workbenchId !== grant.workbenchId)\n return reply.code(404).send({ error: \"任务不存在\" });\n const cursor = Math.max(0, Number((request.query as { after?: string }).after) || 0);\n const base = \"logOffset\" in job ? job.logOffset || 0 : 0;\n const start = Math.max(base, cursor);\n return {\n state: job.state,\n truncated: cursor < base,\n events: job.logs.slice(start - base).map((line, index) => ({ id: start + index + 1, line })),\n cursor: base + job.logs.length,\n };\n });\n app.post(\"/v1/jobs/:id/cancel\", async (request) => {\n const grant = (request as unknown as { assistantGrant: AssistantGrant }).assistantGrant;\n const id = (request.params as { id: string }).id;\n const job = store.state.jobs[id] || store.state.activities[id];\n if (!job || job.userId !== grant.userId || job.workbenchId !== grant.workbenchId)\n throw new Error(\"任务不存在\");\n jobs.cancel(id);\n return { ok: true };\n });\n registerLocalRoutes(app, store, options);\n if (entry) registerUpgradeRoutes(app, store, entry, upgrade);\n registerQueryRoutes(app, store);\n registerAdoptRoutes(app, store, jobs);\n registerDeleteRoute(app, store, jobs);\n registerReviewRoute(app, store, jobs);\n const timer = setInterval(() => {\n void syncMountReceipts(store);\n for (const job of Object.values(store.state.jobs)) if (job.pendingSync) void jobs.sync(job);\n }, 15_000);\n timer.unref();\n app.addHook(\"onClose\", async () => {\n clearInterval(timer);\n await jobs.idle();\n });\n return { app, jobs };\n}\n","import type { AssistantGrant } from \"@code-workspace/contracts\";\nimport { generateKeyPairSync, randomUUID, sign, verify } from \"node:crypto\";\n\nexport function createIdentityKeys() {\n const keys = generateKeyPairSync(\"ed25519\");\n return {\n id: randomUUID(),\n publicKey: keys.publicKey.export({ type: \"spki\", format: \"pem\" }).toString(),\n privateKey: keys.privateKey.export({ type: \"pkcs8\", format: \"pem\" }).toString(),\n };\n}\n\nexport function signMessage(value: unknown, privateKey: string): string {\n const payload = Buffer.from(JSON.stringify(value)).toString(\"base64url\");\n return payload + \".\" + sign(null, Buffer.from(payload), privateKey).toString(\"base64url\");\n}\n\nexport function verifyMessage<T>(token: string, publicKey: string): T {\n const parts = token.split(\".\");\n if (\n parts.length !== 2 ||\n !verify(null, Buffer.from(parts[0]), publicKey, Buffer.from(parts[1], \"base64url\"))\n )\n throw new Error(\"签名无效\");\n return JSON.parse(Buffer.from(parts[0], \"base64url\").toString(\"utf8\")) as T;\n}\n\nexport function verifyGrant(token: string, publicKey: string): AssistantGrant {\n const grant = verifyMessage<AssistantGrant>(token, publicKey);\n if (!Number.isFinite(grant.exp) || grant.exp <= Date.now()) throw new Error(\"连接授权已过期\");\n if (!grant.userId || !grant.origin || !grant.browserId || !grant.deviceId)\n throw new Error(\"连接授权不完整\");\n return grant;\n}\n\nexport function workbenchOrigin(value: string): string {\n const url = new URL(value);\n if (url.username || url.password || url.pathname !== \"/\" || url.search || url.hash)\n throw new Error(\"工作台地址只需填写协议、主机和端口\");\n if (\n url.protocol !== \"https:\" &&\n !(url.protocol === \"http:\" && [\"localhost\", \"127.0.0.1\", \"[::1]\"].includes(url.hostname))\n )\n throw new Error(\"跨机器工作台必须使用可信 HTTPS 地址\");\n return url.origin;\n}\n","import type { FastifyInstance } from \"fastify\";\nimport path from \"node:path\";\nimport { gitExecution } from \"../../../packages/runtime/src/git/context.ts\";\nimport { removeLocalWorkspace } from \"../../../packages/runtime/src/workspaces/delete.ts\";\nimport { LocalJobs } from \"./jobs.ts\";\nimport { requestGrant } from \"./routes.ts\";\nimport { StateStore, scopeKey } from \"./state.ts\";\nimport { localWorkspace } from \"./workspace-files.ts\";\n\nimport { queueMountReceipt, syncMountReceipts } from \"./mount-receipts.ts\";\n\nexport function registerDeleteRoute(app: FastifyInstance, store: StateStore, jobs: LocalJobs) {\n app.delete(\"/v1/workspaces/:id\", async (request) =>\n jobs.exclusive(async () => {\n const grant = requestGrant(request);\n const { id } = request.params as { id: string };\n const body = request.body as { confirmation: string; discardChanges?: boolean };\n let local;\n try {\n local = localWorkspace(store, grant, id);\n } catch (error) {\n throw Object.assign(error as Error, { statusCode: 409 });\n }\n const definition =\n store.state.jobs[\n Object.keys(store.state.jobs).find(\n (key) =>\n store.state.jobs[key].input.workspaceId === id &&\n store.state.jobs[key].userId === grant.userId &&\n store.state.jobs[key].workbenchId === grant.workbenchId,\n ) || \"\"\n ]?.intent.definition;\n const slug =\n definition?.slug ||\n local.document?.settings?.[\"codeWorkspace.name\"] ||\n path.basename(local.mount.directory).replace(/^(cw-|requirements-)/, \"\");\n if (!slug || body.confirmation !== slug) throw new Error(\"请输入完整 Workspace 名称确认移除\");\n const otherMounts = Object.values(store.state.mounts)\n .filter((mount) => mount !== local.mount)\n .flatMap((mount) => {\n try {\n return localWorkspace(\n store,\n { ...grant, userId: mount.userId, workbenchId: mount.workbenchId },\n mount.workspaceId,\n ).folders.map((folder) => ({ folder_path: folder.path }));\n } catch {\n return [{ folder_path: mount.directory }];\n }\n });\n const removalKey = scopeKey(grant.workbenchId, grant.userId, id);\n store.state.removals[removalKey] = local.mount;\n store.save();\n let result;\n try {\n result = gitExecution.run({ executable: store.state.git }, () =>\n removeLocalWorkspace({\n id,\n parentDirectory: local.mount.managedRoot || store.state.root,\n workspaceFile: local.file,\n backupDirectory: store.directory,\n mounts: local.folders.map((folder) => ({ folder_path: folder.path })),\n otherMounts,\n discardChanges: body.discardChanges === true,\n }),\n );\n } catch (error) {\n throw Object.assign(error as Error, { statusCode: 409 });\n }\n if (result.deleted) {\n delete store.state.mounts[removalKey];\n delete store.state.removals[removalKey];\n queueMountReceipt(store, local.mount, \"removed\");\n await syncMountReceipts(store);\n }\n if (!result.deleted) {\n delete store.state.removals[removalKey];\n store.save();\n }\n return result;\n }),\n );\n}\n","import { execFileSync } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { gitExecution } from \"../git/context.ts\";\nconst git = (cwd: string, ...args: string[]) =>\n execFileSync(gitExecution.getStore()?.executable || \"git\", [\"-C\", cwd, ...args], {\n encoding: \"utf8\",\n timeout: 15000,\n maxBuffer: 4 * 1024 * 1024,\n windowsHide: true,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n }).trim();\nconst inside = (root: string, target: string) => target.startsWith(root + path.sep);\nexport function removeLocalWorkspace(options: {\n id: string;\n parentDirectory: string;\n workspaceFile: string;\n backupDirectory: string;\n mounts: Array<{ folder_path: string }>;\n otherMounts: Array<{ folder_path: string }>;\n discardChanges: boolean;\n}) {\n const {\n id,\n parentDirectory,\n workspaceFile,\n backupDirectory,\n mounts,\n otherMounts,\n discardChanges,\n } = options;\n const parent = fs.realpathSync(parentDirectory);\n const requestedFile = path.resolve(workspaceFile);\n // The .code-workspace document is optional; the directory itself is the workspace.\n const hasFile = fs.existsSync(requestedFile);\n // Resolve the workspace directory: a workbench root may itself be reached through a symlink.\n const root = fs.realpathSync(path.dirname(requestedFile));\n const file = path.join(root, path.basename(requestedFile));\n // Only dedicated, directly managed workspace directories may be removed.\n if (\n path.dirname(root) !== parent ||\n !/^(cw-|requirements-).+/.test(path.basename(root)) ||\n (hasFile && fs.lstatSync(file).isSymbolicLink())\n )\n throw new Error(\"仅支持清理工作台父目录内独立的 Workspace 目录;外部目录或符号链接请手动处理\");\n const repositories = new Set<string>();\n for (const mount of mounts) {\n const declared = path.resolve(mount.folder_path);\n if (!inside(root, declared) || !fs.existsSync(declared)) continue;\n const real = fs.realpathSync(declared);\n if (real !== declared) throw new Error(\"Workspace 内有符号链接挂载,请先移除链接\");\n const top = fs.realpathSync(git(real, \"rev-parse\", \"--show-toplevel\"));\n if (!inside(root, top)) throw new Error(\"挂载目录并非独立仓库,拒绝清理\");\n repositories.add(top);\n }\n const repos = [...repositories];\n const metadata: string[] = [];\n const extraFiles: string[] = [];\n const warnings: string[] = [];\n const isFinderMetadata = (p: string) =>\n path.basename(p) === \".DS_Store\" && fs.lstatSync(p).isFile();\n if (\n otherMounts.some((m) => {\n try {\n const p = fs.realpathSync(m.folder_path);\n return p === root || inside(root, p);\n } catch {\n return false;\n }\n })\n )\n throw new Error(\"目录仍被其他 Workspace 挂载,请先解除引用\");\n // No unknown files (including ignored files) are silently discarded.\n const inspect = (directory: string) => {\n for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {\n const p = path.join(directory, entry.name);\n if ((hasFile && p === file) || repos.includes(p)) continue;\n if (isFinderMetadata(p) || entry.name === \".cwm-owner.json\") {\n metadata.push(p);\n continue;\n }\n if (entry.isFile()) {\n extraFiles.push(p);\n warnings.push(`Workspace 包含额外文件,继续删除将丢弃:${p}`);\n continue;\n }\n if (entry.isDirectory() && repos.some((r) => inside(p, r))) inspect(p);\n else throw new Error(`目录包含额外文件,请先处理:${p}`);\n }\n };\n inspect(root);\n const plans = repos.map((repo) => {\n let changedFiles = 0;\n for (const entry of git(\n repo,\n \"status\",\n \"--porcelain\",\n \"-z\",\n \"--untracked-files=all\",\n \"--ignored\",\n )\n .split(\"\\0\")\n .filter(Boolean)) {\n const p = path.resolve(repo, entry.slice(3));\n if (\n (entry.startsWith(\"?? \") || entry.startsWith(\"!! \")) &&\n inside(repo, p) &&\n isFinderMetadata(p)\n )\n metadata.push(p);\n else changedFiles += 1;\n }\n if (changedFiles)\n warnings.push(`${repo} 存在未提交、未跟踪或忽略文件,继续删除将丢弃这些本地内容。`);\n const common = fs.realpathSync(\n git(repo, \"rev-parse\", \"--path-format=absolute\", \"--git-common-dir\"),\n );\n if (repos.some((r) => r !== repo && inside(r, repo))) throw new Error(\"不支持嵌套仓库清理\");\n if (inside(root, common) && common !== path.join(repo, \".git\"))\n throw new Error(\"Git 公共目录位于其他待删除目录内,请手动处理\");\n const linked = common !== path.join(repo, \".git\");\n // Linked worktrees share refs/stashes with their source repository; these survive removal.\n if (\n git(\n repo,\n \"rev-list\",\n \"--max-count=1\",\n \"HEAD\",\n ...(!linked ? [\"--branches\", \"--tags\"] : []),\n \"--not\",\n \"--remotes\",\n )\n )\n warnings.push(\n `${repo} 存在未推送提交或无法确认远端备份。继续删除会清理工作目录,Git 提交将保留在源仓库或本地 Git 备份中。`,\n );\n if (!linked && git(repo, \"stash\", \"list\"))\n warnings.push(`${repo} 存在 stash,将随 Git 数据备份保留,工作目录仍会删除。`);\n if (\n !linked &&\n git(repo, \"worktree\", \"list\", \"--porcelain\")\n .split(\"\\n\")\n .filter((l) => l.startsWith(\"worktree \")).length > 1\n )\n throw new Error(\"仓库仍有其他 worktree,不能删除其主仓库\");\n if (git(repo, \"worktree\", \"list\", \"--porcelain\").includes(\"\\nlocked\"))\n throw new Error(\"仓库有锁定的 worktree,请先解锁\");\n return { repo, common, linked };\n });\n if (warnings.length && !discardChanges) return { requiresConfirmation: true, warnings };\n // Pin detached HEADs before removing linked worktrees so local commits stay reachable.\n for (const plan of plans.filter((p) => p.linked)) {\n if (!git(plan.repo, \"branch\", \"--show-current\")) {\n const head = git(plan.repo, \"rev-parse\", \"HEAD\");\n git(plan.repo, \"update-ref\", `refs/workbench-deleted/${id}/${head}`, head);\n }\n }\n // Preserve independent clones' Git history and branch refs before removing working files.\n for (const plan of plans.filter((p) => !p.linked)) {\n const backup = path.join(\n backupDirectory,\n \"deleted-workspace-git\",\n id,\n String(Date.now()),\n path.relative(root, plan.repo),\n );\n fs.mkdirSync(path.dirname(backup), { recursive: true });\n fs.cpSync(plan.common, backup, { recursive: true, errorOnExist: true, force: false });\n }\n // Only remove recognized metadata once every repository has passed validation.\n for (const p of metadata) {\n if (\n !isFinderMetadata(p) &&\n !(path.basename(p) === \".cwm-owner.json\" && fs.lstatSync(p).isFile())\n )\n throw new Error(`文件类型已变化,取消清理:${p}`);\n fs.unlinkSync(p);\n }\n for (const p of extraFiles) {\n if (!fs.lstatSync(p).isFile()) throw new Error(`文件类型已变化,取消清理:${p}`);\n fs.unlinkSync(p);\n }\n for (const plan of plans) {\n if (plan.linked)\n git(\n parent,\n \"--git-dir=\" + plan.common,\n \"worktree\",\n \"remove\",\n ...(discardChanges ? [\"--force\"] : []),\n plan.repo,\n );\n else fs.rmSync(plan.repo, { recursive: true });\n }\n // rmdir, not recursive rm: concurrent or unexpected new files are preserved.\n if (hasFile) fs.unlinkSync(file);\n const removeEmpty = (directory: string) => {\n for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {\n if (entry.isDirectory()) removeEmpty(path.join(directory, entry.name));\n }\n fs.rmdirSync(directory);\n };\n removeEmpty(root);\n return { deleted: true };\n}\n","import { spawn } from \"node:child_process\";\nimport path from \"node:path\";\n\nexport interface DirectoryPickerCommand {\n command: string;\n args: string[];\n env: Record<string, string>;\n shell: false;\n}\n\nexport function directoryPickerCommand(\n platform: NodeJS.Platform,\n initialPath: string,\n): DirectoryPickerCommand {\n if (platform === \"darwin\") {\n return {\n command: \"osascript\",\n args: [\n \"-e\",\n 'set startPath to system attribute \"CWM_PICKER_INITIAL\"',\n \"-e\",\n 'set selectedFolder to choose folder with prompt \"选择工作目录\" default location POSIX file startPath',\n \"-e\",\n \"POSIX path of selectedFolder\",\n ],\n env: { CWM_PICKER_INITIAL: initialPath },\n shell: false,\n };\n }\n if (platform === \"win32\") {\n return {\n command: \"powershell.exe\",\n args: [\n \"-NoProfile\",\n \"-NonInteractive\",\n \"-Command\",\n [\n \"Add-Type -AssemblyName System.Windows.Forms\",\n \"$dialog = New-Object System.Windows.Forms.FolderBrowserDialog\",\n \"$dialog.SelectedPath = $env:CWM_PICKER_INITIAL\",\n \"if ($dialog.ShowDialog() -eq 'OK') { Write-Output $dialog.SelectedPath } else { exit 1 }\",\n ].join(\"; \"),\n ],\n env: { CWM_PICKER_INITIAL: initialPath },\n shell: false,\n };\n }\n return {\n command: \"zenity\",\n args: [\"--file-selection\", \"--directory\", `--filename=${initialPath}${path.sep}`],\n env: {},\n shell: false,\n };\n}\n\nexport function openDirectoryPicker(initialPath: string): Promise<string | null> {\n const specification = directoryPickerCommand(process.platform, initialPath);\n return new Promise((resolve, reject) => {\n const child = spawn(specification.command, specification.args, {\n shell: specification.shell,\n env: { ...process.env, ...specification.env },\n windowsHide: false,\n });\n let stdout = \"\";\n let stderr = \"\";\n child.stdout.on(\"data\", (chunk) => {\n stdout += String(chunk);\n });\n child.stderr.on(\"data\", (chunk) => {\n stderr += String(chunk);\n });\n child.once(\"error\", reject);\n child.once(\"close\", (code) => {\n const selected = stdout.trim();\n if (code === 0 && selected) return resolve(path.resolve(selected));\n if (!selected && (code === 1 || code === 130)) return resolve(null);\n reject(new Error(stderr.trim() || \"系统目录选择器不可用\"));\n });\n });\n}\n","import type { Agent } from \"@code-workspace/contracts\";\nimport { execFileSync } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { type WorkbenchSettings } from \"../settings/workbench-settings.ts\";\nimport { resolveCursorAgent } from \"./cursor-agent.ts\";\nimport { spawnIdeCommand } from \"./process.ts\";\nimport { windowsCliShim, windowsCodexExecutable, windowsIdeaExecutable } from \"./windows.ts\";\n\nexport function toolboxIdeaScript(preferred = \"\"): string {\n const directory = path.join(\n os.homedir(),\n \"Library/Application Support/JetBrains/Toolbox/scripts\",\n );\n if (!fs.existsSync(directory)) return \"\";\n const names = fs.readdirSync(directory).filter((name) => /^idea(?:\\d+)?$/i.test(name));\n if (preferred) {\n if (names.includes(preferred)) return path.join(directory, preferred);\n if (preferred.toLowerCase() !== \"idea\") return \"\";\n }\n const match = names.find((name) => name.toLowerCase() === \"idea\") || names[0];\n return match ? path.join(directory, match) : \"\";\n}\n\nexport function launchIntelliJIdea(target: string, configuredCommand = \"\"): Promise<void> {\n const command = configuredCommand || process.env.CWM_IDEA_PATH || \"\";\n if (command) {\n if (process.platform === \"darwin\" && command.endsWith(\".app\")) {\n return spawnIdeCommand(\"/usr/bin/open\", [\"-na\", command, \"--args\", target], \"IntelliJ IDEA\");\n }\n const resolved = path.isAbsolute(command) ? command : toolboxIdeaScript(command) || command;\n return spawnIdeCommand(resolved, [target], \"IntelliJ IDEA\");\n }\n if (process.platform === \"darwin\") {\n const script =\n toolboxIdeaScript() ||\n [\"/usr/local/bin/idea\", \"/opt/homebrew/bin/idea\"].find((candidate) =>\n fs.existsSync(candidate),\n ) ||\n \"\";\n if (script) return spawnIdeCommand(script, [target], \"IntelliJ IDEA\");\n const apps = [\n \"IntelliJ IDEA.app\",\n \"IntelliJ IDEA CE.app\",\n \"IntelliJ IDEA Community Edition.app\",\n ];\n const found = apps\n .flatMap((name) => [\n path.join(\"/Applications\", name),\n path.join(os.homedir(), \"Applications\", name),\n ])\n .find((candidate) => fs.existsSync(candidate));\n return spawnIdeCommand(\n \"/usr/bin/open\",\n [\"-na\", found || \"IntelliJ IDEA.app\", \"--args\", target],\n \"IntelliJ IDEA\",\n );\n }\n if (process.platform === \"win32\") {\n const found = windowsIdeaExecutable();\n if (!found)\n return Promise.reject(\n new Error(\"未找到 IntelliJ IDEA。请安装,或在设置中填写 idea64.exe 的完整路径\"),\n );\n return spawnIdeCommand(found, [target], \"IntelliJ IDEA\");\n }\n return spawnIdeCommand(\"idea\", [target], \"IntelliJ IDEA\");\n}\n\nexport function agentCommand(agent: Agent): string | null {\n if (agent === \"none\") return null;\n return agent === \"claude\"\n ? process.env.CWM_CLAUDE_PATH || \"claude\"\n : process.env.CWM_CODEX_PATH || \"codex\";\n}\n\nexport function commandOnPath(name: string): string {\n if (!name) return \"\";\n try {\n const command = process.platform === \"win32\" ? \"where\" : \"/usr/bin/which\";\n const found = execFileSync(command, [name], {\n encoding: \"utf8\",\n timeout: 4000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n })\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .find(Boolean);\n return found || \"\";\n } catch {\n return \"\";\n }\n}\n\nexport function macApplication(name: string): string {\n return (\n [path.join(\"/Applications\", name), path.join(os.homedir(), \"Applications\", name)].find(\n (candidate) => fs.existsSync(candidate),\n ) || \"\"\n );\n}\n\nexport function detectToolCommands(): WorkbenchSettings[\"tools\"] {\n if (process.platform === \"win32\") {\n return {\n vscode: windowsCliShim(\"vscode\") || commandOnPath(\"code\"),\n cursor: windowsCliShim(\"cursor\") || commandOnPath(\"cursor\"),\n idea: windowsIdeaExecutable() || commandOnPath(\"idea64\"),\n claude: commandOnPath(\"claude\"),\n codex: windowsCodexExecutable() || commandOnPath(\"codex\"),\n cursorCli: commandOnPath(\"cursor-agent\"),\n opencode: commandOnPath(\"opencode\"),\n };\n }\n return {\n vscode: commandOnPath(\"code\") || macApplication(\"Visual Studio Code.app\"),\n cursor: commandOnPath(\"cursor\") || macApplication(\"Cursor.app\"),\n idea: toolboxIdeaScript() || commandOnPath(\"idea\") || macApplication(\"IntelliJ IDEA.app\"),\n claude: commandOnPath(\"claude\"),\n codex: commandOnPath(\"codex\"),\n cursorCli:\n resolveCursorAgent(\"\") === \"cursor-agent\"\n ? commandOnPath(\"cursor-agent\")\n : resolveCursorAgent(\"\"),\n opencode: commandOnPath(\"opencode\"),\n };\n}\n","import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nexport function resolveCursorAgent(configuredCommand: string): string {\n if (configuredCommand) return configuredCommand;\n const candidates = [\n process.env.CWM_CURSOR_AGENT_PATH,\n path.join(os.homedir(), \".local/bin/cursor-agent\"),\n \"/usr/local/bin/cursor-agent\",\n \"/opt/homebrew/bin/cursor-agent\",\n ].filter((value): value is string => Boolean(value));\n return candidates.find((candidate) => fs.existsSync(candidate)) || \"cursor-agent\";\n}\n","import { spawn } from \"node:child_process\";\nexport function quoteWindows(value: string): string {\n if (!/[\\s\"&|<>^]/.test(value)) return value;\n return '\"' + value.replace(/\"/g, '\"\"') + '\"';\n}\nexport function spawnIdeCommand(command: string, args: string[], label: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const env = { ...process.env };\n delete env.ELECTRON_RUN_AS_NODE;\n delete env.VSCODE_IPC_HOOK_CLI;\n const windowsShim = process.platform === \"win32\" && /\\.(cmd|bat)$/i.test(command);\n const file = windowsShim ? process.env.ComSpec || \"cmd.exe\" : command;\n const argv = windowsShim\n ? [\"/d\", \"/s\", \"/c\", [quoteWindows(command), ...args.map(quoteWindows)].join(\" \")]\n : args;\n const child = spawn(file, argv, { env, stdio: [\"ignore\", \"ignore\", \"pipe\"] });\n let stderr = \"\";\n const timeout = setTimeout(() => {\n child.kill();\n reject(new Error(label + \" 启动命令超时,请检查应用窗口或设置中的 CLI 路径\"));\n }, 20_000);\n child.stderr?.on(\"data\", (data: Buffer) => {\n stderr = (stderr + data.toString()).slice(-8000);\n });\n child.once(\"error\", (error) => {\n clearTimeout(timeout);\n reject(new Error(\"无法启动 \" + label + \":\" + error.message));\n });\n child.once(\"close\", (code) => {\n clearTimeout(timeout);\n if (code === 0) resolve();\n else\n reject(\n new Error(\n label +\n \" 启动失败(退出码 \" +\n code +\n \"):\" +\n (stderr.trim() || \"请检查 IDE 安装及 CLI 路径\"),\n ),\n );\n });\n });\n}\n","import type { Ide } from \"@code-workspace/contracts\";\nimport { execFileSync, spawn } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { resolveCursorAgent } from \"./cursor-agent.ts\";\nimport { quoteWindows, spawnIdeCommand } from \"./process.ts\";\n\nexport function windowsCommandAvailable(command: string): boolean {\n if (!command) return false;\n if (path.win32.isAbsolute(command) || command.includes(\"\\\\\") || command.includes(\"/\"))\n return fs.existsSync(command);\n const directories = (process.env.PATH || \"\").split(\";\").filter(Boolean);\n const extensions = [\"\", \".exe\", \".cmd\", \".bat\", \".com\"];\n return directories.some((directory) =>\n extensions.some((extension) => fs.existsSync(path.join(directory, command + extension))),\n );\n}\n\nexport function windowsProtocolRegistered(scheme: string): boolean {\n for (const root of [\"HKCU\\\\Software\\\\Classes\\\\\", \"HKLM\\\\Software\\\\Classes\\\\\"]) {\n try {\n execFileSync(\"reg\", [\"query\", root + scheme], { stdio: \"ignore\" });\n return true;\n } catch {\n // Try the next registry hive.\n }\n }\n return false;\n}\n\nexport function windowsIdeaExecutable(): string {\n const roots = [\n path.join(process.env.ProgramFiles || \"\", \"JetBrains\"),\n path.join(process.env[\"ProgramFiles(x86)\"] || \"\", \"JetBrains\"),\n path.join(process.env.LOCALAPPDATA || \"\", \"JetBrains\", \"Toolbox\", \"apps\"),\n ];\n const found: string[] = [];\n const walk = (directory: string, depth: number) => {\n if (depth < 0 || !fs.existsSync(directory)) return;\n for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {\n const target = path.join(directory, entry.name);\n if (entry.isFile() && /^idea64\\.exe$/i.test(entry.name)) found.push(target);\n else if (entry.isDirectory()) walk(target, depth - 1);\n }\n };\n for (const root of roots) walk(root, 5);\n return (\n found.sort((left, right) => fs.statSync(right).mtimeMs - fs.statSync(left).mtimeMs)[0] || \"\"\n );\n}\n\nexport function windowsCodexExecutable(): string {\n const root = path.join(process.env.LOCALAPPDATA || \"\", \"OpenAI\", \"Codex\", \"bin\");\n if (!fs.existsSync(root)) return \"\";\n const matches = fs\n .readdirSync(root, { withFileTypes: true })\n .filter((entry) => entry.isDirectory())\n .map((entry) => path.join(root, entry.name, \"codex.exe\"))\n .filter((candidate) => fs.existsSync(candidate))\n .sort((left, right) => fs.statSync(right).mtimeMs - fs.statSync(left).mtimeMs);\n return matches[0] || \"\";\n}\n\nexport function windowsCliShim(ide: \"cursor\" | \"vscode\"): string {\n const local = process.env.LOCALAPPDATA || \"\";\n const programFiles = process.env.ProgramFiles || \"\";\n const programFilesX86 = process.env[\"ProgramFiles(x86)\"] || \"\";\n const candidates =\n ide === \"cursor\"\n ? [\n path.join(local, \"Programs\", \"cursor\", \"resources\", \"app\", \"bin\", \"cursor.cmd\"),\n path.join(local, \"Programs\", \"Cursor\", \"resources\", \"app\", \"bin\", \"cursor.cmd\"),\n ]\n : [\n path.join(local, \"Programs\", \"Microsoft VS Code\", \"bin\", \"code.cmd\"),\n path.join(programFiles, \"Microsoft VS Code\", \"bin\", \"code.cmd\"),\n path.join(programFilesX86, \"Microsoft VS Code\", \"bin\", \"code.cmd\"),\n ];\n return candidates.find((candidate) => fs.existsSync(candidate)) || \"\";\n}\n\nexport function launchWindowsCli(\n ide: Ide,\n configuredCommand: string,\n fallbackName: string,\n workingDirectory: string,\n): Promise<void> {\n const fallback = configuredCommand || fallbackName;\n const command =\n ide === \"cursor-cli\"\n ? resolveCursorAgent(configuredCommand)\n : ide === \"codex-cli\" && !configuredCommand\n ? windowsCodexExecutable() || fallback\n : fallback;\n if (!windowsCommandAvailable(command))\n return Promise.reject(\n new Error(\n \"未找到 \" + (configuredCommand || fallbackName) + \"。请安装,或在设置中填写完整路径\",\n ),\n );\n const comspec = process.env.ComSpec || \"cmd.exe\";\n const script = \"cd /d \" + quoteWindows(workingDirectory) + \" && \" + quoteWindows(command);\n const child = spawn(comspec, [\"/d\", \"/c\", \"start\", '\"\"', \"cmd\", \"/k\", script], {\n detached: true,\n stdio: \"ignore\",\n windowsHide: false,\n });\n child.once(\"error\", () => {});\n child.unref();\n return Promise.resolve();\n}\n\nexport function launchWindowsDesktopApp(\n ide: \"claude\" | \"opencode\",\n workingDirectory: string,\n): Promise<void> {\n const url =\n (ide === \"opencode\" ? \"opencode://open-project?directory=\" : \"claude://code/new?folder=\") +\n encodeURIComponent(workingDirectory);\n const scheme = ide === \"opencode\" ? \"opencode\" : \"claude\";\n if (!windowsProtocolRegistered(scheme))\n return Promise.reject(\n new Error(\n \"未找到 \" +\n (ide === \"opencode\" ? \"OpenCode\" : \"Claude Code\") +\n \" 桌面应用。请先安装,或确认系统已注册对应的打开协议\",\n ),\n );\n return spawnIdeCommand(\n process.env.ComSpec || \"cmd.exe\",\n [\"/d\", \"/s\", \"/c\", \"start\", \"\", url],\n ide,\n );\n}\n","import type { Ide } from \"@code-workspace/contracts\";\nimport { spawn } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { openPlatformUri } from \"../platform/uri.ts\";\nimport { launchIntelliJIdea } from \"./commands.ts\";\nimport { resolveCursorAgent } from \"./cursor-agent.ts\";\nimport { spawnIdeCommand } from \"./process.ts\";\nimport {\n launchWindowsCli,\n launchWindowsDesktopApp,\n windowsCliShim,\n windowsCodexExecutable,\n} from \"./windows.ts\";\n\nexport function launchIde(\n workspaceFile: string,\n ide: Ide,\n configuredCommand = \"\",\n targetKind: \"workspace\" | \"directory\" = \"workspace\",\n): Promise<void> {\n if (\n !path.isAbsolute(workspaceFile) ||\n (targetKind === \"workspace\" && !workspaceFile.endsWith(\".code-workspace\")) ||\n !fs.existsSync(workspaceFile)\n ) {\n return Promise.reject(new Error(\"Workspace 文件不存在或路径无效:\" + workspaceFile));\n }\n if (targetKind === \"directory\" && !fs.statSync(workspaceFile).isDirectory())\n return Promise.reject(new Error(\"仓库目录不存在\"));\n const workingDirectory = targetKind === \"directory\" ? workspaceFile : path.dirname(workspaceFile);\n const cliCommands: Partial<Record<Ide, string>> = {\n \"codex-cli\": \"codex\",\n \"cursor-cli\": \"cursor-agent\",\n \"opencode-cli\": \"opencode\",\n \"claudecode-cli\": \"claude\",\n };\n if (cliCommands[ide]) {\n if (process.platform === \"win32\")\n return launchWindowsCli(ide, configuredCommand, cliCommands[ide]!, workingDirectory);\n if (process.platform !== \"darwin\")\n return Promise.reject(new Error(\"系统默认终端启动目前仅接入 macOS 和 Windows\"));\n const command =\n ide === \"cursor-cli\"\n ? resolveCursorAgent(configuredCommand)\n : configuredCommand || cliCommands[ide]!;\n const quote = (value: string) => \"'\" + value.replace(/'/g, \"'\\\"'\\\"'\") + \"'\";\n const directory = fs.mkdtempSync(path.join(os.tmpdir(), \"cwm-launch-\"));\n const script = path.join(directory, ide + \".command\");\n const shell =\n process.env.SHELL && path.isAbsolute(process.env.SHELL) ? process.env.SHELL : \"/bin/zsh\";\n const invocation =\n \"if command -v \" +\n quote(command) +\n \" >/dev/null 2>&1; then exec \" +\n quote(command) +\n \"; else printf '%s\\\\n' \" +\n quote(\"Command not found: \" + command + \". Configure its path in Workbench settings.\") +\n \"; read reply; fi\";\n fs.writeFileSync(\n script,\n [\n \"#!/bin/sh\",\n \"rm -f -- \" + quote(script),\n \"rmdir -- \" + quote(directory),\n \"unset ELECTRON_RUN_AS_NODE VSCODE_IPC_HOOK_CLI\",\n \"cd \" + quote(workingDirectory) + \" || exit 1\",\n \"exec \" + quote(shell) + \" -ilc \" + quote(invocation),\n \"\",\n ].join(\"\\n\"),\n { mode: 0o700 },\n );\n return new Promise((resolve, reject) => {\n const child = spawn(\"/usr/bin/open\", [script], { stdio: [\"ignore\", \"ignore\", \"pipe\"] });\n let stderr = \"\";\n const cleanup = () => {\n fs.rmSync(script, { force: true });\n try {\n fs.rmdirSync(directory);\n } catch {}\n };\n const timer = setTimeout(() => {\n child.kill();\n cleanup();\n reject(new Error(\"启动默认终端超时\"));\n }, 20_000);\n child.stderr?.on(\"data\", (data: Buffer) => {\n stderr = (stderr + data.toString()).slice(-8000);\n });\n child.once(\"error\", (error) => {\n clearTimeout(timer);\n cleanup();\n reject(error);\n });\n child.once(\"close\", (code) => {\n clearTimeout(timer);\n if (code === 0) resolve();\n else {\n cleanup();\n reject(new Error(\"无法启动系统默认终端:\" + stderr.trim()));\n }\n });\n });\n }\n if (ide === \"claude\" || ide === \"opencode\") {\n if (process.platform === \"win32\") return launchWindowsDesktopApp(ide, workingDirectory);\n if (process.platform !== \"darwin\") {\n return openPlatformUri(\n (ide === \"opencode\" ? \"opencode://open-project?directory=\" : \"claude://code/new?folder=\") +\n encodeURIComponent(workingDirectory),\n );\n }\n const url =\n (ide === \"opencode\" ? \"opencode://open-project?directory=\" : \"claude://code/new?folder=\") +\n encodeURIComponent(workingDirectory);\n return new Promise((resolve, reject) => {\n const child = spawn(\"/usr/bin/open\", [url], { stdio: [\"ignore\", \"ignore\", \"pipe\"] });\n let stderr = \"\";\n const timeout = setTimeout(() => {\n child.kill();\n reject(new Error(\"打开桌面应用超时,请检查应用安装\"));\n }, 20_000);\n child.stderr?.on(\"data\", (data: Buffer) => {\n stderr = (stderr + data.toString()).slice(-8000);\n });\n child.once(\"error\", (error) => {\n clearTimeout(timeout);\n reject(error);\n });\n child.once(\"close\", (code) => {\n clearTimeout(timeout);\n if (code === 0) resolve();\n else\n reject(new Error(\"无法打开 \" + ide + \",请确认已安装最新版桌面应用:\" + stderr.trim()));\n });\n });\n }\n if (ide === \"idea\") return launchIntelliJIdea(workingDirectory, configuredCommand);\n const cursorLike = ide === \"cursor\" || ide === \"cursor-agent\";\n let command =\n configuredCommand ||\n (ide === \"codex\"\n ? process.env.CWM_CODEX_PATH\n : cursorLike\n ? process.env.CWM_CURSOR_PATH\n : process.env.CWM_VSCODE_PATH) ||\n \"\";\n if (!command && ide !== \"codex\" && process.platform === \"darwin\") {\n const app = cursorLike ? \"Cursor.app\" : \"Visual Studio Code.app\";\n const binary = cursorLike ? \"cursor\" : \"code\";\n const candidates = [\n path.join(\"/Applications\", app, \"Contents/Resources/app/bin\", binary),\n path.join(os.homedir(), \"Applications\", app, \"Contents/Resources/app/bin\", binary),\n ];\n command = candidates.find((candidate) => fs.existsSync(candidate)) || \"\";\n }\n if (\n !command &&\n process.platform === \"win32\" &&\n (cursorLike || ide === \"vscode\" || ide === \"codex\")\n ) {\n command =\n ide === \"codex\" ? windowsCodexExecutable() : windowsCliShim(cursorLike ? \"cursor\" : \"vscode\");\n if (!command)\n return Promise.reject(\n new Error(\n \"未找到 \" +\n (ide === \"codex\" ? \"Codex\" : cursorLike ? \"Cursor\" : \"VS Code\") +\n \"。请安装,或在设置中填写启动命令的完整路径\",\n ),\n );\n }\n command ||= ide === \"codex\" ? \"codex\" : cursorLike ? \"cursor\" : \"code\";\n const args =\n ide === \"codex\"\n ? [\"app\", workingDirectory]\n : ide === \"cursor-agent\"\n ? [workingDirectory]\n : [\"--new-window\", workspaceFile];\n if (process.platform === \"win32\") return spawnIdeCommand(command, args, ide);\n return new Promise((resolve, reject) => {\n const env = { ...process.env };\n delete env.ELECTRON_RUN_AS_NODE;\n delete env.VSCODE_IPC_HOOK_CLI;\n const child = spawn(command, args, { env, stdio: [\"ignore\", \"ignore\", \"pipe\"] });\n let stderr = \"\";\n const timeout = setTimeout(() => {\n child.kill();\n reject(new Error(\"IDE 启动命令超时,请检查应用窗口或设置中的 CLI 路径\"));\n }, 20_000);\n child.stderr?.on(\"data\", (data: Buffer) => {\n stderr = (stderr + data.toString()).slice(-8000);\n });\n child.once(\"error\", (error) => {\n clearTimeout(timeout);\n reject(new Error(\"无法启动 \" + ide + \":\" + error.message));\n });\n child.once(\"close\", (code) => {\n clearTimeout(timeout);\n if (code === 0) resolve();\n else\n reject(\n new Error(\n ide +\n \" 启动失败(退出码 \" +\n code +\n \"):\" +\n (stderr.trim() || \"请检查 IDE 安装及 CLI 路径\"),\n ),\n );\n });\n });\n}\n","import { spawn } from \"node:child_process\";\nexport function uriInvocation(target: string, platform: NodeJS.Platform = process.platform) {\n if (platform === \"darwin\") return { command: \"/usr/bin/open\", args: [target] };\n if (platform === \"win32\")\n return { command: \"rundll32.exe\", args: [\"url.dll,FileProtocolHandler\", target] };\n return { command: \"xdg-open\", args: [target] };\n}\nexport function windowsInvocation(command: string, args: string[]) {\n const quote = (s: string) => \"'\" + s.replaceAll(\"'\", \"''\") + \"'\";\n const script = \"& \" + [command, ...args].map(quote).join(\" \") + \"; exit $LASTEXITCODE\";\n return {\n command: \"powershell.exe\",\n args: [\n \"-NoProfile\",\n \"-NonInteractive\",\n \"-EncodedCommand\",\n Buffer.from(script, \"utf16le\").toString(\"base64\"),\n ],\n };\n}\nexport function spawnPlatformCommand(\n command: string,\n args: string[],\n label: string,\n): Promise<void> {\n const invocation =\n process.platform === \"win32\" ? windowsInvocation(command, args) : { command, args };\n return new Promise((resolve, reject) => {\n const child = spawn(invocation.command, invocation.args, {\n stdio: [\"ignore\", \"ignore\", \"pipe\"],\n });\n let stderr = \"\";\n const timer = setTimeout(() => {\n child.kill();\n reject(new Error(label + \"启动超时\"));\n }, 20000);\n child.stderr?.on(\"data\", (data) => {\n stderr = (stderr + String(data)).slice(-2000);\n });\n child.once(\"error\", (error) => {\n clearTimeout(timer);\n reject(error);\n });\n child.once(\"close\", (code) => {\n clearTimeout(timer);\n if (code === 0) resolve();\n else reject(new Error(label + \"启动失败:\" + stderr.trim()));\n });\n });\n}\nexport async function openPlatformUri(target: string) {\n const invocation = uriInvocation(target);\n await spawnPlatformCommand(invocation.command, invocation.args, \"应用\");\n}\n","import type { RepositoryMode } from \"@code-workspace/contracts\";\nimport { randomUUID } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { runGit, tryGit } from \"../git/commands.ts\";\n\nexport interface WorkspaceInput {\n parent: string;\n slug: string;\n description?: string;\n workspaceDirectory?: string;\n outputWorkspace?: string;\n repositories: Array<{\n alias: string;\n sourcePath: string;\n branch: string;\n fromBranch?: string;\n mode: RepositoryMode;\n subpath?: string;\n }>;\n}\nexport interface WorkspaceResult {\n slug: string;\n workspace: string;\n path: string;\n opened: 0;\n}\ntype Repository = WorkspaceInput[\"repositories\"][number];\nconst DEFAULT_BASE = \"origin/production\";\n\nfunction inside(root: string, target: string): boolean {\n const relative = path.relative(root, target);\n return relative !== \"..\" && !relative.startsWith(\"..\" + path.sep) && !path.isAbsolute(relative);\n}\nfunction stat(file: string) {\n try {\n return fs.lstatSync(file);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return undefined;\n throw error;\n }\n}\nasync function commonDirectory(source: string): Promise<string> {\n const common = await runGit(source, [\"rev-parse\", \"--git-common-dir\"]);\n return fs.realpathSync(path.resolve(source, common));\n}\nasync function hasRef(source: string, ref: string): Promise<boolean> {\n return (await tryGit(source, [\"show-ref\", \"--verify\", \"--quiet\", ref])) !== undefined;\n}\nasync function resolveBase(source: string, preferred: string): Promise<string> {\n const candidates = [preferred];\n if (!preferred.startsWith(\"origin/\") && !preferred.startsWith(\"refs/\"))\n candidates.push(`origin/${preferred}`, `refs/heads/${preferred}`);\n candidates.push(\n \"refs/remotes/origin/HEAD\",\n \"origin/production\",\n \"origin/main\",\n \"origin/master\",\n \"origin/develop\",\n \"HEAD\",\n );\n for (const ref of candidates) {\n const commit = await tryGit(source, [\n \"rev-parse\",\n \"--verify\",\n \"--end-of-options\",\n `${ref}^{commit}`,\n ]);\n if (commit !== undefined) return commit;\n }\n throw new Error(\"没有可用的 From 分支或 HEAD\");\n}\nasync function occupiedPath(source: string, branch: string): Promise<string | undefined> {\n const records = (await runGit(source, [\"worktree\", \"list\", \"--porcelain\", \"-z\"])).split(\"\\0\\0\");\n for (const record of records) {\n const fields = record.split(\"\\0\");\n if (fields.includes(`branch refs/heads/${branch}`))\n return fields.find((field) => field.startsWith(\"worktree \"))?.slice(9);\n }\n}\nasync function ensureClean(dest: string): Promise<void> {\n if (await runGit(dest, [\"status\", \"--porcelain\"]))\n throw new Error(`${dest} 有未提交改动,已停止切换分支`);\n}\nasync function checkout(\n dest: string,\n branch: string,\n preferred: string,\n allowCreate: boolean,\n log: (line: string) => void,\n): Promise<void> {\n if (!branch || (await runGit(dest, [\"branch\", \"--show-current\"])) === branch) return;\n await ensureClean(dest);\n if (await hasRef(dest, `refs/heads/${branch}`)) {\n await runGit(dest, [\"checkout\", branch], { onLog: log });\n } else if (await hasRef(dest, `refs/remotes/origin/${branch}`)) {\n await runGit(dest, [\"checkout\", \"-b\", branch, \"--track\", `origin/${branch}`], { onLog: log });\n } else if (allowCreate) {\n await runGit(dest, [\"checkout\", \"-b\", branch, await resolveBase(dest, preferred)], {\n onLog: log,\n });\n } else {\n throw new Error(`无法在 ${dest} 切换到 ${branch}:分支不存在`);\n }\n}\n\n/** Materialize mounts, then atomically publish their workspace document. Failed Git work is retained. */\nexport async function createWorkspace(\n input: WorkspaceInput,\n onLog: (line: string) => void = () => {},\n): Promise<WorkspaceResult> {\n if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(input.slug)) throw new Error(\"Workspace 名称无效\");\n if (!Array.isArray(input.repositories) || !input.repositories.length)\n throw new Error(\"至少需要一个仓库\");\n const parent = path.resolve(input.parent);\n const current = path.join(parent, `cw-${input.slug}`),\n legacy = path.join(parent, `requirements-${input.slug}`);\n const directory = path.resolve(\n input.workspaceDirectory ||\n (fs.existsSync(current) ? current : fs.existsSync(legacy) ? legacy : current),\n );\n const output = path.resolve(\n input.outputWorkspace || path.join(directory, `${path.basename(directory)}.code-workspace`),\n );\n if (stat(directory)?.isSymbolicLink() || stat(output)?.isSymbolicLink())\n throw new Error(\"Workspace 目标不能是符号链接\");\n const original = stat(output) ? fs.readFileSync(output) : undefined;\n const aliases = new Set<string>();\n const prepared: Array<{\n repo: Repository;\n source: string;\n common: string;\n main: string;\n branch: string;\n }> = [];\n // Validate the entire request before performing Git mutations or creating the target directory.\n for (const repo of input.repositories) {\n if (\n !/^[A-Za-z0-9._-]+$/.test(repo.alias) ||\n [\".\", \"..\", \".git\"].includes(repo.alias.toLowerCase())\n )\n throw new Error(\"仓库 ALIAS 无效\");\n const aliasKey = process.platform === \"linux\" ? repo.alias : repo.alias.toLowerCase();\n if (aliases.has(aliasKey)) throw new Error(\"仓库 ALIAS 重复\");\n aliases.add(aliasKey);\n if (![\"worktree\", \"checkout\"].includes(repo.mode)) throw new Error(\"仓库模式无效\");\n if (\n repo.subpath &&\n (path.isAbsolute(repo.subpath) ||\n path.win32.isAbsolute(repo.subpath) ||\n repo.subpath.split(/[\\\\/]/).includes(\"..\") ||\n repo.subpath.includes(\"\\0\"))\n )\n throw new Error(\"SUBPATH 必须是仓库内相对路径\");\n if (!repo.sourcePath) throw new Error(\"SOURCE 不能为空\");\n const source = fs.realpathSync(path.resolve(repo.sourcePath));\n if ((await runGit(source, [\"rev-parse\", \"--is-inside-work-tree\"])) !== \"true\")\n throw new Error(`SOURCE 不是 Git 工作目录:${source}`);\n if (repo.branch) {\n if (repo.branch.startsWith(\"-\") || repo.branch.includes(\"@{\")) throw new Error(\"分支无效\");\n await runGit(source, [\"check-ref-format\", \"--branch\", repo.branch]);\n }\n if (repo.fromBranch && (repo.fromBranch.startsWith(\"-\") || /[\\0\\r\\n]/.test(repo.fromBranch)))\n throw new Error(\"From 分支无效\");\n const common = await commonDirectory(source);\n // The first record identifies the main checkout even when SOURCE is a linked worktree.\n const mainRecord = (await runGit(source, [\"worktree\", \"list\", \"--porcelain\", \"-z\"])).split(\n \"\\0\",\n )[0];\n const main = mainRecord.startsWith(\"worktree \") ? mainRecord.slice(9) : source;\n const branch =\n repo.branch ||\n (repo.mode === \"checkout\" ? repo.fromBranch : \"\") ||\n (await runGit(source, [\"branch\", \"--show-current\"]));\n if (branch) {\n if (branch.startsWith(\"-\") || branch.includes(\"@{\")) throw new Error(\"分支无效\");\n await runGit(source, [\"check-ref-format\", \"--branch\", branch]);\n }\n const dest = path.join(directory, repo.alias);\n if (stat(dest)?.isSymbolicLink()) throw new Error(`目标不能是符号链接:${dest}`);\n if (\n fs.existsSync(dest) &&\n [fs.realpathSync(main), fs.realpathSync(source)].includes(fs.realpathSync(dest))\n )\n throw new Error(\"目标目录不能复用源仓库自身\");\n prepared.push({ repo, source, common, main, branch });\n }\n fs.mkdirSync(directory, { recursive: true });\n const folders: Array<{ name: string; path: string }> = [];\n const metadata: Array<{\n alias: string;\n branch: string;\n from_branch: string;\n from_mode: RepositoryMode;\n }> = [];\n for (const { repo, source, common, main, branch } of prepared) {\n const dest = path.join(directory, repo.alias),\n preferred = repo.fromBranch || DEFAULT_BASE;\n if ((await runGit(main, [\"remote\"])).split(\"\\n\").includes(\"origin\")) {\n onLog(`刷新远端:${repo.alias}`);\n if ((await tryGit(main, [\"fetch\", \"origin\", \"--prune\"])) === undefined)\n onLog(`远端刷新失败,继续使用本地引用:${repo.alias}`);\n }\n if (stat(dest)) {\n if (stat(dest)?.isSymbolicLink()) throw new Error(`目标不能是符号链接:${dest}`);\n const root = await runGit(dest, [\"rev-parse\", \"--show-toplevel\"]);\n if (fs.realpathSync(root) !== fs.realpathSync(dest))\n throw new Error(`目标目录不是仓库根目录:${dest}`);\n const linked = (await commonDirectory(dest)) === common;\n if (repo.mode === \"checkout\" && linked)\n throw new Error(`目标已是源仓的 linked worktree:${dest}`);\n if (repo.mode === \"worktree\" && !linked) throw new Error(`目标已是独立 clone:${dest}`);\n onLog(`复用 ${repo.mode}:${repo.alias}`);\n await checkout(dest, branch, preferred, repo.mode === \"checkout\", onLog);\n } else if (repo.mode === \"checkout\") {\n onLog(`克隆独立目录:${repo.alias}`);\n await runGit(main, [\"clone\", \"--local\", \"--\", main, dest], { onLog });\n await checkout(dest, branch, preferred, true, onLog);\n } else {\n if (branch) {\n const occupied = await occupiedPath(main, branch);\n if (occupied) throw new Error(`分支 ${branch} 已在其他 worktree 检出:${occupied}`);\n }\n onLog(`创建 worktree:${repo.alias}`);\n const args = [\"worktree\", \"add\"];\n if (!branch) args.push(\"--detach\", dest, await runGit(source, [\"rev-parse\", \"HEAD\"]));\n else if (await hasRef(main, `refs/heads/${branch}`)) args.push(dest, branch);\n else if (await hasRef(main, `refs/remotes/origin/${branch}`))\n args.push(\"-b\", branch, dest, `origin/${branch}`);\n else args.push(\"-b\", branch, dest, await resolveBase(main, preferred));\n await runGit(main, args, { onLog });\n }\n const folder = path.resolve(dest, repo.subpath || \"\");\n if (!fs.existsSync(folder) || !inside(fs.realpathSync(dest), fs.realpathSync(folder)))\n throw new Error(`SUBPATH 不存在或超出仓库:${folder}`);\n // Editing reads a temporary document outside directory, then rebases these mount paths.\n folders.push({\n name: repo.alias,\n path: path.relative(directory, folder).split(path.sep).join(\"/\"),\n });\n metadata.push({\n alias: repo.alias,\n branch: await runGit(dest, [\"rev-parse\", \"--abbrev-ref\", \"HEAD\"]),\n from_branch: preferred,\n from_mode: repo.mode,\n });\n }\n const document = {\n folders,\n settings: {\n \"window.title\": `${input.slug} — \\${rootName}`,\n \"codeWorkspace.description\": input.description || \"\",\n \"codeWorkspace.repos\": metadata,\n \"files.exclude\": { \"**/target\": true, \"**/node_modules\": true, \"**/.git/objects\": true },\n },\n };\n // Leave an existing document untouched if an external writer changed it during Git operations.\n if (\n stat(output)?.isSymbolicLink() ||\n (original ? !fs.existsSync(output) || !fs.readFileSync(output).equals(original) : stat(output))\n )\n throw new Error(\"Workspace 文件已被外部修改,已停止写入\");\n const temporary = `${output}.${randomUUID()}.tmp`;\n try {\n fs.writeFileSync(temporary, JSON.stringify(document, null, 2) + \"\\n\", {\n flag: \"wx\",\n mode: original ? fs.statSync(output).mode & 0o777 : 0o600,\n });\n fs.renameSync(temporary, output);\n } finally {\n fs.rmSync(temporary, { force: true });\n }\n onLog(`Workspace 已生成:${output}`);\n return { slug: input.slug, workspace: output, path: directory, opened: 0 };\n}\n","import type { AssistantGrant, Ide } from \"@code-workspace/contracts\";\nimport { detectToolCommands, launchIde, openDirectoryPicker } from \"@code-workspace/runtime\";\nimport type { FastifyInstance, FastifyRequest } from \"fastify\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { runGit } from \"../../../packages/runtime/src/git/commands.ts\";\nimport { gitExecution } from \"../../../packages/runtime/src/git/context.ts\";\nimport { checkedPath } from \"./paths.ts\";\nimport { StateStore, scopeKey } from \"./state.ts\";\nimport { localWorkspace } from \"./workspace-files.ts\";\n\nexport const requestGrant = (request: FastifyRequest) =>\n (request as unknown as { assistantGrant: AssistantGrant }).assistantGrant;\nexport function registerLocalRoutes(\n app: FastifyInstance,\n store: StateStore,\n options: { pickDirectory?: typeof openDirectoryPicker } = {},\n) {\n const git = <T>(fn: () => Promise<T>) => gitExecution.run({ executable: store.state.git }, fn);\n app.get(\"/v1/capabilities\", async () => {\n let version = \"\",\n error = \"\";\n try {\n version = await git(() => runGit(os.homedir(), [\"--version\"]));\n } catch (cause) {\n error = (cause as Error).message;\n }\n const match = version.match(/(\\d+)\\.(\\d+)/);\n const gitReady = Boolean(match && (+match[1] > 2 || (+match[1] === 2 && +match[2] >= 38)));\n let rootReady = false;\n try {\n fs.accessSync(store.state.root, fs.constants.W_OK);\n rootReady = fs.statSync(store.state.root).isDirectory();\n } catch {}\n const { privateKey: _privateKey, ...device } = store.state.identity;\n return {\n device,\n gitVersion: version,\n gitReady,\n rootReady,\n ready: gitReady && rootReady,\n error,\n root: store.state.root,\n git: store.state.git,\n tools: store.state.tools,\n };\n });\n app.get(\"/v1/settings\", async () => ({\n parentFolder: store.state.root,\n git: store.state.git,\n tools: store.state.tools,\n }));\n app.patch(\"/v1/settings\", async (request) => {\n const body = request.body as {\n parentFolder?: string;\n git?: string;\n tools?: Record<string, string>;\n };\n let root = store.state.root;\n let gitPath = store.state.git;\n if (body.parentFolder !== undefined) {\n if (!path.isAbsolute(body.parentFolder) || !fs.statSync(body.parentFolder).isDirectory())\n throw new Error(\"请选择本机已存在的绝对目录\");\n fs.accessSync(body.parentFolder, fs.constants.W_OK);\n root = fs.realpathSync(body.parentFolder);\n }\n if (body.git !== undefined) {\n if (body.git !== \"git\" && !path.isAbsolute(body.git))\n throw new Error(\"Git 路径必须是绝对路径\");\n await gitExecution.run({ executable: body.git }, () => runGit(os.homedir(), [\"--version\"]));\n gitPath = body.git;\n }\n store.state.root = root;\n store.state.git = gitPath;\n if (body.tools) store.state.tools = { ...store.state.tools, ...body.tools };\n store.save();\n return {\n parentFolder: store.state.root,\n git: store.state.git,\n tools: store.state.tools,\n };\n });\n app.post(\"/v1/directories/select\", async (request, reply) => {\n const initial =\n (request.body as { initialPath?: string })?.initialPath || store.state.root || os.homedir();\n if (!path.isAbsolute(initial) || !fs.existsSync(initial))\n throw new Error(\"目录不存在或不是绝对路径\");\n const result = await (options.pickDirectory || openDirectoryPicker)(initial);\n return result ? { path: result } : reply.code(204).send();\n });\n app.post(\"/v1/directories/default\", async () => {\n const preferred = path.join(os.homedir(), \"Documents\", \"code-workspace\");\n fs.mkdirSync(preferred, { recursive: true });\n return { path: fs.realpathSync(preferred) };\n });\n // platform travels with the result: the page decides whether these paths belong to this browser.\n app.post(\"/v1/tools/detect\", async () => ({\n tools: detectToolCommands(),\n platform: process.platform,\n }));\n app.get(\"/v1/workspaces\", async (request) => {\n const grant = requestGrant(request);\n return Object.values(store.state.mounts)\n .filter((mount) => mount.workbenchId === grant.workbenchId && mount.userId === grant.userId)\n .map((mount) => ({ ...mount, exists: fs.existsSync(mount.directory) }));\n });\n app.post(\"/v1/repositories\", async (request) => {\n const grant = requestGrant(request),\n body = request.body as { repositoryId: string; path: string };\n if (!body.repositoryId || !path.isAbsolute(body.path))\n throw new Error(\"请填写仓库身份与本机绝对目录\");\n const root = fs.realpathSync(body.path);\n if (fs.realpathSync(await git(() => runGit(root, [\"rev-parse\", \"--show-toplevel\"]))) !== root)\n throw new Error(\"请选择 Git 仓库根目录\");\n store.state.repositories[scopeKey(grant.workbenchId, grant.userId, body.repositoryId)] = root;\n store.save();\n return { path: root };\n });\n app.post(\"/v1/tools/launch\", async (request, reply) => {\n const grant = requestGrant(request),\n body = request.body as { workspaceId: string; ide: Ide; mountIndex?: number; agent?: string };\n if (body.agent && body.agent !== \"none\")\n return reply\n .code(400)\n .send({ code: \"AGENT_COMPANION_REMOVED\", error: \"请选择独立的 Agent 工具\" });\n if (\n ![\n \"vscode\",\n \"cursor\",\n \"cursor-agent\",\n \"idea\",\n \"codex\",\n \"claude\",\n \"opencode\",\n \"codex-cli\",\n \"cursor-cli\",\n \"opencode-cli\",\n \"claudecode-cli\",\n ].includes(body.ide)\n )\n throw new Error(\"工具类型无效\");\n const mount = store.state.mounts[scopeKey(grant.workbenchId, grant.userId, body.workspaceId)];\n if (!mount) throw new Error(\"请先在当前电脑创建本地副本\");\n // A mount may be a plain directory: the .code-workspace document is optional.\n const workspaceDocument = fs.existsSync(mount.workspaceFile);\n let target = checkedPath(\n mount.directory,\n workspaceDocument ? mount.workspaceFile : mount.directory,\n );\n let targetKind: \"workspace\" | \"directory\" = workspaceDocument ? \"workspace\" : \"directory\";\n if (body.mountIndex !== undefined) {\n if (!Number.isInteger(body.mountIndex) || body.mountIndex < 0)\n throw new Error(\"仓库索引无效\");\n const folder = localWorkspace(store, grant, body.workspaceId).folders[body.mountIndex];\n if (!folder?.exists) throw new Error(\"挂载仓库不存在\");\n target = folder.path;\n targetKind = \"directory\";\n }\n const key =\n (\n {\n \"codex-cli\": \"codex\",\n \"cursor-cli\": \"cursorCli\",\n \"claudecode-cli\": \"claude\",\n \"opencode-cli\": \"opencode\",\n \"cursor-agent\": \"cursor\",\n } as Record<string, string>\n )[body.ide] || body.ide;\n await launchIde(target, body.ide, store.state.tools[key] || \"\", targetKind);\n return reply.code(202).send({ opened: true, ide: body.ide });\n });\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\n\nexport function inside(root: string, target: string) {\n const relative = path.relative(root, target);\n return !path.isAbsolute(relative) && relative !== \"..\" && !relative.startsWith(\"..\" + path.sep);\n}\n\nexport function checkedPath(root: string, target: string, mustExist = true): string {\n if (!path.isAbsolute(root) || !path.isAbsolute(target)) throw new Error(\"必须使用本机绝对路径\");\n const base = fs.realpathSync(root);\n const lexical = path.resolve(target);\n const resolved = inside(path.resolve(root), lexical)\n ? path.resolve(base, path.relative(path.resolve(root), lexical))\n : lexical;\n if (!inside(base, resolved)) throw new Error(\"目录超出授权范围\");\n let ancestor = resolved;\n while (!fs.existsSync(ancestor)) {\n if (mustExist) throw new Error(\"本地目录不存在\");\n const parent = path.dirname(ancestor);\n if (parent === ancestor) throw new Error(\"目录无效\");\n ancestor = parent;\n }\n if (!inside(base, fs.realpathSync(ancestor))) throw new Error(\"符号链接超出授权范围\");\n return resolved;\n}\n","import {\n ASSISTANT_VERSION,\n type DeviceIdentity,\n type LocalJob,\n type WorkspaceMount,\n} from \"@code-workspace/contracts\";\nimport { createHash, randomBytes, randomUUID } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { createIdentityKeys } from \"../../../packages/runtime/src/assistant/tokens.ts\";\n\nimport type { MountReceipt } from \"./mount-receipts.ts\";\nimport { queueMountReceipt } from \"./mount-receipts.ts\";\n\nexport interface Binding {\n id: string;\n workbenchId: string;\n origin: string;\n userId: string;\n browserId: string;\n secretHash: string;\n}\nexport interface AssistantState {\n identity: DeviceIdentity & { privateKey: string };\n root: string;\n git: string;\n tools: Record<string, string>;\n workbenches: Record<string, { id: string; publicKey: string }>;\n bindings: Binding[];\n repositories: Record<string, string>;\n mounts: Record<string, WorkspaceMount>;\n jobs: Record<string, LocalJob>;\n mountSequence: number;\n mountReceipts: Record<string, MountReceipt>;\n activities: Record<string, LocalActivity>;\n removals: Record<string, WorkspaceMount>;\n pairing?: { hash: string; expiresAt: number; failures: number };\n autostart: boolean;\n /** npm global prefix recorded at install time; the daemon itself has no npm env. */\n installPrefix?: string;\n controlKey: string;\n}\nexport interface LocalActivity {\n id: string;\n userId: string;\n workbenchId: string;\n state: LocalJob[\"state\"];\n input: Record<string, unknown>;\n logs: string[];\n result?: Record<string, unknown>;\n error?: string;\n}\n\nexport const digest = (value: string) => createHash(\"sha256\").update(value).digest(\"hex\");\nexport const scopeKey = (workbenchId: string, userId: string, id: string) =>\n `${workbenchId}:${userId}:${id}`;\nexport function defaultStateDirectory() {\n return process.env.CWM_ASSISTANT_HOME || path.join(os.homedir(), \".cwm-assistant\");\n}\nexport class StateStore {\n readonly file: string;\n readonly state: AssistantState;\n constructor(\n readonly directory = defaultStateDirectory(),\n recoverJobs = false,\n ) {\n this.file = path.join(directory, \"state.json\");\n fs.mkdirSync(directory, { recursive: true, mode: 0o700 });\n const existed = fs.existsSync(this.file);\n this.state = existed\n ? JSON.parse(fs.readFileSync(this.file, \"utf8\"))\n : {\n identity: {\n ...createIdentityKeys(),\n name: os.hostname(),\n platform: process.platform,\n version: ASSISTANT_VERSION,\n },\n root: \"\",\n git: \"git\",\n tools: {},\n workbenches: {},\n bindings: [],\n repositories: {},\n mounts: {},\n jobs: {},\n autostart: false,\n };\n const needsKey = !this.state.controlKey;\n this.state.activities ||= {};\n this.state.removals ||= {};\n this.state.mountReceipts ||= {};\n this.state.mountSequence ||= 0;\n this.state.controlKey ||= randomBytes(32).toString(\"base64url\");\n if (!existed) {\n try {\n fs.writeFileSync(this.file, JSON.stringify(this.state, null, 2) + \"\\n\", {\n flag: \"wx\",\n mode: 0o600,\n });\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"EEXIST\") throw error;\n this.reload();\n }\n } else if (needsKey) this.save();\n if (recoverJobs) this.recover();\n }\n recover() {\n this.state.identity.version = ASSISTANT_VERSION;\n for (const job of Object.values(this.state.jobs)) {\n if ([\"queued\", \"running\"].includes(job.state)) {\n job.state = \"interrupted\";\n job.pendingSync = true;\n job.error = \"助手已重启,请继续任务;将重新核验实际 Git 状态\";\n }\n }\n for (const job of Object.values(this.state.activities)) {\n if ([\"running\", \"queued\"].includes(job.state)) job.state = \"interrupted\";\n }\n for (const [key, mount] of Object.entries(this.state.removals)) {\n // Only reconcile a completed removal. Never resume destructive work on restart.\n if (!fs.existsSync(mount.directory)) {\n delete this.state.mounts[key];\n delete this.state.removals[key];\n queueMountReceipt(this, mount, \"removed\");\n }\n }\n this.save();\n }\n reload() {\n Object.assign(this.state, JSON.parse(fs.readFileSync(this.file, \"utf8\")));\n }\n save() {\n const temporary = this.file + \".\" + randomUUID() + \".tmp\";\n try {\n fs.writeFileSync(temporary, JSON.stringify(this.state, null, 2) + \"\\n\", {\n flag: \"wx\",\n mode: 0o600,\n });\n fs.renameSync(temporary, this.file);\n } finally {\n fs.rmSync(temporary, { force: true });\n }\n }\n pairingCode() {\n const code = randomBytes(5).toString(\"hex\").toUpperCase();\n this.state.pairing = { hash: digest(code), expiresAt: Date.now() + 300_000, failures: 0 };\n this.save();\n return code;\n }\n}\n","import { randomUUID } from \"node:crypto\";\nimport { signMessage } from \"../../../packages/runtime/src/assistant/tokens.ts\";\nimport type { StateStore } from \"./state.ts\";\n\nexport interface MountReceipt {\n id: string;\n workbenchId: string;\n userId: string;\n workspaceId: string;\n deviceId: string;\n revision: number;\n sequence: number;\n state: \"ready\" | \"removed\";\n}\n\n/** Persist with the local mount change, before attempting a network request. */\nexport function queueMountReceipt(\n store: StateStore,\n mount: Pick<MountReceipt, \"workbenchId\" | \"userId\" | \"workspaceId\" | \"revision\">,\n state: MountReceipt[\"state\"],\n) {\n const receipt: MountReceipt = {\n ...mount,\n id: randomUUID(),\n deviceId: store.state.identity.id,\n sequence: ++store.state.mountSequence,\n state,\n };\n store.state.mountReceipts[receipt.id] = receipt;\n store.save();\n}\n\nexport async function syncMountReceipts(store: StateStore) {\n for (const receipt of Object.values(store.state.mountReceipts)) {\n const origin = Object.entries(store.state.workbenches).find(\n ([, workbench]) => workbench.id === receipt.workbenchId,\n )?.[0];\n if (!origin) continue;\n try {\n const response = await fetch(origin + \"/api/assistant/mount-receipts\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ receipt: signMessage(receipt, store.state.identity.privateKey) }),\n signal: AbortSignal.timeout(5000),\n });\n if (response.ok) {\n delete store.state.mountReceipts[receipt.id];\n store.save();\n }\n } catch {\n // Retry the durable receipt without repeating filesystem operations.\n }\n }\n}\n","import type { AssistantGrant, WorkspaceMount } from \"@code-workspace/contracts\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { checkedPath } from \"./paths.ts\";\nimport { StateStore, scopeKey } from \"./state.ts\";\n\nexport interface LocalWorkspaceFolder {\n name: string;\n path: string;\n exists: boolean;\n}\n\n/** Resolve one folder without requiring it to exist yet; containment checks still apply. */\nfunction resolveFolder(target: string, authorizedRoots: string[]): string {\n for (const root of authorizedRoots) {\n try {\n return checkedPath(root, target, false);\n } catch {\n /* Try another explicitly authorized repository. */\n }\n }\n throw new Error(\"挂载路径超出已授权目录\");\n}\n\nexport function localWorkspace(\n store: StateStore,\n grant: Pick<AssistantGrant, \"userId\" | \"workbenchId\">,\n id: string,\n): {\n mount: WorkspaceMount;\n file: string;\n document: {\n folders?: Array<{ path: string; name?: string }>;\n settings?: Record<string, unknown>;\n } | null;\n folders: LocalWorkspaceFolder[];\n} {\n const mount = store.state.mounts[scopeKey(grant.workbenchId, grant.userId, id)];\n if (!mount) throw Object.assign(new Error(\"请先在当前电脑创建本地副本\"), { statusCode: 404 });\n if (!fs.existsSync(mount.directory))\n throw Object.assign(new Error(\"本地目录不存在\"), { statusCode: 404 });\n const file = mount.workspaceFile;\n const document = (() => {\n if (!fs.existsSync(file)) return null;\n const parsed = JSON.parse(fs.readFileSync(file, \"utf8\"));\n if (!Array.isArray(parsed.folders)) throw new Error(\"Workspace 文件格式无效\");\n return parsed;\n })();\n const registered = Object.entries(store.state.repositories)\n .filter(([key]) => key.startsWith(scopeKey(grant.workbenchId, grant.userId, \"\")))\n .map(([, value]) => value);\n const authorizedRoots = [mount.directory, ...registered];\n const entries: Array<{ name: string; target: string }> = document\n ? document.folders!.map((folder: { path: string; name?: string }) => ({\n name: folder.name || \"\",\n target: path.resolve(mount.directory, folder.path),\n }))\n : (mount.aliases ?? []).map((alias) => ({\n name: alias,\n target: path.resolve(mount.directory, alias),\n }));\n const folders = entries.map((entry) => {\n const resolved = resolveFolder(entry.target, authorizedRoots);\n return { name: entry.name, path: resolved, exists: fs.existsSync(resolved) };\n });\n return { mount, file, document, folders };\n}\n","import type { FastifyInstance } from \"fastify\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { LocalJobs } from \"./jobs.ts\";\nimport { queueMountReceipt, syncMountReceipts } from \"./mount-receipts.ts\";\nimport { requestGrant } from \"./routes.ts\";\nimport { StateStore, scopeKey } from \"./state.ts\";\n\ninterface AdoptItem {\n workspaceId: string;\n slug: string;\n definitionRevision: number;\n aliases?: string[];\n}\ntype AdoptResult = {\n workspaceId: string;\n status: \"ready\" | \"adopted\" | \"not-found\" | \"pending\";\n directory?: string;\n foldersMissing?: number;\n};\n\n/** Candidate directories are limited to the managed names under the configured root. */\nfunction adoptDirectories(root: string): Map<string, string> {\n const found = new Map<string, string>();\n let entries;\n try {\n entries = fs.readdirSync(root, { withFileTypes: true });\n } catch {\n return found;\n }\n const realRoot = fs.realpathSync(root);\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n const prefix = entry.name.startsWith(\"cw-\")\n ? \"cw-\"\n : entry.name.startsWith(\"requirements-\")\n ? \"requirements-\"\n : \"\";\n const slug = prefix ? entry.name.slice(prefix.length) : \"\";\n if (!slug || found.has(slug)) continue;\n const directory = path.join(root, entry.name);\n try {\n if (fs.lstatSync(directory).isSymbolicLink()) continue;\n if (fs.realpathSync(path.dirname(fs.realpathSync(directory))) !== realRoot) continue;\n } catch {\n continue;\n }\n found.set(slug, directory);\n }\n return found;\n}\n\nexport function registerAdoptRoutes(app: FastifyInstance, store: StateStore, jobs: LocalJobs) {\n app.post(\"/v1/workspaces/adopt\", async (request) => {\n const grant = requestGrant(request);\n const items = ((request.body as { items?: AdoptItem[] })?.items ?? []).slice(0, 50);\n return jobs.exclusive(async () => {\n const root = store.state.root;\n const directories = adoptDirectories(root);\n const results: AdoptResult[] = [];\n let changed = false;\n for (const item of items) {\n if (\n !item?.workspaceId ||\n !item.slug ||\n !/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(item.slug) ||\n !Number.isSafeInteger(item.definitionRevision) ||\n item.definitionRevision < 1\n ) {\n results.push({ workspaceId: String(item?.workspaceId || \"\"), status: \"not-found\" });\n continue;\n }\n const key = scopeKey(grant.workbenchId, grant.userId, item.workspaceId);\n const existing = store.state.mounts[key];\n if (existing && fs.existsSync(existing.directory)) {\n results.push({\n workspaceId: item.workspaceId,\n status: \"ready\",\n directory: existing.directory,\n });\n continue;\n }\n if (\n Object.values(store.state.jobs).some(\n (job) =>\n job.input.workspaceId === item.workspaceId &&\n job.userId === grant.userId &&\n job.workbenchId === grant.workbenchId &&\n [\"queued\", \"running\"].includes(job.state),\n )\n ) {\n results.push({ workspaceId: item.workspaceId, status: \"pending\" });\n continue;\n }\n const directory = directories.get(item.slug);\n if (!directory) {\n results.push({ workspaceId: item.workspaceId, status: \"not-found\" });\n continue;\n }\n const aliases = (item.aliases ?? []).filter((alias) => typeof alias === \"string\");\n const mount = {\n workspaceId: item.workspaceId,\n workbenchId: grant.workbenchId,\n userId: grant.userId,\n revision: item.definitionRevision,\n managedRoot: root,\n workspaceFile: path.join(directory, path.basename(directory) + \".code-workspace\"),\n directory,\n aliases,\n verifiedAt: new Date().toISOString(),\n };\n store.state.mounts[key] = mount;\n queueMountReceipt(store, mount, \"ready\");\n changed = true;\n results.push({\n workspaceId: item.workspaceId,\n status: \"adopted\",\n directory,\n foldersMissing: aliases.filter((alias) => !fs.existsSync(path.join(directory, alias)))\n .length,\n });\n }\n if (changed) store.save();\n if (changed) await syncMountReceipts(store);\n return { results };\n });\n });\n}\n","import type { LocalJob, LocalOperationIntent } from \"@code-workspace/contracts\";\nimport { createWorkspace } from \"@code-workspace/runtime\";\nimport { randomUUID } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { signMessage } from \"../../../packages/runtime/src/assistant/tokens.ts\";\nimport { runGit } from \"../../../packages/runtime/src/git/commands.ts\";\nimport { gitExecution } from \"../../../packages/runtime/src/git/context.ts\";\nimport type { WorkspaceInput } from \"../../../packages/runtime/src/workspaces/create.ts\";\nimport { editLocalWorkspace } from \"../../../packages/runtime/src/workspaces/edit.ts\";\nimport { checkedPath } from \"./paths.ts\";\nimport { StateStore, scopeKey, type LocalActivity } from \"./state.ts\";\n\nimport { queueMountReceipt, syncMountReceipts } from \"./mount-receipts.ts\";\nimport { localWorkspace } from \"./workspace-files.ts\";\n\nexport class LocalJobs {\n private tail = Promise.resolve();\n private controllers = new Map<string, AbortController>();\n constructor(readonly store: StateStore) {}\n\n submit(intent: LocalOperationIntent) {\n const existing = this.store.state.jobs[intent.id];\n if (\n existing &&\n (existing.userId !== intent.userId ||\n existing.workbenchId !== intent.workbenchId ||\n JSON.stringify(existing.intent.definition) !== JSON.stringify(intent.definition))\n )\n throw new Error(\"同一任务不能更改定义\");\n if (existing && [\"queued\", \"running\", \"succeeded\"].includes(existing.state)) return existing;\n const job: LocalJob = {\n id: intent.id,\n workbenchId: intent.workbenchId,\n userId: intent.userId,\n state: \"queued\",\n intent,\n input: { slug: intent.definition.slug, workspaceId: intent.definition.id },\n logs: existing?.logs || [],\n logOffset: existing?.logOffset || 0,\n pendingSync: false,\n updatedAt: new Date().toISOString(),\n };\n this.store.state.jobs[job.id] = job;\n this.store.save();\n const controller = new AbortController();\n this.controllers.set(job.id, controller);\n this.tail = this.tail.then(() => this.execute(job, controller)).catch(() => {});\n return job;\n }\n\n cancel(id: string) {\n this.controllers.get(id)?.abort();\n }\n busy() {\n return this.controllers.size > 0;\n }\n async idle() {\n await this.tail;\n }\n async exclusive<T>(fn: () => Promise<T>): Promise<T> {\n const key = randomUUID();\n this.controllers.set(key, new AbortController());\n const result = this.tail.then(fn);\n this.tail = result.then(\n () => {},\n () => {},\n );\n try {\n return await result;\n } finally {\n this.controllers.delete(key);\n }\n }\n activity(\n job: LocalActivity,\n fn: (log: (line: string) => void) => Promise<Record<string, unknown>>,\n ) {\n const previous = this.store.state.activities[job.id];\n if (previous) {\n if (\n previous.userId !== job.userId ||\n previous.workbenchId !== job.workbenchId ||\n JSON.stringify(previous.input) !== JSON.stringify(job.input)\n )\n throw new Error(\"任务身份冲突\");\n return previous;\n }\n this.store.state.activities[job.id] = job;\n this.store.save();\n const controller = new AbortController();\n this.controllers.set(job.id, controller);\n const log = (line: string) => {\n job.logs.push(line.replace(/(https?:\\/\\/)[^/@\\s]+@/g, \"$1\"));\n this.store.save();\n };\n this.tail = this.tail\n .then(async () => {\n try {\n controller.signal.throwIfAborted();\n job.state = \"running\";\n this.store.save();\n job.result = await gitExecution.run(\n { executable: this.store.state.git, signal: controller.signal },\n () => fn(log),\n );\n job.state = \"succeeded\";\n } catch (error) {\n job.error = (error as Error).message;\n job.state = controller.signal.aborted ? \"cancelled\" : \"failed\";\n } finally {\n this.controllers.delete(job.id);\n this.store.save();\n }\n })\n .catch(() => {});\n return job;\n }\n\n private async execute(job: LocalJob, controller: AbortController) {\n const { state } = this.store;\n const log = (line: string) => {\n job.logs.push(line.replace(/(https?:\\/\\/)[^/@\\s]+@/g, \"$1\"));\n if (job.logs.length > 500) {\n job.logOffset = (job.logOffset || 0) + job.logs.length - 500;\n job.logs = job.logs.slice(-500);\n }\n job.updatedAt = new Date().toISOString();\n this.store.save();\n };\n try {\n controller.signal.throwIfAborted();\n job.state = \"running\";\n this.store.save();\n await gitExecution.run({ executable: state.git, signal: controller.signal }, async () => {\n const root = fs.realpathSync(state.root);\n const definition = job.intent.definition;\n const mountKey = scopeKey(job.workbenchId, job.userId, definition.id);\n const existingMount = state.mounts[mountKey];\n if (existingMount && definition.revision < existingMount.revision)\n throw new Error(\"任务定义已过期,请使用当前共享定义重新同步\");\n const namespace = path.join(root, \".cwm\", job.workbenchId, job.userId);\n checkedPath(root, namespace, false);\n fs.mkdirSync(namespace, { recursive: true });\n const prepared: WorkspaceInput[\"repositories\"] = [];\n for (const repo of definition.repositories) {\n controller.signal.throwIfAborted();\n let source = state.repositories[scopeKey(job.workbenchId, job.userId, repo.repositoryId)];\n if (!source) {\n if (!/^(https:\\/\\/|ssh:\\/\\/|[\\w.-]+@[\\w.-]+:)/.test(repo.remoteUrl))\n throw new Error(`${repo.alias} 缺少 HTTPS 或 SSH 远程地址,请先登记本机仓库`);\n source = path.join(namespace, repo.repositoryId);\n checkedPath(root, source, false);\n if (!fs.existsSync(source)) {\n const temporary = source + \".clone-\" + randomUUID();\n log(\"克隆仓库:\" + repo.alias);\n // Partial clones remain task-owned; never remove an existing user directory.\n try {\n await runGit(namespace, [\"clone\", \"--\", repo.remoteUrl, temporary], {\n onLog: log,\n timeoutMs: 600_000,\n });\n } catch (error) {\n // A failed clone still leaves a half-checked-out tree behind. It is ours to remove,\n // and leaving it would strand the retry with a stale directory and wasted space.\n fs.rmSync(temporary, { recursive: true, force: true });\n throw error;\n }\n fs.renameSync(temporary, source);\n }\n if ((await runGit(source, [\"config\", \"--get\", \"remote.origin.url\"])) !== repo.remoteUrl)\n throw new Error(\"仓库缓存与远程地址不一致\");\n state.repositories[scopeKey(job.workbenchId, job.userId, repo.repositoryId)] = source;\n this.store.save();\n }\n if (!fs.existsSync(source)) throw new Error(\"已登记的本机仓库不存在\");\n if (repo.remoteUrl) {\n const configured = (\n await runGit(source, [\"config\", \"--get\", \"remote.origin.url\"])\n ).replace(/(https?:\\/\\/)[^/@\\s]+@/g, \"$1\");\n if (configured !== repo.remoteUrl)\n throw new Error(repo.alias + \" 的本机仓库与共享远程地址不一致,请重新登记本机仓库\");\n }\n // Source registration is an explicit separate authorization, not a center-supplied path.\n let fromRef = repo.fromRef;\n if (fromRef) {\n const candidates = [fromRef];\n if (!fromRef.startsWith(\"origin/\") && !fromRef.startsWith(\"refs/\"))\n candidates.push(\"origin/\" + fromRef);\n let resolved = \"\";\n for (const candidate of candidates) {\n try {\n await runGit(source, [\n \"rev-parse\",\n \"--verify\",\n \"--end-of-options\",\n candidate + \"^{commit}\",\n ]);\n resolved = candidate;\n break;\n } catch {\n /* Try the remote-tracking form. */\n }\n }\n if (!resolved) throw new Error(repo.alias + \" 的 From Branch 不存在:\" + fromRef);\n fromRef = resolved;\n }\n prepared.push({\n alias: repo.alias,\n sourcePath: source,\n branch: repo.branch,\n fromBranch: fromRef,\n mode: repo.mode,\n subpath: repo.subpath,\n });\n }\n const destination = existingMount?.directory || path.join(root, \"cw-\" + definition.slug);\n checkedPath(\n existingMount ? path.dirname(existingMount.directory) : root,\n destination,\n false,\n );\n const key = scopeKey(job.workbenchId, job.userId, definition.id);\n const marker = path.join(destination, \".cwm-owner.json\");\n if (fs.existsSync(destination)) {\n if (\n (!existingMount && !fs.existsSync(marker)) ||\n (fs.existsSync(marker) && JSON.parse(fs.readFileSync(marker, \"utf8\")).key !== key)\n )\n throw new Error(\"目录已存在且不属于本任务,请先导入或更换名称\");\n } else {\n fs.mkdirSync(destination);\n fs.writeFileSync(marker, JSON.stringify({ key }), { flag: \"wx\", mode: 0o600 });\n }\n const result = existingMount\n ? await (async () => {\n localWorkspace(\n this.store,\n { workbenchId: job.workbenchId, userId: job.userId },\n definition.id,\n );\n checkedPath(existingMount.directory, existingMount.workspaceFile);\n await editLocalWorkspace({\n id: definition.id,\n parent: path.dirname(existingMount.directory),\n file: existingMount.workspaceFile,\n definition,\n sources: Object.fromEntries(\n definition.repositories.map((repo, index) => [\n repo.repositoryId,\n prepared[index].sourcePath,\n ]),\n ),\n log,\n });\n return { workspace: existingMount.workspaceFile, path: existingMount.directory };\n })()\n : await createWorkspace(\n {\n parent: root,\n slug: definition.slug,\n description: definition.description,\n repositories: prepared,\n },\n log,\n );\n for (const repo of prepared) {\n const document = JSON.parse(fs.readFileSync(result.workspace, \"utf8\"));\n const folder = document.folders.find(\n (folder: { name: string }) => folder.name === repo.alias,\n );\n const directory = existingMount\n ? localWorkspace(\n this.store,\n { workbenchId: job.workbenchId, userId: job.userId },\n definition.id,\n ).folders.find((item) => item.name === repo.alias)!.path\n : checkedPath(destination, path.resolve(destination, folder.path));\n const branch = await runGit(directory, [\"branch\", \"--show-current\"]);\n if (branch !== repo.branch) throw new Error(\"本机分支核验失败\");\n await runGit(directory, [\"rev-parse\", \"--verify\", \"HEAD\"]);\n }\n state.mounts[key] = {\n workspaceId: definition.id,\n userId: job.userId,\n workbenchId: job.workbenchId,\n revision: definition.revision,\n managedRoot: existingMount ? existingMount.managedRoot : root,\n workspaceFile: result.workspace,\n directory: result.path,\n aliases: definition.repositories.map((repo) => repo.alias),\n verifiedAt: new Date().toISOString(),\n };\n queueMountReceipt(this.store, state.mounts[key], \"ready\");\n job.result = { workspaceId: definition.id, deviceId: state.identity.id };\n job.state = \"succeeded\";\n log(\"本机 Workspace 已核验完成\");\n });\n } catch (error) {\n job.state = controller.signal.aborted ? \"cancelled\" : \"failed\";\n job.error = (error as Error).message;\n log(job.error);\n } finally {\n this.controllers.delete(job.id);\n job.pendingSync = true;\n this.store.save();\n await this.sync(job);\n await syncMountReceipts(this.store);\n }\n }\n\n async sync(job: LocalJob) {\n if (!job.pendingSync) return;\n const origin = Object.entries(this.store.state.workbenches).find(\n ([, item]) => item.id === job.workbenchId,\n )?.[0];\n if (!origin) return;\n try {\n const receipt = signMessage(\n {\n operationId: job.id,\n deviceId: this.store.state.identity.id,\n state: job.state,\n revision: job.intent.definition.revision,\n },\n this.store.state.identity.privateKey,\n );\n const response = await fetch(\n origin + \"/api/local-operations/\" + encodeURIComponent(job.id) + \"/receipts\",\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ receipt }),\n signal: AbortSignal.timeout(5000),\n },\n );\n if (response.ok) {\n job.pendingSync = false;\n this.store.save();\n }\n } catch {\n /* The durable receipt is retried without replaying Git. */\n }\n }\n}\n","import type { RepositoryMode, WorkspaceDefinition } from \"@code-workspace/contracts\";\nimport { randomUUID } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { runGit as git } from \"../git/commands.ts\";\nimport { createWorkspace } from \"./create.ts\";\ntype Selection = {\n repositoryId: string;\n branch: string;\n branchAction?: \"existing\" | \"create\";\n mode?: RepositoryMode;\n fromRef?: string;\n};\ntype Mount = {\n repository_id: string;\n mount_alias: string;\n folder_path: string;\n branch: string;\n mode: string;\n};\ntype Repository = {\n id: string;\n alias: string;\n canonical_path: string;\n subpath: string;\n remote_url: string | null;\n};\n\nasync function resolveFromRef(source: string, alias: string, value: string): Promise<string> {\n const ref = value.trim();\n const candidates = [ref];\n if (!ref.startsWith(\"origin/\") && !ref.startsWith(\"refs/\")) candidates.push(\"origin/\" + ref);\n for (const candidate of candidates) {\n try {\n await git(source, [\"rev-parse\", \"--verify\", \"--end-of-options\", candidate + \"^{commit}\"]);\n return candidate;\n } catch {\n /* Try the remote-tracking form of a bare branch name. */\n }\n }\n throw new Error(\n alias + \" 的 From Branch「\" + ref + \"」不存在,请填写有效的本地分支、origin/远端分支或提交\",\n );\n}\n\nexport async function editLocalWorkspace(options: {\n id: string;\n parent: string;\n file: string;\n definition: WorkspaceDefinition;\n sources: Record<string, string>;\n log: (line: string) => void;\n}) {\n const { id, parent, file, definition: body, sources, log } = options;\n const baseline = fs.readFileSync(file, \"utf8\");\n const document = JSON.parse(baseline) as {\n folders: Array<{ name?: string; path?: string }>;\n settings?: Record<string, unknown>;\n };\n const directory = path.dirname(file);\n if (!Array.isArray(document.folders)) throw new Error(\"Workspace 文件格式无效\");\n const saved = (document.settings?.[\"codeWorkspace.repos\"] || []) as Array<Record<string, string>>;\n const mounts: Mount[] = document.folders.map((folder) => ({\n repository_id:\n body.repositories.find((repo) => repo.alias === folder.name)?.repositoryId ||\n folder.name ||\n \"\",\n mount_alias: folder.name || \"\",\n folder_path: path.resolve(directory, folder.path || \"\"),\n branch: saved.find((repo) => repo.alias === folder.name)?.branch || \"\",\n mode: saved.find((repo) => repo.alias === folder.name)?.from_mode || \"worktree\",\n }));\n const selected: Array<Selection & { repo: Repository; mount?: Mount }> = body.repositories.map(\n (repo) => ({\n repositoryId: repo.repositoryId,\n branch: repo.branch,\n branchAction: repo.branchAction,\n mode: repo.mode,\n fromRef: repo.fromRef,\n repo: {\n id: repo.repositoryId,\n alias: repo.alias,\n canonical_path: sources[repo.repositoryId],\n subpath: repo.subpath,\n remote_url: repo.remoteUrl,\n },\n mount: mounts.find((mount) => mount.mount_alias === repo.alias),\n }),\n );\n const changingMode = (item: Selection & { mount?: Mount }) =>\n Boolean(item.mount && item.mode && item.mode !== item.mount.mode);\n let expectedFile = baseline;\n const ensureUnchanged = () => {\n if (fs.readFileSync(file, \"utf8\") !== expectedFile)\n throw new Error(\"Workspace 文件已被外部修改,已停止写入,请刷新后重试\");\n };\n const write = () => {\n ensureUnchanged();\n const text = JSON.stringify(document, null, 2) + \"\\n\";\n const temp = file + \".\" + randomUUID() + \".tmp\";\n try {\n fs.writeFileSync(temp, text, { flag: \"wx\", mode: fs.statSync(file).mode & 0o777 });\n fs.renameSync(temp, file);\n } finally {\n fs.rmSync(temp, { force: true });\n }\n expectedFile = text;\n };\n const generated = path.join(directory, \".cwm-edit-\" + randomUUID() + \".json\");\n try {\n ensureUnchanged();\n // Validate every selection before changing any branch or creating resources.\n for (const item of selected) {\n let source = item.mount?.folder_path || \"\";\n if (item.mount) {\n if (!source || !fs.existsSync(source))\n throw new Error(item.repo.alias + \" 的挂载目录不存在\");\n } else {\n source = item.repo.canonical_path;\n item.repo.canonical_path = source;\n }\n await git(source, [\"check-ref-format\", \"--branch\", item.branch]);\n if (item.branchAction) {\n if ((await git(source, [\"remote\"])).split(\"\\n\").includes(\"origin\")) {\n log(\"刷新远端分支:\" + item.repo.alias);\n await git(source, [\"fetch\", \"origin\"]);\n }\n let exists = false;\n for (const ref of [\"refs/heads/\" + item.branch, \"refs/remotes/origin/\" + item.branch]) {\n try {\n await git(source, [\"show-ref\", \"--verify\", ref]);\n exists = true;\n } catch {}\n }\n if (\n item.branchAction === \"create\" &&\n exists &&\n (!item.mount || (await git(source, [\"branch\", \"--show-current\"])) !== item.branch)\n )\n throw new Error(item.repo.alias + \" 的目标分支已存在,请选择使用已有分支\");\n if (item.branchAction === \"existing\" && !exists)\n throw new Error(item.repo.alias + \" 不存在目标分支,请选择创建新分支并指定 From Branch\");\n }\n if (item.fromRef) item.fromRef = await resolveFromRef(source, item.repo.alias, item.fromRef);\n if (item.mount) {\n const actual = await git(source, [\"branch\", \"--show-current\"]);\n if (\n (actual !== item.branch || changingMode(item)) &&\n (await git(source, [\"status\", \"--porcelain\"]))\n )\n throw new Error(item.repo.alias + \" 有未提交改动,请提交或暂存后再切换分支\");\n } else {\n if (fs.existsSync(path.join(directory, item.repo.alias)))\n throw new Error(\n item.repo.alias + \" 的目标目录已存在,不会覆盖。请先在 IDE 中重新挂载该目录\",\n );\n if (\n item.repo.subpath &&\n (path.isAbsolute(item.repo.subpath) ||\n path.win32.isAbsolute(item.repo.subpath) ||\n item.repo.subpath.split(/[\\\\/]/).includes(\"..\") ||\n item.repo.subpath.includes(\"\\0\"))\n )\n throw new Error(\"仓库 Subpath 无效\");\n }\n }\n const backup = path.join(\n parent,\n \".workbench\",\n \"backups\",\n \"workspace-\" + id + \"-\" + Date.now() + \".json\",\n );\n fs.mkdirSync(path.dirname(backup), { recursive: true });\n fs.writeFileSync(backup, baseline, { flag: \"wx\", mode: 0o600 });\n log(\"配置备份:\" + backup);\n const metadata = Array.isArray(document.settings?.[\"codeWorkspace.repos\"])\n ? (document.settings![\"codeWorkspace.repos\"] as Array<Record<string, unknown>>)\n : [];\n document.settings = { ...document.settings, \"codeWorkspace.repos\": metadata };\n for (const item of selected.filter((item) => item.mount && !changingMode(item))) {\n const mount = item.mount!;\n const actual = await git(mount.folder_path, [\"branch\", \"--show-current\"]);\n if (actual !== item.branch) {\n ensureUnchanged();\n if (await git(mount.folder_path, [\"status\", \"--porcelain\"]))\n throw new Error(item.repo.alias + \" 出现未提交改动,已停止切换\");\n log(\"切换分支:\" + mount.mount_alias + \" → \" + item.branch);\n if (item.branchAction === \"create\") {\n await git(mount.folder_path, [\"checkout\", \"-b\", item.branch, item.fromRef!]);\n } else {\n try {\n await git(mount.folder_path, [\"show-ref\", \"--verify\", \"refs/heads/\" + item.branch]);\n } catch {\n await git(mount.folder_path, [\"fetch\", \"origin\"]);\n await git(mount.folder_path, [\n \"show-ref\",\n \"--verify\",\n \"refs/remotes/origin/\" + item.branch,\n ]);\n }\n await git(mount.folder_path, [\"checkout\", item.branch]);\n }\n }\n const entry = metadata.find((m) => m.alias === mount.mount_alias);\n if (entry) {\n entry.branch = item.branch;\n if (item.branchAction === \"create\") entry.from_branch = item.fromRef;\n } else\n metadata.push({\n alias: mount.mount_alias,\n branch: item.branch,\n from_mode: mount.mode,\n });\n write();\n }\n const additions = selected.filter((item) => !item.mount);\n let added:\n | { folders: Array<{ name: string; path: string }>; settings: Record<string, unknown> }\n | undefined;\n if (additions.length) {\n await createWorkspace(\n {\n parent,\n slug: \"edit-\" + id,\n workspaceDirectory: directory,\n outputWorkspace: generated,\n repositories: additions.map((item) => ({\n alias: item.repo.alias,\n sourcePath: item.repo.canonical_path,\n branch: item.branch,\n fromBranch: item.fromRef,\n mode: item.mode || \"checkout\",\n subpath: item.repo.subpath,\n })),\n },\n log,\n );\n added = JSON.parse(fs.readFileSync(generated, \"utf8\"));\n }\n const conversions = selected.filter(changingMode);\n const convertedFolders: Array<{ name: string; path: string }> = [];\n const convertedMetadata: Array<Record<string, unknown>> = [];\n for (const item of conversions) {\n ensureUnchanged();\n const mount = item.mount!;\n if (await git(mount.folder_path, [\"status\", \"--porcelain\"]))\n throw new Error(item.repo.alias + \" 有未提交改动,已停止转换挂载方式\");\n const oldRoot = fs.realpathSync(\n await git(mount.folder_path, [\"rev-parse\", \"--show-toplevel\"]),\n );\n const subpath = path.relative(oldRoot, fs.realpathSync(mount.folder_path));\n if (subpath.split(path.sep).includes(\"..\") || path.isAbsolute(subpath))\n throw new Error(\"挂载子目录不适合自动转换\");\n const conversionDirectory = path.join(directory, \".workbench-mounts\", randomUUID());\n log(\"转换挂载方式:\" + mount.mount_alias + \" → \" + item.mode + \";原目录保留:\" + oldRoot);\n await createWorkspace(\n {\n parent,\n slug: \"convert-\" + id,\n workspaceDirectory: conversionDirectory,\n outputWorkspace: generated,\n repositories: [\n {\n alias: mount.mount_alias,\n sourcePath: oldRoot,\n branch: item.branch,\n fromBranch: item.fromRef,\n mode: item.mode!,\n subpath,\n },\n ],\n },\n log,\n );\n const converted = JSON.parse(fs.readFileSync(generated, \"utf8\")) as {\n folders: Array<{ name: string; path: string }>;\n settings: Record<string, unknown>;\n };\n convertedFolders.push(\n ...converted.folders.map((folder) => ({\n ...folder,\n path: path.relative(directory, path.resolve(conversionDirectory, folder.path)),\n })),\n );\n convertedMetadata.push(\n ...(converted.settings[\"codeWorkspace.repos\"] as Array<Record<string, unknown>>),\n );\n }\n const removed = mounts.filter(\n (mount) => !selected.some((item) => item.repositoryId === mount.repository_id),\n );\n const replaced = [...removed, ...conversions.map((item) => item.mount!)];\n document.folders = document.folders.filter(\n (folder) =>\n !replaced.some(\n (mount) =>\n (folder.path &&\n path.resolve(directory, folder.path) === path.resolve(mount.folder_path)) ||\n folder.name === mount.mount_alias,\n ),\n );\n document.folders.push(...(added?.folders || []), ...convertedFolders);\n document.settings[\"codeWorkspace.repos\"] = [\n ...metadata.filter((entry) => !replaced.some((mount) => mount.mount_alias === entry.alias)),\n ...((added?.settings[\"codeWorkspace.repos\"] as Array<Record<string, unknown>>) || []),\n ...convertedMetadata,\n ];\n if (body.slug !== undefined) document.settings[\"codeWorkspace.name\"] = body.slug.trim();\n if (body.description !== undefined)\n document.settings[\"codeWorkspace.description\"] = body.description;\n document.folders.sort(\n (a, b) =>\n selected.findIndex((item) => item.repo.alias === a.name) -\n selected.findIndex((item) => item.repo.alias === b.name),\n );\n write();\n for (const mount of removed)\n log(\"已移除挂载 \" + mount.mount_alias + \";本地目录保留:\" + mount.folder_path);\n log(\"Workspace 已更新,需求与版本将使用新的仓库关联\");\n return { workspaceId: id };\n } catch (error) {\n log(\"操作未全部完成,已产生的本地资源和已切换的分支会保留;请根据日志处理后重试\");\n throw error;\n } finally {\n fs.rmSync(generated, { force: true });\n }\n}\n","import { ASSISTANT_PROTOCOL } from \"@code-workspace/contracts\";\n\nexport interface WorkbenchIdentity {\n id: string;\n publicKey: string;\n}\n\n/** A bare http(s) origin, which is the only shape `Origin` may take for a trusted workbench. */\nexport function trustedOrigin(value: string): string | null {\n if (!value) return null;\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n return null;\n }\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") return null;\n if (url.username || url.password || url.pathname !== \"/\" || url.search || url.hash) return null;\n return url.origin;\n}\n\n/**\n * Read a workbench's identity before trusting its origin.\n *\n * An origin header alone proves nothing — any page can send one. Fetching the workbench's own key\n * means a stored origin can only verify grants signed by a center that actually answered at that\n * address, which is the real gate: a page that is not a CWM center cannot produce one.\n */\nexport async function fetchWorkbenchIdentity(origin: string): Promise<WorkbenchIdentity> {\n const response = await fetch(origin + \"/api/assistant/identity\", {\n signal: AbortSignal.timeout(2000),\n redirect: \"error\",\n });\n if (!response.ok) throw new Error(\"工作台身份接口不可用\");\n const identity = (await response.json()) as {\n id?: string;\n publicKey?: string;\n protocol?: number;\n };\n if (!identity.id || !identity.publicKey?.includes(\"PUBLIC KEY\"))\n throw new Error(\"工作台身份无效\");\n if (identity.protocol !== undefined && identity.protocol !== ASSISTANT_PROTOCOL)\n throw new Error(\"工作台协议版本不兼容\");\n return { id: identity.id, publicKey: identity.publicKey };\n}\n","import type { FastifyInstance } from \"fastify\";\nimport os from \"node:os\";\nimport {\n agentSessionTarget,\n listAgentSessions,\n openAgentSession,\n} from \"../../../packages/runtime/src/agent-sessions/service.ts\";\nimport { runGit } from \"../../../packages/runtime/src/git/commands.ts\";\nimport { readWorkspaceCommits } from \"../../../packages/runtime/src/git/commits.ts\";\nimport { gitExecution } from \"../../../packages/runtime/src/git/context.ts\";\nimport { requestGrant } from \"./routes.ts\";\nimport { StateStore, scopeKey } from \"./state.ts\";\nimport { localWorkspace } from \"./workspace-files.ts\";\n\nexport function registerQueryRoutes(app: FastifyInstance, store: StateStore) {\n const git = <T>(fn: () => Promise<T>) => gitExecution.run({ executable: store.state.git }, fn);\n app.get(\"/v1/repositories\", async (request) => {\n const grant = requestGrant(request);\n const prefix = scopeKey(grant.workbenchId, grant.userId, \"\");\n return Object.entries(store.state.repositories)\n .filter(([key]) => key.startsWith(prefix))\n .map(([key, path]) => ({ id: key.slice(prefix.length), path }));\n });\n app.post(\"/v1/repositories/inspect\", async (request) => {\n const body = request.body as { path: string };\n // This is an explicit user directory selection, never a command or arbitrary Git argument.\n const path = body.path;\n if (!path || !(await import(\"node:path\")).default.isAbsolute(path))\n throw new Error(\"请选择绝对路径\");\n return git(async () => ({\n root: await runGit(path, [\"rev-parse\", \"--show-toplevel\"]),\n remoteUrl: (await runGit(path, [\"remote\", \"get-url\", \"origin\"]).catch(() => \"\")).replace(\n /(https?:\\/\\/)[^/@\\s]+@/gi,\n \"$1\",\n ),\n branches: (\n await runGit(path, [\n \"for-each-ref\",\n \"--format=%(refname:short)\",\n \"refs/heads\",\n \"refs/remotes/origin\",\n ])\n ).split(\"\\n\"),\n }));\n });\n app.get(\"/v1/workspaces/:id/local-detail\", async (request) => {\n const id = (request.params as { id: string }).id;\n const { mount, folders } = localWorkspace(store, requestGrant(request), id);\n return { ...mount, folders };\n });\n app.get(\"/v1/workspaces/:id/repositories/:index/commits\", async (request) => {\n const { id, index } = request.params as { id: string; index: string };\n const query = request.query as { offset?: string; refresh?: string; compareBranch?: string };\n if (!/^\\d+$/.test(index) || !/^\\d+$/.test(query.offset || \"0\")) throw new Error(\"分页参数无效\");\n const { folders } = localWorkspace(store, requestGrant(request), id);\n const folder = folders[Number(index)];\n if (!folder?.exists) throw Object.assign(new Error(\"挂载仓库不存在\"), { statusCode: 404 });\n return git(() =>\n readWorkspaceCommits(\n { folder_path: folder.path, commit_compare_branch: query.compareBranch },\n Number(query.offset || 0),\n query.refresh === \"true\",\n ),\n );\n });\n function sessions(request: Parameters<typeof requestGrant>[0]) {\n const { id } = request.params as { id: string };\n const local = localWorkspace(store, requestGrant(request), id);\n return listAgentSessions(os.homedir(), {\n containerDir: local.mount.directory,\n workspaceFile: local.file,\n mountPaths: local.folders.map((folder) => folder.path),\n });\n }\n app.get(\"/v1/workspaces/:id/agent-sessions\", async (request) => ({\n linked: true,\n sessions: sessions(request),\n }));\n app.post(\"/v1/workspaces/:id/agent-sessions/open\", async (request) => {\n const body = request.body as { tool: string; id: string };\n const session = sessions(request).find(\n (item) => item.id === body.id && item.tool === body.tool,\n );\n const target = session && agentSessionTarget(session);\n if (!target) throw new Error(\"会话不存在或不属于此 Workspace\");\n await openAgentSession(target);\n return { opened: true, tool: session.tool };\n });\n}\n","import path from \"node:path\";\nimport { openPlatformUri } from \"../platform/uri.ts\";\nimport { candidateDirectories, dedupeSessions, SESSION_LIMIT } from \"./matching.ts\";\nimport { listClaudeSessions } from \"./providers/claude.ts\";\nimport { listCodexSessions } from \"./providers/codex.ts\";\nimport { listCursorComposers, listCursorTranscripts } from \"./providers/cursor.ts\";\nimport { listOpenCodeSessions } from \"./providers/opencode.ts\";\nimport { type AgentSessionRecord, type SessionScope } from \"./types.ts\";\nexport const SESSION_ID = /^[A-Za-z0-9._:-]{1,128}$/;\n\nexport const CLAUDE_SESSION_ID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nexport function agentSessionTarget(session: AgentSessionRecord): string | undefined {\n if (!SESSION_ID.test(session.id)) return undefined;\n if (session.tool === \"cursor\")\n return \"cursor://anysphere.cursor-deeplink/agent?id=\" + encodeURIComponent(session.id);\n if (session.tool === \"claude\")\n return CLAUDE_SESSION_ID.test(session.id)\n ? \"claude://resume?session=\" + encodeURIComponent(session.id)\n : undefined;\n if (session.tool === \"codex\") return \"codex://threads/\" + encodeURIComponent(session.id);\n if (session.tool === \"opencode\" && path.isAbsolute(session.cwd))\n return \"opencode://open-project?directory=\" + encodeURIComponent(session.cwd);\n return undefined;\n}\n\nexport function openAgentSession(target: string): Promise<void> {\n if (!/^(cursor|claude|codex|opencode):\\/\\//.test(target))\n return Promise.reject(new Error(\"无法打开这个会话\"));\n return openPlatformUri(target);\n}\n\nexport function listAgentSessions(home: string, scope: SessionScope): AgentSessionRecord[] {\n const directories = candidateDirectories(scope);\n const sessions = [\n ...listCursorTranscripts(home, directories),\n ...listCursorComposers(home, scope),\n ...listClaudeSessions(home, directories),\n ...listCodexSessions(home, scope),\n ...listOpenCodeSessions(home, scope),\n ];\n return dedupeSessions(sessions)\n .sort((a, b) => b.updatedAt.localeCompare(a.updatedAt))\n .slice(0, SESSION_LIMIT);\n}\n\nexport type { AgentSessionRecord, AgentSessionStatus, AgentTool } from \"./types.ts\";\n\nexport { agentStoragePaths } from \"./storage.ts\";\n","import path from \"node:path\";\nimport { type AgentSessionRecord, type SessionScope } from \"./types.ts\";\nexport const SESSION_LIMIT = 40;\n\nexport function dedupeSessions(sessions: AgentSessionRecord[]): AgentSessionRecord[] {\n const merged = new Map<string, AgentSessionRecord>();\n for (const session of sessions) {\n const key = session.tool + \":\" + session.id;\n const current = merged.get(key);\n merged.set(key, current ? preferSession(current, session) : session);\n }\n return [...merged.values()];\n}\n\nexport function preferSession(\n current: AgentSessionRecord,\n next: AgentSessionRecord,\n): AgentSessionRecord {\n const newer = current.updatedAt > next.updatedAt ? current : next;\n const currentRank = titleRank(current.title);\n const nextRank = titleRank(next.title);\n const titled =\n currentRank < nextRank ||\n (currentRank === nextRank && current.title.length <= next.title.length)\n ? current\n : next;\n // Cursor's composer record carries its native status; transcripts have no lifecycle fields.\n const status = next.status !== \"unknown\" ? next.status : current.status;\n return { ...newer, title: titled.title, status };\n}\n\nexport function titleRank(title: string): number {\n if (!title || title === \"未命名会话\") return 3;\n if (\n title.startsWith(\"[Image]\") ||\n title.startsWith('\"') ||\n title.startsWith(\"<\") ||\n title.length > 48\n )\n return 2;\n return 1;\n}\n\nexport function sessionMatches(cwd: string, scope: SessionScope): boolean {\n if (!cwd || !path.isAbsolute(cwd)) return false;\n const target = path.resolve(cwd);\n if (sameOrInside(scope.containerDir, target)) return true;\n if (scope.workspaceFile && path.resolve(scope.workspaceFile) === target) return true;\n return scope.mountPaths.some((mount) => Boolean(mount) && sameOrInside(mount, target));\n}\n\nexport function candidateDirectories(scope: SessionScope): string[] {\n const values = [scope.containerDir, ...scope.mountPaths].filter(\n (value) => value && path.isAbsolute(value),\n );\n return [...new Set(values.map((value) => path.resolve(value)))];\n}\n\nexport function sameOrInside(root: string, target: string): boolean {\n if (!root || !path.isAbsolute(root)) return false;\n const relative = path.relative(path.resolve(root), path.resolve(target));\n return relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative));\n}\n\nexport function cursorSlug(directory: string): string {\n return path.resolve(directory).split(path.sep).filter(Boolean).join(\"-\").replace(/:/g, \"-\");\n}\n\nexport function claudeSlug(directory: string): string {\n return path.resolve(directory).split(path.sep).join(\"-\").replace(/:/g, \"-\");\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { claudeSlug } from \"../matching.ts\";\nimport { transcriptStatus } from \"../status.ts\";\nimport { agentStoragePaths, clipTitle, firstText, readPrefix } from \"../storage.ts\";\nimport { type AgentSessionRecord } from \"../types.ts\";\nexport function listClaudeSessions(home: string, directories: string[]): AgentSessionRecord[] {\n const sessions: AgentSessionRecord[] = [];\n for (const directory of directories) {\n const roots = [\n ...new Set([claudeSlug(directory), path.resolve(directory).replace(/[^A-Za-z0-9]/g, \"-\")]),\n ].map((slug) => path.join(agentStoragePaths(home).claudeProjects, slug));\n for (const root of roots) {\n if (!fs.existsSync(root)) continue;\n for (const name of fs.readdirSync(root)) {\n if (!name.endsWith(\".jsonl\")) continue;\n const file = path.join(root, name);\n const record = claudeRecord(file, directory, name);\n if (record) sessions.push(record);\n }\n }\n }\n return sessions;\n}\n\nexport function claudeRecord(\n file: string,\n directory: string,\n name: string,\n): AgentSessionRecord | undefined {\n const stat = fs.statSync(file);\n let cwd = directory;\n let title = \"\";\n let id = name.replace(/\\.jsonl$/, \"\");\n for (const line of readPrefix(file).split(\"\\n\")) {\n if (!line.trim()) continue;\n let parsed: Record<string, unknown>;\n try {\n parsed = JSON.parse(line) as Record<string, unknown>;\n } catch {\n continue;\n }\n if (typeof parsed.cwd === \"string\") cwd = parsed.cwd;\n if (typeof parsed.sessionId === \"string\") id = parsed.sessionId;\n if (!title && (parsed.type === \"user\" || parsed.role === \"user\"))\n title = firstText(parsed.message ?? parsed);\n if (title && parsed.cwd) break;\n }\n return {\n id,\n tool: \"claude\",\n title: clipTitle(title),\n cwd,\n updatedAt: new Date(stat.mtimeMs).toISOString(),\n status: transcriptStatus(file, \"claude\", stat.mtimeMs),\n };\n}\n","import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nexport const PREFIX_BYTES = 65536;\n\nexport const TAIL_BYTES = 262144;\n\nexport function clipTitle(value: string): string {\n const text = value\n .replace(/<timestamp>[\\s\\S]*?<\\/timestamp>/gi, \" \")\n .replace(/<\\/?user_query>/gi, \" \")\n .replace(/\\s+/g, \" \")\n .trim();\n if (!text) return \"未命名会话\";\n return text.length > 80 ? text.slice(0, 79) + \"…\" : text;\n}\n\nexport function readPrefix(file: string, maxBytes = PREFIX_BYTES): string {\n const fd = fs.openSync(file, \"r\");\n try {\n const buffer = Buffer.alloc(maxBytes);\n const size = fs.readSync(fd, buffer, 0, maxBytes, 0);\n const text = buffer.subarray(0, size).toString(\"utf8\");\n return size === maxBytes ? text.slice(0, text.lastIndexOf(\"\\n\")) : text;\n } finally {\n fs.closeSync(fd);\n }\n}\n\nexport function readTailRecords(file: string): Record<string, any>[] {\n const fd = fs.openSync(file, \"r\");\n try {\n const size = fs.fstatSync(fd).size;\n const start = Math.max(0, size - TAIL_BYTES);\n const buffer = Buffer.alloc(size - start);\n const read = fs.readSync(fd, buffer, 0, buffer.length, start);\n const text = buffer.subarray(0, read).toString(\"utf8\");\n const lines = text.split(\"\\n\");\n if (start > 0) lines.shift();\n const records: Record<string, any>[] = [];\n for (const line of lines) {\n if (!line.trim()) continue;\n try {\n const record = JSON.parse(line);\n if (record && typeof record === \"object\" && !Array.isArray(record)) records.push(record);\n } catch {\n // A partially written or corrupt record must not resurrect an earlier completed turn.\n records.length = 0;\n }\n }\n return records;\n } finally {\n fs.closeSync(fd);\n }\n}\n\nexport function firstText(value: unknown, depth = 0): string {\n if (depth > 6 || value == null) return \"\";\n if (typeof value === \"string\") return value;\n if (Array.isArray(value)) {\n for (const item of value) {\n const found = firstText(item, depth + 1);\n if (found.trim()) return found;\n }\n return \"\";\n }\n if (typeof value !== \"object\") return \"\";\n const record = value as Record<string, unknown>;\n if (typeof record.text === \"string\" && record.text.trim()) return record.text;\n return firstText(record.message, depth + 1) || firstText(record.content, depth + 1);\n}\n\nexport function isoTime(value: unknown, fallbackMs: number): string {\n if (typeof value === \"number\" && Number.isFinite(value)) return new Date(value).toISOString();\n if (typeof value === \"string\" && value) {\n const numeric = Number(value);\n if (Number.isFinite(numeric) && numeric > 1e11) return new Date(numeric).toISOString();\n const parsed = Date.parse(value);\n if (!Number.isNaN(parsed)) return new Date(parsed).toISOString();\n }\n return new Date(fallbackMs).toISOString();\n}\n\nexport function parseFirstRecord(file: string): unknown {\n const line = readPrefix(file)\n .split(\"\\n\")\n .find((item) => item.trim());\n if (!line) return undefined;\n try {\n return JSON.parse(line);\n } catch {\n return undefined;\n }\n}\n\nexport function walkFiles(\n directory: string,\n include: (name: string) => boolean,\n depth: number,\n): string[] {\n if (depth < 0 || !fs.existsSync(directory)) return [];\n const files: string[] = [];\n for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {\n const target = path.join(directory, entry.name);\n if (entry.isDirectory()) files.push(...walkFiles(target, include, depth - 1));\n else if (include(entry.name)) files.push(target);\n }\n return files;\n}\n\nexport function agentStoragePaths(\n home: string,\n platform: NodeJS.Platform = process.platform,\n env: NodeJS.ProcessEnv = home === os.homedir() ? process.env : {},\n) {\n const paths = platform === \"win32\" ? path.win32 : path.posix;\n const cursorUser =\n platform === \"darwin\"\n ? paths.join(home, \"Library\", \"Application Support\", \"Cursor\", \"User\")\n : platform === \"win32\"\n ? paths.join(env.APPDATA || paths.join(home, \"AppData\", \"Roaming\"), \"Cursor\", \"User\")\n : paths.join(env.XDG_CONFIG_HOME || paths.join(home, \".config\"), \"Cursor\", \"User\");\n return {\n cursorUser,\n claudeProjects: paths.join(env.CLAUDE_CONFIG_DIR || paths.join(home, \".claude\"), \"projects\"),\n codexSessions: paths.join(env.CODEX_HOME || paths.join(home, \".codex\"), \"sessions\"),\n openCodeDatabase: paths.join(\n env.XDG_DATA_HOME || paths.join(home, \".local\", \"share\"),\n \"opencode\",\n \"opencode.db\",\n ),\n };\n}\n","import { readTailRecords } from \"./storage.ts\";\nimport { type AgentSessionStatus } from \"./types.ts\";\nexport const ACTIVITY_WINDOW_MS = 5 * 60 * 1000;\n\nexport function activeStatus(updatedMs: number): AgentSessionStatus {\n const age = Date.now() - updatedMs;\n // Filesystem timestamps can have sub-millisecond precision beyond Date.now().\n return age >= -1000 && age <= ACTIVITY_WINDOW_MS ? \"processing\" : \"unknown\";\n}\n\nexport function transcriptStatus(\n file: string,\n tool: \"claude\" | \"codex\",\n updatedMs: number,\n): AgentSessionStatus {\n let status: AgentSessionStatus = \"unknown\";\n let activeTurn: string | undefined;\n for (const record of readTailRecords(file)) {\n if (record.isSidechain) continue;\n const timestamp = typeof record.timestamp === \"string\" ? Date.parse(record.timestamp) : NaN;\n const activityTime = Number.isFinite(timestamp) ? timestamp : updatedMs;\n if (tool === \"codex\") {\n if (record.type !== \"event_msg\") continue;\n const type = record.payload?.type;\n const turn = typeof record.payload?.turn_id === \"string\" ? record.payload.turn_id : undefined;\n if (type === \"task_started\") {\n activeTurn = turn;\n status = activeStatus(activityTime);\n continue;\n }\n if (type === \"user_message\") {\n // Legacy user events may not carry a turn ID. A new prompt supersedes\n // the interrupted/completed turn while its task_started event is pending.\n if (turn) activeTurn = turn;\n else if (status === \"interrupted\" || status === \"completed\") activeTurn = undefined;\n status = activeStatus(activityTime);\n continue;\n }\n // Late events from an older turn must not end the resumed turn.\n if (activeTurn && turn && activeTurn !== turn) continue;\n if (type === \"task_complete\") status = \"completed\";\n else if (type === \"turn_aborted\") status = \"interrupted\";\n else if (\n [\n \"agent_message\",\n \"agent_reasoning\",\n \"exec_command_begin\",\n \"exec_command_end\",\n \"mcp_tool_call_begin\",\n \"mcp_tool_call_end\",\n \"item_started\",\n \"item_completed\",\n ].includes(type) &&\n status !== \"completed\" &&\n status !== \"interrupted\"\n )\n status = activeStatus(activityTime);\n } else {\n if (record.type === \"user\") {\n const content = record.message?.content;\n const text =\n typeof content === \"string\"\n ? content\n : Array.isArray(content)\n ? content\n .filter((part) => part?.type === \"text\" && typeof part.text === \"string\")\n .map((part) => part.text)\n .join(\"\\n\")\n : \"\";\n if (text.startsWith(\"[Request interrupted by user\")) status = \"interrupted\";\n else status = activeStatus(activityTime);\n } else if (record.type === \"assistant\") {\n const stop = record.message?.stop_reason;\n if (record.isApiErrorMessage) status = \"failed\";\n else if (stop === \"end_turn\" || stop === \"stop_sequence\") status = \"completed\";\n else if (stop === \"max_tokens\" || stop === \"refusal\") status = \"failed\";\n else status = activeStatus(activityTime);\n } else if (record.type === \"result\") {\n status = record.is_error\n ? \"failed\"\n : record.subtype === \"success\"\n ? \"completed\"\n : \"unknown\";\n }\n }\n }\n return status;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { sessionMatches } from \"../matching.ts\";\nimport { transcriptStatus } from \"../status.ts\";\nimport {\n agentStoragePaths,\n clipTitle,\n firstText,\n PREFIX_BYTES,\n readPrefix,\n TAIL_BYTES,\n walkFiles,\n} from \"../storage.ts\";\nimport { type AgentSessionRecord, type SessionScope } from \"../types.ts\";\nexport function listCodexSessions(home: string, scope: SessionScope): AgentSessionRecord[] {\n const root = agentStoragePaths(home).codexSessions;\n if (!fs.existsSync(root)) return [];\n const sessions: AgentSessionRecord[] = [];\n for (const file of walkFiles(\n root,\n (name) => name.startsWith(\"rollout-\") && name.endsWith(\".jsonl\"),\n 4,\n )) {\n const record = codexRecord(file, scope);\n if (record) sessions.push(record);\n }\n return sessions;\n}\n\nexport function codexRecord(file: string, scope: SessionScope): AgentSessionRecord | undefined {\n const prefix = readPrefix(file);\n const first = prefix.split(\"\\n\").find((line) => line.trim());\n if (!first) return undefined;\n let meta: {\n payload?: {\n cwd?: string;\n session_id?: string;\n id?: string;\n timestamp?: string;\n git?: { branch?: string };\n };\n };\n try {\n meta = JSON.parse(first);\n } catch {\n return undefined;\n }\n const cwd = meta.payload?.cwd || \"\";\n if (!sessionMatches(cwd, scope)) return undefined;\n const stat = fs.statSync(file);\n let title = meta.payload?.git?.branch || \"\";\n // App Server logs may include large instruction records before the first prompt.\n const titlePrefix = stat.size > PREFIX_BYTES ? readPrefix(file, TAIL_BYTES) : prefix;\n for (const line of titlePrefix.split(\"\\n\").slice(1)) {\n if (!line.trim()) continue;\n try {\n const record = JSON.parse(line);\n const payload = record.payload;\n let text = \"\";\n if (record.type === \"event_msg\" && payload?.type === \"user_message\")\n text = firstText(payload.message);\n else if (\n record.type === \"response_item\" &&\n payload?.type === \"message\" &&\n payload.role === \"user\"\n ) {\n const content = Array.isArray(payload.content) ? payload.content : [];\n text =\n content\n .map((item: unknown) => firstText(item))\n .find(\n (value: string) =>\n value.trim() &&\n !/^(# AGENTS\\.md instructions|<environment_context>|<permissions instructions>|<skills_instructions>|<user_instructions>)/.test(\n value.trim(),\n ),\n ) || \"\";\n } else if (!payload) text = firstText(record); // Legacy log format.\n if (text.trim()) {\n title = text;\n break;\n }\n } catch {\n /* skip a partial record */\n }\n }\n return {\n id: meta.payload?.session_id || meta.payload?.id || path.basename(file),\n tool: \"codex\",\n title: clipTitle(title),\n cwd,\n updatedAt: new Date(stat.mtimeMs).toISOString(),\n status: transcriptStatus(file, \"codex\", stat.mtimeMs),\n };\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { cursorSlug, sessionMatches } from \"../matching.ts\";\nimport { SqliteReader } from \"../sqlite-reader.ts\";\nimport { activeStatus } from \"../status.ts\";\nimport { agentStoragePaths, clipTitle, firstText, isoTime, parseFirstRecord } from \"../storage.ts\";\nimport { type AgentSessionRecord, type AgentSessionStatus, type SessionScope } from \"../types.ts\";\nexport function listCursorTranscripts(home: string, directories: string[]): AgentSessionRecord[] {\n const sessions: AgentSessionRecord[] = [];\n for (const directory of directories) {\n const root = path.join(home, \".cursor\", \"projects\", cursorSlug(directory), \"agent-transcripts\");\n if (!fs.existsSync(root)) continue;\n for (const entry of fs.readdirSync(root, { withFileTypes: true })) {\n const file = entry.isDirectory()\n ? path.join(root, entry.name, entry.name + \".jsonl\")\n : path.join(root, entry.name);\n if (!file.endsWith(\".jsonl\") || !fs.existsSync(file)) continue;\n const stat = fs.statSync(file);\n const text = firstText(parseFirstRecord(file));\n sessions.push({\n id: entry.name.replace(/\\.jsonl$/, \"\"),\n tool: \"cursor\",\n title: clipTitle(text),\n cwd: directory,\n updatedAt: new Date(stat.mtimeMs).toISOString(),\n status: \"unknown\",\n });\n }\n }\n return sessions;\n}\n\nexport function listCursorComposers(home: string, scope: SessionScope): AgentSessionRecord[] {\n const root = agentStoragePaths(home).cursorUser;\n const storage = path.join(root, \"workspaceStorage\");\n const databaseFile = path.join(root, \"globalStorage\", \"state.vscdb\");\n const workspaceIds = cursorWorkspaceIds(storage, scope);\n if (!workspaceIds.length || !fs.existsSync(databaseFile)) return [];\n try {\n const database = new SqliteReader(databaseFile, { readonly: true, fileMustExist: true });\n try {\n const query = database.prepare(\n \"SELECT composerId, lastUpdatedAt, value FROM composerHeaders WHERE workspaceId = ? AND isSubagent = 0\",\n );\n return workspaceIds.flatMap((workspaceId) =>\n (\n query.all(workspaceId) as Array<{\n composerId: string;\n lastUpdatedAt: number | null;\n value: string;\n }>\n ).flatMap((row) => {\n const session = composerRecord(row, scope.containerDir);\n if (session) session.status = cursorStatus(database, row.composerId, row.value);\n return session ? [session] : [];\n }),\n );\n } finally {\n database.close();\n }\n } catch {\n return [];\n }\n}\n\nexport function cursorStatus(\n database: SqliteReader,\n id: string,\n header: string,\n): AgentSessionStatus {\n try {\n const metadata = JSON.parse(header);\n if (metadata.hasBlockingPendingActions === true) return \"waiting\";\n const row = database\n .prepare(\n `SELECT json_extract(value, '$.status') AS status,\n json_array_length(value, '$.generatingBubbleIds') AS generating,\n json_extract(value, '$.isContinuationInProgress') AS continuing,\n json_extract(value, '$.lastUpdatedAt') AS updated,\n json_extract(value, '$.fullConversationHeadersOnly') AS messages\n FROM cursorDiskKV WHERE key = ? AND json_valid(value)`,\n )\n .get(\"composerData:\" + id) as\n | {\n status: string | null;\n generating: number | null;\n continuing: number | null;\n updated: number | null;\n messages: string | null;\n }\n | undefined;\n if (!row) return \"unknown\";\n if ((row.generating ?? 0) > 0 || row.continuing === 1 || row.status === \"generating\")\n return \"processing\";\n // Cursor persists the message index while an Agent is running, but the root status\n // can still describe the previous completed/aborted turn. Compare their timestamps.\n const messages = row.messages ? JSON.parse(row.messages) : [];\n if (Array.isArray(messages)) {\n const latest = [...messages]\n .reverse()\n .find((message) => message?.type === 1 || message?.type === 2);\n const started =\n typeof latest?.startedAtMs === \"number\"\n ? latest.startedAtMs\n : Date.parse(latest?.createdAt ?? \"\");\n if (Number.isFinite(started) && typeof row.updated === \"number\" && started > row.updated) {\n // Tool completion ends one message, not the whole Agent turn. Cursor's final\n // reply instead carries a turn duration, including replies without completedAtMs.\n if (latest.type === 2 && typeof latest.grouping?.turnDurationMs === \"number\")\n return \"completed\";\n const writer = database\n .prepare(\n \"SELECT json_extract(value, '$.writtenAtMs') AS updated FROM cursorDiskKV WHERE key = ? AND json_valid(value)\",\n )\n .get(\"composerRootWriterDiagnostic:\" + id) as { updated: number | null } | undefined;\n return activeStatus(\n Math.max(started, typeof writer?.updated === \"number\" ? writer.updated : started),\n );\n }\n }\n if (row.status === \"completed\") return \"completed\";\n if (row.status === \"aborted\") return \"interrupted\";\n return \"unknown\";\n } catch {\n return \"unknown\";\n }\n}\n\nexport function cursorWorkspaceIds(storage: string, scope: SessionScope): string[] {\n if (!fs.existsSync(storage)) return [];\n const ids: string[] = [];\n for (const entry of fs.readdirSync(storage, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const descriptor = path.join(storage, entry.name, \"workspace.json\");\n if (!fs.existsSync(descriptor)) continue;\n try {\n const parsed = JSON.parse(fs.readFileSync(descriptor, \"utf8\")) as {\n folder?: string;\n workspace?: string;\n };\n const location = fileUriPath(parsed.workspace || \"\") || fileUriPath(parsed.folder || \"\");\n if (\n location &&\n (location === path.resolve(scope.workspaceFile) || sessionMatches(location, scope))\n )\n ids.push(entry.name);\n } catch {\n /* skip unreadable workspace identity */\n }\n }\n return ids;\n}\n\nexport function fileUriPath(value: string): string {\n if (!value.startsWith(\"file:\")) return \"\";\n try {\n return fileURLToPath(value);\n } catch {\n return \"\";\n }\n}\n\nexport function composerRecord(\n row: { composerId: string; lastUpdatedAt: number | null; value: string },\n cwd: string,\n): AgentSessionRecord | undefined {\n let title = \"\";\n let createdAt = 0;\n try {\n const parsed = JSON.parse(row.value) as {\n name?: string;\n subtitle?: string;\n createdAt?: number;\n };\n title = parsed.name || parsed.subtitle || \"\";\n createdAt = typeof parsed.createdAt === \"number\" ? parsed.createdAt : 0;\n } catch {\n title = \"\";\n }\n if (!row.lastUpdatedAt && !title.trim()) return undefined;\n return {\n id: row.composerId,\n tool: \"cursor\",\n title: clipTitle(title),\n cwd,\n updatedAt: isoTime(row.lastUpdatedAt || createdAt, 0),\n status: \"unknown\",\n };\n}\n","import fs from \"node:fs\";\nimport { DatabaseSync } from \"node:sqlite\";\n\n/** Read-only adapter: the assistant never migrates or writes another application's database. */\nexport class SqliteReader {\n private database: DatabaseSync;\n\n constructor(file: string, _options?: { readonly: boolean; fileMustExist: boolean }) {\n if (!fs.existsSync(file)) throw new Error(\"会话数据库不存在\");\n this.database = new DatabaseSync(file, { readOnly: true });\n }\n\n prepare(sql: string) {\n return this.database.prepare(sql);\n }\n\n close() {\n this.database.close();\n }\n}\n","import fs from \"node:fs\";\nimport { sessionMatches } from \"../matching.ts\";\nimport { SqliteReader } from \"../sqlite-reader.ts\";\nimport { activeStatus } from \"../status.ts\";\nimport { agentStoragePaths, clipTitle, isoTime } from \"../storage.ts\";\nimport { type AgentSessionRecord, type AgentSessionStatus, type SessionScope } from \"../types.ts\";\nexport function listOpenCodeSessions(home: string, scope: SessionScope): AgentSessionRecord[] {\n const databaseFile = agentStoragePaths(home).openCodeDatabase;\n if (!fs.existsSync(databaseFile)) return [];\n try {\n const database = new SqliteReader(databaseFile, { readonly: true, fileMustExist: true });\n try {\n const rows = database\n .prepare(\"SELECT id, directory, title, time_updated FROM session\")\n .all() as Array<{\n id: string;\n directory: string;\n title: string | null;\n time_updated: number | string | null;\n }>;\n return rows\n .filter((row) => sessionMatches(row.directory || \"\", scope))\n .map((row) => ({\n id: row.id,\n tool: \"opencode\" as const,\n title: clipTitle(row.title || \"\"),\n cwd: row.directory,\n updatedAt: isoTime(row.time_updated, Date.now()),\n status: openCodeStatus(database, row.id),\n }));\n } finally {\n database.close();\n }\n } catch {\n return [];\n }\n}\n\nexport function openCodeStatus(database: SqliteReader, id: string): AgentSessionStatus {\n try {\n const row = database\n .prepare(\n \"SELECT data, time_updated FROM message WHERE session_id = ? ORDER BY time_created DESC, id DESC LIMIT 1\",\n )\n .get(id) as { data: string; time_updated: number } | undefined;\n if (!row) return \"unknown\";\n const message = JSON.parse(row.data);\n if (message.role !== \"assistant\" && message.role !== \"user\") return \"unknown\";\n if (message.error)\n return message.error.name === \"MessageAbortedError\" ? \"interrupted\" : \"failed\";\n if (\n message.role === \"assistant\" &&\n message.time?.completed &&\n message.finish &&\n message.finish !== \"tool-calls\" &&\n message.finish !== \"unknown\"\n ) {\n return message.finish === \"length\" || message.finish === \"content-filter\"\n ? \"failed\"\n : \"completed\";\n }\n return activeStatus(row.time_updated);\n } catch {\n return \"unknown\";\n }\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { GitCommandError, runGit } from \"./commands.ts\";\ntype Mount = { folder_path: string; commit_compare_branch?: string };\nconst PAGE_SIZE = 20;\nconst SYNC_INTERVAL_MS = 30_000;\ntype ComparisonSnapshot = { commit: string; updatedAt: string } | { unavailable: string };\nconst comparisonSyncs = new Map<\n string,\n { checkedAt: number; pending: boolean; result: Promise<ComparisonSnapshot> }\n>();\n\nexport function normalizeCommitCompareBranch(value: unknown): string | undefined {\n if (value === undefined) return \"production\";\n if (typeof value !== \"string\") return undefined;\n const branch = value.trim().replace(/^origin\\//, \"\");\n if (!branch || branch.length > 200 || branch.startsWith(\"-\") || branch.includes(\"@{\"))\n return undefined;\n if (\n /[\\s~^:?*\\[\\\\\\x00-\\x1f]|\\.\\.|@\\{|\\/$/.test(branch) ||\n branch\n .split(\"/\")\n .some((part) => !part || part.startsWith(\".\") || part.endsWith(\".lock\") || part.endsWith(\".\"))\n )\n return undefined;\n return branch;\n}\n\nasync function git(cwd: string, args: string[]) {\n return runGit(cwd, args, { timeoutMs: 10_000 });\n}\n\nasync function latestComparison(\n cwd: string,\n branch: string,\n force: boolean,\n): Promise<ComparisonSnapshot> {\n if (!(await git(cwd, [\"remote\"])).split(\"\\n\").includes(\"origin\"))\n return { unavailable: \"仓库未配置 origin,无法读取最新 \" + branch };\n const remoteRef = \"refs/remotes/origin/\" + branch;\n // Linked worktrees share remote refs; coalesce their concurrent refreshes.\n const common = fs.realpathSync(\n path.resolve(cwd, await git(cwd, [\"rev-parse\", \"--git-common-dir\"])),\n );\n const key = common + \"\\0\" + (await git(cwd, [\"remote\", \"get-url\", \"origin\"])) + \"\\0\" + branch;\n const cached = comparisonSyncs.get(key);\n if (cached && (cached.pending || (!force && Date.now() - cached.checkedAt < SYNC_INTERVAL_MS)))\n return cached.result;\n const entry = {\n checkedAt: Date.now(),\n pending: true,\n result: Promise.resolve<ComparisonSnapshot>({ unavailable: \"正在同步 \" + branch }),\n };\n entry.result = (async (): Promise<ComparisonSnapshot> => {\n try {\n await runGit(\n cwd,\n [\n \"-c\",\n \"gc.auto=0\",\n \"fetch\",\n \"--no-tags\",\n \"--no-write-fetch-head\",\n \"origin\",\n \"+refs/heads/\" + branch + \":\" + remoteRef,\n ],\n { timeoutMs: 20_000 },\n );\n const commit = await git(cwd, [\"rev-parse\", \"--verify\", remoteRef + \"^{commit}\"]);\n return { commit, updatedAt: new Date().toISOString() };\n } catch {\n return { unavailable: \"无法同步远端 \" + branch + \",请检查网络、仓库权限和远端分支后重试\" };\n } finally {\n entry.pending = false;\n entry.checkedAt = Date.now();\n }\n })();\n comparisonSyncs.set(key, entry);\n return entry.result;\n}\n\nexport async function readWorkspaceCommits(mount: Mount, offset = 0, refresh = false) {\n const compareBranch = normalizeCommitCompareBranch(mount.commit_compare_branch);\n const empty = {\n commits: [],\n total: 0,\n hasMore: false,\n branch: \"\",\n baseRef: \"origin/\" + (compareBranch || \"production\"),\n };\n if (!compareBranch) return { ...empty, unavailable: \"仓库 Commit 对比分支配置无效\" };\n if (!mount.folder_path || !fs.existsSync(mount.folder_path))\n return { ...empty, unavailable: \"挂载路径不存在\" };\n try {\n const head = await git(mount.folder_path, [\"rev-parse\", \"--verify\", \"HEAD^{commit}\"]);\n const branch = (await git(mount.folder_path, [\"branch\", \"--show-current\"])) || \"分离 HEAD\";\n const base = await latestComparison(mount.folder_path, compareBranch, refresh);\n if (\"unavailable\" in base) return { ...empty, branch, unavailable: base.unavailable };\n try {\n await git(mount.folder_path, [\"merge-base\", base.commit, head]);\n } catch (error) {\n if (error instanceof GitCommandError && error.exitCode === 1)\n return {\n ...empty,\n branch,\n unavailable: \"当前分支与远端 \" + compareBranch + \" 没有共同历史\",\n };\n throw error;\n }\n const range = base.commit + \"..\" + head;\n const total = Number(await git(mount.folder_path, [\"rev-list\", \"--count\", range]));\n // NUL delimiters preserve Unicode and punctuation in subjects and author names.\n const raw = await git(mount.folder_path, [\n \"log\",\n \"--date-order\",\n \"--no-show-signature\",\n \"--format=%H%x00%h%x00%s%x00%an%x00%aI%x00\",\n \"--max-count=\" + PAGE_SIZE,\n \"--skip=\" + offset,\n range,\n \"--\",\n ]);\n const fields = raw.split(\"\\0\");\n const commits = [];\n for (let index = 0; index + 5 <= fields.length; index += 5) {\n const hash = fields[index].trim();\n if (!hash) continue;\n commits.push({\n hash,\n shortHash: fields[index + 1],\n subject: fields[index + 2],\n author: fields[index + 3],\n authoredAt: fields[index + 4],\n });\n }\n return {\n commits,\n total,\n hasMore: offset + commits.length < total,\n branch,\n baseRef: empty.baseRef,\n baseUpdatedAt: base.updatedAt,\n head,\n };\n } catch {\n return { ...empty, unavailable: \"无法读取 Git 提交记录,请检查仓库与本地引用\" };\n }\n}\n","import type { FastifyInstance } from \"fastify\";\nimport path from \"node:path\";\nimport {\n auditLocalVersion,\n type ReviewInput,\n} from \"../../../packages/runtime/src/reviews/audit.ts\";\nimport { LocalJobs } from \"./jobs.ts\";\nimport { requestGrant } from \"./routes.ts\";\nimport { StateStore, scopeKey } from \"./state.ts\";\n\nexport function registerReviewRoute(app: FastifyInstance, store: StateStore, jobs: LocalJobs) {\n app.post(\"/v1/reviews\", async (request) => {\n const grant = requestGrant(request);\n const body = request.body as {\n id: string;\n snapshot: ReviewInput;\n inputHash: string;\n production?: string;\n staging?: string;\n };\n if (!/^[a-zA-Z0-9-]{1,100}$/.test(body.id) || !body.snapshot?.mounts?.length)\n throw new Error(\"审查输入无效\");\n const snapshot = structuredClone(body.snapshot);\n for (const mount of snapshot.mounts)\n mount.canonical_path =\n store.state.repositories[scopeKey(grant.workbenchId, grant.userId, mount.repository_id)] ||\n \"\";\n jobs.activity(\n {\n id: body.id,\n workbenchId: grant.workbenchId,\n userId: grant.userId,\n state: \"queued\",\n input: {\n versionId: snapshot.version.id,\n slug: snapshot.version.name,\n snapshot: body.snapshot,\n inputHash: body.inputHash,\n },\n logs: [],\n },\n (log) =>\n auditLocalVersion(\n snapshot,\n path.join(store.directory, \"reviews\", body.id),\n body.id,\n body.inputHash,\n body,\n log,\n ),\n );\n return { jobId: \"local:\" + body.id };\n });\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { GitCommandError, runGit } from \"../git/commands.ts\";\nimport { branchScope, frozenRefs, scopeStatus } from \"./branch-scope.ts\";\nimport { readableReport } from \"./report-format.ts\";\nasync function git(cwd: string, args: string[]) {\n try {\n return await runGit(cwd, [\n \"-c\",\n \"core.hooksPath=\" + (process.platform === \"win32\" ? \"NUL\" : \"/dev/null\"),\n ...args,\n ]);\n } catch (error) {\n if (error instanceof GitCommandError)\n throw Object.assign(error, { code: error.exitCode, output: error.stdout });\n throw error;\n }\n}\nexport interface ReviewInput {\n version: { id: string; name: string; archived_at: string | null };\n requirements: Array<{ id: string; key: string }>;\n mounts: Array<{\n repository_id: string;\n requirement_id: string;\n alias: string;\n branch: string;\n canonical_path: string;\n remote_url: string | null;\n review_enabled: number;\n }>;\n}\nexport async function auditLocalVersion(\n initial: ReviewInput,\n root: string,\n runId: string,\n inputHash: string,\n body: { production?: string; staging?: string },\n log: (line: string) => void,\n) {\n const createdAt = new Date().toISOString();\n if (!initial.version || initial.version.archived_at) throw new Error(\"请选择未归档版本\");\n const includedMounts = initial.mounts.filter((mount) => mount.review_enabled !== 0);\n const excludedRepositories = [\n ...new Map(\n initial.mounts\n .filter((mount) => mount.review_enabled === 0)\n .map((mount) => [\n mount.repository_id,\n {\n repositoryId: mount.repository_id,\n alias: mount.alias,\n reason: \"配置项目(已关闭参与版本审查)\",\n },\n ]),\n ).values(),\n ];\n if (!includedMounts.length) throw new Error(\"所有关联仓库均已排除,无可审查的业务仓库\");\n const production = body.production || \"production\",\n staging = body.staging || \"staging\";\n const valid = (value: unknown) =>\n typeof value === \"string\" &&\n /^[A-Za-z0-9][A-Za-z0-9._/-]*$/.test(value) &&\n !value.includes(\"..\") &&\n !value.endsWith(\"/\");\n if (!valid(production) || !valid(staging) || production === staging)\n throw new Error(\"请填写不同的有效生产、UAT 分支名\");\n fs.mkdirSync(root, { recursive: true });\n const results: any[] = [],\n folders: Array<{ name: string; path: string }> = [];\n const groups = [...new Set(includedMounts.map((mount) => mount.repository_id))];\n log(\"审查仓库总数:\" + groups.length);\n excludedRepositories.forEach((repo) => log(\"已排除:\" + repo.alias + \"(\" + repo.reason + \")\"));\n for (const repositoryId of groups) {\n const entries = includedMounts.filter((entry) => entry.repository_id === repositoryId),\n repo = entries[0];\n const directory = path.join(root, repositoryId.replace(/[^a-zA-Z0-9_-]/g, \"_\"));\n const result: any = {\n repositoryId,\n alias: repo.alias,\n status: \"ERROR\",\n branches: [],\n extraCommits: [],\n manualChecks: [],\n refs: {},\n };\n results.push(result);\n try {\n log(\"获取远端仓库:\" + repo.alias);\n let remote = repo.remote_url?.trim() || \"\";\n let localOrigin = false;\n if (!remote) {\n if (!repo.canonical_path || !fs.existsSync(repo.canonical_path))\n throw new Error(\"请配置远程仓库地址或有效本地来源\");\n remote = await git(repo.canonical_path, [\"config\", \"--get\", \"remote.origin.url\"]);\n localOrigin = path.isAbsolute(remote) && fs.existsSync(remote);\n }\n if (\n (!localOrigin && !/^(https:\\/\\/|ssh:\\/\\/|[\\w.-]+@[\\w.-]+:)/.test(remote)) ||\n remote.includes(\"::\") ||\n /[\\s\\x00-\\x1f]/.test(remote) ||\n /https?:\\/\\/[^/]*@/.test(remote)\n )\n throw new Error(\"远端地址无效\");\n await git(root, [\"clone\", \"--no-checkout\", \"--no-local\", \"--\", remote, directory]);\n folders.push({ name: repo.alias, path: directory });\n result.remoteRefs = await frozenRefs(git, directory);\n log(\"仓库快照已获取:\" + repo.alias);\n const resolveBranch = async (branch: string) => {\n if (!valid(branch)) throw new Error(\"需求分支名无效或缺失\");\n const clean = branch\n .replace(/^refs\\/remotes\\/origin\\//, \"\")\n .replace(/^origin\\//, \"\")\n .replace(/^refs\\/heads\\//, \"\");\n const ref = result.remoteRefs.find(\n (item: { name: string; sha: string }) => item.name === clean,\n );\n if (!ref) throw new Error(repo.alias + \":远端分支不存在:\" + clean);\n return ref.sha as string;\n };\n const p = await resolveBranch(production),\n s = await resolveBranch(staging);\n result.refs = { production: p, staging: s };\n for (const branch of [...new Set(entries.map((entry) => entry.branch))])\n result.branches.push({\n name: branch,\n sha: await resolveBranch(branch),\n requirementIds: entries\n .filter((entry) => entry.branch === branch)\n .map((entry) => entry.requirement_id),\n });\n log(\"开始完整性检查:\" + repo.alias);\n let mergeConflict = false;\n try {\n await git(directory, [\"merge-tree\", \"--write-tree\", p, s]);\n } catch (error) {\n const failure = error as { code?: number; output?: string };\n if (failure.code !== 1) throw error;\n mergeConflict = true;\n result.conflicts = failure.output || \"存在合并冲突\";\n log(repo.alias + \":staging 合入 production 冲突\");\n }\n await git(directory, [\"checkout\", \"--detach\", s]);\n Object.assign(\n result,\n await branchScope(\n git,\n directory,\n p,\n s,\n result.remoteRefs,\n result.branches,\n production,\n staging,\n ),\n );\n result.status = scopeStatus(mergeConflict, result.branches, result.nonVersionEntries);\n log(repo.alias + \":\" + result.status);\n } catch (error) {\n result.error = error instanceof Error ? error.message : \"仓库检查失败\";\n log(repo.alias + \":检查失败\");\n }\n }\n const uncoveredRequirements = (initial.requirements as Array<{ id: string; key: string }>).filter(\n (requirement) => !initial.mounts.some((mount) => mount.requirement_id === requirement.id),\n );\n const stale = false;\n const result = stale\n ? \"STALE\"\n : results.some((repo) => [\"ERROR\", \"CONFLICT\"].includes(repo.status))\n ? \"BLOCKED\"\n : uncoveredRequirements.length || results.some((repo) => repo.status === \"WARN\")\n ? \"WARN\"\n : \"PASS\";\n const workspaceFile = path.join(\n root,\n \"version-\" + initial.version!.name.replace(/[^A-Za-z0-9._-]/g, \"-\") + \".code-workspace\",\n );\n fs.writeFileSync(\n workspaceFile,\n JSON.stringify(\n { folders, settings: { \"codeWorkspace.description\": \"隔离审查快照;请勿用于发布推送\" } },\n null,\n 2,\n ),\n );\n const snapshot = {\n type: \"release-integrity\",\n formatVersion: 4,\n version: initial.version,\n input: initial,\n inputHash: inputHash,\n production,\n staging,\n results,\n excludedRepositories,\n uncoveredRequirements,\n workspaceFile,\n stale,\n };\n const report = readableReport(snapshot, result, createdAt, runId);\n fs.writeFileSync(path.join(root, \"report.md\"), report, { mode: 0o600 });\n fs.writeFileSync(path.join(root, \"snapshot.json\"), JSON.stringify(snapshot, null, 2), {\n mode: 0o600,\n });\n\n return { runId, result, report, workspaceFile, snapshot, createdAt };\n}\n","type Git = (cwd: string, args: string[]) => Promise<string>;\ntype Ref = { name: string; sha: string };\ntype Branch = {\n name: string;\n sha: string;\n requirementIds: string[];\n expectedCommits?: string[];\n missingCommits?: string[];\n coveredCommits?: string[];\n status?: string;\n};\nexport type OutsideEntry = {\n kind: \"branch\" | \"commit\";\n name?: string;\n sha: string;\n reason: string;\n commits?: string[];\n};\nconst lines = (text: string) => (text ? text.split(\"\\n\") : []);\nexport const cleanBranch = (name: string) =>\n name\n .replace(/^refs\\/remotes\\/origin\\//, \"\")\n .replace(/^refs\\/heads\\//, \"\")\n .replace(/^origin\\//, \"\");\nexport async function frozenRefs(git: Git, cwd: string): Promise<Ref[]> {\n return lines(\n await git(cwd, [\n \"for-each-ref\",\n \"--format=%(refname)%09%(objectname)%09%(symref)\",\n \"refs/remotes/origin/\",\n ]),\n )\n .map((line) => line.split(\"\\t\"))\n .filter((parts) => !parts[2] && !parts[0].endsWith(\"/HEAD\"))\n .map(([name, sha]) => ({ name: cleanBranch(name), sha }));\n}\n\nexport function scopeStatus(\n conflict: boolean,\n branches: Branch[],\n nonVersionEntries: OutsideEntry[],\n) {\n if (conflict) return \"CONFLICT\";\n return branches.some((branch) => (branch.missingCommits || []).length) || nonVersionEntries.length\n ? \"WARN\"\n : \"PASS\";\n}\n\n// Only graph ancestry and tree identity participate in classification. No commit messages.\nexport async function branchScope(\n git: Git,\n cwd: string,\n productionSha: string,\n stagingSha: string,\n refs: Ref[],\n branches: Branch[],\n production: string,\n staging: string,\n) {\n const nodes = lines(\n await git(cwd, [\"rev-list\", \"--topo-order\", \"--parents\", productionSha + \"..\" + stagingSha]),\n ).map((line) => line.split(\" \"));\n const incoming = new Set(nodes.map(([sha]) => sha));\n const histories = new Map<string, Set<string>>();\n const history = async (sha: string) => {\n if (!histories.has(sha))\n histories.set(sha, new Set(lines(await git(cwd, [\"rev-list\", productionSha + \"..\" + sha]))));\n return histories.get(sha)!;\n };\n const accounted = new Set<string>();\n for (const branch of branches) {\n const expected = [...(await history(branch.sha))];\n branch.expectedCommits = expected;\n branch.coveredCommits = expected.filter((sha) => incoming.has(sha));\n branch.missingCommits = expected.filter((sha) => !incoming.has(sha));\n branch.status = !branch.missingCommits.length ? \"COVERED\" : \"MISSING\";\n branch.coveredCommits.forEach((sha) => accounted.add(sha));\n }\n const eligible = refs.filter(\n (ref) => ![cleanBranch(production), cleanBranch(staging)].includes(ref.name),\n );\n const plan = new Set(branches.map((branch) => cleanBranch(branch.name)));\n const nonVersionEntries: OutsideEntry[] = [];\n const recorded = new Set<string>();\n const candidates = new Set<string>();\n // Include staging tip merge side parents so a just-merged extra branch is attributed.\n for (const [, ...parents] of nodes)\n for (const parent of parents.slice(1)) if (incoming.has(parent)) candidates.add(parent);\n // Covers fast-forward histories where a branch tip itself is reachable without a merge node.\n for (const ref of eligible) if (incoming.has(ref.sha)) candidates.add(ref.sha);\n for (const tip of candidates) {\n const exact = eligible.filter((ref) => ref.sha === tip);\n let matches = exact;\n if (!matches.length) {\n // An advanced branch can still contain its historical merged tip. Ambiguous names are not guessed.\n const containing = new Set(\n lines(\n await git(cwd, [\n \"for-each-ref\",\n \"--contains=\" + tip,\n \"--format=%(refname)\",\n \"refs/remotes/origin/\",\n ]),\n ).map(cleanBranch),\n );\n matches = eligible.filter((ref) => containing.has(ref.name));\n }\n if (matches.length !== 1) continue;\n const ref = matches[0],\n introduced = [...(await history(tip))].filter((sha) => incoming.has(sha));\n introduced.forEach((sha) => accounted.add(sha));\n if (!plan.has(ref.name) && !recorded.has(ref.name)) {\n recorded.add(ref.name);\n nonVersionEntries.push({\n kind: \"branch\",\n name: ref.name,\n sha: tip,\n reason: \"本次引入,未在版本清单\",\n commits: introduced,\n });\n }\n }\n const fallback = new Map<string, OutsideEntry>();\n for (const [sha, ...parents] of nodes) {\n if (parents.length < 2) {\n if (accounted.has(sha)) continue;\n const changed = await git(cwd, [\n \"diff-tree\",\n \"--root\",\n \"--no-commit-id\",\n \"--name-only\",\n \"-r\",\n \"--no-ext-diff\",\n \"--no-textconv\",\n sha,\n ]);\n if (changed) fallback.set(sha, { kind: \"commit\", sha, reason: \"未识别来源分支\" });\n } else if (!accounted.has(sha)) {\n // Do not repeat the side branch's normal merged files as an additional commit.\n // Preserve unassigned merge-resolution changes, including historical conflict resolution.\n let independent = parents.length !== 2;\n if (parents.length === 2) {\n try {\n const automatic = (\n await git(cwd, [\"merge-tree\", \"--write-tree\", parents[0], parents[1]])\n ).split(\"\\n\")[0];\n const actual = await git(cwd, [\"rev-parse\", sha + \"^{tree}\"]);\n independent = automatic !== actual;\n } catch (error) {\n if ((error as { code?: number }).code !== 1) throw error;\n independent = true;\n }\n }\n if (\n independent &&\n (await git(cwd, [\"diff\", \"--name-only\", \"--no-ext-diff\", \"--no-textconv\", parents[0], sha]))\n )\n fallback.set(sha, { kind: \"commit\", sha, reason: \"未归属分支的合并变动\" });\n }\n }\n nonVersionEntries.push(...fallback.values());\n return {\n nonVersionEntries,\n extraCommits: [...fallback.keys()],\n incomingCommits: [...incoming],\n remoteLatestCommitId: productionSha,\n mergedStagingCommitId: stagingSha,\n };\n}\n","export function reviewLabel(status: string) {\n return status === \"PASS\" ? \"审查通过\" : \"审查不通过\";\n}\nexport function inclusionLabel(\n branch: { expectedCommits?: string[]; missingCommits?: string[] },\n incomplete: boolean,\n) {\n if (incomplete || !branch.expectedCommits) return \"未完成检查\";\n const missing = branch.missingCommits || [];\n if (!missing.length) return \"已包含\";\n const shorts = missing.map((sha) => sha.slice(0, 7));\n return shorts.length <= 3\n ? \"未包含(\" + shorts.join(\"、\") + \")\"\n : \"未包含(\" + shorts.length + \" 个提交)\";\n}\nexport function uncoveredRequirementLabel(item: { key?: string; title?: string }) {\n return [item.key, item.title].filter(Boolean).join(\" \");\n}\nexport function uncoveredRequirementLines(\n items: Array<{ key?: string; title?: string }> | undefined,\n) {\n if (!items?.length) return [];\n return [\"需求未配置仓库:\", ...items.map((item) => \"- \" + uncoveredRequirementLabel(item))];\n}\nexport function readableReport(snapshot: any, result: string, createdAt: string, _runId: string) {\n const safe = (value: unknown) =>\n String(value ?? \"\")\n .replace(/\\|/g, \"\\\\|\")\n .replace(/[\\r\\n]+/g, \" \");\n return [\n \"# \" + snapshot.version.name + \" 发布完整性报告\",\n \"结果:\" + reviewLabel(result),\n \"审查时间:\" + createdAt,\n ...uncoveredRequirementLines(snapshot.uncoveredRequirements),\n ...snapshot.results.flatMap((repo: any) => [\n \"\",\n \"## \" + repo.alias,\n ...(repo.error ? [repo.error] : []),\n ...(repo.status === \"CONFLICT\" ? [\"staging 合入 production 存在冲突\"] : []),\n \"| 版本内分支 | staging 是否包含 |\",\n \"| --- | --- |\",\n ...repo.branches.map(\n (b: any) => `| ${safe(b.name)} | ${inclusionLabel(b, repo.status === \"ERROR\")} |`,\n ),\n ...((repo.nonVersionEntries || []).length\n ? [\n \"\",\n \"| staging 多出的非版本内分支 / commit ID | 结果 |\",\n \"| --- | --- |\",\n ...repo.nonVersionEntries.map(\n (entry: any) => `| ${safe(entry.name || entry.sha)} | ${safe(entry.reason)} |`,\n ),\n ]\n : []),\n ]),\n ].join(\"\\n\");\n}\n","import type { FastifyInstance } from \"fastify\";\nimport { spawn } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { ASSISTANT_VERSION } from \"@code-workspace/contracts\";\nimport { configureAutostart } from \"./autostart.ts\";\nimport { StateStore } from \"./state.ts\";\n\n/**\n * Where this copy of the package lives, so an upgrade can target the same install.\n *\n * `dist/main.js` sits one level under the package root; a source run (`tsx src/main.ts`) is two,\n * and `package.json` one more. Resolving by walking up avoids hard-coding the layout.\n */\nexport function packageRoot(entry: string): string {\n let directory = path.dirname(path.resolve(entry));\n for (let depth = 0; depth < 4; depth++) {\n if (fs.existsSync(path.join(directory, \"package.json\"))) return directory;\n directory = path.dirname(directory);\n }\n return path.dirname(path.dirname(path.resolve(entry)));\n}\n\n/** A source checkout must not be \"upgraded\": npm would overwrite the working tree. */\nexport function isGlobalInstall(root: string, prefix: string | undefined): boolean {\n if (!prefix) return false;\n const relative = path.relative(path.resolve(prefix), path.resolve(root));\n return Boolean(relative) && !relative.startsWith(\"..\") && !path.isAbsolute(relative);\n}\n\n/**\n * Whether this package sits in a global npm tree.\n *\n * The recorded prefix is authoritative when present. Older installs predate that record, so fall\n * back to the layout: a package directly under a `node_modules` whose own parent is not a project\n * (a project has a package.json next to its node_modules; a global prefix does not).\n */\nexport function looksGlobal(root: string): boolean {\n const modules = path.dirname(path.resolve(root));\n if (path.basename(modules) !== \"node_modules\") return false;\n return !fs.existsSync(path.join(path.dirname(modules), \"package.json\"));\n}\n\n/** Compare dot-separated numeric versions; prerelease tags sort below their release. */\nexport function isNewer(candidate: string, current: string): boolean {\n const parse = (value: string) =>\n value\n .split(\"-\")[0]\n .split(\".\")\n .map((part) => Number(part) || 0);\n const [a, b] = [parse(candidate), parse(current)];\n for (let index = 0; index < Math.max(a.length, b.length); index++) {\n const [left, right] = [a[index] ?? 0, b[index] ?? 0];\n if (left !== right) return left > right;\n }\n // Same numbers: a plain release outranks a prerelease of it.\n return !candidate.includes(\"-\") && current.includes(\"-\");\n}\n\n/**\n * Ask npm for the latest published version.\n *\n * The assistant checks the registry itself rather than trusting the workbench: a remote center\n * must not be able to talk this machine into running an arbitrary `npm install`.\n */\nexport async function latestPublished(): Promise<string> {\n // The registry answers 406 to the abbreviated-metadata Accept type on the /latest endpoint;\n // plain JSON is what npm itself falls back to. Ask for that and let it pick the encoding.\n const response = await fetch(\"https://registry.npmjs.org/cwm-assistant/latest\", {\n signal: AbortSignal.timeout(8000),\n headers: { Accept: \"application/json\" },\n });\n if (!response.ok) throw new Error(`无法查询 npm 上的最新版本(HTTP ${response.status})`);\n const data = (await response.json()) as { version?: string };\n if (!data.version) throw new Error(\"npm 返回的版本信息无效\");\n return data.version;\n}\n\ninterface UpgradeStatus {\n target: string;\n state: \"running\" | \"ok\" | \"failed\";\n error?: string;\n startedAt: string;\n}\nconst statusFile = (store: StateStore) => path.join(store.directory, \"upgrade.json\");\n\nfunction readStatus(store: StateStore): UpgradeStatus | undefined {\n try {\n return JSON.parse(fs.readFileSync(statusFile(store), \"utf8\")) as UpgradeStatus;\n } catch {\n return undefined;\n }\n}\n\nexport function registerUpgradeRoutes(\n app: FastifyInstance,\n store: StateStore,\n entry: string,\n options: { latest?: () => Promise<string> } = {},\n) {\n const latestVersion = options.latest || latestPublished;\n const root = packageRoot(entry);\n const prefix = () => store.state.installPrefix || process.env.npm_config_prefix;\n const global = isGlobalInstall(root, prefix()) || looksGlobal(root);\n\n app.get(\"/v1/upgrade\", async () => {\n let latest = \"\";\n let error = \"\";\n try {\n latest = await latestVersion();\n } catch (cause) {\n error = (cause as Error).message;\n }\n const status = readStatus(store);\n const busy = Object.values(store.state.jobs).some((job) => job.state === \"running\");\n return {\n version: ASSISTANT_VERSION,\n latest,\n available: Boolean(latest) && isNewer(latest, ASSISTANT_VERSION),\n // A source run (or an install we cannot locate) is not replaced from the page.\n upgradeable: global,\n reason: global ? \"\" : \"当前不是全局 npm 安装,请在终端升级\",\n error,\n busy,\n // A previous attempt that never reached the new version left this behind.\n previous: status && status.target !== ASSISTANT_VERSION ? status : undefined,\n };\n });\n\n app.post(\"/v1/upgrade\", async (_request, reply) => {\n if (!global) return reply.code(409).send({ error: \"当前不是全局 npm 安装,请在终端升级\" });\n if (Object.values(store.state.jobs).some((job) => job.state === \"running\"))\n return reply.code(409).send({ error: \"本地任务运行中,请等待完成后再升级\" });\n let latest: string;\n try {\n latest = await latestVersion();\n } catch (cause) {\n return reply.code(502).send({ error: (cause as Error).message });\n }\n if (!isNewer(latest, ASSISTANT_VERSION)) return { latest, started: false };\n\n fs.writeFileSync(\n statusFile(store),\n JSON.stringify({ target: latest, state: \"running\", startedAt: new Date().toISOString() }),\n { mode: 0o600 },\n );\n // Spawn before touching the login item: on macOS disabling it boots this very job out, which\n // would take the helper down with us were it still in our process group.\n const child = spawn(\n process.execPath,\n [\n path.join(root, \"scripts\", \"upgrade.mjs\"),\n \"--version\",\n latest,\n \"--state-dir\",\n store.directory,\n ],\n { detached: true, stdio: \"ignore\", windowsHide: true, cwd: root },\n );\n child.unref();\n // KeepAlive would otherwise restart the old build mid-install. postinstall re-registers it.\n if (store.state.autostart)\n await configureAutostart(false, store.directory, entry).catch(() => {});\n // Let the response flush before the daemon goes away.\n setTimeout(() => process.exit(0), 300);\n return { latest, started: true };\n });\n}\n"],"mappings":"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","names":["spawn","fs","os","path","value","IsObject","IsArray","IsUndefined","IsNumber","TypeSystemPolicy","IsObject","IsArray","IsNumber","IsUndefined","value","IsArray","IsAsyncIterator","IsBigInt","IsBoolean","IsDate","IsFunction","IsIterator","IsNull","IsNumber","IsObject","IsRegExp","IsString","IsSymbol","IsUndefined","IsUint8Array","IsArray","IsBoolean","IsBigInt","IsAsyncIterator","IsDate","IsFunction","IsIterator","IsNull","IsNumber","IsObject","IsAny","IsArgument","IsArray","IsAsyncIterator","IsBigInt","IsBoolean","IsComputed","IsConstructor","IsDate","IsFunction","IsInteger","IsIntersect","IsIterator","IsKind","IsKindOf","IsLiteral","IsLiteralValue","IsMappedKey","IsMappedResult","IsNever","IsNot","IsNull","IsNumber","IsObject","IsOptional","IsPromise","IsReadonly","IsRecord","IsRef","IsRegExp","IsSchema","IsString","IsSymbol","IsTemplateLiteral","IsThis","IsTransform","IsTuple","IsUint8Array","IsUndefined","IsUnion","IsUnknown","IsUnsafe","IsVoid","IsSchema","IsReadonly","IsOptional","IsAny","IsKindOf","IsArgument","IsArray","IsAsyncIterator","IsBigInt","IsBoolean","IsComputed","IsConstructor","IsDate","IsFunction","IsInteger","IsIntersect","IsTransform","IsIterator","IsLiteral","IsLiteralValue","IsMappedKey","IsMappedResult","IsNever","IsNot","IsNull","IsNumber","IsObject","IsPromise","IsRecord","IsRef","IsRegExp","IsString","IsSymbol","IsTemplateLiteral","IsThis","IsTuple","IsUndefined","IsUnion","IsUint8Array","IsUnknown","IsUnsafe","IsVoid","IsKind","Array","range","pattern","Boolean","Number","String","Boolean","Number","String","Visit","schema","IsNumber","IsBigInt","IsString","IsBoolean","FromUnion","IsNumber","FromUnion","IsArray","IsObject","Object","Promise","FromProperties","FromMappedResult","FromMappedResult","FromRest","FromProperties","IsFunction","IsAsyncIterator","IsIterator","IsObject","Object","IsArray","Array","Promise","FromProperties","FromMappedResult","IsObject","RemoveOptionalFromType","RemoveOptionalFromRest","FromIntersect","FromRest","FromUnion","FromRest","FromIntersect","FromUnion","FromTuple","FromArray","FromProperties","IsArray","IsObject","FromComputed","FromRef","Number","FromProperties","FromMappedResult","Object","Date","Symbol","Uint8Array","FromArray","FromProperties","Uint8Array","Date","Object","Symbol","ExtendsResult","FromArray","Visit","FromIntersect","FromLiteral","Number","FromPromise","String","FromTemplateLiteral","FromTuple","FromUnion","FromProperties","FromMappedResult","FromMappedKey","FromProperties","FromMappedResult","FromProperties","FromMappedResult","Object","IsBoolean","IsNumber","IsRegExp","IsString","RecordKey","String","Number","RecordValue","FromConstructor","FromFunction","FromIntersect","FromUnion","FromTuple","FromArray","FromAsyncIterator","FromIterator","FromPromise","FromObject","FromProperties","Object","FromRecord","RecordKey","RecordValue","FromProperty","IsFunction","IsArray","IsAsyncIterator","IsIterator","IsObject","FromTemplateLiteral","FromRest","FromProperties","FromMappedResult","FromIntersect","FromUnion","FromProperty","FromProperties","FromObject","Object","result","IsObject","FromPropertyKey","FromPropertyKeys","FromMappedKey","FromProperties","FromMappedResult","FromIntersect","FromUnion","FromProperties","FromObject","Type","Object","UnionFromPropertyKeys","result","IsObject","FromPropertyKey","FromPropertyKeys","FromMappedKey","FromComputed","FromRef","FromProperties","FromObject","Object","FromRest","IsObject","IsBigInt","IsBoolean","IsNull","IsNumber","IsString","IsSymbol","IsUndefined","FromProperties","FromMappedResult","FromComputed","FromRef","FromProperties","FromObject","Object","FromRest","IsObject","IsBigInt","IsBoolean","IsNull","IsNumber","IsString","IsSymbol","IsUndefined","FromProperties","FromMappedResult","FromType","FromComputed","FromArray","Array","FromAsyncIterator","FromConstructor","FromTypes","FromFunction","FromIntersect","FromIterator","FromObject","Object","FromRecord","RecordValue","FromTuple","FromUnion","IsArray","IsAsyncIterator","IsFunction","IsIterator","IsObject","IsFunction","RegExp","IsFunction","type_exports","Array","Boolean","Date","Number","Object","Promise","RegExp","String","Symbol","Uint8Array","type_exports","lines","randomBytes","randomUUID","path","fs","path","path","fs","spawn","path","execFileSync","fs","os","path","fs","os","path","spawn","execFileSync","spawn","fs","path","path","fs","execFileSync","spawn","path","os","fs","execFileSync","path","os","fs","spawn","fs","os","path","spawn","path","fs","command","os","spawn","randomUUID","fs","path","inside","path","fs","randomUUID","fs","os","path","fs","path","inside","randomUUID","fs","os","path","randomUUID","randomUUID","path","os","fs","randomUUID","fs","path","fs","path","git","os","fs","path","path","fs","path","fs","path","randomUUID","fs","path","randomUUID","fs","path","fs","path","randomUUID","item","randomUUID","fs","path","folder","os","path","path","fs","path","fs","os","path","lines","path","fs","stat","fs","path","fs","stat","path","fs","path","fs","path","fs","stat","fs","fs","path","fs","path","git","fs","path","git","path","os","path","fs","path","git","ref","git","fs","path","result","path","spawn","fs","path","path","fs","spawn","path","randomBytes","randomUUID","path","fs","spawn","os"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../../../node_modules/@sinclair/typebox/build/esm/type/guard/value.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/clone/value.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/clone/type.mjs","../../../node_modules/@sinclair/typebox/build/esm/value/guard/guard.mjs","../../../node_modules/@sinclair/typebox/build/esm/system/policy.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/create/immutable.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/create/type.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/error/error.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/symbols/symbols.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/guard/kind.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/guard/type.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/patterns/patterns.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/sets/set.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/any/any.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/array/array.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/argument/argument.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/async-iterator/async-iterator.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/computed/computed.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/discard/discard.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/never/never.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/mapped/mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/constructor/constructor.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/function/function.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/union/union-create.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/union/union-evaluated.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/union/union.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/template-literal/parse.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/template-literal/finite.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/template-literal/generate.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/literal/literal.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/boolean/boolean.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/bigint/bigint.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/number/number.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/string/string.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/template-literal/syntax.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/template-literal/pattern.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/template-literal/union.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/template-literal/template-literal.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-property-keys.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/indexed/indexed.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-key.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/iterator/iterator.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/object/object.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/promise/promise.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/readonly/readonly.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/readonly/readonly-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/tuple/tuple.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/mapped/mapped.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/optional/optional.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/optional/optional-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-create.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-evaluated.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intersect/intersect.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/ref/ref.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/awaited/awaited.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-property-keys.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/keyof/keyof.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/composite/composite.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/date/date.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/null/null.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/symbol/symbol.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/undefined/undefined.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/uint8array/uint8array.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/unknown/unknown.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/const/const.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/constructor-parameters/constructor-parameters.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/enum/enum.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/extends/extends-check.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/extends/extends.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-key.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-template-literal.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/exclude/exclude.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-template-literal.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/extract/extract.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/instance-type/instance-type.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/readonly-optional/readonly-optional.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/record/record.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/instantiate/instantiate.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/integer/integer.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic-from-mapped-key.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/capitalize.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/lowercase.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/uncapitalize.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/uppercase.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/omit/omit.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-key.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/pick/pick.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-key.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/partial/partial.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/partial/partial-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/required/required.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/required/required-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/module/compute.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/module/module.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/not/not.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/parameters/parameters.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/recursive/recursive.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/regexp/regexp.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/rest/rest.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/return-type/return-type.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/transform/transform.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/unsafe/unsafe.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/void/void.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/type/type.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/type/index.mjs","../../../packages/contracts/src/assistant.ts","../../../packages/contracts/src/index.ts","../../../packages/runtime/src/git/commands.ts","../../../packages/runtime/src/git/context.ts","../src/autostart.ts","../src/server.ts","../../../packages/runtime/src/assistant/tokens.ts","../src/delete-route.ts","../../../packages/runtime/src/workspaces/delete.ts","../../../packages/runtime/src/platform/directory-picker.ts","../../../packages/runtime/src/tools/commands.ts","../../../packages/runtime/src/tools/cursor-agent.ts","../../../packages/runtime/src/tools/process.ts","../../../packages/runtime/src/tools/windows.ts","../../../packages/runtime/src/tools/launch.ts","../../../packages/runtime/src/platform/uri.ts","../../../packages/runtime/src/workspaces/create.ts","../src/routes.ts","../src/paths.ts","../src/state.ts","../src/mount-receipts.ts","../src/workspace-files.ts","../src/adopt-routes.ts","../src/jobs.ts","../../../packages/runtime/src/workspaces/edit.ts","../src/origins.ts","../src/query-routes.ts","../../../packages/runtime/src/agent-sessions/service.ts","../../../packages/runtime/src/agent-sessions/matching.ts","../../../packages/runtime/src/agent-sessions/providers/claude.ts","../../../packages/runtime/src/agent-sessions/storage.ts","../../../packages/runtime/src/agent-sessions/status.ts","../../../packages/runtime/src/agent-sessions/providers/codex.ts","../../../packages/runtime/src/agent-sessions/providers/cursor.ts","../../../packages/runtime/src/agent-sessions/sqlite-reader.ts","../../../packages/runtime/src/agent-sessions/providers/opencode.ts","../../../packages/runtime/src/git/commits.ts","../src/review-route.ts","../../../packages/runtime/src/reviews/audit.ts","../../../packages/runtime/src/reviews/branch-scope.ts","../../../packages/runtime/src/reviews/report-format.ts","../src/upgrade.ts"],"sourcesContent":["import { spawn } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { createInterface } from \"node:readline/promises\";\nimport { ASSISTANT_PORT, ASSISTANT_VERSION } from \"@code-workspace/contracts\";\nimport { runGit } from \"../../../packages/runtime/src/git/commands.ts\";\nimport { gitExecution } from \"../../../packages/runtime/src/git/context.ts\";\nimport { configureAutostart, startAutostart } from \"./autostart.ts\";\nimport { buildAssistant } from \"./server.ts\";\nimport { StateStore, defaultStateDirectory } from \"./state.ts\";\n\nexport async function cli(args: string[], entry: string) {\n if ([\"-v\", \"--version\", \"version\"].includes(args[0])) {\n console.log(ASSISTANT_VERSION);\n return;\n }\n const dirIndex = args.indexOf(\"--state-dir\");\n const directory = dirIndex >= 0 ? path.resolve(args[dirIndex + 1]) : defaultStateDirectory();\n const command = args[0] || \"status\";\n const store = new StateStore(directory);\n const control = async (action: string) => {\n const response = await fetch(`http://127.0.0.1:${ASSISTANT_PORT}/control`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: \"Bearer \" + store.state.controlKey,\n },\n body: JSON.stringify({ action }),\n signal: AbortSignal.timeout(3000),\n });\n const result = (await response.json()) as { error?: string; busy?: boolean; code?: string };\n if (!response.ok) throw new Error(result.error || \"助手控制请求失败\");\n return result;\n };\n async function start() {\n try {\n await control(\"status\");\n console.log(\"Workspace 助手已运行\");\n return;\n } catch {}\n if (store.state.autostart) await startAutostart();\n else {\n const log = fs.openSync(path.join(directory, \"assistant.log\"), \"a\", 0o600);\n const child = spawn(process.execPath, [entry, \"serve\", \"--state-dir\", directory], {\n detached: true,\n windowsHide: true,\n stdio: [\"ignore\", log, log],\n });\n child.unref();\n fs.closeSync(log);\n }\n const deadline = Date.now() + 10_000;\n while (Date.now() < deadline) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n try {\n await control(\"status\");\n console.log(\"Workspace 助手已启动\");\n return;\n } catch {}\n }\n throw new Error(\"启动失败,请运行 cwm-assistant logs 检查端口和运行环境\");\n }\n if (command === \"serve\") {\n const lock = path.join(directory, \"process.lock\");\n if (fs.existsSync(lock)) {\n const pid = Number(fs.readFileSync(lock, \"utf8\"));\n try {\n process.kill(pid, 0);\n throw new Error(\"Workspace 助手已运行\");\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ESRCH\") throw error;\n fs.unlinkSync(lock);\n }\n }\n fs.writeFileSync(lock, String(process.pid), { flag: \"wx\", mode: 0o600 });\n store.reload();\n store.recover();\n const { app, jobs } = await buildAssistant(store, {}, entry);\n app.post(\"/control\", async (request, reply) => {\n const action = (request.body as { action: string }).action;\n if (action === \"status\")\n return {\n running: true,\n busy: jobs.busy(),\n version: store.state.identity.version,\n port: ASSISTANT_PORT,\n autostart: store.state.autostart,\n };\n if (action === \"pair\") return { code: store.pairingCode() };\n if (action === \"stop\") {\n if (jobs.busy())\n return reply.code(409).send({ error: \"本地任务运行中,请等待完成或取消任务\" });\n setTimeout(() => void app.close().then(() => process.exit(0)), 100);\n return { ok: true };\n }\n return reply.code(400).send({ error: \"控制操作无效\" });\n });\n app.addHook(\"onClose\", async () => {\n fs.rmSync(lock, { force: true });\n });\n try {\n await app.listen({ host: \"127.0.0.1\", port: ASSISTANT_PORT });\n } catch (error) {\n fs.rmSync(lock, { force: true });\n throw error;\n }\n for (const signal of [\"SIGTERM\", \"SIGINT\"] as const)\n process.on(signal, () => void app.close().then(() => process.exit(0)));\n return;\n }\n if (command === \"start\") return start();\n if (command === \"install\") {\n const prefixIndex = args.indexOf(\"--prefix\");\n // Kept in a local as well: the reloads below rebuild state from disk, and a failed autostart\n // registration skips the branch that would otherwise write this back.\n const installPrefix = prefixIndex >= 0 ? args[prefixIndex + 1] : store.state.installPrefix;\n if (installPrefix) store.state.installPrefix = installPrefix;\n // Driven by scripts/postinstall.mjs: the package was just (re)installed, so make it live\n // without asking the user anything. Working directory and workbench trust are settled later,\n // in the browser dialog.\n const running = await control(\"status\").catch(() => undefined);\n if (running?.busy) {\n console.error(\n \"本地任务运行中,已保留当前进程;任务结束后运行 cwm-assistant restart 完成更新。\",\n );\n return;\n }\n if (running) {\n await configureAutostart(false, directory, entry).catch(() => {});\n await control(\"stop\").catch(() => {});\n const deadline = Date.now() + 10_000;\n while (fs.existsSync(path.join(directory, \"process.lock\")) && Date.now() < deadline) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n }\n let autostart = false;\n try {\n await configureAutostart(true, directory, entry);\n autostart = true;\n } catch {\n // A root-owned HOME or a locked-down policy can reject LaunchAgents. A detached process\n // still gives the user a working assistant; the dialog can retry the login item later.\n console.error(\"未能注册登录自启动,助手将只作为后台进程运行。\");\n }\n store.reload();\n store.state.autostart = autostart;\n if (installPrefix) store.state.installPrefix = installPrefix;\n store.save();\n await start();\n return;\n }\n if (command === \"status\") {\n try {\n console.log(JSON.stringify(await control(\"status\"), null, 2));\n } catch {\n console.log(\"Workspace 助手未运行\");\n process.exitCode = 1;\n }\n return;\n }\n if (command === \"pair\") {\n console.log(\"配对码(5 分钟有效):\" + (await control(\"pair\")).code);\n return;\n }\n if (command === \"logs\") {\n const file = path.join(directory, \"assistant.log\");\n console.log(\n fs.existsSync(file)\n ? fs.readFileSync(file, \"utf8\").split(\"\\n\").slice(-100).join(\"\\n\")\n : \"暂无日志\",\n );\n return;\n }\n if ([\"stop\", \"restart\", \"uninstall\"].includes(command)) {\n const running = await control(\"status\").catch(() => undefined);\n if (running?.busy) throw new Error(\"本地任务运行中,暂不能停止或更新\");\n const restoreAutostart = store.state.autostart && command === \"restart\";\n if (store.state.autostart) {\n await configureAutostart(false, directory, entry);\n }\n if (running) {\n await control(\"stop\").catch(() => {});\n const deadline = Date.now() + 10_000;\n while (fs.existsSync(path.join(directory, \"process.lock\")) && Date.now() < deadline) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n if (fs.existsSync(path.join(directory, \"process.lock\")))\n throw new Error(\"助手尚未停止,请稍后重试;未修改本地状态\");\n }\n store.reload();\n store.state.autostart = restoreAutostart;\n store.save();\n if (restoreAutostart) await configureAutostart(true, directory, entry);\n if (command === \"restart\") await start();\n if (command === \"uninstall\") {\n store.state.bindings = [];\n delete store.state.pairing;\n store.save();\n console.log(\n \"助手已停止并撤销配对;项目文件已保留。可执行 npm uninstall -g cwm-assistant 移除程序。 \",\n );\n }\n return;\n }\n if (command === \"autostart\") {\n if (![\"enable\", \"disable\"].includes(args[1])) throw new Error(\"请选择 enable 或 disable\");\n if (await control(\"status\").catch(() => undefined))\n throw new Error(\"请先运行 cwm-assistant stop,再修改自启动设置\");\n const enabled = args[1] === \"enable\";\n await configureAutostart(enabled, directory, entry);\n store.state.autostart = enabled;\n store.save();\n return;\n }\n if (command === \"doctor\") {\n const gitVersion = await gitExecution\n .run({ executable: store.state.git }, () => runGit(os.homedir(), [\"--version\"]))\n .catch((error) => \"不可用:\" + (error as Error).message);\n console.log(\n JSON.stringify(\n {\n node: process.version,\n nodePath: process.execPath,\n entryExists: fs.existsSync(entry),\n git: store.state.git,\n gitVersion,\n platform: process.platform,\n rootExists: Boolean(store.state.root && fs.existsSync(store.state.root)),\n configuredWorkbenches: Object.keys(store.state.workbenches),\n autostart: store.state.autostart,\n process: await control(\"status\").catch(() => \"未运行\"),\n },\n null,\n 2,\n ),\n );\n return;\n }\n if (command === \"setup\") {\n const running = await control(\"status\").catch(() => undefined);\n if (running)\n throw new Error(\n \"助手已经运行。如需新浏览器配对,请执行 cwm-assistant pair;修改服务配置前请先 stop。\",\n );\n // --root/--yes make setup a single non-interactive command:\n // cwm-assistant setup --root ~/code-workspace --yes\n // Workbench origins are not recorded here: the assistant trusts any web workbench that\n // answers its identity endpoint with a valid center key.\n const flag = (name: string) => {\n const index = args.indexOf(name);\n return index >= 0 ? args[index + 1] : undefined;\n };\n const rootArg = flag(\"--root\");\n const assumeYes = args.includes(\"--yes\");\n const wantAutostart = args.includes(\"--autostart\");\n const input = createInterface({ input: process.stdin, output: process.stdout });\n const ask = async (question: string) =>\n assumeYes ? \"\" : (await input.question(question)).trim();\n try {\n if (!assumeYes) {\n console.log(\"Node.js:\" + process.version);\n try {\n console.log(\n await gitExecution.run({ executable: store.state.git }, () =>\n runGit(os.homedir(), [\"--version\"]),\n ),\n );\n } catch {\n console.log(\"尚未检测到 Git,完成配对后请在网页配置 Git 的绝对路径。\");\n }\n }\n if (rootArg) {\n if (!path.isAbsolute(rootArg) || !fs.statSync(rootArg).isDirectory())\n throw new Error(\"工作目录必须是已存在的绝对路径\");\n store.state.root = fs.realpathSync(rootArg);\n }\n const auto =\n wantAutostart || (!assumeYes && (await ask(\"登录电脑时自动启动?[Y/n] \")) !== \"n\");\n store.save();\n if (auto) {\n store.state.autostart = true;\n store.save();\n try {\n await configureAutostart(true, directory, entry);\n } catch (error) {\n store.reload();\n store.state.autostart = false;\n store.save();\n throw error;\n }\n }\n await start();\n console.log(\"请返回工作台页面,助手会自动完成连接。\");\n } finally {\n input.close();\n }\n return;\n }\n throw new Error(\n \"命令:setup | install | start | stop | restart | status | doctor | pair | autostart enable/disable | logs | uninstall\",\n );\n}\n","// --------------------------------------------------------------------------\n// PropertyKey\n// --------------------------------------------------------------------------\n/** Returns true if this value has this property key */\nexport function HasPropertyKey(value, key) {\n return key in value;\n}\n// --------------------------------------------------------------------------\n// Object Instances\n// --------------------------------------------------------------------------\n/** Returns true if this value is an async iterator */\nexport function IsAsyncIterator(value) {\n return IsObject(value) && !IsArray(value) && !IsUint8Array(value) && Symbol.asyncIterator in value;\n}\n/** Returns true if this value is an array */\nexport function IsArray(value) {\n return Array.isArray(value);\n}\n/** Returns true if this value is bigint */\nexport function IsBigInt(value) {\n return typeof value === 'bigint';\n}\n/** Returns true if this value is a boolean */\nexport function IsBoolean(value) {\n return typeof value === 'boolean';\n}\n/** Returns true if this value is a Date object */\nexport function IsDate(value) {\n return value instanceof globalThis.Date;\n}\n/** Returns true if this value is a function */\nexport function IsFunction(value) {\n return typeof value === 'function';\n}\n/** Returns true if this value is an iterator */\nexport function IsIterator(value) {\n return IsObject(value) && !IsArray(value) && !IsUint8Array(value) && Symbol.iterator in value;\n}\n/** Returns true if this value is null */\nexport function IsNull(value) {\n return value === null;\n}\n/** Returns true if this value is number */\nexport function IsNumber(value) {\n return typeof value === 'number';\n}\n/** Returns true if this value is an object */\nexport function IsObject(value) {\n return typeof value === 'object' && value !== null;\n}\n/** Returns true if this value is RegExp */\nexport function IsRegExp(value) {\n return value instanceof globalThis.RegExp;\n}\n/** Returns true if this value is string */\nexport function IsString(value) {\n return typeof value === 'string';\n}\n/** Returns true if this value is symbol */\nexport function IsSymbol(value) {\n return typeof value === 'symbol';\n}\n/** Returns true if this value is a Uint8Array */\nexport function IsUint8Array(value) {\n return value instanceof globalThis.Uint8Array;\n}\n/** Returns true if this value is undefined */\nexport function IsUndefined(value) {\n return value === undefined;\n}\n","import * as ValueGuard from '../guard/value.mjs';\nfunction ArrayType(value) {\n return value.map((value) => Visit(value));\n}\nfunction DateType(value) {\n return new Date(value.getTime());\n}\nfunction Uint8ArrayType(value) {\n return new Uint8Array(value);\n}\nfunction RegExpType(value) {\n return new RegExp(value.source, value.flags);\n}\nfunction ObjectType(value) {\n const result = {};\n for (const key of Object.getOwnPropertyNames(value)) {\n result[key] = Visit(value[key]);\n }\n for (const key of Object.getOwnPropertySymbols(value)) {\n result[key] = Visit(value[key]);\n }\n return result;\n}\n// prettier-ignore\nfunction Visit(value) {\n return (ValueGuard.IsArray(value) ? ArrayType(value) :\n ValueGuard.IsDate(value) ? DateType(value) :\n ValueGuard.IsUint8Array(value) ? Uint8ArrayType(value) :\n ValueGuard.IsRegExp(value) ? RegExpType(value) :\n ValueGuard.IsObject(value) ? ObjectType(value) :\n value);\n}\n/** Clones a value */\nexport function Clone(value) {\n return Visit(value);\n}\n","import { Clone } from './value.mjs';\n/** Clones a Rest */\nexport function CloneRest(schemas) {\n return schemas.map((schema) => CloneType(schema));\n}\n/** Clones a Type */\nexport function CloneType(schema, options) {\n return options === undefined ? Clone(schema) : Clone({ ...options, ...schema });\n}\n","// --------------------------------------------------------------------------\n// Iterators\n// --------------------------------------------------------------------------\n/** Returns true if this value is an async iterator */\nexport function IsAsyncIterator(value) {\n return IsObject(value) && globalThis.Symbol.asyncIterator in value;\n}\n/** Returns true if this value is an iterator */\nexport function IsIterator(value) {\n return IsObject(value) && globalThis.Symbol.iterator in value;\n}\n// --------------------------------------------------------------------------\n// Object Instances\n// --------------------------------------------------------------------------\n/** Returns true if this value is not an instance of a class */\nexport function IsStandardObject(value) {\n return IsObject(value) && (globalThis.Object.getPrototypeOf(value) === Object.prototype || globalThis.Object.getPrototypeOf(value) === null);\n}\n/** Returns true if this value is an instance of a class */\nexport function IsInstanceObject(value) {\n return IsObject(value) && !IsArray(value) && IsFunction(value.constructor) && value.constructor.name !== 'Object';\n}\n// --------------------------------------------------------------------------\n// JavaScript\n// --------------------------------------------------------------------------\n/** Returns true if this value is a Promise */\nexport function IsPromise(value) {\n return value instanceof globalThis.Promise;\n}\n/** Returns true if this value is a Date */\nexport function IsDate(value) {\n return value instanceof Date && globalThis.Number.isFinite(value.getTime());\n}\n/** Returns true if this value is an instance of Map<K, T> */\nexport function IsMap(value) {\n return value instanceof globalThis.Map;\n}\n/** Returns true if this value is an instance of Set<T> */\nexport function IsSet(value) {\n return value instanceof globalThis.Set;\n}\n/** Returns true if this value is RegExp */\nexport function IsRegExp(value) {\n return value instanceof globalThis.RegExp;\n}\n/** Returns true if this value is a typed array */\nexport function IsTypedArray(value) {\n return globalThis.ArrayBuffer.isView(value);\n}\n/** Returns true if the value is a Int8Array */\nexport function IsInt8Array(value) {\n return value instanceof globalThis.Int8Array;\n}\n/** Returns true if the value is a Uint8Array */\nexport function IsUint8Array(value) {\n return value instanceof globalThis.Uint8Array;\n}\n/** Returns true if the value is a Uint8ClampedArray */\nexport function IsUint8ClampedArray(value) {\n return value instanceof globalThis.Uint8ClampedArray;\n}\n/** Returns true if the value is a Int16Array */\nexport function IsInt16Array(value) {\n return value instanceof globalThis.Int16Array;\n}\n/** Returns true if the value is a Uint16Array */\nexport function IsUint16Array(value) {\n return value instanceof globalThis.Uint16Array;\n}\n/** Returns true if the value is a Int32Array */\nexport function IsInt32Array(value) {\n return value instanceof globalThis.Int32Array;\n}\n/** Returns true if the value is a Uint32Array */\nexport function IsUint32Array(value) {\n return value instanceof globalThis.Uint32Array;\n}\n/** Returns true if the value is a Float32Array */\nexport function IsFloat32Array(value) {\n return value instanceof globalThis.Float32Array;\n}\n/** Returns true if the value is a Float64Array */\nexport function IsFloat64Array(value) {\n return value instanceof globalThis.Float64Array;\n}\n/** Returns true if the value is a BigInt64Array */\nexport function IsBigInt64Array(value) {\n return value instanceof globalThis.BigInt64Array;\n}\n/** Returns true if the value is a BigUint64Array */\nexport function IsBigUint64Array(value) {\n return value instanceof globalThis.BigUint64Array;\n}\n// --------------------------------------------------------------------------\n// PropertyKey\n// --------------------------------------------------------------------------\n/** Returns true if this value has this property key */\nexport function HasPropertyKey(value, key) {\n return key in value;\n}\n// --------------------------------------------------------------------------\n// Standard\n// --------------------------------------------------------------------------\n/** Returns true of this value is an object type */\nexport function IsObject(value) {\n return value !== null && typeof value === 'object';\n}\n/** Returns true if this value is an array, but not a typed array */\nexport function IsArray(value) {\n return globalThis.Array.isArray(value) && !globalThis.ArrayBuffer.isView(value);\n}\n/** Returns true if this value is an undefined */\nexport function IsUndefined(value) {\n return value === undefined;\n}\n/** Returns true if this value is an null */\nexport function IsNull(value) {\n return value === null;\n}\n/** Returns true if this value is an boolean */\nexport function IsBoolean(value) {\n return typeof value === 'boolean';\n}\n/** Returns true if this value is an number */\nexport function IsNumber(value) {\n return typeof value === 'number';\n}\n/** Returns true if this value is an integer */\nexport function IsInteger(value) {\n return globalThis.Number.isInteger(value);\n}\n/** Returns true if this value is bigint */\nexport function IsBigInt(value) {\n return typeof value === 'bigint';\n}\n/** Returns true if this value is string */\nexport function IsString(value) {\n return typeof value === 'string';\n}\n/** Returns true if this value is a function */\nexport function IsFunction(value) {\n return typeof value === 'function';\n}\n/** Returns true if this value is a symbol */\nexport function IsSymbol(value) {\n return typeof value === 'symbol';\n}\n/** Returns true if this value is a value type such as number, string, boolean */\nexport function IsValueType(value) {\n // prettier-ignore\n return (IsBigInt(value) ||\n IsBoolean(value) ||\n IsNull(value) ||\n IsNumber(value) ||\n IsString(value) ||\n IsSymbol(value) ||\n IsUndefined(value));\n}\n","import { IsObject, IsArray, IsNumber, IsUndefined } from '../value/guard/index.mjs';\nexport var TypeSystemPolicy;\n(function (TypeSystemPolicy) {\n // ------------------------------------------------------------------\n // TypeSystemPolicy: Instancing\n // ------------------------------------------------------------------\n /**\n * Configures the instantiation behavior of TypeBox types. The `default` option assigns raw JavaScript\n * references for embedded types, which may cause side effects if type properties are explicitly updated\n * outside the TypeBox type builder. The `clone` option creates copies of any shared types upon creation,\n * preventing unintended side effects. The `freeze` option applies `Object.freeze()` to the type, making\n * it fully readonly and immutable. Implementations should use `default` whenever possible, as it is the\n * fastest way to instantiate types. The default setting is `default`.\n */\n TypeSystemPolicy.InstanceMode = 'default';\n // ------------------------------------------------------------------\n // TypeSystemPolicy: Checking\n // ------------------------------------------------------------------\n /** Sets whether TypeBox should assert optional properties using the TypeScript `exactOptionalPropertyTypes` assertion policy. The default is `false` */\n TypeSystemPolicy.ExactOptionalPropertyTypes = false;\n /** Sets whether arrays should be treated as a kind of objects. The default is `false` */\n TypeSystemPolicy.AllowArrayObject = false;\n /** Sets whether `NaN` or `Infinity` should be treated as valid numeric values. The default is `false` */\n TypeSystemPolicy.AllowNaN = false;\n /** Sets whether `null` should validate for void types. The default is `false` */\n TypeSystemPolicy.AllowNullVoid = false;\n /** Checks this value using the ExactOptionalPropertyTypes policy */\n function IsExactOptionalProperty(value, key) {\n return TypeSystemPolicy.ExactOptionalPropertyTypes ? key in value : value[key] !== undefined;\n }\n TypeSystemPolicy.IsExactOptionalProperty = IsExactOptionalProperty;\n /** Checks this value using the AllowArrayObjects policy */\n function IsObjectLike(value) {\n const isObject = IsObject(value);\n return TypeSystemPolicy.AllowArrayObject ? isObject : isObject && !IsArray(value);\n }\n TypeSystemPolicy.IsObjectLike = IsObjectLike;\n /** Checks this value as a record using the AllowArrayObjects policy */\n function IsRecordLike(value) {\n return IsObjectLike(value) && !(value instanceof Date) && !(value instanceof Uint8Array);\n }\n TypeSystemPolicy.IsRecordLike = IsRecordLike;\n /** Checks this value using the AllowNaN policy */\n function IsNumberLike(value) {\n return TypeSystemPolicy.AllowNaN ? IsNumber(value) : Number.isFinite(value);\n }\n TypeSystemPolicy.IsNumberLike = IsNumberLike;\n /** Checks this value using the AllowVoidNull policy */\n function IsVoidLike(value) {\n const isUndefined = IsUndefined(value);\n return TypeSystemPolicy.AllowNullVoid ? isUndefined || value === null : isUndefined;\n }\n TypeSystemPolicy.IsVoidLike = IsVoidLike;\n})(TypeSystemPolicy || (TypeSystemPolicy = {}));\n","import * as ValueGuard from '../guard/value.mjs';\nfunction ImmutableArray(value) {\n return globalThis.Object.freeze(value).map((value) => Immutable(value));\n}\nfunction ImmutableDate(value) {\n return value;\n}\nfunction ImmutableUint8Array(value) {\n return value;\n}\nfunction ImmutableRegExp(value) {\n return value;\n}\nfunction ImmutableObject(value) {\n const result = {};\n for (const key of Object.getOwnPropertyNames(value)) {\n result[key] = Immutable(value[key]);\n }\n for (const key of Object.getOwnPropertySymbols(value)) {\n result[key] = Immutable(value[key]);\n }\n return globalThis.Object.freeze(result);\n}\n/** Specialized deep immutable value. Applies freeze recursively to the given value */\n// prettier-ignore\nexport function Immutable(value) {\n return (ValueGuard.IsArray(value) ? ImmutableArray(value) :\n ValueGuard.IsDate(value) ? ImmutableDate(value) :\n ValueGuard.IsUint8Array(value) ? ImmutableUint8Array(value) :\n ValueGuard.IsRegExp(value) ? ImmutableRegExp(value) :\n ValueGuard.IsObject(value) ? ImmutableObject(value) :\n value);\n}\n","import { TypeSystemPolicy } from '../../system/policy.mjs';\nimport { Immutable } from './immutable.mjs';\nimport { Clone } from '../clone/value.mjs';\n/** Creates TypeBox schematics using the configured InstanceMode */\nexport function CreateType(schema, options) {\n const result = options !== undefined ? { ...options, ...schema } : schema;\n switch (TypeSystemPolicy.InstanceMode) {\n case 'freeze':\n return Immutable(result);\n case 'clone':\n return Clone(result);\n default:\n return result;\n }\n}\n","/** The base Error type thrown for all TypeBox exceptions */\nexport class TypeBoxError extends Error {\n constructor(message) {\n super(message);\n }\n}\n","/** Symbol key applied to transform types */\nexport const TransformKind = Symbol.for('TypeBox.Transform');\n/** Symbol key applied to readonly types */\nexport const ReadonlyKind = Symbol.for('TypeBox.Readonly');\n/** Symbol key applied to optional types */\nexport const OptionalKind = Symbol.for('TypeBox.Optional');\n/** Symbol key applied to types */\nexport const Hint = Symbol.for('TypeBox.Hint');\n/** Symbol key applied to types */\nexport const Kind = Symbol.for('TypeBox.Kind');\n","import * as ValueGuard from './value.mjs';\nimport { Kind, Hint, TransformKind, ReadonlyKind, OptionalKind } from '../symbols/index.mjs';\n/** `[Kind-Only]` Returns true if this value has a Readonly symbol */\nexport function IsReadonly(value) {\n return ValueGuard.IsObject(value) && value[ReadonlyKind] === 'Readonly';\n}\n/** `[Kind-Only]` Returns true if this value has a Optional symbol */\nexport function IsOptional(value) {\n return ValueGuard.IsObject(value) && value[OptionalKind] === 'Optional';\n}\n/** `[Kind-Only]` Returns true if the given value is TAny */\nexport function IsAny(value) {\n return IsKindOf(value, 'Any');\n}\n/** `[Kind-Only]` Returns true if the given value is TArgument */\nexport function IsArgument(value) {\n return IsKindOf(value, 'Argument');\n}\n/** `[Kind-Only]` Returns true if the given value is TArray */\nexport function IsArray(value) {\n return IsKindOf(value, 'Array');\n}\n/** `[Kind-Only]` Returns true if the given value is TAsyncIterator */\nexport function IsAsyncIterator(value) {\n return IsKindOf(value, 'AsyncIterator');\n}\n/** `[Kind-Only]` Returns true if the given value is TBigInt */\nexport function IsBigInt(value) {\n return IsKindOf(value, 'BigInt');\n}\n/** `[Kind-Only]` Returns true if the given value is TBoolean */\nexport function IsBoolean(value) {\n return IsKindOf(value, 'Boolean');\n}\n/** `[Kind-Only]` Returns true if the given value is TComputed */\nexport function IsComputed(value) {\n return IsKindOf(value, 'Computed');\n}\n/** `[Kind-Only]` Returns true if the given value is TConstructor */\nexport function IsConstructor(value) {\n return IsKindOf(value, 'Constructor');\n}\n/** `[Kind-Only]` Returns true if the given value is TDate */\nexport function IsDate(value) {\n return IsKindOf(value, 'Date');\n}\n/** `[Kind-Only]` Returns true if the given value is TFunction */\nexport function IsFunction(value) {\n return IsKindOf(value, 'Function');\n}\n/** `[Kind-Only]` Returns true if the given value is TInteger */\nexport function IsImport(value) {\n return IsKindOf(value, 'Import');\n}\n/** `[Kind-Only]` Returns true if the given value is TInteger */\nexport function IsInteger(value) {\n return IsKindOf(value, 'Integer');\n}\n/** `[Kind-Only]` Returns true if the given schema is TProperties */\nexport function IsProperties(value) {\n return ValueGuard.IsObject(value);\n}\n/** `[Kind-Only]` Returns true if the given value is TIntersect */\nexport function IsIntersect(value) {\n return IsKindOf(value, 'Intersect');\n}\n/** `[Kind-Only]` Returns true if the given value is TIterator */\nexport function IsIterator(value) {\n return IsKindOf(value, 'Iterator');\n}\n/** `[Kind-Only]` Returns true if the given value is a TKind with the given name. */\nexport function IsKindOf(value, kind) {\n return ValueGuard.IsObject(value) && Kind in value && value[Kind] === kind;\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral<string> */\nexport function IsLiteralString(value) {\n return IsLiteral(value) && ValueGuard.IsString(value.const);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral<number> */\nexport function IsLiteralNumber(value) {\n return IsLiteral(value) && ValueGuard.IsNumber(value.const);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral<boolean> */\nexport function IsLiteralBoolean(value) {\n return IsLiteral(value) && ValueGuard.IsBoolean(value.const);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteralValue */\nexport function IsLiteralValue(value) {\n return ValueGuard.IsBoolean(value) || ValueGuard.IsNumber(value) || ValueGuard.IsString(value);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral */\nexport function IsLiteral(value) {\n return IsKindOf(value, 'Literal');\n}\n/** `[Kind-Only]` Returns true if the given value is a TMappedKey */\nexport function IsMappedKey(value) {\n return IsKindOf(value, 'MappedKey');\n}\n/** `[Kind-Only]` Returns true if the given value is TMappedResult */\nexport function IsMappedResult(value) {\n return IsKindOf(value, 'MappedResult');\n}\n/** `[Kind-Only]` Returns true if the given value is TNever */\nexport function IsNever(value) {\n return IsKindOf(value, 'Never');\n}\n/** `[Kind-Only]` Returns true if the given value is TNot */\nexport function IsNot(value) {\n return IsKindOf(value, 'Not');\n}\n/** `[Kind-Only]` Returns true if the given value is TNull */\nexport function IsNull(value) {\n return IsKindOf(value, 'Null');\n}\n/** `[Kind-Only]` Returns true if the given value is TNumber */\nexport function IsNumber(value) {\n return IsKindOf(value, 'Number');\n}\n/** `[Kind-Only]` Returns true if the given value is TObject */\nexport function IsObject(value) {\n return IsKindOf(value, 'Object');\n}\n/** `[Kind-Only]` Returns true if the given value is TPromise */\nexport function IsPromise(value) {\n return IsKindOf(value, 'Promise');\n}\n/** `[Kind-Only]` Returns true if the given value is TRecord */\nexport function IsRecord(value) {\n return IsKindOf(value, 'Record');\n}\n/** `[Kind-Only]` Returns true if this value is TRecursive */\nexport function IsRecursive(value) {\n return ValueGuard.IsObject(value) && Hint in value && value[Hint] === 'Recursive';\n}\n/** `[Kind-Only]` Returns true if the given value is TRef */\nexport function IsRef(value) {\n return IsKindOf(value, 'Ref');\n}\n/** `[Kind-Only]` Returns true if the given value is TRegExp */\nexport function IsRegExp(value) {\n return IsKindOf(value, 'RegExp');\n}\n/** `[Kind-Only]` Returns true if the given value is TString */\nexport function IsString(value) {\n return IsKindOf(value, 'String');\n}\n/** `[Kind-Only]` Returns true if the given value is TSymbol */\nexport function IsSymbol(value) {\n return IsKindOf(value, 'Symbol');\n}\n/** `[Kind-Only]` Returns true if the given value is TTemplateLiteral */\nexport function IsTemplateLiteral(value) {\n return IsKindOf(value, 'TemplateLiteral');\n}\n/** `[Kind-Only]` Returns true if the given value is TThis */\nexport function IsThis(value) {\n return IsKindOf(value, 'This');\n}\n/** `[Kind-Only]` Returns true of this value is TTransform */\nexport function IsTransform(value) {\n return ValueGuard.IsObject(value) && TransformKind in value;\n}\n/** `[Kind-Only]` Returns true if the given value is TTuple */\nexport function IsTuple(value) {\n return IsKindOf(value, 'Tuple');\n}\n/** `[Kind-Only]` Returns true if the given value is TUndefined */\nexport function IsUndefined(value) {\n return IsKindOf(value, 'Undefined');\n}\n/** `[Kind-Only]` Returns true if the given value is TUnion */\nexport function IsUnion(value) {\n return IsKindOf(value, 'Union');\n}\n/** `[Kind-Only]` Returns true if the given value is TUint8Array */\nexport function IsUint8Array(value) {\n return IsKindOf(value, 'Uint8Array');\n}\n/** `[Kind-Only]` Returns true if the given value is TUnknown */\nexport function IsUnknown(value) {\n return IsKindOf(value, 'Unknown');\n}\n/** `[Kind-Only]` Returns true if the given value is a raw TUnsafe */\nexport function IsUnsafe(value) {\n return IsKindOf(value, 'Unsafe');\n}\n/** `[Kind-Only]` Returns true if the given value is TVoid */\nexport function IsVoid(value) {\n return IsKindOf(value, 'Void');\n}\n/** `[Kind-Only]` Returns true if the given value is TKind */\nexport function IsKind(value) {\n return ValueGuard.IsObject(value) && Kind in value && ValueGuard.IsString(value[Kind]);\n}\n/** `[Kind-Only]` Returns true if the given value is TSchema */\nexport function IsSchema(value) {\n // prettier-ignore\n return (IsAny(value) ||\n IsArgument(value) ||\n IsArray(value) ||\n IsBoolean(value) ||\n IsBigInt(value) ||\n IsAsyncIterator(value) ||\n IsComputed(value) ||\n IsConstructor(value) ||\n IsDate(value) ||\n IsFunction(value) ||\n IsInteger(value) ||\n IsIntersect(value) ||\n IsIterator(value) ||\n IsLiteral(value) ||\n IsMappedKey(value) ||\n IsMappedResult(value) ||\n IsNever(value) ||\n IsNot(value) ||\n IsNull(value) ||\n IsNumber(value) ||\n IsObject(value) ||\n IsPromise(value) ||\n IsRecord(value) ||\n IsRef(value) ||\n IsRegExp(value) ||\n IsString(value) ||\n IsSymbol(value) ||\n IsTemplateLiteral(value) ||\n IsThis(value) ||\n IsTuple(value) ||\n IsUndefined(value) ||\n IsUnion(value) ||\n IsUint8Array(value) ||\n IsUnknown(value) ||\n IsUnsafe(value) ||\n IsVoid(value) ||\n IsKind(value));\n}\n","import * as ValueGuard from './value.mjs';\nimport { Kind, Hint, TransformKind, ReadonlyKind, OptionalKind } from '../symbols/index.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\nexport class TypeGuardUnknownTypeError extends TypeBoxError {\n}\nconst KnownTypes = [\n 'Argument',\n 'Any',\n 'Array',\n 'AsyncIterator',\n 'BigInt',\n 'Boolean',\n 'Computed',\n 'Constructor',\n 'Date',\n 'Enum',\n 'Function',\n 'Integer',\n 'Intersect',\n 'Iterator',\n 'Literal',\n 'MappedKey',\n 'MappedResult',\n 'Not',\n 'Null',\n 'Number',\n 'Object',\n 'Promise',\n 'Record',\n 'Ref',\n 'RegExp',\n 'String',\n 'Symbol',\n 'TemplateLiteral',\n 'This',\n 'Tuple',\n 'Undefined',\n 'Union',\n 'Uint8Array',\n 'Unknown',\n 'Void',\n];\nfunction IsPattern(value) {\n try {\n new RegExp(value);\n return true;\n }\n catch {\n return false;\n }\n}\nfunction IsControlCharacterFree(value) {\n if (!ValueGuard.IsString(value))\n return false;\n for (let i = 0; i < value.length; i++) {\n const code = value.charCodeAt(i);\n if ((code >= 7 && code <= 13) || code === 27 || code === 127) {\n return false;\n }\n }\n return true;\n}\nfunction IsAdditionalProperties(value) {\n return IsOptionalBoolean(value) || IsSchema(value);\n}\nfunction IsOptionalBigInt(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsBigInt(value);\n}\nfunction IsOptionalNumber(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsNumber(value);\n}\nfunction IsOptionalBoolean(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsBoolean(value);\n}\nfunction IsOptionalString(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsString(value);\n}\nfunction IsOptionalPattern(value) {\n return ValueGuard.IsUndefined(value) || (ValueGuard.IsString(value) && IsControlCharacterFree(value) && IsPattern(value));\n}\nfunction IsOptionalFormat(value) {\n return ValueGuard.IsUndefined(value) || (ValueGuard.IsString(value) && IsControlCharacterFree(value));\n}\nfunction IsOptionalSchema(value) {\n return ValueGuard.IsUndefined(value) || IsSchema(value);\n}\n// ------------------------------------------------------------------\n// Modifiers\n// ------------------------------------------------------------------\n/** Returns true if this value has a Readonly symbol */\nexport function IsReadonly(value) {\n return ValueGuard.IsObject(value) && value[ReadonlyKind] === 'Readonly';\n}\n/** Returns true if this value has a Optional symbol */\nexport function IsOptional(value) {\n return ValueGuard.IsObject(value) && value[OptionalKind] === 'Optional';\n}\n// ------------------------------------------------------------------\n// Types\n// ------------------------------------------------------------------\n/** Returns true if the given value is TAny */\nexport function IsAny(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Any') &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TArgument */\nexport function IsArgument(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Argument') &&\n ValueGuard.IsNumber(value.index));\n}\n/** Returns true if the given value is TArray */\nexport function IsArray(value) {\n return (IsKindOf(value, 'Array') &&\n value.type === 'array' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.items) &&\n IsOptionalNumber(value.minItems) &&\n IsOptionalNumber(value.maxItems) &&\n IsOptionalBoolean(value.uniqueItems) &&\n IsOptionalSchema(value.contains) &&\n IsOptionalNumber(value.minContains) &&\n IsOptionalNumber(value.maxContains));\n}\n/** Returns true if the given value is TAsyncIterator */\nexport function IsAsyncIterator(value) {\n // prettier-ignore\n return (IsKindOf(value, 'AsyncIterator') &&\n value.type === 'AsyncIterator' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.items));\n}\n/** Returns true if the given value is TBigInt */\nexport function IsBigInt(value) {\n // prettier-ignore\n return (IsKindOf(value, 'BigInt') &&\n value.type === 'bigint' &&\n IsOptionalString(value.$id) &&\n IsOptionalBigInt(value.exclusiveMaximum) &&\n IsOptionalBigInt(value.exclusiveMinimum) &&\n IsOptionalBigInt(value.maximum) &&\n IsOptionalBigInt(value.minimum) &&\n IsOptionalBigInt(value.multipleOf));\n}\n/** Returns true if the given value is TBoolean */\nexport function IsBoolean(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Boolean') &&\n value.type === 'boolean' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TComputed */\nexport function IsComputed(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Computed') &&\n ValueGuard.IsString(value.target) &&\n ValueGuard.IsArray(value.parameters) &&\n value.parameters.every((schema) => IsSchema(schema)));\n}\n/** Returns true if the given value is TConstructor */\nexport function IsConstructor(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Constructor') &&\n value.type === 'Constructor' &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsArray(value.parameters) &&\n value.parameters.every(schema => IsSchema(schema)) &&\n IsSchema(value.returns));\n}\n/** Returns true if the given value is TDate */\nexport function IsDate(value) {\n return (IsKindOf(value, 'Date') &&\n value.type === 'Date' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.exclusiveMaximumTimestamp) &&\n IsOptionalNumber(value.exclusiveMinimumTimestamp) &&\n IsOptionalNumber(value.maximumTimestamp) &&\n IsOptionalNumber(value.minimumTimestamp) &&\n IsOptionalNumber(value.multipleOfTimestamp));\n}\n/** Returns true if the given value is TFunction */\nexport function IsFunction(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Function') &&\n value.type === 'Function' &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsArray(value.parameters) &&\n value.parameters.every(schema => IsSchema(schema)) &&\n IsSchema(value.returns));\n}\n/** Returns true if the given value is TImport */\nexport function IsImport(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Import') &&\n ValueGuard.HasPropertyKey(value, '$defs') &&\n ValueGuard.IsObject(value.$defs) &&\n IsProperties(value.$defs) &&\n ValueGuard.HasPropertyKey(value, '$ref') &&\n ValueGuard.IsString(value.$ref) &&\n value.$ref in value.$defs // required\n );\n}\n/** Returns true if the given value is TInteger */\nexport function IsInteger(value) {\n return (IsKindOf(value, 'Integer') &&\n value.type === 'integer' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.exclusiveMaximum) &&\n IsOptionalNumber(value.exclusiveMinimum) &&\n IsOptionalNumber(value.maximum) &&\n IsOptionalNumber(value.minimum) &&\n IsOptionalNumber(value.multipleOf));\n}\n/** Returns true if the given schema is TProperties */\nexport function IsProperties(value) {\n // prettier-ignore\n return (ValueGuard.IsObject(value) &&\n Object.entries(value).every(([key, schema]) => IsControlCharacterFree(key) && IsSchema(schema)));\n}\n/** Returns true if the given value is TIntersect */\nexport function IsIntersect(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Intersect') &&\n (ValueGuard.IsString(value.type) && value.type !== 'object' ? false : true) &&\n ValueGuard.IsArray(value.allOf) &&\n value.allOf.every(schema => IsSchema(schema) && !IsTransform(schema)) &&\n IsOptionalString(value.type) &&\n (IsOptionalBoolean(value.unevaluatedProperties) || IsOptionalSchema(value.unevaluatedProperties)) &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TIterator */\nexport function IsIterator(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Iterator') &&\n value.type === 'Iterator' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.items));\n}\n/** Returns true if the given value is a TKind with the given name. */\nexport function IsKindOf(value, kind) {\n return ValueGuard.IsObject(value) && Kind in value && value[Kind] === kind;\n}\n/** Returns true if the given value is TLiteral<string> */\nexport function IsLiteralString(value) {\n return IsLiteral(value) && ValueGuard.IsString(value.const);\n}\n/** Returns true if the given value is TLiteral<number> */\nexport function IsLiteralNumber(value) {\n return IsLiteral(value) && ValueGuard.IsNumber(value.const);\n}\n/** Returns true if the given value is TLiteral<boolean> */\nexport function IsLiteralBoolean(value) {\n return IsLiteral(value) && ValueGuard.IsBoolean(value.const);\n}\n/** Returns true if the given value is TLiteral */\nexport function IsLiteral(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Literal') &&\n IsOptionalString(value.$id) && IsLiteralValue(value.const));\n}\n/** Returns true if the given value is a TLiteralValue */\nexport function IsLiteralValue(value) {\n return ValueGuard.IsBoolean(value) || ValueGuard.IsNumber(value) || ValueGuard.IsString(value);\n}\n/** Returns true if the given value is a TMappedKey */\nexport function IsMappedKey(value) {\n // prettier-ignore\n return (IsKindOf(value, 'MappedKey') &&\n ValueGuard.IsArray(value.keys) &&\n value.keys.every(key => ValueGuard.IsNumber(key) || ValueGuard.IsString(key)));\n}\n/** Returns true if the given value is TMappedResult */\nexport function IsMappedResult(value) {\n // prettier-ignore\n return (IsKindOf(value, 'MappedResult') &&\n IsProperties(value.properties));\n}\n/** Returns true if the given value is TNever */\nexport function IsNever(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Never') &&\n ValueGuard.IsObject(value.not) &&\n Object.getOwnPropertyNames(value.not).length === 0);\n}\n/** Returns true if the given value is TNot */\nexport function IsNot(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Not') &&\n IsSchema(value.not));\n}\n/** Returns true if the given value is TNull */\nexport function IsNull(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Null') &&\n value.type === 'null' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TNumber */\nexport function IsNumber(value) {\n return (IsKindOf(value, 'Number') &&\n value.type === 'number' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.exclusiveMaximum) &&\n IsOptionalNumber(value.exclusiveMinimum) &&\n IsOptionalNumber(value.maximum) &&\n IsOptionalNumber(value.minimum) &&\n IsOptionalNumber(value.multipleOf));\n}\n/** Returns true if the given value is TObject */\nexport function IsObject(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Object') &&\n value.type === 'object' &&\n IsOptionalString(value.$id) &&\n IsProperties(value.properties) &&\n IsAdditionalProperties(value.additionalProperties) &&\n IsOptionalNumber(value.minProperties) &&\n IsOptionalNumber(value.maxProperties));\n}\n/** Returns true if the given value is TPromise */\nexport function IsPromise(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Promise') &&\n value.type === 'Promise' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.item));\n}\n/** Returns true if the given value is TRecord */\nexport function IsRecord(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Record') &&\n value.type === 'object' &&\n IsOptionalString(value.$id) &&\n IsAdditionalProperties(value.additionalProperties) &&\n ValueGuard.IsObject(value.patternProperties) &&\n ((schema) => {\n const keys = Object.getOwnPropertyNames(schema.patternProperties);\n return (keys.length === 1 &&\n IsPattern(keys[0]) &&\n ValueGuard.IsObject(schema.patternProperties) &&\n IsSchema(schema.patternProperties[keys[0]]));\n })(value));\n}\n/** Returns true if this value is TRecursive */\nexport function IsRecursive(value) {\n return ValueGuard.IsObject(value) && Hint in value && value[Hint] === 'Recursive';\n}\n/** Returns true if the given value is TRef */\nexport function IsRef(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Ref') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsString(value.$ref));\n}\n/** Returns true if the given value is TRegExp */\nexport function IsRegExp(value) {\n // prettier-ignore\n return (IsKindOf(value, 'RegExp') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsString(value.source) &&\n ValueGuard.IsString(value.flags) &&\n IsOptionalNumber(value.maxLength) &&\n IsOptionalNumber(value.minLength));\n}\n/** Returns true if the given value is TString */\nexport function IsString(value) {\n // prettier-ignore\n return (IsKindOf(value, 'String') &&\n value.type === 'string' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.minLength) &&\n IsOptionalNumber(value.maxLength) &&\n IsOptionalPattern(value.pattern) &&\n IsOptionalFormat(value.format));\n}\n/** Returns true if the given value is TSymbol */\nexport function IsSymbol(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Symbol') &&\n value.type === 'symbol' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TTemplateLiteral */\nexport function IsTemplateLiteral(value) {\n // prettier-ignore\n return (IsKindOf(value, 'TemplateLiteral') &&\n value.type === 'string' &&\n ValueGuard.IsString(value.pattern) &&\n value.pattern[0] === '^' &&\n value.pattern[value.pattern.length - 1] === '$');\n}\n/** Returns true if the given value is TThis */\nexport function IsThis(value) {\n // prettier-ignore\n return (IsKindOf(value, 'This') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsString(value.$ref));\n}\n/** Returns true of this value is TTransform */\nexport function IsTransform(value) {\n return ValueGuard.IsObject(value) && TransformKind in value;\n}\n/** Returns true if the given value is TTuple */\nexport function IsTuple(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Tuple') &&\n value.type === 'array' &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsNumber(value.minItems) &&\n ValueGuard.IsNumber(value.maxItems) &&\n value.minItems === value.maxItems &&\n (( // empty\n ValueGuard.IsUndefined(value.items) &&\n ValueGuard.IsUndefined(value.additionalItems) &&\n value.minItems === 0) || (ValueGuard.IsArray(value.items) &&\n value.items.every(schema => IsSchema(schema)))));\n}\n/** Returns true if the given value is TUndefined */\nexport function IsUndefined(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Undefined') &&\n value.type === 'undefined' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TUnion<Literal<string | number>[]> */\nexport function IsUnionLiteral(value) {\n return IsUnion(value) && value.anyOf.every((schema) => IsLiteralString(schema) || IsLiteralNumber(schema));\n}\n/** Returns true if the given value is TUnion */\nexport function IsUnion(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Union') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsObject(value) &&\n ValueGuard.IsArray(value.anyOf) &&\n value.anyOf.every(schema => IsSchema(schema)));\n}\n/** Returns true if the given value is TUint8Array */\nexport function IsUint8Array(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Uint8Array') &&\n value.type === 'Uint8Array' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.minByteLength) &&\n IsOptionalNumber(value.maxByteLength));\n}\n/** Returns true if the given value is TUnknown */\nexport function IsUnknown(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Unknown') &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is a raw TUnsafe */\nexport function IsUnsafe(value) {\n return IsKindOf(value, 'Unsafe');\n}\n/** Returns true if the given value is TVoid */\nexport function IsVoid(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Void') &&\n value.type === 'void' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TKind */\nexport function IsKind(value) {\n return ValueGuard.IsObject(value) && Kind in value && ValueGuard.IsString(value[Kind]) && !KnownTypes.includes(value[Kind]);\n}\n/** Returns true if the given value is TSchema */\nexport function IsSchema(value) {\n // prettier-ignore\n return (ValueGuard.IsObject(value)) && (IsAny(value) ||\n IsArgument(value) ||\n IsArray(value) ||\n IsBoolean(value) ||\n IsBigInt(value) ||\n IsAsyncIterator(value) ||\n IsComputed(value) ||\n IsConstructor(value) ||\n IsDate(value) ||\n IsFunction(value) ||\n IsInteger(value) ||\n IsIntersect(value) ||\n IsIterator(value) ||\n IsLiteral(value) ||\n IsMappedKey(value) ||\n IsMappedResult(value) ||\n IsNever(value) ||\n IsNot(value) ||\n IsNull(value) ||\n IsNumber(value) ||\n IsObject(value) ||\n IsPromise(value) ||\n IsRecord(value) ||\n IsRef(value) ||\n IsRegExp(value) ||\n IsString(value) ||\n IsSymbol(value) ||\n IsTemplateLiteral(value) ||\n IsThis(value) ||\n IsTuple(value) ||\n IsUndefined(value) ||\n IsUnion(value) ||\n IsUint8Array(value) ||\n IsUnknown(value) ||\n IsUnsafe(value) ||\n IsVoid(value) ||\n IsKind(value));\n}\n","export const PatternBoolean = '(true|false)';\nexport const PatternNumber = '(0|[1-9][0-9]*)';\nexport const PatternString = '(.*)';\nexport const PatternNever = '(?!.*)';\nexport const PatternBooleanExact = `^${PatternBoolean}$`;\nexport const PatternNumberExact = `^${PatternNumber}$`;\nexport const PatternStringExact = `^${PatternString}$`;\nexport const PatternNeverExact = `^${PatternNever}$`;\n","/** Returns true if element right is in the set of left */\n// prettier-ignore\nexport function SetIncludes(T, S) {\n return T.includes(S);\n}\n/** Returns true if left is a subset of right */\nexport function SetIsSubset(T, S) {\n return T.every((L) => SetIncludes(S, L));\n}\n/** Returns a distinct set of elements */\nexport function SetDistinct(T) {\n return [...new Set(T)];\n}\n/** Returns the Intersect of the given sets */\nexport function SetIntersect(T, S) {\n return T.filter((L) => S.includes(L));\n}\n/** Returns the Union of the given sets */\nexport function SetUnion(T, S) {\n return [...T, ...S];\n}\n/** Returns the Complement by omitting elements in T that are in S */\n// prettier-ignore\nexport function SetComplement(T, S) {\n return T.filter(L => !S.includes(L));\n}\n// prettier-ignore\nfunction SetIntersectManyResolve(T, Init) {\n return T.reduce((Acc, L) => {\n return SetIntersect(Acc, L);\n }, Init);\n}\n// prettier-ignore\nexport function SetIntersectMany(T) {\n return (T.length === 1\n ? T[0]\n // Use left to initialize the accumulator for resolve\n : T.length > 1\n ? SetIntersectManyResolve(T.slice(1), T[0])\n : []);\n}\n/** Returns the Union of multiple sets */\nexport function SetUnionMany(T) {\n const Acc = [];\n for (const L of T)\n Acc.push(...L);\n return Acc;\n}\n","import { CreateType } from '../create/index.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Any type */\nexport function Any(options) {\n return CreateType({ [Kind]: 'Any' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Array type */\nexport function Array(items, options) {\n return CreateType({ [Kind]: 'Array', type: 'array', items }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates an Argument Type. */\nexport function Argument(index) {\n return CreateType({ [Kind]: 'Argument', index });\n}\n","import { Kind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/type.mjs';\n/** `[JavaScript]` Creates a AsyncIterator type */\nexport function AsyncIterator(items, options) {\n return CreateType({ [Kind]: 'AsyncIterator', type: 'AsyncIterator', items }, options);\n}\n","import { CreateType } from '../create/index.mjs';\nimport { Kind } from '../symbols/symbols.mjs';\n/** `[Internal]` Creates a deferred computed type. This type is used exclusively in modules to defer resolution of computable types that contain interior references */\nexport function Computed(target, parameters, options) {\n return CreateType({ [Kind]: 'Computed', target, parameters }, options);\n}\n","function DiscardKey(value, key) {\n const { [key]: _, ...rest } = value;\n return rest;\n}\n/** Discards property keys from the given value. This function returns a shallow Clone. */\nexport function Discard(value, keys) {\n return keys.reduce((acc, key) => DiscardKey(acc, key), value);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Never type */\nexport function Never(options) {\n return CreateType({ [Kind]: 'Never', not: {} }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// prettier-ignore\nexport function MappedResult(properties) {\n return CreateType({\n [Kind]: 'MappedResult',\n properties\n });\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Constructor type */\nexport function Constructor(parameters, returns, options) {\n return CreateType({ [Kind]: 'Constructor', type: 'Constructor', parameters, returns }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Function type */\nexport function Function(parameters, returns, options) {\n return CreateType({ [Kind]: 'Function', type: 'Function', parameters, returns }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\nexport function UnionCreate(T, options) {\n return CreateType({ [Kind]: 'Union', anyOf: T }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { OptionalKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { UnionCreate } from './union-create.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsOptional } from '../guard/kind.mjs';\n// prettier-ignore\nfunction IsUnionOptional(types) {\n return types.some(type => IsOptional(type));\n}\n// prettier-ignore\nfunction RemoveOptionalFromRest(types) {\n return types.map(left => IsOptional(left) ? RemoveOptionalFromType(left) : left);\n}\n// prettier-ignore\nfunction RemoveOptionalFromType(T) {\n return (Discard(T, [OptionalKind]));\n}\n// prettier-ignore\nfunction ResolveUnion(types, options) {\n const isOptional = IsUnionOptional(types);\n return (isOptional\n ? Optional(UnionCreate(RemoveOptionalFromRest(types), options))\n : UnionCreate(RemoveOptionalFromRest(types), options));\n}\n/** `[Json]` Creates an evaluated Union type */\nexport function UnionEvaluated(T, options) {\n // prettier-ignore\n return (T.length === 1 ? CreateType(T[0], options) :\n T.length === 0 ? Never(options) :\n ResolveUnion(T, options));\n}\n","import { Never } from '../never/index.mjs';\nimport { CreateType } from '../create/type.mjs';\nimport { UnionCreate } from './union-create.mjs';\n/** `[Json]` Creates a Union type */\nexport function Union(types, options) {\n // prettier-ignore\n return (types.length === 0 ? Never(options) :\n types.length === 1 ? CreateType(types[0], options) :\n UnionCreate(types, options));\n}\n","import { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralParserError\n// ------------------------------------------------------------------\nexport class TemplateLiteralParserError extends TypeBoxError {\n}\n// -------------------------------------------------------------------\n// Unescape\n//\n// Unescape for these control characters specifically. Note that this\n// function is only called on non union group content, and where we\n// still want to allow the user to embed control characters in that\n// content. For review.\n// -------------------------------------------------------------------\n// prettier-ignore\nfunction Unescape(pattern) {\n return pattern\n .replace(/\\\\\\$/g, '$')\n .replace(/\\\\\\*/g, '*')\n .replace(/\\\\\\^/g, '^')\n .replace(/\\\\\\|/g, '|')\n .replace(/\\\\\\(/g, '(')\n .replace(/\\\\\\)/g, ')');\n}\n// -------------------------------------------------------------------\n// Control Characters\n// -------------------------------------------------------------------\nfunction IsNonEscaped(pattern, index, char) {\n return pattern[index] === char && pattern.charCodeAt(index - 1) !== 92;\n}\nfunction IsOpenParen(pattern, index) {\n return IsNonEscaped(pattern, index, '(');\n}\nfunction IsCloseParen(pattern, index) {\n return IsNonEscaped(pattern, index, ')');\n}\nfunction IsSeparator(pattern, index) {\n return IsNonEscaped(pattern, index, '|');\n}\n// -------------------------------------------------------------------\n// Control Groups\n// -------------------------------------------------------------------\nfunction IsGroup(pattern) {\n if (!(IsOpenParen(pattern, 0) && IsCloseParen(pattern, pattern.length - 1)))\n return false;\n let count = 0;\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n count += 1;\n if (IsCloseParen(pattern, index))\n count -= 1;\n if (count === 0 && index !== pattern.length - 1)\n return false;\n }\n return true;\n}\n// prettier-ignore\nfunction InGroup(pattern) {\n return pattern.slice(1, pattern.length - 1);\n}\n// prettier-ignore\nfunction IsPrecedenceOr(pattern) {\n let count = 0;\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n count += 1;\n if (IsCloseParen(pattern, index))\n count -= 1;\n if (IsSeparator(pattern, index) && count === 0)\n return true;\n }\n return false;\n}\n// prettier-ignore\nfunction IsPrecedenceAnd(pattern) {\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n return true;\n }\n return false;\n}\n// prettier-ignore\nfunction Or(pattern) {\n let [count, start] = [0, 0];\n const expressions = [];\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n count += 1;\n if (IsCloseParen(pattern, index))\n count -= 1;\n if (IsSeparator(pattern, index) && count === 0) {\n const range = pattern.slice(start, index);\n if (range.length > 0)\n expressions.push(TemplateLiteralParse(range));\n start = index + 1;\n }\n }\n const range = pattern.slice(start);\n if (range.length > 0)\n expressions.push(TemplateLiteralParse(range));\n if (expressions.length === 0)\n return { type: 'const', const: '' };\n if (expressions.length === 1)\n return expressions[0];\n return { type: 'or', expr: expressions };\n}\n// prettier-ignore\nfunction And(pattern) {\n function Group(value, index) {\n if (!IsOpenParen(value, index))\n throw new TemplateLiteralParserError(`TemplateLiteralParser: Index must point to open parens`);\n let count = 0;\n for (let scan = index; scan < value.length; scan++) {\n if (IsOpenParen(value, scan))\n count += 1;\n if (IsCloseParen(value, scan))\n count -= 1;\n if (count === 0)\n return [index, scan];\n }\n throw new TemplateLiteralParserError(`TemplateLiteralParser: Unclosed group parens in expression`);\n }\n function Range(pattern, index) {\n for (let scan = index; scan < pattern.length; scan++) {\n if (IsOpenParen(pattern, scan))\n return [index, scan];\n }\n return [index, pattern.length];\n }\n const expressions = [];\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index)) {\n const [start, end] = Group(pattern, index);\n const range = pattern.slice(start, end + 1);\n expressions.push(TemplateLiteralParse(range));\n index = end;\n }\n else {\n const [start, end] = Range(pattern, index);\n const range = pattern.slice(start, end);\n if (range.length > 0)\n expressions.push(TemplateLiteralParse(range));\n index = end - 1;\n }\n }\n return ((expressions.length === 0) ? { type: 'const', const: '' } :\n (expressions.length === 1) ? expressions[0] :\n { type: 'and', expr: expressions });\n}\n// ------------------------------------------------------------------\n// TemplateLiteralParse\n// ------------------------------------------------------------------\n/** Parses a pattern and returns an expression tree */\nexport function TemplateLiteralParse(pattern) {\n // prettier-ignore\n return (IsGroup(pattern) ? TemplateLiteralParse(InGroup(pattern)) :\n IsPrecedenceOr(pattern) ? Or(pattern) :\n IsPrecedenceAnd(pattern) ? And(pattern) :\n { type: 'const', const: Unescape(pattern) });\n}\n// ------------------------------------------------------------------\n// TemplateLiteralParseExact\n// ------------------------------------------------------------------\n/** Parses a pattern and strips forward and trailing ^ and $ */\nexport function TemplateLiteralParseExact(pattern) {\n return TemplateLiteralParse(pattern.slice(1, pattern.length - 1));\n}\n","import { TemplateLiteralParseExact } from './parse.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralFiniteError\n// ------------------------------------------------------------------\nexport class TemplateLiteralFiniteError extends TypeBoxError {\n}\n// ------------------------------------------------------------------\n// IsTemplateLiteralFiniteCheck\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsNumberExpression(expression) {\n return (expression.type === 'or' &&\n expression.expr.length === 2 &&\n expression.expr[0].type === 'const' &&\n expression.expr[0].const === '0' &&\n expression.expr[1].type === 'const' &&\n expression.expr[1].const === '[1-9][0-9]*');\n}\n// prettier-ignore\nfunction IsBooleanExpression(expression) {\n return (expression.type === 'or' &&\n expression.expr.length === 2 &&\n expression.expr[0].type === 'const' &&\n expression.expr[0].const === 'true' &&\n expression.expr[1].type === 'const' &&\n expression.expr[1].const === 'false');\n}\n// prettier-ignore\nfunction IsStringExpression(expression) {\n return expression.type === 'const' && expression.const === '.*';\n}\n// ------------------------------------------------------------------\n// IsTemplateLiteralExpressionFinite\n// ------------------------------------------------------------------\n// prettier-ignore\nexport function IsTemplateLiteralExpressionFinite(expression) {\n return (IsNumberExpression(expression) || IsStringExpression(expression) ? false :\n IsBooleanExpression(expression) ? true :\n (expression.type === 'and') ? expression.expr.every((expr) => IsTemplateLiteralExpressionFinite(expr)) :\n (expression.type === 'or') ? expression.expr.every((expr) => IsTemplateLiteralExpressionFinite(expr)) :\n (expression.type === 'const') ? true :\n (() => { throw new TemplateLiteralFiniteError(`Unknown expression type`); })());\n}\n/** Returns true if this TemplateLiteral resolves to a finite set of values */\nexport function IsTemplateLiteralFinite(schema) {\n const expression = TemplateLiteralParseExact(schema.pattern);\n return IsTemplateLiteralExpressionFinite(expression);\n}\n","import { IsTemplateLiteralExpressionFinite } from './finite.mjs';\nimport { TemplateLiteralParseExact } from './parse.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralGenerateError\n// ------------------------------------------------------------------\nexport class TemplateLiteralGenerateError extends TypeBoxError {\n}\n// ------------------------------------------------------------------\n// TemplateLiteralExpressionGenerate\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction* GenerateReduce(buffer) {\n if (buffer.length === 1)\n return yield* buffer[0];\n for (const left of buffer[0]) {\n for (const right of GenerateReduce(buffer.slice(1))) {\n yield `${left}${right}`;\n }\n }\n}\n// prettier-ignore\nfunction* GenerateAnd(expression) {\n return yield* GenerateReduce(expression.expr.map((expr) => [...TemplateLiteralExpressionGenerate(expr)]));\n}\n// prettier-ignore\nfunction* GenerateOr(expression) {\n for (const expr of expression.expr)\n yield* TemplateLiteralExpressionGenerate(expr);\n}\n// prettier-ignore\nfunction* GenerateConst(expression) {\n return yield expression.const;\n}\nexport function* TemplateLiteralExpressionGenerate(expression) {\n return expression.type === 'and'\n ? yield* GenerateAnd(expression)\n : expression.type === 'or'\n ? yield* GenerateOr(expression)\n : expression.type === 'const'\n ? yield* GenerateConst(expression)\n : (() => {\n throw new TemplateLiteralGenerateError('Unknown expression');\n })();\n}\n/** Generates a tuple of strings from the given TemplateLiteral. Returns an empty tuple if infinite. */\nexport function TemplateLiteralGenerate(schema) {\n const expression = TemplateLiteralParseExact(schema.pattern);\n // prettier-ignore\n return (IsTemplateLiteralExpressionFinite(expression)\n ? [...TemplateLiteralExpressionGenerate(expression)]\n : []);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Literal type */\nexport function Literal(value, options) {\n return CreateType({\n [Kind]: 'Literal',\n const: value,\n type: typeof value,\n }, options);\n}\n","import { Kind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/index.mjs';\n/** `[Json]` Creates a Boolean type */\nexport function Boolean(options) {\n return CreateType({ [Kind]: 'Boolean', type: 'boolean' }, options);\n}\n","import { Kind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/index.mjs';\n/** `[JavaScript]` Creates a BigInt type */\nexport function BigInt(options) {\n return CreateType({ [Kind]: 'BigInt', type: 'bigint' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Number type */\nexport function Number(options) {\n return CreateType({ [Kind]: 'Number', type: 'number' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a String type */\nexport function String(options) {\n return CreateType({ [Kind]: 'String', type: 'string' }, options);\n}\n","import { Literal } from '../literal/index.mjs';\nimport { Boolean } from '../boolean/index.mjs';\nimport { BigInt } from '../bigint/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { String } from '../string/index.mjs';\nimport { UnionEvaluated } from '../union/index.mjs';\nimport { Never } from '../never/index.mjs';\n// ------------------------------------------------------------------\n// SyntaxParsers\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction* FromUnion(syntax) {\n const trim = syntax.trim().replace(/\"|'/g, '');\n return (trim === 'boolean' ? yield Boolean() :\n trim === 'number' ? yield Number() :\n trim === 'bigint' ? yield BigInt() :\n trim === 'string' ? yield String() :\n yield (() => {\n const literals = trim.split('|').map((literal) => Literal(literal.trim()));\n return (literals.length === 0 ? Never() :\n literals.length === 1 ? literals[0] :\n UnionEvaluated(literals));\n })());\n}\n// prettier-ignore\nfunction* FromTerminal(syntax) {\n if (syntax[1] !== '{') {\n const L = Literal('$');\n const R = FromSyntax(syntax.slice(1));\n return yield* [L, ...R];\n }\n for (let i = 2; i < syntax.length; i++) {\n if (syntax[i] === '}') {\n const L = FromUnion(syntax.slice(2, i));\n const R = FromSyntax(syntax.slice(i + 1));\n return yield* [...L, ...R];\n }\n }\n yield Literal(syntax);\n}\n// prettier-ignore\nfunction* FromSyntax(syntax) {\n for (let i = 0; i < syntax.length; i++) {\n if (syntax[i] === '$') {\n const L = Literal(syntax.slice(0, i));\n const R = FromTerminal(syntax.slice(i));\n return yield* [L, ...R];\n }\n }\n yield Literal(syntax);\n}\n/** Parses TemplateLiteralSyntax and returns a tuple of TemplateLiteralKinds */\nexport function TemplateLiteralSyntax(syntax) {\n return [...FromSyntax(syntax)];\n}\n","import { PatternNumber, PatternString, PatternBoolean } from '../patterns/index.mjs';\nimport { Kind } from '../symbols/index.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTemplateLiteral, IsUnion, IsNumber, IsInteger, IsBigInt, IsString, IsLiteral, IsBoolean } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralPatternError\n// ------------------------------------------------------------------\nexport class TemplateLiteralPatternError extends TypeBoxError {\n}\n// ------------------------------------------------------------------\n// TemplateLiteralPattern\n// ------------------------------------------------------------------\nfunction Escape(value) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n// prettier-ignore\nfunction Visit(schema, acc) {\n return (IsTemplateLiteral(schema) ? schema.pattern.slice(1, schema.pattern.length - 1) :\n IsUnion(schema) ? `(${schema.anyOf.map((schema) => Visit(schema, acc)).join('|')})` :\n IsNumber(schema) ? `${acc}${PatternNumber}` :\n IsInteger(schema) ? `${acc}${PatternNumber}` :\n IsBigInt(schema) ? `${acc}${PatternNumber}` :\n IsString(schema) ? `${acc}${PatternString}` :\n IsLiteral(schema) ? `${acc}${Escape(schema.const.toString())}` :\n IsBoolean(schema) ? `${acc}${PatternBoolean}` :\n (() => { throw new TemplateLiteralPatternError(`Unexpected Kind '${schema[Kind]}'`); })());\n}\nexport function TemplateLiteralPattern(kinds) {\n return `^${kinds.map((schema) => Visit(schema, '')).join('')}\\$`;\n}\n","import { UnionEvaluated } from '../union/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { TemplateLiteralGenerate } from './generate.mjs';\n/** Returns a Union from the given TemplateLiteral */\nexport function TemplateLiteralToUnion(schema) {\n const R = TemplateLiteralGenerate(schema);\n const L = R.map((S) => Literal(S));\n return UnionEvaluated(L);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { TemplateLiteralSyntax } from './syntax.mjs';\nimport { TemplateLiteralPattern } from './pattern.mjs';\nimport { IsString } from '../guard/value.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a TemplateLiteral type */\n// prettier-ignore\nexport function TemplateLiteral(unresolved, options) {\n const pattern = IsString(unresolved)\n ? TemplateLiteralPattern(TemplateLiteralSyntax(unresolved))\n : TemplateLiteralPattern(unresolved);\n return CreateType({ [Kind]: 'TemplateLiteral', type: 'string', pattern }, options);\n}\n","import { TemplateLiteralGenerate } from '../template-literal/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTemplateLiteral, IsUnion, IsLiteral, IsNumber, IsInteger } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromTemplateLiteral(templateLiteral) {\n const keys = TemplateLiteralGenerate(templateLiteral);\n return keys.map(key => key.toString());\n}\n// prettier-ignore\nfunction FromUnion(types) {\n const result = [];\n for (const type of types)\n result.push(...IndexPropertyKeys(type));\n return result;\n}\n// prettier-ignore\nfunction FromLiteral(literalValue) {\n return ([literalValue.toString()] // TS 5.4 observes TLiteralValue as not having a toString()\n );\n}\n/** Returns a tuple of PropertyKeys derived from the given TSchema */\n// prettier-ignore\nexport function IndexPropertyKeys(type) {\n return [...new Set((IsTemplateLiteral(type) ? FromTemplateLiteral(type) :\n IsUnion(type) ? FromUnion(type.anyOf) :\n IsLiteral(type) ? FromLiteral(type.const) :\n IsNumber(type) ? ['[number]'] :\n IsInteger(type) ? ['[number]'] :\n []))];\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { IndexPropertyKeys } from './indexed-property-keys.mjs';\nimport { Index } from './index.mjs';\n// prettier-ignore\nfunction FromProperties(type, properties, options) {\n const result = {};\n for (const K2 of Object.getOwnPropertyNames(properties)) {\n result[K2] = Index(type, IndexPropertyKeys(properties[K2]), options);\n }\n return result;\n}\n// prettier-ignore\nfunction FromMappedResult(type, mappedResult, options) {\n return FromProperties(type, mappedResult.properties, options);\n}\n// prettier-ignore\nexport function IndexFromMappedResult(type, mappedResult, options) {\n const properties = FromMappedResult(type, mappedResult, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { IntersectEvaluated } from '../intersect/index.mjs';\nimport { UnionEvaluated } from '../union/index.mjs';\nimport { IndexPropertyKeys } from './indexed-property-keys.mjs';\nimport { IndexFromMappedKey } from './indexed-from-mapped-key.mjs';\nimport { IndexFromMappedResult } from './indexed-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsArray, IsIntersect, IsObject, IsMappedKey, IsMappedResult, IsNever, IsSchema, IsTuple, IsUnion, IsRef } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromRest(types, key) {\n return types.map(type => IndexFromPropertyKey(type, key));\n}\n// prettier-ignore\nfunction FromIntersectRest(types) {\n return types.filter(type => !IsNever(type));\n}\n// prettier-ignore\nfunction FromIntersect(types, key) {\n return (IntersectEvaluated(FromIntersectRest(FromRest(types, key))));\n}\n// prettier-ignore\nfunction FromUnionRest(types) {\n return (types.some(L => IsNever(L))\n ? []\n : types);\n}\n// prettier-ignore\nfunction FromUnion(types, key) {\n return (UnionEvaluated(FromUnionRest(FromRest(types, key))));\n}\n// prettier-ignore\nfunction FromTuple(types, key) {\n return (key in types ? types[key] :\n key === '[number]' ? UnionEvaluated(types) :\n Never());\n}\n// prettier-ignore\nfunction FromArray(type, key) {\n return (key === '[number]'\n ? type\n : Never());\n}\n// prettier-ignore\nfunction FromProperty(properties, propertyKey) {\n return (propertyKey in properties ? properties[propertyKey] : Never());\n}\n// prettier-ignore\nexport function IndexFromPropertyKey(type, propertyKey) {\n return (IsIntersect(type) ? FromIntersect(type.allOf, propertyKey) :\n IsUnion(type) ? FromUnion(type.anyOf, propertyKey) :\n IsTuple(type) ? FromTuple(type.items ?? [], propertyKey) :\n IsArray(type) ? FromArray(type.items, propertyKey) :\n IsObject(type) ? FromProperty(type.properties, propertyKey) :\n Never());\n}\n// prettier-ignore\nexport function IndexFromPropertyKeys(type, propertyKeys) {\n return propertyKeys.map(propertyKey => IndexFromPropertyKey(type, propertyKey));\n}\n// prettier-ignore\nfunction FromSchema(type, propertyKeys) {\n return (UnionEvaluated(IndexFromPropertyKeys(type, propertyKeys)));\n}\n// prettier-ignore\nexport function IndexFromComputed(type, key) {\n return Computed('Index', [type, key]);\n}\n/** `[Json]` Returns an Indexed property type for the given keys */\nexport function Index(type, key, options) {\n // computed-type\n if (IsRef(type) || IsRef(key)) {\n const error = `Index types using Ref parameters require both Type and Key to be of TSchema`;\n if (!IsSchema(type) || !IsSchema(key))\n throw new TypeBoxError(error);\n return Computed('Index', [type, key]);\n }\n // mapped-types\n if (IsMappedResult(key))\n return IndexFromMappedResult(type, key, options);\n if (IsMappedKey(key))\n return IndexFromMappedKey(type, key, options);\n // prettier-ignore\n return CreateType(IsSchema(key)\n ? FromSchema(type, IndexPropertyKeys(key))\n : FromSchema(type, key), options);\n}\n","import { Index } from './indexed.mjs';\nimport { MappedResult } from '../mapped/index.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction MappedIndexPropertyKey(type, key, options) {\n return { [key]: Index(type, [key], Clone(options)) };\n}\n// prettier-ignore\nfunction MappedIndexPropertyKeys(type, propertyKeys, options) {\n return propertyKeys.reduce((result, left) => {\n return { ...result, ...MappedIndexPropertyKey(type, left, options) };\n }, {});\n}\n// prettier-ignore\nfunction MappedIndexProperties(type, mappedKey, options) {\n return MappedIndexPropertyKeys(type, mappedKey.keys, options);\n}\n// prettier-ignore\nexport function IndexFromMappedKey(type, mappedKey, options) {\n const properties = MappedIndexProperties(type, mappedKey, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates an Iterator type */\nexport function Iterator(items, options) {\n return CreateType({ [Kind]: 'Iterator', type: 'Iterator', items }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsOptional } from '../guard/kind.mjs';\n/** Creates a RequiredArray derived from the given TProperties value. */\nfunction RequiredArray(properties) {\n return globalThis.Object.keys(properties).filter((key) => !IsOptional(properties[key]));\n}\n/** `[Json]` Creates an Object type */\nfunction _Object_(properties, options) {\n const required = RequiredArray(properties);\n const schema = required.length > 0 ? { [Kind]: 'Object', type: 'object', required, properties } : { [Kind]: 'Object', type: 'object', properties };\n return CreateType(schema, options);\n}\n// ------------------------------------------------------------------\n// TypeScript 7: CommonJS TS2441\n//\n// TypeScript generates a CommonJS shim that patches local variables\n// via an unqualified reference to Object (e.g. the __esModule shim's\n// Object.defineProperty call). Other compiler tools have been\n// observed patching in the same way, but TypeScript 7 has correctly\n// begun flagging variables named Object in CommonJS, since they\n// conflict with the shim and can cause \"used before definition\"\n// errors. This is CommonJS-specific; no such shim exists for ESM.\n//\n// TypeBox works around this using a `var` declaration, which is\n// known to avoid use-before-definition errors. TypeBox 1.x employs\n// a similar strategy.\n// ------------------------------------------------------------------\n/** `[Json]` Creates an Object type */\n// @ts-ignore - error TS2441: Duplicate identifier 'Object'. Compiler reserves name 'Object' in top level scope of a module.\nexport var Object = _Object_;\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Promise type */\nexport function Promise(item, options) {\n return CreateType({ [Kind]: 'Promise', type: 'Promise', item }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { ReadonlyKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { ReadonlyFromMappedResult } from './readonly-from-mapped-result.mjs';\nimport { IsMappedResult } from '../guard/kind.mjs';\nfunction RemoveReadonly(schema) {\n return CreateType(Discard(schema, [ReadonlyKind]));\n}\nfunction AddReadonly(schema) {\n return CreateType({ ...schema, [ReadonlyKind]: 'Readonly' });\n}\n// prettier-ignore\nfunction ReadonlyWithFlag(schema, F) {\n return (F === false\n ? RemoveReadonly(schema)\n : AddReadonly(schema));\n}\n/** `[Json]` Creates a Readonly property */\nexport function Readonly(schema, enable) {\n const F = enable ?? true;\n return IsMappedResult(schema) ? ReadonlyFromMappedResult(schema, F) : ReadonlyWithFlag(schema, F);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Readonly } from './readonly.mjs';\n// prettier-ignore\nfunction FromProperties(K, F) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(K))\n Acc[K2] = Readonly(K[K2], F);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, F) {\n return FromProperties(R.properties, F);\n}\n// prettier-ignore\nexport function ReadonlyFromMappedResult(R, F) {\n const P = FromMappedResult(R, F);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Tuple type */\nexport function Tuple(types, options) {\n // prettier-ignore\n return CreateType(types.length > 0 ?\n { [Kind]: 'Tuple', type: 'array', items: types, additionalItems: false, minItems: types.length, maxItems: types.length } :\n { [Kind]: 'Tuple', type: 'array', minItems: types.length, maxItems: types.length }, options);\n}\n","import { Kind, OptionalKind, ReadonlyKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\n// evaluation types\nimport { Array } from '../array/index.mjs';\nimport { AsyncIterator } from '../async-iterator/index.mjs';\nimport { Constructor } from '../constructor/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Iterator } from '../iterator/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Object as _Object_ } from '../object/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { Promise } from '../promise/index.mjs';\nimport { Readonly } from '../readonly/index.mjs';\nimport { Tuple } from '../tuple/index.mjs';\nimport { Union } from '../union/index.mjs';\n// operator\nimport { SetIncludes } from '../sets/index.mjs';\n// mapping types\nimport { MappedResult } from './mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsArray, IsAsyncIterator, IsConstructor, IsFunction, IsIntersect, IsIterator, IsReadonly, IsMappedResult, IsMappedKey, IsObject, IsOptional, IsPromise, IsSchema, IsTuple, IsUnion } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromMappedResult(K, P) {\n return (K in P\n ? FromSchemaType(K, P[K])\n : MappedResult(P));\n}\n// prettier-ignore\nfunction MappedKeyToKnownMappedResultProperties(K) {\n return { [K]: Literal(K) };\n}\n// prettier-ignore\nfunction MappedKeyToUnknownMappedResultProperties(P) {\n const Acc = {};\n for (const L of P)\n Acc[L] = Literal(L);\n return Acc;\n}\n// prettier-ignore\nfunction MappedKeyToMappedResultProperties(K, P) {\n return (SetIncludes(P, K)\n ? MappedKeyToKnownMappedResultProperties(K)\n : MappedKeyToUnknownMappedResultProperties(P));\n}\n// prettier-ignore\nfunction FromMappedKey(K, P) {\n const R = MappedKeyToMappedResultProperties(K, P);\n return FromMappedResult(K, R);\n}\n// prettier-ignore\nfunction FromRest(K, T) {\n return T.map(L => FromSchemaType(K, L));\n}\n// prettier-ignore\nfunction FromProperties(K, T) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(T))\n Acc[K2] = FromSchemaType(K, T[K2]);\n return Acc;\n}\n// prettier-ignore\nfunction FromSchemaType(K, T) {\n // required to retain user defined options for mapped type\n const options = { ...T };\n return (\n // unevaluated modifier types\n IsOptional(T) ? Optional(FromSchemaType(K, Discard(T, [OptionalKind]))) :\n IsReadonly(T) ? Readonly(FromSchemaType(K, Discard(T, [ReadonlyKind]))) :\n // unevaluated mapped types\n IsMappedResult(T) ? FromMappedResult(K, T.properties) :\n IsMappedKey(T) ? FromMappedKey(K, T.keys) :\n // unevaluated types\n IsConstructor(T) ? Constructor(FromRest(K, T.parameters), FromSchemaType(K, T.returns), options) :\n IsFunction(T) ? FunctionType(FromRest(K, T.parameters), FromSchemaType(K, T.returns), options) :\n IsAsyncIterator(T) ? AsyncIterator(FromSchemaType(K, T.items), options) :\n IsIterator(T) ? Iterator(FromSchemaType(K, T.items), options) :\n IsIntersect(T) ? Intersect(FromRest(K, T.allOf), options) :\n IsUnion(T) ? Union(FromRest(K, T.anyOf), options) :\n IsTuple(T) ? Tuple(FromRest(K, T.items ?? []), options) :\n IsObject(T) ? _Object_(FromProperties(K, T.properties), options) :\n IsArray(T) ? Array(FromSchemaType(K, T.items), options) :\n IsPromise(T) ? Promise(FromSchemaType(K, T.item), options) :\n T);\n}\n// prettier-ignore\nexport function MappedFunctionReturnType(K, T) {\n const Acc = {};\n for (const L of K)\n Acc[L] = FromSchemaType(L, T);\n return Acc;\n}\n/** `[Json]` Creates a Mapped object type */\nexport function Mapped(key, map, options) {\n const K = IsSchema(key) ? IndexPropertyKeys(key) : key;\n const RT = map({ [Kind]: 'MappedKey', keys: K });\n const R = MappedFunctionReturnType(K, RT);\n return _Object_(R, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { OptionalKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { OptionalFromMappedResult } from './optional-from-mapped-result.mjs';\nimport { IsMappedResult } from '../guard/kind.mjs';\nfunction RemoveOptional(schema) {\n return CreateType(Discard(schema, [OptionalKind]));\n}\nfunction AddOptional(schema) {\n return CreateType({ ...schema, [OptionalKind]: 'Optional' });\n}\n// prettier-ignore\nfunction OptionalWithFlag(schema, F) {\n return (F === false\n ? RemoveOptional(schema)\n : AddOptional(schema));\n}\n/** `[Json]` Creates a Optional property */\nexport function Optional(schema, enable) {\n const F = enable ?? true;\n return IsMappedResult(schema) ? OptionalFromMappedResult(schema, F) : OptionalWithFlag(schema, F);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Optional } from './optional.mjs';\n// prettier-ignore\nfunction FromProperties(P, F) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Optional(P[K2], F);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, F) {\n return FromProperties(R.properties, F);\n}\n// prettier-ignore\nexport function OptionalFromMappedResult(R, F) {\n const P = FromMappedResult(R, F);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsObject, IsSchema } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// IntersectCreate\n// ------------------------------------------------------------------\n// prettier-ignore\nexport function IntersectCreate(T, options = {}) {\n const allObjects = T.every((schema) => IsObject(schema));\n const clonedUnevaluatedProperties = IsSchema(options.unevaluatedProperties)\n ? { unevaluatedProperties: options.unevaluatedProperties }\n : {};\n return CreateType((options.unevaluatedProperties === false || IsSchema(options.unevaluatedProperties) || allObjects\n ? { ...clonedUnevaluatedProperties, [Kind]: 'Intersect', type: 'object', allOf: T }\n : { ...clonedUnevaluatedProperties, [Kind]: 'Intersect', allOf: T }), options);\n}\n","import { OptionalKind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/type.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { IntersectCreate } from './intersect-create.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsOptional, IsTransform } from '../guard/kind.mjs';\n// prettier-ignore\nfunction IsIntersectOptional(types) {\n return types.every(left => IsOptional(left));\n}\n// prettier-ignore\nfunction RemoveOptionalFromType(type) {\n return (Discard(type, [OptionalKind]));\n}\n// prettier-ignore\nfunction RemoveOptionalFromRest(types) {\n return types.map(left => IsOptional(left) ? RemoveOptionalFromType(left) : left);\n}\n// prettier-ignore\nfunction ResolveIntersect(types, options) {\n return (IsIntersectOptional(types)\n ? Optional(IntersectCreate(RemoveOptionalFromRest(types), options))\n : IntersectCreate(RemoveOptionalFromRest(types), options));\n}\n/** `[Json]` Creates an evaluated Intersect type */\nexport function IntersectEvaluated(types, options = {}) {\n if (types.length === 1)\n return CreateType(types[0], options);\n if (types.length === 0)\n return Never(options);\n if (types.some((schema) => IsTransform(schema)))\n throw new Error('Cannot intersect transform types');\n return ResolveIntersect(types, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Never } from '../never/index.mjs';\nimport { IntersectCreate } from './intersect-create.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTransform } from '../guard/kind.mjs';\n/** `[Json]` Creates an evaluated Intersect type */\nexport function Intersect(types, options) {\n if (types.length === 1)\n return CreateType(types[0], options);\n if (types.length === 0)\n return Never(options);\n if (types.some((schema) => IsTransform(schema)))\n throw new Error('Cannot intersect transform types');\n return IntersectCreate(types, options);\n}\n","import { TypeBoxError } from '../error/index.mjs';\nimport { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Ref type. The referenced type must contain a $id */\nexport function Ref(...args) {\n const [$ref, options] = typeof args[0] === 'string' ? [args[0], args[1]] : [args[0].$id, args[1]];\n if (typeof $ref !== 'string')\n throw new TypeBoxError('Ref: $ref must be a string');\n return CreateType({ [Kind]: 'Ref', $ref }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Ref } from '../ref/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsIntersect, IsUnion, IsPromise, IsRef, IsComputed } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromComputed(target, parameters) {\n return Computed('Awaited', [Computed(target, parameters)]);\n}\n// prettier-ignore\nfunction FromRef($ref) {\n return Computed('Awaited', [Ref($ref)]);\n}\n// prettier-ignore\nfunction FromIntersect(types) {\n return Intersect(FromRest(types));\n}\n// prettier-ignore\nfunction FromUnion(types) {\n return Union(FromRest(types));\n}\n// prettier-ignore\nfunction FromPromise(type) {\n return Awaited(type);\n}\n// prettier-ignore\nfunction FromRest(types) {\n return types.map(type => Awaited(type));\n}\n/** `[JavaScript]` Constructs a type by recursively unwrapping Promise types */\nexport function Awaited(type, options) {\n return CreateType(IsComputed(type) ? FromComputed(type.target, type.parameters) : IsIntersect(type) ? FromIntersect(type.allOf) : IsUnion(type) ? FromUnion(type.anyOf) : IsPromise(type) ? FromPromise(type.item) : IsRef(type) ? FromRef(type.$ref) : type, options);\n}\n","import { SetUnionMany, SetIntersectMany } from '../sets/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsIntersect, IsUnion, IsTuple, IsArray, IsObject, IsRecord } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromRest(types) {\n const result = [];\n for (const L of types)\n result.push(KeyOfPropertyKeys(L));\n return result;\n}\n// prettier-ignore\nfunction FromIntersect(types) {\n const propertyKeysArray = FromRest(types);\n const propertyKeys = SetUnionMany(propertyKeysArray);\n return propertyKeys;\n}\n// prettier-ignore\nfunction FromUnion(types) {\n const propertyKeysArray = FromRest(types);\n const propertyKeys = SetIntersectMany(propertyKeysArray);\n return propertyKeys;\n}\n// prettier-ignore\nfunction FromTuple(types) {\n return types.map((_, indexer) => indexer.toString());\n}\n// prettier-ignore\nfunction FromArray(_) {\n return (['[number]']);\n}\n// prettier-ignore\nfunction FromProperties(T) {\n return (globalThis.Object.getOwnPropertyNames(T));\n}\n// ------------------------------------------------------------------\n// FromPatternProperties\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromPatternProperties(patternProperties) {\n if (!includePatternProperties)\n return [];\n const patternPropertyKeys = globalThis.Object.getOwnPropertyNames(patternProperties);\n return patternPropertyKeys.map(key => {\n return (key[0] === '^' && key[key.length - 1] === '$')\n ? key.slice(1, key.length - 1)\n : key;\n });\n}\n/** Returns a tuple of PropertyKeys derived from the given TSchema. */\n// prettier-ignore\nexport function KeyOfPropertyKeys(type) {\n return (IsIntersect(type) ? FromIntersect(type.allOf) :\n IsUnion(type) ? FromUnion(type.anyOf) :\n IsTuple(type) ? FromTuple(type.items ?? []) :\n IsArray(type) ? FromArray(type.items) :\n IsObject(type) ? FromProperties(type.properties) :\n IsRecord(type) ? FromPatternProperties(type.patternProperties) :\n []);\n}\n// ----------------------------------------------------------------\n// KeyOfPattern\n// ----------------------------------------------------------------\nlet includePatternProperties = false;\n/** Returns a regular expression pattern derived from the given TSchema */\nexport function KeyOfPattern(schema) {\n includePatternProperties = true;\n const keys = KeyOfPropertyKeys(schema);\n includePatternProperties = false;\n const pattern = keys.map((key) => `(${key})`);\n return `^(${pattern.join('|')})$`;\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Ref } from '../ref/index.mjs';\nimport { KeyOfPropertyKeys } from './keyof-property-keys.mjs';\nimport { UnionEvaluated } from '../union/index.mjs';\nimport { KeyOfFromMappedResult } from './keyof-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedResult, IsRef, IsComputed } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromComputed(target, parameters) {\n return Computed('KeyOf', [Computed(target, parameters)]);\n}\n// prettier-ignore\nfunction FromRef($ref) {\n return Computed('KeyOf', [Ref($ref)]);\n}\n// prettier-ignore\nfunction KeyOfFromType(type, options) {\n const propertyKeys = KeyOfPropertyKeys(type);\n const propertyKeyTypes = KeyOfPropertyKeysToRest(propertyKeys);\n const result = UnionEvaluated(propertyKeyTypes);\n return CreateType(result, options);\n}\n// prettier-ignore\nexport function KeyOfPropertyKeysToRest(propertyKeys) {\n return propertyKeys.map(L => L === '[number]' ? Number() : Literal(L));\n}\n/** `[Json]` Creates a KeyOf type */\nexport function KeyOf(type, options) {\n return (IsComputed(type) ? FromComputed(type.target, type.parameters) : IsRef(type) ? FromRef(type.$ref) : IsMappedResult(type) ? KeyOfFromMappedResult(type, options) : KeyOfFromType(type, options));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { KeyOf } from './keyof.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(properties, options) {\n const result = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(properties))\n result[K2] = KeyOf(properties[K2], Clone(options));\n return result;\n}\n// prettier-ignore\nfunction FromMappedResult(mappedResult, options) {\n return FromProperties(mappedResult.properties, options);\n}\n// prettier-ignore\nexport function KeyOfFromMappedResult(mappedResult, options) {\n const properties = FromMappedResult(mappedResult, options);\n return MappedResult(properties);\n}\n","import { IntersectEvaluated } from '../intersect/index.mjs';\nimport { IndexFromPropertyKeys } from '../indexed/index.mjs';\nimport { KeyOfPropertyKeys } from '../keyof/index.mjs';\nimport { Object as _Object_ } from '../object/index.mjs';\nimport { SetDistinct } from '../sets/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsNever } from '../guard/kind.mjs';\n// prettier-ignore\nfunction CompositeKeys(T) {\n const Acc = [];\n for (const L of T)\n Acc.push(...KeyOfPropertyKeys(L));\n return SetDistinct(Acc);\n}\n// prettier-ignore\nfunction FilterNever(T) {\n return T.filter(L => !IsNever(L));\n}\n// prettier-ignore\nfunction CompositeProperty(T, K) {\n const Acc = [];\n for (const L of T)\n Acc.push(...IndexFromPropertyKeys(L, [K]));\n return FilterNever(Acc);\n}\n// prettier-ignore\nfunction CompositeProperties(T, K) {\n const Acc = {};\n for (const L of K) {\n Acc[L] = IntersectEvaluated(CompositeProperty(T, L));\n }\n return Acc;\n}\n// prettier-ignore\nexport function Composite(T, options) {\n const K = CompositeKeys(T);\n const P = CompositeProperties(T, K);\n const R = _Object_(P, options);\n return R;\n}\n","import { Kind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/type.mjs';\n/** `[JavaScript]` Creates a Date type */\nexport function Date(options) {\n return CreateType({ [Kind]: 'Date', type: 'Date' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Null type */\nexport function Null(options) {\n return CreateType({ [Kind]: 'Null', type: 'null' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Symbol type */\nexport function Symbol(options) {\n return CreateType({ [Kind]: 'Symbol', type: 'symbol' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Undefined type */\nexport function Undefined(options) {\n return CreateType({ [Kind]: 'Undefined', type: 'undefined' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Uint8Array type */\nexport function Uint8Array(options) {\n return CreateType({ [Kind]: 'Uint8Array', type: 'Uint8Array' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Unknown type */\nexport function Unknown(options) {\n return CreateType({ [Kind]: 'Unknown' }, options);\n}\n","import { Any } from '../any/index.mjs';\nimport { BigInt } from '../bigint/index.mjs';\nimport { Date } from '../date/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Null } from '../null/index.mjs';\nimport { Object as _Object_ } from '../object/index.mjs';\nimport { Symbol } from '../symbol/index.mjs';\nimport { Tuple } from '../tuple/index.mjs';\nimport { Readonly } from '../readonly/index.mjs';\nimport { Undefined } from '../undefined/index.mjs';\nimport { Uint8Array } from '../uint8array/index.mjs';\nimport { Unknown } from '../unknown/index.mjs';\nimport { CreateType } from '../create/index.mjs';\n// ------------------------------------------------------------------\n// ValueGuard\n// ------------------------------------------------------------------\nimport { IsArray, IsNumber, IsBigInt, IsUint8Array, IsDate, IsIterator, IsObject, IsAsyncIterator, IsFunction, IsUndefined, IsNull, IsSymbol, IsBoolean, IsString } from '../guard/value.mjs';\n// prettier-ignore\nfunction FromArray(T) {\n return T.map(L => FromValue(L, false));\n}\n// prettier-ignore\nfunction FromProperties(value) {\n const Acc = {};\n for (const K of globalThis.Object.getOwnPropertyNames(value))\n Acc[K] = Readonly(FromValue(value[K], false));\n return Acc;\n}\nfunction ConditionalReadonly(T, root) {\n return (root === true ? T : Readonly(T));\n}\n// prettier-ignore\nfunction FromValue(value, root) {\n return (IsAsyncIterator(value) ? ConditionalReadonly(Any(), root) :\n IsIterator(value) ? ConditionalReadonly(Any(), root) :\n IsArray(value) ? Readonly(Tuple(FromArray(value))) :\n IsUint8Array(value) ? Uint8Array() :\n IsDate(value) ? Date() :\n IsObject(value) ? ConditionalReadonly(_Object_(FromProperties(value)), root) :\n IsFunction(value) ? ConditionalReadonly(FunctionType([], Unknown()), root) :\n IsUndefined(value) ? Undefined() :\n IsNull(value) ? Null() :\n IsSymbol(value) ? Symbol() :\n IsBigInt(value) ? BigInt() :\n IsNumber(value) ? Literal(value) :\n IsBoolean(value) ? Literal(value) :\n IsString(value) ? Literal(value) :\n _Object_({}));\n}\n/** `[JavaScript]` Creates a readonly const type from the given value. */\nexport function Const(T, options) {\n return CreateType(FromValue(T, true), options);\n}\n","import { Tuple } from '../tuple/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n/** `[JavaScript]` Extracts the ConstructorParameters from the given Constructor type */\nexport function ConstructorParameters(schema, options) {\n return (KindGuard.IsConstructor(schema) ? Tuple(schema.parameters, options) : Never(options));\n}\n","import { Literal } from '../literal/index.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\nimport { Union } from '../union/index.mjs';\n// ------------------------------------------------------------------\n// ValueGuard\n// ------------------------------------------------------------------\nimport { IsUndefined } from '../guard/value.mjs';\n/** `[Json]` Creates a Enum type */\nexport function Enum(item, options) {\n if (IsUndefined(item))\n throw new Error('Enum undefined or empty');\n const values1 = globalThis.Object.getOwnPropertyNames(item)\n .filter((key) => isNaN(key))\n .map((key) => item[key]);\n const values2 = [...new Set(values1)];\n const anyOf = values2.map((value) => Literal(value));\n return Union(anyOf, { ...options, [Hint]: 'Enum' });\n}\n","import { Any } from '../any/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { String } from '../string/index.mjs';\nimport { Unknown } from '../unknown/index.mjs';\nimport { TemplateLiteralToUnion } from '../template-literal/index.mjs';\nimport { PatternNumberExact, PatternStringExact } from '../patterns/index.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\nimport { TypeGuard, ValueGuard } from '../guard/index.mjs';\nexport class ExtendsResolverError extends TypeBoxError {\n}\nexport var ExtendsResult;\n(function (ExtendsResult) {\n ExtendsResult[ExtendsResult[\"Union\"] = 0] = \"Union\";\n ExtendsResult[ExtendsResult[\"True\"] = 1] = \"True\";\n ExtendsResult[ExtendsResult[\"False\"] = 2] = \"False\";\n})(ExtendsResult || (ExtendsResult = {}));\n// ------------------------------------------------------------------\n// IntoBooleanResult\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IntoBooleanResult(result) {\n return result === ExtendsResult.False ? result : ExtendsResult.True;\n}\n// ------------------------------------------------------------------\n// Throw\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction Throw(message) {\n throw new ExtendsResolverError(message);\n}\n// ------------------------------------------------------------------\n// StructuralRight\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsStructuralRight(right) {\n return (TypeGuard.IsNever(right) ||\n TypeGuard.IsIntersect(right) ||\n TypeGuard.IsUnion(right) ||\n TypeGuard.IsUnknown(right) ||\n TypeGuard.IsAny(right));\n}\n// prettier-ignore\nfunction StructuralRight(left, right) {\n return (TypeGuard.IsNever(right) ? FromNeverRight(left, right) :\n TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n TypeGuard.IsUnion(right) ? FromUnionRight(left, right) :\n TypeGuard.IsUnknown(right) ? FromUnknownRight(left, right) :\n TypeGuard.IsAny(right) ? FromAnyRight(left, right) :\n Throw('StructuralRight'));\n}\n// ------------------------------------------------------------------\n// Any\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromAnyRight(left, right) {\n return ExtendsResult.True;\n}\n// prettier-ignore\nfunction FromAny(left, right) {\n return (TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n (TypeGuard.IsUnion(right) && right.anyOf.some((schema) => TypeGuard.IsAny(schema) || TypeGuard.IsUnknown(schema))) ? ExtendsResult.True :\n TypeGuard.IsUnion(right) ? ExtendsResult.Union :\n TypeGuard.IsUnknown(right) ? ExtendsResult.True :\n TypeGuard.IsAny(right) ? ExtendsResult.True :\n ExtendsResult.Union);\n}\n// ------------------------------------------------------------------\n// Array\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromArrayRight(left, right) {\n return (TypeGuard.IsUnknown(left) ? ExtendsResult.False :\n TypeGuard.IsAny(left) ? ExtendsResult.Union :\n TypeGuard.IsNever(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromArray(left, right) {\n return (TypeGuard.IsObject(right) && IsObjectArrayLike(right) ? ExtendsResult.True :\n IsStructuralRight(right) ? StructuralRight(left, right) :\n !TypeGuard.IsArray(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.items, right.items)));\n}\n// ------------------------------------------------------------------\n// AsyncIterator\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromAsyncIterator(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n !TypeGuard.IsAsyncIterator(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.items, right.items)));\n}\n// ------------------------------------------------------------------\n// BigInt\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromBigInt(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsBigInt(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Boolean\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromBooleanRight(left, right) {\n return (TypeGuard.IsLiteralBoolean(left) ? ExtendsResult.True :\n TypeGuard.IsBoolean(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromBoolean(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsBoolean(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Constructor\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromConstructor(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n !TypeGuard.IsConstructor(right) ? ExtendsResult.False :\n left.parameters.length > right.parameters.length ? ExtendsResult.False :\n (!left.parameters.every((schema, index) => IntoBooleanResult(Visit(right.parameters[index], schema)) === ExtendsResult.True)) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.returns, right.returns)));\n}\n// ------------------------------------------------------------------\n// Date\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromDate(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsDate(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Function\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromFunction(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n !TypeGuard.IsFunction(right) ? ExtendsResult.False :\n left.parameters.length > right.parameters.length ? ExtendsResult.False :\n (!left.parameters.every((schema, index) => IntoBooleanResult(Visit(right.parameters[index], schema)) === ExtendsResult.True)) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.returns, right.returns)));\n}\n// ------------------------------------------------------------------\n// Integer\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromIntegerRight(left, right) {\n return (TypeGuard.IsLiteral(left) && ValueGuard.IsNumber(left.const) ? ExtendsResult.True :\n TypeGuard.IsNumber(left) || TypeGuard.IsInteger(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromInteger(left, right) {\n return (TypeGuard.IsInteger(right) || TypeGuard.IsNumber(right) ? ExtendsResult.True :\n IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Intersect\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromIntersectRight(left, right) {\n return right.allOf.every((schema) => Visit(left, schema) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// prettier-ignore\nfunction FromIntersect(left, right) {\n return left.allOf.some((schema) => Visit(schema, right) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// ------------------------------------------------------------------\n// Iterator\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromIterator(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n !TypeGuard.IsIterator(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.items, right.items)));\n}\n// ------------------------------------------------------------------\n// Literal\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromLiteral(left, right) {\n return (TypeGuard.IsLiteral(right) && right.const === left.const ? ExtendsResult.True :\n IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsString(right) ? FromStringRight(left, right) :\n TypeGuard.IsNumber(right) ? FromNumberRight(left, right) :\n TypeGuard.IsInteger(right) ? FromIntegerRight(left, right) :\n TypeGuard.IsBoolean(right) ? FromBooleanRight(left, right) :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Never\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromNeverRight(left, right) {\n return ExtendsResult.False;\n}\n// prettier-ignore\nfunction FromNever(left, right) {\n return ExtendsResult.True;\n}\n// ------------------------------------------------------------------\n// Not\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction UnwrapTNot(schema) {\n let [current, depth] = [schema, 0];\n while (true) {\n if (!TypeGuard.IsNot(current))\n break;\n current = current.not;\n depth += 1;\n }\n return depth % 2 === 0 ? current : Unknown();\n}\n// prettier-ignore\nfunction FromNot(left, right) {\n // TypeScript has no concept of negated types, and attempts to correctly check the negated\n // type at runtime would put TypeBox at odds with TypeScripts ability to statically infer\n // the type. Instead we unwrap to either unknown or T and continue evaluating.\n // prettier-ignore\n return (TypeGuard.IsNot(left) ? Visit(UnwrapTNot(left), right) :\n TypeGuard.IsNot(right) ? Visit(left, UnwrapTNot(right)) :\n Throw('Invalid fallthrough for Not'));\n}\n// ------------------------------------------------------------------\n// Null\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromNull(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsNull(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Number\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromNumberRight(left, right) {\n return (TypeGuard.IsLiteralNumber(left) ? ExtendsResult.True :\n TypeGuard.IsNumber(left) || TypeGuard.IsInteger(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromNumber(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsInteger(right) || TypeGuard.IsNumber(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Object\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsObjectPropertyCount(schema, count) {\n return Object.getOwnPropertyNames(schema.properties).length === count;\n}\n// prettier-ignore\nfunction IsObjectStringLike(schema) {\n return IsObjectArrayLike(schema);\n}\n// prettier-ignore\nfunction IsObjectSymbolLike(schema) {\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'description' in schema.properties && TypeGuard.IsUnion(schema.properties.description) && schema.properties.description.anyOf.length === 2 && ((TypeGuard.IsString(schema.properties.description.anyOf[0]) &&\n TypeGuard.IsUndefined(schema.properties.description.anyOf[1])) || (TypeGuard.IsString(schema.properties.description.anyOf[1]) &&\n TypeGuard.IsUndefined(schema.properties.description.anyOf[0]))));\n}\n// prettier-ignore\nfunction IsObjectNumberLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectBooleanLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectBigIntLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectDateLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectUint8ArrayLike(schema) {\n return IsObjectArrayLike(schema);\n}\n// prettier-ignore\nfunction IsObjectFunctionLike(schema) {\n const length = Number();\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'length' in schema.properties && IntoBooleanResult(Visit(schema.properties['length'], length)) === ExtendsResult.True);\n}\n// prettier-ignore\nfunction IsObjectConstructorLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectArrayLike(schema) {\n const length = Number();\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'length' in schema.properties && IntoBooleanResult(Visit(schema.properties['length'], length)) === ExtendsResult.True);\n}\n// prettier-ignore\nfunction IsObjectPromiseLike(schema) {\n const then = FunctionType([Any()], Any());\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'then' in schema.properties && IntoBooleanResult(Visit(schema.properties['then'], then)) === ExtendsResult.True);\n}\n// ------------------------------------------------------------------\n// Property\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction Property(left, right) {\n return (Visit(left, right) === ExtendsResult.False ? ExtendsResult.False :\n TypeGuard.IsOptional(left) && !TypeGuard.IsOptional(right) ? ExtendsResult.False :\n ExtendsResult.True);\n}\n// prettier-ignore\nfunction FromObjectRight(left, right) {\n return (TypeGuard.IsUnknown(left) ? ExtendsResult.False :\n TypeGuard.IsAny(left) ? ExtendsResult.Union : (TypeGuard.IsNever(left) ||\n (TypeGuard.IsLiteralString(left) && IsObjectStringLike(right)) ||\n (TypeGuard.IsLiteralNumber(left) && IsObjectNumberLike(right)) ||\n (TypeGuard.IsLiteralBoolean(left) && IsObjectBooleanLike(right)) ||\n (TypeGuard.IsSymbol(left) && IsObjectSymbolLike(right)) ||\n (TypeGuard.IsBigInt(left) && IsObjectBigIntLike(right)) ||\n (TypeGuard.IsString(left) && IsObjectStringLike(right)) ||\n (TypeGuard.IsSymbol(left) && IsObjectSymbolLike(right)) ||\n (TypeGuard.IsNumber(left) && IsObjectNumberLike(right)) ||\n (TypeGuard.IsInteger(left) && IsObjectNumberLike(right)) ||\n (TypeGuard.IsBoolean(left) && IsObjectBooleanLike(right)) ||\n (TypeGuard.IsUint8Array(left) && IsObjectUint8ArrayLike(right)) ||\n (TypeGuard.IsDate(left) && IsObjectDateLike(right)) ||\n (TypeGuard.IsConstructor(left) && IsObjectConstructorLike(right)) ||\n (TypeGuard.IsFunction(left) && IsObjectFunctionLike(right))) ? ExtendsResult.True :\n (TypeGuard.IsRecord(left) && TypeGuard.IsString(RecordKey(left))) ? (() => {\n // When expressing a Record with literal key values, the Record is converted into a Object with\n // the Hint assigned as `Record`. This is used to invert the extends logic.\n return right[Hint] === 'Record' ? ExtendsResult.True : ExtendsResult.False;\n })() :\n (TypeGuard.IsRecord(left) && TypeGuard.IsNumber(RecordKey(left))) ? (() => {\n return IsObjectPropertyCount(right, 0) ? ExtendsResult.True : ExtendsResult.False;\n })() :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromObject(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n !TypeGuard.IsObject(right) ? ExtendsResult.False :\n (() => {\n for (const key of Object.getOwnPropertyNames(right.properties)) {\n if (!(key in left.properties) && !TypeGuard.IsOptional(right.properties[key])) {\n return ExtendsResult.False;\n }\n if (TypeGuard.IsOptional(right.properties[key])) {\n return ExtendsResult.True;\n }\n if (Property(left.properties[key], right.properties[key]) === ExtendsResult.False) {\n return ExtendsResult.False;\n }\n }\n return ExtendsResult.True;\n })());\n}\n// ------------------------------------------------------------------\n// Promise\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromPromise(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) && IsObjectPromiseLike(right) ? ExtendsResult.True :\n !TypeGuard.IsPromise(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.item, right.item)));\n}\n// ------------------------------------------------------------------\n// Record\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RecordKey(schema) {\n return (PatternNumberExact in schema.patternProperties ? Number() :\n PatternStringExact in schema.patternProperties ? String() :\n Throw('Unknown record key pattern'));\n}\n// prettier-ignore\nfunction RecordValue(schema) {\n return (PatternNumberExact in schema.patternProperties ? schema.patternProperties[PatternNumberExact] :\n PatternStringExact in schema.patternProperties ? schema.patternProperties[PatternStringExact] :\n Throw('Unable to get record value schema'));\n}\n// prettier-ignore\nfunction FromRecordRight(left, right) {\n const [Key, Value] = [RecordKey(right), RecordValue(right)];\n return ((TypeGuard.IsLiteralString(left) && TypeGuard.IsNumber(Key) && IntoBooleanResult(Visit(left, Value)) === ExtendsResult.True) ? ExtendsResult.True :\n TypeGuard.IsUint8Array(left) && TypeGuard.IsNumber(Key) ? Visit(left, Value) :\n TypeGuard.IsString(left) && TypeGuard.IsNumber(Key) ? Visit(left, Value) :\n TypeGuard.IsArray(left) && TypeGuard.IsNumber(Key) ? Visit(left, Value) :\n TypeGuard.IsObject(left) ? (() => {\n for (const key of Object.getOwnPropertyNames(left.properties)) {\n if (Property(Value, left.properties[key]) === ExtendsResult.False) {\n return ExtendsResult.False;\n }\n }\n return ExtendsResult.True;\n })() :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromRecord(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n !TypeGuard.IsRecord(right) ? ExtendsResult.False :\n Visit(RecordValue(left), RecordValue(right)));\n}\n// ------------------------------------------------------------------\n// RegExp\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromRegExp(left, right) {\n // Note: RegExp types evaluate as strings, not RegExp objects.\n // Here we remap either into string and continue evaluating.\n const L = TypeGuard.IsRegExp(left) ? String() : left;\n const R = TypeGuard.IsRegExp(right) ? String() : right;\n return Visit(L, R);\n}\n// ------------------------------------------------------------------\n// String\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromStringRight(left, right) {\n return (TypeGuard.IsLiteral(left) && ValueGuard.IsString(left.const) ? ExtendsResult.True :\n TypeGuard.IsString(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromString(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsString(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Symbol\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromSymbol(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsSymbol(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// TemplateLiteral\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromTemplateLiteral(left, right) {\n // TemplateLiteral types are resolved to either unions for finite expressions or string\n // for infinite expressions. Here we call to TemplateLiteralResolver to resolve for\n // either type and continue evaluating.\n return (TypeGuard.IsTemplateLiteral(left) ? Visit(TemplateLiteralToUnion(left), right) :\n TypeGuard.IsTemplateLiteral(right) ? Visit(left, TemplateLiteralToUnion(right)) :\n Throw('Invalid fallthrough for TemplateLiteral'));\n}\n// ------------------------------------------------------------------\n// Tuple\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsArrayOfTuple(left, right) {\n return (TypeGuard.IsArray(right) &&\n left.items !== undefined &&\n left.items.every((schema) => Visit(schema, right.items) === ExtendsResult.True));\n}\n// prettier-ignore\nfunction FromTupleRight(left, right) {\n return (TypeGuard.IsNever(left) ? ExtendsResult.True :\n TypeGuard.IsUnknown(left) ? ExtendsResult.False :\n TypeGuard.IsAny(left) ? ExtendsResult.Union :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromTuple(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) && IsObjectArrayLike(right) ? ExtendsResult.True :\n TypeGuard.IsArray(right) && IsArrayOfTuple(left, right) ? ExtendsResult.True :\n !TypeGuard.IsTuple(right) ? ExtendsResult.False :\n (ValueGuard.IsUndefined(left.items) && !ValueGuard.IsUndefined(right.items)) || (!ValueGuard.IsUndefined(left.items) && ValueGuard.IsUndefined(right.items)) ? ExtendsResult.False :\n (ValueGuard.IsUndefined(left.items) && !ValueGuard.IsUndefined(right.items)) ? ExtendsResult.True :\n left.items.every((schema, index) => Visit(schema, right.items[index]) === ExtendsResult.True) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Uint8Array\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUint8Array(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsUint8Array(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Undefined\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUndefined(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsVoid(right) ? FromVoidRight(left, right) :\n TypeGuard.IsUndefined(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Union\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUnionRight(left, right) {\n return right.anyOf.some((schema) => Visit(left, schema) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// prettier-ignore\nfunction FromUnion(left, right) {\n return left.anyOf.every((schema) => Visit(schema, right) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// ------------------------------------------------------------------\n// Unknown\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUnknownRight(left, right) {\n return ExtendsResult.True;\n}\n// prettier-ignore\nfunction FromUnknown(left, right) {\n return (TypeGuard.IsNever(right) ? FromNeverRight(left, right) :\n TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n TypeGuard.IsUnion(right) ? FromUnionRight(left, right) :\n TypeGuard.IsAny(right) ? FromAnyRight(left, right) :\n TypeGuard.IsString(right) ? FromStringRight(left, right) :\n TypeGuard.IsNumber(right) ? FromNumberRight(left, right) :\n TypeGuard.IsInteger(right) ? FromIntegerRight(left, right) :\n TypeGuard.IsBoolean(right) ? FromBooleanRight(left, right) :\n TypeGuard.IsArray(right) ? FromArrayRight(left, right) :\n TypeGuard.IsTuple(right) ? FromTupleRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsUnknown(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Void\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromVoidRight(left, right) {\n return (TypeGuard.IsUndefined(left) ? ExtendsResult.True :\n TypeGuard.IsUndefined(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromVoid(left, right) {\n return (TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n TypeGuard.IsUnion(right) ? FromUnionRight(left, right) :\n TypeGuard.IsUnknown(right) ? FromUnknownRight(left, right) :\n TypeGuard.IsAny(right) ? FromAnyRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsVoid(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction Visit(left, right) {\n return (\n // resolvable\n (TypeGuard.IsTemplateLiteral(left) || TypeGuard.IsTemplateLiteral(right)) ? FromTemplateLiteral(left, right) :\n (TypeGuard.IsRegExp(left) || TypeGuard.IsRegExp(right)) ? FromRegExp(left, right) :\n (TypeGuard.IsNot(left) || TypeGuard.IsNot(right)) ? FromNot(left, right) :\n // standard\n TypeGuard.IsAny(left) ? FromAny(left, right) :\n TypeGuard.IsArray(left) ? FromArray(left, right) :\n TypeGuard.IsBigInt(left) ? FromBigInt(left, right) :\n TypeGuard.IsBoolean(left) ? FromBoolean(left, right) :\n TypeGuard.IsAsyncIterator(left) ? FromAsyncIterator(left, right) :\n TypeGuard.IsConstructor(left) ? FromConstructor(left, right) :\n TypeGuard.IsDate(left) ? FromDate(left, right) :\n TypeGuard.IsFunction(left) ? FromFunction(left, right) :\n TypeGuard.IsInteger(left) ? FromInteger(left, right) :\n TypeGuard.IsIntersect(left) ? FromIntersect(left, right) :\n TypeGuard.IsIterator(left) ? FromIterator(left, right) :\n TypeGuard.IsLiteral(left) ? FromLiteral(left, right) :\n TypeGuard.IsNever(left) ? FromNever(left, right) :\n TypeGuard.IsNull(left) ? FromNull(left, right) :\n TypeGuard.IsNumber(left) ? FromNumber(left, right) :\n TypeGuard.IsObject(left) ? FromObject(left, right) :\n TypeGuard.IsRecord(left) ? FromRecord(left, right) :\n TypeGuard.IsString(left) ? FromString(left, right) :\n TypeGuard.IsSymbol(left) ? FromSymbol(left, right) :\n TypeGuard.IsTuple(left) ? FromTuple(left, right) :\n TypeGuard.IsPromise(left) ? FromPromise(left, right) :\n TypeGuard.IsUint8Array(left) ? FromUint8Array(left, right) :\n TypeGuard.IsUndefined(left) ? FromUndefined(left, right) :\n TypeGuard.IsUnion(left) ? FromUnion(left, right) :\n TypeGuard.IsUnknown(left) ? FromUnknown(left, right) :\n TypeGuard.IsVoid(left) ? FromVoid(left, right) :\n Throw(`Unknown left type operand '${left[Kind]}'`));\n}\nexport function ExtendsCheck(left, right) {\n return Visit(left, right);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Extends } from './extends.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(P, Right, True, False, options) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Extends(P[K2], Right, True, False, Clone(options));\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(Left, Right, True, False, options) {\n return FromProperties(Left.properties, Right, True, False, options);\n}\n// prettier-ignore\nexport function ExtendsFromMappedResult(Left, Right, True, False, options) {\n const P = FromMappedResult(Left, Right, True, False, options);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Union } from '../union/index.mjs';\nimport { ExtendsCheck, ExtendsResult } from './extends-check.mjs';\nimport { ExtendsFromMappedKey } from './extends-from-mapped-key.mjs';\nimport { ExtendsFromMappedResult } from './extends-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsMappedResult } from '../guard/kind.mjs';\n// prettier-ignore\nfunction ExtendsResolve(left, right, trueType, falseType) {\n const R = ExtendsCheck(left, right);\n return (R === ExtendsResult.Union ? Union([trueType, falseType]) :\n R === ExtendsResult.True ? trueType :\n falseType);\n}\n/** `[Json]` Creates a Conditional type */\nexport function Extends(L, R, T, F, options) {\n // prettier-ignore\n return (IsMappedResult(L) ? ExtendsFromMappedResult(L, R, T, F, options) :\n IsMappedKey(L) ? CreateType(ExtendsFromMappedKey(L, R, T, F, options)) :\n CreateType(ExtendsResolve(L, R, T, F), options));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Extends } from './extends.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromPropertyKey(K, U, L, R, options) {\n return {\n [K]: Extends(Literal(K), U, L, R, Clone(options))\n };\n}\n// prettier-ignore\nfunction FromPropertyKeys(K, U, L, R, options) {\n return K.reduce((Acc, LK) => {\n return { ...Acc, ...FromPropertyKey(LK, U, L, R, options) };\n }, {});\n}\n// prettier-ignore\nfunction FromMappedKey(K, U, L, R, options) {\n return FromPropertyKeys(K.keys, U, L, R, options);\n}\n// prettier-ignore\nexport function ExtendsFromMappedKey(T, U, L, R, options) {\n const P = FromMappedKey(T, U, L, R, options);\n return MappedResult(P);\n}\n","import { Exclude } from './exclude.mjs';\nimport { TemplateLiteralToUnion } from '../template-literal/index.mjs';\nexport function ExcludeFromTemplateLiteral(L, R) {\n return Exclude(TemplateLiteralToUnion(L), R);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { ExtendsCheck, ExtendsResult } from '../extends/index.mjs';\nimport { ExcludeFromMappedResult } from './exclude-from-mapped-result.mjs';\nimport { ExcludeFromTemplateLiteral } from './exclude-from-template-literal.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedResult, IsTemplateLiteral, IsUnion } from '../guard/kind.mjs';\nfunction ExcludeRest(L, R) {\n const excluded = L.filter((inner) => ExtendsCheck(inner, R) === ExtendsResult.False);\n return excluded.length === 1 ? excluded[0] : Union(excluded);\n}\n/** `[Json]` Constructs a type by excluding from unionType all union members that are assignable to excludedMembers */\nexport function Exclude(L, R, options = {}) {\n // overloads\n if (IsTemplateLiteral(L))\n return CreateType(ExcludeFromTemplateLiteral(L, R), options);\n if (IsMappedResult(L))\n return CreateType(ExcludeFromMappedResult(L, R), options);\n // prettier-ignore\n return CreateType(IsUnion(L) ? ExcludeRest(L.anyOf, R) :\n ExtendsCheck(L, R) !== ExtendsResult.False ? Never() : L, options);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Exclude } from './exclude.mjs';\n// prettier-ignore\nfunction FromProperties(P, U) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Exclude(P[K2], U);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, T) {\n return FromProperties(R.properties, T);\n}\n// prettier-ignore\nexport function ExcludeFromMappedResult(R, T) {\n const P = FromMappedResult(R, T);\n return MappedResult(P);\n}\n","import { Extract } from './extract.mjs';\nimport { TemplateLiteralToUnion } from '../template-literal/index.mjs';\nexport function ExtractFromTemplateLiteral(L, R) {\n return Extract(TemplateLiteralToUnion(L), R);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { ExtendsCheck, ExtendsResult } from '../extends/index.mjs';\nimport { ExtractFromMappedResult } from './extract-from-mapped-result.mjs';\nimport { ExtractFromTemplateLiteral } from './extract-from-template-literal.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedResult, IsTemplateLiteral, IsUnion } from '../guard/kind.mjs';\nfunction ExtractRest(L, R) {\n const extracted = L.filter((inner) => ExtendsCheck(inner, R) !== ExtendsResult.False);\n return extracted.length === 1 ? extracted[0] : Union(extracted);\n}\n/** `[Json]` Constructs a type by extracting from type all union members that are assignable to union */\nexport function Extract(L, R, options) {\n // overloads\n if (IsTemplateLiteral(L))\n return CreateType(ExtractFromTemplateLiteral(L, R), options);\n if (IsMappedResult(L))\n return CreateType(ExtractFromMappedResult(L, R), options);\n // prettier-ignore\n return CreateType(IsUnion(L) ? ExtractRest(L.anyOf, R) :\n ExtendsCheck(L, R) !== ExtendsResult.False ? L : Never(), options);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Extract } from './extract.mjs';\n// prettier-ignore\nfunction FromProperties(P, T) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Extract(P[K2], T);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, T) {\n return FromProperties(R.properties, T);\n}\n// prettier-ignore\nexport function ExtractFromMappedResult(R, T) {\n const P = FromMappedResult(R, T);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Never } from '../never/index.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n/** `[JavaScript]` Extracts the InstanceType from the given Constructor type */\nexport function InstanceType(schema, options) {\n return (KindGuard.IsConstructor(schema) ? CreateType(schema.returns, options) : Never(options));\n}\n","import { Readonly } from '../readonly/index.mjs';\nimport { Optional } from '../optional/index.mjs';\n/** `[Json]` Creates a Readonly and Optional property */\nexport function ReadonlyOptional(schema) {\n return Readonly(Optional(schema));\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { Object as _Object_ } from '../object/index.mjs';\nimport { String } from '../string/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { IsTemplateLiteralFinite } from '../template-literal/index.mjs';\nimport { PatternStringExact, PatternNumberExact, PatternNeverExact } from '../patterns/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\n// ------------------------------------------------------------------\n// ValueGuard\n// ------------------------------------------------------------------\nimport { IsUndefined } from '../guard/value.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsInteger, IsLiteral, IsAny, IsBoolean, IsNever, IsNumber, IsString, IsRegExp, IsTemplateLiteral, IsUnion } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// RecordCreateFromPattern\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RecordCreateFromPattern(pattern, T, options) {\n return CreateType({ [Kind]: 'Record', type: 'object', patternProperties: { [pattern]: T } }, options);\n}\n// ------------------------------------------------------------------\n// RecordCreateFromKeys\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RecordCreateFromKeys(K, T, options) {\n const result = {};\n for (const K2 of K)\n result[K2] = T;\n return _Object_(result, { ...options, [Hint]: 'Record' });\n}\n// prettier-ignore\nfunction FromTemplateLiteralKey(K, T, options) {\n return (IsTemplateLiteralFinite(K)\n ? RecordCreateFromKeys(IndexPropertyKeys(K), T, options)\n : RecordCreateFromPattern(K.pattern, T, options));\n}\n// prettier-ignore\nfunction FromUnionKey(key, type, options) {\n return RecordCreateFromKeys(IndexPropertyKeys(Union(key)), type, options);\n}\n// prettier-ignore\nfunction FromLiteralKey(key, type, options) {\n return RecordCreateFromKeys([key.toString()], type, options);\n}\n// prettier-ignore\nfunction FromRegExpKey(key, type, options) {\n return RecordCreateFromPattern(key.source, type, options);\n}\n// prettier-ignore\nfunction FromStringKey(key, type, options) {\n const pattern = IsUndefined(key.pattern) ? PatternStringExact : key.pattern;\n return RecordCreateFromPattern(pattern, type, options);\n}\n// prettier-ignore\nfunction FromAnyKey(_, type, options) {\n return RecordCreateFromPattern(PatternStringExact, type, options);\n}\n// prettier-ignore\nfunction FromNeverKey(_key, type, options) {\n return RecordCreateFromPattern(PatternNeverExact, type, options);\n}\n// prettier-ignore\nfunction FromBooleanKey(_key, type, options) {\n return _Object_({ true: type, false: type }, options);\n}\n// prettier-ignore\nfunction FromIntegerKey(_key, type, options) {\n return RecordCreateFromPattern(PatternNumberExact, type, options);\n}\n// prettier-ignore\nfunction FromNumberKey(_, type, options) {\n return RecordCreateFromPattern(PatternNumberExact, type, options);\n}\n// ------------------------------------------------------------------\n// TRecordOrObject\n// ------------------------------------------------------------------\n/** `[Json]` Creates a Record type */\nexport function Record(key, type, options = {}) {\n // prettier-ignore\n return (IsUnion(key) ? FromUnionKey(key.anyOf, type, options) :\n IsTemplateLiteral(key) ? FromTemplateLiteralKey(key, type, options) :\n IsLiteral(key) ? FromLiteralKey(key.const, type, options) :\n IsBoolean(key) ? FromBooleanKey(key, type, options) :\n IsInteger(key) ? FromIntegerKey(key, type, options) :\n IsNumber(key) ? FromNumberKey(key, type, options) :\n IsRegExp(key) ? FromRegExpKey(key, type, options) :\n IsString(key) ? FromStringKey(key, type, options) :\n IsAny(key) ? FromAnyKey(key, type, options) :\n IsNever(key) ? FromNeverKey(key, type, options) :\n Never(options));\n}\n// ------------------------------------------------------------------\n// Record Utilities\n// ------------------------------------------------------------------\n/** Gets the Records Pattern */\nexport function RecordPattern(record) {\n return globalThis.Object.getOwnPropertyNames(record.patternProperties)[0];\n}\n/** Gets the Records Key Type */\n// prettier-ignore\nexport function RecordKey(type) {\n const pattern = RecordPattern(type);\n return (pattern === PatternStringExact ? String() :\n pattern === PatternNumberExact ? Number() :\n String({ pattern }));\n}\n/** Gets a Record Value Type */\n// prettier-ignore\nexport function RecordValue(type) {\n return type.patternProperties[RecordPattern(type)];\n}\n","import { CloneType } from '../clone/type.mjs';\nimport { Unknown } from '../unknown/index.mjs';\nimport { ReadonlyOptional } from '../readonly-optional/index.mjs';\nimport { Readonly } from '../readonly/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { Object as _Object_ } from '../object/index.mjs';\nimport { Record, RecordKey, RecordValue } from '../record/index.mjs';\nimport * as ValueGuard from '../guard/value.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromConstructor(args, type) {\n type.parameters = FromTypes(args, type.parameters);\n type.returns = FromType(args, type.returns);\n return type;\n}\n// prettier-ignore\nfunction FromFunction(args, type) {\n type.parameters = FromTypes(args, type.parameters);\n type.returns = FromType(args, type.returns);\n return type;\n}\n// prettier-ignore\nfunction FromIntersect(args, type) {\n type.allOf = FromTypes(args, type.allOf);\n return type;\n}\n// prettier-ignore\nfunction FromUnion(args, type) {\n type.anyOf = FromTypes(args, type.anyOf);\n return type;\n}\n// prettier-ignore\nfunction FromTuple(args, type) {\n if (ValueGuard.IsUndefined(type.items))\n return type;\n type.items = FromTypes(args, type.items);\n return type;\n}\n// prettier-ignore\nfunction FromArray(args, type) {\n type.items = FromType(args, type.items);\n return type;\n}\n// prettier-ignore\nfunction FromAsyncIterator(args, type) {\n type.items = FromType(args, type.items);\n return type;\n}\n// prettier-ignore\nfunction FromIterator(args, type) {\n type.items = FromType(args, type.items);\n return type;\n}\n// prettier-ignore\nfunction FromPromise(args, type) {\n type.item = FromType(args, type.item);\n return type;\n}\n// prettier-ignore\nfunction FromObject(args, type) {\n const mappedProperties = FromProperties(args, type.properties);\n return { ...type, ..._Object_(mappedProperties) }; // retain options\n}\n// prettier-ignore\nfunction FromRecord(args, type) {\n const mappedKey = FromType(args, RecordKey(type));\n const mappedValue = FromType(args, RecordValue(type));\n const result = Record(mappedKey, mappedValue);\n return { ...type, ...result }; // retain options\n}\n// prettier-ignore\nfunction FromArgument(args, argument) {\n return argument.index in args ? args[argument.index] : Unknown();\n}\n// prettier-ignore\nfunction FromProperty(args, type) {\n const isReadonly = KindGuard.IsReadonly(type);\n const isOptional = KindGuard.IsOptional(type);\n const mapped = FromType(args, type);\n return (isReadonly && isOptional ? ReadonlyOptional(mapped) :\n isReadonly && !isOptional ? Readonly(mapped) :\n !isReadonly && isOptional ? Optional(mapped) :\n mapped);\n}\n// prettier-ignore\nfunction FromProperties(args, properties) {\n return globalThis.Object.getOwnPropertyNames(properties).reduce((result, key) => {\n return { ...result, [key]: FromProperty(args, properties[key]) };\n }, {});\n}\n// prettier-ignore\nexport function FromTypes(args, types) {\n return types.map(type => FromType(args, type));\n}\n// prettier-ignore\nfunction FromType(args, type) {\n return (KindGuard.IsConstructor(type) ? FromConstructor(args, type) :\n KindGuard.IsFunction(type) ? FromFunction(args, type) :\n KindGuard.IsIntersect(type) ? FromIntersect(args, type) :\n KindGuard.IsUnion(type) ? FromUnion(args, type) :\n KindGuard.IsTuple(type) ? FromTuple(args, type) :\n KindGuard.IsArray(type) ? FromArray(args, type) :\n KindGuard.IsAsyncIterator(type) ? FromAsyncIterator(args, type) :\n KindGuard.IsIterator(type) ? FromIterator(args, type) :\n KindGuard.IsPromise(type) ? FromPromise(args, type) :\n KindGuard.IsObject(type) ? FromObject(args, type) :\n KindGuard.IsRecord(type) ? FromRecord(args, type) :\n KindGuard.IsArgument(type) ? FromArgument(args, type) :\n type);\n}\n/** `[JavaScript]` Instantiates a type with the given parameters */\n// prettier-ignore\nexport function Instantiate(type, args) {\n return FromType(args, CloneType(type));\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Integer type */\nexport function Integer(options) {\n return CreateType({ [Kind]: 'Integer', type: 'integer' }, options);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Intrinsic } from './intrinsic.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction MappedIntrinsicPropertyKey(K, M, options) {\n return {\n [K]: Intrinsic(Literal(K), M, Clone(options))\n };\n}\n// prettier-ignore\nfunction MappedIntrinsicPropertyKeys(K, M, options) {\n const result = K.reduce((Acc, L) => {\n return { ...Acc, ...MappedIntrinsicPropertyKey(L, M, options) };\n }, {});\n return result;\n}\n// prettier-ignore\nfunction MappedIntrinsicProperties(T, M, options) {\n return MappedIntrinsicPropertyKeys(T['keys'], M, options);\n}\n// prettier-ignore\nexport function IntrinsicFromMappedKey(T, M, options) {\n const P = MappedIntrinsicProperties(T, M, options);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { TemplateLiteral, TemplateLiteralParseExact, IsTemplateLiteralExpressionFinite, TemplateLiteralExpressionGenerate } from '../template-literal/index.mjs';\nimport { IntrinsicFromMappedKey } from './intrinsic-from-mapped-key.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Union } from '../union/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsTemplateLiteral, IsUnion, IsLiteral } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// Apply\n// ------------------------------------------------------------------\nfunction ApplyUncapitalize(value) {\n const [first, rest] = [value.slice(0, 1), value.slice(1)];\n return [first.toLowerCase(), rest].join('');\n}\nfunction ApplyCapitalize(value) {\n const [first, rest] = [value.slice(0, 1), value.slice(1)];\n return [first.toUpperCase(), rest].join('');\n}\nfunction ApplyUppercase(value) {\n return value.toUpperCase();\n}\nfunction ApplyLowercase(value) {\n return value.toLowerCase();\n}\nfunction FromTemplateLiteral(schema, mode, options) {\n // note: template literals require special runtime handling as they are encoded in string patterns.\n // This diverges from the mapped type which would otherwise map on the template literal kind.\n const expression = TemplateLiteralParseExact(schema.pattern);\n const finite = IsTemplateLiteralExpressionFinite(expression);\n if (!finite)\n return { ...schema, pattern: FromLiteralValue(schema.pattern, mode) };\n const strings = [...TemplateLiteralExpressionGenerate(expression)];\n const literals = strings.map((value) => Literal(value));\n const mapped = FromRest(literals, mode);\n const union = Union(mapped);\n return TemplateLiteral([union], options);\n}\n// prettier-ignore\nfunction FromLiteralValue(value, mode) {\n return (typeof value === 'string' ? (mode === 'Uncapitalize' ? ApplyUncapitalize(value) :\n mode === 'Capitalize' ? ApplyCapitalize(value) :\n mode === 'Uppercase' ? ApplyUppercase(value) :\n mode === 'Lowercase' ? ApplyLowercase(value) :\n value) : value.toString());\n}\n// prettier-ignore\nfunction FromRest(T, M) {\n return T.map(L => Intrinsic(L, M));\n}\n/** Applies an intrinsic string manipulation to the given type. */\nexport function Intrinsic(schema, mode, options = {}) {\n // prettier-ignore\n return (\n // Intrinsic-Mapped-Inference\n IsMappedKey(schema) ? IntrinsicFromMappedKey(schema, mode, options) :\n // Standard-Inference\n IsTemplateLiteral(schema) ? FromTemplateLiteral(schema, mode, options) :\n IsUnion(schema) ? Union(FromRest(schema.anyOf, mode), options) :\n IsLiteral(schema) ? Literal(FromLiteralValue(schema.const, mode), options) :\n // Default Type\n CreateType(schema, options));\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Capitalize LiteralString types */\nexport function Capitalize(T, options = {}) {\n return Intrinsic(T, 'Capitalize', options);\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Lowercase LiteralString types */\nexport function Lowercase(T, options = {}) {\n return Intrinsic(T, 'Lowercase', options);\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Uncapitalize LiteralString types */\nexport function Uncapitalize(T, options = {}) {\n return Intrinsic(T, 'Uncapitalize', options);\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Uppercase LiteralString types */\nexport function Uppercase(T, options = {}) {\n return Intrinsic(T, 'Uppercase', options);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Omit } from './omit.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(properties, propertyKeys, options) {\n const result = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(properties))\n result[K2] = Omit(properties[K2], propertyKeys, Clone(options));\n return result;\n}\n// prettier-ignore\nfunction FromMappedResult(mappedResult, propertyKeys, options) {\n return FromProperties(mappedResult.properties, propertyKeys, options);\n}\n// prettier-ignore\nexport function OmitFromMappedResult(mappedResult, propertyKeys, options) {\n const properties = FromMappedResult(mappedResult, propertyKeys, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Discard } from '../discard/discard.mjs';\nimport { TransformKind } from '../symbols/symbols.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Object as _Object_ } from '../object/index.mjs';\n// ------------------------------------------------------------------\n// Mapped\n// ------------------------------------------------------------------\nimport { OmitFromMappedKey } from './omit-from-mapped-key.mjs';\nimport { OmitFromMappedResult } from './omit-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsIntersect, IsUnion, IsObject, IsSchema, IsMappedResult, IsLiteralValue, IsRef } from '../guard/kind.mjs';\nimport { IsArray as IsArrayValue } from '../guard/value.mjs';\n// prettier-ignore\nfunction FromIntersect(types, propertyKeys) {\n return types.map((type) => OmitResolve(type, propertyKeys));\n}\n// prettier-ignore\nfunction FromUnion(types, propertyKeys) {\n return types.map((type) => OmitResolve(type, propertyKeys));\n}\n// ------------------------------------------------------------------\n// FromProperty\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromProperty(properties, key) {\n const { [key]: _, ...R } = properties;\n return R;\n}\n// prettier-ignore\nfunction FromProperties(properties, propertyKeys) {\n return propertyKeys.reduce((T, K2) => FromProperty(T, K2), properties);\n}\n// prettier-ignore\nfunction FromObject(type, propertyKeys, properties) {\n const options = Discard(type, [TransformKind, '$id', 'required', 'properties']);\n const mappedProperties = FromProperties(properties, propertyKeys);\n return _Object_(mappedProperties, options);\n}\n// prettier-ignore\nfunction UnionFromPropertyKeys(propertyKeys) {\n const result = propertyKeys.reduce((result, key) => IsLiteralValue(key) ? [...result, Literal(key)] : result, []);\n return Union(result);\n}\n// prettier-ignore\nfunction OmitResolve(type, propertyKeys) {\n return (IsIntersect(type) ? Intersect(FromIntersect(type.allOf, propertyKeys)) :\n IsUnion(type) ? Union(FromUnion(type.anyOf, propertyKeys)) :\n IsObject(type) ? FromObject(type, propertyKeys, type.properties) :\n _Object_({}));\n}\n/** `[Json]` Constructs a type whose keys are picked from the given type */\n// prettier-ignore\nexport function Omit(type, key, options) {\n const typeKey = IsArrayValue(key) ? UnionFromPropertyKeys(key) : key;\n const propertyKeys = IsSchema(key) ? IndexPropertyKeys(key) : key;\n const isTypeRef = IsRef(type);\n const isKeyRef = IsRef(key);\n return (IsMappedResult(type) ? OmitFromMappedResult(type, propertyKeys, options) :\n IsMappedKey(key) ? OmitFromMappedKey(type, key, options) :\n (isTypeRef && isKeyRef) ? Computed('Omit', [type, typeKey], options) :\n (!isTypeRef && isKeyRef) ? Computed('Omit', [type, typeKey], options) :\n (isTypeRef && !isKeyRef) ? Computed('Omit', [type, typeKey], options) :\n CreateType({ ...OmitResolve(type, propertyKeys), ...options }));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Omit } from './omit.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromPropertyKey(type, key, options) {\n return { [key]: Omit(type, [key], Clone(options)) };\n}\n// prettier-ignore\nfunction FromPropertyKeys(type, propertyKeys, options) {\n return propertyKeys.reduce((Acc, LK) => {\n return { ...Acc, ...FromPropertyKey(type, LK, options) };\n }, {});\n}\n// prettier-ignore\nfunction FromMappedKey(type, mappedKey, options) {\n return FromPropertyKeys(type, mappedKey.keys, options);\n}\n// prettier-ignore\nexport function OmitFromMappedKey(type, mappedKey, options) {\n const properties = FromMappedKey(type, mappedKey, options);\n return MappedResult(properties);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Pick } from './pick.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(properties, propertyKeys, options) {\n const result = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(properties))\n result[K2] = Pick(properties[K2], propertyKeys, Clone(options));\n return result;\n}\n// prettier-ignore\nfunction FromMappedResult(mappedResult, propertyKeys, options) {\n return FromProperties(mappedResult.properties, propertyKeys, options);\n}\n// prettier-ignore\nexport function PickFromMappedResult(mappedResult, propertyKeys, options) {\n const properties = FromMappedResult(mappedResult, propertyKeys, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Discard } from '../discard/discard.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Object as _Object_ } from '../object/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\nimport { TransformKind } from '../symbols/symbols.mjs';\n// ------------------------------------------------------------------\n// Guards\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsMappedResult, IsIntersect, IsUnion, IsObject, IsSchema, IsLiteralValue, IsRef } from '../guard/kind.mjs';\nimport { IsArray as IsArrayValue } from '../guard/value.mjs';\n// ------------------------------------------------------------------\n// Infrastructure\n// ------------------------------------------------------------------\nimport { PickFromMappedKey } from './pick-from-mapped-key.mjs';\nimport { PickFromMappedResult } from './pick-from-mapped-result.mjs';\nfunction FromIntersect(types, propertyKeys) {\n return types.map((type) => PickResolve(type, propertyKeys));\n}\n// prettier-ignore\nfunction FromUnion(types, propertyKeys) {\n return types.map((type) => PickResolve(type, propertyKeys));\n}\n// prettier-ignore\nfunction FromProperties(properties, propertyKeys) {\n const result = {};\n for (const K2 of propertyKeys)\n if (K2 in properties)\n result[K2] = properties[K2];\n return result;\n}\n// prettier-ignore\nfunction FromObject(Type, keys, properties) {\n const options = Discard(Type, [TransformKind, '$id', 'required', 'properties']);\n const mappedProperties = FromProperties(properties, keys);\n return _Object_(mappedProperties, options);\n}\n// prettier-ignore\nfunction UnionFromPropertyKeys(propertyKeys) {\n const result = propertyKeys.reduce((result, key) => IsLiteralValue(key) ? [...result, Literal(key)] : result, []);\n return Union(result);\n}\n// prettier-ignore\nfunction PickResolve(type, propertyKeys) {\n return (IsIntersect(type) ? Intersect(FromIntersect(type.allOf, propertyKeys)) :\n IsUnion(type) ? Union(FromUnion(type.anyOf, propertyKeys)) :\n IsObject(type) ? FromObject(type, propertyKeys, type.properties) :\n _Object_({}));\n}\n/** `[Json]` Constructs a type whose keys are picked from the given type */\n// prettier-ignore\nexport function Pick(type, key, options) {\n const typeKey = IsArrayValue(key) ? UnionFromPropertyKeys(key) : key;\n const propertyKeys = IsSchema(key) ? IndexPropertyKeys(key) : key;\n const isTypeRef = IsRef(type);\n const isKeyRef = IsRef(key);\n return (IsMappedResult(type) ? PickFromMappedResult(type, propertyKeys, options) :\n IsMappedKey(key) ? PickFromMappedKey(type, key, options) :\n (isTypeRef && isKeyRef) ? Computed('Pick', [type, typeKey], options) :\n (!isTypeRef && isKeyRef) ? Computed('Pick', [type, typeKey], options) :\n (isTypeRef && !isKeyRef) ? Computed('Pick', [type, typeKey], options) :\n CreateType({ ...PickResolve(type, propertyKeys), ...options }));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Pick } from './pick.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromPropertyKey(type, key, options) {\n return {\n [key]: Pick(type, [key], Clone(options))\n };\n}\n// prettier-ignore\nfunction FromPropertyKeys(type, propertyKeys, options) {\n return propertyKeys.reduce((result, leftKey) => {\n return { ...result, ...FromPropertyKey(type, leftKey, options) };\n }, {});\n}\n// prettier-ignore\nfunction FromMappedKey(type, mappedKey, options) {\n return FromPropertyKeys(type, mappedKey.keys, options);\n}\n// prettier-ignore\nexport function PickFromMappedKey(type, mappedKey, options) {\n const properties = FromMappedKey(type, mappedKey, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { Object as _Object_ } from '../object/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Ref } from '../ref/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { TransformKind } from '../symbols/index.mjs';\nimport { PartialFromMappedResult } from './partial-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// KindGuard\n// ------------------------------------------------------------------\nimport * as KindGuard from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromComputed(target, parameters) {\n return Computed('Partial', [Computed(target, parameters)]);\n}\n// prettier-ignore\nfunction FromRef($ref) {\n return Computed('Partial', [Ref($ref)]);\n}\n// prettier-ignore\nfunction FromProperties(properties) {\n const partialProperties = {};\n for (const K of globalThis.Object.getOwnPropertyNames(properties))\n partialProperties[K] = Optional(properties[K]);\n return partialProperties;\n}\n// prettier-ignore\nfunction FromObject(type, properties) {\n const options = Discard(type, [TransformKind, '$id', 'required', 'properties']);\n const mappedProperties = FromProperties(properties);\n return _Object_(mappedProperties, options);\n}\n// prettier-ignore\nfunction FromRest(types) {\n return types.map(type => PartialResolve(type));\n}\n// ------------------------------------------------------------------\n// PartialResolve\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction PartialResolve(type) {\n return (\n // Mappable\n KindGuard.IsComputed(type) ? FromComputed(type.target, type.parameters) :\n KindGuard.IsRef(type) ? FromRef(type.$ref) :\n KindGuard.IsIntersect(type) ? Intersect(FromRest(type.allOf)) :\n KindGuard.IsUnion(type) ? Union(FromRest(type.anyOf)) :\n KindGuard.IsObject(type) ? FromObject(type, type.properties) :\n // Intrinsic\n KindGuard.IsBigInt(type) ? type :\n KindGuard.IsBoolean(type) ? type :\n KindGuard.IsInteger(type) ? type :\n KindGuard.IsLiteral(type) ? type :\n KindGuard.IsNull(type) ? type :\n KindGuard.IsNumber(type) ? type :\n KindGuard.IsString(type) ? type :\n KindGuard.IsSymbol(type) ? type :\n KindGuard.IsUndefined(type) ? type :\n // Passthrough\n _Object_({}));\n}\n/** `[Json]` Constructs a type where all properties are optional */\nexport function Partial(type, options) {\n if (KindGuard.IsMappedResult(type)) {\n return PartialFromMappedResult(type, options);\n }\n else {\n // special: mapping types require overridable options\n return CreateType({ ...PartialResolve(type), ...options });\n }\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Partial } from './partial.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(K, options) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(K))\n Acc[K2] = Partial(K[K2], Clone(options));\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, options) {\n return FromProperties(R.properties, options);\n}\n// prettier-ignore\nexport function PartialFromMappedResult(R, options) {\n const P = FromMappedResult(R, options);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Object as _Object_ } from '../object/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Ref } from '../ref/index.mjs';\nimport { OptionalKind, TransformKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { RequiredFromMappedResult } from './required-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport * as KindGuard from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromComputed(target, parameters) {\n return Computed('Required', [Computed(target, parameters)]);\n}\n// prettier-ignore\nfunction FromRef($ref) {\n return Computed('Required', [Ref($ref)]);\n}\n// prettier-ignore\nfunction FromProperties(properties) {\n const requiredProperties = {};\n for (const K of globalThis.Object.getOwnPropertyNames(properties))\n requiredProperties[K] = Discard(properties[K], [OptionalKind]);\n return requiredProperties;\n}\n// prettier-ignore\nfunction FromObject(type, properties) {\n const options = Discard(type, [TransformKind, '$id', 'required', 'properties']);\n const mappedProperties = FromProperties(properties);\n return _Object_(mappedProperties, options);\n}\n// prettier-ignore\nfunction FromRest(types) {\n return types.map(type => RequiredResolve(type));\n}\n// ------------------------------------------------------------------\n// RequiredResolve\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RequiredResolve(type) {\n return (\n // Mappable\n KindGuard.IsComputed(type) ? FromComputed(type.target, type.parameters) :\n KindGuard.IsRef(type) ? FromRef(type.$ref) :\n KindGuard.IsIntersect(type) ? Intersect(FromRest(type.allOf)) :\n KindGuard.IsUnion(type) ? Union(FromRest(type.anyOf)) :\n KindGuard.IsObject(type) ? FromObject(type, type.properties) :\n // Intrinsic\n KindGuard.IsBigInt(type) ? type :\n KindGuard.IsBoolean(type) ? type :\n KindGuard.IsInteger(type) ? type :\n KindGuard.IsLiteral(type) ? type :\n KindGuard.IsNull(type) ? type :\n KindGuard.IsNumber(type) ? type :\n KindGuard.IsString(type) ? type :\n KindGuard.IsSymbol(type) ? type :\n KindGuard.IsUndefined(type) ? type :\n // Passthrough\n _Object_({}));\n}\n/** `[Json]` Constructs a type where all properties are required */\nexport function Required(type, options) {\n if (KindGuard.IsMappedResult(type)) {\n return RequiredFromMappedResult(type, options);\n }\n else {\n // special: mapping types require overridable options\n return CreateType({ ...RequiredResolve(type), ...options });\n }\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Required } from './required.mjs';\n// prettier-ignore\nfunction FromProperties(P, options) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Required(P[K2], options);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, options) {\n return FromProperties(R.properties, options);\n}\n// prettier-ignore\nexport function RequiredFromMappedResult(R, options) {\n const P = FromMappedResult(R, options);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/index.mjs';\nimport { CloneType } from '../clone/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { Array } from '../array/index.mjs';\nimport { Awaited } from '../awaited/index.mjs';\nimport { AsyncIterator } from '../async-iterator/index.mjs';\nimport { Constructor } from '../constructor/index.mjs';\nimport { Index } from '../indexed/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Iterator } from '../iterator/index.mjs';\nimport { KeyOf } from '../keyof/index.mjs';\nimport { Object as _Object_ } from '../object/index.mjs';\nimport { Omit } from '../omit/index.mjs';\nimport { Pick } from '../pick/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Partial } from '../partial/index.mjs';\nimport { RecordValue, RecordPattern } from '../record/index.mjs';\nimport { Required } from '../required/index.mjs';\nimport { Tuple } from '../tuple/index.mjs';\nimport { Union } from '../union/index.mjs';\n// ------------------------------------------------------------------\n// Symbols\n// ------------------------------------------------------------------\nimport { TransformKind, OptionalKind, ReadonlyKind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// KindGuard\n// ------------------------------------------------------------------\nimport * as KindGuard from '../guard/kind.mjs';\n// prettier-ignore\nfunction DereferenceParameters(moduleProperties, types) {\n return types.map((type) => {\n return KindGuard.IsRef(type)\n ? Dereference(moduleProperties, type.$ref)\n : FromType(moduleProperties, type);\n });\n}\n// prettier-ignore\nfunction Dereference(moduleProperties, ref) {\n return (ref in moduleProperties\n ? KindGuard.IsRef(moduleProperties[ref])\n ? Dereference(moduleProperties, moduleProperties[ref].$ref)\n : FromType(moduleProperties, moduleProperties[ref])\n : Never());\n}\n// prettier-ignore\nfunction FromAwaited(parameters) {\n return Awaited(parameters[0]);\n}\n// prettier-ignore\nfunction FromIndex(parameters) {\n return Index(parameters[0], parameters[1]);\n}\n// prettier-ignore\nfunction FromKeyOf(parameters) {\n return KeyOf(parameters[0]);\n}\n// prettier-ignore\nfunction FromPartial(parameters) {\n return Partial(parameters[0]);\n}\n// prettier-ignore\nfunction FromOmit(parameters) {\n return Omit(parameters[0], parameters[1]);\n}\n// prettier-ignore\nfunction FromPick(parameters) {\n return Pick(parameters[0], parameters[1]);\n}\n// prettier-ignore\nfunction FromRequired(parameters) {\n return Required(parameters[0]);\n}\n// prettier-ignore\nfunction FromComputed(moduleProperties, target, parameters) {\n const dereferenced = DereferenceParameters(moduleProperties, parameters);\n return (target === 'Awaited' ? FromAwaited(dereferenced) :\n target === 'Index' ? FromIndex(dereferenced) :\n target === 'KeyOf' ? FromKeyOf(dereferenced) :\n target === 'Partial' ? FromPartial(dereferenced) :\n target === 'Omit' ? FromOmit(dereferenced) :\n target === 'Pick' ? FromPick(dereferenced) :\n target === 'Required' ? FromRequired(dereferenced) :\n Never());\n}\nfunction FromArray(moduleProperties, type) {\n return Array(FromType(moduleProperties, type));\n}\nfunction FromAsyncIterator(moduleProperties, type) {\n return AsyncIterator(FromType(moduleProperties, type));\n}\n// prettier-ignore\nfunction FromConstructor(moduleProperties, parameters, instanceType) {\n return Constructor(FromTypes(moduleProperties, parameters), FromType(moduleProperties, instanceType));\n}\n// prettier-ignore\nfunction FromFunction(moduleProperties, parameters, returnType) {\n return FunctionType(FromTypes(moduleProperties, parameters), FromType(moduleProperties, returnType));\n}\nfunction FromIntersect(moduleProperties, types) {\n return Intersect(FromTypes(moduleProperties, types));\n}\nfunction FromIterator(moduleProperties, type) {\n return Iterator(FromType(moduleProperties, type));\n}\nfunction FromObject(moduleProperties, properties) {\n return _Object_(globalThis.Object.keys(properties).reduce((result, key) => {\n return { ...result, [key]: FromType(moduleProperties, properties[key]) };\n }, {}));\n}\n// prettier-ignore\nfunction FromRecord(moduleProperties, type) {\n const [value, pattern] = [FromType(moduleProperties, RecordValue(type)), RecordPattern(type)];\n const result = CloneType(type);\n result.patternProperties[pattern] = value;\n return result;\n}\n// prettier-ignore\nfunction FromTransform(moduleProperties, transform) {\n return (KindGuard.IsRef(transform))\n ? { ...Dereference(moduleProperties, transform.$ref), [TransformKind]: transform[TransformKind] }\n : transform;\n}\nfunction FromTuple(moduleProperties, types) {\n return Tuple(FromTypes(moduleProperties, types));\n}\nfunction FromUnion(moduleProperties, types) {\n return Union(FromTypes(moduleProperties, types));\n}\nfunction FromTypes(moduleProperties, types) {\n return types.map((type) => FromType(moduleProperties, type));\n}\n// prettier-ignore\nexport function FromType(moduleProperties, type) {\n return (\n // Modifiers\n KindGuard.IsOptional(type) ? CreateType(FromType(moduleProperties, Discard(type, [OptionalKind])), type) :\n KindGuard.IsReadonly(type) ? CreateType(FromType(moduleProperties, Discard(type, [ReadonlyKind])), type) :\n // Transform\n KindGuard.IsTransform(type) ? CreateType(FromTransform(moduleProperties, type), type) :\n // Types\n KindGuard.IsArray(type) ? CreateType(FromArray(moduleProperties, type.items), type) :\n KindGuard.IsAsyncIterator(type) ? CreateType(FromAsyncIterator(moduleProperties, type.items), type) :\n KindGuard.IsComputed(type) ? CreateType(FromComputed(moduleProperties, type.target, type.parameters)) :\n KindGuard.IsConstructor(type) ? CreateType(FromConstructor(moduleProperties, type.parameters, type.returns), type) :\n KindGuard.IsFunction(type) ? CreateType(FromFunction(moduleProperties, type.parameters, type.returns), type) :\n KindGuard.IsIntersect(type) ? CreateType(FromIntersect(moduleProperties, type.allOf), type) :\n KindGuard.IsIterator(type) ? CreateType(FromIterator(moduleProperties, type.items), type) :\n KindGuard.IsObject(type) ? CreateType(FromObject(moduleProperties, type.properties), type) :\n KindGuard.IsRecord(type) ? CreateType(FromRecord(moduleProperties, type)) :\n KindGuard.IsTuple(type) ? CreateType(FromTuple(moduleProperties, type.items || []), type) :\n KindGuard.IsUnion(type) ? CreateType(FromUnion(moduleProperties, type.anyOf), type) :\n type);\n}\n// prettier-ignore\nexport function ComputeType(moduleProperties, key) {\n return (key in moduleProperties\n ? FromType(moduleProperties, moduleProperties[key])\n : Never());\n}\n// prettier-ignore\nexport function ComputeModuleProperties(moduleProperties) {\n return globalThis.Object.getOwnPropertyNames(moduleProperties).reduce((result, key) => {\n return { ...result, [key]: ComputeType(moduleProperties, key) };\n }, {});\n}\n","import { CreateType } from '../create/index.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// Module Infrastructure Types\n// ------------------------------------------------------------------\nimport { ComputeModuleProperties } from './compute.mjs';\n// ------------------------------------------------------------------\n// Module\n// ------------------------------------------------------------------\n// prettier-ignore\nexport class TModule {\n constructor($defs) {\n const computed = ComputeModuleProperties($defs);\n const identified = this.WithIdentifiers(computed);\n this.$defs = identified;\n }\n /** `[Json]` Imports a Type by Key. */\n Import(key, options) {\n const $defs = { ...this.$defs, [key]: CreateType(this.$defs[key], options) };\n return CreateType({ [Kind]: 'Import', $defs, $ref: key });\n }\n // prettier-ignore\n WithIdentifiers($defs) {\n return globalThis.Object.getOwnPropertyNames($defs).reduce((result, key) => {\n return { ...result, [key]: { ...$defs[key], $id: key } };\n }, {});\n }\n}\n/** `[Json]` Creates a Type Definition Module. */\nexport function Module(properties) {\n return new TModule(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Not type */\nexport function Not(type, options) {\n return CreateType({ [Kind]: 'Not', not: type }, options);\n}\n","import { Tuple } from '../tuple/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n/** `[JavaScript]` Extracts the Parameters from the given Function type */\nexport function Parameters(schema, options) {\n return (KindGuard.IsFunction(schema) ? Tuple(schema.parameters, options) : Never());\n}\n","import { CloneType } from '../clone/type.mjs';\nimport { CreateType } from '../create/type.mjs';\nimport { IsUndefined } from '../guard/value.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\n// Auto Tracked For Recursive Types without ID's\nlet Ordinal = 0;\n/** `[Json]` Creates a Recursive type */\nexport function Recursive(callback, options = {}) {\n if (IsUndefined(options.$id))\n options.$id = `T${Ordinal++}`;\n const thisType = CloneType(callback({ [Kind]: 'This', $ref: `${options.$id}` }));\n thisType.$id = options.$id;\n // prettier-ignore\n return CreateType({ [Hint]: 'Recursive', ...thisType }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { IsString } from '../guard/value.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a RegExp type */\nexport function RegExp(unresolved, options) {\n const expr = IsString(unresolved) ? new globalThis.RegExp(unresolved) : unresolved;\n return CreateType({ [Kind]: 'RegExp', type: 'RegExp', source: expr.source, flags: expr.flags }, options);\n}\n","// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsIntersect, IsUnion, IsTuple } from '../guard/kind.mjs';\n// prettier-ignore\nfunction RestResolve(T) {\n return (IsIntersect(T) ? T.allOf :\n IsUnion(T) ? T.anyOf :\n IsTuple(T) ? T.items ?? [] :\n []);\n}\n/** `[Json]` Extracts interior Rest elements from Tuple, Intersect and Union types */\nexport function Rest(T) {\n return RestResolve(T);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Never } from '../never/index.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n/** `[JavaScript]` Extracts the ReturnType from the given Function type */\nexport function ReturnType(schema, options) {\n return (KindGuard.IsFunction(schema) ? CreateType(schema.returns, options) : Never(options));\n}\n","import { TransformKind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTransform } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// TransformBuilders\n// ------------------------------------------------------------------\nexport class TransformDecodeBuilder {\n constructor(schema) {\n this.schema = schema;\n }\n Decode(decode) {\n return new TransformEncodeBuilder(this.schema, decode);\n }\n}\n// prettier-ignore\nexport class TransformEncodeBuilder {\n constructor(schema, decode) {\n this.schema = schema;\n this.decode = decode;\n }\n EncodeTransform(encode, schema) {\n const Encode = (value) => schema[TransformKind].Encode(encode(value));\n const Decode = (value) => this.decode(schema[TransformKind].Decode(value));\n const Codec = { Encode: Encode, Decode: Decode };\n return { ...schema, [TransformKind]: Codec };\n }\n EncodeSchema(encode, schema) {\n const Codec = { Decode: this.decode, Encode: encode };\n return { ...schema, [TransformKind]: Codec };\n }\n Encode(encode) {\n return (IsTransform(this.schema) ? this.EncodeTransform(encode, this.schema) : this.EncodeSchema(encode, this.schema));\n }\n}\n/** `[Json]` Creates a Transform type */\nexport function Transform(schema) {\n return new TransformDecodeBuilder(schema);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Unsafe type that will infers as the generic argument T */\nexport function Unsafe(options = {}) {\n return CreateType({ [Kind]: options[Kind] ?? 'Unsafe' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Void type */\nexport function Void(options) {\n return CreateType({ [Kind]: 'Void', type: 'void' }, options);\n}\n","// ------------------------------------------------------------------\n// Type: Module\n// ------------------------------------------------------------------\nexport { Any } from '../any/index.mjs';\nexport { Argument } from '../argument/index.mjs';\nexport { Array } from '../array/index.mjs';\nexport { AsyncIterator } from '../async-iterator/index.mjs';\nexport { Awaited } from '../awaited/index.mjs';\nexport { BigInt } from '../bigint/index.mjs';\nexport { Boolean } from '../boolean/index.mjs';\nexport { Composite } from '../composite/index.mjs';\nexport { Const } from '../const/index.mjs';\nexport { Constructor } from '../constructor/index.mjs';\nexport { ConstructorParameters } from '../constructor-parameters/index.mjs';\nexport { Date } from '../date/index.mjs';\nexport { Enum } from '../enum/index.mjs';\nexport { Exclude } from '../exclude/index.mjs';\nexport { Extends } from '../extends/index.mjs';\nexport { Extract } from '../extract/index.mjs';\nexport { Function } from '../function/index.mjs';\nexport { Index } from '../indexed/index.mjs';\nexport { InstanceType } from '../instance-type/index.mjs';\nexport { Instantiate } from '../instantiate/index.mjs';\nexport { Integer } from '../integer/index.mjs';\nexport { Intersect } from '../intersect/index.mjs';\nexport { Capitalize, Uncapitalize, Lowercase, Uppercase } from '../intrinsic/index.mjs';\nexport { Iterator } from '../iterator/index.mjs';\nexport { KeyOf } from '../keyof/index.mjs';\nexport { Literal } from '../literal/index.mjs';\nexport { Mapped } from '../mapped/index.mjs';\nexport { Module } from '../module/index.mjs';\nexport { Never } from '../never/index.mjs';\nexport { Not } from '../not/index.mjs';\nexport { Null } from '../null/index.mjs';\nexport { Number } from '../number/index.mjs';\nexport { Object } from '../object/index.mjs';\nexport { Omit } from '../omit/index.mjs';\nexport { Optional } from '../optional/index.mjs';\nexport { Parameters } from '../parameters/index.mjs';\nexport { Partial } from '../partial/index.mjs';\nexport { Pick } from '../pick/index.mjs';\nexport { Promise } from '../promise/index.mjs';\nexport { Readonly } from '../readonly/index.mjs';\nexport { ReadonlyOptional } from '../readonly-optional/index.mjs';\nexport { Record } from '../record/index.mjs';\nexport { Recursive } from '../recursive/index.mjs';\nexport { Ref } from '../ref/index.mjs';\nexport { RegExp } from '../regexp/index.mjs';\nexport { Required } from '../required/index.mjs';\nexport { Rest } from '../rest/index.mjs';\nexport { ReturnType } from '../return-type/index.mjs';\nexport { String } from '../string/index.mjs';\nexport { Symbol } from '../symbol/index.mjs';\nexport { TemplateLiteral } from '../template-literal/index.mjs';\nexport { Transform } from '../transform/index.mjs';\nexport { Tuple } from '../tuple/index.mjs';\nexport { Uint8Array } from '../uint8array/index.mjs';\nexport { Undefined } from '../undefined/index.mjs';\nexport { Union } from '../union/index.mjs';\nexport { Unknown } from '../unknown/index.mjs';\nexport { Unsafe } from '../unsafe/index.mjs';\nexport { Void } from '../void/index.mjs';\n","// ------------------------------------------------------------------\n// JsonTypeBuilder\n// ------------------------------------------------------------------\nexport { JsonTypeBuilder } from './json.mjs';\n// ------------------------------------------------------------------\n// JavaScriptTypeBuilder\n// ------------------------------------------------------------------\nimport * as TypeBuilder from './type.mjs';\nimport { JavaScriptTypeBuilder } from './javascript.mjs';\n/** JavaScript Type Builder with Static Resolution for TypeScript */\nconst Type = TypeBuilder;\nexport { JavaScriptTypeBuilder };\nexport { Type };\n","import type { RepositoryMode } from \"./index.ts\";\n\nexport const ASSISTANT_PROTOCOL = 1;\nexport const ASSISTANT_VERSION = \"0.3.4\";\nexport const ASSISTANT_PORT = 46322;\n\nexport type AssistantConnectionState =\n \"checking\" | \"disconnected\" | \"unpaired\" | \"unconfigured\" | \"connected\" | \"incompatible\";\n\nexport interface DeviceIdentity {\n id: string;\n name: string;\n platform: string;\n publicKey: string;\n version: string;\n}\n\nexport interface AssistantGrant {\n kind: \"session\" | \"operation\";\n workbenchId: string;\n userId: string;\n origin: string;\n browserId: string;\n deviceId: string;\n bindingId?: string;\n operationId?: string;\n inputHash?: string;\n exp: number;\n nonce: string;\n}\n\nexport interface WorkspaceDefinition {\n id: string;\n slug: string;\n description: string;\n revision: number;\n repositories: Array<{\n repositoryId: string;\n alias: string;\n remoteUrl: string;\n branch: string;\n branchAction?: \"existing\" | \"create\";\n fromRef: string;\n mode: RepositoryMode;\n subpath: string;\n }>;\n}\n\nexport interface LocalOperationIntent {\n id: string;\n deviceId: string;\n workbenchId: string;\n userId: string;\n definition: WorkspaceDefinition;\n token: string;\n}\n\nexport interface WorkspaceMount {\n workspaceId: string;\n workbenchId: string;\n userId: string;\n revision: number;\n managedRoot?: string;\n workspaceFile: string;\n directory: string;\n /** Repository aliases from the shared definition; used when no .code-workspace exists. */\n aliases?: string[];\n verifiedAt: string;\n}\n\nexport interface LocalJob {\n id: string;\n workbenchId: string;\n userId: string;\n state: \"queued\" | \"running\" | \"succeeded\" | \"failed\" | \"cancelled\" | \"interrupted\";\n input: { slug: string; workspaceId: string };\n intent: LocalOperationIntent;\n logs: string[];\n logOffset?: number;\n error?: string;\n result?: { workspaceId: string; deviceId: string };\n pendingSync: boolean;\n updatedAt: string;\n}\n\nexport interface AssistantError {\n code: string;\n error: string;\n recovery: \"connect\" | \"pair\" | \"configure\" | \"retry\" | \"update\" | \"login\";\n}\n","import { Type, type Static } from \"@sinclair/typebox\";\nexport * from \"./assistant.ts\";\n\nexport const IdeSchema = Type.Union([\n Type.Literal(\"vscode\"),\n Type.Literal(\"cursor\"),\n Type.Literal(\"cursor-agent\"),\n Type.Literal(\"idea\"),\n Type.Literal(\"codex\"),\n Type.Literal(\"claude\"),\n Type.Literal(\"opencode\"),\n Type.Literal(\"codex-cli\"),\n Type.Literal(\"cursor-cli\"),\n Type.Literal(\"opencode-cli\"),\n Type.Literal(\"claudecode-cli\"),\n]);\nexport const AgentSchema = Type.Union([\n Type.Literal(\"none\"),\n Type.Literal(\"claude\"),\n Type.Literal(\"codex\"),\n]);\nexport const RepositoryModeSchema = Type.Union([\n Type.Literal(\"worktree\"),\n Type.Literal(\"checkout\"),\n]);\nexport const AuditResultSchema = Type.Union([\n Type.Literal(\"PASS\"),\n Type.Literal(\"WARN\"),\n Type.Literal(\"FAIL\"),\n]);\nexport const EntityIdParamsSchema = Type.Object({\n id: Type.String({ minLength: 1, maxLength: 128 }),\n});\nexport const ErrorSchema = Type.Object({\n error: Type.String(),\n code: Type.Optional(Type.String()),\n details: Type.Optional(Type.Unknown()),\n});\n\nexport type Ide = Static<typeof IdeSchema>;\nexport type Agent = Static<typeof AgentSchema>;\nexport type RepositoryMode = Static<typeof RepositoryModeSchema>;\nexport type AuditResult = Static<typeof AuditResultSchema>;\n\nexport interface RepositoryRecord {\n id: string;\n alias: string;\n path: string;\n subpath: string;\n remoteUrl?: string;\n}\n\nexport interface WorkspaceRepository {\n alias: string;\n branch: string;\n fromBranch: string;\n fromMode: RepositoryMode;\n folderPath: string;\n pathExists: boolean;\n}\n\nexport interface WorkspaceRecord {\n id: string;\n slug: string;\n filePath: string;\n description: string;\n mtimeMs: number;\n requirementId?: string | null;\n repositories: WorkspaceRepository[];\n}\n\nexport interface AuditFinding {\n kind: string;\n severity: \"WARN\" | \"FAIL\";\n message: string;\n evidence: Record<string, unknown>;\n}\n","import { spawn } from \"node:child_process\";\nimport { gitExecution } from \"./context.ts\";\n\nexport class GitCommandError extends Error {\n readonly exitCode: number | null;\n stdout = \"\";\n\n constructor(message: string, exitCode: number | null) {\n super(message);\n this.name = \"GitCommandError\";\n this.exitCode = exitCode;\n }\n}\n\n/**\n * Git for Windows still caps paths at MAX_PATH unless told otherwise, and deep Java package\n * trees exceed it. `-c core.longpaths=true` makes git handle the `\\\\?\\` prefix itself, so it works\n * without the machine-wide LongPathsEnabled policy. Harmless elsewhere, but only added on Windows.\n */\nexport function longPathArgs(platform: NodeJS.Platform = process.platform): string[] {\n return platform === \"win32\" ? [\"-c\", \"core.longpaths=true\"] : [];\n}\n\n/** Execute Git directly: never interpolate arguments into a shell command. */\nexport function runGit(\n cwd: string,\n args: string[],\n options: { timeoutMs?: number; onLog?: (line: string) => void } = {},\n): Promise<string> {\n return new Promise((resolve, reject) => {\n const execution = gitExecution.getStore();\n execution?.signal?.throwIfAborted();\n const child = spawn(execution?.executable || \"git\", [...longPathArgs(), \"-C\", cwd, ...args], {\n signal: execution?.signal,\n shell: false,\n windowsHide: true,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: { ...process.env, GIT_TERMINAL_PROMPT: \"0\" },\n });\n let stdout = \"\",\n stderr = \"\",\n pending = \"\";\n let failure: Error | undefined;\n const stop = (message: string) => {\n if (failure) return;\n failure = new GitCommandError(message, null);\n child.kill(\"SIGKILL\");\n clearTimeout(timer);\n child.stdout.destroy();\n child.stderr.destroy();\n reject(failure);\n };\n const timer = setTimeout(() => stop(`Git 操作超时:${args[0]}`), options.timeoutMs ?? 120_000);\n child.stdout.setEncoding(\"utf8\");\n child.stderr.setEncoding(\"utf8\");\n child.stdout.on(\"data\", (chunk: string) => {\n if (failure) return;\n stdout += chunk;\n if (stdout.length > 1024 * 1024) stop(\"Git 输出超过限制\");\n });\n child.stderr.on(\"data\", (chunk: string) => {\n if (failure) return;\n stderr += chunk;\n pending += chunk;\n const lines = pending.split(/[\\r\\n]+/);\n pending = lines.pop() ?? \"\";\n for (const line of lines) if (line) options.onLog?.(line);\n if (stderr.length > 1024 * 1024) stop(\"Git 输出超过限制\");\n });\n child.once(\"error\", (error) => {\n clearTimeout(timer);\n reject(error);\n });\n child.once(\"close\", (code) => {\n clearTimeout(timer);\n if (pending) options.onLog?.(pending);\n if (failure) return reject(failure);\n if (code !== 0)\n return reject(\n Object.assign(\n new GitCommandError(stderr.trim() || `Git ${args[0]} 失败(退出码 ${code})`, code),\n { stdout: stdout.trimEnd() },\n ),\n );\n resolve(stdout.trimEnd());\n });\n });\n}\n\n/** A missing ref is expected; launch errors and timeouts are not. */\nexport async function tryGit(cwd: string, args: string[]): Promise<string | undefined> {\n try {\n return await runGit(cwd, args);\n } catch (error) {\n if (error instanceof GitCommandError && error.exitCode !== null) return undefined;\n throw error;\n }\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\n\nexport const gitExecution = new AsyncLocalStorage<{ executable: string; signal?: AbortSignal }>();\n","import { execFile } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\n\nconst execute = promisify(execFile);\nconst xml = (value: string) =>\n value\n .replaceAll(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\");\n\n/** Start the registered user service without spawning a competing daemon. */\nexport async function startAutostart() {\n if (process.platform === \"darwin\")\n await execute(\"launchctl\", [\"kickstart\", `gui/${process.getuid!()}/com.cwm.assistant`]);\n else if (process.platform === \"win32\")\n await execute(\"schtasks.exe\", [\"/Run\", \"/TN\", \"CWM Assistant\"]);\n else throw new Error(\"自启动仅支持 Windows 和 macOS\");\n}\n\n/** Disable future launches without terminating the process handling the request. */\nexport async function disableAutostart() {\n if (process.platform === \"darwin\") {\n const domain = `gui/${process.getuid!()}/com.cwm.assistant`;\n await execute(\"launchctl\", [\"disable\", domain]);\n fs.rmSync(path.join(os.homedir(), \"Library\", \"LaunchAgents\", \"com.cwm.assistant.plist\"), {\n force: true,\n });\n } else if (process.platform === \"win32\") {\n await execute(\"schtasks.exe\", [\"/Delete\", \"/TN\", \"CWM Assistant\", \"/F\"]);\n } else throw new Error(\"自启动仅支持 Windows 和 macOS\");\n}\nexport async function configureAutostart(enable: boolean, directory: string, entry: string) {\n if (process.platform === \"darwin\") {\n const file = path.join(os.homedir(), \"Library\", \"LaunchAgents\", \"com.cwm.assistant.plist\");\n const domain = `gui/${process.getuid!()}`;\n try {\n await execute(\"launchctl\", [\"bootout\", domain + \"/com.cwm.assistant\"]);\n } catch {}\n if (!enable) {\n fs.rmSync(file, { force: true });\n return;\n }\n fs.mkdirSync(path.dirname(file), { recursive: true });\n fs.writeFileSync(\n file,\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<plist version=\"1.0\"><dict>\n<key>Label</key><string>com.cwm.assistant</string>\n<key>ProgramArguments</key><array><string>${xml(process.execPath)}</string><string>${xml(entry)}</string><string>serve</string></array>\n<key>EnvironmentVariables</key><dict><key>CWM_ASSISTANT_HOME</key><string>${xml(directory)}</string></dict>\n<key>RunAtLoad</key><true/><key>KeepAlive</key><true/>\n<key>StandardOutPath</key><string>${xml(path.join(directory, \"assistant.log\"))}</string>\n<key>StandardErrorPath</key><string>${xml(path.join(directory, \"assistant.log\"))}</string>\n</dict></plist>`,\n { mode: 0o600 },\n );\n await execute(\"launchctl\", [\"enable\", domain + \"/com.cwm.assistant\"]);\n await execute(\"launchctl\", [\"bootstrap\", domain, file]);\n } else if (process.platform === \"win32\") {\n const task = \"CWM Assistant\";\n if (!enable) {\n await execute(\"schtasks.exe\", [\"/Delete\", \"/TN\", task, \"/F\"]);\n return;\n }\n const user = os.userInfo().username;\n const file = path.join(directory, \"autostart.xml\");\n fs.writeFileSync(\n file,\n `\\uFEFF<?xml version=\"1.0\" encoding=\"UTF-16\"?>\n<Task version=\"1.2\" xmlns=\"http://schemas.microsoft.com/windows/2004/02/mit/task\"><Triggers><LogonTrigger><Enabled>true</Enabled><UserId>${xml(user)}</UserId></LogonTrigger></Triggers><Principals><Principal id=\"Author\"><UserId>${xml(user)}</UserId><LogonType>InteractiveToken</LogonType><RunLevel>LeastPrivilege</RunLevel></Principal></Principals><Settings><MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy><DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries><StopIfGoingOnBatteries>false</StopIfGoingOnBatteries><ExecutionTimeLimit>PT0S</ExecutionTimeLimit><RestartOnFailure><Interval>PT1M</Interval><Count>3</Count></RestartOnFailure></Settings><Actions Context=\"Author\"><Exec><Command>${xml(process.execPath)}</Command><Arguments>"${xml(entry)}" serve --state-dir "${xml(directory)}"</Arguments></Exec></Actions></Task>`,\n { encoding: \"utf16le\" },\n );\n await execute(\"schtasks.exe\", [\"/Create\", \"/TN\", task, \"/XML\", file, \"/F\"]);\n await execute(\"schtasks.exe\", [\"/Run\", \"/TN\", task]);\n } else throw new Error(\"自启动仅支持 Windows 和 macOS\");\n}\n","import type {\n AssistantGrant,\n DeviceIdentity,\n LocalOperationIntent,\n} from \"@code-workspace/contracts\";\nimport { ASSISTANT_PORT, ASSISTANT_PROTOCOL, ASSISTANT_VERSION } from \"@code-workspace/contracts\";\nimport Fastify from \"fastify\";\nimport { randomBytes, randomUUID, timingSafeEqual } from \"node:crypto\";\nimport { signMessage, verifyGrant } from \"../../../packages/runtime/src/assistant/tokens.ts\";\nimport { registerDeleteRoute } from \"./delete-route.ts\";\nimport { registerAdoptRoutes } from \"./adopt-routes.ts\";\nimport { LocalJobs } from \"./jobs.ts\";\nimport { fetchWorkbenchIdentity, trustedOrigin } from \"./origins.ts\";\nimport { registerQueryRoutes } from \"./query-routes.ts\";\nimport { registerReviewRoute } from \"./review-route.ts\";\nimport { registerLocalRoutes } from \"./routes.ts\";\nimport { registerUpgradeRoutes } from \"./upgrade.ts\";\nimport { StateStore, digest } from \"./state.ts\";\n\nimport { syncMountReceipts } from \"./mount-receipts.ts\";\n\ninterface PairingResult {\n device: DeviceIdentity;\n bindingId: string;\n secret: string;\n receipt: string;\n}\n\nexport async function buildAssistant(\n store: StateStore,\n options: Parameters<typeof registerLocalRoutes>[2] = {},\n entry?: string,\n upgrade: Parameters<typeof registerUpgradeRoutes>[3] = {},\n) {\n const app = Fastify({ logger: false, bodyLimit: 1024 * 1024 });\n const jobs = new LocalJobs(store);\n app.setErrorHandler((error, _request, reply) =>\n reply\n .code((error as { statusCode?: number }).statusCode || 400)\n .send({ code: \"ASSISTANT_ERROR\", error: (error as Error).message }),\n );\n app.addHook(\"onRequest\", async (request, reply) => {\n const host = request.headers.host;\n if (host !== `127.0.0.1:${ASSISTANT_PORT}`) return reply.code(403).send({ error: \"Host 无效\" });\n if (request.url === \"/control\") {\n if (\n request.headers.origin ||\n request.headers.authorization !== \"Bearer \" + store.state.controlKey\n )\n return reply.code(403).send({ error: \"控制凭据无效\" });\n return;\n }\n const origin = request.headers.origin || \"\";\n const path = request.url.split(\"?\")[0];\n // Any web workbench may connect. What makes that safe is not the address but the identity\n // fetch below: grants are only verifiable against a center's own key, so a page that is not a\n // CWM center cannot complete a request no matter which origin it claims.\n let workbench: { id: string; publicKey: string } | undefined = store.state.workbenches[origin];\n if (!workbench && trustedOrigin(origin)) {\n try {\n workbench = await fetchWorkbenchIdentity(origin);\n store.state.workbenches[origin] = workbench;\n store.save();\n } catch {\n workbench = undefined;\n }\n }\n if (!workbench)\n return reply.code(403).send({ error: \"无法识别此工作台\", code: \"ORIGIN_NOT_PAIRED\" });\n reply.header(\"Access-Control-Allow-Origin\", origin);\n reply.header(\"Vary\", \"Origin\");\n reply.header(\"Cache-Control\", \"no-store\");\n if (request.method === \"OPTIONS\") {\n reply.header(\"Access-Control-Allow-Methods\", \"GET, POST, PATCH, DELETE, OPTIONS\");\n if (request.headers[\"access-control-request-private-network\"] === \"true\")\n reply.header(\"Access-Control-Allow-Private-Network\", \"true\");\n reply.header(\"Access-Control-Allow-Headers\", \"Authorization, Content-Type, X-CWM-Binding\");\n return reply.code(204).send();\n }\n if (path === \"/v1/health\" || path === \"/v1/pairings\") return;\n try {\n const token = request.headers.authorization?.replace(/^Bearer /, \"\") || \"\";\n const grant = verifyGrant(token, workbench.publicKey);\n const binding = store.state.bindings.find((item) => item.id === grant.bindingId);\n const proof = String(request.headers[\"x-cwm-binding\"] || \"\");\n if (\n !binding ||\n grant.kind !== \"session\" ||\n binding.workbenchId !== workbench.id ||\n binding.origin !== origin ||\n grant.origin !== origin ||\n grant.deviceId !== store.state.identity.id ||\n grant.workbenchId !== workbench.id ||\n grant.userId !== binding.userId ||\n grant.browserId !== binding.browserId ||\n digest(proof) !== binding.secretHash\n )\n throw new Error(\"绑定无效\");\n let response;\n try {\n response = await fetch(origin + \"/api/assistant/validate\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ token }),\n signal: AbortSignal.timeout(5000),\n });\n } catch {\n return reply.code(503).send({\n code: \"CENTER_UNAVAILABLE\",\n error: \"中心服务暂不可用,绑定已保留,请恢复网络后重试\",\n });\n }\n if (!response.ok) throw new Error(\"账号授权或绑定已失效\");\n (request as unknown as { assistantGrant: AssistantGrant }).assistantGrant = grant;\n } catch (error) {\n return reply.code(401).send({ error: (error as Error).message, code: \"PAIRING_REQUIRED\" });\n }\n });\n app.get(\"/v1/health\", async () => ({\n protocol: ASSISTANT_PROTOCOL,\n version: ASSISTANT_VERSION,\n deviceId: store.state.identity.id,\n }));\n /**\n * Approving a pending request is a local decision, so it produces the binding directly.\n * The legacy pairing-code path below stays for scripted installs.\n */\n function approve(\n origin: string,\n grant: Pick<AssistantGrant, \"userId\" | \"browserId\" | \"workbenchId\">,\n ): PairingResult {\n const secret = randomBytes(32).toString(\"base64url\"),\n id = randomUUID();\n store.state.bindings.push({\n id,\n origin,\n userId: grant.userId,\n browserId: grant.browserId,\n workbenchId: grant.workbenchId,\n secretHash: digest(secret),\n });\n store.save();\n const { privateKey, ...device } = store.state.identity;\n return {\n device,\n bindingId: id,\n secret,\n receipt: signMessage(\n {\n userId: grant.userId,\n browserId: grant.browserId,\n workbenchId: grant.workbenchId,\n deviceId: device.id,\n bindingId: id,\n exp: Date.now() + 60_000,\n },\n privateKey,\n ),\n };\n }\n app.post(\"/v1/pairings\", async (request, reply) => {\n const origin = request.headers.origin || \"\";\n const body = request.body as { token: string; code?: string };\n // onRequest admits /v1/pairings before checking a binding, so read the workbench defensively.\n const workbench = store.state.workbenches[origin];\n if (!workbench) return reply.code(403).send({ error: \"请先通过 setup 授权此工作台\" });\n const grant = verifyGrant(body.token, workbench.publicKey);\n if (\n grant.origin !== origin ||\n grant.deviceId !== store.state.identity.id ||\n grant.workbenchId !== workbench.id ||\n grant.kind !== \"session\"\n )\n return reply.code(403).send({ error: \"授权不匹配\" });\n // A code is only needed when the request comes from the terminal. The browser reaches the\n // assistant on loopback, and its origin is in the setup-time allow-list above, so that\n // origin was already authorised by someone at this machine.\n if (body.code) {\n const pairing = store.state.pairing;\n if (!pairing || pairing.expiresAt <= Date.now() || pairing.failures >= 5)\n return reply.code(403).send({ error: \"配对码已失效,请运行 cwm-assistant pair\" });\n if (\n !timingSafeEqual(\n Buffer.from(pairing.hash),\n Buffer.from(digest(String(body.code).trim().toUpperCase())),\n )\n ) {\n pairing.failures++;\n store.save();\n return reply.code(403).send({ error: \"配对码错误\" });\n }\n delete store.state.pairing;\n }\n return approve(origin, grant);\n });\n app.post(\"/v1/jobs\", async (request) => {\n const intent = request.body as LocalOperationIntent;\n const session = (request as unknown as { assistantGrant: AssistantGrant }).assistantGrant;\n const grant = verifyGrant(intent.token, store.state.workbenches[session.origin].publicKey);\n if (\n grant.kind !== \"operation\" ||\n grant.operationId !== intent.id ||\n grant.deviceId !== session.deviceId ||\n intent.deviceId !== session.deviceId ||\n grant.userId !== session.userId ||\n intent.userId !== session.userId ||\n grant.workbenchId !== session.workbenchId ||\n intent.workbenchId !== session.workbenchId ||\n grant.browserId !== session.browserId ||\n grant.origin !== session.origin ||\n grant.bindingId !== session.bindingId ||\n grant.inputHash !== digest(JSON.stringify(intent.definition))\n )\n throw new Error(\"任务授权不匹配\");\n const job = jobs.submit(intent);\n return { jobId: \"local:\" + job.id };\n });\n app.get(\"/v1/jobs/:id\", async (request, reply) => {\n const grant = (request as unknown as { assistantGrant: AssistantGrant }).assistantGrant;\n const id = (request.params as { id: string }).id;\n const job = store.state.jobs[id] || store.state.activities[id];\n if (!job || job.userId !== grant.userId || job.workbenchId !== grant.workbenchId)\n return reply.code(404).send({ error: \"任务不存在\" });\n const { intent: _intent, ...summary } = {\n ...job,\n intent: \"intent\" in job ? job.intent : undefined,\n };\n return {\n ...summary,\n pendingSync:\n (\"pendingSync\" in job && job.pendingSync) ||\n Object.values(store.state.mountReceipts).some(\n (receipt) =>\n receipt.workbenchId === job.workbenchId &&\n receipt.userId === job.userId &&\n receipt.workspaceId === job.input.workspaceId,\n ),\n };\n });\n app.get(\"/v1/jobs\", async (request) => {\n const grant = (request as unknown as { assistantGrant: AssistantGrant }).assistantGrant;\n return [...Object.values(store.state.jobs), ...Object.values(store.state.activities)]\n .filter((job) => job.userId === grant.userId && job.workbenchId === grant.workbenchId)\n .map((job) => ({\n id: \"local:\" + job.id,\n input: job.input,\n state: job.state,\n error: job.error,\n // The list is used to pick the newest job per workspace, so ordering needs a timestamp.\n updatedAt: \"updatedAt\" in job ? job.updatedAt : undefined,\n deviceId: store.state.identity.id,\n }));\n });\n app.get(\"/v1/jobs/:id/events\", async (request, reply) => {\n const grant = (request as unknown as { assistantGrant: AssistantGrant }).assistantGrant;\n const id = (request.params as { id: string }).id;\n const job = store.state.jobs[id] || store.state.activities[id];\n if (!job || job.userId !== grant.userId || job.workbenchId !== grant.workbenchId)\n return reply.code(404).send({ error: \"任务不存在\" });\n const cursor = Math.max(0, Number((request.query as { after?: string }).after) || 0);\n const base = \"logOffset\" in job ? job.logOffset || 0 : 0;\n const start = Math.max(base, cursor);\n return {\n state: job.state,\n truncated: cursor < base,\n events: job.logs.slice(start - base).map((line, index) => ({ id: start + index + 1, line })),\n cursor: base + job.logs.length,\n };\n });\n app.post(\"/v1/jobs/:id/cancel\", async (request) => {\n const grant = (request as unknown as { assistantGrant: AssistantGrant }).assistantGrant;\n const id = (request.params as { id: string }).id;\n const job = store.state.jobs[id] || store.state.activities[id];\n if (!job || job.userId !== grant.userId || job.workbenchId !== grant.workbenchId)\n throw new Error(\"任务不存在\");\n jobs.cancel(id);\n return { ok: true };\n });\n registerLocalRoutes(app, store, options);\n if (entry) registerUpgradeRoutes(app, store, entry, upgrade);\n registerQueryRoutes(app, store);\n registerAdoptRoutes(app, store, jobs);\n registerDeleteRoute(app, store, jobs);\n registerReviewRoute(app, store, jobs);\n const timer = setInterval(() => {\n void syncMountReceipts(store);\n for (const job of Object.values(store.state.jobs)) if (job.pendingSync) void jobs.sync(job);\n }, 15_000);\n timer.unref();\n app.addHook(\"onClose\", async () => {\n clearInterval(timer);\n await jobs.idle();\n });\n return { app, jobs };\n}\n","import type { AssistantGrant } from \"@code-workspace/contracts\";\nimport { generateKeyPairSync, randomUUID, sign, verify } from \"node:crypto\";\n\nexport function createIdentityKeys() {\n const keys = generateKeyPairSync(\"ed25519\");\n return {\n id: randomUUID(),\n publicKey: keys.publicKey.export({ type: \"spki\", format: \"pem\" }).toString(),\n privateKey: keys.privateKey.export({ type: \"pkcs8\", format: \"pem\" }).toString(),\n };\n}\n\nexport function signMessage(value: unknown, privateKey: string): string {\n const payload = Buffer.from(JSON.stringify(value)).toString(\"base64url\");\n return payload + \".\" + sign(null, Buffer.from(payload), privateKey).toString(\"base64url\");\n}\n\nexport function verifyMessage<T>(token: string, publicKey: string): T {\n const parts = token.split(\".\");\n if (\n parts.length !== 2 ||\n !verify(null, Buffer.from(parts[0]), publicKey, Buffer.from(parts[1], \"base64url\"))\n )\n throw new Error(\"签名无效\");\n return JSON.parse(Buffer.from(parts[0], \"base64url\").toString(\"utf8\")) as T;\n}\n\nexport function verifyGrant(token: string, publicKey: string): AssistantGrant {\n const grant = verifyMessage<AssistantGrant>(token, publicKey);\n if (!Number.isFinite(grant.exp) || grant.exp <= Date.now()) throw new Error(\"连接授权已过期\");\n if (!grant.userId || !grant.origin || !grant.browserId || !grant.deviceId)\n throw new Error(\"连接授权不完整\");\n return grant;\n}\n\nexport function workbenchOrigin(value: string): string {\n const url = new URL(value);\n if (url.username || url.password || url.pathname !== \"/\" || url.search || url.hash)\n throw new Error(\"工作台地址只需填写协议、主机和端口\");\n if (\n url.protocol !== \"https:\" &&\n !(url.protocol === \"http:\" && [\"localhost\", \"127.0.0.1\", \"[::1]\"].includes(url.hostname))\n )\n throw new Error(\"跨机器工作台必须使用可信 HTTPS 地址\");\n return url.origin;\n}\n","import type { FastifyInstance } from \"fastify\";\nimport path from \"node:path\";\nimport { gitExecution } from \"../../../packages/runtime/src/git/context.ts\";\nimport { removeLocalWorkspace } from \"../../../packages/runtime/src/workspaces/delete.ts\";\nimport { LocalJobs } from \"./jobs.ts\";\nimport { requestGrant } from \"./routes.ts\";\nimport { StateStore, scopeKey } from \"./state.ts\";\nimport { localWorkspace } from \"./workspace-files.ts\";\n\nimport { queueMountReceipt, syncMountReceipts } from \"./mount-receipts.ts\";\n\nexport function registerDeleteRoute(app: FastifyInstance, store: StateStore, jobs: LocalJobs) {\n app.delete(\"/v1/workspaces/:id\", async (request) =>\n jobs.exclusive(async () => {\n const grant = requestGrant(request);\n const { id } = request.params as { id: string };\n const body = request.body as { confirmation: string; discardChanges?: boolean };\n let local;\n try {\n local = localWorkspace(store, grant, id);\n } catch (error) {\n throw Object.assign(error as Error, { statusCode: 409 });\n }\n const definition =\n store.state.jobs[\n Object.keys(store.state.jobs).find(\n (key) =>\n store.state.jobs[key].input.workspaceId === id &&\n store.state.jobs[key].userId === grant.userId &&\n store.state.jobs[key].workbenchId === grant.workbenchId,\n ) || \"\"\n ]?.intent.definition;\n const slug =\n definition?.slug ||\n local.document?.settings?.[\"codeWorkspace.name\"] ||\n path.basename(local.mount.directory).replace(/^(cw-|requirements-)/, \"\");\n if (!slug || body.confirmation !== slug) throw new Error(\"请输入完整 Workspace 名称确认移除\");\n const otherMounts = Object.values(store.state.mounts)\n .filter((mount) => mount !== local.mount)\n .flatMap((mount) => {\n try {\n return localWorkspace(\n store,\n { ...grant, userId: mount.userId, workbenchId: mount.workbenchId },\n mount.workspaceId,\n ).folders.map((folder) => ({ folder_path: folder.path }));\n } catch {\n return [{ folder_path: mount.directory }];\n }\n });\n const removalKey = scopeKey(grant.workbenchId, grant.userId, id);\n store.state.removals[removalKey] = local.mount;\n store.save();\n let result;\n try {\n result = gitExecution.run({ executable: store.state.git }, () =>\n removeLocalWorkspace({\n id,\n parentDirectory: local.mount.managedRoot || store.state.root,\n workspaceFile: local.file,\n backupDirectory: store.directory,\n mounts: local.folders.map((folder) => ({ folder_path: folder.path })),\n otherMounts,\n discardChanges: body.discardChanges === true,\n }),\n );\n } catch (error) {\n throw Object.assign(error as Error, { statusCode: 409 });\n }\n if (result.deleted) {\n delete store.state.mounts[removalKey];\n delete store.state.removals[removalKey];\n queueMountReceipt(store, local.mount, \"removed\");\n await syncMountReceipts(store);\n }\n if (!result.deleted) {\n delete store.state.removals[removalKey];\n store.save();\n }\n return result;\n }),\n );\n}\n","import { execFileSync } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { gitExecution } from \"../git/context.ts\";\nconst git = (cwd: string, ...args: string[]) =>\n execFileSync(gitExecution.getStore()?.executable || \"git\", [\"-C\", cwd, ...args], {\n encoding: \"utf8\",\n timeout: 15000,\n maxBuffer: 4 * 1024 * 1024,\n windowsHide: true,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n }).trim();\nconst inside = (root: string, target: string) => target.startsWith(root + path.sep);\nexport function removeLocalWorkspace(options: {\n id: string;\n parentDirectory: string;\n workspaceFile: string;\n backupDirectory: string;\n mounts: Array<{ folder_path: string }>;\n otherMounts: Array<{ folder_path: string }>;\n discardChanges: boolean;\n}) {\n const {\n id,\n parentDirectory,\n workspaceFile,\n backupDirectory,\n mounts,\n otherMounts,\n discardChanges,\n } = options;\n const parent = fs.realpathSync(parentDirectory);\n const requestedFile = path.resolve(workspaceFile);\n // The .code-workspace document is optional; the directory itself is the workspace.\n const hasFile = fs.existsSync(requestedFile);\n // Resolve the workspace directory: a workbench root may itself be reached through a symlink.\n const root = fs.realpathSync(path.dirname(requestedFile));\n const file = path.join(root, path.basename(requestedFile));\n // Only dedicated, directly managed workspace directories may be removed.\n if (\n path.dirname(root) !== parent ||\n !/^(cw-|requirements-).+/.test(path.basename(root)) ||\n (hasFile && fs.lstatSync(file).isSymbolicLink())\n )\n throw new Error(\"仅支持清理工作台父目录内独立的 Workspace 目录;外部目录或符号链接请手动处理\");\n const repositories = new Set<string>();\n for (const mount of mounts) {\n const declared = path.resolve(mount.folder_path);\n if (!inside(root, declared) || !fs.existsSync(declared)) continue;\n const real = fs.realpathSync(declared);\n if (real !== declared) throw new Error(\"Workspace 内有符号链接挂载,请先移除链接\");\n const top = fs.realpathSync(git(real, \"rev-parse\", \"--show-toplevel\"));\n if (!inside(root, top)) throw new Error(\"挂载目录并非独立仓库,拒绝清理\");\n repositories.add(top);\n }\n const repos = [...repositories];\n const metadata: string[] = [];\n const extraFiles: string[] = [];\n const warnings: string[] = [];\n const isFinderMetadata = (p: string) =>\n path.basename(p) === \".DS_Store\" && fs.lstatSync(p).isFile();\n if (\n otherMounts.some((m) => {\n try {\n const p = fs.realpathSync(m.folder_path);\n return p === root || inside(root, p);\n } catch {\n return false;\n }\n })\n )\n throw new Error(\"目录仍被其他 Workspace 挂载,请先解除引用\");\n // No unknown files (including ignored files) are silently discarded.\n const inspect = (directory: string) => {\n for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {\n const p = path.join(directory, entry.name);\n if ((hasFile && p === file) || repos.includes(p)) continue;\n if (isFinderMetadata(p) || entry.name === \".cwm-owner.json\") {\n metadata.push(p);\n continue;\n }\n if (entry.isFile()) {\n extraFiles.push(p);\n warnings.push(`Workspace 包含额外文件,继续删除将丢弃:${p}`);\n continue;\n }\n if (entry.isDirectory() && repos.some((r) => inside(p, r))) inspect(p);\n else throw new Error(`目录包含额外文件,请先处理:${p}`);\n }\n };\n inspect(root);\n const plans = repos.map((repo) => {\n let changedFiles = 0;\n for (const entry of git(\n repo,\n \"status\",\n \"--porcelain\",\n \"-z\",\n \"--untracked-files=all\",\n \"--ignored\",\n )\n .split(\"\\0\")\n .filter(Boolean)) {\n const p = path.resolve(repo, entry.slice(3));\n if (\n (entry.startsWith(\"?? \") || entry.startsWith(\"!! \")) &&\n inside(repo, p) &&\n isFinderMetadata(p)\n )\n metadata.push(p);\n else changedFiles += 1;\n }\n if (changedFiles)\n warnings.push(`${repo} 存在未提交、未跟踪或忽略文件,继续删除将丢弃这些本地内容。`);\n const common = fs.realpathSync(\n git(repo, \"rev-parse\", \"--path-format=absolute\", \"--git-common-dir\"),\n );\n if (repos.some((r) => r !== repo && inside(r, repo))) throw new Error(\"不支持嵌套仓库清理\");\n if (inside(root, common) && common !== path.join(repo, \".git\"))\n throw new Error(\"Git 公共目录位于其他待删除目录内,请手动处理\");\n const linked = common !== path.join(repo, \".git\");\n // Linked worktrees share refs/stashes with their source repository; these survive removal.\n if (\n git(\n repo,\n \"rev-list\",\n \"--max-count=1\",\n \"HEAD\",\n ...(!linked ? [\"--branches\", \"--tags\"] : []),\n \"--not\",\n \"--remotes\",\n )\n )\n warnings.push(\n `${repo} 存在未推送提交或无法确认远端备份。继续删除会清理工作目录,Git 提交将保留在源仓库或本地 Git 备份中。`,\n );\n if (!linked && git(repo, \"stash\", \"list\"))\n warnings.push(`${repo} 存在 stash,将随 Git 数据备份保留,工作目录仍会删除。`);\n if (\n !linked &&\n git(repo, \"worktree\", \"list\", \"--porcelain\")\n .split(\"\\n\")\n .filter((l) => l.startsWith(\"worktree \")).length > 1\n )\n throw new Error(\"仓库仍有其他 worktree,不能删除其主仓库\");\n if (git(repo, \"worktree\", \"list\", \"--porcelain\").includes(\"\\nlocked\"))\n throw new Error(\"仓库有锁定的 worktree,请先解锁\");\n return { repo, common, linked };\n });\n if (warnings.length && !discardChanges) return { requiresConfirmation: true, warnings };\n // Pin detached HEADs before removing linked worktrees so local commits stay reachable.\n for (const plan of plans.filter((p) => p.linked)) {\n if (!git(plan.repo, \"branch\", \"--show-current\")) {\n const head = git(plan.repo, \"rev-parse\", \"HEAD\");\n git(plan.repo, \"update-ref\", `refs/workbench-deleted/${id}/${head}`, head);\n }\n }\n // Preserve independent clones' Git history and branch refs before removing working files.\n for (const plan of plans.filter((p) => !p.linked)) {\n const backup = path.join(\n backupDirectory,\n \"deleted-workspace-git\",\n id,\n String(Date.now()),\n path.relative(root, plan.repo),\n );\n fs.mkdirSync(path.dirname(backup), { recursive: true });\n fs.cpSync(plan.common, backup, { recursive: true, errorOnExist: true, force: false });\n }\n // Only remove recognized metadata once every repository has passed validation.\n for (const p of metadata) {\n if (\n !isFinderMetadata(p) &&\n !(path.basename(p) === \".cwm-owner.json\" && fs.lstatSync(p).isFile())\n )\n throw new Error(`文件类型已变化,取消清理:${p}`);\n fs.unlinkSync(p);\n }\n for (const p of extraFiles) {\n if (!fs.lstatSync(p).isFile()) throw new Error(`文件类型已变化,取消清理:${p}`);\n fs.unlinkSync(p);\n }\n for (const plan of plans) {\n if (plan.linked)\n git(\n parent,\n \"--git-dir=\" + plan.common,\n \"worktree\",\n \"remove\",\n ...(discardChanges ? [\"--force\"] : []),\n plan.repo,\n );\n else fs.rmSync(plan.repo, { recursive: true });\n }\n // rmdir, not recursive rm: concurrent or unexpected new files are preserved.\n if (hasFile) fs.unlinkSync(file);\n const removeEmpty = (directory: string) => {\n for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {\n if (entry.isDirectory()) removeEmpty(path.join(directory, entry.name));\n }\n fs.rmdirSync(directory);\n };\n removeEmpty(root);\n return { deleted: true };\n}\n","import { spawn } from \"node:child_process\";\nimport path from \"node:path\";\n\nexport interface DirectoryPickerCommand {\n command: string;\n args: string[];\n env: Record<string, string>;\n shell: false;\n}\n\nexport function directoryPickerCommand(\n platform: NodeJS.Platform,\n initialPath: string,\n): DirectoryPickerCommand {\n if (platform === \"darwin\") {\n return {\n command: \"osascript\",\n args: [\n \"-e\",\n 'set startPath to system attribute \"CWM_PICKER_INITIAL\"',\n \"-e\",\n 'set selectedFolder to choose folder with prompt \"选择工作目录\" default location POSIX file startPath',\n \"-e\",\n \"POSIX path of selectedFolder\",\n ],\n env: { CWM_PICKER_INITIAL: initialPath },\n shell: false,\n };\n }\n if (platform === \"win32\") {\n return {\n command: \"powershell.exe\",\n args: [\n \"-NoProfile\",\n \"-NonInteractive\",\n \"-Command\",\n [\n \"Add-Type -AssemblyName System.Windows.Forms\",\n \"$dialog = New-Object System.Windows.Forms.FolderBrowserDialog\",\n \"$dialog.SelectedPath = $env:CWM_PICKER_INITIAL\",\n \"if ($dialog.ShowDialog() -eq 'OK') { Write-Output $dialog.SelectedPath } else { exit 1 }\",\n ].join(\"; \"),\n ],\n env: { CWM_PICKER_INITIAL: initialPath },\n shell: false,\n };\n }\n return {\n command: \"zenity\",\n args: [\"--file-selection\", \"--directory\", `--filename=${initialPath}${path.sep}`],\n env: {},\n shell: false,\n };\n}\n\nexport function openDirectoryPicker(initialPath: string): Promise<string | null> {\n const specification = directoryPickerCommand(process.platform, initialPath);\n return new Promise((resolve, reject) => {\n const child = spawn(specification.command, specification.args, {\n shell: specification.shell,\n env: { ...process.env, ...specification.env },\n windowsHide: false,\n });\n let stdout = \"\";\n let stderr = \"\";\n child.stdout.on(\"data\", (chunk) => {\n stdout += String(chunk);\n });\n child.stderr.on(\"data\", (chunk) => {\n stderr += String(chunk);\n });\n child.once(\"error\", reject);\n child.once(\"close\", (code) => {\n const selected = stdout.trim();\n if (code === 0 && selected) return resolve(path.resolve(selected));\n if (!selected && (code === 1 || code === 130)) return resolve(null);\n reject(new Error(stderr.trim() || \"系统目录选择器不可用\"));\n });\n });\n}\n","import type { Agent } from \"@code-workspace/contracts\";\nimport { execFileSync } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { type WorkbenchSettings } from \"../settings/workbench-settings.ts\";\nimport { resolveCursorAgent } from \"./cursor-agent.ts\";\nimport { spawnIdeCommand } from \"./process.ts\";\nimport { windowsCliShim, windowsCodexExecutable, windowsIdeaExecutable } from \"./windows.ts\";\n\nexport function toolboxIdeaScript(preferred = \"\"): string {\n const directory = path.join(\n os.homedir(),\n \"Library/Application Support/JetBrains/Toolbox/scripts\",\n );\n if (!fs.existsSync(directory)) return \"\";\n const names = fs.readdirSync(directory).filter((name) => /^idea(?:\\d+)?$/i.test(name));\n if (preferred) {\n if (names.includes(preferred)) return path.join(directory, preferred);\n if (preferred.toLowerCase() !== \"idea\") return \"\";\n }\n const match = names.find((name) => name.toLowerCase() === \"idea\") || names[0];\n return match ? path.join(directory, match) : \"\";\n}\n\nexport function launchIntelliJIdea(target: string, configuredCommand = \"\"): Promise<void> {\n const command = configuredCommand || process.env.CWM_IDEA_PATH || \"\";\n if (command) {\n if (process.platform === \"darwin\" && command.endsWith(\".app\")) {\n return spawnIdeCommand(\"/usr/bin/open\", [\"-na\", command, \"--args\", target], \"IntelliJ IDEA\");\n }\n const resolved = path.isAbsolute(command) ? command : toolboxIdeaScript(command) || command;\n return spawnIdeCommand(resolved, [target], \"IntelliJ IDEA\");\n }\n if (process.platform === \"darwin\") {\n const script =\n toolboxIdeaScript() ||\n [\"/usr/local/bin/idea\", \"/opt/homebrew/bin/idea\"].find((candidate) =>\n fs.existsSync(candidate),\n ) ||\n \"\";\n if (script) return spawnIdeCommand(script, [target], \"IntelliJ IDEA\");\n const apps = [\n \"IntelliJ IDEA.app\",\n \"IntelliJ IDEA CE.app\",\n \"IntelliJ IDEA Community Edition.app\",\n ];\n const found = apps\n .flatMap((name) => [\n path.join(\"/Applications\", name),\n path.join(os.homedir(), \"Applications\", name),\n ])\n .find((candidate) => fs.existsSync(candidate));\n return spawnIdeCommand(\n \"/usr/bin/open\",\n [\"-na\", found || \"IntelliJ IDEA.app\", \"--args\", target],\n \"IntelliJ IDEA\",\n );\n }\n if (process.platform === \"win32\") {\n const found = windowsIdeaExecutable();\n if (!found)\n return Promise.reject(\n new Error(\"未找到 IntelliJ IDEA。请安装,或在设置中填写 idea64.exe 的完整路径\"),\n );\n return spawnIdeCommand(found, [target], \"IntelliJ IDEA\");\n }\n return spawnIdeCommand(\"idea\", [target], \"IntelliJ IDEA\");\n}\n\nexport function agentCommand(agent: Agent): string | null {\n if (agent === \"none\") return null;\n return agent === \"claude\"\n ? process.env.CWM_CLAUDE_PATH || \"claude\"\n : process.env.CWM_CODEX_PATH || \"codex\";\n}\n\nexport function commandOnPath(name: string): string {\n if (!name) return \"\";\n try {\n const command = process.platform === \"win32\" ? \"where\" : \"/usr/bin/which\";\n const found = execFileSync(command, [name], {\n encoding: \"utf8\",\n timeout: 4000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n })\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .find(Boolean);\n return found || \"\";\n } catch {\n return \"\";\n }\n}\n\nexport function macApplication(name: string): string {\n return (\n [path.join(\"/Applications\", name), path.join(os.homedir(), \"Applications\", name)].find(\n (candidate) => fs.existsSync(candidate),\n ) || \"\"\n );\n}\n\nexport function detectToolCommands(): WorkbenchSettings[\"tools\"] {\n if (process.platform === \"win32\") {\n return {\n vscode: windowsCliShim(\"vscode\") || commandOnPath(\"code\"),\n cursor: windowsCliShim(\"cursor\") || commandOnPath(\"cursor\"),\n idea: windowsIdeaExecutable() || commandOnPath(\"idea64\"),\n claude: commandOnPath(\"claude\"),\n codex: windowsCodexExecutable() || commandOnPath(\"codex\"),\n cursorCli: commandOnPath(\"cursor-agent\"),\n opencode: commandOnPath(\"opencode\"),\n };\n }\n return {\n vscode: commandOnPath(\"code\") || macApplication(\"Visual Studio Code.app\"),\n cursor: commandOnPath(\"cursor\") || macApplication(\"Cursor.app\"),\n idea: toolboxIdeaScript() || commandOnPath(\"idea\") || macApplication(\"IntelliJ IDEA.app\"),\n claude: commandOnPath(\"claude\"),\n codex: commandOnPath(\"codex\"),\n cursorCli:\n resolveCursorAgent(\"\") === \"cursor-agent\"\n ? commandOnPath(\"cursor-agent\")\n : resolveCursorAgent(\"\"),\n opencode: commandOnPath(\"opencode\"),\n };\n}\n","import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nexport function resolveCursorAgent(configuredCommand: string): string {\n if (configuredCommand) return configuredCommand;\n const candidates = [\n process.env.CWM_CURSOR_AGENT_PATH,\n path.join(os.homedir(), \".local/bin/cursor-agent\"),\n \"/usr/local/bin/cursor-agent\",\n \"/opt/homebrew/bin/cursor-agent\",\n ].filter((value): value is string => Boolean(value));\n return candidates.find((candidate) => fs.existsSync(candidate)) || \"cursor-agent\";\n}\n","import { spawn } from \"node:child_process\";\nexport function quoteWindows(value: string): string {\n if (!/[\\s\"&|<>^]/.test(value)) return value;\n return '\"' + value.replace(/\"/g, '\"\"') + '\"';\n}\nexport function spawnIdeCommand(command: string, args: string[], label: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const env = { ...process.env };\n delete env.ELECTRON_RUN_AS_NODE;\n delete env.VSCODE_IPC_HOOK_CLI;\n const windowsShim = process.platform === \"win32\" && /\\.(cmd|bat)$/i.test(command);\n const file = windowsShim ? process.env.ComSpec || \"cmd.exe\" : command;\n const argv = windowsShim\n ? [\"/d\", \"/s\", \"/c\", [quoteWindows(command), ...args.map(quoteWindows)].join(\" \")]\n : args;\n const child = spawn(file, argv, { env, stdio: [\"ignore\", \"ignore\", \"pipe\"] });\n let stderr = \"\";\n const timeout = setTimeout(() => {\n child.kill();\n reject(new Error(label + \" 启动命令超时,请检查应用窗口或设置中的 CLI 路径\"));\n }, 20_000);\n child.stderr?.on(\"data\", (data: Buffer) => {\n stderr = (stderr + data.toString()).slice(-8000);\n });\n child.once(\"error\", (error) => {\n clearTimeout(timeout);\n reject(new Error(\"无法启动 \" + label + \":\" + error.message));\n });\n child.once(\"close\", (code) => {\n clearTimeout(timeout);\n if (code === 0) resolve();\n else\n reject(\n new Error(\n label +\n \" 启动失败(退出码 \" +\n code +\n \"):\" +\n (stderr.trim() || \"请检查 IDE 安装及 CLI 路径\"),\n ),\n );\n });\n });\n}\n","import type { Ide } from \"@code-workspace/contracts\";\nimport { execFileSync, spawn } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { resolveCursorAgent } from \"./cursor-agent.ts\";\nimport { quoteWindows, spawnIdeCommand } from \"./process.ts\";\n\nexport function windowsCommandAvailable(command: string): boolean {\n if (!command) return false;\n if (path.win32.isAbsolute(command) || command.includes(\"\\\\\") || command.includes(\"/\"))\n return fs.existsSync(command);\n const directories = (process.env.PATH || \"\").split(\";\").filter(Boolean);\n const extensions = [\"\", \".exe\", \".cmd\", \".bat\", \".com\"];\n return directories.some((directory) =>\n extensions.some((extension) => fs.existsSync(path.join(directory, command + extension))),\n );\n}\n\nexport function windowsProtocolRegistered(scheme: string): boolean {\n for (const root of [\"HKCU\\\\Software\\\\Classes\\\\\", \"HKLM\\\\Software\\\\Classes\\\\\"]) {\n try {\n execFileSync(\"reg\", [\"query\", root + scheme], { stdio: \"ignore\" });\n return true;\n } catch {\n // Try the next registry hive.\n }\n }\n return false;\n}\n\nexport function windowsIdeaExecutable(): string {\n const roots = [\n path.join(process.env.ProgramFiles || \"\", \"JetBrains\"),\n path.join(process.env[\"ProgramFiles(x86)\"] || \"\", \"JetBrains\"),\n path.join(process.env.LOCALAPPDATA || \"\", \"JetBrains\", \"Toolbox\", \"apps\"),\n ];\n const found: string[] = [];\n const walk = (directory: string, depth: number) => {\n if (depth < 0 || !fs.existsSync(directory)) return;\n for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {\n const target = path.join(directory, entry.name);\n if (entry.isFile() && /^idea64\\.exe$/i.test(entry.name)) found.push(target);\n else if (entry.isDirectory()) walk(target, depth - 1);\n }\n };\n for (const root of roots) walk(root, 5);\n return (\n found.sort((left, right) => fs.statSync(right).mtimeMs - fs.statSync(left).mtimeMs)[0] || \"\"\n );\n}\n\nexport function windowsCodexExecutable(): string {\n const root = path.join(process.env.LOCALAPPDATA || \"\", \"OpenAI\", \"Codex\", \"bin\");\n if (!fs.existsSync(root)) return \"\";\n const matches = fs\n .readdirSync(root, { withFileTypes: true })\n .filter((entry) => entry.isDirectory())\n .map((entry) => path.join(root, entry.name, \"codex.exe\"))\n .filter((candidate) => fs.existsSync(candidate))\n .sort((left, right) => fs.statSync(right).mtimeMs - fs.statSync(left).mtimeMs);\n return matches[0] || \"\";\n}\n\nexport function windowsCliShim(ide: \"cursor\" | \"vscode\"): string {\n const local = process.env.LOCALAPPDATA || \"\";\n const programFiles = process.env.ProgramFiles || \"\";\n const programFilesX86 = process.env[\"ProgramFiles(x86)\"] || \"\";\n const candidates =\n ide === \"cursor\"\n ? [\n path.join(local, \"Programs\", \"cursor\", \"resources\", \"app\", \"bin\", \"cursor.cmd\"),\n path.join(local, \"Programs\", \"Cursor\", \"resources\", \"app\", \"bin\", \"cursor.cmd\"),\n ]\n : [\n path.join(local, \"Programs\", \"Microsoft VS Code\", \"bin\", \"code.cmd\"),\n path.join(programFiles, \"Microsoft VS Code\", \"bin\", \"code.cmd\"),\n path.join(programFilesX86, \"Microsoft VS Code\", \"bin\", \"code.cmd\"),\n ];\n return candidates.find((candidate) => fs.existsSync(candidate)) || \"\";\n}\n\nexport function launchWindowsCli(\n ide: Ide,\n configuredCommand: string,\n fallbackName: string,\n workingDirectory: string,\n): Promise<void> {\n const fallback = configuredCommand || fallbackName;\n const command =\n ide === \"cursor-cli\"\n ? resolveCursorAgent(configuredCommand)\n : ide === \"codex-cli\" && !configuredCommand\n ? windowsCodexExecutable() || fallback\n : fallback;\n if (!windowsCommandAvailable(command))\n return Promise.reject(\n new Error(\n \"未找到 \" + (configuredCommand || fallbackName) + \"。请安装,或在设置中填写完整路径\",\n ),\n );\n const comspec = process.env.ComSpec || \"cmd.exe\";\n const script = \"cd /d \" + quoteWindows(workingDirectory) + \" && \" + quoteWindows(command);\n const child = spawn(comspec, [\"/d\", \"/c\", \"start\", '\"\"', \"cmd\", \"/k\", script], {\n detached: true,\n stdio: \"ignore\",\n windowsHide: false,\n });\n child.once(\"error\", () => {});\n child.unref();\n return Promise.resolve();\n}\n\nexport function launchWindowsDesktopApp(\n ide: \"claude\" | \"opencode\",\n workingDirectory: string,\n): Promise<void> {\n const url =\n (ide === \"opencode\" ? \"opencode://open-project?directory=\" : \"claude://code/new?folder=\") +\n encodeURIComponent(workingDirectory);\n const scheme = ide === \"opencode\" ? \"opencode\" : \"claude\";\n if (!windowsProtocolRegistered(scheme))\n return Promise.reject(\n new Error(\n \"未找到 \" +\n (ide === \"opencode\" ? \"OpenCode\" : \"Claude Code\") +\n \" 桌面应用。请先安装,或确认系统已注册对应的打开协议\",\n ),\n );\n return spawnIdeCommand(\n process.env.ComSpec || \"cmd.exe\",\n [\"/d\", \"/s\", \"/c\", \"start\", \"\", url],\n ide,\n );\n}\n","import type { Ide } from \"@code-workspace/contracts\";\nimport { spawn } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { openPlatformUri } from \"../platform/uri.ts\";\nimport { launchIntelliJIdea } from \"./commands.ts\";\nimport { resolveCursorAgent } from \"./cursor-agent.ts\";\nimport { spawnIdeCommand } from \"./process.ts\";\nimport {\n launchWindowsCli,\n launchWindowsDesktopApp,\n windowsCliShim,\n windowsCodexExecutable,\n} from \"./windows.ts\";\n\nexport function launchIde(\n workspaceFile: string,\n ide: Ide,\n configuredCommand = \"\",\n targetKind: \"workspace\" | \"directory\" = \"workspace\",\n): Promise<void> {\n if (\n !path.isAbsolute(workspaceFile) ||\n (targetKind === \"workspace\" && !workspaceFile.endsWith(\".code-workspace\")) ||\n !fs.existsSync(workspaceFile)\n ) {\n return Promise.reject(new Error(\"Workspace 文件不存在或路径无效:\" + workspaceFile));\n }\n if (targetKind === \"directory\" && !fs.statSync(workspaceFile).isDirectory())\n return Promise.reject(new Error(\"仓库目录不存在\"));\n const workingDirectory = targetKind === \"directory\" ? workspaceFile : path.dirname(workspaceFile);\n const cliCommands: Partial<Record<Ide, string>> = {\n \"codex-cli\": \"codex\",\n \"cursor-cli\": \"cursor-agent\",\n \"opencode-cli\": \"opencode\",\n \"claudecode-cli\": \"claude\",\n };\n if (cliCommands[ide]) {\n if (process.platform === \"win32\")\n return launchWindowsCli(ide, configuredCommand, cliCommands[ide]!, workingDirectory);\n if (process.platform !== \"darwin\")\n return Promise.reject(new Error(\"系统默认终端启动目前仅接入 macOS 和 Windows\"));\n const command =\n ide === \"cursor-cli\"\n ? resolveCursorAgent(configuredCommand)\n : configuredCommand || cliCommands[ide]!;\n const quote = (value: string) => \"'\" + value.replace(/'/g, \"'\\\"'\\\"'\") + \"'\";\n const directory = fs.mkdtempSync(path.join(os.tmpdir(), \"cwm-launch-\"));\n const script = path.join(directory, ide + \".command\");\n const shell =\n process.env.SHELL && path.isAbsolute(process.env.SHELL) ? process.env.SHELL : \"/bin/zsh\";\n const invocation =\n \"if command -v \" +\n quote(command) +\n \" >/dev/null 2>&1; then exec \" +\n quote(command) +\n \"; else printf '%s\\\\n' \" +\n quote(\"Command not found: \" + command + \". Configure its path in Workbench settings.\") +\n \"; read reply; fi\";\n fs.writeFileSync(\n script,\n [\n \"#!/bin/sh\",\n \"rm -f -- \" + quote(script),\n \"rmdir -- \" + quote(directory),\n \"unset ELECTRON_RUN_AS_NODE VSCODE_IPC_HOOK_CLI\",\n \"cd \" + quote(workingDirectory) + \" || exit 1\",\n \"exec \" + quote(shell) + \" -ilc \" + quote(invocation),\n \"\",\n ].join(\"\\n\"),\n { mode: 0o700 },\n );\n return new Promise((resolve, reject) => {\n const child = spawn(\"/usr/bin/open\", [script], { stdio: [\"ignore\", \"ignore\", \"pipe\"] });\n let stderr = \"\";\n const cleanup = () => {\n fs.rmSync(script, { force: true });\n try {\n fs.rmdirSync(directory);\n } catch {}\n };\n const timer = setTimeout(() => {\n child.kill();\n cleanup();\n reject(new Error(\"启动默认终端超时\"));\n }, 20_000);\n child.stderr?.on(\"data\", (data: Buffer) => {\n stderr = (stderr + data.toString()).slice(-8000);\n });\n child.once(\"error\", (error) => {\n clearTimeout(timer);\n cleanup();\n reject(error);\n });\n child.once(\"close\", (code) => {\n clearTimeout(timer);\n if (code === 0) resolve();\n else {\n cleanup();\n reject(new Error(\"无法启动系统默认终端:\" + stderr.trim()));\n }\n });\n });\n }\n if (ide === \"claude\" || ide === \"opencode\") {\n if (process.platform === \"win32\") return launchWindowsDesktopApp(ide, workingDirectory);\n if (process.platform !== \"darwin\") {\n return openPlatformUri(\n (ide === \"opencode\" ? \"opencode://open-project?directory=\" : \"claude://code/new?folder=\") +\n encodeURIComponent(workingDirectory),\n );\n }\n const url =\n (ide === \"opencode\" ? \"opencode://open-project?directory=\" : \"claude://code/new?folder=\") +\n encodeURIComponent(workingDirectory);\n return new Promise((resolve, reject) => {\n const child = spawn(\"/usr/bin/open\", [url], { stdio: [\"ignore\", \"ignore\", \"pipe\"] });\n let stderr = \"\";\n const timeout = setTimeout(() => {\n child.kill();\n reject(new Error(\"打开桌面应用超时,请检查应用安装\"));\n }, 20_000);\n child.stderr?.on(\"data\", (data: Buffer) => {\n stderr = (stderr + data.toString()).slice(-8000);\n });\n child.once(\"error\", (error) => {\n clearTimeout(timeout);\n reject(error);\n });\n child.once(\"close\", (code) => {\n clearTimeout(timeout);\n if (code === 0) resolve();\n else\n reject(new Error(\"无法打开 \" + ide + \",请确认已安装最新版桌面应用:\" + stderr.trim()));\n });\n });\n }\n if (ide === \"idea\") return launchIntelliJIdea(workingDirectory, configuredCommand);\n const cursorLike = ide === \"cursor\" || ide === \"cursor-agent\";\n let command =\n configuredCommand ||\n (ide === \"codex\"\n ? process.env.CWM_CODEX_PATH\n : cursorLike\n ? process.env.CWM_CURSOR_PATH\n : process.env.CWM_VSCODE_PATH) ||\n \"\";\n if (!command && ide !== \"codex\" && process.platform === \"darwin\") {\n const app = cursorLike ? \"Cursor.app\" : \"Visual Studio Code.app\";\n const binary = cursorLike ? \"cursor\" : \"code\";\n const candidates = [\n path.join(\"/Applications\", app, \"Contents/Resources/app/bin\", binary),\n path.join(os.homedir(), \"Applications\", app, \"Contents/Resources/app/bin\", binary),\n ];\n command = candidates.find((candidate) => fs.existsSync(candidate)) || \"\";\n }\n if (\n !command &&\n process.platform === \"win32\" &&\n (cursorLike || ide === \"vscode\" || ide === \"codex\")\n ) {\n command =\n ide === \"codex\" ? windowsCodexExecutable() : windowsCliShim(cursorLike ? \"cursor\" : \"vscode\");\n if (!command)\n return Promise.reject(\n new Error(\n \"未找到 \" +\n (ide === \"codex\" ? \"Codex\" : cursorLike ? \"Cursor\" : \"VS Code\") +\n \"。请安装,或在设置中填写启动命令的完整路径\",\n ),\n );\n }\n command ||= ide === \"codex\" ? \"codex\" : cursorLike ? \"cursor\" : \"code\";\n const args =\n ide === \"codex\"\n ? [\"app\", workingDirectory]\n : ide === \"cursor-agent\"\n ? [workingDirectory]\n : [\"--new-window\", workspaceFile];\n if (process.platform === \"win32\") return spawnIdeCommand(command, args, ide);\n return new Promise((resolve, reject) => {\n const env = { ...process.env };\n delete env.ELECTRON_RUN_AS_NODE;\n delete env.VSCODE_IPC_HOOK_CLI;\n const child = spawn(command, args, { env, stdio: [\"ignore\", \"ignore\", \"pipe\"] });\n let stderr = \"\";\n const timeout = setTimeout(() => {\n child.kill();\n reject(new Error(\"IDE 启动命令超时,请检查应用窗口或设置中的 CLI 路径\"));\n }, 20_000);\n child.stderr?.on(\"data\", (data: Buffer) => {\n stderr = (stderr + data.toString()).slice(-8000);\n });\n child.once(\"error\", (error) => {\n clearTimeout(timeout);\n reject(new Error(\"无法启动 \" + ide + \":\" + error.message));\n });\n child.once(\"close\", (code) => {\n clearTimeout(timeout);\n if (code === 0) resolve();\n else\n reject(\n new Error(\n ide +\n \" 启动失败(退出码 \" +\n code +\n \"):\" +\n (stderr.trim() || \"请检查 IDE 安装及 CLI 路径\"),\n ),\n );\n });\n });\n}\n","import { spawn } from \"node:child_process\";\nexport function uriInvocation(target: string, platform: NodeJS.Platform = process.platform) {\n if (platform === \"darwin\") return { command: \"/usr/bin/open\", args: [target] };\n if (platform === \"win32\")\n return { command: \"rundll32.exe\", args: [\"url.dll,FileProtocolHandler\", target] };\n return { command: \"xdg-open\", args: [target] };\n}\nexport function windowsInvocation(command: string, args: string[]) {\n const quote = (s: string) => \"'\" + s.replaceAll(\"'\", \"''\") + \"'\";\n const script = \"& \" + [command, ...args].map(quote).join(\" \") + \"; exit $LASTEXITCODE\";\n return {\n command: \"powershell.exe\",\n args: [\n \"-NoProfile\",\n \"-NonInteractive\",\n \"-EncodedCommand\",\n Buffer.from(script, \"utf16le\").toString(\"base64\"),\n ],\n };\n}\nexport function spawnPlatformCommand(\n command: string,\n args: string[],\n label: string,\n): Promise<void> {\n const invocation =\n process.platform === \"win32\" ? windowsInvocation(command, args) : { command, args };\n return new Promise((resolve, reject) => {\n const child = spawn(invocation.command, invocation.args, {\n stdio: [\"ignore\", \"ignore\", \"pipe\"],\n });\n let stderr = \"\";\n const timer = setTimeout(() => {\n child.kill();\n reject(new Error(label + \"启动超时\"));\n }, 20000);\n child.stderr?.on(\"data\", (data) => {\n stderr = (stderr + String(data)).slice(-2000);\n });\n child.once(\"error\", (error) => {\n clearTimeout(timer);\n reject(error);\n });\n child.once(\"close\", (code) => {\n clearTimeout(timer);\n if (code === 0) resolve();\n else reject(new Error(label + \"启动失败:\" + stderr.trim()));\n });\n });\n}\nexport async function openPlatformUri(target: string) {\n const invocation = uriInvocation(target);\n await spawnPlatformCommand(invocation.command, invocation.args, \"应用\");\n}\n","import type { RepositoryMode } from \"@code-workspace/contracts\";\nimport { randomUUID } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { runGit, tryGit } from \"../git/commands.ts\";\n\nexport interface WorkspaceInput {\n parent: string;\n slug: string;\n description?: string;\n workspaceDirectory?: string;\n outputWorkspace?: string;\n repositories: Array<{\n alias: string;\n sourcePath: string;\n branch: string;\n fromBranch?: string;\n mode: RepositoryMode;\n subpath?: string;\n }>;\n}\nexport interface WorkspaceResult {\n slug: string;\n workspace: string;\n path: string;\n opened: 0;\n}\ntype Repository = WorkspaceInput[\"repositories\"][number];\nconst DEFAULT_BASE = \"origin/production\";\n\nfunction inside(root: string, target: string): boolean {\n const relative = path.relative(root, target);\n return relative !== \"..\" && !relative.startsWith(\"..\" + path.sep) && !path.isAbsolute(relative);\n}\nfunction stat(file: string) {\n try {\n return fs.lstatSync(file);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return undefined;\n throw error;\n }\n}\nasync function commonDirectory(source: string): Promise<string> {\n const common = await runGit(source, [\"rev-parse\", \"--git-common-dir\"]);\n return fs.realpathSync(path.resolve(source, common));\n}\nasync function hasRef(source: string, ref: string): Promise<boolean> {\n return (await tryGit(source, [\"show-ref\", \"--verify\", \"--quiet\", ref])) !== undefined;\n}\nasync function resolveBase(source: string, preferred: string): Promise<string> {\n const candidates = [preferred];\n if (!preferred.startsWith(\"origin/\") && !preferred.startsWith(\"refs/\"))\n candidates.push(`origin/${preferred}`, `refs/heads/${preferred}`);\n candidates.push(\n \"refs/remotes/origin/HEAD\",\n \"origin/production\",\n \"origin/main\",\n \"origin/master\",\n \"origin/develop\",\n \"HEAD\",\n );\n for (const ref of candidates) {\n const commit = await tryGit(source, [\n \"rev-parse\",\n \"--verify\",\n \"--end-of-options\",\n `${ref}^{commit}`,\n ]);\n if (commit !== undefined) return commit;\n }\n throw new Error(\"没有可用的 From 分支或 HEAD\");\n}\nasync function occupiedPath(source: string, branch: string): Promise<string | undefined> {\n const records = (await runGit(source, [\"worktree\", \"list\", \"--porcelain\", \"-z\"])).split(\"\\0\\0\");\n for (const record of records) {\n const fields = record.split(\"\\0\");\n if (fields.includes(`branch refs/heads/${branch}`))\n return fields.find((field) => field.startsWith(\"worktree \"))?.slice(9);\n }\n}\nasync function ensureClean(dest: string): Promise<void> {\n if (await runGit(dest, [\"status\", \"--porcelain\"]))\n throw new Error(`${dest} 有未提交改动,已停止切换分支`);\n}\nasync function checkout(\n dest: string,\n branch: string,\n preferred: string,\n allowCreate: boolean,\n log: (line: string) => void,\n): Promise<void> {\n if (!branch || (await runGit(dest, [\"branch\", \"--show-current\"])) === branch) return;\n await ensureClean(dest);\n if (await hasRef(dest, `refs/heads/${branch}`)) {\n await runGit(dest, [\"checkout\", branch], { onLog: log });\n } else if (await hasRef(dest, `refs/remotes/origin/${branch}`)) {\n await runGit(dest, [\"checkout\", \"-b\", branch, \"--track\", `origin/${branch}`], { onLog: log });\n } else if (allowCreate) {\n await runGit(dest, [\"checkout\", \"-b\", branch, await resolveBase(dest, preferred)], {\n onLog: log,\n });\n } else {\n throw new Error(`无法在 ${dest} 切换到 ${branch}:分支不存在`);\n }\n}\n\n/** Materialize mounts, then atomically publish their workspace document. Failed Git work is retained. */\nexport async function createWorkspace(\n input: WorkspaceInput,\n onLog: (line: string) => void = () => {},\n): Promise<WorkspaceResult> {\n if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(input.slug)) throw new Error(\"Workspace 名称无效\");\n if (!Array.isArray(input.repositories) || !input.repositories.length)\n throw new Error(\"至少需要一个仓库\");\n const parent = path.resolve(input.parent);\n const current = path.join(parent, `cw-${input.slug}`),\n legacy = path.join(parent, `requirements-${input.slug}`);\n const directory = path.resolve(\n input.workspaceDirectory ||\n (fs.existsSync(current) ? current : fs.existsSync(legacy) ? legacy : current),\n );\n const output = path.resolve(\n input.outputWorkspace || path.join(directory, `${path.basename(directory)}.code-workspace`),\n );\n if (stat(directory)?.isSymbolicLink() || stat(output)?.isSymbolicLink())\n throw new Error(\"Workspace 目标不能是符号链接\");\n const original = stat(output) ? fs.readFileSync(output) : undefined;\n const aliases = new Set<string>();\n const prepared: Array<{\n repo: Repository;\n source: string;\n common: string;\n main: string;\n branch: string;\n }> = [];\n // Validate the entire request before performing Git mutations or creating the target directory.\n for (const repo of input.repositories) {\n if (\n !/^[A-Za-z0-9._-]+$/.test(repo.alias) ||\n [\".\", \"..\", \".git\"].includes(repo.alias.toLowerCase())\n )\n throw new Error(\"仓库 ALIAS 无效\");\n const aliasKey = process.platform === \"linux\" ? repo.alias : repo.alias.toLowerCase();\n if (aliases.has(aliasKey)) throw new Error(\"仓库 ALIAS 重复\");\n aliases.add(aliasKey);\n if (![\"worktree\", \"checkout\"].includes(repo.mode)) throw new Error(\"仓库模式无效\");\n if (\n repo.subpath &&\n (path.isAbsolute(repo.subpath) ||\n path.win32.isAbsolute(repo.subpath) ||\n repo.subpath.split(/[\\\\/]/).includes(\"..\") ||\n repo.subpath.includes(\"\\0\"))\n )\n throw new Error(\"SUBPATH 必须是仓库内相对路径\");\n if (!repo.sourcePath) throw new Error(\"SOURCE 不能为空\");\n const source = fs.realpathSync(path.resolve(repo.sourcePath));\n if ((await runGit(source, [\"rev-parse\", \"--is-inside-work-tree\"])) !== \"true\")\n throw new Error(`SOURCE 不是 Git 工作目录:${source}`);\n if (repo.branch) {\n if (repo.branch.startsWith(\"-\") || repo.branch.includes(\"@{\")) throw new Error(\"分支无效\");\n await runGit(source, [\"check-ref-format\", \"--branch\", repo.branch]);\n }\n if (repo.fromBranch && (repo.fromBranch.startsWith(\"-\") || /[\\0\\r\\n]/.test(repo.fromBranch)))\n throw new Error(\"From 分支无效\");\n const common = await commonDirectory(source);\n // The first record identifies the main checkout even when SOURCE is a linked worktree.\n const mainRecord = (await runGit(source, [\"worktree\", \"list\", \"--porcelain\", \"-z\"])).split(\n \"\\0\",\n )[0];\n const main = mainRecord.startsWith(\"worktree \") ? mainRecord.slice(9) : source;\n const branch =\n repo.branch ||\n (repo.mode === \"checkout\" ? repo.fromBranch : \"\") ||\n (await runGit(source, [\"branch\", \"--show-current\"]));\n if (branch) {\n if (branch.startsWith(\"-\") || branch.includes(\"@{\")) throw new Error(\"分支无效\");\n await runGit(source, [\"check-ref-format\", \"--branch\", branch]);\n }\n const dest = path.join(directory, repo.alias);\n if (stat(dest)?.isSymbolicLink()) throw new Error(`目标不能是符号链接:${dest}`);\n if (\n fs.existsSync(dest) &&\n [fs.realpathSync(main), fs.realpathSync(source)].includes(fs.realpathSync(dest))\n )\n throw new Error(\"目标目录不能复用源仓库自身\");\n prepared.push({ repo, source, common, main, branch });\n }\n fs.mkdirSync(directory, { recursive: true });\n const folders: Array<{ name: string; path: string }> = [];\n const metadata: Array<{\n alias: string;\n branch: string;\n from_branch: string;\n from_mode: RepositoryMode;\n }> = [];\n for (const { repo, source, common, main, branch } of prepared) {\n const dest = path.join(directory, repo.alias),\n preferred = repo.fromBranch || DEFAULT_BASE;\n if ((await runGit(main, [\"remote\"])).split(\"\\n\").includes(\"origin\")) {\n onLog(`刷新远端:${repo.alias}`);\n if ((await tryGit(main, [\"fetch\", \"origin\", \"--prune\"])) === undefined)\n onLog(`远端刷新失败,继续使用本地引用:${repo.alias}`);\n }\n if (stat(dest)) {\n if (stat(dest)?.isSymbolicLink()) throw new Error(`目标不能是符号链接:${dest}`);\n const root = await runGit(dest, [\"rev-parse\", \"--show-toplevel\"]);\n if (fs.realpathSync(root) !== fs.realpathSync(dest))\n throw new Error(`目标目录不是仓库根目录:${dest}`);\n const linked = (await commonDirectory(dest)) === common;\n if (repo.mode === \"checkout\" && linked)\n throw new Error(`目标已是源仓的 linked worktree:${dest}`);\n if (repo.mode === \"worktree\" && !linked) throw new Error(`目标已是独立 clone:${dest}`);\n onLog(`复用 ${repo.mode}:${repo.alias}`);\n await checkout(dest, branch, preferred, repo.mode === \"checkout\", onLog);\n } else if (repo.mode === \"checkout\") {\n onLog(`克隆独立目录:${repo.alias}`);\n await runGit(main, [\"clone\", \"--local\", \"--\", main, dest], { onLog });\n await checkout(dest, branch, preferred, true, onLog);\n } else {\n if (branch) {\n const occupied = await occupiedPath(main, branch);\n if (occupied) throw new Error(`分支 ${branch} 已在其他 worktree 检出:${occupied}`);\n }\n onLog(`创建 worktree:${repo.alias}`);\n const args = [\"worktree\", \"add\"];\n if (!branch) args.push(\"--detach\", dest, await runGit(source, [\"rev-parse\", \"HEAD\"]));\n else if (await hasRef(main, `refs/heads/${branch}`)) args.push(dest, branch);\n else if (await hasRef(main, `refs/remotes/origin/${branch}`))\n args.push(\"-b\", branch, dest, `origin/${branch}`);\n else args.push(\"-b\", branch, dest, await resolveBase(main, preferred));\n await runGit(main, args, { onLog });\n }\n const folder = path.resolve(dest, repo.subpath || \"\");\n if (!fs.existsSync(folder) || !inside(fs.realpathSync(dest), fs.realpathSync(folder)))\n throw new Error(`SUBPATH 不存在或超出仓库:${folder}`);\n // Editing reads a temporary document outside directory, then rebases these mount paths.\n folders.push({\n name: repo.alias,\n path: path.relative(directory, folder).split(path.sep).join(\"/\"),\n });\n metadata.push({\n alias: repo.alias,\n branch: await runGit(dest, [\"rev-parse\", \"--abbrev-ref\", \"HEAD\"]),\n from_branch: preferred,\n from_mode: repo.mode,\n });\n }\n const document = {\n folders,\n settings: {\n \"window.title\": `${input.slug} — \\${rootName}`,\n \"codeWorkspace.description\": input.description || \"\",\n \"codeWorkspace.repos\": metadata,\n \"files.exclude\": { \"**/target\": true, \"**/node_modules\": true, \"**/.git/objects\": true },\n },\n };\n // Leave an existing document untouched if an external writer changed it during Git operations.\n if (\n stat(output)?.isSymbolicLink() ||\n (original ? !fs.existsSync(output) || !fs.readFileSync(output).equals(original) : stat(output))\n )\n throw new Error(\"Workspace 文件已被外部修改,已停止写入\");\n const temporary = `${output}.${randomUUID()}.tmp`;\n try {\n fs.writeFileSync(temporary, JSON.stringify(document, null, 2) + \"\\n\", {\n flag: \"wx\",\n mode: original ? fs.statSync(output).mode & 0o777 : 0o600,\n });\n fs.renameSync(temporary, output);\n } finally {\n fs.rmSync(temporary, { force: true });\n }\n onLog(`Workspace 已生成:${output}`);\n return { slug: input.slug, workspace: output, path: directory, opened: 0 };\n}\n","import type { AssistantGrant, Ide } from \"@code-workspace/contracts\";\nimport { detectToolCommands, launchIde, openDirectoryPicker } from \"@code-workspace/runtime\";\nimport type { FastifyInstance, FastifyRequest } from \"fastify\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { runGit } from \"../../../packages/runtime/src/git/commands.ts\";\nimport { gitExecution } from \"../../../packages/runtime/src/git/context.ts\";\nimport { checkedPath } from \"./paths.ts\";\nimport { StateStore, scopeKey } from \"./state.ts\";\nimport { localWorkspace } from \"./workspace-files.ts\";\n\nexport const requestGrant = (request: FastifyRequest) =>\n (request as unknown as { assistantGrant: AssistantGrant }).assistantGrant;\nexport function registerLocalRoutes(\n app: FastifyInstance,\n store: StateStore,\n options: { pickDirectory?: typeof openDirectoryPicker } = {},\n) {\n const git = <T>(fn: () => Promise<T>) => gitExecution.run({ executable: store.state.git }, fn);\n app.get(\"/v1/capabilities\", async () => {\n let version = \"\",\n error = \"\";\n try {\n version = await git(() => runGit(os.homedir(), [\"--version\"]));\n } catch (cause) {\n error = (cause as Error).message;\n }\n const match = version.match(/(\\d+)\\.(\\d+)/);\n const gitReady = Boolean(match && (+match[1] > 2 || (+match[1] === 2 && +match[2] >= 38)));\n let rootReady = false;\n try {\n fs.accessSync(store.state.root, fs.constants.W_OK);\n rootReady = fs.statSync(store.state.root).isDirectory();\n } catch {}\n const { privateKey: _privateKey, ...device } = store.state.identity;\n return {\n device,\n gitVersion: version,\n gitReady,\n rootReady,\n ready: gitReady && rootReady,\n error,\n root: store.state.root,\n git: store.state.git,\n tools: store.state.tools,\n };\n });\n app.get(\"/v1/settings\", async () => ({\n parentFolder: store.state.root,\n git: store.state.git,\n tools: store.state.tools,\n }));\n app.patch(\"/v1/settings\", async (request) => {\n const body = request.body as {\n parentFolder?: string;\n git?: string;\n tools?: Record<string, string>;\n };\n let root = store.state.root;\n let gitPath = store.state.git;\n if (body.parentFolder !== undefined) {\n if (!path.isAbsolute(body.parentFolder) || !fs.statSync(body.parentFolder).isDirectory())\n throw new Error(\"请选择本机已存在的绝对目录\");\n fs.accessSync(body.parentFolder, fs.constants.W_OK);\n root = fs.realpathSync(body.parentFolder);\n }\n if (body.git !== undefined) {\n if (body.git !== \"git\" && !path.isAbsolute(body.git))\n throw new Error(\"Git 路径必须是绝对路径\");\n await gitExecution.run({ executable: body.git }, () => runGit(os.homedir(), [\"--version\"]));\n gitPath = body.git;\n }\n store.state.root = root;\n store.state.git = gitPath;\n if (body.tools) store.state.tools = { ...store.state.tools, ...body.tools };\n store.save();\n return {\n parentFolder: store.state.root,\n git: store.state.git,\n tools: store.state.tools,\n };\n });\n app.post(\"/v1/directories/select\", async (request, reply) => {\n const initial =\n (request.body as { initialPath?: string })?.initialPath || store.state.root || os.homedir();\n if (!path.isAbsolute(initial) || !fs.existsSync(initial))\n throw new Error(\"目录不存在或不是绝对路径\");\n const result = await (options.pickDirectory || openDirectoryPicker)(initial);\n return result ? { path: result } : reply.code(204).send();\n });\n app.post(\"/v1/directories/default\", async () => {\n const preferred = path.join(os.homedir(), \"Documents\", \"code-workspace\");\n fs.mkdirSync(preferred, { recursive: true });\n return { path: fs.realpathSync(preferred) };\n });\n // platform travels with the result: the page decides whether these paths belong to this browser.\n app.post(\"/v1/tools/detect\", async () => ({\n tools: detectToolCommands(),\n platform: process.platform,\n }));\n app.get(\"/v1/workspaces\", async (request) => {\n const grant = requestGrant(request);\n return Object.values(store.state.mounts)\n .filter((mount) => mount.workbenchId === grant.workbenchId && mount.userId === grant.userId)\n .map((mount) => ({ ...mount, exists: fs.existsSync(mount.directory) }));\n });\n app.post(\"/v1/repositories\", async (request) => {\n const grant = requestGrant(request),\n body = request.body as { repositoryId: string; path: string };\n if (!body.repositoryId || !path.isAbsolute(body.path))\n throw new Error(\"请填写仓库身份与本机绝对目录\");\n const root = fs.realpathSync(body.path);\n if (fs.realpathSync(await git(() => runGit(root, [\"rev-parse\", \"--show-toplevel\"]))) !== root)\n throw new Error(\"请选择 Git 仓库根目录\");\n store.state.repositories[scopeKey(grant.workbenchId, grant.userId, body.repositoryId)] = root;\n store.save();\n return { path: root };\n });\n app.post(\"/v1/tools/launch\", async (request, reply) => {\n const grant = requestGrant(request),\n body = request.body as { workspaceId: string; ide: Ide; mountIndex?: number; agent?: string };\n if (body.agent && body.agent !== \"none\")\n return reply\n .code(400)\n .send({ code: \"AGENT_COMPANION_REMOVED\", error: \"请选择独立的 Agent 工具\" });\n if (\n ![\n \"vscode\",\n \"cursor\",\n \"cursor-agent\",\n \"idea\",\n \"codex\",\n \"claude\",\n \"opencode\",\n \"codex-cli\",\n \"cursor-cli\",\n \"opencode-cli\",\n \"claudecode-cli\",\n ].includes(body.ide)\n )\n throw new Error(\"工具类型无效\");\n const mount = store.state.mounts[scopeKey(grant.workbenchId, grant.userId, body.workspaceId)];\n if (!mount) throw new Error(\"请先在当前电脑创建本地副本\");\n // A mount may be a plain directory: the .code-workspace document is optional.\n const workspaceDocument = fs.existsSync(mount.workspaceFile);\n let target = checkedPath(\n mount.directory,\n workspaceDocument ? mount.workspaceFile : mount.directory,\n );\n let targetKind: \"workspace\" | \"directory\" = workspaceDocument ? \"workspace\" : \"directory\";\n if (body.mountIndex !== undefined) {\n if (!Number.isInteger(body.mountIndex) || body.mountIndex < 0)\n throw new Error(\"仓库索引无效\");\n const folder = localWorkspace(store, grant, body.workspaceId).folders[body.mountIndex];\n if (!folder?.exists) throw new Error(\"挂载仓库不存在\");\n target = folder.path;\n targetKind = \"directory\";\n }\n const key =\n (\n {\n \"codex-cli\": \"codex\",\n \"cursor-cli\": \"cursorCli\",\n \"claudecode-cli\": \"claude\",\n \"opencode-cli\": \"opencode\",\n \"cursor-agent\": \"cursor\",\n } as Record<string, string>\n )[body.ide] || body.ide;\n await launchIde(target, body.ide, store.state.tools[key] || \"\", targetKind);\n return reply.code(202).send({ opened: true, ide: body.ide });\n });\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\n\nexport function inside(root: string, target: string) {\n const relative = path.relative(root, target);\n return !path.isAbsolute(relative) && relative !== \"..\" && !relative.startsWith(\"..\" + path.sep);\n}\n\nexport function checkedPath(root: string, target: string, mustExist = true): string {\n if (!path.isAbsolute(root) || !path.isAbsolute(target)) throw new Error(\"必须使用本机绝对路径\");\n const base = fs.realpathSync(root);\n const lexical = path.resolve(target);\n const resolved = inside(path.resolve(root), lexical)\n ? path.resolve(base, path.relative(path.resolve(root), lexical))\n : lexical;\n if (!inside(base, resolved)) throw new Error(\"目录超出授权范围\");\n let ancestor = resolved;\n while (!fs.existsSync(ancestor)) {\n if (mustExist) throw new Error(\"本地目录不存在\");\n const parent = path.dirname(ancestor);\n if (parent === ancestor) throw new Error(\"目录无效\");\n ancestor = parent;\n }\n if (!inside(base, fs.realpathSync(ancestor))) throw new Error(\"符号链接超出授权范围\");\n return resolved;\n}\n","import {\n ASSISTANT_VERSION,\n type DeviceIdentity,\n type LocalJob,\n type WorkspaceMount,\n} from \"@code-workspace/contracts\";\nimport { createHash, randomBytes, randomUUID } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { createIdentityKeys } from \"../../../packages/runtime/src/assistant/tokens.ts\";\n\nimport type { MountReceipt } from \"./mount-receipts.ts\";\nimport { queueMountReceipt } from \"./mount-receipts.ts\";\n\nexport interface Binding {\n id: string;\n workbenchId: string;\n origin: string;\n userId: string;\n browserId: string;\n secretHash: string;\n}\nexport interface AssistantState {\n identity: DeviceIdentity & { privateKey: string };\n root: string;\n git: string;\n tools: Record<string, string>;\n workbenches: Record<string, { id: string; publicKey: string }>;\n bindings: Binding[];\n repositories: Record<string, string>;\n mounts: Record<string, WorkspaceMount>;\n jobs: Record<string, LocalJob>;\n mountSequence: number;\n mountReceipts: Record<string, MountReceipt>;\n activities: Record<string, LocalActivity>;\n removals: Record<string, WorkspaceMount>;\n pairing?: { hash: string; expiresAt: number; failures: number };\n autostart: boolean;\n /** npm global prefix recorded at install time; the daemon itself has no npm env. */\n installPrefix?: string;\n controlKey: string;\n}\nexport interface LocalActivity {\n id: string;\n userId: string;\n workbenchId: string;\n state: LocalJob[\"state\"];\n input: Record<string, unknown>;\n logs: string[];\n result?: Record<string, unknown>;\n error?: string;\n}\n\nexport const digest = (value: string) => createHash(\"sha256\").update(value).digest(\"hex\");\nexport const scopeKey = (workbenchId: string, userId: string, id: string) =>\n `${workbenchId}:${userId}:${id}`;\nexport function defaultStateDirectory() {\n return process.env.CWM_ASSISTANT_HOME || path.join(os.homedir(), \".cwm-assistant\");\n}\nexport class StateStore {\n readonly file: string;\n readonly state: AssistantState;\n constructor(\n readonly directory = defaultStateDirectory(),\n recoverJobs = false,\n ) {\n this.file = path.join(directory, \"state.json\");\n fs.mkdirSync(directory, { recursive: true, mode: 0o700 });\n const existed = fs.existsSync(this.file);\n this.state = existed\n ? JSON.parse(fs.readFileSync(this.file, \"utf8\"))\n : {\n identity: {\n ...createIdentityKeys(),\n name: os.hostname(),\n platform: process.platform,\n version: ASSISTANT_VERSION,\n },\n root: \"\",\n git: \"git\",\n tools: {},\n workbenches: {},\n bindings: [],\n repositories: {},\n mounts: {},\n jobs: {},\n autostart: false,\n };\n const needsKey = !this.state.controlKey;\n this.state.activities ||= {};\n this.state.removals ||= {};\n this.state.mountReceipts ||= {};\n this.state.mountSequence ||= 0;\n this.state.controlKey ||= randomBytes(32).toString(\"base64url\");\n if (!existed) {\n try {\n fs.writeFileSync(this.file, JSON.stringify(this.state, null, 2) + \"\\n\", {\n flag: \"wx\",\n mode: 0o600,\n });\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"EEXIST\") throw error;\n this.reload();\n }\n } else if (needsKey) this.save();\n if (recoverJobs) this.recover();\n }\n recover() {\n this.state.identity.version = ASSISTANT_VERSION;\n for (const job of Object.values(this.state.jobs)) {\n if ([\"queued\", \"running\"].includes(job.state)) {\n job.state = \"interrupted\";\n job.pendingSync = true;\n job.error = \"助手已重启,请继续任务;将重新核验实际 Git 状态\";\n }\n }\n for (const job of Object.values(this.state.activities)) {\n if ([\"running\", \"queued\"].includes(job.state)) job.state = \"interrupted\";\n }\n for (const [key, mount] of Object.entries(this.state.removals)) {\n // Only reconcile a completed removal. Never resume destructive work on restart.\n if (!fs.existsSync(mount.directory)) {\n delete this.state.mounts[key];\n delete this.state.removals[key];\n queueMountReceipt(this, mount, \"removed\");\n }\n }\n this.save();\n }\n reload() {\n Object.assign(this.state, JSON.parse(fs.readFileSync(this.file, \"utf8\")));\n }\n save() {\n const temporary = this.file + \".\" + randomUUID() + \".tmp\";\n try {\n fs.writeFileSync(temporary, JSON.stringify(this.state, null, 2) + \"\\n\", {\n flag: \"wx\",\n mode: 0o600,\n });\n fs.renameSync(temporary, this.file);\n } finally {\n fs.rmSync(temporary, { force: true });\n }\n }\n pairingCode() {\n const code = randomBytes(5).toString(\"hex\").toUpperCase();\n this.state.pairing = { hash: digest(code), expiresAt: Date.now() + 300_000, failures: 0 };\n this.save();\n return code;\n }\n}\n","import { randomUUID } from \"node:crypto\";\nimport { signMessage } from \"../../../packages/runtime/src/assistant/tokens.ts\";\nimport type { StateStore } from \"./state.ts\";\n\nexport interface MountReceipt {\n id: string;\n workbenchId: string;\n userId: string;\n workspaceId: string;\n deviceId: string;\n revision: number;\n sequence: number;\n state: \"ready\" | \"removed\";\n}\n\n/** Persist with the local mount change, before attempting a network request. */\nexport function queueMountReceipt(\n store: StateStore,\n mount: Pick<MountReceipt, \"workbenchId\" | \"userId\" | \"workspaceId\" | \"revision\">,\n state: MountReceipt[\"state\"],\n) {\n const receipt: MountReceipt = {\n ...mount,\n id: randomUUID(),\n deviceId: store.state.identity.id,\n sequence: ++store.state.mountSequence,\n state,\n };\n store.state.mountReceipts[receipt.id] = receipt;\n store.save();\n}\n\nexport async function syncMountReceipts(store: StateStore) {\n for (const receipt of Object.values(store.state.mountReceipts)) {\n const origin = Object.entries(store.state.workbenches).find(\n ([, workbench]) => workbench.id === receipt.workbenchId,\n )?.[0];\n if (!origin) continue;\n try {\n const response = await fetch(origin + \"/api/assistant/mount-receipts\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ receipt: signMessage(receipt, store.state.identity.privateKey) }),\n signal: AbortSignal.timeout(5000),\n });\n if (response.ok) {\n delete store.state.mountReceipts[receipt.id];\n store.save();\n }\n } catch {\n // Retry the durable receipt without repeating filesystem operations.\n }\n }\n}\n","import type { AssistantGrant, WorkspaceMount } from \"@code-workspace/contracts\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { checkedPath } from \"./paths.ts\";\nimport { StateStore, scopeKey } from \"./state.ts\";\n\nexport interface LocalWorkspaceFolder {\n name: string;\n path: string;\n exists: boolean;\n}\n\n/** Resolve one folder without requiring it to exist yet; containment checks still apply. */\nfunction resolveFolder(target: string, authorizedRoots: string[]): string {\n for (const root of authorizedRoots) {\n try {\n return checkedPath(root, target, false);\n } catch {\n /* Try another explicitly authorized repository. */\n }\n }\n throw new Error(\"挂载路径超出已授权目录\");\n}\n\nexport function localWorkspace(\n store: StateStore,\n grant: Pick<AssistantGrant, \"userId\" | \"workbenchId\">,\n id: string,\n): {\n mount: WorkspaceMount;\n file: string;\n document: {\n folders?: Array<{ path: string; name?: string }>;\n settings?: Record<string, unknown>;\n } | null;\n folders: LocalWorkspaceFolder[];\n} {\n const mount = store.state.mounts[scopeKey(grant.workbenchId, grant.userId, id)];\n if (!mount) throw Object.assign(new Error(\"请先在当前电脑创建本地副本\"), { statusCode: 404 });\n if (!fs.existsSync(mount.directory))\n throw Object.assign(new Error(\"本地目录不存在\"), { statusCode: 404 });\n const file = mount.workspaceFile;\n const document = (() => {\n if (!fs.existsSync(file)) return null;\n const parsed = JSON.parse(fs.readFileSync(file, \"utf8\"));\n if (!Array.isArray(parsed.folders)) throw new Error(\"Workspace 文件格式无效\");\n return parsed;\n })();\n const registered = Object.entries(store.state.repositories)\n .filter(([key]) => key.startsWith(scopeKey(grant.workbenchId, grant.userId, \"\")))\n .map(([, value]) => value);\n const authorizedRoots = [mount.directory, ...registered];\n const entries: Array<{ name: string; target: string }> = document\n ? document.folders!.map((folder: { path: string; name?: string }) => ({\n name: folder.name || \"\",\n target: path.resolve(mount.directory, folder.path),\n }))\n : (mount.aliases ?? []).map((alias) => ({\n name: alias,\n target: path.resolve(mount.directory, alias),\n }));\n const folders = entries.map((entry) => {\n const resolved = resolveFolder(entry.target, authorizedRoots);\n return { name: entry.name, path: resolved, exists: fs.existsSync(resolved) };\n });\n return { mount, file, document, folders };\n}\n","import type { FastifyInstance } from \"fastify\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { LocalJobs } from \"./jobs.ts\";\nimport { queueMountReceipt, syncMountReceipts } from \"./mount-receipts.ts\";\nimport { requestGrant } from \"./routes.ts\";\nimport { StateStore, scopeKey } from \"./state.ts\";\n\ninterface AdoptItem {\n workspaceId: string;\n slug: string;\n definitionRevision: number;\n aliases?: string[];\n}\ntype AdoptResult = {\n workspaceId: string;\n status: \"ready\" | \"adopted\" | \"not-found\" | \"pending\";\n directory?: string;\n foldersMissing?: number;\n};\n\n/** Candidate directories are limited to the managed names under the configured root. */\nfunction adoptDirectories(root: string): Map<string, string> {\n const found = new Map<string, string>();\n let entries;\n try {\n entries = fs.readdirSync(root, { withFileTypes: true });\n } catch {\n return found;\n }\n const realRoot = fs.realpathSync(root);\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n const prefix = entry.name.startsWith(\"cw-\")\n ? \"cw-\"\n : entry.name.startsWith(\"requirements-\")\n ? \"requirements-\"\n : \"\";\n const slug = prefix ? entry.name.slice(prefix.length) : \"\";\n if (!slug || found.has(slug)) continue;\n const directory = path.join(root, entry.name);\n try {\n if (fs.lstatSync(directory).isSymbolicLink()) continue;\n if (fs.realpathSync(path.dirname(fs.realpathSync(directory))) !== realRoot) continue;\n } catch {\n continue;\n }\n found.set(slug, directory);\n }\n return found;\n}\n\nexport function registerAdoptRoutes(app: FastifyInstance, store: StateStore, jobs: LocalJobs) {\n app.post(\"/v1/workspaces/adopt\", async (request) => {\n const grant = requestGrant(request);\n const items = ((request.body as { items?: AdoptItem[] })?.items ?? []).slice(0, 50);\n return jobs.exclusive(async () => {\n const root = store.state.root;\n const directories = adoptDirectories(root);\n const results: AdoptResult[] = [];\n let changed = false;\n for (const item of items) {\n if (\n !item?.workspaceId ||\n !item.slug ||\n !/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(item.slug) ||\n !Number.isSafeInteger(item.definitionRevision) ||\n item.definitionRevision < 1\n ) {\n results.push({ workspaceId: String(item?.workspaceId || \"\"), status: \"not-found\" });\n continue;\n }\n const key = scopeKey(grant.workbenchId, grant.userId, item.workspaceId);\n const existing = store.state.mounts[key];\n if (existing && fs.existsSync(existing.directory)) {\n results.push({\n workspaceId: item.workspaceId,\n status: \"ready\",\n directory: existing.directory,\n });\n continue;\n }\n if (\n Object.values(store.state.jobs).some(\n (job) =>\n job.input.workspaceId === item.workspaceId &&\n job.userId === grant.userId &&\n job.workbenchId === grant.workbenchId &&\n [\"queued\", \"running\"].includes(job.state),\n )\n ) {\n results.push({ workspaceId: item.workspaceId, status: \"pending\" });\n continue;\n }\n const directory = directories.get(item.slug);\n if (!directory) {\n results.push({ workspaceId: item.workspaceId, status: \"not-found\" });\n continue;\n }\n const aliases = (item.aliases ?? []).filter((alias) => typeof alias === \"string\");\n const mount = {\n workspaceId: item.workspaceId,\n workbenchId: grant.workbenchId,\n userId: grant.userId,\n revision: item.definitionRevision,\n managedRoot: root,\n workspaceFile: path.join(directory, path.basename(directory) + \".code-workspace\"),\n directory,\n aliases,\n verifiedAt: new Date().toISOString(),\n };\n store.state.mounts[key] = mount;\n queueMountReceipt(store, mount, \"ready\");\n changed = true;\n results.push({\n workspaceId: item.workspaceId,\n status: \"adopted\",\n directory,\n foldersMissing: aliases.filter((alias) => !fs.existsSync(path.join(directory, alias)))\n .length,\n });\n }\n if (changed) store.save();\n if (changed) await syncMountReceipts(store);\n return { results };\n });\n });\n}\n","import type { LocalJob, LocalOperationIntent } from \"@code-workspace/contracts\";\nimport { createWorkspace } from \"@code-workspace/runtime\";\nimport { randomUUID } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { signMessage } from \"../../../packages/runtime/src/assistant/tokens.ts\";\nimport { runGit } from \"../../../packages/runtime/src/git/commands.ts\";\nimport { gitExecution } from \"../../../packages/runtime/src/git/context.ts\";\nimport type { WorkspaceInput } from \"../../../packages/runtime/src/workspaces/create.ts\";\nimport { editLocalWorkspace } from \"../../../packages/runtime/src/workspaces/edit.ts\";\nimport { checkedPath } from \"./paths.ts\";\nimport { StateStore, scopeKey, type LocalActivity } from \"./state.ts\";\n\nimport { queueMountReceipt, syncMountReceipts } from \"./mount-receipts.ts\";\nimport { localWorkspace } from \"./workspace-files.ts\";\n\nexport class LocalJobs {\n private tail = Promise.resolve();\n private controllers = new Map<string, AbortController>();\n constructor(readonly store: StateStore) {}\n\n submit(intent: LocalOperationIntent) {\n const existing = this.store.state.jobs[intent.id];\n if (\n existing &&\n (existing.userId !== intent.userId ||\n existing.workbenchId !== intent.workbenchId ||\n JSON.stringify(existing.intent.definition) !== JSON.stringify(intent.definition))\n )\n throw new Error(\"同一任务不能更改定义\");\n if (existing && [\"queued\", \"running\", \"succeeded\"].includes(existing.state)) return existing;\n const job: LocalJob = {\n id: intent.id,\n workbenchId: intent.workbenchId,\n userId: intent.userId,\n state: \"queued\",\n intent,\n input: { slug: intent.definition.slug, workspaceId: intent.definition.id },\n logs: existing?.logs || [],\n logOffset: existing?.logOffset || 0,\n pendingSync: false,\n updatedAt: new Date().toISOString(),\n };\n this.store.state.jobs[job.id] = job;\n this.store.save();\n const controller = new AbortController();\n this.controllers.set(job.id, controller);\n this.tail = this.tail.then(() => this.execute(job, controller)).catch(() => {});\n return job;\n }\n\n cancel(id: string) {\n this.controllers.get(id)?.abort();\n }\n busy() {\n return this.controllers.size > 0;\n }\n async idle() {\n await this.tail;\n }\n async exclusive<T>(fn: () => Promise<T>): Promise<T> {\n const key = randomUUID();\n this.controllers.set(key, new AbortController());\n const result = this.tail.then(fn);\n this.tail = result.then(\n () => {},\n () => {},\n );\n try {\n return await result;\n } finally {\n this.controllers.delete(key);\n }\n }\n activity(\n job: LocalActivity,\n fn: (log: (line: string) => void) => Promise<Record<string, unknown>>,\n ) {\n const previous = this.store.state.activities[job.id];\n if (previous) {\n if (\n previous.userId !== job.userId ||\n previous.workbenchId !== job.workbenchId ||\n JSON.stringify(previous.input) !== JSON.stringify(job.input)\n )\n throw new Error(\"任务身份冲突\");\n return previous;\n }\n this.store.state.activities[job.id] = job;\n this.store.save();\n const controller = new AbortController();\n this.controllers.set(job.id, controller);\n const log = (line: string) => {\n job.logs.push(line.replace(/(https?:\\/\\/)[^/@\\s]+@/g, \"$1\"));\n this.store.save();\n };\n this.tail = this.tail\n .then(async () => {\n try {\n controller.signal.throwIfAborted();\n job.state = \"running\";\n this.store.save();\n job.result = await gitExecution.run(\n { executable: this.store.state.git, signal: controller.signal },\n () => fn(log),\n );\n job.state = \"succeeded\";\n } catch (error) {\n job.error = (error as Error).message;\n job.state = controller.signal.aborted ? \"cancelled\" : \"failed\";\n } finally {\n this.controllers.delete(job.id);\n this.store.save();\n }\n })\n .catch(() => {});\n return job;\n }\n\n private async execute(job: LocalJob, controller: AbortController) {\n const { state } = this.store;\n const log = (line: string) => {\n job.logs.push(line.replace(/(https?:\\/\\/)[^/@\\s]+@/g, \"$1\"));\n if (job.logs.length > 500) {\n job.logOffset = (job.logOffset || 0) + job.logs.length - 500;\n job.logs = job.logs.slice(-500);\n }\n job.updatedAt = new Date().toISOString();\n this.store.save();\n };\n try {\n controller.signal.throwIfAborted();\n job.state = \"running\";\n this.store.save();\n await gitExecution.run({ executable: state.git, signal: controller.signal }, async () => {\n const root = fs.realpathSync(state.root);\n const definition = job.intent.definition;\n const mountKey = scopeKey(job.workbenchId, job.userId, definition.id);\n const existingMount = state.mounts[mountKey];\n if (existingMount && definition.revision < existingMount.revision)\n throw new Error(\"任务定义已过期,请使用当前共享定义重新同步\");\n const namespace = path.join(root, \".cwm\", job.workbenchId, job.userId);\n checkedPath(root, namespace, false);\n fs.mkdirSync(namespace, { recursive: true });\n const prepared: WorkspaceInput[\"repositories\"] = [];\n for (const repo of definition.repositories) {\n controller.signal.throwIfAborted();\n let source = state.repositories[scopeKey(job.workbenchId, job.userId, repo.repositoryId)];\n if (!source) {\n if (!/^(https:\\/\\/|ssh:\\/\\/|[\\w.-]+@[\\w.-]+:)/.test(repo.remoteUrl))\n throw new Error(`${repo.alias} 缺少 HTTPS 或 SSH 远程地址,请先登记本机仓库`);\n source = path.join(namespace, repo.repositoryId);\n checkedPath(root, source, false);\n if (!fs.existsSync(source)) {\n const temporary = source + \".clone-\" + randomUUID();\n log(\"克隆仓库:\" + repo.alias);\n // Partial clones remain task-owned; never remove an existing user directory.\n try {\n await runGit(namespace, [\"clone\", \"--\", repo.remoteUrl, temporary], {\n onLog: log,\n timeoutMs: 600_000,\n });\n } catch (error) {\n // A failed clone still leaves a half-checked-out tree behind. It is ours to remove,\n // and leaving it would strand the retry with a stale directory and wasted space.\n fs.rmSync(temporary, { recursive: true, force: true });\n throw error;\n }\n fs.renameSync(temporary, source);\n }\n if ((await runGit(source, [\"config\", \"--get\", \"remote.origin.url\"])) !== repo.remoteUrl)\n throw new Error(\"仓库缓存与远程地址不一致\");\n state.repositories[scopeKey(job.workbenchId, job.userId, repo.repositoryId)] = source;\n this.store.save();\n }\n if (!fs.existsSync(source)) throw new Error(\"已登记的本机仓库不存在\");\n if (repo.remoteUrl) {\n const configured = (\n await runGit(source, [\"config\", \"--get\", \"remote.origin.url\"])\n ).replace(/(https?:\\/\\/)[^/@\\s]+@/g, \"$1\");\n if (configured !== repo.remoteUrl)\n throw new Error(repo.alias + \" 的本机仓库与共享远程地址不一致,请重新登记本机仓库\");\n }\n // Source registration is an explicit separate authorization, not a center-supplied path.\n let fromRef = repo.fromRef;\n if (fromRef) {\n const candidates = [fromRef];\n if (!fromRef.startsWith(\"origin/\") && !fromRef.startsWith(\"refs/\"))\n candidates.push(\"origin/\" + fromRef);\n let resolved = \"\";\n for (const candidate of candidates) {\n try {\n await runGit(source, [\n \"rev-parse\",\n \"--verify\",\n \"--end-of-options\",\n candidate + \"^{commit}\",\n ]);\n resolved = candidate;\n break;\n } catch {\n /* Try the remote-tracking form. */\n }\n }\n if (!resolved) throw new Error(repo.alias + \" 的 From Branch 不存在:\" + fromRef);\n fromRef = resolved;\n }\n prepared.push({\n alias: repo.alias,\n sourcePath: source,\n branch: repo.branch,\n fromBranch: fromRef,\n mode: repo.mode,\n subpath: repo.subpath,\n });\n }\n const destination = existingMount?.directory || path.join(root, \"cw-\" + definition.slug);\n checkedPath(\n existingMount ? path.dirname(existingMount.directory) : root,\n destination,\n false,\n );\n const key = scopeKey(job.workbenchId, job.userId, definition.id);\n const marker = path.join(destination, \".cwm-owner.json\");\n if (fs.existsSync(destination)) {\n if (\n (!existingMount && !fs.existsSync(marker)) ||\n (fs.existsSync(marker) && JSON.parse(fs.readFileSync(marker, \"utf8\")).key !== key)\n )\n throw new Error(\"目录已存在且不属于本任务,请先导入或更换名称\");\n } else {\n fs.mkdirSync(destination);\n fs.writeFileSync(marker, JSON.stringify({ key }), { flag: \"wx\", mode: 0o600 });\n }\n const result = existingMount\n ? await (async () => {\n localWorkspace(\n this.store,\n { workbenchId: job.workbenchId, userId: job.userId },\n definition.id,\n );\n checkedPath(existingMount.directory, existingMount.workspaceFile);\n await editLocalWorkspace({\n id: definition.id,\n parent: path.dirname(existingMount.directory),\n file: existingMount.workspaceFile,\n definition,\n sources: Object.fromEntries(\n definition.repositories.map((repo, index) => [\n repo.repositoryId,\n prepared[index].sourcePath,\n ]),\n ),\n log,\n });\n return { workspace: existingMount.workspaceFile, path: existingMount.directory };\n })()\n : await createWorkspace(\n {\n parent: root,\n slug: definition.slug,\n description: definition.description,\n repositories: prepared,\n },\n log,\n );\n for (const repo of prepared) {\n const document = JSON.parse(fs.readFileSync(result.workspace, \"utf8\"));\n const folder = document.folders.find(\n (folder: { name: string }) => folder.name === repo.alias,\n );\n const directory = existingMount\n ? localWorkspace(\n this.store,\n { workbenchId: job.workbenchId, userId: job.userId },\n definition.id,\n ).folders.find((item) => item.name === repo.alias)!.path\n : checkedPath(destination, path.resolve(destination, folder.path));\n const branch = await runGit(directory, [\"branch\", \"--show-current\"]);\n if (branch !== repo.branch) throw new Error(\"本机分支核验失败\");\n await runGit(directory, [\"rev-parse\", \"--verify\", \"HEAD\"]);\n }\n state.mounts[key] = {\n workspaceId: definition.id,\n userId: job.userId,\n workbenchId: job.workbenchId,\n revision: definition.revision,\n managedRoot: existingMount ? existingMount.managedRoot : root,\n workspaceFile: result.workspace,\n directory: result.path,\n aliases: definition.repositories.map((repo) => repo.alias),\n verifiedAt: new Date().toISOString(),\n };\n queueMountReceipt(this.store, state.mounts[key], \"ready\");\n job.result = { workspaceId: definition.id, deviceId: state.identity.id };\n job.state = \"succeeded\";\n log(\"本机 Workspace 已核验完成\");\n });\n } catch (error) {\n job.state = controller.signal.aborted ? \"cancelled\" : \"failed\";\n job.error = (error as Error).message;\n log(job.error);\n } finally {\n this.controllers.delete(job.id);\n job.pendingSync = true;\n this.store.save();\n await this.sync(job);\n await syncMountReceipts(this.store);\n }\n }\n\n async sync(job: LocalJob) {\n if (!job.pendingSync) return;\n const origin = Object.entries(this.store.state.workbenches).find(\n ([, item]) => item.id === job.workbenchId,\n )?.[0];\n if (!origin) return;\n try {\n const receipt = signMessage(\n {\n operationId: job.id,\n deviceId: this.store.state.identity.id,\n state: job.state,\n revision: job.intent.definition.revision,\n },\n this.store.state.identity.privateKey,\n );\n const response = await fetch(\n origin + \"/api/local-operations/\" + encodeURIComponent(job.id) + \"/receipts\",\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ receipt }),\n signal: AbortSignal.timeout(5000),\n },\n );\n if (response.ok) {\n job.pendingSync = false;\n this.store.save();\n }\n } catch {\n /* The durable receipt is retried without replaying Git. */\n }\n }\n}\n","import type { RepositoryMode, WorkspaceDefinition } from \"@code-workspace/contracts\";\nimport { randomUUID } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { runGit as git } from \"../git/commands.ts\";\nimport { createWorkspace } from \"./create.ts\";\ntype Selection = {\n repositoryId: string;\n branch: string;\n branchAction?: \"existing\" | \"create\";\n mode?: RepositoryMode;\n fromRef?: string;\n};\ntype Mount = {\n repository_id: string;\n mount_alias: string;\n folder_path: string;\n branch: string;\n mode: string;\n};\ntype Repository = {\n id: string;\n alias: string;\n canonical_path: string;\n subpath: string;\n remote_url: string | null;\n};\n\nasync function resolveFromRef(source: string, alias: string, value: string): Promise<string> {\n const ref = value.trim();\n const candidates = [ref];\n if (!ref.startsWith(\"origin/\") && !ref.startsWith(\"refs/\")) candidates.push(\"origin/\" + ref);\n for (const candidate of candidates) {\n try {\n await git(source, [\"rev-parse\", \"--verify\", \"--end-of-options\", candidate + \"^{commit}\"]);\n return candidate;\n } catch {\n /* Try the remote-tracking form of a bare branch name. */\n }\n }\n throw new Error(\n alias + \" 的 From Branch「\" + ref + \"」不存在,请填写有效的本地分支、origin/远端分支或提交\",\n );\n}\n\nexport async function editLocalWorkspace(options: {\n id: string;\n parent: string;\n file: string;\n definition: WorkspaceDefinition;\n sources: Record<string, string>;\n log: (line: string) => void;\n}) {\n const { id, parent, file, definition: body, sources, log } = options;\n const baseline = fs.readFileSync(file, \"utf8\");\n const document = JSON.parse(baseline) as {\n folders: Array<{ name?: string; path?: string }>;\n settings?: Record<string, unknown>;\n };\n const directory = path.dirname(file);\n if (!Array.isArray(document.folders)) throw new Error(\"Workspace 文件格式无效\");\n const saved = (document.settings?.[\"codeWorkspace.repos\"] || []) as Array<Record<string, string>>;\n const mounts: Mount[] = document.folders.map((folder) => ({\n repository_id:\n body.repositories.find((repo) => repo.alias === folder.name)?.repositoryId ||\n folder.name ||\n \"\",\n mount_alias: folder.name || \"\",\n folder_path: path.resolve(directory, folder.path || \"\"),\n branch: saved.find((repo) => repo.alias === folder.name)?.branch || \"\",\n mode: saved.find((repo) => repo.alias === folder.name)?.from_mode || \"worktree\",\n }));\n const selected: Array<Selection & { repo: Repository; mount?: Mount }> = body.repositories.map(\n (repo) => ({\n repositoryId: repo.repositoryId,\n branch: repo.branch,\n branchAction: repo.branchAction,\n mode: repo.mode,\n fromRef: repo.fromRef,\n repo: {\n id: repo.repositoryId,\n alias: repo.alias,\n canonical_path: sources[repo.repositoryId],\n subpath: repo.subpath,\n remote_url: repo.remoteUrl,\n },\n mount: mounts.find((mount) => mount.mount_alias === repo.alias),\n }),\n );\n const changingMode = (item: Selection & { mount?: Mount }) =>\n Boolean(item.mount && item.mode && item.mode !== item.mount.mode);\n let expectedFile = baseline;\n const ensureUnchanged = () => {\n if (fs.readFileSync(file, \"utf8\") !== expectedFile)\n throw new Error(\"Workspace 文件已被外部修改,已停止写入,请刷新后重试\");\n };\n const write = () => {\n ensureUnchanged();\n const text = JSON.stringify(document, null, 2) + \"\\n\";\n const temp = file + \".\" + randomUUID() + \".tmp\";\n try {\n fs.writeFileSync(temp, text, { flag: \"wx\", mode: fs.statSync(file).mode & 0o777 });\n fs.renameSync(temp, file);\n } finally {\n fs.rmSync(temp, { force: true });\n }\n expectedFile = text;\n };\n const generated = path.join(directory, \".cwm-edit-\" + randomUUID() + \".json\");\n try {\n ensureUnchanged();\n // Validate every selection before changing any branch or creating resources.\n for (const item of selected) {\n let source = item.mount?.folder_path || \"\";\n if (item.mount) {\n if (!source || !fs.existsSync(source))\n throw new Error(item.repo.alias + \" 的挂载目录不存在\");\n } else {\n source = item.repo.canonical_path;\n item.repo.canonical_path = source;\n }\n await git(source, [\"check-ref-format\", \"--branch\", item.branch]);\n if (item.branchAction) {\n if ((await git(source, [\"remote\"])).split(\"\\n\").includes(\"origin\")) {\n log(\"刷新远端分支:\" + item.repo.alias);\n await git(source, [\"fetch\", \"origin\"]);\n }\n let exists = false;\n for (const ref of [\"refs/heads/\" + item.branch, \"refs/remotes/origin/\" + item.branch]) {\n try {\n await git(source, [\"show-ref\", \"--verify\", ref]);\n exists = true;\n } catch {}\n }\n if (\n item.branchAction === \"create\" &&\n exists &&\n (!item.mount || (await git(source, [\"branch\", \"--show-current\"])) !== item.branch)\n )\n throw new Error(item.repo.alias + \" 的目标分支已存在,请选择使用已有分支\");\n if (item.branchAction === \"existing\" && !exists)\n throw new Error(item.repo.alias + \" 不存在目标分支,请选择创建新分支并指定 From Branch\");\n }\n if (item.fromRef) item.fromRef = await resolveFromRef(source, item.repo.alias, item.fromRef);\n if (item.mount) {\n const actual = await git(source, [\"branch\", \"--show-current\"]);\n if (\n (actual !== item.branch || changingMode(item)) &&\n (await git(source, [\"status\", \"--porcelain\"]))\n )\n throw new Error(item.repo.alias + \" 有未提交改动,请提交或暂存后再切换分支\");\n } else {\n if (fs.existsSync(path.join(directory, item.repo.alias)))\n throw new Error(\n item.repo.alias + \" 的目标目录已存在,不会覆盖。请先在 IDE 中重新挂载该目录\",\n );\n if (\n item.repo.subpath &&\n (path.isAbsolute(item.repo.subpath) ||\n path.win32.isAbsolute(item.repo.subpath) ||\n item.repo.subpath.split(/[\\\\/]/).includes(\"..\") ||\n item.repo.subpath.includes(\"\\0\"))\n )\n throw new Error(\"仓库 Subpath 无效\");\n }\n }\n const backup = path.join(\n parent,\n \".workbench\",\n \"backups\",\n \"workspace-\" + id + \"-\" + Date.now() + \".json\",\n );\n fs.mkdirSync(path.dirname(backup), { recursive: true });\n fs.writeFileSync(backup, baseline, { flag: \"wx\", mode: 0o600 });\n log(\"配置备份:\" + backup);\n const metadata = Array.isArray(document.settings?.[\"codeWorkspace.repos\"])\n ? (document.settings![\"codeWorkspace.repos\"] as Array<Record<string, unknown>>)\n : [];\n document.settings = { ...document.settings, \"codeWorkspace.repos\": metadata };\n for (const item of selected.filter((item) => item.mount && !changingMode(item))) {\n const mount = item.mount!;\n const actual = await git(mount.folder_path, [\"branch\", \"--show-current\"]);\n if (actual !== item.branch) {\n ensureUnchanged();\n if (await git(mount.folder_path, [\"status\", \"--porcelain\"]))\n throw new Error(item.repo.alias + \" 出现未提交改动,已停止切换\");\n log(\"切换分支:\" + mount.mount_alias + \" → \" + item.branch);\n if (item.branchAction === \"create\") {\n await git(mount.folder_path, [\"checkout\", \"-b\", item.branch, item.fromRef!]);\n } else {\n try {\n await git(mount.folder_path, [\"show-ref\", \"--verify\", \"refs/heads/\" + item.branch]);\n } catch {\n await git(mount.folder_path, [\"fetch\", \"origin\"]);\n await git(mount.folder_path, [\n \"show-ref\",\n \"--verify\",\n \"refs/remotes/origin/\" + item.branch,\n ]);\n }\n await git(mount.folder_path, [\"checkout\", item.branch]);\n }\n }\n const entry = metadata.find((m) => m.alias === mount.mount_alias);\n if (entry) {\n entry.branch = item.branch;\n if (item.branchAction === \"create\") entry.from_branch = item.fromRef;\n } else\n metadata.push({\n alias: mount.mount_alias,\n branch: item.branch,\n from_mode: mount.mode,\n });\n write();\n }\n const additions = selected.filter((item) => !item.mount);\n let added:\n | { folders: Array<{ name: string; path: string }>; settings: Record<string, unknown> }\n | undefined;\n if (additions.length) {\n await createWorkspace(\n {\n parent,\n slug: \"edit-\" + id,\n workspaceDirectory: directory,\n outputWorkspace: generated,\n repositories: additions.map((item) => ({\n alias: item.repo.alias,\n sourcePath: item.repo.canonical_path,\n branch: item.branch,\n fromBranch: item.fromRef,\n mode: item.mode || \"checkout\",\n subpath: item.repo.subpath,\n })),\n },\n log,\n );\n added = JSON.parse(fs.readFileSync(generated, \"utf8\"));\n }\n const conversions = selected.filter(changingMode);\n const convertedFolders: Array<{ name: string; path: string }> = [];\n const convertedMetadata: Array<Record<string, unknown>> = [];\n for (const item of conversions) {\n ensureUnchanged();\n const mount = item.mount!;\n if (await git(mount.folder_path, [\"status\", \"--porcelain\"]))\n throw new Error(item.repo.alias + \" 有未提交改动,已停止转换挂载方式\");\n const oldRoot = fs.realpathSync(\n await git(mount.folder_path, [\"rev-parse\", \"--show-toplevel\"]),\n );\n const subpath = path.relative(oldRoot, fs.realpathSync(mount.folder_path));\n if (subpath.split(path.sep).includes(\"..\") || path.isAbsolute(subpath))\n throw new Error(\"挂载子目录不适合自动转换\");\n const conversionDirectory = path.join(directory, \".workbench-mounts\", randomUUID());\n log(\"转换挂载方式:\" + mount.mount_alias + \" → \" + item.mode + \";原目录保留:\" + oldRoot);\n await createWorkspace(\n {\n parent,\n slug: \"convert-\" + id,\n workspaceDirectory: conversionDirectory,\n outputWorkspace: generated,\n repositories: [\n {\n alias: mount.mount_alias,\n sourcePath: oldRoot,\n branch: item.branch,\n fromBranch: item.fromRef,\n mode: item.mode!,\n subpath,\n },\n ],\n },\n log,\n );\n const converted = JSON.parse(fs.readFileSync(generated, \"utf8\")) as {\n folders: Array<{ name: string; path: string }>;\n settings: Record<string, unknown>;\n };\n convertedFolders.push(\n ...converted.folders.map((folder) => ({\n ...folder,\n path: path.relative(directory, path.resolve(conversionDirectory, folder.path)),\n })),\n );\n convertedMetadata.push(\n ...(converted.settings[\"codeWorkspace.repos\"] as Array<Record<string, unknown>>),\n );\n }\n const removed = mounts.filter(\n (mount) => !selected.some((item) => item.repositoryId === mount.repository_id),\n );\n const replaced = [...removed, ...conversions.map((item) => item.mount!)];\n document.folders = document.folders.filter(\n (folder) =>\n !replaced.some(\n (mount) =>\n (folder.path &&\n path.resolve(directory, folder.path) === path.resolve(mount.folder_path)) ||\n folder.name === mount.mount_alias,\n ),\n );\n document.folders.push(...(added?.folders || []), ...convertedFolders);\n document.settings[\"codeWorkspace.repos\"] = [\n ...metadata.filter((entry) => !replaced.some((mount) => mount.mount_alias === entry.alias)),\n ...((added?.settings[\"codeWorkspace.repos\"] as Array<Record<string, unknown>>) || []),\n ...convertedMetadata,\n ];\n if (body.slug !== undefined) document.settings[\"codeWorkspace.name\"] = body.slug.trim();\n if (body.description !== undefined)\n document.settings[\"codeWorkspace.description\"] = body.description;\n document.folders.sort(\n (a, b) =>\n selected.findIndex((item) => item.repo.alias === a.name) -\n selected.findIndex((item) => item.repo.alias === b.name),\n );\n write();\n for (const mount of removed)\n log(\"已移除挂载 \" + mount.mount_alias + \";本地目录保留:\" + mount.folder_path);\n log(\"Workspace 已更新,需求与版本将使用新的仓库关联\");\n return { workspaceId: id };\n } catch (error) {\n log(\"操作未全部完成,已产生的本地资源和已切换的分支会保留;请根据日志处理后重试\");\n throw error;\n } finally {\n fs.rmSync(generated, { force: true });\n }\n}\n","import { ASSISTANT_PROTOCOL } from \"@code-workspace/contracts\";\n\nexport interface WorkbenchIdentity {\n id: string;\n publicKey: string;\n}\n\n/** A bare http(s) origin, which is the only shape `Origin` may take for a trusted workbench. */\nexport function trustedOrigin(value: string): string | null {\n if (!value) return null;\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n return null;\n }\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") return null;\n if (url.username || url.password || url.pathname !== \"/\" || url.search || url.hash) return null;\n return url.origin;\n}\n\n/**\n * Read a workbench's identity before trusting its origin.\n *\n * An origin header alone proves nothing — any page can send one. Fetching the workbench's own key\n * means a stored origin can only verify grants signed by a center that actually answered at that\n * address, which is the real gate: a page that is not a CWM center cannot produce one.\n */\nexport async function fetchWorkbenchIdentity(origin: string): Promise<WorkbenchIdentity> {\n const response = await fetch(origin + \"/api/assistant/identity\", {\n signal: AbortSignal.timeout(2000),\n redirect: \"error\",\n });\n if (!response.ok) throw new Error(\"工作台身份接口不可用\");\n const identity = (await response.json()) as {\n id?: string;\n publicKey?: string;\n protocol?: number;\n };\n if (!identity.id || !identity.publicKey?.includes(\"PUBLIC KEY\"))\n throw new Error(\"工作台身份无效\");\n if (identity.protocol !== undefined && identity.protocol !== ASSISTANT_PROTOCOL)\n throw new Error(\"工作台协议版本不兼容\");\n return { id: identity.id, publicKey: identity.publicKey };\n}\n","import type { FastifyInstance } from \"fastify\";\nimport os from \"node:os\";\nimport {\n agentSessionTarget,\n listAgentSessions,\n openAgentSession,\n} from \"../../../packages/runtime/src/agent-sessions/service.ts\";\nimport { runGit } from \"../../../packages/runtime/src/git/commands.ts\";\nimport { readWorkspaceCommits } from \"../../../packages/runtime/src/git/commits.ts\";\nimport { gitExecution } from \"../../../packages/runtime/src/git/context.ts\";\nimport { requestGrant } from \"./routes.ts\";\nimport { StateStore, scopeKey } from \"./state.ts\";\nimport { localWorkspace } from \"./workspace-files.ts\";\n\nexport function registerQueryRoutes(app: FastifyInstance, store: StateStore) {\n const git = <T>(fn: () => Promise<T>) => gitExecution.run({ executable: store.state.git }, fn);\n app.get(\"/v1/repositories\", async (request) => {\n const grant = requestGrant(request);\n const prefix = scopeKey(grant.workbenchId, grant.userId, \"\");\n return Object.entries(store.state.repositories)\n .filter(([key]) => key.startsWith(prefix))\n .map(([key, path]) => ({ id: key.slice(prefix.length), path }));\n });\n app.post(\"/v1/repositories/inspect\", async (request) => {\n const body = request.body as { path: string };\n // This is an explicit user directory selection, never a command or arbitrary Git argument.\n const path = body.path;\n if (!path || !(await import(\"node:path\")).default.isAbsolute(path))\n throw new Error(\"请选择绝对路径\");\n return git(async () => ({\n root: await runGit(path, [\"rev-parse\", \"--show-toplevel\"]),\n remoteUrl: (await runGit(path, [\"remote\", \"get-url\", \"origin\"]).catch(() => \"\")).replace(\n /(https?:\\/\\/)[^/@\\s]+@/gi,\n \"$1\",\n ),\n branches: (\n await runGit(path, [\n \"for-each-ref\",\n \"--format=%(refname:short)\",\n \"refs/heads\",\n \"refs/remotes/origin\",\n ])\n ).split(\"\\n\"),\n }));\n });\n app.get(\"/v1/workspaces/:id/local-detail\", async (request) => {\n const id = (request.params as { id: string }).id;\n const { mount, folders } = localWorkspace(store, requestGrant(request), id);\n return { ...mount, folders };\n });\n app.get(\"/v1/workspaces/:id/repositories/:index/commits\", async (request) => {\n const { id, index } = request.params as { id: string; index: string };\n const query = request.query as { offset?: string; refresh?: string; compareBranch?: string };\n if (!/^\\d+$/.test(index) || !/^\\d+$/.test(query.offset || \"0\")) throw new Error(\"分页参数无效\");\n const { folders } = localWorkspace(store, requestGrant(request), id);\n const folder = folders[Number(index)];\n if (!folder?.exists) throw Object.assign(new Error(\"挂载仓库不存在\"), { statusCode: 404 });\n return git(() =>\n readWorkspaceCommits(\n { folder_path: folder.path, commit_compare_branch: query.compareBranch },\n Number(query.offset || 0),\n query.refresh === \"true\",\n ),\n );\n });\n function sessions(request: Parameters<typeof requestGrant>[0]) {\n const { id } = request.params as { id: string };\n const local = localWorkspace(store, requestGrant(request), id);\n return listAgentSessions(os.homedir(), {\n containerDir: local.mount.directory,\n workspaceFile: local.file,\n mountPaths: local.folders.map((folder) => folder.path),\n });\n }\n app.get(\"/v1/workspaces/:id/agent-sessions\", async (request) => ({\n linked: true,\n sessions: sessions(request),\n }));\n app.post(\"/v1/workspaces/:id/agent-sessions/open\", async (request) => {\n const body = request.body as { tool: string; id: string };\n const session = sessions(request).find(\n (item) => item.id === body.id && item.tool === body.tool,\n );\n const target = session && agentSessionTarget(session);\n if (!target) throw new Error(\"会话不存在或不属于此 Workspace\");\n await openAgentSession(target);\n return { opened: true, tool: session.tool };\n });\n}\n","import path from \"node:path\";\nimport { openPlatformUri } from \"../platform/uri.ts\";\nimport { candidateDirectories, dedupeSessions, SESSION_LIMIT } from \"./matching.ts\";\nimport { listClaudeSessions } from \"./providers/claude.ts\";\nimport { listCodexSessions } from \"./providers/codex.ts\";\nimport { listCursorComposers, listCursorTranscripts } from \"./providers/cursor.ts\";\nimport { listOpenCodeSessions } from \"./providers/opencode.ts\";\nimport { type AgentSessionRecord, type SessionScope } from \"./types.ts\";\nexport const SESSION_ID = /^[A-Za-z0-9._:-]{1,128}$/;\n\nexport const CLAUDE_SESSION_ID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nexport function agentSessionTarget(session: AgentSessionRecord): string | undefined {\n if (!SESSION_ID.test(session.id)) return undefined;\n if (session.tool === \"cursor\")\n return \"cursor://anysphere.cursor-deeplink/agent?id=\" + encodeURIComponent(session.id);\n if (session.tool === \"claude\")\n return CLAUDE_SESSION_ID.test(session.id)\n ? \"claude://resume?session=\" + encodeURIComponent(session.id)\n : undefined;\n if (session.tool === \"codex\") return \"codex://threads/\" + encodeURIComponent(session.id);\n if (session.tool === \"opencode\" && path.isAbsolute(session.cwd))\n return \"opencode://open-project?directory=\" + encodeURIComponent(session.cwd);\n return undefined;\n}\n\nexport function openAgentSession(target: string): Promise<void> {\n if (!/^(cursor|claude|codex|opencode):\\/\\//.test(target))\n return Promise.reject(new Error(\"无法打开这个会话\"));\n return openPlatformUri(target);\n}\n\nexport function listAgentSessions(home: string, scope: SessionScope): AgentSessionRecord[] {\n const directories = candidateDirectories(scope);\n const sessions = [\n ...listCursorTranscripts(home, directories),\n ...listCursorComposers(home, scope),\n ...listClaudeSessions(home, directories),\n ...listCodexSessions(home, scope),\n ...listOpenCodeSessions(home, scope),\n ];\n return dedupeSessions(sessions)\n .sort((a, b) => b.updatedAt.localeCompare(a.updatedAt))\n .slice(0, SESSION_LIMIT);\n}\n\nexport type { AgentSessionRecord, AgentSessionStatus, AgentTool } from \"./types.ts\";\n\nexport { agentStoragePaths } from \"./storage.ts\";\n","import path from \"node:path\";\nimport { type AgentSessionRecord, type SessionScope } from \"./types.ts\";\nexport const SESSION_LIMIT = 40;\n\nexport function dedupeSessions(sessions: AgentSessionRecord[]): AgentSessionRecord[] {\n const merged = new Map<string, AgentSessionRecord>();\n for (const session of sessions) {\n const key = session.tool + \":\" + session.id;\n const current = merged.get(key);\n merged.set(key, current ? preferSession(current, session) : session);\n }\n return [...merged.values()];\n}\n\nexport function preferSession(\n current: AgentSessionRecord,\n next: AgentSessionRecord,\n): AgentSessionRecord {\n const newer = current.updatedAt > next.updatedAt ? current : next;\n const currentRank = titleRank(current.title);\n const nextRank = titleRank(next.title);\n const titled =\n currentRank < nextRank ||\n (currentRank === nextRank && current.title.length <= next.title.length)\n ? current\n : next;\n // Cursor's composer record carries its native status; transcripts have no lifecycle fields.\n const status = next.status !== \"unknown\" ? next.status : current.status;\n return { ...newer, title: titled.title, status };\n}\n\nexport function titleRank(title: string): number {\n if (!title || title === \"未命名会话\") return 3;\n if (\n title.startsWith(\"[Image]\") ||\n title.startsWith('\"') ||\n title.startsWith(\"<\") ||\n title.length > 48\n )\n return 2;\n return 1;\n}\n\nexport function sessionMatches(cwd: string, scope: SessionScope): boolean {\n if (!cwd || !path.isAbsolute(cwd)) return false;\n const target = path.resolve(cwd);\n if (sameOrInside(scope.containerDir, target)) return true;\n if (scope.workspaceFile && path.resolve(scope.workspaceFile) === target) return true;\n return scope.mountPaths.some((mount) => Boolean(mount) && sameOrInside(mount, target));\n}\n\nexport function candidateDirectories(scope: SessionScope): string[] {\n const values = [scope.containerDir, ...scope.mountPaths].filter(\n (value) => value && path.isAbsolute(value),\n );\n return [...new Set(values.map((value) => path.resolve(value)))];\n}\n\nexport function sameOrInside(root: string, target: string): boolean {\n if (!root || !path.isAbsolute(root)) return false;\n const relative = path.relative(path.resolve(root), path.resolve(target));\n return relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative));\n}\n\nexport function cursorSlug(directory: string): string {\n return path.resolve(directory).split(path.sep).filter(Boolean).join(\"-\").replace(/:/g, \"-\");\n}\n\nexport function claudeSlug(directory: string): string {\n return path.resolve(directory).split(path.sep).join(\"-\").replace(/:/g, \"-\");\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { claudeSlug } from \"../matching.ts\";\nimport { transcriptStatus } from \"../status.ts\";\nimport { agentStoragePaths, clipTitle, firstText, readPrefix } from \"../storage.ts\";\nimport { type AgentSessionRecord } from \"../types.ts\";\nexport function listClaudeSessions(home: string, directories: string[]): AgentSessionRecord[] {\n const sessions: AgentSessionRecord[] = [];\n for (const directory of directories) {\n const roots = [\n ...new Set([claudeSlug(directory), path.resolve(directory).replace(/[^A-Za-z0-9]/g, \"-\")]),\n ].map((slug) => path.join(agentStoragePaths(home).claudeProjects, slug));\n for (const root of roots) {\n if (!fs.existsSync(root)) continue;\n for (const name of fs.readdirSync(root)) {\n if (!name.endsWith(\".jsonl\")) continue;\n const file = path.join(root, name);\n const record = claudeRecord(file, directory, name);\n if (record) sessions.push(record);\n }\n }\n }\n return sessions;\n}\n\nexport function claudeRecord(\n file: string,\n directory: string,\n name: string,\n): AgentSessionRecord | undefined {\n const stat = fs.statSync(file);\n let cwd = directory;\n let title = \"\";\n let id = name.replace(/\\.jsonl$/, \"\");\n for (const line of readPrefix(file).split(\"\\n\")) {\n if (!line.trim()) continue;\n let parsed: Record<string, unknown>;\n try {\n parsed = JSON.parse(line) as Record<string, unknown>;\n } catch {\n continue;\n }\n if (typeof parsed.cwd === \"string\") cwd = parsed.cwd;\n if (typeof parsed.sessionId === \"string\") id = parsed.sessionId;\n if (!title && (parsed.type === \"user\" || parsed.role === \"user\"))\n title = firstText(parsed.message ?? parsed);\n if (title && parsed.cwd) break;\n }\n return {\n id,\n tool: \"claude\",\n title: clipTitle(title),\n cwd,\n updatedAt: new Date(stat.mtimeMs).toISOString(),\n status: transcriptStatus(file, \"claude\", stat.mtimeMs),\n };\n}\n","import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nexport const PREFIX_BYTES = 65536;\n\nexport const TAIL_BYTES = 262144;\n\nexport function clipTitle(value: string): string {\n const text = value\n .replace(/<timestamp>[\\s\\S]*?<\\/timestamp>/gi, \" \")\n .replace(/<\\/?user_query>/gi, \" \")\n .replace(/\\s+/g, \" \")\n .trim();\n if (!text) return \"未命名会话\";\n return text.length > 80 ? text.slice(0, 79) + \"…\" : text;\n}\n\nexport function readPrefix(file: string, maxBytes = PREFIX_BYTES): string {\n const fd = fs.openSync(file, \"r\");\n try {\n const buffer = Buffer.alloc(maxBytes);\n const size = fs.readSync(fd, buffer, 0, maxBytes, 0);\n const text = buffer.subarray(0, size).toString(\"utf8\");\n return size === maxBytes ? text.slice(0, text.lastIndexOf(\"\\n\")) : text;\n } finally {\n fs.closeSync(fd);\n }\n}\n\nexport function readTailRecords(file: string): Record<string, any>[] {\n const fd = fs.openSync(file, \"r\");\n try {\n const size = fs.fstatSync(fd).size;\n const start = Math.max(0, size - TAIL_BYTES);\n const buffer = Buffer.alloc(size - start);\n const read = fs.readSync(fd, buffer, 0, buffer.length, start);\n const text = buffer.subarray(0, read).toString(\"utf8\");\n const lines = text.split(\"\\n\");\n if (start > 0) lines.shift();\n const records: Record<string, any>[] = [];\n for (const line of lines) {\n if (!line.trim()) continue;\n try {\n const record = JSON.parse(line);\n if (record && typeof record === \"object\" && !Array.isArray(record)) records.push(record);\n } catch {\n // A partially written or corrupt record must not resurrect an earlier completed turn.\n records.length = 0;\n }\n }\n return records;\n } finally {\n fs.closeSync(fd);\n }\n}\n\nexport function firstText(value: unknown, depth = 0): string {\n if (depth > 6 || value == null) return \"\";\n if (typeof value === \"string\") return value;\n if (Array.isArray(value)) {\n for (const item of value) {\n const found = firstText(item, depth + 1);\n if (found.trim()) return found;\n }\n return \"\";\n }\n if (typeof value !== \"object\") return \"\";\n const record = value as Record<string, unknown>;\n if (typeof record.text === \"string\" && record.text.trim()) return record.text;\n return firstText(record.message, depth + 1) || firstText(record.content, depth + 1);\n}\n\nexport function isoTime(value: unknown, fallbackMs: number): string {\n if (typeof value === \"number\" && Number.isFinite(value)) return new Date(value).toISOString();\n if (typeof value === \"string\" && value) {\n const numeric = Number(value);\n if (Number.isFinite(numeric) && numeric > 1e11) return new Date(numeric).toISOString();\n const parsed = Date.parse(value);\n if (!Number.isNaN(parsed)) return new Date(parsed).toISOString();\n }\n return new Date(fallbackMs).toISOString();\n}\n\nexport function parseFirstRecord(file: string): unknown {\n const line = readPrefix(file)\n .split(\"\\n\")\n .find((item) => item.trim());\n if (!line) return undefined;\n try {\n return JSON.parse(line);\n } catch {\n return undefined;\n }\n}\n\nexport function walkFiles(\n directory: string,\n include: (name: string) => boolean,\n depth: number,\n): string[] {\n if (depth < 0 || !fs.existsSync(directory)) return [];\n const files: string[] = [];\n for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {\n const target = path.join(directory, entry.name);\n if (entry.isDirectory()) files.push(...walkFiles(target, include, depth - 1));\n else if (include(entry.name)) files.push(target);\n }\n return files;\n}\n\nexport function agentStoragePaths(\n home: string,\n platform: NodeJS.Platform = process.platform,\n env: NodeJS.ProcessEnv = home === os.homedir() ? process.env : {},\n) {\n const paths = platform === \"win32\" ? path.win32 : path.posix;\n const cursorUser =\n platform === \"darwin\"\n ? paths.join(home, \"Library\", \"Application Support\", \"Cursor\", \"User\")\n : platform === \"win32\"\n ? paths.join(env.APPDATA || paths.join(home, \"AppData\", \"Roaming\"), \"Cursor\", \"User\")\n : paths.join(env.XDG_CONFIG_HOME || paths.join(home, \".config\"), \"Cursor\", \"User\");\n return {\n cursorUser,\n claudeProjects: paths.join(env.CLAUDE_CONFIG_DIR || paths.join(home, \".claude\"), \"projects\"),\n codexSessions: paths.join(env.CODEX_HOME || paths.join(home, \".codex\"), \"sessions\"),\n openCodeDatabase: paths.join(\n env.XDG_DATA_HOME || paths.join(home, \".local\", \"share\"),\n \"opencode\",\n \"opencode.db\",\n ),\n };\n}\n","import { readTailRecords } from \"./storage.ts\";\nimport { type AgentSessionStatus } from \"./types.ts\";\nexport const ACTIVITY_WINDOW_MS = 5 * 60 * 1000;\n\nexport function activeStatus(updatedMs: number): AgentSessionStatus {\n const age = Date.now() - updatedMs;\n // Filesystem timestamps can have sub-millisecond precision beyond Date.now().\n return age >= -1000 && age <= ACTIVITY_WINDOW_MS ? \"processing\" : \"unknown\";\n}\n\nexport function transcriptStatus(\n file: string,\n tool: \"claude\" | \"codex\",\n updatedMs: number,\n): AgentSessionStatus {\n let status: AgentSessionStatus = \"unknown\";\n let activeTurn: string | undefined;\n for (const record of readTailRecords(file)) {\n if (record.isSidechain) continue;\n const timestamp = typeof record.timestamp === \"string\" ? Date.parse(record.timestamp) : NaN;\n const activityTime = Number.isFinite(timestamp) ? timestamp : updatedMs;\n if (tool === \"codex\") {\n if (record.type !== \"event_msg\") continue;\n const type = record.payload?.type;\n const turn = typeof record.payload?.turn_id === \"string\" ? record.payload.turn_id : undefined;\n if (type === \"task_started\") {\n activeTurn = turn;\n status = activeStatus(activityTime);\n continue;\n }\n if (type === \"user_message\") {\n // Legacy user events may not carry a turn ID. A new prompt supersedes\n // the interrupted/completed turn while its task_started event is pending.\n if (turn) activeTurn = turn;\n else if (status === \"interrupted\" || status === \"completed\") activeTurn = undefined;\n status = activeStatus(activityTime);\n continue;\n }\n // Late events from an older turn must not end the resumed turn.\n if (activeTurn && turn && activeTurn !== turn) continue;\n if (type === \"task_complete\") status = \"completed\";\n else if (type === \"turn_aborted\") status = \"interrupted\";\n else if (\n [\n \"agent_message\",\n \"agent_reasoning\",\n \"exec_command_begin\",\n \"exec_command_end\",\n \"mcp_tool_call_begin\",\n \"mcp_tool_call_end\",\n \"item_started\",\n \"item_completed\",\n ].includes(type) &&\n status !== \"completed\" &&\n status !== \"interrupted\"\n )\n status = activeStatus(activityTime);\n } else {\n if (record.type === \"user\") {\n const content = record.message?.content;\n const text =\n typeof content === \"string\"\n ? content\n : Array.isArray(content)\n ? content\n .filter((part) => part?.type === \"text\" && typeof part.text === \"string\")\n .map((part) => part.text)\n .join(\"\\n\")\n : \"\";\n if (text.startsWith(\"[Request interrupted by user\")) status = \"interrupted\";\n else status = activeStatus(activityTime);\n } else if (record.type === \"assistant\") {\n const stop = record.message?.stop_reason;\n if (record.isApiErrorMessage) status = \"failed\";\n else if (stop === \"end_turn\" || stop === \"stop_sequence\") status = \"completed\";\n else if (stop === \"max_tokens\" || stop === \"refusal\") status = \"failed\";\n else status = activeStatus(activityTime);\n } else if (record.type === \"result\") {\n status = record.is_error\n ? \"failed\"\n : record.subtype === \"success\"\n ? \"completed\"\n : \"unknown\";\n }\n }\n }\n return status;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { sessionMatches } from \"../matching.ts\";\nimport { transcriptStatus } from \"../status.ts\";\nimport {\n agentStoragePaths,\n clipTitle,\n firstText,\n PREFIX_BYTES,\n readPrefix,\n TAIL_BYTES,\n walkFiles,\n} from \"../storage.ts\";\nimport { type AgentSessionRecord, type SessionScope } from \"../types.ts\";\nexport function listCodexSessions(home: string, scope: SessionScope): AgentSessionRecord[] {\n const root = agentStoragePaths(home).codexSessions;\n if (!fs.existsSync(root)) return [];\n const sessions: AgentSessionRecord[] = [];\n for (const file of walkFiles(\n root,\n (name) => name.startsWith(\"rollout-\") && name.endsWith(\".jsonl\"),\n 4,\n )) {\n const record = codexRecord(file, scope);\n if (record) sessions.push(record);\n }\n return sessions;\n}\n\nexport function codexRecord(file: string, scope: SessionScope): AgentSessionRecord | undefined {\n const prefix = readPrefix(file);\n const first = prefix.split(\"\\n\").find((line) => line.trim());\n if (!first) return undefined;\n let meta: {\n payload?: {\n cwd?: string;\n session_id?: string;\n id?: string;\n timestamp?: string;\n git?: { branch?: string };\n };\n };\n try {\n meta = JSON.parse(first);\n } catch {\n return undefined;\n }\n const cwd = meta.payload?.cwd || \"\";\n if (!sessionMatches(cwd, scope)) return undefined;\n const stat = fs.statSync(file);\n let title = meta.payload?.git?.branch || \"\";\n // App Server logs may include large instruction records before the first prompt.\n const titlePrefix = stat.size > PREFIX_BYTES ? readPrefix(file, TAIL_BYTES) : prefix;\n for (const line of titlePrefix.split(\"\\n\").slice(1)) {\n if (!line.trim()) continue;\n try {\n const record = JSON.parse(line);\n const payload = record.payload;\n let text = \"\";\n if (record.type === \"event_msg\" && payload?.type === \"user_message\")\n text = firstText(payload.message);\n else if (\n record.type === \"response_item\" &&\n payload?.type === \"message\" &&\n payload.role === \"user\"\n ) {\n const content = Array.isArray(payload.content) ? payload.content : [];\n text =\n content\n .map((item: unknown) => firstText(item))\n .find(\n (value: string) =>\n value.trim() &&\n !/^(# AGENTS\\.md instructions|<environment_context>|<permissions instructions>|<skills_instructions>|<user_instructions>)/.test(\n value.trim(),\n ),\n ) || \"\";\n } else if (!payload) text = firstText(record); // Legacy log format.\n if (text.trim()) {\n title = text;\n break;\n }\n } catch {\n /* skip a partial record */\n }\n }\n return {\n id: meta.payload?.session_id || meta.payload?.id || path.basename(file),\n tool: \"codex\",\n title: clipTitle(title),\n cwd,\n updatedAt: new Date(stat.mtimeMs).toISOString(),\n status: transcriptStatus(file, \"codex\", stat.mtimeMs),\n };\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { cursorSlug, sessionMatches } from \"../matching.ts\";\nimport { SqliteReader } from \"../sqlite-reader.ts\";\nimport { activeStatus } from \"../status.ts\";\nimport { agentStoragePaths, clipTitle, firstText, isoTime, parseFirstRecord } from \"../storage.ts\";\nimport { type AgentSessionRecord, type AgentSessionStatus, type SessionScope } from \"../types.ts\";\nexport function listCursorTranscripts(home: string, directories: string[]): AgentSessionRecord[] {\n const sessions: AgentSessionRecord[] = [];\n for (const directory of directories) {\n const root = path.join(home, \".cursor\", \"projects\", cursorSlug(directory), \"agent-transcripts\");\n if (!fs.existsSync(root)) continue;\n for (const entry of fs.readdirSync(root, { withFileTypes: true })) {\n const file = entry.isDirectory()\n ? path.join(root, entry.name, entry.name + \".jsonl\")\n : path.join(root, entry.name);\n if (!file.endsWith(\".jsonl\") || !fs.existsSync(file)) continue;\n const stat = fs.statSync(file);\n const text = firstText(parseFirstRecord(file));\n sessions.push({\n id: entry.name.replace(/\\.jsonl$/, \"\"),\n tool: \"cursor\",\n title: clipTitle(text),\n cwd: directory,\n updatedAt: new Date(stat.mtimeMs).toISOString(),\n status: \"unknown\",\n });\n }\n }\n return sessions;\n}\n\nexport function listCursorComposers(home: string, scope: SessionScope): AgentSessionRecord[] {\n const root = agentStoragePaths(home).cursorUser;\n const storage = path.join(root, \"workspaceStorage\");\n const databaseFile = path.join(root, \"globalStorage\", \"state.vscdb\");\n const workspaceIds = cursorWorkspaceIds(storage, scope);\n if (!workspaceIds.length || !fs.existsSync(databaseFile)) return [];\n try {\n const database = new SqliteReader(databaseFile, { readonly: true, fileMustExist: true });\n try {\n const query = database.prepare(\n \"SELECT composerId, lastUpdatedAt, value FROM composerHeaders WHERE workspaceId = ? AND isSubagent = 0\",\n );\n return workspaceIds.flatMap((workspaceId) =>\n (\n query.all(workspaceId) as Array<{\n composerId: string;\n lastUpdatedAt: number | null;\n value: string;\n }>\n ).flatMap((row) => {\n const session = composerRecord(row, scope.containerDir);\n if (session) session.status = cursorStatus(database, row.composerId, row.value);\n return session ? [session] : [];\n }),\n );\n } finally {\n database.close();\n }\n } catch {\n return [];\n }\n}\n\nexport function cursorStatus(\n database: SqliteReader,\n id: string,\n header: string,\n): AgentSessionStatus {\n try {\n const metadata = JSON.parse(header);\n if (metadata.hasBlockingPendingActions === true) return \"waiting\";\n const row = database\n .prepare(\n `SELECT json_extract(value, '$.status') AS status,\n json_array_length(value, '$.generatingBubbleIds') AS generating,\n json_extract(value, '$.isContinuationInProgress') AS continuing,\n json_extract(value, '$.lastUpdatedAt') AS updated,\n json_extract(value, '$.fullConversationHeadersOnly') AS messages\n FROM cursorDiskKV WHERE key = ? AND json_valid(value)`,\n )\n .get(\"composerData:\" + id) as\n | {\n status: string | null;\n generating: number | null;\n continuing: number | null;\n updated: number | null;\n messages: string | null;\n }\n | undefined;\n if (!row) return \"unknown\";\n if ((row.generating ?? 0) > 0 || row.continuing === 1 || row.status === \"generating\")\n return \"processing\";\n // Cursor persists the message index while an Agent is running, but the root status\n // can still describe the previous completed/aborted turn. Compare their timestamps.\n const messages = row.messages ? JSON.parse(row.messages) : [];\n if (Array.isArray(messages)) {\n const latest = [...messages]\n .reverse()\n .find((message) => message?.type === 1 || message?.type === 2);\n const started =\n typeof latest?.startedAtMs === \"number\"\n ? latest.startedAtMs\n : Date.parse(latest?.createdAt ?? \"\");\n if (Number.isFinite(started) && typeof row.updated === \"number\" && started > row.updated) {\n // Tool completion ends one message, not the whole Agent turn. Cursor's final\n // reply instead carries a turn duration, including replies without completedAtMs.\n if (latest.type === 2 && typeof latest.grouping?.turnDurationMs === \"number\")\n return \"completed\";\n const writer = database\n .prepare(\n \"SELECT json_extract(value, '$.writtenAtMs') AS updated FROM cursorDiskKV WHERE key = ? AND json_valid(value)\",\n )\n .get(\"composerRootWriterDiagnostic:\" + id) as { updated: number | null } | undefined;\n return activeStatus(\n Math.max(started, typeof writer?.updated === \"number\" ? writer.updated : started),\n );\n }\n }\n if (row.status === \"completed\") return \"completed\";\n if (row.status === \"aborted\") return \"interrupted\";\n return \"unknown\";\n } catch {\n return \"unknown\";\n }\n}\n\nexport function cursorWorkspaceIds(storage: string, scope: SessionScope): string[] {\n if (!fs.existsSync(storage)) return [];\n const ids: string[] = [];\n for (const entry of fs.readdirSync(storage, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const descriptor = path.join(storage, entry.name, \"workspace.json\");\n if (!fs.existsSync(descriptor)) continue;\n try {\n const parsed = JSON.parse(fs.readFileSync(descriptor, \"utf8\")) as {\n folder?: string;\n workspace?: string;\n };\n const location = fileUriPath(parsed.workspace || \"\") || fileUriPath(parsed.folder || \"\");\n if (\n location &&\n (location === path.resolve(scope.workspaceFile) || sessionMatches(location, scope))\n )\n ids.push(entry.name);\n } catch {\n /* skip unreadable workspace identity */\n }\n }\n return ids;\n}\n\nexport function fileUriPath(value: string): string {\n if (!value.startsWith(\"file:\")) return \"\";\n try {\n return fileURLToPath(value);\n } catch {\n return \"\";\n }\n}\n\nexport function composerRecord(\n row: { composerId: string; lastUpdatedAt: number | null; value: string },\n cwd: string,\n): AgentSessionRecord | undefined {\n let title = \"\";\n let createdAt = 0;\n try {\n const parsed = JSON.parse(row.value) as {\n name?: string;\n subtitle?: string;\n createdAt?: number;\n };\n title = parsed.name || parsed.subtitle || \"\";\n createdAt = typeof parsed.createdAt === \"number\" ? parsed.createdAt : 0;\n } catch {\n title = \"\";\n }\n if (!row.lastUpdatedAt && !title.trim()) return undefined;\n return {\n id: row.composerId,\n tool: \"cursor\",\n title: clipTitle(title),\n cwd,\n updatedAt: isoTime(row.lastUpdatedAt || createdAt, 0),\n status: \"unknown\",\n };\n}\n","import fs from \"node:fs\";\nimport { DatabaseSync } from \"node:sqlite\";\n\n/** Read-only adapter: the assistant never migrates or writes another application's database. */\nexport class SqliteReader {\n private database: DatabaseSync;\n\n constructor(file: string, _options?: { readonly: boolean; fileMustExist: boolean }) {\n if (!fs.existsSync(file)) throw new Error(\"会话数据库不存在\");\n this.database = new DatabaseSync(file, { readOnly: true });\n }\n\n prepare(sql: string) {\n return this.database.prepare(sql);\n }\n\n close() {\n this.database.close();\n }\n}\n","import fs from \"node:fs\";\nimport { sessionMatches } from \"../matching.ts\";\nimport { SqliteReader } from \"../sqlite-reader.ts\";\nimport { activeStatus } from \"../status.ts\";\nimport { agentStoragePaths, clipTitle, isoTime } from \"../storage.ts\";\nimport { type AgentSessionRecord, type AgentSessionStatus, type SessionScope } from \"../types.ts\";\nexport function listOpenCodeSessions(home: string, scope: SessionScope): AgentSessionRecord[] {\n const databaseFile = agentStoragePaths(home).openCodeDatabase;\n if (!fs.existsSync(databaseFile)) return [];\n try {\n const database = new SqliteReader(databaseFile, { readonly: true, fileMustExist: true });\n try {\n const rows = database\n .prepare(\"SELECT id, directory, title, time_updated FROM session\")\n .all() as Array<{\n id: string;\n directory: string;\n title: string | null;\n time_updated: number | string | null;\n }>;\n return rows\n .filter((row) => sessionMatches(row.directory || \"\", scope))\n .map((row) => ({\n id: row.id,\n tool: \"opencode\" as const,\n title: clipTitle(row.title || \"\"),\n cwd: row.directory,\n updatedAt: isoTime(row.time_updated, Date.now()),\n status: openCodeStatus(database, row.id),\n }));\n } finally {\n database.close();\n }\n } catch {\n return [];\n }\n}\n\nexport function openCodeStatus(database: SqliteReader, id: string): AgentSessionStatus {\n try {\n const row = database\n .prepare(\n \"SELECT data, time_updated FROM message WHERE session_id = ? ORDER BY time_created DESC, id DESC LIMIT 1\",\n )\n .get(id) as { data: string; time_updated: number } | undefined;\n if (!row) return \"unknown\";\n const message = JSON.parse(row.data);\n if (message.role !== \"assistant\" && message.role !== \"user\") return \"unknown\";\n if (message.error)\n return message.error.name === \"MessageAbortedError\" ? \"interrupted\" : \"failed\";\n if (\n message.role === \"assistant\" &&\n message.time?.completed &&\n message.finish &&\n message.finish !== \"tool-calls\" &&\n message.finish !== \"unknown\"\n ) {\n return message.finish === \"length\" || message.finish === \"content-filter\"\n ? \"failed\"\n : \"completed\";\n }\n return activeStatus(row.time_updated);\n } catch {\n return \"unknown\";\n }\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { GitCommandError, runGit } from \"./commands.ts\";\ntype Mount = { folder_path: string; commit_compare_branch?: string };\nconst PAGE_SIZE = 20;\nconst SYNC_INTERVAL_MS = 30_000;\ntype ComparisonSnapshot = { commit: string; updatedAt: string } | { unavailable: string };\nconst comparisonSyncs = new Map<\n string,\n { checkedAt: number; pending: boolean; result: Promise<ComparisonSnapshot> }\n>();\n\nexport function normalizeCommitCompareBranch(value: unknown): string | undefined {\n if (value === undefined) return \"production\";\n if (typeof value !== \"string\") return undefined;\n const branch = value.trim().replace(/^origin\\//, \"\");\n if (!branch || branch.length > 200 || branch.startsWith(\"-\") || branch.includes(\"@{\"))\n return undefined;\n if (\n /[\\s~^:?*\\[\\\\\\x00-\\x1f]|\\.\\.|@\\{|\\/$/.test(branch) ||\n branch\n .split(\"/\")\n .some((part) => !part || part.startsWith(\".\") || part.endsWith(\".lock\") || part.endsWith(\".\"))\n )\n return undefined;\n return branch;\n}\n\nasync function git(cwd: string, args: string[]) {\n return runGit(cwd, args, { timeoutMs: 10_000 });\n}\n\nasync function latestComparison(\n cwd: string,\n branch: string,\n force: boolean,\n): Promise<ComparisonSnapshot> {\n if (!(await git(cwd, [\"remote\"])).split(\"\\n\").includes(\"origin\"))\n return { unavailable: \"仓库未配置 origin,无法读取最新 \" + branch };\n const remoteRef = \"refs/remotes/origin/\" + branch;\n // Linked worktrees share remote refs; coalesce their concurrent refreshes.\n const common = fs.realpathSync(\n path.resolve(cwd, await git(cwd, [\"rev-parse\", \"--git-common-dir\"])),\n );\n const key = common + \"\\0\" + (await git(cwd, [\"remote\", \"get-url\", \"origin\"])) + \"\\0\" + branch;\n const cached = comparisonSyncs.get(key);\n if (cached && (cached.pending || (!force && Date.now() - cached.checkedAt < SYNC_INTERVAL_MS)))\n return cached.result;\n const entry = {\n checkedAt: Date.now(),\n pending: true,\n result: Promise.resolve<ComparisonSnapshot>({ unavailable: \"正在同步 \" + branch }),\n };\n entry.result = (async (): Promise<ComparisonSnapshot> => {\n try {\n await runGit(\n cwd,\n [\n \"-c\",\n \"gc.auto=0\",\n \"fetch\",\n \"--no-tags\",\n \"--no-write-fetch-head\",\n \"origin\",\n \"+refs/heads/\" + branch + \":\" + remoteRef,\n ],\n { timeoutMs: 20_000 },\n );\n const commit = await git(cwd, [\"rev-parse\", \"--verify\", remoteRef + \"^{commit}\"]);\n return { commit, updatedAt: new Date().toISOString() };\n } catch {\n return { unavailable: \"无法同步远端 \" + branch + \",请检查网络、仓库权限和远端分支后重试\" };\n } finally {\n entry.pending = false;\n entry.checkedAt = Date.now();\n }\n })();\n comparisonSyncs.set(key, entry);\n return entry.result;\n}\n\nexport async function readWorkspaceCommits(mount: Mount, offset = 0, refresh = false) {\n const compareBranch = normalizeCommitCompareBranch(mount.commit_compare_branch);\n const empty = {\n commits: [],\n total: 0,\n hasMore: false,\n branch: \"\",\n baseRef: \"origin/\" + (compareBranch || \"production\"),\n };\n if (!compareBranch) return { ...empty, unavailable: \"仓库 Commit 对比分支配置无效\" };\n if (!mount.folder_path || !fs.existsSync(mount.folder_path))\n return { ...empty, unavailable: \"挂载路径不存在\" };\n try {\n const head = await git(mount.folder_path, [\"rev-parse\", \"--verify\", \"HEAD^{commit}\"]);\n const branch = (await git(mount.folder_path, [\"branch\", \"--show-current\"])) || \"分离 HEAD\";\n const base = await latestComparison(mount.folder_path, compareBranch, refresh);\n if (\"unavailable\" in base) return { ...empty, branch, unavailable: base.unavailable };\n try {\n await git(mount.folder_path, [\"merge-base\", base.commit, head]);\n } catch (error) {\n if (error instanceof GitCommandError && error.exitCode === 1)\n return {\n ...empty,\n branch,\n unavailable: \"当前分支与远端 \" + compareBranch + \" 没有共同历史\",\n };\n throw error;\n }\n const range = base.commit + \"..\" + head;\n const total = Number(await git(mount.folder_path, [\"rev-list\", \"--count\", range]));\n // NUL delimiters preserve Unicode and punctuation in subjects and author names.\n const raw = await git(mount.folder_path, [\n \"log\",\n \"--date-order\",\n \"--no-show-signature\",\n \"--format=%H%x00%h%x00%s%x00%an%x00%aI%x00\",\n \"--max-count=\" + PAGE_SIZE,\n \"--skip=\" + offset,\n range,\n \"--\",\n ]);\n const fields = raw.split(\"\\0\");\n const commits = [];\n for (let index = 0; index + 5 <= fields.length; index += 5) {\n const hash = fields[index].trim();\n if (!hash) continue;\n commits.push({\n hash,\n shortHash: fields[index + 1],\n subject: fields[index + 2],\n author: fields[index + 3],\n authoredAt: fields[index + 4],\n });\n }\n return {\n commits,\n total,\n hasMore: offset + commits.length < total,\n branch,\n baseRef: empty.baseRef,\n baseUpdatedAt: base.updatedAt,\n head,\n };\n } catch {\n return { ...empty, unavailable: \"无法读取 Git 提交记录,请检查仓库与本地引用\" };\n }\n}\n","import type { FastifyInstance } from \"fastify\";\nimport path from \"node:path\";\nimport {\n auditLocalVersion,\n type ReviewInput,\n} from \"../../../packages/runtime/src/reviews/audit.ts\";\nimport { LocalJobs } from \"./jobs.ts\";\nimport { requestGrant } from \"./routes.ts\";\nimport { StateStore, scopeKey } from \"./state.ts\";\n\nexport function registerReviewRoute(app: FastifyInstance, store: StateStore, jobs: LocalJobs) {\n app.post(\"/v1/reviews\", async (request) => {\n const grant = requestGrant(request);\n const body = request.body as {\n id: string;\n snapshot: ReviewInput;\n inputHash: string;\n production?: string;\n staging?: string;\n };\n if (!/^[a-zA-Z0-9-]{1,100}$/.test(body.id) || !body.snapshot?.mounts?.length)\n throw new Error(\"审查输入无效\");\n const snapshot = structuredClone(body.snapshot);\n for (const mount of snapshot.mounts)\n mount.canonical_path =\n store.state.repositories[scopeKey(grant.workbenchId, grant.userId, mount.repository_id)] ||\n \"\";\n jobs.activity(\n {\n id: body.id,\n workbenchId: grant.workbenchId,\n userId: grant.userId,\n state: \"queued\",\n input: {\n versionId: snapshot.version.id,\n slug: snapshot.version.name,\n snapshot: body.snapshot,\n inputHash: body.inputHash,\n },\n logs: [],\n },\n (log) =>\n auditLocalVersion(\n snapshot,\n path.join(store.directory, \"reviews\", body.id),\n body.id,\n body.inputHash,\n body,\n log,\n ),\n );\n return { jobId: \"local:\" + body.id };\n });\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { GitCommandError, runGit } from \"../git/commands.ts\";\nimport { branchScope, frozenRefs, scopeStatus } from \"./branch-scope.ts\";\nimport { readableReport } from \"./report-format.ts\";\nasync function git(cwd: string, args: string[]) {\n try {\n return await runGit(cwd, [\n \"-c\",\n \"core.hooksPath=\" + (process.platform === \"win32\" ? \"NUL\" : \"/dev/null\"),\n ...args,\n ]);\n } catch (error) {\n if (error instanceof GitCommandError)\n throw Object.assign(error, { code: error.exitCode, output: error.stdout });\n throw error;\n }\n}\nexport interface ReviewInput {\n version: { id: string; name: string; archived_at: string | null };\n requirements: Array<{ id: string; key: string }>;\n mounts: Array<{\n repository_id: string;\n requirement_id: string;\n alias: string;\n branch: string;\n canonical_path: string;\n remote_url: string | null;\n review_enabled: number;\n }>;\n}\nexport async function auditLocalVersion(\n initial: ReviewInput,\n root: string,\n runId: string,\n inputHash: string,\n body: { production?: string; staging?: string },\n log: (line: string) => void,\n) {\n const createdAt = new Date().toISOString();\n if (!initial.version || initial.version.archived_at) throw new Error(\"请选择未归档版本\");\n const includedMounts = initial.mounts.filter((mount) => mount.review_enabled !== 0);\n const excludedRepositories = [\n ...new Map(\n initial.mounts\n .filter((mount) => mount.review_enabled === 0)\n .map((mount) => [\n mount.repository_id,\n {\n repositoryId: mount.repository_id,\n alias: mount.alias,\n reason: \"配置项目(已关闭参与版本审查)\",\n },\n ]),\n ).values(),\n ];\n if (!includedMounts.length) throw new Error(\"所有关联仓库均已排除,无可审查的业务仓库\");\n const production = body.production || \"production\",\n staging = body.staging || \"staging\";\n const valid = (value: unknown) =>\n typeof value === \"string\" &&\n /^[A-Za-z0-9][A-Za-z0-9._/-]*$/.test(value) &&\n !value.includes(\"..\") &&\n !value.endsWith(\"/\");\n if (!valid(production) || !valid(staging) || production === staging)\n throw new Error(\"请填写不同的有效生产、UAT 分支名\");\n fs.mkdirSync(root, { recursive: true });\n const results: any[] = [],\n folders: Array<{ name: string; path: string }> = [];\n const groups = [...new Set(includedMounts.map((mount) => mount.repository_id))];\n log(\"审查仓库总数:\" + groups.length);\n excludedRepositories.forEach((repo) => log(\"已排除:\" + repo.alias + \"(\" + repo.reason + \")\"));\n for (const repositoryId of groups) {\n const entries = includedMounts.filter((entry) => entry.repository_id === repositoryId),\n repo = entries[0];\n const directory = path.join(root, repositoryId.replace(/[^a-zA-Z0-9_-]/g, \"_\"));\n const result: any = {\n repositoryId,\n alias: repo.alias,\n status: \"ERROR\",\n branches: [],\n extraCommits: [],\n manualChecks: [],\n refs: {},\n };\n results.push(result);\n try {\n log(\"获取远端仓库:\" + repo.alias);\n let remote = repo.remote_url?.trim() || \"\";\n let localOrigin = false;\n if (!remote) {\n if (!repo.canonical_path || !fs.existsSync(repo.canonical_path))\n throw new Error(\"请配置远程仓库地址或有效本地来源\");\n remote = await git(repo.canonical_path, [\"config\", \"--get\", \"remote.origin.url\"]);\n localOrigin = path.isAbsolute(remote) && fs.existsSync(remote);\n }\n if (\n (!localOrigin && !/^(https:\\/\\/|ssh:\\/\\/|[\\w.-]+@[\\w.-]+:)/.test(remote)) ||\n remote.includes(\"::\") ||\n /[\\s\\x00-\\x1f]/.test(remote) ||\n /https?:\\/\\/[^/]*@/.test(remote)\n )\n throw new Error(\"远端地址无效\");\n await git(root, [\"clone\", \"--no-checkout\", \"--no-local\", \"--\", remote, directory]);\n folders.push({ name: repo.alias, path: directory });\n result.remoteRefs = await frozenRefs(git, directory);\n log(\"仓库快照已获取:\" + repo.alias);\n const resolveBranch = async (branch: string) => {\n if (!valid(branch)) throw new Error(\"需求分支名无效或缺失\");\n const clean = branch\n .replace(/^refs\\/remotes\\/origin\\//, \"\")\n .replace(/^origin\\//, \"\")\n .replace(/^refs\\/heads\\//, \"\");\n const ref = result.remoteRefs.find(\n (item: { name: string; sha: string }) => item.name === clean,\n );\n if (!ref) throw new Error(repo.alias + \":远端分支不存在:\" + clean);\n return ref.sha as string;\n };\n const p = await resolveBranch(production),\n s = await resolveBranch(staging);\n result.refs = { production: p, staging: s };\n for (const branch of [...new Set(entries.map((entry) => entry.branch))])\n result.branches.push({\n name: branch,\n sha: await resolveBranch(branch),\n requirementIds: entries\n .filter((entry) => entry.branch === branch)\n .map((entry) => entry.requirement_id),\n });\n log(\"开始完整性检查:\" + repo.alias);\n let mergeConflict = false;\n try {\n await git(directory, [\"merge-tree\", \"--write-tree\", p, s]);\n } catch (error) {\n const failure = error as { code?: number; output?: string };\n if (failure.code !== 1) throw error;\n mergeConflict = true;\n result.conflicts = failure.output || \"存在合并冲突\";\n log(repo.alias + \":staging 合入 production 冲突\");\n }\n await git(directory, [\"checkout\", \"--detach\", s]);\n Object.assign(\n result,\n await branchScope(\n git,\n directory,\n p,\n s,\n result.remoteRefs,\n result.branches,\n production,\n staging,\n ),\n );\n result.status = scopeStatus(mergeConflict, result.branches, result.nonVersionEntries);\n log(repo.alias + \":\" + result.status);\n } catch (error) {\n result.error = error instanceof Error ? error.message : \"仓库检查失败\";\n log(repo.alias + \":检查失败\");\n }\n }\n const uncoveredRequirements = (initial.requirements as Array<{ id: string; key: string }>).filter(\n (requirement) => !initial.mounts.some((mount) => mount.requirement_id === requirement.id),\n );\n const stale = false;\n const result = stale\n ? \"STALE\"\n : results.some((repo) => [\"ERROR\", \"CONFLICT\"].includes(repo.status))\n ? \"BLOCKED\"\n : uncoveredRequirements.length || results.some((repo) => repo.status === \"WARN\")\n ? \"WARN\"\n : \"PASS\";\n const workspaceFile = path.join(\n root,\n \"version-\" + initial.version!.name.replace(/[^A-Za-z0-9._-]/g, \"-\") + \".code-workspace\",\n );\n fs.writeFileSync(\n workspaceFile,\n JSON.stringify(\n { folders, settings: { \"codeWorkspace.description\": \"隔离审查快照;请勿用于发布推送\" } },\n null,\n 2,\n ),\n );\n const snapshot = {\n type: \"release-integrity\",\n formatVersion: 4,\n version: initial.version,\n input: initial,\n inputHash: inputHash,\n production,\n staging,\n results,\n excludedRepositories,\n uncoveredRequirements,\n workspaceFile,\n stale,\n };\n const report = readableReport(snapshot, result, createdAt, runId);\n fs.writeFileSync(path.join(root, \"report.md\"), report, { mode: 0o600 });\n fs.writeFileSync(path.join(root, \"snapshot.json\"), JSON.stringify(snapshot, null, 2), {\n mode: 0o600,\n });\n\n return { runId, result, report, workspaceFile, snapshot, createdAt };\n}\n","type Git = (cwd: string, args: string[]) => Promise<string>;\ntype Ref = { name: string; sha: string };\ntype Branch = {\n name: string;\n sha: string;\n requirementIds: string[];\n expectedCommits?: string[];\n missingCommits?: string[];\n coveredCommits?: string[];\n status?: string;\n};\nexport type OutsideEntry = {\n kind: \"branch\" | \"commit\";\n name?: string;\n sha: string;\n reason: string;\n commits?: string[];\n};\nconst lines = (text: string) => (text ? text.split(\"\\n\") : []);\nexport const cleanBranch = (name: string) =>\n name\n .replace(/^refs\\/remotes\\/origin\\//, \"\")\n .replace(/^refs\\/heads\\//, \"\")\n .replace(/^origin\\//, \"\");\nexport async function frozenRefs(git: Git, cwd: string): Promise<Ref[]> {\n return lines(\n await git(cwd, [\n \"for-each-ref\",\n \"--format=%(refname)%09%(objectname)%09%(symref)\",\n \"refs/remotes/origin/\",\n ]),\n )\n .map((line) => line.split(\"\\t\"))\n .filter((parts) => !parts[2] && !parts[0].endsWith(\"/HEAD\"))\n .map(([name, sha]) => ({ name: cleanBranch(name), sha }));\n}\n\nexport function scopeStatus(\n conflict: boolean,\n branches: Branch[],\n nonVersionEntries: OutsideEntry[],\n) {\n if (conflict) return \"CONFLICT\";\n return branches.some((branch) => (branch.missingCommits || []).length) || nonVersionEntries.length\n ? \"WARN\"\n : \"PASS\";\n}\n\n// Only graph ancestry and tree identity participate in classification. No commit messages.\nexport async function branchScope(\n git: Git,\n cwd: string,\n productionSha: string,\n stagingSha: string,\n refs: Ref[],\n branches: Branch[],\n production: string,\n staging: string,\n) {\n const nodes = lines(\n await git(cwd, [\"rev-list\", \"--topo-order\", \"--parents\", productionSha + \"..\" + stagingSha]),\n ).map((line) => line.split(\" \"));\n const incoming = new Set(nodes.map(([sha]) => sha));\n const histories = new Map<string, Set<string>>();\n const history = async (sha: string) => {\n if (!histories.has(sha))\n histories.set(sha, new Set(lines(await git(cwd, [\"rev-list\", productionSha + \"..\" + sha]))));\n return histories.get(sha)!;\n };\n const accounted = new Set<string>();\n for (const branch of branches) {\n const expected = [...(await history(branch.sha))];\n branch.expectedCommits = expected;\n branch.coveredCommits = expected.filter((sha) => incoming.has(sha));\n branch.missingCommits = expected.filter((sha) => !incoming.has(sha));\n branch.status = !branch.missingCommits.length ? \"COVERED\" : \"MISSING\";\n branch.coveredCommits.forEach((sha) => accounted.add(sha));\n }\n const eligible = refs.filter(\n (ref) => ![cleanBranch(production), cleanBranch(staging)].includes(ref.name),\n );\n const plan = new Set(branches.map((branch) => cleanBranch(branch.name)));\n const nonVersionEntries: OutsideEntry[] = [];\n const recorded = new Set<string>();\n const candidates = new Set<string>();\n // Include staging tip merge side parents so a just-merged extra branch is attributed.\n for (const [, ...parents] of nodes)\n for (const parent of parents.slice(1)) if (incoming.has(parent)) candidates.add(parent);\n // Covers fast-forward histories where a branch tip itself is reachable without a merge node.\n for (const ref of eligible) if (incoming.has(ref.sha)) candidates.add(ref.sha);\n for (const tip of candidates) {\n const exact = eligible.filter((ref) => ref.sha === tip);\n let matches = exact;\n if (!matches.length) {\n // An advanced branch can still contain its historical merged tip. Ambiguous names are not guessed.\n const containing = new Set(\n lines(\n await git(cwd, [\n \"for-each-ref\",\n \"--contains=\" + tip,\n \"--format=%(refname)\",\n \"refs/remotes/origin/\",\n ]),\n ).map(cleanBranch),\n );\n matches = eligible.filter((ref) => containing.has(ref.name));\n }\n if (matches.length !== 1) continue;\n const ref = matches[0],\n introduced = [...(await history(tip))].filter((sha) => incoming.has(sha));\n introduced.forEach((sha) => accounted.add(sha));\n if (!plan.has(ref.name) && !recorded.has(ref.name)) {\n recorded.add(ref.name);\n nonVersionEntries.push({\n kind: \"branch\",\n name: ref.name,\n sha: tip,\n reason: \"本次引入,未在版本清单\",\n commits: introduced,\n });\n }\n }\n const fallback = new Map<string, OutsideEntry>();\n for (const [sha, ...parents] of nodes) {\n if (parents.length < 2) {\n if (accounted.has(sha)) continue;\n const changed = await git(cwd, [\n \"diff-tree\",\n \"--root\",\n \"--no-commit-id\",\n \"--name-only\",\n \"-r\",\n \"--no-ext-diff\",\n \"--no-textconv\",\n sha,\n ]);\n if (changed) fallback.set(sha, { kind: \"commit\", sha, reason: \"未识别来源分支\" });\n } else if (!accounted.has(sha)) {\n // Do not repeat the side branch's normal merged files as an additional commit.\n // Preserve unassigned merge-resolution changes, including historical conflict resolution.\n let independent = parents.length !== 2;\n if (parents.length === 2) {\n try {\n const automatic = (\n await git(cwd, [\"merge-tree\", \"--write-tree\", parents[0], parents[1]])\n ).split(\"\\n\")[0];\n const actual = await git(cwd, [\"rev-parse\", sha + \"^{tree}\"]);\n independent = automatic !== actual;\n } catch (error) {\n if ((error as { code?: number }).code !== 1) throw error;\n independent = true;\n }\n }\n if (\n independent &&\n (await git(cwd, [\"diff\", \"--name-only\", \"--no-ext-diff\", \"--no-textconv\", parents[0], sha]))\n )\n fallback.set(sha, { kind: \"commit\", sha, reason: \"未归属分支的合并变动\" });\n }\n }\n nonVersionEntries.push(...fallback.values());\n return {\n nonVersionEntries,\n extraCommits: [...fallback.keys()],\n incomingCommits: [...incoming],\n remoteLatestCommitId: productionSha,\n mergedStagingCommitId: stagingSha,\n };\n}\n","export function reviewLabel(status: string) {\n return status === \"PASS\" ? \"审查通过\" : \"审查不通过\";\n}\nexport function inclusionLabel(\n branch: { expectedCommits?: string[]; missingCommits?: string[] },\n incomplete: boolean,\n) {\n if (incomplete || !branch.expectedCommits) return \"未完成检查\";\n const missing = branch.missingCommits || [];\n if (!missing.length) return \"已包含\";\n const shorts = missing.map((sha) => sha.slice(0, 7));\n return shorts.length <= 3\n ? \"未包含(\" + shorts.join(\"、\") + \")\"\n : \"未包含(\" + shorts.length + \" 个提交)\";\n}\nexport function uncoveredRequirementLabel(item: { key?: string; title?: string }) {\n return [item.key, item.title].filter(Boolean).join(\" \");\n}\nexport function uncoveredRequirementLines(\n items: Array<{ key?: string; title?: string }> | undefined,\n) {\n if (!items?.length) return [];\n return [\"需求未配置仓库:\", ...items.map((item) => \"- \" + uncoveredRequirementLabel(item))];\n}\nexport function readableReport(snapshot: any, result: string, createdAt: string, _runId: string) {\n const safe = (value: unknown) =>\n String(value ?? \"\")\n .replace(/\\|/g, \"\\\\|\")\n .replace(/[\\r\\n]+/g, \" \");\n return [\n \"# \" + snapshot.version.name + \" 发布完整性报告\",\n \"结果:\" + reviewLabel(result),\n \"审查时间:\" + createdAt,\n ...uncoveredRequirementLines(snapshot.uncoveredRequirements),\n ...snapshot.results.flatMap((repo: any) => [\n \"\",\n \"## \" + repo.alias,\n ...(repo.error ? [repo.error] : []),\n ...(repo.status === \"CONFLICT\" ? [\"staging 合入 production 存在冲突\"] : []),\n \"| 版本内分支 | staging 是否包含 |\",\n \"| --- | --- |\",\n ...repo.branches.map(\n (b: any) => `| ${safe(b.name)} | ${inclusionLabel(b, repo.status === \"ERROR\")} |`,\n ),\n ...((repo.nonVersionEntries || []).length\n ? [\n \"\",\n \"| staging 多出的非版本内分支 / commit ID | 结果 |\",\n \"| --- | --- |\",\n ...repo.nonVersionEntries.map(\n (entry: any) => `| ${safe(entry.name || entry.sha)} | ${safe(entry.reason)} |`,\n ),\n ]\n : []),\n ]),\n ].join(\"\\n\");\n}\n","import type { FastifyInstance } from \"fastify\";\nimport { spawn } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { ASSISTANT_VERSION } from \"@code-workspace/contracts\";\nimport { configureAutostart } from \"./autostart.ts\";\nimport { StateStore } from \"./state.ts\";\n\n/**\n * Where this copy of the package lives, so an upgrade can target the same install.\n *\n * `dist/main.js` sits one level under the package root; a source run (`tsx src/main.ts`) is two,\n * and `package.json` one more. Resolving by walking up avoids hard-coding the layout.\n */\nexport function packageRoot(entry: string): string {\n let directory = path.dirname(path.resolve(entry));\n for (let depth = 0; depth < 4; depth++) {\n if (fs.existsSync(path.join(directory, \"package.json\"))) return directory;\n directory = path.dirname(directory);\n }\n return path.dirname(path.dirname(path.resolve(entry)));\n}\n\n/** A source checkout must not be \"upgraded\": npm would overwrite the working tree. */\nexport function isGlobalInstall(root: string, prefix: string | undefined): boolean {\n if (!prefix) return false;\n const relative = path.relative(path.resolve(prefix), path.resolve(root));\n return Boolean(relative) && !relative.startsWith(\"..\") && !path.isAbsolute(relative);\n}\n\n/**\n * Whether this package sits in a global npm tree.\n *\n * The recorded prefix is authoritative when present. Older installs predate that record, so fall\n * back to the layout: a package directly under a `node_modules` whose own parent is not a project\n * (a project has a package.json next to its node_modules; a global prefix does not).\n */\nexport function looksGlobal(root: string): boolean {\n const modules = path.dirname(path.resolve(root));\n if (path.basename(modules) !== \"node_modules\") return false;\n return !fs.existsSync(path.join(path.dirname(modules), \"package.json\"));\n}\n\n/** Compare dot-separated numeric versions; prerelease tags sort below their release. */\nexport function isNewer(candidate: string, current: string): boolean {\n const parse = (value: string) =>\n value\n .split(\"-\")[0]\n .split(\".\")\n .map((part) => Number(part) || 0);\n const [a, b] = [parse(candidate), parse(current)];\n for (let index = 0; index < Math.max(a.length, b.length); index++) {\n const [left, right] = [a[index] ?? 0, b[index] ?? 0];\n if (left !== right) return left > right;\n }\n // Same numbers: a plain release outranks a prerelease of it.\n return !candidate.includes(\"-\") && current.includes(\"-\");\n}\n\n/**\n * Ask npm for the latest published version.\n *\n * The assistant checks the registry itself rather than trusting the workbench: a remote center\n * must not be able to talk this machine into running an arbitrary `npm install`.\n */\nexport async function latestPublished(): Promise<string> {\n // The registry answers 406 to the abbreviated-metadata Accept type on the /latest endpoint;\n // plain JSON is what npm itself falls back to. Ask for that and let it pick the encoding.\n const response = await fetch(\"https://registry.npmjs.org/cwm-assistant/latest\", {\n signal: AbortSignal.timeout(8000),\n headers: { Accept: \"application/json\" },\n });\n if (!response.ok) throw new Error(`无法查询 npm 上的最新版本(HTTP ${response.status})`);\n const data = (await response.json()) as { version?: string };\n if (!data.version) throw new Error(\"npm 返回的版本信息无效\");\n return data.version;\n}\n\ninterface UpgradeStatus {\n target: string;\n state: \"running\" | \"ok\" | \"failed\";\n error?: string;\n startedAt: string;\n}\nconst statusFile = (store: StateStore) => path.join(store.directory, \"upgrade.json\");\n\nfunction readStatus(store: StateStore): UpgradeStatus | undefined {\n try {\n return JSON.parse(fs.readFileSync(statusFile(store), \"utf8\")) as UpgradeStatus;\n } catch {\n return undefined;\n }\n}\n\nexport function registerUpgradeRoutes(\n app: FastifyInstance,\n store: StateStore,\n entry: string,\n options: { latest?: () => Promise<string> } = {},\n) {\n const latestVersion = options.latest || latestPublished;\n const root = packageRoot(entry);\n const prefix = () => store.state.installPrefix || process.env.npm_config_prefix;\n const global = isGlobalInstall(root, prefix()) || looksGlobal(root);\n\n app.get(\"/v1/upgrade\", async () => {\n let latest = \"\";\n let error = \"\";\n try {\n latest = await latestVersion();\n } catch (cause) {\n error = (cause as Error).message;\n }\n const status = readStatus(store);\n const busy = Object.values(store.state.jobs).some((job) => job.state === \"running\");\n return {\n version: ASSISTANT_VERSION,\n latest,\n available: Boolean(latest) && isNewer(latest, ASSISTANT_VERSION),\n // A source run (or an install we cannot locate) is not replaced from the page.\n upgradeable: global,\n reason: global ? \"\" : \"当前不是全局 npm 安装,请在终端升级\",\n error,\n busy,\n // A previous attempt that never reached the new version left this behind.\n previous: status && status.target !== ASSISTANT_VERSION ? status : undefined,\n };\n });\n\n app.post(\"/v1/upgrade\", async (_request, reply) => {\n if (!global) return reply.code(409).send({ error: \"当前不是全局 npm 安装,请在终端升级\" });\n if (Object.values(store.state.jobs).some((job) => job.state === \"running\"))\n return reply.code(409).send({ error: \"本地任务运行中,请等待完成后再升级\" });\n let latest: string;\n try {\n latest = await latestVersion();\n } catch (cause) {\n return reply.code(502).send({ error: (cause as Error).message });\n }\n if (!isNewer(latest, ASSISTANT_VERSION)) return { latest, started: false };\n\n fs.writeFileSync(\n statusFile(store),\n JSON.stringify({ target: latest, state: \"running\", startedAt: new Date().toISOString() }),\n { mode: 0o600 },\n );\n // Spawn before touching the login item: on macOS disabling it boots this very job out, which\n // would take the helper down with us were it still in our process group.\n const child = spawn(\n process.execPath,\n [\n path.join(root, \"scripts\", \"upgrade.mjs\"),\n \"--version\",\n latest,\n \"--state-dir\",\n store.directory,\n ],\n { detached: true, stdio: \"ignore\", windowsHide: true, cwd: root },\n );\n child.unref();\n // KeepAlive would otherwise restart the old build mid-install. postinstall re-registers it.\n if (store.state.autostart)\n await configureAutostart(false, store.directory, entry).catch(() => {});\n // Let the response flush before the daemon goes away.\n setTimeout(() => process.exit(0), 300);\n return { latest, started: true };\n });\n}\n"],"mappings":"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","names":["spawn","fs","os","path","value","IsObject","IsArray","IsUndefined","IsNumber","TypeSystemPolicy","IsObject","IsArray","IsNumber","IsUndefined","value","IsArray","IsAsyncIterator","IsBigInt","IsBoolean","IsDate","IsFunction","IsIterator","IsNull","IsNumber","IsObject","IsRegExp","IsString","IsSymbol","IsUndefined","IsUint8Array","IsArray","IsBoolean","IsBigInt","IsAsyncIterator","IsDate","IsFunction","IsIterator","IsNull","IsNumber","IsObject","IsAny","IsArgument","IsArray","IsAsyncIterator","IsBigInt","IsBoolean","IsComputed","IsConstructor","IsDate","IsFunction","IsInteger","IsIntersect","IsIterator","IsKind","IsKindOf","IsLiteral","IsLiteralValue","IsMappedKey","IsMappedResult","IsNever","IsNot","IsNull","IsNumber","IsObject","IsOptional","IsPromise","IsReadonly","IsRecord","IsRef","IsRegExp","IsSchema","IsString","IsSymbol","IsTemplateLiteral","IsThis","IsTransform","IsTuple","IsUint8Array","IsUndefined","IsUnion","IsUnknown","IsUnsafe","IsVoid","IsSchema","IsReadonly","IsOptional","IsAny","IsKindOf","IsArgument","IsArray","IsAsyncIterator","IsBigInt","IsBoolean","IsComputed","IsConstructor","IsDate","IsFunction","IsInteger","IsIntersect","IsTransform","IsIterator","IsLiteral","IsLiteralValue","IsMappedKey","IsMappedResult","IsNever","IsNot","IsNull","IsNumber","IsObject","IsPromise","IsRecord","IsRef","IsRegExp","IsString","IsSymbol","IsTemplateLiteral","IsThis","IsTuple","IsUndefined","IsUnion","IsUint8Array","IsUnknown","IsUnsafe","IsVoid","IsKind","Array","range","pattern","Boolean","Number","String","Boolean","Number","String","Visit","schema","IsNumber","IsBigInt","IsString","IsBoolean","FromUnion","IsNumber","FromUnion","IsArray","IsObject","Object","Promise","FromProperties","FromMappedResult","FromMappedResult","FromRest","FromProperties","IsFunction","IsAsyncIterator","IsIterator","IsObject","Object","IsArray","Array","Promise","FromProperties","FromMappedResult","IsObject","RemoveOptionalFromType","RemoveOptionalFromRest","FromIntersect","FromRest","FromUnion","FromRest","FromIntersect","FromUnion","FromTuple","FromArray","FromProperties","IsArray","IsObject","FromComputed","FromRef","Number","FromProperties","FromMappedResult","Object","Date","Symbol","Uint8Array","FromArray","FromProperties","Uint8Array","Date","Object","Symbol","ExtendsResult","FromArray","Visit","FromIntersect","FromLiteral","Number","FromPromise","String","FromTemplateLiteral","FromTuple","FromUnion","FromProperties","FromMappedResult","FromMappedKey","FromProperties","FromMappedResult","FromProperties","FromMappedResult","Object","IsBoolean","IsNumber","IsRegExp","IsString","RecordKey","String","Number","RecordValue","FromConstructor","FromFunction","FromIntersect","FromUnion","FromTuple","FromArray","FromAsyncIterator","FromIterator","FromPromise","FromObject","FromProperties","Object","FromRecord","RecordKey","RecordValue","FromProperty","IsFunction","IsArray","IsAsyncIterator","IsIterator","IsObject","FromTemplateLiteral","FromRest","FromProperties","FromMappedResult","FromIntersect","FromUnion","FromProperty","FromProperties","FromObject","Object","result","IsObject","FromPropertyKey","FromPropertyKeys","FromMappedKey","FromProperties","FromMappedResult","FromIntersect","FromUnion","FromProperties","FromObject","Type","Object","UnionFromPropertyKeys","result","IsObject","FromPropertyKey","FromPropertyKeys","FromMappedKey","FromComputed","FromRef","FromProperties","FromObject","Object","FromRest","IsObject","IsBigInt","IsBoolean","IsNull","IsNumber","IsString","IsSymbol","IsUndefined","FromProperties","FromMappedResult","FromComputed","FromRef","FromProperties","FromObject","Object","FromRest","IsObject","IsBigInt","IsBoolean","IsNull","IsNumber","IsString","IsSymbol","IsUndefined","FromProperties","FromMappedResult","FromType","FromComputed","FromArray","Array","FromAsyncIterator","FromConstructor","FromTypes","FromFunction","FromIntersect","FromIterator","FromObject","Object","FromRecord","RecordValue","FromTuple","FromUnion","IsArray","IsAsyncIterator","IsFunction","IsIterator","IsObject","IsFunction","RegExp","IsFunction","type_exports","Array","Boolean","Date","Number","Object","Promise","RegExp","String","Symbol","Uint8Array","type_exports","lines","randomBytes","randomUUID","path","fs","path","path","fs","spawn","path","execFileSync","fs","os","path","fs","os","path","spawn","execFileSync","spawn","fs","path","path","fs","execFileSync","spawn","path","os","fs","execFileSync","path","os","fs","spawn","fs","os","path","spawn","path","fs","command","os","spawn","randomUUID","fs","path","inside","path","fs","randomUUID","fs","os","path","fs","path","inside","randomUUID","fs","os","path","randomUUID","randomUUID","path","os","fs","randomUUID","fs","path","fs","path","git","os","fs","path","path","fs","path","fs","path","randomUUID","fs","path","randomUUID","fs","path","fs","path","randomUUID","item","randomUUID","fs","path","folder","os","path","path","fs","path","fs","os","path","lines","path","fs","stat","fs","path","fs","stat","path","fs","path","fs","path","fs","stat","fs","fs","path","fs","path","git","fs","path","git","path","os","path","fs","path","git","ref","git","fs","path","result","path","spawn","fs","path","path","fs","spawn","path","randomBytes","randomUUID","path","fs","spawn","os"]}
|