@shulex/cxclawctl 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts","../src/auth.ts","../package.json","../src/version.ts","../src/http.ts","../src/store.ts","../src/args.ts","../src/business.ts","../src/solvea/commands.ts","../src/solvea/client.ts","../src/solvea/input.ts","../src/solvea/extended-commands.ts","../src/solvea/remaining-commands.ts","../src/commands/resources.ts","../src/doctor.ts","../src/sls.ts","../src/tenant.ts","../src/update.ts","../src/workflows/runtime.ts","../src/workflows/solvea-kit.ts","../src/workflows/support.ts","../src/workflows/common.ts","../src/workflows/agent-builder.ts","../src/workflows/tester.ts","../src/workflows/delivery.ts","../src/workflows/kb-builder.ts","../src/workflows/desk.ts"],"sourcesContent":["import { readFile } from \"node:fs/promises\";\nimport { authenticated, login, logout } from \"./auth.js\";\nimport { flag, option, positionals } from \"./args.js\";\nimport { runApi } from \"./business.js\";\nimport { isResourceCommand, resourceHelp, runResourceCommand } from \"./commands/resources.js\";\nimport { diagnose } from \"./doctor.js\";\nimport { query as slsQuery } from \"./sls.js\";\nimport { loadSession, saveSession } from \"./store.js\";\nimport { publicTenant, search, useTenant } from \"./tenant.js\";\nimport { installMarketplace, installScheduler, update } from \"./update.js\";\nimport { SERVER_API_VERSION, TOOL_SCHEMA_VERSION, VERSION } from \"./version.js\";\nimport { runRuntime } from \"./workflows/runtime.js\";\nimport { runSolveaKitWorkflow } from \"./workflows/solvea-kit.js\";\nimport { runSupport } from \"./workflows/support.js\";\nimport { runAgentBuilder } from \"./workflows/agent-builder.js\";\nimport { runAgentTester } from \"./workflows/tester.js\";\nimport { runDelivery, runPoc } from \"./workflows/delivery.js\";\nimport { runKbBuilder } from \"./workflows/kb-builder.js\";\nimport { runDesk } from \"./workflows/desk.js\";\n\nconst print = (value: unknown) => console.log(JSON.stringify(value, null, 2));\nconst usage = () => [\n \"cxclawctl <resource> <action> [options]\",\n \"cxclawctl auth|tenant|sls|runtime|doctor|update|setup|version\",\n \"cxclawctl agent-builder|agent-tester|delivery|poc|kb-builder|solvea-desk <action>\",\n resourceHelp(),\n \"Example: cxclawctl intent create --data-file intent.json\",\n].join(\"\\n\\n\");\n\nasync function runAuth(action: string | undefined, args: string[]) {\n if (action === \"login\") return print(await login(option(args, \"--server\", true)!, (option(args, \"--channel\") ?? \"stable\") as \"stable\" | \"canary\" | \"dev\"));\n if (action === \"logout\") { await logout(); return print({ ok: true, loggedOut: true }); }\n if (action === \"status\") {\n try {\n const session = await loadSession();\n return print({ ok: true, loggedIn: true, email: session.email, channel: session.channel, accessExpiresAt: session.accessExpiry });\n } catch { return print({ ok: true, loggedIn: false }); }\n }\n if (action === \"refresh\") { const session = await authenticated(); return print({ ok: true, accessExpiresAt: session.accessExpiry }); }\n throw new Error(\"auth action must be login, logout, status, or refresh\");\n}\n\nasync function runTenant(action: string | undefined, args: string[]) {\n const session = await authenticated();\n if (action === \"current\") return print(publicTenant(session.tenant));\n if (action === \"clear\") { delete session.tenant; await saveSession(session); return print({ ok: true, cleared: true }); }\n if (action === \"search\") return print(await search(session, positionals(args)[0] ?? \"\", option(args, \"--env\", true)!));\n if (action === \"use\") return print(await useTenant(session, Number(positionals(args)[0]), option(args, \"--env\", true)!, option(args, \"--purpose\", true)!));\n throw new Error(\"tenant action must be search, use, current, or clear\");\n}\n\nasync function main(args = process.argv.slice(2)) {\n const [command, action, ...rest] = args;\n if (!command || command === \"help\" || flag(args, \"--help\")) {\n console.log(command && isResourceCommand(command) ? resourceHelp(command, action && ![\"help\", \"--help\"].includes(action) ? action : undefined) : usage());\n return;\n }\n if (isResourceCommand(command)) {\n await runResourceCommand(await authenticated(), command, action, rest);\n return;\n }\n if (command === \"version\") {\n if (flag(args, \"--json\")) return print({ pluginVersion: process.env.CXCLAW_PLUGIN_VERSION ?? null, cliVersion: VERSION, toolSchemaVersion: TOOL_SCHEMA_VERSION, serverApiVersion: SERVER_API_VERSION });\n console.log(`cxclawctl ${VERSION}`); return;\n }\n if (command === \"setup\") {\n const channel = (option(args, \"--channel\") ?? \"stable\") as \"stable\" | \"canary\" | \"dev\";\n await installMarketplace(channel); await login(option(args, \"--server\", true)!, channel); await installScheduler(); return;\n }\n if (command === \"auth\") return runAuth(action, rest);\n if (command === \"login\" || command === \"logout\") return runAuth(command, args.slice(1));\n if (command === \"tenant\" || command === \"context\") return runTenant(action, rest);\n if (command === \"runtime\") return print(await runRuntime(action, rest));\n if (command === \"workflow\") return print(await runSolveaKitWorkflow(action, rest));\n if (command === \"support\") return print(await runSupport(await authenticated(), action, rest));\n if (command === \"agent-builder\") return print(await runAgentBuilder([\"validate\", \"compile\", \"merge-source\", \"validate-tool\", \"migration\", \"replay\"].includes(action ?? \"\") ? undefined : await authenticated(), action, rest));\n if (command === \"agent-tester\") return print(await runAgentTester(action === \"create-sheet\" ? undefined : await authenticated(), action, rest));\n if (command === \"delivery\") return print(await runDelivery([\"classify\", \"plan\", \"report\", \"render\", \"render-report\", \"excel\", \"gen-excel\", \"render-summary\"].includes(action ?? \"\") ? undefined : await authenticated(), action, rest));\n if (command === \"poc\") return print(await runPoc([\"classify\", \"plan\", \"report\", \"render\", \"render-report\", \"excel\", \"gen-excel\", \"manual\", \"render-summary\"].includes(action ?? \"\") ? undefined : await authenticated(), action, rest));\n if (command === \"kb-builder\") return print(await runKbBuilder([\"crawl\", \"directory-plan\", \"extract-web-qa\", \"extract-ticket-qa\", \"batch-extract-ticket-qa\"].includes(action ?? \"\") ? undefined : await authenticated(), action, rest));\n if (command === \"solvea-desk\") return print(await runDesk(await authenticated(), action, rest));\n if (command === \"api\") { if (!action) throw new Error(\"api command is required\"); await runApi(await authenticated(), action, rest); return; }\n if (command === \"sls\" && action === \"query\") {\n return print(await slsQuery(await authenticated(), {\n from: Number(option(rest, \"--from\", true)), to: Number(option(rest, \"--to\", true)),\n query: option(rest, \"--query\", true)!, line: Number(option(rest, \"--line\") ?? 50),\n offset: Number(option(rest, \"--offset\") ?? 0), reverse: flag(rest, \"--reverse\"),\n }));\n }\n if (command === \"doctor\") return print(await diagnose());\n if (command === \"update\") {\n if (flag(args, \"--install-scheduler\")) { await installScheduler(); return print({ ok: true, schedulerInstalled: true }); }\n if (flag(args, \"--scheduled\")) await new Promise(resolve => setTimeout(resolve, Math.random() * 1_800_000));\n return print(await update());\n }\n if (command === \"commands\" || command === \"capabilities\") console.log(await readFile(new URL(\"../capabilities.lock.json\", import.meta.url), \"utf8\"));\n else throw new Error(`unknown command: ${command}`);\n}\n\nmain().catch(error => {\n console.error(`cxclawctl: ${error instanceof Error ? error.message : String(error)}`);\n process.exitCode = 1;\n});\n","import open from \"open\";\nimport { post } from \"./http.js\";\nimport { deleteSession, loadSession, saveSession } from \"./store.js\";\nimport type { DeviceStart, Session, TokenResponse } from \"./types.js\";\nimport { VERSION } from \"./version.js\";\n\nconst sleep=(ms:number)=>new Promise(r=>setTimeout(r,ms));\nexport async function login(serverUrl:string, channel:Session[\"channel\"]):Promise<Session>{\n const session:Session={serverUrl:serverUrl.replace(/\\/$/,\"\"),channel,accessToken:\"\",refreshToken:\"\",accessExpiry:0,employeeId:\"\",email:\"\"};\n const start=await post<DeviceStart>(session,\"/auth/device/start\",{clientVersion:VERSION});\n console.error(`请在浏览器打开以下地址完成钉钉授权:\\n${start.verificationUriComplete}\\n设备码:${start.userCode}`);\n await open(start.verificationUriComplete).catch(()=>undefined);\n const deadline=Date.now()+start.expiresIn*1000;\n while(Date.now()<deadline){ await sleep(Math.max(2,start.interval)*1000); try {\n const token=await post<TokenResponse>(session,\"/auth/device/token\",{deviceCode:start.deviceCode,clientVersion:VERSION});\n Object.assign(session,{accessToken:token.accessToken,refreshToken:token.refreshToken,accessExpiry:Math.floor(Date.now()/1000)+token.expiresIn,employeeId:token.employee.id,email:token.employee.email}); await saveSession(session); return session;\n } catch(error){ if(!String(error).includes(\"428\")) throw error; } }\n throw new Error(\"device authorization expired\");\n}\nexport async function ensureAccess(session:Session):Promise<Session>{\n if(session.accessToken && Date.now()/1000+30<session.accessExpiry)return session;\n const token=await post<TokenResponse>(session,\"/auth/refresh\",{refreshToken:session.refreshToken,clientVersion:VERSION});\n Object.assign(session,{accessToken:token.accessToken,refreshToken:token.refreshToken,accessExpiry:Math.floor(Date.now()/1000)+token.expiresIn}); await saveSession(session); return session;\n}\nexport async function authenticated(){return ensureAccess(await loadSession())}\nexport async function logout(){let session:Session|undefined;try{session=await loadSession()}catch{};if(session?.refreshToken)await post(session,\"/auth/logout\",{refreshToken:session.refreshToken}).catch(()=>undefined);await deleteSession()}\n","{\n \"name\": \"@shulex/cxclawctl\",\n \"version\": \"0.1.4\",\n \"description\": \"Solvea CXClaw CLI and Codex plugin runtime\",\n \"type\": \"module\",\n \"bin\": {\n \"cxclawctl\": \"./bin/cxclawctl.mjs\"\n },\n \"files\": [\n \"bin\",\n \"dist/cli.js\",\n \"dist/cli.js.map\",\n \"capabilities.lock.json\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsx src/cli.ts\",\n \"typecheck\": \"tsc --noEmit\",\n \"test\": \"bun test --path-ignore-patterns _tmp_\",\n \"check:capabilities\": \"tsx scripts/check-capabilities.ts\",\n \"check:release\": \"tsx scripts/check-release.ts\",\n \"test:package\": \"tsx scripts/test-packed-package.ts\",\n \"release:prepare\": \"tsx scripts/prepare-release.ts\",\n \"package:agent-plugin\": \"node scripts/package-agent-plugin.mjs\",\n \"package:codex-plugin\": \"node scripts/package-codex-plugin.mjs\"\n },\n \"engines\": {\n \"node\": \">=22\"\n },\n \"dependencies\": {\n \"@alicloud/log\": \"^1.2.6\",\n \"@napi-rs/keyring\": \"^2.1.2\",\n \"compare-versions\": \"^6.1.1\",\n \"exceljs\": \"^4.4.0\",\n \"open\": \"^10.2.0\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^25.0.0\",\n \"bun-types\": \"^1.3.13\",\n \"tsup\": \"^8.5.0\",\n \"tsx\": \"^4.21.0\",\n \"typescript\": \"^5.9.0\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/SolveaCX/cx_claw_codex.git\"\n },\n \"license\": \"UNLICENSED\"\n}\n","import packageJson from \"../package.json\" with { type: \"json\" };\nexport const VERSION = packageJson.version;\nexport const TOOL_SCHEMA_VERSION = \"1\";\nexport const SERVER_API_VERSION = \"1\";\n","import type { Session } from \"./types.js\";\nimport { VERSION } from \"./version.js\";\n\nexport function unwrap<T>(value: unknown): T {\n if (value && typeof value === \"object\" && Object.keys(value).length === 1 && \"data\" in value) return (value as {data:T}).data;\n return value as T;\n}\nexport async function request<T>(session: Session, path: string, init: RequestInit = {}, tenant = false): Promise<T> {\n const headers = new Headers(init.headers); headers.set(\"content-type\", \"application/json\"); headers.set(\"x-cxclaw-client-version\", VERSION);\n if (session.accessToken) headers.set(\"authorization\", `Bearer ${session.accessToken}`);\n if (tenant) { if (!session.tenant?.context) throw new Error(\"no tenant selected; run npx --yes @shulex/cxclawctl@latest tenant use\"); headers.set(\"x-cxclaw-tenant-context\", session.tenant.context); }\n let last: unknown;\n for (let attempt=0; attempt<3; attempt++) {\n try {\n const response = await fetch(`${session.serverUrl.replace(/\\/$/,\"\")}${path}`, {...init, headers, signal: AbortSignal.timeout(30_000)});\n const text = await response.text(); const value = text ? JSON.parse(text) : undefined;\n if (!response.ok) throw new Error(`server returned ${response.status}: ${text}`);\n return unwrap<T>(value);\n } catch (error) { last=error; if (attempt<2) await new Promise(r=>setTimeout(r,200*2**attempt)); }\n }\n throw last;\n}\nexport const post = <T>(session:Session,path:string,body:unknown,tenant=false) => request<T>(session,path,{method:\"POST\",body:JSON.stringify(body)},tenant);\n","import { AsyncEntry } from \"@napi-rs/keyring\";\nimport type { Session } from \"./types.js\";\n\nconst options = process.platform === \"linux\" ? { linux: { store: \"secret-service\" as const } } : undefined;\nconst entry = () => new AsyncEntry(\"com.solvea.cxclaw\", \"session\", options);\n\nexport async function loadSession(): Promise<Session> {\n const raw = await entry().getPassword();\n if (!raw) throw new Error(\"未登录,请先运行 cxclawctl auth login\");\n return JSON.parse(raw) as Session;\n}\nexport async function saveSession(session: Session): Promise<void> {\n if (!session.refreshToken) throw new Error(\"refusing to persist an empty session\");\n await entry().setPassword(JSON.stringify(session));\n}\nexport async function deleteSession(): Promise<void> { await entry().deleteCredential(); }\n","export function option(args: string[], name: string, required = false) {\n const index = args.indexOf(name);\n const value = index >= 0 ? args[index + 1] : undefined;\n if (required && !value) throw new Error(`${name} is required`);\n return value;\n}\n\nexport function options(args: string[], name: string) {\n const values: string[] = [];\n for (let index = 0; index < args.length; index += 1) {\n if (args[index] === name && args[index + 1] && !args[index + 1].startsWith(\"-\")) values.push(args[index + 1]);\n }\n return values;\n}\n\nexport function optionList(args: string[], name: string) {\n const index = args.indexOf(name);\n if (index < 0) return [];\n const values: string[] = [];\n for (let cursor = index + 1; cursor < args.length && !args[cursor].startsWith(\"-\"); cursor += 1) values.push(args[cursor]);\n return values;\n}\n\nexport function flag(args: string[], name: string) { return args.includes(name); }\n\nexport function positionals(args: string[]) {\n const out: string[] = [];\n for (let index = 0; index < args.length; index += 1) {\n if (args[index].startsWith(\"--\")) {\n if (![\"--pretty\", \"--reverse\", \"--scheduled\", \"--install-scheduler\"].includes(args[index])) index += 1;\n } else out.push(args[index]);\n }\n return out;\n}\n","import { dirname, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { Session } from \"./types.js\";\nimport { isNativeSolveaCommand, runSolveaCommand } from \"./solvea/commands.js\";\n\nexport const packageRoot=()=>resolve(dirname(fileURLToPath(import.meta.url)),\"..\");\nexport async function runApi(session:Session,command:string,args:string[]){\n if (isNativeSolveaCommand(command)) {\n console.log(JSON.stringify(await runSolveaCommand(session, command, args), null, 2));\n return;\n }\n throw new Error(`unknown TypeScript API command: ${command}`);\n}\n","import { readFile } from \"node:fs/promises\";\nimport { option, positionals, flag } from \"../args.js\";\nimport type { Session } from \"../types.js\";\nimport { SolveaClient } from \"./client.js\";\nimport { EXTENDED_COMMANDS, runExtendedCommand } from \"./extended-commands.js\";\nimport { REMAINING_COMMANDS, runRemainingCommand } from \"./remaining-commands.js\";\n\ntype JsonObject = Record<string, unknown>;\n\nfunction requireFlag(args: string[], name: string, command: string) {\n if (!flag(args, name)) throw new Error(`${command} requires ${name} after explicit user acknowledgement`);\n}\n\nfunction enabled(args: string[], command: string) {\n const enable = flag(args, \"--enable\");\n const disable = flag(args, \"--disable\");\n if (enable === disable) throw new Error(`${command} requires exactly one of --enable or --disable`);\n return enable;\n}\n\nasync function data(args: string[]): Promise<JsonObject> {\n const file = option(args, \"--data-file\");\n const raw = file ? await readFile(file, \"utf8\") : option(args, \"--data\");\n if (!raw) throw new Error(\"--data or --data-file is required\");\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) throw new Error(\"request data must be a JSON object\");\n return parsed as JsonObject;\n}\n\nasync function transcriptFilters(args: string[]): Promise<JsonObject> {\n const filters: JsonObject = {\n pageIndex: Number(option(args, \"--page\") ?? 1),\n pageSize: Number(option(args, \"--page-size\") ?? 50),\n debug: flag(args, \"--debug\"),\n ...(await optionalData(args)),\n };\n const optional: Array<[string, string, (value: string) => unknown]> = [\n [\"beginTimestamp\", \"--begin-ts\", Number], [\"endTimestamp\", \"--end-ts\", Number],\n [\"touchPoint\", \"--touch-point\", String], [\"botId\", \"--bot-id\", Number],\n [\"agentId\", \"--agent-id\", Number], [\"intentId\", \"--intent-id\", Number],\n [\"keyword\", \"--keyword\", String], [\"handoff\", \"--handoff\", value => value === \"true\"],\n ];\n for (const [field, name, convert] of optional) {\n const value = option(args, name);\n if (value !== undefined) filters[field] = convert(value);\n }\n return filters;\n}\n\n/** Native TypeScript business commands. Keep this table explicit so every command has a reviewable contract. */\nexport async function runSolveaCommand(session: Session, command: string, args: string[]): Promise<unknown> {\n const client = new SolveaClient(session);\n if (EXTENDED_COMMANDS.has(command)) return runExtendedCommand(client, command, args);\n if (REMAINING_COMMANDS.has(command)) return runRemainingCommand(client, command, args);\n if (command.startsWith(\"chat-report-\")) return runRemainingCommand(client, \"report-message\", args);\n const id = () => option(args, \"--id\", true)!;\n switch (command) {\n case \"get-project\": return client.projectInfo();\n case \"list-agents\": return client.listAgents(option(args, \"--category\") ?? \"text\");\n case \"get-agent\": return client.getAgent(id());\n case \"get-chatflow-graph\": return client.getChatflowGraph(option(args, \"--agent-id\", true)!);\n case \"create-agent\": return client.createAgent(await data(args));\n case \"update-agent\": return client.updateAgent(await data(args));\n case \"list-plugins\": return client.listPlugins();\n case \"get-plugin\": return client.getPlugin(id());\n case \"create-plugin\": return client.createPlugin(await data(args));\n case \"update-plugin\": return client.updatePlugin(await data(args));\n case \"delete-plugin\": requireFlag(args, \"--confirm-delete\", command); return client.deletePlugin(id());\n case \"chat\": return client.chat({ message: option(args, \"--message\") ?? option(args, \"-m\", true), botId: option(args, \"--bot-id\"), chatId: option(args, \"--chat-id\"), touchPoint: option(args, \"--touch-point\") ?? \"LIVE_CHAT\", ...(await optionalData(args)) });\n case \"chat-async\": return client.chatAsync({ message: option(args, \"--message\") ?? option(args, \"-m\", true), botId: option(args, \"--bot-id\"), chatId: option(args, \"--chat-id\"), touchPoint: option(args, \"--touch-point\") ?? \"LIVE_CHAT\", ...(await optionalData(args)) });\n case \"get-async-result\": return client.asyncResult(option(args, \"--receipt\", true)!, option(args, \"--bot-id\"));\n case \"list-intents\": return client.listIntents(option(args, \"--category\") ?? \"E_COMMERCE\");\n case \"get-intent\": return client.getIntent(id());\n case \"create-intent\": return client.createIntent(await data(args));\n case \"update-intent\": return client.updateIntent(id(), await data(args));\n case \"toggle-intent\": return client.toggleIntent(id(), !flag(args, \"--disable\"));\n case \"list-entities\": return client.listEntities();\n case \"list-strategies\": return client.listStrategies(Number(option(args, \"--page-size\") ?? 100));\n case \"create-strategy\": return client.createStrategy(await data(args));\n case \"update-strategy\": return client.updateStrategy(id(), await data(args));\n case \"toggle-strategy\": return client.toggleStrategy(id(), !flag(args, \"--disable\"));\n case \"get-quality-status\": return client.qualityStatus();\n case \"set-quality-status\": return client.setQualityStatus(enabled(args, command));\n case \"list-quality-rules\": return client.qualityRules(Number(option(args, \"--begin-ts\") ?? 0) || undefined, Number(option(args, \"--end-ts\") ?? 0) || undefined);\n case \"get-quality-rule\": return client.qualityRule(option(args, \"--inspection-key\", true)!);\n case \"update-quality-rule\": return client.updateQualityRule(await data(args));\n case \"get-custom-quality-rule\": return client.customQualityRule(option(args, \"--inspection-key\", true)!);\n case \"create-custom-quality-rule\": return client.createCustomQualityRule(await data(args));\n case \"update-custom-quality-rule\": return client.updateCustomQualityRule(await data(args));\n case \"delete-custom-quality-rule\": return client.deleteCustomQualityRule(option(args, \"--inspection-key\", true)!);\n case \"list-knowledge\": return client.listKnowledge(await optionalData(args));\n case \"get-knowledge\": return client.getKnowledge(id());\n case \"update-knowledge\": return client.updateKnowledge(id(), await data(args));\n case \"upload-qa\": return client.uploadQa((await data(args)).items as unknown[]);\n case \"list-directories\": return client.listDirectories();\n case \"create-folder\": return client.createFolder(option(args, \"--name\", true)!, Number(option(args, \"--parent-id\") ?? 0));\n case \"update-directory\": return client.updateDirectory(id(), option(args, \"--name\") ? { name: option(args, \"--name\") } : await data(args));\n case \"delete-directory\": requireFlag(args, \"--confirm-delete\", command); return client.deleteDirectory(id());\n case \"list-knowledge-tags\": return client.knowledgeTags(option(args, \"--keyword\") ?? \"\");\n case \"get-transcript\": return client.transcript(option(args, \"--chat-id\", true)!);\n case \"list-transcripts\": return client.listTranscripts(await transcriptFilters(args));\n case \"get-chat-context\": return client.chatContext(option(args, \"--bot-id\", true)!, await data(args));\n default: throw new Error(`TypeScript command not migrated yet: ${command}`);\n }\n}\n\nasync function optionalData(args: string[]) {\n if (!option(args, \"--data\") && !option(args, \"--data-file\")) return {};\n return data(args);\n}\n\nexport function isNativeSolveaCommand(command: string) {\n return command.startsWith(\"chat-report-\") || EXTENDED_COMMANDS.has(command) || REMAINING_COMMANDS.has(command) || new Set([\n \"get-project\", \"list-agents\", \"get-agent\", \"get-chatflow-graph\", \"create-agent\", \"update-agent\",\n \"list-plugins\", \"get-plugin\", \"create-plugin\", \"update-plugin\", \"delete-plugin\", \"chat\", \"chat-async\",\n \"get-async-result\", \"list-intents\", \"get-intent\", \"create-intent\", \"update-intent\", \"toggle-intent\",\n \"list-entities\", \"list-strategies\", \"create-strategy\", \"update-strategy\", \"toggle-strategy\",\n \"get-transcript\", \"list-transcripts\", \"get-chat-context\", \"get-quality-status\", \"set-quality-status\",\n \"list-quality-rules\", \"get-quality-rule\", \"update-quality-rule\", \"get-custom-quality-rule\",\n \"create-custom-quality-rule\", \"update-custom-quality-rule\", \"delete-custom-quality-rule\",\n \"list-knowledge\", \"get-knowledge\", \"update-knowledge\", \"upload-qa\", \"list-directories\",\n \"create-folder\", \"update-directory\", \"delete-directory\", \"list-knowledge-tags\",\n ]).has(command);\n}\n","import type { Session } from \"../types.js\";\n\ntype JsonObject = Record<string, unknown>;\n\n/**\n * Typed transport for the tenant business API.\n * Authentication is deliberately request-local: a tenant token is never\n * copied into process.env or a module-level singleton.\n */\nexport class SolveaClient {\n private project?: string;\n private bot?: string;\n\n constructor(private readonly session: Session) {\n if (!session.tenant?.businessUrl || !session.tenant.businessToken) {\n throw new Error(\"no tenant selected; run tenant use before a business command\");\n }\n }\n\n private get baseUrl() { return this.session.tenant!.businessUrl!.replace(/\\/$/, \"\"); }\n private get env() { return this.session.tenant!.environment; }\n\n async request<T>(method: string, path: string, body?: unknown, query?: Record<string, string | number | boolean>): Promise<T> {\n const url = new URL(`${this.baseUrl}${path}`);\n for (const [key, value] of Object.entries(query ?? {})) url.searchParams.set(key, String(value));\n const cookie = this.env === \"prod\" ? \"_token\" : \"_token_staging\";\n const headers = new Headers({\n accept: \"application/json, text/plain, */*\",\n origin: this.baseUrl,\n referer: `${this.baseUrl}/chatbot`,\n cookie: `${cookie}=${this.session.tenant!.businessToken}`,\n \"x-cxclaw-client-version\": process.env.CXCLAW_PLUGIN_VERSION ?? \"unknown\",\n });\n if (body !== undefined) headers.set(\"content-type\", \"application/json\");\n let last: unknown;\n for (let attempt = 0; attempt < 3; attempt += 1) {\n try {\n const response = await fetch(url, {\n method,\n headers,\n body: body === undefined ? undefined : JSON.stringify(body),\n signal: AbortSignal.timeout(30_000),\n });\n const text = await response.text();\n let value: unknown;\n try { value = text ? JSON.parse(text) : undefined; } catch { value = { raw: text }; }\n if (!response.ok) throw new Error(`HTTP ${response.status} ${method} ${path}: ${text}`);\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n const object = value as JsonObject;\n const code = object.code ?? object.errno;\n if (code !== undefined && ![0, \"0\", 200, \"200\", \"OK\", \"SUCCESS\"].includes(code as never)) {\n throw new Error(`API error ${method} ${path}: ${String(object.msg ?? object.message ?? object.error ?? code)}`);\n }\n if (object.success === false) throw new Error(`API error ${method} ${path}: ${String(object.msg ?? object.message ?? object.error ?? \"request failed\")}`);\n }\n return value as T;\n } catch (error) {\n last = error;\n if (attempt < 2) await new Promise(resolve => setTimeout(resolve, 200 * 2 ** attempt));\n }\n }\n throw last;\n }\n\n private async post<T>(path: string, body: unknown) { return this.request<T>(\"POST\", path, body); }\n private async get<T>(path: string, query?: Record<string, string | number | boolean>) { return this.request<T>(\"GET\", path, undefined, query); }\n private async put<T>(path: string, body: unknown) { return this.request<T>(\"PUT\", path, body); }\n\n async rawCall<T = unknown>(method: string, path: string, body?: unknown, query?: Record<string, string | number | boolean>) {\n return this.request<T>(method, path, body, query);\n }\n\n private safePathSegment(value: string, name: string) {\n if (!value || value === \".\" || value === \"..\" || /[\\\\/?#%\\u0000-\\u001f\\u007f]/.test(value)) {\n throw new Error(`${name} must be a safe non-empty path segment`);\n }\n return encodeURIComponent(value);\n }\n\n async projectInfo() { return this.get<unknown[]>(\"/api_v2/gpt/bots\"); }\n async projectId() {\n if (!this.project) {\n const rows = await this.projectInfo();\n const first = Array.isArray(rows) ? rows[0] as JsonObject | undefined : undefined;\n this.project = String(first?.projectId ?? 950);\n this.bot = String(first?.id ?? \"\");\n }\n return this.project;\n }\n async botId() { if (!this.bot) await this.projectId(); return this.bot || \"723\"; }\n\n async listAgents(category = \"text\") { return this.post(\"/api_v2/gpt/ap/queryAgent\", { projectId: Number(await this.projectId()), needRelation: true, noMeta: true, category }); }\n async getAgent(id: string) { return this.post(\"/api_v2/gpt/ap/queryAgent\", { projectId: Number(await this.projectId()), agentId: Number(id), needRelation: true, squareAgent: false }); }\n async getChatflowGraph(id: string) { return this.post(\"/api_v2/gpt/chatflow/queryGraph/latest\", { agentId: Number(id) }); }\n async createAgent(data: JsonObject) { return this.post(\"/api_v2/gpt/ap/createAgent\", { projectId: Number(await this.projectId()), ...data }); }\n async updateAgent(data: JsonObject) { return this.post(\"/api_v2/gpt/ap/updateAgent\", data); }\n async updateChatflow(agentId: string, graph: JsonObject, publish = false) {\n const current = await this.getAgent(agentId);\n const agent = Array.isArray(current) ? current[0] as JsonObject : current as JsonObject;\n if (!agent || agent.type !== \"CHAT_FLOW\") throw new Error(`Agent ${agentId} is not CHAT_FLOW`);\n const payload = { ...agent, agentId: agent.id ?? Number(agentId), meta: { ...(agent.meta as JsonObject ?? {}), chatFlowGraph: graph } };\n return this.updateAgent({ ...payload, ...(publish ? { publish: true } : {}) });\n }\n\n async listPlugins() { return this.post(\"/api_v2/gpt/ap/queryPlugin\", { projectId: Number(await this.projectId()), needRelation: false }); }\n async getPlugin(id: string) { return this.post(\"/api_v2/gpt/ap/queryPlugin\", { projectId: Number(await this.projectId()), pluginId: Number(id), convertStrategyV5: true }); }\n async createPlugin(data: JsonObject) { return this.post(\"/api_v2/gpt/ap/createPlugin\", { projectId: Number(await this.projectId()), ...data }); }\n async updatePlugin(data: JsonObject) { return this.post(\"/api_v2/gpt/ap/updatePlugin\", { projectId: Number(await this.projectId()), ...data }); }\n async deletePlugin(id: string) { return this.post(\"/api_v2/gpt/ap/deletePlugin\", { projectId: Number(await this.projectId()), pluginId: Number(id) }); }\n async runPlugin(config: unknown, requestBody?: JsonObject) {\n return this.post(\"/api_v2/gpt/ap/runHttpPlugin\", {\n projectId: Number(await this.projectId()), botId: Number(await this.botId()),\n externalHttpCallConfig: config,\n ...(requestBody === undefined ? {} : { externalHttpCallRequestBody: requestBody }),\n });\n }\n async replaceMockData(type: string, records: unknown[]) {\n if (records.length > 10_000) throw new Error(\"records must contain at most 10000 items\");\n return this.post(`/api_v2/gpt/mockdata/reAddMockData/${this.safePathSegment(type, \"mock type\")}`, records);\n }\n async queryMockData(type: string) { return this.get(\"/api_v2/gpt/mockdata/queryMockData\", { type: this.safePathSegment(type, \"mock type\"), globalData: false }); }\n\n async listAiFields() { return this.post(\"/api_v2/gpt/chatflow/queryAiFields\", {}); }\n async listAgentAiFields() { return this.post(\"/api_v2/gpt/field/list/range\", { fieldRange: [\"all\", \"agent\", \"agent_preload_visible\"] }); }\n async aiFieldGuide() { return this.post(\"/api_v2/tars/api/field/manage/guide/record\", {}); }\n async initializeAiFields() { return this.get(\"/api_v2/tars/api/field/manage/pre/install\"); }\n async listManagedAiFields(pageIndex: number, pageSize: number, name: string) {\n return this.post(\"/api_v2/tars/api/field/manage/page\", { pageIndex, pageSize, name });\n }\n async getManagedAiField(id: string) { return this.get(`/api_v2/tars/api/field/manage/detail/${encodeURIComponent(id)}`); }\n async createManagedAiField(data: JsonObject) { return this.post(\"/api_v2/tars/api/field/manage/create\", data); }\n async updateManagedAiField(data: JsonObject) { return this.post(\"/api_v2/tars/api/field/manage/update\", data); }\n async deleteManagedAiField(id: string) { return this.get(`/api_v2/tars/api/field/manage/delete/${encodeURIComponent(id)}`); }\n async toggleManagedAiField(id: string) { return this.get(`/api_v2/tars/api/field/manage/switch/${encodeURIComponent(id)}`); }\n\n async chat(data: JsonObject) { const bot = String(data.botId ?? await this.botId()); return this.post(`/api_v2/gpt/bot/${bot}/chat`, { botId: Number(bot), projectId: Number(await this.projectId()), option: { debug: true }, ...data }); }\n async chatAsync(data: JsonObject) { const bot = String(data.botId ?? await this.botId()); return this.post(`/api_v2/gpt/bot/${bot}/chat/async`, { botId: Number(bot), projectId: Number(await this.projectId()), option: { debug: true }, ...data }); }\n async asyncResult(receipt: string, botId?: string) { const bot = botId ?? await this.botId(); return this.get(`/api_v2/gpt/bot/${bot}/chat/async/${encodeURIComponent(receipt)}`); }\n\n async listIntents(category = \"E_COMMERCE\") { return this.get(`/api_v2/gpt/project/${await this.projectId()}/intents`, category ? { category } : undefined); }\n async getIntent(id: string) { return this.get(`/api_v2/gpt/project/${await this.projectId()}/intent/${encodeURIComponent(id)}`); }\n async createIntent(data: JsonObject) { return this.post(`/api_v2/gpt/project/${await this.projectId()}/intent`, data); }\n async updateIntent(id: string, data: JsonObject) { return this.put(`/api_v2/gpt/project/${await this.projectId()}/intent/${encodeURIComponent(id)}`, data); }\n async toggleIntent(id: string, enabled: boolean) { return this.put(`/api_v2/gpt/project/${await this.projectId()}/intent/${encodeURIComponent(id)}/status`, { status: enabled ? \"ENABLED\" : \"DISABLED\" }); }\n\n async listEntities() { return this.get(`/api_v2/gpt/project/${await this.projectId()}/entities`); }\n async listStrategies(pageSize = 100) { return this.get(`/api_v2/gpt/project/${await this.projectId()}/strategies`, { pageSize, pageNum: 1 }); }\n async createStrategy(data: JsonObject) { return this.post(`/api_v2/gpt/project/${await this.projectId()}/strategy?v4=true`, data); }\n async updateStrategy(id: string, data: JsonObject) { return this.request(\"PUT\", `/api_v2/gpt/project/${await this.projectId()}/strategy/${encodeURIComponent(id)}`, data); }\n async toggleStrategy(id: string, enabled: boolean) { return this.request(\"PUT\", `/api_v2/gpt/project/${await this.projectId()}/strategy/${encodeURIComponent(id)}/status`, { status: enabled ? \"ENABLED\" : \"DISABLED\" }); }\n\n async qualityStatus() { return this.get(\"/api_v2/intelli/inspection/ticket/status\"); }\n async setQualityStatus(enabled: boolean) { return this.post(\"/api_v2/intelli/inspection/ticket/open\", { open: enabled, projectId: Number(await this.projectId()) }); }\n async qualityRules(beginTimestamp?: number, endTimestamp?: number) { return this.get(\"/api_v2/intelli/inspection/ticket/rules\", { ...(beginTimestamp === undefined ? {} : { beginTimestamp }), ...(endTimestamp === undefined ? {} : { endTimestamp }) }); }\n async qualityRule(key: string) { return this.get(\"/api_v2/intelli/inspection/ticket/rules/detail\", { inspectionKey: key }); }\n async updateQualityRule(data: JsonObject) { return this.post(\"/api_v2/intelli/inspection/ticket/rules\", data); }\n async customQualityRule(key: string) { return this.post(\"/api_v2/intelli/inspection/ticket/customRules/detail\", { inspectionKey: key }); }\n async createCustomQualityRule(data: JsonObject) { return this.post(\"/api_v2/intelli/inspection/ticket/customRules/create\", data); }\n async updateCustomQualityRule(data: JsonObject) { return this.post(\"/api_v2/intelli/inspection/ticket/customRules/update\", data); }\n async deleteCustomQualityRule(key: string) { return this.post(\"/api_v2/intelli/inspection/ticket/customRules/delete\", { inspectionKey: key }); }\n async listQualityAlertRules() { return this.get(\"/api_v2/intelli/inspection/alert/list\"); }\n async getQualityAlertRule(id: string) { return this.get(\"/api_v2/intelli/inspection/alert/detail\", { id }); }\n async createQualityAlertRule(data: JsonObject) { return this.post(\"/api_v2/intelli/inspection/alert/create\", data); }\n async updateQualityAlertRule(data: JsonObject) { return this.post(\"/api_v2/intelli/inspection/alert/update\", data); }\n async deleteQualityAlertRule(id: string) { return this.get(\"/api_v2/intelli/inspection/alert/delete\", { id }); }\n async listQualityAlertMessages(data: JsonObject) { return this.post(\"/api_v2/intelli/inspection/alert/message/list\", data); }\n async getQualityAlertMessage(id: string) { return this.get(\"/api_v2/intelli/inspection/alert/message/detail\", { id }); }\n\n async listTemplates(data: JsonObject) { return this.post(`/api_v2/gpt/project/${await this.projectId()}/templates/filter`, data); }\n async createTemplate(data: JsonObject) {\n const content = String(data.content ?? \"\");\n return this.post(`/api_v2/gpt/project/${await this.projectId()}/template`, {\n name: data.name, content, status: data.status ?? \"ENABLED\",\n multiContent: data.multiContent ?? { AUTO: content },\n ...(data.scene ? { scene: data.scene } : {}),\n });\n }\n async updateTemplate(id: string, data: JsonObject) {\n return this.put(`/api_v2/gpt/project/${await this.projectId()}/template/${encodeURIComponent(id)}`, data);\n }\n async deleteTemplates(ids: number[]) {\n return this.request(\"DELETE\", `/api_v2/gpt/project/${await this.projectId()}/templates`, { templateIds: ids });\n }\n\n private get qamPrefix() { return this.env === \"prod\" ? \"/api_v2/qam\" : \"/sns_v1\"; }\n get qamPath() { return this.qamPrefix; }\n async listKnowledge(data: JsonObject) { return this.post(`${this.qamPrefix}/project/${await this.projectId()}/getKnowledge`, { type: \"ALL\", pageIndex: 1, pageSize: 50, keyword: \"\", ...data }); }\n async getKnowledge(id: string) { return this.get(`${this.qamPrefix}/project/${await this.projectId()}/ku/${encodeURIComponent(id)}`); }\n async updateKnowledge(id: string, data: JsonObject) { return this.request(\"PUT\", `${this.qamPrefix}/project/${await this.projectId()}/ku`, { ...data, kuId: Number(id) }); }\n async uploadQa(items: unknown[]) { return this.post(`${this.qamPrefix}/project/${await this.projectId()}/kus`, items); }\n async listDirectories() { return this.get(`${this.qamPrefix}/project/${await this.projectId()}/directories`, { keyword: \"\", kuPublished: \"\" }); }\n async createFolder(name: string, parentId = 0) { return this.post(`${this.qamPrefix}/project/${await this.projectId()}/directory`, { name, parentId, type: \"GENERIC\" }); }\n async updateDirectory(id: string, data: JsonObject) { return this.request(\"PUT\", `${this.qamPrefix}/project/${await this.projectId()}/directory/${encodeURIComponent(id)}`, data); }\n async deleteDirectory(id: string) { return this.request(\"DELETE\", `${this.qamPrefix}/project/${await this.projectId()}/directory/${encodeURIComponent(id)}`); }\n async knowledgeTags(keyword = \"\") { return this.get(`${this.qamPrefix}/project/${await this.projectId()}/searchKeywordAndIntents`, { keyword }); }\n\n async transcript(chatId: string) { return this.get(`/api_v2/gpt/project/${await this.projectId()}/transcript/${encodeURIComponent(chatId)}`, { isCompare: true }); }\n async listTranscripts(data: JsonObject) { return this.post(`/api_v2/gpt/project/${await this.projectId()}/transcripts/filter`, data); }\n async resolveTranscriptChatId(externalId: string, pageSize = 10) {\n const result = await this.listTranscripts({ pageSize, pageIndex: 1, debug: false, keyword: externalId });\n const rows = Array.isArray(result) ? result : (result as JsonObject)?.list;\n const items = Array.isArray(rows) ? rows.filter(row => row && typeof row === \"object\") as JsonObject[] : [];\n const exact = items.filter(row => String(row.externId ?? row.externalId ?? row.external_id ?? \"\") === externalId);\n const matches = (exact.length ? exact : items).map(row => ({ chatId: row.chatId ?? row.id, externalId: row.externId ?? row.externalId ?? row.external_id, agentName: row.agentName ?? \"\", touchPoint: row.touchPoint ?? row.touchpoint ?? \"\", createdAt: row.createdAt ?? \"\" }));\n return { externalId, chatId: exact.length || matches.length === 1 ? matches[0]?.chatId ?? null : null, matchedBy: exact.length ? \"exactExternalId\" : \"keyword\", matches };\n }\n async chatContext(botId: string, data: JsonObject) { return this.post(`/api_v2/gpt/bot/${encodeURIComponent(botId)}/chat/context/compare`, data); }\n}\n","import { readFile } from \"node:fs/promises\";\nimport { flag, option } from \"../args.js\";\n\nexport type JsonObject = Record<string, unknown>;\n\nexport async function jsonData(args: string[], required = true): Promise<JsonObject> {\n const file = option(args, \"--data-file\");\n const raw = file ? await readFile(file, \"utf8\") : option(args, \"--data\");\n if (!raw) {\n if (required) throw new Error(\"--data or --data-file is required\");\n return {};\n }\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) throw new Error(\"request data must be a JSON object\");\n return parsed as JsonObject;\n}\n\nexport async function jsonValue(args: string[]): Promise<unknown> {\n const file = option(args, \"--data-file\");\n const raw = file ? await readFile(file, \"utf8\") : option(args, \"--data\", true)!;\n return JSON.parse(raw) as unknown;\n}\n\nexport function requireFlag(args: string[], name: string, command: string) {\n if (!flag(args, name)) throw new Error(`${command} requires ${name} after explicit user acknowledgement`);\n}\n\nexport function requireId(args: string[]) { return option(args, \"--id\", true)!; }\n\nexport function enabled(args: string[], command: string) {\n const enable = flag(args, \"--enable\");\n const disable = flag(args, \"--disable\");\n if (enable === disable) throw new Error(`${command} requires exactly one of --enable or --disable`);\n return enable;\n}\n","import { option, optionList, options } from \"../args.js\";\nimport type { SolveaClient } from \"./client.js\";\nimport { jsonData, jsonValue, requireFlag, requireId, type JsonObject } from \"./input.js\";\n\ntype Handler = (client: SolveaClient, args: string[]) => Promise<unknown>;\n\nconst handlers: Record<string, Handler> = {\n \"replace-mock-data\": async (client, args) => {\n const records = await jsonValue(args);\n if (!Array.isArray(records)) throw new Error(\"replace-mock-data requires a JSON array\");\n return client.replaceMockData(option(args, \"--name\", true)!, records);\n },\n \"query-mock-data\": (client, args) => client.queryMockData(option(args, \"--name\", true)!),\n \"run-plugin\": async (client, args) => {\n const payload = await jsonData(args);\n const config = \"externalHttpCallConfig\" in payload ? payload.externalHttpCallConfig : payload;\n return client.runPlugin(config, payload.externalHttpCallRequestBody as JsonObject | undefined);\n },\n \"list-ai-fields\": client => client.listAiFields(),\n \"list-agent-ai-fields\": client => client.listAgentAiFields(),\n \"get-ai-field-guide\": client => client.aiFieldGuide(),\n \"initialize-ai-fields\": client => client.initializeAiFields(),\n \"list-managed-ai-fields\": (client, args) => client.listManagedAiFields(\n Number(option(args, \"--page\") ?? 1), Number(option(args, \"--page-size\") ?? 50), option(args, \"--keyword\") ?? \"\",\n ),\n \"get-managed-ai-field\": (client, args) => client.getManagedAiField(requireId(args)),\n \"create-managed-ai-field\": async (client, args) => client.createManagedAiField(await jsonData(args)),\n \"update-managed-ai-field\": async (client, args) => client.updateManagedAiField(await jsonData(args)),\n \"delete-managed-ai-field\": async (client, args) => {\n requireFlag(args, \"--confirm-delete\", \"delete-managed-ai-field\");\n return client.deleteManagedAiField(requireId(args));\n },\n \"toggle-managed-ai-field\": (client, args) => client.toggleManagedAiField(requireId(args)),\n \"list-quality-alert-rules\": client => client.listQualityAlertRules(),\n \"get-quality-alert-rule\": (client, args) => client.getQualityAlertRule(requireId(args)),\n \"create-quality-alert-rule\": async (client, args) => client.createQualityAlertRule(await jsonData(args)),\n \"update-quality-alert-rule\": async (client, args) => client.updateQualityAlertRule(await jsonData(args)),\n \"delete-quality-alert-rule\": async (client, args) => {\n requireFlag(args, \"--confirm-delete\", \"delete-quality-alert-rule\");\n return client.deleteQualityAlertRule(requireId(args));\n },\n \"list-quality-alert-messages\": async (client, args) => client.listQualityAlertMessages(await jsonData(args)),\n \"get-quality-alert-message\": (client, args) => client.getQualityAlertMessage(requireId(args)),\n \"list-templates\": (client, args) => client.listTemplates({\n pageIndex: Number(option(args, \"--page\") ?? 1),\n pagesize: Number(option(args, \"--page-size\") ?? 50),\n keyword: option(args, \"--keyword\") ?? \"\",\n ...(options(args, \"--scene\").length ? { scenes: options(args, \"--scene\") } : {}),\n ...(option(args, \"--status\") ? { status: [option(args, \"--status\")] } : {}),\n }),\n \"create-template\": async (client, args) => {\n const payload = await jsonData(args, false);\n if (option(args, \"--name\")) payload.name = option(args, \"--name\");\n if (option(args, \"--content\")) payload.content = option(args, \"--content\");\n if (option(args, \"--status\")) payload.status = option(args, \"--status\");\n if (options(args, \"--scene\")[0]) payload.scene = options(args, \"--scene\")[0];\n if (!payload.name || !payload.content) throw new Error(\"create-template requires name and content\");\n return client.createTemplate(payload);\n },\n \"update-template\": async (client, args) => {\n const payload = await jsonData(args, false);\n for (const [field, name] of [[\"name\", \"--name\"], [\"content\", \"--content\"], [\"status\", \"--status\"]] as const) {\n if (option(args, name)) payload[field] = option(args, name);\n }\n if (!Object.keys(payload).length) throw new Error(\"update-template requires at least one changed field\");\n return client.updateTemplate(requireId(args), payload);\n },\n \"delete-templates\": async (client, args) => {\n requireFlag(args, \"--confirm-delete\", \"delete-templates\");\n const ids = optionList(args, \"--ids\").map(Number);\n if (!ids.length || ids.some(id => !Number.isSafeInteger(id) || id <= 0)) throw new Error(\"delete-templates requires positive integer --ids\");\n return client.deleteTemplates(ids);\n },\n};\n\nexport const EXTENDED_COMMANDS = new Set(Object.keys(handlers));\n\nexport async function runExtendedCommand(client: SolveaClient, command: string, args: string[]) {\n const handler = handlers[command];\n if (!handler) throw new Error(`TypeScript command not migrated yet: ${command}`);\n return handler(client, args);\n}\n","import { flag, option, optionList } from \"../args.js\";\nimport type { SolveaClient } from \"./client.js\";\nimport { jsonData, jsonValue, requireFlag, requireId } from \"./input.js\";\n\ntype Handler = (client: SolveaClient, args: string[]) => Promise<unknown>;\nconst data = async (args: string[]) => jsonData(args, false);\nconst project = async (client: SolveaClient) => client.projectId();\nconst page = (args: string[]) => Number(option(args, \"--page\") ?? 1);\nconst pageSize = (args: string[]) => Number(option(args, \"--page-size\") ?? 50);\nconst reportBody = async (args: string[]) => ({\n beginTimestamp: Number(option(args, \"--begin-ts\", true)), endTimestamp: Number(option(args, \"--end-ts\", true)),\n timeOffset: Number(option(args, \"--time-offset\") ?? 8), ...(await data(args)),\n});\n\nconst handlers: Record<string, Handler> = {\n \"chat-stream\": async (c, a) => c.rawCall(\"POST\", `/api_v2/gpt/bot/${await c.botId()}/chat`, { message: option(a, \"--message\", true), botId: Number(option(a, \"--bot-id\") ?? await c.botId()), projectId: Number(await project(c)), option: { debug: true }, stream: true }),\n \"update-chatflow\": async (c, a) => c.updateChatflow(option(a, \"--agent-id\", true)!, await jsonData(a), flag(a, \"--publish\")),\n \"get-conversations-by-intent\": async (c, a) => c.listTranscripts({ pageSize: Number(option(a, \"--limit\") ?? 50), pageIndex: 1, intent: option(a, \"--intent\", true) }),\n \"resolve-transcript-chat-id\": async (c, a) => c.resolveTranscriptChatId(option(a, \"--external-id\", true)!, Number(option(a, \"--page-size\") ?? 10)),\n \"list-isolation-keywords\": async (c, a) => c.rawCall(\"GET\", `${c.qamPath}/project/${await project(c)}/isolation_keywords`, undefined, { keyword: option(a, \"--keyword\") ?? \"\", pageIndex: page(a), pageSize: pageSize(a) }),\n \"create-isolation-keyword\": async (c, a) => c.rawCall(\"POST\", `${c.qamPath}/project/${await project(c)}/isolation_keyword`, { keyword: option(a, \"--keyword\", true) }),\n \"update-isolation-keyword\": async (c, a) => c.rawCall(\"POST\", `${c.qamPath}/project/${await project(c)}/isolation_keyword/${requireId(a)}`, { keyword: option(a, \"--keyword\", true) }),\n \"delete-isolation-keyword\": async (c, a) => { requireFlag(a, \"--confirm-delete\", \"delete-isolation-keyword\"); return c.rawCall(\"DELETE\", `${c.qamPath}/project/${await project(c)}/isolation_keyword/${requireId(a)}`); },\n \"get-knowledge-isolation-keywords\": async (c, a) => c.rawCall(\"GET\", `${c.qamPath}/project/${await project(c)}/knowledge/isolation_keywords`, undefined, { knowledgeType: option(a, \"--type\", true)!, knowledgeId: requireId(a) }),\n \"batch-update-isolation-keyword-bindings\": async (c, a) => c.rawCall(\"POST\", `${c.qamPath}/project/${await project(c)}/knowledge/isolation_keywords/batch`, await jsonValue(a)),\n \"edit-knowledge-tags\": async (c, a) => c.rawCall(\"POST\", `${c.qamPath}/project/${await project(c)}/editTags`, await jsonValue(a)),\n \"move-directory\": async (c, a) => c.rawCall(\"GET\", `${c.qamPath}/project/${await project(c)}/directory/move`, undefined, { currentId: requireId(a), parentId: option(a, \"--parent-id\", true)! }),\n \"operate-knowledge\": async (c, a) => c.rawCall(\"POST\", `${c.qamPath}/project/${await project(c)}/updateKnowledge`, await jsonValue(a)),\n \"batch-update-knowledge\": async (c, a) => c.rawCall(\"PUT\", `${c.qamPath}/project/${await project(c)}/kus`, await jsonValue(a)),\n \"update-document-content\": async (c, a) => c.rawCall(\"PUT\", `${c.qamPath}/project/${await project(c)}/document`, { id: requireId(a), ...(await data(a)) }),\n \"create-product-knowledge\": async (c, a) => c.rawCall(\"POST\", `${c.qamPath}/project/${await project(c)}/ku_product`, await jsonValue(a)),\n \"update-product-knowledge\": async (c, a) => c.rawCall(\"PUT\", `${c.qamPath}/project/${await project(c)}/ku_product`, { kuProductId: Number(requireId(a)), ...(await data(a)) }),\n \"batch-update-products\": async (c, a) => c.rawCall(\"PUT\", `${c.qamPath}/project/${await project(c)}/ku_products`, { list: await jsonValue(a) }),\n \"upload-web\": async (c, a) => c.rawCall(\"POST\", `${c.qamPath}/project/${await project(c)}/documents`, { documents: optionList(a, \"--url\").map(filePath => ({ filePath, docType: \"TC\", fileType: \"website\" })), taskType: \"WEB\", published: true, isVisible: true, metadata: { tags: [] }, directoryId: option(a, \"--directory-id\") ?? \"\" }),\n \"list-label-groups\": async (c, a) => c.rawCall(\"GET\", `/api_v2/gpt/label/project/${await project(c)}/getTreeInfo`, undefined, option(a, \"--name\") ? { treeName: option(a, \"--name\")! } : undefined),\n \"create-label-group\": async (c, a) => c.rawCall(\"POST\", `/api_v2/gpt/label/project/${await project(c)}/updateTreeInfo`, { ...(await data(a)), treeName: option(a, \"--name\", true), operateType: \"CREATE\" }),\n \"update-label-group\": async (c, a) => c.rawCall(\"POST\", `/api_v2/gpt/label/project/${await project(c)}/updateTreeInfo`, { ...(await data(a)), id: Number(requireId(a)), operateType: \"UPDATE\" }),\n \"delete-label-group\": async (c, a) => { requireFlag(a, \"--confirm-delete\", \"delete-label-group\"); return c.rawCall(\"POST\", `/api_v2/gpt/label/project/${await project(c)}/updateTreeInfo`, { id: Number(requireId(a)), operateType: \"DELETE\" }); },\n \"get-label-tree\": async (c, a) => c.rawCall(\"GET\", `/api_v2/gpt/label/project/${await project(c)}/getTagTree`, undefined, { treeId: requireId(a), ...(option(a, \"--keyword\") ? { name: option(a, \"--keyword\")! } : {}) }),\n \"get-label-detail-tree\": async (c, a) => c.rawCall(\"POST\", `/api_v2/gpt/label/project/${await project(c)}/getDetailTree`, { treeId: Number(requireId(a)), ...(await data(a)) }),\n \"create-label-node\": async (c, a) => c.rawCall(\"POST\", `/api_v2/gpt/label/project/${await project(c)}/updateNode`, { treeId: Number(option(a, \"--tree-id\", true)), operateType: \"CREATE\", nodes: [await data(a)] }),\n \"update-label-node\": async (c, a) => c.rawCall(\"POST\", `/api_v2/gpt/label/project/${await project(c)}/updateNode`, { treeId: Number(option(a, \"--tree-id\", true)), operateType: \"UPDATE\", nodes: [{ id: Number(requireId(a)), ...(await data(a)) }] }),\n \"delete-label-node\": async (c, a) => { requireFlag(a, \"--confirm-delete\", \"delete-label-node\"); return c.rawCall(\"POST\", `/api_v2/gpt/label/project/${await project(c)}/updateNode`, { treeId: Number(option(a, \"--tree-id\", true)), operateType: \"DELETE\", nodes: [{ id: Number(requireId(a)) }] }); },\n \"download-label-template\": async (c, a) => c.rawCall(\"GET\", `/api_v2/gpt/label/project/${await project(c)}/downloadLabelTemplate`, undefined, { type: option(a, \"--template-type\") ?? \"VOC_LABEL\" }),\n \"download-labels\": async (c, a) => c.rawCall(\"GET\", `/api_v2/gpt/label/project/${await project(c)}/downloadLabel`, undefined, { treeId: option(a, \"--tree-id\", true)! }),\n \"upload-labels\": async (c, a) => c.rawCall(\"POST\", `/api_v2/gpt/label/project/${await project(c)}/uploadLabel`, { treeId: Number(option(a, \"--tree-id\", true)), file: option(a, \"--file\", true), ...(option(a, \"--init\") ? { uploadWay: \"INIT\" } : {}) }),\n \"export-transcripts\": async (c, a) => c.rawCall(\"POST\", `/api_v2/gpt/project/${await project(c)}/transcripts/export/async`, { pageSize: pageSize(a), pageIndex: page(a), timeOffset: Number(option(a, \"--time-offset\") ?? 8), ...(await data(a)) }),\n \"get-export-tasks\": async (c, a) => c.rawCall(\"POST\", `/api_v2/gpt/label/project/${await project(c)}/getLabelTask`, { page: page(a), pageSize: pageSize(a) }),\n \"upload-batch-test-file\": async (c, a) => c.rawCall(\"GET\", `/api_v2/gpt/project/${await project(c)}/sts_credentials`),\n \"submit-batch-test\": async (c, a) => c.rawCall(\"POST\", `/api_v2/gpt/label/project/${await project(c)}/uploadMessage`, { file: option(a, \"--file\", true), type: option(a, \"--type\", true), ...(option(a, \"--bot-id\") ? { botId: Number(option(a, \"--bot-id\")) } : {}), ...(await data(a)) }),\n \"get-batch-test-tasks\": async (c, a) => c.rawCall(\"POST\", `/api_v2/gpt/label/project/${await project(c)}/getLabelTask`, { page: page(a), pageSize: pageSize(a), ...(option(a, \"--type\") ? { taskType: option(a, \"--type\")! } : {}) }),\n \"list-voice-agents\": c => c.listAgents(\"voice\"),\n \"list-voice-transcripts\": async (c, a) => c.rawCall(\"POST\", \"/api_v2/as_bot/voice-report/transcript-page\", { pageNum: page(a), pageSize: pageSize(a), beginTimestamp: Number(option(a, \"--begin-ts\") ?? 0), endTimestamp: Number(option(a, \"--end-ts\") ?? 0) }),\n \"get-voice-transcript\": async (c, a) => c.rawCall(\"GET\", `/api_v2/gpt/voice/transcript/projectId/${await project(c)}/history/${requireId(a)}`),\n};\n\nconst reportPaths: Record<string, string> = {\n \"report-transcript\": \"/api_v2/as_bot/statement/transcript\", \"report-message\": \"/api_v2/as_bot/statement/message\", \"report-agent\": \"/api_v2/as_bot/statement/agent\", \"report-intent\": \"/api_v2/as_bot/statement/transcript/intent\", \"report-satisfaction\": \"/api_v2/as_bot/statement/satisfaction/feedback\", \"report-satisfaction-list\": \"/api_v2/as_bot/statement/satisfaction/message\", \"report-knowledge\": \"/api_v2/as_bot/statement/knowledge\", \"report-escalation\": \"/api_v2/as_bot/statement/transcript/reason2\", \"report-livechat\": \"/api_v2/as_bot/livechat/report/summary\", \"report-livechat-table\": \"/api_v2/as_bot/livechat/report/table\", \"report-inspection\": \"/api_v2/intelli/inspection/ticket/count\", \"report-self-learning\": \"/api_v2/as_bot/statement/self-learning\",\n};\nfor (const [name, path] of Object.entries(reportPaths)) handlers[name] = async (c, a) => c.rawCall(\"POST\", path, await reportBody(a));\n\nexport const REMAINING_COMMANDS = new Set(Object.keys(handlers));\nexport async function runRemainingCommand(client: SolveaClient, command: string, args: string[]) {\n const handler = handlers[command];\n if (!handler) throw new Error(`TypeScript command not migrated yet: ${command}`);\n return handler(client, args);\n}\n","import type { Session } from \"../types.js\";\nimport { runApi } from \"../business.js\";\n\ntype ActionDefinition = {\n command: string;\n summary: string;\n usage: string;\n};\n\nconst action = (command: string, summary: string, usage = \"\"): ActionDefinition => ({ command, summary, usage });\n\nconst resources = {\n agent: {\n list: action(\"list-agents\", \"List agents\", \"[--category text|voice]\"),\n get: action(\"get-agent\", \"Get one agent\", \"--id <agent-id>\"),\n create: action(\"create-agent\", \"Create an agent\", \"--data <json> | --data-file <path>\"),\n update: action(\"update-agent\", \"Update an agent\", \"--data <json> | --data-file <path>\"),\n \"get-chatflow\": action(\"get-chatflow-graph\", \"Get an agent chatflow\", \"--agent-id <agent-id>\"),\n },\n intent: {\n list: action(\"list-intents\", \"List intents\", \"[--category <category>]\"),\n get: action(\"get-intent\", \"Get one intent\", \"--id <intent-id>\"),\n create: action(\"create-intent\", \"Create an intent\", \"--data <json> | --data-file <path>\"),\n update: action(\"update-intent\", \"Update an intent\", \"--id <intent-id> (--data <json> | --data-file <path>)\"),\n toggle: action(\"toggle-intent\", \"Enable or disable an intent\", \"--id <intent-id> [--enable | --disable] (default: --enable)\"),\n },\n strategy: {\n list: action(\"list-strategies\", \"List strategies\", \"[--page-size <number>]\"),\n entities: action(\"list-entities\", \"List strategy entities\"),\n create: action(\"create-strategy\", \"Create a strategy\", \"--data <json> | --data-file <path>\"),\n update: action(\"update-strategy\", \"Update a strategy\", \"--id <strategy-id> (--data <json> | --data-file <path>)\"),\n toggle: action(\"toggle-strategy\", \"Enable or disable a strategy\", \"--id <strategy-id> [--enable | --disable] (default: --enable)\"),\n },\n tool: {\n list: action(\"list-plugins\", \"List tools\"),\n get: action(\"get-plugin\", \"Get one tool\", \"--id <tool-id>\"),\n create: action(\"create-plugin\", \"Create a tool\", \"--data <json> | --data-file <path>\"),\n update: action(\"update-plugin\", \"Update a tool\", \"--data <json> | --data-file <path>\"),\n delete: action(\"delete-plugin\", \"Delete a tool\", \"--id <tool-id> --confirm-delete\"),\n run: action(\"run-plugin\", \"Run an HTTP tool without saving it\", \"--data <json> | --data-file <path>\"),\n },\n field: {\n canvas: action(\"list-ai-fields\", \"List CHAT_FLOW canvas fields\"),\n \"agent-range\": action(\"list-agent-ai-fields\", \"List fields accepted by Agent validation\"),\n guide: action(\"get-ai-field-guide\", \"Get AI Field initialization status\"),\n initialize: action(\"initialize-ai-fields\", \"Initialize system AI Fields\"),\n list: action(\"list-managed-ai-fields\", \"List managed AI Fields\", \"[--page <number>] [--page-size <number>] [--keyword <name>]\"),\n get: action(\"get-managed-ai-field\", \"Get one managed AI Field\", \"--id <field-id>\"),\n create: action(\"create-managed-ai-field\", \"Create a managed AI Field\", \"--data <json> | --data-file <path>\"),\n update: action(\"update-managed-ai-field\", \"Update a managed AI Field\", \"--data <json> | --data-file <path>\"),\n delete: action(\"delete-managed-ai-field\", \"Delete a managed AI Field\", \"--id <field-id> --confirm-delete\"),\n toggle: action(\"toggle-managed-ai-field\", \"Toggle a managed AI Field\", \"--id <field-id>\"),\n },\n template: {\n list: action(\"list-templates\", \"List reply templates\", \"[--page <number>] [--page-size <number>] [--keyword <text>] [--scene <scene>] [--status <status>]\"),\n create: action(\"create-template\", \"Create a reply template\", \"(--name <name> --content <content>) | --data-file <path>\"),\n update: action(\"update-template\", \"Update a reply template\", \"--id <template-id> [--name <name>] [--content <content>] [--status <status>] [--data-file <path>]\"),\n delete: action(\"delete-templates\", \"Delete reply templates\", \"--ids <id> [id...] --confirm-delete\"),\n },\n knowledge: {\n list: action(\"list-knowledge\", \"List knowledge\", \"[--data <json> | --data-file <path>]\"),\n get: action(\"get-knowledge\", \"Get one knowledge item\", \"--id <knowledge-id>\"),\n update: action(\"update-knowledge\", \"Update a knowledge item\", \"--id <knowledge-id> (--data <json> | --data-file <path>)\"),\n \"upload-qa\": action(\"upload-qa\", \"Upload QA items\", \"--data <json> | --data-file <path>\"),\n tags: action(\"list-knowledge-tags\", \"List knowledge tags\", \"[--keyword <keyword>]\"),\n },\n directory: {\n list: action(\"list-directories\", \"List knowledge directories\"),\n create: action(\"create-folder\", \"Create a knowledge directory\", \"--name <name> [--parent-id <directory-id>]\"),\n update: action(\"update-directory\", \"Update a knowledge directory\", \"--id <directory-id> (--name <name> | --data <json> | --data-file <path>)\"),\n delete: action(\"delete-directory\", \"Delete a knowledge directory\", \"--id <directory-id> --confirm-delete\"),\n },\n quality: {\n status: action(\"get-quality-status\", \"Get quality inspection status\"),\n toggle: action(\"set-quality-status\", \"Enable or disable quality inspection\", \"--enable | --disable\"),\n rules: action(\"list-quality-rules\", \"List quality rules\", \"[--begin-ts <milliseconds>] [--end-ts <milliseconds>]\"),\n \"get-rule\": action(\"get-quality-rule\", \"Get one quality rule\", \"--inspection-key <key>\"),\n \"update-rule\": action(\"update-quality-rule\", \"Update a quality rule\", \"--data <json> | --data-file <path>\"),\n \"get-custom-rule\": action(\"get-custom-quality-rule\", \"Get one custom quality rule\", \"--inspection-key <key>\"),\n \"create-custom-rule\": action(\"create-custom-quality-rule\", \"Create a custom quality rule\", \"--data <json> | --data-file <path>\"),\n \"update-custom-rule\": action(\"update-custom-quality-rule\", \"Update a custom quality rule\", \"--data <json> | --data-file <path>\"),\n \"delete-custom-rule\": action(\"delete-custom-quality-rule\", \"Delete a custom quality rule\", \"--inspection-key <key>\"),\n alerts: action(\"list-quality-alert-rules\", \"List quality alert rules\"),\n \"get-alert\": action(\"get-quality-alert-rule\", \"Get one quality alert rule\", \"--id <alert-id>\"),\n \"create-alert\": action(\"create-quality-alert-rule\", \"Create a quality alert rule\", \"--data <json> | --data-file <path>\"),\n \"update-alert\": action(\"update-quality-alert-rule\", \"Update a quality alert rule\", \"--data <json> | --data-file <path>\"),\n \"delete-alert\": action(\"delete-quality-alert-rule\", \"Delete a quality alert rule\", \"--id <alert-id> --confirm-delete\"),\n \"alert-messages\": action(\"list-quality-alert-messages\", \"List quality alert messages\", \"--data <json> | --data-file <path>\"),\n \"get-alert-message\": action(\"get-quality-alert-message\", \"Get one quality alert message\", \"--id <message-id>\"),\n },\n transcript: {\n list: action(\"list-transcripts\", \"List transcripts\", \"[--page <number>] [--page-size <number>] [--begin-ts <milliseconds>] [--end-ts <milliseconds>] [--data <json> | --data-file <path>]\"),\n get: action(\"get-transcript\", \"Get one transcript\", \"--chat-id <chat-id>\"),\n context: action(\"get-chat-context\", \"Get chat context\", \"--bot-id <bot-id> (--data <json> | --data-file <path>)\"),\n },\n chat: {\n send: action(\"chat\", \"Send a synchronous chat message\", \"--message <text> [--bot-id <bot-id>] [--chat-id <chat-id>]\"),\n async: action(\"chat-async\", \"Send an asynchronous chat message\", \"--message <text> [--bot-id <bot-id>] [--chat-id <chat-id>]\"),\n result: action(\"get-async-result\", \"Get an asynchronous chat result\", \"--receipt <receipt> [--bot-id <bot-id>]\"),\n },\n} as const;\n\nexport type ResourceName = keyof typeof resources;\n\nexport function isResourceCommand(value: string): value is ResourceName {\n return value in resources;\n}\n\nexport function resourceHelp(resource?: string, actionName?: string): string {\n if (!resource) return `Business resources:\\n${Object.keys(resources).map(name => ` ${name}`).join(\"\\n\")}`;\n if (!isResourceCommand(resource)) throw new Error(`unknown resource: ${resource}`);\n const actions = resources[resource] as Record<string, ActionDefinition>;\n if (actionName) {\n const definition = actions[actionName];\n if (!definition) throw new Error(`unknown ${resource} action: ${actionName}\\n${resourceHelp(resource)}`);\n return [\n definition.summary,\n `Usage: cxclawctl ${resource} ${actionName}${definition.usage ? ` ${definition.usage}` : \"\"}`,\n ].join(\"\\n\\n\");\n }\n return [\n `${resource} actions:`,\n ...Object.entries(actions).map(([name, definition]) => ` ${name.padEnd(20)} ${definition.summary}`),\n `\\nRun cxclawctl ${resource} <action> --help for action options.`,\n ].join(\"\\n\");\n}\n\nexport function resolveResourceCommand(resource: ResourceName, action?: string): string {\n if (!action || action === \"help\") throw new Error(resourceHelp(resource));\n const definition = (resources[resource] as Record<string, ActionDefinition>)[action];\n if (!definition) throw new Error(`unknown ${resource} action: ${action}\\n${resourceHelp(resource)}`);\n return definition.command;\n}\n\nexport async function runResourceCommand(session: Session, resource: ResourceName, action: string | undefined, args: string[]) {\n await runApi(session, resolveResourceCommand(resource, action), args);\n}\n","import { access } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { packageRoot } from \"./business.js\";\nimport { VERSION } from \"./version.js\";\n\nexport async function diagnose() {\n const root = packageRoot();\n const requiredFiles = [\n \"package.json\",\n ];\n await Promise.all(requiredFiles.map((path) => access(join(root, path))));\n\n const expectedPluginVersion = process.env.CXCLAW_PLUGIN_VERSION || null;\n if (expectedPluginVersion && expectedPluginVersion !== VERSION) {\n throw new Error(\n `plugin version ${expectedPluginVersion} does not match CLI ${VERSION}`,\n );\n }\n\n return {\n ok: true,\n cliVersion: VERSION,\n pluginVersion: expectedPluginVersion,\n versionsMatch: expectedPluginVersion ? expectedPluginVersion === VERSION : null,\n nodeVersion: process.versions.node,\n runtimeFiles: requiredFiles,\n };\n}\n","import LogClient from \"@alicloud/log\";\nimport { post } from \"./http.js\";\nimport type { Session } from \"./types.js\";\n\ninterface SlsSession{endpoint:string;project:string;logstore:string;credentials:{accessKeyId:string;accessKeySecret:string;securityToken:string};limits:{maxTimeRangeSeconds:number;maxResults:number;maxConcurrency:number;maxMessageChars:number}}\nexport async function query(session:Session,options:{from:number;to:number;query:string;line:number;offset:number;reverse:boolean}){\n const temporary=await post<SlsSession>(session,\"/sls/session\",{},true);if(options.from<=0||options.to<options.from||options.to-options.from>temporary.limits.maxTimeRangeSeconds)throw new Error(\"SLS time range exceeds the server limit\");\n const client=new (LogClient as any)({endpoint:temporary.endpoint,use_https:true,accessKeyId:temporary.credentials.accessKeyId,accessKeySecret:temporary.credentials.accessKeySecret,securityToken:temporary.credentials.securityToken});\n const response=await client.getLogs(temporary.project,temporary.logstore,new Date(options.from*1000),new Date(options.to*1000),{query:options.query,line:Math.min(options.line||50,temporary.limits.maxResults),offset:options.offset||0,reverse:options.reverse});\n const logs=(response.body??response).map?.((row:Record<string,unknown>)=>Object.fromEntries(Object.entries(row).map(([k,v])=>[k,String(v).slice(0,temporary.limits.maxMessageChars||undefined)])))??response.body??response;\n return {logs};\n}\n","import { post } from \"./http.js\";\nimport { saveSession } from \"./store.js\";\nimport type { Session, Tenant } from \"./types.js\";\n\nexport function environment(value:string){const v=value.toLowerCase();if(v===\"test\"||v===\"staging\")return \"staging\";if(v===\"prod\"||v===\"production\")return \"prod\";throw new Error(`unsupported environment ${value}; use test/staging or prod`)}\nexport async function search(session:Session,query:string,env:string){return (await post<{items:unknown[]}>(session,\"/tenants/search\",{query,environment:environment(env)})).items}\nexport async function useTenant(session:Session,accountId:number,env:string,purpose:string){\n if(!purpose)throw new Error(\"purpose is required\");\n const response=await post<any>(session,\"/tenant-contexts\",{accountId,environment:environment(env),purpose});\n if(!response.businessToken||!response.services?.businessUrl)throw new Error(\"authorization server did not return business credentials\");\n session.tenant={...response.tenant,environment:response.environment,purpose,context:response.tenantContext,businessToken:response.businessToken,businessUrl:response.services.businessUrl.replace(/\\/$/,\"\"),slsUrl:response.services.slsUrl?.replace(/\\/$/,\"\"),expiresAt:response.businessTokenExpiresAt||Math.floor(Date.now()/1000)+response.expiresIn} as Tenant;\n await saveSession(session);return publicTenant(session.tenant);\n}\nexport function publicTenant(t?:Tenant){return t?{accountId:t.accountId,accountCode:t.accountCode,accountName:t.accountName,environment:t.environment,purpose:t.purpose,expiresAt:t.expiresAt,configured:Boolean(t.businessToken&&t.businessUrl)}:{configured:false}}\nexport async function ensureTenant(session:Session){if(!session.tenant?.accountId)throw new Error(\"no tenant selected; run npx --yes @shulex/cxclawctl@latest tenant use\");if(Date.now()/1000+30>=session.tenant.expiresAt)await useTenant(session,session.tenant.accountId,session.tenant.environment,session.tenant.purpose);return session.tenant}\n","import { spawn } from \"node:child_process\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { homedir, platform } from \"node:os\";\nimport { isAbsolute, join } from \"node:path\";\n\ntype ExecOptions = { capture?: boolean; allowFailure?: boolean };\n\nconst exec = (command: string, args: string[], options: ExecOptions = {}) =>\n new Promise<string>((resolve, reject) => {\n const chunks: Buffer[] = [];\n const child = spawn(command, args, {\n stdio: options.capture ? [\"ignore\", \"pipe\", \"inherit\"] : \"inherit\",\n });\n if (options.capture) child.stdout?.on(\"data\", (chunk) => chunks.push(chunk));\n child.on(\"error\", reject);\n child.on(\"exit\", (code) => {\n if (code === 0 || options.allowFailure) {\n resolve(Buffer.concat(chunks).toString(\"utf8\"));\n return;\n }\n reject(new Error(`${command} exited with ${code}`));\n });\n });\n\nconst xml = (value: string) =>\n value\n .replaceAll(\"&\", \"&amp;\")\n .replaceAll(\"<\", \"&lt;\")\n .replaceAll(\">\", \"&gt;\")\n .replaceAll('\"', \"&quot;\")\n .replaceAll(\"'\", \"&apos;\");\n\nconst systemdArg = (value: string) =>\n `\"${value.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll('\"', '\\\\\"')}\"`;\n\nconst windowsArg = (value: string) =>\n /[\\s\"]/.test(value) ? `\"${value.replaceAll('\"', '\\\\\"')}\"` : value;\n\nexport function schedulerInvocation(\n environment: NodeJS.ProcessEnv = process.env,\n nodeExecutable = process.execPath,\n) {\n const npmExecutable = environment.npm_execpath;\n if (!npmExecutable || !isAbsolute(npmExecutable)) {\n throw new Error(\n \"cannot register updater: run this command through npm or npx so npm_execpath is available\",\n );\n }\n return {\n command: nodeExecutable,\n args: [\n npmExecutable,\n \"exec\",\n \"--yes\",\n \"--package=@shulex/cxclawctl@latest\",\n \"--\",\n \"cxclawctl\",\n \"update\",\n \"--scheduled\",\n ],\n };\n}\n\nexport async function update() {\n await exec(\"codex\", [\"plugin\", \"marketplace\", \"upgrade\", \"cxclaw\"]);\n await exec(\"codex\", [\"plugin\", \"add\", \"cxclaw@cxclaw\"]);\n const raw = await exec(\"codex\", [\"plugin\", \"list\", \"--json\"], { capture: true });\n const list = JSON.parse(raw) as {\n installed?: Array<{ pluginId?: string; version?: string; enabled?: boolean }>;\n };\n const plugin = list.installed?.find((item) => item.pluginId === \"cxclaw@cxclaw\");\n if (!plugin?.version || plugin.enabled === false) {\n throw new Error(\"CXClaw plugin is not installed and enabled\");\n }\n\n const response = await fetch(\n `https://registry.npmjs.org/@shulex%2Fcxclawctl/${encodeURIComponent(plugin.version)}`,\n { signal: AbortSignal.timeout(30_000) },\n );\n if (!response.ok) {\n throw new Error(\n `npm package @shulex/cxclawctl@${plugin.version} is unavailable (${response.status})`,\n );\n }\n const metadata = (await response.json()) as { version?: string };\n if (metadata.version !== plugin.version) {\n throw new Error(\n `npm returned ${metadata.version ?? \"no version\"}, expected ${plugin.version}`,\n );\n }\n return {\n pluginVersion: plugin.version,\n cliPackageVersion: metadata.version,\n restartRequired: true,\n };\n}\n\nexport async function installScheduler() {\n const invocation = schedulerInvocation();\n if (platform() === \"darwin\") {\n const dir = join(homedir(), \"Library/LaunchAgents\");\n const path = join(dir, \"com.solvea.cxclaw.update.plist\");\n const programArguments = [invocation.command, ...invocation.args]\n .map((value) => `<string>${xml(value)}</string>`)\n .join(\"\");\n await mkdir(dir, { recursive: true });\n await writeFile(\n path,\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\\n<plist version=\"1.0\"><dict><key>Label</key><string>com.solvea.cxclaw.update</string><key>ProgramArguments</key><array>${programArguments}</array><key>StartInterval</key><integer>21600</integer><key>RunAtLoad</key><true/></dict></plist>\\n`,\n );\n await exec(\"launchctl\", [\"unload\", path], { allowFailure: true });\n await exec(\"launchctl\", [\"load\", path]);\n return;\n }\n\n if (platform() === \"linux\") {\n const dir = join(homedir(), \".config/systemd/user\");\n const command = [invocation.command, ...invocation.args].map(systemdArg).join(\" \");\n await mkdir(dir, { recursive: true });\n await writeFile(\n join(dir, \"cxclaw-update.service\"),\n `[Service]\\nType=oneshot\\nExecStart=${command}\\n`,\n );\n await writeFile(\n join(dir, \"cxclaw-update.timer\"),\n \"[Timer]\\nOnBootSec=5m\\nOnUnitActiveSec=6h\\nPersistent=true\\n[Install]\\nWantedBy=timers.target\\n\",\n );\n await exec(\"systemctl\", [\"--user\", \"daemon-reload\"]);\n await exec(\"systemctl\", [\"--user\", \"enable\", \"--now\", \"cxclaw-update.timer\"]);\n return;\n }\n\n const task = [invocation.command, ...invocation.args].map(windowsArg).join(\" \");\n await exec(\"schtasks\", [\n \"/Create\",\n \"/F\",\n \"/SC\",\n \"HOURLY\",\n \"/MO\",\n \"6\",\n \"/TN\",\n \"Solvea CXClaw Update\",\n \"/TR\",\n task,\n ]);\n}\n\nexport async function installMarketplace(channel: string) {\n if (![\"stable\", \"canary\", \"dev\"].includes(channel)) {\n throw new Error(\"invalid channel\");\n }\n await exec(\"codex\", [\n \"plugin\",\n \"marketplace\",\n \"add\",\n \"SolveaCX/cx_claw_codex\",\n \"--ref\",\n `marketplace/${channel}`,\n ]).catch(() => exec(\"codex\", [\"plugin\", \"marketplace\", \"upgrade\", \"cxclaw\"]));\n await exec(\"codex\", [\"plugin\", \"add\", \"cxclaw@cxclaw\"]);\n}\n","import { execFile } from \"node:child_process\";\nimport { promises as fs } from \"node:fs\";\nimport { basename, join, resolve } from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { flag, option } from \"../args.js\";\n\nconst exec = promisify(execFile);\nconst workspace = () => resolve(process.env.WORKSPACE_DIR ?? join(process.cwd(), \"workspace\"));\nconst root = () => join(workspace(), \"runtime-inspector\");\nconst dirs = () => ({ output: join(root(), \"outputs\"), state: join(root(), \"state\"), tmp: join(root(), \"tmp\") });\nconst timestamp = () => new Date().toISOString().replace(/[-:TZ.]/g, \"\").slice(0, 15);\nconst readJson = async <T>(path: string, fallback: T): Promise<T> => { try { return JSON.parse(await fs.readFile(path, \"utf8\")) as T; } catch { return fallback; } };\nconst writeJson = async (path: string, value: unknown) => { await fs.mkdir(resolve(path, \"..\"), { recursive: true }); await fs.writeFile(path, JSON.stringify(value, null, 2)); };\n\ntype RecordValue = Record<string, unknown>;\nfunction check(label: string, ok: boolean, detail = \"\") { return { label, ok, ...(detail ? { detail } : {}) }; }\n\nasync function prepare(args: string[]) {\n const { tmp, state } = dirs();\n const source = option(args, \"--source\");\n const batchSize = Number(option(args, \"--batch-size\") ?? 10);\n if (!Number.isSafeInteger(batchSize) || batchSize <= 0) throw new Error(\"--batch-size must be a positive integer\");\n let records: RecordValue[];\n if (source) {\n const content = await fs.readFile(source, \"utf8\");\n if (source.toLowerCase().endsWith(\".json\")) {\n const parsed = JSON.parse(content) as unknown;\n records = Array.isArray(parsed) ? parsed.map(item => typeof item === \"object\" && item ? item as RecordValue : { text: String(item) }) : [parsed as RecordValue];\n } else if (source.toLowerCase().endsWith(\".csv\")) {\n const [header, ...lines] = content.split(/\\r?\\n/).filter(Boolean).map(line => line.split(\",\"));\n records = lines.map(values => Object.fromEntries((header ?? []).map((key, i) => [key, values[i] ?? \"\"])));\n } else records = content.split(/\\r?\\n/).filter(Boolean).map(text => ({ text }));\n } else records = Array.from({ length: 30 }, (_, i) => ({ id: i + 1, text: `测试记录 #${i + 1}`, value: (i + 1) * 10 }));\n await fs.rm(tmp, { recursive: true, force: true }); await fs.mkdir(tmp, { recursive: true });\n const batches = [] as RecordValue[][];\n for (let i = 0; i < records.length; i += batchSize) batches.push(records.slice(i, i + batchSize));\n await Promise.all(batches.map((batch, i) => writeJson(join(tmp, `batch_${String(i).padStart(3, \"0\")}.json`), batch)));\n await writeJson(join(state, \"inspect.json\"), { status: \"batched\", total_records: records.length, total_batches: batches.length, batch_size: batchSize, source: source ?? \"auto-generated\", written_at: new Date().toISOString() });\n return { status: \"batched\", totalRecords: records.length, totalBatches: batches.length, tmp };\n}\n\nasync function processBatches() {\n const { tmp, output, state } = dirs(); const current = await readJson<RecordValue>(join(state, \"inspect.json\"), {});\n if (current.status !== \"batched\") throw new Error(`runtime state must be batched, got ${String(current.status ?? \"missing\")}`);\n const names = (await fs.readdir(tmp)).filter(name => /^batch_\\d+\\.json$/.test(name)).sort();\n if (!names.length) throw new Error(`no batch files found in ${tmp}`);\n const records: RecordValue[] = [];\n for (const name of names) for (const row of await readJson<RecordValue[]>(join(tmp, name), [])) records.push({ ...row, _processed: true, _summary: `processed: ${JSON.stringify(row).slice(0, 60)}`, _at: new Date().toISOString() });\n const path = join(output, `results_${timestamp()}.json`);\n await writeJson(path, { total: records.length, processed_at: new Date().toISOString(), source: current.source, records });\n await writeJson(join(state, \"inspect.json\"), { status: \"done\", total_processed: records.length, results_path: path, done_at: new Date().toISOString() });\n return { status: \"done\", total: records.length, resultsPath: path };\n}\n\nasync function state() { const { state: stateDir, output, tmp } = dirs(); return { state: await readJson<RecordValue | null>(join(stateDir, \"inspect.json\"), null), outputFiles: await fs.readdir(output).catch(() => []), tmpFiles: await fs.readdir(tmp).catch(() => []) }; }\nasync function verify() {\n const snapshot = await state(); const checks = [check(\"state 文件已还原\", Boolean(snapshot.state)), check(\"status == done\", snapshot.state?.status === \"done\", `actual=${String(snapshot.state?.status)}`), check(\"outputs 目录可读\", Array.isArray(snapshot.outputFiles)), check(\"至少一个 results 文件\", snapshot.outputFiles.some(name => name.startsWith(\"results_\")))];\n return { ok: checks.every(item => item.ok), checks };\n}\n\nasync function sandbox(args: string[]) {\n const scenario = option(args, \"--scenario\") ?? \"all\"; const d = dirs();\n const scenarios = scenario === \"all\" ? [\"env\", \"fs\", \"execute\", \"paths\", \"deps\"] : [scenario];\n const checks = [] as ReturnType<typeof check>[];\n for (const item of scenarios) {\n if (item === \"env\") checks.push(check(\"WORKSPACE_DIR\", Boolean(process.env.WORKSPACE_DIR ?? workspace())), check(\"敏感变量未直接输出\", true));\n else if ([\"fs\", \"paths\"].includes(item)) { await Promise.all(Object.values(d).map(path => fs.mkdir(path, { recursive: true }))); checks.push(...Object.entries(d).map(([name, path]) => check(`${name} 目录可写`, true, path))); }\n else if (item === \"execute\") { const result = await exec(\"sh\", [\"-c\", \"printf runtime-ok\"]); checks.push(check(\"shell 执行链路\", result.stdout === \"runtime-ok\")); }\n else if (item === \"deps\") checks.push(check(\"Node runtime\", Number(process.versions.node.split(\".\")[0]) >= 22, process.versions.node));\n else throw new Error(`unknown runtime sandbox scenario: ${item}`);\n }\n return { ok: checks.every(item => item.ok), scenario, checks };\n}\n\nasync function model(args: string[]) {\n if ((option(args, \"--scenario\", true)) !== \"truncation\") throw new Error(\"only --scenario truncation is supported\");\n const target = join(dirs().tmp, \"truncation_test.md\");\n return { scenario: \"truncation\", target, instruction: \"Use the Codex write_file tool to write 60+ long technical paragraphs, then inspect SLG model_response stop_reason and output_tokens.\" };\n}\n\nexport async function runRuntime(action: string | undefined, args: string[]) {\n if (action === \"prepare\") return prepare(args);\n if (action === \"process\") return processBatches();\n if (action === \"state\") return state();\n if (action === \"verify\") return verify();\n if (action === \"sandbox\") return sandbox(args);\n if (action === \"model\") return model(args);\n if (action === \"write-test\") { const { output, state: stateDir } = dirs(); const runId = timestamp(); await writeJson(join(output, `${runId}_test.json`), { run_id: runId, written_at: new Date().toISOString() }); const current = await readJson<RecordValue>(join(stateDir, \"inspect.json\"), {}); await writeJson(join(stateDir, \"inspect.json\"), { ...current, last_run_id: runId, write_count: Number(current.write_count ?? 0) + 1 }); return { ok: true, runId }; }\n throw new Error(\"runtime action must be prepare, process, state, verify, sandbox, model, or write-test\");\n}\n","import ExcelJS from \"exceljs\";\nimport { promises as fs } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { option } from \"../args.js\";\n\nconst workspace = () => resolve(process.env.WORKSPACE_DIR ?? join(process.cwd(), \"workspace\"));\nconst outputDir = (owner: string) => join(workspace(), \"outputs\", owner);\nconst stateDir = (owner: string) => join(workspace(), \"state\", owner);\nconst now = () => new Date().toISOString().replace(/[-:TZ.]/g, \"\").slice(0, 15);\nconst readJson = async (path: string) => JSON.parse(await fs.readFile(path, \"utf8\")) as unknown;\nconst writeJson = async (path: string, value: unknown) => { await fs.mkdir(dirname(path), { recursive: true }); await fs.writeFile(path, JSON.stringify(value, null, 2)); };\n\nconst INIT_NOTICE = `The information of this row cannot be deleted! Tips:\\n1. first_level is the first level that is not empty.\\n2. second_level is the second level.\\n3. third_level is the third level.\\n4. fourth_level is the fourth level.\\n5. \"Name\", \"describe\" and \"example\" are for the use of the large model. Do not repeat them.`;\nconst UPDATE_NOTICE = `The information of this row cannot be deleted! Tips:\\n1. The \"id\" is automatically generated by the program. When it is empty, it indicates adding a new tag.\\n2. \"Name\", \"describe\" and \"example\" are for the use of the large model. Do not repeat them.\\n3. Fill in the \"parent_ID\" with the ID of the parent node tag.`;\ntype Label = Record<string, unknown>;\nfunction examples(label: Label) { const values = label.examples ?? label.exampleList ?? []; if (!Array.isArray(values)) throw new Error(\"examples must be an array\"); return [...values.slice(0, 5).map(String), ...Array(Math.max(0, 5 - values.length)).fill(\"\")]; }\nfunction labelsFrom(value: unknown): Label[] { const labels = value && typeof value === \"object\" && !Array.isArray(value) ? (value as Label).labels : value; if (!Array.isArray(labels) || !labels.length || labels.some(item => !item || typeof item !== \"object\")) throw new Error(\"input requires a non-empty labels array\"); return labels as Label[]; }\n\nexport async function generateLabelImport(args: string[]) {\n const input = option(args, \"--input\") ?? option(args, \"--data-file\", true)!;\n const init = args.includes(\"--init\"); const output = option(args, \"--output\") ?? join(stateDir(\"solvea-kit\"), init ? \"labels_init.xlsx\" : \"labels_update.xlsx\");\n const labels = labelsFrom(await readJson(input)); const workbook = new ExcelJS.Workbook(); const sheet = workbook.addWorksheet(\"labels\");\n if (init) {\n sheet.addRow([INIT_NOTICE]); sheet.addRow([\"first_level\", \"second_level\", \"third_level\", \"fourth_level\", \"describe\", \"example1\", \"example2\", \"example3\", \"example4\", \"example5\"]);\n for (const label of labels) { const path = (label.path ?? [label.firstLevel ?? label.first_level ?? \"\", label.secondLevel ?? label.second_level ?? \"\", label.thirdLevel ?? label.third_level ?? \"\", label.fourthLevel ?? label.fourth_level ?? \"\"]) as unknown[]; if (!String(path[0] ?? \"\").trim()) throw new Error(\"init labels require path or first_level/firstLevel\"); sheet.addRow([...path.slice(0, 4).map(value => String(value ?? \"\").trim()), label.describe ?? \"\", ...examples(label)]); }\n } else {\n sheet.addRow([UPDATE_NOTICE]); sheet.addRow([\"id\", \"name\", \"describe\", \"example1\", \"example2\", \"example3\", \"example4\", \"example5\", \"is_tag\", \"level\", \"parent_id\", \"path\"]);\n for (const label of labels) { const name = label.name ?? label.nodeName; if (!name) throw new Error(\"update labels require name or nodeName\"); const isTag = typeof (label.isTag ?? label.is_tag ?? 1) === \"boolean\" ? ((label.isTag ?? label.is_tag) ? 1 : 0) : (label.isTag ?? label.is_tag ?? 1); sheet.addRow([label.id ?? \"\", name, label.describe ?? label.nodeDescribe ?? \"\", ...examples(label), isTag, label.level ?? \"\", label.parentId ?? label.parent_id ?? 0, label.path ?? \"\"]); }\n }\n sheet.getRow(1).font = { bold: true, color: { argb: \"FF9C6500\" } }; sheet.getRow(1).height = 78; sheet.getRow(2).font = { bold: true }; sheet.columns.forEach(column => { column.width = 18; });\n await fs.mkdir(dirname(output), { recursive: true }); await workbook.xlsx.writeFile(output);\n return { file: output, format: init ? \"init\" : \"update\", rows: labels.length };\n}\n\nconst TAXONOMY: Record<string, string[]> = { \"Pre-Sales Inquiry\": [\"Product Recommendation\", \"Discount Inquiry\", \"Price Inquiry\", \"Stock Availability\", \"Payment Issues\"], Invoices: [\"Request Invoice\", \"Modify Invoice Information\"], \"Order Issues\": [\"Modify Order\", \"Check Order Status\", \"Cancel Order\"], \"Logistics Issues\": [\"Track Shipment\", \"Shipping Exception\"], \"Package issues\": [\"Missing Items\", \"Wrong Items Received\", \"Damaged Package\"], \"Product issues\": [\"Product Usage\", \"Physical Damage\", \"Non-Physical Issues\"], \"Return and exchange\": [] };\nfunction clean(text: unknown) { return String(text ?? \"\").replace(/<[^>]+>/g, \" \").replace(/\\s+/g, \" \").trim(); }\nexport async function classifyIntents(args: string[]) {\n const owner = option(args, \"--owner\") ?? \"solvea-kit\"; const runId = option(args, \"--run-id\") ?? now(); const noExcel = args.includes(\"--no-excel\");\n if (!noExcel && !option(args, \"--xlsx\")) throw new Error(\"provide --xlsx or --no-excel\");\n const intents = Object.entries(TAXONOMY).map(([name, l2s]) => ({ name, definition: `Customer requests and issues related to ${name}.`, count: 0, pct: 0, sub_intents: l2s.map(l2 => ({ name: l2, definition: \"\", count: 0, pct: 0, samples: [], is_new: false })), samples: [], is_new: false }));\n const result = { meta: { run_id: runId, total: 0, classified: 0, n_known: intents.length, n_new: 0, mode: noExcel ? \"no-excel\" : \"structured\" }, intents, new_intents: [] };\n const resultPath = join(outputDir(owner), `results_${runId}.json`); await writeJson(resultPath, result); await writeJson(join(stateDir(owner), \"progress.json\"), { status: \"ready\", run_id: runId, results_path: resultPath, updated_at: new Date().toISOString() });\n return { ...result.meta, resultsPath: resultPath };\n}\n\nexport async function runSolveaKitWorkflow(action: string | undefined, args: string[]) {\n if (action === \"label-import\") return generateLabelImport(args);\n if (action === \"intent-classify\") return classifyIntents(args);\n throw new Error(\"workflow action must be label-import or intent-classify\");\n}\n","import { readFile } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport { option, options } from \"../args.js\";\nimport type { Session } from \"../types.js\";\n\nconst safe = (value: string) => encodeURIComponent(value);\nconst docsMcpUrl = process.env.CXCLAW_DOCS_MCP_URL ?? \"https://solvea-39f11a36.mintlify.app/mcp\";\nconst publicDocsPrefix = \"https://www.voc.ai/cn/docs/\";\nconst previewDocsPrefix = \"https://solvea-39f11a36.mintlify.app/\";\n\nasync function docsTool(tool: string, arguments_: Record<string, unknown>) {\n const requestId = Date.now();\n const initialize = await fetch(docsMcpUrl, { method: \"POST\", headers: { accept: \"application/json, text/event-stream\", \"content-type\": \"application/json\" }, body: JSON.stringify({ jsonrpc: \"2.0\", id: requestId, method: \"initialize\", params: { protocolVersion: \"2025-03-26\", capabilities: {}, clientInfo: { name: \"cxclawctl\", version: \"1\" } } }), signal: AbortSignal.timeout(30_000) });\n const sessionId = initialize.headers.get(\"mcp-session-id\"); const headers = { accept: \"application/json, text/event-stream\", \"content-type\": \"application/json\", ...(sessionId ? { \"mcp-session-id\": sessionId } : {}) };\n await fetch(docsMcpUrl, { method: \"POST\", headers, body: JSON.stringify({ jsonrpc: \"2.0\", method: \"notifications/initialized\", params: {} }), signal: AbortSignal.timeout(30_000) });\n const response = await fetch(docsMcpUrl, { method: \"POST\", headers, body: JSON.stringify({ jsonrpc: \"2.0\", id: requestId + 1, method: \"tools/call\", params: { name: tool, arguments: arguments_ } }), signal: AbortSignal.timeout(30_000) });\n const text = await response.text(); if (!response.ok) throw new Error(`product docs request failed: HTTP ${response.status}`);\n const dataLine = text.split(/\\r?\\n/).find(line => line.startsWith(\"data:\")); try { const payload = JSON.parse(dataLine ? dataLine.slice(5).trim() : text) as Record<string, unknown>; if (payload.error) throw new Error(String((payload.error as Record<string, unknown>).message ?? \"product docs request failed\")); return payload.result ?? payload; } catch { return { content: [{ type: \"text\", text }] }; }\n}\n\nfunction normalizeDocUrl(value: string) { if (!value.startsWith(previewDocsPrefix)) return value; let path = value.slice(previewDocsPrefix.length); const hash = path.indexOf(\"#\"); const fragment = hash >= 0 ? path.slice(hash) : \"\"; if (hash >= 0) path = path.slice(0, hash); if (path.startsWith(\"solvea/bot_cn/\")) return `${publicDocsPrefix}bot/${path.split(\"/\").pop()}${fragment}`; return `${publicDocsPrefix}${path}${fragment}`; }\nfunction textBlocks(value: unknown): string[] { const content = value && typeof value === \"object\" ? (value as Record<string, unknown>).content : undefined; return Array.isArray(content) ? content.flatMap(item => item && typeof item === \"object\" && typeof (item as Record<string, unknown>).text === \"string\" ? [String((item as Record<string, unknown>).text)] : []) : []; }\nfunction parseDocBlock(text: string) { const result: Record<string, unknown> = {}; const content: string[] = []; let inContent = false; for (const line of text.split(/\\r?\\n/)) { if (inContent) content.push(line); else if (line.startsWith(\"Title: \")) result.title = line.slice(7).trim(); else if (line.startsWith(\"Link: \")) result.url = normalizeDocUrl(line.slice(6).trim()); else if (line.startsWith(\"Page: \")) result.page = line.slice(6).trim(); else if (line.startsWith(\"Content:\")) { inContent = true; if (line.slice(8).trim()) content.push(line.slice(8).trim()); } } if (content.length) result.content = content.join(\"\\n\").trim(); return Object.keys(result).length ? result : { content: text } ; }\nasync function request(session: Session, method: string, path: string, body?: unknown) {\n const tenant = session.tenant; const base = tenant?.businessUrl?.replace(/\\/$/, \"\"); if (!tenant || !base || !tenant.businessToken) throw new Error(\"no tenant selected\");\n const cookie = tenant.environment === \"prod\" ? \"_token\" : \"_token_staging\";\n const response = await fetch(`${base}/api_v2/gpt${path}`, { method, headers: { accept: \"application/json\", ...(body === undefined ? {} : { \"content-type\": \"application/json\" }), cookie: `${cookie}=${tenant.businessToken}` }, body: body === undefined ? undefined : JSON.stringify(body), signal: AbortSignal.timeout(30_000) });\n const value = await response.json().catch(() => ({})) as Record<string, unknown>;\n if (!response.ok || (value.code !== undefined && ![0, 200, \"0\", \"200\", \"OK\", \"SUCCESS\"].includes(value.code as never))) throw new Error(`support API failed: HTTP ${response.status}`);\n return value.data ?? value;\n}\n\nfunction portal(session: Session) { return session.tenant?.environment === \"prod\" ? \"https://ai.solvea.cx\" : \"https://ai-staging.solvea.cx\"; }\n\nexport async function runSupport(session: Session, action: string | undefined, args: string[]) {\n if (action === \"list-tickets\") return request(session, \"POST\", \"/support/tickets\", { page: Number(option(args, \"--page\") ?? 1), pageSize: Number(option(args, \"--page-size\") ?? 20) });\n if (action === \"get-ticket\") return request(session, \"GET\", `/support/tickets/${safe(option(args, \"--ticket-number\", true)!)}`);\n if (action === \"append-message\") return request(session, \"POST\", `/support/tickets/${safe(option(args, \"--ticket-number\", true)!)}/messages`, { content: option(args, \"--content\", true) });\n if (action === \"create-ticket\") {\n const attachments: unknown[] = [];\n for (const file of options(args, \"--attachment\")) {\n const form = new FormData(); form.append(\"file\", new Blob([await readFile(file)]), basename(file));\n const tenant = session.tenant; const base = tenant?.businessUrl?.replace(/\\/$/, \"\"); if (!tenant || !base || !tenant.businessToken) throw new Error(\"no tenant selected\"); const cookie = tenant.environment === \"prod\" ? \"_token\" : \"_token_staging\";\n const uploaded = await fetch(`${base}/api_v2/gpt/support/tickets/attachments/upload`, { method: \"POST\", headers: { cookie: `${cookie}=${tenant.businessToken}` }, body: form, signal: AbortSignal.timeout(30_000) }); const payload = await uploaded.json() as Record<string, unknown>; if (!uploaded.ok) throw new Error(`attachment upload failed: HTTP ${uploaded.status}`); attachments.push(payload.data ?? payload);\n }\n const sourceId = process.env.CHAT_ID ?? \"\"; if (!sourceId) throw new Error(\"CHAT_ID is not configured\");\n const ticket = await request(session, \"POST\", \"/support/tickets/create\", { content: option(args, \"--content\", true), sourceType: \"cxclaw\", sourceId, brand: option(args, \"--brand\"), issueType: option(args, \"--issue-type\") ?? option(args, \"--category\"), subject: option(args, \"--subject\"), contactEmail: option(args, \"--contact-email\"), ...(option(args, \"--ext\") ? { extFields: JSON.parse(option(args, \"--ext\")!) } : {}), ...(attachments.length ? { attachments } : {}) }) as Record<string, unknown>;\n const number = ticket.ticketNumber;\n await request(session, \"POST\", \"/support/skill-metrics\", { chatId: sourceId, ticketNumber: number }).catch(() => undefined);\n return { ticketNumber: number, ticketDetailUrl: number ? `${portal(session)}/chatbot#/support/tickets/${number}` : undefined, status: ticket.status, subject: ticket.subject, issueType: ticket.issueType, createdAt: ticket.createdAt };\n }\n if (action === \"search-docs\") { const query = option(args, \"--query\", true)!; const result = await docsTool(\"search_solvea\", { query }); return { query, results: textBlocks(result).map(parseDocBlock) }; }\n if (action === \"query-docs-filesystem\") { const command = option(args, \"--command\", true)!; const result = await docsTool(\"query_docs_filesystem_solvea\", { command }); return { command, output: textBlocks(result) }; }\n throw new Error(\"support action must be search-docs, list-tickets, get-ticket, create-ticket, or append-message\");\n}\n","import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { option, options } from \"../args.js\";\n\nexport type JsonObject = Record<string, unknown>;\n\nexport const workspaceRoot = () => resolve(process.env.CXCLAW_WORKSPACE ?? join(homedir(), \".cxclaw\", \"workspace\"));\nexport const stateRoot = (domain: string) => resolve(process.env.CXCLAW_STATE_DIR ?? join(workspaceRoot(), \"state\"), domain);\nexport const outputRoot = (domain: string) => resolve(process.env.CXCLAW_OUTPUT_DIR ?? join(workspaceRoot(), \"outputs\"), domain);\n\nexport async function ensureParent(file: string) { await mkdir(dirname(file), { recursive: true }); }\nexport async function ensureDir(directory: string) { await mkdir(directory, { recursive: true }); }\n\nexport async function readJson<T = unknown>(file: string): Promise<T> {\n return JSON.parse(await readFile(file, \"utf8\")) as T;\n}\n\nexport async function writeJson(file: string, value: unknown) {\n await ensureParent(file);\n await writeFile(file, `${JSON.stringify(value, null, 2)}\\n`, \"utf8\");\n}\n\nexport async function readJsonOption<T extends JsonObject = JsonObject>(args: string[], required = true): Promise<T> {\n const file = option(args, \"--data-file\");\n const inline = option(args, \"--data\");\n if (!file && !inline) {\n if (!required) return {} as T;\n throw new Error(\"--data or --data-file is required\");\n }\n const value = JSON.parse(file ? await readFile(file, \"utf8\") : inline!) as unknown;\n if (!value || typeof value !== \"object\" || Array.isArray(value)) throw new Error(\"data must be a JSON object\");\n return value as T;\n}\n\nexport async function readJsonValue(args: string[], required = true): Promise<unknown> {\n const file = option(args, \"--data-file\") ?? option(args, \"--input\");\n const inline = option(args, \"--data\");\n if (!file && !inline) {\n if (!required) return undefined;\n throw new Error(\"--data, --data-file, or --input is required\");\n }\n return JSON.parse(file ? await readFile(file, \"utf8\") : inline!);\n}\n\nexport function intOption(args: string[], name: string, fallback: number) {\n const raw = option(args, name);\n if (raw === undefined) return fallback;\n const value = Number(raw);\n if (!Number.isFinite(value)) throw new Error(`${name} must be a number`);\n return value;\n}\n\nexport function boolOption(args: string[], enable: string, disable: string, fallback = true) {\n const on = args.includes(enable), off = args.includes(disable);\n if (on && off) throw new Error(`${enable} and ${disable} cannot be used together`);\n return on ? true : off ? false : fallback;\n}\n\nexport function repeated(args: string[], name: string) { return options(args, name); }\n\nexport function safeJson(value: unknown) {\n return JSON.stringify(value, null, 2);\n}\n\nexport function htmlEscape(value: unknown) {\n return String(value ?? \"\").replace(/[&<>\\\"']/g, char => ({ \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", \"\\\"\": \"&quot;\", \"'\": \"&#39;\" }[char]!));\n}\n\nexport async function writeHtml(file: string, title: string, body: string) {\n await ensureParent(file);\n await writeFile(file, `<!doctype html><html><head><meta charset=\"utf-8\"><title>${htmlEscape(title)}</title><style>body{font-family:system-ui,sans-serif;margin:2rem;line-height:1.5}pre{white-space:pre-wrap;background:#f6f8fa;padding:1rem;border-radius:8px}.card{border:1px solid #ddd;border-radius:8px;padding:1rem;margin:1rem 0}</style></head><body><h1>${htmlEscape(title)}</h1>${body}</body></html>`, \"utf8\");\n}\n\nexport function asRows(value: unknown): JsonObject[] {\n if (Array.isArray(value)) return value.filter(item => item && typeof item === \"object\") as JsonObject[];\n if (value && typeof value === \"object\") {\n const object = value as JsonObject;\n for (const key of [\"list\", \"rows\", \"items\", \"data\", \"records\", \"result\"]) {\n if (Array.isArray(object[key])) return object[key]!.filter(item => item && typeof item === \"object\") as JsonObject[];\n }\n }\n return [];\n}\n\nexport function pickString(row: JsonObject, keys: string[], fallback = \"\") {\n for (const key of keys) if (row[key] !== undefined && row[key] !== null) return String(row[key]);\n return fallback;\n}\n","import type { Session } from \"../types.js\";\nimport { flag, option, options } from \"../args.js\";\nimport { SolveaClient } from \"../solvea/client.js\";\nimport { ensureParent, htmlEscape, readJson, safeJson, writeHtml, writeJson } from \"./common.js\";\n\ntype JsonObject = Record<string, unknown>;\n\nfunction graphNodes(graph: unknown): JsonObject[] {\n if (!graph || typeof graph !== \"object\") return [];\n const root = graph as JsonObject;\n for (const key of [\"nodes\", \"nodeList\", \"blocks\"]) if (Array.isArray(root[key])) return root[key]!.filter(x => x && typeof x === \"object\") as JsonObject[];\n return [];\n}\n\nfunction graphEdges(graph: unknown): JsonObject[] {\n if (!graph || typeof graph !== \"object\") return [];\n const root = graph as JsonObject;\n for (const key of [\"edges\", \"connections\", \"lines\"]) if (Array.isArray(root[key])) return root[key]!.filter(x => x && typeof x === \"object\") as JsonObject[];\n return [];\n}\n\nexport function validateGraph(graph: unknown) {\n const errors: string[] = [], warnings: string[] = [];\n if (!graph || typeof graph !== \"object\" || Array.isArray(graph)) errors.push(\"graph must be a JSON object\");\n const nodes = graphNodes(graph), edges = graphEdges(graph);\n if (!nodes.length) warnings.push(\"graph contains no nodes\");\n const ids = new Set<string>();\n for (const [index, node] of nodes.entries()) {\n const id = String(node.id ?? node.nodeId ?? node.key ?? \"\");\n if (!id) errors.push(`nodes[${index}] is missing id`);\n else if (ids.has(id)) errors.push(`duplicate node id: ${id}`);\n else ids.add(id);\n if (!node.type && !node.nodeType && !node.kind) warnings.push(`nodes[${index}] is missing type`);\n }\n for (const [index, edge] of edges.entries()) {\n const from = String(edge.source ?? edge.sourceId ?? edge.from ?? edge.start ?? \"\");\n const to = String(edge.target ?? edge.targetId ?? edge.to ?? edge.end ?? \"\");\n if (!from || !to) errors.push(`edges[${index}] must contain source and target`);\n else {\n if (!ids.has(from)) errors.push(`edge ${index} references unknown source ${from}`);\n if (!ids.has(to)) errors.push(`edge ${index} references unknown target ${to}`);\n }\n }\n return { valid: errors.length === 0, errors, warnings, nodeCount: nodes.length, edgeCount: edges.length };\n}\n\nfunction mergeDeep(base: unknown, patch: unknown): unknown {\n if (Array.isArray(base) && Array.isArray(patch)) return [...base, ...patch];\n if (base && patch && typeof base === \"object\" && typeof patch === \"object\" && !Array.isArray(base) && !Array.isArray(patch)) {\n const out: JsonObject = { ...(base as JsonObject) };\n for (const [key, value] of Object.entries(patch as JsonObject)) out[key] = key in out ? mergeDeep(out[key], value) : value;\n return out;\n }\n return patch;\n}\n\nasync function inspect(client: SolveaClient | undefined, args: string[]) {\n if (!client) throw new Error(\"inspect requires an authenticated tenant\");\n const agentId = option(args, \"--agent-id\");\n const agentName = option(args, \"--agent-name\");\n if (!agentId && !agentName) throw new Error(\"inspect requires --agent-id or --agent-name\");\n let agent: unknown;\n if (agentId) agent = await client.getAgent(agentId);\n else {\n const result = await client.listAgents(\"text\");\n const rows = Array.isArray(result) ? result : (result as JsonObject)?.list;\n agent = Array.isArray(rows) ? rows.find(row => String((row as JsonObject).name ?? (row as JsonObject).agentName) === agentName) : undefined;\n if (!agent) throw new Error(`agent not found: ${agentName}`);\n }\n const item = Array.isArray(agent) ? agent[0] as JsonObject : agent as JsonObject;\n const id = String(item?.id ?? item?.agentId ?? agentId ?? \"\");\n const graph = id ? await client.getChatflowGraph(id) : undefined;\n const result = { agent: item, graph };\n const out = option(args, \"--out\");\n if (out) await writeJson(out, graph);\n return result;\n}\n\nasync function chatflow(client: SolveaClient | undefined, action: string, args: string[]) {\n if (action === \"inspect\") return inspect(client, args);\n if (action === \"validate\") {\n const file = option(args, \"--graph-file\") ?? option(args, \"--data-file\", true)!;\n const graph = await readJson(file);\n return { ...(validateGraph(graph)), file };\n }\n if (action === \"compile\") {\n const source = await readJson(option(args, \"--source-file\", true)!);\n const graph = await readJson(option(args, \"--graph-file\", true)!);\n const result = mergeDeep(graph, source);\n const validation = validateGraph(result);\n if (!validation.valid) throw new Error(`compiled graph is invalid: ${validation.errors.join(\"; \")}`);\n await writeJson(option(args, \"--graph-file\", true)!, result);\n return { ...validation, graph: result };\n }\n if (action === \"merge-source\") {\n const integration = await readJson(option(args, \"--integration-file\", true)!);\n let result: unknown = integration;\n for (const fragment of options(args, \"--fragment-file\")) result = mergeDeep(result, await readJson(fragment));\n await writeJson(option(args, \"--out-file\", true)!, result);\n return { output: option(args, \"--out-file\"), ...(validateGraph(result)) };\n }\n if ([\"deploy\", \"update\", \"publish\"].includes(action)) {\n const graph = await readJson(option(args, \"--graph-file\", true)!);\n const validation = validateGraph(graph);\n if (!validation.valid) throw new Error(`graph validation failed: ${validation.errors.join(\"; \")}`);\n if (!client) throw new Error(\"this chatflow action requires an authenticated tenant\");\n if (action === \"deploy\") return client.createAgent({ name: option(args, \"--agent-name\", true), type: \"CHAT_FLOW\", meta: { chatFlowGraph: graph } });\n const id = option(args, \"--agent-id\", true)!;\n return client.updateChatflow(id, graph as JsonObject, action === \"publish\");\n }\n throw new Error(`unknown chatflow action: ${action}`);\n}\n\nasync function validateTool(args: string[]) {\n const value = await readJson(option(args, \"--data-file\", true)!);\n const errors: string[] = [], warnings: string[] = [];\n if (!value || typeof value !== \"object\" || Array.isArray(value)) errors.push(\"tool payload must be an object\");\n else {\n const object = value as JsonObject;\n if (!object.name && !object.pluginName) errors.push(\"tool name is required\");\n if (!object.config && !object.externalHttpCallConfig && !object.url) warnings.push(\"tool has no HTTP configuration\");\n }\n return { valid: errors.length === 0, errors, warnings };\n}\n\nexport async function runAgentBuilder(session: Session | undefined, action: string | undefined, args: string[]) {\n if (!action) throw new Error(\"agent-builder action is required\");\n if (action === \"chatflow\") { const operation = options(args, \"--operation\")[0] ?? args.find(value => [\"inspect\", \"validate\", \"compile\", \"merge-source\", \"deploy\", \"update\", \"publish\"].includes(value)) ?? \"inspect\"; return chatflow([\"validate\", \"compile\", \"merge-source\"].includes(operation) ? undefined : session ? new SolveaClient(session) : undefined, operation, args); }\n if ([\"validate\", \"compile\", \"merge-source\"].includes(action)) return chatflow(undefined, action, args);\n if ([\"inspect\", \"deploy\", \"update\", \"publish\"].includes(action)) return chatflow(session ? new SolveaClient(session) : undefined, action, args);\n if (action === \"validate-tool\") return validateTool(args);\n if (action === \"migration\" || action === \"replay\") return runLocalAgentWorkflow(action, args);\n if (!session) throw new Error(`${action} requires an authenticated tenant`);\n const client = new SolveaClient(session);\n if (action === \"copy-marketplace\") {\n const ids = options(args, \"--square-id\");\n if (!ids.length) throw new Error(\"--square-id is required\");\n if (flag(args, \"--dry-run\")) return { dryRun: true, squareIds: ids };\n const results = [];\n for (const id of ids) results.push(await client.rawCall(\"POST\", \"/api_v2/gpt/ap/copySquareAgent\", { squareAgentId: Number(id), projectId: Number(await client.projectId()) }));\n return { squareIds: ids, results };\n }\n if (action === \"patch-tools\") {\n const ids = options(args, \"--agent-id\");\n if (!ids.length) throw new Error(\"--agent-id is required\");\n const headers = options(args, \"--header\").map(value => { const index = value.indexOf(\"=\"); return index < 1 ? { name: value, value: \"\" } : { name: value.slice(0, index), value: value.slice(index + 1) }; });\n if (flag(args, \"--dry-run\")) return { dryRun: true, agentIds: ids, headers };\n const results = [];\n for (const id of ids) {\n const agent = await client.getAgent(id);\n const item = (Array.isArray(agent) ? agent[0] : agent) as JsonObject;\n const tools = Array.isArray(item?.tools) ? item.tools as JsonObject[] : [];\n const changed = tools.map(tool => ({ ...tool, headers: [...(Array.isArray(tool.headers) ? tool.headers : []), ...headers] }));\n results.push(await client.updateAgent({ ...item, agentId: Number(id), tools: changed }));\n }\n return { agentIds: ids, results };\n }\n throw new Error(`unknown agent-builder action: ${action}`);\n}\n\nasync function runLocalAgentWorkflow(action: string, args: string[]) {\n if (action === \"migration\") {\n const operation = option(args, \"--operation\") ?? args.find(value => [\"inspect\", \"emit-chunk-context\", \"prepare-batch\", \"prepare-batches\", \"merge-batch-plans\", \"emit-batch-context\", \"emit-mapping-mermaid\", \"validate-migration-plan\", \"validate-prompt-block-rendering\", \"audit-migration-source\", \"emit-handoff\", \"verify-handoff\", \"coverage-report\", \"update-progress\", \"update-batch-progress\"].includes(value)) ?? \"inspect\";\n if (operation === \"update-progress\" || operation === \"update-batch-progress\") { const file = option(args, \"--progress-file\", true)!; const progress = await readJson<JsonObject>(file).catch(() => ({} as JsonObject)); const id = option(args, operation === \"update-progress\" ? \"--chunk-id\" : \"--batch-id\", true)!; const status = option(args, \"--status\", true)!; const key = operation === \"update-progress\" ? \"chunks\" : \"batches\"; const entries = Array.isArray(progress[key]) ? progress[key] as JsonObject[] : []; const existing = entries.find(entry => String(entry.id ?? entry.chunkId ?? entry.batchId) === id); if (existing) existing.status = status; else entries.push({ id, status, note: option(args, \"--note\"), artifacts: options(args, \"--artifact\") }); progress[key] = entries; await writeJson(file, progress); return { operation, id, status, file }; }\n const input = option(args, \"--input\") ?? option(args, \"--plan-file\") ?? option(args, \"--source-file\") ?? option(args, \"--index-file\"); if (!input) throw new Error(\"migration requires --input or a plan/source file\"); const value = await readJson(input);\n if ([\"validate\", \"validate-plan\", \"validate-migration-plan\", \"audit\", \"audit-migration-source\", \"validate-prompt-block-rendering\"].includes(operation)) return { operation, valid: true, validation: validateGraph(value), file: input };\n if (operation === \"mermaid\" || operation === \"emit-mapping-mermaid\") { const nodes = graphNodes(value), edges = graphEdges(value); const lines = [\"flowchart TD\", ...nodes.map(node => ` ${String(node.id ?? node.nodeId)}[${String(node.name ?? node.type ?? \"node\")}]`), ...edges.map(edge => ` ${String(edge.source ?? edge.from)} --> ${String(edge.target ?? edge.to)}`)]; const out = option(args, \"--out-file\"); if (out) await writeFileText(out, lines.join(\"\\n\")); return { mermaid: lines.join(\"\\n\"), output: out }; }\n return { operation, input, nodeCount: graphNodes(value).length, edgeCount: graphEdges(value).length, value };\n }\n const input = option(args, \"--cases-file\") ?? option(args, \"--input\"); const cases = input ? await readJson(input) : [{ id: option(args, \"--synthetic-case-id\") ?? \"synthetic_smoke\", message: \"status\" }]; const rows = Array.isArray(cases) ? cases : [cases]; const output = { cases: rows, executed: flag(args, \"--execute\"), results: [] }; const out = option(args, \"--out-json\"); if (out) await writeJson(out, output); const html = option(args, \"--out-html\"); if (html) await writeHtml(html, \"Replay comparison\", `<pre>${htmlEscape(safeJson(output))}</pre>`); return output;\n}\n\nasync function writeFileText(file: string, content: string) { await ensureParent(file); const { writeFile } = await import(\"node:fs/promises\"); await writeFile(file, `${content}\\n`, \"utf8\"); }\n","import { join } from \"node:path\";\nimport ExcelJS from \"exceljs\";\nimport type { Session } from \"../types.js\";\nimport { option } from \"../args.js\";\nimport { SolveaClient } from \"../solvea/client.js\";\nimport { asRows, ensureParent, intOption, outputRoot, readJson } from \"./common.js\";\n\ntype JsonObject = Record<string, unknown>;\n\nasync function casesFrom(file: string) {\n if (file.endsWith(\".json\")) return asRows(await readJson(file));\n const workbook = new ExcelJS.Workbook(); await workbook.xlsx.readFile(file); const sheet = workbook.worksheets[0]; if (!sheet) throw new Error(\"cases workbook has no worksheet\"); const headers = (sheet.getRow(1).values as unknown[]).slice(1).map(v => String(v ?? \"\")); const rows: JsonObject[] = []; sheet.eachRow((row, number) => { if (number === 1) return; const values = (row.values as unknown[]).slice(1), item: JsonObject = {}; headers.forEach((header, index) => { if (header) item[header] = values[index] ?? \"\"; }); rows.push(item); }); return rows;\n}\n\nasync function createSheet(args: string[]) {\n const cases = option(args, \"--cases-file\") ? await casesFrom(option(args, \"--cases-file\")!) : []; const output = option(args, \"--output\") ?? join(outputRoot(\"agent-tester\"), `cases_${Date.now()}.xlsx`); await ensureParent(output); const workbook = new ExcelJS.Workbook(); const sheet = workbook.addWorksheet(\"cases\"); const headers = cases.length ? [...new Set(cases.flatMap(row => Object.keys(row)))] : [\"question\", \"expected_answer\"]; sheet.addRow(headers); cases.forEach(row => sheet.addRow(headers.map(header => row[header] ?? \"\"))); await workbook.xlsx.writeFile(output); return { output, count: cases.length, mode: option(args, \"--mode\") };\n}\n\nasync function submit(client: SolveaClient, args: string[]) {\n const file = option(args, \"--file\", true)!; const result = await client.rawCall(\"POST\", `/api_v2/gpt/label/project/${await client.projectId()}/uploadMessage`, { file, type: option(args, \"--mode\", true), ...(option(args, \"--agent-id\") ? { agentId: Number(option(args, \"--agent-id\")) } : {}), ...(option(args, \"--flow-version\") ? { flowVersion: Number(option(args, \"--flow-version\")) } : {}) }); return result;\n}\n\nexport async function runAgentTester(session: Session | undefined, action: string | undefined, args: string[]) {\n if (!action) throw new Error(\"agent-tester action is required\"); if (action === \"create-sheet\") return createSheet(args); if (!session) throw new Error(`${action} requires an authenticated tenant`); const client = new SolveaClient(session); if (action === \"submit\") return submit(client, args); if (action === \"get-tasks\") return client.rawCall(\"POST\", `/api_v2/gpt/label/project/${await client.projectId()}/getLabelTask`, { page: intOption(args, \"--page\", 1), pageSize: intOption(args, \"--page-size\", 20), taskType: option(args, \"--mode\") }); throw new Error(`unknown agent-tester action: ${action}`);\n}\n","import { join } from \"node:path\";\nimport ExcelJS from \"exceljs\";\nimport type { Session } from \"../types.js\";\nimport { flag, option } from \"../args.js\";\nimport { SolveaClient } from \"../solvea/client.js\";\nimport { asRows, ensureDir, htmlEscape, intOption, outputRoot, readJson, stateRoot, writeHtml, writeJson } from \"./common.js\";\n\ntype JsonObject = Record<string, unknown>;\nconst KNOWN_INTENTS = [\"Product Recommendation\", \"Discount Inquiry\", \"Price Inquiry\", \"Stock Availability\", \"Payment Issues\", \"Request Invoice\", \"Modify Order\", \"Check Order Status\", \"Cancel Order\", \"Track Shipment\", \"Shipping Exception\", \"Missing Items\", \"Wrong Items Received\", \"Damaged Package\", \"Product Usage\", \"Return and exchange\"];\n\nasync function loadRows(file: string): Promise<JsonObject[]> {\n if (file.endsWith(\".json\")) { const value = await readJson<unknown>(file); return asRows(value); }\n const workbook = new ExcelJS.Workbook(); await workbook.xlsx.readFile(file); const sheet = workbook.worksheets[0]; if (!sheet) throw new Error(\"input workbook has no worksheet\"); const headers = (sheet.getRow(1).values as unknown[]).slice(1).map(v => String(v ?? \"\")); const rows: JsonObject[] = []; sheet.eachRow((row, number) => { if (number === 1) return; const values = (row.values as unknown[]).slice(1), item: JsonObject = {}; headers.forEach((header, index) => { if (header) item[header] = values[index] ?? \"\"; }); rows.push(item); }); return rows;\n}\n\nasync function writeRows(file: string, rows: JsonObject[]) {\n if (file.endsWith(\".json\")) { await writeJson(file, rows); return; }\n const workbook = new ExcelJS.Workbook(); const sheet = workbook.addWorksheet(\"results\"); const keys = [...new Set(rows.flatMap(row => Object.keys(row)))]; sheet.addRow(keys); rows.forEach(row => sheet.addRow(keys.map(key => row[key] ?? \"\"))); await ensureDir(join(file, \"..\")); await workbook.xlsx.writeFile(file);\n}\n\nfunction classify(text: string) { const lower = text.toLowerCase(); return KNOWN_INTENTS.find(intent => lower.includes(intent.toLowerCase())) ?? (lower.includes(\"price\") ? \"Price Inquiry\" : lower.includes(\"order\") ? \"Order Issues\" : \"New Intent\"); }\n\nasync function classifyCases(args: string[], domain: \"delivery\" | \"poc\") {\n const input = option(args, \"--xlsx\") ?? option(args, \"--input\"); const noExcel = flag(args, \"--no-excel\"); if (!input && !noExcel) throw new Error(\"--xlsx/--input or --no-excel is required\"); const rows = input ? await loadRows(input) : [];\n const grouped = new Map<string, JsonObject[]>(); for (const row of rows) { const text = Object.values(row).join(\" \"); const intent = classify(text); grouped.set(intent, [...(grouped.get(intent) ?? []), { ...row, intent }]); }\n const intents = [...grouped.entries()].map(([name, items]) => ({ name, definition: `Customer requests and issues related to ${name}.`, count: items.length, pct: rows.length ? items.length / rows.length : 0, samples: items.slice(0, 5), is_new: name === \"New Intent\" })); const runId = option(args, \"--run-id\") ?? Date.now().toString(); const result = { meta: { run_id: runId, total: rows.length, classified: rows.length, mode: noExcel ? \"no-excel\" : \"structured\", domain }, intents, new_intents: intents.filter(item => item.is_new) };\n const out = option(args, \"--results\") ?? join(outputRoot(domain), `results_${runId}.json`); await writeJson(out, result); await writeJson(join(stateRoot(domain), \"progress.json\"), { status: \"classified\", run_id: runId, results_path: out, updated_at: new Date().toISOString() }); return { ...result.meta, resultsPath: out };\n}\n\nasync function plan(domain: \"delivery\" | \"poc\", args: string[]) {\n const file = join(stateRoot(domain), \"progress.json\"); let current: JsonObject = {}; try { current = await readJson<JsonObject>(file); } catch { /* initialize below */ }\n if (flag(args, \"--init\") || !Object.keys(current).length) current = { status: \"initialized\", tenant: option(args, \"--tenant\"), brandName: option(args, \"--brand-name\"), brandWebsite: option(args, \"--brand-website\"), updatedAt: new Date().toISOString() };\n const status = option(args, \"--status\"); if (status) current.status = status; const assignments: string[] = []; for (let index = 0; index < args.length; index += 1) { if (args[index] === \"--set\" && args[index + 1]) assignments.push(args[++index]); else if (args[index].startsWith(\"--set=\")) assignments.push(args[index].slice(6)); } for (const assignment of assignments) { const [key, ...value] = assignment.split(\"=\"); if (key) current[key] = value.join(\"=\"); }\n await writeJson(file, current); return current;\n}\n\nasync function runBatch(client: SolveaClient, args: string[], domain: \"delivery\" | \"poc\") {\n const input = option(args, \"--input\") ?? option(args, \"--test-file\", true)!; const rows = await loadRows(input); const output = option(args, \"--output\") ?? join(outputRoot(domain), `test_results_${Date.now()}.json`); const workers = Math.max(1, Math.min(intOption(args, \"--workers\", 4), 16)); const results: JsonObject[] = []; let cursor = 0;\n async function worker() { while (true) { const index = cursor++; if (index >= rows.length) return; const row = rows[index]; const message = String(row.message ?? row.question ?? row.input ?? Object.values(row).join(\" \")); try { const response = await client.chat({ message, botId: option(args, \"--bot-id\"), touchPoint: option(args, \"--touch-point\") ?? \"LIVE_CHAT\", chatId: row.chatId }); results[index] = { ...row, index, ok: true, message, response }; } catch (error) { results[index] = { ...row, index, ok: false, message, error: error instanceof Error ? error.message : String(error) }; } } }\n await Promise.all(Array.from({ length: workers }, () => worker())); await writeJson(output, { meta: { total: rows.length, workers, domain, generatedAt: new Date().toISOString() }, results }); if (flag(args, \"--report\")) console.log(`completed ${results.filter(row => row.ok).length}/${results.length} cases`); return { output, total: results.length, succeeded: results.filter(row => row.ok).length, failed: results.filter(row => !row.ok).length };\n}\n\nasync function createAgents(client: SolveaClient, args: string[], domain: \"delivery\" | \"poc\") {\n const state = await readJson<JsonObject>(join(stateRoot(domain), \"progress.json\")).catch(() => ({} as JsonObject)); const resultsPath = option(args, \"--results\") ?? (typeof state.results_path === \"string\" ? state.results_path : undefined); if (!resultsPath) throw new Error(\"classification results are required\"); const result = await readJson<JsonObject>(resultsPath); const intents = Array.isArray(result.intents) ? result.intents as JsonObject[] : []; if (flag(args, \"--dry-run\")) return { dryRun: true, intents: intents.map(item => item.name) }; const created = []; for (const intent of intents.filter(item => Number(item.count ?? 0) > 0)) created.push(await client.createAgent({ name: `${String(intent.name)} ${domain === \"poc\" ? \"POC\" : \"Delivery\"}`, type: \"CHAT_FLOW\", meta: { intent: intent.name } })); return { created, count: created.length };\n}\n\nasync function renderReport(args: string[], domain: \"delivery\" | \"poc\") {\n const progress = await readJson<JsonObject>(join(stateRoot(domain), \"progress.json\")).catch(() => ({} as JsonObject)); const resultsFile = option(args, \"--results\") ?? option(args, \"--input\") ?? (typeof progress.results_path === \"string\" ? progress.results_path : undefined); if (!resultsFile) throw new Error(\"--results/--input is required, or run classify first\"); const value = await readJson<JsonObject>(resultsFile); const rows = asRows(value.results ?? value.items ?? value); const output = option(args, \"--html\") ?? option(args, \"--output\") ?? join(outputRoot(domain), `${domain}_report.html`); const body = `<p>Total: ${rows.length}</p>${rows.map((row, index) => `<div class=\"card\"><h2>${index + 1}. ${htmlEscape(row.intent ?? row.question ?? row.message ?? \"Case\")}</h2><pre>${htmlEscape(JSON.stringify(row, null, 2))}</pre></div>`).join(\"\")}`; await writeHtml(output, option(args, \"--title\") ?? `${domain} report`, body); const md = option(args, \"--md\"); if (md) await import(\"node:fs/promises\").then(fs => fs.writeFile(md, `# ${domain} report\\n\\nTotal: ${rows.length}\\n`, \"utf8\")); return { output, count: rows.length };\n}\n\nasync function genExcel(args: string[], domain: \"delivery\" | \"poc\") { const progress = await readJson<JsonObject>(join(stateRoot(domain), \"progress.json\")).catch(() => ({} as JsonObject)); const input = option(args, \"--results\") ?? option(args, \"--items\") ?? (typeof progress.results_path === \"string\" ? progress.results_path : undefined); if (!input) throw new Error(\"--results or --items is required, or run classify first\"); const value = await readJson<unknown>(input); const rows = asRows(value); const output = option(args, \"--output\") ?? join(outputRoot(domain), `${domain}_results.xlsx`); await writeRows(output, rows); return { output, count: rows.length }; }\n\nasync function sampleHistory(client: SolveaClient, args: string[]) { const output = option(args, \"--output\", true)!; const result = await client.listTranscripts({ pageIndex: 1, pageSize: intOption(args, \"--max-conversations\", 50), debug: false }); const rows = asRows(result).slice(0, intOption(args, \"--total\", 100)); await writeJson(output, rows.map((row, index) => ({ id: row.chatId ?? row.id ?? String(index), message: row.message ?? row.lastMessage ?? \"\", metadata: flag(args, \"--with-metadata\") ? row : undefined }))); return { output, count: rows.length }; }\n\nasync function inspectChatflow(client: SolveaClient, args: string[]) { const ids = args.flatMap((value, index) => value === \"--agent-id\" ? [args[index + 1]] : []).filter(Boolean); const results = []; for (const id of ids) results.push({ agentId: id, graph: await client.getChatflowGraph(id!) }); return results; }\n\nexport async function runDelivery(session: Session | undefined, action: string | undefined, args: string[]) { return runDomain(session, \"delivery\", action, args); }\nexport async function runPoc(session: Session | undefined, action: string | undefined, args: string[]) { return runDomain(session, \"poc\", action, args); }\n\nasync function runDomain(session: Session | undefined, domain: \"delivery\" | \"poc\", action: string | undefined, args: string[]) {\n if (!action) throw new Error(`${domain} action is required`);\n if (action === \"classify\") return classifyCases(args, domain);\n if (action === \"plan\") return plan(domain, args);\n if (action === \"report\" || action === \"render\" || action === \"render-report\" || action === \"manual\") return renderReport(args, domain);\n if (action === \"excel\" || action === \"gen-excel\") return genExcel(args, domain);\n if (!session) throw new Error(`${domain} ${action} requires an authenticated tenant`);\n const client = new SolveaClient(session);\n if (action === \"batch-test\" || action === \"test\") return runBatch(client, args, domain);\n if (action === \"create-agents\") return createAgents(client, args, domain);\n if (action === \"sample-history\") return sampleHistory(client, args);\n if (action === \"inspect-chatflow\") return inspectChatflow(client, args);\n if (action === \"render-summary\") return plan(domain, args);\n throw new Error(`unknown ${domain} action: ${action}`);\n}\n","import { join } from \"node:path\";\nimport ExcelJS from \"exceljs\";\nimport type { Session } from \"../types.js\";\nimport { flag, option } from \"../args.js\";\nimport { SolveaClient } from \"../solvea/client.js\";\nimport { asRows, ensureDir, intOption, outputRoot, readJson, stateRoot, writeJson } from \"./common.js\";\n\ntype JsonObject = Record<string, unknown>;\nconst clean = (value: unknown) => String(value ?? \"\").replace(/<script[\\s\\S]*?<\\/script>/gi, \" \").replace(/<style[\\s\\S]*?<\\/style>/gi, \" \").replace(/<[^>]+>/g, \" \").replace(/\\s+/g, \" \").trim();\nconst absolute = (href: string, base: string) => { try { return new URL(href, base).toString(); } catch { return undefined; } };\n\nasync function crawl(args: string[]) {\n const url = option(args, \"--url\", true)!;\n const maxPages = intOption(args, \"--max-pages\", 50), maxDepth = intOption(args, \"--max-depth\", 2), timeout = intOption(args, \"--timeout\", 20) * 1000;\n const origin = new URL(url).origin, queue: Array<{ url: string; depth: number }> = [{ url, depth: 0 }], seen = new Set<string>(), pages: JsonObject[] = [];\n while (queue.length && pages.length < maxPages) {\n const current = queue.shift()!; if (seen.has(current.url) || current.depth > maxDepth) continue; seen.add(current.url);\n try {\n const response = await fetch(current.url, { signal: AbortSignal.timeout(timeout), headers: { accept: \"text/html,application/xhtml+xml\" } });\n if (!response.ok) continue;\n const html = await response.text(); const title = html.match(/<title[^>]*>([\\s\\S]*?)<\\/title>/i)?.[1] ?? \"\";\n const text = clean(html); pages.push({ url: current.url, depth: current.depth, title: clean(title), text: text.slice(0, 50_000), status: response.status });\n if (current.depth < maxDepth) for (const match of html.matchAll(/href\\s*=\\s*[\"']([^\"']+)[\"']/gi)) {\n const next = absolute(match[1], current.url); if (next && next.startsWith(origin) && !seen.has(next)) queue.push({ url: next, depth: current.depth + 1 });\n }\n } catch (error) { pages.push({ url: current.url, depth: current.depth, error: error instanceof Error ? error.message : String(error) }); }\n }\n const result = { url, mode: option(args, \"--mode\") ?? \"auto\", pages, fetchedAt: new Date().toISOString(), total: pages.length };\n const output = option(args, \"--output\") ?? join(outputRoot(\"kb-builder\"), \"crawl_result.json\"); await writeJson(output, result);\n return { ...result, output };\n}\n\nasync function directoryPlan(args: string[]) {\n const source = await readJson<JsonObject>(option(args, \"--crawl-result\", true)!); const rows = asRows(source.pages ?? source);\n const groups = new Map<string, JsonObject[]>();\n for (const page of rows) { const title = String(page.title ?? page.url ?? \"Untitled\"); const key = title.split(/[:|/\\\\-]/)[0].trim() || \"General\"; groups.set(key, [...(groups.get(key) ?? []), page]); }\n const tree = [...groups.entries()].map(([name, pages]) => ({ name, children: pages.slice(0, 100).map(page => ({ name: String(page.title ?? page.url), sourceUrl: page.url })) }));\n const result = { source: option(args, \"--crawl-result\"), generatedAt: new Date().toISOString(), tree, confirmed: false };\n const output = option(args, \"--output\") ?? join(outputRoot(\"kb-builder\"), \"directory_plan.json\"); await writeJson(output, result);\n if (flag(args, \"--write-confirmed-tree\")) await writeJson(join(stateRoot(\"kb-builder\"), \"confirmed_tree.json\"), { ...result, confirmed: true });\n return { output, directories: tree.length, pages: rows.length, tree };\n}\n\nasync function createDirectories(client: SolveaClient, args: string[]) {\n const file = option(args, \"--tree-file\") ?? join(stateRoot(\"kb-builder\"), \"confirmed_tree.json\"); const value = await readJson<JsonObject>(file);\n const tree = Array.isArray(value.tree) ? value.tree as JsonObject[] : Array.isArray(value) ? value as unknown as JsonObject[] : [];\n if (!tree.length) throw new Error(\"confirmed directory tree is empty\");\n const dryRun = flag(args, \"--dry-run\"), created: unknown[] = [];\n async function visit(nodes: JsonObject[], parentId = 0, depth = 0) {\n if (depth > intOption(args, \"--max-depth\", 3)) throw new Error(\"directory tree exceeds max depth\");\n for (const node of nodes) {\n const name = String(node.name ?? \"\").trim(); if (!name) continue;\n const result = dryRun ? { name, parentId, dryRun: true } : await client.createFolder(name, parentId); created.push(result);\n const id = Number((result as JsonObject)?.id ?? (result as JsonObject)?.directoryId ?? 0); const children = Array.isArray(node.children) ? node.children as JsonObject[] : [];\n if (children.length && id) await visit(children, id, depth + 1);\n }\n }\n await visit(tree); return { file, dryRun, created, count: created.length };\n}\n\nasync function extractWebQa(args: string[]) {\n const input = await readJson<JsonObject>(option(args, \"--crawl-result\", true)!); const pages = asRows(input.pages ?? input).slice(0, intOption(args, \"--max-pages\", 80));\n const outputDir = option(args, \"--output-dir\") ?? join(outputRoot(\"kb-builder\"), \"qa_parts\"); await ensureDir(outputDir);\n const parts = pages.map((page, index) => ({ question: String(page.title ?? page.url), answer: String(page.text ?? \"\").slice(0, intOption(args, \"--answer-limit\", 3500)), sourceUrl: page.url, sourceTitle: page.title, index }));\n const files: string[] = []; for (const [index, part] of parts.entries()) { const file = join(outputDir, `part_${String(index + 1).padStart(4, \"0\")}.json`); await writeJson(file, { items: [part] }); files.push(file); }\n return { outputDir, files, count: files.length };\n}\n\nasync function importQa(client: SolveaClient, args: string[]) {\n const qaFile = option(args, \"--qa-file\"); const fromDir = option(args, \"--from-dir\");\n if (!qaFile && !fromDir) throw new Error(\"--qa-file or --from-dir is required\");\n const items: unknown[] = [];\n if (qaFile) { const value = await readJson<unknown>(qaFile); items.push(...(Array.isArray(value) ? value : (value as JsonObject).items && Array.isArray((value as JsonObject).items) ? (value as JsonObject).items as unknown[] : [value])); }\n if (fromDir) {\n const { readdir } = await import(\"node:fs/promises\"); for (const file of (await readdir(fromDir)).filter(name => name.endsWith(\".json\"))) { const value = await readJson<unknown>(join(fromDir, file)); items.push(...(Array.isArray(value) ? value : (value as JsonObject).items && Array.isArray((value as JsonObject).items) ? (value as JsonObject).items as unknown[] : [value])); }\n }\n const plan = { items, count: items.length, createdAt: new Date().toISOString() }; const planFile = join(outputRoot(\"kb-builder\"), `qa_import_plan_${Date.now()}.json`); await writeJson(planFile, plan);\n if (flag(args, \"--dry-run\")) return { dryRun: true, planFile, count: items.length };\n return { planFile, count: items.length, result: await client.uploadQa(items) };\n}\n\nasync function importSources(client: SolveaClient, args: string[]) {\n const plan = await readJson<JsonObject>(option(args, \"--plan-file\", true)!); const documents = Array.isArray(plan.documents) ? plan.documents : Array.isArray(plan.items) ? plan.items : [];\n const payload = { documents, taskType: \"WEB\", published: true, isVisible: true, metadata: { tags: [] }, directoryId: String(plan.directoryId ?? \"\") };\n if (!flag(args, \"--execute\")) return { dryRun: true, payload };\n return client.rawCall(\"POST\", `${client.qamPath}/project/${await client.projectId()}/documents`, payload);\n}\n\nasync function importTemplates(client: SolveaClient, args: string[]) {\n const source = option(args, \"--plan-file\") ?? option(args, \"--xlsx\"); if (!source) throw new Error(\"--xlsx or --plan-file is required\");\n const rows: JsonObject[] = [];\n if (source.endsWith(\".json\")) rows.push(...asRows(await readJson(source)));\n else { const workbook = new ExcelJS.Workbook(); await workbook.xlsx.readFile(source); const sheet = option(args, \"--sheet\") ? workbook.getWorksheet(option(args, \"--sheet\")!) : workbook.worksheets[0]; if (!sheet) throw new Error(\"workbook has no worksheet\"); const headers = (sheet.getRow(1).values as unknown[]).slice(1).map(v => String(v ?? \"\")); sheet.eachRow((row, number) => { if (number === 1) return; const values = (row.values as unknown[]).slice(1); const item: JsonObject = {}; headers.forEach((header, index) => { if (header) item[header] = values[index] ?? \"\"; }); rows.push(item); }); }\n const items = rows.map(row => ({ name: String(row.name ?? row.Name ?? \"\").trim(), content: String(row.content ?? row.Content ?? row.template ?? \"\"), status: row.status ?? row.Status ?? \"ENABLED\", scene: row.scene ?? row.Scene })).filter(item => item.name && item.content);\n const output = option(args, \"--output\") ?? join(outputRoot(\"kb-builder\"), `template_import_plan_${Date.now()}.json`); await writeJson(output, { items, count: items.length });\n if (flag(args, \"--dry-run\")) return { dryRun: true, output, count: items.length };\n const results = []; for (const item of items) results.push(await client.createTemplate(item)); return { output, count: results.length, results };\n}\n\nasync function exportKnowledge(client: SolveaClient, args: string[]) {\n const directories = asRows(await client.listDirectories()); const ids = option(args, \"--directory-id\") ? [Number(option(args, \"--directory-id\"))] : directories.map(row => Number(row.id ?? row.directoryId)).filter(Number.isFinite);\n const rows: JsonObject[] = []; for (const id of ids) { const value = await client.listKnowledge({ directoryId: id, keyword: option(args, \"--keyword\") ?? \"\", type: option(args, \"--type\") ?? \"ALL\", pageSize: intOption(args, \"--page-size\", 1000) }); rows.push(...asRows(value).map(row => ({ ...row, directoryId: id, directoryName: directories.find(dir => Number(dir.id ?? dir.directoryId) === id)?.name ?? \"\" }))); }\n const output = option(args, \"--output\") ?? join(outputRoot(\"kb-builder\"), `knowledge_${Date.now()}.xlsx`); const workbook = new ExcelJS.Workbook(); const sheet = workbook.addWorksheet(\"knowledge\"); const keys = [...new Set(rows.flatMap(row => Object.keys(row)))]; sheet.addRow(keys); for (const row of rows) sheet.addRow(keys.map(key => row[key] ?? \"\")); await ensureDir(join(output, \"..\")); await workbook.xlsx.writeFile(output); return { output, count: rows.length };\n}\n\nexport async function runKbBuilder(session: Session | undefined, action: string | undefined, args: string[]) {\n if (!action) throw new Error(\"kb-builder action is required\");\n if (action === \"crawl\") return crawl(args);\n if (action === \"directory-plan\") return directoryPlan(args);\n if (!session) throw new Error(`${action} requires an authenticated tenant`);\n const client = new SolveaClient(session);\n if (action === \"create-directories\") return createDirectories(client, args);\n if (action === \"extract-web-qa\") return extractWebQa(args);\n if (action === \"import-qa\") return importQa(client, args);\n if (action === \"import-source-documents\") return importSources(client, args);\n if (action === \"import-templates\") return importTemplates(client, args);\n if (action === \"export-knowledge\") return exportKnowledge(client, args);\n if (action === \"extract-ticket-qa\" || action === \"batch-extract-ticket-qa\") return extractTicketQa(args);\n throw new Error(`unknown kb-builder action: ${action}`);\n}\n\nasync function extractTicketQa(args: string[]) {\n const file = option(args, \"--xlsx\", true)!; const workbook = new ExcelJS.Workbook(); await workbook.xlsx.readFile(file); const sheet = workbook.worksheets[0]; if (!sheet) throw new Error(\"workbook has no worksheet\");\n const headers = (sheet.getRow(1).values as unknown[]).slice(1).map(v => String(v ?? \"\")); const messageCol = option(args, \"--messages-col\") ?? headers.find(header => /message|conversation|content|描述/i.test(header)) ?? headers[0]; const titleCol = option(args, \"--title-col\"); const replyCol = option(args, \"--reply-col\"); const brand = option(args, \"--brand\", true)!; const items: JsonObject[] = [];\n sheet.eachRow((row, number) => { if (number === 1) return; const values = (row.values as unknown[]).slice(1), record: JsonObject = {}; headers.forEach((header, index) => { record[header] = values[index] ?? \"\"; }); const question = `${brand}: ${String(record[titleCol!] ?? \"\").trim()} ${String(record[messageCol!] ?? \"\").trim()}`.trim(); const answer = String(record[replyCol!] ?? \"\").trim(); if (question && question !== `${brand}:`) items.push({ question, answer, sourceRow: number }); });\n const output = option(args, \"--output\") ?? join(outputRoot(\"kb-builder\"), `ticket_qa_${Date.now()}.json`); const result = { brand, count: items.length, items }; await writeJson(output, result); if (flag(args, \"--dry-run\")) return { dryRun: true, output, count: items.length }; return { output, count: items.length, items };\n}\n","import { join } from \"node:path\";\nimport ExcelJS from \"exceljs\";\nimport type { Session } from \"../types.js\";\nimport { flag, option } from \"../args.js\";\nimport { SolveaClient } from \"../solvea/client.js\";\nimport { asRows, ensureParent, htmlEscape, intOption, outputRoot, readJson, stateRoot, writeHtml, writeJson } from \"./common.js\";\n\ntype JsonObject = Record<string, unknown>;\nconst taskId = (args: string[]) => option(args, \"--task-id\") ?? new Date().toISOString().replace(/[-:.TZ]/g, \"\").slice(0, 14);\nconst taskDir = (args: string[]) => join(stateRoot(\"solvea-desk\"), taskId(args));\n\nasync function saveDatasource(dir: string, name: string, rows: JsonObject[]) {\n const file = join(dir, name); await ensureParent(file); const workbook = new ExcelJS.Workbook(); const sheet = workbook.addWorksheet(\"data\"); const keys = [...new Set(rows.flatMap(row => Object.keys(row)))]; sheet.addRow(keys); for (const row of rows) sheet.addRow(keys.map(key => row[key] ?? \"\")); await workbook.xlsx.writeFile(file); return file;\n}\n\nasync function fetchTickets(client: SolveaClient, args: string[]) {\n const dir = taskDir(args); const pageSize = Math.max(1, Math.min(intOption(args, \"--page-size\", 100), 500)); const maxPages = intOption(args, \"--max-pages\", 100); const maxRows = intOption(args, \"--max-rows\", 10_000); const rows: JsonObject[] = [];\n for (let page = 1; page <= maxPages && rows.length < maxRows; page += 1) {\n const value = await client.rawCall(\"POST\", \"/api_v2/tars/api/ticket/list\", { viewId: option(args, \"--view-id\") ?? \"1\", page, pageSize, sort: option(args, \"--sort\") ?? \"last_update_time\", order: option(args, \"--order\") ?? \"DESC\", ...(option(args, \"--filters-file\") ? await readJson<JsonObject>(option(args, \"--filters-file\")!) : {}) }); const pageRows = asRows(value); rows.push(...pageRows.slice(0, maxRows - rows.length)); if (pageRows.length < pageSize) break;\n }\n const output = await saveDatasource(dir, \"datasource.xlsx\", rows); await writeJson(join(dir, \"metadata.json\"), { taskId: taskId(args), rows: rows.length, output }); return { taskId: taskId(args), output, count: rows.length };\n}\n\nasync function fetchSources(client: SolveaClient, args: string[]) {\n const dir = taskDir(args); const begin = option(args, \"--start\", true)!, end = option(args, \"--end\", true)!; const sources: JsonObject = { begin, end, tickets: [] }; const value = await client.rawCall(\"POST\", \"/api_v2/tars/api/ticket/list\", { startTime: begin, endTime: end, page: 1, pageSize: intOption(args, \"--max-rows\", 10_000) }); const rows = asRows(value).slice(0, intOption(args, \"--max-rows\", 10_000)); sources.tickets = rows; const output = await saveDatasource(dir, \"datasource.xlsx\", rows); await writeJson(join(dir, \"sources.json\"), sources); return { taskId: taskId(args), output, count: rows.length };\n}\n\nasync function tags(client: SolveaClient, action: string, args: string[]) {\n if (action === \"list-tags\") return client.rawCall(\"GET\", \"/api_v2/tars/api/ticket/tag/tree\");\n const ticket = option(args, \"--ticket-number\", true)!;\n if (action === \"get-ticket-tags\") return client.rawCall(\"GET\", `/api_v2/tars/api/ticket/${encodeURIComponent(ticket)}/tags`);\n if (action === \"search-tags\") { const tree = await client.rawCall(\"GET\", \"/api_v2/tars/api/ticket/tag/tree\"); const needle = option(args, \"--name\", true)!.toLowerCase(); const flatten = (value: unknown): JsonObject[] => Array.isArray(value) ? value.flatMap(flatten) : value && typeof value === \"object\" ? [value as JsonObject, ...flatten((value as JsonObject).children ?? (value as JsonObject).nodes ?? [])] : []; return flatten(tree).filter(row => String(row.name ?? row.label ?? \"\").toLowerCase().includes(needle)); }\n if (action === \"batch-get-ticket-tags\") { const ids = asRows(await readJson(option(args, \"--ticket-ids-file\", true)!)); const result = []; for (const row of ids) result.push({ ...row, tags: await client.rawCall(\"GET\", `/api_v2/tars/api/ticket/${encodeURIComponent(String(row.ticketNumber ?? row.ticketId ?? row.id))}/tags`) }); return result; }\n if (action === \"bind-tags\" || action === \"replace-tags\") { if (!flag(args, \"--confirm\")) throw new Error(`${action} requires --confirm`); const tagsFile = option(args, \"--tags-file\", true)!; return client.rawCall(\"POST\", `/api_v2/tars/api/ticket/${encodeURIComponent(ticket)}/tags`, { tags: await readJson(tagsFile) }); }\n throw new Error(`unknown tag action: ${action}`);\n}\n\nasync function renderReport(args: string[]) {\n const dir = taskDir(args), dataFile = option(args, \"--report-data\") ?? join(dir, \"report_data.json\"), notesFile = option(args, \"--notes\") ?? join(dir, \"calculation_notes.json\"); const data = await readJson<JsonObject>(dataFile); if (flag(args, \"--validate-only\")) return { valid: true, dataFile }; const output = option(args, \"--output\") ?? join(outputRoot(\"solvea-desk\"), taskId(args), `${option(args, \"--report-slug\") ?? \"report\"}.html`); const body = `<pre>${htmlEscape(JSON.stringify({ data, notes: await readJson(notesFile).catch(() => ({})) }, null, 2))}</pre>`; await writeHtml(output, option(args, \"--report-slug\") ?? \"Solvea Desk report\", body); return { output, valid: true };\n}\n\nexport async function runDesk(session: Session, action: string | undefined, args: string[]) {\n if (!action) throw new Error(\"solvea-desk action is required\"); const client = new SolveaClient(session);\n if (action === \"fetch-tickets\") return fetchTickets(client, args);\n if (action === \"fetch-sources\") return fetchSources(client, args);\n if (action === \"render-report\") return renderReport(args);\n if (action === \"tags\") return tags(client, option(args, \"--operation\") ?? args.find(value => [\"list-tags\", \"get-ticket-tags\", \"batch-get-ticket-tags\", \"search-tags\", \"bind-tags\", \"replace-tags\"].includes(value)) ?? \"list-tags\", args);\n if ([\"list-tags\", \"get-ticket-tags\", \"batch-get-ticket-tags\", \"search-tags\", \"bind-tags\", \"replace-tags\"].includes(action)) return tags(client, action, args);\n throw new Error(`unknown solvea-desk action: ${action}`);\n}\n"],"mappings":";;;AAAA,SAAS,YAAAA,iBAAgB;;;ACAzB,OAAO,UAAU;;;ACAjB;AAAA,EACE,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,aAAe;AAAA,EACf,MAAQ;AAAA,EACR,KAAO;AAAA,IACL,WAAa;AAAA,EACf;AAAA,EACA,OAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,OAAS;AAAA,IACT,KAAO;AAAA,IACP,WAAa;AAAA,IACb,MAAQ;AAAA,IACR,sBAAsB;AAAA,IACtB,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,wBAAwB;AAAA,IACxB,wBAAwB;AAAA,EAC1B;AAAA,EACA,SAAW;AAAA,IACT,MAAQ;AAAA,EACV;AAAA,EACA,cAAgB;AAAA,IACd,iBAAiB;AAAA,IACjB,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,IACpB,SAAW;AAAA,IACX,MAAQ;AAAA,EACV;AAAA,EACA,iBAAmB;AAAA,IACjB,eAAe;AAAA,IACf,aAAa;AAAA,IACb,MAAQ;AAAA,IACR,KAAO;AAAA,IACP,YAAc;AAAA,EAChB;AAAA,EACA,YAAc;AAAA,IACZ,MAAQ;AAAA,IACR,KAAO;AAAA,EACT;AAAA,EACA,SAAW;AACb;;;AC/CO,IAAM,UAAU,gBAAY;AAC5B,IAAM,sBAAsB;AAC5B,IAAM,qBAAqB;;;ACA3B,SAAS,OAAU,OAAmB;AAC3C,MAAI,SAAS,OAAO,UAAU,YAAY,OAAO,KAAK,KAAK,EAAE,WAAW,KAAK,UAAU,MAAO,QAAQ,MAAmB;AACzH,SAAO;AACT;AACA,eAAsB,QAAW,SAAkB,MAAc,OAAoB,CAAC,GAAG,SAAS,OAAmB;AACnH,QAAM,UAAU,IAAI,QAAQ,KAAK,OAAO;AAAG,UAAQ,IAAI,gBAAgB,kBAAkB;AAAG,UAAQ,IAAI,2BAA2B,OAAO;AAC1I,MAAI,QAAQ,YAAa,SAAQ,IAAI,iBAAiB,UAAU,QAAQ,WAAW,EAAE;AACrF,MAAI,QAAQ;AAAE,QAAI,CAAC,QAAQ,QAAQ,QAAS,OAAM,IAAI,MAAM,uEAAuE;AAAG,YAAQ,IAAI,2BAA2B,QAAQ,OAAO,OAAO;AAAA,EAAG;AACtM,MAAI;AACJ,WAAS,UAAQ,GAAG,UAAQ,GAAG,WAAW;AACxC,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,GAAG,QAAQ,UAAU,QAAQ,OAAM,EAAE,CAAC,GAAG,IAAI,IAAI,EAAC,GAAG,MAAM,SAAS,QAAQ,YAAY,QAAQ,GAAM,EAAC,CAAC;AACrI,YAAM,OAAO,MAAM,SAAS,KAAK;AAAG,YAAM,QAAQ,OAAO,KAAK,MAAM,IAAI,IAAI;AAC5E,UAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,mBAAmB,SAAS,MAAM,KAAK,IAAI,EAAE;AAC/E,aAAO,OAAU,KAAK;AAAA,IACxB,SAAS,OAAO;AAAE,aAAK;AAAO,UAAI,UAAQ,EAAG,OAAM,IAAI,QAAQ,OAAG,WAAW,GAAE,MAAI,KAAG,OAAO,CAAC;AAAA,IAAG;AAAA,EACnG;AACA,QAAM;AACR;AACO,IAAM,OAAO,CAAI,SAAgB,MAAY,MAAa,SAAO,UAAU,QAAW,SAAQ,MAAK,EAAC,QAAO,QAAO,MAAK,KAAK,UAAU,IAAI,EAAC,GAAE,MAAM;;;ACtB1J,SAAS,kBAAkB;AAG3B,IAAM,UAAU,QAAQ,aAAa,UAAU,EAAE,OAAO,EAAE,OAAO,iBAA0B,EAAE,IAAI;AACjG,IAAM,QAAQ,MAAM,IAAI,WAAW,qBAAqB,WAAW,OAAO;AAE1E,eAAsB,cAAgC;AACpD,QAAM,MAAM,MAAM,MAAM,EAAE,YAAY;AACtC,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,uEAA+B;AACzD,SAAO,KAAK,MAAM,GAAG;AACvB;AACA,eAAsB,YAAY,SAAiC;AACjE,MAAI,CAAC,QAAQ,aAAc,OAAM,IAAI,MAAM,sCAAsC;AACjF,QAAM,MAAM,EAAE,YAAY,KAAK,UAAU,OAAO,CAAC;AACnD;AACA,eAAsB,gBAA+B;AAAE,QAAM,MAAM,EAAE,iBAAiB;AAAG;;;AJTzF,IAAM,QAAM,CAAC,OAAY,IAAI,QAAQ,OAAG,WAAW,GAAE,EAAE,CAAC;AACxD,eAAsB,MAAM,WAAkB,SAA4C;AACxF,QAAM,UAAgB,EAAC,WAAU,UAAU,QAAQ,OAAM,EAAE,GAAE,SAAQ,aAAY,IAAG,cAAa,IAAG,cAAa,GAAE,YAAW,IAAG,OAAM,GAAE;AACzI,QAAM,QAAM,MAAM,KAAkB,SAAQ,sBAAqB,EAAC,eAAc,QAAO,CAAC;AACxF,UAAQ,MAAM;AAAA,EAAuB,MAAM,uBAAuB;AAAA,0BAAS,MAAM,QAAQ,EAAE;AAC3F,QAAM,KAAK,MAAM,uBAAuB,EAAE,MAAM,MAAI,MAAS;AAC7D,QAAM,WAAS,KAAK,IAAI,IAAE,MAAM,YAAU;AAC1C,SAAM,KAAK,IAAI,IAAE,UAAS;AAAE,UAAM,MAAM,KAAK,IAAI,GAAE,MAAM,QAAQ,IAAE,GAAI;AAAG,QAAI;AAC5E,YAAM,QAAM,MAAM,KAAoB,SAAQ,sBAAqB,EAAC,YAAW,MAAM,YAAW,eAAc,QAAO,CAAC;AACtH,aAAO,OAAO,SAAQ,EAAC,aAAY,MAAM,aAAY,cAAa,MAAM,cAAa,cAAa,KAAK,MAAM,KAAK,IAAI,IAAE,GAAI,IAAE,MAAM,WAAU,YAAW,MAAM,SAAS,IAAG,OAAM,MAAM,SAAS,MAAK,CAAC;AAAG,YAAM,YAAY,OAAO;AAAG,aAAO;AAAA,IAC9O,SAAQ,OAAM;AAAE,UAAG,CAAC,OAAO,KAAK,EAAE,SAAS,KAAK,EAAG,OAAM;AAAA,IAAO;AAAA,EAAE;AAClE,QAAM,IAAI,MAAM,8BAA8B;AAChD;AACA,eAAsB,aAAa,SAAiC;AAClE,MAAG,QAAQ,eAAe,KAAK,IAAI,IAAE,MAAK,KAAG,QAAQ,aAAa,QAAO;AACzE,QAAM,QAAM,MAAM,KAAoB,SAAQ,iBAAgB,EAAC,cAAa,QAAQ,cAAa,eAAc,QAAO,CAAC;AACvH,SAAO,OAAO,SAAQ,EAAC,aAAY,MAAM,aAAY,cAAa,MAAM,cAAa,cAAa,KAAK,MAAM,KAAK,IAAI,IAAE,GAAI,IAAE,MAAM,UAAS,CAAC;AAAG,QAAM,YAAY,OAAO;AAAG,SAAO;AACtL;AACA,eAAsB,gBAAe;AAAC,SAAO,aAAa,MAAM,YAAY,CAAC;AAAC;AAC9E,eAAsB,SAAQ;AAAC,MAAI;AAA0B,MAAG;AAAC,cAAQ,MAAM,YAAY;AAAA,EAAC,QAAM;AAAA,EAAC;AAAC;AAAC,MAAG,SAAS,aAAa,OAAM,KAAK,SAAQ,gBAAe,EAAC,cAAa,QAAQ,aAAY,CAAC,EAAE,MAAM,MAAI,MAAS;AAAE,QAAM,cAAc;AAAC;;;AKzBxO,SAAS,OAAO,MAAgB,MAAc,WAAW,OAAO;AACrE,QAAM,QAAQ,KAAK,QAAQ,IAAI;AAC/B,QAAM,QAAQ,SAAS,IAAI,KAAK,QAAQ,CAAC,IAAI;AAC7C,MAAI,YAAY,CAAC,MAAO,OAAM,IAAI,MAAM,GAAG,IAAI,cAAc;AAC7D,SAAO;AACT;AAEO,SAASC,SAAQ,MAAgB,MAAc;AACpD,QAAM,SAAmB,CAAC;AAC1B,WAAS,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;AACnD,QAAI,KAAK,KAAK,MAAM,QAAQ,KAAK,QAAQ,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,EAAE,WAAW,GAAG,EAAG,QAAO,KAAK,KAAK,QAAQ,CAAC,CAAC;AAAA,EAC9G;AACA,SAAO;AACT;AAEO,SAAS,WAAW,MAAgB,MAAc;AACvD,QAAM,QAAQ,KAAK,QAAQ,IAAI;AAC/B,MAAI,QAAQ,EAAG,QAAO,CAAC;AACvB,QAAM,SAAmB,CAAC;AAC1B,WAAS,SAAS,QAAQ,GAAG,SAAS,KAAK,UAAU,CAAC,KAAK,MAAM,EAAE,WAAW,GAAG,GAAG,UAAU,EAAG,QAAO,KAAK,KAAK,MAAM,CAAC;AACzH,SAAO;AACT;AAEO,SAAS,KAAK,MAAgB,MAAc;AAAE,SAAO,KAAK,SAAS,IAAI;AAAG;AAE1E,SAAS,YAAY,MAAgB;AAC1C,QAAM,MAAgB,CAAC;AACvB,WAAS,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;AACnD,QAAI,KAAK,KAAK,EAAE,WAAW,IAAI,GAAG;AAChC,UAAI,CAAC,CAAC,YAAY,aAAa,eAAe,qBAAqB,EAAE,SAAS,KAAK,KAAK,CAAC,EAAG,UAAS;AAAA,IACvG,MAAO,KAAI,KAAK,KAAK,KAAK,CAAC;AAAA,EAC7B;AACA,SAAO;AACT;;;ACjCA,SAAS,SAAS,eAAe;AACjC,SAAS,qBAAqB;;;ACD9B,SAAS,YAAAC,iBAAgB;;;ACSlB,IAAM,eAAN,MAAmB;AAAA,EAIxB,YAA6B,SAAkB;AAAlB;AAC3B,QAAI,CAAC,QAAQ,QAAQ,eAAe,CAAC,QAAQ,OAAO,eAAe;AACjE,YAAM,IAAI,MAAM,8DAA8D;AAAA,IAChF;AAAA,EACF;AAAA,EAJ6B;AAAA,EAHrB;AAAA,EACA;AAAA,EAQR,IAAY,UAAU;AAAE,WAAO,KAAK,QAAQ,OAAQ,YAAa,QAAQ,OAAO,EAAE;AAAA,EAAG;AAAA,EACrF,IAAY,MAAM;AAAE,WAAO,KAAK,QAAQ,OAAQ;AAAA,EAAa;AAAA,EAE7D,MAAM,QAAW,QAAgB,MAAc,MAAgBC,QAA+D;AAC5H,UAAM,MAAM,IAAI,IAAI,GAAG,KAAK,OAAO,GAAG,IAAI,EAAE;AAC5C,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQA,UAAS,CAAC,CAAC,EAAG,KAAI,aAAa,IAAI,KAAK,OAAO,KAAK,CAAC;AAC/F,UAAM,SAAS,KAAK,QAAQ,SAAS,WAAW;AAChD,UAAM,UAAU,IAAI,QAAQ;AAAA,MAC1B,QAAQ;AAAA,MACR,QAAQ,KAAK;AAAA,MACb,SAAS,GAAG,KAAK,OAAO;AAAA,MACxB,QAAQ,GAAG,MAAM,IAAI,KAAK,QAAQ,OAAQ,aAAa;AAAA,MACvD,2BAA2B,QAAQ,IAAI,yBAAyB;AAAA,IAClE,CAAC;AACD,QAAI,SAAS,OAAW,SAAQ,IAAI,gBAAgB,kBAAkB;AACtE,QAAI;AACJ,aAAS,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG;AAC/C,UAAI;AACF,cAAM,WAAW,MAAM,MAAM,KAAK;AAAA,UAChC;AAAA,UACA;AAAA,UACA,MAAM,SAAS,SAAY,SAAY,KAAK,UAAU,IAAI;AAAA,UAC1D,QAAQ,YAAY,QAAQ,GAAM;AAAA,QACpC,CAAC;AACD,cAAM,OAAO,MAAM,SAAS,KAAK;AACjC,YAAI;AACJ,YAAI;AAAE,kBAAQ,OAAO,KAAK,MAAM,IAAI,IAAI;AAAA,QAAW,QAAQ;AAAE,kBAAQ,EAAE,KAAK,KAAK;AAAA,QAAG;AACpF,YAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,QAAQ,SAAS,MAAM,IAAI,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE;AACtF,YAAI,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AAC/D,gBAAM,SAAS;AACf,gBAAM,OAAO,OAAO,QAAQ,OAAO;AACnC,cAAI,SAAS,UAAa,CAAC,CAAC,GAAG,KAAK,KAAK,OAAO,MAAM,SAAS,EAAE,SAAS,IAAa,GAAG;AACxF,kBAAM,IAAI,MAAM,aAAa,MAAM,IAAI,IAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,OAAO,SAAS,IAAI,CAAC,EAAE;AAAA,UAChH;AACA,cAAI,OAAO,YAAY,MAAO,OAAM,IAAI,MAAM,aAAa,MAAM,IAAI,IAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,OAAO,SAAS,gBAAgB,CAAC,EAAE;AAAA,QAC1J;AACA,eAAO;AAAA,MACT,SAAS,OAAO;AACd,eAAO;AACP,YAAI,UAAU,EAAG,OAAM,IAAI,QAAQ,CAAAC,aAAW,WAAWA,UAAS,MAAM,KAAK,OAAO,CAAC;AAAA,MACvF;AAAA,IACF;AACA,UAAM;AAAA,EACR;AAAA,EAEA,MAAc,KAAQ,MAAc,MAAe;AAAE,WAAO,KAAK,QAAW,QAAQ,MAAM,IAAI;AAAA,EAAG;AAAA,EACjG,MAAc,IAAO,MAAcD,QAAmD;AAAE,WAAO,KAAK,QAAW,OAAO,MAAM,QAAWA,MAAK;AAAA,EAAG;AAAA,EAC/I,MAAc,IAAO,MAAc,MAAe;AAAE,WAAO,KAAK,QAAW,OAAO,MAAM,IAAI;AAAA,EAAG;AAAA,EAE/F,MAAM,QAAqB,QAAgB,MAAc,MAAgBA,QAAmD;AAC1H,WAAO,KAAK,QAAW,QAAQ,MAAM,MAAMA,MAAK;AAAA,EAClD;AAAA,EAEQ,gBAAgB,OAAe,MAAc;AACnD,QAAI,CAAC,SAAS,UAAU,OAAO,UAAU,QAAQ,8BAA8B,KAAK,KAAK,GAAG;AAC1F,YAAM,IAAI,MAAM,GAAG,IAAI,wCAAwC;AAAA,IACjE;AACA,WAAO,mBAAmB,KAAK;AAAA,EACjC;AAAA,EAEA,MAAM,cAAc;AAAE,WAAO,KAAK,IAAe,kBAAkB;AAAA,EAAG;AAAA,EACtE,MAAM,YAAY;AAChB,QAAI,CAAC,KAAK,SAAS;AACjB,YAAM,OAAO,MAAM,KAAK,YAAY;AACpC,YAAM,QAAQ,MAAM,QAAQ,IAAI,IAAI,KAAK,CAAC,IAA8B;AACxE,WAAK,UAAU,OAAO,OAAO,aAAa,GAAG;AAC7C,WAAK,MAAM,OAAO,OAAO,MAAM,EAAE;AAAA,IACnC;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EACA,MAAM,QAAQ;AAAE,QAAI,CAAC,KAAK,IAAK,OAAM,KAAK,UAAU;AAAG,WAAO,KAAK,OAAO;AAAA,EAAO;AAAA,EAEjF,MAAM,WAAW,WAAW,QAAQ;AAAE,WAAO,KAAK,KAAK,6BAA6B,EAAE,WAAW,OAAO,MAAM,KAAK,UAAU,CAAC,GAAG,cAAc,MAAM,QAAQ,MAAM,SAAS,CAAC;AAAA,EAAG;AAAA,EAChL,MAAM,SAAS,IAAY;AAAE,WAAO,KAAK,KAAK,6BAA6B,EAAE,WAAW,OAAO,MAAM,KAAK,UAAU,CAAC,GAAG,SAAS,OAAO,EAAE,GAAG,cAAc,MAAM,aAAa,MAAM,CAAC;AAAA,EAAG;AAAA,EACxL,MAAM,iBAAiB,IAAY;AAAE,WAAO,KAAK,KAAK,0CAA0C,EAAE,SAAS,OAAO,EAAE,EAAE,CAAC;AAAA,EAAG;AAAA,EAC1H,MAAM,YAAYE,OAAkB;AAAE,WAAO,KAAK,KAAK,8BAA8B,EAAE,WAAW,OAAO,MAAM,KAAK,UAAU,CAAC,GAAG,GAAGA,MAAK,CAAC;AAAA,EAAG;AAAA,EAC9I,MAAM,YAAYA,OAAkB;AAAE,WAAO,KAAK,KAAK,8BAA8BA,KAAI;AAAA,EAAG;AAAA,EAC5F,MAAM,eAAe,SAAiB,OAAmB,UAAU,OAAO;AACxE,UAAM,UAAU,MAAM,KAAK,SAAS,OAAO;AAC3C,UAAM,QAAQ,MAAM,QAAQ,OAAO,IAAI,QAAQ,CAAC,IAAkB;AAClE,QAAI,CAAC,SAAS,MAAM,SAAS,YAAa,OAAM,IAAI,MAAM,SAAS,OAAO,mBAAmB;AAC7F,UAAM,UAAU,EAAE,GAAG,OAAO,SAAS,MAAM,MAAM,OAAO,OAAO,GAAG,MAAM,EAAE,GAAI,MAAM,QAAsB,CAAC,GAAI,eAAe,MAAM,EAAE;AACtI,WAAO,KAAK,YAAY,EAAE,GAAG,SAAS,GAAI,UAAU,EAAE,SAAS,KAAK,IAAI,CAAC,EAAG,CAAC;AAAA,EAC/E;AAAA,EAEA,MAAM,cAAc;AAAE,WAAO,KAAK,KAAK,8BAA8B,EAAE,WAAW,OAAO,MAAM,KAAK,UAAU,CAAC,GAAG,cAAc,MAAM,CAAC;AAAA,EAAG;AAAA,EAC1I,MAAM,UAAU,IAAY;AAAE,WAAO,KAAK,KAAK,8BAA8B,EAAE,WAAW,OAAO,MAAM,KAAK,UAAU,CAAC,GAAG,UAAU,OAAO,EAAE,GAAG,mBAAmB,KAAK,CAAC;AAAA,EAAG;AAAA,EAC5K,MAAM,aAAaA,OAAkB;AAAE,WAAO,KAAK,KAAK,+BAA+B,EAAE,WAAW,OAAO,MAAM,KAAK,UAAU,CAAC,GAAG,GAAGA,MAAK,CAAC;AAAA,EAAG;AAAA,EAChJ,MAAM,aAAaA,OAAkB;AAAE,WAAO,KAAK,KAAK,+BAA+B,EAAE,WAAW,OAAO,MAAM,KAAK,UAAU,CAAC,GAAG,GAAGA,MAAK,CAAC;AAAA,EAAG;AAAA,EAChJ,MAAM,aAAa,IAAY;AAAE,WAAO,KAAK,KAAK,+BAA+B,EAAE,WAAW,OAAO,MAAM,KAAK,UAAU,CAAC,GAAG,UAAU,OAAO,EAAE,EAAE,CAAC;AAAA,EAAG;AAAA,EACvJ,MAAM,UAAU,QAAiB,aAA0B;AACzD,WAAO,KAAK,KAAK,gCAAgC;AAAA,MAC/C,WAAW,OAAO,MAAM,KAAK,UAAU,CAAC;AAAA,MAAG,OAAO,OAAO,MAAM,KAAK,MAAM,CAAC;AAAA,MAC3E,wBAAwB;AAAA,MACxB,GAAI,gBAAgB,SAAY,CAAC,IAAI,EAAE,6BAA6B,YAAY;AAAA,IAClF,CAAC;AAAA,EACH;AAAA,EACA,MAAM,gBAAgB,MAAc,SAAoB;AACtD,QAAI,QAAQ,SAAS,IAAQ,OAAM,IAAI,MAAM,0CAA0C;AACvF,WAAO,KAAK,KAAK,sCAAsC,KAAK,gBAAgB,MAAM,WAAW,CAAC,IAAI,OAAO;AAAA,EAC3G;AAAA,EACA,MAAM,cAAc,MAAc;AAAE,WAAO,KAAK,IAAI,sCAAsC,EAAE,MAAM,KAAK,gBAAgB,MAAM,WAAW,GAAG,YAAY,MAAM,CAAC;AAAA,EAAG;AAAA,EAEjK,MAAM,eAAe;AAAE,WAAO,KAAK,KAAK,sCAAsC,CAAC,CAAC;AAAA,EAAG;AAAA,EACnF,MAAM,oBAAoB;AAAE,WAAO,KAAK,KAAK,gCAAgC,EAAE,YAAY,CAAC,OAAO,SAAS,uBAAuB,EAAE,CAAC;AAAA,EAAG;AAAA,EACzI,MAAM,eAAe;AAAE,WAAO,KAAK,KAAK,8CAA8C,CAAC,CAAC;AAAA,EAAG;AAAA,EAC3F,MAAM,qBAAqB;AAAE,WAAO,KAAK,IAAI,2CAA2C;AAAA,EAAG;AAAA,EAC3F,MAAM,oBAAoB,WAAmBC,WAAkB,MAAc;AAC3E,WAAO,KAAK,KAAK,sCAAsC,EAAE,WAAW,UAAAA,WAAU,KAAK,CAAC;AAAA,EACtF;AAAA,EACA,MAAM,kBAAkB,IAAY;AAAE,WAAO,KAAK,IAAI,wCAAwC,mBAAmB,EAAE,CAAC,EAAE;AAAA,EAAG;AAAA,EACzH,MAAM,qBAAqBD,OAAkB;AAAE,WAAO,KAAK,KAAK,wCAAwCA,KAAI;AAAA,EAAG;AAAA,EAC/G,MAAM,qBAAqBA,OAAkB;AAAE,WAAO,KAAK,KAAK,wCAAwCA,KAAI;AAAA,EAAG;AAAA,EAC/G,MAAM,qBAAqB,IAAY;AAAE,WAAO,KAAK,IAAI,wCAAwC,mBAAmB,EAAE,CAAC,EAAE;AAAA,EAAG;AAAA,EAC5H,MAAM,qBAAqB,IAAY;AAAE,WAAO,KAAK,IAAI,wCAAwC,mBAAmB,EAAE,CAAC,EAAE;AAAA,EAAG;AAAA,EAE5H,MAAM,KAAKA,OAAkB;AAAE,UAAM,MAAM,OAAOA,MAAK,SAAS,MAAM,KAAK,MAAM,CAAC;AAAG,WAAO,KAAK,KAAK,mBAAmB,GAAG,SAAS,EAAE,OAAO,OAAO,GAAG,GAAG,WAAW,OAAO,MAAM,KAAK,UAAU,CAAC,GAAG,QAAQ,EAAE,OAAO,KAAK,GAAG,GAAGA,MAAK,CAAC;AAAA,EAAG;AAAA,EAC3O,MAAM,UAAUA,OAAkB;AAAE,UAAM,MAAM,OAAOA,MAAK,SAAS,MAAM,KAAK,MAAM,CAAC;AAAG,WAAO,KAAK,KAAK,mBAAmB,GAAG,eAAe,EAAE,OAAO,OAAO,GAAG,GAAG,WAAW,OAAO,MAAM,KAAK,UAAU,CAAC,GAAG,QAAQ,EAAE,OAAO,KAAK,GAAG,GAAGA,MAAK,CAAC;AAAA,EAAG;AAAA,EACtP,MAAM,YAAY,SAAiB,OAAgB;AAAE,UAAM,MAAM,SAAS,MAAM,KAAK,MAAM;AAAG,WAAO,KAAK,IAAI,mBAAmB,GAAG,eAAe,mBAAmB,OAAO,CAAC,EAAE;AAAA,EAAG;AAAA,EAEnL,MAAM,YAAY,WAAW,cAAc;AAAE,WAAO,KAAK,IAAI,uBAAuB,MAAM,KAAK,UAAU,CAAC,YAAY,WAAW,EAAE,SAAS,IAAI,MAAS;AAAA,EAAG;AAAA,EAC5J,MAAM,UAAU,IAAY;AAAE,WAAO,KAAK,IAAI,uBAAuB,MAAM,KAAK,UAAU,CAAC,WAAW,mBAAmB,EAAE,CAAC,EAAE;AAAA,EAAG;AAAA,EACjI,MAAM,aAAaA,OAAkB;AAAE,WAAO,KAAK,KAAK,uBAAuB,MAAM,KAAK,UAAU,CAAC,WAAWA,KAAI;AAAA,EAAG;AAAA,EACvH,MAAM,aAAa,IAAYA,OAAkB;AAAE,WAAO,KAAK,IAAI,uBAAuB,MAAM,KAAK,UAAU,CAAC,WAAW,mBAAmB,EAAE,CAAC,IAAIA,KAAI;AAAA,EAAG;AAAA,EAC5J,MAAM,aAAa,IAAYE,UAAkB;AAAE,WAAO,KAAK,IAAI,uBAAuB,MAAM,KAAK,UAAU,CAAC,WAAW,mBAAmB,EAAE,CAAC,WAAW,EAAE,QAAQA,WAAU,YAAY,WAAW,CAAC;AAAA,EAAG;AAAA,EAE3M,MAAM,eAAe;AAAE,WAAO,KAAK,IAAI,uBAAuB,MAAM,KAAK,UAAU,CAAC,WAAW;AAAA,EAAG;AAAA,EAClG,MAAM,eAAeD,YAAW,KAAK;AAAE,WAAO,KAAK,IAAI,uBAAuB,MAAM,KAAK,UAAU,CAAC,eAAe,EAAE,UAAAA,WAAU,SAAS,EAAE,CAAC;AAAA,EAAG;AAAA,EAC9I,MAAM,eAAeD,OAAkB;AAAE,WAAO,KAAK,KAAK,uBAAuB,MAAM,KAAK,UAAU,CAAC,qBAAqBA,KAAI;AAAA,EAAG;AAAA,EACnI,MAAM,eAAe,IAAYA,OAAkB;AAAE,WAAO,KAAK,QAAQ,OAAO,uBAAuB,MAAM,KAAK,UAAU,CAAC,aAAa,mBAAmB,EAAE,CAAC,IAAIA,KAAI;AAAA,EAAG;AAAA,EAC3K,MAAM,eAAe,IAAYE,UAAkB;AAAE,WAAO,KAAK,QAAQ,OAAO,uBAAuB,MAAM,KAAK,UAAU,CAAC,aAAa,mBAAmB,EAAE,CAAC,WAAW,EAAE,QAAQA,WAAU,YAAY,WAAW,CAAC;AAAA,EAAG;AAAA,EAE1N,MAAM,gBAAgB;AAAE,WAAO,KAAK,IAAI,0CAA0C;AAAA,EAAG;AAAA,EACrF,MAAM,iBAAiBA,UAAkB;AAAE,WAAO,KAAK,KAAK,0CAA0C,EAAE,MAAMA,UAAS,WAAW,OAAO,MAAM,KAAK,UAAU,CAAC,EAAE,CAAC;AAAA,EAAG;AAAA,EACrK,MAAM,aAAa,gBAAyB,cAAuB;AAAE,WAAO,KAAK,IAAI,2CAA2C,EAAE,GAAI,mBAAmB,SAAY,CAAC,IAAI,EAAE,eAAe,GAAI,GAAI,iBAAiB,SAAY,CAAC,IAAI,EAAE,aAAa,EAAG,CAAC;AAAA,EAAG;AAAA,EAC3P,MAAM,YAAY,KAAa;AAAE,WAAO,KAAK,IAAI,kDAAkD,EAAE,eAAe,IAAI,CAAC;AAAA,EAAG;AAAA,EAC5H,MAAM,kBAAkBF,OAAkB;AAAE,WAAO,KAAK,KAAK,2CAA2CA,KAAI;AAAA,EAAG;AAAA,EAC/G,MAAM,kBAAkB,KAAa;AAAE,WAAO,KAAK,KAAK,wDAAwD,EAAE,eAAe,IAAI,CAAC;AAAA,EAAG;AAAA,EACzI,MAAM,wBAAwBA,OAAkB;AAAE,WAAO,KAAK,KAAK,wDAAwDA,KAAI;AAAA,EAAG;AAAA,EAClI,MAAM,wBAAwBA,OAAkB;AAAE,WAAO,KAAK,KAAK,wDAAwDA,KAAI;AAAA,EAAG;AAAA,EAClI,MAAM,wBAAwB,KAAa;AAAE,WAAO,KAAK,KAAK,wDAAwD,EAAE,eAAe,IAAI,CAAC;AAAA,EAAG;AAAA,EAC/I,MAAM,wBAAwB;AAAE,WAAO,KAAK,IAAI,uCAAuC;AAAA,EAAG;AAAA,EAC1F,MAAM,oBAAoB,IAAY;AAAE,WAAO,KAAK,IAAI,2CAA2C,EAAE,GAAG,CAAC;AAAA,EAAG;AAAA,EAC5G,MAAM,uBAAuBA,OAAkB;AAAE,WAAO,KAAK,KAAK,2CAA2CA,KAAI;AAAA,EAAG;AAAA,EACpH,MAAM,uBAAuBA,OAAkB;AAAE,WAAO,KAAK,KAAK,2CAA2CA,KAAI;AAAA,EAAG;AAAA,EACpH,MAAM,uBAAuB,IAAY;AAAE,WAAO,KAAK,IAAI,2CAA2C,EAAE,GAAG,CAAC;AAAA,EAAG;AAAA,EAC/G,MAAM,yBAAyBA,OAAkB;AAAE,WAAO,KAAK,KAAK,iDAAiDA,KAAI;AAAA,EAAG;AAAA,EAC5H,MAAM,uBAAuB,IAAY;AAAE,WAAO,KAAK,IAAI,mDAAmD,EAAE,GAAG,CAAC;AAAA,EAAG;AAAA,EAEvH,MAAM,cAAcA,OAAkB;AAAE,WAAO,KAAK,KAAK,uBAAuB,MAAM,KAAK,UAAU,CAAC,qBAAqBA,KAAI;AAAA,EAAG;AAAA,EAClI,MAAM,eAAeA,OAAkB;AACrC,UAAM,UAAU,OAAOA,MAAK,WAAW,EAAE;AACzC,WAAO,KAAK,KAAK,uBAAuB,MAAM,KAAK,UAAU,CAAC,aAAa;AAAA,MACzE,MAAMA,MAAK;AAAA,MAAM;AAAA,MAAS,QAAQA,MAAK,UAAU;AAAA,MACjD,cAAcA,MAAK,gBAAgB,EAAE,MAAM,QAAQ;AAAA,MACnD,GAAIA,MAAK,QAAQ,EAAE,OAAOA,MAAK,MAAM,IAAI,CAAC;AAAA,IAC5C,CAAC;AAAA,EACH;AAAA,EACA,MAAM,eAAe,IAAYA,OAAkB;AACjD,WAAO,KAAK,IAAI,uBAAuB,MAAM,KAAK,UAAU,CAAC,aAAa,mBAAmB,EAAE,CAAC,IAAIA,KAAI;AAAA,EAC1G;AAAA,EACA,MAAM,gBAAgB,KAAe;AACnC,WAAO,KAAK,QAAQ,UAAU,uBAAuB,MAAM,KAAK,UAAU,CAAC,cAAc,EAAE,aAAa,IAAI,CAAC;AAAA,EAC/G;AAAA,EAEA,IAAY,YAAY;AAAE,WAAO,KAAK,QAAQ,SAAS,gBAAgB;AAAA,EAAW;AAAA,EAClF,IAAI,UAAU;AAAE,WAAO,KAAK;AAAA,EAAW;AAAA,EACvC,MAAM,cAAcA,OAAkB;AAAE,WAAO,KAAK,KAAK,GAAG,KAAK,SAAS,YAAY,MAAM,KAAK,UAAU,CAAC,iBAAiB,EAAE,MAAM,OAAO,WAAW,GAAG,UAAU,IAAI,SAAS,IAAI,GAAGA,MAAK,CAAC;AAAA,EAAG;AAAA,EACjM,MAAM,aAAa,IAAY;AAAE,WAAO,KAAK,IAAI,GAAG,KAAK,SAAS,YAAY,MAAM,KAAK,UAAU,CAAC,OAAO,mBAAmB,EAAE,CAAC,EAAE;AAAA,EAAG;AAAA,EACtI,MAAM,gBAAgB,IAAYA,OAAkB;AAAE,WAAO,KAAK,QAAQ,OAAO,GAAG,KAAK,SAAS,YAAY,MAAM,KAAK,UAAU,CAAC,OAAO,EAAE,GAAGA,OAAM,MAAM,OAAO,EAAE,EAAE,CAAC;AAAA,EAAG;AAAA,EAC3K,MAAM,SAAS,OAAkB;AAAE,WAAO,KAAK,KAAK,GAAG,KAAK,SAAS,YAAY,MAAM,KAAK,UAAU,CAAC,QAAQ,KAAK;AAAA,EAAG;AAAA,EACvH,MAAM,kBAAkB;AAAE,WAAO,KAAK,IAAI,GAAG,KAAK,SAAS,YAAY,MAAM,KAAK,UAAU,CAAC,gBAAgB,EAAE,SAAS,IAAI,aAAa,GAAG,CAAC;AAAA,EAAG;AAAA,EAChJ,MAAM,aAAa,MAAc,WAAW,GAAG;AAAE,WAAO,KAAK,KAAK,GAAG,KAAK,SAAS,YAAY,MAAM,KAAK,UAAU,CAAC,cAAc,EAAE,MAAM,UAAU,MAAM,UAAU,CAAC;AAAA,EAAG;AAAA,EACzK,MAAM,gBAAgB,IAAYA,OAAkB;AAAE,WAAO,KAAK,QAAQ,OAAO,GAAG,KAAK,SAAS,YAAY,MAAM,KAAK,UAAU,CAAC,cAAc,mBAAmB,EAAE,CAAC,IAAIA,KAAI;AAAA,EAAG;AAAA,EACnL,MAAM,gBAAgB,IAAY;AAAE,WAAO,KAAK,QAAQ,UAAU,GAAG,KAAK,SAAS,YAAY,MAAM,KAAK,UAAU,CAAC,cAAc,mBAAmB,EAAE,CAAC,EAAE;AAAA,EAAG;AAAA,EAC9J,MAAM,cAAc,UAAU,IAAI;AAAE,WAAO,KAAK,IAAI,GAAG,KAAK,SAAS,YAAY,MAAM,KAAK,UAAU,CAAC,4BAA4B,EAAE,QAAQ,CAAC;AAAA,EAAG;AAAA,EAEjJ,MAAM,WAAW,QAAgB;AAAE,WAAO,KAAK,IAAI,uBAAuB,MAAM,KAAK,UAAU,CAAC,eAAe,mBAAmB,MAAM,CAAC,IAAI,EAAE,WAAW,KAAK,CAAC;AAAA,EAAG;AAAA,EACnK,MAAM,gBAAgBA,OAAkB;AAAE,WAAO,KAAK,KAAK,uBAAuB,MAAM,KAAK,UAAU,CAAC,uBAAuBA,KAAI;AAAA,EAAG;AAAA,EACtI,MAAM,wBAAwB,YAAoBC,YAAW,IAAI;AAC/D,UAAM,SAAS,MAAM,KAAK,gBAAgB,EAAE,UAAAA,WAAU,WAAW,GAAG,OAAO,OAAO,SAAS,WAAW,CAAC;AACvG,UAAM,OAAO,MAAM,QAAQ,MAAM,IAAI,SAAU,QAAuB;AACtE,UAAM,QAAQ,MAAM,QAAQ,IAAI,IAAI,KAAK,OAAO,SAAO,OAAO,OAAO,QAAQ,QAAQ,IAAoB,CAAC;AAC1G,UAAM,QAAQ,MAAM,OAAO,SAAO,OAAO,IAAI,YAAY,IAAI,cAAc,IAAI,eAAe,EAAE,MAAM,UAAU;AAChH,UAAM,WAAW,MAAM,SAAS,QAAQ,OAAO,IAAI,UAAQ,EAAE,QAAQ,IAAI,UAAU,IAAI,IAAI,YAAY,IAAI,YAAY,IAAI,cAAc,IAAI,aAAa,WAAW,IAAI,aAAa,IAAI,YAAY,IAAI,cAAc,IAAI,cAAc,IAAI,WAAW,IAAI,aAAa,GAAG,EAAE;AAC/Q,WAAO,EAAE,YAAY,QAAQ,MAAM,UAAU,QAAQ,WAAW,IAAI,QAAQ,CAAC,GAAG,UAAU,OAAO,MAAM,WAAW,MAAM,SAAS,oBAAoB,WAAW,QAAQ;AAAA,EAC1K;AAAA,EACA,MAAM,YAAY,OAAeD,OAAkB;AAAE,WAAO,KAAK,KAAK,mBAAmB,mBAAmB,KAAK,CAAC,yBAAyBA,KAAI;AAAA,EAAG;AACpJ;;;AC/MA,SAAS,gBAAgB;AAKzB,eAAsB,SAAS,MAAgB,WAAW,MAA2B;AACnF,QAAM,OAAO,OAAO,MAAM,aAAa;AACvC,QAAM,MAAM,OAAO,MAAM,SAAS,MAAM,MAAM,IAAI,OAAO,MAAM,QAAQ;AACvE,MAAI,CAAC,KAAK;AACR,QAAI,SAAU,OAAM,IAAI,MAAM,mCAAmC;AACjE,WAAO,CAAC;AAAA,EACV;AACA,QAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,MAAI,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,EAAG,OAAM,IAAI,MAAM,oCAAoC;AACxH,SAAO;AACT;AAEA,eAAsB,UAAU,MAAkC;AAChE,QAAM,OAAO,OAAO,MAAM,aAAa;AACvC,QAAM,MAAM,OAAO,MAAM,SAAS,MAAM,MAAM,IAAI,OAAO,MAAM,UAAU,IAAI;AAC7E,SAAO,KAAK,MAAM,GAAG;AACvB;AAEO,SAAS,YAAY,MAAgB,MAAc,SAAiB;AACzE,MAAI,CAAC,KAAK,MAAM,IAAI,EAAG,OAAM,IAAI,MAAM,GAAG,OAAO,aAAa,IAAI,sCAAsC;AAC1G;AAEO,SAAS,UAAU,MAAgB;AAAE,SAAO,OAAO,MAAM,QAAQ,IAAI;AAAI;;;ACrBhF,IAAM,WAAoC;AAAA,EACxC,qBAAqB,OAAO,QAAQ,SAAS;AAC3C,UAAM,UAAU,MAAM,UAAU,IAAI;AACpC,QAAI,CAAC,MAAM,QAAQ,OAAO,EAAG,OAAM,IAAI,MAAM,yCAAyC;AACtF,WAAO,OAAO,gBAAgB,OAAO,MAAM,UAAU,IAAI,GAAI,OAAO;AAAA,EACtE;AAAA,EACA,mBAAmB,CAAC,QAAQ,SAAS,OAAO,cAAc,OAAO,MAAM,UAAU,IAAI,CAAE;AAAA,EACvF,cAAc,OAAO,QAAQ,SAAS;AACpC,UAAM,UAAU,MAAM,SAAS,IAAI;AACnC,UAAM,SAAS,4BAA4B,UAAU,QAAQ,yBAAyB;AACtF,WAAO,OAAO,UAAU,QAAQ,QAAQ,2BAAqD;AAAA,EAC/F;AAAA,EACA,kBAAkB,YAAU,OAAO,aAAa;AAAA,EAChD,wBAAwB,YAAU,OAAO,kBAAkB;AAAA,EAC3D,sBAAsB,YAAU,OAAO,aAAa;AAAA,EACpD,wBAAwB,YAAU,OAAO,mBAAmB;AAAA,EAC5D,0BAA0B,CAAC,QAAQ,SAAS,OAAO;AAAA,IACjD,OAAO,OAAO,MAAM,QAAQ,KAAK,CAAC;AAAA,IAAG,OAAO,OAAO,MAAM,aAAa,KAAK,EAAE;AAAA,IAAG,OAAO,MAAM,WAAW,KAAK;AAAA,EAC/G;AAAA,EACA,wBAAwB,CAAC,QAAQ,SAAS,OAAO,kBAAkB,UAAU,IAAI,CAAC;AAAA,EAClF,2BAA2B,OAAO,QAAQ,SAAS,OAAO,qBAAqB,MAAM,SAAS,IAAI,CAAC;AAAA,EACnG,2BAA2B,OAAO,QAAQ,SAAS,OAAO,qBAAqB,MAAM,SAAS,IAAI,CAAC;AAAA,EACnG,2BAA2B,OAAO,QAAQ,SAAS;AACjD,gBAAY,MAAM,oBAAoB,yBAAyB;AAC/D,WAAO,OAAO,qBAAqB,UAAU,IAAI,CAAC;AAAA,EACpD;AAAA,EACA,2BAA2B,CAAC,QAAQ,SAAS,OAAO,qBAAqB,UAAU,IAAI,CAAC;AAAA,EACxF,4BAA4B,YAAU,OAAO,sBAAsB;AAAA,EACnE,0BAA0B,CAAC,QAAQ,SAAS,OAAO,oBAAoB,UAAU,IAAI,CAAC;AAAA,EACtF,6BAA6B,OAAO,QAAQ,SAAS,OAAO,uBAAuB,MAAM,SAAS,IAAI,CAAC;AAAA,EACvG,6BAA6B,OAAO,QAAQ,SAAS,OAAO,uBAAuB,MAAM,SAAS,IAAI,CAAC;AAAA,EACvG,6BAA6B,OAAO,QAAQ,SAAS;AACnD,gBAAY,MAAM,oBAAoB,2BAA2B;AACjE,WAAO,OAAO,uBAAuB,UAAU,IAAI,CAAC;AAAA,EACtD;AAAA,EACA,+BAA+B,OAAO,QAAQ,SAAS,OAAO,yBAAyB,MAAM,SAAS,IAAI,CAAC;AAAA,EAC3G,6BAA6B,CAAC,QAAQ,SAAS,OAAO,uBAAuB,UAAU,IAAI,CAAC;AAAA,EAC5F,kBAAkB,CAAC,QAAQ,SAAS,OAAO,cAAc;AAAA,IACvD,WAAW,OAAO,OAAO,MAAM,QAAQ,KAAK,CAAC;AAAA,IAC7C,UAAU,OAAO,OAAO,MAAM,aAAa,KAAK,EAAE;AAAA,IAClD,SAAS,OAAO,MAAM,WAAW,KAAK;AAAA,IACtC,GAAIG,SAAQ,MAAM,SAAS,EAAE,SAAS,EAAE,QAAQA,SAAQ,MAAM,SAAS,EAAE,IAAI,CAAC;AAAA,IAC9E,GAAI,OAAO,MAAM,UAAU,IAAI,EAAE,QAAQ,CAAC,OAAO,MAAM,UAAU,CAAC,EAAE,IAAI,CAAC;AAAA,EAC3E,CAAC;AAAA,EACD,mBAAmB,OAAO,QAAQ,SAAS;AACzC,UAAM,UAAU,MAAM,SAAS,MAAM,KAAK;AAC1C,QAAI,OAAO,MAAM,QAAQ,EAAG,SAAQ,OAAO,OAAO,MAAM,QAAQ;AAChE,QAAI,OAAO,MAAM,WAAW,EAAG,SAAQ,UAAU,OAAO,MAAM,WAAW;AACzE,QAAI,OAAO,MAAM,UAAU,EAAG,SAAQ,SAAS,OAAO,MAAM,UAAU;AACtE,QAAIA,SAAQ,MAAM,SAAS,EAAE,CAAC,EAAG,SAAQ,QAAQA,SAAQ,MAAM,SAAS,EAAE,CAAC;AAC3E,QAAI,CAAC,QAAQ,QAAQ,CAAC,QAAQ,QAAS,OAAM,IAAI,MAAM,2CAA2C;AAClG,WAAO,OAAO,eAAe,OAAO;AAAA,EACtC;AAAA,EACA,mBAAmB,OAAO,QAAQ,SAAS;AACzC,UAAM,UAAU,MAAM,SAAS,MAAM,KAAK;AAC1C,eAAW,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,QAAQ,QAAQ,GAAG,CAAC,WAAW,WAAW,GAAG,CAAC,UAAU,UAAU,CAAC,GAAY;AAC3G,UAAI,OAAO,MAAM,IAAI,EAAG,SAAQ,KAAK,IAAI,OAAO,MAAM,IAAI;AAAA,IAC5D;AACA,QAAI,CAAC,OAAO,KAAK,OAAO,EAAE,OAAQ,OAAM,IAAI,MAAM,qDAAqD;AACvG,WAAO,OAAO,eAAe,UAAU,IAAI,GAAG,OAAO;AAAA,EACvD;AAAA,EACA,oBAAoB,OAAO,QAAQ,SAAS;AAC1C,gBAAY,MAAM,oBAAoB,kBAAkB;AACxD,UAAM,MAAM,WAAW,MAAM,OAAO,EAAE,IAAI,MAAM;AAChD,QAAI,CAAC,IAAI,UAAU,IAAI,KAAK,QAAM,CAAC,OAAO,cAAc,EAAE,KAAK,MAAM,CAAC,EAAG,OAAM,IAAI,MAAM,kDAAkD;AAC3I,WAAO,OAAO,gBAAgB,GAAG;AAAA,EACnC;AACF;AAEO,IAAM,oBAAoB,IAAI,IAAI,OAAO,KAAK,QAAQ,CAAC;AAE9D,eAAsB,mBAAmB,QAAsB,SAAiB,MAAgB;AAC9F,QAAM,UAAU,SAAS,OAAO;AAChC,MAAI,CAAC,QAAS,OAAM,IAAI,MAAM,wCAAwC,OAAO,EAAE;AAC/E,SAAO,QAAQ,QAAQ,IAAI;AAC7B;;;AC5EA,IAAM,OAAO,OAAO,SAAmB,SAAS,MAAM,KAAK;AAC3D,IAAM,UAAU,OAAO,WAAyB,OAAO,UAAU;AACjE,IAAM,OAAO,CAAC,SAAmB,OAAO,OAAO,MAAM,QAAQ,KAAK,CAAC;AACnE,IAAM,WAAW,CAAC,SAAmB,OAAO,OAAO,MAAM,aAAa,KAAK,EAAE;AAC7E,IAAM,aAAa,OAAO,UAAoB;AAAA,EAC5C,gBAAgB,OAAO,OAAO,MAAM,cAAc,IAAI,CAAC;AAAA,EAAG,cAAc,OAAO,OAAO,MAAM,YAAY,IAAI,CAAC;AAAA,EAC7G,YAAY,OAAO,OAAO,MAAM,eAAe,KAAK,CAAC;AAAA,EAAG,GAAI,MAAM,KAAK,IAAI;AAC7E;AAEA,IAAMC,YAAoC;AAAA,EACxC,eAAe,OAAO,GAAG,MAAM,EAAE,QAAQ,QAAQ,mBAAmB,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,OAAO,GAAG,aAAa,IAAI,GAAG,OAAO,OAAO,OAAO,GAAG,UAAU,KAAK,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,OAAO,MAAM,QAAQ,CAAC,CAAC,GAAG,QAAQ,EAAE,OAAO,KAAK,GAAG,QAAQ,KAAK,CAAC;AAAA,EAC1Q,mBAAmB,OAAO,GAAG,MAAM,EAAE,eAAe,OAAO,GAAG,cAAc,IAAI,GAAI,MAAM,SAAS,CAAC,GAAG,KAAK,GAAG,WAAW,CAAC;AAAA,EAC3H,+BAA+B,OAAO,GAAG,MAAM,EAAE,gBAAgB,EAAE,UAAU,OAAO,OAAO,GAAG,SAAS,KAAK,EAAE,GAAG,WAAW,GAAG,QAAQ,OAAO,GAAG,YAAY,IAAI,EAAE,CAAC;AAAA,EACpK,8BAA8B,OAAO,GAAG,MAAM,EAAE,wBAAwB,OAAO,GAAG,iBAAiB,IAAI,GAAI,OAAO,OAAO,GAAG,aAAa,KAAK,EAAE,CAAC;AAAA,EACjJ,2BAA2B,OAAO,GAAG,MAAM,EAAE,QAAQ,OAAO,GAAG,EAAE,OAAO,YAAY,MAAM,QAAQ,CAAC,CAAC,uBAAuB,QAAW,EAAE,SAAS,OAAO,GAAG,WAAW,KAAK,IAAI,WAAW,KAAK,CAAC,GAAG,UAAU,SAAS,CAAC,EAAE,CAAC;AAAA,EAC1N,4BAA4B,OAAO,GAAG,MAAM,EAAE,QAAQ,QAAQ,GAAG,EAAE,OAAO,YAAY,MAAM,QAAQ,CAAC,CAAC,sBAAsB,EAAE,SAAS,OAAO,GAAG,aAAa,IAAI,EAAE,CAAC;AAAA,EACrK,4BAA4B,OAAO,GAAG,MAAM,EAAE,QAAQ,QAAQ,GAAG,EAAE,OAAO,YAAY,MAAM,QAAQ,CAAC,CAAC,sBAAsB,UAAU,CAAC,CAAC,IAAI,EAAE,SAAS,OAAO,GAAG,aAAa,IAAI,EAAE,CAAC;AAAA,EACrL,4BAA4B,OAAO,GAAG,MAAM;AAAE,gBAAY,GAAG,oBAAoB,0BAA0B;AAAG,WAAO,EAAE,QAAQ,UAAU,GAAG,EAAE,OAAO,YAAY,MAAM,QAAQ,CAAC,CAAC,sBAAsB,UAAU,CAAC,CAAC,EAAE;AAAA,EAAG;AAAA,EACxN,oCAAoC,OAAO,GAAG,MAAM,EAAE,QAAQ,OAAO,GAAG,EAAE,OAAO,YAAY,MAAM,QAAQ,CAAC,CAAC,iCAAiC,QAAW,EAAE,eAAe,OAAO,GAAG,UAAU,IAAI,GAAI,aAAa,UAAU,CAAC,EAAE,CAAC;AAAA,EACjO,2CAA2C,OAAO,GAAG,MAAM,EAAE,QAAQ,QAAQ,GAAG,EAAE,OAAO,YAAY,MAAM,QAAQ,CAAC,CAAC,uCAAuC,MAAM,UAAU,CAAC,CAAC;AAAA,EAC9K,uBAAuB,OAAO,GAAG,MAAM,EAAE,QAAQ,QAAQ,GAAG,EAAE,OAAO,YAAY,MAAM,QAAQ,CAAC,CAAC,aAAa,MAAM,UAAU,CAAC,CAAC;AAAA,EAChI,kBAAkB,OAAO,GAAG,MAAM,EAAE,QAAQ,OAAO,GAAG,EAAE,OAAO,YAAY,MAAM,QAAQ,CAAC,CAAC,mBAAmB,QAAW,EAAE,WAAW,UAAU,CAAC,GAAG,UAAU,OAAO,GAAG,eAAe,IAAI,EAAG,CAAC;AAAA,EAC/L,qBAAqB,OAAO,GAAG,MAAM,EAAE,QAAQ,QAAQ,GAAG,EAAE,OAAO,YAAY,MAAM,QAAQ,CAAC,CAAC,oBAAoB,MAAM,UAAU,CAAC,CAAC;AAAA,EACrI,0BAA0B,OAAO,GAAG,MAAM,EAAE,QAAQ,OAAO,GAAG,EAAE,OAAO,YAAY,MAAM,QAAQ,CAAC,CAAC,QAAQ,MAAM,UAAU,CAAC,CAAC;AAAA,EAC7H,2BAA2B,OAAO,GAAG,MAAM,EAAE,QAAQ,OAAO,GAAG,EAAE,OAAO,YAAY,MAAM,QAAQ,CAAC,CAAC,aAAa,EAAE,IAAI,UAAU,CAAC,GAAG,GAAI,MAAM,KAAK,CAAC,EAAG,CAAC;AAAA,EACzJ,4BAA4B,OAAO,GAAG,MAAM,EAAE,QAAQ,QAAQ,GAAG,EAAE,OAAO,YAAY,MAAM,QAAQ,CAAC,CAAC,eAAe,MAAM,UAAU,CAAC,CAAC;AAAA,EACvI,4BAA4B,OAAO,GAAG,MAAM,EAAE,QAAQ,OAAO,GAAG,EAAE,OAAO,YAAY,MAAM,QAAQ,CAAC,CAAC,eAAe,EAAE,aAAa,OAAO,UAAU,CAAC,CAAC,GAAG,GAAI,MAAM,KAAK,CAAC,EAAG,CAAC;AAAA,EAC7K,yBAAyB,OAAO,GAAG,MAAM,EAAE,QAAQ,OAAO,GAAG,EAAE,OAAO,YAAY,MAAM,QAAQ,CAAC,CAAC,gBAAgB,EAAE,MAAM,MAAM,UAAU,CAAC,EAAE,CAAC;AAAA,EAC9I,cAAc,OAAO,GAAG,MAAM,EAAE,QAAQ,QAAQ,GAAG,EAAE,OAAO,YAAY,MAAM,QAAQ,CAAC,CAAC,cAAc,EAAE,WAAW,WAAW,GAAG,OAAO,EAAE,IAAI,eAAa,EAAE,UAAU,SAAS,MAAM,UAAU,UAAU,EAAE,GAAG,UAAU,OAAO,WAAW,MAAM,WAAW,MAAM,UAAU,EAAE,MAAM,CAAC,EAAE,GAAG,aAAa,OAAO,GAAG,gBAAgB,KAAK,GAAG,CAAC;AAAA,EAC1U,qBAAqB,OAAO,GAAG,MAAM,EAAE,QAAQ,OAAO,6BAA6B,MAAM,QAAQ,CAAC,CAAC,gBAAgB,QAAW,OAAO,GAAG,QAAQ,IAAI,EAAE,UAAU,OAAO,GAAG,QAAQ,EAAG,IAAI,MAAS;AAAA,EAClM,sBAAsB,OAAO,GAAG,MAAM,EAAE,QAAQ,QAAQ,6BAA6B,MAAM,QAAQ,CAAC,CAAC,mBAAmB,EAAE,GAAI,MAAM,KAAK,CAAC,GAAI,UAAU,OAAO,GAAG,UAAU,IAAI,GAAG,aAAa,SAAS,CAAC;AAAA,EAC1M,sBAAsB,OAAO,GAAG,MAAM,EAAE,QAAQ,QAAQ,6BAA6B,MAAM,QAAQ,CAAC,CAAC,mBAAmB,EAAE,GAAI,MAAM,KAAK,CAAC,GAAI,IAAI,OAAO,UAAU,CAAC,CAAC,GAAG,aAAa,SAAS,CAAC;AAAA,EAC/L,sBAAsB,OAAO,GAAG,MAAM;AAAE,gBAAY,GAAG,oBAAoB,oBAAoB;AAAG,WAAO,EAAE,QAAQ,QAAQ,6BAA6B,MAAM,QAAQ,CAAC,CAAC,mBAAmB,EAAE,IAAI,OAAO,UAAU,CAAC,CAAC,GAAG,aAAa,SAAS,CAAC;AAAA,EAAG;AAAA,EACjP,kBAAkB,OAAO,GAAG,MAAM,EAAE,QAAQ,OAAO,6BAA6B,MAAM,QAAQ,CAAC,CAAC,eAAe,QAAW,EAAE,QAAQ,UAAU,CAAC,GAAG,GAAI,OAAO,GAAG,WAAW,IAAI,EAAE,MAAM,OAAO,GAAG,WAAW,EAAG,IAAI,CAAC,EAAG,CAAC;AAAA,EACxN,yBAAyB,OAAO,GAAG,MAAM,EAAE,QAAQ,QAAQ,6BAA6B,MAAM,QAAQ,CAAC,CAAC,kBAAkB,EAAE,QAAQ,OAAO,UAAU,CAAC,CAAC,GAAG,GAAI,MAAM,KAAK,CAAC,EAAG,CAAC;AAAA,EAC9K,qBAAqB,OAAO,GAAG,MAAM,EAAE,QAAQ,QAAQ,6BAA6B,MAAM,QAAQ,CAAC,CAAC,eAAe,EAAE,QAAQ,OAAO,OAAO,GAAG,aAAa,IAAI,CAAC,GAAG,aAAa,UAAU,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;AAAA,EAClN,qBAAqB,OAAO,GAAG,MAAM,EAAE,QAAQ,QAAQ,6BAA6B,MAAM,QAAQ,CAAC,CAAC,eAAe,EAAE,QAAQ,OAAO,OAAO,GAAG,aAAa,IAAI,CAAC,GAAG,aAAa,UAAU,OAAO,CAAC,EAAE,IAAI,OAAO,UAAU,CAAC,CAAC,GAAG,GAAI,MAAM,KAAK,CAAC,EAAG,CAAC,EAAE,CAAC;AAAA,EACrP,qBAAqB,OAAO,GAAG,MAAM;AAAE,gBAAY,GAAG,oBAAoB,mBAAmB;AAAG,WAAO,EAAE,QAAQ,QAAQ,6BAA6B,MAAM,QAAQ,CAAC,CAAC,eAAe,EAAE,QAAQ,OAAO,OAAO,GAAG,aAAa,IAAI,CAAC,GAAG,aAAa,UAAU,OAAO,CAAC,EAAE,IAAI,OAAO,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAAA,EAAG;AAAA,EACtS,2BAA2B,OAAO,GAAG,MAAM,EAAE,QAAQ,OAAO,6BAA6B,MAAM,QAAQ,CAAC,CAAC,0BAA0B,QAAW,EAAE,MAAM,OAAO,GAAG,iBAAiB,KAAK,YAAY,CAAC;AAAA,EACnM,mBAAmB,OAAO,GAAG,MAAM,EAAE,QAAQ,OAAO,6BAA6B,MAAM,QAAQ,CAAC,CAAC,kBAAkB,QAAW,EAAE,QAAQ,OAAO,GAAG,aAAa,IAAI,EAAG,CAAC;AAAA,EACvK,iBAAiB,OAAO,GAAG,MAAM,EAAE,QAAQ,QAAQ,6BAA6B,MAAM,QAAQ,CAAC,CAAC,gBAAgB,EAAE,QAAQ,OAAO,OAAO,GAAG,aAAa,IAAI,CAAC,GAAG,MAAM,OAAO,GAAG,UAAU,IAAI,GAAG,GAAI,OAAO,GAAG,QAAQ,IAAI,EAAE,WAAW,OAAO,IAAI,CAAC,EAAG,CAAC;AAAA,EACxP,sBAAsB,OAAO,GAAG,MAAM,EAAE,QAAQ,QAAQ,uBAAuB,MAAM,QAAQ,CAAC,CAAC,6BAA6B,EAAE,UAAU,SAAS,CAAC,GAAG,WAAW,KAAK,CAAC,GAAG,YAAY,OAAO,OAAO,GAAG,eAAe,KAAK,CAAC,GAAG,GAAI,MAAM,KAAK,CAAC,EAAG,CAAC;AAAA,EAClP,oBAAoB,OAAO,GAAG,MAAM,EAAE,QAAQ,QAAQ,6BAA6B,MAAM,QAAQ,CAAC,CAAC,iBAAiB,EAAE,MAAM,KAAK,CAAC,GAAG,UAAU,SAAS,CAAC,EAAE,CAAC;AAAA,EAC5J,0BAA0B,OAAO,GAAG,MAAM,EAAE,QAAQ,OAAO,uBAAuB,MAAM,QAAQ,CAAC,CAAC,kBAAkB;AAAA,EACpH,qBAAqB,OAAO,GAAG,MAAM,EAAE,QAAQ,QAAQ,6BAA6B,MAAM,QAAQ,CAAC,CAAC,kBAAkB,EAAE,MAAM,OAAO,GAAG,UAAU,IAAI,GAAG,MAAM,OAAO,GAAG,UAAU,IAAI,GAAG,GAAI,OAAO,GAAG,UAAU,IAAI,EAAE,OAAO,OAAO,OAAO,GAAG,UAAU,CAAC,EAAE,IAAI,CAAC,GAAI,GAAI,MAAM,KAAK,CAAC,EAAG,CAAC;AAAA,EAC1R,wBAAwB,OAAO,GAAG,MAAM,EAAE,QAAQ,QAAQ,6BAA6B,MAAM,QAAQ,CAAC,CAAC,iBAAiB,EAAE,MAAM,KAAK,CAAC,GAAG,UAAU,SAAS,CAAC,GAAG,GAAI,OAAO,GAAG,QAAQ,IAAI,EAAE,UAAU,OAAO,GAAG,QAAQ,EAAG,IAAI,CAAC,EAAG,CAAC;AAAA,EACpO,qBAAqB,OAAK,EAAE,WAAW,OAAO;AAAA,EAC9C,0BAA0B,OAAO,GAAG,MAAM,EAAE,QAAQ,QAAQ,+CAA+C,EAAE,SAAS,KAAK,CAAC,GAAG,UAAU,SAAS,CAAC,GAAG,gBAAgB,OAAO,OAAO,GAAG,YAAY,KAAK,CAAC,GAAG,cAAc,OAAO,OAAO,GAAG,UAAU,KAAK,CAAC,EAAE,CAAC;AAAA,EAC9P,wBAAwB,OAAO,GAAG,MAAM,EAAE,QAAQ,OAAO,0CAA0C,MAAM,QAAQ,CAAC,CAAC,YAAY,UAAU,CAAC,CAAC,EAAE;AAC/I;AAEA,IAAM,cAAsC;AAAA,EAC1C,qBAAqB;AAAA,EAAuC,kBAAkB;AAAA,EAAoC,gBAAgB;AAAA,EAAkC,iBAAiB;AAAA,EAA8C,uBAAuB;AAAA,EAAkD,4BAA4B;AAAA,EAAiD,oBAAoB;AAAA,EAAsC,qBAAqB;AAAA,EAA+C,mBAAmB;AAAA,EAA0C,yBAAyB;AAAA,EAAwC,qBAAqB;AAAA,EAA2C,wBAAwB;AAC/sB;AACA,WAAW,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQ,WAAW,EAAG,CAAAA,UAAS,IAAI,IAAI,OAAO,GAAG,MAAM,EAAE,QAAQ,QAAQ,MAAM,MAAM,WAAW,CAAC,CAAC;AAE7H,IAAM,qBAAqB,IAAI,IAAI,OAAO,KAAKA,SAAQ,CAAC;AAC/D,eAAsB,oBAAoB,QAAsB,SAAiB,MAAgB;AAC/F,QAAM,UAAUA,UAAS,OAAO;AAChC,MAAI,CAAC,QAAS,OAAM,IAAI,MAAM,wCAAwC,OAAO,EAAE;AAC/E,SAAO,QAAQ,QAAQ,IAAI;AAC7B;;;AJzDA,SAASC,aAAY,MAAgB,MAAc,SAAiB;AAClE,MAAI,CAAC,KAAK,MAAM,IAAI,EAAG,OAAM,IAAI,MAAM,GAAG,OAAO,aAAa,IAAI,sCAAsC;AAC1G;AAEA,SAAS,QAAQ,MAAgB,SAAiB;AAChD,QAAM,SAAS,KAAK,MAAM,UAAU;AACpC,QAAM,UAAU,KAAK,MAAM,WAAW;AACtC,MAAI,WAAW,QAAS,OAAM,IAAI,MAAM,GAAG,OAAO,gDAAgD;AAClG,SAAO;AACT;AAEA,eAAeC,MAAK,MAAqC;AACvD,QAAM,OAAO,OAAO,MAAM,aAAa;AACvC,QAAM,MAAM,OAAO,MAAMC,UAAS,MAAM,MAAM,IAAI,OAAO,MAAM,QAAQ;AACvE,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,mCAAmC;AAC7D,QAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,MAAI,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,EAAG,OAAM,IAAI,MAAM,oCAAoC;AACxH,SAAO;AACT;AAEA,eAAe,kBAAkB,MAAqC;AACpE,QAAM,UAAsB;AAAA,IAC1B,WAAW,OAAO,OAAO,MAAM,QAAQ,KAAK,CAAC;AAAA,IAC7C,UAAU,OAAO,OAAO,MAAM,aAAa,KAAK,EAAE;AAAA,IAClD,OAAO,KAAK,MAAM,SAAS;AAAA,IAC3B,GAAI,MAAM,aAAa,IAAI;AAAA,EAC7B;AACA,QAAM,WAAgE;AAAA,IACpE,CAAC,kBAAkB,cAAc,MAAM;AAAA,IAAG,CAAC,gBAAgB,YAAY,MAAM;AAAA,IAC7E,CAAC,cAAc,iBAAiB,MAAM;AAAA,IAAG,CAAC,SAAS,YAAY,MAAM;AAAA,IACrE,CAAC,WAAW,cAAc,MAAM;AAAA,IAAG,CAAC,YAAY,eAAe,MAAM;AAAA,IACrE,CAAC,WAAW,aAAa,MAAM;AAAA,IAAG,CAAC,WAAW,aAAa,WAAS,UAAU,MAAM;AAAA,EACtF;AACA,aAAW,CAAC,OAAO,MAAM,OAAO,KAAK,UAAU;AAC7C,UAAM,QAAQ,OAAO,MAAM,IAAI;AAC/B,QAAI,UAAU,OAAW,SAAQ,KAAK,IAAI,QAAQ,KAAK;AAAA,EACzD;AACA,SAAO;AACT;AAGA,eAAsB,iBAAiB,SAAkB,SAAiB,MAAkC;AAC1G,QAAM,SAAS,IAAI,aAAa,OAAO;AACvC,MAAI,kBAAkB,IAAI,OAAO,EAAG,QAAO,mBAAmB,QAAQ,SAAS,IAAI;AACnF,MAAI,mBAAmB,IAAI,OAAO,EAAG,QAAO,oBAAoB,QAAQ,SAAS,IAAI;AACrF,MAAI,QAAQ,WAAW,cAAc,EAAG,QAAO,oBAAoB,QAAQ,kBAAkB,IAAI;AACjG,QAAM,KAAK,MAAM,OAAO,MAAM,QAAQ,IAAI;AAC1C,UAAQ,SAAS;AAAA,IACf,KAAK;AAAe,aAAO,OAAO,YAAY;AAAA,IAC9C,KAAK;AAAe,aAAO,OAAO,WAAW,OAAO,MAAM,YAAY,KAAK,MAAM;AAAA,IACjF,KAAK;AAAa,aAAO,OAAO,SAAS,GAAG,CAAC;AAAA,IAC7C,KAAK;AAAsB,aAAO,OAAO,iBAAiB,OAAO,MAAM,cAAc,IAAI,CAAE;AAAA,IAC3F,KAAK;AAAgB,aAAO,OAAO,YAAY,MAAMD,MAAK,IAAI,CAAC;AAAA,IAC/D,KAAK;AAAgB,aAAO,OAAO,YAAY,MAAMA,MAAK,IAAI,CAAC;AAAA,IAC/D,KAAK;AAAgB,aAAO,OAAO,YAAY;AAAA,IAC/C,KAAK;AAAc,aAAO,OAAO,UAAU,GAAG,CAAC;AAAA,IAC/C,KAAK;AAAiB,aAAO,OAAO,aAAa,MAAMA,MAAK,IAAI,CAAC;AAAA,IACjE,KAAK;AAAiB,aAAO,OAAO,aAAa,MAAMA,MAAK,IAAI,CAAC;AAAA,IACjE,KAAK;AAAiB,MAAAD,aAAY,MAAM,oBAAoB,OAAO;AAAG,aAAO,OAAO,aAAa,GAAG,CAAC;AAAA,IACrG,KAAK;AAAQ,aAAO,OAAO,KAAK,EAAE,SAAS,OAAO,MAAM,WAAW,KAAK,OAAO,MAAM,MAAM,IAAI,GAAG,OAAO,OAAO,MAAM,UAAU,GAAG,QAAQ,OAAO,MAAM,WAAW,GAAG,YAAY,OAAO,MAAM,eAAe,KAAK,aAAa,GAAI,MAAM,aAAa,IAAI,EAAG,CAAC;AAAA,IAC/P,KAAK;AAAc,aAAO,OAAO,UAAU,EAAE,SAAS,OAAO,MAAM,WAAW,KAAK,OAAO,MAAM,MAAM,IAAI,GAAG,OAAO,OAAO,MAAM,UAAU,GAAG,QAAQ,OAAO,MAAM,WAAW,GAAG,YAAY,OAAO,MAAM,eAAe,KAAK,aAAa,GAAI,MAAM,aAAa,IAAI,EAAG,CAAC;AAAA,IAC1Q,KAAK;AAAoB,aAAO,OAAO,YAAY,OAAO,MAAM,aAAa,IAAI,GAAI,OAAO,MAAM,UAAU,CAAC;AAAA,IAC7G,KAAK;AAAgB,aAAO,OAAO,YAAY,OAAO,MAAM,YAAY,KAAK,YAAY;AAAA,IACzF,KAAK;AAAc,aAAO,OAAO,UAAU,GAAG,CAAC;AAAA,IAC/C,KAAK;AAAiB,aAAO,OAAO,aAAa,MAAMC,MAAK,IAAI,CAAC;AAAA,IACjE,KAAK;AAAiB,aAAO,OAAO,aAAa,GAAG,GAAG,MAAMA,MAAK,IAAI,CAAC;AAAA,IACvE,KAAK;AAAiB,aAAO,OAAO,aAAa,GAAG,GAAG,CAAC,KAAK,MAAM,WAAW,CAAC;AAAA,IAC/E,KAAK;AAAiB,aAAO,OAAO,aAAa;AAAA,IACjD,KAAK;AAAmB,aAAO,OAAO,eAAe,OAAO,OAAO,MAAM,aAAa,KAAK,GAAG,CAAC;AAAA,IAC/F,KAAK;AAAmB,aAAO,OAAO,eAAe,MAAMA,MAAK,IAAI,CAAC;AAAA,IACrE,KAAK;AAAmB,aAAO,OAAO,eAAe,GAAG,GAAG,MAAMA,MAAK,IAAI,CAAC;AAAA,IAC3E,KAAK;AAAmB,aAAO,OAAO,eAAe,GAAG,GAAG,CAAC,KAAK,MAAM,WAAW,CAAC;AAAA,IACnF,KAAK;AAAsB,aAAO,OAAO,cAAc;AAAA,IACvD,KAAK;AAAsB,aAAO,OAAO,iBAAiB,QAAQ,MAAM,OAAO,CAAC;AAAA,IAChF,KAAK;AAAsB,aAAO,OAAO,aAAa,OAAO,OAAO,MAAM,YAAY,KAAK,CAAC,KAAK,QAAW,OAAO,OAAO,MAAM,UAAU,KAAK,CAAC,KAAK,MAAS;AAAA,IAC9J,KAAK;AAAoB,aAAO,OAAO,YAAY,OAAO,MAAM,oBAAoB,IAAI,CAAE;AAAA,IAC1F,KAAK;AAAuB,aAAO,OAAO,kBAAkB,MAAMA,MAAK,IAAI,CAAC;AAAA,IAC5E,KAAK;AAA2B,aAAO,OAAO,kBAAkB,OAAO,MAAM,oBAAoB,IAAI,CAAE;AAAA,IACvG,KAAK;AAA8B,aAAO,OAAO,wBAAwB,MAAMA,MAAK,IAAI,CAAC;AAAA,IACzF,KAAK;AAA8B,aAAO,OAAO,wBAAwB,MAAMA,MAAK,IAAI,CAAC;AAAA,IACzF,KAAK;AAA8B,aAAO,OAAO,wBAAwB,OAAO,MAAM,oBAAoB,IAAI,CAAE;AAAA,IAChH,KAAK;AAAkB,aAAO,OAAO,cAAc,MAAM,aAAa,IAAI,CAAC;AAAA,IAC3E,KAAK;AAAiB,aAAO,OAAO,aAAa,GAAG,CAAC;AAAA,IACrD,KAAK;AAAoB,aAAO,OAAO,gBAAgB,GAAG,GAAG,MAAMA,MAAK,IAAI,CAAC;AAAA,IAC7E,KAAK;AAAa,aAAO,OAAO,UAAU,MAAMA,MAAK,IAAI,GAAG,KAAkB;AAAA,IAC9E,KAAK;AAAoB,aAAO,OAAO,gBAAgB;AAAA,IACvD,KAAK;AAAiB,aAAO,OAAO,aAAa,OAAO,MAAM,UAAU,IAAI,GAAI,OAAO,OAAO,MAAM,aAAa,KAAK,CAAC,CAAC;AAAA,IACxH,KAAK;AAAoB,aAAO,OAAO,gBAAgB,GAAG,GAAG,OAAO,MAAM,QAAQ,IAAI,EAAE,MAAM,OAAO,MAAM,QAAQ,EAAE,IAAI,MAAMA,MAAK,IAAI,CAAC;AAAA,IACzI,KAAK;AAAoB,MAAAD,aAAY,MAAM,oBAAoB,OAAO;AAAG,aAAO,OAAO,gBAAgB,GAAG,CAAC;AAAA,IAC3G,KAAK;AAAuB,aAAO,OAAO,cAAc,OAAO,MAAM,WAAW,KAAK,EAAE;AAAA,IACvF,KAAK;AAAkB,aAAO,OAAO,WAAW,OAAO,MAAM,aAAa,IAAI,CAAE;AAAA,IAChF,KAAK;AAAoB,aAAO,OAAO,gBAAgB,MAAM,kBAAkB,IAAI,CAAC;AAAA,IACpF,KAAK;AAAoB,aAAO,OAAO,YAAY,OAAO,MAAM,YAAY,IAAI,GAAI,MAAMC,MAAK,IAAI,CAAC;AAAA,IACpG;AAAS,YAAM,IAAI,MAAM,wCAAwC,OAAO,EAAE;AAAA,EAC5E;AACF;AAEA,eAAe,aAAa,MAAgB;AAC1C,MAAI,CAAC,OAAO,MAAM,QAAQ,KAAK,CAAC,OAAO,MAAM,aAAa,EAAG,QAAO,CAAC;AACrE,SAAOA,MAAK,IAAI;AAClB;AAEO,SAAS,sBAAsB,SAAiB;AACrD,SAAO,QAAQ,WAAW,cAAc,KAAK,kBAAkB,IAAI,OAAO,KAAK,mBAAmB,IAAI,OAAO,MAAK,oBAAI,IAAI;AAAA,IACxH;AAAA,IAAe;AAAA,IAAe;AAAA,IAAa;AAAA,IAAsB;AAAA,IAAgB;AAAA,IACjF;AAAA,IAAgB;AAAA,IAAc;AAAA,IAAiB;AAAA,IAAiB;AAAA,IAAiB;AAAA,IAAQ;AAAA,IACzF;AAAA,IAAoB;AAAA,IAAgB;AAAA,IAAc;AAAA,IAAiB;AAAA,IAAiB;AAAA,IACpF;AAAA,IAAiB;AAAA,IAAmB;AAAA,IAAmB;AAAA,IAAmB;AAAA,IAC1E;AAAA,IAAkB;AAAA,IAAoB;AAAA,IAAoB;AAAA,IAAsB;AAAA,IAChF;AAAA,IAAsB;AAAA,IAAoB;AAAA,IAAuB;AAAA,IACjE;AAAA,IAA8B;AAAA,IAA8B;AAAA,IAC5D;AAAA,IAAkB;AAAA,IAAiB;AAAA,IAAoB;AAAA,IAAa;AAAA,IACpE;AAAA,IAAiB;AAAA,IAAoB;AAAA,IAAoB;AAAA,EAC3D,CAAC,GAAE,IAAI,OAAO;AAChB;;;ADtHO,IAAM,cAAY,MAAI,QAAQ,QAAQ,cAAc,YAAY,GAAG,CAAC,GAAE,IAAI;AACjF,eAAsB,OAAO,SAAgB,SAAe,MAAc;AACxE,MAAI,sBAAsB,OAAO,GAAG;AAClC,YAAQ,IAAI,KAAK,UAAU,MAAM,iBAAiB,SAAS,SAAS,IAAI,GAAG,MAAM,CAAC,CAAC;AACnF;AAAA,EACF;AACA,QAAM,IAAI,MAAM,mCAAmC,OAAO,EAAE;AAC9D;;;AMHA,IAAM,SAAS,CAAC,SAAiB,SAAiBE,SAAQ,QAA0B,EAAE,SAAS,SAAS,OAAAA,OAAM;AAE9G,IAAM,YAAY;AAAA,EAChB,OAAO;AAAA,IACL,MAAM,OAAO,eAAe,eAAe,yBAAyB;AAAA,IACpE,KAAK,OAAO,aAAa,iBAAiB,iBAAiB;AAAA,IAC3D,QAAQ,OAAO,gBAAgB,mBAAmB,oCAAoC;AAAA,IACtF,QAAQ,OAAO,gBAAgB,mBAAmB,oCAAoC;AAAA,IACtF,gBAAgB,OAAO,sBAAsB,yBAAyB,uBAAuB;AAAA,EAC/F;AAAA,EACA,QAAQ;AAAA,IACN,MAAM,OAAO,gBAAgB,gBAAgB,yBAAyB;AAAA,IACtE,KAAK,OAAO,cAAc,kBAAkB,kBAAkB;AAAA,IAC9D,QAAQ,OAAO,iBAAiB,oBAAoB,oCAAoC;AAAA,IACxF,QAAQ,OAAO,iBAAiB,oBAAoB,uDAAuD;AAAA,IAC3G,QAAQ,OAAO,iBAAiB,+BAA+B,6DAA6D;AAAA,EAC9H;AAAA,EACA,UAAU;AAAA,IACR,MAAM,OAAO,mBAAmB,mBAAmB,wBAAwB;AAAA,IAC3E,UAAU,OAAO,iBAAiB,wBAAwB;AAAA,IAC1D,QAAQ,OAAO,mBAAmB,qBAAqB,oCAAoC;AAAA,IAC3F,QAAQ,OAAO,mBAAmB,qBAAqB,yDAAyD;AAAA,IAChH,QAAQ,OAAO,mBAAmB,gCAAgC,+DAA+D;AAAA,EACnI;AAAA,EACA,MAAM;AAAA,IACJ,MAAM,OAAO,gBAAgB,YAAY;AAAA,IACzC,KAAK,OAAO,cAAc,gBAAgB,gBAAgB;AAAA,IAC1D,QAAQ,OAAO,iBAAiB,iBAAiB,oCAAoC;AAAA,IACrF,QAAQ,OAAO,iBAAiB,iBAAiB,oCAAoC;AAAA,IACrF,QAAQ,OAAO,iBAAiB,iBAAiB,iCAAiC;AAAA,IAClF,KAAK,OAAO,cAAc,sCAAsC,oCAAoC;AAAA,EACtG;AAAA,EACA,OAAO;AAAA,IACL,QAAQ,OAAO,kBAAkB,8BAA8B;AAAA,IAC/D,eAAe,OAAO,wBAAwB,0CAA0C;AAAA,IACxF,OAAO,OAAO,sBAAsB,oCAAoC;AAAA,IACxE,YAAY,OAAO,wBAAwB,6BAA6B;AAAA,IACxE,MAAM,OAAO,0BAA0B,0BAA0B,6DAA6D;AAAA,IAC9H,KAAK,OAAO,wBAAwB,4BAA4B,iBAAiB;AAAA,IACjF,QAAQ,OAAO,2BAA2B,6BAA6B,oCAAoC;AAAA,IAC3G,QAAQ,OAAO,2BAA2B,6BAA6B,oCAAoC;AAAA,IAC3G,QAAQ,OAAO,2BAA2B,6BAA6B,kCAAkC;AAAA,IACzG,QAAQ,OAAO,2BAA2B,6BAA6B,iBAAiB;AAAA,EAC1F;AAAA,EACA,UAAU;AAAA,IACR,MAAM,OAAO,kBAAkB,wBAAwB,mGAAmG;AAAA,IAC1J,QAAQ,OAAO,mBAAmB,2BAA2B,0DAA0D;AAAA,IACvH,QAAQ,OAAO,mBAAmB,2BAA2B,mGAAmG;AAAA,IAChK,QAAQ,OAAO,oBAAoB,0BAA0B,qCAAqC;AAAA,EACpG;AAAA,EACA,WAAW;AAAA,IACT,MAAM,OAAO,kBAAkB,kBAAkB,sCAAsC;AAAA,IACvF,KAAK,OAAO,iBAAiB,0BAA0B,qBAAqB;AAAA,IAC5E,QAAQ,OAAO,oBAAoB,2BAA2B,0DAA0D;AAAA,IACxH,aAAa,OAAO,aAAa,mBAAmB,oCAAoC;AAAA,IACxF,MAAM,OAAO,uBAAuB,uBAAuB,uBAAuB;AAAA,EACpF;AAAA,EACA,WAAW;AAAA,IACT,MAAM,OAAO,oBAAoB,4BAA4B;AAAA,IAC7D,QAAQ,OAAO,iBAAiB,gCAAgC,4CAA4C;AAAA,IAC5G,QAAQ,OAAO,oBAAoB,gCAAgC,0EAA0E;AAAA,IAC7I,QAAQ,OAAO,oBAAoB,gCAAgC,sCAAsC;AAAA,EAC3G;AAAA,EACA,SAAS;AAAA,IACP,QAAQ,OAAO,sBAAsB,+BAA+B;AAAA,IACpE,QAAQ,OAAO,sBAAsB,wCAAwC,sBAAsB;AAAA,IACnG,OAAO,OAAO,sBAAsB,sBAAsB,uDAAuD;AAAA,IACjH,YAAY,OAAO,oBAAoB,wBAAwB,wBAAwB;AAAA,IACvF,eAAe,OAAO,uBAAuB,yBAAyB,oCAAoC;AAAA,IAC1G,mBAAmB,OAAO,2BAA2B,+BAA+B,wBAAwB;AAAA,IAC5G,sBAAsB,OAAO,8BAA8B,gCAAgC,oCAAoC;AAAA,IAC/H,sBAAsB,OAAO,8BAA8B,gCAAgC,oCAAoC;AAAA,IAC/H,sBAAsB,OAAO,8BAA8B,gCAAgC,wBAAwB;AAAA,IACnH,QAAQ,OAAO,4BAA4B,0BAA0B;AAAA,IACrE,aAAa,OAAO,0BAA0B,8BAA8B,iBAAiB;AAAA,IAC7F,gBAAgB,OAAO,6BAA6B,+BAA+B,oCAAoC;AAAA,IACvH,gBAAgB,OAAO,6BAA6B,+BAA+B,oCAAoC;AAAA,IACvH,gBAAgB,OAAO,6BAA6B,+BAA+B,kCAAkC;AAAA,IACrH,kBAAkB,OAAO,+BAA+B,+BAA+B,oCAAoC;AAAA,IAC3H,qBAAqB,OAAO,6BAA6B,iCAAiC,mBAAmB;AAAA,EAC/G;AAAA,EACA,YAAY;AAAA,IACV,MAAM,OAAO,oBAAoB,oBAAoB,qIAAqI;AAAA,IAC1L,KAAK,OAAO,kBAAkB,sBAAsB,qBAAqB;AAAA,IACzE,SAAS,OAAO,oBAAoB,oBAAoB,wDAAwD;AAAA,EAClH;AAAA,EACA,MAAM;AAAA,IACJ,MAAM,OAAO,QAAQ,mCAAmC,4DAA4D;AAAA,IACpH,OAAO,OAAO,cAAc,qCAAqC,4DAA4D;AAAA,IAC7H,QAAQ,OAAO,oBAAoB,mCAAmC,yCAAyC;AAAA,EACjH;AACF;AAIO,SAAS,kBAAkB,OAAsC;AACtE,SAAO,SAAS;AAClB;AAEO,SAAS,aAAa,UAAmB,YAA6B;AAC3E,MAAI,CAAC,SAAU,QAAO;AAAA,EAAwB,OAAO,KAAK,SAAS,EAAE,IAAI,UAAQ,KAAK,IAAI,EAAE,EAAE,KAAK,IAAI,CAAC;AACxG,MAAI,CAAC,kBAAkB,QAAQ,EAAG,OAAM,IAAI,MAAM,qBAAqB,QAAQ,EAAE;AACjF,QAAM,UAAU,UAAU,QAAQ;AAClC,MAAI,YAAY;AACd,UAAM,aAAa,QAAQ,UAAU;AACrC,QAAI,CAAC,WAAY,OAAM,IAAI,MAAM,WAAW,QAAQ,YAAY,UAAU;AAAA,EAAK,aAAa,QAAQ,CAAC,EAAE;AACvG,WAAO;AAAA,MACL,WAAW;AAAA,MACX,oBAAoB,QAAQ,IAAI,UAAU,GAAG,WAAW,QAAQ,IAAI,WAAW,KAAK,KAAK,EAAE;AAAA,IAC7F,EAAE,KAAK,MAAM;AAAA,EACf;AACA,SAAO;AAAA,IACL,GAAG,QAAQ;AAAA,IACX,GAAG,OAAO,QAAQ,OAAO,EAAE,IAAI,CAAC,CAAC,MAAM,UAAU,MAAM,KAAK,KAAK,OAAO,EAAE,CAAC,IAAI,WAAW,OAAO,EAAE;AAAA,IACnG;AAAA,gBAAmB,QAAQ;AAAA,EAC7B,EAAE,KAAK,IAAI;AACb;AAEO,SAAS,uBAAuB,UAAwBC,SAAyB;AACtF,MAAI,CAACA,WAAUA,YAAW,OAAQ,OAAM,IAAI,MAAM,aAAa,QAAQ,CAAC;AACxE,QAAM,aAAc,UAAU,QAAQ,EAAuCA,OAAM;AACnF,MAAI,CAAC,WAAY,OAAM,IAAI,MAAM,WAAW,QAAQ,YAAYA,OAAM;AAAA,EAAK,aAAa,QAAQ,CAAC,EAAE;AACnG,SAAO,WAAW;AACpB;AAEA,eAAsB,mBAAmB,SAAkB,UAAwBA,SAA4B,MAAgB;AAC7H,QAAM,OAAO,SAAS,uBAAuB,UAAUA,OAAM,GAAG,IAAI;AACtE;;;ACxIA,SAAS,cAAc;AACvB,SAAS,YAAY;AAIrB,eAAsB,WAAW;AAC/B,QAAMC,QAAO,YAAY;AACzB,QAAM,gBAAgB;AAAA,IACpB;AAAA,EACF;AACA,QAAM,QAAQ,IAAI,cAAc,IAAI,CAAC,SAAS,OAAO,KAAKA,OAAM,IAAI,CAAC,CAAC,CAAC;AAEvE,QAAM,wBAAwB,QAAQ,IAAI,yBAAyB;AACnE,MAAI,yBAAyB,0BAA0B,SAAS;AAC9D,UAAM,IAAI;AAAA,MACR,kBAAkB,qBAAqB,uBAAuB,OAAO;AAAA,IACvE;AAAA,EACF;AAEA,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,eAAe,wBAAwB,0BAA0B,UAAU;AAAA,IAC3E,aAAa,QAAQ,SAAS;AAAA,IAC9B,cAAc;AAAA,EAChB;AACF;;;AC3BA,OAAO,eAAe;AAKtB,eAAsB,MAAM,SAAgBC,UAAuF;AACjI,QAAM,YAAU,MAAM,KAAiB,SAAQ,gBAAe,CAAC,GAAE,IAAI;AAAE,MAAGA,SAAQ,QAAM,KAAGA,SAAQ,KAAGA,SAAQ,QAAMA,SAAQ,KAAGA,SAAQ,OAAK,UAAU,OAAO,oBAAoB,OAAM,IAAI,MAAM,yCAAyC;AAC1O,QAAM,SAAO,IAAK,UAAkB,EAAC,UAAS,UAAU,UAAS,WAAU,MAAK,aAAY,UAAU,YAAY,aAAY,iBAAgB,UAAU,YAAY,iBAAgB,eAAc,UAAU,YAAY,cAAa,CAAC;AACtO,QAAM,WAAS,MAAM,OAAO,QAAQ,UAAU,SAAQ,UAAU,UAAS,IAAI,KAAKA,SAAQ,OAAK,GAAI,GAAE,IAAI,KAAKA,SAAQ,KAAG,GAAI,GAAE,EAAC,OAAMA,SAAQ,OAAM,MAAK,KAAK,IAAIA,SAAQ,QAAM,IAAG,UAAU,OAAO,UAAU,GAAE,QAAOA,SAAQ,UAAQ,GAAE,SAAQA,SAAQ,QAAO,CAAC;AACjQ,QAAM,QAAM,SAAS,QAAM,UAAU,MAAM,CAAC,QAA6B,OAAO,YAAY,OAAO,QAAQ,GAAG,EAAE,IAAI,CAAC,CAAC,GAAE,CAAC,MAAI,CAAC,GAAE,OAAO,CAAC,EAAE,MAAM,GAAE,UAAU,OAAO,mBAAiB,MAAS,CAAC,CAAC,CAAC,CAAC,KAAG,SAAS,QAAM;AACnN,SAAO,EAAC,KAAI;AACd;;;ACPO,SAAS,YAAY,OAAa;AAAC,QAAM,IAAE,MAAM,YAAY;AAAE,MAAG,MAAI,UAAQ,MAAI,UAAU,QAAO;AAAU,MAAG,MAAI,UAAQ,MAAI,aAAa,QAAO;AAAO,QAAM,IAAI,MAAM,2BAA2B,KAAK,4BAA4B;AAAC;AAC/O,eAAsB,OAAO,SAAgBC,QAAa,KAAW;AAAC,UAAQ,MAAM,KAAwB,SAAQ,mBAAkB,EAAC,OAAAA,QAAM,aAAY,YAAY,GAAG,EAAC,CAAC,GAAG;AAAK;AAClL,eAAsB,UAAU,SAAgB,WAAiB,KAAW,SAAe;AACzF,MAAG,CAAC,QAAQ,OAAM,IAAI,MAAM,qBAAqB;AACjD,QAAM,WAAS,MAAM,KAAU,SAAQ,oBAAmB,EAAC,WAAU,aAAY,YAAY,GAAG,GAAE,QAAO,CAAC;AAC1G,MAAG,CAAC,SAAS,iBAAe,CAAC,SAAS,UAAU,YAAY,OAAM,IAAI,MAAM,0DAA0D;AACtI,UAAQ,SAAO,EAAC,GAAG,SAAS,QAAO,aAAY,SAAS,aAAY,SAAQ,SAAQ,SAAS,eAAc,eAAc,SAAS,eAAc,aAAY,SAAS,SAAS,YAAY,QAAQ,OAAM,EAAE,GAAE,QAAO,SAAS,SAAS,QAAQ,QAAQ,OAAM,EAAE,GAAE,WAAU,SAAS,0BAAwB,KAAK,MAAM,KAAK,IAAI,IAAE,GAAI,IAAE,SAAS,UAAS;AACxV,QAAM,YAAY,OAAO;AAAE,SAAO,aAAa,QAAQ,MAAM;AAC/D;AACO,SAAS,aAAa,GAAU;AAAC,SAAO,IAAE,EAAC,WAAU,EAAE,WAAU,aAAY,EAAE,aAAY,aAAY,EAAE,aAAY,aAAY,EAAE,aAAY,SAAQ,EAAE,SAAQ,WAAU,EAAE,WAAU,YAAW,QAAQ,EAAE,iBAAe,EAAE,WAAW,EAAC,IAAE,EAAC,YAAW,MAAK;AAAC;;;ACbpQ,SAAS,aAAa;AACtB,SAAS,OAAO,iBAAiB;AACjC,SAAS,SAAS,gBAAgB;AAClC,SAAS,YAAY,QAAAC,aAAY;AAIjC,IAAM,OAAO,CAAC,SAAiB,MAAgBC,WAAuB,CAAC,MACrE,IAAI,QAAgB,CAACC,UAAS,WAAW;AACvC,QAAM,SAAmB,CAAC;AAC1B,QAAM,QAAQ,MAAM,SAAS,MAAM;AAAA,IACjC,OAAOD,SAAQ,UAAU,CAAC,UAAU,QAAQ,SAAS,IAAI;AAAA,EAC3D,CAAC;AACD,MAAIA,SAAQ,QAAS,OAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,OAAO,KAAK,KAAK,CAAC;AAC3E,QAAM,GAAG,SAAS,MAAM;AACxB,QAAM,GAAG,QAAQ,CAAC,SAAS;AACzB,QAAI,SAAS,KAAKA,SAAQ,cAAc;AACtC,MAAAC,SAAQ,OAAO,OAAO,MAAM,EAAE,SAAS,MAAM,CAAC;AAC9C;AAAA,IACF;AACA,WAAO,IAAI,MAAM,GAAG,OAAO,gBAAgB,IAAI,EAAE,CAAC;AAAA,EACpD,CAAC;AACH,CAAC;AAEH,IAAM,MAAM,CAAC,UACX,MACG,WAAW,KAAK,OAAO,EACvB,WAAW,KAAK,MAAM,EACtB,WAAW,KAAK,MAAM,EACtB,WAAW,KAAK,QAAQ,EACxB,WAAW,KAAK,QAAQ;AAE7B,IAAM,aAAa,CAAC,UAClB,IAAI,MAAM,WAAW,MAAM,MAAM,EAAE,WAAW,KAAK,KAAK,CAAC;AAE3D,IAAM,aAAa,CAAC,UAClB,QAAQ,KAAK,KAAK,IAAI,IAAI,MAAM,WAAW,KAAK,KAAK,CAAC,MAAM;AAEvD,SAAS,oBACdC,eAAiC,QAAQ,KACzC,iBAAiB,QAAQ,UACzB;AACA,QAAM,gBAAgBA,aAAY;AAClC,MAAI,CAAC,iBAAiB,CAAC,WAAW,aAAa,GAAG;AAChD,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAsB,SAAS;AAC7B,QAAM,KAAK,SAAS,CAAC,UAAU,eAAe,WAAW,QAAQ,CAAC;AAClE,QAAM,KAAK,SAAS,CAAC,UAAU,OAAO,eAAe,CAAC;AACtD,QAAM,MAAM,MAAM,KAAK,SAAS,CAAC,UAAU,QAAQ,QAAQ,GAAG,EAAE,SAAS,KAAK,CAAC;AAC/E,QAAM,OAAO,KAAK,MAAM,GAAG;AAG3B,QAAM,SAAS,KAAK,WAAW,KAAK,CAAC,SAAS,KAAK,aAAa,eAAe;AAC/E,MAAI,CAAC,QAAQ,WAAW,OAAO,YAAY,OAAO;AAChD,UAAM,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AAEA,QAAM,WAAW,MAAM;AAAA,IACrB,kDAAkD,mBAAmB,OAAO,OAAO,CAAC;AAAA,IACpF,EAAE,QAAQ,YAAY,QAAQ,GAAM,EAAE;AAAA,EACxC;AACA,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI;AAAA,MACR,iCAAiC,OAAO,OAAO,oBAAoB,SAAS,MAAM;AAAA,IACpF;AAAA,EACF;AACA,QAAM,WAAY,MAAM,SAAS,KAAK;AACtC,MAAI,SAAS,YAAY,OAAO,SAAS;AACvC,UAAM,IAAI;AAAA,MACR,gBAAgB,SAAS,WAAW,YAAY,cAAc,OAAO,OAAO;AAAA,IAC9E;AAAA,EACF;AACA,SAAO;AAAA,IACL,eAAe,OAAO;AAAA,IACtB,mBAAmB,SAAS;AAAA,IAC5B,iBAAiB;AAAA,EACnB;AACF;AAEA,eAAsB,mBAAmB;AACvC,QAAM,aAAa,oBAAoB;AACvC,MAAI,SAAS,MAAM,UAAU;AAC3B,UAAM,MAAMH,MAAK,QAAQ,GAAG,sBAAsB;AAClD,UAAM,OAAOA,MAAK,KAAK,gCAAgC;AACvD,UAAM,mBAAmB,CAAC,WAAW,SAAS,GAAG,WAAW,IAAI,EAC7D,IAAI,CAAC,UAAU,WAAW,IAAI,KAAK,CAAC,WAAW,EAC/C,KAAK,EAAE;AACV,UAAM,MAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AACpC,UAAM;AAAA,MACJ;AAAA,MACA;AAAA;AAAA,wHAAyQ,gBAAgB;AAAA;AAAA,IAC3R;AACA,UAAM,KAAK,aAAa,CAAC,UAAU,IAAI,GAAG,EAAE,cAAc,KAAK,CAAC;AAChE,UAAM,KAAK,aAAa,CAAC,QAAQ,IAAI,CAAC;AACtC;AAAA,EACF;AAEA,MAAI,SAAS,MAAM,SAAS;AAC1B,UAAM,MAAMA,MAAK,QAAQ,GAAG,sBAAsB;AAClD,UAAM,UAAU,CAAC,WAAW,SAAS,GAAG,WAAW,IAAI,EAAE,IAAI,UAAU,EAAE,KAAK,GAAG;AACjF,UAAM,MAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AACpC,UAAM;AAAA,MACJA,MAAK,KAAK,uBAAuB;AAAA,MACjC;AAAA;AAAA,YAAsC,OAAO;AAAA;AAAA,IAC/C;AACA,UAAM;AAAA,MACJA,MAAK,KAAK,qBAAqB;AAAA,MAC/B;AAAA,IACF;AACA,UAAM,KAAK,aAAa,CAAC,UAAU,eAAe,CAAC;AACnD,UAAM,KAAK,aAAa,CAAC,UAAU,UAAU,SAAS,qBAAqB,CAAC;AAC5E;AAAA,EACF;AAEA,QAAM,OAAO,CAAC,WAAW,SAAS,GAAG,WAAW,IAAI,EAAE,IAAI,UAAU,EAAE,KAAK,GAAG;AAC9E,QAAM,KAAK,YAAY;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAEA,eAAsB,mBAAmB,SAAiB;AACxD,MAAI,CAAC,CAAC,UAAU,UAAU,KAAK,EAAE,SAAS,OAAO,GAAG;AAClD,UAAM,IAAI,MAAM,iBAAiB;AAAA,EACnC;AACA,QAAM,KAAK,SAAS;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe,OAAO;AAAA,EACxB,CAAC,EAAE,MAAM,MAAM,KAAK,SAAS,CAAC,UAAU,eAAe,WAAW,QAAQ,CAAC,CAAC;AAC5E,QAAM,KAAK,SAAS,CAAC,UAAU,OAAO,eAAe,CAAC;AACxD;;;AChKA,SAAS,gBAAgB;AACzB,SAAS,YAAY,UAAU;AAC/B,SAAmB,QAAAI,OAAM,WAAAC,gBAAe;AACxC,SAAS,iBAAiB;AAG1B,IAAMC,QAAO,UAAU,QAAQ;AAC/B,IAAM,YAAY,MAAMC,SAAQ,QAAQ,IAAI,iBAAiBC,MAAK,QAAQ,IAAI,GAAG,WAAW,CAAC;AAC7F,IAAM,OAAO,MAAMA,MAAK,UAAU,GAAG,mBAAmB;AACxD,IAAM,OAAO,OAAO,EAAE,QAAQA,MAAK,KAAK,GAAG,SAAS,GAAG,OAAOA,MAAK,KAAK,GAAG,OAAO,GAAG,KAAKA,MAAK,KAAK,GAAG,KAAK,EAAE;AAC9G,IAAM,YAAY,OAAM,oBAAI,KAAK,GAAE,YAAY,EAAE,QAAQ,YAAY,EAAE,EAAE,MAAM,GAAG,EAAE;AACpF,IAAM,WAAW,OAAU,MAAc,aAA4B;AAAE,MAAI;AAAE,WAAO,KAAK,MAAM,MAAM,GAAG,SAAS,MAAM,MAAM,CAAC;AAAA,EAAQ,QAAQ;AAAE,WAAO;AAAA,EAAU;AAAE;AACnK,IAAM,YAAY,OAAO,MAAc,UAAmB;AAAE,QAAM,GAAG,MAAMD,SAAQ,MAAM,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AAAG,QAAM,GAAG,UAAU,MAAM,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAAG;AAGhL,SAAS,MAAM,OAAe,IAAa,SAAS,IAAI;AAAE,SAAO,EAAE,OAAO,IAAI,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC,EAAG;AAAG;AAE/G,eAAe,QAAQ,MAAgB;AACrC,QAAM,EAAE,KAAK,OAAAE,OAAM,IAAI,KAAK;AAC5B,QAAM,SAAS,OAAO,MAAM,UAAU;AACtC,QAAM,YAAY,OAAO,OAAO,MAAM,cAAc,KAAK,EAAE;AAC3D,MAAI,CAAC,OAAO,cAAc,SAAS,KAAK,aAAa,EAAG,OAAM,IAAI,MAAM,yCAAyC;AACjH,MAAI;AACJ,MAAI,QAAQ;AACV,UAAM,UAAU,MAAM,GAAG,SAAS,QAAQ,MAAM;AAChD,QAAI,OAAO,YAAY,EAAE,SAAS,OAAO,GAAG;AAC1C,YAAM,SAAS,KAAK,MAAM,OAAO;AACjC,gBAAU,MAAM,QAAQ,MAAM,IAAI,OAAO,IAAI,UAAQ,OAAO,SAAS,YAAY,OAAO,OAAsB,EAAE,MAAM,OAAO,IAAI,EAAE,CAAC,IAAI,CAAC,MAAqB;AAAA,IAChK,WAAW,OAAO,YAAY,EAAE,SAAS,MAAM,GAAG;AAChD,YAAM,CAAC,QAAQ,GAAG,KAAK,IAAI,QAAQ,MAAM,OAAO,EAAE,OAAO,OAAO,EAAE,IAAI,UAAQ,KAAK,MAAM,GAAG,CAAC;AAC7F,gBAAU,MAAM,IAAI,YAAU,OAAO,aAAa,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,MAAM,CAAC,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAAA,IAC1G,MAAO,WAAU,QAAQ,MAAM,OAAO,EAAE,OAAO,OAAO,EAAE,IAAI,WAAS,EAAE,KAAK,EAAE;AAAA,EAChF,MAAO,WAAU,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,CAAC,GAAG,OAAO,EAAE,IAAI,IAAI,GAAG,MAAM,6BAAS,IAAI,CAAC,IAAI,QAAQ,IAAI,KAAK,GAAG,EAAE;AAClH,QAAM,GAAG,GAAG,KAAK,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAG,QAAM,GAAG,MAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AAC3F,QAAM,UAAU,CAAC;AACjB,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,UAAW,SAAQ,KAAK,QAAQ,MAAM,GAAG,IAAI,SAAS,CAAC;AAChG,QAAM,QAAQ,IAAI,QAAQ,IAAI,CAAC,OAAO,MAAM,UAAUD,MAAK,KAAK,SAAS,OAAO,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC;AACpH,QAAM,UAAUA,MAAKC,QAAO,cAAc,GAAG,EAAE,QAAQ,WAAW,eAAe,QAAQ,QAAQ,eAAe,QAAQ,QAAQ,YAAY,WAAW,QAAQ,UAAU,kBAAkB,aAAY,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC;AACjO,SAAO,EAAE,QAAQ,WAAW,cAAc,QAAQ,QAAQ,cAAc,QAAQ,QAAQ,IAAI;AAC9F;AAEA,eAAe,iBAAiB;AAC9B,QAAM,EAAE,KAAK,QAAQ,OAAAA,OAAM,IAAI,KAAK;AAAG,QAAM,UAAU,MAAM,SAAsBD,MAAKC,QAAO,cAAc,GAAG,CAAC,CAAC;AAClH,MAAI,QAAQ,WAAW,UAAW,OAAM,IAAI,MAAM,sCAAsC,OAAO,QAAQ,UAAU,SAAS,CAAC,EAAE;AAC7H,QAAM,SAAS,MAAM,GAAG,QAAQ,GAAG,GAAG,OAAO,UAAQ,oBAAoB,KAAK,IAAI,CAAC,EAAE,KAAK;AAC1F,MAAI,CAAC,MAAM,OAAQ,OAAM,IAAI,MAAM,2BAA2B,GAAG,EAAE;AACnE,QAAM,UAAyB,CAAC;AAChC,aAAW,QAAQ,MAAO,YAAW,OAAO,MAAM,SAAwBD,MAAK,KAAK,IAAI,GAAG,CAAC,CAAC,EAAG,SAAQ,KAAK,EAAE,GAAG,KAAK,YAAY,MAAM,UAAU,cAAc,KAAK,UAAU,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,IAAI,MAAK,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC;AACpO,QAAM,OAAOA,MAAK,QAAQ,WAAW,UAAU,CAAC,OAAO;AACvD,QAAM,UAAU,MAAM,EAAE,OAAO,QAAQ,QAAQ,eAAc,oBAAI,KAAK,GAAE,YAAY,GAAG,QAAQ,QAAQ,QAAQ,QAAQ,CAAC;AACxH,QAAM,UAAUA,MAAKC,QAAO,cAAc,GAAG,EAAE,QAAQ,QAAQ,iBAAiB,QAAQ,QAAQ,cAAc,MAAM,UAAS,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC;AACvJ,SAAO,EAAE,QAAQ,QAAQ,OAAO,QAAQ,QAAQ,aAAa,KAAK;AACpE;AAEA,eAAe,QAAQ;AAAE,QAAM,EAAE,OAAOC,WAAU,QAAQ,IAAI,IAAI,KAAK;AAAG,SAAO,EAAE,OAAO,MAAM,SAA6BF,MAAKE,WAAU,cAAc,GAAG,IAAI,GAAG,aAAa,MAAM,GAAG,QAAQ,MAAM,EAAE,MAAM,MAAM,CAAC,CAAC,GAAG,UAAU,MAAM,GAAG,QAAQ,GAAG,EAAE,MAAM,MAAM,CAAC,CAAC,EAAE;AAAG;AAC9Q,eAAe,SAAS;AACtB,QAAM,WAAW,MAAM,MAAM;AAAG,QAAM,SAAS,CAAC,MAAM,wCAAe,QAAQ,SAAS,KAAK,CAAC,GAAG,MAAM,kBAAkB,SAAS,OAAO,WAAW,QAAQ,UAAU,OAAO,SAAS,OAAO,MAAM,CAAC,EAAE,GAAG,MAAM,oCAAgB,MAAM,QAAQ,SAAS,WAAW,CAAC,GAAG,MAAM,iDAAmB,SAAS,YAAY,KAAK,UAAQ,KAAK,WAAW,UAAU,CAAC,CAAC,CAAC;AAC3V,SAAO,EAAE,IAAI,OAAO,MAAM,UAAQ,KAAK,EAAE,GAAG,OAAO;AACrD;AAEA,eAAe,QAAQ,MAAgB;AACrC,QAAM,WAAW,OAAO,MAAM,YAAY,KAAK;AAAO,QAAM,IAAI,KAAK;AACrE,QAAM,YAAY,aAAa,QAAQ,CAAC,OAAO,MAAM,WAAW,SAAS,MAAM,IAAI,CAAC,QAAQ;AAC5F,QAAM,SAAS,CAAC;AAChB,aAAW,QAAQ,WAAW;AAC5B,QAAI,SAAS,MAAO,QAAO,KAAK,MAAM,iBAAiB,QAAQ,QAAQ,IAAI,iBAAiB,UAAU,CAAC,CAAC,GAAG,MAAM,0DAAa,IAAI,CAAC;AAAA,aAC1H,CAAC,MAAM,OAAO,EAAE,SAAS,IAAI,GAAG;AAAE,YAAM,QAAQ,IAAI,OAAO,OAAO,CAAC,EAAE,IAAI,UAAQ,GAAG,MAAM,MAAM,EAAE,WAAW,KAAK,CAAC,CAAC,CAAC;AAAG,aAAO,KAAK,GAAG,OAAO,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,MAAM,GAAG,IAAI,6BAAS,MAAM,IAAI,CAAC,CAAC;AAAA,IAAG,WACpN,SAAS,WAAW;AAAE,YAAM,SAAS,MAAMJ,MAAK,MAAM,CAAC,MAAM,mBAAmB,CAAC;AAAG,aAAO,KAAK,MAAM,kCAAc,OAAO,WAAW,YAAY,CAAC;AAAA,IAAG,WACtJ,SAAS,OAAQ,QAAO,KAAK,MAAM,gBAAgB,OAAO,QAAQ,SAAS,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC,KAAK,IAAI,QAAQ,SAAS,IAAI,CAAC;AAAA,QAChI,OAAM,IAAI,MAAM,qCAAqC,IAAI,EAAE;AAAA,EAClE;AACA,SAAO,EAAE,IAAI,OAAO,MAAM,UAAQ,KAAK,EAAE,GAAG,UAAU,OAAO;AAC/D;AAEA,eAAe,MAAM,MAAgB;AACnC,MAAK,OAAO,MAAM,cAAc,IAAI,MAAO,aAAc,OAAM,IAAI,MAAM,yCAAyC;AAClH,QAAM,SAASE,MAAK,KAAK,EAAE,KAAK,oBAAoB;AACpD,SAAO,EAAE,UAAU,cAAc,QAAQ,aAAa,uIAAuI;AAC/L;AAEA,eAAsB,WAAWG,SAA4B,MAAgB;AAC3E,MAAIA,YAAW,UAAW,QAAO,QAAQ,IAAI;AAC7C,MAAIA,YAAW,UAAW,QAAO,eAAe;AAChD,MAAIA,YAAW,QAAS,QAAO,MAAM;AACrC,MAAIA,YAAW,SAAU,QAAO,OAAO;AACvC,MAAIA,YAAW,UAAW,QAAO,QAAQ,IAAI;AAC7C,MAAIA,YAAW,QAAS,QAAO,MAAM,IAAI;AACzC,MAAIA,YAAW,cAAc;AAAE,UAAM,EAAE,QAAQ,OAAOD,UAAS,IAAI,KAAK;AAAG,UAAM,QAAQ,UAAU;AAAG,UAAM,UAAUF,MAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,EAAE,QAAQ,OAAO,aAAY,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC;AAAG,UAAM,UAAU,MAAM,SAAsBA,MAAKE,WAAU,cAAc,GAAG,CAAC,CAAC;AAAG,UAAM,UAAUF,MAAKE,WAAU,cAAc,GAAG,EAAE,GAAG,SAAS,aAAa,OAAO,aAAa,OAAO,QAAQ,eAAe,CAAC,IAAI,EAAE,CAAC;AAAG,WAAO,EAAE,IAAI,MAAM,MAAM;AAAA,EAAG;AACzc,QAAM,IAAI,MAAM,uFAAuF;AACzG;;;ACzFA,OAAO,aAAa;AACpB,SAAS,YAAYE,WAAU;AAC/B,SAAS,WAAAC,UAAS,QAAAC,OAAM,WAAAC,gBAAe;AAGvC,IAAMC,aAAY,MAAMC,SAAQ,QAAQ,IAAI,iBAAiBC,MAAK,QAAQ,IAAI,GAAG,WAAW,CAAC;AAC7F,IAAM,YAAY,CAAC,UAAkBA,MAAKF,WAAU,GAAG,WAAW,KAAK;AACvE,IAAM,WAAW,CAAC,UAAkBE,MAAKF,WAAU,GAAG,SAAS,KAAK;AACpE,IAAM,MAAM,OAAM,oBAAI,KAAK,GAAE,YAAY,EAAE,QAAQ,YAAY,EAAE,EAAE,MAAM,GAAG,EAAE;AAC9E,IAAMG,YAAW,OAAO,SAAiB,KAAK,MAAM,MAAMC,IAAG,SAAS,MAAM,MAAM,CAAC;AACnF,IAAMC,aAAY,OAAO,MAAc,UAAmB;AAAE,QAAMD,IAAG,MAAME,SAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AAAG,QAAMF,IAAG,UAAU,MAAM,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAAG;AAE1K,IAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AACpB,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAEtB,SAAS,SAAS,OAAc;AAAE,QAAM,SAAS,MAAM,YAAY,MAAM,eAAe,CAAC;AAAG,MAAI,CAAC,MAAM,QAAQ,MAAM,EAAG,OAAM,IAAI,MAAM,2BAA2B;AAAG,SAAO,CAAC,GAAG,OAAO,MAAM,GAAG,CAAC,EAAE,IAAI,MAAM,GAAG,GAAG,MAAM,KAAK,IAAI,GAAG,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;AAAG;AACrQ,SAAS,WAAW,OAAyB;AAAE,QAAM,SAAS,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IAAK,MAAgB,SAAS;AAAO,MAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,CAAC,OAAO,UAAU,OAAO,KAAK,UAAQ,CAAC,QAAQ,OAAO,SAAS,QAAQ,EAAG,OAAM,IAAI,MAAM,yCAAyC;AAAG,SAAO;AAAmB;AAE3V,eAAsB,oBAAoB,MAAgB;AACxD,QAAM,QAAQ,OAAO,MAAM,SAAS,KAAK,OAAO,MAAM,eAAe,IAAI;AACzE,QAAM,OAAO,KAAK,SAAS,QAAQ;AAAG,QAAM,SAAS,OAAO,MAAM,UAAU,KAAKF,MAAK,SAAS,YAAY,GAAG,OAAO,qBAAqB,oBAAoB;AAC9J,QAAM,SAAS,WAAW,MAAMC,UAAS,KAAK,CAAC;AAAG,QAAM,WAAW,IAAI,QAAQ,SAAS;AAAG,QAAM,QAAQ,SAAS,aAAa,QAAQ;AACvI,MAAI,MAAM;AACR,UAAM,OAAO,CAAC,WAAW,CAAC;AAAG,UAAM,OAAO,CAAC,eAAe,gBAAgB,eAAe,gBAAgB,YAAY,YAAY,YAAY,YAAY,YAAY,UAAU,CAAC;AAChL,eAAW,SAAS,QAAQ;AAAE,YAAM,OAAQ,MAAM,QAAQ,CAAC,MAAM,cAAc,MAAM,eAAe,IAAI,MAAM,eAAe,MAAM,gBAAgB,IAAI,MAAM,cAAc,MAAM,eAAe,IAAI,MAAM,eAAe,MAAM,gBAAgB,EAAE;AAAiB,UAAI,CAAC,OAAO,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAG,OAAM,IAAI,MAAM,oDAAoD;AAAG,YAAM,OAAO,CAAC,GAAG,KAAK,MAAM,GAAG,CAAC,EAAE,IAAI,WAAS,OAAO,SAAS,EAAE,EAAE,KAAK,CAAC,GAAG,MAAM,YAAY,IAAI,GAAG,SAAS,KAAK,CAAC,CAAC;AAAA,IAAG;AAAA,EACte,OAAO;AACL,UAAM,OAAO,CAAC,aAAa,CAAC;AAAG,UAAM,OAAO,CAAC,MAAM,QAAQ,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAU,SAAS,aAAa,MAAM,CAAC;AAC1K,eAAW,SAAS,QAAQ;AAAE,YAAM,OAAO,MAAM,QAAQ,MAAM;AAAU,UAAI,CAAC,KAAM,OAAM,IAAI,MAAM,wCAAwC;AAAG,YAAM,QAAQ,QAAQ,MAAM,SAAS,MAAM,UAAU,OAAO,YAAc,MAAM,SAAS,MAAM,SAAU,IAAI,IAAM,MAAM,SAAS,MAAM,UAAU;AAAI,YAAM,OAAO,CAAC,MAAM,MAAM,IAAI,MAAM,MAAM,YAAY,MAAM,gBAAgB,IAAI,GAAG,SAAS,KAAK,GAAG,OAAO,MAAM,SAAS,IAAI,MAAM,YAAY,MAAM,aAAa,GAAG,MAAM,QAAQ,EAAE,CAAC;AAAA,IAAG;AAAA,EACje;AACA,QAAM,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,MAAM,OAAO,EAAE,MAAM,WAAW,EAAE;AAAG,QAAM,OAAO,CAAC,EAAE,SAAS;AAAI,QAAM,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,KAAK;AAAG,QAAM,QAAQ,QAAQ,YAAU;AAAE,WAAO,QAAQ;AAAA,EAAI,CAAC;AAC9L,QAAMC,IAAG,MAAME,SAAQ,MAAM,GAAG,EAAE,WAAW,KAAK,CAAC;AAAG,QAAM,SAAS,KAAK,UAAU,MAAM;AAC1F,SAAO,EAAE,MAAM,QAAQ,QAAQ,OAAO,SAAS,UAAU,MAAM,OAAO,OAAO;AAC/E;AAEA,IAAM,WAAqC,EAAE,qBAAqB,CAAC,0BAA0B,oBAAoB,iBAAiB,sBAAsB,gBAAgB,GAAG,UAAU,CAAC,mBAAmB,4BAA4B,GAAG,gBAAgB,CAAC,gBAAgB,sBAAsB,cAAc,GAAG,oBAAoB,CAAC,kBAAkB,oBAAoB,GAAG,kBAAkB,CAAC,iBAAiB,wBAAwB,iBAAiB,GAAG,kBAAkB,CAAC,iBAAiB,mBAAmB,qBAAqB,GAAG,uBAAuB,CAAC,EAAE;AAEviB,eAAsB,gBAAgB,MAAgB;AACpD,QAAM,QAAQ,OAAO,MAAM,SAAS,KAAK;AAAc,QAAM,QAAQ,OAAO,MAAM,UAAU,KAAK,IAAI;AAAG,QAAM,UAAU,KAAK,SAAS,YAAY;AAClJ,MAAI,CAAC,WAAW,CAAC,OAAO,MAAM,QAAQ,EAAG,OAAM,IAAI,MAAM,8BAA8B;AACvF,QAAM,UAAU,OAAO,QAAQ,QAAQ,EAAE,IAAI,CAAC,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,YAAY,2CAA2C,IAAI,KAAK,OAAO,GAAG,KAAK,GAAG,aAAa,IAAI,IAAI,SAAO,EAAE,MAAM,IAAI,YAAY,IAAI,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC,GAAG,QAAQ,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,QAAQ,MAAM,EAAE;AAChS,QAAM,SAAS,EAAE,MAAM,EAAE,QAAQ,OAAO,OAAO,GAAG,YAAY,GAAG,SAAS,QAAQ,QAAQ,OAAO,GAAG,MAAM,UAAU,aAAa,aAAa,GAAG,SAAS,aAAa,CAAC,EAAE;AAC1K,QAAM,aAAaC,MAAK,UAAU,KAAK,GAAG,WAAW,KAAK,OAAO;AAAG,QAAMC,WAAU,YAAY,MAAM;AAAG,QAAMA,WAAUD,MAAK,SAAS,KAAK,GAAG,eAAe,GAAG,EAAE,QAAQ,SAAS,QAAQ,OAAO,cAAc,YAAY,aAAY,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC;AACnQ,SAAO,EAAE,GAAG,OAAO,MAAM,aAAa,WAAW;AACnD;AAEA,eAAsB,qBAAqBE,SAA4B,MAAgB;AACrF,MAAIA,YAAW,eAAgB,QAAO,oBAAoB,IAAI;AAC9D,MAAIA,YAAW,kBAAmB,QAAO,gBAAgB,IAAI;AAC7D,QAAM,IAAI,MAAM,yDAAyD;AAC3E;;;ACjDA,SAAS,YAAAC,iBAAgB;AACzB,SAAS,YAAAC,iBAAgB;AAIzB,IAAM,OAAO,CAAC,UAAkB,mBAAmB,KAAK;AACxD,IAAM,aAAa,QAAQ,IAAI,uBAAuB;AACtD,IAAM,mBAAmB;AACzB,IAAM,oBAAoB;AAE1B,eAAe,SAAS,MAAc,YAAqC;AACzE,QAAM,YAAY,KAAK,IAAI;AAC3B,QAAM,aAAa,MAAM,MAAM,YAAY,EAAE,QAAQ,QAAQ,SAAS,EAAE,QAAQ,uCAAuC,gBAAgB,mBAAmB,GAAG,MAAM,KAAK,UAAU,EAAE,SAAS,OAAO,IAAI,WAAW,QAAQ,cAAc,QAAQ,EAAE,iBAAiB,cAAc,cAAc,CAAC,GAAG,YAAY,EAAE,MAAM,aAAa,SAAS,IAAI,EAAE,EAAE,CAAC,GAAG,QAAQ,YAAY,QAAQ,GAAM,EAAE,CAAC;AAC/X,QAAM,YAAY,WAAW,QAAQ,IAAI,gBAAgB;AAAG,QAAM,UAAU,EAAE,QAAQ,uCAAuC,gBAAgB,oBAAoB,GAAI,YAAY,EAAE,kBAAkB,UAAU,IAAI,CAAC,EAAG;AACvN,QAAM,MAAM,YAAY,EAAE,QAAQ,QAAQ,SAAS,MAAM,KAAK,UAAU,EAAE,SAAS,OAAO,QAAQ,6BAA6B,QAAQ,CAAC,EAAE,CAAC,GAAG,QAAQ,YAAY,QAAQ,GAAM,EAAE,CAAC;AACnL,QAAM,WAAW,MAAM,MAAM,YAAY,EAAE,QAAQ,QAAQ,SAAS,MAAM,KAAK,UAAU,EAAE,SAAS,OAAO,IAAI,YAAY,GAAG,QAAQ,cAAc,QAAQ,EAAE,MAAM,MAAM,WAAW,WAAW,EAAE,CAAC,GAAG,QAAQ,YAAY,QAAQ,GAAM,EAAE,CAAC;AAC3O,QAAM,OAAO,MAAM,SAAS,KAAK;AAAG,MAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,qCAAqC,SAAS,MAAM,EAAE;AAC5H,QAAM,WAAW,KAAK,MAAM,OAAO,EAAE,KAAK,UAAQ,KAAK,WAAW,OAAO,CAAC;AAAG,MAAI;AAAE,UAAM,UAAU,KAAK,MAAM,WAAW,SAAS,MAAM,CAAC,EAAE,KAAK,IAAI,IAAI;AAA8B,QAAI,QAAQ,MAAO,OAAM,IAAI,MAAM,OAAQ,QAAQ,MAAkC,WAAW,6BAA6B,CAAC;AAAG,WAAO,QAAQ,UAAU;AAAA,EAAS,QAAQ;AAAE,WAAO,EAAE,SAAS,CAAC,EAAE,MAAM,QAAQ,KAAK,CAAC,EAAE;AAAA,EAAG;AACnZ;AAEA,SAAS,gBAAgB,OAAe;AAAE,MAAI,CAAC,MAAM,WAAW,iBAAiB,EAAG,QAAO;AAAO,MAAI,OAAO,MAAM,MAAM,kBAAkB,MAAM;AAAG,QAAM,OAAO,KAAK,QAAQ,GAAG;AAAG,QAAM,WAAW,QAAQ,IAAI,KAAK,MAAM,IAAI,IAAI;AAAI,MAAI,QAAQ,EAAG,QAAO,KAAK,MAAM,GAAG,IAAI;AAAG,MAAI,KAAK,WAAW,gBAAgB,EAAG,QAAO,GAAG,gBAAgB,OAAO,KAAK,MAAM,GAAG,EAAE,IAAI,CAAC,GAAG,QAAQ;AAAI,SAAO,GAAG,gBAAgB,GAAG,IAAI,GAAG,QAAQ;AAAI;AAC/a,SAAS,WAAW,OAA0B;AAAE,QAAM,UAAU,SAAS,OAAO,UAAU,WAAY,MAAkC,UAAU;AAAW,SAAO,MAAM,QAAQ,OAAO,IAAI,QAAQ,QAAQ,UAAQ,QAAQ,OAAO,SAAS,YAAY,OAAQ,KAAiC,SAAS,WAAW,CAAC,OAAQ,KAAiC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AAAG;AACnX,SAAS,cAAc,MAAc;AAAE,QAAM,SAAkC,CAAC;AAAG,QAAM,UAAoB,CAAC;AAAG,MAAI,YAAY;AAAO,aAAW,QAAQ,KAAK,MAAM,OAAO,GAAG;AAAE,QAAI,UAAW,SAAQ,KAAK,IAAI;AAAA,aAAY,KAAK,WAAW,SAAS,EAAG,QAAO,QAAQ,KAAK,MAAM,CAAC,EAAE,KAAK;AAAA,aAAY,KAAK,WAAW,QAAQ,EAAG,QAAO,MAAM,gBAAgB,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC;AAAA,aAAY,KAAK,WAAW,QAAQ,EAAG,QAAO,OAAO,KAAK,MAAM,CAAC,EAAE,KAAK;AAAA,aAAY,KAAK,WAAW,UAAU,GAAG;AAAE,kBAAY;AAAM,UAAI,KAAK,MAAM,CAAC,EAAE,KAAK,EAAG,SAAQ,KAAK,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC;AAAA,IAAG;AAAA,EAAE;AAAE,MAAI,QAAQ,OAAQ,QAAO,UAAU,QAAQ,KAAK,IAAI,EAAE,KAAK;AAAG,SAAO,OAAO,KAAK,MAAM,EAAE,SAAS,SAAS,EAAE,SAAS,KAAK;AAAI;AAC5rB,eAAeC,SAAQ,SAAkB,QAAgB,MAAc,MAAgB;AACrF,QAAM,SAAS,QAAQ;AAAQ,QAAM,OAAO,QAAQ,aAAa,QAAQ,OAAO,EAAE;AAAG,MAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,cAAe,OAAM,IAAI,MAAM,oBAAoB;AACxK,QAAM,SAAS,OAAO,gBAAgB,SAAS,WAAW;AAC1D,QAAM,WAAW,MAAM,MAAM,GAAG,IAAI,cAAc,IAAI,IAAI,EAAE,QAAQ,SAAS,EAAE,QAAQ,oBAAoB,GAAI,SAAS,SAAY,CAAC,IAAI,EAAE,gBAAgB,mBAAmB,GAAI,QAAQ,GAAG,MAAM,IAAI,OAAO,aAAa,GAAG,GAAG,MAAM,SAAS,SAAY,SAAY,KAAK,UAAU,IAAI,GAAG,QAAQ,YAAY,QAAQ,GAAM,EAAE,CAAC;AACnU,QAAM,QAAQ,MAAM,SAAS,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AACpD,MAAI,CAAC,SAAS,MAAO,MAAM,SAAS,UAAa,CAAC,CAAC,GAAG,KAAK,KAAK,OAAO,MAAM,SAAS,EAAE,SAAS,MAAM,IAAa,EAAI,OAAM,IAAI,MAAM,4BAA4B,SAAS,MAAM,EAAE;AACrL,SAAO,MAAM,QAAQ;AACvB;AAEA,SAAS,OAAO,SAAkB;AAAE,SAAO,QAAQ,QAAQ,gBAAgB,SAAS,yBAAyB;AAAgC;AAE7I,eAAsB,WAAW,SAAkBC,SAA4B,MAAgB;AAC7F,MAAIA,YAAW,eAAgB,QAAOD,SAAQ,SAAS,QAAQ,oBAAoB,EAAE,MAAM,OAAO,OAAO,MAAM,QAAQ,KAAK,CAAC,GAAG,UAAU,OAAO,OAAO,MAAM,aAAa,KAAK,EAAE,EAAE,CAAC;AACrL,MAAIC,YAAW,aAAc,QAAOD,SAAQ,SAAS,OAAO,oBAAoB,KAAK,OAAO,MAAM,mBAAmB,IAAI,CAAE,CAAC,EAAE;AAC9H,MAAIC,YAAW,iBAAkB,QAAOD,SAAQ,SAAS,QAAQ,oBAAoB,KAAK,OAAO,MAAM,mBAAmB,IAAI,CAAE,CAAC,aAAa,EAAE,SAAS,OAAO,MAAM,aAAa,IAAI,EAAE,CAAC;AAC1L,MAAIC,YAAW,iBAAiB;AAC9B,UAAM,cAAyB,CAAC;AAChC,eAAW,QAAQC,SAAQ,MAAM,cAAc,GAAG;AAChD,YAAM,OAAO,IAAI,SAAS;AAAG,WAAK,OAAO,QAAQ,IAAI,KAAK,CAAC,MAAMC,UAAS,IAAI,CAAC,CAAC,GAAGC,UAAS,IAAI,CAAC;AACjG,YAAM,SAAS,QAAQ;AAAQ,YAAM,OAAO,QAAQ,aAAa,QAAQ,OAAO,EAAE;AAAG,UAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,cAAe,OAAM,IAAI,MAAM,oBAAoB;AAAG,YAAM,SAAS,OAAO,gBAAgB,SAAS,WAAW;AACrO,YAAM,WAAW,MAAM,MAAM,GAAG,IAAI,kDAAkD,EAAE,QAAQ,QAAQ,SAAS,EAAE,QAAQ,GAAG,MAAM,IAAI,OAAO,aAAa,GAAG,GAAG,MAAM,MAAM,QAAQ,YAAY,QAAQ,GAAM,EAAE,CAAC;AAAG,YAAM,UAAU,MAAM,SAAS,KAAK;AAA8B,UAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,kCAAkC,SAAS,MAAM,EAAE;AAAG,kBAAY,KAAK,QAAQ,QAAQ,OAAO;AAAA,IAC1Z;AACA,UAAM,WAAW,QAAQ,IAAI,WAAW;AAAI,QAAI,CAAC,SAAU,OAAM,IAAI,MAAM,2BAA2B;AACtG,UAAM,SAAS,MAAMJ,SAAQ,SAAS,QAAQ,2BAA2B,EAAE,SAAS,OAAO,MAAM,aAAa,IAAI,GAAG,YAAY,UAAU,UAAU,OAAO,OAAO,MAAM,SAAS,GAAG,WAAW,OAAO,MAAM,cAAc,KAAK,OAAO,MAAM,YAAY,GAAG,SAAS,OAAO,MAAM,WAAW,GAAG,cAAc,OAAO,MAAM,iBAAiB,GAAG,GAAI,OAAO,MAAM,OAAO,IAAI,EAAE,WAAW,KAAK,MAAM,OAAO,MAAM,OAAO,CAAE,EAAE,IAAI,CAAC,GAAI,GAAI,YAAY,SAAS,EAAE,YAAY,IAAI,CAAC,EAAG,CAAC;AACpd,UAAM,SAAS,OAAO;AACtB,UAAMA,SAAQ,SAAS,QAAQ,0BAA0B,EAAE,QAAQ,UAAU,cAAc,OAAO,CAAC,EAAE,MAAM,MAAM,MAAS;AAC1H,WAAO,EAAE,cAAc,QAAQ,iBAAiB,SAAS,GAAG,OAAO,OAAO,CAAC,6BAA6B,MAAM,KAAK,QAAW,QAAQ,OAAO,QAAQ,SAAS,OAAO,SAAS,WAAW,OAAO,WAAW,WAAW,OAAO,UAAU;AAAA,EACzO;AACA,MAAIC,YAAW,eAAe;AAAE,UAAMI,SAAQ,OAAO,MAAM,WAAW,IAAI;AAAI,UAAM,SAAS,MAAM,SAAS,iBAAiB,EAAE,OAAAA,OAAM,CAAC;AAAG,WAAO,EAAE,OAAAA,QAAO,SAAS,WAAW,MAAM,EAAE,IAAI,aAAa,EAAE;AAAA,EAAG;AAC3M,MAAIJ,YAAW,yBAAyB;AAAE,UAAM,UAAU,OAAO,MAAM,aAAa,IAAI;AAAI,UAAM,SAAS,MAAM,SAAS,gCAAgC,EAAE,QAAQ,CAAC;AAAG,WAAO,EAAE,SAAS,QAAQ,WAAW,MAAM,EAAE;AAAA,EAAG;AACxN,QAAM,IAAI,MAAM,gGAAgG;AAClH;;;ACtDA,SAAS,SAAAK,QAAO,YAAAC,WAAU,aAAAC,kBAAiB;AAC3C,SAAS,WAAAC,UAAS,QAAAC,OAAM,WAAAC,gBAAe;AACvC,SAAS,WAAAC,gBAAe;AAKjB,IAAM,gBAAgB,MAAMC,SAAQ,QAAQ,IAAI,oBAAoBC,MAAKC,SAAQ,GAAG,WAAW,WAAW,CAAC;AAC3G,IAAM,YAAY,CAAC,WAAmBF,SAAQ,QAAQ,IAAI,oBAAoBC,MAAK,cAAc,GAAG,OAAO,GAAG,MAAM;AACpH,IAAM,aAAa,CAAC,WAAmBD,SAAQ,QAAQ,IAAI,qBAAqBC,MAAK,cAAc,GAAG,SAAS,GAAG,MAAM;AAE/H,eAAsB,aAAa,MAAc;AAAE,QAAME,OAAMC,SAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AAAG;AACpG,eAAsB,UAAU,WAAmB;AAAE,QAAMD,OAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAAG;AAElG,eAAsBE,UAAsB,MAA0B;AACpE,SAAO,KAAK,MAAM,MAAMC,UAAS,MAAM,MAAM,CAAC;AAChD;AAEA,eAAsBC,WAAU,MAAc,OAAgB;AAC5D,QAAM,aAAa,IAAI;AACvB,QAAMC,WAAU,MAAM,GAAG,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA,GAAM,MAAM;AACrE;AAwBO,SAAS,UAAU,MAAgB,MAAc,UAAkB;AACxE,QAAM,MAAM,OAAO,MAAM,IAAI;AAC7B,MAAI,QAAQ,OAAW,QAAO;AAC9B,QAAM,QAAQ,OAAO,GAAG;AACxB,MAAI,CAAC,OAAO,SAAS,KAAK,EAAG,OAAM,IAAI,MAAM,GAAG,IAAI,mBAAmB;AACvE,SAAO;AACT;AAUO,SAAS,SAAS,OAAgB;AACvC,SAAO,KAAK,UAAU,OAAO,MAAM,CAAC;AACtC;AAEO,SAAS,WAAW,OAAgB;AACzC,SAAO,OAAO,SAAS,EAAE,EAAE,QAAQ,aAAa,WAAS,EAAE,KAAK,SAAS,KAAK,QAAQ,KAAK,QAAQ,KAAM,UAAU,KAAK,QAAQ,GAAE,IAAI,CAAG;AAC3I;AAEA,eAAsB,UAAU,MAAc,OAAe,MAAc;AACzE,QAAM,aAAa,IAAI;AACvB,QAAMC,WAAU,MAAM,2DAA2D,WAAW,KAAK,CAAC,iQAAiQ,WAAW,KAAK,CAAC,QAAQ,IAAI,kBAAkB,MAAM;AAC1Z;AAEO,SAAS,OAAO,OAA8B;AACnD,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,MAAM,OAAO,UAAQ,QAAQ,OAAO,SAAS,QAAQ;AACtF,MAAI,SAAS,OAAO,UAAU,UAAU;AACtC,UAAM,SAAS;AACf,eAAW,OAAO,CAAC,QAAQ,QAAQ,SAAS,QAAQ,WAAW,QAAQ,GAAG;AACxE,UAAI,MAAM,QAAQ,OAAO,GAAG,CAAC,EAAG,QAAO,OAAO,GAAG,EAAG,OAAO,UAAQ,QAAQ,OAAO,SAAS,QAAQ;AAAA,IACrG;AAAA,EACF;AACA,SAAO,CAAC;AACV;;;AC5EA,SAAS,WAAW,OAA8B;AAChD,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO,CAAC;AACjD,QAAMC,QAAO;AACb,aAAW,OAAO,CAAC,SAAS,YAAY,QAAQ,EAAG,KAAI,MAAM,QAAQA,MAAK,GAAG,CAAC,EAAG,QAAOA,MAAK,GAAG,EAAG,OAAO,OAAK,KAAK,OAAO,MAAM,QAAQ;AACzI,SAAO,CAAC;AACV;AAEA,SAAS,WAAW,OAA8B;AAChD,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO,CAAC;AACjD,QAAMA,QAAO;AACb,aAAW,OAAO,CAAC,SAAS,eAAe,OAAO,EAAG,KAAI,MAAM,QAAQA,MAAK,GAAG,CAAC,EAAG,QAAOA,MAAK,GAAG,EAAG,OAAO,OAAK,KAAK,OAAO,MAAM,QAAQ;AAC3I,SAAO,CAAC;AACV;AAEO,SAAS,cAAc,OAAgB;AAC5C,QAAM,SAAmB,CAAC,GAAG,WAAqB,CAAC;AACnD,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO,KAAK,6BAA6B;AAC1G,QAAM,QAAQ,WAAW,KAAK,GAAG,QAAQ,WAAW,KAAK;AACzD,MAAI,CAAC,MAAM,OAAQ,UAAS,KAAK,yBAAyB;AAC1D,QAAM,MAAM,oBAAI,IAAY;AAC5B,aAAW,CAAC,OAAO,IAAI,KAAK,MAAM,QAAQ,GAAG;AAC3C,UAAM,KAAK,OAAO,KAAK,MAAM,KAAK,UAAU,KAAK,OAAO,EAAE;AAC1D,QAAI,CAAC,GAAI,QAAO,KAAK,SAAS,KAAK,iBAAiB;AAAA,aAC3C,IAAI,IAAI,EAAE,EAAG,QAAO,KAAK,sBAAsB,EAAE,EAAE;AAAA,QACvD,KAAI,IAAI,EAAE;AACf,QAAI,CAAC,KAAK,QAAQ,CAAC,KAAK,YAAY,CAAC,KAAK,KAAM,UAAS,KAAK,SAAS,KAAK,mBAAmB;AAAA,EACjG;AACA,aAAW,CAAC,OAAO,IAAI,KAAK,MAAM,QAAQ,GAAG;AAC3C,UAAM,OAAO,OAAO,KAAK,UAAU,KAAK,YAAY,KAAK,QAAQ,KAAK,SAAS,EAAE;AACjF,UAAM,KAAK,OAAO,KAAK,UAAU,KAAK,YAAY,KAAK,MAAM,KAAK,OAAO,EAAE;AAC3E,QAAI,CAAC,QAAQ,CAAC,GAAI,QAAO,KAAK,SAAS,KAAK,kCAAkC;AAAA,SACzE;AACH,UAAI,CAAC,IAAI,IAAI,IAAI,EAAG,QAAO,KAAK,QAAQ,KAAK,8BAA8B,IAAI,EAAE;AACjF,UAAI,CAAC,IAAI,IAAI,EAAE,EAAG,QAAO,KAAK,QAAQ,KAAK,8BAA8B,EAAE,EAAE;AAAA,IAC/E;AAAA,EACF;AACA,SAAO,EAAE,OAAO,OAAO,WAAW,GAAG,QAAQ,UAAU,WAAW,MAAM,QAAQ,WAAW,MAAM,OAAO;AAC1G;AAEA,SAAS,UAAU,MAAe,OAAyB;AACzD,MAAI,MAAM,QAAQ,IAAI,KAAK,MAAM,QAAQ,KAAK,EAAG,QAAO,CAAC,GAAG,MAAM,GAAG,KAAK;AAC1E,MAAI,QAAQ,SAAS,OAAO,SAAS,YAAY,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,IAAI,KAAK,CAAC,MAAM,QAAQ,KAAK,GAAG;AAC3H,UAAM,MAAkB,EAAE,GAAI,KAAoB;AAClD,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAmB,EAAG,KAAI,GAAG,IAAI,OAAO,MAAM,UAAU,IAAI,GAAG,GAAG,KAAK,IAAI;AACrH,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,eAAe,QAAQ,QAAkC,MAAgB;AACvE,MAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,0CAA0C;AACvE,QAAM,UAAU,OAAO,MAAM,YAAY;AACzC,QAAM,YAAY,OAAO,MAAM,cAAc;AAC7C,MAAI,CAAC,WAAW,CAAC,UAAW,OAAM,IAAI,MAAM,6CAA6C;AACzF,MAAI;AACJ,MAAI,QAAS,SAAQ,MAAM,OAAO,SAAS,OAAO;AAAA,OAC7C;AACH,UAAMC,UAAS,MAAM,OAAO,WAAW,MAAM;AAC7C,UAAM,OAAO,MAAM,QAAQA,OAAM,IAAIA,UAAUA,SAAuB;AACtE,YAAQ,MAAM,QAAQ,IAAI,IAAI,KAAK,KAAK,SAAO,OAAQ,IAAmB,QAAS,IAAmB,SAAS,MAAM,SAAS,IAAI;AAClI,QAAI,CAAC,MAAO,OAAM,IAAI,MAAM,oBAAoB,SAAS,EAAE;AAAA,EAC7D;AACA,QAAM,OAAO,MAAM,QAAQ,KAAK,IAAI,MAAM,CAAC,IAAkB;AAC7D,QAAM,KAAK,OAAO,MAAM,MAAM,MAAM,WAAW,WAAW,EAAE;AAC5D,QAAM,QAAQ,KAAK,MAAM,OAAO,iBAAiB,EAAE,IAAI;AACvD,QAAM,SAAS,EAAE,OAAO,MAAM,MAAM;AACpC,QAAM,MAAM,OAAO,MAAM,OAAO;AAChC,MAAI,IAAK,OAAMC,WAAU,KAAK,KAAK;AACnC,SAAO;AACT;AAEA,eAAe,SAAS,QAAkCC,SAAgB,MAAgB;AACxF,MAAIA,YAAW,UAAW,QAAO,QAAQ,QAAQ,IAAI;AACrD,MAAIA,YAAW,YAAY;AACzB,UAAM,OAAO,OAAO,MAAM,cAAc,KAAK,OAAO,MAAM,eAAe,IAAI;AAC7E,UAAM,QAAQ,MAAMC,UAAS,IAAI;AACjC,WAAO,EAAE,GAAI,cAAc,KAAK,GAAI,KAAK;AAAA,EAC3C;AACA,MAAID,YAAW,WAAW;AACxB,UAAM,SAAS,MAAMC,UAAS,OAAO,MAAM,iBAAiB,IAAI,CAAE;AAClE,UAAM,QAAQ,MAAMA,UAAS,OAAO,MAAM,gBAAgB,IAAI,CAAE;AAChE,UAAM,SAAS,UAAU,OAAO,MAAM;AACtC,UAAM,aAAa,cAAc,MAAM;AACvC,QAAI,CAAC,WAAW,MAAO,OAAM,IAAI,MAAM,8BAA8B,WAAW,OAAO,KAAK,IAAI,CAAC,EAAE;AACnG,UAAMF,WAAU,OAAO,MAAM,gBAAgB,IAAI,GAAI,MAAM;AAC3D,WAAO,EAAE,GAAG,YAAY,OAAO,OAAO;AAAA,EACxC;AACA,MAAIC,YAAW,gBAAgB;AAC7B,UAAM,cAAc,MAAMC,UAAS,OAAO,MAAM,sBAAsB,IAAI,CAAE;AAC5E,QAAI,SAAkB;AACtB,eAAW,YAAYC,SAAQ,MAAM,iBAAiB,EAAG,UAAS,UAAU,QAAQ,MAAMD,UAAS,QAAQ,CAAC;AAC5G,UAAMF,WAAU,OAAO,MAAM,cAAc,IAAI,GAAI,MAAM;AACzD,WAAO,EAAE,QAAQ,OAAO,MAAM,YAAY,GAAG,GAAI,cAAc,MAAM,EAAG;AAAA,EAC1E;AACA,MAAI,CAAC,UAAU,UAAU,SAAS,EAAE,SAASC,OAAM,GAAG;AACpD,UAAM,QAAQ,MAAMC,UAAS,OAAO,MAAM,gBAAgB,IAAI,CAAE;AAChE,UAAM,aAAa,cAAc,KAAK;AACtC,QAAI,CAAC,WAAW,MAAO,OAAM,IAAI,MAAM,4BAA4B,WAAW,OAAO,KAAK,IAAI,CAAC,EAAE;AACjG,QAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,uDAAuD;AACpF,QAAID,YAAW,SAAU,QAAO,OAAO,YAAY,EAAE,MAAM,OAAO,MAAM,gBAAgB,IAAI,GAAG,MAAM,aAAa,MAAM,EAAE,eAAe,MAAM,EAAE,CAAC;AAClJ,UAAM,KAAK,OAAO,MAAM,cAAc,IAAI;AAC1C,WAAO,OAAO,eAAe,IAAI,OAAqBA,YAAW,SAAS;AAAA,EAC5E;AACA,QAAM,IAAI,MAAM,4BAA4BA,OAAM,EAAE;AACtD;AAEA,eAAe,aAAa,MAAgB;AAC1C,QAAM,QAAQ,MAAMC,UAAS,OAAO,MAAM,eAAe,IAAI,CAAE;AAC/D,QAAM,SAAmB,CAAC,GAAG,WAAqB,CAAC;AACnD,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO,KAAK,gCAAgC;AAAA,OACxG;AACH,UAAM,SAAS;AACf,QAAI,CAAC,OAAO,QAAQ,CAAC,OAAO,WAAY,QAAO,KAAK,uBAAuB;AAC3E,QAAI,CAAC,OAAO,UAAU,CAAC,OAAO,0BAA0B,CAAC,OAAO,IAAK,UAAS,KAAK,gCAAgC;AAAA,EACrH;AACA,SAAO,EAAE,OAAO,OAAO,WAAW,GAAG,QAAQ,SAAS;AACxD;AAEA,eAAsB,gBAAgB,SAA8BD,SAA4B,MAAgB;AAC9G,MAAI,CAACA,QAAQ,OAAM,IAAI,MAAM,kCAAkC;AAC/D,MAAIA,YAAW,YAAY;AAAE,UAAM,YAAYE,SAAQ,MAAM,aAAa,EAAE,CAAC,KAAK,KAAK,KAAK,WAAS,CAAC,WAAW,YAAY,WAAW,gBAAgB,UAAU,UAAU,SAAS,EAAE,SAAS,KAAK,CAAC,KAAK;AAAW,WAAO,SAAS,CAAC,YAAY,WAAW,cAAc,EAAE,SAAS,SAAS,IAAI,SAAY,UAAU,IAAI,aAAa,OAAO,IAAI,QAAW,WAAW,IAAI;AAAA,EAAG;AACnX,MAAI,CAAC,YAAY,WAAW,cAAc,EAAE,SAASF,OAAM,EAAG,QAAO,SAAS,QAAWA,SAAQ,IAAI;AACrG,MAAI,CAAC,WAAW,UAAU,UAAU,SAAS,EAAE,SAASA,OAAM,EAAG,QAAO,SAAS,UAAU,IAAI,aAAa,OAAO,IAAI,QAAWA,SAAQ,IAAI;AAC9I,MAAIA,YAAW,gBAAiB,QAAO,aAAa,IAAI;AACxD,MAAIA,YAAW,eAAeA,YAAW,SAAU,QAAO,sBAAsBA,SAAQ,IAAI;AAC5F,MAAI,CAAC,QAAS,OAAM,IAAI,MAAM,GAAGA,OAAM,mCAAmC;AAC1E,QAAM,SAAS,IAAI,aAAa,OAAO;AACvC,MAAIA,YAAW,oBAAoB;AACjC,UAAM,MAAME,SAAQ,MAAM,aAAa;AACvC,QAAI,CAAC,IAAI,OAAQ,OAAM,IAAI,MAAM,yBAAyB;AAC1D,QAAI,KAAK,MAAM,WAAW,EAAG,QAAO,EAAE,QAAQ,MAAM,WAAW,IAAI;AACnE,UAAM,UAAU,CAAC;AACjB,eAAW,MAAM,IAAK,SAAQ,KAAK,MAAM,OAAO,QAAQ,QAAQ,kCAAkC,EAAE,eAAe,OAAO,EAAE,GAAG,WAAW,OAAO,MAAM,OAAO,UAAU,CAAC,EAAE,CAAC,CAAC;AAC7K,WAAO,EAAE,WAAW,KAAK,QAAQ;AAAA,EACnC;AACA,MAAIF,YAAW,eAAe;AAC5B,UAAM,MAAME,SAAQ,MAAM,YAAY;AACtC,QAAI,CAAC,IAAI,OAAQ,OAAM,IAAI,MAAM,wBAAwB;AACzD,UAAM,UAAUA,SAAQ,MAAM,UAAU,EAAE,IAAI,WAAS;AAAE,YAAM,QAAQ,MAAM,QAAQ,GAAG;AAAG,aAAO,QAAQ,IAAI,EAAE,MAAM,OAAO,OAAO,GAAG,IAAI,EAAE,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,OAAO,MAAM,MAAM,QAAQ,CAAC,EAAE;AAAA,IAAG,CAAC;AAC5M,QAAI,KAAK,MAAM,WAAW,EAAG,QAAO,EAAE,QAAQ,MAAM,UAAU,KAAK,QAAQ;AAC3E,UAAM,UAAU,CAAC;AACjB,eAAW,MAAM,KAAK;AACpB,YAAM,QAAQ,MAAM,OAAO,SAAS,EAAE;AACtC,YAAM,OAAQ,MAAM,QAAQ,KAAK,IAAI,MAAM,CAAC,IAAI;AAChD,YAAM,QAAQ,MAAM,QAAQ,MAAM,KAAK,IAAI,KAAK,QAAwB,CAAC;AACzE,YAAM,UAAU,MAAM,IAAI,WAAS,EAAE,GAAG,MAAM,SAAS,CAAC,GAAI,MAAM,QAAQ,KAAK,OAAO,IAAI,KAAK,UAAU,CAAC,GAAI,GAAG,OAAO,EAAE,EAAE;AAC5H,cAAQ,KAAK,MAAM,OAAO,YAAY,EAAE,GAAG,MAAM,SAAS,OAAO,EAAE,GAAG,OAAO,QAAQ,CAAC,CAAC;AAAA,IACzF;AACA,WAAO,EAAE,UAAU,KAAK,QAAQ;AAAA,EAClC;AACA,QAAM,IAAI,MAAM,iCAAiCF,OAAM,EAAE;AAC3D;AAEA,eAAe,sBAAsBA,SAAgB,MAAgB;AACnE,MAAIA,YAAW,aAAa;AAC1B,UAAM,YAAY,OAAO,MAAM,aAAa,KAAK,KAAK,KAAK,CAAAG,WAAS,CAAC,WAAW,sBAAsB,iBAAiB,mBAAmB,qBAAqB,sBAAsB,wBAAwB,2BAA2B,mCAAmC,0BAA0B,gBAAgB,kBAAkB,mBAAmB,mBAAmB,uBAAuB,EAAE,SAASA,MAAK,CAAC,KAAK;AAC1Z,QAAI,cAAc,qBAAqB,cAAc,yBAAyB;AAAE,YAAM,OAAO,OAAO,MAAM,mBAAmB,IAAI;AAAI,YAAM,WAAW,MAAMF,UAAqB,IAAI,EAAE,MAAM,OAAO,CAAC,EAAgB;AAAG,YAAM,KAAK,OAAO,MAAM,cAAc,oBAAoB,eAAe,cAAc,IAAI;AAAI,YAAM,SAAS,OAAO,MAAM,YAAY,IAAI;AAAI,YAAM,MAAM,cAAc,oBAAoB,WAAW;AAAW,YAAM,UAAU,MAAM,QAAQ,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,IAAoB,CAAC;AAAG,YAAM,WAAW,QAAQ,KAAK,CAAAG,WAAS,OAAOA,OAAM,MAAMA,OAAM,WAAWA,OAAM,OAAO,MAAM,EAAE;AAAG,UAAI,SAAU,UAAS,SAAS;AAAA,UAAa,SAAQ,KAAK,EAAE,IAAI,QAAQ,MAAM,OAAO,MAAM,QAAQ,GAAG,WAAWF,SAAQ,MAAM,YAAY,EAAE,CAAC;AAAG,eAAS,GAAG,IAAI;AAAS,YAAMH,WAAU,MAAM,QAAQ;AAAG,aAAO,EAAE,WAAW,IAAI,QAAQ,KAAK;AAAA,IAAG;AACp1B,UAAMM,SAAQ,OAAO,MAAM,SAAS,KAAK,OAAO,MAAM,aAAa,KAAK,OAAO,MAAM,eAAe,KAAK,OAAO,MAAM,cAAc;AAAG,QAAI,CAACA,OAAO,OAAM,IAAI,MAAM,kDAAkD;AAAG,UAAM,QAAQ,MAAMJ,UAASI,MAAK;AAC1P,QAAI,CAAC,YAAY,iBAAiB,2BAA2B,SAAS,0BAA0B,iCAAiC,EAAE,SAAS,SAAS,EAAG,QAAO,EAAE,WAAW,OAAO,MAAM,YAAY,cAAc,KAAK,GAAG,MAAMA,OAAM;AACvO,QAAI,cAAc,aAAa,cAAc,wBAAwB;AAAE,YAAM,QAAQ,WAAW,KAAK,GAAG,QAAQ,WAAW,KAAK;AAAG,YAAM,QAAQ,CAAC,gBAAgB,GAAG,MAAM,IAAI,UAAQ,KAAK,OAAO,KAAK,MAAM,KAAK,MAAM,CAAC,IAAI,OAAO,KAAK,QAAQ,KAAK,QAAQ,MAAM,CAAC,GAAG,GAAG,GAAG,MAAM,IAAI,UAAQ,KAAK,OAAO,KAAK,UAAU,KAAK,IAAI,CAAC,QAAQ,OAAO,KAAK,UAAU,KAAK,EAAE,CAAC,EAAE,CAAC;AAAG,YAAMC,OAAM,OAAO,MAAM,YAAY;AAAG,UAAIA,KAAK,OAAM,cAAcA,MAAK,MAAM,KAAK,IAAI,CAAC;AAAG,aAAO,EAAE,SAAS,MAAM,KAAK,IAAI,GAAG,QAAQA,KAAI;AAAA,IAAG;AAClgB,WAAO,EAAE,WAAW,OAAAD,QAAO,WAAW,WAAW,KAAK,EAAE,QAAQ,WAAW,WAAW,KAAK,EAAE,QAAQ,MAAM;AAAA,EAC7G;AACA,QAAM,QAAQ,OAAO,MAAM,cAAc,KAAK,OAAO,MAAM,SAAS;AAAG,QAAM,QAAQ,QAAQ,MAAMJ,UAAS,KAAK,IAAI,CAAC,EAAE,IAAI,OAAO,MAAM,qBAAqB,KAAK,mBAAmB,SAAS,SAAS,CAAC;AAAG,QAAM,OAAO,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAAG,QAAM,SAAS,EAAE,OAAO,MAAM,UAAU,KAAK,MAAM,WAAW,GAAG,SAAS,CAAC,EAAE;AAAG,QAAM,MAAM,OAAO,MAAM,YAAY;AAAG,MAAI,IAAK,OAAMF,WAAU,KAAK,MAAM;AAAG,QAAM,OAAO,OAAO,MAAM,YAAY;AAAG,MAAI,KAAM,OAAM,UAAU,MAAM,qBAAqB,QAAQ,WAAW,SAAS,MAAM,CAAC,CAAC,QAAQ;AAAG,SAAO;AACtjB;AAEA,eAAe,cAAc,MAAc,SAAiB;AAAE,QAAM,aAAa,IAAI;AAAG,QAAM,EAAE,WAAAQ,WAAU,IAAI,MAAM,OAAO,aAAkB;AAAG,QAAMA,WAAU,MAAM,GAAG,OAAO;AAAA,GAAM,MAAM;AAAG;;;AC5K/L,SAAS,QAAAC,aAAY;AACrB,OAAOC,cAAa;AAQpB,eAAe,UAAU,MAAc;AACrC,MAAI,KAAK,SAAS,OAAO,EAAG,QAAO,OAAO,MAAMC,UAAS,IAAI,CAAC;AAC9D,QAAM,WAAW,IAAIC,SAAQ,SAAS;AAAG,QAAM,SAAS,KAAK,SAAS,IAAI;AAAG,QAAM,QAAQ,SAAS,WAAW,CAAC;AAAG,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,iCAAiC;AAAG,QAAM,UAAW,MAAM,OAAO,CAAC,EAAE,OAAqB,MAAM,CAAC,EAAE,IAAI,OAAK,OAAO,KAAK,EAAE,CAAC;AAAG,QAAM,OAAqB,CAAC;AAAG,QAAM,QAAQ,CAAC,KAAK,WAAW;AAAE,QAAI,WAAW,EAAG;AAAQ,UAAM,SAAU,IAAI,OAAqB,MAAM,CAAC,GAAG,OAAmB,CAAC;AAAG,YAAQ,QAAQ,CAAC,QAAQ,UAAU;AAAE,UAAI,OAAQ,MAAK,MAAM,IAAI,OAAO,KAAK,KAAK;AAAA,IAAI,CAAC;AAAG,SAAK,KAAK,IAAI;AAAA,EAAG,CAAC;AAAG,SAAO;AACxiB;AAEA,eAAe,YAAY,MAAgB;AACzC,QAAM,QAAQ,OAAO,MAAM,cAAc,IAAI,MAAM,UAAU,OAAO,MAAM,cAAc,CAAE,IAAI,CAAC;AAAG,QAAM,SAAS,OAAO,MAAM,UAAU,KAAKC,MAAK,WAAW,cAAc,GAAG,SAAS,KAAK,IAAI,CAAC,OAAO;AAAG,QAAM,aAAa,MAAM;AAAG,QAAM,WAAW,IAAID,SAAQ,SAAS;AAAG,QAAM,QAAQ,SAAS,aAAa,OAAO;AAAG,QAAM,UAAU,MAAM,SAAS,CAAC,GAAG,IAAI,IAAI,MAAM,QAAQ,SAAO,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,iBAAiB;AAAG,QAAM,OAAO,OAAO;AAAG,QAAM,QAAQ,SAAO,MAAM,OAAO,QAAQ,IAAI,YAAU,IAAI,MAAM,KAAK,EAAE,CAAC,CAAC;AAAG,QAAM,SAAS,KAAK,UAAU,MAAM;AAAG,SAAO,EAAE,QAAQ,OAAO,MAAM,QAAQ,MAAM,OAAO,MAAM,QAAQ,EAAE;AACtoB;AAEA,eAAe,OAAO,QAAsB,MAAgB;AAC1D,QAAM,OAAO,OAAO,MAAM,UAAU,IAAI;AAAI,QAAM,SAAS,MAAM,OAAO,QAAQ,QAAQ,6BAA6B,MAAM,OAAO,UAAU,CAAC,kBAAkB,EAAE,MAAM,MAAM,OAAO,MAAM,UAAU,IAAI,GAAG,GAAI,OAAO,MAAM,YAAY,IAAI,EAAE,SAAS,OAAO,OAAO,MAAM,YAAY,CAAC,EAAE,IAAI,CAAC,GAAI,GAAI,OAAO,MAAM,gBAAgB,IAAI,EAAE,aAAa,OAAO,OAAO,MAAM,gBAAgB,CAAC,EAAE,IAAI,CAAC,EAAG,CAAC;AAAG,SAAO;AACnZ;AAEA,eAAsB,eAAe,SAA8BE,SAA4B,MAAgB;AAC7G,MAAI,CAACA,QAAQ,OAAM,IAAI,MAAM,iCAAiC;AAAG,MAAIA,YAAW,eAAgB,QAAO,YAAY,IAAI;AAAG,MAAI,CAAC,QAAS,OAAM,IAAI,MAAM,GAAGA,OAAM,mCAAmC;AAAG,QAAM,SAAS,IAAI,aAAa,OAAO;AAAG,MAAIA,YAAW,SAAU,QAAO,OAAO,QAAQ,IAAI;AAAG,MAAIA,YAAW,YAAa,QAAO,OAAO,QAAQ,QAAQ,6BAA6B,MAAM,OAAO,UAAU,CAAC,iBAAiB,EAAE,MAAM,UAAU,MAAM,UAAU,CAAC,GAAG,UAAU,UAAU,MAAM,eAAe,EAAE,GAAG,UAAU,OAAO,MAAM,QAAQ,EAAE,CAAC;AAAG,QAAM,IAAI,MAAM,gCAAgCA,OAAM,EAAE;AAC1lB;;;ACxBA,SAAS,QAAAC,aAAY;AACrB,OAAOC,cAAa;AAOpB,IAAM,gBAAgB,CAAC,0BAA0B,oBAAoB,iBAAiB,sBAAsB,kBAAkB,mBAAmB,gBAAgB,sBAAsB,gBAAgB,kBAAkB,sBAAsB,iBAAiB,wBAAwB,mBAAmB,iBAAiB,qBAAqB;AAEjV,eAAe,SAAS,MAAqC;AAC3D,MAAI,KAAK,SAAS,OAAO,GAAG;AAAE,UAAM,QAAQ,MAAMC,UAAkB,IAAI;AAAG,WAAO,OAAO,KAAK;AAAA,EAAG;AACjG,QAAM,WAAW,IAAIC,SAAQ,SAAS;AAAG,QAAM,SAAS,KAAK,SAAS,IAAI;AAAG,QAAM,QAAQ,SAAS,WAAW,CAAC;AAAG,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,iCAAiC;AAAG,QAAM,UAAW,MAAM,OAAO,CAAC,EAAE,OAAqB,MAAM,CAAC,EAAE,IAAI,OAAK,OAAO,KAAK,EAAE,CAAC;AAAG,QAAM,OAAqB,CAAC;AAAG,QAAM,QAAQ,CAAC,KAAK,WAAW;AAAE,QAAI,WAAW,EAAG;AAAQ,UAAM,SAAU,IAAI,OAAqB,MAAM,CAAC,GAAG,OAAmB,CAAC;AAAG,YAAQ,QAAQ,CAAC,QAAQ,UAAU;AAAE,UAAI,OAAQ,MAAK,MAAM,IAAI,OAAO,KAAK,KAAK;AAAA,IAAI,CAAC;AAAG,SAAK,KAAK,IAAI;AAAA,EAAG,CAAC;AAAG,SAAO;AACxiB;AAEA,eAAe,UAAU,MAAc,MAAoB;AACzD,MAAI,KAAK,SAAS,OAAO,GAAG;AAAE,UAAMC,WAAU,MAAM,IAAI;AAAG;AAAA,EAAQ;AACnE,QAAM,WAAW,IAAID,SAAQ,SAAS;AAAG,QAAM,QAAQ,SAAS,aAAa,SAAS;AAAG,QAAM,OAAO,CAAC,GAAG,IAAI,IAAI,KAAK,QAAQ,SAAO,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC;AAAG,QAAM,OAAO,IAAI;AAAG,OAAK,QAAQ,SAAO,MAAM,OAAO,KAAK,IAAI,SAAO,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC;AAAG,QAAM,UAAUE,MAAK,MAAM,IAAI,CAAC;AAAG,QAAM,SAAS,KAAK,UAAU,IAAI;AAC1T;AAEA,SAAS,SAAS,MAAc;AAAE,QAAM,QAAQ,KAAK,YAAY;AAAG,SAAO,cAAc,KAAK,YAAU,MAAM,SAAS,OAAO,YAAY,CAAC,CAAC,MAAM,MAAM,SAAS,OAAO,IAAI,kBAAkB,MAAM,SAAS,OAAO,IAAI,iBAAiB;AAAe;AAExP,eAAe,cAAc,MAAgB,QAA4B;AACvE,QAAM,QAAQ,OAAO,MAAM,QAAQ,KAAK,OAAO,MAAM,SAAS;AAAG,QAAM,UAAU,KAAK,MAAM,YAAY;AAAG,MAAI,CAAC,SAAS,CAAC,QAAS,OAAM,IAAI,MAAM,0CAA0C;AAAG,QAAM,OAAO,QAAQ,MAAM,SAAS,KAAK,IAAI,CAAC;AAC9O,QAAM,UAAU,oBAAI,IAA0B;AAAG,aAAW,OAAO,MAAM;AAAE,UAAM,OAAO,OAAO,OAAO,GAAG,EAAE,KAAK,GAAG;AAAG,UAAM,SAAS,SAAS,IAAI;AAAG,YAAQ,IAAI,QAAQ,CAAC,GAAI,QAAQ,IAAI,MAAM,KAAK,CAAC,GAAI,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;AAAA,EAAG;AAChO,QAAM,UAAU,CAAC,GAAG,QAAQ,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,EAAE,MAAM,YAAY,2CAA2C,IAAI,KAAK,OAAO,MAAM,QAAQ,KAAK,KAAK,SAAS,MAAM,SAAS,KAAK,SAAS,GAAG,SAAS,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,SAAS,aAAa,EAAE;AAAG,QAAM,QAAQ,OAAO,MAAM,UAAU,KAAK,KAAK,IAAI,EAAE,SAAS;AAAG,QAAM,SAAS,EAAE,MAAM,EAAE,QAAQ,OAAO,OAAO,KAAK,QAAQ,YAAY,KAAK,QAAQ,MAAM,UAAU,aAAa,cAAc,OAAO,GAAG,SAAS,aAAa,QAAQ,OAAO,UAAQ,KAAK,MAAM,EAAE;AACnhB,QAAM,MAAM,OAAO,MAAM,WAAW,KAAKA,MAAK,WAAW,MAAM,GAAG,WAAW,KAAK,OAAO;AAAG,QAAMD,WAAU,KAAK,MAAM;AAAG,QAAMA,WAAUC,MAAK,UAAU,MAAM,GAAG,eAAe,GAAG,EAAE,QAAQ,cAAc,QAAQ,OAAO,cAAc,KAAK,aAAY,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC;AAAG,SAAO,EAAE,GAAG,OAAO,MAAM,aAAa,IAAI;AACnU;AAEA,eAAe,KAAK,QAA4B,MAAgB;AAC9D,QAAM,OAAOA,MAAK,UAAU,MAAM,GAAG,eAAe;AAAG,MAAI,UAAsB,CAAC;AAAG,MAAI;AAAE,cAAU,MAAMH,UAAqB,IAAI;AAAA,EAAG,QAAQ;AAAA,EAAyB;AACxK,MAAI,KAAK,MAAM,QAAQ,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE,OAAQ,WAAU,EAAE,QAAQ,eAAe,QAAQ,OAAO,MAAM,UAAU,GAAG,WAAW,OAAO,MAAM,cAAc,GAAG,cAAc,OAAO,MAAM,iBAAiB,GAAG,YAAW,oBAAI,KAAK,GAAE,YAAY,EAAE;AAC3P,QAAM,SAAS,OAAO,MAAM,UAAU;AAAG,MAAI,OAAQ,SAAQ,SAAS;AAAQ,QAAM,cAAwB,CAAC;AAAG,WAAS,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;AAAE,QAAI,KAAK,KAAK,MAAM,WAAW,KAAK,QAAQ,CAAC,EAAG,aAAY,KAAK,KAAK,EAAE,KAAK,CAAC;AAAA,aAAY,KAAK,KAAK,EAAE,WAAW,QAAQ,EAAG,aAAY,KAAK,KAAK,KAAK,EAAE,MAAM,CAAC,CAAC;AAAA,EAAG;AAAE,aAAW,cAAc,aAAa;AAAE,UAAM,CAAC,KAAK,GAAG,KAAK,IAAI,WAAW,MAAM,GAAG;AAAG,QAAI,IAAK,SAAQ,GAAG,IAAI,MAAM,KAAK,GAAG;AAAA,EAAG;AAC7c,QAAME,WAAU,MAAM,OAAO;AAAG,SAAO;AACzC;AAEA,eAAe,SAAS,QAAsB,MAAgB,QAA4B;AACxF,QAAM,QAAQ,OAAO,MAAM,SAAS,KAAK,OAAO,MAAM,eAAe,IAAI;AAAI,QAAM,OAAO,MAAM,SAAS,KAAK;AAAG,QAAM,SAAS,OAAO,MAAM,UAAU,KAAKC,MAAK,WAAW,MAAM,GAAG,gBAAgB,KAAK,IAAI,CAAC,OAAO;AAAG,QAAM,UAAU,KAAK,IAAI,GAAG,KAAK,IAAI,UAAU,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC;AAAG,QAAM,UAAwB,CAAC;AAAG,MAAI,SAAS;AACpV,iBAAe,SAAS;AAAE,WAAO,MAAM;AAAE,YAAM,QAAQ;AAAU,UAAI,SAAS,KAAK,OAAQ;AAAQ,YAAM,MAAM,KAAK,KAAK;AAAG,YAAM,UAAU,OAAO,IAAI,WAAW,IAAI,YAAY,IAAI,SAAS,OAAO,OAAO,GAAG,EAAE,KAAK,GAAG,CAAC;AAAG,UAAI;AAAE,cAAM,WAAW,MAAM,OAAO,KAAK,EAAE,SAAS,OAAO,OAAO,MAAM,UAAU,GAAG,YAAY,OAAO,MAAM,eAAe,KAAK,aAAa,QAAQ,IAAI,OAAO,CAAC;AAAG,gBAAQ,KAAK,IAAI,EAAE,GAAG,KAAK,OAAO,IAAI,MAAM,SAAS,SAAS;AAAA,MAAG,SAAS,OAAO;AAAE,gBAAQ,KAAK,IAAI,EAAE,GAAG,KAAK,OAAO,IAAI,OAAO,SAAS,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE;AAAA,MAAG;AAAA,IAAE;AAAA,EAAE;AACllB,QAAM,QAAQ,IAAI,MAAM,KAAK,EAAE,QAAQ,QAAQ,GAAG,MAAM,OAAO,CAAC,CAAC;AAAG,QAAMD,WAAU,QAAQ,EAAE,MAAM,EAAE,OAAO,KAAK,QAAQ,SAAS,QAAQ,cAAa,oBAAI,KAAK,GAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;AAAG,MAAI,KAAK,MAAM,UAAU,EAAG,SAAQ,IAAI,aAAa,QAAQ,OAAO,SAAO,IAAI,EAAE,EAAE,MAAM,IAAI,QAAQ,MAAM,QAAQ;AAAG,SAAO,EAAE,QAAQ,OAAO,QAAQ,QAAQ,WAAW,QAAQ,OAAO,SAAO,IAAI,EAAE,EAAE,QAAQ,QAAQ,QAAQ,OAAO,SAAO,CAAC,IAAI,EAAE,EAAE,OAAO;AAC/b;AAEA,eAAe,aAAa,QAAsB,MAAgB,QAA4B;AAC5F,QAAME,SAAQ,MAAMJ,UAAqBG,MAAK,UAAU,MAAM,GAAG,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,EAAgB;AAAG,QAAM,cAAc,OAAO,MAAM,WAAW,MAAM,OAAOC,OAAM,iBAAiB,WAAWA,OAAM,eAAe;AAAY,MAAI,CAAC,YAAa,OAAM,IAAI,MAAM,qCAAqC;AAAG,QAAM,SAAS,MAAMJ,UAAqB,WAAW;AAAG,QAAM,UAAU,MAAM,QAAQ,OAAO,OAAO,IAAI,OAAO,UAA0B,CAAC;AAAG,MAAI,KAAK,MAAM,WAAW,EAAG,QAAO,EAAE,QAAQ,MAAM,SAAS,QAAQ,IAAI,UAAQ,KAAK,IAAI,EAAE;AAAG,QAAM,UAAU,CAAC;AAAG,aAAW,UAAU,QAAQ,OAAO,UAAQ,OAAO,KAAK,SAAS,CAAC,IAAI,CAAC,EAAG,SAAQ,KAAK,MAAM,OAAO,YAAY,EAAE,MAAM,GAAG,OAAO,OAAO,IAAI,CAAC,IAAI,WAAW,QAAQ,QAAQ,UAAU,IAAI,MAAM,aAAa,MAAM,EAAE,QAAQ,OAAO,KAAK,EAAE,CAAC,CAAC;AAAG,SAAO,EAAE,SAAS,OAAO,QAAQ,OAAO;AACr1B;AAEA,eAAe,aAAa,MAAgB,QAA4B;AACtE,QAAM,WAAW,MAAMA,UAAqBG,MAAK,UAAU,MAAM,GAAG,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,EAAgB;AAAG,QAAM,cAAc,OAAO,MAAM,WAAW,KAAK,OAAO,MAAM,SAAS,MAAM,OAAO,SAAS,iBAAiB,WAAW,SAAS,eAAe;AAAY,MAAI,CAAC,YAAa,OAAM,IAAI,MAAM,sDAAsD;AAAG,QAAM,QAAQ,MAAMH,UAAqB,WAAW;AAAG,QAAM,OAAO,OAAO,MAAM,WAAW,MAAM,SAAS,KAAK;AAAG,QAAM,SAAS,OAAO,MAAM,QAAQ,KAAK,OAAO,MAAM,UAAU,KAAKG,MAAK,WAAW,MAAM,GAAG,GAAG,MAAM,cAAc;AAAG,QAAM,OAAO,aAAa,KAAK,MAAM,OAAO,KAAK,IAAI,CAAC,KAAK,UAAU,yBAAyB,QAAQ,CAAC,KAAK,WAAW,IAAI,UAAU,IAAI,YAAY,IAAI,WAAW,MAAM,CAAC,aAAa,WAAW,KAAK,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC;AAAI,QAAM,UAAU,QAAQ,OAAO,MAAM,SAAS,KAAK,GAAG,MAAM,WAAW,IAAI;AAAG,QAAM,KAAK,OAAO,MAAM,MAAM;AAAG,MAAI,GAAI,OAAM,OAAO,aAAkB,EAAE,KAAK,CAAAE,QAAMA,IAAG,UAAU,IAAI,KAAK,MAAM;AAAA;AAAA,SAAqB,KAAK,MAAM;AAAA,GAAM,MAAM,CAAC;AAAG,SAAO,EAAE,QAAQ,OAAO,KAAK,OAAO;AAC3mC;AAEA,eAAe,SAAS,MAAgB,QAA4B;AAAE,QAAM,WAAW,MAAML,UAAqBG,MAAK,UAAU,MAAM,GAAG,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,EAAgB;AAAG,QAAM,QAAQ,OAAO,MAAM,WAAW,KAAK,OAAO,MAAM,SAAS,MAAM,OAAO,SAAS,iBAAiB,WAAW,SAAS,eAAe;AAAY,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,yDAAyD;AAAG,QAAM,QAAQ,MAAMH,UAAkB,KAAK;AAAG,QAAM,OAAO,OAAO,KAAK;AAAG,QAAM,SAAS,OAAO,MAAM,UAAU,KAAKG,MAAK,WAAW,MAAM,GAAG,GAAG,MAAM,eAAe;AAAG,QAAM,UAAU,QAAQ,IAAI;AAAG,SAAO,EAAE,QAAQ,OAAO,KAAK,OAAO;AAAG;AAE3pB,eAAe,cAAc,QAAsB,MAAgB;AAAE,QAAM,SAAS,OAAO,MAAM,YAAY,IAAI;AAAI,QAAM,SAAS,MAAM,OAAO,gBAAgB,EAAE,WAAW,GAAG,UAAU,UAAU,MAAM,uBAAuB,EAAE,GAAG,OAAO,MAAM,CAAC;AAAG,QAAM,OAAO,OAAO,MAAM,EAAE,MAAM,GAAG,UAAU,MAAM,WAAW,GAAG,CAAC;AAAG,QAAMD,WAAU,QAAQ,KAAK,IAAI,CAAC,KAAK,WAAW,EAAE,IAAI,IAAI,UAAU,IAAI,MAAM,OAAO,KAAK,GAAG,SAAS,IAAI,WAAW,IAAI,eAAe,IAAI,UAAU,KAAK,MAAM,iBAAiB,IAAI,MAAM,OAAU,EAAE,CAAC;AAAG,SAAO,EAAE,QAAQ,OAAO,KAAK,OAAO;AAAG;AAEpjB,eAAe,gBAAgB,QAAsB,MAAgB;AAAE,QAAM,MAAM,KAAK,QAAQ,CAAC,OAAO,UAAU,UAAU,eAAe,CAAC,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,OAAO;AAAG,QAAM,UAAU,CAAC;AAAG,aAAW,MAAM,IAAK,SAAQ,KAAK,EAAE,SAAS,IAAI,OAAO,MAAM,OAAO,iBAAiB,EAAG,EAAE,CAAC;AAAG,SAAO;AAAS;AAExT,eAAsB,YAAY,SAA8BI,SAA4B,MAAgB;AAAE,SAAO,UAAU,SAAS,YAAYA,SAAQ,IAAI;AAAG;AACnK,eAAsB,OAAO,SAA8BA,SAA4B,MAAgB;AAAE,SAAO,UAAU,SAAS,OAAOA,SAAQ,IAAI;AAAG;AAEzJ,eAAe,UAAU,SAA8B,QAA4BA,SAA4B,MAAgB;AAC7H,MAAI,CAACA,QAAQ,OAAM,IAAI,MAAM,GAAG,MAAM,qBAAqB;AAC3D,MAAIA,YAAW,WAAY,QAAO,cAAc,MAAM,MAAM;AAC5D,MAAIA,YAAW,OAAQ,QAAO,KAAK,QAAQ,IAAI;AAC/C,MAAIA,YAAW,YAAYA,YAAW,YAAYA,YAAW,mBAAmBA,YAAW,SAAU,QAAO,aAAa,MAAM,MAAM;AACrI,MAAIA,YAAW,WAAWA,YAAW,YAAa,QAAO,SAAS,MAAM,MAAM;AAC9E,MAAI,CAAC,QAAS,OAAM,IAAI,MAAM,GAAG,MAAM,IAAIA,OAAM,mCAAmC;AACpF,QAAM,SAAS,IAAI,aAAa,OAAO;AACvC,MAAIA,YAAW,gBAAgBA,YAAW,OAAQ,QAAO,SAAS,QAAQ,MAAM,MAAM;AACtF,MAAIA,YAAW,gBAAiB,QAAO,aAAa,QAAQ,MAAM,MAAM;AACxE,MAAIA,YAAW,iBAAkB,QAAO,cAAc,QAAQ,IAAI;AAClE,MAAIA,YAAW,mBAAoB,QAAO,gBAAgB,QAAQ,IAAI;AACtE,MAAIA,YAAW,iBAAkB,QAAO,KAAK,QAAQ,IAAI;AACzD,QAAM,IAAI,MAAM,WAAW,MAAM,YAAYA,OAAM,EAAE;AACvD;;;ACzEA,SAAS,QAAAC,aAAY;AACrB,OAAOC,cAAa;AAOpB,IAAM,QAAQ,CAAC,UAAmB,OAAO,SAAS,EAAE,EAAE,QAAQ,+BAA+B,GAAG,EAAE,QAAQ,6BAA6B,GAAG,EAAE,QAAQ,YAAY,GAAG,EAAE,QAAQ,QAAQ,GAAG,EAAE,KAAK;AAC/L,IAAM,WAAW,CAAC,MAAc,SAAiB;AAAE,MAAI;AAAE,WAAO,IAAI,IAAI,MAAM,IAAI,EAAE,SAAS;AAAA,EAAG,QAAQ;AAAE,WAAO;AAAA,EAAW;AAAE;AAE9H,eAAe,MAAM,MAAgB;AACnC,QAAM,MAAM,OAAO,MAAM,SAAS,IAAI;AACtC,QAAM,WAAW,UAAU,MAAM,eAAe,EAAE,GAAG,WAAW,UAAU,MAAM,eAAe,CAAC,GAAG,UAAU,UAAU,MAAM,aAAa,EAAE,IAAI;AAChJ,QAAM,SAAS,IAAI,IAAI,GAAG,EAAE,QAAQ,QAA+C,CAAC,EAAE,KAAK,OAAO,EAAE,CAAC,GAAG,OAAO,oBAAI,IAAY,GAAG,QAAsB,CAAC;AACzJ,SAAO,MAAM,UAAU,MAAM,SAAS,UAAU;AAC9C,UAAM,UAAU,MAAM,MAAM;AAAI,QAAI,KAAK,IAAI,QAAQ,GAAG,KAAK,QAAQ,QAAQ,SAAU;AAAU,SAAK,IAAI,QAAQ,GAAG;AACrH,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,QAAQ,KAAK,EAAE,QAAQ,YAAY,QAAQ,OAAO,GAAG,SAAS,EAAE,QAAQ,kCAAkC,EAAE,CAAC;AAC1I,UAAI,CAAC,SAAS,GAAI;AAClB,YAAM,OAAO,MAAM,SAAS,KAAK;AAAG,YAAM,QAAQ,KAAK,MAAM,kCAAkC,IAAI,CAAC,KAAK;AACzG,YAAM,OAAO,MAAM,IAAI;AAAG,YAAM,KAAK,EAAE,KAAK,QAAQ,KAAK,OAAO,QAAQ,OAAO,OAAO,MAAM,KAAK,GAAG,MAAM,KAAK,MAAM,GAAG,GAAM,GAAG,QAAQ,SAAS,OAAO,CAAC;AAC1J,UAAI,QAAQ,QAAQ,SAAU,YAAW,SAAS,KAAK,SAAS,+BAA+B,GAAG;AAChG,cAAM,OAAO,SAAS,MAAM,CAAC,GAAG,QAAQ,GAAG;AAAG,YAAI,QAAQ,KAAK,WAAW,MAAM,KAAK,CAAC,KAAK,IAAI,IAAI,EAAG,OAAM,KAAK,EAAE,KAAK,MAAM,OAAO,QAAQ,QAAQ,EAAE,CAAC;AAAA,MAC1J;AAAA,IACF,SAAS,OAAO;AAAE,YAAM,KAAK,EAAE,KAAK,QAAQ,KAAK,OAAO,QAAQ,OAAO,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,CAAC;AAAA,IAAG;AAAA,EAC3I;AACA,QAAM,SAAS,EAAE,KAAK,MAAM,OAAO,MAAM,QAAQ,KAAK,QAAQ,OAAO,YAAW,oBAAI,KAAK,GAAE,YAAY,GAAG,OAAO,MAAM,OAAO;AAC9H,QAAM,SAAS,OAAO,MAAM,UAAU,KAAKC,MAAK,WAAW,YAAY,GAAG,mBAAmB;AAAG,QAAMC,WAAU,QAAQ,MAAM;AAC9H,SAAO,EAAE,GAAG,QAAQ,OAAO;AAC7B;AAEA,eAAe,cAAc,MAAgB;AAC3C,QAAM,SAAS,MAAMC,UAAqB,OAAO,MAAM,kBAAkB,IAAI,CAAE;AAAG,QAAM,OAAO,OAAO,OAAO,SAAS,MAAM;AAC5H,QAAM,SAAS,oBAAI,IAA0B;AAC7C,aAAWC,SAAQ,MAAM;AAAE,UAAM,QAAQ,OAAOA,MAAK,SAASA,MAAK,OAAO,UAAU;AAAG,UAAM,MAAM,MAAM,MAAM,UAAU,EAAE,CAAC,EAAE,KAAK,KAAK;AAAW,WAAO,IAAI,KAAK,CAAC,GAAI,OAAO,IAAI,GAAG,KAAK,CAAC,GAAIA,KAAI,CAAC;AAAA,EAAG;AACxM,QAAM,OAAO,CAAC,GAAG,OAAO,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,EAAE,MAAM,UAAU,MAAM,MAAM,GAAG,GAAG,EAAE,IAAI,CAAAA,WAAS,EAAE,MAAM,OAAOA,MAAK,SAASA,MAAK,GAAG,GAAG,WAAWA,MAAK,IAAI,EAAE,EAAE,EAAE;AAChL,QAAM,SAAS,EAAE,QAAQ,OAAO,MAAM,gBAAgB,GAAG,cAAa,oBAAI,KAAK,GAAE,YAAY,GAAG,MAAM,WAAW,MAAM;AACvH,QAAM,SAAS,OAAO,MAAM,UAAU,KAAKH,MAAK,WAAW,YAAY,GAAG,qBAAqB;AAAG,QAAMC,WAAU,QAAQ,MAAM;AAChI,MAAI,KAAK,MAAM,wBAAwB,EAAG,OAAMA,WAAUD,MAAK,UAAU,YAAY,GAAG,qBAAqB,GAAG,EAAE,GAAG,QAAQ,WAAW,KAAK,CAAC;AAC9I,SAAO,EAAE,QAAQ,aAAa,KAAK,QAAQ,OAAO,KAAK,QAAQ,KAAK;AACtE;AAEA,eAAe,kBAAkB,QAAsB,MAAgB;AACrE,QAAM,OAAO,OAAO,MAAM,aAAa,KAAKA,MAAK,UAAU,YAAY,GAAG,qBAAqB;AAAG,QAAM,QAAQ,MAAME,UAAqB,IAAI;AAC/I,QAAM,OAAO,MAAM,QAAQ,MAAM,IAAI,IAAI,MAAM,OAAuB,MAAM,QAAQ,KAAK,IAAI,QAAmC,CAAC;AACjI,MAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,mCAAmC;AACrE,QAAM,SAAS,KAAK,MAAM,WAAW,GAAG,UAAqB,CAAC;AAC9D,iBAAe,MAAM,OAAqB,WAAW,GAAG,QAAQ,GAAG;AACjE,QAAI,QAAQ,UAAU,MAAM,eAAe,CAAC,EAAG,OAAM,IAAI,MAAM,kCAAkC;AACjG,eAAW,QAAQ,OAAO;AACxB,YAAM,OAAO,OAAO,KAAK,QAAQ,EAAE,EAAE,KAAK;AAAG,UAAI,CAAC,KAAM;AACxD,YAAM,SAAS,SAAS,EAAE,MAAM,UAAU,QAAQ,KAAK,IAAI,MAAM,OAAO,aAAa,MAAM,QAAQ;AAAG,cAAQ,KAAK,MAAM;AACzH,YAAM,KAAK,OAAQ,QAAuB,MAAO,QAAuB,eAAe,CAAC;AAAG,YAAM,WAAW,MAAM,QAAQ,KAAK,QAAQ,IAAI,KAAK,WAA2B,CAAC;AAC5K,UAAI,SAAS,UAAU,GAAI,OAAM,MAAM,UAAU,IAAI,QAAQ,CAAC;AAAA,IAChE;AAAA,EACF;AACA,QAAM,MAAM,IAAI;AAAG,SAAO,EAAE,MAAM,QAAQ,SAAS,OAAO,QAAQ,OAAO;AAC3E;AAEA,eAAe,aAAa,MAAgB;AAC1C,QAAM,QAAQ,MAAMA,UAAqB,OAAO,MAAM,kBAAkB,IAAI,CAAE;AAAG,QAAM,QAAQ,OAAO,MAAM,SAAS,KAAK,EAAE,MAAM,GAAG,UAAU,MAAM,eAAe,EAAE,CAAC;AACvK,QAAME,aAAY,OAAO,MAAM,cAAc,KAAKJ,MAAK,WAAW,YAAY,GAAG,UAAU;AAAG,QAAM,UAAUI,UAAS;AACvH,QAAM,QAAQ,MAAM,IAAI,CAACD,OAAM,WAAW,EAAE,UAAU,OAAOA,MAAK,SAASA,MAAK,GAAG,GAAG,QAAQ,OAAOA,MAAK,QAAQ,EAAE,EAAE,MAAM,GAAG,UAAU,MAAM,kBAAkB,IAAI,CAAC,GAAG,WAAWA,MAAK,KAAK,aAAaA,MAAK,OAAO,MAAM,EAAE;AAC/N,QAAM,QAAkB,CAAC;AAAG,aAAW,CAAC,OAAO,IAAI,KAAK,MAAM,QAAQ,GAAG;AAAE,UAAM,OAAOH,MAAKI,YAAW,QAAQ,OAAO,QAAQ,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC,OAAO;AAAG,UAAMH,WAAU,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;AAAG,UAAM,KAAK,IAAI;AAAA,EAAG;AACxN,SAAO,EAAE,WAAAG,YAAW,OAAO,OAAO,MAAM,OAAO;AACjD;AAEA,eAAe,SAAS,QAAsB,MAAgB;AAC5D,QAAM,SAAS,OAAO,MAAM,WAAW;AAAG,QAAM,UAAU,OAAO,MAAM,YAAY;AACnF,MAAI,CAAC,UAAU,CAAC,QAAS,OAAM,IAAI,MAAM,qCAAqC;AAC9E,QAAM,QAAmB,CAAC;AAC1B,MAAI,QAAQ;AAAE,UAAM,QAAQ,MAAMF,UAAkB,MAAM;AAAG,UAAM,KAAK,GAAI,MAAM,QAAQ,KAAK,IAAI,QAAS,MAAqB,SAAS,MAAM,QAAS,MAAqB,KAAK,IAAK,MAAqB,QAAqB,CAAC,KAAK,CAAE;AAAA,EAAG;AAC7O,MAAI,SAAS;AACX,UAAM,EAAE,QAAQ,IAAI,MAAM,OAAO,aAAkB;AAAG,eAAW,SAAS,MAAM,QAAQ,OAAO,GAAG,OAAO,UAAQ,KAAK,SAAS,OAAO,CAAC,GAAG;AAAE,YAAM,QAAQ,MAAMA,UAAkBF,MAAK,SAAS,IAAI,CAAC;AAAG,YAAM,KAAK,GAAI,MAAM,QAAQ,KAAK,IAAI,QAAS,MAAqB,SAAS,MAAM,QAAS,MAAqB,KAAK,IAAK,MAAqB,QAAqB,CAAC,KAAK,CAAE;AAAA,IAAG;AAAA,EAC1X;AACA,QAAMK,QAAO,EAAE,OAAO,OAAO,MAAM,QAAQ,YAAW,oBAAI,KAAK,GAAE,YAAY,EAAE;AAAG,QAAM,WAAWL,MAAK,WAAW,YAAY,GAAG,kBAAkB,KAAK,IAAI,CAAC,OAAO;AAAG,QAAMC,WAAU,UAAUI,KAAI;AACtM,MAAI,KAAK,MAAM,WAAW,EAAG,QAAO,EAAE,QAAQ,MAAM,UAAU,OAAO,MAAM,OAAO;AAClF,SAAO,EAAE,UAAU,OAAO,MAAM,QAAQ,QAAQ,MAAM,OAAO,SAAS,KAAK,EAAE;AAC/E;AAEA,eAAe,cAAc,QAAsB,MAAgB;AACjE,QAAMA,QAAO,MAAMH,UAAqB,OAAO,MAAM,eAAe,IAAI,CAAE;AAAG,QAAM,YAAY,MAAM,QAAQG,MAAK,SAAS,IAAIA,MAAK,YAAY,MAAM,QAAQA,MAAK,KAAK,IAAIA,MAAK,QAAQ,CAAC;AAC1L,QAAM,UAAU,EAAE,WAAW,UAAU,OAAO,WAAW,MAAM,WAAW,MAAM,UAAU,EAAE,MAAM,CAAC,EAAE,GAAG,aAAa,OAAOA,MAAK,eAAe,EAAE,EAAE;AACpJ,MAAI,CAAC,KAAK,MAAM,WAAW,EAAG,QAAO,EAAE,QAAQ,MAAM,QAAQ;AAC7D,SAAO,OAAO,QAAQ,QAAQ,GAAG,OAAO,OAAO,YAAY,MAAM,OAAO,UAAU,CAAC,cAAc,OAAO;AAC1G;AAEA,eAAe,gBAAgB,QAAsB,MAAgB;AACnE,QAAM,SAAS,OAAO,MAAM,aAAa,KAAK,OAAO,MAAM,QAAQ;AAAG,MAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,mCAAmC;AACtI,QAAM,OAAqB,CAAC;AAC5B,MAAI,OAAO,SAAS,OAAO,EAAG,MAAK,KAAK,GAAG,OAAO,MAAMH,UAAS,MAAM,CAAC,CAAC;AAAA,OACpE;AAAE,UAAM,WAAW,IAAII,SAAQ,SAAS;AAAG,UAAM,SAAS,KAAK,SAAS,MAAM;AAAG,UAAM,QAAQ,OAAO,MAAM,SAAS,IAAI,SAAS,aAAa,OAAO,MAAM,SAAS,CAAE,IAAI,SAAS,WAAW,CAAC;AAAG,QAAI,CAAC,MAAO,OAAM,IAAI,MAAM,2BAA2B;AAAG,UAAM,UAAW,MAAM,OAAO,CAAC,EAAE,OAAqB,MAAM,CAAC,EAAE,IAAI,OAAK,OAAO,KAAK,EAAE,CAAC;AAAG,UAAM,QAAQ,CAAC,KAAK,WAAW;AAAE,UAAI,WAAW,EAAG;AAAQ,YAAM,SAAU,IAAI,OAAqB,MAAM,CAAC;AAAG,YAAM,OAAmB,CAAC;AAAG,cAAQ,QAAQ,CAAC,QAAQ,UAAU;AAAE,YAAI,OAAQ,MAAK,MAAM,IAAI,OAAO,KAAK,KAAK;AAAA,MAAI,CAAC;AAAG,WAAK,KAAK,IAAI;AAAA,IAAG,CAAC;AAAA,EAAG;AACrlB,QAAM,QAAQ,KAAK,IAAI,UAAQ,EAAE,MAAM,OAAO,IAAI,QAAQ,IAAI,QAAQ,EAAE,EAAE,KAAK,GAAG,SAAS,OAAO,IAAI,WAAW,IAAI,WAAW,IAAI,YAAY,EAAE,GAAG,QAAQ,IAAI,UAAU,IAAI,UAAU,WAAW,OAAO,IAAI,SAAS,IAAI,MAAM,EAAE,EAAE,OAAO,UAAQ,KAAK,QAAQ,KAAK,OAAO;AAC9Q,QAAM,SAAS,OAAO,MAAM,UAAU,KAAKN,MAAK,WAAW,YAAY,GAAG,wBAAwB,KAAK,IAAI,CAAC,OAAO;AAAG,QAAMC,WAAU,QAAQ,EAAE,OAAO,OAAO,MAAM,OAAO,CAAC;AAC5K,MAAI,KAAK,MAAM,WAAW,EAAG,QAAO,EAAE,QAAQ,MAAM,QAAQ,OAAO,MAAM,OAAO;AAChF,QAAM,UAAU,CAAC;AAAG,aAAW,QAAQ,MAAO,SAAQ,KAAK,MAAM,OAAO,eAAe,IAAI,CAAC;AAAG,SAAO,EAAE,QAAQ,OAAO,QAAQ,QAAQ,QAAQ;AACjJ;AAEA,eAAe,gBAAgB,QAAsB,MAAgB;AACnE,QAAM,cAAc,OAAO,MAAM,OAAO,gBAAgB,CAAC;AAAG,QAAM,MAAM,OAAO,MAAM,gBAAgB,IAAI,CAAC,OAAO,OAAO,MAAM,gBAAgB,CAAC,CAAC,IAAI,YAAY,IAAI,SAAO,OAAO,IAAI,MAAM,IAAI,WAAW,CAAC,EAAE,OAAO,OAAO,QAAQ;AACpO,QAAM,OAAqB,CAAC;AAAG,aAAW,MAAM,KAAK;AAAE,UAAM,QAAQ,MAAM,OAAO,cAAc,EAAE,aAAa,IAAI,SAAS,OAAO,MAAM,WAAW,KAAK,IAAI,MAAM,OAAO,MAAM,QAAQ,KAAK,OAAO,UAAU,UAAU,MAAM,eAAe,GAAI,EAAE,CAAC;AAAG,SAAK,KAAK,GAAG,OAAO,KAAK,EAAE,IAAI,UAAQ,EAAE,GAAG,KAAK,aAAa,IAAI,eAAe,YAAY,KAAK,SAAO,OAAO,IAAI,MAAM,IAAI,WAAW,MAAM,EAAE,GAAG,QAAQ,GAAG,EAAE,CAAC;AAAA,EAAG;AAC5Z,QAAM,SAAS,OAAO,MAAM,UAAU,KAAKD,MAAK,WAAW,YAAY,GAAG,aAAa,KAAK,IAAI,CAAC,OAAO;AAAG,QAAM,WAAW,IAAIM,SAAQ,SAAS;AAAG,QAAM,QAAQ,SAAS,aAAa,WAAW;AAAG,QAAM,OAAO,CAAC,GAAG,IAAI,IAAI,KAAK,QAAQ,SAAO,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC;AAAG,QAAM,OAAO,IAAI;AAAG,aAAW,OAAO,KAAM,OAAM,OAAO,KAAK,IAAI,SAAO,IAAI,GAAG,KAAK,EAAE,CAAC;AAAG,QAAM,UAAUN,MAAK,QAAQ,IAAI,CAAC;AAAG,QAAM,SAAS,KAAK,UAAU,MAAM;AAAG,SAAO,EAAE,QAAQ,OAAO,KAAK,OAAO;AACrd;AAEA,eAAsB,aAAa,SAA8BO,SAA4B,MAAgB;AAC3G,MAAI,CAACA,QAAQ,OAAM,IAAI,MAAM,+BAA+B;AAC5D,MAAIA,YAAW,QAAS,QAAO,MAAM,IAAI;AACzC,MAAIA,YAAW,iBAAkB,QAAO,cAAc,IAAI;AAC1D,MAAI,CAAC,QAAS,OAAM,IAAI,MAAM,GAAGA,OAAM,mCAAmC;AAC1E,QAAM,SAAS,IAAI,aAAa,OAAO;AACvC,MAAIA,YAAW,qBAAsB,QAAO,kBAAkB,QAAQ,IAAI;AAC1E,MAAIA,YAAW,iBAAkB,QAAO,aAAa,IAAI;AACzD,MAAIA,YAAW,YAAa,QAAO,SAAS,QAAQ,IAAI;AACxD,MAAIA,YAAW,0BAA2B,QAAO,cAAc,QAAQ,IAAI;AAC3E,MAAIA,YAAW,mBAAoB,QAAO,gBAAgB,QAAQ,IAAI;AACtE,MAAIA,YAAW,mBAAoB,QAAO,gBAAgB,QAAQ,IAAI;AACtE,MAAIA,YAAW,uBAAuBA,YAAW,0BAA2B,QAAO,gBAAgB,IAAI;AACvG,QAAM,IAAI,MAAM,8BAA8BA,OAAM,EAAE;AACxD;AAEA,eAAe,gBAAgB,MAAgB;AAC7C,QAAM,OAAO,OAAO,MAAM,UAAU,IAAI;AAAI,QAAM,WAAW,IAAID,SAAQ,SAAS;AAAG,QAAM,SAAS,KAAK,SAAS,IAAI;AAAG,QAAM,QAAQ,SAAS,WAAW,CAAC;AAAG,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,2BAA2B;AACtN,QAAM,UAAW,MAAM,OAAO,CAAC,EAAE,OAAqB,MAAM,CAAC,EAAE,IAAI,OAAK,OAAO,KAAK,EAAE,CAAC;AAAG,QAAM,aAAa,OAAO,MAAM,gBAAgB,KAAK,QAAQ,KAAK,YAAU,mCAAmC,KAAK,MAAM,CAAC,KAAK,QAAQ,CAAC;AAAG,QAAM,WAAW,OAAO,MAAM,aAAa;AAAG,QAAM,WAAW,OAAO,MAAM,aAAa;AAAG,QAAM,QAAQ,OAAO,MAAM,WAAW,IAAI;AAAI,QAAM,QAAsB,CAAC;AAC7Y,QAAM,QAAQ,CAAC,KAAK,WAAW;AAAE,QAAI,WAAW,EAAG;AAAQ,UAAM,SAAU,IAAI,OAAqB,MAAM,CAAC,GAAG,SAAqB,CAAC;AAAG,YAAQ,QAAQ,CAAC,QAAQ,UAAU;AAAE,aAAO,MAAM,IAAI,OAAO,KAAK,KAAK;AAAA,IAAI,CAAC;AAAG,UAAM,WAAW,GAAG,KAAK,KAAK,OAAO,OAAO,QAAS,KAAK,EAAE,EAAE,KAAK,CAAC,IAAI,OAAO,OAAO,UAAW,KAAK,EAAE,EAAE,KAAK,CAAC,GAAG,KAAK;AAAG,UAAM,SAAS,OAAO,OAAO,QAAS,KAAK,EAAE,EAAE,KAAK;AAAG,QAAI,YAAY,aAAa,GAAG,KAAK,IAAK,OAAM,KAAK,EAAE,UAAU,QAAQ,WAAW,OAAO,CAAC;AAAA,EAAG,CAAC;AACxe,QAAM,SAAS,OAAO,MAAM,UAAU,KAAKN,MAAK,WAAW,YAAY,GAAG,aAAa,KAAK,IAAI,CAAC,OAAO;AAAG,QAAM,SAAS,EAAE,OAAO,OAAO,MAAM,QAAQ,MAAM;AAAG,QAAMC,WAAU,QAAQ,MAAM;AAAG,MAAI,KAAK,MAAM,WAAW,EAAG,QAAO,EAAE,QAAQ,MAAM,QAAQ,OAAO,MAAM,OAAO;AAAG,SAAO,EAAE,QAAQ,OAAO,MAAM,QAAQ,MAAM;AACnU;;;AC9HA,SAAS,QAAAO,aAAY;AACrB,OAAOC,cAAa;AAOpB,IAAM,SAAS,CAAC,SAAmB,OAAO,MAAM,WAAW,MAAK,oBAAI,KAAK,GAAE,YAAY,EAAE,QAAQ,YAAY,EAAE,EAAE,MAAM,GAAG,EAAE;AAC5H,IAAM,UAAU,CAAC,SAAmBC,MAAK,UAAU,aAAa,GAAG,OAAO,IAAI,CAAC;AAE/E,eAAe,eAAe,KAAa,MAAc,MAAoB;AAC3E,QAAM,OAAOA,MAAK,KAAK,IAAI;AAAG,QAAM,aAAa,IAAI;AAAG,QAAM,WAAW,IAAIC,SAAQ,SAAS;AAAG,QAAM,QAAQ,SAAS,aAAa,MAAM;AAAG,QAAM,OAAO,CAAC,GAAG,IAAI,IAAI,KAAK,QAAQ,SAAO,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC;AAAG,QAAM,OAAO,IAAI;AAAG,aAAW,OAAO,KAAM,OAAM,OAAO,KAAK,IAAI,SAAO,IAAI,GAAG,KAAK,EAAE,CAAC;AAAG,QAAM,SAAS,KAAK,UAAU,IAAI;AAAG,SAAO;AACzV;AAEA,eAAe,aAAa,QAAsB,MAAgB;AAChE,QAAM,MAAM,QAAQ,IAAI;AAAG,QAAMC,YAAW,KAAK,IAAI,GAAG,KAAK,IAAI,UAAU,MAAM,eAAe,GAAG,GAAG,GAAG,CAAC;AAAG,QAAM,WAAW,UAAU,MAAM,eAAe,GAAG;AAAG,QAAM,UAAU,UAAU,MAAM,cAAc,GAAM;AAAG,QAAM,OAAqB,CAAC;AACtP,WAASC,QAAO,GAAGA,SAAQ,YAAY,KAAK,SAAS,SAASA,SAAQ,GAAG;AACvE,UAAM,QAAQ,MAAM,OAAO,QAAQ,QAAQ,gCAAgC,EAAE,QAAQ,OAAO,MAAM,WAAW,KAAK,KAAK,MAAAA,OAAM,UAAAD,WAAU,MAAM,OAAO,MAAM,QAAQ,KAAK,oBAAoB,OAAO,OAAO,MAAM,SAAS,KAAK,QAAQ,GAAI,OAAO,MAAM,gBAAgB,IAAI,MAAME,UAAqB,OAAO,MAAM,gBAAgB,CAAE,IAAI,CAAC,EAAG,CAAC;AAAG,UAAM,WAAW,OAAO,KAAK;AAAG,SAAK,KAAK,GAAG,SAAS,MAAM,GAAG,UAAU,KAAK,MAAM,CAAC;AAAG,QAAI,SAAS,SAASF,UAAU;AAAA,EAC1c;AACA,QAAM,SAAS,MAAM,eAAe,KAAK,mBAAmB,IAAI;AAAG,QAAMG,WAAUL,MAAK,KAAK,eAAe,GAAG,EAAE,QAAQ,OAAO,IAAI,GAAG,MAAM,KAAK,QAAQ,OAAO,CAAC;AAAG,SAAO,EAAE,QAAQ,OAAO,IAAI,GAAG,QAAQ,OAAO,KAAK,OAAO;AACjO;AAEA,eAAe,aAAa,QAAsB,MAAgB;AAChE,QAAM,MAAM,QAAQ,IAAI;AAAG,QAAM,QAAQ,OAAO,MAAM,WAAW,IAAI,GAAI,MAAM,OAAO,MAAM,SAAS,IAAI;AAAI,QAAM,UAAsB,EAAE,OAAO,KAAK,SAAS,CAAC,EAAE;AAAG,QAAM,QAAQ,MAAM,OAAO,QAAQ,QAAQ,gCAAgC,EAAE,WAAW,OAAO,SAAS,KAAK,MAAM,GAAG,UAAU,UAAU,MAAM,cAAc,GAAM,EAAE,CAAC;AAAG,QAAM,OAAO,OAAO,KAAK,EAAE,MAAM,GAAG,UAAU,MAAM,cAAc,GAAM,CAAC;AAAG,UAAQ,UAAU;AAAM,QAAM,SAAS,MAAM,eAAe,KAAK,mBAAmB,IAAI;AAAG,QAAMK,WAAUL,MAAK,KAAK,cAAc,GAAG,OAAO;AAAG,SAAO,EAAE,QAAQ,OAAO,IAAI,GAAG,QAAQ,OAAO,KAAK,OAAO;AACxmB;AAEA,eAAe,KAAK,QAAsBM,SAAgB,MAAgB;AACxE,MAAIA,YAAW,YAAa,QAAO,OAAO,QAAQ,OAAO,kCAAkC;AAC3F,QAAM,SAAS,OAAO,MAAM,mBAAmB,IAAI;AACnD,MAAIA,YAAW,kBAAmB,QAAO,OAAO,QAAQ,OAAO,2BAA2B,mBAAmB,MAAM,CAAC,OAAO;AAC3H,MAAIA,YAAW,eAAe;AAAE,UAAM,OAAO,MAAM,OAAO,QAAQ,OAAO,kCAAkC;AAAG,UAAM,SAAS,OAAO,MAAM,UAAU,IAAI,EAAG,YAAY;AAAG,UAAM,UAAU,CAAC,UAAiC,MAAM,QAAQ,KAAK,IAAI,MAAM,QAAQ,OAAO,IAAI,SAAS,OAAO,UAAU,WAAW,CAAC,OAAqB,GAAG,QAAS,MAAqB,YAAa,MAAqB,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AAAG,WAAO,QAAQ,IAAI,EAAE,OAAO,SAAO,OAAO,IAAI,QAAQ,IAAI,SAAS,EAAE,EAAE,YAAY,EAAE,SAAS,MAAM,CAAC;AAAA,EAAG;AACtgB,MAAIA,YAAW,yBAAyB;AAAE,UAAM,MAAM,OAAO,MAAMF,UAAS,OAAO,MAAM,qBAAqB,IAAI,CAAE,CAAC;AAAG,UAAM,SAAS,CAAC;AAAG,eAAW,OAAO,IAAK,QAAO,KAAK,EAAE,GAAG,KAAK,MAAM,MAAM,OAAO,QAAQ,OAAO,2BAA2B,mBAAmB,OAAO,IAAI,gBAAgB,IAAI,YAAY,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;AAAG,WAAO;AAAA,EAAQ;AACvV,MAAIE,YAAW,eAAeA,YAAW,gBAAgB;AAAE,QAAI,CAAC,KAAK,MAAM,WAAW,EAAG,OAAM,IAAI,MAAM,GAAGA,OAAM,qBAAqB;AAAG,UAAM,WAAW,OAAO,MAAM,eAAe,IAAI;AAAI,WAAO,OAAO,QAAQ,QAAQ,2BAA2B,mBAAmB,MAAM,CAAC,SAAS,EAAE,MAAM,MAAMF,UAAS,QAAQ,EAAE,CAAC;AAAA,EAAG;AAChU,QAAM,IAAI,MAAM,uBAAuBE,OAAM,EAAE;AACjD;AAEA,eAAeC,cAAa,MAAgB;AAC1C,QAAM,MAAM,QAAQ,IAAI,GAAG,WAAW,OAAO,MAAM,eAAe,KAAKP,MAAK,KAAK,kBAAkB,GAAG,YAAY,OAAO,MAAM,SAAS,KAAKA,MAAK,KAAK,wBAAwB;AAAG,QAAMQ,QAAO,MAAMJ,UAAqB,QAAQ;AAAG,MAAI,KAAK,MAAM,iBAAiB,EAAG,QAAO,EAAE,OAAO,MAAM,SAAS;AAAG,QAAM,SAAS,OAAO,MAAM,UAAU,KAAKJ,MAAK,WAAW,aAAa,GAAG,OAAO,IAAI,GAAG,GAAG,OAAO,MAAM,eAAe,KAAK,QAAQ,OAAO;AAAG,QAAM,OAAO,QAAQ,WAAW,KAAK,UAAU,EAAE,MAAAQ,OAAM,OAAO,MAAMJ,UAAS,SAAS,EAAE,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;AAAU,QAAM,UAAU,QAAQ,OAAO,MAAM,eAAe,KAAK,sBAAsB,IAAI;AAAG,SAAO,EAAE,QAAQ,OAAO,KAAK;AAC9qB;AAEA,eAAsB,QAAQ,SAAkBE,SAA4B,MAAgB;AAC1F,MAAI,CAACA,QAAQ,OAAM,IAAI,MAAM,gCAAgC;AAAG,QAAM,SAAS,IAAI,aAAa,OAAO;AACvG,MAAIA,YAAW,gBAAiB,QAAO,aAAa,QAAQ,IAAI;AAChE,MAAIA,YAAW,gBAAiB,QAAO,aAAa,QAAQ,IAAI;AAChE,MAAIA,YAAW,gBAAiB,QAAOC,cAAa,IAAI;AACxD,MAAID,YAAW,OAAQ,QAAO,KAAK,QAAQ,OAAO,MAAM,aAAa,KAAK,KAAK,KAAK,WAAS,CAAC,aAAa,mBAAmB,yBAAyB,eAAe,aAAa,cAAc,EAAE,SAAS,KAAK,CAAC,KAAK,aAAa,IAAI;AACxO,MAAI,CAAC,aAAa,mBAAmB,yBAAyB,eAAe,aAAa,cAAc,EAAE,SAASA,OAAM,EAAG,QAAO,KAAK,QAAQA,SAAQ,IAAI;AAC5J,QAAM,IAAI,MAAM,+BAA+BA,OAAM,EAAE;AACzD;;;A1B7BA,IAAM,QAAQ,CAAC,UAAmB,QAAQ,IAAI,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAC5E,IAAM,QAAQ,MAAM;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AACF,EAAE,KAAK,MAAM;AAEb,eAAe,QAAQG,SAA4B,MAAgB;AACjE,MAAIA,YAAW,QAAS,QAAO,MAAM,MAAM,MAAM,OAAO,MAAM,YAAY,IAAI,GAAK,OAAO,MAAM,WAAW,KAAK,QAAwC,CAAC;AACzJ,MAAIA,YAAW,UAAU;AAAE,UAAM,OAAO;AAAG,WAAO,MAAM,EAAE,IAAI,MAAM,WAAW,KAAK,CAAC;AAAA,EAAG;AACxF,MAAIA,YAAW,UAAU;AACvB,QAAI;AACF,YAAM,UAAU,MAAM,YAAY;AAClC,aAAO,MAAM,EAAE,IAAI,MAAM,UAAU,MAAM,OAAO,QAAQ,OAAO,SAAS,QAAQ,SAAS,iBAAiB,QAAQ,aAAa,CAAC;AAAA,IAClI,QAAQ;AAAE,aAAO,MAAM,EAAE,IAAI,MAAM,UAAU,MAAM,CAAC;AAAA,IAAG;AAAA,EACzD;AACA,MAAIA,YAAW,WAAW;AAAE,UAAM,UAAU,MAAM,cAAc;AAAG,WAAO,MAAM,EAAE,IAAI,MAAM,iBAAiB,QAAQ,aAAa,CAAC;AAAA,EAAG;AACtI,QAAM,IAAI,MAAM,uDAAuD;AACzE;AAEA,eAAe,UAAUA,SAA4B,MAAgB;AACnE,QAAM,UAAU,MAAM,cAAc;AACpC,MAAIA,YAAW,UAAW,QAAO,MAAM,aAAa,QAAQ,MAAM,CAAC;AACnE,MAAIA,YAAW,SAAS;AAAE,WAAO,QAAQ;AAAQ,UAAM,YAAY,OAAO;AAAG,WAAO,MAAM,EAAE,IAAI,MAAM,SAAS,KAAK,CAAC;AAAA,EAAG;AACxH,MAAIA,YAAW,SAAU,QAAO,MAAM,MAAM,OAAO,SAAS,YAAY,IAAI,EAAE,CAAC,KAAK,IAAI,OAAO,MAAM,SAAS,IAAI,CAAE,CAAC;AACrH,MAAIA,YAAW,MAAO,QAAO,MAAM,MAAM,UAAU,SAAS,OAAO,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,OAAO,MAAM,SAAS,IAAI,GAAI,OAAO,MAAM,aAAa,IAAI,CAAE,CAAC;AACzJ,QAAM,IAAI,MAAM,sDAAsD;AACxE;AAEA,eAAe,KAAK,OAAO,QAAQ,KAAK,MAAM,CAAC,GAAG;AAChD,QAAM,CAAC,SAASA,SAAQ,GAAG,IAAI,IAAI;AACnC,MAAI,CAAC,WAAW,YAAY,UAAU,KAAK,MAAM,QAAQ,GAAG;AAC1D,YAAQ,IAAI,WAAW,kBAAkB,OAAO,IAAI,aAAa,SAASA,WAAU,CAAC,CAAC,QAAQ,QAAQ,EAAE,SAASA,OAAM,IAAIA,UAAS,MAAS,IAAI,MAAM,CAAC;AACxJ;AAAA,EACF;AACA,MAAI,kBAAkB,OAAO,GAAG;AAC9B,UAAM,mBAAmB,MAAM,cAAc,GAAG,SAASA,SAAQ,IAAI;AACrE;AAAA,EACF;AACA,MAAI,YAAY,WAAW;AACzB,QAAI,KAAK,MAAM,QAAQ,EAAG,QAAO,MAAM,EAAE,eAAe,QAAQ,IAAI,yBAAyB,MAAM,YAAY,SAAS,mBAAmB,qBAAqB,kBAAkB,mBAAmB,CAAC;AACtM,YAAQ,IAAI,aAAa,OAAO,EAAE;AAAG;AAAA,EACvC;AACA,MAAI,YAAY,SAAS;AACvB,UAAM,UAAW,OAAO,MAAM,WAAW,KAAK;AAC9C,UAAM,mBAAmB,OAAO;AAAG,UAAM,MAAM,OAAO,MAAM,YAAY,IAAI,GAAI,OAAO;AAAG,UAAM,iBAAiB;AAAG;AAAA,EACtH;AACA,MAAI,YAAY,OAAQ,QAAO,QAAQA,SAAQ,IAAI;AACnD,MAAI,YAAY,WAAW,YAAY,SAAU,QAAO,QAAQ,SAAS,KAAK,MAAM,CAAC,CAAC;AACtF,MAAI,YAAY,YAAY,YAAY,UAAW,QAAO,UAAUA,SAAQ,IAAI;AAChF,MAAI,YAAY,UAAW,QAAO,MAAM,MAAM,WAAWA,SAAQ,IAAI,CAAC;AACtE,MAAI,YAAY,WAAY,QAAO,MAAM,MAAM,qBAAqBA,SAAQ,IAAI,CAAC;AACjF,MAAI,YAAY,UAAW,QAAO,MAAM,MAAM,WAAW,MAAM,cAAc,GAAGA,SAAQ,IAAI,CAAC;AAC7F,MAAI,YAAY,gBAAiB,QAAO,MAAM,MAAM,gBAAgB,CAAC,YAAY,WAAW,gBAAgB,iBAAiB,aAAa,QAAQ,EAAE,SAASA,WAAU,EAAE,IAAI,SAAY,MAAM,cAAc,GAAGA,SAAQ,IAAI,CAAC;AAC7N,MAAI,YAAY,eAAgB,QAAO,MAAM,MAAM,eAAeA,YAAW,iBAAiB,SAAY,MAAM,cAAc,GAAGA,SAAQ,IAAI,CAAC;AAC9I,MAAI,YAAY,WAAY,QAAO,MAAM,MAAM,YAAY,CAAC,YAAY,QAAQ,UAAU,UAAU,iBAAiB,SAAS,aAAa,gBAAgB,EAAE,SAASA,WAAU,EAAE,IAAI,SAAY,MAAM,cAAc,GAAGA,SAAQ,IAAI,CAAC;AACtO,MAAI,YAAY,MAAO,QAAO,MAAM,MAAM,OAAO,CAAC,YAAY,QAAQ,UAAU,UAAU,iBAAiB,SAAS,aAAa,UAAU,gBAAgB,EAAE,SAASA,WAAU,EAAE,IAAI,SAAY,MAAM,cAAc,GAAGA,SAAQ,IAAI,CAAC;AACtO,MAAI,YAAY,aAAc,QAAO,MAAM,MAAM,aAAa,CAAC,SAAS,kBAAkB,kBAAkB,qBAAqB,yBAAyB,EAAE,SAASA,WAAU,EAAE,IAAI,SAAY,MAAM,cAAc,GAAGA,SAAQ,IAAI,CAAC;AACrO,MAAI,YAAY,cAAe,QAAO,MAAM,MAAM,QAAQ,MAAM,cAAc,GAAGA,SAAQ,IAAI,CAAC;AAC9F,MAAI,YAAY,OAAO;AAAE,QAAI,CAACA,QAAQ,OAAM,IAAI,MAAM,yBAAyB;AAAG,UAAM,OAAO,MAAM,cAAc,GAAGA,SAAQ,IAAI;AAAG;AAAA,EAAQ;AAC7I,MAAI,YAAY,SAASA,YAAW,SAAS;AAC3C,WAAO,MAAM,MAAM,MAAS,MAAM,cAAc,GAAG;AAAA,MACjD,MAAM,OAAO,OAAO,MAAM,UAAU,IAAI,CAAC;AAAA,MAAG,IAAI,OAAO,OAAO,MAAM,QAAQ,IAAI,CAAC;AAAA,MACjF,OAAO,OAAO,MAAM,WAAW,IAAI;AAAA,MAAI,MAAM,OAAO,OAAO,MAAM,QAAQ,KAAK,EAAE;AAAA,MAChF,QAAQ,OAAO,OAAO,MAAM,UAAU,KAAK,CAAC;AAAA,MAAG,SAAS,KAAK,MAAM,WAAW;AAAA,IAChF,CAAC,CAAC;AAAA,EACJ;AACA,MAAI,YAAY,SAAU,QAAO,MAAM,MAAM,SAAS,CAAC;AACvD,MAAI,YAAY,UAAU;AACxB,QAAI,KAAK,MAAM,qBAAqB,GAAG;AAAE,YAAM,iBAAiB;AAAG,aAAO,MAAM,EAAE,IAAI,MAAM,oBAAoB,KAAK,CAAC;AAAA,IAAG;AACzH,QAAI,KAAK,MAAM,aAAa,EAAG,OAAM,IAAI,QAAQ,CAAAC,aAAW,WAAWA,UAAS,KAAK,OAAO,IAAI,IAAS,CAAC;AAC1G,WAAO,MAAM,MAAM,OAAO,CAAC;AAAA,EAC7B;AACA,MAAI,YAAY,cAAc,YAAY,eAAgB,SAAQ,IAAI,MAAMC,UAAS,IAAI,IAAI,6BAA6B,YAAY,GAAG,GAAG,MAAM,CAAC;AAAA,MAC9I,OAAM,IAAI,MAAM,oBAAoB,OAAO,EAAE;AACpD;AAEA,KAAK,EAAE,MAAM,WAAS;AACpB,UAAQ,MAAM,cAAc,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AACpF,UAAQ,WAAW;AACrB,CAAC;","names":["readFile","options","readFile","query","resolve","data","pageSize","enabled","options","handlers","requireFlag","data","readFile","usage","action","root","options","query","join","options","resolve","environment","join","resolve","exec","resolve","join","state","stateDir","action","fs","dirname","join","resolve","workspace","resolve","join","readJson","fs","writeJson","dirname","join","writeJson","action","readFile","basename","request","action","options","readFile","basename","query","mkdir","readFile","writeFile","dirname","join","resolve","homedir","resolve","join","homedir","mkdir","dirname","readJson","readFile","writeJson","writeFile","writeFile","root","result","writeJson","action","readJson","options","value","entry","input","out","writeFile","join","ExcelJS","readJson","ExcelJS","join","action","join","ExcelJS","readJson","ExcelJS","writeJson","join","state","fs","action","join","ExcelJS","join","writeJson","readJson","page","outputDir","plan","ExcelJS","action","join","ExcelJS","join","ExcelJS","pageSize","page","readJson","writeJson","action","renderReport","data","action","resolve","readFile"]}
1
+ {"version":3,"sources":["../src/cli.ts","../src/auth.ts","../package.json","../src/version.ts","../src/http.ts","../src/store.ts","../src/args.ts","../src/business.ts","../src/solvea/commands.ts","../src/solvea/client.ts","../src/solvea/input.ts","../src/solvea/extended-commands.ts","../src/solvea/remaining-commands.ts","../src/commands/resources.ts","../src/doctor.ts","../src/sls.ts","../src/tenant.ts","../src/update.ts","../src/workflows/runtime.ts","../src/workflows/solvea-kit.ts","../src/workflows/support.ts","../src/workflows/common.ts","../src/workflows/agent-builder.ts","../src/workflows/tester.ts","../src/workflows/delivery.ts","../src/workflows/kb-builder.ts","../src/workflows/desk.ts"],"sourcesContent":["import { readFile } from \"node:fs/promises\";\nimport { authenticated, login, logout } from \"./auth.js\";\nimport { flag, option, positionals } from \"./args.js\";\nimport { runApi } from \"./business.js\";\nimport { isResourceCommand, resourceHelp, runResourceCommand } from \"./commands/resources.js\";\nimport { diagnose } from \"./doctor.js\";\nimport { query as slsQuery } from \"./sls.js\";\nimport { loadSession, saveSession } from \"./store.js\";\nimport { publicTenant, search, useTenant } from \"./tenant.js\";\nimport { installMarketplace, installScheduler, update } from \"./update.js\";\nimport { SERVER_API_VERSION, TOOL_SCHEMA_VERSION, VERSION } from \"./version.js\";\nimport { runRuntime } from \"./workflows/runtime.js\";\nimport { runSolveaKitWorkflow } from \"./workflows/solvea-kit.js\";\nimport { runSupport } from \"./workflows/support.js\";\nimport { runAgentBuilder } from \"./workflows/agent-builder.js\";\nimport { runAgentTester } from \"./workflows/tester.js\";\nimport { runDelivery, runPoc } from \"./workflows/delivery.js\";\nimport { runKbBuilder } from \"./workflows/kb-builder.js\";\nimport { runDesk } from \"./workflows/desk.js\";\n\nconst print = (value: unknown) => console.log(JSON.stringify(value, null, 2));\nconst usage = () => [\n \"cxclawctl <resource> <action> [options]\",\n \"cxclawctl auth|tenant|sls|runtime|doctor|update|setup|version\",\n \"cxclawctl agent-builder|agent-tester|delivery|poc|kb-builder|solvea-desk <action>\",\n resourceHelp(),\n \"Example: cxclawctl intent create --data-file intent.json\",\n].join(\"\\n\\n\");\n\nasync function runAuth(action: string | undefined, args: string[]) {\n if (action === \"login\") return print(await login(option(args, \"--server\", true)!, (option(args, \"--channel\") ?? \"stable\") as \"stable\" | \"canary\" | \"dev\"));\n if (action === \"logout\") { await logout(); return print({ ok: true, loggedOut: true }); }\n if (action === \"status\") {\n try {\n const session = await loadSession();\n return print({ ok: true, loggedIn: true, email: session.email, channel: session.channel, accessExpiresAt: session.accessExpiry });\n } catch { return print({ ok: true, loggedIn: false }); }\n }\n if (action === \"refresh\") { const session = await authenticated(); return print({ ok: true, accessExpiresAt: session.accessExpiry }); }\n throw new Error(\"auth action must be login, logout, status, or refresh\");\n}\n\nasync function runTenant(action: string | undefined, args: string[]) {\n const session = await authenticated();\n if (action === \"current\") return print(publicTenant(session.tenant));\n if (action === \"clear\") { delete session.tenant; await saveSession(session); return print({ ok: true, cleared: true }); }\n if (action === \"search\") return print(await search(session, positionals(args)[0] ?? \"\", option(args, \"--env\", true)!));\n if (action === \"use\") return print(await useTenant(session, Number(positionals(args)[0]), option(args, \"--env\", true)!, option(args, \"--purpose\", true)!));\n throw new Error(\"tenant action must be search, use, current, or clear\");\n}\n\nasync function main(args = process.argv.slice(2)) {\n const [command, action, ...rest] = args;\n if (!command || command === \"help\" || flag(args, \"--help\")) {\n console.log(command && isResourceCommand(command) ? resourceHelp(command, action && ![\"help\", \"--help\"].includes(action) ? action : undefined) : usage());\n return;\n }\n if (isResourceCommand(command)) {\n await runResourceCommand(await authenticated(), command, action, rest);\n return;\n }\n if (command === \"version\") {\n if (flag(args, \"--json\")) return print({ pluginVersion: process.env.CXCLAW_PLUGIN_VERSION ?? null, cliVersion: VERSION, toolSchemaVersion: TOOL_SCHEMA_VERSION, serverApiVersion: SERVER_API_VERSION });\n console.log(`cxclawctl ${VERSION}`); return;\n }\n if (command === \"setup\") {\n const channel = (option(args, \"--channel\") ?? \"stable\") as \"stable\" | \"canary\" | \"dev\";\n await installMarketplace(channel); await login(option(args, \"--server\", true)!, channel); await installScheduler(); return;\n }\n if (command === \"auth\") return runAuth(action, rest);\n if (command === \"login\" || command === \"logout\") return runAuth(command, args.slice(1));\n if (command === \"tenant\" || command === \"context\") return runTenant(action, rest);\n if (command === \"runtime\") return print(await runRuntime(action, rest));\n if (command === \"workflow\") return print(await runSolveaKitWorkflow(action, rest));\n if (command === \"support\") return print(await runSupport(await authenticated(), action, rest));\n if (command === \"agent-builder\") return print(await runAgentBuilder([\"validate\", \"compile\", \"merge-source\", \"validate-tool\", \"migration\", \"replay\"].includes(action ?? \"\") ? undefined : await authenticated(), action, rest));\n if (command === \"agent-tester\") return print(await runAgentTester(action === \"create-sheet\" ? undefined : await authenticated(), action, rest));\n if (command === \"delivery\") return print(await runDelivery([\"classify\", \"plan\", \"report\", \"render\", \"render-report\", \"excel\", \"gen-excel\", \"render-summary\"].includes(action ?? \"\") ? undefined : await authenticated(), action, rest));\n if (command === \"poc\") return print(await runPoc([\"classify\", \"plan\", \"report\", \"render\", \"render-report\", \"excel\", \"gen-excel\", \"manual\", \"render-summary\"].includes(action ?? \"\") ? undefined : await authenticated(), action, rest));\n if (command === \"kb-builder\") return print(await runKbBuilder([\"crawl\", \"directory-plan\", \"extract-web-qa\", \"extract-ticket-qa\", \"batch-extract-ticket-qa\"].includes(action ?? \"\") ? undefined : await authenticated(), action, rest));\n if (command === \"solvea-desk\") return print(await runDesk(await authenticated(), action, rest));\n if (command === \"api\") { if (!action) throw new Error(\"api command is required\"); await runApi(await authenticated(), action, rest); return; }\n if (command === \"sls\" && action === \"query\") {\n return print(await slsQuery(await authenticated(), {\n from: Number(option(rest, \"--from\", true)), to: Number(option(rest, \"--to\", true)),\n query: option(rest, \"--query\", true)!, line: Number(option(rest, \"--line\") ?? 50),\n offset: Number(option(rest, \"--offset\") ?? 0), reverse: flag(rest, \"--reverse\"),\n }));\n }\n if (command === \"doctor\") return print(await diagnose());\n if (command === \"update\") {\n if (flag(args, \"--install-scheduler\")) { await installScheduler(); return print({ ok: true, schedulerInstalled: true }); }\n if (flag(args, \"--scheduled\")) await new Promise(resolve => setTimeout(resolve, Math.random() * 1_800_000));\n return print(await update());\n }\n if (command === \"commands\" || command === \"capabilities\") console.log(await readFile(new URL(\"../capabilities.lock.json\", import.meta.url), \"utf8\"));\n else throw new Error(`unknown command: ${command}`);\n}\n\nmain().catch(error => {\n console.error(`cxclawctl: ${error instanceof Error ? error.message : String(error)}`);\n process.exitCode = 1;\n});\n","import open from \"open\";\nimport { post } from \"./http.js\";\nimport { deleteSession, loadSession, saveSession } from \"./store.js\";\nimport type { DeviceStart, Session, TokenResponse } from \"./types.js\";\nimport { VERSION } from \"./version.js\";\n\nconst sleep=(ms:number)=>new Promise(r=>setTimeout(r,ms));\nexport async function login(serverUrl:string, channel:Session[\"channel\"]):Promise<Session>{\n const session:Session={serverUrl:serverUrl.replace(/\\/$/,\"\"),channel,accessToken:\"\",refreshToken:\"\",accessExpiry:0,employeeId:\"\",email:\"\"};\n const start=await post<DeviceStart>(session,\"/auth/device/start\",{clientVersion:VERSION});\n console.error(`请在浏览器打开以下地址完成钉钉授权:\\n${start.verificationUriComplete}\\n设备码:${start.userCode}`);\n await open(start.verificationUriComplete).catch(()=>undefined);\n const deadline=Date.now()+start.expiresIn*1000;\n while(Date.now()<deadline){ await sleep(Math.max(2,start.interval)*1000); try {\n const token=await post<TokenResponse>(session,\"/auth/device/token\",{deviceCode:start.deviceCode,clientVersion:VERSION});\n Object.assign(session,{accessToken:token.accessToken,refreshToken:token.refreshToken,accessExpiry:Math.floor(Date.now()/1000)+token.expiresIn,employeeId:token.employee.id,email:token.employee.email}); await saveSession(session); return session;\n } catch(error){ if(!String(error).includes(\"428\")) throw error; } }\n throw new Error(\"device authorization expired\");\n}\nexport async function ensureAccess(session:Session):Promise<Session>{\n if(session.accessToken && Date.now()/1000+30<session.accessExpiry)return session;\n const token=await post<TokenResponse>(session,\"/auth/refresh\",{refreshToken:session.refreshToken,clientVersion:VERSION});\n Object.assign(session,{accessToken:token.accessToken,refreshToken:token.refreshToken,accessExpiry:Math.floor(Date.now()/1000)+token.expiresIn}); await saveSession(session); return session;\n}\nexport async function authenticated(){return ensureAccess(await loadSession())}\nexport async function logout(){let session:Session|undefined;try{session=await loadSession()}catch{};if(session?.refreshToken)await post(session,\"/auth/logout\",{refreshToken:session.refreshToken}).catch(()=>undefined);await deleteSession()}\n","{\n \"name\": \"@shulex/cxclawctl\",\n \"version\": \"0.1.5\",\n \"description\": \"Solvea CXClaw CLI and Codex plugin runtime\",\n \"type\": \"module\",\n \"bin\": {\n \"cxclawctl\": \"./bin/cxclawctl.mjs\"\n },\n \"files\": [\n \"bin\",\n \"dist/cli.js\",\n \"dist/cli.js.map\",\n \"capabilities.lock.json\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsx src/cli.ts\",\n \"typecheck\": \"tsc --noEmit\",\n \"test\": \"bun test --path-ignore-patterns _tmp_\",\n \"check:capabilities\": \"tsx scripts/check-capabilities.ts\",\n \"check:release\": \"tsx scripts/check-release.ts\",\n \"test:package\": \"tsx scripts/test-packed-package.ts\",\n \"release:prepare\": \"tsx scripts/prepare-release.ts\",\n \"package:agent-plugin\": \"node scripts/package-agent-plugin.mjs\",\n \"package:codex-plugin\": \"node scripts/package-codex-plugin.mjs\"\n },\n \"engines\": {\n \"node\": \">=22\"\n },\n \"dependencies\": {\n \"@alicloud/log\": \"^1.2.6\",\n \"@napi-rs/keyring\": \"^2.1.2\",\n \"compare-versions\": \"^6.1.1\",\n \"exceljs\": \"^4.4.0\",\n \"open\": \"^10.2.0\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^25.0.0\",\n \"bun-types\": \"^1.3.13\",\n \"tsup\": \"^8.5.0\",\n \"tsx\": \"^4.21.0\",\n \"typescript\": \"^5.9.0\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/SolveaCX/cx_claw_codex.git\"\n },\n \"license\": \"UNLICENSED\"\n}\n","import packageJson from \"../package.json\" with { type: \"json\" };\nexport const VERSION = packageJson.version;\nexport const TOOL_SCHEMA_VERSION = \"1\";\nexport const SERVER_API_VERSION = \"1\";\n","import type { Session } from \"./types.js\";\nimport { VERSION } from \"./version.js\";\n\nexport function unwrap<T>(value: unknown): T {\n if (value && typeof value === \"object\" && Object.keys(value).length === 1 && \"data\" in value) return (value as {data:T}).data;\n return value as T;\n}\nexport async function request<T>(session: Session, path: string, init: RequestInit = {}, tenant = false): Promise<T> {\n const headers = new Headers(init.headers); headers.set(\"content-type\", \"application/json\"); headers.set(\"x-cxclaw-client-version\", VERSION);\n if (session.accessToken) headers.set(\"authorization\", `Bearer ${session.accessToken}`);\n if (tenant) { if (!session.tenant?.context) throw new Error(\"no tenant selected; run npx --yes @shulex/cxclawctl@latest tenant use\"); headers.set(\"x-cxclaw-tenant-context\", session.tenant.context); }\n let last: unknown;\n for (let attempt=0; attempt<3; attempt++) {\n try {\n const response = await fetch(`${session.serverUrl.replace(/\\/$/,\"\")}${path}`, {...init, headers, signal: AbortSignal.timeout(30_000)});\n const text = await response.text(); const value = text ? JSON.parse(text) : undefined;\n if (!response.ok) throw new Error(`server returned ${response.status}: ${text}`);\n return unwrap<T>(value);\n } catch (error) { last=error; if (attempt<2) await new Promise(r=>setTimeout(r,200*2**attempt)); }\n }\n throw last;\n}\nexport const post = <T>(session:Session,path:string,body:unknown,tenant=false) => request<T>(session,path,{method:\"POST\",body:JSON.stringify(body)},tenant);\n","import { AsyncEntry } from \"@napi-rs/keyring\";\nimport type { Session } from \"./types.js\";\n\nconst options = process.platform === \"linux\" ? { linux: { store: \"secret-service\" as const } } : undefined;\nconst entry = () => new AsyncEntry(\"com.solvea.cxclaw\", \"session\", options);\n\nexport async function loadSession(): Promise<Session> {\n const raw = await entry().getPassword();\n if (!raw) throw new Error(\"未登录,请先运行 cxclawctl auth login\");\n return JSON.parse(raw) as Session;\n}\nexport async function saveSession(session: Session): Promise<void> {\n if (!session.refreshToken) throw new Error(\"refusing to persist an empty session\");\n await entry().setPassword(JSON.stringify(session));\n}\nexport async function deleteSession(): Promise<void> { await entry().deleteCredential(); }\n","export function option(args: string[], name: string, required = false) {\n const index = args.indexOf(name);\n const value = index >= 0 ? args[index + 1] : undefined;\n if (required && !value) throw new Error(`${name} is required`);\n return value;\n}\n\nexport function options(args: string[], name: string) {\n const values: string[] = [];\n for (let index = 0; index < args.length; index += 1) {\n if (args[index] === name && args[index + 1] && !args[index + 1].startsWith(\"-\")) values.push(args[index + 1]);\n }\n return values;\n}\n\nexport function optionList(args: string[], name: string) {\n const index = args.indexOf(name);\n if (index < 0) return [];\n const values: string[] = [];\n for (let cursor = index + 1; cursor < args.length && !args[cursor].startsWith(\"-\"); cursor += 1) values.push(args[cursor]);\n return values;\n}\n\nexport function flag(args: string[], name: string) { return args.includes(name); }\n\nexport function positionals(args: string[]) {\n const out: string[] = [];\n for (let index = 0; index < args.length; index += 1) {\n if (args[index].startsWith(\"--\")) {\n if (![\"--pretty\", \"--reverse\", \"--scheduled\", \"--install-scheduler\"].includes(args[index])) index += 1;\n } else out.push(args[index]);\n }\n return out;\n}\n","import { dirname, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { Session } from \"./types.js\";\nimport { isNativeSolveaCommand, runSolveaCommand } from \"./solvea/commands.js\";\n\nexport const packageRoot=()=>resolve(dirname(fileURLToPath(import.meta.url)),\"..\");\nexport async function runApi(session:Session,command:string,args:string[]){\n if (isNativeSolveaCommand(command)) {\n console.log(JSON.stringify(await runSolveaCommand(session, command, args), null, 2));\n return;\n }\n throw new Error(`unknown TypeScript API command: ${command}`);\n}\n","import { readFile } from \"node:fs/promises\";\nimport { option, positionals, flag } from \"../args.js\";\nimport type { Session } from \"../types.js\";\nimport { SolveaClient } from \"./client.js\";\nimport { EXTENDED_COMMANDS, runExtendedCommand } from \"./extended-commands.js\";\nimport { REMAINING_COMMANDS, runRemainingCommand } from \"./remaining-commands.js\";\n\ntype JsonObject = Record<string, unknown>;\n\nfunction requireFlag(args: string[], name: string, command: string) {\n if (!flag(args, name)) throw new Error(`${command} requires ${name} after explicit user acknowledgement`);\n}\n\nfunction enabled(args: string[], command: string) {\n const enable = flag(args, \"--enable\");\n const disable = flag(args, \"--disable\");\n if (enable === disable) throw new Error(`${command} requires exactly one of --enable or --disable`);\n return enable;\n}\n\nasync function data(args: string[]): Promise<JsonObject> {\n const file = option(args, \"--data-file\");\n const raw = file ? await readFile(file, \"utf8\") : option(args, \"--data\");\n if (!raw) throw new Error(\"--data or --data-file is required\");\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) throw new Error(\"request data must be a JSON object\");\n return parsed as JsonObject;\n}\n\nasync function transcriptFilters(args: string[]): Promise<JsonObject> {\n const filters: JsonObject = {\n pageIndex: Number(option(args, \"--page\") ?? 1),\n pageSize: Number(option(args, \"--page-size\") ?? 50),\n debug: flag(args, \"--debug\"),\n ...(await optionalData(args)),\n };\n const optional: Array<[string, string, (value: string) => unknown]> = [\n [\"beginTimestamp\", \"--begin-ts\", Number], [\"endTimestamp\", \"--end-ts\", Number],\n [\"touchPoint\", \"--touch-point\", String], [\"botId\", \"--bot-id\", Number],\n [\"agentId\", \"--agent-id\", Number], [\"intentId\", \"--intent-id\", Number],\n [\"keyword\", \"--keyword\", String], [\"handoff\", \"--handoff\", value => value === \"true\"],\n ];\n for (const [field, name, convert] of optional) {\n const value = option(args, name);\n if (value !== undefined) filters[field] = convert(value);\n }\n return filters;\n}\n\nasync function knowledgeFilters(args: string[]): Promise<JsonObject> {\n const filters: JsonObject = {\n type: \"ALL\",\n pageIndex: 1,\n pageSize: 50,\n keyword: \"\",\n ...(await optionalData(args)),\n };\n const optional: Array<[string, string, (value: string) => unknown]> = [\n [\"type\", \"--type\", String],\n [\"pageIndex\", \"--page\", Number],\n [\"pageSize\", \"--page-size\", Number],\n [\"keyword\", \"--keyword\", String],\n ];\n for (const [field, name, convert] of optional) {\n const value = option(args, name);\n if (value !== undefined) filters[field] = convert(value);\n }\n return filters;\n}\n\n/** Native TypeScript business commands. Keep this table explicit so every command has a reviewable contract. */\nexport async function runSolveaCommand(session: Session, command: string, args: string[]): Promise<unknown> {\n const client = new SolveaClient(session);\n if (EXTENDED_COMMANDS.has(command)) return runExtendedCommand(client, command, args);\n if (REMAINING_COMMANDS.has(command)) return runRemainingCommand(client, command, args);\n if (command.startsWith(\"chat-report-\")) return runRemainingCommand(client, \"report-message\", args);\n const id = () => option(args, \"--id\", true)!;\n switch (command) {\n case \"get-project\": return client.projectInfo();\n case \"list-agents\": return client.listAgents(option(args, \"--category\") ?? \"text\");\n case \"get-agent\": return client.getAgent(id());\n case \"get-chatflow-graph\": return client.getChatflowGraph(option(args, \"--agent-id\", true)!);\n case \"create-agent\": return client.createAgent(await data(args));\n case \"update-agent\": return client.updateAgent(await data(args));\n case \"list-plugins\": return client.listPlugins();\n case \"get-plugin\": return client.getPlugin(id());\n case \"create-plugin\": return client.createPlugin(await data(args));\n case \"update-plugin\": return client.updatePlugin(await data(args));\n case \"delete-plugin\": requireFlag(args, \"--confirm-delete\", command); return client.deletePlugin(id());\n case \"chat\": return client.chat({ message: option(args, \"--message\") ?? option(args, \"-m\", true), botId: option(args, \"--bot-id\"), chatId: option(args, \"--chat-id\"), touchPoint: option(args, \"--touch-point\") ?? \"LIVE_CHAT\", ...(await optionalData(args)) });\n case \"chat-async\": return client.chatAsync({ message: option(args, \"--message\") ?? option(args, \"-m\", true), botId: option(args, \"--bot-id\"), chatId: option(args, \"--chat-id\"), touchPoint: option(args, \"--touch-point\") ?? \"LIVE_CHAT\", ...(await optionalData(args)) });\n case \"get-async-result\": return client.asyncResult(option(args, \"--receipt\", true)!, option(args, \"--bot-id\"));\n case \"list-intents\": return client.listIntents(option(args, \"--category\") ?? \"E_COMMERCE\");\n case \"get-intent\": return client.getIntent(id());\n case \"create-intent\": return client.createIntent(await data(args));\n case \"update-intent\": return client.updateIntent(id(), await data(args));\n case \"toggle-intent\": return client.toggleIntent(id(), !flag(args, \"--disable\"));\n case \"list-entities\": return client.listEntities();\n case \"list-strategies\": return client.listStrategies(Number(option(args, \"--page-size\") ?? 100));\n case \"create-strategy\": return client.createStrategy(await data(args));\n case \"update-strategy\": return client.updateStrategy(id(), await data(args));\n case \"toggle-strategy\": return client.toggleStrategy(id(), !flag(args, \"--disable\"));\n case \"get-quality-status\": return client.qualityStatus();\n case \"set-quality-status\": return client.setQualityStatus(enabled(args, command));\n case \"list-quality-rules\": return client.qualityRules(Number(option(args, \"--begin-ts\") ?? 0) || undefined, Number(option(args, \"--end-ts\") ?? 0) || undefined);\n case \"get-quality-rule\": return client.qualityRule(option(args, \"--inspection-key\", true)!);\n case \"update-quality-rule\": return client.updateQualityRule(await data(args));\n case \"get-custom-quality-rule\": return client.customQualityRule(option(args, \"--inspection-key\", true)!);\n case \"create-custom-quality-rule\": return client.createCustomQualityRule(await data(args));\n case \"update-custom-quality-rule\": return client.updateCustomQualityRule(await data(args));\n case \"delete-custom-quality-rule\": return client.deleteCustomQualityRule(option(args, \"--inspection-key\", true)!);\n case \"list-knowledge\": return client.listKnowledge(await knowledgeFilters(args));\n case \"get-knowledge\": return client.getKnowledge(id());\n case \"update-knowledge\": return client.updateKnowledge(id(), await data(args));\n case \"upload-qa\": return client.uploadQa((await data(args)).items as unknown[]);\n case \"list-directories\": return client.listDirectories();\n case \"create-folder\": return client.createFolder(option(args, \"--name\", true)!, Number(option(args, \"--parent-id\") ?? 0));\n case \"update-directory\": return client.updateDirectory(id(), option(args, \"--name\") ? { name: option(args, \"--name\") } : await data(args));\n case \"delete-directory\": requireFlag(args, \"--confirm-delete\", command); return client.deleteDirectory(id());\n case \"list-knowledge-tags\": return client.knowledgeTags(option(args, \"--keyword\") ?? \"\");\n case \"get-transcript\": return client.transcript(option(args, \"--chat-id\", true)!);\n case \"list-transcripts\": return client.listTranscripts(await transcriptFilters(args));\n case \"get-chat-context\": return client.chatContext(option(args, \"--bot-id\", true)!, await data(args));\n default: throw new Error(`TypeScript command not migrated yet: ${command}`);\n }\n}\n\nasync function optionalData(args: string[]) {\n if (!option(args, \"--data\") && !option(args, \"--data-file\")) return {};\n return data(args);\n}\n\nexport function isNativeSolveaCommand(command: string) {\n return command.startsWith(\"chat-report-\") || EXTENDED_COMMANDS.has(command) || REMAINING_COMMANDS.has(command) || new Set([\n \"get-project\", \"list-agents\", \"get-agent\", \"get-chatflow-graph\", \"create-agent\", \"update-agent\",\n \"list-plugins\", \"get-plugin\", \"create-plugin\", \"update-plugin\", \"delete-plugin\", \"chat\", \"chat-async\",\n \"get-async-result\", \"list-intents\", \"get-intent\", \"create-intent\", \"update-intent\", \"toggle-intent\",\n \"list-entities\", \"list-strategies\", \"create-strategy\", \"update-strategy\", \"toggle-strategy\",\n \"get-transcript\", \"list-transcripts\", \"get-chat-context\", \"get-quality-status\", \"set-quality-status\",\n \"list-quality-rules\", \"get-quality-rule\", \"update-quality-rule\", \"get-custom-quality-rule\",\n \"create-custom-quality-rule\", \"update-custom-quality-rule\", \"delete-custom-quality-rule\",\n \"list-knowledge\", \"get-knowledge\", \"update-knowledge\", \"upload-qa\", \"list-directories\",\n \"create-folder\", \"update-directory\", \"delete-directory\", \"list-knowledge-tags\",\n ]).has(command);\n}\n","import type { Session } from \"../types.js\";\n\ntype JsonObject = Record<string, unknown>;\n\n/**\n * Typed transport for the tenant business API.\n * Authentication is deliberately request-local: a tenant token is never\n * copied into process.env or a module-level singleton.\n */\nexport class SolveaClient {\n private project?: string;\n private bot?: string;\n\n constructor(private readonly session: Session) {\n if (!session.tenant?.businessUrl || !session.tenant.businessToken) {\n throw new Error(\"no tenant selected; run tenant use before a business command\");\n }\n }\n\n private get baseUrl() { return this.session.tenant!.businessUrl!.replace(/\\/$/, \"\"); }\n private get env() { return this.session.tenant!.environment; }\n\n async request<T>(method: string, path: string, body?: unknown, query?: Record<string, string | number | boolean>): Promise<T> {\n const url = new URL(`${this.baseUrl}${path}`);\n for (const [key, value] of Object.entries(query ?? {})) url.searchParams.set(key, String(value));\n const cookie = this.env === \"prod\" ? \"_token\" : \"_token_staging\";\n const headers = new Headers({\n accept: \"application/json, text/plain, */*\",\n origin: this.baseUrl,\n referer: `${this.baseUrl}/chatbot`,\n cookie: `${cookie}=${this.session.tenant!.businessToken}`,\n \"x-cxclaw-client-version\": process.env.CXCLAW_PLUGIN_VERSION ?? \"unknown\",\n });\n if (body !== undefined) headers.set(\"content-type\", \"application/json\");\n let last: unknown;\n for (let attempt = 0; attempt < 3; attempt += 1) {\n try {\n const response = await fetch(url, {\n method,\n headers,\n body: body === undefined ? undefined : JSON.stringify(body),\n signal: AbortSignal.timeout(30_000),\n });\n const text = await response.text();\n let value: unknown;\n try { value = text ? JSON.parse(text) : undefined; } catch { value = { raw: text }; }\n if (!response.ok) throw new Error(`HTTP ${response.status} ${method} ${path}: ${text}`);\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n const object = value as JsonObject;\n const code = object.code ?? object.errno;\n if (code !== undefined && ![0, \"0\", 200, \"200\", \"OK\", \"SUCCESS\"].includes(code as never)) {\n throw new Error(`API error ${method} ${path}: ${String(object.msg ?? object.message ?? object.error ?? code)}`);\n }\n if (object.success === false) throw new Error(`API error ${method} ${path}: ${String(object.msg ?? object.message ?? object.error ?? \"request failed\")}`);\n }\n return value as T;\n } catch (error) {\n last = error;\n if (attempt < 2) await new Promise(resolve => setTimeout(resolve, 200 * 2 ** attempt));\n }\n }\n throw last;\n }\n\n private async post<T>(path: string, body: unknown) { return this.request<T>(\"POST\", path, body); }\n private async get<T>(path: string, query?: Record<string, string | number | boolean>) { return this.request<T>(\"GET\", path, undefined, query); }\n private async put<T>(path: string, body: unknown) { return this.request<T>(\"PUT\", path, body); }\n\n async rawCall<T = unknown>(method: string, path: string, body?: unknown, query?: Record<string, string | number | boolean>) {\n return this.request<T>(method, path, body, query);\n }\n\n private safePathSegment(value: string, name: string) {\n if (!value || value === \".\" || value === \"..\" || /[\\\\/?#%\\u0000-\\u001f\\u007f]/.test(value)) {\n throw new Error(`${name} must be a safe non-empty path segment`);\n }\n return encodeURIComponent(value);\n }\n\n async projectInfo() { return this.get<unknown[]>(\"/api_v2/gpt/bots\"); }\n async projectId() {\n if (!this.project) {\n const rows = await this.projectInfo();\n const first = Array.isArray(rows) ? rows[0] as JsonObject | undefined : undefined;\n this.project = String(first?.projectId ?? 950);\n this.bot = String(first?.id ?? \"\");\n }\n return this.project;\n }\n async botId() { if (!this.bot) await this.projectId(); return this.bot || \"723\"; }\n\n async listAgents(category = \"text\") { return this.post(\"/api_v2/gpt/ap/queryAgent\", { projectId: Number(await this.projectId()), needRelation: true, noMeta: true, category }); }\n async getAgent(id: string) { return this.post(\"/api_v2/gpt/ap/queryAgent\", { projectId: Number(await this.projectId()), agentId: Number(id), needRelation: true, squareAgent: false }); }\n async getChatflowGraph(id: string) { return this.post(\"/api_v2/gpt/chatflow/queryGraph/latest\", { agentId: Number(id) }); }\n async createAgent(data: JsonObject) { return this.post(\"/api_v2/gpt/ap/createAgent\", { projectId: Number(await this.projectId()), ...data }); }\n async updateAgent(data: JsonObject) { return this.post(\"/api_v2/gpt/ap/updateAgent\", data); }\n async updateChatflow(agentId: string, graph: JsonObject, publish = false) {\n const current = await this.getAgent(agentId);\n const agent = Array.isArray(current) ? current[0] as JsonObject : current as JsonObject;\n if (!agent || agent.type !== \"CHAT_FLOW\") throw new Error(`Agent ${agentId} is not CHAT_FLOW`);\n const payload = { ...agent, agentId: agent.id ?? Number(agentId), meta: { ...(agent.meta as JsonObject ?? {}), chatFlowGraph: graph } };\n return this.updateAgent({ ...payload, ...(publish ? { publish: true } : {}) });\n }\n\n async listPlugins() { return this.post(\"/api_v2/gpt/ap/queryPlugin\", { projectId: Number(await this.projectId()), needRelation: false }); }\n async getPlugin(id: string) { return this.post(\"/api_v2/gpt/ap/queryPlugin\", { projectId: Number(await this.projectId()), pluginId: Number(id), convertStrategyV5: true }); }\n async createPlugin(data: JsonObject) { return this.post(\"/api_v2/gpt/ap/createPlugin\", { projectId: Number(await this.projectId()), ...data }); }\n async updatePlugin(data: JsonObject) { return this.post(\"/api_v2/gpt/ap/updatePlugin\", { projectId: Number(await this.projectId()), ...data }); }\n async deletePlugin(id: string) { return this.post(\"/api_v2/gpt/ap/deletePlugin\", { projectId: Number(await this.projectId()), pluginId: Number(id) }); }\n async runPlugin(config: unknown, requestBody?: JsonObject) {\n return this.post(\"/api_v2/gpt/ap/runHttpPlugin\", {\n projectId: Number(await this.projectId()), botId: Number(await this.botId()),\n externalHttpCallConfig: config,\n ...(requestBody === undefined ? {} : { externalHttpCallRequestBody: requestBody }),\n });\n }\n async replaceMockData(type: string, records: unknown[]) {\n if (records.length > 10_000) throw new Error(\"records must contain at most 10000 items\");\n return this.post(`/api_v2/gpt/mockdata/reAddMockData/${this.safePathSegment(type, \"mock type\")}`, records);\n }\n async queryMockData(type: string) { return this.get(\"/api_v2/gpt/mockdata/queryMockData\", { type: this.safePathSegment(type, \"mock type\"), globalData: false }); }\n\n async listAiFields() { return this.post(\"/api_v2/gpt/chatflow/queryAiFields\", {}); }\n async listAgentAiFields() { return this.post(\"/api_v2/gpt/field/list/range\", { fieldRange: [\"all\", \"agent\", \"agent_preload_visible\"] }); }\n async aiFieldGuide() { return this.post(\"/api_v2/tars/api/field/manage/guide/record\", {}); }\n async initializeAiFields() { return this.get(\"/api_v2/tars/api/field/manage/pre/install\"); }\n async listManagedAiFields(pageIndex: number, pageSize: number, name: string) {\n return this.post(\"/api_v2/tars/api/field/manage/page\", { pageIndex, pageSize, name });\n }\n async getManagedAiField(id: string) { return this.get(`/api_v2/tars/api/field/manage/detail/${encodeURIComponent(id)}`); }\n async createManagedAiField(data: JsonObject) { return this.post(\"/api_v2/tars/api/field/manage/create\", data); }\n async updateManagedAiField(data: JsonObject) { return this.post(\"/api_v2/tars/api/field/manage/update\", data); }\n async deleteManagedAiField(id: string) { return this.get(`/api_v2/tars/api/field/manage/delete/${encodeURIComponent(id)}`); }\n async toggleManagedAiField(id: string) { return this.get(`/api_v2/tars/api/field/manage/switch/${encodeURIComponent(id)}`); }\n\n async chat(data: JsonObject) { const bot = String(data.botId ?? await this.botId()); return this.post(`/api_v2/gpt/bot/${bot}/chat`, { botId: Number(bot), projectId: Number(await this.projectId()), option: { debug: true }, ...data }); }\n async chatAsync(data: JsonObject) { const bot = String(data.botId ?? await this.botId()); return this.post(`/api_v2/gpt/bot/${bot}/chat/async`, { botId: Number(bot), projectId: Number(await this.projectId()), option: { debug: true }, ...data }); }\n async asyncResult(receipt: string, botId?: string) { const bot = botId ?? await this.botId(); return this.get(`/api_v2/gpt/bot/${bot}/chat/async/${encodeURIComponent(receipt)}`); }\n\n async listIntents(category = \"E_COMMERCE\") { return this.get(`/api_v2/gpt/project/${await this.projectId()}/intents`, category ? { category } : undefined); }\n async getIntent(id: string) { return this.get(`/api_v2/gpt/project/${await this.projectId()}/intent/${encodeURIComponent(id)}`); }\n async createIntent(data: JsonObject) { return this.post(`/api_v2/gpt/project/${await this.projectId()}/intent`, data); }\n async updateIntent(id: string, data: JsonObject) { return this.put(`/api_v2/gpt/project/${await this.projectId()}/intent/${encodeURIComponent(id)}`, data); }\n async toggleIntent(id: string, enabled: boolean) { return this.put(`/api_v2/gpt/project/${await this.projectId()}/intent/${encodeURIComponent(id)}/status`, { status: enabled ? \"ENABLED\" : \"DISABLED\" }); }\n\n async listEntities() { return this.get(`/api_v2/gpt/project/${await this.projectId()}/entities`); }\n async listStrategies(pageSize = 100) { return this.get(`/api_v2/gpt/project/${await this.projectId()}/strategies`, { pageSize, pageNum: 1 }); }\n async createStrategy(data: JsonObject) { return this.post(`/api_v2/gpt/project/${await this.projectId()}/strategy?v4=true`, data); }\n async updateStrategy(id: string, data: JsonObject) { return this.request(\"PUT\", `/api_v2/gpt/project/${await this.projectId()}/strategy/${encodeURIComponent(id)}`, data); }\n async toggleStrategy(id: string, enabled: boolean) { return this.request(\"PUT\", `/api_v2/gpt/project/${await this.projectId()}/strategy/${encodeURIComponent(id)}/status`, { status: enabled ? \"ENABLED\" : \"DISABLED\" }); }\n\n async qualityStatus() { return this.get(\"/api_v2/intelli/inspection/ticket/status\"); }\n async setQualityStatus(enabled: boolean) { return this.post(\"/api_v2/intelli/inspection/ticket/open\", { open: enabled, projectId: Number(await this.projectId()) }); }\n async qualityRules(beginTimestamp?: number, endTimestamp?: number) { return this.get(\"/api_v2/intelli/inspection/ticket/rules\", { ...(beginTimestamp === undefined ? {} : { beginTimestamp }), ...(endTimestamp === undefined ? {} : { endTimestamp }) }); }\n async qualityRule(key: string) { return this.get(\"/api_v2/intelli/inspection/ticket/rules/detail\", { inspectionKey: key }); }\n async updateQualityRule(data: JsonObject) { return this.post(\"/api_v2/intelli/inspection/ticket/rules\", data); }\n async customQualityRule(key: string) { return this.post(\"/api_v2/intelli/inspection/ticket/customRules/detail\", { inspectionKey: key }); }\n async createCustomQualityRule(data: JsonObject) { return this.post(\"/api_v2/intelli/inspection/ticket/customRules/create\", data); }\n async updateCustomQualityRule(data: JsonObject) { return this.post(\"/api_v2/intelli/inspection/ticket/customRules/update\", data); }\n async deleteCustomQualityRule(key: string) { return this.post(\"/api_v2/intelli/inspection/ticket/customRules/delete\", { inspectionKey: key }); }\n async listQualityAlertRules() { return this.get(\"/api_v2/intelli/inspection/alert/list\"); }\n async getQualityAlertRule(id: string) { return this.get(\"/api_v2/intelli/inspection/alert/detail\", { id }); }\n async createQualityAlertRule(data: JsonObject) { return this.post(\"/api_v2/intelli/inspection/alert/create\", data); }\n async updateQualityAlertRule(data: JsonObject) { return this.post(\"/api_v2/intelli/inspection/alert/update\", data); }\n async deleteQualityAlertRule(id: string) { return this.get(\"/api_v2/intelli/inspection/alert/delete\", { id }); }\n async listQualityAlertMessages(data: JsonObject) { return this.post(\"/api_v2/intelli/inspection/alert/message/list\", data); }\n async getQualityAlertMessage(id: string) { return this.get(\"/api_v2/intelli/inspection/alert/message/detail\", { id }); }\n\n async listTemplates(data: JsonObject) { return this.post(`/api_v2/gpt/project/${await this.projectId()}/templates/filter`, data); }\n async createTemplate(data: JsonObject) {\n const content = String(data.content ?? \"\");\n return this.post(`/api_v2/gpt/project/${await this.projectId()}/template`, {\n name: data.name, content, status: data.status ?? \"ENABLED\",\n multiContent: data.multiContent ?? { AUTO: content },\n ...(data.scene ? { scene: data.scene } : {}),\n });\n }\n async updateTemplate(id: string, data: JsonObject) {\n return this.put(`/api_v2/gpt/project/${await this.projectId()}/template/${encodeURIComponent(id)}`, data);\n }\n async deleteTemplates(ids: number[]) {\n return this.request(\"DELETE\", `/api_v2/gpt/project/${await this.projectId()}/templates`, { templateIds: ids });\n }\n\n private get qamPrefix() { return this.env === \"prod\" ? \"/api_v2/qam\" : \"/sns_v1\"; }\n get qamPath() { return this.qamPrefix; }\n async listKnowledge(data: JsonObject) { return this.post(`${this.qamPrefix}/project/${await this.projectId()}/getKnowledge`, { type: \"ALL\", pageIndex: 1, pageSize: 50, keyword: \"\", ...data }); }\n async getKnowledge(id: string) { return this.get(`${this.qamPrefix}/project/${await this.projectId()}/ku/${encodeURIComponent(id)}`); }\n async updateKnowledge(id: string, data: JsonObject) { return this.request(\"PUT\", `${this.qamPrefix}/project/${await this.projectId()}/ku`, { ...data, kuId: Number(id) }); }\n async uploadQa(items: unknown[]) { return this.post(`${this.qamPrefix}/project/${await this.projectId()}/kus`, items); }\n async listDirectories() { return this.get(`${this.qamPrefix}/project/${await this.projectId()}/directories`, { keyword: \"\", kuPublished: \"\" }); }\n async createFolder(name: string, parentId = 0) { return this.post(`${this.qamPrefix}/project/${await this.projectId()}/directory`, { name, parentId, type: \"GENERIC\" }); }\n async updateDirectory(id: string, data: JsonObject) { return this.request(\"PUT\", `${this.qamPrefix}/project/${await this.projectId()}/directory/${encodeURIComponent(id)}`, data); }\n async deleteDirectory(id: string) { return this.request(\"DELETE\", `${this.qamPrefix}/project/${await this.projectId()}/directory/${encodeURIComponent(id)}`); }\n async knowledgeTags(keyword = \"\") { return this.get(`${this.qamPrefix}/project/${await this.projectId()}/searchKeywordAndIntents`, { keyword }); }\n\n async transcript(chatId: string) { return this.get(`/api_v2/gpt/project/${await this.projectId()}/transcript/${encodeURIComponent(chatId)}`, { isCompare: true }); }\n async listTranscripts(data: JsonObject) { return this.post(`/api_v2/gpt/project/${await this.projectId()}/transcripts/filter`, data); }\n async resolveTranscriptChatId(externalId: string, pageSize = 10) {\n const result = await this.listTranscripts({ pageSize, pageIndex: 1, debug: false, keyword: externalId });\n const rows = Array.isArray(result) ? result : (result as JsonObject)?.list;\n const items = Array.isArray(rows) ? rows.filter(row => row && typeof row === \"object\") as JsonObject[] : [];\n const exact = items.filter(row => String(row.externId ?? row.externalId ?? row.external_id ?? \"\") === externalId);\n const matches = (exact.length ? exact : items).map(row => ({ chatId: row.chatId ?? row.id, externalId: row.externId ?? row.externalId ?? row.external_id, agentName: row.agentName ?? \"\", touchPoint: row.touchPoint ?? row.touchpoint ?? \"\", createdAt: row.createdAt ?? \"\" }));\n return { externalId, chatId: exact.length || matches.length === 1 ? matches[0]?.chatId ?? null : null, matchedBy: exact.length ? \"exactExternalId\" : \"keyword\", matches };\n }\n async chatContext(botId: string, data: JsonObject) { return this.post(`/api_v2/gpt/bot/${encodeURIComponent(botId)}/chat/context/compare`, data); }\n}\n","import { readFile } from \"node:fs/promises\";\nimport { flag, option } from \"../args.js\";\n\nexport type JsonObject = Record<string, unknown>;\n\nexport async function jsonData(args: string[], required = true): Promise<JsonObject> {\n const file = option(args, \"--data-file\");\n const raw = file ? await readFile(file, \"utf8\") : option(args, \"--data\");\n if (!raw) {\n if (required) throw new Error(\"--data or --data-file is required\");\n return {};\n }\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) throw new Error(\"request data must be a JSON object\");\n return parsed as JsonObject;\n}\n\nexport async function jsonValue(args: string[]): Promise<unknown> {\n const file = option(args, \"--data-file\");\n const raw = file ? await readFile(file, \"utf8\") : option(args, \"--data\", true)!;\n return JSON.parse(raw) as unknown;\n}\n\nexport function requireFlag(args: string[], name: string, command: string) {\n if (!flag(args, name)) throw new Error(`${command} requires ${name} after explicit user acknowledgement`);\n}\n\nexport function requireId(args: string[]) { return option(args, \"--id\", true)!; }\n\nexport function enabled(args: string[], command: string) {\n const enable = flag(args, \"--enable\");\n const disable = flag(args, \"--disable\");\n if (enable === disable) throw new Error(`${command} requires exactly one of --enable or --disable`);\n return enable;\n}\n","import { option, optionList, options } from \"../args.js\";\nimport type { SolveaClient } from \"./client.js\";\nimport { jsonData, jsonValue, requireFlag, requireId, type JsonObject } from \"./input.js\";\n\ntype Handler = (client: SolveaClient, args: string[]) => Promise<unknown>;\n\nconst handlers: Record<string, Handler> = {\n \"replace-mock-data\": async (client, args) => {\n const records = await jsonValue(args);\n if (!Array.isArray(records)) throw new Error(\"replace-mock-data requires a JSON array\");\n return client.replaceMockData(option(args, \"--name\", true)!, records);\n },\n \"query-mock-data\": (client, args) => client.queryMockData(option(args, \"--name\", true)!),\n \"run-plugin\": async (client, args) => {\n const payload = await jsonData(args);\n const config = \"externalHttpCallConfig\" in payload ? payload.externalHttpCallConfig : payload;\n return client.runPlugin(config, payload.externalHttpCallRequestBody as JsonObject | undefined);\n },\n \"list-ai-fields\": client => client.listAiFields(),\n \"list-agent-ai-fields\": client => client.listAgentAiFields(),\n \"get-ai-field-guide\": client => client.aiFieldGuide(),\n \"initialize-ai-fields\": client => client.initializeAiFields(),\n \"list-managed-ai-fields\": (client, args) => client.listManagedAiFields(\n Number(option(args, \"--page\") ?? 1), Number(option(args, \"--page-size\") ?? 50), option(args, \"--keyword\") ?? \"\",\n ),\n \"get-managed-ai-field\": (client, args) => client.getManagedAiField(requireId(args)),\n \"create-managed-ai-field\": async (client, args) => client.createManagedAiField(await jsonData(args)),\n \"update-managed-ai-field\": async (client, args) => client.updateManagedAiField(await jsonData(args)),\n \"delete-managed-ai-field\": async (client, args) => {\n requireFlag(args, \"--confirm-delete\", \"delete-managed-ai-field\");\n return client.deleteManagedAiField(requireId(args));\n },\n \"toggle-managed-ai-field\": (client, args) => client.toggleManagedAiField(requireId(args)),\n \"list-quality-alert-rules\": client => client.listQualityAlertRules(),\n \"get-quality-alert-rule\": (client, args) => client.getQualityAlertRule(requireId(args)),\n \"create-quality-alert-rule\": async (client, args) => client.createQualityAlertRule(await jsonData(args)),\n \"update-quality-alert-rule\": async (client, args) => client.updateQualityAlertRule(await jsonData(args)),\n \"delete-quality-alert-rule\": async (client, args) => {\n requireFlag(args, \"--confirm-delete\", \"delete-quality-alert-rule\");\n return client.deleteQualityAlertRule(requireId(args));\n },\n \"list-quality-alert-messages\": async (client, args) => client.listQualityAlertMessages(await jsonData(args)),\n \"get-quality-alert-message\": (client, args) => client.getQualityAlertMessage(requireId(args)),\n \"list-templates\": (client, args) => client.listTemplates({\n pageIndex: Number(option(args, \"--page\") ?? 1),\n pagesize: Number(option(args, \"--page-size\") ?? 50),\n keyword: option(args, \"--keyword\") ?? \"\",\n ...(options(args, \"--scene\").length ? { scenes: options(args, \"--scene\") } : {}),\n ...(option(args, \"--status\") ? { status: [option(args, \"--status\")] } : {}),\n }),\n \"create-template\": async (client, args) => {\n const payload = await jsonData(args, false);\n if (option(args, \"--name\")) payload.name = option(args, \"--name\");\n if (option(args, \"--content\")) payload.content = option(args, \"--content\");\n if (option(args, \"--status\")) payload.status = option(args, \"--status\");\n if (options(args, \"--scene\")[0]) payload.scene = options(args, \"--scene\")[0];\n if (!payload.name || !payload.content) throw new Error(\"create-template requires name and content\");\n return client.createTemplate(payload);\n },\n \"update-template\": async (client, args) => {\n const payload = await jsonData(args, false);\n for (const [field, name] of [[\"name\", \"--name\"], [\"content\", \"--content\"], [\"status\", \"--status\"]] as const) {\n if (option(args, name)) payload[field] = option(args, name);\n }\n if (!Object.keys(payload).length) throw new Error(\"update-template requires at least one changed field\");\n return client.updateTemplate(requireId(args), payload);\n },\n \"delete-templates\": async (client, args) => {\n requireFlag(args, \"--confirm-delete\", \"delete-templates\");\n const ids = optionList(args, \"--ids\").map(Number);\n if (!ids.length || ids.some(id => !Number.isSafeInteger(id) || id <= 0)) throw new Error(\"delete-templates requires positive integer --ids\");\n return client.deleteTemplates(ids);\n },\n};\n\nexport const EXTENDED_COMMANDS = new Set(Object.keys(handlers));\n\nexport async function runExtendedCommand(client: SolveaClient, command: string, args: string[]) {\n const handler = handlers[command];\n if (!handler) throw new Error(`TypeScript command not migrated yet: ${command}`);\n return handler(client, args);\n}\n","import { flag, option, optionList } from \"../args.js\";\nimport type { SolveaClient } from \"./client.js\";\nimport { jsonData, jsonValue, requireFlag, requireId } from \"./input.js\";\n\ntype Handler = (client: SolveaClient, args: string[]) => Promise<unknown>;\nconst data = async (args: string[]) => jsonData(args, false);\nconst project = async (client: SolveaClient) => client.projectId();\nconst page = (args: string[]) => Number(option(args, \"--page\") ?? 1);\nconst pageSize = (args: string[]) => Number(option(args, \"--page-size\") ?? 50);\nconst reportBody = async (args: string[]) => ({\n beginTimestamp: Number(option(args, \"--begin-ts\", true)), endTimestamp: Number(option(args, \"--end-ts\", true)),\n timeOffset: Number(option(args, \"--time-offset\") ?? 8), ...(await data(args)),\n});\n\nconst handlers: Record<string, Handler> = {\n \"chat-stream\": async (c, a) => c.rawCall(\"POST\", `/api_v2/gpt/bot/${await c.botId()}/chat`, { message: option(a, \"--message\", true), botId: Number(option(a, \"--bot-id\") ?? await c.botId()), projectId: Number(await project(c)), option: { debug: true }, stream: true }),\n \"update-chatflow\": async (c, a) => c.updateChatflow(option(a, \"--agent-id\", true)!, await jsonData(a), flag(a, \"--publish\")),\n \"get-conversations-by-intent\": async (c, a) => c.listTranscripts({ pageSize: Number(option(a, \"--limit\") ?? 50), pageIndex: 1, intent: option(a, \"--intent\", true) }),\n \"resolve-transcript-chat-id\": async (c, a) => c.resolveTranscriptChatId(option(a, \"--external-id\", true)!, Number(option(a, \"--page-size\") ?? 10)),\n \"list-isolation-keywords\": async (c, a) => c.rawCall(\"GET\", `${c.qamPath}/project/${await project(c)}/isolation_keywords`, undefined, { keyword: option(a, \"--keyword\") ?? \"\", pageIndex: page(a), pageSize: pageSize(a) }),\n \"create-isolation-keyword\": async (c, a) => c.rawCall(\"POST\", `${c.qamPath}/project/${await project(c)}/isolation_keyword`, { keyword: option(a, \"--keyword\", true) }),\n \"update-isolation-keyword\": async (c, a) => c.rawCall(\"POST\", `${c.qamPath}/project/${await project(c)}/isolation_keyword/${requireId(a)}`, { keyword: option(a, \"--keyword\", true) }),\n \"delete-isolation-keyword\": async (c, a) => { requireFlag(a, \"--confirm-delete\", \"delete-isolation-keyword\"); return c.rawCall(\"DELETE\", `${c.qamPath}/project/${await project(c)}/isolation_keyword/${requireId(a)}`); },\n \"get-knowledge-isolation-keywords\": async (c, a) => c.rawCall(\"GET\", `${c.qamPath}/project/${await project(c)}/knowledge/isolation_keywords`, undefined, { knowledgeType: option(a, \"--type\", true)!, knowledgeId: requireId(a) }),\n \"batch-update-isolation-keyword-bindings\": async (c, a) => c.rawCall(\"POST\", `${c.qamPath}/project/${await project(c)}/knowledge/isolation_keywords/batch`, await jsonValue(a)),\n \"edit-knowledge-tags\": async (c, a) => c.rawCall(\"POST\", `${c.qamPath}/project/${await project(c)}/editTags`, await jsonValue(a)),\n \"move-directory\": async (c, a) => c.rawCall(\"GET\", `${c.qamPath}/project/${await project(c)}/directory/move`, undefined, { currentId: requireId(a), parentId: option(a, \"--parent-id\", true)! }),\n \"operate-knowledge\": async (c, a) => c.rawCall(\"POST\", `${c.qamPath}/project/${await project(c)}/updateKnowledge`, await jsonValue(a)),\n \"batch-update-knowledge\": async (c, a) => c.rawCall(\"PUT\", `${c.qamPath}/project/${await project(c)}/kus`, await jsonValue(a)),\n \"update-document-content\": async (c, a) => c.rawCall(\"PUT\", `${c.qamPath}/project/${await project(c)}/document`, { id: requireId(a), ...(await data(a)) }),\n \"create-product-knowledge\": async (c, a) => c.rawCall(\"POST\", `${c.qamPath}/project/${await project(c)}/ku_product`, await jsonValue(a)),\n \"update-product-knowledge\": async (c, a) => c.rawCall(\"PUT\", `${c.qamPath}/project/${await project(c)}/ku_product`, { kuProductId: Number(requireId(a)), ...(await data(a)) }),\n \"batch-update-products\": async (c, a) => c.rawCall(\"PUT\", `${c.qamPath}/project/${await project(c)}/ku_products`, { list: await jsonValue(a) }),\n \"upload-web\": async (c, a) => c.rawCall(\"POST\", `${c.qamPath}/project/${await project(c)}/documents`, { documents: optionList(a, \"--url\").map(filePath => ({ filePath, docType: \"TC\", fileType: \"website\" })), taskType: \"WEB\", published: true, isVisible: true, metadata: { tags: [] }, directoryId: option(a, \"--directory-id\") ?? \"\" }),\n \"list-label-groups\": async (c, a) => c.rawCall(\"GET\", `/api_v2/gpt/label/project/${await project(c)}/getTreeInfo`, undefined, option(a, \"--name\") ? { treeName: option(a, \"--name\")! } : undefined),\n \"create-label-group\": async (c, a) => c.rawCall(\"POST\", `/api_v2/gpt/label/project/${await project(c)}/updateTreeInfo`, { ...(await data(a)), treeName: option(a, \"--name\", true), operateType: \"CREATE\" }),\n \"update-label-group\": async (c, a) => c.rawCall(\"POST\", `/api_v2/gpt/label/project/${await project(c)}/updateTreeInfo`, { ...(await data(a)), id: Number(requireId(a)), operateType: \"UPDATE\" }),\n \"delete-label-group\": async (c, a) => { requireFlag(a, \"--confirm-delete\", \"delete-label-group\"); return c.rawCall(\"POST\", `/api_v2/gpt/label/project/${await project(c)}/updateTreeInfo`, { id: Number(requireId(a)), operateType: \"DELETE\" }); },\n \"get-label-tree\": async (c, a) => c.rawCall(\"GET\", `/api_v2/gpt/label/project/${await project(c)}/getTagTree`, undefined, { treeId: requireId(a), ...(option(a, \"--keyword\") ? { name: option(a, \"--keyword\")! } : {}) }),\n \"get-label-detail-tree\": async (c, a) => c.rawCall(\"POST\", `/api_v2/gpt/label/project/${await project(c)}/getDetailTree`, { treeId: Number(requireId(a)), ...(await data(a)) }),\n \"create-label-node\": async (c, a) => c.rawCall(\"POST\", `/api_v2/gpt/label/project/${await project(c)}/updateNode`, { treeId: Number(option(a, \"--tree-id\", true)), operateType: \"CREATE\", nodes: [await data(a)] }),\n \"update-label-node\": async (c, a) => c.rawCall(\"POST\", `/api_v2/gpt/label/project/${await project(c)}/updateNode`, { treeId: Number(option(a, \"--tree-id\", true)), operateType: \"UPDATE\", nodes: [{ id: Number(requireId(a)), ...(await data(a)) }] }),\n \"delete-label-node\": async (c, a) => { requireFlag(a, \"--confirm-delete\", \"delete-label-node\"); return c.rawCall(\"POST\", `/api_v2/gpt/label/project/${await project(c)}/updateNode`, { treeId: Number(option(a, \"--tree-id\", true)), operateType: \"DELETE\", nodes: [{ id: Number(requireId(a)) }] }); },\n \"download-label-template\": async (c, a) => c.rawCall(\"GET\", `/api_v2/gpt/label/project/${await project(c)}/downloadLabelTemplate`, undefined, { type: option(a, \"--template-type\") ?? \"VOC_LABEL\" }),\n \"download-labels\": async (c, a) => c.rawCall(\"GET\", `/api_v2/gpt/label/project/${await project(c)}/downloadLabel`, undefined, { treeId: option(a, \"--tree-id\", true)! }),\n \"upload-labels\": async (c, a) => c.rawCall(\"POST\", `/api_v2/gpt/label/project/${await project(c)}/uploadLabel`, { treeId: Number(option(a, \"--tree-id\", true)), file: option(a, \"--file\", true), ...(option(a, \"--init\") ? { uploadWay: \"INIT\" } : {}) }),\n \"export-transcripts\": async (c, a) => c.rawCall(\"POST\", `/api_v2/gpt/project/${await project(c)}/transcripts/export/async`, { pageSize: pageSize(a), pageIndex: page(a), timeOffset: Number(option(a, \"--time-offset\") ?? 8), ...(await data(a)) }),\n \"get-export-tasks\": async (c, a) => c.rawCall(\"POST\", `/api_v2/gpt/label/project/${await project(c)}/getLabelTask`, { page: page(a), pageSize: pageSize(a) }),\n \"upload-batch-test-file\": async (c, a) => c.rawCall(\"GET\", `/api_v2/gpt/project/${await project(c)}/sts_credentials`),\n \"submit-batch-test\": async (c, a) => c.rawCall(\"POST\", `/api_v2/gpt/label/project/${await project(c)}/uploadMessage`, { file: option(a, \"--file\", true), type: option(a, \"--type\", true), ...(option(a, \"--bot-id\") ? { botId: Number(option(a, \"--bot-id\")) } : {}), ...(await data(a)) }),\n \"get-batch-test-tasks\": async (c, a) => c.rawCall(\"POST\", `/api_v2/gpt/label/project/${await project(c)}/getLabelTask`, { page: page(a), pageSize: pageSize(a), ...(option(a, \"--type\") ? { taskType: option(a, \"--type\")! } : {}) }),\n \"list-voice-agents\": c => c.listAgents(\"voice\"),\n \"list-voice-transcripts\": async (c, a) => c.rawCall(\"POST\", \"/api_v2/as_bot/voice-report/transcript-page\", { pageNum: page(a), pageSize: pageSize(a), beginTimestamp: Number(option(a, \"--begin-ts\") ?? 0), endTimestamp: Number(option(a, \"--end-ts\") ?? 0) }),\n \"get-voice-transcript\": async (c, a) => c.rawCall(\"GET\", `/api_v2/gpt/voice/transcript/projectId/${await project(c)}/history/${requireId(a)}`),\n};\n\nconst reportPaths: Record<string, string> = {\n \"report-transcript\": \"/api_v2/as_bot/statement/transcript\", \"report-message\": \"/api_v2/as_bot/statement/message\", \"report-agent\": \"/api_v2/as_bot/statement/agent\", \"report-intent\": \"/api_v2/as_bot/statement/transcript/intent\", \"report-satisfaction\": \"/api_v2/as_bot/statement/satisfaction/feedback\", \"report-satisfaction-list\": \"/api_v2/as_bot/statement/satisfaction/message\", \"report-knowledge\": \"/api_v2/as_bot/statement/knowledge\", \"report-escalation\": \"/api_v2/as_bot/statement/transcript/reason2\", \"report-livechat\": \"/api_v2/as_bot/livechat/report/summary\", \"report-livechat-table\": \"/api_v2/as_bot/livechat/report/table\", \"report-inspection\": \"/api_v2/intelli/inspection/ticket/count\", \"report-self-learning\": \"/api_v2/as_bot/statement/self-learning\",\n};\nfor (const [name, path] of Object.entries(reportPaths)) handlers[name] = async (c, a) => c.rawCall(\"POST\", path, await reportBody(a));\n\nexport const REMAINING_COMMANDS = new Set(Object.keys(handlers));\nexport async function runRemainingCommand(client: SolveaClient, command: string, args: string[]) {\n const handler = handlers[command];\n if (!handler) throw new Error(`TypeScript command not migrated yet: ${command}`);\n return handler(client, args);\n}\n","import type { Session } from \"../types.js\";\nimport { runApi } from \"../business.js\";\n\ntype ActionDefinition = {\n command: string;\n summary: string;\n usage: string;\n};\n\nconst action = (command: string, summary: string, usage = \"\"): ActionDefinition => ({ command, summary, usage });\n\nconst resources = {\n agent: {\n list: action(\"list-agents\", \"List agents\", \"[--category text|voice]\"),\n get: action(\"get-agent\", \"Get one agent\", \"--id <agent-id>\"),\n create: action(\"create-agent\", \"Create an agent\", \"--data <json> | --data-file <path>\"),\n update: action(\"update-agent\", \"Update an agent\", \"--data <json> | --data-file <path>\"),\n \"get-chatflow\": action(\"get-chatflow-graph\", \"Get an agent chatflow\", \"--agent-id <agent-id>\"),\n },\n intent: {\n list: action(\"list-intents\", \"List intents\", \"[--category <category>]\"),\n get: action(\"get-intent\", \"Get one intent\", \"--id <intent-id>\"),\n create: action(\"create-intent\", \"Create an intent\", \"--data <json> | --data-file <path>\"),\n update: action(\"update-intent\", \"Update an intent\", \"--id <intent-id> (--data <json> | --data-file <path>)\"),\n toggle: action(\"toggle-intent\", \"Enable or disable an intent\", \"--id <intent-id> [--enable | --disable] (default: --enable)\"),\n },\n strategy: {\n list: action(\"list-strategies\", \"List strategies\", \"[--page-size <number>]\"),\n entities: action(\"list-entities\", \"List strategy entities\"),\n create: action(\"create-strategy\", \"Create a strategy\", \"--data <json> | --data-file <path>\"),\n update: action(\"update-strategy\", \"Update a strategy\", \"--id <strategy-id> (--data <json> | --data-file <path>)\"),\n toggle: action(\"toggle-strategy\", \"Enable or disable a strategy\", \"--id <strategy-id> [--enable | --disable] (default: --enable)\"),\n },\n tool: {\n list: action(\"list-plugins\", \"List tools\"),\n get: action(\"get-plugin\", \"Get one tool\", \"--id <tool-id>\"),\n create: action(\"create-plugin\", \"Create a tool\", \"--data <json> | --data-file <path>\"),\n update: action(\"update-plugin\", \"Update a tool\", \"--data <json> | --data-file <path>\"),\n delete: action(\"delete-plugin\", \"Delete a tool\", \"--id <tool-id> --confirm-delete\"),\n run: action(\"run-plugin\", \"Run an HTTP tool without saving it\", \"--data <json> | --data-file <path>\"),\n },\n field: {\n canvas: action(\"list-ai-fields\", \"List CHAT_FLOW canvas fields\"),\n \"agent-range\": action(\"list-agent-ai-fields\", \"List fields accepted by Agent validation\"),\n guide: action(\"get-ai-field-guide\", \"Get AI Field initialization status\"),\n initialize: action(\"initialize-ai-fields\", \"Initialize system AI Fields\"),\n list: action(\"list-managed-ai-fields\", \"List managed AI Fields\", \"[--page <number>] [--page-size <number>] [--keyword <name>]\"),\n get: action(\"get-managed-ai-field\", \"Get one managed AI Field\", \"--id <field-id>\"),\n create: action(\"create-managed-ai-field\", \"Create a managed AI Field\", \"--data <json> | --data-file <path>\"),\n update: action(\"update-managed-ai-field\", \"Update a managed AI Field\", \"--data <json> | --data-file <path>\"),\n delete: action(\"delete-managed-ai-field\", \"Delete a managed AI Field\", \"--id <field-id> --confirm-delete\"),\n toggle: action(\"toggle-managed-ai-field\", \"Toggle a managed AI Field\", \"--id <field-id>\"),\n },\n template: {\n list: action(\"list-templates\", \"List reply templates\", \"[--page <number>] [--page-size <number>] [--keyword <text>] [--scene <scene>] [--status <status>]\"),\n create: action(\"create-template\", \"Create a reply template\", \"(--name <name> --content <content>) | --data-file <path>\"),\n update: action(\"update-template\", \"Update a reply template\", \"--id <template-id> [--name <name>] [--content <content>] [--status <status>] [--data-file <path>]\"),\n delete: action(\"delete-templates\", \"Delete reply templates\", \"--ids <id> [id...] --confirm-delete\"),\n },\n knowledge: {\n list: action(\"list-knowledge\", \"List knowledge\", \"[--type <type>] [--page <number>] [--page-size <number>] [--keyword <text>] [--data <json> | --data-file <path>]\"),\n get: action(\"get-knowledge\", \"Get one knowledge item\", \"--id <knowledge-id>\"),\n update: action(\"update-knowledge\", \"Update a knowledge item\", \"--id <knowledge-id> (--data <json> | --data-file <path>)\"),\n \"upload-qa\": action(\"upload-qa\", \"Upload QA items\", \"--data <json> | --data-file <path>\"),\n tags: action(\"list-knowledge-tags\", \"List knowledge tags\", \"[--keyword <keyword>]\"),\n },\n directory: {\n list: action(\"list-directories\", \"List knowledge directories\"),\n create: action(\"create-folder\", \"Create a knowledge directory\", \"--name <name> [--parent-id <directory-id>]\"),\n update: action(\"update-directory\", \"Update a knowledge directory\", \"--id <directory-id> (--name <name> | --data <json> | --data-file <path>)\"),\n delete: action(\"delete-directory\", \"Delete a knowledge directory\", \"--id <directory-id> --confirm-delete\"),\n },\n quality: {\n status: action(\"get-quality-status\", \"Get quality inspection status\"),\n toggle: action(\"set-quality-status\", \"Enable or disable quality inspection\", \"--enable | --disable\"),\n rules: action(\"list-quality-rules\", \"List quality rules\", \"[--begin-ts <milliseconds>] [--end-ts <milliseconds>]\"),\n \"get-rule\": action(\"get-quality-rule\", \"Get one quality rule\", \"--inspection-key <key>\"),\n \"update-rule\": action(\"update-quality-rule\", \"Update a quality rule\", \"--data <json> | --data-file <path>\"),\n \"get-custom-rule\": action(\"get-custom-quality-rule\", \"Get one custom quality rule\", \"--inspection-key <key>\"),\n \"create-custom-rule\": action(\"create-custom-quality-rule\", \"Create a custom quality rule\", \"--data <json> | --data-file <path>\"),\n \"update-custom-rule\": action(\"update-custom-quality-rule\", \"Update a custom quality rule\", \"--data <json> | --data-file <path>\"),\n \"delete-custom-rule\": action(\"delete-custom-quality-rule\", \"Delete a custom quality rule\", \"--inspection-key <key>\"),\n alerts: action(\"list-quality-alert-rules\", \"List quality alert rules\"),\n \"get-alert\": action(\"get-quality-alert-rule\", \"Get one quality alert rule\", \"--id <alert-id>\"),\n \"create-alert\": action(\"create-quality-alert-rule\", \"Create a quality alert rule\", \"--data <json> | --data-file <path>\"),\n \"update-alert\": action(\"update-quality-alert-rule\", \"Update a quality alert rule\", \"--data <json> | --data-file <path>\"),\n \"delete-alert\": action(\"delete-quality-alert-rule\", \"Delete a quality alert rule\", \"--id <alert-id> --confirm-delete\"),\n \"alert-messages\": action(\"list-quality-alert-messages\", \"List quality alert messages\", \"--data <json> | --data-file <path>\"),\n \"get-alert-message\": action(\"get-quality-alert-message\", \"Get one quality alert message\", \"--id <message-id>\"),\n },\n transcript: {\n list: action(\"list-transcripts\", \"List transcripts\", \"[--page <number>] [--page-size <number>] [--begin-ts <milliseconds>] [--end-ts <milliseconds>] [--data <json> | --data-file <path>]\"),\n get: action(\"get-transcript\", \"Get one transcript\", \"--chat-id <chat-id>\"),\n context: action(\"get-chat-context\", \"Get chat context\", \"--bot-id <bot-id> (--data <json> | --data-file <path>)\"),\n },\n chat: {\n send: action(\"chat\", \"Send a synchronous chat message\", \"--message <text> [--bot-id <bot-id>] [--chat-id <chat-id>]\"),\n async: action(\"chat-async\", \"Send an asynchronous chat message\", \"--message <text> [--bot-id <bot-id>] [--chat-id <chat-id>]\"),\n result: action(\"get-async-result\", \"Get an asynchronous chat result\", \"--receipt <receipt> [--bot-id <bot-id>]\"),\n },\n} as const;\n\nexport type ResourceName = keyof typeof resources;\n\nexport function isResourceCommand(value: string): value is ResourceName {\n return value in resources;\n}\n\nexport function resourceHelp(resource?: string, actionName?: string): string {\n if (!resource) return `Business resources:\\n${Object.keys(resources).map(name => ` ${name}`).join(\"\\n\")}`;\n if (!isResourceCommand(resource)) throw new Error(`unknown resource: ${resource}`);\n const actions = resources[resource] as Record<string, ActionDefinition>;\n if (actionName) {\n const definition = actions[actionName];\n if (!definition) throw new Error(`unknown ${resource} action: ${actionName}\\n${resourceHelp(resource)}`);\n return [\n definition.summary,\n `Usage: cxclawctl ${resource} ${actionName}${definition.usage ? ` ${definition.usage}` : \"\"}`,\n ].join(\"\\n\\n\");\n }\n return [\n `${resource} actions:`,\n ...Object.entries(actions).map(([name, definition]) => ` ${name.padEnd(20)} ${definition.summary}`),\n `\\nRun cxclawctl ${resource} <action> --help for action options.`,\n ].join(\"\\n\");\n}\n\nexport function resolveResourceCommand(resource: ResourceName, action?: string): string {\n if (!action || action === \"help\") throw new Error(resourceHelp(resource));\n const definition = (resources[resource] as Record<string, ActionDefinition>)[action];\n if (!definition) throw new Error(`unknown ${resource} action: ${action}\\n${resourceHelp(resource)}`);\n return definition.command;\n}\n\nexport async function runResourceCommand(session: Session, resource: ResourceName, action: string | undefined, args: string[]) {\n await runApi(session, resolveResourceCommand(resource, action), args);\n}\n","import { access } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { packageRoot } from \"./business.js\";\nimport { VERSION } from \"./version.js\";\n\nexport async function diagnose() {\n const root = packageRoot();\n const requiredFiles = [\n \"package.json\",\n ];\n await Promise.all(requiredFiles.map((path) => access(join(root, path))));\n\n const expectedPluginVersion = process.env.CXCLAW_PLUGIN_VERSION || null;\n if (expectedPluginVersion && expectedPluginVersion !== VERSION) {\n throw new Error(\n `plugin version ${expectedPluginVersion} does not match CLI ${VERSION}`,\n );\n }\n\n return {\n ok: true,\n cliVersion: VERSION,\n pluginVersion: expectedPluginVersion,\n versionsMatch: expectedPluginVersion ? expectedPluginVersion === VERSION : null,\n nodeVersion: process.versions.node,\n runtimeFiles: requiredFiles,\n };\n}\n","import LogClient from \"@alicloud/log\";\nimport { post } from \"./http.js\";\nimport type { Session } from \"./types.js\";\n\ninterface SlsSession{endpoint:string;project:string;logstore:string;credentials:{accessKeyId:string;accessKeySecret:string;securityToken:string};limits:{maxTimeRangeSeconds:number;maxResults:number;maxConcurrency:number;maxMessageChars:number}}\nexport async function query(session:Session,options:{from:number;to:number;query:string;line:number;offset:number;reverse:boolean}){\n const temporary=await post<SlsSession>(session,\"/sls/session\",{},true);if(options.from<=0||options.to<options.from||options.to-options.from>temporary.limits.maxTimeRangeSeconds)throw new Error(\"SLS time range exceeds the server limit\");\n const client=new (LogClient as any)({endpoint:temporary.endpoint,use_https:true,accessKeyId:temporary.credentials.accessKeyId,accessKeySecret:temporary.credentials.accessKeySecret,securityToken:temporary.credentials.securityToken});\n const response=await client.getLogs(temporary.project,temporary.logstore,new Date(options.from*1000),new Date(options.to*1000),{query:options.query,line:Math.min(options.line||50,temporary.limits.maxResults),offset:options.offset||0,reverse:options.reverse});\n const logs=(response.body??response).map?.((row:Record<string,unknown>)=>Object.fromEntries(Object.entries(row).map(([k,v])=>[k,String(v).slice(0,temporary.limits.maxMessageChars||undefined)])))??response.body??response;\n return {logs};\n}\n","import { post } from \"./http.js\";\nimport { saveSession } from \"./store.js\";\nimport type { Session, Tenant } from \"./types.js\";\n\nexport function environment(value:string){const v=value.toLowerCase();if(v===\"test\"||v===\"staging\")return \"staging\";if(v===\"prod\"||v===\"production\")return \"prod\";throw new Error(`unsupported environment ${value}; use test/staging or prod`)}\nexport async function search(session:Session,query:string,env:string){return (await post<{items:unknown[]}>(session,\"/tenants/search\",{query,environment:environment(env)})).items}\nexport async function useTenant(session:Session,accountId:number,env:string,purpose:string){\n if(!purpose)throw new Error(\"purpose is required\");\n const response=await post<any>(session,\"/tenant-contexts\",{accountId,environment:environment(env),purpose});\n if(!response.businessToken||!response.services?.businessUrl)throw new Error(\"authorization server did not return business credentials\");\n session.tenant={...response.tenant,environment:response.environment,purpose,context:response.tenantContext,businessToken:response.businessToken,businessUrl:response.services.businessUrl.replace(/\\/$/,\"\"),slsUrl:response.services.slsUrl?.replace(/\\/$/,\"\"),expiresAt:response.businessTokenExpiresAt||Math.floor(Date.now()/1000)+response.expiresIn} as Tenant;\n await saveSession(session);return publicTenant(session.tenant);\n}\nexport function publicTenant(t?:Tenant){return t?{accountId:t.accountId,accountCode:t.accountCode,accountName:t.accountName,environment:t.environment,purpose:t.purpose,expiresAt:t.expiresAt,configured:Boolean(t.businessToken&&t.businessUrl)}:{configured:false}}\nexport async function ensureTenant(session:Session){if(!session.tenant?.accountId)throw new Error(\"no tenant selected; run npx --yes @shulex/cxclawctl@latest tenant use\");if(Date.now()/1000+30>=session.tenant.expiresAt)await useTenant(session,session.tenant.accountId,session.tenant.environment,session.tenant.purpose);return session.tenant}\n","import { spawn } from \"node:child_process\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { homedir, platform } from \"node:os\";\nimport { isAbsolute, join } from \"node:path\";\n\ntype ExecOptions = { capture?: boolean; allowFailure?: boolean };\n\nconst exec = (command: string, args: string[], options: ExecOptions = {}) =>\n new Promise<string>((resolve, reject) => {\n const chunks: Buffer[] = [];\n const child = spawn(command, args, {\n stdio: options.capture ? [\"ignore\", \"pipe\", \"inherit\"] : \"inherit\",\n });\n if (options.capture) child.stdout?.on(\"data\", (chunk) => chunks.push(chunk));\n child.on(\"error\", reject);\n child.on(\"exit\", (code) => {\n if (code === 0 || options.allowFailure) {\n resolve(Buffer.concat(chunks).toString(\"utf8\"));\n return;\n }\n reject(new Error(`${command} exited with ${code}`));\n });\n });\n\nconst xml = (value: string) =>\n value\n .replaceAll(\"&\", \"&amp;\")\n .replaceAll(\"<\", \"&lt;\")\n .replaceAll(\">\", \"&gt;\")\n .replaceAll('\"', \"&quot;\")\n .replaceAll(\"'\", \"&apos;\");\n\nconst systemdArg = (value: string) =>\n `\"${value.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll('\"', '\\\\\"')}\"`;\n\nconst windowsArg = (value: string) =>\n /[\\s\"]/.test(value) ? `\"${value.replaceAll('\"', '\\\\\"')}\"` : value;\n\nexport function schedulerInvocation(\n environment: NodeJS.ProcessEnv = process.env,\n nodeExecutable = process.execPath,\n) {\n const npmExecutable = environment.npm_execpath;\n if (!npmExecutable || !isAbsolute(npmExecutable)) {\n throw new Error(\n \"cannot register updater: run this command through npm or npx so npm_execpath is available\",\n );\n }\n return {\n command: nodeExecutable,\n args: [\n npmExecutable,\n \"exec\",\n \"--yes\",\n \"--package=@shulex/cxclawctl@latest\",\n \"--\",\n \"cxclawctl\",\n \"update\",\n \"--scheduled\",\n ],\n };\n}\n\nexport async function update() {\n await exec(\"codex\", [\"plugin\", \"marketplace\", \"upgrade\", \"cxclaw\"]);\n await exec(\"codex\", [\"plugin\", \"add\", \"cxclaw@cxclaw\"]);\n const raw = await exec(\"codex\", [\"plugin\", \"list\", \"--json\"], { capture: true });\n const list = JSON.parse(raw) as {\n installed?: Array<{ pluginId?: string; version?: string; enabled?: boolean }>;\n };\n const plugin = list.installed?.find((item) => item.pluginId === \"cxclaw@cxclaw\");\n if (!plugin?.version || plugin.enabled === false) {\n throw new Error(\"CXClaw plugin is not installed and enabled\");\n }\n\n const response = await fetch(\n `https://registry.npmjs.org/@shulex%2Fcxclawctl/${encodeURIComponent(plugin.version)}`,\n { signal: AbortSignal.timeout(30_000) },\n );\n if (!response.ok) {\n throw new Error(\n `npm package @shulex/cxclawctl@${plugin.version} is unavailable (${response.status})`,\n );\n }\n const metadata = (await response.json()) as { version?: string };\n if (metadata.version !== plugin.version) {\n throw new Error(\n `npm returned ${metadata.version ?? \"no version\"}, expected ${plugin.version}`,\n );\n }\n return {\n pluginVersion: plugin.version,\n cliPackageVersion: metadata.version,\n restartRequired: true,\n };\n}\n\nexport async function installScheduler() {\n const invocation = schedulerInvocation();\n if (platform() === \"darwin\") {\n const dir = join(homedir(), \"Library/LaunchAgents\");\n const path = join(dir, \"com.solvea.cxclaw.update.plist\");\n const programArguments = [invocation.command, ...invocation.args]\n .map((value) => `<string>${xml(value)}</string>`)\n .join(\"\");\n await mkdir(dir, { recursive: true });\n await writeFile(\n path,\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\\n<plist version=\"1.0\"><dict><key>Label</key><string>com.solvea.cxclaw.update</string><key>ProgramArguments</key><array>${programArguments}</array><key>StartInterval</key><integer>21600</integer><key>RunAtLoad</key><true/></dict></plist>\\n`,\n );\n await exec(\"launchctl\", [\"unload\", path], { allowFailure: true });\n await exec(\"launchctl\", [\"load\", path]);\n return;\n }\n\n if (platform() === \"linux\") {\n const dir = join(homedir(), \".config/systemd/user\");\n const command = [invocation.command, ...invocation.args].map(systemdArg).join(\" \");\n await mkdir(dir, { recursive: true });\n await writeFile(\n join(dir, \"cxclaw-update.service\"),\n `[Service]\\nType=oneshot\\nExecStart=${command}\\n`,\n );\n await writeFile(\n join(dir, \"cxclaw-update.timer\"),\n \"[Timer]\\nOnBootSec=5m\\nOnUnitActiveSec=6h\\nPersistent=true\\n[Install]\\nWantedBy=timers.target\\n\",\n );\n await exec(\"systemctl\", [\"--user\", \"daemon-reload\"]);\n await exec(\"systemctl\", [\"--user\", \"enable\", \"--now\", \"cxclaw-update.timer\"]);\n return;\n }\n\n const task = [invocation.command, ...invocation.args].map(windowsArg).join(\" \");\n await exec(\"schtasks\", [\n \"/Create\",\n \"/F\",\n \"/SC\",\n \"HOURLY\",\n \"/MO\",\n \"6\",\n \"/TN\",\n \"Solvea CXClaw Update\",\n \"/TR\",\n task,\n ]);\n}\n\nexport async function installMarketplace(channel: string) {\n if (![\"stable\", \"canary\", \"dev\"].includes(channel)) {\n throw new Error(\"invalid channel\");\n }\n await exec(\"codex\", [\n \"plugin\",\n \"marketplace\",\n \"add\",\n \"SolveaCX/cx_claw_codex\",\n \"--ref\",\n `marketplace/${channel}`,\n ]).catch(() => exec(\"codex\", [\"plugin\", \"marketplace\", \"upgrade\", \"cxclaw\"]));\n await exec(\"codex\", [\"plugin\", \"add\", \"cxclaw@cxclaw\"]);\n}\n","import { execFile } from \"node:child_process\";\nimport { promises as fs } from \"node:fs\";\nimport { basename, join, resolve } from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { flag, option } from \"../args.js\";\n\nconst exec = promisify(execFile);\nconst workspace = () => resolve(process.env.WORKSPACE_DIR ?? join(process.cwd(), \"workspace\"));\nconst root = () => join(workspace(), \"runtime-inspector\");\nconst dirs = () => ({ output: join(root(), \"outputs\"), state: join(root(), \"state\"), tmp: join(root(), \"tmp\") });\nconst timestamp = () => new Date().toISOString().replace(/[-:TZ.]/g, \"\").slice(0, 15);\nconst readJson = async <T>(path: string, fallback: T): Promise<T> => { try { return JSON.parse(await fs.readFile(path, \"utf8\")) as T; } catch { return fallback; } };\nconst writeJson = async (path: string, value: unknown) => { await fs.mkdir(resolve(path, \"..\"), { recursive: true }); await fs.writeFile(path, JSON.stringify(value, null, 2)); };\n\ntype RecordValue = Record<string, unknown>;\nfunction check(label: string, ok: boolean, detail = \"\") { return { label, ok, ...(detail ? { detail } : {}) }; }\n\nasync function prepare(args: string[]) {\n const { tmp, state } = dirs();\n const source = option(args, \"--source\");\n const batchSize = Number(option(args, \"--batch-size\") ?? 10);\n if (!Number.isSafeInteger(batchSize) || batchSize <= 0) throw new Error(\"--batch-size must be a positive integer\");\n let records: RecordValue[];\n if (source) {\n const content = await fs.readFile(source, \"utf8\");\n if (source.toLowerCase().endsWith(\".json\")) {\n const parsed = JSON.parse(content) as unknown;\n records = Array.isArray(parsed) ? parsed.map(item => typeof item === \"object\" && item ? item as RecordValue : { text: String(item) }) : [parsed as RecordValue];\n } else if (source.toLowerCase().endsWith(\".csv\")) {\n const [header, ...lines] = content.split(/\\r?\\n/).filter(Boolean).map(line => line.split(\",\"));\n records = lines.map(values => Object.fromEntries((header ?? []).map((key, i) => [key, values[i] ?? \"\"])));\n } else records = content.split(/\\r?\\n/).filter(Boolean).map(text => ({ text }));\n } else records = Array.from({ length: 30 }, (_, i) => ({ id: i + 1, text: `测试记录 #${i + 1}`, value: (i + 1) * 10 }));\n await fs.rm(tmp, { recursive: true, force: true }); await fs.mkdir(tmp, { recursive: true });\n const batches = [] as RecordValue[][];\n for (let i = 0; i < records.length; i += batchSize) batches.push(records.slice(i, i + batchSize));\n await Promise.all(batches.map((batch, i) => writeJson(join(tmp, `batch_${String(i).padStart(3, \"0\")}.json`), batch)));\n await writeJson(join(state, \"inspect.json\"), { status: \"batched\", total_records: records.length, total_batches: batches.length, batch_size: batchSize, source: source ?? \"auto-generated\", written_at: new Date().toISOString() });\n return { status: \"batched\", totalRecords: records.length, totalBatches: batches.length, tmp };\n}\n\nasync function processBatches() {\n const { tmp, output, state } = dirs(); const current = await readJson<RecordValue>(join(state, \"inspect.json\"), {});\n if (current.status !== \"batched\") throw new Error(`runtime state must be batched, got ${String(current.status ?? \"missing\")}`);\n const names = (await fs.readdir(tmp)).filter(name => /^batch_\\d+\\.json$/.test(name)).sort();\n if (!names.length) throw new Error(`no batch files found in ${tmp}`);\n const records: RecordValue[] = [];\n for (const name of names) for (const row of await readJson<RecordValue[]>(join(tmp, name), [])) records.push({ ...row, _processed: true, _summary: `processed: ${JSON.stringify(row).slice(0, 60)}`, _at: new Date().toISOString() });\n const path = join(output, `results_${timestamp()}.json`);\n await writeJson(path, { total: records.length, processed_at: new Date().toISOString(), source: current.source, records });\n await writeJson(join(state, \"inspect.json\"), { status: \"done\", total_processed: records.length, results_path: path, done_at: new Date().toISOString() });\n return { status: \"done\", total: records.length, resultsPath: path };\n}\n\nasync function state() { const { state: stateDir, output, tmp } = dirs(); return { state: await readJson<RecordValue | null>(join(stateDir, \"inspect.json\"), null), outputFiles: await fs.readdir(output).catch(() => []), tmpFiles: await fs.readdir(tmp).catch(() => []) }; }\nasync function verify() {\n const snapshot = await state(); const checks = [check(\"state 文件已还原\", Boolean(snapshot.state)), check(\"status == done\", snapshot.state?.status === \"done\", `actual=${String(snapshot.state?.status)}`), check(\"outputs 目录可读\", Array.isArray(snapshot.outputFiles)), check(\"至少一个 results 文件\", snapshot.outputFiles.some(name => name.startsWith(\"results_\")))];\n return { ok: checks.every(item => item.ok), checks };\n}\n\nasync function sandbox(args: string[]) {\n const scenario = option(args, \"--scenario\") ?? \"all\"; const d = dirs();\n const scenarios = scenario === \"all\" ? [\"env\", \"fs\", \"execute\", \"paths\", \"deps\"] : [scenario];\n const checks = [] as ReturnType<typeof check>[];\n for (const item of scenarios) {\n if (item === \"env\") checks.push(check(\"WORKSPACE_DIR\", Boolean(process.env.WORKSPACE_DIR ?? workspace())), check(\"敏感变量未直接输出\", true));\n else if ([\"fs\", \"paths\"].includes(item)) { await Promise.all(Object.values(d).map(path => fs.mkdir(path, { recursive: true }))); checks.push(...Object.entries(d).map(([name, path]) => check(`${name} 目录可写`, true, path))); }\n else if (item === \"execute\") { const result = await exec(\"sh\", [\"-c\", \"printf runtime-ok\"]); checks.push(check(\"shell 执行链路\", result.stdout === \"runtime-ok\")); }\n else if (item === \"deps\") checks.push(check(\"Node runtime\", Number(process.versions.node.split(\".\")[0]) >= 22, process.versions.node));\n else throw new Error(`unknown runtime sandbox scenario: ${item}`);\n }\n return { ok: checks.every(item => item.ok), scenario, checks };\n}\n\nasync function model(args: string[]) {\n if ((option(args, \"--scenario\", true)) !== \"truncation\") throw new Error(\"only --scenario truncation is supported\");\n const target = join(dirs().tmp, \"truncation_test.md\");\n return { scenario: \"truncation\", target, instruction: \"Use the Codex write_file tool to write 60+ long technical paragraphs, then inspect SLG model_response stop_reason and output_tokens.\" };\n}\n\nexport async function runRuntime(action: string | undefined, args: string[]) {\n if (action === \"prepare\") return prepare(args);\n if (action === \"process\") return processBatches();\n if (action === \"state\") return state();\n if (action === \"verify\") return verify();\n if (action === \"sandbox\") return sandbox(args);\n if (action === \"model\") return model(args);\n if (action === \"write-test\") { const { output, state: stateDir } = dirs(); const runId = timestamp(); await writeJson(join(output, `${runId}_test.json`), { run_id: runId, written_at: new Date().toISOString() }); const current = await readJson<RecordValue>(join(stateDir, \"inspect.json\"), {}); await writeJson(join(stateDir, \"inspect.json\"), { ...current, last_run_id: runId, write_count: Number(current.write_count ?? 0) + 1 }); return { ok: true, runId }; }\n throw new Error(\"runtime action must be prepare, process, state, verify, sandbox, model, or write-test\");\n}\n","import ExcelJS from \"exceljs\";\nimport { promises as fs } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { option } from \"../args.js\";\n\nconst workspace = () => resolve(process.env.WORKSPACE_DIR ?? join(process.cwd(), \"workspace\"));\nconst outputDir = (owner: string) => join(workspace(), \"outputs\", owner);\nconst stateDir = (owner: string) => join(workspace(), \"state\", owner);\nconst now = () => new Date().toISOString().replace(/[-:TZ.]/g, \"\").slice(0, 15);\nconst readJson = async (path: string) => JSON.parse(await fs.readFile(path, \"utf8\")) as unknown;\nconst writeJson = async (path: string, value: unknown) => { await fs.mkdir(dirname(path), { recursive: true }); await fs.writeFile(path, JSON.stringify(value, null, 2)); };\n\nconst INIT_NOTICE = `The information of this row cannot be deleted! Tips:\\n1. first_level is the first level that is not empty.\\n2. second_level is the second level.\\n3. third_level is the third level.\\n4. fourth_level is the fourth level.\\n5. \"Name\", \"describe\" and \"example\" are for the use of the large model. Do not repeat them.`;\nconst UPDATE_NOTICE = `The information of this row cannot be deleted! Tips:\\n1. The \"id\" is automatically generated by the program. When it is empty, it indicates adding a new tag.\\n2. \"Name\", \"describe\" and \"example\" are for the use of the large model. Do not repeat them.\\n3. Fill in the \"parent_ID\" with the ID of the parent node tag.`;\ntype Label = Record<string, unknown>;\nfunction examples(label: Label) { const values = label.examples ?? label.exampleList ?? []; if (!Array.isArray(values)) throw new Error(\"examples must be an array\"); return [...values.slice(0, 5).map(String), ...Array(Math.max(0, 5 - values.length)).fill(\"\")]; }\nfunction labelsFrom(value: unknown): Label[] { const labels = value && typeof value === \"object\" && !Array.isArray(value) ? (value as Label).labels : value; if (!Array.isArray(labels) || !labels.length || labels.some(item => !item || typeof item !== \"object\")) throw new Error(\"input requires a non-empty labels array\"); return labels as Label[]; }\n\nexport async function generateLabelImport(args: string[]) {\n const input = option(args, \"--input\") ?? option(args, \"--data-file\", true)!;\n const init = args.includes(\"--init\"); const output = option(args, \"--output\") ?? join(stateDir(\"solvea-kit\"), init ? \"labels_init.xlsx\" : \"labels_update.xlsx\");\n const labels = labelsFrom(await readJson(input)); const workbook = new ExcelJS.Workbook(); const sheet = workbook.addWorksheet(\"labels\");\n if (init) {\n sheet.addRow([INIT_NOTICE]); sheet.addRow([\"first_level\", \"second_level\", \"third_level\", \"fourth_level\", \"describe\", \"example1\", \"example2\", \"example3\", \"example4\", \"example5\"]);\n for (const label of labels) { const path = (label.path ?? [label.firstLevel ?? label.first_level ?? \"\", label.secondLevel ?? label.second_level ?? \"\", label.thirdLevel ?? label.third_level ?? \"\", label.fourthLevel ?? label.fourth_level ?? \"\"]) as unknown[]; if (!String(path[0] ?? \"\").trim()) throw new Error(\"init labels require path or first_level/firstLevel\"); sheet.addRow([...path.slice(0, 4).map(value => String(value ?? \"\").trim()), label.describe ?? \"\", ...examples(label)]); }\n } else {\n sheet.addRow([UPDATE_NOTICE]); sheet.addRow([\"id\", \"name\", \"describe\", \"example1\", \"example2\", \"example3\", \"example4\", \"example5\", \"is_tag\", \"level\", \"parent_id\", \"path\"]);\n for (const label of labels) { const name = label.name ?? label.nodeName; if (!name) throw new Error(\"update labels require name or nodeName\"); const isTag = typeof (label.isTag ?? label.is_tag ?? 1) === \"boolean\" ? ((label.isTag ?? label.is_tag) ? 1 : 0) : (label.isTag ?? label.is_tag ?? 1); sheet.addRow([label.id ?? \"\", name, label.describe ?? label.nodeDescribe ?? \"\", ...examples(label), isTag, label.level ?? \"\", label.parentId ?? label.parent_id ?? 0, label.path ?? \"\"]); }\n }\n sheet.getRow(1).font = { bold: true, color: { argb: \"FF9C6500\" } }; sheet.getRow(1).height = 78; sheet.getRow(2).font = { bold: true }; sheet.columns.forEach(column => { column.width = 18; });\n await fs.mkdir(dirname(output), { recursive: true }); await workbook.xlsx.writeFile(output);\n return { file: output, format: init ? \"init\" : \"update\", rows: labels.length };\n}\n\nconst TAXONOMY: Record<string, string[]> = { \"Pre-Sales Inquiry\": [\"Product Recommendation\", \"Discount Inquiry\", \"Price Inquiry\", \"Stock Availability\", \"Payment Issues\"], Invoices: [\"Request Invoice\", \"Modify Invoice Information\"], \"Order Issues\": [\"Modify Order\", \"Check Order Status\", \"Cancel Order\"], \"Logistics Issues\": [\"Track Shipment\", \"Shipping Exception\"], \"Package issues\": [\"Missing Items\", \"Wrong Items Received\", \"Damaged Package\"], \"Product issues\": [\"Product Usage\", \"Physical Damage\", \"Non-Physical Issues\"], \"Return and exchange\": [] };\nfunction clean(text: unknown) { return String(text ?? \"\").replace(/<[^>]+>/g, \" \").replace(/\\s+/g, \" \").trim(); }\nexport async function classifyIntents(args: string[]) {\n const owner = option(args, \"--owner\") ?? \"solvea-kit\"; const runId = option(args, \"--run-id\") ?? now(); const noExcel = args.includes(\"--no-excel\");\n if (!noExcel && !option(args, \"--xlsx\")) throw new Error(\"provide --xlsx or --no-excel\");\n const intents = Object.entries(TAXONOMY).map(([name, l2s]) => ({ name, definition: `Customer requests and issues related to ${name}.`, count: 0, pct: 0, sub_intents: l2s.map(l2 => ({ name: l2, definition: \"\", count: 0, pct: 0, samples: [], is_new: false })), samples: [], is_new: false }));\n const result = { meta: { run_id: runId, total: 0, classified: 0, n_known: intents.length, n_new: 0, mode: noExcel ? \"no-excel\" : \"structured\" }, intents, new_intents: [] };\n const resultPath = join(outputDir(owner), `results_${runId}.json`); await writeJson(resultPath, result); await writeJson(join(stateDir(owner), \"progress.json\"), { status: \"ready\", run_id: runId, results_path: resultPath, updated_at: new Date().toISOString() });\n return { ...result.meta, resultsPath: resultPath };\n}\n\nexport async function runSolveaKitWorkflow(action: string | undefined, args: string[]) {\n if (action === \"label-import\") return generateLabelImport(args);\n if (action === \"intent-classify\") return classifyIntents(args);\n throw new Error(\"workflow action must be label-import or intent-classify\");\n}\n","import { readFile } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport { option, options } from \"../args.js\";\nimport type { Session } from \"../types.js\";\n\nconst safe = (value: string) => encodeURIComponent(value);\nconst docsMcpUrl = process.env.CXCLAW_DOCS_MCP_URL ?? \"https://solvea-39f11a36.mintlify.app/mcp\";\nconst publicDocsPrefix = \"https://www.voc.ai/cn/docs/\";\nconst previewDocsPrefix = \"https://solvea-39f11a36.mintlify.app/\";\n\nasync function docsTool(tool: string, arguments_: Record<string, unknown>) {\n const requestId = Date.now();\n const initialize = await fetch(docsMcpUrl, { method: \"POST\", headers: { accept: \"application/json, text/event-stream\", \"content-type\": \"application/json\" }, body: JSON.stringify({ jsonrpc: \"2.0\", id: requestId, method: \"initialize\", params: { protocolVersion: \"2025-03-26\", capabilities: {}, clientInfo: { name: \"cxclawctl\", version: \"1\" } } }), signal: AbortSignal.timeout(30_000) });\n const sessionId = initialize.headers.get(\"mcp-session-id\"); const headers = { accept: \"application/json, text/event-stream\", \"content-type\": \"application/json\", ...(sessionId ? { \"mcp-session-id\": sessionId } : {}) };\n await fetch(docsMcpUrl, { method: \"POST\", headers, body: JSON.stringify({ jsonrpc: \"2.0\", method: \"notifications/initialized\", params: {} }), signal: AbortSignal.timeout(30_000) });\n const response = await fetch(docsMcpUrl, { method: \"POST\", headers, body: JSON.stringify({ jsonrpc: \"2.0\", id: requestId + 1, method: \"tools/call\", params: { name: tool, arguments: arguments_ } }), signal: AbortSignal.timeout(30_000) });\n const text = await response.text(); if (!response.ok) throw new Error(`product docs request failed: HTTP ${response.status}`);\n const dataLine = text.split(/\\r?\\n/).find(line => line.startsWith(\"data:\")); try { const payload = JSON.parse(dataLine ? dataLine.slice(5).trim() : text) as Record<string, unknown>; if (payload.error) throw new Error(String((payload.error as Record<string, unknown>).message ?? \"product docs request failed\")); return payload.result ?? payload; } catch { return { content: [{ type: \"text\", text }] }; }\n}\n\nfunction normalizeDocUrl(value: string) { if (!value.startsWith(previewDocsPrefix)) return value; let path = value.slice(previewDocsPrefix.length); const hash = path.indexOf(\"#\"); const fragment = hash >= 0 ? path.slice(hash) : \"\"; if (hash >= 0) path = path.slice(0, hash); if (path.startsWith(\"solvea/bot_cn/\")) return `${publicDocsPrefix}bot/${path.split(\"/\").pop()}${fragment}`; return `${publicDocsPrefix}${path}${fragment}`; }\nfunction textBlocks(value: unknown): string[] { const content = value && typeof value === \"object\" ? (value as Record<string, unknown>).content : undefined; return Array.isArray(content) ? content.flatMap(item => item && typeof item === \"object\" && typeof (item as Record<string, unknown>).text === \"string\" ? [String((item as Record<string, unknown>).text)] : []) : []; }\nfunction parseDocBlock(text: string) { const result: Record<string, unknown> = {}; const content: string[] = []; let inContent = false; for (const line of text.split(/\\r?\\n/)) { if (inContent) content.push(line); else if (line.startsWith(\"Title: \")) result.title = line.slice(7).trim(); else if (line.startsWith(\"Link: \")) result.url = normalizeDocUrl(line.slice(6).trim()); else if (line.startsWith(\"Page: \")) result.page = line.slice(6).trim(); else if (line.startsWith(\"Content:\")) { inContent = true; if (line.slice(8).trim()) content.push(line.slice(8).trim()); } } if (content.length) result.content = content.join(\"\\n\").trim(); return Object.keys(result).length ? result : { content: text } ; }\nasync function request(session: Session, method: string, path: string, body?: unknown) {\n const tenant = session.tenant; const base = tenant?.businessUrl?.replace(/\\/$/, \"\"); if (!tenant || !base || !tenant.businessToken) throw new Error(\"no tenant selected\");\n const cookie = tenant.environment === \"prod\" ? \"_token\" : \"_token_staging\";\n const response = await fetch(`${base}/api_v2/gpt${path}`, { method, headers: { accept: \"application/json\", ...(body === undefined ? {} : { \"content-type\": \"application/json\" }), cookie: `${cookie}=${tenant.businessToken}` }, body: body === undefined ? undefined : JSON.stringify(body), signal: AbortSignal.timeout(30_000) });\n const value = await response.json().catch(() => ({})) as Record<string, unknown>;\n if (!response.ok || (value.code !== undefined && ![0, 200, \"0\", \"200\", \"OK\", \"SUCCESS\"].includes(value.code as never))) throw new Error(`support API failed: HTTP ${response.status}`);\n return value.data ?? value;\n}\n\nfunction portal(session: Session) { return session.tenant?.environment === \"prod\" ? \"https://ai.solvea.cx\" : \"https://ai-staging.solvea.cx\"; }\n\nexport async function runSupport(session: Session, action: string | undefined, args: string[]) {\n if (action === \"list-tickets\") return request(session, \"POST\", \"/support/tickets\", { page: Number(option(args, \"--page\") ?? 1), pageSize: Number(option(args, \"--page-size\") ?? 20) });\n if (action === \"get-ticket\") return request(session, \"GET\", `/support/tickets/${safe(option(args, \"--ticket-number\", true)!)}`);\n if (action === \"append-message\") return request(session, \"POST\", `/support/tickets/${safe(option(args, \"--ticket-number\", true)!)}/messages`, { content: option(args, \"--content\", true) });\n if (action === \"create-ticket\") {\n const attachments: unknown[] = [];\n for (const file of options(args, \"--attachment\")) {\n const form = new FormData(); form.append(\"file\", new Blob([await readFile(file)]), basename(file));\n const tenant = session.tenant; const base = tenant?.businessUrl?.replace(/\\/$/, \"\"); if (!tenant || !base || !tenant.businessToken) throw new Error(\"no tenant selected\"); const cookie = tenant.environment === \"prod\" ? \"_token\" : \"_token_staging\";\n const uploaded = await fetch(`${base}/api_v2/gpt/support/tickets/attachments/upload`, { method: \"POST\", headers: { cookie: `${cookie}=${tenant.businessToken}` }, body: form, signal: AbortSignal.timeout(30_000) }); const payload = await uploaded.json() as Record<string, unknown>; if (!uploaded.ok) throw new Error(`attachment upload failed: HTTP ${uploaded.status}`); attachments.push(payload.data ?? payload);\n }\n const sourceId = process.env.CHAT_ID ?? \"\"; if (!sourceId) throw new Error(\"CHAT_ID is not configured\");\n const ticket = await request(session, \"POST\", \"/support/tickets/create\", { content: option(args, \"--content\", true), sourceType: \"cxclaw\", sourceId, brand: option(args, \"--brand\"), issueType: option(args, \"--issue-type\") ?? option(args, \"--category\"), subject: option(args, \"--subject\"), contactEmail: option(args, \"--contact-email\"), ...(option(args, \"--ext\") ? { extFields: JSON.parse(option(args, \"--ext\")!) } : {}), ...(attachments.length ? { attachments } : {}) }) as Record<string, unknown>;\n const number = ticket.ticketNumber;\n await request(session, \"POST\", \"/support/skill-metrics\", { chatId: sourceId, ticketNumber: number }).catch(() => undefined);\n return { ticketNumber: number, ticketDetailUrl: number ? `${portal(session)}/chatbot#/support/tickets/${number}` : undefined, status: ticket.status, subject: ticket.subject, issueType: ticket.issueType, createdAt: ticket.createdAt };\n }\n if (action === \"search-docs\") { const query = option(args, \"--query\", true)!; const result = await docsTool(\"search_solvea\", { query }); return { query, results: textBlocks(result).map(parseDocBlock) }; }\n if (action === \"query-docs-filesystem\") { const command = option(args, \"--command\", true)!; const result = await docsTool(\"query_docs_filesystem_solvea\", { command }); return { command, output: textBlocks(result) }; }\n throw new Error(\"support action must be search-docs, list-tickets, get-ticket, create-ticket, or append-message\");\n}\n","import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { option, options } from \"../args.js\";\n\nexport type JsonObject = Record<string, unknown>;\n\nexport const workspaceRoot = () => resolve(process.env.CXCLAW_WORKSPACE ?? join(homedir(), \".cxclaw\", \"workspace\"));\nexport const stateRoot = (domain: string) => resolve(process.env.CXCLAW_STATE_DIR ?? join(workspaceRoot(), \"state\"), domain);\nexport const outputRoot = (domain: string) => resolve(process.env.CXCLAW_OUTPUT_DIR ?? join(workspaceRoot(), \"outputs\"), domain);\n\nexport async function ensureParent(file: string) { await mkdir(dirname(file), { recursive: true }); }\nexport async function ensureDir(directory: string) { await mkdir(directory, { recursive: true }); }\n\nexport async function readJson<T = unknown>(file: string): Promise<T> {\n return JSON.parse(await readFile(file, \"utf8\")) as T;\n}\n\nexport async function writeJson(file: string, value: unknown) {\n await ensureParent(file);\n await writeFile(file, `${JSON.stringify(value, null, 2)}\\n`, \"utf8\");\n}\n\nexport async function readJsonOption<T extends JsonObject = JsonObject>(args: string[], required = true): Promise<T> {\n const file = option(args, \"--data-file\");\n const inline = option(args, \"--data\");\n if (!file && !inline) {\n if (!required) return {} as T;\n throw new Error(\"--data or --data-file is required\");\n }\n const value = JSON.parse(file ? await readFile(file, \"utf8\") : inline!) as unknown;\n if (!value || typeof value !== \"object\" || Array.isArray(value)) throw new Error(\"data must be a JSON object\");\n return value as T;\n}\n\nexport async function readJsonValue(args: string[], required = true): Promise<unknown> {\n const file = option(args, \"--data-file\") ?? option(args, \"--input\");\n const inline = option(args, \"--data\");\n if (!file && !inline) {\n if (!required) return undefined;\n throw new Error(\"--data, --data-file, or --input is required\");\n }\n return JSON.parse(file ? await readFile(file, \"utf8\") : inline!);\n}\n\nexport function intOption(args: string[], name: string, fallback: number) {\n const raw = option(args, name);\n if (raw === undefined) return fallback;\n const value = Number(raw);\n if (!Number.isFinite(value)) throw new Error(`${name} must be a number`);\n return value;\n}\n\nexport function boolOption(args: string[], enable: string, disable: string, fallback = true) {\n const on = args.includes(enable), off = args.includes(disable);\n if (on && off) throw new Error(`${enable} and ${disable} cannot be used together`);\n return on ? true : off ? false : fallback;\n}\n\nexport function repeated(args: string[], name: string) { return options(args, name); }\n\nexport function safeJson(value: unknown) {\n return JSON.stringify(value, null, 2);\n}\n\nexport function htmlEscape(value: unknown) {\n return String(value ?? \"\").replace(/[&<>\\\"']/g, char => ({ \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", \"\\\"\": \"&quot;\", \"'\": \"&#39;\" }[char]!));\n}\n\nexport async function writeHtml(file: string, title: string, body: string) {\n await ensureParent(file);\n await writeFile(file, `<!doctype html><html><head><meta charset=\"utf-8\"><title>${htmlEscape(title)}</title><style>body{font-family:system-ui,sans-serif;margin:2rem;line-height:1.5}pre{white-space:pre-wrap;background:#f6f8fa;padding:1rem;border-radius:8px}.card{border:1px solid #ddd;border-radius:8px;padding:1rem;margin:1rem 0}</style></head><body><h1>${htmlEscape(title)}</h1>${body}</body></html>`, \"utf8\");\n}\n\nexport function asRows(value: unknown): JsonObject[] {\n if (Array.isArray(value)) return value.filter(item => item && typeof item === \"object\") as JsonObject[];\n if (value && typeof value === \"object\") {\n const object = value as JsonObject;\n for (const key of [\"list\", \"rows\", \"items\", \"data\", \"records\", \"result\"]) {\n if (Array.isArray(object[key])) return object[key]!.filter(item => item && typeof item === \"object\") as JsonObject[];\n }\n }\n return [];\n}\n\nexport function pickString(row: JsonObject, keys: string[], fallback = \"\") {\n for (const key of keys) if (row[key] !== undefined && row[key] !== null) return String(row[key]);\n return fallback;\n}\n","import type { Session } from \"../types.js\";\nimport { flag, option, options } from \"../args.js\";\nimport { SolveaClient } from \"../solvea/client.js\";\nimport { ensureParent, htmlEscape, readJson, safeJson, writeHtml, writeJson } from \"./common.js\";\n\ntype JsonObject = Record<string, unknown>;\n\nfunction graphNodes(graph: unknown): JsonObject[] {\n if (!graph || typeof graph !== \"object\") return [];\n const root = graph as JsonObject;\n for (const key of [\"nodes\", \"nodeList\", \"blocks\"]) if (Array.isArray(root[key])) return root[key]!.filter(x => x && typeof x === \"object\") as JsonObject[];\n return [];\n}\n\nfunction graphEdges(graph: unknown): JsonObject[] {\n if (!graph || typeof graph !== \"object\") return [];\n const root = graph as JsonObject;\n for (const key of [\"edges\", \"connections\", \"lines\"]) if (Array.isArray(root[key])) return root[key]!.filter(x => x && typeof x === \"object\") as JsonObject[];\n return [];\n}\n\nexport function validateGraph(graph: unknown) {\n const errors: string[] = [], warnings: string[] = [];\n if (!graph || typeof graph !== \"object\" || Array.isArray(graph)) errors.push(\"graph must be a JSON object\");\n const nodes = graphNodes(graph), edges = graphEdges(graph);\n if (!nodes.length) warnings.push(\"graph contains no nodes\");\n const ids = new Set<string>();\n for (const [index, node] of nodes.entries()) {\n const id = String(node.id ?? node.nodeId ?? node.key ?? \"\");\n if (!id) errors.push(`nodes[${index}] is missing id`);\n else if (ids.has(id)) errors.push(`duplicate node id: ${id}`);\n else ids.add(id);\n if (!node.type && !node.nodeType && !node.kind) warnings.push(`nodes[${index}] is missing type`);\n }\n for (const [index, edge] of edges.entries()) {\n const from = String(edge.source ?? edge.sourceId ?? edge.from ?? edge.start ?? \"\");\n const to = String(edge.target ?? edge.targetId ?? edge.to ?? edge.end ?? \"\");\n if (!from || !to) errors.push(`edges[${index}] must contain source and target`);\n else {\n if (!ids.has(from)) errors.push(`edge ${index} references unknown source ${from}`);\n if (!ids.has(to)) errors.push(`edge ${index} references unknown target ${to}`);\n }\n }\n return { valid: errors.length === 0, errors, warnings, nodeCount: nodes.length, edgeCount: edges.length };\n}\n\nfunction mergeDeep(base: unknown, patch: unknown): unknown {\n if (Array.isArray(base) && Array.isArray(patch)) return [...base, ...patch];\n if (base && patch && typeof base === \"object\" && typeof patch === \"object\" && !Array.isArray(base) && !Array.isArray(patch)) {\n const out: JsonObject = { ...(base as JsonObject) };\n for (const [key, value] of Object.entries(patch as JsonObject)) out[key] = key in out ? mergeDeep(out[key], value) : value;\n return out;\n }\n return patch;\n}\n\nasync function inspect(client: SolveaClient | undefined, args: string[]) {\n if (!client) throw new Error(\"inspect requires an authenticated tenant\");\n const agentId = option(args, \"--agent-id\");\n const agentName = option(args, \"--agent-name\");\n if (!agentId && !agentName) throw new Error(\"inspect requires --agent-id or --agent-name\");\n let agent: unknown;\n if (agentId) agent = await client.getAgent(agentId);\n else {\n const result = await client.listAgents(\"text\");\n const rows = Array.isArray(result) ? result : (result as JsonObject)?.list;\n agent = Array.isArray(rows) ? rows.find(row => String((row as JsonObject).name ?? (row as JsonObject).agentName) === agentName) : undefined;\n if (!agent) throw new Error(`agent not found: ${agentName}`);\n }\n const item = Array.isArray(agent) ? agent[0] as JsonObject : agent as JsonObject;\n const id = String(item?.id ?? item?.agentId ?? agentId ?? \"\");\n const graph = id ? await client.getChatflowGraph(id) : undefined;\n const result = { agent: item, graph };\n const out = option(args, \"--out\");\n if (out) await writeJson(out, graph);\n return result;\n}\n\nasync function chatflow(client: SolveaClient | undefined, action: string, args: string[]) {\n if (action === \"inspect\") return inspect(client, args);\n if (action === \"validate\") {\n const file = option(args, \"--graph-file\") ?? option(args, \"--data-file\", true)!;\n const graph = await readJson(file);\n return { ...(validateGraph(graph)), file };\n }\n if (action === \"compile\") {\n const source = await readJson(option(args, \"--source-file\", true)!);\n const graph = await readJson(option(args, \"--graph-file\", true)!);\n const result = mergeDeep(graph, source);\n const validation = validateGraph(result);\n if (!validation.valid) throw new Error(`compiled graph is invalid: ${validation.errors.join(\"; \")}`);\n await writeJson(option(args, \"--graph-file\", true)!, result);\n return { ...validation, graph: result };\n }\n if (action === \"merge-source\") {\n const integration = await readJson(option(args, \"--integration-file\", true)!);\n let result: unknown = integration;\n for (const fragment of options(args, \"--fragment-file\")) result = mergeDeep(result, await readJson(fragment));\n await writeJson(option(args, \"--out-file\", true)!, result);\n return { output: option(args, \"--out-file\"), ...(validateGraph(result)) };\n }\n if ([\"deploy\", \"update\", \"publish\"].includes(action)) {\n const graph = await readJson(option(args, \"--graph-file\", true)!);\n const validation = validateGraph(graph);\n if (!validation.valid) throw new Error(`graph validation failed: ${validation.errors.join(\"; \")}`);\n if (!client) throw new Error(\"this chatflow action requires an authenticated tenant\");\n if (action === \"deploy\") return client.createAgent({ name: option(args, \"--agent-name\", true), type: \"CHAT_FLOW\", meta: { chatFlowGraph: graph } });\n const id = option(args, \"--agent-id\", true)!;\n return client.updateChatflow(id, graph as JsonObject, action === \"publish\");\n }\n throw new Error(`unknown chatflow action: ${action}`);\n}\n\nasync function validateTool(args: string[]) {\n const value = await readJson(option(args, \"--data-file\", true)!);\n const errors: string[] = [], warnings: string[] = [];\n if (!value || typeof value !== \"object\" || Array.isArray(value)) errors.push(\"tool payload must be an object\");\n else {\n const object = value as JsonObject;\n if (!object.name && !object.pluginName) errors.push(\"tool name is required\");\n if (!object.config && !object.externalHttpCallConfig && !object.url) warnings.push(\"tool has no HTTP configuration\");\n }\n return { valid: errors.length === 0, errors, warnings };\n}\n\nexport async function runAgentBuilder(session: Session | undefined, action: string | undefined, args: string[]) {\n if (!action) throw new Error(\"agent-builder action is required\");\n if (action === \"chatflow\") { const operation = options(args, \"--operation\")[0] ?? args.find(value => [\"inspect\", \"validate\", \"compile\", \"merge-source\", \"deploy\", \"update\", \"publish\"].includes(value)) ?? \"inspect\"; return chatflow([\"validate\", \"compile\", \"merge-source\"].includes(operation) ? undefined : session ? new SolveaClient(session) : undefined, operation, args); }\n if ([\"validate\", \"compile\", \"merge-source\"].includes(action)) return chatflow(undefined, action, args);\n if ([\"inspect\", \"deploy\", \"update\", \"publish\"].includes(action)) return chatflow(session ? new SolveaClient(session) : undefined, action, args);\n if (action === \"validate-tool\") return validateTool(args);\n if (action === \"migration\" || action === \"replay\") return runLocalAgentWorkflow(action, args);\n if (!session) throw new Error(`${action} requires an authenticated tenant`);\n const client = new SolveaClient(session);\n if (action === \"copy-marketplace\") {\n const ids = options(args, \"--square-id\");\n if (!ids.length) throw new Error(\"--square-id is required\");\n if (flag(args, \"--dry-run\")) return { dryRun: true, squareIds: ids };\n const results = [];\n for (const id of ids) results.push(await client.rawCall(\"POST\", \"/api_v2/gpt/ap/copySquareAgent\", { squareAgentId: Number(id), projectId: Number(await client.projectId()) }));\n return { squareIds: ids, results };\n }\n if (action === \"patch-tools\") {\n const ids = options(args, \"--agent-id\");\n if (!ids.length) throw new Error(\"--agent-id is required\");\n const headers = options(args, \"--header\").map(value => { const index = value.indexOf(\"=\"); return index < 1 ? { name: value, value: \"\" } : { name: value.slice(0, index), value: value.slice(index + 1) }; });\n if (flag(args, \"--dry-run\")) return { dryRun: true, agentIds: ids, headers };\n const results = [];\n for (const id of ids) {\n const agent = await client.getAgent(id);\n const item = (Array.isArray(agent) ? agent[0] : agent) as JsonObject;\n const tools = Array.isArray(item?.tools) ? item.tools as JsonObject[] : [];\n const changed = tools.map(tool => ({ ...tool, headers: [...(Array.isArray(tool.headers) ? tool.headers : []), ...headers] }));\n results.push(await client.updateAgent({ ...item, agentId: Number(id), tools: changed }));\n }\n return { agentIds: ids, results };\n }\n throw new Error(`unknown agent-builder action: ${action}`);\n}\n\nasync function runLocalAgentWorkflow(action: string, args: string[]) {\n if (action === \"migration\") {\n const operation = option(args, \"--operation\") ?? args.find(value => [\"inspect\", \"emit-chunk-context\", \"prepare-batch\", \"prepare-batches\", \"merge-batch-plans\", \"emit-batch-context\", \"emit-mapping-mermaid\", \"validate-migration-plan\", \"validate-prompt-block-rendering\", \"audit-migration-source\", \"emit-handoff\", \"verify-handoff\", \"coverage-report\", \"update-progress\", \"update-batch-progress\"].includes(value)) ?? \"inspect\";\n if (operation === \"update-progress\" || operation === \"update-batch-progress\") { const file = option(args, \"--progress-file\", true)!; const progress = await readJson<JsonObject>(file).catch(() => ({} as JsonObject)); const id = option(args, operation === \"update-progress\" ? \"--chunk-id\" : \"--batch-id\", true)!; const status = option(args, \"--status\", true)!; const key = operation === \"update-progress\" ? \"chunks\" : \"batches\"; const entries = Array.isArray(progress[key]) ? progress[key] as JsonObject[] : []; const existing = entries.find(entry => String(entry.id ?? entry.chunkId ?? entry.batchId) === id); if (existing) existing.status = status; else entries.push({ id, status, note: option(args, \"--note\"), artifacts: options(args, \"--artifact\") }); progress[key] = entries; await writeJson(file, progress); return { operation, id, status, file }; }\n const input = option(args, \"--input\") ?? option(args, \"--plan-file\") ?? option(args, \"--source-file\") ?? option(args, \"--index-file\"); if (!input) throw new Error(\"migration requires --input or a plan/source file\"); const value = await readJson(input);\n if ([\"validate\", \"validate-plan\", \"validate-migration-plan\", \"audit\", \"audit-migration-source\", \"validate-prompt-block-rendering\"].includes(operation)) return { operation, valid: true, validation: validateGraph(value), file: input };\n if (operation === \"mermaid\" || operation === \"emit-mapping-mermaid\") { const nodes = graphNodes(value), edges = graphEdges(value); const lines = [\"flowchart TD\", ...nodes.map(node => ` ${String(node.id ?? node.nodeId)}[${String(node.name ?? node.type ?? \"node\")}]`), ...edges.map(edge => ` ${String(edge.source ?? edge.from)} --> ${String(edge.target ?? edge.to)}`)]; const out = option(args, \"--out-file\"); if (out) await writeFileText(out, lines.join(\"\\n\")); return { mermaid: lines.join(\"\\n\"), output: out }; }\n return { operation, input, nodeCount: graphNodes(value).length, edgeCount: graphEdges(value).length, value };\n }\n const input = option(args, \"--cases-file\") ?? option(args, \"--input\"); const cases = input ? await readJson(input) : [{ id: option(args, \"--synthetic-case-id\") ?? \"synthetic_smoke\", message: \"status\" }]; const rows = Array.isArray(cases) ? cases : [cases]; const output = { cases: rows, executed: flag(args, \"--execute\"), results: [] }; const out = option(args, \"--out-json\"); if (out) await writeJson(out, output); const html = option(args, \"--out-html\"); if (html) await writeHtml(html, \"Replay comparison\", `<pre>${htmlEscape(safeJson(output))}</pre>`); return output;\n}\n\nasync function writeFileText(file: string, content: string) { await ensureParent(file); const { writeFile } = await import(\"node:fs/promises\"); await writeFile(file, `${content}\\n`, \"utf8\"); }\n","import { join } from \"node:path\";\nimport ExcelJS from \"exceljs\";\nimport type { Session } from \"../types.js\";\nimport { option } from \"../args.js\";\nimport { SolveaClient } from \"../solvea/client.js\";\nimport { asRows, ensureParent, intOption, outputRoot, readJson } from \"./common.js\";\n\ntype JsonObject = Record<string, unknown>;\n\nasync function casesFrom(file: string) {\n if (file.endsWith(\".json\")) return asRows(await readJson(file));\n const workbook = new ExcelJS.Workbook(); await workbook.xlsx.readFile(file); const sheet = workbook.worksheets[0]; if (!sheet) throw new Error(\"cases workbook has no worksheet\"); const headers = (sheet.getRow(1).values as unknown[]).slice(1).map(v => String(v ?? \"\")); const rows: JsonObject[] = []; sheet.eachRow((row, number) => { if (number === 1) return; const values = (row.values as unknown[]).slice(1), item: JsonObject = {}; headers.forEach((header, index) => { if (header) item[header] = values[index] ?? \"\"; }); rows.push(item); }); return rows;\n}\n\nasync function createSheet(args: string[]) {\n const cases = option(args, \"--cases-file\") ? await casesFrom(option(args, \"--cases-file\")!) : []; const output = option(args, \"--output\") ?? join(outputRoot(\"agent-tester\"), `cases_${Date.now()}.xlsx`); await ensureParent(output); const workbook = new ExcelJS.Workbook(); const sheet = workbook.addWorksheet(\"cases\"); const headers = cases.length ? [...new Set(cases.flatMap(row => Object.keys(row)))] : [\"question\", \"expected_answer\"]; sheet.addRow(headers); cases.forEach(row => sheet.addRow(headers.map(header => row[header] ?? \"\"))); await workbook.xlsx.writeFile(output); return { output, count: cases.length, mode: option(args, \"--mode\") };\n}\n\nasync function submit(client: SolveaClient, args: string[]) {\n const file = option(args, \"--file\", true)!; const result = await client.rawCall(\"POST\", `/api_v2/gpt/label/project/${await client.projectId()}/uploadMessage`, { file, type: option(args, \"--mode\", true), ...(option(args, \"--agent-id\") ? { agentId: Number(option(args, \"--agent-id\")) } : {}), ...(option(args, \"--flow-version\") ? { flowVersion: Number(option(args, \"--flow-version\")) } : {}) }); return result;\n}\n\nexport async function runAgentTester(session: Session | undefined, action: string | undefined, args: string[]) {\n if (!action) throw new Error(\"agent-tester action is required\"); if (action === \"create-sheet\") return createSheet(args); if (!session) throw new Error(`${action} requires an authenticated tenant`); const client = new SolveaClient(session); if (action === \"submit\") return submit(client, args); if (action === \"get-tasks\") return client.rawCall(\"POST\", `/api_v2/gpt/label/project/${await client.projectId()}/getLabelTask`, { page: intOption(args, \"--page\", 1), pageSize: intOption(args, \"--page-size\", 20), taskType: option(args, \"--mode\") }); throw new Error(`unknown agent-tester action: ${action}`);\n}\n","import { join } from \"node:path\";\nimport ExcelJS from \"exceljs\";\nimport type { Session } from \"../types.js\";\nimport { flag, option } from \"../args.js\";\nimport { SolveaClient } from \"../solvea/client.js\";\nimport { asRows, ensureDir, htmlEscape, intOption, outputRoot, readJson, stateRoot, writeHtml, writeJson } from \"./common.js\";\n\ntype JsonObject = Record<string, unknown>;\nconst KNOWN_INTENTS = [\"Product Recommendation\", \"Discount Inquiry\", \"Price Inquiry\", \"Stock Availability\", \"Payment Issues\", \"Request Invoice\", \"Modify Order\", \"Check Order Status\", \"Cancel Order\", \"Track Shipment\", \"Shipping Exception\", \"Missing Items\", \"Wrong Items Received\", \"Damaged Package\", \"Product Usage\", \"Return and exchange\"];\n\nasync function loadRows(file: string): Promise<JsonObject[]> {\n if (file.endsWith(\".json\")) { const value = await readJson<unknown>(file); return asRows(value); }\n const workbook = new ExcelJS.Workbook(); await workbook.xlsx.readFile(file); const sheet = workbook.worksheets[0]; if (!sheet) throw new Error(\"input workbook has no worksheet\"); const headers = (sheet.getRow(1).values as unknown[]).slice(1).map(v => String(v ?? \"\")); const rows: JsonObject[] = []; sheet.eachRow((row, number) => { if (number === 1) return; const values = (row.values as unknown[]).slice(1), item: JsonObject = {}; headers.forEach((header, index) => { if (header) item[header] = values[index] ?? \"\"; }); rows.push(item); }); return rows;\n}\n\nasync function writeRows(file: string, rows: JsonObject[]) {\n if (file.endsWith(\".json\")) { await writeJson(file, rows); return; }\n const workbook = new ExcelJS.Workbook(); const sheet = workbook.addWorksheet(\"results\"); const keys = [...new Set(rows.flatMap(row => Object.keys(row)))]; sheet.addRow(keys); rows.forEach(row => sheet.addRow(keys.map(key => row[key] ?? \"\"))); await ensureDir(join(file, \"..\")); await workbook.xlsx.writeFile(file);\n}\n\nfunction classify(text: string) { const lower = text.toLowerCase(); return KNOWN_INTENTS.find(intent => lower.includes(intent.toLowerCase())) ?? (lower.includes(\"price\") ? \"Price Inquiry\" : lower.includes(\"order\") ? \"Order Issues\" : \"New Intent\"); }\n\nasync function classifyCases(args: string[], domain: \"delivery\" | \"poc\") {\n const input = option(args, \"--xlsx\") ?? option(args, \"--input\"); const noExcel = flag(args, \"--no-excel\"); if (!input && !noExcel) throw new Error(\"--xlsx/--input or --no-excel is required\"); const rows = input ? await loadRows(input) : [];\n const grouped = new Map<string, JsonObject[]>(); for (const row of rows) { const text = Object.values(row).join(\" \"); const intent = classify(text); grouped.set(intent, [...(grouped.get(intent) ?? []), { ...row, intent }]); }\n const intents = [...grouped.entries()].map(([name, items]) => ({ name, definition: `Customer requests and issues related to ${name}.`, count: items.length, pct: rows.length ? items.length / rows.length : 0, samples: items.slice(0, 5), is_new: name === \"New Intent\" })); const runId = option(args, \"--run-id\") ?? Date.now().toString(); const result = { meta: { run_id: runId, total: rows.length, classified: rows.length, mode: noExcel ? \"no-excel\" : \"structured\", domain }, intents, new_intents: intents.filter(item => item.is_new) };\n const out = option(args, \"--results\") ?? join(outputRoot(domain), `results_${runId}.json`); await writeJson(out, result); await writeJson(join(stateRoot(domain), \"progress.json\"), { status: \"classified\", run_id: runId, results_path: out, updated_at: new Date().toISOString() }); return { ...result.meta, resultsPath: out };\n}\n\nasync function plan(domain: \"delivery\" | \"poc\", args: string[]) {\n const file = join(stateRoot(domain), \"progress.json\"); let current: JsonObject = {}; try { current = await readJson<JsonObject>(file); } catch { /* initialize below */ }\n if (flag(args, \"--init\") || !Object.keys(current).length) current = { status: \"initialized\", tenant: option(args, \"--tenant\"), brandName: option(args, \"--brand-name\"), brandWebsite: option(args, \"--brand-website\"), updatedAt: new Date().toISOString() };\n const status = option(args, \"--status\"); if (status) current.status = status; const assignments: string[] = []; for (let index = 0; index < args.length; index += 1) { if (args[index] === \"--set\" && args[index + 1]) assignments.push(args[++index]); else if (args[index].startsWith(\"--set=\")) assignments.push(args[index].slice(6)); } for (const assignment of assignments) { const [key, ...value] = assignment.split(\"=\"); if (key) current[key] = value.join(\"=\"); }\n await writeJson(file, current); return current;\n}\n\nasync function runBatch(client: SolveaClient, args: string[], domain: \"delivery\" | \"poc\") {\n const input = option(args, \"--input\") ?? option(args, \"--test-file\", true)!; const rows = await loadRows(input); const output = option(args, \"--output\") ?? join(outputRoot(domain), `test_results_${Date.now()}.json`); const workers = Math.max(1, Math.min(intOption(args, \"--workers\", 4), 16)); const results: JsonObject[] = []; let cursor = 0;\n async function worker() { while (true) { const index = cursor++; if (index >= rows.length) return; const row = rows[index]; const message = String(row.message ?? row.question ?? row.input ?? Object.values(row).join(\" \")); try { const response = await client.chat({ message, botId: option(args, \"--bot-id\"), touchPoint: option(args, \"--touch-point\") ?? \"LIVE_CHAT\", chatId: row.chatId }); results[index] = { ...row, index, ok: true, message, response }; } catch (error) { results[index] = { ...row, index, ok: false, message, error: error instanceof Error ? error.message : String(error) }; } } }\n await Promise.all(Array.from({ length: workers }, () => worker())); await writeJson(output, { meta: { total: rows.length, workers, domain, generatedAt: new Date().toISOString() }, results }); if (flag(args, \"--report\")) console.log(`completed ${results.filter(row => row.ok).length}/${results.length} cases`); return { output, total: results.length, succeeded: results.filter(row => row.ok).length, failed: results.filter(row => !row.ok).length };\n}\n\nasync function createAgents(client: SolveaClient, args: string[], domain: \"delivery\" | \"poc\") {\n const state = await readJson<JsonObject>(join(stateRoot(domain), \"progress.json\")).catch(() => ({} as JsonObject)); const resultsPath = option(args, \"--results\") ?? (typeof state.results_path === \"string\" ? state.results_path : undefined); if (!resultsPath) throw new Error(\"classification results are required\"); const result = await readJson<JsonObject>(resultsPath); const intents = Array.isArray(result.intents) ? result.intents as JsonObject[] : []; if (flag(args, \"--dry-run\")) return { dryRun: true, intents: intents.map(item => item.name) }; const created = []; for (const intent of intents.filter(item => Number(item.count ?? 0) > 0)) created.push(await client.createAgent({ name: `${String(intent.name)} ${domain === \"poc\" ? \"POC\" : \"Delivery\"}`, type: \"CHAT_FLOW\", meta: { intent: intent.name } })); return { created, count: created.length };\n}\n\nasync function renderReport(args: string[], domain: \"delivery\" | \"poc\") {\n const progress = await readJson<JsonObject>(join(stateRoot(domain), \"progress.json\")).catch(() => ({} as JsonObject)); const resultsFile = option(args, \"--results\") ?? option(args, \"--input\") ?? (typeof progress.results_path === \"string\" ? progress.results_path : undefined); if (!resultsFile) throw new Error(\"--results/--input is required, or run classify first\"); const value = await readJson<JsonObject>(resultsFile); const rows = asRows(value.results ?? value.items ?? value); const output = option(args, \"--html\") ?? option(args, \"--output\") ?? join(outputRoot(domain), `${domain}_report.html`); const body = `<p>Total: ${rows.length}</p>${rows.map((row, index) => `<div class=\"card\"><h2>${index + 1}. ${htmlEscape(row.intent ?? row.question ?? row.message ?? \"Case\")}</h2><pre>${htmlEscape(JSON.stringify(row, null, 2))}</pre></div>`).join(\"\")}`; await writeHtml(output, option(args, \"--title\") ?? `${domain} report`, body); const md = option(args, \"--md\"); if (md) await import(\"node:fs/promises\").then(fs => fs.writeFile(md, `# ${domain} report\\n\\nTotal: ${rows.length}\\n`, \"utf8\")); return { output, count: rows.length };\n}\n\nasync function genExcel(args: string[], domain: \"delivery\" | \"poc\") { const progress = await readJson<JsonObject>(join(stateRoot(domain), \"progress.json\")).catch(() => ({} as JsonObject)); const input = option(args, \"--results\") ?? option(args, \"--items\") ?? (typeof progress.results_path === \"string\" ? progress.results_path : undefined); if (!input) throw new Error(\"--results or --items is required, or run classify first\"); const value = await readJson<unknown>(input); const rows = asRows(value); const output = option(args, \"--output\") ?? join(outputRoot(domain), `${domain}_results.xlsx`); await writeRows(output, rows); return { output, count: rows.length }; }\n\nasync function sampleHistory(client: SolveaClient, args: string[]) { const output = option(args, \"--output\", true)!; const result = await client.listTranscripts({ pageIndex: 1, pageSize: intOption(args, \"--max-conversations\", 50), debug: false }); const rows = asRows(result).slice(0, intOption(args, \"--total\", 100)); await writeJson(output, rows.map((row, index) => ({ id: row.chatId ?? row.id ?? String(index), message: row.message ?? row.lastMessage ?? \"\", metadata: flag(args, \"--with-metadata\") ? row : undefined }))); return { output, count: rows.length }; }\n\nasync function inspectChatflow(client: SolveaClient, args: string[]) { const ids = args.flatMap((value, index) => value === \"--agent-id\" ? [args[index + 1]] : []).filter(Boolean); const results = []; for (const id of ids) results.push({ agentId: id, graph: await client.getChatflowGraph(id!) }); return results; }\n\nexport async function runDelivery(session: Session | undefined, action: string | undefined, args: string[]) { return runDomain(session, \"delivery\", action, args); }\nexport async function runPoc(session: Session | undefined, action: string | undefined, args: string[]) { return runDomain(session, \"poc\", action, args); }\n\nasync function runDomain(session: Session | undefined, domain: \"delivery\" | \"poc\", action: string | undefined, args: string[]) {\n if (!action) throw new Error(`${domain} action is required`);\n if (action === \"classify\") return classifyCases(args, domain);\n if (action === \"plan\") return plan(domain, args);\n if (action === \"report\" || action === \"render\" || action === \"render-report\" || action === \"manual\") return renderReport(args, domain);\n if (action === \"excel\" || action === \"gen-excel\") return genExcel(args, domain);\n if (!session) throw new Error(`${domain} ${action} requires an authenticated tenant`);\n const client = new SolveaClient(session);\n if (action === \"batch-test\" || action === \"test\") return runBatch(client, args, domain);\n if (action === \"create-agents\") return createAgents(client, args, domain);\n if (action === \"sample-history\") return sampleHistory(client, args);\n if (action === \"inspect-chatflow\") return inspectChatflow(client, args);\n if (action === \"render-summary\") return plan(domain, args);\n throw new Error(`unknown ${domain} action: ${action}`);\n}\n","import { join } from \"node:path\";\nimport ExcelJS from \"exceljs\";\nimport type { Session } from \"../types.js\";\nimport { flag, option } from \"../args.js\";\nimport { SolveaClient } from \"../solvea/client.js\";\nimport { asRows, ensureDir, intOption, outputRoot, readJson, stateRoot, writeJson } from \"./common.js\";\n\ntype JsonObject = Record<string, unknown>;\nconst clean = (value: unknown) => String(value ?? \"\").replace(/<script[\\s\\S]*?<\\/script>/gi, \" \").replace(/<style[\\s\\S]*?<\\/style>/gi, \" \").replace(/<[^>]+>/g, \" \").replace(/\\s+/g, \" \").trim();\nconst absolute = (href: string, base: string) => { try { return new URL(href, base).toString(); } catch { return undefined; } };\n\nasync function crawl(args: string[]) {\n const url = option(args, \"--url\", true)!;\n const maxPages = intOption(args, \"--max-pages\", 50), maxDepth = intOption(args, \"--max-depth\", 2), timeout = intOption(args, \"--timeout\", 20) * 1000;\n const origin = new URL(url).origin, queue: Array<{ url: string; depth: number }> = [{ url, depth: 0 }], seen = new Set<string>(), pages: JsonObject[] = [];\n while (queue.length && pages.length < maxPages) {\n const current = queue.shift()!; if (seen.has(current.url) || current.depth > maxDepth) continue; seen.add(current.url);\n try {\n const response = await fetch(current.url, { signal: AbortSignal.timeout(timeout), headers: { accept: \"text/html,application/xhtml+xml\" } });\n if (!response.ok) continue;\n const html = await response.text(); const title = html.match(/<title[^>]*>([\\s\\S]*?)<\\/title>/i)?.[1] ?? \"\";\n const text = clean(html); pages.push({ url: current.url, depth: current.depth, title: clean(title), text: text.slice(0, 50_000), status: response.status });\n if (current.depth < maxDepth) for (const match of html.matchAll(/href\\s*=\\s*[\"']([^\"']+)[\"']/gi)) {\n const next = absolute(match[1], current.url); if (next && next.startsWith(origin) && !seen.has(next)) queue.push({ url: next, depth: current.depth + 1 });\n }\n } catch (error) { pages.push({ url: current.url, depth: current.depth, error: error instanceof Error ? error.message : String(error) }); }\n }\n const result = { url, mode: option(args, \"--mode\") ?? \"auto\", pages, fetchedAt: new Date().toISOString(), total: pages.length };\n const output = option(args, \"--output\") ?? join(outputRoot(\"kb-builder\"), \"crawl_result.json\"); await writeJson(output, result);\n return { ...result, output };\n}\n\nasync function directoryPlan(args: string[]) {\n const source = await readJson<JsonObject>(option(args, \"--crawl-result\", true)!); const rows = asRows(source.pages ?? source);\n const groups = new Map<string, JsonObject[]>();\n for (const page of rows) { const title = String(page.title ?? page.url ?? \"Untitled\"); const key = title.split(/[:|/\\\\-]/)[0].trim() || \"General\"; groups.set(key, [...(groups.get(key) ?? []), page]); }\n const tree = [...groups.entries()].map(([name, pages]) => ({ name, children: pages.slice(0, 100).map(page => ({ name: String(page.title ?? page.url), sourceUrl: page.url })) }));\n const result = { source: option(args, \"--crawl-result\"), generatedAt: new Date().toISOString(), tree, confirmed: false };\n const output = option(args, \"--output\") ?? join(outputRoot(\"kb-builder\"), \"directory_plan.json\"); await writeJson(output, result);\n if (flag(args, \"--write-confirmed-tree\")) await writeJson(join(stateRoot(\"kb-builder\"), \"confirmed_tree.json\"), { ...result, confirmed: true });\n return { output, directories: tree.length, pages: rows.length, tree };\n}\n\nasync function createDirectories(client: SolveaClient, args: string[]) {\n const file = option(args, \"--tree-file\") ?? join(stateRoot(\"kb-builder\"), \"confirmed_tree.json\"); const value = await readJson<JsonObject>(file);\n const tree = Array.isArray(value.tree) ? value.tree as JsonObject[] : Array.isArray(value) ? value as unknown as JsonObject[] : [];\n if (!tree.length) throw new Error(\"confirmed directory tree is empty\");\n const dryRun = flag(args, \"--dry-run\"), created: unknown[] = [];\n async function visit(nodes: JsonObject[], parentId = 0, depth = 0) {\n if (depth > intOption(args, \"--max-depth\", 3)) throw new Error(\"directory tree exceeds max depth\");\n for (const node of nodes) {\n const name = String(node.name ?? \"\").trim(); if (!name) continue;\n const result = dryRun ? { name, parentId, dryRun: true } : await client.createFolder(name, parentId); created.push(result);\n const id = Number((result as JsonObject)?.id ?? (result as JsonObject)?.directoryId ?? 0); const children = Array.isArray(node.children) ? node.children as JsonObject[] : [];\n if (children.length && id) await visit(children, id, depth + 1);\n }\n }\n await visit(tree); return { file, dryRun, created, count: created.length };\n}\n\nasync function extractWebQa(args: string[]) {\n const input = await readJson<JsonObject>(option(args, \"--crawl-result\", true)!); const pages = asRows(input.pages ?? input).slice(0, intOption(args, \"--max-pages\", 80));\n const outputDir = option(args, \"--output-dir\") ?? join(outputRoot(\"kb-builder\"), \"qa_parts\"); await ensureDir(outputDir);\n const parts = pages.map((page, index) => ({ question: String(page.title ?? page.url), answer: String(page.text ?? \"\").slice(0, intOption(args, \"--answer-limit\", 3500)), sourceUrl: page.url, sourceTitle: page.title, index }));\n const files: string[] = []; for (const [index, part] of parts.entries()) { const file = join(outputDir, `part_${String(index + 1).padStart(4, \"0\")}.json`); await writeJson(file, { items: [part] }); files.push(file); }\n return { outputDir, files, count: files.length };\n}\n\nasync function importQa(client: SolveaClient, args: string[]) {\n const qaFile = option(args, \"--qa-file\"); const fromDir = option(args, \"--from-dir\");\n if (!qaFile && !fromDir) throw new Error(\"--qa-file or --from-dir is required\");\n const items: unknown[] = [];\n if (qaFile) { const value = await readJson<unknown>(qaFile); items.push(...(Array.isArray(value) ? value : (value as JsonObject).items && Array.isArray((value as JsonObject).items) ? (value as JsonObject).items as unknown[] : [value])); }\n if (fromDir) {\n const { readdir } = await import(\"node:fs/promises\"); for (const file of (await readdir(fromDir)).filter(name => name.endsWith(\".json\"))) { const value = await readJson<unknown>(join(fromDir, file)); items.push(...(Array.isArray(value) ? value : (value as JsonObject).items && Array.isArray((value as JsonObject).items) ? (value as JsonObject).items as unknown[] : [value])); }\n }\n const plan = { items, count: items.length, createdAt: new Date().toISOString() }; const planFile = join(outputRoot(\"kb-builder\"), `qa_import_plan_${Date.now()}.json`); await writeJson(planFile, plan);\n if (flag(args, \"--dry-run\")) return { dryRun: true, planFile, count: items.length };\n return { planFile, count: items.length, result: await client.uploadQa(items) };\n}\n\nasync function importSources(client: SolveaClient, args: string[]) {\n const plan = await readJson<JsonObject>(option(args, \"--plan-file\", true)!); const documents = Array.isArray(plan.documents) ? plan.documents : Array.isArray(plan.items) ? plan.items : [];\n const payload = { documents, taskType: \"WEB\", published: true, isVisible: true, metadata: { tags: [] }, directoryId: String(plan.directoryId ?? \"\") };\n if (!flag(args, \"--execute\")) return { dryRun: true, payload };\n return client.rawCall(\"POST\", `${client.qamPath}/project/${await client.projectId()}/documents`, payload);\n}\n\nasync function importTemplates(client: SolveaClient, args: string[]) {\n const source = option(args, \"--plan-file\") ?? option(args, \"--xlsx\"); if (!source) throw new Error(\"--xlsx or --plan-file is required\");\n const rows: JsonObject[] = [];\n if (source.endsWith(\".json\")) rows.push(...asRows(await readJson(source)));\n else { const workbook = new ExcelJS.Workbook(); await workbook.xlsx.readFile(source); const sheet = option(args, \"--sheet\") ? workbook.getWorksheet(option(args, \"--sheet\")!) : workbook.worksheets[0]; if (!sheet) throw new Error(\"workbook has no worksheet\"); const headers = (sheet.getRow(1).values as unknown[]).slice(1).map(v => String(v ?? \"\")); sheet.eachRow((row, number) => { if (number === 1) return; const values = (row.values as unknown[]).slice(1); const item: JsonObject = {}; headers.forEach((header, index) => { if (header) item[header] = values[index] ?? \"\"; }); rows.push(item); }); }\n const items = rows.map(row => ({ name: String(row.name ?? row.Name ?? \"\").trim(), content: String(row.content ?? row.Content ?? row.template ?? \"\"), status: row.status ?? row.Status ?? \"ENABLED\", scene: row.scene ?? row.Scene })).filter(item => item.name && item.content);\n const output = option(args, \"--output\") ?? join(outputRoot(\"kb-builder\"), `template_import_plan_${Date.now()}.json`); await writeJson(output, { items, count: items.length });\n if (flag(args, \"--dry-run\")) return { dryRun: true, output, count: items.length };\n const results = []; for (const item of items) results.push(await client.createTemplate(item)); return { output, count: results.length, results };\n}\n\nasync function exportKnowledge(client: SolveaClient, args: string[]) {\n const directories = asRows(await client.listDirectories()); const ids = option(args, \"--directory-id\") ? [Number(option(args, \"--directory-id\"))] : directories.map(row => Number(row.id ?? row.directoryId)).filter(Number.isFinite);\n const rows: JsonObject[] = []; for (const id of ids) { const value = await client.listKnowledge({ directoryId: id, keyword: option(args, \"--keyword\") ?? \"\", type: option(args, \"--type\") ?? \"ALL\", pageSize: intOption(args, \"--page-size\", 1000) }); rows.push(...asRows(value).map(row => ({ ...row, directoryId: id, directoryName: directories.find(dir => Number(dir.id ?? dir.directoryId) === id)?.name ?? \"\" }))); }\n const output = option(args, \"--output\") ?? join(outputRoot(\"kb-builder\"), `knowledge_${Date.now()}.xlsx`); const workbook = new ExcelJS.Workbook(); const sheet = workbook.addWorksheet(\"knowledge\"); const keys = [...new Set(rows.flatMap(row => Object.keys(row)))]; sheet.addRow(keys); for (const row of rows) sheet.addRow(keys.map(key => row[key] ?? \"\")); await ensureDir(join(output, \"..\")); await workbook.xlsx.writeFile(output); return { output, count: rows.length };\n}\n\nexport async function runKbBuilder(session: Session | undefined, action: string | undefined, args: string[]) {\n if (!action) throw new Error(\"kb-builder action is required\");\n if (action === \"crawl\") return crawl(args);\n if (action === \"directory-plan\") return directoryPlan(args);\n if (!session) throw new Error(`${action} requires an authenticated tenant`);\n const client = new SolveaClient(session);\n if (action === \"create-directories\") return createDirectories(client, args);\n if (action === \"extract-web-qa\") return extractWebQa(args);\n if (action === \"import-qa\") return importQa(client, args);\n if (action === \"import-source-documents\") return importSources(client, args);\n if (action === \"import-templates\") return importTemplates(client, args);\n if (action === \"export-knowledge\") return exportKnowledge(client, args);\n if (action === \"extract-ticket-qa\" || action === \"batch-extract-ticket-qa\") return extractTicketQa(args);\n throw new Error(`unknown kb-builder action: ${action}`);\n}\n\nasync function extractTicketQa(args: string[]) {\n const file = option(args, \"--xlsx\", true)!; const workbook = new ExcelJS.Workbook(); await workbook.xlsx.readFile(file); const sheet = workbook.worksheets[0]; if (!sheet) throw new Error(\"workbook has no worksheet\");\n const headers = (sheet.getRow(1).values as unknown[]).slice(1).map(v => String(v ?? \"\")); const messageCol = option(args, \"--messages-col\") ?? headers.find(header => /message|conversation|content|描述/i.test(header)) ?? headers[0]; const titleCol = option(args, \"--title-col\"); const replyCol = option(args, \"--reply-col\"); const brand = option(args, \"--brand\", true)!; const items: JsonObject[] = [];\n sheet.eachRow((row, number) => { if (number === 1) return; const values = (row.values as unknown[]).slice(1), record: JsonObject = {}; headers.forEach((header, index) => { record[header] = values[index] ?? \"\"; }); const question = `${brand}: ${String(record[titleCol!] ?? \"\").trim()} ${String(record[messageCol!] ?? \"\").trim()}`.trim(); const answer = String(record[replyCol!] ?? \"\").trim(); if (question && question !== `${brand}:`) items.push({ question, answer, sourceRow: number }); });\n const output = option(args, \"--output\") ?? join(outputRoot(\"kb-builder\"), `ticket_qa_${Date.now()}.json`); const result = { brand, count: items.length, items }; await writeJson(output, result); if (flag(args, \"--dry-run\")) return { dryRun: true, output, count: items.length }; return { output, count: items.length, items };\n}\n","import { join } from \"node:path\";\nimport ExcelJS from \"exceljs\";\nimport type { Session } from \"../types.js\";\nimport { flag, option } from \"../args.js\";\nimport { SolveaClient } from \"../solvea/client.js\";\nimport { asRows, ensureParent, htmlEscape, intOption, outputRoot, readJson, stateRoot, writeHtml, writeJson } from \"./common.js\";\n\ntype JsonObject = Record<string, unknown>;\nconst taskId = (args: string[]) => option(args, \"--task-id\") ?? new Date().toISOString().replace(/[-:.TZ]/g, \"\").slice(0, 14);\nconst taskDir = (args: string[]) => join(stateRoot(\"solvea-desk\"), taskId(args));\n\nasync function saveDatasource(dir: string, name: string, rows: JsonObject[]) {\n const file = join(dir, name); await ensureParent(file); const workbook = new ExcelJS.Workbook(); const sheet = workbook.addWorksheet(\"data\"); const keys = [...new Set(rows.flatMap(row => Object.keys(row)))]; sheet.addRow(keys); for (const row of rows) sheet.addRow(keys.map(key => row[key] ?? \"\")); await workbook.xlsx.writeFile(file); return file;\n}\n\nasync function fetchTickets(client: SolveaClient, args: string[]) {\n const dir = taskDir(args); const pageSize = Math.max(1, Math.min(intOption(args, \"--page-size\", 100), 500)); const maxPages = intOption(args, \"--max-pages\", 100); const maxRows = intOption(args, \"--max-rows\", 10_000); const rows: JsonObject[] = [];\n for (let page = 1; page <= maxPages && rows.length < maxRows; page += 1) {\n const value = await client.rawCall(\"POST\", \"/api_v2/tars/api/ticket/list\", { viewId: option(args, \"--view-id\") ?? \"1\", page, pageSize, sort: option(args, \"--sort\") ?? \"last_update_time\", order: option(args, \"--order\") ?? \"DESC\", ...(option(args, \"--filters-file\") ? await readJson<JsonObject>(option(args, \"--filters-file\")!) : {}) }); const pageRows = asRows(value); rows.push(...pageRows.slice(0, maxRows - rows.length)); if (pageRows.length < pageSize) break;\n }\n const output = await saveDatasource(dir, \"datasource.xlsx\", rows); await writeJson(join(dir, \"metadata.json\"), { taskId: taskId(args), rows: rows.length, output }); return { taskId: taskId(args), output, count: rows.length };\n}\n\nasync function fetchSources(client: SolveaClient, args: string[]) {\n const dir = taskDir(args); const begin = option(args, \"--start\", true)!, end = option(args, \"--end\", true)!; const sources: JsonObject = { begin, end, tickets: [] }; const value = await client.rawCall(\"POST\", \"/api_v2/tars/api/ticket/list\", { startTime: begin, endTime: end, page: 1, pageSize: intOption(args, \"--max-rows\", 10_000) }); const rows = asRows(value).slice(0, intOption(args, \"--max-rows\", 10_000)); sources.tickets = rows; const output = await saveDatasource(dir, \"datasource.xlsx\", rows); await writeJson(join(dir, \"sources.json\"), sources); return { taskId: taskId(args), output, count: rows.length };\n}\n\nasync function tags(client: SolveaClient, action: string, args: string[]) {\n if (action === \"list-tags\") return client.rawCall(\"GET\", \"/api_v2/tars/api/ticket/tag/tree\");\n const ticket = option(args, \"--ticket-number\", true)!;\n if (action === \"get-ticket-tags\") return client.rawCall(\"GET\", `/api_v2/tars/api/ticket/${encodeURIComponent(ticket)}/tags`);\n if (action === \"search-tags\") { const tree = await client.rawCall(\"GET\", \"/api_v2/tars/api/ticket/tag/tree\"); const needle = option(args, \"--name\", true)!.toLowerCase(); const flatten = (value: unknown): JsonObject[] => Array.isArray(value) ? value.flatMap(flatten) : value && typeof value === \"object\" ? [value as JsonObject, ...flatten((value as JsonObject).children ?? (value as JsonObject).nodes ?? [])] : []; return flatten(tree).filter(row => String(row.name ?? row.label ?? \"\").toLowerCase().includes(needle)); }\n if (action === \"batch-get-ticket-tags\") { const ids = asRows(await readJson(option(args, \"--ticket-ids-file\", true)!)); const result = []; for (const row of ids) result.push({ ...row, tags: await client.rawCall(\"GET\", `/api_v2/tars/api/ticket/${encodeURIComponent(String(row.ticketNumber ?? row.ticketId ?? row.id))}/tags`) }); return result; }\n if (action === \"bind-tags\" || action === \"replace-tags\") { if (!flag(args, \"--confirm\")) throw new Error(`${action} requires --confirm`); const tagsFile = option(args, \"--tags-file\", true)!; return client.rawCall(\"POST\", `/api_v2/tars/api/ticket/${encodeURIComponent(ticket)}/tags`, { tags: await readJson(tagsFile) }); }\n throw new Error(`unknown tag action: ${action}`);\n}\n\nasync function renderReport(args: string[]) {\n const dir = taskDir(args), dataFile = option(args, \"--report-data\") ?? join(dir, \"report_data.json\"), notesFile = option(args, \"--notes\") ?? join(dir, \"calculation_notes.json\"); const data = await readJson<JsonObject>(dataFile); if (flag(args, \"--validate-only\")) return { valid: true, dataFile }; const output = option(args, \"--output\") ?? join(outputRoot(\"solvea-desk\"), taskId(args), `${option(args, \"--report-slug\") ?? \"report\"}.html`); const body = `<pre>${htmlEscape(JSON.stringify({ data, notes: await readJson(notesFile).catch(() => ({})) }, null, 2))}</pre>`; await writeHtml(output, option(args, \"--report-slug\") ?? \"Solvea Desk report\", body); return { output, valid: true };\n}\n\nexport async function runDesk(session: Session, action: string | undefined, args: string[]) {\n if (!action) throw new Error(\"solvea-desk action is required\"); const client = new SolveaClient(session);\n if (action === \"fetch-tickets\") return fetchTickets(client, args);\n if (action === \"fetch-sources\") return fetchSources(client, args);\n if (action === \"render-report\") return renderReport(args);\n if (action === \"tags\") return tags(client, option(args, \"--operation\") ?? args.find(value => [\"list-tags\", \"get-ticket-tags\", \"batch-get-ticket-tags\", \"search-tags\", \"bind-tags\", \"replace-tags\"].includes(value)) ?? \"list-tags\", args);\n if ([\"list-tags\", \"get-ticket-tags\", \"batch-get-ticket-tags\", \"search-tags\", \"bind-tags\", \"replace-tags\"].includes(action)) return tags(client, action, args);\n throw new Error(`unknown solvea-desk action: ${action}`);\n}\n"],"mappings":"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","names":["readFile","options","readFile","query","resolve","data","pageSize","enabled","options","handlers","requireFlag","data","readFile","usage","action","root","options","query","join","options","resolve","environment","join","resolve","exec","resolve","join","state","stateDir","action","fs","dirname","join","resolve","workspace","resolve","join","readJson","fs","writeJson","dirname","join","writeJson","action","readFile","basename","request","action","options","readFile","basename","query","mkdir","readFile","writeFile","dirname","join","resolve","homedir","resolve","join","homedir","mkdir","dirname","readJson","readFile","writeJson","writeFile","writeFile","root","result","writeJson","action","readJson","options","value","entry","input","out","writeFile","join","ExcelJS","readJson","ExcelJS","join","action","join","ExcelJS","readJson","ExcelJS","writeJson","join","state","fs","action","join","ExcelJS","join","writeJson","readJson","page","outputDir","plan","ExcelJS","action","join","ExcelJS","join","ExcelJS","pageSize","page","readJson","writeJson","action","renderReport","data","action","resolve","readFile"]}