From de55adaf49e2fb3c72c81461940376c01c6d6a9e Mon Sep 17 00:00:00 2001 From: musistudio Date: Fri, 10 Jul 2026 22:26:56 +0800 Subject: [PATCH] Refactor router pipeline and update request handling --- build/esbuild.config.mjs | 46 +- marketplace/plugins/agent-console/build.mjs | 124 + marketplace/plugins/agent-console/index.cjs | 803 ++- .../plugins/agent-console/package.json | 45 + .../plugins/agent-console/src/index.cjs | 2411 +++++++ .../assets/agent-logos/claude-code.png | Bin 0 -> 47454 bytes .../src/renderer/assets/agent-logos/codex.png | Bin 0 -> 354585 bytes .../src/renderer/assets/codexTemplate@2x.png | Bin 0 -> 842 bytes .../benchmarks/markdown-rendering/index.html | 12 + .../benchmarks/markdown-rendering/main.ts | 524 ++ .../src/renderer/components/ui/badge.tsx | 32 + .../src/renderer/components/ui/button.tsx | 47 + .../src/renderer/components/ui/input.tsx | 20 + .../src/renderer/components/ui/select.tsx | 176 + .../src/renderer/components/ui/textarea.tsx | 19 + .../src/renderer/components/ui/toast.tsx | 219 + .../agent-console/src/renderer/lib/i18n.tsx | 1700 +++++ .../agent-console/src/renderer/lib/utils.ts | 6 + .../src/renderer/pages/home/App.tsx | 3233 +++++++++ .../pages/home/components/automations.tsx | 860 +++ .../renderer/pages/home/components/chat.tsx | 4116 ++++++++++++ .../renderer/pages/home/components/layout.tsx | 1317 ++++ .../pages/home/components/primitives.tsx | 66 + .../pages/home/components/settings.tsx | 5945 +++++++++++++++++ .../pages/home/components/ui-controls.tsx | 227 + .../src/renderer/pages/home/index.html | 47 + .../src/renderer/pages/home/main.tsx | 25 + .../renderer/pages/home/markdown-renderer.tsx | 1 + .../pages/home/observed-codex-resources.ts | 189 + .../pages/home/plugins/browser/index.tsx | 611 ++ .../pages/home/plugins/docs/index.tsx | 1789 +++++ .../pages/home/plugins/editor/events.ts | 24 + .../pages/home/plugins/editor/index.tsx | 441 ++ .../pages/home/plugins/files/index.tsx | 542 ++ .../renderer/pages/home/plugins/git/index.tsx | 2709 ++++++++ .../home/plugins/shared/monaco-environment.ts | 24 + .../pages/home/plugins/terminal/index.tsx | 416 ++ .../pages/home/right-sidebar-plugins.tsx | 168 + .../pages/home/toolhub-sandbox-host.ts | 291 + .../src/renderer/pages/home/utils/core.ts | 3176 +++++++++ .../src/renderer/pages/home/utils/theme.ts | 410 ++ .../src/renderer/pages/spotlight/App.tsx | 70 + .../spotlight/components/SpotlightSearch.tsx | 54 + .../spotlight/hooks/useSpotlightSourceApp.ts | 31 + .../spotlight/hooks/useSpotlightVisibility.ts | 57 + .../src/renderer/pages/spotlight/index.html | 51 + .../src/renderer/pages/spotlight/main.tsx | 60 + .../src/renderer/pages/spotlight/styles.css | 200 + .../pages/spotlight/utils/source-app.ts | 18 + .../src/renderer/styles/globals.css | 1074 +++ .../src/renderer/types/electron.d.ts | 1340 ++++ .../agent-console/src/renderer/vite-env.d.ts | 1 + .../agent-console/src/shared/agent-logos.ts | 13 + .../src/shared/automation-types.ts | 139 + .../src/shared/markdown-renderer.tsx | 296 + .../src/shared/monaco-language-services.ts | 224 + .../agent-console/src/shared/plugin-types.ts | 241 + .../agent-console/src/shared/sidebar-data.ts | 26 + .../agent-console/src/shared/toolhub-types.ts | 171 + .../plugins/agent-console/src/shared/utils.ts | 6 + .../plugins/agent-console/tsconfig.json | 21 + package.json | 1 + .../agents/codex/cli-middleware-runtime.ts | 91 +- .../core/src/agents/codex/model-catalog.ts | 61 +- packages/core/src/config/config.ts | 9 +- packages/core/src/contracts/app.ts | 30 + packages/core/src/plugins/service.ts | 16 +- tests/main/agent-console-launcher.test.mjs | 176 +- tests/main/codex-app-model-catalog.test.mjs | 89 + .../codex-cli-middleware-runtime.test.mjs | 38 + tests/main/plugin-permissions.test.mjs | 39 + 71 files changed, 37165 insertions(+), 289 deletions(-) create mode 100644 marketplace/plugins/agent-console/build.mjs create mode 100644 marketplace/plugins/agent-console/package.json create mode 100644 marketplace/plugins/agent-console/src/index.cjs create mode 100644 marketplace/plugins/agent-console/src/renderer/assets/agent-logos/claude-code.png create mode 100644 marketplace/plugins/agent-console/src/renderer/assets/agent-logos/codex.png create mode 100644 marketplace/plugins/agent-console/src/renderer/assets/codexTemplate@2x.png create mode 100644 marketplace/plugins/agent-console/src/renderer/benchmarks/markdown-rendering/index.html create mode 100644 marketplace/plugins/agent-console/src/renderer/benchmarks/markdown-rendering/main.ts create mode 100644 marketplace/plugins/agent-console/src/renderer/components/ui/badge.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/components/ui/button.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/components/ui/input.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/components/ui/select.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/components/ui/textarea.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/components/ui/toast.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/lib/i18n.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/lib/utils.ts create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/home/App.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/home/components/automations.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/home/components/chat.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/home/components/layout.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/home/components/primitives.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/home/components/settings.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/home/components/ui-controls.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/home/index.html create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/home/main.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/home/markdown-renderer.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/home/observed-codex-resources.ts create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/home/plugins/browser/index.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/home/plugins/docs/index.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/home/plugins/editor/events.ts create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/home/plugins/editor/index.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/home/plugins/files/index.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/home/plugins/git/index.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/home/plugins/shared/monaco-environment.ts create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/home/plugins/terminal/index.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/home/right-sidebar-plugins.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/home/toolhub-sandbox-host.ts create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/home/utils/core.ts create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/home/utils/theme.ts create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/spotlight/App.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/spotlight/components/SpotlightSearch.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/spotlight/hooks/useSpotlightSourceApp.ts create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/spotlight/hooks/useSpotlightVisibility.ts create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/spotlight/index.html create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/spotlight/main.tsx create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/spotlight/styles.css create mode 100644 marketplace/plugins/agent-console/src/renderer/pages/spotlight/utils/source-app.ts create mode 100644 marketplace/plugins/agent-console/src/renderer/styles/globals.css create mode 100644 marketplace/plugins/agent-console/src/renderer/types/electron.d.ts create mode 100644 marketplace/plugins/agent-console/src/renderer/vite-env.d.ts create mode 100644 marketplace/plugins/agent-console/src/shared/agent-logos.ts create mode 100644 marketplace/plugins/agent-console/src/shared/automation-types.ts create mode 100644 marketplace/plugins/agent-console/src/shared/markdown-renderer.tsx create mode 100644 marketplace/plugins/agent-console/src/shared/monaco-language-services.ts create mode 100644 marketplace/plugins/agent-console/src/shared/plugin-types.ts create mode 100644 marketplace/plugins/agent-console/src/shared/sidebar-data.ts create mode 100644 marketplace/plugins/agent-console/src/shared/toolhub-types.ts create mode 100644 marketplace/plugins/agent-console/src/shared/utils.ts create mode 100644 marketplace/plugins/agent-console/tsconfig.json diff --git a/build/esbuild.config.mjs b/build/esbuild.config.mjs index 842e7a6c..4366872e 100644 --- a/build/esbuild.config.mjs +++ b/build/esbuild.config.mjs @@ -1,5 +1,5 @@ import esbuild from "esbuild"; -import { spawn } from "node:child_process"; +import { spawn, spawnSync } from "node:child_process"; import { chmodSync, cpSync, existsSync, mkdirSync, readFileSync, rmSync, statSync, writeFileSync } from "node:fs"; import { builtinModules, createRequire } from "node:module"; import path from "node:path"; @@ -51,6 +51,7 @@ export const cliMarketplacePluginsDir = path.join(cliDistDir, "marketplace", "pl export const coreMarketplacePluginsDir = path.join(coreDistDir, "marketplace", "plugins"); export const electronMarketplacePluginsDir = path.join(electronDistDir, "marketplace", "plugins"); export const marketplacePluginsDir = electronMarketplacePluginsDir; +export const marketplacePluginsInputDir = path.join(projectRoot, "marketplace", "plugins"); export const appAssetsInput = path.join(electronRoot, "assets"); export const modelCatalogInput = path.join(coreRoot, "models.json"); export const cliModelCatalogOutput = path.join(cliDistDir, "models.json"); @@ -147,6 +148,8 @@ export function copyBrowserRendererHtml() { export function copyMarketplacePlugins() { ensureDist(); + buildMarketplacePlugin("agent-console"); + copyMarketplacePlugin("agent-console"); } export function syncUiRendererToRuntimeDists() { @@ -181,6 +184,47 @@ function copyRendererPageHtml(input, output, scriptName, options = {}) { writeFileSync(output, html, "utf8"); } +function buildMarketplacePlugin(pluginId) { + const pluginRoot = path.join(marketplacePluginsInputDir, pluginId); + const packageJson = path.join(pluginRoot, "package.json"); + if (!existsSync(packageJson)) { + return; + } + + const npmCommand = process.platform === "win32" ? "npm.cmd" : "npm"; + const result = spawnSync(npmCommand, ["run", "build"], { + cwd: pluginRoot, + shell: false, + stdio: "inherit" + }); + if (result.error) { + throw result.error; + } + if (result.status !== 0) { + throw new Error(`Plugin ${pluginId} build failed with exit code ${result.status ?? "unknown"}.`); + } +} + +function copyMarketplacePlugin(pluginId) { + const pluginRoot = path.join(marketplacePluginsInputDir, pluginId); + const outputRoots = [cliMarketplacePluginsDir, coreMarketplacePluginsDir, electronMarketplacePluginsDir]; + const runtimeFiles = ["plugin.json", "index.cjs"]; + const rendererInput = path.join(pluginRoot, "dist", "renderer"); + for (const outputRoot of outputRoots) { + const outputDir = path.join(outputRoot, pluginId); + mkdirSync(outputDir, { recursive: true }); + for (const fileName of runtimeFiles) { + const input = path.join(pluginRoot, fileName); + if (existsSync(input)) { + cpSync(input, path.join(outputDir, fileName)); + } + } + if (existsSync(rendererInput)) { + cpSync(rendererInput, path.join(outputDir, "dist", "renderer"), { recursive: true }); + } + } +} + function hasScriptTag(html, scriptTag) { const sourceMatch = scriptTag.match(/\bsrc="([^"]+)"/); return sourceMatch ? html.includes(sourceMatch[1]) : html.includes(scriptTag); diff --git a/marketplace/plugins/agent-console/build.mjs b/marketplace/plugins/agent-console/build.mjs new file mode 100644 index 00000000..da9f9ffd --- /dev/null +++ b/marketplace/plugins/agent-console/build.mjs @@ -0,0 +1,124 @@ +import esbuild from "esbuild"; +import { existsSync, readFileSync } from "node:fs"; +import { createRequire } from "node:module"; +import path from "node:path"; +import { fileURLToPath, pathToFileURL } from "node:url"; + +const pluginRoot = path.dirname(fileURLToPath(import.meta.url)); +const workspaceRoot = path.resolve(pluginRoot, "..", "..", ".."); +const fallbackAppRoot = path.resolve(process.env.CCR_AGENT_CONSOLE_APP_PATH || "/Users/jinhuilee/products/CCR/app"); +const fallbackAliasSkipPackages = new Set([ + "@tailwindcss/vite", + "@vitejs/plugin-react", + "electron", + "typescript", + "vite" +]); +const buildMain = !process.argv.includes("--renderer-only"); +const buildRenderer = !process.argv.includes("--main-only"); + +if (buildMain) { + await esbuild.build({ + banner: { + js: [ + "// Generated by marketplace/plugins/agent-console/build.mjs.", + "// Do not edit this file directly; edit src/index.cjs and run npm run build." + ].join("\n") + }, + bundle: false, + entryPoints: [path.join(pluginRoot, "src", "index.cjs")], + format: "cjs", + legalComments: "none", + logLevel: "info", + outfile: path.join(pluginRoot, "index.cjs"), + platform: "node", + target: "node22" + }); +} + +if (buildRenderer) { + const { build } = await importPackage("vite"); + const react = (await importPackage("@vitejs/plugin-react")).default; + const tailwindcss = (await importPackage("@tailwindcss/vite")).default; + + await build({ + base: "./", + build: { + emptyOutDir: true, + outDir: path.join(pluginRoot, "dist", "renderer"), + rollupOptions: { + input: { + main: path.join(pluginRoot, "src", "renderer", "pages", "home", "index.html"), + spotlight: path.join(pluginRoot, "src", "renderer", "pages", "spotlight", "index.html") + } + } + }, + esbuild: { legalComments: "none" }, + optimizeDeps: { + exclude: ["electron"] + }, + plugins: [react(), tailwindcss()], + resolve: { + alias: rendererAliases() + }, + root: path.join(pluginRoot, "src", "renderer") + }); +} + +async function importPackage(specifier) { + return import(pathToFileURL(resolvePackage(specifier)).href); +} + +function resolvePackage(specifier) { + const attempts = [ + pluginRoot, + workspaceRoot, + fallbackAppRoot + ]; + for (const base of attempts) { + try { + return createRequire(path.join(base, "package.json")).resolve(specifier); + } catch { + // Try the next project root. + } + } + throw new Error(`Unable to resolve ${specifier}. Run npm install in the plugin project or set CCR_AGENT_CONSOLE_APP_PATH to a built Agent Console app checkout.`); +} + +function rendererAliases() { + return [ + { find: "@", replacement: path.join(pluginRoot, "src", "renderer") }, + ...fallbackAppDependencyAliases() + ]; +} + +function fallbackAppDependencyAliases() { + const packageJsonPath = path.join(fallbackAppRoot, "package.json"); + const nodeModules = path.join(fallbackAppRoot, "node_modules"); + if (!existsSync(packageJsonPath) || !existsSync(nodeModules)) { + return []; + } + + let packageJson; + try { + packageJson = JSON.parse(readFileSync(packageJsonPath, "utf8")); + } catch { + return []; + } + + const names = new Set([ + ...Object.keys(packageJson.dependencies || {}), + ...Object.keys(packageJson.devDependencies || {}) + ]); + const aliases = []; + for (const name of names) { + if (fallbackAliasSkipPackages.has(name)) { + continue; + } + const modulePath = path.join(nodeModules, ...name.split("/")); + if (existsSync(modulePath)) { + aliases.push({ find: name, replacement: modulePath }); + } + } + return aliases; +} diff --git a/marketplace/plugins/agent-console/index.cjs b/marketplace/plugins/agent-console/index.cjs index 9b704ede..c43b6c89 100644 --- a/marketplace/plugins/agent-console/index.cjs +++ b/marketplace/plugins/agent-console/index.cjs @@ -1,13 +1,14 @@ +// Generated by marketplace/plugins/agent-console/build.mjs. +// Do not edit this file directly; edit src/index.cjs and run npm run build. "use strict"; - const { spawn } = require("node:child_process"); const fs = require("node:fs"); const net = require("node:net"); const os = require("node:os"); const path = require("node:path"); - const PLUGIN_ID = "agent-console"; const DEFAULT_APP_ROOT = "/Users/jinhuilee/products/CCR/app"; +const DEFAULT_RENDERER_ROOT = path.join(__dirname, "dist", "renderer"); const DEFAULT_ROUTE_PREFIX = "/plugins/agent-console"; const DEFAULT_RENDERER_ENTRY_PATH = "/pages/home/"; const DEFAULT_LAUNCHER_NAME = "Agent Console"; @@ -15,30 +16,24 @@ const LEGACY_LAUNCHER_NAME = "CCR Agent Console"; const MAC_LAUNCHER_APPS_DIR_NAME = "CCR Apps"; const DEFAULT_LAUNCHER_BUNDLE_ID = "com.claudecoderouter.plugin.agent-console.launcher"; const READY_PREFIX = "AGENT_CONSOLE_HEADLESS_READY "; -const DEFAULT_STARTUP_WAIT_MS = 15000; +const DEFAULT_STARTUP_WAIT_MS = 15e3; +const DEFAULT_CODEX_CONTEXT_WINDOW_TOKENS = 128e3; const OPENAI_REASONING_EFFORTS = ["minimal", "low", "medium", "high"]; +const OPENAI_EXTENDED_REASONING_EFFORTS = ["minimal", "low", "medium", "high", "xhigh"]; let modelCatalogIndex; - module.exports = { async setup(ctx) { const options = isRecord(ctx.pluginConfig) ? ctx.pluginConfig : {}; const routePrefix = normalizeRoutePrefix(stringValue(options.routePrefix) || DEFAULT_ROUTE_PREFIX); const appRoot = resolveAppRoot(options); + const fallbackRendererRoot = path.join(appRoot, "dist", "renderer"); const rendererRoot = path.resolve( - stringValue(options.rendererRoot) || - stringValue(options.pwaRoot) || - path.join(appRoot, "dist", "renderer") + stringValue(options.rendererRoot) || stringValue(options.pwaRoot) || (rendererDistExists(DEFAULT_RENDERER_ROOT) ? DEFAULT_RENDERER_ROOT : fallbackRendererRoot) ); const electronPath = resolveElectronPath(options, appRoot); const launchMode = stringValue(options.launchMode || options.startMode).toLowerCase(); const launchApp = options.launch !== false; - const launchOnSetup = launchApp && ( - options.launch === true || - options.launchOnSetup === true || - options.launchOnStartup === true || - launchMode === "startup" || - launchMode === "eager" - ); + const launchOnSetup = launchApp && (options.launch === true || options.launchOnSetup === true || options.launchOnStartup === true || launchMode === "startup" || launchMode === "eager"); const startupWaitMs = parsePositiveInteger(options.startupWaitMs) || DEFAULT_STARTUP_WAIT_MS; const bridgeHost = stringValue(options.bridgeHost) || "127.0.0.1"; const bridgePort = parsePort(options.bridgePort) || await pickOpenPort(bridgeHost); @@ -50,6 +45,7 @@ module.exports = { const launcherBundleId = stringValue(options.launcherBundleId) || DEFAULT_LAUNCHER_BUNDLE_ID; const runtimeConfigFile = path.join(ctx.paths.pluginDataDir, "ccr-runtime-config.json"); const modelCatalogFile = path.join(ctx.paths.pluginDataDir, "ccr-codex-model-catalog.json"); + fs.mkdirSync(ctx.paths.pluginDataDir, { recursive: true }); const runtimeConfig = buildRuntimeConfig(ctx.config, { apiKey: gatewayApiKey, defaultModel: stringValue(options.defaultModel), @@ -57,6 +53,25 @@ module.exports = { modelCatalogFile, openAiBaseUrl: stringValue(options.openAiBaseUrl) }); + const codexModelCatalog = buildCodexModelCatalog(runtimeConfig.models); + fs.writeFileSync(modelCatalogFile, `${JSON.stringify(codexModelCatalog, null, 2)} +`, "utf8"); + const codexRuntime = ensureAgentConsoleCodexRuntime(ctx, options, runtimeConfig); + const claudeCodeRuntime = ensureAgentConsoleClaudeCodeRuntime(ctx, options, runtimeConfig, codexRuntime.runtimeFile); + if (codexRuntime.command) { + runtimeConfig.codex = { + ...isRecord(runtimeConfig.codex) ? runtimeConfig.codex : {}, + command: codexRuntime.command, + env: codexRuntime.env + }; + } + if (claudeCodeRuntime.command) { + runtimeConfig.claudeCode = { + ...isRecord(runtimeConfig.claudeCode) ? runtimeConfig.claudeCode : {}, + command: claudeCodeRuntime.command, + env: claudeCodeRuntime.env + }; + } const runtime = { appRoot, appUrl, @@ -81,27 +96,20 @@ module.exports = { runtimeConfigFile, startPromise: null, startupWaitMs, - startedAt: new Date().toISOString() + startedAt: (/* @__PURE__ */ new Date()).toISOString() }; - if (!fs.existsSync(path.join(rendererRoot, "pages", "home", "index.html"))) { - ctx.logger.warn(`Agent Console Electron renderer dist is missing at ${rendererRoot}. Run npm run build in the app project before opening it.`); + ctx.logger.warn(`Agent Console Electron renderer dist is missing at ${rendererRoot}. Run npm --prefix marketplace/plugins/agent-console run build in the CCR project before opening it.`); } - - fs.mkdirSync(ctx.paths.pluginDataDir, { recursive: true }); - fs.writeFileSync(runtimeConfigFile, `${JSON.stringify(runtimeConfig, null, 2)}\n`, "utf8"); - fs.writeFileSync(modelCatalogFile, `${JSON.stringify(buildCodexModelCatalog(runtimeConfig.models), null, 2)}\n`, "utf8"); - - const launcher = canUsePermission(ctx, "system-launcher") - ? ensureSystemLauncher(ctx, options, launcherUrl, launcherBundleId) - : { - error: "Agent Console system launcher requires the system-launcher permission.", - installed: false - }; + fs.writeFileSync(runtimeConfigFile, `${JSON.stringify(runtimeConfig, null, 2)} +`, "utf8"); + const launcher = canUsePermission(ctx, "system-launcher") ? ensureSystemLauncher(ctx, options, launcherUrl, launcherBundleId) : { + error: "Agent Console system launcher requires the system-launcher permission.", + installed: false + }; runtime.launcherError = launcher.error || ""; runtime.launcherInstalled = launcher.installed; runtime.launcherPath = launcher.path || ""; - if (!launchApp) { runtime.ready = true; } else if (launchOnSetup) { @@ -111,7 +119,6 @@ module.exports = { ctx.logger.warn(`Agent Console startup launch failed: ${formatError(error)}`); } } - ctx.registerGatewayRoute({ auth: "none", id: "agent-console-status", @@ -121,7 +128,6 @@ module.exports = { helpers.sendJson(response, 200, statusPayload(runtime)); } }); - ctx.registerGatewayRoute({ auth: "none", id: "agent-console-renderer", @@ -131,7 +137,6 @@ module.exports = { await serveRenderer(ctx, runtime, options, request, response); } }); - ctx.registerApp({ description: "Agent Console Electron renderer backed by the local CCR gateway.", icon: "terminal-square", @@ -139,12 +144,10 @@ module.exports = { name: "Agent Console", url: appUrl }); - ctx.logger.info(`Agent Console registered at ${appUrl}`); if (runtime.launcherInstalled) { ctx.logger.info(`Agent Console system launcher is available at ${runtime.launcherPath}.`); } - return { stop(event) { stopAgentConsole(runtime); @@ -155,7 +158,6 @@ module.exports = { }; } }; - function startAgentConsole(ctx, runtime, options) { if (!runtime.launchApp) return; if (runtime.child) return; @@ -165,33 +167,26 @@ function startAgentConsole(ctx, runtime, options) { ctx.logger.warn(runtime.lastError); throw new Error(runtime.lastError); } - runtime.ready = false; runtime.readyPayload = null; runtime.lastError = ""; - runtime.runtimeStartedAt = new Date().toISOString(); + runtime.runtimeStartedAt = (/* @__PURE__ */ new Date()).toISOString(); runtime.child = launchAgentConsole(ctx, runtime, options); } - async function ensureAgentConsoleStarted(ctx, runtime, options) { if (!runtime.launchApp || runtime.ready) { return; } - if (!runtime.child) { if (!runtime.startPromise) { - runtime.startPromise = Promise.resolve() - .then(() => startAgentConsole(ctx, runtime, options)) - .finally(() => { - runtime.startPromise = null; - }); + runtime.startPromise = Promise.resolve().then(() => startAgentConsole(ctx, runtime, options)).finally(() => { + runtime.startPromise = null; + }); } await runtime.startPromise; } - await waitForAgentConsoleReady(runtime, runtime.startupWaitMs); } - async function waitForAgentConsoleReady(runtime, timeoutMs) { const deadline = Date.now() + timeoutMs; while (Date.now() <= deadline) { @@ -205,15 +200,12 @@ async function waitForAgentConsoleReady(runtime, timeoutMs) { } throw new Error(`Agent Console headless runtime did not become ready within ${timeoutMs}ms.${runtime.lastError ? ` Last error: ${runtime.lastError}` : ""}`); } - function delay(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); } - function launchAgentConsole(ctx, runtime, options) { const userDataDir = path.resolve(stringValue(options.userDataDir) || path.join(ctx.paths.pluginDataDir, "user-data")); fs.mkdirSync(userDataDir, { recursive: true }); - const env = { ...process.env, AGENT_APP_PWA_BRIDGE_HOST: runtime.bridgeHost, @@ -224,15 +216,13 @@ function launchAgentConsole(ctx, runtime, options) { ELECTRON_ENABLE_LOGGING: process.env.ELECTRON_ENABLE_LOGGING || "1" }; delete env.ELECTRON_RUN_AS_NODE; - - const args = [...(normalizeStringArray(options.electronArgs) || []), runtime.appRoot]; + const args = [...normalizeStringArray(options.electronArgs) || [], runtime.appRoot]; const child = spawn(runtime.electronPath, args, { cwd: runtime.appRoot, env, stdio: ["ignore", "pipe", "pipe"], windowsHide: true }); - child.stdout.setEncoding("utf8"); child.stderr.setEncoding("utf8"); child.stdout.on("data", (chunk) => handleAgentConsoleOutput(ctx, runtime, chunk)); @@ -248,11 +238,9 @@ function launchAgentConsole(ctx, runtime, options) { runtime.lastError = `Agent Console exited with code ${code ?? "null"} signal ${signal ?? "null"}.`; ctx.logger.warn(runtime.lastError); }); - ctx.logger.info(`Launching Agent Console headless runtime with ${runtime.electronPath}.`); return child; } - function handleAgentConsoleOutput(ctx, runtime, chunk) { for (const line of String(chunk).split(/\r?\n/)) { const trimmed = line.trim(); @@ -270,14 +258,13 @@ function handleAgentConsoleOutput(ctx, runtime, chunk) { continue; } if (/failed|error/i.test(trimmed)) { - runtime.lastError = trimmed.slice(0, 1000); + runtime.lastError = trimmed.slice(0, 1e3); ctx.logger.warn(trimmed); } else { ctx.logger.debug(trimmed); } } } - function stopAgentConsole(runtime) { const child = runtime.child; if (!child) return; @@ -288,10 +275,9 @@ function stopAgentConsole(runtime) { if (child.exitCode === null && !child.killed) { child.kill("SIGKILL"); } - }, 3000).unref(); + }, 3e3).unref(); } } - function statusPayload(runtime) { return { appRoot: runtime.appRoot, @@ -314,17 +300,10 @@ function statusPayload(runtime) { routePrefix: runtime.routePrefix, runtimeStartedAt: runtime.runtimeStartedAt, runtimeConfigFile: runtime.runtimeConfigFile, - runtimeState: runtime.launchApp - ? runtime.ready - ? "ready" - : runtime.child - ? "starting" - : "idle" - : "disabled", + runtimeState: runtime.launchApp ? runtime.ready ? "ready" : runtime.child ? "starting" : "idle" : "disabled", startedAt: runtime.startedAt }; } - function ensureSystemLauncher(ctx, options, launcherUrl, launcherBundleId) { if (options.systemLauncher === false || options.createSystemLauncher === false) { return { installed: false }; @@ -335,20 +314,16 @@ function ensureSystemLauncher(ctx, options, launcherUrl, launcherBundleId) { installed: false }; } - const launcherName = stringValue(options.launcherName) || DEFAULT_LAUNCHER_NAME; const explicitLauncherPath = Boolean(stringValue(options.launcherPath)); const launcherPath = path.resolve( - stringValue(options.launcherPath) || - defaultMacLauncherAppPath(launcherName) + stringValue(options.launcherPath) || defaultMacLauncherAppPath(launcherName) ); - if (!explicitLauncherPath) { const legacyLauncherPaths = [legacyMacLauncherAppPath(launcherName)]; if (launcherName === DEFAULT_LAUNCHER_NAME) { legacyLauncherPaths.push(legacyMacLauncherAppPath(LEGACY_LAUNCHER_NAME)); } - for (const legacyPath of legacyLauncherPaths) { try { migrateLegacyMacLauncherApp({ @@ -361,7 +336,6 @@ function ensureSystemLauncher(ctx, options, launcherUrl, launcherBundleId) { } } } - try { installMacLauncherApp({ bundleId: launcherBundleId, @@ -383,11 +357,9 @@ function ensureSystemLauncher(ctx, options, launcherUrl, launcherBundleId) { }; } } - function canUsePermission(ctx, permission) { return Array.isArray(ctx.permissions) && ctx.permissions.includes(permission); } - function migrateLegacyMacLauncherApp({ bundleId, legacyPath, launcherPath }) { if (legacyPath === launcherPath || fs.existsSync(launcherPath) || !fs.existsSync(legacyPath)) { return; @@ -395,44 +367,35 @@ function migrateLegacyMacLauncherApp({ bundleId, legacyPath, launcherPath }) { if (!fs.statSync(legacyPath).isDirectory()) { return; } - const infoPath = path.join(legacyPath, "Contents", "Info.plist"); if (!fs.existsSync(infoPath)) { return; } - const info = fs.readFileSync(infoPath, "utf8"); if (!info.includes(`${escapeXml(bundleId)}`)) { return; } - fs.mkdirSync(path.dirname(launcherPath), { recursive: true }); fs.renameSync(legacyPath, launcherPath); } - function defaultMacLauncherAppPath(launcherName) { return path.join(macLauncherAppsDir(), `${safeMacFileName(launcherName)}.app`); } - function legacyMacLauncherAppPath(launcherName) { return path.join(os.homedir(), "Applications", `${safeMacFileName(launcherName)}.app`); } - function macLauncherAppsDir() { return path.join(os.homedir(), "Applications", MAC_LAUNCHER_APPS_DIR_NAME); } - function installMacLauncherApp({ bundleId, launcherName, launcherPath, launcherUrl }) { if (fs.existsSync(launcherPath) && !fs.statSync(launcherPath).isDirectory()) { throw new Error(`${launcherPath} exists and is not a directory.`); } - const contentsDir = path.join(launcherPath, "Contents"); const macOsDir = path.join(contentsDir, "MacOS"); const resourcesDir = path.join(contentsDir, "Resources"); const executableName = safeMacExecutableName(launcherName); const executablePath = path.join(macOsDir, executableName); - fs.mkdirSync(macOsDir, { recursive: true }); fs.mkdirSync(resourcesDir, { recursive: true }); writeTextIfChanged(path.join(contentsDir, "Info.plist"), macLauncherInfoPlist({ @@ -442,14 +405,12 @@ function installMacLauncherApp({ bundleId, launcherName, launcherPath, launcherU })); writeTextIfChanged(path.join(contentsDir, "PkgInfo"), "APPL????"); writeTextIfChanged(executablePath, macLauncherScript(launcherUrl)); - fs.chmodSync(executablePath, 0o755); + fs.chmodSync(executablePath, 493); } - function removeSystemLauncher(ctx, runtime, bundleId) { if (process.platform !== "darwin" || !runtime.launcherInstalled || !runtime.launcherPath) { return; } - try { uninstallMacLauncherApp({ bundleId, @@ -461,7 +422,6 @@ function removeSystemLauncher(ctx, runtime, bundleId) { ctx.logger.warn(`Failed to remove Agent Console system launcher: ${formatError(error)}`); } } - function uninstallMacLauncherApp({ bundleId, launcherPath }) { const resolvedLauncherPath = path.resolve(launcherPath); if (!resolvedLauncherPath.endsWith(".app") || !fs.existsSync(resolvedLauncherPath)) { @@ -470,27 +430,22 @@ function uninstallMacLauncherApp({ bundleId, launcherPath }) { if (!fs.statSync(resolvedLauncherPath).isDirectory()) { return; } - const infoPath = path.join(resolvedLauncherPath, "Contents", "Info.plist"); if (!fs.existsSync(infoPath)) { return; } - const info = fs.readFileSync(infoPath, "utf8"); if (!info.includes(`${escapeXml(bundleId)}`)) { return; } - fs.rmSync(resolvedLauncherPath, { force: true, recursive: true }); if (path.dirname(resolvedLauncherPath) === macLauncherAppsDir()) { try { fs.rmdirSync(macLauncherAppsDir()); } catch { - // Keep the shared launcher directory when it still contains other apps. } } } - function macLauncherInfoPlist({ bundleId, executableName, launcherName }) { return ` @@ -522,7 +477,6 @@ function macLauncherInfoPlist({ bundleId, executableName, launcherName }) { `; } - function macLauncherScript(launcherUrl) { const quotedUrl = shellSingleQuote(launcherUrl); return `#!/bin/sh @@ -532,7 +486,6 @@ fi /usr/bin/open ${quotedUrl} `; } - function writeTextIfChanged(filePath, content) { if (fs.existsSync(filePath)) { try { @@ -540,33 +493,22 @@ function writeTextIfChanged(filePath, content) { return; } } catch { - // Fall through and rewrite unreadable stale files. } } fs.writeFileSync(filePath, content, "utf8"); } - function safeMacFileName(value) { return value.replace(/[/:]/g, "-").trim() || "Agent Console"; } - function safeMacExecutableName(value) { return value.replace(/[^A-Za-z0-9_-]+/g, "").trim() || "AgentConsole"; } - function shellSingleQuote(value) { return `'${String(value).replace(/'/g, `'\\''`)}'`; } - function escapeXml(value) { - return String(value) - .replace(/&/g, "&") - .replace(//g, ">") - .replace(/"/g, """) - .replace(/'/g, "'"); + return String(value).replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'"); } - async function serveRenderer(ctx, runtime, options, request, response) { const requestUrl = new URL(request.url || "/", "http://localhost"); const routePath = requestUrl.pathname; @@ -588,9 +530,7 @@ async function serveRenderer(ctx, runtime, options, request, response) { response.end(agentConsolePreloadScript(runtime.bridgeUrl)); return; } - const candidateFile = relativeFilePath - ? path.join(runtime.rendererRoot, relativeFilePath) - : path.join(runtime.rendererRoot, "pages", "home", "index.html"); + const candidateFile = relativeFilePath ? path.join(runtime.rendererRoot, relativeFilePath) : path.join(runtime.rendererRoot, "pages", "home", "index.html"); const filePath = safeFilePath(runtime.rendererRoot, candidateFile) || path.join(runtime.rendererRoot, "pages", "home", "index.html"); const resolvedFile = directoryIndexFile(filePath) || (fileExists(filePath) ? filePath : ""); const fallbackFile = path.join(runtime.rendererRoot, "pages", "home", "index.html"); @@ -599,7 +539,6 @@ async function serveRenderer(ctx, runtime, options, request, response) { sendText(response, 404, "Agent Console renderer asset was not found."); return; } - const isRendererHtml = path.basename(existingFile) === "index.html"; if (isRendererHtml) { try { @@ -609,13 +548,11 @@ async function serveRenderer(ctx, runtime, options, request, response) { return; } } - if (request.method === "HEAD") { response.writeHead(200, headersForFile(existingFile)); response.end(); return; } - if (isRendererHtml) { const html = fs.readFileSync(existingFile, "utf8"); response.writeHead(200, { @@ -625,11 +562,9 @@ async function serveRenderer(ctx, runtime, options, request, response) { response.end(injectAgentConsolePreload(html, runtime.routePrefix)); return; } - response.writeHead(200, headersForFile(existingFile)); fs.createReadStream(existingFile).pipe(response); } - function injectAgentConsolePreload(html, routePrefix) { const script = ``; if (html.includes(script)) { @@ -640,14 +575,12 @@ function injectAgentConsolePreload(html, routePrefix) { } return `${script}${html}`; } - function buildRendererAppUrl(gatewayUrl, routePrefix, bridgeUrl) { const params = new URLSearchParams(); params.set("mode", "main"); params.set("agentBridge", bridgeUrl); return `${gatewayUrl}${routePrefix}${DEFAULT_RENDERER_ENTRY_PATH}?${params.toString()}`; } - function rendererEntryLocation(routePrefix, search) { const params = new URLSearchParams(String(search || "").replace(/^\?/, "")); if (!params.has("mode")) { @@ -656,7 +589,6 @@ function rendererEntryLocation(routePrefix, search) { const query = params.toString(); return `${routePrefix}${DEFAULT_RENDERER_ENTRY_PATH}${query ? `?${query}` : ""}`; } - function agentConsolePreloadScript(bridgeUrl) { return ` (() => { @@ -802,7 +734,7 @@ function agentConsolePreloadScript(bridgeUrl) { ":root[data-window-mode='small-chat'] .small-chat-window .markdown-stream-panel,:root[data-window-mode='small-chat'] .small-chat-window .markdown-stream-panel p,:root[data-window-mode='small-chat'] .small-chat-window .markdown-stream-panel li,:root[data-window-mode='small-chat'] .small-chat-window .markdown-stream-panel blockquote{color:var(--markdown-foreground)!important;text-shadow:0 1px 2px rgba(0,0,0,.42)!important;}", ":root[data-window-mode='small-chat'] .small-chat-window .markdown-stream-panel h1,:root[data-window-mode='small-chat'] .small-chat-window .markdown-stream-panel h2,:root[data-window-mode='small-chat'] .small-chat-window .markdown-stream-panel h3,:root[data-window-mode='small-chat'] .small-chat-window .markdown-stream-panel h4{color:var(--markdown-heading-foreground)!important;}", ":root[data-window-mode='small-chat'] .small-chat-window .chatbot-user-message{background:rgba(18,30,50,.62)!important;border-color:rgba(226,232,240,.18)!important;color:rgba(250,252,255,.98)!important;-webkit-backdrop-filter:blur(18px) saturate(1.24)!important;backdrop-filter:blur(18px) saturate(1.24)!important;}", - ":root[data-window-mode='small-chat'] .small-chat-window .home-composer,:root[data-window-mode='small-chat'] .small-chat-window .chat-floating-status,:root[data-window-mode='small-chat'] .small-chat-window .chat-floating-composer{background:rgba(10,17,29,.68)!important;border-color:rgba(226,232,240,.2)!important;color:rgba(250,252,255,.98)!important;-webkit-backdrop-filter:blur(30px) saturate(1.42)!important;backdrop-filter:blur(30px) saturate(1.42)!important;}", + ":root[data-window-mode='small-chat'] .small-chat-window .home-composer,:root[data-window-mode='small-chat'] .small-chat-window .chat-floating-composer{background:rgba(10,17,29,.68)!important;border-color:rgba(226,232,240,.2)!important;color:rgba(250,252,255,.98)!important;-webkit-backdrop-filter:blur(30px) saturate(1.42)!important;backdrop-filter:blur(30px) saturate(1.42)!important;}", ":root[data-window-mode='small-chat'] .small-chat-window textarea,:root[data-window-mode='small-chat'] .small-chat-window input{color:rgba(250,252,255,.98)!important;}", ":root[data-window-mode='small-chat'] .small-chat-window textarea::placeholder,:root[data-window-mode='small-chat'] .small-chat-window input::placeholder{color:rgba(226,232,240,.76)!important;}", ":root[data-window-mode='small-chat'] .small-chat-window .home-composer-toolbar{background:rgba(255,255,255,.055)!important;}", @@ -1229,7 +1161,6 @@ function agentConsolePreloadScript(bridgeUrl) { })(); `; } - function directoryIndexFile(filePath) { try { if (!fs.statSync(filePath).isDirectory()) { @@ -1241,18 +1172,15 @@ function directoryIndexFile(filePath) { return ""; } } - function shouldFallbackToHome(relativeFilePath) { return !relativeFilePath || !path.extname(relativeFilePath); } - function headersForFile(filePath) { return { "cache-control": isImmutableAsset(filePath) ? "public, max-age=31536000, immutable" : "no-cache", "content-type": contentType(filePath) }; } - function contentType(filePath) { const extension = path.extname(filePath).toLowerCase(); if (extension === ".html") return "text/html; charset=utf-8"; @@ -1268,16 +1196,14 @@ function contentType(filePath) { if (extension === ".woff2") return "font/woff2"; return "application/octet-stream"; } - function isImmutableAsset(filePath) { return path.normalize(filePath).split(path.sep).includes("assets"); } - function sendText(response, statusCode, message) { response.writeHead(statusCode, { "content-type": "text/plain; charset=utf-8" }); - response.end(`${message}\n`); + response.end(`${message} +`); } - function safeFilePath(root, candidate) { const resolvedRoot = path.resolve(root); const resolvedCandidate = path.resolve(candidate); @@ -1285,7 +1211,6 @@ function safeFilePath(root, candidate) { if (relativePath.startsWith("..") || path.isAbsolute(relativePath)) return ""; return resolvedCandidate; } - function fileExists(filePath) { try { return fs.statSync(filePath).isFile(); @@ -1293,17 +1218,14 @@ function fileExists(filePath) { return false; } } - +function rendererDistExists(rendererRoot) { + return fileExists(path.join(rendererRoot, "pages", "home", "index.html")); +} function buildRuntimeConfig(config, options) { const gatewayUrl = trimTrailingSlash(options.gatewayUrl || configuredGatewayUrl(config)); const openAiBaseUrl = trimTrailingSlash(options.openAiBaseUrl || `${gatewayUrl}/v1`); const models = availableGatewayModels(config); - const defaultModel = options.defaultModel || - stringValue(config?.Router?.default) || - models.find((model) => model.isDefault)?.model || - models[0]?.model || - ""; - + const defaultModel = options.defaultModel || stringValue(config?.Router?.default) || models.find((model) => model.isDefault)?.model || models[0]?.model || ""; return { apiKey: options.apiKey || configuredGatewayApiKey(config), claudeCode: { @@ -1321,33 +1243,457 @@ function buildRuntimeConfig(config, options) { openAiBaseUrl }; } - +function ensureAgentConsoleCodexRuntime(ctx, options, runtimeConfig) { + if (options.codexMiddleware === false) { + return { command: "", env: {}, runtimeFile: "" }; + } + const providerId = "claude-code-router"; + const binDir = path.join(ctx.paths.pluginDataDir, "bin"); + const codexHome = path.resolve(stringValue(options.codexHome) || path.join(ctx.paths.pluginDataDir, "codex-home")); + const configFile = path.join(codexHome, "config.toml"); + const runtimeFile = path.join(binDir, "ccr-codex-cli-middleware.js"); + const commandFile = path.join(binDir, process.platform === "win32" ? "ccr-agent-console-codex.cmd" : "ccr-agent-console-codex"); + const realCodexCli = stringValue(options.codexCliPath || options.codexCommand) || "codex"; + const model = stringValue(runtimeConfig.codex?.defaultModel) || stringValue(runtimeConfig.defaultModel) || runtimeConfig.models?.[0]?.model || ""; + const openAiBaseUrl = trimTrailingSlash(stringValue(runtimeConfig.openAiBaseUrl) || `${stringValue(runtimeConfig.gatewayUrl)}/v1`); + const apiKey = stringValue(runtimeConfig.apiKey); + const modelCatalogFile = stringValue(runtimeConfig.codex?.modelCatalogFile) || path.join(ctx.paths.pluginDataDir, "ccr-codex-model-catalog.json"); + fs.mkdirSync(binDir, { recursive: true }); + fs.mkdirSync(codexHome, { recursive: true, mode: 448 }); + writeTextIfChanged(configFile, agentConsoleCodexConfigToml({ + apiKey, + baseUrl: openAiBaseUrl, + model, + modelCatalogFile, + providerId + })); + try { + fs.chmodSync(configFile, 384); + } catch { + } + const runtimeScript = agentConsoleCodexMiddlewareRuntimeScript(); + writeTextIfChanged(runtimeFile, runtimeScript); + writeTextIfChanged(commandFile, process.platform === "win32" ? agentConsoleCodexMiddlewareCmd({ + codexHome, + model, + modelCatalogFile, + providerId, + realCodexCli, + runtimeFile + }) : agentConsoleCodexMiddlewareShell({ + codexHome, + model, + modelCatalogFile, + providerId, + realCodexCli, + runtimeFile + })); + try { + fs.chmodSync(runtimeFile, 493); + fs.chmodSync(commandFile, 493); + } catch { + } + return { + command: commandFile, + env: { + CODEX_HOME: codexHome, + CCR_CODEX_MODEL_CATALOG_FILE: modelCatalogFile, + CCR_CODEX_MODEL_PROVIDER: providerId, + CCR_CODEX_PROFILE: providerId, + CCR_CODEX_PROFILE_CONFIG_FORMAT: "separate_profile_files", + CCR_CODEX_REMOTE_FRONTEND_MODE: "app", + CCR_PROFILE_SCOPE: "ccr", + CODEXL_CODEX_MODEL_CATALOG_FILE: modelCatalogFile, + CODEXL_CODEX_MODEL_PROVIDER: providerId, + CODEXL_CODEX_PROFILE: providerId, + CODEXL_CODEX_PROFILE_CONFIG_FORMAT: "separate_profile_files" + }, + runtimeFile + }; +} +function ensureAgentConsoleClaudeCodeRuntime(ctx, options, runtimeConfig, sharedRuntimeFile) { + if (options.claudeCodeMiddleware === false || options.claudeMiddleware === false) { + return { command: "", env: {} }; + } + const binDir = path.join(ctx.paths.pluginDataDir, "bin"); + const settingsDir = path.join(ctx.paths.pluginDataDir, "claude-code", "claude"); + const settingsFile = path.join(settingsDir, "settings.json"); + const runtimeFile = ensureAgentConsoleCliMiddlewareRuntime(ctx, sharedRuntimeFile); + const apiKeyHelperFile = path.join(binDir, process.platform === "win32" ? "ccr-agent-console-claude-code-api-key.cmd" : "ccr-agent-console-claude-code-api-key"); + const commandFile = path.join(binDir, process.platform === "win32" ? "ccr-agent-console-claude-code.cmd" : "ccr-agent-console-claude-code"); + const realClaudeCli = stringValue(options.claudeCodeCommand || options.claudeCodeCliPath || options.claudeCommand || options.claudeCliPath) || "claude"; + const model = stringValue(runtimeConfig.claudeCode?.defaultModel) || stringValue(runtimeConfig.defaultModel) || runtimeConfig.models?.[0]?.model || ""; + const gatewayUrl = trimTrailingSlash(stringValue(runtimeConfig.gatewayUrl)); + const apiKey = stringValue(runtimeConfig.apiKey); + const baseEnv = agentConsoleClaudeCodeBaseEnv({ gatewayUrl, model, settingsDir }); + const remoteEndpoint = `${gatewayUrl}/__ccr/remote`; + fs.mkdirSync(binDir, { recursive: true }); + fs.mkdirSync(settingsDir, { recursive: true, mode: 448 }); + writeTextIfChanged(settingsFile, agentConsoleClaudeCodeSettingsJson({ + apiKeyHelperFile, + env: baseEnv + })); + writeTextIfChanged(apiKeyHelperFile, process.platform === "win32" ? agentConsoleApiKeyHelperCmd(apiKey) : agentConsoleApiKeyHelperShell(apiKey)); + writeTextIfChanged(commandFile, process.platform === "win32" ? agentConsoleClaudeCodeMiddlewareCmd({ + apiKeyHelperFile, + baseEnv, + realClaudeCli, + remoteEndpoint, + runtimeFile + }) : agentConsoleClaudeCodeMiddlewareShell({ + apiKeyHelperFile, + baseEnv, + realClaudeCli, + remoteEndpoint, + runtimeFile + })); + try { + fs.chmodSync(settingsFile, 384); + fs.chmodSync(apiKeyHelperFile, 448); + fs.chmodSync(commandFile, 493); + } catch { + } + return { + command: commandFile, + env: { + ...baseEnv, + CCR_CLAUDE_CODE_WRAPPER: "1", + CCR_REAL_CLAUDE_CODE_BIN: realClaudeCli, + CODEXL_CLAUDE_CODE_BIN: realClaudeCli, + CCR_REMOTE_SYNC_API_KEY_HELPER: apiKeyHelperFile, + CCR_REMOTE_SYNC_ENABLED: "1", + CCR_REMOTE_SYNC_ENDPOINT: remoteEndpoint, + CCR_REMOTE_SYNC_PROFILE_ID: "agent-console-claude-code", + CCR_REMOTE_SYNC_PROFILE_NAME: "Agent Console Claude Code" + } + }; +} +function ensureAgentConsoleCliMiddlewareRuntime(ctx, runtimeFile) { + const binDir = path.join(ctx.paths.pluginDataDir, "bin"); + const file = stringValue(runtimeFile) || path.join(binDir, "ccr-codex-cli-middleware.js"); + fs.mkdirSync(path.dirname(file), { recursive: true }); + writeTextIfChanged(file, agentConsoleCodexMiddlewareRuntimeScript()); + try { + fs.chmodSync(file, 493); + } catch { + } + return file; +} +function agentConsoleClaudeCodeBaseEnv({ gatewayUrl, model, settingsDir }) { + const env = { + ANTHROPIC_API_BASE_URL: gatewayUrl, + ANTHROPIC_BASE_URL: gatewayUrl, + CLAUDE_AGENT_API_BASE_URL: gatewayUrl, + CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY: "1", + CLAUDE_CONFIG_DIR: settingsDir + }; + if (model) { + env.ANTHROPIC_MODEL = model; + env.CCR_CLAUDE_CODE_MODEL = model; + env.CODEXL_CLAUDE_CODE_MODEL = model; + } + const timezoneEnv = agentConsoleClaudeCodeTimezoneEnv(); + return Object.keys(timezoneEnv).length ? { ...env, ...timezoneEnv } : env; +} +function agentConsoleClaudeCodeSettingsJson({ apiKeyHelperFile, env }) { + return `${JSON.stringify({ + apiKeyHelper: process.platform === "win32" ? `"${apiKeyHelperFile}"` : apiKeyHelperFile, + env + }, null, 2)} +`; +} +function agentConsoleApiKeyHelperShell(apiKey) { + return [ + "#!/bin/sh", + `printf '%s\\n' ${shellSingleQuote(apiKey)}`, + "" + ].join("\n"); +} +function agentConsoleApiKeyHelperCmd(apiKey) { + return [ + "@echo off", + `echo ${cmdValue(apiKey)}`, + "" + ].join("\r\n"); +} +function agentConsoleClaudeCodeMiddlewareShell({ apiKeyHelperFile, baseEnv, realClaudeCli, remoteEndpoint, runtimeFile }) { + return [ + "#!/bin/sh", + ...Object.entries(baseEnv).map(([key, value]) => `export ${key}=${shellSingleQuote(value)}`), + "export CCR_CLAUDE_CODE_WRAPPER=1", + `export CCR_REAL_CLAUDE_CODE_BIN=${shellSingleQuote(realClaudeCli)}`, + `export CODEXL_CLAUDE_CODE_BIN=${shellSingleQuote(realClaudeCli)}`, + 'if [ -z "${CCR_PROFILE_SURFACE:-}" ]; then CCR_PROFILE_SURFACE=app; fi', + "export CCR_PROFILE_SURFACE", + 'if [ -z "${CCR_REMOTE_SYNC_ENABLED:-}" ]; then CCR_REMOTE_SYNC_ENABLED=1; fi', + `if [ -z "\${CCR_REMOTE_SYNC_ENDPOINT:-}" ]; then CCR_REMOTE_SYNC_ENDPOINT=${shellSingleQuote(remoteEndpoint)}; fi`, + `if [ -z "\${CCR_REMOTE_SYNC_API_KEY_HELPER:-}" ]; then CCR_REMOTE_SYNC_API_KEY_HELPER=${shellSingleQuote(apiKeyHelperFile)}; fi`, + 'if [ -z "${CCR_REMOTE_SYNC_PROFILE_ID:-}" ]; then CCR_REMOTE_SYNC_PROFILE_ID=agent-console-claude-code; fi', + `if [ -z "\${CCR_REMOTE_SYNC_PROFILE_NAME:-}" ]; then CCR_REMOTE_SYNC_PROFILE_NAME='Agent Console Claude Code'; fi`, + "export CCR_REMOTE_SYNC_ENABLED CCR_REMOTE_SYNC_ENDPOINT CCR_REMOTE_SYNC_API_KEY_HELPER CCR_REMOTE_SYNC_PROFILE_ID CCR_REMOTE_SYNC_PROFILE_NAME", + 'if [ -n "${CCR_NODE_BIN:-}" ]; then', + ` exec "$CCR_NODE_BIN" ${shellSingleQuote(runtimeFile)} "$@"`, + "fi", + "if command -v node >/dev/null 2>&1; then", + ` exec node ${shellSingleQuote(runtimeFile)} "$@"`, + "fi", + `ELECTRON_RUN_AS_NODE=1 exec ${shellSingleQuote(process.execPath)} ${shellSingleQuote(runtimeFile)} "$@"`, + "" + ].join("\n"); +} +function agentConsoleClaudeCodeMiddlewareCmd({ apiKeyHelperFile, baseEnv, realClaudeCli, remoteEndpoint, runtimeFile }) { + const quotedRuntime = cmdQuote(runtimeFile); + const quotedHost = cmdQuote(process.execPath); + return [ + "@echo off", + ...Object.entries(baseEnv).map(([key, value]) => cmdSetLine(key, value)), + cmdSetLine("CCR_CLAUDE_CODE_WRAPPER", "1"), + cmdSetLine("CCR_REAL_CLAUDE_CODE_BIN", realClaudeCli), + cmdSetLine("CODEXL_CLAUDE_CODE_BIN", realClaudeCli), + `if not defined CCR_PROFILE_SURFACE ${cmdSetLine("CCR_PROFILE_SURFACE", "app")}`, + `if not defined CCR_REMOTE_SYNC_ENABLED ${cmdSetLine("CCR_REMOTE_SYNC_ENABLED", "1")}`, + `if not defined CCR_REMOTE_SYNC_ENDPOINT ${cmdSetLine("CCR_REMOTE_SYNC_ENDPOINT", remoteEndpoint)}`, + `if not defined CCR_REMOTE_SYNC_API_KEY_HELPER ${cmdSetLine("CCR_REMOTE_SYNC_API_KEY_HELPER", apiKeyHelperFile)}`, + `if not defined CCR_REMOTE_SYNC_PROFILE_ID ${cmdSetLine("CCR_REMOTE_SYNC_PROFILE_ID", "agent-console-claude-code")}`, + `if not defined CCR_REMOTE_SYNC_PROFILE_NAME ${cmdSetLine("CCR_REMOTE_SYNC_PROFILE_NAME", "Agent Console Claude Code")}`, + "if defined CCR_NODE_BIN (", + ` "%CCR_NODE_BIN%" ${quotedRuntime} %*`, + " exit /b %ERRORLEVEL%", + ")", + "where node >nul 2>nul", + "if %ERRORLEVEL%==0 (", + ` node ${quotedRuntime} %*`, + " exit /b %ERRORLEVEL%", + ")", + 'set "ELECTRON_RUN_AS_NODE=1"', + `${quotedHost} ${quotedRuntime} %*`, + "exit /b %ERRORLEVEL%", + "" + ].join("\r\n"); +} +function agentConsoleClaudeCodeTimezoneEnv() { + let timeZone = ""; + try { + timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone || ""; + } catch { + return {}; + } + const normalized = timeZone.trim().toLowerCase(); + return [ + "asia/chongqing", + "asia/chungking", + "asia/harbin", + "asia/kashgar", + "asia/shanghai", + "asia/urumqi", + "china standard time", + "prc" + ].includes(normalized) ? { TZ: "UTC" } : {}; +} +function agentConsoleCodexConfigToml({ apiKey, baseUrl, model, modelCatalogFile, providerId }) { + return [ + `model_provider = ${tomlString(providerId)}`, + `model = ${tomlString(model)}`, + `model_catalog_json = ${tomlString(modelCatalogFile)}`, + "", + `[model_providers.${tomlKey(providerId)}]`, + `name = ${tomlString("Claude Code Router")}`, + `base_url = ${tomlString(baseUrl)}`, + `experimental_bearer_token = ${tomlString(apiKey)}`, + 'wire_api = "responses"', + "" + ].join("\n"); +} +function agentConsoleCodexMiddlewareShell({ codexHome, model, modelCatalogFile, providerId, realCodexCli, runtimeFile }) { + return [ + "#!/bin/sh", + `export CODEX_HOME=${shellSingleQuote(codexHome)}`, + 'if [ -z "${CCR_REAL_CODEX_CLI_PATH:-}" ]; then', + ` CCR_REAL_CODEX_CLI_PATH=${shellSingleQuote(realCodexCli)}`, + "fi", + "export CCR_REAL_CODEX_CLI_PATH", + `export CCR_CODEX_PROFILE=${shellSingleQuote(providerId)}`, + `export CCR_CODEX_MODEL=${shellSingleQuote(model)}`, + `export CCR_CODEX_MODEL_CATALOG_FILE=${shellSingleQuote(modelCatalogFile)}`, + `export CCR_CODEX_MODEL_PROVIDER=${shellSingleQuote(providerId)}`, + "export CCR_CODEX_PROFILE_CONFIG_FORMAT=separate_profile_files", + "export CCR_PROFILE_SCOPE=ccr", + "export CCR_CODEX_REMOTE_FRONTEND_MODE=app", + 'if [ -z "${CODEXL_REAL_CODEX_CLI_PATH:-}" ]; then', + " CODEXL_REAL_CODEX_CLI_PATH=$CCR_REAL_CODEX_CLI_PATH", + "fi", + "export CODEXL_REAL_CODEX_CLI_PATH", + `export CODEXL_CODEX_PROFILE=${shellSingleQuote(providerId)}`, + `export CODEXL_CODEX_MODEL=${shellSingleQuote(model)}`, + `export CODEXL_CODEX_MODEL_CATALOG_FILE=${shellSingleQuote(modelCatalogFile)}`, + `export CODEXL_CODEX_MODEL_PROVIDER=${shellSingleQuote(providerId)}`, + "export CODEXL_CODEX_PROFILE_CONFIG_FORMAT=separate_profile_files", + "export CODEXL_CODEX_CORE_MODE=app", + 'if [ -n "${CCR_NODE_BIN:-}" ]; then', + ` exec "$CCR_NODE_BIN" ${shellSingleQuote(runtimeFile)} "$@"`, + "fi", + "if command -v node >/dev/null 2>&1; then", + ` exec node ${shellSingleQuote(runtimeFile)} "$@"`, + "fi", + `ELECTRON_RUN_AS_NODE=1 exec ${shellSingleQuote(process.execPath)} ${shellSingleQuote(runtimeFile)} "$@"`, + "" + ].join("\n"); +} +function agentConsoleCodexMiddlewareCmd({ codexHome, model, modelCatalogFile, providerId, realCodexCli, runtimeFile }) { + const quotedRuntime = cmdQuote(runtimeFile); + const quotedHost = cmdQuote(process.execPath); + return [ + "@echo off", + cmdSetLine("CODEX_HOME", codexHome), + `if not defined CCR_REAL_CODEX_CLI_PATH ${cmdSetLine("CCR_REAL_CODEX_CLI_PATH", realCodexCli)}`, + cmdSetLine("CCR_CODEX_PROFILE", providerId), + cmdSetLine("CCR_CODEX_MODEL", model), + cmdSetLine("CCR_CODEX_MODEL_CATALOG_FILE", modelCatalogFile), + cmdSetLine("CCR_CODEX_MODEL_PROVIDER", providerId), + cmdSetLine("CCR_CODEX_PROFILE_CONFIG_FORMAT", "separate_profile_files"), + cmdSetLine("CCR_PROFILE_SCOPE", "ccr"), + cmdSetLine("CCR_CODEX_REMOTE_FRONTEND_MODE", "app"), + 'if not defined CODEXL_REAL_CODEX_CLI_PATH set "CODEXL_REAL_CODEX_CLI_PATH=%CCR_REAL_CODEX_CLI_PATH%"', + cmdSetLine("CODEXL_CODEX_PROFILE", providerId), + cmdSetLine("CODEXL_CODEX_MODEL", model), + cmdSetLine("CODEXL_CODEX_MODEL_CATALOG_FILE", modelCatalogFile), + cmdSetLine("CODEXL_CODEX_MODEL_PROVIDER", providerId), + cmdSetLine("CODEXL_CODEX_PROFILE_CONFIG_FORMAT", "separate_profile_files"), + cmdSetLine("CODEXL_CODEX_CORE_MODE", "app"), + "if defined CCR_NODE_BIN (", + ` "%CCR_NODE_BIN%" ${quotedRuntime} %*`, + " exit /b %ERRORLEVEL%", + ")", + "where node >nul 2>nul", + "if %ERRORLEVEL%==0 (", + ` node ${quotedRuntime} %*`, + " exit /b %ERRORLEVEL%", + ")", + 'set "ELECTRON_RUN_AS_NODE=1"', + `${quotedHost} ${quotedRuntime} %*`, + "exit /b %ERRORLEVEL%", + "" + ].join("\r\n"); +} +function agentConsoleCodexMiddlewareRuntimeScript() { + const moduleRuntime = agentConsoleCodexMiddlewareRuntimeFromModule(); + if (moduleRuntime) return moduleRuntime; + const source = fs.readFileSync(agentConsoleCodexMiddlewareSourceFile(), "utf8"); + const marker = "return String.raw`"; + const start = source.indexOf(marker); + if (start < 0) { + throw new Error("Unable to locate Codex middleware runtime template."); + } + const templateStart = start + marker.length; + for (let index = templateStart; index < source.length; index += 1) { + if (source[index] !== "`" || isEscapedTemplateBacktick(source, index)) continue; + return source.slice(templateStart, index).replace(/\\`/g, "`"); + } + throw new Error("Unable to read Codex middleware runtime template."); +} +function agentConsoleCodexMiddlewareRuntimeFromModule() { + const candidates = [ + "@ccr/core/agents/codex/cli-middleware-runtime", + "@claude-code-router/core/agents/codex/cli-middleware-runtime" + ]; + for (const candidate of candidates) { + try { + const runtimeModule = require(candidate); + if (typeof runtimeModule?.codexCliMiddlewareRuntimeScript !== "function") continue; + const script = runtimeModule.codexCliMiddlewareRuntimeScript(); + if (script) return script; + } catch { + } + } + return ""; +} +function agentConsoleCodexMiddlewareSourceFile() { + const candidates = [ + stringValue(process.env.CCR_CODEX_MIDDLEWARE_RUNTIME_SOURCE), + path.resolve(__dirname, "../../../packages/core/src/agents/codex/cli-middleware-runtime.ts"), + path.resolve(process.cwd(), "packages/core/src/agents/codex/cli-middleware-runtime.ts") + ].filter(Boolean); + for (const candidate of candidates) { + if (fs.existsSync(candidate)) return candidate; + } + throw new Error("Codex middleware runtime source was not found."); +} +function isEscapedTemplateBacktick(source, index) { + let slashCount = 0; + for (let cursor = index - 1; cursor >= 0 && source[cursor] === "\\"; cursor -= 1) { + slashCount += 1; + } + return slashCount % 2 === 1; +} +function tomlString(value) { + return JSON.stringify(String(value ?? "")); +} +function tomlKey(value) { + const key = String(value || "").trim(); + return /^[A-Za-z0-9_]+$/.test(key) ? key : tomlString(key); +} +function cmdSetLine(key, value) { + return `set "${key}=${cmdValue(value)}"`; +} +function cmdValue(value) { + return String(value ?? "").replace(/"/g, '""'); +} +function cmdQuote(value) { + return `"${cmdValue(value)}"`; +} function buildCodexModelCatalog(models) { return { models: models.map((model, index) => { const reasoning = codexModelReasoningProfile(model.model); + const contextWindowTokens = readCatalogPositiveInteger(model.contextWindowTokens || model.context_window_tokens) || modelContextWindowTokens(model.model); return { additional_speed_tiers: [], + apply_patch_tool_type: "freeform", availability_nux: null, base_instructions: "You are Codex, a coding agent.", + context_window: contextWindowTokens, + default_verbosity: "low", + defaultReasoningEffort: reasoning.defaultReasoningEffort || null, default_reasoning_level: reasoning.defaultReasoningLevel, + default_reasoning_effort: reasoning.defaultReasoningEffort || null, default_reasoning_summary: "none", description: `CCR gateway model ${model.model}`, + displayName: model.displayName || model.model, display_name: model.displayName || model.model, + effective_context_window_percent: 95, + experimental_supported_tools: [], + id: model.model, + input_modalities: ["text", "image"], + max_context_window: contextWindowTokens, + model: model.model, priority: index, service_tiers: [], shell_type: "shell_command", slug: model.model, + support_verbosity: true, supported_in_api: true, + supportedReasoningEfforts: reasoning.supportedReasoningLevels.map(reasoningEffortOption), + supported_reasoning_efforts: reasoning.supportedReasoningEfforts, supported_reasoning_levels: reasoning.supportedReasoningLevels, + supports_image_detail_original: true, + supports_parallel_tool_calls: true, supports_reasoning_summaries: reasoning.supportsReasoning, + supports_search_tool: false, + truncation_policy: { mode: "tokens", limit: 1e4 }, upgrade: null, - visibility: "list" + visibility: "list", + web_search_tool_type: "text" }; }) }; } - +function reasoningEffortOption(level) { + return { + description: level.description, + reasoningEffort: level.effort, + reasoning_effort: level.effort + }; +} function availableGatewayModels(config) { const baseEntries = []; for (const provider of Array.isArray(config?.Providers) ? config.Providers : []) { @@ -1364,7 +1710,6 @@ function availableGatewayModels(config) { })); } } - const virtualEntries = []; for (const profile of Array.isArray(config?.virtualModelProfiles) ? config.virtualModelProfiles : []) { if (!isVisibleVirtualProfile(profile)) continue; @@ -1395,38 +1740,34 @@ function availableGatewayModels(config) { })); } } - return uniqueModels([...baseEntries, ...virtualEntries]); } - function runtimeModelEntry(model, options = {}) { + const contextModel = options.contextModel || options.reasoningModel || model; const reasoning = codexModelReasoningProfile(options.reasoningModel || model); + const contextWindowTokens = modelContextWindowTokens(contextModel); return { + contextWindowTokens, + context_window_tokens: contextWindowTokens, displayName: options.displayName || model, id: options.id || model, isDefault: options.isDefault === true, model, - ...(reasoning.defaultReasoningEffort ? { defaultReasoningEffort: reasoning.defaultReasoningEffort } : {}), + ...reasoning.defaultReasoningEffort ? { defaultReasoningEffort: reasoning.defaultReasoningEffort } : {}, supportedReasoningEfforts: reasoning.supportedReasoningEfforts, supportedSpeeds: [] }; } - function displayModelName(provider, modelName, fallback) { const displayNames = isRecord(provider.modelDisplayNames) ? provider.modelDisplayNames : {}; return stringValue(displayNames[modelName]) || fallback; } - function codexModelReasoningProfile(model) { const entry = findModelCatalogEntry(model); const capabilities = isRecord(entry?.capabilities) ? entry.capabilities : {}; const effortConfig = modelCatalogReasoningEffortConfig(entry, providerNameFromModel(model)); - const fallbackEfforts = effortConfig.efforts.length === 0 && openAiGptReasoningFallbackApplies(model) - ? OPENAI_REASONING_EFFORTS - : []; - const reasoningConfig = fallbackEfforts.length > 0 - ? { ...effortConfig, defaultEffort: "medium", efforts: fallbackEfforts, supportsReasoning: true } - : effortConfig; + const fallbackEfforts = effortConfig.efforts.length === 0 ? openAiGptReasoningFallbackEfforts(model) : []; + const reasoningConfig = fallbackEfforts.length > 0 ? { ...effortConfig, defaultEffort: "medium", efforts: fallbackEfforts, supportsReasoning: true } : effortConfig; const supportsReasoning = capabilities.reasoning === true || reasoningConfig.supportsReasoning; return { defaultReasoningEffort: defaultReasoningEffort(reasoningConfig), @@ -1436,25 +1777,38 @@ function codexModelReasoningProfile(model) { supportsReasoning }; } - -function openAiGptReasoningFallbackApplies(model) { - const provider = normalizeModelCatalogToken(providerNameFromModel(model)); +function modelContextWindowTokens(model) { + return modelCatalogMaxInputTokens(findModelCatalogEntry(model)) || DEFAULT_CODEX_CONTEXT_WINDOW_TOKENS; +} +function modelCatalogMaxInputTokens(entry) { + const limits = isRecord(entry?.limits) ? entry.limits : {}; + return Math.max( + 0, + readCatalogPositiveInteger(limits.contextTokens), + readCatalogPositiveInteger(limits.inputTokens) + ); +} +function openAiGptReasoningFallbackEfforts(model) { const modelName = normalizeModelCatalogToken(modelNameFromModel(model)); - const openAiProvider = provider.includes("openai") || provider.includes("codex-api"); - return openAiProvider && (/^gpt-[0-9]/.test(modelName) || /^o[0-9]/.test(modelName)); + if (openAiGptSupportsXHighFallback(modelName)) return OPENAI_EXTENDED_REASONING_EFFORTS; + return /^gpt-[0-9]/.test(modelName) || /^o[0-9]/.test(modelName) ? OPENAI_REASONING_EFFORTS : []; +} +function openAiGptSupportsXHighFallback(modelName) { + const match = modelName.match(/^gpt-(\d+)(?:[.-](\d+))?/); + if (!match) return false; + const major = Number.parseInt(match[1], 10); + const minor = Number.parseInt(match[2] || "0", 10); + return major > 5 || major === 5 && minor >= 6; } - function modelCatalogReasoningEffortConfig(entry, providerName) { if (!entry) { return { defaultEffort: "", efforts: [], supportsReasoning: false }; } - const records = sourceRecordsForProvider(entry.sourceRecords, providerName); const metadataValues = [ entry.metadata, ...records.map((record) => record.metadata) ].filter(isRecord); - let defaultEffort = ""; let supportsReasoning = false; const efforts = []; @@ -1472,33 +1826,24 @@ function modelCatalogReasoningEffortConfig(entry, providerName) { } } } - return { defaultEffort, efforts, supportsReasoning }; } - function sourceRecordsForProvider(records, providerName) { const normalizedProviderName = normalizeModelCatalogToken(providerName); if (!normalizedProviderName) return []; return records.filter((record) => { const provider = normalizeModelCatalogToken(record.provider); const displayName = normalizeModelCatalogToken(record.providerName); - return [provider, displayName].some((value) => - value && - ( - value === normalizedProviderName || - value.includes(normalizedProviderName) || - normalizedProviderName.includes(value) - ) + return [provider, displayName].some( + (value) => value && (value === normalizedProviderName || value.includes(normalizedProviderName) || normalizedProviderName.includes(value)) ); }); } - function reasoningConfigFromMetadata(metadata) { const efforts = []; let defaultEffort = ""; let supportsReasoning = false; - - const reasoning = isRecord(metadata.reasoning) ? metadata.reasoning : undefined; + const reasoning = isRecord(metadata.reasoning) ? metadata.reasoning : void 0; if (reasoning) { supportsReasoning = true; for (const effort of normalizeReasoningEfforts(reasoning.supported_efforts)) { @@ -1508,7 +1853,6 @@ function reasoningConfigFromMetadata(metadata) { } defaultEffort = normalizeReasoningEffort(reasoning.default_effort); } - const options = Array.isArray(metadata.reasoningOptions) ? metadata.reasoningOptions : []; for (const option of options) { if (!isRecord(option)) continue; @@ -1524,18 +1868,12 @@ function reasoningConfigFromMetadata(metadata) { } } } - return { defaultEffort, efforts, supportsReasoning }; } - function normalizeReasoningEfforts(value) { if (!Array.isArray(value)) return []; - return value - .map(normalizeReasoningEffort) - .filter(Boolean) - .filter((effort, index, efforts) => efforts.indexOf(effort) === index); + return value.map(normalizeReasoningEffort).filter(Boolean).filter((effort, index, efforts) => efforts.indexOf(effort) === index); } - function normalizeReasoningEffort(value) { const normalized = stringValue(value).toLowerCase().replace(/[_\s-]+/g, ""); if (!normalized || normalized === "default") return ""; @@ -1547,16 +1885,13 @@ function normalizeReasoningEffort(value) { if (normalized === "xhigh" || normalized === "extrahigh" || normalized === "max") return "xhigh"; return ""; } - function defaultReasoningLevel(config) { if (!config.defaultEffort || config.defaultEffort === "none") return null; return config.efforts.includes(config.defaultEffort) ? config.defaultEffort : null; } - function defaultReasoningEffort(config) { return defaultReasoningLevel(config) || ""; } - function reasoningLevel(effort) { const descriptions = { high: "High reasoning", @@ -1571,7 +1906,6 @@ function reasoningLevel(effort) { description: descriptions[effort] || `${effort} reasoning` }; } - function findModelCatalogEntry(model) { const index = loadModelCatalogIndex(); const candidates = modelCatalogLookupKeys(model); @@ -1579,37 +1913,31 @@ function findModelCatalogEntry(model) { const entry = index.byKey.get(key); if (entry) return entry; } - for (const key of candidates) { const modelKey = modelCatalogLastSegmentKey(key); if (!modelKey) continue; const entry = index.byModelKey.get(modelKey); if (entry) return entry; } - - return undefined; + return void 0; } - function loadModelCatalogIndex() { if (modelCatalogIndex) return modelCatalogIndex; - const payload = loadModelCatalogPayload(); modelCatalogIndex = buildModelCatalogIndex(payload); return modelCatalogIndex; } - function loadModelCatalogPayload() { for (const candidate of modelCatalogPathCandidates()) { if (!fs.existsSync(candidate)) continue; try { return JSON.parse(fs.readFileSync(candidate, "utf8")); } catch { - return undefined; + return void 0; } } - return undefined; + return void 0; } - function modelCatalogPathCandidates() { return uniqueStrings([ stringValue(process.env.CCR_MODEL_CATALOG_PATH), @@ -1625,20 +1953,16 @@ function modelCatalogPathCandidates() { path.resolve(__dirname, "..", "..", "..", "packages", "cli", "models.json") ]); } - function buildModelCatalogIndex(payload) { - const byKey = new Map(); - const byModelKey = new Map(); + const byKey = /* @__PURE__ */ new Map(); + const byModelKey = /* @__PURE__ */ new Map(); const models = isRecord(payload) && Array.isArray(payload.models) ? payload.models : []; - for (const item of models) { const entry = parseModelCatalogEntry(item); if (!entry) continue; - for (const key of modelCatalogEntryKeys(entry)) { byKey.set(key, entry); } - const shortKeys = uniqueStrings([ entry.model ? normalizeModelCatalogToken(entry.model) : "", ...entry.aliases.map((alias) => modelCatalogLastSegmentKey(normalizeModelCatalogKey(alias))) @@ -1646,35 +1970,43 @@ function buildModelCatalogIndex(payload) { for (const key of shortKeys) { if (!key) continue; if (byModelKey.has(key) && byModelKey.get(key) !== entry) { - byModelKey.set(key, undefined); + byModelKey.set(key, void 0); } else { byModelKey.set(key, entry); } } } - return { byKey, byModelKey }; } - function parseModelCatalogEntry(value) { - if (!isRecord(value)) return undefined; + if (!isRecord(value)) return void 0; const id = stringValue(value.id); - if (!id) return undefined; + if (!id) return void 0; return { aliases: uniqueStrings([id, ...stringListValue(value.aliases)]), - capabilities: isRecord(value.capabilities) ? value.capabilities : undefined, + capabilities: isRecord(value.capabilities) ? value.capabilities : void 0, id, - metadata: isRecord(value.metadata) ? value.metadata : undefined, + limits: modelCatalogLimitsValue(value.limits), + metadata: isRecord(value.metadata) ? value.metadata : void 0, model: stringValue(value.model), providers: stringListValue(value.providers), sourceRecords: sourceRecordListValue(value.sourceRecords) }; } - +function modelCatalogLimitsValue(value) { + if (!isRecord(value)) return void 0; + const limits = { + contextTokens: readCatalogPositiveInteger(value.contextTokens), + inputTokens: readCatalogPositiveInteger(value.inputTokens) + }; + return limits.contextTokens || limits.inputTokens ? limits : void 0; +} +function readCatalogPositiveInteger(value) { + return parsePositiveInteger(value); +} function sourceRecordListValue(value) { return Array.isArray(value) ? value.filter(isRecord) : []; } - function modelCatalogEntryKeys(entry) { return uniqueStrings([ normalizeModelCatalogKey(entry.id), @@ -1682,48 +2014,26 @@ function modelCatalogEntryKeys(entry) { ...entry.providers.map((provider) => entry.model ? normalizeModelCatalogKey(`${provider}/${entry.model}`) : "") ]); } - function modelCatalogLookupKeys(value) { const raw = String(value || "").trim(); const normalized = normalizeModelCatalogKey(raw); - const withoutClaudePrefix = raw.toLowerCase().startsWith("claude-") && raw.includes("/") - ? normalizeModelCatalogKey(raw.replace(/^claude-/i, "")) - : ""; + const withoutClaudePrefix = raw.toLowerCase().startsWith("claude-") && raw.includes("/") ? normalizeModelCatalogKey(raw.replace(/^claude-/i, "")) : ""; return uniqueStrings([normalized, withoutClaudePrefix]); } - function normalizeModelCatalogKey(value) { - return String(value || "") - .trim() - .split("/") - .map(normalizeModelCatalogToken) - .filter(Boolean) - .join("/"); + return String(value || "").trim().split("/").map(normalizeModelCatalogToken).filter(Boolean).join("/"); } - function normalizeModelCatalogToken(value) { - return String(value || "") - .trim() - .replace(/^hf:/i, "") - .replace(/^@/, "") - .replace(/[_\s]+/g, "-") - .replace(/-+/g, "-") - .toLowerCase(); + return String(value || "").trim().replace(/^hf:/i, "").replace(/^@/, "").replace(/[_\s]+/g, "-").replace(/-+/g, "-").toLowerCase(); } - function modelCatalogLastSegmentKey(value) { return value.split("/").filter(Boolean).at(-1) || ""; } - function isVisibleVirtualProfile(profile) { - return profile && - profile.enabled !== false && - profile.materialization?.enabled !== false && - profile.materialization?.includeInGatewayModels !== false; + return profile && profile.enabled !== false && profile.materialization?.enabled !== false && profile.materialization?.includeInGatewayModels !== false; } - function uniqueModels(models) { - const seen = new Set(); + const seen = /* @__PURE__ */ new Set(); const result = []; for (const model of models) { if (!model.model || seen.has(model.model)) continue; @@ -1732,30 +2042,25 @@ function uniqueModels(models) { } return result; } - function providerNameFromModel(model) { const index = model.indexOf("/"); return index >= 0 ? model.slice(0, index) : "Fusion"; } - function modelNameFromModel(model) { const index = model.indexOf("/"); return index >= 0 ? model.slice(index + 1) : model; } - function configuredGatewayUrl(config) { const gateway = isRecord(config?.gateway) ? config.gateway : {}; const host = normalizeGatewayHost(stringValue(gateway.host) || stringValue(config?.HOST) || "127.0.0.1"); const port = parsePort(gateway.port) || parsePort(config?.PORT) || 3456; return `http://${host}:${port}`; } - function normalizeGatewayHost(host) { if (!host || host === "0.0.0.0") return "127.0.0.1"; if (host === "::" || host === "[::]") return "[::1]"; return host.includes(":") && !host.startsWith("[") ? `[${host}]` : host; } - function configuredGatewayApiKey(config) { const apiKey = stringValue(config?.APIKEY); if (apiKey) return apiKey; @@ -1766,7 +2071,6 @@ function configuredGatewayApiKey(config) { } return ""; } - function resolveAppRoot(options) { const candidates = [ stringValue(options.appRoot), @@ -1777,14 +2081,11 @@ function resolveAppRoot(options) { ].filter(Boolean); return path.resolve(expandHomePath(candidates[0])); } - function resolveElectronPath(options, appRoot) { const configured = stringValue(options.electronPath) || stringValue(process.env.CCR_AGENT_CONSOLE_ELECTRON_PATH); const candidates = [ configured, - process.platform === "win32" - ? path.join(appRoot, "node_modules", ".bin", "electron.cmd") - : path.join(appRoot, "node_modules", ".bin", "electron"), + process.platform === "win32" ? path.join(appRoot, "node_modules", ".bin", "electron.cmd") : path.join(appRoot, "node_modules", ".bin", "electron"), path.join(appRoot, "node_modules", "electron", "dist", process.platform === "darwin" ? "Electron.app/Contents/MacOS/Electron" : "electron") ].filter(Boolean); for (const candidate of candidates) { @@ -1793,7 +2094,6 @@ function resolveElectronPath(options, appRoot) { } return ""; } - function pickOpenPort(host) { return new Promise((resolve, reject) => { const server = net.createServer(); @@ -1811,35 +2111,29 @@ function pickOpenPort(host) { }); }); } - function parsePort(value) { const port = typeof value === "number" ? value : Number.parseInt(String(value || ""), 10); return Number.isInteger(port) && port > 0 && port <= 65535 ? port : 0; } - function parsePositiveInteger(value) { const integer = typeof value === "number" ? value : Number.parseInt(String(value || ""), 10); return Number.isInteger(integer) && integer > 0 ? integer : 0; } - function normalizeRoutePrefix(value) { const trimmed = value.trim(); const prefixed = trimmed.startsWith("/") ? trimmed : `/${trimmed}`; return prefixed.replace(/\/+$/, "") || DEFAULT_ROUTE_PREFIX; } - function normalizeStringArray(value) { - if (!Array.isArray(value)) return undefined; + if (!Array.isArray(value)) return void 0; const items = value.map((item) => stringValue(item)).filter(Boolean); - return items.length ? items : undefined; + return items.length ? items : void 0; } - function stringListValue(value) { return Array.isArray(value) ? value.map((item) => stringValue(item)).filter(Boolean) : []; } - function uniqueStrings(values) { - const seen = new Set(); + const seen = /* @__PURE__ */ new Set(); const strings = []; for (const value of values) { const trimmed = stringValue(value); @@ -1849,15 +2143,12 @@ function uniqueStrings(values) { } return strings; } - function stringValue(value) { return typeof value === "string" ? value.trim() : ""; } - function isRecord(value) { return value && typeof value === "object" && !Array.isArray(value); } - function expandHomePath(value) { if (!value.startsWith("~")) return value; if (value === "~") return os.homedir(); @@ -1866,11 +2157,9 @@ function expandHomePath(value) { } return value; } - function trimTrailingSlash(value) { return value.replace(/\/+$/, ""); } - function formatError(error) { return error instanceof Error ? error.message : String(error); } diff --git a/marketplace/plugins/agent-console/package.json b/marketplace/plugins/agent-console/package.json new file mode 100644 index 00000000..793f9175 --- /dev/null +++ b/marketplace/plugins/agent-console/package.json @@ -0,0 +1,45 @@ +{ + "name": "@claude-code-router/plugin-agent-console", + "version": "0.0.0", + "private": true, + "type": "commonjs", + "main": "index.cjs", + "scripts": { + "build": "node build.mjs", + "build:main": "node build.mjs --main-only", + "build:renderer": "node build.mjs --renderer-only", + "check": "node --check src/index.cjs && npm run build && node --check index.cjs" + }, + "dependencies": { + "@radix-ui/react-slot": "^1.2.4", + "@tiptap/core": "^3.26.1", + "@tiptap/extension-link": "^3.26.1", + "@tiptap/extension-placeholder": "^3.26.1", + "@tiptap/pm": "^3.26.1", + "@tiptap/react": "^3.26.1", + "@tiptap/starter-kit": "^3.26.1", + "@xterm/addon-fit": "^0.11.0", + "@xterm/xterm": "^6.0.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "dompurify": "^3.4.7", + "lucide-react": "^1.17.0", + "marked": "^18.0.4", + "monaco-editor": "^0.55.1", + "motion": "^12.40.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "tailwind-merge": "^3.6.0", + "tailwindcss": "^4.3.0" + }, + "devDependencies": { + "@tailwindcss/vite": "^4.3.0", + "@types/node": "^22.10.2", + "@types/react": "^18.3.18", + "@types/react-dom": "^18.3.5", + "@vitejs/plugin-react": "^4.3.4", + "esbuild": "^0.27.7", + "typescript": "^5.9.3", + "vite": "^7.1.6" + } +} diff --git a/marketplace/plugins/agent-console/src/index.cjs b/marketplace/plugins/agent-console/src/index.cjs new file mode 100644 index 00000000..c958f066 --- /dev/null +++ b/marketplace/plugins/agent-console/src/index.cjs @@ -0,0 +1,2411 @@ +"use strict"; + +const { spawn } = require("node:child_process"); +const fs = require("node:fs"); +const net = require("node:net"); +const os = require("node:os"); +const path = require("node:path"); + +const PLUGIN_ID = "agent-console"; +const DEFAULT_APP_ROOT = "/Users/jinhuilee/products/CCR/app"; +const DEFAULT_RENDERER_ROOT = path.join(__dirname, "dist", "renderer"); +const DEFAULT_ROUTE_PREFIX = "/plugins/agent-console"; +const DEFAULT_RENDERER_ENTRY_PATH = "/pages/home/"; +const DEFAULT_LAUNCHER_NAME = "Agent Console"; +const LEGACY_LAUNCHER_NAME = "CCR Agent Console"; +const MAC_LAUNCHER_APPS_DIR_NAME = "CCR Apps"; +const DEFAULT_LAUNCHER_BUNDLE_ID = "com.claudecoderouter.plugin.agent-console.launcher"; +const READY_PREFIX = "AGENT_CONSOLE_HEADLESS_READY "; +const DEFAULT_STARTUP_WAIT_MS = 15000; +const DEFAULT_CODEX_CONTEXT_WINDOW_TOKENS = 128000; +const OPENAI_REASONING_EFFORTS = ["minimal", "low", "medium", "high"]; +const OPENAI_EXTENDED_REASONING_EFFORTS = ["minimal", "low", "medium", "high", "xhigh"]; +let modelCatalogIndex; + +module.exports = { + async setup(ctx) { + const options = isRecord(ctx.pluginConfig) ? ctx.pluginConfig : {}; + const routePrefix = normalizeRoutePrefix(stringValue(options.routePrefix) || DEFAULT_ROUTE_PREFIX); + const appRoot = resolveAppRoot(options); + const fallbackRendererRoot = path.join(appRoot, "dist", "renderer"); + const rendererRoot = path.resolve( + stringValue(options.rendererRoot) || + stringValue(options.pwaRoot) || + (rendererDistExists(DEFAULT_RENDERER_ROOT) ? DEFAULT_RENDERER_ROOT : fallbackRendererRoot) + ); + const electronPath = resolveElectronPath(options, appRoot); + const launchMode = stringValue(options.launchMode || options.startMode).toLowerCase(); + const launchApp = options.launch !== false; + const launchOnSetup = launchApp && ( + options.launch === true || + options.launchOnSetup === true || + options.launchOnStartup === true || + launchMode === "startup" || + launchMode === "eager" + ); + const startupWaitMs = parsePositiveInteger(options.startupWaitMs) || DEFAULT_STARTUP_WAIT_MS; + const bridgeHost = stringValue(options.bridgeHost) || "127.0.0.1"; + const bridgePort = parsePort(options.bridgePort) || await pickOpenPort(bridgeHost); + const bridgeUrl = `ws://${bridgeHost}:${bridgePort}/pwa`; + const gatewayUrl = trimTrailingSlash(stringValue(options.gatewayUrl) || configuredGatewayUrl(ctx.config)); + const gatewayApiKey = stringValue(options.gatewayApiKey) || configuredGatewayApiKey(ctx.config); + const appUrl = buildRendererAppUrl(gatewayUrl, routePrefix, bridgeUrl); + const launcherUrl = `ccr://plugin/${encodeURIComponent(PLUGIN_ID)}/open`; + const launcherBundleId = stringValue(options.launcherBundleId) || DEFAULT_LAUNCHER_BUNDLE_ID; + const runtimeConfigFile = path.join(ctx.paths.pluginDataDir, "ccr-runtime-config.json"); + const modelCatalogFile = path.join(ctx.paths.pluginDataDir, "ccr-codex-model-catalog.json"); + fs.mkdirSync(ctx.paths.pluginDataDir, { recursive: true }); + const runtimeConfig = buildRuntimeConfig(ctx.config, { + apiKey: gatewayApiKey, + defaultModel: stringValue(options.defaultModel), + gatewayUrl, + modelCatalogFile, + openAiBaseUrl: stringValue(options.openAiBaseUrl) + }); + const codexModelCatalog = buildCodexModelCatalog(runtimeConfig.models); + fs.writeFileSync(modelCatalogFile, `${JSON.stringify(codexModelCatalog, null, 2)}\n`, "utf8"); + const codexRuntime = ensureAgentConsoleCodexRuntime(ctx, options, runtimeConfig); + const claudeCodeRuntime = ensureAgentConsoleClaudeCodeRuntime(ctx, options, runtimeConfig, codexRuntime.runtimeFile); + if (codexRuntime.command) { + runtimeConfig.codex = { + ...(isRecord(runtimeConfig.codex) ? runtimeConfig.codex : {}), + command: codexRuntime.command, + env: codexRuntime.env + }; + } + if (claudeCodeRuntime.command) { + runtimeConfig.claudeCode = { + ...(isRecord(runtimeConfig.claudeCode) ? runtimeConfig.claudeCode : {}), + command: claudeCodeRuntime.command, + env: claudeCodeRuntime.env + }; + } + const runtime = { + appRoot, + appUrl, + bridgeHost, + bridgePort, + bridgeUrl, + child: null, + electronPath, + lastError: "", + launchApp, + launchOnOpen: launchApp && !launchOnSetup, + launchOnSetup, + launcherError: "", + launcherInstalled: false, + launcherPath: "", + launcherUrl, + rendererRoot, + ready: false, + readyPayload: null, + routePrefix, + runtimeStartedAt: null, + runtimeConfigFile, + startPromise: null, + startupWaitMs, + startedAt: new Date().toISOString() + }; + + if (!fs.existsSync(path.join(rendererRoot, "pages", "home", "index.html"))) { + ctx.logger.warn(`Agent Console Electron renderer dist is missing at ${rendererRoot}. Run npm --prefix marketplace/plugins/agent-console run build in the CCR project before opening it.`); + } + + fs.writeFileSync(runtimeConfigFile, `${JSON.stringify(runtimeConfig, null, 2)}\n`, "utf8"); + + const launcher = canUsePermission(ctx, "system-launcher") + ? ensureSystemLauncher(ctx, options, launcherUrl, launcherBundleId) + : { + error: "Agent Console system launcher requires the system-launcher permission.", + installed: false + }; + runtime.launcherError = launcher.error || ""; + runtime.launcherInstalled = launcher.installed; + runtime.launcherPath = launcher.path || ""; + + if (!launchApp) { + runtime.ready = true; + } else if (launchOnSetup) { + try { + startAgentConsole(ctx, runtime, options); + } catch (error) { + ctx.logger.warn(`Agent Console startup launch failed: ${formatError(error)}`); + } + } + + ctx.registerGatewayRoute({ + auth: "none", + id: "agent-console-status", + methods: ["GET"], + path: `${routePrefix}/__status`, + handler(_request, response, helpers) { + helpers.sendJson(response, 200, statusPayload(runtime)); + } + }); + + ctx.registerGatewayRoute({ + auth: "none", + id: "agent-console-renderer", + methods: ["GET", "HEAD"], + pathPrefix: routePrefix, + async handler(request, response) { + await serveRenderer(ctx, runtime, options, request, response); + } + }); + + ctx.registerApp({ + description: "Agent Console Electron renderer backed by the local CCR gateway.", + icon: "terminal-square", + id: PLUGIN_ID, + name: "Agent Console", + url: appUrl + }); + + ctx.logger.info(`Agent Console registered at ${appUrl}`); + if (runtime.launcherInstalled) { + ctx.logger.info(`Agent Console system launcher is available at ${runtime.launcherPath}.`); + } + + return { + stop(event) { + stopAgentConsole(runtime); + if (event?.reason === "disabled") { + removeSystemLauncher(ctx, runtime, launcherBundleId); + } + } + }; + } +}; + +function startAgentConsole(ctx, runtime, options) { + if (!runtime.launchApp) return; + if (runtime.child) return; + if (!runtime.electronPath) { + runtime.ready = false; + runtime.lastError = `Electron executable was not found under ${runtime.appRoot}.`; + ctx.logger.warn(runtime.lastError); + throw new Error(runtime.lastError); + } + + runtime.ready = false; + runtime.readyPayload = null; + runtime.lastError = ""; + runtime.runtimeStartedAt = new Date().toISOString(); + runtime.child = launchAgentConsole(ctx, runtime, options); +} + +async function ensureAgentConsoleStarted(ctx, runtime, options) { + if (!runtime.launchApp || runtime.ready) { + return; + } + + if (!runtime.child) { + if (!runtime.startPromise) { + runtime.startPromise = Promise.resolve() + .then(() => startAgentConsole(ctx, runtime, options)) + .finally(() => { + runtime.startPromise = null; + }); + } + await runtime.startPromise; + } + + await waitForAgentConsoleReady(runtime, runtime.startupWaitMs); +} + +async function waitForAgentConsoleReady(runtime, timeoutMs) { + const deadline = Date.now() + timeoutMs; + while (Date.now() <= deadline) { + if (runtime.ready) { + return; + } + if (!runtime.child) { + throw new Error(runtime.lastError || "Agent Console headless runtime exited before it became ready."); + } + await delay(100); + } + throw new Error(`Agent Console headless runtime did not become ready within ${timeoutMs}ms.${runtime.lastError ? ` Last error: ${runtime.lastError}` : ""}`); +} + +function delay(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +function launchAgentConsole(ctx, runtime, options) { + const userDataDir = path.resolve(stringValue(options.userDataDir) || path.join(ctx.paths.pluginDataDir, "user-data")); + fs.mkdirSync(userDataDir, { recursive: true }); + + const env = { + ...process.env, + AGENT_APP_PWA_BRIDGE_HOST: runtime.bridgeHost, + AGENT_APP_PWA_BRIDGE_PORT: String(runtime.bridgePort), + AGENT_CONSOLE_CCR_CONFIG_FILE: runtime.runtimeConfigFile, + AGENT_CONSOLE_HEADLESS: "1", + AGENT_CONSOLE_USER_DATA_DIR: userDataDir, + ELECTRON_ENABLE_LOGGING: process.env.ELECTRON_ENABLE_LOGGING || "1" + }; + delete env.ELECTRON_RUN_AS_NODE; + + const args = [...(normalizeStringArray(options.electronArgs) || []), runtime.appRoot]; + const child = spawn(runtime.electronPath, args, { + cwd: runtime.appRoot, + env, + stdio: ["ignore", "pipe", "pipe"], + windowsHide: true + }); + + child.stdout.setEncoding("utf8"); + child.stderr.setEncoding("utf8"); + child.stdout.on("data", (chunk) => handleAgentConsoleOutput(ctx, runtime, chunk)); + child.stderr.on("data", (chunk) => handleAgentConsoleOutput(ctx, runtime, chunk)); + child.once("error", (error) => { + runtime.ready = false; + runtime.lastError = error.message; + ctx.logger.error("Agent Console failed to launch.", error); + }); + child.once("exit", (code, signal) => { + runtime.child = null; + runtime.ready = false; + runtime.lastError = `Agent Console exited with code ${code ?? "null"} signal ${signal ?? "null"}.`; + ctx.logger.warn(runtime.lastError); + }); + + ctx.logger.info(`Launching Agent Console headless runtime with ${runtime.electronPath}.`); + return child; +} + +function handleAgentConsoleOutput(ctx, runtime, chunk) { + for (const line of String(chunk).split(/\r?\n/)) { + const trimmed = line.trim(); + if (!trimmed) continue; + if (trimmed.startsWith(READY_PREFIX)) { + const payloadText = trimmed.slice(READY_PREFIX.length).trim(); + try { + runtime.readyPayload = JSON.parse(payloadText); + } catch { + runtime.readyPayload = { raw: payloadText }; + } + runtime.ready = true; + runtime.lastError = ""; + ctx.logger.info("Agent Console headless runtime is ready."); + continue; + } + if (/failed|error/i.test(trimmed)) { + runtime.lastError = trimmed.slice(0, 1000); + ctx.logger.warn(trimmed); + } else { + ctx.logger.debug(trimmed); + } + } +} + +function stopAgentConsole(runtime) { + const child = runtime.child; + if (!child) return; + runtime.child = null; + if (!child.killed) { + child.kill("SIGTERM"); + setTimeout(() => { + if (child.exitCode === null && !child.killed) { + child.kill("SIGKILL"); + } + }, 3000).unref(); + } +} + +function statusPayload(runtime) { + return { + appRoot: runtime.appRoot, + appUrl: runtime.appUrl, + bridgeUrl: runtime.bridgeUrl, + childPid: runtime.child?.pid ?? null, + electronPath: runtime.electronPath || null, + lastError: runtime.lastError, + launchApp: runtime.launchApp, + launchOnOpen: runtime.launchOnOpen, + launchOnSetup: runtime.launchOnSetup, + launcherError: runtime.launcherError, + launcherInstalled: runtime.launcherInstalled, + launcherPath: runtime.launcherPath, + launcherUrl: runtime.launcherUrl, + pwaRoot: runtime.rendererRoot, + ready: runtime.ready, + readyPayload: runtime.readyPayload, + rendererRoot: runtime.rendererRoot, + routePrefix: runtime.routePrefix, + runtimeStartedAt: runtime.runtimeStartedAt, + runtimeConfigFile: runtime.runtimeConfigFile, + runtimeState: runtime.launchApp + ? runtime.ready + ? "ready" + : runtime.child + ? "starting" + : "idle" + : "disabled", + startedAt: runtime.startedAt + }; +} + +function ensureSystemLauncher(ctx, options, launcherUrl, launcherBundleId) { + if (options.systemLauncher === false || options.createSystemLauncher === false) { + return { installed: false }; + } + if (process.platform !== "darwin") { + return { + error: `System launcher creation is only implemented for macOS. Current platform: ${process.platform}.`, + installed: false + }; + } + + const launcherName = stringValue(options.launcherName) || DEFAULT_LAUNCHER_NAME; + const explicitLauncherPath = Boolean(stringValue(options.launcherPath)); + const launcherPath = path.resolve( + stringValue(options.launcherPath) || + defaultMacLauncherAppPath(launcherName) + ); + + if (!explicitLauncherPath) { + const legacyLauncherPaths = [legacyMacLauncherAppPath(launcherName)]; + if (launcherName === DEFAULT_LAUNCHER_NAME) { + legacyLauncherPaths.push(legacyMacLauncherAppPath(LEGACY_LAUNCHER_NAME)); + } + + for (const legacyPath of legacyLauncherPaths) { + try { + migrateLegacyMacLauncherApp({ + bundleId: launcherBundleId, + legacyPath, + launcherPath + }); + } catch (error) { + ctx.logger.warn(`Failed to rename legacy Agent Console launcher: ${formatError(error)}`); + } + } + } + + try { + installMacLauncherApp({ + bundleId: launcherBundleId, + launcherName, + launcherPath, + launcherUrl + }); + return { + installed: true, + path: launcherPath + }; + } catch (error) { + const message = `Failed to install Agent Console system launcher: ${formatError(error)}`; + ctx.logger.warn(message); + return { + error: message, + installed: false, + path: launcherPath + }; + } +} + +function canUsePermission(ctx, permission) { + return Array.isArray(ctx.permissions) && ctx.permissions.includes(permission); +} + +function migrateLegacyMacLauncherApp({ bundleId, legacyPath, launcherPath }) { + if (legacyPath === launcherPath || fs.existsSync(launcherPath) || !fs.existsSync(legacyPath)) { + return; + } + if (!fs.statSync(legacyPath).isDirectory()) { + return; + } + + const infoPath = path.join(legacyPath, "Contents", "Info.plist"); + if (!fs.existsSync(infoPath)) { + return; + } + + const info = fs.readFileSync(infoPath, "utf8"); + if (!info.includes(`${escapeXml(bundleId)}`)) { + return; + } + + fs.mkdirSync(path.dirname(launcherPath), { recursive: true }); + fs.renameSync(legacyPath, launcherPath); +} + +function defaultMacLauncherAppPath(launcherName) { + return path.join(macLauncherAppsDir(), `${safeMacFileName(launcherName)}.app`); +} + +function legacyMacLauncherAppPath(launcherName) { + return path.join(os.homedir(), "Applications", `${safeMacFileName(launcherName)}.app`); +} + +function macLauncherAppsDir() { + return path.join(os.homedir(), "Applications", MAC_LAUNCHER_APPS_DIR_NAME); +} + +function installMacLauncherApp({ bundleId, launcherName, launcherPath, launcherUrl }) { + if (fs.existsSync(launcherPath) && !fs.statSync(launcherPath).isDirectory()) { + throw new Error(`${launcherPath} exists and is not a directory.`); + } + + const contentsDir = path.join(launcherPath, "Contents"); + const macOsDir = path.join(contentsDir, "MacOS"); + const resourcesDir = path.join(contentsDir, "Resources"); + const executableName = safeMacExecutableName(launcherName); + const executablePath = path.join(macOsDir, executableName); + + fs.mkdirSync(macOsDir, { recursive: true }); + fs.mkdirSync(resourcesDir, { recursive: true }); + writeTextIfChanged(path.join(contentsDir, "Info.plist"), macLauncherInfoPlist({ + bundleId, + executableName, + launcherName + })); + writeTextIfChanged(path.join(contentsDir, "PkgInfo"), "APPL????"); + writeTextIfChanged(executablePath, macLauncherScript(launcherUrl)); + fs.chmodSync(executablePath, 0o755); +} + +function removeSystemLauncher(ctx, runtime, bundleId) { + if (process.platform !== "darwin" || !runtime.launcherInstalled || !runtime.launcherPath) { + return; + } + + try { + uninstallMacLauncherApp({ + bundleId, + launcherPath: runtime.launcherPath + }); + runtime.launcherInstalled = false; + runtime.launcherPath = ""; + } catch (error) { + ctx.logger.warn(`Failed to remove Agent Console system launcher: ${formatError(error)}`); + } +} + +function uninstallMacLauncherApp({ bundleId, launcherPath }) { + const resolvedLauncherPath = path.resolve(launcherPath); + if (!resolvedLauncherPath.endsWith(".app") || !fs.existsSync(resolvedLauncherPath)) { + return; + } + if (!fs.statSync(resolvedLauncherPath).isDirectory()) { + return; + } + + const infoPath = path.join(resolvedLauncherPath, "Contents", "Info.plist"); + if (!fs.existsSync(infoPath)) { + return; + } + + const info = fs.readFileSync(infoPath, "utf8"); + if (!info.includes(`${escapeXml(bundleId)}`)) { + return; + } + + fs.rmSync(resolvedLauncherPath, { force: true, recursive: true }); + if (path.dirname(resolvedLauncherPath) === macLauncherAppsDir()) { + try { + fs.rmdirSync(macLauncherAppsDir()); + } catch { + // Keep the shared launcher directory when it still contains other apps. + } + } +} + +function macLauncherInfoPlist({ bundleId, executableName, launcherName }) { + return ` + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${escapeXml(launcherName)} + CFBundleExecutable + ${escapeXml(executableName)} + CFBundleIdentifier + ${escapeXml(bundleId)} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${escapeXml(launcherName)} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSMinimumSystemVersion + 10.15 + NSHighResolutionCapable + + + +`; +} + +function macLauncherScript(launcherUrl) { + const quotedUrl = shellSingleQuote(launcherUrl); + return `#!/bin/sh +if /usr/bin/open -b com.claudecoderouter.desktop ${quotedUrl} >/dev/null 2>&1; then + exit 0 +fi +/usr/bin/open ${quotedUrl} +`; +} + +function writeTextIfChanged(filePath, content) { + if (fs.existsSync(filePath)) { + try { + if (fs.readFileSync(filePath, "utf8") === content) { + return; + } + } catch { + // Fall through and rewrite unreadable stale files. + } + } + fs.writeFileSync(filePath, content, "utf8"); +} + +function safeMacFileName(value) { + return value.replace(/[/:]/g, "-").trim() || "Agent Console"; +} + +function safeMacExecutableName(value) { + return value.replace(/[^A-Za-z0-9_-]+/g, "").trim() || "AgentConsole"; +} + +function shellSingleQuote(value) { + return `'${String(value).replace(/'/g, `'\\''`)}'`; +} + +function escapeXml(value) { + return String(value) + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); +} + +async function serveRenderer(ctx, runtime, options, request, response) { + const requestUrl = new URL(request.url || "/", "http://localhost"); + const routePath = requestUrl.pathname; + if (routePath === runtime.routePrefix || routePath === `${runtime.routePrefix}/`) { + response.writeHead(308, { + "cache-control": "no-store", + "location": rendererEntryLocation(runtime.routePrefix, requestUrl.search) + }); + response.end(); + return; + } + const relativeUrlPath = routePath.slice(runtime.routePrefix.length) || "/"; + const relativeFilePath = decodeURIComponent(relativeUrlPath.split("/").filter(Boolean).join("/")); + if (relativeFilePath === "__agent-console-preload.js") { + response.writeHead(200, { + "cache-control": "no-store", + "content-type": "text/javascript; charset=utf-8" + }); + response.end(agentConsolePreloadScript(runtime.bridgeUrl)); + return; + } + const candidateFile = relativeFilePath + ? path.join(runtime.rendererRoot, relativeFilePath) + : path.join(runtime.rendererRoot, "pages", "home", "index.html"); + const filePath = safeFilePath(runtime.rendererRoot, candidateFile) || path.join(runtime.rendererRoot, "pages", "home", "index.html"); + const resolvedFile = directoryIndexFile(filePath) || (fileExists(filePath) ? filePath : ""); + const fallbackFile = path.join(runtime.rendererRoot, "pages", "home", "index.html"); + const existingFile = resolvedFile || (shouldFallbackToHome(relativeFilePath) ? fallbackFile : ""); + if (!safeFilePath(runtime.rendererRoot, existingFile) || !fileExists(existingFile)) { + sendText(response, 404, "Agent Console renderer asset was not found."); + return; + } + + const isRendererHtml = path.basename(existingFile) === "index.html"; + if (isRendererHtml) { + try { + await ensureAgentConsoleStarted(ctx, runtime, options); + } catch (error) { + sendText(response, 503, `Agent Console runtime is not available. ${formatError(error)}`); + return; + } + } + + if (request.method === "HEAD") { + response.writeHead(200, headersForFile(existingFile)); + response.end(); + return; + } + + if (isRendererHtml) { + const html = fs.readFileSync(existingFile, "utf8"); + response.writeHead(200, { + ...headersForFile(existingFile), + "cache-control": "no-store" + }); + response.end(injectAgentConsolePreload(html, runtime.routePrefix)); + return; + } + + response.writeHead(200, headersForFile(existingFile)); + fs.createReadStream(existingFile).pipe(response); +} + +function injectAgentConsolePreload(html, routePrefix) { + const script = ``; + if (html.includes(script)) { + return html; + } + if (html.includes("")) { + return html.replace("", `${script}`); + } + return `${script}${html}`; +} + +function buildRendererAppUrl(gatewayUrl, routePrefix, bridgeUrl) { + const params = new URLSearchParams(); + params.set("mode", "main"); + params.set("agentBridge", bridgeUrl); + return `${gatewayUrl}${routePrefix}${DEFAULT_RENDERER_ENTRY_PATH}?${params.toString()}`; +} + +function rendererEntryLocation(routePrefix, search) { + const params = new URLSearchParams(String(search || "").replace(/^\?/, "")); + if (!params.has("mode")) { + params.set("mode", "main"); + } + const query = params.toString(); + return `${routePrefix}${DEFAULT_RENDERER_ENTRY_PATH}${query ? `?${query}` : ""}`; +} + +function agentConsolePreloadScript(bridgeUrl) { + return ` +(() => { + if (window.agentConsole) return; + window.__AGENT_CONSOLE_BRIDGE_URLS__ = ${JSON.stringify([bridgeUrl])}; + try { window.localStorage.setItem("agentConsolePwaBridgeUrl", ${JSON.stringify(bridgeUrl)}); } catch (_) {} + + class AgentConsoleBridge { + constructor() { + this.connectPromise = null; + this.nextId = 1; + this.pending = new Map(); + this.socket = null; + this.subscribers = new Map(); + } + invoke(channel, ...args) { + return this.ensureSocket().then((socket) => new Promise((resolve, reject) => { + const id = this.nextId++; + this.pending.set(id, { reject, resolve }); + socket.send(JSON.stringify({ args, channel, id, type: "invoke" })); + })); + } + send(channel, ...args) { + void this.ensureSocket().then((socket) => { + socket.send(JSON.stringify({ args, channel, type: "send" })); + }); + } + on(channel, callback) { + let callbacks = this.subscribers.get(channel); + if (!callbacks) { + callbacks = new Set(); + this.subscribers.set(channel, callbacks); + } + callbacks.add(callback); + return () => callbacks.delete(callback); + } + ensureSocket() { + if (this.socket && this.socket.readyState === WebSocket.OPEN) return Promise.resolve(this.socket); + if (this.connectPromise) return this.connectPromise; + this.connectPromise = this.connect().finally(() => { + this.connectPromise = null; + }); + return this.connectPromise; + } + connect() { + const urls = Array.isArray(window.__AGENT_CONSOLE_BRIDGE_URLS__) && window.__AGENT_CONSOLE_BRIDGE_URLS__.length + ? window.__AGENT_CONSOLE_BRIDGE_URLS__ + : [window.localStorage.getItem("agentConsolePwaBridgeUrl")].filter(Boolean); + let index = 0; + const tryNext = (lastError) => { + const url = urls[index++]; + if (!url) return Promise.reject(lastError || new Error("Agent Console bridge is not available.")); + return new Promise((resolve, reject) => { + const socket = new WebSocket(url); + const timer = window.setTimeout(() => { + socket.close(); + reject(new Error("Agent Console bridge connection timed out.")); + }, 5000); + socket.addEventListener("open", () => { + window.clearTimeout(timer); + this.socket = socket; + socket.addEventListener("message", (event) => this.handleMessage(event)); + socket.addEventListener("close", () => this.handleClose(socket)); + resolve(socket); + }, { once: true }); + socket.addEventListener("error", () => { + window.clearTimeout(timer); + reject(new Error("Failed to connect Agent Console bridge.")); + }, { once: true }); + }).catch(tryNext); + }; + return tryNext(); + } + handleClose(socket) { + if (this.socket === socket) this.socket = null; + for (const pending of this.pending.values()) { + pending.reject(new Error("Agent Console bridge disconnected.")); + } + this.pending.clear(); + } + handleMessage(event) { + if (typeof event.data !== "string") return; + let message; + try { message = JSON.parse(event.data); } catch (_) { return; } + if (message.type === "event") { + for (const callback of this.subscribers.get(message.channel) || []) callback(message.payload); + return; + } + if (message.type !== "result" || typeof message.id !== "number") return; + const pending = this.pending.get(message.id); + if (!pending) return; + this.pending.delete(message.id); + if (message.error) { + const error = new Error(message.error.message || "Agent Console bridge request failed."); + error.name = message.error.name || error.name; + if (message.error.stack) error.stack = message.error.stack; + pending.reject(error); + } else { + pending.resolve(message.result); + } + } + } + + const bridge = new AgentConsoleBridge(); + const invoke = (channel) => (...args) => bridge.invoke(channel, ...args); + const on = (channel) => (callback) => bridge.on(channel, callback); + const unavailable = (feature) => () => Promise.reject(new Error(feature + " is not available in CCR plugin mode.")); + const isRecord = (value) => value && typeof value === "object" && !Array.isArray(value); + let activeProjectPath = null; + const withActiveProject = (payload) => { + if (!activeProjectPath || (payload && typeof payload === "object" && !Array.isArray(payload) && (payload.cwd || payload.projectPath))) { + return payload; + } + if (payload && typeof payload === "object" && !Array.isArray(payload)) { + return { ...payload, projectPath: activeProjectPath }; + } + return { projectPath: activeProjectPath }; + }; + const invokeWithActiveProject = (channel) => (payload) => bridge.invoke(channel, withActiveProject(payload)); + const browserUnavailableState = () => Promise.resolve({ + activeTabId: null, + hiddenHostReady: false, + importedProfiles: [], + origins: [], + settings: { + browserUseEnabled: false, + coachmarkDismissed: true, + hiddenHostEnabled: false, + requireOriginApproval: true + }, + tabs: [] + }); + const isSmallChatMode = () => new URLSearchParams(window.location.search).get("mode") === "small-chat"; + const ensurePluginSmallWindowVisuals = () => { + if (!isSmallChatMode() || document.getElementById("agent-console-plugin-small-window-styles")) return; + const style = document.createElement("style"); + style.id = "agent-console-plugin-small-window-styles"; + style.textContent = [ + ":root[data-window-mode='small-chat'] .small-chat-window{--foreground:rgba(250,252,255,.98);--muted:rgba(148,163,184,.12);--muted-foreground:rgba(226,232,240,.84);--card-foreground:rgba(250,252,255,.98);--accent:rgba(20,184,166,.14);--accent-foreground:rgba(204,251,241,.98);--popover:rgba(8,13,24,.92);--popover-foreground:rgba(241,245,249,.94);--primary:#5eead4;--secondary-foreground:rgba(241,245,249,.95);--border:rgba(226,232,240,.2);--card:rgba(12,20,34,.64);--chatbot-foreground:rgba(250,252,255,.98);--chatbot-user-message-foreground:rgba(250,252,255,.98);--markdown-foreground:rgba(242,246,252,.95);--markdown-heading-foreground:rgba(255,255,255,.98);--markdown-blockquote-foreground:rgba(226,232,240,.86);--markdown-link-foreground:#93c5fd;--markdown-inline-code-background:rgba(15,23,42,.72);--markdown-inline-code-foreground:#e0f2fe;--markdown-code-block-background:rgba(5,10,18,.72);--markdown-code-block-foreground:rgba(241,245,249,.96);--markdown-code-block-border:rgba(226,232,240,.18);background:rgba(7,12,22,.62)!important;color:rgba(250,252,255,.98)!important;text-shadow:0 1px 2px rgba(0,0,0,.48)!important;box-shadow:0 24px 70px rgba(0,0,0,.36),inset 0 1px 0 rgba(255,255,255,.14)!important;-webkit-backdrop-filter:blur(28px) saturate(1.28) brightness(.86)!important;backdrop-filter:blur(28px) saturate(1.28) brightness(.86)!important;}", + ":root[data-window-mode='small-chat'] .small-chat-window::before{background:linear-gradient(180deg,rgba(255,255,255,.06),transparent 28%),linear-gradient(180deg,rgba(2,6,12,.2),rgba(2,6,12,.34))!important;}", + ":root[data-window-mode='small-chat'] .small-chat-window-header{background:linear-gradient(180deg,rgba(7,12,22,.54),rgba(7,12,22,.18) 76%,transparent)!important;border-color:rgba(226,232,240,.14)!important;}", + ":root[data-window-mode='small-chat'] .small-chat-window .chatbot-bottom-overlay{background:linear-gradient(180deg,transparent 0%,rgba(7,12,22,.24) 42%,rgba(7,12,22,.62) 100%)!important;}", + ":root[data-window-mode='small-chat'] .small-chat-window .markdown-stream-panel,:root[data-window-mode='small-chat'] .small-chat-window .markdown-stream-panel p,:root[data-window-mode='small-chat'] .small-chat-window .markdown-stream-panel li,:root[data-window-mode='small-chat'] .small-chat-window .markdown-stream-panel blockquote{color:var(--markdown-foreground)!important;text-shadow:0 1px 2px rgba(0,0,0,.42)!important;}", + ":root[data-window-mode='small-chat'] .small-chat-window .markdown-stream-panel h1,:root[data-window-mode='small-chat'] .small-chat-window .markdown-stream-panel h2,:root[data-window-mode='small-chat'] .small-chat-window .markdown-stream-panel h3,:root[data-window-mode='small-chat'] .small-chat-window .markdown-stream-panel h4{color:var(--markdown-heading-foreground)!important;}", + ":root[data-window-mode='small-chat'] .small-chat-window .chatbot-user-message{background:rgba(18,30,50,.62)!important;border-color:rgba(226,232,240,.18)!important;color:rgba(250,252,255,.98)!important;-webkit-backdrop-filter:blur(18px) saturate(1.24)!important;backdrop-filter:blur(18px) saturate(1.24)!important;}", + ":root[data-window-mode='small-chat'] .small-chat-window .home-composer,:root[data-window-mode='small-chat'] .small-chat-window .chat-floating-composer{background:rgba(10,17,29,.68)!important;border-color:rgba(226,232,240,.2)!important;color:rgba(250,252,255,.98)!important;-webkit-backdrop-filter:blur(30px) saturate(1.42)!important;backdrop-filter:blur(30px) saturate(1.42)!important;}", + ":root[data-window-mode='small-chat'] .small-chat-window textarea,:root[data-window-mode='small-chat'] .small-chat-window input{color:rgba(250,252,255,.98)!important;}", + ":root[data-window-mode='small-chat'] .small-chat-window textarea::placeholder,:root[data-window-mode='small-chat'] .small-chat-window input::placeholder{color:rgba(226,232,240,.76)!important;}", + ":root[data-window-mode='small-chat'] .small-chat-window .home-composer-toolbar{background:rgba(255,255,255,.055)!important;}", + ":root[data-window-mode='small-chat'] .small-chat-window .bg-popover,:root[data-window-mode='small-chat'] .small-chat-window .codex-dialog,:root[data-window-mode='small-chat'] .small-chat-window [role='menu']{background:rgba(8,13,24,.94)!important;border-color:rgba(148,163,184,.28)!important;color:rgba(241,245,249,.94)!important;box-shadow:0 18px 48px rgba(0,0,0,.34),inset 0 1px 0 rgba(255,255,255,.08)!important;-webkit-backdrop-filter:blur(24px) saturate(1.24) brightness(.9)!important;backdrop-filter:blur(24px) saturate(1.24) brightness(.9)!important;}", + ":root[data-window-mode='small-chat'] .small-chat-window .text-popover-foreground{color:rgba(241,245,249,.92)!important;}", + ":root[data-window-mode='small-chat'] .small-chat-window .codex-dialog .text-muted-foreground,:root[data-window-mode='small-chat'] .small-chat-window [role='menu'] .text-muted-foreground,:root[data-window-mode='small-chat'] .small-chat-window .bg-popover .text-muted-foreground{color:rgba(203,213,225,.72)!important;}", + ":root[data-window-mode='small-chat'] .small-chat-window .codex-dialog button,:root[data-window-mode='small-chat'] .small-chat-window [role='menu'] button,:root[data-window-mode='small-chat'] .small-chat-window .bg-popover button{color:rgba(226,232,240,.9)!important;}", + ":root[data-window-mode='small-chat'] .small-chat-window .codex-dialog button:hover,:root[data-window-mode='small-chat'] .small-chat-window .codex-dialog button:focus-visible,:root[data-window-mode='small-chat'] .small-chat-window [role='menu'] button:hover,:root[data-window-mode='small-chat'] .small-chat-window [role='menu'] button:focus-visible,:root[data-window-mode='small-chat'] .small-chat-window .bg-popover button:hover,:root[data-window-mode='small-chat'] .small-chat-window .bg-popover button:focus-visible{background:rgba(148,163,184,.14)!important;color:rgba(255,255,255,.96)!important;}", + ":root[data-window-mode='small-chat'] .small-chat-window .codex-dialog button.bg-accent,:root[data-window-mode='small-chat'] .small-chat-window [role='menu'] button.bg-accent,:root[data-window-mode='small-chat'] .small-chat-window .bg-popover button.bg-accent{background:rgba(20,184,166,.16)!important;color:rgba(204,251,241,.98)!important;box-shadow:inset 0 0 0 1px rgba(45,212,191,.22)!important;}", + ":root[data-window-mode='small-chat'] .small-chat-window .codex-dialog button.bg-accent:hover,:root[data-window-mode='small-chat'] .small-chat-window .codex-dialog button.bg-accent:focus-visible,:root[data-window-mode='small-chat'] .small-chat-window [role='menu'] button.bg-accent:hover,:root[data-window-mode='small-chat'] .small-chat-window [role='menu'] button.bg-accent:focus-visible,:root[data-window-mode='small-chat'] .small-chat-window .bg-popover button.bg-accent:hover,:root[data-window-mode='small-chat'] .small-chat-window .bg-popover button.bg-accent:focus-visible{background:rgba(20,184,166,.22)!important;color:rgba(240,253,250,.98)!important;}", + ":root[data-window-mode='small-chat'] .small-chat-window-header button{color:rgba(226,232,240,.78)!important;}", + ":root[data-window-mode='small-chat'] .small-chat-window-header button:hover,:root[data-window-mode='small-chat'] .small-chat-window-header button:focus-visible{background:rgba(148,163,184,.14)!important;color:rgba(255,255,255,.96)!important;box-shadow:inset 0 0 0 1px rgba(255,255,255,.1)!important;}", + ":root[data-window-mode='small-chat'] .small-chat-window-header button:active{background:rgba(148,163,184,.2)!important;color:rgba(255,255,255,.98)!important;}", + ":root[data-window-mode='small-chat'] .small-chat-window-header button.text-primary{background:rgba(20,184,166,.1)!important;color:#99f6e4!important;}", + ":root[data-window-mode='small-chat'] .small-chat-window-header button.text-primary:hover,:root[data-window-mode='small-chat'] .small-chat-window-header button.text-primary:focus-visible{background:rgba(20,184,166,.16)!important;color:#ccfbf1!important;}" + ].join(""); + document.head.appendChild(style); + }; + ensurePluginSmallWindowVisuals(); + const getSmallWindowId = () => { + const value = new URLSearchParams(window.location.search).get("windowId"); + if (!value || !/^\\d+$/.test(value)) return null; + const id = Number(value); + return Number.isSafeInteger(id) ? id : null; + }; + let smallWindowPinned = false; + const getSmallWindowState = () => Promise.resolve({ + id: getSmallWindowId(), + isSmallWindow: isSmallChatMode(), + minHeight: 460, + minWidth: 360, + pinned: smallWindowPinned + }); + const openSmallWindow = (payload) => { + const windowId = Date.now(); + const url = new URL(window.location.href); + url.searchParams.set("mode", "small-chat"); + url.searchParams.set("windowId", String(windowId)); + url.searchParams.delete("openingTransition"); + const threadId = isRecord(payload) && typeof payload.threadId === "string" ? payload.threadId.trim() : ""; + if (threadId) { + url.searchParams.set("threadId", threadId); + } else { + url.searchParams.delete("threadId"); + } + const childWindow = window.open( + url.toString(), + "agent-console-small-chat-" + windowId, + "popup,width=420,height=640,resizable=yes" + ); + if (!childWindow) { + return Promise.reject(new Error("Unable to open Agent Console small window.")); + } + try { childWindow.focus(); } catch (_) {} + return Promise.resolve({ success: true }); + }; + const setSmallWindowPinned = (payload) => { + smallWindowPinned = Boolean(isRecord(payload) && payload.pinned); + if (isSmallChatMode()) { + try { + window.open("ccr-plugin-window://set-pinned?pinned=" + (smallWindowPinned ? "1" : "0"), "_blank", "noopener,noreferrer"); + } catch (_) {} + } + return getSmallWindowState(); + }; + const menuState = { close: null }; + const ensureMenuStyles = () => { + if (document.getElementById("agent-console-plugin-menu-styles")) return; + const style = document.createElement("style"); + style.id = "agent-console-plugin-menu-styles"; + style.textContent = [ + ".agent-console-plugin-menu{position:fixed;z-index:2147483647;min-width:198px;max-width:320px;padding:6px;border:1px solid color-mix(in srgb,var(--border,#d4d4d8) 85%,transparent);border-radius:8px;background:var(--popover,var(--background,#fff));color:var(--popover-foreground,var(--foreground,#111827));box-shadow:0 16px 48px rgba(15,23,42,.2);font:13px system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;}", + ".agent-console-plugin-menu-submenu{position:absolute;left:calc(100% + 6px);top:-6px;display:none;min-width:198px;max-width:320px;padding:6px;border:1px solid color-mix(in srgb,var(--border,#d4d4d8) 85%,transparent);border-radius:8px;background:var(--popover,var(--background,#fff));color:var(--popover-foreground,var(--foreground,#111827));box-shadow:0 16px 48px rgba(15,23,42,.2);}", + ".agent-console-plugin-menu-row{position:relative;}", + ".agent-console-plugin-menu-row:hover>.agent-console-plugin-menu-submenu,.agent-console-plugin-menu-row:focus-within>.agent-console-plugin-menu-submenu{display:block;}", + ".agent-console-plugin-menu-item{box-sizing:border-box;display:flex;width:100%;height:28px;align-items:center;gap:8px;border:0;border-radius:6px;background:transparent;color:inherit;padding:0 10px;text-align:left;white-space:nowrap;font:inherit;}", + ".agent-console-plugin-menu-item:not([aria-disabled='true']):hover,.agent-console-plugin-menu-item:not([aria-disabled='true']):focus-visible{background:var(--accent,#f4f4f5);color:var(--accent-foreground,inherit);outline:none;}", + ".agent-console-plugin-menu-item[aria-disabled='true']{opacity:.45;}", + ".agent-console-plugin-menu-icon{width:16px;height:16px;flex:0 0 16px;object-fit:contain;}", + ".agent-console-plugin-menu-label{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;}", + ".agent-console-plugin-menu-arrow{margin-left:16px;opacity:.65;}", + ".agent-console-plugin-menu-separator{height:1px;margin:5px 6px;background:var(--border,#e4e4e7);}" + ].join(""); + document.head.appendChild(style); + }; + const normalizeMenuItems = (value, depth) => { + if (!Array.isArray(value)) return []; + const items = []; + for (const item of value) { + if (!isRecord(item)) continue; + if (item.type === "separator") { + items.push({ type: "separator" }); + continue; + } + const label = typeof item.label === "string" ? item.label : ""; + if (!label) continue; + const submenu = depth < 4 ? normalizeMenuItems(item.submenu, depth + 1) : []; + const hasSubmenu = submenu.some((child) => child.type !== "separator"); + const id = typeof item.id === "string" ? item.id : ""; + if (!hasSubmenu && !id) continue; + items.push({ + enabled: item.enabled !== false, + icon: typeof item.icon === "string" && item.icon.startsWith("data:image/") ? item.icon : "", + id, + label, + submenu: hasSubmenu ? submenu : [], + type: "normal" + }); + } + return trimMenuSeparators(items); + }; + const trimMenuSeparators = (items) => { + const next = []; + let lastWasSeparator = true; + for (const item of items) { + if (item.type === "separator") { + if (!lastWasSeparator) next.push(item); + lastWasSeparator = true; + } else { + next.push(item); + lastWasSeparator = false; + } + } + while (next.length && next[next.length - 1].type === "separator") next.pop(); + return next; + }; + const hasMenuAction = (items) => items.some((item) => item.type !== "separator" && (item.id || hasMenuAction(item.submenu || []))); + const renderMenuItems = (items, parent, settle) => { + for (const item of items) { + if (item.type === "separator") { + const separator = document.createElement("div"); + separator.className = "agent-console-plugin-menu-separator"; + separator.setAttribute("role", "separator"); + parent.appendChild(separator); + continue; + } + const row = document.createElement("div"); + row.className = "agent-console-plugin-menu-row"; + const button = document.createElement("button"); + button.className = "agent-console-plugin-menu-item"; + button.type = "button"; + button.setAttribute("role", "menuitem"); + if (!item.enabled) { + button.setAttribute("aria-disabled", "true"); + button.tabIndex = -1; + } + if (item.icon) { + const icon = document.createElement("img"); + icon.alt = ""; + icon.className = "agent-console-plugin-menu-icon"; + icon.src = item.icon; + button.appendChild(icon); + } + const label = document.createElement("span"); + label.className = "agent-console-plugin-menu-label"; + label.textContent = item.label; + button.appendChild(label); + if (item.submenu && item.submenu.length) { + const arrow = document.createElement("span"); + arrow.className = "agent-console-plugin-menu-arrow"; + arrow.textContent = "\\u203a"; + button.appendChild(arrow); + } else if (item.id) { + button.addEventListener("click", (event) => { + event.preventDefault(); + event.stopPropagation(); + if (item.enabled) settle(item.id); + }); + } + row.appendChild(button); + if (item.submenu && item.submenu.length) { + const submenu = document.createElement("div"); + submenu.className = "agent-console-plugin-menu-submenu"; + submenu.setAttribute("role", "menu"); + renderMenuItems(item.submenu, submenu, settle); + row.appendChild(submenu); + } + parent.appendChild(row); + } + }; + const popupNativeMenu = (payload) => { + const record = isRecord(payload) ? payload : {}; + const items = normalizeMenuItems(record.items, 0); + if (!hasMenuAction(items)) return Promise.resolve({ actionId: null, success: true }); + ensureMenuStyles(); + if (menuState.close) menuState.close(null); + return new Promise((resolve) => { + let settled = false; + const menu = document.createElement("div"); + menu.className = "agent-console-plugin-menu"; + menu.setAttribute("role", "menu"); + menu.tabIndex = -1; + const settle = (actionId) => { + if (settled) return; + settled = true; + if (menu.parentNode) menu.parentNode.removeChild(menu); + document.removeEventListener("mousedown", onDocumentMouseDown, true); + document.removeEventListener("keydown", onDocumentKeyDown, true); + if (menuState.close === settle) menuState.close = null; + resolve({ actionId: actionId || null, success: true }); + }; + const onDocumentMouseDown = (event) => { + if (!menu.contains(event.target)) settle(null); + }; + const onDocumentKeyDown = (event) => { + if (event.key === "Escape") settle(null); + }; + renderMenuItems(items, menu, settle); + document.body.appendChild(menu); + const width = menu.offsetWidth || 220; + const height = menu.offsetHeight || 32; + const requestedX = Number.isFinite(record.x) ? Math.round(record.x) : Math.round(window.innerWidth / 2 - width / 2); + const requestedY = Number.isFinite(record.y) ? Math.round(record.y) : Math.round(window.innerHeight / 2 - height / 2); + const x = Math.max(8, Math.min(requestedX, window.innerWidth - width - 8)); + const y = Math.max(8, Math.min(requestedY, window.innerHeight - height - 8)); + menu.style.left = x + "px"; + menu.style.top = y + "px"; + menuState.close = settle; + setTimeout(() => { + document.addEventListener("mousedown", onDocumentMouseDown, true); + document.addEventListener("keydown", onDocumentKeyDown, true); + menu.focus({ preventScroll: true }); + }, 0); + }); + }; + + window.agentConsole = { + agent: { + abortRun: invoke("agent-console:agent:abort-run"), + addExistingProject: invoke("agent-console:agent:add-existing-project"), + checkoutProjectBranch: invoke("agent-console:agent:checkout-project-branch"), + createBlankProject: invoke("agent-console:agent:create-blank-project"), + deleteThread: invoke("agent-console:agent:delete-thread"), + forkThread: invoke("agent-console:agent:fork-thread"), + getProviderCapabilities: invoke("agent-console:agent:get-provider-capabilities"), + getProviderSessionMessages: invoke("agent-console:agent:get-provider-session-messages"), + getThreadMessages: invoke("agent-console:agent:get-thread-messages"), + getUsageAnalytics: invoke("agent-console:agent:get-usage-analytics"), + listPendingInteractions: invoke("agent-console:agent:list-pending-interactions"), + listProjectBranches: invoke("agent-console:agent:list-project-branches"), + listProjects: invoke("agent-console:agent:list-projects"), + listProviderSessions: invoke("agent-console:agent:list-provider-sessions"), + listProviders: invoke("agent-console:agent:list-providers"), + onEvent: on("agent-console:agent:event"), + renameThread: invoke("agent-console:agent:rename-thread"), + removeProject: invoke("agent-console:agent:remove-project"), + restoreProviderSession: invoke("agent-console:agent:restore-provider-session"), + resolveApproval: invoke("agent-console:agent:resolve-approval"), + resolveQuestion: invoke("agent-console:agent:resolve-question"), + sendMessage: invoke("agent-console:send-message"), + startThread: invoke("agent-console:start-thread") + }, + automations: { + create: invoke("agent-console:automation:create"), + delete: invoke("agent-console:automation:delete"), + list: invoke("agent-console:automation:list"), + onEvent: on("agent-console:automation:event"), + runNow: invoke("agent-console:automation:run-now"), + setEnabled: invoke("agent-console:automation:set-enabled"), + update: invoke("agent-console:automation:update") + }, + browser: { + activateTab: unavailable("Browser tools"), + callAutomationTool: unavailable("Browser automation"), + closeTab: unavailable("Browser tools"), + createTab: unavailable("Browser tools"), + dismissCoachmark: browserUnavailableState, + getAutomationMcpAddress: unavailable("Browser automation"), + getState: browserUnavailableState, + goBack: unavailable("Browser tools"), + goForward: unavailable("Browser tools"), + importProfile: unavailable("Browser profile import"), + listProfileImportCandidates: () => Promise.resolve([]), + navigate: unavailable("Browser tools"), + onStateChange: () => () => {}, + reload: unavailable("Browser tools"), + setBounds: () => Promise.resolve({ success: true }), + setOriginAutomationAllowed: browserUnavailableState, + setTheme: () => Promise.resolve({ success: true }), + updateSettings: browserUnavailableState, + stop: unavailable("Browser tools") + }, + bot: { + connect: invoke("agent-console:bot:connect"), + createIntegration: invoke("agent-console:bot:create-integration"), + disconnect: invoke("agent-console:bot:disconnect"), + getStatus: invoke("agent-console:bot:status"), + getIntegrationStatus: invoke("agent-console:bot:integration-status"), + listChannels: invoke("agent-console:bot:list-channels"), + listEvents: invoke("agent-console:bot:list-events"), + listIntegrations: invoke("agent-console:bot:list-integrations"), + processNext: invoke("agent-console:bot:process-next"), + startQrLogin: invoke("agent-console:bot:start-qr-login"), + startIntegration: invoke("agent-console:bot:start-integration"), + stopIntegration: invoke("agent-console:bot:stop-integration"), + waitQrLogin: invoke("agent-console:bot:wait-qr-login") + }, + clipboard: { writeText: invoke("agent-console:clipboard:write-text") }, + workspace: { + setActiveProject: (payload) => { + activeProjectPath = payload && typeof payload === "object" ? payload.projectPath || payload.cwd || null : null; + return bridge.invoke("agent-console:workspace:set-active-project", payload); + } + }, + files: { + chooseAttachments: invoke("agent-console:files:choose-attachments"), + createFile: invokeWithActiveProject("agent-console:files:create-file"), + getRoot: invokeWithActiveProject("agent-console:files:get-root"), + readDirectory: invokeWithActiveProject("agent-console:files:read-directory"), + readFile: invokeWithActiveProject("agent-console:files:read-file"), + writeFile: invokeWithActiveProject("agent-console:files:write-file") + }, + ipc: { + invoke: (channel, ...args) => bridge.invoke(channel, ...args), + send: (channel, ...args) => bridge.send(channel, ...args), + on: (channel, callback) => bridge.on(channel, callback) + }, + nativeMenu: { popup: popupNativeMenu }, + git: { + applyShelf: invoke("agent-console:git:apply-shelf"), + checkoutBranch: invoke("agent-console:git:checkout-branch"), + checkoutRevision: invoke("agent-console:git:checkout-revision"), + cherryPickCommit: invoke("agent-console:git:cherry-pick-commit"), + commit: invoke("agent-console:git:commit"), + compareWithLocal: invoke("agent-console:git:compare-with-local"), + createAutosquashCommit: invoke("agent-console:git:create-autosquash-commit"), + createBranchAtCommit: invoke("agent-console:git:create-branch-at-commit"), + createPatch: invoke("agent-console:git:create-patch"), + createShelf: invoke("agent-console:git:create-shelf"), + createTagAtCommit: invoke("agent-console:git:create-tag-at-commit"), + discard: invoke("agent-console:git:discard"), + dropCommit: invoke("agent-console:git:drop-commit"), + dropShelf: invoke("agent-console:git:drop-shelf"), + editCommitMessage: invoke("agent-console:git:edit-commit-message"), + fetch: invoke("agent-console:git:fetch"), + getCommitDetails: invoke("agent-console:git:get-commit-details"), + getDiff: invoke("agent-console:git:get-diff"), + getFileDiff: invoke("agent-console:git:get-file-diff"), + getInteractiveRebasePlan: invoke("agent-console:git:get-interactive-rebase-plan"), + getLog: invoke("agent-console:git:get-log"), + getState: invoke("agent-console:git:get-state"), + mergeBranch: invoke("agent-console:git:merge-branch"), + pull: invoke("agent-console:git:pull"), + push: invoke("agent-console:git:push"), + pushUpToCommit: invoke("agent-console:git:push-up-to-commit"), + rebaseBranch: invoke("agent-console:git:rebase-branch"), + resetCurrentBranchToCommit: invoke("agent-console:git:reset-current-branch-to-commit"), + revertCommit: invoke("agent-console:git:revert-commit"), + runInteractiveRebase: invoke("agent-console:git:run-interactive-rebase"), + showRepositoryAtRevision: invoke("agent-console:git:show-repository-at-revision"), + stage: invoke("agent-console:git:stage"), + undoCommit: invoke("agent-console:git:undo-commit"), + unstage: invoke("agent-console:git:unstage"), + viewCommitInBrowser: invoke("agent-console:git:view-commit-in-browser") + }, + shell: { + getEnvironment: invoke("agent-console:environment"), + showItemInFolder: invoke("agent-console:shell:show-item-in-folder"), + startThread: invoke("agent-console:start-thread"), + sendMessage: invoke("agent-console:send-message"), + runCommand: invoke("agent-console:run-command"), + updateSetting: invoke("agent-console:update-setting") + }, + settings: { + get: invoke("agent-console:settings:get"), + resetSpotlightShortcut: invoke("agent-console:settings:reset-spotlight-shortcut"), + setAgentEnvironment: invoke("agent-console:settings:set-agent-environment"), + setAgentProviderEnabled: invoke("agent-console:settings:set-agent-provider-enabled"), + setAgentProviders: invoke("agent-console:settings:set-agent-providers"), + setSubagents: invoke("agent-console:settings:set-subagents"), + setSpotlightShortcut: invoke("agent-console:settings:set-spotlight-shortcut") + }, + plugins: { + get: invoke("agent-console:plugins:get"), + reload: invoke("agent-console:plugins:reload"), + install: invoke("agent-console:plugins:install"), + update: invoke("agent-console:plugins:update"), + uninstall: invoke("agent-console:plugins:uninstall"), + enable: invoke("agent-console:plugins:enable"), + disable: invoke("agent-console:plugins:disable"), + grantPermissions: invoke("agent-console:plugins:grant-permissions"), + revokePermissions: invoke("agent-console:plugins:revoke-permissions"), + setConfiguration: invoke("agent-console:plugins:set-configuration"), + onCommand: on("agent-console:plugins:command") + }, + smallWindow: { + close: () => { + window.close(); + return Promise.resolve({ success: true }); + }, + create: openSmallWindow, + getState: getSmallWindowState, + notifyOpeningTransitionReady: getSmallWindowState, + onOpeningTransitionStart: () => () => {}, + setPinned: setSmallWindowPinned + }, + voice: { transcribeAudio: invoke("agent-console:voice:transcribe") }, + terminal: { + activateSession: invoke("agent-console:terminal:activate-session"), + closeSession: invoke("agent-console:terminal:close-session"), + createSession: invoke("agent-console:terminal:create-session"), + getBacklog: invoke("agent-console:terminal:get-backlog"), + getState: invoke("agent-console:terminal:get-state"), + killSession: invoke("agent-console:terminal:kill-session"), + onOutput: on("agent-console:terminal:output"), + onStateChange: on("agent-console:terminal:state-changed"), + resize: invoke("agent-console:terminal:resize"), + write: invoke("agent-console:terminal:write") + }, + toolhub: { + clearCache: invoke("toolhub:clear-cache"), + getSettings: invoke("toolhub:get-settings"), + installServer: invoke("toolhub:install-server"), + listServers: invoke("toolhub:list-servers"), + listTools: invoke("toolhub:list-tools"), + removeServer: invoke("toolhub:remove-server"), + refresh: invoke("toolhub:refresh"), + setBuiltinMcpServerEnabled: invoke("toolhub:set-builtin-mcp-server-enabled"), + setEnabled: invoke("toolhub:set-enabled"), + setLlmConfig: invoke("toolhub:set-llm-config"), + updateServer: invoke("toolhub:update-server") + } + }; +})(); +`; +} + +function directoryIndexFile(filePath) { + try { + if (!fs.statSync(filePath).isDirectory()) { + return ""; + } + const indexFile = path.join(filePath, "index.html"); + return fileExists(indexFile) ? indexFile : ""; + } catch { + return ""; + } +} + +function shouldFallbackToHome(relativeFilePath) { + return !relativeFilePath || !path.extname(relativeFilePath); +} + +function headersForFile(filePath) { + return { + "cache-control": isImmutableAsset(filePath) ? "public, max-age=31536000, immutable" : "no-cache", + "content-type": contentType(filePath) + }; +} + +function contentType(filePath) { + const extension = path.extname(filePath).toLowerCase(); + if (extension === ".html") return "text/html; charset=utf-8"; + if (extension === ".js" || extension === ".mjs") return "text/javascript; charset=utf-8"; + if (extension === ".css") return "text/css; charset=utf-8"; + if (extension === ".json") return "application/json; charset=utf-8"; + if (extension === ".svg") return "image/svg+xml"; + if (extension === ".png") return "image/png"; + if (extension === ".jpg" || extension === ".jpeg") return "image/jpeg"; + if (extension === ".webp") return "image/webp"; + if (extension === ".ico") return "image/x-icon"; + if (extension === ".woff") return "font/woff"; + if (extension === ".woff2") return "font/woff2"; + return "application/octet-stream"; +} + +function isImmutableAsset(filePath) { + return path.normalize(filePath).split(path.sep).includes("assets"); +} + +function sendText(response, statusCode, message) { + response.writeHead(statusCode, { "content-type": "text/plain; charset=utf-8" }); + response.end(`${message}\n`); +} + +function safeFilePath(root, candidate) { + const resolvedRoot = path.resolve(root); + const resolvedCandidate = path.resolve(candidate); + const relativePath = path.relative(resolvedRoot, resolvedCandidate); + if (relativePath.startsWith("..") || path.isAbsolute(relativePath)) return ""; + return resolvedCandidate; +} + +function fileExists(filePath) { + try { + return fs.statSync(filePath).isFile(); + } catch { + return false; + } +} + +function rendererDistExists(rendererRoot) { + return fileExists(path.join(rendererRoot, "pages", "home", "index.html")); +} + +function buildRuntimeConfig(config, options) { + const gatewayUrl = trimTrailingSlash(options.gatewayUrl || configuredGatewayUrl(config)); + const openAiBaseUrl = trimTrailingSlash(options.openAiBaseUrl || `${gatewayUrl}/v1`); + const models = availableGatewayModels(config); + const defaultModel = options.defaultModel || + stringValue(config?.Router?.default) || + models.find((model) => model.isDefault)?.model || + models[0]?.model || + ""; + + return { + apiKey: options.apiKey || configuredGatewayApiKey(config), + claudeCode: { + defaultModel, + models + }, + codex: { + defaultModel, + modelCatalogFile: options.modelCatalogFile, + models + }, + defaultModel, + gatewayUrl, + models, + openAiBaseUrl + }; +} + +function ensureAgentConsoleCodexRuntime(ctx, options, runtimeConfig) { + if (options.codexMiddleware === false) { + return { command: "", env: {}, runtimeFile: "" }; + } + + const providerId = "claude-code-router"; + const binDir = path.join(ctx.paths.pluginDataDir, "bin"); + const codexHome = path.resolve(stringValue(options.codexHome) || path.join(ctx.paths.pluginDataDir, "codex-home")); + const configFile = path.join(codexHome, "config.toml"); + const runtimeFile = path.join(binDir, "ccr-codex-cli-middleware.js"); + const commandFile = path.join(binDir, process.platform === "win32" ? "ccr-agent-console-codex.cmd" : "ccr-agent-console-codex"); + const realCodexCli = stringValue(options.codexCliPath || options.codexCommand) || "codex"; + const model = stringValue(runtimeConfig.codex?.defaultModel) || stringValue(runtimeConfig.defaultModel) || runtimeConfig.models?.[0]?.model || ""; + const openAiBaseUrl = trimTrailingSlash(stringValue(runtimeConfig.openAiBaseUrl) || `${stringValue(runtimeConfig.gatewayUrl)}/v1`); + const apiKey = stringValue(runtimeConfig.apiKey); + const modelCatalogFile = stringValue(runtimeConfig.codex?.modelCatalogFile) || path.join(ctx.paths.pluginDataDir, "ccr-codex-model-catalog.json"); + + fs.mkdirSync(binDir, { recursive: true }); + fs.mkdirSync(codexHome, { recursive: true, mode: 0o700 }); + writeTextIfChanged(configFile, agentConsoleCodexConfigToml({ + apiKey, + baseUrl: openAiBaseUrl, + model, + modelCatalogFile, + providerId + })); + try { + fs.chmodSync(configFile, 0o600); + } catch { + // Best effort on filesystems that do not support chmod. + } + + const runtimeScript = agentConsoleCodexMiddlewareRuntimeScript(); + writeTextIfChanged(runtimeFile, runtimeScript); + writeTextIfChanged(commandFile, process.platform === "win32" + ? agentConsoleCodexMiddlewareCmd({ + codexHome, + model, + modelCatalogFile, + providerId, + realCodexCli, + runtimeFile + }) + : agentConsoleCodexMiddlewareShell({ + codexHome, + model, + modelCatalogFile, + providerId, + realCodexCli, + runtimeFile + })); + try { + fs.chmodSync(runtimeFile, 0o755); + fs.chmodSync(commandFile, 0o755); + } catch { + // Best effort on filesystems that do not support chmod. + } + + return { + command: commandFile, + env: { + CODEX_HOME: codexHome, + CCR_CODEX_MODEL_CATALOG_FILE: modelCatalogFile, + CCR_CODEX_MODEL_PROVIDER: providerId, + CCR_CODEX_PROFILE: providerId, + CCR_CODEX_PROFILE_CONFIG_FORMAT: "separate_profile_files", + CCR_CODEX_REMOTE_FRONTEND_MODE: "app", + CCR_PROFILE_SCOPE: "ccr", + CODEXL_CODEX_MODEL_CATALOG_FILE: modelCatalogFile, + CODEXL_CODEX_MODEL_PROVIDER: providerId, + CODEXL_CODEX_PROFILE: providerId, + CODEXL_CODEX_PROFILE_CONFIG_FORMAT: "separate_profile_files" + }, + runtimeFile + }; +} + +function ensureAgentConsoleClaudeCodeRuntime(ctx, options, runtimeConfig, sharedRuntimeFile) { + if (options.claudeCodeMiddleware === false || options.claudeMiddleware === false) { + return { command: "", env: {} }; + } + + const binDir = path.join(ctx.paths.pluginDataDir, "bin"); + const settingsDir = path.join(ctx.paths.pluginDataDir, "claude-code", "claude"); + const settingsFile = path.join(settingsDir, "settings.json"); + const runtimeFile = ensureAgentConsoleCliMiddlewareRuntime(ctx, sharedRuntimeFile); + const apiKeyHelperFile = path.join(binDir, process.platform === "win32" ? "ccr-agent-console-claude-code-api-key.cmd" : "ccr-agent-console-claude-code-api-key"); + const commandFile = path.join(binDir, process.platform === "win32" ? "ccr-agent-console-claude-code.cmd" : "ccr-agent-console-claude-code"); + const realClaudeCli = stringValue(options.claudeCodeCommand || options.claudeCodeCliPath || options.claudeCommand || options.claudeCliPath) || "claude"; + const model = stringValue(runtimeConfig.claudeCode?.defaultModel) || stringValue(runtimeConfig.defaultModel) || runtimeConfig.models?.[0]?.model || ""; + const gatewayUrl = trimTrailingSlash(stringValue(runtimeConfig.gatewayUrl)); + const apiKey = stringValue(runtimeConfig.apiKey); + const baseEnv = agentConsoleClaudeCodeBaseEnv({ gatewayUrl, model, settingsDir }); + const remoteEndpoint = `${gatewayUrl}/__ccr/remote`; + + fs.mkdirSync(binDir, { recursive: true }); + fs.mkdirSync(settingsDir, { recursive: true, mode: 0o700 }); + writeTextIfChanged(settingsFile, agentConsoleClaudeCodeSettingsJson({ + apiKeyHelperFile, + env: baseEnv + })); + writeTextIfChanged(apiKeyHelperFile, process.platform === "win32" + ? agentConsoleApiKeyHelperCmd(apiKey) + : agentConsoleApiKeyHelperShell(apiKey)); + writeTextIfChanged(commandFile, process.platform === "win32" + ? agentConsoleClaudeCodeMiddlewareCmd({ + apiKeyHelperFile, + baseEnv, + realClaudeCli, + remoteEndpoint, + runtimeFile + }) + : agentConsoleClaudeCodeMiddlewareShell({ + apiKeyHelperFile, + baseEnv, + realClaudeCli, + remoteEndpoint, + runtimeFile + })); + try { + fs.chmodSync(settingsFile, 0o600); + fs.chmodSync(apiKeyHelperFile, 0o700); + fs.chmodSync(commandFile, 0o755); + } catch { + // Best effort on filesystems that do not support chmod. + } + + return { + command: commandFile, + env: { + ...baseEnv, + CCR_CLAUDE_CODE_WRAPPER: "1", + CCR_REAL_CLAUDE_CODE_BIN: realClaudeCli, + CODEXL_CLAUDE_CODE_BIN: realClaudeCli, + CCR_REMOTE_SYNC_API_KEY_HELPER: apiKeyHelperFile, + CCR_REMOTE_SYNC_ENABLED: "1", + CCR_REMOTE_SYNC_ENDPOINT: remoteEndpoint, + CCR_REMOTE_SYNC_PROFILE_ID: "agent-console-claude-code", + CCR_REMOTE_SYNC_PROFILE_NAME: "Agent Console Claude Code" + } + }; +} + +function ensureAgentConsoleCliMiddlewareRuntime(ctx, runtimeFile) { + const binDir = path.join(ctx.paths.pluginDataDir, "bin"); + const file = stringValue(runtimeFile) || path.join(binDir, "ccr-codex-cli-middleware.js"); + fs.mkdirSync(path.dirname(file), { recursive: true }); + writeTextIfChanged(file, agentConsoleCodexMiddlewareRuntimeScript()); + try { + fs.chmodSync(file, 0o755); + } catch { + // Best effort on filesystems that do not support chmod. + } + return file; +} + +function agentConsoleClaudeCodeBaseEnv({ gatewayUrl, model, settingsDir }) { + const env = { + ANTHROPIC_API_BASE_URL: gatewayUrl, + ANTHROPIC_BASE_URL: gatewayUrl, + CLAUDE_AGENT_API_BASE_URL: gatewayUrl, + CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY: "1", + CLAUDE_CONFIG_DIR: settingsDir + }; + if (model) { + env.ANTHROPIC_MODEL = model; + env.CCR_CLAUDE_CODE_MODEL = model; + env.CODEXL_CLAUDE_CODE_MODEL = model; + } + const timezoneEnv = agentConsoleClaudeCodeTimezoneEnv(); + return Object.keys(timezoneEnv).length ? { ...env, ...timezoneEnv } : env; +} + +function agentConsoleClaudeCodeSettingsJson({ apiKeyHelperFile, env }) { + return `${JSON.stringify({ + apiKeyHelper: process.platform === "win32" ? `"${apiKeyHelperFile}"` : apiKeyHelperFile, + env + }, null, 2)}\n`; +} + +function agentConsoleApiKeyHelperShell(apiKey) { + return [ + "#!/bin/sh", + `printf '%s\\n' ${shellSingleQuote(apiKey)}`, + "" + ].join("\n"); +} + +function agentConsoleApiKeyHelperCmd(apiKey) { + return [ + "@echo off", + `echo ${cmdValue(apiKey)}`, + "" + ].join("\r\n"); +} + +function agentConsoleClaudeCodeMiddlewareShell({ apiKeyHelperFile, baseEnv, realClaudeCli, remoteEndpoint, runtimeFile }) { + return [ + "#!/bin/sh", + ...Object.entries(baseEnv).map(([key, value]) => `export ${key}=${shellSingleQuote(value)}`), + "export CCR_CLAUDE_CODE_WRAPPER=1", + `export CCR_REAL_CLAUDE_CODE_BIN=${shellSingleQuote(realClaudeCli)}`, + `export CODEXL_CLAUDE_CODE_BIN=${shellSingleQuote(realClaudeCli)}`, + "if [ -z \"${CCR_PROFILE_SURFACE:-}\" ]; then CCR_PROFILE_SURFACE=app; fi", + "export CCR_PROFILE_SURFACE", + "if [ -z \"${CCR_REMOTE_SYNC_ENABLED:-}\" ]; then CCR_REMOTE_SYNC_ENABLED=1; fi", + `if [ -z "\${CCR_REMOTE_SYNC_ENDPOINT:-}" ]; then CCR_REMOTE_SYNC_ENDPOINT=${shellSingleQuote(remoteEndpoint)}; fi`, + `if [ -z "\${CCR_REMOTE_SYNC_API_KEY_HELPER:-}" ]; then CCR_REMOTE_SYNC_API_KEY_HELPER=${shellSingleQuote(apiKeyHelperFile)}; fi`, + "if [ -z \"${CCR_REMOTE_SYNC_PROFILE_ID:-}\" ]; then CCR_REMOTE_SYNC_PROFILE_ID=agent-console-claude-code; fi", + "if [ -z \"${CCR_REMOTE_SYNC_PROFILE_NAME:-}\" ]; then CCR_REMOTE_SYNC_PROFILE_NAME='Agent Console Claude Code'; fi", + "export CCR_REMOTE_SYNC_ENABLED CCR_REMOTE_SYNC_ENDPOINT CCR_REMOTE_SYNC_API_KEY_HELPER CCR_REMOTE_SYNC_PROFILE_ID CCR_REMOTE_SYNC_PROFILE_NAME", + "if [ -n \"${CCR_NODE_BIN:-}\" ]; then", + ` exec "$CCR_NODE_BIN" ${shellSingleQuote(runtimeFile)} "$@"`, + "fi", + "if command -v node >/dev/null 2>&1; then", + ` exec node ${shellSingleQuote(runtimeFile)} "$@"`, + "fi", + `ELECTRON_RUN_AS_NODE=1 exec ${shellSingleQuote(process.execPath)} ${shellSingleQuote(runtimeFile)} "$@"`, + "" + ].join("\n"); +} + +function agentConsoleClaudeCodeMiddlewareCmd({ apiKeyHelperFile, baseEnv, realClaudeCli, remoteEndpoint, runtimeFile }) { + const quotedRuntime = cmdQuote(runtimeFile); + const quotedHost = cmdQuote(process.execPath); + return [ + "@echo off", + ...Object.entries(baseEnv).map(([key, value]) => cmdSetLine(key, value)), + cmdSetLine("CCR_CLAUDE_CODE_WRAPPER", "1"), + cmdSetLine("CCR_REAL_CLAUDE_CODE_BIN", realClaudeCli), + cmdSetLine("CODEXL_CLAUDE_CODE_BIN", realClaudeCli), + `if not defined CCR_PROFILE_SURFACE ${cmdSetLine("CCR_PROFILE_SURFACE", "app")}`, + `if not defined CCR_REMOTE_SYNC_ENABLED ${cmdSetLine("CCR_REMOTE_SYNC_ENABLED", "1")}`, + `if not defined CCR_REMOTE_SYNC_ENDPOINT ${cmdSetLine("CCR_REMOTE_SYNC_ENDPOINT", remoteEndpoint)}`, + `if not defined CCR_REMOTE_SYNC_API_KEY_HELPER ${cmdSetLine("CCR_REMOTE_SYNC_API_KEY_HELPER", apiKeyHelperFile)}`, + `if not defined CCR_REMOTE_SYNC_PROFILE_ID ${cmdSetLine("CCR_REMOTE_SYNC_PROFILE_ID", "agent-console-claude-code")}`, + `if not defined CCR_REMOTE_SYNC_PROFILE_NAME ${cmdSetLine("CCR_REMOTE_SYNC_PROFILE_NAME", "Agent Console Claude Code")}`, + "if defined CCR_NODE_BIN (", + ` "%CCR_NODE_BIN%" ${quotedRuntime} %*`, + " exit /b %ERRORLEVEL%", + ")", + "where node >nul 2>nul", + "if %ERRORLEVEL%==0 (", + ` node ${quotedRuntime} %*`, + " exit /b %ERRORLEVEL%", + ")", + "set \"ELECTRON_RUN_AS_NODE=1\"", + `${quotedHost} ${quotedRuntime} %*`, + "exit /b %ERRORLEVEL%", + "" + ].join("\r\n"); +} + +function agentConsoleClaudeCodeTimezoneEnv() { + let timeZone = ""; + try { + timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone || ""; + } catch { + return {}; + } + const normalized = timeZone.trim().toLowerCase(); + return [ + "asia/chongqing", + "asia/chungking", + "asia/harbin", + "asia/kashgar", + "asia/shanghai", + "asia/urumqi", + "china standard time", + "prc" + ].includes(normalized) + ? { TZ: "UTC" } + : {}; +} + +function agentConsoleCodexConfigToml({ apiKey, baseUrl, model, modelCatalogFile, providerId }) { + return [ + `model_provider = ${tomlString(providerId)}`, + `model = ${tomlString(model)}`, + `model_catalog_json = ${tomlString(modelCatalogFile)}`, + "", + `[model_providers.${tomlKey(providerId)}]`, + `name = ${tomlString("Claude Code Router")}`, + `base_url = ${tomlString(baseUrl)}`, + `experimental_bearer_token = ${tomlString(apiKey)}`, + 'wire_api = "responses"', + "" + ].join("\n"); +} + +function agentConsoleCodexMiddlewareShell({ codexHome, model, modelCatalogFile, providerId, realCodexCli, runtimeFile }) { + return [ + "#!/bin/sh", + `export CODEX_HOME=${shellSingleQuote(codexHome)}`, + "if [ -z \"${CCR_REAL_CODEX_CLI_PATH:-}\" ]; then", + ` CCR_REAL_CODEX_CLI_PATH=${shellSingleQuote(realCodexCli)}`, + "fi", + "export CCR_REAL_CODEX_CLI_PATH", + `export CCR_CODEX_PROFILE=${shellSingleQuote(providerId)}`, + `export CCR_CODEX_MODEL=${shellSingleQuote(model)}`, + `export CCR_CODEX_MODEL_CATALOG_FILE=${shellSingleQuote(modelCatalogFile)}`, + `export CCR_CODEX_MODEL_PROVIDER=${shellSingleQuote(providerId)}`, + "export CCR_CODEX_PROFILE_CONFIG_FORMAT=separate_profile_files", + "export CCR_PROFILE_SCOPE=ccr", + "export CCR_CODEX_REMOTE_FRONTEND_MODE=app", + "if [ -z \"${CODEXL_REAL_CODEX_CLI_PATH:-}\" ]; then", + " CODEXL_REAL_CODEX_CLI_PATH=$CCR_REAL_CODEX_CLI_PATH", + "fi", + "export CODEXL_REAL_CODEX_CLI_PATH", + `export CODEXL_CODEX_PROFILE=${shellSingleQuote(providerId)}`, + `export CODEXL_CODEX_MODEL=${shellSingleQuote(model)}`, + `export CODEXL_CODEX_MODEL_CATALOG_FILE=${shellSingleQuote(modelCatalogFile)}`, + `export CODEXL_CODEX_MODEL_PROVIDER=${shellSingleQuote(providerId)}`, + "export CODEXL_CODEX_PROFILE_CONFIG_FORMAT=separate_profile_files", + "export CODEXL_CODEX_CORE_MODE=app", + "if [ -n \"${CCR_NODE_BIN:-}\" ]; then", + ` exec "$CCR_NODE_BIN" ${shellSingleQuote(runtimeFile)} "$@"`, + "fi", + "if command -v node >/dev/null 2>&1; then", + ` exec node ${shellSingleQuote(runtimeFile)} "$@"`, + "fi", + `ELECTRON_RUN_AS_NODE=1 exec ${shellSingleQuote(process.execPath)} ${shellSingleQuote(runtimeFile)} "$@"`, + "" + ].join("\n"); +} + +function agentConsoleCodexMiddlewareCmd({ codexHome, model, modelCatalogFile, providerId, realCodexCli, runtimeFile }) { + const quotedRuntime = cmdQuote(runtimeFile); + const quotedHost = cmdQuote(process.execPath); + return [ + "@echo off", + cmdSetLine("CODEX_HOME", codexHome), + `if not defined CCR_REAL_CODEX_CLI_PATH ${cmdSetLine("CCR_REAL_CODEX_CLI_PATH", realCodexCli)}`, + cmdSetLine("CCR_CODEX_PROFILE", providerId), + cmdSetLine("CCR_CODEX_MODEL", model), + cmdSetLine("CCR_CODEX_MODEL_CATALOG_FILE", modelCatalogFile), + cmdSetLine("CCR_CODEX_MODEL_PROVIDER", providerId), + cmdSetLine("CCR_CODEX_PROFILE_CONFIG_FORMAT", "separate_profile_files"), + cmdSetLine("CCR_PROFILE_SCOPE", "ccr"), + cmdSetLine("CCR_CODEX_REMOTE_FRONTEND_MODE", "app"), + "if not defined CODEXL_REAL_CODEX_CLI_PATH set \"CODEXL_REAL_CODEX_CLI_PATH=%CCR_REAL_CODEX_CLI_PATH%\"", + cmdSetLine("CODEXL_CODEX_PROFILE", providerId), + cmdSetLine("CODEXL_CODEX_MODEL", model), + cmdSetLine("CODEXL_CODEX_MODEL_CATALOG_FILE", modelCatalogFile), + cmdSetLine("CODEXL_CODEX_MODEL_PROVIDER", providerId), + cmdSetLine("CODEXL_CODEX_PROFILE_CONFIG_FORMAT", "separate_profile_files"), + cmdSetLine("CODEXL_CODEX_CORE_MODE", "app"), + "if defined CCR_NODE_BIN (", + ` "%CCR_NODE_BIN%" ${quotedRuntime} %*`, + " exit /b %ERRORLEVEL%", + ")", + "where node >nul 2>nul", + "if %ERRORLEVEL%==0 (", + ` node ${quotedRuntime} %*`, + " exit /b %ERRORLEVEL%", + ")", + "set \"ELECTRON_RUN_AS_NODE=1\"", + `${quotedHost} ${quotedRuntime} %*`, + "exit /b %ERRORLEVEL%", + "" + ].join("\r\n"); +} + +function agentConsoleCodexMiddlewareRuntimeScript() { + const moduleRuntime = agentConsoleCodexMiddlewareRuntimeFromModule(); + if (moduleRuntime) return moduleRuntime; + + const source = fs.readFileSync(agentConsoleCodexMiddlewareSourceFile(), "utf8"); + const marker = "return String.raw`"; + const start = source.indexOf(marker); + if (start < 0) { + throw new Error("Unable to locate Codex middleware runtime template."); + } + const templateStart = start + marker.length; + for (let index = templateStart; index < source.length; index += 1) { + if (source[index] !== "`" || isEscapedTemplateBacktick(source, index)) continue; + return source.slice(templateStart, index).replace(/\\`/g, "`"); + } + throw new Error("Unable to read Codex middleware runtime template."); +} + +function agentConsoleCodexMiddlewareRuntimeFromModule() { + const candidates = [ + "@ccr/core/agents/codex/cli-middleware-runtime", + "@claude-code-router/core/agents/codex/cli-middleware-runtime" + ]; + for (const candidate of candidates) { + try { + const runtimeModule = require(candidate); + if (typeof runtimeModule?.codexCliMiddlewareRuntimeScript !== "function") continue; + const script = runtimeModule.codexCliMiddlewareRuntimeScript(); + if (script) return script; + } catch { + // The marketplace plugin can run without core package subpath exports. + } + } + return ""; +} + +function agentConsoleCodexMiddlewareSourceFile() { + const candidates = [ + stringValue(process.env.CCR_CODEX_MIDDLEWARE_RUNTIME_SOURCE), + path.resolve(__dirname, "../../../packages/core/src/agents/codex/cli-middleware-runtime.ts"), + path.resolve(process.cwd(), "packages/core/src/agents/codex/cli-middleware-runtime.ts") + ].filter(Boolean); + for (const candidate of candidates) { + if (fs.existsSync(candidate)) return candidate; + } + throw new Error("Codex middleware runtime source was not found."); +} + +function isEscapedTemplateBacktick(source, index) { + let slashCount = 0; + for (let cursor = index - 1; cursor >= 0 && source[cursor] === "\\"; cursor -= 1) { + slashCount += 1; + } + return slashCount % 2 === 1; +} + +function tomlString(value) { + return JSON.stringify(String(value ?? "")); +} + +function tomlKey(value) { + const key = String(value || "").trim(); + return /^[A-Za-z0-9_]+$/.test(key) ? key : tomlString(key); +} + +function cmdSetLine(key, value) { + return `set "${key}=${cmdValue(value)}"`; +} + +function cmdValue(value) { + return String(value ?? "").replace(/"/g, '""'); +} + +function cmdQuote(value) { + return `"${cmdValue(value)}"`; +} + +function buildCodexModelCatalog(models) { + return { + models: models.map((model, index) => { + const reasoning = codexModelReasoningProfile(model.model); + const contextWindowTokens = readCatalogPositiveInteger(model.contextWindowTokens || model.context_window_tokens) || + modelContextWindowTokens(model.model); + return { + additional_speed_tiers: [], + apply_patch_tool_type: "freeform", + availability_nux: null, + base_instructions: "You are Codex, a coding agent.", + context_window: contextWindowTokens, + default_verbosity: "low", + defaultReasoningEffort: reasoning.defaultReasoningEffort || null, + default_reasoning_level: reasoning.defaultReasoningLevel, + default_reasoning_effort: reasoning.defaultReasoningEffort || null, + default_reasoning_summary: "none", + description: `CCR gateway model ${model.model}`, + displayName: model.displayName || model.model, + display_name: model.displayName || model.model, + effective_context_window_percent: 95, + experimental_supported_tools: [], + id: model.model, + input_modalities: ["text", "image"], + max_context_window: contextWindowTokens, + model: model.model, + priority: index, + service_tiers: [], + shell_type: "shell_command", + slug: model.model, + support_verbosity: true, + supported_in_api: true, + supportedReasoningEfforts: reasoning.supportedReasoningLevels.map(reasoningEffortOption), + supported_reasoning_efforts: reasoning.supportedReasoningEfforts, + supported_reasoning_levels: reasoning.supportedReasoningLevels, + supports_image_detail_original: true, + supports_parallel_tool_calls: true, + supports_reasoning_summaries: reasoning.supportsReasoning, + supports_search_tool: false, + truncation_policy: { mode: "tokens", limit: 10000 }, + upgrade: null, + visibility: "list", + web_search_tool_type: "text" + }; + }) + }; +} + +function reasoningEffortOption(level) { + return { + description: level.description, + reasoningEffort: level.effort, + reasoning_effort: level.effort + }; +} + +function availableGatewayModels(config) { + const baseEntries = []; + for (const provider of Array.isArray(config?.Providers) ? config.Providers : []) { + const providerName = stringValue(provider.name || provider.id || provider.provider); + if (!providerName || !Array.isArray(provider.models)) continue; + for (const rawModel of provider.models) { + const modelName = stringValue(rawModel); + if (!modelName) continue; + const id = `${providerName}/${modelName}`; + baseEntries.push(runtimeModelEntry(id, { + displayName: displayModelName(provider, modelName, id), + isDefault: id === stringValue(config?.Router?.default), + model: id + })); + } + } + + const virtualEntries = []; + for (const profile of Array.isArray(config?.virtualModelProfiles) ? config.virtualModelProfiles : []) { + if (!isVisibleVirtualProfile(profile)) continue; + const displayName = stringValue(profile.displayName || profile.key || profile.id); + for (const entry of baseEntries) { + for (const prefix of normalizeStringArray(profile.match?.prefixes) || []) { + const model = `${providerNameFromModel(entry.model)}/${prefix}${modelNameFromModel(entry.model)}`; + virtualEntries.push(runtimeModelEntry(model, { + displayName: displayName || `${prefix}${entry.displayName}`, + model, + reasoningModel: entry.model + })); + } + for (const suffix of normalizeStringArray(profile.match?.suffixes) || []) { + const model = `${providerNameFromModel(entry.model)}/${modelNameFromModel(entry.model)}${suffix}`; + virtualEntries.push(runtimeModelEntry(model, { + displayName: displayName || `${entry.displayName}${suffix}`, + model, + reasoningModel: entry.model + })); + } + } + for (const alias of normalizeStringArray(profile.match?.exactAliases) || []) { + const model = alias.toLowerCase().startsWith("fusion/") ? alias : `Fusion/${alias}`; + virtualEntries.push(runtimeModelEntry(model, { + displayName: displayName || alias, + model + })); + } + } + + return uniqueModels([...baseEntries, ...virtualEntries]); +} + +function runtimeModelEntry(model, options = {}) { + const contextModel = options.contextModel || options.reasoningModel || model; + const reasoning = codexModelReasoningProfile(options.reasoningModel || model); + const contextWindowTokens = modelContextWindowTokens(contextModel); + return { + contextWindowTokens, + context_window_tokens: contextWindowTokens, + displayName: options.displayName || model, + id: options.id || model, + isDefault: options.isDefault === true, + model, + ...(reasoning.defaultReasoningEffort ? { defaultReasoningEffort: reasoning.defaultReasoningEffort } : {}), + supportedReasoningEfforts: reasoning.supportedReasoningEfforts, + supportedSpeeds: [] + }; +} + +function displayModelName(provider, modelName, fallback) { + const displayNames = isRecord(provider.modelDisplayNames) ? provider.modelDisplayNames : {}; + return stringValue(displayNames[modelName]) || fallback; +} + +function codexModelReasoningProfile(model) { + const entry = findModelCatalogEntry(model); + const capabilities = isRecord(entry?.capabilities) ? entry.capabilities : {}; + const effortConfig = modelCatalogReasoningEffortConfig(entry, providerNameFromModel(model)); + const fallbackEfforts = effortConfig.efforts.length === 0 + ? openAiGptReasoningFallbackEfforts(model) + : []; + const reasoningConfig = fallbackEfforts.length > 0 + ? { ...effortConfig, defaultEffort: "medium", efforts: fallbackEfforts, supportsReasoning: true } + : effortConfig; + const supportsReasoning = capabilities.reasoning === true || reasoningConfig.supportsReasoning; + return { + defaultReasoningEffort: defaultReasoningEffort(reasoningConfig), + defaultReasoningLevel: defaultReasoningLevel(reasoningConfig), + supportedReasoningEfforts: reasoningConfig.efforts, + supportedReasoningLevels: reasoningConfig.efforts.map(reasoningLevel), + supportsReasoning + }; +} + +function modelContextWindowTokens(model) { + return modelCatalogMaxInputTokens(findModelCatalogEntry(model)) || DEFAULT_CODEX_CONTEXT_WINDOW_TOKENS; +} + +function modelCatalogMaxInputTokens(entry) { + const limits = isRecord(entry?.limits) ? entry.limits : {}; + return Math.max( + 0, + readCatalogPositiveInteger(limits.contextTokens), + readCatalogPositiveInteger(limits.inputTokens) + ); +} + +function openAiGptReasoningFallbackEfforts(model) { + const modelName = normalizeModelCatalogToken(modelNameFromModel(model)); + if (openAiGptSupportsXHighFallback(modelName)) return OPENAI_EXTENDED_REASONING_EFFORTS; + return /^gpt-[0-9]/.test(modelName) || /^o[0-9]/.test(modelName) + ? OPENAI_REASONING_EFFORTS + : []; +} + +function openAiGptSupportsXHighFallback(modelName) { + const match = modelName.match(/^gpt-(\d+)(?:[.-](\d+))?/); + if (!match) return false; + const major = Number.parseInt(match[1], 10); + const minor = Number.parseInt(match[2] || "0", 10); + return major > 5 || (major === 5 && minor >= 6); +} + +function modelCatalogReasoningEffortConfig(entry, providerName) { + if (!entry) { + return { defaultEffort: "", efforts: [], supportsReasoning: false }; + } + + const records = sourceRecordsForProvider(entry.sourceRecords, providerName); + const metadataValues = [ + entry.metadata, + ...records.map((record) => record.metadata) + ].filter(isRecord); + + let defaultEffort = ""; + let supportsReasoning = false; + const efforts = []; + for (const metadata of metadataValues) { + const config = reasoningConfigFromMetadata(metadata); + if (config.supportsReasoning) { + supportsReasoning = true; + } + if (!defaultEffort && config.defaultEffort) { + defaultEffort = config.defaultEffort; + } + for (const effort of config.efforts) { + if (!efforts.includes(effort)) { + efforts.push(effort); + } + } + } + + return { defaultEffort, efforts, supportsReasoning }; +} + +function sourceRecordsForProvider(records, providerName) { + const normalizedProviderName = normalizeModelCatalogToken(providerName); + if (!normalizedProviderName) return []; + return records.filter((record) => { + const provider = normalizeModelCatalogToken(record.provider); + const displayName = normalizeModelCatalogToken(record.providerName); + return [provider, displayName].some((value) => + value && + ( + value === normalizedProviderName || + value.includes(normalizedProviderName) || + normalizedProviderName.includes(value) + ) + ); + }); +} + +function reasoningConfigFromMetadata(metadata) { + const efforts = []; + let defaultEffort = ""; + let supportsReasoning = false; + + const reasoning = isRecord(metadata.reasoning) ? metadata.reasoning : undefined; + if (reasoning) { + supportsReasoning = true; + for (const effort of normalizeReasoningEfforts(reasoning.supported_efforts)) { + if (!efforts.includes(effort)) { + efforts.push(effort); + } + } + defaultEffort = normalizeReasoningEffort(reasoning.default_effort); + } + + const options = Array.isArray(metadata.reasoningOptions) ? metadata.reasoningOptions : []; + for (const option of options) { + if (!isRecord(option)) continue; + const type = stringValue(option.type).toLowerCase(); + if (type === "toggle" || type === "budget_tokens") { + supportsReasoning = true; + } + if (type !== "effort") continue; + supportsReasoning = true; + for (const effort of normalizeReasoningEfforts(option.values)) { + if (!efforts.includes(effort)) { + efforts.push(effort); + } + } + } + + return { defaultEffort, efforts, supportsReasoning }; +} + +function normalizeReasoningEfforts(value) { + if (!Array.isArray(value)) return []; + return value + .map(normalizeReasoningEffort) + .filter(Boolean) + .filter((effort, index, efforts) => efforts.indexOf(effort) === index); +} + +function normalizeReasoningEffort(value) { + const normalized = stringValue(value).toLowerCase().replace(/[_\s-]+/g, ""); + if (!normalized || normalized === "default") return ""; + if (normalized === "none" || normalized === "off" || normalized === "disabled") return "none"; + if (normalized === "minimal") return "minimal"; + if (normalized === "low") return "low"; + if (normalized === "medium") return "medium"; + if (normalized === "high") return "high"; + if (normalized === "xhigh" || normalized === "extrahigh" || normalized === "max") return "xhigh"; + return ""; +} + +function defaultReasoningLevel(config) { + if (!config.defaultEffort || config.defaultEffort === "none") return null; + return config.efforts.includes(config.defaultEffort) ? config.defaultEffort : null; +} + +function defaultReasoningEffort(config) { + return defaultReasoningLevel(config) || ""; +} + +function reasoningLevel(effort) { + const descriptions = { + high: "High reasoning", + low: "Low reasoning", + medium: "Medium reasoning", + minimal: "Minimal reasoning", + none: "No reasoning", + xhigh: "Extra high reasoning" + }; + return { + effort, + description: descriptions[effort] || `${effort} reasoning` + }; +} + +function findModelCatalogEntry(model) { + const index = loadModelCatalogIndex(); + const candidates = modelCatalogLookupKeys(model); + for (const key of candidates) { + const entry = index.byKey.get(key); + if (entry) return entry; + } + + for (const key of candidates) { + const modelKey = modelCatalogLastSegmentKey(key); + if (!modelKey) continue; + const entry = index.byModelKey.get(modelKey); + if (entry) return entry; + } + + return undefined; +} + +function loadModelCatalogIndex() { + if (modelCatalogIndex) return modelCatalogIndex; + + const payload = loadModelCatalogPayload(); + modelCatalogIndex = buildModelCatalogIndex(payload); + return modelCatalogIndex; +} + +function loadModelCatalogPayload() { + for (const candidate of modelCatalogPathCandidates()) { + if (!fs.existsSync(candidate)) continue; + try { + return JSON.parse(fs.readFileSync(candidate, "utf8")); + } catch { + return undefined; + } + } + return undefined; +} + +function modelCatalogPathCandidates() { + return uniqueStrings([ + stringValue(process.env.CCR_MODEL_CATALOG_PATH), + stringValue(process.env.CCR_MODELS_JSON_PATH), + path.resolve(process.cwd(), "models.json"), + path.resolve(process.cwd(), "packages", "core", "models.json"), + path.resolve(process.cwd(), "packages", "cli", "models.json"), + path.resolve(__dirname, "models.json"), + path.resolve(__dirname, "..", "models.json"), + path.resolve(__dirname, "..", "..", "models.json"), + path.resolve(__dirname, "..", "..", "..", "models.json"), + path.resolve(__dirname, "..", "..", "..", "packages", "core", "models.json"), + path.resolve(__dirname, "..", "..", "..", "packages", "cli", "models.json") + ]); +} + +function buildModelCatalogIndex(payload) { + const byKey = new Map(); + const byModelKey = new Map(); + const models = isRecord(payload) && Array.isArray(payload.models) ? payload.models : []; + + for (const item of models) { + const entry = parseModelCatalogEntry(item); + if (!entry) continue; + + for (const key of modelCatalogEntryKeys(entry)) { + byKey.set(key, entry); + } + + const shortKeys = uniqueStrings([ + entry.model ? normalizeModelCatalogToken(entry.model) : "", + ...entry.aliases.map((alias) => modelCatalogLastSegmentKey(normalizeModelCatalogKey(alias))) + ]); + for (const key of shortKeys) { + if (!key) continue; + if (byModelKey.has(key) && byModelKey.get(key) !== entry) { + byModelKey.set(key, undefined); + } else { + byModelKey.set(key, entry); + } + } + } + + return { byKey, byModelKey }; +} + +function parseModelCatalogEntry(value) { + if (!isRecord(value)) return undefined; + const id = stringValue(value.id); + if (!id) return undefined; + return { + aliases: uniqueStrings([id, ...stringListValue(value.aliases)]), + capabilities: isRecord(value.capabilities) ? value.capabilities : undefined, + id, + limits: modelCatalogLimitsValue(value.limits), + metadata: isRecord(value.metadata) ? value.metadata : undefined, + model: stringValue(value.model), + providers: stringListValue(value.providers), + sourceRecords: sourceRecordListValue(value.sourceRecords) + }; +} + +function modelCatalogLimitsValue(value) { + if (!isRecord(value)) return undefined; + const limits = { + contextTokens: readCatalogPositiveInteger(value.contextTokens), + inputTokens: readCatalogPositiveInteger(value.inputTokens) + }; + return limits.contextTokens || limits.inputTokens ? limits : undefined; +} + +function readCatalogPositiveInteger(value) { + return parsePositiveInteger(value); +} + +function sourceRecordListValue(value) { + return Array.isArray(value) ? value.filter(isRecord) : []; +} + +function modelCatalogEntryKeys(entry) { + return uniqueStrings([ + normalizeModelCatalogKey(entry.id), + ...entry.aliases.map(normalizeModelCatalogKey), + ...entry.providers.map((provider) => entry.model ? normalizeModelCatalogKey(`${provider}/${entry.model}`) : "") + ]); +} + +function modelCatalogLookupKeys(value) { + const raw = String(value || "").trim(); + const normalized = normalizeModelCatalogKey(raw); + const withoutClaudePrefix = raw.toLowerCase().startsWith("claude-") && raw.includes("/") + ? normalizeModelCatalogKey(raw.replace(/^claude-/i, "")) + : ""; + return uniqueStrings([normalized, withoutClaudePrefix]); +} + +function normalizeModelCatalogKey(value) { + return String(value || "") + .trim() + .split("/") + .map(normalizeModelCatalogToken) + .filter(Boolean) + .join("/"); +} + +function normalizeModelCatalogToken(value) { + return String(value || "") + .trim() + .replace(/^hf:/i, "") + .replace(/^@/, "") + .replace(/[_\s]+/g, "-") + .replace(/-+/g, "-") + .toLowerCase(); +} + +function modelCatalogLastSegmentKey(value) { + return value.split("/").filter(Boolean).at(-1) || ""; +} + +function isVisibleVirtualProfile(profile) { + return profile && + profile.enabled !== false && + profile.materialization?.enabled !== false && + profile.materialization?.includeInGatewayModels !== false; +} + +function uniqueModels(models) { + const seen = new Set(); + const result = []; + for (const model of models) { + if (!model.model || seen.has(model.model)) continue; + seen.add(model.model); + result.push(model); + } + return result; +} + +function providerNameFromModel(model) { + const index = model.indexOf("/"); + return index >= 0 ? model.slice(0, index) : "Fusion"; +} + +function modelNameFromModel(model) { + const index = model.indexOf("/"); + return index >= 0 ? model.slice(index + 1) : model; +} + +function configuredGatewayUrl(config) { + const gateway = isRecord(config?.gateway) ? config.gateway : {}; + const host = normalizeGatewayHost(stringValue(gateway.host) || stringValue(config?.HOST) || "127.0.0.1"); + const port = parsePort(gateway.port) || parsePort(config?.PORT) || 3456; + return `http://${host}:${port}`; +} + +function normalizeGatewayHost(host) { + if (!host || host === "0.0.0.0") return "127.0.0.1"; + if (host === "::" || host === "[::]") return "[::1]"; + return host.includes(":") && !host.startsWith("[") ? `[${host}]` : host; +} + +function configuredGatewayApiKey(config) { + const apiKey = stringValue(config?.APIKEY); + if (apiKey) return apiKey; + const apiKeys = Array.isArray(config?.APIKEYS) ? config.APIKEYS : []; + for (const entry of apiKeys) { + const key = stringValue(entry?.key || entry?.apiKey || entry?.value); + if (key) return key; + } + return ""; +} + +function resolveAppRoot(options) { + const candidates = [ + stringValue(options.appRoot), + stringValue(options.appPath), + stringValue(process.env.CCR_AGENT_CONSOLE_APP_PATH), + stringValue(process.env.AGENT_CONSOLE_APP_PATH), + DEFAULT_APP_ROOT + ].filter(Boolean); + return path.resolve(expandHomePath(candidates[0])); +} + +function resolveElectronPath(options, appRoot) { + const configured = stringValue(options.electronPath) || stringValue(process.env.CCR_AGENT_CONSOLE_ELECTRON_PATH); + const candidates = [ + configured, + process.platform === "win32" + ? path.join(appRoot, "node_modules", ".bin", "electron.cmd") + : path.join(appRoot, "node_modules", ".bin", "electron"), + path.join(appRoot, "node_modules", "electron", "dist", process.platform === "darwin" ? "Electron.app/Contents/MacOS/Electron" : "electron") + ].filter(Boolean); + for (const candidate of candidates) { + const resolved = path.resolve(expandHomePath(candidate)); + if (fs.existsSync(resolved)) return resolved; + } + return ""; +} + +function pickOpenPort(host) { + return new Promise((resolve, reject) => { + const server = net.createServer(); + server.once("error", reject); + server.listen(0, host, () => { + const address = server.address(); + const port = address && typeof address !== "string" ? address.port : 0; + server.close((error) => { + if (error) { + reject(error); + } else { + resolve(port); + } + }); + }); + }); +} + +function parsePort(value) { + const port = typeof value === "number" ? value : Number.parseInt(String(value || ""), 10); + return Number.isInteger(port) && port > 0 && port <= 65535 ? port : 0; +} + +function parsePositiveInteger(value) { + const integer = typeof value === "number" ? value : Number.parseInt(String(value || ""), 10); + return Number.isInteger(integer) && integer > 0 ? integer : 0; +} + +function normalizeRoutePrefix(value) { + const trimmed = value.trim(); + const prefixed = trimmed.startsWith("/") ? trimmed : `/${trimmed}`; + return prefixed.replace(/\/+$/, "") || DEFAULT_ROUTE_PREFIX; +} + +function normalizeStringArray(value) { + if (!Array.isArray(value)) return undefined; + const items = value.map((item) => stringValue(item)).filter(Boolean); + return items.length ? items : undefined; +} + +function stringListValue(value) { + return Array.isArray(value) ? value.map((item) => stringValue(item)).filter(Boolean) : []; +} + +function uniqueStrings(values) { + const seen = new Set(); + const strings = []; + for (const value of values) { + const trimmed = stringValue(value); + if (!trimmed || seen.has(trimmed)) continue; + seen.add(trimmed); + strings.push(trimmed); + } + return strings; +} + +function stringValue(value) { + return typeof value === "string" ? value.trim() : ""; +} + +function isRecord(value) { + return value && typeof value === "object" && !Array.isArray(value); +} + +function expandHomePath(value) { + if (!value.startsWith("~")) return value; + if (value === "~") return os.homedir(); + if (value.startsWith("~/") || value.startsWith("~\\")) { + return path.join(os.homedir(), value.slice(2)); + } + return value; +} + +function trimTrailingSlash(value) { + return value.replace(/\/+$/, ""); +} + +function formatError(error) { + return error instanceof Error ? error.message : String(error); +} diff --git a/marketplace/plugins/agent-console/src/renderer/assets/agent-logos/claude-code.png b/marketplace/plugins/agent-console/src/renderer/assets/agent-logos/claude-code.png new file mode 100644 index 0000000000000000000000000000000000000000..7045039a31bce95517b36e94c1270add5733d475 GIT binary patch literal 47454 zcmV(!K;^%QP)Pz^7)eAyRCwBKndw#=M-YYeim_3!SPTX)IXU@g(I( zYC(SVvFN3`mRq-~$CLh_KgO=v8~e-sar1KI`Sr!CH2nE#+}yoO{bHI{i~X@%{K{JL zecjbeGMF#_Zmti;&CT1fvorj?&SO74H2dRYv!Cqm)K+r(EI01m)g%6WTDwe!~>&ZHIV1v)CE@$K8)d4o-_4e~|>Xt|RPJT9zFK20Od%MraW*d9sj+N=; zx_9Nw)Agav>o;0 z?l9eZ>J*RUK4&mT%<)g9pZ|_nVZ*l%A=~G{ z%*jn8FUCfflVv-eUaBf`W&S9XeIV=H64)uQd{h59< zNARvJcqV+!MGmgzVcOiDjN9)Y1a9pQL*je^XLe8kTyx>zT0a3X`CXjlo`HbPUt5r8 z5dhsOAZJ?{0{6OMO)^_M(_X&8PKIPxx(?=WY;19`+11zJiXi?3`j5YUGhfXrI~gG_ z2gPJym)8_Br zJusG#Ft8ad8F8NbtEw^-_J)OXl8_wejvY%tggtoxggPmAnakxFAe;enLVy2=y|6R) z3Sb7J-T>V%j}r1D*`s113!Pd4*gNFo!sWEVp@D3oYV^dYB zy~570J8Ug>w!#M_g)E2!JOIEEf+Q)!50RizAr;@6;Cl2joIwKoc09ty=!|cK3jw|8 z#XR!SM}TfApCP!;XgO*(NbW!db`g$et+1to+|S@Bf~DUugvUO2GB=WyC zxXa~5Ih3L3tvxsjkiw+H%`v(}79%rk%z<7lkHiQLWMpbR2koJ;mdM!|ksFT`_+PnV_4% z;PG*J#%{&l+J^z^-T3-I?#&788^j|YWL=n}f@ABCuV>a0oZ-9V5GL(sRaa>1_+)NSZpiE(4H3D#A1(g99K4s>V z+yD{lo(Kv8AP3B_Pc56$pPVsa^XxcP5?Y3kNirzu2qcar(B|AdKq7WhLWCWf6I(Z$ z_qmRtzr{>B^Yu1Bo)SyW&cQ&2%%SxjF zX8#TW_?j8zPjo~NnClu{95`Omoph!oyjlbU4E{&&+NZEP>-6+d;WE(NhYT@jk-0Lz z+P%!fhE#yGHh>MZYUca3=>@?3{F4Eyt86F_!g1gM{pB2R6F0!ey~y-d)^V^)Y=B%X zAjv@zsls0$YF(|9WSPy6Hz#QV<9S(T0mtBwUYF}Y9k>_)RzPHDw$>w7PV%$vAV1F| zl#>0tt$<{o9Tt$=#$a6YWegHaEHw6(`VhjVSN708+AY_PnNMJ!2@ zQI?lSunMI*9$DBM;L$mp&G>02zL=qR&7PriBrWY$PByAUM`gn4R#v^z&?eAUt@w%% z?L`I`a`>dhc|cVqPE?<;FMLQ4n^MJ)>5sy>`JbNMS>J|ymPtU5{^b$(dHF}SCld)R zP)m31Gv?d!RqNuFS1HzIE58}|)MH1oJ@XZ30Uq*)QZ4!%7bQdOTTiNtP4Eb|IAb!{ zqqb+p#|rL4K4WA|dXTNs!306{m%T0&@=++tn5{9#8hac7Ja}l_T``{rM97ts#V&(b z#d~dij*_xC3Z{V>BXKam5{)~^asrV7Z+nrM0Tv~k_Jlq9bSOZgn-~Ur0GxU@ox^tT z`KSnyA7a^&aq{`)9TYY{8f{G0Bew8@!x($)Z%vUL3** zWz|9b*$U@`gT+EHfi8^xEveyG#-TiS4h86xsSF%vN(GHI^og$p2F$I2s8j{YjdY90 zU6i;*sR{vf2C^&xUa=2(HCWu{=#60p{f(~diTwbR$B8F5Yv{@upJM=y@}1cIhTdBe z&HVj1&!0NewzLROb5)%3NXqOrILpyLa<^9tV@$pq`(xg9^)Dy1Ot3q|Gvvydfn)j$ z7_^mxKD!0^$bb5te0N5YLKxhsB-Eo;f5ZAPy~SMd7s!b-54Nai(iw7sq@GMK9@L6? z_^JyXYJI>NBm9T&75l172pJP8qLv`QnT1AxjTML6Q_;Tm1hDI}9p|bMbKK)?%&OT} zsRfV~kSZqJy$hoNu=maa5haxMieaj%(B!kQFF_({bLkw&Zdl80P_`p8SR(pefM9!$ zBcYj}@9Ap-YtkXs81bJF4Ba#Tk8iVC)$FLka9@vCpoj?KOpr8vAfTe85lt&1Ij1{9 zh(W|3P`m@dTkrxhaiRkUV)yB9AM>4q1VRlde?8& z_b3S)F>I7Jp-aV*(AfNRJ-H__bUibVXx?{HyT#tj7jMF*4M3Al+&`NpQLJMHi2lxn z+}Wk%dlUoX5+g$OgCvdb*sp;8Y>4n|j{*6x>Lt%*NRTPm!kfs8U0?ZXc@w!1Dv1ND zGFs>bjS0gG2r%*WwrC78CTrmA7-*KOkeP7BdH_J*36ePs5!{Y9f1@Ve48c>^bWsV5 zN@#!+29s?Q4&izVkVy`!VnZlkxPkIg1wg~O=34|;Nro0!Mpij6UZ85G{Y`4ble zT?sAtt%U0G;i^LM4UK!14F$7eL6|@ob2pmGyrdnimholZmz8WDYQ;?ac(=)!hIir{ z0Ppw>5Ly&2%1*dIA6jH8(0G@M1tALC+bh@sD*xF+@B2H5vXfTe6xQSFq>@7V5ONz)Z*sFw)IP5 zbs8l=J;%Wc1@yR87z49m2-h$y^I(A($ISdEnYWaP^CY7|L(gqPIk3Fflrs$<%DwLy zo%kEWK$u{tLml`$b^t#}q6Qu7uy*U_;w!vMS+LJ>pj0%K{@}J-$VpaN*ThEwiTAn1 z>izOb!bl8E0SJDc-+PSZPDLc1X;-yrqYy(kw>C(;mv5nsm{-L(@xBTHzL&3fikHJs z4G^vAE6 z0J})9jg!zUN=6~Jo*#Fr!hE)?0p^sr2`rd(jYX^s*RTQQ0?>zQOmA}76xtzn>t8Dr zd$+E@4pzjuS{bmo>oV>3xx+@D;Rcema~gmUl#Zn#I9xx&lkVxakF|5^#DZgvbCFw> zBUgc7|HD}RzFK`rPDI0M@{X_pB_%HkZ!PcNC0P!XH}Xol0z9W-Jz8i@nomI=l@Sc4^F<5E^FfG)hY zJ&DIitRfH?A7)E~3yt8ZKmPo?%!785^{>Qu#-lf-K)6-LWj!(??*+-hIv)ktU}EmW zd&aH$H{dlkPbFcmBneCO7{yP|w76TQHMZonG~jH$KLE}q-)8G>KY5IjQ{SJzIjr6L z0@Ev?HzA&C>Roz#@hq6B+`uxc;iG)-V+$H5d8X`RaOGq8ReKL7%Chf09vC*{fT^CH zNb(dR5d4$CuwWKHZC_d&Za3s_H{sCm^|yIWpHdZ7q<|O#CM6=C0yg zev+~DapyCDGJZ?;ji)jGb{(GuZkylF2@^`nc-BXm`w)K3Z82=CQ-UN&R$%lH%aOOA z%ImBt{1AN3>$SYB$`OW0`OV{^n3PAAJ8eII84N>C>D7wT7OtI}X8&%6kc56JsPYeO zp1$K+Pd?@}yb%Mj>;ur_01hrNTIL6SMA@cleOg-%z_7sqcwRgegv~5LevUARA1SEo zo*bWkjA;o?hNg^!wHoo1%Hz1sqs3x7m2#HH9W7TG`}3@(v~4JkiT{)!@3 znNm9SG^`spF3mS_ec1pQw2lM`+Mxvn){D&tq}Ex0^i@#snS07$Y|bDsdBLX0rf{J> z2_)bz{+hT$H*}?5zsbxpU-KS%M{5~80u+^GAuHY+n*!LN5zw#-&neJb@HS3l zfgxZ#8_XqPgsCHDA$Tt3xSQ6>ET1_A3yl4s6B-szBBQVl1UP^&TT$sDP z#Z*<&P2-*sE+@%6)i!Nr&`iYiRM2+j;5+=n;*JfYTf)C2o?6VNyZLCWj{y;gYr>$i z^jh4seezzLLI6(85TfE~c$Uo)%d!9%g(>jj$x_)_YhIc-Sy6CGe@j)b4*Af&Y`mUG z{Bxhvc63BL=L6RDuary%@qkBH#e(0Bo1OuzAa&oI10bkp@iOO}_?UOQKLW6G2SWro z*VHDV1JJZUW$pz^mhVukqLI33$96jiZ@pr$3{04!}K;#P^P85^q-rh3>V&(-$KEqGO&x>q}6?a$J0Jj;Ry*tLW- zYu_}-z8N$?li?MAP=G$>B6H{Zwybyq^nxl2ULo%EXKy4F`PGyA+tC;+bE5zkDPNU^ zbuGs7$uT@&gRpZTOnP{}12kaEK`H=7AI?~lP$P?M^LuO-Im#>fGsebUGY;GQ@S4-2neG#$e}= z_09&7({qL>b6hcG%^1sRBJirQ`=Z~i#djhT#wYHCExP>ZVp{3hK$89V?G3gQC zGPz*_g21BsKg6=ew17aN+s_N*qA@{ZpnTi48;7!_*?m=i}Ee>WCr@(p>$ zs^)u>-luI@c@7=%B!)bL76CqJhF`badGFe7y~;WWWyB4*a^4ugp_Hr_yl`$lu{A9g z8p7#BeUiE;3oQ4@xgf>=15Yn#9;}LoKzX%>#`LrSU=kDgz#7Nl z9L`^muq5nx>+2q$oS7^jy^e(>?jzYFWWw5%#kP;J_WZ0o2ZD?j)j05c&pY;7Bt8WM80dB=N0Jg-mX?N9=92(4)jx3$rD84s5#Pyn5L>?)RA z{O}&x6n^~cTE8bYPZ)}Pc}A1ZvCtb+OiU&KogsA7*lY$&78;-=ITUybDyO*omTM9w zYlPIP8Bbj+{r0xjSm$S33`(p_zdp*?n=l(KC(Cap zU%mUP!C(zLtM0b|n`;lU&u34N18sBdSg+wVRT{^Tj^fzf(_tBhS|Bdl7B^dsK&Von|uCJV{Ei*-O&Im&^ z!Zu@eJQfcf)@q#tz+i2mmut4PH_fN~_vFj#^5&QB?|%KG`@7#>Zo6lvAAjxs^!+d1 zzx>YU?w9XXw<$teF(W#QU2XPa99lnerXD+I2WaR|ZW$w_xF!0DIqP>7UMQA$F^(de_}`D|=Z z7C@VSm@5y%PL9vM^_oU$#t0yF{i%@yR`Qg~*ECewyc;xdUw~Msk#KU*1wqngK=+Q2ZkG2b z0CXTE5{Lni0i48Dlh7-cYik6vhvfy#AO8L~>;L}xr}d+M-mD*gcwYa1^Y`_?fBVb& zpFh99{`>tuuK)VO?*^zpA7O_!Xr4od2wHk+&}$AL4R3!!+Iv7*mQ-iD`DU$|_cZT4 zX=XH%o@O+fkp>BQ34uUD2-`H!jhEWcmiE4@jW7+!;6Zp0-U%a+pg|zvo$w%B)0KHm zX5P&5uB*Dbe06nIop}3;fB!4aom&)WO|G@qJ$Y=L6MyXZw}}Y3?6PYlX-d5l$E|^N z&lXu!uSSYzp;3*md$e49&v`0oxbAt149ID4S`yUetVQ<~;PZF`v)<98z_YxnSCquE zB69S~GxZ0^&0TFDz(v2>5%rDx~t}62waGstFDVw%c~yNt-j*v-Jy+>a%}IN z<(@mYmwWEIqa3yD=67c~vSV}E{!f3~jjnlk3sbjLgHH8 zCxSjP7SaQDr9Bmc7h2y+#&z|B z4CjS3kP)bZz+QnSmn$J+l@*W`q~6yCGy(|}!TZ(&Le9?2YhX=Tv~e{+f5bYtPojnBOZ_m<7&o-eRC=k5;C=-~^vs1}x! ztlG01azsyj7(*-Pmw?PeJsgl(*10nH;F!(Ab+=nV-88tL<*v>Zn4DAlX+$1vfyU<^ zbh$iJ=TjkZ4o24Ah3{0*-o0&O%BFJn_K*Pakt$ot(E$3<-8;)2pZjPTUwew3_3jdF z6G#JRo`|Uy;tCMRnt?-J%aF#````w=K}6c*@bW+GMr%&%cK-9ny1Tb+D0^=IX4&+P zmv_TxkbGmtPkNAr@?y@Rn^sv6@nIWX{=WU==HE8Xn{ln)a9~r zK=jPSP6hJ}AOrBKLyLO~kC>-E0j+u@pPS`2=1e6=YNSosB-X6WabM0+AVzAVb=l67 zR5-bDtYyq4&G{G^4bN3;Rd?n*S0|FgPsJ~@ux|PM(rEH|9G52cN9=!ie{}XSYf*0) zkH-S?KR~4W9$j*uZs!;NsXG!{7yutZ62Nz-u#Ftvx-me%tK7Y1eOZ3>v&-PhhZKOu z{cMrr(P0$EvbBb_o&z-AZ(vVzNq71AEt_!!e_#K`=a>DVXDt1!TcsG~f`|^~ivx9DxBEDfQ;-mpM*Zxh8uHV^PXg3#gjyL0evSgz>JX3U_ zI`_}jxdJZ*(r>f)%{BY2x+H)xDEYYRrj*1&7pBH@(QkH}-}Bn80(j?EG&5k9+!0{j zxix;ZjR@eIE0FH^{71XNW%m!mluB1b&QvHw;~`@^01lvJ`SUKe15%T@AxzPhkjw>F zV+m@p?VsKkG$=s4@2;RkJIaw=+n`2Ojvv}rcK-7}mEk4#b8d(241Y6eI+TNQH~_1( zY6x{SBo9Q5z4-hLcu+>ZqrR&fuFL4g!2fyNB9DzUE5IbFe^JJ7GZuBOm6#j0z$xxL zOD$-;H|P1H6D0jB2Eu;c{iY|d!^k)$#VG?ZXzg6wfD2|?7Y_(R&qxoBse6J) zMFU_sQs!OI0;L&zjxzTeC(7SZa3!_@^CUQT6o8~2`5|Te=w1R!`Z)a&n-R(HLKJ+I zKsPVvzN4!j(JlYgP2IuOQP7ATg)V#w%vH9s-6Z}$92)#s0Q$hnuneDjWf@%k@WTCE zAr}0fwVa46+MHEdBLX`Y8Bne?2X9nX=tIznm6zO5?%ukg91AcEBbD-FS@ zC8Ru#Z{kYpc^{|`IIqfU1#*-8@fhL;v%irwr$-enKwWT~DTUR5rmhrkkQSff!qKba zt@8XRg?)f{AsSotVJD#Jr2(|)CD*4kjFqGpV6ACu;mFjq-x%d>6Ar}+_&?4~91GA$ z|Dq<^Z}GXyp{1=w4Rp)6x?ZLWVZckw)1=jgDxeG03T@*|+S$kX?ExBE-~h;3!AT$3 zZU4-N@nBdppA^VVw$T7WTkbCV2H(|?`|BP@i=G82j5;6t~mu;q&*K2y`j;2R5sfv1JMwL)iILs zUNPB=Z5Mh;&f}QNu0Tf>yK6PD*}Rv1dNQ3%{!=hX9A;fQCP~@kyy&v;4Z3 zaY5jujNKsP8oWDP@5Z7=l2}y(z(vXRQ(mAsgUwi`>M8tv~{^fnEzIFe3f? z;zo;5sx-X;inbMn8D-9{pPTo^g=QNY`ioZ-tv-g>pi4~qendjG}1Tp=nnRwog1Jvw+Yt(7?1n_DEum{ z?C!i@_lUg**+66dk4l#eo<-L|j|1~-`Z`n{s#m~hBs4E&<@&{IQHCKoV7mBPXcf=N z!5DgHQ5Qdl!PD}LK(U(bXFv3`_@bs=T!0E_L?6=IS+M0Fa4)(KTeaTbZ}pyu)7rz6 z6!Nj4Bxp(%Sl))l*=lO4c-x;xD&u9p-)(&BOS;2b*26>5x(4gC%xdVSrGp0S{`Qy4 zVz|=iikXI29A11g!J&^V?Jx}n16#(I%7*}MDmD1;o&WO1a{S;vo{1*5$Tx0qS1{jE z%e(TDHQgwBjFIo%T$lnBfeiowErCij>cPAp&;SR(wDZ1;E^!Mq-W2Ig{sJR;u9_o*q3{ z$M}{+o|l`)2-?bh(9i}fqC%OA@qswT?+RKHaG|Ajp3bct%rv7X?SH+Heck4Ox?Ul1 zKDxTL0*K;&acEVVK(5w}l)5b^y}NyUz7>R%Sdn1=;#$BE0Nn^+eb@;4oZh@XFu}J7--~~+b+VT z3Puo3P$}@)e@(QRU=`(25N5_MOZV+Fm|PwDq-zZPW%FqD8r>W(F$|8yi3zx>ec)ab zxkYR=U|BLcLLp5hivTKGr~$3QB=DNU-4$&O?*5w`J8uI)K&<$MNhi_`HlQR&R*-1v8{oHbC@}8Q6C|67{ z2PT^A`UbqNM{8wi>kI^uafh_>SebfTk;L$LjA%r$pB!~0(^bJDydV0SffbF*qX3+g zM#R||4zwtJC?24Yqb4;};o(ZHpc1?4isutH@R2E6BVaImUH=Qj(t1=(0@mJw{74QW z_`?a@+%q`l@TtGiZTaxK0;JmoV)>(I0d2weD*;4+pT-aYm-S`x>RWIHDj1QLIL~%t zr1Cw~Xq>)z08jGGfL{R#t;~A_Fdx;8UvPDIc-yA%J@2NBCk6EJ1AEKvZ+xK)u6U3_ z;Ry~?GbkKFxu_pe5cjZ8YV&R=`NyKN@{Pj=sVTM3O2O!qXCf1W1Zsfd29b5m@v@Mf zE`c)6BQ)-jNIavJ6{V>9MYu2bPY)X3Y}rvo(Fong@7uCD3qm91T&^9^yPNW$p`A)e z_rc^Sd=yS5@=`UoT01}{5nOzwwq$kpoUaF4de*PU*AYn+@dpUzf%B^tw&mkih2$Jt0OonpC*NMT{M#V?4T2r4_D!d0FA+TEC9VD$}qg- zKFYCa%Ah4^@eBY#@5wn0^xn4NCRZN&6u~Q_i+;NsM#karqTlL9@jD22;xOzGdh4P5 z%ZM5@Mj6){)UCeNy8>cO8CF&z(1t`sM=Ef40_YUL zJq_riK}$Bh=XHe;xqRCKZ*qBQX7!$UgD6KyZETmA6Ojab&W&jA=$c1%!*CyNeEZAF z#<+iYb-K;(eoeROy|3%mz4vwa+Nry~(kZqPOrfSg?fQk!N51*8dWOW3dTR!cq(=gU zNF5_+Z8S3)+_RyoAxvlAL4mU@E|+L6WiU>8)?BuB_=jWTtz{!k`#RhVxcGpz+o2+L zd{*2|Ehm>UM@QT+#t|*7m37k-WQ_w-Km$;62oC?R{JEya9nz{*CJ*x$wV~BIndjO^ zc9d`b%1~VT4r%E=kPYCrJuRG%mfn2p+spjr4@yHy-LF8+uQYN3T3S2-#W`!k(jVNE z)PrL|9X7t_weV;AngR2ycz?L|*1h)G-C)h>PW5z7i}}32FP;|~yw1srcS`A^xibbh z^d-QuD?BarJ$JdcQqKex+WyH8lu-n!=xKTy-$pNWBM#h-P1`)sP0DNV33N)KNGAgO zY}^L0o2EB+hAEiBDP6bN?{6&mxzqt=;@i)qAs}_G{0X^0#EcDA4)wQauW^8_j< zUxlXK`Va5wjvw61^AfzsETGZiha(S#HBoqeM$c%_Wtsn_DgCQwGLl@H9B!@o^PrA^ zf;svkMRhd>ImA2BsFX*7M8iS!+&jyW_y+4<^K2-RT&e;Ozcf%~KT;kmEQB7wYbLh( z_O?fM7l2u*iTJc}Vmc$q|G^QWo(;$W z&NNqRlC4$q1!s3+E$6^KcLH}Yvp)a z@bJ?epSra>erP}U222TJz|^+m`D#p)VHpP9p)oDxbJj`$nEvz|R`VQLYXP3PmfY;| znn&0CaEx7|kG!vFSpFhz$f2cieJ+NVhx&1k=yw-h5+l>R-gqzuta;@I#AwVI!!kC9 zG`&13N;0zNjIx`uT1+oy1nQ}tF#x^tg3AGC$P-i{vlqC4o{xc-L8cz)Z3D|)g>7HKLUK3F_cuex4`gHXZWu{)ck|6xWmQn(lQJV3@q{n(ppRtN3;S^$d_DCk{PR z$#@#}uKiXSUG)%YSsFH4D#`#@@uA~w0X+071B2ZLBAigbFN4b;Say8z>R zWY-BP2W2Aga@Y61j)$W*1~;Hl25Gn-#`FS1&f>Xja~zT92udPje00qt%IYhgRu1tU z>@G|We`MypmGuYcw|?@2W&WwZsfeTbFcd*Xa^~w;TCbV&ImQULgh%!OB))fo5Jv50a@qg zwky~aWZL(r!sf98F!*I(bNl#3GMMWncFf0qTclQhU|BCA4J@I<-x4rfdKiteS6+r6XehfG+yVKZ+>iSIY6j2Y7zw zJ~y$32JC2YlKu(j(^WTZ{3MN5mtopyfE$wc<vqLY|I`|zd}X=Z^rjne4`>}`+k z0obdrx}_{!`B06NzgeCJz~_2vVD@iK*eAfkIxpbLlynM52KlnFAh9BI&<3eS;qcj7 zvu3LPrIqE!1~|v<+xylG&BgT92tl)x_1}^&D}< zEw2R%>Utv-)ZlCeY8Z{dqqTylIIBhmlNc@#6~ykGaj#s1u;}+i7kX^ZomA*7y-47C z+XA4iEq8|zHN5zD@O?UZ$*(jvo)%FKo@-4hUK{SH5oMsf*F2)z6WSiI@_chwi-Ap9 zjvd@zHvj!w%J8xW(0ido1Zw8Y4xYO9#wU{rXYJp>EG3}4k*gnuSEC$QH;$eLnz2pq zgb2_G&qHSD)=^Q9ct#p(iU~A8w)$ni1Yqg?0W?98;$E~T+LsY!gBr=+R*^yHevpC? z%7guhH$U4wmG`9|8i^0D5xDXRdjE{50ccT1wiRJ2l^?}EKLqhLL!ye}T@0)&lbDZg zLe6f`9BE=X-R)FQV7P_4<$Kr@&zpLwK|G(Sun^KXIhO{+e%wd%7u~0<4<3xxrLwG< zr$OCh8q_;TN3CF(y!iTVeC??K3|ApyURf4yN{#8f2_mY1nRAgF9vkI;d>EMv(LnYC zAOpECGSs5svAz1*KPx0NrPsp26h|XXLuSCt^G1=K$9y5=hU3qsVY=6u1@)|^w$X|o zfAuBT;p)Q)fT+03r$}>s7XpgJw+|!=cH&@Tv%X29O4D29i8}@g`l5 zqSUs}_pbqMN&x4=xvl8~iotp!p@6xt4lM?atsGh3xDV*03_XK!T6h_+NX51jm-Gxo z$4pi9yeW^04YQ#lR?XN9L3`udp1rLz7M$=>)&8+;syE#lm;D7fbu6 z@;a8JXgJn49-G%pl$5vvIO<~y3~JJ#8myv`#`&sau>udyZVX~ZLz|O0q}Tu{aY6}W z+(=e&LOBoR0iqj>WQlDGz{dvol~*=z2}Yi}Vrga0WAwJDMpObh%_JEu-EeyKY@pe2 z-FbveNNepJM=RX$c=OhhlZR6-8yp%-7e?ah%Wv**-#N5wjbs2L2C}u7U2C|}$n#i? z-evxpM|pr~o59FYRX%pe&=ev4>I>ICs!U#RRYyi28WXO}J#mxue|aVveE;%7S%}6Q zUXGF)n)}L{Z{8IfXpFd5CLOak#bDn(w|&E4_Bh2E?cCpXqwWJ5Z^w@CNe?f$H^CC> z0l+arhI}4E{4KCyyinGxD>pVM7p_(2{*aMq*POJwF+=Yi_g048n#U;*TJM|Su9{j( z7wPxZ`t}XbXj;Sze&Kn>7baA|8D18_CQ_Cy zTYk-RJcckpW*|2)pu4*dm0giwHMsl_iZwI8P^e*6F!h1U3wxzDn#`+!=kNOJXGCju z_x#M>Hn96*fHzI;9*nF*BAkWq=LDn?y`ENNFkQ@JltsN(0y@fzB17aF7M`r3lkfNH zbBY2-{jEgfaaem<4Y$;!EZI`#=fYd;n`4I&p6P#RA2?3a+BWKVi1KK;8Ng=1BEO|R zR4%H*wO+${Io&q)QY>D7I+m{@dbC8A%)R)&U3Dw14$D0e)jPa#xlRgmU}aGDjc&u* zFDuW#GA#c4;$N1(8UV-r05fHxb!WGW2-q?fwM+trZnSzLN{8d#fCnu-U9q!3zNcrf z0Yt_mF2C?vI4Zd&Wns!sB4dm4xfp=p?ZgISu6 z5hVo7NP^qKetu~5ToN30I$JT2nNh|X@l_#j@T=Fpij{_7iE)q8~m<4RKpjWE0&v=w> z7rGXE7_23i5j6&W_2O((7`mtcGu_9&`ES?m|8N*gjMP3H0xsnCsSpj?&LdG<<;NyQ9 zxfy>%G88UFeV=sQ!ReJoc{XK|Q5d-qn?LY2=mZS}(55s%117X9o`uOv)|64C0*o{! z(C;M9Oy$|HkN-P@J{#Wl(vAkoJ?%l^eg?C}p>~7WfVS93Cc3)e%`YnB_|^`m+jFs` z1`HnD*le)3v|lST)e8y;;K9Rb_)>({vQmJhE=A&10aRZlwKvykAM61x&ia$_KfD^; zF5D=L&H=idN&xiBU<-5r{P=+)rj`^3jNPuehAvX`3}W$1j&2g@}W z38jwZ?jpd^t$Y1*U7-XKaLplrz;qzNyvrKZytn$1N$#1y;NE1AVH_cR2LYN7{|s^3 zaZLPd=)%VHS7!(2{qnaH(Q7XW*v7JqpWl(nT(fUQsDP)=!K+I2_=mQ35dYOpUF>II|{a z_R+HI>z@q(Ichhnk!N}CU4W!|Deey7Ov1<;UV4ArcyQSQkjcFm>6@xiQI<5;?ubz^ z-92}Uy6gwY2DAhamN(nt*G z6Vs2RCr~{a>z?m_lNnp#&og-$)|P0@XaLv# zYy^-_1A0#%&=!MvTcuNn)-Tfgm70Rf`xp;I{IC&}8!nO7=C`=_?E~3$4)_6^m76mJ z4b;9Yt8r-C$ITFu>I~7yQP%P&`0L6B;@KJu?e(d*R43ApS|69`q;Ih$$v`l;tse$xOI z!1)%4z@3TwR*F`b!k65g#u#EQjTqFT8zEk^$H&Pv2|zc1LN~A=HALQEHX(mpavAM6 z=ZRw!8jh!9&B#2t#5vKeMWwtWH1swA4c(CJke0S~Zh#h;0W}|=MPg6tc7r!eAs zfdqEIRXKb67y&K>OB^0Xt}wn~dWv#jGK{YFK-`PUZy-Lg?D2L5=Up+WB14!oqDB0f z4{o6W&EF6dC%)66O)F^jxK@Df3(uqsXi6q#UwhRfqNh<>s%-)ULlgS4^2QgCU{nEp zWI9MAapZ9}S7gfb;bg4i@je^={;g#p-UZ%_g0j}7Zn1ZyAevIh92&$%F`&;#p#a9O z0xS*S#vI#CL8`7$ME!^|STsJzh!t$6O{AC3_X|M#9|{dP1M!hi5*47(F3IG}!FO5Z zh?iRKfjrK`6$hxbFF!z9xNd>7lKY2|K)&%^kz=uIYah^}9s%k$jn^!go!{(VG#rNI z#&^EF8=Ut)JhvX*zl^CU+kCv!s5{aj^VY~Gyk0kQJ;ppPSG-W9&{u9<0KfZyzJ(V216E|z`Ret zDe(4k>`2x41Yxuo(K!m#(7S}N7>TI4;znSext72GNU`;%nt#)ouEaQDD|BpXF* zZF-3evNVkhkN~@R8T@DdvIlk>Vzwi|3Mj>;H;HywLn9p5L@AnHU2t+jMtI1Ba>;!eYlne{ z7G}mHC`X7uY$5Cn=m9TamQ0O25wK$)fIAr7cjQknSBIzvBf>)lAyH`rkVH!YUW?wXp zgJt7;UmqELzeX~T@*^lW(Y`8yEw;m$TaBa$v}-XP$SA7%)F7+cf34k*RL>h zl@h8V=e*J}ln)Kx8Fgr7foDcsztB0hy$}4ve0&P3K*f}5>s}sTv~n}jmrSFW5FrF} zU`2FM=L)nMMc<|v^L`qA23DF@CE8aX;sKFEZU~pjIfA*+(I8*9r~!~%r(|{&)__*U zCPf*iqum}6wPY0pEw<%v|C%*X_|WOXgL<@ioGl&$=Vbl9*vNrbd$`f&54^RE!jKxV zC=Xy}04bU;BZv$j{r&~N(XIRI=XP9=)&&qvBhLca0=NJoKwW+N%ge%f_lhn#G#sv_ z`Yq#G7yN2?Q~o}He@{6oPliE_*5)1o)I-srca@b_J*y1irz%nLYs;LHULni7}q?`Jw4A64G!T~&vd$M%i$m(NS+7To@i(;@Dy8YTMSxl zo4{L>d%tg5TU&dnbhD^ZYU?|biEQjkWkdo623W=OIxGaJmY#P-`N4l9kYcXljBqk-yO43kE2FbQZ)-0Hy(1 zjvp<%gG(<&IDZtCvH++v8EXFgdq)P`XM-ajty=Xs)T4>$#y$7MJa+2}BTRplD!%a|FYTFM}A#YZd5Im|P>Apd~t11akER{MxlVcLLB_ zcp(#h?<#|YAu`Fu27|Q2xi!CoVMm)j z@*dVb!5X)=hHf;mK?sPEmftKfsN)wwi{e38_t$?J>l6NFHvnWno4>#22{C*tj9N$H zVte7@`<3Nb&+u?OtGoL!Ks_0d5x@z+xIaJ%F8!)*?NfgTknrB5c*g&~4W|dtoXdHA zP>Z%4KNiN>cMH8pWbly=s-Ekj-|Y6>{x79Fc8|eqK|>qRvzmI=P~>~?Y*8_-6h?B9 z49`e|trXKMPYKYOA0utaZ+N|QEY2qr4yxe#l$dVR08mRH6ULfTAg<$H>8jIx@!jWY zXMkRS_5%B8c6mM|+)n~Eu_m8mhfp7qpiPidAxd0N?}l6EIE3wmn{&l0!X|9H~KyiE&wdwv;lo0sqemD)87}*SZr{qdlmI2yQx2{bv z%1?Dc3*hJgmuqJLjfj4n9Ml+tT*G(U@P_Bb6kxyJEn&chB8uuC5VRBgh5)TF~=FYp1C*20yCtC^1Pf!`;0I?&!irjmZpKN ziQ^hDB3gSxYGn5wSw`D)b7KG+Ae*qWfg6DFqP~#d3c9s7)CVDevv4yn>cY!T0?@qZ zXbmqa-{oSXArdBTiAsz6aZPLGI!|kI2OXGy>V0Y?XxEoNi8cnqPpO%Jhc>TMR1csS#Fkk=3v2;Y8p5V`y`~N( zs1zrJ!3iV}0Zh(=qay&@*I_U+$>iX?|Jf}@!&)1?2os$jKfrV1+yi>9K|KTP7IB;b zHMEOuuH7076%C&9lYqGdxD-m3y(A+nL1*AK>Y}sjQ~>S`c;UpsxiJuwZI`n-KFiWO#GT0W#;mOCsW3c0M z{}|vqH7fglMD)-qL@{H;#t1+Gn3Dq8qH_*%P2^*|x@O{yBN#ILvr7n1vmb2?-wx3) z_lAlbj(1_E{)MYfsWYDL8{Wo#f%RbC`+!7^%rXP$zNY3~#hceJE4mhqY=kQfV~}1} zb?b4EfSh>&<=R}6S{Pu9asosGQmR)1S58s_aH1y-+_^pCzFK6+V+!R+5Ko5o0al;i z2d$>qg~Bqo_6>2|Ue2!S_bF-LKhPscI*exKG(m1G%UhcO#chzyZ4#v zHvQe3IYyp_!Q23SVo*CTWCqmEH`(^l_jH4Ee;&$UM6T>RFl6(tfACyf2M3c=K0dyx}itS!TXFV(kf7LYXn312<+p&ZwnI z6%m0R8TT83>$QnJT8y9Mo>~A@pu_6{@Tg~SH0=QkDna8B-Vimi0J=oabQ*@0EZb^m z{5H3pICNT;zL|M)<<@%86KS;oorI()#A7+fQKLfIDY+nHO=MWFu~U7Jz^pty=NoRV z*9CdJX4Z^QIC%om3jltuao5NcSbPXLoF`N%tjNkRtkrNs?Oj}(+FHw{WvI7l=Snvk zn61hBffM!tpmOx?>a$*cR~%r4PbZ*PqQJ!4;nK?qegI7*kaMj5ar*&iUW9!E zXI-@qRuKQs#|`4Imix>KXf!e}0d>*p|EZ<@;R(m{i!sMYm2EMEA3#&V7>EY6!F*I; zMx3Johb5B8HTGx#3WcfTUaN0-eiw;L9l!%5voZ^40Lk_Ez89j=ZTZmO5IE7fM*wt_ zV*)fZWrkzVf*O%QYU*LJpBxQuP_IT9eGtK-8g+zftf^YIAVcLoppj8l2Bm@84HC%X z25yVbt93K*k{p@;VXyQYFNm@UpK1W+ z;leI>nqvc5LgM0OjK0u@_)nQJAB~Lj-4-vu5PZ4lL?gHsVDmx*PJ)-ivAmyO3KiF$ zUb59%TE?CxGuLsoQ0^z=QKQ5)UJ#H|A@SVE8P*_FK57_XB-%3{-2Tacv4T`80JkBS z(n~m+2D8C}B&d&YO{Fj=0<`uuF-X}DFiYtoH{+H_yn0VpV9L_avqB>Pylx=go{>JN zlT#biz1$KKthUDJ__Y`O8oel**jg{5kdH6((vT>DA}S&9S~w4`9e@o{P^^C*VmBV! zcs=l1@vMQ2J}WFyOh5-!RF5x(=5vIPK8O|K)_I&?WEAG=w)7C(FPsA_5k(wD>|p+e z%Bi&q){+f5|GFS+@*!(Z*NmIYgF)-gi~S(1Ulk;M&Fpibd5G8Ri~Hd1FlfiLaJ77; zr;;2GB|%H;LzNJ}I3J0MARVzbH16%=2u207r((%7QTL7*wM-xe0NBG}FgL0Jm$rvcA`RG*#<6GR(2SvIP~+9W)fagh zUn`7ZoM+uZG+Kgj>|YEk1x65mM}dWNDv))Zj|0+S(hZ5TED;ZIt&{o0b((A3)FnA` zn~bI!rpB27Z6I6IjzmKma|q=H?$}0r4fmnk-ai);dc=v3HE6m??BpZBkICBrh_sB! z)8*Q0H_V%m>GbS#gA1J#TJkg%9&L*sGc^0i13hEA4t-B55$jIFrOdN9mlthX+hCO_ zmpZ_{5U!yC9tbMMmEm)gWW}>0U*lK1^{@N07*#&(I)|| zn_r8+<4A!t6h#XE_vi=p#Z0U*7-4wnA9N#@faDSD|H3L>qYK(!{0a^RR}67PlUPb=gwuU%s;&T%zLLgfIT zybO*FnKl2@AMO-LIV9d}4GoxQ!`LTr&&>eY;53M5#pl40`}?P^LuNqDuMEZpW=oHD zAT-uJ)myUt6CaG8@3GK61J-l{S1Ul(@_ZydU4J?nu4-cj6y#V?#{i@l2xvrJ3QKYf zqW2?rok6q%Mz_S8E-SIj#pIo@DqAD6y8G*&tMf_U6?0&3iacv(PQCr&`*-1w7Y68k zHNhp`EIeGSP>g@OmXWg9xD;-ZH5kMRWPVe*Hp#{~=V9f#0T&8z`~qh06Oidn@`mk3 zAxh4+_D#_H8XAlMZ8soVRI}g^1>(b{Tdoq_dObyJ)i8bF1(6QWGV7&*`AmC;4N z(+y&7juDE4jLH~7w(cFTh{UeBM$QSLkSIEp0 zfB`knX;eg&25|9=w2I@o7&aks4y#8+l#%uR#I2doThm?blsc^1egmm||M z18T$|J~0JpfOZ3G;d7_5a$N*vx`hjWT|?kR;iyAs7yyng|LhJsgYP(uB&@-uzaPW8 zemf$t_hAYMU?O3W8P{OWB&gI-fc6 z_T2XMP)twKq?*`DfHP#V1zxO)jV%CbyG-sqylYZ^C`AF-Ze8eX7>G2yIp4r4+`mjT z4%i^$G5|HoTi%UIKM<{h*ZhD2l9F8D-VEKc>qnsUur6tD0WyJ)*J7fCZV#0gl`#Kn zRyblxf;f*v-Inhi?O3z~9`yy*aKM?gu9o{DwmF~LpbGR&XF46_I ze)wH=^vu5T?W}`{YcrmAkoV)=aZ`FF0YK@YZeGTtKS4VCazE05+{S!vEe7<)H@~PG zU-)avod+|BS5gCvrl1YrU2^H7iSGk*G*(=A$poOA=FVIPUgw;|pP+Ouhq#QRh_*=K zS((Ibw;jIgl`z&Atvd=Y2RsJAjnsnZ4m<`eo%S~TWKFw=uuI8YnlcS&2+c5T(Jk$R ze$?%ux*c^#31k79bNbf%6GcOwd0q+5SO#a#bpeF#!1`rC4S19+52&ZT8M6i)zq3I8 z*UBug4QM^<#DG48h;HDfyCbN<{3GUKWXx~HJI4D)Hr?_oZi&2Ep$rbSWlLu*ZtGXR9BgEg-J37Gxs1Z*CT zu|`;xhZHn7vJ`-)#j)xu#2sS~fx18?DD=X0r}1(Xkc7o^y9ji8j{Vp3!JP%@$YbOWwjHW&*^{|GfeEgzacLZqHW3YYhqlNkN_ODw8n1G(L5z4O_g&tXRv@P`M z{BVip?J$^6vdEA@-DpPJPGINwPe$@@k3j{)Gyf0rJFuDH^a6FP(f(6*_VMHh`7z-?P@hSpB%6vLX=0x;YPB^<3(BG;H=<+fRzP+&c~-*R$q7(jiDNM^S7L@`GV#D#to!& zR{Nt78UcYFFQ$V=4iHCU!2QRw7@sBz#DE5dmz^7Bi!$&0%4aGd%JJiL>i|gFau(1( z7|2JF*=`tDm7izdY)8Sf`qrJ$PkYSj490oGt8}+jDbW@HKIJx{mG1&7lW!tT9?{8ecbjq^T6OpneFU_IrhyTRE%+1-Bb zFGeo!fA2;y3~LzU>_#LaVX;SxXBscG_K-%vJ(xZ#0J)3+{&3eVJ?(5JMUQPpzMRQC z7lre1_|L5Aq7rOFS@5zXfbV1wa~PZ7uVX;B z{QaBD`p8yXmZ4reSb!B9P$b~YaR>0{?PcRBln-F`|JX^!qK9gcfrla!bI^U};3Kva z>6+2H2~5N%7OYGIx+fIE0Sr+O9QEO#X9>04-~N&&V7x<3%$zdmh-VG%J-uOVVlXv>B1S64Y&-rS?xRv<{ur@cN^3v*3c&ewKcS5 zKQaqwhxrL48PLcH0gVXI;>c|vGFq8)xDPHpG%?dl>>qzW=BWNuw=o7rEdJHa3YuO1 zK!w6@IK5z3Ilsrb@M-uem@4yMh2uVncNX(B{#z^XCcF4bUDuYY~WZsS3}m zq@W0c4G!&NmL>Kx4_J!TMB z5TR8-=8B?QRk9ILGl@gP`aM`Hmdc9zZ;f)TD+iVbjQxw%p1u&1Bz~l93m@%fB+9LdEg5Ln~5l_H)E*=xxJ+O-<8RT!hl=AuQvu^9<}AyyNa04z=vjsUpAhTi501p9OFAfo)*PG|!~!z1Z9@taqz~pE zpl2pImnOIL=i+E9I_**}0n!GC~|29n8F8*cR(6a{#h!TC|HzvBg+}1 zy*Ms_0XnvSAfQhI>XUNmAKY7E8me zd);3!M+sCeda&OpgQxyh8C~`VP)Xteir~r!2VhWDsD=V!jM8UDB~b*lDEZO~nmMl? zfa2a&enwxM6(}X@kyEMJ(aufNbARxdK{K}NGzNJwLLnD*VOW!o!I`Z^=5eoOwia9( zLkysk+Z>u%94H&am|2g`|CO>SMj0R8gqGewSH+B?TB>aZ&=$aKfsR;9O8~KXox$uN zfL5_;e$)VThylG@iAX8Oi3VDG_4A1jwlq=aKtnMAdO1!CsK7jH5SniMtF-jVG_-R( zW;FD%lK}d}lhE+L{ngy#V7Vv0$Dyc$J-2_WQnGb#d|`>Kxo#oo)iAW~DCQ_xh;&dd zFAWf#knhQ8#<)m5pNnD*xYM*9GyrU%D4`wE#y)NUGx+1)VgmNIF=-K6 zU)TB=f`a85gB>gi(B>u6zI>@lwD!$bS-io-{a86Rg(T=F{1Z%E3f@?&A|}^ zX9rLDFHAfWn)u;b6Fo+SSzvKC$gS7x69uNC+4f{3uAy_H5vD~^S7c7OHLX#ko+SnIM4P&ES*`=({E@%UFP=d?p^YG8RkV zd0bD!Dyg-JA%IOSjXb(8d2{cL)RG{{G{Axmw8(Qn~HDiOC5#Zq-BjB>(tuHM* zBK&z*OliCC_HUN`;Q=`?x~(pEd}!S`ycJ94+S1Z#6tecpQ9K_2)hoSv<|9u??!0Do zvmQ=mvF1wdjG%Q7`B&n=M3bZ*JuPiepAgUn^^Yhg=g$^_)*zlLmjF#eWYvQGVcfD{ z{pOg{WAxIVSK(YEO8Z;=XwWp`ESc-<@khPVi8-+mb1|V)cgc0bN01Dk<`vlUX z%J6so&q$#!ZeZ1kNVHfA1cCQ?{5BOYt=v2!rXKuXEmHnhK;-QI)QuxJvUt_Q7|^Qq zIAX!fmA|~atiI^lZsp}qFB@X2+l_B|Y1tIhXvO5`W%CE$R<^}Vp*ueHA(nsZc7?kL z!)5n3zfg96=WFGz@Ba(yn~+EzsgLvcw4-}niN%A~N8{Ll_oS`WVqdE1h@xno1hMgF zb7$n(QSs;QIRE$k(EmH2{^4|^Y3CV3kYjg;muAOjKSJtfjdC(o!uRhJ^1w(?dg5H9 zi2l0rU!wlt#<;%gS>v?^a%Lb)-#RA9Lc}TvlIsOIdl{Uv}%?_@c7m z?XT!!?zwK`-@K;V_?~Du?|Wmorryr77_ofu-<9nFmOH-msSbbko@g|CN4Iy39tV8* zp-%#6k2w+7rn+(M|>k^H_^rcN_ zVGQ1+>Erqy4P$Q-z@KOY6EwwiCXGupG&iRuVd$lnoxe_2?1c51MIi*lxB)E&Ll7eo zp)kz5kk?8ycC19fNe}|?+(UfH6Ff3_5{Efli;o^O>|6c7XrlqiFws!vFT76~To_^V$blZ5d#^BrqCrG% z$$T`N`7{2{ZsClGBu3KzLdf8cL!KPlq2<;F=Nv|b(#XDd|G948cx_j@&eY?iptdv+ zpA5_f^5GK$`tYo0gX`K~r=H{zB^X;WpScdz$h~1B4yzNZ;eQ8H2%owTmP09bt|uUS~q#=jb#!! z6^vLyLB%5XWg%RA!lh`!z zj7tJ^vBpN`Calk0`AfZ#2)m|dV)cD_K*XJtqe?-tr2*6!9WIMDw&lOpenx?#+1XY$ zo(g5Iohg8HTlhBlC>R%#j3&iCwL~(kI5#ADoD2fbf#<1K3Bj{iWh5_+VvsE0UzTPH zISV1-DYR3R3#}9(Z*n}wv2p<02Eh> z&eDx(KzqVS^0t+Hgf#nM#`T!ejM_sIPruL`aLbCi{=Ykz9w7{AY!_wMLE%^rGVGp7 zZ3KIX&_*M;D;D$L`NfZyb+39R^pYf^s-PADr0ZG^1A;0}<(=Wvw#mlI?`SrifvZMR z406O&gl#x9+SybAz=~F=B`M$8#$IT_N$hiLu&PH(`}+J9_nt8TROo5x81!3&?En|+w2jPFT2f~LP)^|IV9w*aDA6~U~ zOt#qViYVeSt#svp%#WHz`Xd6l0b2V3v*iR}M(mjh-~nzgi-9=#$eD8%hqn=I3CocT zcjGZ)rYDa!;nzay!BPABJsVYuqqO+@5hBCeV<0Uau2FFL7#Pc}TI6(qC+Gy}quOR7 zb5RlFf&2~r2eh{BilotEJag1lDoULP2I0_A$sEKTS3#9v@=0)KwyR7U_u=NE5l|6L zNYk9=YB2x?z^YZnb$C3u#^CL1YWDGrnqsKn4Lnc$Dgn)6@afox_HYeT?V_ClEXIV4 zQM9`nN;{W(OA6b=_$Y{geVS5TV<86aC` z!8}Vh(5i}RrkCSr-`74p#jf^QW>(2E&|5$Xu(qWB9EswD{kC#%ri>z9rA*6IBhIDX z8(Mqv%4fpI%Oofy0EYiECKc}ob;@Kk#5FufW31&TG~CZ17cMX!i=7g3EsG_9KkmH} zjDXpdq@kNiep=+iW(U9>K?xfxorr;QO&6F{m}TnURpI{+%;RyQN=R)z#` zdhVQY8j%5H&1}i_0x2|v<8X689Ae-q(P~f~?*g&G9Qy?3*gw4XG~88{iY%P>E8Rk* zu5SIn+gK?8-~nV0brQe~XtqxVYRO4JZ0Q5}WMD=FX25#)_ALMt-i#No7{Z{ z%$5dbgE*yu8Lez_9yBsD5Z3Vl54j@J>s5UZN8oHz%nLXQ8^x(JH$>D^RJM3FuL|hCSUYnvninrdf{+V!vA3n!X)P3l zxyAS&0f3D0GG8{20!*`j&VY@%)1tZ&rdN)ay78bNgXYm($e-}&w%>mVlMlm zgW1`1oC~F3WDQGaY`OKF;pO-YBiNx5949Y@U$19q;3mi=vy0ms%ni`|3eX-mI6JD_ znp-06ji9NC^m1Qf3@d+maio+!2u};t1K>%h8;guSB{qp(HdnDG3a!AlmhLeL>_4t& z8zJ4O z#H;~k@Xi2u=6|l8@oLNth?VT;zIZMe7*W=qI@gWEr#!s&QDywX>kBT(T`>vF{?#!N zRIcZpD6`iSH;uAf5&^`xC_cHb6r`5P_P8vgbDD+PlBJUGhN-OZ1ZN z<>AgZYNqp%lInx+KMH8JX+K8NBTCihNJoX^m+6(mbLH(nO&$m`aP6B5AIz1Gc z0e4+_$qnI!`FXl%f+pdg|5fE?gim<#yesjw<9;i#G#+j|-i@;BefFchn}KM$!S)R0 z=+Cv`Z5xjUG-7_;6RzQ&tfb3Y=w##7y7E90IRT0dylLv2MxhLT24id4?)dEmVsvg| za*l31HLX{y0t`(9_qg#$+STWmJV%QHRgl`3EshHK95Q9UfW>j$i|f#=u`Of4nmZa) zpN<&Rqdpgo7MW!&A<2_v7-sk#kwu*U4`Zd;QA~5S^+WIIh$0q^geH+)a^QrMHwpkq zYGopaEDN{#S2wb{760RDFi=l2iKCCt$}G)j4G3x5TGtS2ahM5QBFTPm-o3-%*340S z3zqE|N93;tL1IeX1qLjHD{}ptUsASz>ed(;^lkVpT)H)6Xb2t;Ks-$^3}y?)VbjhM zI5gs!lMowgZvc;ilT_7Sfo*V~SU86u3cy^tHZ!XP;sSrIU=@(@C!0E8_-Sbg0ws-xG@mun zKy82)%8A>px6iym#DL<74md?z-(8qznLN4RYPTTl_l56CP>W z_{4IDLEXS?9?dph55|;^{$!58S*}?1M6i|o*X~_m#sIY#)SPczBH$tY&sC`*a}!)@ zB&k3*VmqQggh2}zPHxV;)~2!TpO*iSF@1m-P-C&)kQrC$nrj7Wfb%}wWei7OiSA=` z?PH3$vW4fYfBXY<{iXvPp9Zzvd`(Ot z0n9EhfMXIF%DDbj&x$3bf04iv4LZh6)&?KKueL)0QD=;HFGDnCL{?exYkX~-7t@E0 zc*nDUHoofX0y z)_Gg8f%)rN&u+1T1GH@S0Sy+%T3=j%R@hn#(ffZuJ-$YfLZt4OtA!;Xc(_$Rg_LK5 zd+@McVTRl%_G9<~V%%#6IF@Sd9(8{MJ&$v(x)OU*Mx0CJ4^52LiC&?ukVS~~h9_#) zolEY=Gnjy|i(Cc)8Gaa6KOtOb#x$U((@;4MSTGd%-5nua-gj_8@X>g;^`XV$er-Wc z0o$GsY4qT?gv$2~zYh>~&PhRRF_10h@Yk|o8UHjm~P zZI?3;!6`Sq`?WP`iH1E64!Zmom*Fj-o0kUfbKJv?4v;Xk={>KHtiG3Xt^jSr&eA|^ zF^Fg7(22mj2XQV(yyGtJQT@y7B71NU*@%D`3Wkf4-i`kg%p5b&Te8_zr_jrhgCiq6 zwD*AN9RfrgA6|U_5(!?x!^5)@#`Vf`FY7kNJKhls?C%XDnRO#~eEjbU32%c){8|i` zV&rouQ`5OOV8-~c+chMqELenBXLQh5sO40U47)%NO{R>hKrR@dfZtspYgux1${0cDXfK;T8)N1vx_+qB2gO6Uv!$963PWnm}~ zlf*=XkBqntZ+tD27XJwXVSo-UF^NTN8 zHo%^k$^QefNd13fkOhDQIH4))cb$TMVW0d6o8lgW6-m&{x(dFuL&$& z6Xgjd!=P;PL6RwOjx@9{@=iu60OUy)#zWN6;!zkLE`T%ZI*XCRkv>{(g+kTN6Ro(Y~h6ojL`arF?kH@e+S3Iq0hqhfLO+gyTSg5Z~$!y z+JHvpIADR}9#|QbjWHYPLZp$7Bl$gMT?)?rq{7gpJ>U6i7o1p>WOgZw3UZDg+_Jum zZjMTc^wn@-5eNa0Gk`7{K@PA_0_J^9TJljpv^}#jF7K+5-FssV^N*4?tLcwf!#sMK zs)?@^kVgquFZ}|u3YRES5^tk*IMA`j~FVvAJqs#uNTULbBU@k)xN!C5a7)$cusp2@` zw)W1h-hS?qwv9C}*PH&KfC^yKeN7jH7e{T$f1fawfue+NRCr$iFx$$O48`hsVwRI7 z0BDvSoSQRF`3Hb4KFAQbe)$+#Yb*5mA-^V3quei5N&QsG3~EzX`6UMw#QI0 z45{InKiS2^;($Eqh0f*Io{mlLe08_!-LHd^2+)YZY?(6t1ZL)W-u=xldel0>5P>?u z43$E>fIrVC2!z*TblHR8w7g$2U_$`22gI6V7mIsK#tk9?pa#$eS~$8>CAg=JeDh%c zU$r|_V>LWzXjm3coxrcbhuK2naFRp08b(t~!3UgX_qM zdOU^TSnYCxlX2Yqn$V=LMVnF>j){)&0pp|AT-fXd*oOfy4uRf`G_9C{42M(NDwS~Y z1G>daey`j1;dh30Jt1r>H_^6@SlT(In5BW5iZ%W4d>;6saW!rK ze`Oar6@a?hA=boW8H=$`+SWoHAZTHf4u(A2_9%>fT=yva>K@HgRz=4IR{vUQ*)d?; z89xDh_a647`Pkysj|!|{PX!*Q@M}ODym&5r1H=IL%fVZ&KGhmqA#$a5lE*5Ne!aMG zPzvs)Bq4wu9{~*x?_$P((+nEQ=vw)hxi&R7Tup`_(XX?9GA!yV%AW6hIY)wT(?m7f zJx87=quFXPpq=`tMQ`@qStlCY8w=sAd)d>vK^T)mJ}M1{R9D`KZWUuQye0%=Iw;9( z5XRwRJR;Qxyz>03g0KF1jF!2uz`^%?_v>-&Za_K%XnKzIF|`)aM#ccrC^{_%;f6Bf z$>5kN#~m?k*=@f$7r7d*p)uoOVbT5`m`UcBupfc;Fc0A5B{!B)&?-2!CXfjc=S`Yn zpq>Wk#hD3!$c7>ci#r$Z6ZAmGNcX(XJ#K(@9kxD8Mg9lu}-LvP9j%*wRn<52&$ z>+qSwvs2j(1JGa)degraKu1MF;Fa|@ZWpPLIys5@W8p~C56@r+f@>=aYRxSU^sMvH z;5G`y$AU*uK!vKSVL%!9STrmRk&2Ncfvg01UwojYp%W=DC@UN2|8M=dLDz2zX^UK0S=7 zXdpo&W;_}BQk_7XFXmRO(6#2yi>ayT8VQu_{`zOp!hp3m%MxJTWZ}4EY7V@u9zg*p zBSrKpfT)bl{UsU-gMG{V^)V-3P>jJfr}1pY6PCdlKi+M4%S)g%G=g;Rc~l6}v?YMu z_2o|&2G^q1moO%ShsPY$3hI!M-{Zzy!#-$CP?`WvxGn?yD=%6@q)njYc?PqeWl?^! zsK?3(cU+9H`S+o1FDiQn-(`Js(~Jake_a&iWN;tmKH2b=7stE)`%*m)qIcrV(2I;6 zU?4IK4lT`ov~#Uv3^Fu#Vy6Mo(ts_k3<*Sm~Wxm5s|TNS_Up$LUh%a#TgAJUQ%w0d4hd8@4fw8r3<+)ff{OI3IfGo+FjP%tH2q@oX<-h>O%!)*%?m= z2!|K`4&VTAXlELOv~v?_%J_wfkmwWk`FyG{T)Is)1IXUF=7r zNpg1mO%e4Qob}VyfKLyU>jlL^2;J1Oc{4bt0k3J@lzv@Tt)AK)%FwXZl8gYTC`|gK zugUvEf90>P>|v$OLhzKpAjfsx@M@hq4go)G&pENkBtNt(E)`Aw9eg>uVQ7GXY~g{5 zBnsH3C5XW9eN9L%l3`(kA)brZLsN)_M5JmdMmFsF^oKe?3PoT}JWsg`pv9e$KA^RY zz^jkee1kh8Z2g5Yi6FozmYVRg7d#s<`vb6_Zgmu^uaZ;DSU7-%_dx#Y>Byo}E}4#O z<)t?lT!?^jOxbbso$+HG5kmQ^ozW*F4{)Ph$xj|d4@9M))fqLzych@8FLE3$Y%m+h zGWzltaH7Ql?uJ+-a~Sktk@1jE`8fhA_I6OlsU;*l^28Z%fPV7_-r5Z#Kb&6FlXN;H zZXi#I6VW^qt@jDw)mQE9!I~%Fp0%cyCZ5KGgEu5o$sMc+vV7R26!VNYZf+0OWWb7l z53k{R30!=xR;qUPwJ2k_aD3CCy{GQoLFRP)RDU$KT=5dtwSp9G!& zyXNSN?*GjHr@JEt#^R3aP5g*hD*_T|2ULWKY0BVjr;h2PrQdVot* zMc|~d-1)t)m00#dU&Sk0j%y)2?E4PO!~Qz=63o1>b*hQjulFbAhztl*A&8>1>)VwYb7x={&0 z?AW@H&&`9&)?WyE22&_#E69m~?7|`jv|F^FJK`BQ^rO39_rj~YL!>Q+mOZ>-Ika;C zc+0u~^@b1w8tH-BoSF&@nsH}L4q3+&Mig;rjV8w)t1DH`ho9{{0@5i1%o}5|bt)Gv zNJSes{cyS0`P&^6A(G=Uy77;#(bP5Hd`6`YET?h28I&RIw}UFgB;tefelY-WVKtC( zTcUABF-Ujs;CoON0op*eP$my>O@2&ou_IiB!?S)$9*ekVaN|1ZJV7U(d1R;ZnGI-* zefKor9WkP06oUcmZY80pb>;eY2}pd+3TDs%@I=HmX~0|uO#nkoYA)cPju->{dZdcB zX*5kCa*Z)X?>Q9(w7u6t@-4?lTs{Gf7k zmV<|$OiOdj!b_wZuu>X8waCo>k*;_cKr`j;CQaUGIRdzQ6Q&#B7=pO*;M<$t{#T)C z{%i2bN8o(dOH13Zt?I6jY3BT&^5MDQzEB5}^@m~bE=5)wnxC|QNz5I{WH4xbkIJ^e%r>HlF}K!tq<37r zHtdO*Ur90Uf=26O;gfCWEs&d5>stz3UY!yK`eMgTKlk8MB=S4KPU`r^k5jVzLJ z%5qdDWf}xfq>Xu=Xa?E`ALo1=Lz|2vxdxE$8{QV0ZeLWoxMik88q|PU9)r0s z#_s(lb9j`+XyA0aG;Xvb4T;8ca56#@d$hHUIrHf-Qs3SULz6RXYH$JII3LGNa#qTB z^O@w4#HwK*1NhlX>}&yy)svQk3lGYmeo=gOs{uZ+;rea#LNWnk z2v|^f9nS^0n!?D^G|<^*pPUiKDl!FVx_u`M$&p^_NEJAyEZj1pH5$atFWr(zn6<_Q zL?e1MuZ=Fw>ouA&&xBV=v^qdo>oJEz<-&Idknax4!7l=rwg6_2k|6rEKHN{Ev!lDs z#27R(&szv%WZ0;U4MDaE;mU&(GyB{bgGkX}PG~|rjKAghN@H&Q&^ycEPySs@nQ%r4 zt(ri5bV19a6-fkIje)Cxqo-j7=DWm++1~h$SC;v+{tLz=-Bgf6Ag36h zDj%gue{mnn-RWoF_PLKRx1Y3NQn>+*Y|Uf3JA>w+g>&s~YikXk>J6DX9-zMS8=osx zA%s^5P{WZ2Q9e95*gIf>dg}u!CxemjeDP+aM-v)Yopl*Bwy;3Z%G1x_{~nFid2Sq5 zjziVs6o`GU0ZpL*tOvwGAIQ5X^*tBHL~PR z1G$wG!;fFUy6%lHUvW3H_cs&quQ>4HVj94sB`kA+kShp+VABpJM@g zm2#w~gM<$_u?lYhqq(0(f_J4KGp&LL`hN@8O;S8@%%W%p1+=ddYJ&*WSh1m9Xr+;l z41l$i#padjwK&AAnG4^klLBsh{d1#B{5@u(FEy2rmY$ZmyFGdu_YUkM8p{7vFges4 zVvHL`5g^FlnZzc#XAHYT>z6Ah4A&eQ%34*t+1oMPYjD5=5x)EJpgQ|v-N@A!T-hyNd|w(Y6O!wG25;;7#c{pQ zhNMAj5VzcVN1=VbC%`Ivzx=*hj%>b$%@BAVH)U**)Z6qPLek0u7Ou&5}D+l1K zwui(?O_H2M1yBR<^)avX=z`x8@8*NTC+j4T>M}?4FqADuiQE zgll-&gQ+Yvh$u6FrmW<))alS7Si*j$!cD`^t9}{CGYiNARC2<1d?Gv+VPr==s`6>v zG-UEsVtMKfuYX<_3uYF2C$3?oFCvvtB`@5B!3{+@xU{y!T-#+3HqPkjVGN1}7^qG% zLsakSxoAe6>KfzOx$qMd81K#~roh`uEIzfu{487#eFaBKIR;n4TY?)ubzGx!s+?NP zw-Hkgg`RPW_b+re(UbXWg5$-9nFL5VPoeU(R`EgVWg4()0PglRd#QOgFC~Lhjf(tM zj4Ob`7(R@=@LK#F{5tsVZ!kGJ9){4$f9xCp26}oXp46JWORjBaP3_D+?iRaa;Z=4UvS=BewK@+6l2`teFzy)44lpMf@%22mVdX6y49nhxoXwHhTdQV#;1VNd~i=28@YD!X71xz#%>^+?0j+89Y78^rtqMj9*2bVN9u zgd!VcxLwN_1%sw$d5Qr1mJhtO0{0jcYiln@20-Uhe1QJoWDujuZz+p$4fP=4VN0lY zHlMbF;e#3(UkjM|n_SIkiGE0xLt=VOO1s+gSCU^mQfboAeBDp&?!EIs+O& zx-b?_RCt>KiMj}(%iy?-8SRh8!1>~+bS=DWdpTREr>iwi~0W(Dq z83{(%oCP7T$b6sb=@QXG^6GJn#&3B(thNr~-N3nmJL#JDW1L~TriS@Ay03<5p z3pqB*0<*6bQiUIewgRvdxwXoqS-WM)=ZY4PGom0(UGQG_Qj2eqpivY$0HcH{0o~v# z;>*&|W87VMI?(J;CCV5)6c5PYvImuQv9LN7LxrQAt%)oEnhG>1HoozN9f1yL1kVF- z!Ik9;wO7I#2MrTL{bO+>e9i)~0i8?F@yjt*s~SFe4nT;$WE@1w!5QW^+~g6J>lvoWL6eY;7N2V?vg6r}R% zbp|vVT-&jKV|Z~!l>Zs$pfSm;q^AbN)GuO>m=qH9si#4aX6!wYV|iR+d~iSL5-z6G_;0cH4M&8Yh(d=5%BpzNi%#Labn1nHR?iZTc84MaWBx<>YPJPuC%_7ySyBu;sek&BmjsV{S*AsXrwsjKn$@z3ReWo%Kfl*p6X%& z4KvW=)?0F@SJ5vFE4E!;o=>Go`$gEA8Hdn}04aH`GTe|1r|=2>@FJ@)YNXLz|#G3^7~0PPr?K8I^?l<5jZO zUc?m{IWLPblhXDNzOCaM@vTq*0`!IuQMB!m?=t_CUm(g_REHWc%ixRzoip;v0DH@g zR1KGU^3riUU)Mxk8ApqNRPW7p0=0pifg|7(1;@AN8Yvb9bPQ-4Y-k}ZtEKLpLPHhA zlTwSjRk;up4(*t8KQy`#-6nH11dzF(^QR3+TlS%aL!ctg#a6?RL1!udZZ8i$k#bwFhTYJ`1g zQZ!l^bO+Zjitjo&G7V&&-9*#b#!$0c3vR%Oq6*O0q-&GPc6zJOS=G8T0jMMT8$GG5Yf#NV7QiCSom!e48E!st8NF5 zLmn%>ZSx=^gt~{RP6Bd#owz#t;76fB%7n#!dKx`N-Mj)cO~W-q5n-r1z+p1NA~0_- zpbcsZ`zuF0v@$3we|~91{2~($ekTu!?hp7J`Q(`fG+gxT{~pt3J-v&lCIAwk0kOqV zIVO61cXZij{G`EUKqG~QJq)Sf_CV#>=DSArTI@SDhHSl(!NCTtfjkT7Or>Q%5x~_~ zJuA5TFDVGszG;(;3fFoJ7bWhq-4QXQ++0tiVR6*;uYX=4x150iP5FS2b`M6ifR*g2 z)wAK+L;)r5P0&IWp&ndIuPSU9w47^4gc^$@&~7xvVt~)tTD1oDiEQ)mjIYb*>J}%^ zHb6%!<%XmXu28tESMV*GQt;U%3Wk3R4WLe;EB5y~vv8<_k$Hc>N z@9H{hVpCM%fF3kx6r6f4HZaWC>6-ygx)VTICi1zGsBO^sVFodoc#N7T6Gjzal;yqJ zx!$JI8nM?$IgK#8L2GeWs2A{Wx(8XwwD&=6_0j;CJ++KN!>)V5)nx8r;3yxYW$WRJ z5}5fv4Z^LrzOB@GmamuL$Ma|8YW*7E)iVJ%z4ZRw9Wj?)a8|%94IRH0=bq58*1hy5 zQf2W5RfBhwnx0C{`?9}BImn}UOyN8<9KK}+EgYCE;OFLDW&mw48_@g$YDUG3&iHpU zcodBWvF4;LW6?E(Tq9O6RHN}tZU{g{&s7_69o-Yx*xO)FlkKRUQZxpvm5l*|(PE0a zLXWJvFAXEpnB&;=|Mb{V?>Vq`E-X~&f+>M3PHJ6-Sid4m{~?Q10vrfHDr- z0cK_ESsEt<)M#gnz~LGHAaK78bLU`@-~s9<;)96zwaK@8|#6q#or z4VX!x^8Jeb2Oq9q0eS}f)4)cod<$hnXryz1CBYnG?NC9@e*OC9evnnZ0Exw{urOLY z`AyOb?pKn!(2}^;K*sXsxL;5K2DSYDhY=rhYsWhFadS9&29{nXLomk3?fUFToZuww z+yITHW}kR-fccJ3{(S@sew!57=rT{UZ{476U`}8U;kwxvS@o7_Vp(38VO8*FG^Sl^ z01ol6utOV`wYqL}=XA?cjRQ?j<{}hBd=Yv8Z6gOAV^p*xbFW9|`~oA>rKPJ~U;t0~ zkP($Bd2mpOZsBoZAjb01P#V$>>^GLeGB8yi)Sum~2CnPJ*YuQ4JID21^1Y{VX}6tr&Wa1lFOvHxm?jmkIUU*;-F<;aW5GJnhHc-ALiF#k z2!Le_a6EXUEN(1h<4YS3$&WP7sRV#Ky{r)?Lc)#Cz?IdT*$^BBhxuC>y(=?!x-_@WdP$lD(_qBaPSx_u#>^D%EE;hOmBE=}>P+Xt3L)1{} zHZ1p&}XM-8ow=V8~EKN(#6 z-hdZBY}J~gSy6ubHYrn|W@H%IRAiY%qBH+k9UR#MANpcIvrPil&d8Y_ zpYdZ{Ux*LT1JJYCThV|h@T^4di$6HZgch_W&RljHrc*;3h%LSc*V(PtQ&I-IoeiAR zJZk-(`|3Qe3i#1|r}?z@%`GZA2+|F@jPlX7hQ=fWI|cRz(wTiqMzVIE2BOdNevx^u zBW*A~+?iCKK$TrQ+QWcG%;788HOfJg_>uc@?!8z}fl3SaQVb427-Wkiu+iA$RPX-U zXCt5D!DTV{{*srs5V#85aH(-UMJlsA>hcvn_MnAPJU3>kFUJ6sN2ep!mfD9~Fx+6D zFQW*-Suj%Q@MoPqjiqbi9Ey$7RZJ^t4?Dv_sPLtjumak)aU9IX|7@w6qX zU%#lNom+6nQ2BQ6!KVh~7Pw_9hoN9e(|x$bNrOK^<08=vn8 z8Pf{@pjlCZ4`cR*fAVAGQE2#9HWo+hhVWJ1CAh8UXbxjg4O>ctMvrlr*^tU`jD-G} z)B4klt;7u}0Fz6e+L`|khtSyRCB_jIq<+bmq)sv*1rB&N$wKr3C8-cf1H+xhZTeW< zvSYbrivuT)-ez5U$_R}Lr$MBBVjOXAez|9*8`OmqtAX5H$F^IdXMhH!LTf#~qLt#% z9%AL2AUt3NFr&fpq1=EL$uSB77^nml?2$9{M4WJ%e=m8oweKl!0r}XnSktnfG%rgQ z+AUjRR}owu!)EDWD7`;{6hU%2cc(bAu&_sDnmy{(n~ z;l1C$qY{xN=H$ER_lVw+*h88n{M-Px*!K;G4*vSy;IID%K#Q-tk>s~oR;A;{lwnR{ zQUcks=wv383gxF9@w@umOS^*+-oGb}VS^e#V+ivt@V4v??@!Eqtt2vx@+%+N{{}o0 zZxy{KfJ4jH^>!9>NS<@g`HmQT)Kvgkii$?=Konl5s^COPCssx^LYPX>_7YgourZ>> zeH^OMBdwtjf#z7FvKY3)S~tf-SDNY$nWhm~*W6%|fL)TIAdAyE7C8Zk0m41y5y%|q zK98pG0<*m;blvzm6<9zcT^ZDaaQSmC;NJK@{UH>Mlu?Ejlixe$q*#uT%0#x93mOf5 zI1=~|G16t-Vy)!;YyYLJaBld38Ab&d?9G^>LKXwtT2ui5Phu&FLgu0pW!)`L(ew#Pe@|o_8k=?{+vdUxWK7KQLF!TkI*2sy z1p^oEWLyqNT#y;>h{eapdY&~O8Xn8n4*s^Z7w6ku z^}jT>aR4(XzOEy#*F_RK`Ob&ek8SM>%%PQ*ZaF_9dcTc9mb|i zY10-yAMLVm{%-;@TNDtu#C^S7l0990dvniI*>0`J*LLmVJObp zFs5X=h$-Fqgj|WUe!6Ur`89}o!k6h4j%t-E8n;HrlOMsPG$i@BzOn%ih}hkzVR5FJ z{2KJGKW{@l1F+zr@J@J1Ce5C5&IO9Wl&SG@08VN}Q=&66nc3GkJ!!{yqqv?qLAaNU zLb`#g^Tf=%0GPBSKbW|Fa2J1gex0C=2B-Ui#~Kj%V2kKNH84pvyt?`}JHOxxzahgM zV>a=Jv==1#eS66ksmt?P5aOcy*F1!EFTTFp{gqe}I3`8k@xiw;|3xITKcG?=_%}Vv zDofUBWAkdZ8|01#YO8c_GwJ7YlIaxV9%8f);>`*pGG0|ueGbO0?-r}%%#>MNdE zqETUxP2JbNUpE%s&Bp*tTKK(v%9RG}&=b0M__V&)Dc$<$HMYLzwcXB7ez1ngx4i$& zW%VyFjh^fe>B*F88{nG)r@D3;y31iv&*(9I07oub9i#W=yVWeg2EqyDwgz>6d*H=X zllM|?d`Ku3$1r?fuI)GEVWdw)nH!5(BYHCo%EUd5ySb=j2sJIOrEX?HB(nUe02eMv zyTK;^rHrcvW>F2KZ;c8tZa^~dtbt}YxZQ!APnkHE=h>j@-<$FS%0)PT4Br}uL5ab% z7-QiUFMXhRdX`~i??{{rrJ=hNs1#b~BLfg==F}{TjOl!gw3rQ_@3l8(HANHRL2+2! zJleq=TzL4YmtzXuab)IA;HXrt-a*r9A$?zM1|mETbF9kqs!xE5^40YQZ@(_+4>T>x zPCX1R{M~Lo8qPw@A2Nt!{DljDr!0kA6I){#3S~IcJ5Cw$+ULgObL=B`ny^zm0Va(} z13z5v9t=^~rtA#=5(PCS)g&}b4Hu1q#ixoX%0#x7BBR2Pd2~~n8dq4XU|mOZUN^;E zj1N*cyG{f`1LqWOmRVo|{7hGYq!)u!PxjF*LRF~D)(Vri0TPS|m4WBaI?>gW$ZCdz z>IK~p0HwMy(I9vkG{nQZ`V>fpY<{H7p-?i`bhn5&PlQAvdLj(r^n2f@`n?&APM7Wp zaxljDwcs)&a!7&?*@FWH9eCpSDPMl$>jse*^B-CZJMcgk8|4AKTw_W=%ln;+ZtZTb2>7#ug7-FFF>cB7i+t#5Er@<5nVg)SIg!%zqrGzq6p-Q0c`RA)s=W4#`xje z4N#IJ4nHR6x-@S}UrV-M%9A~n-ks+ITD(P!$+IiXz~O$<`iytfcuqvL#dLyg-UauU z;t<}i`i5d4fSKG4jS6An`e>9ZYaT0uPlkGkhe#RZNk;*@0W82uIU3B?z7p>6?VRA~891rH zk%t6v>Z=1iI*tfr&;Tfvj5PCDz=Bud_0MIxUw|u*0>Czy+pJGej^OiOi^TZfC7Q~2 zW+^<}ceY7zSA{eiMCEiZ+0#U(Xg;q2RH>)pxH)LK^}LEV7}WXA!U&hK?PvOalqY*d z>J4Qj?X9_*8GRJ*0Dw?Rd>^~+mH=_9d%HoomVNH^eZ0&7y1f@l(GgX7b8;C$z--JS zYB2J3qoE509$j&Ymox@U(=A0pQj9{)(T!DqGNU*Wlq=6ZUr`*6Dfg9!rMSgqmw{zY zYvzC7+rWn&C>dNY%=sF{QSbuf`M!pcIrQ z3(p7O3W8jvinezlICMPo;brf)zobmM^-BO);>aZ1@r#Du^UW`m`QWs;#rOs+9_gX^ z2JXN;B7n5(j$^%wb^`=Zgrw!2vW;PW*(%$|d@sPKxI#NG!Q;8W+dcfQjy*u-aDB2J zl7JJ1Nu|}VXMTAWGWIz>k887B*5EGBx@Vs!d{9SR>mC5CI&&|mpVwFE^X@qt0HEGp z3v-$&qmFGXTDGkrrj3ZwJ6G5HWz5BBotHnnTZIGiyvR}Lbv^zFILdRR%M)t@A|s1# zanifDf6=^veT5H%mUR!nBqd6onE`2tD}1(_>kIb`S-46-LdN+Fv@}z0F#_eDZ5!aw z5`er35ugt{-2RnMb>o=w7Wdi+UQF*m;6xzw)MC7^3|5wYIKlfO`M*cE7ayDLy<9im z4(ZidJFmT~_qof*C5EQQaK?`hKi3=>tv)9G`{nv4oVx-yr!ExLbMK;XyNz)fb8H*j z8s&0jbz8E`GU*r8uWYiMfdD|0&<~E>h)Cj^^FQzs)Hx64qxQkc%_xiwf;?9Fu3rX? zLW?!v(c(F4DH(JPOi@trE9Fz?^SQ>Y675XDM4{Q(u8}#;X_e57SA}k6Whdy+@MFTu zY3#I$Y9G$hYmlZn;{EE9HPV7cDImF`#iQ|b#Deep=D&@W#@7p|S$0nITZbHhl0-Oq z^V?q5Ek+*lL{T^>)>IEQvrW;|%xqK2wW2sA`unb9~PW;{E zm0F|k3|$z-If??O)>T8GJa|U{kp^&Jc#~7%%u3-vxhWL`3PVo}Xbe}4b`oWw&S3)5 ztdg7^fL?1!y^lFK#yI@gHXFh{>oBv9?>D zM|LA)aU%-Ahvk?&8uB^-QvZ+eKbp7Ck#O7aLQK|IILzZyU(14vyp z+Jobi-(b-7+{aqu1Rz=LyAU%I4MP@B!GL)vaBs3->ojU1(eQh3eDjMLj|jD}rgl1K z?AuVb-}?68-1nxEqf8IeNOl@~YA2UZ+iF-mv)?WI*V`#51#@b^l0blK+Y3+uV*t59 z>)WC@$QyyK@tz?(oBO5!WHkn^flk`psK&1t1VAH+O>}~7G6VsblpXaeT$H$8k!N{q zxF>at2t!a4d!;DvhJ#q(pW!j0OiwBf2cDJTl5=DUdxg`c*HN=?Mln)3q(S{Hdj( zH!FbeS?3k#g6iUQ>Vj(o@Ju6iedeImf+N66#9ESGD(V@kiZTk|JrtV6_ve_sW}dPO zyc7@ZLxb}S&*ult1gQN6?cN{2nsYl+Z9MT#G@5u<;SN7^0#q%9kBzT1@+l^39t(dm z0T;EfmJR8RYQb`^`&XhMXf?v8P!JoEiz>7#ihHT+6G#O)QnxYDBNUm&aE#4EYh-ZM2(d?U|1Y9?QjwJY3f+yM=G$A+n zDZfZyBW54{Aaie&4Uwn3%xIPvrwHhI29*x)V+d1hmox@dPJ`2+rjn_A%B2eTH`jzT zYJeyUk0|kbIS|zvf!ui*c+9@9Revdatq&^@)t&h5Y5qQ{M}Xt+o#HycFV8di<-RLc zj9iyW3BY4Gk{#*%Xw^B`a@QO z%r~eX%G!~W)ujn6=@rP_Wm?CT6{I2QoJXU_hsgQJqvC&s3bN5d_2T1+?W(o>hjy$B@0<)qEsyJ$N#nBSRq^OR!>_bY+kD=MYO!N6|rGChZF zcZo5s@|@TPz`qs}N&IL0lm>o2>-=JE*E6IQnUrA|z1S%#qctPo&1d>refzj3{qQs_ z0u_8Gv^_nK%hqp<1}oPw-g6j6`BcxOZ{=$#v-3j`_XY;CrGdNAAus^dFz=U79}P-f zPdgW^jO;>H@89dKYh9rvDGMwUkDVa! zi|d&4T+!0Lo|jPNdz=_kI@#6Z*(&p%){wk3=ST7k6-}WTm8=Xdf!=;vw`BI=x27`D zB78`5Eb(d1S9$HmOQ581A5UaM7btH-1I~e~WQda( z(xl0Dbe{yX-W`pkc|PcVt-&<{$In2dnTxgMPyq{+1DYAzgX=Y)N%GYx3MWvAN@*>3 z_Df-DerxK9Z>Mq!#93F$p-~;FOg7FC?H4$;)*!u?Y!DCh;GWba3XS@iBp;u&h%@ge z1#)G&Dnlr50-x(qfV`gpjbbHa4j#Zw-!@>P84ac3BN;4QWN_sF{zU{BegU+!E}>Sm zt~if54qPe0Ic{99c2Du^`%*z1r*Q6KY$%iwU^nooOf;ifwhhk`!amB*hY|gOA}|`5 zE^w;*H7L0+Exq|n$F&QsWnrcyaY}>3K(@wqH;6F+ANUtToEuw~`uASpFAa#*| zlKT*-qSE7f{J>~m&ou$)M~#Na&;#@ejFb>Z6z%b_SUVFEX7Ddw47k7Cn;GzMFS{BZ zF3O;HI@MUv>cX!7bQ0iBYx@%XO~XSc;~Ibp4y>#aEBr6|0r#!PjG+c-dDM(I_GO)x z9u`}D8l$4kK{-6{7&nR=uZ9|5$0+VN=o5XB|M$h~!biD+uQ$5g@zt7jlKqR9KMX^G z;XGKt@I}3Z3nJ~U50d#8m19c)tt?pFSE=FBN_H-YyBIf)sq)#epXrS}-xX=?Ct%vz zhvx-=DU&U5II@hLhq$5}XskiFjvfcPA}@*F6RM>VC2A0$>}MH2ygRt5RAj{rL(eXA=C&gE z(yVAl=IeFk^WwhYSfre5co8a>ZMEJ28*{v|zXFjAD!LfC;7YV!k9wi2G)MrBKZsw@ zl_(&$eVP{nKpE&MgkW(Su9(_X?Wj@3t2t4jjV&3tNKz!{@5-Z5a&dJkRAFAWTcg1) z;5`T)z~SJ*Xi9^Wb24CJzAg77-U1qH2C$Ga3QilE6So3oV*(I2xRa$8`m;6TArB4SZT%Dce`}sf`R#pQ~TG zQb_}}_%c#kx*A{!g9-i)pyNJiIHJjT4j(q}S-V7WNC#IOPUl)_F9W(S*7|76c(3W> zjoW#j>5lgUYH8~XZ(|svE!R923gQMKzqgi;Yrzx@*h~#@IphixH|~Sk;PN-LOf1v& zOAo80dET8M2R4v=&@_mWb6X@sqD zA}%kA2fVR1Bt1S_8XV3|pCr}I!Epua%*#>jB^t3^f;@91FUgeQ+rNhcTGqnJxA}#l$iI&k z%f>`EtsdkQ0~OlTe?|irK;&Cf$^1`!`Tw34M(jpiR8*Ajfg-^E;aacR$^ivRp<4F>x>F6<_BDVWt=<3rgXoDOiJ!V^ zl}{O^Wvyg*HviLeq96oB_s}^-#Kg4EfHn6H8)-E(EJ|g-cke4c1O*bQ2h|~fCYR4S zd*Zk^DWS8JvLN2>Q49xjurI(L_oQ(!$2M4U{iYw9e>@A4Za{Y|jmrFV=4O3O(ENTD z4QDqe75D^LTAB7w1G5==4V3M808i%wwElgUs2C?oxx40mnUZKtu$&DLx)VIU(AB}$ z+>%>fL$7?kXS3wdM$%$P@8e6vZ5e6}u+#3pY0lbQVOBEGGw)AHT2Zh= z%n0`;)pF#8blcdqftEypbOBv2$Q@JahXKrr-fQFIS1}Z zR}GJ<{AS=T!UgYX!UjwqH;88o>WVO+YlvD}JUMOpz*QFY5R^w+#~PBZ9j#∓$A! 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

E=d#%)<39wz!oqSN1k%rNJ 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

1{tw;KdV4B7~QCl>6_@Q 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

;oSWv7&0p2XW?vc<+qkbYFJha7fNc5) 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±^u!6xiVx9c@d?N{{v}$-cld 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%0D4F7GSX2VQ#VrO%X?LESm;5*dEt_d5m5iHu7W zzE;}B&^}uJexY2SF4vD1MgI57-?x?f_o$+;9CG$N-pia@ECe!Vfo(>K?Ji4p9A}pF zp|gxQ4q##tqk+hwnek@_zeFaTlggYp1OjYN4wcij5KA*I5z~+h;t9_cDLL_tK=CG&Bs8zIhDVFsyF1X7KJVui$-N>am&?5UoIwWAXBP zl5A(X}8k( zs(8V3FN6;jDfE^xdPVZjm+N;*@$!XIyxjSHmtCXYXm`{>Z-BhhyP>4L6B>IGt`1ND2DUN{@0@-qfOalqx3B`r7cNh$IT(r;Qo z%w)eIx3~|y4k@z5h@5Q`=;#gOA&sU>sEdJzv*M+qMK(Io-8#msu)_o?v!_wAmB=sE z8SEeN=)UXm4q6)t%PU4>a_*t`30&ax1x(c>R3U%fh6NqifU7g|jB%(cfvYvX2Fu#2 z$c%d;!kH&qJ#%4E2HibZGlMdy1yGfa1Qc7Ov#aqln9-&w97F4uotuD?;PZ!Gug z$`?8X&6vp{hWk1qhmY_a;f#_@g{?Mc07GIiOHyg*a$#h5$#K?Konml)F{!pdGfJ>V z334V1Y`dVx&Xy$bjn|`Ob2QGZfI+^ilO}lvN89E{+c}7?5ZR$kWLEtu1R6^OW{JiM zzBp@lJ}V?8OZ@=4jo%GP_ zM?8)JJn3sVWr@Wo*$_A_0S>>D)bi6L&iW#U&sx;~a^Zo#r4>0mOJCFQY%5auK}2rW z*+b|Xwz4rJGgnY?V@BJ5@^; zFtQvVp{KXxu+^)xN|@BqF(!Y_&n0c>8LhhfX}SJ&x#+O|ua)a_r7a!czw_@3IB;hR z*%dHVK^Db*?%8Lb{lok3zyHg{5qze6rf+3bLyGXjE+_!SlgE# zFiiNS5pR%nb%kwr_)+m)BmzTcPGT&V&(c7?J4}weL7W7ys@^*|N)q7sA-17~jeC(n z&_P#3fzF!FYx_}9pV1p}BfK)2;GQdR1fQxVGL98iqj6Cmqn-kNL$tF#&{(%!*sUEI zfwHJ0;Qn011Ye+{EPwg`=|4;1TZ=B~8Pz5Y=SiNldw#-8#&+ISyE~PQ}K$6fh4oCi| zPtuqc<4W}L%1^jI(~J(Egg>+RaHs%^+LXm^Y=h5Hf1`g@JtF>QeWX3Dx_qfzzgw<< zRrvT=`TL2|{^@evdCS<`eVq05EG0Q>v#3k?P3sFFLo;XK+lK@R>7@No3-bQ%NL2sB0%}mI+zxh&W_P?kKp(eVYXlxYO}7 zSR?0#!4I9i;;-X_-_kthUHe9fJlxTh z73540VxPdj`Z(%ygcE~q)V&B}ghvvzUBU!9LdlouLeNBw1iNoy&*^f0I7eo3mtk02g(-e$MRl2>cyipyQzLS>Yaif!hAa z&SrRIu_&{LQ+>gVk1IM8-lV=j>7U8}TS92e^7?*xub6ov2GTg8y~ zh?{=KSWrIGs>`R!_2F{SSr@8vG&fr3v%F20dqlSu0WMTT=$k=UH#^w-1K&` zA1T-0F4wn}>w)4Z?urhDoJUsF;5dncpR^ke@ zkt2?dF(hxU@IZVq0LMUryqN{D_)K{flYPXUl8jMenV7Q6)Jm*-q*s@@*f+Q>zC+$e369q9=Cnr zHal-qLO_LY)}rH0ic5k65bW^q7a z1Unh}f-D9ewK1_@lOKNH@daS7tBE!T?i4&TIY#+JxC^-qS8=c(`3!Ipj#ohc^uD$O zJ1!s9KGVN$)ur@*tX!Wc*PT_DUB$dWyRE=>fpPAD5DrkGQm%)Kas1_Siwc+@F4uRL z>zm4b`cceyHm3Wo%#6jv>V5`0bF!?N0FyN4GxjI6}Dv2K@3M)Nc@d=;D z#AZjHgJ4azP<3K7exzqbe}pqi5_b7OzKQr@dv$0n2;&Y5+qrP}wKWFz)uCqSn8R@fI zbty9ZjdK6as>@1|uHgBd0_F;sx&yNOX3V`s>1j2FikE-CTt8T@zgCRlk@8npW4fi^ znC!=-Wb}Qv9pb)9ct+3ZzB+MqGK1o#4!IiZ2wqtrUj@R^^VPU9*g}@!vWu7?>;%#g z9Y^^!3Th*si<4HlbUp$dd@KrKEH`_GvJX7Mb5*GxjK-S<@L3YHW1p)ayrZv^fLxRK zkq!(JmzwL;PRL}iHM~DcI*!u5qo+q;s&1)0F#M{~=|O6R-SF_QdtM)8m$#>}(FnL$ zFvL}tKv8&08&vnPAs?4va_Xv%K(+z%;&oNPAbzcFJ$lov4jqvOx1GtD_uU03u4kv|jPIot|1!X05{pJ(^Nvlq)4pD!2vDCGy``gr+!XVvA1 zFbDZ_)=x%VpG znQjbVSKKmL?C8jj%}SeYOUHq}wdsuaSj_Ceoh7=h|Drf)IBDI%9kkey;>8t8cCT~^ z#ZBuvS`{kibV}tR`*~<|do}V}KiV6`#7|XRcV#@VFZYHo^wk^$fw?N7CF}s(+TNNwlkF+iQ zRsUO!ll=o7#Q#dU=yzQ{RIbO$^*e>7`nc@+^0kS^#?Flg^E1y_PLJw1t-@PDc}&h#B0~dXO2{uvf84wwO@B9 zDIN&{oLe`RI53wStQ_haLM)JTQd}K^=HDb5fZ2MLb7L(76CxKpq+vyC8 zxhDMGnZA_@G#o~&8*sn9ZdvTYy%x5gzzNGN;fT{lL4mBrm8Z&i{m*P$QFR%(b#9dK zBcHN1peMEIslFik`T+MzeZdaxt2lrKz>eMR_}@{Rl`jB4ZIfs_IAy*-V~4;zn(x`G z?31`seL?28qRy#q%-Y6yjPXOCp-;=kK)xX_;^)yb8Yda+xzhf#<@(KX{c^c}wb1=| z$=AMe_uY4oW+_(g>CW>Dap0&zUuf7nU@{JrL;m+&zkdB&%Co;-F4|J|x5`C7fcb{< zH$CL9aI}EI0JJK4VqbC^BS(4kKGK&Zx`=0NtBz{aW=DIn;$}Appd-}4cC_yfj^IdV zNn-~JgRKUK^4Dfk;ocOD$mc<#=@PhEV!Q({@-`xf$;d1*Ig+#-X}cr06<#EZEFsVM z3p!B6HnYJU+)$^~es+^Bu$i<_nczRgdqMYfvf^}Ku-cZj%S~(t;j)6iWd5S~>Vahc zCOejm-#({yp2&B&sxqQ_$97}lJ(JBS**xM$ckOn!-OBe&c$2>EFvQQUI~ETymW^yO zB=XB2EuLv{gmsF>t4~tD5@SyS(^h7(f@Kh6DwvVZpxgu>Y2K%=I3^S$hUV-Z`r^`# ze!GRXi+!wIzgn(eDc8r#*8eY-!iBby-T8M5aNte>a|;LoQ78^V5Ba~n-2eV^(c8+t zw_N{DxgMnF)E)yt_BknDT%wQ#l6Y@Yv~*jqB2Iy(=sG0T*eJ%9+jGFdS6{2RNKkS8436l~(Eg=z|EY5CkIO}?EgvY~>C6iq(x=s!JO6GW4xD6^w-ElXT2!8T>Z!XP zdE}8d6{GoUg-ALdL#r|0RjzL?Ms>HsH2h!zCSS?v@ug8&tia&uG(%;>~+ zl9rKdcZz}7cbO1qhZyk7{pk$xN&#a4OOgN!zN-X-a7moMdkylDgavUQ1=>g-2Hp|v z8W>i|3IvYB#n*^ek-u69MID~;dP5FVvCongEF!WZX974&1e|UjNX|@;HVSKpQYL>% z^2#4QKEiuTGWly;l>Jd0sIMkGqrMXvE`7m7x3+!3h)<%2ZYwD0#C9SsJjj-ShLZ~` zy@u!M1l6g&;D~(DcdYOQJ*cSd_?sw~)%V~dx5t5g!^sE5Ig1fp0F%`|)q665mH!4C zsjSL;i;j(Yi9AW-O$9T$Ph!xqM1F2(K)@mHL7T4L#Bmje443R#yr;S*IK5K7f4O{q zyj;IkE?RY=-*owtr=NcMtB*eV=p~n1Gf~{RcLE3Q6fh?+?M8MfPWj$4-doD`SIhMS z<)T7{&dR*CJgcu=mVaFVgAV=ZXK`qb)LDSgL~+n&Saj?Jos8eHUzRXjNKReCGf2!( z5cM+zn_4uka9lkXn9-5)W|rg(K};4ieuN}pncOK|r^=0RCDte|N$_44s4>8XqHVi> zrsI)EAvkIRTiJkZGdcwRmH5~!@j#v1Ng8(ME|lMBjw2e%{RURB$KKU?+za&TuD zP)AU&X8vSmXF&(zTiiPR+~GUWyrlJ9{fYkR6kiZ|4SH71kL+~it9JY@jw553A6DP4 zF;K=upWhX}(N@mU;ZuA;mh|u9u_=0`Xn%m`nBuj$OHXx_R@mr zC{RX+JSxrte=L9k+%0=Pns^{DcZ2=FAiLSfn6zlpafU%}%^q*ay`rGJg1@eS)TA(> z;|vnkU1xGQQ$}v^Q(+y|u{FhKwK!_SHdvs48;L!kNfQQZ(WRn>q?#;#+ zJUe{WZsrTf#K4Eg6~*Obgu?#++q?QFJ#O2a+?_N^Y*|)h$5PxlPTJ}Bc-raz;D6db zw=>POGqv3&>PMzZt+5ovQe#E7b<)W#9*Wq2SO5g~-MiD>?agrBy?mV zH4A%Tj|m!E&j9=LGrLstP19~20;D=9VByw4|K;b_|8RU$6R3DW zRW_K;GQGT@c|QOZ#F&5Ul84&*DQ8M$zA&lmJmoYGy!7YO^E zP55+~5E*pe(RKF%X)RCKS5Uv}3r2YM@_K$y=ePRnX#Gp%#Qi(t(=cRdS!!L3{4ev0 zzDAd=y7+(bizAV7^f7?Tzf<}rO8-c9^9#yzkJ5H5@~H8gV*XU1a*F(IRT~m`_Uzf- zrAwEt(j#o_XCQ;`$NVv+8`K%`+SzPyL1b3%HyglZ6%m-xG^4=5dN!J04<^E)yZmz* zI5jU&u#C#%O*_O+Kh5!2h><}6rBk4Id;RCq*2PN!p`8lQA&!0cPNAc9xLgp*FfsNF0N?-#p z$0^-orv2#AqrL0buWKMvR%FQOy+yxrMP?fG*(qzsxaSY zZB-18!`~_~2i6OlRdz((@65w*8q5l1VVK!)yPMMiG+FCAP4;Lf!LMv4?Y zpi`ZwULBb^q*`9z?*ba>{MgA^Kq6B0X#PR7nGF<~@U!Z!4yS3p)V5v)&(#l{K@w164Yeu!;xhVRC%O1aA=wk@sY5p zrZ@*J92~M-1367LDFU7>Aap;rSB!*SDH-iUS{9=;MEluJht#afa~p=o>V)39L9)~K zoqd5P5E-0Gy;a-cS5F!67Bcj#EVpNU!Q@o89-CwqawbN`Q|0!_mvut7Y#|$Nd3i`#z<84}gG-2W(i#o#(R|Eitf|wkBtZD(&v; zVeHtHvuy&?Y|!H66G2xh02&Q)9HZqnG!9=6l2T@d49b`;%1m+*z|mV~FD9VM^S#tb zYEfrY1LZ7hq%$!%HSHVe{9J#eb4gDHQ00+TwnNw3NbCYB<{`2vE6}p?i(q&*vzqNA zi9py=gV{bAh!#bPch*(lGxH^$t__;Ay0dMy>gWZvQeU3^jM!f?qw`KI@;^I(qp=_2>Eb+DG+RnDPa?@*r(M`mA2t zEt~LcUh^pQWv!?*$0%ET$nyHR^*`Oi=KJ4M!bd27MfUyAbPxMnu;Nm_<)X%tUB$YU zKSc>_0Ok~he_T~lN5zWF>y+N3^p})Ap!C<2{*=G-AH)Pd0YI4s#0UUs8de*l zV8VNr2qwc79V58w4jP_*76wD^EZM>Uv51;duMcNu=SF5QW!@4CvEF-w;SM&RZO0B( z97|D;?oxh}P{PMB zuU)%_RhJ)jW=1?(6$qZ84PbB9kEL_3ncTiEXXXalIs$kG$R2yvmjbJ= z7S*;ddM$1T;90txrMF{m{dyH-`FHaflM3r`H%2MjmNBYrZV#B~{=1Zy5S$2Ecj+&% z>(zZh);6;Fq$*V4s{vS}kIeWYz`@dZDhn)2GnoG@z*a`v=)X64l6*e1DF>9y+R6C_ zfJ$?ECAAH&f<2^Pe8=S%lzvWf`IPS6q0RXZ>D1O|yL8&E?5iz-r5*0oZq>%!Oad=n zytqu~o8yC+IH~L}C}C9wCz$<&Iy_!4!*^!(Q7~AADRdLhCx>PY0M4K=o7EMKm^sMI zz{0#H2RU~Tkpo4x-pYG7SlH22qk%8ffiZ|TLA)L$Ek5-iH7J{jqzC}Y_^fSA)-8ht zU7y8|0&;~EgUDJ}qa%-|b3YA&wGB!hgnflNtGqX=SYn%A0Hgz=2vjo@R-PVsj`Re2 zNRmQV*jpp0)&`Xfqz zPKkjGfDKk<@ND)y87p83fXpz}=0AOE#ZbPY+1yLIAg;{@kiV1niz|rQ0PZbv$8895wUWdK^fpoG;Gye9T3rQ7xYFYe#Je|YQGEeQmB-Ftg}P9(5qCp;%2 zxp>WZ`t<1my(@a190fj%`6raHN9M06{TZcOl-{6#0()i3D`q?@z#rA?nb2y4+1M8c zB~ftF3tTc~I{`)$Jn=v|5I8miX0+;4X-4}iGC@mk_BRAbtRwo>Gs@|{FWaaTo#Ef> zP|ZxHr!ymvEGAcp$~JV{$E#%)LqQuuhY-=^zL5>ijex)e{aRMy|Cw#e{wZvoWfedaL}lyRRh=rw&V(DBR;J9($qyNtF^x(j$`IX3dtdeA=7 z2x!B;(z9u42Lm<`^&{68gq^PrMN51^g6?WrB3m4gb)$3Dmra)@e1CJ=pOKkYIZ|zw z?a^&xkZ#;Bw5{hxUVcRkzy%xdu_^x(O8-ge&bQxwd!P3AKE83|#)}lgTc&d>fpida zZY8iaY?45oVZK5)ZcxGrW&kjF#SE)5?^41Z8XVIMFtf)q(t5zOK!&{6d(I58b5DYr zUJwPc7$}P$b<}RrC21_C^v1Ylsz1-GrfS+MpKHb$;DMT&0V^$E)AeIY_)ZJ} z0vmuiX9``bIkYOXN2@Y;h3rSv16DG5bi0f) z;ViEsmuBYAarTqn?#Wj2BrH#d#C}|AGJ5CO9OL5Mw4u#fXm}U%clkwldosFP`h=|lGXt- z_GXqPF{?iqprRCsP3B-)r^@-LDgDsf_?)IScj#v)h&8n8)ZeZTgMNem5TU^3_XtxREdVN6CT?sTuUM#>l8uN60Y1WQCU)X84TmOi> zB4DHaLsl;xK+^PO#}{Cw1*eGNyDb1M|4j*dTL4^e{Tam}UtGCz<(U9So;hy!FQ5cQ zJM#q;(bi-di15uAZ0^V27_7tq%uL^vp=+$zyiWPBdNb{rkprT>u2OAQH>9M+;MWX7 znHe;dC!8fs&>OBlu$X8tjAl;@$z%XC$utuPF0}40uM6p}QS3y5mNghn&{$)J->T-g z=q8%vX36lB$>UalAgK1CrQ_aC^()3ATIv4f1<$C9gFb5W()MQbndUV^Y|T8n{W4IO zzEp!z6_|Gc%$ht`y)EjqJwW3;Z|u;ck+~n$U!S2ath9VZzgTJc4W&Dj7_|JFuCYNM z_qPrCYa7-%q<5T-?Hr10Ytn-U5BA=E`)#~Nh7V%COU~%0bdA%@aEcjLY5-;MJ7g!3KI^k)pI9%*Sl*;`$)4_-{+S7S(lzgvQ3lGR zeF6Dj*+AP6%Zyhwc`+JPr**zSMLpUnUr-cetYj_VXGsx{$F46(_UE3AT%MEkr}EkS z!r#sMl0_q+D_6e@9|i!#MWm9$xHtZ=mZAfCd;SgYptS^|Ohro?q(dzdUw8(qaI^b=Lkq zvlC^rJzGlYX%M7DVwr)D!eD(pQx^>GOTNo03njc72GH_*lKE$Jja3%xW%+dlEjUpO zCyQZ4re|W?^GyP#1UAdr3}Y1u+`D)0yEkv%#P?&alY_cd0SyiUz@C}+DFNL4kka=Q zppo@Y;6V*=+Ck1v^I;;1fzb5(YUjRAEQl!;)t@MQ#dU4WBf<_u>N zK&jV?RFKdk0@c+#(pEYuyna#UZt%3!p7di6pOe%0GF zDuZLm&%h!(xn+STaW9&9>W(GVr#HS}z@PO_7%TD%KtlVC05!hoat57msR#fIzR`jN z(DGZ#cZYtl0UtmGD=c@ZO%Le)mmhuf(b0z=et0Z;-H2W+38XsL#S+QZ+BGCl2L`-G zhJ7;tE?ABE2`75~V{&EyJNOn2R%ehd!G9t}06{!6gUI?kwCyDQHAFGdSPS&5%2bD# zH;_gHtPVywuQmHA=}7tXX6V7Tmq*VC%Y1bver6k%ZY(-1E+FmtT&{9W0G#>L;??z7 zfmE;U`nl#)*XgxG>rl%-G7U?|oZktSMpjEes)$(fAlqTI$pw_zAk}NHCEw_tMQ2Ih zkL*v_VN;!F8&#k))-0K7+Lk@8Wph1Qb%4XJu5ecXJc){Z0n1tU>i|H^TtpoM%l(0J zsr(kbULE2&fpWq;>C+M_V)JPA*Y6qX9Cb5VPyuu28RRSWHaoa0hqyR4))M6s3~l! zK%g0bYV_y=7ac@cL3qtGG>bVJcqiqp+hz@B=>fPGK=FW!G1HK9GdLPScse*uw*6Jf zmX@!@a4*OcWrpmnmK)_w=b!#}g7Mx;WmiWG7JIhm5L(hckfLh88@}GxWxUO>L^p#~ z#MvRo1PB|IS6FGU&cL=;a`DM*Fg=LJ5EcV5Ov^qoaoh2M13wye!r2R&J93OJG}p*=*rdB=G$C^L=u3SfK%E z0ifYu0GXRKU<2qBP(#;Pr2(Mf1W<#M(Wbva@G=cX6~xE@TrTB<{^FG!CD_pcFarvj zAk>;c9|#_o1ZvG|4+%pWm4POiDZf^pZgV^UTm$#6?MU;j*CYPeY^TMO(U1w8IDv-l z172HtvW{#jv>nxs447}+L9gE`+3VK;<$gO!cSJv>oTHDP+(NsLXeRaFv+a}e1z{iQ zv?U|MupM%hL;^C|C-h3ACAdzW84q4vm3D?_{p#^-G9ps2>hoM5zzU8l#_M3uC;_bC zyDV5;!4by*EJ(OU`Yk2wVfmu2#`J7zd%j6vbqNeR_ZZON=w@7()f&uJW@o>H)e~zVX@Jj~iW>kLTy16m z*DNjxOsr8f{cv>n=CRpwnlYUxzBDa(WD2wrxQ=24;_M>22P((C7_OUsyvV98yp3yev{=Q# zbFAuIB1pA4k^le(%t=H+RHwU-U%C%a1Av47dDW%~ro8%Puz);SP()e70NJ9e?hf>q%W{6t8KXBjmW3-XaJK5I2+kiedz-M8ZfNw z-m#}Co24gNM%ei*_?2}n==ZZO%I%YV(Cf#-MrJ2aX>b(vRqpH37cgL;-yvTR_=~Q; zO7uY%MVD6K`y%j>r5onU0F$1L*5{}PAms>&=;HS|$qBy&sL;K#a#9ms{lY2>Knl|D z>Mx!@u0SUc&Gu-M!0Aa~12Cs2`>p1M5};Y2J#wr7DgZJ_*dYk;!oY^_1KjX^+{3GA z05t~yIQXUi0ceUKO|3qZH zmhl`To#U2+r9XXdO&+}ZdbYYI4?T5dYPpc>~q5lx&aq+yAt_cDX7wo?(^Hp#Oj+}oUfQT%@j-TX=@oy7+W2 zfD3?+uPF=eX`q6Wy|7Q^EBZxVd~*fANRP3iLcd?p+X+wUa2(Lx{x%7mdkI{W0qoo> za%1=_vxr-026>3{Nlr#{GFQb(cr-+qVYW(^^AMS&j$(cvny1#90g6~@LT?; zYhJxUKHNt?#4i&55R4QcBnH{Ce}{vVI><@@R36vz`o1L``)xjO*at0Ns` zI-pOMH^HLPftN?}*RwSX;CVJ|-S>cCPk$&Ewb9a5k5_3QQlENHmTQZ0#i82s2xeyz*P{~1t3_A2ve9vOH@e<6Vfzxr3ok?a_B@J9CXO%%G1|8dQ)ay_N% zL%NS&-YowW7as^={q(w=wPo6zzLt4#sGr>4}e5@Rs#yqz=>=qhd=zH z4geqgm3~`+6$2n1Xz_>vRLNXHO7jh!x;ldT0ICW&>ICPLlym^306-&6BUsYk@-d~a zXGihBHA`w0w#rsHG;Nf;NjkDFmW$5o)xmT;+FH&L56m;ujP#>Hh$+;8n_QQtYftW$ zjx^sEu+cVT*^QKkwueaWmfRx!Xj`ysN9O6#@?>ezuxwA;fwZBFon`s+>dE$RZ4;K> zE!k>0Wc?781JD3?02rA5q`a%2W6*)uvNV8U08z@mYxSU0P5`6(hcsEXz0Rc#XZwGXKvDu5fJq8!%eG12BqZ?h z#~**^gAYC^$3oKpw@(9K*>3}YBLEE#wz$WuHj+ICPt!deG}iwCxF!Ik+h+xuqcVts zpHW(8CBFs}0|D8YXyQrf^rY%J6G9(kGAp|^`uHGgP4*q@2Y>)T02pW{CsdzfaAB=p z08lgl2sGeq1UpW(b2&GE!OJTF3sP{ZW7oeu!98tAOE(|A1?6~KmY&$07*qo IM6N<$f?x0_{r~^~ literal 0 HcmV?d00001 diff --git a/marketplace/plugins/agent-console/src/renderer/assets/codexTemplate@2x.png b/marketplace/plugins/agent-console/src/renderer/assets/codexTemplate@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5cd4b00b038fa1fb8d13d67248653c38e80562b4 GIT binary patch literal 842 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbB{8A%4(|mmyw18|51{Ovs238=8 z5s2*=rQvKhMhymLus9O~1Cub64N?UG6Mz(m2c}imU(*Dt+V1J%7!tvGb^6(?5J!R5 zU&Ft#~l&#Bb~|f)AlIp zb=n`j->0v7U&ymWX~spJ(~JC-)as}C`rGKn321LT>vdvpUv|)6fn?4pFT$Sw4wxer z-K_9B>Esbh>1maYcXauBpMN^zYx3g9q9nelSMEqm+W6#W(9wjMaUIWW`ldbAz7?GF zAn@(XJN$`@)eRS4G+VAY-NEAA%WNG^k-Z^v7fReaeWOKq+86DkJxyG9L=t?H!y5g) z4(>ccWd$#T(5jP^^YGJ%T` zaW+!#uqdbH{7HrH>~8ak?JnMC@MCgr|NcXdo%Y8hnK$p4%goHO@5vl}z6aC2x|W|7 zEBkhPeOCO}ry-wXoAc*5K7C^L$kNikm9ZjbX&r0w_PN5PubmtH^_KNs_mh_H=1pTu z{2i7&M~~UnXiMhh^{Pi)Hg|gdxo4?r?Kjsy!S(OD3X4O^mtw^GuSN87T; z`=ui6Lhm<4R@-mrER}ct^I^G$dtqGE>;v2PFM00LSb4F3=AWovw~ifI*uOZ-zBBE8 z^t!dWZwwaR56imGZuMHIq2aiXVCH_$?}m%g=RJNj?}P;Vc7h3o~73zw?<|w+?L5W>Z}#RLLBCu{!D1yUi-oQ?HAv zGwG$sh3`q%VT_tq>A8gIvzCTi#L8}2<+k8Ug|-ZbP0l+XkK + + + + + Markdown Rendering Benchmark + + +

+ + + diff --git a/marketplace/plugins/agent-console/src/renderer/benchmarks/markdown-rendering/main.ts b/marketplace/plugins/agent-console/src/renderer/benchmarks/markdown-rendering/main.ts new file mode 100644 index 00000000..b7b13892 --- /dev/null +++ b/marketplace/plugins/agent-console/src/renderer/benchmarks/markdown-rendering/main.ts @@ -0,0 +1,524 @@ +import DOMPurify from "dompurify"; +import { marked } from "marked"; + +type BenchmarkMethodId = "full-inner-html" | "full-fragment-replace" | "block-fragment-tail"; + +type BenchmarkScenario = { + id: string; + label: string; + markdown: string; + step: number; +}; + +type BenchmarkResult = { + childCount: number; + markdownLength: number; + method: BenchmarkMethodId; + msPerPatch: number; + patchCount: number; + scenario: string; + totalMs: number; +}; + +type BenchmarkSummary = { + environment: string; + repetitions: number; + results: BenchmarkResult[]; + winners: Array<{ + ratioToWinner: Record; + scenario: string; + winner: BenchmarkMethodId; + }>; +}; + +type BenchmarkOptions = { + repetitions?: number; +}; + +type BenchmarkWindow = Window & { + __runMarkdownBenchmarks?: (options?: BenchmarkOptions) => Promise; +}; + +const root = document.getElementById("benchmark-root"); + +if (!root) { + throw new Error("Benchmark root not found"); +} + +marked.use({ + async: false, + breaks: false, + gfm: true, + pedantic: false +}); + +root.innerHTML = ` +
+

Markdown Rendering Benchmark

+

Run window.__runMarkdownBenchmarks() from the browser console.

+
Idle
+
+
+
+
+`; + +const output = document.getElementById("benchmark-output") as HTMLPreElement; +const viewport = document.getElementById("benchmark-viewport") as HTMLDivElement; +const target = document.getElementById("benchmark-target") as HTMLDivElement; + +const style = document.createElement("style"); +style.textContent = ` + body { + margin: 0; + background: #f7f8f8; + color: #20242a; + font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + } + + .benchmark-shell { + display: grid; + grid-template-rows: auto auto minmax(160px, 1fr) minmax(320px, 62vh); + gap: 12px; + min-height: 100vh; + padding: 24px; + } + + h1 { + margin: 0; + font-size: 20px; + } + + p { + margin: 0; + } + + #benchmark-output { + overflow: auto; + margin: 0; + border: 1px solid #dce1e4; + border-radius: 8px; + background: #10151d; + color: #d8e2ee; + font-size: 12px; + line-height: 1.5; + padding: 12px; + white-space: pre-wrap; + } + + #benchmark-viewport { + overflow: auto; + border: 1px solid #dce1e4; + border-radius: 8px; + background: #ffffff; + padding: 20px; + } + + .markdown-stream-panel > * + *, + .markdown-tail > * + * { + margin-top: 1rem; + } + + .markdown-stream-panel > .markdown-tail:empty { + display: none; + } + + .markdown-stream-panel h1, + .markdown-stream-panel h2, + .markdown-stream-panel h3 { + margin: 0; + line-height: 1.2; + } + + .markdown-stream-panel p, + .markdown-stream-panel li, + .markdown-stream-panel blockquote { + font-size: 15px; + line-height: 1.72; + } + + .markdown-stream-panel pre { + overflow-x: auto; + border-radius: 8px; + background: #10151d; + color: #d8e2ee; + padding: 12px; + } + + .markdown-stream-panel table { + width: 100%; + border-collapse: collapse; + } + + .markdown-stream-panel th, + .markdown-stream-panel td { + border-top: 1px solid #e7ecef; + padding: 7px 9px; + text-align: left; + } + + .benchmark-cursor { + display: inline-block; + width: 7px; + height: 1em; + background: #0f766e; + } +`; +document.head.appendChild(style); + +const methods: Array<{ + id: BenchmarkMethodId; + run: (markdown: string, indices: number[]) => BenchmarkResult; +}> = [ + { + id: "full-inner-html", + run: runFullInnerHtml + }, + { + id: "full-fragment-replace", + run: runFullFragmentReplace + }, + { + id: "block-fragment-tail", + run: runBlockFragmentTail + } +]; + +async function runMarkdownBenchmarks(options: BenchmarkOptions = {}) { + const repetitions = options.repetitions ?? 4; + const scenarios = createScenarios(); + const results: BenchmarkResult[] = []; + + delete output.dataset.summary; + output.dataset.done = "false"; + output.textContent = "Running..."; + + for (const scenario of scenarios) { + const indices = createPatchIndices(scenario.markdown.length, scenario.step); + for (const method of methods) { + const samples: BenchmarkResult[] = []; + method.run(scenario.markdown, indices); + await nextFrame(); + + for (let iteration = 0; iteration < repetitions; iteration += 1) { + await nextFrame(); + samples.push(method.run(scenario.markdown, indices)); + } + + const medianSample = medianBy(samples, (sample) => sample.totalMs); + results.push({ + ...medianSample, + method: method.id, + scenario: scenario.label + }); + output.textContent = formatSummary(buildSummary(results, repetitions)); + } + } + + const summary = buildSummary(results, repetitions); + output.textContent = formatSummary(summary); + output.dataset.done = "true"; + output.dataset.summary = JSON.stringify(summary); + return summary; +} + +function runFullInnerHtml(markdown: string, indices: number[]): BenchmarkResult { + target.replaceChildren(); + const startedAt = performance.now(); + + for (const index of indices) { + const final = index >= markdown.length; + target.innerHTML = `${renderHtml(markdown.slice(0, index))}${final ? "" : ''}`; + viewport.scrollTop = viewport.scrollHeight; + } + + return createResult("full-inner-html", markdown, indices, performance.now() - startedAt); +} + +function runFullFragmentReplace(markdown: string, indices: number[]): BenchmarkResult { + target.replaceChildren(); + const startedAt = performance.now(); + + for (const index of indices) { + const final = index >= markdown.length; + const fragment = renderFragment(markdown.slice(0, index)); + if (!final) fragment.append(createCursor()); + target.replaceChildren(fragment); + viewport.scrollTop = viewport.scrollHeight; + } + + return createResult("full-fragment-replace", markdown, indices, performance.now() - startedAt); +} + +function runBlockFragmentTail(markdown: string, indices: number[]): BenchmarkResult { + target.replaceChildren(); + + const tail = document.createElement("div"); + tail.className = "markdown-tail"; + const cursor = createCursor(); + target.replaceChildren(tail, cursor); + + let committedIndex = 0; + let previousTail = ""; + const startedAt = performance.now(); + + for (const index of indices) { + const final = index >= markdown.length; + const commitBoundary = final ? markdown.length : findStableCommitBoundary(markdown, committedIndex, index); + + if (commitBoundary > committedIndex) { + target.insertBefore(renderFragment(markdown.slice(committedIndex, commitBoundary)), tail); + committedIndex = commitBoundary; + previousTail = ""; + } + + const tailMarkdown = markdown.slice(committedIndex, index); + if (tailMarkdown !== previousTail) { + tail.replaceChildren(renderFragment(tailMarkdown)); + previousTail = tailMarkdown; + } + + if (final) { + tail.remove(); + cursor.remove(); + } + + viewport.scrollTop = viewport.scrollHeight; + } + + return createResult("block-fragment-tail", markdown, indices, performance.now() - startedAt); +} + +function renderHtml(markdown: string) { + return DOMPurify.sanitize(marked.parse(markdown) as string, { + ADD_ATTR: ["target", "rel"], + USE_PROFILES: { html: true } + }); +} + +function renderFragment(markdown: string) { + const html = marked.parse(markdown) as string; + return DOMPurify.sanitize(html, { + ADD_ATTR: ["target", "rel"], + RETURN_DOM_FRAGMENT: true, + USE_PROFILES: { html: true } + }) as unknown as DocumentFragment; +} + +function createCursor() { + const cursor = document.createElement("span"); + cursor.className = "benchmark-cursor"; + cursor.setAttribute("aria-hidden", "true"); + return cursor; +} + +function createResult(method: BenchmarkMethodId, markdown: string, indices: number[], totalMs: number): BenchmarkResult { + return { + childCount: target.children.length, + markdownLength: markdown.length, + method, + msPerPatch: totalMs / indices.length, + patchCount: indices.length, + scenario: "", + totalMs + }; +} + +function createPatchIndices(length: number, step: number) { + const indices: number[] = []; + for (let index = step; index < length; index += step) { + indices.push(index); + } + if (indices[indices.length - 1] !== length) indices.push(length); + return indices; +} + +function createScenarios(): BenchmarkScenario[] { + return [ + { + id: "short", + label: "short mixed markdown", + markdown: createMarkdownFixture(6), + step: 48 + }, + { + id: "medium", + label: "medium mixed markdown", + markdown: createMarkdownFixture(28), + step: 96 + }, + { + id: "long", + label: "long mixed markdown", + markdown: createMarkdownFixture(110), + step: 160 + }, + { + id: "code-heavy", + label: "code and table heavy", + markdown: createCodeHeavyFixture(64), + step: 128 + } + ]; +} + +function createMarkdownFixture(sections: number) { + const chunks: string[] = ["# 流式 Markdown 性能测试\n"]; + + for (let index = 0; index < sections; index += 1) { + chunks.push(` +## Section ${index + 1} + +这是一段用于模拟 LLM 回复的 Markdown 文本。它包含 **加粗内容**、\`inlineCode\`、列表、表格和代码块,用来让解析与 DOM 更新都接近真实聊天场景。 + +- 第一条说明当前 section 的业务含义。 +- 第二条包含一个较长的句子,模拟模型连续输出时的自然语言段落。 +- 第三条包含 \`requestAnimationFrame\`、\`DocumentFragment\` 和 \`replaceChildren\`。 + +| metric | value | note | +| --- | --- | --- | +| section | ${index + 1} | mixed | +| patch | ${index * 7 + 3} | deterministic | + +\`\`\`ts +function renderSection${index}(value: string) { + return value.trim().toUpperCase(); +} +\`\`\` + +> 完成的 block 应该被冻结,后续 patch 只更新 tail。 +`); + } + + return chunks.join("\n"); +} + +function createCodeHeavyFixture(sections: number) { + const chunks: string[] = ["# Code Heavy Stream\n"]; + + for (let index = 0; index < sections; index += 1) { + chunks.push(` +### Patch Group ${index + 1} + +\`\`\`tsx +const row${index} = Array.from({ length: 8 }, (_, column) => ({ + id: \`${index}-\${column}\`, + label: "streaming markdown benchmark", + active: column % 2 === 0 +})); +\`\`\` + +| column | parse | dom | layout | +| --- | ---: | ---: | ---: | +| ${index} | ${index * 3 + 1} | ${index * 5 + 2} | ${index * 7 + 3} | +| ${index + 1} | ${index * 3 + 4} | ${index * 5 + 6} | ${index * 7 + 8} | +`); + } + + return chunks.join("\n"); +} + +function findStableCommitBoundary(markdown: string, startIndex: number, visibleIndex: number) { + let cursor = startIndex; + let stableBoundary = startIndex; + let inFence = false; + + while (cursor < visibleIndex) { + const nextLineBreak = markdown.indexOf("\n", cursor); + if (nextLineBreak < 0 || nextLineBreak >= visibleIndex) break; + + const lineEnd = nextLineBreak + 1; + const line = markdown.slice(cursor, nextLineBreak).trim(); + const fenceLine = line.startsWith("```"); + + if (fenceLine) { + inFence = !inFence; + if (!inFence) stableBoundary = lineEnd; + } else if (!inFence && isStableBlockLine(line)) { + stableBoundary = lineEnd; + } + + cursor = lineEnd; + } + + return stableBoundary; +} + +function isStableBlockLine(line: string) { + if (!line) return true; + if (/^#{1,6}\s/.test(line)) return true; + if (/^(-{3,}|\*{3,}|_{3,})$/.test(line)) return true; + return false; +} + +function buildSummary(results: BenchmarkResult[], repetitions: number): BenchmarkSummary { + const scenarios = [...new Set(results.map((result) => result.scenario))]; + + return { + environment: navigator.userAgent, + repetitions, + results, + winners: scenarios.map((scenario) => { + const scenarioResults = results.filter((result) => result.scenario === scenario); + const winner = scenarioResults.reduce((best, result) => (result.totalMs < best.totalMs ? result : best), scenarioResults[0]); + const ratioToWinner = Object.fromEntries( + scenarioResults.map((result) => [result.method, result.totalMs / winner.totalMs]) + ) as Record; + + return { + ratioToWinner, + scenario, + winner: winner.method + }; + }) + }; +} + +function formatSummary(summary: BenchmarkSummary) { + return JSON.stringify( + { + repetitions: summary.repetitions, + results: summary.results.map((result) => ({ + scenario: result.scenario, + method: result.method, + totalMs: Number(result.totalMs.toFixed(2)), + msPerPatch: Number(result.msPerPatch.toFixed(3)), + patchCount: result.patchCount, + markdownLength: result.markdownLength, + childCount: result.childCount + })), + winners: summary.winners.map((winner) => ({ + scenario: winner.scenario, + winner: winner.winner, + ratioToWinner: Object.fromEntries( + Object.entries(winner.ratioToWinner).map(([method, ratio]) => [method, Number(ratio.toFixed(2))]) + ) + })) + }, + null, + 2 + ); +} + +function medianBy(items: T[], selector: (item: T) => number) { + const sorted = [...items].sort((first, second) => selector(first) - selector(second)); + return sorted[Math.floor(sorted.length / 2)]; +} + +function nextFrame() { + return new Promise((resolve) => { + requestAnimationFrame(() => resolve()); + }); +} + +(window as BenchmarkWindow).__runMarkdownBenchmarks = runMarkdownBenchmarks; + +const params = new URLSearchParams(window.location.search); +if (params.has("autorun")) { + const repetitions = Number(params.get("repetitions") ?? 4); + window.setTimeout(() => { + void runMarkdownBenchmarks({ + repetitions: Number.isFinite(repetitions) && repetitions > 0 ? repetitions : 4 + }); + }, 100); +} diff --git a/marketplace/plugins/agent-console/src/renderer/components/ui/badge.tsx b/marketplace/plugins/agent-console/src/renderer/components/ui/badge.tsx new file mode 100644 index 00000000..b1da92ed --- /dev/null +++ b/marketplace/plugins/agent-console/src/renderer/components/ui/badge.tsx @@ -0,0 +1,32 @@ +import * as React from "react"; +import { cva, type VariantProps } from "class-variance-authority"; +import { cn } from "@/lib/utils"; + +const badgeVariants = cva( + "inline-flex min-w-0 items-center gap-1 rounded-full border px-2 py-0.5 text-[11px] font-medium leading-4", + { + variants: { + variant: { + default: "border-transparent bg-primary/10 text-primary", + secondary: "border-border bg-secondary text-secondary-foreground", + success: "border-emerald-200 bg-emerald-50 text-emerald-700", + warning: "border-amber-200 bg-amber-50 text-amber-700", + danger: "border-red-200 bg-red-50 text-red-700", + outline: "border-border bg-background text-muted-foreground" + } + }, + defaultVariants: { + variant: "default" + } + } +); + +export interface BadgeProps + extends React.HTMLAttributes, + VariantProps {} + +function Badge({ className, variant, ...props }: BadgeProps) { + return ; +} + +export { Badge, badgeVariants }; diff --git a/marketplace/plugins/agent-console/src/renderer/components/ui/button.tsx b/marketplace/plugins/agent-console/src/renderer/components/ui/button.tsx new file mode 100644 index 00000000..3177d850 --- /dev/null +++ b/marketplace/plugins/agent-console/src/renderer/components/ui/button.tsx @@ -0,0 +1,47 @@ +import * as React from "react"; +import { Slot } from "@radix-ui/react-slot"; +import { cva, type VariantProps } from "class-variance-authority"; +import { cn } from "@/lib/utils"; + +const buttonVariants = cva( + "inline-flex h-8 shrink-0 items-center justify-center gap-1.5 whitespace-nowrap rounded-md border border-transparent px-3 text-[12px] font-medium outline-none transition-[background-color,border-color,color,box-shadow] duration-150 focus-visible:ring-2 focus-visible:ring-ring/20 disabled:pointer-events-none disabled:opacity-45", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground hover:bg-primary/95", + secondary: "border-border bg-card text-secondary-foreground shadow-[0_1px_1px_rgba(0,0,0,.04)] hover:bg-muted", + ghost: "text-muted-foreground hover:bg-muted hover:text-foreground", + outline: "border-border bg-card text-foreground shadow-[0_1px_1px_rgba(0,0,0,.03)] hover:bg-muted", + destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/95", + subtle: "bg-secondary text-muted-foreground hover:bg-muted hover:text-foreground" + }, + size: { + sm: "h-7 rounded-md px-2 text-[11px]", + default: "h-8 px-3", + icon: "h-7 w-7 px-0", + iconSm: "h-7 w-7 px-0" + } + }, + defaultVariants: { + variant: "default", + size: "default" + } + } +); + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean; +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button"; + return ; + } +); + +Button.displayName = "Button"; + +export { Button, buttonVariants }; diff --git a/marketplace/plugins/agent-console/src/renderer/components/ui/input.tsx b/marketplace/plugins/agent-console/src/renderer/components/ui/input.tsx new file mode 100644 index 00000000..2c428fb3 --- /dev/null +++ b/marketplace/plugins/agent-console/src/renderer/components/ui/input.tsx @@ -0,0 +1,20 @@ +import * as React from "react"; +import { cn } from "@/lib/utils"; + +const Input = React.forwardRef>( + ({ className, type, ...props }, ref) => ( + + ) +); + +Input.displayName = "Input"; + +export { Input }; diff --git a/marketplace/plugins/agent-console/src/renderer/components/ui/select.tsx b/marketplace/plugins/agent-console/src/renderer/components/ui/select.tsx new file mode 100644 index 00000000..20b56f5c --- /dev/null +++ b/marketplace/plugins/agent-console/src/renderer/components/ui/select.tsx @@ -0,0 +1,176 @@ +import * as React from "react"; +import { createPortal } from "react-dom"; +import { Check, ChevronDown } from "lucide-react"; +import { cn } from "@/lib/utils"; + +export type SelectOption = { + disabled?: boolean; + icon?: React.ComponentType<{ className?: string }>; + label: string; + value: string; +}; + +export interface SelectProps + extends Omit, "children" | "onChange" | "value"> { + menuClassName?: string; + onOpenChange?: (open: boolean) => void; + onValueChange?: (value: string) => void; + options: SelectOption[]; + selectClassName?: string; + value?: string; +} + +const Select = React.forwardRef( + ({ className, disabled, menuClassName, onOpenChange, onValueChange, options, selectClassName, value, ...props }, ref) => { + const [open, setOpen] = React.useState(false); + const [menuStyle, setMenuStyle] = React.useState({}); + const listboxId = React.useId(); + const menuRef = React.useRef(null); + const rootRef = React.useRef(null); + const selectedOption = options.find((option) => option.value === value) ?? options[0]; + const SelectedIcon = selectedOption?.icon; + + const updateMenuPosition = React.useCallback(() => { + const root = rootRef.current; + if (!root || typeof window === "undefined") return; + + const rect = root.getBoundingClientRect(); + const margin = 8; + const maxWidth = Math.min(360, window.innerWidth - margin * 2); + const menuWidth = Math.max(rect.width, Math.min(260, maxWidth)); + const left = Math.max(margin, Math.min(rect.left, window.innerWidth - menuWidth - margin)); + const below = window.innerHeight - rect.bottom - margin; + const above = rect.top - margin; + const openAbove = below < 180 && above > below; + const availableHeight = Math.max(160, openAbove ? above : below); + + setMenuStyle({ + bottom: openAbove ? window.innerHeight - rect.top + 4 : undefined, + left, + maxHeight: availableHeight, + maxWidth, + minWidth: rect.width, + position: "fixed", + top: openAbove ? undefined : rect.bottom + 4, + zIndex: 1000 + }); + }, []); + + React.useLayoutEffect(() => { + onOpenChange?.(open); + return () => { + if (open) { + onOpenChange?.(false); + } + }; + }, [onOpenChange, open]); + + React.useLayoutEffect(() => { + if (!open) return; + + updateMenuPosition(); + window.addEventListener("resize", updateMenuPosition); + window.addEventListener("scroll", updateMenuPosition, true); + + return () => { + window.removeEventListener("resize", updateMenuPosition); + window.removeEventListener("scroll", updateMenuPosition, true); + }; + }, [open, updateMenuPosition]); + + React.useEffect(() => { + if (!open) return; + + const closeOnOutsidePointer = (event: PointerEvent) => { + const target = event.target as Node; + if (!rootRef.current?.contains(target) && !menuRef.current?.contains(target)) { + setOpen(false); + } + }; + + const closeOnEscape = (event: KeyboardEvent) => { + if (event.key === "Escape") { + setOpen(false); + } + }; + + document.addEventListener("pointerdown", closeOnOutsidePointer); + document.addEventListener("keydown", closeOnEscape); + + return () => { + document.removeEventListener("pointerdown", closeOnOutsidePointer); + document.removeEventListener("keydown", closeOnEscape); + }; + }, [open]); + + const menu = open ? ( +
+ {options.map((option) => { + const OptionIcon = option.icon; + const selected = option.value === selectedOption?.value; + + return ( + + ); + })} +
+ ) : null; + + return ( +
+ + + {menu && typeof document !== "undefined" ? createPortal(menu, document.body) : menu} +
+ ); + } +); + +Select.displayName = "Select"; + +export { Select }; diff --git a/marketplace/plugins/agent-console/src/renderer/components/ui/textarea.tsx b/marketplace/plugins/agent-console/src/renderer/components/ui/textarea.tsx new file mode 100644 index 00000000..32f770e2 --- /dev/null +++ b/marketplace/plugins/agent-console/src/renderer/components/ui/textarea.tsx @@ -0,0 +1,19 @@ +import * as React from "react"; +import { cn } from "@/lib/utils"; + +const Textarea = React.forwardRef>( + ({ className, ...props }, ref) => ( +

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