@shulex/cxclawctl 0.1.11 → 0.1.12
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/capabilities.lock.json +2 -2
- package/dist/cli.js +13 -2
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../src/auth.ts","../src/config.ts","../package.json","../src/version.ts","../src/http.ts","../src/store.ts","../runtime/auth-wait-state.mjs","../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, publicAuthStatus } 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\") {\n if (flag(args, \"--server\") || flag(args, \"--env\")) throw new Error(\"auth login 固定使用生产授权服务,不支持 --server 或 --env\");\n const session = await login((option(args, \"--channel\") ?? \"stable\") as \"stable\" | \"canary\" | \"dev\");\n return print(publicAuthStatus(session));\n }\n if (action === \"ensure\") return print(publicAuthStatus(await authenticated()));\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(publicAuthStatus(session));\n } catch { return print({ ok: true, loggedIn: false }); }\n }\n if (action === \"refresh\") { return print(publicAuthStatus(await authenticated())); }\n throw new Error(\"auth action must be login, ensure, 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 if (flag(args, \"--server\") || flag(args, \"--env\")) throw new Error(\"setup 固定使用生产授权服务,不支持 --server 或 --env\");\n const channel = (option(args, \"--channel\") ?? \"stable\") as \"stable\" | \"canary\" | \"dev\";\n await installMarketplace(channel); await login(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 { HttpError, post } from \"./http.js\";\nimport { deleteSession, loadSession, saveSession, SessionNotFoundError } from \"./store.js\";\nimport type { DeviceStart, Session, TokenResponse } from \"./types.js\";\nimport { VERSION } from \"./version.js\";\nimport { withAuthWaitMarker } from \"../runtime/auth-wait-state.mjs\";\n\nconst sleep=(ms:number)=>new Promise(r=>setTimeout(r,ms));\nlet loginInFlight: Promise<Session> | undefined;\n\ninterface DeviceAuthorizationRuntime {\n start: (session: Session) => Promise<DeviceStart>;\n poll: (session: Session, deviceCode: string) => Promise<TokenResponse>;\n openBrowser: (url: string) => Promise<void>;\n save: (session: Session) => Promise<void>;\n sleep: (ms: number) => Promise<unknown>;\n now: () => number;\n log: (message: string) => void;\n}\n\nexport function publicAuthStatus(session: Session) {\n return { ok: true, loggedIn: true, email: session.email, channel: session.channel, accessExpiresAt: session.accessExpiry };\n}\n\nexport async function authorizeDevice(channel:Session[\"channel\"], runtime:DeviceAuthorizationRuntime):Promise<Session>{\n const session:Session={channel,accessToken:\"\",refreshToken:\"\",accessExpiry:0,employeeId:\"\",email:\"\"};\n const start=await runtime.start(session);\n try {\n await runtime.openBrowser(start.verificationUriComplete);\n runtime.log(\"钉钉授权页已打开,当前命令会持续等待授权结果,无需回复 Codex。\");\n } catch {\n runtime.log(`未能自动打开浏览器,请打开以下地址完成钉钉授权:\\n${start.verificationUriComplete}\\n设备码:${start.userCode}`);\n }\n const deadline=runtime.now()+start.expiresIn*1000;\n let nextProgressAt=runtime.now()+15_000;\n while(runtime.now()<deadline){ await runtime.sleep(Math.max(2,start.interval)*1000); try {\n const token=await runtime.poll(session,start.deviceCode);\n Object.assign(session,{accessToken:token.accessToken,refreshToken:token.refreshToken,accessExpiry:Math.floor(runtime.now()/1000)+token.expiresIn,employeeId:token.employee.id,email:token.employee.email});\n await runtime.save(session);\n runtime.log(\"钉钉授权成功,继续执行当前命令。\");\n return session;\n } catch(error){\n if(!(error instanceof HttpError) || error.status!==428) throw error;\n if(runtime.now()>=nextProgressAt){runtime.log(\"仍在等待钉钉授权……\");nextProgressAt=runtime.now()+15_000;}\n } }\n throw new Error(\"device authorization expired\");\n}\n\nasync function runLogin(channel:Session[\"channel\"]):Promise<Session>{\n return withAuthWaitMarker(()=>authorizeDevice(channel,{\n start: session=>post<DeviceStart>(session,\"/auth/device/start\",{clientVersion:VERSION}),\n poll: (session,deviceCode)=>post<TokenResponse>(session,\"/auth/device/token\",{deviceCode,clientVersion:VERSION}),\n openBrowser: async url=>{await open(url);},\n save: saveSession,\n sleep,\n now: Date.now,\n log: message=>console.error(message),\n }));\n}\n\nexport function login(channel:Session[\"channel\"]):Promise<Session>{\n if (!loginInFlight) loginInFlight=runLogin(channel).finally(()=>{loginInFlight=undefined;});\n return loginInFlight;\n}\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}\n\ninterface AuthenticationRuntime {\n load: () => Promise<Session>;\n refresh: (session: Session) => Promise<Session>;\n remove: () => Promise<void>;\n authorize: () => Promise<Session>;\n}\n\nexport async function resolveAuthenticated(runtime: AuthenticationRuntime):Promise<Session>{\n try {\n return await runtime.refresh(await runtime.load());\n } catch(error) {\n if (error instanceof SessionNotFoundError) {\n console.error(\"CXClaw 尚未授权,正在自动发起钉钉授权。\");\n return runtime.authorize();\n }\n if (error instanceof HttpError && error.status===401) {\n console.error(\"CXClaw 登录已失效,正在重新发起钉钉授权。\");\n await runtime.remove().catch(()=>undefined);\n return runtime.authorize();\n }\n throw error;\n }\n}\n\nexport function authenticated():Promise<Session>{\n return resolveAuthenticated({load:loadSession,refresh:ensureAccess,remove:deleteSession,authorize:()=>login(\"stable\")});\n}\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","export const AUTH_SERVER_URL = \"https://ai.solvea.cx/api_v2/ticket\";\n","{\n \"name\": \"@shulex/cxclawctl\",\n \"version\": \"0.1.11\",\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 \"runtime\",\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 \"release:create\": \"tsx scripts/create-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 \"@aws-sdk/client-s3\": \"^3.1156.0\",\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 { AUTH_SERVER_URL } from \"./config.js\";\nimport { VERSION } from \"./version.js\";\n\nexport class HttpError extends Error {\n constructor(public readonly status: number, public readonly responseBody: string) {\n super(`server returned ${status}: ${responseBody}`);\n this.name = \"HttpError\";\n }\n}\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(`${AUTH_SERVER_URL}${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 HttpError(response.status, text);\n return unwrap<T>(value);\n } catch (error) {\n last=error;\n // 4xx 是确定的业务结果(例如设备授权仍在等待),重复请求没有意义。\n if (error instanceof HttpError && error.status < 500) break;\n if (attempt<2) await new Promise(r=>setTimeout(r,200*2**attempt));\n }\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 class SessionNotFoundError extends Error {\n constructor() {\n super(\"未登录\");\n this.name = \"SessionNotFoundError\";\n }\n}\n\nexport async function loadSession(): Promise<Session> {\n const raw = await entry().getPassword();\n if (!raw) throw new SessionNotFoundError();\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","import { createHash } from \"node:crypto\";\nimport { mkdir, readFile, readdir, rm, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\n\nconst markerRoot = join(tmpdir(), \"cxclaw-auth-wait\");\nconst markerTtlMs = 15 * 60 * 1000;\n\nconst markerName = (sessionId, pid) =>\n `${createHash(\"sha256\").update(sessionId).digest(\"hex\").slice(0, 24)}-${pid}.json`;\n\nconst isAlive = (pid) => {\n try {\n process.kill(pid, 0);\n return true;\n } catch (error) {\n return error?.code === \"EPERM\";\n }\n};\n\nexport async function withAuthWaitMarker(operation, env = process.env) {\n const sessionId = env.CODEX_SESSION_ID ?? env.CODEX_THREAD_ID;\n if (!sessionId) return operation();\n\n await mkdir(markerRoot, { recursive: true, mode: 0o700 });\n const path = join(markerRoot, markerName(sessionId, process.pid));\n await writeFile(path, JSON.stringify({\n sessionId,\n threadId: env.CODEX_THREAD_ID ?? null,\n pid: process.pid,\n expiresAt: Date.now() + markerTtlMs,\n }), { mode: 0o600 });\n try {\n return await operation();\n } finally {\n await rm(path, { force: true }).catch(() => undefined);\n }\n}\n\nexport async function hasActiveAuthWait(sessionId, now = Date.now()) {\n if (!sessionId) return false;\n const names = await readdir(markerRoot).catch(() => []);\n for (const name of names) {\n const path = join(markerRoot, name);\n try {\n const marker = JSON.parse(await readFile(path, \"utf8\"));\n const active = marker.sessionId === sessionId &&\n Number.isInteger(marker.pid) && marker.expiresAt > now && isAlive(marker.pid);\n if (active) return true;\n if (marker.expiresAt <= now || !isAlive(marker.pid)) await rm(path, { force: true });\n } catch {\n await rm(path, { force: true }).catch(() => undefined);\n }\n }\n return false;\n}\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.getKnowledgeByType(id(), option(args, \"--type\", true)!);\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\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { basename, dirname, extname } from \"node:path\";\nimport { PutObjectCommand, S3Client } from \"@aws-sdk/client-s3\";\n\ntype JsonObject = Record<string, unknown>;\n\nconst KNOWLEDGE_TYPES = new Set([\"QA\", \"LEARN_SELF\", \"FILE\", \"WEBSITE\", \"PRODUCT\"]);\nconst asObject = (value: unknown, message: string): JsonObject => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) throw new Error(message);\n return value as JsonObject;\n};\nconst asPositiveInt = (value: unknown, message: string) => {\n const number = Number(value);\n if (!Number.isSafeInteger(number) || number <= 0) throw new Error(message);\n return number;\n};\nconst knowledgeType = (value: unknown) => {\n const normalized = String(value ?? \"\").toUpperCase();\n if (!KNOWLEDGE_TYPES.has(normalized)) throw new Error(\"knowledge type must be QA, LEARN_SELF, FILE, WEBSITE, or PRODUCT\");\n return normalized;\n};\nconst isolationKnowledgeType = (value: unknown) => ({ QA: \"QA\", LEARN_SELF: \"QA\", FILE: \"DOCUMENT\", WEBSITE: \"DOCUMENT\", PRODUCT: \"PRODUCT\" })[knowledgeType(value)]!;\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) {\n const payload: JsonObject = { ...data, projectId: Number(await this.projectId()) };\n if (payload.agentId === undefined && payload.id !== undefined) payload.agentId = payload.id;\n return this.post(\"/api_v2/gpt/ap/updateAgent\", payload);\n }\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 if (!graph || !Array.isArray(graph.nodes) || !Array.isArray(graph.edges)) throw new Error(\"chatFlowGraph must be an object with nodes and edges\");\n const payload: JsonObject = { ...agent, agentId: agent.id ?? Number(agentId), meta: { ...(agent.meta as JsonObject ?? {}), chatFlowGraph: graph } };\n if (publish) {\n delete payload.backupType;\n delete (payload.meta as JsonObject).backupType;\n delete (payload.meta as JsonObject).draft_flow_updatetime;\n } else {\n payload.backupType = \"DRAFT\";\n (payload.meta as JsonObject).draft_flow_updatetime = Date.now();\n }\n return this.updateAgent(payload);\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) {\n const payload: JsonObject = { projectId: Number(await this.projectId()), ...data };\n if (payload.pluginId === undefined && payload.id !== undefined) payload.pluginId = payload.id;\n return this.post(\"/api_v2/gpt/ap/updatePlugin\", payload);\n }\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`, { ...data, botId: Number(bot), projectId: Number(await this.projectId()), option: data.option ?? { debug: true } }); }\n async chatStream(data: JsonObject) {\n const bot = String(data.botId ?? await this.botId());\n const body = { ...data, botId: Number(bot), projectId: Number(await this.projectId()), option: data.option ?? { debug: true } };\n const cookie = this.env === \"prod\" ? \"_token\" : \"_token_staging\";\n const response = await fetch(`${this.baseUrl}/api_v2/gpt/bot/${encodeURIComponent(bot)}/chat/stream`, {\n method: \"POST\",\n headers: {\n accept: \"text/event-stream\", \"content-type\": \"application/json\", origin: this.baseUrl,\n referer: `${this.baseUrl}/chatbot`, cookie: `${cookie}=${this.session.tenant!.businessToken}`,\n \"x-cxclaw-client-version\": process.env.CXCLAW_PLUGIN_VERSION ?? \"unknown\",\n },\n body: JSON.stringify(body), signal: AbortSignal.timeout(30_000),\n });\n const text = await response.text();\n if (!response.ok) throw new Error(`HTTP ${response.status} POST /api_v2/gpt/bot/${bot}/chat/stream: ${text}`);\n let finalAction: JsonObject | undefined;\n const content: string[] = [];\n for (const line of text.split(/\\r?\\n/)) {\n if (!line.startsWith(\"data:\")) continue;\n const raw = line.slice(5).trim();\n if (!raw) continue;\n let event: JsonObject;\n try { event = asObject(JSON.parse(raw), \"stream event must be an object\"); } catch { continue; }\n if (event.errno !== undefined && ![0, \"0\"].includes(event.errno as never)) throw new Error(`API error POST /api_v2/gpt/bot/${bot}/chat/stream: ${String(event.errmsg ?? event.message ?? event.errno)}`);\n if (event.content) content.push(String(event.content));\n if (event.isEnd) finalAction = event.data && typeof event.data === \"object\" && !Array.isArray(event.data) ? event.data as JsonObject : event;\n }\n return finalAction ?? { content: content.join(\"\"), isEnd: true };\n }\n async chatAsync(data: JsonObject) { const bot = String(data.botId ?? await this.botId()); return this.post(`/api_v2/gpt/bot/${bot}/chat/async`, { ...data, botId: Number(bot), projectId: Number(await this.projectId()), option: data.option ?? { debug: true } }); }\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, { v4: \"true\" }); }\n async toggleStrategy(id: string, enabled: boolean) { return this.request(\"PUT\", `/api_v2/gpt/project/${await this.projectId()}/strategy/${encodeURIComponent(id)}`, { status: enabled ? \"ENABLED\" : \"DISABLED\" }, { v4: \"true\" }); }\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 getDocument(id: string) { return this.get(`${this.qamPrefix}/project/${await this.projectId()}/document/${encodeURIComponent(id)}`); }\n async getProductKnowledge(id: string) { return this.get(`${this.qamPrefix}/project/${await this.projectId()}/ku_product/${encodeURIComponent(id)}`); }\n async getKnowledgeByType(id: string, type: string) {\n const normalized = knowledgeType(type);\n if (normalized === \"FILE\" || normalized === \"WEBSITE\") return this.getDocument(id);\n if (normalized === \"PRODUCT\") return this.getProductKnowledge(id);\n return this.getKnowledge(id);\n }\n async updateKnowledge(id: string, data: JsonObject) {\n const payload = { ...data };\n if (payload.directoryId === undefined) {\n const current = asObject(await this.getKnowledge(id), `could not read knowledge ${id} before update`);\n if (current.directoryId !== undefined) payload.directoryId = current.directoryId;\n }\n return this.request(\"PUT\", `${this.qamPrefix}/project/${await this.projectId()}/ku`, { ...payload, kuId: asPositiveInt(id, \"knowledge id must be a positive integer\") });\n }\n async uploadQa(items: unknown[]) {\n if (!Array.isArray(items) || !items.length) throw new Error(\"QA items must be a non-empty array\");\n const payload = items.map((value, index) => {\n const item = asObject(value, `QA item #${index + 1} must be an object`);\n const title = String(item.title ?? \"\").trim();\n const content = String(item.content ?? \"\").trim();\n if (!title) throw new Error(`QA item #${index + 1} requires title`);\n if (!content) throw new Error(`QA item #${index + 1} requires content`);\n return {\n title, content, forceIndex: item.forceIndex ?? true, type: \"QA\",\n published: item.published ?? true, taskType: item.taskType ?? \"MANUAL\",\n metadata: item.metadata ?? { tags: [] }, directoryId: item.directoryId ?? \"\",\n isVisible: item.isVisible ?? true,\n };\n });\n return this.post(`${this.qamPrefix}/project/${await this.projectId()}/kus`, payload);\n }\n async createDocuments(documents: JsonObject[], directoryId: number | string, taskType: \"FILE\" | \"WEB\") {\n if (!documents.length) throw new Error(\"documents must be a non-empty array\");\n return this.post(`${this.qamPrefix}/project/${await this.projectId()}/documents`, {\n documents, published: true, taskType, taskUrl: \"MANUAL\", isFullSiteCrawl: false,\n metadata: { tags: [] }, directoryId, isVisible: true,\n });\n }\n async uploadTempFile(filePath: string, forKnowledge = false) {\n const credentialPath = forKnowledge\n ? `${this.qamPrefix}/project/${await this.projectId()}/sts_credentials`\n : `/api_v2/gpt/project/${await this.projectId()}/sts_credentials`;\n const credentials = asObject(\n await this.get(credentialPath),\n \"STS credentials must be an object\",\n );\n const required = [\"accessKeyId\", \"secretAccessKey\", \"sessionToken\", \"region\", \"bucketName\", \"path\"];\n const missing = required.filter(key => !credentials[key]);\n if (missing.length) throw new Error(`knowledge STS credentials missing fields: ${missing.join(\", \")}`);\n const key = `${String(credentials.path)}${basename(filePath)}`;\n const client = new S3Client({\n region: String(credentials.region),\n credentials: {\n accessKeyId: String(credentials.accessKeyId),\n secretAccessKey: String(credentials.secretAccessKey),\n sessionToken: String(credentials.sessionToken),\n },\n });\n const contentTypes: Record<string, string> = {\n \".doc\": \"application/msword\", \".docx\": \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\", \".pdf\": \"application/pdf\",\n };\n await client.send(new PutObjectCommand({\n Bucket: String(credentials.bucketName), Key: key, Body: await readFile(filePath),\n ContentType: contentTypes[extname(filePath).toLowerCase()] ?? \"application/octet-stream\",\n }));\n return key;\n }\n async uploadKnowledgeFile(filePath: string) { return this.uploadTempFile(filePath, true); }\n async downloadFile(path: string, target: string, query?: Record<string, string | number | boolean>) {\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 response = await fetch(url, {\n headers: { accept: \"*/*\", origin: this.baseUrl, referer: `${this.baseUrl}/chatbot`, cookie: `${cookie}=${this.session.tenant!.businessToken}` },\n signal: AbortSignal.timeout(30_000),\n });\n if (!response.ok) throw new Error(`HTTP ${response.status} GET ${path}: ${await response.text()}`);\n await mkdir(dirname(target), { recursive: true });\n await writeFile(target, new Uint8Array(await response.arrayBuffer()));\n return target;\n }\n async downloadLabelTemplate(templateType: string, target: string) {\n if (![\"VOC_LABEL\", \"VOC_LABEL_INIT\"].includes(templateType)) throw new Error(\"template type must be VOC_LABEL or VOC_LABEL_INIT\");\n return this.downloadFile(`/api_v2/gpt/label/project/${await this.projectId()}/downloadLabelTemplate`, target, { type: templateType });\n }\n async downloadLabels(treeId: string, target: string) {\n return this.downloadFile(`/api_v2/gpt/label/project/${await this.projectId()}/downloadLabel`, target, { treeId: asPositiveInt(treeId, \"tree id must be a positive integer\") });\n }\n async uploadLabelFile(treeId: string, filePath: string, init = false) {\n const fileKey = await this.uploadTempFile(filePath);\n const result = await this.post(`/api_v2/gpt/label/project/${await this.projectId()}/uploadLabel`, {\n treeId: asPositiveInt(treeId, \"tree id must be a positive integer\"), file: fileKey, ...(init ? { uploadWay: \"INIT\" } : {}),\n });\n return { fileKey, result };\n }\n async updateKus(value: unknown) {\n const source = Array.isArray(value) ? value : asObject(value, \"batch knowledge update must be an array or object with list\").list;\n if (!Array.isArray(source) || !source.length) throw new Error(\"batch knowledge update requires a non-empty array\");\n const list = [];\n for (const [index, value] of source.entries()) {\n const row = { ...asObject(value, `batch knowledge item #${index + 1} must be an object`) };\n row.kuId = asPositiveInt(row.kuId ?? row.id, `batch knowledge item #${index + 1} requires kuId or id`);\n delete row.id;\n if (row.directoryId === undefined) {\n const current = asObject(await this.getKnowledge(String(row.kuId)), `could not read knowledge ${row.kuId} before update`);\n if (current.directoryId !== undefined) row.directoryId = current.directoryId;\n }\n list.push(row);\n }\n return this.request(\"PUT\", `${this.qamPrefix}/project/${await this.projectId()}/kus`, { list });\n }\n async updateDocumentContent(id: string, type: string, changes: JsonObject) {\n const normalized = knowledgeType(type);\n if (normalized !== \"FILE\" && normalized !== \"WEBSITE\") throw new Error(\"document type must be FILE or WEBSITE\");\n const unknown = Object.keys(changes).filter(key => ![\"fileText\", \"filePath\", \"title\"].includes(key));\n if (unknown.length) throw new Error(`unsupported document content fields: ${unknown.sort().join(\", \")}`);\n if (changes.fileText === undefined && changes.filePath === undefined) throw new Error(\"document update requires fileText or filePath\");\n const documentId = asPositiveInt(id, \"document id must be a positive integer\");\n const current = asObject(await this.getDocument(id), `could not read document ${id} before update`);\n const payload = {\n type: normalized, directoryId: current.directoryId,\n fileName: current.fileName ?? current.name ?? current.title,\n title: current.title ?? current.fileName ?? current.name,\n metadata: current.metadata && typeof current.metadata === \"object\" && !Array.isArray(current.metadata) ? current.metadata : {},\n ...changes, knowledgeIds: [documentId],\n };\n return this.request(\"PUT\", `${this.qamPrefix}/project/${await this.projectId()}/document/${documentId}/contentV2`, payload);\n }\n async createProductKnowledge(data: JsonObject) {\n if (!data.title || !data.spuUrl) throw new Error(\"product knowledge requires title and spuUrl\");\n return this.post(`${this.qamPrefix}/project/${await this.projectId()}/ku_product`, {\n source: \"MANUAL\", published: true, isVisible: true, metadata: { tags: [] }, ...data,\n });\n }\n async updateProductKnowledge(id: string, changes: JsonObject) {\n const allowed = new Set([\"productId\", \"tags\", \"documentId\", \"title\", \"handle\", \"vendor\", \"category\", \"brand\", \"productStatus\", \"country\", \"spuUrl\", \"image\", \"platform\", \"currency\", \"price\", \"compareAtPrice\", \"describe\", \"source\", \"skuList\", \"directoryId\", \"published\", \"metadata\", \"specialTagMap\", \"isVisible\", \"optionName\"]);\n const unknown = Object.keys(changes).filter(key => !allowed.has(key) && key !== \"id\" && key !== \"kuProductId\");\n if (unknown.length) throw new Error(`unsupported product fields: ${unknown.sort().join(\", \")}`);\n const current = asObject(await this.getProductKnowledge(id), `could not read product knowledge ${id} before update`);\n const payload: JsonObject = {};\n for (const key of allowed) if (current[key] !== undefined) payload[key] = current[key];\n for (const key of allowed) if (changes[key] !== undefined) payload[key] = changes[key];\n const missing = [\"title\", \"describe\", \"spuUrl\", \"image\", \"source\", \"published\", \"isVisible\"].filter(key => payload[key] === undefined || payload[key] === \"\");\n if (missing.length) throw new Error(`product detail is incomplete: ${missing.join(\", \")}`);\n return this.request(\"PUT\", `${this.qamPrefix}/project/${await this.projectId()}/ku_product`, { ...payload, kuProductId: asPositiveInt(id, \"product id must be a positive integer\") });\n }\n async updateKuProducts(value: unknown) {\n const source = Array.isArray(value) ? value : asObject(value, \"batch product update must be an array or object with list\").list;\n if (!Array.isArray(source) || !source.length) throw new Error(\"batch product update requires a non-empty array\");\n const list = source.map((value, index) => {\n const row = asObject(value, `batch product item #${index + 1} must be an object`);\n const entry: JsonObject = { id: asPositiveInt(row.id ?? row.kuProductId, `batch product item #${index + 1} requires id or kuProductId`) };\n if (row.mainPush !== undefined) entry.mainPush = Boolean(row.mainPush);\n if (row.enable !== undefined) entry.enable = Boolean(row.enable);\n else if (row.published !== undefined) entry.enable = Boolean(row.published);\n return entry;\n });\n return this.request(\"PUT\", `${this.qamPrefix}/project/${await this.projectId()}/ku_products`, { list });\n }\n async operateKnowledge(value: unknown, confirmDelete = false) {\n const source = Array.isArray(value) ? value : asObject(value, \"knowledge operation must be an array or object with requestList\").requestList;\n if (!Array.isArray(source) || !source.length) throw new Error(\"knowledge operation requires a non-empty array\");\n const supportedOperations = new Set([\"DELETE\", \"MOVE\", \"PUBLISH\", \"UNPUBLISH\", \"VISIBLE\", \"INVISIBLE\"]);\n const requestList = [];\n for (const [index, value] of source.entries()) {\n const row = asObject(value, `knowledge operation #${index + 1} must be an object`);\n const type = knowledgeType(row.knowledgeType);\n const operateType = String(row.operateType ?? \"\").toUpperCase();\n if (!supportedOperations.has(operateType)) throw new Error(`unsupported knowledge operation: ${operateType}`);\n const knowledgeId = asPositiveInt(row.knowledgeId, `knowledge operation #${index + 1} requires knowledgeId`);\n await this.getKnowledgeByType(String(knowledgeId), type);\n const normalized: JsonObject = { knowledgeType: type, knowledgeId, operateType };\n if (operateType === \"MOVE\") normalized.directoryId = asPositiveInt(row.directoryId, \"MOVE requires directoryId\");\n requestList.push(normalized);\n }\n if (requestList.some(item => item.operateType === \"DELETE\") && !confirmDelete) throw new Error(\"DELETE requires --confirm-delete after explicit user acknowledgement\");\n return this.post(`${this.qamPrefix}/project/${await this.projectId()}/updateKnowledge`, { requestList });\n }\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 async moveDirectory(id: string, parentId: string) { return this.get(`${this.qamPrefix}/project/${await this.projectId()}/directory/move`, { currentId: asPositiveInt(id, \"directory id must be a positive integer\"), parentId: Number(parentId) }); }\n async getKnowledgeIsolationKeywords(id: string, type: string) { return this.get(`${this.qamPrefix}/project/${await this.projectId()}/knowledge/isolation_keywords`, { knowledgeType: isolationKnowledgeType(type), knowledgeId: asPositiveInt(id, \"knowledge id must be a positive integer\") }); }\n async batchUpdateIsolationKeywordBindings(data: JsonObject) {\n const items = data.items ?? [], directoryIds = data.directoryIds ?? [], keywordIds = data.keywordIds ?? [];\n if (!Array.isArray(items) || !Array.isArray(directoryIds) || !Array.isArray(keywordIds)) throw new Error(\"items, directoryIds and keywordIds must be arrays\");\n if (!items.length && !directoryIds.length && !keywordIds.length) throw new Error(\"isolation keyword binding update has no targets or keyword IDs\");\n if (items.length && directoryIds.length) throw new Error(\"submit knowledge items and directory IDs in separate binding updates\");\n const normalizedItems = items.map((value, index) => {\n const row = asObject(value, `isolation binding item #${index + 1} must be an object`);\n if (!Array.isArray(row.keywordIds)) throw new Error(\"items[].keywordIds must be an array\");\n return {\n knowledgeType: isolationKnowledgeType(row.knowledgeType ?? \"QA\"),\n knowledgeId: asPositiveInt(row.knowledgeId, \"items[].knowledgeId must be a positive integer\"),\n keywordIds: [...new Set(row.keywordIds.map(value => asPositiveInt(value, \"items[].keywordIds must contain positive integer IDs\")))],\n };\n });\n return this.post(`${this.qamPrefix}/project/${await this.projectId()}/knowledge/isolation_keywords/batch`, {\n items: normalizedItems,\n directoryIds: [...new Set(directoryIds.map(value => asPositiveInt(value, \"directoryIds must contain positive integer IDs\")))],\n keywordIds: [...new Set(keywordIds.map(value => asPositiveInt(value, \"keywordIds must contain positive integer IDs\")))],\n });\n }\n async applyIsolationKeywordBindings(data: JsonObject) {\n const operation = String(data.operation ?? \"append\").toLowerCase();\n if (![\"append\", \"remove\", \"replace\"].includes(operation)) throw new Error(\"operation must be append, remove, or replace\");\n const items = data.items ?? [], directoryIds = data.directoryIds ?? [];\n if (!Array.isArray(items) || !Array.isArray(directoryIds) || (!items.length && !directoryIds.length)) throw new Error(\"binding update requires knowledge items or directory IDs\");\n if (items.length && directoryIds.length) throw new Error(\"submit knowledge items and directory IDs in separate binding updates\");\n if (directoryIds.length && operation !== \"replace\") throw new Error(\"directory bindings require operation=replace\");\n if ((directoryIds.length || operation === \"replace\") && data.confirmReplace !== true) throw new Error(\"binding replacement requires confirmReplace=true after explicit user confirmation\");\n const resolvedItems = [];\n for (const [index, value] of items.entries()) {\n const row = asObject(value, `isolation binding item #${index + 1} must be an object`);\n const id = asPositiveInt(row.knowledgeId, \"items[].knowledgeId must be a positive integer\");\n const type = knowledgeType(row.knowledgeType);\n if (!Array.isArray(row.keywordIds)) throw new Error(\"items[].keywordIds must be an array\");\n const requestedIds = row.keywordIds.map(value => asPositiveInt(value, \"items[].keywordIds must contain positive integer IDs\"));\n await this.getKnowledgeByType(String(id), type);\n const existingResponse = await this.getKnowledgeIsolationKeywords(String(id), type);\n const existingRows = Array.isArray(existingResponse) ? existingResponse\n : existingResponse && typeof existingResponse === \"object\" && Array.isArray((existingResponse as JsonObject).list) ? (existingResponse as JsonObject).list as unknown[] : [];\n const existingIds = existingRows.map(value => asPositiveInt(asObject(value, \"existing isolation keyword binding must be an object\").id, \"existing isolation keyword binding has an invalid ID\"));\n const finalIds = operation === \"append\" ? [...new Set([...existingIds, ...requestedIds])]\n : operation === \"remove\" ? existingIds.filter(id => !requestedIds.includes(id)) : [...new Set(requestedIds)];\n resolvedItems.push({ knowledgeType: type, knowledgeId: id, keywordIds: finalIds });\n }\n for (const value of directoryIds) await this.listKnowledge({ directoryId: asPositiveInt(value, \"directoryIds must contain positive integer IDs\"), pageIndex: 1, pageSize: 1 });\n return this.batchUpdateIsolationKeywordBindings({ items: resolvedItems, directoryIds, keywordIds: data.keywordIds ?? [] });\n }\n async editKnowledgeTags(data: JsonObject) {\n const knowledgeIds = data.knowledgeIds, requestedTags = data.tagList;\n if (!Array.isArray(knowledgeIds) || !knowledgeIds.length) throw new Error(\"edit knowledge tags requires non-empty knowledgeIds\");\n if (!Array.isArray(requestedTags) || requestedTags.some(value => typeof value !== \"string\" || !value.trim())) throw new Error(\"tagList must contain non-empty strings\");\n const operation = String(data.operation ?? \"append\");\n if (![\"append\", \"replace\", \"remove\"].includes(operation)) throw new Error(\"tag operation must be append, replace, or remove\");\n const type = knowledgeType(data.type ?? \"QA\");\n const results = [];\n for (const value of knowledgeIds) {\n const id = asPositiveInt(value, \"knowledgeIds must contain positive integer IDs\");\n const current = asObject(await this.getKnowledgeByType(String(id), type), `could not read knowledge ${id} before tag update`);\n const metadata = current.metadata && typeof current.metadata === \"object\" && !Array.isArray(current.metadata) ? current.metadata as JsonObject : {};\n const existing = Array.isArray(current.tags) ? current.tags : Array.isArray(metadata.tags) ? metadata.tags : [];\n const requested = requestedTags.map(String);\n const tagList = operation === \"append\" ? [...new Set([...existing.map(String), ...requested])]\n : operation === \"remove\" ? existing.map(String).filter(tag => !requested.includes(tag)) : [...new Set(requested)];\n results.push(await this.post(`${this.qamPrefix}/project/${await this.projectId()}/editTags`, { type, knowledgeIds: [id], tagList }));\n }\n return { success: true, results };\n }\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 getConversationsByIntent(intent: string, limit = 50) {\n const intentResponse = await this.listIntents(\"\");\n const intents = Array.isArray(intentResponse) ? intentResponse\n : intentResponse && typeof intentResponse === \"object\" && Array.isArray((intentResponse as JsonObject).data) ? (intentResponse as JsonObject).data as unknown[]\n : intentResponse && typeof intentResponse === \"object\" && Array.isArray((intentResponse as JsonObject).list) ? (intentResponse as JsonObject).list as unknown[] : [];\n const matched = intents.find(value => value && typeof value === \"object\" && String((value as JsonObject).name ?? \"\") === intent) as JsonObject | undefined;\n if (!matched?.id) return [];\n const response = await this.listTranscripts({ pageSize: limit, pageIndex: 1, intentId: Number(matched.id) });\n const rows = Array.isArray(response) ? response\n : response && typeof response === \"object\" && Array.isArray((response as JsonObject).list) ? (response as JsonObject).list as unknown[] : [];\n const result = [];\n for (const value of rows) {\n if (!value || typeof value !== \"object\") continue;\n const row = value as JsonObject, chatId = row.chatId ?? row.id;\n if (!chatId) continue;\n try {\n const detail = asObject(await this.transcript(String(chatId)), `transcript ${chatId} must be an object`);\n const turns = Array.isArray(detail.turns) ? detail.turns : Array.isArray(detail.messages) ? detail.messages : [];\n const messages: unknown[] = []; let metadata: JsonObject = {};\n for (const turnValue of turns) {\n if (!turnValue || typeof turnValue !== \"object\") continue;\n const turn = turnValue as JsonObject, role = turn.role ?? turn.type, content = turn.content ?? turn.message;\n if (role === \"USER\" && content) messages.push(content);\n if (!Object.keys(metadata).length && turn.metadata && typeof turn.metadata === \"object\" && !Array.isArray(turn.metadata)) metadata = turn.metadata as JsonObject;\n }\n if (messages.length) result.push({ source_chat_id: chatId, intent, messages, metadata });\n } catch { /* One unreadable transcript must not abort the batch. */ }\n }\n return result;\n }\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.chatStream({ message: option(a, \"--message\", true), botId: Number(option(a, \"--bot-id\") ?? await c.botId()), touchPoint: option(a, \"--touch-point\") ?? \"LIVE_CHAT\", ...(await data(a)) }),\n \"update-chatflow\": async (c, a) => c.updateChatflow(option(a, \"--agent-id\", true)!, await jsonData(a), flag(a, \"--publish\")),\n \"get-conversations-by-intent\": (c, a) => c.getConversationsByIntent(option(a, \"--intent\", true)!, Number(option(a, \"--limit\") ?? 50)),\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\": (c, a) => c.getKnowledgeIsolationKeywords(requireId(a), option(a, \"--type\", true)!),\n \"batch-update-isolation-keyword-bindings\": async (c, a) => c.applyIsolationKeywordBindings(await data(a)),\n \"edit-knowledge-tags\": async (c, a) => c.editKnowledgeTags(await data(a)),\n \"move-directory\": (c, a) => c.moveDirectory(requireId(a), option(a, \"--parent-id\", true)!),\n \"operate-knowledge\": async (c, a) => c.operateKnowledge(await jsonValue(a), flag(a, \"--confirm-delete\")),\n \"batch-update-knowledge\": async (c, a) => c.updateKus(await jsonValue(a)),\n \"update-document-content\": async (c, a) => c.updateDocumentContent(requireId(a), option(a, \"--type\", true)!, await data(a)),\n \"create-product-knowledge\": async (c, a) => c.createProductKnowledge(await data(a)),\n \"update-product-knowledge\": async (c, a) => c.updateProductKnowledge(requireId(a), await data(a)),\n \"batch-update-products\": async (c, a) => c.updateKuProducts(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) => ({ file: await c.downloadLabelTemplate(option(a, \"--template-type\") === \"init\" ? \"VOC_LABEL_INIT\" : \"VOC_LABEL\", option(a, \"--output\") ?? `${option(a, \"--template-type\") ?? \"label\"}_template.xlsx`) }),\n \"download-labels\": async (c, a) => ({ file: await c.downloadLabels(option(a, \"--tree-id\", true)!, option(a, \"--output\") ?? `labels_${option(a, \"--tree-id\", true)}.xlsx`) }),\n \"upload-labels\": (c, a) => c.uploadLabelFile(option(a, \"--tree-id\", true)!, option(a, \"--file\", true)!, flag(a, \"--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) => ({ file: await c.uploadTempFile(option(a, \"--file\", true)!) }),\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> --type <QA|LEARN_SELF|FILE|WEBSITE|PRODUCT>\"),\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(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\")\n .replaceAll(\"'\", \"'\");\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 => ({ \"&\": \"&\", \"<\": \"<\", \">\": \">\", \"\\\"\": \""\", \"'\": \"'\" }[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 = await client.uploadTempFile(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 { fileKey: file, 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\ntype QaPlanItem = { dirPath: string[]; title: string; content: string };\nconst flattenDirectories = (nodes: JsonObject[], result: JsonObject[] = []) => {\n for (const node of nodes) {\n result.push(node);\n if (Array.isArray(node.children)) flattenDirectories(node.children.filter(child => child && typeof child === \"object\") as JsonObject[], result);\n }\n return result;\n};\n\nfunction validateQaItems(values: unknown[], maxDepth: number): QaPlanItem[] {\n if (!values.length) throw new Error(\"QA plan must contain at least one item\");\n return values.map((value, index) => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) throw new Error(`QA item #${index + 1} must be an object`);\n const item = value as JsonObject;\n if (!Array.isArray(item.dir_path) || !item.dir_path.length) throw new Error(`QA item #${index + 1} dir_path must be a non-empty array`);\n if (item.dir_path.length > maxDepth) throw new Error(`QA item #${index + 1} dir_path exceeds maximum depth ${maxDepth}`);\n const dirPath = item.dir_path.map((name, depth) => {\n if (typeof name !== \"string\" || !name.trim() || /[\\\\/]/.test(name)) throw new Error(`QA item #${index + 1} dir_path[${depth}] must be a folder name`);\n return name.trim();\n });\n const title = typeof item.question === \"string\" ? item.question.trim() : \"\";\n const content = typeof item.answer === \"string\" ? item.answer.trim() : \"\";\n if (!title) throw new Error(`QA item #${index + 1} question must be a non-empty string`);\n if (!content) throw new Error(`QA item #${index + 1} answer must be a non-empty markdown string`);\n return { dirPath, title, content };\n });\n}\n\nasync function resolveDirectory(client: SolveaClient, path: string[], directories: JsonObject[], cache: Map<string, number>) {\n let parentId = 0;\n const prefix: string[] = [];\n for (const name of path) {\n prefix.push(name);\n const key = prefix.join(\"/\");\n const cached = cache.get(key);\n if (cached !== undefined) { parentId = cached; continue; }\n const match = directories.find(directory => String(directory.name ?? \"\") === name && Number(directory.parentId ?? 0) === parentId);\n if (match) parentId = Number(match.id ?? match.directoryId);\n else {\n const createdParentId = parentId;\n const created = await client.createFolder(name, parentId) as JsonObject;\n const id = Number(created?.id ?? created?.directoryId);\n if (!Number.isSafeInteger(id) || id <= 0) throw new Error(`could not create directory ${key}: response has no directory id`);\n parentId = id;\n directories.push({ id, name, parentId: Number(created?.parentId ?? createdParentId) });\n }\n cache.set(key, parentId);\n }\n return parentId;\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\")).sort()) { 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 maxDepth = intOption(args, \"--max-depth\", 3);\n if (!Number.isSafeInteger(maxDepth) || maxDepth <= 0) throw new Error(\"--max-depth must be a positive integer\");\n const normalized = validateQaItems(items, maxDepth);\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 const directories = flattenDirectories(asRows(await client.listDirectories()));\n const cache = new Map<string, number>();\n const payload = [];\n for (const item of normalized) payload.push({ title: item.title, content: item.content, directoryId: await resolveDirectory(client, item.dirPath, directories, cache) });\n return { planFile, count: payload.length, result: await client.uploadQa(payload) };\n}\n\nasync function importSources(client: SolveaClient, args: string[]) {\n const value = await readJson<unknown>(option(args, \"--plan-file\", true)!);\n const source = Array.isArray(value) ? value : value && typeof value === \"object\" && Array.isArray((value as JsonObject).items) ? (value as JsonObject).items as unknown[] : [];\n if (!source.length) throw new Error(\"source document plan must be a non-empty array\");\n const maxDepth = intOption(args, \"--max-depth\", 3);\n if (!Number.isSafeInteger(maxDepth) || maxDepth <= 0) throw new Error(\"--max-depth must be a positive integer\");\n const { stat } = await import(\"node:fs/promises\");\n const normalized: Array<{ source: string; dirPath: string[]; isUrl: boolean; skippedDuplicate: boolean }> = [];\n const seenUrls = new Set<string>();\n for (const [index, raw] of source.entries()) {\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) throw new Error(`source document #${index + 1} must be an object`);\n const item = raw as JsonObject;\n const itemSource = typeof item.source === \"string\" ? item.source.trim() : \"\";\n if (!itemSource) throw new Error(`source document #${index + 1} needs a non-empty source`);\n const path = item.dir_path ?? [];\n if (!Array.isArray(path) || path.some(name => typeof name !== \"string\" || !name.trim() || /[\\\\/]/.test(name))) throw new Error(`source document #${index + 1} dir_path must contain folder names`);\n if (path.length > maxDepth) throw new Error(`source document #${index + 1} dir_path exceeds maximum depth ${maxDepth}`);\n const isUrl = /^https?:\\/\\//i.test(itemSource);\n if (!isUrl) {\n if (![\".doc\", \".docx\", \".pdf\"].some(extension => itemSource.toLowerCase().endsWith(extension))) throw new Error(`source document #${index + 1} supports .doc, .docx, or .pdf`);\n const info = await stat(itemSource).catch(() => undefined);\n if (!info?.isFile()) throw new Error(`source document #${index + 1} file not found: ${itemSource}`);\n }\n const skippedDuplicate = isUrl && seenUrls.has(itemSource);\n if (isUrl) seenUrls.add(itemSource);\n normalized.push({ source: itemSource, dirPath: path.map(String).map(name => name.trim()), isUrl, skippedDuplicate });\n }\n if (!flag(args, \"--execute\")) return { dryRun: true, count: normalized.length, items: normalized.map(item => ({ source: item.source, dir_path: item.dirPath, status: item.skippedDuplicate ? \"skipped_duplicate\" : \"pending\" })) };\n\n const directories = flattenDirectories(asRows(await client.listDirectories()));\n const cache = new Map<string, number>();\n const results = [];\n for (const item of normalized) {\n if (item.skippedDuplicate) { results.push({ source: item.source, status: \"skipped_duplicate\" }); continue; }\n const directoryId = await resolveDirectory(client, item.dirPath, directories, cache);\n const filePath = item.isUrl ? item.source : await client.uploadKnowledgeFile(item.source);\n const documents = [{ filePath, docType: \"TC\", ...(item.isUrl ? { fileType: \"website\" } : {}) }];\n const result = await client.createDocuments(documents, directoryId, item.isUrl ? \"WEB\" : \"FILE\");\n results.push({ source: item.source, directoryId, status: \"submitted\", result });\n }\n return { count: normalized.length, results };\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","dirname","readFile","mkdir","readFile","writeFile","query","resolve","data","pageSize","enabled","key","value","entry","id","readFile","readFile","options","handlers","requireFlag","data","readFile","dirname","usage","action","join","root","join","options","query","mkdir","writeFile","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","readdir","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","../src/config.ts","../package.json","../src/version.ts","../src/http.ts","../src/store.ts","../runtime/auth-wait-state.mjs","../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, publicAuthStatus } 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\") {\n if (flag(args, \"--server\") || flag(args, \"--env\")) throw new Error(\"auth login 固定使用生产授权服务,不支持 --server 或 --env\");\n const session = await login((option(args, \"--channel\") ?? \"stable\") as \"stable\" | \"canary\" | \"dev\");\n return print(publicAuthStatus(session));\n }\n if (action === \"ensure\") return print(publicAuthStatus(await authenticated()));\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(publicAuthStatus(session));\n } catch { return print({ ok: true, loggedIn: false }); }\n }\n if (action === \"refresh\") { return print(publicAuthStatus(await authenticated())); }\n throw new Error(\"auth action must be login, ensure, 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 if (flag(args, \"--server\") || flag(args, \"--env\")) throw new Error(\"setup 固定使用生产授权服务,不支持 --server 或 --env\");\n const channel = (option(args, \"--channel\") ?? \"stable\") as \"stable\" | \"canary\" | \"dev\";\n await installMarketplace(channel); await login(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 { HttpError, post } from \"./http.js\";\nimport { deleteSession, loadSession, saveSession, SessionNotFoundError } from \"./store.js\";\nimport type { DeviceStart, Session, TokenResponse } from \"./types.js\";\nimport { VERSION } from \"./version.js\";\nimport { withAuthWaitMarker } from \"../runtime/auth-wait-state.mjs\";\n\nconst sleep=(ms:number)=>new Promise(r=>setTimeout(r,ms));\nlet loginInFlight: Promise<Session> | undefined;\n\ninterface DeviceAuthorizationRuntime {\n start: (session: Session) => Promise<DeviceStart>;\n poll: (session: Session, deviceCode: string) => Promise<TokenResponse>;\n openBrowser: (url: string) => Promise<void>;\n save: (session: Session) => Promise<void>;\n sleep: (ms: number) => Promise<unknown>;\n now: () => number;\n log: (message: string) => void;\n}\n\nexport function publicAuthStatus(session: Session) {\n return { ok: true, loggedIn: true, email: session.email, channel: session.channel, accessExpiresAt: session.accessExpiry };\n}\n\nexport function isAuthorizationPending(error: unknown): boolean {\n return error instanceof HttpError && (error.status === 428 || error.responseCode === 428);\n}\n\nexport async function authorizeDevice(channel:Session[\"channel\"], runtime:DeviceAuthorizationRuntime):Promise<Session>{\n const session:Session={channel,accessToken:\"\",refreshToken:\"\",accessExpiry:0,employeeId:\"\",email:\"\"};\n const start=await runtime.start(session);\n try {\n await runtime.openBrowser(start.verificationUriComplete);\n runtime.log(\"钉钉授权页已打开,当前命令会持续等待授权结果,无需回复 Codex。\");\n } catch {\n runtime.log(`未能自动打开浏览器,请打开以下地址完成钉钉授权:\\n${start.verificationUriComplete}\\n设备码:${start.userCode}`);\n }\n const deadline=runtime.now()+start.expiresIn*1000;\n let nextProgressAt=runtime.now()+15_000;\n while(runtime.now()<deadline){ await runtime.sleep(Math.max(2,start.interval)*1000); try {\n const token=await runtime.poll(session,start.deviceCode);\n Object.assign(session,{accessToken:token.accessToken,refreshToken:token.refreshToken,accessExpiry:Math.floor(runtime.now()/1000)+token.expiresIn,employeeId:token.employee.id,email:token.employee.email});\n await runtime.save(session);\n runtime.log(\"钉钉授权成功,继续执行当前命令。\");\n return session;\n } catch(error){\n if(!isAuthorizationPending(error)) throw error;\n if(runtime.now()>=nextProgressAt){runtime.log(\"仍在等待钉钉授权……\");nextProgressAt=runtime.now()+15_000;}\n } }\n throw new Error(\"device authorization expired\");\n}\n\nasync function runLogin(channel:Session[\"channel\"]):Promise<Session>{\n return withAuthWaitMarker(()=>authorizeDevice(channel,{\n start: session=>post<DeviceStart>(session,\"/auth/device/start\",{clientVersion:VERSION}),\n poll: (session,deviceCode)=>post<TokenResponse>(session,\"/auth/device/token\",{deviceCode,clientVersion:VERSION}),\n openBrowser: async url=>{await open(url);},\n save: saveSession,\n sleep,\n now: Date.now,\n log: message=>console.error(message),\n }));\n}\n\nexport function login(channel:Session[\"channel\"]):Promise<Session>{\n if (!loginInFlight) loginInFlight=runLogin(channel).finally(()=>{loginInFlight=undefined;});\n return loginInFlight;\n}\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}\n\ninterface AuthenticationRuntime {\n load: () => Promise<Session>;\n refresh: (session: Session) => Promise<Session>;\n remove: () => Promise<void>;\n authorize: () => Promise<Session>;\n}\n\nexport async function resolveAuthenticated(runtime: AuthenticationRuntime):Promise<Session>{\n try {\n return await runtime.refresh(await runtime.load());\n } catch(error) {\n if (error instanceof SessionNotFoundError) {\n console.error(\"CXClaw 尚未授权,正在自动发起钉钉授权。\");\n return runtime.authorize();\n }\n if (error instanceof HttpError && error.status===401) {\n console.error(\"CXClaw 登录已失效,正在重新发起钉钉授权。\");\n await runtime.remove().catch(()=>undefined);\n return runtime.authorize();\n }\n throw error;\n }\n}\n\nexport function authenticated():Promise<Session>{\n return resolveAuthenticated({load:loadSession,refresh:ensureAccess,remove:deleteSession,authorize:()=>login(\"stable\")});\n}\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","export const AUTH_SERVER_URL = \"https://ai.solvea.cx/api_v2/ticket\";\n","{\n \"name\": \"@shulex/cxclawctl\",\n \"version\": \"0.1.12\",\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 \"runtime\",\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 \"release:create\": \"tsx scripts/create-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 \"@aws-sdk/client-s3\": \"^3.1156.0\",\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 { AUTH_SERVER_URL } from \"./config.js\";\nimport { VERSION } from \"./version.js\";\n\nexport class HttpError extends Error {\n public readonly responseCode: number | undefined;\n\n constructor(public readonly status: number, public readonly responseBody: string) {\n super(`server returned ${status}: ${responseBody}`);\n this.name = \"HttpError\";\n try {\n const value = JSON.parse(responseBody) as { code?: unknown };\n const code = Number(value?.code);\n this.responseCode = Number.isFinite(code) ? code : undefined;\n } catch {\n this.responseCode = undefined;\n }\n }\n}\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(`${AUTH_SERVER_URL}${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 HttpError(response.status, text);\n return unwrap<T>(value);\n } catch (error) {\n last=error;\n // 4xx 是确定的业务结果(例如设备授权仍在等待),重复请求没有意义。\n if (error instanceof HttpError && error.status < 500) break;\n if (attempt<2) await new Promise(r=>setTimeout(r,200*2**attempt));\n }\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 class SessionNotFoundError extends Error {\n constructor() {\n super(\"未登录\");\n this.name = \"SessionNotFoundError\";\n }\n}\n\nexport async function loadSession(): Promise<Session> {\n const raw = await entry().getPassword();\n if (!raw) throw new SessionNotFoundError();\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","import { createHash } from \"node:crypto\";\nimport { mkdir, readFile, readdir, rm, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\n\nconst markerRoot = join(tmpdir(), \"cxclaw-auth-wait\");\nconst markerTtlMs = 15 * 60 * 1000;\n\nconst markerName = (sessionId, pid) =>\n `${createHash(\"sha256\").update(sessionId).digest(\"hex\").slice(0, 24)}-${pid}.json`;\n\nconst isAlive = (pid) => {\n try {\n process.kill(pid, 0);\n return true;\n } catch (error) {\n return error?.code === \"EPERM\";\n }\n};\n\nexport async function withAuthWaitMarker(operation, env = process.env) {\n const sessionId = env.CODEX_SESSION_ID ?? env.CODEX_THREAD_ID;\n if (!sessionId) return operation();\n\n await mkdir(markerRoot, { recursive: true, mode: 0o700 });\n const path = join(markerRoot, markerName(sessionId, process.pid));\n await writeFile(path, JSON.stringify({\n sessionId,\n threadId: env.CODEX_THREAD_ID ?? null,\n pid: process.pid,\n expiresAt: Date.now() + markerTtlMs,\n }), { mode: 0o600 });\n try {\n return await operation();\n } finally {\n await rm(path, { force: true }).catch(() => undefined);\n }\n}\n\nexport async function hasActiveAuthWait(sessionId, now = Date.now()) {\n if (!sessionId) return false;\n const names = await readdir(markerRoot).catch(() => []);\n for (const name of names) {\n const path = join(markerRoot, name);\n try {\n const marker = JSON.parse(await readFile(path, \"utf8\"));\n const active = marker.sessionId === sessionId &&\n Number.isInteger(marker.pid) && marker.expiresAt > now && isAlive(marker.pid);\n if (active) return true;\n if (marker.expiresAt <= now || !isAlive(marker.pid)) await rm(path, { force: true });\n } catch {\n await rm(path, { force: true }).catch(() => undefined);\n }\n }\n return false;\n}\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.getKnowledgeByType(id(), option(args, \"--type\", true)!);\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\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { basename, dirname, extname } from \"node:path\";\nimport { PutObjectCommand, S3Client } from \"@aws-sdk/client-s3\";\n\ntype JsonObject = Record<string, unknown>;\n\nconst KNOWLEDGE_TYPES = new Set([\"QA\", \"LEARN_SELF\", \"FILE\", \"WEBSITE\", \"PRODUCT\"]);\nconst asObject = (value: unknown, message: string): JsonObject => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) throw new Error(message);\n return value as JsonObject;\n};\nconst asPositiveInt = (value: unknown, message: string) => {\n const number = Number(value);\n if (!Number.isSafeInteger(number) || number <= 0) throw new Error(message);\n return number;\n};\nconst knowledgeType = (value: unknown) => {\n const normalized = String(value ?? \"\").toUpperCase();\n if (!KNOWLEDGE_TYPES.has(normalized)) throw new Error(\"knowledge type must be QA, LEARN_SELF, FILE, WEBSITE, or PRODUCT\");\n return normalized;\n};\nconst isolationKnowledgeType = (value: unknown) => ({ QA: \"QA\", LEARN_SELF: \"QA\", FILE: \"DOCUMENT\", WEBSITE: \"DOCUMENT\", PRODUCT: \"PRODUCT\" })[knowledgeType(value)]!;\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) {\n const payload: JsonObject = { ...data, projectId: Number(await this.projectId()) };\n if (payload.agentId === undefined && payload.id !== undefined) payload.agentId = payload.id;\n return this.post(\"/api_v2/gpt/ap/updateAgent\", payload);\n }\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 if (!graph || !Array.isArray(graph.nodes) || !Array.isArray(graph.edges)) throw new Error(\"chatFlowGraph must be an object with nodes and edges\");\n const payload: JsonObject = { ...agent, agentId: agent.id ?? Number(agentId), meta: { ...(agent.meta as JsonObject ?? {}), chatFlowGraph: graph } };\n if (publish) {\n delete payload.backupType;\n delete (payload.meta as JsonObject).backupType;\n delete (payload.meta as JsonObject).draft_flow_updatetime;\n } else {\n payload.backupType = \"DRAFT\";\n (payload.meta as JsonObject).draft_flow_updatetime = Date.now();\n }\n return this.updateAgent(payload);\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) {\n const payload: JsonObject = { projectId: Number(await this.projectId()), ...data };\n if (payload.pluginId === undefined && payload.id !== undefined) payload.pluginId = payload.id;\n return this.post(\"/api_v2/gpt/ap/updatePlugin\", payload);\n }\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`, { ...data, botId: Number(bot), projectId: Number(await this.projectId()), option: data.option ?? { debug: true } }); }\n async chatStream(data: JsonObject) {\n const bot = String(data.botId ?? await this.botId());\n const body = { ...data, botId: Number(bot), projectId: Number(await this.projectId()), option: data.option ?? { debug: true } };\n const cookie = this.env === \"prod\" ? \"_token\" : \"_token_staging\";\n const response = await fetch(`${this.baseUrl}/api_v2/gpt/bot/${encodeURIComponent(bot)}/chat/stream`, {\n method: \"POST\",\n headers: {\n accept: \"text/event-stream\", \"content-type\": \"application/json\", origin: this.baseUrl,\n referer: `${this.baseUrl}/chatbot`, cookie: `${cookie}=${this.session.tenant!.businessToken}`,\n \"x-cxclaw-client-version\": process.env.CXCLAW_PLUGIN_VERSION ?? \"unknown\",\n },\n body: JSON.stringify(body), signal: AbortSignal.timeout(30_000),\n });\n const text = await response.text();\n if (!response.ok) throw new Error(`HTTP ${response.status} POST /api_v2/gpt/bot/${bot}/chat/stream: ${text}`);\n let finalAction: JsonObject | undefined;\n const content: string[] = [];\n for (const line of text.split(/\\r?\\n/)) {\n if (!line.startsWith(\"data:\")) continue;\n const raw = line.slice(5).trim();\n if (!raw) continue;\n let event: JsonObject;\n try { event = asObject(JSON.parse(raw), \"stream event must be an object\"); } catch { continue; }\n if (event.errno !== undefined && ![0, \"0\"].includes(event.errno as never)) throw new Error(`API error POST /api_v2/gpt/bot/${bot}/chat/stream: ${String(event.errmsg ?? event.message ?? event.errno)}`);\n if (event.content) content.push(String(event.content));\n if (event.isEnd) finalAction = event.data && typeof event.data === \"object\" && !Array.isArray(event.data) ? event.data as JsonObject : event;\n }\n return finalAction ?? { content: content.join(\"\"), isEnd: true };\n }\n async chatAsync(data: JsonObject) { const bot = String(data.botId ?? await this.botId()); return this.post(`/api_v2/gpt/bot/${bot}/chat/async`, { ...data, botId: Number(bot), projectId: Number(await this.projectId()), option: data.option ?? { debug: true } }); }\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, { v4: \"true\" }); }\n async toggleStrategy(id: string, enabled: boolean) { return this.request(\"PUT\", `/api_v2/gpt/project/${await this.projectId()}/strategy/${encodeURIComponent(id)}`, { status: enabled ? \"ENABLED\" : \"DISABLED\" }, { v4: \"true\" }); }\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 getDocument(id: string) { return this.get(`${this.qamPrefix}/project/${await this.projectId()}/document/${encodeURIComponent(id)}`); }\n async getProductKnowledge(id: string) { return this.get(`${this.qamPrefix}/project/${await this.projectId()}/ku_product/${encodeURIComponent(id)}`); }\n async getKnowledgeByType(id: string, type: string) {\n const normalized = knowledgeType(type);\n if (normalized === \"FILE\" || normalized === \"WEBSITE\") return this.getDocument(id);\n if (normalized === \"PRODUCT\") return this.getProductKnowledge(id);\n return this.getKnowledge(id);\n }\n async updateKnowledge(id: string, data: JsonObject) {\n const payload = { ...data };\n if (payload.directoryId === undefined) {\n const current = asObject(await this.getKnowledge(id), `could not read knowledge ${id} before update`);\n if (current.directoryId !== undefined) payload.directoryId = current.directoryId;\n }\n return this.request(\"PUT\", `${this.qamPrefix}/project/${await this.projectId()}/ku`, { ...payload, kuId: asPositiveInt(id, \"knowledge id must be a positive integer\") });\n }\n async uploadQa(items: unknown[]) {\n if (!Array.isArray(items) || !items.length) throw new Error(\"QA items must be a non-empty array\");\n const payload = items.map((value, index) => {\n const item = asObject(value, `QA item #${index + 1} must be an object`);\n const title = String(item.title ?? \"\").trim();\n const content = String(item.content ?? \"\").trim();\n if (!title) throw new Error(`QA item #${index + 1} requires title`);\n if (!content) throw new Error(`QA item #${index + 1} requires content`);\n return {\n title, content, forceIndex: item.forceIndex ?? true, type: \"QA\",\n published: item.published ?? true, taskType: item.taskType ?? \"MANUAL\",\n metadata: item.metadata ?? { tags: [] }, directoryId: item.directoryId ?? \"\",\n isVisible: item.isVisible ?? true,\n };\n });\n return this.post(`${this.qamPrefix}/project/${await this.projectId()}/kus`, payload);\n }\n async createDocuments(documents: JsonObject[], directoryId: number | string, taskType: \"FILE\" | \"WEB\") {\n if (!documents.length) throw new Error(\"documents must be a non-empty array\");\n return this.post(`${this.qamPrefix}/project/${await this.projectId()}/documents`, {\n documents, published: true, taskType, taskUrl: \"MANUAL\", isFullSiteCrawl: false,\n metadata: { tags: [] }, directoryId, isVisible: true,\n });\n }\n async uploadTempFile(filePath: string, forKnowledge = false) {\n const credentialPath = forKnowledge\n ? `${this.qamPrefix}/project/${await this.projectId()}/sts_credentials`\n : `/api_v2/gpt/project/${await this.projectId()}/sts_credentials`;\n const credentials = asObject(\n await this.get(credentialPath),\n \"STS credentials must be an object\",\n );\n const required = [\"accessKeyId\", \"secretAccessKey\", \"sessionToken\", \"region\", \"bucketName\", \"path\"];\n const missing = required.filter(key => !credentials[key]);\n if (missing.length) throw new Error(`knowledge STS credentials missing fields: ${missing.join(\", \")}`);\n const key = `${String(credentials.path)}${basename(filePath)}`;\n const client = new S3Client({\n region: String(credentials.region),\n credentials: {\n accessKeyId: String(credentials.accessKeyId),\n secretAccessKey: String(credentials.secretAccessKey),\n sessionToken: String(credentials.sessionToken),\n },\n });\n const contentTypes: Record<string, string> = {\n \".doc\": \"application/msword\", \".docx\": \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\", \".pdf\": \"application/pdf\",\n };\n await client.send(new PutObjectCommand({\n Bucket: String(credentials.bucketName), Key: key, Body: await readFile(filePath),\n ContentType: contentTypes[extname(filePath).toLowerCase()] ?? \"application/octet-stream\",\n }));\n return key;\n }\n async uploadKnowledgeFile(filePath: string) { return this.uploadTempFile(filePath, true); }\n async downloadFile(path: string, target: string, query?: Record<string, string | number | boolean>) {\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 response = await fetch(url, {\n headers: { accept: \"*/*\", origin: this.baseUrl, referer: `${this.baseUrl}/chatbot`, cookie: `${cookie}=${this.session.tenant!.businessToken}` },\n signal: AbortSignal.timeout(30_000),\n });\n if (!response.ok) throw new Error(`HTTP ${response.status} GET ${path}: ${await response.text()}`);\n await mkdir(dirname(target), { recursive: true });\n await writeFile(target, new Uint8Array(await response.arrayBuffer()));\n return target;\n }\n async downloadLabelTemplate(templateType: string, target: string) {\n if (![\"VOC_LABEL\", \"VOC_LABEL_INIT\"].includes(templateType)) throw new Error(\"template type must be VOC_LABEL or VOC_LABEL_INIT\");\n return this.downloadFile(`/api_v2/gpt/label/project/${await this.projectId()}/downloadLabelTemplate`, target, { type: templateType });\n }\n async downloadLabels(treeId: string, target: string) {\n return this.downloadFile(`/api_v2/gpt/label/project/${await this.projectId()}/downloadLabel`, target, { treeId: asPositiveInt(treeId, \"tree id must be a positive integer\") });\n }\n async uploadLabelFile(treeId: string, filePath: string, init = false) {\n const fileKey = await this.uploadTempFile(filePath);\n const result = await this.post(`/api_v2/gpt/label/project/${await this.projectId()}/uploadLabel`, {\n treeId: asPositiveInt(treeId, \"tree id must be a positive integer\"), file: fileKey, ...(init ? { uploadWay: \"INIT\" } : {}),\n });\n return { fileKey, result };\n }\n async updateKus(value: unknown) {\n const source = Array.isArray(value) ? value : asObject(value, \"batch knowledge update must be an array or object with list\").list;\n if (!Array.isArray(source) || !source.length) throw new Error(\"batch knowledge update requires a non-empty array\");\n const list = [];\n for (const [index, value] of source.entries()) {\n const row = { ...asObject(value, `batch knowledge item #${index + 1} must be an object`) };\n row.kuId = asPositiveInt(row.kuId ?? row.id, `batch knowledge item #${index + 1} requires kuId or id`);\n delete row.id;\n if (row.directoryId === undefined) {\n const current = asObject(await this.getKnowledge(String(row.kuId)), `could not read knowledge ${row.kuId} before update`);\n if (current.directoryId !== undefined) row.directoryId = current.directoryId;\n }\n list.push(row);\n }\n return this.request(\"PUT\", `${this.qamPrefix}/project/${await this.projectId()}/kus`, { list });\n }\n async updateDocumentContent(id: string, type: string, changes: JsonObject) {\n const normalized = knowledgeType(type);\n if (normalized !== \"FILE\" && normalized !== \"WEBSITE\") throw new Error(\"document type must be FILE or WEBSITE\");\n const unknown = Object.keys(changes).filter(key => ![\"fileText\", \"filePath\", \"title\"].includes(key));\n if (unknown.length) throw new Error(`unsupported document content fields: ${unknown.sort().join(\", \")}`);\n if (changes.fileText === undefined && changes.filePath === undefined) throw new Error(\"document update requires fileText or filePath\");\n const documentId = asPositiveInt(id, \"document id must be a positive integer\");\n const current = asObject(await this.getDocument(id), `could not read document ${id} before update`);\n const payload = {\n type: normalized, directoryId: current.directoryId,\n fileName: current.fileName ?? current.name ?? current.title,\n title: current.title ?? current.fileName ?? current.name,\n metadata: current.metadata && typeof current.metadata === \"object\" && !Array.isArray(current.metadata) ? current.metadata : {},\n ...changes, knowledgeIds: [documentId],\n };\n return this.request(\"PUT\", `${this.qamPrefix}/project/${await this.projectId()}/document/${documentId}/contentV2`, payload);\n }\n async createProductKnowledge(data: JsonObject) {\n if (!data.title || !data.spuUrl) throw new Error(\"product knowledge requires title and spuUrl\");\n return this.post(`${this.qamPrefix}/project/${await this.projectId()}/ku_product`, {\n source: \"MANUAL\", published: true, isVisible: true, metadata: { tags: [] }, ...data,\n });\n }\n async updateProductKnowledge(id: string, changes: JsonObject) {\n const allowed = new Set([\"productId\", \"tags\", \"documentId\", \"title\", \"handle\", \"vendor\", \"category\", \"brand\", \"productStatus\", \"country\", \"spuUrl\", \"image\", \"platform\", \"currency\", \"price\", \"compareAtPrice\", \"describe\", \"source\", \"skuList\", \"directoryId\", \"published\", \"metadata\", \"specialTagMap\", \"isVisible\", \"optionName\"]);\n const unknown = Object.keys(changes).filter(key => !allowed.has(key) && key !== \"id\" && key !== \"kuProductId\");\n if (unknown.length) throw new Error(`unsupported product fields: ${unknown.sort().join(\", \")}`);\n const current = asObject(await this.getProductKnowledge(id), `could not read product knowledge ${id} before update`);\n const payload: JsonObject = {};\n for (const key of allowed) if (current[key] !== undefined) payload[key] = current[key];\n for (const key of allowed) if (changes[key] !== undefined) payload[key] = changes[key];\n const missing = [\"title\", \"describe\", \"spuUrl\", \"image\", \"source\", \"published\", \"isVisible\"].filter(key => payload[key] === undefined || payload[key] === \"\");\n if (missing.length) throw new Error(`product detail is incomplete: ${missing.join(\", \")}`);\n return this.request(\"PUT\", `${this.qamPrefix}/project/${await this.projectId()}/ku_product`, { ...payload, kuProductId: asPositiveInt(id, \"product id must be a positive integer\") });\n }\n async updateKuProducts(value: unknown) {\n const source = Array.isArray(value) ? value : asObject(value, \"batch product update must be an array or object with list\").list;\n if (!Array.isArray(source) || !source.length) throw new Error(\"batch product update requires a non-empty array\");\n const list = source.map((value, index) => {\n const row = asObject(value, `batch product item #${index + 1} must be an object`);\n const entry: JsonObject = { id: asPositiveInt(row.id ?? row.kuProductId, `batch product item #${index + 1} requires id or kuProductId`) };\n if (row.mainPush !== undefined) entry.mainPush = Boolean(row.mainPush);\n if (row.enable !== undefined) entry.enable = Boolean(row.enable);\n else if (row.published !== undefined) entry.enable = Boolean(row.published);\n return entry;\n });\n return this.request(\"PUT\", `${this.qamPrefix}/project/${await this.projectId()}/ku_products`, { list });\n }\n async operateKnowledge(value: unknown, confirmDelete = false) {\n const source = Array.isArray(value) ? value : asObject(value, \"knowledge operation must be an array or object with requestList\").requestList;\n if (!Array.isArray(source) || !source.length) throw new Error(\"knowledge operation requires a non-empty array\");\n const supportedOperations = new Set([\"DELETE\", \"MOVE\", \"PUBLISH\", \"UNPUBLISH\", \"VISIBLE\", \"INVISIBLE\"]);\n const requestList = [];\n for (const [index, value] of source.entries()) {\n const row = asObject(value, `knowledge operation #${index + 1} must be an object`);\n const type = knowledgeType(row.knowledgeType);\n const operateType = String(row.operateType ?? \"\").toUpperCase();\n if (!supportedOperations.has(operateType)) throw new Error(`unsupported knowledge operation: ${operateType}`);\n const knowledgeId = asPositiveInt(row.knowledgeId, `knowledge operation #${index + 1} requires knowledgeId`);\n await this.getKnowledgeByType(String(knowledgeId), type);\n const normalized: JsonObject = { knowledgeType: type, knowledgeId, operateType };\n if (operateType === \"MOVE\") normalized.directoryId = asPositiveInt(row.directoryId, \"MOVE requires directoryId\");\n requestList.push(normalized);\n }\n if (requestList.some(item => item.operateType === \"DELETE\") && !confirmDelete) throw new Error(\"DELETE requires --confirm-delete after explicit user acknowledgement\");\n return this.post(`${this.qamPrefix}/project/${await this.projectId()}/updateKnowledge`, { requestList });\n }\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 async moveDirectory(id: string, parentId: string) { return this.get(`${this.qamPrefix}/project/${await this.projectId()}/directory/move`, { currentId: asPositiveInt(id, \"directory id must be a positive integer\"), parentId: Number(parentId) }); }\n async getKnowledgeIsolationKeywords(id: string, type: string) { return this.get(`${this.qamPrefix}/project/${await this.projectId()}/knowledge/isolation_keywords`, { knowledgeType: isolationKnowledgeType(type), knowledgeId: asPositiveInt(id, \"knowledge id must be a positive integer\") }); }\n async batchUpdateIsolationKeywordBindings(data: JsonObject) {\n const items = data.items ?? [], directoryIds = data.directoryIds ?? [], keywordIds = data.keywordIds ?? [];\n if (!Array.isArray(items) || !Array.isArray(directoryIds) || !Array.isArray(keywordIds)) throw new Error(\"items, directoryIds and keywordIds must be arrays\");\n if (!items.length && !directoryIds.length && !keywordIds.length) throw new Error(\"isolation keyword binding update has no targets or keyword IDs\");\n if (items.length && directoryIds.length) throw new Error(\"submit knowledge items and directory IDs in separate binding updates\");\n const normalizedItems = items.map((value, index) => {\n const row = asObject(value, `isolation binding item #${index + 1} must be an object`);\n if (!Array.isArray(row.keywordIds)) throw new Error(\"items[].keywordIds must be an array\");\n return {\n knowledgeType: isolationKnowledgeType(row.knowledgeType ?? \"QA\"),\n knowledgeId: asPositiveInt(row.knowledgeId, \"items[].knowledgeId must be a positive integer\"),\n keywordIds: [...new Set(row.keywordIds.map(value => asPositiveInt(value, \"items[].keywordIds must contain positive integer IDs\")))],\n };\n });\n return this.post(`${this.qamPrefix}/project/${await this.projectId()}/knowledge/isolation_keywords/batch`, {\n items: normalizedItems,\n directoryIds: [...new Set(directoryIds.map(value => asPositiveInt(value, \"directoryIds must contain positive integer IDs\")))],\n keywordIds: [...new Set(keywordIds.map(value => asPositiveInt(value, \"keywordIds must contain positive integer IDs\")))],\n });\n }\n async applyIsolationKeywordBindings(data: JsonObject) {\n const operation = String(data.operation ?? \"append\").toLowerCase();\n if (![\"append\", \"remove\", \"replace\"].includes(operation)) throw new Error(\"operation must be append, remove, or replace\");\n const items = data.items ?? [], directoryIds = data.directoryIds ?? [];\n if (!Array.isArray(items) || !Array.isArray(directoryIds) || (!items.length && !directoryIds.length)) throw new Error(\"binding update requires knowledge items or directory IDs\");\n if (items.length && directoryIds.length) throw new Error(\"submit knowledge items and directory IDs in separate binding updates\");\n if (directoryIds.length && operation !== \"replace\") throw new Error(\"directory bindings require operation=replace\");\n if ((directoryIds.length || operation === \"replace\") && data.confirmReplace !== true) throw new Error(\"binding replacement requires confirmReplace=true after explicit user confirmation\");\n const resolvedItems = [];\n for (const [index, value] of items.entries()) {\n const row = asObject(value, `isolation binding item #${index + 1} must be an object`);\n const id = asPositiveInt(row.knowledgeId, \"items[].knowledgeId must be a positive integer\");\n const type = knowledgeType(row.knowledgeType);\n if (!Array.isArray(row.keywordIds)) throw new Error(\"items[].keywordIds must be an array\");\n const requestedIds = row.keywordIds.map(value => asPositiveInt(value, \"items[].keywordIds must contain positive integer IDs\"));\n await this.getKnowledgeByType(String(id), type);\n const existingResponse = await this.getKnowledgeIsolationKeywords(String(id), type);\n const existingRows = Array.isArray(existingResponse) ? existingResponse\n : existingResponse && typeof existingResponse === \"object\" && Array.isArray((existingResponse as JsonObject).list) ? (existingResponse as JsonObject).list as unknown[] : [];\n const existingIds = existingRows.map(value => asPositiveInt(asObject(value, \"existing isolation keyword binding must be an object\").id, \"existing isolation keyword binding has an invalid ID\"));\n const finalIds = operation === \"append\" ? [...new Set([...existingIds, ...requestedIds])]\n : operation === \"remove\" ? existingIds.filter(id => !requestedIds.includes(id)) : [...new Set(requestedIds)];\n resolvedItems.push({ knowledgeType: type, knowledgeId: id, keywordIds: finalIds });\n }\n for (const value of directoryIds) await this.listKnowledge({ directoryId: asPositiveInt(value, \"directoryIds must contain positive integer IDs\"), pageIndex: 1, pageSize: 1 });\n return this.batchUpdateIsolationKeywordBindings({ items: resolvedItems, directoryIds, keywordIds: data.keywordIds ?? [] });\n }\n async editKnowledgeTags(data: JsonObject) {\n const knowledgeIds = data.knowledgeIds, requestedTags = data.tagList;\n if (!Array.isArray(knowledgeIds) || !knowledgeIds.length) throw new Error(\"edit knowledge tags requires non-empty knowledgeIds\");\n if (!Array.isArray(requestedTags) || requestedTags.some(value => typeof value !== \"string\" || !value.trim())) throw new Error(\"tagList must contain non-empty strings\");\n const operation = String(data.operation ?? \"append\");\n if (![\"append\", \"replace\", \"remove\"].includes(operation)) throw new Error(\"tag operation must be append, replace, or remove\");\n const type = knowledgeType(data.type ?? \"QA\");\n const results = [];\n for (const value of knowledgeIds) {\n const id = asPositiveInt(value, \"knowledgeIds must contain positive integer IDs\");\n const current = asObject(await this.getKnowledgeByType(String(id), type), `could not read knowledge ${id} before tag update`);\n const metadata = current.metadata && typeof current.metadata === \"object\" && !Array.isArray(current.metadata) ? current.metadata as JsonObject : {};\n const existing = Array.isArray(current.tags) ? current.tags : Array.isArray(metadata.tags) ? metadata.tags : [];\n const requested = requestedTags.map(String);\n const tagList = operation === \"append\" ? [...new Set([...existing.map(String), ...requested])]\n : operation === \"remove\" ? existing.map(String).filter(tag => !requested.includes(tag)) : [...new Set(requested)];\n results.push(await this.post(`${this.qamPrefix}/project/${await this.projectId()}/editTags`, { type, knowledgeIds: [id], tagList }));\n }\n return { success: true, results };\n }\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 getConversationsByIntent(intent: string, limit = 50) {\n const intentResponse = await this.listIntents(\"\");\n const intents = Array.isArray(intentResponse) ? intentResponse\n : intentResponse && typeof intentResponse === \"object\" && Array.isArray((intentResponse as JsonObject).data) ? (intentResponse as JsonObject).data as unknown[]\n : intentResponse && typeof intentResponse === \"object\" && Array.isArray((intentResponse as JsonObject).list) ? (intentResponse as JsonObject).list as unknown[] : [];\n const matched = intents.find(value => value && typeof value === \"object\" && String((value as JsonObject).name ?? \"\") === intent) as JsonObject | undefined;\n if (!matched?.id) return [];\n const response = await this.listTranscripts({ pageSize: limit, pageIndex: 1, intentId: Number(matched.id) });\n const rows = Array.isArray(response) ? response\n : response && typeof response === \"object\" && Array.isArray((response as JsonObject).list) ? (response as JsonObject).list as unknown[] : [];\n const result = [];\n for (const value of rows) {\n if (!value || typeof value !== \"object\") continue;\n const row = value as JsonObject, chatId = row.chatId ?? row.id;\n if (!chatId) continue;\n try {\n const detail = asObject(await this.transcript(String(chatId)), `transcript ${chatId} must be an object`);\n const turns = Array.isArray(detail.turns) ? detail.turns : Array.isArray(detail.messages) ? detail.messages : [];\n const messages: unknown[] = []; let metadata: JsonObject = {};\n for (const turnValue of turns) {\n if (!turnValue || typeof turnValue !== \"object\") continue;\n const turn = turnValue as JsonObject, role = turn.role ?? turn.type, content = turn.content ?? turn.message;\n if (role === \"USER\" && content) messages.push(content);\n if (!Object.keys(metadata).length && turn.metadata && typeof turn.metadata === \"object\" && !Array.isArray(turn.metadata)) metadata = turn.metadata as JsonObject;\n }\n if (messages.length) result.push({ source_chat_id: chatId, intent, messages, metadata });\n } catch { /* One unreadable transcript must not abort the batch. */ }\n }\n return result;\n }\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.chatStream({ message: option(a, \"--message\", true), botId: Number(option(a, \"--bot-id\") ?? await c.botId()), touchPoint: option(a, \"--touch-point\") ?? \"LIVE_CHAT\", ...(await data(a)) }),\n \"update-chatflow\": async (c, a) => c.updateChatflow(option(a, \"--agent-id\", true)!, await jsonData(a), flag(a, \"--publish\")),\n \"get-conversations-by-intent\": (c, a) => c.getConversationsByIntent(option(a, \"--intent\", true)!, Number(option(a, \"--limit\") ?? 50)),\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\": (c, a) => c.getKnowledgeIsolationKeywords(requireId(a), option(a, \"--type\", true)!),\n \"batch-update-isolation-keyword-bindings\": async (c, a) => c.applyIsolationKeywordBindings(await data(a)),\n \"edit-knowledge-tags\": async (c, a) => c.editKnowledgeTags(await data(a)),\n \"move-directory\": (c, a) => c.moveDirectory(requireId(a), option(a, \"--parent-id\", true)!),\n \"operate-knowledge\": async (c, a) => c.operateKnowledge(await jsonValue(a), flag(a, \"--confirm-delete\")),\n \"batch-update-knowledge\": async (c, a) => c.updateKus(await jsonValue(a)),\n \"update-document-content\": async (c, a) => c.updateDocumentContent(requireId(a), option(a, \"--type\", true)!, await data(a)),\n \"create-product-knowledge\": async (c, a) => c.createProductKnowledge(await data(a)),\n \"update-product-knowledge\": async (c, a) => c.updateProductKnowledge(requireId(a), await data(a)),\n \"batch-update-products\": async (c, a) => c.updateKuProducts(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) => ({ file: await c.downloadLabelTemplate(option(a, \"--template-type\") === \"init\" ? \"VOC_LABEL_INIT\" : \"VOC_LABEL\", option(a, \"--output\") ?? `${option(a, \"--template-type\") ?? \"label\"}_template.xlsx`) }),\n \"download-labels\": async (c, a) => ({ file: await c.downloadLabels(option(a, \"--tree-id\", true)!, option(a, \"--output\") ?? `labels_${option(a, \"--tree-id\", true)}.xlsx`) }),\n \"upload-labels\": (c, a) => c.uploadLabelFile(option(a, \"--tree-id\", true)!, option(a, \"--file\", true)!, flag(a, \"--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) => ({ file: await c.uploadTempFile(option(a, \"--file\", true)!) }),\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> --type <QA|LEARN_SELF|FILE|WEBSITE|PRODUCT>\"),\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(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\")\n .replaceAll(\"'\", \"'\");\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 => ({ \"&\": \"&\", \"<\": \"<\", \">\": \">\", \"\\\"\": \""\", \"'\": \"'\" }[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 = await client.uploadTempFile(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 { fileKey: file, 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\ntype QaPlanItem = { dirPath: string[]; title: string; content: string };\nconst flattenDirectories = (nodes: JsonObject[], result: JsonObject[] = []) => {\n for (const node of nodes) {\n result.push(node);\n if (Array.isArray(node.children)) flattenDirectories(node.children.filter(child => child && typeof child === \"object\") as JsonObject[], result);\n }\n return result;\n};\n\nfunction validateQaItems(values: unknown[], maxDepth: number): QaPlanItem[] {\n if (!values.length) throw new Error(\"QA plan must contain at least one item\");\n return values.map((value, index) => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) throw new Error(`QA item #${index + 1} must be an object`);\n const item = value as JsonObject;\n if (!Array.isArray(item.dir_path) || !item.dir_path.length) throw new Error(`QA item #${index + 1} dir_path must be a non-empty array`);\n if (item.dir_path.length > maxDepth) throw new Error(`QA item #${index + 1} dir_path exceeds maximum depth ${maxDepth}`);\n const dirPath = item.dir_path.map((name, depth) => {\n if (typeof name !== \"string\" || !name.trim() || /[\\\\/]/.test(name)) throw new Error(`QA item #${index + 1} dir_path[${depth}] must be a folder name`);\n return name.trim();\n });\n const title = typeof item.question === \"string\" ? item.question.trim() : \"\";\n const content = typeof item.answer === \"string\" ? item.answer.trim() : \"\";\n if (!title) throw new Error(`QA item #${index + 1} question must be a non-empty string`);\n if (!content) throw new Error(`QA item #${index + 1} answer must be a non-empty markdown string`);\n return { dirPath, title, content };\n });\n}\n\nasync function resolveDirectory(client: SolveaClient, path: string[], directories: JsonObject[], cache: Map<string, number>) {\n let parentId = 0;\n const prefix: string[] = [];\n for (const name of path) {\n prefix.push(name);\n const key = prefix.join(\"/\");\n const cached = cache.get(key);\n if (cached !== undefined) { parentId = cached; continue; }\n const match = directories.find(directory => String(directory.name ?? \"\") === name && Number(directory.parentId ?? 0) === parentId);\n if (match) parentId = Number(match.id ?? match.directoryId);\n else {\n const createdParentId = parentId;\n const created = await client.createFolder(name, parentId) as JsonObject;\n const id = Number(created?.id ?? created?.directoryId);\n if (!Number.isSafeInteger(id) || id <= 0) throw new Error(`could not create directory ${key}: response has no directory id`);\n parentId = id;\n directories.push({ id, name, parentId: Number(created?.parentId ?? createdParentId) });\n }\n cache.set(key, parentId);\n }\n return parentId;\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\")).sort()) { 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 maxDepth = intOption(args, \"--max-depth\", 3);\n if (!Number.isSafeInteger(maxDepth) || maxDepth <= 0) throw new Error(\"--max-depth must be a positive integer\");\n const normalized = validateQaItems(items, maxDepth);\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 const directories = flattenDirectories(asRows(await client.listDirectories()));\n const cache = new Map<string, number>();\n const payload = [];\n for (const item of normalized) payload.push({ title: item.title, content: item.content, directoryId: await resolveDirectory(client, item.dirPath, directories, cache) });\n return { planFile, count: payload.length, result: await client.uploadQa(payload) };\n}\n\nasync function importSources(client: SolveaClient, args: string[]) {\n const value = await readJson<unknown>(option(args, \"--plan-file\", true)!);\n const source = Array.isArray(value) ? value : value && typeof value === \"object\" && Array.isArray((value as JsonObject).items) ? (value as JsonObject).items as unknown[] : [];\n if (!source.length) throw new Error(\"source document plan must be a non-empty array\");\n const maxDepth = intOption(args, \"--max-depth\", 3);\n if (!Number.isSafeInteger(maxDepth) || maxDepth <= 0) throw new Error(\"--max-depth must be a positive integer\");\n const { stat } = await import(\"node:fs/promises\");\n const normalized: Array<{ source: string; dirPath: string[]; isUrl: boolean; skippedDuplicate: boolean }> = [];\n const seenUrls = new Set<string>();\n for (const [index, raw] of source.entries()) {\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) throw new Error(`source document #${index + 1} must be an object`);\n const item = raw as JsonObject;\n const itemSource = typeof item.source === \"string\" ? item.source.trim() : \"\";\n if (!itemSource) throw new Error(`source document #${index + 1} needs a non-empty source`);\n const path = item.dir_path ?? [];\n if (!Array.isArray(path) || path.some(name => typeof name !== \"string\" || !name.trim() || /[\\\\/]/.test(name))) throw new Error(`source document #${index + 1} dir_path must contain folder names`);\n if (path.length > maxDepth) throw new Error(`source document #${index + 1} dir_path exceeds maximum depth ${maxDepth}`);\n const isUrl = /^https?:\\/\\//i.test(itemSource);\n if (!isUrl) {\n if (![\".doc\", \".docx\", \".pdf\"].some(extension => itemSource.toLowerCase().endsWith(extension))) throw new Error(`source document #${index + 1} supports .doc, .docx, or .pdf`);\n const info = await stat(itemSource).catch(() => undefined);\n if (!info?.isFile()) throw new Error(`source document #${index + 1} file not found: ${itemSource}`);\n }\n const skippedDuplicate = isUrl && seenUrls.has(itemSource);\n if (isUrl) seenUrls.add(itemSource);\n normalized.push({ source: itemSource, dirPath: path.map(String).map(name => name.trim()), isUrl, skippedDuplicate });\n }\n if (!flag(args, \"--execute\")) return { dryRun: true, count: normalized.length, items: normalized.map(item => ({ source: item.source, dir_path: item.dirPath, status: item.skippedDuplicate ? \"skipped_duplicate\" : \"pending\" })) };\n\n const directories = flattenDirectories(asRows(await client.listDirectories()));\n const cache = new Map<string, number>();\n const results = [];\n for (const item of normalized) {\n if (item.skippedDuplicate) { results.push({ source: item.source, status: \"skipped_duplicate\" }); continue; }\n const directoryId = await resolveDirectory(client, item.dirPath, directories, cache);\n const filePath = item.isUrl ? item.source : await client.uploadKnowledgeFile(item.source);\n const documents = [{ filePath, docType: \"TC\", ...(item.isUrl ? { fileType: \"website\" } : {}) }];\n const result = await client.createDocuments(documents, directoryId, item.isUrl ? \"WEB\" : \"FILE\");\n results.push({ source: item.source, directoryId, status: \"submitted\", result });\n }\n return { count: normalized.length, results };\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","dirname","readFile","mkdir","readFile","writeFile","query","resolve","data","pageSize","enabled","key","value","entry","id","readFile","readFile","options","handlers","requireFlag","data","readFile","dirname","usage","action","join","root","join","options","query","mkdir","writeFile","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","readdir","plan","ExcelJS","action","join","ExcelJS","join","ExcelJS","pageSize","page","readJson","writeJson","action","renderReport","data","action","resolve","readFile"]}
|