@kodax-ai/kodax 0.7.63 → 0.7.66
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/CHANGELOG.md +2300 -2204
- package/README.md +79 -7
- package/README_CN.md +52 -3
- package/dist/chunks/{agent-SL444XLN.js → agent-KER4WDNO.js} +1 -1
- package/dist/chunks/argument-completer-HK3MHA3K.js +2 -0
- package/dist/chunks/{chunk-ARUWXX25.js → chunk-35P7QL2Q.js} +1 -1
- package/dist/chunks/chunk-3HKBBY74.js +339 -0
- package/dist/chunks/chunk-AKBH2EEE.js +8 -0
- package/dist/chunks/{chunk-KCFVGXVK.js → chunk-ALS32RNZ.js} +1 -1
- package/dist/chunks/chunk-MHRN2LQV.js +328 -0
- package/dist/chunks/{chunk-HP4FXMEM.js → chunk-NBQW7PNZ.js} +2 -2
- package/dist/chunks/{chunk-S4GVQO3W.js → chunk-O7N22GJ3.js} +1 -1
- package/dist/chunks/chunk-ONUPGMER.js +2 -0
- package/dist/chunks/{chunk-ZL5CEANW.js → chunk-PZTG2C33.js} +1 -1
- package/dist/chunks/{chunk-4MIHVNB7.js → chunk-QAQ2HNXD.js} +112 -112
- package/dist/chunks/{chunk-6OZ5KWG3.js → chunk-QJJKMNZF.js} +1 -1
- package/dist/chunks/chunk-QJVZZSEO.js +56 -0
- package/dist/chunks/chunk-TLJGOKBT.js +729 -0
- package/dist/chunks/{chunk-7MPU7TP6.js → chunk-VS4CDDEF.js} +243 -243
- package/dist/chunks/chunk-WBBEJIAY.js +306 -0
- package/dist/chunks/{chunk-L3MF5V64.js → chunk-WMIZCY2J.js} +1 -1
- package/dist/chunks/{chunk-UA744TZM.js → chunk-YRBNXFHY.js} +1 -1
- package/dist/chunks/compaction-config-7GMUFNPB.js +2 -0
- package/dist/chunks/{construction-bootstrap-EFZBONTK.js → construction-bootstrap-3XDS2D5K.js} +1 -1
- package/dist/chunks/{devtools-4CRULTR2.js → devtools-CD6KSIHE.js} +1 -1
- package/dist/chunks/{devtools-YINBSZC7.js → devtools-XR5F2C6T.js} +1 -1
- package/dist/chunks/{dist-73L4OYPD.js → dist-4PXB7U22.js} +1 -1
- package/dist/chunks/dist-4YAYT2TO.js +2 -0
- package/dist/chunks/host-KG3456QP.js +2 -0
- package/dist/chunks/{paste-FDYM7SZX.js → paste-C33GZQV5.js} +1 -1
- package/dist/chunks/run-manager-6CAH3KTA.js +2 -0
- package/dist/chunks/utils-OT5ENFUL.js +2 -0
- package/dist/constructed-handler-worker.js +2 -0
- package/dist/index.d.ts +21 -10
- package/dist/index.js +6 -6
- package/dist/kodax_cli.js +1116 -1089
- package/dist/runtime-worker.js +2843 -0
- package/dist/sdk-agent.d.ts +27 -8
- package/dist/sdk-agent.js +1 -1
- package/dist/sdk-coding.d.ts +76 -1020
- package/dist/sdk-coding.js +1 -1
- package/dist/sdk-llm.js +1 -1
- package/dist/sdk-mcp.d.ts +2 -1
- package/dist/sdk-mcp.js +1 -1
- package/dist/sdk-media.js +1 -1
- package/dist/sdk-repl.d.ts +197 -183
- package/dist/sdk-repl.js +2 -2
- package/dist/sdk-runtime.d.ts +982 -0
- package/dist/sdk-runtime.js +2 -0
- package/dist/sdk-session.d.ts +3 -3
- package/dist/sdk-session.js +1 -1
- package/dist/sdk-skills.js +1 -1
- package/dist/semantic-worker.js +191 -10
- package/dist/types-chunks/{bash-prefix-extractor.d-CZW9fRoa.d.ts → bash-prefix-extractor.d-BjkITAva.d.ts} +142 -3
- package/dist/types-chunks/{run-manager.d-CYTnWhZY.d.ts → capsule.d-hVhPNkHd.d.ts} +5 -92
- package/dist/types-chunks/commands.d-C3B1TdGM.d.ts +213 -0
- package/dist/types-chunks/{types.d-1CnTg7Sd.d.ts → guardrail.d-C_Siraua.d.ts} +3 -128
- package/dist/types-chunks/{guardrail.d-MR6LwMB2.d.ts → guardrail.d-wk-s0psS.d.ts} +2 -2
- package/dist/types-chunks/{manager.d-DBD7SOTT.d.ts → manager.d-Zum9cGHU.d.ts} +3 -173
- package/dist/types-chunks/oauth-login.d-Bgb4rdLN.d.ts +174 -0
- package/dist/types-chunks/public-api.d-jtREVfEq.d.ts +596 -0
- package/dist/types-chunks/run-manager.d-CFknOfo1.d.ts +91 -0
- package/dist/types-chunks/{sdk-session-RBSBBKol.d.ts → sdk-session-CLqyfAmf.d.ts} +8 -306
- package/dist/types-chunks/types.d-BMLxKV69.d.ts +128 -0
- package/dist/types-chunks/types.d-CUN_bZU7.d.ts +975 -0
- package/dist/types-chunks/{utils.d-C14jZ9ZM.d.ts → utils.d-C1rpoeDh.d.ts} +84 -72
- package/package.json +7 -1
- package/dist/chunks/argument-completer-EN63ZVJK.js +0 -2
- package/dist/chunks/chunk-KHICMJIR.js +0 -310
- package/dist/chunks/chunk-LGR7ACBQ.js +0 -326
- package/dist/chunks/chunk-RR7W7UF6.js +0 -341
- package/dist/chunks/chunk-UGTK2JIJ.js +0 -731
- package/dist/chunks/chunk-V4WSBIXB.js +0 -2
- package/dist/chunks/chunk-VSWROENP.js +0 -52
- package/dist/chunks/compaction-config-4VIONMFB.js +0 -2
- package/dist/chunks/dist-EDF2YUF6.js +0 -2
- package/dist/chunks/host-J4HPDLFC.js +0 -2
- package/dist/chunks/run-manager-ZVSW2OWM.js +0 -2
- package/dist/chunks/utils-5HDLYTZJ.js +0 -2
- package/dist/types-chunks/storage.d-C6kkAEch.d.ts +0 -280
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
-
import{
|
|
2
|
+
import{Db as Te,Eb as X,Fb as Ee,Gb as Ae,Ia as We,Nc as Pe,Oc as Oe}from"./chunk-3HKBBY74.js";import{N as ge}from"./chunk-O7N22GJ3.js";import{Be as Me,Ce as Re,De as be,_a as G,ee as ve,fe as Se,he as F,ib as ye,le as z,re as J,se as W,te as H,ue as xe}from"./chunk-TLJGOKBT.js";import{B as ke}from"./chunk-PZTG2C33.js";import{a}from"./chunk-ONUPGMER.js";import{basename as bn,dirname as Wn}from"node:path";import{execFile as yt}from"node:child_process";import j from"node:path";import{promisify as vt}from"node:util";var St=vt(yt),xt=1e4,De=2,Fe=new Set(["write","edit","multi_edit","insert_after_anchor"]),Mt=/^\s*(?:let me|i will|i'll|i am going to)\b[\s\S]{0,120}\b(?:start|create|implement|write|build|plan)\b|^\s*(?:我将|让我|接下来)[\s\S]{0,80}(?:开始|创建|编写|实现|制定)/i;function Rt(e){if(e?.timeoutMs!==void 0){if(!Number.isFinite(e.timeoutMs)||e.timeoutMs<=0)throw new Error("workflow wait timeoutMs must be a positive number");return Math.floor(e.timeoutMs)}}a(Rt,"normalizeWaitTimeoutMs");function Y(e){return e?.requiresMutation===!0||(e?.requiredChangedPaths?.length??0)>0}a(Y,"hasVerificationWork");function T(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").trim()}a(T,"normalizeWorkspacePath");function bt(e,t){let n=t.gitRoot?j.resolve(t.gitRoot):void 0,o=j.isAbsolute(e)&&n?j.relative(n,j.resolve(e)):e;return T(o)}a(bt,"normalizeRequiredPath");function Wt(e){let t=(e.readOnly??!1)===!1?{enforcement:"warn",requiresMutation:!0,rejectPreparatoryFinalText:!0}:void 0;if(e.verification!==void 0){let n={...t??{},...e.verification,enforcement:e.verification.enforcement??"hard"},o=e.verification.requiredChangedPaths;return{verification:{...n,...o!==void 0&&o.length>0&&n.requiresMutation===void 0?{requiresMutation:!0}:{}}}}return{verification:t}}a(Wt,"resolveVerificationForInput");function Tt(e,t){if(t===!0&&e.readOnly===!1)throw new Error(`workflow manifest readOnly=true cannot spawn write-capable child "${e.name}"; set the workflow manifest readOnly=false or use child readOnly:true`);let n=e.readOnly??t??!1;return e.readOnly===n?e:{...e,readOnly:n}}a(Tt,"resolveSpawnAgentInput");function _e(e){let t=e.trim();return t.length>0&&Mt.test(t)}a(_e,"isPreparatoryOnlyText");function Et(e,t){let n=e.trim(),o=t?.trim();return o&&(n.length===0||_e(n))?o:e}a(Et,"selectWorkflowFinalText");async function B(e,t){return(await St("git",[...e],{cwd:t,timeout:xt,windowsHide:!0,maxBuffer:4194304})).stdout.toString()}a(B,"runGit");async function At(e){let t=e.gitRoot??e.executionCwd??process.cwd(),n=(await B(["rev-parse","--show-toplevel"],t)).trim(),o=await Promise.all([B(["diff","--name-only","--"],n),B(["diff","--cached","--name-only","--"],n),B(["ls-files","--others","--exclude-standard"],n)]);return[...new Set(o.flatMap(i=>i.split(/\r?\n/)).map(T).filter(i=>i.length>0))]}a(At,"listGitChangedFiles");async function Z(e,t){try{return{paths:(await t(e)).map(T).filter(o=>o.length>0)}}catch(n){return{paths:[],error:n instanceof Error?n.message:String(n)}}}a(Z,"captureChangedPaths");function Pt(){return{toolNameById:new Map,toolPathById:new Map,succeededToolCalls:[],succeededPaths:[]}}a(Pt,"createMutationRecorder");function Ot(e){if(e)for(let t of["path","file_path","target_path"]){let n=e[t];if(typeof n=="string"&&n.trim().length>0)return T(n)}}a(Ot,"readMutationPath");function Ft(e,t){return{...e??{},onToolUseStart:a((n,o)=>{if(Fe.has(n.name)){t.toolNameById.set(n.id,n.name);let i=Ot(n.input);i!==void 0&&t.toolPathById.set(n.id,i)}e?.onToolUseStart?.(n,o)},"onToolUseStart"),onToolResult:a((n,o)=>{let i=t.toolNameById.get(n.id)??n.name;if(Fe.has(i)&&!n.content.trimStart().startsWith("[Tool Error]")){t.succeededToolCalls.push(i);let r=t.toolPathById.get(n.id);r!==void 0&&t.succeededPaths.push(r)}e?.onToolResult?.(n,o)},"onToolResult")}}a(Ft,"wrapEventsForMutationRecording");function Q(e){return[...new Set(e.filter(t=>t.trim().length>0))]}a(Q,"uniqueItems");function Ie(e){let t=e.verification;if(!t)return;let n=[],o=new Set(e.before.paths.map(T)),i=Q(e.after.paths.map(T)),r=i.filter(m=>!o.has(m)),s=Q(e.mutationRecorder.succeededToolCalls),c=e.acceptToolMutationEvidence?s:[],p=e.acceptToolMutationEvidence?Q(e.mutationRecorder.succeededPaths.map(T)):[],l=r.length>0||c.length>0,h=t.enforcement??"hard",v=(t.requiredChangedPaths??[]).map(m=>bt(m,e.ctx));t.requiresMutation===!0&&(e.before.error!==void 0||e.after.error!==void 0?n.push(`workspace mutation verification could not read changed files: ${e.after.error??e.before.error}`):l||n.push(e.acceptToolMutationEvidence||s.length===0?"expected file mutations, but no new workspace changes or successful write tools were observed":"write tools ran in an isolated worktree, but no main workspace changes were present after cleanup")),e.term.limitReached===!0&&!l&&n.push("workflow child reached its iteration limit before satisfying the task");for(let m of v)!i.includes(m)&&!p.includes(m)&&n.push(`required changed path was not present in workspace changes: ${m}`);let k=t.minFinalTextChars;return k!==void 0&&!l&&e.term.finalText.trim().length<k&&n.push(`finalText was shorter than the required ${k} characters`),t.rejectPreparatoryFinalText===!0&&!l&&_e(e.term.finalText)&&n.push("finalText looks preparatory instead of terminal"),{ok:n.length===0,enforcement:h,reasons:n,changedPaths:i,mutationToolCalls:s,mutationEvidence:l}}a(Ie,"evaluateVerification");function ee(e,t){if(t.ok)return e;let o=[t.enforcement==="warn"?"[Workflow task completed without verification]":"[Workflow task verification failed]",...t.reasons.map(i=>`- ${i}`)].join(`
|
|
3
3
|
`);return e.trim().length>0?`${e}
|
|
4
4
|
|
|
5
5
|
${o}`:o}a(ee,"appendVerificationFailure");function Ce(){return{ok:!1,enforcement:"warn",reasons:["workflow child reached its iteration limit before satisfying the task"],mutationEvidence:!1}}a(Ce,"limitReachedWarningVerification");function It(e){return e.entry.bundle.readOnly!==!0&&e.entry.repairAttempts<De&&e.term.status==="completed"&&e.verification!==void 0&&e.verification.ok!==!0&&e.verification.enforcement!=="warn"}a(It,"shouldRepairVerificationFailure");function Ct(e){let t=e.verification.reasons.map(o=>`- ${o}`).join(`
|
|
@@ -9,7 +9,7 @@ ${e.verification.changedPaths?.map(o=>`- ${o}`).join(`
|
|
|
9
9
|
`)??""}`:"";return[e.originalPrompt,"","[Workflow verification repair]",`Repair attempt ${e.attempt}/${De}.`,"The previous attempt did not satisfy the workflow postconditions.","Do not stop at analysis, planning, or a promise to begin. Complete the required file writes in the real workspace now.","Use the available file editing tools when a file change is required, then report the exact files changed.","","Verification failures:",t,n,"","Previous terminal response:",e.previousFinalText.trim()||"(empty)"].join(`
|
|
10
10
|
`)}a(Ct,"buildVerificationRepairPrompt");async function $e(e,t,n,o,i=n){if(n===void 0)return e;let r;try{return await Promise.race([e,new Promise((s,c)=>{r=setTimeout(()=>{o.childAbortControllers?.get(t)?.abort(),c(new Error(`workflow task ${t} timed out after ${i??n}ms`))},n)})])}finally{r&&clearTimeout(r)}}a($e,"waitForChildPromise");function Ne(e,t,n){return t.outputSchema!==void 0&&We(t.outputSchema),Oe(t.name,t.evidenceRefs,n),{id:e,fanoutClass:"evidence-scan",objective:t.prompt,readOnly:t.readOnly??!1,evidenceRefs:t.evidenceRefs?[...t.evidenceRefs]:[],constraints:[],...t.modelHint?{modelHint:t.modelHint}:{},...t.isolation?{isolation:t.isolation}:{},...t.subagentType?{specialistName:t.subagentType}:{},...t.outputSchema!==void 0?{outputSchema:t.outputSchema}:{},...t.effort?{effort:t.effort}:{}}}a(Ne,"buildBundle");function te(e,t){if(e.cancelledChildren.includes(t))return{status:"stopped",snapStatus:"aborted",finalText:""};let n=e.results[0],o=Et(n?.summary??"",n?.digest);return n?.status==="completed"?{status:"completed",snapStatus:"completed",finalText:o,...n.digest?{digest:n.digest}:{},...n.digestFailed?{digestFailed:!0}:{},...n.digestPending?{digestPending:!0}:{},...n.limitReached?{limitReached:!0}:{},...n.provider?{provider:n.provider}:{},...n.model?{model:n.model}:{},...n.structured!==void 0?{structured:n.structured}:{}}:{status:"failed",snapStatus:"failed",finalText:o,...n?.limitReached?{limitReached:!0}:{},...n?.provider?{provider:n.provider}:{},...n?.model?{model:n.model}:{}}}a(te,"deriveTerminal");function qe(e){let{ctx:t,childOptions:n}=e,o=e.runChild??Pe,i=e.queue??ke(),r=e.listChangedFiles??At,s=e.now??(()=>Date.now()),c=0,p=e.generateId??(()=>`wf-child-${c+=1}`),l=new Map,h=new Set,v=new Map,k=a(()=>e.onTaskSummary!==void 0||h.size>0,"hasTaskSummaryObservers"),m=a((d,g)=>{try{e.onTaskSummary?.(d,g)}catch{}for(let f of h)try{f(d,g)}catch{}},"notifyTaskSummary");return{spawn:a(async d=>{let g=Tt(d,e.defaultChildReadOnly),f=p(),S=Ne(f,g,new Set(l.keys())),O=Wt(g).verification,R=Pt(),D=g.isolation!=="worktree",u=Y(O)?Z(t,r):Promise.resolve({paths:[]}),w=t.childProgressSnapshots,x=a(async A=>{let he=new AbortController;t.childAbortControllers?.set(f,he),w&&Te(w,{childId:f,startedAt:s(),maxIterations:n.maxIterationsPerChild,parentRole:n.parentRole,readOnly:A.readOnly,specialistName:A.specialistName});let kt={...n,parentOptions:{...n.parentOptions,events:Ft(n.parentOptions.events,R)},maxParallel:1,workflowChild:!0,...e.runId!==void 0?{workflowCorrelation:{workflowRunId:e.runId,childAgentId:f,itemId:`agent:${f}`}}:{},childActivityName:g.name,workflowDigestMode:k()?"async":"blocking",...k()?{onWorkflowChildDigest:a(y=>{m(y.childId,{...y.digest?{summary:y.digest}:{},summaryKind:y.digest?"digest":"digest-failed",...y.totalTokensUsed>0?{usage:{totalTokens:y.totalTokensUsed}}:{}})},"onWorkflowChildDigest")}:{},abortSignal:he.signal,snapshotUpdater:w?y=>Ee(w,f,y):void 0},q;try{return await u,q=await o([A],t,kt),q}finally{if(t.childAbortControllers?.delete(f),w){let y=q?te(q,f):{snapStatus:"failed",finalText:""};X(w,f,{status:y.snapStatus,finalText:y.finalText,endedAt:s()})}}},"runBundle"),_=x(S);return l.set(f,{name:g.name,input:g,bundle:S,promise:_,runBundle:x,verification:O,changedPathBaseline:u,mutationRecorder:R,acceptToolMutationEvidence:D,repairAttempts:0}),G(v,f,_),{taskId:f,name:g.name}},"spawn"),wait:a(async(d,g)=>{let f=l.get(d);if(!f)throw new Error(`unknown workflow task: ${d}`);let S=Rt(g),pe=Date.now(),O=a(async x=>{if(S===void 0)return $e(x,d,void 0,t);let _=Date.now()-pe,A=S-_;if(A<=0)throw t.childAbortControllers?.get(d)?.abort(),new Error(`workflow task ${d} timed out after ${S}ms`);return $e(x,d,Math.max(1,Math.floor(A)),t,S)},"waitForAttempt"),R=await O(f.promise),D=R.totalTokensUsed,u=te(R,d),w=f.verification?Ie({verification:f.verification,term:u,before:await f.changedPathBaseline,after:Y(f.verification)?await Z(t,r):{paths:[]},mutationRecorder:f.mutationRecorder,ctx:t,acceptToolMutationEvidence:f.acceptToolMutationEvidence}):void 0;for(u.limitReached===!0&&w===void 0&&u.status==="completed"&&(w=Ce(),u={...u,status:"completed_unverified",snapStatus:"completed",finalText:ee(u.finalText,w)});It({entry:f,term:u,verification:w});){f.repairAttempts+=1;let x=Ne(d,{...f.input,prompt:Ct({originalPrompt:f.input.prompt,previousFinalText:u.finalText,verification:w,attempt:f.repairAttempts})});f.promise=f.runBundle(x),G(v,d,f.promise),R=await O(f.promise),D+=R.totalTokensUsed,u=te(R,d),w=f.verification?Ie({verification:f.verification,term:u,before:await f.changedPathBaseline,after:Y(f.verification)?await Z(t,r):{paths:[]},mutationRecorder:f.mutationRecorder,ctx:t,acceptToolMutationEvidence:f.acceptToolMutationEvidence}):void 0,u.limitReached===!0&&w===void 0&&u.status==="completed"&&(w=Ce(),u={...u,status:"completed_unverified",snapStatus:"completed",finalText:ee(u.finalText,w)})}if(w!==void 0&&!w.ok&&u.status==="completed"){let x=w.enforcement==="warn";u={...u,status:x?"completed_unverified":"failed",snapStatus:x?"completed":"failed",finalText:ee(u.finalText,w)}}return X(t.childProgressSnapshots,d,{status:u.snapStatus,finalText:u.finalText,endedAt:s()}),{taskId:d,name:f.name,status:u.status,finalText:u.finalText,...u.digest?{digest:u.digest}:{},...u.digestFailed?{digestFailed:!0}:{},...u.digestPending?{digestPending:!0}:{},...w!==void 0?{verification:w}:{},...u.limitReached?{limitReached:!0}:{},...u.provider?{provider:u.provider}:{},...u.model?{model:u.model}:{},...u.structured!==void 0?{structured:u.structured}:{},usage:{totalTokens:D}}},"wait"),output:a(async d=>{if(!l.has(d))throw new Error(`unknown workflow task: ${d}`);let g=l.get(d)?.name??d,f=t.childProgressSnapshots?.get(d);if(!f)return{taskId:d,name:g,status:"running"};let S=f.status==="aborted"?"stopped":f.status;return f.finalText!==void 0?{taskId:d,name:g,status:S,lastText:f.finalText}:{taskId:d,name:g,status:S}},"output"),send:a(async(d,g)=>{if(!l.has(d))throw new Error(`unknown workflow task: ${d}`);ye({to:d,priority:"user",mode:"prompt",content:g,registry:v,queue:i})},"send"),stop:a(async d=>{if(!l.has(d))throw new Error(`unknown workflow task: ${d}`);t.childAbortControllers?.get(d)?.abort()},"stop"),subscribeTaskSummaryUpdates:a(d=>(h.add(d),()=>{h.delete(d)}),"subscribeTaskSummaryUpdates")}}a(qe,"createCodingWorkflowBackend");import{homedir as sn}from"node:os";import{join as Ze}from"node:path";var $t=["structure, entry points, and control flow","edge cases, error handling, and failure modes","tests, validation, and existing coverage"],Nt="Deduplicate overlapping findings, keep concrete evidence (file:line), rank by relevance to the question, and explicitly note gaps left by any failed investigation.",Dt={type:"object",additionalProperties:!1,required:["finding"],properties:{finding:{type:"string",description:"Your concrete findings for this focus, with file:line evidence. If nothing relevant was found, a brief note saying so."}}};function _t(e){if(e!==null&&typeof e=="object"&&"finding"in e){let t=e.finding;if(typeof t=="string"&&t.trim().length>0)return t}}a(_t,"readStructuredFinding");function qt(e){let t=_t(e.structured);if(t)return t;let n=e.finalText?.trim();return n&&n.length>0?e.finalText:"[no finding text was returned \u2014 the investigator may have ended on a tool call without a closing summary]"}a(qt,"pickFindingText");function jt(e,t){return["Investigate the following question (READ-ONLY \u2014 do not modify any files):",e,"",`Focus your investigation on: ${t}`,"","Report concrete findings backed by evidence (cite file:line). If you find nothing relevant for this focus, say so briefly."].join(`
|
|
11
11
|
`)}a(jt,"buildInvestigatorPrompt");function Bt(e){let t=Math.max(1,(e.maxAgents??8)-1);return(e.targets&&e.targets.length>0?e.targets:$t).slice(0,t).map((o,i)=>({name:`investigate-${i+1}`,prompt:jt(e.question,o)}))}a(Bt,"resolveAngles");async function Lt(e,t){try{let n=await e.runAgent({name:t.name,prompt:t.prompt,readOnly:!0,outputSchema:Dt});return n===null?{angle:t.name,status:"failed",text:"[investigation failed] agent did not complete"}:{angle:t.name,status:n.status==="completed"?"completed":"failed",text:qt(n)}}catch(n){let o=n instanceof Error?n.message:String(n);return{angle:t.name,status:"failed",text:`[investigation failed] ${o}`}}}a(Lt,"investigate");async function Ut(e,t){let n=Bt(t),o=(await e.phase("investigate",()=>e.parallel(n.map(s=>()=>Lt(e,s)),t.maxConcurrency!==void 0?{concurrency:t.maxConcurrency}:void 0))).filter(s=>s!==null),i=o.some(s=>s.status!=="completed");return{synthesis:(await e.phase("synthesize",()=>e.synthesize({inputs:o.map(s=>`### ${s.angle} (${s.status})
|
|
12
|
-
${s.text}`),rubric:t.rubric??Nt}))).text,findings:o,degraded:i}}a(Ut,"runParallelInvestigation");var je={meta:{name:"parallel-investigation",description:"Fan out read-only investigators over a question (split by target areas), then synthesize ranked, evidence-keeping findings.",maxAgents:8,maxConcurrency:4,readOnly:!0,phases:["investigate","synthesize"]},run:Ut};function Vt(e){return{meta:e.meta,run:a((t,n)=>e.run(t,n),"run")}}a(Vt,"erase");var Be=[Vt(je)];function Le(e){return Be.find(t=>t.meta.name===e)}a(Le,"getBuiltinWorkflow");function Qn(){return Be.map(e=>e.meta)}a(Qn,"listBuiltinWorkflows");import{mkdir as ze,readdir as Kt,readFile as I,rename as Gt,unlink as oe,writeFile as ae}from"node:fs/promises";import{basename as zt,dirname as re,join as E}from"node:path";import{pathToFileURL as Jt}from"node:url";var Je=[".workflow.json",".ts",".mjs",".js"],C="0.7.49";function He(){return"0.7.
|
|
12
|
+
${s.text}`),rubric:t.rubric??Nt}))).text,findings:o,degraded:i}}a(Ut,"runParallelInvestigation");var je={meta:{name:"parallel-investigation",description:"Fan out read-only investigators over a question (split by target areas), then synthesize ranked, evidence-keeping findings.",maxAgents:8,maxConcurrency:4,readOnly:!0,phases:["investigate","synthesize"]},run:Ut};function Vt(e){return{meta:e.meta,run:a((t,n)=>e.run(t,n),"run")}}a(Vt,"erase");var Be=[Vt(je)];function Le(e){return Be.find(t=>t.meta.name===e)}a(Le,"getBuiltinWorkflow");function Qn(){return Be.map(e=>e.meta)}a(Qn,"listBuiltinWorkflows");import{mkdir as ze,readdir as Kt,readFile as I,rename as Gt,unlink as oe,writeFile as ae}from"node:fs/promises";import{basename as zt,dirname as re,join as E}from"node:path";import{pathToFileURL as Jt}from"node:url";var Je=[".workflow.json",".ts",".mjs",".js"],C="0.7.49";function He(){return"0.7.66"}a(He,"currentKodaxWorkflowVersion");function Ht(e){return e.endsWith(".workflow.json")?"capability-generated":"trusted-local"}a(Ht,"executionForPath");function Xt(e){let t=Je.find(n=>e.endsWith(n));return t?e.slice(0,-t.length):void 0}a(Xt,"stripWorkflowSuffix");function ie(e){let t=e.trim().replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^[.-]+|[.-]+$/g,"").slice(0,80);if(!t||t==="."||t==="..")throw new Error("workflow name must contain at least one safe filename character");return t}a(ie,"safeWorkflowName");function se(e){return typeof e=="object"&&e!==null}a(se,"isRecord");function Ue(e,t){let n=e[t];if(typeof n!="string"||n.length===0)throw new Error(`workflow run.json missing ${t}`);return n}a(Ue,"readRequiredString");async function Ve(e,t){if(!e)return[];let n;try{n=await Kt(e)}catch{return[]}let o=new Map;for(let i of Je)for(let r of n){if(!r.endsWith(i))continue;let s=Xt(r);if(!s||s.length===0||o.has(s))continue;let c=E(e,r);o.set(s,{name:s,path:c,source:t,execution:Ht(c)})}return[...o.values()]}a(Ve,"scanDir");async function $(e){let t=await Ve(e.personal,"personal"),n=await Ve(e.project,"project"),o=new Map;for(let i of t)o.set(i.name,i);for(let i of n)o.set(i.name,i);return[...o.values()].sort((i,r)=>i.name.localeCompare(r.name))}a($,"discoverSavedWorkflows");function Yt(e){return typeof e=="object"&&e!==null&&"meta"in e&&"run"in e&&typeof e.run=="function"}a(Yt,"isWorkflowModule");function Zt(e){let t=e.default;if(Yt(t))return t;let n=typeof t=="function"?t:e.run,o=e.workflow??e.meta;if(typeof n=="function"&&typeof o=="object"&&o!==null&&"name"in o)return{meta:o,run:n};throw new Error("invalid workflow module: expected a `{ meta, run }` default export, or `export const workflow = {...}` + a default run function")}a(Zt,"normalizeWorkflowModule");function Qt(e){let t=JSON.parse(e);if(!se(t))throw new Error("generated workflow file must be an object");if(t.format!==void 0&&t.format!=="kodax.workflow")throw new Error(`unsupported workflow capsule format: ${String(t.format)}`);if(t.format==="kodax.workflow"){let i=J(t);return{manifest:i.manifest,source:i.source,capsule:i,legacy:!1}}let n=t.source;if(typeof n!="string"||n.trim().length===0)throw new Error("generated workflow file source must be a non-empty string");let o=F(t.manifest);return{manifest:o,source:n,capsule:W({minKodaxVersion:C,manifest:o,source:n}),legacy:!0}}a(Qt,"parseGeneratedWorkflowFile");async function ce(e){let t=Qt(await I(e,"utf8"));return t.capsule??W({minKodaxVersion:C,manifest:t.manifest,source:t.source})}a(ce,"loadSavedWorkflowCapsule");async function Xe(e){if(e.endsWith(".workflow.json"))return H(await ce(e));let t=await import(Jt(e).href);return Zt(t)}a(Xe,"loadSavedWorkflow");function fe(e){if(e.mayUseWorktree===!0)return{environment:["git-repo","worktree-capable"]}}a(fe,"deriveRequirements");function L(e,t){z(t,{filename:`${e.name}.workflow.js`,requireAsyncRun:!0})}a(L,"assertGeneratedCapsuleSource");async function en(e){let t=ie(e.name),n=F(e.manifest);L(n,e.source);let o=e.requires??fe(n),i=W({minKodaxVersion:e.minKodaxVersion??C,manifest:n,source:e.source,...e.intent!==void 0?{intent:e.intent}:{},...e.inputs!==void 0?{inputs:e.inputs}:{},...o!==void 0?{requires:o}:{},...e.provenance!==void 0?{provenance:e.provenance}:{}});await ze(e.dir,{recursive:!0});let r=E(e.dir,`${t}.workflow.json`);return await ae(r,`${JSON.stringify(i,null,2)}
|
|
13
13
|
`,"utf8"),{name:t,path:r,source:"project",execution:"capability-generated"}}a(en,"saveGeneratedWorkflow");async function Ke(e,t){await ae(e,`${JSON.stringify(t,null,2)}
|
|
14
14
|
`,"utf8")}a(Ke,"writeCapsuleFile");async function tn(e){try{return await I(e,"utf8"),!0}catch{return!1}}a(tn,"fileExists");async function ir(e){let t=(await $(e.dirs)).filter(c=>c.name===e.name).filter(c=>e.source===void 0||c.source===e.source);if(t.length===0)throw new Error(`saved workflow not found: ${e.name}`);if(t.length>1)throw new Error(`ambiguous saved workflow name: ${e.name}`);let n=t[0];if(!n.path.endsWith(".workflow.json"))throw new Error("only generated workflow capsules can be renamed");let o=ie(e.newName),i=E(re(n.path),`${o}.workflow.json`);if(i!==n.path&&await tn(i))throw new Error(`saved workflow already exists: ${o}`);let r=await ce(n.path);L(r.manifest,r.source);let s=W({minKodaxVersion:r.minKodaxVersion,manifest:{...r.manifest,name:o},source:r.source,...r.intent!==void 0?{intent:r.intent}:{},...r.inputs!==void 0?{inputs:r.inputs}:{},...r.requires!==void 0?{requires:r.requires}:{},...r.provenance!==void 0?{provenance:r.provenance}:{}});return await ae(i,`${JSON.stringify(s,null,2)}
|
|
15
15
|
`,"utf8"),i!==n.path&&await oe(n.path),{name:o,path:i,source:n.source,execution:"capability-generated"}}a(ir,"renameSavedWorkflow");async function sr(e){let t=(await $(e.dirs)).filter(o=>o.name===e.name).filter(o=>e.source===void 0||o.source===e.source);if(t.length===0)throw new Error(`saved workflow not found: ${e.name}`);if(t.length>1)throw new Error(`ambiguous saved workflow name: ${e.name}`);let n=t[0];if(!n.path.endsWith(".workflow.json"))throw new Error("only generated workflow capsules can be deleted");return await oe(n.path),n}a(sr,"deleteSavedWorkflow");async function cr(e){let t=ie(e.name),n=(await $(e.dirs)).filter(m=>m.name===t).filter(m=>e.savedSource===void 0||m.source===e.savedSource);if(n.length===0)throw new Error(`saved workflow not found: ${t}`);if(n.length>1)throw new Error(`ambiguous saved workflow name: ${t}`);let o=n[0];if(!o.path.endsWith(".workflow.json"))throw new Error("only generated workflow capsules can be replaced");let i=F({...e.manifest,name:t});L(i,e.source);let r=e.requires??fe(i),s=W({minKodaxVersion:e.minKodaxVersion??C,manifest:i,source:e.source,...e.intent!==void 0?{intent:e.intent}:{},...e.inputs!==void 0?{inputs:e.inputs}:{},...r!==void 0?{requires:r}:{},...e.provenance!==void 0?{provenance:e.provenance}:{}}),c=await ce(o.path),p=new Date().toISOString().replace(/[:.]/g,"-"),l=E(re(o.path),".revisions",t),h=`${p}-${process.hrtime.bigint().toString(36)}`,v=E(l,`${t}-${h}.workflow.json`),k=E(re(o.path),`.${t}.${process.pid}.${Date.now().toString(36)}.tmp`);await ze(l,{recursive:!0}),await Ke(v,c);try{await Ke(k,s),await Gt(k,o.path)}catch(m){try{await oe(k)}catch{}throw m}return{name:t,path:o.path,source:o.source,execution:"capability-generated",previousPath:v}}a(cr,"replaceSavedWorkflow");function nn(e){if(!se(e))return;let t=e.request;if(typeof t=="string"&&t.trim().length>0)return t;let n=e.question;if(typeof n=="string"&&n.trim().length>0)return n}a(nn,"readOptionalOriginalRequest");function Ye(e){return rn(e)}a(Ye,"buildCapsuleFromRun");async function rn(e){let t=JSON.parse(await I(E(e.runDir,"run.json"),"utf8"));if(!se(t))throw new Error("workflow run.json must be an object");let n=Ue(t,"scriptSnapshotPath"),o=Ue(t,"manifestSnapshotPath"),i=await I(n,"utf8"),r=F(JSON.parse(await I(o,"utf8")));L(r,i);let s=typeof t.runId=="string"&&t.runId.length>0?t.runId:zt(e.runDir),c=nn(t.args),p=fe(r),l=xe(r,c!==void 0?{originalRequest:c}:{}),h={description:"Provide new workflow args matching the generated request shape.",..."args"in t?{examples:[t.args]}:{}};return W({minKodaxVersion:C,manifest:r,source:i,intent:l,inputs:h,...p!==void 0?{requires:p}:{},provenance:{fromRunId:s,createdAt:new Date().toISOString(),kodaxVersion:He()}})}a(rn,"readCapsuleFromRun");async function fr(e){let t=await Ye(e);return{capsule:t,module:H(t)}}a(fr,"loadGeneratedWorkflowFromRun");async function dr(e){let t=await Ye(e);return en({dir:e.targetDir,name:e.name,manifest:t.manifest,source:t.source,...t.intent!==void 0?{intent:t.intent}:{},...t.inputs!==void 0?{inputs:t.inputs}:{},...t.requires!==void 0?{requires:t.requires}:{},...t.provenance!==void 0?{provenance:t.provenance}:{},minKodaxVersion:t.minKodaxVersion})}a(dr,"saveGeneratedWorkflowFromRun");function b(e,t,n,o){e.push({severity:t,requirement:n,message:o})}a(b,"addRequirementIssue");function Ge(e){let t=/^v?(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/.exec(e.trim());if(t)return[Number(t[1]),Number(t[2]),Number(t[3])]}a(Ge,"parseSemver");function on(e,t){for(let n=0;n<3;n+=1){let o=e[n]-t[n];if(o!==0)return o}return 0}a(on,"compareSemver");function an(e,t,n){let o=Ge(t),i=Ge(n);if(!o){b(e,"error","kodax:min-version",`workflow minKodaxVersion is not valid semver: ${t}`);return}if(!i){b(e,"warning","kodax:min-version",`cannot verify workflow minKodaxVersion ${t}; current version is unknown`);return}on(i,o)<0&&b(e,"error","kodax:min-version",`workflow requires KodaX >= ${t}, current version is ${n}`)}a(an,"addMinVersionIssue");function ne(e,t,n,o){if(!n)return;if(!o){for(let r of n)b(e,"warning",`${t}:${r}`,`workflow requires ${t}:${r}, but no ${t} inventory was provided`);return}let i=new Set(o);for(let r of n)i.has(r)||b(e,"error",`${t}:${r}`,`missing required workflow ${t}: ${r}`)}a(ne,"addMissingItems");function ur(e,t={}){let n=J(e),o=[],i=n.requires;an(o,n.minKodaxVersion,t.kodaxVersion??He()),i?.environment?.includes("git-repo")&&t.isGitRepo===!1&&b(o,"error","environment:git-repo","workflow requires a git repository"),i?.environment?.includes("worktree-capable")&&t.worktreeCapable===!1&&b(o,"error","environment:worktree-capable","workflow may request git worktree isolation");try{z(n.source,{filename:`${n.manifest.name}.workflow.js`,requireAsyncRun:!0})}catch(r){let s=r instanceof Error?r.message:String(r);b(o,"error","workflow:source",s)}return ne(o,"tools",i?.tools,t.availableTools),ne(o,"mcp",i?.mcp,t.availableMcp),ne(o,"skills",i?.skills,t.availableSkills),{ok:!o.some(r=>r.severity==="error"),issues:o}}a(ur,"preflightWorkflowCapsule");function cn(e){return{project:Ze(e,".kodax","workflows"),personal:Ze(sn(),".kodax","workflows")}}a(cn,"defaultSavedWorkflowDirs");async function fn(e,t){let o=(await $(t)).find(i=>i.name===e);if(o)return Xe(o.path)}a(fn,"resolveSavedByName");function Qe(e){let t=cn(e);return async n=>Le(n)??await fn(n,t)}a(Qe,"createNestedWorkflowResolver");import{existsSync as dn,mkdirSync as un,readFileSync as ln,writeFileSync as et}from"node:fs";import{join as N}from"node:path";var tt="results";function nt(e){return e.replace(/[^a-zA-Z0-9._-]/g,"_")}a(nt,"safeKey");function rt(e,t){let n=N(e,t);if(dn(n))try{return JSON.parse(ln(n,"utf8"))}catch{return}}a(rt,"readResult");function ot(e,t={}){let n=N(e,tt);un(n,{recursive:!0});let o=t.readFrom?N(t.readFrom,tt):void 0;return{get:a(i=>{let r=`${nt(i)}.json`,s=rt(n,r);if(s!==void 0)return s;if(o===void 0)return;let c=rt(o,r);if(c!==void 0){try{et(N(n,r),JSON.stringify(c),"utf8")}catch{}return c}},"get"),set:a((i,r)=>{try{et(N(n,`${nt(i)}.json`),JSON.stringify(r),"utf8")}catch{}},"set")}}a(ot,"createFsResultCache");import{mkdirSync as mn,appendFileSync as wn,writeFileSync as U}from"node:fs";import{join as P}from"node:path";function pn(e){let t=e.replace(/[^a-zA-Z0-9._-]/g,"_").slice(0,120);return t.length>0?t:"artifact"}a(pn,"safeWorkflowArtifactName");function at(e,t={}){let n=t.now??(()=>Date.now()),o=P(e,"artifacts");mn(o,{recursive:!0});let i=P(e,"events.jsonl");return{runDir:e,onEvent:a(r=>{wn(i,`${JSON.stringify({...r,ts:n()})}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
-
import{a as i}from"./chunk-V4WSBIXB.js";var Q=class extends Error{static{i(this,"KodaXError")}code;constructor(t,n="KODAX_ERROR"){super(t),this.code=n,this.name="KodaXError"}},M=class extends Q{static{i(this,"KodaXProviderError")}provider;constructor(t,n){super(t,"PROVIDER_ERROR"),this.provider=n,this.name="KodaXProviderError"}},Pe=class extends Q{static{i(this,"KodaXRateLimitError")}retryAfter;constructor(t,n){super(t,"RATE_LIMIT_ERROR"),this.retryAfter=n,this.name="KodaXRateLimitError"}},At=class extends Q{static{i(this,"KodaXNetworkError")}isTimeout;constructor(t,n=!1){super(t,"NETWORK_ERROR"),this.isTimeout=n,this.name="KodaXNetworkError"}},Xe=class extends M{static{i(this,"KodaXReasoningEffortRejectedError")}rejectedEffort;model;constructor(t,n,o,r){super(t,n),this.rejectedEffort=o,this.model=r,this.name="KodaXReasoningEffortRejectedError"}},Dt=class extends Q{static{i(this,"KodaXToolCallIdError")}constructor(t){super(t,"TOOL_CALL_ID_ERROR"),this.name="KodaXToolCallIdError"}};var Ot=32768,Uo=32e3,Wo=64e3,zo=.5;function Re(e,t,n={}){if(e===void 0)return;let o=n.allowZero===!0;if(!Number.isFinite(e)||(o?e<0:e<=0)){let r=o?"a non-negative finite number":"a positive finite number";throw new Error(`${t} must be ${r}`)}return e===0?0:Math.max(1,Math.floor(e*1e3))}i(Re,"timeoutSecToMs");function Xo(e){if(e===void 0||e.trim().length===0)return;let t=Number(e);if(!(!Number.isFinite(t)||t<=0))return Math.max(1,Math.floor(t*1e3))}i(Xo,"parseTimeoutSecEnvMs");function Vo(e){if(!e)return;let t={requestTimeoutMs:Re(e.requestTimeoutSec,"timeouts.llm.requestTimeoutSec"),streamIdleTimeoutMs:Re(e.streamIdleTimeoutSec,"timeouts.llm.streamIdleTimeoutSec",{allowZero:!0}),chunkTimeoutMs:Re(e.chunkTimeoutSec,"timeouts.llm.chunkTimeoutSec"),maxRetryDelayMs:Re(e.maxRetryDelaySec,"timeouts.llm.maxRetryDelaySec")};return Object.values(t).some(o=>o!==void 0)?t:void 0}i(Vo,"resolveLlmTimeoutConfig");function Ve(e,t){return`${e}/${t??""}`}i(Ve,"capabilityCacheKey");function It(e,t){if(t.length===0)return e;let n=new Set(t),o=e.defaultEffort!==void 0&&n.has(e.defaultEffort);return{...e,...o?{defaultEffort:void 0}:{},supportedEfforts:e.supportedEfforts?.filter(r=>!n.has(r.value)),localRejectEfforts:Array.from(new Set([...e.localRejectEfforts??[],...t]))}}i(It,"narrowReasoningProfile");function Go(e,t,n){return e[Ve(t,n)]?.rejected??[]}i(Go,"getRejectedEfforts");function Ho(e,t,n,o,r,s){let a=Ve(t,n),u=e[a],c=u?.rejected.includes(o)?u.rejected:[...u?.rejected??[],o];return{...e,[a]:{rejected:c,source:r,updatedAt:s}}}i(Ho,"addRejectedEffort");function Jo(e,t,n){if(!t)return{};let o={...e};return delete o[Ve(t,n)],o}i(Jo,"removeCacheEntry");function qo(e){if(!e||typeof e!="object")return{};let t={};for(let[n,o]of Object.entries(e)){if(!o||typeof o!="object")continue;let r=o,s=Array.isArray(r.rejected)?r.rejected.filter(c=>typeof c=="string"):[],a=r.source==="probed"?"probed":"observed",u=typeof r.updatedAt=="string"?r.updatedAt:"";t[n]={rejected:s,source:a,updatedAt:u}}return t}i(qo,"sanitizeCapabilityCache");var Yo=["off","auto","quick","balanced","deep"],le=["auto","none","low","medium","high"],Pn={low:6e3,medium:1e4,high:2e4},Rn=4096,$t=[{value:"none",description:"Disable thinking"},{value:"minimal",description:"Disable thinking",isUserVisible:!1},{value:"low",description:"Enable thinking"},{value:"medium",description:"Enable thinking",isDefault:!0},{value:"high",description:"Enable thinking"},{value:"xhigh",description:"Enable thinking"},{value:"max",description:"Enable thinking"}],Bt=[{value:"none",description:"Disable thinking"},{value:"minimal",description:"Disable thinking",isUserVisible:!1},{value:"low",description:"Alias to high"},{value:"medium",description:"Alias to high"},{value:"high",description:"High reasoning",isDefault:!0},{value:"xhigh",description:"Alias to max"},{value:"max",description:"Maximum reasoning"}],Qo=[{value:"low",description:"Thinking is always on"},{value:"medium",description:"Thinking is always on"},{value:"high",description:"Thinking is always on",isDefault:!0},{value:"xhigh",description:"Thinking is always on"},{value:"max",description:"Thinking is always on"}];function He(e,t={}){return{...Zo(e),...t,reasoningPreset:e}}i(He,"createReasoningProfileFromPreset");function Zo(e){switch(e){case"zai-glm-5.2":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"max",supportedEfforts:Bt,effortAliases:{low:"high",medium:"high",xhigh:"max"},disabledEfforts:["none","minimal"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"deepseek-v4-openai":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"high",supportedEfforts:Bt,effortAliases:{low:"high",medium:"high",xhigh:"max"},disabledEfforts:["none","minimal"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"deepseek-v4-anthropic":return{reasoningPreset:e,effortStrategy:"anthropic-output-effort",thinkingStrategy:"provider-toggle",defaultEffort:"high",supportedEfforts:Bt,effortAliases:{low:"high",medium:"high",xhigh:"max"},disabledEfforts:["none","minimal"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"zai-glm-toggle":case"deepseek-toggle":case"kimi-hybrid-toggle":case"mimo-v2.5-toggle":case"generic-thinking-toggle":return{reasoningPreset:e,effortStrategy:"provider-toggle",thinkingStrategy:"provider-toggle",supportedEfforts:$t,disabledEfforts:["none","minimal"],supportsDisabledThinking:!0};case"kimi-k2.7-code":case"minimax-m2-always":return{reasoningPreset:e,effortStrategy:"prompt-only",defaultEffort:"high",supportedEfforts:Qo,localRejectEfforts:["none","minimal"]};case"minimax-m3":return{reasoningPreset:e,effortStrategy:"provider-toggle",thinkingStrategy:"anthropic-adaptive",supportedEfforts:$t,disabledEfforts:["none","minimal"],supportsAdaptiveThinking:!0,supportsDisabledThinking:!0};case"qwen-hybrid-thinking":return{reasoningPreset:e,effortStrategy:"provider-budget",thinkingStrategy:"provider-budget",defaultEffort:"medium",supportedEfforts:$t,budgetByEffort:{low:6e3,medium:1e4,high:16e3,xhigh:24e3,max:32e3},disabledEfforts:["none","minimal"],supportsManualThinkingBudget:!0,supportsDisabledThinking:!0};case"claude-adaptive-xhigh":return{reasoningPreset:e,effortStrategy:"anthropic-output-effort",thinkingStrategy:"anthropic-adaptive",defaultEffort:"high",supportedEfforts:[{value:"low"},{value:"medium"},{value:"high",isDefault:!0},{value:"xhigh"},{value:"max"}],supportsReasoningEffort:!0,supportsAdaptiveThinking:!0};case"claude-adaptive-max":return{reasoningPreset:e,effortStrategy:"anthropic-output-effort",thinkingStrategy:"anthropic-adaptive",defaultEffort:"high",supportedEfforts:[{value:"low"},{value:"medium"},{value:"high",isDefault:!0},{value:"max"}],supportsReasoningEffort:!0,supportsAdaptiveThinking:!0};case"anthropic-budget":return{reasoningPreset:e,effortStrategy:"provider-budget",thinkingStrategy:"anthropic-budget",defaultEffort:"medium",supportedEfforts:[{value:"none"},{value:"low"},{value:"medium",isDefault:!0},{value:"high"}],budgetByEffort:{low:6e3,medium:1e4,high:16e3},disabledEfforts:["none"],supportsManualThinkingBudget:!0,supportsDisabledThinking:!0};case"openai-chat-reasoning":case"openai-responses-reasoning":return{reasoningPreset:e,effortStrategy:e==="openai-chat-reasoning"?"openai-chat-effort":"openai-responses-effort",defaultEffort:"medium",supportedEfforts:[{value:"none"},{value:"minimal"},{value:"low"},{value:"medium",isDefault:!0},{value:"high"},{value:"xhigh"}],disabledEfforts:["none"],supportsReasoningEffort:!0,supportsReasoningSummary:!0,supportsEncryptedReasoningReplay:!0};case"codex-cli-effort":return{reasoningPreset:e,effortStrategy:"codex-cli-config",defaultEffort:"medium",supportedEfforts:[{value:"none"},{value:"minimal"},{value:"low"},{value:"medium",isDefault:!0},{value:"high"},{value:"xhigh"}],allowCustomEffort:!0,supportsReasoningEffort:!0};case"none":return{reasoningPreset:e,effortStrategy:"none",thinkingStrategy:"none"}}}i(Zo,"createBaseReasoningProfileFromPreset");function Nt(e){return e.reasoningCapability?e.reasoningCapability:e.supportsThinking?"native-toggle":"prompt-only"}i(Nt,"getReasoningCapability");function fe(e){return Je(e).enabled}i(fe,"isReasoningEnabled");function Je(e){if(typeof e=="boolean")return{enabled:e,effort:e?"auto":"none",effortSource:"legacy",taskType:"unknown",executionMode:"implementation"};let t=e?.effort?Ae(e.effort):void 0,n=t??(e?.enabled===!0?"auto":"none");return{enabled:n!=="none",effort:n,effortSource:t!==void 0?"explicit":"legacy",taskType:e?.taskType??"unknown",executionMode:e?.executionMode??"implementation"}}i(Je,"normalizeReasoningRequest");function Ae(e){let t=e.trim().toLowerCase();if(!t)throw new Error("Reasoning effort cannot be empty.");if(/\s/.test(t))throw new Error(`Reasoning effort cannot contain whitespace: "${e}".`);return t==="off"?"none":t}i(Ae,"normalizeReasoningEffortValue");function Sn(e){switch(e){case"off":return"none";case"auto":return"auto";case"quick":return"low";case"balanced":return"medium";case"deep":return"high"}}i(Sn,"mapLegacyReasoningModeToEffortIntent");function er(e){switch(e){case"none":return"off";case"auto":return"auto";case"low":return"quick";case"medium":return"balanced";case"high":return"deep";default:return}}i(er,"effortToLegacyReasoningMode");function wn(e){let t=e?.trim();if(!t)return{kind:"unset"};let n=Ae(t);return n==="auto"||n==="unset"?{kind:"clear"}:{kind:"value",value:n}}i(wn,"parseReasoningEffortEnv");function De(e){let t=wn(e.envEffort),n=[];Se(n,e.explicitEffort,"explicit",!0),t.kind==="value"&&n.push({value:t.value,source:"env",isExplicit:!0}),Se(n,e.sessionEffort,"session",!1),e.legacyReasoningMode?n.push({value:Sn(e.legacyReasoningMode),source:"legacy",isExplicit:!1}):e.thinking!==void 0&&n.push({value:e.thinking?"auto":"none",source:"legacy",isExplicit:!1}),Se(n,e.modelDefaultEffort??e.capability?.defaultEffort??we(e.capability),"model-default",!1),Se(n,e.providerDefaultEffort,"provider-default",!1),Se(n,e.fallbackEffort??Me(e.capability),"fallback",!1);let o=n[0]??{value:"none",source:"fallback",isExplicit:!1};if(o.value==="auto")return{configuredEffort:"auto",effectiveEffort:nr(n.slice(1),e.capability),source:o.source,isExplicit:o.isExplicit,diagnostics:[]};let r=Mn(o.value,e.capability,o.isExplicit);return{configuredEffort:o.value,effectiveEffort:r,source:o.source,isExplicit:o.isExplicit,diagnostics:[]}}i(De,"resolveReasoningEffort");function tr(e){let t=e.currentEffort?Ae(e.currentEffort):void 0;if(t&&An(t,e.capability))return{effectiveEffort:Ge(t,e.capability),preserved:!0};let n=e.capability?.defaultEffort??we(e.capability)??Lt(e.capability)??Me(e.capability),o=n&&Ge(n,e.capability);return t?{effectiveEffort:o,preserved:!1,diagnostic:o?`Effort ${t} is not supported by the selected model; using ${o}.`:`Effort ${t} is not supported by the selected model; clearing effort.`}:{effectiveEffort:o,preserved:!1}}i(tr,"resolveReasoningEffortForModelSwitch");function Se(e,t,n,o){if(t===void 0)return;let r=Ae(t);e.push({value:r,source:n,isExplicit:o})}i(Se,"pushEffortCandidate");function nr(e,t){let n=e.find(o=>o.value!=="auto");return n?Mn(n.value,t,n.isExplicit):we(t)??Me(t)}i(nr,"resolveAutoEffectiveEffort");function Mn(e,t,n){if(t?.localRejectEfforts?.includes(e)){if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return we(t)??Lt(t)??Me(t)??e}if(e==="none")return e;if(An(e,t))return Ge(e,t);if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return we(t)??Lt(t)??Me(t)??e}i(Mn,"validateReasoningEffort");function Ge(e,t){return t?.effortAliases?.[e]??e}i(Ge,"applyEffortAlias");function An(e,t){if(t?.localRejectEfforts?.includes(e))return!1;if(e==="auto"||e==="none"||t?.allowCustomEffort===!0)return!0;let n=or(t);return n.length===0?le.includes(e):n.includes(e)||n.includes(Ge(e,t))}i(An,"isSupportedReasoningEffort");function or(e){return e?.supportedEfforts?.map(t=>t.value)??[]}i(or,"getSupportedEffortValues");function we(e){return e?.supportedEfforts?.find(t=>t.isDefault)?.value}i(we,"getDefaultPresetValue");function Lt(e){let t=e?.supportedEfforts?.filter(rr).map(n=>n.value);if(!(!t||t.length===0))return t[Math.floor((t.length-1)/2)]}i(Lt,"getMiddleVisiblePresetValue");function rr(e){return e.isUserVisible!==!1}i(rr,"isUserVisiblePreset");function Me(e){if(!e||e.effortStrategy==="none"||e.effortStrategy==="prompt-only")return"none";if(!(e.effortStrategy==="anthropic-output-effort"&&e.thinkingStrategy==="anthropic-adaptive"))return"medium"}i(Me,"getFallbackEffortForCapability");function ir(e){switch(e){case"quick":return"low";case"balanced":case"auto":return"medium";case"deep":return"high";default:return"off"}}i(ir,"getDefaultThinkingDepthForMode");function ie(e){switch(e){case"none":return"off";case"low":return"low";case void 0:case"medium":case"auto":return"medium";default:return"high"}}i(ie,"effortToThinkingDepth");function se(e,t,n="unknown"){if(t==="off")return 0;let o={...Pn,...e.defaultThinkingBudgets??{}},s=e.taskBudgetOverrides?.[n]?.[t]??o[t];return e.thinkingBudgetCap?Math.min(s,e.thinkingBudgetCap):s}i(se,"resolveThinkingBudget");function ae(e,t,n=Rn){let o=Math.max(1024,t-n);return Math.max(1024,Math.min(e,o))}i(ae,"clampThinkingBudget");function jt(e){switch(e){case"low":return"low";case"medium":return"medium";case"high":return"high";default:return}}i(jt,"mapDepthToOpenAIReasoningEffort");function Dn(e){if(!e||typeof e!="object")return;let t=e,n=t.status??t.statusCode??t.code;return typeof n=="number"&&Number.isInteger(n)?n:typeof n=="string"&&/^\d{3}$/.test(n)?Number(n):Dn(t.cause)}i(Dn,"getStatus");function sr(e){if(e instanceof Error)return e.message.toLowerCase();if(typeof e=="string")return e.toLowerCase();if(e&&typeof e=="object"){let t=e;return[t.message,t.error,t.detail,t.body].filter(o=>typeof o=="string").join(" ").toLowerCase()}return""}i(sr,"getMessage");var ar=["reasoning_effort","reasoning effort","reasoninglevel","reasoning_level","thinking"],ur=["unsupported","not supported","invalid","does not support","is not one of","not allowed","unknown","unexpected","unrecognized"],cr=["minimal","none","low","medium","high","xhigh","max"];function lr(e,t){for(let n of cr)if(new RegExp(`['"\`]${n}['"\`]`).test(e))return n;return t}i(lr,"extractRejectedEffort");function Ft(e,t){let n=Dn(e);if(n!==400&&n!==422)return null;let o=sr(e);if(!o)return null;let r=ar.some(u=>o.includes(u)),s=ur.some(u=>o.includes(u));if(!r||!s)return null;let a=lr(o,t);return a?{rejectedEffort:a}:null}i(Ft,"classifyReasoningEffortRejection");function On(e,t){if(!e)return;if(typeof e.get=="function")return e.get(t)??void 0;let n=e,o=t.toLowerCase(),r=n[t]??n[o]??n[o.replace(/\b\w/g,s=>s.toUpperCase())];if(r!==void 0)return Array.isArray(r)?r[0]:r}i(On,"readHeader");function In(e){if(!e)return;let t=e.trim();if(t.length===0)return;let n=Number(t);if(!(!Number.isFinite(n)||n<=0))return n}i(In,"parsePositiveNumber");function fr(e,t){if(!e)return;let n=e.trim();if(n.length===0)return;let o=Date.parse(n);if(!Number.isFinite(o))return;let r=o-t;return r>0?r:void 0}i(fr,"parseHttpDate");function qe(e,t){let n=t.baseBackoffMs??1e3,o=t.maxBackoffMs??3e4,r=t.maxHeaderWaitMs??12e4,s=t.now?t.now():Date.now(),a=In(On(e,"retry-after-ms"));if(a!==void 0){let g=Math.min(a,r);return{type:"header",waitMs:Math.round(g),source:"retry-after-ms",cappedFromHeader:g!==a}}let u=On(e,"retry-after");if(u!==void 0&&u.trim().length>0){let g=In(u);if(g!==void 0){let T=g*1e3,d=Math.min(T,r);return{type:"header",waitMs:Math.round(d),source:"retry-after-seconds",cappedFromHeader:d!==T}}let y=fr(u,s);if(y!==void 0){let T=Math.min(y,r);return{type:"header",waitMs:Math.round(T),source:"retry-after-date",cappedFromHeader:T!==y}}}let c=n*Math.pow(2,Math.max(0,t.attempt)),f=Math.min(c,o),p=t.withJitter!==!1?Math.random()*.25*f:0;return{type:"backoff",waitMs:Math.round(f+p),source:"exponential-backoff",attempt:t.attempt}}i(qe,"parseRetryAfter");function Ye(e){if(!e||typeof e!="object")return;let t=e;return t.headers??t.response?.headers??t.cause?.headers??t.cause?.response?.headers}i(Ye,"extractHeadersFromError");import{AsyncLocalStorage as dr}from"node:async_hooks";var $n=new dr,Bn=8,Ln=32;function pr(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isInteger(t)&&t>0?t:void 0}i(pr,"parsePositiveInt");function gr(){let e=de()?.workflow?.maxConcurrency,t=typeof e=="number"&&Number.isInteger(e)&&e>0?e:pr(process.env.KODAX_WORKFLOW_MAX_CONCURRENCY)??Bn;return Math.max(1,Math.min(Ln,t))}i(gr,"resolveWorkflowMaxConcurrency");function mr(e,t){return $n.run(e,t)}i(mr,"runWithScopedConfig");function de(){return $n.getStore()}i(de,"getRunScopedConfig");var ue={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},Nn={...ue,multimodalSupport:"image-input"},Oe={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},jn={...Oe,multimodalSupport:"image-input"};function Qe(e){return{transport:e.transport,conversationSemantics:e.conversationSemantics,mcpSupport:e.mcpSupport,contextFidelity:e.contextFidelity??"full",toolCallingFidelity:e.toolCallingFidelity??"full",sessionSupport:e.sessionSupport??"full",longRunningSupport:e.longRunningSupport??"full",multimodalSupport:e.multimodalSupport??"none",evidenceSupport:e.evidenceSupport??"full"}}i(Qe,"normalizeCapabilityProfile");function V(e){return{...Qe(e)}}i(V,"cloneCapabilityProfile");function hr(e){if(!e)return;let t=parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}i(hr,"parseEnvInt");function yr(e){switch(e.reasoningPreset){case"zai-glm-5.2":case"deepseek-v4-openai":case"deepseek-v4-anthropic":case"qwen-hybrid-thinking":return!0;default:break}return e.effortStrategy==="provider-budget"}i(yr,"shouldLowerAutoReasoningEffort");function et(){return new DOMException("Request aborted","AbortError")}i(et,"abortError");function vr(e,t){return e<=0?Promise.resolve():t?.aborted?Promise.reject(et()):new Promise((n,o)=>{let r,s=i(()=>{t&&t.removeEventListener("abort",a)},"cleanup"),a=i(()=>{r&&clearTimeout(r),s(),o(et())},"onAbort");t&&t.addEventListener("abort",a,{once:!0}),r=setTimeout(()=>{s(),n()},e)})}i(vr,"waitForRetryDelay");function Kt(e){if(typeof e=="number"&&Number.isInteger(e))return e;if(typeof e=="string"&&/^\d{3}$/.test(e))return Number(e)}i(Kt,"normalizeHttpStatus");function Fn(e){if(!e||typeof e!="object")return;let t=e;return Kt(t.status)??Kt(t.statusCode)??Kt(t.code)??Fn(t.cause)}i(Fn,"extractHttpStatus");function Kn(e){if(!e||typeof e!="object")return"";let t=e;return typeof t.code=="string"?t.code:Kn(t.cause)}i(Kn,"extractErrorCode");function Ze(e){if(e instanceof Error)return e.message.toLowerCase();if(e&&typeof e=="object"){let t=e.message;if(typeof t=="string")return t.toLowerCase()}return String(e).toLowerCase()}i(Ze,"getErrorMessage");var H=class{static{i(this,"KodaXBaseProvider")}maxOutputTokensOverride;suppressReasoningEffort=!1;setMaxOutputTokensOverride(t){this.maxOutputTokensOverride=t}getEffectiveMaxOutputTokens(t){if(this.maxOutputTokensOverride!==void 0)return this.maxOutputTokensOverride;let n=de()?.maxOutputTokens,o=(typeof n=="number"&&Number.isFinite(n)&&n>0?n:void 0)??hr(process.env.KODAX_MAX_OUTPUT_TOKENS);if(o!==void 0)return o;let r=this.getModelDescriptor(t)?.maxOutputTokens;return r!==void 0?r:this.config.maxOutputTokens??32768}getStreamMaxDurationMs(t){let n=this.getModelDescriptor(t)?.streamMaxDurationMs;return n!==void 0?n:this.config.streamMaxDurationMs}getEffectiveReplayReasoningContent(t){let n=this.getModelDescriptor(t)?.replayReasoningContent;return n!==void 0?n:this.config.replayReasoningContent??!1}getEffectiveStrictThinkingSignature(t){let n=this.getModelDescriptor(t)?.strictThinkingSignature;return n!==void 0?n:this.config.strictThinkingSignature??!1}getEffectiveThinkingBudgetCap(t){return this.getModelDescriptor(t)?.thinkingBudgetCap??this.config.thinkingBudgetCap}supportsNonStreamingFallback(){return!1}async complete(t,n,o,r,s,a){throw new M(`${this.name} does not support non-streaming fallback`)}isConfigured(){return!!process.env[this.config.apiKeyEnv]}async verifyCredential(t){return{ok:!1,error:"unsupported",strategy:this.config.verifyStrategy??"unsupported",durationMs:0,approxTokensSpent:0,message:`Provider class "${this.name}" does not implement verifyCredential()`}}getModel(){return this.config.model}getAvailableModels(){return this.config.models?.length?[...new Set([this.config.model,...this.config.models.map(t=>t.id)])]:[this.config.model]}getModelDescriptor(t){let n=t??this.config.model,o=this.config.models?.find(r=>r.id===n);if(o)return o;if(n===this.config.model)return{id:this.config.model}}getBaseUrl(){return this.config.baseUrl}getApiKeyEnv(){return this.config.apiKeyEnv}getCapabilityProfile(){return V(this.config.capabilityProfile??ue)}getConfiguredReasoningCapability(t){let n=this.getModelDescriptor(t);return n?.reasoningCapability?n.reasoningCapability:Nt(this.config)}getReasoningCapability(t){return this.getConfiguredReasoningCapability(t)}getReasoningProfile(t){return this.getModelDescriptor(t)?.reasoningProfile??this.config.reasoningProfile}shouldFallbackForReasoningError(t,...n){let o=t instanceof Error?t.message.toLowerCase():String(t).toLowerCase(),s=n.map(u=>u.toLowerCase()).some(u=>o.includes(u)),a=o.includes("parameter")||s;return o.includes("unknown parameter")||o.includes("invalid parameter")||o.includes("unsupported")&&a}shouldFallbackForSpecificReasoningError(t,...n){let o=t instanceof Error?t.message.toLowerCase():String(t).toLowerCase();return n.map(a=>a.toLowerCase()).some(a=>o.includes(a))?o.includes("unknown parameter")||o.includes("invalid parameter")||o.includes("unsupported"):!1}shouldFallbackForForcedToolChoiceError(t){let n=Ze(t);return(n.includes("tool_choice")||n.includes("tool choice")||n.includes("toolchoice"))&&(n.includes("unknown parameter")||n.includes("invalid parameter")||n.includes("unsupported"))?!0:this.isServerError(t)}isServerError(t){let n=Fn(t);if(n!==void 0&&n>=500&&n<=599)return!0;let o=Ze(t);return o.includes("internal server error")||o.includes("server error")}getReasoningFallbackChain(t){switch(t){case"native-budget":return["native-budget","native-toggle","none"];case"native-effort":return["native-effort","none"];case"native-adaptive":return["native-adaptive","none"];case"native-toggle":return["native-toggle","none"];default:return["none"]}}getContextWindow(){return this.getEffectiveContextWindow()}getEffectiveContextWindow(t){let n=this.getModelDescriptor(t)?.contextWindow;return n!==void 0?n:this.config.contextWindow??2e5}getApiKey(){let t=process.env[this.config.apiKeyEnv];if(!t)throw new Error(`${this.config.apiKeyEnv} not set`);return t}shouldLogStreamDiagnostics(){return!!process.env.KODAX_DEBUG_STREAM}logStreamDiagnostic(...t){this.shouldLogStreamDiagnostics()&&console.error(...t)}normalizeReasoning(t){return Je(t)}validateExplicitReasoningEffort(t,n){if(t.effortSource!=="explicit")return;let o=t.effort;if(!o||o==="auto")return;let r=le.includes(o),s=this.getReasoningProfile(n);if(!s){if(o==="none"||r)return;let l=n?`/${n}`:"";throw new M(`${this.name}${l} does not advertise provider-specific reasoning effort "${o}". Supported stable efforts: ${le.join(", ")}.`,this.name)}if(s.localRejectEfforts?.includes(o)){let l=n?`/${n}`:"";throw new M(`${this.name}${l} does not support reasoning effort "${o}".`,this.name)}if(o==="none"||s.disabledEfforts?.includes(o)||s.allowCustomEffort)return;let a=s.supportedEfforts?.map(l=>l.value)??[],u=s.effortAliases?.[o]??o;if(a.includes(o)||a.includes(u)||a.length===0&&r)return;let c=n?`/${n}`:"",f=a.length>0?a.join(", "):le.join(", ");throw new M(`${this.name}${c} does not support reasoning effort "${o}". Supported efforts: ${f}.`,this.name)}resolveReasoningProfileIntent(t,n,o){let r=t.effort;if(r&&n.localRejectEfforts?.includes(r)){if(t.effortSource==="explicit"){let s=o?`/${o}`:"";throw new M(`${this.name}${s} does not support reasoning effort "${r}".`,this.name)}if(n.defaultEffort)return{disabled:!1,effort:n.defaultEffort,requestedEffort:r}}if(!t.enabled||r==="none"||r!==void 0&&n.disabledEfforts?.includes(r))return{disabled:!0,requestedEffort:r};if(!r||r==="auto"){if(yr(n)){let s=De({capability:n,explicitEffort:r??"auto"}).effectiveEffort;return s==="none"||s!==void 0&&n.disabledEfforts?.includes(s)?{disabled:!0,effort:s,requestedEffort:r}:{disabled:!1,effort:s,requestedEffort:r}}return{disabled:!1,requestedEffort:r}}return{disabled:!1,effort:n.effortAliases?.[r]??r,requestedEffort:r}}onStaleConnection(){}isRateLimitError(t){if(!(t instanceof Error))return!1;let n=t.message.toLowerCase();return["rate","limit","\u901F\u7387","\u9891\u7387","1302","429","too many","overload","overwhelmed","503","529","busy"].some(o=>n.includes(o))}classifyRateLimitReason(t){let n=t instanceof Error?t.message.toLowerCase():String(t).toLowerCase();return n.includes("overload")||n.includes("overwhelmed")||n.includes("503")||n.includes("529")||n.includes("busy")?"overloaded":"rate-limit"}extractRetryAfterMs(t){let n=Ye(t);if(!n)return;let o=qe(n,{attempt:0,withJitter:!1});return o.type==="header"?o.waitMs:void 0}parseContextOverflow(t){let n=Ze(t),o=[{regex:/(\d[\d,]*)\s*tokens?.*?(\d[\d,]*)\s*(?:maximum|limit|context)/i,inputGroup:1,limitGroup:2},{regex:/maximum.*?(\d[\d,]*)\s*tokens?.*?requested.*?(\d[\d,]*)/i,inputGroup:2,limitGroup:1},{regex:/exceeds?\s+.*?(\d[\d,]*)\s*.*?(?:limit|max|context|上限).*?(\d[\d,]*)/i,inputGroup:1,limitGroup:2}];for(let r of o){let s=n.match(r.regex);if(s){let a=Number(s[r.inputGroup].replace(/,/g,"")),u=Number(s[r.limitGroup].replace(/,/g,""));return Math.max(3e3,u-a-1e3)}}}isContextOverflowError(t){let n=Ze(t);return n.includes("prompt is too long")||n.includes("prompt too long")||n.includes("context length")||n.includes("context_length_exceeded")||n.includes("context window")||n.includes("context limit")||n.includes("\u4E0A\u4E0B\u6587\u957F\u5EA6")}async withRateLimit(t,n,o=3,r,s,a){let u=!1;this.suppressReasoningEffort=!1;for(let c=0;c<o;c++)try{let f=await t();return this.maxOutputTokensOverride=void 0,this.suppressReasoningEffort=!1,f}catch(f){if(this.isContextOverflowError(f)&&!this.maxOutputTokensOverride){let l=this.parseContextOverflow(f);if(l){this.maxOutputTokensOverride=l,r?.(c+1,o,0);continue}}if(this.isRateLimitError(f)){if(c===o-1)throw new Pe(`API rate limit exceeded after ${o} retries. Please wait and try again later.`,6e4);let l=Ye(f)??{},p=qe(l,{attempt:c,baseBackoffMs:500,maxBackoffMs:32e3,withJitter:!0}),g=p.waitMs,y=this.classifyRateLimitReason(f);if(s?.({provider:this.name,waitMs:g,reason:y,source:p.source,attempt:c+1,maxAttempts:o}),r?r(c+1,o,g):s||console.log(`[Rate Limit] Retrying in ${g/1e3}s (${c+1}/${o})...`),n?.aborted||(await vr(g,n),n?.aborted))throw et();continue}if(a&&!u){let l=Ft(f,a.effort);if(l){a.onRejected?.({provider:this.name,model:a.model,effort:l.rejectedEffort}),this.suppressReasoningEffort=!0,u=!0;continue}}if(a&&u){let l=Ft(f,a.effort);if(l)throw this.suppressReasoningEffort=!1,new Xe(`${this.name} rejected reasoning effort "${l.rejectedEffort}" even after dropping it.`,this.name,l.rejectedEffort,a.model)}if(f instanceof Error){if((f.name==="AbortError"||f.name==="APIUserAbortError")&&n?.aborted)throw f.name==="AbortError"?f:new DOMException(f.message||"Request aborted","AbortError");let l=Kn(f);throw(l==="ECONNRESET"||l==="EPIPE")&&this.onStaleConnection(),new M(`${this.name} API error: ${f.message}`,this.name)}throw f}throw new Q("Unexpected end of withRateLimit")}};import Pr from"@anthropic-ai/sdk";import{parse as kr}from"partial-json";function pe(e){if(!e)return{value:{},salvaged:!1};try{let t=JSON.parse(e);return{value:t&&typeof t=="object"&&!Array.isArray(t)?t:{},salvaged:!1}}catch{}try{let t=kr(e);return process.env.KODAX_DEBUG_TOOL_STREAM&&console.warn("[Tool Block Salvaged] partial JSON recovered, rawLength=",e.length),{value:t&&typeof t=="object"&&!Array.isArray(t)?t:{},salvaged:!0}}catch{return{value:{},salvaged:!0}}}i(pe,"parseToolInputWithSalvageTracked");function br(e){return pe(e).value}i(br,"parseToolInputWithSalvage");var Er={max_tokens:"truncated",length:"truncated",model_context_window_exceeded:"truncated",end_turn:"end",stop:"end",stop_sequence:"end",tool_use:"tool",tool_calls:"tool",function_call:"tool",pause_turn:"paused",refusal:"refused",content_filter:"refused"};function Un(e){return e==null?"unknown":Er[e.trim().toLowerCase()]??"unknown"}i(Un,"classifyStopReason");function ge(e){let t=Un(e);return t==="end"||t==="tool"||t==="paused"}i(ge,"isCleanStop");async function me(e){if(e.strategy==="unsupported")return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:"Provider does not support credential verification"};let t=e.runners.find(f=>f.strategy===e.strategy);if(!t)return{ok:!1,error:"unsupported",strategy:e.strategy,durationMs:0,approxTokensSpent:0,message:`verifyStrategy="${e.strategy}" is not implemented for this provider's base class`};if(e.signal?.aborted)return{ok:!1,error:"unknown",strategy:e.strategy,durationMs:0,approxTokensSpent:0,message:"caller aborted before verifyCredential started"};let n=new AbortController,o=e.timeoutMs??8e3,r,s=i(f=>{r||(r=f),n.abort()},"recordAbort"),a=setTimeout(()=>s("timeout"),o),u=i(()=>s("parent"),"onParentAbort");e.signal&&e.signal.addEventListener("abort",u,{once:!0});let c=Date.now();try{return await t.run(n.signal),{ok:!0,strategy:e.strategy,durationMs:Date.now()-c,approxTokensSpent:t.approxTokensSpent}}catch(f){return Ut(f,{strategy:e.strategy,durationMs:Date.now()-c,approxTokensSpent:0,abortCause:r,providerName:e.providerName})}finally{clearTimeout(a),e.signal&&e.signal.removeEventListener("abort",u)}}i(me,"runVerifyCredential");function xr(e){return e.replace(/\bsk-[A-Za-z0-9_-]{6,}/g,"sk-***")}i(xr,"redactKeyMaterial");function Ut(e,t){let n=e,o=n.status??n.statusCode??n.response?.status,r=xr(String(n.message??e)).slice(0,240),s=n.cause?.code??n.code,a=n.constructor?.name??"",u;return t.abortCause==="timeout"?u="timeout":t.abortCause==="parent"?u="unknown":a==="AuthenticationError"||a==="PermissionDeniedError"||o===401||o===403?u="unauthorized":o===429?u="rate_limited":o===400&&t.strategy==="count-tokens"&&t.providerName==="kimi-code"?u="unauthorized":o!==void 0&&o>=500&&o<600?u="server_error":s!==void 0&&/ENOTFOUND|ECONNREFUSED|ECONNRESET|EAI_AGAIN|EPIPE|ETIMEDOUT|ENETUNREACH|ENETDOWN|EHOSTUNREACH/i.test(s)?u="network":/timeout/i.test(r)?u="timeout":u="unknown",{ok:!1,error:u,status:o,message:r,durationMs:t.durationMs,approxTokensSpent:t.approxTokensSpent,strategy:t.strategy}}i(Ut,"classifyVerifyError");function Wt(e,t){let n=e[e.length-1];if(n&&he(n)&&n.hint===t)return e;let o=t?{type:"cache-boundary",hint:t}:{type:"cache-boundary"};return[...e,o]}i(Wt,"insertCacheBoundary");function he(e){if(typeof e!="object"||e===null||e.type!=="cache-boundary")return!1;let t=Object.keys(e);return t.length<=2&&t.every(n=>n==="type"||n==="hint")}i(he,"isCacheBoundary");function zt(e,t){let n=[];for(let o of e){if(he(o)){if(t==="attach"&&n.length>0){let r=n[n.length-1];n[n.length-1]={...r,cache_control:{type:"ephemeral"}}}continue}n.push(o)}return n}i(zt,"lowerCacheBoundaries");function Ie(e){return e.filter(t=>!he(t))}i(Ie,"stripCacheBoundaries");import{readFile as _r}from"node:fs/promises";import Tr from"node:path";var Cr={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"};function tt(e,t){return t??Cr[Tr.extname(e).toLowerCase()]??"image/png"}i(tt,"resolveImageMediaType");async function nt(e){return(await _r(e)).toString("base64")}i(nt,"readImageFileAsBase64");async function Wn(e,t){let n=tt(e,t),o=await nt(e);return`data:${n};base64,${o}`}i(Wn,"buildImageDataUrl");var Rr="KodaX",Sr="effort-2025-11-24";function wr(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":Rr}}i(wr,"getAnthropicCompatDefaultHeaders");function Xt(e,t){if(!e)return t;let n=e.input_tokens!==void 0&&e.input_tokens!==null||e.cache_creation_input_tokens!==void 0&&e.cache_creation_input_tokens!==null||e.cache_read_input_tokens!==void 0&&e.cache_read_input_tokens!==null,o=typeof e.input_tokens=="number"?e.input_tokens:n?0:t?.inputTokens??0,r=typeof e.cache_creation_input_tokens=="number"?e.cache_creation_input_tokens:n?0:t?.cachedWriteTokens??0,s=typeof e.cache_read_input_tokens=="number"?e.cache_read_input_tokens:n?0:t?.cachedReadTokens??0,a=typeof e.output_tokens=="number"?e.output_tokens:t?.outputTokens??0,u=n?o+r+s:t?.inputTokens??0;if(![u,a].some(c=>!Number.isFinite(c)||c<0))return{inputTokens:u,outputTokens:a,totalTokens:u+a,cachedReadTokens:s||void 0,cachedWriteTokens:r||void 0}}i(Xt,"normalizeAnthropicUsage");function Vt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(Vt,"isRecord");function Mr(e){if(!(!e.enabled||e.effort==="auto"||e.effort==="none"))return e.effort}i(Mr,"selectAnthropicOutputEffort");function zn(e,t){let n=Mr(t);if(!n)return;let o=e,r=o.output_config;o.output_config={...Vt(r)?r:{},effort:n}}i(zn,"applyAnthropicOutputEffort");function Xn(e,t){if(!t)return;let n=e,o=n.output_config;n.output_config={...Vt(o)?o:{},effort:t}}i(Xn,"setAnthropicOutputEffort");function Ar(e){let n=e.output_config;return Vt(n)&&typeof n.effort=="string"}i(Ar,"hasAnthropicOutputEffort");var B=class extends H{static{i(this,"KodaXAnthropicCompatProvider")}supportsThinking=!0;_client;get client(){return this._client??=this.buildClient()}set client(t){this._client=t}buildClient(){let t=wr(this.config);return new Pr({apiKey:this.getApiKey(),baseURL:this.config.baseUrl,...t?{defaultHeaders:t}:{}})}onStaleConnection(){this._client=void 0}buildMessageCreateOptions(t,n,o){let s=this.getReasoningProfile(n)?.requiresEffortBetaHeader&&Ar(t)?{"anthropic-beta":Sr}:void 0;return{...o?{signal:o}:{},...s?{headers:s}:{}}}applyReasoningProfile(t,n,o,r,s){if(this.suppressReasoningEffort)return;this.validateExplicitReasoningEffort(o,r);let a=this.resolveReasoningProfileIntent(o,n,r),u=n.reasoningPreset,c=t;if(u==="kimi-k2.7-code"||u==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(!(u==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only")){if(a.disabled){(u==="zai-glm-5.2"||u==="zai-glm-toggle"||u==="deepseek-v4-anthropic"||u==="deepseek-toggle"||u==="kimi-hybrid-toggle"||u==="minimax-m3"||u==="mimo-v2.5-toggle"||n.thinkingStrategy==="provider-toggle")&&(t.thinking={type:"disabled"});return}if(u==="zai-glm-5.2"){t.thinking={type:"enabled"},a.effort&&(c.reasoning_effort=a.effort);return}if(u==="deepseek-v4-anthropic"){t.thinking={type:"enabled"},Xn(t,a.effort);return}if(u==="minimax-m3"){t.thinking={type:"adaptive"};return}if(u==="zai-glm-toggle"||u==="deepseek-toggle"||u==="kimi-hybrid-toggle"||u==="mimo-v2.5-toggle"||n.effortStrategy==="provider-toggle"){t.thinking={type:"enabled"};return}if(n.effortStrategy==="anthropic-reasoning-effort"){t.thinking={type:"enabled"},a.effort&&(c.reasoning_effort=a.effort);return}if(n.effortStrategy==="anthropic-output-effort"||n.thinkingStrategy==="anthropic-adaptive"){t.thinking={type:"adaptive"},Xn(t,a.effort);return}if(n.effortStrategy==="provider-budget"||n.thinkingStrategy==="anthropic-budget"){let f=this.resolveReasoningProfileBudget(n,a.effort,o,r,s);t.thinking={type:"enabled",budget_tokens:f}}}}resolveReasoningProfileBudget(t,n,o,r,s){let u=(n?t.budgetByEffort?.[n]:void 0)??se(this.config,ie(o.effort),o.taskType),c=this.getEffectiveThinkingBudgetCap(r),f=c!==void 0?Math.min(u,c):u;return ae(f,s)}async verifyCredential(t){let n=this.config.model,o=this.client,r=[{strategy:"count-tokens",approxTokensSpent:0,run:i(async s=>{await o.messages.countTokens({model:n,messages:[{role:"user",content:"hi"}]},{signal:s})},"run")},{strategy:"models-list",approxTokensSpent:0,run:i(async s=>{await o.models.list({},{signal:s})},"run")},{strategy:"minimal-message",approxTokensSpent:7,run:i(async s=>{await o.messages.create({model:n,max_tokens:1,messages:[{role:"user",content:"hi"}]},{signal:s})},"run")}];return me({strategy:this.config.verifyStrategy??"count-tokens",runners:r,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}isPromptCacheDisabled(){let t=de()?.disablePromptCache;return t===!0?!0:t===!1?!1:process.env.KODAX_DISABLE_PROMPT_CACHE==="1"}applyCacheControlToSystem(t){if(!t.trim()||this.isPromptCacheDisabled())return t;let n=Wt([{type:"text",text:t}],"system");return zt(n,"attach")}applyCacheControlToTools(t){if(t.length===0||this.isPromptCacheDisabled())return t;let n=t.slice(),o=n[n.length-1];return n[n.length-1]={...o,cache_control:{type:"ephemeral"}},n}applyCacheControlToMessages(t){if(t.length===0||this.isPromptCacheDisabled())return t;let n=0,o=-1;for(let l=t.length-1;l>=0;l--)if(t[l].role==="user"&&(n+=1,n===2)){o=l;break}if(o===-1)return t;let r=t[o];if(typeof r.content=="string"||r.content.length===0)return t;let s=r.content,u={...s[s.length-1],cache_control:{type:"ephemeral"}},c=[...s.slice(0,-1),u],f=t.slice();return f[o]={...r,content:c},f}async stream(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.normalizeReasoning(r),c=s?.modelOverride??this.config.model;this.validateExplicitReasoningEffort(u,c);let f=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(c),l=this.applyCacheControlToMessages(await this.convertMessages(t,c)),p=u.enabled?this.getReasoningCapability(c):"none",g=this.getReasoningProfile(c),y=g?["profile","none"]:u.enabled?this.getReasoningFallbackChain(p).filter(_=>_==="native-budget"||_==="native-toggle"||_==="native-adaptive"||_==="none"):["none"],T=!!s?.forcedToolName,d=i(_=>{let P={model:c,max_tokens:f,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:l,tools:this.applyCacheControlToTools(n),stream:!0};if(s?.forcedToolName&&T&&(P.tool_choice={type:"tool",name:s.forcedToolName}),_!=="none")if(_==="profile"&&g)this.applyReasoningProfile(P,g,u,c,f);else if(_==="native-budget"){let D=se(this.config,ie(u.effort),u.taskType);P.thinking={type:"enabled",budget_tokens:ae(D,f)}}else _==="native-toggle"?P.thinking={type:"enabled"}:_==="native-adaptive"&&(P.thinking={type:"adaptive"},zn(P,u));return P},"buildRequest");if(a?.aborted)throw new DOMException("Request aborted","AbortError");let b=[],k=[],v=[],h,C=null,m="",E="",w="",j="",U="",F="",Y="",ee=!1,R,A=Date.now(),X=Date.now(),oe,Te;for(let _ of y){for(;!oe;)try{let P=d(_);oe=await this.client.messages.create(P,this.buildMessageCreateOptions(P,c,a))}catch(P){if(Te=P,T&&this.shouldFallbackForForcedToolChoiceError(P)){T=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let D=_==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:_==="native-budget"?["budget_tokens","thinking"]:_==="native-toggle"?["thinking"]:_==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(P,...D))throw P;break}if(oe)break}if(!oe)throw Te??new M("All reasoning capability attempts failed without a captured error",this.name);let Ce=Date.now(),ze=0,S=0,$=3e4;for await(let _ of oe){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let P=Date.now(),D=P-Ce;if(D>$&&(ze++,S+=D,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(D/1e3)}s gap before ${_.type}`,{stallCount:ze,totalStallMs:S,eventType:_.type})),Ce=P,_.type==="content_block_start"||_.type==="content_block_stop"?s?.onHeartbeat?.(!0):s?.onHeartbeat?.(),_.type==="content_block_start"){A=Date.now();let x=_.content_block;C=x.type,process.env.KODAX_DEBUG_TOOL_STREAM&&x.type==="tool_use"&&console.error("[ToolStream] content_block_start:",{type:x.type,id:x.id,name:x.name}),x.type==="thinking"?(E="",w=x.signature??""):x.type==="redacted_thinking"?(C="redacted_thinking",j=x.data??""):x.type==="text"?m="":x.type==="tool_use"&&(U=x.id,F=x.name,Y="")}else if(_.type==="content_block_delta"){A=Date.now();let x=_.delta;x.type==="thinking_delta"?(E+=x.thinking??"",s?.onThinkingDelta?.(x.thinking??"")):x.type==="text_delta"?(m+=x.text??"",s?.onTextDelta?.(x.text??"")):x.type==="input_json_delta"&&(Y+=x.partial_json??"",s?.onToolInputDelta?.(F,x.partial_json??"",U?{toolId:U}:void 0))}else if(_.type==="content_block_stop"){if(A=Date.now(),C==="thinking")E&&(v.push({type:"thinking",thinking:E,signature:w}),s?.onThinkingEnd?.(E));else if(C==="redacted_thinking")j&&v.push({type:"redacted_thinking",data:j}),j="";else if(C==="text")m&&b.push({type:"text",text:m});else if(C==="tool_use")if(!U||!F)process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Missing tool id or name:",{id:JSON.stringify(U),name:JSON.stringify(F),input:Y.slice(0,100)});else{let x=pe(Y);k.push({type:"tool_use",id:U,name:F,input:x.value,...x.salvaged?{_salvaged:!0,_truncated:!0}:{}})}C=null}else if(_.type==="message_stop"){if(ee=!0,A=Date.now(),process.env.KODAX_DEBUG_STREAM){let x=Date.now()-X;this.logStreamDiagnostic(`[Stream] message_stop received after ${x}ms`)}}else if(_.type==="message_delta"){A=Date.now(),h=Xt(_.usage,h);let x=_.delta;x?.stop_reason&&(R=x.stop_reason,process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic(`[Stream] message_delta with stop_reason: ${R}`))}else _.type==="message_start"&&(A=Date.now(),h=Xt(_.message?.usage,h),process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic("[Stream] message_start received"))}if(!ee){let _=Date.now()-X,P=Date.now()-A;if(a?.aborted){let D=a.reason instanceof Error?a.reason.message:typeof a.reason=="string"?a.reason:"Request aborted";throw this.logStreamDiagnostic("[Stream] Stream ended after abort before message_stop:",{duration:_,lastEventAge:P,reason:D,textBlocks:b.length,toolBlocks:k.length,thinkingBlocks:v.length}),new DOMException(D,"AbortError")}if(!R){let D=new Error(`Stream incomplete: message_stop event not received. Duration: ${_}ms, Last event: ${P}ms ago. This may indicate a network disconnection or API timeout.`);throw D.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:_,lastEventAge:P,textBlocks:b.length,toolBlocks:k.length,thinkingBlocks:v.length}),D}this.logStreamDiagnostic("[Stream] message_stop missing but stop_reason known \u2014 treating as complete:",{duration:_,lastEventAge:P,stopReason:R,textBlocks:b.length,toolBlocks:k.length,thinkingBlocks:v.length})}let O=ge(R)?k.map(({_truncated:_,...P})=>P):k;return{textBlocks:b,toolBlocks:O,thinkingBlocks:v,usage:h,stopReason:R}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}supportsNonStreamingFallback(){return!0}async complete(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.normalizeReasoning(r),c=s?.modelOverride??this.config.model;this.validateExplicitReasoningEffort(u,c);let f=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(c),l=this.applyCacheControlToMessages(await this.convertMessages(t,c)),p=u.enabled?this.getReasoningCapability(c):"none",g=this.getReasoningProfile(c),y=g?["profile","none"]:u.enabled?this.getReasoningFallbackChain(p).filter(m=>m==="native-budget"||m==="native-toggle"||m==="native-adaptive"||m==="none"):["none"],T=!!s?.forcedToolName,d=i(m=>{let E={model:c,max_tokens:f,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:l,tools:this.applyCacheControlToTools(n)};if(s?.forcedToolName&&T&&(E.tool_choice={type:"tool",name:s.forcedToolName}),m!=="none")if(m==="profile"&&g)this.applyReasoningProfile(E,g,u,c,f);else if(m==="native-budget"){let w=se(this.config,ie(u.effort),u.taskType);E.thinking={type:"enabled",budget_tokens:ae(w,f)}}else m==="native-toggle"?E.thinking={type:"enabled"}:m==="native-adaptive"&&(E.thinking={type:"adaptive"},zn(E,u));return E},"buildRequest"),b,k;for(let m of y){for(;!b;)try{let E=d(m);b=await this.client.messages.create(E,this.buildMessageCreateOptions(E,c,a))}catch(E){if(k=E,T&&this.shouldFallbackForForcedToolChoiceError(E)){T=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let w=m==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:m==="native-budget"?["budget_tokens","thinking"]:m==="native-toggle"?["thinking"]:m==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(E,...w))throw E;break}if(b)break}if(!b)throw k??new M("All reasoning capability attempts failed without a captured error",this.name);let v=[],h=[],C=[];for(let m of b.content)m.type==="text"?(v.push({type:"text",text:m.text}),s?.onTextDelta?.(m.text)):m.type==="thinking"?(C.push({type:"thinking",thinking:m.thinking,signature:m.signature??""}),s?.onThinkingDelta?.(m.thinking),s?.onThinkingEnd?.(m.thinking)):m.type==="redacted_thinking"?C.push({type:"redacted_thinking",data:m.data}):m.type==="tool_use"&&h.push({type:"tool_use",id:m.id,name:m.name,input:typeof m.input=="object"&&m.input!==null?m.input:{}});return{textBlocks:v,toolBlocks:h,thinkingBlocks:C,usage:Xt(b.usage),stopReason:b.stop_reason??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}serializeSystemMessageContent(t){if(typeof t=="string")return t.trim();for(let n of t)if(he(n))throw new M("cache-boundary marker reached system message serialization unlowered. Provider base class lowering must run before any wire-level serialization.",this.name);return t.filter(n=>n.type==="text").map(n=>n.text.trim()).filter(Boolean).join(`
|
|
2
|
+
import{a as i}from"./chunk-ONUPGMER.js";var Q=class extends Error{static{i(this,"KodaXError")}code;constructor(t,n="KODAX_ERROR"){super(t),this.code=n,this.name="KodaXError"}},M=class extends Q{static{i(this,"KodaXProviderError")}provider;constructor(t,n){super(t,"PROVIDER_ERROR"),this.provider=n,this.name="KodaXProviderError"}},Pe=class extends Q{static{i(this,"KodaXRateLimitError")}retryAfter;constructor(t,n){super(t,"RATE_LIMIT_ERROR"),this.retryAfter=n,this.name="KodaXRateLimitError"}},At=class extends Q{static{i(this,"KodaXNetworkError")}isTimeout;constructor(t,n=!1){super(t,"NETWORK_ERROR"),this.isTimeout=n,this.name="KodaXNetworkError"}},Xe=class extends M{static{i(this,"KodaXReasoningEffortRejectedError")}rejectedEffort;model;constructor(t,n,o,r){super(t,n),this.rejectedEffort=o,this.model=r,this.name="KodaXReasoningEffortRejectedError"}},Dt=class extends Q{static{i(this,"KodaXToolCallIdError")}constructor(t){super(t,"TOOL_CALL_ID_ERROR"),this.name="KodaXToolCallIdError"}};var Ot=32768,Uo=32e3,Wo=64e3,zo=.5;function Re(e,t,n={}){if(e===void 0)return;let o=n.allowZero===!0;if(!Number.isFinite(e)||(o?e<0:e<=0)){let r=o?"a non-negative finite number":"a positive finite number";throw new Error(`${t} must be ${r}`)}return e===0?0:Math.max(1,Math.floor(e*1e3))}i(Re,"timeoutSecToMs");function Xo(e){if(e===void 0||e.trim().length===0)return;let t=Number(e);if(!(!Number.isFinite(t)||t<=0))return Math.max(1,Math.floor(t*1e3))}i(Xo,"parseTimeoutSecEnvMs");function Vo(e){if(!e)return;let t={requestTimeoutMs:Re(e.requestTimeoutSec,"timeouts.llm.requestTimeoutSec"),streamIdleTimeoutMs:Re(e.streamIdleTimeoutSec,"timeouts.llm.streamIdleTimeoutSec",{allowZero:!0}),chunkTimeoutMs:Re(e.chunkTimeoutSec,"timeouts.llm.chunkTimeoutSec"),maxRetryDelayMs:Re(e.maxRetryDelaySec,"timeouts.llm.maxRetryDelaySec")};return Object.values(t).some(o=>o!==void 0)?t:void 0}i(Vo,"resolveLlmTimeoutConfig");function Ve(e,t){return`${e}/${t??""}`}i(Ve,"capabilityCacheKey");function It(e,t){if(t.length===0)return e;let n=new Set(t),o=e.defaultEffort!==void 0&&n.has(e.defaultEffort);return{...e,...o?{defaultEffort:void 0}:{},supportedEfforts:e.supportedEfforts?.filter(r=>!n.has(r.value)),localRejectEfforts:Array.from(new Set([...e.localRejectEfforts??[],...t]))}}i(It,"narrowReasoningProfile");function Go(e,t,n){return e[Ve(t,n)]?.rejected??[]}i(Go,"getRejectedEfforts");function Ho(e,t,n,o,r,s){let a=Ve(t,n),u=e[a],c=u?.rejected.includes(o)?u.rejected:[...u?.rejected??[],o];return{...e,[a]:{rejected:c,source:r,updatedAt:s}}}i(Ho,"addRejectedEffort");function Jo(e,t,n){if(!t)return{};let o={...e};return delete o[Ve(t,n)],o}i(Jo,"removeCacheEntry");function qo(e){if(!e||typeof e!="object")return{};let t={};for(let[n,o]of Object.entries(e)){if(!o||typeof o!="object")continue;let r=o,s=Array.isArray(r.rejected)?r.rejected.filter(c=>typeof c=="string"):[],a=r.source==="probed"?"probed":"observed",u=typeof r.updatedAt=="string"?r.updatedAt:"";t[n]={rejected:s,source:a,updatedAt:u}}return t}i(qo,"sanitizeCapabilityCache");var Yo=["off","auto","quick","balanced","deep"],le=["auto","none","low","medium","high"],Pn={low:6e3,medium:1e4,high:2e4},Rn=4096,$t=[{value:"none",description:"Disable thinking"},{value:"minimal",description:"Disable thinking",isUserVisible:!1},{value:"low",description:"Enable thinking"},{value:"medium",description:"Enable thinking",isDefault:!0},{value:"high",description:"Enable thinking"},{value:"xhigh",description:"Enable thinking"},{value:"max",description:"Enable thinking"}],Bt=[{value:"none",description:"Disable thinking"},{value:"minimal",description:"Disable thinking",isUserVisible:!1},{value:"low",description:"Alias to high"},{value:"medium",description:"Alias to high"},{value:"high",description:"High reasoning",isDefault:!0},{value:"xhigh",description:"Alias to max"},{value:"max",description:"Maximum reasoning"}],Qo=[{value:"low",description:"Thinking is always on"},{value:"medium",description:"Thinking is always on"},{value:"high",description:"Thinking is always on",isDefault:!0},{value:"xhigh",description:"Thinking is always on"},{value:"max",description:"Thinking is always on"}];function He(e,t={}){return{...Zo(e),...t,reasoningPreset:e}}i(He,"createReasoningProfileFromPreset");function Zo(e){switch(e){case"zai-glm-5.2":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"max",supportedEfforts:Bt,effortAliases:{low:"high",medium:"high",xhigh:"max"},disabledEfforts:["none","minimal"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"deepseek-v4-openai":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"high",supportedEfforts:Bt,effortAliases:{low:"high",medium:"high",xhigh:"max"},disabledEfforts:["none","minimal"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"deepseek-v4-anthropic":return{reasoningPreset:e,effortStrategy:"anthropic-output-effort",thinkingStrategy:"provider-toggle",defaultEffort:"high",supportedEfforts:Bt,effortAliases:{low:"high",medium:"high",xhigh:"max"},disabledEfforts:["none","minimal"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"zai-glm-toggle":case"deepseek-toggle":case"kimi-hybrid-toggle":case"mimo-v2.5-toggle":case"generic-thinking-toggle":return{reasoningPreset:e,effortStrategy:"provider-toggle",thinkingStrategy:"provider-toggle",supportedEfforts:$t,disabledEfforts:["none","minimal"],supportsDisabledThinking:!0};case"kimi-k2.7-code":case"minimax-m2-always":return{reasoningPreset:e,effortStrategy:"prompt-only",defaultEffort:"high",supportedEfforts:Qo,localRejectEfforts:["none","minimal"]};case"minimax-m3":return{reasoningPreset:e,effortStrategy:"provider-toggle",thinkingStrategy:"anthropic-adaptive",supportedEfforts:$t,disabledEfforts:["none","minimal"],supportsAdaptiveThinking:!0,supportsDisabledThinking:!0};case"qwen-hybrid-thinking":return{reasoningPreset:e,effortStrategy:"provider-budget",thinkingStrategy:"provider-budget",defaultEffort:"medium",supportedEfforts:$t,budgetByEffort:{low:6e3,medium:1e4,high:16e3,xhigh:24e3,max:32e3},disabledEfforts:["none","minimal"],supportsManualThinkingBudget:!0,supportsDisabledThinking:!0};case"claude-adaptive-xhigh":return{reasoningPreset:e,effortStrategy:"anthropic-output-effort",thinkingStrategy:"anthropic-adaptive",defaultEffort:"high",supportedEfforts:[{value:"low"},{value:"medium"},{value:"high",isDefault:!0},{value:"xhigh"},{value:"max"}],supportsReasoningEffort:!0,supportsAdaptiveThinking:!0};case"claude-adaptive-max":return{reasoningPreset:e,effortStrategy:"anthropic-output-effort",thinkingStrategy:"anthropic-adaptive",defaultEffort:"high",supportedEfforts:[{value:"low"},{value:"medium"},{value:"high",isDefault:!0},{value:"max"}],supportsReasoningEffort:!0,supportsAdaptiveThinking:!0};case"anthropic-budget":return{reasoningPreset:e,effortStrategy:"provider-budget",thinkingStrategy:"anthropic-budget",defaultEffort:"medium",supportedEfforts:[{value:"none"},{value:"low"},{value:"medium",isDefault:!0},{value:"high"}],budgetByEffort:{low:6e3,medium:1e4,high:16e3},disabledEfforts:["none"],supportsManualThinkingBudget:!0,supportsDisabledThinking:!0};case"openai-chat-reasoning":case"openai-responses-reasoning":return{reasoningPreset:e,effortStrategy:e==="openai-chat-reasoning"?"openai-chat-effort":"openai-responses-effort",defaultEffort:"medium",supportedEfforts:[{value:"none"},{value:"minimal"},{value:"low"},{value:"medium",isDefault:!0},{value:"high"},{value:"xhigh"}],disabledEfforts:["none"],supportsReasoningEffort:!0,supportsReasoningSummary:!0,supportsEncryptedReasoningReplay:!0};case"codex-cli-effort":return{reasoningPreset:e,effortStrategy:"codex-cli-config",defaultEffort:"medium",supportedEfforts:[{value:"none"},{value:"minimal"},{value:"low"},{value:"medium",isDefault:!0},{value:"high"},{value:"xhigh"}],allowCustomEffort:!0,supportsReasoningEffort:!0};case"none":return{reasoningPreset:e,effortStrategy:"none",thinkingStrategy:"none"}}}i(Zo,"createBaseReasoningProfileFromPreset");function Nt(e){return e.reasoningCapability?e.reasoningCapability:e.supportsThinking?"native-toggle":"prompt-only"}i(Nt,"getReasoningCapability");function fe(e){return Je(e).enabled}i(fe,"isReasoningEnabled");function Je(e){if(typeof e=="boolean")return{enabled:e,effort:e?"auto":"none",effortSource:"legacy",taskType:"unknown",executionMode:"implementation"};let t=e?.effort?Ae(e.effort):void 0,n=t??(e?.enabled===!0?"auto":"none");return{enabled:n!=="none",effort:n,effortSource:t!==void 0?"explicit":"legacy",taskType:e?.taskType??"unknown",executionMode:e?.executionMode??"implementation"}}i(Je,"normalizeReasoningRequest");function Ae(e){let t=e.trim().toLowerCase();if(!t)throw new Error("Reasoning effort cannot be empty.");if(/\s/.test(t))throw new Error(`Reasoning effort cannot contain whitespace: "${e}".`);return t==="off"?"none":t}i(Ae,"normalizeReasoningEffortValue");function Sn(e){switch(e){case"off":return"none";case"auto":return"auto";case"quick":return"low";case"balanced":return"medium";case"deep":return"high"}}i(Sn,"mapLegacyReasoningModeToEffortIntent");function er(e){switch(e){case"none":return"off";case"auto":return"auto";case"low":return"quick";case"medium":return"balanced";case"high":return"deep";default:return}}i(er,"effortToLegacyReasoningMode");function wn(e){let t=e?.trim();if(!t)return{kind:"unset"};let n=Ae(t);return n==="auto"||n==="unset"?{kind:"clear"}:{kind:"value",value:n}}i(wn,"parseReasoningEffortEnv");function De(e){let t=wn(e.envEffort),n=[];Se(n,e.explicitEffort,"explicit",!0),t.kind==="value"&&n.push({value:t.value,source:"env",isExplicit:!0}),Se(n,e.sessionEffort,"session",!1),e.legacyReasoningMode?n.push({value:Sn(e.legacyReasoningMode),source:"legacy",isExplicit:!1}):e.thinking!==void 0&&n.push({value:e.thinking?"auto":"none",source:"legacy",isExplicit:!1}),Se(n,e.modelDefaultEffort??e.capability?.defaultEffort??we(e.capability),"model-default",!1),Se(n,e.providerDefaultEffort,"provider-default",!1),Se(n,e.fallbackEffort??Me(e.capability),"fallback",!1);let o=n[0]??{value:"none",source:"fallback",isExplicit:!1};if(o.value==="auto")return{configuredEffort:"auto",effectiveEffort:nr(n.slice(1),e.capability),source:o.source,isExplicit:o.isExplicit,diagnostics:[]};let r=Mn(o.value,e.capability,o.isExplicit);return{configuredEffort:o.value,effectiveEffort:r,source:o.source,isExplicit:o.isExplicit,diagnostics:[]}}i(De,"resolveReasoningEffort");function tr(e){let t=e.currentEffort?Ae(e.currentEffort):void 0;if(t&&An(t,e.capability))return{effectiveEffort:Ge(t,e.capability),preserved:!0};let n=e.capability?.defaultEffort??we(e.capability)??Lt(e.capability)??Me(e.capability),o=n&&Ge(n,e.capability);return t?{effectiveEffort:o,preserved:!1,diagnostic:o?`Effort ${t} is not supported by the selected model; using ${o}.`:`Effort ${t} is not supported by the selected model; clearing effort.`}:{effectiveEffort:o,preserved:!1}}i(tr,"resolveReasoningEffortForModelSwitch");function Se(e,t,n,o){if(t===void 0)return;let r=Ae(t);e.push({value:r,source:n,isExplicit:o})}i(Se,"pushEffortCandidate");function nr(e,t){let n=e.find(o=>o.value!=="auto");return n?Mn(n.value,t,n.isExplicit):we(t)??Me(t)}i(nr,"resolveAutoEffectiveEffort");function Mn(e,t,n){if(t?.localRejectEfforts?.includes(e)){if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return we(t)??Lt(t)??Me(t)??e}if(e==="none")return e;if(An(e,t))return Ge(e,t);if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return we(t)??Lt(t)??Me(t)??e}i(Mn,"validateReasoningEffort");function Ge(e,t){return t?.effortAliases?.[e]??e}i(Ge,"applyEffortAlias");function An(e,t){if(t?.localRejectEfforts?.includes(e))return!1;if(e==="auto"||e==="none"||t?.allowCustomEffort===!0)return!0;let n=or(t);return n.length===0?le.includes(e):n.includes(e)||n.includes(Ge(e,t))}i(An,"isSupportedReasoningEffort");function or(e){return e?.supportedEfforts?.map(t=>t.value)??[]}i(or,"getSupportedEffortValues");function we(e){return e?.supportedEfforts?.find(t=>t.isDefault)?.value}i(we,"getDefaultPresetValue");function Lt(e){let t=e?.supportedEfforts?.filter(rr).map(n=>n.value);if(!(!t||t.length===0))return t[Math.floor((t.length-1)/2)]}i(Lt,"getMiddleVisiblePresetValue");function rr(e){return e.isUserVisible!==!1}i(rr,"isUserVisiblePreset");function Me(e){if(!e||e.effortStrategy==="none"||e.effortStrategy==="prompt-only")return"none";if(!(e.effortStrategy==="anthropic-output-effort"&&e.thinkingStrategy==="anthropic-adaptive"))return"medium"}i(Me,"getFallbackEffortForCapability");function ir(e){switch(e){case"quick":return"low";case"balanced":case"auto":return"medium";case"deep":return"high";default:return"off"}}i(ir,"getDefaultThinkingDepthForMode");function ie(e){switch(e){case"none":return"off";case"low":return"low";case void 0:case"medium":case"auto":return"medium";default:return"high"}}i(ie,"effortToThinkingDepth");function se(e,t,n="unknown"){if(t==="off")return 0;let o={...Pn,...e.defaultThinkingBudgets??{}},s=e.taskBudgetOverrides?.[n]?.[t]??o[t];return e.thinkingBudgetCap?Math.min(s,e.thinkingBudgetCap):s}i(se,"resolveThinkingBudget");function ae(e,t,n=Rn){let o=Math.max(1024,t-n);return Math.max(1024,Math.min(e,o))}i(ae,"clampThinkingBudget");function jt(e){switch(e){case"low":return"low";case"medium":return"medium";case"high":return"high";default:return}}i(jt,"mapDepthToOpenAIReasoningEffort");function Dn(e){if(!e||typeof e!="object")return;let t=e,n=t.status??t.statusCode??t.code;return typeof n=="number"&&Number.isInteger(n)?n:typeof n=="string"&&/^\d{3}$/.test(n)?Number(n):Dn(t.cause)}i(Dn,"getStatus");function sr(e){if(e instanceof Error)return e.message.toLowerCase();if(typeof e=="string")return e.toLowerCase();if(e&&typeof e=="object"){let t=e;return[t.message,t.error,t.detail,t.body].filter(o=>typeof o=="string").join(" ").toLowerCase()}return""}i(sr,"getMessage");var ar=["reasoning_effort","reasoning effort","reasoninglevel","reasoning_level","thinking"],ur=["unsupported","not supported","invalid","does not support","is not one of","not allowed","unknown","unexpected","unrecognized"],cr=["minimal","none","low","medium","high","xhigh","max"];function lr(e,t){for(let n of cr)if(new RegExp(`['"\`]${n}['"\`]`).test(e))return n;return t}i(lr,"extractRejectedEffort");function Ft(e,t){let n=Dn(e);if(n!==400&&n!==422)return null;let o=sr(e);if(!o)return null;let r=ar.some(u=>o.includes(u)),s=ur.some(u=>o.includes(u));if(!r||!s)return null;let a=lr(o,t);return a?{rejectedEffort:a}:null}i(Ft,"classifyReasoningEffortRejection");function On(e,t){if(!e)return;if(typeof e.get=="function")return e.get(t)??void 0;let n=e,o=t.toLowerCase(),r=n[t]??n[o]??n[o.replace(/\b\w/g,s=>s.toUpperCase())];if(r!==void 0)return Array.isArray(r)?r[0]:r}i(On,"readHeader");function In(e){if(!e)return;let t=e.trim();if(t.length===0)return;let n=Number(t);if(!(!Number.isFinite(n)||n<=0))return n}i(In,"parsePositiveNumber");function fr(e,t){if(!e)return;let n=e.trim();if(n.length===0)return;let o=Date.parse(n);if(!Number.isFinite(o))return;let r=o-t;return r>0?r:void 0}i(fr,"parseHttpDate");function qe(e,t){let n=t.baseBackoffMs??1e3,o=t.maxBackoffMs??3e4,r=t.maxHeaderWaitMs??12e4,s=t.now?t.now():Date.now(),a=In(On(e,"retry-after-ms"));if(a!==void 0){let g=Math.min(a,r);return{type:"header",waitMs:Math.round(g),source:"retry-after-ms",cappedFromHeader:g!==a}}let u=On(e,"retry-after");if(u!==void 0&&u.trim().length>0){let g=In(u);if(g!==void 0){let T=g*1e3,d=Math.min(T,r);return{type:"header",waitMs:Math.round(d),source:"retry-after-seconds",cappedFromHeader:d!==T}}let y=fr(u,s);if(y!==void 0){let T=Math.min(y,r);return{type:"header",waitMs:Math.round(T),source:"retry-after-date",cappedFromHeader:T!==y}}}let c=n*Math.pow(2,Math.max(0,t.attempt)),f=Math.min(c,o),p=t.withJitter!==!1?Math.random()*.25*f:0;return{type:"backoff",waitMs:Math.round(f+p),source:"exponential-backoff",attempt:t.attempt}}i(qe,"parseRetryAfter");function Ye(e){if(!e||typeof e!="object")return;let t=e;return t.headers??t.response?.headers??t.cause?.headers??t.cause?.response?.headers}i(Ye,"extractHeadersFromError");import{AsyncLocalStorage as dr}from"node:async_hooks";var $n=new dr,Bn=8,Ln=32;function pr(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isInteger(t)&&t>0?t:void 0}i(pr,"parsePositiveInt");function gr(){let e=de()?.workflow?.maxConcurrency,t=typeof e=="number"&&Number.isInteger(e)&&e>0?e:pr(process.env.KODAX_WORKFLOW_MAX_CONCURRENCY)??Bn;return Math.max(1,Math.min(Ln,t))}i(gr,"resolveWorkflowMaxConcurrency");function mr(e,t){return $n.run(e,t)}i(mr,"runWithScopedConfig");function de(){return $n.getStore()}i(de,"getRunScopedConfig");var ue={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},Nn={...ue,multimodalSupport:"image-input"},Oe={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},jn={...Oe,multimodalSupport:"image-input"};function Qe(e){return{transport:e.transport,conversationSemantics:e.conversationSemantics,mcpSupport:e.mcpSupport,contextFidelity:e.contextFidelity??"full",toolCallingFidelity:e.toolCallingFidelity??"full",sessionSupport:e.sessionSupport??"full",longRunningSupport:e.longRunningSupport??"full",multimodalSupport:e.multimodalSupport??"none",evidenceSupport:e.evidenceSupport??"full"}}i(Qe,"normalizeCapabilityProfile");function V(e){return{...Qe(e)}}i(V,"cloneCapabilityProfile");function hr(e){if(!e)return;let t=parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}i(hr,"parseEnvInt");function yr(e){switch(e.reasoningPreset){case"zai-glm-5.2":case"deepseek-v4-openai":case"deepseek-v4-anthropic":case"qwen-hybrid-thinking":return!0;default:break}return e.effortStrategy==="provider-budget"}i(yr,"shouldLowerAutoReasoningEffort");function et(){return new DOMException("Request aborted","AbortError")}i(et,"abortError");function vr(e,t){return e<=0?Promise.resolve():t?.aborted?Promise.reject(et()):new Promise((n,o)=>{let r,s=i(()=>{t&&t.removeEventListener("abort",a)},"cleanup"),a=i(()=>{r&&clearTimeout(r),s(),o(et())},"onAbort");t&&t.addEventListener("abort",a,{once:!0}),r=setTimeout(()=>{s(),n()},e)})}i(vr,"waitForRetryDelay");function Kt(e){if(typeof e=="number"&&Number.isInteger(e))return e;if(typeof e=="string"&&/^\d{3}$/.test(e))return Number(e)}i(Kt,"normalizeHttpStatus");function Fn(e){if(!e||typeof e!="object")return;let t=e;return Kt(t.status)??Kt(t.statusCode)??Kt(t.code)??Fn(t.cause)}i(Fn,"extractHttpStatus");function Kn(e){if(!e||typeof e!="object")return"";let t=e;return typeof t.code=="string"?t.code:Kn(t.cause)}i(Kn,"extractErrorCode");function Ze(e){if(e instanceof Error)return e.message.toLowerCase();if(e&&typeof e=="object"){let t=e.message;if(typeof t=="string")return t.toLowerCase()}return String(e).toLowerCase()}i(Ze,"getErrorMessage");var H=class{static{i(this,"KodaXBaseProvider")}maxOutputTokensOverride;suppressReasoningEffort=!1;setMaxOutputTokensOverride(t){this.maxOutputTokensOverride=t}getEffectiveMaxOutputTokens(t){if(this.maxOutputTokensOverride!==void 0)return this.maxOutputTokensOverride;let n=de()?.maxOutputTokens,o=(typeof n=="number"&&Number.isFinite(n)&&n>0?n:void 0)??hr(process.env.KODAX_MAX_OUTPUT_TOKENS);if(o!==void 0)return o;let r=this.getModelDescriptor(t)?.maxOutputTokens;return r!==void 0?r:this.config.maxOutputTokens??32768}getStreamMaxDurationMs(t){let n=this.getModelDescriptor(t)?.streamMaxDurationMs;return n!==void 0?n:this.config.streamMaxDurationMs}getEffectiveReplayReasoningContent(t){let n=this.getModelDescriptor(t)?.replayReasoningContent;return n!==void 0?n:this.config.replayReasoningContent??!1}getEffectiveStrictThinkingSignature(t){let n=this.getModelDescriptor(t)?.strictThinkingSignature;return n!==void 0?n:this.config.strictThinkingSignature??!1}getEffectiveThinkingBudgetCap(t){return this.getModelDescriptor(t)?.thinkingBudgetCap??this.config.thinkingBudgetCap}supportsNonStreamingFallback(){return!1}async complete(t,n,o,r,s,a){throw new M(`${this.name} does not support non-streaming fallback`)}isConfigured(){return!!process.env[this.config.apiKeyEnv]}async verifyCredential(t){return{ok:!1,error:"unsupported",strategy:this.config.verifyStrategy??"unsupported",durationMs:0,approxTokensSpent:0,message:`Provider class "${this.name}" does not implement verifyCredential()`}}getModel(){return this.config.model}getAvailableModels(){return this.config.models?.length?[...new Set([this.config.model,...this.config.models.map(t=>t.id)])]:[this.config.model]}getModelDescriptor(t){let n=t??this.config.model,o=this.config.models?.find(r=>r.id===n);if(o)return o;if(n===this.config.model)return{id:this.config.model}}getBaseUrl(){return this.config.baseUrl}getApiKeyEnv(){return this.config.apiKeyEnv}getCapabilityProfile(){return V(this.config.capabilityProfile??ue)}getConfiguredReasoningCapability(t){let n=this.getModelDescriptor(t);return n?.reasoningCapability?n.reasoningCapability:Nt(this.config)}getReasoningCapability(t){return this.getConfiguredReasoningCapability(t)}getReasoningProfile(t){return this.getModelDescriptor(t)?.reasoningProfile??this.config.reasoningProfile}shouldFallbackForReasoningError(t,...n){let o=t instanceof Error?t.message.toLowerCase():String(t).toLowerCase(),s=n.map(u=>u.toLowerCase()).some(u=>o.includes(u)),a=o.includes("parameter")||s;return o.includes("unknown parameter")||o.includes("invalid parameter")||o.includes("unsupported")&&a}shouldFallbackForSpecificReasoningError(t,...n){let o=t instanceof Error?t.message.toLowerCase():String(t).toLowerCase();return n.map(a=>a.toLowerCase()).some(a=>o.includes(a))?o.includes("unknown parameter")||o.includes("invalid parameter")||o.includes("unsupported"):!1}shouldFallbackForForcedToolChoiceError(t){let n=Ze(t);return(n.includes("tool_choice")||n.includes("tool choice")||n.includes("toolchoice"))&&(n.includes("unknown parameter")||n.includes("invalid parameter")||n.includes("unsupported"))?!0:this.isServerError(t)}isServerError(t){let n=Fn(t);if(n!==void 0&&n>=500&&n<=599)return!0;let o=Ze(t);return o.includes("internal server error")||o.includes("server error")}getReasoningFallbackChain(t){switch(t){case"native-budget":return["native-budget","native-toggle","none"];case"native-effort":return["native-effort","none"];case"native-adaptive":return["native-adaptive","none"];case"native-toggle":return["native-toggle","none"];default:return["none"]}}getContextWindow(){return this.getEffectiveContextWindow()}getEffectiveContextWindow(t){let n=this.getModelDescriptor(t)?.contextWindow;return n!==void 0?n:this.config.contextWindow??2e5}getApiKey(){let t=process.env[this.config.apiKeyEnv];if(!t)throw new Error(`${this.config.apiKeyEnv} not set`);return t}shouldLogStreamDiagnostics(){return!!process.env.KODAX_DEBUG_STREAM}logStreamDiagnostic(...t){this.shouldLogStreamDiagnostics()&&console.error(...t)}normalizeReasoning(t){return Je(t)}validateExplicitReasoningEffort(t,n){if(t.effortSource!=="explicit")return;let o=t.effort;if(!o||o==="auto")return;let r=le.includes(o),s=this.getReasoningProfile(n);if(!s){if(o==="none"||r)return;let l=n?`/${n}`:"";throw new M(`${this.name}${l} does not advertise provider-specific reasoning effort "${o}". Supported stable efforts: ${le.join(", ")}.`,this.name)}if(s.localRejectEfforts?.includes(o)){let l=n?`/${n}`:"";throw new M(`${this.name}${l} does not support reasoning effort "${o}".`,this.name)}if(o==="none"||s.disabledEfforts?.includes(o)||s.allowCustomEffort)return;let a=s.supportedEfforts?.map(l=>l.value)??[],u=s.effortAliases?.[o]??o;if(a.includes(o)||a.includes(u)||a.length===0&&r)return;let c=n?`/${n}`:"",f=a.length>0?a.join(", "):le.join(", ");throw new M(`${this.name}${c} does not support reasoning effort "${o}". Supported efforts: ${f}.`,this.name)}resolveReasoningProfileIntent(t,n,o){let r=t.effort;if(r&&n.localRejectEfforts?.includes(r)){if(t.effortSource==="explicit"){let s=o?`/${o}`:"";throw new M(`${this.name}${s} does not support reasoning effort "${r}".`,this.name)}if(n.defaultEffort)return{disabled:!1,effort:n.defaultEffort,requestedEffort:r}}if(!t.enabled||r==="none"||r!==void 0&&n.disabledEfforts?.includes(r))return{disabled:!0,requestedEffort:r};if(!r||r==="auto"){if(yr(n)){let s=De({capability:n,explicitEffort:r??"auto"}).effectiveEffort;return s==="none"||s!==void 0&&n.disabledEfforts?.includes(s)?{disabled:!0,effort:s,requestedEffort:r}:{disabled:!1,effort:s,requestedEffort:r}}return{disabled:!1,requestedEffort:r}}return{disabled:!1,effort:n.effortAliases?.[r]??r,requestedEffort:r}}onStaleConnection(){}isRateLimitError(t){if(!(t instanceof Error))return!1;let n=t.message.toLowerCase();return["rate","limit","\u901F\u7387","\u9891\u7387","1302","429","too many","overload","overwhelmed","503","529","busy"].some(o=>n.includes(o))}classifyRateLimitReason(t){let n=t instanceof Error?t.message.toLowerCase():String(t).toLowerCase();return n.includes("overload")||n.includes("overwhelmed")||n.includes("503")||n.includes("529")||n.includes("busy")?"overloaded":"rate-limit"}extractRetryAfterMs(t){let n=Ye(t);if(!n)return;let o=qe(n,{attempt:0,withJitter:!1});return o.type==="header"?o.waitMs:void 0}parseContextOverflow(t){let n=Ze(t),o=[{regex:/(\d[\d,]*)\s*tokens?.*?(\d[\d,]*)\s*(?:maximum|limit|context)/i,inputGroup:1,limitGroup:2},{regex:/maximum.*?(\d[\d,]*)\s*tokens?.*?requested.*?(\d[\d,]*)/i,inputGroup:2,limitGroup:1},{regex:/exceeds?\s+.*?(\d[\d,]*)\s*.*?(?:limit|max|context|上限).*?(\d[\d,]*)/i,inputGroup:1,limitGroup:2}];for(let r of o){let s=n.match(r.regex);if(s){let a=Number(s[r.inputGroup].replace(/,/g,"")),u=Number(s[r.limitGroup].replace(/,/g,""));return Math.max(3e3,u-a-1e3)}}}isContextOverflowError(t){let n=Ze(t);return n.includes("prompt is too long")||n.includes("prompt too long")||n.includes("context length")||n.includes("context_length_exceeded")||n.includes("context window")||n.includes("context limit")||n.includes("\u4E0A\u4E0B\u6587\u957F\u5EA6")}async withRateLimit(t,n,o=3,r,s,a){let u=!1;this.suppressReasoningEffort=!1;for(let c=0;c<o;c++)try{let f=await t();return this.maxOutputTokensOverride=void 0,this.suppressReasoningEffort=!1,f}catch(f){if(this.isContextOverflowError(f)&&!this.maxOutputTokensOverride){let l=this.parseContextOverflow(f);if(l){this.maxOutputTokensOverride=l,r?.(c+1,o,0);continue}}if(this.isRateLimitError(f)){if(c===o-1)throw new Pe(`API rate limit exceeded after ${o} retries. Please wait and try again later.`,6e4);let l=Ye(f)??{},p=qe(l,{attempt:c,baseBackoffMs:500,maxBackoffMs:32e3,withJitter:!0}),g=p.waitMs,y=this.classifyRateLimitReason(f);if(s?.({provider:this.name,waitMs:g,reason:y,source:p.source,attempt:c+1,maxAttempts:o}),r?r(c+1,o,g):s||console.log(`[Rate Limit] Retrying in ${g/1e3}s (${c+1}/${o})...`),n?.aborted||(await vr(g,n),n?.aborted))throw et();continue}if(a&&!u){let l=Ft(f,a.effort);if(l){a.onRejected?.({provider:this.name,model:a.model,effort:l.rejectedEffort}),this.suppressReasoningEffort=!0,u=!0;continue}}if(a&&u){let l=Ft(f,a.effort);if(l)throw this.suppressReasoningEffort=!1,new Xe(`${this.name} rejected reasoning effort "${l.rejectedEffort}" even after dropping it.`,this.name,l.rejectedEffort,a.model)}if(f instanceof Error){if((f.name==="AbortError"||f.name==="APIUserAbortError")&&n?.aborted)throw f.name==="AbortError"?f:new DOMException(f.message||"Request aborted","AbortError");let l=Kn(f);throw(l==="ECONNRESET"||l==="EPIPE")&&this.onStaleConnection(),new M(`${this.name} API error: ${f.message}`,this.name)}throw f}throw new Q("Unexpected end of withRateLimit")}};import Pr from"@anthropic-ai/sdk";import{parse as kr}from"partial-json";function pe(e){if(!e)return{value:{},salvaged:!1};try{let t=JSON.parse(e);return{value:t&&typeof t=="object"&&!Array.isArray(t)?t:{},salvaged:!1}}catch{}try{let t=kr(e);return process.env.KODAX_DEBUG_TOOL_STREAM&&console.warn("[Tool Block Salvaged] partial JSON recovered, rawLength=",e.length),{value:t&&typeof t=="object"&&!Array.isArray(t)?t:{},salvaged:!0}}catch{return{value:{},salvaged:!0}}}i(pe,"parseToolInputWithSalvageTracked");function br(e){return pe(e).value}i(br,"parseToolInputWithSalvage");var Er={max_tokens:"truncated",length:"truncated",model_context_window_exceeded:"truncated",end_turn:"end",stop:"end",stop_sequence:"end",tool_use:"tool",tool_calls:"tool",function_call:"tool",pause_turn:"paused",refusal:"refused",content_filter:"refused"};function Un(e){return e==null?"unknown":Er[e.trim().toLowerCase()]??"unknown"}i(Un,"classifyStopReason");function ge(e){let t=Un(e);return t==="end"||t==="tool"||t==="paused"}i(ge,"isCleanStop");async function me(e){if(e.strategy==="unsupported")return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:"Provider does not support credential verification"};let t=e.runners.find(f=>f.strategy===e.strategy);if(!t)return{ok:!1,error:"unsupported",strategy:e.strategy,durationMs:0,approxTokensSpent:0,message:`verifyStrategy="${e.strategy}" is not implemented for this provider's base class`};if(e.signal?.aborted)return{ok:!1,error:"unknown",strategy:e.strategy,durationMs:0,approxTokensSpent:0,message:"caller aborted before verifyCredential started"};let n=new AbortController,o=e.timeoutMs??8e3,r,s=i(f=>{r||(r=f),n.abort()},"recordAbort"),a=setTimeout(()=>s("timeout"),o),u=i(()=>s("parent"),"onParentAbort");e.signal&&e.signal.addEventListener("abort",u,{once:!0});let c=Date.now();try{return await t.run(n.signal),{ok:!0,strategy:e.strategy,durationMs:Date.now()-c,approxTokensSpent:t.approxTokensSpent}}catch(f){return Ut(f,{strategy:e.strategy,durationMs:Date.now()-c,approxTokensSpent:0,abortCause:r,providerName:e.providerName})}finally{clearTimeout(a),e.signal&&e.signal.removeEventListener("abort",u)}}i(me,"runVerifyCredential");function xr(e){return e.replace(/\bsk-[A-Za-z0-9_-]{6,}/g,"sk-***")}i(xr,"redactKeyMaterial");function Ut(e,t){let n=e,o=n.status??n.statusCode??n.response?.status,r=xr(String(n.message??e)).slice(0,240),s=n.cause?.code??n.code,a=n.constructor?.name??"",u;return t.abortCause==="timeout"?u="timeout":t.abortCause==="parent"?u="unknown":a==="AuthenticationError"||a==="PermissionDeniedError"||o===401||o===403?u="unauthorized":o===429?u="rate_limited":o===400&&t.strategy==="count-tokens"&&t.providerName==="kimi-code"?u="unauthorized":o!==void 0&&o>=500&&o<600?u="server_error":s!==void 0&&/ENOTFOUND|ECONNREFUSED|ECONNRESET|EAI_AGAIN|EPIPE|ETIMEDOUT|ENETUNREACH|ENETDOWN|EHOSTUNREACH/i.test(s)?u="network":/timeout/i.test(r)?u="timeout":u="unknown",{ok:!1,error:u,status:o,message:r,durationMs:t.durationMs,approxTokensSpent:t.approxTokensSpent,strategy:t.strategy}}i(Ut,"classifyVerifyError");function Wt(e,t){let n=e[e.length-1];if(n&&he(n)&&n.hint===t)return e;let o=t?{type:"cache-boundary",hint:t}:{type:"cache-boundary"};return[...e,o]}i(Wt,"insertCacheBoundary");function he(e){if(typeof e!="object"||e===null||e.type!=="cache-boundary")return!1;let t=Object.keys(e);return t.length<=2&&t.every(n=>n==="type"||n==="hint")}i(he,"isCacheBoundary");function zt(e,t){let n=[];for(let o of e){if(he(o)){if(t==="attach"&&n.length>0){let r=n[n.length-1];n[n.length-1]={...r,cache_control:{type:"ephemeral"}}}continue}n.push(o)}return n}i(zt,"lowerCacheBoundaries");function Ie(e){return e.filter(t=>!he(t))}i(Ie,"stripCacheBoundaries");import{readFile as _r}from"node:fs/promises";import Tr from"node:path";var Cr={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"};function tt(e,t){return t??Cr[Tr.extname(e).toLowerCase()]??"image/png"}i(tt,"resolveImageMediaType");async function nt(e){return(await _r(e)).toString("base64")}i(nt,"readImageFileAsBase64");async function Wn(e,t){let n=tt(e,t),o=await nt(e);return`data:${n};base64,${o}`}i(Wn,"buildImageDataUrl");var Rr="KodaX",Sr="effort-2025-11-24";function wr(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":Rr}}i(wr,"getAnthropicCompatDefaultHeaders");function Xt(e,t){if(!e)return t;let n=e.input_tokens!==void 0&&e.input_tokens!==null||e.cache_creation_input_tokens!==void 0&&e.cache_creation_input_tokens!==null||e.cache_read_input_tokens!==void 0&&e.cache_read_input_tokens!==null,o=typeof e.input_tokens=="number"?e.input_tokens:n?0:t?.inputTokens??0,r=typeof e.cache_creation_input_tokens=="number"?e.cache_creation_input_tokens:n?0:t?.cachedWriteTokens??0,s=typeof e.cache_read_input_tokens=="number"?e.cache_read_input_tokens:n?0:t?.cachedReadTokens??0,a=typeof e.output_tokens=="number"?e.output_tokens:t?.outputTokens??0,u=n?o+r+s:t?.inputTokens??0;if(![u,a].some(c=>!Number.isFinite(c)||c<0))return{inputTokens:u,outputTokens:a,totalTokens:u+a,cachedReadTokens:s||void 0,cachedWriteTokens:r||void 0}}i(Xt,"normalizeAnthropicUsage");function Vt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(Vt,"isRecord");function Mr(e){if(!(!e.enabled||e.effort==="auto"||e.effort==="none"))return e.effort}i(Mr,"selectAnthropicOutputEffort");function zn(e,t){let n=Mr(t);if(!n)return;let o=e,r=o.output_config;o.output_config={...Vt(r)?r:{},effort:n}}i(zn,"applyAnthropicOutputEffort");function Xn(e,t){if(!t)return;let n=e,o=n.output_config;n.output_config={...Vt(o)?o:{},effort:t}}i(Xn,"setAnthropicOutputEffort");function Ar(e){let n=e.output_config;return Vt(n)&&typeof n.effort=="string"}i(Ar,"hasAnthropicOutputEffort");var B=class extends H{static{i(this,"KodaXAnthropicCompatProvider")}supportsThinking=!0;_client;get client(){return this._client??=this.buildClient()}set client(t){this._client=t}buildClient(){let t=wr(this.config);return new Pr({apiKey:this.getApiKey(),baseURL:this.config.baseUrl,...t?{defaultHeaders:t}:{}})}onStaleConnection(){this._client=void 0}buildMessageCreateOptions(t,n,o){let s=this.getReasoningProfile(n)?.requiresEffortBetaHeader&&Ar(t)?{"anthropic-beta":Sr}:void 0;return{...o?{signal:o}:{},...s?{headers:s}:{}}}applyReasoningProfile(t,n,o,r,s){if(this.suppressReasoningEffort)return;this.validateExplicitReasoningEffort(o,r);let a=this.resolveReasoningProfileIntent(o,n,r),u=n.reasoningPreset,c=t;if(u==="kimi-k2.7-code"||u==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(!(u==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only")){if(a.disabled){(u==="zai-glm-5.2"||u==="zai-glm-toggle"||u==="deepseek-v4-anthropic"||u==="deepseek-toggle"||u==="kimi-hybrid-toggle"||u==="minimax-m3"||u==="mimo-v2.5-toggle"||n.thinkingStrategy==="provider-toggle")&&(t.thinking={type:"disabled"});return}if(u==="zai-glm-5.2"){t.thinking={type:"enabled"},a.effort&&(c.reasoning_effort=a.effort);return}if(u==="deepseek-v4-anthropic"){t.thinking={type:"enabled"},Xn(t,a.effort);return}if(u==="minimax-m3"){t.thinking={type:"adaptive"};return}if(u==="zai-glm-toggle"||u==="deepseek-toggle"||u==="kimi-hybrid-toggle"||u==="mimo-v2.5-toggle"||n.effortStrategy==="provider-toggle"){t.thinking={type:"enabled"};return}if(n.effortStrategy==="anthropic-reasoning-effort"){t.thinking={type:"enabled"},a.effort&&(c.reasoning_effort=a.effort);return}if(n.effortStrategy==="anthropic-output-effort"||n.thinkingStrategy==="anthropic-adaptive"){t.thinking={type:"adaptive"},Xn(t,a.effort);return}if(n.effortStrategy==="provider-budget"||n.thinkingStrategy==="anthropic-budget"){let f=this.resolveReasoningProfileBudget(n,a.effort,o,r,s);t.thinking={type:"enabled",budget_tokens:f}}}}resolveReasoningProfileBudget(t,n,o,r,s){let u=(n?t.budgetByEffort?.[n]:void 0)??se(this.config,ie(o.effort),o.taskType),c=this.getEffectiveThinkingBudgetCap(r),f=c!==void 0?Math.min(u,c):u;return ae(f,s)}async verifyCredential(t){let n=this.config.model,o=this.client,r=[{strategy:"count-tokens",approxTokensSpent:0,run:i(async s=>{await o.messages.countTokens({model:n,messages:[{role:"user",content:"hi"}]},{signal:s})},"run")},{strategy:"models-list",approxTokensSpent:0,run:i(async s=>{await o.models.list({},{signal:s})},"run")},{strategy:"minimal-message",approxTokensSpent:7,run:i(async s=>{await o.messages.create({model:n,max_tokens:1,messages:[{role:"user",content:"hi"}]},{signal:s})},"run")}];return me({strategy:this.config.verifyStrategy??"count-tokens",runners:r,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}isPromptCacheDisabled(){let t=de()?.disablePromptCache;return t===!0?!0:t===!1?!1:process.env.KODAX_DISABLE_PROMPT_CACHE==="1"}applyCacheControlToSystem(t){if(!t.trim()||this.isPromptCacheDisabled())return t;let n=Wt([{type:"text",text:t}],"system");return zt(n,"attach")}applyCacheControlToTools(t){if(t.length===0||this.isPromptCacheDisabled())return t;let n=t.slice(),o=n[n.length-1];return n[n.length-1]={...o,cache_control:{type:"ephemeral"}},n}applyCacheControlToMessages(t){if(t.length===0||this.isPromptCacheDisabled())return t;let n=0,o=-1;for(let l=t.length-1;l>=0;l--)if(t[l].role==="user"&&(n+=1,n===2)){o=l;break}if(o===-1)return t;let r=t[o];if(typeof r.content=="string"||r.content.length===0)return t;let s=r.content,u={...s[s.length-1],cache_control:{type:"ephemeral"}},c=[...s.slice(0,-1),u],f=t.slice();return f[o]={...r,content:c},f}async stream(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.normalizeReasoning(r),c=s?.modelOverride??this.config.model;this.validateExplicitReasoningEffort(u,c);let f=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(c),l=this.applyCacheControlToMessages(await this.convertMessages(t,c)),p=u.enabled?this.getReasoningCapability(c):"none",g=this.getReasoningProfile(c),y=g?["profile","none"]:u.enabled?this.getReasoningFallbackChain(p).filter(_=>_==="native-budget"||_==="native-toggle"||_==="native-adaptive"||_==="none"):["none"],T=!!s?.forcedToolName,d=i(_=>{let P={model:c,max_tokens:f,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:l,tools:this.applyCacheControlToTools(n),stream:!0};if(s?.forcedToolName&&T&&(P.tool_choice={type:"tool",name:s.forcedToolName}),_!=="none")if(_==="profile"&&g)this.applyReasoningProfile(P,g,u,c,f);else if(_==="native-budget"){let D=se(this.config,ie(u.effort),u.taskType);P.thinking={type:"enabled",budget_tokens:ae(D,f)}}else _==="native-toggle"?P.thinking={type:"enabled"}:_==="native-adaptive"&&(P.thinking={type:"adaptive"},zn(P,u));return P},"buildRequest");if(a?.aborted)throw new DOMException("Request aborted","AbortError");let b=[],k=[],v=[],h,C=null,m="",E="",w="",j="",U="",F="",Y="",ee=!1,R,A=Date.now(),X=Date.now(),oe,Te;for(let _ of y){for(;!oe;)try{let P=d(_);oe=await this.client.messages.create(P,this.buildMessageCreateOptions(P,c,a))}catch(P){if(Te=P,T&&this.shouldFallbackForForcedToolChoiceError(P)){T=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let D=_==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:_==="native-budget"?["budget_tokens","thinking"]:_==="native-toggle"?["thinking"]:_==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(P,...D))throw P;break}if(oe)break}if(!oe)throw Te??new M("All reasoning capability attempts failed without a captured error",this.name);let Ce=Date.now(),ze=0,S=0,$=3e4;for await(let _ of oe){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let P=Date.now(),D=P-Ce;if(D>$&&(ze++,S+=D,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(D/1e3)}s gap before ${_.type}`,{stallCount:ze,totalStallMs:S,eventType:_.type})),Ce=P,_.type==="content_block_start"||_.type==="content_block_stop"?s?.onHeartbeat?.(!0):s?.onHeartbeat?.(),_.type==="content_block_start"){A=Date.now();let x=_.content_block;C=x.type,process.env.KODAX_DEBUG_TOOL_STREAM&&x.type==="tool_use"&&console.error("[ToolStream] content_block_start:",{type:x.type,id:x.id,name:x.name}),x.type==="thinking"?(E="",w=x.signature??""):x.type==="redacted_thinking"?(C="redacted_thinking",j=x.data??""):x.type==="text"?m="":x.type==="tool_use"&&(U=x.id,F=x.name,Y="")}else if(_.type==="content_block_delta"){A=Date.now();let x=_.delta;x.type==="thinking_delta"?(E+=x.thinking??"",s?.onThinkingDelta?.(x.thinking??"")):x.type==="text_delta"?(m+=x.text??"",s?.onTextDelta?.(x.text??"")):x.type==="input_json_delta"&&(Y+=x.partial_json??"",s?.onToolInputDelta?.(F,x.partial_json??"",U?{toolId:U}:void 0))}else if(_.type==="content_block_stop"){if(A=Date.now(),C==="thinking")E&&(v.push({type:"thinking",thinking:E,signature:w}),s?.onThinkingEnd?.(E));else if(C==="redacted_thinking")j&&v.push({type:"redacted_thinking",data:j}),j="";else if(C==="text")m&&b.push({type:"text",text:m});else if(C==="tool_use")if(!U||!F)process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Missing tool id or name:",{id:JSON.stringify(U),name:JSON.stringify(F),input:Y.slice(0,100)});else{let x=pe(Y);k.push({type:"tool_use",id:U,name:F,input:x.value,...x.salvaged?{_salvaged:!0,_truncated:!0}:{}})}C=null}else if(_.type==="message_stop"){if(ee=!0,A=Date.now(),process.env.KODAX_DEBUG_STREAM){let x=Date.now()-X;this.logStreamDiagnostic(`[Stream] message_stop received after ${x}ms`)}}else if(_.type==="message_delta"){A=Date.now(),h=Xt(_.usage,h);let x=_.delta;x?.stop_reason&&(R=x.stop_reason,process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic(`[Stream] message_delta with stop_reason: ${R}`))}else _.type==="message_start"&&(A=Date.now(),h=Xt(_.message?.usage,h),process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic("[Stream] message_start received"))}if(!ee){let _=Date.now()-X,P=Date.now()-A;if(a?.aborted){let D=a.reason instanceof Error?a.reason.message:typeof a.reason=="string"?a.reason:"Request aborted";throw this.logStreamDiagnostic("[Stream] Stream ended after abort before message_stop:",{duration:_,lastEventAge:P,reason:D,textBlocks:b.length,toolBlocks:k.length,thinkingBlocks:v.length}),new DOMException(D,"AbortError")}if(!R){let D=new Error(`Stream incomplete: message_stop event not received. Duration: ${_}ms, Last event: ${P}ms ago. This may indicate a network disconnection or API timeout.`);throw D.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:_,lastEventAge:P,textBlocks:b.length,toolBlocks:k.length,thinkingBlocks:v.length}),D}this.logStreamDiagnostic("[Stream] message_stop missing but stop_reason known \u2014 treating as complete:",{duration:_,lastEventAge:P,stopReason:R,textBlocks:b.length,toolBlocks:k.length,thinkingBlocks:v.length})}let O=ge(R)?k.map(({_truncated:_,...P})=>P):k;return{textBlocks:b,toolBlocks:O,thinkingBlocks:v,usage:h,stopReason:R}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}supportsNonStreamingFallback(){return!0}async complete(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.normalizeReasoning(r),c=s?.modelOverride??this.config.model;this.validateExplicitReasoningEffort(u,c);let f=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(c),l=this.applyCacheControlToMessages(await this.convertMessages(t,c)),p=u.enabled?this.getReasoningCapability(c):"none",g=this.getReasoningProfile(c),y=g?["profile","none"]:u.enabled?this.getReasoningFallbackChain(p).filter(m=>m==="native-budget"||m==="native-toggle"||m==="native-adaptive"||m==="none"):["none"],T=!!s?.forcedToolName,d=i(m=>{let E={model:c,max_tokens:f,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:l,tools:this.applyCacheControlToTools(n)};if(s?.forcedToolName&&T&&(E.tool_choice={type:"tool",name:s.forcedToolName}),m!=="none")if(m==="profile"&&g)this.applyReasoningProfile(E,g,u,c,f);else if(m==="native-budget"){let w=se(this.config,ie(u.effort),u.taskType);E.thinking={type:"enabled",budget_tokens:ae(w,f)}}else m==="native-toggle"?E.thinking={type:"enabled"}:m==="native-adaptive"&&(E.thinking={type:"adaptive"},zn(E,u));return E},"buildRequest"),b,k;for(let m of y){for(;!b;)try{let E=d(m);b=await this.client.messages.create(E,this.buildMessageCreateOptions(E,c,a))}catch(E){if(k=E,T&&this.shouldFallbackForForcedToolChoiceError(E)){T=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let w=m==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:m==="native-budget"?["budget_tokens","thinking"]:m==="native-toggle"?["thinking"]:m==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(E,...w))throw E;break}if(b)break}if(!b)throw k??new M("All reasoning capability attempts failed without a captured error",this.name);let v=[],h=[],C=[];for(let m of b.content)m.type==="text"?(v.push({type:"text",text:m.text}),s?.onTextDelta?.(m.text)):m.type==="thinking"?(C.push({type:"thinking",thinking:m.thinking,signature:m.signature??""}),s?.onThinkingDelta?.(m.thinking),s?.onThinkingEnd?.(m.thinking)):m.type==="redacted_thinking"?C.push({type:"redacted_thinking",data:m.data}):m.type==="tool_use"&&h.push({type:"tool_use",id:m.id,name:m.name,input:typeof m.input=="object"&&m.input!==null?m.input:{}});return{textBlocks:v,toolBlocks:h,thinkingBlocks:C,usage:Xt(b.usage),stopReason:b.stop_reason??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}serializeSystemMessageContent(t){if(typeof t=="string")return t.trim();for(let n of t)if(he(n))throw new M("cache-boundary marker reached system message serialization unlowered. Provider base class lowering must run before any wire-level serialization.",this.name);return t.filter(n=>n.type==="text").map(n=>n.text.trim()).filter(Boolean).join(`
|
|
3
3
|
`)}buildSystemPrompt(t,n){let o=n.filter(r=>r.role==="system").map(r=>this.serializeSystemMessageContent(r.content)).filter(Boolean);return[t,...o].filter(r=>typeof r=="string"&&r.trim().length>0).join(`
|
|
4
4
|
|
|
5
5
|
`)}async convertMessages(t,n){let o=[],r=this.getEffectiveStrictThinkingSignature(n);for(let s of t.filter(a=>a.role!=="system")){let a=s.role==="user"?"user":"assistant";if(typeof s.content=="string"){o.push({role:a,content:s.content});continue}let u=[],c=[];for(let l of s.content)l.type==="thinking"?!r||typeof l.signature=="string"&&l.signature.length>0?u.push({type:"thinking",thinking:l.thinking,signature:l.signature??""}):l.thinking&&c.push(l.thinking):l.type==="redacted_thinking"&&(r||u.push({type:"redacted_thinking",data:l.data}));c.length>0&&s.role==="assistant"&&u.push({type:"text",text:`<prior_reasoning>
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
+
var g=Object.create;var e=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,k=Object.prototype.hasOwnProperty;var m=(b,a)=>e(b,"name",{value:a,configurable:!0});var n=(b,a)=>()=>(a||b((a={exports:{}}).exports,a),a.exports),o=(b,a)=>{for(var c in a)e(b,c,{get:a[c],enumerable:!0})},l=(b,a,c,f)=>{if(a&&typeof a=="object"||typeof a=="function")for(let d of i(a))!k.call(b,d)&&d!==c&&e(b,d,{get:()=>a[d],enumerable:!(f=h(a,d))||f.enumerable});return b};var p=(b,a,c)=>(c=b!=null?g(j(b)):{},l(a||!b||!b.__esModule?e(c,"default",{value:b,enumerable:!0}):c,b));export{m as a,n as b,o as c,p as d};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
-
import{a as o}from"./chunk-
|
|
2
|
+
import{a as o}from"./chunk-ONUPGMER.js";var f=class extends Error{static{o(this,"KodaXMediaError")}code;detail;cause;constructor(t,n,r={}){super(n),this.name="KodaXMediaError",this.code=t,this.detail=r.detail,this.cause=r.cause}},P=class extends f{static{o(this,"ImageResizeError")}constructor(t,n={}){super(n.code??"IMAGE_TOO_LARGE",t,n),this.name="ImageResizeError"}};import ue from"node:path";var yt={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"},ht={".3gp":"video/3gpp",".3gpp":"video/3gpp",".avi":"video/x-msvideo",".flv":"video/x-flv",".mov":"video/quicktime",".mp4":"video/mp4",".mpeg":"video/mpeg",".mpg":"video/mpeg",".webm":"video/webm",".wmv":"video/x-ms-wmv"};function ce(e){return yt[ue.extname(e).toLowerCase()]}o(ce,"inferImageMediaType");function fe(e){return ht[ue.extname(e).toLowerCase()]}o(fe,"inferVideoMediaType");function bt(e,t={}){let n=t.mediaType??ce(e);return{kind:"image",path:e,...n?{mediaType:n}:{},...t.source?{source:t.source}:{},...t.description?{description:t.description}:{}}}o(bt,"createImageArtifactFromPath");function vt(e,t={}){if(t.mediaType!==void 0&&t.mimeType!==void 0&&t.mediaType!==t.mimeType)throw new f("UNSUPPORTED_MEDIA_TYPE",`File artifact mediaType and mimeType disagree: ${t.mediaType} != ${t.mimeType}.`);return{kind:"file",path:e,...t.mediaType?{mediaType:t.mediaType}:{},...t.mimeType?{mimeType:t.mimeType}:{},...t.name?{name:t.name}:{},...t.source?{source:t.source}:{},...t.description?{description:t.description}:{}}}o(vt,"createFileArtifactFromPath");function kt(e,t={}){let n=t.mediaType??fe(e);if(!n)throw new f("UNSUPPORTED_MEDIA_TYPE",`Cannot infer video media type from path: ${e}.`);return{kind:"video",path:e,mediaType:n,...t.name?{name:t.name}:{},...t.source?{source:t.source}:{},...t.description?{description:t.description}:{}}}o(kt,"createVideoArtifactFromPath");import{Jimp as Ct}from"jimp";var pe=2e3,ge=Math.floor(3.75*1024*1024),Rt=[80,60,40];async function H(e,t={}){let n=t.maxDimension??pe,r=t.targetBytes??ge;if(e.length===0)throw new P("Empty image buffer.",{code:"IMAGE_DECODE_FAILED"});let i;try{i=await Ct.read(e)}catch(u){let y=u instanceof Error?u.message:String(u);throw new P(`Failed to decode image: ${y}`,{code:"IMAGE_DECODE_FAILED",cause:u})}let{width:s,height:d}=i.bitmap,a=Math.max(s,d);if(a>n){let u=n/a;i.resize({w:Math.max(1,Math.round(s*u)),h:Math.max(1,Math.round(d*u))})}let l=i.bitmap.width,m=i.bitmap.height;if(t.preferMediaType!=="image/jpeg"){let u=await i.getBuffer("image/png");if(u.length<=r)return{buffer:Buffer.from(u),mediaType:"image/png",width:l,height:m}}for(let u of Rt){let y=await i.getBuffer("image/jpeg",{quality:u});if(y.length<=r)return{buffer:Buffer.from(y),mediaType:"image/jpeg",width:l,height:m}}if(t.preferMediaType==="image/jpeg"){let u=await i.getBuffer("image/png");if(u.length<=r)return{buffer:Buffer.from(u),mediaType:"image/png",width:l,height:m}}throw new P(`Image still exceeds budget (${r} bytes raw) after PNG and JPEG q40 compression. Try a smaller image or take a fresh screenshot of a smaller region.`,{code:"IMAGE_TOO_LARGE"})}o(H,"normalizePastedImage");import{spawn as he}from"node:child_process";import{mkdtemp as Pt,readFile as Et,rm as Tt}from"node:fs/promises";import{tmpdir as xt}from"node:os";import me from"node:path";var be=5e3;async function ve(){switch(process.platform){case"darwin":return Mt();case"win32":return _t();case"linux":return Kt();default:throw new f("UNSUPPORTED_PLATFORM",`Clipboard image fallback is not supported on platform "${process.platform}".`)}}o(ve,"readClipboardImage");async function St(e={}){let t=await ve();return t?H(t,e):null}o(St,"readAndNormalizeClipboardImage");async function ke(e){let t=await Pt(me.join(xt(),"kodax-clip-")),n=me.join(t,"clip.png");try{return await e(n)}finally{await Tt(t,{recursive:!0,force:!0}).catch(r=>{})}}o(ke,"runWithTempPng");async function Mt(){return ke(async e=>{let t=`set png_data to (the clipboard as \xABclass PNGf\xBB)
|
|
3
3
|
set fh to open for access POSIX file "${e.replace(/"/g,'\\"')}" with write permission
|
|
4
4
|
write png_data to fh
|
|
5
5
|
close access fh`;return await Re("osascript",["-e",t])?Ce(e):null})}o(Mt,"readMacClipboard");async function _t(){return ke(async e=>{let t=["Add-Type -AssemblyName System.Drawing | Out-Null","$img = Get-Clipboard -Format Image","if ($null -eq $img) { exit 1 }",`$img.Save('${e.replace(/'/g,"''")}', [System.Drawing.Imaging.ImageFormat]::Png)`].join("; ");return await Re("powershell",["-NoProfile","-Command",t])?Ce(e):null})}o(_t,"readWinClipboard");async function Kt(){return await ye("wl-paste",["--type","image/png"])??ye("xclip",["-selection","clipboard","-t","image/png","-o"])}o(Kt,"readLinuxClipboard");async function Ce(e){try{let t=await Et(e);return t.length>0?t:null}catch(t){return null}}o(Ce,"readNonEmptyFile");function Re(e,t){return new Promise(n=>{let r=!1,i=he(e,[...t],{stdio:"ignore"}),s=setTimeout(()=>{r||(r=!0,i.kill(),n(!1))},be);i.once("error",()=>{r||(r=!0,clearTimeout(s),n(!1))}),i.once("exit",d=>{r||(r=!0,clearTimeout(s),n(d===0))})})}o(Re,"runCommand");function ye(e,t){return new Promise(n=>{let r=!1,i=[],s=he(e,[...t],{stdio:["ignore","pipe","ignore"]}),d=setTimeout(()=>{r||(r=!0,s.kill(),n(null))},be);s.stdout?.on("data",a=>i.push(a)),s.once("error",()=>{r||(r=!0,clearTimeout(d),n(null))}),s.once("exit",a=>{if(r)return;if(r=!0,clearTimeout(d),a!==0){n(null);return}let l=Buffer.concat(i);n(l.length>0?l:null)})})}o(ye,"collectStdoutBytes");import{createHash as wt}from"node:crypto";import{mkdir as At,readdir as Xt,stat as It,unlink as Ot,writeFile as Dt}from"node:fs/promises";import{tmpdir as Bt}from"node:os";import J from"node:path";var Pe="KODAX_PASTE_TMP_DIR",Ee=1440*60*1e3;function Te(){return process.env[Pe]??J.join(Bt(),"kodax-paste")}o(Te,"resolvePasteTmpDir");function Nt(e){let t=e?.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"");return t&&t.length>0?t:"paste"}o(Nt,"sanitizeFileNamePrefix");async function Lt(e,t={}){let n=t.directory??Te();await At(n,{recursive:!0});let r=e.mediaType==="image/jpeg"?".jpg":".png",i=wt("sha256").update(e.buffer).digest("hex").slice(0,16),s=`${Nt(t.fileNamePrefix)}-${i}${r}`,d=J.join(n,s);return await Dt(d,e.buffer),{type:"image",path:d,mediaType:e.mediaType}}o(Lt,"persistImageAsBlock");async function jt(e=Date.now()){let t=Te(),n;try{n=await Xt(t)}catch(s){return 0}let r=e-Ee,i=0;return await Promise.all(n.filter(s=>/-[0-9a-f]{16}\.(?:png|jpg)$/.test(s)).map(async s=>{let d=J.join(t,s);try{(await It(d)).mtimeMs<r&&(await Ot(d),i+=1)}catch(a){}})),i}o(jt,"prunePasteTmpDir");function j(e,t){return`${e}/${t??""}`}o(j,"capabilityCacheKey");function $t(e,t,n){return e[j(t,n)]?.rejected??[]}o($t,"getRejectedEfforts");function Ft(e,t,n,r,i,s){let d=j(t,n),a=e[d],l=a?.rejected.includes(r)?a.rejected:[...a?.rejected??[],r];return{...e,[d]:{rejected:l,source:i,updatedAt:s}}}o(Ft,"addRejectedEffort");function Ut(e,t,n){if(!t)return{};let r={...e};return delete r[j(t,n)],r}o(Ut,"removeCacheEntry");function Wt(e){if(!e||typeof e!="object")return{};let t={};for(let[n,r]of Object.entries(e)){if(!r||typeof r!="object")continue;let i=r,s=Array.isArray(i.rejected)?i.rejected.filter(l=>typeof l=="string"):[],d=i.source==="probed"?"probed":"observed",a=typeof i.updatedAt=="string"?i.updatedAt:"";t[n]={rejected:s,source:d,updatedAt:a}}return t}o(Wt,"sanitizeCapabilityCache");import{AsyncLocalStorage as Vt}from"node:async_hooks";var zt=new Vt,xe=8,Se=32;function qt(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isInteger(t)&&t>0?t:void 0}o(qt,"parsePositiveInt");function Gt(){let e=$()?.workflow?.maxConcurrency,t=typeof e=="number"&&Number.isInteger(e)&&e>0?e:qt(process.env.KODAX_WORKFLOW_MAX_CONCURRENCY)??xe;return Math.max(1,Math.min(Se,t))}o(Gt,"resolveWorkflowMaxConcurrency");function $(){return zt.getStore()}o($,"getRunScopedConfig");var A={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},Me={...A,multimodalSupport:"image-input"},F={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},_e={...F,multimodalSupport:"image-input"};function X(e){return{transport:e.transport,conversationSemantics:e.conversationSemantics,mcpSupport:e.mcpSupport,contextFidelity:e.contextFidelity??"full",toolCallingFidelity:e.toolCallingFidelity??"full",sessionSupport:e.sessionSupport??"full",longRunningSupport:e.longRunningSupport??"full",multimodalSupport:e.multimodalSupport??"none",evidenceSupport:e.evidenceSupport??"full"}}o(X,"normalizeCapabilityProfile");import Ur from"@anthropic-ai/sdk";import{parse as _r}from"partial-json";import ni from"openai";import{ClientSideConnection as hi,PROTOCOL_VERSION as bi,ndJsonStream as vi}from"@agentclientprotocol/sdk";import Oe from"node:fs";import De from"node:os";import Be from"node:path";var go="gpt-5.4",mo="auto-gemini-3",yo=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],ho=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function Ne(e){let t=new Set,n=[];for(let r of e){let i=r.trim();if(!i)continue;let s=i.toLowerCase();t.has(s)||(t.add(s),n.push(i))}return n}o(Ne,"dedupePreserveOrder");function bo(){let e=Be.join(De.homedir(),".codex","config.toml");try{return Oe.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}o(bo,"readCodexConfiguredModel");function vo(){let e=Be.join(De.homedir(),".gemini","settings.json");try{let t=JSON.parse(Oe.readFileSync(e,"utf8")),n=typeof t.model=="string"?t.model.trim():"";return n||(typeof t.general?.model=="string"?t.general.model.trim():"")||null}catch{return null}}o(vo,"readGeminiConfiguredModel");function x(){return bo()||go}o(x,"getCodexCliDefaultModel");function S(){return vo()||mo}o(S,"getGeminiCliDefaultModel");function I(){return Ne([x(),...yo])}o(I,"getCodexCliKnownModels");function O(){return Ne([S(),...ho])}o(O,"getGeminiCliKnownModels");var Zi=S(),es=O();var fs=x(),ps=I();import{existsSync as wo,readFileSync as Ao}from"node:fs";import M from"node:path";import{fileURLToPath as Xo}from"node:url";var Le=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],je=["openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","provider-budget","provider-toggle","prompt-only","none"],$e=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],Fe=["zai-glm-5.2","zai-glm-toggle","deepseek-v4-openai","deepseek-v4-anthropic","deepseek-toggle","kimi-k2.7-code","kimi-hybrid-toggle","minimax-m3","minimax-m2-always","mimo-v2.5-toggle","qwen-hybrid-thinking","openai-chat-reasoning","openai-responses-reasoning","codex-cli-effort","claude-adaptive-xhigh","claude-adaptive-max","anthropic-budget","generic-thinking-toggle","none"],Ue=["native","image-input-native","cli-bridge","image-input-cli-bridge"],We=["count-tokens","models-list","minimal-message","unsupported"];function k(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}o(k,"isPlainObject");function E(e,t){if(typeof e!="string"||e.length===0)throw new Error(`provider-capabilities.json: ${t} must be a non-empty string`);return e}o(E,"requireString");function D(e,t){if(e!==void 0)return E(e,t)}o(D,"optionalString");function C(e,t){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)||e<0)throw new Error(`provider-capabilities.json: ${t} must be a non-negative finite number`);return e}}o(C,"optionalNumber");function g(e,t){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${t} must be a boolean`);return e}}o(g,"optionalBoolean");function Ve(e,t){if(e!==void 0){if(!Array.isArray(e))throw new Error(`provider-capabilities.json: ${t} must be an array`);return e.map((n,r)=>E(n,`${t}[${r}]`))}}o(Ve,"optionalStringArray");function Ro(e,t){if(e===void 0)return;if(!k(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[r,i]of Object.entries(e))n[r]=E(i,`${t}.${r}`);return n}o(Ro,"optionalStringMap");function Po(e,t){if(e!==void 0){if(typeof e!="string"||!Fe.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Fe.join(", ")}, got ${JSON.stringify(e)}`);return e}}o(Po,"optionalReasoningPreset");function Q(e,t){if(typeof e!="string"||!Le.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Le.join(", ")}, got ${JSON.stringify(e)}`);return e}o(Q,"requireReasoningCapability");function Eo(e,t){if(typeof e!="string"||!je.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${je.join(", ")}, got ${JSON.stringify(e)}`);return e}o(Eo,"requireEffortStrategy");function To(e,t){if(e!==void 0){if(typeof e!="string"||!$e.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${$e.join(", ")}, got ${JSON.stringify(e)}`);return e}}o(To,"optionalThinkingStrategy");function ze(e,t){if(e===void 0)return;if(!k(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=Eo(e.effortStrategy,`${t}.effortStrategy`),r=Po(e.reasoningPreset,`${t}.reasoningPreset`),i=To(e.thinkingStrategy,`${t}.thinkingStrategy`),s=D(e.defaultEffort,`${t}.defaultEffort`),d=Ro(e.effortAliases,`${t}.effortAliases`),a=Ve(e.disabledEfforts,`${t}.disabledEfforts`),l=Ve(e.localRejectEfforts,`${t}.localRejectEfforts`),m=g(e.allowCustomEffort,`${t}.allowCustomEffort`),u=g(e.supportsReasoningEffort,`${t}.supportsReasoningEffort`),y=g(e.supportsReasoningSummary,`${t}.supportsReasoningSummary`),p=g(e.supportsEncryptedReasoningReplay,`${t}.supportsEncryptedReasoningReplay`),R=g(e.supportsAdaptiveThinking,`${t}.supportsAdaptiveThinking`),T=g(e.supportsManualThinkingBudget,`${t}.supportsManualThinkingBudget`),h=g(e.supportsDisabledThinking,`${t}.supportsDisabledThinking`),L=g(e.requiresEffortBetaHeader,`${t}.requiresEffortBetaHeader`),c={effortStrategy:n};if(r!==void 0&&(c.reasoningPreset=r),i!==void 0&&(c.thinkingStrategy=i),s!==void 0&&(c.defaultEffort=s),d!==void 0&&(c.effortAliases=d),a!==void 0&&(c.disabledEfforts=a),l!==void 0&&(c.localRejectEfforts=l),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts must be an array`);c.supportedEfforts=e.supportedEfforts.map((b,v)=>{if(!k(b))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts[${v}] must be an object`);return{value:E(b.value,`${t}.supportedEfforts[${v}].value`),...D(b.description,`${t}.supportedEfforts[${v}].description`)!==void 0?{description:D(b.description,`${t}.supportedEfforts[${v}].description`)}:{},...g(b.isDefault,`${t}.supportedEfforts[${v}].isDefault`)!==void 0?{isDefault:g(b.isDefault,`${t}.supportedEfforts[${v}].isDefault`)}:{},...g(b.isUserVisible,`${t}.supportedEfforts[${v}].isUserVisible`)!==void 0?{isUserVisible:g(b.isUserVisible,`${t}.supportedEfforts[${v}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!k(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${t}.budgetByEffort must be an object`);let b={};for(let[v,le]of Object.entries(e.budgetByEffort))b[v]=C(le,`${t}.budgetByEffort.${v}`)??0;c.budgetByEffort=b}return m!==void 0&&(c.allowCustomEffort=m),u!==void 0&&(c.supportsReasoningEffort=u),y!==void 0&&(c.supportsReasoningSummary=y),p!==void 0&&(c.supportsEncryptedReasoningReplay=p),R!==void 0&&(c.supportsAdaptiveThinking=R),T!==void 0&&(c.supportsManualThinkingBudget=T),h!==void 0&&(c.supportsDisabledThinking=h),L!==void 0&&(c.requiresEffortBetaHeader=L),c}o(ze,"validateReasoningProfile");function qe(e,t){let n=e.reasoningProfile,r=e.reasoningCapabilityV2;if(n!==void 0&&r!==void 0)throw new Error(`provider-capabilities.json: ${t} must not define both reasoningProfile and deprecated reasoningCapabilityV2`);return n!==void 0?ze(n,`${t}.reasoningProfile`):ze(r,`${t}.reasoningCapabilityV2`)}o(qe,"validateReasoningProfileField");function xo(e,t){if(typeof e!="string"||!Ue.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Ue.join(", ")}, got ${JSON.stringify(e)}`);return e}o(xo,"requireProfileName");function So(e,t){if(typeof e!="string"||!We.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${We.join(", ")}, got ${JSON.stringify(e)}`);return e}o(So,"requireVerifyStrategy");function Mo(e,t){if(!k(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=E(e.id,`${t}.id`),r=D(e.displayName,`${t}.displayName`),i=C(e.contextWindow,`${t}.contextWindow`),s=C(e.maxOutputTokens,`${t}.maxOutputTokens`),d=C(e.thinkingBudgetCap,`${t}.thinkingBudgetCap`),a=g(e.replayReasoningContent,`${t}.replayReasoningContent`),l=g(e.strictThinkingSignature,`${t}.strictThinkingSignature`),m=C(e.streamMaxDurationMs,`${t}.streamMaxDurationMs`),u=e.reasoningCapability===void 0?void 0:Q(e.reasoningCapability,`${t}.reasoningCapability`),y=qe(e,t),p={id:n};return r!==void 0&&(p.displayName=r),i!==void 0&&(p.contextWindow=i),s!==void 0&&(p.maxOutputTokens=s),d!==void 0&&(p.thinkingBudgetCap=d),u!==void 0&&(p.reasoningCapability=u),y!==void 0&&(p.reasoningProfile=y),a!==void 0&&(p.replayReasoningContent=a),l!==void 0&&(p.strictThinkingSignature=l),m!==void 0&&(p.streamMaxDurationMs=m),p}o(Mo,"validateModelDescriptor");function _o(e,t){if(e===void 0)return;if(!k(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[r,i]of Object.entries(e))n[r]=Q(i,`${t}.${r}`);return n}o(_o,"validateModelReasoningCapabilities");function Ko(e,t){if(!k(e))throw new Error(`provider-capabilities.json: providers.${t} must be an object`);let n=g(e.cliBridge,`providers.${t}.cliBridge`),r=E(e.apiKeyEnv,`providers.${t}.apiKeyEnv`),i=Q(e.reasoningCapability,`providers.${t}.reasoningCapability`),s=qe(e,`providers.${t}`),d=xo(e.capabilityProfile,`providers.${t}.capabilityProfile`),a=So(e.verifyStrategy,`providers.${t}.verifyStrategy`);if(n&&a!=="unsupported")throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but verifyStrategy="${a}" \u2014 must be "unsupported" (CLI binary owns credentials)`);let l=C(e.contextWindow,`providers.${t}.contextWindow`),m=C(e.maxOutputTokens,`providers.${t}.maxOutputTokens`),u=C(e.thinkingBudgetCap,`providers.${t}.thinkingBudgetCap`),y=g(e.supportsThinking,`providers.${t}.supportsThinking`),p=_o(e.modelReasoningCapabilities,`providers.${t}.modelReasoningCapabilities`),R=D(e.model,`providers.${t}.model`);if(n&&(R!==void 0||e.models!==void 0))throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but defines model/models \u2014 must be omitted (filled at load time)`);if(!n&&R===void 0)throw new Error(`provider-capabilities.json: providers.${t}.model is required (only cliBridge entries may omit)`);let T;if(e.models!==void 0){if(!Array.isArray(e.models))throw new Error(`provider-capabilities.json: providers.${t}.models must be an array`);T=e.models.map((L,c)=>Mo(L,`providers.${t}.models[${c}]`))}let h={apiKeyEnv:r,reasoningCapability:i,capabilityProfile:d,verifyStrategy:a};return s!==void 0&&(h.reasoningProfile=s),R!==void 0&&(h.model=R),T!==void 0&&(h.models=T),l!==void 0&&(h.contextWindow=l),m!==void 0&&(h.maxOutputTokens=m),u!==void 0&&(h.thinkingBudgetCap=u),y!==void 0&&(h.supportsThinking=y),p!==void 0&&(h.modelReasoningCapabilities=p),n&&(h.cliBridge=!0),h}o(Ko,"validateProviderEntry");function Ge(e){if(!k(e))throw new Error("provider-capabilities.json: root must be an object");if(e.version!==1)throw new Error(`provider-capabilities.json: version must be 1, got ${JSON.stringify(e.version)}`);let t=E(e.updatedAt,"updatedAt");if(!k(e.providers))throw new Error("provider-capabilities.json: providers must be an object");let n={};for(let[r,i]of Object.entries(e.providers))n[r]=Ko(i,r);return{version:1,updatedAt:t,providers:n}}o(Ge,"validateProviderCapabilitiesJson");var Io=Object.freeze({native:A,"image-input-native":Me,"cli-bridge":F,"image-input-cli-bridge":_e}),z=null;function Oo(){if(process.env.KODAX_BUNDLED==="true")return M.join(M.dirname(process.execPath),"provider-capabilities.json");let e=M.dirname(Xo(import.meta.url)),t=[M.join(e,"provider-capabilities.json"),M.join(M.dirname(e),"provider-capabilities.json")];for(let n of t)if(wo(n))return n;return t[0]}o(Oo,"resolveJsonPath");function Do(e){if(e.models){for(let t of e.models)t.reasoningProfile&&He(t.reasoningProfile);for(let t of e.models)Object.freeze(t);Object.freeze(e.models)}return e.reasoningProfile&&He(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}o(Do,"deepFreezeSnapshot");function He(e){if(e.supportedEfforts){for(let t of e.supportedEfforts)Object.freeze(t);Object.freeze(e.supportedEfforts)}e.budgetByEffort&&Object.freeze(e.budgetByEffort),e.effortAliases&&Object.freeze(e.effortAliases),e.disabledEfforts&&Object.freeze(e.disabledEfforts),e.localRejectEfforts&&Object.freeze(e.localRejectEfforts),Object.freeze(e)}o(He,"freezeReasoningProfile");function Bo(e){if(e==="gemini-cli"){let t=S();return{model:t,models:O().filter(n=>n!==t).map(n=>({id:n}))}}if(e==="codex-cli"){let t=x();return{model:t,models:I().filter(n=>n!==t).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}o(Bo,"resolveCliBridgeModels");function No(e,t){let n=Io[t.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${t.capabilityProfile}' for provider '${e}'`);if(t.cliBridge){let i=Bo(e),s={model:i.model,models:i.models,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(s.reasoningProfile=t.reasoningProfile),t.supportsThinking!==void 0&&(s.supportsThinking=t.supportsThinking),s}let r={model:t.model,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(r.reasoningProfile=t.reasoningProfile),t.models!==void 0&&(r.models=t.models),t.modelReasoningCapabilities!==void 0&&(r.modelReasoningCapabilities=t.modelReasoningCapabilities),t.contextWindow!==void 0&&(r.contextWindow=t.contextWindow),t.maxOutputTokens!==void 0&&(r.maxOutputTokens=t.maxOutputTokens),t.thinkingBudgetCap!==void 0&&(r.thinkingBudgetCap=t.thinkingBudgetCap),t.supportsThinking!==void 0&&(r.supportsThinking=t.supportsThinking),r}o(No,"buildSnapshot");function Je(){if(z)return z;let e=Oo(),t;try{let i=Ao(e,"utf8");t=JSON.parse(i)}catch(i){let s=i instanceof Error?i.message:String(i);throw new Error(`provider-capabilities loader: failed to read ${e}: ${s}`)}let n=Ge(t),r={};for(let[i,s]of Object.entries(n.providers))r[i]=Do(No(i,s));return z=Object.freeze(r),z}o(Je,"getProviderSnapshots");import Ds from"@anthropic-ai/sdk";var _=Je();var Ye=process.env.KODAX_PROVIDER??"zhipu-coding";var B=["image/png","image/jpeg","image/webp","image/gif"],N=["video/mp4","video/mpeg","video/quicktime","video/x-msvideo","video/x-flv","video/webm","video/x-ms-wmv","video/3gpp"],un=[],cn=new Set(["anthropic","openai"]),fn=new Set(["kimi-code/kimi-for-coding","kimi/kimi-k2.5","kimi/kimi-k2.6","kimi/kimi-k2.7-code","minimax-coding/minimax-m3","minimax/minimax-m3","mimo-coding/mimo-v2.5","mimo/mimo-v2.5"]);function re(e){return{nativeSupported:!1,sdkSupported:!1,status:"unsupported",mediaTypes:[],maxCount:0,reason:e}}o(re,"unsupported");function pn(e){return{nativeSupported:!0,sdkSupported:!0,status:"supported",mediaTypes:B,nativeMediaTypes:B,reason:e}}o(pn,"supportedImage");function gn(e){return{nativeSupported:!0,sdkSupported:!1,status:"provider-native-unwired",mediaTypes:[],nativeMediaTypes:N,maxCount:0,reason:e}}o(gn,"nativeVideoUnwired");function mn(e){return e.trim().toLowerCase()}o(mn,"normalizeProvider");function yn(e){return _[e]?.model}o(yn,"resolveProviderDefaultModel");function hn(e,t){if(!t)return;let n=t.trim().toLowerCase();if(e==="kimi"){if(n==="k2.5")return"kimi-k2.5";if(n==="k2.6")return"kimi-k2.6";if(n==="k2.7-code")return"kimi-k2.7-code"}return(e==="minimax-coding"||e==="minimax")&&n==="minimax-m3"?"minimax-m3":n}o(hn,"normalizeModel");function bn(e){if(!cn.has(e))return!1;let t=_[e];return t?X(t.capabilityProfile).multimodalSupport!=="none":!1}o(bn,"hasOfficialImageSupport");function vn(e,t){let n=hn(e,t);if(!n)return!1;let r=`${e}/${n}`;return fn.has(r)}o(vn,"hasSourceBackedNativeMedia");function kn(e,t,n){if(n)return"source-backed";if(t){if(e==="openai")return"openai-official";if(e==="anthropic")return"anthropic-official"}}o(kn,"resolveImageCapabilityRoute");function Cn(e){switch(e){case"openai-official":return"Model route supports KodaX image input. Direct-path image/gif is sent as image/gif, but OpenAI requires non-animated GIF semantics.";case"anthropic-official":return"Model route supports KodaX image input. Direct-path image/gif is sent as image/gif, but Anthropic uses only the first frame of animated GIFs.";case"source-backed":return"Model route supports KodaX image input. Direct-path image/gif is sent as image/gif; animated-GIF interpretation is provider-owned."}}o(Cn,"imageCapabilityReason");function ie(e){let t=mn(e.provider),n=e.model?.trim()||yn(t),r=bn(t),i=vn(t,n),s=kn(t,r,i),d=s!==void 0,a=i;return{text:!0,image:d?pn(Cn(s)):re("No verified KodaX image-input route for this provider/model."),video:a?gn("Model route is native-video capable, but KodaX SDK video sending is not wired yet. Reject or downgrade before send."):re("No verified native video route for this provider/model."),file:re("File artifact contract is stable, but KodaX SDK file sending/extraction is not wired yet. Reject or downgrade before send.")}}o(ie,"getModelInputCapabilities");function Rn(e){return B.includes(e)}o(Rn,"isKnownImageMediaType");function Pn(e){return N.includes(e)}o(Pn,"isKnownVideoMediaType");function se(e){return`${e.provider}${e.model?`/${e.model}`:""}`}o(se,"routeLabel");function ae(e){return e.reason?`${e.status}: ${e.reason}`:e.status}o(ae,"capabilityDetail");function de(e,t){if(e.length===0)return;let n=ie(t);for(let r of e){let i=r;if(i.kind==="image"){if(!n.image.nativeSupported||!n.image.sdkSupported)throw new f("MODEL_INPUT_UNSUPPORTED",`Provider/model cannot consume image artifacts: ${se(t)}.`,{detail:ae(n.image)});if(typeof i.mediaType=="string"&&!Rn(i.mediaType))throw new f("UNSUPPORTED_MEDIA_TYPE",`Unsupported image media type: ${i.mediaType}.`);continue}throw i.kind==="video"?typeof i.mediaType!="string"||!Pn(i.mediaType)?new f("UNSUPPORTED_MEDIA_TYPE",`Unsupported video media type: ${String(i.mediaType)}.`,{detail:`Supported video media types: ${N.join(", ")}`}):new f("MODEL_INPUT_UNSUPPORTED",`Provider/model cannot consume video artifacts through this SDK runtime: ${se(t)}.`,{detail:ae(n.video)}):i.kind==="file"?typeof i.mediaType=="string"&&typeof i.mimeType=="string"&&i.mediaType!==i.mimeType?new f("UNSUPPORTED_MEDIA_TYPE",`File artifact mediaType and mimeType disagree: ${i.mediaType} != ${i.mimeType}.`):new f("MODEL_INPUT_UNSUPPORTED",`Provider/model cannot consume file artifacts through this SDK runtime: ${se(t)}.`,{detail:ae(n.file)}):new f("MODEL_INPUT_UNSUPPORTED",`Unsupported input artifact kind: ${String(i.kind)}.`)}}o(de,"validateInputArtifactsForModel");var K={user:0,background:1};function En(e,t){return K[e]<=K[t]}o(En,"priorityWithinMax");function pt(e,t){return!(e.agentId!==t.agentId||!En(e.priority,t.maxPriority)||t.mode!==void 0&&e.mode!==t.mode||t.id!==void 0&&e.id!==t.id||t.predicate&&!t.predicate(e))}o(pt,"matchesFilter");var G=class{static{o(this,"MessageQueue")}messages=[];nextSeq=1;listeners=new Set;snapshotRef=Object.freeze([]);notify(t){this.snapshotRef=Object.freeze([...this.messages]);for(let n of this.listeners)try{n(t)}catch{}}subscribe=o(t=>(this.listeners.add(t),()=>{this.listeners.delete(t)}),"subscribe");getSnapshot=o(()=>this.snapshotRef,"getSnapshot");enqueue(t){let n=`msg-${this.nextSeq++}`,r={id:n,priority:t.priority,mode:t.mode,content:t.content,agentId:t.agentId,inputArtifacts:t.inputArtifacts,taskResult:t.taskResult,enqueuedAt:Date.now()};return this.messages=[...this.messages,r],this.notify({kind:"enqueued",message:r}),n}dequeue(t){let n=[];for(let a=0;a<this.messages.length;a++){let l=this.messages[a];l&&pt(l,t)&&n.push({originalIndex:a,message:l})}n.sort((a,l)=>{let m=K[a.message.priority]-K[l.message.priority];return m!==0?m:a.originalIndex-l.originalIndex});let r=t.limit,i=typeof r=="number"&&n.length>r?n.slice(0,r):n;if(i.length===0)return[];let s=new Set(i.map(a=>a.originalIndex));this.messages=this.messages.filter((a,l)=>!s.has(l));let d=i.map(a=>a.message);return this.notify({kind:"dequeued",messages:d}),d}peek(t){let n=[];for(let s=0;s<this.messages.length;s++){let d=this.messages[s];d&&pt(d,t)&&n.push({originalIndex:s,message:d})}n.sort((s,d)=>{let a=K[s.message.priority]-K[d.message.priority];return a!==0?a:s.originalIndex-d.originalIndex});let r=t.limit;return(typeof r=="number"&&n.length>r?n.slice(0,r):n).map(s=>s.message)}size(){return this.messages.length}count(t){return this.peek(t).length}has(t){return this.count(t)>0}clear(){if(this.messages.length===0)return;let t=this.messages;this.messages=[],this.notify({kind:"cleared",messages:t})}},q;function w(){return q||(q=new G),q}o(w,"getMessageQueue");function Tn(){q=void 0}o(Tn,"_resetMessageQueueForTests");var gt=new Set;function mt(e){return e.some(n=>gt.has(n))?"background":"user"}o(mt,"midTurnDrainPriority");function xn(e){let t=mt(e.lastTurnToolNames);return w().dequeue({agentId:e.agentId,maxPriority:t,limit:e.limit})}o(xn,"maybeDrainMidTurn");function Sn(e){let t=`<task-completed task_id="${e.taskId}">
|