@gencode/agents 0.7.2-alpha.1 → 0.7.3
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 +7 -0
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# @gencode/agents
|
|
2
2
|
|
|
3
|
+
## 0.7.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 0e4d28c: Require matching @custom-agent mentions to delegate through subagent_spawn with the exact agent name.
|
|
8
|
+
- 402af3c: Refactor SQLite database adaptation logic to be compatible with both Bun and Node.js runtimes
|
|
9
|
+
|
|
3
10
|
## 0.7.2
|
|
4
11
|
|
|
5
12
|
### Patch Changes
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ import{A as e,C as t,D as n,E as r,F as i,I as a,M as o,N as s,O as c,P as l,S a
|
|
|
7
7
|
`)}function Bt(e,t){let n=Rt(t),r=e.tokenBudget===null?`none`:String(e.tokenBudget),i=String(e.tokensUsed);return[`<goal_context>`,``,`The token budget for the current thread goal has been exhausted.`,`The goal status has been set to "budget_limited" automatically.`,``,`<objective>`,n,`</objective>`,``,`Token budget: ${r}`,`Tokens used: ${i}`,`Time used: ${e.timeUsedSeconds}s`,``,`Instructions:`,`- Wrap up the current turn soon. Do not start new substantive work.`,`- Summarize progress made, any blockers, and what would be needed next.`,`- Do NOT call update_goal(complete) unless the objective is truly achieved.`,`- The user can increase the budget or resume the goal later via the CLI.`,``,`</goal_context>`].join(`
|
|
8
8
|
`)}function Vt(e,t){let n=Rt(t),r=e.tokenBudget===null?`none`:String(e.tokenBudget),i=e.tokenBudget===null?`unbounded`:String(Math.max(0,e.tokenBudget-e.tokensUsed));return[`<goal_context>`,``,`The thread goal objective has been edited by the user.`,`The following objective supersedes any previous thread goal objective.`,`Adjust your work direction accordingly.`,``,`<untrusted_objective>`,n,`</untrusted_objective>`,``,`Token budget: ${r}`,`Tokens remaining: ${i}`,`Time used: ${e.timeUsedSeconds}s`,``,`Do not call update_goal unless the updated goal is actually complete.`,``,`</goal_context>`].join(`
|
|
9
9
|
`)}function Ht(e){return{role:`user`,content:e}}function Ut(e){return e.startsWith(`<goal_context>`)&&e.endsWith(`</goal_context>`)}const Wt=`AIMAX_GOAL_CONTINUATION`;var Gt=class{continuationCount=0;lastTurnHadOutput=!0;budgetWrapUpDone=!1;reset(){this.continuationCount=0,this.lastTurnHadOutput=!0,this.budgetWrapUpDone=!1}};function Kt(){let e=process.env[Wt];return e===void 0||e===``||e!==`0`}async function qt(e,t,n,r){if(!Kt()||n.continuationCount>=Fe)return!1;let i=await B(e,t,{storeName:r?.storeName});if(!i)return!1;let a=i.status===`budget_limited`&&!n.budgetWrapUpDone;if(i.status!==`active`&&!a)return!1;let{readPendingHitl:o}=await import(`./session-store-DjXWnxJY.js`).then(e=>e.c),s=await o(e,t,{storeName:r?.storeName});return!(s&&s.status===`pending`||!n.lastTurnHadOutput)}function Jt(e){return e.text.trim().length>0?!0:(e.toolResultCount??0)>0}async function Yt(e){let{agent:t,dataDir:n,sessionId:r,sessionStoreName:i,state:a,accounting:o,abortSignal:s,executeTurn:c,flushAccountingAfterTurn:l}=e;if(!await qt(n,r,a,{storeName:i}))return!1;let u=await B(n,r,{storeName:i});if(!u)return!1;let d=u.status===`budget_limited`&&!a.budgetWrapUpDone;if(u.status!==`active`&&!d)return!1;let f=await H(n,r,u,{storeName:i}),p=u.status===`budget_limited`||u.tokenBudget!==null&&u.tokensUsed>=u.tokenBudget,m=Ht(p?Bt(u,f):zt(u,f));a.continuationCount++;let h=await c(m.content);if(a.lastTurnHadOutput=Jt(h),p&&(a.budgetWrapUpDone=!0),l&&await l({input:h.inputTokens,output:h.outputTokens,total:h.inputTokens+h.outputTokens}),a.continuationCount>=Fe){let e=await B(n,r,{storeName:i});if(e?.status===`active`){let{updateGoal:t}=await import(`./goal-store-DxaeZmiE.js`).then(e=>e.i),{appendGoalEvent:o}=await import(`./goal-events-Bdf1BDep.js`).then(e=>e.r),s={storeName:i,eventSource:`runner`};await t(n,r,{status:`paused`},s),await o(n,r,{goalId:e?.goalId??null,action:`continuation_paused`,status:`paused`,source:`runner`,detail:{continuationCount:a.continuationCount}},s),console.error(`goal continuation limit reached (${Fe}), goal paused`)}}return!0}async function Xt(e,t,n){t&&await e(t);for(let t of n)await e(t)}async function Zt(e,t,n,r){let i=await B(e,t,{storeName:r?.storeName});if(!i?.pendingObjectiveUpdatedNotice)return{prompt:n,hadObjectiveUpdatedSteering:!1};let a=Ht(Vt(i,await H(e,t,i,{storeName:r?.storeName}))).content;return typeof n==`string`?{prompt:`${a}\n\n${n}`,hadObjectiveUpdatedSteering:!0}:{prompt:[{role:`user`,content:a,timestamp:Date.now()},...n],hadObjectiveUpdatedSteering:!0}}async function Qt(e,t,n){(await B(e,t,{storeName:n?.storeName}))?.pendingObjectiveUpdatedNotice&&await L(e,t,{pendingObjectiveUpdatedNotice:!1},{storeName:n?.storeName,eventSource:`runner`})}async function $t(e,t,n){await e.dispatchProgress(t,{type:`goal_updated`,action:n.action,goalId:n.goal?.goalId,goalStatus:n.goal?.status??null})}async function en(e,t,n){let r=n.before?.status??null,i=n.after?.status??null,a=n.before?.goalId,o=n.after?.goalId;r===i&&a===o||await $t(e,t,{action:n.action,goal:n.after??null})}function tn(e){let t=0,n=0,r=0,i=0,a=0;for(let o of e)o.role===`user`?t+=1:o.role===`assistant`?n+=1:o.role===`tool_result`?r+=1:o.role===`compaction`?i+=1:a+=1;return{userTurnCount:t,assistantTurnCount:n,toolResultCount:r,compactionCount:i,otherEntryCount:a,totalEntryCount:e.length}}function nn(e){let t=new Set,n=0,r=0,i=0;for(let a of e){if(dn(a)){for(let e of a.toolCalls??[])n+=1,t.add(e.name);continue}fn(a)&&(r+=1,a.isError&&(i+=1))}let a=Array.from(t).sort();return{toolCallCount:n,distinctToolCount:a.length,toolNames:a,toolResultCount:r,failedToolResultCount:i}}function rn(e,t={}){let n=ln(t.limit,`limit`),r=un(t.maxPreviewChars??400,`maxPreviewChars`),i=[];if(n===0)return i;for(let a of e){if(!fn(a)||!a.isError)continue;let e={toolCallId:a.toolCallId,toolName:a.toolName,preview:cn(a.content,r)};if(t.includeContent&&(e.content=a.content),i.push(e),i.length>=n)break}return i}function an(e,t){let n=un(e,`totalEntryCount`);return typeof t!=`number`||!Number.isFinite(t)?{startIndex:0,endIndex:n}:{startIndex:Math.min(n,Math.max(0,Math.floor(t))),endIndex:n}}function on(e,t=80){let n=un(e,`totalEntryCount`),r=un(t,`limit`);return{startIndex:Math.max(0,n-r),endIndex:n}}function sn(e,t){return e.slice(t.startIndex,t.endIndex)}function cn(e,t){let n=e.trim();return t===0?``:n.length<=t?n:t===1?`…`:`${n.slice(0,t-1)}\u2026`}function ln(e,t){return e===void 0?1/0:un(e,t)}function un(e,t){if(!Number.isFinite(e))throw Error(`${t} must be a finite non-negative integer.`);return Math.max(0,Math.floor(e))}function dn(e){return e.role===`assistant`}function fn(e){return e.role===`tool_result`}const pn=24e3;async function mn(e){return Sn({params:e,kind:`current_run`,transcript:await m(e.dataDir,e.sessionId,e.sessionOptions),range:e.range})}async function hn(e){return Sn({params:e,kind:`recent_conversation`,transcript:await m(e.dataDir,e.sessionId,e.sessionOptions),range:e.range})}async function gn(e){return Sn({params:e,kind:`transcript_range`,transcript:await m(e.dataDir,e.sessionId,e.sessionOptions),range:e.range})}async function _n(e){let t=An(e),n=await yn(e),r=await En(n.filePath,t.maxBytes);return{kind:`tool_result`,toolCallId:n.reference.toolCallId,toolName:n.reference.toolName,storagePath:n.reference.storagePath,content:r.content,originalBytes:r.originalBytes,returnedBytes:Buffer.byteLength(r.content,`utf-8`),truncated:r.truncated,limits:t,contextFiles:bn(e.dataDir,e.sessionId,e.sessionOptions)}}function vn(e){return{maxEntries:jn(e?.maxEntries??80,`limits.maxEntries`),maxBytes:jn(e?.maxBytes??pn,`limits.maxBytes`)}}async function yn(e){if(!e.toolCallId&&!e.storagePath)throw Error(`tool_result requires toolCallId or storagePath.`);let t=Cn(await wn(e.dataDir,e.sessionId,e.sessionOptions),{toolCallId:e.toolCallId,storagePath:e.storagePath});if(!t)throw Error(`Requested tool result is not referenced by this session transcript or context.`);return{reference:t,filePath:await Tn({dataDir:e.dataDir,sessionId:e.sessionId,sessionOptions:e.sessionOptions,reference:t})}}function bn(t,n,r){return{transcriptPath:e(t,n,r),contextSnapshotPath:h(t,n,r),toolResultsDir:S(t,n,r)}}function xn(e,t,n){let r=Mn(e.startIndex,`startIndex`),i=Mn(e.endIndex,`endIndex`);if(r<0||i<r||i>t)throw Error(`Requested transcript range is outside transcript bounds 0..${t}.`);if(i-r>n)throw Error(`Requested transcript range exceeds maximum of ${n} entries.`);return{startIndex:r,endIndex:i}}function Sn(e){let t=An(e.params),n=xn(e.range,e.transcript.length,t.maxEntries),r=e.transcript.slice(n.startIndex,n.endIndex),i=Dn(r,t.maxBytes);return{kind:e.kind,range:n,entries:i.entries,entryCount:i.entries.length,rangeEntryCount:r.length,totalEntryCount:e.transcript.length,returnedBytes:i.returnedBytes,truncated:i.truncated,limits:t,contextFiles:bn(e.params.dataDir,e.params.sessionId,e.params.sessionOptions)}}function Cn(e,t){if(t.toolCallId&&t.storagePath){let n=e.find(e=>e.toolCallId===t.toolCallId&&e.storagePath===t.storagePath);if(n)return n;let r=e.some(e=>e.toolCallId===t.toolCallId),i=e.some(e=>e.storagePath===t.storagePath);if(r&&i)throw Error(`Requested toolCallId and storagePath do not reference the same tool result.`);return}return e.find(e=>t.toolCallId?e.toolCallId===t.toolCallId:e.storagePath===t.storagePath)}async function wn(e,t,n){let[r,i]=await Promise.all([m(e,t,n),j(e,t,n)]),a=new Map;for(let e of r)Fn(e)&&e.toolResultRef?.sessionId===t&&a.set(In(e.toolResultRef),e.toolResultRef);for(let e of i.toolResults)e.sessionId===t&&a.set(In(e),e);return Array.from(a.values())}async function Tn(e){if(e.reference.sessionId!==e.sessionId)throw Error(`Requested tool result belongs to a different session.`);if(K.isAbsolute(e.reference.storagePath))throw Error(`Referenced tool result storagePath must be relative.`);let t=S(e.dataDir,e.sessionId,e.sessionOptions),n=d(e.dataDir,e.sessionId,e.sessionOptions),r=K.resolve(e.dataDir,e.reference.storagePath);if(!Pn(K.resolve(t),r))throw Error(`Referenced tool result is outside the session tool-results directory.`);if(!Pn(K.resolve(n),r))throw Error(`Referenced tool result is outside the session directory.`);let[i,a,o]=await Promise.all([Nn(t),Nn(n),Nn(r)]);if(!Pn(i,o))throw Error(`Referenced tool result resolves outside the session tool-results directory.`);if(!Pn(a,o))throw Error(`Referenced tool result resolves outside the session directory.`);return o}async function En(e,t){let n=await G.stat(e),r=await G.open(e,`r`);try{let e=Buffer.alloc(t+1),{bytesRead:i}=await r.read(e,0,t+1,0),a=Math.min(i,t);return{content:kn(e.subarray(0,a)),originalBytes:n.size,truncated:n.size>t||i>t}}finally{await r.close()}}function Dn(e,t){let n=[],r=0,i=!1;for(let a of e){let e={...a,content:``},o=Buffer.byteLength(JSON.stringify(e),`utf-8`);if(r+o>=t){i=!0;break}let s=t-r-o,c=On(a.content,s);c.truncated&&(i=!0);let l={...a,content:c.value},u=Buffer.byteLength(JSON.stringify(l),`utf-8`);if(n.push(l),r+=u,c.truncated)break}return n.length<e.length&&(i=!0),{entries:n,returnedBytes:r,truncated:i}}function On(e,t){return Buffer.byteLength(e,`utf-8`)<=t?{value:e,truncated:!1}:{value:kn(Buffer.from(e,`utf-8`).subarray(0,Math.max(0,t))),truncated:!0}}function kn(e){let t=new Ge(`utf-8`,{fatal:!0}),n=e.length;for(;n>0;)try{return t.decode(e.subarray(0,n))}catch{--n}return``}function An(e){return vn(e.limits)}function jn(e,t){if(!Number.isFinite(e)||e<=0)throw Error(`${t} must be a positive finite integer.`);return Math.floor(e)}function Mn(e,t){if(!Number.isFinite(e)||Math.floor(e)!==e)throw Error(`${t} must be a finite integer.`);return e}async function Nn(e){try{return await G.realpath(e)}catch(e){throw Error(`Unable to resolve controlled evidence path: ${Ln(e)}`)}}function Pn(e,t){let n=K.relative(e,t);return n===``||!n.startsWith(`..`)&&!K.isAbsolute(n)}function Fn(e){return e.role===`tool_result`}function In(e){return`${e.toolCallId}\n${e.storagePath}`}function Ln(e){return e instanceof Error&&e.message.trim()?e.message:String(e)}function Rn(e){return K.join(e,`.aimax`,`auto-skills`)}function zn(e){return K.join(e,`categories.json`)}function Bn(e){return K.join(e,`.auto_skills_prompt_snapshot.json`)}const Vn=/^[a-z0-9][a-z0-9-]*$/,Hn=/^[a-z0-9][a-z0-9-]*$/;function Y(e){let t=e.trim();if(!t)throw Error(`Auto-skill category path cannot be empty.`);if(t.length>180)throw Error(`Auto-skill category path is too long.`);if(t.includes(`\\`)||K.win32.isAbsolute(t)||K.posix.isAbsolute(t))throw Error(`Invalid auto-skill category path: ${e}`);let n=t.split(`/`);if(n.length!==1)throw Error(`Auto-skill category path must be a single slug.`);for(let t of n){if(!t||t===`.`||t===`..`||t.startsWith(`.`))throw Error(`Invalid auto-skill category path: ${e}`);if(!Vn.test(t))throw Error(`Invalid auto-skill category path segment: ${t}`)}return n.join(`/`)}function Un(e){let t=e.trim();if(!t)throw Error(`Auto-skill name cannot be empty.`);if(t.length>80)throw Error(`Auto-skill name is too long.`);if(t.includes(`/`)||t.includes(`\\`)||t===`.`||t===`..`||t.startsWith(`.`)||!Hn.test(t))throw Error(`Invalid auto-skill name: ${e}`);return t}function Wn(e,t){return`auto:${Y(e)}/${Un(t)}`}function Gn(e){let t=e.trim();if(!t.startsWith(`auto:`))throw Error(`Invalid auto-skill id: ${e}`);let n=t.slice(5),r=n.indexOf(`/`);if(r<=0||r===n.length-1)throw Error(`Invalid auto-skill id: ${e}`);if(n.indexOf(`/`,r+1)!==-1)throw Error(`Auto-skill id category path must be a single slug.`);let i=Y(n.slice(0,r)),a=Un(n.slice(r+1));return{skillId:Wn(i,a),categoryPath:i,skillName:a}}function Kn(e){if(e==null||e===``)return`active`;if(e===`active`||e===`archived`)return e;throw Error(`Invalid auto-skill status: ${String(e)}`)}function qn(e,t,n){let r=K.resolve(e),i=K.resolve(r,...Y(t).split(`/`),Un(n));return Yn(r,i),i}function Jn(e,t){let n=t.trim();if(!n)throw Error(`Auto-skill resource path cannot be empty.`);if(n.includes(`\\`)||K.win32.isAbsolute(n)||K.posix.isAbsolute(n))throw Error(`Invalid auto-skill resource path: ${t}`);let r=n.split(`/`);for(let e of r)if(!e||e===`.`||e===`..`||e.startsWith(`.`))throw Error(`Invalid auto-skill resource path: ${t}`);let i=K.resolve(e),a=K.resolve(i,...r);return Yn(i,a),a}function Yn(e,t){let n=K.resolve(e),r=K.resolve(t),i=K.relative(n,r);if(i.startsWith(`..`)||K.isAbsolute(i))throw Error(`Path escapes auto-skill root: ${t}`)}async function Xn(e){let t=zn(e),n;try{n=await G.readFile(t,`utf-8`)}catch(e){if(e.code===`ENOENT`)return[];throw e}let r=JSON.parse(n);if(!r||typeof r!=`object`||Array.isArray(r))throw Error(`Auto-skill categories.json must be a JSON object.`);return Object.entries(r).map(([e,t])=>{let n=Y(e),r=Qn(t);return{path:n,name:n.split(`/`).at(-1)??n,description:r.description,createdBy:r.createdBy}}).sort((e,t)=>e.path.localeCompare(t.path))}function Zn(e){return new Map(e.map(e=>[e.path,e]))}function Qn(e){return typeof e==`string`?{description:e.trim()}:!e||typeof e!=`object`||Array.isArray(e)?{description:``}:{description:typeof e.description==`string`?e.description.trim():``,createdBy:typeof e.createdBy==`string`?e.createdBy.trim():void 0}}const $n=32*1024,er=new Map;function tr(e){return new rr(e)}async function nr(e){let t=K.resolve(e);for(let e of Array.from(er.keys()))e.startsWith(`${t}|`)&&er.delete(e);await G.rm(Bn(t),{force:!0}).catch(()=>{})}var rr=class{rootDir;includeArchived;maxSkillBytes;maxResourceBytes;constructor(e){if(!e.rootDir&&!e.dataDir)throw Error(`AutoSkillsLoader requires either rootDir or dataDir.`);this.rootDir=K.resolve(e.rootDir??Rn(e.dataDir)),this.includeArchived=e.includeArchived??!1,this.maxSkillBytes=e.maxSkillBytes??98304,this.maxResourceBytes=e.maxResourceBytes??131072}async autoSkillCategories(){return ar(Zn((await this.loadIndexState()).categories))}async autoSkillList(e={}){let t=e.categoryPath?Y(e.categoryPath):void 0;return(await this.visibleEntries()).filter(e=>or(e.categoryPath,t)).map(ir)}async autoSkillSearch(e){let t=e.query.trim().toLowerCase();if(!t)return[];let n=Math.max(1,e.limit??5);return(await this.visibleEntries()).map(e=>({entry:e,score:sr(e,t)})).filter(e=>e.score>0).sort((e,t)=>t.score-e.score||e.entry.skillId.localeCompare(t.entry.skillId)).slice(0,n).map(({entry:e,score:t})=>({...ir(e),score:t}))}async autoSkillView(e){let t=Gn(e.skillId),n=(await this.visibleEntries()).find(e=>e.skillId===t.skillId);if(!n)throw Error(`Unknown auto-skill: ${e.skillId}`);if(e.filePath?.trim()){let t=Jn(n.skillDir,e.filePath),r=await gr(t,this.maxResourceBytes);return{...ir(n),status:n.status,content:r,path:yr(K.relative(this.rootDir,t)),skillDir:n.skillDir,filePath:yr(K.relative(n.skillDir,t))}}let r=await gr(n.skillFile,this.maxSkillBytes);return{...ir(n),status:n.status,content:r,path:yr(K.relative(this.rootDir,n.skillFile)),skillDir:n.skillDir,tags:n.tags,relatedSkills:n.relatedSkills}}async loadIndex(){let e=await this.loadIndexState();return this.visibleEntriesFrom(e.entries)}async loadIndexState(e=!1){let t=this.optionsHash(),n=`${this.rootDir}|${t}`,r=await cr(this.rootDir),i=er.get(n);if(!e&&i&&pr(i.manifest,r))return i;let a=e?void 0:await dr(this.rootDir,t,r);if(a){let e={optionsHash:t,manifest:r,entries:a.entries,categories:a.categories};return er.set(n,e),e}let o=await Xn(this.rootDir),s=Zn(o),c={optionsHash:t,manifest:r,entries:(await this.parseEntriesFromManifest(r)).filter(e=>s.has(e.categoryPath)),categories:o};return er.set(n,c),await fr(this.rootDir,c).catch(()=>{}),c}async parseEntriesFromManifest(e){let t=e.filter(e=>e.kind===`skill`).map(e=>e.filePath),n=[];for(let e of t){let t=await this.loadEntry(e);t&&n.push(t)}return n.sort((e,t)=>e.skillId.localeCompare(t.skillId))}async visibleEntries(){let e=await this.loadIndex();return this.visibleEntriesFrom(e)}visibleEntriesFrom(e){return this.includeArchived?e:e.filter(e=>e.status===`active`)}optionsHash(){return Sr({loaderVersion:`auto-skills-loader-v2`,rootDir:this.rootDir,includeArchived:this.includeArchived,maxSkillBytes:this.maxSkillBytes,maxResourceBytes:this.maxResourceBytes,indexHeadBytes:$n})}async loadEntry(e){try{let t=K.dirname(e),n=Un(K.basename(t)),r=yr(K.relative(this.rootDir,t)),i=Y(K.posix.dirname(r)),a=Wn(i,n),o=K.join(t,`metadata.json`),s=await mr(o);if(s?.skillId&&Gn(s.skillId).skillId!==a)throw Error(`metadata skillId does not match path for ${a}`);if(s?.categoryPath&&Y(s.categoryPath)!==i)throw Error(`metadata categoryPath does not match path for ${a}`);if(s?.source&&s.source!==`auto`)throw Error(`metadata source must be auto for ${a}`);let c=Kn(s?.status);return{skillId:a,name:n,description:_r(await hr(e,$n)),categoryPath:i,source:`auto`,status:c,rootDir:this.rootDir,skillDir:t,skillFile:e,metadataFile:s?o:void 0,tags:vr(s?.tags),relatedSkills:vr(s?.relatedSkills),confidence:typeof s?.confidence==`number`?s.confidence:void 0,createdAt:typeof s?.createdAt==`string`?s.createdAt:void 0,updatedAt:typeof s?.updatedAt==`string`?s.updatedAt:void 0}}catch(t){process.stderr.write(`[auto-skills] skipped ${e}: ${br(t)}\n`);return}}};function ir(e){return{skillId:e.skillId,name:e.name,description:e.description,categoryPath:e.categoryPath,source:e.source}}function ar(e){return Array.from(e.values()).sort((e,t)=>e.path.localeCompare(t.path))}function or(e,t){return t?e===t:!0}function sr(e,t){let n=t.split(/\s+/).filter(Boolean),r=e.name.toLowerCase(),i=e.description.toLowerCase(),a=e.categoryPath.toLowerCase(),o=e.tags.join(` `).toLowerCase(),s=0;r===t&&(s+=80),r.includes(t)&&(s+=30),i.includes(t)&&(s+=20),a.includes(t)&&(s+=10),o.includes(t)&&(s+=10);for(let e of n)r.includes(e)&&(s+=8),i.includes(e)&&(s+=5),a.includes(e)&&(s+=3),o.includes(e)&&(s+=3);return s}async function cr(e){let t;try{t=await G.readdir(e,{withFileTypes:!0})}catch(e){if(e.code===`ENOENT`)return[];throw e}let n=[];return await ur(K.join(e,`categories.json`),`categories`,n),await lr(e,t,n),n.sort((e,t)=>e.filePath.localeCompare(t.filePath)||e.kind.localeCompare(t.kind))}async function lr(e,t,n){for(let r of t.sort((e,t)=>e.name.localeCompare(t.name))){if(r.name.startsWith(`.`))continue;let t=K.join(e,r.name);if(r.isFile()&&r.name===`SKILL.md`){await ur(t,`skill`,n),await ur(K.join(e,`metadata.json`),`metadata`,n),await ur(K.join(e,`DESCRIPTION.md`),`description`,n);continue}if(!r.isDirectory())continue;let i;try{i=await G.readdir(t,{withFileTypes:!0})}catch(e){let t=e.code;if(t===`ENOENT`||t===`ENOTDIR`)continue;throw e}await lr(t,i,n)}}async function ur(e,t,n){try{let r=await G.stat(e);if(!r.isFile())return;n.push({filePath:e,kind:t,size:r.size,mtimeMs:r.mtimeMs})}catch(e){let t=e.code;if(t===`ENOENT`||t===`ENOTDIR`)return;throw e}}async function dr(e,t,n){let r;try{r=await G.readFile(Bn(e),`utf-8`)}catch(e){if(e.code===`ENOENT`)return;throw e}try{let e=JSON.parse(r);return e.version!==1||e.optionsHash!==t||!Array.isArray(e.entries)||!Array.isArray(e.categories)||!Array.isArray(e.manifest)||!pr(e.manifest,n)?void 0:e}catch{return}}async function fr(e,t){if(!await xr(e))return;let n={version:1,createdAt:new Date().toISOString(),optionsHash:t.optionsHash,manifest:t.manifest,entries:t.entries,categories:t.categories};await G.writeFile(Bn(e),`${JSON.stringify(n,null,2)}\n`,`utf-8`)}function pr(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){let r=e[n],i=t[n];if(r.filePath!==i.filePath||r.kind!==i.kind||r.size!==i.size||r.mtimeMs!==i.mtimeMs)return!1}return!0}async function mr(e){try{let t=await G.readFile(e,`utf-8`),n=JSON.parse(t);if(!n||typeof n!=`object`||Array.isArray(n))throw Error(`metadata.json must be a JSON object.`);return n}catch(e){if(e.code===`ENOENT`)return;throw e}}async function hr(e,t){let n=await G.open(e,`r`);try{let e=await n.stat(),r=Math.min(e.size,t),i=Buffer.alloc(r);return await n.read(i,0,r,0),i.toString(`utf-8`)}finally{await n.close()}}async function gr(e,t){if((await G.stat(e)).size>t)throw Error(`Auto-skill file exceeds size limit: ${e}`);return G.readFile(e,`utf-8`)}function _r(e){let t=He(e),n=t.data.description;if(typeof n==`string`&&n.trim())return n.trim();for(let e of t.content.split(`
|
|
10
|
-
`)){let t=e.trim();if(t)return(t.match(/^#+\s+(.+)$/)?.[1]??t).trim()}return``}function vr(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(Boolean):[]}function yr(e){return e.split(K.sep).join(`/`)}function br(e){return e instanceof Error?e.message:String(e)}async function xr(e){try{return await G.access(e),!0}catch(e){if(e.code===`ENOENT`)return!1;throw e}}function Sr(e){return Ue(`sha256`).update(JSON.stringify(e)).digest(`hex`)}function Cr(e,t,n,r){let i={"Client-Code":`AIMax`,"X-Session-Id":t};return n&&(i[`X-Message-Id`]=n),r&&(i[`X-Channel`]=r),{id:e.model,name:e.model,api:`openai-completions`,provider:`openai`,baseUrl:e.baseUrl,reasoning:!1,input:[`text`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:e.contextWindow??2e5,maxTokens:32768,headers:i,compat:{supportsStore:!1,supportsDeveloperRole:!1,supportsReasoningEffort:!1,supportsUsageInStreaming:!0}}}const wr=`/aimax/agents`,Tr=/^[a-z]+(?:-[a-z]+)*$/;function Er(e){let t=[{dir:e.systemAgentsDir??wr,source:`system`},{dir:K.join(e.dataDir,`.aimax`,`agents`),source:`user`}];return e.projectDir?.trim()&&t.push({dir:K.join(e.projectDir.trim(),`.aimax`,`agents`),source:`project`}),t}async function Dr(e){let t=new Map;for(let n of Er(e)){let e=await jr(n.dir,n.source);for(let n of e)t.set(n.name,n)}return Array.from(t.values())}function Or(e={}){let t=e.allAgents??e.availableAgents??[],n=Fr(e.availableAgents??t);return{allAgents:t,availableAgents:n,findPublic:e=>Nr(n,e),findAny:e=>Nr(t,e,{includeInternal:!0}),stats:()=>({total:t.length,public:n.length,internal:Math.max(0,t.length-n.length)})}}function kr(e){return!!(e&&typeof e==`object`&&Array.isArray(e.allAgents)&&Array.isArray(e.availableAgents)&&typeof e.findPublic==`function`&&typeof e.findAny==`function`&&typeof e.stats==`function`)}async function Ar(e){return kr(e.agentPolicy)?e.agentPolicy:Or({allAgents:await Dr(e)})}async function jr(e,t){let n;try{n=await G.readdir(e,{withFileTypes:!0})}catch(e){let t=e.code;if(t===`ENOENT`||t===`ENOTDIR`)return[];throw e}let r=[];for(let i of n){if(!i.isFile()||!i.name.endsWith(`.md`))continue;let n=K.join(e,i.name),a=Mr(await G.readFile(n,`utf-8`),{sourcePath:n,source:t});a&&r.push(a)}return r.sort((e,t)=>e.name.localeCompare(t.name)),r}function Mr(e,t){let n=He(e),r=Br(n.data.name)?.trim(),i=Br(n.data.description)?.trim();if(!r||!Tr.test(r)||!i)return;let a=Br(n.data.model)?.trim(),o=Br(n.data.initPrompt)?.trim()??Br(n.data.initialPrompt)?.trim(),s=Vr(n.data.maxTurns),c=Hr(n.data.tools),l=Hr(n.data.disallowedTools),u=Hr(n.data.skills),d=Ur(n.data.visibility);if(!(n.data.visibility!==void 0&&!d))return{name:r,description:i,visibility:d??`public`,...c?{tools:c}:{},...l?{disallowedTools:l}:{},...a&&a!==`inherit`?{model:a}:{},...s?{maxTurns:s}:{},...o?{initPrompt:o}:{},...u?{skills:u}:{},systemPrompt:n.content.trim(),sourcePath:t.sourcePath,source:t.source}}function Nr(e,t,n={}){let r=t?.trim();if(r)return e.find(e=>e.name===r&&(n.includeInternal||Pr(e)===`public`))}function Pr(e){return e.visibility??`public`}function Fr(e){return e.filter(e=>Pr(e)===`public`)}function Ir(e,t){if(!t?.skills)return e;let n=new Set(t.skills);return e.filter(e=>n.has(e.name))}function Lr(e,t){if(!t?.tools&&!t?.disallowedTools)return e;let n=t.tools?new Set(t.tools.map(Wr)):void 0,r=new Set((t.disallowedTools??[]).map(Wr));return e.filter(e=>{let t=typeof e.name==`string`?Wr(e.name):``;return!t||n&&!n.has(t)?!1:!r.has(t)})}function Rr(e){let t=Fr(e).filter(e=>e.source!==`system`);return t.length===0?``:[`## Custom Agents`,`The following custom agents are currently effective.`,"When delegating with `subagent_spawn`, you may set the optional `agent` field only to one of the exact names listed below.","Do not guess, invent, paraphrase, translate, or synthesize agent names. If no listed custom agent clearly matches, leave `agent` unset and delegate normally.","When the user's message contains `@<agent-name>` (e.g. `@secure-code-reviewer`) and the name matches one of the listed custom agents, you MUST
|
|
10
|
+
`)){let t=e.trim();if(t)return(t.match(/^#+\s+(.+)$/)?.[1]??t).trim()}return``}function vr(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(Boolean):[]}function yr(e){return e.split(K.sep).join(`/`)}function br(e){return e instanceof Error?e.message:String(e)}async function xr(e){try{return await G.access(e),!0}catch(e){if(e.code===`ENOENT`)return!1;throw e}}function Sr(e){return Ue(`sha256`).update(JSON.stringify(e)).digest(`hex`)}function Cr(e,t,n,r){let i={"Client-Code":`AIMax`,"X-Session-Id":t};return n&&(i[`X-Message-Id`]=n),r&&(i[`X-Channel`]=r),{id:e.model,name:e.model,api:`openai-completions`,provider:`openai`,baseUrl:e.baseUrl,reasoning:!1,input:[`text`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:e.contextWindow??2e5,maxTokens:32768,headers:i,compat:{supportsStore:!1,supportsDeveloperRole:!1,supportsReasoningEffort:!1,supportsUsageInStreaming:!0}}}const wr=`/aimax/agents`,Tr=/^[a-z]+(?:-[a-z]+)*$/;function Er(e){let t=[{dir:e.systemAgentsDir??wr,source:`system`},{dir:K.join(e.dataDir,`.aimax`,`agents`),source:`user`}];return e.projectDir?.trim()&&t.push({dir:K.join(e.projectDir.trim(),`.aimax`,`agents`),source:`project`}),t}async function Dr(e){let t=new Map;for(let n of Er(e)){let e=await jr(n.dir,n.source);for(let n of e)t.set(n.name,n)}return Array.from(t.values())}function Or(e={}){let t=e.allAgents??e.availableAgents??[],n=Fr(e.availableAgents??t);return{allAgents:t,availableAgents:n,findPublic:e=>Nr(n,e),findAny:e=>Nr(t,e,{includeInternal:!0}),stats:()=>({total:t.length,public:n.length,internal:Math.max(0,t.length-n.length)})}}function kr(e){return!!(e&&typeof e==`object`&&Array.isArray(e.allAgents)&&Array.isArray(e.availableAgents)&&typeof e.findPublic==`function`&&typeof e.findAny==`function`&&typeof e.stats==`function`)}async function Ar(e){return kr(e.agentPolicy)?e.agentPolicy:Or({allAgents:await Dr(e)})}async function jr(e,t){let n;try{n=await G.readdir(e,{withFileTypes:!0})}catch(e){let t=e.code;if(t===`ENOENT`||t===`ENOTDIR`)return[];throw e}let r=[];for(let i of n){if(!i.isFile()||!i.name.endsWith(`.md`))continue;let n=K.join(e,i.name),a=Mr(await G.readFile(n,`utf-8`),{sourcePath:n,source:t});a&&r.push(a)}return r.sort((e,t)=>e.name.localeCompare(t.name)),r}function Mr(e,t){let n=He(e),r=Br(n.data.name)?.trim(),i=Br(n.data.description)?.trim();if(!r||!Tr.test(r)||!i)return;let a=Br(n.data.model)?.trim(),o=Br(n.data.initPrompt)?.trim()??Br(n.data.initialPrompt)?.trim(),s=Vr(n.data.maxTurns),c=Hr(n.data.tools),l=Hr(n.data.disallowedTools),u=Hr(n.data.skills),d=Ur(n.data.visibility);if(!(n.data.visibility!==void 0&&!d))return{name:r,description:i,visibility:d??`public`,...c?{tools:c}:{},...l?{disallowedTools:l}:{},...a&&a!==`inherit`?{model:a}:{},...s?{maxTurns:s}:{},...o?{initPrompt:o}:{},...u?{skills:u}:{},systemPrompt:n.content.trim(),sourcePath:t.sourcePath,source:t.source}}function Nr(e,t,n={}){let r=t?.trim();if(r)return e.find(e=>e.name===r&&(n.includeInternal||Pr(e)===`public`))}function Pr(e){return e.visibility??`public`}function Fr(e){return e.filter(e=>Pr(e)===`public`)}function Ir(e,t){if(!t?.skills)return e;let n=new Set(t.skills);return e.filter(e=>n.has(e.name))}function Lr(e,t){if(!t?.tools&&!t?.disallowedTools)return e;let n=t.tools?new Set(t.tools.map(Wr)):void 0,r=new Set((t.disallowedTools??[]).map(Wr));return e.filter(e=>{let t=typeof e.name==`string`?Wr(e.name):``;return!t||n&&!n.has(t)?!1:!r.has(t)})}function Rr(e){let t=Fr(e).filter(e=>e.source!==`system`);return t.length===0?``:[`## Custom Agents`,`The following custom agents are currently effective.`,"When delegating with `subagent_spawn`, you may set the optional `agent` field only to one of the exact names listed below.","Do not guess, invent, paraphrase, translate, or synthesize agent names. If no listed custom agent clearly matches, leave `agent` unset and delegate normally.","When the user's message contains `@<agent-name>` (e.g. `@secure-code-reviewer`) and the name exactly matches one of the listed custom agents, that mention is an explicit delegation request.","For such a matching `@<agent-name>` request, you MUST call `subagent_spawn` to run the request through that custom agent, with the `agent` field set to the exact matched agent name.","Do not answer the request yourself, do not merely describe the agent, and do not omit the tool call when a matching `@<agent-name>` is present.",`If the mention does not exactly match a listed custom agent, do not invent a match; continue with the current agent or ask a concise clarification if needed.`,t.map(e=>`- ${e.name}: ${e.description}`).join(`
|
|
11
11
|
`),``].join(`
|
|
12
12
|
`)}function zr(e,t){let n=e.initPrompt?.trim(),r=t.trim();return n?`${n}\n\n${r}`:r}function Br(e){return typeof e==`string`?e:void 0}function Vr(e){if(!(typeof e!=`number`||!Number.isInteger(e)||e<=0))return e}function Hr(e){let t;if(typeof e==`string`)t=e.split(`,`);else if(Array.isArray(e))t=e.filter(e=>typeof e==`string`);else return;let n=t.map(e=>e.trim()).filter(Boolean);return n.length>0?n:void 0}function Ur(e){if(e!==void 0&&!(e!==`public`&&e!==`internal`))return e}function Wr(e){let t=e.trim();return{bash:`exec`,read:`read_file`,write:`write_file`,edit:`edit_file`,multiedit:`edit_file`,glob:`list_dir`,grep:`exec`}[t.toLowerCase()]??t}const Gr=new qe;async function Kr(e,t){return await Gr.run(e,t)}function qr(e){return{async emit(t){let n=Gr.getStore();if(!n||n.pluginId!==e)throw Error(`Plugin ${e} cannot emit progress outside its runtime context`);if(!n.hookContext.sessionId)throw Error(`Plugin ${e} cannot emit progress without an active session`);await n.eventDispatcher.dispatchProgress(n.hookContext.sessionId,{type:`custom`,pluginId:e,name:t.name,label:t.label,data:t.data})}}}var Jr=class{hooks=new Map;register(e){let t=this.hooks.get(e.hookName)??[];t.push(e),t.sort((e,t)=>(e.priority??0)-(t.priority??0)),this.hooks.set(e.hookName,t)}async dispatch(e,t,n,r){let i=this.hooks.get(e)??[],a=[];for(let e of i){let i=async()=>await e.handler(t,n),o=r?await Kr({pluginId:e.pluginId,hookContext:n,eventDispatcher:r.eventDispatcher},i):await i();a.push(o)}return a}},Yr=class{constructor(e){this.params=e}async dispatchProgress(e,t){let n={...t,sessionId:e,...this.params.messageId?{messageId:this.params.messageId}:{},...this.params.subagentContext?{parentSessionId:this.params.subagentContext.parentSessionId,depth:this.params.subagentContext.depth}:{}};await this.params.onProgress?.(n)}async dispatchDiagnostic(e,t){await this.dispatchProgress(e,{type:`diagnostic`,...t})}},Xr=class extends Error{code;statusCode;statusText;providerMessage;providerCode;providerType;retryable;constructor(e){super(e.message,{cause:e.cause}),this.name=`LlmRequestError`,this.code=e.code,this.statusCode=e.statusCode,this.statusText=e.statusText,this.providerMessage=e.providerMessage,this.providerCode=e.providerCode,this.providerType=e.providerType,this.retryable=e.retryable}};function Zr(e){return{async chat(t){let n=Qr(t),r=t.model??e.defaultModel;if(!r)throw Error(`LLM model is required`);await ti(e.hooks,`llm_input`,{sessionId:e.hookCtx?.sessionId??`unknown`,model:r,prompt:$r(n),historyMessages:n},e.hookCtx);let i={model:r,messages:n,stream:!1};typeof t.temperature==`number`&&(i.temperature=t.temperature),typeof t.maxTokens==`number`&&(i.max_tokens=t.maxTokens);let{signal:a,clear:o,didTimeout:s}=ni(t.signal,t.timeoutMs);try{let t;try{let n=e.baseUrl.replace(/\/$/,``);t=await fetch(`${n}/chat/completions`,{method:`POST`,headers:{"content-type":`application/json`,authorization:`Bearer ${e.apiKey}`,"Client-Code":`AIMax`},body:JSON.stringify(i),signal:a})}catch(e){throw ii(e,s())}if(!t.ok){let e=await ri(t)||void 0,n=t.statusText?.trim()||void 0,r=[t.status,n].filter(Boolean).join(` `);throw new Xr({message:e?`LLM upstream returned HTTP ${r}: ${e}`:`LLM upstream returned HTTP ${r}`,code:`http_error`,statusCode:t.status,statusText:n,providerMessage:e,retryable:oi(t.status)})}let n=Date.now(),o;try{o=await t.json()}catch(e){throw new Xr({message:`LLM upstream returned an invalid JSON response`,code:`invalid_response`,retryable:!1,cause:e})}let c=o.choices?.[0]?.message?.content??o.choices?.[0]?.text??``,l=ei(o.usage),u=Math.max(0,Date.now()-n);return await ti(e.hooks,`llm_output`,{sessionId:e.hookCtx?.sessionId??`unknown`,model:r,assistantTexts:c?[c]:[],durationMs:u,usage:l},e.hookCtx),{text:c,usage:l,raw:o}}finally{o()}}}}function Qr(e){if(Array.isArray(e.messages)&&e.messages.length>0)return e.messages;let t=[];if(e.system?.trim()&&t.push({role:`system`,content:e.system}),e.user?.trim()&&t.push({role:`user`,content:e.user}),t.length===0)throw Error(`LLM messages are required`);return t}function $r(e){return e.map(e=>`${e.role}: ${e.content}`).join(`
|
|
13
13
|
`)}function ei(e){let t=e?.input??e?.prompt_tokens??0,n=e?.output??e?.completion_tokens??0;return{input:t,output:n,total:e?.total??e?.total_tokens??t+n}}async function ti(e,t,n,r){!e||!r||await e.dispatch(t,n,r)}function ni(e,t){if(!e&&(!t||t<=0))return{signal:void 0,clear:()=>{},didTimeout:()=>!1};let n=new AbortController,r,i=!1;return e&&(e.aborted?n.abort():e.addEventListener(`abort`,()=>n.abort(),{once:!0})),t&&t>0&&(r=setTimeout(()=>{i=!0,n.abort()},t)),{signal:n.signal,clear:()=>{r&&clearTimeout(r)},didTimeout:()=>i}}async function ri(e){try{let t=await e.text();return t?t.trim().slice(0,200):``}catch{return``}}function ii(e,t){return e instanceof Xr?e:ai(e)?t?new Xr({message:`LLM request timed out`,code:`timeout`,retryable:!0,cause:e}):e:new Xr({message:`LLM network request failed: ${e instanceof Error?e.message:String(e)}`,code:`network_error`,retryable:!0,cause:e})}function ai(e){return e instanceof Error&&e.name===`AbortError`}function oi(e){return e===408||e===409||e===425||e===429||e>=500}var si=class extends Error{isHitlPause=!0;constructor(e,t,n,r=!1){super(`HITL_PAUSED`),this.request=e,this.checkpoint=t,this.toolContext=n,this.transparentPause=r,this.name=`HitlPauseSignal`}};function ci(e){return!!(e instanceof si||typeof e==`object`&&e&&`isHitlPause`in e&&e.isHitlPause===!0)}var li=class extends Error{isUiToolPause=!0;request;constructor(e,t,n,r,i,a,o){super(`UI_TOOL_PAUSED`),this.toolArgs=o,this.name=`UiToolPauseSignal`,this.request={requestId:e,sessionId:t,toolName:n,toolCallId:r,outputSchema:i,extra:a,createdAt:new Date().toISOString()}}};function ui(e){return!!(e instanceof li||typeof e==`object`&&e&&`isUiToolPause`in e&&e.isUiToolPause===!0)}const di=new qe;function fi(){return{}}async function pi(e,t){return await di.run(e,t)}function mi(e){let t=di.getStore();!t||t.signal||(t.signal=e)}const hi=new qe;function gi(){return{}}async function _i(e,t){return await hi.run(e,t)}function vi(e){let t=hi.getStore();!t||t.signal||(t.signal=e)}function yi(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.error&&typeof t.error==`object`?!0:t.object===`error`}function bi(e){if(!yi(e))return null;let t=e,n=xi(t.message),r=Ci(n?.code)??Ci(t.code),i=Ci(n?.type)??Ci(t.type),a=Ci(n?.message)??Si(t.error)??Ci(t.message)??`Unknown upstream error`;return{message:wi(a,i,r),providerMessage:a,providerCode:r,providerType:i,retryable:Ti(r,i),raw:e}}function xi(e){if(typeof e!=`string`)return null;let t=e.trim();if(!t.startsWith(`{`)||!t.endsWith(`}`))return null;try{let e=JSON.parse(t);return e&&typeof e==`object`?e:null}catch{return null}}function Si(e){if(!(!e||typeof e!=`object`))return Ci(e.message)}function Ci(e){if(e==null)return;let t=String(e).trim();return t.length>0?t:void 0}function wi(e,t,n){let r=[t,n].filter(Boolean).join(` `);return r?`${e} (${r})`:e}function Ti(e,t){let n=Number(e);if(Number.isFinite(n))return n===408||n===409||n===425||n===429||n>=500;let r=t?.toLowerCase();return r===`ratelimiterror`||r===`internalservererror`}const Ei=(e,t,n)=>{let r=new tt;return(async()=>{let i={role:`assistant`,content:[],api:e.api,provider:e.provider,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`stop`,timestamp:Date.now(),errorMessage:void 0};try{let a=ki(e,t,n?.apiKey||Xe(e.provider)||``,n?.headers),o=Ai(e,t,n);n?.onPayload?.(o);let s=await a.chat.completions.create(o,{signal:n?.signal});r.push({type:`start`,partial:i});let c=null,l=i.content,u=()=>l.length-1,d=e=>{if(e){if(e.type===`text`){r.push({type:`text_end`,contentIndex:u(),content:e.text,partial:i});return}if(e.type===`thinking`){r.push({type:`thinking_end`,contentIndex:u(),content:e.thinking,partial:i});return}e.type===`toolCall`&&(e.arguments=Ze(e.partialArgs),delete e.partialArgs,r.push({type:`toolcall_end`,contentIndex:u(),toolCall:e,partial:i}))}};for await(let t of s){let n=bi(t);if(n)throw new Xr({message:`LLM upstream returned an error payload in a 200 stream: ${n.message}`,code:`stream_payload_error`,providerMessage:n.providerMessage,providerCode:n.providerCode,providerType:n.providerType,retryable:n.retryable,cause:n.raw});if(t.usage){let n=t.usage.prompt_tokens_details?.cached_tokens||0,r=t.usage.completion_tokens_details?.reasoning_tokens||0,a=(t.usage.prompt_tokens||0)-n,o=(t.usage.completion_tokens||0)+r;i.usage={input:a,output:o,cacheRead:n,cacheWrite:0,totalTokens:a+o+n,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},Ye(e,i.usage)}let a=t.choices?.[0];if(!a||(a.finish_reason&&(i.stopReason=Ii(a.finish_reason)),!a.delta))continue;a.delta.content!==null&&a.delta.content!==void 0&&a.delta.content.length>0&&((!c||c.type!==`text`)&&(d(c),c={type:`text`,text:``},i.content.push(c),r.push({type:`text_start`,contentIndex:u(),partial:i})),c.text+=a.delta.content,r.push({type:`text_delta`,contentIndex:u(),delta:a.delta.content,partial:i}));let o=[`reasoning_content`,`reasoning`,`reasoning_text`].find(e=>{let t=a.delta[e];return t!=null&&t.length>0});if(o){(!c||c.type!==`thinking`)&&(d(c),c={type:`thinking`,thinking:``,thinkingSignature:o},i.content.push(c),r.push({type:`thinking_start`,contentIndex:u(),partial:i}));let e=a.delta[o];c.thinking+=e,r.push({type:`thinking_delta`,contentIndex:u(),delta:e,partial:i})}if(a.delta.tool_calls)for(let e of a.delta.tool_calls){(!c||c.type!==`toolCall`||e.id&&c.id!==e.id)&&(d(c),c={type:`toolCall`,id:e.id||``,name:e.function?.name||``,arguments:{},partialArgs:``},i.content.push(c),r.push({type:`toolcall_start`,contentIndex:u(),partial:i})),e.id&&(c.id=e.id),e.function?.name&&(c.name=e.function.name);let t=``;e.function?.arguments&&(t=e.function.arguments,c.partialArgs+=e.function.arguments,c.arguments=Ze(c.partialArgs)),r.push({type:`toolcall_delta`,contentIndex:u(),delta:t,partial:i})}let s=a.delta.reasoning_details;if(s&&Array.isArray(s)){for(let e of s)if(e.type===`reasoning.encrypted`&&e.id&&e.data){let t=i.content.find(t=>t.type===`toolCall`&&t.id===e.id);t&&(t.thoughtSignature=JSON.stringify(e))}}}if(d(c),n?.signal?.aborted)throw Error(`Request was aborted`);if(i.stopReason===`aborted`||i.stopReason===`error`)throw Error(i.errorMessage??(i.stopReason===`aborted`?`Request was aborted`:`LLM stream ended with stopReason=${i.stopReason}`));r.push({type:`done`,reason:i.stopReason,message:i}),r.end()}catch(e){for(let e of i.content)delete e.index;i.stopReason=n?.signal?.aborted?`aborted`:`error`,i.errorMessage=e instanceof Error?e.message:JSON.stringify(e),e instanceof Xr&&Object.assign(i,{errorCode:e.code,statusCode:e.statusCode,statusText:e.statusText,providerMessage:e.providerMessage,providerCode:e.providerCode,providerType:e.providerType,retryable:e.retryable});let t=e?.error?.metadata?.raw;t&&(i.errorMessage+=`\n${t}`),r.push({type:`error`,reason:i.stopReason,error:i}),r.end()}})(),r},Di=(e,t,n)=>{let r=n?.apiKey||Xe(e.provider);if(!r)throw Error(`No API key for provider: ${e.provider}`);let i=at(e,n,r),a=et(e)?n?.reasoning:ot(n?.reasoning);return Ei(e,t,{...i,reasoningEffort:a,toolChoice:void 0})};function Oi(e,t,n){return Ai(e,t,n)}function ki(e,t,n,r){if(!n){if(!process.env.OPENAI_API_KEY)throw Error(`OpenAI API key is required. Set OPENAI_API_KEY environment variable or pass it as an argument.`);n=process.env.OPENAI_API_KEY}let i={...e.headers};if(e.provider===`github-copilot`){let e=it(t.messages);Object.assign(i,rt({messages:t.messages,hasImages:e}))}return r&&Object.assign(i,r),new Je({apiKey:n,baseURL:e.baseUrl,dangerouslyAllowBrowser:!0,defaultHeaders:i})}function Ai(e,t,n){let r=Ri(e),i=Pi(e,t,r);Ni(e,i);let a={model:e.id,messages:i,stream:!0};if(r.supportsUsageInStreaming!==!1&&(a.stream_options={include_usage:!0}),r.supportsStore&&(a.store=!1),n?.maxTokens&&(r.maxTokensField===`max_tokens`?a.max_tokens=n.maxTokens:a.max_completion_tokens=n.maxTokens),n?.temperature!==void 0&&(a.temperature=n.temperature),t.tools?a.tools=Fi(t.tools,r):ji(t.messages)&&(a.tools=[]),n?.toolChoice&&(a.tool_choice=n.toolChoice),(r.thinkingFormat===`zai`||r.thinkingFormat===`qwen`)&&e.reasoning?a.enable_thinking=!!n?.reasoningEffort:n?.reasoningEffort&&e.reasoning&&r.supportsReasoningEffort&&(a.reasoning_effort=n.reasoningEffort),e.baseUrl.includes(`openrouter.ai`)&&e.compat?.openRouterRouting&&(a.provider=e.compat.openRouterRouting),e.baseUrl.includes(`ai-gateway.vercel.sh`)&&e.compat?.vercelGatewayRouting){let t=e.compat.vercelGatewayRouting;if(t.only||t.order){let e={};t.only&&(e.only=t.only),t.order&&(e.order=t.order),a.providerOptions={gateway:e}}}return a}function ji(e){for(let t of e)if(t.role===`toolResult`||t.role===`assistant`&&t.content.some(e=>e.type===`toolCall`))return!0;return!1}function Mi(e){let t=e.replace(/[^a-zA-Z0-9]/g,``);return t.length<9?t+=`ABCDEFGHI`.slice(0,9-t.length):t.length>9&&(t=t.slice(0,9)),t}function Ni(e,t){if(!(e.provider!==`openrouter`||!e.id.startsWith(`anthropic/`)))for(let e=t.length-1;e>=0;--e){let n=t[e];if(n.role!==`user`&&n.role!==`assistant`)continue;let r=n.content;if(typeof r==`string`){n.content=[{type:`text`,text:r,cache_control:{type:`ephemeral`}}];return}if(Array.isArray(r))for(let e=r.length-1;e>=0;--e){let t=r[e];if(t?.type===`text`){Object.assign(t,{cache_control:{type:`ephemeral`}});return}}}}function Pi(e,t,n){let r=[],i=t=>{if(n.requiresMistralToolIds)return Mi(t);if(t.includes(`|`)){let[e]=t.split(`|`);return e.replace(/[^a-zA-Z0-9_-]/g,`_`).slice(0,40)}return e.provider===`openai`&&t.length>40?t.slice(0,40):t},a=st(t.messages,e,e=>i(e));if(t.systemPrompt){let i=e.reasoning&&n.supportsDeveloperRole?`developer`:`system`;r.push({role:i,content:nt(t.systemPrompt)})}let o=null;for(let t=0;t<a.length;t+=1){let i=a[t];if(n.requiresAssistantAfterToolResult&&o===`toolResult`&&i.role===`user`&&r.push({role:`assistant`,content:`I have processed the tool results.`}),i.role===`user`){if(typeof i.content==`string`)r.push({role:`user`,content:nt(i.content)});else{let t=i.content.map(e=>e.type===`text`?{type:`text`,text:nt(e.text)}:{type:`image_url`,image_url:{url:`data:${e.mimeType};base64,${e.data}`}}),n=e.input.includes(`image`)?t:t.filter(e=>e.type!==`image_url`);if(n.length===0)continue;r.push({role:`user`,content:n})}o=i.role;continue}if(i.role===`assistant`){let t={role:`assistant`,content:n.requiresAssistantAfterToolResult?``:null},a=i.content.filter(e=>e.type===`text`&&e.text?.trim().length>0);a.length>0&&(t.content=e.provider===`github-copilot`?a.map(e=>nt(e.text)).join(``):a.map(e=>({type:`text`,text:nt(e.text)})));let s=i.content.filter(e=>e.type===`thinking`&&e.thinking?.trim().length>0);if(s.length>0)if(n.requiresThinkingAsText){let e=s.map(e=>e.thinking).join(`
|