alchemylab-opencode 2.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,393 +0,0 @@
1
- // Built by esbuild from opencode-server source
2
- if (typeof globalThis.Bun === 'undefined') {
3
- globalThis.Bun = {
4
- version: '0.0.0-node-compat',
5
- stdin: { async text() { const chunks = []; for await (const c of process.stdin) chunks.push(c); return Buffer.concat(chunks).toString(); } },
6
- which(cmd) { try { return require('child_process').execFileSync('which', [cmd], { encoding: 'utf8' }).trim(); } catch { return null; } },
7
- };
8
- }
9
- if (typeof globalThis.__name === 'undefined') { globalThis.__name = (t, n) => { Object.defineProperty(t, 'name', { value: n, configurable: true }); return t; }; }
10
- if (typeof globalThis.__export === 'undefined') { globalThis.__export = (t, a) => { for (const k in a) Object.defineProperty(t, k, { get: a[k], enumerable: true }); }; }
11
- import { createRequire as __alchemyCreateRequire } from 'node:module';
12
- const require = __alchemyCreateRequire(import.meta.url);
13
-
14
- import{d as cr}from"./chunk-4K2RXRZL.js";import{N as Ul,a as it,b as je,l as ws}from"./chunk-Z5TLIUAI.js";import{a as Zc,c as ml,f as V,i as dr,k as Dt,l as Ln,n as gs,o as bt,p as vl,q as Jo,s as Xo,t as ks,u as ve,w as Ts}from"./chunk-ZMHNE2MU.js";import{b as ut,c as Kr,d as yl,e as Ae}from"./chunk-QRABYJKL.js";import{A as Bt,C as bl,D as Cn,Da as bs,Ea as _t,H as Ho,Ha as Tl,Ia as Il,Ja as Ol,Ka as Ss,La as Dl,Ma as Rl,Na as _l,Oa as Al,Pa as Pl,Qa as Cl,Ra as Es,Sa as ft,Ta as Ml,Ua as Ll,V as Mn,W as Go,Wa as vs,Y as Sl,Ya as Qr,Z as Ko,_ as hs,b as Pn,c as Jr,h as hl,ha as El,i as Xr,k as gl,ma as St,na as Yr,oa as wl,pa as kl,u as xl,va as Ee,wa as xs,xa as Rt,y as lr,z as ze}from"./chunk-OMDJ6ZZ2.js";import{Ab as pe,Cb as Vo,Cc as Se,D as Qc,Dc as dl,E as Q,Ea as sl,Ec as pl,F as $e,Gc as ul,H as el,Hc as fl,J as Br,K as pt,Ka as al,L as he,La as qo,M as ce,Ma as N,N as tl,P as Ot,Qa as ms,S as ps,Sc as _e,U as Wo,a as He,b as Fo,c as A,ca as rl,d as Yc,e as Ge,ea as Vr,f as $o,fa as nl,g as qt,ga as us,h as ye,ha as ot,i as be,ia as ol,j as Wr,l as zo,ma as il,n as ls,na as J,o as ds,ob as cl,pa as Hr,pb as Gr,qb as ll,r as Fe,s as xt,wb as ys,xb as Bo,y as qr,yb as Z,za as fs}from"./chunk-BM2C7NHL.js";import{a as n,b as Xc,d as U}from"./chunk-RHIWAYN5.js";var Ht={};U(Ht,{DIR:()=>Mm,GLOB:()=>Lm,MAX_BYTES:()=>Rs,MAX_LINES:()=>Ds,Service:()=>Vt,Truncate:()=>Ht,node:()=>jm});import{Cause as Rm,Duration as Yo,Effect as we,Layer as _m,Option as jl,Schedule as Am,Context as Pm}from"effect";import Os from"path";import{Schema as Is}from"effect";var Om=Is.String.check(Is.isStartsWith("tool")).pipe(Is.brand("ToolID")),Nl=Om.pipe(Wr(e=>({ascending:n(t=>e.make(Ll.ascending("tool",t)),"ascending")})));import Dm from"path";var pr=Dm.join(he.Path.data,"tool-output");var Cm=Yo.days(7),Ds=2e3,Rs=50*1024,Mm=pr,Lm=Os.join(pr,"*");function Um(e){return e?.permission?ks("task","*",e.permission).action!=="deny":!1}n(Um,"hasTaskTool");var Vt=class extends Pm.Service()("@opencode/Truncate"){static{n(this,"Service")}},Nm=_m.effect(Vt,we.gen(function*(){let e=yield*N.Service,t=we.fn("Truncate.cleanup")(function*(){let s=Date.now()-Yo.toMillis(Cm),i=yield*e.readDirectory(pr).pipe(we.map(c=>c.filter(l=>l.startsWith("tool_"))),we.catch(()=>we.succeed([])));for(let c of i){let l=Os.join(pr,c),d=yield*e.stat(l).pipe(we.catch(()=>we.succeed(void 0))),p=d&&jl.getOrUndefined(d.mtime);!p||p.getTime()>=s||(yield*e.remove(l).pipe(we.catch(()=>we.void)))}}),r=we.fn("Truncate.write")(function*(s){let i=Os.join(pr,Nl.ascending());return yield*e.ensureDir(pr).pipe(we.orDie),yield*e.writeFileString(i,s).pipe(we.orDie),i}),o=we.fn("Truncate.limits")(function*(){let s=yield*we.serviceOption(ft.Service);if(jl.isNone(s))return{maxLines:Ds,maxBytes:Rs};let i=yield*s.value.get().pipe(we.catch(()=>we.succeed(void 0)));return{maxLines:i?.tool_output?.max_lines??Ds,maxBytes:i?.tool_output?.max_bytes??Rs}}),a=we.fn("Truncate.output")(function*(s,i={},c){let l=yield*o(),d=i.maxLines??l.maxLines,p=i.maxBytes??l.maxBytes,u=i.direction??"head",h=s.split(`
15
- `),g=Buffer.byteLength(s,"utf-8");if(h.length<=d&&g<=p)return{content:s,truncated:!1};let x=[],S=0,f=0,v=!1;if(u==="head")for(S=0;S<h.length&&S<d;S++){let y=Buffer.byteLength(h[S],"utf-8")+(S>0?1:0);if(f+y>p){v=!0;break}x.push(h[S]),f+=y}else for(S=h.length-1;S>=0&&x.length<d;S--){let y=Buffer.byteLength(h[S],"utf-8")+(x.length>0?1:0);if(f+y>p){v=!0;break}x.unshift(h[S]),f+=y}let E=v?g-f:h.length-x.length,m=v?"bytes":"lines",b=x.join(`
16
- `),w=yield*r(s),k=Um(c)?`The tool call succeeded but the output was truncated. Full output saved to: ${w}
17
- Use the Task tool to have explore agent process this file with Grep and Read (with offset/limit). Do NOT read the full file yourself - delegate to save context.`:`The tool call succeeded but the output was truncated. Full output saved to: ${w}
18
- Use Grep to search the full content or Read with offset/limit to view specific sections.`;return{content:u==="head"?`${b}
19
-
20
- ...${E} ${m} truncated...
21
-
22
- ${k}`:`...${E} ${m} truncated...
23
-
24
- ${k}
25
-
26
- ${b}`,truncated:!0,outputPath:w}});return yield*t().pipe(we.catchCause(s=>we.logError("truncation cleanup failed",{cause:Rm.pretty(s)})),we.repeat(Am.spaced(Yo.hours(1))),we.delay(Yo.minutes(1)),we.forkScoped),Vt.of({cleanup:t,write:r,output:a,limits:o})})),jm=He.make({service:Vt,layer:Nm,deps:[N.node]});import{Effect as Fr,Schema as ss}from"effect";var jo={};U(jo,{Agent:()=>jo,Info:()=>Xw,Service:()=>jr,node:()=>ek,use:()=>Yw});var Sr={};U(Sr,{ConfigProvidersResult:()=>px,Info:()=>qa,InitError:()=>pi,ListResult:()=>dx,Model:()=>Wa,ModelNotFoundError:()=>rn,NoModelsError:()=>fi,NoProvidersError:()=>ui,Provider:()=>Sr,Service:()=>br,defaultModelIDs:()=>ux,fromModelsDevProvider:()=>Op,node:()=>gx,parseModel:()=>$a,sort:()=>Ba,toPublicInfo:()=>Yn,use:()=>fx});import Mt from"os";import Ep from"fuzzysort";import{mapValues as xr,mergeDeep as Jt,omit as yp,pickBy as hp,sortBy as za}from"remeda";import{NoSuchModelError as Vg}from"ai";var Ct={};U(Ct,{Plugin:()=>Ct,Service:()=>tn,experimentalWebSocketsEnabled:()=>Hd,node:()=>eg});var Fl=n(({onSseError:e,onSseEvent:t,responseTransformer:r,responseValidator:o,sseDefaultRetryDelay:a,sseMaxRetryAttempts:s,sseMaxRetryDelay:i,sseSleepFn:c,url:l,...d})=>{let p,u=c??(x=>new Promise(S=>setTimeout(S,x)));return{stream:n(async function*(){let x=a??3e3,S=0,f=d.signal??new AbortController().signal;for(;!f.aborted;){S++;let v=d.headers instanceof Headers?d.headers:new Headers(d.headers);p!==void 0&&v.set("Last-Event-ID",p);try{let E=await fetch(l,{...d,headers:v,signal:f});if(!E.ok)throw new Error(`SSE failed: ${E.status} ${E.statusText}`);if(!E.body)throw new Error("No body in SSE response");let m=E.body.pipeThrough(new TextDecoderStream).getReader(),b="",w=n(()=>{try{m.cancel()}catch{}},"abortHandler");f.addEventListener("abort",w);try{for(;;){let{done:k,value:y}=await m.read();if(k)break;b+=y;let T=b.split(`
27
-
28
- `);b=T.pop()??"";for(let O of T){let L=O.split(`
29
- `),I=[],_;for(let R of L)if(R.startsWith("data:"))I.push(R.replace(/^data:\s*/,""));else if(R.startsWith("event:"))_=R.replace(/^event:\s*/,"");else if(R.startsWith("id:"))p=R.replace(/^id:\s*/,"");else if(R.startsWith("retry:")){let ae=Number.parseInt(R.replace(/^retry:\s*/,""),10);Number.isNaN(ae)||(x=ae)}let z,C=!1;if(I.length){let R=I.join(`
30
- `);try{z=JSON.parse(R),C=!0}catch{z=R}}C&&(o&&await o(z),r&&(z=await r(z))),t?.({data:z,event:_,id:p,retry:x}),I.length&&(yield z)}}}finally{f.removeEventListener("abort",w),m.releaseLock()}break}catch(E){if(e?.(E),s!==void 0&&S>=s)break;let m=Math.min(x*2**(S-1),i??3e4);await u(m)}}},"createStream")()}},"createSseClient");var $l=n(async(e,t)=>{let r=typeof t=="function"?await t(e):t;if(r)return e.scheme==="bearer"?`Bearer ${r}`:e.scheme==="basic"?`Basic ${btoa(r)}`:r},"getAuthToken");var _s={bodySerializer:n(e=>JSON.stringify(e,(t,r)=>typeof r=="bigint"?r.toString():r),"bodySerializer")};var Fm=n(e=>{switch(e){case"label":return".";case"matrix":return";";case"simple":return",";default:return"&"}},"separatorArrayExplode"),$m=n(e=>{switch(e){case"form":return",";case"pipeDelimited":return"|";case"spaceDelimited":return"%20";default:return","}},"separatorArrayNoExplode"),zm=n(e=>{switch(e){case"label":return".";case"matrix":return";";case"simple":return",";default:return"&"}},"separatorObjectExplode"),Qo=n(({allowReserved:e,explode:t,name:r,style:o,value:a})=>{if(!t){let c=(e?a:a.map(l=>encodeURIComponent(l))).join($m(o));switch(o){case"label":return`.${c}`;case"matrix":return`;${r}=${c}`;case"simple":return c;default:return`${r}=${c}`}}let s=Fm(o),i=a.map(c=>o==="label"||o==="simple"?e?c:encodeURIComponent(c):Zr({allowReserved:e,name:r,value:c})).join(s);return o==="label"||o==="matrix"?s+i:i},"serializeArrayParam"),Zr=n(({allowReserved:e,name:t,value:r})=>{if(r==null)return"";if(typeof r=="object")throw new Error("Deeply-nested arrays/objects aren\u2019t supported. Provide your own `querySerializer()` to handle these.");return`${t}=${e?r:encodeURIComponent(r)}`},"serializePrimitiveParam"),Zo=n(({allowReserved:e,explode:t,name:r,style:o,value:a,valueOnly:s})=>{if(a instanceof Date)return s?a.toISOString():`${r}=${a.toISOString()}`;if(o!=="deepObject"&&!t){let l=[];Object.entries(a).forEach(([p,u])=>{l=[...l,p,e?u:encodeURIComponent(u)]});let d=l.join(",");switch(o){case"form":return`${r}=${d}`;case"label":return`.${d}`;case"matrix":return`;${r}=${d}`;default:return d}}let i=zm(o),c=Object.entries(a).map(([l,d])=>Zr({allowReserved:e,name:o==="deepObject"?`${r}[${l}]`:l,value:d})).join(i);return o==="label"||o==="matrix"?i+c:c},"serializeObjectParam");var Wm=/\{[^{}]+\}/g,qm=n(({path:e,url:t})=>{let r=t,o=t.match(Wm);if(o)for(let a of o){let s=!1,i=a.substring(1,a.length-1),c="simple";i.endsWith("*")&&(s=!0,i=i.substring(0,i.length-1)),i.startsWith(".")?(i=i.substring(1),c="label"):i.startsWith(";")&&(i=i.substring(1),c="matrix");let l=e[i];if(l==null)continue;if(Array.isArray(l)){r=r.replace(a,Qo({explode:s,name:i,style:c,value:l}));continue}if(typeof l=="object"){r=r.replace(a,Zo({explode:s,name:i,style:c,value:l,valueOnly:!0}));continue}if(c==="matrix"){r=r.replace(a,`;${Zr({name:i,value:l})}`);continue}let d=encodeURIComponent(c==="label"?`.${l}`:l);r=r.replace(a,d)}return r},"defaultPathSerializer"),zl=n(({baseUrl:e,path:t,query:r,querySerializer:o,url:a})=>{let s=a.startsWith("/")?a:`/${a}`,i=(e??"")+s;t&&(i=qm({path:t,url:i}));let c=r?o(r):"";return c.startsWith("?")&&(c=c.substring(1)),c&&(i+=`?${c}`),i},"getUrl");var Wl=n(({allowReserved:e,array:t,object:r}={})=>n(a=>{let s=[];if(a&&typeof a=="object")for(let i in a){let c=a[i];if(c!=null)if(Array.isArray(c)){let l=Qo({allowReserved:e,explode:!0,name:i,style:"form",value:c,...t});l&&s.push(l)}else if(typeof c=="object"){let l=Zo({allowReserved:e,explode:!0,name:i,style:"deepObject",value:c,...r});l&&s.push(l)}else{let l=Zr({allowReserved:e,name:i,value:c});l&&s.push(l)}}return s.join("&")},"querySerializer"),"createQuerySerializer"),ql=n(e=>{if(!e)return"stream";let t=e.split(";")[0]?.trim();if(t){if(t.startsWith("application/json")||t.endsWith("+json"))return"json";if(t==="multipart/form-data")return"formData";if(["application/","audio/","image/","video/"].some(r=>t.startsWith(r)))return"blob";if(t.startsWith("text/"))return"text"}},"getParseAs"),Bm=n((e,t)=>t?!!(e.headers.has(t)||e.query?.[t]||e.headers.get("Cookie")?.includes(`${t}=`)):!1,"checkForExistence"),Bl=n(async({security:e,...t})=>{for(let r of e){if(Bm(t,r.name))continue;let o=await $l(r,t.auth);if(!o)continue;let a=r.name??"Authorization";switch(r.in){case"query":t.query||(t.query={}),t.query[a]=o;break;case"cookie":t.headers.append("Cookie",`${a}=${o}`);break;default:t.headers.set(a,o);break}}},"setAuthParams"),As=n(e=>zl({baseUrl:e.baseUrl,path:e.path,query:e.query,querySerializer:typeof e.querySerializer=="function"?e.querySerializer:Wl(e.querySerializer),url:e.url}),"buildUrl"),Ps=n((e,t)=>{let r={...e,...t};return r.baseUrl?.endsWith("/")&&(r.baseUrl=r.baseUrl.substring(0,r.baseUrl.length-1)),r.headers=ei(e.headers,t.headers),r},"mergeConfigs"),ei=n((...e)=>{let t=new Headers;for(let r of e){if(!r||typeof r!="object")continue;let o=r instanceof Headers?r.entries():Object.entries(r);for(let[a,s]of o)if(s===null)t.delete(a);else if(Array.isArray(s))for(let i of s)t.append(a,i);else s!==void 0&&t.set(a,typeof s=="object"?JSON.stringify(s):s)}return t},"mergeHeaders"),Un=class{static{n(this,"Interceptors")}_fns;constructor(){this._fns=[]}clear(){this._fns=[]}getInterceptorIndex(t){return typeof t=="number"?this._fns[t]?t:-1:this._fns.indexOf(t)}exists(t){let r=this.getInterceptorIndex(t);return!!this._fns[r]}eject(t){let r=this.getInterceptorIndex(t);this._fns[r]&&(this._fns[r]=null)}update(t,r){let o=this.getInterceptorIndex(t);return this._fns[o]?(this._fns[o]=r,t):!1}use(t){return this._fns=[...this._fns,t],this._fns.length-1}},Vl=n(()=>({error:new Un,request:new Un,response:new Un}),"createInterceptors"),Vm=Wl({allowReserved:!1,array:{explode:!0,style:"form"},object:{explode:!0,style:"deepObject"}}),Hm={"Content-Type":"application/json"},Nn=n((e={})=>({..._s,headers:Hm,parseAs:"auto",querySerializer:Vm,...e}),"createConfig");var jn=n((e={})=>{let t=Ps(Nn(),e),r=n(()=>({...t}),"getConfig"),o=n(l=>(t=Ps(t,l),r()),"setConfig"),a=Vl(),s=n(async l=>{let d={...t,...l,fetch:l.fetch??t.fetch??globalThis.fetch,headers:ei(t.headers,l.headers),serializedBody:void 0};d.security&&await Bl({...d,security:d.security}),d.requestValidator&&await d.requestValidator(d),d.body&&d.bodySerializer&&(d.serializedBody=d.bodySerializer(d.body)),(d.serializedBody===void 0||d.serializedBody==="")&&d.headers.delete("Content-Type");let p=As(d);return{opts:d,url:p}},"beforeRequest"),i=n(async l=>{let{opts:d,url:p}=await s(l),u={redirect:"follow",...d,body:d.serializedBody},h=new Request(p,u);for(let b of a.request._fns)b&&(h=await b(h,d));let g=d.fetch,x=await g(h);for(let b of a.response._fns)b&&(x=await b(x,h,d));let S={request:h,response:x};if(x.ok){if(x.status===204||x.headers.get("Content-Length")==="0")return d.responseStyle==="data"?{}:{data:{},...S};let b=(d.parseAs==="auto"?ql(x.headers.get("Content-Type")):d.parseAs)??"json",w;switch(b){case"arrayBuffer":case"blob":case"formData":case"json":case"text":w=await x[b]();break;case"stream":return d.responseStyle==="data"?x.body:{data:x.body,...S}}return b==="json"&&(d.responseValidator&&await d.responseValidator(w),d.responseTransformer&&(w=await d.responseTransformer(w))),d.responseStyle==="data"?w:{data:w,...S}}let f=await x.text(),v;try{v=JSON.parse(f)}catch{}let E=v??f,m=E;for(let b of a.error._fns)b&&(m=await b(E,x,h,d));if(m=m||{},d.throwOnError)throw m;return d.responseStyle==="data"?void 0:{error:m,...S}},"request"),c=n(l=>{let d=n(p=>i({...p,method:l}),"fn");return d.sse=async p=>{let{opts:u,url:h}=await s(p);return Fl({...u,body:u.body,headers:u.headers,method:l,url:h})},d},"makeMethod");return{buildUrl:As,connect:c("CONNECT"),delete:c("DELETE"),get:c("GET"),getConfig:r,head:c("HEAD"),interceptors:a,options:c("OPTIONS"),patch:c("PATCH"),post:c("POST"),put:c("PUT"),request:i,setConfig:o,trace:c("TRACE")}},"createClient");var Gm={$body_:"body",$headers_:"headers",$path_:"path",$query_:"query"},qk=Object.entries(Gm);var Hl=jn(Nn({baseUrl:"http://localhost:4096"}));var ue=class{static{n(this,"_HeyApiClient")}_client=Hl;constructor(t){t?.client&&(this._client=t.client)}},Cs=class extends ue{static{n(this,"Global")}event(t){return(t?.client??this._client).get.sse({url:"/global/event",...t})}},Ms=class extends ue{static{n(this,"Project")}list(t){return(t?.client??this._client).get({url:"/project",...t})}current(t){return(t?.client??this._client).get({url:"/project/current",...t})}},Ls=class extends ue{static{n(this,"Pty")}list(t){return(t?.client??this._client).get({url:"/pty",...t})}create(t){return(t?.client??this._client).post({url:"/pty",...t,headers:{"Content-Type":"application/json",...t?.headers}})}remove(t){return(t.client??this._client).delete({url:"/pty/{id}",...t})}get(t){return(t.client??this._client).get({url:"/pty/{id}",...t})}update(t){return(t.client??this._client).put({url:"/pty/{id}",...t,headers:{"Content-Type":"application/json",...t.headers}})}connect(t){return(t.client??this._client).get({url:"/pty/{id}/connect",...t})}},Us=class extends ue{static{n(this,"Config")}get(t){return(t?.client??this._client).get({url:"/config",...t})}update(t){return(t?.client??this._client).patch({url:"/config",...t,headers:{"Content-Type":"application/json",...t?.headers}})}providers(t){return(t?.client??this._client).get({url:"/config/providers",...t})}},Ns=class extends ue{static{n(this,"Tool")}ids(t){return(t?.client??this._client).get({url:"/experimental/tool/ids",...t})}list(t){return(t.client??this._client).get({url:"/experimental/tool",...t})}},js=class extends ue{static{n(this,"Instance")}dispose(t){return(t?.client??this._client).post({url:"/instance/dispose",...t})}},Fs=class extends ue{static{n(this,"Path")}get(t){return(t?.client??this._client).get({url:"/path",...t})}},$s=class extends ue{static{n(this,"Vcs")}get(t){return(t?.client??this._client).get({url:"/vcs",...t})}},zs=class extends ue{static{n(this,"Session")}list(t){return(t?.client??this._client).get({url:"/session",...t})}create(t){return(t?.client??this._client).post({url:"/session",...t,headers:{"Content-Type":"application/json",...t?.headers}})}status(t){return(t?.client??this._client).get({url:"/session/status",...t})}delete(t){return(t.client??this._client).delete({url:"/session/{id}",...t})}get(t){return(t.client??this._client).get({url:"/session/{id}",...t})}update(t){return(t.client??this._client).patch({url:"/session/{id}",...t,headers:{"Content-Type":"application/json",...t.headers}})}children(t){return(t.client??this._client).get({url:"/session/{id}/children",...t})}todo(t){return(t.client??this._client).get({url:"/session/{id}/todo",...t})}init(t){return(t.client??this._client).post({url:"/session/{id}/init",...t,headers:{"Content-Type":"application/json",...t.headers}})}fork(t){return(t.client??this._client).post({url:"/session/{id}/fork",...t,headers:{"Content-Type":"application/json",...t.headers}})}abort(t){return(t.client??this._client).post({url:"/session/{id}/abort",...t})}unshare(t){return(t.client??this._client).delete({url:"/session/{id}/share",...t})}share(t){return(t.client??this._client).post({url:"/session/{id}/share",...t})}diff(t){return(t.client??this._client).get({url:"/session/{id}/diff",...t})}summarize(t){return(t.client??this._client).post({url:"/session/{id}/summarize",...t,headers:{"Content-Type":"application/json",...t.headers}})}messages(t){return(t.client??this._client).get({url:"/session/{id}/message",...t})}prompt(t){return(t.client??this._client).post({url:"/session/{id}/message",...t,headers:{"Content-Type":"application/json",...t.headers}})}message(t){return(t.client??this._client).get({url:"/session/{id}/message/{messageID}",...t})}promptAsync(t){return(t.client??this._client).post({url:"/session/{id}/prompt_async",...t,headers:{"Content-Type":"application/json",...t.headers}})}command(t){return(t.client??this._client).post({url:"/session/{id}/command",...t,headers:{"Content-Type":"application/json",...t.headers}})}shell(t){return(t.client??this._client).post({url:"/session/{id}/shell",...t,headers:{"Content-Type":"application/json",...t.headers}})}revert(t){return(t.client??this._client).post({url:"/session/{id}/revert",...t,headers:{"Content-Type":"application/json",...t.headers}})}unrevert(t){return(t.client??this._client).post({url:"/session/{id}/unrevert",...t})}},Ws=class extends ue{static{n(this,"Command")}list(t){return(t?.client??this._client).get({url:"/command",...t})}},qs=class extends ue{static{n(this,"Oauth")}authorize(t){return(t.client??this._client).post({url:"/provider/{id}/oauth/authorize",...t,headers:{"Content-Type":"application/json",...t.headers}})}callback(t){return(t.client??this._client).post({url:"/provider/{id}/oauth/callback",...t,headers:{"Content-Type":"application/json",...t.headers}})}},Bs=class extends ue{static{n(this,"Provider")}list(t){return(t?.client??this._client).get({url:"/provider",...t})}auth(t){return(t?.client??this._client).get({url:"/provider/auth",...t})}oauth=new qs({client:this._client})},Vs=class extends ue{static{n(this,"Find")}text(t){return(t.client??this._client).get({url:"/find",...t})}files(t){return(t.client??this._client).get({url:"/find/file",...t})}symbols(t){return(t.client??this._client).get({url:"/find/symbol",...t})}},Hs=class extends ue{static{n(this,"File")}list(t){return(t.client??this._client).get({url:"/file",...t})}read(t){return(t.client??this._client).get({url:"/file/content",...t})}status(t){return(t?.client??this._client).get({url:"/file/status",...t})}},Gs=class extends ue{static{n(this,"App")}log(t){return(t?.client??this._client).post({url:"/log",...t,headers:{"Content-Type":"application/json",...t?.headers}})}agents(t){return(t?.client??this._client).get({url:"/agent",...t})}},ti=class extends ue{static{n(this,"Auth")}remove(t){return(t.client??this._client).delete({url:"/mcp/{name}/auth",...t})}start(t){return(t.client??this._client).post({url:"/mcp/{name}/auth",...t})}callback(t){return(t.client??this._client).post({url:"/mcp/{name}/auth/callback",...t,headers:{"Content-Type":"application/json",...t.headers}})}authenticate(t){return(t.client??this._client).post({url:"/mcp/{name}/auth/authenticate",...t})}set(t){return(t.client??this._client).put({url:"/auth/{id}",...t,headers:{"Content-Type":"application/json",...t.headers}})}},Ks=class extends ue{static{n(this,"Mcp")}status(t){return(t?.client??this._client).get({url:"/mcp",...t})}add(t){return(t?.client??this._client).post({url:"/mcp",...t,headers:{"Content-Type":"application/json",...t?.headers}})}connect(t){return(t.client??this._client).post({url:"/mcp/{name}/connect",...t})}disconnect(t){return(t.client??this._client).post({url:"/mcp/{name}/disconnect",...t})}auth=new ti({client:this._client})},Js=class extends ue{static{n(this,"Lsp")}status(t){return(t?.client??this._client).get({url:"/lsp",...t})}},Xs=class extends ue{static{n(this,"Formatter")}status(t){return(t?.client??this._client).get({url:"/formatter",...t})}},Ys=class extends ue{static{n(this,"Control")}next(t){return(t?.client??this._client).get({url:"/tui/control/next",...t})}response(t){return(t?.client??this._client).post({url:"/tui/control/response",...t,headers:{"Content-Type":"application/json",...t?.headers}})}},Qs=class extends ue{static{n(this,"Tui")}appendPrompt(t){return(t?.client??this._client).post({url:"/tui/append-prompt",...t,headers:{"Content-Type":"application/json",...t?.headers}})}openHelp(t){return(t?.client??this._client).post({url:"/tui/open-help",...t})}openSessions(t){return(t?.client??this._client).post({url:"/tui/open-sessions",...t})}openThemes(t){return(t?.client??this._client).post({url:"/tui/open-themes",...t})}openModels(t){return(t?.client??this._client).post({url:"/tui/open-models",...t})}submitPrompt(t){return(t?.client??this._client).post({url:"/tui/submit-prompt",...t})}clearPrompt(t){return(t?.client??this._client).post({url:"/tui/clear-prompt",...t})}executeCommand(t){return(t?.client??this._client).post({url:"/tui/execute-command",...t,headers:{"Content-Type":"application/json",...t?.headers}})}showToast(t){return(t?.client??this._client).post({url:"/tui/show-toast",...t,headers:{"Content-Type":"application/json",...t?.headers}})}publish(t){return(t?.client??this._client).post({url:"/tui/publish",...t,headers:{"Content-Type":"application/json",...t?.headers}})}control=new Ys({client:this._client})},Zs=class extends ue{static{n(this,"Event")}subscribe(t){return(t?.client??this._client).get.sse({url:"/event",...t})}},ri=class extends ue{static{n(this,"OpencodeClient")}postSessionIdPermissionsPermissionId(t){return(t.client??this._client).post({url:"/session/{id}/permissions/{permissionID}",...t,headers:{"Content-Type":"application/json",...t.headers}})}global=new Cs({client:this._client});project=new Ms({client:this._client});pty=new Ls({client:this._client});config=new Us({client:this._client});tool=new Ns({client:this._client});instance=new js({client:this._client});path=new Fs({client:this._client});vcs=new $s({client:this._client});session=new zs({client:this._client});command=new Ws({client:this._client});provider=new Bs({client:this._client});find=new Vs({client:this._client});file=new Hs({client:this._client});app=new Gs({client:this._client});mcp=new Ks({client:this._client});lsp=new Js({client:this._client});formatter=new Xs({client:this._client});tui=new Qs({client:this._client});auth=new ti({client:this._client});event=new Zs({client:this._client})};function Kl(e,t,r,o){if(!o?.throwOnError||e instanceof Error)return e;if(typeof e=="object"&&e!==null&&Object.keys(e).length>0){let s=e,i=typeof s.data?.message=="string"&&s.data.message||typeof s.message=="string"&&s.message||typeof s.name=="string"&&s.name||Gl(r,t);return new Error(i,{cause:{body:e,status:t?.status}})}if(typeof e=="string"&&e.length>0)return new Error(e,{cause:{body:e,status:t?.status}});let a=t?"(empty response body)":"network error (no response)";return new Error(`opencode server ${Gl(r,t)}: ${a}`,{cause:{body:e,status:t?.status}})}n(Kl,"wrapClientError");function Gl(e,t){let r=e?.method??"?",o=e?.url??"?",a=t?.status,s=t?.statusText;return`${r} ${o}${a?" \u2192 "+a:""}${s?" "+s:""}`}n(Gl,"describe");function Km(e,t){if(e)return t&&(e===t||e===encodeURIComponent(t))?t:e}n(Km,"pick");function Jm(e,t){if(e.method!=="GET"&&e.method!=="HEAD")return e;let r=Km(e.headers.get("x-opencode-directory"),t);if(!r)return e;let o=new URL(e.url);o.searchParams.has("directory")||o.searchParams.set("directory",r);let a=new Request(o,e);return a.headers.delete("x-opencode-directory"),a}n(Jm,"rewrite");function ea(e){e?.fetch||(e={...e,fetch:n(o=>(o.timeout=!1,fetch(o)),"customFetch")}),e?.directory&&(e.headers={...e.headers,"x-opencode-directory":encodeURIComponent(e.directory)});let t=jn(e);return t.interceptors.request.use(r=>Jm(r,e?.directory)),t.interceptors.error.use(Kl),new ri({client:t})}n(ea,"createOpencodeClient");import xT from"cross-spawn";var Fn={};U(Fn,{Config:()=>ta,ServerAuth:()=>Fn,authorized:()=>Qm,header:()=>Xl,headers:()=>Zm,required:()=>Ym});import{Config as ni,Option as Jl,Redacted as Xm}from"effect";var ta=class extends Ml.Service()("@opencode/ServerAuthConfig",{password:ni.string("OPENCODE_SERVER_PASSWORD").pipe(ni.option),username:ni.string("OPENCODE_SERVER_USERNAME").pipe(ni.withDefault("opencode"))}){static{n(this,"Config")}};function Ym(e){return Jl.isSome(e.password)&&e.password.value!==""}n(Ym,"required");function Qm(e,t){return Jl.isSome(t.password)&&e.username===t.username&&Xm.value(e.password)===t.password.value}n(Qm,"authorized");function Xl(e){let t=e?.password??pt.OPENCODE_SERVER_PASSWORD;if(!t)return;let r=e?.username??pt.OPENCODE_SERVER_USERNAME??"opencode";return`Basic ${Buffer.from(`${r}:${t}`).toString("base64")}`}n(Xl,"header");function Zm(e){let t=Xl(e);if(t)return{Authorization:t}}n(Zm,"headers");import aa from"os";import{setTimeout as vy}from"node:timers/promises";import{createServer as wy}from"http";var ur={};U(ur,{OpenAIWebSocketPool:()=>ur,TITLE_HEADER:()=>zn,createWebSocketFetch:()=>yy,withoutInternalHeaders:()=>td});import py from"ws";var mt={};U(mt,{MESSAGE_TOO_BIG_CLOSE_CODE:()=>Ql,OpenAIWebSocket:()=>mt,PROTOCOL_HEADER:()=>Yl,connectResponsesWebSocket:()=>ay,isAbortError:()=>oa,normalizeHeaders:()=>sy,streamResponsesWebSocket:()=>cy,toWebSocketUrl:()=>iy});import ny from"ws";import{APICallError as oy}from"ai";var $n={};U($n,{ProxyEnv:()=>$n,getProxyForUrl:()=>ty});var ey={ftp:21,gopher:70,http:80,https:443,ws:80,wss:443};function ty(e){let t=typeof e=="string"?URL.canParse(e)?new URL(e):void 0:e;if(!t)return;let r=t.protocol.split(":",1)[0],o=t.host.replace(/:\d*$/,""),a=Number.parseInt(t.port)||ey[r]||0;if(!ry(o,a))return;let s=ra(`${r}_proxy`)||ra("all_proxy");if(s)return s.includes("://")?s:`${r}://${s}`}n(ty,"getProxyForUrl");function ry(e,t){let r=ra("no_proxy").toLowerCase();return r?r==="*"?!1:r.split(/[,\s]/).every(o=>{if(!o)return!0;let a=o.match(/^(.+):(\d+)$/),s=a?a[1]:o,i=a?Number.parseInt(a[2]):0;return i&&i!==t?!0:/^[.*]/.test(s)?!e.endsWith(s.startsWith("*")?s.slice(1):s):e!==s}):!0}n(ry,"shouldProxy");function ra(e){return process.env[e.toLowerCase()]||process.env[e.toUpperCase()]||""}n(ra,"env");var Yl="responses_websockets=2026-02-06",Ql=1009;function iy(e){return e.replace(/^http/,"ws")}n(iy,"toWebSocketUrl");function sy(e){let t={};if(!e)return t;if(e instanceof Headers)return e.forEach((r,o)=>{t[o.toLowerCase()]=r}),t;if(Array.isArray(e)){for(let[r,o]of e)t[r.toLowerCase()]=o;return t}for(let[r,o]of Object.entries(e))o!=null&&(t[r.toLowerCase()]=o);return t}n(sy,"normalizeHeaders");function oa(e){return e instanceof DOMException&&e.name==="AbortError"}n(oa,"isAbortError");function ay(e){return new Promise((t,r)=>{if(e.signal?.aborted){r(na(e.signal));return}let o={...e.headers,"openai-beta":e.headers["openai-beta"]??Yl};delete o["content-length"];let a=typeof Bun>"u"?void 0:$n.getProxyForUrl(e.url.replace(/^wss:/,"https:").replace(/^ws:/,"http:")),s={headers:o,...a?{proxy:a}:{}},i=new ny(e.url,s),c=e.timeout?setTimeout(()=>{l(),i.on("error",()=>{}),i.terminate(),r(new Error("WebSocket connect timed out"))},e.timeout):void 0;function l(){c&&clearTimeout(c),i.off("open",d),i.off("error",p),i.off("close",u),e.signal?.removeEventListener("abort",h)}n(l,"cleanup");function d(){l(),t(i)}n(d,"onOpen");function p(g){i.on("error",()=>{}),l(),r(g instanceof Error?g:new Error(_t(g),{cause:g}))}n(p,"onError");function u(g,x){l(),r(new Error(Zl("WebSocket closed before open",g,x)))}n(u,"onClose");function h(){l(),i.on("error",()=>{}),i.terminate(),r(na(e.signal))}n(h,"onAbort"),i.once("open",d),i.once("error",p),i.once("close",u),e.signal?.addEventListener("abort",h,{once:!0})})}n(ay,"connectResponsesWebSocket");function cy(e){let t=new TextEncoder,r=e.socket,o,a=n(()=>{},"cleanupSocket"),s=!1,i=!1,c;function l(){c&&clearTimeout(c),a(),e.signal?.removeEventListener("abort",f)}n(l,"cleanup");function d(m=r){m.on("error",()=>{}),m.terminate()}n(d,"terminateSocket");function p(){l(),o?.enqueue(t.encode(`data: [DONE]
31
-
32
- `)),o?.close()}n(p,"closeCompleted");function u(m,b){s||(s=!0,l(),e.onConnectionInvalid?.(m,b),o?.error(m))}n(u,"invalidate");function h(m){s||e.idleTimeout&&(c&&clearTimeout(c),c=setTimeout(()=>u(new je.ResponseStreamError(m)),e.idleTimeout))}n(h,"resetIdleTimeout");async function g(m,b){if(s)return;if(b){u(new je.ResponseStreamError("Unexpected binary WebSocket frame"));return}let w=m.toString(),k=(()=>{try{let T=JSON.parse(w);return typeof T=="object"&&T!==null?T:void 0}catch{return}})();if(k?.type==="error"&&e.onRetryableTerminal){a(),c&&clearTimeout(c),c=void 0;try{let T=await e.onRetryableTerminal(k);if(s){T&&d(T);return}if(T){E(T);return}}catch(T){u(new je.ResponseStreamError(T instanceof Error?T.message:String(T),{cause:T}));return}}let y=ly(k,w);if(y&&k){i||e.onFirstEvent?.(y),s=!0,l(),e.onTerminal?.(k),o?.error(new oy({message:y.message,url:r.url,requestBodyValues:e.body,statusCode:y.status,responseHeaders:y.headers,responseBody:y.body}));return}if(i||e.onFirstEvent?.(),o?.enqueue(t.encode(`${w.split(/\r?\n/).map(T=>`data: ${T}`).join(`
33
- `)}
34
-
35
- `)),i=!0,h("idle timeout waiting for websocket"),!!k){if(k.type==="response.completed"||k.type==="response.done"){s=!0,e.onComplete?.(k),e.onTerminal?.(k),p();return}(k.type==="response.failed"||k.type==="response.incomplete"||k.type==="error")&&(s=!0,e.onTerminal?.(k),p())}}n(g,"onMessage");function x(m){u(new je.ResponseStreamError(m.message,{cause:m}))}n(x,"onError");function S(m,b){s||u(new je.ResponseStreamError(Zl("WebSocket closed before response.completed",m,b)),m)}n(S,"onClose");function f(){let m=na(e.signal);s||(s=!0,l(),d(),e.onAbort?.(m),o?.error(m))}n(f,"onAbort");function v(m){s||(s=!0,l(),d(),e.onAbort?.(dy(m)))}n(v,"onCancel");function E(m){a(),r=m,r.on("message",g),r.once("error",x),r.once("close",S),a=n(()=>{r.off("message",g),r.off("error",x),r.off("close",S)},"cleanupSocket");let{stream:b,background:w,...k}=e.body;h("idle timeout sending websocket request"),r.send(JSON.stringify({type:"response.create",...k}),y=>{s||(h("idle timeout waiting for websocket"),y&&u(new je.ResponseStreamError(y.message,{cause:y})))})}return n(E,"attach"),new Response(new ReadableStream({start(m){if(o=m,e.signal?.addEventListener("abort",f,{once:!0}),e.signal?.aborted){f();return}E(r)},cancel(m){v(m)}}),{status:200,headers:{"content-type":"text/event-stream"}})}n(cy,"streamResponsesWebSocket");function ly(e,t){if(e?.type!=="error")return;let r=e.status??e.status_code;if(!(typeof r!="number"||r>=200&&r<300))return{status:r,headers:Rt(e.headers)?Object.fromEntries(Object.entries(e.headers).flatMap(([o,a])=>typeof a=="string"||typeof a=="number"||typeof a=="boolean"?[[o,String(a)]]:[])):void 0,body:t,message:Rt(e.error)&&typeof e.error.message=="string"?e.error.message:`${r}`}}n(ly,"parseWrappedError");function dy(e){return oa(e)||e instanceof Error?e:new DOMException(typeof e=="string"?e:"Aborted","AbortError")}n(dy,"cancelError");function na(e){let t=e?.reason;return oa(t)?t:new DOMException(t instanceof Error?t.message:"Aborted","AbortError")}n(na,"abortError");function Zl(e,t,r){let o=[`code ${t}`];return t===Ql&&o.push("message too big"),r.length>0&&o.push(r.toString()),`${e} (${o.join(": ")})`}n(Zl,"closeMessage");var zn="x-opencode-title",uy=15e3,fy=300*1e3,my=3300*1e3,ed="websocket_connection_limit_reached";function yy(e){let t=e?.httpFetch??globalThis.fetch,r=new Map,o=e?.connectTimeout??uy,a=e?.idleTimeout??fy,s=e?.maxConnectionAge??my,i=e?.streamRetries??5,c=setInterval(()=>p(),Math.min(a,6e4));typeof c=="object"&&"unref"in c&&typeof c.unref=="function"&&c.unref();async function l(g,x){let S=g instanceof URL?g.toString():typeof g=="string"?g:g.url,f=mt.normalizeHeaders(x?.headers),v=td(x);if(x?.method!=="POST"||!new URL(S).pathname.endsWith("/responses"))return t(g,v);let E=(()=>{try{if(typeof x?.body!="string")return;let k=JSON.parse(x.body);return typeof k=="object"&&k!==null?k:void 0}catch{return}})();if(!E?.stream||f[zn]==="true")return t(g,v);let m=f["x-session-affinity"]??f["session-id"];if(!m)return t(g,v);let b=`${m}:conversation`,w=r.get(b)??{lastUsedAt:Date.now(),busy:!1,fallback:!1,streamFailures:0};if(r.set(b,w),w.fallback||w.busy)return t(g,v);w.busy=!0,w.lastUsedAt=Date.now();try{w.socket=await xy(w,e?.url??S,mt.normalizeHeaders(v?.headers),o,s,x?.signal);let k=n(()=>{},"resolveFirstEvent"),y=n(()=>{},"rejectFirstEvent"),T=new Promise((I,_)=>{k=I,y=_}),O=mt.streamResponsesWebSocket({socket:w.socket,body:E,idleTimeout:a,signal:x?.signal??void 0,onFirstEvent:n(I=>k(I??!0),"onFirstEvent"),onTerminal:n(I=>{w.busy=!1,w.lastUsedAt=Date.now(),w.streamFailures=0,I.type!=="response.completed"&&I.type!=="response.done"&&At(w)},"onTerminal"),onConnectionInvalid:n((I,_)=>{w.busy=!1,w.lastUsedAt=Date.now(),_===mt.MESSAGE_TOO_BIG_CLOSE_CODE?w.fallback=!0:w.fallback||d(w),At(w),k(!1)},"onConnectionInvalid"),onAbort:n(I=>{w.busy=!1,w.lastUsedAt=Date.now(),w.streamFailures=0,At(w),y(I)},"onAbort"),onRetryableTerminal:n(async I=>{let _=hy(I);if(_)throw _},"onRetryableTerminal")}),L=await T;return L!==!1?L===!0||L.status<200||L.status>599?O:new Response(L.body,{status:L.status,headers:{"content-type":"application/json",...L.headers}}):w.fallback?t(g,v):O}catch(k){if(w.busy=!1,w.lastUsedAt=Date.now(),mt.isAbortError(k))throw w.streamFailures=0,At(w),k;return d(w),At(w),w.fallback?t(g,v):gy(new je.ResponseStreamError(k instanceof Error?k.message:String(k),{cause:k}))}}n(l,"websocketFetch");function d(g){g.streamFailures++,g.streamFailures>i&&(g.fallback=!0)}n(d,"recordStreamFailure");function p(){let g=Date.now();for(let[x,S]of r)S.busy||S.fallback||g-S.lastUsedAt<a||(At(S),r.delete(x))}n(p,"prune");function u(){clearInterval(c);for(let g of r.values())At(g);r.clear()}n(u,"close");function h(g){let x=`${g}:conversation`,S=r.get(x);S&&(At(S),r.delete(x))}return n(h,"remove"),Object.assign(l,{close:u,remove:h})}n(yy,"createWebSocketFetch");function hy(e){if(!(e.type!=="error"||!Rt(e.error)||e.error.code!==ed))return new Error(typeof e.error.message=="string"?e.error.message:ed)}n(hy,"connectionLimitError");function gy(e){return new Response(new ReadableStream({start(t){t.error(e)}}),{status:200,headers:{"content-type":"text/event-stream"}})}n(gy,"failedResponse");async function xy(e,t,r,o,a,s){if(e.socket?.readyState===py.OPEN&&e.connectedAt&&Date.now()-e.connectedAt<a)return e.socket;At(e);let i=await mt.connectResponsesWebSocket({url:mt.toWebSocketUrl(t),headers:r,timeout:o,signal:s??void 0});return e.connectedAt=Date.now(),i}n(xy,"socket");function At(e){e.socket&&(e.socket.on("error",()=>{}),e.socket.terminate(),e.socket=void 0),e.connectedAt=void 0}n(At,"invalidate");function td(e){if(!e?.headers)return e;if(e.headers instanceof Headers){let t=new Headers(e.headers);return t.delete(zn),{...e,headers:t}}return Array.isArray(e.headers)?{...e,headers:e.headers.filter(t=>t[0].toLowerCase()!==zn)}:{...e,headers:Object.fromEntries(Object.entries(e.headers).filter(([t])=>t.toLowerCase()!==zn))}}n(td,"withoutInternalHeaders");import ky from"path";import ia from"fs/promises";import by from"path";var Sy=272e3,Ey=1440*60*1e3;function rd(e,t=new Date){let r=Array.isArray(e?.models)?e.models:Array.isArray(e)?e:[],o={};for(let a of r){let s=typeof a?.slug=="string"?a.slug:void 0,i=Number(a?.context_window);if(!s||!Number.isFinite(i)||i<=0)continue;let c=Number(a?.max_context_window);o[s]={contextWindow:i,...Number.isFinite(c)&&c>0?{maxContextWindow:c}:{}}}return{fetchedAt:t.toISOString(),models:o}}n(rd,"parsePlanCatalog");function nd(e,t,r){let o=r?.models[e];if(!o&&!/^gpt-\d/.test(e))return;let a=o?.contextWindow??Sy,s=t.input??Math.max(0,t.context-t.output),i=s>0?Math.min(a,s):a;return{input:i,output:t.output,context:i+t.output}}n(nd,"planLimitFor");async function sa(e){try{let t=JSON.parse(await ia.readFile(e,"utf8"));if(t&&typeof t.fetchedAt=="string"&&t.models&&typeof t.models=="object")return t}catch{}}n(sa,"readPlanCatalog");async function od(e,t){await ia.mkdir(by.dirname(e),{recursive:!0}),await ia.writeFile(e,JSON.stringify(t,null,2))}n(od,"writePlanCatalog");function id(e,t=Date.now()){if(!e||Object.keys(e.models).length===0)return!0;let r=Date.parse(e.fetchedAt);return!Number.isFinite(r)||t-r>Ey}n(id,"planCatalogStale");var Wn="app_EMoamEEZ73f0CkXaXp7hrann",Pt="https://auth.openai.com",Ty="https://chatgpt.com/backend-api/codex/responses",Iy="https://chatgpt.com/backend-api/codex/models",Oy="0.155.0",ca=n(()=>ky.join(he.Path.state,"codex-plan-models.json"),"planCatalogFile"),fr=1455,Dy=3e3,Ry=new Set(["gpt-5.5","gpt-5.3-codex-spark","gpt-5.4","gpt-5.4-mini","gpt-6-sol","gpt-6-luna"]),_y=new Set(["gpt-5.5-pro"]);async function Ay(){let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~",t=Array.from(crypto.getRandomValues(new Uint8Array(43))).map(o=>e[o%e.length]).join(""),r=ad(await crypto.subtle.digest("SHA-256",new TextEncoder().encode(t)));return{verifier:t,challenge:r}}n(Ay,"generatePKCE");function ad(e){let t=new Uint8Array(e),r=String.fromCharCode(...t);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}n(ad,"base64UrlEncode");function pa(e){let t=e.split(".");if(t.length===3)try{return JSON.parse(Buffer.from(t[1],"base64url").toString())}catch{return}}n(pa,"parseJwtClaims");function sd(e){return e.chatgpt_account_id||e["https://api.openai.com/auth"]?.chatgpt_account_id||e.organizations?.[0]?.id}n(sd,"extractAccountIdFromClaims");function la(e){if(e.id_token){let t=pa(e.id_token),r=t&&sd(t);if(r)return r}if(e.access_token){let t=pa(e.access_token);return t?sd(t):void 0}}n(la,"extractAccountId");function Py(e){let t=pa(e),r=t?.["https://api.openai.com/auth"]?.chatgpt_compute_residency??t?.chatgpt_compute_residency;if(!(!r||r==="no_constraint"))return r}n(Py,"extractResidency");function Cy(e,t,r){let o=new URLSearchParams({response_type:"code",client_id:Wn,redirect_uri:e,scope:"openid profile email offline_access",code_challenge:t.challenge,code_challenge_method:"S256",id_token_add_organizations:"true",codex_cli_simplified_flow:"true",state:r,originator:"opencode"});return`${Pt}/oauth/authorize?${o.toString()}`}n(Cy,"buildAuthorizeUrl");async function My(e,t,r){let o=await fetch(`${Pt}/oauth/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",code:e,redirect_uri:t,client_id:Wn,code_verifier:r.verifier}).toString()});if(!o.ok)throw new Error(`Token exchange failed: ${o.status}`);return o.json()}n(My,"exchangeCodeForTokens");async function Ly(e,t=Pt){let r=await fetch(`${t}/oauth/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:e,client_id:Wn}).toString()});if(!r.ok)throw new Error(`Token refresh failed: ${r.status}`);return r.json()}n(Ly,"refreshAccessToken");var da=n(e=>bt.error(e,{provider:"ChatGPT"}),"renderOAuthError"),mr,We;async function Uy(){return mr?{port:fr,redirectUri:`http://localhost:${fr}/auth/callback`}:(mr=wy((e,t)=>{let r=new URL(e.url||"/",`http://localhost:${fr}`);if(r.pathname==="/auth/callback"){let o=r.searchParams.get("code"),a=r.searchParams.get("state"),s=r.searchParams.get("error"),i=r.searchParams.get("error_description");if(s){let l=i||s;We?.reject(new Error(l)),We=void 0,t.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),t.end(da(l));return}if(!o){let l="Missing authorization code";We?.reject(new Error(l)),We=void 0,t.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),t.end(da(l));return}if(!We||a!==We.state){let l="Invalid state - potential CSRF attack";We?.reject(new Error(l)),We=void 0,t.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),t.end(da(l));return}let c=We;We=void 0,My(o,`http://localhost:${fr}/auth/callback`,c.pkce).then(l=>c.resolve(l)).catch(l=>c.reject(l)),t.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),t.end(bt.success({provider:"ChatGPT"}));return}if(r.pathname==="/cancel"){We?.reject(new Error("Login cancelled")),We=void 0,t.writeHead(200),t.end("Login cancelled");return}t.writeHead(404),t.end("Not found")}),await new Promise((e,t)=>{mr.listen(fr,()=>{e()}),mr.on("error",t)}),{port:fr,redirectUri:`http://localhost:${fr}/auth/callback`})}n(Uy,"startOAuthServer");function Ny(){mr&&(mr.close(()=>{}),mr=void 0)}n(Ny,"stopOAuthServer");function jy(e,t){return new Promise((r,o)=>{let a=setTimeout(()=>{We&&(We=void 0,o(new Error("OAuth callback timeout - authorization took too long")))},3e5);We={pkce:e,state:t,resolve:n(s=>{clearTimeout(a),r(s)},"resolve"),reject:n(s=>{clearTimeout(a),o(s)},"reject")}})}n(jy,"waitForOAuthCallback");async function cd(e,t={}){let r=t.issuer??Pt,o=t.codexApiEndpoint??Ty,a=!1,s=[];return{async dispose(){for(let i of s)i.close();s.length=0},async event(i){if(i.event.type==="session.deleted")for(let c of s)c.remove(i.event.properties.info.id)},provider:{id:"openai",async models(i,c){if(c.auth?.type!=="oauth")return i.models;let l=await sa(ca());return Object.fromEntries(Object.entries(i.models).filter(([,d])=>{if(d.options.reasoningMode==="pro")return!1;if(Ry.has(d.api.id))return!0;if(_y.has(d.api.id)||d.api.id==="gpt-5.6")return!1;let p=d.api.id.match(/^gpt-(\d+)(?:\.(\d+))?/);if(!p)return!1;let u=Number(p[1]),h=Number(p[2]??0);return u>5||u===5&&h>4}).map(([d,p])=>[d,{...p,cost:{input:0,output:0,cache:{read:0,write:0}},limit:nd(p.api.id,p.limit,l)??(p.id.includes("gpt-5.5")||p.id.includes("gpt-5.6")?{context:4e5,input:272e3,output:128e3}:p.limit)}]))}},auth:{provider:"openai",async loader(i){let c=await i(),l=t.experimentalWebSockets?ur.createWebSocketFetch({httpFetch:fetch}):void 0;if(l&&(s.push(l),a=!0),c.type!=="oauth")return l?{fetch:l}:{};let d,p=n(async function(g,x){x?.headers&&(x.headers instanceof Headers?(x.headers.delete("authorization"),x.headers.delete("Authorization")):Array.isArray(x.headers)?x.headers=x.headers.filter(([k])=>k.toLowerCase()!=="authorization"):(delete x.headers.authorization,delete x.headers.Authorization));let S=await i();if(S.type!=="oauth")return l?l(g,x):fetch(g,x);let f=S;if(!S.access||S.expires<Date.now()){d||(d=Ly(S.refresh,r).then(async y=>{let T=la(y)||f.accountId;return await e.client.auth.set({path:{id:"openai"},body:{type:"oauth",refresh:y.refresh_token,access:y.access_token,expires:Date.now()+(y.expires_in??3600)*1e3,...T&&{accountId:T}}}),{access:y.access_token,accountId:T}}).finally(()=>{d=void 0}));let k=await d;S.access=k.access,f.accountId=k.accountId}let v=new Headers;if(x?.headers)if(x.headers instanceof Headers)x.headers.forEach((k,y)=>v.set(y,k));else if(Array.isArray(x.headers))for(let[k,y]of x.headers)y!==void 0&&v.set(k,String(y));else for(let[k,y]of Object.entries(x.headers))y!==void 0&&v.set(k,String(y));v.set("authorization",`Bearer ${S.access}`),f.accountId&&v.set("ChatGPT-Account-Id",f.accountId);let E=g instanceof URL?g:new URL(typeof g=="string"?g:g.url),m=E.pathname.includes("/v1/responses")||E.pathname.includes("/chat/completions"),b=m?new URL(o):E;if(m){let k=Py(S.access);k&&v.set("x-openai-internal-codex-residency",k)}let w={...x,body:x?.body,headers:v};return l&&E.pathname.endsWith("/responses")?l(b,w):fetch(b,ur.withoutInternalHeaders(w))},"planFetch"),u=await sa(ca());return id(u)&&t.refreshPlanCatalog!==!1&&!t.codexApiEndpoint&&p(`${Iy}?client_version=${Oy}`,{method:"GET"}).then(async h=>{if(!h.ok)throw new Error(`models list ${h.status}`);let g=rd(await h.json());Object.keys(g.models).length!==0&&await od(ca(),g)}).catch(()=>{}),{apiKey:St,fetch:p}},methods:[{label:"ChatGPT Pro/Plus (browser)",type:"oauth",authorize:n(async()=>{let{redirectUri:i}=await Uy(),c=await Ay(),l=ad(crypto.getRandomValues(new Uint8Array(32)).buffer),d=Cy(i,c,l),p=jy(c,l);return{url:d,instructions:"Complete authorization in your browser. This window will close automatically.",method:"auto",callback:n(async()=>{let u=await p;Ny();let h=la(u);return{type:"success",refresh:u.refresh_token,access:u.access_token,expires:Date.now()+(u.expires_in??3600)*1e3,accountId:h}},"callback")}},"authorize")},{label:"ChatGPT Pro/Plus (headless)",type:"oauth",authorize:n(async()=>{let i=await fetch(`${Pt}/api/accounts/deviceauth/usercode`,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":`opencode/${ce}`},body:JSON.stringify({client_id:Wn})});if(!i.ok)throw new Error("Failed to initiate device authorization");let c=await i.json(),l=Math.max(parseInt(c.interval)||5,1)*1e3;return{url:`${Pt}/codex/device`,instructions:`Enter code: ${c.user_code}`,method:"auto",async callback(){for(;;){let d=await fetch(`${Pt}/api/accounts/deviceauth/token`,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":`opencode/${ce}`},body:JSON.stringify({device_auth_id:c.device_auth_id,user_code:c.user_code})});if(d.ok){let p=await d.json(),u=await fetch(`${Pt}/oauth/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",code:p.authorization_code,redirect_uri:`${Pt}/deviceauth/callback`,client_id:Wn,code_verifier:p.code_verifier}).toString()});if(!u.ok)throw new Error(`Token exchange failed: ${u.status}`);let h=await u.json();return{type:"success",refresh:h.refresh_token,access:h.access_token,expires:Date.now()+(h.expires_in??3600)*1e3,accountId:la(h)}}if(d.status!==403&&d.status!==404)return{type:"failed"};await vy(l+Dy)}}}},"authorize")},{label:"Manually enter API Key",type:"api"}]},"chat.headers":n(async(i,c)=>{i.model.providerID==="openai"&&(c.headers.originator="opencode",c.headers["User-Agent"]=`opencode/${ce} (${aa.platform()} ${aa.release()}; ${aa.arch()})`,c.headers["session-id"]=i.sessionID,c.headers["thread-id"]=i.sessionID,a&&i.agent==="title"&&(c.headers[ur.TITLE_HEADER]="true"))},"chat.headers"),"chat.params":n(async(i,c)=>{i.model.providerID==="openai"&&(c.maxOutputTokens=void 0)},"chat.params")}}n(cd,"CodexAuthPlugin");import{setTimeout as ua}from"node:timers/promises";var qn={};U(qn,{CopilotModels:()=>qn,get:()=>By,schema:()=>dd});import{Option as Fy,Schema as M}from"effect";var $y=M.Struct({model_picker_enabled:M.Boolean,id:M.String,name:M.String,version:M.String,supported_endpoints:M.optional(M.Array(M.String)),policy:M.optional(M.Struct({state:M.optional(M.String)})),billing:M.optional(M.Struct({token_prices:M.optional(M.Struct({batch_size:M.Number,default:M.Struct({cache_price:M.Number,input_price:M.Number,output_price:M.Number})}))})),capabilities:M.Struct({family:M.String,limits:M.optional(M.Struct({max_context_window_tokens:M.optional(M.Number),max_output_tokens:M.optional(M.Number),max_prompt_tokens:M.optional(M.Number),vision:M.optional(M.Struct({max_prompt_image_size:M.Number,max_prompt_images:M.Number,supported_media_types:M.Array(M.String)}))})),supports:M.Struct({adaptive_thinking:M.optional(M.Boolean),max_thinking_budget:M.optional(M.Number),min_thinking_budget:M.optional(M.Number),reasoning_effort:M.optional(M.Array(M.String)),streaming:M.optional(M.Boolean),structured_outputs:M.optional(M.Boolean),tool_calls:M.optional(M.Boolean),vision:M.optional(M.Boolean)})})}),dd=M.Struct({data:M.Array(M.Unknown)}),zy=M.decodeUnknownSync(dd),Wy=M.decodeUnknownOption($y);function ld(e,t,r,o){let a=!!t.capabilities.supports.adaptive_thinking||!!t.capabilities.supports.reasoning_effort?.length||t.capabilities.supports.max_thinking_budget!==void 0||t.capabilities.supports.min_thinking_budget!==void 0,s=(t.capabilities.supports.vision??!1)||(t.capabilities.limits.vision?.supported_media_types??[]).some(x=>x.startsWith("image/")),i=(t.capabilities.supports.vision??!1)&&(t.capabilities.limits.vision?.supported_media_types?.includes("application/pdf")??!1),c=t.supported_endpoints?.includes("/v1/messages"),l=c?"messages":t.supported_endpoints?.includes("/responses")?"responses":t.supported_endpoints?.includes("/chat/completions")?"chat":void 0,d=t.billing?.token_prices,p=d&&d.batch_size>0?1e4/d.batch_size:0,u={id:e,providerID:"github-copilot",api:{id:t.id,url:c?`${r}/v1`:r,npm:c?"@ai-sdk/anthropic":"@ai-sdk/github-copilot",...l?{endpoint:l}:{}},status:"active",limit:{context:t.capabilities.limits.max_context_window_tokens??t.capabilities.limits.max_prompt_tokens,input:t.capabilities.limits.max_prompt_tokens,output:t.capabilities.limits.max_output_tokens},capabilities:{temperature:o?.capabilities.temperature??!0,reasoning:o?.capabilities.reasoning??a,attachment:o?.capabilities.attachment??!0,toolcall:t.capabilities.supports.tool_calls,input:{text:!0,audio:!1,image:s,video:!1,pdf:i},output:{text:!0,audio:!1,image:!1,video:!1,pdf:!1},interleaved:!1},family:o?.family??t.capabilities.family,name:o?.name??t.name,cost:{input:(d?.default.input_price??0)*p,output:(d?.default.output_price??0)*p,cache:{read:(d?.default.cache_price??0)*p,write:0}},options:o?.options??{},headers:o?.headers??{},release_date:o?.release_date??(t.version.startsWith(`${t.id}-`)?t.version.slice(t.id.length+1):t.version)},h=t.capabilities.supports.reasoning_effort,g={};if(!c&&h?.length)h.forEach(x=>{g[x]={reasoningEffort:x,reasoningSummary:"auto",include:["reasoning.encrypted_content"]}});else if(h?.length&&t.capabilities.supports.adaptive_thinking)h.forEach(x=>{g[x]={thinking:{type:"adaptive",display:"summarized"},effort:x}});else if(t.capabilities.supports.max_thinking_budget){let x=t.capabilities.supports.max_thinking_budget;g.max={thinking:{type:"enabled",budgetTokens:x-1}},g.high={thinking:{type:"enabled",budgetTokens:Math.floor(x/2)}}}return Object.keys(g).length>0&&(u.variants=g),u}n(ld,"build");function qy(e){return e.policy?.state!=="disabled"&&e.capabilities.limits?.max_output_tokens!==void 0&&e.capabilities.limits.max_prompt_tokens!==void 0&&e.capabilities.supports.tool_calls!==void 0}n(qy,"usable");async function By(e,t={},r={}){let o=await fetch(`${e}/models`,{headers:t,signal:AbortSignal.timeout(5e3)}).then(async i=>{if(!i.ok)throw new Error(`Failed to fetch models: ${i.status}`);return zy(await i.json())}),a={...r},s=new Map(o.data.flatMap(i=>{let c=Fy.getOrUndefined(Wy(i));return c&&qy(c)?[[c.id,c]]:[]}));for(let[i,c]of Object.entries(a)){let l=s.get(c.api.id);if(!l){delete a[i];continue}a[i]=ld(i,l,e,c)}for(let[i,c]of s)i in a||(a[i]=ld(i,c,e));return{models:a,pickerEnabled:new Set([...s].filter(([,i])=>i.model_picker_enabled).map(([i])=>i))}}n(By,"get");var pd="Ov23li8tweQw6odWQebz",ud="2026-06-01",Vy=["gpt-5.4-nano","gpt-4.1","gpt-4o","gpt-4o-mini"],fa=3e3;function md(e){return e.replace(/^https?:\/\//,"").replace(/\/$/,"")}n(md,"normalizeDomain");function Hy(e){return{DEVICE_CODE_URL:`https://${e}/login/device/code`,ACCESS_TOKEN_URL:`https://${e}/login/oauth/access_token`}}n(Hy,"getUrls");function ma(e){return e?`https://copilot-api.${md(e)}`:"https://api.githubcopilot.com"}n(ma,"base");function ya(e){if(e?.role!=="user")return!1;let t=e.content;return typeof t=="string"?t===ws.SYNTHETIC_ATTACHMENT_PROMPT:Array.isArray(t)?t.some(r=>(r?.type==="text"||r?.type==="input_text")&&r.text===ws.SYNTHETIC_ATTACHMENT_PROMPT):!1}n(ya,"imgMsg");function fd(e,t){return{...e,api:{...e.api,url:t,npm:"@ai-sdk/github-copilot"}}}n(fd,"fix");async function yd(e){let t=e.client,r={};return{provider:{id:"github-copilot",async models(o,a){if(a.auth?.type!=="oauth")return r={},Object.fromEntries(Object.entries(o.models).map(([i,c])=>[i,fd(c,ma())]));let s=a.auth;return qn.get(ma(s.enterpriseUrl),{...o.options?.headers,Authorization:`Bearer ${s.refresh}`,"User-Agent":`opencode/${ce}`,"X-GitHub-Api-Version":ud},o.models).then(i=>(r=i.models,Object.fromEntries(Object.entries(i.models).filter(([,c])=>i.pickerEnabled.has(c.api.id))))).catch(i=>(r={},Object.fromEntries(Object.entries(o.models).map(([c,l])=>[c,fd(l,ma(s.enterpriseUrl))]))))}},auth:{provider:"github-copilot",async loader(o){let a=await o();return!a||a.type!=="oauth"?{}:{apiKey:"",async fetch(s,i){let c=await o();if(c.type!=="oauth")return fetch(s,i);let l=s instanceof URL?s.href:typeof s=="string"?s:s.url,{isVision:d,isAgent:p}=it(()=>{try{let h=typeof i?.body=="string"?JSON.parse(i.body):i?.body;if(h?.messages&&l.includes("completions")){let g=h.messages[h.messages.length-1];return{isVision:h.messages.some(x=>Array.isArray(x.content)&&x.content.some(S=>S.type==="image_url")),isAgent:g?.role!=="user"||ya(g)}}if(h?.input){let g=h.input[h.input.length-1];return{isVision:h.input.some(x=>Array.isArray(x?.content)&&x.content.some(S=>S.type==="input_image")),isAgent:g?.role!=="user"||ya(g)}}if(h?.messages){let g=h.messages[h.messages.length-1],x=Array.isArray(g?.content)&&g.content.some(S=>S?.type!=="tool_result");return{isVision:h.messages.some(S=>Array.isArray(S?.content)&&S.content.some(f=>f?.type==="image"||f?.type==="tool_result"&&Array.isArray(f?.content)&&f.content.some(v=>v?.type==="image"))),isAgent:!(g?.role==="user"&&x)||ya(g)}}}catch{}return{isVision:!1,isAgent:!1}}),u={"x-initiator":p?"agent":"user",...i?.headers,"User-Agent":`opencode/${ce}`,Authorization:`Bearer ${c.refresh}`,"Openai-Intent":"conversation-edits"};return d&&(u["Copilot-Vision-Request"]="true"),delete u["x-api-key"],delete u.authorization,fetch(s,{...i,headers:u})}}},methods:[{type:"oauth",label:"Login with GitHub Copilot",prompts:[{type:"select",key:"deploymentType",message:"Select GitHub deployment type",options:[{label:"GitHub.com",value:"github.com",hint:"Public"},{label:"GitHub Enterprise",value:"enterprise",hint:"Data residency or self-hosted"}]},{type:"text",key:"enterpriseUrl",message:"Enter your GitHub Enterprise URL or domain",placeholder:"company.ghe.com or https://company.ghe.com",when:{key:"deploymentType",op:"eq",value:"enterprise"},validate:n(o=>{if(!o)return"URL or domain is required";try{return(o.includes("://")?new URL(o):new URL(`https://${o}`)).hostname?void 0:"Please enter a valid URL or domain"}catch{return"Please enter a valid URL (e.g., company.ghe.com or https://company.ghe.com)"}},"validate")}],async authorize(o={}){let a=o.deploymentType||"github.com",s="github.com";if(a==="enterprise"){let d=o.enterpriseUrl;s=md(d)}let i=Hy(s),c=await fetch(i.DEVICE_CODE_URL,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json","User-Agent":`opencode/${ce}`},body:JSON.stringify({client_id:pd,scope:"read:user"})});if(!c.ok)throw new Error("Failed to initiate device authorization");let l=await c.json();return{url:l.verification_uri,instructions:`Enter code: ${l.user_code}`,method:"auto",async callback(){for(;;){let d=await fetch(i.ACCESS_TOKEN_URL,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json","User-Agent":`opencode/${ce}`},body:JSON.stringify({client_id:pd,device_code:l.device_code,grant_type:"urn:ietf:params:oauth:grant-type:device_code"})});if(!d.ok)return{type:"failed"};let p=await d.json();if(p.access_token){let u={type:"success",refresh:p.access_token,access:p.access_token,expires:0};return a==="enterprise"&&(u.enterpriseUrl=s),u}if(p.error==="authorization_pending"){await ua(l.interval*1e3+fa);continue}if(p.error==="slow_down"){let u=(l.interval+5)*1e3,h=p.interval;h&&typeof h=="number"&&h>0&&(u=h*1e3),await ua(u+fa);continue}if(p.error)return{type:"failed"};await ua(l.interval*1e3+fa)}}}}}]},"chat.params":n(async(o,a)=>{o.model.providerID.includes("github-copilot")&&(o.model.api.id.includes("gpt")&&(a.maxOutputTokens=void 0),o.model.api.npm==="@ai-sdk/anthropic"&&(a.options.toolStreaming=!1))},"chat.params"),"experimental.provider.small_model":n(async(o,a)=>{o.provider.id==="github-copilot"&&(a.model=Vy.map(s=>r[s]).find(s=>s!==void 0))},"experimental.provider.small_model"),"chat.headers":n(async(o,a)=>{if(!o.model.providerID.includes("github-copilot"))return;if(a.headers["X-GitHub-Api-Version"]=ud,a.headers["X-Interaction-Id"]=o.sessionID,o.agent==="title"&&(a.headers["X-Interaction-Type"]="agent-session-name-generation"),o.model.api.npm==="@ai-sdk/anthropic"&&(a.headers["anthropic-beta"]="interleaved-thinking-2025-05-14"),(await t.session.message({path:{id:o.message.sessionID,messageID:o.message.id},query:{directory:e.directory},throwOnError:!0}).catch(()=>{}))?.data.parts?.some(c=>c.type==="compaction"||c.type==="text"&&c.synthetic&&c.metadata?.compaction_continue===!0)){a.headers["x-initiator"]="agent";return}let i=await t.session.get({path:{id:o.sessionID},query:{directory:e.directory},throwOnError:!0}).catch(()=>{});!i||!i.data.parentID||(a.headers["x-initiator"]="agent")},"chat.headers")}}n(yd,"CopilotAuthPlugin");var Bn={};U(Bn,{ModalModels:()=>Bn,get:()=>Xy});import{Schema as j}from"effect";var Gy=j.Struct({type:j.Literal("effort"),values:j.Array(j.NullOr(j.String))}),Ky=j.Struct({data:j.Array(j.Struct({id:j.String,base_model_id:j.optional(j.String),hugging_face_id:j.optional(j.String),name:j.optional(j.String),input_modalities:j.optional(j.Array(j.String)),output_modalities:j.optional(j.Array(j.String)),context_length:j.optional(j.Number),max_output_length:j.optional(j.Number),pricing:j.optional(j.Struct({prompt:j.optional(j.Union([j.String,j.Number])),completion:j.optional(j.Union([j.String,j.Number])),input_cache_read:j.optional(j.Union([j.String,j.Number]))})),supported_sampling_parameters:j.optional(j.Array(j.String)),supported_features:j.optional(j.Array(j.String)),reasoning_options:j.optional(j.Array(Gy)),interleaved:j.optional(j.Union([j.Boolean,j.Struct({field:j.Literals(["reasoning","reasoning_content","reasoning_details"])})]))}))}),Jy=j.decodeUnknownSync(Ky);function ha(e,t){if(e===void 0)return t;let r=Number(e);return Number.isFinite(r)?r*1e6:t}n(ha,"price");async function Xy(e,t,r){let o=await fetch(`${e.replace(/\/+$/,"")}/models`,{headers:{Authorization:`Bearer ${t}`},signal:AbortSignal.timeout(3e3)}).then(async a=>{if(!a.ok)throw new Error(`Failed to fetch Modal models: ${a.status}`);return Jy(await a.json())});return Object.fromEntries(o.data.map(a=>{let s=r[a.base_model_id??a.hugging_face_id??a.id],i={id:a.id,providerID:"modal",name:a.name??s?.name??a.id,family:s?.family,api:{id:a.id,url:e,npm:s?.api.npm??"@ai-sdk/openai-compatible"},status:s?.status??"active",headers:{...s?.headers},options:{...s?.options},cost:{input:ha(a.pricing?.prompt,s?.cost.input??0),output:ha(a.pricing?.completion,s?.cost.output??0),cache:{read:ha(a.pricing?.input_cache_read,s?.cost.cache.read??0),write:s?.cost.cache.write??0}},limit:{context:a.context_length??s?.limit.context??0,input:s?.limit.input,output:a.max_output_length??s?.limit.output??0},capabilities:{temperature:a.supported_sampling_parameters?.includes("temperature")??s?.capabilities.temperature??!1,reasoning:a.supported_features?.includes("reasoning")??s?.capabilities.reasoning??!1,attachment:a.input_modalities?.some(c=>c!=="text")??s?.capabilities.attachment??!1,toolcall:a.supported_features?.includes("tools")??s?.capabilities.toolcall??!0,input:{text:a.input_modalities?.includes("text")??s?.capabilities.input.text??!0,audio:a.input_modalities?.includes("audio")??s?.capabilities.input.audio??!1,image:a.input_modalities?.includes("image")??s?.capabilities.input.image??!1,video:a.input_modalities?.includes("video")??s?.capabilities.input.video??!1,pdf:a.input_modalities?.includes("pdf")??s?.capabilities.input.pdf??!1},output:{text:a.output_modalities?.includes("text")??s?.capabilities.output.text??!0,audio:a.output_modalities?.includes("audio")??s?.capabilities.output.audio??!1,image:a.output_modalities?.includes("image")??s?.capabilities.output.image??!1,video:a.output_modalities?.includes("video")??s?.capabilities.output.video??!1,pdf:a.output_modalities?.includes("pdf")??s?.capabilities.output.pdf??!1},interleaved:a.interleaved??s?.capabilities.interleaved??!1},release_date:s?.release_date??""};return i.variants=a.reasoning_options===void 0?s?.variants:Object.fromEntries(a.reasoning_options.flatMap(c=>c.values.map(l=>{let d=l??"none";return[d,{reasoningEffort:d}]}))),[a.id,i]}))}n(Xy,"get");async function hd(){return{provider:{id:"modal",async models(e,t){let r=t.auth?.type==="api"?t.auth.key:process.env.MODAL_PROXY_TOKEN,o=Object.values(e.models)[0]?.api.url;return!r||!o?{}:Bn.get(o,r,e.models).catch(()=>({}))}}}}n(hd,"ModalPlugin");import{gitlabAuthPlugin as Vh}from"opencode-gitlab-auth";import{PoeAuthPlugin as Hh}from"opencode-poe-auth";async function gd(e){return{auth:{provider:"cloudflare-workers-ai",methods:[{type:"api",label:"API key",prompts:process.env.CLOUDFLARE_ACCOUNT_ID?[]:[{type:"text",key:"accountId",message:"Enter your Cloudflare Account ID",placeholder:"e.g. 1234567890abcdef1234567890abcdef"}]}]}}}n(gd,"CloudflareWorkersAuthPlugin");async function xd(e){return{auth:{provider:"cloudflare-ai-gateway",methods:[{type:"api",label:"Gateway API token",prompts:[...process.env.CLOUDFLARE_ACCOUNT_ID?[]:[{type:"text",key:"accountId",message:"Enter your Cloudflare Account ID",placeholder:"e.g. 1234567890abcdef1234567890abcdef"}],...process.env.CLOUDFLARE_GATEWAY_ID?[]:[{type:"text",key:"gatewayId",message:"Enter your Cloudflare AI Gateway ID",placeholder:"e.g. my-gateway"}]]}]}}}n(xd,"CloudflareAIGatewayAuthPlugin");import{Schema as yr}from"effect";var bd="https://cognitiveservices.azure.com/.default",Yy="https://ai.azure.com/.default",Qy=6e4,Zy=yr.Struct({accessToken:yr.NonEmptyString,expires_on:yr.optional(yr.Number),expiresOn:yr.optional(yr.NonEmptyString)}),eh=yr.decodeUnknownPromise(Zy);async function Sd(){let e=!!ut("az");return th(rh,fetch,e)}n(Sd,"AzureAuthPlugin");function th(e,t,r){let o=new Map;async function a(c){let l=o.get(c);if(l&&l.expires-Date.now()>Qy)return l.token;let d=await eh(await e(["account","get-access-token","--scope",c,"--output","json"])),p=d.expires_on!==void 0?d.expires_on*1e3:Date.parse(d.expiresOn??"");if(!Number.isFinite(p))throw new Error("Azure CLI returned an invalid token expiration");let u={token:d.accessToken,expires:p};return o.set(c,u),u.token}n(a,"token");let s=[];process.env.AZURE_RESOURCE_NAME||s.push({type:"text",key:"resourceName",message:"Enter Azure Resource Name",placeholder:"e.g. my-models"});let i={auth:{provider:"azure",async loader(c){return(await c()).type!=="oauth"?{}:{apiKey:St,async fetch(l,d){let p=new Headers(l instanceof Request?l.headers:void 0);return new Headers(d?.headers).forEach((u,h)=>p.set(h,u)),p.delete("api-key"),p.delete("x-api-key"),p.set("authorization",`Bearer ${await a(nh(l))}`),p.set("User-Agent",`opencode/${ce}`),t(l,{...d,headers:p})}}},methods:[{type:"api",label:"API key",prompts:s},{type:"oauth",label:"Microsoft Entra ID (Azure CLI)",prompts:s,async authorize(c){return{url:"",instructions:"Sign in with `az login` before continuing.",method:"auto",callback:n(async()=>{let l=c?.resourceName??process.env.AZURE_RESOURCE_NAME;if(!l)throw new Error("Azure Resource Name is required");return await a(bd),{type:"success",access:St,refresh:St,expires:Date.now()+365*24*60*60*1e3,accountId:l}},"callback")}}}]}};return!r&&i.auth&&(i.auth.methods=i.auth.methods.filter(c=>c.type!=="oauth")),i}n(th,"createAzureAuthHooks");async function rh(e){let t=await Tl.run([ut("az")??"az",...e]);return JSON.parse(t.stdout.toString())}n(rh,"runAzure");function nh(e){let t=new URL(e instanceof Request?e.url:e);return t.hostname.endsWith(".services.ai.azure.com")&&!t.pathname.startsWith("/models")?Yy:bd}n(nh,"scopeForRequest");import{createServer as oh}from"http";var ih="b1a6c5158156caac821fd1b30253ca8acb52454a48fa744420e41889cb589f82",sh="https://cloud.digitalocean.com/v1/oauth/authorize",ah="https://api.digitalocean.com",ch=`${ah}/v2/gen-ai`,lh="https://inference.do-ai.run/v1",ga=1456,wd="/auth/callback",Ed="/auth/token",dh=300*1e3,kd="genai:read inference:query",hr,et;function ph(){let e=crypto.getRandomValues(new Uint8Array(32));return Array.from(e).map(t=>t.toString(16).padStart(2,"0")).join("")}n(ph,"generateState");function uh(){return`http://localhost:${ga}${wd}`}n(uh,"redirectUri");function fh(e){let t=new URLSearchParams({response_type:"token",client_id:ih,redirect_uri:uh(),scope:kd,state:e});return`${sh}?${t.toString()}`}n(fh,"buildAuthorizeUrl");async function mh(){hr||(hr=oh((e,t)=>{let r=new URL(e.url||"/",`http://localhost:${ga}`);if(e.method==="GET"&&r.pathname===wd){t.writeHead(200,{"Content-Type":"text/html"}),t.end(bt.bootstrap({tokenPath:Ed,provider:"DigitalOcean"}));return}if(e.method==="POST"&&r.pathname===Ed){let o=[];e.on("data",a=>o.push(a)),e.on("end",()=>{let a=Buffer.concat(o).toString("utf8"),s={};try{s=a?JSON.parse(a):{}}catch{s={}}if(!et){t.writeHead(409,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"no_pending_oauth"}));return}if(s.error){let c=s.error_description||s.error||"OAuth error";et.reject(new Error(String(c))),et=void 0,t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({ok:!0}));return}if(!s.access_token){et.reject(new Error("Missing access_token in callback")),et=void 0,t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"missing_access_token"}));return}if(s.state!==et.state){et.reject(new Error("Invalid state - potential CSRF attack")),et=void 0,t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"invalid_state"}));return}let i=parseInt(s.expires_in||"0",10);et.resolve({access_token:s.access_token,expires_in:Number.isFinite(i)&&i>0?i:3600*24*30,state:s.state}),et=void 0,t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({ok:!0}))});return}t.writeHead(404),t.end("Not found")}),await new Promise((e,t)=>{hr.listen(ga,()=>{e()}),hr.on("error",t)}))}n(mh,"startOAuthServer");function yh(){hr&&(hr.close(),hr=void 0)}n(yh,"stopOAuthServer");function hh(e){return new Promise((t,r)=>{let o=setTimeout(()=>{et&&(et=void 0,r(new Error("OAuth callback timeout - authorization took too long")))},3e5);et={state:e,resolve:n(a=>{clearTimeout(o),t(a)},"resolve"),reject:n(a=>{clearTimeout(o),r(a)},"reject")}})}n(hh,"waitForOAuthCallback");async function vd(e){let t=await fetch(`${ch}/models/routers`,{headers:{Authorization:`Bearer ${e}`,Accept:"application/json","User-Agent":`opencode/${ce}`},signal:AbortSignal.timeout(1e4)}).catch(()=>{});return t?t.ok?{ok:!0,routers:(await t.json().catch(()=>{}))?.model_routers??[]}:{ok:!1,status:t.status}:{ok:!1,status:0}}n(vd,"listRouters");function gh(e,t){let r=`router:${e.name}`;return{id:r,providerID:t,name:e.name,family:"digitalocean-inference-routers",api:{id:r,url:lh,npm:"@ai-sdk/openai-compatible"},status:"active",headers:{},options:{},cost:{input:0,output:0,cache:{read:0,write:0}},limit:{context:128e3,output:8192},capabilities:{temperature:!0,reasoning:!1,attachment:!1,toolcall:!0,input:{text:!0,audio:!1,image:!1,video:!1,pdf:!1},output:{text:!0,audio:!1,image:!1,video:!1,pdf:!1},interleaved:!1},release_date:"",variants:{}}}n(gh,"routerModel");function xh(e){if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.flatMap(r=>r&&typeof r.name=="string"?[{name:r.name,uuid:r.uuid,description:r.description}]:[]):[]}catch{return[]}}n(xh,"parseRoutersJSON");async function Td(e){return{provider:{id:"digitalocean",async models(t,r){let o=t.models;if(r.auth?.type!=="api")return o;let a=r.auth.metadata??{},s=a.oauth_access,i=parseInt(a.oauth_expires||"0",10),c=parseInt(a.routers_fetched_at||"0",10),d=xh(a.routers),p=Date.now()-c>dh;if(s&&i>Date.now()&&p){let g=await vd(s);if(g.ok){d=g.routers;let x={...a,routers:JSON.stringify(d.map(S=>({name:S.name,uuid:S.uuid,description:S.description}))),routers_fetched_at:String(Date.now())};await e.client.auth.set({path:{id:"digitalocean"},body:{type:"api",key:r.auth.key,metadata:x}}).catch(()=>{})}else g.status===401||g.status===403||g.status}let h={...o};for(let g of d){let x=`router:${g.name}`;h[x]||(h[x]=gh(g,"digitalocean"))}return h}},auth:{provider:"digitalocean",methods:[{type:"oauth",label:"Login with DigitalOcean",async authorize(){await mh();let t=ph(),r=hh(t),o=fh(t);return await Jo(o).catch(()=>{}),{url:o,instructions:"Sign in to DigitalOcean in your browser. OpenCode will use your DigitalOcean API token directly for inference and load your Inference Routers. Re-run /connect to refresh routers later.",method:"auto",async callback(){try{let a=await r,s=await vd(a.access_token),i=s.ok?s.routers:[];return s.ok,{type:"success",provider:"digitalocean",key:a.access_token,metadata:{oauth_access:a.access_token,oauth_expires:String(Date.now()+a.expires_in*1e3),oauth_scopes:kd,routers:JSON.stringify(i.map(c=>({name:c.name,uuid:c.uuid,description:c.description}))),routers_fetched_at:String(Date.now())}}}catch{return{type:"failed"}}finally{yh()}}}}},{type:"api",label:"Paste Model Access Key"}]}}}n(Td,"DigitalOceanAuthPlugin");var xa="b1a00492-073a-47ea-816f-4c329264a828",Dd="https://auth.x.ai/oauth2/token",bh="https://auth.x.ai/oauth2/device/code",Sh="urn:ietf:params:oauth:grant-type:device_code",Eh="openid profile email offline_access grok-cli:access api:access",vh=5e3,wh=1e3,kh=5e3,Th=300*1e3,Id=3e3,Rd=12e4;function ba(){return{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json","User-Agent":`opencode/${ce}`}}n(ba,"authHeaders");function Ih(e,t=Rd){if(!e||typeof e!="string")return!1;let r=e.split(".");if(r.length<2)return!1;try{let o=r[1].replace(/-/g,"+").replace(/_/g,"/");for(;o.length%4!==0;)o+="=";let a=JSON.parse(Buffer.from(o,"base64").toString("utf8"));return typeof a?.exp!="number"?!1:a.exp*1e3<=Date.now()+Math.max(0,t)}catch{return!1}}n(Ih,"accessTokenIsExpiring");async function Oh(e,t={}){let r=await fetch(t.tokenUrl??Dd,{method:"POST",headers:ba(),body:new URLSearchParams({grant_type:"refresh_token",refresh_token:e,client_id:xa}).toString()});if(!r.ok){let o=await r.text().catch(()=>"");throw new Error(`xAI token refresh failed (${r.status})${o?`: ${o}`:""}`)}return r.json()}n(Oh,"refreshAccessToken");async function Dh(e={}){let t=await fetch(e.deviceAuthorizationUrl??bh,{method:"POST",headers:ba(),body:new URLSearchParams({client_id:xa,scope:Eh,referrer:"opencode"}).toString()});if(!t.ok){let o=await t.text().catch(()=>"");throw new Error(`xAI device code request failed (${t.status})${o?`: ${o}`:""}`)}let r=await t.json();if(!r.device_code||!r.user_code||!r.verification_uri)throw new Error("xAI device code response is missing device_code / user_code / verification_uri");return r}n(Dh,"requestDeviceCode");async function Rh(e){await new Promise(t=>setTimeout(t,e))}n(Rh,"defaultSleep");function Od(e,t){let r=Number(e);return Number.isFinite(r)&&r>0?r*1e3:t}n(Od,"positiveSecondsToMs");async function _h(e,t={}){let r=t.sleep??Rh,o=t.now??(()=>Date.now()),a=Od(e.expires_in,Th),s=o()+a,i=Math.max(Od(e.interval,vh),wh);for(;o()<s;){let c=await fetch(t.tokenUrl??Dd,{method:"POST",headers:ba(),body:new URLSearchParams({grant_type:Sh,client_id:xa,device_code:e.device_code}).toString()});if(c.ok)return await c.json();let l=await c.json().catch(()=>({})),d=Math.max(0,s-o());if(l.error==="authorization_pending"){await r(Math.min(i+Id,d));continue}if(l.error==="slow_down"){i+=kh,await r(Math.min(i+Id,d));continue}if(l.error==="access_denied"||l.error==="authorization_denied")throw new Error("xAI device authorization was denied");if(l.error==="expired_token")throw new Error("xAI device code expired - please re-run login");let p=l.error_description??l.error??"";throw new Error(`xAI device token exchange failed (${c.status})${p?`: ${p}`:""}`)}throw new Error("xAI device authorization timed out")}n(_h,"pollDeviceCodeToken");async function _d(e,t={}){return{auth:{provider:"xai",async loader(r){if((await r()).type!=="oauth")return{};let a;return{apiKey:St,async fetch(s,i){let c=await r();if(c.type!=="oauth")return fetch(s,i);if(!c.expires||c.expires-Date.now()<=Rd||Ih(c.access)){if(!a){let u=c.refresh;a=Oh(u,t).then(async h=>{let g=Date.now()+(h.expires_in??3600)*1e3,x=h.refresh_token||u;return await e.client.auth.set({path:{id:"xai"},body:{type:"oauth",access:h.access_token,refresh:x,expires:g}}).catch(()=>{}),{access:h.access_token,refresh:x,expires:g}}).finally(()=>{a=void 0})}let p=await a;c={...c,...p}}let d=new Headers(s instanceof Request?s.headers:void 0);if(i?.headers){let p=i.headers instanceof Headers?i.headers.entries():Array.isArray(i.headers)?i.headers:Object.entries(i.headers);for(let[u,h]of p)h!==void 0&&d.set(u,String(h))}return d.set("authorization",`Bearer ${c.access}`),d.set("User-Agent",`opencode/${ce}`),fetch(s,{...i,headers:d})}}},methods:[{label:"SuperGrok Subscription",type:"oauth",authorize:n(async()=>{let r=await Dh(t);return{url:r.verification_uri_complete??r.verification_uri,instructions:`Open ${r.verification_uri} on any device and enter code: ${r.user_code}`,method:"auto",callback:n(async()=>{try{let a=await _h(r,t);return{type:"success",refresh:a.refresh_token,access:a.access_token,expires:Date.now()+(a.expires_in??3600)*1e3}}catch{return{type:"failed"}}},"callback")}},"authorize")},{label:"Manually enter API Key",type:"api"}]}}}n(_d,"XaiAuthPlugin");async function Ad(e){return{"chat.params":n(async(t,r)=>{t.model.api.npm==="@ai-sdk/cerebras"&&r.options.max_completion_tokens!==void 0&&(r.maxOutputTokens=void 0)},"chat.params")}}n(Ad,"CerebrasPlugin");import{createServer as Ah}from"http";var Vn="LOCAL_APPLICATION",Sa="127.0.0.1",Cd="/",Ph=300*1e3,Ch=12e4,Gt,st,Hn;function Mh(e){return e.trim().replace(/^https?:\/\//,"").replace(/\.snowflakecomputing\.com\/?$/,"").replace(/\/+$/,"")}n(Mh,"normalizeAccount");function Md(e){let t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~";return Array.from(crypto.getRandomValues(new Uint8Array(e))).map(r=>t[r%t.length]).join("")}n(Md,"generateRandomString");function Lh(e){let t=String.fromCharCode(...new Uint8Array(e));return btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}n(Lh,"base64UrlEncode");async function Uh(){let e=Md(64),t=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e));return{verifier:e,challenge:Lh(t)}}n(Uh,"generatePKCE");function Ld(){if(!Hn)throw new Error("Snowflake OAuth callback server is not running");return`http://${Sa}:${Hn}${Cd}`}n(Ld,"callbackUrl");function Nh(e){return e?/^[-_A-Za-z0-9]+$/.test(e)?`refresh_token session:role:${e}`:`refresh_token session:role-encoded:${encodeURIComponent(e)}`:"refresh_token"}n(Nh,"oauthScope");function Ud(){return{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json","User-Agent":`opencode/${ce}`}}n(Ud,"authHeaders");function Nd(){return`Basic ${Buffer.from(`${Vn}:${Vn}`).toString("base64")}`}n(Nd,"authBasicHeader");function jh(e,t,r,o){let a=Nh(t),s=new URLSearchParams({client_id:Vn,response_type:"code",redirect_uri:Ld(),scope:a,state:r,code_challenge:o.challenge,code_challenge_method:"S256"});return`https://${e}.snowflakecomputing.com/oauth/authorize?${s.toString()}`}n(jh,"buildAuthorizeUrl");async function Fh(e,t,r){let o=await fetch(`https://${e}.snowflakecomputing.com/oauth/token-request`,{method:"POST",headers:{...Ud(),Authorization:Nd()},body:new URLSearchParams({grant_type:"authorization_code",code:t,redirect_uri:Ld(),client_id:Vn,code_verifier:r.verifier}).toString()});if(!o.ok){let s=await o.text().catch(()=>"");throw new Error(`Snowflake token exchange failed (${o.status})${s?`: ${s}`:""}`)}let a=await o.json();if(!a.access_token)throw new Error("Snowflake token response did not include access_token");if(!a.refresh_token)throw new Error("Snowflake token response did not include refresh_token. Ensure integration issues refresh tokens and scope includes refresh_token.");return a}n(Fh,"exchangeCodeForToken");async function Pd(e,t){let r=await fetch(`https://${e}.snowflakecomputing.com/oauth/token-request`,{method:"POST",headers:{...Ud(),Authorization:Nd()},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:t,client_id:Vn}).toString()});if(!r.ok){let a=await r.text().catch(()=>"");throw new Error(`Snowflake token refresh failed (${r.status})${a?`: ${a}`:""}`)}let o=await r.json();if(!o.access_token)throw new Error("Snowflake refresh response did not include access_token");return o}n(Pd,"refreshAccessToken");async function $h(){Gt||(Gt=Ah((e,t)=>{let r=e.headers.host||`${Sa}:${Hn??0}`,o=new URL(e.url||"/",`http://${r}`);if(o.pathname!==Cd){t.writeHead(404),t.end("Not found");return}let a=o.searchParams.get("state"),s=o.searchParams.get("code"),i=o.searchParams.get("error"),c=o.searchParams.get("error_description");if(!st||a!==st.state){let d="Invalid state - potential CSRF attack";st?.reject(new Error(d)),st=void 0,t.writeHead(400,{"Content-Type":"text/html"}),t.end(bt.error(d,{provider:"Snowflake"}));return}let l=st;if(st=void 0,i){let d=c||i;l.reject(new Error(d)),t.writeHead(200,{"Content-Type":"text/html"}),t.end(bt.error(d,{provider:"Snowflake"}));return}if(!s){let d="Missing authorization code";l.reject(new Error(d)),t.writeHead(400,{"Content-Type":"text/html"}),t.end(bt.error(d,{provider:"Snowflake"}));return}Fh(l.account,s,l.pkce).then(d=>l.resolve(d)).catch(d=>l.reject(d instanceof Error?d:new Error(String(d)))),t.writeHead(200,{"Content-Type":"text/html"}),t.end(bt.success({provider:"Snowflake"}))}),await new Promise((e,t)=>{Gt.listen(0,Sa,()=>{let r=Gt.address();if(!r||typeof r=="string"){t(new Error("Unable to resolve Snowflake OAuth callback port"));return}Hn=r.port,e()}),Gt.on("error",t)}))}n($h,"startOAuthServer");function jd(){Gt&&(Gt.close(),Gt=void 0,Hn=void 0)}n(jd,"stopOAuthServer");function zh(e,t,r){return st&&(st.reject(new Error("Superseded by a newer Snowflake authorize request")),st=void 0),new Promise((o,a)=>{let s=setTimeout(()=>{st&&(st=void 0,jd(),a(new Error("Snowflake OAuth callback timeout - authorization took too long")))},Ph);st={account:e,state:r,pkce:t,resolve:n(i=>{clearTimeout(s),o(i)},"resolve"),reject:n(i=>{clearTimeout(s),a(i)},"reject")}})}n(zh,"waitForOAuthCallback");async function Fd(e){let t=[{type:"text",key:"account",message:"Snowflake Account Identifier",placeholder:"myorg-myaccount",validate:n(r=>r&&r.trim().length>0?void 0:"Required","validate")},{type:"text",key:"role",message:"Snowflake Role (optional)",placeholder:"PUBLIC"}];return{auth:{provider:"snowflake-cortex",async loader(r,o){let a=await r();if(a.type!=="oauth")return{};let s,i=a;if(i.accountId&&i.refresh&&i.expires&&i.expires<=Date.now())try{let c=await Pd(i.accountId,i.refresh),l=c.refresh_token||i.refresh,d=Date.now()+(c.expires_in??600)*1e3;await e.client.auth.set({path:{id:"snowflake-cortex"},body:{type:"oauth",access:c.access_token,refresh:l,expires:d,...i.accountId&&{accountId:i.accountId}}}).catch(()=>{})}catch{}return{apiKey:St,async fetch(c,l){let d=await r();if(d.type!=="oauth")return fetch(c,l);let p=d;if(!p.accountId)throw new Error("Snowflake OAuth auth is missing accountId");let u=p.accountId,h=n(async()=>{if(!s){let E=p.refresh;s=Pd(u,E).then(async m=>{let b=m.refresh_token||E,w=Date.now()+(m.expires_in??600)*1e3;return await e.client.auth.set({path:{id:"snowflake-cortex"},body:{type:"oauth",access:m.access_token,refresh:b,expires:w,...u&&{accountId:u}}}).catch(()=>{}),{access:m.access_token,refresh:b,expires:w}}).finally(()=>{s=void 0})}let v=await s;p={...p,...v}},"refresh"),g=n(()=>{let v=new Headers(c instanceof Request?c.headers:void 0);if(l?.headers){let m=l.headers instanceof Headers?l.headers.entries():Array.isArray(l.headers)?l.headers:Object.entries(l.headers);for(let[b,w]of m)w!==void 0&&v.set(b,String(w))}v.set("authorization",`Bearer ${p.access}`),v.set("User-Agent",`opencode/${ce}`);let E=l?.body;if(E&&typeof E=="string")try{let m=JSON.parse(E);"max_tokens"in m&&(m.max_completion_tokens=m.max_tokens,delete m.max_tokens,E=JSON.stringify(m))}catch{}return{...l,headers:v,body:E}},"prepareRequest"),x=n(async v=>{if(!v.ok&&v.status===400)try{let E=await v.clone().json();if(String(E.message||E.error||"").toLowerCase().includes("conversation complete"))return new Response(JSON.stringify({choices:[{finish_reason:"stop",message:{content:"",role:"assistant"}}]}),{status:200,headers:new Headers({"content-type":"application/json"})})}catch{}if(v.body&&v.headers.get("content-type")?.includes("text/event-stream")){let E=v.body.getReader(),m=new TextEncoder,b=new TextDecoder,w=new ReadableStream({async pull(k){let{done:y,value:T}=await E.read();if(y){k.close();return}let O=b.decode(T,{stream:!0});k.enqueue(m.encode(O.replace(/"role"\s*:\s*""/g,'"role":"assistant"')))},cancel(){E.cancel()}});return new Response(w,{headers:v.headers,status:v.status})}return v},"transformResponse");(!p.expires||!p.access||p.expires-Date.now()<=Ch)&&await h();let f=await fetch(c,g());return f.status===401?(await h(),x(await fetch(c,g()))):x(f)}}},methods:[{type:"oauth",label:"Login with Snowflake (External Browser)",prompts:t,async authorize(r={}){let o=Mh(r.account||"");if(!o)throw new Error("Snowflake account is required");await $h();let a=await Uh(),s=Md(64),i=(r.role||"").trim()||void 0,c=jh(o,i,s,a),l=zh(o,a,s);return await Jo(c).catch(()=>{}),{url:c,instructions:"Complete Snowflake sign-in in your browser. OpenCode will capture the OAuth callback and store the bearer token automatically.",method:"auto",async callback(){try{let d=await l;return{type:"success",refresh:d.refresh_token,access:d.access_token,expires:Date.now()+(d.expires_in??600)*1e3,accountId:o}}catch{return{type:"failed"}}finally{jd()}}}}},{type:"api",label:"Paste PAT or bearer token manually",prompts:t.filter(r=>r.key==="account")}]}}}n(Fd,"SnowflakeCortexAuthPlugin");import{Effect as se,Layer as Gh,Context as Kh}from"effect";var Ea;(c=>{function e(l){return!l||typeof l!="object"?"":"message"in l&&typeof l.message=="string"?l.message:""}n(e,"errorMessage");function t(l,d){return l!=="install"?!1:e(d).includes("missing package.json or index file")}n(t,"isRetryableResolveError");function r(l){let d=Es.pluginSpecifier(l);return{spec:d,options:Es.pluginOptions(l),deprecated:Il(d)}}n(r,"plan");async function o(l,d){let p="";try{p=await Rl(l.spec)}catch(h){return{ok:!1,stage:"install",error:h}}if(!p)return{ok:!1,stage:"install",error:new Error(`Plugin ${l.spec} target is empty`)};let u;try{u=await _l(l.spec,p,d)}catch(h){return{ok:!1,stage:"entry",error:h}}if(!u.entry)return{ok:!1,stage:"missing",value:{...l,source:u.source,target:u.target,pkg:u.pkg,message:`Plugin ${l.spec} does not expose a ${d} entrypoint`}};if(u.source==="npm")try{await Dl(u.target,ce,u.pkg)}catch(h){return{ok:!1,stage:"compatibility",error:h}}return{ok:!0,value:{...l,source:u.source,target:u.target,entry:u.entry,pkg:u.pkg}}}c.resolve=o,n(o,"resolve");async function a(l){let d;try{d=await import(l.entry)}catch(p){return{ok:!1,error:p}}return d?{ok:!0,value:{...l,mod:d}}:{ok:!1,error:new Error(`Plugin ${l.spec} module is empty`)}}c.load=a,n(a,"load");async function s(l,d,p,u,h,g){let x=l.plan,S=Ss(x.spec)==="file";if(x.deprecated)return{retry:!1};g?.start?.(l,p);let f=await o(x,d);if(!f.ok){if(f.stage==="missing"){if(h){let m=await h(f.value,l.origin,p);if(m!==void 0)return{value:m,retry:!1}}return g?.missing?.(l,p,f.value.message,f.value),{retry:!1}}return g?.error?.(l,p,f.stage,f.error),{retry:S&&t(f.stage,f.error)}}let v=await a(f.value);return v.ok?u?{value:await u(v.value,l.origin,p),retry:!1}:{value:v.value,retry:!1}:(g?.error?.(l,p,"load",v.error,f.value),{retry:!1})}n(s,"attempt");async function i(l){let d=l.items.map(g=>({origin:g,plan:r(g.spec)})),p=[];for(let g of d)p.push(s(g,l.kind,!1,l.finish,l.missing,l.report));let u=await Promise.all(p);if(l.wait){let g;for(let x=0;x<d.length;x++){let S=u[x];if(S?.value!==void 0||S?.retry!==!0)continue;let f=d[x];!f||Ss(f.plan.spec)!=="file"||(g??=l.wait(),await g,u[x]=await s(f,l.kind,!0,l.finish,l.missing,l.report))}}let h=[];for(let g of u)g.value!==void 0&&h.push(g.value);return h}c.loadExternal=i,n(i,"loadExternal")})(Ea||={});import{Effect as $d,Schema as en}from"effect";import{Schema as Le,Struct as Wh}from"effect";var va=Le.Struct({id:hl.ID,type:Le.String,name:Le.String,branch:Le.optional(Le.NullOr(Le.String)),directory:Le.optional(Le.NullOr(Le.String)),extra:Le.optional(Le.NullOr(Le.Unknown)),projectID:Bo.ID}).annotate({identifier:"Workspace"}),aO=Le.Struct(Wh.omit(va.fields,["id"])).annotate({identifier:"WorkspaceListedInfo"}),cO=Le.Struct({type:Le.String,name:Le.String,description:Le.String});var qh=en.Struct({name:va.fields.name,branch:en.optional(en.NullOr(en.String)),directory:en.String}),wa=en.decodeUnknownSync(qh);async function oi(){let[{AppRuntime:e},{Worktree:t}]=await Promise.all([import("./app-runtime-6NGO2HRS.js"),import("./worktree-3RZQEGVC.js")]);return{AppRuntime:e,Worktree:t}}n(oi,"loadWorktree");function zd(e){if(!e?.instance)throw new Error("Worktree adapter requires an instance context");return e.instance}n(zd,"requireInstance");var ii=n((e,t)=>e.pipe($d.provideService(wl,zd(t)),$d.provideService(kl,t?.workspaceID)),"provideContext"),Wd={name:"Worktree",description:"Create a git worktree",async configure(e,t){let{AppRuntime:r,Worktree:o}=await oi(),a=await r.runPromise(ii(o.Service.use(s=>s.makeWorktreeInfo({detached:!0})),t));return{...e,name:a.name,directory:a.directory}},async create(e,t,r,o){let{AppRuntime:a,Worktree:s}=await oi(),i=wa(e);await a.runPromise(ii(s.Service.use(c=>c.createFromInfo({name:i.name,directory:i.directory,...i.branch?{branch:i.branch}:{}})),o))},async list(e){let{AppRuntime:t,Worktree:r}=await oi(),o=zd(e);return(await t.runPromise(ii(r.Service.use(a=>a.list()),e))).map(a=>({type:"worktree",name:a.name,branch:a.branch,directory:a.directory,projectID:o.project.id}))},async remove(e,t){let{AppRuntime:r,Worktree:o}=await oi(),a=wa(e);await r.runPromise(ii(o.Service.use(s=>s.remove({directory:a.directory})),t))},target(e){return{type:"local",directory:wa(e).directory}}};var qd={worktree:Wd},si=new Map;function hO(e,t){let r=si.get(e)?.get(t);if(r)return r;let o=qd[t];if(o)return o;throw new Error(`Unknown workspace adapter: ${t}`)}n(hO,"getAdapter");function gO(e){return Bh(e).map(([t,r])=>({type:t,name:r.name,description:r.description}))}n(gO,"listAdapters");function Bh(e){let t=new Map(Object.entries(qd));for(let[r,o]of si.get(e)?.entries()??[])t.set(r,o);return[...t.entries()]}n(Bh,"registeredAdapters");function Bd(e,t,r){let o=si.get(e)??new Map;o.set(t,r),si.set(e,o)}n(Bd,"registerAdapter");var tn=class extends Kh.Service()("@opencode/Plugin"){static{n(this,"Service")}};function Hd(e){return e.enabled||["local","dev","beta"].includes(e.channel??tl)}n(Hd,"experimentalWebSocketsEnabled");function Jh(e){return[t=>cd(t,{experimentalWebSockets:Hd({enabled:e.experimentalWebSockets})}),yd,hd,Vh,Hh,gd,xd,Sd,Td,Fd,_d,Ad]}n(Jh,"internalPlugins");function Vd(e){return typeof e=="function"}n(Vd,"isServerPlugin");function Xh(e){if(Vd(e))return e;if(!(!e||typeof e!="object"||!("server"in e))&&Vd(e.server))return e.server}n(Xh,"getServerPlugin");function Yh(e){let t=new Set,r=[];for(let[o,a]of Object.entries(e)){if(o==="__esModule"||o==="__name"||o==="__export"||o==="module.exports"||t.has(a))continue;t.add(a);let s=a;s&&typeof s=="object"&&"default"in s&&typeof s.default=="function"&&(s=s.default);let i=Xh(s);i&&r.push(i)}if(r.length===0)throw new TypeError("Plugin export is not a function");return r}n(Yh,"getLegacyPlugins");async function Qh(e,t,r){let o=Pl(e.mod,e.spec,"server","detect");if(o){await Cl(e.source,e.spec,e.target,Al(o.id,e.spec),e.pkg),r.push(await o.server(t,e.options));return}for(let a of Yh(e.mod))r.push(await a(t,e.options))}n(Qh,"applyPlugin");var Zh=Gh.effect(tn,se.gen(function*(){let e=yield*vs.Service,t=yield*ft.Service,r=yield*Qr.Service,o=yield*Ee.make(se.fn("Plugin.state")(function*(c){let l=[],d=yield*Xo.make();function p(m){d.fork(e.publish(Ul.Event.Error,{error:new gl.Unknown({message:m}).toObject()}))}n(p,"publishPluginError");let{Server:u}=yield*se.promise(()=>import("./server-TI57TGPO.js")),h=u.url,g=ea({baseUrl:h?.toString()??"http://localhost:4096",directory:c.directory,headers:Fn.headers(),...h?{}:{fetch:n(async(...m)=>u.Default().app.fetch(...m),"fetch")}}),x=yield*t.get(),S={client:g,project:c.project,worktree:c.worktree,directory:c.directory,experimental_workspace:{register(m,b){Bd(c.project.id,m,b)}},get serverUrl(){return u.url??new URL("http://localhost:4096")},$:typeof Bun>"u"?void 0:Bun.$};for(let m of r.disableDefaultPlugins?[]:Jh(r)){let b=yield*se.tryPromise({try:n(()=>m(S),"try"),catch:_t}).pipe(se.tapError(w=>se.logError("failed to load internal plugin",{name:m.name,error:w})),se.option);b._tag==="Some"&&l.push(b.value)}let f=r.pure?[]:x.plugin_origins??[];r.pure&&x.plugin_origins?.length,f.length&&(yield*t.waitForDependencies());let v=yield*se.promise(()=>Ea.loadExternal({items:f,kind:"server",report:{start(m){},missing(m,b,w){},error(m,b,w,k,y){let T=m.plan.spec,O=k instanceof Error?k.cause??k:k,L=w==="load"?_t(k):_t(O);if(w==="install"){let I=Ol(T);p(`Failed to install plugin ${I.pkg}@${I.version}: ${L}`);return}if(w==="compatibility"){p(`Plugin ${T} skipped: ${L}`);return}if(w==="entry"){p(`Failed to load plugin ${T}: ${L}`);return}p(`Failed to load plugin ${T}: ${L}`)}}}));for(let m of v)m&&(yield*se.tryPromise({try:n(()=>Qh(m,S,l),"try"),catch:n(b=>_t(b),"catch")}).pipe(se.tapError(b=>se.logError("failed to load plugin",{path:m.spec,error:b})),se.catch(()=>se.void)));for(let m of l)yield*se.tryPromise({try:n(()=>Promise.resolve(m.config?.(x)),"try"),catch:_t}).pipe(se.tapError(b=>se.logError("plugin config hook failed",{error:b})),se.ignore);let E=yield*e.listen(m=>m.location?.directory!==c.directory?se.void:se.sync(()=>{for(let b of l)b.event?.({event:{id:m.id,type:m.type,properties:m.data}})}));return yield*se.addFinalizer(()=>E),yield*se.addFinalizer(()=>se.forEach(l,m=>se.tryPromise({try:n(()=>Promise.resolve(m.dispose?.()),"try"),catch:_t}).pipe(se.tapError(b=>se.logError("plugin dispose hook failed",{error:b})),se.ignore),{discard:!0})),{hooks:l}})),a=se.fn("Plugin.trigger")(function*(c,l,d){if(!c)return d;let p=yield*Ee.get(o);for(let u of p.hooks){let h=u[c];h&&(yield*se.promise(async()=>h(l,d)))}return d}),s=se.fn("Plugin.list")(function*(){return(yield*Ee.get(o)).hooks}),i=se.fn("Plugin.init")(function*(){yield*Ee.get(o)});return tn.of({trigger:a,list:s,init:i})})),eg=He.make({service:tn,layer:Zh,deps:[vs.node,ft.node,Qr.node]});import Hg from"path";import{pathToFileURL as Gg}from"url";import{Effect as F,Layer as Kg,Context as Jg,Schema as D}from"effect";var Gn={};U(Gn,{EffectPromise:()=>Gn,refineRejection:()=>rg});import{Cause as tg,Effect as ai}from"effect";function rg(e,t){return ai.tryPromise(e).pipe(ai.catch(r=>{let o=tg.isUnknownError(r)?r.cause:r,a=t(o);return a!==void 0?ai.fail(a):ai.die(o)}))}n(rg,"refineRejection");var yt={};U(yt,{OUTPUT_TOKEN_MAX:()=>di,ProviderTransform:()=>yt,cacheControlFor:()=>_a,cacheWarmForMs:()=>lg,maxOutputTokens:()=>Pg,message:()=>dg,nearestVariant:()=>Ig,options:()=>Dg,providerOptions:()=>Ag,reasoningVariants:()=>Mg,sanitizeSurrogates:()=>Kt,schema:()=>Cg,smallOptions:()=>Rg,temperature:()=>ug,topK:()=>mg,topP:()=>fg,variants:()=>Og});import{mergeDeep as Ia,unique as ng}from"remeda";function Zd(e){if(e.startsWith("image/"))return"image";if(e.startsWith("audio/"))return"audio";if(e.startsWith("video/"))return"video";if(e==="application/pdf")return"pdf"}n(Zd,"mimeToModality");var di=32e3,Et=["reasoning.encrypted_content"];function Kt(e){return e.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g,"\uFFFD")}n(Kt,"sanitizeSurrogates");function Da(e){if([e.providerID,e.api.id].some(r=>{let o=r.toLowerCase();return o.includes("kimi")||o.includes("moonshot")}))return!0;let t=e.api.url.toLowerCase();return["api.kimi.com","api.moonshot.ai","api.moonshot.cn","api.moonshotai.cn"].some(r=>t.includes(r))}n(Da,"isKimiFamily");function Ra(e){switch(e){case"@ai-sdk/github-copilot":return"copilot";case"@ai-sdk/azure":return"azure";case"@ai-sdk/openai":return"openai";case"@ai-sdk/amazon-bedrock/mantle":return"openai";case"@ai-sdk/amazon-bedrock":return"bedrock";case"@ai-sdk/anthropic":case"@ai-sdk/google-vertex/anthropic":return"anthropic";case"@ai-sdk/google-vertex":return"vertex";case"@ai-sdk/google":return"google";case"@ai-sdk/alibaba":return"alibaba";case"@ai-sdk/cerebras":return"cerebras";case"@ai-sdk/cohere":return"cohere";case"@ai-sdk/deepinfra":return"deepinfra";case"@ai-sdk/groq":return"groq";case"@ai-sdk/mistral":return"mistral";case"@ai-sdk/perplexity":return"perplexity";case"@ai-sdk/togetherai":return"togetherai";case"@ai-sdk/vercel":return"vercel";case"@ai-sdk/xai":return"xai";case"venice-ai-sdk-provider":return"venice";case"@ai-sdk/gateway":return"gateway";case"@openrouter/ai-sdk-provider":return"openrouter";case"merge-gateway-ai-sdk-provider":return"mergeGateway";case"ai-gateway-provider":return"openaiCompatible"}}n(Ra,"sdkKey");function og(e,t,r){let o=n(s=>((s.output.type==="text"||s.output.type==="error-text")&&(s.output.value=Kt(s.output.value)),s.output.type==="content"&&(s.output.value=s.output.value.map(i=>(i.type==="text"&&(i.text=Kt(i.text)),i))),s),"sanitizeToolResultOutput");if(e=e.map(s=>{switch(s.role){case"tool":return Array.isArray(s.content)&&(s.content=s.content.map(i=>i.type==="tool-result"?o(i):i)),s;case"system":return s.content=Kt(s.content),s;case"user":return typeof s.content=="string"?s.content=Kt(s.content):s.content=s.content.map(i=>(i.type==="text"&&(i.text=Kt(i.text)),i)),s;case"assistant":return typeof s.content=="string"?s.content=Kt(s.content):s.content=s.content.map(i=>((i.type==="text"||i.type==="reasoning")&&(i.text=Kt(i.text)),i.type==="tool-result"?o(i):i)),s}}),t.api.npm==="@ai-sdk/anthropic"&&(e=e.map(s=>{if(typeof s.content=="string")return s.content===""?void 0:s;if(!Array.isArray(s.content))return s;let i=s.content.filter(c=>c.type==="text"?c.text!=="":c.type==="reasoning"?c.text.trim().length>0||c.providerOptions?.anthropic?.signature!=null||c.providerOptions?.anthropic?.redactedData!=null:!0);if(i.length!==0)return{...s,content:i}}).filter(s=>s!==void 0&&s.content!=="")),t.api.npm==="@ai-sdk/amazon-bedrock"&&(e=e.map(s=>{if(typeof s.content=="string")return s.content===""?void 0:s;if(!Array.isArray(s.content))return s;let i=s.content.filter(c=>{if(c.type==="text")return c.text!=="";if(c.type==="reasoning"){let l=c.providerOptions?.[t.providerID]??c.providerOptions?.bedrock;return l?.signature!=null||l?.redactedContent!=null||l?.redactedData!=null}return!0});if(i.length!==0)return{...s,content:i}}).filter(s=>s!==void 0&&s.content!=="")),t.api.id.includes("claude")){let s=n(i=>i.replace(/[^a-zA-Z0-9_-]/g,"_"),"scrub");e=e.map(i=>i.role==="assistant"&&Array.isArray(i.content)?{...i,content:i.content.map(c=>c.type==="tool-call"||c.type==="tool-result"?{...c,toolCallId:s(c.toolCallId)}:c)}:i.role==="tool"&&Array.isArray(i.content)?{...i,content:i.content.map(c=>c.type==="tool-result"?{...c,toolCallId:s(c.toolCallId)}:c)}:i)}let a=t.api.id.toLowerCase();if(t.providerID==="mistral"||["mistral","devstral","codestral","pixtral","mixtral"].some(s=>a.includes(s))){let s=n(c=>c.replace(/[^a-zA-Z0-9]/g,"").substring(0,9).padEnd(9,"0"),"scrub"),i=[];for(let c=0;c<e.length;c++){let l=e[c],d=e[c+1];l.role==="assistant"&&Array.isArray(l.content)&&(l.content=l.content.map(p=>p.type==="tool-call"||p.type==="tool-result"?{...p,toolCallId:s(p.toolCallId)}:p)),l.role==="tool"&&Array.isArray(l.content)&&(l.content=l.content.map(p=>p.type==="tool-result"?{...p,toolCallId:s(p.toolCallId)}:p)),i.push(l),l.role==="tool"&&d?.role==="user"&&i.push({role:"assistant",content:[{type:"text",text:"Done."}]})}return i}if(t.api.id.toLowerCase().includes("deepseek")&&(e=e.map(s=>s.role!=="assistant"?s:Array.isArray(s.content)?s.content.some(i=>i.type==="reasoning")?s:{...s,content:[...s.content,{type:"reasoning",text:""}]}:{...s,content:[...s.content?[{type:"text",text:s.content}]:[],{type:"reasoning",text:""}]})),typeof t.capabilities.interleaved=="object"&&t.capabilities.interleaved.field&&t.api.npm!=="@openrouter/ai-sdk-provider"){let s=t.capabilities.interleaved.field;return e.map(i=>{if(i.role==="assistant"&&Array.isArray(i.content)){let l=i.content.filter(p=>p.type==="reasoning").map(p=>p.text).join(""),d=i.content.filter(p=>p.type!=="reasoning");return{...i,content:d,providerOptions:{...i.providerOptions,openaiCompatible:{...i.providerOptions?.openaiCompatible,[s]:l}}}}return i})}return e}n(og,"normalizeMessages");function _a(e,t){return e==="message"&&t==="5m"?{type:"ephemeral"}:{type:"ephemeral",ttl:"1h"}}n(_a,"cacheControlFor");function ig(e,t,r,o="all"){if(o==="none")return e;let a=e.filter(c=>c.role==="system").slice(0,2),s=e.filter(c=>c.role!=="system"),i=(o==="history"?s.slice(0,-1):s).slice(-2);for(let c of ng([...a,...i]))sg(c,t,_a(c.role==="system"?"system":"message",r));return e}n(ig,"applyCaching");function sg(e,t,r){let o={anthropic:{cacheControl:r},openrouter:{cacheControl:{type:"ephemeral"}},bedrock:{cachePoint:{type:"default"}},openaiCompatible:{cache_control:{type:"ephemeral"}},copilot:{copilot_cache_control:{type:"ephemeral"}},alibaba:{cacheControl:{type:"ephemeral"}}};if(!(t.providerID==="anthropic"||t.providerID.includes("bedrock")||t.api.npm==="@ai-sdk/amazon-bedrock")&&Array.isArray(e.content)&&e.content.length>0){let i=e.content[e.content.length-1];if(i&&typeof i=="object"&&i.type!=="tool-approval-request"&&i.type!=="tool-approval-response"){i.providerOptions=Ia(i.providerOptions??{},o);return}}e.providerOptions=Ia(e.providerOptions??{},o)}n(sg,"applyCachePoint");function ag(e,t){return e.map(r=>{if(r.role==="tool"&&Array.isArray(r.content))return cg(r,t);if(r.role!=="user"||!Array.isArray(r.content))return r;let o=r.content.map(a=>{if(a.type!=="file"&&a.type!=="image")return a;if(a.type==="image"){let d=String(a.image);if(d.startsWith("data:")){let p=d.match(/^data:([^;]+);base64,(.*)$/);if(p&&(!p[2]||p[2].length===0))return{type:"text",text:"ERROR: Image file is empty or corrupted. Please provide a valid image."}}}let s=a.type==="image"?String(a.image).split(";")[0].replace("data:",""):a.mediaType,i=a.type==="file"?a.filename:void 0,c=Zd(s);return!c||t.capabilities.input[c]?a:{type:"text",text:`ERROR: Cannot read ${i?`"${i}"`:c} (this model does not support ${c} input). Inform the user.`}});return{...r,content:o}})}n(ag,"unsupportedParts");function cg(e,t){let r=!1,o=e.content.map(a=>{if(a?.type!=="tool-result"||a.output?.type!=="content"||!Array.isArray(a.output.value))return a;let s=a.output.value.map(i=>{if(!i||i.type!=="media"&&i.type!=="file-data"&&i.type!=="image-data")return i;let c=typeof i.mediaType=="string"?Zd(i.mediaType):void 0;if(!c||t.capabilities.input[c])return i;r=!0;let l=c==="pdf"?" Use read_files on the same path for the PDF's text.":"";return{type:"text",text:`NOTE: ${a.toolName??"the tool"} returned a ${c==="pdf"?"PDF":c} that this model cannot take as input, so it was left out.${l}`}});return{...a,output:{...a.output,value:s}}});return r?{...e,content:o}:e}n(cg,"unsupportedToolMedia");function Gd(e,t){return e.map(r=>Array.isArray(r.content)?{...r,providerOptions:t(r.providerOptions),content:r.content.map(o=>o.type==="tool-approval-request"||o.type==="tool-approval-response"?o:{...o,providerOptions:t(o.providerOptions)})}:{...r,providerOptions:t(r.providerOptions)})}n(Gd,"mapProviderOptions");function ep(e){return(e.providerID==="anthropic"||e.providerID==="google-vertex-anthropic"||e.api.id.includes("anthropic")||e.api.id.includes("claude")||e.id.includes("anthropic")||e.id.includes("claude")||e.api.npm==="@ai-sdk/anthropic"||e.api.npm==="@ai-sdk/alibaba")&&e.api.npm!=="@ai-sdk/gateway"}n(ep,"cachesByPoints");var ci=6e4;function lg(e,t){let r=ep(e)?_a("message",t).ttl==="1h"?60*ci:5*ci:e.api.npm==="@ai-sdk/openai"||e.api.npm==="@ai-sdk/azure"?60*ci:void 0;if(r!==void 0)return r-Math.min(5*ci,r/10)}n(lg,"cacheWarmForMs");function dg(e,t,r,o={}){e=ag(e,t),e=og(e,t,r);let a=r.cacheControl!==void 0&&(t.api.npm==="@ai-sdk/anthropic"||t.api.npm==="@ai-sdk/google-vertex/anthropic");ep(t)&&!a&&(e=ig(e,t,o.messageCacheTtl,o.points));let s=Ra(t.api.npm);return s&&s!==t.providerID&&(e=Gd(e,n(c=>{if(!c||!(t.providerID in c))return c;let l={...c};return l[s]=l[t.providerID],delete l[t.providerID],l},"remap"))),r.store!==!0&&s&&["@ai-sdk/openai","@ai-sdk/azure","@ai-sdk/amazon-bedrock/mantle","@ai-sdk/github-copilot"].includes(t.api.npm)&&(e=Gd(e,i=>{if(!i?.[s]||!("itemId"in i[s]))return i;let c={...i[s]};return delete c.itemId,{...i,[s]:c}})),e}n(dg,"message");var tp=/gemini-2[.-]5(?:[.-]|$)/i,pg=/gemini-(?:(?:flash|pro)-)?[12](?:[.-]|$)/i,Aa=[tp,/gemini-3-(?:flash|pro)(?:[.-]|$)/,/gemini-3[.-]1(?:[.-]|$)/,/gemini-3[.-]5-flash(?!-lite)(?:[.-]|$)/];function ug(e){let t=e.api.id.toLowerCase();if(t.includes("north-mini-code"))return 1;if(!t.includes("claude")){if(t.includes("gemini"))return Aa.some(r=>r.test(t))?1:void 0;if(t.includes("glm-4.6")||t.includes("glm-4.7")||t.includes("minimax-m2"))return 1;if(t.includes("kimi-k2"))return["thinking","k2.","k2p","k2-5"].some(r=>t.includes(r))?1:.6}}n(ug,"temperature");function fg(e){let t=e.api.id.toLowerCase();if(t.includes("gemini"))return Aa.some(r=>r.test(t))?.95:void 0;if(["minimax-m2","kimi-k2.5","kimi-k2p5","kimi-k2-5"].some(r=>t.includes(r))||["deepseek-v4-flash-0731","deepseek-v4-flash:0731"].some(r=>t.includes(r))||t.includes("deepseek-v4-flash")&&(e.providerID==="deepseek"||e.providerID.startsWith("opencode")))return .95}n(fg,"topP");function mg(e){let t=e.api.id.toLowerCase();if(t.includes("minimax-m2"))return["m2.","m25","m21"].some(r=>t.includes(r))?40:20;if(t.includes("gemini"))return Aa.some(r=>r.test(t))?64:void 0}n(mg,"topK");var Ke=["low","medium","high"],rp=["none","minimal",...Ke,"xhigh"],np=["none",...Ke],yg=[...np,"xhigh"],op=["high"],hg=["medium","high","xhigh"],gg=["medium"],ip=[...Ke,"xhigh"],xg=["none",...ip],bg="2025-11-13",Sg="2025-12-04",Pa=/(?:^|\/)gpt-5(?:[.-]|$)/,Eg=/(?:^|\/)gpt-5[.-](\d+)(?:[.-]|$)/,sp=/(?:^|\/)gpt-5[.-]?pro(?:[.-]|$)/,vg=/(?:^|\/)gpt-5[.-]\d+[.-]pro(?:[.-]|$)/;function Ca(e){return Number(Eg.exec(e)?.[1])||void 0}n(Ca,"gpt5Version");function ap(e){if(vg.test(e))return hg;let t=Ca(e);if(t!==void 0)return t===1?np:yg}n(ap,"versionedGpt5ReasoningEfforts");function cp(e){if(!Pa.test(e)||!e.includes("codex"))return;let t=Ca(e);return t!==void 0&&t>=3?xg:e.includes("codex-max")||t!==void 0&&t>=2?ip:Ke}n(cp,"gpt5CodexReasoningEfforts");function lp(e){if(!(!Pa.test(e)||!e.includes("-chat")))return Ca(e)===void 0?[]:gg}n(lp,"gpt5ChatReasoningEfforts");function li(e,t){let r=e.toLowerCase();if(r.includes("deep-research"))return["medium"];let o=lp(r);if(o)return o;if(sp.test(r))return op;let a=cp(r);if(a)return a;let s=ap(r);if(s)return s;let i=[...Ke];return Pa.test(r)&&i.unshift("minimal"),t>=bg&&i.unshift("none"),t>=Sg&&i.push("xhigh"),i}n(li,"openaiReasoningEfforts");function Kd(e){let t=e.toLowerCase(),r=lp(t);return r||(sp.test(t)?op:cp(t)??ap(t)??rp)}n(Kd,"openaiCompatibleReasoningEfforts");function dp(e){if(!e.toLowerCase().includes("claude-"))return!1;let t=/claude-(?:[a-z]+-)?(\d+)(?:[.-](\d{1,2}))?(?:[.@-]|$)/i.exec(e);if(!t)return!0;let r=Number(t[1]),o=Number(t[2]??0);return r>4||r===4&&o>=7}n(dp,"anthropicUsesModernAdaptiveThinking");function Ma(e){return["opus-4-5","opus-4.5"].some(t=>e.includes(t))}n(Ma,"anthropicOpus45");function La(e){return dp(e)?["low","medium","high","xhigh","max"]:["opus-4-6","opus-4.6","4-6-opus","4.6-opus","sonnet-4-6","sonnet-4.6","4-6-sonnet","4.6-sonnet"].some(t=>e.includes(t))?["low","medium","high","max"]:null}n(La,"anthropicAdaptiveEfforts");function Ua(e){return dp(e)}n(Ua,"anthropicOmitsThinking");function wg(e){let t=/claude-(?:([a-z]+)-)?(\d+)(?:[.-](\d{1,2}))?(?:-([a-z]+))?(?:[.@-]|$)/i.exec(e);if(!t)return!1;let r=Number(t[2]),o=Number(t[3]??0);return r===5&&o===1&&(t[1]??t[4])?.toLowerCase()==="mythos"?!1:r>5||r===5&&o>=1}n(wg,"anthropicBindsThinking");var Jd={prefixMismatchBehavior:"drop_block"};function kg(e,t){let r=Ra(e.api.npm),o=r==="bedrock"?"reasoningConfig":r==="anthropic"?"thinking":void 0;if(o&&t[o]?.blockBinding===!1){let a={...t,[o]:{...t[o]}};return delete a[o].blockBinding,Object.keys(a[o]).length===0&&delete a[o],a}if(!wg(e.api.id))return t;switch(e.api.npm){case"@ai-sdk/anthropic":case"@ai-sdk/google-vertex/anthropic":{let a=t.thinking??{type:"adaptive"};return a.type!=="adaptive"&&a.type!=="enabled"||a.blockBinding!==void 0?t:{...t,thinking:{...a,blockBinding:Jd}}}case"@ai-sdk/amazon-bedrock":{let a=t.reasoningConfig??{type:"adaptive"};return a.type!=="adaptive"&&a.type!=="enabled"||a.blockBinding!==void 0?t:{...t,reasoningConfig:{...a,blockBinding:Jd}}}}return t}n(kg,"anthropicBlockBinding");function Oa(e){return pg.test(e)}n(Oa,"isLegacyGemini");function Jn(e){return tp.test(e)}n(Jn,"isGemini25");function Tg(e){let t=e.toLowerCase();return t.includes("gemma")?["minimal","high"]:Oa(t)?["low","high"]:t.includes("flash-image")?["minimal","high"]:t.includes("pro-image")?["high"]:t.includes("flash")?["minimal","low","medium","high"]:["low","medium","high"]}n(Tg,"googleThinkingLevelEfforts");function pp(e){let t=e.toLowerCase();return Jn(t)&&t.includes("pro")&&!t.includes("flash")?32768:24576}n(pp,"googleThinkingBudgetMax");function Kn(e){return Object.fromEntries(Object.entries(e).map(([t,r])=>[t,{modelParams:r}]))}n(Kn,"wrapInSapModelParams");function Xd(e){let t=e.api.id.toLowerCase();return Jn(t)?{high:{thinkingConfig:{includeThoughts:!0,thinkingBudget:16e3}},max:{thinkingConfig:{includeThoughts:!0,thinkingBudget:pp(t)}}}:Object.fromEntries(Tg(t).map(r=>[r,{thinkingConfig:{includeThoughts:!0,thinkingLevel:r}}]))}n(Xd,"googleThinkingVariants");var ka=["none","minimal","low","medium","high","xhigh","max"];function Ig(e,t){if(!e||t.length===0)return;if(t.includes(e))return e;let r=ka.indexOf(e);if(r<0)return;let o,a=1/0;for(let s of t){let i=ka.indexOf(s);if(i<0)continue;let c=Math.abs(i-r);(c<a||c===a&&o!==void 0&&i<ka.indexOf(o))&&(o=s,a=c)}return o}n(Ig,"nearestVariant");function Og(e){if(!e.capabilities.reasoning)return{};let t=e.id.toLowerCase(),r=["glm-5.2","glm-5-2","glm-5p2"].some(s=>t.includes(s)||e.api.id.toLowerCase().includes(s));if(e.api.id.toLowerCase().includes("minimax-m3")&&["@ai-sdk/anthropic","@ai-sdk/openai-compatible"].includes(e.api.npm))return["nvidia","lilac"].includes(e.providerID)?{none:{chat_template_kwargs:{thinking_mode:"disabled"}},thinking:{chat_template_kwargs:{thinking_mode:"enabled"}}}:{none:{thinking:{type:"disabled"}},thinking:{thinking:{type:"adaptive"}}};let o=Ua(e.api.id),a=La(e.api.id);if(r&&e.api.npm==="@openrouter/ai-sdk-provider")return{high:{reasoning:{effort:"high"}},xhigh:{reasoning:{effort:"xhigh"}}};if(r&&e.api.npm==="@ai-sdk/openai-compatible")return{high:{reasoningEffort:"high"},max:{reasoningEffort:"max"}};if(r&&e.api.npm==="@ai-sdk/anthropic")return{high:{effort:"high"},max:{effort:"max"}};if(Da(e)&&["@ai-sdk/anthropic","@ai-sdk/google-vertex/anthropic"].includes(e.api.npm))return Object.fromEntries(["low","medium","high","xhigh","max"].map(s=>[s,{thinking:{type:"adaptive",display:"summarized"},effort:s}]));if(t.includes("deepseek-chat")||t.includes("deepseek-reasoner")||t.includes("deepseek-r1")||t.includes("deepseek-v3")||t.includes("minimax")||t.includes("glm")&&!r||t.includes("kimi")||t.includes("k2p")||t.includes("qwen")||t.includes("big-pickle"))return{};if(t.includes("grok")&&t.includes("grok-3-mini"))return e.api.npm==="@openrouter/ai-sdk-provider"?{low:{reasoning:{effort:"low"}},high:{reasoning:{effort:"high"}}}:{low:{reasoningEffort:"low"},high:{reasoningEffort:"high"}};switch(e.api.npm){case"@openrouter/ai-sdk-provider":return Object.fromEntries((e.api.id.startsWith("openai/")||t.includes("gpt")?Kd(e.api.id):Ke).map(p=>[p,{reasoning:{effort:p}}]));case"ai-gateway-provider":{if(e.api.id.startsWith("openai/")){let p=li(e.api.id,e.release_date);return Object.fromEntries(p.map(u=>[u,{reasoningEffort:u}]))}return Object.fromEntries(Ke.map(p=>[p,{reasoningEffort:p}]))}case"@ai-sdk/gateway":return e.api.id.includes("anthropic")?a?Object.fromEntries(a.map(p=>[p,{thinking:{type:"adaptive",...o?{display:"summarized"}:{}},effort:p}])):{high:{thinking:{type:"enabled",budgetTokens:16e3}},max:{thinking:{type:"enabled",budgetTokens:31999}}}:e.api.id.includes("google")?Jn(e.api.id)?{high:{thinkingConfig:{includeThoughts:!0,thinkingBudget:16e3}},max:{thinkingConfig:{includeThoughts:!0,thinkingBudget:pp(e.api.id.toLowerCase())}}}:Object.fromEntries(["low","high"].map(p=>[p,{includeThoughts:!0,thinkingLevel:p}])):Object.fromEntries(Kd(e.api.id).map(p=>[p,{reasoningEffort:p}]));case"@ai-sdk/github-copilot":if(e.id.includes("gemini"))return{};if(e.id.includes("claude"))return Object.fromEntries(Ke.map(p=>[p,{reasoningEffort:p}]));let s=it(()=>{if(t.includes("5.1-codex-max")||t.includes("5.2")||t.includes("5.3"))return[...Ke,"xhigh"];let p=[...Ke];return t.includes("gpt-5")&&e.release_date>="2025-12-04"&&p.push("xhigh"),p});return Object.fromEntries(s.map(p=>[p,{reasoningEffort:p,reasoningSummary:"auto",include:Et}]));case"@ai-sdk/cerebras":case"@ai-sdk/togetherai":case"@ai-sdk/xai":case"@ai-sdk/deepinfra":case"venice-ai-sdk-provider":case"@ai-sdk/openai-compatible":if(e.api.id.toLowerCase().includes("north-mini-code"))return Object.fromEntries(["none","high"].map(p=>[p,{reasoningEffort:p}]));let i=[...Ke];return e.api.id.toLowerCase().includes("deepseek-v4")&&i.push("max"),Object.fromEntries(i.map(p=>[p,{reasoningEffort:p}]));case"@ai-sdk/azure":return t==="o1-mini"?{}:Object.fromEntries(li(t,e.release_date).map(p=>[p,{reasoningEffort:p,reasoningSummary:"auto",include:Et}]));case"@ai-sdk/amazon-bedrock/mantle":case"@ai-sdk/openai":{if(e.providerID==="meta")return Object.fromEntries(rp.map(u=>[u,{reasoningEffort:u,reasoningSummary:"auto",include:Et}]));let p=li(e.api.id,e.release_date);return Object.fromEntries(p.map(u=>[u,{reasoningEffort:u,reasoningSummary:"auto",include:Et}]))}case"@ai-sdk/anthropic":case"@ai-sdk/google-vertex/anthropic":if(a){let p=[...a];return e.providerID==="github-copilot"&&(e.api.id.includes("opus-4.7")&&(p=["medium"]),p=p.filter(u=>u!=="max"&&u!=="xhigh")),Object.fromEntries(p.map(u=>[u,{thinking:{type:"adaptive",...o?{display:"summarized"}:{}},effort:u}]))}return Ma(e.api.id)?Object.fromEntries(Ke.map(p=>[p,up(e,p)])):{high:{thinking:{type:"enabled",budgetTokens:Math.min(16e3,Math.floor(e.limit.output/2-1))}},max:{thinking:{type:"enabled",budgetTokens:Math.min(31999,e.limit.output-1)}}};case"@ai-sdk/amazon-bedrock":return a?Object.fromEntries(a.map(p=>[p,{reasoningConfig:{type:"adaptive",maxReasoningEffort:p,...o?{display:"summarized"}:{}}}])):e.api.id.includes("anthropic")?{high:{reasoningConfig:{type:"enabled",budgetTokens:16e3}},max:{reasoningConfig:{type:"enabled",budgetTokens:31999}}}:Object.fromEntries(Ke.map(p=>[p,{reasoningConfig:{type:"enabled",maxReasoningEffort:p}}]));case"@ai-sdk/google-vertex":case"@ai-sdk/google":return Xd(e);case"@ai-sdk/mistral":if(!e.capabilities.reasoning)return{};let c=["mistral-small-2603","mistral-small-latest","mistral-medium-3.5","mistral-medium-2604"],l=e.api.id.toLowerCase();return c.some(p=>l.includes(p))?{high:{reasoningEffort:"high"}}:{};case"@ai-sdk/cohere":return{};case"@ai-sdk/groq":let d=["none",...Ke];return Object.fromEntries(d.map(p=>[p,{reasoningEffort:p}]));case"@ai-sdk/perplexity":return{};case"@jerome-benoit/sap-ai-provider-v2":{if(t.includes("anthropic"))return Kn(a?Object.fromEntries(a.map(p=>[p,{thinking:{type:"adaptive",...o?{display:"summarized"}:{}},output_config:{effort:p}}])):{high:{thinking:{type:"enabled",budget_tokens:16e3}},max:{thinking:{type:"enabled",budget_tokens:31999}}});if(Jn(t)||Jn(e.api.id))return Kn(Xd(e));if(t.includes("gpt")||/\bo[1-9]/.test(t)){let p=li(t,e.release_date);return Kn(Object.fromEntries(p.map(u=>[u,{reasoning_effort:u}])))}return Kn(Object.fromEntries(["low","medium","high"].map(p=>[p,{reasoning_effort:p}])))}}return{}}n(Og,"variants");function Dg(e){let t={};(e.model.api.npm==="@ai-sdk/google-vertex/anthropic"||!e.model.api.id.includes("claude")&&e.model.api.npm==="@ai-sdk/anthropic")&&(t.toolStreaming=!1),(e.model.providerID==="openai"||e.model.api.npm==="@ai-sdk/openai"||e.model.api.npm==="@ai-sdk/github-copilot"||e.model.api.npm==="@ai-sdk/amazon-bedrock/mantle"||e.model.api.npm==="@ai-sdk/xai")&&(t.store=!1),e.model.api.npm==="@ai-sdk/azure"&&(t.store=!1),(e.model.api.npm==="@openrouter/ai-sdk-provider"||e.model.api.npm==="@llmgateway/ai-sdk-provider")&&(t.usage={include:!0},e.model.api.id.toLowerCase().includes("gemini")&&!Oa(e.model.api.id)&&(t.reasoning={effort:"high"})),(e.model.providerID==="baseten"||e.model.providerID==="opencode"&&["kimi-k2-thinking","glm-4.6"].includes(e.model.api.id))&&(t.chat_template_args={enable_thinking:!0}),["zai","zhipuai"].some(i=>e.model.providerID.includes(i))&&e.model.api.npm==="@ai-sdk/openai-compatible"&&(t.thinking={type:"enabled",clear_thinking:!1}),e.model.providerID==="meta"&&e.model.api.npm==="@ai-sdk/openai"&&(t.reasoningSummary="auto",t.include=Et),(e.model.api.npm==="@ai-sdk/google"||e.model.api.npm==="@ai-sdk/google-vertex")&&e.model.capabilities.reasoning&&(t.thinkingConfig={includeThoughts:!0},Oa(e.model.api.id)||(t.thinkingConfig.thinkingLevel="high"));let r=e.model.api.id.toLowerCase();r.includes("minimax-m3")&&e.model.api.npm==="@ai-sdk/anthropic"&&(t.thinking={type:"adaptive"}),["@ai-sdk/anthropic","@ai-sdk/google-vertex/anthropic"].includes(e.model.api.npm)&&Da(e.model)&&e.model.capabilities.reasoning&&(t.thinking={type:"adaptive",display:"summarized"},t.effort="high"),e.model.providerID==="alibaba-cn"&&e.model.capabilities.reasoning&&e.model.api.npm==="@ai-sdk/openai-compatible"&&!r.includes("kimi-k2-thinking")&&(t.enable_thinking=!0),e.providerOptions?.setCacheKey!==!1&&(e.model.api.npm==="@ai-sdk/deepinfra"||e.model.api.npm==="@ai-sdk/cerebras"?t.prompt_cache_key=e.sessionID:(e.model.api.npm==="@ai-sdk/openai"||e.model.api.npm==="@ai-sdk/azure"||e.model.api.npm==="@ai-sdk/xai"||e.model.api.npm==="@ai-sdk/mistral"||e.model.api.npm==="venice-ai-sdk-provider"||e.providerOptions?.setCacheKey===!0)&&(t.promptCacheKey=e.sessionID)),e.model.api.npm==="@ai-sdk/gateway"&&(t.gateway={caching:"auto"});let[,o,a]=e.model.api.id.match(/gpt-(\d+)\.(\d+)/)??[],s=Number(o)>5||Number(o)===5&&Number(a)>=5;return e.model.api.npm==="@ai-sdk/azure"&&e.providerOptions?.useCompletionUrls?(s||(t.reasoningEffort="medium"),t):(e.model.api.id.includes("gpt-5")&&!e.model.api.id.includes("gpt-5-chat")&&(e.model.api.id.includes("gpt-5-pro")||(t.reasoningEffort="medium",(e.model.api.npm==="@ai-sdk/openai"||e.model.api.npm==="@ai-sdk/azure"||e.model.api.npm==="@ai-sdk/github-copilot"||e.model.api.npm==="@ai-sdk/amazon-bedrock/mantle")&&(t.reasoningSummary="auto"),(e.model.api.npm==="@ai-sdk/openai"||e.model.api.npm==="@ai-sdk/amazon-bedrock/mantle")&&(t.include=Et)),e.model.api.id.includes("gpt-5.")&&!e.model.api.id.includes("codex")&&!e.model.api.id.includes("-chat")&&(e.model.api.npm==="@ai-sdk/openai"||e.model.api.npm==="@ai-sdk/amazon-bedrock/mantle")&&(t.textVerbosity="low"),e.model.providerID.startsWith("opencode")&&e.providerOptions?.setCacheKey!==!1&&(t.promptCacheKey=e.sessionID,t.include=Et,t.reasoningSummary="auto")),t)}n(Dg,"options");function Rg(e){let t=Object.values(e.variants??{})[0]??{};return e.providerID==="openai"||e.api.npm==="@ai-sdk/openai"||e.api.npm==="@ai-sdk/github-copilot"||e.api.npm==="@ai-sdk/xai"?Ia({store:!1},t):(e.providerID==="openrouter"||e.providerID==="llmgateway")&&Object.keys(t).length===0&&e.api.id.includes("google")?{reasoning:{enabled:!1}}:e.providerID==="venice"?Object.keys(t).length>0?t:{veniceParameters:{disableThinking:!0}}:t}n(Rg,"smallOptions");var _g={amazon:"bedrock"};function Ag(e,t){let o=(e.api.npm==="@ai-sdk/openai"||e.api.npm==="@ai-sdk/azure"||e.api.npm==="@ai-sdk/amazon-bedrock/mantle")&&(e.capabilities.reasoning||t.reasoningEffort!==void 0||t.reasoningSummary!==void 0)?{...t,forceReasoning:!0}:kg(e,t);if(e.api.npm==="@ai-sdk/gateway"){let i=e.api.id.indexOf("/"),c=i>0?e.api.id.slice(0,i):void 0,l=c?_g[c]??c:void 0,d=o.gateway,p=Object.fromEntries(Object.entries(o).filter(([g])=>g!=="gateway")),u=Object.keys(p).length>0,h={};return d!==void 0&&(h.gateway=d),u&&(l?h[l]=p:d&&typeof d=="object"&&!Array.isArray(d)?h.gateway={...d,...p}:h.gateway=p),h}let a=e.api.npm==="@ai-sdk/openai-compatible"||e.api.npm==="@ai-sdk/openai"||e.api.npm==="@ai-sdk/anthropic",s=Ra(e.api.npm)??(a?e.providerID.split(".")[0]:e.providerID);return e.api.npm==="@ai-sdk/azure"?{openai:o,azure:o}:{[s]:o}}n(Ag,"providerOptions");function Pg(e,t=di){return Math.min(e.limit.output,t)||t}n(Pg,"maxOutputTokens");function Ta(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}n(Ta,"isPlainObject");function gr(e){let t=["string","number","boolean","integer","object","array","null"],r=["anyOf","oneOf","allOf"];if(typeof e=="boolean")return{type:"string"};if(Array.isArray(e))return e.map(gr);if(!Ta(e))return e;let o={};typeof e.$ref=="string"&&(o.$ref=e.$ref),typeof e.description=="string"&&(o.description=e.description),"const"in e?o.enum=[e.const]:Array.isArray(e.enum)&&(o.enum=e.enum),Ta(e.properties)&&(o.properties=Object.fromEntries(Object.entries(e.properties).map(([i,c])=>[i,gr(c)]))),Array.isArray(e.required)&&(o.required=e.required.filter(i=>typeof i=="string")),"items"in e&&(o.items=gr(e.items)),"additionalProperties"in e&&(o.additionalProperties=typeof e.additionalProperties=="boolean"?e.additionalProperties:gr(e.additionalProperties));for(let i of r)Array.isArray(e[i])&&(o[i]=e[i].map(gr));for(let i of["$defs","definitions"])Ta(e[i])&&(o[i]=Object.fromEntries(Object.entries(e[i]).map(([c,l])=>[c,gr(l)])));let a=typeof e.type=="string"?t.includes(e.type)?[e.type]:[]:Array.isArray(e.type)?e.type.filter(i=>typeof i=="string"&&t.includes(i)):[];if(a.length===0&&(typeof o.$ref=="string"||r.some(i=>i in o)))return o;let s=a.length>0?a:["properties","required","additionalProperties"].some(i=>i in e)?["object"]:["items","prefixItems"].some(i=>i in e)?["array"]:"enum"in o||"format"in e?["string"]:["minimum","maximum","exclusiveMinimum","exclusiveMaximum","multipleOf"].some(i=>i in e)?["number"]:[];return s.length===0?{}:(o.type=s.length===1?s[0]:s,s.includes("object")&&!("properties"in o)&&(o.properties={}),s.includes("array")&&!("items"in o)&&(o.items={type:"string"}),o)}n(gr,"sanitizeOpenAISchema");function Cg(e,t){if((e.api.npm==="@ai-sdk/openai"||e.api.npm==="@ai-sdk/azure")&&(t=gr(t)),e.providerID==="moonshotai"||e.api.id.toLowerCase().includes("kimi")){let r=n(a=>{if(a===null||typeof a!="object")return a;if(Array.isArray(a))return a.map(r);if("$ref"in a&&typeof a.$ref=="string")return{$ref:a.$ref};let s=Object.fromEntries(Object.entries(a).map(([i,c])=>[i,r(c)]));return Array.isArray(s.items)&&(s.items=s.items[0]??{}),s},"sanitizeMoonshot"),o=r(t);typeof o=="object"&&o!==null&&!Array.isArray(o)&&(t=o)}if(e.providerID==="google"||e.api.id.includes("gemini")){let r=n(i=>typeof i=="object"&&i!==null&&!Array.isArray(i),"isPlainObject"),o=n(i=>r(i)&&(Array.isArray(i.anyOf)||Array.isArray(i.oneOf)||Array.isArray(i.allOf)),"hasCombiner"),a=n(i=>r(i)?o(i)?!0:["type","properties","items","prefixItems","enum","const","$ref","additionalProperties","patternProperties","required","not","if","then","else"].some(c=>c in i):!1,"hasSchemaIntent"),s=n(i=>{if(i===null||typeof i!="object")return i;if(Array.isArray(i))return i.map(s);let c={};for(let[l,d]of Object.entries(i))l==="enum"&&Array.isArray(d)?(c[l]=d.map(p=>String(p)),(c.type==="integer"||c.type==="number")&&(c.type="string")):typeof d=="object"&&d!==null?c[l]=s(d):c[l]=d;if(Array.isArray(c.type)){let l=c.type.includes("null"),d=c.type.filter(p=>p!=="null");d.length===0?c.type="null":(delete c.type,c.anyOf=d.map(p=>({type:p})),l&&(c.nullable=!0))}return c.type==="object"&&c.properties&&Array.isArray(c.required)&&(c.required=c.required.filter(l=>l in c.properties)),c.type==="array"&&!o(c)&&(c.items==null&&(c.items={}),r(c.items)&&!a(c.items)&&(c.items.type="string")),c.type&&c.type!=="object"&&!o(c)&&(delete c.properties,delete c.required),c},"sanitizeGemini");t=s(t)}return t}n(Cg,"schema");function Mg(e,t){let r=e.reasoning_options;if(r===void 0)return;if(r.length===0)return{};let o=r.find(i=>i.type==="effort");if(o)return Lg(t,o.values);let a=r.some(i=>i.type==="toggle"),s=r.find(i=>i.type==="budget_tokens");return s?Yd({...a?Qd(t):{},...Ug(t,s.min,s.max)}):a?Yd(Qd(t)):void 0}n(Mg,"reasoningVariants");function Lg(e,t){return Object.fromEntries(t.flatMap(r=>{let o=(()=>{if(r===null)return"none";if(typeof r=="string")return r})();if(o===void 0)return[];let a=Ng(e,o);return a?[[o,a]]:[]}))}n(Lg,"effortVariants");function Ug(e,t,r){let o=Math.min(r??di-1,e.limit.output-1,di-1);if(o<=0)return{};let a=Math.min(Math.max(t??0,Math.floor((o+1)/2)),o);return Object.fromEntries([{id:"high",budget:a},{id:"max",budget:o}].flatMap(s=>{let i=Fg(e,s.budget);return i?[[s.id,i]]:[]}))}n(Ug,"budgetVariants");function Yd(e){return Object.keys(e).length>0?e:void 0}n(Yd,"nonEmptyVariants");function Qd(e){return e.api.npm==="@ai-sdk/alibaba"?{none:{enableThinking:!1},high:{enableThinking:!0}}:e.api.npm==="@ai-sdk/cohere"?{none:{thinking:{type:"disabled"}},high:{thinking:{type:"enabled"}}}:{}}n(Qd,"reasoningToggle");function Ng(e,t){switch(e.api.npm){case"@openrouter/ai-sdk-provider":return{reasoning:{effort:t}};case"@ai-sdk/anthropic":case"@ai-sdk/google-vertex/anthropic":return jg(e,t)??{effort:t};case"@ai-sdk/google":case"@ai-sdk/google-vertex":return{thinkingConfig:{includeThoughts:!0,thinkingLevel:t}};case"@ai-sdk/amazon-bedrock":return La(e.api.id)?{reasoningConfig:{type:"adaptive",maxReasoningEffort:t,...Ua(e.api.id)?{display:"summarized"}:{}}}:Ma(e.api.id)?{reasoningConfig:{type:"enabled",budgetTokens:Math.min(16e3,Math.floor(e.limit.output/2-1)),maxReasoningEffort:t}}:e.api.id.includes("anthropic")?void 0:{reasoningConfig:{type:"enabled",maxReasoningEffort:t}};case"@ai-sdk/gateway":return e.id.includes("anthropic")?{thinking:{type:"adaptive",display:"summarized"},effort:t}:e.id.includes("google")?{thinkingConfig:{includeThoughts:!0,thinkingLevel:t}}:{reasoningEffort:t};case"@ai-sdk/github-copilot":return e.id.includes("gemini")?void 0:e.id.includes("claude")?{reasoningEffort:t}:{reasoningEffort:t,reasoningSummary:"auto",include:Et};case"@ai-sdk/openai":case"@ai-sdk/amazon-bedrock/mantle":return{reasoningEffort:t,reasoningSummary:"auto",include:Et};case"@ai-sdk/azure":return{reasoningEffort:t,reasoningSummary:"auto",include:Et};case"@jerome-benoit/sap-ai-provider-v2":return e.id.includes("anthropic")?{modelParams:{thinking:{type:"adaptive",display:"summarized"},output_config:{effort:t}}}:{modelParams:{reasoning_effort:t}};case"@ai-sdk/openai-compatible":case"@ai-sdk/xai":case"@ai-sdk/mistral":case"@ai-sdk/groq":case"@ai-sdk/cerebras":case"@ai-sdk/deepinfra":case"@ai-sdk/togetherai":case"venice-ai-sdk-provider":case"ai-gateway-provider":case"merge-gateway-ai-sdk-provider":return{reasoningEffort:t};case"gitlab-ai-provider":return e.family?.startsWith("gpt")?{reasoningEffort:t}:e.family?.startsWith("claude")?{thinking:{type:"adaptive",effort:t}}:void 0;case"@ai-sdk/cohere":case"@ai-sdk/perplexity":case"@ai-sdk/vercel":case"@ai-sdk/alibaba":return}}n(Ng,"reasoningEffort");function jg(e,t){if(Ma(e.api.id))return up(e,t);if(Da(e))return{thinking:{type:"adaptive",display:"summarized"},effort:t};if(La(e.api.id))return{thinking:{type:"adaptive",...Ua(e.api.id)?{display:"summarized"}:{}},effort:t}}n(jg,"anthropicEffort");function up(e,t){return{thinking:{type:"enabled",budgetTokens:Math.min(16e3,Math.floor(e.limit.output/2-1))},effort:t}}n(up,"anthropicOpus45Effort");function Fg(e,t){switch(e.api.npm){case"@openrouter/ai-sdk-provider":return{reasoning:{max_tokens:t}};case"@ai-sdk/anthropic":case"@ai-sdk/google-vertex/anthropic":return{thinking:{type:"enabled",budgetTokens:t}};case"@ai-sdk/google":case"@ai-sdk/google-vertex":return{thinkingConfig:{includeThoughts:!0,thinkingBudget:t}};case"@ai-sdk/amazon-bedrock":return{reasoningConfig:{type:"enabled",budgetTokens:t}};case"@ai-sdk/gateway":return e.id.includes("anthropic")?{thinking:{type:"enabled",budgetTokens:t}}:e.id.includes("google")?{thinkingConfig:{includeThoughts:!0,thinkingBudget:t}}:void 0;case"@ai-sdk/cohere":return{thinking:{type:"enabled",tokenBudget:t}};case"@ai-sdk/alibaba":return{enableThinking:!0,thinkingBudget:t};case"@jerome-benoit/sap-ai-provider-v2":return e.id.includes("anthropic")?{modelParams:{thinking:{type:"enabled",budget_tokens:t}}}:e.id.includes("gemini")?{modelParams:{thinkingConfig:{includeThoughts:!0,thinkingBudget:t}}}:void 0;case"@ai-sdk/amazon-bedrock/mantle":case"@ai-sdk/azure":case"@ai-sdk/cerebras":case"@ai-sdk/deepinfra":case"@ai-sdk/github-copilot":case"@ai-sdk/groq":case"@ai-sdk/mistral":case"@ai-sdk/openai":case"@ai-sdk/openai-compatible":case"@ai-sdk/perplexity":case"@ai-sdk/togetherai":case"@ai-sdk/vercel":case"@ai-sdk/xai":case"ai-gateway-provider":case"gitlab-ai-provider":case"venice-ai-sdk-provider":return}}n(Fg,"reasoningBudget");import{Schema as $g}from"effect";var fp=$g.Literals(["alpha","beta","deprecated","active"]);var Na;(i=>{i.INCOMPLETE_CODE=je.RESPONSE_INCOMPLETE_CODE,i.FAILED_CODE=je.RESPONSE_FAILED_CODE;function r(c,l,d,p){return{type:"error",sequence_number:typeof c=="number"?c:0,error:{type:p??l,code:l,message:d,param:null}}}n(r,"errorEvent");function o(c){switch(c.type){case"response.failed":{let l=c.response?.error,d=typeof l?.code=="string"&&l.code?l.code:i.FAILED_CODE,p=typeof l?.message=="string"&&l.message?l.message:"The provider reported the response failed.";return r(c.sequence_number,d,p,i.FAILED_CODE)}case"response.incomplete":{let l=c.response?.incomplete_details?.reason;return l==="content_filter"?void 0:r(c.sequence_number,i.INCOMPLETE_CODE,`The response ended incomplete (${typeof l=="string"&&l?l:"no reason given"}).`)}case"error":{if(c.error&&typeof c.error=="object")return;let l=typeof c.code=="string"&&c.code?c.code:i.FAILED_CODE,d=typeof c.message=="string"&&c.message?c.message:"Stream error.";return r(c.sequence_number,l,d)}}}i.rewrite=o,n(o,"rewrite");let a=new Set(["response.completed","response.incomplete","response.failed","error"]);function s(c){if(!c.ok||!c.body)return c;let l=c.body.getReader(),d=new TextDecoder,p=new TextEncoder,u="",h=!1,g=!1,x=n(v=>{let E=v.split(/\r?\n/).filter(w=>w.startsWith("data:")).map(w=>w.slice(5).replace(/^ /,"")).join(`
36
- `),m;try{m=E?JSON.parse(E):void 0}catch{m=void 0}if(!m||typeof m.type!="string")return v+`
37
-
38
- `;m.type.startsWith("response.")&&(h=!0),a.has(m.type)&&(g=!0);let b=o(m);return b?`event: error
39
- data: ${JSON.stringify(b)}
40
-
41
- `:v+`
42
-
43
- `},"block"),S=n(v=>{let E="";for(;;){let m=/\r?\n\r?\n/.exec(u);if(!m)break;E+=x(u.slice(0,m.index)),u=u.slice(m.index+m[0].length)}return v&&u.trim()&&(E+=x(u),u=""),E},"drain"),f=new ReadableStream({async pull(v){for(;;){let E=await l.read();if(E.done){u+=d.decode();let b=S(!0);if(b&&v.enqueue(p.encode(b)),h&&!g){v.error(new je.ResponseStreamError("Response stream ended before response.completed"));return}v.close();return}u+=d.decode(E.value,{stream:!0});let m=S(!1);if(m){v.enqueue(p.encode(m));return}}},async cancel(v){await l.cancel(v)}});return new Response(f,{headers:new Headers(c.headers),status:c.status,statusText:c.statusText})}i.wrap=s,n(s,"wrap")})(Na||={});import{createHash as Wg}from"node:crypto";import{appendFileSync as qg,existsSync as Bg}from"node:fs";import mp from"node:path";var Xn;(l=>{let e=n(()=>mp.join(he.Path.data,"request-trace.on"),"flag"),t=n(()=>mp.join(he.Path.data,"request-trace.jsonl"),"file"),r=n(d=>Wg("sha1").update(typeof d=="string"?d:JSON.stringify(d??null)).digest("hex").slice(0,8),"h"),o=n(d=>JSON.stringify(d??null).includes('"cache_control"')?"*":"","marked");function a(){try{return Bg(e())}catch{return!1}}l.on=a,n(a,"on");function s(d,p){let u={model:d?.model};return Array.isArray(d?.input)?(u.key=d.prompt_cache_key??p?.["session-id"],u.tools=r(d.tools),u.toolNames=r((d.tools??[]).map(h=>h.name)),u.instructions=r(d.instructions),u.items=d.input.map(h=>`${h.type??h.role}:${r(h)}`),u.reasoning=d.reasoning,u.store=d.store,u.include=d.include,u.continues=Array.isArray(d.input)&&/_call_output$/.test(d.input[d.input.length-1]?.type??"")):Array.isArray(d?.messages)&&(u.tools=r(d.tools)+o(d.tools?.[d.tools.length-1]),u.system=Array.isArray(d.system)?d.system.map(h=>r(h.text)+o(h)):r(d.system),u.items=d.messages.map(h=>`${h.role}:`+(Array.isArray(h.content)?h.content.map(g=>r({...g,cache_control:void 0})+o(g)).join("+"):r(h.content))),u.thinking=d.thinking,u.effort=d.output_config??d.effort),u}l.shape=s,n(s,"shape");function i(d,p,u){if(p.sentAt=u,p.headersMs=Date.now()-u,p.status=d.status,!d.body)return c(p),d;let h,g,x=new TextDecoder,S=d.body.pipeThrough(new TransformStream({transform(f,v){let E=Date.now()-u;if(h===void 0&&(h=E),g===void 0){let m=x.decode(f,{stream:!0});/output_text\.delta|function_call_arguments\.delta|reasoning_summary_text\.delta|"content_block_delta"|"input_json_delta"|"text_delta"|"thinking_delta"/.test(m)&&(g=E)}v.enqueue(f)},flush(){c({...p,firstChunkMs:h,firstOutputMs:g,endMs:Date.now()-u})}}));return new Response(S,{status:d.status,statusText:d.statusText,headers:d.headers})}l.wrap=i,n(i,"wrap");function c(d){try{qg(t(),JSON.stringify(d)+`
44
- `)}catch{}}n(c,"write")})(Xn||={});var Xg=3e5;function Yg(e,t,r,o=!1){if(typeof t!="number"||t<=0||!e.body||!e.headers.get("content-type")?.includes("text/event-stream")&&!(o&&e.ok))return e;let a=e.body.getReader(),s=new ReadableStream({async pull(i){let c=await new Promise((l,d)=>{let p=setTimeout(()=>{let u=new je.ResponseStreamError("SSE read timed out");r.abort(u),a.cancel(u).catch(()=>{}),d(u)},t);a.read().then(u=>{clearTimeout(p),l(u)},u=>{clearTimeout(p),d(u)})});if(c.done){i.close();return}i.enqueue(c.value)},async cancel(i){r.abort(i),await a.cancel(i)}});return new Response(s,{headers:new Headers(e.headers),status:e.status,statusText:e.statusText})}n(Yg,"wrapSSE");function Qg(e){let t=new AbortController,r=setTimeout(()=>t.abort(new je.HeaderTimeoutError(e)),e);return{signal:t.signal,clear:n(()=>clearTimeout(r),"clear")}}n(Qg,"timeoutController");function vp(e,t){let r=e.fetch,o=e.chunkTimeout??3e5,a=e.headerTimeout??3e5,s=e.timeout;return async(i,c)=>{let l=r??fetch,d=c??{},p=typeof o=="number"&&o>0?new AbortController:void 0,u=a===!1?void 0:a,h=typeof u=="number"?Qg(u):void 0,g=[];d.signal&&g.push(d.signal),p&&g.push(p.signal),h&&g.push(h.signal),s!=null&&s!==!1&&g.push(AbortSignal.timeout(s));let x=g.length===0?null:g.length===1?g[0]:AbortSignal.any(g);x&&(d.signal=x);let S=!1;if(t.api.npm==="@ai-sdk/openai"&&typeof d.body=="string"&&d.method==="POST")try{S=JSON.parse(d.body).stream===!0}catch{}let f=d.method==="POST"&&typeof d.body=="string"&&Xn.on()?(()=>{try{return Xn.shape(JSON.parse(d.body),d.headers)}catch{return}})():void 0,v=Date.now(),E={...d,timeout:!1},m=await(t.api.npm==="@ai-sdk/anthropic"&&bs.on()?bs.send(l,i,E):l(i,E)).finally(()=>h?.clear()),b=f?Xn.wrap(m,{provider:t.providerID,...f},v):m,w=p?Yg(b,o,p,S):b;return S?Na.wrap(w):w}}n(vp,"timeoutFetch");function wp(e,t){if(e&&!(t!=="eu"&&t!=="us"))return`https://aiplatform.${t}.rep.googleapis.com/v1/projects/${e}/locations/${t}/publishers/anthropic/models`}n(wp,"googleVertexAnthropicBaseURL");function Zg(e){return e==="global"?"aiplatform.googleapis.com":e==="eu"||e==="us"?`aiplatform.${e}.rep.googleapis.com`:`${e}-aiplatform.googleapis.com`}n(Zg,"googleVertexEndpoint");var ex={"@ai-sdk/amazon-bedrock":n(()=>import("@ai-sdk/amazon-bedrock").then(e=>e.createAmazonBedrock),"@ai-sdk/amazon-bedrock"),"@ai-sdk/amazon-bedrock/mantle":n(()=>import("@ai-sdk/amazon-bedrock/mantle").then(e=>e.createBedrockMantle),"@ai-sdk/amazon-bedrock/mantle"),"@ai-sdk/anthropic":n(()=>import("@ai-sdk/anthropic").then(e=>e.createAnthropic),"@ai-sdk/anthropic"),"@ai-sdk/azure":n(()=>import("@ai-sdk/azure").then(e=>e.createAzure),"@ai-sdk/azure"),"@ai-sdk/google":n(()=>import("@ai-sdk/google").then(e=>e.createGoogleGenerativeAI),"@ai-sdk/google"),"@ai-sdk/google-vertex":n(()=>import("@ai-sdk/google-vertex").then(e=>e.createVertex),"@ai-sdk/google-vertex"),"@ai-sdk/google-vertex/anthropic":n(()=>import("@ai-sdk/google-vertex/anthropic").then(e=>e.createVertexAnthropic),"@ai-sdk/google-vertex/anthropic"),"@ai-sdk/openai":n(()=>import("@ai-sdk/openai").then(e=>e.createOpenAI),"@ai-sdk/openai"),"@ai-sdk/openai-compatible":n(()=>import("@ai-sdk/openai-compatible").then(e=>e.createOpenAICompatible),"@ai-sdk/openai-compatible"),"@openrouter/ai-sdk-provider":n(()=>import("@openrouter/ai-sdk-provider").then(e=>e.createOpenRouter),"@openrouter/ai-sdk-provider"),"@ai-sdk/xai":n(()=>import("@ai-sdk/xai").then(e=>e.createXai),"@ai-sdk/xai"),"@ai-sdk/mistral":n(()=>import("@ai-sdk/mistral").then(e=>e.createMistral),"@ai-sdk/mistral"),"@ai-sdk/groq":n(()=>import("@ai-sdk/groq").then(e=>e.createGroq),"@ai-sdk/groq"),"@ai-sdk/deepinfra":n(()=>import("@ai-sdk/deepinfra").then(e=>e.createDeepInfra),"@ai-sdk/deepinfra"),"@ai-sdk/cerebras":n(()=>import("@ai-sdk/cerebras").then(e=>e.createCerebras),"@ai-sdk/cerebras"),"@ai-sdk/cohere":n(()=>import("@ai-sdk/cohere").then(e=>e.createCohere),"@ai-sdk/cohere"),"@ai-sdk/gateway":n(()=>import("@ai-sdk/gateway").then(e=>e.createGateway),"@ai-sdk/gateway"),"@ai-sdk/togetherai":n(()=>import("@ai-sdk/togetherai").then(e=>e.createTogetherAI),"@ai-sdk/togetherai"),"@ai-sdk/perplexity":n(()=>import("@ai-sdk/perplexity").then(e=>e.createPerplexity),"@ai-sdk/perplexity"),"@ai-sdk/vercel":n(()=>import("@ai-sdk/vercel").then(e=>e.createVercel),"@ai-sdk/vercel"),"@ai-sdk/alibaba":n(()=>import("@ai-sdk/alibaba").then(e=>e.createAlibaba),"@ai-sdk/alibaba"),"gitlab-ai-provider":n(()=>import("gitlab-ai-provider").then(e=>e.createGitLab),"gitlab-ai-provider"),"@ai-sdk/github-copilot":n(()=>import("./copilot-provider-TX4YFKJZ.js").then(e=>e.createOpenaiCompatible),"@ai-sdk/github-copilot"),"venice-ai-sdk-provider":n(()=>import("venice-ai-sdk-provider").then(e=>e.createVenice),"venice-ai-sdk-provider")};function gp(e,t,r){return r&&e.chat?e.chat(t):e.responses?e.responses(t):e.messages?e.messages(t):e.chat?e.chat(t):e.languageModel(t)}n(gp,"selectAzureLanguageModel");function tx(e,t){return t==="openai.gpt-oss-safeguard-20b"||t==="openai.gpt-oss-safeguard-120b"?e.chat?.(t)??e.languageModel(t):e.responses?.(t)??e.languageModel(t)}n(tx,"selectBedrockMantleLanguageModel");function rx(e){return{anthropic:n(()=>F.succeed({autoload:!1,options:{headers:{"anthropic-beta":"interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14"}}}),"anthropic"),opencode:F.fnUntraced(function*(t){let r=yield*e.env();return it(()=>!!t.env.some(s=>r[s]))||!!(yield*e.auth(t.id))||!!(yield*e.config()).provider?.opencode?.options?.apiKey?{autoload:Object.keys(t.models).length>0,options:{}}:{autoload:!1}}),openai:n(()=>F.succeed({autoload:!1,async getModel(t,r,o){return t.responses(r)},options:{headerTimeout:Xg}}),"openai"),meta:n(()=>F.succeed({autoload:!1,async getModel(t,r,o){return t.responses(r)}}),"meta"),xai:n(()=>F.succeed({autoload:!1,async getModel(t,r,o){return t.responses(r)},options:{}}),"xai"),"github-copilot":n(()=>F.succeed({autoload:!1,async getModel(t,r,o,a){if(t.responses===void 0&&t.chat===void 0)return t.languageModel(r);if(a&&"endpoint"in a.api){if(a.api.endpoint==="responses"&&t.responses)return t.responses(r);if(a.api.endpoint==="chat"&&t.chat)return t.chat(r)}let s=/^gpt-(\d+)/.exec(r);return s&&Number(s[1])>=5&&!r.startsWith("gpt-5-mini")?t.responses(r):t.chat(r)},options:{}}),"github-copilot"),azure:F.fnUntraced(function*(t){let r=yield*e.env(),o=yield*e.auth(t.id),a=it(()=>[t.options?.resourceName,o?.type==="api"?o.metadata?.resourceName:void 0,o?.type==="oauth"?o.accountId:void 0,r.AZURE_RESOURCE_NAME].find(s=>typeof s=="string"&&s.trim()!==""));return!a&&!t.options?.baseURL?{autoload:!1,async getModel(){throw new Error("AZURE_RESOURCE_NAME is missing, set it using env var or reconnecting the azure provider and setting it")}}:{autoload:!1,async getModel(s,i,c){return gp(s,i,!!c?.useCompletionUrls)},options:{resourceName:a},vars(s){return a?{AZURE_RESOURCE_NAME:a}:{}}}}),"azure-cognitive-services":F.fnUntraced(function*(t){let r=yield*e.get("AZURE_COGNITIVE_SERVICES_RESOURCE_NAME");return{autoload:!1,async getModel(o,a,s){return gp(o,a,!!s?.useCompletionUrls)},options:{baseURL:r?`https://${r}.cognitiveservices.azure.com/openai${t.options?.useDeploymentBasedUrls?"":"/v1"}`:void 0}}}),"amazon-bedrock":F.fnUntraced(function*(){let t=(yield*e.config()).provider?.["amazon-bedrock"],r=yield*e.auth("amazon-bedrock"),o=yield*e.env(),a=t?.options?.region,s=o.AWS_REGION,i=a??s??"us-east-1",c=t?.options?.profile,l=o.AWS_PROFILE,d=c??l,p=o.AWS_ACCESS_KEY_ID,u=t?.options?.apiKey,h=it(()=>{let E=process.env.AWS_BEARER_TOKEN_BEDROCK;if(E)return E;if(r?.type==="api")return process.env.AWS_BEARER_TOKEN_BEDROCK=r.key,r.key}),g=o.AWS_WEB_IDENTITY_TOKEN_FILE,x=!!(process.env.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI||process.env.AWS_CONTAINER_CREDENTIALS_FULL_URI);if(!d&&!p&&!h&&!u&&!g&&!x)return{autoload:!1};let{fromNodeProviderChain:S}=yield*F.promise(()=>import("@aws-sdk/credential-providers")),f={region:i};if(!h&&!u){let E=d?{profile:d}:{};f.credentialProvider=S(E)}let v=t?.options?.endpoint??t?.options?.baseURL;return v&&(f.baseURL=v),{autoload:!0,options:f,vars(E){return{AWS_REGION:E.region??i}},async getModel(E,m,b,w){if(w?.api.npm==="@ai-sdk/amazon-bedrock/mantle")return tx(E,m);if(m.startsWith("arn:")||["global.","us.","eu.","jp.","apac.","au."].some(O=>m.startsWith(O)))return E.languageModel(m);let y=b?.region??i,T=y.split("-")[0];switch(T){case"us":{let O=["nova-micro","nova-lite","nova-pro","nova-premier","nova-2","claude","deepseek.r1"].some(I=>m.includes(I)),L=y.startsWith("us-gov");O&&!L&&(m=`${T}.${m}`);break}case"eu":{let O=["eu-west-1","eu-west-2","eu-west-3","eu-north-1","eu-central-1","eu-south-1","eu-south-2"].some(I=>y.includes(I)),L=["claude","nova-lite","nova-micro","llama3","pixtral"].some(I=>m.includes(I));O&&L&&(m=`${T}.${m}`);break}case"ap":{let O=["ap-southeast-2","ap-southeast-4"].includes(y),L=y==="ap-northeast-1";O&&["anthropic.claude-sonnet-4-5","anthropic.claude-haiku"].some(I=>m.includes(I))?(T="au",m=`${T}.${m}`):L?["claude","nova-lite","nova-micro","nova-pro"].some(_=>m.includes(_))&&(T="jp",m=`${T}.${m}`):["claude","nova-lite","nova-micro","nova-pro"].some(_=>m.includes(_))&&(T="apac",m=`${T}.${m}`);break}}return E.languageModel(m)}}}),llmgateway:n(()=>F.succeed({autoload:!1,options:{headers:{"HTTP-Referer":"https://opencode.ai/","X-Title":"opencode","X-Source":"opencode"}}}),"llmgateway"),openrouter:n(()=>F.succeed({autoload:!1,options:{headers:{"HTTP-Referer":"https://opencode.ai/","X-Title":"opencode"}}}),"openrouter"),nvidia:n(t=>F.succeed({autoload:t.source==="config",options:{headers:{"HTTP-Referer":"https://opencode.ai/","X-Title":"opencode","X-BILLING-INVOKE-ORIGIN":"OpenCode"}}}),"nvidia"),vercel:n(()=>F.succeed({autoload:!1,options:{headers:{"http-referer":"https://opencode.ai/","x-title":"opencode"}}}),"vercel"),"google-vertex":F.fnUntraced(function*(t){let r=yield*e.env(),o=t.options?.project??r.GOOGLE_VERTEX_PROJECT??r.GOOGLE_CLOUD_PROJECT??r.GCP_PROJECT??r.GCLOUD_PROJECT,a=String(t.options?.location??r.GOOGLE_VERTEX_LOCATION??r.GOOGLE_CLOUD_LOCATION??r.VERTEX_LOCATION??"us-central1");return!o?{autoload:!1}:{autoload:!0,vars(i){return{...o&&{GOOGLE_VERTEX_PROJECT:o},GOOGLE_VERTEX_LOCATION:a,GOOGLE_VERTEX_ENDPOINT:Zg(a)}},options:{project:o,location:a,fetch:n(async(i,c)=>{let{GoogleAuth:l}=await import("google-auth-library"),u=await(await new l({scopes:["https://www.googleapis.com/auth/cloud-platform"]}).getClient()).getAccessToken(),h=new Headers(c?.headers);return h.set("Authorization",`Bearer ${u.token}`),fetch(i,{...c,headers:h})},"fetch")},async getModel(i,c){let l=String(c).trim();return i.languageModel(l)}}}),"google-vertex-anthropic":F.fnUntraced(function*(){let t=yield*e.env(),r=t.GOOGLE_CLOUD_PROJECT??t.GCP_PROJECT??t.GCLOUD_PROJECT,o=t.GOOGLE_CLOUD_LOCATION??t.VERTEX_LOCATION??"global";if(!!!r)return{autoload:!1};let s=wp(r,o);return{autoload:!0,options:{project:r,location:o,...s&&{baseURL:s}},async getModel(i,c){let l=String(c).trim();return i.languageModel(l)}}}),"sap-ai-core":F.fnUntraced(function*(){let t=yield*e.auth("sap-ai-core"),r=it(()=>{let s=process.env.AICORE_SERVICE_KEY;if(s)return s;if(t?.type==="api")return process.env.AICORE_SERVICE_KEY=t.key,t.key}),o=process.env.AICORE_DEPLOYMENT_ID,a=process.env.AICORE_RESOURCE_GROUP;return{autoload:!!r,options:r?{deploymentId:o,resourceGroup:a}:{},async getModel(s,i){return s(i)}}}),zenmux:n(()=>F.succeed({autoload:!1,options:{headers:{"HTTP-Referer":"https://opencode.ai/","X-Title":"opencode"}}}),"zenmux"),gitlab:F.fnUntraced(function*(t){let{VERSION:r,isWorkflowModel:o,discoverWorkflowModels:a}=yield*F.promise(()=>import("gitlab-ai-provider")),s=(yield*e.get("GITLAB_INSTANCE_URL"))||"https://gitlab.com",i=yield*e.auth(t.id),c=i?.type==="oauth"?i.access:i?.type==="api"?i.key:void 0,l=c??(yield*e.get("GITLAB_TOKEN")),d=(yield*e.config()).provider?.gitlab,p=yield*Ee.directory,u={"User-Agent":`opencode/${ce} gitlab-ai-provider/${r} (${Mt.platform()} ${Mt.release()}; ${Mt.arch()})`,"anthropic-beta":"context-1m-2025-08-07",...d?.options?.aiGatewayHeaders},h={duo_agent_platform_agentic_chat:!0,duo_agent_platform:!0,...d?.options?.featureFlags};return{autoload:!!l,options:{instanceUrl:s,apiKey:l,aiGatewayHeaders:u,featureFlags:h},async getModel(g,x,S){if(x.startsWith("duo-workflow-")){let f=typeof S?.workflowRef=="string"?S.workflowRef:void 0,v=o(x)?x:"duo-workflow",E=typeof S?.workflowDefinition=="string"?S.workflowDefinition:void 0,m=g.workflowChat(v,{featureFlags:h,workflowDefinition:E});return f&&(m.selectedModelRef=f),m}return g.agenticChat(x,{aiGatewayHeaders:u,featureFlags:h})},async discoverModels(){if(!c)return{};try{let g=c,S=await a({instanceUrl:s,getHeaders:n(()=>i?.type==="api"?{"PRIVATE-TOKEN":g}:{Authorization:`Bearer ${g}`},"getHeaders")},{workingDirectory:p});if(!S.models.length)return{};let f={};for(let v of S.models)t.models[v.id]||(f[v.id]={id:$e.ID.make(v.id),providerID:Q.ID.make("gitlab"),name:`Agent Platform (${v.name})`,family:"",api:{id:v.id,url:s,npm:"gitlab-ai-provider"},status:"active",headers:{},options:{workflowRef:v.ref},cost:{input:0,output:0,cache:{read:0,write:0}},limit:{context:v.context,output:v.output},capabilities:{temperature:!1,reasoning:!0,attachment:!0,toolcall:!0,input:{text:!0,audio:!1,image:!0,video:!1,pdf:!0},output:{text:!0,audio:!1,image:!1,video:!1,pdf:!1},interleaved:!1},release_date:"",variants:{}});return f}catch{return{}}}}}),"cloudflare-workers-ai":F.fnUntraced(function*(t){if(t.options?.baseURL)return{autoload:!1};let r=yield*e.auth(t.id),o=yield*e.env(),a=o.CLOUDFLARE_ACCOUNT_ID||(r?.type==="api"?r.metadata?.accountId:void 0);if(!a)return{autoload:!1,async getModel(){throw new Error("CLOUDFLARE_ACCOUNT_ID is missing. Set it with: export CLOUDFLARE_ACCOUNT_ID=<your-account-id>")}};let s=o.CLOUDFLARE_API_KEY||(r?.type==="api"?r.key:void 0);return{autoload:!!s,options:{apiKey:s,headers:{"User-Agent":`opencode/${ce} cloudflare-workers-ai (${Mt.platform()} ${Mt.release()}; ${Mt.arch()})`}},async getModel(i,c){return i.languageModel(c)},vars(i){return{CLOUDFLARE_ACCOUNT_ID:a}}}}),"cloudflare-ai-gateway":F.fnUntraced(function*(t){if(t.options?.baseURL)return{autoload:!1};let r=yield*e.auth(t.id),o=yield*e.env(),a=o.CLOUDFLARE_ACCOUNT_ID||(r?.type==="api"?r.metadata?.accountId:void 0),s=o.CLOUDFLARE_GATEWAY_ID||(r?.type==="api"?r.metadata?.gatewayId:void 0);if(!a||!s){let S=[a?void 0:"CLOUDFLARE_ACCOUNT_ID",s?void 0:"CLOUDFLARE_GATEWAY_ID"].filter(f=>!!f);return{autoload:!1,async getModel(){throw new Error(`${S.join(" and ")} missing. Set with: ${S.map(f=>`export ${f}=<value>`).join(" && ")}`)}}}let i=o.CLOUDFLARE_API_TOKEN||o.CF_AIG_TOKEN||(r?.type==="api"?r.key:void 0);if(!i)throw new Error("CLOUDFLARE_API_TOKEN (or CF_AIG_TOKEN) is required for Cloudflare AI Gateway. Set it via environment variable or run `opencode auth cloudflare-ai-gateway`.");let{createAiGateway:c,parseAiGatewayOptions:l}=yield*F.promise(()=>import("ai-gateway-provider")),{createUnified:d}=yield*F.promise(()=>import("ai-gateway-provider/providers/unified")),{createOpenAI:p}=yield*F.promise(()=>import("ai-gateway-provider/providers/openai")),{createAnthropic:u}=yield*F.promise(()=>import("ai-gateway-provider/providers/anthropic")),{createOpenAICompatible:h}=yield*F.promise(()=>import("@ai-sdk/openai-compatible")),x={metadata:it(()=>{if(t.options?.metadata)return t.options.metadata;try{return JSON.parse(t.options?.headers?.["cf-aig-metadata"])}catch{return}}),cacheTtl:t.options?.cacheTtl,cacheKey:t.options?.cacheKey,skipCache:t.options?.skipCache,collectLog:t.options?.collectLog,headers:{"User-Agent":`opencode/${ce} cloudflare-ai-gateway (${Mt.platform()} ${Mt.release()}; ${Mt.arch()})`}};return{autoload:!0,async getModel(S,f,v){let E=vp(v??{},{providerID:"cloudflare-ai-gateway",api:{npm:"ai-gateway-provider"}}),m=c({binding:{run(w,k){let y=l(x);return y.set("Content-Type","application/json"),y.set("cf-aig-authorization",`Bearer ${i}`),E(`https://gateway.ai.cloudflare.com/v1/${a}/${s}`,{body:JSON.stringify(w),headers:y,method:"POST",signal:k?.signal})}}});return f.startsWith("openai/")?m(p()(f.slice(7))):f.startsWith("anthropic/")?m(u()(f.slice(10).replaceAll(".","-"))):f.startsWith("workers-ai/")||f.startsWith("@cf/")?m(d({apiKey:i})(f)):h({name:"cloudflare-ai-gateway",baseURL:`https://api.cloudflare.com/client/v4/accounts/${a}/ai/v1`,apiKey:i,headers:{"cf-aig-gateway-id":s},fetch:E})(f)},options:{}}}),cerebras:n(()=>F.succeed({autoload:!1,options:{headers:{"X-Cerebras-3rd-Party-Integration":"opencode"}}}),"cerebras"),kilo:n(()=>F.succeed({autoload:!1,options:{headers:{"HTTP-Referer":"https://opencode.ai/","X-Title":"opencode"}}}),"kilo"),"snowflake-cortex":F.fnUntraced(function*(t){let r=yield*e.env(),o=yield*e.auth(t.id),a=r.SNOWFLAKE_ACCOUNT??(o?.type==="api"?o.metadata?.account:void 0)??(o?.type==="oauth"?o.accountId:void 0)??t.options?.account,s=r.SNOWFLAKE_CORTEX_TOKEN??r.SNOWFLAKE_CORTEX_PAT,i=o?.type==="api"?o.key:void 0,c=o?.type==="oauth"?o.access:void 0,l=t.options?.token??t.options?.apiKey,d=s??i??c??l;if(!a||!d){let g=[!a&&"SNOWFLAKE_ACCOUNT",!d&&"SNOWFLAKE_CORTEX_TOKEN"].filter(Boolean).join(", ");return{autoload:!1,async getModel(){throw new Error(`Snowflake Cortex: missing credentials (${g}). Provide a bearer token (OAuth, JWT, or PAT) via env var, opencode auth, or provider options.`)}}}let u={baseURL:`https://${a}.snowflakecomputing.com/api/v2/cortex/v1`,apiKey:d};return c!==void 0&&s===void 0&&i===void 0&&l===void 0||(u.fetch=async(g,x)=>{if(x?.body&&typeof x.body=="string")try{let f=JSON.parse(x.body);"max_tokens"in f&&(f.max_completion_tokens=f.max_tokens,delete f.max_tokens,x={...x,body:JSON.stringify(f)})}catch{}let S=await fetch(g,x);if(!S.ok&&S.status===400)try{let f=await S.clone().json();if(String(f.message||f.error||"").toLowerCase().includes("conversation complete"))return new Response(JSON.stringify({choices:[{finish_reason:"stop",message:{content:"",role:"assistant"}}]}),{status:200,headers:new Headers({"content-type":"application/json"})})}catch{}if(S.body&&S.headers.get("content-type")?.includes("text/event-stream")){let f=S.body.getReader(),v=new TextEncoder,E=new TextDecoder,m=new ReadableStream({async pull(b){let{done:w,value:k}=await f.read();if(w){b.close();return}let y=E.decode(k,{stream:!0});b.enqueue(v.encode(y.replace(/"role"\s*:\s*""/g,'"role":"assistant"')))},cancel(){f.cancel()}});return new Response(m,{headers:S.headers,status:S.status})}return S}),{autoload:t.source==="config",options:u}})}}n(rx,"custom");var nx=D.Struct({id:D.String,url:D.String,npm:D.String}),xp=D.Struct({text:D.Boolean,audio:D.Boolean,image:D.Boolean,video:D.Boolean,pdf:D.Boolean}),ox=D.Union([D.Literals(["reasoning","reasoning_content","reasoning_text"]),D.String]),ix=D.Union([D.Boolean,D.Struct({field:ox})]),sx=D.Struct({temperature:D.Boolean,reasoning:D.Boolean,attachment:D.Boolean,toolcall:D.Boolean,input:xp,output:xp,interleaved:ix}),Fa=D.Struct({read:D.Finite,write:D.Finite}),ax=D.Struct({input:D.Finite,output:D.Finite,cache:Fa,tier:D.Struct({type:D.Literal("context"),size:D.Finite})}),cx=D.Struct({input:D.Finite,output:D.Finite,cache:Fa,tiers:be(D.Array(ax)),experimentalOver200K:be(D.Struct({input:D.Finite,output:D.Finite,cache:Fa}))}),lx=D.Struct({context:D.Finite,input:be(D.Finite),output:D.Finite}),Wa=D.Struct({id:$e.ID,providerID:Q.ID,api:nx,name:D.String,family:be(D.String),capabilities:sx,cost:cx,limit:lx,status:fp,options:D.Record(D.String,D.Any),headers:D.Record(D.String,D.String),release_date:D.String,variants:be(D.Record(D.String,D.Record(D.String,D.Any)))}).annotate({identifier:"Model"}),qa=D.Struct({id:Q.ID,name:D.String,source:D.Literals(["env","config","custom","api"]),env:D.Array(D.String),key:be(D.String),options:D.Record(D.String,D.Any),models:D.Record(D.String,Wa)}).annotate({identifier:"Provider"}),kp=D.Record(D.String,D.String),dx=D.Struct({all:D.Array(qa),default:kp,connected:D.Array(D.String)}),px=D.Struct({providers:D.Array(qa),default:kp});function Yn(e){return JSON.parse(JSON.stringify({...e,models:Object.fromEntries(Object.entries(e.models).filter(([,t])=>D.is(Wa)(t)))},(t,r)=>{if(!(typeof r=="function"||typeof r=="symbol"||r===void 0))return typeof r=="bigint"?r.toString():r}))}n(Yn,"toPublicInfo");function ux(e){return xr(e,t=>Ba(Object.values(t.models))[0].id)}n(ux,"defaultModelIDs");var rn=class e extends D.TaggedErrorClass()("ProviderModelNotFoundError",{providerID:Q.ID,modelID:$e.ID,suggestions:D.optional(D.Array(D.String)),cause:D.optional(D.Defect())}){static{n(this,"ModelNotFoundError")}get message(){let t=this.suggestions?.length?` Did you mean: ${this.suggestions.join(", ")}?`:"";return`Model not found: ${this.providerID}/${this.modelID}.${t}`}static isInstance(t){return t instanceof e}},pi=class e extends D.TaggedErrorClass()("ProviderInitError",{providerID:Q.ID,cause:D.optional(D.Defect())}){static{n(this,"InitError")}get message(){return`Failed to initialize provider: ${this.providerID}`}static isInstance(t){return t instanceof e}},ui=class e extends D.TaggedErrorClass()("ProviderNoProvidersError",{}){static{n(this,"NoProvidersError")}get message(){return"No providers are available"}static isInstance(t){return t instanceof e}},fi=class e extends D.TaggedErrorClass()("ProviderNoModelsError",{providerID:Q.ID}){static{n(this,"NoModelsError")}get message(){return`No models are available for provider: ${this.providerID}`}static isInstance(t){return t instanceof e}},br=class extends Jg.Service()("@opencode/Provider"){static{n(this,"Service")}},fx=Wo(br);function Tp(e){let t={input:e?.input??0,output:e?.output??0,cache:{read:e?.cache_read??0,write:e?.cache_write??0}};return e?.tiers&&(t.tiers=e.tiers.map(r=>({input:r.input,output:r.output,cache:{read:r.cache_read??0,write:r.cache_write??0},tier:r.tier}))),e?.context_over_200k&&(t.experimentalOver200K={cache:{read:e.context_over_200k.cache_read??0,write:e.context_over_200k.cache_write??0},input:e.context_over_200k.input,output:e.context_over_200k.output}),t}n(Tp,"cost");function Ip(e,t){if(e==="cloudflare-ai-gateway"){if(t.startsWith("openai/"))return"@ai-sdk/openai";if(t.startsWith("anthropic/"))return"@ai-sdk/anthropic"}}n(Ip,"cloudflareGatewayNpm");function bp(e,t){let r={id:$e.ID.make(t.id),providerID:Q.ID.make(e.id),name:t.name,family:t.family,api:{id:t.id,url:t.provider?.api??e.api??"",npm:Ip(e.id,t.id)??t.provider?.npm??e.npm??"@ai-sdk/openai-compatible"},status:t.status??"active",headers:{},options:{},cost:Tp(t.cost),limit:{context:t.limit.context,input:t.limit.input,output:t.limit.output},capabilities:{temperature:t.temperature??!1,reasoning:t.reasoning??!1,attachment:t.attachment??!1,toolcall:t.tool_call??!0,input:{text:t.modalities?.input?.includes("text")??!1,audio:t.modalities?.input?.includes("audio")??!1,image:t.modalities?.input?.includes("image")??!1,video:t.modalities?.input?.includes("video")??!1,pdf:t.modalities?.input?.includes("pdf")??!1},output:{text:t.modalities?.output?.includes("text")??!1,audio:t.modalities?.output?.includes("audio")??!1,image:t.modalities?.output?.includes("image")??!1,video:t.modalities?.output?.includes("video")??!1,pdf:t.modalities?.output?.includes("pdf")??!1},interleaved:typeof t.interleaved=="string"?{field:t.interleaved}:t.interleaved??!1},release_date:t.release_date??"",variants:{}},o=yt.reasoningVariants(t,r)??yt.variants(r);return{...r,variants:xr(o,a=>a)}}n(bp,"fromModelsDevModel");function Op(e){let t={};for(let[r,o]of Object.entries(e.models)){t[r]=bp(e,o);for(let[a,s]of Object.entries(o.experimental?.modes??{})){let i=`${o.id}-${a}`,c=bp(e,o);t[i]={...c,id:$e.ID.make(i),name:`${o.name} ${a[0].toUpperCase()}${a.slice(1)}`,cost:s.cost?Jt(c.cost,Tp(s.cost)):c.cost,options:mx(c,s.provider?.body),headers:s.provider?.headers??c.headers}}}return{id:Q.ID.make(e.id),source:"custom",name:e.name,env:[...e.env??[]],options:{},models:t}}n(Op,"fromModelsDevProvider");function mx(e,t){if(!t)return e.options;let r=Object.fromEntries(Object.entries(t).map(([i,c])=>[i.replace(/_([a-z])/g,(l,d)=>d.toUpperCase()),c])),o=t.reasoning;if(e.api.npm!=="@ai-sdk/openai"||!Rt(o)||typeof o.mode!="string")return r;let{reasoning:a,...s}=r;return{...s,reasoningMode:o.mode}}n(mx,"modeOptions");function ja(e,t,r){let o=e?Object.keys(e.models).filter(i=>{let c=e.models[i];return!(c.status==="deprecated"||c.status==="alpha"&&!r)}):[],a=Ep.go(t,o,{limit:3,threshold:-1e4}).map(i=>i.target);if(a.length)return a;let s=t.toLowerCase().split(/[^a-z0-9]+/).filter(i=>i.length>1);return za(o.map(i=>({id:i,score:s.filter(c=>i.toLowerCase().includes(c)).length})).filter(i=>i.score>0),[i=>i.score,"desc"],[i=>i.id,"asc"]).slice(0,3).map(i=>i.id)}n(ja,"modelSuggestions");var yx=Kg.effect(br,F.gen(function*(){let e=yield*N.Service,t=yield*ft.Service,r=yield*Yr.Service,o=yield*xs.Service,a=yield*Ct.Service,s=yield*gs.Service,i=yield*Qr.Service,c=yield*Ee.make(()=>F.gen(function*(){let f=yield*Xo.make(),v=yield*t.get(),E=yield*s.get(),m=xr(E,Op),b=xr(m,Yn),w={},k=new Map,y={},T={},O=new Map,L={},I={auth:n(W=>r.get(W).pipe(F.orDie),"auth"),config:n(()=>t.get(),"config"),env:n(()=>o.all(),"env"),get:n(W=>o.get(W),"get")};function _(W,$){let q=w[W];if(q){w[W]=Jt(q,$);return}let ne=b[W];ne&&(w[W]=Jt(ne,$))}n(_,"mergeProvider");let z=yield*a.list(),C=Object.entries(v.provider??{}),R=new Set(v.disabled_providers??[]),ae=v.enabled_providers?new Set(v.enabled_providers):null;function dt(W){return!(ae&&!ae.has(W)||R.has(W))}n(dt,"isProviderAllowed");for(let W of z){let $=W.provider,q=$?.models;if(!$||!q)continue;let ne=Q.ID.make($.id);if(R.has(ne))continue;let H=b[ne];if(!H)continue;let P=yield*r.get(ne).pipe(F.orDie);H.models=yield*F.promise(async()=>{let B=await q(Yn(H),{auth:P});return Object.fromEntries(Object.entries(B).map(([Ve,nt])=>[Ve,{...nt,id:$e.ID.make(Ve),providerID:ne}]))})}for(let[W,$]of C){let q=b[W],ne={id:Q.ID.make(W),name:$.name??q?.name??W,env:$.env??q?.env??[],options:Jt(q?.options??{},$.options??{}),source:"config",models:q?.models??{}};for(let[H,P]of Object.entries($.models??{})){let B=ne.models[P.id??H],Ve=P.id??B?.api.id??H,nt=P.provider?.npm??$.npm??B?.api.npm??Ip(W,Ve)??E[W]?.npm??"@ai-sdk/openai-compatible",de=it(()=>P.name?P.name:P.id&&P.id!==H?H:B?.name??H),Pe={id:$e.ID.make(H),api:{id:Ve,npm:nt,url:P.provider?.api??$?.api??B?.api.url??E[W]?.api??""},status:P.status??B?.status??"active",name:de,providerID:Q.ID.make(W),capabilities:{temperature:P.temperature??B?.capabilities.temperature??!1,reasoning:P.reasoning??B?.capabilities.reasoning??!1,attachment:P.attachment??B?.capabilities.attachment??!1,toolcall:P.tool_call??B?.capabilities.toolcall??!0,input:{text:P.modalities?.input?.includes("text")??B?.capabilities.input.text??!0,audio:P.modalities?.input?.includes("audio")??B?.capabilities.input.audio??!1,image:P.modalities?.input?.includes("image")??B?.capabilities.input.image??!1,video:P.modalities?.input?.includes("video")??B?.capabilities.input.video??!1,pdf:P.modalities?.input?.includes("pdf")??B?.capabilities.input.pdf??!1},output:{text:P.modalities?.output?.includes("text")??B?.capabilities.output.text??!0,audio:P.modalities?.output?.includes("audio")??B?.capabilities.output.audio??!1,image:P.modalities?.output?.includes("image")??B?.capabilities.output.image??!1,video:P.modalities?.output?.includes("video")??B?.capabilities.output.video??!1,pdf:P.modalities?.output?.includes("pdf")??B?.capabilities.output.pdf??!1},interleaved:(typeof P.interleaved=="string"?{field:P.interleaved}:P.interleaved)??B?.capabilities.interleaved??(!B&&nt==="@ai-sdk/openai-compatible"&&Ve.includes("deepseek")?{field:"reasoning_content"}:!1)},cost:{input:P?.cost?.input??B?.cost?.input??0,output:P?.cost?.output??B?.cost?.output??0,cache:{read:P?.cost?.cache_read??B?.cost?.cache.read??0,write:P?.cost?.cache_write??B?.cost?.cache.write??0}},options:Jt(B?.options??{},P.options??{}),limit:{context:P.limit?.context??B?.limit?.context??0,input:P.limit?.input??B?.limit?.input,output:P.limit?.output??B?.limit?.output??0},headers:Jt(B?.headers??{},P.headers??{}),family:P.family??B?.family??"",release_date:P.release_date??B?.release_date??"",variants:{}},Rn=B?.api.npm===Pe.api.npm?B.variants??yt.variants(Pe):yt.variants(Pe),sr=Jt(Rn,P.variants??{});Pe.variants=xr(hp(sr,_n=>!_n.disabled),_n=>yp(_n,["disabled"])),ne.models[H]=Pe}b[W]=ne}let Ze=yield*o.all();for(let[W,$]of Object.entries(b)){let q=Q.ID.make(W);if(R.has(q))continue;let ne=$.env.map(H=>Ze[H]).find(Boolean);ne&&_(q,{source:"env",key:$.env.length===1?ne:void 0})}let $r=yield*r.all().pipe(F.orDie);for(let[W,$]of Object.entries($r)){let q=Q.ID.make(W);R.has(q)||$.type==="api"&&_(q,{source:"api",key:$.key})}for(let W of z){if(!W.auth)continue;let $=Q.ID.make(W.auth.provider);if(R.has($)||!(yield*r.get($).pipe(F.orDie))||!W.auth.loader)continue;let H=(yield*F.promise(()=>W.auth.loader(()=>f.promise(r.get($).pipe(F.orDie)),Yn(b[W.auth.provider]))))??{},P=w[$]?{options:H}:{source:"custom",options:H};_($,P)}for(let[W,$]of Object.entries(rx(I))){let q=Q.ID.make(W);if(R.has(q))continue;let ne=b[q];if(!ne)continue;let H=yield*$(ne);if(H&&(H.autoload||w[q])){H.getModel&&(y[q]=H.getModel),H.vars&&(T[q]=H.vars),H.discoverModels&&(L[q]=H.discoverModels);let P=H.options??{},B=w[q]?{options:P}:{source:"custom",options:P};_(q,B)}}for(let[W,$]of C){let q=Q.ID.make(W),ne={source:"config"};$.env&&(ne.env=$.env),$.name&&(ne.name=$.name),$.options&&(ne.options=$.options),_(q,ne)}let rt=Q.ID.make("gitlab");L[rt]&&w[rt]&&dt(rt)&&(yield*F.promise(async()=>{try{let W=await L[rt]();for(let[$,q]of Object.entries(W))w[rt].models[$]||(w[rt].models[$]=q)}catch{}}));for(let[W,$]of Object.entries(w)){let q=Q.ID.make(W);if(!dt(q)){delete w[q];continue}let ne=v.provider?.[q];for(let[H,P]of Object.entries($.models)){P.api.id=P.api.id??P.id??H,(H==="gpt-5-chat-latest"&&(q===Q.ID.openai||q===Q.ID.githubCopilot||q===Q.ID.openrouter)||q===Q.ID.openrouter&&H==="openai/gpt-5-chat")&&delete $.models[H],P.status==="alpha"&&!i.enableExperimentalModels&&delete $.models[H],P.status==="deprecated"&&delete $.models[H],(ne?.blacklist&&ne.blacklist.includes(H)||ne?.whitelist&&!ne.whitelist.includes(H))&&delete $.models[H],P.variants===void 0&&(P.variants=xr(yt.variants(P),Ve=>Ve));let B=ne?.models?.[H]?.variants;if(B&&P.variants){let Ve=Jt(P.variants,B);P.variants=xr(hp(Ve,nt=>!nt.disabled),nt=>yp(nt,["disabled"]))}}if(Object.keys($.models).length===0){delete w[q];continue}}return{models:k,providers:w,catalog:m,sdk:O,modelLoaders:y,varsLoaders:T}})),l=F.fn("Provider.list")(()=>Ee.use(c,f=>f.providers));async function d(f,v,E){try{let m=v.providers[f.providerID],b={...m.options};if(f.providerID==="google-vertex"&&f.api.npm==="@ai-sdk/google-vertex/anthropic"&&!b.baseURL){let C=wp(typeof b.project=="string"?b.project:void 0,typeof b.location=="string"?b.location:void 0);C&&(b.baseURL=C)}f.providerID==="google-vertex"&&!f.api.npm.includes("@ai-sdk/openai-compatible")&&delete b.fetch,f.api.npm.includes("@ai-sdk/openai-compatible")&&b.includeUsage!==!1&&(b.includeUsage=!0);let w=it(()=>{let C=typeof b.baseURL=="string"&&b.baseURL!==""?b.baseURL:f.api.url;if(!C)return;let R=v.varsLoaders[f.providerID];if(R){let ae=R(b);for(let[dt,Ze]of Object.entries(ae)){let $r="${"+dt+"}";C=C.replaceAll($r,Ze)}}return C=C.replace(/\$\{([^}]+)\}/g,(ae,dt)=>E[String(dt)]??ae),C});w!==void 0&&(b.baseURL=w),b.apiKey===void 0&&m.key&&(b.apiKey=m.key),f.headers&&(b.headers={...b.headers,...f.headers});let k=el.fast(JSON.stringify({providerID:f.providerID,npm:f.api.npm,options:b})),y=v.sdk.get(k);if(y)return y;b.fetch=vp(b,f),delete b.chunkTimeout,delete b.headerTimeout;let T=ex[f.api.npm];if(T){let R=(await T())({name:f.providerID,...b});return v.sdk.set(k,R),R}let O=await(async()=>{if(f.api.npm.startsWith("file://"))return f.api.npm;let C=await El.add(f.api.npm);if(!C.entrypoint)throw new Error(`Package ${f.api.npm} has no import entrypoint`);return C.entrypoint})(),I=await import(O.startsWith("file://")?O:Gg(O).href),_=I[Object.keys(I).find(C=>C.startsWith("create"))],z=_({name:f.providerID,...b});return v.sdk.set(k,z),z}catch(m){throw new pi({providerID:f.providerID,cause:m})}}n(d,"resolveSDK");let p=F.fn("Provider.getProvider")(f=>Ee.use(c,v=>v.providers[f])),u=F.fn("Provider.getModel")(function*(f,v){let E=yield*Ee.get(c),m=E.providers[f];if(!m){let w=E.catalog[f],k=w?ja(w,v,i.enableExperimentalModels):Ep.go(f,Object.keys({...E.catalog,...E.providers}),{limit:3,threshold:-1e4}).map(y=>y.target);return yield*new rn({providerID:f,modelID:v,suggestions:k})}let b=m.models[v];if(!b){let w=ja(m,v,i.enableExperimentalModels),k=w.length?w:ja(E.catalog[f],v,i.enableExperimentalModels);return yield*new rn({providerID:f,modelID:v,suggestions:k})}return b}),h=F.fn("Provider.getLanguage")(function*(f){let v=yield*Ee.get(c),E=yield*o.all(),m=`${f.providerID}/${f.id}`;if(v.models.has(m))return v.models.get(m);let b=v.providers[f.providerID];return yield*Gn.refineRejection(async()=>{let w=await d(f,v,E),k=v.modelLoaders[f.providerID]?await v.modelLoaders[f.providerID](w,f.api.id,{...b.options,...f.options},f):w.languageModel(f.api.id);return v.models.set(m,k),k},w=>w instanceof Vg?new rn({modelID:f.id,providerID:f.providerID,cause:w}):void 0)}),g=F.fn("Provider.closest")(function*(f,v){let m=(yield*Ee.get(c)).providers[f];if(m){for(let b of v)for(let w of Object.keys(m.models))if(w.includes(b))return{providerID:f,modelID:w}}}),x=F.fn("Provider.getSmallModel")(function*(f){let v=yield*t.get();if(v.small_model){let y=$a(v.small_model);return yield*u(y.providerID,y.modelID).pipe(F.catchTag("ProviderModelNotFoundError",()=>F.succeed(void 0)))}let m=(yield*Ee.get(c)).providers[f];if(!m)return;let b=yield*a.trigger("experimental.provider.small_model",{provider:Yn(m)},{model:void 0});if(b.model)return{...b.model,id:$e.ID.make(b.model.id),providerID:Q.ID.make(b.model.providerID)};if(f===Q.ID.azure||f===Q.ID.make("azure-cognitive-services"))return;let w=f.startsWith("opencode")?["gpt-nano"]:f.startsWith("github-copilot")?["gpt-mini",...Sp]:Sp,k=za(Object.values(m.models),[y=>y.release_date,"desc"],[y=>y.id,"desc"]);for(let y of w){let T=k.filter(O=>O.family===y);if(f===Q.ID.amazonBedrock){let O=["global.","us.","eu."],L=T.find(z=>z.id.startsWith("global."));if(L)return L;let I=m.options?.region;if(I){let z=I.split("-")[0];if(z==="us"||z==="eu"){let C=T.find(R=>R.id.startsWith(`${z}.`));if(C)return C}}let _=T.find(z=>!O.some(C=>z.id.startsWith(C)));if(_)return _;continue}if(T[0])return T[0]}}),S=F.fn("Provider.defaultModel")(function*(){let f=yield*t.get();if(f.model)return $a(f.model);let v=yield*Ee.get(c),E=yield*e.readJson(Hg.join(he.Path.state,"model.json")).pipe(F.map(k=>!Rt(k)||!Array.isArray(k.recent)?[]:k.recent.flatMap(y=>Rt(y)?typeof y.providerID!="string"?[]:typeof y.modelID!="string"?[]:[{providerID:Q.ID.make(y.providerID),modelID:$e.ID.make(y.modelID)}]:[])),F.catch(()=>F.succeed([])));for(let k of E){let y=v.providers[k.providerID];if(y&&y.models[k.modelID])return{providerID:k.providerID,modelID:k.modelID}}let m=Object.keys(f.provider??{}),b=Object.values(v.providers).find(k=>m.length===0||m.includes(k.id));if(!b)return yield*new ui;let[w]=Ba(Object.values(b.models));return w?{providerID:b.id,modelID:w.id}:yield*new fi({providerID:b.id})});return br.of({list:l,getProvider:p,getModel:u,getLanguage:h,closest:g,getSmallModel:x,defaultModel:S})})),hx=["gpt-5","claude-sonnet-4","big-pickle","gemini-3-pro"],Sp=["gemini-flash","gpt-nano","claude-haiku"];function Ba(e){return za(e,[t=>hx.findIndex(r=>t.id.includes(r)),"desc"],[t=>t.id.includes("latest")?0:1,"asc"],[t=>t.id,"desc"])}n(Ba,"sort");function $a(e){let[t,...r]=e.split("/");return{providerID:Q.ID.make(t),modelID:$e.ID.make(r.join("/"))}}n($a,"parseModel");var gx=He.make({service:br,layer:yx,deps:[N.node,ft.node,Yr.node,xs.node,Ct.node,gs.node,Qr.node]});import{generateObject as Ww,streamObject as qw}from"ai";var Dp=`You are an elite AI agent architect specializing in crafting high-performance agent configurations. Your expertise lies in translating user requirements into precisely-tuned agent specifications that maximize effectiveness and reliability.
45
-
46
- **Important Context**: You may have access to project-specific instructions from CLAUDE.md files and other context that may include coding standards, project structure, and custom requirements. Consider this context when creating agents to ensure they align with the project's established patterns and practices.
47
-
48
- When a user describes what they want an agent to do, you will:
49
-
50
- 1. **Extract Core Intent**: Identify the fundamental purpose, key responsibilities, and success criteria for the agent. Look for both explicit requirements and implicit needs. Consider any project-specific context from CLAUDE.md files. For agents that are meant to review code, you should assume that the user is asking to review recently written code and not the whole codebase, unless the user has explicitly instructed you otherwise.
51
-
52
- 2. **Design Expert Persona**: Create a compelling expert identity that embodies deep domain knowledge relevant to the task. The persona should inspire confidence and guide the agent's decision-making approach.
53
-
54
- 3. **Architect Comprehensive Instructions**: Develop a system prompt that:
55
-
56
- - Establishes clear behavioral boundaries and operational parameters
57
- - Provides specific methodologies and best practices for task execution
58
- - Anticipates edge cases and provides guidance for handling them
59
- - Incorporates any specific requirements or preferences mentioned by the user
60
- - Defines output format expectations when relevant
61
- - Aligns with project-specific coding standards and patterns from CLAUDE.md
62
-
63
- 4. **Optimize for Performance**: Include:
64
-
65
- - Decision-making frameworks appropriate to the domain
66
- - Quality control mechanisms and self-verification steps
67
- - Efficient workflow patterns
68
- - Clear escalation or fallback strategies
69
-
70
- 5. **Create Identifier**: Design a concise, descriptive identifier that:
71
- - Uses lowercase letters, numbers, and hyphens only
72
- - Is typically 2-4 words joined by hyphens
73
- - Clearly indicates the agent's primary function
74
- - Is memorable and easy to type
75
- - Avoids generic terms like "helper" or "assistant"
76
-
77
- 6 **Example agent descriptions**:
78
-
79
- - in the 'whenToUse' field of the JSON object, you should include examples of when this agent should be used.
80
- - examples should be of the form:
81
- - <example>
82
- Context: The user is creating a code-review agent that should be called after a logical chunk of code is written.
83
- user: "Please write a function that checks if a number is prime"
84
- assistant: "Here is the relevant function: "
85
- <function call omitted for brevity only for this example>
86
- <commentary>
87
- Since the user is greeting, use the Task tool to launch the greeting-responder agent to respond with a friendly joke.
88
- </commentary>
89
- assistant: "Now let me use the code-reviewer agent to review the code"
90
- </example>
91
- - <example>
92
- Context: User is creating an agent to respond to the word "hello" with a friendly jok.
93
- user: "Hello"
94
- assistant: "I'm going to use the Task tool to launch the greeting-responder agent to respond with a friendly joke"
95
- <commentary>
96
- Since the user is greeting, use the greeting-responder agent to respond with a friendly joke.
97
- </commentary>
98
- </example>
99
- - If the user mentioned or implied that the agent should be used proactively, you should include examples of this.
100
- - NOTE: Ensure that in the examples, you are making the assistant use the Agent tool and not simply respond directly to the task.
101
-
102
- Your output must be a valid JSON object with exactly these fields:
103
- {
104
- "identifier": "A unique, descriptive identifier using lowercase letters, numbers, and hyphens (e.g., 'code-reviewer', 'api-docs-writer', 'test-generator')",
105
- "whenToUse": "A precise, actionable description starting with 'Use this agent when...' that clearly defines the triggering conditions and use cases. Ensure you include examples as described above.",
106
- "systemPrompt": "The complete system prompt that will govern the agent's behavior, written in second person ('You are...', 'You will...') and structured for maximum clarity and effectiveness"
107
- }
108
-
109
- Key principles for your system prompts:
110
-
111
- - Be specific rather than generic - avoid vague instructions
112
- - Include concrete examples when they would clarify behavior
113
- - Balance comprehensiveness with clarity - every instruction should add value
114
- - Ensure the agent has enough context to handle variations of the core task
115
- - Make the agent proactive in seeking clarification when needed
116
- - Build in quality assurance and self-correction mechanisms
117
-
118
- Remember: The agents you create should be autonomous experts capable of handling their designated tasks with minimal additional guidance. Your system prompts are their complete operational manual.
119
- `;var Rp=`You are a context summarization agent. You are given a conversation between a user and an agent. Your goal is to produce a structured summary matching the format specified so another coding agent can continue the work.
120
-
121
- Always follow the exact output structure requested by the user prompt. Keep every section, preserve exact file paths and identifiers when known, and prefer terse bullets over paragraphs.
122
-
123
- Do not continue the conversation. Do not respond to any questions in the conversation. Only output the structured summary in the exact format requested by the user prompt. Respond in the same language as the conversation.
124
- `;var _p=`You are a file search specialist. You excel at thoroughly navigating and exploring codebases.
125
-
126
- Your strengths:
127
- - Rapidly finding files using glob patterns
128
- - Searching code and text with powerful regex patterns
129
- - Reading and analyzing file contents
130
-
131
- Guidelines:
132
- - Use Glob for broad file pattern matching
133
- - Use Grep for searching file contents with regex
134
- - Use Read when you know the specific file path you need to read
135
- - Use Bash for file operations like copying, moving, or listing directory contents
136
- - Adapt your search approach based on the thoroughness level specified by the caller
137
- - Return file paths as absolute paths in your final response
138
- - For clear communication, avoid using emojis
139
- - Do not create any files, or run bash commands that modify the user's system state in any way
140
-
141
- Complete the user's search request efficiently and report your findings clearly.
142
- `;var Ap=`Summarize what was done in this conversation. Write like a pull request description.
143
-
144
- Rules:
145
- - 2-3 sentences max
146
- - Describe the changes made, not the process
147
- - Do not mention running tests, builds, or other validation steps
148
- - Do not explain what the user asked for
149
- - Write in first person (I added..., I fixed...)
150
- - Never ask questions or add new questions
151
- - If the conversation ends with an unanswered question to the user, preserve that exact question
152
- - If the conversation ends with an imperative statement or request to the user (e.g. "Now please run the command and paste the console output"), always include that exact request in the summary
153
- `;var Pp=`You are a title generator. You output ONLY a thread title. Nothing else.
154
-
155
- <task>
156
- Generate a brief title that would help the user find this conversation later.
157
-
158
- Follow all rules in <rules>
159
- Use the <examples> so you know what a good title looks like.
160
- Your output must be:
161
- - A single line
162
- - \u226450 characters
163
- - No explanations
164
- </task>
165
-
166
- <rules>
167
- - you MUST use the same language as the user message you are summarizing
168
- - Title must be grammatically correct and read naturally - no word salad
169
- - Never include tool names in the title (e.g. "read tool", "bash tool", "edit tool")
170
- - Focus on the main topic or question the user needs to retrieve
171
- - Vary your phrasing - avoid repetitive patterns like always starting with "Analyzing"
172
- - When a file is mentioned, focus on WHAT the user wants to do WITH the file, not just that they shared it
173
- - Keep exact: technical terms, numbers, filenames, HTTP codes
174
- - Remove: the, this, my, a, an
175
- - Never assume tech stack
176
- - Never use tools
177
- - NEVER respond to questions, just generate a title for the conversation
178
- - The title should NEVER include "summarizing" or "generating" when generating a title
179
- - DO NOT SAY YOU CANNOT GENERATE A TITLE OR COMPLAIN ABOUT THE INPUT
180
- - Always output something meaningful, even if the input is minimal.
181
- - If the user message is short or conversational (e.g. "hello", "lol", "what's up", "hey"):
182
- \u2192 create a title that reflects the user's tone or intent (such as Greeting, Quick check-in, Light chat, Intro message, etc.)
183
- </rules>
184
-
185
- <examples>
186
- "debug 500 errors in production" \u2192 Debugging production 500 errors
187
- "refactor user service" \u2192 Refactoring user service
188
- "why is app.js failing" \u2192 app.js failure investigation
189
- "implement rate limiting" \u2192 Rate limiting implementation
190
- "how do I connect postgres to my API" \u2192 Postgres API connection
191
- "best practices for React hooks" \u2192 React hooks best practices
192
- "@src/auth.ts can you add refresh token support" \u2192 Auth refresh token support
193
- "@utils/parser.ts this is broken" \u2192 Parser bug fix
194
- "look at @config.json" \u2192 Config review
195
- "@App.tsx add dark mode toggle" \u2192 Dark mode toggle in App
196
- </examples>
197
- `;import{mergeDeep as Bw,pipe as Vw,sortBy as Hw,values as Gw}from"remeda";import ir from"path";import{Effect as Ne,Context as Kw,Layer as Jw,Schema as re}from"effect";import*as Tm from"effect/Option";import*as Im from"@effect/opentelemetry/Tracer";import{Effect as jw,Layer as is,LayerMap as Fw}from"effect";var qe={};U(qe,{FileMutation:()=>qe,Service:()=>nn,StaleContentError:()=>yi,TargetExistsError:()=>hi,locationLayer:()=>kx,node:()=>Tx});import{Context as xx,Effect as Oe,Layer as bx,Schema as mi}from"effect";import{dirname as Sx}from"path";var yi=class extends mi.TaggedErrorClass()("FileMutation.StaleContentError",{path:mi.String}){static{n(this,"StaleContentError")}},hi=class extends mi.TaggedErrorClass()("FileMutation.TargetExistsError",{path:mi.String}){static{n(this,"TargetExistsError")}},nn=class extends xx.Service()("@opencode/v2/FileMutation"){static{n(this,"Service")}},Cp=bx.effect(nn,Oe.gen(function*(){let e=yield*N.Service,t=cl.makeUnsafe(),r=n(p=>u=>t.withLock(p.canonical)(Oe.uninterruptible(u)),"withTargetLock"),o=n((p,u)=>({operation:"write",target:p.canonical,resource:p.resource,existed:u}),"writeResult"),a=n((p,u)=>({operation:"remove",target:p.canonical,resource:p.resource,existed:u}),"removeResult"),s=Oe.fn("FileMutation.write")(p=>r(p.target)(Oe.gen(function*(){let u=yield*e.exists(p.target.canonical);return yield*e.writeWithDirs(p.target.canonical,p.content),o(p.target,u)}))),i=Oe.fn("FileMutation.writeTextPreservingBom")(p=>r(p.target)(Oe.gen(function*(){let u=Mp(p.content),h=yield*e.readFile(p.target.canonical).pipe(Oe.catchReason("PlatformError","NotFound",()=>Oe.succeed(void 0)));return yield*e.writeWithDirs(p.target.canonical,Ex(u.text,!!(h&&vx(h))||u.bom)),o(p.target,h!==void 0)}))),c=Oe.fn("FileMutation.create")(p=>r(p.target)(Oe.gen(function*(){let u=typeof p.content=="string"?e.writeFileString(p.target.canonical,p.content,{flag:"wx"}):e.writeFile(p.target.canonical,p.content,{flag:"wx"});return yield*u.pipe(Oe.catchReason("PlatformError","NotFound",()=>e.ensureDir(Sx(p.target.canonical)).pipe(Oe.andThen(u))),Oe.catchReason("PlatformError","AlreadyExists",()=>Oe.fail(new hi({path:p.target.canonical})))),o(p.target,!1)}))),l=Oe.fn("FileMutation.writeIfUnchanged")(p=>r(p.target)(Oe.gen(function*(){let u=yield*e.readFile(p.target.canonical);return wx(u,p.expected)?(yield*typeof p.content=="string"?e.writeFileString(p.target.canonical,p.content):e.writeFile(p.target.canonical,p.content),o(p.target,!0)):yield*new yi({path:p.target.canonical})}))),d=Oe.fn("FileMutation.remove")(p=>r(p.target)(Oe.gen(function*(){let u=yield*e.remove(p.target.canonical).pipe(Oe.as(!0),Oe.catchReason("PlatformError","NotFound",()=>Oe.succeed(!1)));return a(p.target,u)})));return nn.of({create:c,write:s,writeTextPreservingBom:i,writeIfUnchanged:l,remove:d})}));function Mp(e){let t=e.replace(/^\uFEFF+/,"");return{bom:t.length!==e.length,text:t}}n(Mp,"splitBom");function Ex(e,t){let r=Mp(e).text;return t?`\uFEFF${r}`:r}n(Ex,"joinBom");function vx(e){return e[0]===239&&e[1]===187&&e[2]===191}n(vx,"hasUtf8Bom");function wx(e,t){return e.length!==t.length?!1:e.every((r,o)=>r===t[o])}n(wx,"sameBytes");var kx=Cp,Tx=A({service:nn,layer:Cp,deps:[N.node]});var to={};U(to,{Event:()=>xi,Service:()=>vt,Watcher:()=>to,hasNativeBinding:()=>$x,node:()=>Wx});import{createWrapper as Mx}from"@parcel/watcher/wrapper.js";import{Cause as zp,Context as Lx,Effect as ke,Layer as Ux}from"effect";var Qn={};U(Qn,{Event:()=>Ix,FileSystemWatcher:()=>Qn});import{Schema as Lp}from"effect";var Up=Fe({type:"file.watcher.updated",schema:{file:Lp.String,event:Lp.Literals(["add","change","unlink"])}}),Ix={Updated:Up,Definitions:xt(Up)};import Wp from"path";function gi(e){let t,r=!1;return()=>(r||(r=!0,t=e()),t)}n(gi,"lazy");var Zn={};U(Zn,{Ignore:()=>Zn,PATTERNS:()=>Ox,match:()=>Dx});var Np=new Set(["node_modules","bower_components",".pnpm-store","vendor",".npm","dist","build","out",".next","target","bin","obj",".git",".svn",".hg",".vscode",".idea",".turbo",".output","desktop",".sst",".cache",".webkit-cache","__pycache__",".pytest_cache","mypy_cache",".history",".gradle"]),jp=["**/*.swp","**/*.swo","**/*.pyc","**/.DS_Store","**/Thumbs.db","**/logs/**","**/tmp/**","**/temp/**","**/*.log","**/coverage/**","**/.nyc_output/**"],Ox=[...jp,...Np];function Dx(e,t){for(let o of t?.whitelist||[])if(ps.match(o,e))return!1;let r=e.split(/[/\\]/);for(let o of r)if(Np.has(o))return!0;for(let o of[...jp,...t?.extra||[]])if(ps.match(o,e))return!0;return!1}n(Dx,"match");var eo={};U(eo,{Protected:()=>eo,names:()=>Px,paths:()=>Cx});import Rx from"os";import Va from"path";var Ha=Rx.homedir(),Fp=["Music","Pictures","Movies","Downloads","Desktop","Documents","Public","Applications","Library"],_x=["Application Support/AddressBook","Calendars","Mail","Messages","Safari","Cookies","Application Support/com.apple.TCC","PersonalizationPortrait","Metadata/CoreSpotlight","Suggestions"],Ax=["/.DocumentRevisions-V100","/.Spotlight-V100","/.Trashes","/.fseventsd"],$p=["AppData","Downloads","Desktop","Documents","Pictures","Music","Videos","OneDrive"];function Px(){return process.platform==="darwin"?new Set(Fp):process.platform==="win32"?new Set($p):new Set}n(Px,"names");function Cx(){return process.platform==="darwin"?[...Fp.map(e=>Va.join(Ha,e)),..._x.map(e=>Va.join(Ha,"Library",e)),...Ax]:process.platform==="win32"?$p.map(e=>Va.join(Ha,e)):[]}n(Cx,"paths");var Nx=1e4,xi=Qn.Event,qp=gi(()=>{try{let e=typeof OPENCODE_LIBC>"u"?void 0:OPENCODE_LIBC,t=Xc(`@parcel/watcher-${process.platform}-${process.arch}${process.platform==="linux"?`-${e||"glibc"}`:""}`);return Mx(t)}catch{return}});function jx(){if(process.platform==="win32")return"windows";if(process.platform==="darwin")return"fs-events";if(process.platform==="linux")return"inotify"}n(jx,"getBackend");function Fx(e){return eo.paths().filter(t=>{let r=Wp.relative(e,t);return r!==""&&!r.startsWith("..")&&!Wp.isAbsolute(r)})}n(Fx,"protecteds");var $x=n(()=>!!qp(),"hasNativeBinding"),vt=class extends Lx.Service()("@opencode/v2/FileWatcher"){static{n(this,"Service")}},zx=Ux.effect(vt,ke.gen(function*(){if(yield*pt.OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER)return vt.of({});let e=jx(),t=yield*Z.Service;if(!e)return yield*ke.logError("watcher backend not supported",{directory:t.directory,platform:process.platform}),vt.of({});let r=qp();if(!r)return vt.of({});yield*ke.logInfo("watcher backend",{directory:t.directory,platform:process.platform,backend:e});let o=yield*Se.Service,a=yield*N.Service,s=yield*Gr.Service,i=yield*ke.context(),c=ke.runForkWith(i),l=[];yield*ke.addFinalizer(()=>ke.promise(()=>Promise.allSettled(l.map(h=>h.unsubscribe()))));let d=n((h,g)=>{for(let x of g)x.type==="create"&&c(o.publish(xi.Updated,{file:x.path,event:"add"})),x.type==="update"&&c(o.publish(xi.Updated,{file:x.path,event:"change"})),x.type==="delete"&&c(o.publish(xi.Updated,{file:x.path,event:"unlink"}))},"callback"),p=n((h,g)=>{let x=r.subscribe(h,d,{ignore:g,backend:e});return ke.promise(()=>x).pipe(ke.tap(S=>ke.sync(()=>l.push(S))),ke.timeout(Nx),ke.catchCause(S=>(x.then(f=>f.unsubscribe()).catch(()=>{}),ke.logError("failed to subscribe",{directory:h,cause:zp.pretty(S)}))))},"subscribe"),u=(yield*(yield*_e.Service).entries()).filter(h=>h.type==="document").flatMap(h=>h.info.watcher?.ignore??[]);if(t.vcs&&(yield*pt.OPENCODE_EXPERIMENTAL_FILEWATCHER)&&(yield*ke.forkScoped(p(t.directory,[...Zn.PATTERNS,...u,...Fx(t.directory)]))),t.vcs?.type==="git"){let h=(yield*s.repo.discover(t.directory))?.gitDirectory,g=h?yield*a.realPath(h).pipe(ke.catch(()=>ke.succeed(h))):void 0;if(g&&!u.includes(".git")&&!u.includes(g)&&(!h||!u.includes(h))){let x=(yield*a.readDirectoryEntries(g).pipe(ke.catch(()=>ke.succeed([])))).flatMap(S=>S.name==="HEAD"?[]:[S.name]);yield*ke.forkScoped(p(g,x))}}return vt.of({})}).pipe(ke.catchCause(e=>ke.logError("failed to init watcher service",{cause:zp.pretty(e)}).pipe(ke.as(vt.of({})))))),Wx=A({service:vt,layer:zx,deps:[N.node,Z.node,_e.node,Gr.node,Se.node]});var fe={};U(fe,{Kind:()=>Vp,LocationMutation:()=>fe,PathError:()=>Er,ResolveInput:()=>Bx,Service:()=>on,externalDirectoryPermission:()=>Vx,locationLayer:()=>Hx,node:()=>Gx});import Lt from"path";import{Context as qx,Effect as ro,Layer as Bp,Schema as vr}from"effect";var Vp=vr.Literals(["file","directory"]),Bx=vr.Struct({path:vr.String,kind:Vp.pipe(vr.optional)}),Er=class extends vr.TaggedErrorClass()("LocationMutation.PathError",{path:vr.String,reason:vr.Literals(["relative_escape","location_escape","non_directory_ancestor"])}){static{n(this,"PathError")}},Vx=n(e=>({action:e.action,resources:[e.resource],save:[e.save]}),"externalDirectoryPermission"),on=class extends qx.Service()("@opencode/v2/LocationMutation"){static{n(this,"Service")}},Ga=n(e=>e.replaceAll("\\","/"),"slash"),Hp=Bp.effect(on,ro.gen(function*(){let e=yield*N.Service,t=yield*Z.Service,r=yield*e.realPath(t.directory);function o(i){return i.pipe(ro.catchReason("PlatformError","NotFound",()=>ro.succeed(void 0)))}n(o,"notFound");let a=ro.fnUntraced(function*(i){let c=yield*o(e.realPath(i));if(c!==void 0){let d=yield*e.stat(c);return{canonical:c,type:d.type,directory:d.type==="Directory"?c:Lt.dirname(c)}}let l=Lt.dirname(i);for(;;){let d=yield*o(e.realPath(l));if(d!==void 0)return(yield*e.stat(d)).type!=="Directory"?yield*new Er({path:i,reason:"non_directory_ancestor"}):{canonical:Lt.resolve(d,Lt.relative(l,i)),directory:d};let p=Lt.dirname(l);if(p===l)return yield*new Er({path:i,reason:"non_directory_ancestor"});l=p}}),s=ro.fn("LocationMutation.resolve")(function*(i){let c=!Lt.isAbsolute(i.path),l=Lt.resolve(t.directory,i.path),d=N.contains(t.directory,l);if(c&&!d)return yield*new Er({path:i.path,reason:"relative_escape"});let p=yield*a(l);if(d&&!N.contains(r,p.canonical))return yield*new Er({path:i.path,reason:"location_escape"});let u=!d,h=Ga(u?p.canonical:Lt.relative(r,p.canonical)||"."),g=i.kind==="directory"&&p.type==="Directory"?p.canonical:p.directory,x=Ga(Lt.join(g,"*"));return{canonical:p.canonical,resource:h,externalDirectory:u?{action:"external_directory",directory:g,resource:x,save:x}:void 0}});return on.of({resolve:s})})),Hx=Hp,Gx=A({service:on,layer:Hp.pipe(Bp.orDie),deps:[N.node,Z.node]});var an={};U(an,{Copy:()=>rb,CreateInput:()=>Qx,DestinationExistsError:()=>Ei,DirectoryUnavailableError:()=>Yt,DuplicateStrategyError:()=>ki,Event:()=>bi,InvalidDirectoryError:()=>vi,ListEntry:()=>nb,ProjectCopy:()=>an,RefreshInput:()=>eb,RefreshResult:()=>tb,RemoveInput:()=>Zx,Service:()=>wr,SourceDirectoryNotFoundError:()=>Si,StrategyID:()=>sn,StrategyUnavailableError:()=>wi,locationLayer:()=>ob,node:()=>eu,refreshAfterBoot:()=>Qp,refreshNode:()=>ib});import{Context as Yx,Effect as oe,Layer as Yp,Schema as at}from"effect";import Xp from"path";import{Effect as Xt}from"effect";function Gp(e){return{id:sn.make("git_worktree"),create:Xt.fn("ProjectCopy.GitWorktree.create")(function*(t){let r=yield*e.git.repo.discover(t.sourceDirectory);return r?(yield*e.git.worktree.create({repository:r,directory:t.directory}),{directory:yield*e.canonical(t.directory)}):yield*new Yt({directory:t.sourceDirectory})}),remove:Xt.fn("ProjectCopy.GitWorktree.remove")(function*(t){let r=yield*e.git.repo.discover(t.directory);if(!r)return yield*new Yt({directory:t.directory});yield*e.git.worktree.remove({repository:r,directory:t.directory,force:t.force})}),list:Xt.fn("ProjectCopy.GitWorktree.list")(function*(t){let r=yield*e.git.repo.discover(t);if(!r)return yield*new Yt({directory:t});let o=yield*e.git.worktree.list(r);return yield*Xt.forEach(o,a=>e.canonical(a.directory).pipe(Xt.map(s=>({directory:s,type:a.kind==="main"?"root":"copy"})),Xt.catchTag("ProjectCopy.DirectoryUnavailableError",()=>Xt.succeed(void 0)))).pipe(Xt.map(a=>a.filter(s=>s!==void 0)))})}}n(Gp,"makeGitWorktreeStrategy");var Ka={};U(Ka,{Event:()=>bi,ProjectDirectories:()=>Ka});var Kp=Fe({type:"project.directories.updated",schema:{projectID:ll.ID}}),bi={Updated:Kp,Definitions:xt(Kp)};var Qt={};U(Qt,{Copy:()=>Xx,CreateInput:()=>Kx,ProjectCopy:()=>Qt,RemoveInput:()=>Jx,StrategyID:()=>Jp});import{Schema as Ut}from"effect";var Jp=Ut.Trim.pipe(Ut.check(Ut.isNonEmpty()),Ut.brand("ProjectCopy.StrategyID")),Kx=Ut.Struct({projectID:ds,strategy:Jp,sourceDirectory:ye,directory:ye,name:be(Ut.String)}).annotate({identifier:"ProjectCopy.CreateInput"}),Jx=Ut.Struct({projectID:ds,directory:ye,force:Ut.Boolean}).annotate({identifier:"ProjectCopy.RemoveInput"}),Xx=Ut.Struct({directory:ye}).annotate({identifier:"ProjectCopy.Copy"});var sn=Qt.StrategyID,Qx=Qt.CreateInput,Zx=Qt.RemoveInput,eb=at.Struct({projectID:Bo.ID}).annotate({identifier:"ProjectCopy.RefreshInput"}),tb=at.Struct({updated:at.Array(ye),removed:at.Array(ye)}).annotate({identifier:"ProjectCopy.RefreshResult"}),rb=Qt.Copy,nb=at.Struct({directory:ye,type:at.Literals(["root","copy"])}).annotate({identifier:"ProjectCopy.ListEntry"}),Si=class extends at.TaggedErrorClass()("ProjectCopy.SourceDirectoryNotFoundError",{directory:ye}){static{n(this,"SourceDirectoryNotFoundError")}},Ei=class extends at.TaggedErrorClass()("ProjectCopy.DestinationExistsError",{directory:ye}){static{n(this,"DestinationExistsError")}},Yt=class extends at.TaggedErrorClass()("ProjectCopy.DirectoryUnavailableError",{directory:ye}){static{n(this,"DirectoryUnavailableError")}},vi=class extends at.TaggedErrorClass()("ProjectCopy.InvalidDirectoryError",{directory:ye}){static{n(this,"InvalidDirectoryError")}},wi=class extends at.TaggedErrorClass()("ProjectCopy.StrategyUnavailableError",{strategy:sn}){static{n(this,"StrategyUnavailableError")}},ki=class extends at.TaggedErrorClass()("ProjectCopy.DuplicateStrategyError",{strategy:sn}){static{n(this,"DuplicateStrategyError")}};var wr=class extends Yx.Service()("@opencode/ProjectCopy"){static{n(this,"Service")}},Qp=oe.gen(function*(){let e=yield*Z.Service,t=yield*wr;yield*oe.gen(function*(){yield*oe.logInfo("project copy refresh started",{projectID:e.project.id});let r=yield*t.refresh({projectID:e.project.id});yield*oe.logInfo("project copy refresh done",{projectID:e.project.id,updated:r.updated,removed:r.removed})}).pipe(oe.catchCause(r=>oe.logWarning("project copy refresh failed",{cause:r})),oe.forkScoped,oe.asVoid)}),Zp=Yp.effect(wr,oe.gen(function*(){let e=yield*N.Service,t=yield*Gr.Service,r=yield*ys.Service,o=(yield*Ot.Service).db,a=yield*Se.Service,s=oe.fnUntraced(function*(S,f){f&&(yield*a.publish(bi.Updated,{projectID:S}))}),i=oe.fnUntraced(function*(S){let f=ye.make(yield*e.resolve(S));return(yield*e.isDir(f))?f:yield*new Yt({directory:S})}),c=new Map,l=oe.fn("ProjectCopy.register")(function*(S){if(c.has(S.id))return yield*new ki({strategy:S.id});c.set(S.id,S)});yield*l(Gp({git:t,canonical:i})).pipe(oe.orDie);let d=n(()=>Array.from(c.values()),"strategies"),p=oe.fnUntraced(function*(S,f){let v=yield*i(S);return(yield*r.contains({projectID:f,directory:v}))?v:yield*new Si({directory:v})}),u=oe.fnUntraced(function*(S){let f=c.get(S);return f||(yield*new wi({strategy:S}))}),h=oe.fn("ProjectCopy.create")(function*(S){let f=yield*u(S.strategy),v=yield*p(S.sourceDirectory,S.projectID);yield*e.makeDirectory(S.directory,{recursive:!0}).pipe(oe.orDie);let E=S.name??bl.create(),m=1,b=ye.make(Xp.join(S.directory,E));for(;yield*e.existsSafe(b);){if(m++,m>10)return yield*new Ei({directory:b});b=ye.make(Xp.join(S.directory,`${E}-${m}`))}let w=yield*f.create({directory:b,sourceDirectory:v});return yield*s(S.projectID,yield*r.create({projectID:S.projectID,directory:w.directory,strategy:S.strategy,behavior:"replace"})),w}),g=oe.fn("ProjectCopy.remove")(function*(S){let f=yield*i(S.directory),v=yield*r.get({projectID:S.projectID,directory:f});if(!v?.strategy)return yield*new vi({directory:f});yield*(yield*u(sn.make(v.strategy))).remove({directory:f,force:S.force}),yield*s(S.projectID,yield*r.remove({projectID:S.projectID,directory:f}))}),x=oe.fn("ProjectCopy.refresh")(function*(S){let f=yield*r.list(S.projectID),v=yield*oe.forEach(f,y=>e.isDir(y.directory).pipe(oe.map(T=>({...y,exists:T}))),{concurrency:"unbounded"}),E=v.filter(y=>y.strategy===void 0&&y.exists).map(y=>y.directory),m=yield*oe.forEach(E,y=>oe.forEach(d(),T=>T.list(y).pipe(oe.catchTag("ProjectCopy.DirectoryUnavailableError",()=>oe.succeed([])),oe.map(O=>O.map(L=>({directory:L.directory,strategy:L.type==="copy"?T.id:void 0}))))),{concurrency:"unbounded"}).pipe(oe.map(y=>new Map(y.flat(2).map(T=>[T.directory,T])).values().toArray())),b=v.filter(y=>!y.exists).map(y=>y.directory),w=yield*o.transaction(y=>oe.all({updated:oe.forEach(m,T=>r.create({projectID:S.projectID,directory:T.directory,strategy:T.strategy,behavior:"replace"},y)),removed:oe.forEach(b,T=>r.remove({projectID:S.projectID,directory:T},y))})).pipe(oe.orDie),k={updated:m.filter((y,T)=>w.updated[T]).map(y=>y.directory),removed:b.filter((y,T)=>w.removed[T])};return yield*s(S.projectID,k.updated.length>0||k.removed.length>0),k});return wr.of({register:l,create:h,remove:g,refresh:x})})),ob=Zp,eu=A({service:wr,layer:Zp,deps:[N.node,Gr.node,ys.node,Se.node,Ot.node]}),ib=A({name:"project-copy-refresh",layer:Yp.effectDiscard(Qp),deps:[eu,Z.node]});var io={};U(io,{CreateInput:()=>Ob,Event:()=>oo,ExitedError:()=>Ri,Info:()=>Ib,NotFoundError:()=>Di,Pty:()=>io,Service:()=>dn,UpdateInput:()=>Db,locationLayer:()=>Rb,node:()=>_b});import{Context as wb,Effect as De,Layer as mu,Schema as yu}from"effect";var Zt={};U(Zt,{CreateInput:()=>cb,Event:()=>ab,ID:()=>Nt,Info:()=>Ja,Pty:()=>Zt,UpdateInput:()=>lb});import{Schema as Te}from"effect";var sb=Te.String.check(Te.isStartsWith("pty")).pipe(Te.brand("PtyID")),Nt=sb.pipe(Wr(e=>{let t=n(()=>e.make("pty_"+zo()),"create");return{create:t,ascending:n(r=>r===void 0?t():e.make(r),"ascending")}})),Ja=Te.Struct({id:Nt,title:Te.String,command:Te.String,args:Te.Array(Te.String),cwd:Te.String,status:Te.Literals(["running","exited"]),pid:$o,exitCode:be($o)}).annotate({identifier:"Pty"}),tu=Fe({type:"pty.created",schema:{info:Ja}}),ru=Fe({type:"pty.updated",schema:{info:Ja}}),nu=Fe({type:"pty.exited",schema:{id:Nt,exitCode:$o}}),ou=Fe({type:"pty.deleted",schema:{id:Nt}}),ab={Created:tu,Updated:ru,Exited:nu,Deleted:ou,Definitions:xt(tu,ru,nu,ou)},cb=Te.Struct({command:be(Te.String),args:be(Te.Array(Te.String)),cwd:be(Te.String),title:be(Te.String),env:be(Te.Record(Te.String,Te.String))}),lb=Te.Struct({title:be(Te.String),size:be(Te.Struct({rows:Ge,cols:Ge}))});var ln={};U(ln,{Shell:()=>ln,acceptable:()=>uu,args:()=>Eb,gitbash:()=>Ii,killTree:()=>mb,list:()=>vb,login:()=>xb,name:()=>cn,posix:()=>bb,preferred:()=>pu,ps:()=>du});import no from"path";import{spawn as db}from"child_process";import{readFile as pb}from"fs/promises";import{statSync as ub}from"fs";import{setTimeout as iu}from"node:timers/promises";var su=200,fb={bash:{login:!0,posix:!0},dash:{login:!0,posix:!0},fish:{deny:!0,login:!0},ksh:{login:!0,posix:!0},nu:{deny:!0},powershell:{ps:!0},pwsh:{ps:!0},sh:{login:!0,posix:!0},zsh:{login:!0,posix:!0}};async function mb(e,t){let r=e.pid;if(!(!r||t?.exited?.())){if(process.platform==="win32"){await new Promise(o=>{let a=db("taskkill",["/pid",String(r),"/f","/t"],{stdio:"ignore",windowsHide:!0});a.once("exit",()=>o()),a.once("error",()=>o())});return}try{process.kill(-r,"SIGTERM"),await iu(su),t?.exited?.()||process.kill(-r,"SIGKILL")}catch{e.kill("SIGTERM"),await iu(su),t?.exited?.()||e.kill("SIGKILL")}}}n(mb,"killTree");function au(e){return ub(e,{throwIfNoEntry:!1})??void 0}n(au,"stat");function Qa(e){if(process.platform!=="win32")return e;let t=N.windowsPath(e);return no.win32.dirname(t)!=="."?t.startsWith("/")&&cn(t)==="bash"&&Ii()||t:cn(t)==="bash"?Ii()||ut(t)||t:ut(t)||t}n(Qa,"full");function Oi(e){return fb[cn(e)]}n(Oi,"meta");function cu(e){return Oi(e)?.deny!==!0}n(cu,"ok");function yb(e){return no.isAbsolute(N.windowsPath(e))}n(yb,"rooted");function Za(e){let t=Qa(e);return yb(t)?au(t)?.isFile()?t:void 0:ut(t)??void 0}n(Za,"resolve");function lu(){return Array.from(new Set([ut("pwsh"),ut("powershell"),Ii(),process.env.COMSPEC||"cmd.exe"].filter(e=>!!e).map(Qa)))}n(lu,"win");async function hb(){let e=await pb("/etc/shells","utf8").catch(()=>"");return e?Array.from(new Set(e.split(`
198
- `).filter(t=>t.trim()&&!t.startsWith("#")))):["/bin/bash","/bin/zsh","/bin/sh"]}n(hb,"unix");function Ti(e,t){if(e&&(!t?.acceptable||cu(e))){let r=Za(e);if(r)return r}return process.platform==="win32"?lu()[0]:gb()}n(Ti,"select");function Ii(){if(process.platform!=="win32")return;if(pt.OPENCODE_GIT_BASH_PATH)return pt.OPENCODE_GIT_BASH_PATH;let e=ut("git");if(!e)return;let t=no.join(e,"..","..","bin","bash.exe");if(au(t)?.size)return t}n(Ii,"gitbash");function gb(){if(process.platform==="darwin")return"/bin/zsh";let e=ut("bash");return e||"/bin/sh"}n(gb,"fallback");function cn(e){return process.platform==="win32"?no.win32.parse(N.windowsPath(e)).name.toLowerCase():no.basename(e).toLowerCase()}n(cn,"name");function xb(e){return Oi(e)?.login===!0}n(xb,"login");function bb(e){return Oi(e)?.posix===!0}n(bb,"posix");function du(e){return Oi(e)?.ps===!0}n(du,"ps");function Sb(e){let t=Qa(e),r=cn(t);return{path:t,name:Za(r)?r:t,acceptable:cu(t)}}n(Sb,"info");function Eb(e,t,r){let o=cn(e);return o==="nu"||o==="fish"?["-c",t]:o==="zsh"?["-l","-c",`
199
- [[ -f ~/.zshenv ]] && source ~/.zshenv >/dev/null 2>&1 || true
200
- [[ -f "\${ZDOTDIR:-$HOME}/.zshrc" ]] && source "\${ZDOTDIR:-$HOME}/.zshrc" >/dev/null 2>&1 || true
201
- cd -- "$1"
202
- eval ${JSON.stringify(t)}
203
- `,"opencode",r]:o==="bash"?["-l","-c",`
204
- shopt -s expand_aliases
205
- [[ -f ~/.bashrc ]] && source ~/.bashrc >/dev/null 2>&1 || true
206
- cd -- "$1"
207
- eval ${JSON.stringify(t)}
208
- `,"opencode",r]:o==="cmd"?["/c",t]:du(e)?["-NoProfile","-Command",t]:["-c",t]}n(Eb,"args");var Xa,Ya;function pu(e){return e?Ti(e):(Xa??=Ti(process.env.SHELL),Xa)}n(pu,"preferred");pu.reset=()=>{Xa=void 0};function uu(e){return e?Ti(e,{acceptable:!0}):(Ya??=Ti(process.env.SHELL,{acceptable:!0}),Ya)}n(uu,"acceptable");uu.reset=()=>{Ya=void 0};async function vb(){return(process.platform==="win32"?lu():await hb()).filter(t=>Za(t)).map(Sb)}n(vb,"list");var fu=1024*1024*2,kb=25,Tb=gi(()=>import("./pty.node-Y3N2XKYG.js")),Ib=Zt.Info,Ob=Zt.CreateInput,Db=Zt.UpdateInput,oo=Zt.Event,Di=class extends yu.TaggedErrorClass()("Pty.NotFoundError",{ptyID:Nt}){static{n(this,"NotFoundError")}},Ri=class extends yu.TaggedErrorClass()("Pty.ExitedError",{ptyID:Nt}){static{n(this,"ExitedError")}},dn=class extends wb.Service()("@opencode/v2/Pty"){static{n(this,"Service")}},hu=mu.effect(dn,De.gen(function*(){let e=yield*Se.Service,t=yield*Z.Service,r=yield*_e.Service,o=yield*De.context(),a=De.runForkWith(o),s=new Map,i=[];function c(E,m){for(let b of E.subscribers.values()){if(!b.active){b.end=m;continue}try{b.onEnd(m)}catch{}}E.subscribers.clear()}n(c,"notifyEnd");function l(E){for(let m of E.listeners)m.dispose();if(E.listeners.length=0,E.info.status==="running")try{E.process.kill()}catch{}c(E,{})}n(l,"teardown"),yield*De.addFinalizer(()=>De.sync(()=>{for(let E of s.values())l(E);s.clear(),i.length=0}));let d=De.fn("Pty.requireSession")(function*(E){let m=s.get(E);return m||(yield*new Di({ptyID:E}))}),p=De.fnUntraced(function*(E){let m=s.get(E);if(!m)return;s.delete(E);let b=i.indexOf(E);b!==-1&&i.splice(b,1),yield*De.logInfo("removing session",{id:E}),l(m),yield*e.publish(oo.Deleted,{id:m.info.id})}),u=De.fn("Pty.remove")(function*(E){yield*d(E),yield*p(E)}),h=De.fn("Pty.list")(function*(){return Array.from(s.values()).map(E=>E.info)}),g=De.fn("Pty.get")(function*(E){return(yield*d(E)).info}),x=De.fn("Pty.create")(function*(E){let m=Nt.ascending(),b=E.command||ln.preferred(_e.latest(yield*r.entries(),"shell")),w=ln.login(b)?[...E.args??[],"-l"]:[...E.args??[]],k=E.cwd||t.directory,y={...process.env,...E.env,TERM:"xterm-256color",OPENCODE_TERMINAL:"1"};process.platform==="win32"&&(y.LC_ALL="C.UTF-8",y.LC_CTYPE="C.UTF-8",y.LANG="C.UTF-8"),yield*De.logInfo("creating session",{id:m,cmd:b,args:w,cwd:k});let{spawn:T}=yield*De.promise(()=>Tb()),O=yield*De.sync(()=>T(b,w,{name:"xterm-256color",cwd:k,env:y})),L={id:m,title:E.title||`Terminal ${m.slice(-4)}`,command:b,args:w,cwd:k,status:"running",pid:O.pid},I={info:L,process:O,buffer:"",bufferCursor:0,cursor:0,subscribers:new Map,listeners:[]};return s.set(m,I),I.listeners.push(O.onData(_=>{I.cursor+=_.length;for(let[C,R]of I.subscribers.entries()){if(!R.active){R.pending.push(_);continue}try{R.onData(_)}catch{I.subscribers.delete(C)}}if(I.buffer+=_,I.buffer.length<=fu)return;let z=I.buffer.length-fu;I.buffer=I.buffer.slice(z),I.bufferCursor+=z}),O.onExit(({exitCode:_})=>{I.info.status!=="exited"&&(I.info.status="exited",I.info.exitCode=_,c(I,{exitCode:_}),i.push(m),a(De.gen(function*(){for(yield*De.logInfo("session exited",{id:m,exitCode:_}),yield*e.publish(oo.Exited,{id:m,exitCode:_});i.length>kb;){let z=i[0];if(!z)break;yield*p(z)}})))})),yield*e.publish(oo.Created,{info:L}),L}),S=De.fn("Pty.update")(function*(E,m){let b=yield*d(E);return m.title&&(b.info.title=m.title),m.size&&b.info.status==="running"&&b.process.resize(m.size.cols,m.size.rows),yield*e.publish(oo.Updated,{info:b.info}),b.info}),f=De.fn("Pty.write")(function*(E,m){let b=yield*d(E);b.info.status==="running"&&b.process.write(m)}),v=De.fn("Pty.attach")(function*(E,m){let b=yield*d(E);if(b.info.status!=="running")return yield*new Ri({ptyID:E});yield*De.logInfo("client attached to session",{id:E,directory:t.directory});let w={},k={onData:m.onData,onEnd:m.onEnd,active:!1,detached:!1,pending:[]};b.subscribers.set(w,k);let y=b.bufferCursor,T=b.cursor,O=m.cursor===-1?T:typeof m.cursor=="number"&&Number.isSafeInteger(m.cursor)?Math.max(0,m.cursor):0;return{replay:(()=>{if(!b.buffer||O>=T)return"";let I=Math.max(0,O-y);return I>=b.buffer.length?"":b.buffer.slice(I)})(),cursor:T,write:n(I=>{b.info.status==="running"&&b.process.write(I)},"write"),activate:n(()=>{if(!(k.active||k.detached)){k.active=!0;try{for(let I of k.pending)k.onData(I);k.pending.length=0,k.end&&k.onEnd(k.end)}catch{b.subscribers.delete(w)}}},"activate"),detach:n(()=>{k.detached=!0,k.pending.length=0,k.end=void 0,b.subscribers.delete(w)},"detach")}});return dn.of({list:h,get:g,create:x,update:S,remove:u,write:f,attach:v})})),Rb=hu.pipe(mu.provide(_e.locationLayer)),_b=A({service:dn,layer:hu,deps:[Se.node,Z.node,_e.node]});var ct={};U(ct,{Answer:()=>zb,Event:()=>Ai,ID:()=>tc,Info:()=>Nb,NotFoundError:()=>co,Option:()=>Ub,Prompt:()=>jb,QuestionV2:()=>ct,RejectedError:()=>ao,Reply:()=>Wb,Request:()=>$b,Service:()=>pn,Tool:()=>Fb,locationLayer:()=>qb,node:()=>Bb});import{Context as Mb,Deferred as so,Effect as Me,Layer as Lb,Schema as Tu}from"effect";var tt={};U(tt,{Answer:()=>ec,Event:()=>Cb,ID:()=>_i,Info:()=>vu,Option:()=>Su,Prompt:()=>Ab,Question:()=>tt,Reply:()=>Pb,Request:()=>ku,Tool:()=>wu});import{Schema as ge}from"effect";var _i=ge.String.check(ge.isStartsWith("que")).pipe(ge.brand("QuestionV2.ID"),Wr(e=>{let t=n(()=>e.make("que_"+zo()),"create");return{create:t,ascending:n(r=>r===void 0?t():e.make(r),"ascending")}})),Su=ge.Struct({label:ge.String.annotate({description:"Display text (1-5 words, concise)"}),description:ge.String.annotate({description:"Explanation of choice"})}).annotate({identifier:"QuestionV2.Option"}),Eu={question:ge.String.annotate({description:"Complete question"}),header:ge.String.annotate({description:"Very short label (max 30 chars)"}),options:ge.Array(Su).annotate({description:"Available choices"}),multiple:ge.Boolean.pipe(be).annotate({description:"Allow selecting multiple choices"})},vu=ge.Struct({...Eu,custom:ge.Boolean.pipe(be).annotate({description:"Allow typing a custom answer (default: true)"})}).annotate({identifier:"QuestionV2.Info"}),Ab=ge.Struct(Eu).annotate({identifier:"QuestionV2.Prompt"}),wu=ge.Struct({messageID:ge.String,callID:ge.String}).annotate({identifier:"QuestionV2.Tool"}),ku=ge.Struct({id:_i,sessionID:qr,questions:ge.Array(vu).annotate({description:"Questions to ask"}),tool:wu.pipe(be)}).annotate({identifier:"QuestionV2.Request"}),ec=ge.Array(ge.String).annotate({identifier:"QuestionV2.Answer"}),Pb=ge.Struct({answers:ge.Array(ec).annotate({description:"User answers in order of questions (each answer is an array of selected labels)"})}).annotate({identifier:"QuestionV2.Reply"}),gu=Fe({type:"question.v2.asked",schema:ku.fields}),xu=Fe({type:"question.v2.replied",schema:{sessionID:qr,requestID:_i,answers:ge.Array(ec)}}),bu=Fe({type:"question.v2.rejected",schema:{sessionID:qr,requestID:_i}}),Cb={Asked:gu,Replied:xu,Rejected:bu,Definitions:xt(gu,xu,bu)};var tc=tt.ID,Ub=tt.Option,Nb=tt.Info,jb=tt.Prompt,Fb=tt.Tool,$b=tt.Request,zb=tt.Answer,Wb=tt.Reply,Ai=tt.Event,ao=class extends Tu.TaggedErrorClass()("QuestionV2.RejectedError",{}){static{n(this,"RejectedError")}get message(){return"The user dismissed this question"}},co=class extends Tu.TaggedErrorClass()("QuestionV2.NotFoundError",{requestID:tc}){static{n(this,"NotFoundError")}},pn=class extends Mb.Service()("@opencode/v2/Question"){static{n(this,"Service")}},Iu=Lb.effect(pn,Me.gen(function*(){let e=yield*Se.Service,t=new Map;yield*Me.addFinalizer(()=>Me.forEach(t.values(),i=>so.fail(i.deferred,new ao),{discard:!0}).pipe(Me.ensuring(Me.sync(()=>{t.clear()}))));let r=Me.fn("QuestionV2.ask")(i=>Me.uninterruptibleMask(c=>Me.gen(function*(){let l=tc.ascending(),d=yield*so.make(),p={id:l,...i};return t.set(l,{request:p,deferred:d}),yield*e.publish(Ai.Asked,p).pipe(Me.andThen(c(so.await(d))),Me.ensuring(Me.sync(()=>{t.delete(l)})))}))),o=Me.fn("QuestionV2.reply")(i=>Me.uninterruptible(Me.gen(function*(){let c=t.get(i.requestID);if(!c)return yield*new co({requestID:i.requestID});yield*e.publish(Ai.Replied,{sessionID:c.request.sessionID,requestID:c.request.id,answers:i.answers.map(l=>[...l])}),yield*so.succeed(c.deferred,i.answers),t.delete(i.requestID)}))),a=Me.fn("QuestionV2.reject")(i=>Me.uninterruptible(Me.gen(function*(){let c=t.get(i);if(!c)return yield*new co({requestID:i});yield*e.publish(Ai.Rejected,{sessionID:c.request.sessionID,requestID:c.request.id}),yield*so.fail(c.deferred,new ao),t.delete(i)}))),s=Me.fn("QuestionV2.list")(function*(){return Array.from(t.values(),i=>i.request)});return pn.of({ask:r,reply:o,reject:a,list:s})})),qb=Iu,Bb=A({service:pn,layer:Iu,deps:[Se.node]});var er={};U(er,{ReferenceGuidance:()=>er,Service:()=>fn,locationLayer:()=>iS,node:()=>sS});import{Context as rS,Effect as cc,Layer as nS,Schema as Tr}from"effect";var Y={};U(Y,{DuplicateKeyError:()=>Ci,InitializationBlocked:()=>Pi,Key:()=>un,Snapshot:()=>Hb,SourceSnapshot:()=>Ou,SystemContext:()=>Y,combine:()=>Jb,empty:()=>Gb,initialize:()=>Xb,make:()=>Kb,reconcile:()=>Yb,replace:()=>Zb,unavailable:()=>oc});import{Effect as kr,Option as Vb,Schema as Je}from"effect";var un=Je.String.check(Je.isPattern(/^[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._/-]*$/)).pipe(Je.brand("SystemContext.Key")),oc=Symbol.for("@opencode/SystemContext.Unavailable"),ic=Symbol.for("@opencode/SystemContext"),Ou=Je.Struct({value:Je.Json,removed:Je.optional(Je.NonEmptyString)}),Hb=Je.Record(un,Ou),Pi=class extends Je.TaggedErrorClass()("SystemContext.InitializationBlocked",{keys:Je.Array(un)}){static{n(this,"InitializationBlocked")}get message(){return`System context initialization blocked by unavailable sources: ${this.keys.join(", ")}`}},Ci=class extends Je.TaggedErrorClass()("SystemContext.DuplicateKeyError",{key:un}){static{n(this,"DuplicateKeyError")}get message(){return`Duplicate system context key: ${this.key}`}},Gb=ac([]);function Kb(e){let t=Je.decodeUnknownOption(e.codec),r=Je.encodeSync(e.codec),o=Je.toEquivalence(e.codec);return ac([{key:e.key,load:e.load.pipe(kr.map(a=>{if(eS(a))return a;let s=n(()=>({value:r(a),...e.removed?{removed:rc(e.key,"removal",e.removed(a))}:{}}),"snapshot");return{baseline:n(()=>({text:rc(e.key,"baseline",e.baseline(a)),snapshot:s()}),"baseline"),compare:n(i=>Vb.match(t(i),{onNone:n(()=>({_tag:"Incompatible"}),"onNone"),onSome:n(c=>o(c,a)?{_tag:"Unchanged"}:{_tag:"Updated",render:n(()=>({text:rc(e.key,"update",e.update(c,a)),snapshot:s()}),"render")},"onSome")}),"compare")}}))}])}n(Kb,"make");function Jb(e){let t=e.flatMap(r=>r[ic]);return tS(t),ac(t)}n(Jb,"combine");var sc=n(e=>kr.forEach(e[ic],t=>t.load.pipe(kr.map(r=>r===oc?{_tag:"Unavailable",key:t.key}:{_tag:"Available",key:t.key,...r})),{concurrency:"unbounded"}),"observe");function Xb(e){return sc(e).pipe(kr.flatMap(t=>{let r=t.flatMap(o=>o._tag==="Unavailable"?[o.key]:[]);return r.length>0?new Pi({keys:r}):kr.succeed(Du(t))}))}n(Xb,"initialize");function Du(e){let r=e.filter(o=>o._tag==="Available").map(o=>[o.key,o.baseline()]);return{baseline:_u(r.map(([,o])=>o.text)),snapshot:Object.fromEntries(r.map(([o,a])=>[o,a.snapshot]))}}n(Du,"initializeObservation");function Yb(e,t){return sc(e).pipe(kr.map(r=>{let o=Qb(r,t);return o._tag==="Unchanged"||o._tag==="Updated"?o:Ru(r,t)}))}n(Yb,"reconcile");function Qb(e,t){let r=new Set(e.map(i=>i.key)),o=new Map;for(let i of e){if(i._tag==="Unavailable")continue;let c=nc(t,i.key);if(!c)continue;let l=i.compare(c.value);if(l._tag==="Incompatible")return{_tag:"Replace"};o.set(i.key,l)}for(let i of Object.keys(t).sort())if(!r.has(un.make(i))&&t[i].removed===void 0)return{_tag:"Replace"};let a={},s=[];for(let i of e){let c=nc(t,i.key);if(i._tag==="Unavailable"){c&&(a[i.key]=c);continue}if(!c){let p=i.baseline();s.push(p.text),a[i.key]=p.snapshot;continue}let l=o.get(i.key);if(!l||l._tag==="Incompatible")throw new Error(`Missing comparison for system context source ${i.key}`);if(l._tag==="Unchanged"){a[i.key]=c;continue}let d=l.render();s.push(d.text),a[i.key]=d.snapshot}for(let i of Object.keys(t).sort()){if(r.has(un.make(i)))continue;let c=t[i].removed;if(c===void 0)throw new Error(`Missing removal rendering for system context source ${i}`);s.push(c)}return s.length===0?{_tag:"Unchanged"}:{_tag:"Updated",text:_u(s),snapshot:a}}n(Qb,"reconcileObservation");function Zb(e,t){return sc(e).pipe(kr.map(r=>Ru(r,t)))}n(Zb,"replace");function Ru(e,t){return e.some(r=>r._tag==="Unavailable"&&nc(t,r.key)!==void 0)?{_tag:"ReplacementBlocked"}:{_tag:"ReplacementReady",generation:Du(e)}}n(Ru,"replaceObservation");function ac(e){return{[ic]:e}}n(ac,"context");function _u(e){return e.join(`
209
-
210
- `)}n(_u,"render");function nc(e,t){return Object.hasOwn(e,t)?e[t]:void 0}n(nc,"getSnapshot");function eS(e){return e===oc}n(eS,"isUnavailable");function rc(e,t,r){if(r.length===0)throw new Error(`System context source ${e} rendered an empty ${t}`);return r}n(rc,"requireText");function tS(e){let t=new Set;for(let r of e){if(t.has(r.key))throw new Ci({key:r.key});t.add(r.key)}}n(tS,"assertUniqueKeys");var oS=Tr.Struct({name:Tr.String,path:Tr.String,description:Tr.String.pipe(Tr.optional)}),Au=n(e=>["Project references provide additional directories that can be accessed when relevant.","<available_references>",...e.flatMap(t=>[" <reference>",` <name>${t.name}</name>`,` <path>${t.path}</path>`,...t.description===void 0?[]:[` <description>${t.description}</description>`]," </reference>"]),"</available_references>"].join(`
211
- `),"render"),fn=class extends rS.Service()("@opencode/v2/ReferenceGuidance"){static{n(this,"Service")}},Pu=nS.effect(fn,cc.gen(function*(){let e=yield*dr.Service;return fn.of({load:cc.fn("ReferenceGuidance.load")(function*(){let t=(yield*e.list()).filter(r=>r.description!==void 0).map(r=>({name:r.name,path:r.path,description:r.description})).toSorted((r,o)=>r.name.localeCompare(o.name));return t.length===0?Y.empty:Y.make({key:Y.Key.make("core/reference-guidance"),codec:Tr.toCodecJson(Tr.Array(oS)),load:cc.succeed(t),baseline:Au,update:n((r,o)=>["The available project references have changed. This list supersedes the previous reference list.",Au(o)].join(`
212
- `),"update"),removed:n(()=>"Project reference guidance is no longer available. Do not use previously listed references.","removed")})})})})),iS=Pu,sS=A({service:fn,layer:Pu,deps:[dr.node]});import{Cause as nr,DateTime as ef,Effect as X,FiberSet as _r,Layer as yE,Option as hE,Semaphore as gE,Stream as xE}from"effect";var Xe={};U(Xe,{Service:()=>mn,SystemContextRegistry:()=>Xe,node:()=>dS});import{Context as aS,Effect as jt,Layer as cS,Ref as Mi}from"effect";var mn=class extends aS.Service()("@opencode/v2/SystemContextRegistry"){static{n(this,"Service")}},lS=cS.effect(mn,jt.gen(function*(){let e=yield*Mi.make([]);return mn.of({register:jt.fn("SystemContextRegistry.register")(function*(t){yield*jt.acquireRelease(Mi.modify(e,r=>r.some(o=>o.key===t.key)?[!1,r]:[!0,[...r,t]]).pipe(jt.flatMap(r=>r?jt.void:jt.die(`Duplicate system context entry key: ${t.key}`)),jt.as(t)),r=>Mi.update(e,o=>o.filter(a=>a!==r)))}),load:jt.fn("SystemContextRegistry.load")(function*(){let t=(yield*Mi.get(e)).toSorted((r,o)=>r.key<o.key?-1:r.key>o.key?1:0);return Y.combine(yield*jt.forEach(t,r=>r.load,{concurrency:"unbounded"}))})})})),dS=A({service:mn,layer:lS,deps:[]});var tr={};U(tr,{Service:()=>yn,SkillGuidance:()=>tr,locationLayer:()=>mS,node:()=>yS});import{Context as pS,Effect as lc,Layer as uS,Schema as lo}from"effect";var fS=lo.Struct({name:lo.String,description:lo.String}),Cu=n(e=>["Skills provide specialized instructions and workflows for specific tasks.","Use the skill tool to load a skill when a task matches its description.",...e.length===0?["No skills are currently available."]:["<available_skills>",...e.flatMap(t=>[" <skill>",` <name>${t.name}</name>`,` <description>${t.description}</description>`," </skill>"]),"</available_skills>"]].join(`
213
- `),"render"),yn=class extends pS.Service()("@opencode/v2/SkillGuidance"){static{n(this,"Service")}},Mu=uS.effect(yn,lc.gen(function*(){let e=yield*Dt.Service;return yn.of({load:lc.fn("SkillGuidance.load")(function*(t){let r=t.info;if(!r)return Y.empty;let o=Dt.available(yield*e.list(),r);if(o.length===0&&V.evaluate("skill","*",r.permissions).effect==="deny")return Y.empty;let a=o.flatMap(s=>s.description===void 0?[]:[{name:s.name,description:s.description}]).toSorted((s,i)=>s.name.localeCompare(i.name));return Y.make({key:Y.Key.make("core/skill-guidance"),codec:lo.toCodecJson(lo.Array(fS)),load:lc.succeed(a),baseline:Cu,update:n((s,i)=>["The available skills have changed. This list supersedes the previous available skills list.",Cu(i)].join(`
214
- `),"update"),removed:n(()=>"Skill guidance is no longer available. Do not use any previously listed skill.","removed")})})})})),mS=Mu,yS=A({service:yn,layer:Mu,deps:[Dt.node]});var ee={};U(ee,{Service:()=>Dr,ToolRegistry:()=>ee,node:()=>US,toolsNode:()=>NS});import{Context as CS,Effect as Ye,Layer as wc}from"effect";var Ft={};U(Ft,{MANAGED_DIRECTORY:()=>Uu,MAX_BYTES:()=>mc,MAX_LINES:()=>fc,RETENTION:()=>Lu,Service:()=>rr,StorageError:()=>hn,ToolOutputStore:()=>Ft,cleanupLayer:()=>ju,cleanupNode:()=>kS,node:()=>vS,nodeWithoutConfig:()=>wS});import dc from"path";import{Context as hS,Duration as yc,Effect as Re,Layer as Li,Option as pc,Schedule as gS,Schema as uc}from"effect";var fc=2e3,mc=50*1024,Lu=yc.days(7),Uu="tool-output",hn=class extends uc.TaggedErrorClass()("ToolOutputStore.StorageError",{operation:uc.Literals(["encode","write"]),cause:uc.Defect()}){static{n(this,"StorageError")}get message(){let t=this.cause instanceof Error?this.cause.message:String(this.cause);return`Failed to ${this.operation} tool output${t?`: ${t}`:""}`}},rr=class extends hS.Service()("@opencode/v2/ToolOutputStore"){static{n(this,"Service")}},Nu=n((e,t)=>{let r=0,o="";for(let a of e){let s=Buffer.byteLength(a,"utf-8");if(r+s>t)break;o+=a,r+=s}return o},"takePrefix"),xS=n((e,t)=>{let r=0,o=[];for(let a of Array.from(e).toReversed()){let s=Buffer.byteLength(a,"utf-8");if(r+s>t)break;o.unshift(a),r+=s}return o.join("")},"takeSuffix"),bS=n((e,t,r)=>{let o=e.split(`
215
- `),a=Math.ceil(t/2),s=Math.floor(t/2),i=o.length<=t?e:[o.slice(0,a).join(`
216
- `),...s>0?[o.slice(o.length-s).join(`
217
- `)]:[]].join(`
218
- `);if(Buffer.byteLength(i,"utf-8")<=r)return o.length<=t?{head:i,tail:""}:{head:o.slice(0,a).join(`
219
- `),tail:s>0?o.slice(o.length-s).join(`
220
- `):""};let c=Math.ceil(r/2),l=Math.floor(r/2);return{head:Nu(i,c),tail:xS(i,l)}},"preview"),SS=n((e,t,r,o)=>{let a=Nu(t,o).split(`
221
- `).slice(0,r).join(`
222
- `),s=Buffer.byteLength(t,"utf-8");if(r<=4||o<=s+4)return a;let i=bS(e,r-4,o-s-4);return i.tail?`${i.head}
223
-
224
- ${t}
225
-
226
- ${i.tail}`:`${i.head}
227
-
228
- ${t}`},"boundedPreview"),ES=n(e=>{let t=1;for(let r of e)r===`
229
- `&&t++;return t},"lineCount"),Ui=Li.effect(rr,Re.gen(function*(){let e=yield*N.Service,t=yield*he.Service,r=yield*Re.serviceOption(_e.Service),o=dc.join(t.data,Uu),a=Re.fn("ToolOutputStore.limits")(function*(){if(pc.isNone(r))return{maxLines:fc,maxBytes:mc};let l=yield*r.value.entries().pipe(Re.catch(()=>Re.succeed([]))),d=Object.assign({},...l.flatMap(p=>p.type==="document"?[p.info.tool_output??{}]:[]));return{maxLines:d.max_lines??fc,maxBytes:d.max_bytes??mc}}),s=Re.fn("ToolOutputStore.write")(function*(l){let d=dc.join(o,`tool_${ls.ascending()}`);return yield*e.ensureDir(o).pipe(Re.mapError(p=>new hn({operation:"write",cause:p}))),yield*e.writeFileString(d,l,{flag:"wx"}).pipe(Re.mapError(p=>new hn({operation:"write",cause:p}))),d}),i=Re.fn("ToolOutputStore.bound")(function*(l){let d=yield*a(),p=l.output.content.filter(S=>S.type==="file"),u=l.output.content.filter(S=>S.type==="text"),h=l.output.content.length===0?yield*Re.try({try:n(()=>JSON.stringify(l.output.structured,null,2)??String(l.output.structured),"try"),catch:n(S=>new hn({operation:"encode",cause:S}),"catch")}):u.map(S=>S.text).join("");if(ES(h)<=d.maxLines&&Buffer.byteLength(h,"utf-8")<=d.maxBytes)return{output:l.output,outputPaths:[]};let g=yield*s(h),x=`... output truncated; full content saved to ${g} ...`;return{output:{structured:l.output.structured,content:[{type:"text",text:SS(h,x,d.maxLines,d.maxBytes)},...p]},outputPaths:[g]}}),c=Re.fn("ToolOutputStore.cleanup")(function*(){let l=yield*e.readDirectory(o).pipe(Re.catch(()=>Re.succeed([]))),d=Date.now()-yc.toMillis(Lu);for(let p of l){if(!p.startsWith("tool_"))continue;let u=dc.join(o,p),g=(yield*e.stat(u).pipe(Re.catch(()=>Re.void)))?.mtime.pipe(pc.map(x=>x.getTime()),pc.getOrElse(()=>0));g!==void 0&&g<d&&(yield*e.remove(u).pipe(Re.catch(()=>Re.void)))}});return rr.of({limits:a,bound:i,cleanup:c})})),vS=A({service:rr,layer:Ui,deps:[N.node,he.node,_e.node]}),wS=A({service:rr,layer:Ui,deps:[N.node,he.node]}),ju=Li.effectDiscard(Re.gen(function*(){yield*(yield*rr).cleanup().pipe(Re.repeat(gS.spaced(yc.hours(1))),Re.forkScoped)})),kS=Fo({name:"tool-output-cleanup",layer:Li.merge(Ui,ju.pipe(Li.provide(Ui))),deps:[N.node,he.node]});var Or={};U(Or,{ApplicationTools:()=>Or,Service:()=>gn,node:()=>AS});import{Context as DS,Effect as Ec,Layer as RS}from"effect";var te={};U(te,{Failure:()=>TS,RegistrationError:()=>Ni,Tool:()=>te,definition:()=>bc,make:()=>IS,permission:()=>xc,settle:()=>Sc,validateName:()=>gc,withPermission:()=>OS});import{Effect as wt,Schema as Ir}from"effect";var TS=J,Ni=class extends Ir.TaggedErrorClass()("Tool.RegistrationError",{name:Ir.String,message:Ir.String}){static{n(this,"RegistrationError")}},hc=new WeakMap;function IS(e){let t=Object.freeze({}),r=new Map;return hc.set(t,{definition:n(o=>{let a=r.get(o);if(a)return a;let s=new ol({name:o,description:e.description,inputSchema:Fu(e.input),outputSchema:Fu(e.structured??e.output)});return r.set(o,s),s},"definition"),settle:n((o,a)=>Ir.decodeUnknownEffect(e.input)(o.input).pipe(wt.mapError(s=>new J({message:`Invalid tool input: ${s.message}`})),wt.flatMap(s=>e.execute(s,a).pipe(wt.flatMap(i=>Ir.encodeEffect(e.output)(i).pipe(wt.flatMap(c=>!e.structured||!e.toStructuredOutput?wt.succeed({output:c,structured:c}):Ir.encodeEffect(e.structured)(e.toStructuredOutput({input:s,output:c})).pipe(wt.map(l=>({output:c,structured:l})))),wt.mapError(c=>new J({message:`Tool returned an invalid value for its output schema: ${c.message}`})))),wt.map(({output:i,structured:c})=>({structured:c,content:e.toModelOutput?.({input:s,output:i}).map(l=>l.type==="text"?{type:"text",text:l.text}:{type:"file",uri:`data:${l.mime};base64,${l.data}`,mime:l.mime,name:l.name})??(typeof i=="string"?[{type:"text",text:i}]:[])}))))),"settle")}),t}n(IS,"make");var gc=n(e=>/^[A-Za-z][A-Za-z0-9_-]{0,63}$/.test(e)?wt.void:wt.fail(new Ni({name:e,message:`Invalid tool name: ${e}`})),"validateName"),OS=n((e,t)=>{let r=Object.freeze({});return hc.set(r,{...ji(e),permission:t}),r},"withPermission"),xc=n((e,t)=>ji(e).permission??t,"permission"),bc=n((e,t)=>ji(t).definition(e),"definition"),Sc=n((e,t,r)=>ji(e).settle(t,r),"settle");function ji(e){let t=hc.get(e);if(!t)throw new TypeError("Invalid Core Tool value");return t}n(ji,"runtimeOf");function Fu(e){let t=Ir.toJsonSchemaDocument(e);return Object.keys(t.definitions).length===0?t.schema:{...t.schema,$defs:t.definitions}}n(Fu,"toJsonSchema");var gn=class extends DS.Service()("@opencode/ApplicationTools"){static{n(this,"Service")}},_S=RS.effect(gn,Ec.gen(function*(){let e=Qc.create({initial:n(()=>({entries:new Map}),"initial"),draft:n(t=>({set:n((r,o)=>{t.entries.set(r,o)},"set")}),"draft")});return gn.of({register:Ec.fn("ApplicationTools.register")(function*(t){let r=Object.entries(t);if(r.length===0)return;yield*Ec.forEach(r,([a])=>te.validateName(a),{discard:!0});let o=r.map(([a,s])=>[a,{identity:{},tool:s}]);yield*e.transform(a=>{for(let[s,i]of o)a.set(s,i)})}),entries:n(()=>e.get().entries,"entries")})})),AS=Fo({service:gn,layer:_S,deps:[]});var ie={};U(ie,{Service:()=>vc,Tools:()=>ie});import{Context as PS}from"effect";var vc=class extends PS.Service()("@opencode/v2/Tools"){static{n(this,"Service")}};var Dr=class extends CS.Service()("@opencode/v2/ToolRegistry"){static{n(this,"Service")}},MS=wc.effect(Dr,Ye.gen(function*(){let e=yield*Or.Service,t=yield*Ft.Service,r=new Map,o=Ye.fn("ToolRegistry.settle")(function*(a,s){let i=r.get(a.call.name)?.at(-1)?.registration??e.entries().get(a.call.name);if(!i)return{result:{type:"error",value:s?`Stale tool call: ${a.call.name}`:`Unknown tool: ${a.call.name}`}};if(s&&i.identity!==s)return{result:{type:"error",value:`Stale tool call: ${a.call.name}`}};let c=yield*Sc(i.tool,a.call,{sessionID:a.sessionID,agent:a.agent,assistantMessageID:a.assistantMessageID,toolCallID:a.call.id}).pipe(Ye.map(u=>({output:u})),Ye.catchTag("LLM.ToolFailure",u=>Ye.succeed({result:{type:"error",value:u.message}})));if("result"in c)return c;let l=c.output,d=yield*t.bound({sessionID:a.sessionID,toolCallID:a.call.id,output:l}),p=Vr.toResultValue(d.output);return p.type==="error"?d.outputPaths.length>0?{result:p,outputPaths:d.outputPaths}:{result:p}:d.outputPaths.length>0?{result:p,output:d.output,outputPaths:d.outputPaths}:{result:p,output:d.output}});return Dr.of({register:Ye.fn("ToolRegistry.register")(function*(a){let s=Object.entries(a);s.length!==0&&(yield*Ye.forEach(s,([i])=>gc(i),{discard:!0}),yield*Ye.uninterruptible(Ye.gen(function*(){let i={};for(let[c,l]of s)r.set(c,[...r.get(c)??[],{token:i,registration:{identity:{},tool:l}}]);yield*Ye.addFinalizer(()=>Ye.sync(()=>{for(let[c]of s){let l=r.get(c)?.filter(d=>d.token!==i)??[];l.length>0?r.set(c,l):r.delete(c)}}))})))}),materialize:Ye.fn("ToolRegistry.materialize")(function*(a=[]){let s=new Map(e.entries());for(let[i,c]of r){let l=c.at(-1)?.registration;l&&s.set(i,l)}for(let[i,c]of s)LS(xc(c.tool,i),a)&&s.delete(i);return{definitions:Array.from(s,([i,c])=>bc(i,c.tool)),settle:n(i=>{let c=s.get(i.call.name);return c?o(i,c.identity):Ye.succeed({result:{type:"error",value:`Unknown tool: ${i.call.name}`}})},"settle")}})})})),$u=wc.effect(ie.Service,Dr.use(e=>Ye.succeed(ie.Service.of({register:e.register})))).pipe(wc.provideMerge(MS));function LS(e,t){let r=t.findLast(o=>dl.match(e,o.action));return r?.resource==="*"&&r.effect==="deny"}n(LS,"whollyDisabled");var US=A({service:Dr,layer:$u,deps:[Or.node,Ft.node]}),NS=A({service:ie.Service,layer:$u,deps:[Or.node,Ft.node]});var xn={};U(xn,{SessionContextEpoch:()=>xn,initialize:()=>$S,prepare:()=>zS,reset:()=>HS});import{eq as po}from"drizzle-orm";import{DateTime as jS,Effect as Ie,Schema as FS}from"effect";function $S(e,t,r){return qS(e,t,r).pipe(Ie.withSpan("SessionContextEpoch.initialize"))}n($S,"initialize");function zS(e,t,r,o){return WS(e,t,r,o).pipe(Ie.withSpan("SessionContextEpoch.prepare"))}n(zS,"prepare");var WS=Ie.fnUntraced(function*(e,t,r,o){let[a,s,i]=yield*Ie.all([r,VS(e,o),Ko.latestCompaction(e,o)],{concurrency:"unbounded"});if(!s){let p=yield*Y.initialize(a),u=yield*zu(e,o,p);return{baseline:p.baseline,baselineSeq:u}}let c=yield*FS.decodeUnknownEffect(Y.Snapshot)(s.snapshot).pipe(Ie.mapError(p=>new Sl({sessionID:o,details:String(p)}))),l=i!==void 0&&i.seq>s.baseline_seq?i.seq:void 0,d=l?yield*Y.replace(a,c):yield*Y.reconcile(a,c);if(d._tag==="Unchanged"||d._tag==="ReplacementBlocked")return{baseline:s.baseline,baselineSeq:s.baseline_seq};if(d._tag==="ReplacementReady"){let p=l??(yield*Se.latestSequence(e,o));return yield*GS(e,o,p,d.generation),{baseline:d.generation.baseline,baselineSeq:p}}return yield*t.publish(pe.ContextUpdated,{sessionID:o,messageID:Xr.ID.create(),timestamp:yield*jS.now,text:d.text},{commit:n(()=>KS(e,o,d.snapshot).pipe(Ie.orDie),"commit")}),{baseline:s.baseline,baselineSeq:s.baseline_seq}}),qS=Ie.fnUntraced(function*(e,t,r){if(yield*BS(e,r))return;let o=yield*t.pipe(Ie.flatMap(Y.initialize)),a=yield*zu(e,r,o);return{baseline:o.baseline,baselineSeq:a}}),BS=Ie.fn("SessionContextEpoch.exists")(function*(e,t){return(yield*e.select({sessionID:ze.session_id}).from(ze).where(po(ze.session_id,t)).get().pipe(Ie.orDie))!==void 0}),VS=Ie.fn("SessionContextEpoch.find")(function*(e,t){return yield*e.select().from(ze).where(po(ze.session_id,t)).get().pipe(Ie.orDie)}),HS=Ie.fn("SessionContextEpoch.reset")(function*(e,t){yield*e.delete(ze).where(po(ze.session_id,t)).run().pipe(Ie.orDie)}),zu=Ie.fnUntraced(function*(e,t,r){let o=yield*Se.latestSequence(e,t);return yield*e.insert(ze).values({session_id:t,baseline:r.baseline,snapshot:r.snapshot,baseline_seq:o}).run().pipe(Ie.orDie),o}),GS=Ie.fnUntraced(function*(e,t,r,o){if(!(yield*e.update(ze).set({baseline:o.baseline,snapshot:o.snapshot,baseline_seq:r}).where(po(ze.session_id,t)).returning({sessionID:ze.session_id}).get().pipe(Ie.orDie)))return yield*Ie.die("Context Epoch not found")}),KS=Ie.fnUntraced(function*(e,t,r){if(!(yield*e.update(ze).set({snapshot:r}).where(po(ze.session_id,t)).returning({sessionID:ze.session_id}).get().pipe(Ie.orDie)))return yield*Ie.die("Context Epoch not found")});var uo={};U(uo,{SessionCompaction:()=>uo,buildInPlacePrompt:()=>iE,buildPrompt:()=>Gu,make:()=>sE,serializeToolContent:()=>Hu});import{DateTime as Wu,Effect as bn,Stream as YS}from"effect";var Rr={};U(Rr,{Token:()=>Rr,estimate:()=>XS});var JS=4,XS=n(e=>Math.max(0,Math.round(e.length/JS)),"estimate");var QS=2e4,ZS=8e3,qu=2e3,Bu=4096,kc=`Output exactly the Markdown structure shown inside <template> and keep the section order unchanged. Do not include the <template> tags in your response.
230
- <template>
231
- ## Objective
232
- - [one or two brief sentences describing what the user is trying to accomplish]
233
-
234
- ## Important Details
235
- - [constraints/preferences, decisions and why, important facts/assumptions, exact context needed to continue, or "(none)"]
236
-
237
- ## Work State
238
- ### Completed
239
- - [finished work, verified facts, or changes made; otherwise "(none)"]
240
-
241
- ### Active
242
- - [current work, partial changes, or investigation state; otherwise "(none)"]
243
-
244
- ### Blocked
245
- - [blockers, failing commands, or unknowns; otherwise "(none)"]
246
-
247
- ## Errors and Fixes
248
- - [each error hit, what caused it and what fixed it, so it is not hit again; otherwise "(none)"]
249
-
250
- ## Checked So Far
251
- - [what was run or looked at to check the work, and what it showed; otherwise "(none)"]
252
-
253
- ## Next Move
254
- 1. [immediate concrete action, with the last instruction you were acting on quoted word for word, or "(none)"]
255
- 2. [next action if known, or "(none)"]
256
-
257
- ## Relevant Files
258
- - [file or directory path: why it matters, or "(none)"]
259
- </template>
260
-
261
- Rules:
262
- - Keep every section, even when empty.
263
- - Use terse bullets, not prose paragraphs.
264
- - Preserve exact file paths, symbols, commands, error strings, URLs, and identifiers when known.
265
- - Do not mention the summary process or that context was compacted.`,eE=`The <prior-summary> summarizes everything that happened before the <conversation>. Construct a new summary that combines both. The <prior-summary> is discarded after this: anything you do not carry into the new summary is lost.
266
-
267
- When combining:
268
- - Carry forward objectives, constraints, user directives, decisions, and parallel workstreams from the <prior-summary> even when the <conversation> does not mention them. Drop only what is finished and no longer needed.
269
- - The <conversation> is more recent than the <prior-summary>. Where they conflict, the conversation wins: state the corrected fact and drop the old claim.
270
- - Add new progress, decisions, constraints, and context from the conversation.
271
- - Move completed work from "Active" to "Completed".
272
- - If a blocker has been resolved, update the summary to reflect that while keeping any details still needed to continue the work.
273
- - Update "Objective" and "Next Move" to reflect the current work state.`,tE=n(e=>Rr.estimate(JSON.stringify(e)),"estimate"),Vu=n(e=>e.length<=qu?e:`${e.slice(0,qu)}
274
- [truncated]`,"truncate"),Hu=n(e=>e.map(t=>t.type==="text"?t.text:`[Attached ${t.mime}${t.name===void 0?"":`: ${t.name}`}]`).join(`
275
- `),"serializeToolContent"),rE=n(e=>{if(e.type==="user"){let t=e.files?.map(r=>`[Attached ${r.mime}: ${r.name??r.uri}]`)??[];return[`[User]: ${e.text}`,...t].join(`
276
- `)}return e.type==="assistant"?e.content.flatMap(t=>{if(t.type==="text")return[`[Assistant]: ${t.text}`];if(t.type==="reasoning")return t.text?[`[Assistant reasoning]: ${t.text}`]:[];let r=typeof t.state.input=="string"?t.state.input:JSON.stringify(t.state.input);return t.state.status==="completed"?[`[Assistant tool call]: ${t.name}(${r})`,`[Tool result]: ${Vu(Hu(t.state.content))}`]:t.state.status==="error"?[`[Assistant tool call]: ${t.name}(${r})`,`[Tool error]: ${t.state.error.message}`]:[`[Assistant tool call]: ${t.name}(${r})`]}).join(`
277
- `):e.type==="system"?`[System update]: ${e.text}`:e.type==="synthetic"?`[Synthetic context]: ${e.text}`:e.type==="shell"?`[Shell]: ${e.command}
278
- ${Vu(e.output)}`:""},"serialize"),nE=n(e=>e.filter(r=>r.type==="document").flatMap(r=>r.info.compaction?[r.info.compaction]:[]).reduce((r,o)=>({auto:o.auto??r.auto,buffer:o.buffer??r.buffer,tokens:o.keep?.tokens??r.tokens}),{auto:!0,buffer:QS,tokens:ZS}),"settings"),oE=n((e,t)=>{let r=e.filter(s=>s.message.type!=="compaction").map(s=>rE(s.message)).filter(Boolean);if(r.length===0)return;let o=0,a=r.length;for(let s=r.length-1;s>=0;s--){let i=o+Rr.estimate(r[s]);if(i>t)break;o=i,a=s}return{head:r.slice(0,a).join(`
279
-
280
- `),recent:r.slice(a).join(`
281
-
282
- `)}},"select"),Gu=n(e=>{let t=`Here is the conversation so far:
283
-
284
- <conversation>
285
- ${e.context.join(`
286
-
287
- `)}
288
- </conversation>`;return e.previousSummary?[t,`Here is the summary of the conversation before the <conversation> above:
289
-
290
- <prior-summary>
291
- ${e.previousSummary}
292
- </prior-summary>`,eE,kc].join(`
293
-
294
- `):[t,"Create a new anchored summary from the conversation history in the <conversation> tags above so another coding agent can continue the work.",kc].join(`
295
-
296
- `)},"buildPrompt"),iE=n(e=>["Create a new anchored summary of the conversation above so another coding agent can continue the work. Do not call any tools: respond only with the summary.",...e.previousSummary?["The conversation above starts from an earlier summary. Carry forward from it what is still needed (objectives, constraints, user directives, decisions, parallel workstreams), drop only what is finished, and where it conflicts with what came after, the later conversation wins."]:[],kc].join(`
297
-
298
- `),"buildInPlacePrompt"),sE=n(e=>{let t=nE(e.config),r=bn.fn("SessionCompaction.compactAfterOverflow")(function*(a){let s=a.model.route.defaults.limits?.context;if(s===void 0||s<=0)return!1;let i=a.request.generation?.maxTokens??a.model.route.defaults.limits?.output??0,c=oE(a.entries,t.tokens),l=a.entries.find(f=>f.message.type==="compaction")?.message;if(!c||c.head.length===0&&l?.type!=="compaction")return!1;let d=Gu({previousSummary:l?.type==="compaction"?l.summary:void 0,context:[l?.type==="compaction"?l.recent:"",c.head].filter(Boolean)}),p=Math.min(i||Bu,Bu);if(Rr.estimate(d)>s-p)return!1;let u=Xr.ID.create();yield*e.events.publish(pe.Compaction.Started,{sessionID:a.sessionID,messageID:u,timestamp:yield*Wu.now,reason:"auto"});let h=[],g=!1,x=yield*e.llm.stream(Ho.request({model:a.model,http:a.request.http,messages:[ot.user(d)],tools:[],generation:{maxTokens:p}})).pipe(YS.runForEach(f=>(Hr.is.providerError(f)&&(g=!0),Hr.is.textDelta(f)&&h.push(f.text),bn.void)),bn.as(!0),bn.catchTag("LLM.Error",()=>bn.succeed(!1))),S=h.join("");return!x||g||!S.trim()?!1:(yield*e.events.publish(pe.Compaction.Ended,{sessionID:a.sessionID,messageID:u,timestamp:yield*Wu.now,reason:"auto",text:S,recent:c.recent}),!0)});return{compactIfNeeded:bn.fn("SessionCompaction.compactIfNeeded")(function*(a){if(!t.auto)return!1;let s=a.model.route.defaults.limits?.context;if(s===void 0||s<=0)return!1;let i=a.request.generation?.maxTokens??a.model.route.defaults.limits?.output??0;return tE({system:a.request.system,messages:a.request.messages,tools:a.request.tools})<=s-Math.max(i,t.buffer)?!1:yield*r(a)}),compactAfterOverflow:r}},"make");import{DateTime as aE,Effect as G}from"effect";var fo=n(e=>Math.max(0,Number.isFinite(e)?e??0:0),"safe"),cE=n(e=>{let t=fo(e?.reasoningTokens),r=fo(e?.cacheReadInputTokens),o=fo(e?.cacheWriteInputTokens);return{input:fo(e?.nonCachedInputTokens),output:fo(e?.visibleOutputTokens),reasoning:t,cache:{read:r,write:o}}},"tokens"),Ju=n(e=>typeof e=="object"&&e!==null&&!Array.isArray(e)?e:{value:e},"record"),Ku=n(e=>{if(typeof e=="string")return e;try{return JSON.stringify(e)??String(e)}catch{return String(e)}},"message"),lE=n((e,t)=>{if(t.type==="error")return{error:{type:"unknown",message:Ku(t.value)}};let r=e??Vr.fromResultValue(t);if(!r)throw new Error(`Unsupported tool result: ${Ku(t)}`);return{structured:Ju(r.structured),content:r.content}},"settledOutput"),Xu=n((e,t)=>{let r=new Map,o=aE.now,a,s=!1,i=!1,c=!1,l,d=G.fnUntraced(function*(){return a!==void 0||(a=Xr.ID.create(),s=!0,yield*e.publish(pe.Step.Started,{...t,assistantMessageID:a,timestamp:yield*o,snapshot:t.snapshot})),a}),p=n(()=>a===void 0?G.die("Tool event before assistant step start"):G.succeed(a),"currentAssistantMessageID"),u=n((y,T)=>{let O=new Map,L=n(C=>G.suspend(()=>O.has(C)?G.die(`Duplicate ${y} start: ${C}`):(O.set(C,[]),G.void)),"start"),I=n((C,R)=>G.suspend(()=>{let ae=O.get(C);return ae?(ae.push(R),G.void):G.die(`${y} delta before start: ${C}`)}),"append"),_=G.fnUntraced(function*(C,R){let ae=O.get(C);if(!ae)return yield*G.die(`${y} end before start: ${C}`);yield*T(C,ae.join(""),R),O.delete(C)}),z=G.fnUntraced(function*(){for(let C of O.keys())yield*_(C)});return{start:L,append:I,end:_,flush:z}},"fragments"),h=u("text",(y,T)=>G.gen(function*(){yield*e.publish(pe.Text.Ended,{sessionID:t.sessionID,assistantMessageID:yield*p(),timestamp:yield*o,textID:y,text:T})})),g=u("reasoning",(y,T,O)=>G.gen(function*(){yield*e.publish(pe.Reasoning.Ended,{sessionID:t.sessionID,assistantMessageID:yield*p(),timestamp:yield*o,reasoningID:y,text:T,providerMetadata:O})})),x=u("tool input",(y,T)=>G.gen(function*(){let O=r.get(y);if(!O)return yield*G.die(`Tool input end before start: ${y}`);yield*e.publish(pe.Tool.Input.Ended,{sessionID:t.sessionID,timestamp:yield*o,assistantMessageID:O.assistantMessageID,callID:y,text:T}),O.inputEnded=!0})),S=G.fnUntraced(function*(){yield*h.flush(),yield*g.flush(),yield*x.flush()}),f=G.fnUntraced(function*(y){if(r.has(y.id))return yield*G.die(`Duplicate tool input start: ${y.id}`);let T=yield*d();r.set(y.id,{assistantMessageID:T,name:y.name,inputEnded:!1,called:!1,settled:!1,providerExecuted:!1}),yield*x.start(y.id),yield*e.publish(pe.Tool.Input.Started,{sessionID:t.sessionID,timestamp:yield*o,assistantMessageID:T,callID:y.id,name:y.name})}),v=G.fnUntraced(function*(y){let T=r.get(y.id);if(!T)return yield*G.die(`Tool input end before start: ${y.id}`);if(T.name!==y.name)return yield*G.die(`Tool input name changed for ${y.id}: ${T.name} -> ${y.name}`);if(T.inputEnded)return yield*G.die(`Duplicate tool input end: ${y.id}`);yield*x.end(y.id)}),E=G.fn("SessionRunner.flush")(function*(){yield*S()}),m=G.fnUntraced(function*(y){if(i)return;yield*E();let T=yield*d();s=!1,i=!0,yield*e.publish(pe.Step.Failed,{sessionID:t.sessionID,timestamp:yield*o,assistantMessageID:T,error:{type:"unknown",message:y}})}),b=G.fn("SessionRunner.failUnsettledTools")(function*(y,T=!1){for(let[O,L]of r)L.settled||T&&!L.providerExecuted||(L.settled=!0,yield*e.publish(pe.Tool.Failed,{sessionID:t.sessionID,timestamp:yield*o,assistantMessageID:L.assistantMessageID,callID:O,error:{type:"unknown",message:y},provider:{executed:L.providerExecuted,...L.providerMetadata===void 0?{}:{metadata:L.providerMetadata}}}))}),w=n(y=>{let T=r.get(y);return T?G.succeed(T.assistantMessageID):G.die(`Unknown tool call: ${y}`)},"assistantMessageIDForTool");return{publish:G.fn("SessionRunner.publishLLMEvent")(function*(y,T=[]){switch(y.type){case"step-start":return;case"text-start":yield*h.start(y.id),yield*e.publish(pe.Text.Started,{sessionID:t.sessionID,assistantMessageID:yield*d(),timestamp:yield*o,textID:y.id});return;case"text-delta":yield*h.append(y.id,y.text),yield*e.publish(pe.Text.Delta,{sessionID:t.sessionID,assistantMessageID:yield*p(),timestamp:yield*o,textID:y.id,delta:y.text});return;case"text-end":yield*h.end(y.id);return;case"reasoning-start":yield*g.start(y.id),yield*e.publish(pe.Reasoning.Started,{sessionID:t.sessionID,assistantMessageID:yield*d(),timestamp:yield*o,reasoningID:y.id,providerMetadata:y.providerMetadata});return;case"reasoning-delta":yield*g.append(y.id,y.text),yield*e.publish(pe.Reasoning.Delta,{sessionID:t.sessionID,assistantMessageID:yield*p(),timestamp:yield*o,reasoningID:y.id,delta:y.text});return;case"reasoning-end":yield*g.end(y.id,y.providerMetadata);return;case"tool-input-start":yield*f(y);return;case"tool-input-delta":{let O=r.get(y.id);if(!O)return yield*G.die(`Tool input delta before start: ${y.id}`);if(O.name!==y.name)return yield*G.die(`Tool input name changed for ${y.id}: ${O.name} -> ${y.name}`);if(O.inputEnded)return yield*G.die(`Tool input delta after end: ${y.id}`);yield*x.append(y.id,y.text),yield*e.publish(pe.Tool.Input.Delta,{sessionID:t.sessionID,timestamp:yield*o,assistantMessageID:O.assistantMessageID,callID:y.id,delta:y.text});return}case"tool-input-end":yield*v(y);return;case"tool-call":{r.has(y.id)||(yield*f(y));let O=r.get(y.id);if(O.inputEnded||(yield*v(y)),O.name!==y.name)return yield*G.die(`Tool call name changed for ${y.id}: ${O.name} -> ${y.name}`);if(O.called)return yield*G.die(`Duplicate tool call: ${y.id}`);O.called=!0,O.providerExecuted=y.providerExecuted===!0,O.providerMetadata=y.providerMetadata,yield*e.publish(pe.Tool.Called,{sessionID:t.sessionID,timestamp:yield*o,assistantMessageID:O.assistantMessageID,callID:y.id,tool:y.name,input:Ju(y.input),provider:{executed:O.providerExecuted,...y.providerMetadata===void 0?{}:{metadata:y.providerMetadata}}});return}case"tool-result":{let O=r.get(y.id);if(!O?.called)return yield*G.die(`Tool result before call: ${y.id}`);if(O.name!==y.name)return yield*G.die(`Tool result name changed for ${y.id}: ${O.name} -> ${y.name}`);if(O.settled)return y.result.type==="error"?void 0:yield*G.die(`Duplicate tool result: ${y.id}`);O.settled=!0;let L=lE(y.output,y.result),I={executed:y.providerExecuted===!0||O.providerExecuted,...y.providerMetadata===void 0?{}:{metadata:y.providerMetadata}};if("error"in L){yield*e.publish(pe.Tool.Failed,{sessionID:t.sessionID,timestamp:yield*o,assistantMessageID:O.assistantMessageID,callID:y.id,error:L.error,result:y.result,provider:I});return}yield*e.publish(pe.Tool.Success,{sessionID:t.sessionID,timestamp:yield*o,assistantMessageID:O.assistantMessageID,callID:y.id,...L,outputPaths:T,...I.executed?{result:y.result}:{},provider:I});return}case"tool-error":{let O=r.get(y.id);if(!O?.called)return yield*G.die(`Tool error before call: ${y.id}`);if(O.name!==y.name)return yield*G.die(`Tool error name changed for ${y.id}: ${O.name} -> ${y.name}`);if(O.settled)return yield*G.die(`Duplicate tool error: ${y.id}`);O.settled=!0,yield*e.publish(pe.Tool.Failed,{sessionID:t.sessionID,timestamp:yield*o,assistantMessageID:O.assistantMessageID,callID:y.id,error:{type:"unknown",message:y.message},provider:{executed:O.providerExecuted,...y.providerMetadata===void 0?{}:{metadata:y.providerMetadata}}});return}case"step-finish":if(yield*E(),s=!1,l)return yield*G.die("Duplicate step finish");l={finish:y.reason,tokens:cE(y.usage)};return;case"finish":return;case"provider-error":c=!0,yield*m(y.message);return}}),flush:E,failAssistant:m,failUnsettledTools:b,hasActiveAssistant:n(()=>s,"hasActiveAssistant"),hasAssistantStarted:n(()=>a!==void 0,"hasAssistantStarted"),hasProviderError:n(()=>c,"hasProviderError"),stepSettlement:n(()=>l,"stepSettlement"),startAssistant:d,assistantMessageID:w}},"createLLMEventPublisher");var dE=n(e=>({type:"media",mediaType:e.mime,data:e.uri,filename:e.name,metadata:e.description===void 0?void 0:{description:e.description}}),"media"),pE=n(e=>{if(e.state.status!=="pending")return e.state.input;try{return JSON.parse(e.state.input)}catch{return e.state.input}},"toolInput"),uE=n((e,t)=>nl.make({id:e.id,name:e.name,input:pE(e),providerExecuted:e.provider?.executed,providerMetadata:t}),"toolCall"),Yu=n((e,t)=>{if(e.state.status==="completed"){let r=e.provider?.executed===!0&&e.state.result!==void 0?e.state.result:Vr.toResultValue({structured:e.state.structured,content:e.state.content});return us.make({id:e.id,name:e.name,result:r,providerExecuted:e.provider?.executed,providerMetadata:t})}if(e.state.status==="error")return us.make({id:e.id,name:e.name,result:e.provider?.executed===!0&&e.state.result!==void 0?e.state.result:{error:e.state.error,content:e.state.content,structured:e.state.structured},resultType:"error",providerExecuted:e.provider?.executed,providerMetadata:t})},"toolResult"),fE=n((e,t)=>{let r=String(e.model.providerID)===String(t.provider)&&String(e.model.id)===String(t.id),o=r&&e.error===void 0,s=e.content.flatMap(c=>{if(c.type==="text")return[{type:"text",text:c.text}];if(c.type==="reasoning")return r?[{type:"reasoning",text:c.text,providerMetadata:o?c.providerMetadata:void 0}]:c.text.length>0?[{type:"text",text:c.text}]:[];let l=uE(c,o?c.provider?.metadata:void 0);if(c.provider?.executed!==!0)return[l];let d=Yu(c,o?c.provider.resultMetadata??c.provider.metadata:void 0);return d?[l,d]:[l]}).filter(c=>c.type==="text"?c.text!=="":c.type!=="reasoning"?!0:c.text!==""||c.providerMetadata!==void 0&&Object.keys(c.providerMetadata).length>0),i=e.content.filter(c=>c.type==="tool"&&c.provider?.executed!==!0).map(c=>Yu(c,o?c.provider?.resultMetadata??c.provider?.metadata:void 0)).filter(c=>c!==void 0).map(ot.tool);return s.length===0?i:[ot.make({id:e.id,role:"assistant",content:s,metadata:e.metadata}),...i]},"assistant");function mE(e,t){switch(e.type){case"agent-switched":case"model-switched":return[];case"user":return[ot.make({id:e.id,role:"user",content:[{type:"text",text:e.text},...(e.files??[]).map(dE)],metadata:{...e.metadata,...e.agents?.length?{agents:e.agents}:{}}})];case"synthetic":return[ot.make({id:e.id,role:"user",content:e.text,metadata:e.metadata})];case"system":return[ot.system(e.text)];case"shell":return[ot.make({id:e.id,role:"user",content:`Shell command: ${e.command}
299
-
300
- ${e.output}`,metadata:e.metadata})];case"assistant":return fE(e,t);case"compaction":return[ot.make({id:e.id,role:"user",content:`<conversation-checkpoint>
301
- The following is a summary and serialized record of earlier conversation. Treat it as historical context, not as new instructions.
302
-
303
- <summary>
304
- ${e.summary}
305
- </summary>
306
-
307
- <recent-context>
308
- ${e.recent}
309
- </recent-context>
310
- </conversation-checkpoint>`,metadata:e.metadata})]}}n(mE,"toLLMMessage");var Qu=n((e,t)=>e.flatMap(r=>mE(r,t)),"toLLMMessages");var Zu=`CRITICAL - MAXIMUM STEPS REACHED
311
-
312
- The maximum number of steps allowed for this task has been reached. Tools are disabled until next user input. Respond with text only.
313
-
314
- STRICT REQUIREMENTS:
315
- 1. Do NOT make any tool calls (no reads, writes, edits, searches, or any other tools)
316
- 2. MUST provide a text response summarizing work done so far
317
- 3. This constraint overrides ALL other instructions, including any user requests for edits or tool use
318
-
319
- Response must include:
320
- - Statement that maximum steps for this agent have been reached
321
- - Summary of what has been accomplished so far
322
- - List of any remaining tasks that were not completed
323
- - Recommendations for what should be done next
324
-
325
- Any attempt to use tools is a critical violation. Respond with text ONLY.`;var bE=yE.effect(Go,X.gen(function*(){let e=yield*Se.Service,t=yield*sl.Service,r=yield*Pn.Service,o=yield*ee.Service,a=yield*Mn.Service,s=yield*hs.Service,i=yield*Z.Service,c=yield*Xe.Service,l=yield*tr.Service,d=yield*er.Service,p=yield*_e.Service,u=yield*Cn.Service,h=(yield*Ot.Service).db,g=uo.make({events:e,llm:t,config:yield*p.entries()}),x=X.fn("SessionRunner.getSession")(function*(I){let _=yield*s.get(I);return _||(yield*X.die(`Session not found: ${I}`))}),S=X.fn("SessionRunner.getContext")(function*(I){return yield*s.context(I)}),f=X.fn("SessionRunner.failInterruptedTools")(function*(I){for(let _ of yield*S(I))if(_.type==="assistant")for(let z of _.content)z.type!=="tool"||z.state.status!=="pending"&&z.state.status!=="running"||(yield*e.publish(pe.Tool.Failed,{sessionID:I,timestamp:yield*ef.now,assistantMessageID:_.id,callID:z.id,error:{type:"unknown",message:"Tool execution interrupted"},provider:{executed:z.provider?.executed===!0,...z.provider?.metadata===void 0?{}:{metadata:z.provider.metadata}}}))}),v=n(I=>X.raceFirst(_r.join(I),_r.awaitEmpty(I)),"awaitToolFibers"),E=n(I=>I.reasons.some(_=>nr.isDieReason(_)&&(_.defect instanceof V.DeclinedError||_.defect instanceof ct.RejectedError)),"isUserDeclined");class m extends Error{constructor(z){super();this.transition=z}transition;static{n(this,"TurnTransitionError")}}let b=n(I=>new m({_tag:"ContinueAfterCompaction",step:I}),"continueAfterCompaction"),w=n(I=>new m({_tag:"ContinueAfterOverflowCompaction",step:I}),"continueAfterOverflowCompaction"),k=n(I=>X.all([c.load(),l.load(I),d.load()],{concurrency:"unbounded"}).pipe(X.map(Y.combine)),"loadSystemContext"),y=X.fn("SessionRunner.runTurn")(function*(I,_,z,C){let R=yield*x(I);if(R.location.directory!==i.directory||R.location.workspaceID!==i.workspaceID)return yield*X.interrupt;let ae=yield*r.select(R.agent),dt=yield*xn.initialize(h,k(ae),R.id),Ze=yield*_r.make(),$r=!1,rt=z;if(_){let me=yield*Se.latestSequence(h,R.id),Ce=0;_==="steer"&&(Ce=yield*Bt.promoteSteers(h,e,R.id,me)),_==="queue"&&(Ce+=Number(yield*Bt.promoteNextQueued(h,e,R.id)),Ce+=yield*Bt.promoteSteers(h,e,R.id,me)),Ce>0&&(rt=1)}let W=dt??(yield*xn.prepare(h,e,k(ae),R.id)),$=yield*a.resolve(R),q=yield*Ko.entriesForRunner(h,R.id,W.baselineSeq),ne=q.map(me=>me.message),H=ae.info?.steps!==void 0&&rt>=ae.info.steps,P=H?void 0:yield*o.materialize(ae.info?.permissions),B=/^ses_[0-9a-f]{64}$/.test(R.id)?R.id.slice(4):R.id,Ve=Ho.request({model:$,http:{headers:{"x-opencode-session-id":R.id,...R.parentID?{"x-opencode-parent-session-id":R.parentID}:{},"x-session-affinity":R.id,"X-Session-Id":R.id,...R.parentID?{"x-parent-session-id":R.parentID}:{}}},providerOptions:{openai:{promptCacheKey:B}},system:[ae.info?.system,W.baseline].filter(me=>me!==void 0&&me.length>0).map(rl.make),messages:[...Qu(ne,$),...H?[ot.assistant(Zu)]:[]],tools:P?.definitions??[],toolChoice:H?"none":void 0});if(yield*g.compactIfNeeded({sessionID:R.id,entries:q,model:$,request:Ve}))return yield*X.die(b(rt));let nt=yield*u.capture(),de=Xu(e,{sessionID:R.id,agent:ae.id,model:{id:$e.ID.make($.id),providerID:Q.ID.make($.provider),...R.model?.variant===void 0?{}:{variant:R.model.variant}},snapshot:nt}),Pe=gE.makeUnsafe(1).withPermit,Rn=n((me,Ce=[])=>Pe(de.publish(me,Ce)),"publish"),sr,_n=t.stream(Ve).pipe(xE.runForEach(me=>X.gen(function*(){if(sr||de.hasProviderError())return;if(Hr.is.providerError(me)&&fs(me)&&!de.hasAssistantStarted()){sr=me;return}if(yield*Rn(me),me.type!=="tool-call"||me.providerExecuted)return;if(!P){yield*Pe(de.failUnsettledTools("Tools are disabled after the maximum agent steps"));return}$r=!0;let Ce=yield*de.assistantMessageID(me.id);yield*X.uninterruptibleMask(An=>An(P.settle({sessionID:R.id,agent:ae.id,assistantMessageID:Ce,call:me})).pipe(X.flatMap(zr=>Rn(Hr.toolResult({id:me.id,name:me.name,result:zr.result,output:zr.output}),zr.outputPaths??[])))).pipe(_r.run(Ze))})),X.ensuring(Pe(de.flush())));return yield*X.uninterruptibleMask(me=>X.gen(function*(){let Ce=yield*me(_n).pipe(X.exit),An=Ce._tag==="Failure"?hE.getOrUndefined(nr.findErrorOption(Ce.cause)):void 0;if(C&&!de.hasAssistantStarted()&&fs(sr??An)&&(yield*me(C({sessionID:R.id,entries:q,model:$,request:Ve}))))return yield*X.die(w(rt));sr&&(yield*Rn(sr));let zr=An instanceof il?An:void 0;zr&&!de.hasProviderError()&&(yield*Pe(de.failUnsettledTools("Provider did not return a tool result",!0)),yield*Pe(de.failAssistant(zr.reason.message))),Ce._tag==="Failure"&&nr.hasInterrupts(Ce.cause)&&(yield*_r.clear(Ze));let gt=yield*me(v(Ze)).pipe(X.exit);if(gt._tag==="Failure"&&E(gt.cause))return yield*_r.clear(Ze),yield*Pe(de.failUnsettledTools("Tool execution interrupted")),yield*X.interrupt;if((Ce._tag==="Failure"&&nr.hasInterrupts(Ce.cause)||gt._tag==="Failure"&&nr.hasInterrupts(gt.cause))&&(yield*_r.clear(Ze),yield*Pe(de.failUnsettledTools("Tool execution interrupted")),de.hasActiveAssistant()&&(yield*Pe(de.failAssistant("Provider turn interrupted")))),gt._tag==="Failure"&&!nr.hasInterrupts(gt.cause)){let ar=nr.squash(gt.cause),cs=ar instanceof Error?ar.message:String(ar);yield*Pe(de.failUnsettledTools(`Tool execution failed: ${cs}`))}let as=de.stepSettlement();if(as&&!de.hasProviderError()){let ar=yield*u.capture(),cs=nt&&ar?yield*u.files({from:nt,to:ar}).pipe(X.catch(()=>X.succeed(void 0))):void 0;yield*Pe(e.publish(pe.Step.Ended,{sessionID:R.id,timestamp:yield*ef.now,assistantMessageID:yield*de.startAssistant(),finish:as.finish,cost:0,tokens:as.tokens,snapshot:ar,files:cs}))}return de.hasProviderError()&&(yield*Pe(de.failUnsettledTools("Tool execution interrupted"))),Ce._tag==="Success"&&!de.hasProviderError()&&(yield*Pe(de.failUnsettledTools("Provider did not return a tool result",!0))),Ce._tag==="Failure"?yield*X.failCause(Ce.cause):gt._tag==="Failure"&&nr.hasInterrupts(gt.cause)?yield*X.failCause(gt.cause):{needsContinuation:!de.hasProviderError()&&$r,step:rt}}))},X.scoped),T=X.fnUntraced(function*(I,_,z){return yield*y(I,_,z).pipe(X.catchDefect(X.fnUntraced(function*(C){return C instanceof m?C.transition._tag==="ContinueAfterOverflowCompaction"?yield*X.die("Post-compaction provider attempt cannot recover another overflow"):(yield*X.yieldNow,yield*T(I,void 0,C.transition.step)):yield*X.die(C)})))}),O=X.fnUntraced(function*(I,_,z){return yield*y(I,_,z,g.compactAfterOverflow).pipe(X.catchDefect(X.fnUntraced(function*(C){return C instanceof m?(yield*X.yieldNow,C.transition._tag==="ContinueAfterOverflowCompaction"?yield*T(I,void 0,C.transition.step):yield*O(I,void 0,C.transition.step)):yield*X.die(C)})))}),L=X.fn("SessionRunner.run")(function*(I){let _=yield*Bt.hasPending(h,I.sessionID,"steer"),z=_?!1:yield*Bt.hasPending(h,I.sessionID,"queue");if(!I.force&&!_&&!z)return;yield*f(I.sessionID);let C=_?"steer":z?"queue":void 0,R=I.force||_||z;for(;R;){let ae=!0,dt=1;for(;ae;){let Ze=yield*O(I.sessionID,C,dt);ae=Ze.needsContinuation,dt=Ze.step+1,C="steer",ae||(ae=yield*Bt.hasPending(h,I.sessionID,"steer"))}R=yield*Bt.hasPending(h,I.sessionID,"queue"),C=R?"queue":void 0}});return Go.of({run:L})})),tf=A({service:Go,layer:bE,deps:[Se.node,al,Pn.node,ee.node,Mn.node,hs.node,Z.node,Xe.node,tr.node,er.node,_e.node,Cn.node,Ot.node]});var kt={};U(kt,{Event:()=>sf,Info:()=>TE,Service:()=>vn,SessionTodo:()=>kt,node:()=>OE});import{asc as vE,eq as of}from"drizzle-orm";import{Context as wE,Effect as En,Layer as kE}from"effect";var Sn={};U(Sn,{Event:()=>EE,Info:()=>nf,SessionTodo:()=>Sn});import{Schema as mo}from"effect";var nf=mo.Struct({content:mo.String.annotate({description:"Brief description of the task"}),status:mo.String.annotate({description:"Current status of the task: pending, in_progress, completed, cancelled"}),priority:mo.String.annotate({description:"Priority level of the task: high, medium, low"})}).annotate({identifier:"Todo"}),rf=Fe({type:"todo.updated",schema:{sessionID:qr,todos:mo.Array(nf)}}),EE={Updated:rf,Definitions:xt(rf)};var TE=Sn.Info,sf=Sn.Event,vn=class extends wE.Service()("@opencode/v2/SessionTodo"){static{n(this,"Service")}},IE=kE.effect(vn,En.gen(function*(){let{db:e}=yield*Ot.Service,t=yield*Se.Service,r=En.fn("SessionTodo.update")(function*(a){yield*e.transaction(s=>En.gen(function*(){yield*s.delete(lr).where(of(lr.session_id,a.sessionID)).run(),a.todos.length!==0&&(yield*s.insert(lr).values(a.todos.map((i,c)=>({session_id:a.sessionID,content:i.content,status:i.status,priority:i.priority,position:c}))).run())})).pipe(En.orDie),yield*t.publish(sf.Updated,a)}),o=En.fn("SessionTodo.get")(function*(a){return(yield*e.select().from(lr).where(of(lr.session_id,a)).orderBy(vE(lr.position)).all().pipe(En.orDie)).map(i=>({content:i.content,status:i.status,priority:i.priority}))});return vn.of({update:r,get:o})})),OE=A({service:vn,layer:IE,deps:[Se.node,Ot.node]});var ho={};U(ho,{SystemContextBuiltIns:()=>ho,node:()=>$E});import{DateTime as NE,Effect as zi,Layer as jE,Schema as Wi}from"effect";var yo={};U(yo,{InstructionContext:()=>yo,node:()=>UE});import{Array as DE,Effect as ht,Layer as RE,Schema as Fi}from"effect";import{isAbsolute as _E,join as AE,relative as PE,sep as CE}from"path";var $i=class extends Fi.Class("InstructionContext.File")({path:ye,content:Fi.String}){static{n(this,"File")}},ME=Fi.Array($i),af=Y.Key.make("core/instructions"),LE=RE.effectDiscard(ht.gen(function*(){let e=yield*N.Service,t=yield*he.Service,r=yield*Z.Service,o=yield*Xe.Service,a=n(i=>Y.make({key:af,codec:Fi.toCodecJson(ME),load:ht.succeed(i),baseline:cf,update:n((c,l)=>`These instructions replace all previously loaded ambient instructions.
326
-
327
- ${cf(l)}`,"update"),removed:n(()=>"Previously loaded instructions no longer apply.","removed")}),"source"),s=ht.fn("InstructionContext.observe")(function*(){let i=yield*e.resolve(r.directory),c=yield*e.resolve(r.project.directory),l=PE(c,i),d=l===""||l!==".."&&!l.startsWith(`..${CE}`)&&!_E(l),p=new Set(yield*ht.forEach(pt.OPENCODE_DISABLE_PROJECT_CONFIG||!d?[]:yield*e.up({targets:["AGENTS.md"],start:i,stop:c}),e.resolve)),u=DE.dedupe([yield*e.resolve(AE(t.config,"AGENTS.md")),...p]),h=yield*ht.forEach(u,g=>e.readFileStringSafe(g).pipe(ht.map(x=>x===void 0?void 0:new $i({path:ye.make(g),content:x}))),{concurrency:"unbounded"});return h.some((g,x)=>g===void 0&&p.has(u[x]))?Y.unavailable:h.filter(g=>g!==void 0)});yield*o.register({key:af,load:s().pipe(ht.map(i=>i===Y.unavailable?a(i):i.length===0?Y.empty:a(i)),ht.catch(()=>ht.succeed(a(Y.unavailable))),ht.catchDefect(()=>ht.succeed(a(Y.unavailable))))})})),UE=A({name:"instruction-context",layer:LE,deps:[N.node,he.node,Z.node,Xe.node]});function cf(e){return e.map(t=>`Instructions from: ${t.path}
328
- ${t.content}`).join(`
329
-
330
- `)}n(cf,"render");var FE=jE.effectDiscard(zi.gen(function*(){let e=yield*Z.Service,t=yield*Xe.Service,r=["<env>",` Working directory: ${e.directory}`,` Workspace root folder: ${e.project.directory}`,` Is directory a git repo: ${e.vcs?.type==="git"?"yes":"no"}`,` Platform: ${process.platform}`,"</env>"].join(`
331
- `),o=Y.combine([Y.make({key:Y.Key.make("core/environment"),codec:Wi.toCodecJson(Wi.String),load:zi.succeed(r),baseline:n(a=>["Here is some useful information about the environment you are running in:",a].join(`
332
- `),"baseline"),update:n((a,s)=>["The environment you are running in is now:",s].join(`
333
- `),"update")}),Y.make({key:Y.Key.make("core/date"),codec:Wi.toCodecJson(Wi.String),load:NE.nowAsDate.pipe(zi.map(a=>a.toDateString())),baseline:n(a=>`Today's date: ${a}`,"baseline"),update:n((a,s)=>`Today's date is now: ${s}`,"update")})]);yield*t.register({key:Y.Key.make("core/builtins"),load:zi.succeed(o)})})),$E=A({name:"system-context-builtins",layer:FE,deps:[Z.node,Xe.node,yo.node,N.node,he.node]});var No={};U(No,{BuiltInTools:()=>No,node:()=>Nw});import{Layer as Uw}from"effect";var go={};U(go,{BashTool:()=>go,DEFAULT_TIMEOUT_MS:()=>qi,Input:()=>pf,MAX_CAPTURE_BYTES:()=>df,MAX_TIMEOUT_MS:()=>Bi,name:()=>Ic,node:()=>YE});import Tc from"path";import{Duration as lf,Effect as $t,Layer as zE,Schema as Ue}from"effect";import{ChildProcess as WE}from"effect/unstable/process";var Ic="bash",qi=120*1e3,Bi=600*1e3,df=1024*1024,pf=Ue.Struct({command:Ue.String.annotate({description:"Shell command string to execute"}),workdir:Ue.String.pipe(Ue.optional).annotate({description:"Working directory. Defaults to the active Location; relative paths resolve from that Location."}),timeout:Ge.check(Ue.isLessThanOrEqualTo(Bi)).pipe(Ue.optional).annotate({description:`Timeout in milliseconds. Defaults to ${qi} and may not exceed ${Bi}.`})}),uf=Ue.Struct({exit:Ue.Number.pipe(Ue.optional),truncated:Ue.Boolean,timeout:Ue.Boolean.pipe(Ue.optional)}),qE=Ue.Struct({...uf.fields,output:Ue.String,warnings:Ue.Array(Ue.String).pipe(Ue.optional)}),BE=n(()=>process.platform==="win32"?process.env.COMSPEC??"cmd.exe":"/bin/sh","defaultShell"),VE=n(e=>{let t=e.warnings?.length?`
334
-
335
- Warnings:
336
- ${e.warnings.map(r=>`- ${r}`).join(`
337
- `)}`:"";return e.timeout?`${t.trimStart()}${t?`
338
-
339
- `:""}Command timed out before completion.`:`${t.trimStart()}${t?`
340
-
341
- `:""}Command exited with code ${e.exit}.`},"modelOutput"),HE=n(e=>e.cause instanceof Error&&e.cause.message==="Timed out","isTimeout"),GE=n(e=>e.match(/(?:[^\s"']+|"[^"]*"|'[^']*')+/g)??[],"shellTokens"),KE=n(e=>e.replace(/^(['"])(.*)\1$/,"$2"),"unquote"),JE=$t.fn("BashTool.externalCommandDirectories")(function*(e,t,r){let o=new Set;for(let a of GE(t)){let s=KE(a).replace(/[;,|&]+$/,"");if(!Tc.isAbsolute(s))continue;let i=yield*e.resolve(s);N.contains(r,i)||o.add(yield*e.resolve(Tc.dirname(i)))}return[...o]}),XE=zE.effectDiscard($t.gen(function*(){let e=yield*ie.Service,t=yield*fe.Service,r=yield*N.Service,o=yield*ms.Service,a=yield*_e.Service,s=yield*V.Service;yield*e.register({[Ic]:te.make({description:`Execute one shell command string with the host user's filesystem, process, and network authority. The active Location is the default working directory. Relative workdir values resolve from that Location. External workdir values require external_directory approval; best-effort command-argument path warnings are advisory only. Timeout values are milliseconds (default: ${qi}; maximum: ${Bi}). Uses the configured shell when set; otherwise uses /bin/sh on POSIX and COMSPEC or cmd.exe on Windows.`,input:pf,output:qE,structured:uf,toStructuredOutput:n(({output:i})=>({truncated:i.truncated,...i.exit===void 0?{}:{exit:i.exit},...i.timeout===void 0?{}:{timeout:i.timeout}}),"toStructuredOutput"),toModelOutput:n(({output:i})=>[{type:"text",text:i.output},{type:"text",text:VE(i)}],"toModelOutput"),execute:n((i,c)=>$t.gen(function*(){let l={type:"tool",messageID:c.assistantMessageID,callID:c.toolCallID},d=yield*t.resolve({path:i.workdir??".",kind:"directory"}),p=d.externalDirectory;p&&(yield*s.assert({...fe.externalDirectoryPermission(p),sessionID:c.sessionID,agent:c.agent,source:l}));let u=(yield*JE(r,i.command,d.canonical)).map(m=>`Command argument references external directory ${Tc.join(m,"*").replaceAll("\\","/")}. Bash runs with host-user filesystem, process, and network authority; this scan is advisory only.`);if(yield*s.assert({action:Ic,resources:[i.command],save:[i.command],sessionID:c.sessionID,agent:c.agent,source:l}),(yield*r.stat(d.canonical)).type!=="Directory")return yield*$t.fail(new Error(`Working directory is not a directory: ${d.canonical}`));let h=yield*a.entries(),g=Object.assign({},...h.flatMap(m=>m.type==="document"?[m.info]:[])).shell??BE(),x=WE.make(i.command,[],{cwd:d.canonical,shell:g,stdin:"ignore",detached:process.platform!=="win32",forceKillAfter:lf.seconds(3)}),S=i.timeout??qi,f=yield*o.run(x,{combineOutput:!0,timeout:lf.millis(S),maxOutputBytes:df}).pipe($t.catchTag("AppProcessError",m=>HE(m)?$t.succeed(void 0):$t.fail(m)));if(!f)return{output:`Command exceeded timeout of ${S} ms. Retry with a larger timeout if the command is expected to take longer.`,truncated:!1,timeout:!0,...u.length?{warnings:u}:{}};let v=f.output?.toString("utf8")||"(no output)",E=f.outputTruncated?"[output capture truncated at the in-memory safety limit]":void 0;return{exit:f.exitCode,output:E?`${v}
342
-
343
- ${E}`:v,truncated:f.outputTruncated===!0,...u.length?{warnings:u}:{}}}).pipe($t.mapError(()=>new J({message:`Unable to execute command: ${i.command}`}))),"execute")})}).pipe($t.orDie)})),YE=A({name:"tool/bash",layer:XE,deps:[ee.node,fe.node,N.node,ms.node,_e.node,V.node]});var xo={};U(xo,{Applied:()=>gf,ApplyPatchTool:()=>xo,Input:()=>hf,Output:()=>xf,name:()=>yf,node:()=>fv,toModelOutput:()=>bf});import{createTwoFilesPatch as lv,diffLines as dv}from"diff";import{Effect as Tt,Layer as pv,Schema as zt}from"effect";var Ar={};U(Ar,{Patch:()=>Ar,derive:()=>ZE,joinBom:()=>ev,parse:()=>QE});function QE(e){let t=cv(e.trim()).split(`
344
- `),r=t.findIndex(i=>i.trim()==="*** Begin Patch"),o=t.findIndex(i=>i.trim()==="*** End Patch");if(r===-1||o===-1||r>=o)throw new Error("Invalid patch format: missing Begin/End markers");let a=[],s=r+1;for(;s<o;){let i=t[s];if(i.startsWith("*** Add File:")){let c=i.slice(13).trim();if(!c)throw new Error("Invalid add file path");let l=tv(t,s+1);a.push({type:"add",path:c,contents:l.content}),s=l.next;continue}if(i.startsWith("*** Delete File:")){let c=i.slice(16).trim();if(!c)throw new Error("Invalid delete file path");a.push({type:"delete",path:c}),s++;continue}if(i.startsWith("*** Update File:")){let c=i.slice(16).trim();if(!c)throw new Error("Invalid update file path");let l=s+1,d;if(t[l]?.startsWith("*** Move to:")){if(d=t[l].slice(12).trim(),!d)throw new Error("Invalid move file path");l++}let p=rv(t,l);if(p.chunks.length===0)throw new Error(`Invalid update hunk for ${c}: expected at least one @@ chunk`);a.push({type:"update",path:c,movePath:d,chunks:p.chunks}),s=p.next;continue}throw new Error(`Invalid patch line: ${i}`)}return a}n(QE,"parse");function ZE(e,t,r){let o=Dc(r),a=o.text.split(`
345
- `);a.at(-1)===""&&a.pop();let s=nv(a,e,t),i=[...a];for(let[l,d,p]of s.toReversed())i.splice(l,d,...p);i.at(-1)!==""&&i.push("");let c=Dc(i.join(`
346
- `));return{content:c.text,bom:o.bom||c.bom}}n(ZE,"derive");function ev(e,t){let r=Dc(e).text;return t?`\uFEFF${r}`:r}n(ev,"joinBom");function tv(e,t){let r=[],o=t;for(;o<e.length&&!e[o].startsWith("***");){if(!e[o].startsWith("+"))throw new Error(`Invalid add file line: ${e[o]}`);r.push(e[o].slice(1)),o++}return{content:r.join(`
347
- `),next:o}}n(tv,"parseAdd");function rv(e,t){let r=[],o=t;for(;o<e.length&&!e[o].startsWith("***");){if(!e[o].startsWith("@@"))throw new Error(`Invalid update file line: ${e[o]}`);let a=e[o].slice(2).trim()||void 0,s=[],i=[],c=!1;for(o++;o<e.length&&!e[o].startsWith("@@");){let l=e[o];if(l==="*** End of File"){c=!0,o++;break}if(l.startsWith("***"))break;if(l.startsWith(" "))s.push(l.slice(1)),i.push(l.slice(1));else if(l.startsWith("-"))s.push(l.slice(1));else if(l.startsWith("+"))i.push(l.slice(1));else throw new Error(`Invalid update chunk line: ${l}`);o++}r.push({oldLines:s,newLines:i,changeContext:a,endOfFile:c||void 0})}return{chunks:r,next:o}}n(rv,"parseUpdate");function nv(e,t,r){let o=[],a=0;for(let s of r){if(s.changeContext){let d=Oc(e,[s.changeContext],a);if(d===-1)throw new Error(`Failed to find context '${s.changeContext}' in ${t}`);a=d+1}if(s.oldLines.length===0){o.push([e.length,0,s.newLines]);continue}let i=s.oldLines,c=s.newLines,l=Oc(e,i,a,s.endOfFile);if(l===-1&&i.at(-1)===""&&(i=i.slice(0,-1),c.at(-1)===""&&(c=c.slice(0,-1)),l=Oc(e,i,a,s.endOfFile)),l===-1)throw new Error(`Failed to find expected lines in ${t}:
348
- ${s.oldLines.join(`
349
- `)}`);o.push([l,i.length,c]),a=l+i.length}return o.toSorted((s,i)=>s[0]-i[0])}n(nv,"computeReplacements");function Oc(e,t,r,o=!1){if(t.length===0)return-1;for(let a of[ov,iv,sv,av]){if(o){let s=e.length-t.length;if(s>=r&&ff(e,t,s,a))return s}for(let s=r;s<=e.length-t.length;s++)if(ff(e,t,s,a))return s}return-1}n(Oc,"seek");function ff(e,t,r,o){return t.every((a,s)=>o(e[r+s],a))}n(ff,"matches");var ov=n((e,t)=>e===t,"exact"),iv=n((e,t)=>e.trimEnd()===t.trimEnd(),"rstrip"),sv=n((e,t)=>e.trim()===t.trim(),"trim"),av=n((e,t)=>mf(e.trim())===mf(t.trim()),"normalized"),mf=n(e=>e.replace(/[‘’‚‛]/g,"'").replace(/[“”„‟]/g,'"').replace(/[‐‑‒–—―]/g,"-").replace(/…/g,"...").replace(/ /g," "),"normalize"),Dc=n(e=>e.startsWith("\uFEFF")?{bom:!0,text:e.slice(1)}:{bom:!1,text:e},"splitBom"),cv=n(e=>e.match(/^(?:cat\s+)?<<['"]?(\w+)['"]?\s*\n([\s\S]*?)\n\1\s*$/)?.[2]??e,"stripHeredoc");var yf="apply_patch",hf=zt.Struct({patchText:zt.String.annotate({description:"The full patch text describing add, update, and delete operations"})}),gf=zt.Struct({type:zt.Literals(["add","update","delete"]),resource:zt.String,target:zt.String}),xf=zt.Struct({applied:zt.Array(gf),files:zt.Array(Vo.Info)}),bf=n(e=>["Applied patch sequentially:",...e.applied.map(t=>`${t.type==="add"?"A":t.type==="delete"?"D":"M"} ${t.resource}`)].join(`
350
- `),"toModelOutput"),uv=pv.effectDiscard(Tt.gen(function*(){let e=yield*ie.Service,t=yield*fe.Service,r=yield*qe.Service,o=yield*N.Service,a=yield*V.Service;yield*e.register({[yf]:te.withPermission(te.make({description:"Apply one patch containing add, update, and delete file operations. All targets are resolved and approved before target contents are read. Operations apply sequentially; if a later operation fails, earlier operations remain applied and the failure reports them explicitly. Moves and atomic rollback are not supported yet.",input:hf,output:xf,toModelOutput:n(({output:s})=>[{type:"text",text:bf(s)}],"toModelOutput"),execute:n((s,i)=>{let c=[],l=n(d=>{let p=c.length===0?`Unable to apply patch at ${d}`:`Patch partially applied before failing at ${d}. Applied: ${c.map(u=>u.resource).join(", ")}`;return new J({message:p})},"fail");return Tt.gen(function*(){let d={type:"tool",messageID:i.assistantMessageID,callID:i.toolCallID};if(!s.patchText.trim())return yield*new J({message:"patchText is required"});let p=yield*Tt.try({try:n(()=>Ar.parse(s.patchText),"try"),catch:n(f=>new J({message:`apply_patch verification failed: ${String(f)}`}),"catch")});if(p.length===0)return yield*new J({message:"patch rejected: empty patch"});if(p.find(f=>f.type==="update"&&f.movePath!==void 0))return yield*new J({message:"apply_patch moves are not supported yet"});let h=[];for(let f of p)h.push({hunk:f,target:yield*t.resolve({path:f.path,kind:"file"})});let g=new Map;for(let{target:f}of h){let v=f.externalDirectory;v&&g.set(v.resource,v)}for(let f of g.values())yield*a.assert({...fe.externalDirectoryPermission(f),sessionID:i.sessionID,agent:i.agent,source:d});yield*a.assert({action:"edit",resources:[...new Set(h.map(({target:f})=>f.resource))],save:["*"],sessionID:i.sessionID,agent:i.agent,source:d});let x=[];for(let{hunk:f,target:v}of h)yield*Tt.gen(function*(){if(f.type==="add"){x.push({...f,target:v,before:"",after:f.contents.endsWith(`
351
- `)||f.contents===""?f.contents:`${f.contents}
352
- `});return}(yield*o.stat(v.canonical)).type!=="File"&&(yield*l(f.path));let E=yield*o.readFile(v.canonical),m=new TextDecoder("utf-8",{ignoreBOM:!0}).decode(E),b=m.replace(/^\uFEFF/,"");if(f.type==="delete"){x.push({...f,target:v,before:b,after:""});return}let w=Ar.derive(f.path,f.chunks,m);x.push({...f,target:v,source:E,content:Ar.joinBom(w.content,w.bom),before:b,after:w.content})}).pipe(Tt.mapError(()=>l(f.path)));let S=x.map(mv);return yield*Tt.forEach(x,f=>Tt.gen(function*(){if(f.type==="add"){let E=yield*r.create({target:f.target,content:f.contents.endsWith(`
353
- `)||f.contents===""?f.contents:`${f.contents}
354
- `});c.push({type:f.type,resource:E.resource,target:E.target});return}if(f.type==="delete"){let E=yield*r.remove({target:f.target});c.push({type:f.type,resource:E.resource,target:E.target});return}let v=yield*r.writeIfUnchanged({target:f.target,expected:f.source,content:f.content});c.push({type:f.type,resource:v.resource,target:v.target})}).pipe(Tt.mapError(()=>l(f.path))),{discard:!0}),{applied:c,files:S}}).pipe(Tt.mapError(d=>d instanceof J?d:l("patch")))},"execute")}),"edit")}).pipe(Tt.orDie)})),fv=A({name:"tool/apply-patch",layer:uv,deps:[ee.node,fe.node,qe.node,N.node,V.node]});function mv(e){let t=dv(e.before,e.after).reduce((r,o)=>({additions:r.additions+(o.added?o.count??0:0),deletions:r.deletions+(o.removed?o.count??0:0)}),{additions:0,deletions:0});return{file:e.target.resource,patch:lv(e.target.resource,e.target.resource,e.before,e.after),status:e.type==="add"?"added":e.type==="delete"?"deleted":"modified",...t}}n(mv,"patchFile");var bo={};U(bo,{EditTool:()=>bo,Input:()=>wf,Output:()=>kf,name:()=>vf,node:()=>kv,toModelOutput:()=>Tf});import{createTwoFilesPatch as yv,diffLines as hv}from"diff";import{Effect as Vi,Layer as gv,Schema as Wt}from"effect";var vf="edit",wf=Wt.Struct({path:Wt.String.annotate({description:"File path to edit. Relative paths resolve within the active Location. Absolute paths inside that Location are accepted; external absolute paths require external_directory approval."}),oldString:Wt.String.annotate({description:"Exact text to replace"}),newString:Wt.String.annotate({description:"Replacement text, which must differ from oldString"}),replaceAll:Wt.Boolean.pipe(Wt.optional).annotate({description:"Replace all exact occurrences of oldString (default false)"})}),kf=Wt.Struct({files:Wt.Array(Vo.Info),replacements:Wt.Number}),Rc=n(e=>e.replaceAll(`\r
355
- `,`
356
- `),"normalizeLineEndings"),xv=n(e=>e.includes(`\r
357
- `)?`\r
358
- `:`
359
- `,"detectLineEnding"),Sf=n((e,t)=>t===`
360
- `?Rc(e):Rc(e).replaceAll(`
361
- `,`\r
362
- `),"convertToLineEnding"),bv=n(e=>e.startsWith("\uFEFF")?{bom:!0,text:e.slice(1)}:{bom:!1,text:e},"splitBom"),Sv=n((e,t)=>t?`\uFEFF${e}`:e,"joinBom"),Ev=n(e=>{let t=e[0]===239&&e[1]===187&&e[2]===191;return{bom:t,content:e,text:new TextDecoder().decode(t?e.slice(3):e)}},"decodeUtf8"),vv=n((e,t)=>{if(t==="")return e.length+1;let r=0,o=0;for(;(o=e.indexOf(t,o))!==-1;)r++,o+=t.length;return r},"countOccurrences"),Ef=n((e,t)=>{let r=Rc(e).split(`
363
- `),o=r.slice(0,6).map(a=>`${t}${a.length>240?`${a.slice(0,240)}...`:a}`);return r.length>o.length&&o.push(`${t}...`),o},"previewLines"),Tf=n((e,t,r)=>[`Edited file successfully: ${e.files[0]?.file}`,`Replacements: ${e.replacements}`,"```diff",...Ef(t,"-"),...Ef(r,"+"),"```"].join(`
364
- `),"toModelOutput"),wv=gv.effectDiscard(Vi.gen(function*(){let e=yield*ie.Service,t=yield*fe.Service,r=yield*qe.Service,o=yield*N.Service,a=yield*V.Service;yield*e.register({[vf]:te.withPermission(te.make({description:"Replace exact text in one file. Relative paths resolve within the active Location. Absolute paths inside the Location are accepted. Explicit external absolute paths require external_directory approval before edit approval.",input:wf,output:kf,toModelOutput:n(({input:s,output:i})=>[{type:"text",text:Tf(i,s.oldString,s.newString)}],"toModelOutput"),execute:n((s,i)=>{let c=n(l=>l.pipe(Vi.mapError(d=>d instanceof qe.StaleContentError?new J({message:"File changed after permission approval. Read it again before editing."}):new J({message:`Unable to edit ${s.path}`}))),"unableToEdit");return Vi.gen(function*(){let l={type:"tool",messageID:i.assistantMessageID,callID:i.toolCallID};if(s.oldString===s.newString)return yield*new J({message:"No changes to apply: oldString and newString are identical."});if(s.oldString==="")return yield*new J({message:"oldString must not be empty. Use write to create or overwrite a file."});let d=yield*c(t.resolve({path:s.path,kind:"file"})),p=d.externalDirectory;p&&(yield*c(a.assert({...fe.externalDirectoryPermission(p),sessionID:i.sessionID,agent:i.agent,source:l}))),yield*c(a.assert({action:"edit",resources:[d.resource],save:["*"],sessionID:i.sessionID,agent:i.agent,source:l}));let u=Ev(yield*c(o.readFile(d.canonical))),h=xv(u.text),g=Sf(s.oldString,h),x=Sf(s.newString,h),S=vv(u.text,g);if(S===0)return yield*new J({message:"Could not find oldString in the file. It must match exactly, including whitespace and indentation."});if(S>1&&s.replaceAll!==!0)return yield*new J({message:"Found multiple exact matches for oldString. Provide more surrounding context or set replaceAll to true."});let f=s.replaceAll===!0?u.text.replaceAll(g,x):u.text.replace(g,x),v=hv(u.text,f).reduce((b,w)=>({additions:b.additions+(w.added?w.count??0:0),deletions:b.deletions+(w.removed?w.count??0:0)}),{additions:0,deletions:0}),E=bv(f),m=yield*c(r.writeIfUnchanged({target:d,expected:u.content,content:Sv(E.text,u.bom||E.bom)}));return{files:[{file:m.resource,patch:yv(m.resource,m.resource,u.text,f),status:"modified",...v}],replacements:S}})},"execute")}),"edit")}).pipe(Vi.orDie)})),kv=A({name:"tool/edit",layer:wv,deps:[ee.node,fe.node,qe.node,N.node,V.node]});var Eo={};U(Eo,{GlobTool:()=>Eo,Input:()=>If,Output:()=>Of,name:()=>Ac,node:()=>Ov,toModelOutput:()=>Df});import{Effect as So,Layer as Tv,Schema as _c}from"effect";import Hi from"path";var Ac="glob",If=_c.Struct({pattern:Ae.GlobInput.fields.pattern.annotate({description:"Glob pattern to match files against"}),path:qt.pipe(_c.optional).annotate({description:"Relative directory to search. Defaults to the active Location."}),limit:Ae.GlobInput.fields.limit.annotate({description:"Maximum results to return"})}),Of=_c.Array(Ae.Entry),Df=n(e=>(e.length===0?["No files found"]:e.map(r=>r.path)).join(`
365
- `),"toModelOutput"),Iv=Tv.effectDiscard(So.gen(function*(){let e=yield*ie.Service,t=yield*Kr.Service,r=yield*Z.Service,o=yield*V.Service;yield*e.register({[Ac]:te.make({description:"Find files by glob pattern within the active Location. Returns concise relative file resources. Use a relative path to narrow the search and limit to bound the result count.",input:If,output:Of,toModelOutput:n(({output:a})=>[{type:"text",text:Df(a.map(s=>({...s,path:Hi.resolve(r.directory,s.path)})))}],"toModelOutput"),execute:n((a,s)=>So.gen(function*(){yield*o.assert({action:Ac,resources:[a.pattern],save:["*"],metadata:{root:a.path??".",path:a.path,limit:a.limit},sessionID:s.sessionID,agent:s.agent,source:{type:"tool",messageID:s.assistantMessageID,callID:s.toolCallID}});let i=Hi.resolve(r.directory,a.path??".");return yield*t.glob({cwd:i,pattern:a.pattern,limit:a.limit??Number.MAX_SAFE_INTEGER}).pipe(So.map(c=>c.map(l=>Ae.Entry.make({...l,path:qt.make(Hi.relative(r.directory,Hi.resolve(i,l.path)))}))))}).pipe(So.mapError(()=>new J({message:`Unable to find files matching ${a.pattern}`}))),"execute")})}).pipe(So.orDie)})),Ov=A({name:"tool/glob",layer:Iv,deps:[ee.node,Kr.node,Z.node,V.node]});var vo={};U(vo,{GrepTool:()=>vo,Input:()=>Rf,Output:()=>_f,name:()=>Cc,node:()=>_v,toModelOutput:()=>Af});import{Effect as Pr,Layer as Dv,Schema as Pc}from"effect";import Cr from"path";var Cc="grep",Rf=Pc.Struct({pattern:Ae.GrepInput.fields.pattern.annotate({description:"Regex pattern to search for in file contents"}),path:qt.pipe(Pc.optional).annotate({description:"Relative directory to search. Defaults to the active Location."}),include:Ae.GrepInput.fields.include.annotate({description:'File glob to include in the search (for example, "*.js" or "*.{ts,tsx}")'}),limit:Ae.GrepInput.fields.limit.annotate({description:"Maximum matches to return"})}),_f=Pc.Array(Ae.Match),Af=n(e=>{let t=e.length===0?["No files found"]:[`Found ${e.length} matches`],r="";for(let o of e)r!==o.entry.path&&(r&&t.push(""),r=o.entry.path,t.push(`${o.entry.path}:`)),t.push(` Line ${o.line}: ${o.text}`);return t.join(`
366
- `)},"toModelOutput"),Rv=Dv.effectDiscard(Pr.gen(function*(){let e=yield*ie.Service,t=yield*N.Service,r=yield*Kr.Service,o=yield*Z.Service,a=yield*V.Service;yield*e.register({[Cc]:te.make({description:"Search file contents by regular expression within the active Location or an absolute managed tool-output file. Use a path to narrow the search, include to filter files by glob, and limit to bound the match count. Returns concise file resources, line numbers, and bounded line previews.",input:Rf,output:_f,toModelOutput:n(({output:s})=>[{type:"text",text:Af(s.map(i=>({...i,entry:{...i.entry,path:Cr.resolve(o.directory,i.entry.path)}})))}],"toModelOutput"),execute:n((s,i)=>Pr.gen(function*(){yield*a.assert({action:Cc,resources:[s.pattern],save:["*"],metadata:{root:".",path:s.path,include:s.include,limit:s.limit},sessionID:i.sessionID,agent:i.agent,source:{type:"tool",messageID:i.assistantMessageID,callID:i.toolCallID}});let c=Cr.resolve(o.directory,s.path??"."),l=yield*t.stat(c).pipe(Pr.catch(()=>Pr.succeed(void 0)));return yield*r.grep({cwd:l?.type==="Directory"?c:Cr.dirname(c),pattern:s.pattern,file:l?.type==="File"?Cr.basename(c):void 0,include:s.include,limit:s.limit??Number.MAX_SAFE_INTEGER}).pipe(Pr.map(d=>d.map(p=>Ae.Match.make({...p,entry:Ae.Entry.make({...p.entry,path:qt.make(Cr.relative(o.directory,Cr.resolve(l?.type==="Directory"?c:Cr.dirname(c),p.entry.path)))})}))))}).pipe(Pr.mapError(()=>new J({message:`Unable to grep for ${s.pattern}`}))),"execute")})}).pipe(Pr.orDie)})),_v=A({name:"tool/grep",layer:Rv,deps:[ee.node,N.node,Kr.node,Z.node,V.node]});var wo={};U(wo,{Input:()=>Mf,Output:()=>Lf,QuestionTool:()=>wo,description:()=>Cf,name:()=>Pf,node:()=>Cv,toModelOutput:()=>Uf});import{Effect as wn,Layer as Av,Schema as Gi}from"effect";var Pf="question",Cf=`Use this tool when you need to ask the user questions during execution. This allows you to:
367
- 1. Gather user preferences or requirements
368
- 2. Clarify ambiguous instructions
369
- 3. Get decisions on implementation choices as you work
370
- 4. Offer choices to the user about what direction to take.
371
-
372
- Usage notes:
373
- - When \`custom\` is enabled (default), a "Type your own answer" option is added automatically; don't include "Other" or catch-all options
374
- - Answers are returned as arrays of labels; set \`multiple: true\` to allow selecting more than one
375
- - If you recommend a specific option, make that the first option in the list and add "(Recommended)" at the end of the label`,Mf=Gi.Struct({questions:Gi.Array(ct.Prompt).annotate({description:"Questions to ask"})}),Lf=Gi.Struct({answers:Gi.Array(ct.Answer)}),Uf=n((e,t)=>`User has answered your questions: ${e.map((o,a)=>`"${o.question}"="${t[a]?.length?t[a].join(", "):"Unanswered"}"`).join(", ")}. You can now continue with the user's answers in mind.`,"toModelOutput"),Pv=Av.effectDiscard(wn.gen(function*(){let e=yield*ie.Service,t=yield*ct.Service,r=yield*V.Service;yield*e.register({[Pf]:te.make({description:Cf,input:Mf,output:Lf,toModelOutput:n(({input:o,output:a})=>[{type:"text",text:Uf(o.questions,a.answers)}],"toModelOutput"),execute:n((o,a)=>r.assert({action:"question",resources:["*"],sessionID:a.sessionID,agent:a.agent,source:{type:"tool",messageID:a.assistantMessageID,callID:a.toolCallID}}).pipe(wn.mapError(()=>new J({message:"Permission denied: question"})),wn.andThen(t.ask({sessionID:a.sessionID,questions:o.questions,tool:{messageID:a.assistantMessageID,callID:a.toolCallID}}).pipe(wn.orDie)),wn.map(s=>({answers:s}))),"execute")})}).pipe(wn.orDie)})),Cv=A({name:"tool/question",layer:Pv,deps:[ee.node,V.node,ct.node]});var Ro={};U(Ro,{ReadTool:()=>Ro,name:()=>Lc,node:()=>Gv});import{Effect as Ur,Layer as Wv,Schema as Mc}from"effect";var Be={};U(Be,{BinaryFileError:()=>Lr,ListPage:()=>Qi,MAX_MEDIA_INGEST_BYTES:()=>Mr,MAX_READ_BYTES:()=>ko,MAX_READ_LINES:()=>In,MalformedUtf8Error:()=>Ji,MediaIngestLimitError:()=>Oo,OffsetOutOfRangeError:()=>Xi,PageInput:()=>Nv,PathKindError:()=>Do,ReadToolFileSystem:()=>Be,Service:()=>On,TextPage:()=>Yi,inspect:()=>$f,list:()=>Wf,node:()=>zv,read:()=>zf});import Tn from"path";import{pathToFileURL as Nf}from"url";import{Context as Mv,Effect as xe,Layer as Lv,Option as Ki,Schema as le}from"effect";var In=2e3,ko=50*1024,Mr=20*1024*1024,To=2e3,Uv=`... (line truncated to ${To} chars)`,Lr=class extends le.TaggedErrorClass()("ReadTool.BinaryFileError",{resource:le.String}){static{n(this,"BinaryFileError")}get message(){return`Cannot read binary file: ${this.resource}`}},Oo=class extends le.TaggedErrorClass()("ReadTool.MediaIngestLimitError",{resource:le.String,maximumBytes:le.Number}){static{n(this,"MediaIngestLimitError")}get message(){return`Media exceeds ${this.maximumBytes} byte ingestion limit: ${this.resource}`}},Ji=class extends le.TaggedErrorClass()("ReadTool.MalformedUtf8Error",{resource:le.String}){static{n(this,"MalformedUtf8Error")}get message(){return`File is not valid UTF-8: ${this.resource}`}},Xi=class extends le.TaggedErrorClass()("ReadTool.OffsetOutOfRangeError",{offset:le.Number}){static{n(this,"OffsetOutOfRangeError")}get message(){return`Offset ${this.offset} is out of range`}},Do=class extends le.TaggedErrorClass()("ReadTool.PathKindError",{resource:le.String,expected:le.Literals(["a file","a file or directory"])}){static{n(this,"PathKindError")}get message(){return`Path is not ${this.expected}: ${this.resource}`}},Nv=le.Struct({offset:Ge.pipe(le.optional),limit:Ge.check(le.isLessThanOrEqualTo(In)).pipe(le.optional)}),Yi=class extends le.Class("ReadTool.TextPage")({type:le.Literal("text-page"),content:le.String,mime:le.String,offset:Ge,truncated:le.Boolean,next:Ge.pipe(le.optional)}){static{n(this,"TextPage")}},Qi=class extends le.Class("ReadTool.ListPage")({entries:le.Array(Ae.Entry),truncated:le.Boolean,next:Ge.pipe(le.optional)}){static{n(this,"ListPage")}},On=class extends Mv.Service()("@opencode/ReadToolFileSystem"){static{n(this,"Service")}},Ff=new Set([".zip",".tar",".gz",".exe",".dll",".so",".class",".jar",".war",".7z",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".odt",".ods",".odp",".bin",".dat",".obj",".o",".a",".lib",".wasm",".pyc",".pyo"]),kn=n((e,t)=>t.every((r,o)=>e[o]===r),"startsWith"),jv=n(e=>{if(kn(e,[137,80,78,71,13,10,26,10]))return"image/png";if(kn(e,[255,216,255]))return"image/jpeg";if(kn(e,[71,73,70,56]))return"image/gif";if(kn(e,[82,73,70,70])&&kn(e.subarray(8),[87,69,66,80]))return"image/webp"},"imageMime"),jf=n((e,t)=>{if(Ff.has(Tn.extname(e).toLowerCase()))return!0;if(t.length===0)return!1;let r=0;for(let o of t){if(o===0)return!0;(o<9||o>13&&o<32)&&r++}return r/t.length>.3},"binary"),Io=n((e,t,r)=>xe.try({try:n(()=>t.decode(r,{stream:r!==void 0}),"try"),catch:n(o=>{if(o instanceof TypeError)return new Ji({resource:e});throw o},"catch")}),"decodeUtf8"),Fv=n((e,t,r)=>r.includes(0)?xe.fail(new Lr({resource:e})):Io(e,t,r),"decodeChunk"),$f=xe.fn("ReadTool.inspect")(function*(e,t){let r=yield*e.stat(t),o=r.type==="File"?"file":r.type==="Directory"?"directory":void 0;return o||(yield*xe.fail(new Do({resource:t,expected:"a file or directory"})))}),zf=xe.fn("ReadTool.read")(function*(e,t,r,o={}){let a=yield*e.realPath(t);return yield*xe.scoped(xe.gen(function*(){let s=yield*e.open(a,{flag:"r"}),i=yield*s.stat;if(i.type!=="File")return yield*xe.fail(new Do({resource:r,expected:"a file"}));let c=Ki.getOrElse(yield*s.readAlloc(Math.min(64*1024,Number(i.size)||4*1024)),()=>new Uint8Array),l=jv(c);if(l){if(i.size>Mr)return yield*xe.fail(new Oo({resource:r,maximumBytes:Mr}));let y=[c],T=c.length;for(;T<=Mr;){let O=yield*s.readAlloc(Math.min(65536,Mr+1-T));if(Ki.isNone(O))break;y.push(O.value),T+=O.value.length}return T>Mr?yield*xe.fail(new Oo({resource:r,maximumBytes:Mr})):{uri:Nf(a).href,name:Tn.basename(a),content:Buffer.concat(y.map(O=>Buffer.from(O)),T).toString("base64"),encoding:"base64",mime:l}}if(kn(c,[37,80,68,70])||Ff.has(Tn.extname(r).toLowerCase()))return yield*xe.fail(new Lr({resource:r}));if(!(i.size>ko||o.offset!==void 0||o.limit!==void 0)){if(jf(r,c))return yield*xe.fail(new Lr({resource:r}));let y=new TextDecoder("utf-8",{fatal:!0}),T=[yield*Io(r,y,c)];for(;;){let O=yield*s.readAlloc(65536);if(Ki.isNone(O))break;T.push(yield*Fv(r,y,O.value))}return T.push(yield*Io(r,y)),{uri:Nf(a).href,name:Tn.basename(a),content:T.join(""),encoding:"utf8",mime:N.mimeType(a)}}let p=o.offset??1,u=Math.min(o.limit??In,In),h=[],g=new TextDecoder("utf-8",{fatal:!0}),x="",S=!1,f=1,v=0,E,m=n(y=>{if(f<p)return f++,!0;if(h.length>=u||v>=ko)return E=f,!1;let T=y.length>To?y.slice(0,To)+Uv:y,O=Buffer.byteLength(T,"utf-8")+(h.length>0?1:0);return v+O>ko?(E=f,!1):(h.push(T),v+=O,f++,!0)},"append"),b=n(y=>{let T=y;for(;;){let O=T.indexOf(`
376
- `);if(O===-1){S||(x+=T,x.length>To&&(x=x.slice(0,To+1),S=!0));break}let L=x+(S?"":T.slice(0,O));if(x="",S=!1,T=T.slice(O+1),!m(L.endsWith("\r")?L.slice(0,-1):L))return!1}return!0},"consume"),w=xe.fnUntraced(function*(y){let T=0;for(;T<y.length;){if(h.length>=u||v>=ko)return E=f,!1;let O=y.indexOf(10,T),L=O===-1?y.length:O+1,I=y.subarray(T,L);if(jf(r,I))return yield*xe.fail(new Lr({resource:r}));if(!b(yield*Io(r,g,I)))return!1;T=L}return!0}),k=!(yield*w(c));for(;!k;){let y=yield*s.readAlloc(65536);if(Ki.isNone(y))break;k=!(yield*w(y.value))}if(!k){let y=yield*Io(r,g);S||(x+=y),x&&m(x.endsWith("\r")?x.slice(0,-1):x)}return h.length===0&&p!==1?yield*xe.fail(new Xi({offset:p})):new Yi({type:"text-page",content:h.join(`
377
- `),mime:N.mimeType(a),offset:p,truncated:E!==void 0,...E===void 0?{}:{next:E}})}))}),Wf=xe.fn("ReadTool.list")(function*(e,t,r={}){let o=yield*e.realPath(t),a=yield*e.readDirectoryEntries(o),s=r.offset??1,i=Math.min(r.limit??In,In),l=(yield*xe.forEach(a,u=>xe.gen(function*(){let h=Tn.join(o,u.name),g=yield*e.realPath(h).pipe(xe.catch(()=>xe.void));if(!g||!N.contains(o,g))return;let x=yield*e.stat(g).pipe(xe.catch(()=>xe.void)),S=x?.type==="Directory"?"directory":x?.type==="File"?"file":void 0;if(S)return Ae.Entry.make({path:qt.make(u.name+(S==="directory"?Tn.sep:"")),type:S})}),{concurrency:16})).filter(u=>u!==void 0).sort((u,h)=>u.type===h.type?u.path.localeCompare(h.path):u.type==="directory"?-1:1),d=l.slice(s-1,s-1+i),p=s-1+d.length<l.length;return new Qi({entries:d,truncated:p,...p?{next:s+d.length}:{}})}),$v=Lv.effect(On,xe.gen(function*(){let e=yield*N.Service;return On.of({inspect:n(t=>$f(e,t),"inspect"),read:n((t,r,o)=>zf(e,t,r,o),"read"),list:n((t,r)=>Wf(e,t,r),"list")})})),zv=A({service:On,layer:$v,deps:[N.node]});var Lc="read",qf=new Set(["image/jpeg","image/png","image/gif","image/webp"]),qv=Mc.Struct({path:Mc.String,offset:Be.PageInput.fields.offset.annotate({description:"The 1-based directory entry or text line offset to start reading from"}),limit:Be.PageInput.fields.limit.annotate({description:"The maximum number of directory entries or text lines to read"})}),Bv=qv,Vv=Mc.Union([Ae.Content,Be.TextPage,Be.ListPage]),Hv=Wv.effectDiscard(Ur.gen(function*(){let e=yield*ie.Service,t=yield*Be.Service,r=yield*fe.Service,o=yield*cr.Service,a=yield*V.Service;yield*e.register({[Lc]:te.make({description:"Read a text file or supported image, page through a large UTF-8 text file by line offset, or list a directory page. Relative paths resolve from the current location; absolute paths inside it are accepted, while external absolute paths require external_directory approval.",input:Bv,output:Vv,toModelOutput:n(({input:s,output:i})=>!("encoding"in i)||i.encoding!=="base64"||!qf.has(i.mime)?[]:[{type:"text",text:"Image read successfully"},{type:"file",data:i.content,mime:i.mime,name:s.path}],"toModelOutput"),execute:n((s,i)=>Ur.gen(function*(){let c={type:"tool",messageID:i.assistantMessageID,callID:i.toolCallID},l=yield*r.resolve({path:s.path,kind:"directory"}),d=l.externalDirectory;d&&(yield*a.assert({...fe.externalDirectoryPermission(d),sessionID:i.sessionID,agent:i.agent,source:c}));let p=l.resource,u=ye.make(l.canonical),h=yield*t.inspect(u);if(yield*a.assert({action:Lc,resources:[p],save:["*"],sessionID:i.sessionID,agent:i.agent,source:c}),h==="directory")return yield*t.list(u,{offset:s.offset,limit:s.limit});let g=yield*t.read(u,p,{offset:s.offset,limit:s.limit});return"encoding"in g&&g.encoding==="base64"&&qf.has(g.mime)?yield*o.normalize(p,{...g,encoding:"base64"}).pipe(Ur.catchTag("Image.ResizerUnavailableError",()=>Ur.succeed(g))):"encoding"in g&&g.encoding==="base64"?yield*Ur.fail(new Be.BinaryFileError({resource:p})):g}).pipe(Ur.mapError(c=>{let l=c instanceof Be.BinaryFileError||c instanceof Be.MediaIngestLimitError||c instanceof cr.DecodeError||c instanceof cr.SizeError?c.message:`Unable to read ${s.path}`;return new J({message:l})})),"execute")})}).pipe(Ur.orDie)})),Gv=A({name:"tool/read",layer:Hv,deps:[ee.node,Be.node,fe.node,cr.node,V.node]});var Ao={};U(Ao,{Input:()=>Vf,Output:()=>Hf,SkillTool:()=>Ao,description:()=>Gf,name:()=>Uc,node:()=>Yv,toModelOutput:()=>Kf});import Zi from"path";import{Effect as _o,Layer as Kv,Schema as Dn}from"effect";var Uc="skill",Jv=10,Vf=Dn.Struct({name:Dn.String.annotate({description:"The name of the skill from the available skills list"})}),Hf=Dn.Struct({name:Dn.String,directory:Dn.String,output:Dn.String}),Gf=["Load a specialized skill when the task at hand matches one of the available skills in the system context.","","Use this tool to inject the skill's instructions and resources into the current conversation. The output may contain detailed workflow guidance as well as references to scripts, files, etc. in the same directory as the skill.","","The skill name must match one of the available skills in the system context."].join(`
378
- `),Kf=n((e,t)=>{let r=Zi.dirname(e.location);return[`<skill_content name="${e.name}">`,`# Skill: ${e.name}`,"",e.content.trim(),"",`Base directory for this skill: ${r}`,"Relative paths in this skill (e.g., scripts/, reference/) are relative to this base directory.","Note: file list is sampled.","","<skill_files>",...t.map(o=>`<file>${o}</file>`),"</skill_files>","</skill_content>"].join(`
379
- `)},"toModelOutput"),Bf=n((e,t)=>new J({message:`Unable to load skill ${e}`,error:t}),"unableToLoad"),Xv=Kv.effectDiscard(_o.gen(function*(){let e=yield*ie.Service,t=yield*N.Service,r=yield*Dt.Service,o=yield*V.Service;yield*e.register({[Uc]:te.make({description:Gf,input:Vf,output:Hf,toModelOutput:n(({output:a})=>[{type:"text",text:a.output}],"toModelOutput"),execute:n((a,s)=>_o.gen(function*(){let c=(yield*r.list()).find(l=>l.name===a.name);return c?yield*_o.gen(function*(){yield*o.assert({action:Uc,resources:[c.name],save:[c.name],sessionID:s.sessionID,agent:s.agent,source:{type:"tool",messageID:s.assistantMessageID,callID:s.toolCallID}});let l=Zi.dirname(c.location),d=Zi.basename(c.location)==="SKILL.md"?(yield*t.glob("**/*",{cwd:l,absolute:!0,include:"file",dot:!0})).filter(p=>Zi.basename(p)!=="SKILL.md").toSorted().slice(0,Jv):[];return{name:c.name,directory:l,output:Kf(c,d)}}).pipe(_o.mapError(l=>Bf(a.name,l))):yield*Bf(a.name)}),"execute")})}).pipe(_o.orDie)})),Yv=A({name:"tool/skill",layer:Xv,deps:[ee.node,N.node,Dt.node,V.node]});var Po={};U(Po,{Input:()=>Jf,Output:()=>Xf,TodoWriteTool:()=>Po,name:()=>Nc,node:()=>ew,toModelOutput:()=>Yf});import{Effect as es,Layer as Qv,Schema as ts}from"effect";var Nc="todowrite",Jf=ts.Struct({todos:ts.Array(kt.Info).annotate({description:"The updated todo list"})}),Xf=ts.Struct({todos:ts.Array(kt.Info)}),Yf=n(e=>JSON.stringify(e.todos,null,2),"toModelOutput"),Zv=Qv.effectDiscard(es.gen(function*(){let e=yield*ie.Service,t=yield*kt.Service,r=yield*V.Service;yield*e.register({[Nc]:te.make({description:"Create and maintain a structured task list for the current coding session. Use it to track progress during multi-step work and keep todo statuses current.",input:Jf,output:Xf,toModelOutput:n(({output:o})=>[{type:"text",text:Yf(o)}],"toModelOutput"),execute:n((o,a)=>es.gen(function*(){return yield*r.assert({action:Nc,resources:["*"],save:["*"],sessionID:a.sessionID,agent:a.agent,source:{type:"tool",messageID:a.assistantMessageID,callID:a.toolCallID}}),yield*t.update({sessionID:a.sessionID,todos:o.todos}),{todos:o.todos}}).pipe(es.mapError(()=>new J({message:"Unable to update todos"}))),"execute")})}).pipe(es.orDie)})),ew=A({name:"tool/todowrite",layer:Zv,deps:[ee.node,V.node,kt.node]});var Mo={};U(Mo,{DEFAULT_TIMEOUT_SECONDS:()=>em,Input:()=>zc,MAX_RESPONSE_BYTES:()=>Fc,MAX_TIMEOUT_SECONDS:()=>$c,WebFetchTool:()=>Mo,convertHTMLToMarkdown:()=>om,description:()=>tm,extractTextFromHTML:()=>nm,name:()=>jc,node:()=>Ew});import{Duration as rw,Effect as Qe,Layer as nw,Schema as lt}from"effect";import{HttpClient as ow,HttpClientRequest as Qf,HttpClientResponse as iw}from"effect/unstable/http";import{Parser as sw}from"htmlparser2";import aw from"turndown";import{Effect as Co,Stream as tw}from"effect";import"effect/unstable/http";var rs=n((e,t,r)=>Co.gen(function*(){let o=e.headers["content-length"],a=o?Number.parseInt(o,10):void 0,s=a!==void 0&&Number.isSafeInteger(a)&&a>=0?a:void 0;if(s!==void 0&&s>t)return yield*Co.fail(r());let i=Buffer.allocUnsafe(Math.min(t,s||64*1024)),c=0;return yield*tw.runForEach(e.stream,l=>{if(l.byteLength===0)return Co.void;if(c+l.byteLength>t)return Co.fail(r());if(c+l.byteLength>i.byteLength){let d=Buffer.allocUnsafe(Math.min(t,Math.max(c+l.byteLength,i.byteLength*2)));i.copy(d,0,0,c),i=d}return i.set(l,c),c+=l.byteLength,Co.void}),i.subarray(0,c)}),"collectBoundedResponseBody");var jc="webfetch",Fc=5*1024*1024,em=30,$c=120,tm=`Fetch content from an HTTP or HTTPS URL and return it as text, markdown, or HTML. Markdown is the default.
380
-
381
- Use a more targeted tool when one is available. This tool is read-only. Large text results may be replaced with a preview while the complete output is retained in managed storage.`,cw=lt.Number.check(lt.isGreaterThan(0),lt.isLessThanOrEqualTo($c)),zc=lt.Struct({url:lt.String.annotate({description:"The HTTP or HTTPS URL to fetch content from"}),format:lt.Literals(["text","markdown","html"]).annotate({description:"The format to return the content in. Defaults to markdown."}).pipe(lt.withDecodingDefault(Qe.succeed("markdown"))),timeout:cw.pipe(lt.optional).annotate({description:`Optional timeout in seconds (maximum: ${$c})`})}),lw=lt.Struct({url:lt.String,contentType:lt.String,format:zc.fields.format,output:lt.String}),dw=n(e=>{switch(e){case"markdown":return"text/markdown;q=1.0, text/x-markdown;q=0.9, text/plain;q=0.8, text/html;q=0.7, */*;q=0.1";case"text":return"text/plain;q=1.0, text/markdown;q=0.9, text/html;q=0.8, */*;q=0.1";case"html":return"text/html;q=1.0, application/xhtml+xml;q=0.9, text/plain;q=0.8, text/markdown;q=0.7, */*;q=0.1"}return"*/*"},"acceptHeader"),pw=n((e,t)=>({"User-Agent":t,Accept:dw(e),"Accept-Language":"en-US,en;q=0.9"}),"headers"),rm="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",uw=n(e=>{if(!e||typeof e!="object"||!("reason"in e))return!1;let t=e.reason;if(!t||typeof t!="object"||!("_tag"in t)||t._tag!=="StatusCodeError"||!("response"in t))return!1;let r=t.response;return r.status===403&&r.headers["cf-mitigated"]==="challenge"},"isCloudflareChallenge"),fw=n((e,t,r=rm)=>Qf.get(e).pipe(Qf.setHeaders(pw(t,r))),"request"),mw=n(e=>{if(e.protocol!=="http:"&&e.protocol!=="https:")throw new Error("URL must use http:// or https://")},"assertHttpUrl"),Zf=n((e,t,r,o=rm)=>e.execute(fw(t,r,o)).pipe(Qe.flatMap(iw.filterStatusOk)),"execute"),yw=n(e=>rs(e,Fc,()=>new Error(`Response too large (exceeds ${Fc} byte limit)`)),"collectBody"),hw=n(e=>e.split(";",1)[0]?.trim().toLowerCase()??"","mimeFrom"),gw=n(e=>e.startsWith("image/")&&e!=="image/svg+xml"&&e!=="image/vnd.fastbidsheet","isImageAttachment"),xw=n(e=>!e||e.startsWith("text/")||e==="application/json"||e.endsWith("+json")||e==="application/xml"||e.endsWith("+xml")||e==="application/javascript"||e==="application/x-javascript","isTextualMime"),bw=n((e,t,r)=>t.includes("text/html")?r==="markdown"?om(e):r==="text"?nm(e):e:e,"convert"),Sw=nw.effectDiscard(Qe.gen(function*(){let e=yield*ie.Service,t=yield*ow.HttpClient,r=yield*V.Service;yield*e.register({[jc]:te.make({description:tm,input:zc,output:lw,toModelOutput:n(({output:o})=>[{type:"text",text:o.output}],"toModelOutput"),execute:n((o,a)=>Qe.gen(function*(){yield*Qe.try({try:n(()=>mw(new URL(o.url)),"try"),catch:n(d=>d,"catch")}),yield*r.assert({action:jc,resources:[o.url],save:["*"],metadata:o,sessionID:a.sessionID,agent:a.agent,source:{type:"tool",messageID:a.assistantMessageID,callID:a.toolCallID}});let{body:s,contentType:i}=yield*Qe.gen(function*(){let d=yield*Zf(t,o.url,o.format).pipe(Qe.catchIf(uw,()=>Zf(t,o.url,o.format,"opencode"))),p=d.headers["content-type"]||"",u=hw(p);return gw(u)?yield*Qe.fail(new Error(`Unsupported fetched image content type: ${u}`)):xw(u)?{body:yield*yw(d),contentType:p}:yield*Qe.fail(new Error(`Unsupported fetched file content type: ${u}`))}).pipe(Qe.timeoutOrElse({duration:rw.seconds(o.timeout??em),orElse:n(()=>Qe.fail(new Error("Request timed out")),"orElse")})),c=new TextDecoder().decode(s),l=yield*Qe.try({try:n(()=>bw(c,i,o.format),"try"),catch:n(d=>d,"catch")});return{url:o.url,contentType:i,format:o.format,output:l}}).pipe(Qe.mapError(()=>new J({message:`Unable to fetch ${o.url}`}))),"execute")})}).pipe(Qe.orDie)})),Ew=A({name:"tool/webfetch",layer:Sw,deps:[ee.node,V.node,qo.httpClient]});function nm(e){let t="",r=0,o=new sw({onopentag(a){(r>0||["script","style","noscript","iframe","object","embed"].includes(a))&&r++},ontext(a){r===0&&(t+=a)},onclosetag(){r>0&&r--}});return o.write(e),o.end(),t.trim()}n(nm,"extractTextFromHTML");function om(e){let t=new aw({headingStyle:"atx",hr:"---",bulletListMarker:"-",codeBlockStyle:"fenced",emDelimiter:"*"});return t.remove(["script","style","meta","link"]),t.turndown(e)}n(om,"convertHTMLToMarkdown");var Lo={};U(Lo,{ConfigService:()=>Nr,EXA_URL:()=>qc,Input:()=>fm,MAX_CONTEXT_CHARACTERS:()=>Vc,MAX_NUM_RESULTS:()=>Bc,MAX_RESPONSE_BYTES:()=>Hc,NO_RESULTS:()=>dm,PARALLEL_URL:()=>pm,Provider:()=>mm,WebSearchTool:()=>Lo,configNode:()=>hm,defaultConfigLayer:()=>ym,description:()=>um,name:()=>Wc,node:()=>Pw,parseResponse:()=>xm,selectProvider:()=>gm});import{Context as vw,Duration as ww,Effect as It,Layer as cm,Schema as K}from"effect";import{HttpClient as lm,HttpClientRequest as ns}from"effect/unstable/http";function im(e){if(!e)return;let t=2166136261;for(let r=0;r<e.length;r++)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return(t>>>0).toString(36)}n(im,"checksum");var Wc="websearch",dm="No search results found. Please try a different query.",qc="https://mcp.exa.ai/mcp",pm="https://search.parallel.ai/mcp",Bc=20,Vc=5e4,Hc=256*1024,um=`Search the web using the session's local web search provider. Use this for current information beyond knowledge cutoff.
382
-
383
- This is a provider-independent local tool backed by Exa or Parallel. Provider-hosted web search tools are separate and execute at the model provider.
384
-
385
- Optional controls support result count, live crawling ('fallback' or 'preferred'), search type ('auto', 'fast', or 'deep'), and maximum context characters.
386
-
387
- The current year is ${new Date().getFullYear()}. Use this year when searching for recent information or current events.`,fm=K.Struct({query:K.String.annotate({description:"Websearch query"}),numResults:K.optional(Ge.check(K.isLessThanOrEqualTo(Bc))).annotate({description:`Number of search results to return (default: 8, maximum: ${Bc})`}),livecrawl:K.optional(K.Literals(["fallback","preferred"])).annotate({description:"Live crawl mode - 'fallback': use live crawling as backup if cached unavailable, 'preferred': prioritize live crawling (default: 'fallback')"}),type:K.optional(K.Literals(["auto","fast","deep"])).annotate({description:"Search type - 'auto': balanced search (default), 'fast': quick results, 'deep': comprehensive search"}),contextMaxCharacters:K.optional(Ge.check(K.isLessThanOrEqualTo(Vc))).annotate({description:`Maximum characters for context string optimized for models (default: 10000, maximum: ${Vc})`})}),mm=K.Literals(["exa","parallel"]),Nr=class extends vw.Service()("@opencode/v2/WebSearchConfig"){static{n(this,"ConfigService")}},ym=cm.sync(Nr,()=>Nr.of({provider:process.env.OPENCODE_WEBSEARCH_PROVIDER==="exa"||process.env.OPENCODE_WEBSEARCH_PROVIDER==="parallel"?process.env.OPENCODE_WEBSEARCH_PROVIDER:void 0,enableExa:Br("OPENCODE_EXPERIMENTAL")||Br("OPENCODE_ENABLE_EXA")||Br("OPENCODE_EXPERIMENTAL_EXA"),enableParallel:Br("OPENCODE_ENABLE_PARALLEL")||Br("OPENCODE_EXPERIMENTAL_PARALLEL"),exaApiKey:process.env.EXA_API_KEY,parallelApiKey:process.env.PARALLEL_API_KEY})),hm=A({service:Nr,layer:ym,deps:[]});function gm(e,t={enableExa:!1,enableParallel:!1},r){return r||(t.enableParallel?"parallel":t.enableExa||Number.parseInt(im(e)??"0",36)%2===0?"exa":"parallel")}n(gm,"selectProvider");var kw=K.Struct({result:K.Struct({content:K.Array(K.Struct({type:K.String,text:K.String}))})}),Tw=K.decodeUnknownEffect(K.fromJsonString(kw)),sm=n(e=>It.gen(function*(){let t=e.trim();if(t.startsWith("{"))return(yield*Tw(t)).result.content.find(r=>r.text)?.text}),"parsePayload"),xm=It.fn("WebSearchTool.parseResponse")(function*(e){let t=e.trim(),r=t?yield*sm(t):void 0;if(r)return r;for(let o of e.split(`
388
- `)){if(!o.startsWith("data: "))continue;let a=yield*sm(o.substring(6));if(a)return a}}),Iw=K.Struct({query:K.String,type:K.String,numResults:K.Number,livecrawl:K.String,contextMaxCharacters:K.optional(K.Number)}),Ow=K.Struct({objective:K.String,search_queries:K.Array(K.String),session_id:K.String}),Dw=n(e=>K.Struct({jsonrpc:K.Literal("2.0"),id:K.Literal(1),method:K.Literal("tools/call"),params:K.Struct({name:K.String,arguments:e})}),"McpRequest"),Rw=n(e=>{if(!e)return qc;let t=new URL(qc);return t.searchParams.set("exaApiKey",e),t.toString()},"exaUrl"),am=n((e,t,r,o,a,s={})=>It.gen(function*(){let i=yield*ns.post(t).pipe(ns.accept("application/json, text/event-stream"),ns.setHeaders(s),ns.schemaBodyJson(Dw(o))({jsonrpc:"2.0",id:1,method:"tools/call",params:{name:r,arguments:a}}));return yield*It.gen(function*(){let c=yield*lm.filterStatusOk(e).execute(i),l=yield*rs(c,Hc,()=>new Error(`${r} response exceeded ${Hc} bytes`));return yield*xm(l.toString("utf8"))}).pipe(It.timeoutOrElse({duration:ww.seconds(25),orElse:n(()=>It.fail(new Error(`${r} request timed out`)),"orElse")}))}),"callMcp"),_w=K.Struct({provider:mm,text:K.String}),Aw=cm.effectDiscard(It.gen(function*(){let e=yield*ie.Service,t=yield*lm.HttpClient,r=yield*Nr,o=yield*V.Service;yield*e.register({[Wc]:te.make({description:um,input:fm,output:_w,toModelOutput:n(({output:a})=>[{type:"text",text:a.text}],"toModelOutput"),execute:n((a,s)=>{let i=gm(s.sessionID,r,r.provider);return It.gen(function*(){yield*o.assert({action:Wc,resources:[a.query],save:["*"],metadata:{...a,provider:i},sessionID:s.sessionID,agent:s.agent,source:{type:"tool",messageID:s.assistantMessageID,callID:s.toolCallID}});let c=i==="exa"?yield*am(t,Rw(r.exaApiKey),"web_search_exa",Iw,{query:a.query,type:a.type||"auto",numResults:a.numResults||8,livecrawl:a.livecrawl||"fallback",contextMaxCharacters:a.contextMaxCharacters}):yield*am(t,pm,"web_search",Ow,{objective:a.query,search_queries:[a.query],session_id:s.sessionID},{"User-Agent":`opencode/${ce}`,...r.parallelApiKey?{Authorization:`Bearer ${r.parallelApiKey}`}:{}});return{provider:i,text:c??dm}}).pipe(It.mapError(()=>new J({message:`Unable to search the web for ${a.query}`})))},"execute")})}).pipe(It.orDie)})),Pw=A({name:"tool/websearch",layer:Aw,deps:[ee.node,V.node,qo.httpClient,hm]});var Uo={};U(Uo,{Input:()=>Sm,Output:()=>Em,WriteTool:()=>Uo,name:()=>bm,node:()=>Lw,toModelOutput:()=>vm});import{Effect as os,Layer as Cw,Schema as or}from"effect";var bm="write",Sm=or.Struct({path:or.String.annotate({description:"File path to write. Relative paths resolve within the active Location. Absolute paths inside that Location are accepted; external absolute paths require external_directory approval."}),content:or.String.annotate({description:"Content to write to the file"})}),Em=or.Struct({operation:or.Literal("write"),target:or.String,resource:or.String,existed:or.Boolean}),vm=n(e=>`${e.existed?"Wrote":"Created"} file successfully: ${e.resource}`,"toModelOutput"),Mw=Cw.effectDiscard(os.gen(function*(){let e=yield*ie.Service,t=yield*fe.Service,r=yield*qe.Service,o=yield*V.Service;yield*e.register({[bm]:te.withPermission(te.make({description:"Write content to one file. Relative paths resolve within the active Location. Absolute paths inside the Location are accepted. Explicit external absolute paths require external_directory approval before edit approval.",input:Sm,output:Em,toModelOutput:n(({output:a})=>[{type:"text",text:vm(a)}],"toModelOutput"),execute:n((a,s)=>os.gen(function*(){let i={type:"tool",messageID:s.assistantMessageID,callID:s.toolCallID},c=yield*t.resolve({path:a.path,kind:"file"}),l=c.externalDirectory;return l&&(yield*o.assert({...fe.externalDirectoryPermission(l),sessionID:s.sessionID,agent:s.agent,source:i})),yield*o.assert({action:"edit",resources:[c.resource],save:["*"],sessionID:s.sessionID,agent:s.agent,source:i}),yield*r.writeTextPreservingBom({target:c,content:a.content})}).pipe(os.mapError(()=>new J({message:`Unable to write ${a.path}`}))),"execute")}),"edit")}).pipe(os.orDie)})),Lw=A({name:"tool/write",layer:Mw,deps:[ee.node,fe.node,qe.node,V.node]});var Nw=A({name:"built-in-tools",layer:Uw.empty,deps:[xo.node,go.node,bo.node,Eo.node,vo.node,wo.node,Ro.node,Ao.node,Po.node,Mo.node,Lo.node,Uo.node]});var $w=He.group([Z.node,pl.node,_e.node,Pn.node,ml.node,dr.node,ul.node,fl.node,Zc.node,Ln.node,vl.node,an.node,an.refreshNode,yl.node,Ae.node,to.node,io.node,Dt.node,Xe.node,ho.node,fe.node,qe.node,V.node,Ft.node,ee.node,ee.toolsNode,cr.node,tr.node,er.node,kt.node,ct.node,Be.node,No.node,Mn.node,Cn.node,tf]);function zw(e=[]){return is.effect(Jr.Service,Fw.make(t=>{let r=e.concat([[Z.node,Z.boundNode(t)]]),o=He.hoist($w,Yc.tags.values.global,r);return He.compile(o.node).pipe(is.fresh,is.tap(()=>jw.logInfo("booting location services",{directory:t.directory,workspaceID:t.workspaceID})),is.provide(He.compile(o.hoisted)))},{idleTimeToLive:"60 minutes"}))}n(zw,"buildLocationServiceMap");var wm=zw();var Xw=re.Struct({name:re.String,description:re.optional(re.String),mode:re.Literals(["subagent","primary","all"]),native:re.optional(re.Boolean),hidden:re.optional(re.Boolean),topP:re.optional(re.Finite),temperature:re.optional(re.Finite),color:re.optional(re.String),permission:xl.Ruleset,model:re.optional(re.Struct({modelID:$e.ID,providerID:Q.ID})),variant:re.optional(re.String),prompt:re.optional(re.String),options:re.Record(re.String,re.Unknown),steps:re.optional(re.Finite)}).annotate({identifier:"Agent"}),km=re.Struct({identifier:re.String,whenToUse:re.String,systemPrompt:re.String}),jr=class extends Kw.Service()("@opencode/Agent"){static{n(this,"Service")}},Yw=Wo(jr),Qw=Jw.effect(jr,Ne.gen(function*(){let e=yield*ft.Service,t=yield*Yr.Service,r=yield*Ct.Service,o=yield*Ts.Service,a=yield*Sr.Service,s=yield*Jr.Service,i=yield*Ee.make(Ne.fn("Agent.state")(function*(c){let l=yield*e.get(),d=yield*o.dirs(),p=Object.keys(l.references??l.reference??{}).length?yield*Ne.gen(function*(){return yield*(yield*Ln.Service).wait(Ln.ID.make("core/config-reference")),(yield*(yield*dr.Service).list()).map(b=>b.path)}).pipe(Ne.provide(s.get(Z.Ref.make({directory:ye.make(c.directory)})))):[],u=[Ht.GLOB,ir.join(he.Path.tmp,"*"),...d.map(b=>ir.join(b,"*")),...p.map(b=>ir.join(b,"*"))],h={"*":"ask",...Object.fromEntries(u.map(b=>[b,"allow"]))},g=ve.fromConfig({"*":"allow",doom_loop:"ask",external_directory:{"*":"ask",...Object.fromEntries(u.map(b=>[b,"allow"]))},question:"deny",plan_enter:"deny",plan_exit:"deny",read:{"*":"allow","*.env":"ask","*.env.*":"ask","*.env.example":"allow"}}),x=ve.fromConfig(l.permission??{}),S={build:{name:"build",description:"The default agent. Executes tools based on configured permissions.",options:{},permission:ve.merge(g,ve.fromConfig({question:"allow",plan_enter:"allow"}),x),mode:"primary",native:!0},plan:{name:"plan",description:"Plan mode. Disallows all edit tools.",options:{},permission:ve.merge(g,ve.fromConfig({question:"allow",plan_exit:"allow",task:{general:"deny"},external_directory:{[ir.join(he.Path.data,"plans","*")]:"allow"},edit:{"*":"deny",[ir.join(".opencode","plans","*.md")]:"allow",[ir.relative(c.worktree,ir.join(he.Path.data,ir.join("plans","*.md")))]:"allow"}}),x),mode:"primary",native:!0},general:{name:"general",description:"General-purpose agent for researching complex questions and executing multi-step tasks. Use this agent to execute multiple units of work in parallel.",permission:ve.merge(g,ve.fromConfig({todowrite:"deny"}),x),options:{},mode:"subagent",native:!0},explore:{name:"explore",permission:ve.merge(g,ve.fromConfig({"*":"deny",grep:"allow",glob:"allow",list:"allow",bash:"allow",webfetch:"allow",websearch:"allow",read:"allow",external_directory:h}),x),description:'Fast agent specialized for exploring codebases. Use this when you need to quickly find files by patterns (eg. "src/components/**/*.tsx"), search code for keywords (eg. "API endpoints"), or answer questions about the codebase (eg. "how do API endpoints work?"). When calling this agent, specify the desired thoroughness level: "quick" for basic searches, "medium" for moderate exploration, or "very thorough" for comprehensive analysis across multiple locations and naming conventions.',prompt:_p,options:{},mode:"subagent",native:!0},compaction:{name:"compaction",mode:"primary",native:!0,hidden:!0,prompt:Rp,permission:ve.merge(g,ve.fromConfig({"*":"deny"}),x),options:{}},title:{name:"title",mode:"primary",options:{},native:!0,hidden:!0,temperature:.5,permission:ve.merge(g,ve.fromConfig({"*":"deny"}),x),prompt:Pp},summary:{name:"summary",mode:"primary",options:{},native:!0,hidden:!0,permission:ve.merge(g,ve.fromConfig({"*":"deny"}),x),prompt:Ap}};for(let[b,w]of Object.entries(l.agent??{})){if(w.disable){delete S[b];continue}let k=S[b];k||(k=S[b]={name:b,mode:"all",permission:ve.merge(g,x),options:{},native:!1}),w.model&&(k.model=Sr.parseModel(w.model)),k.variant=w.variant??k.variant,k.prompt=w.prompt??k.prompt,k.description=w.description??k.description,k.temperature=w.temperature??k.temperature,k.topP=w.top_p??k.topP,k.mode=w.mode??k.mode,k.color=w.color??k.color,k.hidden=w.hidden??k.hidden,k.name=w.name??k.name,k.steps=w.steps??k.steps,k.options=Bw(k.options,w.options??{}),k.permission=ve.merge(k.permission,ve.fromConfig(w.permission??{}))}for(let b in S)S[b].permission.some(y=>y.permission!=="external_directory"||y.action!=="deny"?!1:y.pattern===Ht.GLOB)||(S[b].permission=ve.merge(S[b].permission,ve.fromConfig({external_directory:{[Ht.GLOB]:"allow"}})));let f=Ne.fnUntraced(function*(b){return S[b]}),v=Ne.fnUntraced(function*(){let b=yield*e.get();return Vw(S,Gw(),Hw([w=>b.default_agent?w.name===b.default_agent:w.name==="build","desc"],[w=>w.name,"asc"]))}),E=Ne.fnUntraced(function*(){let b=yield*e.get();if(b.default_agent){let k=S[b.default_agent];if(!k)throw new Error(`default agent "${b.default_agent}" not found`);if(k.mode==="subagent")throw new Error(`default agent "${b.default_agent}" is a subagent`);if(k.hidden===!0)throw new Error(`default agent "${b.default_agent}" is hidden`);return k}let w=Object.values(S).find(k=>k.mode!=="subagent"&&k.hidden!==!0);if(!w)throw new Error("no primary visible agent found");return w}),m=Ne.fnUntraced(function*(){return(yield*E()).name});return{get:f,list:v,defaultInfo:E,defaultAgent:m}}));return jr.of({get:Ne.fn("Agent.get")(function*(c){return yield*Ee.useEffect(i,l=>l.get(c))}),list:Ne.fn("Agent.list")(function*(){return yield*Ee.useEffect(i,c=>c.list())}),defaultInfo:Ne.fn("Agent.defaultInfo")(function*(){return yield*Ee.useEffect(i,c=>c.defaultInfo())}),defaultAgent:Ne.fn("Agent.defaultAgent")(function*(){return yield*Ee.useEffect(i,c=>c.defaultAgent())}),generate:Ne.fn("Agent.generate")(function*(c){let l=yield*e.get(),d=c.model??(yield*a.defaultModel()),p=yield*a.getModel(d.providerID,d.modelID),u=yield*a.getLanguage(p),h=l.experimental?.openTelemetry?Tm.getOrUndefined(yield*Ne.serviceOption(Im.OtelTracer)):void 0,g=[Dp];yield*r.trigger("experimental.chat.system.transform",{model:p},{system:g});let x=yield*Ee.useEffect(i,E=>E.list()),S=yield*t.get(d.providerID).pipe(Ne.orDie),f=d.providerID==="openai"&&S?.type==="oauth",v={experimental_telemetry:{isEnabled:l.experimental?.openTelemetry,tracer:h,metadata:{userId:l.username??"unknown"}},temperature:.3,messages:[...f?[]:g.map(E=>({role:"system",content:E})),{role:"user",content:`Create an agent configuration based on this request: "${c.description}".
389
-
390
- IMPORTANT: The following identifiers already exist and must NOT be used: ${x.map(E=>E.name).join(", ")}
391
- Return ONLY the JSON object, no other text, do not wrap in backticks`}],model:u,schema:Object.assign(re.toStandardSchemaV1(km),re.toStandardJSONSchemaV1(km))};return f?yield*Ne.promise(async()=>{let E=qw({...v,providerOptions:yt.providerOptions(p,{instructions:g.join(`
392
- `),store:!1}),onError:n(()=>{},"onError")});for await(let m of E.fullStream)if(m.type==="error")throw m.error;return E.object}):yield*Ne.promise(()=>Ww(v).then(E=>E.object))})})})),Zw=He.make({service:Jr.Service,layer:wm,deps:[]}),ek=He.make({service:jr,layer:Qw,deps:[ft.node,Yr.node,Ct.node,Ts.node,Sr.node,Zw]});var Gc=class extends ss.TaggedErrorClass()("ToolInvalidArgumentsError",{tool:ss.String,detail:ss.String}){static{n(this,"InvalidArgumentsError")}get message(){return`The ${this.tool} tool was called with invalid arguments: ${this.detail}.
393
- Please rewrite the input so it satisfies the expected schema.`}};function Kc(e){if(e===null)return!0;if(e===void 0||typeof e!="object")return!1;if(Array.isArray(e)){for(let t of e)if(Kc(t))return!0;return!1}for(let t of Object.values(e))if(Kc(t))return!0;return!1}n(Kc,"hasNullsDeep");function Jc(e){if(!Kc(e))return e;if(e===null)return;if(Array.isArray(e))return e.map(Jc).filter(r=>r!==void 0);let t={};for(let[r,o]of Object.entries(e)){let a=Jc(o);a!==void 0&&(t[r]=a)}return t}n(Jc,"stripNullish");function tk(e,t,r,o){return()=>Fr.gen(function*(){let a=typeof t=="function"?{...yield*t()}:{...t},s=ss.decodeUnknownEffect(a.parameters),i=a.execute;return a.execute=(c,l)=>{let d={"tool.name":e,"session.id":l.sessionID,"message.id":l.messageID,...l.callID?{"tool.call_id":l.callID}:{}};return Fr.gen(function*(){let p=yield*s(Jc(c)).pipe(Fr.mapError(x=>new Gc({tool:e,detail:a.formatValidationError?a.formatValidationError(x):String(x)}))),u=yield*i(p,l);if(u.metadata.truncated!==void 0)return u;let h=yield*o.get(l.agent),g=yield*r.output(u.output,{},h);return{...u,output:g.content,metadata:{...u.metadata,truncated:g.truncated,...g.truncated&&{outputPath:g.outputPath}}}}).pipe(Fr.orDie,Fr.withSpan("Tool.execute",{attributes:d}))},a})}n(tk,"wrap");function QN(e,t){return Object.assign(Fr.gen(function*(){let r=yield*t,o=yield*Vt,a=yield*jo.Service;return{id:e,init:tk(e,r,o,a)}}),{id:e})}n(QN,"define");function ZN(e){return Fr.gen(function*(){return{...yield*e.init(),id:e.id}})}n(ZN,"init");export{Qn as a,to as b,Ka as c,Qt as d,an as e,Nt as f,Zt as g,ln as h,io as i,tt as j,ct as k,Rr as l,Gu as m,iE as n,Zu as o,Sn as p,zw as q,wm as r,Fn as s,va as t,cO as u,yt as v,Vt as w,jm as x,Ht as y,QN as z,ZN as A,hO as B,gO as C,Bh as D,Ct as E,Sr as F,jo as G};