bailian-cli-commands 1.13.0 → 1.13.1

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.
Files changed (2) hide show
  1. package/dist/index.mjs +5 -5
  2. package/package.json +3 -3
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import{ASYNC_FLAG as e,BailianError as t,CONCURRENT_FLAG as n,DEFAULT_TRAINING_TYPE as r,DOCS_HOSTS as i,ExitCode as a,MAX_DATASET_BYTES as o,MAX_MEDIA_ZIP_BYTES as s,MODEL_LIST_API as c,REGIONS as l,SEMANTIC_TOP_K as u,STRATEGIES as d,TRAINING_TYPES_CLI as f,UsageError as p,analyzeIntent as m,appCompletionPath as h,bailianMcpPath as g,buildAcsCanonicalQuery as _,buildDocLink as v,callConsoleGateway as y,cancelFineTune as b,chatPath as x,createBailianControlUser as S,createDeployment as C,createFineTune as ee,createInstrumentedFetch as te,defaultDeployPlan as ne,defineCommand as w,deleteConfigProfile as re,deleteDataset as ie,deleteDeployment as ae,deleteFineTune as oe,detectModality as se,detectOutputFormat as T,effectiveConsoleGatewayConfig as ce,exportCheckpoint as le,fetchModelCapability as ue,fetchModelDetail as de,fetchModelGroups as fe,fetchModelList as pe,fetchPredictConfig as me,formatIssue as he,generateCLIAccessToken as ge,generateFilename as _e,getConfigDir as ve,getDataset as ye,getDeployment as be,getFineTune as xe,getFineTuneLogs as Se,getModelProfilePreset as Ce,getModels as we,getProfile as Te,imageFileToDataUri as Ee,isLocalFile as De,isTrainingTypeCli as Oe,knowledgeChatEndpoint as ke,knowledgeRetrievePath as Ae,knowledgeSearchEndpoint as je,listBailianControlWorkspaces as Me,listCheckpoints as Ne,listDatasets as Pe,listDeployableModels as Fe,listDeployments as Ie,listFineTunes as Le,listSupportedTrainingTypes as Re,mapApiError as ze,maskToken as E,mcpWebSearchPath as Be,memoryAddPath as Ve,memoryListPath as He,memoryNodePath as Ue,memorySearchPath as We,modelSupportsTrainingType as Ge,normalizeConfigName as Ke,normalizeModelBaseUrl as qe,parseDatasetSchemaFlag as Je,parseSSE as Ye,pickPlanStrategy as Xe,preflightBatchSizeGate as Ze,profileSchemaPath as Qe,rankModels as $e,readConfigFile as et,readTextFromPathOrStdin as tt,recallSemantic as nt,redactDataUri as D,requestJson as rt,resetBailianControlPolicies4Agent as it,resolveBooleanFlag as at,resolveImageEditApi as ot,resolveImageGenerateApi as st,resolveOutputDir as ct,resolveWatermark as lt,scaleDeployment as ut,speechRecognizePath as dt,speechSynthesizePath as ft,stripUndefined as pt,taskPath as O,trackingHeaders as mt,trainingTypeMethodVariant as ht,unwrapResponse as gt,updateDeployment as _t,uploadDataset as vt,userProfilePath as yt,validateDataset as bt,videoGeneratePath as xt,writeConfigFile as St}from"bailian-cli-core";import{API_KEY_PAGE as Ct,BOOL_FLAG_PROMPT_EXTEND_API_DEFAULT as wt,BOOL_FLAG_PROMPT_EXTEND_CLI_TRUE as Tt,BOOL_FLAG_PROMPT_EXTEND_IMAGE_GENERATE as Et,BOOL_FLAG_WATERMARK as Dt,VOICE_TTS_PAGE as Ot,ansi as k,collectPipelineHints as kt,collectPipelineIssues as At,createSpinner as jt,displayWidth as Mt,downloadFile as A,downloadParallel as Nt,emitBare as j,emitResult as M,executePipeline as Pt,fetchLatestVersion as Ft,formatBytes as It,formatTable as N,getConcurrency as Lt,initPipelineSteps as Rt,mcpMarketplaceDetailPage as zt,padEnd as P,poll as Bt,renderBoxTable as Vt,resolveImageSize as Ht,runConcurrent as Ut,streamPipelineEvents as Wt,supportsColor as Gt}from"bailian-cli-runtime";import{randomBytes as Kt,timingSafeEqual as qt}from"node:crypto";import Jt from"node:http";import{execFile as Yt}from"node:child_process";import{copyFileSync as Xt,createWriteStream as Zt,existsSync as Qt,mkdirSync as $t,readFileSync as en,renameSync as tn,statSync as nn,writeFileSync as rn}from"fs";import{basename as an,dirname as on,extname as sn,join as F}from"path";import{createReadStream as cn,existsSync as I,mkdirSync as ln,readFileSync as un,readdirSync as dn,statSync as fn,unlinkSync as pn,writeFileSync as mn}from"node:fs";import{basename as hn,dirname as gn,extname as _n,join as L,relative as vn,resolve as R,sep as yn}from"node:path";import{homedir as z}from"node:os";import{inflateRawSync as bn}from"node:zlib";import xn from"yaml";import{parse as Sn,stringify as Cn}from"smol-toml";import{homedir as B,platform as wn}from"os";import{execSync as Tn}from"child_process";import{readFile as En,writeFile as Dn}from"node:fs/promises";import On from"boxen";import kn,{Chalk as An}from"chalk";import*as jn from"@openagentpack/sdk";import{AGENTS_PROVIDER_FIELDS as Mn,LocalFileStateBackend as Nn,StateManager as Pn,UserError as Fn,bootstrapRuntimeCredentialsSync as In,createProjectRuntime as Ln,createSessionForAgent as Rn,deleteSession as zn,destroyPlannedProjectResources as Bn,executePlannedProject as Vn,getSession as Hn,importResource as Un,isTerminalSessionStatus as Wn,listSessionEvents as Gn,listSessionSummaries as Kn,listSkills as qn,parseStateAddress as Jn,planDestroyProjectContext as Yn,planProjectContext as Xn,resolveProjectConfig as Zn,sendSessionMessagePolling as Qn,sendSessionMessageStreaming as $n,startSessionRun as er,startSessionRunPolling as tr,validateProjectConfig as nr}from"@openagentpack/sdk";import{sanitizeSessionEvents as rr}from"@openagentpack/sdk/session-events";function ir(e){if(e instanceof t){if(e.exitCode===a.NETWORK||e.exitCode===a.TIMEOUT)return!0;let t=e.api?.httpStatus;return t===401||t!==void 0&&t>=500}return e instanceof Error?e.name===`AbortError`||e.name===`TimeoutError`||e.message.includes(`timed out`)||e.message===`fetch failed`:!1}async function ar(e,t,n){process.stderr.write(`Testing key... `);let r={identity:e.identity,settings:e.settings},i=qe(n.baseUrl),a=n.persistBaseUrl?qe(n.persistBaseUrl):void 0,o={url:i+x(),method:`POST`,headers:{Authorization:`Bearer ${t}`},timeout:Math.min(e.settings.timeout,30),body:{model:`qwen3.7-max`,messages:[{role:`user`,content:`hi`}],max_tokens:1,stream:!1}};for(let e=1;e<=3;e++)try{await rt(r,o);break}catch(t){if(e>=3||!ir(t))throw process.stderr.write(`Failed
1
+ import{ASYNC_FLAG as e,BailianError as t,CONCURRENT_FLAG as n,DEFAULT_TRAINING_TYPE as r,DOCS_HOSTS as i,ExitCode as a,MAX_DATASET_BYTES as o,MAX_MEDIA_ZIP_BYTES as s,MODEL_LIST_API as c,REGIONS as l,SEMANTIC_TOP_K as u,STRATEGIES as d,TRAINING_TYPES_CLI as f,UsageError as p,analyzeIntent as m,appCompletionPath as h,bailianMcpPath as g,buildAcsCanonicalQuery as _,buildDocLink as v,callConsoleGateway as y,cancelFineTune as b,chatPath as x,createBailianControlUser as S,createDeployment as C,createFineTune as ee,createInstrumentedFetch as te,defaultDeployPlan as ne,defineCommand as w,deleteConfigProfile as re,deleteDataset as ie,deleteDeployment as ae,deleteFineTune as oe,detectModality as se,detectOutputFormat as T,effectiveConsoleGatewayConfig as ce,exportCheckpoint as le,fetchModelCapability as ue,fetchModelDetail as de,fetchModelGroups as fe,fetchModelList as pe,fetchPredictConfig as me,formatIssue as he,generateCLIAccessToken as ge,generateFilename as _e,getConfigDir as ve,getDataset as ye,getDeployment as be,getFineTune as xe,getFineTuneLogs as Se,getModelProfilePreset as Ce,getModels as we,getProfile as Te,imageFileToDataUri as Ee,isLocalFile as De,isTrainingTypeCli as Oe,knowledgeChatEndpoint as ke,knowledgeRetrievePath as Ae,knowledgeSearchEndpoint as je,listBailianControlWorkspaces as Me,listCheckpoints as Ne,listDatasets as Pe,listDeployableModels as Fe,listDeployments as Ie,listFineTunes as Le,listSupportedTrainingTypes as Re,mapApiError as ze,maskToken as E,mcpWebSearchPath as Be,memoryAddPath as Ve,memoryListPath as He,memoryNodePath as Ue,memorySearchPath as We,modelSupportsTrainingType as Ge,normalizeConfigName as Ke,normalizeModelBaseUrl as qe,parseDatasetSchemaFlag as Je,parseSSE as Ye,pickPlanStrategy as Xe,preflightBatchSizeGate as Ze,profileSchemaPath as Qe,rankModels as $e,readConfigFile as et,readTextFromPathOrStdin as tt,recallSemantic as nt,redactDataUri as D,requestJson as rt,resetBailianControlPolicies4Agent as it,resolveBooleanFlag as at,resolveImageEditApi as ot,resolveImageGenerateApi as st,resolveOutputDir as ct,resolveWatermark as lt,scaleDeployment as ut,speechRecognizePath as dt,speechSynthesizePath as ft,stripUndefined as pt,taskPath as O,trackingHeaders as mt,trainingTypeMethodVariant as ht,unwrapResponse as gt,updateDeployment as _t,uploadDataset as vt,userProfilePath as yt,validateDataset as bt,videoGeneratePath as xt,writeConfigFile as St}from"bailian-cli-core";import{API_KEY_PAGE as Ct,BOOL_FLAG_PROMPT_EXTEND_API_DEFAULT as wt,BOOL_FLAG_PROMPT_EXTEND_CLI_TRUE as Tt,BOOL_FLAG_PROMPT_EXTEND_IMAGE_GENERATE as Et,BOOL_FLAG_WATERMARK as Dt,VOICE_TTS_PAGE as Ot,ansi as k,collectPipelineHints as kt,collectPipelineIssues as At,createSpinner as jt,displayWidth as Mt,downloadFile as A,downloadParallel as Nt,emitBare as j,emitResult as M,executePipeline as Pt,fetchLatestVersion as Ft,formatBytes as It,formatTable as N,getConcurrency as Lt,initPipelineSteps as Rt,mcpMarketplaceDetailPage as zt,padEnd as P,poll as Bt,renderBoxTable as Vt,resolveImageSize as Ht,runConcurrent as Ut,streamPipelineEvents as Wt,supportsColor as Gt}from"bailian-cli-runtime";import{randomBytes as Kt,timingSafeEqual as qt}from"node:crypto";import Jt from"node:http";import{execFile as Yt}from"node:child_process";import{copyFileSync as Xt,createWriteStream as Zt,existsSync as Qt,mkdirSync as $t,readFileSync as en,renameSync as tn,statSync as nn,writeFileSync as rn}from"fs";import{basename as an,dirname as on,extname as sn,join as F}from"path";import{createReadStream as cn,existsSync as I,mkdirSync as ln,readFileSync as un,readdirSync as dn,statSync as fn,unlinkSync as pn,writeFileSync as mn}from"node:fs";import{basename as hn,dirname as gn,extname as _n,join as L,relative as vn,resolve as R,sep as yn}from"node:path";import{homedir as z}from"node:os";import{inflateRawSync as bn}from"node:zlib";import xn from"yaml";import{parse as Sn,stringify as Cn}from"smol-toml";import{homedir as B,platform as wn}from"os";import{execSync as Tn}from"child_process";import{readFile as En,writeFile as Dn}from"node:fs/promises";import On from"boxen";import kn,{Chalk as An}from"chalk";import*as jn from"@openagentpack/sdk";import{AGENTS_PROVIDER_FIELDS as Mn,LocalFileStateBackend as Nn,StateManager as Pn,UserError as Fn,bootstrapRuntimeCredentialsSync as In,createProjectRuntime as Ln,createSessionForAgent as Rn,deleteSession as zn,destroyPlannedProjectResources as Bn,executePlannedProject as Vn,getSession as Hn,importResource as Un,isTerminalSessionStatus as Wn,listSessionEvents as Gn,listSessionSummaries as Kn,listSkills as qn,parseStateAddress as Jn,planDestroyProjectContext as Yn,planProjectContext as Xn,resolveProjectConfig as Zn,sendSessionMessagePolling as Qn,sendSessionMessageStreaming as $n,startSessionRun as er,startSessionRunPolling as tr,validateProjectConfig as nr}from"@openagentpack/sdk";import{sanitizeSessionEvents as rr}from"@openagentpack/sdk/session-events";function ir(e){if(e instanceof t){if(e.exitCode===a.NETWORK||e.exitCode===a.TIMEOUT)return!0;let t=e.api?.httpStatus;return t===401||t!==void 0&&t>=500}return e instanceof Error?e.name===`AbortError`||e.name===`TimeoutError`||e.message.includes(`timed out`)||e.message===`fetch failed`:!1}async function ar(e,t,n){process.stderr.write(`Testing key... `);let r={identity:e.identity,settings:e.settings},i=qe(n.baseUrl),a=n.persistBaseUrl?qe(n.persistBaseUrl):void 0,o={url:i+x(),method:`POST`,headers:{Authorization:`Bearer ${t}`},timeout:Math.min(e.settings.timeout,30),body:{model:`qwen3.8-max`,messages:[{role:`user`,content:`hi`}],max_tokens:1,stream:!1}};for(let e=1;e<=3;e++)try{await rt(r,o);break}catch(t){if(e>=3||!ir(t))throw process.stderr.write(`Failed
2
2
  `),t;let n=500*2**(e-1);await new Promise(e=>setTimeout(e,n))}process.stderr.write(`Valid
3
3
  `),await e.authStore.login({...n.persistPatch,api_key:t,base_url:a,default_text_model:n.defaultTextModel,default_video_model:n.defaultVideoModel,default_image_to_video_model:n.defaultImageToVideoModel,default_reference_to_video_model:n.defaultReferenceToVideoModel,default_image_model:n.defaultImageModel})}function or(e,t=0){return new Promise((n,r)=>{let i=e=>r(e);e.once(`error`,i),e.listen({port:t,host:`127.0.0.1`,exclusive:!0},()=>{e.off(`error`,i);let t=e.address();if(!t||typeof t==`string`){r(Error(`Expected TCP socket address`));return}n(t.port)})})}function sr(e){let t=process.platform,n=t===`darwin`?`open`:t===`win32`?`cmd`:`xdg-open`,r=t===`win32`?[`/c`,`start`,``,e]:[e];return new Promise((e,t)=>{Yt(n,r,{windowsHide:!0},n=>{n?t(n):e()})})}function cr(e){return sr(e)}const lr=RegExp(`\r
4
4
  \r
@@ -16,7 +16,7 @@ This process keeps the local port open for the console; press Ctrl+C when finish
16
16
  `);return}if(n.openApi){if(t.dryRun){i.openapi?j(`Would clear access_key_id / access_key_secret / security_token from ${r.path}`):j(`No OpenAPI AK/SK credentials to clear.`),j(`No changes made.`);return}await r.logout(`openapi`)?(process.stderr.write(`Cleared access_key_id / access_key_secret / security_token from ${r.path}\n`),(i.apiKey||i.console)&&process.stderr.write(`Other credentials are still configured and will be used for authentication.
17
17
  `)):process.stderr.write(`No OpenAPI AK/SK credentials to clear.
18
18
  `);return}let a=i.apiKey||i.console||i.openapi||!!i.baseUrl;if(t.dryRun){j(a?`Would clear api_key / base_url / access_token / access_key_id / access_key_secret / security_token from ${r.path}`:`No credentials or model Base URL to clear.`),j(`No changes made.`);return}await r.logout(`all`)?process.stderr.write(`Cleared api_key / base_url / access_token / access_key_id / access_key_secret / security_token from ${r.path}\n`):process.stderr.write(`No credentials or model Base URL to clear.
19
- `)}}),jr=w({description:`Generate a CLI access token using OpenAPI AK/SK`,auth:`none`,usageArgs:`--access-key-id <id> --access-key-secret <secret> --security-token <token>`,flags:{accessKeyId:{type:`string`,valueHint:`<id>`,description:`Alibaba Cloud Access Key ID`,required:!0},accessKeySecret:{type:`string`,valueHint:`<secret>`,description:`Alibaba Cloud Access Key Secret`,required:!0},securityToken:{type:`string`,valueHint:`<token>`,description:`Alibaba Cloud STS Security Token to store (optional)`}},exampleArgs:[`--access-key-id LTAIxxxxx --access-key-secret xxxxx --security-token <token>`],async run(e){let{identity:t,settings:n,flags:r}=e,i=T(n.output);M(await ge({identity:t,settings:n,baseUrl:e.client.baseUrl,accessKeyId:r.accessKeyId,accessKeySecret:r.accessKeySecret,securityToken:r.securityToken||void 0}),i)}});const Mr={model:{type:`string`,valueHint:`<model>`,description:`Model ID (default: qwen3.7-max)`},message:{type:`array`,valueHint:`<text>`,description:`Message text (repeatable, prefix role: to set role); or use --messages-file`},messagesFile:{type:`string`,valueHint:`<path>`,description:`JSON file with messages array (use - for stdin)`},system:{type:`string`,valueHint:`<text>`,description:`System prompt`},maxTokens:{type:`number`,valueHint:`<n>`,description:`Maximum tokens to generate (default: 4096)`},temperature:{type:`number`,valueHint:`<n>`,description:`Sampling temperature (0.0, 2.0]`},topP:{type:`number`,valueHint:`<n>`,description:`Nucleus sampling threshold`},stream:{type:`switch`,description:`Stream response tokens (default: on in TTY)`},tool:{type:`array`,valueHint:`<json-or-path>`,description:`Tool definition as JSON or file path (repeatable)`},enableThinking:{type:`switch`,description:`Enable thinking/reasoning mode (for qwen3/qwq models)`},thinkingBudget:{type:`number`,valueHint:`<n>`,description:`Max tokens for thinking (default: 4096)`}};function Nr(e){let t=[],n;if(e.system&&(n=e.system),e.messagesFile){let r=tt(e.messagesFile),i=JSON.parse(r);for(let e of i)e.role===`system`?n=typeof e.content==`string`?e.content:``:t.push(e)}if(e.message){let r=new Set([`system`,`user`,`assistant`]),i=e.message;for(let e of i){let i=e.indexOf(`:`),a=i===-1?``:e.slice(0,i);if(r.has(a)){let r=e.slice(i+1);a===`system`?n=r:t.push({role:a,content:r})}else t.push({role:`user`,content:e})}}return{system:n,messages:t}}var Pr=w({description:`Send a chat completion (OpenAI compatible, DashScope)`,auth:`apiKey`,usageArgs:`--message <text> [flags]`,flags:Mr,exampleArgs:[`--message "What is Qwen?"`,`--model qwen-max --system "You are a coding assistant." --message "Write fizzbuzz in Python"`,`--message "Hello" --message "assistant:Hi!" --message "How are you?"`,`--messages-file - --stream`,`--message "Hello" --output json`,`--model qwq-plus --message "Solve 1+1" --enable-thinking`],validate:e=>!e.message&&!e.messagesFile?`Provide --message or --messages-file.`:void 0,async run(e){let{settings:t,flags:n}=e,{system:r,messages:i}=Nr(n),a=n.model||t.defaultTextModel||`qwen3.7-max`,o=n.stream||process.stdout.isTTY,s=T(t.output),c=[];r&&c.push({role:`system`,content:r}),c.push(...i);let l={model:a,messages:c,max_tokens:n.maxTokens??4096,stream:o};if(n.temperature!==void 0&&(l.temperature=n.temperature),n.topP!==void 0&&(l.top_p=n.topP),n.enableThinking&&(l.enable_thinking=!0,n.thinkingBudget!==void 0&&(l.thinking_budget=n.thinkingBudget)),n.tool&&(l.tools=n.tool.map(e=>{try{return JSON.parse(e)}catch{let t=en(e,`utf-8`);return JSON.parse(t)}})),t.dryRun){M({request:l},s);return}if(o){let t=await e.client.request({path:x(),method:`POST`,body:l,stream:!0}),n=``,r=!1,i=s===`text`,a=process.stdout.isTTY,o=s===`json`?process.stderr:a?process.stdout:process.stderr,c=process.stdout,u=k(o);for await(let e of Ye(t)){if(e.data===`[DONE]`)break;try{let t=JSON.parse(e.data);for(let e of t.choices){let t=e.delta;t.reasoning_content&&(i&&!r&&(r=!0,o.write(u.dim(`Thinking:
19
+ `)}}),jr=w({description:`Generate a CLI access token using OpenAPI AK/SK`,auth:`none`,usageArgs:`--access-key-id <id> --access-key-secret <secret> --security-token <token>`,flags:{accessKeyId:{type:`string`,valueHint:`<id>`,description:`Alibaba Cloud Access Key ID`,required:!0},accessKeySecret:{type:`string`,valueHint:`<secret>`,description:`Alibaba Cloud Access Key Secret`,required:!0},securityToken:{type:`string`,valueHint:`<token>`,description:`Alibaba Cloud STS Security Token to store (optional)`}},exampleArgs:[`--access-key-id LTAIxxxxx --access-key-secret xxxxx --security-token <token>`],async run(e){let{identity:t,settings:n,flags:r}=e,i=T(n.output);M(await ge({identity:t,settings:n,baseUrl:e.client.baseUrl,accessKeyId:r.accessKeyId,accessKeySecret:r.accessKeySecret,securityToken:r.securityToken||void 0}),i)}});const Mr={model:{type:`string`,valueHint:`<model>`,description:`Model ID (default: qwen3.8-max)`},message:{type:`array`,valueHint:`<text>`,description:`Message text (repeatable, prefix role: to set role); or use --messages-file`},messagesFile:{type:`string`,valueHint:`<path>`,description:`JSON file with messages array (use - for stdin)`},system:{type:`string`,valueHint:`<text>`,description:`System prompt`},maxTokens:{type:`number`,valueHint:`<n>`,description:`Maximum tokens to generate (default: 4096)`},temperature:{type:`number`,valueHint:`<n>`,description:`Sampling temperature (0.0, 2.0]`},topP:{type:`number`,valueHint:`<n>`,description:`Nucleus sampling threshold`},stream:{type:`switch`,description:`Stream response tokens (default: on in TTY)`},tool:{type:`array`,valueHint:`<json-or-path>`,description:`Tool definition as JSON or file path (repeatable)`},enableThinking:{type:`switch`,description:`Enable thinking/reasoning mode (for qwen3/qwq models)`},thinkingBudget:{type:`number`,valueHint:`<n>`,description:`Max tokens for thinking (default: 4096)`}};function Nr(e){let t=[],n;if(e.system&&(n=e.system),e.messagesFile){let r=tt(e.messagesFile),i=JSON.parse(r);for(let e of i)e.role===`system`?n=typeof e.content==`string`?e.content:``:t.push(e)}if(e.message){let r=new Set([`system`,`user`,`assistant`]),i=e.message;for(let e of i){let i=e.indexOf(`:`),a=i===-1?``:e.slice(0,i);if(r.has(a)){let r=e.slice(i+1);a===`system`?n=r:t.push({role:a,content:r})}else t.push({role:`user`,content:e})}}return{system:n,messages:t}}var Pr=w({description:`Send a chat completion (OpenAI compatible, DashScope)`,auth:`apiKey`,usageArgs:`--message <text> [flags]`,flags:Mr,exampleArgs:[`--message "What is Qwen?"`,`--model qwen-max --system "You are a coding assistant." --message "Write fizzbuzz in Python"`,`--message "Hello" --message "assistant:Hi!" --message "How are you?"`,`--messages-file - --stream`,`--message "Hello" --output json`,`--model qwq-plus --message "Solve 1+1" --enable-thinking`],validate:e=>!e.message&&!e.messagesFile?`Provide --message or --messages-file.`:void 0,async run(e){let{settings:t,flags:n}=e,{system:r,messages:i}=Nr(n),a=n.model||t.defaultTextModel||`qwen3.8-max`,o=n.stream||process.stdout.isTTY,s=T(t.output),c=[];r&&c.push({role:`system`,content:r}),c.push(...i);let l={model:a,messages:c,max_tokens:n.maxTokens??4096,stream:o};if(n.temperature!==void 0&&(l.temperature=n.temperature),n.topP!==void 0&&(l.top_p=n.topP),n.enableThinking&&(l.enable_thinking=!0,n.thinkingBudget!==void 0&&(l.thinking_budget=n.thinkingBudget)),n.tool&&(l.tools=n.tool.map(e=>{try{return JSON.parse(e)}catch{let t=en(e,`utf-8`);return JSON.parse(t)}})),t.dryRun){M({request:l},s);return}if(o){let t=await e.client.request({path:x(),method:`POST`,body:l,stream:!0}),n=``,r=!1,i=s===`text`,a=process.stdout.isTTY,o=s===`json`?process.stderr:a?process.stdout:process.stderr,c=process.stdout,u=k(o);for await(let e of Ye(t)){if(e.data===`[DONE]`)break;try{let t=JSON.parse(e.data);for(let e of t.choices){let t=e.delta;t.reasoning_content&&(i&&!r&&(r=!0,o.write(u.dim(`Thinking:
20
20
  `))),i&&o.write(t.reasoning_content)),t.content&&(i&&r&&(o.write(`${u.reset}\n\nResponse:\n`),r=!1),n+=t.content,i&&c.write(t.content))}}catch{}}r&&o.write(u.reset),s===`json`?M({content:n},s):c.write(`
21
21
  `)}else{let n=await e.client.requestJson({path:x(),method:`POST`,body:l}),r=n.choices?.[0]?.message?.content??``;t.quiet||s===`text`?j(r):M(n,s)}}});const Fr=[{voice:`Tina`,name:`甜妹`,desc:`甜美亲切`,lang:`中文/英文`},{voice:`Dylan`,name:`北京-晓东`,desc:`胡同少年`,lang:`中文/北京`},{voice:`Kiki`,name:`粤语-阿清`,desc:`甜美港妹`,lang:`中文/英文`},{voice:`Li`,name:`南京-老李`,desc:`南京大叔`,lang:`中文/英文`},{voice:`Sunny`,name:`四川-晴儿`,desc:`甜飒川妹`,lang:`中文`},{voice:`Marcus`,name:`陕西-秦川`,desc:`陕北汉子`,lang:`中文/英文`},{voice:`Eric`,name:`四川-程川`,desc:`成都大哥`,lang:`中文/英文`},{voice:`Rocky`,name:`粤语-阿强`,desc:`幽默港仔`,lang:`中文/英文`},{voice:`Jennifer`,name:`詹妮弗`,desc:`美剧大女主`,lang:`中文/英文`},{voice:`Ryan`,name:`甜茶`,desc:`美剧张力男`,lang:`中文/英文`},{voice:`Katerina`,name:`卡捷琳娜`,desc:`御姐深情女`,lang:`中文/英文`},{voice:`Peter`,name:`天津-李彼得`,desc:`天津捧哏`,lang:`中文/英文`},{voice:`Ethan`,name:`晨煦`,desc:`北方口音男`,lang:`中文/英文`}];function Ir(){let e=(e,t)=>e.padEnd(t);process.stdout.write(`
22
22
  Omni output voices:
@@ -25,7 +25,7 @@ Omni output voices:
25
25
  `));else{let t={urls:e,saved:l,total:e.length};i&&(t.task_id=i),a&&a.length>1&&(t.task_ids=a),M(t,r)}}var Kr=w({description:`Edit an existing image with text instructions (Qwen-Image / Wan 2.7)`,auth:`apiKey`,usageArgs:`--image <url> --prompt <text> [flags]`,flags:{image:{type:`array`,valueHint:`<url>`,description:`Source image URL or local file path (repeatable for multi-image merge)`,required:!0},prompt:{type:`string`,valueHint:`<text>`,description:`Edit instruction text`,required:!0},model:{type:`string`,valueHint:`<model>`,description:`Model ID (default: qwen-image-2.0)`},size:{type:`string`,valueHint:`<W*H>`,description:`Output image size: ratio (3:4, 16:9) or pixels (2048*2048)`},n:{type:`number`,valueHint:`<count>`,description:`Number of images (default: 1, max: 6)`},seed:{type:`number`,valueHint:`<n>`,description:`Random seed for reproducible results`},negativePrompt:{type:`string`,valueHint:`<text>`,description:`Negative prompt to exclude unwanted content`},function:{type:`string`,valueHint:`<name>`,description:`wanx*-imageedit function (default: description_edit). Examples: stylization_all, description_edit`},promptExtend:{type:`boolean`,valueHint:`<bool>`,description:Tt},watermark:{type:`boolean`,valueHint:`<bool>`,description:Dt},outDir:{type:`string`,valueHint:`<dir>`,description:`Download images to directory`},outPrefix:{type:`string`,valueHint:`<prefix>`,description:`Filename prefix (default: edited)`},...e,...n,pollInterval:{type:`number`,valueHint:`<seconds>`,description:`Polling interval when waiting (default: 3)`}},exampleArgs:[`--image ./photo.png --prompt "Replace the background with a beach"`,`--image https://example.com/logo.png --prompt "Change color to blue" --n 3`,`--image ./a.png --image ./b.png --prompt "Merge two images into one collage"`,`--image https://example.com/photo.png --prompt "Remove the person" --model qwen-image-2.0-pro`,`--image ./photo.png --prompt "Change the style" --model wan2.7-image`,`--image ./photo.png --prompt "Place the subject on a table" --model wan2.5-i2i-preview`,`--image ./photo.png --prompt "转换成绘本风格" --model wanx2.1-imageedit --function stylization_all`,`--image ./photo.png --prompt "Replace the background with a beach" --watermark false`],async run(e){let{settings:n,flags:r}=e,i=[];Array.isArray(r.image)?i=r.image:typeof r.image==`string`&&(i=[r.image]);let o=r.prompt,s=r.model||n.defaultImageModel||`qwen-image-2.0`,c=ot(s),l=await Promise.all(i.map(t=>e.client.resolveImageInput(t,s))),u=r.n??1,d=at(r.promptExtend,c.promptExtendDefault,`prompt-extend`),f=lt(r.watermark),p={size:Ht(r.size,c.sizeProfile),n:u,seed:r.seed,prompt_extend:d,watermark:f},m;if(c.inputStyle===`function-base-image`){let e=l[0];if(!e)throw new t(`wanx*-imageedit requires at least one --image as base_image_url.`,a.USAGE);m={model:s,input:{function:r.function||`description_edit`,prompt:o,base_image_url:e},parameters:p}}else if(c.inputStyle===`prompt-images`)m={model:s,input:{prompt:o,images:l,negative_prompt:r.negativePrompt||void 0},parameters:p};else{let e=l.map(e=>({image:e}));e.push({text:o}),m={model:s,input:{messages:[{role:`user`,content:e}]},parameters:{...p,negative_prompt:r.negativePrompt||void 0}}}pt(m.parameters);let h=T(n.output);if(n.dryRun){let e=m;`messages`in m.input?e={...m,input:{messages:m.input.messages.map(e=>({...e,content:e.content.map(e=>e.image?{...e,image:D(e.image)}:e)}))}}:`images`in m.input?e={...m,input:{...m.input,images:m.input.images?.map(e=>D(e))}}:`base_image_url`in m.input&&(e={...m,input:{...m.input,base_image_url:D(m.input.base_image_url),mask_image_url:m.input.mask_image_url?D(m.input.mask_image_url):void 0}}),M({request:e,mode:c.useSync?`sync`:`async`,path:c.path},h);return}n.quiet||process.stderr.write(`[Model: ${s}] [Mode: ${c.useSync?`sync`:`async`}] [Images: ${l.length}]\n`);let g=Lt(r);c.useSync?await qr(e.client,n,c.path,m,r,h,g):await Jr(e.client,n,c.path,m,r,h,g)}});async function qr(e,n,r,i,o,s,c){let l=(await Ut(c,n,()=>e.requestJson({path:r,method:`POST`,body:i}))).flatMap(e=>e.output.choices||[]).flatMap(e=>e.message?.content||[]).map(e=>e.image).filter(Boolean);if(l.length===0)throw new t(`Edit completed but no images returned.`,a.GENERAL);await Yr(l,o,n,s)}async function Jr(e,n,r,i,o,s,c){let l=(await Ut(c,n,()=>e.requestJson({path:r,method:`POST`,body:i,async:!0}),`tasks`)).map(e=>e.output.task_id);if(o.async){M({task_ids:l},s);return}let u=o.pollInterval??3,d=l.map(t=>Bt(e,n,{url:e.url(O(t)),intervalSec:u,timeoutSec:n.timeout,isComplete:e=>e.output.task_status===`SUCCEEDED`,isFailed:e=>e.output.task_status===`FAILED`,getStatus:e=>e.output.task_status,getErrorMessage:e=>{let t=e.output;return t.message||t.code||void 0}})),f=await Promise.all(d),p=[];for(let e of f){if(e.output.choices){let t=e.output.choices.flatMap(e=>e.message?.content||[]).map(e=>e.image).filter(Boolean);p.push(...t)}if(e.output.results){let t=e.output.results.map(e=>e.url).filter(Boolean);t.length>0&&p.length===0&&p.push(...t)}}if(p.length===0)throw new t(`All tasks completed but no images returned.`,a.GENERAL);await Yr(p,o,n,s)}async function Yr(e,t,n,r){let i=ct(n,{flagDir:t.outDir,subDir:t.outDir?void 0:`images`}),a=t.outPrefix||_e(`edited`,t.prompt),o=await Nt(e.length>1?e.map((e,t)=>({url:e,destPath:F(i,`${a}_${String(t+1).padStart(3,`0`)}.png`)})):[{url:e[0],destPath:F(i,`${a}.png`)}],A,{quiet:n.quiet});n.quiet?j(o.join(`
26
26
  `)):M({urls:e,saved:o,total:e.length},r)}var Xr=w({description:`Generate a video from text or image (happyhorse-1.1-t2v / happyhorse-1.1-i2v / wan2.6-t2v)`,auth:`apiKey`,usageArgs:`--prompt <text> [--image <url>] [flags]`,flags:{model:{type:`string`,valueHint:`<model>`,description:`Model ID (default: happyhorse-1.1-t2v, or happyhorse-1.1-i2v with --image)`},prompt:{type:`string`,valueHint:`<text>`,description:`Video description`,required:!0},image:{type:`string`,valueHint:`<url>`,description:`Input image URL for image-to-video generation`},negativePrompt:{type:`string`,valueHint:`<text>`,description:`Negative prompt to exclude unwanted content`},resolution:{type:`string`,valueHint:`<res>`,description:`Resolution: 720P or 1080P (default: 1080P)`},ratio:{type:`string`,valueHint:`<ratio>`,description:`Aspect ratio (e.g. 16:9, 9:16, 1:1)`},duration:{type:`number`,valueHint:`<seconds>`,description:`Video duration in seconds (default: 5)`},promptExtend:{type:`boolean`,valueHint:`<bool>`,description:wt},watermark:{type:`boolean`,valueHint:`<bool>`,description:Dt},seed:{type:`number`,valueHint:`<n>`,description:`Random seed for reproducible generation`},download:{type:`string`,valueHint:`<path>`,description:`Save video to file on completion`},...e,...n,pollInterval:{type:`number`,valueHint:`<seconds>`,description:`Polling interval when waiting (default: 5)`}},exampleArgs:[`--prompt "A person reading a book, static shot"`,`--prompt "Ocean waves at sunset." --download sunset.mp4`,`--image https://example.com/cat.png --prompt "Make the cat in the scene move"`,`--prompt "Mountain landscape" --resolution 720P --duration 5`,`--prompt "A cat playing with a ball" --watermark false`],async run(e){let{settings:n,flags:r}=e,i=r.prompt,o=r.model||(r.image?n.defaultImageToVideoModel||`happyhorse-1.1-i2v`:n.defaultVideoModel||`happyhorse-1.1-t2v`),s=T(n.output),c=r.image,l;c&&(l=await e.client.resolveImageInput(c,o));let u=lt(r.watermark),d=at(r.promptExtend,void 0,`prompt-extend`),f={model:o,input:{prompt:i,negative_prompt:r.negativePrompt||void 0,...l?{media:[{type:`first_frame`,url:l}]}:{}},parameters:{resolution:r.resolution||void 0,ratio:r.ratio||void 0,duration:r.duration||void 0,prompt_extend:d,watermark:u,seed:r.seed}};if(n.dryRun){M({request:l?{...f,input:{...f.input,media:[{type:`first_frame`,url:D(l)}]}}:f},s);return}let p=(await Ut(Lt(r),n,()=>e.client.requestJson({path:xt(),method:`POST`,body:f,async:!0}),`tasks`)).map(e=>e.output.task_id);if(n.quiet||process.stderr.write(`[Model: ${o}]\n`),r.async){M(p.length===1?{task_id:p[0]}:{task_ids:p},s);return}let m=r.pollInterval??5,h=p.map(t=>{let r=e.client.url(O(t));return Bt(e.client,n,{url:r,intervalSec:m,timeoutSec:n.timeout,isComplete:e=>e.output.task_status===`SUCCEEDED`,isFailed:e=>e.output.task_status===`FAILED`,getStatus:e=>e.output.task_status,getErrorMessage:e=>{let t=e.output;return t.message||t.code||void 0}})}),g=await Promise.all(h),_=[];for(let e=0;e<g.length;e++){let t=g[e],n=t.output.video_url||t.output.results&&t.output.results[0]?.url;n&&_.push({taskId:p[e],videoUrl:n})}if(_.length===0)throw new t(`All tasks completed but no video URLs returned.`,a.GENERAL);if(r.download){let e=r.download,{size:t}=await A(_[0].videoUrl,e,{quiet:n.quiet});n.quiet?j(e):M({task_id:_[0].taskId,video_url:_[0].videoUrl,status:`SUCCEEDED`,saved:e,size:It(t)},s);return}let v=ct(n,{subDir:`videos`}),{join:y}=await import(`path`),b=[];await Promise.all(_.map(async({taskId:e,videoUrl:t})=>{let r=y(v,`${e}.mp4`);await A(t,r,{quiet:n.quiet}),b.push({task_id:e,video_url:t,saved:r})})),b.length===1?M(b[0],s):M({videos:b,total:b.length},s)}}),Zr=w({description:`Edit a video with happyhorse-1.0-video-edit (style transfer, object replacement, etc.)`,auth:`apiKey`,usageArgs:`--video <url> --prompt <text> [flags]`,flags:{model:{type:`string`,valueHint:`<model>`,description:`Model ID (default: happyhorse-1.0-video-edit)`},video:{type:`string`,valueHint:`<url>`,description:`Input video URL or local file (mp4/mov, 2-10s)`,required:!0},prompt:{type:`string`,valueHint:`<text>`,description:`Edit instruction (e.g. "Convert the scene to a claymation style")`},refImage:{type:`string`,valueHint:`<url>`,description:`Reference image URL (up to 4, comma-separated)`},negativePrompt:{type:`string`,valueHint:`<text>`,description:`Negative prompt to exclude unwanted content`},resolution:{type:`string`,valueHint:`<res>`,description:`Resolution: 720P or 1080P (default: 1080P)`},ratio:{type:`string`,valueHint:`<ratio>`,description:`Aspect ratio (16:9, 9:16, 1:1, 4:3, 3:4)`},duration:{type:`number`,valueHint:`<seconds>`,description:`Output video duration in seconds (2-10)`},audioSetting:{type:`string`,valueHint:`<mode>`,description:`Audio: auto (default) or origin (keep original)`,choices:[`auto`,`origin`]},promptExtend:{type:`boolean`,valueHint:`<bool>`,description:wt},watermark:{type:`boolean`,valueHint:`<bool>`,description:Dt},seed:{type:`number`,valueHint:`<n>`,description:`Random seed for reproducible generation`},download:{type:`string`,valueHint:`<path>`,description:`Save video to file on completion`},...e,...n,pollInterval:{type:`number`,valueHint:`<seconds>`,description:`Polling interval when waiting (default: 15)`}},exampleArgs:[`--video https://example.com/input.mp4 --prompt "Convert the entire scene to claymation style"`,`--video https://example.com/input.mp4 --prompt "Replace the outfit with the style shown in the image" --ref-image https://example.com/clothes.png`,`--video https://example.com/input.mp4 --prompt "Convert to anime style" --resolution 720P --download output.mp4`,`--video https://example.com/input.mp4 --prompt "Put clothes on the kitten in the video" --watermark false`],async run(e){let{settings:n,flags:r}=e,i=r.video,o=r.prompt,s=r.model||`happyhorse-1.0-video-edit`,c=T(n.output),l=[{type:`video`,url:await e.client.uploadFile(i,s)}],u=r.refImage;if(u){let t=u.split(`,`).map(e=>e.trim()).filter(Boolean);for(let n of t){let t=await e.client.uploadFile(n,s);l.push({type:`reference_image`,url:t})}}let d=at(r.promptExtend,void 0,`prompt-extend`),f=lt(r.watermark),p={model:s,input:{prompt:o||void 0,negative_prompt:r.negativePrompt||void 0,media:l},parameters:{resolution:r.resolution||void 0,ratio:r.ratio||void 0,duration:r.duration||void 0,audio_setting:r.audioSetting||void 0,prompt_extend:d,watermark:f,seed:r.seed}};if(n.dryRun){M({request:p},c);return}let m=(await Ut(Lt(r),n,()=>e.client.requestJson({path:xt(),method:`POST`,body:p,async:!0}),`tasks`)).map(e=>e.output.task_id);if(n.quiet||(process.stderr.write(`[Model: ${s}]\n`),process.stderr.write(`Note: Video editing typically takes 5-8 minutes. Please be patient.
27
27
  `)),r.async){M(m.length===1?{task_id:m[0]}:{task_ids:m},c);return}let h=r.pollInterval??15,g=Math.max(n.timeout,600),_=await Promise.all(m.map(t=>Bt(e.client,n,{url:e.client.url(O(t)),intervalSec:h,timeoutSec:g,isComplete:e=>e.output.task_status===`SUCCEEDED`,isFailed:e=>e.output.task_status===`FAILED`,getStatus:e=>e.output.task_status,getErrorMessage:e=>{let t=e.output;return t.message||t.code||void 0}}))),v=[];for(let e=0;e<_.length;e++){let t=_[e],n=t.output.video_url||t.output.results&&t.output.results[0]?.url;n&&v.push({taskId:m[e],videoUrl:n})}if(v.length===0)throw new t(`All tasks completed but no video URLs returned.`,a.GENERAL);if(r.download){let e=r.download,{size:t}=await A(v[0].videoUrl,e,{quiet:n.quiet});n.quiet?j(e):M({task_id:v[0].taskId,video_url:v[0].videoUrl,status:`SUCCEEDED`,saved:e,size:It(t)},c);return}let y=await import(`path`),b=ct(n,{subDir:`videos`}),x=[];await Promise.all(v.map(async({taskId:e,videoUrl:t})=>{let r=y.join(b,`${e}.mp4`);await A(t,r,{quiet:n.quiet}),x.push({task_id:e,video_url:t,saved:r})})),x.length===1?M(x[0],c):M({videos:x,total:x.length},c)}}),Qr=w({description:`Reference-to-video generation (happyhorse-1.1-r2v / wan2.6-r2v): multi-subject, multi-shot with voice`,auth:`apiKey`,usageArgs:`--prompt <text> --image <url>... [--ref-video <url>...] [flags]`,flags:{model:{type:`string`,valueHint:`<model>`,description:`Model ID (default: happyhorse-1.1-r2v)`},prompt:{type:`string`,valueHint:`<text>`,description:`Video description with reference markers (image1, video1, etc.)`,required:!0},image:{type:`array`,valueHint:`<url>`,description:`Reference image URL or local file (repeatable for multiple subjects)`},refVideo:{type:`array`,valueHint:`<url>`,description:`Reference video URL or local file (repeatable)`},imageVoice:{type:`array`,valueHint:`<url>`,description:`Voice URL for corresponding image (pairs by position)`},videoVoice:{type:`array`,valueHint:`<url>`,description:`Voice URL for corresponding ref-video (pairs by position)`},resolution:{type:`string`,valueHint:`<res>`,description:`Resolution: 720P or 1080P (default: 1080P)`},ratio:{type:`string`,valueHint:`<ratio>`,description:`Aspect ratio (16:9, 9:16, 1:1)`},duration:{type:`number`,valueHint:`<seconds>`,description:`Video duration in seconds (default: 5)`},promptExtend:{type:`boolean`,valueHint:`<bool>`,description:wt},watermark:{type:`boolean`,valueHint:`<bool>`,description:Dt},seed:{type:`number`,valueHint:`<n>`,description:`Random seed for reproducible generation`},download:{type:`string`,valueHint:`<path>`,description:`Save video to file on completion`},...e,...n,pollInterval:{type:`number`,valueHint:`<seconds>`,description:`Polling interval when waiting (default: 15)`}},exampleArgs:[`--prompt "Image1 running on the grass" --image person.jpg`,`--prompt "Video 1 plays guitar, Image 1 walks over" --ref-video scene.mp4 --image person.jpg`,`--prompt "Image 1 speaks" --image person.jpg --image-voice voice.mp3 --resolution 1080P`,`--prompt "Image 1 and Image 2 have a conversation" --image a.jpg --image b.jpg --image-voice va.mp3 --image-voice vb.mp3`,`--prompt "Image 1 drinks water" --image person.jpg --watermark false`],validate:e=>!e.image?.length&&!e.refVideo?.length?`Provide at least one --image or --ref-video.`:void 0,async run(e){let{settings:n,flags:r}=e,i=r.prompt,o=r.image||[],s=r.refVideo||[],c=r.imageVoice||[],l=r.videoVoice||[],u=r.model||n.defaultReferenceToVideoModel||`happyhorse-1.1-r2v`,d=T(n.output),f=[];for(let t=0;t<o.length;t++){let n={type:`reference_image`,url:await e.client.resolveImageInput(o[t],u)};c[t]&&(n.reference_voice=await e.client.uploadFile(c[t],u)),f.push(n)}for(let t=0;t<s.length;t++){let n={type:`reference_video`,url:await e.client.uploadFile(s[t],u)};l[t]&&(n.reference_voice=await e.client.uploadFile(l[t],u)),f.push(n)}let p=at(r.promptExtend,void 0,`prompt-extend`),m=lt(r.watermark),h={model:u,input:{prompt:i,media:f},parameters:{resolution:r.resolution||void 0,ratio:r.ratio||void 0,duration:r.duration||void 0,prompt_extend:p,watermark:m,seed:r.seed}};if(n.dryRun){M({request:{...h,input:{...h.input,media:h.input.media.map(e=>({...e,url:D(e.url),reference_voice:e.reference_voice?D(e.reference_voice):void 0}))}}},d);return}let g=(await Ut(Lt(r),n,()=>e.client.requestJson({path:xt(),method:`POST`,body:h,async:!0}),`tasks`)).map(e=>e.output.task_id);if(n.quiet||(process.stderr.write(`[Model: ${u}]\n`),process.stderr.write(`Note: Reference-to-video typically takes 5-10 minutes. Please be patient.
28
- `)),r.async){M(g.length===1?{task_id:g[0]}:{task_ids:g},d);return}let _=r.pollInterval??15,v=Math.max(n.timeout,600),y=await Promise.all(g.map(t=>Bt(e.client,n,{url:e.client.url(O(t)),intervalSec:_,timeoutSec:v,isComplete:e=>e.output.task_status===`SUCCEEDED`,isFailed:e=>e.output.task_status===`FAILED`,getStatus:e=>e.output.task_status,getErrorMessage:e=>{let t=e.output;return t.message||t.code||void 0}}))),b=[];for(let e=0;e<y.length;e++){let t=y[e],n=t.output.video_url||t.output.results&&t.output.results[0]?.url;n&&b.push({taskId:g[e],videoUrl:n})}if(b.length===0)throw new t(`All tasks completed but no video URLs returned.`,a.GENERAL);if(r.download){let e=r.download,{size:t}=await A(b[0].videoUrl,e,{quiet:n.quiet});n.quiet?j(e):M({task_id:b[0].taskId,video_url:b[0].videoUrl,status:`SUCCEEDED`,saved:e,size:It(t)},d);return}let{join:x}=await import(`path`),S=ct(n,{subDir:`videos`}),C=[];await Promise.all(b.map(async({taskId:e,videoUrl:t})=>{let r=x(S,`${e}.mp4`);await A(t,r,{quiet:n.quiet}),C.push({task_id:e,video_url:t,saved:r})})),C.length===1?M(C[0],d):M({videos:C,total:C.length},d)}}),$r=w({description:`Query async task status`,auth:`apiKey`,usageArgs:`--task-id <id>`,flags:{taskId:{type:`string`,valueHint:`<id>`,description:`Async task ID`,required:!0}},exampleArgs:[`--task-id 3b256896-3e70-xxxx-xxxx-xxxxxxxxxxxx`,`--task-id 3b256896-3e70-xxxx --output json`],async run(e){let{settings:t,flags:n}=e,r=n.taskId,i=T(t.output);if(t.dryRun){M({task_id:r},i);return}let a=await e.client.requestJson({path:O(r)});if(t.quiet){j(a.output.task_status);return}M({task_id:a.output.task_id,task_status:a.output.task_status,video_url:a.output.video_url,results:a.output.results,submit_time:a.output.submit_time,end_time:a.output.end_time},i)}}),ei=w({description:`Download a completed video by task ID`,auth:`apiKey`,usageArgs:`--task-id <id> --out <path>`,flags:{taskId:{type:`string`,valueHint:`<id>`,description:`Task ID to download from`,required:!0},out:{type:`string`,valueHint:`<path>`,description:`Output file path`,required:!0}},exampleArgs:[`--task-id 3b256896-xxxx --out video.mp4`,`--task-id 3b256896-xxxx --out video.mp4 --quiet`],async run(e){let{settings:n,flags:r}=e,i=r.taskId,o=r.out,s=T(n.output);if(n.dryRun){M({task_id:i,action:`download`,out:o},s);return}let c=await e.client.requestJson({path:O(i)});if(c.output.task_status!==`SUCCEEDED`)throw new t(`Task is not complete (status: ${c.output.task_status}).`,a.GENERAL,`Wait for the task to complete before downloading.`);let l=c.output.video_url||c.output.results&&c.output.results[0]?.url;if(!l)throw new t(`No download URL available for this task.`,a.GENERAL);let{size:u}=await A(l,o,{quiet:n.quiet});if(n.quiet){j(o);return}M({saved:o,size:It(u)},s)}});const ti=new Set([`.mp4`,`.mov`,`.avi`,`.mkv`,`.webm`,`.flv`,`.wmv`]);function ni(e){let t=sn(e).toLowerCase().split(`?`)[0];return!!(ti.has(t)||/\.(mp4|mov|avi|mkv|webm|flv|wmv)(\?|$)/i.test(e))}async function ri(e){return e.startsWith(`data:`)||e.startsWith(`http://`)||e.startsWith(`https://`)||e.startsWith(`oss://`)?e:Ee(e)}var ii=w({description:`Describe an image or video using Qwen-VL`,auth:`apiKey`,usageArgs:`--image <path-or-url> [--video <url>] [--prompt <text>]`,flags:{image:{type:`string`,valueHint:`<path-or-url>`,description:`Local image path or URL`},video:{type:`array`,valueHint:`<url>`,description:`Video file URL or local path (mp4/mov/avi/mkv/webm)`},prompt:{type:`string`,valueHint:`<text>`,description:`Question about the content (default: auto-detected)`},model:{type:`string`,valueHint:`<model>`,description:`Vision model (default: qwen3-vl-plus)`}},exampleArgs:[`--image photo.jpg`,`--image https://example.com/photo.jpg --prompt "What breed is this dog?"`,`--video https://example.com/video.mp4 --prompt "Summarize the video content"`,`--video ./local-video.mp4`,`--image photo.png --prompt "Extract the text" --model qwen3-vl-plus`],validate:e=>!e.image&&!e.video?.length?`Provide --image or --video.`:void 0,async run(e){let{settings:n,flags:r}=e,i=r.image,o=r.video??[],s=r.model||(e.client.usesTokenPlanEndpoint()?n.defaultTextModel:void 0)||`qwen3-vl-plus`;i&&ni(i)&&(o.push(i),i=void 0);let c=o.length>0?`Describe the video.`:`Describe the image.`,l=r.prompt||c,u=T(n.output);if(n.dryRun){M({request:{prompt:l,image:i?D(i):void 0,video:o.length?o.map(D):void 0,model:s}},u);return}let d=[];if(o.length>0)for(let n of o){let r=n;if(De(n)){if(!Qt(n))throw new t(`Video file not found: ${n}`,a.USAGE);r=await e.client.uploadFile(n,s)}d.push({type:`video_url`,video_url:{url:r}})}if(i){let t=await ri(i),n=t;De(i)&&t.startsWith(`data:`)&&nn(i).size>5*1024*1024&&(n=await e.client.resolveImageInput(i,s)),d.push({type:`image_url`,image_url:{url:n}})}d.push({type:`text`,text:l});let f={model:s,messages:[{role:`user`,content:d}]},p=await e.client.requestJson({path:x(),method:`POST`,body:f}),m=p.choices?.[0]?.message?.content;if(u!==`text`){M(p,u);return}j(m||``)}});const ai=[`base_url`,`output`,`output_dir`,`timeout`,`api_key`,`access_token`,`access_key_id`,`access_key_secret`,`security_token`,`default_text_model`,`default_video_model`,`default_image_to_video_model`,`default_reference_to_video_model`,`default_image_model`,`default_speech_model`,`default_omni_model`,`workspace_id`],oi=new Set([`api_key`,`access_token`,`access_key_id`,`access_key_secret`,`security_token`]),si=[`console_site`,`console_region`,`console_switch_agent`,`telemetry`],ci=[...ai,...si],li={output:[`text`,`json`],console_site:[`domestic`,`international`]},ui=new Set([`telemetry`]),di={default_text_model:`qwen3.7-max`,default_image_model:`qwen-image-2.0`,default_video_model:`happyhorse-1.1-t2v`,default_speech_model:`cosyvoice-v3-flash`,default_omni_model:`qwen3.5-omni-plus`},fi={default_text_model:[{id:`qwen3.7-max`,role:`text/chat default`},{id:`qwen3-coder-plus`,role:`coding-oriented (agent config)`},{id:`qwen-flash`,role:`fast · advisor ranking`},{id:`qwen3.6-flash`,role:`fast · advisor intent`}],default_image_model:[{id:`qwen-image-2.0`,role:`image/generate default · sync`},{id:`qwen-image-max`,role:`image/generate · sync`},{id:`qwen-image-edit-2.0`,role:`image/edit · sync`},{id:`wanx2.x`,role:`image/generate · async series`}],default_video_model:[{id:`happyhorse-1.1-t2v`,role:`video/generate default · text-to-video`},{id:`happyhorse-1.1-i2v`,role:`video/generate · image-to-video`}],default_speech_model:[{id:`cosyvoice-v3-flash`,role:`speech/synthesize (TTS) default`},{id:`fun-asr`,role:`speech/recognize (ASR)`}],default_omni_model:[{id:`qwen3.5-omni-plus`,role:`omni/chat default`},{id:`qwen3-vl-plus`,role:`vision/describe · multimodal input`}]},pi={"base-url":`base_url`,"output-dir":`output_dir`,"api-key":`api_key`,"access-token":`access_token`,"access-key-id":`access_key_id`,"access-key-secret":`access_key_secret`,"security-token":`security_token`,"default-text-model":`default_text_model`,"default-video-model":`default_video_model`,"default-image-to-video-model":`default_image_to_video_model`,"default-reference-to-video-model":`default_reference_to_video_model`,"default-image-model":`default_image_model`,"default-speech-model":`default_speech_model`,"default-omni-model":`default_omni_model`,"workspace-id":`workspace_id`};function mi(e){return pi[e]||e}function hi(e,n){let r=mi(e);if(!ai.includes(r))throw new t(`Invalid config key "${e}". Valid keys: ${ai.join(`, `)}`,a.USAGE);if(r===`output`&&![`text`,`json`].includes(n))throw new t(`Invalid output format "${n}". Valid values: text, json`,a.USAGE);if(r===`timeout`){let e=Number(n);if(isNaN(e)||e<=0)throw new t(`Invalid timeout "${n}". Must be a positive number.`,a.USAGE);return e}return r===`base_url`?qe(n):n}function gi(e,n){let r=mi(e);if(ai.includes(r))return hi(e,n);if(r===`console_site`){if(![`domestic`,`international`].includes(n))throw new t(`Invalid console_site "${n}". Valid values: domestic, international`,a.USAGE);return n}if(r===`console_region`)return n;if(r===`console_switch_agent`){let e=Number(n);if(!Number.isFinite(e)||e<=0)throw new t(`Invalid console_switch_agent "${n}". Must be a positive number.`,a.USAGE);return e}if(r===`telemetry`){if(n!==`true`&&n!==`false`)throw new t(`Invalid telemetry "${n}". Valid values: true, false`,a.USAGE);return n===`true`}throw new t(`Invalid config key "${e}". Valid keys: ${ci.join(`, `)}`,a.USAGE)}var _i=w({description:`Display current configuration`,auth:`none`,exampleArgs:[``,`--output json`],async run(e){let{settings:t,client:n}=e,r=e.configStore,i=r.read(),a=T(t.output),o={...i,base_url:n.baseUrl,output:t.output,timeout:t.timeout,config:t.configName??`default`,config_file:r.path};for(let e of oi)typeof o[e]==`string`&&(o[e]=E(o[e]));M(o,a)}}),vi=w({description:`Set a config value`,auth:`none`,usageArgs:`--key <key> --value <value>`,flags:{key:{type:`string`,valueHint:`<key>`,description:`Config key (base_url, output, output_dir, timeout, api_key, access_token, access_key_id, access_key_secret, security_token, default_*_model, workspace_id)`,required:!0},value:{type:`string`,valueHint:`<value>`,description:`Value to set`,required:!0}},exampleArgs:[`--key output --value json`,`--key timeout --value 600`,`--key base_url --value https://dashscope.aliyuncs.com`],async run(e){let{settings:t,flags:n}=e,r=n.key,i=n.value,a=mi(r),o=hi(r,i),s=T(t.output);if(t.dryRun){M({would_set:{[a]:o},config:t.configName??`default`,config_file:e.configStore.path},s);return}if(await e.configStore.write({[a]:o}),!t.quiet){let n=oi.has(a)?E(String(o)):o;M({[a]:n,config:t.configName??`default`,config_file:e.configStore.path},s)}}}),yi=w({description:`List config profiles and show the active profile`,auth:`none`,exampleArgs:[``,`--output json`],async run(e){let t=e.configStore.profiles(),n=[`default`,...Object.keys(t.named).sort()],r=T(e.settings.output);if(r===`json`){M({active_config:t.active,profiles:n,config_file:e.configStore.path},r);return}let i=Math.max(4,...n.map(e=>e.length));j(`${`NAME`.padEnd(i)} ACTIVE`);for(let e of n)j(`${e.padEnd(i)} ${e===t.active?`*`:``}`)}}),bi=w({description:`Set the active config profile`,auth:`none`,usageArgs:`--name <name>`,flags:{name:{type:`string`,valueHint:`<name>`,description:`Existing profile name, or default`,required:!0}},exampleArgs:[`--name token-plan`,`--name default`],async run(e){let t=T(e.settings.output);if(e.settings.dryRun){M({would_activate:e.configStore.validateActivation(e.flags.name),config_file:e.configStore.path},t);return}let n=await e.configStore.activate(e.flags.name);e.settings.quiet||M({active_config:n,config_file:e.configStore.path},t)}});function V(e){try{return un(e,`utf-8`)}catch{return}}function H(e){let t=V(e);if(t!==void 0)try{let e=JSON.parse(t);return e&&typeof e==`object`&&!Array.isArray(e)?e:void 0}catch{return}}function U(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:void 0}function xi(e){let t=/^---\s*\n([\s\S]*?)\n---/.exec(e);if(!t)return{};try{return U(xn.parse(t[1]))??{}}catch{return{}}}function Si(e,t=500){let n=0,r=e=>{if(n>=t)return;let i;try{i=dn(e,{withFileTypes:!0})}catch{return}for(let a of i){if(n>=t)return;let i=L(e,a.name);a.isDirectory()?r(i):n+=1}};return r(e),n}function Ci(e){return[{source:`global`,dir:L(e,`.agents`,`skills`)},{source:`claude-code`,dir:L(e,`.claude`,`skills`)},{source:`cursor`,dir:L(e,`.cursor`,`skills`)},{source:`qwen-code`,dir:L(e,`.qwen`,`skills`)},{source:`codex`,dir:L(e,`.codex`,`skills`)},{source:`opencode`,dir:L(e,`.config`,`opencode`,`skills`)},{source:`openclaw`,dir:L(e,`.openclaw`,`skills`)},{source:`openclaw`,dir:L(e,`.openclaw`,`workspace`,`skills`)},{source:`hermes`,dir:L(e,`.hermes`,`skills`)},{source:`gemini`,dir:L(e,`.gemini`,`skills`)},{source:`antigravity`,dir:L(e,`.gemini`,`antigravity`,`skills`)},{source:`windsurf`,dir:L(e,`.windsurf`,`skills`)},{source:`windsurf`,dir:L(e,`.codeium`,`windsurf`,`skills`)},{source:`qoderwork`,dir:L(e,`.qoderwork`,`skills`)},{source:`workbuddy`,dir:L(e,`.workbuddy`,`skills`)}]}function wi(e=z()){let t=new Map;for(let{source:n,dir:r}of Ci(e)){let e;try{e=dn(r,{withFileTypes:!0})}catch{continue}for(let i of e){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let e=L(r,i.name),a=L(e,`SKILL.md`);if(!I(a))continue;let o=t.get(i.name);if(o){o.sources.includes(n)||o.sources.push(n);continue}let s=xi(V(a)??``),c=U(s.metadata),l=typeof s.description==`string`?s.description.trim():``,u=c&&typeof c.version==`string`?c.version:typeof s.version==`string`?s.version:void 0;t.set(i.name,{id:i.name,name:typeof s.name==`string`&&s.name?s.name:i.name,description:l,version:u,fileCount:Si(e),path:e,sources:[n],origin:`local`})}}return[...t.values()].sort((e,t)=>e.name.localeCompare(t.name))}function Ti(e,t=z()){let n=wi(t).find(t=>t.id===e);if(!n)return null;let r=V(L(n.path,`SKILL.md`))??``;return{...n,content:r}}const Ei=[{source:`global`,label:`All agents (~/.agents/skills)`,sub:[`.agents`,`skills`]},{source:`claude-code`,label:`Claude Code`,sub:[`.claude`,`skills`]},{source:`qwen-code`,label:`Qwen Code`,sub:[`.qwen`,`skills`]},{source:`codex`,label:`Codex`,sub:[`.codex`,`skills`]},{source:`opencode`,label:`OpenCode`,sub:[`.config`,`opencode`,`skills`]},{source:`openclaw`,label:`OpenClaw`,sub:[`.openclaw`,`skills`]},{source:`qoderwork`,label:`QoderWork`,sub:[`.qoderwork`,`skills`]},{source:`windsurf`,label:`Windsurf`,sub:[`.codeium`,`windsurf`,`skills`]},{source:`gemini`,label:`Gemini`,sub:[`.gemini`,`skills`]}];function Di(e,t){let n=Ei.find(t=>t.source===e);return n?L(t,...n.sub):null}function Oi(e){let t=-1,n=Math.max(0,e.length-22-65535);for(let r=e.length-22;r>=n;r--)if(e.readUInt32LE(r)===101010256){t=r;break}if(t<0)throw Error(`Not a valid .zip archive.`);let r=e.readUInt16LE(t+10),i=e.readUInt32LE(t+16),a=[];for(let t=0;t<r&&!(i+46>e.length||e.readUInt32LE(i)!==33639248);t++){let t=e.readUInt16LE(i+10),n=e.readUInt32LE(i+20),r=e.readUInt16LE(i+28),o=e.readUInt16LE(i+30),s=e.readUInt16LE(i+32),c=e.readUInt32LE(i+42),l=e.toString(`utf8`,i+46,i+46+r);if(i+=46+r+o+s,l.endsWith(`/`)||c+30>e.length||e.readUInt32LE(c)!==67324752)continue;let u=e.readUInt16LE(c+26),d=e.readUInt16LE(c+28),f=c+30+u+d,p=e.subarray(f,f+n),m;if(t===0)m=Buffer.from(p);else if(t===8)m=bn(p);else throw Error(`Unsupported compression in archive (entry: `+l+`).`);a.push({name:l,data:m})}return a}function ki(e,t,n,r=z()){let i=Di(e,r);if(!i)throw Error(`Unknown skill install target.`);let a=Oi(t).map(e=>({name:e.name.replace(/\\/g,`/`).replace(/^\.\//,``).replace(/^\/+/,``),data:e.data})).filter(e=>e.name&&!e.name.endsWith(`/`)&&!e.name.split(`/`).includes(`..`));if(!a.length)throw Error(`The archive contains no usable files.`);let o=a.find(e=>e.name===`SKILL.md`||e.name.endsWith(`/SKILL.md`));if(!o)throw Error(`No SKILL.md found in the archive (root or a top-level folder).`);let s=o.name.lastIndexOf(`/`),c,l;if(s<0){if(c=(n||``).trim(),!c)throw Error(`SKILL.md is at the archive root — please provide a skill name.`);l=``}else l=o.name.slice(0,s+1),c=(n||``).trim()||l.split(`/`)[0];if(!/^[A-Za-z0-9._-]+$/.test(c))throw Error(`Invalid skill name: `+c);let u=L(i,c),d=R(u),f=0;for(let e of a){let t=e.name;if(l){if(!e.name.startsWith(l))continue;t=e.name.slice(l.length)}if(!t)continue;let n=R(L(u,t));n!==d&&!n.startsWith(d+yn)||(ln(gn(n),{recursive:!0}),mn(n,e.data),f++)}if(f===0)throw Error(`Nothing was extracted from the archive.`);return{installed:c,files:f,dir:u}}function Ai(e){if(typeof e.command==`string`){let t=Array.isArray(e.args)?e.args.join(` `):``;return{transport:`stdio`,detail:`${e.command} ${t}`.trim()}}let t=typeof e.url==`string`?e.url:void 0;return t?{transport:(typeof e.type==`string`?e.type.toLowerCase():``)===`sse`?`sse`:`http`,detail:t}:{transport:`unknown`,detail:``}}function W(e,t,n,r,i){let a=U(e);if(a)for(let[e,o]of Object.entries(a)){let a=U(o)??{},{transport:s,detail:c}=Ai(a);r.push({name:e,source:t,transport:s,detail:c,scope:n,origin:`local`,config:Hi(a),editable:i})}}function ji(e=z()){let t=[],n=H(L(e,`.claude.json`));if(n){W(n.mcpServers,`claude-code`,`global`,t,!0);let e=U(n.projects);if(e)for(let[n,r]of Object.entries(e)){let e=U(r);e?.mcpServers&&W(e.mcpServers,`claude-code`,n,t,!0)}}let r=H(L(e,`.qwen`,`settings.json`));r&&W(r.mcpServers,`qwen-code`,`global`,t,!0);let i=H(L(e,`.config`,`opencode`,`opencode.json`));i&&W(i.mcp,`opencode`,`global`,t,!0);let a=H(L(e,`.cursor`,`mcp.json`));a&&W(a.mcpServers,`cursor`,`global`,t,!0);let o=H(L(e,`.codeium`,`windsurf`,`mcp_config.json`));o&&W(o.mcpServers,`windsurf`,`global`,t,!0);let s=H(L(e,`.gemini`,`settings.json`));s&&W(s.mcpServers,`gemini`,`global`,t,!0);let c=H(L(e,`.qoderwork`,`mcp.json`));c&&W(c.mcpServers,`qoderwork`,`global`,t,!0);let l=H(L(e,`.openclaw`,`openclaw.json`));l&&W(l.mcpServers,`openclaw`,`global`,t,!0);let u=H(Mi(e));u&&W(u.mcpServers,`claude-desktop`,`global`,t,!0);let d=V(L(e,`.codex`,`config.toml`));if(d)try{W(Sn(d).mcp_servers,`codex`,`global`,t,!1)}catch{}return t.sort((e,t)=>e.name.localeCompare(t.name)||e.source.localeCompare(t.source))}function Mi(e){return process.platform===`darwin`?L(e,`Library`,`Application Support`,`Claude`,`claude_desktop_config.json`):process.platform===`win32`?L(process.env.APPDATA??L(e,`AppData`,`Roaming`),`Claude`,`claude_desktop_config.json`):L(e,`.config`,`Claude`,`claude_desktop_config.json`)}function Ni(e,t,n){return e===`claude-code`?{file:L(n,`.claude.json`),mapKey:`mcpServers`,projectScoped:t!==`global`}:e===`qwen-code`?{file:L(n,`.qwen`,`settings.json`),mapKey:`mcpServers`,projectScoped:!1}:e===`opencode`?{file:L(n,`.config`,`opencode`,`opencode.json`),mapKey:`mcp`,projectScoped:!1}:e===`cursor`?{file:L(n,`.cursor`,`mcp.json`),mapKey:`mcpServers`,projectScoped:!1}:e===`windsurf`?{file:L(n,`.codeium`,`windsurf`,`mcp_config.json`),mapKey:`mcpServers`,projectScoped:!1}:e===`gemini`?{file:L(n,`.gemini`,`settings.json`),mapKey:`mcpServers`,projectScoped:!1}:e===`qoderwork`?{file:L(n,`.qoderwork`,`mcp.json`),mapKey:`mcpServers`,projectScoped:!1}:e===`openclaw`?{file:L(n,`.openclaw`,`openclaw.json`),mapKey:`mcpServers`,projectScoped:!1}:e===`claude-desktop`?{file:Mi(n),mapKey:`mcpServers`,projectScoped:!1}:null}function Pi(e,t){if(typeof e==`string`){if(e.includes(`•`)){if(typeof t==`string`)return t;throw Error(`Replace masked values (•••) with the real value before saving.`)}return e}if(Array.isArray(e)){let n=Array.isArray(t)?t:[];return e.map((e,t)=>Pi(e,n[t]))}let n=U(e);if(n){let e=U(t)??{},r={};for(let[t,i]of Object.entries(n))r[t]=Pi(i,e[t]);return r}return e}function Fi(e,t,n,r,i=z()){let a=Ni(e,t,i);if(!a)throw Error(`This MCP source is read-only and cannot be edited here.`);let o=n.trim();if(!o)throw Error(`Server name is required.`);let s=U(r);if(!s)throw Error(`Config must be a JSON object.`);let c=H(a.file)??{},l=c;if(a.projectScoped){let e=U(c.projects)??{};c.projects=e;let n=U(e[t])??{};e[t]=n,l=n}let u=U(l[a.mapKey])??{};l[a.mapKey]=u,u[o]=Pi(s,U(u[o])),ln(gn(a.file),{recursive:!0}),mn(a.file,JSON.stringify(c,null,2)+`
28
+ `)),r.async){M(g.length===1?{task_id:g[0]}:{task_ids:g},d);return}let _=r.pollInterval??15,v=Math.max(n.timeout,600),y=await Promise.all(g.map(t=>Bt(e.client,n,{url:e.client.url(O(t)),intervalSec:_,timeoutSec:v,isComplete:e=>e.output.task_status===`SUCCEEDED`,isFailed:e=>e.output.task_status===`FAILED`,getStatus:e=>e.output.task_status,getErrorMessage:e=>{let t=e.output;return t.message||t.code||void 0}}))),b=[];for(let e=0;e<y.length;e++){let t=y[e],n=t.output.video_url||t.output.results&&t.output.results[0]?.url;n&&b.push({taskId:g[e],videoUrl:n})}if(b.length===0)throw new t(`All tasks completed but no video URLs returned.`,a.GENERAL);if(r.download){let e=r.download,{size:t}=await A(b[0].videoUrl,e,{quiet:n.quiet});n.quiet?j(e):M({task_id:b[0].taskId,video_url:b[0].videoUrl,status:`SUCCEEDED`,saved:e,size:It(t)},d);return}let{join:x}=await import(`path`),S=ct(n,{subDir:`videos`}),C=[];await Promise.all(b.map(async({taskId:e,videoUrl:t})=>{let r=x(S,`${e}.mp4`);await A(t,r,{quiet:n.quiet}),C.push({task_id:e,video_url:t,saved:r})})),C.length===1?M(C[0],d):M({videos:C,total:C.length},d)}}),$r=w({description:`Query async task status`,auth:`apiKey`,usageArgs:`--task-id <id>`,flags:{taskId:{type:`string`,valueHint:`<id>`,description:`Async task ID`,required:!0}},exampleArgs:[`--task-id 3b256896-3e70-xxxx-xxxx-xxxxxxxxxxxx`,`--task-id 3b256896-3e70-xxxx --output json`],async run(e){let{settings:t,flags:n}=e,r=n.taskId,i=T(t.output);if(t.dryRun){M({task_id:r},i);return}let a=await e.client.requestJson({path:O(r)});if(t.quiet){j(a.output.task_status);return}M({task_id:a.output.task_id,task_status:a.output.task_status,video_url:a.output.video_url,results:a.output.results,submit_time:a.output.submit_time,end_time:a.output.end_time},i)}}),ei=w({description:`Download a completed video by task ID`,auth:`apiKey`,usageArgs:`--task-id <id> --out <path>`,flags:{taskId:{type:`string`,valueHint:`<id>`,description:`Task ID to download from`,required:!0},out:{type:`string`,valueHint:`<path>`,description:`Output file path`,required:!0}},exampleArgs:[`--task-id 3b256896-xxxx --out video.mp4`,`--task-id 3b256896-xxxx --out video.mp4 --quiet`],async run(e){let{settings:n,flags:r}=e,i=r.taskId,o=r.out,s=T(n.output);if(n.dryRun){M({task_id:i,action:`download`,out:o},s);return}let c=await e.client.requestJson({path:O(i)});if(c.output.task_status!==`SUCCEEDED`)throw new t(`Task is not complete (status: ${c.output.task_status}).`,a.GENERAL,`Wait for the task to complete before downloading.`);let l=c.output.video_url||c.output.results&&c.output.results[0]?.url;if(!l)throw new t(`No download URL available for this task.`,a.GENERAL);let{size:u}=await A(l,o,{quiet:n.quiet});if(n.quiet){j(o);return}M({saved:o,size:It(u)},s)}});const ti=new Set([`.mp4`,`.mov`,`.avi`,`.mkv`,`.webm`,`.flv`,`.wmv`]);function ni(e){let t=sn(e).toLowerCase().split(`?`)[0];return!!(ti.has(t)||/\.(mp4|mov|avi|mkv|webm|flv|wmv)(\?|$)/i.test(e))}async function ri(e){return e.startsWith(`data:`)||e.startsWith(`http://`)||e.startsWith(`https://`)||e.startsWith(`oss://`)?e:Ee(e)}var ii=w({description:`Describe an image or video using Qwen-VL`,auth:`apiKey`,usageArgs:`--image <path-or-url> [--video <url>] [--prompt <text>]`,flags:{image:{type:`string`,valueHint:`<path-or-url>`,description:`Local image path or URL`},video:{type:`array`,valueHint:`<url>`,description:`Video file URL or local path (mp4/mov/avi/mkv/webm)`},prompt:{type:`string`,valueHint:`<text>`,description:`Question about the content (default: auto-detected)`},model:{type:`string`,valueHint:`<model>`,description:`Vision model (default: qwen3-vl-plus)`}},exampleArgs:[`--image photo.jpg`,`--image https://example.com/photo.jpg --prompt "What breed is this dog?"`,`--video https://example.com/video.mp4 --prompt "Summarize the video content"`,`--video ./local-video.mp4`,`--image photo.png --prompt "Extract the text" --model qwen3-vl-plus`],validate:e=>!e.image&&!e.video?.length?`Provide --image or --video.`:void 0,async run(e){let{settings:n,flags:r}=e,i=r.image,o=r.video??[],s=r.model||(e.client.usesTokenPlanEndpoint()?n.defaultTextModel:void 0)||`qwen3-vl-plus`;i&&ni(i)&&(o.push(i),i=void 0);let c=o.length>0?`Describe the video.`:`Describe the image.`,l=r.prompt||c,u=T(n.output);if(n.dryRun){M({request:{prompt:l,image:i?D(i):void 0,video:o.length?o.map(D):void 0,model:s}},u);return}let d=[];if(o.length>0)for(let n of o){let r=n;if(De(n)){if(!Qt(n))throw new t(`Video file not found: ${n}`,a.USAGE);r=await e.client.uploadFile(n,s)}d.push({type:`video_url`,video_url:{url:r}})}if(i){let t=await ri(i),n=t;De(i)&&t.startsWith(`data:`)&&nn(i).size>5*1024*1024&&(n=await e.client.resolveImageInput(i,s)),d.push({type:`image_url`,image_url:{url:n}})}d.push({type:`text`,text:l});let f={model:s,messages:[{role:`user`,content:d}]},p=await e.client.requestJson({path:x(),method:`POST`,body:f}),m=p.choices?.[0]?.message?.content;if(u!==`text`){M(p,u);return}j(m||``)}});const ai=[`base_url`,`output`,`output_dir`,`timeout`,`api_key`,`access_token`,`access_key_id`,`access_key_secret`,`security_token`,`default_text_model`,`default_video_model`,`default_image_to_video_model`,`default_reference_to_video_model`,`default_image_model`,`default_speech_model`,`default_omni_model`,`workspace_id`],oi=new Set([`api_key`,`access_token`,`access_key_id`,`access_key_secret`,`security_token`]),si=[`console_site`,`console_region`,`console_switch_agent`,`telemetry`],ci=[...ai,...si],li={output:[`text`,`json`],console_site:[`domestic`,`international`]},ui=new Set([`telemetry`]),di={default_text_model:`qwen3.8-max`,default_image_model:`qwen-image-2.0`,default_video_model:`happyhorse-1.1-t2v`,default_speech_model:`cosyvoice-v3-flash`,default_omni_model:`qwen3.5-omni-plus`},fi={default_text_model:[{id:`qwen3.8-max`,role:`text/chat default`},{id:`qwen3-coder-plus`,role:`coding-oriented (agent config)`},{id:`qwen-flash`,role:`fast · advisor ranking`},{id:`qwen3.6-flash`,role:`fast · advisor intent`}],default_image_model:[{id:`qwen-image-2.0`,role:`image/generate default · sync`},{id:`qwen-image-max`,role:`image/generate · sync`},{id:`qwen-image-edit-2.0`,role:`image/edit · sync`},{id:`wanx2.x`,role:`image/generate · async series`}],default_video_model:[{id:`happyhorse-1.1-t2v`,role:`video/generate default · text-to-video`},{id:`happyhorse-1.1-i2v`,role:`video/generate · image-to-video`}],default_speech_model:[{id:`cosyvoice-v3-flash`,role:`speech/synthesize (TTS) default`},{id:`fun-asr`,role:`speech/recognize (ASR)`}],default_omni_model:[{id:`qwen3.5-omni-plus`,role:`omni/chat default`},{id:`qwen3-vl-plus`,role:`vision/describe · multimodal input`}]},pi={"base-url":`base_url`,"output-dir":`output_dir`,"api-key":`api_key`,"access-token":`access_token`,"access-key-id":`access_key_id`,"access-key-secret":`access_key_secret`,"security-token":`security_token`,"default-text-model":`default_text_model`,"default-video-model":`default_video_model`,"default-image-to-video-model":`default_image_to_video_model`,"default-reference-to-video-model":`default_reference_to_video_model`,"default-image-model":`default_image_model`,"default-speech-model":`default_speech_model`,"default-omni-model":`default_omni_model`,"workspace-id":`workspace_id`};function mi(e){return pi[e]||e}function hi(e,n){let r=mi(e);if(!ai.includes(r))throw new t(`Invalid config key "${e}". Valid keys: ${ai.join(`, `)}`,a.USAGE);if(r===`output`&&![`text`,`json`].includes(n))throw new t(`Invalid output format "${n}". Valid values: text, json`,a.USAGE);if(r===`timeout`){let e=Number(n);if(isNaN(e)||e<=0)throw new t(`Invalid timeout "${n}". Must be a positive number.`,a.USAGE);return e}return r===`base_url`?qe(n):n}function gi(e,n){let r=mi(e);if(ai.includes(r))return hi(e,n);if(r===`console_site`){if(![`domestic`,`international`].includes(n))throw new t(`Invalid console_site "${n}". Valid values: domestic, international`,a.USAGE);return n}if(r===`console_region`)return n;if(r===`console_switch_agent`){let e=Number(n);if(!Number.isFinite(e)||e<=0)throw new t(`Invalid console_switch_agent "${n}". Must be a positive number.`,a.USAGE);return e}if(r===`telemetry`){if(n!==`true`&&n!==`false`)throw new t(`Invalid telemetry "${n}". Valid values: true, false`,a.USAGE);return n===`true`}throw new t(`Invalid config key "${e}". Valid keys: ${ci.join(`, `)}`,a.USAGE)}var _i=w({description:`Display current configuration`,auth:`none`,exampleArgs:[``,`--output json`],async run(e){let{settings:t,client:n}=e,r=e.configStore,i=r.read(),a=T(t.output),o={...i,base_url:n.baseUrl,output:t.output,timeout:t.timeout,config:t.configName??`default`,config_file:r.path};for(let e of oi)typeof o[e]==`string`&&(o[e]=E(o[e]));M(o,a)}}),vi=w({description:`Set a config value`,auth:`none`,usageArgs:`--key <key> --value <value>`,flags:{key:{type:`string`,valueHint:`<key>`,description:`Config key (base_url, output, output_dir, timeout, api_key, access_token, access_key_id, access_key_secret, security_token, default_*_model, workspace_id)`,required:!0},value:{type:`string`,valueHint:`<value>`,description:`Value to set`,required:!0}},exampleArgs:[`--key output --value json`,`--key timeout --value 600`,`--key base_url --value https://dashscope.aliyuncs.com`],async run(e){let{settings:t,flags:n}=e,r=n.key,i=n.value,a=mi(r),o=hi(r,i),s=T(t.output);if(t.dryRun){M({would_set:{[a]:o},config:t.configName??`default`,config_file:e.configStore.path},s);return}if(await e.configStore.write({[a]:o}),!t.quiet){let n=oi.has(a)?E(String(o)):o;M({[a]:n,config:t.configName??`default`,config_file:e.configStore.path},s)}}}),yi=w({description:`List config profiles and show the active profile`,auth:`none`,exampleArgs:[``,`--output json`],async run(e){let t=e.configStore.profiles(),n=[`default`,...Object.keys(t.named).sort()],r=T(e.settings.output);if(r===`json`){M({active_config:t.active,profiles:n,config_file:e.configStore.path},r);return}let i=Math.max(4,...n.map(e=>e.length));j(`${`NAME`.padEnd(i)} ACTIVE`);for(let e of n)j(`${e.padEnd(i)} ${e===t.active?`*`:``}`)}}),bi=w({description:`Set the active config profile`,auth:`none`,usageArgs:`--name <name>`,flags:{name:{type:`string`,valueHint:`<name>`,description:`Existing profile name, or default`,required:!0}},exampleArgs:[`--name token-plan`,`--name default`],async run(e){let t=T(e.settings.output);if(e.settings.dryRun){M({would_activate:e.configStore.validateActivation(e.flags.name),config_file:e.configStore.path},t);return}let n=await e.configStore.activate(e.flags.name);e.settings.quiet||M({active_config:n,config_file:e.configStore.path},t)}});function V(e){try{return un(e,`utf-8`)}catch{return}}function H(e){let t=V(e);if(t!==void 0)try{let e=JSON.parse(t);return e&&typeof e==`object`&&!Array.isArray(e)?e:void 0}catch{return}}function U(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:void 0}function xi(e){let t=/^---\s*\n([\s\S]*?)\n---/.exec(e);if(!t)return{};try{return U(xn.parse(t[1]))??{}}catch{return{}}}function Si(e,t=500){let n=0,r=e=>{if(n>=t)return;let i;try{i=dn(e,{withFileTypes:!0})}catch{return}for(let a of i){if(n>=t)return;let i=L(e,a.name);a.isDirectory()?r(i):n+=1}};return r(e),n}function Ci(e){return[{source:`global`,dir:L(e,`.agents`,`skills`)},{source:`claude-code`,dir:L(e,`.claude`,`skills`)},{source:`cursor`,dir:L(e,`.cursor`,`skills`)},{source:`qwen-code`,dir:L(e,`.qwen`,`skills`)},{source:`codex`,dir:L(e,`.codex`,`skills`)},{source:`opencode`,dir:L(e,`.config`,`opencode`,`skills`)},{source:`openclaw`,dir:L(e,`.openclaw`,`skills`)},{source:`openclaw`,dir:L(e,`.openclaw`,`workspace`,`skills`)},{source:`hermes`,dir:L(e,`.hermes`,`skills`)},{source:`gemini`,dir:L(e,`.gemini`,`skills`)},{source:`antigravity`,dir:L(e,`.gemini`,`antigravity`,`skills`)},{source:`windsurf`,dir:L(e,`.windsurf`,`skills`)},{source:`windsurf`,dir:L(e,`.codeium`,`windsurf`,`skills`)},{source:`qoderwork`,dir:L(e,`.qoderwork`,`skills`)},{source:`workbuddy`,dir:L(e,`.workbuddy`,`skills`)}]}function wi(e=z()){let t=new Map;for(let{source:n,dir:r}of Ci(e)){let e;try{e=dn(r,{withFileTypes:!0})}catch{continue}for(let i of e){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let e=L(r,i.name),a=L(e,`SKILL.md`);if(!I(a))continue;let o=t.get(i.name);if(o){o.sources.includes(n)||o.sources.push(n);continue}let s=xi(V(a)??``),c=U(s.metadata),l=typeof s.description==`string`?s.description.trim():``,u=c&&typeof c.version==`string`?c.version:typeof s.version==`string`?s.version:void 0;t.set(i.name,{id:i.name,name:typeof s.name==`string`&&s.name?s.name:i.name,description:l,version:u,fileCount:Si(e),path:e,sources:[n],origin:`local`})}}return[...t.values()].sort((e,t)=>e.name.localeCompare(t.name))}function Ti(e,t=z()){let n=wi(t).find(t=>t.id===e);if(!n)return null;let r=V(L(n.path,`SKILL.md`))??``;return{...n,content:r}}const Ei=[{source:`global`,label:`All agents (~/.agents/skills)`,sub:[`.agents`,`skills`]},{source:`claude-code`,label:`Claude Code`,sub:[`.claude`,`skills`]},{source:`qwen-code`,label:`Qwen Code`,sub:[`.qwen`,`skills`]},{source:`codex`,label:`Codex`,sub:[`.codex`,`skills`]},{source:`opencode`,label:`OpenCode`,sub:[`.config`,`opencode`,`skills`]},{source:`openclaw`,label:`OpenClaw`,sub:[`.openclaw`,`skills`]},{source:`qoderwork`,label:`QoderWork`,sub:[`.qoderwork`,`skills`]},{source:`windsurf`,label:`Windsurf`,sub:[`.codeium`,`windsurf`,`skills`]},{source:`gemini`,label:`Gemini`,sub:[`.gemini`,`skills`]}];function Di(e,t){let n=Ei.find(t=>t.source===e);return n?L(t,...n.sub):null}function Oi(e){let t=-1,n=Math.max(0,e.length-22-65535);for(let r=e.length-22;r>=n;r--)if(e.readUInt32LE(r)===101010256){t=r;break}if(t<0)throw Error(`Not a valid .zip archive.`);let r=e.readUInt16LE(t+10),i=e.readUInt32LE(t+16),a=[];for(let t=0;t<r&&!(i+46>e.length||e.readUInt32LE(i)!==33639248);t++){let t=e.readUInt16LE(i+10),n=e.readUInt32LE(i+20),r=e.readUInt16LE(i+28),o=e.readUInt16LE(i+30),s=e.readUInt16LE(i+32),c=e.readUInt32LE(i+42),l=e.toString(`utf8`,i+46,i+46+r);if(i+=46+r+o+s,l.endsWith(`/`)||c+30>e.length||e.readUInt32LE(c)!==67324752)continue;let u=e.readUInt16LE(c+26),d=e.readUInt16LE(c+28),f=c+30+u+d,p=e.subarray(f,f+n),m;if(t===0)m=Buffer.from(p);else if(t===8)m=bn(p);else throw Error(`Unsupported compression in archive (entry: `+l+`).`);a.push({name:l,data:m})}return a}function ki(e,t,n,r=z()){let i=Di(e,r);if(!i)throw Error(`Unknown skill install target.`);let a=Oi(t).map(e=>({name:e.name.replace(/\\/g,`/`).replace(/^\.\//,``).replace(/^\/+/,``),data:e.data})).filter(e=>e.name&&!e.name.endsWith(`/`)&&!e.name.split(`/`).includes(`..`));if(!a.length)throw Error(`The archive contains no usable files.`);let o=a.find(e=>e.name===`SKILL.md`||e.name.endsWith(`/SKILL.md`));if(!o)throw Error(`No SKILL.md found in the archive (root or a top-level folder).`);let s=o.name.lastIndexOf(`/`),c,l;if(s<0){if(c=(n||``).trim(),!c)throw Error(`SKILL.md is at the archive root — please provide a skill name.`);l=``}else l=o.name.slice(0,s+1),c=(n||``).trim()||l.split(`/`)[0];if(!/^[A-Za-z0-9._-]+$/.test(c))throw Error(`Invalid skill name: `+c);let u=L(i,c),d=R(u),f=0;for(let e of a){let t=e.name;if(l){if(!e.name.startsWith(l))continue;t=e.name.slice(l.length)}if(!t)continue;let n=R(L(u,t));n!==d&&!n.startsWith(d+yn)||(ln(gn(n),{recursive:!0}),mn(n,e.data),f++)}if(f===0)throw Error(`Nothing was extracted from the archive.`);return{installed:c,files:f,dir:u}}function Ai(e){if(typeof e.command==`string`){let t=Array.isArray(e.args)?e.args.join(` `):``;return{transport:`stdio`,detail:`${e.command} ${t}`.trim()}}let t=typeof e.url==`string`?e.url:void 0;return t?{transport:(typeof e.type==`string`?e.type.toLowerCase():``)===`sse`?`sse`:`http`,detail:t}:{transport:`unknown`,detail:``}}function W(e,t,n,r,i){let a=U(e);if(a)for(let[e,o]of Object.entries(a)){let a=U(o)??{},{transport:s,detail:c}=Ai(a);r.push({name:e,source:t,transport:s,detail:c,scope:n,origin:`local`,config:Hi(a),editable:i})}}function ji(e=z()){let t=[],n=H(L(e,`.claude.json`));if(n){W(n.mcpServers,`claude-code`,`global`,t,!0);let e=U(n.projects);if(e)for(let[n,r]of Object.entries(e)){let e=U(r);e?.mcpServers&&W(e.mcpServers,`claude-code`,n,t,!0)}}let r=H(L(e,`.qwen`,`settings.json`));r&&W(r.mcpServers,`qwen-code`,`global`,t,!0);let i=H(L(e,`.config`,`opencode`,`opencode.json`));i&&W(i.mcp,`opencode`,`global`,t,!0);let a=H(L(e,`.cursor`,`mcp.json`));a&&W(a.mcpServers,`cursor`,`global`,t,!0);let o=H(L(e,`.codeium`,`windsurf`,`mcp_config.json`));o&&W(o.mcpServers,`windsurf`,`global`,t,!0);let s=H(L(e,`.gemini`,`settings.json`));s&&W(s.mcpServers,`gemini`,`global`,t,!0);let c=H(L(e,`.qoderwork`,`mcp.json`));c&&W(c.mcpServers,`qoderwork`,`global`,t,!0);let l=H(L(e,`.openclaw`,`openclaw.json`));l&&W(l.mcpServers,`openclaw`,`global`,t,!0);let u=H(Mi(e));u&&W(u.mcpServers,`claude-desktop`,`global`,t,!0);let d=V(L(e,`.codex`,`config.toml`));if(d)try{W(Sn(d).mcp_servers,`codex`,`global`,t,!1)}catch{}return t.sort((e,t)=>e.name.localeCompare(t.name)||e.source.localeCompare(t.source))}function Mi(e){return process.platform===`darwin`?L(e,`Library`,`Application Support`,`Claude`,`claude_desktop_config.json`):process.platform===`win32`?L(process.env.APPDATA??L(e,`AppData`,`Roaming`),`Claude`,`claude_desktop_config.json`):L(e,`.config`,`Claude`,`claude_desktop_config.json`)}function Ni(e,t,n){return e===`claude-code`?{file:L(n,`.claude.json`),mapKey:`mcpServers`,projectScoped:t!==`global`}:e===`qwen-code`?{file:L(n,`.qwen`,`settings.json`),mapKey:`mcpServers`,projectScoped:!1}:e===`opencode`?{file:L(n,`.config`,`opencode`,`opencode.json`),mapKey:`mcp`,projectScoped:!1}:e===`cursor`?{file:L(n,`.cursor`,`mcp.json`),mapKey:`mcpServers`,projectScoped:!1}:e===`windsurf`?{file:L(n,`.codeium`,`windsurf`,`mcp_config.json`),mapKey:`mcpServers`,projectScoped:!1}:e===`gemini`?{file:L(n,`.gemini`,`settings.json`),mapKey:`mcpServers`,projectScoped:!1}:e===`qoderwork`?{file:L(n,`.qoderwork`,`mcp.json`),mapKey:`mcpServers`,projectScoped:!1}:e===`openclaw`?{file:L(n,`.openclaw`,`openclaw.json`),mapKey:`mcpServers`,projectScoped:!1}:e===`claude-desktop`?{file:Mi(n),mapKey:`mcpServers`,projectScoped:!1}:null}function Pi(e,t){if(typeof e==`string`){if(e.includes(`•`)){if(typeof t==`string`)return t;throw Error(`Replace masked values (•••) with the real value before saving.`)}return e}if(Array.isArray(e)){let n=Array.isArray(t)?t:[];return e.map((e,t)=>Pi(e,n[t]))}let n=U(e);if(n){let e=U(t)??{},r={};for(let[t,i]of Object.entries(n))r[t]=Pi(i,e[t]);return r}return e}function Fi(e,t,n,r,i=z()){let a=Ni(e,t,i);if(!a)throw Error(`This MCP source is read-only and cannot be edited here.`);let o=n.trim();if(!o)throw Error(`Server name is required.`);let s=U(r);if(!s)throw Error(`Config must be a JSON object.`);let c=H(a.file)??{},l=c;if(a.projectScoped){let e=U(c.projects)??{};c.projects=e;let n=U(e[t])??{};e[t]=n,l=n}let u=U(l[a.mapKey])??{};l[a.mapKey]=u,u[o]=Pi(s,U(u[o])),ln(gn(a.file),{recursive:!0}),mn(a.file,JSON.stringify(c,null,2)+`
29
29
  `,`utf-8`)}function Ii(e,t,n,r=z()){let i=Ni(e,t,r);if(!i)throw Error(`This MCP source is read-only and cannot be edited here.`);let a=H(i.file);if(!a)throw Error(`Config file not found.`);let o=a;if(i.projectScoped){let e=U(a.projects);o=e?U(e[t]):void 0}let s=o?U(o[i.mapKey]):void 0;if(!s||!(n in s))throw Error(`Server not found: `+n);delete s[n],o&&Object.keys(s).length===0&&delete o[i.mapKey],mn(i.file,JSON.stringify(a,null,2)+`
30
30
  `,`utf-8`)}const Li=[{id:`claude-code`,label:`Claude Code`,paths:e=>[L(process.env.CLAUDE_CONFIG_DIR||L(e,`.claude`),`settings.json`),L(e,`.claude.json`)],detect:e=>{let t=U(H(L(process.env.CLAUDE_CONFIG_DIR||L(e,`.claude`),`settings.json`))?.env),n=t&&typeof t.ANTHROPIC_BASE_URL==`string`?t.ANTHROPIC_BASE_URL:void 0,r=t&&typeof t.ANTHROPIC_MODEL==`string`?t.ANTHROPIC_MODEL:void 0;return{configured:!!n,model:r}}},{id:`qwen-code`,label:`Qwen Code`,paths:e=>[L(e,`.qwen`,`settings.json`)],detect:e=>{let t=H(L(e,`.qwen`,`settings.json`)),n=U(t?.modelProviders),r=n?Object.values(n).some(e=>Array.isArray(e)&&e.some(e=>{let t=U(e)?.name;return typeof t==`string`&&(t===`bailian-cli`||t.startsWith(`[Bailian]`))})):!1,i=U(t?.model);return{configured:r,model:i&&typeof i.name==`string`?i.name:void 0}}},{id:`opencode`,label:`OpenCode`,paths:e=>[L(e,`.config`,`opencode`,`opencode.json`)],detect:e=>{let t=U(U(H(L(e,`.config`,`opencode`,`opencode.json`))?.provider)?.[`bailian-cli`]),n=U(t?.models);return{configured:!!t,model:n?Object.keys(n)[0]:void 0}}},{id:`openclaw`,label:`OpenClaw`,paths:e=>[L(e,`.openclaw`,`openclaw.json`)],detect:e=>{let t=U(U(U(H(L(e,`.openclaw`,`openclaw.json`))?.models)?.providers)?.[`bailian-cli`]),n=U((Array.isArray(t?.models)?t.models:[])[0]);return{configured:!!t,model:n&&typeof n.id==`string`?n.id:void 0}}},{id:`hermes`,label:`Hermes Agent`,paths:e=>[L(e,`.hermes`,`config.yaml`)],detect:e=>{let t=V(L(e,`.hermes`,`config.yaml`));if(!t)return{configured:!1};let n;try{n=U(xn.parse(t))}catch{return{configured:!1}}let r=(Array.isArray(n?.custom_providers)?n.custom_providers:[]).some(e=>U(e)?.name===`bailian-cli`),i=U(n?.model),a=!!(i&&i.provider===`custom`&&typeof i.base_url==`string`&&i.base_url.includes(`aliyuncs.com`));return{configured:r||a,model:i&&typeof i.default==`string`?i.default:void 0}}},{id:`codex`,label:`Codex`,paths:e=>[L(e,`.codex`,`config.toml`),L(e,`.codex`,`auth.json`)],detect:e=>{let t=V(L(e,`.codex`,`config.toml`));if(!t)return{configured:!1};let n={};try{n=Sn(t)}catch{return{configured:!1}}return{configured:!!U(n.model_providers)?.[`bailian-cli`],model:typeof n.model==`string`?n.model:void 0}}}];function Ri(e=z()){return Li.map(t=>{let n=t.paths(e),r=n.some(e=>I(e)),{configured:i,model:a}=r?t.detect(e):{configured:!1,model:void 0};return{id:t.id,label:t.label,installed:r,configured:i,model:a,paths:n,origin:`local`}})}function G(e,t,n,r=!1){typeof n==`string`&&n.trim()&&e.push({label:t,value:n.trim(),secret:r})}function zi(e,t){let n=[];if(e===`claude-code`){let e=U(H(L(t,`.claude`,`settings.json`))?.env);G(n,`Model`,e?.ANTHROPIC_MODEL),G(n,`Base URL`,e?.ANTHROPIC_BASE_URL),G(n,`Auth Token`,e?.ANTHROPIC_AUTH_TOKEN,!0)}else if(e===`qwen-code`){let e=H(L(t,`.qwen`,`settings.json`)),r=U(e?.model),i=U(U(e?.security)?.auth),a=U(e?.env);G(n,`Model`,r?.name),G(n,`Base URL`,i?.baseUrl??r?.baseUrl),G(n,`Protocol`,i?.selectedType),G(n,`API Key`,i?.apiKey??a?.BAILIAN_CLI_API_KEY,!0)}else if(e===`opencode`){let e=U(U(H(L(t,`.config`,`opencode`,`opencode.json`))?.provider)?.[`bailian-cli`]),r=U(e?.options),i=U(e?.models);G(n,`Model`,i?Object.keys(i)[0]:void 0),G(n,`Base URL`,r?.baseURL),G(n,`Provider`,e?.npm),G(n,`API Key`,r?.apiKey,!0)}else if(e===`openclaw`){let e=U(U(U(H(L(t,`.openclaw`,`openclaw.json`))?.models)?.providers)?.[`bailian-cli`]);G(n,`Model`,U((Array.isArray(e?.models)?e.models:[])[0])?.id),G(n,`Base URL`,e?.baseUrl),G(n,`API`,e?.api),G(n,`API Key`,e?.apiKey,!0)}else if(e===`hermes`){let e=V(L(t,`.hermes`,`config.yaml`)),r;if(e)try{r=U(xn.parse(e))}catch{r=void 0}let i=U((Array.isArray(r?.custom_providers)?r.custom_providers:[]).find(e=>U(e)?.name===`bailian-cli`));G(n,`Model`,U((Array.isArray(i?.models)?i.models:[])[0])?.id??U(r?.model)?.default),G(n,`Base URL`,i?.base_url),G(n,`API Mode`,i?.api_mode),G(n,`API Key`,i?.api_key,!0)}else if(e===`codex`){let e=V(L(t,`.codex`,`config.toml`)),r={};if(e)try{r=Sn(e)}catch{r={}}let i=U(U(r.model_providers)?.[`bailian-cli`]),a=H(L(t,`.codex`,`auth.json`));G(n,`Model`,r.model),G(n,`Base URL`,i?.base_url),G(n,`Wire API`,i?.wire_api),G(n,`API Key`,a?.OPENAI_API_KEY,!0)}return n}function Bi(e){let t=e.trim();return t.length<=8?`•`.repeat(Math.max(t.length,4)):t.slice(0,3)+`•`.repeat(Math.min(t.length-3,16))}const Vi=/key|token|secret|password|passwd|auth|credential/i;function Hi(e,t=``){if(typeof e==`string`)return t&&Vi.test(t)&&e.trim()?Bi(e):e;if(Array.isArray(e))return e.map(e=>Hi(e));let n=U(e);if(n){let e={};for(let[t,r]of Object.entries(n))e[t]=Hi(r,t);return e}return e}function Ui(e){return e.endsWith(`.json`)?`json`:e.endsWith(`.yaml`)||e.endsWith(`.yml`)?`yaml`:e.endsWith(`.toml`)?`toml`:`text`}function Wi(e,t=z()){let n=Li.find(t=>t.id===e);if(!n)return null;let r=n.paths(t),i=r.some(e=>I(e)),{configured:a,model:o}=i?n.detect(t):{configured:!1,model:void 0},s=i?zi(e,t).map(e=>e.secret?{...e,raw:e.value,value:Bi(e.value)}:e):[],c=r.map(e=>({path:e,exists:I(e)})),l=i?r.filter(e=>I(e)).map(e=>({path:e,lang:Ui(e),text:V(e)??``})).filter(e=>e.text.trim()):[];return{id:n.id,label:n.label,installed:i,configured:a,model:o,paths:r,origin:`local`,fields:s,files:c,settings:l}}const Gi={"claude-code":`claude`,"qwen-code":`qwen`,opencode:`opencode`,openclaw:`openclaw`,hermes:`hermes`,codex:`codex`};function Ki(e){return Object.prototype.hasOwnProperty.call(Gi,e)?Gi[e]:void 0}const qi={"qwen-code":e=>[`-i`,e],"claude-code":e=>[e],codex:e=>[e]};function Ji(e){return Object.prototype.hasOwnProperty.call(qi,e)}function Yi(e){let t=process.platform===`win32`?`where`:`which`;return new Promise(n=>{Yt(t,[e],{windowsHide:!0},e=>n(!e))})}function Xi(e){let t=Ki(e);return t?Yi(t):Promise.resolve(!1)}function Zi(e){return`'${e.replace(/'/g,`'\\''`)}'`}function Qi(e,t){let n=process.platform;return new Promise((r,i)=>{if(n===`darwin`){Yt(`osascript`,[`-e`,`tell application "Terminal" to do script "${`cd ${Zi(t)} && ${e}`.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`,`-e`,`tell application "Terminal" to activate`],{windowsHide:!0},e=>e?i(e):r());return}if(n===`win32`){Yt(`cmd`,[`/c`,`start`,``,`cmd`,`/k`,`cd /d ${t} && ${e}`],{windowsHide:!0},e=>e?i(e):r());return}Yt(`x-terminal-emulator`,[`-e`,`bash`,`-lc`,`cd ${Zi(t)} && ${e}; exec $SHELL`],{windowsHide:!0},e=>e?i(Error(`No supported terminal emulator was found`)):r())})}async function $i(e,t=process.cwd(),n){let r=Ki(e);if(!r)throw Error(`Unknown agent: ${e}`);if(!await Yi(r))throw Error(`\`${r}\` was not found on your PATH — install ${e} first.`);let i=r,a=(n??``).trim();if(a){let t=qi[e];if(!t)throw Error(`${e} does not support dispatching a task prompt.`);i=[r,...t(a).map(Zi)].join(` `)}return await Qi(i,t),{launched:!0,command:i}}const ea=[{id:`image-generate`,title:`文生图`,description:`一键生成一张示例图片并保存到输出目录。`,category:`图像`,prompt:"请使用 bl 的图像生成能力(如 `bl image generate` 命令)生成一张示例图片:一只在雨中撑伞的柯基,水彩风格,光线柔和。保存到输出目录后告诉我文件路径。"},{id:`image-describe`,title:`图片理解`,description:`从输出目录任选一张图片,详细描述内容与风格。`,category:`图像`,prompt:`请在输出目录(默认 output/images)中任选一张图片,用中文详细描述它的内容、主体、构图、色彩与风格,并推测它适合的使用场景。若目录为空请说明。`},{id:`image-alt-batch`,title:`批量 Alt 文本`,description:`为输出目录下的图片批量生成无障碍 alt 文本。`,category:`图像`,prompt:`请扫描输出目录(默认 output/images)下的所有图片,逐张生成简洁、准确的 alt 无障碍描述,最后以「文件名 → alt 文本」的表格汇总。若目录为空请说明。`},{id:`image-to-code`,title:`截图转代码`,description:`把输出目录里的界面截图还原成 HTML+CSS。`,category:`图像`,prompt:`请在输出目录(默认 output/images)中查找一张界面截图,用 HTML + CSS 尽可能还原它的布局、间距与配色,输出为一个可直接在浏览器打开的单文件,并简述还原思路。若没有找到截图请说明。`},{id:`speech-generate`,title:`文字转语音`,description:`把一句示例文字合成为自然语音。`,category:`音频`,prompt:"请使用 bl 的语音合成能力(如 `bl speech` 相关命令)把下面这句话合成为自然语音,保存到输出目录,并告诉我音频文件路径:欢迎使用阿里云百炼命令行工具,让多模态创作更简单。"},{id:`audio-summarize`,title:`音频转写总结`,description:`转写输出目录里的音频并提炼要点。`,category:`音频`,prompt:`请在输出目录(默认 output/speech)中找到一个音频文件,转写其内容,先给出完整文字,再用要点列表总结关键信息。若目录为空或缺少转写能力,请说明并尝试用可用的能力完成。`},{id:`video-generate`,title:`文生视频`,description:`一键生成一段示例短视频。`,category:`视频`,prompt:"请使用 bl 的视频生成能力(如 `bl video generate` 命令)生成一段示例短视频:日落时分海边奔跑的少年,电影质感,慢动作。保存到输出目录后告诉我视频文件路径。"},{id:`video-storyboard`,title:`视频分镜脚本`,description:`围绕示例主题产出可用于文生视频的分镜。`,category:`视频`,prompt:`围绕主题「城市清晨的第一杯咖啡」,为一支 15-30 秒的短视频撰写分镜脚本:逐镜头给出画面描述、时长、字幕或旁白,并为每个镜头附上可直接用于文生视频的英文 prompt。`},{id:`media-prompt-craft`,title:`多模态提示词`,description:`把一个示例创意扩展成图/视频/语音提示词。`,category:`多模态`,prompt:`把创意「未来赛博城市的夜市」扩展成三组高质量生成提示词:1) 文生图;2) 文生视频;3) 语音风格描述。每组给出中英对照,并简要说明关键参数建议。`},{id:`image-story-narration`,title:`图片配音文案`,description:`为输出目录里的图片写解说词并给出可合成文本。`,category:`多模态`,prompt:`请在输出目录(默认 output/images)中任选一张图片,为它撰写一段 60 秒左右的中文解说词(适合配音),语气生动。随后给出可直接用于语音合成的纯文本版本。若目录为空请说明。`},{id:`summarize-project`,title:`总结当前项目`,description:`让 agent 阅读当前目录,总结架构、技术栈与主要模块。`,category:`代码`,prompt:`请阅读当前工作目录的项目结构和关键源码,用简洁的中文总结:1) 它是做什么的;2) 技术栈;3) 主要模块及其职责;4) 值得注意的设计。先浏览再下结论,不要臆测。`},{id:`write-tests`,title:`为核心模块写单测`,description:`自动挑选缺测试的核心模块并补全单元测试。`,category:`代码`,prompt:`请在当前项目中挑选一个核心且缺少测试(或测试薄弱)的模块,为它编写全面的单元测试,覆盖主要逻辑分支和边界情况,并遵循本项目现有的测试框架与风格。先阅读相关文件及其依赖,再编写测试。`},{id:`code-review`,title:`代码审查`,description:`审查当前项目核心代码,指出问题与改进建议。`,category:`代码`,prompt:`请审查当前项目的核心源码,指出潜在的 bug、安全隐患、性能与可维护性问题,并给出具体、可操作的改进建议,按严重程度排序。先浏览项目结构,选取关键文件再审查。`},{id:`explain-code`,title:`解释核心代码`,description:`挑选入口或核心模块,解释其实现与依赖。`,category:`代码`,prompt:`请挑选当前项目的入口文件或核心模块,解释它的实现:职责是什么、关键流程如何运转、依赖了哪些模块。用清晰的中文说明,必要时给出调用关系。`},{id:`generate-readme`,title:`生成 README`,description:`阅读代码后生成结构清晰、与实现一致的 README.md。`,category:`文档`,prompt:`为当前工作目录的项目生成一个结构清晰的 README.md,包含:项目简介、安装步骤、使用示例、目录结构说明。请先阅读现有代码与配置再撰写,内容必须与实际实现一致。`}];function ta(e){return ea.find(t=>t.id===e)}function na(e,t){return e.prompt.replace(/\{\{(\w+)\}\}/g,(e,n)=>{let r=t[n];return typeof r==`string`?r.trim():``})}const ra=new Uint8Array(512),ia=new Uint8Array(256);(()=>{let e=1;for(let t=0;t<255;t++)ra[t]=e,ia[e]=t,e<<=1,e&256&&(e^=285);for(let e=255;e<512;e++)ra[e]=ra[e-255]})();function aa(e,t){return e===0||t===0?0:ra[ia[e]+ia[t]]}function oa(e){let t=[1];for(let n=0;n<e;n++){let e=Array.from({length:t.length+1},()=>0);for(let r=0;r<t.length;r++)e[r]^=t[r],e[r+1]^=aa(t[r],ra[n]);t=e}return t.map(e=>ia[e])}function sa(e,t){let n=oa(t),r=new Uint8Array(e.length+t);r.set(e,0);for(let t=0;t<e.length;t++){let e=r[t];if(e!==0){let i=ia[e];for(let e=0;e<n.length;e++)r[t+e]^=ra[(n[e]+i)%255]}}return Array.from(r.slice(e.length))}const ca=[[19,7],[34,10],[55,15],[80,20],[108,26]];function la(e){let t=12+e*8;for(let e=0;e<ca.length;e++)if(ca[e][0]*8>=t)return e+1;throw Error(`qr: data too large for supported versions (max 108 bytes)`)}function ua(e,t){let[n]=ca[t-1],r=[],i=(e,t)=>{for(let n=t-1;n>=0;n--)r.push(e>>n&1)};i(4,4),i(e.length,8);for(let t of e)i(t,8);let a=n*8;for(i(0,Math.min(4,a-r.length));r.length%8!=0;)r.push(0);let o=[];for(let e=0;e<r.length;e+=8){let t=0;for(let n=0;n<8;n++)t=t<<1|r[e+n];o.push(t)}let s=[236,17];for(let e=0;o.length<n;e++)o.push(s[e%2]);return o.concat(sa(o,ca[t-1][1]))}function da(e){return{size:e,mod:new Uint8Array(e*e),fn:new Uint8Array(e*e)}}function fa(e,t,n,r){e.mod[t*e.size+n]=r,e.fn[t*e.size+n]=1}function pa(e,t,n){for(let r=-1;r<=7;r++)for(let i=-1;i<=7;i++){let a=t+r,o=n+i;a<0||a>=e.size||o<0||o>=e.size||fa(e,a,o,+(r>=0&&r<=6&&i>=0&&i<=6&&(r===0||r===6||i===0||i===6||r>=2&&r<=4&&i>=2&&i<=4)))}}function ma(e,t,n){for(let r=-2;r<=2;r++)for(let i=-2;i<=2;i++){let a=Math.max(Math.abs(r),Math.abs(i));fa(e,t+r,n+i,a===1?0:1)}}function ha(e,t){let n=e.size;for(let t=0;t<n;t++)fa(e,6,t,+(t%2==0)),fa(e,t,6,+(t%2==0));if(pa(e,0,0),pa(e,0,n-7),pa(e,n-7,0),t>=2){let t=n-7;ma(e,t,t)}for(let t=0;t<9;t++)t!==6&&(e.fn[8*n+t]=1),t!==6&&(e.fn[t*n+8]=1);e.fn[8*n+6]=1,e.fn[6*n+8]=1;for(let t=0;t<8;t++)e.fn[(n-1-t)*n+8]=1;for(let t=0;t<8;t++)e.fn[8*n+(n-1-t)]=1;fa(e,n-8,8,1)}function ga(e,t){let n=e.size,r=[];for(let e of t)for(let t=7;t>=0;t--)r.push(e>>t&1);let i=0,a=!0;for(let t=n-1;t>=1;t-=2){t===6&&(t=5);for(let o=0;o<n;o++){let s=a?n-1-o:o;for(let a of[0,1]){let o=t-a;e.fn[s*n+o]||(e.mod[s*n+o]=i<r.length?r[i++]:0)}}a=!a}}const _a=[(e,t)=>(e+t)%2==0,e=>e%2==0,(e,t)=>t%3==0,(e,t)=>(e+t)%3==0,(e,t)=>(Math.floor(e/2)+Math.floor(t/3))%2==0,(e,t)=>e*t%2+e*t%3==0,(e,t)=>(e*t%2+e*t%3)%2==0,(e,t)=>((e+t)%2+e*t%3)%2==0];function va(e,t){let n=_a[t];for(let t=0;t<e.size;t++)for(let r=0;r<e.size;r++)!e.fn[t*e.size+r]&&n(t,r)&&(e.mod[t*e.size+r]^=1)}function ya(e){let t=e.size,n=(n,r)=>e.mod[n*t+r],r=0;for(let e=0;e<t;e++){let i=1,a=1;for(let o=1;o<t;o++)n(e,o)===n(e,o-1)?i++:(i>=5&&(r+=i-2),i=1),n(o,e)===n(o-1,e)?a++:(a>=5&&(r+=a-2),a=1);i>=5&&(r+=i-2),a>=5&&(r+=a-2)}for(let e=0;e<t-1;e++)for(let i=0;i<t-1;i++){let t=n(e,i);t===n(e,i+1)&&t===n(e+1,i)&&t===n(e+1,i+1)&&(r+=3)}let i=[1,0,1,1,1,0,1,0,0,0,0],a=[0,0,0,0,1,0,1,1,1,0,1],o=(e,t,n)=>{for(let r=0;r<n.length;r++)if(e(t+r)!==n[r])return!1;return!0};for(let e=0;e<t;e++)for(let s=0;s<=t-11;s++)(o(t=>n(e,t),s,i)||o(t=>n(e,t),s,a))&&(r+=40),(o(t=>n(t,e),s,i)||o(t=>n(t,e),s,a))&&(r+=40);let s=0;for(let n=0;n<t*t;n++)s+=e.mod[n];let c=s*100/(t*t),l=Math.floor(Math.abs(c-50)/5);return r+=l*10,r}function ba(e){let t=8|e,n=t<<10;for(let e=14;e>=10;e--)n>>e&1&&(n^=1335<<e-10);return(t<<10|n)^21522}function xa(e,t){let n=e.size,r=ba(t),i=e=>r>>e&1;for(let t=0;t<=5;t++)e.mod[t*n+8]=i(t);e.mod[7*n+8]=i(6),e.mod[8*n+8]=i(7),e.mod[8*n+7]=i(8);for(let t=9;t<15;t++)e.mod[8*n+(14-t)]=i(t);for(let t=0;t<8;t++)e.mod[(n-1-t)*n+8]=i(t);for(let t=8;t<15;t++)e.mod[8*n+(n-15+t)]=i(t);e.mod[(n-8)*n+8]=1}function Sa(e){let t=new TextEncoder().encode(e),n=la(t.length),r=ua(t,n),i=da(17+4*n);ha(i,n),ga(i,r);let a=0,o=1/0;for(let e=0;e<8;e++){va(i,e),xa(i,e);let t=ya(i);t<o&&(o=t,a=e),va(i,e)}va(i,a),xa(i,a);let s=[];for(let e=0;e<i.size;e++){let t=[];for(let n=0;n<i.size;n++)t.push(i.mod[e*i.size+n]===1);s.push(t)}return s}function Ca(e){let t=Sa(e),n=t.length,r=n+8,i=``;for(let e=0;e<n;e++)for(let r=0;r<n;r++)t[e][r]&&(i+=`<rect x="${r+4}" y="${e+4}" width="1" height="1"/>`);return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${r} ${r}" shape-rendering="crispEdges" role="img" aria-label="QR code"><rect width="${r}" height="${r}" fill="#ffffff"/><g fill="#000000">${i}</g></svg>`}function wa(e){let{identity:t,settings:n,authStore:r}=e;return{status(){let e=r.describe(),t={apiKey:!!e.apiKey,console:!!e.console,openapi:!!e.openapi},n;e.console?n=E(e.console.token):e.apiKey?n=E(e.apiKey.token):e.openapi&&(n=E(e.openapi.accessKeyId));let i=e.console?`console`:e.apiKey?`apiKey`:e.openapi?`openapi`:null;return{authenticated:t.apiKey||t.console||t.openapi,methods:t,primary:i,region:e.console?.region,site:e.console?.site,masked:n}},startConsoleLogin(){let e=dr(r.describe().console?.site),i=!!r.stored().apiKey;Er(e,{identity:t,settings:n,authStore:r},{needApiKey:!i}).catch(e=>{let t=e instanceof Error?e.message:String(e);process.stderr.write(`console login failed: ${t}\n`)})},logout(){return r.logout(`all`)}}}const Ta={".png":`image`,".jpg":`image`,".jpeg":`image`,".webp":`image`,".gif":`image`,".bmp":`image`,".svg":`image`,".mp4":`video`,".mov":`video`,".webm":`video`,".mkv":`video`,".avi":`video`,".mp3":`audio`,".wav":`audio`,".m4a":`audio`,".aac":`audio`,".flac":`audio`,".ogg":`audio`},Ea={".png":`image/png`,".jpg":`image/jpeg`,".jpeg":`image/jpeg`,".webp":`image/webp`,".gif":`image/gif`,".bmp":`image/bmp`,".svg":`image/svg+xml`,".mp4":`video/mp4`,".mov":`video/quicktime`,".webm":`video/webm`,".mkv":`video/x-matroska`,".avi":`video/x-msvideo`,".mp3":`audio/mpeg`,".wav":`audio/wav`,".m4a":`audio/mp4`,".aac":`audio/aac`,".flac":`audio/flac`,".ogg":`audio/ogg`};function Da(e=z()){return L(e,`bailian-output`)}function Oa(e){return Ta[e.toLowerCase()]??`other`}function ka(e){return Ea[e.toLowerCase()]??`application/octet-stream`}function Aa(e,t,n){let r;try{r=dn(e,{withFileTypes:!0})}catch{return}for(let i of r){let r=L(e,i.name);i.isDirectory()?t>0&&Aa(r,t-1,n):(i.isFile()||i.isSymbolicLink())&&n.push(r)}}function ja(e=Da()){let t=[];if(!I(e))return{base:e,assets:t};let n=[];Aa(e,8,n);for(let r of n){let n;try{n=fn(r)}catch{continue}if(!n.isFile())continue;let i=vn(e,r),a=i.split(yn),o=a.length>1?a[0]:`other`,s=_n(r);t.push({name:r.split(yn).pop()??r,category:o,kind:Oa(s),relPath:i,size:n.size,mtime:n.mtimeMs,ext:s.replace(/^\./,``).toLowerCase()})}return t.sort((e,t)=>t.mtime-e.mtime),{base:e,assets:t}}function Ma(e,t){if(typeof t!=`string`||t.length===0)return null;let n=R(e),r=R(n,t);return r!==n&&!r.startsWith(n+yn)?null:r}const Na={port:{type:`number`,valueHint:`<port>`,description:`Port to listen on (default: random free port)`},noOpen:{type:`switch`,description:`Do not open the browser automatically`}};function K(e){return e instanceof t||e instanceof Error?e.message:String(e)}function q(e,t,n){e.writeHead(t,{"Content-Type":`application/json; charset=utf-8`}),e.end(JSON.stringify(n))}function Pa(e){return new Promise((t,n)=>{let r=0,i=[];e.on(`data`,t=>{if(r+=t.length,r>1048576){n(Error(`payload too large`)),e.destroy();return}i.push(t)}),e.on(`end`,()=>t(Buffer.concat(i).toString(`utf8`))),e.on(`error`,n)})}function Fa(e,t){return new Promise((n,r)=>{let i=0,a=[];e.on(`data`,n=>{if(i+=n.length,i>t){r(Error(`payload too large`)),e.destroy();return}a.push(n)}),e.on(`end`,()=>n(Buffer.concat(a))),e.on(`error`,r)})}function Ia(e,t){if(!e)return!1;let n=Buffer.from(e),r=Buffer.from(t);return n.length===r.length&&qt(n,r)}function La(e){let t={};for(let[n,r]of Object.entries(e)){let e=``;typeof r==`string`?e=r:(typeof r==`number`||typeof r==`boolean`)&&(e=String(r)),e!==``&&(t[mi(n)]=gi(n,e))}return t}function Ra(e,t){let n=new Set(ci),r={};for(let[t,i]of Object.entries(e))n.has(t)||(r[t]=i);return{...r,...t}}function za(e,t,n=Da(),r){return Jt.createServer(async(i,a)=>{try{let o=(i.headers.host||``).split(`:`)[0];if(o!==`127.0.0.1`&&o!==`localhost`){a.writeHead(403,{"Content-Type":`text/plain; charset=utf-8`}),a.end(`forbidden host
31
31
  `);return}let s=new URL(i.url??`/`,`http://127.0.0.1`);if(!Ia(s.searchParams.get(`token`),e)){a.writeHead(401,{"Content-Type":`text/plain; charset=utf-8`}),a.end(`unauthorized
@@ -2707,8 +2707,8 @@ Set via: --workspace-id flag, env: BAILIAN_WORKSPACE_ID, or config: ${r} config
2707
2707
  api_key: \${ANTHROPIC_API_KEY}`,qoder:` qoder:
2708
2708
  api_key: \${QODER_PAT}
2709
2709
  gateway: "https://api.qoder.com/api/v1/cloud"`,ark:` ark:
2710
- api_key: \${ARK_API_KEY}`},Ju={bailian:` model: qwen3.7-max`,claude:` model: claude-sonnet-4-6`,qoder:` model: ultimate`,ark:` model: doubao-seed-2-1-pro-260628`};function Yu(e){let t=e.provider===`all`?`${qu.bailian}\n${qu.claude}\n${qu.qoder}\n${qu.ark}`:qu[e.provider],n=e.provider===`all`?` model:
2711
- bailian: qwen3.7-max
2710
+ api_key: \${ARK_API_KEY}`},Ju={bailian:` model: qwen3.8-max`,claude:` model: claude-sonnet-4-6`,qoder:` model: ultimate`,ark:` model: doubao-seed-2-1-pro-260628`};function Yu(e){let t=e.provider===`all`?`${qu.bailian}\n${qu.claude}\n${qu.qoder}\n${qu.ark}`:qu[e.provider],n=e.provider===`all`?` model:
2711
+ bailian: qwen3.8-max
2712
2712
  claude: claude-sonnet-4-6
2713
2713
  qoder: ultimate
2714
2714
  ark: doubao-seed-2-1-pro-260628`:Ju[e.provider],r=e.provider===`bailian`?`[bash, read, glob, grep]`:`[read, glob, grep, web_search, web_fetch]`;return`version: "1"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bailian-cli-commands",
3
- "version": "1.13.0",
3
+ "version": "1.13.1",
4
4
  "description": "Command library for bailian-cli products (knowledge, memory, media, …). See https://www.npmjs.com/package/bailian-cli for usage.",
5
5
  "homepage": "https://bailian.console.aliyun.com/cli",
6
6
  "bugs": {
@@ -32,8 +32,8 @@
32
32
  "chalk": "^5.6.2",
33
33
  "smol-toml": "^1.4.2",
34
34
  "yaml": "^2.8.3",
35
- "bailian-cli-core": "1.13.0",
36
- "bailian-cli-runtime": "1.13.0"
35
+ "bailian-cli-core": "1.13.1",
36
+ "bailian-cli-runtime": "1.13.1"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/node": "^24",