bailian-cli-runtime 1.27.0 → 1.28.0

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 +2 -2
  2. package/package.json +2 -2
package/dist/index.mjs CHANGED
@@ -35,7 +35,7 @@ ${c?`${c}\n\n`:``}${r(this.localize(L.gettingHelp))}
35
35
  ${a(this.localize(L.gettingHelpDescription2))} ${this.cliName} ${this.helpExample()} --help
36
36
  `)}printCommandHelp(e,t,n){let r=e=>this.bold(e,n),i=e=>this.accent(e,n),a=e=>this.dim(e,n),o=[this.cliName,...t].join(` `);n.write(`\n${this.localize(e.description)}\n`),n.write(`${r(this.localize(L.usage))} ${o}${e.usageArgs?` ${e.usageArgs}`:``}\n`),n.write(`${r(this.localize(L.authentication))} ${i(this.localize(Et[e.auth]))}\n`),e.risk!==void 0&&(n.write(`${r(this.localize(L.risk))} ${i(this.localize(Dt[e.risk.level]))}\n`),n.write(`${r(this.localize(L.riskMessage))} ${this.localize(e.risk.message)}\n`));let s=[...Object.entries(e.flags??{}),...Object.entries(St(e)),...Object.entries(j(e))];if(s.length>0){let e=s.map(([e,t])=>({flag:Tt(e,t),desc:this.localize(t.description)})),t=Math.max(...e.map(e=>e.flag.length));n.write(`\n${r(this.localize(L.flags))}\n`);for(let r of e)n.write(` ${i(r.flag.padEnd(t+2))} ${a(r.desc)}\n`)}if(n.write(`\n${r(this.localize(L.globalFlags))}\n`),n.write(this.buildFlagLines(S,i,a)+`
37
37
  `),e.notes&&e.notes.length>0){n.write(`\n${r(this.localize(L.notes))}\n`);for(let t of e.notes)n.write(` ${this.localize(t)}\n`)}if(e.exampleArgs&&e.exampleArgs.length>0){n.write(`\n${r(this.localize(L.examples))}\n`);for(let t of e.exampleArgs){let r=this.localize(t);e.risk!==void 0&&/(?:^|\s)--yes(?:\s|$)/.test(r)&&n.write(` ${a(this.localize(L.confirmedExample))}\n`);let i=r.startsWith(`#`)?r:r?`${o} ${r}`:o;n.write(` ${a(i)}\n`)}}}printChildren(e,t,n){let r=[],i=(e,t)=>{for(let[n,a]of e.children)a.command&&r.push({path:`${t} ${n}`,auth:a.command.auth,desc:this.localize(a.command.description)}),a.children.size>0&&i(a,`${t} ${n}`)};i(e,t),n.write(this.buildCommandLines(r,e=>this.accent(e,n),e=>this.dim(e,n))+`
38
- `)}};function kt(e,t){let{path:n,rest:r,hasHelpFlag:i,hasVersionFlag:a}=ft(e);if(a)return{kind:`version`};let o=t.locate(n);switch(o.kind){case`leaf`:return i?{kind:`help`,path:o.matched}:{kind:`run`,path:o.matched,command:o.command,rest:r};case`group`:return{kind:`help`,path:o.matched};case`unknown`:return{kind:`usageError`,error:o.error}}}function At(e){return e.startsWith(je())?e.replace(je(),`~`):e}function jt(e,t,n){if(e.quiet||!ht(process.stderr))return;let r=e.configPath?At(e.configPath):`~/.bailian/config.json`,i=`${n.source} · api-key`,a=pe(t),o=I(process.stderr);process.stderr.write(`${o.brandBlue(`BAILIAN`)} ${o.dim(r)} ${o.dim(`|`)} ${o.dim(`Auth:`)} ${o.keyPink(a)} ${o.dim(i)}\n`)}function Mt(e){return{language:e,localize(t){return typeof t==`string`?t:t[e]??t[b]}}}const Nt=`https://registry.npmjs.org`,Pt=`bailian-cli`,Ft=()=>Ne(ce(),`update-state.json`),It=3e3;function Lt(e){let t=String(e).split(`+`)[0].split(`-`)[0].trim().split(`.`).map(e=>{let t=Number(e);return Number.isFinite(t)?t:0});return[t[0]??0,t[1]??0,t[2]??0]}function Rt(e){let t=String(e).split(`+`)[0],n=t.indexOf(`-`);return n>=0?t.slice(n+1):``}function zt(e){return Rt(e)!==``}function Bt(e){return e.length>0&&/^[0-9]+$/.test(e)}function Vt(e,t){let n=e?e.split(`.`):[],r=t?t.split(`.`):[];if(n.length===0&&r.length===0)return 0;if(n.length===0)return 1;if(r.length===0)return-1;let i=Math.max(n.length,r.length);for(let e=0;e<i;e++){let t=n[e],i=r[e];if(t===void 0)return-1;if(i===void 0)return 1;let a=Bt(t),o=Bt(i);if(a&&o){let e=Number(t)-Number(i);if(e!==0)return e>0?1:-1}else if(a!==o)return a?-1:1;else if(t!==i)return t>i?1:-1}return 0}function Ht(e,t){let[n,r,i]=Lt(e),[a,o,s]=Lt(t);return n===a?r===o?i===s?Vt(Rt(e),Rt(t)):i>s?1:-1:r>o?1:-1:n>a?1:-1}function Ut(e,t){return Ht(e,t)>0}function Wt(e,t){return Xt(e,t)&&!zt(e)}function Gt(){try{let e=Ie(Ft(),`utf-8`);return JSON.parse(e)}catch{return null}}function Kt(e){try{Re(Ft(),JSON.stringify(e))}catch{}}async function qt(e=It,t=Pt){try{let n=t.replace(`/`,`%2f`),r=await fetch(`${Nt}/${n}/latest`,{headers:{Accept:`application/json`},signal:AbortSignal.timeout(e)});return r.ok?(await r.json()).version??null:null}catch{return null}}let Jt=null;function Yt(){return Jt}function Xt(e,t){let[n,r]=Lt(e),[i,a]=Lt(t);return n>i||n===i&&r-a>3}function Zt(e){return e instanceof Error?e.message:String(e)}async function Qt(e,t,n,r){try{process.stderr.write(` ${e}Syncing agent skill...${r}\n`);let{execSync:n}=await import(`child_process`);n(`bl skill init`,{stdio:`inherit`}),process.stderr.write(` ${t}\u2713 Agent skill updated.${r}\n\n`)}catch(e){process.stderr.write(` ${n}\u26a0 Agent skill sync failed: ${Zt(e)}${r}\n`),process.stderr.write(` ${n} Run manually: bl skill init${r}\n\n`)}}async function $t(e,t,n=Pt,r=Pt){let i=process.stderr.isTTY,a=i?`\x1B[32m`:``,o=i?`\x1B[33m`:``,s=i?`\x1B[36m`:``,c=i?`\x1B[2m`:``,l=i?`\x1B[0m`:``,u=le({clientName:r,npmPackage:n});if(u===`brew`||u===`winget`)return!1;let[d]=Lt(t),[f]=Lt(e),p=d>f;if(process.stderr.write(`
38
+ `)}};function kt(e,t){let{path:n,rest:r,hasHelpFlag:i,hasVersionFlag:a}=ft(e);if(a)return{kind:`version`};let o=t.locate(n);switch(o.kind){case`leaf`:return i?{kind:`help`,path:o.matched}:{kind:`run`,path:o.matched,command:o.command,rest:r};case`group`:return{kind:`help`,path:o.matched};case`unknown`:return{kind:`usageError`,error:o.error}}}function At(e){return e.startsWith(je())?e.replace(je(),`~`):e}function jt(e,t,n){if(e.quiet||!ht(process.stderr))return;let r=e.configPath?At(e.configPath):`~/.bailian/config.json`,i=`${n.source} · api-key`,a=pe(t),o=I(process.stderr);process.stderr.write(`${o.brandBlue(`BAILIAN`)} ${o.dim(r)} ${o.dim(`|`)} ${o.dim(`Auth:`)} ${o.keyPink(a)} ${o.dim(i)}\n`)}function Mt(e){return{language:e,localize(t){return typeof t==`string`?t:t[e]??t[b]}}}const Nt=`https://registry.npmjs.org`,Pt=`bailian-cli`,Ft=()=>Ne(ce(),`update-state.json`),It=3e3;function Lt(e){let t=String(e).split(`+`)[0].split(`-`)[0].trim().split(`.`).map(e=>{let t=Number(e);return Number.isFinite(t)?t:0});return[t[0]??0,t[1]??0,t[2]??0]}function Rt(e){let t=String(e).split(`+`)[0],n=t.indexOf(`-`);return n>=0?t.slice(n+1):``}function zt(e){return Rt(e)!==``}function Bt(e){return e.length>0&&/^[0-9]+$/.test(e)}function Vt(e,t){let n=e?e.split(`.`):[],r=t?t.split(`.`):[];if(n.length===0&&r.length===0)return 0;if(n.length===0)return 1;if(r.length===0)return-1;let i=Math.max(n.length,r.length);for(let e=0;e<i;e++){let t=n[e],i=r[e];if(t===void 0)return-1;if(i===void 0)return 1;let a=Bt(t),o=Bt(i);if(a&&o){let e=Number(t)-Number(i);if(e!==0)return e>0?1:-1}else if(a!==o)return a?-1:1;else if(t!==i)return t>i?1:-1}return 0}function Ht(e,t){let[n,r,i]=Lt(e),[a,o,s]=Lt(t);return n===a?r===o?i===s?Vt(Rt(e),Rt(t)):i>s?1:-1:r>o?1:-1:n>a?1:-1}function Ut(e,t){return Ht(e,t)>0}function Wt(e,t){return Xt(e,t)&&!zt(e)}function Gt(){try{let e=Ie(Ft(),`utf-8`);return JSON.parse(e)}catch{return null}}function Kt(e){try{Re(Ft(),JSON.stringify(e))}catch{}}async function qt(e=It,t=Pt){try{let n=t.replace(`/`,`%2f`),r=await fetch(`${Nt}/${n}/latest`,{headers:{Accept:`application/json`},signal:AbortSignal.timeout(e)});return r.ok?(await r.json()).version??null:null}catch{return null}}let Jt=null;function Yt(){return Jt}function Xt(e,t){let[n,r]=Lt(e),[i,a]=Lt(t);return n>i||n===i&&r-a>3}function Zt(e){return e instanceof Error?e.message:String(e)}async function Qt(e,t,n,r){try{process.stderr.write(` ${e}Syncing agent skill...${r}\n`);let{execSync:n}=await import(`child_process`);n(`bl skill update`,{stdio:`inherit`}),process.stderr.write(` ${t}\u2713 Agent skill updated.${r}\n\n`)}catch(e){process.stderr.write(` ${n}\u26a0 Agent skill sync failed: ${Zt(e)}${r}\n`),process.stderr.write(` ${n} Run manually: bl skill update${r}\n\n`)}}async function $t(e,t,n=Pt,r=Pt){let i=process.stderr.isTTY,a=i?`\x1B[32m`:``,o=i?`\x1B[33m`:``,s=i?`\x1B[36m`:``,c=i?`\x1B[2m`:``,l=i?`\x1B[0m`:``,u=le({clientName:r,npmPackage:n});if(u===`brew`||u===`winget`)return!1;let[d]=Lt(t),[f]=Lt(e),p=d>f;if(process.stderr.write(`
39
39
  `),process.stderr.write(` ${o}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${l}\n`),p?process.stderr.write(` ${o}⚡ Major update detected: ${e} → ${t}${l}\n`):process.stderr.write(` ${o}⚡ Significant update detected: ${e} → ${t}${l}\n`),process.stderr.write(` ${c}Auto-updating to keep your CLI up to date...${l}\n`),process.stderr.write(` ${o}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${l}\n\n`),u===`binary`)try{let{performBinaryUpdate:n}=await import(`./binary-update-B9ti3hFP.mjs`),r=await n(t);return Kt({lastChecked:Date.now(),latestVersion:r}),process.stderr.write(` ${a}✓ Update complete: ${e} → ${r}${l}\n`),process.stderr.write(` ${c}Run ${s}bl --version${l}${c} to verify.${l}\n\n`),await Qt(c,a,o,l),Jt=null,!0}catch(e){process.stderr.write(` ${o}⚠ Auto-update failed: ${Zt(e)}${l}\n`);let t=e instanceof m&&e.hint?e.hint.replace(/^Re-run:\s*/i,``):process.platform===`win32`?`irm ${v} | iex`:`curl -fsSL ${y} | bash`;return process.stderr.write(` ${o} Re-run:${l} ${s}${t}${l}\n\n`),!1}let h=`npm install -g ${n}@latest`;try{let{execSync:r}=await import(`child_process`);r(h,{stdio:`inherit`});let i=null;try{let e=Ie(Ne(r(`npm root -g`,{encoding:`utf-8`}).trim(),n,`package.json`),`utf-8`);i=JSON.parse(e).version??null}catch(e){process.stderr.write(` ${o}⚠ Could not verify installed version: ${Zt(e)}${l}\n`)}return Kt({lastChecked:Date.now(),latestVersion:i??t}),process.stderr.write(` ${a}✓ Update complete: ${e} → ${i??t}${l}\n`),process.stderr.write(` ${c}Run ${s}bl --version${l}${c} to verify.${l}\n\n`),await Qt(c,a,o,l),Jt=null,!0}catch(e){return process.stderr.write(` ${o}⚠ Auto-update failed: ${Zt(e)}${l}\n`),process.stderr.write(` ${o} If this is a permissions error (EACCES), retry with sudo or fix npm perms.${l}\n`),process.stderr.write(` ${o} Run manually:${l} ${s}${h}${l}\n\n`),!1}}async function en(e,t=Pt,n=Pt){let r=Gt(),i=Date.now();if(r&&i-r.lastChecked<864e5)return;let a=le({clientName:n,npmPackage:t}),o=null;if(a===`binary`){try{let{fetchBinaryChannelVersion:e}=await import(`./binary-update-B9ti3hFP.mjs`);o=await e(`latest`,It)}catch{o=null}o||=await qt(It,t)}else o=await qt(It,t);o&&(Kt({lastChecked:i,latestVersion:o}),o&&Ut(o,e)&&(Jt=o))}function tn(e,t,n){return Mt(e.sources.file.language??b).localize({"en-US":`Profile "${t}" does not support command "${n}"; API Key settings will be read from Profile "default" for this run.`,"zh-CN":`Profile "${t}" 不支持命令 "${n}",本次将从 Profile "default" 读取 API Key 配置。`})}function nn(e,t){let n=tn(e,t,e.path.join(` `));if(e.settings.output===`json`){process.stderr.write(JSON.stringify({warning:{code:`PROFILE_API_KEY_FALLBACK`,message:n,profile:t,command_path:e.path,fallback_profile:`default`,credential_fields:[`api_key`,`base_url`]}},null,2)+`
40
40
 
41
41
  `);return}process.stderr.write(`${n}\n`)}function rn(e){return t=>{let n=r=>{let i=e[r];return i?i(t,()=>n(r+1)):Promise.resolve()};return n(0)}}const an=async(e,t)=>{let{command:n,settings:r,sources:i}=e,a={identity:e.identity,settings:r,...xe(i)};if(n.auth===`apiKey`){let t=we(i,e.path.join(`.`)),n=t.sources;t.fallbackFrom&&!r.quiet&&nn(e,t.fallbackFrom);let o;try{o=me(n)}catch(e){if(!r.dryRun)throw e}e.client=new _({...a,...xe(n),apiCred:o}),o&&jt(r,o.token,o)}else if(n.auth===`console`){let t;try{t=_e(i)}catch(e){if(!r.dryRun)throw e}t&&(e.client=new _({...a,consoleCred:t}))}else if(n.auth===`openapi`){let t;try{t=Se(i)}catch(e){if(!r.dryRun)throw e}e.client=new _({...a,openApiCred:t})}await t()},on=(e,t)=>ke({identity:e.identity,settings:e.settings,authMethod:e.command.auth},e.path,e.flags,t),sn=async(e,t)=>{let n=en(e.identity.version,e.identity.npmPackage,e.identity.clientName).catch(()=>{});await t(),await n;let r=e.path.length===1&&e.path[0]===`update`,i=Yt();if(i&&!e.settings.quiet&&!r)if(Wt(i,e.identity.version))await $t(e.identity.version,i,e.identity.npmPackage,e.identity.clientName);else{let t=I(process.stderr);process.stderr.write(`\n ${t.yellow(`Update available: ${e.identity.version} → ${i}`)}\n`),process.stderr.write(` Run ${t.cyan(`${e.identity.binName} update`)} to upgrade\n\n`)}},cn=async(e,t)=>{if(e.command.risk===void 0||e.confirmed||e.settings.dryRun){await t();return}throw new wt({message:e.localize(e.command.risk.message),hint:e.localize(Ct())})},ln=e=>e.command.run(e);function un(e,t){return e[t]?.trim()||void 0}function dn(e=process.env){return{httpProxy:un(e,`HTTP_PROXY`),httpsProxy:un(e,`HTTPS_PROXY`),noProxy:un(e,`NO_PROXY`)}}function fn(){let{httpProxy:e,httpsProxy:t,noProxy:n}=dn();if(!(!e&&!t))try{Be(new ze({httpProxy:e,httpsProxy:t,noProxy:n}))}catch(e){throw new m(`Invalid proxy configuration: ${e instanceof Error?e.message:String(e)}`,x.USAGE,`Check HTTP_PROXY / HTTPS_PROXY values, e.g. export HTTPS_PROXY=http://127.0.0.1:7890`,{cause:e})}}const pn=`https://bailian.console.aliyun.com`,mn=`${pn}/cn-beijing`,hn=`${mn}/?tab=app#/api-key`,gn=`${pn}/cn-beijing?tab=plan#/efm/subscription/overview`;function _n(e){return`${mn}?tab=mcp#/mcp-market/detail/${e}`}const vn=_n(`WebSearch`),yn=`https://help.aliyun.com/zh/model-studio/cosyvoice-voice-list`;let R;function bn(){return`If the DashScope host is wrong, check baseUrl (--base-url, ${R} config show, or DASHSCOPE_BASE_URL).`}function z(e){return e.padEnd(13)}function xn(e){return e.split(`
@@ -46,7 +46,7 @@ If you are behind a VPN or corporate proxy, route ${R} through it:\nexport HTTPS
46
46
  `):kn(e),process.exit(e.exitCode)),e instanceof Error){if(e.name===`AbortError`||e.name===`TimeoutError`||e.message.includes(`timed out`))return B(new m(`Request timed out.`,x.TIMEOUT,`Try increasing --timeout (e.g. --timeout 60).
47
47
  ${bn()}\nRun: ${R} auth status — to check credentials.`,{cause:e}),R);if(e instanceof TypeError&&e.message===`fetch failed`)return B(Tn(e),R);let t=e.code;if(typeof t==`string`&&t.startsWith(`E`))return B(Dn(e),R);process.stderr.write(`\n${z(`Error:`)}${e.message}\n`),On(e),process.env.DASHSCOPE_VERBOSE===`1`&&process.stderr.write(`${e.stack}\n`)}else process.stderr.write(`\n${z(`Error:`)}${String(e)}\n`);process.exit(x.GENERAL)}function An(e){return N(ce(),`plugins`,e.npmPackage)}function jn(e){return N(An(e),`package.json`)}function Mn(e,t){return N(An(e),`node_modules`,...t.split(`/`))}async function Nn(e){try{return JSON.parse(await Ge(e,`utf8`))}catch(t){throw new m(`Could not parse JSON file: ${e}`,x.GENERAL,`Repair or remove the invalid file and try again.`,{cause:t})}}async function Pn(e){let t=jn(e);return Ve(t)?Nn(t):{dependencies:{}}}async function Fn(e,t){return In(Mn(e,t))}async function In(e){return Nn(N(e,`package.json`))}const Ln=new Set([`none`,`apiKey`,`console`,`openapi`]),Rn=/^[a-z0-9][a-z0-9-]*$/;function zn(e,t,n){if(t.name!==e)throw Error(`Package name mismatch: expected "${e}", received "${t.name??``}".`);let r=t.bailianCli;if(!r||r.type!==`command-pack`)throw Error(`Package "${e}" is missing bailianCli.type="command-pack".`);if(r.apiVersion!==h)throw Error(`Command Pack API ${r.apiVersion} is not supported; this CLI supports API ${h}.`);if(r.minCliVersion&&Ht(n.version,r.minCliVersion)<0)throw Error(`Command Pack requires ${n.npmPackage} ${r.minCliVersion} or newer; current version is ${n.version}.`);if(!r.entry||Xe(r.entry))throw Error(`Command Pack "${e}" must declare a relative bailianCli.entry.`);return r}function Bn(e,t){let n=e.split(/\s+/).filter(Boolean).join(` `);if(!e||e!==n||!e.split(` `).every(e=>Rn.test(e)))throw Error(`Invalid command path "${e}".`);if(!t.commandPrefixes.some(t=>e===t||e.startsWith(`${t} `)))throw Error(`Command "${e}" is outside the allowed prefixes: ${t.commandPrefixes.join(`, `)}.`)}function Vn(e){if(typeof e==`string`)return e.length>0;if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;return T.every(e=>typeof t[e]==`string`&&t[e].length>0)}function Hn(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;return t.level===`high`&&Vn(t.message)}function Un(e,t){if(!t||typeof t!=`object`)throw Error(`Command "${e}" must export an object.`);let n=t;if(!Vn(n.description))throw Error(`Command "${e}" is missing a description.`);if(!n.auth||!Ln.has(n.auth))throw Error(`Command "${e}" has an invalid auth requirement.`);if(n.risk!==void 0&&!Hn(n.risk))throw Error(`Command "${e}" has invalid risk metadata.`);if(typeof n.run!=`function`)throw Error(`Command "${e}" is missing run(ctx).`)}function Wn(e,t,n){return Object.fromEntries(Object.entries(t).map(([t,r])=>[t,{description:r.description,auth:r.auth,risk:r.risk,usageArgs:r.usageArgs,exampleArgs:r.exampleArgs,notes:r.notes,flags:r.flags,validate:r.validate,run:i=>{let a={identity:i.identity,settings:i.settings,flags:i.flags,client:i.client,output:{result(e,t){let n=i.settings.output===`text`&&t?.text!==void 0?t.text:se(e,i.settings.output);process.stdout.write(`${n}\n`)},line(e){process.stdout.write(`${e}\n`)},write(e){process.stdout.write(e)}},errors:{general(e,t){return new m(e,x.GENERAL,t?.hint,{cause:t?.cause})},usage(e,t){return new E(e,t)},timeout(e=`Request timed out.`,t){return new m(e,x.TIMEOUT,t?.hint,{cause:t?.cause})}},credentials:{apiKey(){if(!n.credentialAccess?.includes(`apiKey`))throw new m(`Command Pack "${e}" is not allowed to access API-key credentials.`,x.GENERAL);if(r.auth!==`apiKey`)throw new m(`Command "${t}" must declare auth="apiKey" before accessing API-key credentials.`,x.GENERAL);let a=i.client.exportApiCredential();if(!a)throw new m(`No API key available to the Command Pack.`,x.AUTH);return a}}};return r.run(a)}}]))}async function Gn(e,t,n,r,i=Mn(r,e)){let a=zn(e,t,r),o=await Ke(i),s=await Ke(Qe(o,a.entry)),c=Ze(o,s);if(!c||c.startsWith(`..`)||Xe(c))throw Error(`Command Pack entry must stay inside the package root: ${a.entry}`);let l=(await import($e(s).href)).default;if(!l||typeof l!=`object`||Array.isArray(l))throw Error(`Command Pack "${e}" must default-export a command map.`);let u=Object.entries(l);if(u.length===0)throw Error(`Command Pack "${e}" does not export any commands.`);for(let[e,t]of u)Bn(e,n),Un(e,t);let d=Wn(e,l,n);return new Ot(d,r.binName),d}function Kn(e){return e.startsWith(`file:`)?`linked`:`installed`}async function qn(e,t,n){let r={...e},i=[],a;try{a=await Pn(t)}catch(e){return{commands:r,reports:[{name:`(plugin sandbox)`,source:`installed`,status:`failed`,commands:[],error:e instanceof Error?e.message:String(e)}]}}for(let[e,o]of Object.entries(a.dependencies??{}).sort(([e],[t])=>e.localeCompare(t))){let a=Kn(o),s=n.supported[e];if(!s){i.push({name:e,source:a,status:`failed`,commands:[],error:`Command Pack "${e}" is not supported by ${t.binName}.`});continue}try{let n=await Fn(t,e),o=await Gn(e,n,s,t),c=Object.keys(o).filter(e=>e in r);if(c.length>0)throw Error(`Command conflicts: ${c.join(`, `)}.`);Object.assign(r,o),i.push({name:e,version:n.version,source:a,status:`loaded`,commands:Object.keys(o).sort()})}catch(t){i.push({name:e,source:a,status:`failed`,commands:[],error:t instanceof Error?t.message:String(t)})}}return{commands:r,reports:i}}const Jn={name:`bailian-cli-command-packs`,private:!0,dependencies:{}},Yn=new Set(`PATH.HOME.USER.LOGNAME.SHELL.TMPDIR.TEMP.TMP.LANG.TERM.NODE.NODE_PATH.NODE_OPTIONS.FORCE_COLOR.NO_COLOR.NPM_TOKEN.NODE_AUTH_TOKEN.HTTP_PROXY.HTTPS_PROXY.NO_PROXY.http_proxy.https_proxy.no_proxy.SystemRoot.ComSpec.APPDATA.PATHEXT`.split(`.`)),Xn=new Set([`registry`,`userconfig`,`globalconfig`,`cache`,`proxy`,`https_proxy`,`noproxy`,`strict_ssl`,`ca`,`cafile`]);function Zn(e){let t=/^(?:npm_config_|NPM_CONFIG_)(.+)$/.exec(e);return!!t&&Xn.has(t[1].toLowerCase())}function Qn(e,t){let n=Object.keys(t.supported);return n.length>0?`Allowed packages: ${n.join(`, `)}`:`${e.binName} does not currently support any Command Packs.`}function $n(e=process.env){let t={};for(let[n,r]of Object.entries(e))r!==void 0&&(Yn.has(n)||n.startsWith(`LC_`)||Zn(n))&&(t[n]=r);return t}async function er(e){await Ue(e,{recursive:!0,mode:448});let t=N(e,`package.json`);Ve(t)||await Ye(t,`${JSON.stringify(Jn,null,2)}\n`,{mode:384})}async function tr(e,t){if(tt(`npm`,[`--version`],{encoding:`utf-8`}).status!==0){let e=ue()?"Command Packs need a local npm. Install Node.js, or use `npm install -g bailian-cli` instead of the binary install.":`Install Node.js / npm and retry.`;throw new m(`npm is required to install, link, or remove Command Packs, but was not found on PATH.`,x.GENERAL,e)}await new Promise((n,r)=>{let i=et(`npm`,e,{cwd:t,env:$n(),stdio:[`inherit`,`pipe`,`pipe`]});i.stdout.on(`data`,e=>process.stderr.write(e)),i.stderr.on(`data`,e=>process.stderr.write(e)),i.once(`error`,r),i.once(`close`,(t,i)=>{if(t===0){n();return}r(new m(`npm ${e[0]} failed${i?` with signal ${i}`:` with exit code ${t}`}.`,x.GENERAL))})})}async function nr(e){let t=An(e);await er(t);let n=N(t,`.lock`);for(let e=0;e<2;e++)try{let e=await We(n,`wx`,384);return await e.writeFile(`${process.pid} ${Date.now()}\n`),await e.close(),async()=>{try{await Je(n)}catch{}}}catch(e){if(e.code!==`EEXIST`)throw e;try{let e=await qe(n);if(Date.now()-e.mtimeMs>6e5){await Je(n);continue}}catch{continue}throw new m(`Another Command Pack install, link, or remove operation is already running.`,x.GENERAL,`Wait for it to finish and try again.`)}throw new m(`Could not acquire the Command Pack operation lock.`,x.GENERAL)}async function rr(e,t){let n=await nr(e);try{return await t()}finally{await n()}}function ir(e,t,n){let r=e.trim(),i=/^(@[^/\s]+\/[^@/\s]+)(?:@([a-zA-Z0-9][a-zA-Z0-9._-]*))?$/.exec(r);if(!i)throw new m(`Unsupported Command Pack package spec: "${e}".`,x.USAGE,`Use an allowlisted scoped package name with an optional version or tag.`);let a=i[1];if(!n.supported[a])throw new m(`Command Pack "${a}" is not allowlisted for ${t.binName}.`,x.USAGE,Qn(t,n));return{name:a,requested:r}}async function ar(e,t,n,r){let i=r.supported[e],a=await In(t);return{pjson:a,commands:await Gn(e,a,i,n,t)}}function or(e,t){return t.startsWith(`file:`)?t:`${e}@${t}`}async function sr(e,t,n){if(t){await tr([`install`,or(e,t),`--save-exact`,`--ignore-scripts`,`--no-fund`,`--no-audit`],n);return}await tr([`uninstall`,e,`--ignore-scripts`,`--no-fund`,`--no-audit`],n)}async function cr(e,t,n){let{name:r,requested:i}=ir(e,t,n);return rr(t,async()=>{let e=An(t),a=(await Pn(t)).dependencies?.[r];try{await tr([`install`,i,`--save-exact`,`--ignore-scripts`,`--no-fund`,`--no-audit`],e);let a=await ar(r,Mn(t,r),t,n);if(!a.pjson.version)throw new m(`Command Pack "${r}" has no package version.`,x.USAGE);return{name:r,version:a.pjson.version,commands:Object.keys(a.commands).sort()}}catch(t){try{await sr(r,a,e)}catch{}throw t}})}async function lr(e,t,n){let r=Qe(e);if(!Ve(N(r,`package.json`)))throw new m(`Command Pack path does not exist: ${r}`,x.USAGE);let i=(await In(r)).name;if(!i||!n.supported[i])throw new m(`Local package "${i??`(unnamed)`}" is not an allowlisted Command Pack for ${t.binName}.`,x.USAGE,Qn(t,n));let a=await ar(i,r,t,n);return rr(t,async()=>{await tr([`install`,`file:${r}`,`--save-exact`,`--ignore-scripts`,`--no-fund`,`--no-audit`],An(t));let e=await ar(i,Mn(t,i),t,n);return{name:i,version:e.pjson.version??a.pjson.version,commands:Object.keys(e.commands).sort()}})}async function ur(e,t,n){if(!n.supported[e])throw new m(`Command Pack "${e}" is not allowlisted for ${t.binName}.`,x.USAGE,Qn(t,n));if(!(e in((await Pn(t)).dependencies??{})))throw new m(`Command Pack "${e}" is not installed.`,x.USAGE);await rr(t,()=>tr([`uninstall`,e,`--ignore-scripts`,`--no-fund`,`--no-audit`],An(t)))}async function dr(e,t){return(await qn({},e,t)).reports}function fr(e,t){return{install:n=>cr(n,e,t),link:n=>lr(n,e,t),list:()=>dr(e,t),remove:n=>ur(n,e,t)}}function pr(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function mr(e){for(let t=0;t<e.length;t++){let n=e[t];if(n===`--config`)return{config:e[t+1]};if(n?.startsWith(`--config=`))return{config:n.slice(9)}}return{}}function hr(e){try{fn()}catch(t){B(t,e)}process.on(`SIGINT`,()=>{process.stderr.write(`
48
48
  Interrupted. Exiting.
49
- `),oe(500).finally(()=>process.exit(130))}),process.stdout.on(`error`,e=>{if(e.code===`EPIPE`)process.exit(0);else throw e})}function gr(e,t){let{binName:n,version:r,npmPackage:i,clientName:a}=t,o={binName:n,version:r,npmPackage:i,clientName:a},s=t.commandPacks??{supported:{}},c=fr(o,s),l;hr(n);let u=rn([on,cn,sn,an,ln]);function d(){return l||=qn(e,o,s),l}async function f(e){let t=Mt(A(mr(e)).file.language??b);return{registry:new Ot((await d()).commands,n,t),localize:e=>t.localize(e)}}function p(e,n,r){if(e.printHelp(n,process.stderr),n.length>0)return;let i=!1;try{let e=re(A(pt(r,{...S,...C,...g,...w})));i=!!(e.apiKey||e.console)}catch{}i?t.quickStartTasks?.length&&e.printQuickStart(t.quickStartTasks):e.printWelcome()}async function m(e,t,i){let a=kt(t,e);switch(a.kind){case`version`:process.stdout.write(`${n} ${r}\n`);return;case`help`:p(e,a.path,t);return;case`usageError`:B(a.error,n);return;case`run`:try{let e=j(a.command),t=St(a.command),n=pt(a.rest,{...S,...e,...t,...a.command.flags}),r=pr(n,[...Object.keys(S),...Object.keys(e)]),s=pr(n,Object.keys(a.command.flags??{})),l=await a.command.validate?.(s);if(l)throw new E(l);let d=A(r),f=k(d);await u({identity:o,path:a.path,command:a.command,flags:s,confirmed:n.yes===!0,localize:i,settings:f,sources:d,configStore:fe(d.configName),authStore:de(d),commandPacks:c,client:new _({identity:o,settings:f,...xe(d)})}),await oe(1e3)}catch(t){if(t instanceof E&&a.rest.length===0){e.printHelp(a.path,process.stderr);return}await oe(1e3),B(t,n)}return}}return{run(e=process.argv.slice(2)){return Promise.resolve().then(()=>f(e)).then(({registry:t,localize:n})=>m(t,e,n)).catch(e=>oe(1e3).finally(()=>B(e,n)))}}}const _r=`1.27.0`;function vr(e,t){process.stdout.write(se(e,t)+`
49
+ `),oe(500).finally(()=>process.exit(130))}),process.stdout.on(`error`,e=>{if(e.code===`EPIPE`)process.exit(0);else throw e})}function gr(e,t){let{binName:n,version:r,npmPackage:i,clientName:a}=t,o={binName:n,version:r,npmPackage:i,clientName:a},s=t.commandPacks??{supported:{}},c=fr(o,s),l;hr(n);let u=rn([on,cn,sn,an,ln]);function d(){return l||=qn(e,o,s),l}async function f(e){let t=Mt(A(mr(e)).file.language??b);return{registry:new Ot((await d()).commands,n,t),localize:e=>t.localize(e)}}function p(e,n,r){if(e.printHelp(n,process.stderr),n.length>0)return;let i=!1;try{let e=re(A(pt(r,{...S,...C,...g,...w})));i=!!(e.apiKey||e.console)}catch{}i?t.quickStartTasks?.length&&e.printQuickStart(t.quickStartTasks):e.printWelcome()}async function m(e,t,i){let a=kt(t,e);switch(a.kind){case`version`:process.stdout.write(`${n} ${r}\n`);return;case`help`:p(e,a.path,t);return;case`usageError`:B(a.error,n);return;case`run`:try{let e=j(a.command),t=St(a.command),n=pt(a.rest,{...S,...e,...t,...a.command.flags}),r=pr(n,[...Object.keys(S),...Object.keys(e)]),s=pr(n,Object.keys(a.command.flags??{})),l=await a.command.validate?.(s);if(l)throw new E(l);let d=A(r),f=k(d);await u({identity:o,path:a.path,command:a.command,flags:s,confirmed:n.yes===!0,localize:i,settings:f,sources:d,configStore:fe(d.configName),authStore:de(d),commandPacks:c,client:new _({identity:o,settings:f,...xe(d)})}),await oe(1e3)}catch(t){if(t instanceof E&&a.rest.length===0){e.printHelp(a.path,process.stderr);return}await oe(1e3),B(t,n)}return}}return{run(e=process.argv.slice(2)){return Promise.resolve().then(()=>f(e)).then(({registry:t,localize:n})=>m(t,e,n)).catch(e=>oe(1e3).finally(()=>B(e,n)))}}}const _r=`1.28.0`;function vr(e,t){process.stdout.write(se(e,t)+`
50
50
  `)}function yr(e){process.stdout.write(e+`
51
51
  `)}function br(e,t){!e||t||process.stderr.write(`request_id: ${e}\n`)}function xr(e,t,{gap:n=2}={}){let r=e.map((e,n)=>{let r=e.length;for(let e of t){let t=e[n]??``;t.length>r&&(r=t.length)}return r}),i=` `.repeat(n),a=e=>e.map((e,t)=>(e??``).padEnd(r[t])).join(i),o=[];o.push(a(e));for(let e of t)o.push(a(e));return o}function Sr(e){return e>=11904&&e<=40959||e>=63744&&e<=64255||e>=65072&&e<=65103||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=131072&&e<=195103}function V(e){let t=0;for(let n of e){let e=n.codePointAt(0)??0;t+=Sr(e)?2:1}return t}function Cr(e,t){let n=t-V(e);return n>0?e+` `.repeat(n):e}const wr=` │ `,Tr=[0,150,160],Er=[176,205,250],Dr=[160,160,170];function Or(e){if(`NO_COLOR`in process.env)return 0;let t=process.env.FORCE_COLOR;if(t!=null){if(t===`0`||t===`false`)return 0;if(t===`3`||t===`truecolor`)return 3;if(t===`2`)return 2;if(t===`1`||t===`true`||t===``)return 1}if(!ht(e))return 0;let n=process.env.COLORTERM;if(n===`truecolor`||n===`24bit`)return 3;let r=process.env.TERM??``;return r===`dumb`?1:/-256(color)?$/i.test(r)?2:1}function kr(e,t,n){return e===t&&t===n?e<8?16:e>248?231:232+Math.round((e-8)/247*24):16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(n/255*5)}function Ar(e,t,n,r){let i=Math.max(e,t,n)>127,a=i?128:64;return(r===48?i?100:40:i?90:30)+(e>=a|(t>=a?2:0)|(n>=a?4:0))}function jr(e,t,n,r,i=38){return e>=3?`${i};2;${t};${n};${r}`:e===2?`${i};5;${kr(t,n,r)}`:String(Ar(t,n,r,i))}function Mr(e,[t,n,r],i){return e<=0?i:`\x1b[${jr(e,t,n,r)}m${i}\x1b[0m`}function Nr(e,t,n){return t<=0?e:`\x1b[1;${jr(t,255,255,255,38)};${jr(t,n[0],n[1],n[2],48)}m${e}\x1b[0m`}function Pr(e,t){let n=t-V(e);return n>0?` `.repeat(n)+e:e}function Fr(e,t,n=20,r=process.stdout){return Ir(e,t,n,Or(r))}function Ir(e,t,n,r){let i=e==null?0:Math.max(0,Math.min(100,e)),a=e!=null,o=a?Math.round(i/100*n):0,s=``,c=``;for(let e=0;e<n;e++)a&&e<o?(s+=`█`,c+=Mr(r,Tr,`█`)):(s+=` `,c+=` `);let l=a?Er:Dr;return s+=` ${t}`,c+=` ${Mr(r,l,t)}`,{plain:s,colored:c}}function Lr(e){let t=Or(e.out??process.stdout),n=e.align??[],r=e.barColumns??[],i=e.headers.length,a={};for(let n of r){let r=n.width??20,i=[];for(let a=0;a<e.rows.length;a++){let e=n.percents[a]??null,o=n.labels?.[a]??(e==null?`-`:`${Number.isInteger(e)?e:e.toFixed(1)}%`);i.push(Ir(e,o,r,t))}a[n.index]=i}let o=(t,n)=>a[n]?a[n][t].plain:e.rows[t][n]??``,s=e.headers.map((t,n)=>{let r=V(t);for(let t=0;t<e.rows.length;t++){let e=V(o(t,n));e>r&&(r=e)}return r}),c=[],l=e.headers.map((e,t)=>n[t]===`right`?Pr(e,s[t]):Cr(e,s[t])).join(wr),u=Math.max(V(l),...e.rows.map((e,t)=>V(Array.from({length:i},(e,n)=>o(t,n)).join(wr))));c.push(Nr(` ${Cr(l,u)} `,t,Tr));let d=` ${Mr(t,Tr,`│`)} `;for(let t=0;t<e.rows.length;t++){let r=[];for(let o=0;o<i;o++){let i=s[o];if(a[o]){let e=a[o][t],n=i-V(e.plain);r.push(n>0?e.colored+` `.repeat(n):e.colored);continue}let c=e.rows[t][o]??``,l=e.cellColor?.(t,o,c),u=n[o]===`right`?Pr(c,i):Cr(c,i);l?r.push(n[o]===`right`?u.slice(0,u.length-c.length)+l:l+u.slice(c.length)):r.push(u)}let o=` `;for(let e=0;e<i;e++)o+=r[e],e<i-1&&(o+=d);c.push(o)}return c}const Rr=[`⠋`,`⠙`,`⠹`,`⠸`,`⠼`,`⠴`,`⠦`,`⠧`,`⠇`,`⠏`];function zr(e){let t=process.stderr.isTTY,n=0,r=null,i=e;return{start(){t&&(r=setInterval(()=>{process.stderr.write(`\r${Rr[n%Rr.length]} ${i}`),n++},80))},update(e){i=e},stop(e){r&&=(clearInterval(r),null),t&&(process.stderr.write(`\r\x1B[K`),e&&process.stderr.write(`${e}\n`))}}}function Br(e,t=``){let n=process.stderr.isTTY;return{update(r){if(!n)return;let i=Math.min(1,r/e),a=Math.round(30*i),o=30-a,s=`█`.repeat(a)+`░`.repeat(o),c=`${Math.round(i*100)}%`;process.stderr.write(`\r${t} ${s} ${c}`)},finish(){n&&process.stderr.write(`
52
52
  `)}}}async function Vr(e,t,n){let r=Date.now()+n.timeoutSec*1e3,i=zr(`Polling...`);t.quiet||i.start();try{for(;Date.now()<r;){let r=await e.requestJson({path:n.url});if(n.getStatus&&!t.quiet&&i.update(`Status: ${n.getStatus(r)}`),n.isComplete(r))return i.stop(`Done.`),r;if(n.isFailed(r)){i.stop(`Failed.`),t.verbose&&process.stderr.write(`[verbose] Task response: ${JSON.stringify(r,null,2)}\n`);let e=n.getErrorMessage?.(r);throw new m(e?`Task failed: ${e}`:`Task failed.`,x.GENERAL,e?void 0:`Use --verbose to see full API response details.`)}await new Promise(e=>setTimeout(e,n.intervalSec*1e3))}}finally{i.stop()}throw new m(`Polling timed out.`,x.TIMEOUT,`Try increasing --timeout or check task status manually.`)}async function Hr(e,t,n){let r=await fetch(e);if(!r.ok)throw new m(`Download failed: HTTP ${r.status}`,x.GENERAL);let i=Number(r.headers.get(`content-length`)||0),a=r.body?.getReader();if(!a)throw new m(`No response body`,x.GENERAL);Fe(Me(t),{recursive:!0});let o=Pe(t),s=i>0&&!n?.quiet?Br(i,`Downloading`):null,c=0,l=!1;try{let e=new Promise((e,t)=>{o.on(`error`,t)});for(;;){let{done:t,value:n}=await Promise.race([a.read(),e]);if(t)break;o.write(n)||await new Promise(e=>o.once(`drain`,()=>e())),c+=n.byteLength,s?.update(c)}l=!0}finally{if(a.releaseLock(),s?.finish(),await new Promise((e,t)=>{o.on(`finish`,e),o.on(`error`,t),o.end()}),!l)try{Le(t)}catch{}}return{size:c}}function Ur(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:`${(e/(1024*1024*1024)).toFixed(1)} GB`}function Wr(e){return Math.max(1,e.concurrent??1)}async function Gr(e,t,n,r=`requests`){if(e<=1)return[await n(0)];t.quiet||process.stderr.write(`[Concurrent: ${e} ${r}]\n`);let i=Array.from({length:e},(e,t)=>n(t));return Promise.all(i)}async function Kr(e,t,n){return Promise.all(e.map(({url:e,destPath:r})=>t(e,r,n).then(()=>r)))}const qr={"qwen-image-2.0":{"16:9":`2688*1536`,"9:16":`1536*2688`,"1:1":`2048*2048`,"4:3":`2368*1728`,"3:4":`1728*2368`},"qwen-image-fixed":{"16:9":`1664*928`,"4:3":`1472*1104`,"1:1":`1328*1328`,"3:4":`1104*1472`,"9:16":`928*1664`},wan27:{"16:9":`2688*1536`,"9:16":`1536*2688`,"1:1":`2048*2048`,"4:3":`2368*1728`,"3:4":`1728*2368`},"z-image":{"1:1":`1024*1024`,"16:9":`1280*720`,"9:16":`720*1280`,"4:3":`1152*864`,"3:4":`864*1152`,"3:2":`1248*832`,"2:3":`832*1248`},wan26:{"1:1":`1280*1280`,"16:9":`1696*960`,"9:16":`960*1696`,"4:3":`1472*1104`,"3:4":`1104*1472`},"wan-legacy":{"1:1":`1024*1024`,"16:9":`1280*720`,"9:16":`720*1280`,"3:4":`768*1152`,"4:3":`1152*768`},"wanx-v1":{"1:1":`1024*1024`,"9:16":`720*1280`,"3:4":`768*1152`,"16:9":`1280*720`},"wan25-i2i":{"1:1":`1280*1280`,"16:9":`1280*720`,"9:16":`720*1280`,"4:3":`1152*864`,"3:4":`864*1152`}};function Jr(e,t){if(e)return qr[typeof t==`boolean`?t?`qwen-image-2.0`:`qwen-image-fixed`:t][e]??e}const Yr={"en-US":`Enable watermark (true/false). Omit flag to use the Profile setting or CLI default (true).`,"zh-CN":`是否启用水印(true/false)。不传时使用 Profile 配置或 CLI 默认值 true。`},Xr={"en-US":`Enable prompt extend (true/false). Omit flag to use CLI default (true).`,"zh-CN":`是否启用提示词扩展(true/false)。不传时使用 CLI 默认值 true。`},Zr={"en-US":`Enable prompt extend (true/false). Omit flag: true for qwen-image sync; parameter omitted on async models (API default).`,"zh-CN":`是否启用提示词扩展(true/false)。不传时:qwen-image 同步调用默认为 true;异步模型不传该参数(使用 API 默认值)。`},Qr={"en-US":`Enable prompt extend (true/false). Omit flag to omit the parameter (DashScope default).`,"zh-CN":`是否启用提示词扩展(true/false)。不传时省略该参数(使用 DashScope 默认值)。`};var H=class extends Error{code;step;details;constructor(e,t,n){super(t),this.name=`PipelineError`,this.code=e,this.step=n?.step,this.details=n?.details}toJSON(){return{code:this.code,message:this.message,...this.step?{step:this.step}:{},...this.details?{details:this.details}:{}}}};function $r(e,t){return e instanceof H?e:new H(`step_execution_error`,e instanceof Error?e.message:String(e),{step:t})}var ei=class{handlers=new Map;outputSchemas=new Map;registerStep(e,t,n){this.handlers.set(e,t),n&&this.outputSchemas.set(e,n)}executeStep(e,t,n){let r=this.handlers.get(e);if(!r)throw new H(`unknown_step`,`Unknown step type: ${e}`,{details:{available:this.listSteps()}});return r(t,n)}hasStep(e){return this.handlers.has(e)}listSteps(){return Array.from(this.handlers.keys()).sort()}getOutputSchema(e){return this.outputSchemas.get(e)}};const ti=new ei;function ni(){return ti}function ri(e,t,n,r){let i,a;n instanceof ei?(i=n,a=r):(i=ti,a=n??r),i.registerStep(e,t,a)}const ii=new Set([`image/generate`,`image/edit`,`video/generate`]);function ai(e,t,n){return!ii.has(e)||t.watermark!==void 0?t:{...t,watermark:n.watermark}}function oi(){let e=A({}),t={...k(e),output:`json`,outputExplicit:!0,quiet:!0},n={binName:`bl`,version:`0.0.0-dev`,npmPackage:`bailian-cli`,clientName:`bailian-cli`},r;try{r=me(e)}catch{}return{client:new _({identity:n,settings:t,baseUrl:be(e),apiCred:r}),settings:t}}const si=[`download`,`out-dir`,`output`];function ci(e){return e.startsWith(`./`)||e.startsWith(`../`)}function li(e,t){let n={},r=[];for(let[i,a]of Object.entries(e))typeof a==`string`&&ci(a)?(n[i]=Qe(t,a),r.push(i)):n[i]=a;return{input:n,resolvedKeys:r}}async function ui(e,t,n){let r=[];for(let i of t){let t=e[i];typeof t==`string`&&(await He(t).then(()=>!0,()=>!1)||r.push(`Step "${n}" input "${i}" references file that does not exist: ${t}`))}return r}function di(e){if(e===void 0)return;if(typeof e==`number`)return Number.isFinite(e)&&e>0?e:void 0;let t=e.match(/^(\d+(?:\.\d+)?)(ms|s|m)?$/);if(!t)return;let n=Number(t[1]);if(!Number.isFinite(n)||n<=0)return;let r=t[2]??`s`;return r===`ms`?n/1e3:r===`m`?n*60:n}function U(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function fi(e,t){if(Array.isArray(e)){e.forEach(e=>fi(e,t));return}if(U(e)){`$from`in e&&typeof e.$from==`string`&&t.add(e.$from);for(let n of Object.values(e))fi(n,t)}}async function pi(e,t){let n=[];for(let r of e)for(let[e,i]of Object.entries(r.input)){if(si.includes(e)||typeof i!=`string`||!ci(i))continue;let a=Qe(t,i);await He(a).then(()=>!0,()=>!1)||n.push(`Step "${r.id}" input "${e}" references file that does not exist: ${a}`)}return n}async function mi(e,t,n){if(!t.message)throw new H(`missing_input`,`text/chat requires 'message' input`,{step:`text/chat`});let r=t.model||`qwen3.8-max`,i=[];t.system&&i.push({role:`system`,content:t.system}),i.push({role:`user`,content:t.message});let a={model:r,messages:i,max_tokens:t[`max-tokens`]??4096,stream:!1};t.temperature!==void 0&&(a.temperature=t.temperature),t[`top-p`]!==void 0&&(a.top_p=t[`top-p`]),t[`enable-thinking`]&&(a.enable_thinking=!0,t[`thinking-budget`]!==void 0&&(a.thinking_budget=t[`thinking-budget`]));let o=te();return await e.client.requestJson({path:o,method:`POST`,body:a,timeout:n.blRequestTimeoutSeconds,signal:n.signal})}async function hi(e,t,n){let r=t.model||`qwen3-vl-plus`,i=Array.isArray(t.image)?t.image:t.image?[t.image]:[],a=t.video?`Describe the video.`:`Describe the image.`,o=t.prompt||a,s=[];if(t.video){let i=t.video;M(i)&&(i=await e.client.uploadFile(i,r,{signal:n.signal})),s.push({type:`video_url`,video_url:{url:i}})}for(let t of i){let i=t;M(t)&&(i=await e.client.uploadFile(t,r,{signal:n.signal})),s.push({type:`image_url`,image_url:{url:i}})}s.push({type:`text`,text:o});let c={model:r,messages:[{role:`user`,content:s}]},l=te();return await e.client.requestJson({path:l,method:`POST`,body:c,signal:n.signal})}async function gi(e,t,n){if(!t.prompt)throw new H(`missing_input`,`image/generate requires 'prompt' input`,{step:`image/generate`});let r=t.model||`qwen-image-3.0`,i=ye(r),a=t.n??1,o=ge(t[`prompt-extend`],i.promptExtendDefault,`prompt-extend`),s={size:Jr(t.size,i.sizeProfile),n:a,seed:t.seed,prompt_extend:o,watermark:Ce(t.watermark,e.settings.watermark)},c=i.inputStyle===`prompt`?{model:r,input:{prompt:t.prompt,negative_prompt:t[`negative-prompt`]||void 0},parameters:s}:{model:r,input:{messages:[{role:`user`,content:[{text:t.prompt}]}]},parameters:{...s,negative_prompt:t[`negative-prompt`]||void 0}};if(i.useSync){let r=await e.client.requestJson({path:i.path,method:`POST`,body:c,signal:n.signal}),a=r.output.choices.flatMap(e=>e.message?.content||[]).map(e=>e.image).filter(Boolean),o=await vi(a,t[`out-dir`],t[`out-prefix`]);return{urls:a,request_id:r.request_id,...o?{saved:o}:{}}}let l=(await e.client.requestJson({path:i.path,method:`POST`,body:c,async:!0,signal:n.signal})).output.task_id,u=await Ci(e,l,n),d=await vi(Array.isArray(u.urls)?u.urls:[],t[`out-dir`],t[`out-prefix`]);return d&&(u.saved=d),u}async function _i(e,t,n){if(!t.prompt)throw new H(`missing_input`,`image/edit requires 'prompt' input`,{step:`image/edit`});let r=Array.isArray(t.image)?t.image:t.image?[t.image]:[],i=t.model||`qwen-image-3.0`,a=ve(i),o=t.n??1,s=ge(t[`prompt-extend`],a.promptExtendDefault,`prompt-extend`),c=[];for(let t of r){let r=t;M(t)&&(r=await e.client.uploadFile(t,i,{signal:n.signal})),c.push(r)}let l={size:Jr(t.size,a.sizeProfile),n:o,seed:t.seed,prompt_extend:s,watermark:Ce(t.watermark,e.settings.watermark)},u;if(a.inputStyle===`function-base-image`){let e=c[0];if(!e)throw new H(`missing_input`,`image/edit with wanx*-imageedit requires at least one image`,{step:`image/edit`});u={model:i,input:{function:t.function||`description_edit`,prompt:t.prompt,base_image_url:e},parameters:l}}else if(a.inputStyle===`prompt-images`)u={model:i,input:{prompt:t.prompt,images:c,negative_prompt:t[`negative-prompt`]||void 0},parameters:l};else{let e=c.map(e=>({image:e}));e.push({text:t.prompt}),u={model:i,input:{messages:[{role:`user`,content:e}]},parameters:{...l,negative_prompt:t[`negative-prompt`]||void 0}}}if(a.useSync){let r=await e.client.requestJson({path:a.path,method:`POST`,body:u,signal:n.signal}),i=r.output.choices.flatMap(e=>e.message?.content||[]).map(e=>e.image).filter(Boolean),o=await vi(i,t[`out-dir`],t[`out-prefix`]);return{urls:i,request_id:r.request_id,...o?{saved:o}:{}}}let d=(await e.client.requestJson({path:a.path,method:`POST`,body:u,async:!0,signal:n.signal})).output.task_id,f=await Ci(e,d,n),p=await vi(Array.isArray(f.urls)?f.urls:[],t[`out-dir`],t[`out-prefix`]);return p&&(f.saved=p),f}async function vi(e,t,n){if(!t||e.length===0)return;await Ue(t,{recursive:!0});let r=n&&n.length>0?n:`image`,i=e.length===1?[{url:e[0],destPath:N(t,`${r}.png`)}]:e.map((e,n)=>({url:e,destPath:N(t,`${r}_${String(n+1).padStart(3,`0`)}.png`)})),a=[];for(let{url:e,destPath:t}of i)await Hr(e,t,{quiet:!0}),a.push(t);return a}async function yi(e,t,n){if(!t.prompt)throw new H(`missing_input`,`video/generate requires 'prompt' input`,{step:`video/generate`});let r=t.model||`wan3.0-video`,i;t.image&&(i=M(t.image)?await e.client.uploadFile(t.image,r,{signal:n.signal}):t.image);let a={model:r,input:{prompt:t.prompt,negative_prompt:t[`negative-prompt`]||void 0,...i?{media:[{type:`first_frame`,url:i}]}:{}},parameters:{resolution:t.resolution||void 0,ratio:t.ratio||void 0,duration:t.duration,prompt_extend:ge(t[`prompt-extend`],void 0,`prompt-extend`),watermark:Ce(t.watermark,e.settings.watermark),seed:t.seed}};De(a.parameters);let o=Ae(),s=(await e.client.requestJson({path:o,method:`POST`,body:a,async:!0,signal:n.signal})).output.task_id;return await Ti(e,s,(t[`poll-interval`]??10)*1e3,(n.timeoutSeconds??900)*1e3,n)}async function bi(e,t,n){let r=t.text;if(!r&&t[`text-file`]){let{readFileSync:e}=await import(`node:fs`);r=e(t[`text-file`],`utf-8`).trim()}if(!r)throw new H(`missing_input`,`speech/synthesize requires 'text' input`,{step:`speech/synthesize`});let i=t.model||`cosyvoice-v3-flash`,a={model:i,input:{text:r,voice:t.voice,format:t.format,sample_rate:t[`sample-rate`],volume:t.volume,rate:t.rate,pitch:t.pitch,seed:t.seed,language_hints:t.language?[t.language]:void 0,instruction:t.instruction,enable_ssml:t[`enable-ssml`]}};De(a.input);let o=Ee(),s=await e.client.requestJson({path:o,method:`POST`,body:a,signal:n.signal});return{audio_url:s.output.audio.url,url_expires_at:s.output.audio.expires_at,model:i,voice:t.voice,request_id:s.request_id}}async function xi(e,t,n){let r=Array.isArray(t.url)?t.url:t.url?[t.url]:[];if(r.length===0)throw new H(`missing_input`,`speech/recognize requires 'url' input`,{step:`speech/recognize`});let i=t.model||`fun-asr`,a=he(i);if(a.kind===`unsupported`)throw new H(`invalid_input`,a.unsupportedReason??`Unsupported ASR model: ${i}`,{step:`speech/recognize`});if(a.kind===`sync-flash`){if(r.length!==1)throw new H(`invalid_input`,`Model "${i}" is a sync Flash ASR model and accepts exactly one url (got ${r.length})`,{step:`speech/recognize`});let e=[];if(t.diarization&&e.push(`diarization`),t[`speaker-count`]!==void 0&&e.push(`speaker-count`),a.flashFamily===`qwen3`&&(t[`vocabulary-id`]!==void 0&&e.push(`vocabulary-id`),t.vocabulary!==void 0&&e.push(`vocabulary`),t.context!==void 0&&e.push(`context`)),t[`channel-id`]!==void 0&&e.push(`channel-id`),e.length>0)throw new H(`invalid_input`,`Model "${i}" uses sync Flash ASR and does not support: ${e.join(`, `)}`,{step:`speech/recognize`})}if(a.kind===`async-filetrans`&&a.asyncInputStyle===`file_url`&&r.length!==1)throw new H(`invalid_input`,`Model "${i}" accepts exactly one url (got ${r.length})`,{step:`speech/recognize`});let o=[];for(let t of r)M(t)?o.push(await e.client.uploadFile(t,i,{signal:n.signal})):o.push(t);if(a.kind===`sync-flash`){let r=a.flashFamily,s=ee({model:i,audioUrl:o[0],language:t.language,vocabularyId:t[`vocabulary-id`],vocabulary:t.vocabulary,context:t.context,flashFamily:r}),c=await e.client.requestJson({path:a.path,method:`POST`,headers:{"X-DashScope-SSE":`disable`},body:s,signal:n.signal});return{text:ae(c,r),model:i,mode:`sync`,raw:c}}let s=O(a.asyncLanguageStyle??`language_hints`,t.language),c={model:i,input:{...a.asyncInputStyle===`file_url`?{file_url:o[0]}:{file_urls:o},...t.context?{context:D(t.context)}:{}},parameters:{channel_id:t[`channel-id`]===void 0?void 0:[t[`channel-id`]],...s,diarization_enabled:t.diarization,speaker_count:t[`speaker-count`],vocabulary_id:t[`vocabulary-id`],vocabulary:t.vocabulary}};De(c.parameters);let l=(await e.client.requestJson({path:Te(),method:`POST`,body:c,async:!0,signal:n.signal})).output.task_id,u=await Ei(e,l,(t[`poll-interval`]??2)*1e3,(n.timeoutSeconds??300)*1e3,n),d=ne(u.output),f={task_id:u.output.task_id,task_status:u.output.task_status,request_id:u.request_id,mode:`async`,model:i};if(u.output.results&&(f.results=u.output.results),u.output.result&&(f.result=u.output.result,typeof u.output.result.transcription_url==`string`&&(f.transcription_url=u.output.result.transcription_url)),u.output.task_metrics&&(f.task_metrics=u.output.task_metrics),u.usage&&(f.usage=u.usage),d.length===0)return f;let p=[],m=[];for(let e of d){if(!e.transcription_url)continue;let t=await fetch(e.transcription_url,{signal:n.signal});if(!t.ok)throw new H(`async_task_failed`,`Failed to download transcription: HTTP ${t.status}`,{step:`speech/recognize`,details:{taskId:l,url:e.transcription_url}});let r=await t.json();m.push(r);let i=r.transcripts;if(i?.length)for(let e of i)if(e.sentences?.length)for(let t of e.sentences)t.text&&p.push(t.text);else e.text&&p.push(e.text)}return{...f,text:p.join(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bailian-cli-runtime",
3
- "version": "1.27.0",
3
+ "version": "1.28.0",
4
4
  "description": "Runtime framework for bailian-cli (createCli, registry, args, output, pipeline). See https://www.npmjs.com/package/bailian-cli for usage.",
5
5
  "homepage": "https://bailian.console.aliyun.com/cli",
6
6
  "bugs": {
@@ -30,7 +30,7 @@
30
30
  "boxen": "^8.0.1",
31
31
  "chalk": "^5.6.2",
32
32
  "undici": "^6.27.0",
33
- "bailian-cli-core": "1.27.0"
33
+ "bailian-cli-core": "1.28.0"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@clack/prompts": "^0.7.0",