qlogicagent 2.10.1 → 2.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +2 -2
- package/dist/index.js +2 -2
- package/dist/types/agent/agent.d.ts +1 -1
- package/dist/types/agent/tool-loop.d.ts +1 -1
- package/dist/types/agent/types.d.ts +1 -1
- package/dist/types/cli/handlers/turn-handler.d.ts +1 -1
- package/dist/types/cli/tool-bootstrap.d.ts +3 -3
- package/dist/types/index.d.ts +2 -2
- package/dist/types/llm/index.d.ts +1 -1
- package/dist/types/orchestration/tool-cascade.d.ts +2 -2
- package/dist/types/provider-core/adapters/aliyun-oss-file-upload-adapter.d.ts +44 -0
- package/dist/types/provider-core/adapters/gemini-file-upload-adapter.d.ts +26 -0
- package/dist/types/provider-core/adapters/hub-oss-file-upload-adapter.d.ts +29 -0
- package/dist/types/provider-core/adapters/index.d.ts +10 -0
- package/dist/types/provider-core/adapters/openai-file-upload-adapter.d.ts +38 -0
- package/dist/types/provider-core/adapters/volcengine-file-upload-adapter.d.ts +24 -0
- package/dist/types/provider-core/builtin-providers.d.ts +10 -0
- package/dist/types/provider-core/constants.d.ts +1 -0
- package/dist/types/provider-core/credentials.d.ts +1 -0
- package/dist/types/provider-core/debug-transport.d.ts +12 -0
- package/dist/types/provider-core/errors.d.ts +11 -0
- package/dist/types/provider-core/events.d.ts +48 -0
- package/dist/types/provider-core/file-upload-service.d.ts +68 -0
- package/dist/types/provider-core/gemini-schema-utils.d.ts +17 -0
- package/dist/types/provider-core/index.d.ts +37 -0
- package/dist/types/provider-core/llm-client.d.ts +43 -0
- package/dist/types/provider-core/media-client.d.ts +42 -0
- package/dist/types/provider-core/media-transport.d.ts +176 -0
- package/dist/types/provider-core/media.d.ts +2 -0
- package/dist/types/provider-core/model-catalog.d.ts +82 -0
- package/dist/types/provider-core/model-detection.d.ts +22 -0
- package/dist/types/provider-core/paths.d.ts +2 -0
- package/dist/types/provider-core/provider-def.d.ts +214 -0
- package/dist/types/provider-core/provider-registry.d.ts +59 -0
- package/dist/types/provider-core/provider-tool-api.d.ts +44 -0
- package/dist/types/provider-core/retry.d.ts +37 -0
- package/dist/types/provider-core/transport.d.ts +281 -0
- package/dist/types/provider-core/transports/anthropic-messages.d.ts +65 -0
- package/dist/types/provider-core/transports/gemini-cache-api.d.ts +86 -0
- package/dist/types/provider-core/transports/gemini-file-api.d.ts +90 -0
- package/dist/types/provider-core/transports/gemini-generatecontent.d.ts +56 -0
- package/dist/types/provider-core/transports/gemini-lyria-realtime.d.ts +117 -0
- package/dist/types/provider-core/transports/gemini-media.d.ts +53 -0
- package/dist/types/provider-core/transports/media-resolve.d.ts +50 -0
- package/dist/types/provider-core/transports/minimax-media.d.ts +55 -0
- package/dist/types/provider-core/transports/openai-chat.d.ts +81 -0
- package/dist/types/provider-core/transports/openai-media.d.ts +24 -0
- package/dist/types/provider-core/transports/openai-responses.d.ts +63 -0
- package/dist/types/provider-core/transports/qwen-media.d.ts +50 -0
- package/dist/types/provider-core/transports/realtime-transport.d.ts +183 -0
- package/dist/types/provider-core/transports/volcengine-grounding.d.ts +58 -0
- package/dist/types/provider-core/transports/volcengine-media.d.ts +93 -0
- package/dist/types/provider-core/transports/volcengine-responses.d.ts +64 -0
- package/dist/types/provider-core/transports/zhipu-media.d.ts +82 -0
- package/dist/types/provider-core/transports/zhipu-tool-api.d.ts +35 -0
- package/dist/types/provider-core/wire-types.d.ts +51 -0
- package/dist/types/runtime/execution/dream-agent.d.ts +1 -1
- package/dist/types/runtime/execution/forked-agent.d.ts +1 -1
- package/dist/types/runtime/hooks/context-compression.d.ts +1 -1
- package/dist/types/runtime/session/session-persistence.d.ts +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -12,7 +12,7 @@ ${m}`}))}if(c.length===0)return o;let d=[...o],u=-1;for(let p=0;p<d.length;p++)d
|
|
|
12
12
|
|
|
13
13
|
${f}`},b=[...r,...u,y,...m],k=Date.now()-n,x=b.reduce((P,I)=>P+this.config.estimateTokens(I),0);return{messages:b,droppedCount:p.length,strategy:"head-tail-protected",metrics:{tokensBefore:i,tokensAfter:x,compressionRatio:i>0?x/i:1,latencyMs:k,usedLlm:!0,cacheInvalidated:!0}}}},fo=class{config;constructor(e){this.config=e}compress(e,t){let n=yr(e),r=this.config.inner.compress(e,t),s=yr(r.messages),i=n!==s&&r.droppedCount>0;return i&&this.config.onCacheInvalidated?.({droppedCount:r.droppedCount,strategy:r.strategy}),{...r,metrics:{...r.metrics??{tokensBefore:0,tokensAfter:0,compressionRatio:0,latencyMs:0,usedLlm:!1},cacheInvalidated:i}}}async compressAsync(e,t){let n=yr(e),r=yo(this.config.inner)?await this.config.inner.compressAsync(e,t):this.config.inner.compress(e,t),s=yr(r.messages),i=n!==s&&r.droppedCount>0;return i&&this.config.onCacheInvalidated?.({droppedCount:r.droppedCount,strategy:r.strategy}),{...r,metrics:{...r.metrics??{tokensBefore:0,tokensAfter:0,compressionRatio:0,latencyMs:0,usedLlm:!1},cacheInvalidated:i}}}},Ld={modelContextWindow:128e3,targetUsageRatio:.75,minBudget:16e3,maxBudget:12e4};go=class{events=[];maxEvents;constructor(e=100){this.maxEvents=e}record(e){this.events.push(e),this.events.length>this.maxEvents&&this.events.shift()}snapshot(){let e=this.events.length;if(e===0)return{totalCompressions:0,totalLlmCalls:0,totalCacheInvalidations:0,averageCompressionRatio:1,averageLatencyMs:0,totalTokensSaved:0,recentEvents:[]};let t=0,n=0,r=0,s=0,i=0;for(let a of this.events)t+=a.tokensBefore>0?a.tokensAfter/a.tokensBefore:1,n+=a.latencyMs,r+=Math.max(0,a.tokensBefore-a.tokensAfter),a.usedLlm&&s++,a.cacheInvalidated&&i++;return{totalCompressions:e,totalLlmCalls:s,totalCacheInvalidations:i,averageCompressionRatio:t/e,averageLatencyMs:n/e,totalTokensSaved:r,recentEvents:this.events.slice(-10)}}reset(){this.events.length=0}},ho=class{engines=new Map;activeId;register(e){this.engines.set(e.id,e)}activate(e){return this.engines.has(e)?(this.activeId=e,!0):!1}getActive(){return this.activeId?this.engines.get(this.activeId):void 0}listEngines(){return Array.from(this.engines.values()).map(e=>({id:e.id,label:e.label,active:e.id===this.activeId}))}};yv=new Set(["file_read","read","Read","bash","shell","Bash","grep","search","Grep","grep_search","glob","Glob","file_search","web_search","WebSearch","web_fetch","WebFetch","file_edit","edit","Edit","file_write","write","Write"]),on=class{constructor(e=20,t=vi){this.preserveRecentCount=e;this.estimateTokens=t}preserveRecentCount;estimateTokens;compress(e,t){if(e.length<=this.preserveRecentCount)return{messages:e,droppedCount:0,strategy:"micro-compact"};let n=e.length-this.preserveRecentCount,r=0,s=0;return{messages:e.map((a,c)=>{if(c>=n||a.role!=="tool"||typeof a.content!="string"||!a.name||!yv.has(a.name)||a.content.length<=200)return a;let l=this.estimateTokens(a);return s+=l,r++,{...a,content:`[result cleared \u2014 ${a.content.length} chars]`}}),droppedCount:r,strategy:"micro-compact",metrics:r>0?{tokensBefore:0,tokensAfter:0,compressionRatio:0,latencyMs:0,usedLlm:!1,cacheInvalidated:!1}:void 0}}}});function xi(){return{stages:[]}}function Ri(o,e,t){let n=t?.thresholdMessages??40;if(o.filter(a=>a.role!=="system").length<=n)return{messages:o,stagedCount:0};let s=Nd(o,e),i=kv(s,e,n);if(i.length===0)return{messages:s,stagedCount:0};for(let a of i)e.stages.push(a);return s=Nd(o,e),{messages:s,stagedCount:i.length}}function _i(o,e){let t=0;for(let n of e.stages)n.committed||(n.committed=!0,t++);return t===0?{messages:o,committed:0}:{messages:$d(o,e),committed:t}}function Nd(o,e){return e.stages.filter(n=>n.committed).length===0?o:$d(o,e)}function $d(o,e){let t=e.stages.filter(r=>r.committed).sort((r,s)=>s.range[0]-r.range[0]),n=[...o];for(let r of t){let[s,i]=r.range;if(s>=n.length)continue;let a=Math.min(i,n.length),c={role:"system",content:r.summary};n.splice(s,a-s,c)}return n}function kv(o,e,t){let n=Math.max(0,o.length-Math.floor(t/2)),r=[],s=new Set(e.stages.map(c=>`${c.range[0]}-${c.range[1]}`)),i=-1,a=0;for(let c=0;c<n;c++){let l=o[c];if(l.role==="tool"||l.role==="assistant"&&typeof l.content=="string"&&l.content==="")i<0&&(i=c),a++;else{if(a>=3){let u=`${i}-${i+a}`;s.has(u)||r.push({id:`collapse_${i}_${i+a}`,range:[i,i+a],summary:`[${a} tool results collapsed]`,committed:!1})}i=-1,a=0}}if(a>=3){let c=`${i}-${i+a}`;s.has(c)||r.push({id:`collapse_${i}_${i+a}`,range:[i,i+a],summary:`[${a} tool results collapsed]`,committed:!1})}return r}var Ud=N(()=>{"use strict"});function ua(){return{maxRoundsLimit:100,defaultMaxRounds:25,defaultTemperature:0,maxToolBudgetCap:100,defaultToolBudget:Ai,maxConsecutiveFailures:Pi,maxIdenticalCallRepeats:Ii,defaultContextWindowTokens:Ei,responseBufferTokens:Ci,defaultMaxOutputTokens:Mi,defaultModelMaxOutputTokens:Oi,maxOutputTokensRecoveryLimit:Di,escalatedMaxOutputTokens:Li,diminishingReturnsThreshold:vr,diminishingReturnsMinContinuations:Ni,defaultMaxResultSizeChars:$i,maxToolResultsPerMessageChars:Ui,toolResultPreviewBytes:Sr,heartbeatIntervalMs:ji,max529Retries:Fi,maxApiRetries:Dn,persistentRetryMaxBackoffMs:vv,persistentRetryResetCapMs:Sv,compressionTargetUsageRatio:Tv,compressionMinBudget:wv,compressionMaxBudget:xv,reactiveCompactMaxFailures:Rv,reactiveCompactMinMessages:_v,reactiveCompactTargetPercent:Av,maxSkillsPerProject:Bi,maxSkillsGlobal:jd,minToolCallsForSkill:Wi,minDistinctToolsForSkill:Gi,skillCreationCooldownMs:Hi,skillInjectionMaxChars:Pv,skillInjectionMaxCount:Iv,skillRecallMaxSkills:Vi,skillRecallMaxContentChars:Ki,skillRecallCacheTtlMs:zi,maxForkDepth:qi,maxSessions:Xi,taskSummaryTurnThreshold:Ji,taskSummaryRegenInterval:Qi,maxIncludeDepth:Zi,maxInstructionChars:Ev,instructionsMaxFileSize:ea,instructionsMaxDirSize:ta,mediaMaxDownloadSize:na,mediaMaxUploadSize:Cv,mediaDownloadTimeoutMs:oa,acpMaxSpawnRetries:ra,acpRetryBackoffBase:sa,acpRuntimeRestartMax:ia,acpRuntimeRestartBackoffBase:aa,taskPollIntervalMs:Mv,taskStoppedDisplayMs:Ov,taskPanelGraceMs:Dv,memoryPrefetchMaxSessionBytes:ca,memoryPrefetchLimitPerRecall:la,memoryMaxSurfacedEntries:da,dreamMinIntervalHours:Lv,dreamMinSessions:Nv,dreamScanIntervalMs:$v,idleDreamMinutes:Uv,dreamCooldownMs:jv,dreamMaxDurationMs:Fv,teamBudgetTokens:Yi}}var Ai,Pi,Ii,kr,Ei,Ci,Mi,Oi,Di,Li,vr,Ni,$i,Ui,Sr,ji,Fi,Dn,vv,Sv,Tv,wv,xv,Rv,_v,Av,Bi,jd,Wi,Gi,Hi,Fd,Bd,Pv,Iv,Vi,Ki,zi,qi,Yi,Xi,Ji,Qi,Wd,Gd,Zi,Ev,ea,ta,na,Cv,oa,ra,sa,ia,aa,Mv,Ov,Dv,ca,la,da,Lv,Nv,$v,Uv,jv,Fv,Ue=N(()=>{"use strict";Ai=Math.min(Math.max(1,Number(process.env.TOOL_LOOP_DEFAULT_BUDGET)||25),100),Pi=3,Ii=2,kr=2,Ei=128e3,Ci=13e3,Mi=16384,Oi=65536,Di=3,Li=65536,vr=500,Ni=3,$i=5e4,Ui=2e5,Sr=2e3,ji=3e4,Fi=3,Dn=2,vv=3e5,Sv=216e5,Tv=.75,wv=16e3,xv=12e4,Rv=3,_v=4,Av=50,Bi=20,jd=50,Wi=3,Gi=2,Hi=300*1e3,Fd=3,Bd=720*60*60*1e3,Pv=4e3,Iv=5,Vi=3,Ki=800,zi=300*1e3,qi=4,Yi=0,Xi=50,Ji=50,Qi=30,Wd=3600*1e3,Gd=200,Zi=5,Ev=4e4,ea=50*1024,ta=500*1024,na=500*1024*1024,Cv=50*1024*1024,oa=3e5,ra=2,sa=3e3,ia=3,aa=5e3,Mv=1e3,Ov=3e3,Dv=3e4,ca=60*1024,la=10,da=100,Lv=24,Nv=5,$v=6e5,Uv=30,jv=144e5,Fv=3e5});import{existsSync as pa,readFileSync as Vd,writeFileSync as Bv,readdirSync as Kd,mkdirSync as Wv}from"node:fs";import{join as ma,dirname as Gv}from"node:path";function qd(o){return ma(o,".qlogicagent",Hv)}function Vv(o){let e=qd(o);try{return JSON.parse(Vd(e,"utf8"))}catch{return{version:1,patterns:{}}}}function Hd(o,e){let t=qd(o);Wv(Gv(t),{recursive:!0}),Bv(t,JSON.stringify(e,null,2),"utf8")}function Kv(o){let e=Date.now()-Bd;for(let[t,n]of Object.entries(o.patterns))new Date(n.lastSeen).getTime()<e&&delete o.patterns[t]}function Yd(o,e){if(e.length===0)return!1;let t=Tr(e),n=Vv(o);Kv(n);let r=new Date().toISOString(),s=n.patterns[t];if(s||(s={signature:t,count:0,firstSeen:r,lastSeen:r,promoted:!1},n.patterns[t]=s),s.promoted)return Hd(o,n),!1;s.count++,s.lastSeen=r;let i=s.count>=Fd;return i&&(s.promoted=!0),Hd(o,n),i}function Tr(o){return[...o].sort().join("+")}function zv(o,e){if(!pa(e))return null;let t=Tr(o);try{let n=Kd(e,{withFileTypes:!0});for(let r of n){if(!r.isDirectory())continue;let s=ma(e,r.name,"SKILL.md");try{let a=Vd(s,"utf8").match(/^tools:\s*\n((?:\s+-\s+\S+\n?)+)/m);if(a){let c=a[1].split(`
|
|
14
14
|
`).map(l=>l.replace(/^\s*-\s*/,"").trim()).filter(Boolean);if(Tr(c)===t)return r.name}}catch{}}}catch{}return null}function qv(o){if(!pa(o))return 0;try{return Kd(o,{withFileTypes:!0}).filter(e=>e.isDirectory()&&pa(ma(o,e.name,"SKILL.md"))).length}catch{return 0}}function Yv(o,e){return!(!o.ok||o.existingSkillName||!o.multiStep||o.toolCallCount<Wi||o.distinctToolCount<Gi||Date.now()-zd<Hi||e?.projectSkillsDir&&(qv(e.projectSkillsDir)>=Bi||e.tools.length>0&&zv(e.tools,e.projectSkillsDir))||e?.projectRoot&&e.tools.length>0&&!Yd(e.projectRoot,e.tools))}function Xv(o){return o.existingSkillName?o.feedback==="negative":!1}function ko(o,e){return Xv(o)?{type:"skill.improve",skillName:o.existingSkillName,reason:"negative user feedback on existing skill execution"}:Yv(o,e)?(zd=Date.now(),{type:"skill.create",suggestedName:e.suggestedName??`auto-skill-${e.tools.slice(0,3).join("-")}`,description:`Multi-step orchestration using ${e.tools.join(", ")}`,tools:e.tools,stepCount:o.toolCallCount}):null}var zd,Hv,Xd=N(()=>{"use strict";Ue();zd=0,Hv="skill-patterns.json"});function Jd(o){return o.function&&typeof o.function=="object"&&typeof o.function.name=="string"?o.function.name.trim():typeof o.name=="string"?o.name.trim():""}function Jv(o){return o==="enabled-eligible"||o==="installed-awaiting-approval"}function Qv(o){return new Map((o??[]).map(e=>[e.toolName,e]))}function Zv(o){if(!o.eligibility?.length)return[...o.tools];let e=Qv(o.eligibility);return o.tools.filter(t=>{let n=Jd(t);if(!n)return!1;let r=e.get(n);return!r||Jv(r.status)})}function eS(o){let e=[],t=o.compatibility??{},n=o.toolChoice;if(o.thinkingEnabled&&t.requireAutoWhenThinking){let r=typeof n=="object"&&n&&!Array.isArray(n)?String(n.type??""):n;r&&r!=="auto"&&r!=="none"&&(e.push("tool_choice downgraded to auto because thinking mode requires auto/none compatibility."),n="auto")}if(n==="required"&&t.allowRequiredToolChoice===!1){let r=t.requiredFallback??"auto";e.push(`tool_choice=required is not supported by this provider; downgraded to ${r}.`),n=r}if(n&&typeof n=="object"&&!Array.isArray(n)&&n.type==="function"&&t.allowNamedToolChoice===!1){let r=t.namedFallback??"required";e.push(`named tool_choice is not supported by this provider; downgraded to ${r}.`),n=r}return{normalizedToolChoice:n,warnings:e}}function fa(o){let e=eS({toolChoice:o.toolChoice,thinkingEnabled:o.thinkingEnabled,compatibility:o.compatibility}),t=e.normalizedToolChoice,n=[...e.warnings],r=Zv({tools:o.tools,eligibility:o.eligibility});if(!t||t==="auto")return{tools:r,normalizedToolChoice:t,warnings:n};if(t==="none")return{tools:[],normalizedToolChoice:"none",warnings:n};if(t==="required"){if(r.length===0)throw new Error("tool_choice=required but no tools were provided");return{tools:r,normalizedToolChoice:"required",extraSystemPrompt:"You must call one of the available tools before responding.",warnings:n}}if(typeof t=="object"&&!Array.isArray(t)&&t.type==="function"){let s=t.function??void 0,i=typeof s?.name=="string"?s.name.trim():"";if(!i)throw new Error("tool_choice.function.name is required");let a=r.filter(c=>Jd(c)===i);if(a.length===0)throw new Error(`tool_choice requested unknown tool: ${i}`);return{tools:a,normalizedToolChoice:{type:"function",function:{name:i}},extraSystemPrompt:`You must call the ${i} tool before responding.`,warnings:n}}return{tools:r,normalizedToolChoice:t,warnings:n}}var Qd=N(()=>{"use strict"});function Zd(o){return o==null?[]:typeof o=="string"?o.length>0?[{type:"text",text:o}]:[]:Array.isArray(o)?o:[{type:"text",text:String(o)}]}function oS(o,e){return{...o,content:[...Zd(o.content),...Zd(e.content)]}}function rS(o){if(!o||typeof o!="object")return!1;if(o.function&&typeof o.function=="object"){let e=o.function.name;if(typeof e=="string"&&e.length>0)return!0}return typeof o.name=="string"&&o.name.length>0}function sS(o){return new Set((o??tS).map(e=>e.trim().toLowerCase()))}function iS(o,e){return o?sS(e).has(o.trim().toLowerCase()):!1}function ga(o){if(!Array.isArray(o)||o.length===0)return[...o];let e=o.map(a=>{if(a.role==="assistant"&&Array.isArray(a.tool_calls)){let c=a.tool_calls.filter(l=>rS(l));return{...a,...c.length>0?{tool_calls:c}:{tool_calls:void 0}}}return{...a}}),t=new Set;for(let a of e)if(!(a.role!=="assistant"||!Array.isArray(a.tool_calls)))for(let c of a.tool_calls)typeof c.id=="string"&&c.id&&t.add(c.id);let n=e.filter(a=>a.role!=="tool"?!0:!!(a.tool_call_id&&t.has(a.tool_call_id))),r=new Set;for(let a of n)a.role==="tool"&&typeof a.tool_call_id=="string"&&a.tool_call_id&&r.add(a.tool_call_id);let s=[];for(let a of n){if(a.role==="assistant"&&Array.isArray(a.tool_calls)&&a.tool_calls.length>0){let c=a.tool_calls.filter(l=>typeof l.id=="string"&&r.has(l.id));if(c.length===0){let{tool_calls:l,...d}=a;d.content!=null&&d.content!==""&&s.push(d);continue}if(c.length<a.tool_calls.length){s.push({...a,tool_calls:c});continue}}s.push(a)}let i=[];for(let a of s){let c=i.length>0?i[i.length-1]:void 0;if(a.role==="user"&&c?.role==="user"){i[i.length-1]=oS(c,a);continue}i.push(a)}return i}function ha(o,e){return iS(e?.stopReason,e?.forcedStopReasons)?o.map(t=>{if(t.role!=="assistant")return{...t};let n={...t};for(let r of nS)delete n[r];return n}):[...o]}function ya(o,e){let t=e?.placeholderToolResult??"Error: Tool loop interrupted before the tool result was replayed.",n=new Set;for(let s of o)s.role==="tool"&&typeof s.tool_call_id=="string"&&s.tool_call_id&&n.add(s.tool_call_id);let r=[];for(let s of o)if(r.push({...s}),!(s.role!=="assistant"||!Array.isArray(s.tool_calls)||s.tool_calls.length===0))for(let i of s.tool_calls)typeof i.id!="string"||!i.id||n.has(i.id)||(n.add(i.id),r.push({role:"tool",tool_call_id:i.id,content:t}));return r}function ba(o,e){let t=ga(o),n=ha(t,e);return ya(n,e)}var tS,nS,ka=N(()=>{"use strict";tS=["stop","aborted","timeout","cancelled","interrupted","error"],nS=["tool_calls","toolCalls","function_call","functionCall","raw_tool_calls","rawToolCalls"]});function aS(o){let e=new Set,t=new Set;for(let n of o){if(n.role==="assistant"&&Array.isArray(n.tool_calls))for(let r of n.tool_calls)typeof r.id=="string"&&r.id&&e.add(r.id);n.role==="tool"&&typeof n.tool_call_id=="string"&&n.tool_call_id&&t.add(n.tool_call_id)}return[...e].filter(n=>!t.has(n))}function cS(o){let e=new Set;for(let t of o)t.role==="tool"&&typeof t.tool_call_id=="string"&&t.tool_call_id&&e.add(t.tool_call_id);return[...e]}function lS(o){return{round:o.round??0,maxRounds:o.maxRounds,pendingToolCallIds:[...o.pendingToolCallIds??[]],completedToolCallIds:[...o.completedToolCallIds??[]],lastStopReason:o.lastStopReason,replayMessages:[...o.replayMessages??[]]}}function va(o,e){return{round:o.round+1,maxRounds:o.maxRounds,pendingToolCallIds:[...e.pendingToolCallIds??o.pendingToolCallIds],completedToolCallIds:[...e.completedToolCallIds??o.completedToolCallIds],lastStopReason:e.lastStopReason??o.lastStopReason,replayMessages:[...e.replayMessages??o.replayMessages]}}function wr(o,e){return{round:o.round,maxRounds:o.maxRounds,pendingToolCallIds:[],completedToolCallIds:[...e.completedToolCallIds??o.completedToolCallIds],lastStopReason:e.lastStopReason??o.lastStopReason,replayMessages:[...e.replayMessages??o.replayMessages]}}function xr(o){let e=[],t=ga(o.replayMessages);t.length!==o.replayMessages.length&&e.push({kind:"drop-orphan-tool-result",detail:"Removed orphan tool results or invalid assistant tool calls."});let n=ha(t,o.options);n.some((s,i)=>s!==t[i])&&e.push({kind:"strip-forced-stop-tool-metadata",detail:"Removed assistant tool-call metadata after forced stop."});let r=ya(n,o.options);return r.length>n.length&&e.push({kind:"inject-placeholder-tool-result",detail:"Injected placeholder tool result for pending tool calls."}),{state:lS({maxRounds:o.maxRounds,round:o.round,lastStopReason:o.lastStopReason,replayMessages:r,pendingToolCallIds:aS(r),completedToolCallIds:cS(r)}),recoveryActions:e}}var eu=N(()=>{"use strict";ka()});function Sa(o){return o?dS.has(o):!0}function Ta(o){return o===429||o===529}function Rr(o,e=500,t=32e3){let n=Math.min(e*Math.pow(2,o-1),t);return n+Math.floor(Math.random()*n*.25)}function _r(){let o=process.env.QLOGICAGENT_PERSISTENT_RETRY;return o==="1"||o==="true"}var dS,pM,vo,tu=N(()=>{"use strict";dS=new Set(["main","sdk","agent","compact","hook","verification","side_question"]);pM={maxBackoffMs:300*1e3,resetCapMs:360*60*1e3,heartbeatIntervalMs:3e4};vo=class extends Error{constructor(t,n){super(`Model fallback triggered: ${t} -> ${n}`);this.originalModel=t;this.fallbackModel=n;this.name="FallbackTriggeredError"}originalModel;fallbackModel}});function wa(o,e){if(e.allowedTools&&e.allowedTools.length>0){let t=new Set(e.allowedTools);return o.filter(n=>t.has(n))}if(e.toolAccessMode==="none")return[];if(e.toolAccessMode==="read-only"){let t=new Set(["file_edit","create_file","write_file","replace_string_in_file","multi_replace_string_in_file","create_directory","delete_file","rename_file","move_file","exec","run_in_terminal","run_command","git_commit","git_push","patch"]);return o.filter(n=>!t.has(n))}return e.canFork?[...o]:o.filter(t=>t!=="agent")}var xa=N(()=>{"use strict";Ue()});function Ra(){return[...nu]}function Ar(o){return nu.find(e=>e.name===o)}var uS,pS,mS,fS,gS,hS,nu,_a=N(()=>{"use strict";uS={name:"general",label:"General Purpose",description:"A general-purpose sub-agent that can perform any task with full tool access.",maxTurns:200,toolAccessMode:"full",canFork:!1},pS={name:"explore",label:"Explore",description:"Fast read-only codebase exploration. Search files, read code, analyze structure. Cannot write or execute.",maxTurns:50,toolAccessMode:"read-only",allowedTools:["read_file","search","web_search","web_fetch","think","memory","tool_search"],canFork:!1},mS={name:"plan",label:"Plan",description:"Planning mode. Explore, analyze, and produce a structured plan. Cannot write files or execute commands.",maxTurns:80,toolAccessMode:"read-only",allowedTools:["read_file","search","web_search","web_fetch","think","memory","task","tool_search"],canFork:!1},fS={name:"code",label:"Code",description:"A coding sub-agent with full tool access for implementation tasks.",maxTurns:200,toolAccessMode:"full",canFork:!0},gS={name:"research",label:"Research",description:"Web research and information gathering. Searches the web, fetches pages, and synthesizes findings.",maxTurns:30,toolAccessMode:"read-only",allowedTools:["web_search","web_fetch","read_file","search","think","memory"],canFork:!1},hS={name:"verify",label:"Verify",description:"Verification agent. Runs tests, checks build output, validates changes are correct.",maxTurns:40,toolAccessMode:"full",allowedTools:["exec","read_file","search","think"],canFork:!1},nu=[uS,pS,mS,fS,gS,hS]});var ou=N(()=>{"use strict"});function Aa(o){return{promptTokens:0,hasAttemptedReactiveCompact:!1,currentMaxOutputTokens:o.maxOutputTokens,consecutiveTruncations:0,aborted:o.abortSignal?.aborted??!1}}function Pa(o,e){if(o.aborted)return{level:"blocking",usagePercent:100,reason:"budget_exhausted"};let t=e.contextWindowTokens-e.responseBufferTokens-o.currentMaxOutputTokens,n=t>0?o.promptTokens/t*100:100;return o.promptTokens>=t?o.hasAttemptedReactiveCompact||!e.reactiveCompactEnabled?{level:"blocking",usagePercent:n,reason:"prompt_too_long"}:{level:"blocking",usagePercent:n,reason:"prompt_too_long"}:n>=85?{level:"warning",usagePercent:n,remainingTokens:t-o.promptTokens}:{level:"ok"}}function Ia(o,e,t){let n=o.message?.toLowerCase()??"",r=o.status??0;return r===413||n.includes("prompt_too_long")||n.includes("context_length_exceeded")?!e.hasAttemptedReactiveCompact&&t.reactiveCompactEnabled?{action:"reactive_compact"}:{action:"abort",reason:"prompt_too_long_unrecoverable"}:r>=500&&r<600?{action:"retry",reason:`server_error_${r}`}:r===429?{action:"retry",reason:"rate_limited"}:r===401||r===403?{action:"abort",reason:"auth_error"}:r===404?{action:"abort",reason:"model_not_found"}:{action:"abort",reason:n||"unknown_error"}}function Ea(o,e,t){if(!e.outputEscalationEnabled)return{shouldEscalate:!1,newMax:o.currentMaxOutputTokens};if(o.consecutiveTruncations>=3)return{shouldEscalate:!1,newMax:o.currentMaxOutputTokens};let n=Math.min(o.currentMaxOutputTokens*2,t);return n<=o.currentMaxOutputTokens?{shouldEscalate:!1,newMax:o.currentMaxOutputTokens}:{shouldEscalate:!0,newMax:n}}function Ca(o,e){return o.aborted?!0:e.abortSignal?.aborted?(o.aborted=!0,!0):!1}var ru=N(()=>{"use strict"});function Ma(){return{consecutiveFailures:0,attemptedThisTurn:!1,lastCompactAt:null,toolsAtLastCompact:[]}}function Ln(o,e=yS){return!(o.attemptedThisTurn||o.consecutiveFailures>=e.maxConsecutiveFailures)}var yS,su=N(()=>{"use strict";yS={maxConsecutiveFailures:3,minMessagesAfterCompact:4,targetUsagePercent:50}});var Nn=N(()=>{"use strict";wd();Md();wi();wi();Ud();Xd();Qd();ka();eu();tu();xa();_a();ou();ru();su()});function Oa(o,e){let t=o.get(e.index);t||(t={id:"",name:"",arguments:""},o.set(e.index,t)),e.id&&(t.id=e.id),e.name&&(t.name+=e.name),t.arguments+=e.arguments}var iu=N(()=>{"use strict"});var au=N(()=>{"use strict"});var cu=N(()=>{"use strict"});function Pr(o){return typeof o.deleteVideoTask=="function"&&typeof o.listVideoTasks=="function"}var lu=N(()=>{"use strict"});var dt,Ir=N(()=>{"use strict";dt=class{supportedTypes=["image","video","3d"];baseUrl;timeoutMs;constructor(e){this.baseUrl=e.baseUrl.replace(/\/+$/,""),this.timeoutMs=e.timeoutMs??18e4}async generate(e,t,n){switch(e.mediaType){case"image":return this.generateImage(e,t,n);case"video":return this.generateVideo(e,t,n);case"3d":return this.generate3D(e,t,n);default:throw new Error(`VolcengineMediaTransport: unsupported mediaType "${e.mediaType}"`)}}canHandle(e){return!!this.supportedTypes.includes(e.mediaType)}async generateImage(e,t,n){let r=Date.now(),s=`${this.baseUrl}/v3/images/generations`,i={model:e.model,prompt:e.prompt,size:e.size??"2K",n:e.n??1,response_format:"url",sequential_image_generation:"disabled",watermark:!0};e.imageUrl&&(i.image=e.imageUrl),e.referenceImages&&e.referenceImages.length>0&&(i.image_urls=e.referenceImages),e.style&&(i.style=e.style),e.quality&&(i.quality=e.quality),e.seed!==void 0&&(i.seed=e.seed),e.guidanceScale!==void 0&&(i.guidance_scale=e.guidanceScale),e.enhancePrompt!==void 0&&(i.enhance_prompt=e.enhancePrompt),e.streamImage&&(i.stream=!0);let a=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(i),signal:n??AbortSignal.timeout(this.timeoutMs)});if(!a.ok){let d=await a.text().catch(()=>"");throw new Error(`Volcengine image API error ${a.status}: ${d}`)}return e.streamImage&&a.body?this.parseStreamingImage(a.body,e,r):{mediaUrls:((await a.json()).data??[]).map(d=>d.url).filter(d=>!!d),model:e.model,size:e.size??"1024x1024",durationMs:Date.now()-r}}async parseStreamingImage(e,t,n){let r=new TextDecoder,s="",i="",a=e.getReader();try{for(;;){let{done:c,value:l}=await a.read();if(c)break;s+=r.decode(l,{stream:!0});let d;for(;(d=s.indexOf(`
|
|
15
|
-
`))!==-1;){let u=s.slice(0,d).trim();if(s=s.slice(d+1),!u||u.startsWith(":")||!u.startsWith("data:"))continue;let p=u.slice(5).trim();if(p==="[DONE]")break;try{let h=JSON.parse(p).data?.[0]?.url;h&&(i=h,t.onProgress?.(50,"streaming"))}catch{}}}}finally{a.releaseLock()}return t.onProgress?.(100,"completed"),{mediaUrls:i?[i]:[],model:t.model,size:t.size??"1024x1024",durationMs:Date.now()-n}}async generateVideo(e,t,n){let r=Date.now(),s=`${this.baseUrl}/v3/contents/generations/tasks`,i=e.referenceVideos?.length??0,a=e.referenceAudios?.length??0,c=e.referenceImages?.length??0,l=!!(e.imageUrl||c>0);if(i>3)throw new Error(`Seedance 2.0: max 3 reference videos (got ${i}). Total duration must be \u922E?5s.`);if(a>3)throw new Error(`Seedance 2.0: max 3 reference audios (got ${a}). Total duration must be \u922E?5s.`);if(a>0&&!l&&i===0)throw new Error("Seedance 2.0: reference audio cannot be used alone. Provide at least one reference image or video.");if(e.operation==="edit"&&c>9)throw new Error(`Seedance 2.0 video edit: max 9 reference images (got ${c}).`);let d=[];switch(e.draftTaskId&&d.push({type:"draft_task",id:e.draftTaskId}),e.operation){case"multimodal_reference":{if(e.prompt&&d.push({type:"text",text:e.prompt}),e.referenceImages?.length)for(let b=0;b<e.referenceImages.length;b++){let k=e.imageRoles?.[b]??"reference_image";d.push({type:"image_url",image_url:{url:e.referenceImages[b]},role:k})}if(e.referenceVideos?.length)for(let b of e.referenceVideos)d.push({type:"video_url",video_url:{url:b},role:"reference_video"});if(e.referenceAudios?.length)for(let b of e.referenceAudios)d.push({type:"audio_url",audio_url:{url:b},role:"reference_audio"});break}case"extend":{if(e.sourceVideos?.length)for(let b of e.sourceVideos)d.push({type:"video_url",video_url:{url:b},role:"reference_video"});e.prompt&&d.push({type:"text",text:e.prompt});break}case"merge":for(let b of e.sourceVideos??[])d.push({type:"video_url",video_url:{url:b}});e.prompt&&d.push({type:"text",text:e.prompt});break;case"upscale":e.sourceVideos?.[0]&&d.push({type:"video_url",video_url:{url:e.sourceVideos[0]}}),d.push({type:"text",text:e.prompt||"upscale"});break;case"edit":for(let b of e.sourceVideos??[])d.push({type:"video_url",video_url:{url:b},role:"reference_video"});if(e.referenceImages?.length)for(let b of e.referenceImages)d.push({type:"image_url",image_url:{url:b},role:"reference_image"});e.prompt&&d.push({type:"text",text:e.prompt});break;default:{let b=(e.referenceVideos?.length??0)>0,k=(e.referenceAudios?.length??0)>0,x=(e.imageRoles?.length??0)>0;if(b||k||x){if(e.prompt&&d.push({type:"text",text:e.prompt}),e.referenceImages?.length)for(let P=0;P<e.referenceImages.length;P++){let I=e.imageRoles?.[P]??"reference_image";d.push({type:"image_url",image_url:{url:e.referenceImages[P]},role:I})}if(b)for(let P of e.referenceVideos)d.push({type:"video_url",video_url:{url:P},role:"reference_video"});if(k)for(let P of e.referenceAudios)d.push({type:"audio_url",audio_url:{url:P},role:"reference_audio"})}else if(e.referenceImages?.length){for(let P of e.referenceImages)d.push({type:"image_url",image_url:{url:P}});e.prompt&&d.push({type:"text",text:e.prompt})}else e.imageUrl?(d.push({type:"image_url",image_url:{url:e.imageUrl}}),e.prompt&&d.push({type:"text",text:e.prompt})):e.prompt&&d.push({type:"text",text:e.prompt});break}}let u={model:e.model,content:d};e.duration&&(u.duration=e.duration),e.aspectRatio&&(u.ratio=e.aspectRatio),e.resolution&&(u.resolution=e.resolution),e.seed!==void 0&&(u.seed=e.seed),e.fps&&(u.fps=e.fps),e.generateAudio!==void 0&&(u.generate_audio=e.generateAudio),e.watermark!==void 0&&(u.watermark=e.watermark),e.enhancePrompt!==void 0&&(u.enhance_prompt=e.enhancePrompt),e.cameraFixed!==void 0&&(u.camera_fixed=e.cameraFixed),e.returnLastFrame!==void 0&&(u.return_last_frame=e.returnLastFrame),e.serviceTier&&(u.service_tier=e.serviceTier),e.executionExpiresAfterSeconds!==void 0&&(u.execution_expires_after=e.executionExpiresAfterSeconds),e.draft!==void 0&&(u.draft=e.draft),e.safetyIdentifier&&(u.safety_identifier=e.safetyIdentifier),e.callbackUrl&&(u.callback_url=e.callbackUrl),e.videoTools?.length&&(u.tools=e.videoTools.map(b=>({type:b})));let p=await this.submitTask(s,u,t,n),m=await this.pollTask(`${this.baseUrl}/v3/contents/generations/tasks/${p}`,t,n,e.onProgress,p),h=[],f=m.content;typeof f?.video_url=="string"&&h.push(f.video_url);let y=typeof f?.last_frame_url=="string"?f.last_frame_url:void 0;return{mediaUrls:h,model:e.model,durationMs:Date.now()-r,lastFrameUrl:y,taskId:p}}async generate3D(e,t,n){let r=Date.now(),s=`${this.baseUrl}/v3/contents/generations/tasks`,i=[],a=[];e.outputFormat&&a.push(`--fileformat ${e.outputFormat}`),e.prompt&&a.push(e.prompt),a.length>0&&i.push({type:"text",text:a.join(" ")}),e.imageUrl&&i.push({type:"image_url",image_url:{url:e.imageUrl}});let c={model:e.model,content:i},l=await this.submitTask(s,c,t,n),d=await this.pollTask(`${this.baseUrl}/v3/contents/generations/tasks/${l}`,t,n,e.onProgress,l),u=[],p=d.content;if(typeof p?.video_url=="string"&&u.push(p.video_url),u.length===0&&p)for(let[,h]of Object.entries(p))typeof h=="string"&&/^https?:\/\//.test(h)&&u.push(h);let m=d.output;if(m?.model_urls){let h=m.model_urls;for(let f of Object.values(h))f&&!u.includes(f)&&u.push(f)}if(u.length===0){let h=Object.keys(d),f=p?Object.keys(p):[],y=m?Object.keys(m):[];console.error(`[volcengine-3d] No media URLs found. Response keys: [${h}], content keys: [${f}], output keys: [${y}]`);let b=d.data;if(b?.content){let k=b.content;for(let[,x]of Object.entries(k))typeof x=="string"&&/^https?:\/\//.test(x)&&u.push(x)}}return{mediaUrls:u,model:e.model,durationMs:Date.now()-r,metadata:u.length===0?{debugResponseKeys:Object.keys(d),debugContentKeys:p?Object.keys(p):null,debugContentSample:p?JSON.stringify(p).slice(0,500):null,debugOutputKeys:m?Object.keys(m):null,debugResultSample:JSON.stringify(d).slice(0,800)}:void 0}}async getTaskStatus(e,t,n){let r=`${this.baseUrl}/v3/contents/generations/tasks/${e}`,s=await fetch(r,{method:"GET",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let c=await s.text().catch(()=>"");throw new Error(`Volcengine task status error ${s.status}: ${c}`)}let i=await s.json();return{status:i.status??"unknown",task:i}}async listVideoTasks(e,t,n){let r=new URLSearchParams;t?.after&&r.set("after",t.after),t?.limit&&r.set("limit",String(t.limit)),t?.status&&r.set("status",t.status);let s=r.toString(),i=`${this.baseUrl}/v3/contents/generations/tasks${s?`?${s}`:""}`,a=await fetch(i,{method:"GET",headers:{Authorization:`Bearer ${e}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!a.ok){let c=await a.text().catch(()=>"");throw new Error(`Volcengine list tasks error ${a.status}: ${c}`)}return await a.json()}async deleteVideoTask(e,t,n){let r=`${this.baseUrl}/v3/contents/generations/tasks/${e}`,s=await fetch(r,{method:"DELETE",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let i=await s.text().catch(()=>"");throw new Error(`Volcengine delete task error ${s.status}: ${i}`)}}async uploadFile(e,t,n,r){let s=`${this.baseUrl}/v3/files`,i=new FormData;i.append("file",e instanceof Blob?e:new Blob([e]),n?.filename??"upload"),i.append("purpose",n?.purpose??"user_data");let a=await fetch(s,{method:"POST",headers:{Authorization:`Bearer ${t}`},body:i,signal:r??AbortSignal.timeout(this.timeoutMs)});if(!a.ok){let l=await a.text().catch(()=>"");throw new Error(`Volcengine file upload error ${a.status}: ${l}`)}let c=await a.json();return{id:String(c.id??""),status:String(c.status??"")}}async getFile(e,t,n){let r=`${this.baseUrl}/v3/files/${e}`,s=await fetch(r,{method:"GET",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let i=await s.text().catch(()=>"");throw new Error(`Volcengine get file error ${s.status}: ${i}`)}return await s.json()}async listFiles(e,t,n){let r=new URLSearchParams;t?.after&&r.set("after",t.after),t?.limit&&r.set("limit",String(t.limit)),t?.purpose&&r.set("purpose",t.purpose),t?.order&&r.set("order",t.order);let s=r.toString(),i=`${this.baseUrl}/v3/files${s?`?${s}`:""}`,a=await fetch(i,{method:"GET",headers:{Authorization:`Bearer ${e}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!a.ok){let c=await a.text().catch(()=>"");throw new Error(`Volcengine list files error ${a.status}: ${c}`)}return await a.json()}async deleteFile(e,t,n){let r=`${this.baseUrl}/v3/files/${e}`,s=await fetch(r,{method:"DELETE",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let i=await s.text().catch(()=>"");throw new Error(`Volcengine delete file error ${s.status}: ${i}`)}}async submitTask(e,t,n,r){let s=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:JSON.stringify(t),signal:r??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let c=await s.text().catch(()=>"");throw new Error(`Volcengine task submit error ${s.status}: ${c}`)}let i=await s.json(),a=i.id??i.task_id;if(!a)throw new Error("Volcengine task submit: no task_id in response");return a}async pollTask(e,t,n,r,s){let i=Date.now()+6e5,a=0;for(;Date.now()<i;){n?.throwIfAborted();let c=await fetch(e,{method:"GET",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!c.ok){let m=await c.text().catch(()=>"");throw new Error(`Volcengine task poll error ${c.status}: ${m}`)}let l=await c.json(),d=l.status;if(d==="succeeded"||d==="complete")return r?.(100,"completed",s),l;if(d==="failed"||d==="cancelled"){let m=l.error?.message??"Task failed";throw new Error(`Volcengine task failed: ${m}`)}a++;let u=Date.now()-(i-6e5),p=Math.min(95,Math.round(u/6e5*100));r?.(p,d??"running",s),await new Promise(m=>setTimeout(m,3e3))}throw new Error("Volcengine task timed out after polling")}}});import{join as Da}from"node:path";import{homedir as kS,tmpdir as vS}from"node:os";function du(){return process.env.QLOGICAGENT_HOME??Da(kS()||vS(),".qlogicagent")}function ut(){return process.env.QLOGICAGENT_CACHE_DIR??Da(du(),"cache")}function uu(){return process.env.QLOGICAGENT_DEBUG_LOG_DIR??Da(du(),"debug-logs")}var hn=N(()=>{"use strict"});import{writeFileSync as SS,mkdirSync as TS}from"node:fs";import{join as pu}from"node:path";import{randomUUID as wS}from"node:crypto";var xS,So,La=N(()=>{"use strict";hn();xS=18e4,So=class{supportedTypes=["image","tts"];baseUrl;timeoutMs;constructor(e){this.baseUrl=e.baseUrl.replace(/\/+$/,""),this.timeoutMs=e.timeoutMs??xS}async generate(e,t,n){switch(e.mediaType){case"image":return this.generateImage(e,t,n);case"tts":return this.generateTTS(e,t,n);default:throw new Error(`OpenAIMediaTransport: unsupported mediaType "${e.mediaType}"`)}}async generateImage(e,t,n){let r=Date.now(),s=`${this.baseUrl}/v1/images/generations`,i={model:e.model,prompt:e.prompt,n:e.n??1,size:e.size??"1024x1024",response_format:"url"};e.quality&&(i.quality=e.quality),e.style&&(i.style=e.style),e.background&&(i.background=e.background);let a=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(i),signal:n??AbortSignal.timeout(this.timeoutMs)});if(!a.ok){let d=await a.text().catch(()=>"");throw new Error(`OpenAI images API error ${a.status}: ${d}`)}return{mediaUrls:((await a.json()).data??[]).map(d=>d.url).filter(d=>!!d),model:e.model,size:e.size??"1024x1024",durationMs:Date.now()-r}}async generateTTS(e,t,n){let r=Date.now(),s=e.text||e.prompt;if(!s)throw new Error("OpenAIMediaTransport: text or prompt is required for TTS");let i=`${this.baseUrl}/v1/audio/speech`,a={model:e.model||"tts-1",input:s,voice:e.voice??"alloy",response_format:e.audioFormat??"mp3"};e.speed!==void 0&&(a.speed=e.speed);let c=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(a),signal:n??AbortSignal.timeout(this.timeoutMs)});if(!c.ok){let m=await c.text().catch(()=>"");throw new Error(`OpenAI TTS API error ${c.status}: ${m}`)}let l=Buffer.from(await c.arrayBuffer()),d=pu(ut(),"tts");TS(d,{recursive:!0});let u=`openai-tts-${wS()}.mp3`,p=pu(d,u);return SS(p,l),{mediaUrls:[`file://${p}`],model:e.model||"tts-1",durationMs:Date.now()-r,billingUnit:"per_character",billingQuantity:s.length}}}});var yn,Er=N(()=>{"use strict";yn=class{supportedTypes=["music","video"];baseUrl;timeoutMs;constructor(e){this.baseUrl=e.baseUrl.replace(/\/anthropic\/?$/,"").replace(/\/+$/,""),this.timeoutMs=e.timeoutMs??6e4}async generate(e,t,n){switch(e.mediaType){case"music":return this.generateMusic(e,t,n);case"video":return this.generateVideo(e,t,n);default:throw new Error(`MiniMaxMediaTransport: unsupported mediaType "${e.mediaType}"`)}}async generateMusic(e,t,n){let r=Date.now(),s=`${this.baseUrl}/v1/music_generation`,i={model:e.model,prompt:e.prompt,output_format:"url"};e.lyrics&&(i.lyrics=e.lyrics),e.duration&&(i.duration=e.duration),(e.isInstrumental||!e.lyrics)&&(i.is_instrumental=!0),e.audioUrl&&(i.audio_url=e.audioUrl),e.lyricsOptimizer&&(i.lyrics_optimizer=!0),(e.audioFormat||e.voice)&&(i.audio_setting={sample_rate:44100,bitrate:256e3,format:e.audioFormat??"mp3"});let a=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(i),signal:n??AbortSignal.timeout(6e5)});if(!a.ok){let m=await a.text().catch(()=>"");throw new Error(`MiniMax music error ${a.status}: ${m}`)}let c=await a.json();if(c.base_resp?.status_code&&c.base_resp.status_code!==0)throw new Error(`MiniMax music rejected: ${c.base_resp.status_msg??"unknown"}`);let l=c.data?.audio??c.audio_file;if(l)return{mediaUrls:[l],model:e.model,durationMs:Date.now()-r};let d=c.task_id;if(!d)throw new Error("MiniMax music: no audio_file or task_id in response");let u=`${this.baseUrl}/v1/music_generation/${d}`;return{mediaUrls:(await this.pollTask(u,t,n,e.onProgress,d)).audioUrls,model:e.model,durationMs:Date.now()-r}}async pollTask(e,t,n,r,s){let i=Date.now()+6e5;for(;Date.now()<i;){n?.throwIfAborted();let a=await fetch(e,{method:"GET",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!a.ok){let u=await a.text().catch(()=>"");throw new Error(`MiniMax music poll error ${a.status}: ${u}`)}let c=await a.json(),l=c.status;if(l==="Success"||l==="Finished"){r?.(100,"completed",s);let u=[];return c.audio_file&&u.push(c.audio_file),{audioUrls:u}}if(l==="Failed"||l==="Cancelled")throw new Error(`MiniMax music task failed: ${c.base_resp?.status_msg??"unknown"}`);let d=Date.now()-(i-6e5);r?.(Math.min(95,Math.round(d/6e5*100)),l??"running",s),await new Promise(u=>setTimeout(u,3e3))}throw new Error("MiniMax music task timed out after polling")}async generateLyrics(e,t,n){let r=`${this.baseUrl}/v1/lyrics_generation`,s=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify({prompt:e}),signal:n??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let a=await s.text().catch(()=>"");throw new Error(`MiniMax lyrics API error ${s.status}: ${a}`)}let i=await s.json();if(i.base_resp?.status_code&&i.base_resp.status_code!==0)throw new Error(`MiniMax lyrics error: ${i.base_resp.status_msg??"unknown"}`);return i.data?.lyrics??""}async generateVideo(e,t,n){let r=Date.now(),s=`${this.baseUrl}/v1/video_generation`,i={model:e.model||"S2V-01",prompt:e.prompt};if(e.referenceImages?.length&&e.imageRoles){let u=e.imageRoles.includes("first_frame"),p=e.imageRoles.includes("last_frame");if(u&&p){let m=e.imageRoles.indexOf("first_frame"),h=e.imageRoles.indexOf("last_frame");i.first_frame_image=e.referenceImages[m],i.last_frame_image=e.referenceImages[h]}else if(u){let m=e.imageRoles.indexOf("first_frame");i.first_frame_image=e.referenceImages[m]}else i.subject_reference=e.referenceImages.map((m,h)=>({type:"character",image:m}))}else e.imageUrl&&(i.first_frame_image=e.imageUrl);e.callbackUrl&&(i.callback_url=e.callbackUrl);let a=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(i),signal:n??AbortSignal.timeout(this.timeoutMs)});if(!a.ok){let u=await a.text().catch(()=>"");throw new Error(`MiniMax video submit error ${a.status}: ${u}`)}let c=await a.json();if(c.base_resp?.status_code&&c.base_resp.status_code!==0)throw new Error(`MiniMax video rejected: ${c.base_resp.status_msg??"unknown"}`);let l=c.task_id;if(!l)throw new Error("MiniMax video: no task_id in response");let d=await this.pollVideoTask(l,t,n,e.onProgress);return{mediaUrls:d.downloadUrl?[d.downloadUrl]:[],model:e.model||"S2V-01",durationMs:Date.now()-r,taskId:l,metadata:{fileId:d.fileId,width:d.width,height:d.height}}}async pollVideoTask(e,t,n,r){let s=Date.now()+6e5;for(;Date.now()<s;){n?.throwIfAborted();let i=`${this.baseUrl}/v1/query/video_generation?task_id=${encodeURIComponent(e)}`,a=await fetch(i,{method:"GET",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!a.ok){let m=await a.text().catch(()=>"");throw new Error(`MiniMax video poll error ${a.status}: ${m}`)}let c=await a.json();if(c.base_resp?.status_code&&c.base_resp.status_code!==0)throw new Error(`MiniMax video task error ${c.base_resp.status_code}: ${c.base_resp.status_msg??""}`);let l=c.status;if(l==="Success"){r?.(100,"completed",e);let m;if(c.file_id)try{m=await this.getFileDownloadUrl(c.file_id,t,n)}catch{}return{fileId:c.file_id,downloadUrl:m,width:c.video_width,height:c.video_height}}if(l==="Fail")throw new Error(`MiniMax video task failed: ${c.base_resp?.status_msg??"unknown"}`);let d=l??"running",u=Date.now()-(s-6e5),p=Math.min(95,Math.round(u/6e5*100));r?.(p,d,e),await new Promise(m=>setTimeout(m,3e3))}throw new Error("MiniMax video task timed out after polling")}async getFileDownloadUrl(e,t,n){let r=`${this.baseUrl}/v1/files/retrieve?file_id=${encodeURIComponent(e)}`,s=await fetch(r,{method:"GET",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let c=await s.text().catch(()=>"");throw new Error(`MiniMax file retrieve error ${s.status}: ${c}`)}let a=(await s.json()).file?.download_url;if(!a)throw new Error("MiniMax file retrieve: no download_url in response");return a}async getTaskStatus(e,t,n){let r=`${this.baseUrl}/v1/query/video_generation?task_id=${encodeURIComponent(e)}`,s=await fetch(r,{method:"GET",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let l=await s.text().catch(()=>"");throw new Error(`MiniMax task status error ${s.status}: ${l}`)}let i=await s.json(),a=i.status??"unknown";return{status:a==="Success"?"succeeded":a==="Fail"?"failed":a.toLowerCase(),task:i}}async listVideoTasks(e,t,n){return{data:[]}}async deleteVideoTask(e,t,n){throw new Error("MiniMax does not support video task cancellation.")}}});import{writeFileSync as RS,mkdirSync as _S}from"node:fs";import{join as mu}from"node:path";import{randomUUID as AS}from"node:crypto";async function Na(o,e,t){let n=t.durationSeconds??30,r=Date.now(),s=new Cr(e),i=[];s.onAudioChunk=c=>{i.push(c.data)};let a=null;s.onError=c=>{a=c};try{await s.connect(o,{model:t.model??"lyria-realtime-exp",prompts:t.prompts,config:t.musicConfig}),t.onProgress?.(5,"connected"),await s.play(),t.onProgress?.(10,"streaming");let c=Date.now()+n*1e3,l=500;for(;Date.now()<c;){if(t.signal?.throwIfAborted(),a)throw a;if(!s.connected)break;let f=Date.now()-r,y=n*1e3,b=Math.min(95,Math.round(10+f/y*85));t.onProgress?.(b,"streaming"),await new Promise(k=>setTimeout(k,l))}s.connected&&await s.stop(),t.onProgress?.(98,"assembling");let d=Buffer.concat(i),u=PS(d,48e3,2,16),p=mu(ut(),"gemini-music-realtime");_S(p,{recursive:!0});let m=`lyria-rt-${AS()}.wav`,h=mu(p,m);return RS(h,u),t.onProgress?.(100,"completed"),{filePath:`file://${h}`,durationMs:Date.now()-r}}finally{s.close()}}function PS(o,e,t,n){let r=e*t*(n/8),s=t*(n/8),i=o.length,a=Buffer.alloc(44);return a.write("RIFF",0),a.writeUInt32LE(36+i,4),a.write("WAVE",8),a.write("fmt ",12),a.writeUInt32LE(16,16),a.writeUInt16LE(1,20),a.writeUInt16LE(t,22),a.writeUInt32LE(e,24),a.writeUInt32LE(r,28),a.writeUInt16LE(s,30),a.writeUInt16LE(n,32),a.write("data",36),a.writeUInt32LE(i,40),Buffer.concat([a,o])}var Cr,$a=N(()=>{"use strict";hn();Cr=class{ws=null;wsUrl;model="models/lyria-realtime-exp";onAudioChunk=null;onFilteredPrompt=null;onError=null;onClose=null;constructor(e){let t=e.baseUrl.replace(/\/+$/,""),n=new URL(t).origin.replace(/^http/,"ws");this.wsUrl=`${n}/ws/google.ai.generativelanguage.v1alpha.GenerativeService.BidiGenerateContent`}async connect(e,t){t.model&&(this.model=t.model.startsWith("models/")?t.model:`models/${t.model}`);let n=`${this.wsUrl}?key=${encodeURIComponent(e)}`,r=new WebSocket(n);this.ws=r,await new Promise((s,i)=>{let a=()=>{r.removeEventListener("error",c),s()},c=()=>{r.removeEventListener("open",a),i(new Error("Lyria RealTime WebSocket connection failed"))};r.addEventListener("open",a,{once:!0}),r.addEventListener("error",c,{once:!0})}),r.addEventListener("message",s=>this.handleMessage(s)),r.addEventListener("error",()=>{this.onError?.(new Error("Lyria RealTime WebSocket error"))}),r.addEventListener("close",()=>{this.ws=null,this.onClose?.()}),this.send({setup:{model:this.model}}),await new Promise(s=>setTimeout(s,100)),await this.setWeightedPrompts(t.prompts),t.config&&await this.setMusicGenerationConfig(t.config)}async setWeightedPrompts(e){this.send({musicInput:{weightedPrompts:e.map(t=>({text:t.text,weight:t.weight}))}})}async setMusicGenerationConfig(e){let t={};e.bpm!==void 0&&(t.bpm=e.bpm),e.density!==void 0&&(t.density=e.density),e.brightness!==void 0&&(t.brightness=e.brightness),e.guidance!==void 0&&(t.guidance=e.guidance),e.scale!==void 0&&(t.scale=e.scale),e.temperature!==void 0&&(t.temperature=e.temperature),e.topK!==void 0&&(t.top_k=e.topK),e.seed!==void 0&&(t.seed=e.seed),e.muteBass!==void 0&&(t.mute_bass=e.muteBass),e.muteDrums!==void 0&&(t.mute_drums=e.muteDrums),e.onlyBassAndDrums!==void 0&&(t.only_bass_and_drums=e.onlyBassAndDrums),e.musicGenerationMode!==void 0&&(t.music_generation_mode=e.musicGenerationMode),e.audioFormat!==void 0&&(t.audio_format=e.audioFormat),e.sampleRateHz!==void 0&&(t.sample_rate_hz=e.sampleRateHz),this.send({musicInput:{musicGenerationConfig:t}})}async play(){this.send({musicInput:{playbackControl:"PLAY"}})}async pause(){this.send({musicInput:{playbackControl:"PAUSE"}})}async stop(){this.send({musicInput:{playbackControl:"STOP"}})}async resetContext(){this.send({musicInput:{playbackControl:"RESET_CONTEXT"}})}close(){this.ws&&this.ws.readyState!==WebSocket.CLOSED&&this.ws.close(),this.ws=null}get connected(){return this.ws!==null&&this.ws.readyState===WebSocket.OPEN}send(e){if(!this.ws||this.ws.readyState!==WebSocket.OPEN)throw new Error("Lyria RealTime session not connected");this.ws.send(JSON.stringify(e))}handleMessage(e){let t;try{t=JSON.parse(typeof e.data=="string"?e.data:e.data.toString())}catch{return}let n=t.serverContent;if(!n)return;let r=n.audioChunks;if(r&&this.onAudioChunk)for(let i of r)i.data&&this.onAudioChunk({data:Buffer.from(i.data,"base64")});let s=n.filteredPrompt;s&&this.onFilteredPrompt?.(s)}}});import{writeFileSync as fu,mkdirSync as gu}from"node:fs";import{join as Mr}from"node:path";import{randomUUID as hu}from"node:crypto";function CS(o,e,t,n){let r=e*t*(n/8),s=t*(n/8),i=o.length,a=Buffer.alloc(44);return a.write("RIFF",0),a.writeUInt32LE(36+i,4),a.write("WAVE",8),a.write("fmt ",12),a.writeUInt32LE(16,16),a.writeUInt16LE(1,20),a.writeUInt16LE(t,22),a.writeUInt32LE(e,24),a.writeUInt32LE(r,28),a.writeUInt16LE(s,30),a.writeUInt16LE(n,32),a.write("data",36),a.writeUInt32LE(i,40),Buffer.concat([a,o])}var IS,ES,Ua,To,ja=N(()=>{"use strict";hn();$a();IS=18e4,ES=1e4,Ua=6e5,To=class{supportedTypes=["image","video","music","music_realtime","tts","embedding"];apiBase;timeoutMs;constructor(e){this.apiBase=e.baseUrl.replace(/\/openai\/?$/,"").replace(/\/+$/,""),this.timeoutMs=e.timeoutMs??IS}async generate(e,t,n){switch(e.mediaType){case"image":return this.generateImage(e,t,n);case"video":return this.generateVideo(e,t,n);case"music":return this.generateMusic(e,t,n);case"music_realtime":return this.generateMusicRealtime(e,t,n);case"tts":return this.generateTTS(e,t,n);case"embedding":return this.generateEmbedding(e,t,n);default:throw new Error(`GeminiMediaTransport: unsupported mediaType "${e.mediaType}"`)}}async deleteVideoTask(e,t,n){throw new Error("Gemini does not support deleting video generation tasks")}async listVideoTasks(e,t,n){return{data:[]}}async getTaskStatus(e,t,n){let r=`${this.apiBase}/${e}`,s=await fetch(r,{method:"GET",headers:{"x-goog-api-key":t},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let c=await s.text().catch(()=>"");throw new Error(`Gemini operation query error ${s.status}: ${c}`)}let i=await s.json();return{status:i.done?"completed":"running",task:i}}async generateImage(e,t,n){let r=Date.now(),s=`${this.apiBase}/models/${e.model}:generateContent`,i={responseModalities:["TEXT","IMAGE"]};e.aspectRatio&&(i.aspectRatio=e.aspectRatio);let a={contents:[{parts:[{text:e.prompt}]}],generationConfig:i},c=await this.postJson(s,a,t,n);return{mediaUrls:this.extractInlineImages(c),model:e.model,durationMs:Date.now()-r}}async generateVideo(e,t,n){let r=Date.now(),s=`${this.apiBase}/models/${e.model}:predictLongRunning`,i={prompt:e.prompt};e.imageUrl&&(i.image={inlineData:await this.resolveImageData(e.imageUrl)}),e.referenceImages?.length&&(i.referenceImages=await Promise.all(e.referenceImages.map(async y=>({image:{inlineData:await this.resolveImageData(y)},referenceType:"asset"}))));let a={};e.aspectRatio&&(a.aspectRatio=e.aspectRatio),e.resolution&&(a.resolution=e.resolution),e.duration&&(a.durationSeconds=String(e.duration)),e.n&&(a.numberOfVideos=e.n),e.seed!==void 0&&(a.seed=e.seed);let c={instances:[i]};Object.keys(a).length>0&&(c.parameters=a);let d=(await this.postJson(s,c,t,n)).name;if(!d)throw new Error("Gemini video submit: no operation name in response");let u=d;e.onProgress?.(5,"submitted",u);let h=(await this.pollOperation(d,t,n,e.onProgress,u)).response?.generateVideoResponse?.generatedSamples??[],f=[];for(let y of h)y.video?.uri&&f.push(y.video.uri);return{mediaUrls:f,model:e.model,durationMs:Date.now()-r,taskId:u}}async generateMusic(e,t,n){let r=Date.now(),s=`${this.apiBase}/models/${e.model}:generateContent`,i=[{text:e.prompt}],a={};e.audioFormat==="wav"&&(a.responseModalities=["AUDIO","TEXT"],a.responseFormat={audio:{mimeType:"audio/wav"}});let c={contents:[{parts:i}]};Object.keys(a).length>0&&(c.generationConfig=a);let l=await this.postJson(s,c,t,n);return{mediaUrls:this.extractInlineAudio(l,"gemini-music"),model:e.model,durationMs:Date.now()-r}}async generateMusicRealtime(e,t,n){let r=await Na(t,{baseUrl:this.apiBase},{prompts:[{text:e.prompt,weight:1}],durationSeconds:e.duration??30,musicConfig:{audioFormat:e.audioFormat==="wav"?"pcm16":void 0,sampleRateHz:48e3},model:e.model,signal:n,onProgress:e.onProgress});return{mediaUrls:[r.filePath],model:e.model,durationMs:r.durationMs}}async generateTTS(e,t,n){let r=Date.now(),s=`${this.apiBase}/models/${e.model}:generateContent`,i={responseModalities:["AUDIO"]};e.voice&&(i.speechConfig={voiceConfig:{prebuiltVoiceConfig:{voiceName:e.voice}}});let a={contents:[{parts:[{text:e.text??e.prompt}]}],generationConfig:i},c=await this.postJson(s,a,t,n);return{mediaUrls:this.extractInlineAudio(c,"gemini-tts"),model:e.model,durationMs:Date.now()-r}}async generateEmbedding(e,t,n){let r=Date.now(),s=`${this.apiBase}/models/${e.model}:embedContent`,i={content:{parts:[{text:e.text??e.prompt}]}},a=e.metadata?.outputDimensionality;a!==void 0&&(i.output_dimensionality=a);let l=(await this.postJson(s,i,t,n)).embeddings?.[0]?.values??[];return{mediaUrls:[],model:e.model,durationMs:Date.now()-r,metadata:{embedding:l,dimensions:l.length}}}async postJson(e,t,n,r){let s=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json","x-goog-api-key":n},body:JSON.stringify(t),signal:r??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let i=await s.text().catch(()=>"");throw new Error(`Gemini API error ${s.status}: ${i}`)}return s.json()}async pollOperation(e,t,n,r,s){let i=Date.now()+Ua;for(;Date.now()<i;){n?.throwIfAborted();let a=`${this.apiBase}/${e}`,c=await fetch(a,{method:"GET",headers:{"x-goog-api-key":t},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!c.ok){let p=await c.text().catch(()=>"");throw new Error(`Gemini operation poll error ${c.status}: ${p}`)}let l=await c.json();if(l.done===!0)return r?.(100,"completed",s),l;if(l.error){let p=l.error;throw new Error(`Gemini video generation failed: ${p.message??JSON.stringify(p)}`)}let d=Date.now()-(i-Ua),u=Math.min(95,Math.round(d/Ua*100));r?.(u,"running",s),await new Promise(p=>setTimeout(p,ES))}throw new Error("Gemini video generation timed out after polling")}async resolveImageData(e){if(e.startsWith("data:")){let s=e.match(/^data:([^;]+);base64,(.+)$/);if(s)return{mimeType:s[1],data:s[2]}}if(e.startsWith("file://")){let{readFileSync:s}=await import("node:fs"),i=e.replace(/^file:\/\//,""),a=s(i).toString("base64"),c=i.split(".").pop()?.toLowerCase()??"png";return{mimeType:c==="jpg"||c==="jpeg"?"image/jpeg":c==="webp"?"image/webp":"image/png",data:a}}let t=await fetch(e,{signal:AbortSignal.timeout(6e4)});if(!t.ok)throw new Error(`Failed to fetch image ${e}: ${t.status}`);let n=Buffer.from(await t.arrayBuffer());return{mimeType:t.headers.get("content-type")??"image/png",data:n.toString("base64")}}extractInlineImages(e){let t=[],n=Mr(ut(),"gemini-images");gu(n,{recursive:!0});for(let r of e.candidates??[])for(let s of r.content?.parts??[])if(s.inlineData?.data){let i=s.inlineData.mimeType==="image/png"?"png":s.inlineData.mimeType==="image/webp"?"webp":"jpg",a=`gemini-${hu()}.${i}`,c=Mr(n,a);fu(c,Buffer.from(s.inlineData.data,"base64")),t.push(`file://${c}`)}return t}extractInlineAudio(e,t){let n=[],r=Mr(ut(),t);gu(r,{recursive:!0});for(let s of e.candidates??[])for(let i of s.content?.parts??[])if(i.inlineData?.data&&i.inlineData.mimeType?.startsWith("audio/")){let a=i.inlineData.mimeType.includes("wav")?"wav":i.inlineData.mimeType.includes("mpeg")||i.inlineData.mimeType.includes("mp3")?"mp3":"pcm",c=Buffer.from(i.inlineData.data,"base64"),l=a==="pcm"?CS(c,24e3,1,16):c,d=`gemini-${hu()}.${a==="pcm"?"wav":a}`,u=Mr(r,d);fu(u,l),n.push(`file://${u}`)}return n}}});function MS(o){return new Promise(e=>setTimeout(e,o))}var Or,yu=N(()=>{"use strict";Or=class{supportedTypes=["tts","video"];baseUrl;timeoutMs;constructor(e){this.baseUrl=e.baseUrl.replace(/\/apps\/anthropic\/?$/,"").replace(/\/+$/,""),this.timeoutMs=e.timeoutMs??3e4}async generate(e,t,n){if(e.mediaType==="video")return this.generateVideo(e,t,n);if(e.mediaType!=="tts")throw new Error(`QwenMediaTransport: unsupported mediaType "${e.mediaType}"`);let r=Date.now(),s=e.text||e.prompt;if(!s)throw new Error("QwenMediaTransport: text or prompt is required for TTS");let i=`${this.baseUrl}/api/v1/services/aigc/text2audio/generation`,a={format:e.audioFormat??"mp3",sample_rate:24e3},c={text:s};e.voice&&(c.voice=e.voice),e.speed!==void 0&&(a.speech_rate=e.speed);let l={model:e.model||"qwen3-tts-voicedesign",input:c,parameters:a},d=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`,"X-DashScope-Async":"enable"},body:JSON.stringify(l),signal:n??AbortSignal.timeout(this.timeoutMs)});if(!d.ok){let h=await d.text().catch(()=>"");throw new Error(`DashScope TTS submit error ${d.status}: ${h}`)}let u=await d.json();if(u.code)throw new Error(`DashScope TTS submit rejected: ${u.code} \u9225?${u.message??""}`);let p=u.output?.task_id;if(!p)throw new Error("DashScope TTS submit: no task_id in response");if(u.output?.task_status==="SUCCEEDED"){let h=this.extractMediaUrl(u);return{mediaUrls:h?[h]:[],model:e.model,durationMs:Date.now()-r}}return{mediaUrls:await this.pollTask(p,t,n,e.onProgress),model:e.model,durationMs:Date.now()-r}}async pollTask(e,t,n,r,s=12e4){let i=Date.now()+s,a=`${this.baseUrl}/api/v1/tasks/${e}`;for(;Date.now()<i;){n?.throwIfAborted(),await MS(2e3);let c=await fetch(a,{method:"GET",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!c.ok){let p=await c.text().catch(()=>"");throw new Error(`DashScope TTS poll error ${c.status}: ${p}`)}let l=await c.json();if(l.code)throw new Error(`DashScope poll rejected: ${l.code} \u9225?${l.message??""}`);let d=l.output?.task_status;if(d==="SUCCEEDED"){r?.(100,"completed",e);let p=this.extractMediaUrl(l);return p?[p]:[]}if(d==="FAILED")throw new Error(`DashScope task failed: ${l.message??"unknown error"}`);let u=Date.now()-(i-s);r?.(Math.min(95,Math.round(u/s*100)),d??"running",e)}throw new Error("DashScope task timed out")}async generateVideo(e,t,n){let r=Date.now(),s=e.model||"wan2.1-t2v-turbo",i={prompt:e.prompt};if(e.imageUrl)i.img_url=e.imageUrl;else if(e.referenceImages?.length)if(e.imageRoles){let h=e.imageRoles.indexOf("first_frame"),f=e.imageRoles.indexOf("last_frame");h>=0&&(i.img_url=e.referenceImages[h]),f>=0&&(i.tail_image_url=e.referenceImages[f]);let y=e.imageRoles.map((b,k)=>b==="reference_image"?k:-1).filter(b=>b>=0);y.length>0&&(i.ref_image_url=e.referenceImages[y[0]])}else i.img_url=e.referenceImages[0];let a={};e.duration&&(a.duration=e.duration),e.resolution&&(a.resolution=e.resolution),e.aspectRatio&&(a.ratio=e.aspectRatio),e.metadata?.size&&(a.size=e.metadata.size);let c=`${this.baseUrl}/api/v1/services/aigc/generation/generation`,l={model:s,input:i};Object.keys(a).length>0&&(l.parameters=a);let d=await fetch(c,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`,"X-DashScope-Async":"enable"},body:JSON.stringify(l),signal:n??AbortSignal.timeout(this.timeoutMs)});if(!d.ok){let h=await d.text().catch(()=>"");throw new Error(`DashScope video submit error ${d.status}: ${h}`)}let u=await d.json();if(u.code)throw new Error(`DashScope video submit rejected: ${u.code} \u9225?${u.message??""}`);let p=u.output?.task_id;if(!p)throw new Error("DashScope video submit: no task_id in response");return{mediaUrls:await this.pollTask(p,t,n,e.onProgress,6e5),model:s,durationMs:Date.now()-r,taskId:p}}async getTaskStatus(e,t,n){let r=`${this.baseUrl}/api/v1/tasks/${e}`,s=await fetch(r,{method:"GET",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let d=await s.text().catch(()=>"");throw new Error(`DashScope task status error ${s.status}: ${d}`)}let i=await s.json(),c=i.output?.task_status??"unknown";return{status:c==="SUCCEEDED"?"succeeded":c==="FAILED"?"failed":c.toLowerCase(),task:i}}async listVideoTasks(e,t,n){let r=new URLSearchParams;r.set("page_size",String(t?.limit??20)),t?.status&&r.set("status",t.status.toUpperCase());let s=`${this.baseUrl}/api/v1/tasks?${r.toString()}`,i=await fetch(s,{method:"GET",headers:{Authorization:`Bearer ${e}`},signal:n??AbortSignal.timeout(this.timeoutMs)});return i.ok?await i.json():{data:[]}}async deleteVideoTask(e,t,n){throw new Error("DashScope does not support task cancellation.")}extractMediaUrl(e){if(e.output?.video_url)return e.output.video_url;if(e.output?.audio_url)return e.output.audio_url;if(e.output?.results?.[0]?.url)return e.output.results[0].url}}});import{writeFileSync as OS,mkdirSync as DS}from"node:fs";import{join as bu}from"node:path";import{randomUUID as LS}from"node:crypto";var NS,$S,Dr,US,wo,ku=N(()=>{"use strict";hn();NS=18e4,$S=3e3,Dr=6e5,US=new Set(["glm-image"]),wo=class{supportedTypes=["image","video","tts","stt","embedding","voice_clone","document_parsing","rerank"];baseUrl;timeoutMs;constructor(e){this.baseUrl=e.baseUrl.replace(/\/+$/,""),this.timeoutMs=e.timeoutMs??NS}async generate(e,t,n){switch(e.mediaType){case"image":return this.generateImage(e,t,n);case"video":return this.generateVideo(e,t,n);case"tts":return this.generateTTS(e,t,n);case"stt":return this.generateSTT(e,t,n);case"embedding":return this.generateEmbedding(e,t,n);case"voice_clone":return this.generateVoiceClone(e,t,n);case"document_parsing":return this.generateDocumentParsing(e,t,n);case"rerank":return this.generateRerank(e,t,n);default:throw new Error(`ZhipuMediaTransport: unsupported mediaType "${e.mediaType}"`)}}async generateImage(e,t,n){return US.has(e.model)?this.generateImageAsync(e,t,n):this.generateImageSync(e,t,n)}async generateImageSync(e,t,n){let r=Date.now(),s=`${this.baseUrl}/images/generations`,i={model:e.model,prompt:e.prompt};return e.size&&(i.size=e.size),e.quality&&e.model.startsWith("cogview-4")&&(i.quality=e.quality),{mediaUrls:((await this.postJSON(s,i,t,n)).data??[]).map(d=>d.url).filter(d=>!!d),model:e.model,size:e.size,durationMs:Date.now()-r}}async generateImageAsync(e,t,n){let r=Date.now(),s=`${this.baseUrl}/async/images/generations`,i={model:e.model,prompt:e.prompt};e.size&&(i.size=e.size),e.quality&&(i.quality=e.quality);let c=(await this.postJSON(s,i,t,n)).id;if(!c)throw new Error("Zhipu async image: no task id in response");return{mediaUrls:((await this.pollAsyncResult(c,t,n,e.onProgress)).data??[]).map(p=>p.url).filter(p=>!!p),model:e.model,size:e.size,durationMs:Date.now()-r}}async generateVideo(e,t,n){let r=Date.now(),s=`${this.baseUrl}/videos/generations`,i={model:e.model,prompt:e.prompt};e.imageUrl&&(i.image_url=e.imageUrl),e.size&&(i.size=e.size),e.duration&&(i.duration=e.duration);let c=(await this.postJSON(s,i,t,n)).id;if(!c)throw new Error("Zhipu video generation: no task id in response");return{mediaUrls:((await this.pollAsyncResult(c,t,n,e.onProgress)).video_result??[]).map(p=>p.url).filter(p=>!!p),model:e.model,durationMs:Date.now()-r}}async generateTTS(e,t,n){let r=Date.now(),s=e.text||e.prompt;if(!s)throw new Error("ZhipuMediaTransport: text or prompt required for TTS");let i=`${this.baseUrl}/audio/speech`,a={model:e.model||"glm-tts",input:s};e.voice&&(a.voice=e.voice),e.speed!==void 0&&(a.speed=e.speed),e.audioFormat&&(a.response_format=e.audioFormat);let c=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(a),signal:n??AbortSignal.timeout(this.timeoutMs)});if(!c.ok){let h=await c.text().catch(()=>"");throw new Error(`Zhipu TTS API error ${c.status}: ${h}`)}let l=Buffer.from(await c.arrayBuffer()),d=bu(ut(),"tts");DS(d,{recursive:!0});let u=e.audioFormat??"wav",p=`zhipu-tts-${LS()}.${u}`,m=bu(d,p);return OS(m,l),{mediaUrls:[`file://${m}`],model:e.model||"glm-tts",durationMs:Date.now()-r,billingUnit:"per_character",billingQuantity:s.length}}async generateSTT(e,t,n){let r=Date.now();if(!e.audioUrl)throw new Error("ZhipuMediaTransport: audioUrl required for STT");let s=`${this.baseUrl}/audio/transcriptions`,i=await fetch(e.audioUrl,{headers:{"User-Agent":"qlogicagent/1.0"},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!i.ok)throw new Error(`Failed to fetch audio from ${e.audioUrl}`);let a=await i.blob(),c=new FormData;c.append("model",e.model||"glm-asr-2512"),c.append("file",a,"audio.wav");let l=await fetch(s,{method:"POST",headers:{Authorization:`Bearer ${t}`},body:c,signal:n??AbortSignal.timeout(this.timeoutMs)});if(!l.ok){let u=await l.text().catch(()=>"");throw new Error(`Zhipu STT API error ${l.status}: ${u}`)}let d=await l.json();return{mediaUrls:[],model:e.model||"glm-asr-2512",durationMs:Date.now()-r,metadata:{transcription:d.text??""}}}async generateEmbedding(e,t,n){let r=Date.now(),s=e.text||e.prompt;if(!s)throw new Error("ZhipuMediaTransport: text or prompt required for embedding");let i=`${this.baseUrl}/embeddings`,a={model:e.model||"embedding-3",input:s},l=(await this.postJSON(i,a,t,n)).data??[];return{mediaUrls:[],model:e.model||"embedding-3",durationMs:Date.now()-r,metadata:{embeddings:l.map(d=>d.embedding).filter(Boolean)}}}async generateVoiceClone(e,t,n){let r=Date.now();if(!e.audioUrl)throw new Error("ZhipuMediaTransport: audioUrl required for voice_clone (sample audio)");let s=await fetch(e.audioUrl,{signal:n??AbortSignal.timeout(this.timeoutMs)});if(!s.ok)throw new Error(`Failed to fetch audio sample from ${e.audioUrl}`);let i=await s.blob(),a=new FormData;a.append("model",e.model||"glm-tts-clone"),a.append("file",i,"sample.wav"),(e.text||e.prompt)&&a.append("text",e.text||e.prompt||"");let c=`${this.baseUrl}/voice/clone`,l=await fetch(c,{method:"POST",headers:{Authorization:`Bearer ${t}`},body:a,signal:n??AbortSignal.timeout(this.timeoutMs)});if(!l.ok){let p=await l.text().catch(()=>"");throw new Error(`Zhipu Voice Clone API error ${l.status}: ${p}`)}let d=await l.json();return{mediaUrls:(d.data??[]).map(p=>p.url).filter(p=>!!p),model:e.model||"glm-tts-clone",durationMs:Date.now()-r,metadata:{voiceId:d.voice_id}}}async generateDocumentParsing(e,t,n){let r=Date.now(),s=e.imageUrl||e.audioUrl;if(!s&&!e.prompt)throw new Error("ZhipuMediaTransport: imageUrl/audioUrl (file URL) or prompt (base64) required for document_parsing");let i=`${this.baseUrl}/layout_parsing`,a={model:e.model||"glm-ocr"};s?a.file_url=s:e.prompt&&(a.content=e.prompt);let d=(await this.postJSON(i,a,t,n)).pages??[];return{mediaUrls:[],model:e.model||"glm-ocr",durationMs:Date.now()-r,metadata:{pages:d.map(u=>({pageNum:u.page_num,content:u.content,layouts:u.layouts}))}}}async generateRerank(e,t,n){let r=Date.now(),s=e.prompt;if(!s)throw new Error("ZhipuMediaTransport: prompt (query) required for rerank");if(!e.metadata?.documents)throw new Error("ZhipuMediaTransport: metadata.documents required for rerank");let i=`${this.baseUrl}/rerank`,a={model:e.model||"rerank",query:s,documents:e.metadata.documents};e.metadata.topN!==void 0&&(a.top_n=e.metadata.topN);let c=await this.postJSON(i,a,t,n);return{mediaUrls:[],model:e.model||"rerank",durationMs:Date.now()-r,metadata:{results:(c.results??[]).map(l=>({index:l.index,relevanceScore:l.relevance_score,document:l.document}))}}}async postJSON(e,t,n,r){let s=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:JSON.stringify(t),signal:r??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let i=await s.text().catch(()=>"");throw new Error(`Zhipu API error ${s.status}: ${i}`)}return s.json()}async pollAsyncResult(e,t,n,r){let s=Date.now()+Dr,i=`${this.baseUrl}/async-result/${encodeURIComponent(e)}`;for(;Date.now()<s;){n?.throwIfAborted();let a=await fetch(i,{method:"GET",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!a.ok){let d=await a.text().catch(()=>"");throw new Error(`Zhipu async-result error ${a.status}: ${d}`)}let c=await a.json();if(c.task_status==="SUCCESS")return r?.(100,"completed",e),c;if(c.task_status==="FAIL")throw new Error("Zhipu async task failed");let l=Date.now()-(s-Dr);r?.(Math.min(95,Math.round(l/Dr*100)),c.task_status??"running",e),await new Promise(d=>setTimeout(d,$S))}throw new Error(`Zhipu async task timed out after ${Dr/1e3}s`)}async getTaskStatus(e,t,n){let r=`${this.baseUrl}/async-result/${encodeURIComponent(e)}`,s=await fetch(r,{method:"GET",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let l=await s.text().catch(()=>"");throw new Error(`Zhipu task query error ${s.status}: ${l}`)}let i=await s.json(),a=i.task_status??"unknown";return{status:a==="SUCCESS"?"succeeded":a==="FAIL"?"failed":a==="PROCESSING"?"running":a.toLowerCase(),task:i}}async listVideoTasks(e,t,n){return{data:[]}}async deleteVideoTask(e,t,n){throw new Error("Zhipu does not support task cancellation. Tasks complete or timeout automatically.")}async listVoices(e,t){let n=`${this.baseUrl}/voice/`,r=await fetch(n,{method:"GET",headers:{Authorization:`Bearer ${e}`},signal:t??AbortSignal.timeout(this.timeoutMs)});if(!r.ok){let i=await r.text().catch(()=>"");throw new Error(`Zhipu voice list error ${r.status}: ${i}`)}return(await r.json()).data??[]}async deleteVoice(e,t,n){let r=`${this.baseUrl}/voice/${encodeURIComponent(e)}`,s=await fetch(r,{method:"DELETE",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let i=await s.text().catch(()=>"");throw new Error(`Zhipu voice delete error ${s.status}: ${i}`)}}}});function jS(o){switch(o.mediaType){case"video":return o.operation==="merge"?"merge":o.operation==="upscale"?"upscale":o.operation==="edit"?"edit":o.imageUrl?"img2video":"text2video";case"image":return o.operation==="edit"?"inpainting":o.imageUrl?"img2img":"text2image";case"music":return o.audioUrl?"cover":"text2music";case"music_realtime":return"realtime";case"tts":return"text2speech";case"3d":return o.imageUrl?"img2_3d":"text2_3d";default:return}}function FS(o,e){return!("operations"in o)||!o.operations?!0:o.operations.includes(e)}function BS(o){let e=o.baseUrl;switch(o.id){case"volcengine":return new dt({baseUrl:e});case"openai":return new So({baseUrl:e});case"minimax":return new yn({baseUrl:e});case"google":return new To({baseUrl:e});case"qwen":return new Or({baseUrl:e});case"zhipu":return new wo({baseUrl:e.replace(/\/api\/anthropic\/?$/,"/api/paas/v4")});case"zhipu-openai":case"zhipu-coding":return new wo({baseUrl:e.replace(/\/api\/coding\/paas\/v4\/?$/,"/api/paas/v4")});default:return}}var xo,vu=N(()=>{"use strict";Ir();La();Er();ja();yu();ku();xo=class{registry;transports=new Map;constructor(e){this.registry=e.registry}resolveModelById(e,t,n){let r=this.registry.getProvider(e);if(!r)return;let i=this.registry.listModels(e).find(a=>a.id===t&&a.mediaType===n);if(i)return{providerId:e,providerDef:r,modelInfo:i,mediaType:n}}getTransport(e){let t=this.transports.get(e);if(t)return t;let n=this.registry.getProvider(e);if(!n)return;let r=BS(n);if(r)return this.transports.set(e,r),r}listMediaModels(e){let t=[];for(let n of this.registry.listProviders()){let r=this.registry.listModels(n.id);for(let s of r)s.mediaType&&(!e||s.mediaType===e)&&t.push({providerId:n.id,providerDef:n,modelInfo:s,mediaType:s.mediaType})}return t}findModelInProvider(e,t,n){let r=this.registry.getProvider(e);if(!r)return;let s=this.registry.listModels(e),i=n?jS(n):void 0,a=s.find(c=>c.mediaType!==t?!1:!i||!c.mediaCapabilities?!0:FS(c.mediaCapabilities,i));if(a)return{providerId:e,providerDef:r,modelInfo:a,mediaType:t}}}});var Fa,Ba=N(()=>{"use strict";Fa=[{id:"deepseek",name:"DeepSeek",transport:"anthropic-messages",baseUrl:"https://api.deepseek.com/anthropic",apiKeyEnvVars:["DEEPSEEK_API_KEY"],authType:"x-api-key",isAggregator:!1,defaultModel:"deepseek-v4-flash",quirks:{useEffortInsteadOfBudget:!0,filterImageBlocks:!0,maxReasoningEffort:"max",supportsPrefixCompletion:!0,supportsThinkingParam:!0,disableThinkingByDefault:!0},models:[{id:"deepseek-v4-flash",name:"DeepSeek V4 Flash",contextWindow:1e6,maxOutput:384e3,toolCall:!0,reasoning:!0,vision:!1,costInput:.14,costOutput:.28,costCacheRead:.003},{id:"deepseek-v4-pro",name:"DeepSeek V4 Pro",contextWindow:1e6,maxOutput:384e3,toolCall:!0,reasoning:!0,vision:!1,costInput:1.74,costOutput:3.48,costCacheRead:.014}]},{id:"qwen",name:"Alibaba Qwen (DashScope)",transport:"anthropic-messages",baseUrl:"https://dashscope.aliyuncs.com/apps/anthropic",apiKeyEnvVars:["DASHSCOPE_API_KEY","QWEN_API_KEY"],authType:"x-api-key",isAggregator:!1,defaultModel:"qwen3.6-plus",quirks:{supportsThinkingParam:!0,disableThinkingByDefault:!0},models:[{id:"qwen3.6-max-preview",name:"Qwen3.6 Max (Preview)",contextWindow:1e6,maxOutput:65536,toolCall:!0,reasoning:!0,vision:!0,costInput:2,costOutput:8,costCacheRead:.2,costCacheWrite:2.5},{id:"qwen3.6-plus",name:"Qwen3.6 Plus",contextWindow:1e6,maxOutput:65536,toolCall:!0,reasoning:!0,vision:!0,costInput:.5,costOutput:3,costCacheRead:.05,costCacheWrite:.625},{id:"qwen3.6-flash",name:"Qwen3.6 Flash",contextWindow:1e6,maxOutput:65536,toolCall:!0,reasoning:!0,vision:!0,costInput:.1,costOutput:.5,costCacheRead:.01,costCacheWrite:.125},{id:"qwq-plus",name:"QwQ Plus",contextWindow:131072,maxOutput:65536,toolCall:!0,reasoning:!0,reasoningRequired:!0,streamRequired:!0,vision:!1,costInput:.5,costOutput:3,costCacheRead:.05,costCacheWrite:.625},{id:"qwen-max",name:"Qwen Max",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:2,costOutput:6,costCacheRead:.2,costCacheWrite:2.5},{id:"qwen-plus",name:"Qwen Plus",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:.3,costOutput:.85,costCacheRead:.03,costCacheWrite:.375},{id:"qwen-flash",name:"Qwen Flash",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1},{id:"qwen-turbo",name:"Qwen Turbo",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!1,vision:!1},{id:"qwen-vl-max",name:"Qwen VL Max",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!1,vision:!0,costInput:3,costOutput:8.5},{id:"qwen3.5-omni-plus",name:"Qwen3.5 Omni Plus",contextWindow:131072,maxOutput:16384,toolCall:!1,reasoning:!1,streamRequired:!0,vision:!0},{id:"qwen3.5-omni-plus-realtime",name:"Qwen3.5 Omni Plus Realtime",contextWindow:131072,maxOutput:16384,toolCall:!1,reasoning:!1,streamRequired:!0,vision:!0,mediaType:"realtime_audio",mediaCapabilities:{type:"realtime_audio",modalities:["text","audio"],vad:!0,toolCalling:!1}},{id:"qwen-vl-ocr",name:"Qwen VL OCR",contextWindow:131072,maxOutput:4096,toolCall:!1,reasoning:!1,vision:!0,mediaType:"document_parsing",mediaCapabilities:{type:"document_parsing",supportedFormats:["jpg","jpeg","png","bmp","tiff","pdf"],maxFileSizeMB:10}},{id:"qwen3-tts-voicedesign",name:"Qwen3 TTS VoiceDesign",contextWindow:32768,maxOutput:16384,toolCall:!1,reasoning:!1,vision:!1,mediaType:"tts",mediaCapabilities:{type:"tts",operations:["text2speech","voice_clone"],maxCharacters:32768,formats:["mp3","wav"]}},{id:"cosyvoice-v2",name:"CosyVoice V2",contextWindow:1e4,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"tts",mediaCapabilities:{type:"tts",operations:["text2speech","voice_clone"],maxCharacters:1e4,formats:["mp3","wav","pcm"]}},{id:"wan2.7-image-pro",name:"Wan 2.7 Image Pro",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"image",mediaCapabilities:{type:"image",operations:["text2image"],sizes:["1024x1024","1280x720","720x1280","2048x2048","3840x2160"]}},{id:"wanx2.1-t2i-turbo",name:"Wan 2.1 Text-to-Image Turbo",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"image",mediaCapabilities:{type:"image",operations:["text2image"],sizes:["1024x1024","720x1280","1280x720"]}},{id:"wan2.7-t2v-plus",name:"Wan 2.7 Text/Image-to-Video Plus",contextWindow:2e3,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"video",mediaCapabilities:{type:"video",operations:["text2video","img2video"],maxDurationSeconds:15,resolutions:["720P","1080P"]}},{id:"wanx2.1-t2v-turbo",name:"Wan 2.1 Text/Image-to-Video Turbo",contextWindow:2e3,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"video",mediaCapabilities:{type:"video",operations:["text2video","img2video"],maxDurationSeconds:5,resolutions:["480P","720P"]}},{id:"text-embedding-v4",name:"Text Embedding V4",contextWindow:8192,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"embedding",mediaCapabilities:{type:"embedding",dimensions:1024,maxTokens:8192}},{id:"sensevoice-v1",name:"SenseVoice V1",contextWindow:0,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"stt",mediaCapabilities:{type:"stt",languages:["zh","en","ja","ko","yue"],formats:["wav","mp3","m4a","flac","aac"]}},{id:"wanx-background-generation-v2",name:"Wan Background Generation V2",contextWindow:2e3,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"image",mediaCapabilities:{type:"image",operations:["inpainting"],sizes:["1024x1024","1280x720","720x1280"]}},{id:"qwen3-rerank",name:"Qwen3 Rerank",contextWindow:32768,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"rerank",mediaCapabilities:{type:"rerank",maxDocuments:100}}]},{id:"zhipu",name:"\u93C5\u9E3F\u6C28 GLM (Zhipu)",group:"zhipu",transport:"anthropic-messages",baseUrl:"https://open.bigmodel.cn/api/anthropic",apiKeyEnvVars:["ZHIPU_API_KEY","GLM_API_KEY"],authType:"x-api-key",isAggregator:!1,defaultModel:"glm-5.1",quirks:{filterThinkingBlocks:!0},models:[{id:"glm-5.1",name:"GLM-5.1",contextWindow:2e5,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!1,costInput:6,costOutput:24,costCacheRead:1.3},{id:"glm-5",name:"GLM-5",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!1,costInput:1,costOutput:3.2,costCacheRead:.2},{id:"glm-5-turbo",name:"GLM-5 Turbo",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:.5,costOutput:1,costCacheRead:.1},{id:"glm-4.7",name:"GLM-4.7",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:1,costOutput:3.2,costCacheRead:.2},{id:"glm-4.6",name:"GLM-4.6",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:1,costOutput:3.2,costCacheRead:.2},{id:"glm-4.5-air",name:"GLM-4.5 Air",contextWindow:131072,maxOutput:98304,toolCall:!0,reasoning:!0,vision:!1,costInput:.5,costOutput:1.5,costCacheRead:.1},{id:"glm-4-long",name:"GLM-4 Long",contextWindow:1e6,maxOutput:4096,toolCall:!0,reasoning:!1,vision:!1,costInput:.1,costOutput:.1},{id:"glm-4.7-flash",name:"GLM-4.7 Flash (Free)",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:0,costOutput:0},{id:"glm-4.5-flash",name:"GLM-4.5 Flash (Free)",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:0,costOutput:0},{id:"glm-5v-turbo",name:"GLM-5V Turbo",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!0,costInput:.5,costOutput:1},{id:"glm-4.6v",name:"GLM-4.6V",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!0,costInput:1,costOutput:3.2},{id:"glm-4.6v-flash",name:"GLM-4.6V Flash (Free)",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!1,vision:!0,costInput:0,costOutput:0},{id:"cogview-4-250304",name:"CogView-4",contextWindow:0,maxOutput:0,toolCall:!1,reasoning:!1,vision:!1,mediaType:"image",mediaCapabilities:{type:"image",operations:["text2image"],sizes:["1024x1024","768x1344","864x1152","1344x768","1152x864","1440x720","720x1440"]}},{id:"cogview-3-flash",name:"CogView-3 Flash (Free)",contextWindow:0,maxOutput:0,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"image",mediaCapabilities:{type:"image",operations:["text2image"],sizes:["1024x1024","768x1344","864x1152","1344x768","1152x864","1440x720","720x1440"]}},{id:"glm-image",name:"GLM-Image",contextWindow:0,maxOutput:0,toolCall:!1,reasoning:!1,vision:!1,mediaType:"image",mediaCapabilities:{type:"image",operations:["text2image"],sizes:["1280x1280","1568x1056","1056x1568","1472x1088","1088x1472","1728x960","960x1728"]}},{id:"cogvideox-3",name:"CogVideoX-3",contextWindow:0,maxOutput:0,toolCall:!1,reasoning:!1,vision:!1,mediaType:"video",mediaCapabilities:{type:"video",operations:["text2video","img2video"],maxDurationSeconds:10,resolutions:["1080p"]}},{id:"cogvideox-flash",name:"CogVideoX Flash (Free)",contextWindow:0,maxOutput:0,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"video",mediaCapabilities:{type:"video",operations:["text2video","img2video"],maxDurationSeconds:6}},{id:"glm-tts",name:"GLM-TTS",contextWindow:0,maxOutput:0,toolCall:!1,reasoning:!1,vision:!1,mediaType:"tts",mediaCapabilities:{type:"tts",operations:["text2speech"],voices:["tongtong","chuichui","xiaochen","jam","kazi","douji","luodo"],maxCharacters:1024,formats:["wav","pcm"]}},{id:"glm-tts-clone",name:"GLM-TTS Clone",contextWindow:0,maxOutput:0,toolCall:!1,reasoning:!1,vision:!1,mediaType:"voice_clone",mediaCapabilities:{type:"voice_clone",maxSampleDurationSeconds:30,maxSampleSizeMB:10,formats:["wav","mp3"]}},{id:"glm-asr-2512",name:"GLM-ASR-2512",contextWindow:0,maxOutput:0,toolCall:!1,reasoning:!1,vision:!1,mediaType:"stt",mediaCapabilities:{type:"stt",languages:["zh","en"],maxDurationSeconds:30,formats:["wav","mp3"]}},{id:"glm-4-voice",name:"GLM-4-Voice",contextWindow:128e3,maxOutput:16e3,toolCall:!1,reasoning:!1,vision:!1,mediaType:"realtime_audio",mediaCapabilities:{type:"realtime_audio",modalities:["text","audio"],vad:!0,toolCalling:!1}},{id:"glm-realtime-flash",name:"GLM Realtime Flash",contextWindow:128e3,maxOutput:16e3,toolCall:!1,reasoning:!1,vision:!0,mediaType:"realtime_video",mediaCapabilities:{type:"realtime_video",modalities:["text","audio","video"],vad:!0,toolCalling:!1}},{id:"glm-realtime-air",name:"GLM Realtime Air",contextWindow:128e3,maxOutput:16e3,toolCall:!1,reasoning:!1,vision:!0,mediaType:"realtime_video",mediaCapabilities:{type:"realtime_video",modalities:["text","audio","video"],vad:!0,toolCalling:!1}},{id:"embedding-3",name:"Embedding-3",contextWindow:0,maxOutput:0,toolCall:!1,reasoning:!1,vision:!1,mediaType:"embedding",mediaCapabilities:{type:"embedding",dimensions:2048,maxTokens:3072}},{id:"embedding-2",name:"Embedding-2",contextWindow:0,maxOutput:0,toolCall:!1,reasoning:!1,vision:!1,mediaType:"embedding",mediaCapabilities:{type:"embedding",dimensions:1024,maxTokens:512}},{id:"rerank",name:"GLM Rerank",contextWindow:0,maxOutput:0,toolCall:!1,reasoning:!1,vision:!1,mediaType:"rerank",mediaCapabilities:{type:"rerank",maxDocuments:128,maxQueryLength:4096,maxDocumentLength:4096}},{id:"glm-ocr",name:"GLM-OCR",contextWindow:0,maxOutput:0,toolCall:!1,reasoning:!1,vision:!1,mediaType:"document_parsing",mediaCapabilities:{type:"document_parsing",supportedFormats:["pdf","jpg","png"],maxPageCount:100,maxFileSizeMB:50}}]},{id:"zhipu-openai",name:"\u93C5\u9E3F\u6C28 GLM OpenAI (Zhipu)",group:"zhipu",transport:"openai-chat",baseUrl:"https://open.bigmodel.cn/api/paas/v4",apiKeyEnvVars:["ZHIPU_API_KEY","GLM_API_KEY"],authType:"bearer",isAggregator:!1,defaultModel:"glm-5.1",quirks:{supportsReasoningEffort:!0,supportsThinkingParam:!0,supportsToolStream:!0,builtinWebSearch:!0,builtinCodeInterpreter:!0},models:[{id:"glm-5.1",name:"GLM-5.1",contextWindow:2e5,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!1,costInput:6,costOutput:24,costCacheRead:1.3},{id:"glm-5",name:"GLM-5",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!1,costInput:1,costOutput:3.2,costCacheRead:.2},{id:"glm-5-turbo",name:"GLM-5 Turbo",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:.5,costOutput:1,costCacheRead:.1},{id:"glm-4.7",name:"GLM-4.7",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:1,costOutput:3.2,costCacheRead:.2},{id:"glm-4.6",name:"GLM-4.6",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:1,costOutput:3.2,costCacheRead:.2},{id:"glm-4.5-air",name:"GLM-4.5 Air",contextWindow:131072,maxOutput:98304,toolCall:!0,reasoning:!0,vision:!1,costInput:.5,costOutput:1.5,costCacheRead:.1},{id:"glm-4-long",name:"GLM-4 Long",contextWindow:1e6,maxOutput:4096,toolCall:!0,reasoning:!1,vision:!1,costInput:.1,costOutput:.1},{id:"glm-4.7-flash",name:"GLM-4.7 Flash (Free)",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:0,costOutput:0},{id:"glm-4.5-flash",name:"GLM-4.5 Flash (Free)",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:0,costOutput:0},{id:"glm-5v-turbo",name:"GLM-5V Turbo",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!0,costInput:.5,costOutput:1},{id:"glm-4.6v",name:"GLM-4.6V",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!0,costInput:1,costOutput:3.2},{id:"glm-4.6v-flash",name:"GLM-4.6V Flash (Free)",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!1,vision:!0,costInput:0,costOutput:0}]},{id:"zhipu-coding",name:"\u93C5\u9E3F\u6C28 GLM Coding (Zhipu)",group:"zhipu",transport:"openai-chat",baseUrl:"https://open.bigmodel.cn/api/coding/paas/v4",apiKeyEnvVars:["ZHIPU_API_KEY","GLM_API_KEY"],authType:"bearer",isAggregator:!1,defaultModel:"codegeex-4",quirks:{supportsReasoningEffort:!0,supportsThinkingParam:!0,supportsToolStream:!0},models:[{id:"codegeex-4",name:"CodeGeeX-4",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:.1,costOutput:.1}]},{id:"minimax",name:"MiniMax",group:"minimax",transport:"anthropic-messages",baseUrl:"https://api.minimaxi.com/anthropic",apiKeyEnvVars:["MINIMAX_API_KEY"],authType:"x-api-key",isAggregator:!1,defaultModel:"MiniMax-M2.7",omitZeroTemperature:!0,quirks:{filterImageBlocks:!0},models:[{id:"MiniMax-M2.7",name:"MiniMax M2.7",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!1,costInput:.3,costOutput:1.2,costCacheRead:.06,costCacheWrite:.375},{id:"MiniMax-M2.7-highspeed",name:"MiniMax M2.7 Highspeed",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!1,costInput:.3,costOutput:1.2,costCacheRead:.06,costCacheWrite:.375},{id:"MiniMax-M2.5",name:"MiniMax M2.5",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!1,costInput:.15,costOutput:.6,costCacheRead:.03,costCacheWrite:.19},{id:"MiniMax-M2.5-highspeed",name:"MiniMax M2.5 Highspeed",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!1,costInput:.15,costOutput:.6,costCacheRead:.03,costCacheWrite:.19},{id:"MiniMax-M2.1",name:"MiniMax M2.1 (legacy)",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!1,vision:!1,costInput:.15,costOutput:.6},{id:"MiniMax-M2.1-highspeed",name:"MiniMax M2.1 Highspeed (legacy)",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!1,vision:!1,costInput:.15,costOutput:.6},{id:"MiniMax-M2",name:"MiniMax M2 (legacy)",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!1,vision:!1,costInput:.1,costOutput:.4},{id:"music-2.6",name:"MiniMax Music 2.6",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"music",mediaCapabilities:{type:"music",operations:["text2music"],maxDurationSeconds:300,formats:["mp3","wav"]}},{id:"music-cover",name:"MiniMax Music Cover",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"music",mediaCapabilities:{type:"music",operations:["cover"],maxDurationSeconds:300,formats:["mp3","wav"]}},{id:"MiniMax-Hailuo-2.3",name:"Hailuo 2.3",contextWindow:2e3,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"video",mediaCapabilities:{type:"video",operations:["text2video","img2video"],maxDurationSeconds:10,resolutions:["768P","1080P"]}},{id:"MiniMax-Hailuo-2.3-Fast",name:"Hailuo 2.3 Fast",contextWindow:2e3,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"video",mediaCapabilities:{type:"video",operations:["text2video","img2video"],maxDurationSeconds:10,resolutions:["768P","1080P"]}},{id:"MiniMax-Hailuo-02",name:"Hailuo 02",contextWindow:2e3,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"video",mediaCapabilities:{type:"video",operations:["text2video","img2video"],maxDurationSeconds:10,resolutions:["512P","768P","1080P"]}},{id:"image-01",name:"MiniMax Image 01",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"image",mediaCapabilities:{type:"image",operations:["text2image","img2img"],sizes:["512x512","1024x1024","2048x2048"]}},{id:"image-01-live",name:"MiniMax Image 01 Live",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"image",mediaCapabilities:{type:"image",operations:["text2image"],sizes:["1024x1024"]}},{id:"speech-2.8-hd",name:"MiniMax Speech 2.8 HD",contextWindow:1e4,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"tts",mediaCapabilities:{type:"tts",operations:["text2speech","voice_clone"],formats:["mp3","pcm","flac","wav","opus"]}},{id:"speech-2.8-turbo",name:"MiniMax Speech 2.8 Turbo",contextWindow:1e4,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"tts",mediaCapabilities:{type:"tts",operations:["text2speech","voice_clone"],formats:["mp3","pcm","flac","wav","opus"]}},{id:"voice-clone",aliases:["minimax-voice-clone"],name:"MiniMax Voice Clone",contextWindow:0,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"voice_clone",mediaCapabilities:{type:"voice_clone",maxSampleDurationSeconds:30,maxSampleSizeMB:20,formats:["mp3","wav","m4a"]}}]},{id:"minimax-openai",name:"MiniMax (OpenAI)",group:"minimax",transport:"openai-chat",baseUrl:"https://api.minimaxi.com/v1",apiKeyEnvVars:["MINIMAX_API_KEY"],authType:"bearer",isAggregator:!1,omitZeroTemperature:!0,defaultModel:"MiniMax-M2.7",quirks:{supportsReasoningSplit:!0},models:[{id:"MiniMax-M2.7",aliases:["minimax-m2.7"],name:"MiniMax M2.7",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!1,costInput:.3,costOutput:1.2},{id:"MiniMax-M2.7-highspeed",name:"MiniMax M2.7 Highspeed",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!1,costInput:.3,costOutput:1.2},{id:"MiniMax-M2.5",name:"MiniMax M2.5",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!1,costInput:.15,costOutput:.6},{id:"MiniMax-M2.5-highspeed",name:"MiniMax M2.5 Highspeed",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!1,costInput:.15,costOutput:.6},{id:"MiniMax-M2.1",name:"MiniMax M2.1 (legacy)",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!1,vision:!1,costInput:.15,costOutput:.6},{id:"MiniMax-M2.1-highspeed",name:"MiniMax M2.1 Highspeed (legacy)",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!1,vision:!1,costInput:.15,costOutput:.6}]},{id:"moonshot",name:"Moonshot (Kimi)",transport:"openai-chat",baseUrl:"https://api.moonshot.cn",apiKeyEnvVars:["MOONSHOT_API_KEY"],authType:"bearer",isAggregator:!1,omitZeroTemperature:!0,defaultModel:"kimi-k2.6",quirks:{supportsReasoningEffort:!0,supportsThinkingParam:!0,disableThinkingByDefault:!0,builtinWebSearch:!0},models:[{id:"kimi-k2.6",name:"Kimi K2.6",contextWindow:262144,maxOutput:262144,toolCall:!0,reasoning:!0,vision:!0,costInput:.95,costOutput:4,costCacheRead:.16},{id:"kimi-k2.5",name:"Kimi K2.5",contextWindow:262144,maxOutput:262144,toolCall:!0,reasoning:!0,vision:!0,costInput:.8,costOutput:4,costCacheRead:.2},{id:"moonshot-v1-128k",name:"Moonshot V1 128K",contextWindow:131072,maxOutput:8192,toolCall:!0,reasoning:!1,vision:!1,costInput:.84,costOutput:.84}]},{id:"volcengine",name:"\u749E\u55D7\u5BD8 (Doubao/Volcengine)",transport:"volcengine-responses",baseUrl:"https://ark.cn-beijing.volces.com/api",apiKeyEnvVars:["ARK_API_KEY","DOUBAO_API_KEY"],authType:"bearer",isAggregator:!1,defaultModel:"doubao-seed-2-0-lite-260215",models:[{id:"doubao-seed-2-0-pro-260215",name:"Doubao Seed 2.0 Pro",contextWindow:262144,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!0,costInput:0,costOutput:0},{id:"doubao-seed-2-0-lite-260428",aliases:["doubao-seed-2-0-lite"],name:"Doubao Seed 2.0 Lite (0428)",contextWindow:262144,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!0,costInput:0,costOutput:0},{id:"doubao-seed-2-0-lite-260215",name:"Doubao Seed 2.0 Lite",contextWindow:262144,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!0,costInput:0,costOutput:0},{id:"doubao-seed-2-0-mini-260428",name:"Doubao Seed 2.0 Mini (0428)",contextWindow:262144,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!0,costInput:0,costOutput:0},{id:"doubao-seed-2-0-mini-260215",name:"Doubao Seed 2.0 Mini",contextWindow:262144,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!0,costInput:0,costOutput:0},{id:"doubao-seed-2-0-code-preview-260215",name:"Doubao Seed 2.0 Code Preview",contextWindow:262144,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!0,costInput:0,costOutput:0},{id:"doubao-seed-1-8-251228",name:"Doubao Seed 1.8",contextWindow:262144,maxOutput:65536,toolCall:!0,reasoning:!0,vision:!0,costInput:0,costOutput:0},{id:"doubao-seedance-2-0-260128",aliases:["doubao-seedance-2-0"],name:"Doubao Seedance 2.0",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!0,costInput:0,costOutput:0,mediaType:"video",mediaCapabilities:{type:"video",operations:["text2video","img2video","video2video","edit","merge","upscale"],maxDurationSeconds:15,resolutions:["480p","720p","1080p"],aspectRatios:["16:9","9:16","1:1"],fps:[24]}},{id:"doubao-seedance-2-0-fast-260128",aliases:["doubao-seedance-2-0-fast"],name:"Doubao Seedance 2.0 Fast",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!0,costInput:0,costOutput:0,mediaType:"video",mediaCapabilities:{type:"video",operations:["text2video","img2video","video2video","edit","merge","upscale"],maxDurationSeconds:15,resolutions:["480p","720p"],aspectRatios:["16:9","9:16","1:1"],fps:[24]}},{id:"doubao-seedream-5-0-260128",aliases:["doubao-seedream-5-0"],name:"Doubao Seedream 5.0",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!0,costInput:0,costOutput:0,mediaType:"image",mediaCapabilities:{type:"image",operations:["text2image","img2img"],sizes:["2K"]}},{id:"doubao-seedream-4-5-251128",aliases:["doubao-seedream-4-5"],name:"Doubao Seedream 4.5",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!0,costInput:0,costOutput:0,mediaType:"image",mediaCapabilities:{type:"image",operations:["text2image","img2img"],sizes:["2K"]}},{id:"doubao-seed3d-2-0-260328",aliases:["doubao-seed3d-2-0"],name:"Doubao Seed3D 2.0",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!0,costInput:0,costOutput:0,mediaType:"3d",mediaCapabilities:{type:"3d",operations:["img2_3d"],outputFormats:["glb","obj","usd","usdz"]}},{id:"hyper3d-gen2-260112",aliases:["hyper3d-gen2"],name:"Hyper3D Gen2",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!0,costInput:0,costOutput:0,mediaType:"3d",mediaCapabilities:{type:"3d",operations:["text2_3d","img2_3d"],outputFormats:["glb","obj"]}},{id:"hitem3d-2-0-251223",aliases:["hitem3d-2-0"],name:"HiTem3D 2.0",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!0,costInput:0,costOutput:0,mediaType:"3d",mediaCapabilities:{type:"3d",operations:["img2_3d"],outputFormats:["glb","obj","usd"]}}]},{id:"openai",name:"OpenAI",transport:"openai-responses",baseUrl:"https://api.openai.com",apiKeyEnvVars:["OPENAI_API_KEY"],authType:"bearer",isAggregator:!1,defaultModel:"gpt-5.5",quirks:{builtinWebSearch:!0,builtinCodeInterpreter:!0,builtinFileSearch:!0},models:[{id:"gpt-5.5",name:"GPT-5.5",contextWindow:105e4,maxOutput:128e3,toolCall:!0,reasoning:!0,vision:!0,costInput:5,costOutput:30,costCacheRead:.5},{id:"gpt-5.4",name:"GPT-5.4",contextWindow:105e4,maxOutput:128e3,toolCall:!0,reasoning:!0,vision:!0,costInput:2.5,costOutput:15,costCacheRead:.25},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini",contextWindow:4e5,maxOutput:128e3,toolCall:!0,reasoning:!0,vision:!0,costInput:.75,costOutput:4.5,costCacheRead:.075},{id:"gpt-5.4-nano",name:"GPT-5.4 Nano",contextWindow:4e5,maxOutput:128e3,toolCall:!0,reasoning:!0,vision:!0,costInput:.2,costOutput:1.25,costCacheRead:.02},{id:"gpt-image-2",name:"GPT Image 2",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!0,costInput:0,costOutput:0,mediaType:"image",mediaCapabilities:{type:"image",operations:["text2image","img2img","inpainting"],sizes:["1024x1024","1536x1024","1024x1536","auto"],transparentBackground:!0}},{id:"gpt-realtime-2",name:"GPT Realtime 2",contextWindow:128e3,maxOutput:16e3,toolCall:!0,reasoning:!0,vision:!1,mediaType:"realtime_audio",mediaCapabilities:{type:"realtime_audio",voices:["alloy","ash","ballad","coral","echo","fable","onyx","nova","sage","shimmer"],modalities:["text","audio"],vad:!0,toolCalling:!0}},{id:"gpt-realtime-translate",name:"GPT Realtime Translate",contextWindow:128e3,maxOutput:16e3,toolCall:!1,reasoning:!1,vision:!1,mediaType:"realtime_audio",mediaCapabilities:{type:"realtime_audio",voices:["alloy","ash","ballad","coral","echo","fable","onyx","nova","sage","shimmer"],modalities:["text","audio"],vad:!0,toolCalling:!1}},{id:"gpt-realtime-1.5",name:"GPT Realtime 1.5",contextWindow:128e3,maxOutput:16e3,toolCall:!0,reasoning:!1,vision:!1,mediaType:"realtime_audio",mediaCapabilities:{type:"realtime_audio",voices:["alloy","ash","ballad","coral","echo","fable","onyx","nova","sage","shimmer"],modalities:["text","audio"],vad:!0,toolCalling:!0}},{id:"gpt-realtime-mini",name:"GPT Realtime Mini",contextWindow:128e3,maxOutput:16e3,toolCall:!0,reasoning:!1,vision:!1,mediaType:"realtime_audio",mediaCapabilities:{type:"realtime_audio",voices:["alloy","ash","ballad","coral","echo","fable","onyx","nova","sage","shimmer"],modalities:["text","audio"],vad:!0,toolCalling:!0}}]},{id:"anthropic",name:"Anthropic",transport:"anthropic-messages",baseUrl:"https://api.anthropic.com",apiKeyEnvVars:["ANTHROPIC_API_KEY"],authType:"x-api-key",isAggregator:!1,defaultModel:"claude-opus-4-7",quirks:{supportsDocumentVision:!0},models:[{id:"claude-opus-4-7",name:"Claude Opus 4.7",contextWindow:1e6,maxOutput:128e3,toolCall:!0,reasoning:!0,vision:!0,costInput:5,costOutput:25,costCacheRead:.5,costCacheWrite:6.25},{id:"claude-opus-4-6",name:"Claude Opus 4.6",contextWindow:1e6,maxOutput:128e3,toolCall:!0,reasoning:!0,vision:!0,costInput:5,costOutput:25,costCacheRead:.5,costCacheWrite:6.25},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindow:1e6,maxOutput:64e3,toolCall:!0,reasoning:!0,vision:!0,costInput:3,costOutput:15,costCacheRead:.3,costCacheWrite:3.75},{id:"claude-sonnet-4-5",name:"Claude Sonnet 4.5",contextWindow:2e5,maxOutput:64e3,toolCall:!0,reasoning:!0,vision:!0,costInput:3,costOutput:15,costCacheRead:.3,costCacheWrite:3.75},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5",contextWindow:2e5,maxOutput:64e3,toolCall:!0,reasoning:!0,vision:!0,costInput:1,costOutput:5,costCacheRead:.1,costCacheWrite:1.25}]},{id:"google",name:"Google Gemini",transport:"gemini-generatecontent",baseUrl:"https://generativelanguage.googleapis.com/v1beta",apiKeyEnvVars:["GOOGLE_API_KEY","GEMINI_API_KEY"],authType:"x-api-key",isAggregator:!1,defaultModel:"gemini-3-flash-preview",quirks:{builtinWebSearch:!0,builtinCodeInterpreter:!0,builtinUrlContext:!0,builtinMapsGrounding:!0,builtinFileSearch:!0,supportsDocumentVision:!0},models:[{id:"gemini-3.1-pro-preview",name:"Gemini 3.1 Pro",contextWindow:1048576,maxOutput:65536,toolCall:!0,reasoning:!0,reasoningRequired:!0,vision:!0,costInput:2,costOutput:12},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash",contextWindow:1048576,maxOutput:65536,toolCall:!0,reasoning:!0,vision:!0,costInput:.5,costOutput:3},{id:"gemini-3.1-flash-lite",name:"Gemini 3.1 Flash-Lite",contextWindow:1048576,maxOutput:65536,toolCall:!0,reasoning:!0,vision:!0,costInput:.25,costOutput:1.5},{id:"gemini-3.1-flash-image-preview",name:"Gemini 3.1 Flash Image (Nano Banana 2)",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!0,costInput:0,costOutput:0,mediaType:"image",mediaCapabilities:{type:"image",operations:["text2image","img2img"],sizes:["1024x1024"]}},{id:"gemini-3-pro-image-preview",name:"Gemini 3 Pro Image (Nano Banana Pro)",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!0,costInput:0,costOutput:0,mediaType:"image",mediaCapabilities:{type:"image",operations:["text2image","img2img"],sizes:["1024x1024"]}},{id:"veo-3.1-generate-preview",name:"Veo 3.1 Standard",contextWindow:2e3,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"video",mediaCapabilities:{type:"video",operations:["text2video","img2video"],maxDurationSeconds:8,resolutions:["720P","1080P","4K"]}},{id:"veo-3.1-fast-generate-preview",name:"Veo 3.1 Fast",contextWindow:2e3,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"video",mediaCapabilities:{type:"video",operations:["text2video","img2video"],maxDurationSeconds:8,resolutions:["720P","1080P","4K"]}},{id:"veo-3.1-lite-generate-preview",name:"Veo 3.1 Lite",contextWindow:2e3,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"video",mediaCapabilities:{type:"video",operations:["text2video","img2video"],maxDurationSeconds:8,resolutions:["720P","1080P"]}},{id:"lyria-3-pro-preview",name:"Lyria 3 Pro",contextWindow:2e3,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"music",mediaCapabilities:{type:"music",operations:["text2music"],maxDurationSeconds:300,formats:["mp3"]}},{id:"lyria-3-clip-preview",name:"Lyria 3 Clip",contextWindow:2e3,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"music",mediaCapabilities:{type:"music",operations:["text2music"],maxDurationSeconds:30,formats:["mp3"]}},{id:"lyria-realtime-exp",name:"Lyria RealTime (Experimental)",contextWindow:2e3,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"music_realtime",mediaCapabilities:{type:"music",operations:["realtime"],formats:["wav"]}},{id:"gemini-3.1-flash-tts-preview",name:"Gemini 3.1 Flash TTS",contextWindow:8192,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:1,costOutput:20,mediaType:"tts",mediaCapabilities:{type:"tts",operations:["text2speech"],maxCharacters:8e3,formats:["mp3","wav"]}},{id:"gemini-embedding-2",name:"Gemini Embedding 2 (Multimodal)",contextWindow:8192,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:.2,costOutput:0,mediaType:"embedding",mediaCapabilities:{type:"embedding",dimensions:3072,maxTokens:8192}}]},{id:"openrouter",name:"OpenRouter",transport:"openai-chat",baseUrl:"https://openrouter.ai/api",apiKeyEnvVars:["OPENROUTER_API_KEY"],authType:"bearer",isAggregator:!0,defaultModel:"anthropic/claude-opus-4.7",extraHeaders:{"HTTP-Referer":"https://claw.bot","X-Title":"XiaozhiClaw"},models:[{id:"anthropic/claude-opus-4.7",name:"Claude Opus 4.7 (via OpenRouter)",contextWindow:1e6,maxOutput:128e3,toolCall:!0,reasoning:!0,vision:!0,costInput:5,costOutput:25,costCacheRead:.5},{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6 (via OpenRouter)",contextWindow:1e6,maxOutput:128e3,toolCall:!0,reasoning:!0,vision:!0,costInput:5,costOutput:25,costCacheRead:.5},{id:"deepseek/deepseek-v4-flash",name:"DeepSeek V4 Flash (via OpenRouter)",contextWindow:1048576,maxOutput:393216,toolCall:!0,reasoning:!0,vision:!1,costInput:.14,costOutput:.28,costCacheRead:.028}]},{id:"qwen-coding",name:"Alibaba Qwen (Coding Plan)",transport:"anthropic-messages",baseUrl:"https://coding.dashscope.aliyuncs.com/apps/anthropic",apiKeyEnvVars:["DASHSCOPE_API_KEY","QWEN_API_KEY"],authType:"x-api-key",isAggregator:!1,defaultModel:"qwen3-coder-plus",models:[{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus (Coding Plan)",contextWindow:262144,maxOutput:65536,toolCall:!0,reasoning:!0,vision:!1},{id:"qwen3-coder-flash",name:"Qwen3 Coder Flash (Coding Plan)",contextWindow:262144,maxOutput:65536,toolCall:!0,reasoning:!0,vision:!1}]}]});import{existsSync as WS,mkdirSync as GS,readFileSync as HS,writeFileSync as VS}from"node:fs";import{join as KS}from"node:path";function Su(o){let e=new Map;if(!o||typeof o!="object")return e;for(let[t,n]of Object.entries(o)){let r=wu[t];if(!r||!n||typeof n!="object")continue;let i=n.models;if(!i||typeof i!="object")continue;let a=e.get(r);a||(a={models:new Map},e.set(r,a));for(let[c,l]of Object.entries(i)){if(!l||typeof l!="object"||a.models.has(c))continue;let d=l,u=typeof d.family=="string"?d.family:"";if(xu(u,c)||c.toLowerCase().includes("reranker"))continue;let p=d.cost??{},m=d.limit??{},h=d.modalities??{},f=Array.isArray(h.input)?h.input:[],y=Array.isArray(h.output)?h.output:[],b=JS(y,f,c);a.models.set(c,{id:c,name:typeof d.name=="string"?d.name:c,contextWindow:typeof m.context=="number"?m.context:2e5,maxOutput:typeof m.output=="number"?m.output:8192,toolCall:d.tool_call===!0,reasoning:d.reasoning===!0,vision:d.attachment===!0||f.includes("image"),costInput:typeof p.input=="number"?p.input:void 0,costOutput:typeof p.output=="number"?p.output:void 0,costCacheRead:typeof p.cache_read=="number"?p.cache_read:void 0,costCacheWrite:typeof p.cache_write=="number"?p.cache_write:void 0,mediaType:b})}}return e}function JS(o,e,t){if(o.includes("video"))return"video";if(o.includes("image")&&!o.includes("text"))return"image";if(o.includes("audio")&&!o.includes("text"))return"tts";if(o.includes("3d"))return"3d";if(e.includes("video")&&o.includes("text"))return"video_understanding";let n=t.toLowerCase();if(n.includes("tts")||n.includes("speech")||n.includes("cosyvoice"))return"tts";if(n.includes("music")||n.includes("suno"))return"music";if(n.includes("seedream")||n.includes("image")||n.includes("dall"))return"image";if(n.includes("seedance")||n.includes("video"))return"video"}function xu(o,e){return o&&ZS.has(o)?!0:eT.some(t=>t.test(e))}function Tu(o){let e=new Map;if(!o||typeof o!="object")return e;for(let[t,n]of Object.entries(o)){let r=wu[t];if(!r||!n||typeof n!="object")continue;let i=n.models;if(!(!i||typeof i!="object"))for(let[a,c]of Object.entries(i)){if(!c||typeof c!="object")continue;let l=c,d=typeof l.family=="string"?l.family:"";if(!xu(d,a)||a.toLowerCase().includes("reranker"))continue;let u=l.limit??{},p=l.cost??{},m=typeof u.output=="number"?u.output:0,h=typeof u.context=="number"?u.context:512;if(m<=1)continue;let f={id:a,name:typeof l.name=="string"?l.name:a,providerId:r,dimensions:m,maxInputTokens:h,costInput:typeof p.input=="number"?p.input:void 0,family:d},y=e.get(r);y||(y=[],e.set(r,y)),y.push(f)}}for(let t of e.values())t.sort((n,r)=>{let s=n.costInput??0,i=r.costInput??0;return s!==i?s-i:r.dimensions-n.dimensions});for(let[t,n]of Object.entries(QS)){let r=e.get(t);(!r||r.length===0)&&e.set(t,[...n])}return e}var zS,qS,YS,XS,wu,Ro,QS,ZS,eT,Wa=N(()=>{"use strict";hn();zS="https://models.dev/api.json",qS=3e4,YS=1440*60*1e3,XS=300*1e3,wu={deepseek:"deepseek",qwen:"qwen","qwen-coding-plan":"qwen-coding","alibaba-cn":"qwen",zhipuai:"zhipu",minimax:"minimax",moonshot:"moonshot",moonshotai:"moonshot","moonshotai-cn":"moonshot",doubao:"volcengine","bytedance-seed":"volcengine",volcengine:"volcengine",openai:"openai",anthropic:"anthropic",google:"google",openrouter:"openrouter"},Ro=class{cache=null;cacheDir;cacheFile;ttlMs;fetching=!1;lastFetchAttempt=0;constructor(e){this.cacheDir=e?.cacheDir??ut(),this.cacheFile=KS(this.cacheDir,"model_catalog.json"),this.ttlMs=e?.ttlMs??YS}getModels(e){this.ensureLoaded();let t=this.cache?.providers.get(e);return t?[...t.models.values()]:[]}getModel(e,t){return this.ensureLoaded(),this.cache?.providers.get(e)?.models.get(t)}listProviderIds(){return this.ensureLoaded(),this.cache?[...this.cache.providers.keys()]:[]}getEmbeddingModels(e){return this.ensureLoaded(),this.cache?.embeddingModels.get(e)??[]}getDefaultEmbeddingModel(e){let t=this.getEmbeddingModels(e);return t.filter(r=>r.dimensions>=512)[0]??t[0]}getAllEmbeddingModels(){return this.ensureLoaded(),this.cache?.embeddingModels??new Map}async refreshCatalog(){return this.fetchRemote()}ensureLoaded(){this.cache&&!this.isStale()||(this.cache||this.loadFromDisk(),(!this.cache||this.isStale())&&this.backgroundFetch())}isStale(){return this.cache?Date.now()-this.cache.fetchedAt>this.ttlMs:!0}loadFromDisk(){try{if(!WS(this.cacheFile))return;let e=HS(this.cacheFile,"utf8"),t=JSON.parse(e);if(!t.fetchedAt||!t.data)return;this.cache={fetchedAt:t.fetchedAt,providers:Su(t.data),embeddingModels:Tu(t.data)}}catch{}}saveToDisk(e){try{GS(this.cacheDir,{recursive:!0});let t=JSON.stringify({fetchedAt:Date.now(),data:e},null,0);VS(this.cacheFile,t,"utf8")}catch{}}backgroundFetch(){this.fetching||Date.now()-this.lastFetchAttempt<XS||(this.fetching=!0,this.fetchRemote().finally(()=>{this.fetching=!1}))}async fetchRemote(){this.lastFetchAttempt=Date.now();try{let e=await fetch(zS,{signal:AbortSignal.timeout(qS),headers:{Accept:"application/json"}});if(!e.ok)return!1;let t=await e.json(),n=Su(t);return n.size===0?!1:(this.cache={fetchedAt:Date.now(),providers:n,embeddingModels:Tu(t)},this.saveToDisk(t),!0)}catch{return!1}}};QS={qwen:[{id:"text-embedding-v3",name:"Text Embedding v3",providerId:"qwen",dimensions:1024,maxInputTokens:8192,costInput:.7,family:"text-embedding"},{id:"text-embedding-v2",name:"Text Embedding v2",providerId:"qwen",dimensions:1536,maxInputTokens:2048,costInput:.7,family:"text-embedding"}],zhipu:[{id:"embedding-3",name:"Embedding-3",providerId:"zhipu",dimensions:2048,maxInputTokens:8192,costInput:.5,family:"text-embedding"},{id:"embedding-2",name:"Embedding-2",providerId:"zhipu",dimensions:1024,maxInputTokens:512,costInput:.5,family:"text-embedding"}],minimax:[{id:"embo-01",name:"embo-01",providerId:"minimax",dimensions:1536,maxInputTokens:4096,costInput:.5,family:"text-embedding"}],volcengine:[{id:"doubao-embedding-vision-251215",name:"Doubao Embedding Vision (Latest)",providerId:"volcengine",dimensions:1024,maxInputTokens:128e3,costInput:.5,family:"text-embedding"},{id:"doubao-embedding-vision-250615",name:"Doubao Embedding Vision",providerId:"volcengine",dimensions:1024,maxInputTokens:128e3,costInput:.5,family:"text-embedding"}],google:[{id:"text-embedding-004",name:"Text Embedding 004",providerId:"google",dimensions:768,maxInputTokens:2048,costInput:.025,family:"text-embedding"},{id:"gemini-embedding-001",name:"Gemini Embedding",providerId:"google",dimensions:3072,maxInputTokens:8192,costInput:0,family:"text-embedding"}]},ZS=new Set(["text-embedding","bge","cohere-embed","plamo"]),eT=[/embed/i,/^bge-/i,/^gte-/i,/^e5-/i,/multi-qa-/i]});var tT,$n,Ru=N(()=>{"use strict";Ba();Wa();tT={claude:"anthropic",gemini:"google",doubao:"volcengine"},$n=class{builtins=new Map;catalog;overrides=new Map;constructor(e){for(let t of Fa)this.builtins.set(t.id,t);this.catalog=e?.catalog??new Ro}applyOverride(e,t){this.overrides.set(e,{...this.overrides.get(e),...t})}getProvider(e){let t=tT[e]??e,n=this.builtins.get(t),r=this.overrides.get(t);if(!(!n&&!r))return!n&&r?!r.id||!r.transport||!r.baseUrl?void 0:{id:r.id,name:r.name??r.id,transport:r.transport,baseUrl:r.baseUrl,apiKeyEnvVars:r.apiKeyEnvVars??[],authType:r.authType??"bearer",isAggregator:r.isAggregator??!1,defaultModel:r.defaultModel,models:r.models}:n&&!r?n:{...n,...r,models:r.models??n.models}}listProviders(){let e=new Map;for(let[t,n]of this.builtins)e.set(t,n);for(let[t]of this.overrides){let n=this.getProvider(t);n&&e.set(t,n)}return[...e.values()]}listModels(e){let n=this.getProvider(e)?.models??[],r=this.catalog.getModels(e);if(r.length===0)return n;let s=new Map;for(let i of r)s.set(i.id,i);for(let i of n)s.set(i.id,i);return[...s.values()]}getModelInfo(e,t){return this.listModels(e).find(n=>n.id===t)}async refreshCatalog(){return this.catalog.refreshCatalog()}resolveApiKey(e,t){if(t)return t;let n=this.getProvider(e);if(n)for(let r of n.apiKeyEnvVars){let s=process.env[r];if(s?.trim())return s.trim()}}}});var Un=N(()=>{"use strict"});function oT(o){let e=o.slice(o.lastIndexOf(".")).toLowerCase();return nT[e]||"application/octet-stream"}function sT(o){return rT.test(o)}async function _u(o,e,t,n){if(o.startsWith("data:")||!sT(o))return o;let r=await fetch(o,{signal:n});if(!r.ok)throw new Error(`Failed to fetch local media ${o}: ${r.status}`);let s=Buffer.from(await r.arrayBuffer()),i=iT(o),a=r.headers.get("content-type")||oT(i);return(await e.uploadFile(s,i,a,t,n)).url}function iT(o){try{let t=new URL(o).pathname.split("/").pop();return t&&t.includes(".")?t:"upload"}catch{return"upload"}}var nT,rT,Au=N(()=>{"use strict";nT={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".svg":"image/svg+xml",".bmp":"image/bmp",".avif":"image/avif",".heic":"image/heic",".mp4":"video/mp4",".webm":"video/webm",".mov":"video/quicktime",".avi":"video/x-msvideo",".mkv":"video/x-matroska",".mp3":"audio/mpeg",".wav":"audio/wav",".ogg":"audio/ogg",".aac":"audio/aac",".flac":"audio/flac",".m4a":"audio/mp4",".opus":"audio/opus",".pdf":"application/pdf",".doc":"application/msword",".docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document",".xls":"application/vnd.ms-excel",".xlsx":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",".ppt":"application/vnd.ms-powerpoint",".pptx":"application/vnd.openxmlformats-officedocument.presentationml.presentation",".txt":"text/plain",".csv":"text/csv",".json":"application/json"};rT=/^https?:\/\/(127\.0\.0\.1|localhost|0\.0\.0\.0|\[::1\])(:\d+)?/i});function z(o){return aT.test(o)}async function pt(o,e){return _u(o,e.uploadAdapter,e.apiKey,e.signal)}async function Lr(o,e){if(o.startsWith("data:")||!z(o))return o;let t=await fetch(o);if(!t.ok)throw new Error(`Failed to fetch local media ${o}: ${t.status}`);let n=Buffer.from(await t.arrayBuffer());if(n.byteLength>cT)throw new Error(`Local media too large for base64 (${(n.byteLength/1024/1024).toFixed(1)}MB). Use file upload API instead.`);return`data:${t.headers.get("content-type")||e||lT(o)};base64,${n.toString("base64")}`}function lT(o){let e=o.split("?")[0].split("#")[0],t=e.slice(e.lastIndexOf(".")).toLowerCase();return{".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".svg":"image/svg+xml",".bmp":"image/bmp",".avif":"image/avif",".heic":"image/heic",".mp4":"video/mp4",".webm":"video/webm",".mov":"video/quicktime",".mp3":"audio/mpeg",".wav":"audio/wav",".ogg":"audio/ogg",".aac":"audio/aac",".flac":"audio/flac",".m4a":"audio/mp4",".opus":"audio/opus",".pdf":"application/pdf"}[t]||"application/octet-stream"}var aT,cT,jn=N(()=>{"use strict";Au();aT=/^https?:\/\/(127\.0\.0\.1|localhost|0\.0\.0\.0|\[::1\])(:\d+)?/i;cT=20*1024*1024});function Pt(o){let e=Math.min(1e3*Math.pow(2,o-1),3e4),t=Math.random()*.25*e;return e+t}function Bt(o){return o!=null&&Ga.has(o)}function It(o,e){return new Promise((t,n)=>{if(e?.aborted){n(new Error("Request aborted"));return}let r=setTimeout(t,o);e&&e.addEventListener("abort",()=>{clearTimeout(r),n(new Error("Request aborted"))},{once:!0})})}function Wt(o){if(o&&typeof o=="object"){let e=o;if(typeof e.status=="number")return e.status;if(typeof e.statusCode=="number")return e.statusCode;if(e.response&&typeof e.response.status=="number")return e.response.status}return null}var Ga,At,Fn=N(()=>{"use strict";Ga=new Set([429,529,502,503,504]),At=9e4});function Nr(o){return o.toLowerCase().startsWith("gpt-5")}function $r(o){return o.toLowerCase().includes("5.4-nano")}function _o(o){return/^o[1-4](-|$)/.test(o.toLowerCase())}var Ha=N(()=>{"use strict"});function dT(o){switch(o){case"sensitive":return"content_filter";case"model_context_window_exceeded":return"length";case"network_error":return"error";default:return o}}async function uT(o,e,t,n){return o.some(s=>s.audioUrls?.some(z)||s.imageUrls?.some(z))?Promise.all(o.map(async s=>{if(s.role!=="user"&&s.role!=="tool")return s;let i={};if(s.role==="user"&&s.audioUrls?.some(z)&&(i.audioUrls=await Promise.all(s.audioUrls.map(a=>z(a)?Lr(a):Promise.resolve(a)))),s.imageUrls?.some(z)){if(!e||!t)throw new Error("FileUploadAdapter required for local image URLs. Configure OSS_ACCESS_KEY_ID/OSS_ACCESS_KEY_SECRET or QLOGICAGENT_HUB_URL.");i.imageUrls=await Promise.all(s.imageUrls.map(a=>z(a)?pt(a,{uploadAdapter:e,apiKey:t,signal:n}):Promise.resolve(a)))}return Object.keys(i).length>0?{...s,...i}:s})):o}function pT(o,e){return o.map(t=>{if(t.role==="user"){let n=t.imageUrls&&t.imageUrls.length>0&&!e.filterImageBlocks,r=t.videoUrls&&t.videoUrls.length>0,s=t.audioUrls&&t.audioUrls.length>0,i=t.fileIds&&t.fileIds.length>0;if(n||r||s||i){let c=[];if(t.content&&c.push({type:"text",text:t.content}),n){let l=t.imageUrls.length>1;for(let d=0;d<t.imageUrls.length;d++){let u=t.imageUrls[d];l&&c.push({type:"text",text:`[Image ${d+1}]`});let p={url:u};t.imageDetail&&(p.detail=t.imageDetail),c.push({type:"image_url",image_url:p})}}if(r)for(let l of t.videoUrls)c.push({type:"video_url",video_url:{url:l}});if(s)for(let l of t.audioUrls){let d=l,u=t.audioFormat??"mp3";if(l.startsWith("data:")){let p=/^data:audio\/([^;]+);base64,(.+)$/.exec(l);p&&(u=p[1]==="mpeg"?"mp3":p[1],d=p[2])}c.push({type:"input_audio",input_audio:{data:d,format:u}})}if(i)for(let l of t.fileIds){let d=l.mimeType||"";if(l.size!=null&&l.size>52428800){let p=`${(l.size/1048576).toFixed(1)}MB`;c.push({type:"text",text:`[Attached: ${l.id} (${d||"unknown"}, ${p})file too large for direct vision, use tools to process]`})}else if(e.supportsDocumentVision&&(d==="application/pdf"||l.id.endsWith(".pdf")))l.id.startsWith("http://")||l.id.startsWith("https://")?c.push({type:"text",text:`[Attached PDF: ${l.id}]`}):c.push({type:"file",file:{file_id:l.id}});else if(l.id.startsWith("http://")||l.id.startsWith("https://")){let p=d?`[Attached: ${l.id} (${d})]`:`[Attached: ${l.id}]`;c.push({type:"text",text:p})}else c.push({type:"file",file:{file_id:l.id}})}return{role:"user",content:c}}return{role:"user",content:t.content??""}}if(t.role==="assistant"){let n={role:"assistant"};return t.thinkingBlocks&&t.thinkingBlocks.length>0&&(n.reasoning_content=t.thinkingBlocks.map(r=>r.thinking).join("")),n.content=t.content??null,t.tool_calls&&t.tool_calls.length>0&&(n.tool_calls=t.tool_calls.map(r=>({id:r.id,type:r.type,function:{name:r.function.name,arguments:r.function.arguments}}))),n}if(t.role==="tool"){if(t.imageUrls&&t.imageUrls.length>0&&!e.filterImageBlocks){let n=[];t.content&&n.push({type:"text",text:t.content});for(let r of t.imageUrls)n.push({type:"image_url",image_url:{url:r}});return{role:"tool",content:n,tool_call_id:t.tool_call_id??""}}return{role:"tool",content:t.content??"",tool_call_id:t.tool_call_id??""}}return{role:t.role,content:t.content??""}})}var Bn,Va=N(()=>{"use strict";Un();jn();Fn();Ha();Bn=class{baseUrl;extraHeaders;timeoutMs;supportsStreamOptions;omitZeroTemperature;quirks;fileUploadAdapter;cumulativeReasoningLen=0;cumulativeContentLen=0;constructor(e){if(!e.baseUrl)throw new Error("OpenAIChatTransport: baseUrl is required (got empty or undefined)");this.baseUrl=e.baseUrl.replace(/\/+$/,""),this.extraHeaders=e.extraHeaders??{},this.timeoutMs=e.timeoutMs??18e4,this.supportsStreamOptions=e.supportsStreamOptions??!0,this.omitZeroTemperature=e.omitZeroTemperature??!1,this.quirks=e.quirks??{},this.fileUploadAdapter=e.fileUploadAdapter}async*stream(e,t,n){this.cumulativeReasoningLen=0,this.cumulativeContentLen=0;let r=e.prefixMessage&&this.quirks.supportsPrefixCompletion,s=/\/v\d+$/.test(this.baseUrl),i;r?i=`${this.baseUrl}/beta/v1/chat/completions`:s?i=`${this.baseUrl}/chat/completions`:i=`${this.baseUrl}/v1/chat/completions`;let a={model:e.model,messages:pT(await uT(e.messages,this.fileUploadAdapter,t,n),this.quirks),stream:!0};this.supportsStreamOptions&&(a.stream_options={include_usage:!0}),e.tools&&e.tools.length>0&&(a.tools=e.tools,e.toolChoice&&(a.tool_choice=e.toolChoice));let c=!e.disableBuiltinTools,l=!1;if(c&&this.quirks.builtinWebSearch&&a.tools){let f=a.tools;this.quirks.builtinCodeInterpreter?f.push({type:"web_search",web_search:{enable:!0,search_result:!0}}):(f.push({type:"builtin_function",function:{name:"$web_search"}}),l=!0)}c&&this.quirks.builtinCodeInterpreter&&a.tools&&a.tools.push({type:"code_interpreter",code_interpreter:{sandbox:"none"}}),this.quirks.supportsToolStream&&a.tools&&(a.tool_stream=!0);let d=this.quirks.useEffortInsteadOfBudget&&!!e.reasoning,u=e.model.startsWith("kimi-k2.6"),p=Nr(e.model);if(e.temperature!==void 0&&(this.omitZeroTemperature&&e.temperature===0||(p||!_o(e.model)&&!d&&!u)&&(a.temperature=e.temperature)),e.topP!==void 0&&(p||!_o(e.model)&&!d&&!u)&&(a.top_p=e.topP),e.maxTokens!==void 0&&(p||_o(e.model)||e.model.startsWith("kimi-k2")?a.max_completion_tokens=e.maxTokens:a.max_tokens=e.maxTokens),e.reasoning)if(p){let f=e.reasoning.effort==="minimal"?"none":e.reasoning.effort;$r(e.model)&&(f==="high"||f==="xhigh")&&(f="medium"),a.reasoning={effort:f}}else if(_o(e.model))a.reasoning_effort=e.reasoning.effort;else if(this.quirks.useEffortInsteadOfBudget){a.thinking={type:"enabled"};let f=this.quirks.maxReasoningEffort??"high",y=e.reasoning.effort??"high";a.reasoning_effort=y==="low"||y==="medium"?"high":f}else this.quirks.supportsThinkingParam?(l?a.thinking={type:"disabled"}:this.quirks.supportsToolStream?a.thinking={type:"enabled",clear_thinking:!1}:a.thinking={type:"enabled"},this.quirks.supportsReasoningEffort&&(a.reasoning_effort=e.reasoning.effort)):this.quirks.supportsReasoningEffort?a.reasoning_effort=e.reasoning.effort:a.reasoning=e.reasoning;else l?a.thinking={type:"disabled"}:this.quirks.supportsThinkingParam&&this.quirks.disableThinkingByDefault&&(a.thinking={type:"disabled"});e.structuredOutput&&(e.structuredOutput.mode==="json_object"?a.response_format={type:"json_object"}:e.structuredOutput.mode==="json_schema"&&(a.response_format={type:"json_schema",json_schema:{name:e.structuredOutput.name,strict:e.structuredOutput.strict??!0,schema:e.structuredOutput.schema}})),this.quirks.supportsReasoningSplit&&e.reasoning&&(a.reasoning_split=!0),e.prediction&&p&&(a.prediction=e.prediction),r&&e.prefixMessage&&a.messages.push({role:"assistant",content:e.prefixMessage,prefix:!0});let m={"Content-Type":"application/json",Authorization:`Bearer ${t}`,...this.extraHeaders},h=null;for(let f=0;f<=2;f++){if(n?.aborted)throw new Error("Request aborted");f>0&&h&&await It(Pt(f),n);try{yield*this.fetchAndStream(i,m,a,n);return}catch(y){h=y instanceof Error?y:new Error(String(y));let b=h.message.includes("Stream idle timeout");if(!Bt(Wt(h))&&!b||f===2)throw h}}}async*fetchAndStream(e,t,n,r){let s=AbortSignal.timeout(this.timeoutMs),i=r?AbortSignal.any([r,s]):s,a=await fetch(e,{method:"POST",headers:t,body:JSON.stringify(n),signal:i});if(!a.ok){let l=await a.text().catch(()=>""),d=new Error(`LLM API error ${a.status}: ${l.slice(0,500)}`);throw d.status=a.status,d}if(!a.body)throw new Error("LLM API returned no response body");let c=a.headers.get("content-type")??"";if(c.includes("application/json")&&!c.includes("text/event-stream")){yield*this.handleNonStreamingResponse(a);return}yield*this.parseSSEStreamWithWatchdog(a.body)}async*handleNonStreamingResponse(e){let t=await e.json();t.usage&&(yield{type:"usage",promptTokens:t.usage.prompt_tokens??0,completionTokens:t.usage.completion_tokens??0,reasoningTokens:t.usage.completion_tokens_details?.reasoning_tokens,cacheReadTokens:t.usage.prompt_tokens_details?.cached_tokens});for(let n of t.choices??[]){let r=n.message;if(r){if(r.reasoning_content&&(yield{type:"reasoning_delta",text:r.reasoning_content}),r.content&&(yield{type:"delta",text:r.content}),r.tool_calls)for(let s=0;s<r.tool_calls.length;s++){let i=r.tool_calls[s];yield{type:"tool_call_delta",index:s,id:i.id,name:i.function.name,arguments:i.function.arguments}}n.finish_reason&&(yield{type:"done",finishReason:n.finish_reason})}}}async*parseSSEStreamWithWatchdog(e){let t=new TextDecoder,n="",r=null,s=new AbortController,i=()=>{r&&clearTimeout(r),r=setTimeout(()=>{s.abort()},At)};try{i();let a=e.getReader();try{for(;;){let{done:c,value:l}=await a.read();if(c)break;if(s.signal.aborted)throw new Error("Stream idle timeout");i(),n+=t.decode(l,{stream:!0});let d;for(;(d=n.indexOf(`
|
|
15
|
+
`))!==-1;){let u=s.slice(0,d).trim();if(s=s.slice(d+1),!u||u.startsWith(":")||!u.startsWith("data:"))continue;let p=u.slice(5).trim();if(p==="[DONE]")break;try{let h=JSON.parse(p).data?.[0]?.url;h&&(i=h,t.onProgress?.(50,"streaming"))}catch{}}}}finally{a.releaseLock()}return t.onProgress?.(100,"completed"),{mediaUrls:i?[i]:[],model:t.model,size:t.size??"1024x1024",durationMs:Date.now()-n}}async generateVideo(e,t,n){let r=Date.now(),s=`${this.baseUrl}/v3/contents/generations/tasks`,i=e.referenceVideos?.length??0,a=e.referenceAudios?.length??0,c=e.referenceImages?.length??0,l=!!(e.imageUrl||c>0);if(i>3)throw new Error(`Seedance 2.0: max 3 reference videos (got ${i}). Total duration must be \u922E?5s.`);if(a>3)throw new Error(`Seedance 2.0: max 3 reference audios (got ${a}). Total duration must be \u922E?5s.`);if(a>0&&!l&&i===0)throw new Error("Seedance 2.0: reference audio cannot be used alone. Provide at least one reference image or video.");if(e.operation==="edit"&&c>9)throw new Error(`Seedance 2.0 video edit: max 9 reference images (got ${c}).`);let d=[];switch(e.draftTaskId&&d.push({type:"draft_task",id:e.draftTaskId}),e.operation){case"multimodal_reference":{if(e.prompt&&d.push({type:"text",text:e.prompt}),e.referenceImages?.length)for(let b=0;b<e.referenceImages.length;b++){let k=e.imageRoles?.[b]??"reference_image";d.push({type:"image_url",image_url:{url:e.referenceImages[b]},role:k})}if(e.referenceVideos?.length)for(let b of e.referenceVideos)d.push({type:"video_url",video_url:{url:b},role:"reference_video"});if(e.referenceAudios?.length)for(let b of e.referenceAudios)d.push({type:"audio_url",audio_url:{url:b},role:"reference_audio"});break}case"extend":{if(e.sourceVideos?.length)for(let b of e.sourceVideos)d.push({type:"video_url",video_url:{url:b},role:"reference_video"});e.prompt&&d.push({type:"text",text:e.prompt});break}case"merge":for(let b of e.sourceVideos??[])d.push({type:"video_url",video_url:{url:b}});e.prompt&&d.push({type:"text",text:e.prompt});break;case"upscale":e.sourceVideos?.[0]&&d.push({type:"video_url",video_url:{url:e.sourceVideos[0]}}),d.push({type:"text",text:e.prompt||"upscale"});break;case"edit":for(let b of e.sourceVideos??[])d.push({type:"video_url",video_url:{url:b},role:"reference_video"});if(e.referenceImages?.length)for(let b of e.referenceImages)d.push({type:"image_url",image_url:{url:b},role:"reference_image"});e.prompt&&d.push({type:"text",text:e.prompt});break;default:{let b=(e.referenceVideos?.length??0)>0,k=(e.referenceAudios?.length??0)>0,x=(e.imageRoles?.length??0)>0;if(b||k||x){if(e.prompt&&d.push({type:"text",text:e.prompt}),e.referenceImages?.length)for(let P=0;P<e.referenceImages.length;P++){let I=e.imageRoles?.[P]??"reference_image";d.push({type:"image_url",image_url:{url:e.referenceImages[P]},role:I})}if(b)for(let P of e.referenceVideos)d.push({type:"video_url",video_url:{url:P},role:"reference_video"});if(k)for(let P of e.referenceAudios)d.push({type:"audio_url",audio_url:{url:P},role:"reference_audio"})}else if(e.referenceImages?.length){for(let P of e.referenceImages)d.push({type:"image_url",image_url:{url:P}});e.prompt&&d.push({type:"text",text:e.prompt})}else e.imageUrl?(d.push({type:"image_url",image_url:{url:e.imageUrl}}),e.prompt&&d.push({type:"text",text:e.prompt})):e.prompt&&d.push({type:"text",text:e.prompt});break}}let u={model:e.model,content:d};e.duration&&(u.duration=e.duration),e.aspectRatio&&(u.ratio=e.aspectRatio),e.resolution&&(u.resolution=e.resolution),e.seed!==void 0&&(u.seed=e.seed),e.fps&&(u.fps=e.fps),e.generateAudio!==void 0&&(u.generate_audio=e.generateAudio),e.watermark!==void 0&&(u.watermark=e.watermark),e.enhancePrompt!==void 0&&(u.enhance_prompt=e.enhancePrompt),e.cameraFixed!==void 0&&(u.camera_fixed=e.cameraFixed),e.returnLastFrame!==void 0&&(u.return_last_frame=e.returnLastFrame),e.serviceTier&&(u.service_tier=e.serviceTier),e.executionExpiresAfterSeconds!==void 0&&(u.execution_expires_after=e.executionExpiresAfterSeconds),e.draft!==void 0&&(u.draft=e.draft),e.safetyIdentifier&&(u.safety_identifier=e.safetyIdentifier),e.callbackUrl&&(u.callback_url=e.callbackUrl),e.videoTools?.length&&(u.tools=e.videoTools.map(b=>({type:b})));let p=await this.submitTask(s,u,t,n),m=await this.pollTask(`${this.baseUrl}/v3/contents/generations/tasks/${p}`,t,n,e.onProgress,p),h=[],f=m.content;typeof f?.video_url=="string"&&h.push(f.video_url);let y=typeof f?.last_frame_url=="string"?f.last_frame_url:void 0;return{mediaUrls:h,model:e.model,durationMs:Date.now()-r,lastFrameUrl:y,taskId:p}}async generate3D(e,t,n){let r=Date.now(),s=`${this.baseUrl}/v3/contents/generations/tasks`,i=[],a=[];e.outputFormat&&a.push(`--fileformat ${e.outputFormat}`),e.prompt&&a.push(e.prompt),a.length>0&&i.push({type:"text",text:a.join(" ")}),e.imageUrl&&i.push({type:"image_url",image_url:{url:e.imageUrl}});let c={model:e.model,content:i},l=await this.submitTask(s,c,t,n),d=await this.pollTask(`${this.baseUrl}/v3/contents/generations/tasks/${l}`,t,n,e.onProgress,l),u=[],p=d.content;if(typeof p?.video_url=="string"&&u.push(p.video_url),u.length===0&&p)for(let[,h]of Object.entries(p))typeof h=="string"&&/^https?:\/\//.test(h)&&u.push(h);let m=d.output;if(m?.model_urls){let h=m.model_urls;for(let f of Object.values(h))f&&!u.includes(f)&&u.push(f)}if(u.length===0){let h=Object.keys(d),f=p?Object.keys(p):[],y=m?Object.keys(m):[];console.error(`[volcengine-3d] No media URLs found. Response keys: [${h}], content keys: [${f}], output keys: [${y}]`);let b=d.data;if(b?.content){let k=b.content;for(let[,x]of Object.entries(k))typeof x=="string"&&/^https?:\/\//.test(x)&&u.push(x)}}return{mediaUrls:u,model:e.model,durationMs:Date.now()-r,metadata:u.length===0?{debugResponseKeys:Object.keys(d),debugContentKeys:p?Object.keys(p):null,debugContentSample:p?JSON.stringify(p).slice(0,500):null,debugOutputKeys:m?Object.keys(m):null,debugResultSample:JSON.stringify(d).slice(0,800)}:void 0}}async getTaskStatus(e,t,n){let r=`${this.baseUrl}/v3/contents/generations/tasks/${e}`,s=await fetch(r,{method:"GET",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let c=await s.text().catch(()=>"");throw new Error(`Volcengine task status error ${s.status}: ${c}`)}let i=await s.json();return{status:i.status??"unknown",task:i}}async listVideoTasks(e,t,n){let r=new URLSearchParams;t?.after&&r.set("after",t.after),t?.limit&&r.set("limit",String(t.limit)),t?.status&&r.set("status",t.status);let s=r.toString(),i=`${this.baseUrl}/v3/contents/generations/tasks${s?`?${s}`:""}`,a=await fetch(i,{method:"GET",headers:{Authorization:`Bearer ${e}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!a.ok){let c=await a.text().catch(()=>"");throw new Error(`Volcengine list tasks error ${a.status}: ${c}`)}return await a.json()}async deleteVideoTask(e,t,n){let r=`${this.baseUrl}/v3/contents/generations/tasks/${e}`,s=await fetch(r,{method:"DELETE",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let i=await s.text().catch(()=>"");throw new Error(`Volcengine delete task error ${s.status}: ${i}`)}}async uploadFile(e,t,n,r){let s=`${this.baseUrl}/v3/files`,i=new FormData;i.append("file",e instanceof Blob?e:new Blob([e]),n?.filename??"upload"),i.append("purpose",n?.purpose??"user_data");let a=await fetch(s,{method:"POST",headers:{Authorization:`Bearer ${t}`},body:i,signal:r??AbortSignal.timeout(this.timeoutMs)});if(!a.ok){let l=await a.text().catch(()=>"");throw new Error(`Volcengine file upload error ${a.status}: ${l}`)}let c=await a.json();return{id:String(c.id??""),status:String(c.status??"")}}async getFile(e,t,n){let r=`${this.baseUrl}/v3/files/${e}`,s=await fetch(r,{method:"GET",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let i=await s.text().catch(()=>"");throw new Error(`Volcengine get file error ${s.status}: ${i}`)}return await s.json()}async listFiles(e,t,n){let r=new URLSearchParams;t?.after&&r.set("after",t.after),t?.limit&&r.set("limit",String(t.limit)),t?.purpose&&r.set("purpose",t.purpose),t?.order&&r.set("order",t.order);let s=r.toString(),i=`${this.baseUrl}/v3/files${s?`?${s}`:""}`,a=await fetch(i,{method:"GET",headers:{Authorization:`Bearer ${e}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!a.ok){let c=await a.text().catch(()=>"");throw new Error(`Volcengine list files error ${a.status}: ${c}`)}return await a.json()}async deleteFile(e,t,n){let r=`${this.baseUrl}/v3/files/${e}`,s=await fetch(r,{method:"DELETE",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let i=await s.text().catch(()=>"");throw new Error(`Volcengine delete file error ${s.status}: ${i}`)}}async submitTask(e,t,n,r){let s=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:JSON.stringify(t),signal:r??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let c=await s.text().catch(()=>"");throw new Error(`Volcengine task submit error ${s.status}: ${c}`)}let i=await s.json(),a=i.id??i.task_id;if(!a)throw new Error("Volcengine task submit: no task_id in response");return a}async pollTask(e,t,n,r,s){let i=Date.now()+6e5,a=0;for(;Date.now()<i;){n?.throwIfAborted();let c=await fetch(e,{method:"GET",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!c.ok){let m=await c.text().catch(()=>"");throw new Error(`Volcengine task poll error ${c.status}: ${m}`)}let l=await c.json(),d=l.status;if(d==="succeeded"||d==="complete")return r?.(100,"completed",s),l;if(d==="failed"||d==="cancelled"){let m=l.error?.message??"Task failed";throw new Error(`Volcengine task failed: ${m}`)}a++;let u=Date.now()-(i-6e5),p=Math.min(95,Math.round(u/6e5*100));r?.(p,d??"running",s),await new Promise(m=>setTimeout(m,3e3))}throw new Error("Volcengine task timed out after polling")}}});import{join as Da}from"node:path";import{homedir as kS,tmpdir as vS}from"node:os";function du(){return process.env.QLOGICAGENT_HOME??Da(kS()||vS(),".qlogicagent")}function ut(){return process.env.QLOGICAGENT_CACHE_DIR??Da(du(),"cache")}function uu(){return process.env.QLOGICAGENT_DEBUG_LOG_DIR??Da(du(),"debug-logs")}var hn=N(()=>{"use strict"});import{writeFileSync as SS,mkdirSync as TS}from"node:fs";import{join as pu}from"node:path";import{randomUUID as wS}from"node:crypto";var xS,So,La=N(()=>{"use strict";hn();xS=18e4,So=class{supportedTypes=["image","tts"];baseUrl;timeoutMs;constructor(e){this.baseUrl=e.baseUrl.replace(/\/+$/,""),this.timeoutMs=e.timeoutMs??xS}async generate(e,t,n){switch(e.mediaType){case"image":return this.generateImage(e,t,n);case"tts":return this.generateTTS(e,t,n);default:throw new Error(`OpenAIMediaTransport: unsupported mediaType "${e.mediaType}"`)}}async generateImage(e,t,n){let r=Date.now(),s=`${this.baseUrl}/v1/images/generations`,i={model:e.model,prompt:e.prompt,n:e.n??1,size:e.size??"1024x1024",response_format:"url"};e.quality&&(i.quality=e.quality),e.style&&(i.style=e.style),e.background&&(i.background=e.background);let a=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(i),signal:n??AbortSignal.timeout(this.timeoutMs)});if(!a.ok){let d=await a.text().catch(()=>"");throw new Error(`OpenAI images API error ${a.status}: ${d}`)}return{mediaUrls:((await a.json()).data??[]).map(d=>d.url).filter(d=>!!d),model:e.model,size:e.size??"1024x1024",durationMs:Date.now()-r}}async generateTTS(e,t,n){let r=Date.now(),s=e.text||e.prompt;if(!s)throw new Error("OpenAIMediaTransport: text or prompt is required for TTS");let i=`${this.baseUrl}/v1/audio/speech`,a={model:e.model||"tts-1",input:s,voice:e.voice??"alloy",response_format:e.audioFormat??"mp3"};e.speed!==void 0&&(a.speed=e.speed);let c=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(a),signal:n??AbortSignal.timeout(this.timeoutMs)});if(!c.ok){let m=await c.text().catch(()=>"");throw new Error(`OpenAI TTS API error ${c.status}: ${m}`)}let l=Buffer.from(await c.arrayBuffer()),d=pu(ut(),"tts");TS(d,{recursive:!0});let u=`openai-tts-${wS()}.mp3`,p=pu(d,u);return SS(p,l),{mediaUrls:[`file://${p}`],model:e.model||"tts-1",durationMs:Date.now()-r,billingUnit:"per_character",billingQuantity:s.length}}}});var yn,Er=N(()=>{"use strict";yn=class{supportedTypes=["music","video"];baseUrl;timeoutMs;constructor(e){this.baseUrl=e.baseUrl.replace(/\/anthropic\/?$/,"").replace(/\/+$/,""),this.timeoutMs=e.timeoutMs??6e4}async generate(e,t,n){switch(e.mediaType){case"music":return this.generateMusic(e,t,n);case"video":return this.generateVideo(e,t,n);default:throw new Error(`MiniMaxMediaTransport: unsupported mediaType "${e.mediaType}"`)}}async generateMusic(e,t,n){let r=Date.now(),s=`${this.baseUrl}/v1/music_generation`,i={model:e.model,prompt:e.prompt,output_format:"url"};e.lyrics&&(i.lyrics=e.lyrics),e.duration&&(i.duration=e.duration),(e.isInstrumental||!e.lyrics)&&(i.is_instrumental=!0),e.audioUrl&&(i.audio_url=e.audioUrl),e.lyricsOptimizer&&(i.lyrics_optimizer=!0),(e.audioFormat||e.voice)&&(i.audio_setting={sample_rate:44100,bitrate:256e3,format:e.audioFormat??"mp3"});let a=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(i),signal:n??AbortSignal.timeout(6e5)});if(!a.ok){let m=await a.text().catch(()=>"");throw new Error(`MiniMax music error ${a.status}: ${m}`)}let c=await a.json();if(c.base_resp?.status_code&&c.base_resp.status_code!==0)throw new Error(`MiniMax music rejected: ${c.base_resp.status_msg??"unknown"}`);let l=c.data?.audio??c.audio_file;if(l)return{mediaUrls:[l],model:e.model,durationMs:Date.now()-r};let d=c.task_id;if(!d)throw new Error("MiniMax music: no audio_file or task_id in response");let u=`${this.baseUrl}/v1/music_generation/${d}`;return{mediaUrls:(await this.pollTask(u,t,n,e.onProgress,d)).audioUrls,model:e.model,durationMs:Date.now()-r}}async pollTask(e,t,n,r,s){let i=Date.now()+6e5;for(;Date.now()<i;){n?.throwIfAborted();let a=await fetch(e,{method:"GET",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!a.ok){let u=await a.text().catch(()=>"");throw new Error(`MiniMax music poll error ${a.status}: ${u}`)}let c=await a.json(),l=c.status;if(l==="Success"||l==="Finished"){r?.(100,"completed",s);let u=[];return c.audio_file&&u.push(c.audio_file),{audioUrls:u}}if(l==="Failed"||l==="Cancelled")throw new Error(`MiniMax music task failed: ${c.base_resp?.status_msg??"unknown"}`);let d=Date.now()-(i-6e5);r?.(Math.min(95,Math.round(d/6e5*100)),l??"running",s),await new Promise(u=>setTimeout(u,3e3))}throw new Error("MiniMax music task timed out after polling")}async generateLyrics(e,t,n){let r=`${this.baseUrl}/v1/lyrics_generation`,s=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify({prompt:e}),signal:n??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let a=await s.text().catch(()=>"");throw new Error(`MiniMax lyrics API error ${s.status}: ${a}`)}let i=await s.json();if(i.base_resp?.status_code&&i.base_resp.status_code!==0)throw new Error(`MiniMax lyrics error: ${i.base_resp.status_msg??"unknown"}`);return i.data?.lyrics??""}async generateVideo(e,t,n){let r=Date.now(),s=`${this.baseUrl}/v1/video_generation`,i={model:e.model||"S2V-01",prompt:e.prompt};if(e.referenceImages?.length&&e.imageRoles){let u=e.imageRoles.includes("first_frame"),p=e.imageRoles.includes("last_frame");if(u&&p){let m=e.imageRoles.indexOf("first_frame"),h=e.imageRoles.indexOf("last_frame");i.first_frame_image=e.referenceImages[m],i.last_frame_image=e.referenceImages[h]}else if(u){let m=e.imageRoles.indexOf("first_frame");i.first_frame_image=e.referenceImages[m]}else i.subject_reference=e.referenceImages.map((m,h)=>({type:"character",image:m}))}else e.imageUrl&&(i.first_frame_image=e.imageUrl);e.callbackUrl&&(i.callback_url=e.callbackUrl);let a=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(i),signal:n??AbortSignal.timeout(this.timeoutMs)});if(!a.ok){let u=await a.text().catch(()=>"");throw new Error(`MiniMax video submit error ${a.status}: ${u}`)}let c=await a.json();if(c.base_resp?.status_code&&c.base_resp.status_code!==0)throw new Error(`MiniMax video rejected: ${c.base_resp.status_msg??"unknown"}`);let l=c.task_id;if(!l)throw new Error("MiniMax video: no task_id in response");let d=await this.pollVideoTask(l,t,n,e.onProgress);return{mediaUrls:d.downloadUrl?[d.downloadUrl]:[],model:e.model||"S2V-01",durationMs:Date.now()-r,taskId:l,metadata:{fileId:d.fileId,width:d.width,height:d.height}}}async pollVideoTask(e,t,n,r){let s=Date.now()+6e5;for(;Date.now()<s;){n?.throwIfAborted();let i=`${this.baseUrl}/v1/query/video_generation?task_id=${encodeURIComponent(e)}`,a=await fetch(i,{method:"GET",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!a.ok){let m=await a.text().catch(()=>"");throw new Error(`MiniMax video poll error ${a.status}: ${m}`)}let c=await a.json();if(c.base_resp?.status_code&&c.base_resp.status_code!==0)throw new Error(`MiniMax video task error ${c.base_resp.status_code}: ${c.base_resp.status_msg??""}`);let l=c.status;if(l==="Success"){r?.(100,"completed",e);let m;if(c.file_id)try{m=await this.getFileDownloadUrl(c.file_id,t,n)}catch{}return{fileId:c.file_id,downloadUrl:m,width:c.video_width,height:c.video_height}}if(l==="Fail")throw new Error(`MiniMax video task failed: ${c.base_resp?.status_msg??"unknown"}`);let d=l??"running",u=Date.now()-(s-6e5),p=Math.min(95,Math.round(u/6e5*100));r?.(p,d,e),await new Promise(m=>setTimeout(m,3e3))}throw new Error("MiniMax video task timed out after polling")}async getFileDownloadUrl(e,t,n){let r=`${this.baseUrl}/v1/files/retrieve?file_id=${encodeURIComponent(e)}`,s=await fetch(r,{method:"GET",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let c=await s.text().catch(()=>"");throw new Error(`MiniMax file retrieve error ${s.status}: ${c}`)}let a=(await s.json()).file?.download_url;if(!a)throw new Error("MiniMax file retrieve: no download_url in response");return a}async getTaskStatus(e,t,n){let r=`${this.baseUrl}/v1/query/video_generation?task_id=${encodeURIComponent(e)}`,s=await fetch(r,{method:"GET",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let l=await s.text().catch(()=>"");throw new Error(`MiniMax task status error ${s.status}: ${l}`)}let i=await s.json(),a=i.status??"unknown";return{status:a==="Success"?"succeeded":a==="Fail"?"failed":a.toLowerCase(),task:i}}async listVideoTasks(e,t,n){return{data:[]}}async deleteVideoTask(e,t,n){throw new Error("MiniMax does not support video task cancellation.")}}});import{writeFileSync as RS,mkdirSync as _S}from"node:fs";import{join as mu}from"node:path";import{randomUUID as AS}from"node:crypto";async function Na(o,e,t){let n=t.durationSeconds??30,r=Date.now(),s=new Cr(e),i=[];s.onAudioChunk=c=>{i.push(c.data)};let a=null;s.onError=c=>{a=c};try{await s.connect(o,{model:t.model??"lyria-realtime-exp",prompts:t.prompts,config:t.musicConfig}),t.onProgress?.(5,"connected"),await s.play(),t.onProgress?.(10,"streaming");let c=Date.now()+n*1e3,l=500;for(;Date.now()<c;){if(t.signal?.throwIfAborted(),a)throw a;if(!s.connected)break;let f=Date.now()-r,y=n*1e3,b=Math.min(95,Math.round(10+f/y*85));t.onProgress?.(b,"streaming"),await new Promise(k=>setTimeout(k,l))}s.connected&&await s.stop(),t.onProgress?.(98,"assembling");let d=Buffer.concat(i),u=PS(d,48e3,2,16),p=mu(ut(),"gemini-music-realtime");_S(p,{recursive:!0});let m=`lyria-rt-${AS()}.wav`,h=mu(p,m);return RS(h,u),t.onProgress?.(100,"completed"),{filePath:`file://${h}`,durationMs:Date.now()-r}}finally{s.close()}}function PS(o,e,t,n){let r=e*t*(n/8),s=t*(n/8),i=o.length,a=Buffer.alloc(44);return a.write("RIFF",0),a.writeUInt32LE(36+i,4),a.write("WAVE",8),a.write("fmt ",12),a.writeUInt32LE(16,16),a.writeUInt16LE(1,20),a.writeUInt16LE(t,22),a.writeUInt32LE(e,24),a.writeUInt32LE(r,28),a.writeUInt16LE(s,30),a.writeUInt16LE(n,32),a.write("data",36),a.writeUInt32LE(i,40),Buffer.concat([a,o])}var Cr,$a=N(()=>{"use strict";hn();Cr=class{ws=null;wsUrl;model="models/lyria-realtime-exp";onAudioChunk=null;onFilteredPrompt=null;onError=null;onClose=null;constructor(e){let t=e.baseUrl.replace(/\/+$/,""),n=new URL(t).origin.replace(/^http/,"ws");this.wsUrl=`${n}/ws/google.ai.generativelanguage.v1alpha.GenerativeService.BidiGenerateContent`}async connect(e,t){t.model&&(this.model=t.model.startsWith("models/")?t.model:`models/${t.model}`);let n=`${this.wsUrl}?key=${encodeURIComponent(e)}`,r=new WebSocket(n);this.ws=r,await new Promise((s,i)=>{let a=()=>{r.removeEventListener("error",c),s()},c=()=>{r.removeEventListener("open",a),i(new Error("Lyria RealTime WebSocket connection failed"))};r.addEventListener("open",a,{once:!0}),r.addEventListener("error",c,{once:!0})}),r.addEventListener("message",s=>this.handleMessage(s)),r.addEventListener("error",()=>{this.onError?.(new Error("Lyria RealTime WebSocket error"))}),r.addEventListener("close",()=>{this.ws=null,this.onClose?.()}),this.send({setup:{model:this.model}}),await new Promise(s=>setTimeout(s,100)),await this.setWeightedPrompts(t.prompts),t.config&&await this.setMusicGenerationConfig(t.config)}async setWeightedPrompts(e){this.send({musicInput:{weightedPrompts:e.map(t=>({text:t.text,weight:t.weight}))}})}async setMusicGenerationConfig(e){let t={};e.bpm!==void 0&&(t.bpm=e.bpm),e.density!==void 0&&(t.density=e.density),e.brightness!==void 0&&(t.brightness=e.brightness),e.guidance!==void 0&&(t.guidance=e.guidance),e.scale!==void 0&&(t.scale=e.scale),e.temperature!==void 0&&(t.temperature=e.temperature),e.topK!==void 0&&(t.top_k=e.topK),e.seed!==void 0&&(t.seed=e.seed),e.muteBass!==void 0&&(t.mute_bass=e.muteBass),e.muteDrums!==void 0&&(t.mute_drums=e.muteDrums),e.onlyBassAndDrums!==void 0&&(t.only_bass_and_drums=e.onlyBassAndDrums),e.musicGenerationMode!==void 0&&(t.music_generation_mode=e.musicGenerationMode),e.audioFormat!==void 0&&(t.audio_format=e.audioFormat),e.sampleRateHz!==void 0&&(t.sample_rate_hz=e.sampleRateHz),this.send({musicInput:{musicGenerationConfig:t}})}async play(){this.send({musicInput:{playbackControl:"PLAY"}})}async pause(){this.send({musicInput:{playbackControl:"PAUSE"}})}async stop(){this.send({musicInput:{playbackControl:"STOP"}})}async resetContext(){this.send({musicInput:{playbackControl:"RESET_CONTEXT"}})}close(){this.ws&&this.ws.readyState!==WebSocket.CLOSED&&this.ws.close(),this.ws=null}get connected(){return this.ws!==null&&this.ws.readyState===WebSocket.OPEN}send(e){if(!this.ws||this.ws.readyState!==WebSocket.OPEN)throw new Error("Lyria RealTime session not connected");this.ws.send(JSON.stringify(e))}handleMessage(e){let t;try{t=JSON.parse(typeof e.data=="string"?e.data:e.data.toString())}catch{return}let n=t.serverContent;if(!n)return;let r=n.audioChunks;if(r&&this.onAudioChunk)for(let i of r)i.data&&this.onAudioChunk({data:Buffer.from(i.data,"base64")});let s=n.filteredPrompt;s&&this.onFilteredPrompt?.(s)}}});import{writeFileSync as fu,mkdirSync as gu}from"node:fs";import{join as Mr}from"node:path";import{randomUUID as hu}from"node:crypto";function CS(o,e,t,n){let r=e*t*(n/8),s=t*(n/8),i=o.length,a=Buffer.alloc(44);return a.write("RIFF",0),a.writeUInt32LE(36+i,4),a.write("WAVE",8),a.write("fmt ",12),a.writeUInt32LE(16,16),a.writeUInt16LE(1,20),a.writeUInt16LE(t,22),a.writeUInt32LE(e,24),a.writeUInt32LE(r,28),a.writeUInt16LE(s,30),a.writeUInt16LE(n,32),a.write("data",36),a.writeUInt32LE(i,40),Buffer.concat([a,o])}var IS,ES,Ua,To,ja=N(()=>{"use strict";hn();$a();IS=18e4,ES=1e4,Ua=6e5,To=class{supportedTypes=["image","video","music","music_realtime","tts","embedding"];apiBase;timeoutMs;constructor(e){this.apiBase=e.baseUrl.replace(/\/openai\/?$/,"").replace(/\/+$/,""),this.timeoutMs=e.timeoutMs??IS}async generate(e,t,n){switch(e.mediaType){case"image":return this.generateImage(e,t,n);case"video":return this.generateVideo(e,t,n);case"music":return this.generateMusic(e,t,n);case"music_realtime":return this.generateMusicRealtime(e,t,n);case"tts":return this.generateTTS(e,t,n);case"embedding":return this.generateEmbedding(e,t,n);default:throw new Error(`GeminiMediaTransport: unsupported mediaType "${e.mediaType}"`)}}async deleteVideoTask(e,t,n){throw new Error("Gemini does not support deleting video generation tasks")}async listVideoTasks(e,t,n){return{data:[]}}async getTaskStatus(e,t,n){let r=`${this.apiBase}/${e}`,s=await fetch(r,{method:"GET",headers:{"x-goog-api-key":t},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let c=await s.text().catch(()=>"");throw new Error(`Gemini operation query error ${s.status}: ${c}`)}let i=await s.json();return{status:i.done?"completed":"running",task:i}}async generateImage(e,t,n){let r=Date.now(),s=`${this.apiBase}/models/${e.model}:generateContent`,i={responseModalities:["TEXT","IMAGE"]};e.aspectRatio&&(i.aspectRatio=e.aspectRatio);let a={contents:[{parts:[{text:e.prompt}]}],generationConfig:i},c=await this.postJson(s,a,t,n);return{mediaUrls:this.extractInlineImages(c),model:e.model,durationMs:Date.now()-r}}async generateVideo(e,t,n){let r=Date.now(),s=`${this.apiBase}/models/${e.model}:predictLongRunning`,i={prompt:e.prompt};e.imageUrl&&(i.image={inlineData:await this.resolveImageData(e.imageUrl)}),e.referenceImages?.length&&(i.referenceImages=await Promise.all(e.referenceImages.map(async y=>({image:{inlineData:await this.resolveImageData(y)},referenceType:"asset"}))));let a={};e.aspectRatio&&(a.aspectRatio=e.aspectRatio),e.resolution&&(a.resolution=e.resolution),e.duration&&(a.durationSeconds=String(e.duration)),e.n&&(a.numberOfVideos=e.n),e.seed!==void 0&&(a.seed=e.seed);let c={instances:[i]};Object.keys(a).length>0&&(c.parameters=a);let d=(await this.postJson(s,c,t,n)).name;if(!d)throw new Error("Gemini video submit: no operation name in response");let u=d;e.onProgress?.(5,"submitted",u);let h=(await this.pollOperation(d,t,n,e.onProgress,u)).response?.generateVideoResponse?.generatedSamples??[],f=[];for(let y of h)y.video?.uri&&f.push(y.video.uri);return{mediaUrls:f,model:e.model,durationMs:Date.now()-r,taskId:u}}async generateMusic(e,t,n){let r=Date.now(),s=`${this.apiBase}/models/${e.model}:generateContent`,i=[{text:e.prompt}],a={};e.audioFormat==="wav"&&(a.responseModalities=["AUDIO","TEXT"],a.responseFormat={audio:{mimeType:"audio/wav"}});let c={contents:[{parts:i}]};Object.keys(a).length>0&&(c.generationConfig=a);let l=await this.postJson(s,c,t,n);return{mediaUrls:this.extractInlineAudio(l,"gemini-music"),model:e.model,durationMs:Date.now()-r}}async generateMusicRealtime(e,t,n){let r=await Na(t,{baseUrl:this.apiBase},{prompts:[{text:e.prompt,weight:1}],durationSeconds:e.duration??30,musicConfig:{audioFormat:e.audioFormat==="wav"?"pcm16":void 0,sampleRateHz:48e3},model:e.model,signal:n,onProgress:e.onProgress});return{mediaUrls:[r.filePath],model:e.model,durationMs:r.durationMs}}async generateTTS(e,t,n){let r=Date.now(),s=`${this.apiBase}/models/${e.model}:generateContent`,i={responseModalities:["AUDIO"]};e.voice&&(i.speechConfig={voiceConfig:{prebuiltVoiceConfig:{voiceName:e.voice}}});let a={contents:[{parts:[{text:e.text??e.prompt}]}],generationConfig:i},c=await this.postJson(s,a,t,n);return{mediaUrls:this.extractInlineAudio(c,"gemini-tts"),model:e.model,durationMs:Date.now()-r}}async generateEmbedding(e,t,n){let r=Date.now(),s=`${this.apiBase}/models/${e.model}:embedContent`,i={content:{parts:[{text:e.text??e.prompt}]}},a=e.metadata?.outputDimensionality;a!==void 0&&(i.output_dimensionality=a);let l=(await this.postJson(s,i,t,n)).embeddings?.[0]?.values??[];return{mediaUrls:[],model:e.model,durationMs:Date.now()-r,metadata:{embedding:l,dimensions:l.length}}}async postJson(e,t,n,r){let s=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json","x-goog-api-key":n},body:JSON.stringify(t),signal:r??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let i=await s.text().catch(()=>"");throw new Error(`Gemini API error ${s.status}: ${i}`)}return s.json()}async pollOperation(e,t,n,r,s){let i=Date.now()+Ua;for(;Date.now()<i;){n?.throwIfAborted();let a=`${this.apiBase}/${e}`,c=await fetch(a,{method:"GET",headers:{"x-goog-api-key":t},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!c.ok){let p=await c.text().catch(()=>"");throw new Error(`Gemini operation poll error ${c.status}: ${p}`)}let l=await c.json();if(l.done===!0)return r?.(100,"completed",s),l;if(l.error){let p=l.error;throw new Error(`Gemini video generation failed: ${p.message??JSON.stringify(p)}`)}let d=Date.now()-(i-Ua),u=Math.min(95,Math.round(d/Ua*100));r?.(u,"running",s),await new Promise(p=>setTimeout(p,ES))}throw new Error("Gemini video generation timed out after polling")}async resolveImageData(e){if(e.startsWith("data:")){let s=e.match(/^data:([^;]+);base64,(.+)$/);if(s)return{mimeType:s[1],data:s[2]}}if(e.startsWith("file://")){let{readFileSync:s}=await import("node:fs"),i=e.replace(/^file:\/\//,""),a=s(i).toString("base64"),c=i.split(".").pop()?.toLowerCase()??"png";return{mimeType:c==="jpg"||c==="jpeg"?"image/jpeg":c==="webp"?"image/webp":"image/png",data:a}}let t=await fetch(e,{signal:AbortSignal.timeout(6e4)});if(!t.ok)throw new Error(`Failed to fetch image ${e}: ${t.status}`);let n=Buffer.from(await t.arrayBuffer());return{mimeType:t.headers.get("content-type")??"image/png",data:n.toString("base64")}}extractInlineImages(e){let t=[],n=Mr(ut(),"gemini-images");gu(n,{recursive:!0});for(let r of e.candidates??[])for(let s of r.content?.parts??[])if(s.inlineData?.data){let i=s.inlineData.mimeType==="image/png"?"png":s.inlineData.mimeType==="image/webp"?"webp":"jpg",a=`gemini-${hu()}.${i}`,c=Mr(n,a);fu(c,Buffer.from(s.inlineData.data,"base64")),t.push(`file://${c}`)}return t}extractInlineAudio(e,t){let n=[],r=Mr(ut(),t);gu(r,{recursive:!0});for(let s of e.candidates??[])for(let i of s.content?.parts??[])if(i.inlineData?.data&&i.inlineData.mimeType?.startsWith("audio/")){let a=i.inlineData.mimeType.includes("wav")?"wav":i.inlineData.mimeType.includes("mpeg")||i.inlineData.mimeType.includes("mp3")?"mp3":"pcm",c=Buffer.from(i.inlineData.data,"base64"),l=a==="pcm"?CS(c,24e3,1,16):c,d=`gemini-${hu()}.${a==="pcm"?"wav":a}`,u=Mr(r,d);fu(u,l),n.push(`file://${u}`)}return n}}});function MS(o){return new Promise(e=>setTimeout(e,o))}var Or,yu=N(()=>{"use strict";Or=class{supportedTypes=["tts","video"];baseUrl;timeoutMs;constructor(e){this.baseUrl=e.baseUrl.replace(/\/apps\/anthropic\/?$/,"").replace(/\/+$/,""),this.timeoutMs=e.timeoutMs??3e4}async generate(e,t,n){if(e.mediaType==="video")return this.generateVideo(e,t,n);if(e.mediaType!=="tts")throw new Error(`QwenMediaTransport: unsupported mediaType "${e.mediaType}"`);let r=Date.now(),s=e.text||e.prompt;if(!s)throw new Error("QwenMediaTransport: text or prompt is required for TTS");let i=`${this.baseUrl}/api/v1/services/aigc/text2audio/generation`,a={format:e.audioFormat??"mp3",sample_rate:24e3},c={text:s};e.voice&&(c.voice=e.voice),e.speed!==void 0&&(a.speech_rate=e.speed);let l={model:e.model||"qwen3-tts-voicedesign",input:c,parameters:a},d=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`,"X-DashScope-Async":"enable"},body:JSON.stringify(l),signal:n??AbortSignal.timeout(this.timeoutMs)});if(!d.ok){let h=await d.text().catch(()=>"");throw new Error(`DashScope TTS submit error ${d.status}: ${h}`)}let u=await d.json();if(u.code)throw new Error(`DashScope TTS submit rejected: ${u.code} \u9225?${u.message??""}`);let p=u.output?.task_id;if(!p)throw new Error("DashScope TTS submit: no task_id in response");if(u.output?.task_status==="SUCCEEDED"){let h=this.extractMediaUrl(u);return{mediaUrls:h?[h]:[],model:e.model,durationMs:Date.now()-r}}return{mediaUrls:await this.pollTask(p,t,n,e.onProgress),model:e.model,durationMs:Date.now()-r}}async pollTask(e,t,n,r,s=12e4){let i=Date.now()+s,a=`${this.baseUrl}/api/v1/tasks/${e}`;for(;Date.now()<i;){n?.throwIfAborted(),await MS(2e3);let c=await fetch(a,{method:"GET",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!c.ok){let p=await c.text().catch(()=>"");throw new Error(`DashScope TTS poll error ${c.status}: ${p}`)}let l=await c.json();if(l.code)throw new Error(`DashScope poll rejected: ${l.code} \u9225?${l.message??""}`);let d=l.output?.task_status;if(d==="SUCCEEDED"){r?.(100,"completed",e);let p=this.extractMediaUrl(l);return p?[p]:[]}if(d==="FAILED")throw new Error(`DashScope task failed: ${l.message??"unknown error"}`);let u=Date.now()-(i-s);r?.(Math.min(95,Math.round(u/s*100)),d??"running",e)}throw new Error("DashScope task timed out")}async generateVideo(e,t,n){let r=Date.now(),s=e.model||"wan2.1-t2v-turbo",i={prompt:e.prompt};if(e.imageUrl)i.img_url=e.imageUrl;else if(e.referenceImages?.length)if(e.imageRoles){let h=e.imageRoles.indexOf("first_frame"),f=e.imageRoles.indexOf("last_frame");h>=0&&(i.img_url=e.referenceImages[h]),f>=0&&(i.tail_image_url=e.referenceImages[f]);let y=e.imageRoles.map((b,k)=>b==="reference_image"?k:-1).filter(b=>b>=0);y.length>0&&(i.ref_image_url=e.referenceImages[y[0]])}else i.img_url=e.referenceImages[0];let a={};e.duration&&(a.duration=e.duration),e.resolution&&(a.resolution=e.resolution),e.aspectRatio&&(a.ratio=e.aspectRatio),e.metadata?.size&&(a.size=e.metadata.size);let c=`${this.baseUrl}/api/v1/services/aigc/generation/generation`,l={model:s,input:i};Object.keys(a).length>0&&(l.parameters=a);let d=await fetch(c,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`,"X-DashScope-Async":"enable"},body:JSON.stringify(l),signal:n??AbortSignal.timeout(this.timeoutMs)});if(!d.ok){let h=await d.text().catch(()=>"");throw new Error(`DashScope video submit error ${d.status}: ${h}`)}let u=await d.json();if(u.code)throw new Error(`DashScope video submit rejected: ${u.code} \u9225?${u.message??""}`);let p=u.output?.task_id;if(!p)throw new Error("DashScope video submit: no task_id in response");return{mediaUrls:await this.pollTask(p,t,n,e.onProgress,6e5),model:s,durationMs:Date.now()-r,taskId:p}}async getTaskStatus(e,t,n){let r=`${this.baseUrl}/api/v1/tasks/${e}`,s=await fetch(r,{method:"GET",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let d=await s.text().catch(()=>"");throw new Error(`DashScope task status error ${s.status}: ${d}`)}let i=await s.json(),c=i.output?.task_status??"unknown";return{status:c==="SUCCEEDED"?"succeeded":c==="FAILED"?"failed":c.toLowerCase(),task:i}}async listVideoTasks(e,t,n){let r=new URLSearchParams;r.set("page_size",String(t?.limit??20)),t?.status&&r.set("status",t.status.toUpperCase());let s=`${this.baseUrl}/api/v1/tasks?${r.toString()}`,i=await fetch(s,{method:"GET",headers:{Authorization:`Bearer ${e}`},signal:n??AbortSignal.timeout(this.timeoutMs)});return i.ok?await i.json():{data:[]}}async deleteVideoTask(e,t,n){throw new Error("DashScope does not support task cancellation.")}extractMediaUrl(e){if(e.output?.video_url)return e.output.video_url;if(e.output?.audio_url)return e.output.audio_url;if(e.output?.results?.[0]?.url)return e.output.results[0].url}}});import{writeFileSync as OS,mkdirSync as DS}from"node:fs";import{join as bu}from"node:path";import{randomUUID as LS}from"node:crypto";var NS,$S,Dr,US,wo,ku=N(()=>{"use strict";hn();NS=18e4,$S=3e3,Dr=6e5,US=new Set(["glm-image"]),wo=class{supportedTypes=["image","video","tts","stt","embedding","voice_clone","document_parsing","rerank"];baseUrl;timeoutMs;constructor(e){this.baseUrl=e.baseUrl.replace(/\/+$/,""),this.timeoutMs=e.timeoutMs??NS}async generate(e,t,n){switch(e.mediaType){case"image":return this.generateImage(e,t,n);case"video":return this.generateVideo(e,t,n);case"tts":return this.generateTTS(e,t,n);case"stt":return this.generateSTT(e,t,n);case"embedding":return this.generateEmbedding(e,t,n);case"voice_clone":return this.generateVoiceClone(e,t,n);case"document_parsing":return this.generateDocumentParsing(e,t,n);case"rerank":return this.generateRerank(e,t,n);default:throw new Error(`ZhipuMediaTransport: unsupported mediaType "${e.mediaType}"`)}}async generateImage(e,t,n){return US.has(e.model)?this.generateImageAsync(e,t,n):this.generateImageSync(e,t,n)}async generateImageSync(e,t,n){let r=Date.now(),s=`${this.baseUrl}/images/generations`,i={model:e.model,prompt:e.prompt};return e.size&&(i.size=e.size),e.quality&&e.model.startsWith("cogview-4")&&(i.quality=e.quality),{mediaUrls:((await this.postJSON(s,i,t,n)).data??[]).map(d=>d.url).filter(d=>!!d),model:e.model,size:e.size,durationMs:Date.now()-r}}async generateImageAsync(e,t,n){let r=Date.now(),s=`${this.baseUrl}/async/images/generations`,i={model:e.model,prompt:e.prompt};e.size&&(i.size=e.size),e.quality&&(i.quality=e.quality);let c=(await this.postJSON(s,i,t,n)).id;if(!c)throw new Error("Zhipu async image: no task id in response");return{mediaUrls:((await this.pollAsyncResult(c,t,n,e.onProgress)).data??[]).map(p=>p.url).filter(p=>!!p),model:e.model,size:e.size,durationMs:Date.now()-r}}async generateVideo(e,t,n){let r=Date.now(),s=`${this.baseUrl}/videos/generations`,i={model:e.model,prompt:e.prompt};e.imageUrl&&(i.image_url=e.imageUrl),e.size&&(i.size=e.size),e.duration&&(i.duration=e.duration);let c=(await this.postJSON(s,i,t,n)).id;if(!c)throw new Error("Zhipu video generation: no task id in response");return{mediaUrls:((await this.pollAsyncResult(c,t,n,e.onProgress)).video_result??[]).map(p=>p.url).filter(p=>!!p),model:e.model,durationMs:Date.now()-r}}async generateTTS(e,t,n){let r=Date.now(),s=e.text||e.prompt;if(!s)throw new Error("ZhipuMediaTransport: text or prompt required for TTS");let i=`${this.baseUrl}/audio/speech`,a={model:e.model||"glm-tts",input:s};e.voice&&(a.voice=e.voice),e.speed!==void 0&&(a.speed=e.speed),e.audioFormat&&(a.response_format=e.audioFormat);let c=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(a),signal:n??AbortSignal.timeout(this.timeoutMs)});if(!c.ok){let h=await c.text().catch(()=>"");throw new Error(`Zhipu TTS API error ${c.status}: ${h}`)}let l=Buffer.from(await c.arrayBuffer()),d=bu(ut(),"tts");DS(d,{recursive:!0});let u=e.audioFormat??"wav",p=`zhipu-tts-${LS()}.${u}`,m=bu(d,p);return OS(m,l),{mediaUrls:[`file://${m}`],model:e.model||"glm-tts",durationMs:Date.now()-r,billingUnit:"per_character",billingQuantity:s.length}}async generateSTT(e,t,n){let r=Date.now();if(!e.audioUrl)throw new Error("ZhipuMediaTransport: audioUrl required for STT");let s=`${this.baseUrl}/audio/transcriptions`,i=await fetch(e.audioUrl,{headers:{"User-Agent":"qlogicagent/1.0"},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!i.ok)throw new Error(`Failed to fetch audio from ${e.audioUrl}`);let a=await i.blob(),c=new FormData;c.append("model",e.model||"glm-asr-2512"),c.append("file",a,"audio.wav");let l=await fetch(s,{method:"POST",headers:{Authorization:`Bearer ${t}`},body:c,signal:n??AbortSignal.timeout(this.timeoutMs)});if(!l.ok){let u=await l.text().catch(()=>"");throw new Error(`Zhipu STT API error ${l.status}: ${u}`)}let d=await l.json();return{mediaUrls:[],model:e.model||"glm-asr-2512",durationMs:Date.now()-r,metadata:{transcription:d.text??""}}}async generateEmbedding(e,t,n){let r=Date.now(),s=e.text||e.prompt;if(!s)throw new Error("ZhipuMediaTransport: text or prompt required for embedding");let i=`${this.baseUrl}/embeddings`,a={model:e.model||"embedding-3",input:s},l=(await this.postJSON(i,a,t,n)).data??[];return{mediaUrls:[],model:e.model||"embedding-3",durationMs:Date.now()-r,metadata:{embeddings:l.map(d=>d.embedding).filter(Boolean)}}}async generateVoiceClone(e,t,n){let r=Date.now();if(!e.audioUrl)throw new Error("ZhipuMediaTransport: audioUrl required for voice_clone (sample audio)");let s=await fetch(e.audioUrl,{signal:n??AbortSignal.timeout(this.timeoutMs)});if(!s.ok)throw new Error(`Failed to fetch audio sample from ${e.audioUrl}`);let i=await s.blob(),a=new FormData;a.append("model",e.model||"glm-tts-clone"),a.append("file",i,"sample.wav"),(e.text||e.prompt)&&a.append("text",e.text||e.prompt||"");let c=`${this.baseUrl}/voice/clone`,l=await fetch(c,{method:"POST",headers:{Authorization:`Bearer ${t}`},body:a,signal:n??AbortSignal.timeout(this.timeoutMs)});if(!l.ok){let p=await l.text().catch(()=>"");throw new Error(`Zhipu Voice Clone API error ${l.status}: ${p}`)}let d=await l.json();return{mediaUrls:(d.data??[]).map(p=>p.url).filter(p=>!!p),model:e.model||"glm-tts-clone",durationMs:Date.now()-r,metadata:{voiceId:d.voice_id}}}async generateDocumentParsing(e,t,n){let r=Date.now(),s=e.imageUrl||e.audioUrl;if(!s&&!e.prompt)throw new Error("ZhipuMediaTransport: imageUrl/audioUrl (file URL) or prompt (base64) required for document_parsing");let i=`${this.baseUrl}/layout_parsing`,a={model:e.model||"glm-ocr"};s?a.file_url=s:e.prompt&&(a.content=e.prompt);let d=(await this.postJSON(i,a,t,n)).pages??[];return{mediaUrls:[],model:e.model||"glm-ocr",durationMs:Date.now()-r,metadata:{pages:d.map(u=>({pageNum:u.page_num,content:u.content,layouts:u.layouts}))}}}async generateRerank(e,t,n){let r=Date.now(),s=e.prompt;if(!s)throw new Error("ZhipuMediaTransport: prompt (query) required for rerank");if(!e.metadata?.documents)throw new Error("ZhipuMediaTransport: metadata.documents required for rerank");let i=`${this.baseUrl}/rerank`,a={model:e.model||"rerank",query:s,documents:e.metadata.documents};e.metadata.topN!==void 0&&(a.top_n=e.metadata.topN);let c=await this.postJSON(i,a,t,n);return{mediaUrls:[],model:e.model||"rerank",durationMs:Date.now()-r,metadata:{results:(c.results??[]).map(l=>({index:l.index,relevanceScore:l.relevance_score,document:l.document}))}}}async postJSON(e,t,n,r){let s=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:JSON.stringify(t),signal:r??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let i=await s.text().catch(()=>"");throw new Error(`Zhipu API error ${s.status}: ${i}`)}return s.json()}async pollAsyncResult(e,t,n,r){let s=Date.now()+Dr,i=`${this.baseUrl}/async-result/${encodeURIComponent(e)}`;for(;Date.now()<s;){n?.throwIfAborted();let a=await fetch(i,{method:"GET",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!a.ok){let d=await a.text().catch(()=>"");throw new Error(`Zhipu async-result error ${a.status}: ${d}`)}let c=await a.json();if(c.task_status==="SUCCESS")return r?.(100,"completed",e),c;if(c.task_status==="FAIL")throw new Error("Zhipu async task failed");let l=Date.now()-(s-Dr);r?.(Math.min(95,Math.round(l/Dr*100)),c.task_status??"running",e),await new Promise(d=>setTimeout(d,$S))}throw new Error(`Zhipu async task timed out after ${Dr/1e3}s`)}async getTaskStatus(e,t,n){let r=`${this.baseUrl}/async-result/${encodeURIComponent(e)}`,s=await fetch(r,{method:"GET",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let l=await s.text().catch(()=>"");throw new Error(`Zhipu task query error ${s.status}: ${l}`)}let i=await s.json(),a=i.task_status??"unknown";return{status:a==="SUCCESS"?"succeeded":a==="FAIL"?"failed":a==="PROCESSING"?"running":a.toLowerCase(),task:i}}async listVideoTasks(e,t,n){return{data:[]}}async deleteVideoTask(e,t,n){throw new Error("Zhipu does not support task cancellation. Tasks complete or timeout automatically.")}async listVoices(e,t){let n=`${this.baseUrl}/voice/`,r=await fetch(n,{method:"GET",headers:{Authorization:`Bearer ${e}`},signal:t??AbortSignal.timeout(this.timeoutMs)});if(!r.ok){let i=await r.text().catch(()=>"");throw new Error(`Zhipu voice list error ${r.status}: ${i}`)}return(await r.json()).data??[]}async deleteVoice(e,t,n){let r=`${this.baseUrl}/voice/${encodeURIComponent(e)}`,s=await fetch(r,{method:"DELETE",headers:{Authorization:`Bearer ${t}`},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!s.ok){let i=await s.text().catch(()=>"");throw new Error(`Zhipu voice delete error ${s.status}: ${i}`)}}}});function jS(o){switch(o.mediaType){case"video":return o.operation==="merge"?"merge":o.operation==="upscale"?"upscale":o.operation==="edit"?"edit":o.imageUrl?"img2video":"text2video";case"image":return o.operation==="edit"?"inpainting":o.imageUrl?"img2img":"text2image";case"music":return o.audioUrl?"cover":"text2music";case"music_realtime":return"realtime";case"tts":return"text2speech";case"3d":return o.imageUrl?"img2_3d":"text2_3d";default:return}}function FS(o,e){return!("operations"in o)||!o.operations?!0:o.operations.includes(e)}function BS(o){let e=o.baseUrl;switch(o.id){case"volcengine":return new dt({baseUrl:e});case"openai":return new So({baseUrl:e});case"minimax":return new yn({baseUrl:e});case"google":return new To({baseUrl:e});case"qwen":return new Or({baseUrl:e});case"zhipu":return new wo({baseUrl:e.replace(/\/api\/anthropic\/?$/,"/api/paas/v4")});case"zhipu-openai":case"zhipu-coding":return new wo({baseUrl:e.replace(/\/api\/coding\/paas\/v4\/?$/,"/api/paas/v4")});default:return}}var xo,vu=N(()=>{"use strict";Ir();La();Er();ja();yu();ku();xo=class{registry;transports=new Map;constructor(e){this.registry=e.registry}resolveModelById(e,t,n){let r=this.registry.getProvider(e);if(!r)return;let i=this.registry.listModels(e).find(a=>a.id===t&&a.mediaType===n);if(i)return{providerId:e,providerDef:r,modelInfo:i,mediaType:n}}getTransport(e){let t=this.transports.get(e);if(t)return t;let n=this.registry.getProvider(e);if(!n)return;let r=BS(n);if(r)return this.transports.set(e,r),r}listMediaModels(e){let t=[];for(let n of this.registry.listProviders()){let r=this.registry.listModels(n.id);for(let s of r)s.mediaType&&(!e||s.mediaType===e)&&t.push({providerId:n.id,providerDef:n,modelInfo:s,mediaType:s.mediaType})}return t}findModelInProvider(e,t,n){let r=this.registry.getProvider(e);if(!r)return;let s=this.registry.listModels(e),i=n?jS(n):void 0,a=s.find(c=>c.mediaType!==t?!1:!i||!c.mediaCapabilities?!0:FS(c.mediaCapabilities,i));if(a)return{providerId:e,providerDef:r,modelInfo:a,mediaType:t}}}});var Fa,Ba=N(()=>{"use strict";Fa=[{id:"deepseek",name:"DeepSeek",transport:"anthropic-messages",baseUrl:"https://api.deepseek.com/anthropic",apiKeyEnvVars:["DEEPSEEK_API_KEY"],authType:"x-api-key",isAggregator:!1,defaultModel:"deepseek-v4-flash",quirks:{useEffortInsteadOfBudget:!0,filterImageBlocks:!0,maxReasoningEffort:"max",supportsPrefixCompletion:!0,supportsThinkingParam:!0,disableThinkingByDefault:!0},models:[{id:"deepseek-v4-flash",name:"DeepSeek V4 Flash",contextWindow:1e6,maxOutput:384e3,toolCall:!0,reasoning:!0,vision:!1,costInput:.14,costOutput:.28,costCacheRead:.003},{id:"deepseek-v4-pro",name:"DeepSeek V4 Pro",contextWindow:1e6,maxOutput:384e3,toolCall:!0,reasoning:!0,vision:!1,costInput:1.74,costOutput:3.48,costCacheRead:.014}]},{id:"qwen",name:"Alibaba Qwen (DashScope)",transport:"anthropic-messages",baseUrl:"https://dashscope.aliyuncs.com/apps/anthropic",apiKeyEnvVars:["DASHSCOPE_API_KEY","QWEN_API_KEY"],authType:"x-api-key",isAggregator:!1,defaultModel:"qwen3.6-plus",quirks:{supportsThinkingParam:!0,disableThinkingByDefault:!0},models:[{id:"qwen3.6-max-preview",name:"Qwen3.6 Max (Preview)",contextWindow:1e6,maxOutput:65536,toolCall:!0,reasoning:!0,vision:!0,costInput:2,costOutput:8,costCacheRead:.2,costCacheWrite:2.5},{id:"qwen3.6-plus",name:"Qwen3.6 Plus",contextWindow:1e6,maxOutput:65536,toolCall:!0,reasoning:!0,vision:!0,costInput:.5,costOutput:3,costCacheRead:.05,costCacheWrite:.625},{id:"qwen3.6-flash",name:"Qwen3.6 Flash",contextWindow:1e6,maxOutput:65536,toolCall:!0,reasoning:!0,vision:!0,costInput:.1,costOutput:.5,costCacheRead:.01,costCacheWrite:.125},{id:"qwq-plus",name:"QwQ Plus",contextWindow:131072,maxOutput:65536,toolCall:!0,reasoning:!0,reasoningRequired:!0,streamRequired:!0,vision:!1,costInput:.5,costOutput:3,costCacheRead:.05,costCacheWrite:.625},{id:"qwen-max",name:"Qwen Max",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:2,costOutput:6,costCacheRead:.2,costCacheWrite:2.5},{id:"qwen-plus",name:"Qwen Plus",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:.3,costOutput:.85,costCacheRead:.03,costCacheWrite:.375},{id:"qwen-flash",name:"Qwen Flash",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1},{id:"qwen-turbo",name:"Qwen Turbo",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!1,vision:!1},{id:"qwen-vl-max",name:"Qwen VL Max",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!1,vision:!0,costInput:3,costOutput:8.5},{id:"qwen3.5-omni-plus",name:"Qwen3.5 Omni Plus",contextWindow:131072,maxOutput:16384,toolCall:!1,reasoning:!1,streamRequired:!0,vision:!0},{id:"qwen3.5-omni-plus-realtime",name:"Qwen3.5 Omni Plus Realtime",contextWindow:131072,maxOutput:16384,toolCall:!1,reasoning:!1,streamRequired:!0,vision:!0,mediaType:"realtime_audio",mediaCapabilities:{type:"realtime_audio",modalities:["text","audio"],vad:!0,toolCalling:!1}},{id:"qwen-vl-ocr",name:"Qwen VL OCR",contextWindow:131072,maxOutput:4096,toolCall:!1,reasoning:!1,vision:!0,mediaType:"document_parsing",mediaCapabilities:{type:"document_parsing",supportedFormats:["jpg","jpeg","png","bmp","tiff","pdf"],maxFileSizeMB:10}},{id:"qwen3-tts-voicedesign",name:"Qwen3 TTS VoiceDesign",contextWindow:32768,maxOutput:16384,toolCall:!1,reasoning:!1,vision:!1,mediaType:"tts",mediaCapabilities:{type:"tts",operations:["text2speech","voice_clone"],maxCharacters:32768,formats:["mp3","wav"]}},{id:"cosyvoice-v2",name:"CosyVoice V2",contextWindow:1e4,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"tts",mediaCapabilities:{type:"tts",operations:["text2speech","voice_clone"],maxCharacters:1e4,formats:["mp3","wav","pcm"]}},{id:"wan2.7-image-pro",name:"Wan 2.7 Image Pro",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"image",mediaCapabilities:{type:"image",operations:["text2image"],sizes:["1024x1024","1280x720","720x1280","2048x2048","3840x2160"]}},{id:"wanx2.1-t2i-turbo",name:"Wan 2.1 Text-to-Image Turbo",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"image",mediaCapabilities:{type:"image",operations:["text2image"],sizes:["1024x1024","720x1280","1280x720"]}},{id:"wan2.7-t2v-plus",name:"Wan 2.7 Text/Image-to-Video Plus",contextWindow:2e3,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"video",mediaCapabilities:{type:"video",operations:["text2video","img2video"],maxDurationSeconds:15,resolutions:["720P","1080P"]}},{id:"wanx2.1-t2v-turbo",name:"Wan 2.1 Text/Image-to-Video Turbo",contextWindow:2e3,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"video",mediaCapabilities:{type:"video",operations:["text2video","img2video"],maxDurationSeconds:5,resolutions:["480P","720P"]}},{id:"text-embedding-v4",name:"Text Embedding V4",contextWindow:8192,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"embedding",mediaCapabilities:{type:"embedding",dimensions:1024,maxTokens:8192}},{id:"sensevoice-v1",name:"SenseVoice V1",contextWindow:0,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"stt",mediaCapabilities:{type:"stt",languages:["zh","en","ja","ko","yue"],formats:["wav","mp3","m4a","flac","aac"]}},{id:"wanx-background-generation-v2",name:"Wan Background Generation V2",contextWindow:2e3,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"image",mediaCapabilities:{type:"image",operations:["inpainting"],sizes:["1024x1024","1280x720","720x1280"]}},{id:"qwen3-rerank",name:"Qwen3 Rerank",contextWindow:32768,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"rerank",mediaCapabilities:{type:"rerank",maxDocuments:100}}]},{id:"zhipu",name:"Zhipu GLM",group:"zhipu",transport:"anthropic-messages",baseUrl:"https://open.bigmodel.cn/api/anthropic",apiKeyEnvVars:["ZHIPU_API_KEY","GLM_API_KEY"],authType:"x-api-key",isAggregator:!1,defaultModel:"glm-5.1",quirks:{filterThinkingBlocks:!0},models:[{id:"glm-5.1",name:"GLM-5.1",contextWindow:2e5,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!1,costInput:6,costOutput:24,costCacheRead:1.3},{id:"glm-5",name:"GLM-5",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!1,costInput:1,costOutput:3.2,costCacheRead:.2},{id:"glm-5-turbo",name:"GLM-5 Turbo",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:.5,costOutput:1,costCacheRead:.1},{id:"glm-4.7",name:"GLM-4.7",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:1,costOutput:3.2,costCacheRead:.2},{id:"glm-4.6",name:"GLM-4.6",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:1,costOutput:3.2,costCacheRead:.2},{id:"glm-4.5-air",name:"GLM-4.5 Air",contextWindow:131072,maxOutput:98304,toolCall:!0,reasoning:!0,vision:!1,costInput:.5,costOutput:1.5,costCacheRead:.1},{id:"glm-4-long",name:"GLM-4 Long",contextWindow:1e6,maxOutput:4096,toolCall:!0,reasoning:!1,vision:!1,costInput:.1,costOutput:.1},{id:"glm-4.7-flash",name:"GLM-4.7 Flash (Free)",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:0,costOutput:0},{id:"glm-4.5-flash",name:"GLM-4.5 Flash (Free)",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:0,costOutput:0},{id:"glm-5v-turbo",name:"GLM-5V Turbo",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!0,costInput:.5,costOutput:1},{id:"glm-4.6v",name:"GLM-4.6V",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!0,costInput:1,costOutput:3.2},{id:"glm-4.6v-flash",name:"GLM-4.6V Flash (Free)",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!1,vision:!0,costInput:0,costOutput:0},{id:"cogview-4-250304",name:"CogView-4",contextWindow:0,maxOutput:0,toolCall:!1,reasoning:!1,vision:!1,mediaType:"image",mediaCapabilities:{type:"image",operations:["text2image"],sizes:["1024x1024","768x1344","864x1152","1344x768","1152x864","1440x720","720x1440"]}},{id:"cogview-3-flash",name:"CogView-3 Flash (Free)",contextWindow:0,maxOutput:0,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"image",mediaCapabilities:{type:"image",operations:["text2image"],sizes:["1024x1024","768x1344","864x1152","1344x768","1152x864","1440x720","720x1440"]}},{id:"glm-image",name:"GLM-Image",contextWindow:0,maxOutput:0,toolCall:!1,reasoning:!1,vision:!1,mediaType:"image",mediaCapabilities:{type:"image",operations:["text2image"],sizes:["1280x1280","1568x1056","1056x1568","1472x1088","1088x1472","1728x960","960x1728"]}},{id:"cogvideox-3",name:"CogVideoX-3",contextWindow:0,maxOutput:0,toolCall:!1,reasoning:!1,vision:!1,mediaType:"video",mediaCapabilities:{type:"video",operations:["text2video","img2video"],maxDurationSeconds:10,resolutions:["1080p"]}},{id:"cogvideox-flash",name:"CogVideoX Flash (Free)",contextWindow:0,maxOutput:0,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"video",mediaCapabilities:{type:"video",operations:["text2video","img2video"],maxDurationSeconds:6}},{id:"glm-tts",name:"GLM-TTS",contextWindow:0,maxOutput:0,toolCall:!1,reasoning:!1,vision:!1,mediaType:"tts",mediaCapabilities:{type:"tts",operations:["text2speech"],voices:["tongtong","chuichui","xiaochen","jam","kazi","douji","luodo"],maxCharacters:1024,formats:["wav","pcm"]}},{id:"glm-tts-clone",name:"GLM-TTS Clone",contextWindow:0,maxOutput:0,toolCall:!1,reasoning:!1,vision:!1,mediaType:"voice_clone",mediaCapabilities:{type:"voice_clone",maxSampleDurationSeconds:30,maxSampleSizeMB:10,formats:["wav","mp3"]}},{id:"glm-asr-2512",name:"GLM-ASR-2512",contextWindow:0,maxOutput:0,toolCall:!1,reasoning:!1,vision:!1,mediaType:"stt",mediaCapabilities:{type:"stt",languages:["zh","en"],maxDurationSeconds:30,formats:["wav","mp3"]}},{id:"glm-4-voice",name:"GLM-4-Voice",contextWindow:128e3,maxOutput:16e3,toolCall:!1,reasoning:!1,vision:!1,mediaType:"realtime_audio",mediaCapabilities:{type:"realtime_audio",modalities:["text","audio"],vad:!0,toolCalling:!1}},{id:"glm-realtime-flash",name:"GLM Realtime Flash",contextWindow:128e3,maxOutput:16e3,toolCall:!1,reasoning:!1,vision:!0,mediaType:"realtime_video",mediaCapabilities:{type:"realtime_video",modalities:["text","audio","video"],vad:!0,toolCalling:!1}},{id:"glm-realtime-air",name:"GLM Realtime Air",contextWindow:128e3,maxOutput:16e3,toolCall:!1,reasoning:!1,vision:!0,mediaType:"realtime_video",mediaCapabilities:{type:"realtime_video",modalities:["text","audio","video"],vad:!0,toolCalling:!1}},{id:"embedding-3",name:"Embedding-3",contextWindow:0,maxOutput:0,toolCall:!1,reasoning:!1,vision:!1,mediaType:"embedding",mediaCapabilities:{type:"embedding",dimensions:2048,maxTokens:3072}},{id:"embedding-2",name:"Embedding-2",contextWindow:0,maxOutput:0,toolCall:!1,reasoning:!1,vision:!1,mediaType:"embedding",mediaCapabilities:{type:"embedding",dimensions:1024,maxTokens:512}},{id:"rerank",name:"GLM Rerank",contextWindow:0,maxOutput:0,toolCall:!1,reasoning:!1,vision:!1,mediaType:"rerank",mediaCapabilities:{type:"rerank",maxDocuments:128,maxQueryLength:4096,maxDocumentLength:4096}},{id:"glm-ocr",name:"GLM-OCR",contextWindow:0,maxOutput:0,toolCall:!1,reasoning:!1,vision:!1,mediaType:"document_parsing",mediaCapabilities:{type:"document_parsing",supportedFormats:["pdf","jpg","png"],maxPageCount:100,maxFileSizeMB:50}}]},{id:"zhipu-openai",name:"Zhipu GLM OpenAI",group:"zhipu",transport:"openai-chat",baseUrl:"https://open.bigmodel.cn/api/paas/v4",apiKeyEnvVars:["ZHIPU_API_KEY","GLM_API_KEY"],authType:"bearer",isAggregator:!1,defaultModel:"glm-5.1",quirks:{supportsReasoningEffort:!0,supportsThinkingParam:!0,supportsToolStream:!0,builtinWebSearch:!0,builtinCodeInterpreter:!0},models:[{id:"glm-5.1",name:"GLM-5.1",contextWindow:2e5,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!1,costInput:6,costOutput:24,costCacheRead:1.3},{id:"glm-5",name:"GLM-5",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!1,costInput:1,costOutput:3.2,costCacheRead:.2},{id:"glm-5-turbo",name:"GLM-5 Turbo",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:.5,costOutput:1,costCacheRead:.1},{id:"glm-4.7",name:"GLM-4.7",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:1,costOutput:3.2,costCacheRead:.2},{id:"glm-4.6",name:"GLM-4.6",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:1,costOutput:3.2,costCacheRead:.2},{id:"glm-4.5-air",name:"GLM-4.5 Air",contextWindow:131072,maxOutput:98304,toolCall:!0,reasoning:!0,vision:!1,costInput:.5,costOutput:1.5,costCacheRead:.1},{id:"glm-4-long",name:"GLM-4 Long",contextWindow:1e6,maxOutput:4096,toolCall:!0,reasoning:!1,vision:!1,costInput:.1,costOutput:.1},{id:"glm-4.7-flash",name:"GLM-4.7 Flash (Free)",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:0,costOutput:0},{id:"glm-4.5-flash",name:"GLM-4.5 Flash (Free)",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:0,costOutput:0},{id:"glm-5v-turbo",name:"GLM-5V Turbo",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!0,costInput:.5,costOutput:1},{id:"glm-4.6v",name:"GLM-4.6V",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!0,costInput:1,costOutput:3.2},{id:"glm-4.6v-flash",name:"GLM-4.6V Flash (Free)",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!1,vision:!0,costInput:0,costOutput:0}]},{id:"zhipu-coding",name:"Zhipu GLM Coding",group:"zhipu",transport:"openai-chat",baseUrl:"https://open.bigmodel.cn/api/coding/paas/v4",apiKeyEnvVars:["ZHIPU_API_KEY","GLM_API_KEY"],authType:"bearer",isAggregator:!1,defaultModel:"codegeex-4",quirks:{supportsReasoningEffort:!0,supportsThinkingParam:!0,supportsToolStream:!0},models:[{id:"codegeex-4",name:"CodeGeeX-4",contextWindow:131072,maxOutput:16384,toolCall:!0,reasoning:!0,vision:!1,costInput:.1,costOutput:.1}]},{id:"minimax",name:"MiniMax",group:"minimax",transport:"anthropic-messages",baseUrl:"https://api.minimaxi.com/anthropic",apiKeyEnvVars:["MINIMAX_API_KEY"],authType:"x-api-key",isAggregator:!1,defaultModel:"MiniMax-M2.7",omitZeroTemperature:!0,quirks:{filterImageBlocks:!0},models:[{id:"MiniMax-M2.7",name:"MiniMax M2.7",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!1,costInput:.3,costOutput:1.2,costCacheRead:.06,costCacheWrite:.375},{id:"MiniMax-M2.7-highspeed",name:"MiniMax M2.7 Highspeed",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!1,costInput:.3,costOutput:1.2,costCacheRead:.06,costCacheWrite:.375},{id:"MiniMax-M2.5",name:"MiniMax M2.5",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!1,costInput:.15,costOutput:.6,costCacheRead:.03,costCacheWrite:.19},{id:"MiniMax-M2.5-highspeed",name:"MiniMax M2.5 Highspeed",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!1,costInput:.15,costOutput:.6,costCacheRead:.03,costCacheWrite:.19},{id:"MiniMax-M2.1",name:"MiniMax M2.1 (legacy)",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!1,vision:!1,costInput:.15,costOutput:.6},{id:"MiniMax-M2.1-highspeed",name:"MiniMax M2.1 Highspeed (legacy)",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!1,vision:!1,costInput:.15,costOutput:.6},{id:"MiniMax-M2",name:"MiniMax M2 (legacy)",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!1,vision:!1,costInput:.1,costOutput:.4},{id:"music-2.6",name:"MiniMax Music 2.6",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"music",mediaCapabilities:{type:"music",operations:["text2music"],maxDurationSeconds:300,formats:["mp3","wav"]}},{id:"music-cover",name:"MiniMax Music Cover",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"music",mediaCapabilities:{type:"music",operations:["cover"],maxDurationSeconds:300,formats:["mp3","wav"]}},{id:"MiniMax-Hailuo-2.3",name:"Hailuo 2.3",contextWindow:2e3,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"video",mediaCapabilities:{type:"video",operations:["text2video","img2video"],maxDurationSeconds:10,resolutions:["768P","1080P"]}},{id:"MiniMax-Hailuo-2.3-Fast",name:"Hailuo 2.3 Fast",contextWindow:2e3,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"video",mediaCapabilities:{type:"video",operations:["text2video","img2video"],maxDurationSeconds:10,resolutions:["768P","1080P"]}},{id:"MiniMax-Hailuo-02",name:"Hailuo 02",contextWindow:2e3,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"video",mediaCapabilities:{type:"video",operations:["text2video","img2video"],maxDurationSeconds:10,resolutions:["512P","768P","1080P"]}},{id:"image-01",name:"MiniMax Image 01",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"image",mediaCapabilities:{type:"image",operations:["text2image","img2img"],sizes:["512x512","1024x1024","2048x2048"]}},{id:"image-01-live",name:"MiniMax Image 01 Live",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"image",mediaCapabilities:{type:"image",operations:["text2image"],sizes:["1024x1024"]}},{id:"speech-2.8-hd",name:"MiniMax Speech 2.8 HD",contextWindow:1e4,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"tts",mediaCapabilities:{type:"tts",operations:["text2speech","voice_clone"],formats:["mp3","pcm","flac","wav","opus"]}},{id:"speech-2.8-turbo",name:"MiniMax Speech 2.8 Turbo",contextWindow:1e4,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"tts",mediaCapabilities:{type:"tts",operations:["text2speech","voice_clone"],formats:["mp3","pcm","flac","wav","opus"]}},{id:"voice-clone",aliases:["minimax-voice-clone"],name:"MiniMax Voice Clone",contextWindow:0,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:0,costOutput:0,mediaType:"voice_clone",mediaCapabilities:{type:"voice_clone",maxSampleDurationSeconds:30,maxSampleSizeMB:20,formats:["mp3","wav","m4a"]}}]},{id:"minimax-openai",name:"MiniMax (OpenAI)",group:"minimax",transport:"openai-chat",baseUrl:"https://api.minimaxi.com/v1",apiKeyEnvVars:["MINIMAX_API_KEY"],authType:"bearer",isAggregator:!1,omitZeroTemperature:!0,defaultModel:"MiniMax-M2.7",quirks:{supportsReasoningSplit:!0},models:[{id:"MiniMax-M2.7",aliases:["minimax-m2.7"],name:"MiniMax M2.7",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!1,costInput:.3,costOutput:1.2},{id:"MiniMax-M2.7-highspeed",name:"MiniMax M2.7 Highspeed",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!1,costInput:.3,costOutput:1.2},{id:"MiniMax-M2.5",name:"MiniMax M2.5",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!1,costInput:.15,costOutput:.6},{id:"MiniMax-M2.5-highspeed",name:"MiniMax M2.5 Highspeed",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!1,costInput:.15,costOutput:.6},{id:"MiniMax-M2.1",name:"MiniMax M2.1 (legacy)",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!1,vision:!1,costInput:.15,costOutput:.6},{id:"MiniMax-M2.1-highspeed",name:"MiniMax M2.1 Highspeed (legacy)",contextWindow:204800,maxOutput:131072,toolCall:!0,reasoning:!1,vision:!1,costInput:.15,costOutput:.6}]},{id:"moonshot",name:"Moonshot (Kimi)",transport:"openai-chat",baseUrl:"https://api.moonshot.cn",apiKeyEnvVars:["MOONSHOT_API_KEY"],authType:"bearer",isAggregator:!1,omitZeroTemperature:!0,defaultModel:"kimi-k2.6",quirks:{supportsReasoningEffort:!0,supportsThinkingParam:!0,disableThinkingByDefault:!0,builtinWebSearch:!0},models:[{id:"kimi-k2.6",name:"Kimi K2.6",contextWindow:262144,maxOutput:262144,toolCall:!0,reasoning:!0,vision:!0,costInput:.95,costOutput:4,costCacheRead:.16},{id:"kimi-k2.5",name:"Kimi K2.5",contextWindow:262144,maxOutput:262144,toolCall:!0,reasoning:!0,vision:!0,costInput:.8,costOutput:4,costCacheRead:.2},{id:"moonshot-v1-128k",name:"Moonshot V1 128K",contextWindow:131072,maxOutput:8192,toolCall:!0,reasoning:!1,vision:!1,costInput:.84,costOutput:.84}]},{id:"volcengine",name:"Doubao / Volcengine",transport:"volcengine-responses",baseUrl:"https://ark.cn-beijing.volces.com/api",apiKeyEnvVars:["ARK_API_KEY","DOUBAO_API_KEY"],authType:"bearer",isAggregator:!1,defaultModel:"doubao-seed-2-0-lite-260215",models:[{id:"doubao-seed-2-0-pro-260215",name:"Doubao Seed 2.0 Pro",contextWindow:262144,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!0,costInput:0,costOutput:0},{id:"doubao-seed-2-0-lite-260428",aliases:["doubao-seed-2-0-lite"],name:"Doubao Seed 2.0 Lite (0428)",contextWindow:262144,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!0,costInput:0,costOutput:0},{id:"doubao-seed-2-0-lite-260215",name:"Doubao Seed 2.0 Lite",contextWindow:262144,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!0,costInput:0,costOutput:0},{id:"doubao-seed-2-0-mini-260428",name:"Doubao Seed 2.0 Mini (0428)",contextWindow:262144,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!0,costInput:0,costOutput:0},{id:"doubao-seed-2-0-mini-260215",name:"Doubao Seed 2.0 Mini",contextWindow:262144,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!0,costInput:0,costOutput:0},{id:"doubao-seed-2-0-code-preview-260215",name:"Doubao Seed 2.0 Code Preview",contextWindow:262144,maxOutput:131072,toolCall:!0,reasoning:!0,vision:!0,costInput:0,costOutput:0},{id:"doubao-seed-1-8-251228",name:"Doubao Seed 1.8",contextWindow:262144,maxOutput:65536,toolCall:!0,reasoning:!0,vision:!0,costInput:0,costOutput:0},{id:"doubao-seedance-2-0-260128",aliases:["doubao-seedance-2-0"],name:"Doubao Seedance 2.0",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!0,costInput:0,costOutput:0,mediaType:"video",mediaCapabilities:{type:"video",operations:["text2video","img2video","video2video","edit","merge","upscale"],maxDurationSeconds:15,resolutions:["480p","720p","1080p"],aspectRatios:["16:9","9:16","1:1"],fps:[24]}},{id:"doubao-seedance-2-0-fast-260128",aliases:["doubao-seedance-2-0-fast"],name:"Doubao Seedance 2.0 Fast",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!0,costInput:0,costOutput:0,mediaType:"video",mediaCapabilities:{type:"video",operations:["text2video","img2video","video2video","edit","merge","upscale"],maxDurationSeconds:15,resolutions:["480p","720p"],aspectRatios:["16:9","9:16","1:1"],fps:[24]}},{id:"doubao-seedream-5-0-260128",aliases:["doubao-seedream-5-0"],name:"Doubao Seedream 5.0",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!0,costInput:0,costOutput:0,mediaType:"image",mediaCapabilities:{type:"image",operations:["text2image","img2img"],sizes:["2K"]}},{id:"doubao-seedream-4-5-251128",aliases:["doubao-seedream-4-5"],name:"Doubao Seedream 4.5",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!0,costInput:0,costOutput:0,mediaType:"image",mediaCapabilities:{type:"image",operations:["text2image","img2img"],sizes:["2K"]}},{id:"doubao-seed3d-2-0-260328",aliases:["doubao-seed3d-2-0"],name:"Doubao Seed3D 2.0",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!0,costInput:0,costOutput:0,mediaType:"3d",mediaCapabilities:{type:"3d",operations:["img2_3d"],outputFormats:["glb","obj","usd","usdz"]}},{id:"hyper3d-gen2-260112",aliases:["hyper3d-gen2"],name:"Hyper3D Gen2",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!0,costInput:0,costOutput:0,mediaType:"3d",mediaCapabilities:{type:"3d",operations:["text2_3d","img2_3d"],outputFormats:["glb","obj"]}},{id:"hitem3d-2-0-251223",aliases:["hitem3d-2-0"],name:"HiTem3D 2.0",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!0,costInput:0,costOutput:0,mediaType:"3d",mediaCapabilities:{type:"3d",operations:["img2_3d"],outputFormats:["glb","obj","usd"]}}]},{id:"openai",name:"OpenAI",transport:"openai-responses",baseUrl:"https://api.openai.com",apiKeyEnvVars:["OPENAI_API_KEY"],authType:"bearer",isAggregator:!1,defaultModel:"gpt-5.5",quirks:{builtinWebSearch:!0,builtinCodeInterpreter:!0,builtinFileSearch:!0},models:[{id:"gpt-5.5",name:"GPT-5.5",contextWindow:105e4,maxOutput:128e3,toolCall:!0,reasoning:!0,vision:!0,costInput:5,costOutput:30,costCacheRead:.5},{id:"gpt-5.4",name:"GPT-5.4",contextWindow:105e4,maxOutput:128e3,toolCall:!0,reasoning:!0,vision:!0,costInput:2.5,costOutput:15,costCacheRead:.25},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini",contextWindow:4e5,maxOutput:128e3,toolCall:!0,reasoning:!0,vision:!0,costInput:.75,costOutput:4.5,costCacheRead:.075},{id:"gpt-5.4-nano",name:"GPT-5.4 Nano",contextWindow:4e5,maxOutput:128e3,toolCall:!0,reasoning:!0,vision:!0,costInput:.2,costOutput:1.25,costCacheRead:.02},{id:"gpt-image-2",name:"GPT Image 2",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!0,costInput:0,costOutput:0,mediaType:"image",mediaCapabilities:{type:"image",operations:["text2image","img2img","inpainting"],sizes:["1024x1024","1536x1024","1024x1536","auto"],transparentBackground:!0}},{id:"gpt-realtime-2",name:"GPT Realtime 2",contextWindow:128e3,maxOutput:16e3,toolCall:!0,reasoning:!0,vision:!1,mediaType:"realtime_audio",mediaCapabilities:{type:"realtime_audio",voices:["alloy","ash","ballad","coral","echo","fable","onyx","nova","sage","shimmer"],modalities:["text","audio"],vad:!0,toolCalling:!0}},{id:"gpt-realtime-translate",name:"GPT Realtime Translate",contextWindow:128e3,maxOutput:16e3,toolCall:!1,reasoning:!1,vision:!1,mediaType:"realtime_audio",mediaCapabilities:{type:"realtime_audio",voices:["alloy","ash","ballad","coral","echo","fable","onyx","nova","sage","shimmer"],modalities:["text","audio"],vad:!0,toolCalling:!1}},{id:"gpt-realtime-1.5",name:"GPT Realtime 1.5",contextWindow:128e3,maxOutput:16e3,toolCall:!0,reasoning:!1,vision:!1,mediaType:"realtime_audio",mediaCapabilities:{type:"realtime_audio",voices:["alloy","ash","ballad","coral","echo","fable","onyx","nova","sage","shimmer"],modalities:["text","audio"],vad:!0,toolCalling:!0}},{id:"gpt-realtime-mini",name:"GPT Realtime Mini",contextWindow:128e3,maxOutput:16e3,toolCall:!0,reasoning:!1,vision:!1,mediaType:"realtime_audio",mediaCapabilities:{type:"realtime_audio",voices:["alloy","ash","ballad","coral","echo","fable","onyx","nova","sage","shimmer"],modalities:["text","audio"],vad:!0,toolCalling:!0}}]},{id:"anthropic",name:"Anthropic",transport:"anthropic-messages",baseUrl:"https://api.anthropic.com",apiKeyEnvVars:["ANTHROPIC_API_KEY"],authType:"x-api-key",isAggregator:!1,defaultModel:"claude-opus-4-7",quirks:{supportsDocumentVision:!0},models:[{id:"claude-opus-4-7",name:"Claude Opus 4.7",contextWindow:1e6,maxOutput:128e3,toolCall:!0,reasoning:!0,vision:!0,costInput:5,costOutput:25,costCacheRead:.5,costCacheWrite:6.25},{id:"claude-opus-4-6",name:"Claude Opus 4.6",contextWindow:1e6,maxOutput:128e3,toolCall:!0,reasoning:!0,vision:!0,costInput:5,costOutput:25,costCacheRead:.5,costCacheWrite:6.25},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindow:1e6,maxOutput:64e3,toolCall:!0,reasoning:!0,vision:!0,costInput:3,costOutput:15,costCacheRead:.3,costCacheWrite:3.75},{id:"claude-sonnet-4-5",name:"Claude Sonnet 4.5",contextWindow:2e5,maxOutput:64e3,toolCall:!0,reasoning:!0,vision:!0,costInput:3,costOutput:15,costCacheRead:.3,costCacheWrite:3.75},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5",contextWindow:2e5,maxOutput:64e3,toolCall:!0,reasoning:!0,vision:!0,costInput:1,costOutput:5,costCacheRead:.1,costCacheWrite:1.25}]},{id:"google",name:"Google Gemini",transport:"gemini-generatecontent",baseUrl:"https://generativelanguage.googleapis.com/v1beta",apiKeyEnvVars:["GOOGLE_API_KEY","GEMINI_API_KEY"],authType:"x-api-key",isAggregator:!1,defaultModel:"gemini-3-flash-preview",quirks:{builtinWebSearch:!0,builtinCodeInterpreter:!0,builtinUrlContext:!0,builtinMapsGrounding:!0,builtinFileSearch:!0,supportsDocumentVision:!0},models:[{id:"gemini-3.1-pro-preview",name:"Gemini 3.1 Pro",contextWindow:1048576,maxOutput:65536,toolCall:!0,reasoning:!0,reasoningRequired:!0,vision:!0,costInput:2,costOutput:12},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash",contextWindow:1048576,maxOutput:65536,toolCall:!0,reasoning:!0,vision:!0,costInput:.5,costOutput:3},{id:"gemini-3.1-flash-lite",name:"Gemini 3.1 Flash-Lite",contextWindow:1048576,maxOutput:65536,toolCall:!0,reasoning:!0,vision:!0,costInput:.25,costOutput:1.5},{id:"gemini-3.1-flash-image-preview",name:"Gemini 3.1 Flash Image (Nano Banana 2)",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!0,costInput:0,costOutput:0,mediaType:"image",mediaCapabilities:{type:"image",operations:["text2image","img2img"],sizes:["1024x1024"]}},{id:"gemini-3-pro-image-preview",name:"Gemini 3 Pro Image (Nano Banana Pro)",contextWindow:4096,maxOutput:1,toolCall:!1,reasoning:!1,vision:!0,costInput:0,costOutput:0,mediaType:"image",mediaCapabilities:{type:"image",operations:["text2image","img2img"],sizes:["1024x1024"]}},{id:"veo-3.1-generate-preview",name:"Veo 3.1 Standard",contextWindow:2e3,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"video",mediaCapabilities:{type:"video",operations:["text2video","img2video"],maxDurationSeconds:8,resolutions:["720P","1080P","4K"]}},{id:"veo-3.1-fast-generate-preview",name:"Veo 3.1 Fast",contextWindow:2e3,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"video",mediaCapabilities:{type:"video",operations:["text2video","img2video"],maxDurationSeconds:8,resolutions:["720P","1080P","4K"]}},{id:"veo-3.1-lite-generate-preview",name:"Veo 3.1 Lite",contextWindow:2e3,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"video",mediaCapabilities:{type:"video",operations:["text2video","img2video"],maxDurationSeconds:8,resolutions:["720P","1080P"]}},{id:"lyria-3-pro-preview",name:"Lyria 3 Pro",contextWindow:2e3,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"music",mediaCapabilities:{type:"music",operations:["text2music"],maxDurationSeconds:300,formats:["mp3"]}},{id:"lyria-3-clip-preview",name:"Lyria 3 Clip",contextWindow:2e3,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"music",mediaCapabilities:{type:"music",operations:["text2music"],maxDurationSeconds:30,formats:["mp3"]}},{id:"lyria-realtime-exp",name:"Lyria RealTime (Experimental)",contextWindow:2e3,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,mediaType:"music_realtime",mediaCapabilities:{type:"music",operations:["realtime"],formats:["wav"]}},{id:"gemini-3.1-flash-tts-preview",name:"Gemini 3.1 Flash TTS",contextWindow:8192,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:1,costOutput:20,mediaType:"tts",mediaCapabilities:{type:"tts",operations:["text2speech"],maxCharacters:8e3,formats:["mp3","wav"]}},{id:"gemini-embedding-2",name:"Gemini Embedding 2 (Multimodal)",contextWindow:8192,maxOutput:1,toolCall:!1,reasoning:!1,vision:!1,costInput:.2,costOutput:0,mediaType:"embedding",mediaCapabilities:{type:"embedding",dimensions:3072,maxTokens:8192}}]},{id:"openrouter",name:"OpenRouter",transport:"openai-chat",baseUrl:"https://openrouter.ai/api",apiKeyEnvVars:["OPENROUTER_API_KEY"],authType:"bearer",isAggregator:!0,defaultModel:"anthropic/claude-opus-4.7",extraHeaders:{"HTTP-Referer":"https://claw.bot","X-Title":"XiaozhiClaw"},models:[{id:"anthropic/claude-opus-4.7",name:"Claude Opus 4.7 (via OpenRouter)",contextWindow:1e6,maxOutput:128e3,toolCall:!0,reasoning:!0,vision:!0,costInput:5,costOutput:25,costCacheRead:.5},{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6 (via OpenRouter)",contextWindow:1e6,maxOutput:128e3,toolCall:!0,reasoning:!0,vision:!0,costInput:5,costOutput:25,costCacheRead:.5},{id:"deepseek/deepseek-v4-flash",name:"DeepSeek V4 Flash (via OpenRouter)",contextWindow:1048576,maxOutput:393216,toolCall:!0,reasoning:!0,vision:!1,costInput:.14,costOutput:.28,costCacheRead:.028}]},{id:"qwen-coding",name:"Alibaba Qwen (Coding Plan)",transport:"anthropic-messages",baseUrl:"https://coding.dashscope.aliyuncs.com/apps/anthropic",apiKeyEnvVars:["DASHSCOPE_API_KEY","QWEN_API_KEY"],authType:"x-api-key",isAggregator:!1,defaultModel:"qwen3-coder-plus",models:[{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus (Coding Plan)",contextWindow:262144,maxOutput:65536,toolCall:!0,reasoning:!0,vision:!1},{id:"qwen3-coder-flash",name:"Qwen3 Coder Flash (Coding Plan)",contextWindow:262144,maxOutput:65536,toolCall:!0,reasoning:!0,vision:!1}]}]});import{existsSync as WS,mkdirSync as GS,readFileSync as HS,writeFileSync as VS}from"node:fs";import{join as KS}from"node:path";function Su(o){let e=new Map;if(!o||typeof o!="object")return e;for(let[t,n]of Object.entries(o)){let r=wu[t];if(!r||!n||typeof n!="object")continue;let i=n.models;if(!i||typeof i!="object")continue;let a=e.get(r);a||(a={models:new Map},e.set(r,a));for(let[c,l]of Object.entries(i)){if(!l||typeof l!="object"||a.models.has(c))continue;let d=l,u=typeof d.family=="string"?d.family:"";if(xu(u,c)||c.toLowerCase().includes("reranker"))continue;let p=d.cost??{},m=d.limit??{},h=d.modalities??{},f=Array.isArray(h.input)?h.input:[],y=Array.isArray(h.output)?h.output:[],b=JS(y,f,c);a.models.set(c,{id:c,name:typeof d.name=="string"?d.name:c,contextWindow:typeof m.context=="number"?m.context:2e5,maxOutput:typeof m.output=="number"?m.output:8192,toolCall:d.tool_call===!0,reasoning:d.reasoning===!0,vision:d.attachment===!0||f.includes("image"),costInput:typeof p.input=="number"?p.input:void 0,costOutput:typeof p.output=="number"?p.output:void 0,costCacheRead:typeof p.cache_read=="number"?p.cache_read:void 0,costCacheWrite:typeof p.cache_write=="number"?p.cache_write:void 0,mediaType:b})}}return e}function JS(o,e,t){if(o.includes("video"))return"video";if(o.includes("image")&&!o.includes("text"))return"image";if(o.includes("audio")&&!o.includes("text"))return"tts";if(o.includes("3d"))return"3d";if(e.includes("video")&&o.includes("text"))return"video_understanding";let n=t.toLowerCase();if(n.includes("tts")||n.includes("speech")||n.includes("cosyvoice"))return"tts";if(n.includes("music")||n.includes("suno"))return"music";if(n.includes("seedream")||n.includes("image")||n.includes("dall"))return"image";if(n.includes("seedance")||n.includes("video"))return"video"}function xu(o,e){return o&&ZS.has(o)?!0:eT.some(t=>t.test(e))}function Tu(o){let e=new Map;if(!o||typeof o!="object")return e;for(let[t,n]of Object.entries(o)){let r=wu[t];if(!r||!n||typeof n!="object")continue;let i=n.models;if(!(!i||typeof i!="object"))for(let[a,c]of Object.entries(i)){if(!c||typeof c!="object")continue;let l=c,d=typeof l.family=="string"?l.family:"";if(!xu(d,a)||a.toLowerCase().includes("reranker"))continue;let u=l.limit??{},p=l.cost??{},m=typeof u.output=="number"?u.output:0,h=typeof u.context=="number"?u.context:512;if(m<=1)continue;let f={id:a,name:typeof l.name=="string"?l.name:a,providerId:r,dimensions:m,maxInputTokens:h,costInput:typeof p.input=="number"?p.input:void 0,family:d},y=e.get(r);y||(y=[],e.set(r,y)),y.push(f)}}for(let t of e.values())t.sort((n,r)=>{let s=n.costInput??0,i=r.costInput??0;return s!==i?s-i:r.dimensions-n.dimensions});for(let[t,n]of Object.entries(QS)){let r=e.get(t);(!r||r.length===0)&&e.set(t,[...n])}return e}var zS,qS,YS,XS,wu,Ro,QS,ZS,eT,Wa=N(()=>{"use strict";hn();zS="https://models.dev/api.json",qS=3e4,YS=1440*60*1e3,XS=300*1e3,wu={deepseek:"deepseek",qwen:"qwen","qwen-coding-plan":"qwen-coding","alibaba-cn":"qwen",zhipuai:"zhipu",minimax:"minimax",moonshot:"moonshot",moonshotai:"moonshot","moonshotai-cn":"moonshot",doubao:"volcengine","bytedance-seed":"volcengine",volcengine:"volcengine",openai:"openai",anthropic:"anthropic",google:"google",openrouter:"openrouter"},Ro=class{cache=null;cacheDir;cacheFile;ttlMs;fetching=!1;lastFetchAttempt=0;constructor(e){this.cacheDir=e?.cacheDir??ut(),this.cacheFile=KS(this.cacheDir,"model_catalog.json"),this.ttlMs=e?.ttlMs??YS}getModels(e){this.ensureLoaded();let t=this.cache?.providers.get(e);return t?[...t.models.values()]:[]}getModel(e,t){return this.ensureLoaded(),this.cache?.providers.get(e)?.models.get(t)}listProviderIds(){return this.ensureLoaded(),this.cache?[...this.cache.providers.keys()]:[]}getEmbeddingModels(e){return this.ensureLoaded(),this.cache?.embeddingModels.get(e)??[]}getDefaultEmbeddingModel(e){let t=this.getEmbeddingModels(e);return t.filter(r=>r.dimensions>=512)[0]??t[0]}getAllEmbeddingModels(){return this.ensureLoaded(),this.cache?.embeddingModels??new Map}async refreshCatalog(){return this.fetchRemote()}ensureLoaded(){this.cache&&!this.isStale()||(this.cache||this.loadFromDisk(),(!this.cache||this.isStale())&&this.backgroundFetch())}isStale(){return this.cache?Date.now()-this.cache.fetchedAt>this.ttlMs:!0}loadFromDisk(){try{if(!WS(this.cacheFile))return;let e=HS(this.cacheFile,"utf8"),t=JSON.parse(e);if(!t.fetchedAt||!t.data)return;this.cache={fetchedAt:t.fetchedAt,providers:Su(t.data),embeddingModels:Tu(t.data)}}catch{}}saveToDisk(e){try{GS(this.cacheDir,{recursive:!0});let t=JSON.stringify({fetchedAt:Date.now(),data:e},null,0);VS(this.cacheFile,t,"utf8")}catch{}}backgroundFetch(){this.fetching||Date.now()-this.lastFetchAttempt<XS||(this.fetching=!0,this.fetchRemote().finally(()=>{this.fetching=!1}))}async fetchRemote(){this.lastFetchAttempt=Date.now();try{let e=await fetch(zS,{signal:AbortSignal.timeout(qS),headers:{Accept:"application/json"}});if(!e.ok)return!1;let t=await e.json(),n=Su(t);return n.size===0?!1:(this.cache={fetchedAt:Date.now(),providers:n,embeddingModels:Tu(t)},this.saveToDisk(t),!0)}catch{return!1}}};QS={qwen:[{id:"text-embedding-v3",name:"Text Embedding v3",providerId:"qwen",dimensions:1024,maxInputTokens:8192,costInput:.7,family:"text-embedding"},{id:"text-embedding-v2",name:"Text Embedding v2",providerId:"qwen",dimensions:1536,maxInputTokens:2048,costInput:.7,family:"text-embedding"}],zhipu:[{id:"embedding-3",name:"Embedding-3",providerId:"zhipu",dimensions:2048,maxInputTokens:8192,costInput:.5,family:"text-embedding"},{id:"embedding-2",name:"Embedding-2",providerId:"zhipu",dimensions:1024,maxInputTokens:512,costInput:.5,family:"text-embedding"}],minimax:[{id:"embo-01",name:"embo-01",providerId:"minimax",dimensions:1536,maxInputTokens:4096,costInput:.5,family:"text-embedding"}],volcengine:[{id:"doubao-embedding-vision-251215",name:"Doubao Embedding Vision (Latest)",providerId:"volcengine",dimensions:1024,maxInputTokens:128e3,costInput:.5,family:"text-embedding"},{id:"doubao-embedding-vision-250615",name:"Doubao Embedding Vision",providerId:"volcengine",dimensions:1024,maxInputTokens:128e3,costInput:.5,family:"text-embedding"}],google:[{id:"text-embedding-004",name:"Text Embedding 004",providerId:"google",dimensions:768,maxInputTokens:2048,costInput:.025,family:"text-embedding"},{id:"gemini-embedding-001",name:"Gemini Embedding",providerId:"google",dimensions:3072,maxInputTokens:8192,costInput:0,family:"text-embedding"}]},ZS=new Set(["text-embedding","bge","cohere-embed","plamo"]),eT=[/embed/i,/^bge-/i,/^gte-/i,/^e5-/i,/multi-qa-/i]});var tT,$n,Ru=N(()=>{"use strict";Ba();Wa();tT={claude:"anthropic",gemini:"google",doubao:"volcengine"},$n=class{builtins=new Map;catalog;overrides=new Map;constructor(e){for(let t of Fa)this.builtins.set(t.id,t);this.catalog=e?.catalog??new Ro}applyOverride(e,t){this.overrides.set(e,{...this.overrides.get(e),...t})}getProvider(e){let t=tT[e]??e,n=this.builtins.get(t),r=this.overrides.get(t);if(!(!n&&!r))return!n&&r?!r.id||!r.transport||!r.baseUrl?void 0:{id:r.id,name:r.name??r.id,transport:r.transport,baseUrl:r.baseUrl,apiKeyEnvVars:r.apiKeyEnvVars??[],authType:r.authType??"bearer",isAggregator:r.isAggregator??!1,defaultModel:r.defaultModel,models:r.models}:n&&!r?n:{...n,...r,models:r.models??n.models}}listProviders(){let e=new Map;for(let[t,n]of this.builtins)e.set(t,n);for(let[t]of this.overrides){let n=this.getProvider(t);n&&e.set(t,n)}return[...e.values()]}listModels(e){let n=this.getProvider(e)?.models??[],r=this.catalog.getModels(e);if(r.length===0)return n;let s=new Map;for(let i of r)s.set(i.id,i);for(let i of n)s.set(i.id,i);return[...s.values()]}getModelInfo(e,t){return this.listModels(e).find(n=>n.id===t)}async refreshCatalog(){return this.catalog.refreshCatalog()}resolveApiKey(e,t){if(t)return t;let n=this.getProvider(e);if(n)for(let r of n.apiKeyEnvVars){let s=process.env[r];if(s?.trim())return s.trim()}}}});var Un=N(()=>{"use strict"});function oT(o){let e=o.slice(o.lastIndexOf(".")).toLowerCase();return nT[e]||"application/octet-stream"}function sT(o){return rT.test(o)}async function _u(o,e,t,n){if(o.startsWith("data:")||!sT(o))return o;let r=await fetch(o,{signal:n});if(!r.ok)throw new Error(`Failed to fetch local media ${o}: ${r.status}`);let s=Buffer.from(await r.arrayBuffer()),i=iT(o),a=r.headers.get("content-type")||oT(i);return(await e.uploadFile(s,i,a,t,n)).url}function iT(o){try{let t=new URL(o).pathname.split("/").pop();return t&&t.includes(".")?t:"upload"}catch{return"upload"}}var nT,rT,Au=N(()=>{"use strict";nT={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".svg":"image/svg+xml",".bmp":"image/bmp",".avif":"image/avif",".heic":"image/heic",".mp4":"video/mp4",".webm":"video/webm",".mov":"video/quicktime",".avi":"video/x-msvideo",".mkv":"video/x-matroska",".mp3":"audio/mpeg",".wav":"audio/wav",".ogg":"audio/ogg",".aac":"audio/aac",".flac":"audio/flac",".m4a":"audio/mp4",".opus":"audio/opus",".pdf":"application/pdf",".doc":"application/msword",".docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document",".xls":"application/vnd.ms-excel",".xlsx":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",".ppt":"application/vnd.ms-powerpoint",".pptx":"application/vnd.openxmlformats-officedocument.presentationml.presentation",".txt":"text/plain",".csv":"text/csv",".json":"application/json"};rT=/^https?:\/\/(127\.0\.0\.1|localhost|0\.0\.0\.0|\[::1\])(:\d+)?/i});function z(o){return aT.test(o)}async function pt(o,e){return _u(o,e.uploadAdapter,e.apiKey,e.signal)}async function Lr(o,e){if(o.startsWith("data:")||!z(o))return o;let t=await fetch(o);if(!t.ok)throw new Error(`Failed to fetch local media ${o}: ${t.status}`);let n=Buffer.from(await t.arrayBuffer());if(n.byteLength>cT)throw new Error(`Local media too large for base64 (${(n.byteLength/1024/1024).toFixed(1)}MB). Use file upload API instead.`);return`data:${t.headers.get("content-type")||e||lT(o)};base64,${n.toString("base64")}`}function lT(o){let e=o.split("?")[0].split("#")[0],t=e.slice(e.lastIndexOf(".")).toLowerCase();return{".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".svg":"image/svg+xml",".bmp":"image/bmp",".avif":"image/avif",".heic":"image/heic",".mp4":"video/mp4",".webm":"video/webm",".mov":"video/quicktime",".mp3":"audio/mpeg",".wav":"audio/wav",".ogg":"audio/ogg",".aac":"audio/aac",".flac":"audio/flac",".m4a":"audio/mp4",".opus":"audio/opus",".pdf":"application/pdf"}[t]||"application/octet-stream"}var aT,cT,jn=N(()=>{"use strict";Au();aT=/^https?:\/\/(127\.0\.0\.1|localhost|0\.0\.0\.0|\[::1\])(:\d+)?/i;cT=20*1024*1024});function Pt(o){let e=Math.min(1e3*Math.pow(2,o-1),3e4),t=Math.random()*.25*e;return e+t}function Bt(o){return o!=null&&Ga.has(o)}function It(o,e){return new Promise((t,n)=>{if(e?.aborted){n(new Error("Request aborted"));return}let r=setTimeout(t,o);e&&e.addEventListener("abort",()=>{clearTimeout(r),n(new Error("Request aborted"))},{once:!0})})}function Wt(o){if(o&&typeof o=="object"){let e=o;if(typeof e.status=="number")return e.status;if(typeof e.statusCode=="number")return e.statusCode;if(e.response&&typeof e.response.status=="number")return e.response.status}return null}var Ga,At,Fn=N(()=>{"use strict";Ga=new Set([429,529,502,503,504]),At=9e4});function Nr(o){return o.toLowerCase().startsWith("gpt-5")}function $r(o){return o.toLowerCase().includes("5.4-nano")}function _o(o){return/^o[1-4](-|$)/.test(o.toLowerCase())}var Ha=N(()=>{"use strict"});function dT(o){switch(o){case"sensitive":return"content_filter";case"model_context_window_exceeded":return"length";case"network_error":return"error";default:return o}}async function uT(o,e,t,n){return o.some(s=>s.audioUrls?.some(z)||s.imageUrls?.some(z))?Promise.all(o.map(async s=>{if(s.role!=="user"&&s.role!=="tool")return s;let i={};if(s.role==="user"&&s.audioUrls?.some(z)&&(i.audioUrls=await Promise.all(s.audioUrls.map(a=>z(a)?Lr(a):Promise.resolve(a)))),s.imageUrls?.some(z)){if(!e||!t)throw new Error("FileUploadAdapter required for local image URLs. Configure OSS_ACCESS_KEY_ID/OSS_ACCESS_KEY_SECRET or QLOGICAGENT_HUB_URL.");i.imageUrls=await Promise.all(s.imageUrls.map(a=>z(a)?pt(a,{uploadAdapter:e,apiKey:t,signal:n}):Promise.resolve(a)))}return Object.keys(i).length>0?{...s,...i}:s})):o}function pT(o,e){return o.map(t=>{if(t.role==="user"){let n=t.imageUrls&&t.imageUrls.length>0&&!e.filterImageBlocks,r=t.videoUrls&&t.videoUrls.length>0,s=t.audioUrls&&t.audioUrls.length>0,i=t.fileIds&&t.fileIds.length>0;if(n||r||s||i){let c=[];if(t.content&&c.push({type:"text",text:t.content}),n){let l=t.imageUrls.length>1;for(let d=0;d<t.imageUrls.length;d++){let u=t.imageUrls[d];l&&c.push({type:"text",text:`[Image ${d+1}]`});let p={url:u};t.imageDetail&&(p.detail=t.imageDetail),c.push({type:"image_url",image_url:p})}}if(r)for(let l of t.videoUrls)c.push({type:"video_url",video_url:{url:l}});if(s)for(let l of t.audioUrls){let d=l,u=t.audioFormat??"mp3";if(l.startsWith("data:")){let p=/^data:audio\/([^;]+);base64,(.+)$/.exec(l);p&&(u=p[1]==="mpeg"?"mp3":p[1],d=p[2])}c.push({type:"input_audio",input_audio:{data:d,format:u}})}if(i)for(let l of t.fileIds){let d=l.mimeType||"";if(l.size!=null&&l.size>52428800){let p=`${(l.size/1048576).toFixed(1)}MB`;c.push({type:"text",text:`[Attached: ${l.id} (${d||"unknown"}, ${p})file too large for direct vision, use tools to process]`})}else if(e.supportsDocumentVision&&(d==="application/pdf"||l.id.endsWith(".pdf")))l.id.startsWith("http://")||l.id.startsWith("https://")?c.push({type:"text",text:`[Attached PDF: ${l.id}]`}):c.push({type:"file",file:{file_id:l.id}});else if(l.id.startsWith("http://")||l.id.startsWith("https://")){let p=d?`[Attached: ${l.id} (${d})]`:`[Attached: ${l.id}]`;c.push({type:"text",text:p})}else c.push({type:"file",file:{file_id:l.id}})}return{role:"user",content:c}}return{role:"user",content:t.content??""}}if(t.role==="assistant"){let n={role:"assistant"};return t.thinkingBlocks&&t.thinkingBlocks.length>0&&(n.reasoning_content=t.thinkingBlocks.map(r=>r.thinking).join("")),n.content=t.content??null,t.tool_calls&&t.tool_calls.length>0&&(n.tool_calls=t.tool_calls.map(r=>({id:r.id,type:r.type,function:{name:r.function.name,arguments:r.function.arguments}}))),n}if(t.role==="tool"){if(t.imageUrls&&t.imageUrls.length>0&&!e.filterImageBlocks){let n=[];t.content&&n.push({type:"text",text:t.content});for(let r of t.imageUrls)n.push({type:"image_url",image_url:{url:r}});return{role:"tool",content:n,tool_call_id:t.tool_call_id??""}}return{role:"tool",content:t.content??"",tool_call_id:t.tool_call_id??""}}return{role:t.role,content:t.content??""}})}var Bn,Va=N(()=>{"use strict";Un();jn();Fn();Ha();Bn=class{baseUrl;extraHeaders;timeoutMs;supportsStreamOptions;omitZeroTemperature;quirks;fileUploadAdapter;cumulativeReasoningLen=0;cumulativeContentLen=0;constructor(e){if(!e.baseUrl)throw new Error("OpenAIChatTransport: baseUrl is required (got empty or undefined)");this.baseUrl=e.baseUrl.replace(/\/+$/,""),this.extraHeaders=e.extraHeaders??{},this.timeoutMs=e.timeoutMs??18e4,this.supportsStreamOptions=e.supportsStreamOptions??!0,this.omitZeroTemperature=e.omitZeroTemperature??!1,this.quirks=e.quirks??{},this.fileUploadAdapter=e.fileUploadAdapter}async*stream(e,t,n){this.cumulativeReasoningLen=0,this.cumulativeContentLen=0;let r=e.prefixMessage&&this.quirks.supportsPrefixCompletion,s=/\/v\d+$/.test(this.baseUrl),i;r?i=`${this.baseUrl}/beta/v1/chat/completions`:s?i=`${this.baseUrl}/chat/completions`:i=`${this.baseUrl}/v1/chat/completions`;let a={model:e.model,messages:pT(await uT(e.messages,this.fileUploadAdapter,t,n),this.quirks),stream:!0};this.supportsStreamOptions&&(a.stream_options={include_usage:!0}),e.tools&&e.tools.length>0&&(a.tools=e.tools,e.toolChoice&&(a.tool_choice=e.toolChoice));let c=!e.disableBuiltinTools,l=!1;if(c&&this.quirks.builtinWebSearch&&a.tools){let f=a.tools;this.quirks.builtinCodeInterpreter?f.push({type:"web_search",web_search:{enable:!0,search_result:!0}}):(f.push({type:"builtin_function",function:{name:"$web_search"}}),l=!0)}c&&this.quirks.builtinCodeInterpreter&&a.tools&&a.tools.push({type:"code_interpreter",code_interpreter:{sandbox:"none"}}),this.quirks.supportsToolStream&&a.tools&&(a.tool_stream=!0);let d=this.quirks.useEffortInsteadOfBudget&&!!e.reasoning,u=e.model.startsWith("kimi-k2.6"),p=Nr(e.model);if(e.temperature!==void 0&&(this.omitZeroTemperature&&e.temperature===0||(p||!_o(e.model)&&!d&&!u)&&(a.temperature=e.temperature)),e.topP!==void 0&&(p||!_o(e.model)&&!d&&!u)&&(a.top_p=e.topP),e.maxTokens!==void 0&&(p||_o(e.model)||e.model.startsWith("kimi-k2")?a.max_completion_tokens=e.maxTokens:a.max_tokens=e.maxTokens),e.reasoning)if(p){let f=e.reasoning.effort==="minimal"?"none":e.reasoning.effort;$r(e.model)&&(f==="high"||f==="xhigh")&&(f="medium"),a.reasoning={effort:f}}else if(_o(e.model))a.reasoning_effort=e.reasoning.effort;else if(this.quirks.useEffortInsteadOfBudget){a.thinking={type:"enabled"};let f=this.quirks.maxReasoningEffort??"high",y=e.reasoning.effort??"high";a.reasoning_effort=y==="low"||y==="medium"?"high":f}else this.quirks.supportsThinkingParam?(l?a.thinking={type:"disabled"}:this.quirks.supportsToolStream?a.thinking={type:"enabled",clear_thinking:!1}:a.thinking={type:"enabled"},this.quirks.supportsReasoningEffort&&(a.reasoning_effort=e.reasoning.effort)):this.quirks.supportsReasoningEffort?a.reasoning_effort=e.reasoning.effort:a.reasoning=e.reasoning;else l?a.thinking={type:"disabled"}:this.quirks.supportsThinkingParam&&this.quirks.disableThinkingByDefault&&(a.thinking={type:"disabled"});e.structuredOutput&&(e.structuredOutput.mode==="json_object"?a.response_format={type:"json_object"}:e.structuredOutput.mode==="json_schema"&&(a.response_format={type:"json_schema",json_schema:{name:e.structuredOutput.name,strict:e.structuredOutput.strict??!0,schema:e.structuredOutput.schema}})),this.quirks.supportsReasoningSplit&&e.reasoning&&(a.reasoning_split=!0),e.prediction&&p&&(a.prediction=e.prediction),r&&e.prefixMessage&&a.messages.push({role:"assistant",content:e.prefixMessage,prefix:!0});let m={"Content-Type":"application/json",Authorization:`Bearer ${t}`,...this.extraHeaders},h=null;for(let f=0;f<=2;f++){if(n?.aborted)throw new Error("Request aborted");f>0&&h&&await It(Pt(f),n);try{yield*this.fetchAndStream(i,m,a,n);return}catch(y){h=y instanceof Error?y:new Error(String(y));let b=h.message.includes("Stream idle timeout");if(!Bt(Wt(h))&&!b||f===2)throw h}}}async*fetchAndStream(e,t,n,r){let s=AbortSignal.timeout(this.timeoutMs),i=r?AbortSignal.any([r,s]):s,a=await fetch(e,{method:"POST",headers:t,body:JSON.stringify(n),signal:i});if(!a.ok){let l=await a.text().catch(()=>""),d=new Error(`LLM API error ${a.status}: ${l.slice(0,500)}`);throw d.status=a.status,d}if(!a.body)throw new Error("LLM API returned no response body");let c=a.headers.get("content-type")??"";if(c.includes("application/json")&&!c.includes("text/event-stream")){yield*this.handleNonStreamingResponse(a);return}yield*this.parseSSEStreamWithWatchdog(a.body)}async*handleNonStreamingResponse(e){let t=await e.json();t.usage&&(yield{type:"usage",promptTokens:t.usage.prompt_tokens??0,completionTokens:t.usage.completion_tokens??0,reasoningTokens:t.usage.completion_tokens_details?.reasoning_tokens,cacheReadTokens:t.usage.prompt_tokens_details?.cached_tokens});for(let n of t.choices??[]){let r=n.message;if(r){if(r.reasoning_content&&(yield{type:"reasoning_delta",text:r.reasoning_content}),r.content&&(yield{type:"delta",text:r.content}),r.tool_calls)for(let s=0;s<r.tool_calls.length;s++){let i=r.tool_calls[s];yield{type:"tool_call_delta",index:s,id:i.id,name:i.function.name,arguments:i.function.arguments}}n.finish_reason&&(yield{type:"done",finishReason:n.finish_reason})}}}async*parseSSEStreamWithWatchdog(e){let t=new TextDecoder,n="",r=null,s=new AbortController,i=()=>{r&&clearTimeout(r),r=setTimeout(()=>{s.abort()},At)};try{i();let a=e.getReader();try{for(;;){let{done:c,value:l}=await a.read();if(c)break;if(s.signal.aborted)throw new Error("Stream idle timeout");i(),n+=t.decode(l,{stream:!0});let d;for(;(d=n.indexOf(`
|
|
16
16
|
`))!==-1;){let u=n.slice(0,d).trim();if(n=n.slice(d+1),!u||u.startsWith(":")||!u.startsWith("data: "))continue;let p=u.slice(6);if(p==="[DONE]")return;let m;try{m=JSON.parse(p)}catch{continue}yield*this.processChunk(m)}}}finally{a.releaseLock()}}finally{r&&clearTimeout(r)}}*processChunk(e){if(e.usage&&(yield{type:"usage",promptTokens:e.usage.prompt_tokens??0,completionTokens:e.usage.completion_tokens??0,reasoningTokens:e.usage.completion_tokens_details?.reasoning_tokens,cacheReadTokens:e.usage.prompt_tokens_details?.cached_tokens}),!(!e.choices||e.choices.length===0))for(let t of e.choices){let n=t.delta;if(n){if(n.reasoning_content&&(yield{type:"reasoning_delta",text:n.reasoning_content}),n.reasoning_details){let r=n.reasoning_details.slice(this.cumulativeReasoningLen);r&&(this.cumulativeReasoningLen=n.reasoning_details.length,yield{type:"reasoning_delta",text:r})}if(n.content)if(this.quirks.supportsReasoningSplit){let r=n.content.slice(this.cumulativeContentLen);r&&(this.cumulativeContentLen=n.content.length,yield{type:"delta",text:r})}else yield{type:"delta",text:n.content};if(n.tool_calls)for(let r of n.tool_calls)yield{type:"tool_call_delta",index:r.index,id:r.id,name:r.function?.name,arguments:r.function?.arguments??""};t.finish_reason&&(yield{type:"done",finishReason:dT(t.finish_reason)})}}}async*complete(e,t,n){if(!this.quirks.supportsPrefixCompletion)throw new Error("FIM completion is not supported by this provider");let s=/\/v\d+$/.test(this.baseUrl)?`${this.baseUrl}/beta/completions`:`${this.baseUrl}/beta/v1/completions`,i={model:e.model,prompt:e.prompt,stream:!0,max_tokens:e.maxTokens??4096};e.suffix&&(i.suffix=e.suffix),e.temperature!==void 0&&(i.temperature=e.temperature),e.stop&&(i.stop=e.stop);let a={"Content-Type":"application/json",Authorization:`Bearer ${t}`,...this.extraHeaders},c=AbortSignal.timeout(this.timeoutMs),l=n?AbortSignal.any([n,c]):c,d=await fetch(s,{method:"POST",headers:a,body:JSON.stringify(i),signal:l});if(!d.ok){let h=await d.text().catch(()=>"");throw new Error(`FIM API error ${d.status}: ${h.slice(0,500)}`)}if(!d.body)throw new Error("FIM API returned no response body");let u=new TextDecoder,p="",m=d.body.getReader();try{for(;;){let{done:h,value:f}=await m.read();if(h)break;p+=u.decode(f,{stream:!0});let y;for(;(y=p.indexOf(`
|
|
17
17
|
`))!==-1;){let b=p.slice(0,y).trim();if(p=p.slice(y+1),!b||b.startsWith(":")||!b.startsWith("data: "))continue;let k=b.slice(6);if(k==="[DONE]")return;let x;try{x=JSON.parse(k)}catch{continue}for(let P of x.choices??[])P.text&&(yield{type:"delta",text:P.text}),P.finish_reason&&(yield{type:"done",finishReason:P.finish_reason})}}}finally{m.releaseLock()}}async uploadFile(e,t,n,r,s){let a=/\/v\d+$/.test(this.baseUrl)?`${this.baseUrl}/files`:`${this.baseUrl}/v1/files`,c=new FormData;c.append("file",e,t),c.append("purpose",n);let l=await fetch(a,{method:"POST",headers:{Authorization:`Bearer ${r}`,...this.extraHeaders},body:c,signal:s??AbortSignal.timeout(this.timeoutMs)});if(!l.ok){let u=await l.text().catch(()=>"");throw new Error(`File upload error ${l.status}: ${u}`)}let d=await l.json();return{fileId:d.id??"",filename:d.filename??t,bytes:d.bytes??0}}async getFileInfo(e,t,n){let s=/\/v\d+$/.test(this.baseUrl)?`${this.baseUrl}/files/${encodeURIComponent(e)}`:`${this.baseUrl}/v1/files/${encodeURIComponent(e)}`,i=await fetch(s,{method:"GET",headers:{Authorization:`Bearer ${t}`,...this.extraHeaders},signal:n??AbortSignal.timeout(this.timeoutMs)});if(!i.ok){let c=await i.text().catch(()=>"");throw new Error(`File info error ${i.status}: ${c}`)}let a=await i.json();return{id:a.id??e,filename:a.filename??"",bytes:a.bytes??0,status:a.status??"unknown"}}}});async function mT(o,e,t,n){return o.some(s=>s.audioUrls?.some(z)||s.imageUrls?.some(z))?Promise.all(o.map(async s=>{if(s.role!=="user"&&s.role!=="tool")return s;let i={};if(s.role==="user"&&s.audioUrls?.some(z)&&(i.audioUrls=await Promise.all(s.audioUrls.map(a=>z(a)?Lr(a):Promise.resolve(a)))),s.imageUrls?.some(z)){if(!e||!t)throw new Error("FileUploadAdapter required for local image URLs. Configure OSS_ACCESS_KEY_ID/OSS_ACCESS_KEY_SECRET or QLOGICAGENT_HUB_URL.");i.imageUrls=await Promise.all(s.imageUrls.map(a=>z(a)?pt(a,{uploadAdapter:e,apiKey:t,signal:n}):Promise.resolve(a)))}return Object.keys(i).length>0?{...s,...i}:s})):o}function fT(o,e={}){let t=[];for(let n of o){if(n.role==="system"){t.push({role:"developer",content:n.content??""});continue}if(n.role==="user"){let r=n.imageUrls&&n.imageUrls.length>0,s=n.videoUrls&&n.videoUrls.length>0,i=n.audioUrls&&n.audioUrls.length>0,a=n.fileIds&&n.fileIds.length>0;if(r||s||i||a){let l=[];if(r){let d=n.imageUrls.length>1;for(let u=0;u<n.imageUrls.length;u++){let p=n.imageUrls[u];d&&l.push({type:"input_text",text:`[Image ${u+1}]`});let m={type:"input_image",image_url:p};n.imageDetail&&(m.detail=n.imageDetail),l.push(m)}}if(s)for(let d of n.videoUrls)l.push({type:"input_video",video_url:d});if(i)for(let d of n.audioUrls){let u=d,p=n.audioFormat??"mp3";if(d.startsWith("data:")){let m=/^data:audio\/([^;]+);base64,(.+)$/.exec(d);m&&(p=m[1]==="mpeg"?"mp3":m[1],u=m[2])}l.push({type:"input_audio",data:u,format:p})}if(a)for(let d of n.fileIds){let u=d.mimeType||"";if(d.size!=null&&d.size>52428800){let m=`${(d.size/1048576).toFixed(1)}MB`;l.push({type:"input_text",text:`[Attached: ${d.id} (${u||"unknown"}, ${m}) \u2014 file too large for direct vision, use tools to process]`})}else if(e.supportsDocumentVision&&(u==="application/pdf"||d.id.endsWith(".pdf")))d.id.startsWith("http://")||d.id.startsWith("https://")?l.push({type:"input_text",text:`[Attached PDF: ${d.id}]`}):l.push({type:"input_file",file_id:d.id});else if(d.id.startsWith("http://")||d.id.startsWith("https://")){let m=u?`[Attached: ${d.id} (${u})]`:`[Attached: ${d.id}]`;l.push({type:"input_text",text:m})}else l.push({type:"input_file",file_id:d.id})}n.content&&l.push({type:"input_text",text:n.content}),t.push({role:"user",content:l})}else t.push({role:"user",content:n.content??""});continue}if(n.role==="assistant"){if(n.content&&t.push({role:"assistant",content:n.content}),n.tool_calls&&n.tool_calls.length>0)for(let r of n.tool_calls)t.push({type:"function_call",call_id:r.id,name:r.function.name,arguments:r.function.arguments});continue}if(n.role==="tool"){if(!n.tool_call_id)continue;if(n.imageUrls&&n.imageUrls.length>0){let r=[];n.content&&r.push({type:"input_text",text:n.content});for(let s of n.imageUrls)r.push({type:"input_image",image_url:s});t.push({type:"function_call_output",call_id:n.tool_call_id,output:r})}else t.push({type:"function_call_output",call_id:n.tool_call_id,output:n.content??""});continue}}return t}var Ur,Pu=N(()=>{"use strict";Un();jn();Fn();Ha();Ur=class{baseUrl;extraHeaders;timeoutMs;quirks;fileUploadAdapter;constructor(e){if(!e.baseUrl)throw new Error("OpenAIResponsesTransport: baseUrl is required");this.baseUrl=e.baseUrl.replace(/\/+$/,""),this.extraHeaders=e.extraHeaders??{},this.timeoutMs=e.timeoutMs??18e4,this.quirks=e.quirks??{},this.fileUploadAdapter=e.fileUploadAdapter}async*stream(e,t,n){let s=/\/v\d+$/.test(this.baseUrl)?`${this.baseUrl}/responses`:`${this.baseUrl}/v1/responses`,i=await this.buildRequestBody(e,t,n),a={"Content-Type":"application/json",Authorization:`Bearer ${t}`,...this.extraHeaders},c=null;for(let l=0;l<=2;l++){if(n?.aborted)throw new Error("Request aborted");l>0&&c&&await It(Pt(l),n);try{yield*this.fetchAndStream(s,a,i,n);return}catch(d){c=d instanceof Error?d:new Error(String(d));let u=c.message.includes("Stream idle timeout");if(!Bt(Wt(c))&&!u||l===2)throw c}}}async buildRequestBody(e,t,n){let r={model:e.model,input:fT(await mT(e.messages,this.fileUploadAdapter,t,n),this.quirks),stream:!0};if(e.conversationId?r.conversation=e.conversationId:e.previousResponseId&&(r.previous_response_id=e.previousResponseId),e.store!==void 0&&(r.store=e.store),e.instructions&&(r.instructions=e.instructions),e.structuredOutput&&(e.structuredOutput.mode==="json_object"?r.text={format:{type:"json_object"}}:r.text={format:{type:"json_schema",name:e.structuredOutput.name,strict:e.structuredOutput.strict??!0,schema:e.structuredOutput.schema}}),e.tools&&e.tools.length>0&&(r.tools=e.tools.map(s=>({type:"function",name:s.function.name,description:s.function.description,parameters:s.function.parameters,strict:!0}))),e.toolChoice!==void 0&&(typeof e.toolChoice=="string"?r.tool_choice=e.toolChoice:r.tool_choice={type:e.toolChoice.type,name:e.toolChoice.name}),e.temperature!==void 0&&(r.temperature=e.temperature),e.topP!==void 0&&(r.top_p=e.topP),e.maxTokens!==void 0&&(r.max_output_tokens=e.maxTokens),e.reasoning){let s=e.reasoning.effort==="minimal"?"none":e.reasoning.effort;$r(e.model)&&(s==="high"||s==="xhigh")&&(s="medium");let i={effort:s};i.summary="auto",i.generate_summary="auto",r.reasoning=i}if(e.prediction&&Nr(e.model)&&(r.prediction=e.prediction),r.truncation="auto",e.promptCacheKey&&(r.prompt_cache_key=e.promptCacheKey),e.promptCacheRetention&&(r.prompt_cache_retention=e.promptCacheRetention),e.serviceTier&&(r.service_tier=e.serviceTier),e.reasoning?.includeEncryptedReasoning&&(e.store===void 0&&(r.store=!1),r.include=["reasoning.encrypted_content"]),e.contextManagement&&(r.context_management=e.contextManagement.edits.map(s=>{let i={type:s.type};return s.type==="clear_thinking"&&s.keep!==void 0?i.keep=s.keep:s.type==="clear_tool_uses"&&(s.trigger&&(i.trigger=s.trigger),s.keep&&(i.keep=s.keep),s.excludeTools&&(i.exclude_tools=s.excludeTools),s.clearToolInput!==void 0&&(i.clear_tool_input=s.clearToolInput)),i})),!e.disableBuiltinTools){let s=r.tools??[],i=r.include??[];if(e.openaiBuiltinTools&&e.openaiBuiltinTools.length>0){for(let c of e.openaiBuiltinTools)s.push({...c});let a=new Set(e.openaiBuiltinTools.map(c=>c.type));a.has("web_search_preview")&&i.push("web_search_call.action.sources"),a.has("file_search")&&i.push("file_search_call.results"),a.has("code_interpreter")&&i.push("code_interpreter_call.outputs"),a.has("computer_use_preview")&&i.push("computer_call_output.output.image_url")}else this.quirks.builtinWebSearch&&(s.push({type:"web_search_preview"}),i.push("web_search_call.action.sources")),this.quirks.builtinCodeInterpreter&&(s.push({type:"code_interpreter"}),i.push("code_interpreter_call.outputs")),this.quirks.builtinFileSearch&&(s.push({type:"file_search"}),i.push("file_search_call.results"));s.length>0&&(r.tools=s),i.length>0&&(r.include=i)}if(e.maxToolCalls!==void 0&&(r.max_tool_calls=e.maxToolCalls),e.parallelToolCalls!==void 0&&(r.parallel_tool_calls=e.parallelToolCalls),e.textVerbosity){let s=r.text??{};s.verbosity=e.textVerbosity,r.text=s}return r}async*fetchAndStream(e,t,n,r){let s=AbortSignal.timeout(this.timeoutMs),i=r?AbortSignal.any([r,s]):s,a=await fetch(e,{method:"POST",headers:t,body:JSON.stringify(n),signal:i});if(!a.ok){let l=await a.text().catch(()=>""),d=new Error(`OpenAI Responses API error ${a.status}: ${l.slice(0,500)}`);throw d.status=a.status,d}if(!a.body)throw new Error("OpenAI Responses API returned no response body");let c=a.headers.get("content-type")??"";if(c.includes("application/json")&&!c.includes("text/event-stream")){yield*this.handleNonStreamingResponse(a);return}yield*this.parseSSEStream(a.body)}async*handleNonStreamingResponse(e){let t=await e.json();if(t.id&&(yield{type:"response_id",id:t.id}),t.usage&&(yield{type:"usage",promptTokens:t.usage.input_tokens??0,completionTokens:t.usage.output_tokens??0,reasoningTokens:t.usage.output_tokens_details?.reasoning_tokens,cacheReadTokens:t.usage.input_tokens_details?.cached_tokens}),t.output)for(let n of t.output){if(n.type==="message"&&n.content)for(let r of n.content)r.type==="output_text"&&(yield{type:"delta",text:r.text??""},r.annotations&&r.annotations.length>0&&(yield{type:"annotations",annotations:r.annotations.map(s=>({...s,type:s.type??"url_citation",url:s.url,title:s.title}))}));if(n.type==="reasoning"&&n.summary)for(let r of n.summary)r.type==="summary_text"&&(yield{type:"reasoning_delta",text:r.text??""});n.type==="function_call"&&(yield{type:"tool_call_delta",index:0,id:n.call_id,name:n.name,arguments:n.arguments??""})}yield{type:"done",finishReason:t.status==="completed"?"stop":t.status??"stop"}}async*parseSSEStream(e){let t=new TextDecoder,n="",r="",s=null,i=new AbortController,a=0,c=new Map,l=()=>{s&&clearTimeout(s),s=setTimeout(()=>{i.abort()},At)};try{l();let d=e.getReader();try{for(;;){let{done:u,value:p}=await d.read();if(u)break;if(i.signal.aborted)throw new Error("Stream idle timeout");l(),n+=t.decode(p,{stream:!0});let m;for(;(m=n.indexOf(`
|
|
18
18
|
`))!==-1;){let h=n.slice(0,m).trim();if(n=n.slice(m+1),!h){r="";continue}if(!h.startsWith(":")){if(h.startsWith("event:")){r=h.slice(6).trim();continue}if(h.startsWith("data:")){let f=h.slice(5).trim();if(f==="[DONE]")return;let y;try{y=JSON.parse(f)}catch{continue}yield*this.processEvent(r,y,c,()=>a++)}}}}}finally{d.releaseLock()}}finally{s&&clearTimeout(s)}}*processEvent(e,t,n,r){switch(e){case"response.output_text.delta":{let s=t.delta;s&&(yield{type:"delta",text:s});break}case"response.reasoning_summary_text.delta":{let s=t.delta;s&&(yield{type:"reasoning_delta",text:s});break}case"response.function_call_arguments.delta":{let s=t.delta,i=t.call_id,a=t.name;if(s!==void 0&&i){let c=n.get(i);c===void 0&&(c=r(),n.set(i,c)),yield{type:"tool_call_delta",index:c,id:i,name:a,arguments:s}}break}case"response.output_item.added":{let s=t.item;if(s&&s.type==="function_call"){let i=s.call_id,a=s.name;if(i&&!n.has(i)){let c=r();n.set(i,c),yield{type:"tool_call_delta",index:c,id:i,name:a,arguments:""}}}break}case"response.function_call_arguments.done":break;case"response.content_part.done":{let s=t.part;if(s?.type==="output_text"){let i=s.annotations;i&&i.length>0&&(yield{type:"annotations",annotations:i.map(a=>({type:a.type??"url_citation",url:a.url,title:a.title,...a}))})}break}case"response.output_item.done":{let s=t.item;if(s?.type==="message"){let i=s.content;if(i)for(let a of i){let c=a.annotations;c&&c.length>0&&(yield{type:"annotations",annotations:c.map(l=>({type:l.type??"url_citation",url:l.url,title:l.title,...l}))})}}break}case"response.completed":{let s=t.response;if(s){let i=s.id;i&&(yield{type:"response_id",id:i});let a=s.usage;if(a){let l=a.input_tokens_details,d=a.output_tokens_details;yield{type:"usage",promptTokens:a.input_tokens??0,completionTokens:a.output_tokens??0,reasoningTokens:d?.reasoning_tokens,cacheReadTokens:l?.cached_tokens}}yield{type:"done",finishReason:s.status==="incomplete"?"tool_calls":"stop"}}else yield{type:"done",finishReason:"stop"};break}case"response.failed":{yield{type:"error",message:t.response?.error?.message??"Unknown error"},yield{type:"done",finishReason:"error"};break}default:{e.startsWith("response.web_search_call")&&(yield{type:"builtin_tool_status",toolType:"web_search",event:e,data:t});break}}}}});function xT(o){let e=o.toLowerCase();return e.includes("opus-4-6")||e.includes("opus-4-7")||e.includes("sonnet-4-6")}function RT(o,e,t){let n=[],r=o.toLowerCase();if(!r.startsWith("claude")){let c=process.env.ANTHROPIC_BETAS;if(c)for(let l of c.split(",").map(d=>d.trim()).filter(Boolean))n.push(l);return n}(r.includes("opus-4-6")||r.includes("opus-4-7")||r.includes("sonnet-4-6"))&&n.push(vT),n.push(wT),e&&!r.includes("haiku")&&n.push(kT),t&&n.push(ST),n.push(TT);let a=process.env.ANTHROPIC_BETAS;if(a)for(let c of a.split(",").map(l=>l.trim()).filter(Boolean))n.includes(c)||n.push(c);return n}function Iu(o,e){e.input_tokens>0&&(o.inputTokens=e.input_tokens),o.outputTokens=e.output_tokens??o.outputTokens,e.cache_read_input_tokens>0&&(o.cacheReadTokens=e.cache_read_input_tokens),e.cache_creation_input_tokens>0&&(o.cacheCreationTokens=e.cache_creation_input_tokens),e.reasoning_input_tokens>0&&(o.reasoningTokens=e.reasoning_input_tokens)}function Eu(o){switch(o){case"end_turn":case"stop_sequence":return"stop";case"tool_use":return"tool_calls";case"max_tokens":return"length";default:return o}}function _T(o){return!/haiku/i.test(o)}function AT(o,e){if(e&&e>16384)switch(o){case"high":return Math.min(e-1,Math.max(16e3,Math.floor(e*.5)));case"medium":return Math.min(e-1,Math.max(8e3,Math.floor(e*.25)));case"low":return Math.min(e-1,4e3);default:return Ka.high}return Ka[o]??Ka.high}function PT(o,e){if(o)return e?[{type:"text",text:o,cache_control:{type:"ephemeral"}}]:o}function IT(o){let e=[],t=new Set;for(let n=0;n<o.length;n++){let r=o[n];if(r.role==="assistant"&&r.tool_calls&&r.tool_calls.length>0){let s=r.tool_calls.filter(d=>t.has(d.id)?!1:(t.add(d.id),!0)),i=new Set(s.map(d=>d.id)),a=new Set,c=o.slice(n+1);for(let d of c){if(d.role!=="tool")break;d.tool_call_id&&a.add(d.tool_call_id)}s.length!==r.tool_calls.length?e.push({...r,tool_calls:s}):e.push(r);let l=[...i].filter(d=>!a.has(d));for(let d of l){let u=s.find(p=>p.id===d);e.push({role:"tool",tool_call_id:d,name:u?.function.name,content:"[Tool execution failed; output not available during conversation recovery]"})}}else r.role==="tool"?t.has(r.tool_call_id??"")&&e.push(r):e.push(r)}return e}async function ET(o,e,t,n){return o.some(s=>s.imageUrls?.some(z)||s.fileIds?.some(i=>z(i.id)))?Promise.all(o.map(async s=>{if(s.role!=="user"&&s.role!=="tool")return s;let i={};if(s.imageUrls?.some(z)){if(!e||!t)throw new Error("FileUploadAdapter required for local image URLs. Configure OSS_ACCESS_KEY_ID/OSS_ACCESS_KEY_SECRET or QLOGICAGENT_HUB_URL.");i.imageUrls=await Promise.all(s.imageUrls.map(a=>z(a)?pt(a,{uploadAdapter:e,apiKey:t,signal:n}):Promise.resolve(a)))}if(s.role==="user"&&s.fileIds?.some(a=>z(a.id))){if(!e||!t)throw new Error("FileUploadAdapter required for local file URLs. Configure OSS_ACCESS_KEY_ID/OSS_ACCESS_KEY_SECRET or QLOGICAGENT_HUB_URL.");i.fileIds=await Promise.all(s.fileIds.map(async a=>{if(!z(a.id))return a;let c=await pt(a.id,{uploadAdapter:e,apiKey:t,signal:n});return{...a,id:c}}))}return Object.keys(i).length>0?{...s,...i}:s})):o}function CT(o,e={},t){let n,r=[];for(let s of o){if(s.role==="system"){n=n?`${n}
|
|
@@ -803,7 +803,7 @@ Content-Disposition: form-data; name="prompt"\r
|
|
|
803
803
|
\r
|
|
804
804
|
\u8BF7\u7528${e.language==="zh"?"\u4E2D\u6587":"\u82F1\u6587"}\u8F6C\u5F55`),l.push(`--${c}--`);let d=l.join(`\r
|
|
805
805
|
`)+`\r
|
|
806
|
-
`,u=await fetch(i,{method:"POST",headers:{Authorization:`Bearer ${r}`,"Content-Type":`multipart/form-data; boundary=${c}`},body:d});if(!u.ok){let m=await u.text();a.release({success:!1,errorCode:u.status}),o.id!==void 0&&this.sendResponse(o.id,void 0,{code:w.INTERNAL_ERROR,message:`STT API error (${u.status}): ${m.slice(0,200)}`});return}let p=await u.json();a.release({success:!0}),o.id!==void 0&&this.sendResponse(o.id,{text:p.text??"",model:p.model})}catch(c){a.release({success:!1}),o.id!==void 0&&this.sendResponse(o.id,void 0,{code:w.INTERNAL_ERROR,message:c instanceof Error?c.message:String(c)})}}ft();var si="\u65E0\u6CD5\u8FDE\u63A5 llmrouter \u6A21\u578B\u76EE\u5F55",uo=class extends Error{constructor(e=si){super(e),this.name="LlmrouterCatalogUnavailableError"}};function $C(){let o=process.env.QLOGIC_LLMROUTER_BASE_URL?.trim().replace(/\/+$/,"");if(!o)throw new uo;return o}function UC(){let o={accept:"application/json"},e=process.env.QLOGIC_LLMROUTER_ACCESS_TOKEN?.trim();return e&&(o.authorization=`Bearer ${e}`),o}async function kk(o){let e=$C(),t;try{t=await fetch(`${e}${o}`,{method:"GET",headers:UC(),signal:AbortSignal.timeout(1e4)})}catch{throw new uo}if(!t.ok)throw new uo;let n=await t.json().catch(()=>null),r=Array.isArray(n)?n:GC(n)&&Array.isArray(n.data)?n.data:null;if(!r)throw new uo;return r}async function ii(){return kk("/ext/model-catalog/providers")}async function jC(){return kk("/ext/model-catalog/models")}function yd(o){return o.displayName??o.name??o.id}function ai(o){return o.baseUrl??o.base_url}async function bd(o){return(await ii()).find(t=>t.id===o)??null}async function kd(o){let e=await jC();o.migrateModelIds(FC(e));let t=e.map(BC).filter(n=>!!n);return o.replaceCatalogModels(t),t}function FC(o){let e=new Map;for(let t of o){let n=t.provider??t.owned_by,r=t.native_model_id??t.nativeModelId??t.id;if(!n||!r)continue;let s=`${n}:${r}`;for(let i of[t.public_model,t.publicModel,t.id])!i||i===r||e.set(`${n}:${i}`,s)}return e}function BC(o){let e=o.provider??o.owned_by,t=o.native_model_id??o.nativeModelId??o.id;return!e||!t?null:{id:`${e}:${t}`,provider:e,model:t,displayName:o.display_name??o.displayName??o.name??o.id,purposes:WC(o.purposes,o.category),baseUrl:o.baseUrl??o.base_url,enabled:!0,transport:o.provider_transport??o.providerTransport,contextWindow:o.context_window??o.contextWindow,maxOutput:o.max_output??o.maxOutput,streamRequired:o.stream_required??o.streamRequired,capabilities:o.capabilities,pricing:o.pricing}}function WC(o,e){let t=[...o??[],e].filter(s=>!!s),n=new Set(["textGeneration","smallModel","stt","tts","imageGeneration","imageUnderstanding","videoGeneration","videoUnderstanding","threeDGeneration","embedding","voiceClone","musicGeneration","realtimeAudio","realtimeVideo"]),r=t.filter(s=>n.has(s));return[...new Set(r.length?r:["textGeneration"])]}function GC(o){return!!o&&typeof o=="object"&&!Array.isArray(o)}function HC(o){return o.length<=8?"****":`${o.slice(0,3)}***${o.slice(-4)}`}function lt(o,e,t,n=w.INTERNAL_ERROR){if(e.id!==void 0){if(typeof o.sendError=="function"){o.sendError(e.id,n,t);return}o.sendResponse(e.id,void 0,{code:n,message:t})}}function ci(o,e){lt(o,e,si)}function VC(o){let e={};for(let t of o)for(let n of t.purposes)e[n]??=[],e[n].push(t);return e}async function vd(){let o=J(),e=await kd(o);return o.save(),e}async function vk(o){try{let e=(await ii()).map(t=>({id:t.id,displayName:yd(t),baseUrl:ai(t)??"",modelCount:t.models?.length??0}));o.id!==void 0&&this.sendResponse(o.id,{providers:e})}catch{ci(this,o)}}async function Sk(o){let e=o.params;if(!e?.providerId||!e?.key){lt(this,o,"Required: providerId (string), key (string)",w.INVALID_PARAMS);return}let{providerId:t,key:n,label:r}=e;try{let s=await bd(t);if(!s){lt(this,o,`Unknown provider: ${t}`,w.INVALID_PARAMS);return}let i=J();if(i.getProviderStatus(t)?.keys.some(l=>l.key===n)){o.id!==void 0&&this.sendResponse(o.id,{ok:!1,error:"\u8BE5 Key \u5DF2\u5B58\u5728\uFF0C\u65E0\u9700\u91CD\u590D\u6DFB\u52A0"});return}i.addProvider(t,{baseUrl:ai(s)});let c=i.addKey(t,n,{label:r});await vd();for(let l of Oo)if(!i.getBinding(l)){let d=i.listModels({purpose:l,provider:t,enabledOnly:!0});d.length>0&&i.setBinding(l,d[0].id)}i.setKeyHealth(c,"healthy"),i.save(),o.id!==void 0&&this.sendResponse(o.id,{ok:!0,keyId:c,providerId:t})}catch(s){let i=s instanceof Error?s.message:si;lt(this,o,i)}}function Tk(o){let e=o.params;if(!e?.keyId){lt(this,o,"Required: keyId (string)",w.INVALID_PARAMS);return}let t=J();t.removeKey(e.keyId),t.save(),o.id!==void 0&&this.sendResponse(o.id,{ok:!0})}function wk(o){let e=o.params;if(!e?.keyId||typeof e.enabled!="boolean"){lt(this,o,"Required: keyId (string), enabled (boolean)",w.INVALID_PARAMS);return}let t=J();t.updateKey(e.keyId,{enabled:e.enabled}),t.save(),o.id!==void 0&&this.sendResponse(o.id,{ok:!0})}function xk(o){let e=o.params;if(!e?.modelId||typeof e.enabled!="boolean"){lt(this,o,"Required: modelId (string), enabled (boolean)",w.INVALID_PARAMS);return}let t=J();e.enabled?t.enableModel(e.modelId):t.disableModel(e.modelId),t.save(),o.id!==void 0&&this.sendResponse(o.id,{ok:!0})}async function Rk(o){let e=o.params;try{await vd();let n=J().listModels({purpose:e?.purpose,provider:e?.provider});o.id!==void 0&&this.sendResponse(o.id,{models:n,grouped:VC(n)})}catch{ci(this,o)}}function _k(o){let e=o.params;if(!e?.purpose||!e?.modelId){lt(this,o,"Required: purpose (string), modelId (string)",w.INVALID_PARAMS);return}try{let t=J();t.setBinding(e.purpose,e.modelId),t.save(),o.id!==void 0&&this.sendResponse(o.id,{ok:!0})}catch(t){lt(this,o,t instanceof Error?t.message:String(t),w.INVALID_PARAMS)}}function Ak(o){let e=o.params;if(!e?.purpose){lt(this,o,"Required: purpose (string)",w.INVALID_PARAMS);return}let t=J(),n=t.getBinding(e.purpose);o.id!==void 0&&this.sendResponse(o.id,{model:n?{id:n.id,provider:n.provider,model:n.model,displayName:n.displayName,purposes:n.purposes,enabled:n.enabled}:null,available:t.isAvailable(e.purpose)})}async function Pk(o){try{let e=await ii(),t=new Map(e.map(a=>[a.id,yd(a)]));await vd();let n=J(),r=n.getAllProviderStatus().map(a=>({providerId:a.providerId,displayName:t.get(a.providerId)??a.providerId,baseUrl:a.baseUrl,keyCount:a.keys.length,healthyKeys:a.keys.filter(c=>c.healthStatus==="healthy"&&c.enabled).length,totalKeys:a.keys.length,keys:a.keys.map(c=>({id:c.id,label:c.label,maskedKey:HC(c.key),enabled:c.enabled,health:c.healthStatus}))})),s=n.getAllBindings(),i={};for(let a of Oo){let c=s[a];i[a]={bound:!!c,modelId:c?.id,modelName:c?.displayName,available:n.isAvailable(a)}}o.id!==void 0&&this.sendResponse(o.id,{providers:r,purposes:i})}catch{ci(this,o)}}async function Ik(o){try{let e=J();e.load(),await kd(e),e.save(),o.id!==void 0&&this.sendResponse(o.id,{ok:!0,catalogRefreshed:!0})}catch{ci(this,o)}}async function Ek(o){let e=o.params;if(!e?.providerId||!e?.apiKey){lt(this,o,"providerId and apiKey required",w.INVALID_PARAMS);return}try{let t=await bd(e.providerId),n=e.baseUrl||(t?ai(t):void 0);if(!n){lt(this,o,`Unknown provider: ${e.providerId}`,w.INVALID_PARAMS);return}let r=`${n.replace(/\/$/,"")}/models`,s=await fetch(r,{method:"GET",headers:{Authorization:`Bearer ${e.apiKey}`},signal:AbortSignal.timeout(1e4)});if(s.ok){o.id!==void 0&&this.sendResponse(o.id,{valid:!0,status:s.status});return}let i=await s.text().catch(()=>"");o.id!==void 0&&this.sendResponse(o.id,{valid:!1,status:s.status,error:i.slice(0,500)})}catch(t){let n=t instanceof Error?t.message:String(t);o.id!==void 0&&this.sendResponse(o.id,{valid:!1,status:0,error:n})}}dr();qs();Zl();Ys();Xs();async function Ck(o){let e=this.getActiveProjectRoot(),t=new Ut(e),n=t.load();if(n){this.sendNotification("pet.soul_ready",{name:n.name,species:n.species,personality:n.personality,catchphrase:n.catchphrase,stats:n.stats,rarity:n.rarity,breed:n.breed,breedColors:n.breedColors}),o.id!==void 0&&this.sendResponse(o.id,{ok:!0,soul:n});return}let r=this.deviceId??"default-user";try{let s=this.createPetSoulGenerator?.(),i=await t.hatch(r,s);this.sendNotification("pet.soul_ready",{name:i.name,species:i.species,personality:i.personality,catchphrase:i.catchphrase,stats:i.stats,rarity:i.rarity,breed:i.breed,breedColors:i.breedColors}),this.sendNotification("pet.growth",{level:i.level,experience:i.experience,abilities:Ve.getUnlockedAbilities(i.level).map(a=>a.name)}),o.id!==void 0&&this.sendResponse(o.id,{ok:!0,soul:i})}catch(s){o.id!==void 0&&this.sendResponse(o.id,void 0,{code:w.INTERNAL_ERROR,message:s.message??"Failed to hatch pet"})}}async function Mk(o){let t=o.params?.action??"pat",n=this.getActiveProjectRoot(),r=new Ut(n),s=r.load();if(!s){o.id!==void 0&&this.sendResponse(o.id,void 0,{code:w.INVALID_PARAMS,message:"Pet not hatched yet"});return}let i=Ve.xpForEvent(`interact.${t}`),{newLevel:a,newXp:c,events:l,statBoosts:d}=Ve.processXpGain(s,i);s.level=a,s.experience=c;for(let[b,k]of Object.entries(d)){let x=b;s.stats[x]=Math.min(10,s.stats[x]+(k??0))}r.updateSoul(s),this.sendNotification("pet.state",{state:"happy"});let u=Ve.getUnlockedAbilities(a).map(b=>b.name),p=Ve.getNextAbility(a);this.sendNotification("pet.growth",{level:a,experience:c,xpNeeded:Ve.xpForLevel(a),abilities:u,nextAbility:p?{name:p.name,level:p.unlockedAtLevel}:void 0});for(let b of l)b.type==="molt"?this.sendNotification("pet.reaction",{text:`\u2728 \u8131\u58F3\u4E86\uFF01\u7B2C ${b.moltStage} \u6B21\u8715\u53D8`,style:"excited"}):b.type==="ability_unlock"&&b.ability&&this.sendNotification("pet.reaction",{text:`\u{1F389} \u89E3\u9501\u65B0\u80FD\u529B\uFF1A${b.ability.name}`,style:"excited"});let m=null,h="excited";try{let b=[],k=this.getActiveProjectRoot?.()??"";if(k){let $=k.split(/[\\/]/).pop()??k;b.push(`\u7528\u6237\u6B63\u5728\u9879\u76EE\u300C${$}\u300D\u4E2D\u5DE5\u4F5C`)}if(this.sessionState){let $=this.sessionState.turnCount??0;$>0&&b.push(`\u672C\u6B21\u4F1A\u8BDD\u5DF2\u8FDB\u884C\u4E86 ${$} \u8F6E\u5BF9\u8BDD`)}if(this.memoryProvider&&this.memoryUserId)try{let $=this.memoryProvider.getActivitySummary(this.memoryUserId,7);if($?.highlights?.length){let W=$.highlights.slice(0,3).map(S=>S.text);b.push(`\u7528\u6237\u8FD1\u671F\u8BB0\u5FC6\u4EAE\u70B9: ${W.join("\uFF1B")}`)}}catch{}let x=new Date().getHours(),P=x<6?"\u6DF1\u591C":x<9?"\u65E9\u6668":x<12?"\u4E0A\u5348":x<14?"\u4E2D\u5348":x<18?"\u4E0B\u5348":x<22?"\u665A\u4E0A":"\u6DF1\u591C";b.push(`\u5F53\u524D\u65F6\u6BB5: ${P}`);let I=t==="pat"?"\u7528\u6237\u6478\u4E86\u6478\u4F60":t==="feed"?"\u7528\u6237\u5582\u4E86\u4F60\u4E1C\u897F":`\u7528\u6237\u5BF9\u4F60\u505A\u4E86\u300C${t}\u300D`;b.push(I);let O=b.join("\u3002");if(this.createSmallLLMCall){let $=this.createSmallLLMCall();if($){let W=await Vs({turnSummary:O,soul:s},$);W&&(m=W.text,h=W.style)}}}catch{}if(!m){let b=Hs("session.created");m=b?.text??null,h=b?.style??"excited"}let f=[],y=new Date().getHours();y>=22||y<6?f.push({label:"\u5E2E\u6211\u6574\u7406\u4ECA\u5929\u7684\u8FDB\u5EA6",action:"summarize-today"}):this.sessionState?.turnCount&&this.sessionState.turnCount>5&&f.push({label:"\u7EE7\u7EED\u521A\u624D\u7684\u5BF9\u8BDD",action:"resume-session"}),t==="click"&&f.push({label:"\u6709\u4EC0\u4E48\u80FD\u5E2E\u4F60\u7684\uFF1F",action:"start-chat"}),m&&this.sendNotification("pet.reaction",{text:m,style:h,actions:f.length>0?f:void 0}),o.id!==void 0&&this.sendResponse(o.id,{ok:!0,action:t,level:a,experience:c,events:l.map(b=>({type:b.type,level:b.level})),reaction:m?{text:m,style:h,actions:f.length>0?f:void 0}:null})}async function Ok(o){let e=this.getActiveProjectRoot(),n=new Ut(e).load();if(o.id!==void 0&&this.sendResponse(o.id,{ok:!0,soul:n??null}),n){this.sendNotification("pet.soul_ready",{name:n.name,species:n.species,personality:n.personality,catchphrase:n.catchphrase,stats:n.stats,rarity:n.rarity,breed:n.breed,breedColors:n.breedColors});let r=Ve.getUnlockedAbilities(n.level).map(i=>i.name),s=Ve.getNextAbility(n.level);this.sendNotification("pet.growth",{level:n.level,experience:n.experience,xpNeeded:Ve.xpForLevel(n.level),abilities:r,nextAbility:s?{name:s.name,level:s.unlockedAtLevel}:void 0})}}async function Dk(o){let e=o.params;if(!e?.description&&!e?.imageBase64){o.id!==void 0&&this.sendResponse(o.id,void 0,{code:w.INVALID_PARAMS,message:"Provide description or imageBase64"});return}this.sendNotification("pet.state",{state:"building"}),this.sendNotification("pet.reaction",{text:"\u6B63\u5728\u5B75\u5316\u4F60\u7684\u4E13\u5C5E\u5BA0\u7269...",style:"thinking"});try{let t=e.description?.slice(0,10)??"\u81EA\u5B9A\u4E49\u5BA0\u7269",n=e.description??"";e.imageBase64&&(n=await this.forgeAnalyzeImage(e.imageBase64,e.description),this.sendNotification("pet.reaction",{text:"\u5206\u6790\u5B8C\u6210\uFF0C\u6B63\u5728\u751F\u6210\u9AA8\u67B6...",style:"thinking"}));let r=await this.forgeGenerateSkeleton(n),s=Zt(r),i=io(s),a=0;for(;i.length>0&&a<2;){a++,this.sendNotification("pet.reaction",{text:`\u9AA8\u67B6\u7F3A\u5C11 ${i.join("\u3001")}\uFF0C\u91CD\u65B0\u751F\u6210 (${a}/${2})...`,style:"thinking",duration:3e3});let m=`\u4E0A\u6B21\u751F\u6210\u7F3A\u5C11\u4EE5\u4E0B\u90E8\u4F4D: ${i.join(", ")}\u3002\u8BF7\u786E\u4FDD\u6240\u6709 id \u5C5E\u6027\u90FD\u5B58\u5728\u3002`;r=await this.forgeGenerateSkeleton(n+`
|
|
806
|
+
`,u=await fetch(i,{method:"POST",headers:{Authorization:`Bearer ${r}`,"Content-Type":`multipart/form-data; boundary=${c}`},body:d});if(!u.ok){let m=await u.text();a.release({success:!1,errorCode:u.status}),o.id!==void 0&&this.sendResponse(o.id,void 0,{code:w.INTERNAL_ERROR,message:`STT API error (${u.status}): ${m.slice(0,200)}`});return}let p=await u.json();a.release({success:!0}),o.id!==void 0&&this.sendResponse(o.id,{text:p.text??"",model:p.model})}catch(c){a.release({success:!1}),o.id!==void 0&&this.sendResponse(o.id,void 0,{code:w.INTERNAL_ERROR,message:c instanceof Error?c.message:String(c)})}}ft();var si="\u65E0\u6CD5\u8FDE\u63A5 llmrouter \u6A21\u578B\u76EE\u5F55",uo=class extends Error{constructor(e=si){super(e),this.name="LlmrouterCatalogUnavailableError"}};function $C(){let o=process.env.QLOGIC_LLMROUTER_BASE_URL?.trim().replace(/\/+$/,"");if(!o)throw new uo;return o}function UC(){let o={accept:"application/json"},e=process.env.QLOGIC_LLMROUTER_ACCESS_TOKEN?.trim();return e&&(o.authorization=`Bearer ${e}`),o}async function kk(o){let e=$C(),t;try{t=await fetch(`${e}${o}`,{method:"GET",headers:UC(),signal:AbortSignal.timeout(1e4)})}catch{throw new uo}if(!t.ok)throw new uo;let n=await t.json().catch(()=>null),r=Array.isArray(n)?n:GC(n)&&Array.isArray(n.data)?n.data:null;if(!r)throw new uo;return r}async function ii(){return kk("/ext/model-catalog/providers")}async function jC(){return kk("/ext/model-catalog/models")}function yd(o){let e={zhipu:"Zhipu GLM","zhipu-openai":"Zhipu GLM OpenAI","zhipu-coding":"Zhipu GLM Coding",volcengine:"Doubao / Volcengine"};return e[o.id]?e[o.id]:o.displayName??o.name??o.id}function ai(o){return o.baseUrl??o.base_url}async function bd(o){return(await ii()).find(t=>t.id===o)??null}async function kd(o){let e=await jC();o.migrateModelIds(FC(e));let t=e.map(BC).filter(n=>!!n);return o.replaceCatalogModels(t),t}function FC(o){let e=new Map;for(let t of o){let n=t.provider??t.owned_by,r=t.native_model_id??t.nativeModelId??t.id;if(!n||!r)continue;let s=`${n}:${r}`;for(let i of[t.public_model,t.publicModel,t.id])!i||i===r||e.set(`${n}:${i}`,s)}return e}function BC(o){let e=o.provider??o.owned_by,t=o.native_model_id??o.nativeModelId??o.id;return!e||!t?null:{id:`${e}:${t}`,provider:e,model:t,displayName:o.display_name??o.displayName??o.name??o.id,purposes:WC(o.purposes,o.category),baseUrl:o.baseUrl??o.base_url,enabled:!0,transport:o.provider_transport??o.providerTransport,contextWindow:o.context_window??o.contextWindow,maxOutput:o.max_output??o.maxOutput,streamRequired:o.stream_required??o.streamRequired,capabilities:o.capabilities,pricing:o.pricing}}function WC(o,e){let t=[...o??[],e].filter(s=>!!s),n=new Set(["textGeneration","smallModel","stt","tts","imageGeneration","imageUnderstanding","videoGeneration","videoUnderstanding","threeDGeneration","embedding","voiceClone","musicGeneration","realtimeAudio","realtimeVideo"]),r=t.filter(s=>n.has(s));return[...new Set(r.length?r:["textGeneration"])]}function GC(o){return!!o&&typeof o=="object"&&!Array.isArray(o)}function HC(o){return o.length<=8?"****":`${o.slice(0,3)}***${o.slice(-4)}`}function lt(o,e,t,n=w.INTERNAL_ERROR){if(e.id!==void 0){if(typeof o.sendError=="function"){o.sendError(e.id,n,t);return}o.sendResponse(e.id,void 0,{code:n,message:t})}}function ci(o,e){lt(o,e,si)}function VC(o){let e={};for(let t of o)for(let n of t.purposes)e[n]??=[],e[n].push(t);return e}async function vd(){let o=J(),e=await kd(o);return o.save(),e}async function vk(o){try{let e=(await ii()).map(t=>({id:t.id,displayName:yd(t),baseUrl:ai(t)??"",modelCount:t.models?.length??0}));o.id!==void 0&&this.sendResponse(o.id,{providers:e})}catch{ci(this,o)}}async function Sk(o){let e=o.params;if(!e?.providerId||!e?.key){lt(this,o,"Required: providerId (string), key (string)",w.INVALID_PARAMS);return}let{providerId:t,key:n,label:r}=e;try{let s=await bd(t);if(!s){lt(this,o,`Unknown provider: ${t}`,w.INVALID_PARAMS);return}let i=J();if(i.getProviderStatus(t)?.keys.some(l=>l.key===n)){o.id!==void 0&&this.sendResponse(o.id,{ok:!1,error:"\u8BE5 Key \u5DF2\u5B58\u5728\uFF0C\u65E0\u9700\u91CD\u590D\u6DFB\u52A0"});return}i.addProvider(t,{baseUrl:ai(s)});let c=i.addKey(t,n,{label:r});await vd();for(let l of Oo)if(!i.getBinding(l)){let d=i.listModels({purpose:l,provider:t,enabledOnly:!0});d.length>0&&i.setBinding(l,d[0].id)}i.setKeyHealth(c,"healthy"),i.save(),o.id!==void 0&&this.sendResponse(o.id,{ok:!0,keyId:c,providerId:t})}catch(s){let i=s instanceof Error?s.message:si;lt(this,o,i)}}function Tk(o){let e=o.params;if(!e?.keyId){lt(this,o,"Required: keyId (string)",w.INVALID_PARAMS);return}let t=J();t.removeKey(e.keyId),t.save(),o.id!==void 0&&this.sendResponse(o.id,{ok:!0})}function wk(o){let e=o.params;if(!e?.keyId||typeof e.enabled!="boolean"){lt(this,o,"Required: keyId (string), enabled (boolean)",w.INVALID_PARAMS);return}let t=J();t.updateKey(e.keyId,{enabled:e.enabled}),t.save(),o.id!==void 0&&this.sendResponse(o.id,{ok:!0})}function xk(o){let e=o.params;if(!e?.modelId||typeof e.enabled!="boolean"){lt(this,o,"Required: modelId (string), enabled (boolean)",w.INVALID_PARAMS);return}let t=J();e.enabled?t.enableModel(e.modelId):t.disableModel(e.modelId),t.save(),o.id!==void 0&&this.sendResponse(o.id,{ok:!0})}async function Rk(o){let e=o.params;try{await vd();let n=J().listModels({purpose:e?.purpose,provider:e?.provider});o.id!==void 0&&this.sendResponse(o.id,{models:n,grouped:VC(n)})}catch{ci(this,o)}}function _k(o){let e=o.params;if(!e?.purpose||!e?.modelId){lt(this,o,"Required: purpose (string), modelId (string)",w.INVALID_PARAMS);return}try{let t=J();t.setBinding(e.purpose,e.modelId),t.save(),o.id!==void 0&&this.sendResponse(o.id,{ok:!0})}catch(t){lt(this,o,t instanceof Error?t.message:String(t),w.INVALID_PARAMS)}}function Ak(o){let e=o.params;if(!e?.purpose){lt(this,o,"Required: purpose (string)",w.INVALID_PARAMS);return}let t=J(),n=t.getBinding(e.purpose);o.id!==void 0&&this.sendResponse(o.id,{model:n?{id:n.id,provider:n.provider,model:n.model,displayName:n.displayName,purposes:n.purposes,enabled:n.enabled}:null,available:t.isAvailable(e.purpose)})}async function Pk(o){try{let e=await ii(),t=new Map(e.map(a=>[a.id,yd(a)]));await vd();let n=J(),r=n.getAllProviderStatus().map(a=>({providerId:a.providerId,displayName:t.get(a.providerId)??a.providerId,baseUrl:a.baseUrl,keyCount:a.keys.length,healthyKeys:a.keys.filter(c=>c.healthStatus==="healthy"&&c.enabled).length,totalKeys:a.keys.length,keys:a.keys.map(c=>({id:c.id,label:c.label,maskedKey:HC(c.key),enabled:c.enabled,health:c.healthStatus}))})),s=n.getAllBindings(),i={};for(let a of Oo){let c=s[a];i[a]={bound:!!c,modelId:c?.id,modelName:c?.displayName,available:n.isAvailable(a)}}o.id!==void 0&&this.sendResponse(o.id,{providers:r,purposes:i})}catch{ci(this,o)}}async function Ik(o){try{let e=J();e.load(),await kd(e),e.save(),o.id!==void 0&&this.sendResponse(o.id,{ok:!0,catalogRefreshed:!0})}catch{ci(this,o)}}async function Ek(o){let e=o.params;if(!e?.providerId||!e?.apiKey){lt(this,o,"providerId and apiKey required",w.INVALID_PARAMS);return}try{let t=await bd(e.providerId),n=e.baseUrl||(t?ai(t):void 0);if(!n){lt(this,o,`Unknown provider: ${e.providerId}`,w.INVALID_PARAMS);return}let r=`${n.replace(/\/$/,"")}/models`,s=await fetch(r,{method:"GET",headers:{Authorization:`Bearer ${e.apiKey}`},signal:AbortSignal.timeout(1e4)});if(s.ok){o.id!==void 0&&this.sendResponse(o.id,{valid:!0,status:s.status});return}let i=await s.text().catch(()=>"");o.id!==void 0&&this.sendResponse(o.id,{valid:!1,status:s.status,error:i.slice(0,500)})}catch(t){let n=t instanceof Error?t.message:String(t);o.id!==void 0&&this.sendResponse(o.id,{valid:!1,status:0,error:n})}}dr();qs();Zl();Ys();Xs();async function Ck(o){let e=this.getActiveProjectRoot(),t=new Ut(e),n=t.load();if(n){this.sendNotification("pet.soul_ready",{name:n.name,species:n.species,personality:n.personality,catchphrase:n.catchphrase,stats:n.stats,rarity:n.rarity,breed:n.breed,breedColors:n.breedColors}),o.id!==void 0&&this.sendResponse(o.id,{ok:!0,soul:n});return}let r=this.deviceId??"default-user";try{let s=this.createPetSoulGenerator?.(),i=await t.hatch(r,s);this.sendNotification("pet.soul_ready",{name:i.name,species:i.species,personality:i.personality,catchphrase:i.catchphrase,stats:i.stats,rarity:i.rarity,breed:i.breed,breedColors:i.breedColors}),this.sendNotification("pet.growth",{level:i.level,experience:i.experience,abilities:Ve.getUnlockedAbilities(i.level).map(a=>a.name)}),o.id!==void 0&&this.sendResponse(o.id,{ok:!0,soul:i})}catch(s){o.id!==void 0&&this.sendResponse(o.id,void 0,{code:w.INTERNAL_ERROR,message:s.message??"Failed to hatch pet"})}}async function Mk(o){let t=o.params?.action??"pat",n=this.getActiveProjectRoot(),r=new Ut(n),s=r.load();if(!s){o.id!==void 0&&this.sendResponse(o.id,void 0,{code:w.INVALID_PARAMS,message:"Pet not hatched yet"});return}let i=Ve.xpForEvent(`interact.${t}`),{newLevel:a,newXp:c,events:l,statBoosts:d}=Ve.processXpGain(s,i);s.level=a,s.experience=c;for(let[b,k]of Object.entries(d)){let x=b;s.stats[x]=Math.min(10,s.stats[x]+(k??0))}r.updateSoul(s),this.sendNotification("pet.state",{state:"happy"});let u=Ve.getUnlockedAbilities(a).map(b=>b.name),p=Ve.getNextAbility(a);this.sendNotification("pet.growth",{level:a,experience:c,xpNeeded:Ve.xpForLevel(a),abilities:u,nextAbility:p?{name:p.name,level:p.unlockedAtLevel}:void 0});for(let b of l)b.type==="molt"?this.sendNotification("pet.reaction",{text:`\u2728 \u8131\u58F3\u4E86\uFF01\u7B2C ${b.moltStage} \u6B21\u8715\u53D8`,style:"excited"}):b.type==="ability_unlock"&&b.ability&&this.sendNotification("pet.reaction",{text:`\u{1F389} \u89E3\u9501\u65B0\u80FD\u529B\uFF1A${b.ability.name}`,style:"excited"});let m=null,h="excited";try{let b=[],k=this.getActiveProjectRoot?.()??"";if(k){let $=k.split(/[\\/]/).pop()??k;b.push(`\u7528\u6237\u6B63\u5728\u9879\u76EE\u300C${$}\u300D\u4E2D\u5DE5\u4F5C`)}if(this.sessionState){let $=this.sessionState.turnCount??0;$>0&&b.push(`\u672C\u6B21\u4F1A\u8BDD\u5DF2\u8FDB\u884C\u4E86 ${$} \u8F6E\u5BF9\u8BDD`)}if(this.memoryProvider&&this.memoryUserId)try{let $=this.memoryProvider.getActivitySummary(this.memoryUserId,7);if($?.highlights?.length){let W=$.highlights.slice(0,3).map(S=>S.text);b.push(`\u7528\u6237\u8FD1\u671F\u8BB0\u5FC6\u4EAE\u70B9: ${W.join("\uFF1B")}`)}}catch{}let x=new Date().getHours(),P=x<6?"\u6DF1\u591C":x<9?"\u65E9\u6668":x<12?"\u4E0A\u5348":x<14?"\u4E2D\u5348":x<18?"\u4E0B\u5348":x<22?"\u665A\u4E0A":"\u6DF1\u591C";b.push(`\u5F53\u524D\u65F6\u6BB5: ${P}`);let I=t==="pat"?"\u7528\u6237\u6478\u4E86\u6478\u4F60":t==="feed"?"\u7528\u6237\u5582\u4E86\u4F60\u4E1C\u897F":`\u7528\u6237\u5BF9\u4F60\u505A\u4E86\u300C${t}\u300D`;b.push(I);let O=b.join("\u3002");if(this.createSmallLLMCall){let $=this.createSmallLLMCall();if($){let W=await Vs({turnSummary:O,soul:s},$);W&&(m=W.text,h=W.style)}}}catch{}if(!m){let b=Hs("session.created");m=b?.text??null,h=b?.style??"excited"}let f=[],y=new Date().getHours();y>=22||y<6?f.push({label:"\u5E2E\u6211\u6574\u7406\u4ECA\u5929\u7684\u8FDB\u5EA6",action:"summarize-today"}):this.sessionState?.turnCount&&this.sessionState.turnCount>5&&f.push({label:"\u7EE7\u7EED\u521A\u624D\u7684\u5BF9\u8BDD",action:"resume-session"}),t==="click"&&f.push({label:"\u6709\u4EC0\u4E48\u80FD\u5E2E\u4F60\u7684\uFF1F",action:"start-chat"}),m&&this.sendNotification("pet.reaction",{text:m,style:h,actions:f.length>0?f:void 0}),o.id!==void 0&&this.sendResponse(o.id,{ok:!0,action:t,level:a,experience:c,events:l.map(b=>({type:b.type,level:b.level})),reaction:m?{text:m,style:h,actions:f.length>0?f:void 0}:null})}async function Ok(o){let e=this.getActiveProjectRoot(),n=new Ut(e).load();if(o.id!==void 0&&this.sendResponse(o.id,{ok:!0,soul:n??null}),n){this.sendNotification("pet.soul_ready",{name:n.name,species:n.species,personality:n.personality,catchphrase:n.catchphrase,stats:n.stats,rarity:n.rarity,breed:n.breed,breedColors:n.breedColors});let r=Ve.getUnlockedAbilities(n.level).map(i=>i.name),s=Ve.getNextAbility(n.level);this.sendNotification("pet.growth",{level:n.level,experience:n.experience,xpNeeded:Ve.xpForLevel(n.level),abilities:r,nextAbility:s?{name:s.name,level:s.unlockedAtLevel}:void 0})}}async function Dk(o){let e=o.params;if(!e?.description&&!e?.imageBase64){o.id!==void 0&&this.sendResponse(o.id,void 0,{code:w.INVALID_PARAMS,message:"Provide description or imageBase64"});return}this.sendNotification("pet.state",{state:"building"}),this.sendNotification("pet.reaction",{text:"\u6B63\u5728\u5B75\u5316\u4F60\u7684\u4E13\u5C5E\u5BA0\u7269...",style:"thinking"});try{let t=e.description?.slice(0,10)??"\u81EA\u5B9A\u4E49\u5BA0\u7269",n=e.description??"";e.imageBase64&&(n=await this.forgeAnalyzeImage(e.imageBase64,e.description),this.sendNotification("pet.reaction",{text:"\u5206\u6790\u5B8C\u6210\uFF0C\u6B63\u5728\u751F\u6210\u9AA8\u67B6...",style:"thinking"}));let r=await this.forgeGenerateSkeleton(n),s=Zt(r),i=io(s),a=0;for(;i.length>0&&a<2;){a++,this.sendNotification("pet.reaction",{text:`\u9AA8\u67B6\u7F3A\u5C11 ${i.join("\u3001")}\uFF0C\u91CD\u65B0\u751F\u6210 (${a}/${2})...`,style:"thinking",duration:3e3});let m=`\u4E0A\u6B21\u751F\u6210\u7F3A\u5C11\u4EE5\u4E0B\u90E8\u4F4D: ${i.join(", ")}\u3002\u8BF7\u786E\u4FDD\u6240\u6709 id \u5C5E\u6027\u90FD\u5B58\u5728\u3002`;r=await this.forgeGenerateSkeleton(n+`
|
|
807
807
|
|
|
808
808
|
`+m),s=Zt(r),i=io(s)}i.length>0&&this.sendNotification("pet.reaction",{text:"\u9AA8\u67B6\u4E0D\u5B8C\u6574\uFF0C\u90E8\u5206\u52A8\u753B\u53EF\u80FD\u7F3A\u5931\uFF0C\u7EE7\u7EED\u751F\u6210...",style:"normal",duration:3e3}),this.sendNotification("pet.reaction",{text:"\u9AA8\u67B6\u751F\u6210\u5B8C\u6210\uFF0C\u5F00\u59CB\u6E32\u67D3\u5404\u72B6\u6001...",style:"thinking"});let c=["idle","thinking","working","done","happy","error","sleeping","eating"],l={baseSvg:s,parts:oo(s),colors:so(s),characterDesc:n},d={};for(let m of c)d[m]=ro(l,m),this.sendNotification("pet.reaction",{text:`\u6E32\u67D3 ${m} \u72B6\u6001... (${Object.keys(d).length}/${c.length})`,style:"thinking",duration:2e3});let u=cr(d.idle,d,{threshold:6});if(!u.passedAll&&u.retryStates.length>0&&(this.sendNotification("pet.reaction",{text:`\u4E00\u81F4\u6027\u68C0\u67E5\uFF1A${u.retryStates.length} \u4E2A\u72B6\u6001\u9700\u4F18\u5316...`,style:"thinking",duration:3e3}),u.overallScore<4)){let m=lr(n,"all","\u9AA8\u67B6\u7ED3\u6784\u4E0D\u5B8C\u6574\u5BFC\u81F4\u591A\u72B6\u6001\u4E00\u81F4\u6027\u5DEE",1);r=await this.forgeGenerateSkeleton(m);let h={baseSvg:Zt(r),parts:oo(Zt(r)),colors:so(Zt(r)),characterDesc:n};for(let f of c)d[f]=ro(h,f)}let p={version:1,name:t,author:"user-generated",created:new Date().toISOString(),generator:"xiaozhi-pet-forge-v2-skeleton",source:{type:e.imageBase64?"image":"text",prompt:e.description},dimensions:{width:200,height:200},states:Object.fromEntries(c.map(m=>[m,{file:`states/${m}.svg`,loop:m!=="done"&&m!=="happy"&&m!=="eating",...m==="done"||m==="happy"?{duration:3e3}:m==="eating"?{duration:4e3}:{}}])),eyeTracking:{enabled:!0,pupils:[".left-eye .pupil",".right-eye .pupil"],maxOffset:3},colors:l.colors,consistency:{score:u.overallScore,method:"skeleton-parameterized"}};sr(p),this.sendNotification("pet.reaction",{text:`\u2705 \u5BA0\u7269\u300C${t}\u300D\u5DF2\u953B\u9020\u5B8C\u6210\uFF01\u4E00\u81F4\u6027\u8BC4\u5206 ${u.overallScore.toFixed(1)}/10`,style:"excited"}),this.sendNotification("pet.state",{state:"done"}),this.sendNotification("pet.forged",{name:t,svgs:d}),o.id!==void 0&&this.sendResponse(o.id,{ok:!0,manifest:p,svgs:d,status:"complete",consistency:{score:u.overallScore,passedAll:u.passedAll}})}catch(t){this.sendNotification("pet.state",{state:"error"}),this.sendNotification("pet.reaction",{text:"\u953B\u9020\u5931\u8D25\u4E86...",style:"normal"}),o.id!==void 0&&this.sendResponse(o.id,void 0,{code:w.INTERNAL_ERROR,message:t.message??"Forge failed"})}}function KC(o){let e=o.pathname.split("/").filter(Boolean),n=(e[e.length-1]??"").replace(/\.md$/i,"").replace(/[^a-zA-Z0-9_-]/g,"-");return/^(skill|readme|index|install|main)$/i.test(n)&&e.length>=2?e[e.length-2].replace(/[^a-zA-Z0-9_-]/g,"-"):n||""}var Sd=class o{running=!1;activeTurn=null;turnDone=Promise.resolve();verbose;transport;registry;mediaClient;agent=null;lastLlmConfigKey="";currentSessionId="";currentTurnId="";currentHooks=null;mcpManager=null;mcpReady=Promise.resolve();pluginLoader=null;permissionChecker=null;permissionUnregister=null;currentTransport=null;currentApiKey="";currentModel="";currentProvider="";currentBaseUrl="";sessionState=null;currentMediaApiKeys=null;taskStore=new os;mediaPersistence=new Os;memoryPrefetchState=Kt();memoryProvider=null;memoryUserId="";lastUserMessageForAutoExtract;lastAssistantMessageForExtract;memdir=null;fileWatcher=null;pendingAskUser=new Map;sessionTaskDomain;acpDetector=new As;agentConfigStore=null;soloEvaluator=null;productOrchestrator=null;productPlanner=null;soloProcessManager=null;productProcessManager=null;acpServer=null;acpSessionHistory=new Map;resumedSessionHistory=new Map;idleDreamTimer=null;constructor(e){this.verbose=e.verbose,this.registry=new $n,this.mediaClient=new xo({registry:this.registry}),J().onChange(()=>{this.lastLlmConfigKey=""});let t=Number(process.env.QLOGICAGENT_IDLE_DREAM_MS);t>0&&(we.dream.idleMinutes=t/6e4);let n=Number(process.env.QLOGICAGENT_DREAM_COOLDOWN_MS);n>=0&&(we.dream.cooldownMs=n),this.transport=e.transport??new Lo({verbose:e.verbose}),this.taskStore.onTaskChange((r,s)=>{s&&this.sendNotification("task.updated",{taskId:r,type:s.type,lifecycle:s.lifecycle,label:s.label})}),sg({log:{info:r=>this.log(r),warn:r=>this.log(`[warn] ${r}`),error:r=>this.log(`[error] ${r}`),debug:r=>{e.verbose&&this.log(`[debug] ${r}`)}},onExecProgress:r=>{this.sendNotification("turn.exec_progress",{output:r.output,elapsedTimeSeconds:r.elapsedTimeSeconds,totalLines:r.totalLines,totalBytes:r.totalBytes})}})}getActiveProjectRoot(){let e=Le();return e?.workspaceDir?e.workspaceDir:process.cwd()}setActiveWorkdir(e){e!==this.getActiveProjectRoot()&&(ng(e),this.mediaPersistence.setProjectDir(e))}start(){this.running=!0,this.log("qlogicagent started, waiting for JSON-RPC messages..."),Zp().then(e=>{e.error?this.log(`[warmup] embedding model not available: ${e.error}`):e.modelDownloaded?this.log(`[warmup] embedding model downloaded (${e.dimensions}d)`):e.modelCached&&this.log(`[warmup] embedding model ready (cached, ${e.dimensions}d)`)}).catch(()=>{}),this.transport.onMessage(e=>{if(this.acpServer){if(Kl(e)||er(e)){this.acpServer.dispatchMessage(e);return}if(Zo(e)){let t=e.method;if(t==="initialize"||t.startsWith("session/")||t.startsWith("x/")||t.startsWith("fs/")){this.acpServer.dispatchMessage(e);return}}}if(!Vl(e)){this.log("[warn] ignoring non-request message");return}this.handleMessage(e)}),this.transport.onClose(()=>{this.log("transport closed, shutting down"),this.stop()}),this.transport.start()}stop(){if(this.running){this.running=!1,this.cancelIdleDreamTimer(),this.currentSessionId&&this.currentHooks&&(this.currentHooks.invoke("stop",{sessionId:this.currentSessionId,reason:"shutdown"}).catch(()=>{}),this.currentHooks.invoke("session.ended",{sessionId:this.currentSessionId}).catch(()=>{}));try{ch().catch(()=>{}),this.fileWatcher&&(this.fileWatcher.stop(),this.fileWatcher=null),this.mcpManager&&(this.mcpManager.disconnectAll().catch(()=>{}),this.mcpManager=null),this.permissionUnregister&&(this.permissionUnregister(),this.permissionUnregister=null),this.activeTurn&&(this.activeTurn.abort(),this.activeTurn=null),this.transport.close()}catch(e){this.currentSessionId&&this.currentHooks&&this.currentHooks.invoke("stop.failed",{sessionId:this.currentSessionId,reason:"cleanup_error",error:e.message}).catch(()=>{})}this.log("stopped")}}methodHandlers=new Map([["initialize",e=>this.handleInitialize(e)],["agent.ping",e=>this.handlePing(e)],["thread.turn",e=>cy.call(this,e)],["memory.dream",e=>Qs.call(this,e)],["agent.abort",e=>sy.call(this,e)],["tool.approval.response",e=>iy.call(this,e)],["thread.user_response",e=>ay.call(this,e)],["thread.list",e=>Oy.call(this,e)],["session.resume",e=>Gy.call(this,e)],["thread.create",e=>My.call(this,e)],["session.getInfo",e=>Hy.call(this,e)],["session.create",e=>Dy.call(this,e)],["session.resolve",e=>Ly.call(this,e)],["session.list",e=>Ny.call(this,e)],["session.get",e=>$y.call(this,e)],["session.getMessages",e=>Uy.call(this,e)],["session.update",e=>jy.call(this,e)],["session.delete",e=>Fy.call(this,e)],["session.deleteAll",e=>By.call(this,e)],["session.archive",e=>Wy.call(this,e)],["memory.list",e=>jb.call(this,e)],["memory.atlas",e=>Fb.call(this,e)],["memory.activity",e=>Bb.call(this,e)],["memory.read",e=>Wb.call(this,e)],["memory.write",e=>Gb.call(this,e)],["memory.search",e=>Hb.call(this,e)],["memory.delete",e=>Vb.call(this,e)],["tools.list",e=>Kb.call(this,e)],["media.listModels",e=>gk.call(this,e)],["media.cancel",e=>hk.call(this,e)],["media.status",e=>yk.call(this,e)],["media.stt",e=>bk.call(this,e)],["settings.listProviders",e=>vk.call(this,e)],["settings.addKey",e=>Sk.call(this,e)],["settings.removeKey",e=>Tk.call(this,e)],["settings.toggleKey",e=>wk.call(this,e)],["settings.toggleModel",e=>xk.call(this,e)],["settings.listModels",e=>Rk.call(this,e)],["settings.setActiveModel",e=>_k.call(this,e)],["settings.getActiveModel",e=>Ak.call(this,e)],["settings.getOverview",e=>Pk.call(this,e)],["settings.refreshModels",e=>Ik.call(this,e)],["settings.validateKey",e=>Ek.call(this,e)],["provider.list",e=>zb.call(this,e)],["config.get",e=>qb.call(this,e)],["config.update",e=>Yb.call(this,e)],["config.tunables",e=>Xb.call(this,e)],["config.updateTunable",e=>Jb.call(this,e)],["todos.list",e=>Qb.call(this,e)],["tasks.list",e=>Zb.call(this,e)],["tasks.cancel",e=>ek.call(this,e)],["agents.scan",e=>nk.call(this,e)],["agents.list",e=>ok.call(this,e)],["agents.config",e=>rk.call(this,e)],["agents.setConfig",e=>sk.call(this,e)],["agents.getConfig",e=>ik.call(this,e)],["agents.removeConfig",e=>ak.call(this,e)],["agents.setGateway",e=>ck.call(this,e)],["agents.getGateway",e=>lk.call(this,e)],["agents.processes",e=>uk.call(this,e)],["agents.kill",e=>pk.call(this,e)],["agents.listConfigured",e=>dk.call(this,e)],["agents.getLog",e=>mk.call(this,e)],["agents.testConnection",e=>fk.call(this,e)],["solo.start",e=>eb.call(this,e)],["solo.status",e=>tb.call(this,e)],["solo.cancel",e=>nb.call(this,e)],["solo.select",e=>ob.call(this,e)],["solo.list",e=>rb.call(this,e)],["solo.delete",e=>sb.call(this,e)],["solo.message",e=>ib.call(this,e)],["solo.evaluate",e=>ab.call(this,e)],["product.plan",e=>vy.call(this,e)],["product.confirm",e=>Sy.call(this,e)],["product.message",e=>Ty.call(this,e)],["product.create",e=>wy.call(this,e)],["product.resume",e=>xy.call(this,e)],["product.pause",e=>Ry.call(this,e)],["product.checkpoint",e=>_y.call(this,e)],["product.status",e=>Ay.call(this,e)],["product.list",e=>Py.call(this,e)],["product.delete",e=>Iy.call(this,e)],["product.cancel",e=>Ey.call(this,e)],["product.rollback",e=>Cy.call(this,e)],["project.create",e=>kb.call(this,e)],["project.list",e=>vb.call(this,e)],["project.delete",e=>Sb.call(this,e)],["project.purgeAll",e=>Tb.call(this,e)],["project.rename",e=>wb.call(this,e)],["project.archive",e=>xb.call(this,e)],["project.unarchive",e=>Rb.call(this,e)],["project.update",e=>Ab.call(this,e)],["project.archiveByGroup",e=>_b.call(this,e)],["session.switchProject",e=>Vy.call(this,e)],["session.focus",e=>zy.call(this,e)],["session.moveToProject",e=>qy.call(this,e)],["session.getState",e=>Ky.call(this,e)],["files.list",e=>Eb.call(this,e)],["files.create",e=>Cb.call(this,e)],["files.rename",e=>Mb.call(this,e)],["files.delete",e=>Ob.call(this,e)],["files.gitStatus",e=>Db.call(this,e)],["instructions.list",e=>Lb.call(this,e)],["instructions.read",e=>Nb.call(this,e)],["instructions.write",e=>$b.call(this,e)],["instructions.delete",e=>Ub.call(this,e)],["skills.list",e=>lb.call(this,e)],["skills.activate",e=>db.call(this,e)],["skills.deactivate",e=>ub.call(this,e)],["skills.delete",e=>pb.call(this,e)],["skills.promote",e=>mb.call(this,e)],["skills.stats",e=>fb.call(this,e)],["skills.pin",e=>gb.call(this,e)],["skills.unpin",e=>hb.call(this,e)],["skills.curator",e=>yb.call(this,e)],["skills.lifecycle",e=>bb.call(this,e)],["pet.hatch",e=>Ck.call(this,e)],["pet.interact",e=>Mk.call(this,e)],["pet.status",e=>Ok.call(this,e)],["pet.forge",e=>Dk.call(this,e)],["pet.confirm_response",e=>this.handlePetConfirmResponse(e)]]);handleMessage(e){let t=this.methodHandlers.get(e.method);t?t(e):e.id!==void 0&&this.sendResponse(e.id,void 0,{code:w.METHOD_NOT_FOUND,message:`Unknown method: ${e.method}`})}handleInitialize(e){let t=e.params,n=t?.protocolVersion??"unknown",r=t?.host?.name??t?.hostName??"unknown",s=t?.host?.version??t?.hostVersion??"?",i=n.split(".")[0],a=eo.split(".")[0];if(i!==a){this.log(`[initialize] protocol mismatch: host=${n} agent=${eo}`),e.id!==void 0&&this.sendResponse(e.id,void 0,{code:w.PROTOCOL_MISMATCH,message:`Protocol version mismatch: host=${n}, agent=${eo}`});return}this.log(`[initialize] host=${r} v${s}`),e.id!==void 0&&this.sendResponse(e.id,{protocolVersion:eo,agent:{name:"qlogicagent",version:"0.1.0"},capabilities:{tools:Ot().map(c=>c.function.name),streaming:!0,threads:!0,notifications:["turn.start","turn.delta","turn.end","turn.error","turn.recovery","turn.tool_call","turn.tool_result","turn.tool_blocked","turn.reasoning_delta","turn.plan_update","turn.suggestions","turn.subagent_started","turn.subagent_delta","turn.subagent_ended","turn.media_result","turn.todos_updated","task.updated","turn.exec_progress","turn.artifact","tool.approval.request","turn.skill_instruction","turn.ask_user","memory.updated","session.info","permission.rule_updated","team.updated","turn.usage_update","pong"],methods:[...Ah]}}),this.ensureDefaultProject()}ensureDefaultProject(){let e=Le();if(e)e.workspaceDir&&this.setActiveWorkdir(e.workspaceDir);else{let t=te.join(H(),"workspaces","default");Y.existsSync(t)||Y.mkdirSync(t,{recursive:!0});let n=Wp(t);md(t),this.setActiveWorkdir(t),this.sendNotification("project.created",{id:n.id,name:n.name,workspaceDir:n.workspaceDir,type:n.type})}this.ensureDefaultProjectDir();{let t=this.getActiveProjectRoot(),n=new $t(t);n.ensureInitialized(),this.memdir=n}}ensureDefaultProjectDir(){let t=fe().find(n=>n.type==="default"&&n.status==="active");t&&(Y.existsSync(t.workspaceDir)||Y.mkdirSync(t.workspaceDir,{recursive:!0}))}handlePing(e){e.id!==void 0&&this.sendResponse(e.id,{status:"ok"}),this.sendNotification("pong",{})}static SUGGESTION_PROMPT=`[SUGGESTION MODE]
|
|
809
809
|
Based on the conversation, suggest 1-3 short follow-up actions the user might naturally do next.
|