pybao-cli 1.4.11 → 1.4.13
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.
- package/dist/REPL-634DFL57.js +47 -0
- package/dist/{acp-2DQRC3EH.js → acp-AITGGIN7.js} +29 -29
- package/dist/{agentsValidate-BJK3NMZI.js → agentsValidate-K3GLHEUJ.js} +7 -7
- package/dist/{ask-ZPRKCUW6.js → ask-XRAJ7ONM.js} +28 -28
- package/dist/{autoUpdater-ESCFIZ7L.js → autoUpdater-2YW234FZ.js} +3 -3
- package/dist/{chunk-2G47TSYD.js → chunk-2PC7UK66.js} +3 -3
- package/dist/{chunk-GE44OCC5.js → chunk-34XEWGUY.js} +1 -1
- package/dist/{chunk-PH7ER3T7.js → chunk-5WXWY6LV.js} +70 -3
- package/dist/chunk-5WXWY6LV.js.map +7 -0
- package/dist/{chunk-VODD2LMF.js → chunk-6OP2JTUK.js} +1 -1
- package/dist/{chunk-VODD2LMF.js.map → chunk-6OP2JTUK.js.map} +1 -1
- package/dist/{chunk-BL4N574C.js → chunk-BTS2TAAW.js} +4 -4
- package/dist/{chunk-22E2JJDQ.js → chunk-CFTVDXFH.js} +3 -3
- package/dist/{chunk-TSTON26W.js → chunk-CPE4NPQV.js} +2 -2
- package/dist/{chunk-FCMM6VPY.js → chunk-CVJLF2VG.js} +108 -17
- package/dist/chunk-CVJLF2VG.js.map +7 -0
- package/dist/{chunk-OA6IKKQ5.js → chunk-CXT225X7.js} +2 -2
- package/dist/{chunk-YHEL242E.js → chunk-FMH4U7NO.js} +1 -1
- package/dist/{chunk-75I2SN3V.js → chunk-FT5UM6YL.js} +1 -1
- package/dist/{chunk-GUFHK5LL.js → chunk-HCN7LMEB.js} +1 -1
- package/dist/{chunk-SLH5Y6TL.js → chunk-M7QSGOTT.js} +1 -1
- package/dist/{chunk-PVIIWLU7.js → chunk-NG5RU74R.js} +4 -4
- package/dist/{chunk-7674C5EI.js → chunk-O5PGBSLH.js} +2 -2
- package/dist/{chunk-MAIYEHUT.js → chunk-OOTTUF6Z.js} +1 -1
- package/dist/{chunk-2ZUCAGO6.js → chunk-OX4Q6Z5R.js} +3 -3
- package/dist/{chunk-CN4BPKJY.js → chunk-P7MPKAPW.js} +1 -1
- package/dist/{chunk-4NXGQPVD.js → chunk-PHKBTCLT.js} +2 -2
- package/dist/{chunk-ZX4YWAF6.js → chunk-QKB32NDM.js} +2 -2
- package/dist/{chunk-VBDECD3B.js → chunk-RHY3RRE6.js} +2 -2
- package/dist/{chunk-RW25DZUI.js → chunk-S45DDLGG.js} +3 -3
- package/dist/{chunk-T6WE6EKB.js → chunk-TWPWHWJT.js} +4 -4
- package/dist/{chunk-VKQ4XUMC.js → chunk-UDNZNXXR.js} +3 -3
- package/dist/{chunk-PT5XXPXK.js → chunk-V337ZSSD.js} +140 -35
- package/dist/{chunk-PT5XXPXK.js.map → chunk-V337ZSSD.js.map} +3 -3
- package/dist/{chunk-3CHK3M55.js → chunk-VFAFA24S.js} +3 -3
- package/dist/{chunk-L6ZXSKE5.js → chunk-VGDDQSCO.js} +1 -1
- package/dist/{chunk-B7XQSOMR.js → chunk-XJZQD7RE.js} +17 -17
- package/dist/{chunk-B7XQSOMR.js.map → chunk-XJZQD7RE.js.map} +1 -1
- package/dist/{chunk-T25D7KPT.js → chunk-Y3UMGUVE.js} +1 -1
- package/dist/{chunk-FSUNDY7I.js → chunk-ZOM357PV.js} +2 -2
- package/dist/{cli-BMK7HCII.js → cli-MXO677IA.js} +87 -87
- package/dist/commands-Q5LUFGJ5.js +51 -0
- package/dist/{config-HURFLSU4.js → config-YFZ2WAYP.js} +4 -4
- package/dist/{context-7W62D33U.js → context-OOIFZD5B.js} +6 -6
- package/dist/{customCommands-VX54Y4TE.js → customCommands-C5UREHC4.js} +4 -4
- package/dist/{env-PDGDROAN.js → env-LQJ2XZDO.js} +2 -2
- package/dist/{file-IPPA46FR.js → file-ZBIAG7X4.js} +4 -4
- package/dist/index.js +3 -3
- package/dist/{llm-MONJCX5Q.js → llm-RCNWJH2C.js} +29 -29
- package/dist/{llmLazy-WFZ55S4W.js → llmLazy-KXJFFPMF.js} +1 -1
- package/dist/{loader-IDMQQKVM.js → loader-ENRLCLHZ.js} +4 -4
- package/dist/{lsp-XQVZ2NWE.js → lsp-VWL3PVQJ.js} +6 -6
- package/dist/{lspAnchor-BRIL2SHG.js → lspAnchor-WPJIG2RI.js} +6 -6
- package/dist/{mcp-MJJ3VDBU.js → mcp-P5T4TUW2.js} +7 -7
- package/dist/{mentionProcessor-QJ23QKKZ.js → mentionProcessor-4ICD3GVH.js} +5 -5
- package/dist/{messages-IBE33K4U.js → messages-SEOXF7DS.js} +1 -1
- package/dist/{model-Z4VJTIUG.js → model-YOPR5KUS.js} +5 -5
- package/dist/{openai-WIGAHHS7.js → openai-FVFZDXPS.js} +5 -5
- package/dist/{outputStyles-TNUIIMMI.js → outputStyles-7ZZ2JBOT.js} +4 -4
- package/dist/{pluginRuntime-ALIISBKX.js → pluginRuntime-LASQNLIR.js} +6 -6
- package/dist/{pluginValidation-AACSJKTK.js → pluginValidation-4BABNGAC.js} +6 -6
- package/dist/prompts-DJNSFFKV.js +53 -0
- package/dist/{pybAgentSessionLoad-MSKKZN3P.js → pybAgentSessionLoad-O7V7I7CV.js} +4 -4
- package/dist/{pybAgentSessionResume-ERQFJL35.js → pybAgentSessionResume-Q7EYAD6H.js} +4 -4
- package/dist/{pybAgentStreamJsonSession-XGMCAS3H.js → pybAgentStreamJsonSession-N374RMH5.js} +1 -1
- package/dist/{pybHooks-DYZND3A7.js → pybHooks-MHFEMZC6.js} +4 -4
- package/dist/query-LAUPI7JK.js +55 -0
- package/dist/{registry-4JZGZUD6.js → registry-KVMGHJ4N.js} +5 -5
- package/dist/{ripgrep-AM2N6IG5.js → ripgrep-XSJJZ3W3.js} +3 -3
- package/dist/{skillMarketplace-UIRUKL4O.js → skillMarketplace-FL7XBTHJ.js} +3 -3
- package/dist/{state-VYXH6RES.js → state-5NJOFKYB.js} +2 -2
- package/dist/{theme-IFXXBJ5F.js → theme-Z26AKEVC.js} +5 -5
- package/dist/{toolPermissionSettings-EL7QRFEC.js → toolPermissionSettings-SPSMAX5P.js} +6 -6
- package/dist/tools-Q44D6ZG7.js +52 -0
- package/dist/{userInput-6V7KA7LS.js → userInput-3TEMRAK7.js} +30 -30
- package/package.json +1 -1
- package/dist/REPL-4G2GICSI.js +0 -47
- package/dist/chunk-FCMM6VPY.js.map +0 -7
- package/dist/chunk-PH7ER3T7.js.map +0 -7
- package/dist/commands-QFG7R5DP.js +0 -51
- package/dist/prompts-5JN4I55Z.js +0 -53
- package/dist/query-EMWK2K4T.js +0 -55
- package/dist/tools-R47O3JEI.js +0 -52
- /package/dist/{REPL-4G2GICSI.js.map → REPL-634DFL57.js.map} +0 -0
- /package/dist/{acp-2DQRC3EH.js.map → acp-AITGGIN7.js.map} +0 -0
- /package/dist/{agentsValidate-BJK3NMZI.js.map → agentsValidate-K3GLHEUJ.js.map} +0 -0
- /package/dist/{ask-ZPRKCUW6.js.map → ask-XRAJ7ONM.js.map} +0 -0
- /package/dist/{autoUpdater-ESCFIZ7L.js.map → autoUpdater-2YW234FZ.js.map} +0 -0
- /package/dist/{chunk-2G47TSYD.js.map → chunk-2PC7UK66.js.map} +0 -0
- /package/dist/{chunk-GE44OCC5.js.map → chunk-34XEWGUY.js.map} +0 -0
- /package/dist/{chunk-BL4N574C.js.map → chunk-BTS2TAAW.js.map} +0 -0
- /package/dist/{chunk-22E2JJDQ.js.map → chunk-CFTVDXFH.js.map} +0 -0
- /package/dist/{chunk-TSTON26W.js.map → chunk-CPE4NPQV.js.map} +0 -0
- /package/dist/{chunk-OA6IKKQ5.js.map → chunk-CXT225X7.js.map} +0 -0
- /package/dist/{chunk-YHEL242E.js.map → chunk-FMH4U7NO.js.map} +0 -0
- /package/dist/{chunk-75I2SN3V.js.map → chunk-FT5UM6YL.js.map} +0 -0
- /package/dist/{chunk-GUFHK5LL.js.map → chunk-HCN7LMEB.js.map} +0 -0
- /package/dist/{chunk-SLH5Y6TL.js.map → chunk-M7QSGOTT.js.map} +0 -0
- /package/dist/{chunk-PVIIWLU7.js.map → chunk-NG5RU74R.js.map} +0 -0
- /package/dist/{chunk-7674C5EI.js.map → chunk-O5PGBSLH.js.map} +0 -0
- /package/dist/{chunk-MAIYEHUT.js.map → chunk-OOTTUF6Z.js.map} +0 -0
- /package/dist/{chunk-2ZUCAGO6.js.map → chunk-OX4Q6Z5R.js.map} +0 -0
- /package/dist/{chunk-CN4BPKJY.js.map → chunk-P7MPKAPW.js.map} +0 -0
- /package/dist/{chunk-4NXGQPVD.js.map → chunk-PHKBTCLT.js.map} +0 -0
- /package/dist/{chunk-ZX4YWAF6.js.map → chunk-QKB32NDM.js.map} +0 -0
- /package/dist/{chunk-VBDECD3B.js.map → chunk-RHY3RRE6.js.map} +0 -0
- /package/dist/{chunk-RW25DZUI.js.map → chunk-S45DDLGG.js.map} +0 -0
- /package/dist/{chunk-T6WE6EKB.js.map → chunk-TWPWHWJT.js.map} +0 -0
- /package/dist/{chunk-VKQ4XUMC.js.map → chunk-UDNZNXXR.js.map} +0 -0
- /package/dist/{chunk-3CHK3M55.js.map → chunk-VFAFA24S.js.map} +0 -0
- /package/dist/{chunk-L6ZXSKE5.js.map → chunk-VGDDQSCO.js.map} +0 -0
- /package/dist/{chunk-T25D7KPT.js.map → chunk-Y3UMGUVE.js.map} +0 -0
- /package/dist/{chunk-FSUNDY7I.js.map → chunk-ZOM357PV.js.map} +0 -0
- /package/dist/{cli-BMK7HCII.js.map → cli-MXO677IA.js.map} +0 -0
- /package/dist/{commands-QFG7R5DP.js.map → commands-Q5LUFGJ5.js.map} +0 -0
- /package/dist/{config-HURFLSU4.js.map → config-YFZ2WAYP.js.map} +0 -0
- /package/dist/{context-7W62D33U.js.map → context-OOIFZD5B.js.map} +0 -0
- /package/dist/{customCommands-VX54Y4TE.js.map → customCommands-C5UREHC4.js.map} +0 -0
- /package/dist/{env-PDGDROAN.js.map → env-LQJ2XZDO.js.map} +0 -0
- /package/dist/{file-IPPA46FR.js.map → file-ZBIAG7X4.js.map} +0 -0
- /package/dist/{llm-MONJCX5Q.js.map → llm-RCNWJH2C.js.map} +0 -0
- /package/dist/{llmLazy-WFZ55S4W.js.map → llmLazy-KXJFFPMF.js.map} +0 -0
- /package/dist/{loader-IDMQQKVM.js.map → loader-ENRLCLHZ.js.map} +0 -0
- /package/dist/{lsp-XQVZ2NWE.js.map → lsp-VWL3PVQJ.js.map} +0 -0
- /package/dist/{lspAnchor-BRIL2SHG.js.map → lspAnchor-WPJIG2RI.js.map} +0 -0
- /package/dist/{mcp-MJJ3VDBU.js.map → mcp-P5T4TUW2.js.map} +0 -0
- /package/dist/{mentionProcessor-QJ23QKKZ.js.map → mentionProcessor-4ICD3GVH.js.map} +0 -0
- /package/dist/{messages-IBE33K4U.js.map → messages-SEOXF7DS.js.map} +0 -0
- /package/dist/{model-Z4VJTIUG.js.map → model-YOPR5KUS.js.map} +0 -0
- /package/dist/{openai-WIGAHHS7.js.map → openai-FVFZDXPS.js.map} +0 -0
- /package/dist/{outputStyles-TNUIIMMI.js.map → outputStyles-7ZZ2JBOT.js.map} +0 -0
- /package/dist/{pluginRuntime-ALIISBKX.js.map → pluginRuntime-LASQNLIR.js.map} +0 -0
- /package/dist/{pluginValidation-AACSJKTK.js.map → pluginValidation-4BABNGAC.js.map} +0 -0
- /package/dist/{prompts-5JN4I55Z.js.map → prompts-DJNSFFKV.js.map} +0 -0
- /package/dist/{pybAgentSessionLoad-MSKKZN3P.js.map → pybAgentSessionLoad-O7V7I7CV.js.map} +0 -0
- /package/dist/{pybAgentSessionResume-ERQFJL35.js.map → pybAgentSessionResume-Q7EYAD6H.js.map} +0 -0
- /package/dist/{pybAgentStreamJsonSession-XGMCAS3H.js.map → pybAgentStreamJsonSession-N374RMH5.js.map} +0 -0
- /package/dist/{pybHooks-DYZND3A7.js.map → pybHooks-MHFEMZC6.js.map} +0 -0
- /package/dist/{query-EMWK2K4T.js.map → query-LAUPI7JK.js.map} +0 -0
- /package/dist/{registry-4JZGZUD6.js.map → registry-KVMGHJ4N.js.map} +0 -0
- /package/dist/{ripgrep-AM2N6IG5.js.map → ripgrep-XSJJZ3W3.js.map} +0 -0
- /package/dist/{skillMarketplace-UIRUKL4O.js.map → skillMarketplace-FL7XBTHJ.js.map} +0 -0
- /package/dist/{state-VYXH6RES.js.map → state-5NJOFKYB.js.map} +0 -0
- /package/dist/{theme-IFXXBJ5F.js.map → theme-Z26AKEVC.js.map} +0 -0
- /package/dist/{toolPermissionSettings-EL7QRFEC.js.map → toolPermissionSettings-SPSMAX5P.js.map} +0 -0
- /package/dist/{tools-R47O3JEI.js.map → tools-Q44D6ZG7.js.map} +0 -0
- /package/dist/{userInput-6V7KA7LS.js.map → userInput-3TEMRAK7.js.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/tools/search/LspTool/registry.ts", "../src/tools/search/LspTool/utils.ts"],
|
|
4
|
+
"sourcesContent": ["import { join, dirname, basename } from 'path'\nimport { fileURLToPath } from 'url'\nimport { existsSync, mkdirSync, mkdtempSync, rmSync, readdirSync, writeFileSync, chmodSync, renameSync, statSync } from 'fs'\nimport { tmpdir } from 'os'\nimport { spawn } from 'child_process'\nimport { createRequire } from 'module'\nimport which from 'which'\nimport { getLspBinDir } from './utils'\nimport { debug as debugLogger } from '@utils/log/debugLogger'\nimport { env } from '@utils/config/env'\nimport { loadSettingsWithLegacyFallback } from '@utils/config/settingsFiles'\nimport { getCwd } from '@utils/state'\n\nconst __filename = fileURLToPath(import.meta.url)\nconst __dirname = dirname(__filename)\nconst nodeRequire = createRequire(import.meta.url)\n\nconst lspInstallDir = getLspBinDir()\nconst getEnvPackageRoot = () => {\n const root = process.env.PYB_PACKAGE_ROOT?.trim()\n return root || ''\n}\n\ntype BunRuntime = {\n which?: (cmd: string) => string | null\n spawn?: (args: any) => any\n resolve?: (name: string, rootPath: string) => Promise<string>\n}\n\nconst getBunRuntime = (): BunRuntime | undefined =>\n (globalThis as typeof globalThis & { Bun?: BunRuntime }).Bun\n\nconst safeWhich = (cmd: string): string | null => {\n const bun = getBunRuntime()\n if (bun?.which) return bun.which(cmd)\n try {\n return which.sync(cmd)\n } catch {\n return null\n }\n}\n\nconst safeResolvePackage = async (name: string, rootPath: string): Promise<boolean> => {\n const bun = getBunRuntime()\n if (bun?.resolve) {\n await bun.resolve(name, rootPath)\n return true\n }\n try {\n nodeRequire.resolve(name, { paths: [rootPath] })\n return true\n } catch {\n return false\n }\n}\n\nconst spawnProcess = async (\n cmd: string[],\n options: { cwd?: string; env?: NodeJS.ProcessEnv }\n): Promise<{ stdout: string; stderr: string; exitCode: number }> => {\n const bun = getBunRuntime()\n if (bun?.spawn) {\n const proc = bun.spawn({\n cmd,\n cwd: options.cwd,\n env: options.env,\n stdout: 'pipe',\n stderr: 'pipe',\n stdin: 'pipe'\n })\n const [stdout, stderr, exitCode] = await Promise.all([\n new Response(proc.stdout).text(),\n new Response(proc.stderr).text(),\n proc.exited\n ])\n return { stdout, stderr, exitCode }\n }\n return await new Promise(resolve => {\n const [command, ...args] = cmd\n const child = spawn(command, args, {\n cwd: options.cwd,\n env: options.env,\n stdio: ['ignore', 'pipe', 'pipe']\n })\n let stdout = ''\n let stderr = ''\n child.stdout?.on('data', chunk => {\n stdout += chunk.toString()\n })\n child.stderr?.on('data', chunk => {\n stderr += chunk.toString()\n })\n child.on('error', error => {\n resolve({ stdout, stderr: `${stderr}${String(error)}`, exitCode: 1 })\n })\n child.on('close', code => {\n resolve({ stdout, stderr, exitCode: code ?? 1 })\n })\n })\n}\n\ntype LspInstallNotice = {\n server: string\n stage: 'start' | 'success' | 'failed' | 'timeout' | 'skipped'\n message: string\n at: number\n}\n\nconst installNotices: LspInstallNotice[] = []\nconst installNoticeKeys = new Set<string>()\nconst HEAVY_LSP_SERVERS = new Set([\n 'eslint',\n 'vue-language-server',\n 'jdtls',\n 'metals',\n 'elixir-ls',\n 'haskell-language-server',\n 'zls',\n 'lua-language-server'\n])\n\nfunction addInstallNotice(notice: LspInstallNotice) {\n installNotices.push(notice)\n if (installNotices.length > 50) {\n installNotices.shift()\n }\n}\n\nfunction addInstallNoticeOnce(notice: LspInstallNotice, key: string) {\n if (installNoticeKeys.has(key)) return\n installNoticeKeys.add(key)\n addInstallNotice(notice)\n}\n\nexport function getInstallNotices(): LspInstallNotice[] {\n return [...installNotices]\n}\n\nexport function __resetInstallNoticesForTests(): void {\n installNotices.length = 0\n installNoticeKeys.clear()\n}\n\nfunction parseBoolean(value?: string): boolean | undefined {\n if (value === undefined) return undefined\n const normalized = value.trim().toLowerCase()\n if (!normalized) return undefined\n if (['1', 'true', 'yes', 'on'].includes(normalized)) return true\n if (['0', 'false', 'no', 'off'].includes(normalized)) return false\n return undefined\n}\n\nfunction resolveEnvRuntimePath(key: string): string {\n const raw = process.env[key]?.trim()\n if (!raw) return ''\n return existsSync(raw) ? raw : ''\n}\n\nfunction isNodeExecutablePath(value: string): boolean {\n const name = basename(value).toLowerCase()\n return name === 'node' || name === 'node.exe' || name === 'nodejs' || name === 'nodejs.exe'\n}\n\nfunction isBunExecutablePath(value: string): boolean {\n const name = basename(value).toLowerCase()\n return name === 'bun' || name === 'bun.exe'\n}\n\nfunction resolveRuntimeCommand(): string {\n const envNode = resolveEnvRuntimePath('PYB_NODE_PATH')\n if (envNode) return envNode\n const envBun = resolveEnvRuntimePath('PYB_BUN_PATH')\n if (envBun) return envBun\n if (process.execPath && existsSync(process.execPath)) {\n if (isNodeExecutablePath(process.execPath) || isBunExecutablePath(process.execPath)) {\n return process.execPath\n }\n }\n const nodeBin = safeWhich('node')\n if (nodeBin && existsSync(nodeBin)) {\n return nodeBin\n }\n const bunBin = safeWhich('bun')\n if (bunBin && existsSync(bunBin)) {\n return bunBin\n }\n return 'node'\n}\n\nfunction resolveBunRuntimePath(): string {\n const envBun = resolveEnvRuntimePath('PYB_BUN_PATH')\n if (envBun) return envBun\n if (process.execPath && existsSync(process.execPath) && isBunExecutablePath(process.execPath)) {\n return process.execPath\n }\n const bunBin = safeWhich('bun')\n if (bunBin && existsSync(bunBin)) return bunBin\n return ''\n}\n\nasync function isAutoInstallEnabled(): Promise<boolean> {\n const disabled = parseBoolean(\n process.env.PYB_DISABLE_LSP_DOWNLOAD ??\n process.env.PYB_DISABLE_LSP_INSTALL ??\n process.env.OPENCODE_DISABLE_LSP_DOWNLOAD\n )\n if (disabled === true) return false\n const enabled = parseBoolean(\n process.env.PYB_LSP_AUTO_INSTALL ?? process.env.PYB_ENABLE_LSP_AUTO_INSTALL\n )\n if (enabled === false) return false\n return env.hasInternetAccess()\n}\n\nfunction isHeavyAutoInstallEnabled(): boolean {\n const disabled = parseBoolean(\n process.env.PYB_DISABLE_LSP_HEAVY_INSTALL ?? process.env.PYB_LSP_HEAVY_INSTALL_DISABLED\n )\n if (disabled === true) return false\n const enabled = parseBoolean(process.env.PYB_LSP_HEAVY_AUTO_INSTALL)\n if (enabled === false) return false\n return true\n}\n\nfunction getInstallTimeoutMs(): number | null {\n const override = Number.parseInt(process.env.PYB_LSP_INSTALL_TIMEOUT_MS ?? '', 10)\n if (Number.isFinite(override)) {\n if (override <= 0) return null\n return override\n }\n return 120000\n}\n\nasync function runInstallWithPolicy(serverId: string, install: LspInstallStrategy): Promise<boolean> {\n const isHeavy = HEAVY_LSP_SERVERS.has(serverId)\n if (isHeavy && !isHeavyAutoInstallEnabled()) {\n addInstallNoticeOnce(\n {\n server: serverId,\n stage: 'skipped',\n message: `${serverId} install skipped (heavy auto install disabled)`,\n at: Date.now()\n },\n `${serverId}:skipped:heavy-disabled`\n )\n if (isHeavy) {\n console.log(`[LSP] ${serverId} install skipped (heavy auto install disabled)`)\n }\n return false\n }\n const startAt = Date.now()\n if (isHeavy) {\n addInstallNotice({\n server: serverId,\n stage: 'start',\n message: `${serverId} install started`,\n at: startAt\n })\n console.log(`[LSP] ${serverId} install started`)\n }\n const timeoutMs = getInstallTimeoutMs()\n let timeoutId: ReturnType<typeof setTimeout> | null = null\n const timeoutPromise =\n timeoutMs === null\n ? null\n : new Promise<{ timeout: true }>(resolve => {\n timeoutId = setTimeout(() => resolve({ timeout: true }), timeoutMs)\n })\n const installPromise = install()\n .then(ok => ({ ok }))\n .catch(error => ({ error }))\n const result = timeoutPromise\n ? await Promise.race([installPromise, timeoutPromise])\n : await installPromise\n if (timeoutId) clearTimeout(timeoutId)\n if ('timeout' in result) {\n addInstallNotice({\n server: serverId,\n stage: 'timeout',\n message: `${serverId} install timed out`,\n at: Date.now()\n })\n if (isHeavy) {\n console.log(`[LSP] ${serverId} install timed out`)\n }\n return false\n }\n if ('error' in result) {\n addInstallNotice({\n server: serverId,\n stage: 'failed',\n message: `${serverId} install failed: ${String(result.error)}`,\n at: Date.now()\n })\n if (isHeavy) {\n console.log(`[LSP] ${serverId} install failed: ${String(result.error)}`)\n }\n return false\n }\n if (!result.ok) {\n addInstallNotice({\n server: serverId,\n stage: 'failed',\n message: `${serverId} install failed`,\n at: Date.now()\n })\n if (isHeavy) {\n console.log(`[LSP] ${serverId} install failed`)\n }\n return false\n }\n if (isHeavy) {\n addInstallNotice({\n server: serverId,\n stage: 'success',\n message: `${serverId} install completed`,\n at: Date.now()\n })\n console.log(`[LSP] ${serverId} install completed`)\n }\n return true\n}\n\nfunction ensureInstallDir() {\n if (!existsSync(lspInstallDir)) {\n mkdirSync(lspInstallDir, { recursive: true })\n }\n}\n\nfunction resolveBinInDir(dir: string, binName: string): string {\n const exts = process.platform === 'win32' ? ['.cmd', '.exe', '.ps1', ''] : ['']\n for (const ext of exts) {\n const binPath = join(dir, `${binName}${ext}`)\n if (existsSync(binPath)) {\n return binPath\n }\n }\n return ''\n}\n\nasync function bunInstall(packages: string[], cwd: string = lspInstallDir): Promise<boolean> {\n const bunBin = resolveBunRuntimePath()\n if (!bunBin) {\n debugLogger.error('LSP_MISSING_DEP', { server: 'npm', error: 'bun not found' })\n addInstallNoticeOnce(\n {\n server: 'npm',\n stage: 'failed',\n message: 'bun not found for npm-based LSP install',\n at: Date.now()\n },\n 'npm:missing:bun'\n )\n return false\n }\n if (!existsSync(cwd)) {\n mkdirSync(cwd, { recursive: true })\n }\n const result = await spawnProcess([bunBin, 'install', ...packages], {\n cwd,\n env: {\n ...process.env,\n BUN_BE_BUN: '1'\n }\n })\n return result.exitCode === 0\n}\n\nasync function runBinary(\n cmd: string[],\n extraEnv?: NodeJS.ProcessEnv,\n cwd: string = lspInstallDir\n): Promise<{ ok: boolean; error?: string }> {\n const { stdout, stderr, exitCode } = await spawnProcess(cmd, {\n cwd,\n env: {\n ...process.env,\n ...extraEnv\n }\n })\n if (exitCode === 0) {\n return { ok: true }\n }\n return { ok: false, error: stderr || stdout }\n}\n\nasync function runBinaryWithTimeout(\n cmd: string[],\n extraEnv: NodeJS.ProcessEnv | undefined,\n cwd: string,\n timeoutMs: number | null\n): Promise<{ ok: boolean; error?: string; timeout?: boolean }> {\n if (timeoutMs === null) {\n return runBinary(cmd, extraEnv, cwd)\n }\n let timeoutId: ReturnType<typeof setTimeout> | null = null\n const timeoutPromise = new Promise<{ timeout: true }>(resolve => {\n timeoutId = setTimeout(() => resolve({ timeout: true }), timeoutMs)\n })\n const result = await Promise.race([runBinary(cmd, extraEnv, cwd), timeoutPromise])\n if (timeoutId) clearTimeout(timeoutId)\n if ('timeout' in result) {\n return { ok: false, timeout: true, error: 'timeout' }\n }\n return result\n}\n\nasync function getJavaMajorVersion(): Promise<number | null> {\n const { stdout, stderr, exitCode } = await spawnProcess(['java', '-version'], {})\n if (exitCode !== 0) return null\n const output = `${stderr}\\n${stdout}`\n const match = /\"(\\d+)(?:\\.\\d+)?(?:\\.\\d+)?\"?/.exec(output)\n if (!match) return null\n const major = Number.parseInt(match[1], 10)\n return Number.isNaN(major) ? null : major\n}\n\nconst ESLINT_ARCHIVE_URL = 'https://github.com/microsoft/vscode-eslint/archive/refs/heads/main.zip'\n\nexport function getEslintInstallDir(installDir: string = lspInstallDir): string {\n return join(installDir, 'vscode-eslint')\n}\n\nexport function getEslintServerPath(installDir: string = lspInstallDir): string {\n return join(getEslintInstallDir(installDir), 'server', 'out', 'eslintServer.js')\n}\n\nexport async function installEslintServer(installDir: string = lspInstallDir): Promise<boolean> {\n const serverPath = getEslintServerPath(installDir)\n if (existsSync(serverPath)) return true\n const canInstall = await isAutoInstallEnabled()\n if (!canInstall) return false\n if (!existsSync(installDir)) {\n mkdirSync(installDir, { recursive: true })\n }\n const runtime = getBunRuntime() ? 'bun' : 'node'\n debugLogger.info('LSP_INSTALL', { server: 'eslint', action: 'start' })\n try {\n await downloadAndExtractArchive({\n url: ESLINT_ARCHIVE_URL,\n archiveType: 'zip',\n installDir,\n expectedFiles: ['vscode-eslint-main']\n })\n const extractedPath = join(installDir, 'vscode-eslint-main')\n const finalPath = getEslintInstallDir(installDir)\n if (!existsSync(extractedPath)) {\n debugLogger.error('LSP_INSTALL_FAILED', { server: 'eslint', error: 'extracted path missing', runtime })\n return false\n }\n if (existsSync(finalPath)) {\n rmSync(finalPath, { recursive: true, force: true })\n }\n renameSync(extractedPath, finalPath)\n const npmCmd = process.platform === 'win32' ? 'npm.cmd' : 'npm'\n if (!safeWhich(npmCmd)) {\n debugLogger.error('LSP_MISSING_DEP', { server: 'eslint', error: `${npmCmd} not found`, runtime })\n addInstallNoticeOnce(\n {\n server: 'eslint',\n stage: 'failed',\n message: `${npmCmd} not found for eslint install`,\n at: Date.now()\n },\n `eslint:missing:${npmCmd}`\n )\n return false\n }\n const timeoutMs = getInstallTimeoutMs()\n const installResult = await runBinaryWithTimeout([npmCmd, 'install'], undefined, finalPath, timeoutMs)\n if (!installResult.ok) {\n debugLogger.error('LSP_INSTALL_FAILED', { server: 'eslint', error: installResult.error, runtime })\n return false\n }\n const compileResult = await runBinaryWithTimeout([npmCmd, 'run', 'compile'], undefined, finalPath, timeoutMs)\n if (!compileResult.ok) {\n debugLogger.error('LSP_INSTALL_FAILED', { server: 'eslint', error: compileResult.error, runtime })\n return false\n }\n if (!existsSync(serverPath)) {\n debugLogger.error('LSP_INSTALL_FAILED', { server: 'eslint', error: 'eslintServer.js not found', runtime })\n return false\n }\n debugLogger.info('LSP_INSTALL', { server: 'eslint', action: 'success' })\n return true\n } catch (e) {\n debugLogger.error('LSP_INSTALL_ERROR', { server: 'eslint', error: String(e), runtime })\n return false\n }\n}\n\nconst DEFAULT_LANGUAGE_MAP: Record<string, string> = {\n '.sh': 'shellscript',\n '.bash': 'shellscript',\n '.zsh': 'shellscript',\n '.ksh': 'shellscript',\n '.ps1': 'powershell',\n '.psm1': 'powershell',\n '.bat': 'bat',\n '.cmd': 'bat',\n '.js': 'javascript',\n '.mjs': 'javascript',\n '.cjs': 'javascript',\n '.jsx': 'javascriptreact',\n '.ts': 'typescript',\n '.mts': 'typescript',\n '.cts': 'typescript',\n '.ets': 'typescript',\n '.tsx': 'typescriptreact',\n '.mtsx': 'typescriptreact',\n '.ctsx': 'typescriptreact',\n '.vue': 'vue',\n '.svelte': 'svelte',\n '.astro': 'astro',\n '.html': 'html',\n '.htm': 'html',\n '.css': 'css',\n '.scss': 'scss',\n '.sass': 'sass',\n '.less': 'less',\n '.json': 'json',\n '.yml': 'yaml',\n '.yaml': 'yaml',\n '.py': 'python',\n '.go': 'go',\n '.java': 'java',\n '.kt': 'kotlin',\n '.kts': 'kotlin',\n '.rb': 'ruby',\n '.rake': 'ruby',\n '.gemspec': 'ruby',\n '.ru': 'ruby',\n '.erb': 'erb',\n '.php': 'php',\n '.rs': 'rust',\n '.c': 'c',\n '.cpp': 'cpp',\n '.cxx': 'cpp',\n '.cc': 'cpp',\n '.hpp': 'cpp',\n '.h': 'c',\n '.cs': 'csharp',\n '.fs': 'fsharp',\n '.fsi': 'fsharp',\n '.fsx': 'fsharp',\n '.fsscript': 'fsharp',\n '.scala': 'scala',\n '.swift': 'swift',\n '.dart': 'dart',\n '.dockerfile': 'dockerfile',\n 'dockerfile': 'dockerfile',\n '.tf': 'terraform',\n '.tfvars': 'terraform',\n '.hcl': 'hcl',\n '.nix': 'nix',\n '.makefile': 'makefile',\n 'makefile': 'makefile',\n '.md': 'markdown',\n '.markdown': 'markdown',\n '.sql': 'sql',\n '.xml': 'xml',\n '.xsl': 'xml',\n '.tex': 'latex',\n '.latex': 'latex',\n '.bib': 'bibtex',\n '.bibtex': 'bibtex',\n '.diff': 'diff',\n '.patch': 'diff',\n '.clj': 'clojure',\n '.cljs': 'clojure',\n '.cljc': 'clojure',\n '.edn': 'clojure',\n '.ex': 'elixir',\n '.exs': 'elixir',\n '.erl': 'erlang',\n '.hrl': 'erlang',\n '.hs': 'haskell',\n '.lhs': 'haskell',\n '.ml': 'ocaml',\n '.mli': 'ocaml',\n '.zig': 'zig',\n '.zon': 'zig',\n '.gleam': 'gleam',\n '.typ': 'typst',\n '.typc': 'typst'\n}\n\nconst DEFAULT_LANGUAGE_CATEGORIES: Record<string, string> = {\n javascript: 'web',\n javascriptreact: 'web',\n typescript: 'web',\n typescriptreact: 'web',\n vue: 'web',\n svelte: 'web',\n astro: 'web',\n html: 'web',\n css: 'web',\n scss: 'web',\n sass: 'web',\n less: 'web',\n python: 'backend',\n go: 'backend',\n java: 'backend',\n kotlin: 'backend',\n ruby: 'backend',\n php: 'backend',\n rust: 'backend',\n csharp: 'backend',\n fsharp: 'backend',\n scala: 'backend',\n swift: 'backend',\n dart: 'backend',\n elixir: 'backend',\n erlang: 'backend',\n haskell: 'backend',\n ocaml: 'backend',\n c: 'system',\n cpp: 'system',\n zig: 'system',\n shellscript: 'system',\n powershell: 'system',\n makefile: 'system',\n sql: 'data',\n json: 'data',\n yaml: 'data',\n xml: 'data',\n latex: 'data',\n bibtex: 'data',\n dockerfile: 'infra',\n terraform: 'infra',\n hcl: 'infra',\n nix: 'infra',\n markdown: 'docs',\n diff: 'docs'\n}\n\ntype LspServerOverride = {\n disabled?: boolean\n extensions?: string[]\n rootMarkers?: string[]\n command?: string\n args?: string[]\n env?: Record<string, string>\n initializationOptions?: Record<string, unknown>\n root?: {\n include?: string[]\n exclude?: string[]\n branches?: string[][]\n }\n languageId?: string\n priority?: number\n group?: string\n}\n\nexport type LspServerGroup = {\n id: string\n strategy: 'parallel' | 'exclusive' | 'fallback'\n serverIds: string[]\n extensions?: string[]\n}\n\nexport type LspSettings = {\n disabledServers?: string[]\n servers?: Record<string, LspServerOverride>\n experimental?: Record<string, boolean>\n languageMap?: Record<string, string>\n languageCategories?: Record<string, string>\n serverGroups?: LspServerGroup[]\n initializationOptions?: Record<string, unknown>\n env?: Record<string, string>\n}\n\nconst EXPERIMENTAL_SWITCHES: Record<string, { enable: string[]; disable: string[] }> = {\n ty: { enable: ['ty'], disable: ['pyright'] }\n}\n\nfunction readExperimentalEnvToggles(): Record<string, boolean> | undefined {\n const out: Record<string, boolean> = {}\n for (const [key, value] of Object.entries(process.env)) {\n if (!key.startsWith('PYB_LSP_EXPERIMENTAL_')) continue\n const name = key.substring('PYB_LSP_EXPERIMENTAL_'.length).toLowerCase()\n const v = String(value ?? '').trim().toLowerCase()\n const enabled = v === '1' || v === 'true' || v === 'on' || v === 'yes'\n out[name] = enabled\n }\n return Object.keys(out).length ? out : undefined\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value))\n}\n\nfunction normalizeStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) return undefined\n const out: string[] = []\n const seen = new Set<string>()\n for (const entry of value) {\n if (typeof entry !== 'string') continue\n const trimmed = entry.trim()\n if (!trimmed || seen.has(trimmed)) continue\n seen.add(trimmed)\n out.push(trimmed)\n }\n return out.length ? out : undefined\n}\n\nfunction normalizeStringRecord(value: unknown): Record<string, string> | undefined {\n if (!isRecord(value)) return undefined\n const out: Record<string, string> = {}\n for (const [key, raw] of Object.entries(value)) {\n if (typeof raw === 'string') {\n out[key] = raw\n }\n }\n return Object.keys(out).length ? out : undefined\n}\n\nfunction normalizeBooleanRecord(value: unknown): Record<string, boolean> | undefined {\n if (!isRecord(value)) return undefined\n const out: Record<string, boolean> = {}\n for (const [key, raw] of Object.entries(value)) {\n if (typeof raw === 'boolean') {\n out[key] = raw\n }\n }\n return Object.keys(out).length ? out : undefined\n}\n\nfunction normalizeInitializationOptions(value: unknown): Record<string, unknown> | undefined {\n if (!isRecord(value)) return undefined\n return Object.keys(value).length ? value : undefined\n}\n\nfunction normalizeServerOverrides(value: unknown): Record<string, LspServerOverride> | undefined {\n if (!isRecord(value)) return undefined\n const out: Record<string, LspServerOverride> = {}\n for (const [id, raw] of Object.entries(value)) {\n if (!isRecord(raw)) continue\n const entry: LspServerOverride = {}\n if (typeof raw.disabled === 'boolean') entry.disabled = raw.disabled\n entry.extensions = normalizeStringArray(raw.extensions)\n entry.rootMarkers = normalizeStringArray(raw.rootMarkers)\n if (typeof raw.command === 'string' && raw.command.trim()) entry.command = raw.command\n entry.args = normalizeStringArray(raw.args)\n entry.env = normalizeStringRecord(raw.env)\n entry.initializationOptions = normalizeInitializationOptions(raw.initializationOptions)\n if (isRecord(raw.root)) {\n const include = normalizeStringArray(raw.root.include)\n const exclude = normalizeStringArray(raw.root.exclude)\n const branches = Array.isArray(raw.root.branches)\n ? raw.root.branches\n .map(branch => normalizeStringArray(branch))\n .filter((branch): branch is string[] => Boolean(branch && branch.length))\n : undefined\n if (include || exclude || branches) {\n entry.root = { include, exclude, branches }\n }\n }\n if (typeof raw.languageId === 'string' && raw.languageId.trim()) entry.languageId = raw.languageId\n if (typeof raw.priority === 'number' && Number.isFinite(raw.priority)) entry.priority = raw.priority\n if (typeof raw.group === 'string' && raw.group.trim()) entry.group = raw.group\n out[id] = entry\n }\n return Object.keys(out).length ? out : undefined\n}\n\nfunction normalizeServerGroups(value: unknown): LspServerGroup[] | undefined {\n if (!Array.isArray(value)) return undefined\n const out: LspServerGroup[] = []\n for (const entry of value) {\n if (!isRecord(entry)) continue\n const id = typeof entry.id === 'string' ? entry.id.trim() : ''\n const strategy =\n entry.strategy === 'parallel' || entry.strategy === 'exclusive' || entry.strategy === 'fallback'\n ? entry.strategy\n : undefined\n const serverIds = normalizeStringArray(entry.serverIds)\n if (!id || !strategy || !serverIds || serverIds.length === 0) continue\n out.push({\n id,\n strategy,\n serverIds,\n extensions: normalizeStringArray(entry.extensions)\n })\n }\n return out.length ? out : undefined\n}\n\nfunction mergeOverrides(\n base: Record<string, LspServerOverride> | undefined,\n next: Record<string, LspServerOverride> | undefined\n): Record<string, LspServerOverride> | undefined {\n if (!base && !next) return undefined\n const out: Record<string, LspServerOverride> = { ...(base ?? {}) }\n if (next) {\n for (const [key, value] of Object.entries(next)) {\n out[key] = { ...(out[key] ?? {}), ...value }\n }\n }\n return out\n}\n\nfunction mergeStringArrays(base: string[] | undefined, next: string[] | undefined): string[] | undefined {\n if (!base && !next) return undefined\n return normalizeStringArray([...(base ?? []), ...(next ?? [])])\n}\n\nfunction mergeStringRecords(\n base: Record<string, string> | undefined,\n next: Record<string, string> | undefined\n): Record<string, string> | undefined {\n if (!base && !next) return undefined\n return { ...(base ?? {}), ...(next ?? {}) }\n}\n\nfunction mergeBooleanRecords(\n base: Record<string, boolean> | undefined,\n next: Record<string, boolean> | undefined\n): Record<string, boolean> | undefined {\n if (!base && !next) return undefined\n return { ...(base ?? {}), ...(next ?? {}) }\n}\n\nfunction mergeLspSettings(base: LspSettings | undefined, next: LspSettings | undefined): LspSettings | undefined {\n if (!base && !next) return undefined\n const merged: LspSettings = { ...(base ?? {}) }\n merged.disabledServers = mergeStringArrays(base?.disabledServers, next?.disabledServers)\n merged.servers = mergeOverrides(base?.servers, next?.servers)\n merged.experimental = mergeBooleanRecords(base?.experimental, next?.experimental)\n merged.languageMap = mergeStringRecords(base?.languageMap, next?.languageMap)\n merged.languageCategories = mergeStringRecords(base?.languageCategories, next?.languageCategories)\n merged.serverGroups = next?.serverGroups ?? base?.serverGroups\n merged.initializationOptions = mergeInitializationOptions(base?.initializationOptions, next?.initializationOptions)\n merged.env = mergeStringRecords(base?.env as Record<string, string> | undefined, next?.env as Record<string, string> | undefined)\n return merged\n}\n\nfunction mergeInitializationOptions(\n base: Record<string, unknown> | undefined,\n next: Record<string, unknown> | undefined\n): Record<string, unknown> | undefined {\n if (!base && !next) return undefined\n return { ...(base ?? {}), ...(next ?? {}) }\n}\n\nfunction hasDenoConfig(rootPath: string): boolean {\n return ['deno.json', 'deno.jsonc'].some(name => existsSync(join(rootPath, name)))\n}\n\nfunction resolveTyBinary(rootPath: string): string | null {\n const direct = safeWhich('ty')\n if (direct) return direct\n const venvPaths = [process.env.VIRTUAL_ENV, join(rootPath, '.venv'), join(rootPath, 'venv')].filter(\n (value): value is string => Boolean(value)\n )\n for (const venvPath of venvPaths) {\n const binary =\n process.platform === 'win32'\n ? join(venvPath, 'Scripts', 'ty.exe')\n : join(venvPath, 'bin', 'ty')\n if (existsSync(binary)) return binary\n }\n return null\n}\n\nfunction hasTyBinary(rootPath: string): boolean {\n return Boolean(resolveTyBinary(rootPath))\n}\n\nfunction applyExperimentalSwitches(settings: LspSettings | undefined): LspSettings | undefined {\n if (!settings) return undefined\n const envToggles = readExperimentalEnvToggles()\n const experimental = settings.experimental || envToggles\n if (!experimental) return settings\n const disabled = new Set(settings.disabledServers ?? [])\n const merged: Record<string, boolean> = {\n ...(settings.experimental ?? {}),\n ...(envToggles ?? {})\n }\n for (const [key, enabled] of Object.entries(merged)) {\n if (!enabled) continue\n const rule = EXPERIMENTAL_SWITCHES[key]\n if (!rule) continue\n const canDisable =\n key !== 'ty' || hasTyBinary(getCwd())\n for (const id of rule.enable) {\n disabled.delete(id)\n }\n for (const id of rule.disable) {\n if (canDisable) {\n disabled.add(id)\n }\n }\n }\n return {\n ...settings,\n disabledServers: disabled.size ? Array.from(disabled) : undefined,\n experimental\n }\n}\n\nfunction normalizeLspSettings(value: unknown): LspSettings | undefined {\n if (!isRecord(value)) return undefined\n return {\n disabledServers: normalizeStringArray(value.disabledServers),\n servers: normalizeServerOverrides(value.servers),\n experimental: normalizeBooleanRecord(value.experimental),\n languageMap: normalizeStringRecord(value.languageMap),\n languageCategories: normalizeStringRecord(value.languageCategories),\n serverGroups: normalizeServerGroups(value.serverGroups),\n initializationOptions: normalizeInitializationOptions(value.initializationOptions),\n env: normalizeStringRecord(value.env)\n }\n}\n\nfunction loadLspSettingsFromFiles(options?: { projectDir?: string; homeDir?: string }): LspSettings | undefined {\n if (process.env.BUN_TEST || process.env.NODE_ENV === 'test') {\n return undefined\n }\n const projectDir = options?.projectDir ?? getCwd()\n const homeDir = options?.homeDir\n const user = loadSettingsWithLegacyFallback({\n destination: 'userSettings',\n projectDir,\n homeDir,\n migrateToPrimary: true\n }).settings\n const project = loadSettingsWithLegacyFallback({\n destination: 'projectSettings',\n projectDir,\n homeDir,\n migrateToPrimary: true\n }).settings\n const local = loadSettingsWithLegacyFallback({\n destination: 'localSettings',\n projectDir,\n homeDir,\n migrateToPrimary: true\n }).settings\n\n const userSettings = normalizeLspSettings((user as Record<string, unknown> | null)?.lsp)\n const projectSettings = normalizeLspSettings((project as Record<string, unknown> | null)?.lsp)\n const localSettings = normalizeLspSettings((local as Record<string, unknown> | null)?.lsp)\n\n return mergeLspSettings(mergeLspSettings(userSettings, projectSettings), localSettings)\n}\n\nexport function detectPythonVenv(rootPath: string): string | null {\n const envVenv = process.env.VIRTUAL_ENV?.trim()\n const candidates =\n process.platform === 'win32'\n ? [\n ...(envVenv ? [join(envVenv, 'Scripts', 'python.exe')] : []),\n join(rootPath, '.venv', 'Scripts', 'python.exe'),\n join(rootPath, 'venv', 'Scripts', 'python.exe')\n ]\n : [\n ...(envVenv ? [join(envVenv, 'bin', 'python')] : []),\n join(rootPath, '.venv', 'bin', 'python'),\n join(rootPath, 'venv', 'bin', 'python')\n ]\n for (const candidate of candidates) {\n if (existsSync(candidate)) return candidate\n }\n return null\n}\n\nexport async function npmInstallIfMissing(\n packages: string[],\n cwd: string = lspInstallDir\n): Promise<boolean> {\n const missing = packages.filter(pkg => !existsSync(join(cwd, 'node_modules', pkg, 'package.json')))\n if (missing.length === 0) return true\n const canInstall = await isAutoInstallEnabled()\n if (!canInstall) return false\n return bunInstall(missing, cwd)\n}\n\nexport function multiResolveBinary(options: {\n binNames: string[]\n packageName?: string\n args?: string[]\n cwd?: string\n}): LspServerCommand | null {\n const cwd = options.cwd ?? process.cwd()\n const localBinDir = join(cwd, 'node_modules', '.bin')\n for (const binName of options.binNames) {\n if (safeWhich(binName)) {\n return { command: binName, args: options.args ?? [] }\n }\n const localBin = resolveBinInDir(localBinDir, binName)\n if (localBin) {\n return { command: localBin, args: options.args ?? [] }\n }\n const lspBin = resolveBinInDir(join(lspInstallDir, 'node_modules', '.bin'), binName)\n if (lspBin) {\n return { command: lspBin, args: options.args ?? [] }\n }\n }\n if (options.packageName) {\n const bunBin = resolveBunRuntimePath()\n if (!bunBin) return null\n return { command: bunBin, args: ['x', options.packageName, ...(options.args ?? [])] }\n }\n return null\n}\n\nexport type BinaryDownloadPlan = {\n url: string\n archiveType: 'zip' | 'tar.gz'\n installDir: string\n expectedFiles: string[]\n}\n\nexport function planLuaLsDownload(installDir: string): BinaryDownloadPlan {\n const version = process.env.PYB_LUA_LS_VERSION?.trim() || '3.13.5'\n const platform =\n process.platform === 'win32'\n ? 'win32'\n : process.platform === 'darwin'\n ? 'darwin'\n : 'linux'\n const arch = process.arch === 'arm64' ? 'arm64' : 'x64'\n const archiveType = process.platform === 'win32' ? 'zip' : 'tar.gz'\n const filename = `lua-language-server-${version}-${platform}-${arch}.${archiveType}`\n return {\n url: `https://github.com/LuaLS/lua-language-server/releases/download/${version}/${filename}`,\n archiveType,\n installDir,\n expectedFiles: [process.platform === 'win32' ? 'bin/lua-language-server.exe' : 'bin/lua-language-server']\n }\n}\n\nexport function planZlsDownload(installDir: string): BinaryDownloadPlan {\n const version = process.env.PYB_ZLS_VERSION?.trim() || '0.13.0'\n const platform =\n process.platform === 'win32'\n ? 'windows'\n : process.platform === 'darwin'\n ? 'macos'\n : 'linux'\n const arch = process.arch === 'arm64' ? 'aarch64' : 'x86_64'\n const archiveType = process.platform === 'win32' ? 'zip' : 'tar.gz'\n const filename = `zls-${platform}-${arch}.${archiveType}`\n return {\n url: `https://github.com/zls/zls/releases/download/${version}/${filename}`,\n archiveType,\n installDir,\n expectedFiles: [process.platform === 'win32' ? 'zls.exe' : 'zls']\n }\n}\n\nexport function planElixirLsDownload(installDir: string): BinaryDownloadPlan {\n const version = process.env.PYB_ELIXIR_LS_VERSION?.trim() || '0.18.2'\n const archiveType = 'zip'\n const filename = `elixir-ls-${version}.zip`\n return {\n url: `https://github.com/elixir-lsp/elixir-ls/releases/download/${version}/${filename}`,\n archiveType,\n installDir,\n expectedFiles: ['language_server.sh']\n }\n}\n\nexport function planJdtlsDownload(installDir: string): BinaryDownloadPlan {\n const version = process.env.PYB_JDTLS_VERSION?.trim() || '1.34.0'\n const platform =\n process.platform === 'win32'\n ? 'win32'\n : process.platform === 'darwin'\n ? 'mac'\n : 'linux'\n const archiveType = 'tar.gz'\n const filename = `jdtls-${version}-${platform}.tar.gz`\n return {\n url: `https://download.eclipse.org/jdtls/milestones/${version}/${filename}`,\n archiveType,\n installDir,\n expectedFiles: ['plugins', 'configuration']\n }\n}\n\nasync function extractArchive(buffer: Uint8Array, archiveType: 'zip' | 'tar.gz', targetDir: string): Promise<void> {\n if (archiveType === 'zip') {\n const { unzipSync } = await import('fflate')\n const files = unzipSync(buffer)\n for (const [name, data] of Object.entries(files)) {\n const isDirEntry = name.endsWith('/')\n const entryName = isDirEntry ? name.slice(0, -1) : name\n if (!entryName) continue\n const targetPath = join(targetDir, entryName)\n const ensureDir = (dirPath: string) => {\n if (existsSync(dirPath)) {\n const stats = statSync(dirPath)\n if (stats.isDirectory()) return\n rmSync(dirPath, { recursive: true, force: true })\n }\n mkdirSync(dirPath, { recursive: true })\n }\n if (isDirEntry) {\n ensureDir(targetPath)\n continue\n }\n const targetDirPath = dirname(targetPath)\n ensureDir(targetDirPath)\n if (existsSync(targetPath)) {\n const stats = statSync(targetPath)\n if (stats.isDirectory()) {\n rmSync(targetPath, { recursive: true, force: true })\n }\n }\n writeFileSync(targetPath, data)\n }\n return\n }\n const archiveName = `archive-${Date.now()}.tar.gz`\n const tempDir = mkdtempSync(join(targetDir, 'tmp-'))\n const archivePath = join(tempDir, archiveName)\n writeFileSync(archivePath, buffer)\n await runBinary(['tar', '-xzf', archivePath, '-C', targetDir], undefined, tempDir)\n rmSync(tempDir, { recursive: true, force: true })\n}\n\nexport async function downloadAndExtractArchive(plan: BinaryDownloadPlan): Promise<void> {\n if (!existsSync(plan.installDir)) {\n mkdirSync(plan.installDir, { recursive: true })\n }\n const response = await fetch(plan.url)\n if (!response.ok) {\n throw new Error(`Failed to download ${plan.url}: ${response.status}`)\n }\n const buffer = new Uint8Array(await response.arrayBuffer())\n await extractArchive(buffer, plan.archiveType, plan.installDir)\n}\n\nfunction findFileRecursive(root: string, filename: string): string | null {\n const entries = readdirSync(root, { withFileTypes: true })\n for (const entry of entries) {\n const full = join(root, entry.name)\n if (entry.isDirectory()) {\n const found = findFileRecursive(full, filename)\n if (found) return found\n } else if (entry.isFile() && entry.name === filename) {\n return full\n }\n }\n return null\n}\n\nexport async function installLuaLs(installDir: string): Promise<boolean> {\n const plan = planLuaLsDownload(installDir)\n await downloadAndExtractArchive(plan)\n const expected = plan.expectedFiles.find(file => findFileRecursive(installDir, basename(file)))\n if (!expected) {\n throw new Error('LuaLS binary not found after extraction')\n }\n if (process.platform !== 'win32') {\n chmodSync(expected, 0o755)\n }\n return true\n}\n\nexport async function installZls(installDir: string): Promise<boolean> {\n if (!safeWhich('zig')) {\n throw new Error('zig not found')\n }\n const plan = planZlsDownload(installDir)\n await downloadAndExtractArchive(plan)\n const expected = plan.expectedFiles.find(file => findFileRecursive(installDir, basename(file)))\n if (!expected) {\n throw new Error('zls binary not found after extraction')\n }\n if (process.platform !== 'win32') {\n chmodSync(expected, 0o755)\n }\n return true\n}\n\nexport async function installElixirLs(installDir: string): Promise<boolean> {\n if (!safeWhich('elixir') || !safeWhich('mix')) {\n throw new Error('elixir or mix not found')\n }\n const plan = planElixirLsDownload(installDir)\n await downloadAndExtractArchive(plan)\n const script =\n findFileRecursive(\n installDir,\n process.platform === 'win32' ? 'language_server.bat' : 'language_server.sh'\n ) ?? findFileRecursive(installDir, 'language_server.sh')\n if (!script) {\n throw new Error('language_server script not found after extraction')\n }\n await runBinary(['mix', 'deps.get'], undefined, installDir)\n await runBinary(['mix', 'compile'], undefined, installDir)\n if (process.platform !== 'win32') {\n chmodSync(script, 0o755)\n }\n return true\n}\n\nexport async function installJdtls(installDir: string): Promise<boolean> {\n if (!safeWhich('java')) {\n throw new Error('java not found')\n }\n const javaMajor = await getJavaMajorVersion()\n if (!javaMajor || javaMajor < 21) {\n throw new Error('java 21 or newer required')\n }\n const plan = planJdtlsDownload(installDir)\n await downloadAndExtractArchive(plan)\n const pluginsDir = join(installDir, 'plugins')\n const configDir = join(installDir, 'configuration')\n if (!existsSync(pluginsDir) || !existsSync(configDir)) {\n throw new Error('jdtls install incomplete')\n }\n return true\n}\n\nfunction resolveMetalsBinary(installDir: string): string | null {\n const direct = safeWhich('metals')\n if (direct) return direct\n const local = resolveBinInDir(installDir, 'metals')\n return local || null\n}\n\nexport async function installMetals(installDir: string): Promise<boolean> {\n if (!safeWhich('java')) {\n throw new Error('java not found')\n }\n const javaMajor = await getJavaMajorVersion()\n if (!javaMajor || javaMajor < 17) {\n throw new Error('java 17 or newer required')\n }\n if (resolveMetalsBinary(installDir)) return true\n const installer = safeWhich('cs') ?? safeWhich('coursier')\n if (!installer) {\n throw new Error('coursier not found')\n }\n if (!existsSync(installDir)) {\n mkdirSync(installDir, { recursive: true })\n }\n const version = process.env.PYB_METALS_VERSION?.trim()\n const coord = version ? `metals:${version}` : 'metals'\n const result = await runBinary([installer, 'install', coord, '--install-dir', installDir], undefined, installDir)\n if (!result.ok) {\n throw new Error(result.error || 'metals install failed')\n }\n const binary = resolveBinInDir(installDir, 'metals')\n if (!binary) {\n throw new Error('metals binary not found after install')\n }\n if (process.platform !== 'win32') {\n chmodSync(binary, 0o755)\n }\n return true\n}\n\nfunction getJdtlsLauncherJar(installDir: string): string | null {\n const pluginsDir = join(installDir, 'plugins')\n if (!existsSync(pluginsDir)) return null\n const launcher = readdirSync(pluginsDir).find(name =>\n name.startsWith('org.eclipse.equinox.launcher_') && name.endsWith('.jar')\n )\n if (!launcher) return null\n const launcherPath = join(pluginsDir, launcher)\n return existsSync(launcherPath) ? launcherPath : null\n}\n\nfunction getJdtlsConfigDir(installDir: string): string | null {\n const suffix = process.platform === 'darwin' ? 'mac' : process.platform === 'win32' ? 'win' : 'linux'\n const baseConfig = join(installDir, 'configuration')\n const candidates = [\n join(installDir, `config_${suffix}`),\n join(baseConfig, `config_${suffix}`),\n baseConfig\n ]\n for (const candidate of candidates) {\n if (existsSync(candidate)) return candidate\n }\n return null\n}\n\nexport type LspServerCommand = { command: string; args: string[] }\n\nexport type LspInstallStrategy = () => Promise<boolean>\n\nexport type LspSpawnStrategy = (rootPath: string) => Promise<LspServerCommand | null>\n\nexport type LspRootStrategy = (filePath: string, defaultRoot: string) => Promise<string> | string\n\nexport interface LspServerInfo {\n id: string\n extensions: string[]\n rootMarkers: string[]\n prepare(): Promise<boolean>\n getCommand(rootPath: string): Promise<LspServerCommand | null>\n isEnabled?: (rootPath: string) => Promise<boolean> | boolean\n resolveRoot?: LspRootStrategy\n env?: Record<string, string>\n initializationOptions?: Record<string, unknown>\n languageId?: string\n rootInclude?: string[]\n rootExclude?: string[]\n rootBranches?: string[][]\n priority?: number\n group?: string\n disabled?: boolean\n}\n\nabstract class BaseLspServer implements LspServerInfo {\n abstract id: string\n abstract extensions: string[]\n abstract rootMarkers: string[]\n\n abstract prepare(): Promise<boolean>\n abstract getCommand(rootPath: string): Promise<LspServerCommand | null>\n\n protected isInPath(cmd: string): boolean {\n return Boolean(safeWhich(cmd))\n }\n\n protected getLocalBinPath(binName: string, npmPackageName?: string): string {\n const envPackageRoot = getEnvPackageRoot()\n if (envPackageRoot) {\n const envBin = resolveBinInDir(join(envPackageRoot, 'node_modules', '.bin'), binName)\n if (envBin) return envBin\n }\n const localNodeModulesBin = join(process.cwd(), 'node_modules', '.bin')\n const localBin = resolveBinInDir(localNodeModulesBin, binName)\n if (localBin) return localBin\n\n try {\n const pkgName = npmPackageName || binName\n const resolvePaths = envPackageRoot\n ? [envPackageRoot, process.cwd(), __dirname]\n : [process.cwd(), __dirname]\n const pkgEntry = require.resolve(pkgName, { paths: resolvePaths })\n let current = pkgEntry\n let pkgRoot = ''\n for (let i = 0; i < 5; i++) {\n current = join(current, '..')\n if (existsSync(join(current, 'package.json'))) {\n pkgRoot = current\n break\n }\n }\n if (pkgRoot) {\n const nodeModulesRoot = join(pkgRoot, '..')\n const resolved = resolveBinInDir(join(nodeModulesRoot, '.bin'), binName)\n if (resolved) return resolved\n }\n } catch (e) {}\n\n const lspBin = resolveBinInDir(join(lspInstallDir, 'node_modules', '.bin'), binName)\n if (lspBin) return lspBin\n\n return ''\n }\n\n protected getRuntimeCommand(): string {\n return resolveRuntimeCommand()\n }\n}\n\nexport class ServerDefinition extends BaseLspServer {\n id: string\n extensions: string[]\n rootMarkers: string[]\n private installStrategy?: LspInstallStrategy\n private spawnStrategy?: LspSpawnStrategy\n private enabledStrategy?: (rootPath: string) => Promise<boolean> | boolean\n resolveRoot?: LspRootStrategy\n priority?: number\n group?: string\n\n constructor(options: {\n id: string\n extensions: string[]\n rootMarkers: string[]\n install?: LspInstallStrategy\n spawn?: LspSpawnStrategy\n isEnabled?: (rootPath: string) => Promise<boolean> | boolean\n resolveRoot?: LspRootStrategy\n priority?: number\n group?: string\n }) {\n super()\n this.id = options.id\n this.extensions = options.extensions\n this.rootMarkers = options.rootMarkers\n this.installStrategy = options.install\n this.spawnStrategy = options.spawn\n this.enabledStrategy = options.isEnabled\n this.resolveRoot = options.resolveRoot\n this.priority = options.priority\n this.group = options.group\n }\n\n async prepare(): Promise<boolean> {\n if (this.installStrategy) {\n return runInstallWithPolicy(this.id, this.installStrategy)\n }\n return true\n }\n\n async getCommand(rootPath: string): Promise<LspServerCommand | null> {\n if (this.spawnStrategy) {\n return this.spawnStrategy(rootPath)\n }\n return null\n }\n\n async isEnabled(rootPath: string): Promise<boolean> {\n if (!this.enabledStrategy) return true\n const result = await this.enabledStrategy(rootPath)\n return Boolean(result)\n }\n}\n\nclass OverriddenServer implements LspServerInfo {\n id: string\n extensions: string[]\n rootMarkers: string[]\n resolveRoot?: LspRootStrategy\n env?: Record<string, string>\n initializationOptions?: Record<string, unknown>\n languageId?: string\n rootInclude?: string[]\n rootExclude?: string[]\n rootBranches?: string[][]\n priority?: number\n group?: string\n disabled?: boolean\n private overrideCommand?: string\n private overrideArgs?: string[]\n private enabledStrategy?: (rootPath: string) => Promise<boolean> | boolean\n\n constructor(\n private base: LspServerInfo,\n override: LspServerOverride | undefined,\n globalEnv: Record<string, string> | undefined,\n globalInitializationOptions: Record<string, unknown> | undefined\n ) {\n this.id = base.id\n this.extensions = override?.extensions ?? base.extensions\n this.rootMarkers = override?.rootMarkers ?? base.rootMarkers\n this.resolveRoot = base.resolveRoot\n this.env = mergeStringRecords(mergeStringRecords(base.env, globalEnv), override?.env)\n this.initializationOptions = mergeInitializationOptions(\n mergeInitializationOptions(base.initializationOptions, globalInitializationOptions),\n override?.initializationOptions\n )\n this.languageId = override?.languageId ?? base.languageId\n this.rootInclude = override?.root?.include ?? base.rootInclude\n this.rootExclude = override?.root?.exclude ?? base.rootExclude\n this.rootBranches = override?.root?.branches ?? base.rootBranches\n this.priority = override?.priority ?? base.priority\n this.group = override?.group ?? base.group\n this.disabled = override?.disabled ?? base.disabled\n this.overrideCommand = override?.command\n this.overrideArgs = override?.args\n this.enabledStrategy =\n typeof base.isEnabled === 'function' ? base.isEnabled.bind(base) : undefined\n }\n\n async prepare(): Promise<boolean> {\n return this.base.prepare()\n }\n\n async getCommand(rootPath: string): Promise<LspServerCommand | null> {\n if (this.overrideCommand) {\n return { command: this.overrideCommand, args: this.overrideArgs ?? [] }\n }\n if (this.base.id && this.base.id.length > 0) {\n return this.base.getCommand(rootPath)\n }\n return null\n }\n\n async isEnabled(rootPath: string): Promise<boolean> {\n if (!this.enabledStrategy) return true\n const result = await this.enabledStrategy(rootPath)\n return Boolean(result)\n }\n}\n\nexport class GenericNpmServer extends BaseLspServer {\n id: string\n extensions: string[]\n rootMarkers: string[]\n npmPackage: string\n binName: string\n args: string[]\n\n constructor(id: string, extensions: string[], rootMarkers: string[], npmPackage: string, binName: string, args: string[]) {\n super()\n this.id = id\n this.extensions = extensions\n this.rootMarkers = rootMarkers\n this.npmPackage = npmPackage\n this.binName = binName\n this.args = args\n }\n\n async prepare(): Promise<boolean> {\n if (this.isInPath(this.binName)) {\n return true\n }\n \n const localBin = this.getLocalBinPath(this.binName, this.npmPackage)\n if (existsSync(localBin)) {\n return true\n }\n\n const canInstall = await isAutoInstallEnabled()\n if (!canInstall) {\n return false\n }\n\n debugLogger.info('LSP_INSTALL', { server: this.id, action: 'start' })\n const ok = await bunInstall([this.npmPackage])\n if (!ok) {\n debugLogger.error('LSP_INSTALL_FAILED', { server: this.id })\n return false\n }\n debugLogger.info('LSP_INSTALL', { server: this.id, action: 'success' })\n return true\n }\n\n async getCommand(rootPath: string): Promise<LspServerCommand | null> {\n // Optimization for Windows: Always try to run node script directly to avoid cmd.exe issues\n // We do this BEFORE checking PATH because 'bun run' adds node_modules/.bin to PATH,\n // which points to the .cmd shim that we want to avoid.\n if (process.platform === 'win32') {\n const pkgJsonPaths: string[] = []\n const envPackageRoot = getEnvPackageRoot()\n if (envPackageRoot) {\n const envPkgJson = join(envPackageRoot, 'node_modules', ...this.npmPackage.split('/'), 'package.json')\n if (existsSync(envPkgJson)) {\n pkgJsonPaths.push(envPkgJson)\n }\n }\n try {\n const resolvePaths = envPackageRoot\n ? [envPackageRoot, process.cwd(), __dirname]\n : [process.cwd(), __dirname]\n const resolvedPath = require.resolve(`${this.npmPackage}/package.json`, { paths: resolvePaths })\n if (resolvedPath) {\n pkgJsonPaths.push(resolvedPath)\n }\n } catch (e) {}\n const localPkgJson = join(lspInstallDir, 'node_modules', ...this.npmPackage.split('/'), 'package.json')\n if (existsSync(localPkgJson)) {\n pkgJsonPaths.push(localPkgJson)\n }\n\n for (const pkgJsonPath of pkgJsonPaths) {\n try {\n const pkgJson = require(pkgJsonPath)\n let binScript = ''\n if (typeof pkgJson.bin === 'string') {\n binScript = pkgJson.bin\n } else if (typeof pkgJson.bin === 'object' && pkgJson.bin[this.binName]) {\n binScript = pkgJson.bin[this.binName]\n }\n\n if (binScript) {\n if (this.npmPackage === 'pyright' && binScript.endsWith('langserver.index.js')) {\n const distScript = join(dirname(pkgJsonPath), 'dist', 'pyright-langserver.js')\n if (existsSync(distScript)) {\n return { command: this.getRuntimeCommand(), args: [distScript, ...this.args] }\n }\n }\n\n const scriptPath = join(dirname(pkgJsonPath), binScript)\n if (existsSync(scriptPath)) {\n return { command: this.getRuntimeCommand(), args: [scriptPath, ...this.args] }\n }\n }\n } catch (e) {}\n }\n }\n\n if (this.isInPath(this.binName)) {\n return { command: this.binName, args: this.args }\n }\n \n const localBin = this.getLocalBinPath(this.binName, this.npmPackage)\n if (existsSync(localBin)) {\n return { command: localBin, args: this.args }\n }\n \n return null\n }\n}\n\nclass GenericBinaryServer extends BaseLspServer {\n id: string\n extensions: string[]\n rootMarkers: string[]\n binNames: string[]\n args: string[]\n\n constructor(id: string, extensions: string[], rootMarkers: string[], binNames: string | string[], args: string[]) {\n super()\n this.id = id\n this.extensions = extensions\n this.rootMarkers = rootMarkers\n this.binNames = Array.isArray(binNames) ? binNames : [binNames]\n this.args = args\n }\n\n async prepare(): Promise<boolean> {\n return this.binNames.some(bin => this.isInPath(bin))\n }\n\n async getCommand(rootPath: string): Promise<LspServerCommand | null> {\n for (const bin of this.binNames) {\n if (this.isInPath(bin)) {\n return { command: bin, args: this.args }\n }\n }\n return null\n }\n}\n\nclass GoplsServer extends BaseLspServer {\n id = 'gopls'\n extensions = ['.go', '.mod']\n rootMarkers = ['go.mod', 'go.work', '.git']\n\n async prepare(): Promise<boolean> {\n if (this.isInPath('gopls')) {\n return true\n }\n\n if (!this.isInPath('go')) {\n debugLogger.error('LSP_MISSING_DEP', { server: this.id, error: 'go command not found' })\n addInstallNoticeOnce(\n {\n server: this.id,\n stage: 'failed',\n message: 'go command not found for gopls install',\n at: Date.now()\n },\n 'gopls:missing:go'\n )\n return false\n }\n\n const canInstall = await isAutoInstallEnabled()\n if (!canInstall) {\n return false\n }\n\n return this.installGo()\n }\n\n async getCommand(rootPath: string): Promise<LspServerCommand | null> {\n if (this.isInPath('gopls')) {\n return { command: 'gopls', args: ['serve'] }\n }\n\n const localBin = resolveBinInDir(lspInstallDir, 'gopls')\n if (localBin) {\n return { command: localBin, args: ['serve'] }\n }\n\n return null\n }\n\n private async installGo(): Promise<boolean> {\n try {\n debugLogger.info('LSP_INSTALL', { server: this.id, action: 'start' })\n\n const result = await runBinary(\n ['go', 'install', 'golang.org/x/tools/gopls@latest'],\n {\n GOBIN: lspInstallDir,\n PATH: process.env.PATH ? `${lspInstallDir}${process.platform === 'win32' ? ';' : ':'}${process.env.PATH}` : lspInstallDir\n }\n )\n\n if (!result.ok) {\n debugLogger.error('LSP_INSTALL_FAILED', { server: this.id, error: result.error })\n return false\n }\n\n if (!this.isInPath('gopls') && !resolveBinInDir(lspInstallDir, 'gopls')) {\n debugLogger.warn('LSP_INSTALL_WARNING', { server: this.id, message: 'gopls installed but not found in PATH.' })\n }\n\n debugLogger.info('LSP_INSTALL', { server: this.id, action: 'success' })\n return true\n } catch (e) {\n debugLogger.error('LSP_INSTALL_ERROR', { server: this.id, error: String(e) })\n return false\n }\n }\n}\n\nclass RustAnalyzerServer extends BaseLspServer {\n id = 'rust-analyzer'\n extensions = ['.rs']\n rootMarkers = ['Cargo.toml', 'rust-project.json', '.git']\n\n async prepare(): Promise<boolean> {\n if (this.isInPath('rust-analyzer')) {\n return true\n }\n\n if (this.isInPath('rustup')) {\n const canInstall = await isAutoInstallEnabled()\n if (!canInstall) {\n return false\n }\n return this.installRustup()\n }\n\n debugLogger.warn('LSP_MISSING_DEP', { server: this.id, message: 'rust-analyzer not found and rustup not available. Please install rust-analyzer manually.' })\n addInstallNoticeOnce(\n {\n server: this.id,\n stage: 'failed',\n message: 'rust-analyzer not found and rustup not available',\n at: Date.now()\n },\n 'rust-analyzer:missing:rustup'\n )\n return false\n }\n\n async getCommand(rootPath: string): Promise<LspServerCommand | null> {\n if (this.isInPath('rust-analyzer')) {\n return { command: 'rust-analyzer', args: [] }\n }\n return null\n }\n\n private async installRustup(): Promise<boolean> {\n try {\n debugLogger.info('LSP_INSTALL', { server: this.id, action: 'start' })\n\n const result = await runBinary(['rustup', 'component', 'add', 'rust-analyzer'])\n\n if (!result.ok) {\n debugLogger.error('LSP_INSTALL_FAILED', { server: this.id, error: result.error })\n return false\n }\n\n debugLogger.info('LSP_INSTALL', { server: this.id, action: 'success' })\n return true\n } catch (e) {\n debugLogger.error('LSP_INSTALL_ERROR', { server: this.id, error: String(e) })\n return false\n }\n }\n}\n\n\nexport class LspServerRegistry {\n private static instance: LspServerRegistry\n private servers: LspServerInfo[] = []\n private baseServers: LspServerInfo[] = []\n private globalSettings: LspSettings | undefined\n\n private constructor() {\n // Pyright (GenericNpmServer)\n this.register(new GenericNpmServer(\n 'pyright',\n ['.py', '.pyi'],\n ['pyrightconfig.json', 'pyproject.toml', 'setup.py', 'requirements.txt', 'Pipfile'],\n 'pyright',\n 'pyright-langserver',\n ['--stdio']\n ))\n\n this.register(new ServerDefinition({\n id: 'ty',\n extensions: ['.py', '.pyi'],\n rootMarkers: ['pyproject.toml', 'ty.toml', 'setup.py', 'setup.cfg', 'requirements.txt', 'Pipfile', 'pyrightconfig.json'],\n spawn: async (rootPath) => {\n const binary = resolveTyBinary(rootPath)\n if (!binary) return null\n return { command: binary, args: ['server'] }\n },\n priority: -1\n }))\n \n this.register(new GoplsServer())\n this.register(new RustAnalyzerServer())\n this.register(new GenericNpmServer(\n 'bash-language-server',\n ['.sh', '.bash', '.zsh'],\n ['.git'],\n 'bash-language-server',\n 'bash-language-server',\n ['start']\n ))\n\n this.register(new ServerDefinition({\n id: 'deno',\n extensions: ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '.mts', '.cts'],\n rootMarkers: ['deno.json', 'deno.jsonc'],\n isEnabled: async (rootPath) => hasDenoConfig(rootPath),\n spawn: async (rootPath) => {\n const deno = safeWhich('deno')\n if (!deno) return null\n return { command: deno, args: ['lsp'] }\n },\n priority: 5\n }))\n\n // TypeScript/JavaScript (typescript-language-server)\n this.register(new GenericNpmServer(\n 'typescript-language-server',\n ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'],\n ['tsconfig.json', 'package.json', 'jsconfig.json'],\n 'typescript-language-server',\n 'typescript-language-server',\n ['--stdio']\n ))\n\n // Tier 1: Easy NPM-based Servers\n // YAML\n this.register(new GenericNpmServer(\n 'yaml-language-server',\n ['.yaml', '.yml'],\n [],\n 'yaml-language-server',\n 'yaml-language-server',\n ['--stdio']\n ))\n\n // Dockerfile\n this.register(new GenericNpmServer(\n 'dockerfile-language-server',\n ['Dockerfile', '.dockerfile'],\n [],\n 'dockerfile-language-server-nodejs',\n 'docker-langserver',\n ['--stdio']\n ))\n\n // Vue\n this.register(new ServerDefinition({\n id: 'vue-language-server',\n extensions: ['.vue'],\n rootMarkers: ['package.json'],\n install: async () => {\n const canInstall = await isAutoInstallEnabled()\n if (!canInstall) return false\n ensureInstallDir()\n return npmInstallIfMissing(['@vue/language-server'])\n },\n spawn: async (rootPath) =>\n multiResolveBinary({\n binNames: ['vue-language-server'],\n args: ['--stdio'],\n packageName: '@vue/language-server',\n cwd: rootPath\n })\n }))\n\n this.register(new ServerDefinition({\n id: 'eslint',\n extensions: ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '.mts', '.cts', '.vue'],\n rootMarkers: [\n 'package-lock.json',\n 'bun.lockb',\n 'bun.lock',\n 'pnpm-lock.yaml',\n 'yarn.lock',\n 'package.json'\n ],\n install: async () => installEslintServer(),\n spawn: async (rootPath) => {\n const serverPath = getEslintServerPath()\n if (!existsSync(serverPath)) return null\n const hasEslint = await safeResolvePackage('eslint', rootPath)\n if (!hasEslint) return null\n const runtimeCommand = resolveBunRuntimePath() || resolveRuntimeCommand()\n return { command: runtimeCommand, args: [serverPath, '--stdio'] }\n },\n priority: -10,\n group: 'lint'\n }))\n\n this.register(new ServerDefinition({\n id: 'oxlint',\n extensions: ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '.mts', '.cts', '.vue', '.astro', '.svelte'],\n rootMarkers: [\n '.oxlintrc.json',\n 'package-lock.json',\n 'bun.lockb',\n 'bun.lock',\n 'pnpm-lock.yaml',\n 'yarn.lock',\n 'package.json'\n ],\n spawn: async (rootPath) => {\n const lintCommand = multiResolveBinary({\n binNames: ['oxlint'],\n args: ['--lsp'],\n cwd: rootPath\n })\n if (lintCommand) return lintCommand\n const serverCommand = multiResolveBinary({\n binNames: ['oxc_language_server'],\n cwd: rootPath\n })\n if (serverCommand) return serverCommand\n return multiResolveBinary({\n binNames: ['oxlint'],\n args: ['--lsp'],\n packageName: 'oxlint',\n cwd: rootPath\n })\n },\n priority: -5,\n group: 'lint'\n }))\n\n this.register(new ServerDefinition({\n id: 'biome',\n extensions: [\n '.ts',\n '.tsx',\n '.js',\n '.jsx',\n '.mjs',\n '.cjs',\n '.mts',\n '.cts',\n '.json',\n '.jsonc',\n '.vue',\n '.astro',\n '.svelte',\n '.css',\n '.graphql',\n '.gql',\n '.html'\n ],\n rootMarkers: [\n 'biome.json',\n 'biome.jsonc',\n 'package-lock.json',\n 'bun.lockb',\n 'bun.lock',\n 'pnpm-lock.yaml',\n 'yarn.lock'\n ],\n spawn: async (rootPath) =>\n multiResolveBinary({\n binNames: ['biome'],\n args: ['lsp-proxy', '--stdio'],\n packageName: 'biome',\n cwd: rootPath\n }),\n priority: -5,\n group: 'lint'\n }))\n\n // HTML/CSS/JSON (vscode-langservers-extracted)\n // Note: The binary names might vary, usually `vscode-html-language-server`, `vscode-css-language-server`\n // Let's add them individually but sharing the same package install? \n // GenericNpmServer assumes 1 package = 1 binary. \n // vscode-langservers-extracted provides multiple bins.\n // We can just instantiate multiple GenericNpmServer with the same package name. It's fine, it will just try to install it again (npm handles it).\n \n this.register(new GenericNpmServer(\n 'html-language-server',\n ['.html', '.htm'],\n [],\n 'vscode-langservers-extracted',\n 'vscode-html-language-server',\n ['--stdio']\n ))\n\n this.register(new GenericNpmServer(\n 'css-language-server',\n ['.css', '.scss', '.less'],\n [],\n 'vscode-langservers-extracted',\n 'vscode-css-language-server',\n ['--stdio']\n ))\n\n this.register(new GenericNpmServer(\n 'json-language-server',\n ['.json', '.jsonc'],\n [],\n 'vscode-langservers-extracted',\n 'vscode-json-language-server',\n ['--stdio']\n ))\n\n // Tier 2: Easy NPM-based Servers (More)\n // PHP (intelephense)\n this.register(new GenericNpmServer(\n 'intelephense',\n ['.php'],\n ['composer.json'],\n 'intelephense',\n 'intelephense',\n ['--stdio']\n ))\n\n // Svelte\n this.register(new ServerDefinition({\n id: 'svelte-language-server',\n extensions: ['.svelte'],\n rootMarkers: ['package.json'],\n install: async () => {\n const canInstall = await isAutoInstallEnabled()\n if (!canInstall) return false\n ensureInstallDir()\n return npmInstallIfMissing(['svelte-language-server'])\n },\n spawn: async (rootPath) =>\n multiResolveBinary({\n binNames: ['svelte-language-server'],\n args: ['--stdio'],\n packageName: 'svelte-language-server',\n cwd: rootPath\n })\n }))\n\n // Astro\n this.register(new ServerDefinition({\n id: 'astro-ls',\n extensions: ['.astro'],\n rootMarkers: ['package.json'],\n install: async () => {\n const canInstall = await isAutoInstallEnabled()\n if (!canInstall) return false\n ensureInstallDir()\n return npmInstallIfMissing(['@astrojs/language-server'])\n },\n spawn: async (rootPath) =>\n multiResolveBinary({\n binNames: ['astro-ls'],\n args: ['--stdio'],\n packageName: '@astrojs/language-server',\n cwd: rootPath\n })\n }))\n\n // Prisma\n this.register(new GenericNpmServer(\n 'prisma-language-server',\n ['.prisma'],\n ['schema.prisma'],\n '@prisma/language-server',\n 'prisma-language-server',\n ['--stdio']\n ))\n\n // GraphQL\n this.register(new GenericNpmServer(\n 'graphql-lsp',\n ['.graphql', '.gql'],\n ['.graphqlrc', 'graphql.config.js'],\n 'graphql-language-service-cli',\n 'graphql-lsp',\n ['server', '-m', 'stream']\n ))\n\n // Tier 3: Binary Path Detection (System Dependencies)\n this.register(new ServerDefinition({\n id: 'jdtls',\n extensions: ['.java'],\n rootMarkers: ['pom.xml', 'build.gradle', 'build.gradle.kts', '.project', '.classpath'],\n install: async () => {\n const installDir = join(lspInstallDir, 'jdtls')\n const launcherJar = getJdtlsLauncherJar(installDir)\n const configDir = getJdtlsConfigDir(installDir)\n if (launcherJar && configDir) return true\n const canInstall = await isAutoInstallEnabled()\n if (!canInstall) return false\n ensureInstallDir()\n try {\n await installJdtls(installDir)\n return true\n } catch (error) {\n debugLogger.error('LSP_INSTALL_FAILED', { server: 'jdtls', error: String(error) })\n return false\n }\n },\n spawn: async () => {\n const java = safeWhich('java')\n if (!java) return null\n const javaMajor = await getJavaMajorVersion()\n if (!javaMajor || javaMajor < 21) return null\n const installDir = join(lspInstallDir, 'jdtls')\n const launcherJar = getJdtlsLauncherJar(installDir)\n const configDir = getJdtlsConfigDir(installDir)\n if (!launcherJar || !configDir) return null\n const dataDir = mkdtempSync(join(tmpdir(), 'pyb-jdtls-'))\n return {\n command: java,\n args: [\n '-jar',\n launcherJar,\n '-configuration',\n configDir,\n '-data',\n dataDir,\n '-Declipse.application=org.eclipse.jdt.ls.core.id1',\n '-Dosgi.bundles.defaultStartLevel=4',\n '-Declipse.product=org.eclipse.jdt.ls.core.product',\n '-Dlog.level=ALL',\n '--add-modules=ALL-SYSTEM',\n '--add-opens',\n 'java.base/java.util=ALL-UNNAMED',\n '--add-opens',\n 'java.base/java.lang=ALL-UNNAMED'\n ]\n }\n }\n }))\n\n // C/C++ (clangd)\n this.register(new GenericBinaryServer(\n 'clangd',\n ['.c', '.cpp', '.h', '.hpp', '.cc'],\n ['compile_commands.json', '.clang-format'],\n 'clangd',\n ['--stdio']\n ))\n\n // Ruby (ruby-lsp)\n this.register(new GenericBinaryServer(\n 'ruby-lsp',\n ['.rb', '.rake'],\n ['Gemfile', '.ruby-version'],\n 'ruby-lsp',\n ['--stdio']\n ))\n\n this.register(new ServerDefinition({\n id: 'lua-language-server',\n extensions: ['.lua'],\n rootMarkers: [\n '.luarc.json',\n '.luarc.jsonc',\n '.luacheckrc',\n '.stylua.toml',\n 'stylua.toml',\n 'selene.toml',\n 'selene.yml'\n ],\n install: async () => {\n const installDir = join(lspInstallDir, 'lua-language-server')\n const existing = findFileRecursive(\n installDir,\n process.platform === 'win32' ? 'lua-language-server.exe' : 'lua-language-server'\n )\n if (existing) return true\n if (safeWhich('lua-language-server') || safeWhich('lua-ls')) return true\n const canInstall = await isAutoInstallEnabled()\n if (!canInstall) return false\n ensureInstallDir()\n try {\n await installLuaLs(installDir)\n return true\n } catch (error) {\n debugLogger.error('LSP_INSTALL_FAILED', { server: 'lua-language-server', error: String(error) })\n return false\n }\n },\n spawn: async (rootPath) => {\n const direct = multiResolveBinary({\n binNames: ['lua-language-server', 'lua-ls'],\n cwd: rootPath\n })\n if (direct) return direct\n const installDir = join(lspInstallDir, 'lua-language-server')\n const binary = findFileRecursive(\n installDir,\n process.platform === 'win32' ? 'lua-language-server.exe' : 'lua-language-server'\n )\n if (!binary) return null\n return { command: binary, args: [] }\n }\n }))\n\n // Terraform (terraform-ls)\n this.register(new GenericBinaryServer(\n 'terraform-ls',\n ['.tf', '.tfvars'],\n [],\n 'terraform-ls',\n ['serve']\n ))\n\n // Kotlin (kotlin-language-server)\n this.register(new GenericBinaryServer(\n 'kotlin-language-server',\n ['.kt', '.kts'],\n ['build.gradle.kts'],\n ['kotlin-ls', 'kotlin-language-server'],\n []\n ))\n\n this.register(new ServerDefinition({\n id: 'elixir-ls',\n extensions: ['.ex', '.exs'],\n rootMarkers: ['mix.exs', 'mix.lock'],\n install: async () => {\n const installDir = join(lspInstallDir, 'elixir-ls')\n const existing = findFileRecursive(\n installDir,\n process.platform === 'win32' ? 'language_server.bat' : 'language_server.sh'\n )\n if (existing) return true\n if (safeWhich('elixir-ls')) return true\n const canInstall = await isAutoInstallEnabled()\n if (!canInstall) return false\n ensureInstallDir()\n try {\n await installElixirLs(installDir)\n return true\n } catch (error) {\n debugLogger.error('LSP_INSTALL_FAILED', { server: 'elixir-ls', error: String(error) })\n return false\n }\n },\n spawn: async (rootPath) => {\n if (safeWhich('elixir-ls')) {\n return { command: 'elixir-ls', args: [] }\n }\n const installDir = join(lspInstallDir, 'elixir-ls')\n const binary =\n findFileRecursive(installDir, process.platform === 'win32' ? 'language_server.bat' : 'language_server.sh') ??\n findFileRecursive(installDir, 'language_server.sh')\n if (!binary) return null\n return { command: binary, args: [] }\n }\n }))\n\n this.register(new ServerDefinition({\n id: 'zls',\n extensions: ['.zig', '.zon'],\n rootMarkers: ['build.zig'],\n install: async () => {\n const installDir = join(lspInstallDir, 'zls')\n const existing = findFileRecursive(installDir, process.platform === 'win32' ? 'zls.exe' : 'zls')\n if (existing) return true\n if (safeWhich('zls')) return true\n const canInstall = await isAutoInstallEnabled()\n if (!canInstall) return false\n ensureInstallDir()\n try {\n await installZls(installDir)\n return true\n } catch (error) {\n debugLogger.error('LSP_INSTALL_FAILED', { server: 'zls', error: String(error) })\n return false\n }\n },\n spawn: async (rootPath) => {\n const direct = multiResolveBinary({ binNames: ['zls'], cwd: rootPath })\n if (direct) return direct\n const installDir = join(lspInstallDir, 'zls')\n const binary = findFileRecursive(installDir, process.platform === 'win32' ? 'zls.exe' : 'zls')\n if (!binary) return null\n return { command: binary, args: [] }\n }\n }))\n\n // C# (csharp-ls)\n this.register(new GenericBinaryServer(\n 'csharp-ls',\n ['.cs'],\n ['.csproj', '.sln'],\n 'csharp-ls',\n []\n ))\n\n // F# (fsautocomplete)\n this.register(new GenericBinaryServer(\n 'fsautocomplete',\n ['.fs', '.fsi', '.fsx'],\n ['.fsproj', '.sln'],\n 'fsautocomplete',\n ['--background-service-enabled']\n ))\n\n // Swift (sourcekit-lsp)\n this.register(new GenericBinaryServer(\n 'sourcekit-lsp',\n ['.swift'],\n ['Package.swift'],\n 'sourcekit-lsp',\n []\n ))\n\n // Dart (dart language-server)\n this.register(new GenericBinaryServer(\n 'dart',\n ['.dart'],\n ['pubspec.yaml'],\n 'dart',\n ['language-server']\n ))\n\n // OCaml (ocamllsp)\n this.register(new GenericBinaryServer(\n 'ocamllsp',\n ['.ml', '.mli'],\n ['dune-project'],\n ['ocaml-lsp', 'ocamllsp'],\n []\n ))\n\n // Gleam (gleam lsp)\n this.register(new GenericBinaryServer(\n 'gleam',\n ['.gleam'],\n ['gleam.toml'],\n 'gleam',\n ['lsp']\n ))\n\n // Clojure (clojure-lsp)\n this.register(new GenericBinaryServer(\n 'clojure-lsp',\n ['.clj', '.cljs', '.cljc', '.edn'],\n ['deps.edn', 'project.clj'],\n 'clojure-lsp',\n []\n ))\n\n // Nix (nixd)\n this.register(new GenericBinaryServer(\n 'nixd',\n ['.nix'],\n ['flake.nix'],\n 'nixd',\n []\n ))\n\n // Typst (tinymist)\n this.register(new GenericBinaryServer(\n 'tinymist',\n ['.typ'],\n [],\n 'tinymist',\n []\n ))\n\n // Scala (metals)\n this.register(new ServerDefinition({\n id: 'metals',\n extensions: ['.scala', '.sbt', '.sc'],\n rootMarkers: ['build.sbt', 'build.sc', '.bsp', '.metals'],\n install: async () => {\n const installDir = join(lspInstallDir, 'metals')\n if (resolveMetalsBinary(installDir)) return true\n const canInstall = await isAutoInstallEnabled()\n if (!canInstall) return false\n ensureInstallDir()\n try {\n await installMetals(installDir)\n return true\n } catch (error) {\n debugLogger.error('LSP_INSTALL_FAILED', { server: 'metals', error: String(error) })\n return false\n }\n },\n spawn: async () => {\n const installDir = join(lspInstallDir, 'metals')\n const binary = resolveMetalsBinary(installDir)\n if (!binary) return null\n return { command: binary, args: ['--stdio'] }\n }\n }))\n\n // Haskell (haskell-language-server-wrapper)\n this.register(new GenericBinaryServer(\n 'haskell-language-server',\n ['.hs', '.lhs'],\n ['stack.yaml', 'cabal.project', '*.cabal'],\n 'haskell-language-server-wrapper',\n ['--lsp']\n ))\n\n // Tex/Latex (texlab)\n this.register(new GenericBinaryServer(\n 'texlab',\n ['.tex', '.bib'],\n [],\n 'texlab',\n []\n ))\n this.applyConfigOverrides(loadLspSettingsFromFiles())\n }\n\n static getInstance(): LspServerRegistry {\n if (!LspServerRegistry.instance) {\n LspServerRegistry.instance = new LspServerRegistry()\n }\n return LspServerRegistry.instance\n }\n\n register(server: LspServerInfo) {\n this.baseServers.push(server)\n this.servers.push(server)\n }\n\n getServerForExtension(ext: string): LspServerInfo | null {\n const servers = this.getServersForExtension(ext)\n return servers[0] ?? null\n }\n\n getServersForExtension(ext: string): LspServerInfo[] {\n const candidates = this.servers.filter(server => server.extensions.includes(ext))\n const enabled = candidates.filter(server => !this.isServerDisabled(server))\n const grouped = this.applyGroupStrategies(enabled, ext)\n return grouped.length ? grouped : this.sortByPriority(enabled)\n }\n\n getLanguageIdForExtension(ext: string): string {\n const map = this.getLanguageMap()\n return map[ext] ?? 'plaintext'\n }\n\n getLanguageCategoryForExtension(ext: string): string | undefined {\n const languageId = this.getLanguageIdForExtension(ext)\n return this.getLanguageCategoryForLanguageId(languageId)\n }\n\n getLanguageCategoryForLanguageId(languageId: string): string | undefined {\n const categories = this.getLanguageCategories()\n return categories[languageId]\n }\n\n getSettings(): LspSettings | undefined {\n return this.globalSettings\n }\n\n reloadSettingsFromFiles(options?: { projectDir?: string; homeDir?: string }): void {\n this.applyConfigOverrides(loadLspSettingsFromFiles(options))\n }\n\n applyConfigOverrides(settings?: LspSettings): void {\n const merged = mergeLspSettings(this.globalSettings, settings)\n const withExperiments = applyExperimentalSwitches(merged)\n this.globalSettings = withExperiments\n const overrides = withExperiments?.servers\n const baseIds = new Set(this.baseServers.map(server => server.id))\n const customServers: LspServerInfo[] = []\n if (overrides) {\n for (const [id, override] of Object.entries(overrides)) {\n if (baseIds.has(id)) continue\n if (!override.command) continue\n if (!override.extensions || override.extensions.length === 0) continue\n const base = new ServerDefinition({\n id,\n extensions: override.extensions,\n rootMarkers: override.rootMarkers ?? [],\n spawn: async () => ({ command: override.command ?? '', args: override.args ?? [] }),\n priority: override.priority,\n group: override.group\n })\n customServers.push(\n new OverriddenServer(\n base,\n override,\n withExperiments?.env,\n withExperiments?.initializationOptions\n )\n )\n }\n }\n this.servers = [\n ...this.baseServers.map(\n server =>\n new OverriddenServer(\n server,\n withExperiments?.servers?.[server.id],\n withExperiments?.env,\n withExperiments?.initializationOptions\n )\n ),\n ...customServers\n ]\n }\n\n resetOverridesForTests(): void {\n this.globalSettings = undefined\n this.servers = [...this.baseServers]\n }\n\n private getLanguageMap(): Record<string, string> {\n return { ...DEFAULT_LANGUAGE_MAP, ...(this.globalSettings?.languageMap ?? {}) }\n }\n\n private getLanguageCategories(): Record<string, string> {\n return { ...DEFAULT_LANGUAGE_CATEGORIES, ...(this.globalSettings?.languageCategories ?? {}) }\n }\n\n private isServerDisabled(server: LspServerInfo): boolean {\n if (server.disabled) return true\n const disabledServers = this.globalSettings?.disabledServers\n return Boolean(disabledServers?.includes(server.id))\n }\n\n private sortByPriority(servers: LspServerInfo[]): LspServerInfo[] {\n return [...servers].sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0))\n }\n\n private applyGroupStrategies(servers: LspServerInfo[], ext: string): LspServerInfo[] {\n const groups = this.globalSettings?.serverGroups\n if (!groups || groups.length === 0) return []\n const byId = new Map(servers.map(server => [server.id, server]))\n const results: LspServerInfo[] = []\n const used = new Set<string>()\n for (const group of groups) {\n if (group.extensions && !group.extensions.includes(ext)) continue\n const groupServers = group.serverIds\n .map(id => byId.get(id))\n .filter((server): server is LspServerInfo => Boolean(server))\n if (groupServers.length === 0) continue\n const sorted = this.sortByPriority(groupServers)\n if (group.strategy === 'parallel') {\n for (const server of sorted) {\n if (used.has(server.id)) continue\n used.add(server.id)\n results.push(server)\n }\n continue\n }\n const selected = sorted[0]\n if (selected && !used.has(selected.id)) {\n used.add(selected.id)\n results.push(selected)\n }\n }\n return results\n }\n}\n", "import { join, relative } from 'path'\nimport { existsSync, statSync } from 'fs'\nimport { resolveXdgDataPath } from '@utils/config/env'\nimport { minimatch } from 'minimatch'\n\nexport function getToolsDir(): string {\n return resolveXdgDataPath('tools')\n}\n\nexport function getLspBinDir(): string {\n return join(getToolsDir(), 'bin')\n}\n\nexport async function findNearestRoot(\n startDir: string,\n markers: string[],\n options?: {\n include?: string[]\n exclude?: string[]\n branches?: string[][]\n filePath?: string\n }\n): Promise<string | undefined> {\n const filePath = options?.filePath\n if (filePath) {\n const normalizedFile = filePath.replace(/\\\\/g, '/')\n const relativeToStart = relative(startDir, filePath).replace(/\\\\/g, '/')\n const matchesAny = (patterns: string[]) =>\n patterns.some(pattern => {\n if (minimatch(normalizedFile, pattern, { dot: true })) return true\n if (relativeToStart && !relativeToStart.startsWith('..')) {\n return minimatch(relativeToStart, pattern, { dot: true })\n }\n return false\n })\n if (options?.exclude && matchesAny(options.exclude)) return undefined\n if (options?.include && !matchesAny(options.include)) return undefined\n }\n\n if (options?.branches && options.branches.length > 0) {\n for (const branch of options.branches) {\n const resolved = await findNearestRoot(startDir, branch, {\n ...options,\n branches: undefined\n })\n if (resolved) return resolved\n }\n }\n let current = startDir\n while (true) {\n for (const marker of markers) {\n const p = join(current, marker)\n if (existsSync(p)) {\n return current\n }\n }\n const parent = join(current, '..')\n if (parent === current) {\n break\n }\n current = parent\n }\n return undefined\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA,SAAS,QAAAA,OAAM,SAAS,gBAAgB;AACxC,SAAS,qBAAqB;AAC9B,SAAS,cAAAC,aAAY,WAAW,aAAa,QAAQ,aAAa,eAAe,WAAW,YAAY,YAAAC,iBAAgB;AACxH,SAAS,cAAc;AACvB,SAAS,aAAa;AACtB,SAAS,qBAAqB;AAC9B,OAAO,WAAW;;;ACNlB,SAAS,MAAM,gBAAgB;AAC/B,SAAS,kBAA4B;AAErC,SAAS,iBAAiB;AAEnB,SAAS,cAAsB;AACpC,SAAO,mBAAmB,OAAO;AACnC;AAEO,SAAS,eAAuB;AACrC,SAAO,KAAK,YAAY,GAAG,KAAK;AAClC;AAEA,eAAsB,gBACpB,UACA,SACA,SAM6B;AAC7B,QAAM,WAAW,SAAS;AAC1B,MAAI,UAAU;AACZ,UAAM,iBAAiB,SAAS,QAAQ,OAAO,GAAG;AAClD,UAAM,kBAAkB,SAAS,UAAU,QAAQ,EAAE,QAAQ,OAAO,GAAG;AACvE,UAAM,aAAa,CAAC,aAClB,SAAS,KAAK,aAAW;AACvB,UAAI,UAAU,gBAAgB,SAAS,EAAE,KAAK,KAAK,CAAC,EAAG,QAAO;AAC9D,UAAI,mBAAmB,CAAC,gBAAgB,WAAW,IAAI,GAAG;AACxD,eAAO,UAAU,iBAAiB,SAAS,EAAE,KAAK,KAAK,CAAC;AAAA,MAC1D;AACA,aAAO;AAAA,IACT,CAAC;AACH,QAAI,SAAS,WAAW,WAAW,QAAQ,OAAO,EAAG,QAAO;AAC5D,QAAI,SAAS,WAAW,CAAC,WAAW,QAAQ,OAAO,EAAG,QAAO;AAAA,EAC/D;AAEA,MAAI,SAAS,YAAY,QAAQ,SAAS,SAAS,GAAG;AACpD,eAAW,UAAU,QAAQ,UAAU;AACrC,YAAM,WAAW,MAAM,gBAAgB,UAAU,QAAQ;AAAA,QACvD,GAAG;AAAA,QACH,UAAU;AAAA,MACZ,CAAC;AACD,UAAI,SAAU,QAAO;AAAA,IACvB;AAAA,EACF;AACA,MAAI,UAAU;AACd,SAAO,MAAM;AACX,eAAW,UAAU,SAAS;AAC5B,YAAM,IAAI,KAAK,SAAS,MAAM;AAC9B,UAAI,WAAW,CAAC,GAAG;AACjB,eAAO;AAAA,MACT;AAAA,IACF;AACA,UAAM,SAAS,KAAK,SAAS,IAAI;AACjC,QAAI,WAAW,SAAS;AACtB;AAAA,IACF;AACA,cAAU;AAAA,EACZ;AACA,SAAO;AACT;;;ADlDA,IAAM,aAAa,cAAc,YAAY,GAAG;AAChD,IAAM,YAAY,QAAQ,UAAU;AACpC,IAAM,cAAc,cAAc,YAAY,GAAG;AAEjD,IAAM,gBAAgB,aAAa;AACnC,IAAM,oBAAoB,MAAM;AAC9B,QAAM,OAAO,QAAQ,IAAI,kBAAkB,KAAK;AAChD,SAAO,QAAQ;AACjB;AAQA,IAAM,gBAAgB,MACnB,WAAwD;AAE3D,IAAM,YAAY,CAAC,QAA+B;AAChD,QAAM,MAAM,cAAc;AAC1B,MAAI,KAAK,MAAO,QAAO,IAAI,MAAM,GAAG;AACpC,MAAI;AACF,WAAO,MAAM,KAAK,GAAG;AAAA,EACvB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,IAAM,qBAAqB,OAAO,MAAc,aAAuC;AACrF,QAAM,MAAM,cAAc;AAC1B,MAAI,KAAK,SAAS;AAChB,UAAM,IAAI,QAAQ,MAAM,QAAQ;AAChC,WAAO;AAAA,EACT;AACA,MAAI;AACF,gBAAY,QAAQ,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC/C,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,IAAM,eAAe,OACnB,KACA,YACkE;AAClE,QAAM,MAAM,cAAc;AAC1B,MAAI,KAAK,OAAO;AACd,UAAM,OAAO,IAAI,MAAM;AAAA,MACrB;AAAA,MACA,KAAK,QAAQ;AAAA,MACb,KAAK,QAAQ;AAAA,MACb,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT,CAAC;AACD,UAAM,CAAC,QAAQ,QAAQ,QAAQ,IAAI,MAAM,QAAQ,IAAI;AAAA,MACnD,IAAI,SAAS,KAAK,MAAM,EAAE,KAAK;AAAA,MAC/B,IAAI,SAAS,KAAK,MAAM,EAAE,KAAK;AAAA,MAC/B,KAAK;AAAA,IACP,CAAC;AACD,WAAO,EAAE,QAAQ,QAAQ,SAAS;AAAA,EACpC;AACA,SAAO,MAAM,IAAI,QAAQ,aAAW;AAClC,UAAM,CAAC,SAAS,GAAG,IAAI,IAAI;AAC3B,UAAM,QAAQ,MAAM,SAAS,MAAM;AAAA,MACjC,KAAK,QAAQ;AAAA,MACb,KAAK,QAAQ;AAAA,MACb,OAAO,CAAC,UAAU,QAAQ,MAAM;AAAA,IAClC,CAAC;AACD,QAAI,SAAS;AACb,QAAI,SAAS;AACb,UAAM,QAAQ,GAAG,QAAQ,WAAS;AAChC,gBAAU,MAAM,SAAS;AAAA,IAC3B,CAAC;AACD,UAAM,QAAQ,GAAG,QAAQ,WAAS;AAChC,gBAAU,MAAM,SAAS;AAAA,IAC3B,CAAC;AACD,UAAM,GAAG,SAAS,WAAS;AACzB,cAAQ,EAAE,QAAQ,QAAQ,GAAG,MAAM,GAAG,OAAO,KAAK,CAAC,IAAI,UAAU,EAAE,CAAC;AAAA,IACtE,CAAC;AACD,UAAM,GAAG,SAAS,UAAQ;AACxB,cAAQ,EAAE,QAAQ,QAAQ,UAAU,QAAQ,EAAE,CAAC;AAAA,IACjD,CAAC;AAAA,EACH,CAAC;AACH;AASA,IAAM,iBAAqC,CAAC;AAC5C,IAAM,oBAAoB,oBAAI,IAAY;AAC1C,IAAM,oBAAoB,oBAAI,IAAI;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,SAAS,iBAAiB,QAA0B;AAClD,iBAAe,KAAK,MAAM;AAC1B,MAAI,eAAe,SAAS,IAAI;AAC9B,mBAAe,MAAM;AAAA,EACvB;AACF;AAEA,SAAS,qBAAqB,QAA0B,KAAa;AACnE,MAAI,kBAAkB,IAAI,GAAG,EAAG;AAChC,oBAAkB,IAAI,GAAG;AACzB,mBAAiB,MAAM;AACzB;AAEO,SAAS,oBAAwC;AACtD,SAAO,CAAC,GAAG,cAAc;AAC3B;AAEO,SAAS,gCAAsC;AACpD,iBAAe,SAAS;AACxB,oBAAkB,MAAM;AAC1B;AAEA,SAAS,aAAa,OAAqC;AACzD,MAAI,UAAU,OAAW,QAAO;AAChC,QAAM,aAAa,MAAM,KAAK,EAAE,YAAY;AAC5C,MAAI,CAAC,WAAY,QAAO;AACxB,MAAI,CAAC,KAAK,QAAQ,OAAO,IAAI,EAAE,SAAS,UAAU,EAAG,QAAO;AAC5D,MAAI,CAAC,KAAK,SAAS,MAAM,KAAK,EAAE,SAAS,UAAU,EAAG,QAAO;AAC7D,SAAO;AACT;AAEA,SAAS,sBAAsB,KAAqB;AAClD,QAAM,MAAM,QAAQ,IAAI,GAAG,GAAG,KAAK;AACnC,MAAI,CAAC,IAAK,QAAO;AACjB,SAAOC,YAAW,GAAG,IAAI,MAAM;AACjC;AAEA,SAAS,qBAAqB,OAAwB;AACpD,QAAM,OAAO,SAAS,KAAK,EAAE,YAAY;AACzC,SAAO,SAAS,UAAU,SAAS,cAAc,SAAS,YAAY,SAAS;AACjF;AAEA,SAAS,oBAAoB,OAAwB;AACnD,QAAM,OAAO,SAAS,KAAK,EAAE,YAAY;AACzC,SAAO,SAAS,SAAS,SAAS;AACpC;AAEA,SAAS,wBAAgC;AACvC,QAAM,UAAU,sBAAsB,eAAe;AACrD,MAAI,QAAS,QAAO;AACpB,QAAM,SAAS,sBAAsB,cAAc;AACnD,MAAI,OAAQ,QAAO;AACnB,MAAI,QAAQ,YAAYA,YAAW,QAAQ,QAAQ,GAAG;AACpD,QAAI,qBAAqB,QAAQ,QAAQ,KAAK,oBAAoB,QAAQ,QAAQ,GAAG;AACnF,aAAO,QAAQ;AAAA,IACjB;AAAA,EACF;AACA,QAAM,UAAU,UAAU,MAAM;AAChC,MAAI,WAAWA,YAAW,OAAO,GAAG;AAClC,WAAO;AAAA,EACT;AACA,QAAM,SAAS,UAAU,KAAK;AAC9B,MAAI,UAAUA,YAAW,MAAM,GAAG;AAChC,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,wBAAgC;AACvC,QAAM,SAAS,sBAAsB,cAAc;AACnD,MAAI,OAAQ,QAAO;AACnB,MAAI,QAAQ,YAAYA,YAAW,QAAQ,QAAQ,KAAK,oBAAoB,QAAQ,QAAQ,GAAG;AAC7F,WAAO,QAAQ;AAAA,EACjB;AACA,QAAM,SAAS,UAAU,KAAK;AAC9B,MAAI,UAAUA,YAAW,MAAM,EAAG,QAAO;AACzC,SAAO;AACT;AAEA,eAAe,uBAAyC;AACtD,QAAM,WAAW;AAAA,IACf,QAAQ,IAAI,4BACV,QAAQ,IAAI,2BACZ,QAAQ,IAAI;AAAA,EAChB;AACA,MAAI,aAAa,KAAM,QAAO;AAC9B,QAAM,UAAU;AAAA,IACd,QAAQ,IAAI,wBAAwB,QAAQ,IAAI;AAAA,EAClD;AACA,MAAI,YAAY,MAAO,QAAO;AAC9B,SAAO,IAAI,kBAAkB;AAC/B;AAEA,SAAS,4BAAqC;AAC5C,QAAM,WAAW;AAAA,IACf,QAAQ,IAAI,iCAAiC,QAAQ,IAAI;AAAA,EAC3D;AACA,MAAI,aAAa,KAAM,QAAO;AAC9B,QAAM,UAAU,aAAa,QAAQ,IAAI,0BAA0B;AACnE,MAAI,YAAY,MAAO,QAAO;AAC9B,SAAO;AACT;AAEA,SAAS,sBAAqC;AAC5C,QAAM,WAAW,OAAO,SAAS,QAAQ,IAAI,8BAA8B,IAAI,EAAE;AACjF,MAAI,OAAO,SAAS,QAAQ,GAAG;AAC7B,QAAI,YAAY,EAAG,QAAO;AAC1B,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,eAAe,qBAAqB,UAAkB,SAA+C;AACnG,QAAM,UAAU,kBAAkB,IAAI,QAAQ;AAC9C,MAAI,WAAW,CAAC,0BAA0B,GAAG;AAC3C;AAAA,MACE;AAAA,QACE,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,SAAS,GAAG,QAAQ;AAAA,QACpB,IAAI,KAAK,IAAI;AAAA,MACf;AAAA,MACA,GAAG,QAAQ;AAAA,IACb;AACA,QAAI,SAAS;AACX,cAAQ,IAAI,SAAS,QAAQ,gDAAgD;AAAA,IAC/E;AACA,WAAO;AAAA,EACT;AACA,QAAM,UAAU,KAAK,IAAI;AACzB,MAAI,SAAS;AACX,qBAAiB;AAAA,MACf,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,SAAS,GAAG,QAAQ;AAAA,MACpB,IAAI;AAAA,IACN,CAAC;AACD,YAAQ,IAAI,SAAS,QAAQ,kBAAkB;AAAA,EACjD;AACA,QAAM,YAAY,oBAAoB;AACtC,MAAI,YAAkD;AACtD,QAAM,iBACJ,cAAc,OACV,OACA,IAAI,QAA2B,aAAW;AACxC,gBAAY,WAAW,MAAM,QAAQ,EAAE,SAAS,KAAK,CAAC,GAAG,SAAS;AAAA,EACpE,CAAC;AACP,QAAM,iBAAiB,QAAQ,EAC5B,KAAK,SAAO,EAAE,GAAG,EAAE,EACnB,MAAM,YAAU,EAAE,MAAM,EAAE;AAC7B,QAAM,SAAS,iBACX,MAAM,QAAQ,KAAK,CAAC,gBAAgB,cAAc,CAAC,IACnD,MAAM;AACV,MAAI,UAAW,cAAa,SAAS;AACrC,MAAI,aAAa,QAAQ;AACvB,qBAAiB;AAAA,MACf,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,SAAS,GAAG,QAAQ;AAAA,MACpB,IAAI,KAAK,IAAI;AAAA,IACf,CAAC;AACD,QAAI,SAAS;AACX,cAAQ,IAAI,SAAS,QAAQ,oBAAoB;AAAA,IACnD;AACA,WAAO;AAAA,EACT;AACA,MAAI,WAAW,QAAQ;AACrB,qBAAiB;AAAA,MACf,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,SAAS,GAAG,QAAQ,oBAAoB,OAAO,OAAO,KAAK,CAAC;AAAA,MAC5D,IAAI,KAAK,IAAI;AAAA,IACf,CAAC;AACD,QAAI,SAAS;AACX,cAAQ,IAAI,SAAS,QAAQ,oBAAoB,OAAO,OAAO,KAAK,CAAC,EAAE;AAAA,IACzE;AACA,WAAO;AAAA,EACT;AACA,MAAI,CAAC,OAAO,IAAI;AACd,qBAAiB;AAAA,MACf,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,SAAS,GAAG,QAAQ;AAAA,MACpB,IAAI,KAAK,IAAI;AAAA,IACf,CAAC;AACD,QAAI,SAAS;AACX,cAAQ,IAAI,SAAS,QAAQ,iBAAiB;AAAA,IAChD;AACA,WAAO;AAAA,EACT;AACA,MAAI,SAAS;AACX,qBAAiB;AAAA,MACf,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,SAAS,GAAG,QAAQ;AAAA,MACpB,IAAI,KAAK,IAAI;AAAA,IACf,CAAC;AACD,YAAQ,IAAI,SAAS,QAAQ,oBAAoB;AAAA,EACnD;AACA,SAAO;AACT;AAEA,SAAS,mBAAmB;AAC1B,MAAI,CAACA,YAAW,aAAa,GAAG;AAC9B,cAAU,eAAe,EAAE,WAAW,KAAK,CAAC;AAAA,EAC9C;AACF;AAEA,SAAS,gBAAgB,KAAa,SAAyB;AAC7D,QAAM,OAAO,QAAQ,aAAa,UAAU,CAAC,QAAQ,QAAQ,QAAQ,EAAE,IAAI,CAAC,EAAE;AAC9E,aAAW,OAAO,MAAM;AACtB,UAAM,UAAUC,MAAK,KAAK,GAAG,OAAO,GAAG,GAAG,EAAE;AAC5C,QAAID,YAAW,OAAO,GAAG;AACvB,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,eAAe,WAAW,UAAoB,MAAc,eAAiC;AAC3F,QAAM,SAAS,sBAAsB;AACrC,MAAI,CAAC,QAAQ;AACX,UAAY,MAAM,mBAAmB,EAAE,QAAQ,OAAO,OAAO,gBAAgB,CAAC;AAC9E;AAAA,MACE;AAAA,QACE,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,SAAS;AAAA,QACT,IAAI,KAAK,IAAI;AAAA,MACf;AAAA,MACA;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,MAAI,CAACA,YAAW,GAAG,GAAG;AACpB,cAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,EACpC;AACA,QAAM,SAAS,MAAM,aAAa,CAAC,QAAQ,WAAW,GAAG,QAAQ,GAAG;AAAA,IAClE;AAAA,IACA,KAAK;AAAA,MACH,GAAG,QAAQ;AAAA,MACX,YAAY;AAAA,IACd;AAAA,EACF,CAAC;AACD,SAAO,OAAO,aAAa;AAC7B;AAEA,eAAe,UACb,KACA,UACA,MAAc,eAC4B;AAC1C,QAAM,EAAE,QAAQ,QAAQ,SAAS,IAAI,MAAM,aAAa,KAAK;AAAA,IAC3D;AAAA,IACA,KAAK;AAAA,MACH,GAAG,QAAQ;AAAA,MACX,GAAG;AAAA,IACL;AAAA,EACF,CAAC;AACD,MAAI,aAAa,GAAG;AAClB,WAAO,EAAE,IAAI,KAAK;AAAA,EACpB;AACA,SAAO,EAAE,IAAI,OAAO,OAAO,UAAU,OAAO;AAC9C;AAEA,eAAe,qBACb,KACA,UACA,KACA,WAC6D;AAC7D,MAAI,cAAc,MAAM;AACtB,WAAO,UAAU,KAAK,UAAU,GAAG;AAAA,EACrC;AACA,MAAI,YAAkD;AACtD,QAAM,iBAAiB,IAAI,QAA2B,aAAW;AAC/D,gBAAY,WAAW,MAAM,QAAQ,EAAE,SAAS,KAAK,CAAC,GAAG,SAAS;AAAA,EACpE,CAAC;AACD,QAAM,SAAS,MAAM,QAAQ,KAAK,CAAC,UAAU,KAAK,UAAU,GAAG,GAAG,cAAc,CAAC;AACjF,MAAI,UAAW,cAAa,SAAS;AACrC,MAAI,aAAa,QAAQ;AACvB,WAAO,EAAE,IAAI,OAAO,SAAS,MAAM,OAAO,UAAU;AAAA,EACtD;AACA,SAAO;AACT;AAEA,eAAe,sBAA8C;AAC3D,QAAM,EAAE,QAAQ,QAAQ,SAAS,IAAI,MAAM,aAAa,CAAC,QAAQ,UAAU,GAAG,CAAC,CAAC;AAChF,MAAI,aAAa,EAAG,QAAO;AAC3B,QAAM,SAAS,GAAG,MAAM;AAAA,EAAK,MAAM;AACnC,QAAM,QAAQ,+BAA+B,KAAK,MAAM;AACxD,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,QAAQ,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE;AAC1C,SAAO,OAAO,MAAM,KAAK,IAAI,OAAO;AACtC;AAEA,IAAM,qBAAqB;AAEpB,SAAS,oBAAoB,aAAqB,eAAuB;AAC9E,SAAOC,MAAK,YAAY,eAAe;AACzC;AAEO,SAAS,oBAAoB,aAAqB,eAAuB;AAC9E,SAAOA,MAAK,oBAAoB,UAAU,GAAG,UAAU,OAAO,iBAAiB;AACjF;AAEA,eAAsB,oBAAoB,aAAqB,eAAiC;AAC9F,QAAM,aAAa,oBAAoB,UAAU;AACjD,MAAID,YAAW,UAAU,EAAG,QAAO;AACnC,QAAM,aAAa,MAAM,qBAAqB;AAC9C,MAAI,CAAC,WAAY,QAAO;AACxB,MAAI,CAACA,YAAW,UAAU,GAAG;AAC3B,cAAU,YAAY,EAAE,WAAW,KAAK,CAAC;AAAA,EAC3C;AACA,QAAM,UAAU,cAAc,IAAI,QAAQ;AAC1C,QAAY,KAAK,eAAe,EAAE,QAAQ,UAAU,QAAQ,QAAQ,CAAC;AACrE,MAAI;AACF,UAAM,0BAA0B;AAAA,MAC9B,KAAK;AAAA,MACL,aAAa;AAAA,MACb;AAAA,MACA,eAAe,CAAC,oBAAoB;AAAA,IACtC,CAAC;AACD,UAAM,gBAAgBC,MAAK,YAAY,oBAAoB;AAC3D,UAAM,YAAY,oBAAoB,UAAU;AAChD,QAAI,CAACD,YAAW,aAAa,GAAG;AAC9B,YAAY,MAAM,sBAAsB,EAAE,QAAQ,UAAU,OAAO,0BAA0B,QAAQ,CAAC;AACtG,aAAO;AAAA,IACT;AACA,QAAIA,YAAW,SAAS,GAAG;AACzB,aAAO,WAAW,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,IACpD;AACA,eAAW,eAAe,SAAS;AACnC,UAAM,SAAS,QAAQ,aAAa,UAAU,YAAY;AAC1D,QAAI,CAAC,UAAU,MAAM,GAAG;AACtB,YAAY,MAAM,mBAAmB,EAAE,QAAQ,UAAU,OAAO,GAAG,MAAM,cAAc,QAAQ,CAAC;AAChG;AAAA,QACE;AAAA,UACE,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,SAAS,GAAG,MAAM;AAAA,UAClB,IAAI,KAAK,IAAI;AAAA,QACf;AAAA,QACA,kBAAkB,MAAM;AAAA,MAC1B;AACA,aAAO;AAAA,IACT;AACA,UAAM,YAAY,oBAAoB;AACtC,UAAM,gBAAgB,MAAM,qBAAqB,CAAC,QAAQ,SAAS,GAAG,QAAW,WAAW,SAAS;AACrG,QAAI,CAAC,cAAc,IAAI;AACrB,YAAY,MAAM,sBAAsB,EAAE,QAAQ,UAAU,OAAO,cAAc,OAAO,QAAQ,CAAC;AACjG,aAAO;AAAA,IACT;AACA,UAAM,gBAAgB,MAAM,qBAAqB,CAAC,QAAQ,OAAO,SAAS,GAAG,QAAW,WAAW,SAAS;AAC5G,QAAI,CAAC,cAAc,IAAI;AACrB,YAAY,MAAM,sBAAsB,EAAE,QAAQ,UAAU,OAAO,cAAc,OAAO,QAAQ,CAAC;AACjG,aAAO;AAAA,IACT;AACA,QAAI,CAACA,YAAW,UAAU,GAAG;AAC3B,YAAY,MAAM,sBAAsB,EAAE,QAAQ,UAAU,OAAO,6BAA6B,QAAQ,CAAC;AACzG,aAAO;AAAA,IACT;AACA,UAAY,KAAK,eAAe,EAAE,QAAQ,UAAU,QAAQ,UAAU,CAAC;AACvE,WAAO;AAAA,EACT,SAAS,GAAG;AACV,UAAY,MAAM,qBAAqB,EAAE,QAAQ,UAAU,OAAO,OAAO,CAAC,GAAG,QAAQ,CAAC;AACtF,WAAO;AAAA,EACT;AACF;AAEA,IAAM,uBAA+C;AAAA,EACnD,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,UAAU;AAAA,EACV,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,OAAO;AAAA,EACP,OAAO;AAAA,EACP,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,UAAU;AAAA,EACV,UAAU;AAAA,EACV,SAAS;AAAA,EACT,eAAe;AAAA,EACf,cAAc;AAAA,EACd,OAAO;AAAA,EACP,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,SAAS;AAAA,EACT,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,SAAS;AACX;AAEA,IAAM,8BAAsD;AAAA,EAC1D,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,OAAO;AAAA,EACP,GAAG;AAAA,EACH,KAAK;AAAA,EACL,KAAK;AAAA,EACL,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,KAAK;AAAA,EACL,KAAK;AAAA,EACL,UAAU;AAAA,EACV,MAAM;AACR;AAsCA,IAAM,wBAAiF;AAAA,EACrF,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC,SAAS,EAAE;AAC7C;AAEA,SAAS,6BAAkE;AACzE,QAAM,MAA+B,CAAC;AACtC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,GAAG,GAAG;AACtD,QAAI,CAAC,IAAI,WAAW,uBAAuB,EAAG;AAC9C,UAAM,OAAO,IAAI,UAAU,wBAAwB,MAAM,EAAE,YAAY;AACvE,UAAM,IAAI,OAAO,SAAS,EAAE,EAAE,KAAK,EAAE,YAAY;AACjD,UAAM,UAAU,MAAM,OAAO,MAAM,UAAU,MAAM,QAAQ,MAAM;AACjE,QAAI,IAAI,IAAI;AAAA,EACd;AACA,SAAO,OAAO,KAAK,GAAG,EAAE,SAAS,MAAM;AACzC;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,QAAQ,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,CAAC;AAC5E;AAEA,SAAS,qBAAqB,OAAsC;AAClE,MAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,QAAO;AAClC,QAAM,MAAgB,CAAC;AACvB,QAAM,OAAO,oBAAI,IAAY;AAC7B,aAAW,SAAS,OAAO;AACzB,QAAI,OAAO,UAAU,SAAU;AAC/B,UAAM,UAAU,MAAM,KAAK;AAC3B,QAAI,CAAC,WAAW,KAAK,IAAI,OAAO,EAAG;AACnC,SAAK,IAAI,OAAO;AAChB,QAAI,KAAK,OAAO;AAAA,EAClB;AACA,SAAO,IAAI,SAAS,MAAM;AAC5B;AAEA,SAAS,sBAAsB,OAAoD;AACjF,MAAI,CAAC,SAAS,KAAK,EAAG,QAAO;AAC7B,QAAM,MAA8B,CAAC;AACrC,aAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC9C,QAAI,OAAO,QAAQ,UAAU;AAC3B,UAAI,GAAG,IAAI;AAAA,IACb;AAAA,EACF;AACA,SAAO,OAAO,KAAK,GAAG,EAAE,SAAS,MAAM;AACzC;AAEA,SAAS,uBAAuB,OAAqD;AACnF,MAAI,CAAC,SAAS,KAAK,EAAG,QAAO;AAC7B,QAAM,MAA+B,CAAC;AACtC,aAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC9C,QAAI,OAAO,QAAQ,WAAW;AAC5B,UAAI,GAAG,IAAI;AAAA,IACb;AAAA,EACF;AACA,SAAO,OAAO,KAAK,GAAG,EAAE,SAAS,MAAM;AACzC;AAEA,SAAS,+BAA+B,OAAqD;AAC3F,MAAI,CAAC,SAAS,KAAK,EAAG,QAAO;AAC7B,SAAO,OAAO,KAAK,KAAK,EAAE,SAAS,QAAQ;AAC7C;AAEA,SAAS,yBAAyB,OAA+D;AAC/F,MAAI,CAAC,SAAS,KAAK,EAAG,QAAO;AAC7B,QAAM,MAAyC,CAAC;AAChD,aAAW,CAAC,IAAI,GAAG,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC7C,QAAI,CAAC,SAAS,GAAG,EAAG;AACpB,UAAM,QAA2B,CAAC;AAClC,QAAI,OAAO,IAAI,aAAa,UAAW,OAAM,WAAW,IAAI;AAC5D,UAAM,aAAa,qBAAqB,IAAI,UAAU;AACtD,UAAM,cAAc,qBAAqB,IAAI,WAAW;AACxD,QAAI,OAAO,IAAI,YAAY,YAAY,IAAI,QAAQ,KAAK,EAAG,OAAM,UAAU,IAAI;AAC/E,UAAM,OAAO,qBAAqB,IAAI,IAAI;AAC1C,UAAM,MAAM,sBAAsB,IAAI,GAAG;AACzC,UAAM,wBAAwB,+BAA+B,IAAI,qBAAqB;AACtF,QAAI,SAAS,IAAI,IAAI,GAAG;AACtB,YAAM,UAAU,qBAAqB,IAAI,KAAK,OAAO;AACrD,YAAM,UAAU,qBAAqB,IAAI,KAAK,OAAO;AACrD,YAAM,WAAW,MAAM,QAAQ,IAAI,KAAK,QAAQ,IAC5C,IAAI,KAAK,SACN,IAAI,YAAU,qBAAqB,MAAM,CAAC,EAC1C,OAAO,CAAC,WAA+B,QAAQ,UAAU,OAAO,MAAM,CAAC,IAC1E;AACJ,UAAI,WAAW,WAAW,UAAU;AAClC,cAAM,OAAO,EAAE,SAAS,SAAS,SAAS;AAAA,MAC5C;AAAA,IACF;AACA,QAAI,OAAO,IAAI,eAAe,YAAY,IAAI,WAAW,KAAK,EAAG,OAAM,aAAa,IAAI;AACxF,QAAI,OAAO,IAAI,aAAa,YAAY,OAAO,SAAS,IAAI,QAAQ,EAAG,OAAM,WAAW,IAAI;AAC5F,QAAI,OAAO,IAAI,UAAU,YAAY,IAAI,MAAM,KAAK,EAAG,OAAM,QAAQ,IAAI;AACzE,QAAI,EAAE,IAAI;AAAA,EACZ;AACA,SAAO,OAAO,KAAK,GAAG,EAAE,SAAS,MAAM;AACzC;AAEA,SAAS,sBAAsB,OAA8C;AAC3E,MAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,QAAO;AAClC,QAAM,MAAwB,CAAC;AAC/B,aAAW,SAAS,OAAO;AACzB,QAAI,CAAC,SAAS,KAAK,EAAG;AACtB,UAAM,KAAK,OAAO,MAAM,OAAO,WAAW,MAAM,GAAG,KAAK,IAAI;AAC5D,UAAM,WACJ,MAAM,aAAa,cAAc,MAAM,aAAa,eAAe,MAAM,aAAa,aAClF,MAAM,WACN;AACN,UAAM,YAAY,qBAAqB,MAAM,SAAS;AACtD,QAAI,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,UAAU,WAAW,EAAG;AAC9D,QAAI,KAAK;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY,qBAAqB,MAAM,UAAU;AAAA,IACnD,CAAC;AAAA,EACH;AACA,SAAO,IAAI,SAAS,MAAM;AAC5B;AAEA,SAAS,eACP,MACA,MAC+C;AAC/C,MAAI,CAAC,QAAQ,CAAC,KAAM,QAAO;AAC3B,QAAM,MAAyC,EAAE,GAAI,QAAQ,CAAC,EAAG;AACjE,MAAI,MAAM;AACR,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,IAAI,GAAG;AAC/C,UAAI,GAAG,IAAI,EAAE,GAAI,IAAI,GAAG,KAAK,CAAC,GAAI,GAAG,MAAM;AAAA,IAC7C;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,MAA4B,MAAkD;AACvG,MAAI,CAAC,QAAQ,CAAC,KAAM,QAAO;AAC3B,SAAO,qBAAqB,CAAC,GAAI,QAAQ,CAAC,GAAI,GAAI,QAAQ,CAAC,CAAE,CAAC;AAChE;AAEA,SAAS,mBACP,MACA,MACoC;AACpC,MAAI,CAAC,QAAQ,CAAC,KAAM,QAAO;AAC3B,SAAO,EAAE,GAAI,QAAQ,CAAC,GAAI,GAAI,QAAQ,CAAC,EAAG;AAC5C;AAEA,SAAS,oBACP,MACA,MACqC;AACrC,MAAI,CAAC,QAAQ,CAAC,KAAM,QAAO;AAC3B,SAAO,EAAE,GAAI,QAAQ,CAAC,GAAI,GAAI,QAAQ,CAAC,EAAG;AAC5C;AAEA,SAAS,iBAAiB,MAA+B,MAAwD;AAC/G,MAAI,CAAC,QAAQ,CAAC,KAAM,QAAO;AAC3B,QAAM,SAAsB,EAAE,GAAI,QAAQ,CAAC,EAAG;AAC9C,SAAO,kBAAkB,kBAAkB,MAAM,iBAAiB,MAAM,eAAe;AACvF,SAAO,UAAU,eAAe,MAAM,SAAS,MAAM,OAAO;AAC5D,SAAO,eAAe,oBAAoB,MAAM,cAAc,MAAM,YAAY;AAChF,SAAO,cAAc,mBAAmB,MAAM,aAAa,MAAM,WAAW;AAC5E,SAAO,qBAAqB,mBAAmB,MAAM,oBAAoB,MAAM,kBAAkB;AACjG,SAAO,eAAe,MAAM,gBAAgB,MAAM;AAClD,SAAO,wBAAwB,2BAA2B,MAAM,uBAAuB,MAAM,qBAAqB;AAClH,SAAO,MAAM,mBAAmB,MAAM,KAA2C,MAAM,GAAyC;AAChI,SAAO;AACT;AAEA,SAAS,2BACP,MACA,MACqC;AACrC,MAAI,CAAC,QAAQ,CAAC,KAAM,QAAO;AAC3B,SAAO,EAAE,GAAI,QAAQ,CAAC,GAAI,GAAI,QAAQ,CAAC,EAAG;AAC5C;AAEA,SAAS,cAAc,UAA2B;AAChD,SAAO,CAAC,aAAa,YAAY,EAAE,KAAK,UAAQA,YAAWC,MAAK,UAAU,IAAI,CAAC,CAAC;AAClF;AAEA,SAAS,gBAAgB,UAAiC;AACxD,QAAM,SAAS,UAAU,IAAI;AAC7B,MAAI,OAAQ,QAAO;AACnB,QAAM,YAAY,CAAC,QAAQ,IAAI,aAAaA,MAAK,UAAU,OAAO,GAAGA,MAAK,UAAU,MAAM,CAAC,EAAE;AAAA,IAC3F,CAAC,UAA2B,QAAQ,KAAK;AAAA,EAC3C;AACA,aAAW,YAAY,WAAW;AAChC,UAAM,SACJ,QAAQ,aAAa,UACjBA,MAAK,UAAU,WAAW,QAAQ,IAClCA,MAAK,UAAU,OAAO,IAAI;AAChC,QAAID,YAAW,MAAM,EAAG,QAAO;AAAA,EACjC;AACA,SAAO;AACT;AAEA,SAAS,YAAY,UAA2B;AAC9C,SAAO,QAAQ,gBAAgB,QAAQ,CAAC;AAC1C;AAEA,SAAS,0BAA0B,UAA4D;AAC7F,MAAI,CAAC,SAAU,QAAO;AACtB,QAAM,aAAa,2BAA2B;AAC9C,QAAM,eAAe,SAAS,gBAAgB;AAC9C,MAAI,CAAC,aAAc,QAAO;AAC1B,QAAM,WAAW,IAAI,IAAI,SAAS,mBAAmB,CAAC,CAAC;AACvD,QAAM,SAAkC;AAAA,IACtC,GAAI,SAAS,gBAAgB,CAAC;AAAA,IAC9B,GAAI,cAAc,CAAC;AAAA,EACrB;AACA,aAAW,CAAC,KAAK,OAAO,KAAK,OAAO,QAAQ,MAAM,GAAG;AACnD,QAAI,CAAC,QAAS;AACd,UAAM,OAAO,sBAAsB,GAAG;AACtC,QAAI,CAAC,KAAM;AACX,UAAM,aACJ,QAAQ,QAAQ,YAAY,OAAO,CAAC;AACtC,eAAW,MAAM,KAAK,QAAQ;AAC5B,eAAS,OAAO,EAAE;AAAA,IACpB;AACA,eAAW,MAAM,KAAK,SAAS;AAC7B,UAAI,YAAY;AACd,iBAAS,IAAI,EAAE;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,iBAAiB,SAAS,OAAO,MAAM,KAAK,QAAQ,IAAI;AAAA,IACxD;AAAA,EACF;AACF;AAEA,SAAS,qBAAqB,OAAyC;AACrE,MAAI,CAAC,SAAS,KAAK,EAAG,QAAO;AAC7B,SAAO;AAAA,IACL,iBAAiB,qBAAqB,MAAM,eAAe;AAAA,IAC3D,SAAS,yBAAyB,MAAM,OAAO;AAAA,IAC/C,cAAc,uBAAuB,MAAM,YAAY;AAAA,IACvD,aAAa,sBAAsB,MAAM,WAAW;AAAA,IACpD,oBAAoB,sBAAsB,MAAM,kBAAkB;AAAA,IAClE,cAAc,sBAAsB,MAAM,YAAY;AAAA,IACtD,uBAAuB,+BAA+B,MAAM,qBAAqB;AAAA,IACjF,KAAK,sBAAsB,MAAM,GAAG;AAAA,EACtC;AACF;AAEA,SAAS,yBAAyB,SAA8E;AAC9G,MAAI,QAAQ,IAAI,YAAY,QAAQ,IAAI,aAAa,QAAQ;AAC3D,WAAO;AAAA,EACT;AACA,QAAM,aAAa,SAAS,cAAc,OAAO;AACjD,QAAM,UAAU,SAAS;AACzB,QAAM,OAAO,+BAA+B;AAAA,IAC1C,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,EACpB,CAAC,EAAE;AACH,QAAM,UAAU,+BAA+B;AAAA,IAC7C,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,EACpB,CAAC,EAAE;AACH,QAAM,QAAQ,+BAA+B;AAAA,IAC3C,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,EACpB,CAAC,EAAE;AAEH,QAAM,eAAe,qBAAsB,MAAyC,GAAG;AACvF,QAAM,kBAAkB,qBAAsB,SAA4C,GAAG;AAC7F,QAAM,gBAAgB,qBAAsB,OAA0C,GAAG;AAEzF,SAAO,iBAAiB,iBAAiB,cAAc,eAAe,GAAG,aAAa;AACxF;AAEO,SAAS,iBAAiB,UAAiC;AAChE,QAAM,UAAU,QAAQ,IAAI,aAAa,KAAK;AAC9C,QAAM,aACJ,QAAQ,aAAa,UACjB;AAAA,IACE,GAAI,UAAU,CAACC,MAAK,SAAS,WAAW,YAAY,CAAC,IAAI,CAAC;AAAA,IAC1DA,MAAK,UAAU,SAAS,WAAW,YAAY;AAAA,IAC/CA,MAAK,UAAU,QAAQ,WAAW,YAAY;AAAA,EAChD,IACA;AAAA,IACE,GAAI,UAAU,CAACA,MAAK,SAAS,OAAO,QAAQ,CAAC,IAAI,CAAC;AAAA,IAClDA,MAAK,UAAU,SAAS,OAAO,QAAQ;AAAA,IACvCA,MAAK,UAAU,QAAQ,OAAO,QAAQ;AAAA,EACxC;AACN,aAAW,aAAa,YAAY;AAClC,QAAID,YAAW,SAAS,EAAG,QAAO;AAAA,EACpC;AACA,SAAO;AACT;AAEA,eAAsB,oBACpB,UACA,MAAc,eACI;AAClB,QAAM,UAAU,SAAS,OAAO,SAAO,CAACA,YAAWC,MAAK,KAAK,gBAAgB,KAAK,cAAc,CAAC,CAAC;AAClG,MAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,QAAM,aAAa,MAAM,qBAAqB;AAC9C,MAAI,CAAC,WAAY,QAAO;AACxB,SAAO,WAAW,SAAS,GAAG;AAChC;AAEO,SAAS,mBAAmB,SAKP;AAC1B,QAAM,MAAM,QAAQ,OAAO,QAAQ,IAAI;AACvC,QAAM,cAAcA,MAAK,KAAK,gBAAgB,MAAM;AACpD,aAAW,WAAW,QAAQ,UAAU;AACtC,QAAI,UAAU,OAAO,GAAG;AACtB,aAAO,EAAE,SAAS,SAAS,MAAM,QAAQ,QAAQ,CAAC,EAAE;AAAA,IACtD;AACA,UAAM,WAAW,gBAAgB,aAAa,OAAO;AACrD,QAAI,UAAU;AACZ,aAAO,EAAE,SAAS,UAAU,MAAM,QAAQ,QAAQ,CAAC,EAAE;AAAA,IACvD;AACA,UAAM,SAAS,gBAAgBA,MAAK,eAAe,gBAAgB,MAAM,GAAG,OAAO;AACnF,QAAI,QAAQ;AACV,aAAO,EAAE,SAAS,QAAQ,MAAM,QAAQ,QAAQ,CAAC,EAAE;AAAA,IACrD;AAAA,EACF;AACA,MAAI,QAAQ,aAAa;AACvB,UAAM,SAAS,sBAAsB;AACrC,QAAI,CAAC,OAAQ,QAAO;AACpB,WAAO,EAAE,SAAS,QAAQ,MAAM,CAAC,KAAK,QAAQ,aAAa,GAAI,QAAQ,QAAQ,CAAC,CAAE,EAAE;AAAA,EACtF;AACA,SAAO;AACT;AASO,SAAS,kBAAkB,YAAwC;AACxE,QAAM,UAAU,QAAQ,IAAI,oBAAoB,KAAK,KAAK;AAC1D,QAAM,WACJ,QAAQ,aAAa,UACjB,UACA,QAAQ,aAAa,WACnB,WACA;AACR,QAAM,OAAO,QAAQ,SAAS,UAAU,UAAU;AAClD,QAAM,cAAc,QAAQ,aAAa,UAAU,QAAQ;AAC3D,QAAM,WAAW,uBAAuB,OAAO,IAAI,QAAQ,IAAI,IAAI,IAAI,WAAW;AAClF,SAAO;AAAA,IACL,KAAK,kEAAkE,OAAO,IAAI,QAAQ;AAAA,IAC1F;AAAA,IACA;AAAA,IACA,eAAe,CAAC,QAAQ,aAAa,UAAU,gCAAgC,yBAAyB;AAAA,EAC1G;AACF;AAEO,SAAS,gBAAgB,YAAwC;AACtE,QAAM,UAAU,QAAQ,IAAI,iBAAiB,KAAK,KAAK;AACvD,QAAM,WACJ,QAAQ,aAAa,UACjB,YACA,QAAQ,aAAa,WACnB,UACA;AACR,QAAM,OAAO,QAAQ,SAAS,UAAU,YAAY;AACpD,QAAM,cAAc,QAAQ,aAAa,UAAU,QAAQ;AAC3D,QAAM,WAAW,OAAO,QAAQ,IAAI,IAAI,IAAI,WAAW;AACvD,SAAO;AAAA,IACL,KAAK,gDAAgD,OAAO,IAAI,QAAQ;AAAA,IACxE;AAAA,IACA;AAAA,IACA,eAAe,CAAC,QAAQ,aAAa,UAAU,YAAY,KAAK;AAAA,EAClE;AACF;AAEO,SAAS,qBAAqB,YAAwC;AAC3E,QAAM,UAAU,QAAQ,IAAI,uBAAuB,KAAK,KAAK;AAC7D,QAAM,cAAc;AACpB,QAAM,WAAW,aAAa,OAAO;AACrC,SAAO;AAAA,IACL,KAAK,6DAA6D,OAAO,IAAI,QAAQ;AAAA,IACrF;AAAA,IACA;AAAA,IACA,eAAe,CAAC,oBAAoB;AAAA,EACtC;AACF;AAEO,SAAS,kBAAkB,YAAwC;AACxE,QAAM,UAAU,QAAQ,IAAI,mBAAmB,KAAK,KAAK;AACzD,QAAM,WACJ,QAAQ,aAAa,UACjB,UACA,QAAQ,aAAa,WACnB,QACA;AACR,QAAM,cAAc;AACpB,QAAM,WAAW,SAAS,OAAO,IAAI,QAAQ;AAC7C,SAAO;AAAA,IACL,KAAK,iDAAiD,OAAO,IAAI,QAAQ;AAAA,IACzE;AAAA,IACA;AAAA,IACA,eAAe,CAAC,WAAW,eAAe;AAAA,EAC5C;AACF;AAEA,eAAe,eAAe,QAAoB,aAA+B,WAAkC;AACjH,MAAI,gBAAgB,OAAO;AACzB,UAAM,EAAE,UAAU,IAAI,MAAM,OAAO,QAAQ;AAC3C,UAAM,QAAQ,UAAU,MAAM;AAC9B,eAAW,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,YAAM,aAAa,KAAK,SAAS,GAAG;AACpC,YAAM,YAAY,aAAa,KAAK,MAAM,GAAG,EAAE,IAAI;AACnD,UAAI,CAAC,UAAW;AAChB,YAAM,aAAaA,MAAK,WAAW,SAAS;AAC5C,YAAM,YAAY,CAAC,YAAoB;AACrC,YAAID,YAAW,OAAO,GAAG;AACvB,gBAAM,QAAQE,UAAS,OAAO;AAC9B,cAAI,MAAM,YAAY,EAAG;AACzB,iBAAO,SAAS,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,QAClD;AACA,kBAAU,SAAS,EAAE,WAAW,KAAK,CAAC;AAAA,MACxC;AACA,UAAI,YAAY;AACd,kBAAU,UAAU;AACpB;AAAA,MACF;AACA,YAAM,gBAAgB,QAAQ,UAAU;AACxC,gBAAU,aAAa;AACvB,UAAIF,YAAW,UAAU,GAAG;AAC1B,cAAM,QAAQE,UAAS,UAAU;AACjC,YAAI,MAAM,YAAY,GAAG;AACvB,iBAAO,YAAY,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,QACrD;AAAA,MACF;AACA,oBAAc,YAAY,IAAI;AAAA,IAChC;AACA;AAAA,EACF;AACA,QAAM,cAAc,WAAW,KAAK,IAAI,CAAC;AACzC,QAAM,UAAU,YAAYD,MAAK,WAAW,MAAM,CAAC;AACnD,QAAM,cAAcA,MAAK,SAAS,WAAW;AAC7C,gBAAc,aAAa,MAAM;AACjC,QAAM,UAAU,CAAC,OAAO,QAAQ,aAAa,MAAM,SAAS,GAAG,QAAW,OAAO;AACjF,SAAO,SAAS,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAClD;AAEA,eAAsB,0BAA0B,MAAyC;AACvF,MAAI,CAACD,YAAW,KAAK,UAAU,GAAG;AAChC,cAAU,KAAK,YAAY,EAAE,WAAW,KAAK,CAAC;AAAA,EAChD;AACA,QAAM,WAAW,MAAM,MAAM,KAAK,GAAG;AACrC,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,sBAAsB,KAAK,GAAG,KAAK,SAAS,MAAM,EAAE;AAAA,EACtE;AACA,QAAM,SAAS,IAAI,WAAW,MAAM,SAAS,YAAY,CAAC;AAC1D,QAAM,eAAe,QAAQ,KAAK,aAAa,KAAK,UAAU;AAChE;AAEA,SAAS,kBAAkB,MAAc,UAAiC;AACxE,QAAM,UAAU,YAAY,MAAM,EAAE,eAAe,KAAK,CAAC;AACzD,aAAW,SAAS,SAAS;AAC3B,UAAM,OAAOC,MAAK,MAAM,MAAM,IAAI;AAClC,QAAI,MAAM,YAAY,GAAG;AACvB,YAAM,QAAQ,kBAAkB,MAAM,QAAQ;AAC9C,UAAI,MAAO,QAAO;AAAA,IACpB,WAAW,MAAM,OAAO,KAAK,MAAM,SAAS,UAAU;AACpD,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,eAAsB,aAAa,YAAsC;AACvE,QAAM,OAAO,kBAAkB,UAAU;AACzC,QAAM,0BAA0B,IAAI;AACpC,QAAM,WAAW,KAAK,cAAc,KAAK,UAAQ,kBAAkB,YAAY,SAAS,IAAI,CAAC,CAAC;AAC9F,MAAI,CAAC,UAAU;AACb,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC3D;AACA,MAAI,QAAQ,aAAa,SAAS;AAChC,cAAU,UAAU,GAAK;AAAA,EAC3B;AACA,SAAO;AACT;AAEA,eAAsB,WAAW,YAAsC;AACrE,MAAI,CAAC,UAAU,KAAK,GAAG;AACrB,UAAM,IAAI,MAAM,eAAe;AAAA,EACjC;AACA,QAAM,OAAO,gBAAgB,UAAU;AACvC,QAAM,0BAA0B,IAAI;AACpC,QAAM,WAAW,KAAK,cAAc,KAAK,UAAQ,kBAAkB,YAAY,SAAS,IAAI,CAAC,CAAC;AAC9F,MAAI,CAAC,UAAU;AACb,UAAM,IAAI,MAAM,uCAAuC;AAAA,EACzD;AACA,MAAI,QAAQ,aAAa,SAAS;AAChC,cAAU,UAAU,GAAK;AAAA,EAC3B;AACA,SAAO;AACT;AAEA,eAAsB,gBAAgB,YAAsC;AAC1E,MAAI,CAAC,UAAU,QAAQ,KAAK,CAAC,UAAU,KAAK,GAAG;AAC7C,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AACA,QAAM,OAAO,qBAAqB,UAAU;AAC5C,QAAM,0BAA0B,IAAI;AACpC,QAAM,SACJ;AAAA,IACE;AAAA,IACA,QAAQ,aAAa,UAAU,wBAAwB;AAAA,EACzD,KAAK,kBAAkB,YAAY,oBAAoB;AACzD,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AACA,QAAM,UAAU,CAAC,OAAO,UAAU,GAAG,QAAW,UAAU;AAC1D,QAAM,UAAU,CAAC,OAAO,SAAS,GAAG,QAAW,UAAU;AACzD,MAAI,QAAQ,aAAa,SAAS;AAChC,cAAU,QAAQ,GAAK;AAAA,EACzB;AACA,SAAO;AACT;AAEA,eAAsB,aAAa,YAAsC;AACvE,MAAI,CAAC,UAAU,MAAM,GAAG;AACtB,UAAM,IAAI,MAAM,gBAAgB;AAAA,EAClC;AACA,QAAM,YAAY,MAAM,oBAAoB;AAC5C,MAAI,CAAC,aAAa,YAAY,IAAI;AAChC,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C;AACA,QAAM,OAAO,kBAAkB,UAAU;AACzC,QAAM,0BAA0B,IAAI;AACpC,QAAM,aAAaA,MAAK,YAAY,SAAS;AAC7C,QAAM,YAAYA,MAAK,YAAY,eAAe;AAClD,MAAI,CAACD,YAAW,UAAU,KAAK,CAACA,YAAW,SAAS,GAAG;AACrD,UAAM,IAAI,MAAM,0BAA0B;AAAA,EAC5C;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,YAAmC;AAC9D,QAAM,SAAS,UAAU,QAAQ;AACjC,MAAI,OAAQ,QAAO;AACnB,QAAM,QAAQ,gBAAgB,YAAY,QAAQ;AAClD,SAAO,SAAS;AAClB;AAEA,eAAsB,cAAc,YAAsC;AACxE,MAAI,CAAC,UAAU,MAAM,GAAG;AACtB,UAAM,IAAI,MAAM,gBAAgB;AAAA,EAClC;AACA,QAAM,YAAY,MAAM,oBAAoB;AAC5C,MAAI,CAAC,aAAa,YAAY,IAAI;AAChC,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C;AACA,MAAI,oBAAoB,UAAU,EAAG,QAAO;AAC5C,QAAM,YAAY,UAAU,IAAI,KAAK,UAAU,UAAU;AACzD,MAAI,CAAC,WAAW;AACd,UAAM,IAAI,MAAM,oBAAoB;AAAA,EACtC;AACA,MAAI,CAACA,YAAW,UAAU,GAAG;AAC3B,cAAU,YAAY,EAAE,WAAW,KAAK,CAAC;AAAA,EAC3C;AACA,QAAM,UAAU,QAAQ,IAAI,oBAAoB,KAAK;AACrD,QAAM,QAAQ,UAAU,UAAU,OAAO,KAAK;AAC9C,QAAM,SAAS,MAAM,UAAU,CAAC,WAAW,WAAW,OAAO,iBAAiB,UAAU,GAAG,QAAW,UAAU;AAChH,MAAI,CAAC,OAAO,IAAI;AACd,UAAM,IAAI,MAAM,OAAO,SAAS,uBAAuB;AAAA,EACzD;AACA,QAAM,SAAS,gBAAgB,YAAY,QAAQ;AACnD,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,uCAAuC;AAAA,EACzD;AACA,MAAI,QAAQ,aAAa,SAAS;AAChC,cAAU,QAAQ,GAAK;AAAA,EACzB;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,YAAmC;AAC9D,QAAM,aAAaC,MAAK,YAAY,SAAS;AAC7C,MAAI,CAACD,YAAW,UAAU,EAAG,QAAO;AACpC,QAAM,WAAW,YAAY,UAAU,EAAE;AAAA,IAAK,UAC5C,KAAK,WAAW,+BAA+B,KAAK,KAAK,SAAS,MAAM;AAAA,EAC1E;AACA,MAAI,CAAC,SAAU,QAAO;AACtB,QAAM,eAAeC,MAAK,YAAY,QAAQ;AAC9C,SAAOD,YAAW,YAAY,IAAI,eAAe;AACnD;AAEA,SAAS,kBAAkB,YAAmC;AAC5D,QAAM,SAAS,QAAQ,aAAa,WAAW,QAAQ,QAAQ,aAAa,UAAU,QAAQ;AAC9F,QAAM,aAAaC,MAAK,YAAY,eAAe;AACnD,QAAM,aAAa;AAAA,IACjBA,MAAK,YAAY,UAAU,MAAM,EAAE;AAAA,IACnCA,MAAK,YAAY,UAAU,MAAM,EAAE;AAAA,IACnC;AAAA,EACF;AACA,aAAW,aAAa,YAAY;AAClC,QAAID,YAAW,SAAS,EAAG,QAAO;AAAA,EACpC;AACA,SAAO;AACT;AA6BA,IAAe,gBAAf,MAAsD;AAAA,EAQ1C,SAAS,KAAsB;AACvC,WAAO,QAAQ,UAAU,GAAG,CAAC;AAAA,EAC/B;AAAA,EAEU,gBAAgB,SAAiB,gBAAiC;AAC1E,UAAM,iBAAiB,kBAAkB;AACzC,QAAI,gBAAgB;AAClB,YAAM,SAAS,gBAAgBC,MAAK,gBAAgB,gBAAgB,MAAM,GAAG,OAAO;AACpF,UAAI,OAAQ,QAAO;AAAA,IACrB;AACA,UAAM,sBAAsBA,MAAK,QAAQ,IAAI,GAAG,gBAAgB,MAAM;AACtE,UAAM,WAAW,gBAAgB,qBAAqB,OAAO;AAC7D,QAAI,SAAU,QAAO;AAErB,QAAI;AACF,YAAM,UAAU,kBAAkB;AAClC,YAAM,eAAe,iBACjB,CAAC,gBAAgB,QAAQ,IAAI,GAAG,SAAS,IACzC,CAAC,QAAQ,IAAI,GAAG,SAAS;AAC7B,YAAM,WAAW,UAAQ,QAAQ,SAAS,EAAE,OAAO,aAAa,CAAC;AACjE,UAAI,UAAU;AACd,UAAI,UAAU;AACd,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,kBAAUA,MAAK,SAAS,IAAI;AAC5B,YAAID,YAAWC,MAAK,SAAS,cAAc,CAAC,GAAG;AAC7C,oBAAU;AACV;AAAA,QACF;AAAA,MACF;AACA,UAAI,SAAS;AACX,cAAM,kBAAkBA,MAAK,SAAS,IAAI;AAC1C,cAAM,WAAW,gBAAgBA,MAAK,iBAAiB,MAAM,GAAG,OAAO;AACvE,YAAI,SAAU,QAAO;AAAA,MACvB;AAAA,IACF,SAAS,GAAG;AAAA,IAAC;AAEb,UAAM,SAAS,gBAAgBA,MAAK,eAAe,gBAAgB,MAAM,GAAG,OAAO;AACnF,QAAI,OAAQ,QAAO;AAEnB,WAAO;AAAA,EACT;AAAA,EAEU,oBAA4B;AACpC,WAAO,sBAAsB;AAAA,EAC/B;AACF;AAEO,IAAM,mBAAN,cAA+B,cAAc;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACQ;AAAA,EACA;AAAA,EACA;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,SAUT;AACD,UAAM;AACN,SAAK,KAAK,QAAQ;AAClB,SAAK,aAAa,QAAQ;AAC1B,SAAK,cAAc,QAAQ;AAC3B,SAAK,kBAAkB,QAAQ;AAC/B,SAAK,gBAAgB,QAAQ;AAC7B,SAAK,kBAAkB,QAAQ;AAC/B,SAAK,cAAc,QAAQ;AAC3B,SAAK,WAAW,QAAQ;AACxB,SAAK,QAAQ,QAAQ;AAAA,EACvB;AAAA,EAEA,MAAM,UAA4B;AAChC,QAAI,KAAK,iBAAiB;AACxB,aAAO,qBAAqB,KAAK,IAAI,KAAK,eAAe;AAAA,IAC3D;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,WAAW,UAAoD;AACnE,QAAI,KAAK,eAAe;AACtB,aAAO,KAAK,cAAc,QAAQ;AAAA,IACpC;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,UAAU,UAAoC;AAClD,QAAI,CAAC,KAAK,gBAAiB,QAAO;AAClC,UAAM,SAAS,MAAM,KAAK,gBAAgB,QAAQ;AAClD,WAAO,QAAQ,MAAM;AAAA,EACvB;AACF;AAEA,IAAM,mBAAN,MAAgD;AAAA,EAkB9C,YACU,MACR,UACA,WACA,6BACA;AAJQ;AAKR,SAAK,KAAK,KAAK;AACf,SAAK,aAAa,UAAU,cAAc,KAAK;AAC/C,SAAK,cAAc,UAAU,eAAe,KAAK;AACjD,SAAK,cAAc,KAAK;AACxB,SAAK,MAAM,mBAAmB,mBAAmB,KAAK,KAAK,SAAS,GAAG,UAAU,GAAG;AACpF,SAAK,wBAAwB;AAAA,MAC3B,2BAA2B,KAAK,uBAAuB,2BAA2B;AAAA,MAClF,UAAU;AAAA,IACZ;AACA,SAAK,aAAa,UAAU,cAAc,KAAK;AAC/C,SAAK,cAAc,UAAU,MAAM,WAAW,KAAK;AACnD,SAAK,cAAc,UAAU,MAAM,WAAW,KAAK;AACnD,SAAK,eAAe,UAAU,MAAM,YAAY,KAAK;AACrD,SAAK,WAAW,UAAU,YAAY,KAAK;AAC3C,SAAK,QAAQ,UAAU,SAAS,KAAK;AACrC,SAAK,WAAW,UAAU,YAAY,KAAK;AAC3C,SAAK,kBAAkB,UAAU;AACjC,SAAK,eAAe,UAAU;AAC9B,SAAK,kBACH,OAAO,KAAK,cAAc,aAAa,KAAK,UAAU,KAAK,IAAI,IAAI;AAAA,EACvE;AAAA,EA3CA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACQ;AAAA,EACA;AAAA,EACA;AAAA,EA8BR,MAAM,UAA4B;AAChC,WAAO,KAAK,KAAK,QAAQ;AAAA,EAC3B;AAAA,EAEA,MAAM,WAAW,UAAoD;AACnE,QAAI,KAAK,iBAAiB;AACxB,aAAO,EAAE,SAAS,KAAK,iBAAiB,MAAM,KAAK,gBAAgB,CAAC,EAAE;AAAA,IACxE;AACA,QAAI,KAAK,KAAK,MAAM,KAAK,KAAK,GAAG,SAAS,GAAG;AAC3C,aAAO,KAAK,KAAK,WAAW,QAAQ;AAAA,IACtC;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,UAAU,UAAoC;AAClD,QAAI,CAAC,KAAK,gBAAiB,QAAO;AAClC,UAAM,SAAS,MAAM,KAAK,gBAAgB,QAAQ;AAClD,WAAO,QAAQ,MAAM;AAAA,EACvB;AACF;AAEO,IAAM,mBAAN,cAA+B,cAAc;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,IAAY,YAAsB,aAAuB,YAAoB,SAAiB,MAAgB;AACtH,UAAM;AACN,SAAK,KAAK;AACV,SAAK,aAAa;AAClB,SAAK,cAAc;AACnB,SAAK,aAAa;AAClB,SAAK,UAAU;AACf,SAAK,OAAO;AAAA,EAChB;AAAA,EAEA,MAAM,UAA4B;AAC9B,QAAI,KAAK,SAAS,KAAK,OAAO,GAAG;AAC7B,aAAO;AAAA,IACX;AAEA,UAAM,WAAW,KAAK,gBAAgB,KAAK,SAAS,KAAK,UAAU;AACnE,QAAID,YAAW,QAAQ,GAAG;AACtB,aAAO;AAAA,IACX;AAEA,UAAM,aAAa,MAAM,qBAAqB;AAC9C,QAAI,CAAC,YAAY;AACb,aAAO;AAAA,IACX;AAEA,UAAY,KAAK,eAAe,EAAE,QAAQ,KAAK,IAAI,QAAQ,QAAQ,CAAC;AACpE,UAAM,KAAK,MAAM,WAAW,CAAC,KAAK,UAAU,CAAC;AAC7C,QAAI,CAAC,IAAI;AACL,YAAY,MAAM,sBAAsB,EAAE,QAAQ,KAAK,GAAG,CAAC;AAC3D,aAAO;AAAA,IACX;AACA,UAAY,KAAK,eAAe,EAAE,QAAQ,KAAK,IAAI,QAAQ,UAAU,CAAC;AACtE,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,WAAW,UAAoD;AAIjE,QAAI,QAAQ,aAAa,SAAS;AAC9B,YAAM,eAAyB,CAAC;AAChC,YAAM,iBAAiB,kBAAkB;AACzC,UAAI,gBAAgB;AAChB,cAAM,aAAaC,MAAK,gBAAgB,gBAAgB,GAAG,KAAK,WAAW,MAAM,GAAG,GAAG,cAAc;AACrG,YAAID,YAAW,UAAU,GAAG;AACxB,uBAAa,KAAK,UAAU;AAAA,QAChC;AAAA,MACJ;AACA,UAAI;AACA,cAAM,eAAe,iBACjB,CAAC,gBAAgB,QAAQ,IAAI,GAAG,SAAS,IACzC,CAAC,QAAQ,IAAI,GAAG,SAAS;AAC7B,cAAM,eAAe,UAAQ,QAAQ,GAAG,KAAK,UAAU,iBAAiB,EAAE,OAAO,aAAa,CAAC;AAC/F,YAAI,cAAc;AACd,uBAAa,KAAK,YAAY;AAAA,QAClC;AAAA,MACJ,SAAS,GAAG;AAAA,MAAC;AACb,YAAM,eAAeC,MAAK,eAAe,gBAAgB,GAAG,KAAK,WAAW,MAAM,GAAG,GAAG,cAAc;AACtG,UAAID,YAAW,YAAY,GAAG;AAC1B,qBAAa,KAAK,YAAY;AAAA,MAClC;AAEA,iBAAW,eAAe,cAAc;AACpC,YAAI;AACA,gBAAM,UAAU,UAAQ,WAAW;AACnC,cAAI,YAAY;AAChB,cAAI,OAAO,QAAQ,QAAQ,UAAU;AACjC,wBAAY,QAAQ;AAAA,UACxB,WAAW,OAAO,QAAQ,QAAQ,YAAY,QAAQ,IAAI,KAAK,OAAO,GAAG;AACrE,wBAAY,QAAQ,IAAI,KAAK,OAAO;AAAA,UACxC;AAEA,cAAI,WAAW;AACX,gBAAI,KAAK,eAAe,aAAa,UAAU,SAAS,qBAAqB,GAAG;AAC5E,oBAAM,aAAaC,MAAK,QAAQ,WAAW,GAAG,QAAQ,uBAAuB;AAC7E,kBAAID,YAAW,UAAU,GAAG;AACxB,uBAAO,EAAE,SAAS,KAAK,kBAAkB,GAAG,MAAM,CAAC,YAAY,GAAG,KAAK,IAAI,EAAE;AAAA,cACjF;AAAA,YACJ;AAEA,kBAAM,aAAaC,MAAK,QAAQ,WAAW,GAAG,SAAS;AACvD,gBAAID,YAAW,UAAU,GAAG;AACxB,qBAAO,EAAE,SAAS,KAAK,kBAAkB,GAAG,MAAM,CAAC,YAAY,GAAG,KAAK,IAAI,EAAE;AAAA,YACjF;AAAA,UACJ;AAAA,QACJ,SAAS,GAAG;AAAA,QAAC;AAAA,MACjB;AAAA,IACJ;AAEA,QAAI,KAAK,SAAS,KAAK,OAAO,GAAG;AAC7B,aAAO,EAAE,SAAS,KAAK,SAAS,MAAM,KAAK,KAAK;AAAA,IACpD;AAEA,UAAM,WAAW,KAAK,gBAAgB,KAAK,SAAS,KAAK,UAAU;AACnE,QAAIA,YAAW,QAAQ,GAAG;AACtB,aAAO,EAAE,SAAS,UAAU,MAAM,KAAK,KAAK;AAAA,IAChD;AAEA,WAAO;AAAA,EACX;AACJ;AAEA,IAAM,sBAAN,cAAkC,cAAc;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,IAAY,YAAsB,aAAuB,UAA6B,MAAgB;AAC9G,UAAM;AACN,SAAK,KAAK;AACV,SAAK,aAAa;AAClB,SAAK,cAAc;AACnB,SAAK,WAAW,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAQ;AAC9D,SAAK,OAAO;AAAA,EAChB;AAAA,EAEA,MAAM,UAA4B;AAC9B,WAAO,KAAK,SAAS,KAAK,SAAO,KAAK,SAAS,GAAG,CAAC;AAAA,EACvD;AAAA,EAEA,MAAM,WAAW,UAAoD;AACjE,eAAW,OAAO,KAAK,UAAU;AAC7B,UAAI,KAAK,SAAS,GAAG,GAAG;AACpB,eAAO,EAAE,SAAS,KAAK,MAAM,KAAK,KAAK;AAAA,MAC3C;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AACJ;AAEA,IAAM,cAAN,cAA0B,cAAc;AAAA,EACtC,KAAK;AAAA,EACL,aAAa,CAAC,OAAO,MAAM;AAAA,EAC3B,cAAc,CAAC,UAAU,WAAW,MAAM;AAAA,EAE1C,MAAM,UAA4B;AAChC,QAAI,KAAK,SAAS,OAAO,GAAG;AAC1B,aAAO;AAAA,IACT;AAEA,QAAI,CAAC,KAAK,SAAS,IAAI,GAAG;AACtB,YAAY,MAAM,mBAAmB,EAAE,QAAQ,KAAK,IAAI,OAAO,uBAAuB,CAAC;AACvF;AAAA,QACE;AAAA,UACE,QAAQ,KAAK;AAAA,UACb,OAAO;AAAA,UACP,SAAS;AAAA,UACT,IAAI,KAAK,IAAI;AAAA,QACf;AAAA,QACA;AAAA,MACF;AACA,aAAO;AAAA,IACX;AAEA,UAAM,aAAa,MAAM,qBAAqB;AAC9C,QAAI,CAAC,YAAY;AACb,aAAO;AAAA,IACX;AAEA,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA,EAEA,MAAM,WAAW,UAAoD;AACnE,QAAI,KAAK,SAAS,OAAO,GAAG;AACxB,aAAO,EAAE,SAAS,SAAS,MAAM,CAAC,OAAO,EAAE;AAAA,IAC/C;AAEA,UAAM,WAAW,gBAAgB,eAAe,OAAO;AACvD,QAAI,UAAU;AACV,aAAO,EAAE,SAAS,UAAU,MAAM,CAAC,OAAO,EAAE;AAAA,IAChD;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,YAA8B;AAC1C,QAAI;AACA,YAAY,KAAK,eAAe,EAAE,QAAQ,KAAK,IAAI,QAAQ,QAAQ,CAAC;AAEpE,YAAM,SAAS,MAAM;AAAA,QACnB,CAAC,MAAM,WAAW,iCAAiC;AAAA,QACnD;AAAA,UACE,OAAO;AAAA,UACP,MAAM,QAAQ,IAAI,OAAO,GAAG,aAAa,GAAG,QAAQ,aAAa,UAAU,MAAM,GAAG,GAAG,QAAQ,IAAI,IAAI,KAAK;AAAA,QAC9G;AAAA,MACF;AAEA,UAAI,CAAC,OAAO,IAAI;AACZ,cAAY,MAAM,sBAAsB,EAAE,QAAQ,KAAK,IAAI,OAAO,OAAO,MAAM,CAAC;AAChF,eAAO;AAAA,MACX;AAEA,UAAI,CAAC,KAAK,SAAS,OAAO,KAAK,CAAC,gBAAgB,eAAe,OAAO,GAAG;AACpE,cAAY,KAAK,uBAAuB,EAAE,QAAQ,KAAK,IAAI,SAAS,yCAAyC,CAAC;AAAA,MACnH;AAEA,YAAY,KAAK,eAAe,EAAE,QAAQ,KAAK,IAAI,QAAQ,UAAU,CAAC;AACtE,aAAO;AAAA,IACX,SAAS,GAAG;AACR,YAAY,MAAM,qBAAqB,EAAE,QAAQ,KAAK,IAAI,OAAO,OAAO,CAAC,EAAE,CAAC;AAC5E,aAAO;AAAA,IACX;AAAA,EACF;AACF;AAEA,IAAM,qBAAN,cAAiC,cAAc;AAAA,EAC7C,KAAK;AAAA,EACL,aAAa,CAAC,KAAK;AAAA,EACnB,cAAc,CAAC,cAAc,qBAAqB,MAAM;AAAA,EAExD,MAAM,UAA4B;AAChC,QAAI,KAAK,SAAS,eAAe,GAAG;AAClC,aAAO;AAAA,IACT;AAEA,QAAI,KAAK,SAAS,QAAQ,GAAG;AACzB,YAAM,aAAa,MAAM,qBAAqB;AAC9C,UAAI,CAAC,YAAY;AACb,eAAO;AAAA,MACX;AACA,aAAO,KAAK,cAAc;AAAA,IAC9B;AAEA,UAAY,KAAK,mBAAmB,EAAE,QAAQ,KAAK,IAAI,SAAS,2FAA2F,CAAC;AAC5J;AAAA,MACE;AAAA,QACE,QAAQ,KAAK;AAAA,QACb,OAAO;AAAA,QACP,SAAS;AAAA,QACT,IAAI,KAAK,IAAI;AAAA,MACf;AAAA,MACA;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,WAAW,UAAoD;AACnE,QAAI,KAAK,SAAS,eAAe,GAAG;AAChC,aAAO,EAAE,SAAS,iBAAiB,MAAM,CAAC,EAAE;AAAA,IAChD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,gBAAkC;AAC5C,QAAI;AACF,YAAY,KAAK,eAAe,EAAE,QAAQ,KAAK,IAAI,QAAQ,QAAQ,CAAC;AAEpE,YAAM,SAAS,MAAM,UAAU,CAAC,UAAU,aAAa,OAAO,eAAe,CAAC;AAE9E,UAAI,CAAC,OAAO,IAAI;AACZ,cAAY,MAAM,sBAAsB,EAAE,QAAQ,KAAK,IAAI,OAAO,OAAO,MAAM,CAAC;AAChF,eAAO;AAAA,MACX;AAEA,YAAY,KAAK,eAAe,EAAE,QAAQ,KAAK,IAAI,QAAQ,UAAU,CAAC;AACtE,aAAO;AAAA,IACX,SAAS,GAAG;AACR,YAAY,MAAM,qBAAqB,EAAE,QAAQ,KAAK,IAAI,OAAO,OAAO,CAAC,EAAE,CAAC;AAC5E,aAAO;AAAA,IACX;AAAA,EACF;AACF;AAGO,IAAM,oBAAN,MAAM,mBAAkB;AAAA,EAC7B,OAAe;AAAA,EACP,UAA2B,CAAC;AAAA,EAC5B,cAA+B,CAAC;AAAA,EAChC;AAAA,EAEA,cAAc;AAEpB,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,OAAO,MAAM;AAAA,MACd,CAAC,sBAAsB,kBAAkB,YAAY,oBAAoB,SAAS;AAAA,MAClF;AAAA,MACA;AAAA,MACA,CAAC,SAAS;AAAA,IACd,CAAC;AAED,SAAK,SAAS,IAAI,iBAAiB;AAAA,MAC/B,IAAI;AAAA,MACJ,YAAY,CAAC,OAAO,MAAM;AAAA,MAC1B,aAAa,CAAC,kBAAkB,WAAW,YAAY,aAAa,oBAAoB,WAAW,oBAAoB;AAAA,MACvH,OAAO,OAAO,aAAa;AACzB,cAAM,SAAS,gBAAgB,QAAQ;AACvC,YAAI,CAAC,OAAQ,QAAO;AACpB,eAAO,EAAE,SAAS,QAAQ,MAAM,CAAC,QAAQ,EAAE;AAAA,MAC7C;AAAA,MACA,UAAU;AAAA,IACd,CAAC,CAAC;AAEF,SAAK,SAAS,IAAI,YAAY,CAAC;AAC/B,SAAK,SAAS,IAAI,mBAAmB,CAAC;AACtC,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,OAAO,SAAS,MAAM;AAAA,MACvB,CAAC,MAAM;AAAA,MACP;AAAA,MACA;AAAA,MACA,CAAC,OAAO;AAAA,IACZ,CAAC;AAED,SAAK,SAAS,IAAI,iBAAiB;AAAA,MAC/B,IAAI;AAAA,MACJ,YAAY,CAAC,OAAO,QAAQ,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,MAAM;AAAA,MACzE,aAAa,CAAC,aAAa,YAAY;AAAA,MACvC,WAAW,OAAO,aAAa,cAAc,QAAQ;AAAA,MACrD,OAAO,OAAO,aAAa;AACzB,cAAM,OAAO,UAAU,MAAM;AAC7B,YAAI,CAAC,KAAM,QAAO;AAClB,eAAO,EAAE,SAAS,MAAM,MAAM,CAAC,KAAK,EAAE;AAAA,MACxC;AAAA,MACA,UAAU;AAAA,IACd,CAAC,CAAC;AAGF,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,OAAO,QAAQ,OAAO,QAAQ,QAAQ,MAAM;AAAA,MAC7C,CAAC,iBAAiB,gBAAgB,eAAe;AAAA,MACjD;AAAA,MACA;AAAA,MACA,CAAC,SAAS;AAAA,IACd,CAAC;AAID,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,SAAS,MAAM;AAAA,MAChB,CAAC;AAAA,MACD;AAAA,MACA;AAAA,MACA,CAAC,SAAS;AAAA,IACd,CAAC;AAGD,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,cAAc,aAAa;AAAA,MAC5B,CAAC;AAAA,MACD;AAAA,MACA;AAAA,MACA,CAAC,SAAS;AAAA,IACd,CAAC;AAGD,SAAK,SAAS,IAAI,iBAAiB;AAAA,MAC/B,IAAI;AAAA,MACJ,YAAY,CAAC,MAAM;AAAA,MACnB,aAAa,CAAC,cAAc;AAAA,MAC5B,SAAS,YAAY;AACnB,cAAM,aAAa,MAAM,qBAAqB;AAC9C,YAAI,CAAC,WAAY,QAAO;AACxB,yBAAiB;AACjB,eAAO,oBAAoB,CAAC,sBAAsB,CAAC;AAAA,MACrD;AAAA,MACA,OAAO,OAAO,aACZ,mBAAmB;AAAA,QACjB,UAAU,CAAC,qBAAqB;AAAA,QAChC,MAAM,CAAC,SAAS;AAAA,QAChB,aAAa;AAAA,QACb,KAAK;AAAA,MACP,CAAC;AAAA,IACP,CAAC,CAAC;AAEF,SAAK,SAAS,IAAI,iBAAiB;AAAA,MAC/B,IAAI;AAAA,MACJ,YAAY,CAAC,OAAO,QAAQ,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,MAAM;AAAA,MACjF,aAAa;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,SAAS,YAAY,oBAAoB;AAAA,MACzC,OAAO,OAAO,aAAa;AACzB,cAAM,aAAa,oBAAoB;AACvC,YAAI,CAACA,YAAW,UAAU,EAAG,QAAO;AACpC,cAAM,YAAY,MAAM,mBAAmB,UAAU,QAAQ;AAC7D,YAAI,CAAC,UAAW,QAAO;AACvB,cAAM,iBAAiB,sBAAsB,KAAK,sBAAsB;AACxE,eAAO,EAAE,SAAS,gBAAgB,MAAM,CAAC,YAAY,SAAS,EAAE;AAAA,MAClE;AAAA,MACA,UAAU;AAAA,MACV,OAAO;AAAA,IACX,CAAC,CAAC;AAEF,SAAK,SAAS,IAAI,iBAAiB;AAAA,MAC/B,IAAI;AAAA,MACJ,YAAY,CAAC,OAAO,QAAQ,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,UAAU,SAAS;AAAA,MACtG,aAAa;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO,OAAO,aAAa;AACzB,cAAM,cAAc,mBAAmB;AAAA,UACrC,UAAU,CAAC,QAAQ;AAAA,UACnB,MAAM,CAAC,OAAO;AAAA,UACd,KAAK;AAAA,QACP,CAAC;AACD,YAAI,YAAa,QAAO;AACxB,cAAM,gBAAgB,mBAAmB;AAAA,UACvC,UAAU,CAAC,qBAAqB;AAAA,UAChC,KAAK;AAAA,QACP,CAAC;AACD,YAAI,cAAe,QAAO;AAC1B,eAAO,mBAAmB;AAAA,UACxB,UAAU,CAAC,QAAQ;AAAA,UACnB,MAAM,CAAC,OAAO;AAAA,UACd,aAAa;AAAA,UACb,KAAK;AAAA,QACP,CAAC;AAAA,MACH;AAAA,MACA,UAAU;AAAA,MACV,OAAO;AAAA,IACX,CAAC,CAAC;AAEF,SAAK,SAAS,IAAI,iBAAiB;AAAA,MAC/B,IAAI;AAAA,MACJ,YAAY;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAa;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO,OAAO,aACZ,mBAAmB;AAAA,QACjB,UAAU,CAAC,OAAO;AAAA,QAClB,MAAM,CAAC,aAAa,SAAS;AAAA,QAC7B,aAAa;AAAA,QACb,KAAK;AAAA,MACP,CAAC;AAAA,MACH,UAAU;AAAA,MACV,OAAO;AAAA,IACX,CAAC,CAAC;AASF,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,SAAS,MAAM;AAAA,MAChB,CAAC;AAAA,MACD;AAAA,MACA;AAAA,MACA,CAAC,SAAS;AAAA,IACd,CAAC;AAED,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,QAAQ,SAAS,OAAO;AAAA,MACzB,CAAC;AAAA,MACD;AAAA,MACA;AAAA,MACA,CAAC,SAAS;AAAA,IACd,CAAC;AAED,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,SAAS,QAAQ;AAAA,MAClB,CAAC;AAAA,MACD;AAAA,MACA;AAAA,MACA,CAAC,SAAS;AAAA,IACd,CAAC;AAID,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,MAAM;AAAA,MACP,CAAC,eAAe;AAAA,MAChB;AAAA,MACA;AAAA,MACA,CAAC,SAAS;AAAA,IACd,CAAC;AAGD,SAAK,SAAS,IAAI,iBAAiB;AAAA,MAC/B,IAAI;AAAA,MACJ,YAAY,CAAC,SAAS;AAAA,MACtB,aAAa,CAAC,cAAc;AAAA,MAC5B,SAAS,YAAY;AACnB,cAAM,aAAa,MAAM,qBAAqB;AAC9C,YAAI,CAAC,WAAY,QAAO;AACxB,yBAAiB;AACjB,eAAO,oBAAoB,CAAC,wBAAwB,CAAC;AAAA,MACvD;AAAA,MACA,OAAO,OAAO,aACZ,mBAAmB;AAAA,QACjB,UAAU,CAAC,wBAAwB;AAAA,QACnC,MAAM,CAAC,SAAS;AAAA,QAChB,aAAa;AAAA,QACb,KAAK;AAAA,MACP,CAAC;AAAA,IACP,CAAC,CAAC;AAGF,SAAK,SAAS,IAAI,iBAAiB;AAAA,MAC/B,IAAI;AAAA,MACJ,YAAY,CAAC,QAAQ;AAAA,MACrB,aAAa,CAAC,cAAc;AAAA,MAC5B,SAAS,YAAY;AACnB,cAAM,aAAa,MAAM,qBAAqB;AAC9C,YAAI,CAAC,WAAY,QAAO;AACxB,yBAAiB;AACjB,eAAO,oBAAoB,CAAC,0BAA0B,CAAC;AAAA,MACzD;AAAA,MACA,OAAO,OAAO,aACZ,mBAAmB;AAAA,QACjB,UAAU,CAAC,UAAU;AAAA,QACrB,MAAM,CAAC,SAAS;AAAA,QAChB,aAAa;AAAA,QACb,KAAK;AAAA,MACP,CAAC;AAAA,IACP,CAAC,CAAC;AAGF,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,SAAS;AAAA,MACV,CAAC,eAAe;AAAA,MAChB;AAAA,MACA;AAAA,MACA,CAAC,SAAS;AAAA,IACd,CAAC;AAGD,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,YAAY,MAAM;AAAA,MACnB,CAAC,cAAc,mBAAmB;AAAA,MAClC;AAAA,MACA;AAAA,MACA,CAAC,UAAU,MAAM,QAAQ;AAAA,IAC7B,CAAC;AAGD,SAAK,SAAS,IAAI,iBAAiB;AAAA,MAC/B,IAAI;AAAA,MACJ,YAAY,CAAC,OAAO;AAAA,MACpB,aAAa,CAAC,WAAW,gBAAgB,oBAAoB,YAAY,YAAY;AAAA,MACrF,SAAS,YAAY;AACnB,cAAM,aAAaC,MAAK,eAAe,OAAO;AAC9C,cAAM,cAAc,oBAAoB,UAAU;AAClD,cAAM,YAAY,kBAAkB,UAAU;AAC9C,YAAI,eAAe,UAAW,QAAO;AACrC,cAAM,aAAa,MAAM,qBAAqB;AAC9C,YAAI,CAAC,WAAY,QAAO;AACxB,yBAAiB;AACjB,YAAI;AACF,gBAAM,aAAa,UAAU;AAC7B,iBAAO;AAAA,QACT,SAAS,OAAO;AACd,gBAAY,MAAM,sBAAsB,EAAE,QAAQ,SAAS,OAAO,OAAO,KAAK,EAAE,CAAC;AACjF,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MACA,OAAO,YAAY;AACjB,cAAM,OAAO,UAAU,MAAM;AAC7B,YAAI,CAAC,KAAM,QAAO;AAClB,cAAM,YAAY,MAAM,oBAAoB;AAC5C,YAAI,CAAC,aAAa,YAAY,GAAI,QAAO;AACzC,cAAM,aAAaA,MAAK,eAAe,OAAO;AAC9C,cAAM,cAAc,oBAAoB,UAAU;AAClD,cAAM,YAAY,kBAAkB,UAAU;AAC9C,YAAI,CAAC,eAAe,CAAC,UAAW,QAAO;AACvC,cAAM,UAAU,YAAYA,MAAK,OAAO,GAAG,YAAY,CAAC;AACxD,eAAO;AAAA,UACL,SAAS;AAAA,UACT,MAAM;AAAA,YACJ;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACJ,CAAC,CAAC;AAGF,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,MAAM,QAAQ,MAAM,QAAQ,KAAK;AAAA,MAClC,CAAC,yBAAyB,eAAe;AAAA,MACzC;AAAA,MACA,CAAC,SAAS;AAAA,IACd,CAAC;AAGD,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,OAAO,OAAO;AAAA,MACf,CAAC,WAAW,eAAe;AAAA,MAC3B;AAAA,MACA,CAAC,SAAS;AAAA,IACd,CAAC;AAED,SAAK,SAAS,IAAI,iBAAiB;AAAA,MAC/B,IAAI;AAAA,MACJ,YAAY,CAAC,MAAM;AAAA,MACnB,aAAa;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,SAAS,YAAY;AACnB,cAAM,aAAaA,MAAK,eAAe,qBAAqB;AAC5D,cAAM,WAAW;AAAA,UACf;AAAA,UACA,QAAQ,aAAa,UAAU,4BAA4B;AAAA,QAC7D;AACA,YAAI,SAAU,QAAO;AACrB,YAAI,UAAU,qBAAqB,KAAK,UAAU,QAAQ,EAAG,QAAO;AACpE,cAAM,aAAa,MAAM,qBAAqB;AAC9C,YAAI,CAAC,WAAY,QAAO;AACxB,yBAAiB;AACjB,YAAI;AACF,gBAAM,aAAa,UAAU;AAC7B,iBAAO;AAAA,QACT,SAAS,OAAO;AACd,gBAAY,MAAM,sBAAsB,EAAE,QAAQ,uBAAuB,OAAO,OAAO,KAAK,EAAE,CAAC;AAC/F,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MACA,OAAO,OAAO,aAAa;AACzB,cAAM,SAAS,mBAAmB;AAAA,UAChC,UAAU,CAAC,uBAAuB,QAAQ;AAAA,UAC1C,KAAK;AAAA,QACP,CAAC;AACD,YAAI,OAAQ,QAAO;AACnB,cAAM,aAAaA,MAAK,eAAe,qBAAqB;AAC5D,cAAM,SAAS;AAAA,UACb;AAAA,UACA,QAAQ,aAAa,UAAU,4BAA4B;AAAA,QAC7D;AACA,YAAI,CAAC,OAAQ,QAAO;AACpB,eAAO,EAAE,SAAS,QAAQ,MAAM,CAAC,EAAE;AAAA,MACrC;AAAA,IACJ,CAAC,CAAC;AAGF,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,OAAO,SAAS;AAAA,MACjB,CAAC;AAAA,MACD;AAAA,MACA,CAAC,OAAO;AAAA,IACZ,CAAC;AAGD,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,OAAO,MAAM;AAAA,MACd,CAAC,kBAAkB;AAAA,MACnB,CAAC,aAAa,wBAAwB;AAAA,MACtC,CAAC;AAAA,IACL,CAAC;AAED,SAAK,SAAS,IAAI,iBAAiB;AAAA,MAC/B,IAAI;AAAA,MACJ,YAAY,CAAC,OAAO,MAAM;AAAA,MAC1B,aAAa,CAAC,WAAW,UAAU;AAAA,MACnC,SAAS,YAAY;AACnB,cAAM,aAAaA,MAAK,eAAe,WAAW;AAClD,cAAM,WAAW;AAAA,UACf;AAAA,UACA,QAAQ,aAAa,UAAU,wBAAwB;AAAA,QACzD;AACA,YAAI,SAAU,QAAO;AACrB,YAAI,UAAU,WAAW,EAAG,QAAO;AACnC,cAAM,aAAa,MAAM,qBAAqB;AAC9C,YAAI,CAAC,WAAY,QAAO;AACxB,yBAAiB;AACjB,YAAI;AACF,gBAAM,gBAAgB,UAAU;AAChC,iBAAO;AAAA,QACT,SAAS,OAAO;AACd,gBAAY,MAAM,sBAAsB,EAAE,QAAQ,aAAa,OAAO,OAAO,KAAK,EAAE,CAAC;AACrF,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MACA,OAAO,OAAO,aAAa;AACzB,YAAI,UAAU,WAAW,GAAG;AAC1B,iBAAO,EAAE,SAAS,aAAa,MAAM,CAAC,EAAE;AAAA,QAC1C;AACA,cAAM,aAAaA,MAAK,eAAe,WAAW;AAClD,cAAM,SACJ,kBAAkB,YAAY,QAAQ,aAAa,UAAU,wBAAwB,oBAAoB,KACzG,kBAAkB,YAAY,oBAAoB;AACpD,YAAI,CAAC,OAAQ,QAAO;AACpB,eAAO,EAAE,SAAS,QAAQ,MAAM,CAAC,EAAE;AAAA,MACrC;AAAA,IACJ,CAAC,CAAC;AAEF,SAAK,SAAS,IAAI,iBAAiB;AAAA,MAC/B,IAAI;AAAA,MACJ,YAAY,CAAC,QAAQ,MAAM;AAAA,MAC3B,aAAa,CAAC,WAAW;AAAA,MACzB,SAAS,YAAY;AACnB,cAAM,aAAaA,MAAK,eAAe,KAAK;AAC5C,cAAM,WAAW,kBAAkB,YAAY,QAAQ,aAAa,UAAU,YAAY,KAAK;AAC/F,YAAI,SAAU,QAAO;AACrB,YAAI,UAAU,KAAK,EAAG,QAAO;AAC7B,cAAM,aAAa,MAAM,qBAAqB;AAC9C,YAAI,CAAC,WAAY,QAAO;AACxB,yBAAiB;AACjB,YAAI;AACF,gBAAM,WAAW,UAAU;AAC3B,iBAAO;AAAA,QACT,SAAS,OAAO;AACd,gBAAY,MAAM,sBAAsB,EAAE,QAAQ,OAAO,OAAO,OAAO,KAAK,EAAE,CAAC;AAC/E,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MACA,OAAO,OAAO,aAAa;AACzB,cAAM,SAAS,mBAAmB,EAAE,UAAU,CAAC,KAAK,GAAG,KAAK,SAAS,CAAC;AACtE,YAAI,OAAQ,QAAO;AACnB,cAAM,aAAaA,MAAK,eAAe,KAAK;AAC5C,cAAM,SAAS,kBAAkB,YAAY,QAAQ,aAAa,UAAU,YAAY,KAAK;AAC7F,YAAI,CAAC,OAAQ,QAAO;AACpB,eAAO,EAAE,SAAS,QAAQ,MAAM,CAAC,EAAE;AAAA,MACrC;AAAA,IACJ,CAAC,CAAC;AAGF,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,KAAK;AAAA,MACN,CAAC,WAAW,MAAM;AAAA,MAClB;AAAA,MACA,CAAC;AAAA,IACL,CAAC;AAGD,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,OAAO,QAAQ,MAAM;AAAA,MACtB,CAAC,WAAW,MAAM;AAAA,MAClB;AAAA,MACA,CAAC,8BAA8B;AAAA,IACnC,CAAC;AAGD,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,QAAQ;AAAA,MACT,CAAC,eAAe;AAAA,MAChB;AAAA,MACA,CAAC;AAAA,IACL,CAAC;AAGD,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,OAAO;AAAA,MACR,CAAC,cAAc;AAAA,MACf;AAAA,MACA,CAAC,iBAAiB;AAAA,IACtB,CAAC;AAGD,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,OAAO,MAAM;AAAA,MACd,CAAC,cAAc;AAAA,MACf,CAAC,aAAa,UAAU;AAAA,MACxB,CAAC;AAAA,IACL,CAAC;AAGD,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,QAAQ;AAAA,MACT,CAAC,YAAY;AAAA,MACb;AAAA,MACA,CAAC,KAAK;AAAA,IACV,CAAC;AAGD,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,QAAQ,SAAS,SAAS,MAAM;AAAA,MACjC,CAAC,YAAY,aAAa;AAAA,MAC1B;AAAA,MACA,CAAC;AAAA,IACL,CAAC;AAGD,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,MAAM;AAAA,MACP,CAAC,WAAW;AAAA,MACZ;AAAA,MACA,CAAC;AAAA,IACL,CAAC;AAGD,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,MAAM;AAAA,MACP,CAAC;AAAA,MACD;AAAA,MACA,CAAC;AAAA,IACL,CAAC;AAGD,SAAK,SAAS,IAAI,iBAAiB;AAAA,MAC/B,IAAI;AAAA,MACJ,YAAY,CAAC,UAAU,QAAQ,KAAK;AAAA,MACpC,aAAa,CAAC,aAAa,YAAY,QAAQ,SAAS;AAAA,MACxD,SAAS,YAAY;AACnB,cAAM,aAAaA,MAAK,eAAe,QAAQ;AAC/C,YAAI,oBAAoB,UAAU,EAAG,QAAO;AAC5C,cAAM,aAAa,MAAM,qBAAqB;AAC9C,YAAI,CAAC,WAAY,QAAO;AACxB,yBAAiB;AACjB,YAAI;AACF,gBAAM,cAAc,UAAU;AAC9B,iBAAO;AAAA,QACT,SAAS,OAAO;AACd,gBAAY,MAAM,sBAAsB,EAAE,QAAQ,UAAU,OAAO,OAAO,KAAK,EAAE,CAAC;AAClF,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MACA,OAAO,YAAY;AACjB,cAAM,aAAaA,MAAK,eAAe,QAAQ;AAC/C,cAAM,SAAS,oBAAoB,UAAU;AAC7C,YAAI,CAAC,OAAQ,QAAO;AACpB,eAAO,EAAE,SAAS,QAAQ,MAAM,CAAC,SAAS,EAAE;AAAA,MAC9C;AAAA,IACJ,CAAC,CAAC;AAGF,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,OAAO,MAAM;AAAA,MACd,CAAC,cAAc,iBAAiB,SAAS;AAAA,MACzC;AAAA,MACA,CAAC,OAAO;AAAA,IACZ,CAAC;AAGD,SAAK,SAAS,IAAI;AAAA,MACd;AAAA,MACA,CAAC,QAAQ,MAAM;AAAA,MACf,CAAC;AAAA,MACD;AAAA,MACA,CAAC;AAAA,IACL,CAAC;AACD,SAAK,qBAAqB,yBAAyB,CAAC;AAAA,EACtD;AAAA,EAEA,OAAO,cAAiC;AACtC,QAAI,CAAC,mBAAkB,UAAU;AAC/B,yBAAkB,WAAW,IAAI,mBAAkB;AAAA,IACrD;AACA,WAAO,mBAAkB;AAAA,EAC3B;AAAA,EAEA,SAAS,QAAuB;AAC9B,SAAK,YAAY,KAAK,MAAM;AAC5B,SAAK,QAAQ,KAAK,MAAM;AAAA,EAC1B;AAAA,EAEA,sBAAsB,KAAmC;AACvD,UAAM,UAAU,KAAK,uBAAuB,GAAG;AAC/C,WAAO,QAAQ,CAAC,KAAK;AAAA,EACvB;AAAA,EAEA,uBAAuB,KAA8B;AACnD,UAAM,aAAa,KAAK,QAAQ,OAAO,YAAU,OAAO,WAAW,SAAS,GAAG,CAAC;AAChF,UAAM,UAAU,WAAW,OAAO,YAAU,CAAC,KAAK,iBAAiB,MAAM,CAAC;AAC1E,UAAM,UAAU,KAAK,qBAAqB,SAAS,GAAG;AACtD,WAAO,QAAQ,SAAS,UAAU,KAAK,eAAe,OAAO;AAAA,EAC/D;AAAA,EAEA,0BAA0B,KAAqB;AAC7C,UAAM,MAAM,KAAK,eAAe;AAChC,WAAO,IAAI,GAAG,KAAK;AAAA,EACrB;AAAA,EAEA,gCAAgC,KAAiC;AAC/D,UAAM,aAAa,KAAK,0BAA0B,GAAG;AACrD,WAAO,KAAK,iCAAiC,UAAU;AAAA,EACzD;AAAA,EAEA,iCAAiC,YAAwC;AACvE,UAAM,aAAa,KAAK,sBAAsB;AAC9C,WAAO,WAAW,UAAU;AAAA,EAC9B;AAAA,EAEA,cAAuC;AACrC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,wBAAwB,SAA2D;AACjF,SAAK,qBAAqB,yBAAyB,OAAO,CAAC;AAAA,EAC7D;AAAA,EAEA,qBAAqB,UAA8B;AACjD,UAAM,SAAS,iBAAiB,KAAK,gBAAgB,QAAQ;AAC7D,UAAM,kBAAkB,0BAA0B,MAAM;AACxD,SAAK,iBAAiB;AACtB,UAAM,YAAY,iBAAiB;AACnC,UAAM,UAAU,IAAI,IAAI,KAAK,YAAY,IAAI,YAAU,OAAO,EAAE,CAAC;AACjE,UAAM,gBAAiC,CAAC;AACxC,QAAI,WAAW;AACb,iBAAW,CAAC,IAAI,QAAQ,KAAK,OAAO,QAAQ,SAAS,GAAG;AACtD,YAAI,QAAQ,IAAI,EAAE,EAAG;AACrB,YAAI,CAAC,SAAS,QAAS;AACvB,YAAI,CAAC,SAAS,cAAc,SAAS,WAAW,WAAW,EAAG;AAC9D,cAAM,OAAO,IAAI,iBAAiB;AAAA,UAChC;AAAA,UACA,YAAY,SAAS;AAAA,UACrB,aAAa,SAAS,eAAe,CAAC;AAAA,UACtC,OAAO,aAAa,EAAE,SAAS,SAAS,WAAW,IAAI,MAAM,SAAS,QAAQ,CAAC,EAAE;AAAA,UACjF,UAAU,SAAS;AAAA,UACnB,OAAO,SAAS;AAAA,QAClB,CAAC;AACD,sBAAc;AAAA,UACZ,IAAI;AAAA,YACF;AAAA,YACA;AAAA,YACA,iBAAiB;AAAA,YACjB,iBAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,SAAK,UAAU;AAAA,MACb,GAAG,KAAK,YAAY;AAAA,QAClB,YACE,IAAI;AAAA,UACF;AAAA,UACA,iBAAiB,UAAU,OAAO,EAAE;AAAA,UACpC,iBAAiB;AAAA,UACjB,iBAAiB;AAAA,QACnB;AAAA,MACJ;AAAA,MACA,GAAG;AAAA,IACL;AAAA,EACF;AAAA,EAEA,yBAA+B;AAC7B,SAAK,iBAAiB;AACtB,SAAK,UAAU,CAAC,GAAG,KAAK,WAAW;AAAA,EACrC;AAAA,EAEQ,iBAAyC;AAC/C,WAAO,EAAE,GAAG,sBAAsB,GAAI,KAAK,gBAAgB,eAAe,CAAC,EAAG;AAAA,EAChF;AAAA,EAEQ,wBAAgD;AACtD,WAAO,EAAE,GAAG,6BAA6B,GAAI,KAAK,gBAAgB,sBAAsB,CAAC,EAAG;AAAA,EAC9F;AAAA,EAEQ,iBAAiB,QAAgC;AACvD,QAAI,OAAO,SAAU,QAAO;AAC5B,UAAM,kBAAkB,KAAK,gBAAgB;AAC7C,WAAO,QAAQ,iBAAiB,SAAS,OAAO,EAAE,CAAC;AAAA,EACrD;AAAA,EAEQ,eAAe,SAA2C;AAChE,WAAO,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,GAAG,OAAO,EAAE,YAAY,MAAM,EAAE,YAAY,EAAE;AAAA,EAC1E;AAAA,EAEQ,qBAAqB,SAA0B,KAA8B;AACnF,UAAM,SAAS,KAAK,gBAAgB;AACpC,QAAI,CAAC,UAAU,OAAO,WAAW,EAAG,QAAO,CAAC;AAC5C,UAAM,OAAO,IAAI,IAAI,QAAQ,IAAI,YAAU,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC;AAC/D,UAAM,UAA2B,CAAC;AAClC,UAAM,OAAO,oBAAI,IAAY;AAC7B,eAAW,SAAS,QAAQ;AAC1B,UAAI,MAAM,cAAc,CAAC,MAAM,WAAW,SAAS,GAAG,EAAG;AACzD,YAAM,eAAe,MAAM,UACxB,IAAI,QAAM,KAAK,IAAI,EAAE,CAAC,EACtB,OAAO,CAAC,WAAoC,QAAQ,MAAM,CAAC;AAC9D,UAAI,aAAa,WAAW,EAAG;AAC/B,YAAM,SAAS,KAAK,eAAe,YAAY;AAC/C,UAAI,MAAM,aAAa,YAAY;AACjC,mBAAW,UAAU,QAAQ;AAC3B,cAAI,KAAK,IAAI,OAAO,EAAE,EAAG;AACzB,eAAK,IAAI,OAAO,EAAE;AAClB,kBAAQ,KAAK,MAAM;AAAA,QACrB;AACA;AAAA,MACF;AACA,YAAM,WAAW,OAAO,CAAC;AACzB,UAAI,YAAY,CAAC,KAAK,IAAI,SAAS,EAAE,GAAG;AACtC,aAAK,IAAI,SAAS,EAAE;AACpB,gBAAQ,KAAK,QAAQ;AAAA,MACvB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;",
|
|
6
|
+
"names": ["join", "existsSync", "statSync", "existsSync", "join", "statSync"]
|
|
7
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../package.json", "../src/constants/macros.ts"],
|
|
4
|
-
"sourcesContent": ["{\n \"name\": \"pybao-cli\",\n \"version\": \"1.4.
|
|
4
|
+
"sourcesContent": ["{\n \"name\": \"pybao-cli\",\n \"version\": \"1.4.13\",\n \"bin\": {\n \"pyb\": \"cli.js\",\n \"pyb-acp\": \"cli-acp.js\"\n },\n \"engines\": {\n \"node\": \">=20.18.1\"\n },\n \"main\": \"cli.js\",\n \"author\": \"PYB-XC\",\n \"license\": \"MIT\",\n \"description\": \"PYB-CLI - Minimal AI Agent with multi-model support and CLI interface\",\n \"keywords\": [\n \"ai\",\n \"agent\",\n \"minimal\",\n \"claude\"\n ],\n \"homepage\": \"https://github.com/pyb-xc/pyb-ts\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/pyb-xc/pyb-ts.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/pyb-xc/pyb-ts/issues\"\n },\n \"files\": [\n \"cli.js\",\n \"cli-acp.js\",\n \"yoga.wasm\",\n \"dist/**/*\",\n \"scripts/binary-utils.cjs\",\n \"scripts/cli-wrapper.cjs\",\n \"scripts/cli-acp-wrapper.cjs\",\n \"scripts/postinstall.js\",\n \".npmrc\",\n \"resources/**/*\"\n ],\n \"scripts\": {\n \"dev\": \"bun run ./src/entrypoints/cli.tsx --verbose\",\n \"build:npm\": \"bun scripts/build.mjs\",\n \"build\": \"npm run build:npm\",\n \"build:binary\": \"node scripts/build-binary.mjs\",\n \"clean\": \"node scripts/clean.mjs\",\n \"prepublishOnly\": \"npm run build:npm && node scripts/prepublish-check.js\",\n \"postinstall\": \"node scripts/postinstall.js || true\",\n \"format\": \"prettier --write \\\"src/**/*.{ts,tsx,js,jsx,json}\\\" \\\"tests/**/*.{ts,tsx,js,jsx,json}\\\"\",\n \"format:check\": \"prettier --check \\\"src/**/*.{ts,tsx,js,jsx,json}\\\" \\\"tests/**/*.{ts,tsx,js,jsx,json}\\\"\",\n \"lint\": \"eslint . --ext .ts,.tsx,.js --max-warnings 0\",\n \"lint:fix\": \"eslint . --ext .ts,.tsx,.js --fix\",\n \"test\": \"bun test\",\n \"test:unit\": \"bun test tests/unit\",\n \"test:integration\": \"bun test tests/integration\",\n \"test:e2e\": \"bun test tests/e2e\",\n \"typecheck\": \"tsc --noEmit\",\n \"prepare\": \"bun run scripts/install-hooks.mjs\",\n \"publish:dev\": \"bun run scripts/publish-dev.js\",\n \"publish:release\": \"bun run scripts/publish-release.js\",\n \"bench:startup\": \"bun run scripts/bench-startup.mjs\",\n \"parity:reference\": \"bun run scripts/reference-parity-check.mjs\"\n },\n \"dependencies\": {\n \"@anthropic-ai/bedrock-sdk\": \"^0.12.6\",\n \"@anthropic-ai/sdk\": \"^0.39.0\",\n \"@anthropic-ai/vertex-sdk\": \"^0.7.0\",\n \"@astrojs/language-server\": \"2.16.2\",\n \"@aws-sdk/client-bedrock-runtime\": \"3.797.0\",\n \"@commander-js/extra-typings\": \"^13.1.0\",\n \"@inkjs/ui\": \"^2.0.0\",\n \"@modelcontextprotocol/sdk\": \"^1.15.1\",\n \"@prisma/language-server\": \"31.3.4\",\n \"@types/lodash-es\": \"^4.17.12\",\n \"@types/react\": \"^19.1.8\",\n \"@vscode/ripgrep\": \"^1.17.0\",\n \"@vue/language-server\": \"3.2.2\",\n \"ajv\": \"^8.17.1\",\n \"ansi-escapes\": \"^7.0.0\",\n \"bash-language-server\": \"5.6.0\",\n \"chalk\": \"^5.4.1\",\n \"cli-highlight\": \"^2.1.11\",\n \"cli-table3\": \"^0.6.5\",\n \"commander\": \"^13.1.0\",\n \"debug\": \"^4.4.1\",\n \"diff\": \"^7.0.0\",\n \"dockerfile-language-server-nodejs\": \"0.15.0\",\n \"dotenv\": \"^16.6.1\",\n \"env-paths\": \"^3.0.0\",\n \"fflate\": \"^0.8.2\",\n \"figures\": \"^6.1.0\",\n \"glob\": \"^11.0.3\",\n \"graphql-language-service-cli\": \"3.5.0\",\n \"gray-matter\": \"^4.0.3\",\n \"highlight.js\": \"^11.11.1\",\n \"ignore\": \"^7.0.5\",\n \"ink\": \"5.2.1\",\n \"ink-link\": \"^4.1.0\",\n \"ink-select-input\": \"^6.2.0\",\n \"ink-text-input\": \"^6.0.0\",\n \"intelephense\": \"1.16.3\",\n \"js-yaml\": \"^4.1.1\",\n \"lodash-es\": \"^4.17.21\",\n \"lru-cache\": \"^11.1.0\",\n \"marked\": \"^15.0.12\",\n \"minimatch\": \"^10.1.1\",\n \"nanoid\": \"^5.1.5\",\n \"node-html-parser\": \"^7.0.1\",\n \"openai\": \"4.104.0\",\n \"pyright\": \"1.1.408\",\n \"react\": \"18.3.1\",\n \"semver\": \"^7.7.2\",\n \"shell-quote\": \"1.8.3\",\n \"spawn-rx\": \"^5.1.2\",\n \"string-width\": \"^7.2.0\",\n \"strip-ansi\": \"^7.1.0\",\n \"svelte-language-server\": \"0.17.23\",\n \"tsx\": \"^4.20.3\",\n \"typescript-language-server\": \"5.1.3\",\n \"undici\": \"^7.11.0\",\n \"vscode-jsonrpc\": \"8.2.1\",\n \"vscode-langservers-extracted\": \"4.10.0\",\n \"web-tree-sitter\": \"0.25.10\",\n \"which\": \"^6.0.0\",\n \"wrap-ansi\": \"^9.0.0\",\n \"yaml-language-server\": \"1.19.2\",\n \"zod\": \"^3.25.76\",\n \"zod-to-json-schema\": \"^3.24.6\"\n },\n \"devDependencies\": {\n \"@types/bun\": \"latest\",\n \"@types/jest\": \"^30.0.0\",\n \"@types/node\": \"^24.1.0\",\n \"@types/which\": \"^3.0.4\",\n \"@typescript-eslint/eslint-plugin\": \"^8.50.1\",\n \"@typescript-eslint/parser\": \"^8.50.1\",\n \"abort-controller\": \"3.0.0\",\n \"bun-types\": \"latest\",\n \"cheerio\": \"1.1.2\",\n \"esbuild\": \"^0.25.9\",\n \"eslint\": \"8.57.0\",\n \"eslint-plugin-react-hooks\": \"^7.0.1\",\n \"ink-testing-library\": \"4.0.0\",\n \"node-fetch\": \"3.3.2\",\n \"prettier\": \"^3.6.2\",\n \"react-devtools-core\": \"^7.0.1\",\n \"tree-sitter-bash\": \"0.25.1\",\n \"tree-sitter-c-sharp\": \"0.23.1\",\n \"tree-sitter-clojure\": \"0.4.0\",\n \"tree-sitter-cpp\": \"0.23.4\",\n \"tree-sitter-go\": \"0.25.0\",\n \"tree-sitter-haskell\": \"0.23.1\",\n \"tree-sitter-java\": \"0.23.5\",\n \"tree-sitter-julia\": \"0.23.1\",\n \"tree-sitter-nix\": \"0.0.2\",\n \"tree-sitter-ocaml\": \"0.24.2\",\n \"tree-sitter-python\": \"0.25.0\",\n \"tree-sitter-rust\": \"0.24.0\",\n \"tree-sitter-scala\": \"0.24.0\",\n \"tree-sitter-swift\": \"0.7.1\",\n \"tree-sitter-typescript\": \"0.23.2\",\n \"turndown\": \"7.2.2\",\n \"typescript\": \"^5.9.2\"\n },\n \"overrides\": {\n \"@aws-sdk/client-bedrock-runtime\": \"3.797.0\",\n \"@smithy/smithy-client\": \"2.5.1\"\n }\n}\n", "import pkg from '../../package.json'\n\nexport const MACRO = {\n VERSION: pkg.version,\n README_URL: 'https://github.com/pyb-xc/pyb-ts#readme',\n PACKAGE_URL: 'pybao-cli',\n ISSUES_EXPLAINER:\n 'report the issue at https://github.com/pyb-xc/pyb-ts/issues',\n}\n"],
|
|
5
5
|
"mappings": ";;;;AAAA;AAAA,EACE,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,KAAO;AAAA,IACL,KAAO;AAAA,IACP,WAAW;AAAA,EACb;AAAA,EACA,SAAW;AAAA,IACT,MAAQ;AAAA,EACV;AAAA,EACA,MAAQ;AAAA,EACR,QAAU;AAAA,EACV,SAAW;AAAA,EACX,aAAe;AAAA,EACf,UAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,UAAY;AAAA,EACZ,YAAc;AAAA,IACZ,MAAQ;AAAA,IACR,KAAO;AAAA,EACT;AAAA,EACA,MAAQ;AAAA,IACN,KAAO;AAAA,EACT;AAAA,EACA,OAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,KAAO;AAAA,IACP,aAAa;AAAA,IACb,OAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,OAAS;AAAA,IACT,gBAAkB;AAAA,IAClB,aAAe;AAAA,IACf,QAAU;AAAA,IACV,gBAAgB;AAAA,IAChB,MAAQ;AAAA,IACR,YAAY;AAAA,IACZ,MAAQ;AAAA,IACR,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,YAAY;AAAA,IACZ,WAAa;AAAA,IACb,SAAW;AAAA,IACX,eAAe;AAAA,IACf,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,oBAAoB;AAAA,EACtB;AAAA,EACA,cAAgB;AAAA,IACd,6BAA6B;AAAA,IAC7B,qBAAqB;AAAA,IACrB,4BAA4B;AAAA,IAC5B,4BAA4B;AAAA,IAC5B,mCAAmC;AAAA,IACnC,+BAA+B;AAAA,IAC/B,aAAa;AAAA,IACb,6BAA6B;AAAA,IAC7B,2BAA2B;AAAA,IAC3B,oBAAoB;AAAA,IACpB,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,wBAAwB;AAAA,IACxB,KAAO;AAAA,IACP,gBAAgB;AAAA,IAChB,wBAAwB;AAAA,IACxB,OAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,WAAa;AAAA,IACb,OAAS;AAAA,IACT,MAAQ;AAAA,IACR,qCAAqC;AAAA,IACrC,QAAU;AAAA,IACV,aAAa;AAAA,IACb,QAAU;AAAA,IACV,SAAW;AAAA,IACX,MAAQ;AAAA,IACR,gCAAgC;AAAA,IAChC,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,QAAU;AAAA,IACV,KAAO;AAAA,IACP,YAAY;AAAA,IACZ,oBAAoB;AAAA,IACpB,kBAAkB;AAAA,IAClB,cAAgB;AAAA,IAChB,WAAW;AAAA,IACX,aAAa;AAAA,IACb,aAAa;AAAA,IACb,QAAU;AAAA,IACV,WAAa;AAAA,IACb,QAAU;AAAA,IACV,oBAAoB;AAAA,IACpB,QAAU;AAAA,IACV,SAAW;AAAA,IACX,OAAS;AAAA,IACT,QAAU;AAAA,IACV,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,0BAA0B;AAAA,IAC1B,KAAO;AAAA,IACP,8BAA8B;AAAA,IAC9B,QAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,gCAAgC;AAAA,IAChC,mBAAmB;AAAA,IACnB,OAAS;AAAA,IACT,aAAa;AAAA,IACb,wBAAwB;AAAA,IACxB,KAAO;AAAA,IACP,sBAAsB;AAAA,EACxB;AAAA,EACA,iBAAmB;AAAA,IACjB,cAAc;AAAA,IACd,eAAe;AAAA,IACf,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,oCAAoC;AAAA,IACpC,6BAA6B;AAAA,IAC7B,oBAAoB;AAAA,IACpB,aAAa;AAAA,IACb,SAAW;AAAA,IACX,SAAW;AAAA,IACX,QAAU;AAAA,IACV,6BAA6B;AAAA,IAC7B,uBAAuB;AAAA,IACvB,cAAc;AAAA,IACd,UAAY;AAAA,IACZ,uBAAuB;AAAA,IACvB,oBAAoB;AAAA,IACpB,uBAAuB;AAAA,IACvB,uBAAuB;AAAA,IACvB,mBAAmB;AAAA,IACnB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,IACvB,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,IACrB,mBAAmB;AAAA,IACnB,qBAAqB;AAAA,IACrB,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,0BAA0B;AAAA,IAC1B,UAAY;AAAA,IACZ,YAAc;AAAA,EAChB;AAAA,EACA,WAAa;AAAA,IACX,mCAAmC;AAAA,IACnC,yBAAyB;AAAA,EAC3B;AACF;;;ACtKO,IAAM,QAAQ;AAAA,EACnB,SAAS,gBAAI;AAAA,EACb,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,kBACE;AACJ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -3,13 +3,13 @@ const require = __pybCreateRequire(import.meta.url);
|
|
|
3
3
|
import {
|
|
4
4
|
getSettingsFileCandidates,
|
|
5
5
|
loadSettingsWithLegacyFallback
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-34XEWGUY.js";
|
|
7
7
|
import {
|
|
8
8
|
getSessionPlugins
|
|
9
9
|
} from "./chunk-BJSWTHRM.js";
|
|
10
10
|
import {
|
|
11
11
|
getTheme
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-FMH4U7NO.js";
|
|
13
13
|
import {
|
|
14
14
|
addMcprcServerForTesting,
|
|
15
15
|
getCurrentProjectConfig,
|
|
@@ -19,13 +19,13 @@ import {
|
|
|
19
19
|
safeParseJSON,
|
|
20
20
|
saveCurrentProjectConfig,
|
|
21
21
|
saveGlobalConfig
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-2PC7UK66.js";
|
|
23
23
|
import {
|
|
24
24
|
PRODUCT_COMMAND,
|
|
25
25
|
PRODUCT_NAME,
|
|
26
26
|
getCwd,
|
|
27
27
|
logMCPError
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-P7MPKAPW.js";
|
|
29
29
|
|
|
30
30
|
// src/services/mcp/client.ts
|
|
31
31
|
import { existsSync as existsSync2, readFileSync as readFileSync2 } from "fs";
|
|
@@ -8,14 +8,14 @@ import {
|
|
|
8
8
|
getSettingsFileCandidates,
|
|
9
9
|
loadSettingsWithLegacyFallback,
|
|
10
10
|
saveSettingsToPrimaryAndSyncLegacy
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-34XEWGUY.js";
|
|
12
12
|
import {
|
|
13
13
|
getCurrentProjectConfig
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-2PC7UK66.js";
|
|
15
15
|
import {
|
|
16
16
|
getCwd,
|
|
17
17
|
logError
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-P7MPKAPW.js";
|
|
19
19
|
|
|
20
20
|
// src/utils/permissions/toolPermissionSettings.ts
|
|
21
21
|
function uniqueStrings(value) {
|
|
@@ -9,10 +9,10 @@ import {
|
|
|
9
9
|
PLAN_SLUG_VERBS,
|
|
10
10
|
getCwd,
|
|
11
11
|
resolveXdgDataPath
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-P7MPKAPW.js";
|
|
13
13
|
import {
|
|
14
14
|
MACRO
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-6OP2JTUK.js";
|
|
16
16
|
|
|
17
17
|
// src/utils/protocol/pybAgentSessionLog.ts
|
|
18
18
|
import { execFileSync } from "child_process";
|