alchemylab-opencode 1.0.22 → 1.0.23

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.
@@ -9,7 +9,7 @@ if (typeof globalThis.Bun === 'undefined') {
9
9
  if (typeof globalThis.__name === 'undefined') { globalThis.__name = (t, n) => { Object.defineProperty(t, 'name', { value: n, configurable: true }); return t; }; }
10
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
11
 
12
- import{A as $s,C as Yo,D as Be,a as Ia,b as io,c as ao,d as Xt,e as Jr,f as Jt,g as Kr,h as ka,i as mt,j as Ea,k as Ho,l as Da,m as Vo,n as Me,r as Sa,s as Ta,t as Pa,u as Oa,v as _a,w as Ra,x as Ca,y as Aa,z as Ma}from"./chunk-WF7L36SZ.js";import{B as qe,b as Ct,c as Gn,d as tt,e as ze,h as ae,i as Do,j as Ft,k as ke,m as Go,n as It,o as En,p as ro,q as So,r as qs,s as ht,t as kt,u as wr,v as st,w as so,x as xa,z as ne}from"./chunk-N7PLTD3P.js";import{a as vt,b as Ee,c as Ve,d as nt}from"./chunk-7KKA6WBY.js";import{a as Hn,b as Yr}from"./chunk-LTCXIXYM.js";import{a as Eo,b as br,c as Te,d as wt,e as Ae}from"./chunk-M4CB72HE.js";import{a as n,c as xu,e as Mn,f as jn}from"./chunk-MBZTOEAD.js";import Gh from"zod";import Hh from"path";import Ou from"zod";import{Effect as _u}from"effect";import{NodePath as Du}from"@effect/platform-node";import{Cause as Su,Duration as Zr,Effect as an,Layer as Ws,Schedule as Tu,ServiceMap as Pu}from"effect";import Bs from"path";import{sortBy as ja,pipe as La}from"remeda";var To;(m=>{function t(c,a){c&&(c=c.replaceAll("\\","/")),a&&(a=a.replaceAll("\\","/"));let d=a.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");d.endsWith(" .*")&&(d=d.slice(0,-3)+"( .*)?");let b=process.platform==="win32"?"si":"s";return new RegExp("^"+d+"$",b).test(c)}m.match=t,n(t,"match");function e(c,a){let d=La(a,Object.entries,ja([([s])=>s.length,"asc"],[([s])=>s,"asc"])),b;for(let[s,p]of d)if(t(c,s)){b=p;continue}return b}m.all=e,n(e,"all");function o(c,a){let d=La(a,Object.entries,ja([([s])=>s.length,"asc"],[([s])=>s,"asc"])),b;for(let[s,p]of d){let w=s.split(/\s+/);if(t(c.head,w[0])&&(w.length===1||i(c.tail,w.slice(1)))){b=p;continue}}return b}m.allStructured=o,n(o,"allStructured");function i(c,a){if(a.length===0)return!0;let[d,...b]=a;if(d==="*")return i(c,b);for(let s=0;s<c.length;s++)if(t(c[s],d)&&i(c.slice(s+1),b))return!0;return!1}n(i,"matchSequence")})(To||={});function Xr(t,e,...o){return o.flat().findLast(c=>To.match(t,c.permission)&&To.match(e,c.pattern))??{action:"ask",permission:t,pattern:"*"}}n(Xr,"evaluate");import{Schema as Na}from"effect";import Iu from"zod";var ku=Na.String.pipe(Na.brand("ToolID")),Ua=ku.pipe(Hn(t=>({make:n(e=>t.makeUnsafe(e),"make"),ascending:n(e=>t.makeUnsafe(vt.ascending("tool",e)),"ascending"),zod:vt.schema("tool").pipe(Iu.custom())})));import Eu from"path";var Po=Eu.join(wt.Path.data,"tool-output");var ln;(f=>{let t=Ae.create({service:"truncation"}),e=Zr.days(7);f.MAX_LINES=2e3,f.MAX_BYTES=50*1024,f.DIR=Po,f.GLOB=Bs.join(Po,"*");function a(v){return v?.permission?Xr("task","*",v.permission).action!=="deny":!1}n(a,"hasTaskTool");class d extends Pu.Service()("@opencode/Truncate"){static{n(this,"Service")}}f.Service=d,f.layer=Ws.effect(d,an.gen(function*(){let v=yield*st.Service,I=an.fn("Truncate.cleanup")(function*(){let S=vt.timestamp(vt.create("tool",!1,Date.now()-Zr.toMillis(e))),C=yield*v.readDirectory(Po).pipe(an.map(l=>l.filter(P=>P.startsWith("tool_"))),an.catch(()=>an.succeed([])));for(let l of C)vt.timestamp(l)>=S||(yield*v.remove(Bs.join(Po,l)).pipe(an.catch(()=>an.void)))}),h=an.fn("Truncate.output")(function*(S,C={},l){let P=C.maxLines??f.MAX_LINES,y=C.maxBytes??f.MAX_BYTES,D=C.direction??"head",T=S.split(`
12
+ import{A as $s,C as Yo,D as Be,a as Ia,b as io,c as ao,d as Xt,e as Jr,f as Jt,g as Kr,h as ka,i as mt,j as Ea,k as Ho,l as Da,m as Vo,n as Me,r as Sa,s as Ta,t as Pa,u as Oa,v as _a,w as Ra,x as Ca,y as Aa,z as Ma}from"./chunk-22MFGOA6.js";import{B as qe,b as Ct,c as Gn,d as tt,e as ze,h as ae,i as Do,j as Ft,k as ke,m as Go,n as It,o as En,p as ro,q as So,r as qs,s as ht,t as kt,u as wr,v as st,w as so,x as xa,z as ne}from"./chunk-N7PLTD3P.js";import{a as vt,b as Ee,c as Ve,d as nt}from"./chunk-7KKA6WBY.js";import{a as Hn,b as Yr}from"./chunk-LTCXIXYM.js";import{a as Eo,b as br,c as Te,d as wt,e as Ae}from"./chunk-M4CB72HE.js";import{a as n,c as Iu,e as Mn,f as jn}from"./chunk-MBZTOEAD.js";import Hh from"zod";import Vh from"path";import _u from"zod";import{Effect as Ru}from"effect";import{NodePath as Su}from"@effect/platform-node";import{Cause as Tu,Duration as Zr,Effect as an,Layer as Ws,Schedule as Pu,ServiceMap as Ou}from"effect";import Bs from"path";import{sortBy as ja,pipe as La}from"remeda";var To;(m=>{function t(c,a){c&&(c=c.replaceAll("\\","/")),a&&(a=a.replaceAll("\\","/"));let d=a.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");d.endsWith(" .*")&&(d=d.slice(0,-3)+"( .*)?");let b=process.platform==="win32"?"si":"s";return new RegExp("^"+d+"$",b).test(c)}m.match=t,n(t,"match");function e(c,a){let d=La(a,Object.entries,ja([([s])=>s.length,"asc"],[([s])=>s,"asc"])),b;for(let[s,p]of d)if(t(c,s)){b=p;continue}return b}m.all=e,n(e,"all");function o(c,a){let d=La(a,Object.entries,ja([([s])=>s.length,"asc"],[([s])=>s,"asc"])),b;for(let[s,p]of d){let w=s.split(/\s+/);if(t(c.head,w[0])&&(w.length===1||i(c.tail,w.slice(1)))){b=p;continue}}return b}m.allStructured=o,n(o,"allStructured");function i(c,a){if(a.length===0)return!0;let[d,...b]=a;if(d==="*")return i(c,b);for(let s=0;s<c.length;s++)if(t(c[s],d)&&i(c.slice(s+1),b))return!0;return!1}n(i,"matchSequence")})(To||={});function Xr(t,e,...o){return o.flat().findLast(c=>To.match(t,c.permission)&&To.match(e,c.pattern))??{action:"ask",permission:t,pattern:"*"}}n(Xr,"evaluate");import{Schema as Na}from"effect";import ku from"zod";var Eu=Na.String.pipe(Na.brand("ToolID")),Ua=Eu.pipe(Hn(t=>({make:n(e=>t.makeUnsafe(e),"make"),ascending:n(e=>t.makeUnsafe(vt.ascending("tool",e)),"ascending"),zod:vt.schema("tool").pipe(ku.custom())})));import Du from"path";var Po=Du.join(wt.Path.data,"tool-output");var ln;(f=>{let t=Ae.create({service:"truncation"}),e=Zr.days(7);f.MAX_LINES=2e3,f.MAX_BYTES=50*1024,f.DIR=Po,f.GLOB=Bs.join(Po,"*");function a(v){return v?.permission?Xr("task","*",v.permission).action!=="deny":!1}n(a,"hasTaskTool");class d extends Ou.Service()("@opencode/Truncate"){static{n(this,"Service")}}f.Service=d,f.layer=Ws.effect(d,an.gen(function*(){let v=yield*st.Service,I=an.fn("Truncate.cleanup")(function*(){let S=vt.timestamp(vt.create("tool",!1,Date.now()-Zr.toMillis(e))),C=yield*v.readDirectory(Po).pipe(an.map(l=>l.filter(P=>P.startsWith("tool_"))),an.catch(()=>an.succeed([])));for(let l of C)vt.timestamp(l)>=S||(yield*v.remove(Bs.join(Po,l)).pipe(an.catch(()=>an.void)))}),h=an.fn("Truncate.output")(function*(S,C={},l){let P=C.maxLines??f.MAX_LINES,y=C.maxBytes??f.MAX_BYTES,D=C.direction??"head",T=S.split(`
13
13
  `),R=Buffer.byteLength(S,"utf-8");if(T.length<=P&&R<=y)return{content:S,truncated:!1};let _=[],E=0,x=0,k=!1;if(D==="head")for(E=0;E<T.length&&E<P;E++){let j=Buffer.byteLength(T[E],"utf-8")+(E>0?1:0);if(x+j>y){k=!0;break}_.push(T[E]),x+=j}else for(E=T.length-1;E>=0&&_.length<P;E--){let j=Buffer.byteLength(T[E],"utf-8")+(_.length>0?1:0);if(x+j>y){k=!0;break}_.unshift(T[E]),x+=j}let M=k?R-x:T.length-_.length,r=k?"bytes":"lines",u=_.join(`
14
14
  `),g=Bs.join(Po,Ua.ascending());yield*v.ensureDir(Po).pipe(an.orDie),yield*v.writeFileString(g,S).pipe(an.orDie);let L=a(l)?`The tool call succeeded but the output was truncated. Full output saved to: ${g}
15
15
  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: ${g}
@@ -21,9 +21,9 @@ ${L}`:`...${M} ${r} truncated...
21
21
 
22
22
  ${L}
23
23
 
24
- ${u}`,truncated:!0,outputPath:g}});return yield*I().pipe(an.catchCause(S=>(t.error("truncation cleanup failed",{cause:Su.pretty(S)}),an.void)),an.repeat(Tu.spaced(Zr.hours(1))),an.delay(Zr.minutes(1)),an.forkScoped),d.of({cleanup:I,output:h})})),f.defaultLayer=f.layer.pipe(Ws.provide(st.defaultLayer),Ws.provide(Du.layer));let{runPromise:p}=qe(d,f.defaultLayer);async function w(v,I={},h){return p(S=>S.output(v,I,h))}f.output=w,n(w,"output")})(ln||={});var it;(c=>{function t(a){if(a===null)return!0;if(a===void 0||typeof a!="object")return!1;if(Array.isArray(a)){for(let d of a)if(t(d))return!0;return!1}for(let d of Object.values(a))if(t(d))return!0;return!1}n(t,"hasNullsDeep");function e(a){if(!t(a))return a;if(a===null)return;if(Array.isArray(a))return a.map(e).filter(b=>b!==void 0);let d={};for(let[b,s]of Object.entries(a)){let p=e(s);p!==void 0&&(d[b]=p)}return d}n(e,"stripNullish");function o(a,d){return async b=>{let s=d instanceof Function?await d(b):{...d},p=s.execute;return s.execute=async(w,f)=>{w=e(w);try{s.parameters.parse(w)}catch(h){throw h instanceof Ou.ZodError&&s.formatValidationError?new Error(s.formatValidationError(h),{cause:h}):new Error(`The ${a} tool was called with invalid arguments: ${h}.
25
- Please rewrite the input so it satisfies the expected schema.`,{cause:h})}let v=await p(w,f);if(v.metadata.truncated!==void 0)return v;let I=await ln.output(v.output,{},b?.agent);return{...v,output:I.content,metadata:{...v.metadata,truncated:I.truncated,...I.truncated&&{outputPath:I.outputPath}}}},s}}n(o,"wrap");function i(a,d){return{id:a,init:o(a,d)}}c.define=i,n(i,"define");function m(a,d){return _u.map(d,b=>({id:a,init:o(a,b)}))}c.defineEffect=m,n(m,"defineEffect")})(it||={});import{Deferred as vr,Effect as Un,Layer as za,Schema as Cu,ServiceMap as Au}from"effect";import $t from"zod";import{Schema as Ru}from"effect";var Oo=class extends Yr()("QuestionID",Ru.String){static{n(this,"QuestionID")}static make(e){return this.makeUnsafe(e)}static ascending(e){return this.makeUnsafe(vt.ascending("question",e))}static zod=vt.schema("question")};var Ln;(S=>{let t=Ae.create({service:"question"});S.Option=$t.object({label:$t.string().describe("Display text (1-5 words, concise)"),description:$t.string().describe("Explanation of choice")}).meta({ref:"QuestionOption"}),S.Info=$t.object({question:$t.string().describe("Complete question"),header:$t.string().describe("Very short label (max 30 chars)"),options:$t.array(S.Option).describe("Available choices"),multiple:$t.boolean().optional().describe("Allow selecting multiple choices"),custom:$t.boolean().optional().describe("Allow typing a custom answer (default: true)")}).meta({ref:"QuestionInfo"}),S.Request=$t.object({id:Oo.zod,sessionID:Ee.zod,questions:$t.array(S.Info).describe("Questions to ask"),tool:$t.object({messageID:Ve.zod,callID:$t.string()}).optional()}).meta({ref:"QuestionRequest"}),S.Answer=$t.array($t.string()).meta({ref:"QuestionAnswer"}),S.Reply=$t.object({answers:$t.array(S.Answer).describe("User answers in order of questions (each answer is an array of selected labels)")}),S.Event={Asked:ht.define("question.asked",S.Request),Replied:ht.define("question.replied",$t.object({sessionID:Ee.zod,requestID:Oo.zod,answers:$t.array(S.Answer)})),Rejected:ht.define("question.rejected",$t.object({sessionID:Ee.zod,requestID:Oo.zod}))};class d extends Cu.TaggedErrorClass()("QuestionRejectedError",{}){static{n(this,"RejectedError")}get message(){return"The user dismissed this question"}}S.RejectedError=d;class b extends Au.Service()("@opencode/Question"){static{n(this,"Service")}}S.Service=b,S.layer=za.effect(b,Un.gen(function*(){let C=yield*Me.Service,l=yield*ae.make(Un.fn("Question.state")(function*(){let R={pending:new Map};return yield*Un.addFinalizer(()=>Un.gen(function*(){for(let _ of R.pending.values())yield*vr.fail(_.deferred,new d);R.pending.clear()})),R})),P=Un.fn("Question.ask")(function*(R){let _=(yield*ae.get(l)).pending,E=Oo.ascending();t.info("asking",{id:E,questions:R.questions.length});let x=yield*vr.make(),k={id:E,sessionID:R.sessionID,questions:R.questions,tool:R.tool};return _.set(E,{info:k,deferred:x}),yield*C.publish(S.Event.Asked,k),yield*Un.ensuring(vr.await(x),Un.sync(()=>{_.delete(E)}))}),y=Un.fn("Question.reply")(function*(R){let _=(yield*ae.get(l)).pending,E=_.get(R.requestID);if(!E){t.warn("reply for unknown request",{requestID:R.requestID});return}_.delete(R.requestID),t.info("replied",{requestID:R.requestID,answers:R.answers}),yield*C.publish(S.Event.Replied,{sessionID:E.info.sessionID,requestID:E.info.id,answers:R.answers}),yield*vr.succeed(E.deferred,R.answers)}),D=Un.fn("Question.reject")(function*(R){let _=(yield*ae.get(l)).pending,E=_.get(R);if(!E){t.warn("reject for unknown request",{requestID:R});return}_.delete(R),t.info("rejected",{requestID:R}),yield*C.publish(S.Event.Rejected,{sessionID:E.info.sessionID,requestID:E.info.id}),yield*vr.fail(E.deferred,new d)}),T=Un.fn("Question.list")(function*(){let R=(yield*ae.get(l)).pending;return Array.from(R.values(),_=>_.info)});return b.of({ask:P,reply:y,reject:D,list:T})})),S.defaultLayer=S.layer.pipe(za.provide(Me.layer));let{runPromise:w}=qe(b,S.defaultLayer);async function f(C){return w(l=>l.ask(C))}S.ask=f,n(f,"ask");async function v(C){return w(l=>l.reply(C))}S.reply=v,n(v,"reply");async function I(C){return w(l=>l.reject(C))}S.reject=I,n(I,"reject");async function h(){return w(C=>C.list())}S.list=h,n(h,"list")})(Ln||={});var Gs;(i=>{let t=["brave","calm","clever","cosmic","crisp","curious","eager","gentle","glowing","happy","hidden","jolly","kind","lucky","mighty","misty","neon","nimble","playful","proud","quick","quiet","shiny","silent","stellar","sunny","swift","tidy","witty"],e=["cabin","cactus","canyon","circuit","comet","eagle","engine","falcon","forest","garden","harbor","island","knight","lagoon","meadow","moon","mountain","nebula","orchid","otter","panda","pixel","planet","river","rocket","sailor","squid","star","tiger","wizard","wolf"];function o(){return[t[Math.floor(Math.random()*t.length)],e[Math.floor(Math.random()*e.length)]].join("-")}i.create=o,n(o,"create")})(Gs||={});import Ji from"path";import{Decimal as cr}from"decimal.js";import Fe from"zod";import es from"zod";import{EventEmitter as ju}from"events";import{sqliteTable as Fa,text as xr,integer as qa}from"drizzle-orm/sqlite-core";var Dn=Fa("event_sequence",{aggregate_id:xr().notNull().primaryKey(),seq:qa().notNull()}),Qr=Fa("event",{id:xr().primaryKey(),aggregate_id:xr().notNull().references(()=>Dn.aggregate_id,{onDelete:"cascade"}),seq:qa().notNull(),type:xr().notNull(),data:xr({mode:"json"}).$type().notNull()});import{Schema as $a}from"effect";import Mu from"zod";var Wa=$a.String.pipe($a.brand("EventID"),Hn(t=>({make:n(e=>t.makeUnsafe(e),"make"),ascending:n(e=>t.makeUnsafe(vt.ascending("event",e)),"ascending"),zod:vt.schema("event").pipe(Mu.custom())})));var Nt;(C=>{C.registry=new Map;let e,o=new Map,i=!1,m,c=new ju;function a(){i=!1,e=void 0,m=n((l,P)=>P,"convertEvent")}C.reset=a,n(a,"reset");function d(l){e=new Map(l.projectors);for(let[P,y]of o.entries()){let D=C.registry.get(b(P,y));ht.define(D.type,D.properties||D.schema)}i=!0,m=l.convertEvent||((P,y)=>y)}C.init=d,n(d,"init");function b(l,P){return P?`${l}.${P}`:l}C.versionedType=b,n(b,"versionedType");function s(l){if(i)throw new Error("Error defining sync event: sync system has been frozen");let P={type:l.type,version:l.version,aggregate:l.aggregate,schema:l.schema,properties:l.busSchema?l.busSchema:l.schema};return o.set(P.type,Math.max(P.version,o.get(P.type)||0)),C.registry.set(b(P.type,P.version),P),P}C.define=s,n(s,"define");function p(l,P){return[l,P]}C.project=p,n(p,"project");function w(l,P,y){if(e==null)throw new Error("No projectors available. Call `SyncEvent.init` to install projectors");let D=e.get(l);if(!D)throw new Error(`Projector not found for event: ${l.type}`);Ft.transaction(T=>{D(T,P.data),ze.OPENCODE_EXPERIMENTAL_WORKSPACES&&(T.insert(Dn).values({aggregate_id:P.aggregateID,seq:P.seq}).onConflictDoUpdate({target:Dn.aggregate_id,set:{seq:P.seq}}).run(),T.insert(Qr).values({id:P.id,seq:P.seq,aggregate_id:P.aggregateID,type:b(l.type,l.version),data:P.data}).run()),Ft.effect(()=>{if(c.emit("event",{def:l,event:P}),y?.publish){let R=m(l.type,P.data);R instanceof Promise?R.then(_=>{Me.publish({type:l.type,properties:l.schema},_)}):Me.publish({type:l.type,properties:l.schema},R)}})})}n(w,"process");function f(l,P){let y=C.registry.get(l.type);if(!y)throw new Error(`Unknown event type: ${l.type}`);let T=Ft.use(_=>_.select({seq:Dn.seq}).from(Dn).where((0,ke.eq)(Dn.aggregate_id,l.aggregateID)).get())?.seq??-1;if(l.seq<=T)return;let R=T+1;if(l.seq!==R)throw new Error(`Sequence mismatch for aggregate "${l.aggregateID}": expected ${R}, got ${l.seq}`);w(y,l,{publish:!!P?.republish})}C.replay=f,n(f,"replay");function v(l,P){let y=P[l.aggregate];if(y==null)throw new Error(`SyncEvent.run: "${l.aggregate}" required but not found: ${JSON.stringify(P)}`);if(l.version!==o.get(l.type))throw new Error(`SyncEvent.run: running old versions of events is not allowed: ${l.type}`);Ft.transaction(D=>{let T=Wa.ascending(),R=D.select({seq:Dn.seq}).from(Dn).where((0,ke.eq)(Dn.aggregate_id,y)).get(),_=R?.seq!=null?R.seq+1:0;w(l,{id:T,seq:_,aggregateID:y,data:P},{publish:!0})},{behavior:"immediate"})}C.run=v,n(v,"run");function I(l){Ft.transaction(P=>{P.delete(Dn).where((0,ke.eq)(Dn.aggregate_id,l)).run(),P.delete(Qr).where((0,ke.eq)(Qr.aggregate_id,l)).run()})}C.remove=I,n(I,"remove");function h(l){return c.on("event",l),()=>c.off("event",l)}C.subscribeAll=h,n(h,"subscribeAll");function S(){return es.union(C.registry.entries().map(([l,P])=>es.object({type:es.literal(l),aggregate:es.literal(P.aggregate),data:P.schema}).meta({ref:"SyncEvent."+P.type})).toArray()).meta({ref:"SyncEvent"})}C.payloads=S,n(S,"payloads")})(Nt||={});import tn from"path";import Ga from"zod";import{Effect as Tt,Exit as zu,Layer as Ha,Option as os,RcMap as Va,Schema as qt,ServiceMap as Fu,TxReentrantLock as Ir}from"effect";import{Effect as Wt,Layer as Ba,ServiceMap as Lu,Stream as ts}from"effect";import{ChildProcess as Nu,ChildProcessSpawner as Uu}from"effect/unstable/process";var Sn;(P=>{let t=["--no-optional-locks","-c","core.autocrlf=false","-c","core.fsmonitor=false","-c","core.longpaths=true","-c","core.symlinks=true","-c","core.quotepath=false"],e=n(y=>y.text().trim(),"out"),o=n(y=>y.split("\0").filter(Boolean),"nuls"),i=n(y=>({exitCode:1,text:n(()=>"","text"),stdout:Buffer.alloc(0),stderr:Buffer.from(y instanceof Error?y.message:String(y))}),"fail"),m=n(y=>y==="??"?"added":y.includes("U")?"modified":y.includes("A")&&!y.includes("D")?"added":y.includes("D")&&!y.includes("A")?"deleted":"modified","kind");class c extends Lu.Service()("@opencode/Git"){static{n(this,"Service")}}P.Service=c,P.layer=Ba.effect(c,Wt.gen(function*(){let y=yield*Uu.ChildProcessSpawner,D=Wt.fn("Git.run")(function*(H,G){let ee=Nu.make("git",[...t,...H],{cwd:G.cwd,env:G.env,extendEnv:!0,stdin:"ignore",stdout:"pipe",stderr:"pipe"}),se=yield*y.spawn(ee),[F,Z]=yield*Wt.all([ts.mkString(ts.decodeText(se.stdout)),ts.mkString(ts.decodeText(se.stderr))],{concurrency:2});return{exitCode:yield*se.exitCode,text:n(()=>F,"text"),stdout:Buffer.from(F),stderr:Buffer.from(Z)}},Wt.scoped,Wt.catch(H=>Wt.succeed(i(H)))),T=Wt.fn("Git.text")(function*(H,G){return(yield*D(H,G)).text()}),R=Wt.fn("Git.lines")(function*(H,G){return(yield*T(H,G)).split(/\r?\n/).map(ee=>ee.trim()).filter(Boolean)}),_=Wt.fnUntraced(function*(H){return yield*R(["for-each-ref","--format=%(refname:short)","refs/heads"],{cwd:H})}),E=Wt.fnUntraced(function*(H,G){let ee=yield*D(["config","init.defaultBranch"],{cwd:H}),se=e(ee);if(!(!se||!G.includes(se)))return{name:se,ref:se}}),x=Wt.fnUntraced(function*(H){let G=yield*R(["remote"],{cwd:H});return G.includes("origin")?"origin":G.length===1?G[0]:G.includes("upstream")?"upstream":G[0]}),k=Wt.fn("Git.branch")(function*(H){let G=yield*D(["symbolic-ref","--quiet","--short","HEAD"],{cwd:H});return G.exitCode!==0?void 0:e(G)||void 0}),M=Wt.fn("Git.prefix")(function*(H){let G=yield*D(["rev-parse","--show-prefix"],{cwd:H});return G.exitCode!==0?"":e(G)}),r=Wt.fn("Git.defaultBranch")(function*(H){let G=yield*x(H);if(G){let F=yield*D(["symbolic-ref",`refs/remotes/${G}/HEAD`],{cwd:H});if(F.exitCode===0){let Z=e(F).replace(/^refs\/remotes\//,""),he=Z.startsWith(`${G}/`)?Z.slice(`${G}/`.length):"";if(he)return{name:he,ref:Z}}}let ee=yield*_(H),se=yield*E(H,ee);if(se)return se;if(ee.includes("main"))return{name:"main",ref:"main"};if(ee.includes("master"))return{name:"master",ref:"master"}}),u=Wt.fn("Git.hasHead")(function*(H){return(yield*D(["rev-parse","--verify","HEAD"],{cwd:H})).exitCode===0}),g=Wt.fn("Git.mergeBase")(function*(H,G,ee="HEAD"){let se=yield*D(["merge-base",G,ee],{cwd:H});return se.exitCode!==0?void 0:e(se)||void 0}),L=Wt.fn("Git.show")(function*(H,G,ee,se=""){let F=se?`${se}${ee}`:ee,Z=yield*D(["show",`${G}:${F}`],{cwd:H});return Z.exitCode!==0||Z.stdout.includes(0)?"":Z.text()}),j=Wt.fn("Git.status")(function*(H){return o(yield*T(["status","--porcelain=v1","--untracked-files=all","--no-renames","-z","--","."],{cwd:H})).flatMap(G=>{let ee=G.slice(3);if(!ee)return[];let se=G.slice(0,2);return[{file:ee,code:se,status:m(se)}]})}),z=Wt.fn("Git.diff")(function*(H,G){let ee=o(yield*T(["diff","--no-ext-diff","--no-renames","--name-status","-z",G,"--","."],{cwd:H}));return ee.flatMap((se,F)=>{if(F%2!==0)return[];let Z=ee[F+1];return!se||!Z?[]:[{file:Z,code:se,status:m(se)}]})}),V=Wt.fn("Git.stats")(function*(H,G){return o(yield*T(["diff","--no-ext-diff","--no-renames","--numstat","-z",G,"--","."],{cwd:H})).flatMap(ee=>{let se=ee.indexOf(" "),F=ee.indexOf(" ",se+1);if(se===-1||F===-1)return[];let Z=ee.slice(F+1);if(!Z)return[];let he=ee.slice(0,se),ge=ee.slice(se+1,F),Y=he==="-"?0:Number.parseInt(he||"0",10),N=ge==="-"?0:Number.parseInt(ge||"0",10);return[{file:Z,additions:Number.isFinite(Y)?Y:0,deletions:Number.isFinite(N)?N:0}]})});return c.of({run:D,branch:k,prefix:M,defaultBranch:r,hasHead:u,mergeBase:g,show:L,status:j,diff:z,stats:V})})),P.defaultLayer=P.layer.pipe(Ba.provide(so));let{runPromise:b}=qe(c,P.defaultLayer);async function s(y,D){return b(T=>T.run(y,D))}P.run=s,n(s,"run");async function p(y){return b(D=>D.branch(y))}P.branch=p,n(p,"branch");async function w(y){return b(D=>D.prefix(y))}P.prefix=w,n(w,"prefix");async function f(y){return b(D=>D.defaultBranch(y))}P.defaultBranch=f,n(f,"defaultBranch");async function v(y){return b(D=>D.hasHead(y))}P.hasHead=v,n(v,"hasHead");async function I(y,D,T){return b(R=>R.mergeBase(y,D,T))}P.mergeBase=I,n(I,"mergeBase");async function h(y,D,T,R){return b(_=>_.show(y,D,T,R))}P.show=h,n(h,"show");async function S(y){return b(D=>D.status(y))}P.status=S,n(S,"status");async function C(y,D){return b(T=>T.diff(y,D))}P.diff=C,n(C,"diff");async function l(y,D){return b(T=>T.stats(y,D))}P.stats=l,n(l,"stats")})(Sn||={});var Vn;(_=>{let t=Ae.create({service:"storage"});_.NotFoundError=tt.create("NotFoundError",Ga.object({message:Ga.string()}));let o=qt.Struct({path:qt.optional(qt.Struct({root:qt.optional(qt.String)}))}),i=qt.Struct({id:qt.String}),m=qt.Struct({id:qt.String}),c=qt.Struct({additions:qt.Number,deletions:qt.Number}),a=qt.Struct({id:qt.String,projectID:qt.String,summary:qt.Struct({diffs:qt.Array(c)})}),d=qt.decodeUnknownOption(o),b=qt.decodeUnknownOption(i),s=qt.decodeUnknownOption(m),p=qt.decodeUnknownOption(a);class w extends Fu.Service()("@opencode/Storage"){static{n(this,"Service")}}_.Service=w;function f(E,x){return tn.join(E,...x)+".json"}n(f,"file");function v(E){return!E||typeof E!="object"?!1:"code"in E&&E.code==="ENOENT"?!0:"reason"in E&&E.reason&&typeof E.reason=="object"&&"_tag"in E.reason?E.reason._tag==="NotFound":!1}n(v,"missing");function I(E){let x=Number.parseInt(E,10);return Number.isNaN(x)?0:x}n(I,"parseMigration");let h=[Tt.fn("Storage.migration.1")(function*(E,x){let k=tn.resolve(E,"../project");if(!(yield*x.isDir(k)))return;let M=yield*x.glob("*",{cwd:k,include:"all"});for(let r of M){let u=tn.join(k,r);if(!(yield*x.isDir(u)))continue;t.info(`migrating project ${r}`);let g=r,L="/";if(g!=="global"){for(let V of yield*x.glob("storage/session/message/*/*.json",{cwd:u,absolute:!0})){let H=d(yield*x.readJson(V),{onExcessProperty:"preserve"}),G=os.isSome(H)?H.value.path?.root:void 0;if(G){L=G;break}}if(!L||!(yield*x.isDir(L)))continue;let j=yield*Tt.promise(()=>Sn.run(["rev-list","--max-parents=0","--all"],{cwd:L})),[z]=j.text().split(`
26
- `).filter(Boolean).map(V=>V.trim()).toSorted();if(!z)continue;g=z,yield*x.writeWithDirs(tn.join(E,"project",g+".json"),JSON.stringify({id:z,vcs:"git",worktree:L,time:{created:Date.now(),initialized:Date.now()}},null,2)),t.info(`migrating sessions for project ${g}`);for(let V of yield*x.glob("storage/session/info/*.json",{cwd:u,absolute:!0})){let H=tn.join(E,"session",g,tn.basename(V));t.info("copying",{sessionFile:V,dest:H});let G=yield*x.readJson(V),ee=b(G,{onExcessProperty:"preserve"});if(yield*x.writeWithDirs(H,JSON.stringify(G,null,2)),!os.isNone(ee)){t.info(`migrating messages for session ${ee.value.id}`);for(let se of yield*x.glob(`storage/session/message/${ee.value.id}/*.json`,{cwd:u,absolute:!0})){let F=tn.join(E,"message",ee.value.id,tn.basename(se));t.info("copying",{msgFile:se,dest:F});let Z=yield*x.readJson(se),he=s(Z,{onExcessProperty:"preserve"});if(yield*x.writeWithDirs(F,JSON.stringify(Z,null,2)),!os.isNone(he)){t.info(`migrating parts for message ${he.value.id}`);for(let ge of yield*x.glob(`storage/session/part/${ee.value.id}/${he.value.id}/*.json`,{cwd:u,absolute:!0})){let Y=tn.join(E,"part",he.value.id,tn.basename(ge)),N=yield*x.readJson(ge);t.info("copying",{partFile:ge,dest:Y}),yield*x.writeWithDirs(Y,JSON.stringify(N,null,2))}}}}}}}}),Tt.fn("Storage.migration.2")(function*(E,x){for(let k of yield*x.glob("session/*/*.json",{cwd:E,absolute:!0})){let M=yield*x.readJson(k),r=p(M,{onExcessProperty:"preserve"});if(os.isNone(r))continue;let u=r.value.summary.diffs;yield*x.writeWithDirs(tn.join(E,"session_diff",r.value.id+".json"),JSON.stringify(u,null,2)),yield*x.writeWithDirs(tn.join(E,"session",r.value.projectID,r.value.id+".json"),JSON.stringify({...M,summary:{additions:u.reduce((g,L)=>g+L.additions,0),deletions:u.reduce((g,L)=>g+L.deletions,0)}},null,2))}})];_.layer=Ha.effect(w,Tt.gen(function*(){let E=yield*st.Service,x=yield*Va.make({lookup:n(()=>Ir.make(),"lookup"),idleTimeToLive:0}),k=yield*Tt.cached(Tt.gen(function*(){let G=tn.join(wt.Path.data,"storage"),ee=tn.join(G,"migration"),se=yield*E.readFileString(ee).pipe(Tt.map(I),Tt.catchIf(v,()=>Tt.succeed(0)),Tt.orElseSucceed(()=>0));for(let F=se;F<h.length;F++){t.info("running migration",{index:F});let Z=h[F],he=yield*Tt.exit(Z(G,E));if(zu.isFailure(he)){t.error("failed to run migration",{index:F,cause:he.cause});break}yield*E.writeWithDirs(ee,String(F+1))}return{dir:G}})),M=n(G=>Tt.fail(new _.NotFoundError({message:`Resource not found: ${G}`})),"fail"),r=n((G,ee)=>ee.pipe(Tt.catchIf(v,()=>M(G))),"wrap"),u=Tt.fnUntraced(function*(G,ee){yield*E.writeWithDirs(G,JSON.stringify(ee,null,2))}),g=n((G,ee)=>Tt.scoped(Tt.gen(function*(){let se=f((yield*k).dir,G);return yield*ee(se,yield*Va.get(x,se))})),"withResolved"),L=Tt.fn("Storage.remove")(function*(G){yield*g(G,(ee,se)=>Ir.withWriteLock(se,E.remove(ee).pipe(Tt.catchIf(v,()=>Tt.void))))}),j=n(G=>Tt.gen(function*(){return yield*g(G,(se,F)=>Ir.withReadLock(F,r(se,E.readJson(se))))}),"read"),z=n((G,ee)=>Tt.gen(function*(){return yield*g(G,(F,Z)=>Ir.withWriteLock(Z,Tt.gen(function*(){let he=yield*r(F,E.readJson(F));return ee(he),yield*u(F,he),he})))}),"update"),V=n((G,ee)=>Tt.gen(function*(){yield*g(G,(se,F)=>Ir.withWriteLock(F,u(se,ee)))}),"write"),H=Tt.fn("Storage.list")(function*(G){let ee=(yield*k).dir,se=tn.join(ee,...G);return(yield*E.glob("**/*",{cwd:se,include:"file"}).pipe(Tt.catch(()=>Tt.succeed([])))).map(Z=>[...G,...Z.slice(0,-5).split(tn.sep)]).toSorted((Z,he)=>Z.join("/").localeCompare(he.join("/")))});return w.of({remove:L,read:j,update:z,write:V,list:H})})),_.defaultLayer=_.layer.pipe(Ha.provide(st.defaultLayer));let{runPromise:l}=qe(w,_.defaultLayer);async function P(E){return l(x=>x.remove(E))}_.remove=P,n(P,"remove");async function y(E){return l(x=>x.read(E))}_.read=y,n(y,"read");async function D(E,x){return l(k=>k.update(E,x))}_.update=D,n(D,"update");async function T(E,x){return l(k=>k.write(E,x))}_.write=T,n(T,"write");async function R(E){return l(x=>x.list(E))}_.list=R,n(R,"list")})(Vn||={});import qu from"zod";function rs(t){let e={};for(let[o,i]of Object.entries(t.required().shape))e[o]=i.nullable();return qu.object(e)}n(rs,"updateSchema");import U from"zod";import{APICallError as tp,convertToModelMessages as np,LoadAPIKeyError as op}from"ai";import kr from"path";import{pathToFileURL as _o,fileURLToPath as $u}from"url";import{createMessageConnection as Wu,StreamMessageReader as Bu,StreamMessageWriter as Gu}from"vscode-jsonrpc/node.js";var Ya={".abap":"abap",".bat":"bat",".bib":"bibtex",".bibtex":"bibtex",".clj":"clojure",".cljs":"clojure",".cljc":"clojure",".edn":"clojure",".coffee":"coffeescript",".c":"c",".cpp":"cpp",".cxx":"cpp",".cc":"cpp",".c++":"cpp",".cs":"csharp",".css":"css",".d":"d",".pas":"pascal",".pascal":"pascal",".diff":"diff",".patch":"diff",".dart":"dart",".dockerfile":"dockerfile",".ex":"elixir",".exs":"elixir",".erl":"erlang",".ets":"typescript",".hrl":"erlang",".fs":"fsharp",".fsi":"fsharp",".fsx":"fsharp",".fsscript":"fsharp",".gitcommit":"git-commit",".gitrebase":"git-rebase",".go":"go",".groovy":"groovy",".gleam":"gleam",".hbs":"handlebars",".handlebars":"handlebars",".hs":"haskell",".lhs":"haskell",".html":"html",".htm":"html",".ini":"ini",".java":"java",".jl":"julia",".js":"javascript",".kt":"kotlin",".kts":"kotlin",".jsx":"javascriptreact",".json":"json",".tex":"latex",".latex":"latex",".less":"less",".lua":"lua",".makefile":"makefile",makefile:"makefile",".md":"markdown",".markdown":"markdown",".m":"objective-c",".mm":"objective-cpp",".pl":"perl",".pm":"perl",".pm6":"perl6",".php":"php",".ps1":"powershell",".psm1":"powershell",".pug":"jade",".jade":"jade",".py":"python",".r":"r",".cshtml":"razor",".razor":"razor",".rb":"ruby",".rake":"ruby",".gemspec":"ruby",".ru":"ruby",".erb":"erb",".html.erb":"erb",".js.erb":"erb",".css.erb":"erb",".json.erb":"erb",".rs":"rust",".scss":"scss",".sass":"sass",".scala":"scala",".shader":"shaderlab",".sh":"shellscript",".bash":"shellscript",".zsh":"shellscript",".ksh":"shellscript",".sql":"sql",".svelte":"svelte",".swift":"swift",".ts":"typescript",".tsx":"typescriptreact",".mts":"typescript",".cts":"typescript",".mtsx":"typescriptreact",".ctsx":"typescriptreact",".xml":"xml",".xsl":"xsl",".yaml":"yaml",".yml":"yaml",".mjs":"javascript",".cjs":"javascript",".vue":"vue",".zig":"zig",".zon":"zig",".astro":"astro",".ml":"ocaml",".mli":"ocaml",".tf":"terraform",".tfvars":"terraform-vars",".hcl":"hcl",".nix":"nix",".typ":"typst",".typc":"typst"};import Er from"zod";var Hu=150,Hs;(m=>{let t=Ae.create({service:"lsp.client"});m.InitializeError=tt.create("LSPInitializeError",Er.object({serverID:Er.string()})),m.Event={Diagnostics:ht.define("lsp.client.diagnostics",Er.object({serverID:Er.string(),path:Er.string()}))};async function i(c){let a=t.clone().tag("serverID",c.serverID);a.info("starting client");let d=Wu(new Bu(c.server.process.stdout),new Gu(c.server.process.stdin)),b=new Map;d.onNotification("textDocument/publishDiagnostics",w=>{let f=Te.normalizePath($u(w.uri));a.info("textDocument/publishDiagnostics",{path:f,count:w.diagnostics.length});let v=b.has(f);b.set(f,w.diagnostics),!(!v&&c.serverID==="typescript")&&Me.publish(m.Event.Diagnostics,{path:f,serverID:c.serverID})}),d.onRequest("window/workDoneProgress/create",w=>(a.info("window/workDoneProgress/create",w),null)),d.onRequest("workspace/configuration",async()=>[c.server.initialization??{}]),d.onRequest("client/registerCapability",async()=>{}),d.onRequest("client/unregisterCapability",async()=>{}),d.onRequest("workspace/workspaceFolders",async()=>[{name:"workspace",uri:_o(c.root).href}]),d.listen(),a.info("sending initialize"),await $s(d.sendRequest("initialize",{rootUri:_o(c.root).href,processId:c.server.process.pid,workspaceFolders:[{name:"workspace",uri:_o(c.root).href}],initializationOptions:{...c.server.initialization},capabilities:{window:{workDoneProgress:!0},workspace:{configuration:!0,didChangeWatchedFiles:{dynamicRegistration:!0}},textDocument:{synchronization:{didOpen:!0,didChange:!0},publishDiagnostics:{versionSupport:!0}}}}),45e3).catch(w=>{throw a.error("initialize error",{error:w}),new m.InitializeError({serverID:c.serverID},{cause:w})}),await d.sendNotification("initialized",{}),c.server.initialization&&await d.sendNotification("workspace/didChangeConfiguration",{settings:c.server.initialization});let s={},p={root:c.root,get serverID(){return c.serverID},get connection(){return d},notify:{async open(w){w.path=kr.isAbsolute(w.path)?w.path:kr.resolve(ne.directory,w.path);let f=await Te.readText(w.path),v=kr.extname(w.path),I=Ya[v]??"plaintext",h=s[w.path];if(h!==void 0){t.info("workspace/didChangeWatchedFiles",w),await d.sendNotification("workspace/didChangeWatchedFiles",{changes:[{uri:_o(w.path).href,type:2}]});let S=h+1;s[w.path]=S,t.info("textDocument/didChange",{path:w.path,version:S}),await d.sendNotification("textDocument/didChange",{textDocument:{uri:_o(w.path).href,version:S},contentChanges:[{text:f}]});return}t.info("workspace/didChangeWatchedFiles",w),await d.sendNotification("workspace/didChangeWatchedFiles",{changes:[{uri:_o(w.path).href,type:1}]}),t.info("textDocument/didOpen",w),b.delete(w.path),await d.sendNotification("textDocument/didOpen",{textDocument:{uri:_o(w.path).href,languageId:I,version:0,text:f}}),s[w.path]=0}},get diagnostics(){return b},async waitForDiagnostics(w){let f=Te.normalizePath(kr.isAbsolute(w.path)?w.path:kr.resolve(ne.directory,w.path));t.info("waiting for diagnostics",{path:f});let v,I;return await $s(new Promise(h=>{v=Me.subscribe(m.Event.Diagnostics,S=>{S.properties.path===f&&S.properties.serverID===p.serverID&&(I&&clearTimeout(I),I=setTimeout(()=>{t.info("got diagnostics",{path:f}),v?.(),h()},Hu))})}),3e3).catch(()=>{}).finally(()=>{I&&clearTimeout(I),v?.()})},async shutdown(){a.info("shutting down"),d.end(),d.dispose(),await Xt.stop(c.server.process),a.info("shutdown")}};return a.info("initialized"),p}m.create=i,n(i,"create")})(Hs||={});import Vs from"path";import{pathToFileURL as Jo,fileURLToPath as Vu}from"url";import At from"zod";import{Effect as Dt,Layer as Ja,ServiceMap as Yu}from"effect";var ct;(M=>{let t=Ae.create({service:"lsp"});M.Event={Updated:ht.define("lsp.updated",At.object({}))},M.Range=At.object({start:At.object({line:At.number(),character:At.number()}),end:At.object({line:At.number(),character:At.number()})}).meta({ref:"Range"}),M.Symbol=At.object({name:At.string(),kind:At.number(),location:At.object({uri:At.string(),range:M.Range})}).meta({ref:"Symbol"}),M.DocumentSymbol=At.object({name:At.string(),detail:At.string().optional(),kind:At.number(),range:M.Range,selectionRange:M.Range}).meta({ref:"DocumentSymbol"}),M.Status=At.object({id:At.string(),name:At.string(),root:At.string(),status:At.union([At.literal("connected"),At.literal("error")])}).meta({ref:"LSPStatus"});let a;(fe=>(fe[fe.File=1]="File",fe[fe.Module=2]="Module",fe[fe.Namespace=3]="Namespace",fe[fe.Package=4]="Package",fe[fe.Class=5]="Class",fe[fe.Method=6]="Method",fe[fe.Property=7]="Property",fe[fe.Field=8]="Field",fe[fe.Constructor=9]="Constructor",fe[fe.Enum=10]="Enum",fe[fe.Interface=11]="Interface",fe[fe.Function=12]="Function",fe[fe.Variable=13]="Variable",fe[fe.Constant=14]="Constant",fe[fe.String=15]="String",fe[fe.Number=16]="Number",fe[fe.Boolean=17]="Boolean",fe[fe.Array=18]="Array",fe[fe.Object=19]="Object",fe[fe.Key=20]="Key",fe[fe.Null=21]="Null",fe[fe.EnumMember=22]="EnumMember",fe[fe.Struct=23]="Struct",fe[fe.Event=24]="Event",fe[fe.Operator=25]="Operator",fe[fe.TypeParameter=26]="TypeParameter"))(a||={});let d=[5,12,6,11,13,14,23,10],b=n(r=>{ze.OPENCODE_EXPERIMENTAL_LSP_TY?r.pyright&&(t.info("LSP server pyright is disabled because OPENCODE_EXPERIMENTAL_LSP_TY is enabled"),delete r.pyright):r.ty&&delete r.ty},"filterExperimentalServers");class s extends Yu.Service()("@opencode/LSP"){static{n(this,"Service")}}M.Service=s,M.layer=Ja.effect(s,Dt.gen(function*(){let r=yield*Be.Service,u=yield*ae.make(Dt.fn("LSP.state")(function*(){let Q=yield*r.get(),ie={};if(Q.lsp===!1)t.info("all LSPs are disabled");else{for(let le of Object.values(Da))ie[le.id]=le;b(ie);for(let[le,we]of Object.entries(Q.lsp??{})){let be=ie[le];if(we.disabled){t.info(`LSP server ${le} is disabled`),delete ie[le];continue}ie[le]={...be,id:le,root:be?.root??(async()=>ne.directory),extensions:we.extensions??be?.extensions??[],spawn:n(async fe=>({process:Ea(we.command[0],we.command.slice(1),{cwd:fe,env:{...process.env,...we.env}}),initialization:we.initialization}),"spawn")}}t.info("enabled LSP servers",{serverIds:Object.values(ie).map(le=>le.id).join(", ")})}let me={clients:[],servers:ie,broken:new Set,spawning:new Map};return yield*Dt.addFinalizer(()=>Dt.promise(async()=>{await Promise.all(me.clients.map(le=>le.shutdown()))})),me})),g=Dt.fnUntraced(function*(Q){if(!ne.containsPath(Q))return[];let ie=yield*ae.get(u);return yield*Dt.promise(async()=>{let me=Vs.parse(Q).ext||Q,le=[];async function we(be,fe,J){let X=await be.spawn(fe).then(ue=>(ue||ie.broken.add(J),ue)).catch(ue=>{ie.broken.add(J),t.error(`Failed to spawn LSP server ${be.id}`,{error:ue})});if(!X)return;t.info("spawned lsp server",{serverID:be.id});let xe=await Hs.create({serverID:be.id,server:X,root:fe}).catch(async ue=>{ie.broken.add(J),await Xt.stop(X.process),t.error(`Failed to initialize LSP client ${be.id}`,{error:ue})});if(!xe)return;let de=ie.clients.find(ue=>ue.root===fe&&ue.serverID===be.id);return de?(await Xt.stop(X.process),de):(ie.clients.push(xe),xe)}n(we,"schedule");for(let be of Object.values(ie.servers)){if(be.extensions.length&&!be.extensions.includes(me))continue;let fe=await be.root(Q);if(!fe||ie.broken.has(fe+be.id))continue;let J=ie.clients.find(ue=>ue.root===fe&&ue.serverID===be.id);if(J){le.push(J);continue}let X=ie.spawning.get(fe+be.id);if(X){let ue=await X;if(!ue)continue;le.push(ue);continue}let xe=we(be,fe,fe+be.id);ie.spawning.set(fe+be.id,xe),xe.finally(()=>{ie.spawning.get(fe+be.id)===xe&&ie.spawning.delete(fe+be.id)});let de=await xe;de&&(le.push(de),Me.publish(M.Event.Updated,{}))}return le})}),L=Dt.fnUntraced(function*(Q,ie){let me=yield*g(Q);return yield*Dt.promise(()=>Promise.all(me.map(le=>ie(le))))}),j=Dt.fnUntraced(function*(Q){let ie=yield*ae.get(u);return yield*Dt.promise(()=>Promise.all(ie.clients.map(me=>Q(me))))}),z=Dt.fn("LSP.init")(function*(){yield*ae.get(u)}),V=Dt.fn("LSP.status")(function*(){let Q=yield*ae.get(u),ie=[];for(let me of Q.clients)ie.push({id:me.serverID,name:Q.servers[me.serverID].id,root:Vs.relative(ne.directory,me.root),status:"connected"});return ie}),H=Dt.fn("LSP.hasClients")(function*(Q){let ie=yield*ae.get(u);return yield*Dt.promise(async()=>{let me=Vs.parse(Q).ext||Q;for(let le of Object.values(ie.servers)){if(le.extensions.length&&!le.extensions.includes(me))continue;let we=await le.root(Q);if(we&&!ie.broken.has(we+le.id))return!0}return!1})}),G=Dt.fn("LSP.touchFile")(function*(Q,ie){t.info("touching file",{file:Q});let me=yield*g(Q);yield*Dt.promise(()=>Promise.all(me.map(async le=>{let we=ie?le.waitForDiagnostics({path:Q}):Promise.resolve();return await le.notify.open({path:Q}),we})).catch(le=>{t.error("failed to touch file",{err:le,file:Q})}))}),ee=Dt.fn("LSP.diagnostics")(function*(){let Q={},ie=yield*j(async me=>me.diagnostics);for(let me of ie)for(let[le,we]of me.entries()){let be=Q[le]||[];be.push(...we),Q[le]=be}return Q}),se=Dt.fn("LSP.hover")(function*(Q){return yield*L(Q.file,ie=>ie.connection.sendRequest("textDocument/hover",{textDocument:{uri:Jo(Q.file).href},position:{line:Q.line,character:Q.character}}).catch(()=>null))}),F=Dt.fn("LSP.definition")(function*(Q){return(yield*L(Q.file,me=>me.connection.sendRequest("textDocument/definition",{textDocument:{uri:Jo(Q.file).href},position:{line:Q.line,character:Q.character}}).catch(()=>null))).flat().filter(Boolean)}),Z=Dt.fn("LSP.references")(function*(Q){return(yield*L(Q.file,me=>me.connection.sendRequest("textDocument/references",{textDocument:{uri:Jo(Q.file).href},position:{line:Q.line,character:Q.character},context:{includeDeclaration:!0}}).catch(()=>[]))).flat().filter(Boolean)}),he=Dt.fn("LSP.implementation")(function*(Q){return(yield*L(Q.file,me=>me.connection.sendRequest("textDocument/implementation",{textDocument:{uri:Jo(Q.file).href},position:{line:Q.line,character:Q.character}}).catch(()=>null))).flat().filter(Boolean)}),ge=Dt.fn("LSP.documentSymbol")(function*(Q){let ie=Vu(Q);return(yield*L(ie,le=>le.connection.sendRequest("textDocument/documentSymbol",{textDocument:{uri:Q}}).catch(()=>[]))).flat().filter(Boolean)}),Y=Dt.fn("LSP.workspaceSymbol")(function*(Q){return(yield*j(me=>me.connection.sendRequest("workspace/symbol",{query:Q}).then(le=>le.filter(we=>d.includes(we.kind))).then(le=>le.slice(0,10)).catch(()=>[]))).flat()}),N=Dt.fn("LSP.prepareCallHierarchy")(function*(Q){return(yield*L(Q.file,me=>me.connection.sendRequest("textDocument/prepareCallHierarchy",{textDocument:{uri:Jo(Q.file).href},position:{line:Q.line,character:Q.character}}).catch(()=>[]))).flat().filter(Boolean)}),q=Dt.fnUntraced(function*(Q,ie){return(yield*L(Q.file,async le=>{let we=await le.connection.sendRequest("textDocument/prepareCallHierarchy",{textDocument:{uri:Jo(Q.file).href},position:{line:Q.line,character:Q.character}}).catch(()=>[]);return we?.length?le.connection.sendRequest(ie,{item:we[0]}).catch(()=>[]):[]})).flat().filter(Boolean)}),te=Dt.fn("LSP.incomingCalls")(function*(Q){return yield*q(Q,"callHierarchy/incomingCalls")}),ce=Dt.fn("LSP.outgoingCalls")(function*(Q){return yield*q(Q,"callHierarchy/outgoingCalls")});return s.of({init:z,status:V,hasClients:H,touchFile:G,diagnostics:ee,hover:se,definition:F,references:Z,implementation:he,documentSymbol:ge,workspaceSymbol:Y,prepareCallHierarchy:N,incomingCalls:te,outgoingCalls:ce})})),M.defaultLayer=M.layer.pipe(Ja.provide(Be.defaultLayer));let{runPromise:f}=qe(s,M.defaultLayer);M.init=n(async()=>f(r=>r.init()),"init"),M.status=n(async()=>f(r=>r.status()),"status"),M.hasClients=n(async r=>f(u=>u.hasClients(r)),"hasClients"),M.touchFile=n(async(r,u)=>f(g=>g.touchFile(r,u)),"touchFile"),M.diagnostics=n(async()=>f(r=>r.diagnostics()),"diagnostics"),M.hover=n(async r=>f(u=>u.hover(r)),"hover"),M.definition=n(async r=>f(u=>u.definition(r)),"definition"),M.references=n(async r=>f(u=>u.references(r)),"references"),M.implementation=n(async r=>f(u=>u.implementation(r)),"implementation"),M.documentSymbol=n(async r=>f(u=>u.documentSymbol(r)),"documentSymbol"),M.workspaceSymbol=n(async r=>f(u=>u.workspaceSymbol(r)),"workspaceSymbol"),M.prepareCallHierarchy=n(async r=>f(u=>u.prepareCallHierarchy(r)),"prepareCallHierarchy"),M.incomingCalls=n(async r=>f(u=>u.incomingCalls(r)),"incomingCalls"),M.outgoingCalls=n(async r=>f(u=>u.outgoingCalls(r)),"outgoingCalls");let k;(u=>{function r(g){let j={1:"ERROR",2:"WARN",3:"INFO",4:"HINT"}[g.severity||1],z=g.range.start.line+1,V=g.range.start.character+1;return`${j} [${z}:${V}] ${g.message}`}u.pretty=r,n(r,"pretty")})(k=M.Diagnostic||={})})(ct||={});import{Cause as Ju,Duration as Ka,Effect as Pe,Layer as ss,Schedule as Ku,Semaphore as Xu,ServiceMap as Zu,Stream as lo}from"effect";import{ChildProcess as Xa,ChildProcessSpawner as Za}from"effect/unstable/process";import Ko from"path";import zn from"zod";var cn;(P=>{P.Patch=zn.object({hash:zn.string(),files:zn.string().array()}),P.FileDiff=zn.object({file:zn.string(),before:zn.string(),after:zn.string(),additions:zn.number(),deletions:zn.number(),status:zn.enum(["added","deleted","modified"]).optional()}).meta({ref:"FileDiff"});let o=Ae.create({service:"snapshot"}),i="7.days",m=2*1024*1024,c=["-c","core.longpaths=true","-c","core.symlinks=true"],a=["-c","core.autocrlf=false",...c],d=[...a,"-c","core.quotepath=false"];class b extends Zu.Service()("@opencode/Snapshot"){static{n(this,"Service")}}P.Service=b,P.layer=ss.effect(b,Pe.gen(function*(){let y=yield*st.Service,D=yield*Za.ChildProcessSpawner,T=yield*Be.Service,R=new Map,_=n(x=>{let k=R.get(x);if(k)return k;let M=Xu.makeUnsafe(1);return R.set(x,M),M},"lock"),E=yield*ae.make(Pe.fn("Snapshot.state")(function*(x){let k={directory:x.directory,worktree:x.worktree,gitdir:Ko.join(wt.Path.data,"snapshot",x.project.id,Kr.fast(x.worktree)),vcs:x.project.vcs},M=n(q=>["--git-dir",k.gitdir,"--work-tree",k.worktree,...q],"args"),r=Pe.fnUntraced(function*(q,te){let ce=Xa.make("git",q,{cwd:te?.cwd,env:te?.env,extendEnv:!0}),Q=yield*D.spawn(ce),[ie,me]=yield*Pe.all([lo.mkString(lo.decodeText(Q.stdout)),lo.mkString(lo.decodeText(Q.stderr))],{concurrency:2});return{code:yield*Q.exitCode,text:ie,stderr:me}},Pe.scoped,Pe.catch(q=>Pe.succeed({code:Za.ExitCode(1),text:"",stderr:String(q)}))),u=n(q=>y.exists(q).pipe(Pe.orDie),"exists"),g=n(q=>y.readFileString(q).pipe(Pe.catch(()=>Pe.succeed(""))),"read"),L=n(q=>y.remove(q).pipe(Pe.catch(()=>Pe.void)),"remove"),j=n(q=>_(k.gitdir).withPermits(1)(q),"locked"),z=Pe.fnUntraced(function*(){return k.vcs!=="git"?!1:(yield*T.get()).snapshot!==!1}),V=Pe.fnUntraced(function*(){let te=(yield*r(["rev-parse","--path-format=absolute","--git-path","info/exclude"],{cwd:k.worktree})).text.trim();if(te&&(yield*u(te)))return te}),H=Pe.fnUntraced(function*(q=[]){let te=yield*V(),ce=Ko.join(k.gitdir,"info","exclude"),Q=[te?(yield*g(te)).trimEnd():"",...q.map(ie=>`/${ie.replaceAll("\\","/")}`)].filter(Boolean).join(`
24
+ ${u}`,truncated:!0,outputPath:g}});return yield*I().pipe(an.catchCause(S=>(t.error("truncation cleanup failed",{cause:Tu.pretty(S)}),an.void)),an.repeat(Pu.spaced(Zr.hours(1))),an.delay(Zr.minutes(1)),an.forkScoped),d.of({cleanup:I,output:h})})),f.defaultLayer=f.layer.pipe(Ws.provide(st.defaultLayer),Ws.provide(Su.layer));let{runPromise:p}=qe(d,f.defaultLayer);async function w(v,I={},h){return p(S=>S.output(v,I,h))}f.output=w,n(w,"output")})(ln||={});var it;(c=>{function t(a){if(a===null)return!0;if(a===void 0||typeof a!="object")return!1;if(Array.isArray(a)){for(let d of a)if(t(d))return!0;return!1}for(let d of Object.values(a))if(t(d))return!0;return!1}n(t,"hasNullsDeep");function e(a){if(!t(a))return a;if(a===null)return;if(Array.isArray(a))return a.map(e).filter(b=>b!==void 0);let d={};for(let[b,s]of Object.entries(a)){let p=e(s);p!==void 0&&(d[b]=p)}return d}n(e,"stripNullish");function o(a,d){return async b=>{let s=d instanceof Function?await d(b):{...d},p=s.execute;return s.execute=async(w,f)=>{w=e(w);try{s.parameters.parse(w)}catch(h){throw h instanceof _u.ZodError&&s.formatValidationError?new Error(s.formatValidationError(h),{cause:h}):new Error(`The ${a} tool was called with invalid arguments: ${h}.
25
+ Please rewrite the input so it satisfies the expected schema.`,{cause:h})}let v=await p(w,f);if(v.metadata.truncated!==void 0)return v;let I=await ln.output(v.output,{},b?.agent);return{...v,output:I.content,metadata:{...v.metadata,truncated:I.truncated,...I.truncated&&{outputPath:I.outputPath}}}},s}}n(o,"wrap");function i(a,d){return{id:a,init:o(a,d)}}c.define=i,n(i,"define");function m(a,d){return Ru.map(d,b=>({id:a,init:o(a,b)}))}c.defineEffect=m,n(m,"defineEffect")})(it||={});import{Deferred as vr,Effect as Un,Layer as za,Schema as Au,ServiceMap as Mu}from"effect";import $t from"zod";import{Schema as Cu}from"effect";var Oo=class extends Yr()("QuestionID",Cu.String){static{n(this,"QuestionID")}static make(e){return this.makeUnsafe(e)}static ascending(e){return this.makeUnsafe(vt.ascending("question",e))}static zod=vt.schema("question")};var Ln;(S=>{let t=Ae.create({service:"question"});S.Option=$t.object({label:$t.string().describe("Display text (1-5 words, concise)"),description:$t.string().describe("Explanation of choice")}).meta({ref:"QuestionOption"}),S.Info=$t.object({question:$t.string().describe("Complete question"),header:$t.string().describe("Very short label (max 30 chars)"),options:$t.array(S.Option).describe("Available choices"),multiple:$t.boolean().optional().describe("Allow selecting multiple choices"),custom:$t.boolean().optional().describe("Allow typing a custom answer (default: true)")}).meta({ref:"QuestionInfo"}),S.Request=$t.object({id:Oo.zod,sessionID:Ee.zod,questions:$t.array(S.Info).describe("Questions to ask"),tool:$t.object({messageID:Ve.zod,callID:$t.string()}).optional()}).meta({ref:"QuestionRequest"}),S.Answer=$t.array($t.string()).meta({ref:"QuestionAnswer"}),S.Reply=$t.object({answers:$t.array(S.Answer).describe("User answers in order of questions (each answer is an array of selected labels)")}),S.Event={Asked:ht.define("question.asked",S.Request),Replied:ht.define("question.replied",$t.object({sessionID:Ee.zod,requestID:Oo.zod,answers:$t.array(S.Answer)})),Rejected:ht.define("question.rejected",$t.object({sessionID:Ee.zod,requestID:Oo.zod}))};class d extends Au.TaggedErrorClass()("QuestionRejectedError",{}){static{n(this,"RejectedError")}get message(){return"The user dismissed this question"}}S.RejectedError=d;class b extends Mu.Service()("@opencode/Question"){static{n(this,"Service")}}S.Service=b,S.layer=za.effect(b,Un.gen(function*(){let C=yield*Me.Service,l=yield*ae.make(Un.fn("Question.state")(function*(){let R={pending:new Map};return yield*Un.addFinalizer(()=>Un.gen(function*(){for(let _ of R.pending.values())yield*vr.fail(_.deferred,new d);R.pending.clear()})),R})),P=Un.fn("Question.ask")(function*(R){let _=(yield*ae.get(l)).pending,E=Oo.ascending();t.info("asking",{id:E,questions:R.questions.length});let x=yield*vr.make(),k={id:E,sessionID:R.sessionID,questions:R.questions,tool:R.tool};return _.set(E,{info:k,deferred:x}),yield*C.publish(S.Event.Asked,k),yield*Un.ensuring(vr.await(x),Un.sync(()=>{_.delete(E)}))}),y=Un.fn("Question.reply")(function*(R){let _=(yield*ae.get(l)).pending,E=_.get(R.requestID);if(!E){t.warn("reply for unknown request",{requestID:R.requestID});return}_.delete(R.requestID),t.info("replied",{requestID:R.requestID,answers:R.answers}),yield*C.publish(S.Event.Replied,{sessionID:E.info.sessionID,requestID:E.info.id,answers:R.answers}),yield*vr.succeed(E.deferred,R.answers)}),D=Un.fn("Question.reject")(function*(R){let _=(yield*ae.get(l)).pending,E=_.get(R);if(!E){t.warn("reject for unknown request",{requestID:R});return}_.delete(R),t.info("rejected",{requestID:R}),yield*C.publish(S.Event.Rejected,{sessionID:E.info.sessionID,requestID:E.info.id}),yield*vr.fail(E.deferred,new d)}),T=Un.fn("Question.list")(function*(){let R=(yield*ae.get(l)).pending;return Array.from(R.values(),_=>_.info)});return b.of({ask:P,reply:y,reject:D,list:T})})),S.defaultLayer=S.layer.pipe(za.provide(Me.layer));let{runPromise:w}=qe(b,S.defaultLayer);async function f(C){return w(l=>l.ask(C))}S.ask=f,n(f,"ask");async function v(C){return w(l=>l.reply(C))}S.reply=v,n(v,"reply");async function I(C){return w(l=>l.reject(C))}S.reject=I,n(I,"reject");async function h(){return w(C=>C.list())}S.list=h,n(h,"list")})(Ln||={});var Gs;(i=>{let t=["brave","calm","clever","cosmic","crisp","curious","eager","gentle","glowing","happy","hidden","jolly","kind","lucky","mighty","misty","neon","nimble","playful","proud","quick","quiet","shiny","silent","stellar","sunny","swift","tidy","witty"],e=["cabin","cactus","canyon","circuit","comet","eagle","engine","falcon","forest","garden","harbor","island","knight","lagoon","meadow","moon","mountain","nebula","orchid","otter","panda","pixel","planet","river","rocket","sailor","squid","star","tiger","wizard","wolf"];function o(){return[t[Math.floor(Math.random()*t.length)],e[Math.floor(Math.random()*e.length)]].join("-")}i.create=o,n(o,"create")})(Gs||={});import Ji from"path";import{Decimal as cr}from"decimal.js";import Fe from"zod";import es from"zod";import{EventEmitter as Lu}from"events";import{sqliteTable as Fa,text as xr,integer as qa}from"drizzle-orm/sqlite-core";var Dn=Fa("event_sequence",{aggregate_id:xr().notNull().primaryKey(),seq:qa().notNull()}),Qr=Fa("event",{id:xr().primaryKey(),aggregate_id:xr().notNull().references(()=>Dn.aggregate_id,{onDelete:"cascade"}),seq:qa().notNull(),type:xr().notNull(),data:xr({mode:"json"}).$type().notNull()});import{Schema as $a}from"effect";import ju from"zod";var Wa=$a.String.pipe($a.brand("EventID"),Hn(t=>({make:n(e=>t.makeUnsafe(e),"make"),ascending:n(e=>t.makeUnsafe(vt.ascending("event",e)),"ascending"),zod:vt.schema("event").pipe(ju.custom())})));var Nt;(C=>{C.registry=new Map;let e,o=new Map,i=!1,m,c=new Lu;function a(){i=!1,e=void 0,m=n((l,P)=>P,"convertEvent")}C.reset=a,n(a,"reset");function d(l){e=new Map(l.projectors);for(let[P,y]of o.entries()){let D=C.registry.get(b(P,y));ht.define(D.type,D.properties||D.schema)}i=!0,m=l.convertEvent||((P,y)=>y)}C.init=d,n(d,"init");function b(l,P){return P?`${l}.${P}`:l}C.versionedType=b,n(b,"versionedType");function s(l){if(i)throw new Error("Error defining sync event: sync system has been frozen");let P={type:l.type,version:l.version,aggregate:l.aggregate,schema:l.schema,properties:l.busSchema?l.busSchema:l.schema};return o.set(P.type,Math.max(P.version,o.get(P.type)||0)),C.registry.set(b(P.type,P.version),P),P}C.define=s,n(s,"define");function p(l,P){return[l,P]}C.project=p,n(p,"project");function w(l,P,y){if(e==null)throw new Error("No projectors available. Call `SyncEvent.init` to install projectors");let D=e.get(l);if(!D)throw new Error(`Projector not found for event: ${l.type}`);Ft.transaction(T=>{D(T,P.data),ze.OPENCODE_EXPERIMENTAL_WORKSPACES&&(T.insert(Dn).values({aggregate_id:P.aggregateID,seq:P.seq}).onConflictDoUpdate({target:Dn.aggregate_id,set:{seq:P.seq}}).run(),T.insert(Qr).values({id:P.id,seq:P.seq,aggregate_id:P.aggregateID,type:b(l.type,l.version),data:P.data}).run()),Ft.effect(()=>{if(c.emit("event",{def:l,event:P}),y?.publish){let R=m(l.type,P.data);R instanceof Promise?R.then(_=>{Me.publish({type:l.type,properties:l.schema},_)}):Me.publish({type:l.type,properties:l.schema},R)}})})}n(w,"process");function f(l,P){let y=C.registry.get(l.type);if(!y)throw new Error(`Unknown event type: ${l.type}`);let T=Ft.use(_=>_.select({seq:Dn.seq}).from(Dn).where((0,ke.eq)(Dn.aggregate_id,l.aggregateID)).get())?.seq??-1;if(l.seq<=T)return;let R=T+1;if(l.seq!==R)throw new Error(`Sequence mismatch for aggregate "${l.aggregateID}": expected ${R}, got ${l.seq}`);w(y,l,{publish:!!P?.republish})}C.replay=f,n(f,"replay");function v(l,P){let y=P[l.aggregate];if(y==null)throw new Error(`SyncEvent.run: "${l.aggregate}" required but not found: ${JSON.stringify(P)}`);if(l.version!==o.get(l.type))throw new Error(`SyncEvent.run: running old versions of events is not allowed: ${l.type}`);Ft.transaction(D=>{let T=Wa.ascending(),R=D.select({seq:Dn.seq}).from(Dn).where((0,ke.eq)(Dn.aggregate_id,y)).get(),_=R?.seq!=null?R.seq+1:0;w(l,{id:T,seq:_,aggregateID:y,data:P},{publish:!0})},{behavior:"immediate"})}C.run=v,n(v,"run");function I(l){Ft.transaction(P=>{P.delete(Dn).where((0,ke.eq)(Dn.aggregate_id,l)).run(),P.delete(Qr).where((0,ke.eq)(Qr.aggregate_id,l)).run()})}C.remove=I,n(I,"remove");function h(l){return c.on("event",l),()=>c.off("event",l)}C.subscribeAll=h,n(h,"subscribeAll");function S(){return es.union(C.registry.entries().map(([l,P])=>es.object({type:es.literal(l),aggregate:es.literal(P.aggregate),data:P.schema}).meta({ref:"SyncEvent."+P.type})).toArray()).meta({ref:"SyncEvent"})}C.payloads=S,n(S,"payloads")})(Nt||={});import tn from"path";import Ga from"zod";import{Effect as Tt,Exit as Fu,Layer as Ha,Option as os,RcMap as Va,Schema as qt,ServiceMap as qu,TxReentrantLock as Ir}from"effect";import{Effect as Wt,Layer as Ba,ServiceMap as Nu,Stream as ts}from"effect";import{ChildProcess as Uu,ChildProcessSpawner as zu}from"effect/unstable/process";var Sn;(P=>{let t=["--no-optional-locks","-c","core.autocrlf=false","-c","core.fsmonitor=false","-c","core.longpaths=true","-c","core.symlinks=true","-c","core.quotepath=false"],e=n(y=>y.text().trim(),"out"),o=n(y=>y.split("\0").filter(Boolean),"nuls"),i=n(y=>({exitCode:1,text:n(()=>"","text"),stdout:Buffer.alloc(0),stderr:Buffer.from(y instanceof Error?y.message:String(y))}),"fail"),m=n(y=>y==="??"?"added":y.includes("U")?"modified":y.includes("A")&&!y.includes("D")?"added":y.includes("D")&&!y.includes("A")?"deleted":"modified","kind");class c extends Nu.Service()("@opencode/Git"){static{n(this,"Service")}}P.Service=c,P.layer=Ba.effect(c,Wt.gen(function*(){let y=yield*zu.ChildProcessSpawner,D=Wt.fn("Git.run")(function*(H,G){let ee=Uu.make("git",[...t,...H],{cwd:G.cwd,env:G.env,extendEnv:!0,stdin:"ignore",stdout:"pipe",stderr:"pipe"}),se=yield*y.spawn(ee),[F,Z]=yield*Wt.all([ts.mkString(ts.decodeText(se.stdout)),ts.mkString(ts.decodeText(se.stderr))],{concurrency:2});return{exitCode:yield*se.exitCode,text:n(()=>F,"text"),stdout:Buffer.from(F),stderr:Buffer.from(Z)}},Wt.scoped,Wt.catch(H=>Wt.succeed(i(H)))),T=Wt.fn("Git.text")(function*(H,G){return(yield*D(H,G)).text()}),R=Wt.fn("Git.lines")(function*(H,G){return(yield*T(H,G)).split(/\r?\n/).map(ee=>ee.trim()).filter(Boolean)}),_=Wt.fnUntraced(function*(H){return yield*R(["for-each-ref","--format=%(refname:short)","refs/heads"],{cwd:H})}),E=Wt.fnUntraced(function*(H,G){let ee=yield*D(["config","init.defaultBranch"],{cwd:H}),se=e(ee);if(!(!se||!G.includes(se)))return{name:se,ref:se}}),x=Wt.fnUntraced(function*(H){let G=yield*R(["remote"],{cwd:H});return G.includes("origin")?"origin":G.length===1?G[0]:G.includes("upstream")?"upstream":G[0]}),k=Wt.fn("Git.branch")(function*(H){let G=yield*D(["symbolic-ref","--quiet","--short","HEAD"],{cwd:H});return G.exitCode!==0?void 0:e(G)||void 0}),M=Wt.fn("Git.prefix")(function*(H){let G=yield*D(["rev-parse","--show-prefix"],{cwd:H});return G.exitCode!==0?"":e(G)}),r=Wt.fn("Git.defaultBranch")(function*(H){let G=yield*x(H);if(G){let F=yield*D(["symbolic-ref",`refs/remotes/${G}/HEAD`],{cwd:H});if(F.exitCode===0){let Z=e(F).replace(/^refs\/remotes\//,""),he=Z.startsWith(`${G}/`)?Z.slice(`${G}/`.length):"";if(he)return{name:he,ref:Z}}}let ee=yield*_(H),se=yield*E(H,ee);if(se)return se;if(ee.includes("main"))return{name:"main",ref:"main"};if(ee.includes("master"))return{name:"master",ref:"master"}}),u=Wt.fn("Git.hasHead")(function*(H){return(yield*D(["rev-parse","--verify","HEAD"],{cwd:H})).exitCode===0}),g=Wt.fn("Git.mergeBase")(function*(H,G,ee="HEAD"){let se=yield*D(["merge-base",G,ee],{cwd:H});return se.exitCode!==0?void 0:e(se)||void 0}),L=Wt.fn("Git.show")(function*(H,G,ee,se=""){let F=se?`${se}${ee}`:ee,Z=yield*D(["show",`${G}:${F}`],{cwd:H});return Z.exitCode!==0||Z.stdout.includes(0)?"":Z.text()}),j=Wt.fn("Git.status")(function*(H){return o(yield*T(["status","--porcelain=v1","--untracked-files=all","--no-renames","-z","--","."],{cwd:H})).flatMap(G=>{let ee=G.slice(3);if(!ee)return[];let se=G.slice(0,2);return[{file:ee,code:se,status:m(se)}]})}),z=Wt.fn("Git.diff")(function*(H,G){let ee=o(yield*T(["diff","--no-ext-diff","--no-renames","--name-status","-z",G,"--","."],{cwd:H}));return ee.flatMap((se,F)=>{if(F%2!==0)return[];let Z=ee[F+1];return!se||!Z?[]:[{file:Z,code:se,status:m(se)}]})}),V=Wt.fn("Git.stats")(function*(H,G){return o(yield*T(["diff","--no-ext-diff","--no-renames","--numstat","-z",G,"--","."],{cwd:H})).flatMap(ee=>{let se=ee.indexOf(" "),F=ee.indexOf(" ",se+1);if(se===-1||F===-1)return[];let Z=ee.slice(F+1);if(!Z)return[];let he=ee.slice(0,se),ge=ee.slice(se+1,F),Y=he==="-"?0:Number.parseInt(he||"0",10),N=ge==="-"?0:Number.parseInt(ge||"0",10);return[{file:Z,additions:Number.isFinite(Y)?Y:0,deletions:Number.isFinite(N)?N:0}]})});return c.of({run:D,branch:k,prefix:M,defaultBranch:r,hasHead:u,mergeBase:g,show:L,status:j,diff:z,stats:V})})),P.defaultLayer=P.layer.pipe(Ba.provide(so));let{runPromise:b}=qe(c,P.defaultLayer);async function s(y,D){return b(T=>T.run(y,D))}P.run=s,n(s,"run");async function p(y){return b(D=>D.branch(y))}P.branch=p,n(p,"branch");async function w(y){return b(D=>D.prefix(y))}P.prefix=w,n(w,"prefix");async function f(y){return b(D=>D.defaultBranch(y))}P.defaultBranch=f,n(f,"defaultBranch");async function v(y){return b(D=>D.hasHead(y))}P.hasHead=v,n(v,"hasHead");async function I(y,D,T){return b(R=>R.mergeBase(y,D,T))}P.mergeBase=I,n(I,"mergeBase");async function h(y,D,T,R){return b(_=>_.show(y,D,T,R))}P.show=h,n(h,"show");async function S(y){return b(D=>D.status(y))}P.status=S,n(S,"status");async function C(y,D){return b(T=>T.diff(y,D))}P.diff=C,n(C,"diff");async function l(y,D){return b(T=>T.stats(y,D))}P.stats=l,n(l,"stats")})(Sn||={});var Vn;(_=>{let t=Ae.create({service:"storage"});_.NotFoundError=tt.create("NotFoundError",Ga.object({message:Ga.string()}));let o=qt.Struct({path:qt.optional(qt.Struct({root:qt.optional(qt.String)}))}),i=qt.Struct({id:qt.String}),m=qt.Struct({id:qt.String}),c=qt.Struct({additions:qt.Number,deletions:qt.Number}),a=qt.Struct({id:qt.String,projectID:qt.String,summary:qt.Struct({diffs:qt.Array(c)})}),d=qt.decodeUnknownOption(o),b=qt.decodeUnknownOption(i),s=qt.decodeUnknownOption(m),p=qt.decodeUnknownOption(a);class w extends qu.Service()("@opencode/Storage"){static{n(this,"Service")}}_.Service=w;function f(E,x){return tn.join(E,...x)+".json"}n(f,"file");function v(E){return!E||typeof E!="object"?!1:"code"in E&&E.code==="ENOENT"?!0:"reason"in E&&E.reason&&typeof E.reason=="object"&&"_tag"in E.reason?E.reason._tag==="NotFound":!1}n(v,"missing");function I(E){let x=Number.parseInt(E,10);return Number.isNaN(x)?0:x}n(I,"parseMigration");let h=[Tt.fn("Storage.migration.1")(function*(E,x){let k=tn.resolve(E,"../project");if(!(yield*x.isDir(k)))return;let M=yield*x.glob("*",{cwd:k,include:"all"});for(let r of M){let u=tn.join(k,r);if(!(yield*x.isDir(u)))continue;t.info(`migrating project ${r}`);let g=r,L="/";if(g!=="global"){for(let V of yield*x.glob("storage/session/message/*/*.json",{cwd:u,absolute:!0})){let H=d(yield*x.readJson(V),{onExcessProperty:"preserve"}),G=os.isSome(H)?H.value.path?.root:void 0;if(G){L=G;break}}if(!L||!(yield*x.isDir(L)))continue;let j=yield*Tt.promise(()=>Sn.run(["rev-list","--max-parents=0","--all"],{cwd:L})),[z]=j.text().split(`
26
+ `).filter(Boolean).map(V=>V.trim()).toSorted();if(!z)continue;g=z,yield*x.writeWithDirs(tn.join(E,"project",g+".json"),JSON.stringify({id:z,vcs:"git",worktree:L,time:{created:Date.now(),initialized:Date.now()}},null,2)),t.info(`migrating sessions for project ${g}`);for(let V of yield*x.glob("storage/session/info/*.json",{cwd:u,absolute:!0})){let H=tn.join(E,"session",g,tn.basename(V));t.info("copying",{sessionFile:V,dest:H});let G=yield*x.readJson(V),ee=b(G,{onExcessProperty:"preserve"});if(yield*x.writeWithDirs(H,JSON.stringify(G,null,2)),!os.isNone(ee)){t.info(`migrating messages for session ${ee.value.id}`);for(let se of yield*x.glob(`storage/session/message/${ee.value.id}/*.json`,{cwd:u,absolute:!0})){let F=tn.join(E,"message",ee.value.id,tn.basename(se));t.info("copying",{msgFile:se,dest:F});let Z=yield*x.readJson(se),he=s(Z,{onExcessProperty:"preserve"});if(yield*x.writeWithDirs(F,JSON.stringify(Z,null,2)),!os.isNone(he)){t.info(`migrating parts for message ${he.value.id}`);for(let ge of yield*x.glob(`storage/session/part/${ee.value.id}/${he.value.id}/*.json`,{cwd:u,absolute:!0})){let Y=tn.join(E,"part",he.value.id,tn.basename(ge)),N=yield*x.readJson(ge);t.info("copying",{partFile:ge,dest:Y}),yield*x.writeWithDirs(Y,JSON.stringify(N,null,2))}}}}}}}}),Tt.fn("Storage.migration.2")(function*(E,x){for(let k of yield*x.glob("session/*/*.json",{cwd:E,absolute:!0})){let M=yield*x.readJson(k),r=p(M,{onExcessProperty:"preserve"});if(os.isNone(r))continue;let u=r.value.summary.diffs;yield*x.writeWithDirs(tn.join(E,"session_diff",r.value.id+".json"),JSON.stringify(u,null,2)),yield*x.writeWithDirs(tn.join(E,"session",r.value.projectID,r.value.id+".json"),JSON.stringify({...M,summary:{additions:u.reduce((g,L)=>g+L.additions,0),deletions:u.reduce((g,L)=>g+L.deletions,0)}},null,2))}})];_.layer=Ha.effect(w,Tt.gen(function*(){let E=yield*st.Service,x=yield*Va.make({lookup:n(()=>Ir.make(),"lookup"),idleTimeToLive:0}),k=yield*Tt.cached(Tt.gen(function*(){let G=tn.join(wt.Path.data,"storage"),ee=tn.join(G,"migration"),se=yield*E.readFileString(ee).pipe(Tt.map(I),Tt.catchIf(v,()=>Tt.succeed(0)),Tt.orElseSucceed(()=>0));for(let F=se;F<h.length;F++){t.info("running migration",{index:F});let Z=h[F],he=yield*Tt.exit(Z(G,E));if(Fu.isFailure(he)){t.error("failed to run migration",{index:F,cause:he.cause});break}yield*E.writeWithDirs(ee,String(F+1))}return{dir:G}})),M=n(G=>Tt.fail(new _.NotFoundError({message:`Resource not found: ${G}`})),"fail"),r=n((G,ee)=>ee.pipe(Tt.catchIf(v,()=>M(G))),"wrap"),u=Tt.fnUntraced(function*(G,ee){yield*E.writeWithDirs(G,JSON.stringify(ee,null,2))}),g=n((G,ee)=>Tt.scoped(Tt.gen(function*(){let se=f((yield*k).dir,G);return yield*ee(se,yield*Va.get(x,se))})),"withResolved"),L=Tt.fn("Storage.remove")(function*(G){yield*g(G,(ee,se)=>Ir.withWriteLock(se,E.remove(ee).pipe(Tt.catchIf(v,()=>Tt.void))))}),j=n(G=>Tt.gen(function*(){return yield*g(G,(se,F)=>Ir.withReadLock(F,r(se,E.readJson(se))))}),"read"),z=n((G,ee)=>Tt.gen(function*(){return yield*g(G,(F,Z)=>Ir.withWriteLock(Z,Tt.gen(function*(){let he=yield*r(F,E.readJson(F));return ee(he),yield*u(F,he),he})))}),"update"),V=n((G,ee)=>Tt.gen(function*(){yield*g(G,(se,F)=>Ir.withWriteLock(F,u(se,ee)))}),"write"),H=Tt.fn("Storage.list")(function*(G){let ee=(yield*k).dir,se=tn.join(ee,...G);return(yield*E.glob("**/*",{cwd:se,include:"file"}).pipe(Tt.catch(()=>Tt.succeed([])))).map(Z=>[...G,...Z.slice(0,-5).split(tn.sep)]).toSorted((Z,he)=>Z.join("/").localeCompare(he.join("/")))});return w.of({remove:L,read:j,update:z,write:V,list:H})})),_.defaultLayer=_.layer.pipe(Ha.provide(st.defaultLayer));let{runPromise:l}=qe(w,_.defaultLayer);async function P(E){return l(x=>x.remove(E))}_.remove=P,n(P,"remove");async function y(E){return l(x=>x.read(E))}_.read=y,n(y,"read");async function D(E,x){return l(k=>k.update(E,x))}_.update=D,n(D,"update");async function T(E,x){return l(k=>k.write(E,x))}_.write=T,n(T,"write");async function R(E){return l(x=>x.list(E))}_.list=R,n(R,"list")})(Vn||={});import $u from"zod";function rs(t){let e={};for(let[o,i]of Object.entries(t.required().shape))e[o]=i.nullable();return $u.object(e)}n(rs,"updateSchema");import U from"zod";import{APICallError as np,convertToModelMessages as op,LoadAPIKeyError as rp}from"ai";import kr from"path";import{pathToFileURL as _o,fileURLToPath as Wu}from"url";import{createMessageConnection as Bu,StreamMessageReader as Gu,StreamMessageWriter as Hu}from"vscode-jsonrpc/node.js";var Ya={".abap":"abap",".bat":"bat",".bib":"bibtex",".bibtex":"bibtex",".clj":"clojure",".cljs":"clojure",".cljc":"clojure",".edn":"clojure",".coffee":"coffeescript",".c":"c",".cpp":"cpp",".cxx":"cpp",".cc":"cpp",".c++":"cpp",".cs":"csharp",".css":"css",".d":"d",".pas":"pascal",".pascal":"pascal",".diff":"diff",".patch":"diff",".dart":"dart",".dockerfile":"dockerfile",".ex":"elixir",".exs":"elixir",".erl":"erlang",".ets":"typescript",".hrl":"erlang",".fs":"fsharp",".fsi":"fsharp",".fsx":"fsharp",".fsscript":"fsharp",".gitcommit":"git-commit",".gitrebase":"git-rebase",".go":"go",".groovy":"groovy",".gleam":"gleam",".hbs":"handlebars",".handlebars":"handlebars",".hs":"haskell",".lhs":"haskell",".html":"html",".htm":"html",".ini":"ini",".java":"java",".jl":"julia",".js":"javascript",".kt":"kotlin",".kts":"kotlin",".jsx":"javascriptreact",".json":"json",".tex":"latex",".latex":"latex",".less":"less",".lua":"lua",".makefile":"makefile",makefile:"makefile",".md":"markdown",".markdown":"markdown",".m":"objective-c",".mm":"objective-cpp",".pl":"perl",".pm":"perl",".pm6":"perl6",".php":"php",".ps1":"powershell",".psm1":"powershell",".pug":"jade",".jade":"jade",".py":"python",".r":"r",".cshtml":"razor",".razor":"razor",".rb":"ruby",".rake":"ruby",".gemspec":"ruby",".ru":"ruby",".erb":"erb",".html.erb":"erb",".js.erb":"erb",".css.erb":"erb",".json.erb":"erb",".rs":"rust",".scss":"scss",".sass":"sass",".scala":"scala",".shader":"shaderlab",".sh":"shellscript",".bash":"shellscript",".zsh":"shellscript",".ksh":"shellscript",".sql":"sql",".svelte":"svelte",".swift":"swift",".ts":"typescript",".tsx":"typescriptreact",".mts":"typescript",".cts":"typescript",".mtsx":"typescriptreact",".ctsx":"typescriptreact",".xml":"xml",".xsl":"xsl",".yaml":"yaml",".yml":"yaml",".mjs":"javascript",".cjs":"javascript",".vue":"vue",".zig":"zig",".zon":"zig",".astro":"astro",".ml":"ocaml",".mli":"ocaml",".tf":"terraform",".tfvars":"terraform-vars",".hcl":"hcl",".nix":"nix",".typ":"typst",".typc":"typst"};import Er from"zod";var Vu=150,Hs;(m=>{let t=Ae.create({service:"lsp.client"});m.InitializeError=tt.create("LSPInitializeError",Er.object({serverID:Er.string()})),m.Event={Diagnostics:ht.define("lsp.client.diagnostics",Er.object({serverID:Er.string(),path:Er.string()}))};async function i(c){let a=t.clone().tag("serverID",c.serverID);a.info("starting client");let d=Bu(new Gu(c.server.process.stdout),new Hu(c.server.process.stdin)),b=new Map;d.onNotification("textDocument/publishDiagnostics",w=>{let f=Te.normalizePath(Wu(w.uri));a.info("textDocument/publishDiagnostics",{path:f,count:w.diagnostics.length});let v=b.has(f);b.set(f,w.diagnostics),!(!v&&c.serverID==="typescript")&&Me.publish(m.Event.Diagnostics,{path:f,serverID:c.serverID})}),d.onRequest("window/workDoneProgress/create",w=>(a.info("window/workDoneProgress/create",w),null)),d.onRequest("workspace/configuration",async()=>[c.server.initialization??{}]),d.onRequest("client/registerCapability",async()=>{}),d.onRequest("client/unregisterCapability",async()=>{}),d.onRequest("workspace/workspaceFolders",async()=>[{name:"workspace",uri:_o(c.root).href}]),d.listen(),a.info("sending initialize"),await $s(d.sendRequest("initialize",{rootUri:_o(c.root).href,processId:c.server.process.pid,workspaceFolders:[{name:"workspace",uri:_o(c.root).href}],initializationOptions:{...c.server.initialization},capabilities:{window:{workDoneProgress:!0},workspace:{configuration:!0,didChangeWatchedFiles:{dynamicRegistration:!0}},textDocument:{synchronization:{didOpen:!0,didChange:!0},publishDiagnostics:{versionSupport:!0}}}}),45e3).catch(w=>{throw a.error("initialize error",{error:w}),new m.InitializeError({serverID:c.serverID},{cause:w})}),await d.sendNotification("initialized",{}),c.server.initialization&&await d.sendNotification("workspace/didChangeConfiguration",{settings:c.server.initialization});let s={},p={root:c.root,get serverID(){return c.serverID},get connection(){return d},notify:{async open(w){w.path=kr.isAbsolute(w.path)?w.path:kr.resolve(ne.directory,w.path);let f=await Te.readText(w.path),v=kr.extname(w.path),I=Ya[v]??"plaintext",h=s[w.path];if(h!==void 0){t.info("workspace/didChangeWatchedFiles",w),await d.sendNotification("workspace/didChangeWatchedFiles",{changes:[{uri:_o(w.path).href,type:2}]});let S=h+1;s[w.path]=S,t.info("textDocument/didChange",{path:w.path,version:S}),await d.sendNotification("textDocument/didChange",{textDocument:{uri:_o(w.path).href,version:S},contentChanges:[{text:f}]});return}t.info("workspace/didChangeWatchedFiles",w),await d.sendNotification("workspace/didChangeWatchedFiles",{changes:[{uri:_o(w.path).href,type:1}]}),t.info("textDocument/didOpen",w),b.delete(w.path),await d.sendNotification("textDocument/didOpen",{textDocument:{uri:_o(w.path).href,languageId:I,version:0,text:f}}),s[w.path]=0}},get diagnostics(){return b},async waitForDiagnostics(w){let f=Te.normalizePath(kr.isAbsolute(w.path)?w.path:kr.resolve(ne.directory,w.path));t.info("waiting for diagnostics",{path:f});let v,I;return await $s(new Promise(h=>{v=Me.subscribe(m.Event.Diagnostics,S=>{S.properties.path===f&&S.properties.serverID===p.serverID&&(I&&clearTimeout(I),I=setTimeout(()=>{t.info("got diagnostics",{path:f}),v?.(),h()},Vu))})}),3e3).catch(()=>{}).finally(()=>{I&&clearTimeout(I),v?.()})},async shutdown(){a.info("shutting down"),d.end(),d.dispose(),await Xt.stop(c.server.process),a.info("shutdown")}};return a.info("initialized"),p}m.create=i,n(i,"create")})(Hs||={});import Vs from"path";import{pathToFileURL as Jo,fileURLToPath as Yu}from"url";import At from"zod";import{Effect as Dt,Layer as Ja,ServiceMap as Ju}from"effect";var ct;(M=>{let t=Ae.create({service:"lsp"});M.Event={Updated:ht.define("lsp.updated",At.object({}))},M.Range=At.object({start:At.object({line:At.number(),character:At.number()}),end:At.object({line:At.number(),character:At.number()})}).meta({ref:"Range"}),M.Symbol=At.object({name:At.string(),kind:At.number(),location:At.object({uri:At.string(),range:M.Range})}).meta({ref:"Symbol"}),M.DocumentSymbol=At.object({name:At.string(),detail:At.string().optional(),kind:At.number(),range:M.Range,selectionRange:M.Range}).meta({ref:"DocumentSymbol"}),M.Status=At.object({id:At.string(),name:At.string(),root:At.string(),status:At.union([At.literal("connected"),At.literal("error")])}).meta({ref:"LSPStatus"});let a;(fe=>(fe[fe.File=1]="File",fe[fe.Module=2]="Module",fe[fe.Namespace=3]="Namespace",fe[fe.Package=4]="Package",fe[fe.Class=5]="Class",fe[fe.Method=6]="Method",fe[fe.Property=7]="Property",fe[fe.Field=8]="Field",fe[fe.Constructor=9]="Constructor",fe[fe.Enum=10]="Enum",fe[fe.Interface=11]="Interface",fe[fe.Function=12]="Function",fe[fe.Variable=13]="Variable",fe[fe.Constant=14]="Constant",fe[fe.String=15]="String",fe[fe.Number=16]="Number",fe[fe.Boolean=17]="Boolean",fe[fe.Array=18]="Array",fe[fe.Object=19]="Object",fe[fe.Key=20]="Key",fe[fe.Null=21]="Null",fe[fe.EnumMember=22]="EnumMember",fe[fe.Struct=23]="Struct",fe[fe.Event=24]="Event",fe[fe.Operator=25]="Operator",fe[fe.TypeParameter=26]="TypeParameter"))(a||={});let d=[5,12,6,11,13,14,23,10],b=n(r=>{ze.OPENCODE_EXPERIMENTAL_LSP_TY?r.pyright&&(t.info("LSP server pyright is disabled because OPENCODE_EXPERIMENTAL_LSP_TY is enabled"),delete r.pyright):r.ty&&delete r.ty},"filterExperimentalServers");class s extends Ju.Service()("@opencode/LSP"){static{n(this,"Service")}}M.Service=s,M.layer=Ja.effect(s,Dt.gen(function*(){let r=yield*Be.Service,u=yield*ae.make(Dt.fn("LSP.state")(function*(){let Q=yield*r.get(),ie={};if(Q.lsp===!1)t.info("all LSPs are disabled");else{for(let le of Object.values(Da))ie[le.id]=le;b(ie);for(let[le,we]of Object.entries(Q.lsp??{})){let be=ie[le];if(we.disabled){t.info(`LSP server ${le} is disabled`),delete ie[le];continue}ie[le]={...be,id:le,root:be?.root??(async()=>ne.directory),extensions:we.extensions??be?.extensions??[],spawn:n(async fe=>({process:Ea(we.command[0],we.command.slice(1),{cwd:fe,env:{...process.env,...we.env}}),initialization:we.initialization}),"spawn")}}t.info("enabled LSP servers",{serverIds:Object.values(ie).map(le=>le.id).join(", ")})}let me={clients:[],servers:ie,broken:new Set,spawning:new Map};return yield*Dt.addFinalizer(()=>Dt.promise(async()=>{await Promise.all(me.clients.map(le=>le.shutdown()))})),me})),g=Dt.fnUntraced(function*(Q){if(!ne.containsPath(Q))return[];let ie=yield*ae.get(u);return yield*Dt.promise(async()=>{let me=Vs.parse(Q).ext||Q,le=[];async function we(be,fe,J){let X=await be.spawn(fe).then(ue=>(ue||ie.broken.add(J),ue)).catch(ue=>{ie.broken.add(J),t.error(`Failed to spawn LSP server ${be.id}`,{error:ue})});if(!X)return;t.info("spawned lsp server",{serverID:be.id});let xe=await Hs.create({serverID:be.id,server:X,root:fe}).catch(async ue=>{ie.broken.add(J),await Xt.stop(X.process),t.error(`Failed to initialize LSP client ${be.id}`,{error:ue})});if(!xe)return;let de=ie.clients.find(ue=>ue.root===fe&&ue.serverID===be.id);return de?(await Xt.stop(X.process),de):(ie.clients.push(xe),xe)}n(we,"schedule");for(let be of Object.values(ie.servers)){if(be.extensions.length&&!be.extensions.includes(me))continue;let fe=await be.root(Q);if(!fe||ie.broken.has(fe+be.id))continue;let J=ie.clients.find(ue=>ue.root===fe&&ue.serverID===be.id);if(J){le.push(J);continue}let X=ie.spawning.get(fe+be.id);if(X){let ue=await X;if(!ue)continue;le.push(ue);continue}let xe=we(be,fe,fe+be.id);ie.spawning.set(fe+be.id,xe),xe.finally(()=>{ie.spawning.get(fe+be.id)===xe&&ie.spawning.delete(fe+be.id)});let de=await xe;de&&(le.push(de),Me.publish(M.Event.Updated,{}))}return le})}),L=Dt.fnUntraced(function*(Q,ie){let me=yield*g(Q);return yield*Dt.promise(()=>Promise.all(me.map(le=>ie(le))))}),j=Dt.fnUntraced(function*(Q){let ie=yield*ae.get(u);return yield*Dt.promise(()=>Promise.all(ie.clients.map(me=>Q(me))))}),z=Dt.fn("LSP.init")(function*(){yield*ae.get(u)}),V=Dt.fn("LSP.status")(function*(){let Q=yield*ae.get(u),ie=[];for(let me of Q.clients)ie.push({id:me.serverID,name:Q.servers[me.serverID].id,root:Vs.relative(ne.directory,me.root),status:"connected"});return ie}),H=Dt.fn("LSP.hasClients")(function*(Q){let ie=yield*ae.get(u);return yield*Dt.promise(async()=>{let me=Vs.parse(Q).ext||Q;for(let le of Object.values(ie.servers)){if(le.extensions.length&&!le.extensions.includes(me))continue;let we=await le.root(Q);if(we&&!ie.broken.has(we+le.id))return!0}return!1})}),G=Dt.fn("LSP.touchFile")(function*(Q,ie){t.info("touching file",{file:Q});let me=yield*g(Q);yield*Dt.promise(()=>Promise.all(me.map(async le=>{let we=ie?le.waitForDiagnostics({path:Q}):Promise.resolve();return await le.notify.open({path:Q}),we})).catch(le=>{t.error("failed to touch file",{err:le,file:Q})}))}),ee=Dt.fn("LSP.diagnostics")(function*(){let Q={},ie=yield*j(async me=>me.diagnostics);for(let me of ie)for(let[le,we]of me.entries()){let be=Q[le]||[];be.push(...we),Q[le]=be}return Q}),se=Dt.fn("LSP.hover")(function*(Q){return yield*L(Q.file,ie=>ie.connection.sendRequest("textDocument/hover",{textDocument:{uri:Jo(Q.file).href},position:{line:Q.line,character:Q.character}}).catch(()=>null))}),F=Dt.fn("LSP.definition")(function*(Q){return(yield*L(Q.file,me=>me.connection.sendRequest("textDocument/definition",{textDocument:{uri:Jo(Q.file).href},position:{line:Q.line,character:Q.character}}).catch(()=>null))).flat().filter(Boolean)}),Z=Dt.fn("LSP.references")(function*(Q){return(yield*L(Q.file,me=>me.connection.sendRequest("textDocument/references",{textDocument:{uri:Jo(Q.file).href},position:{line:Q.line,character:Q.character},context:{includeDeclaration:!0}}).catch(()=>[]))).flat().filter(Boolean)}),he=Dt.fn("LSP.implementation")(function*(Q){return(yield*L(Q.file,me=>me.connection.sendRequest("textDocument/implementation",{textDocument:{uri:Jo(Q.file).href},position:{line:Q.line,character:Q.character}}).catch(()=>null))).flat().filter(Boolean)}),ge=Dt.fn("LSP.documentSymbol")(function*(Q){let ie=Yu(Q);return(yield*L(ie,le=>le.connection.sendRequest("textDocument/documentSymbol",{textDocument:{uri:Q}}).catch(()=>[]))).flat().filter(Boolean)}),Y=Dt.fn("LSP.workspaceSymbol")(function*(Q){return(yield*j(me=>me.connection.sendRequest("workspace/symbol",{query:Q}).then(le=>le.filter(we=>d.includes(we.kind))).then(le=>le.slice(0,10)).catch(()=>[]))).flat()}),N=Dt.fn("LSP.prepareCallHierarchy")(function*(Q){return(yield*L(Q.file,me=>me.connection.sendRequest("textDocument/prepareCallHierarchy",{textDocument:{uri:Jo(Q.file).href},position:{line:Q.line,character:Q.character}}).catch(()=>[]))).flat().filter(Boolean)}),q=Dt.fnUntraced(function*(Q,ie){return(yield*L(Q.file,async le=>{let we=await le.connection.sendRequest("textDocument/prepareCallHierarchy",{textDocument:{uri:Jo(Q.file).href},position:{line:Q.line,character:Q.character}}).catch(()=>[]);return we?.length?le.connection.sendRequest(ie,{item:we[0]}).catch(()=>[]):[]})).flat().filter(Boolean)}),te=Dt.fn("LSP.incomingCalls")(function*(Q){return yield*q(Q,"callHierarchy/incomingCalls")}),ce=Dt.fn("LSP.outgoingCalls")(function*(Q){return yield*q(Q,"callHierarchy/outgoingCalls")});return s.of({init:z,status:V,hasClients:H,touchFile:G,diagnostics:ee,hover:se,definition:F,references:Z,implementation:he,documentSymbol:ge,workspaceSymbol:Y,prepareCallHierarchy:N,incomingCalls:te,outgoingCalls:ce})})),M.defaultLayer=M.layer.pipe(Ja.provide(Be.defaultLayer));let{runPromise:f}=qe(s,M.defaultLayer);M.init=n(async()=>f(r=>r.init()),"init"),M.status=n(async()=>f(r=>r.status()),"status"),M.hasClients=n(async r=>f(u=>u.hasClients(r)),"hasClients"),M.touchFile=n(async(r,u)=>f(g=>g.touchFile(r,u)),"touchFile"),M.diagnostics=n(async()=>f(r=>r.diagnostics()),"diagnostics"),M.hover=n(async r=>f(u=>u.hover(r)),"hover"),M.definition=n(async r=>f(u=>u.definition(r)),"definition"),M.references=n(async r=>f(u=>u.references(r)),"references"),M.implementation=n(async r=>f(u=>u.implementation(r)),"implementation"),M.documentSymbol=n(async r=>f(u=>u.documentSymbol(r)),"documentSymbol"),M.workspaceSymbol=n(async r=>f(u=>u.workspaceSymbol(r)),"workspaceSymbol"),M.prepareCallHierarchy=n(async r=>f(u=>u.prepareCallHierarchy(r)),"prepareCallHierarchy"),M.incomingCalls=n(async r=>f(u=>u.incomingCalls(r)),"incomingCalls"),M.outgoingCalls=n(async r=>f(u=>u.outgoingCalls(r)),"outgoingCalls");let k;(u=>{function r(g){let j={1:"ERROR",2:"WARN",3:"INFO",4:"HINT"}[g.severity||1],z=g.range.start.line+1,V=g.range.start.character+1;return`${j} [${z}:${V}] ${g.message}`}u.pretty=r,n(r,"pretty")})(k=M.Diagnostic||={})})(ct||={});import{Cause as Ku,Duration as Ka,Effect as Pe,Layer as ss,Schedule as Xu,Semaphore as Zu,ServiceMap as Qu,Stream as lo}from"effect";import{ChildProcess as Xa,ChildProcessSpawner as Za}from"effect/unstable/process";import Ko from"path";import zn from"zod";var cn;(P=>{P.Patch=zn.object({hash:zn.string(),files:zn.string().array()}),P.FileDiff=zn.object({file:zn.string(),before:zn.string(),after:zn.string(),additions:zn.number(),deletions:zn.number(),status:zn.enum(["added","deleted","modified"]).optional()}).meta({ref:"FileDiff"});let o=Ae.create({service:"snapshot"}),i="7.days",m=2*1024*1024,c=["-c","core.longpaths=true","-c","core.symlinks=true"],a=["-c","core.autocrlf=false",...c],d=[...a,"-c","core.quotepath=false"];class b extends Qu.Service()("@opencode/Snapshot"){static{n(this,"Service")}}P.Service=b,P.layer=ss.effect(b,Pe.gen(function*(){let y=yield*st.Service,D=yield*Za.ChildProcessSpawner,T=yield*Be.Service,R=new Map,_=n(x=>{let k=R.get(x);if(k)return k;let M=Zu.makeUnsafe(1);return R.set(x,M),M},"lock"),E=yield*ae.make(Pe.fn("Snapshot.state")(function*(x){let k={directory:x.directory,worktree:x.worktree,gitdir:Ko.join(wt.Path.data,"snapshot",x.project.id,Kr.fast(x.worktree)),vcs:x.project.vcs},M=n(q=>["--git-dir",k.gitdir,"--work-tree",k.worktree,...q],"args"),r=Pe.fnUntraced(function*(q,te){let ce=Xa.make("git",q,{cwd:te?.cwd,env:te?.env,extendEnv:!0}),Q=yield*D.spawn(ce),[ie,me]=yield*Pe.all([lo.mkString(lo.decodeText(Q.stdout)),lo.mkString(lo.decodeText(Q.stderr))],{concurrency:2});return{code:yield*Q.exitCode,text:ie,stderr:me}},Pe.scoped,Pe.catch(q=>Pe.succeed({code:Za.ExitCode(1),text:"",stderr:String(q)}))),u=n(q=>y.exists(q).pipe(Pe.orDie),"exists"),g=n(q=>y.readFileString(q).pipe(Pe.catch(()=>Pe.succeed(""))),"read"),L=n(q=>y.remove(q).pipe(Pe.catch(()=>Pe.void)),"remove"),j=n(q=>_(k.gitdir).withPermits(1)(q),"locked"),z=Pe.fnUntraced(function*(){return k.vcs!=="git"?!1:(yield*T.get()).snapshot!==!1}),V=Pe.fnUntraced(function*(){let te=(yield*r(["rev-parse","--path-format=absolute","--git-path","info/exclude"],{cwd:k.worktree})).text.trim();if(te&&(yield*u(te)))return te}),H=Pe.fnUntraced(function*(q=[]){let te=yield*V(),ce=Ko.join(k.gitdir,"info","exclude"),Q=[te?(yield*g(te)).trimEnd():"",...q.map(ie=>`/${ie.replaceAll("\\","/")}`)].filter(Boolean).join(`
27
27
  `);yield*y.ensureDir(Ko.join(k.gitdir,"info")).pipe(Pe.orDie),yield*y.writeFileString(ce,Q?`${Q}
28
28
  `:"").pipe(Pe.orDie)}),G=Pe.fnUntraced(function*(){yield*H();let[q,te]=yield*Pe.all([r([...d,...M(["diff-files","--name-only","-z","--","."])],{cwd:k.directory}),r([...d,...M(["ls-files","--others","--exclude-standard","-z","--","."])],{cwd:k.directory})],{concurrency:2});if(q.code!==0||te.code!==0){o.warn("failed to list snapshot files",{diffCode:q.code,diffStderr:q.stderr,otherCode:te.code,otherStderr:te.stderr});return}let ce=q.text.split("\0").filter(Boolean),Q=te.text.split("\0").filter(Boolean),ie=Array.from(new Set([...ce,...Q]));if(!ie.length)return;let me=(yield*Pe.all(ie.map(we=>y.stat(Ko.join(k.directory,we)).pipe(Pe.catch(()=>Pe.void)).pipe(Pe.map(be=>!be||be.type!=="File"?void 0:(typeof be.size=="bigint"?Number(be.size):be.size)>m?we:void 0))),{concurrency:8})).filter(we=>!!we);yield*H(me);let le=yield*r([...a,...M(["add","--sparse","."])],{cwd:k.directory});le.code!==0&&o.warn("failed to add snapshot files",{exitCode:le.code,stderr:le.stderr})}),ee=Pe.fnUntraced(function*(){return yield*j(Pe.gen(function*(){if(!(yield*z())||!(yield*u(k.gitdir)))return;let q=yield*r(M(["gc",`--prune=${i}`]),{cwd:k.directory});if(q.code!==0){o.warn("cleanup failed",{exitCode:q.code,stderr:q.stderr});return}o.info("cleanup",{prune:i})}))}),se=Pe.fnUntraced(function*(){return yield*j(Pe.gen(function*(){if(!(yield*z()))return;let q=yield*u(k.gitdir);yield*y.ensureDir(k.gitdir).pipe(Pe.orDie),q||(yield*r(["init"],{env:{GIT_DIR:k.gitdir,GIT_WORK_TREE:k.worktree}}),yield*r(["--git-dir",k.gitdir,"config","core.autocrlf","false"]),yield*r(["--git-dir",k.gitdir,"config","core.longpaths","true"]),yield*r(["--git-dir",k.gitdir,"config","core.symlinks","true"]),yield*r(["--git-dir",k.gitdir,"config","core.fsmonitor","false"]),o.info("initialized")),yield*G();let ce=(yield*r(M(["write-tree"]),{cwd:k.directory})).text.trim();return o.info("tracking",{hash:ce,cwd:k.directory,git:k.gitdir}),ce}))}),F=Pe.fnUntraced(function*(q){return yield*j(Pe.gen(function*(){yield*G();let te=yield*r([...d,...M(["diff","--cached","--no-ext-diff","--name-only",q,"--","."])],{cwd:k.directory});return te.code!==0?(o.warn("failed to get diff",{hash:q,exitCode:te.code}),{hash:q,files:[]}):{hash:q,files:te.text.trim().split(`
29
29
  `).map(ce=>ce.trim()).filter(Boolean).map(ce=>Ko.join(k.worktree,ce).replaceAll("\\","/"))}}))}),Z=n(()=>{if(!br.allows(k.worktree))return o.error("refused to restore a snapshot in the user's project folder",{worktree:k.worktree}),new Error(`snapshot restore refused: ${k.worktree} is the user's project folder. Nothing was written.`)},"assertRestorable"),he=Pe.fnUntraced(function*(q){let te=Z();return te?yield*Pe.die(te):yield*j(Pe.gen(function*(){o.info("restore",{commit:q});let ce=yield*r([...c,...M(["read-tree",q])],{cwd:k.worktree});if(ce.code===0){let Q=yield*r([...c,...M(["checkout-index","-a","-f"])],{cwd:k.worktree});if(Q.code===0)return;o.error("failed to restore snapshot",{snapshot:q,exitCode:Q.code,stderr:Q.stderr});return}o.error("failed to restore snapshot",{snapshot:q,exitCode:ce.code,stderr:ce.stderr})}))}),ge=Pe.fnUntraced(function*(q){let te=Z();return te?yield*Pe.die(te):yield*j(Pe.gen(function*(){let ce=[],Q=new Set;for(let le of q)for(let we of le.files)Q.has(we)||(Q.add(we),ce.push({hash:le.hash,file:we,rel:Ko.relative(k.worktree,we).replaceAll("\\","/")}));let ie=Pe.fnUntraced(function*(le){if(o.info("reverting",{file:le.file,hash:le.hash}),(yield*r([...c,...M(["checkout",le.hash,"--",le.file])],{cwd:k.worktree})).code===0)return;let be=yield*r([...c,...M(["ls-tree",le.hash,"--",le.rel])],{cwd:k.worktree});if(be.code===0&&be.text.trim()){o.info("file existed in snapshot but checkout failed, keeping",{file:le.file,hash:le.hash});return}o.info("file did not exist in snapshot, deleting",{file:le.file,hash:le.hash}),yield*L(le.file)}),me=n((le,we)=>le===we||le.startsWith(`${we}/`)||we.startsWith(`${le}/`),"clash");for(let le=0;le<ce.length;){let we=ce[le],be=[we],fe=le+1;for(;fe<ce.length&&be.length<100;){let de=ce[fe];if(de.hash!==we.hash||be.some(ue=>me(ue.rel,de.rel)))break;be.push(de),fe+=1}if(be.length===1){yield*ie(we),le=fe;continue}let J=yield*r([...c,...M(["ls-tree","--name-only",we.hash,"--",...be.map(de=>de.rel)])],{cwd:k.worktree});if(J.code!==0){o.info("batched ls-tree failed, falling back to single-file revert",{hash:we.hash,files:be.length});for(let de of be)yield*ie(de);le=fe;continue}let X=new Set(J.text.trim().split(`
@@ -31,13 +31,13 @@ Please rewrite the input so it satisfies the expected schema.`,{cause:h})}let v=
31
31
  `)+`
32
32
  `))}),de=yield*D.spawn(xe),[ue,Qe]=yield*Pe.all([lo.mkUint8Array(de.stdout),lo.mkString(lo.decodeText(de.stderr))],{concurrency:2});if((yield*de.exitCode)!==0){o.info("git cat-file --batch failed during snapshot diff, falling back to per-file git show",{stderr:Qe,refs:X.length});return}let xt=n((W,K)=>{o.info(W,{...K,refs:X.length})},"fail"),Oe=new Map,ye=new TextDecoder,O=0;for(let W of X){let K=O;for(;K<ue.length&&ue[K]!==10;)K+=1;if(K>=ue.length)return xt("git cat-file --batch returned a truncated header during snapshot diff, falling back to per-file git show");let B=ye.decode(ue.slice(O,K));O=K+1;let re=Oe.get(W.file)??{before:"",after:""};if(B.endsWith(" missing")){Oe.set(W.file,re);continue}let ve=B.match(/^[0-9a-f]+ blob (\d+)$/);if(!ve)return xt("git cat-file --batch returned an unexpected header during snapshot diff, falling back to per-file git show",{head:B});let $=Number(ve[1]);if(!Number.isInteger($)||$<0||O+$>=ue.length||ue[O+$]!==10)return xt("git cat-file --batch returned truncated content during snapshot diff, falling back to per-file git show",{head:B});let _e=ye.decode(ue.slice(O,O+$));W.side==="before"&&(re.before=_e),W.side==="after"&&(re.after=_e),Oe.set(W.file,re),O+=$+1}return O!==ue.length?xt("git cat-file --batch returned trailing data during snapshot diff, falling back to per-file git show"):Oe},Pe.scoped,Pe.catch(()=>Pe.succeed(void 0))),ie=[],me=new Map,le=yield*r([...d,...M(["diff","--no-ext-diff","--name-status","--no-renames",q,te,"--","."])],{cwd:k.directory});for(let J of le.text.trim().split(`
33
33
  `)){if(!J)continue;let[X,xe]=J.split(" ");!X||!xe||me.set(xe,X.startsWith("A")?"added":X.startsWith("D")?"deleted":"modified")}let be=(yield*r([...d,...M(["diff","--no-ext-diff","--no-renames","--numstat",q,te,"--","."])],{cwd:k.directory})).text.trim().split(`
34
- `).filter(Boolean).flatMap(J=>{let[X,xe,de]=J.split(" ");if(!de)return[];let ue=X==="-"&&xe==="-",Qe=ue?0:parseInt(X),dt=ue?0:parseInt(xe);return[{file:de,status:me.get(de)??"modified",binary:ue,additions:Number.isFinite(Qe)?Qe:0,deletions:Number.isFinite(dt)?dt:0}]}),fe=100;for(let J=0;J<be.length;J+=fe){let X=be.slice(J,J+fe),xe=yield*Q(X);for(let de of X){let ue=xe?.get(de.file)??{before:"",after:""},[Qe,dt]=de.binary?["",""]:xe?[ue.before,ue.after]:yield*ce(de);ie.push({file:de.file,before:Qe,after:dt,additions:de.additions,deletions:de.deletions,status:de.status})}}return ie}))});return yield*ee().pipe(Pe.catchCause(q=>(o.error("cleanup loop failed",{cause:Ju.pretty(q)}),Pe.void)),Pe.repeat(Ku.spaced(Ka.hours(1))),Pe.delay(Ka.minutes(1)),Pe.forkScoped),{cleanup:ee,track:se,patch:F,restore:he,revert:ge,diff:Y,diffFull:N}}));return b.of({init:Pe.fn("Snapshot.init")(function*(){yield*ae.get(E)}),cleanup:Pe.fn("Snapshot.cleanup")(function*(){return yield*ae.useEffect(E,x=>x.cleanup())}),track:Pe.fn("Snapshot.track")(function*(){return yield*ae.useEffect(E,x=>x.track())}),patch:Pe.fn("Snapshot.patch")(function*(x){return yield*ae.useEffect(E,k=>k.patch(x))}),restore:Pe.fn("Snapshot.restore")(function*(x){return yield*ae.useEffect(E,k=>k.restore(x))}),revert:Pe.fn("Snapshot.revert")(function*(x){return yield*ae.useEffect(E,k=>k.revert(x))}),diff:Pe.fn("Snapshot.diff")(function*(x){return yield*ae.useEffect(E,k=>k.diff(x))}),diffFull:Pe.fn("Snapshot.diffFull")(function*(x,k){return yield*ae.useEffect(E,M=>M.diffFull(x,k))})})})),P.defaultLayer=P.layer.pipe(ss.provide(so),ss.provide(st.defaultLayer),ss.provide(Be.defaultLayer));let{runPromise:w}=qe(b,P.defaultLayer);async function f(){return w(y=>y.init())}P.init=f,n(f,"init");async function v(){return w(y=>y.track())}P.track=v,n(v,"track");async function I(y){return w(D=>D.patch(y))}P.patch=I,n(I,"patch");async function h(y){return w(D=>D.restore(y))}P.restore=h,n(h,"restore");async function S(y){return w(D=>D.revert(y))}P.revert=S,n(S,"revert");async function C(y){return w(D=>D.diff(y))}P.diff=C,n(C,"diff");async function l(y,D){return w(T=>T.diffFull(y,D))}P.diffFull=l,n(l,"diffFull")})(cn||={});import{STATUS_CODES as Qa}from"http";var Nn;(f=>{class t extends Error{static{n(this,"ResponseStreamError")}name="ProviderResponseStreamError"}f.ResponseStreamError=t,f.RESPONSE_INCOMPLETE_CODE="response_incomplete",f.RESPONSE_FAILED_CODE="response_failed";let i=[/prompt is too long/i,/input is too long for requested model/i,/exceeds the context window/i,/input token count.*exceeds the maximum/i,/maximum prompt length is \d+/i,/reduce the length of the messages/i,/maximum context length is \d+ tokens/i,/exceeds the limit of \d+/i,/exceeds the available context size/i,/greater than the context length/i,/context window exceeds limit/i,/exceeded model token limit/i,/context[_ ]length[_ ]exceeded/i,/request entity too large/i,/context length is only \d+ tokens/i,/input length.*exceeds.*context length/i,/prompt too long; exceeded (?:max )?context length/i,/too large for model with \d+ maximum context length/i,/model_context_window_exceeded/i];function m(v){let I=v.statusCode;return I&&I===404||v.isRetryable}n(m,"isOpenAiErrorRetryable");function c(v){return i.some(I=>I.test(v))?!0:/^4(00|13)\s*(status code)?\s*\(no body\)/i.test(v)}n(c,"isOverflow");function a(v,I){return Ct(()=>{let h=I.message;if(h===""){if(I.responseBody)return I.responseBody;if(I.statusCode){let S=Qa[I.statusCode];if(S)return S}return"Unknown error"}if(!I.responseBody||I.statusCode&&h!==Qa[I.statusCode])return h;try{let S=JSON.parse(I.responseBody),C=S.message||S.error||S.error?.message;if(C&&typeof C=="string")return`${h}: ${C}`}catch{}return/^\s*<!doctype|^\s*<html/i.test(I.responseBody)?I.statusCode===401?"Unauthorized: request was blocked by a gateway or proxy. Your authentication token may be missing or expired \u2014 try running `opencode auth login <your provider URL>` to re-authenticate.":I.statusCode===403?"Forbidden: request was blocked by a gateway or proxy. You may not have permission to access this resource \u2014 check your account and provider settings.":h:`${h}: ${I.responseBody}`}).trim()}n(a,"message");function d(v){if(typeof v=="string")try{let I=JSON.parse(v);return I&&typeof I=="object"?I:void 0}catch{return}if(typeof v=="object"&&v!==null)return v}n(d,"json");let b=new Set(["usage_limit_reached","insufficient_quota","billing_hard_limit_reached","quota_exceeded"]);function s(v){let I=d(v.body),h=Ct(()=>{if(!I)return;let x=I.error;return x&&typeof x=="object"?x:I}),S=typeof h?.type=="string"?h.type:"",C=typeof h?.code=="string"?h.code:"",l=typeof h?.message=="string"?h.message:v.message??"",P=typeof h?.resets_at=="number"?h.resets_at:void 0,y=typeof h?.resets_in_seconds=="number"?h.resets_in_seconds:void 0,D=typeof h?.plan_type=="string"?h.plan_type:void 0,T=b.has(S)||b.has(C),R=v.statusCode===429||v.statusCode===402,_=/usage limit|quota/i.test(l),E=(y??0)>600||P!==void 0&&P*1e3-Date.now()>6e5;if(T||R&&(_||E))return{message:l||"Provider usage limit reached",planType:D,resetsAt:P??(y!==void 0?Math.round(Date.now()/1e3)+y:void 0)}}f.quotaExhaustion=s,n(s,"quotaExhaustion");function p(v){let I=d(v),h=typeof I?.message=="string"?d(I.message)??I:I;if(!h)return;let S=JSON.stringify(h);if(h.type!=="error")return;switch(h?.error?.code){case"context_length_exceeded":return{type:"context_overflow",message:"Input exceeds context window of this model",responseBody:S};case"insufficient_quota":return{type:"quota",message:"Quota exceeded. Check your plan and billing details.",responseBody:S};case"usage_not_included":return{type:"api_error",message:"To use Codex with your ChatGPT plan, upgrade to Plus: https://chatgpt.com/explore/plus.",isRetryable:!1,responseBody:S};case"invalid_prompt":return{type:"api_error",message:typeof h?.error?.message=="string"?h?.error?.message:"Invalid prompt.",isRetryable:!1,responseBody:S};case"server_error":return{type:"api_error",message:typeof h?.error?.message=="string"?h?.error?.message:"Server error.",isRetryable:!0,responseBody:S};case f.RESPONSE_INCOMPLETE_CODE:return{type:"unknown",message:typeof h?.error?.message=="string"?h?.error?.message:"The response failed.",responseBody:S}}let C=s({body:h});if(C)return{type:"quota",message:C.message,planType:C.planType,resetsAt:C.resetsAt,responseBody:S};if(h?.error?.type===f.RESPONSE_FAILED_CODE){let l=typeof h.error.code=="string"?h.error.code:"";return{type:"api_error",message:typeof h.error.message=="string"&&h.error.message?h.error.message:"The response failed.",isRetryable:!/invalid|policy/i.test(l),responseBody:S}}}f.parseStreamError=p,n(p,"parseStreamError");function w(v){let I=a(v.providerID,v.error),h=d(v.error.responseBody);if(c(I)||v.error.statusCode===413||h?.error?.code==="context_length_exceeded")return{type:"context_overflow",message:I,responseBody:v.error.responseBody};let S=s({statusCode:v.error.statusCode,body:h,message:I});if(S)return{type:"quota",message:S.message,statusCode:v.error.statusCode,planType:S.planType,resetsAt:S.resetsAt,responseBody:v.error.responseBody};let C=v.error.url?{url:v.error.url}:void 0;return{type:"api_error",message:I,statusCode:v.error.statusCode,isRetryable:v.providerID.startsWith("openai")?m(v.error):v.error.isRetryable,responseHeaders:v.error.responseHeaders,responseBody:v.error.responseBody,metadata:C}}f.parseAPICallError=w,n(w,"parseAPICallError")})(Nn||={});import{Schema as is}from"effect";import as from"zod";var Qu=is.String.pipe(is.brand("ProviderID")),rt=Qu.pipe(Hn(t=>({make:n(e=>t.makeUnsafe(e),"make"),zod:as.string().pipe(as.custom()),opencode:t.makeUnsafe("opencode"),anthropic:t.makeUnsafe("anthropic"),openai:t.makeUnsafe("openai"),google:t.makeUnsafe("google"),googleVertex:t.makeUnsafe("google-vertex"),githubCopilot:t.makeUnsafe("github-copilot"),amazonBedrock:t.makeUnsafe("amazon-bedrock"),azure:t.makeUnsafe("azure"),openrouter:t.makeUnsafe("openrouter"),mistral:t.makeUnsafe("mistral"),gitlab:t.makeUnsafe("gitlab")}))),ep=is.String.pipe(is.brand("ModelID")),Et=ep.pipe(Hn(t=>({make:n(e=>t.makeUnsafe(e),"make"),zod:as.string().pipe(as.custom())})));import{Effect as ls}from"effect";var Ne;(J=>{function t(X){return X.startsWith("image/")||X==="application/pdf"}J.isMedia=t,n(t,"isMedia"),J.OutputLengthError=tt.create("MessageOutputLengthError",U.object({})),J.AbortedError=tt.create("MessageAbortedError",U.object({message:U.string()})),J.StructuredOutputError=tt.create("StructuredOutputError",U.object({message:U.string(),retries:U.number()})),J.AuthError=tt.create("ProviderAuthError",U.object({providerID:U.string(),message:U.string()})),J.ProviderQuotaError=tt.create("ProviderQuotaError",U.object({providerID:U.string(),message:U.string(),planType:U.string().optional(),resetsAt:U.number().optional(),statusCode:U.number().optional(),responseBody:U.string().optional()})),J.APIError=tt.create("APIError",U.object({message:U.string(),statusCode:U.number().optional(),isRetryable:U.boolean(),responseHeaders:U.record(U.string(),U.string()).optional(),responseBody:U.string().optional(),metadata:U.record(U.string(),U.string()).optional()})),J.ContextOverflowError=tt.create("ContextOverflowError",U.object({message:U.string(),responseBody:U.string().optional()})),J.OutputFormatText=U.object({type:U.literal("text")}).meta({ref:"OutputFormatText"}),J.OutputFormatJsonSchema=U.object({type:U.literal("json_schema"),schema:U.record(U.string(),U.any()).meta({ref:"JSONSchema"}),retryCount:U.number().int().min(0).default(2)}).meta({ref:"OutputFormatJsonSchema"}),J.Format=U.discriminatedUnion("type",[J.OutputFormatText,J.OutputFormatJsonSchema]).meta({ref:"OutputFormat"});let w=U.object({id:nt.zod,sessionID:Ee.zod,messageID:Ve.zod});J.SnapshotPart=w.extend({type:U.literal("snapshot"),snapshot:U.string()}).meta({ref:"SnapshotPart"}),J.PatchPart=w.extend({type:U.literal("patch"),hash:U.string(),files:U.string().array()}).meta({ref:"PatchPart"}),J.TextPart=w.extend({type:U.literal("text"),text:U.string(),synthetic:U.boolean().optional(),ignored:U.boolean().optional(),time:U.object({start:U.number(),end:U.number().optional()}).optional(),metadata:U.record(U.string(),U.any()).optional()}).meta({ref:"TextPart"}),J.ReasoningPart=w.extend({type:U.literal("reasoning"),text:U.string(),metadata:U.record(U.string(),U.any()).optional(),time:U.object({start:U.number(),end:U.number().optional()})}).meta({ref:"ReasoningPart"});let S=U.object({text:U.object({value:U.string(),start:U.number().int(),end:U.number().int()}).meta({ref:"FilePartSourceText"})});J.FileSource=S.extend({type:U.literal("file"),path:U.string()}).meta({ref:"FileSource"}),J.SymbolSource=S.extend({type:U.literal("symbol"),path:U.string(),range:ct.Range,name:U.string(),kind:U.number().int()}).meta({ref:"SymbolSource"}),J.ResourceSource=S.extend({type:U.literal("resource"),clientName:U.string(),uri:U.string()}).meta({ref:"ResourceSource"}),J.FilePartSource=U.discriminatedUnion("type",[J.FileSource,J.SymbolSource,J.ResourceSource]).meta({ref:"FilePartSource"}),J.FilePart=w.extend({type:U.literal("file"),mime:U.string(),filename:U.string().optional(),url:U.string(),source:J.FilePartSource.optional()}).meta({ref:"FilePart"}),J.AgentPart=w.extend({type:U.literal("agent"),name:U.string(),source:U.object({value:U.string(),start:U.number().int(),end:U.number().int()}).optional()}).meta({ref:"AgentPart"}),J.CompactionPart=w.extend({type:U.literal("compaction"),auto:U.boolean(),overflow:U.boolean().optional()}).meta({ref:"CompactionPart"}),J.SubtaskPart=w.extend({type:U.literal("subtask"),prompt:U.string(),description:U.string(),agent:U.string(),model:U.object({providerID:rt.zod,modelID:Et.zod}).optional(),command:U.string().optional()}).meta({ref:"SubtaskPart"}),J.RetryPart=w.extend({type:U.literal("retry"),attempt:U.number(),error:J.APIError.Schema,time:U.object({created:U.number()})}).meta({ref:"RetryPart"}),J.StepStartPart=w.extend({type:U.literal("step-start"),snapshot:U.string().optional()}).meta({ref:"StepStartPart"}),J.StepFinishPart=w.extend({type:U.literal("step-finish"),reason:U.string(),snapshot:U.string().optional(),cost:U.number(),tokens:U.object({total:U.number().optional(),input:U.number(),output:U.number(),reasoning:U.number(),cache:U.object({read:U.number(),write:U.number()})})}).meta({ref:"StepFinishPart"}),J.ToolStatePending=U.object({status:U.literal("pending"),input:U.record(U.string(),U.any()),raw:U.string()}).meta({ref:"ToolStatePending"}),J.ToolStateRunning=U.object({status:U.literal("running"),input:U.record(U.string(),U.any()),title:U.string().optional(),metadata:U.record(U.string(),U.any()).optional(),time:U.object({start:U.number()})}).meta({ref:"ToolStateRunning"}),J.ToolStateCompleted=U.object({status:U.literal("completed"),input:U.record(U.string(),U.any()),output:U.string(),title:U.string(),metadata:U.record(U.string(),U.any()),time:U.object({start:U.number(),end:U.number(),compacted:U.number().optional()}),attachments:J.FilePart.array().optional()}).meta({ref:"ToolStateCompleted"}),J.ToolStateError=U.object({status:U.literal("error"),input:U.record(U.string(),U.any()),error:U.string(),metadata:U.record(U.string(),U.any()).optional(),time:U.object({start:U.number(),end:U.number()})}).meta({ref:"ToolStateError"}),J.ToolState=U.discriminatedUnion("status",[J.ToolStatePending,J.ToolStateRunning,J.ToolStateCompleted,J.ToolStateError]).meta({ref:"ToolState"}),J.ToolPart=w.extend({type:U.literal("tool"),callID:U.string(),tool:U.string(),state:J.ToolState,metadata:U.record(U.string(),U.any()).optional()}).meta({ref:"ToolPart"});let z=U.object({id:Ve.zod,sessionID:Ee.zod});J.User=z.extend({role:U.literal("user"),time:U.object({created:U.number()}),format:J.Format.optional(),summary:U.object({title:U.string().optional(),body:U.string().optional(),diffs:cn.FileDiff.array()}).optional(),agent:U.string(),model:U.object({providerID:rt.zod,modelID:Et.zod}),system:U.string().optional(),tools:U.record(U.string(),U.boolean()).optional(),variant:U.string().optional()}).meta({ref:"UserMessage"}),J.Part=U.discriminatedUnion("type",[J.TextPart,J.SubtaskPart,J.ReasoningPart,J.FilePart,J.ToolPart,J.StepStartPart,J.StepFinishPart,J.SnapshotPart,J.PatchPart,J.AgentPart,J.RetryPart,J.CompactionPart]).meta({ref:"Part"}),J.Assistant=z.extend({role:U.literal("assistant"),time:U.object({created:U.number(),completed:U.number().optional()}),error:U.discriminatedUnion("name",[J.AuthError.Schema,J.ProviderQuotaError.Schema,tt.Unknown.Schema,J.OutputLengthError.Schema,J.AbortedError.Schema,J.StructuredOutputError.Schema,J.ContextOverflowError.Schema,J.APIError.Schema]).optional(),parentID:Ve.zod,modelID:Et.zod,providerID:rt.zod,servedModelID:U.string().optional(),mode:U.string(),agent:U.string(),path:U.object({cwd:U.string(),root:U.string()}),summary:U.boolean().optional(),aside:U.boolean().optional(),cost:U.number(),tokens:U.object({total:U.number().optional(),input:U.number(),output:U.number(),reasoning:U.number(),cache:U.object({read:U.number(),write:U.number()})}),structured:U.any().optional(),variant:U.string().optional(),finish:U.string().optional()}).meta({ref:"AssistantMessage"}),J.Info=U.discriminatedUnion("role",[J.User,J.Assistant]).meta({ref:"Message"}),J.Event={Updated:Nt.define({type:"message.updated",version:1,aggregate:"sessionID",schema:U.object({sessionID:Ee.zod,info:J.Info})}),Removed:Nt.define({type:"message.removed",version:1,aggregate:"sessionID",schema:U.object({sessionID:Ee.zod,messageID:Ve.zod})}),PartUpdated:Nt.define({type:"message.part.updated",version:1,aggregate:"sessionID",schema:U.object({sessionID:Ee.zod,part:J.Part,time:U.number()})}),PartDelta:ht.define("message.part.delta",U.object({sessionID:Ee.zod,messageID:Ve.zod,partID:nt.zod,field:U.string(),delta:U.string()})),PartRemoved:Nt.define({type:"message.part.removed",version:1,aggregate:"sessionID",schema:U.object({sessionID:Ee.zod,messageID:Ve.zod,partID:nt.zod})})},J.WithParts=U.object({info:J.Info,parts:U.array(J.Part)});let Z=U.object({id:Ve.zod,time:U.number()});J.cursor={encode(X){return Buffer.from(JSON.stringify(X)).toString("base64url")},decode(X){return Z.parse(JSON.parse(Buffer.from(X,"base64url").toString("utf8")))}};let ge=n(X=>({...X.data,id:X.id,sessionID:X.session_id}),"info"),Y=n(X=>({...X.data,id:X.id,sessionID:X.session_id,messageID:X.message_id}),"part"),N=n(X=>(0,ke.or)((0,ke.lt)(En.time_created,X.time),(0,ke.and)((0,ke.eq)(En.time_created,X.time),(0,ke.lt)(En.id,X.id))),"older");function q(X){let xe=X.map(ue=>ue.id),de=new Map;if(xe.length>0){let ue=Ft.use(Qe=>Qe.select().from(ro).where((0,ke.inArray)(ro.message_id,xe)).orderBy(ro.message_id,ro.id).all());for(let Qe of ue){let dt=Y(Qe),xt=de.get(Qe.message_id);xt?xt.push(dt):de.set(Qe.message_id,[dt])}}return X.map(ue=>({info:ge(ue),parts:de.get(ue.id)??[]}))}n(q,"hydrate"),J.toModelMessagesEffect=ls.fnUntraced(function*(X,xe,de){let ue=[],Qe=new Set,dt=(()=>{if(xe.api.npm==="@ai-sdk/anthropic"||xe.api.npm==="@ai-sdk/openai"||xe.api.npm==="@ai-sdk/amazon-bedrock"||xe.api.npm==="@ai-sdk/google-vertex/anthropic")return!0;if(xe.api.npm==="@ai-sdk/google"){let ye=xe.api.id.toLowerCase();return ye.includes("gemini-3")&&!ye.includes("gemini-2")}return!1})(),xt=n(ye=>{let O=ye.output;if(typeof O=="string")return{type:"text",value:O};if(typeof O=="object"){let W=O,K=(W.attachments??[]).filter(B=>B.url.startsWith("data:")&&B.url.includes(","));return{type:"content",value:[...W.text?[{type:"text",text:W.text}]:[],...K.map(B=>({type:"media",mediaType:B.mime,data:Ct(()=>{let re=B.url.indexOf(",");return re===-1?B.url:B.url.slice(re+1)})}))]}}return{type:"json",value:O}},"toModelOutput");for(let ye of X)if(ye.parts.length!==0){if(ye.info.role==="user"){let O={id:ye.info.id,role:"user",parts:[]};ue.push(O);for(let W of ye.parts)W.type==="text"&&!W.ignored&&O.parts.push({type:"text",text:W.text}),W.type==="file"&&W.mime!=="text/plain"&&W.mime!=="application/x-directory"&&(de?.stripMedia&&t(W.mime)?O.parts.push({type:"text",text:`[Attached ${W.mime}: ${W.filename??"file"}]`}):O.parts.push({type:"file",url:W.url,mediaType:W.mime,filename:W.filename})),W.type==="compaction"&&O.parts.push({type:"text",text:"What did we do so far?"}),W.type==="subtask"&&O.parts.push({type:"text",text:"The following tool was executed by the user"})}if(ye.info.role==="assistant"){let O=`${xe.providerID}/${xe.id}`!=`${ye.info.providerID}/${ye.info.modelID}`,W=[];if(ye.info.error&&!(J.AbortedError.isInstance(ye.info.error)&&ye.parts.some(B=>B.type!=="step-start"&&B.type!=="reasoning")))continue;if(ye.info.aside){let B=ye.parts.filter(re=>re.type==="text"&&!re.ignored).map(re=>re.text.trim()).filter(Boolean).join(`
35
- `);B&&ue.push({id:ye.info.id,role:"user",parts:[{type:"text",text:`[While a tool was running you already answered the user's message above: "${B}". Do not answer it again; carry on with your work.]`}]});continue}let K={id:ye.info.id,role:"assistant",parts:[]};for(let B of ye.parts){if(B.type==="text"&&K.parts.push({type:"text",text:B.text,...O?{}:{providerMetadata:B.metadata}}),B.type==="step-start"&&K.parts.push({type:"step-start"}),B.type==="tool"){if(Qe.add(B.tool),B.state.status==="completed"){let re=B.state.time.compacted?"[Old tool result content cleared]":B.state.output,ve=B.state.time.compacted||de?.stripMedia?[]:B.state.attachments??[],$=ve.filter($e=>t($e.mime)),_e=ve.filter($e=>!t($e.mime));!dt&&$.length>0&&W.push(...$);let De=dt?ve:_e,He=De.length>0?{text:re,attachments:De}:re;K.parts.push({type:"tool-"+B.tool,state:"output-available",toolCallId:B.callID,input:B.state.input,output:He,...O?{}:{callProviderMetadata:B.metadata}})}B.state.status==="error"&&K.parts.push({type:"tool-"+B.tool,state:"output-error",toolCallId:B.callID,input:B.state.input,errorText:B.state.error,...O?{}:{callProviderMetadata:B.metadata}}),(B.state.status==="pending"||B.state.status==="running")&&K.parts.push({type:"tool-"+B.tool,state:"output-error",toolCallId:B.callID,input:B.state.input,errorText:de?.runningToolNote??"[Tool execution was interrupted]",...O?{}:{callProviderMetadata:B.metadata}})}B.type==="reasoning"&&K.parts.push({type:"reasoning",text:B.text,...O?{}:{providerMetadata:B.metadata}})}K.parts.length>0&&(ue.push(K),W.length>0&&ue.push({id:Ve.ascending(),role:"user",parts:[{type:"text",text:"Attached image(s) from tool result:"},...W.map(B=>({type:"file",url:B.url,mediaType:B.mime}))]}))}}let Oe=Object.fromEntries(Array.from(Qe).map(ye=>[ye,{toModelOutput:xt}]));return yield*ls.promise(()=>np(ue.filter(ye=>ye.parts.some(O=>O.type!=="step-start")),{tools:Oe}))});function ce(X,xe,de){return ls.runPromise((0,J.toModelMessagesEffect)(X,xe,de))}J.toModelMessages=ce,n(ce,"toModelMessages");function Q(X){let xe=X.before?J.cursor.decode(X.before):void 0,de=xe?(0,ke.and)((0,ke.eq)(En.session_id,X.sessionID),N(xe)):(0,ke.eq)(En.session_id,X.sessionID),ue=Ft.use(ye=>ye.select().from(En).where(de).orderBy((0,ke.desc)(En.time_created),(0,ke.desc)(En.id)).limit(X.limit+1).all());if(ue.length===0){if(!Ft.use(O=>O.select({id:It.id}).from(It).where((0,ke.eq)(It.id,X.sessionID)).get()))throw new Do({message:`Session not found: ${X.sessionID}`});return{items:[],more:!1}}let Qe=ue.length>X.limit,dt=Qe?ue.slice(0,X.limit):ue,xt=q(dt);xt.reverse();let Oe=dt.at(-1);return{items:xt,more:Qe,cursor:Qe&&Oe?J.cursor.encode({id:Oe.id,time:Oe.time_created}):void 0}}J.page=Q,n(Q,"page");function*ie(X){let de;for(;;){let ue=Q({sessionID:X,limit:50,before:de});if(ue.items.length===0)break;for(let Qe=ue.items.length-1;Qe>=0;Qe--)yield ue.items[Qe];if(!ue.more||!ue.cursor)break;de=ue.cursor}}J.stream=ie,n(ie,"stream");function me(X){return Ft.use(de=>de.select().from(ro).where((0,ke.eq)(ro.message_id,X)).orderBy(ro.id).all()).map(de=>({...de.data,id:de.id,sessionID:de.session_id,messageID:de.message_id}))}J.parts=me,n(me,"parts");function le(X){let xe=Ft.use(de=>de.select().from(En).where((0,ke.and)((0,ke.eq)(En.id,X.messageID),(0,ke.eq)(En.session_id,X.sessionID))).get());if(!xe)throw new Do({message:`Message not found: ${X.messageID}`});return{info:ge(xe),parts:me(X.messageID)}}J.get=le,n(le,"get");function we(X){let xe=[],de=new Set;for(let ue of X){if(xe.push(ue),ue.info.role==="user"&&de.has(ue.info.id)&&ue.parts.some(Qe=>Qe.type==="compaction"))break;ue.info.role==="assistant"&&ue.info.summary&&ue.info.finish&&!ue.info.error&&de.add(ue.info.parentID)}return xe.reverse(),xe}J.filterCompacted=we,n(we,"filterCompacted"),J.filterCompactedEffect=ls.fnUntraced(function*(X){return we(ie(X))});function fe(X,xe){switch(!0){case(X instanceof DOMException&&X.name==="AbortError"):return new J.AbortedError({message:X.message},{cause:X}).toObject();case J.OutputLengthError.isInstance(X):return X;case op.isInstance(X):return new J.AuthError({providerID:xe.providerID,message:X.message},{cause:X}).toObject();case el(X)!==void 0:{let ue=el(X);return new J.APIError({message:"Connection reset by server",isRetryable:!0,metadata:{code:ue.code??"",syscall:ue.syscall??"",message:ue.message??""}},{cause:X}).toObject()}case(X instanceof TypeError&&X.message==="terminated"):{if(xe.aborted)return new J.AbortedError({message:X.message},{cause:X}).toObject();let ue=X.cause;return new J.APIError({message:"Connection closed by server",isRetryable:!0,metadata:{code:typeof ue?.code=="string"?ue.code:"",message:typeof ue?.message=="string"?ue.message:""}},{cause:X}).toObject()}case(X instanceof Error&&X.code==="ZlibError"):return xe.aborted?new J.AbortedError({message:X.message},{cause:X}).toObject():new J.APIError({message:"Response decompression failed",isRetryable:!0,metadata:{code:X.code,message:X.message}},{cause:X}).toObject();case X instanceof Nn.ResponseStreamError:return new J.APIError({message:X.message,isRetryable:!0,metadata:{code:X.name}},{cause:X}).toObject();case tp.isInstance(X):let de=Nn.parseAPICallError({providerID:xe.providerID,error:X});return de.type==="context_overflow"?new J.ContextOverflowError({message:de.message,responseBody:de.responseBody},{cause:X}).toObject():de.type==="quota"?new J.ProviderQuotaError({providerID:xe.providerID,message:de.message,planType:de.planType,resetsAt:de.resetsAt,statusCode:de.statusCode,responseBody:de.responseBody},{cause:X}).toObject():new J.APIError({message:de.message,statusCode:de.statusCode,isRetryable:de.isRetryable,responseHeaders:de.responseHeaders,responseBody:de.responseBody,metadata:de.metadata},{cause:X}).toObject();case X instanceof Error:return new tt.Unknown({message:ao(X)},{cause:X}).toObject();default:try{let ue=Nn.parseStreamError(X);if(ue)return ue.type==="context_overflow"?new J.ContextOverflowError({message:ue.message,responseBody:ue.responseBody},{cause:X}).toObject():ue.type==="quota"?new J.ProviderQuotaError({providerID:xe.providerID,message:ue.message,planType:ue.planType,resetsAt:ue.resetsAt,responseBody:ue.responseBody},{cause:X}).toObject():ue.type==="unknown"?new tt.Unknown({message:ue.message},{cause:X}).toObject():new J.APIError({message:ue.message,isRetryable:ue.isRetryable,responseBody:ue.responseBody},{cause:X}).toObject()}catch{}return new tt.Unknown({message:JSON.stringify(X)},{cause:X}).toObject()}}J.fromError=fe,n(fe,"fromError")})(Ne||={});function el(t){let e=t;for(let o=0;o<4&&e;o++){if(e?.code==="ECONNRESET")return e;e=e?.cause}}n(el,"connectionResetError");import Ur from"path";import _h from"os";import Ot from"zod";import ip from"zod";import{Effect as uo,Layer as Ro,ServiceMap as ap}from"effect";import rp from"zod";import{Effect as Yn,Layer as Xo,ServiceMap as sp}from"effect";var co;(b=>{function t(s){if(!s.startsWith('"')||!s.endsWith('"'))return s;let p=s.slice(1,-1),w=[];for(let f=0;f<p.length;f++){let v=p[f];if(v!=="\\"){w.push(v.charCodeAt(0));continue}let I=p[f+1];if(!I){w.push(92);continue}if(I>="0"&&I<="7"){let C=p.slice(f+1,f+4).match(/^[0-7]{1,3}/);if(!C){w.push(I.charCodeAt(0)),f++;continue}w.push(parseInt(C[0],8)),f+=C[0].length;continue}let h=I==="n"?`
36
- `:I==="r"?"\r":I==="t"?" ":I==="b"?"\b":I==="f"?"\f":I==="v"?"\v":I==="\\"||I==='"'?I:void 0;w.push((h??I).charCodeAt(0)),f++}return Buffer.from(w).toString()}n(t,"unquoteGitPath");class e extends sp.Service()("@opencode/SessionSummary"){static{n(this,"Service")}}b.Service=e,b.layer=Xo.effect(e,Yn.gen(function*(){let s=yield*Ke.Service,p=yield*cn.Service,w=yield*Vn.Service,f=yield*Me.Service,v=Yn.fn("SessionSummary.computeDiff")(function*(S){let C,l;for(let P of S.messages){if(!C){for(let y of P.parts)if(y.type==="step-start"&&y.snapshot){C=y.snapshot;break}}for(let y of P.parts)y.type==="step-finish"&&y.snapshot&&(l=y.snapshot)}return C&&l?yield*p.diffFull(C,l):[]}),I=Yn.fn("SessionSummary.summarize")(function*(S){let C=yield*s.messages({sessionID:S.sessionID});if(!C.length)return;let l=yield*v({messages:C});yield*s.setSummary({sessionID:S.sessionID,summary:{additions:l.reduce((T,R)=>T+R.additions,0),deletions:l.reduce((T,R)=>T+R.deletions,0),files:l.length}}),yield*w.write(["session_diff",S.sessionID],l).pipe(Yn.ignore),yield*f.publish(Ke.Event.Diff,{sessionID:S.sessionID,diff:l});let P=C.filter(T=>T.info.id===S.messageID||T.info.role==="assistant"&&T.info.parentID===S.messageID),y=P.find(T=>T.info.id===S.messageID);if(!y||y.info.role!=="user")return;let D=yield*v({messages:P});y.info.summary={...y.info.summary,diffs:D},yield*s.updateMessage(y.info)}),h=Yn.fn("SessionSummary.diff")(function*(S){let C=yield*w.read(["session_diff",S.sessionID]).pipe(Yn.catch(()=>Yn.succeed([]))),l=C.map(y=>{let D=t(y.file);return D===y.file?y:{...y,file:D}});return l.some((y,D)=>y.file!==C[D]?.file)&&(yield*w.write(["session_diff",S.sessionID],l).pipe(Yn.ignore)),l});return e.of({summarize:I,diff:h,computeDiff:v})})),b.defaultLayer=Xo.unwrap(Yn.sync(()=>b.layer.pipe(Xo.provide(Ke.defaultLayer),Xo.provide(cn.defaultLayer),Xo.provide(Vn.defaultLayer),Xo.provide(Me.layer))));let{runPromise:m}=qe(e,b.defaultLayer);b.summarize=n(s=>{m(p=>p.summarize(s)).catch(()=>{})},"summarize"),b.DiffInput=rp.object({sessionID:Ee.zod,messageID:Ve.zod.optional()});async function d(s){return m(p=>p.diff(s))}b.diff=d,n(d,"diff")})(co||={});var cs;(s=>{let t=Ae.create({service:"session.revert"});s.RevertInput=ip.object({sessionID:Ee.zod,messageID:Ve.zod,partID:nt.zod.optional()});class o extends ap.Service()("@opencode/SessionRevert"){static{n(this,"Service")}}s.Service=o,s.layer=Ro.effect(o,uo.gen(function*(){let p=yield*Ke.Service,w=yield*cn.Service,f=yield*Vn.Service,v=yield*Me.Service,I=yield*co.Service,h=uo.fn("SessionRevert.revert")(function*(l){yield*uo.promise(()=>Fn.assertNotBusy(l.sessionID));let P=yield*p.messages({sessionID:l.sessionID}),y,D=yield*p.get(l.sessionID),T,R=[];for(let x of P){x.info.role==="user"&&(y=x.info);let k=[];for(let M of x.parts){if(T){M.type==="patch"&&R.push(M);continue}if(!T){if(x.info.id===l.messageID&&!l.partID||M.id===l.partID){let r=k.some(u=>["text","tool"].includes(u.type))?l.partID:void 0;T={messageID:!r&&y?y.id:x.info.id,partID:r}}k.push(M)}}}if(!T)return D;T.snapshot=D.revert?.snapshot??(yield*w.track()),D.revert?.snapshot&&(yield*w.restore(D.revert.snapshot)),yield*w.revert(R),T.snapshot&&(T.diff=yield*w.diff(T.snapshot));let _=P.filter(x=>vt.compareAscending(x.info.id,T.messageID)>=0),E=yield*I.computeDiff({messages:_});return yield*f.write(["session_diff",l.sessionID],E).pipe(uo.ignore),yield*v.publish(Ke.Event.Diff,{sessionID:l.sessionID,diff:E}),yield*p.setRevert({sessionID:l.sessionID,revert:T,summary:{additions:E.reduce((x,k)=>x+k.additions,0),deletions:E.reduce((x,k)=>x+k.deletions,0),files:E.length}}),yield*p.get(l.sessionID)}),S=uo.fn("SessionRevert.unrevert")(function*(l){t.info("unreverting",l),yield*uo.promise(()=>Fn.assertNotBusy(l.sessionID));let P=yield*p.get(l.sessionID);return P.revert?(P.revert.snapshot&&(yield*w.restore(P.revert.snapshot)),yield*p.clearRevert(l.sessionID),yield*p.get(l.sessionID)):P}),C=uo.fn("SessionRevert.cleanup")(function*(l){if(!l.revert)return;let P=l.id,y=yield*p.messages({sessionID:P}),D=l.revert.messageID,T=[],R;for(let _ of y)if(!(vt.compareAscending(_.info.id,D)<0)){if(vt.compareAscending(_.info.id,D)>0){T.push(_);continue}if(l.revert.partID){R=_;continue}T.push(_)}for(let _ of T)Nt.run(Ne.Event.Removed,{sessionID:P,messageID:_.info.id});if(l.revert.partID&&R){let _=l.revert.partID,E=R.parts.findIndex(x=>x.id===_);if(E>=0){let x=R.parts.slice(E);R.parts=R.parts.slice(0,E);for(let k of x)Nt.run(Ne.Event.PartRemoved,{sessionID:P,messageID:R.info.id,partID:k.id})}}yield*p.clearRevert(P)});return o.of({revert:h,unrevert:S,cleanup:C})})),s.defaultLayer=Ro.unwrap(uo.sync(()=>s.layer.pipe(Ro.provide(Ke.defaultLayer),Ro.provide(cn.defaultLayer),Ro.provide(Vn.defaultLayer),Ro.provide(Me.layer),Ro.provide(co.defaultLayer))));let{runPromise:c}=qe(o,s.defaultLayer);async function a(p){return c(w=>w.revert(p))}s.revert=a,n(a,"revert");async function d(p){return c(w=>w.unrevert(p))}s.unrevert=d,n(d,"unrevert");async function b(p){return c(w=>w.cleanup(p))}s.cleanup=b,n(b,"cleanup")})(cs||={});import Vt from"zod";import Ie from"zod";import Kn from"os";import rc from"fuzzysort";import{mapValues as Qo,mergeDeep as Ao,omit as sc,pickBy as ic,sortBy as tm}from"remeda";import{NoSuchModelError as nm}from"ai";var tl=n(({onSseError:t,onSseEvent:e,responseTransformer:o,responseValidator:i,sseDefaultRetryDelay:m,sseMaxRetryAttempts:c,sseMaxRetryDelay:a,sseSleepFn:d,url:b,...s})=>{let p,w=d??(I=>new Promise(h=>setTimeout(h,I)));return{stream:n(async function*(){let I=m??3e3,h=0,S=s.signal??new AbortController().signal;for(;!S.aborted;){h++;let C=s.headers instanceof Headers?s.headers:new Headers(s.headers);p!==void 0&&C.set("Last-Event-ID",p);try{let l=await fetch(b,{...s,headers:C,signal:S});if(!l.ok)throw new Error(`SSE failed: ${l.status} ${l.statusText}`);if(!l.body)throw new Error("No body in SSE response");let P=l.body.pipeThrough(new TextDecoderStream).getReader(),y="",D=n(()=>{try{P.cancel()}catch{}},"abortHandler");S.addEventListener("abort",D);try{for(;;){let{done:T,value:R}=await P.read();if(T)break;y+=R;let _=y.split(`
34
+ `).filter(Boolean).flatMap(J=>{let[X,xe,de]=J.split(" ");if(!de)return[];let ue=X==="-"&&xe==="-",Qe=ue?0:parseInt(X),dt=ue?0:parseInt(xe);return[{file:de,status:me.get(de)??"modified",binary:ue,additions:Number.isFinite(Qe)?Qe:0,deletions:Number.isFinite(dt)?dt:0}]}),fe=100;for(let J=0;J<be.length;J+=fe){let X=be.slice(J,J+fe),xe=yield*Q(X);for(let de of X){let ue=xe?.get(de.file)??{before:"",after:""},[Qe,dt]=de.binary?["",""]:xe?[ue.before,ue.after]:yield*ce(de);ie.push({file:de.file,before:Qe,after:dt,additions:de.additions,deletions:de.deletions,status:de.status})}}return ie}))});return yield*ee().pipe(Pe.catchCause(q=>(o.error("cleanup loop failed",{cause:Ku.pretty(q)}),Pe.void)),Pe.repeat(Xu.spaced(Ka.hours(1))),Pe.delay(Ka.minutes(1)),Pe.forkScoped),{cleanup:ee,track:se,patch:F,restore:he,revert:ge,diff:Y,diffFull:N}}));return b.of({init:Pe.fn("Snapshot.init")(function*(){yield*ae.get(E)}),cleanup:Pe.fn("Snapshot.cleanup")(function*(){return yield*ae.useEffect(E,x=>x.cleanup())}),track:Pe.fn("Snapshot.track")(function*(){return yield*ae.useEffect(E,x=>x.track())}),patch:Pe.fn("Snapshot.patch")(function*(x){return yield*ae.useEffect(E,k=>k.patch(x))}),restore:Pe.fn("Snapshot.restore")(function*(x){return yield*ae.useEffect(E,k=>k.restore(x))}),revert:Pe.fn("Snapshot.revert")(function*(x){return yield*ae.useEffect(E,k=>k.revert(x))}),diff:Pe.fn("Snapshot.diff")(function*(x){return yield*ae.useEffect(E,k=>k.diff(x))}),diffFull:Pe.fn("Snapshot.diffFull")(function*(x,k){return yield*ae.useEffect(E,M=>M.diffFull(x,k))})})})),P.defaultLayer=P.layer.pipe(ss.provide(so),ss.provide(st.defaultLayer),ss.provide(Be.defaultLayer));let{runPromise:w}=qe(b,P.defaultLayer);async function f(){return w(y=>y.init())}P.init=f,n(f,"init");async function v(){return w(y=>y.track())}P.track=v,n(v,"track");async function I(y){return w(D=>D.patch(y))}P.patch=I,n(I,"patch");async function h(y){return w(D=>D.restore(y))}P.restore=h,n(h,"restore");async function S(y){return w(D=>D.revert(y))}P.revert=S,n(S,"revert");async function C(y){return w(D=>D.diff(y))}P.diff=C,n(C,"diff");async function l(y,D){return w(T=>T.diffFull(y,D))}P.diffFull=l,n(l,"diffFull")})(cn||={});import{STATUS_CODES as Qa}from"http";var Nn;(f=>{class t extends Error{static{n(this,"ResponseStreamError")}name="ProviderResponseStreamError"}f.ResponseStreamError=t,f.RESPONSE_INCOMPLETE_CODE="response_incomplete",f.RESPONSE_FAILED_CODE="response_failed";let i=[/prompt is too long/i,/input is too long for requested model/i,/exceeds the context window/i,/input token count.*exceeds the maximum/i,/maximum prompt length is \d+/i,/reduce the length of the messages/i,/maximum context length is \d+ tokens/i,/exceeds the limit of \d+/i,/exceeds the available context size/i,/greater than the context length/i,/context window exceeds limit/i,/exceeded model token limit/i,/context[_ ]length[_ ]exceeded/i,/request entity too large/i,/context length is only \d+ tokens/i,/input length.*exceeds.*context length/i,/prompt too long; exceeded (?:max )?context length/i,/too large for model with \d+ maximum context length/i,/model_context_window_exceeded/i];function m(v){let I=v.statusCode;return I&&I===404||v.isRetryable}n(m,"isOpenAiErrorRetryable");function c(v){return i.some(I=>I.test(v))?!0:/^4(00|13)\s*(status code)?\s*\(no body\)/i.test(v)}n(c,"isOverflow");function a(v,I){return Ct(()=>{let h=I.message;if(h===""){if(I.responseBody)return I.responseBody;if(I.statusCode){let S=Qa[I.statusCode];if(S)return S}return"Unknown error"}if(!I.responseBody||I.statusCode&&h!==Qa[I.statusCode])return h;try{let S=JSON.parse(I.responseBody),C=S.message||S.error||S.error?.message;if(C&&typeof C=="string")return`${h}: ${C}`}catch{}return/^\s*<!doctype|^\s*<html/i.test(I.responseBody)?I.statusCode===401?"Unauthorized: request was blocked by a gateway or proxy. Your authentication token may be missing or expired \u2014 try running `opencode auth login <your provider URL>` to re-authenticate.":I.statusCode===403?"Forbidden: request was blocked by a gateway or proxy. You may not have permission to access this resource \u2014 check your account and provider settings.":h:`${h}: ${I.responseBody}`}).trim()}n(a,"message");function d(v){if(typeof v=="string")try{let I=JSON.parse(v);return I&&typeof I=="object"?I:void 0}catch{return}if(typeof v=="object"&&v!==null)return v}n(d,"json");let b=new Set(["usage_limit_reached","insufficient_quota","billing_hard_limit_reached","quota_exceeded"]);function s(v){let I=d(v.body),h=Ct(()=>{if(!I)return;let x=I.error;return x&&typeof x=="object"?x:I}),S=typeof h?.type=="string"?h.type:"",C=typeof h?.code=="string"?h.code:"",l=typeof h?.message=="string"?h.message:v.message??"",P=typeof h?.resets_at=="number"?h.resets_at:void 0,y=typeof h?.resets_in_seconds=="number"?h.resets_in_seconds:void 0,D=typeof h?.plan_type=="string"?h.plan_type:void 0,T=b.has(S)||b.has(C),R=v.statusCode===429||v.statusCode===402,_=/usage limit|quota/i.test(l),E=(y??0)>600||P!==void 0&&P*1e3-Date.now()>6e5;if(T||R&&(_||E))return{message:l||"Provider usage limit reached",planType:D,resetsAt:P??(y!==void 0?Math.round(Date.now()/1e3)+y:void 0)}}f.quotaExhaustion=s,n(s,"quotaExhaustion");function p(v){let I=d(v),h=typeof I?.message=="string"?d(I.message)??I:I;if(!h)return;let S=JSON.stringify(h);if(h.type!=="error")return;switch(h?.error?.code){case"context_length_exceeded":return{type:"context_overflow",message:"Input exceeds context window of this model",responseBody:S};case"insufficient_quota":return{type:"quota",message:"Quota exceeded. Check your plan and billing details.",responseBody:S};case"usage_not_included":return{type:"api_error",message:"To use Codex with your ChatGPT plan, upgrade to Plus: https://chatgpt.com/explore/plus.",isRetryable:!1,responseBody:S};case"invalid_prompt":return{type:"api_error",message:typeof h?.error?.message=="string"?h?.error?.message:"Invalid prompt.",isRetryable:!1,responseBody:S};case"server_error":return{type:"api_error",message:typeof h?.error?.message=="string"?h?.error?.message:"Server error.",isRetryable:!0,responseBody:S};case f.RESPONSE_INCOMPLETE_CODE:return{type:"unknown",message:typeof h?.error?.message=="string"?h?.error?.message:"The response failed.",responseBody:S}}let C=s({body:h});if(C)return{type:"quota",message:C.message,planType:C.planType,resetsAt:C.resetsAt,responseBody:S};if(h?.error?.type===f.RESPONSE_FAILED_CODE){let l=typeof h.error.code=="string"?h.error.code:"";return{type:"api_error",message:typeof h.error.message=="string"&&h.error.message?h.error.message:"The response failed.",isRetryable:!/invalid|policy/i.test(l),responseBody:S}}}f.parseStreamError=p,n(p,"parseStreamError");function w(v){let I=a(v.providerID,v.error),h=d(v.error.responseBody);if(c(I)||v.error.statusCode===413||h?.error?.code==="context_length_exceeded")return{type:"context_overflow",message:I,responseBody:v.error.responseBody};let S=s({statusCode:v.error.statusCode,body:h,message:I});if(S)return{type:"quota",message:S.message,statusCode:v.error.statusCode,planType:S.planType,resetsAt:S.resetsAt,responseBody:v.error.responseBody};let C=v.error.url?{url:v.error.url}:void 0;return{type:"api_error",message:I,statusCode:v.error.statusCode,isRetryable:v.providerID.startsWith("openai")?m(v.error):v.error.isRetryable,responseHeaders:v.error.responseHeaders,responseBody:v.error.responseBody,metadata:C}}f.parseAPICallError=w,n(w,"parseAPICallError")})(Nn||={});import{Schema as is}from"effect";import as from"zod";var ep=is.String.pipe(is.brand("ProviderID")),rt=ep.pipe(Hn(t=>({make:n(e=>t.makeUnsafe(e),"make"),zod:as.string().pipe(as.custom()),opencode:t.makeUnsafe("opencode"),anthropic:t.makeUnsafe("anthropic"),openai:t.makeUnsafe("openai"),google:t.makeUnsafe("google"),googleVertex:t.makeUnsafe("google-vertex"),githubCopilot:t.makeUnsafe("github-copilot"),amazonBedrock:t.makeUnsafe("amazon-bedrock"),azure:t.makeUnsafe("azure"),openrouter:t.makeUnsafe("openrouter"),mistral:t.makeUnsafe("mistral"),gitlab:t.makeUnsafe("gitlab")}))),tp=is.String.pipe(is.brand("ModelID")),Et=tp.pipe(Hn(t=>({make:n(e=>t.makeUnsafe(e),"make"),zod:as.string().pipe(as.custom())})));import{Effect as ls}from"effect";var Ne;(J=>{function t(X){return X.startsWith("image/")||X==="application/pdf"}J.isMedia=t,n(t,"isMedia"),J.OutputLengthError=tt.create("MessageOutputLengthError",U.object({})),J.AbortedError=tt.create("MessageAbortedError",U.object({message:U.string()})),J.StructuredOutputError=tt.create("StructuredOutputError",U.object({message:U.string(),retries:U.number()})),J.AuthError=tt.create("ProviderAuthError",U.object({providerID:U.string(),message:U.string()})),J.ProviderQuotaError=tt.create("ProviderQuotaError",U.object({providerID:U.string(),message:U.string(),planType:U.string().optional(),resetsAt:U.number().optional(),statusCode:U.number().optional(),responseBody:U.string().optional()})),J.APIError=tt.create("APIError",U.object({message:U.string(),statusCode:U.number().optional(),isRetryable:U.boolean(),responseHeaders:U.record(U.string(),U.string()).optional(),responseBody:U.string().optional(),metadata:U.record(U.string(),U.string()).optional()})),J.ContextOverflowError=tt.create("ContextOverflowError",U.object({message:U.string(),responseBody:U.string().optional()})),J.OutputFormatText=U.object({type:U.literal("text")}).meta({ref:"OutputFormatText"}),J.OutputFormatJsonSchema=U.object({type:U.literal("json_schema"),schema:U.record(U.string(),U.any()).meta({ref:"JSONSchema"}),retryCount:U.number().int().min(0).default(2)}).meta({ref:"OutputFormatJsonSchema"}),J.Format=U.discriminatedUnion("type",[J.OutputFormatText,J.OutputFormatJsonSchema]).meta({ref:"OutputFormat"});let w=U.object({id:nt.zod,sessionID:Ee.zod,messageID:Ve.zod});J.SnapshotPart=w.extend({type:U.literal("snapshot"),snapshot:U.string()}).meta({ref:"SnapshotPart"}),J.PatchPart=w.extend({type:U.literal("patch"),hash:U.string(),files:U.string().array()}).meta({ref:"PatchPart"}),J.TextPart=w.extend({type:U.literal("text"),text:U.string(),synthetic:U.boolean().optional(),ignored:U.boolean().optional(),time:U.object({start:U.number(),end:U.number().optional()}).optional(),metadata:U.record(U.string(),U.any()).optional()}).meta({ref:"TextPart"}),J.ReasoningPart=w.extend({type:U.literal("reasoning"),text:U.string(),metadata:U.record(U.string(),U.any()).optional(),time:U.object({start:U.number(),end:U.number().optional()})}).meta({ref:"ReasoningPart"});let S=U.object({text:U.object({value:U.string(),start:U.number().int(),end:U.number().int()}).meta({ref:"FilePartSourceText"})});J.FileSource=S.extend({type:U.literal("file"),path:U.string()}).meta({ref:"FileSource"}),J.SymbolSource=S.extend({type:U.literal("symbol"),path:U.string(),range:ct.Range,name:U.string(),kind:U.number().int()}).meta({ref:"SymbolSource"}),J.ResourceSource=S.extend({type:U.literal("resource"),clientName:U.string(),uri:U.string()}).meta({ref:"ResourceSource"}),J.FilePartSource=U.discriminatedUnion("type",[J.FileSource,J.SymbolSource,J.ResourceSource]).meta({ref:"FilePartSource"}),J.FilePart=w.extend({type:U.literal("file"),mime:U.string(),filename:U.string().optional(),url:U.string(),source:J.FilePartSource.optional()}).meta({ref:"FilePart"}),J.AgentPart=w.extend({type:U.literal("agent"),name:U.string(),source:U.object({value:U.string(),start:U.number().int(),end:U.number().int()}).optional()}).meta({ref:"AgentPart"}),J.CompactionPart=w.extend({type:U.literal("compaction"),auto:U.boolean(),overflow:U.boolean().optional()}).meta({ref:"CompactionPart"}),J.SubtaskPart=w.extend({type:U.literal("subtask"),prompt:U.string(),description:U.string(),agent:U.string(),model:U.object({providerID:rt.zod,modelID:Et.zod}).optional(),command:U.string().optional()}).meta({ref:"SubtaskPart"}),J.RetryPart=w.extend({type:U.literal("retry"),attempt:U.number(),error:J.APIError.Schema,time:U.object({created:U.number()})}).meta({ref:"RetryPart"}),J.StepStartPart=w.extend({type:U.literal("step-start"),snapshot:U.string().optional()}).meta({ref:"StepStartPart"}),J.StepFinishPart=w.extend({type:U.literal("step-finish"),reason:U.string(),snapshot:U.string().optional(),cost:U.number(),tokens:U.object({total:U.number().optional(),input:U.number(),output:U.number(),reasoning:U.number(),cache:U.object({read:U.number(),write:U.number()})})}).meta({ref:"StepFinishPart"}),J.ToolStatePending=U.object({status:U.literal("pending"),input:U.record(U.string(),U.any()),raw:U.string()}).meta({ref:"ToolStatePending"}),J.ToolStateRunning=U.object({status:U.literal("running"),input:U.record(U.string(),U.any()),title:U.string().optional(),metadata:U.record(U.string(),U.any()).optional(),time:U.object({start:U.number()})}).meta({ref:"ToolStateRunning"}),J.ToolStateCompleted=U.object({status:U.literal("completed"),input:U.record(U.string(),U.any()),output:U.string(),title:U.string(),metadata:U.record(U.string(),U.any()),time:U.object({start:U.number(),end:U.number(),compacted:U.number().optional()}),attachments:J.FilePart.array().optional()}).meta({ref:"ToolStateCompleted"}),J.ToolStateError=U.object({status:U.literal("error"),input:U.record(U.string(),U.any()),error:U.string(),metadata:U.record(U.string(),U.any()).optional(),time:U.object({start:U.number(),end:U.number()})}).meta({ref:"ToolStateError"}),J.ToolState=U.discriminatedUnion("status",[J.ToolStatePending,J.ToolStateRunning,J.ToolStateCompleted,J.ToolStateError]).meta({ref:"ToolState"}),J.ToolPart=w.extend({type:U.literal("tool"),callID:U.string(),tool:U.string(),state:J.ToolState,metadata:U.record(U.string(),U.any()).optional()}).meta({ref:"ToolPart"});let z=U.object({id:Ve.zod,sessionID:Ee.zod});J.User=z.extend({role:U.literal("user"),time:U.object({created:U.number()}),format:J.Format.optional(),summary:U.object({title:U.string().optional(),body:U.string().optional(),diffs:cn.FileDiff.array()}).optional(),agent:U.string(),model:U.object({providerID:rt.zod,modelID:Et.zod}),system:U.string().optional(),tools:U.record(U.string(),U.boolean()).optional(),variant:U.string().optional()}).meta({ref:"UserMessage"}),J.Part=U.discriminatedUnion("type",[J.TextPart,J.SubtaskPart,J.ReasoningPart,J.FilePart,J.ToolPart,J.StepStartPart,J.StepFinishPart,J.SnapshotPart,J.PatchPart,J.AgentPart,J.RetryPart,J.CompactionPart]).meta({ref:"Part"}),J.Assistant=z.extend({role:U.literal("assistant"),time:U.object({created:U.number(),completed:U.number().optional()}),error:U.discriminatedUnion("name",[J.AuthError.Schema,J.ProviderQuotaError.Schema,tt.Unknown.Schema,J.OutputLengthError.Schema,J.AbortedError.Schema,J.StructuredOutputError.Schema,J.ContextOverflowError.Schema,J.APIError.Schema]).optional(),parentID:Ve.zod,modelID:Et.zod,providerID:rt.zod,servedModelID:U.string().optional(),mode:U.string(),agent:U.string(),path:U.object({cwd:U.string(),root:U.string()}),summary:U.boolean().optional(),aside:U.boolean().optional(),cost:U.number(),tokens:U.object({total:U.number().optional(),input:U.number(),output:U.number(),reasoning:U.number(),cache:U.object({read:U.number(),write:U.number()})}),structured:U.any().optional(),variant:U.string().optional(),finish:U.string().optional()}).meta({ref:"AssistantMessage"}),J.Info=U.discriminatedUnion("role",[J.User,J.Assistant]).meta({ref:"Message"}),J.Event={Updated:Nt.define({type:"message.updated",version:1,aggregate:"sessionID",schema:U.object({sessionID:Ee.zod,info:J.Info})}),Removed:Nt.define({type:"message.removed",version:1,aggregate:"sessionID",schema:U.object({sessionID:Ee.zod,messageID:Ve.zod})}),PartUpdated:Nt.define({type:"message.part.updated",version:1,aggregate:"sessionID",schema:U.object({sessionID:Ee.zod,part:J.Part,time:U.number()})}),PartDelta:ht.define("message.part.delta",U.object({sessionID:Ee.zod,messageID:Ve.zod,partID:nt.zod,field:U.string(),delta:U.string()})),PartRemoved:Nt.define({type:"message.part.removed",version:1,aggregate:"sessionID",schema:U.object({sessionID:Ee.zod,messageID:Ve.zod,partID:nt.zod})})},J.WithParts=U.object({info:J.Info,parts:U.array(J.Part)});let Z=U.object({id:Ve.zod,time:U.number()});J.cursor={encode(X){return Buffer.from(JSON.stringify(X)).toString("base64url")},decode(X){return Z.parse(JSON.parse(Buffer.from(X,"base64url").toString("utf8")))}};let ge=n(X=>({...X.data,id:X.id,sessionID:X.session_id}),"info"),Y=n(X=>({...X.data,id:X.id,sessionID:X.session_id,messageID:X.message_id}),"part"),N=n(X=>(0,ke.or)((0,ke.lt)(En.time_created,X.time),(0,ke.and)((0,ke.eq)(En.time_created,X.time),(0,ke.lt)(En.id,X.id))),"older");function q(X){let xe=X.map(ue=>ue.id),de=new Map;if(xe.length>0){let ue=Ft.use(Qe=>Qe.select().from(ro).where((0,ke.inArray)(ro.message_id,xe)).orderBy(ro.message_id,ro.id).all());for(let Qe of ue){let dt=Y(Qe),xt=de.get(Qe.message_id);xt?xt.push(dt):de.set(Qe.message_id,[dt])}}return X.map(ue=>({info:ge(ue),parts:de.get(ue.id)??[]}))}n(q,"hydrate"),J.toModelMessagesEffect=ls.fnUntraced(function*(X,xe,de){let ue=[],Qe=new Set,dt=(()=>{if(xe.api.npm==="@ai-sdk/anthropic"||xe.api.npm==="@ai-sdk/openai"||xe.api.npm==="@ai-sdk/amazon-bedrock"||xe.api.npm==="@ai-sdk/google-vertex/anthropic")return!0;if(xe.api.npm==="@ai-sdk/google"){let ye=xe.api.id.toLowerCase();return ye.includes("gemini-3")&&!ye.includes("gemini-2")}return!1})(),xt=n(ye=>{let O=ye.output;if(typeof O=="string")return{type:"text",value:O};if(typeof O=="object"){let W=O,K=(W.attachments??[]).filter(B=>B.url.startsWith("data:")&&B.url.includes(","));return{type:"content",value:[...W.text?[{type:"text",text:W.text}]:[],...K.map(B=>({type:"media",mediaType:B.mime,data:Ct(()=>{let re=B.url.indexOf(",");return re===-1?B.url:B.url.slice(re+1)})}))]}}return{type:"json",value:O}},"toModelOutput");for(let ye of X)if(ye.parts.length!==0){if(ye.info.role==="user"){let O={id:ye.info.id,role:"user",parts:[]};ue.push(O);for(let W of ye.parts)W.type==="text"&&!W.ignored&&O.parts.push({type:"text",text:W.text}),W.type==="file"&&W.mime!=="text/plain"&&W.mime!=="application/x-directory"&&(de?.stripMedia&&t(W.mime)?O.parts.push({type:"text",text:`[Attached ${W.mime}: ${W.filename??"file"}]`}):O.parts.push({type:"file",url:W.url,mediaType:W.mime,filename:W.filename})),W.type==="compaction"&&O.parts.push({type:"text",text:"What did we do so far?"}),W.type==="subtask"&&O.parts.push({type:"text",text:"The following tool was executed by the user"})}if(ye.info.role==="assistant"){let O=`${xe.providerID}/${xe.id}`!=`${ye.info.providerID}/${ye.info.modelID}`,W=[];if(ye.info.error&&!(J.AbortedError.isInstance(ye.info.error)&&ye.parts.some(B=>B.type!=="step-start"&&B.type!=="reasoning")))continue;if(ye.info.aside){let B=ye.parts.filter(re=>re.type==="text"&&!re.ignored).map(re=>re.text.trim()).filter(Boolean).join(`
35
+ `);B&&ue.push({id:ye.info.id,role:"user",parts:[{type:"text",text:`[While a tool was running you already answered the user's message above: "${B}". Do not answer it again; carry on with your work.]`}]});continue}let K={id:ye.info.id,role:"assistant",parts:[]};for(let B of ye.parts){if(B.type==="text"&&K.parts.push({type:"text",text:B.text,...O?{}:{providerMetadata:B.metadata}}),B.type==="step-start"&&K.parts.push({type:"step-start"}),B.type==="tool"){if(Qe.add(B.tool),B.state.status==="completed"){let re=B.state.time.compacted?"[Old tool result content cleared]":B.state.output,ve=B.state.time.compacted||de?.stripMedia?[]:B.state.attachments??[],$=ve.filter($e=>t($e.mime)),_e=ve.filter($e=>!t($e.mime));!dt&&$.length>0&&W.push(...$);let De=dt?ve:_e,He=De.length>0?{text:re,attachments:De}:re;K.parts.push({type:"tool-"+B.tool,state:"output-available",toolCallId:B.callID,input:B.state.input,output:He,...O?{}:{callProviderMetadata:B.metadata}})}B.state.status==="error"&&K.parts.push({type:"tool-"+B.tool,state:"output-error",toolCallId:B.callID,input:B.state.input,errorText:B.state.error,...O?{}:{callProviderMetadata:B.metadata}}),(B.state.status==="pending"||B.state.status==="running")&&K.parts.push({type:"tool-"+B.tool,state:"output-error",toolCallId:B.callID,input:B.state.input,errorText:de?.runningToolNote??"[Tool execution was interrupted]",...O?{}:{callProviderMetadata:B.metadata}})}B.type==="reasoning"&&K.parts.push({type:"reasoning",text:B.text,...O?{}:{providerMetadata:B.metadata}})}K.parts.length>0&&(ue.push(K),W.length>0&&ue.push({id:Ve.ascending(),role:"user",parts:[{type:"text",text:"Attached image(s) from tool result:"},...W.map(B=>({type:"file",url:B.url,mediaType:B.mime}))]}))}}let Oe=Object.fromEntries(Array.from(Qe).map(ye=>[ye,{toModelOutput:xt}]));return yield*ls.promise(()=>op(ue.filter(ye=>ye.parts.some(O=>O.type!=="step-start")),{tools:Oe}))});function ce(X,xe,de){return ls.runPromise((0,J.toModelMessagesEffect)(X,xe,de))}J.toModelMessages=ce,n(ce,"toModelMessages");function Q(X){let xe=X.before?J.cursor.decode(X.before):void 0,de=xe?(0,ke.and)((0,ke.eq)(En.session_id,X.sessionID),N(xe)):(0,ke.eq)(En.session_id,X.sessionID),ue=Ft.use(ye=>ye.select().from(En).where(de).orderBy((0,ke.desc)(En.time_created),(0,ke.desc)(En.id)).limit(X.limit+1).all());if(ue.length===0){if(!Ft.use(O=>O.select({id:It.id}).from(It).where((0,ke.eq)(It.id,X.sessionID)).get()))throw new Do({message:`Session not found: ${X.sessionID}`});return{items:[],more:!1}}let Qe=ue.length>X.limit,dt=Qe?ue.slice(0,X.limit):ue,xt=q(dt);xt.reverse();let Oe=dt.at(-1);return{items:xt,more:Qe,cursor:Qe&&Oe?J.cursor.encode({id:Oe.id,time:Oe.time_created}):void 0}}J.page=Q,n(Q,"page");function*ie(X){let de;for(;;){let ue=Q({sessionID:X,limit:50,before:de});if(ue.items.length===0)break;for(let Qe=ue.items.length-1;Qe>=0;Qe--)yield ue.items[Qe];if(!ue.more||!ue.cursor)break;de=ue.cursor}}J.stream=ie,n(ie,"stream");function me(X){return Ft.use(de=>de.select().from(ro).where((0,ke.eq)(ro.message_id,X)).orderBy(ro.id).all()).map(de=>({...de.data,id:de.id,sessionID:de.session_id,messageID:de.message_id}))}J.parts=me,n(me,"parts");function le(X){let xe=Ft.use(de=>de.select().from(En).where((0,ke.and)((0,ke.eq)(En.id,X.messageID),(0,ke.eq)(En.session_id,X.sessionID))).get());if(!xe)throw new Do({message:`Message not found: ${X.messageID}`});return{info:ge(xe),parts:me(X.messageID)}}J.get=le,n(le,"get");function we(X){let xe=[],de=new Set;for(let ue of X){if(xe.push(ue),ue.info.role==="user"&&de.has(ue.info.id)&&ue.parts.some(Qe=>Qe.type==="compaction"))break;ue.info.role==="assistant"&&ue.info.summary&&ue.info.finish&&!ue.info.error&&de.add(ue.info.parentID)}return xe.reverse(),xe}J.filterCompacted=we,n(we,"filterCompacted"),J.filterCompactedEffect=ls.fnUntraced(function*(X){return we(ie(X))});function fe(X,xe){switch(!0){case(X instanceof DOMException&&X.name==="AbortError"):return new J.AbortedError({message:X.message},{cause:X}).toObject();case J.OutputLengthError.isInstance(X):return X;case rp.isInstance(X):return new J.AuthError({providerID:xe.providerID,message:X.message},{cause:X}).toObject();case el(X)!==void 0:{let ue=el(X);return new J.APIError({message:"Connection reset by server",isRetryable:!0,metadata:{code:ue.code??"",syscall:ue.syscall??"",message:ue.message??""}},{cause:X}).toObject()}case(X instanceof TypeError&&X.message==="terminated"):{if(xe.aborted)return new J.AbortedError({message:X.message},{cause:X}).toObject();let ue=X.cause;return new J.APIError({message:"Connection closed by server",isRetryable:!0,metadata:{code:typeof ue?.code=="string"?ue.code:"",message:typeof ue?.message=="string"?ue.message:""}},{cause:X}).toObject()}case(X instanceof Error&&X.code==="ZlibError"):return xe.aborted?new J.AbortedError({message:X.message},{cause:X}).toObject():new J.APIError({message:"Response decompression failed",isRetryable:!0,metadata:{code:X.code,message:X.message}},{cause:X}).toObject();case X instanceof Nn.ResponseStreamError:return new J.APIError({message:X.message,isRetryable:!0,metadata:{code:X.name}},{cause:X}).toObject();case np.isInstance(X):let de=Nn.parseAPICallError({providerID:xe.providerID,error:X});return de.type==="context_overflow"?new J.ContextOverflowError({message:de.message,responseBody:de.responseBody},{cause:X}).toObject():de.type==="quota"?new J.ProviderQuotaError({providerID:xe.providerID,message:de.message,planType:de.planType,resetsAt:de.resetsAt,statusCode:de.statusCode,responseBody:de.responseBody},{cause:X}).toObject():new J.APIError({message:de.message,statusCode:de.statusCode,isRetryable:de.isRetryable,responseHeaders:de.responseHeaders,responseBody:de.responseBody,metadata:de.metadata},{cause:X}).toObject();case X instanceof Error:return new tt.Unknown({message:ao(X)},{cause:X}).toObject();default:try{let ue=Nn.parseStreamError(X);if(ue)return ue.type==="context_overflow"?new J.ContextOverflowError({message:ue.message,responseBody:ue.responseBody},{cause:X}).toObject():ue.type==="quota"?new J.ProviderQuotaError({providerID:xe.providerID,message:ue.message,planType:ue.planType,resetsAt:ue.resetsAt,responseBody:ue.responseBody},{cause:X}).toObject():ue.type==="unknown"?new tt.Unknown({message:ue.message},{cause:X}).toObject():new J.APIError({message:ue.message,isRetryable:ue.isRetryable,responseBody:ue.responseBody},{cause:X}).toObject()}catch{}return new tt.Unknown({message:JSON.stringify(X)},{cause:X}).toObject()}}J.fromError=fe,n(fe,"fromError")})(Ne||={});function el(t){let e=t;for(let o=0;o<4&&e;o++){if(e?.code==="ECONNRESET")return e;e=e?.cause}}n(el,"connectionResetError");import Ur from"path";import Rh from"os";import Ot from"zod";import ap from"zod";import{Effect as uo,Layer as Ro,ServiceMap as lp}from"effect";import sp from"zod";import{Effect as Yn,Layer as Xo,ServiceMap as ip}from"effect";var co;(b=>{function t(s){if(!s.startsWith('"')||!s.endsWith('"'))return s;let p=s.slice(1,-1),w=[];for(let f=0;f<p.length;f++){let v=p[f];if(v!=="\\"){w.push(v.charCodeAt(0));continue}let I=p[f+1];if(!I){w.push(92);continue}if(I>="0"&&I<="7"){let C=p.slice(f+1,f+4).match(/^[0-7]{1,3}/);if(!C){w.push(I.charCodeAt(0)),f++;continue}w.push(parseInt(C[0],8)),f+=C[0].length;continue}let h=I==="n"?`
36
+ `:I==="r"?"\r":I==="t"?" ":I==="b"?"\b":I==="f"?"\f":I==="v"?"\v":I==="\\"||I==='"'?I:void 0;w.push((h??I).charCodeAt(0)),f++}return Buffer.from(w).toString()}n(t,"unquoteGitPath");class e extends ip.Service()("@opencode/SessionSummary"){static{n(this,"Service")}}b.Service=e,b.layer=Xo.effect(e,Yn.gen(function*(){let s=yield*Ke.Service,p=yield*cn.Service,w=yield*Vn.Service,f=yield*Me.Service,v=Yn.fn("SessionSummary.computeDiff")(function*(S){let C,l;for(let P of S.messages){if(!C){for(let y of P.parts)if(y.type==="step-start"&&y.snapshot){C=y.snapshot;break}}for(let y of P.parts)y.type==="step-finish"&&y.snapshot&&(l=y.snapshot)}return C&&l?yield*p.diffFull(C,l):[]}),I=Yn.fn("SessionSummary.summarize")(function*(S){let C=yield*s.messages({sessionID:S.sessionID});if(!C.length)return;let l=yield*v({messages:C});yield*s.setSummary({sessionID:S.sessionID,summary:{additions:l.reduce((T,R)=>T+R.additions,0),deletions:l.reduce((T,R)=>T+R.deletions,0),files:l.length}}),yield*w.write(["session_diff",S.sessionID],l).pipe(Yn.ignore),yield*f.publish(Ke.Event.Diff,{sessionID:S.sessionID,diff:l});let P=C.filter(T=>T.info.id===S.messageID||T.info.role==="assistant"&&T.info.parentID===S.messageID),y=P.find(T=>T.info.id===S.messageID);if(!y||y.info.role!=="user")return;let D=yield*v({messages:P});y.info.summary={...y.info.summary,diffs:D},yield*s.updateMessage(y.info)}),h=Yn.fn("SessionSummary.diff")(function*(S){let C=yield*w.read(["session_diff",S.sessionID]).pipe(Yn.catch(()=>Yn.succeed([]))),l=C.map(y=>{let D=t(y.file);return D===y.file?y:{...y,file:D}});return l.some((y,D)=>y.file!==C[D]?.file)&&(yield*w.write(["session_diff",S.sessionID],l).pipe(Yn.ignore)),l});return e.of({summarize:I,diff:h,computeDiff:v})})),b.defaultLayer=Xo.unwrap(Yn.sync(()=>b.layer.pipe(Xo.provide(Ke.defaultLayer),Xo.provide(cn.defaultLayer),Xo.provide(Vn.defaultLayer),Xo.provide(Me.layer))));let{runPromise:m}=qe(e,b.defaultLayer);b.summarize=n(s=>{m(p=>p.summarize(s)).catch(()=>{})},"summarize"),b.DiffInput=sp.object({sessionID:Ee.zod,messageID:Ve.zod.optional()});async function d(s){return m(p=>p.diff(s))}b.diff=d,n(d,"diff")})(co||={});var cs;(s=>{let t=Ae.create({service:"session.revert"});s.RevertInput=ap.object({sessionID:Ee.zod,messageID:Ve.zod,partID:nt.zod.optional()});class o extends lp.Service()("@opencode/SessionRevert"){static{n(this,"Service")}}s.Service=o,s.layer=Ro.effect(o,uo.gen(function*(){let p=yield*Ke.Service,w=yield*cn.Service,f=yield*Vn.Service,v=yield*Me.Service,I=yield*co.Service,h=uo.fn("SessionRevert.revert")(function*(l){yield*uo.promise(()=>Fn.assertNotBusy(l.sessionID));let P=yield*p.messages({sessionID:l.sessionID}),y,D=yield*p.get(l.sessionID),T,R=[];for(let x of P){x.info.role==="user"&&(y=x.info);let k=[];for(let M of x.parts){if(T){M.type==="patch"&&R.push(M);continue}if(!T){if(x.info.id===l.messageID&&!l.partID||M.id===l.partID){let r=k.some(u=>["text","tool"].includes(u.type))?l.partID:void 0;T={messageID:!r&&y?y.id:x.info.id,partID:r}}k.push(M)}}}if(!T)return D;T.snapshot=D.revert?.snapshot??(yield*w.track()),D.revert?.snapshot&&(yield*w.restore(D.revert.snapshot)),yield*w.revert(R),T.snapshot&&(T.diff=yield*w.diff(T.snapshot));let _=P.filter(x=>vt.compareAscending(x.info.id,T.messageID)>=0),E=yield*I.computeDiff({messages:_});return yield*f.write(["session_diff",l.sessionID],E).pipe(uo.ignore),yield*v.publish(Ke.Event.Diff,{sessionID:l.sessionID,diff:E}),yield*p.setRevert({sessionID:l.sessionID,revert:T,summary:{additions:E.reduce((x,k)=>x+k.additions,0),deletions:E.reduce((x,k)=>x+k.deletions,0),files:E.length}}),yield*p.get(l.sessionID)}),S=uo.fn("SessionRevert.unrevert")(function*(l){t.info("unreverting",l),yield*uo.promise(()=>Fn.assertNotBusy(l.sessionID));let P=yield*p.get(l.sessionID);return P.revert?(P.revert.snapshot&&(yield*w.restore(P.revert.snapshot)),yield*p.clearRevert(l.sessionID),yield*p.get(l.sessionID)):P}),C=uo.fn("SessionRevert.cleanup")(function*(l){if(!l.revert)return;let P=l.id,y=yield*p.messages({sessionID:P}),D=l.revert.messageID,T=[],R;for(let _ of y)if(!(vt.compareAscending(_.info.id,D)<0)){if(vt.compareAscending(_.info.id,D)>0){T.push(_);continue}if(l.revert.partID){R=_;continue}T.push(_)}for(let _ of T)Nt.run(Ne.Event.Removed,{sessionID:P,messageID:_.info.id});if(l.revert.partID&&R){let _=l.revert.partID,E=R.parts.findIndex(x=>x.id===_);if(E>=0){let x=R.parts.slice(E);R.parts=R.parts.slice(0,E);for(let k of x)Nt.run(Ne.Event.PartRemoved,{sessionID:P,messageID:R.info.id,partID:k.id})}}yield*p.clearRevert(P)});return o.of({revert:h,unrevert:S,cleanup:C})})),s.defaultLayer=Ro.unwrap(uo.sync(()=>s.layer.pipe(Ro.provide(Ke.defaultLayer),Ro.provide(cn.defaultLayer),Ro.provide(Vn.defaultLayer),Ro.provide(Me.layer),Ro.provide(co.defaultLayer))));let{runPromise:c}=qe(o,s.defaultLayer);async function a(p){return c(w=>w.revert(p))}s.revert=a,n(a,"revert");async function d(p){return c(w=>w.unrevert(p))}s.unrevert=d,n(d,"unrevert");async function b(p){return c(w=>w.cleanup(p))}s.cleanup=b,n(b,"cleanup")})(cs||={});import Vt from"zod";import Ie from"zod";import Kn from"os";import rc from"fuzzysort";import{mapValues as Qo,mergeDeep as Ao,omit as sc,pickBy as ic,sortBy as nm}from"remeda";import{NoSuchModelError as om}from"ai";var tl=n(({onSseError:t,onSseEvent:e,responseTransformer:o,responseValidator:i,sseDefaultRetryDelay:m,sseMaxRetryAttempts:c,sseMaxRetryDelay:a,sseSleepFn:d,url:b,...s})=>{let p,w=d??(I=>new Promise(h=>setTimeout(h,I)));return{stream:n(async function*(){let I=m??3e3,h=0,S=s.signal??new AbortController().signal;for(;!S.aborted;){h++;let C=s.headers instanceof Headers?s.headers:new Headers(s.headers);p!==void 0&&C.set("Last-Event-ID",p);try{let l=await fetch(b,{...s,headers:C,signal:S});if(!l.ok)throw new Error(`SSE failed: ${l.status} ${l.statusText}`);if(!l.body)throw new Error("No body in SSE response");let P=l.body.pipeThrough(new TextDecoderStream).getReader(),y="",D=n(()=>{try{P.cancel()}catch{}},"abortHandler");S.addEventListener("abort",D);try{for(;;){let{done:T,value:R}=await P.read();if(T)break;y+=R;let _=y.split(`
37
37
 
38
38
  `);y=_.pop()??"";for(let E of _){let x=E.split(`
39
39
  `),k=[],M;for(let g of x)if(g.startsWith("data:"))k.push(g.replace(/^data:\s*/,""));else if(g.startsWith("event:"))M=g.replace(/^event:\s*/,"");else if(g.startsWith("id:"))p=g.replace(/^id:\s*/,"");else if(g.startsWith("retry:")){let L=Number.parseInt(g.replace(/^retry:\s*/,""),10);Number.isNaN(L)||(I=L)}let r,u=!1;if(k.length){let g=k.join(`
40
- `);try{r=JSON.parse(g),u=!0}catch{r=g}}u&&(i&&await i(r),o&&(r=await o(r))),e?.({data:r,event:M,id:p,retry:I}),k.length&&(yield r)}}}finally{S.removeEventListener("abort",D),P.releaseLock()}break}catch(l){if(t?.(l),c!==void 0&&h>=c)break;let P=Math.min(I*2**(h-1),a??3e4);await w(P)}}},"createStream")()}},"createSseClient");var nl=n(async(t,e)=>{let o=typeof e=="function"?await e(t):e;if(o)return t.scheme==="bearer"?`Bearer ${o}`:t.scheme==="basic"?`Basic ${btoa(o)}`:o},"getAuthToken");var Ys={bodySerializer:n(t=>JSON.stringify(t,(e,o)=>typeof o=="bigint"?o.toString():o),"bodySerializer")};var lp=n(t=>{switch(t){case"label":return".";case"matrix":return";";case"simple":return",";default:return"&"}},"separatorArrayExplode"),cp=n(t=>{switch(t){case"form":return",";case"pipeDelimited":return"|";case"spaceDelimited":return"%20";default:return","}},"separatorArrayNoExplode"),dp=n(t=>{switch(t){case"label":return".";case"matrix":return";";case"simple":return",";default:return"&"}},"separatorObjectExplode"),ds=n(({allowReserved:t,explode:e,name:o,style:i,value:m})=>{if(!e){let d=(t?m:m.map(b=>encodeURIComponent(b))).join(cp(i));switch(i){case"label":return`.${d}`;case"matrix":return`;${o}=${d}`;case"simple":return d;default:return`${o}=${d}`}}let c=lp(i),a=m.map(d=>i==="label"||i==="simple"?t?d:encodeURIComponent(d):Zo({allowReserved:t,name:o,value:d})).join(c);return i==="label"||i==="matrix"?c+a:a},"serializeArrayParam"),Zo=n(({allowReserved:t,name:e,value:o})=>{if(o==null)return"";if(typeof o=="object")throw new Error("Deeply-nested arrays/objects aren\u2019t supported. Provide your own `querySerializer()` to handle these.");return`${e}=${t?o:encodeURIComponent(o)}`},"serializePrimitiveParam"),us=n(({allowReserved:t,explode:e,name:o,style:i,value:m,valueOnly:c})=>{if(m instanceof Date)return c?m.toISOString():`${o}=${m.toISOString()}`;if(i!=="deepObject"&&!e){let b=[];Object.entries(m).forEach(([p,w])=>{b=[...b,p,t?w:encodeURIComponent(w)]});let s=b.join(",");switch(i){case"form":return`${o}=${s}`;case"label":return`.${s}`;case"matrix":return`;${o}=${s}`;default:return s}}let a=dp(i),d=Object.entries(m).map(([b,s])=>Zo({allowReserved:t,name:i==="deepObject"?`${o}[${b}]`:b,value:s})).join(a);return i==="label"||i==="matrix"?a+d:d},"serializeObjectParam");var up=/\{[^{}]+\}/g,pp=n(({path:t,url:e})=>{let o=e,i=e.match(up);if(i)for(let m of i){let c=!1,a=m.substring(1,m.length-1),d="simple";a.endsWith("*")&&(c=!0,a=a.substring(0,a.length-1)),a.startsWith(".")?(a=a.substring(1),d="label"):a.startsWith(";")&&(a=a.substring(1),d="matrix");let b=t[a];if(b==null)continue;if(Array.isArray(b)){o=o.replace(m,ds({explode:c,name:a,style:d,value:b}));continue}if(typeof b=="object"){o=o.replace(m,us({explode:c,name:a,style:d,value:b,valueOnly:!0}));continue}if(d==="matrix"){o=o.replace(m,`;${Zo({name:a,value:b})}`);continue}let s=encodeURIComponent(d==="label"?`.${b}`:b);o=o.replace(m,s)}return o},"defaultPathSerializer"),ol=n(({baseUrl:t,path:e,query:o,querySerializer:i,url:m})=>{let c=m.startsWith("/")?m:`/${m}`,a=(t??"")+c;e&&(a=pp({path:e,url:a}));let d=o?i(o):"";return d.startsWith("?")&&(d=d.substring(1)),d&&(a+=`?${d}`),a},"getUrl");var rl=n(({allowReserved:t,array:e,object:o}={})=>n(m=>{let c=[];if(m&&typeof m=="object")for(let a in m){let d=m[a];if(d!=null)if(Array.isArray(d)){let b=ds({allowReserved:t,explode:!0,name:a,style:"form",value:d,...e});b&&c.push(b)}else if(typeof d=="object"){let b=us({allowReserved:t,explode:!0,name:a,style:"deepObject",value:d,...o});b&&c.push(b)}else{let b=Zo({allowReserved:t,name:a,value:d});b&&c.push(b)}}return c.join("&")},"querySerializer"),"createQuerySerializer"),sl=n(t=>{if(!t)return"stream";let e=t.split(";")[0]?.trim();if(e){if(e.startsWith("application/json")||e.endsWith("+json"))return"json";if(e==="multipart/form-data")return"formData";if(["application/","audio/","image/","video/"].some(o=>e.startsWith(o)))return"blob";if(e.startsWith("text/"))return"text"}},"getParseAs"),fp=n((t,e)=>e?!!(t.headers.has(e)||t.query?.[e]||t.headers.get("Cookie")?.includes(`${e}=`)):!1,"checkForExistence"),il=n(async({security:t,...e})=>{for(let o of t){if(fp(e,o.name))continue;let i=await nl(o,e.auth);if(!i)continue;let m=o.name??"Authorization";switch(o.in){case"query":e.query||(e.query={}),e.query[m]=i;break;case"cookie":e.headers.append("Cookie",`${m}=${i}`);break;default:e.headers.set(m,i);break}}},"setAuthParams"),Js=n(t=>ol({baseUrl:t.baseUrl,path:t.path,query:t.query,querySerializer:typeof t.querySerializer=="function"?t.querySerializer:rl(t.querySerializer),url:t.url}),"buildUrl"),Ks=n((t,e)=>{let o={...t,...e};return o.baseUrl?.endsWith("/")&&(o.baseUrl=o.baseUrl.substring(0,o.baseUrl.length-1)),o.headers=ps(t.headers,e.headers),o},"mergeConfigs"),ps=n((...t)=>{let e=new Headers;for(let o of t){if(!o||typeof o!="object")continue;let i=o instanceof Headers?o.entries():Object.entries(o);for(let[m,c]of i)if(c===null)e.delete(m);else if(Array.isArray(c))for(let a of c)e.append(m,a);else c!==void 0&&e.set(m,typeof c=="object"?JSON.stringify(c):c)}return e},"mergeHeaders"),Dr=class{static{n(this,"Interceptors")}_fns;constructor(){this._fns=[]}clear(){this._fns=[]}getInterceptorIndex(e){return typeof e=="number"?this._fns[e]?e:-1:this._fns.indexOf(e)}exists(e){let o=this.getInterceptorIndex(e);return!!this._fns[o]}eject(e){let o=this.getInterceptorIndex(e);this._fns[o]&&(this._fns[o]=null)}update(e,o){let i=this.getInterceptorIndex(e);return this._fns[i]?(this._fns[i]=o,e):!1}use(e){return this._fns=[...this._fns,e],this._fns.length-1}},al=n(()=>({error:new Dr,request:new Dr,response:new Dr}),"createInterceptors"),mp=rl({allowReserved:!1,array:{explode:!0,style:"form"},object:{explode:!0,style:"deepObject"}}),hp={"Content-Type":"application/json"},Sr=n((t={})=>({...Ys,headers:hp,parseAs:"auto",querySerializer:mp,...t}),"createConfig");var Tr=n((t={})=>{let e=Ks(Sr(),t),o=n(()=>({...e}),"getConfig"),i=n(b=>(e=Ks(e,b),o()),"setConfig"),m=al(),c=n(async b=>{let s={...e,...b,fetch:b.fetch??e.fetch??globalThis.fetch,headers:ps(e.headers,b.headers),serializedBody:void 0};s.security&&await il({...s,security:s.security}),s.requestValidator&&await s.requestValidator(s),s.body&&s.bodySerializer&&(s.serializedBody=s.bodySerializer(s.body)),(s.serializedBody===void 0||s.serializedBody==="")&&s.headers.delete("Content-Type");let p=Js(s);return{opts:s,url:p}},"beforeRequest"),a=n(async b=>{let{opts:s,url:p}=await c(b),w={redirect:"follow",...s,body:s.serializedBody},f=new Request(p,w);for(let y of m.request._fns)y&&(f=await y(f,s));let v=s.fetch,I=await v(f);for(let y of m.response._fns)y&&(I=await y(I,f,s));let h={request:f,response:I};if(I.ok){if(I.status===204||I.headers.get("Content-Length")==="0")return s.responseStyle==="data"?{}:{data:{},...h};let y=(s.parseAs==="auto"?sl(I.headers.get("Content-Type")):s.parseAs)??"json",D;switch(y){case"arrayBuffer":case"blob":case"formData":case"json":case"text":D=await I[y]();break;case"stream":return s.responseStyle==="data"?I.body:{data:I.body,...h}}return y==="json"&&(s.responseValidator&&await s.responseValidator(D),s.responseTransformer&&(D=await s.responseTransformer(D))),s.responseStyle==="data"?D:{data:D,...h}}let S=await I.text(),C;try{C=JSON.parse(S)}catch{}let l=C??S,P=l;for(let y of m.error._fns)y&&(P=await y(l,I,f,s));if(P=P||{},s.throwOnError)throw P;return s.responseStyle==="data"?void 0:{error:P,...h}},"request"),d=n(b=>{let s=n(p=>a({...p,method:b}),"fn");return s.sse=async p=>{let{opts:w,url:f}=await c(p);return tl({...w,body:w.body,headers:w.headers,method:b,url:f})},s},"makeMethod");return{buildUrl:Js,connect:d("CONNECT"),delete:d("DELETE"),get:d("GET"),getConfig:o,head:d("HEAD"),interceptors:m,options:d("OPTIONS"),patch:d("PATCH"),post:d("POST"),put:d("PUT"),request:a,setConfig:i,trace:d("TRACE")}},"createClient");var gp={$body_:"body",$headers_:"headers",$path_:"path",$query_:"query"},Hx=Object.entries(gp);var ll=Tr(Sr({baseUrl:"http://localhost:4096"}));var _t=class{static{n(this,"_HeyApiClient")}_client=ll;constructor(e){e?.client&&(this._client=e.client)}},Xs=class extends _t{static{n(this,"Global")}event(e){return(e?.client??this._client).get.sse({url:"/global/event",...e})}},Zs=class extends _t{static{n(this,"Project")}list(e){return(e?.client??this._client).get({url:"/project",...e})}current(e){return(e?.client??this._client).get({url:"/project/current",...e})}},Qs=class extends _t{static{n(this,"Pty")}list(e){return(e?.client??this._client).get({url:"/pty",...e})}create(e){return(e?.client??this._client).post({url:"/pty",...e,headers:{"Content-Type":"application/json",...e?.headers}})}remove(e){return(e.client??this._client).delete({url:"/pty/{id}",...e})}get(e){return(e.client??this._client).get({url:"/pty/{id}",...e})}update(e){return(e.client??this._client).put({url:"/pty/{id}",...e,headers:{"Content-Type":"application/json",...e.headers}})}connect(e){return(e.client??this._client).get({url:"/pty/{id}/connect",...e})}},ei=class extends _t{static{n(this,"Config")}get(e){return(e?.client??this._client).get({url:"/config",...e})}update(e){return(e?.client??this._client).patch({url:"/config",...e,headers:{"Content-Type":"application/json",...e?.headers}})}providers(e){return(e?.client??this._client).get({url:"/config/providers",...e})}},ti=class extends _t{static{n(this,"Tool")}ids(e){return(e?.client??this._client).get({url:"/experimental/tool/ids",...e})}list(e){return(e.client??this._client).get({url:"/experimental/tool",...e})}},ni=class extends _t{static{n(this,"Instance")}dispose(e){return(e?.client??this._client).post({url:"/instance/dispose",...e})}},oi=class extends _t{static{n(this,"Path")}get(e){return(e?.client??this._client).get({url:"/path",...e})}},ri=class extends _t{static{n(this,"Vcs")}get(e){return(e?.client??this._client).get({url:"/vcs",...e})}},si=class extends _t{static{n(this,"Session")}list(e){return(e?.client??this._client).get({url:"/session",...e})}create(e){return(e?.client??this._client).post({url:"/session",...e,headers:{"Content-Type":"application/json",...e?.headers}})}status(e){return(e?.client??this._client).get({url:"/session/status",...e})}delete(e){return(e.client??this._client).delete({url:"/session/{id}",...e})}get(e){return(e.client??this._client).get({url:"/session/{id}",...e})}update(e){return(e.client??this._client).patch({url:"/session/{id}",...e,headers:{"Content-Type":"application/json",...e.headers}})}children(e){return(e.client??this._client).get({url:"/session/{id}/children",...e})}todo(e){return(e.client??this._client).get({url:"/session/{id}/todo",...e})}init(e){return(e.client??this._client).post({url:"/session/{id}/init",...e,headers:{"Content-Type":"application/json",...e.headers}})}fork(e){return(e.client??this._client).post({url:"/session/{id}/fork",...e,headers:{"Content-Type":"application/json",...e.headers}})}abort(e){return(e.client??this._client).post({url:"/session/{id}/abort",...e})}unshare(e){return(e.client??this._client).delete({url:"/session/{id}/share",...e})}share(e){return(e.client??this._client).post({url:"/session/{id}/share",...e})}diff(e){return(e.client??this._client).get({url:"/session/{id}/diff",...e})}summarize(e){return(e.client??this._client).post({url:"/session/{id}/summarize",...e,headers:{"Content-Type":"application/json",...e.headers}})}messages(e){return(e.client??this._client).get({url:"/session/{id}/message",...e})}prompt(e){return(e.client??this._client).post({url:"/session/{id}/message",...e,headers:{"Content-Type":"application/json",...e.headers}})}message(e){return(e.client??this._client).get({url:"/session/{id}/message/{messageID}",...e})}promptAsync(e){return(e.client??this._client).post({url:"/session/{id}/prompt_async",...e,headers:{"Content-Type":"application/json",...e.headers}})}command(e){return(e.client??this._client).post({url:"/session/{id}/command",...e,headers:{"Content-Type":"application/json",...e.headers}})}shell(e){return(e.client??this._client).post({url:"/session/{id}/shell",...e,headers:{"Content-Type":"application/json",...e.headers}})}revert(e){return(e.client??this._client).post({url:"/session/{id}/revert",...e,headers:{"Content-Type":"application/json",...e.headers}})}unrevert(e){return(e.client??this._client).post({url:"/session/{id}/unrevert",...e})}},ii=class extends _t{static{n(this,"Command")}list(e){return(e?.client??this._client).get({url:"/command",...e})}},ai=class extends _t{static{n(this,"Oauth")}authorize(e){return(e.client??this._client).post({url:"/provider/{id}/oauth/authorize",...e,headers:{"Content-Type":"application/json",...e.headers}})}callback(e){return(e.client??this._client).post({url:"/provider/{id}/oauth/callback",...e,headers:{"Content-Type":"application/json",...e.headers}})}},li=class extends _t{static{n(this,"Provider")}list(e){return(e?.client??this._client).get({url:"/provider",...e})}auth(e){return(e?.client??this._client).get({url:"/provider/auth",...e})}oauth=new ai({client:this._client})},ci=class extends _t{static{n(this,"Find")}text(e){return(e.client??this._client).get({url:"/find",...e})}files(e){return(e.client??this._client).get({url:"/find/file",...e})}symbols(e){return(e.client??this._client).get({url:"/find/symbol",...e})}},di=class extends _t{static{n(this,"File")}list(e){return(e.client??this._client).get({url:"/file",...e})}read(e){return(e.client??this._client).get({url:"/file/content",...e})}status(e){return(e?.client??this._client).get({url:"/file/status",...e})}},ui=class extends _t{static{n(this,"App")}log(e){return(e?.client??this._client).post({url:"/log",...e,headers:{"Content-Type":"application/json",...e?.headers}})}agents(e){return(e?.client??this._client).get({url:"/agent",...e})}},fs=class extends _t{static{n(this,"Auth")}remove(e){return(e.client??this._client).delete({url:"/mcp/{name}/auth",...e})}start(e){return(e.client??this._client).post({url:"/mcp/{name}/auth",...e})}callback(e){return(e.client??this._client).post({url:"/mcp/{name}/auth/callback",...e,headers:{"Content-Type":"application/json",...e.headers}})}authenticate(e){return(e.client??this._client).post({url:"/mcp/{name}/auth/authenticate",...e})}set(e){return(e.client??this._client).put({url:"/auth/{id}",...e,headers:{"Content-Type":"application/json",...e.headers}})}},pi=class extends _t{static{n(this,"Mcp")}status(e){return(e?.client??this._client).get({url:"/mcp",...e})}add(e){return(e?.client??this._client).post({url:"/mcp",...e,headers:{"Content-Type":"application/json",...e?.headers}})}connect(e){return(e.client??this._client).post({url:"/mcp/{name}/connect",...e})}disconnect(e){return(e.client??this._client).post({url:"/mcp/{name}/disconnect",...e})}auth=new fs({client:this._client})},fi=class extends _t{static{n(this,"Lsp")}status(e){return(e?.client??this._client).get({url:"/lsp",...e})}},mi=class extends _t{static{n(this,"Formatter")}status(e){return(e?.client??this._client).get({url:"/formatter",...e})}},hi=class extends _t{static{n(this,"Control")}next(e){return(e?.client??this._client).get({url:"/tui/control/next",...e})}response(e){return(e?.client??this._client).post({url:"/tui/control/response",...e,headers:{"Content-Type":"application/json",...e?.headers}})}},gi=class extends _t{static{n(this,"Tui")}appendPrompt(e){return(e?.client??this._client).post({url:"/tui/append-prompt",...e,headers:{"Content-Type":"application/json",...e?.headers}})}openHelp(e){return(e?.client??this._client).post({url:"/tui/open-help",...e})}openSessions(e){return(e?.client??this._client).post({url:"/tui/open-sessions",...e})}openThemes(e){return(e?.client??this._client).post({url:"/tui/open-themes",...e})}openModels(e){return(e?.client??this._client).post({url:"/tui/open-models",...e})}submitPrompt(e){return(e?.client??this._client).post({url:"/tui/submit-prompt",...e})}clearPrompt(e){return(e?.client??this._client).post({url:"/tui/clear-prompt",...e})}executeCommand(e){return(e?.client??this._client).post({url:"/tui/execute-command",...e,headers:{"Content-Type":"application/json",...e?.headers}})}showToast(e){return(e?.client??this._client).post({url:"/tui/show-toast",...e,headers:{"Content-Type":"application/json",...e?.headers}})}publish(e){return(e?.client??this._client).post({url:"/tui/publish",...e,headers:{"Content-Type":"application/json",...e?.headers}})}control=new hi({client:this._client})},yi=class extends _t{static{n(this,"Event")}subscribe(e){return(e?.client??this._client).get.sse({url:"/event",...e})}},ms=class extends _t{static{n(this,"OpencodeClient")}postSessionIdPermissionsPermissionId(e){return(e.client??this._client).post({url:"/session/{id}/permissions/{permissionID}",...e,headers:{"Content-Type":"application/json",...e.headers}})}global=new Xs({client:this._client});project=new Zs({client:this._client});pty=new Qs({client:this._client});config=new ei({client:this._client});tool=new ti({client:this._client});instance=new ni({client:this._client});path=new oi({client:this._client});vcs=new ri({client:this._client});session=new si({client:this._client});command=new ii({client:this._client});provider=new li({client:this._client});find=new ci({client:this._client});file=new di({client:this._client});app=new ui({client:this._client});mcp=new pi({client:this._client});lsp=new fi({client:this._client});formatter=new mi({client:this._client});tui=new gi({client:this._client});auth=new fs({client:this._client});event=new yi({client:this._client})};function yp(t,e){if(t)return e&&(t===e||t===encodeURIComponent(e))?e:t}n(yp,"pick");function bp(t,e){if(t.method!=="GET"&&t.method!=="HEAD")return t;let o=yp(t.headers.get("x-opencode-directory"),e);if(!o)return t;let i=new URL(t.url);i.searchParams.has("directory")||i.searchParams.set("directory",o);let m=new Request(i,t);return m.headers.delete("x-opencode-directory"),m}n(bp,"rewrite");function bi(t){t?.fetch||(t={...t,fetch:n(i=>(i.timeout=!1,fetch(i)),"customFetch")}),t?.directory&&(t.headers={...t.headers,"x-opencode-directory":encodeURIComponent(t.directory)});let e=Tr(t);return e.interceptors.request.use(o=>bp(o,t?.directory)),new ms({client:e})}n(bi,"createOpencodeClient");import bI from"cross-spawn";import vi from"os";import{setTimeout as Ip}from"node:timers/promises";import{createServer as kp}from"http";import Ep from"path";import wi from"fs/promises";import wp from"path";var vp=272e3,xp=1440*60*1e3;function cl(t,e=new Date){let o=Array.isArray(t?.models)?t.models:Array.isArray(t)?t:[],i={};for(let m of o){let c=typeof m?.slug=="string"?m.slug:void 0,a=Number(m?.context_window);if(!c||!Number.isFinite(a)||a<=0)continue;let d=Number(m?.max_context_window);i[c]={contextWindow:a,...Number.isFinite(d)&&d>0?{maxContextWindow:d}:{}}}return{fetchedAt:e.toISOString(),models:i}}n(cl,"parsePlanCatalog");function dl(t,e,o){let i=o?.models[t];if(!i&&!/^gpt-\d/.test(t))return;let m=i?.contextWindow??vp,c=e.input??Math.max(0,e.context-e.output),a=c>0?Math.min(m,c):m;return{input:a,output:e.output,context:a+e.output}}n(dl,"planLimitFor");async function ul(t){try{let e=JSON.parse(await wi.readFile(t,"utf8"));if(e&&typeof e.fetchedAt=="string"&&e.models&&typeof e.models=="object")return e}catch{}}n(ul,"readPlanCatalog");async function pl(t,e){await wi.mkdir(wp.dirname(t),{recursive:!0}),await wi.writeFile(t,JSON.stringify(e,null,2))}n(pl,"writePlanCatalog");function fl(t,e=Date.now()){if(!t||Object.keys(t.models).length===0)return!0;let o=Date.parse(t.fetchedAt);return!Number.isFinite(o)||e-o>xp}n(fl,"planCatalogStale");var Pr=Ae.create({service:"plugin.codex"}),Or="app_EMoamEEZ73f0CkXaXp7hrann",Jn="https://auth.openai.com",Dp="https://chatgpt.com/backend-api/codex/responses",Sp="https://chatgpt.com/backend-api/codex/models",Tp="0.155.0",po=1455,Pp=3e3;async function Op(){let t=_p(43),o=new TextEncoder().encode(t),i=await crypto.subtle.digest("SHA-256",o),m=gl(i);return{verifier:t,challenge:m}}n(Op,"generatePKCE");function _p(t){let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~",o=crypto.getRandomValues(new Uint8Array(t));return Array.from(o).map(i=>e[i%e.length]).join("")}n(_p,"generateRandomString");function gl(t){let e=new Uint8Array(t),o=String.fromCharCode(...e);return btoa(o).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}n(gl,"base64UrlEncode");function Rp(){return gl(crypto.getRandomValues(new Uint8Array(32)).buffer)}n(Rp,"generateState");function ml(t){let e=t.split(".");if(e.length===3)try{return JSON.parse(Buffer.from(e[1],"base64url").toString())}catch{return}}n(ml,"parseJwtClaims");function hl(t){return t.chatgpt_account_id||t["https://api.openai.com/auth"]?.chatgpt_account_id||t.organizations?.[0]?.id}n(hl,"extractAccountIdFromClaims");function xi(t){if(t.id_token){let e=ml(t.id_token),o=e&&hl(e);if(o)return o}if(t.access_token){let e=ml(t.access_token);return e?hl(e):void 0}}n(xi,"extractAccountId");function Cp(t,e,o){let i=new URLSearchParams({response_type:"code",client_id:Or,redirect_uri:t,scope:"openid profile email offline_access",code_challenge:e.challenge,code_challenge_method:"S256",id_token_add_organizations:"true",codex_cli_simplified_flow:"true",state:o,originator:"opencode"});return`${Jn}/oauth/authorize?${i.toString()}`}n(Cp,"buildAuthorizeUrl");async function Ap(t,e,o){let i=await fetch(`${Jn}/oauth/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",code:t,redirect_uri:e,client_id:Or,code_verifier:o.verifier}).toString()});if(!i.ok)throw new Error(`Token exchange failed: ${i.status}`);return i.json()}n(Ap,"exchangeCodeForTokens");async function Mp(t,e=Jn){let o=await fetch(`${e}/oauth/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:t,client_id:Or}).toString()});if(!o.ok)throw new Error(`Token refresh failed: ${o.status}`);return o.json()}n(Mp,"refreshAccessToken");var jp=`<!doctype html>
40
+ `);try{r=JSON.parse(g),u=!0}catch{r=g}}u&&(i&&await i(r),o&&(r=await o(r))),e?.({data:r,event:M,id:p,retry:I}),k.length&&(yield r)}}}finally{S.removeEventListener("abort",D),P.releaseLock()}break}catch(l){if(t?.(l),c!==void 0&&h>=c)break;let P=Math.min(I*2**(h-1),a??3e4);await w(P)}}},"createStream")()}},"createSseClient");var nl=n(async(t,e)=>{let o=typeof e=="function"?await e(t):e;if(o)return t.scheme==="bearer"?`Bearer ${o}`:t.scheme==="basic"?`Basic ${btoa(o)}`:o},"getAuthToken");var Ys={bodySerializer:n(t=>JSON.stringify(t,(e,o)=>typeof o=="bigint"?o.toString():o),"bodySerializer")};var cp=n(t=>{switch(t){case"label":return".";case"matrix":return";";case"simple":return",";default:return"&"}},"separatorArrayExplode"),dp=n(t=>{switch(t){case"form":return",";case"pipeDelimited":return"|";case"spaceDelimited":return"%20";default:return","}},"separatorArrayNoExplode"),up=n(t=>{switch(t){case"label":return".";case"matrix":return";";case"simple":return",";default:return"&"}},"separatorObjectExplode"),ds=n(({allowReserved:t,explode:e,name:o,style:i,value:m})=>{if(!e){let d=(t?m:m.map(b=>encodeURIComponent(b))).join(dp(i));switch(i){case"label":return`.${d}`;case"matrix":return`;${o}=${d}`;case"simple":return d;default:return`${o}=${d}`}}let c=cp(i),a=m.map(d=>i==="label"||i==="simple"?t?d:encodeURIComponent(d):Zo({allowReserved:t,name:o,value:d})).join(c);return i==="label"||i==="matrix"?c+a:a},"serializeArrayParam"),Zo=n(({allowReserved:t,name:e,value:o})=>{if(o==null)return"";if(typeof o=="object")throw new Error("Deeply-nested arrays/objects aren\u2019t supported. Provide your own `querySerializer()` to handle these.");return`${e}=${t?o:encodeURIComponent(o)}`},"serializePrimitiveParam"),us=n(({allowReserved:t,explode:e,name:o,style:i,value:m,valueOnly:c})=>{if(m instanceof Date)return c?m.toISOString():`${o}=${m.toISOString()}`;if(i!=="deepObject"&&!e){let b=[];Object.entries(m).forEach(([p,w])=>{b=[...b,p,t?w:encodeURIComponent(w)]});let s=b.join(",");switch(i){case"form":return`${o}=${s}`;case"label":return`.${s}`;case"matrix":return`;${o}=${s}`;default:return s}}let a=up(i),d=Object.entries(m).map(([b,s])=>Zo({allowReserved:t,name:i==="deepObject"?`${o}[${b}]`:b,value:s})).join(a);return i==="label"||i==="matrix"?a+d:d},"serializeObjectParam");var pp=/\{[^{}]+\}/g,fp=n(({path:t,url:e})=>{let o=e,i=e.match(pp);if(i)for(let m of i){let c=!1,a=m.substring(1,m.length-1),d="simple";a.endsWith("*")&&(c=!0,a=a.substring(0,a.length-1)),a.startsWith(".")?(a=a.substring(1),d="label"):a.startsWith(";")&&(a=a.substring(1),d="matrix");let b=t[a];if(b==null)continue;if(Array.isArray(b)){o=o.replace(m,ds({explode:c,name:a,style:d,value:b}));continue}if(typeof b=="object"){o=o.replace(m,us({explode:c,name:a,style:d,value:b,valueOnly:!0}));continue}if(d==="matrix"){o=o.replace(m,`;${Zo({name:a,value:b})}`);continue}let s=encodeURIComponent(d==="label"?`.${b}`:b);o=o.replace(m,s)}return o},"defaultPathSerializer"),ol=n(({baseUrl:t,path:e,query:o,querySerializer:i,url:m})=>{let c=m.startsWith("/")?m:`/${m}`,a=(t??"")+c;e&&(a=fp({path:e,url:a}));let d=o?i(o):"";return d.startsWith("?")&&(d=d.substring(1)),d&&(a+=`?${d}`),a},"getUrl");var rl=n(({allowReserved:t,array:e,object:o}={})=>n(m=>{let c=[];if(m&&typeof m=="object")for(let a in m){let d=m[a];if(d!=null)if(Array.isArray(d)){let b=ds({allowReserved:t,explode:!0,name:a,style:"form",value:d,...e});b&&c.push(b)}else if(typeof d=="object"){let b=us({allowReserved:t,explode:!0,name:a,style:"deepObject",value:d,...o});b&&c.push(b)}else{let b=Zo({allowReserved:t,name:a,value:d});b&&c.push(b)}}return c.join("&")},"querySerializer"),"createQuerySerializer"),sl=n(t=>{if(!t)return"stream";let e=t.split(";")[0]?.trim();if(e){if(e.startsWith("application/json")||e.endsWith("+json"))return"json";if(e==="multipart/form-data")return"formData";if(["application/","audio/","image/","video/"].some(o=>e.startsWith(o)))return"blob";if(e.startsWith("text/"))return"text"}},"getParseAs"),mp=n((t,e)=>e?!!(t.headers.has(e)||t.query?.[e]||t.headers.get("Cookie")?.includes(`${e}=`)):!1,"checkForExistence"),il=n(async({security:t,...e})=>{for(let o of t){if(mp(e,o.name))continue;let i=await nl(o,e.auth);if(!i)continue;let m=o.name??"Authorization";switch(o.in){case"query":e.query||(e.query={}),e.query[m]=i;break;case"cookie":e.headers.append("Cookie",`${m}=${i}`);break;default:e.headers.set(m,i);break}}},"setAuthParams"),Js=n(t=>ol({baseUrl:t.baseUrl,path:t.path,query:t.query,querySerializer:typeof t.querySerializer=="function"?t.querySerializer:rl(t.querySerializer),url:t.url}),"buildUrl"),Ks=n((t,e)=>{let o={...t,...e};return o.baseUrl?.endsWith("/")&&(o.baseUrl=o.baseUrl.substring(0,o.baseUrl.length-1)),o.headers=ps(t.headers,e.headers),o},"mergeConfigs"),ps=n((...t)=>{let e=new Headers;for(let o of t){if(!o||typeof o!="object")continue;let i=o instanceof Headers?o.entries():Object.entries(o);for(let[m,c]of i)if(c===null)e.delete(m);else if(Array.isArray(c))for(let a of c)e.append(m,a);else c!==void 0&&e.set(m,typeof c=="object"?JSON.stringify(c):c)}return e},"mergeHeaders"),Dr=class{static{n(this,"Interceptors")}_fns;constructor(){this._fns=[]}clear(){this._fns=[]}getInterceptorIndex(e){return typeof e=="number"?this._fns[e]?e:-1:this._fns.indexOf(e)}exists(e){let o=this.getInterceptorIndex(e);return!!this._fns[o]}eject(e){let o=this.getInterceptorIndex(e);this._fns[o]&&(this._fns[o]=null)}update(e,o){let i=this.getInterceptorIndex(e);return this._fns[i]?(this._fns[i]=o,e):!1}use(e){return this._fns=[...this._fns,e],this._fns.length-1}},al=n(()=>({error:new Dr,request:new Dr,response:new Dr}),"createInterceptors"),hp=rl({allowReserved:!1,array:{explode:!0,style:"form"},object:{explode:!0,style:"deepObject"}}),gp={"Content-Type":"application/json"},Sr=n((t={})=>({...Ys,headers:gp,parseAs:"auto",querySerializer:hp,...t}),"createConfig");var Tr=n((t={})=>{let e=Ks(Sr(),t),o=n(()=>({...e}),"getConfig"),i=n(b=>(e=Ks(e,b),o()),"setConfig"),m=al(),c=n(async b=>{let s={...e,...b,fetch:b.fetch??e.fetch??globalThis.fetch,headers:ps(e.headers,b.headers),serializedBody:void 0};s.security&&await il({...s,security:s.security}),s.requestValidator&&await s.requestValidator(s),s.body&&s.bodySerializer&&(s.serializedBody=s.bodySerializer(s.body)),(s.serializedBody===void 0||s.serializedBody==="")&&s.headers.delete("Content-Type");let p=Js(s);return{opts:s,url:p}},"beforeRequest"),a=n(async b=>{let{opts:s,url:p}=await c(b),w={redirect:"follow",...s,body:s.serializedBody},f=new Request(p,w);for(let y of m.request._fns)y&&(f=await y(f,s));let v=s.fetch,I=await v(f);for(let y of m.response._fns)y&&(I=await y(I,f,s));let h={request:f,response:I};if(I.ok){if(I.status===204||I.headers.get("Content-Length")==="0")return s.responseStyle==="data"?{}:{data:{},...h};let y=(s.parseAs==="auto"?sl(I.headers.get("Content-Type")):s.parseAs)??"json",D;switch(y){case"arrayBuffer":case"blob":case"formData":case"json":case"text":D=await I[y]();break;case"stream":return s.responseStyle==="data"?I.body:{data:I.body,...h}}return y==="json"&&(s.responseValidator&&await s.responseValidator(D),s.responseTransformer&&(D=await s.responseTransformer(D))),s.responseStyle==="data"?D:{data:D,...h}}let S=await I.text(),C;try{C=JSON.parse(S)}catch{}let l=C??S,P=l;for(let y of m.error._fns)y&&(P=await y(l,I,f,s));if(P=P||{},s.throwOnError)throw P;return s.responseStyle==="data"?void 0:{error:P,...h}},"request"),d=n(b=>{let s=n(p=>a({...p,method:b}),"fn");return s.sse=async p=>{let{opts:w,url:f}=await c(p);return tl({...w,body:w.body,headers:w.headers,method:b,url:f})},s},"makeMethod");return{buildUrl:Js,connect:d("CONNECT"),delete:d("DELETE"),get:d("GET"),getConfig:o,head:d("HEAD"),interceptors:m,options:d("OPTIONS"),patch:d("PATCH"),post:d("POST"),put:d("PUT"),request:a,setConfig:i,trace:d("TRACE")}},"createClient");var yp={$body_:"body",$headers_:"headers",$path_:"path",$query_:"query"},Vx=Object.entries(yp);var ll=Tr(Sr({baseUrl:"http://localhost:4096"}));var _t=class{static{n(this,"_HeyApiClient")}_client=ll;constructor(e){e?.client&&(this._client=e.client)}},Xs=class extends _t{static{n(this,"Global")}event(e){return(e?.client??this._client).get.sse({url:"/global/event",...e})}},Zs=class extends _t{static{n(this,"Project")}list(e){return(e?.client??this._client).get({url:"/project",...e})}current(e){return(e?.client??this._client).get({url:"/project/current",...e})}},Qs=class extends _t{static{n(this,"Pty")}list(e){return(e?.client??this._client).get({url:"/pty",...e})}create(e){return(e?.client??this._client).post({url:"/pty",...e,headers:{"Content-Type":"application/json",...e?.headers}})}remove(e){return(e.client??this._client).delete({url:"/pty/{id}",...e})}get(e){return(e.client??this._client).get({url:"/pty/{id}",...e})}update(e){return(e.client??this._client).put({url:"/pty/{id}",...e,headers:{"Content-Type":"application/json",...e.headers}})}connect(e){return(e.client??this._client).get({url:"/pty/{id}/connect",...e})}},ei=class extends _t{static{n(this,"Config")}get(e){return(e?.client??this._client).get({url:"/config",...e})}update(e){return(e?.client??this._client).patch({url:"/config",...e,headers:{"Content-Type":"application/json",...e?.headers}})}providers(e){return(e?.client??this._client).get({url:"/config/providers",...e})}},ti=class extends _t{static{n(this,"Tool")}ids(e){return(e?.client??this._client).get({url:"/experimental/tool/ids",...e})}list(e){return(e.client??this._client).get({url:"/experimental/tool",...e})}},ni=class extends _t{static{n(this,"Instance")}dispose(e){return(e?.client??this._client).post({url:"/instance/dispose",...e})}},oi=class extends _t{static{n(this,"Path")}get(e){return(e?.client??this._client).get({url:"/path",...e})}},ri=class extends _t{static{n(this,"Vcs")}get(e){return(e?.client??this._client).get({url:"/vcs",...e})}},si=class extends _t{static{n(this,"Session")}list(e){return(e?.client??this._client).get({url:"/session",...e})}create(e){return(e?.client??this._client).post({url:"/session",...e,headers:{"Content-Type":"application/json",...e?.headers}})}status(e){return(e?.client??this._client).get({url:"/session/status",...e})}delete(e){return(e.client??this._client).delete({url:"/session/{id}",...e})}get(e){return(e.client??this._client).get({url:"/session/{id}",...e})}update(e){return(e.client??this._client).patch({url:"/session/{id}",...e,headers:{"Content-Type":"application/json",...e.headers}})}children(e){return(e.client??this._client).get({url:"/session/{id}/children",...e})}todo(e){return(e.client??this._client).get({url:"/session/{id}/todo",...e})}init(e){return(e.client??this._client).post({url:"/session/{id}/init",...e,headers:{"Content-Type":"application/json",...e.headers}})}fork(e){return(e.client??this._client).post({url:"/session/{id}/fork",...e,headers:{"Content-Type":"application/json",...e.headers}})}abort(e){return(e.client??this._client).post({url:"/session/{id}/abort",...e})}unshare(e){return(e.client??this._client).delete({url:"/session/{id}/share",...e})}share(e){return(e.client??this._client).post({url:"/session/{id}/share",...e})}diff(e){return(e.client??this._client).get({url:"/session/{id}/diff",...e})}summarize(e){return(e.client??this._client).post({url:"/session/{id}/summarize",...e,headers:{"Content-Type":"application/json",...e.headers}})}messages(e){return(e.client??this._client).get({url:"/session/{id}/message",...e})}prompt(e){return(e.client??this._client).post({url:"/session/{id}/message",...e,headers:{"Content-Type":"application/json",...e.headers}})}message(e){return(e.client??this._client).get({url:"/session/{id}/message/{messageID}",...e})}promptAsync(e){return(e.client??this._client).post({url:"/session/{id}/prompt_async",...e,headers:{"Content-Type":"application/json",...e.headers}})}command(e){return(e.client??this._client).post({url:"/session/{id}/command",...e,headers:{"Content-Type":"application/json",...e.headers}})}shell(e){return(e.client??this._client).post({url:"/session/{id}/shell",...e,headers:{"Content-Type":"application/json",...e.headers}})}revert(e){return(e.client??this._client).post({url:"/session/{id}/revert",...e,headers:{"Content-Type":"application/json",...e.headers}})}unrevert(e){return(e.client??this._client).post({url:"/session/{id}/unrevert",...e})}},ii=class extends _t{static{n(this,"Command")}list(e){return(e?.client??this._client).get({url:"/command",...e})}},ai=class extends _t{static{n(this,"Oauth")}authorize(e){return(e.client??this._client).post({url:"/provider/{id}/oauth/authorize",...e,headers:{"Content-Type":"application/json",...e.headers}})}callback(e){return(e.client??this._client).post({url:"/provider/{id}/oauth/callback",...e,headers:{"Content-Type":"application/json",...e.headers}})}},li=class extends _t{static{n(this,"Provider")}list(e){return(e?.client??this._client).get({url:"/provider",...e})}auth(e){return(e?.client??this._client).get({url:"/provider/auth",...e})}oauth=new ai({client:this._client})},ci=class extends _t{static{n(this,"Find")}text(e){return(e.client??this._client).get({url:"/find",...e})}files(e){return(e.client??this._client).get({url:"/find/file",...e})}symbols(e){return(e.client??this._client).get({url:"/find/symbol",...e})}},di=class extends _t{static{n(this,"File")}list(e){return(e.client??this._client).get({url:"/file",...e})}read(e){return(e.client??this._client).get({url:"/file/content",...e})}status(e){return(e?.client??this._client).get({url:"/file/status",...e})}},ui=class extends _t{static{n(this,"App")}log(e){return(e?.client??this._client).post({url:"/log",...e,headers:{"Content-Type":"application/json",...e?.headers}})}agents(e){return(e?.client??this._client).get({url:"/agent",...e})}},fs=class extends _t{static{n(this,"Auth")}remove(e){return(e.client??this._client).delete({url:"/mcp/{name}/auth",...e})}start(e){return(e.client??this._client).post({url:"/mcp/{name}/auth",...e})}callback(e){return(e.client??this._client).post({url:"/mcp/{name}/auth/callback",...e,headers:{"Content-Type":"application/json",...e.headers}})}authenticate(e){return(e.client??this._client).post({url:"/mcp/{name}/auth/authenticate",...e})}set(e){return(e.client??this._client).put({url:"/auth/{id}",...e,headers:{"Content-Type":"application/json",...e.headers}})}},pi=class extends _t{static{n(this,"Mcp")}status(e){return(e?.client??this._client).get({url:"/mcp",...e})}add(e){return(e?.client??this._client).post({url:"/mcp",...e,headers:{"Content-Type":"application/json",...e?.headers}})}connect(e){return(e.client??this._client).post({url:"/mcp/{name}/connect",...e})}disconnect(e){return(e.client??this._client).post({url:"/mcp/{name}/disconnect",...e})}auth=new fs({client:this._client})},fi=class extends _t{static{n(this,"Lsp")}status(e){return(e?.client??this._client).get({url:"/lsp",...e})}},mi=class extends _t{static{n(this,"Formatter")}status(e){return(e?.client??this._client).get({url:"/formatter",...e})}},hi=class extends _t{static{n(this,"Control")}next(e){return(e?.client??this._client).get({url:"/tui/control/next",...e})}response(e){return(e?.client??this._client).post({url:"/tui/control/response",...e,headers:{"Content-Type":"application/json",...e?.headers}})}},gi=class extends _t{static{n(this,"Tui")}appendPrompt(e){return(e?.client??this._client).post({url:"/tui/append-prompt",...e,headers:{"Content-Type":"application/json",...e?.headers}})}openHelp(e){return(e?.client??this._client).post({url:"/tui/open-help",...e})}openSessions(e){return(e?.client??this._client).post({url:"/tui/open-sessions",...e})}openThemes(e){return(e?.client??this._client).post({url:"/tui/open-themes",...e})}openModels(e){return(e?.client??this._client).post({url:"/tui/open-models",...e})}submitPrompt(e){return(e?.client??this._client).post({url:"/tui/submit-prompt",...e})}clearPrompt(e){return(e?.client??this._client).post({url:"/tui/clear-prompt",...e})}executeCommand(e){return(e?.client??this._client).post({url:"/tui/execute-command",...e,headers:{"Content-Type":"application/json",...e?.headers}})}showToast(e){return(e?.client??this._client).post({url:"/tui/show-toast",...e,headers:{"Content-Type":"application/json",...e?.headers}})}publish(e){return(e?.client??this._client).post({url:"/tui/publish",...e,headers:{"Content-Type":"application/json",...e?.headers}})}control=new hi({client:this._client})},yi=class extends _t{static{n(this,"Event")}subscribe(e){return(e?.client??this._client).get.sse({url:"/event",...e})}},ms=class extends _t{static{n(this,"OpencodeClient")}postSessionIdPermissionsPermissionId(e){return(e.client??this._client).post({url:"/session/{id}/permissions/{permissionID}",...e,headers:{"Content-Type":"application/json",...e.headers}})}global=new Xs({client:this._client});project=new Zs({client:this._client});pty=new Qs({client:this._client});config=new ei({client:this._client});tool=new ti({client:this._client});instance=new ni({client:this._client});path=new oi({client:this._client});vcs=new ri({client:this._client});session=new si({client:this._client});command=new ii({client:this._client});provider=new li({client:this._client});find=new ci({client:this._client});file=new di({client:this._client});app=new ui({client:this._client});mcp=new pi({client:this._client});lsp=new fi({client:this._client});formatter=new mi({client:this._client});tui=new gi({client:this._client});auth=new fs({client:this._client});event=new yi({client:this._client})};function bp(t,e){if(t)return e&&(t===e||t===encodeURIComponent(e))?e:t}n(bp,"pick");function wp(t,e){if(t.method!=="GET"&&t.method!=="HEAD")return t;let o=bp(t.headers.get("x-opencode-directory"),e);if(!o)return t;let i=new URL(t.url);i.searchParams.has("directory")||i.searchParams.set("directory",o);let m=new Request(i,t);return m.headers.delete("x-opencode-directory"),m}n(wp,"rewrite");function bi(t){t?.fetch||(t={...t,fetch:n(i=>(i.timeout=!1,fetch(i)),"customFetch")}),t?.directory&&(t.headers={...t.headers,"x-opencode-directory":encodeURIComponent(t.directory)});let e=Tr(t);return e.interceptors.request.use(o=>wp(o,t?.directory)),new ms({client:e})}n(bi,"createOpencodeClient");import wI from"cross-spawn";import vi from"os";import{setTimeout as kp}from"node:timers/promises";import{createServer as Ep}from"http";import Dp from"path";import wi from"fs/promises";import vp from"path";var xp=272e3,Ip=1440*60*1e3;function cl(t,e=new Date){let o=Array.isArray(t?.models)?t.models:Array.isArray(t)?t:[],i={};for(let m of o){let c=typeof m?.slug=="string"?m.slug:void 0,a=Number(m?.context_window);if(!c||!Number.isFinite(a)||a<=0)continue;let d=Number(m?.max_context_window);i[c]={contextWindow:a,...Number.isFinite(d)&&d>0?{maxContextWindow:d}:{}}}return{fetchedAt:e.toISOString(),models:i}}n(cl,"parsePlanCatalog");function dl(t,e,o){let i=o?.models[t];if(!i&&!/^gpt-\d/.test(t))return;let m=i?.contextWindow??xp,c=e.input??Math.max(0,e.context-e.output),a=c>0?Math.min(m,c):m;return{input:a,output:e.output,context:a+e.output}}n(dl,"planLimitFor");async function ul(t){try{let e=JSON.parse(await wi.readFile(t,"utf8"));if(e&&typeof e.fetchedAt=="string"&&e.models&&typeof e.models=="object")return e}catch{}}n(ul,"readPlanCatalog");async function pl(t,e){await wi.mkdir(vp.dirname(t),{recursive:!0}),await wi.writeFile(t,JSON.stringify(e,null,2))}n(pl,"writePlanCatalog");function fl(t,e=Date.now()){if(!t||Object.keys(t.models).length===0)return!0;let o=Date.parse(t.fetchedAt);return!Number.isFinite(o)||e-o>Ip}n(fl,"planCatalogStale");var Pr=Ae.create({service:"plugin.codex"}),Or="app_EMoamEEZ73f0CkXaXp7hrann",Jn="https://auth.openai.com",Sp="https://chatgpt.com/backend-api/codex/responses",Tp="https://chatgpt.com/backend-api/codex/models",Pp="0.155.0",po=1455,Op=3e3;async function _p(){let t=Rp(43),o=new TextEncoder().encode(t),i=await crypto.subtle.digest("SHA-256",o),m=gl(i);return{verifier:t,challenge:m}}n(_p,"generatePKCE");function Rp(t){let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~",o=crypto.getRandomValues(new Uint8Array(t));return Array.from(o).map(i=>e[i%e.length]).join("")}n(Rp,"generateRandomString");function gl(t){let e=new Uint8Array(t),o=String.fromCharCode(...e);return btoa(o).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}n(gl,"base64UrlEncode");function Cp(){return gl(crypto.getRandomValues(new Uint8Array(32)).buffer)}n(Cp,"generateState");function ml(t){let e=t.split(".");if(e.length===3)try{return JSON.parse(Buffer.from(e[1],"base64url").toString())}catch{return}}n(ml,"parseJwtClaims");function hl(t){return t.chatgpt_account_id||t["https://api.openai.com/auth"]?.chatgpt_account_id||t.organizations?.[0]?.id}n(hl,"extractAccountIdFromClaims");function xi(t){if(t.id_token){let e=ml(t.id_token),o=e&&hl(e);if(o)return o}if(t.access_token){let e=ml(t.access_token);return e?hl(e):void 0}}n(xi,"extractAccountId");function Ap(t,e,o){let i=new URLSearchParams({response_type:"code",client_id:Or,redirect_uri:t,scope:"openid profile email offline_access",code_challenge:e.challenge,code_challenge_method:"S256",id_token_add_organizations:"true",codex_cli_simplified_flow:"true",state:o,originator:"opencode"});return`${Jn}/oauth/authorize?${i.toString()}`}n(Ap,"buildAuthorizeUrl");async function Mp(t,e,o){let i=await fetch(`${Jn}/oauth/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",code:t,redirect_uri:e,client_id:Or,code_verifier:o.verifier}).toString()});if(!i.ok)throw new Error(`Token exchange failed: ${i.status}`);return i.json()}n(Mp,"exchangeCodeForTokens");async function jp(t,e=Jn){let o=await fetch(`${e}/oauth/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:t,client_id:Or}).toString()});if(!o.ok)throw new Error(`Token refresh failed: ${o.status}`);return o.json()}n(jp,"refreshAccessToken");var Lp=`<!doctype html>
41
41
  <html>
42
42
  <head>
43
43
  <title>OpenCode - Codex Authorization Successful</title>
@@ -123,7 +123,7 @@ Please rewrite the input so it satisfies the expected schema.`,{cause:h})}let v=
123
123
  <div class="error">${t}</div>
124
124
  </div>
125
125
  </body>
126
- </html>`,"HTML_ERROR"),Co,dn;async function Lp(){return Co?{port:po,redirectUri:`http://localhost:${po}/auth/callback`}:(Co=kp((t,e)=>{let o=new URL(t.url||"/",`http://localhost:${po}`);if(o.pathname==="/auth/callback"){let i=o.searchParams.get("code"),m=o.searchParams.get("state"),c=o.searchParams.get("error"),a=o.searchParams.get("error_description");if(c){let b=a||c;dn?.reject(new Error(b)),dn=void 0,e.writeHead(200,{"Content-Type":"text/html"}),e.end(Ii(b));return}if(!i){let b="Missing authorization code";dn?.reject(new Error(b)),dn=void 0,e.writeHead(400,{"Content-Type":"text/html"}),e.end(Ii(b));return}if(!dn||m!==dn.state){let b="Invalid state - potential CSRF attack";dn?.reject(new Error(b)),dn=void 0,e.writeHead(400,{"Content-Type":"text/html"}),e.end(Ii(b));return}let d=dn;dn=void 0,Ap(i,`http://localhost:${po}/auth/callback`,d.pkce).then(b=>d.resolve(b)).catch(b=>d.reject(b)),e.writeHead(200,{"Content-Type":"text/html"}),e.end(jp);return}if(o.pathname==="/cancel"){dn?.reject(new Error("Login cancelled")),dn=void 0,e.writeHead(200),e.end("Login cancelled");return}e.writeHead(404),e.end("Not found")}),await new Promise((t,e)=>{Co.listen(po,()=>{Pr.info("codex oauth server started",{port:po}),t()}),Co.on("error",e)}),{port:po,redirectUri:`http://localhost:${po}/auth/callback`})}n(Lp,"startOAuthServer");function Np(){Co&&(Co.close(()=>{Pr.info("codex oauth server stopped")}),Co=void 0)}n(Np,"stopOAuthServer");function Up(t,e){return new Promise((o,i)=>{let m=setTimeout(()=>{dn&&(dn=void 0,i(new Error("OAuth callback timeout - authorization took too long")))},3e5);dn={pkce:t,state:e,resolve:n(c=>{clearTimeout(m),o(c)},"resolve"),reject:n(c=>{clearTimeout(m),i(c)},"reject")}})}n(Up,"waitForOAuthCallback");async function yl(t,e={}){let o=e.issuer??Jn,i=e.codexApiEndpoint??Dp;return{auth:{provider:"openai",async loader(m,c){if((await m()).type!=="oauth")return{};let d=new Set(["gpt-5.5","gpt-5.2","gpt-5.3-codex","gpt-5.3-codex-spark","gpt-5.4","gpt-5.4-mini"]);for(let v of Object.keys(c.models)){if(v.includes("codex")||d.has(v))continue;let I=v.match(/^gpt-(\d+)(?:\.(\d+))?(?:-|$)/);if(I){let h=Number(I[1]),S=Number(I[2]??0);if(h>5||h===5&&S>4)continue}delete c.models[v]}for(let v of Object.values(c.models))v.cost={input:0,output:0,cache:{read:0,write:0}};let b=Ep.join(wt.Path.state,"codex-plan-models.json"),s=n(v=>{for(let[I,h]of Object.entries(c.models)){if(!h.limit)continue;let S=dl(h.api?.id??I,h.limit,v);S&&(h.limit=S)}},"applyPlanLimits"),p=await ul(b);s(p);let w,f=n(async function(I,h){h?.headers&&(h.headers instanceof Headers?(h.headers.delete("authorization"),h.headers.delete("Authorization")):Array.isArray(h.headers)?h.headers=h.headers.filter(([D])=>D.toLowerCase()!=="authorization"):(delete h.headers.authorization,delete h.headers.Authorization));let S=await m();if(S.type!=="oauth")return fetch(I,h);let C=S;if(!S.access||S.expires<Date.now()){w||(Pr.info("refreshing codex access token"),w=Mp(S.refresh,o).then(async T=>{let R=xi(T)||C.accountId;return await t.client.auth.set({path:{id:"openai"},body:{type:"oauth",refresh:T.refresh_token,access:T.access_token,expires:Date.now()+(T.expires_in??3600)*1e3,...R&&{accountId:R}}}),{access:T.access_token,accountId:R}}).finally(()=>{w=void 0}));let D=await w;S.access=D.access,C.accountId=D.accountId}let l=new Headers;if(h?.headers)if(h.headers instanceof Headers)h.headers.forEach((D,T)=>l.set(T,D));else if(Array.isArray(h.headers))for(let[D,T]of h.headers)T!==void 0&&l.set(D,String(T));else for(let[D,T]of Object.entries(h.headers))T!==void 0&&l.set(D,String(T));l.set("authorization",`Bearer ${S.access}`),C.accountId&&l.set("ChatGPT-Account-Id",C.accountId);let P=I instanceof URL?I:new URL(typeof I=="string"?I:I.url),y=P.pathname.includes("/v1/responses")||P.pathname.includes("/chat/completions")?new URL(i):P;return fetch(y,{...h,headers:l})},"planFetch");return fl(p)&&e.refreshPlanCatalog!==!1&&!e.codexApiEndpoint&&f(`${Sp}?client_version=${Tp}`,{method:"GET"}).then(async v=>{if(!v.ok)throw new Error(`models list ${v.status}`);let I=cl(await v.json());Object.keys(I.models).length!==0&&(await pl(b,I),s(I),Pr.info("plan model list refreshed",{models:Object.keys(I.models).length}))}).catch(v=>Pr.warn("plan model list not refreshed; keeping the cached or default windows",{error:String(v)})),{apiKey:Ia,fetch:f}},methods:[{label:"ChatGPT Pro/Plus (browser)",type:"oauth",authorize:n(async()=>{let{redirectUri:m}=await Lp(),c=await Op(),a=Rp(),d=Cp(m,c,a),b=Up(c,a);return{url:d,instructions:"Complete authorization in your browser. This window will close automatically.",method:"auto",callback:n(async()=>{let s=await b;Np();let p=xi(s);return{type:"success",refresh:s.refresh_token,access:s.access_token,expires:Date.now()+(s.expires_in??3600)*1e3,accountId:p}},"callback")}},"authorize")},{label:"ChatGPT Pro/Plus (headless)",type:"oauth",authorize:n(async()=>{let m=await fetch(`${Jn}/api/accounts/deviceauth/usercode`,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":`opencode/${Jt.VERSION}`},body:JSON.stringify({client_id:Or})});if(!m.ok)throw new Error("Failed to initiate device authorization");let c=await m.json(),a=Math.max(parseInt(c.interval)||5,1)*1e3;return{url:`${Jn}/codex/device`,instructions:`Enter code: ${c.user_code}`,method:"auto",async callback(){for(;;){let d=await fetch(`${Jn}/api/accounts/deviceauth/token`,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":`opencode/${Jt.VERSION}`},body:JSON.stringify({device_auth_id:c.device_auth_id,user_code:c.user_code})});if(d.ok){let b=await d.json(),s=await fetch(`${Jn}/oauth/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",code:b.authorization_code,redirect_uri:`${Jn}/deviceauth/callback`,client_id:Or,code_verifier:b.code_verifier}).toString()});if(!s.ok)throw new Error(`Token exchange failed: ${s.status}`);let p=await s.json();return{type:"success",refresh:p.refresh_token,access:p.access_token,expires:Date.now()+(p.expires_in??3600)*1e3,accountId:xi(p)}}if(d.status!==403&&d.status!==404)return{type:"failed"};await Ip(a+Pp)}}}},"authorize")},{label:"Manually enter API Key",type:"api"}]},"chat.headers":n(async(m,c)=>{m.model.providerID==="openai"&&(c.headers.originator="opencode",c.headers["User-Agent"]=`opencode/${Jt.VERSION} (${vi.platform()} ${vi.release()}; ${vi.arch()})`,c.headers["session-id"]=m.sessionID,c.headers["thread-id"]=m.sessionID)},"chat.headers"),"chat.params":n(async(m,c)=>{m.model.providerID==="openai"&&(c.maxOutputTokens=void 0)},"chat.params")}}n(yl,"CodexAuthPlugin");import{setTimeout as Ei}from"node:timers/promises";import{z as gt}from"zod";var ki;(i=>{i.schema=gt.object({data:gt.array(gt.object({model_picker_enabled:gt.boolean(),id:gt.string(),name:gt.string(),version:gt.string(),supported_endpoints:gt.array(gt.string()).optional(),capabilities:gt.object({family:gt.string(),limits:gt.object({max_context_window_tokens:gt.number(),max_output_tokens:gt.number(),max_prompt_tokens:gt.number(),vision:gt.object({max_prompt_image_size:gt.number(),max_prompt_images:gt.number(),supported_media_types:gt.array(gt.string())}).optional()}),supports:gt.object({adaptive_thinking:gt.boolean().optional(),max_thinking_budget:gt.number().optional(),min_thinking_budget:gt.number().optional(),reasoning_effort:gt.array(gt.string()).optional(),streaming:gt.boolean(),structured_outputs:gt.boolean().optional(),tool_calls:gt.boolean(),vision:gt.boolean().optional()})})}))});function e(m,c,a,d){let b=!!c.capabilities.supports.adaptive_thinking||!!c.capabilities.supports.reasoning_effort?.length||c.capabilities.supports.max_thinking_budget!==void 0||c.capabilities.supports.min_thinking_budget!==void 0,s=(c.capabilities.supports.vision??!1)||(c.capabilities.limits.vision?.supported_media_types??[]).some(p=>p.startsWith("image/"));return{id:m,providerID:"github-copilot",api:{id:c.id,url:a,npm:"@ai-sdk/github-copilot"},status:"active",limit:{context:c.capabilities.limits.max_context_window_tokens,input:c.capabilities.limits.max_prompt_tokens,output:c.capabilities.limits.max_output_tokens},capabilities:{temperature:d?.capabilities.temperature??!0,reasoning:d?.capabilities.reasoning??b,attachment:d?.capabilities.attachment??!0,toolcall:c.capabilities.supports.tool_calls,input:{text:!0,audio:!1,image:s,video:!1,pdf:!1},output:{text:!0,audio:!1,image:!1,video:!1,pdf:!1},interleaved:!1},family:d?.family??c.capabilities.family,name:d?.name??c.name,cost:{input:0,output:0,cache:{read:0,write:0}},options:d?.options??{},headers:d?.headers??{},release_date:d?.release_date??(c.version.startsWith(`${c.id}-`)?c.version.slice(c.id.length+1):c.version),variants:d?.variants??{}}}n(e,"build");async function o(m,c={},a={}){let d=await fetch(`${m}/models`,{headers:c,signal:AbortSignal.timeout(5e3)}).then(async p=>{if(!p.ok)throw new Error(`Failed to fetch models: ${p.status}`);return i.schema.parse(await p.json())}),b={...a},s=new Map(d.data.filter(p=>p.model_picker_enabled).map(p=>[p.id,p]));for(let[p,w]of Object.entries(b)){let f=s.get(w.api.id);if(!f){delete b[p];continue}b[p]=e(p,f,m,w)}for(let[p,w]of s)p in b||(b[p]=e(p,w,m));return b}i.get=o,n(o,"get")})(ki||={});var zp=Ae.create({service:"plugin.copilot"}),bl="Ov23li8tweQw6odWQebz",Di=3e3;function xl(t){return t.replace(/^https?:\/\//,"").replace(/\/$/,"")}n(xl,"normalizeDomain");function Fp(t){return{DEVICE_CODE_URL:`https://${t}/login/device/code`,ACCESS_TOKEN_URL:`https://${t}/login/oauth/access_token`}}n(Fp,"getUrls");function wl(t){return t?`https://copilot-api.${xl(t)}`:"https://api.githubcopilot.com"}n(wl,"base");function vl(t){return{...t,api:{...t.api,npm:"@ai-sdk/github-copilot"}}}n(vl,"fix");async function Il(t){let e=t.client;return{provider:{id:"github-copilot",async models(o,i){return i.auth?.type!=="oauth"?Object.fromEntries(Object.entries(o.models).map(([m,c])=>[m,vl(c)])):ki.get(wl(i.auth.enterpriseUrl),{Authorization:`Bearer ${i.auth.refresh}`,"User-Agent":`opencode/${Jt.VERSION}`},o.models).catch(m=>(zp.error("failed to fetch copilot models",{error:m}),Object.fromEntries(Object.entries(o.models).map(([c,a])=>[c,vl(a)]))))}},auth:{provider:"github-copilot",async loader(o){let i=await o();return!i||i.type!=="oauth"?{}:{baseURL:wl(i.enterpriseUrl),apiKey:"",async fetch(c,a){let d=await o();if(d.type!=="oauth")return fetch(c,a);let b=c instanceof URL?c.href:c.toString(),{isVision:s,isAgent:p}=Ct(()=>{try{let f=typeof a?.body=="string"?JSON.parse(a.body):a?.body;if(f?.messages&&b.includes("completions")){let v=f.messages[f.messages.length-1];return{isVision:f.messages.some(I=>Array.isArray(I.content)&&I.content.some(h=>h.type==="image_url")),isAgent:v?.role!=="user"}}if(f?.input){let v=f.input[f.input.length-1];return{isVision:f.input.some(I=>Array.isArray(I?.content)&&I.content.some(h=>h.type==="input_image")),isAgent:v?.role!=="user"}}if(f?.messages){let v=f.messages[f.messages.length-1],I=Array.isArray(v?.content)&&v.content.some(h=>h?.type!=="tool_result");return{isVision:f.messages.some(h=>Array.isArray(h?.content)&&h.content.some(S=>S?.type==="image"||S?.type==="tool_result"&&Array.isArray(S?.content)&&S.content.some(C=>C?.type==="image"))),isAgent:!(v?.role==="user"&&I)}}}catch{}return{isVision:!1,isAgent:!1}}),w={"x-initiator":p?"agent":"user",...a?.headers,"User-Agent":`opencode/${Jt.VERSION}`,Authorization:`Bearer ${d.refresh}`,"Openai-Intent":"conversation-edits"};return s&&(w["Copilot-Vision-Request"]="true"),delete w["x-api-key"],delete w.authorization,fetch(c,{...a,headers:w})}}},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 i=o.deploymentType||"github.com",m="github.com";if(i==="enterprise"){let b=o.enterpriseUrl;m=xl(b)}let c=Fp(m),a=await fetch(c.DEVICE_CODE_URL,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json","User-Agent":`opencode/${Jt.VERSION}`},body:JSON.stringify({client_id:bl,scope:"read:user"})});if(!a.ok)throw new Error("Failed to initiate device authorization");let d=await a.json();return{url:d.verification_uri,instructions:`Enter code: ${d.user_code}`,method:"auto",async callback(){for(;;){let b=await fetch(c.ACCESS_TOKEN_URL,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json","User-Agent":`opencode/${Jt.VERSION}`},body:JSON.stringify({client_id:bl,device_code:d.device_code,grant_type:"urn:ietf:params:oauth:grant-type:device_code"})});if(!b.ok)return{type:"failed"};let s=await b.json();if(s.access_token){let p={type:"success",refresh:s.access_token,access:s.access_token,expires:0};return i==="enterprise"&&(p.enterpriseUrl=m),p}if(s.error==="authorization_pending"){await Ei(d.interval*1e3+Di);continue}if(s.error==="slow_down"){let p=(d.interval+5)*1e3,w=s.interval;w&&typeof w=="number"&&w>0&&(p=w*1e3),await Ei(p+Di);continue}if(s.error)return{type:"failed"};await Ei(d.interval*1e3+Di)}}}}}]},"chat.params":n(async(o,i)=>{o.model.providerID.includes("github-copilot")&&o.model.api.id.includes("gpt")&&(i.maxOutputTokens=void 0)},"chat.params"),"chat.headers":n(async(o,i)=>{if(!o.model.providerID.includes("github-copilot"))return;if(o.model.api.npm==="@ai-sdk/anthropic"&&(i.headers["anthropic-beta"]="interleaved-thinking-2025-05-14"),(await e.session.message({path:{id:o.message.sessionID,messageID:o.message.id},query:{directory:t.directory},throwOnError:!0}).catch(()=>{}))?.data.parts?.some(a=>a.type==="compaction")){i.headers["x-initiator"]="agent";return}let c=await e.session.get({path:{id:o.sessionID},query:{directory:t.directory},throwOnError:!0}).catch(()=>{});!c||!c.data.parentID||(i.headers["x-initiator"]="agent")},"chat.headers")}}n(Il,"CopilotAuthPlugin");import{gitlabAuthPlugin as qp}from"opencode-gitlab-auth";import{PoeAuthPlugin as $p}from"opencode-poe-auth";async function kl(t){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(kl,"CloudflareWorkersAuthPlugin");async function El(t){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(El,"CloudflareAIGatewayAuthPlugin");import{Effect as en,Layer as Ti,ServiceMap as Wp,Stream as Bp}from"effect";var Si;(c=>{function t(a){let d=Be.pluginSpecifier(a);return{spec:d,options:Be.pluginOptions(a),deprecated:Sa(d)}}n(t,"plan");async function e(a,d){let b="";try{b=await _a(a.spec)}catch(p){return{ok:!1,stage:"install",error:p}}if(!b)return{ok:!1,stage:"install",error:new Error(`Plugin ${a.spec} target is empty`)};let s;try{s=await Ra(a.spec,b,d)}catch(p){return{ok:!1,stage:"entry",error:p}}if(!s.entry)return{ok:!1,stage:"missing",value:{...a,source:s.source,target:s.target,pkg:s.pkg,message:`Plugin ${a.spec} does not expose a ${d} entrypoint`}};if(s.source==="npm")try{await Oa(s.target,Jt.VERSION,s.pkg)}catch(p){return{ok:!1,stage:"compatibility",error:p}}return{ok:!0,value:{...a,source:s.source,target:s.target,entry:s.entry,pkg:s.pkg}}}c.resolve=e,n(e,"resolve");async function o(a){let d;try{d=await import(a.entry)}catch(b){return{ok:!1,error:b}}return d?{ok:!0,value:{...a,mod:d}}:{ok:!1,error:new Error(`Plugin ${a.spec} module is empty`)}}c.load=o,n(o,"load");async function i(a,d,b,s,p,w){let f=a.plan;if(f.deprecated)return;w?.start?.(a,b);let v=await e(f,d);if(!v.ok){if(v.stage==="missing"){if(p){let h=await p(v.value,a.origin,b);if(h!==void 0)return h}w?.missing?.(a,b,v.value.message,v.value);return}w?.error?.(a,b,v.stage,v.error);return}let I=await o(v.value);if(!I.ok){w?.error?.(a,b,"load",I.error,v.value);return}return s?s(I.value,a.origin,b):I.value}n(i,"attempt");async function m(a){let d=a.items.map(w=>({origin:w,plan:t(w.spec)})),b=[];for(let w of d)b.push(i(w,a.kind,!1,a.finish,a.missing,a.report));let s=await Promise.all(b);if(a.wait){let w;for(let f=0;f<d.length;f++){if(s[f]!==void 0)continue;let v=d[f];!v||Pa(v.plan.spec)!=="file"||(w??=a.wait(),await w,s[f]=await i(v,a.kind,!0,a.finish,a.missing,a.report))}}let p=[];for(let w of s)w!==void 0&&p.push(w);return p}c.loadExternal=m,n(m,"loadExternal")})(Si||={});var Mt;(I=>{let t=Ae.create({service:"plugin"});class e extends Wp.Service()("@opencode/Plugin"){static{n(this,"Service")}}I.Service=e;let o=[yl,Il,qp,$p,kl,El];function i(h){return typeof h=="function"}n(i,"isServerPlugin");function m(h){if(i(h))return h;if(!(!h||typeof h!="object"||!("server"in h))&&i(h.server))return h.server}n(m,"getServerPlugin");function c(h){let S=new Set,C=[];for(let[l,P]of Object.entries(h)){if(l==="__esModule"||l==="__name"||l==="__export"||l==="module.exports"||S.has(P))continue;S.add(P);let y=P;y&&typeof y=="object"&&"default"in y&&typeof y.default=="function"&&(y=y.default);let D=m(y);D&&C.push(D)}if(C.length===0)throw new TypeError("Plugin export is not a function");return C}n(c,"getLegacyPlugins");function a(h,S){en.runFork(h.publish(Ke.Event.Error,{error:new tt.Unknown({message:S}).toObject()}))}n(a,"publishPluginError");async function d(h,S,C){let l=Aa(h.mod,h.spec,"server","detect");if(l){await Ma(h.source,h.spec,h.target,Ca(l.id,h.spec),h.pkg),C.push(await l.server(S,h.options));return}for(let P of c(h.mod))C.push(await P(S,h.options))}n(d,"applyPlugin"),I.layer=Ti.effect(e,en.gen(function*(){let h=yield*Me.Service,S=yield*Be.Service,C=yield*ae.make(en.fn("Plugin.state")(function*(D){let T=[],{Server:R}=yield*en.promise(()=>import("./server-VHCQ5HOC.js")),_=bi({baseUrl:"http://localhost:4096",directory:D.directory,headers:ze.OPENCODE_SERVER_PASSWORD?{Authorization:`Basic ${Buffer.from(`${ze.OPENCODE_SERVER_USERNAME??"opencode"}:${ze.OPENCODE_SERVER_PASSWORD}`).toString("base64")}`}:void 0,fetch:n(async(...r)=>R.Default().fetch(...r),"fetch")}),E=yield*S.get(),x={client:_,project:D.project,worktree:D.worktree,directory:D.directory,get serverUrl(){return R.url??new URL("http://localhost:4096")},$:typeof Bun>"u"?void 0:Bun.$};for(let r of o){t.info("loading internal plugin",{name:r.name});let u=yield*en.tryPromise({try:n(()=>r(x),"try"),catch:n(g=>{t.error("failed to load internal plugin",{name:r.name,error:g})},"catch")}).pipe(en.option);u._tag==="Some"&&T.push(u.value)}let k=ze.OPENCODE_PURE?[]:E.plugin_origins??[];ze.OPENCODE_PURE&&E.plugin_origins?.length&&t.info("skipping external plugins in pure mode",{count:E.plugin_origins.length}),k.length&&(yield*S.waitForDependencies());let M=yield*en.promise(()=>Si.loadExternal({items:k,kind:"server",report:{start(r){t.info("loading plugin",{path:r.plan.spec})},missing(r,u,g){t.warn("plugin has no server entrypoint",{path:r.plan.spec,message:g})},error(r,u,g,L,j){let z=r.plan.spec,V=L instanceof Error?L.cause??L:L,H=g==="load"?ao(L):ao(V);if(g==="install"){let G=Ta(z);t.error("failed to install plugin",{pkg:G.pkg,version:G.version,error:H}),a(h,`Failed to install plugin ${G.pkg}@${G.version}: ${H}`);return}if(g==="compatibility"){t.warn("plugin incompatible",{path:z,error:H}),a(h,`Plugin ${z} skipped: ${H}`);return}if(g==="entry"){t.error("failed to resolve plugin server entry",{path:z,error:H}),a(h,`Failed to load plugin ${z}: ${H}`);return}t.error("failed to load plugin",{path:z,target:j?.entry,error:H}),a(h,`Failed to load plugin ${z}: ${H}`)}}}));for(let r of M)r&&(yield*en.tryPromise({try:n(()=>d(r,x,T),"try"),catch:n(u=>{let g=ao(u);return t.error("failed to load plugin",{path:r.spec,error:g}),g},"catch")}).pipe(en.catch(u=>h.publish(Ke.Event.Error,{error:new tt.Unknown({message:`Failed to load plugin ${r.spec}: ${u}`}).toObject()}))));for(let r of T)yield*en.tryPromise({try:n(()=>Promise.resolve(r.config?.(E)),"try"),catch:n(u=>{t.error("plugin config hook failed",{error:u})},"catch")}).pipe(en.ignore);return yield*h.subscribeAll().pipe(Bp.runForEach(r=>en.sync(()=>{for(let u of T)u.event?.({event:r})})),en.forkScoped),{hooks:T}})),l=en.fn("Plugin.trigger")(function*(D,T,R){if(!D)return R;let _=yield*ae.get(C);for(let E of _.hooks){let x=E[D];if(x)try{yield*en.promise(async()=>x(T,R))}catch(k){t.error("plugin hook error",{name:D,error:k instanceof Error?k.message:String(k)})}}return R}),P=en.fn("Plugin.list")(function*(){return(yield*ae.get(C)).hooks}),y=en.fn("Plugin.init")(function*(){yield*ae.get(C)});return e.of({trigger:l,list:P,init:y})})),I.defaultLayer=I.layer.pipe(Ti.provide(Me.layer),Ti.provide(Be.defaultLayer));let{runPromise:p}=qe(e,I.defaultLayer);async function w(h,S,C){return p(l=>l.trigger(h,S,C))}I.trigger=w,n(w,"trigger");async function f(){return p(h=>h.list())}I.list=f,n(f,"list");async function v(){return p(h=>h.init())}I.init=v,n(v,"init")})(Mt||={});import om from"path";import{Effect as Je,Layer as Cr,ServiceMap as rm}from"effect";import{createAmazonBedrock as sm}from"@ai-sdk/amazon-bedrock";import{createAnthropic as im}from"@ai-sdk/anthropic";import{createAzure as am}from"@ai-sdk/azure";import{createGoogleGenerativeAI as lm}from"@ai-sdk/google";import{createVertex as cm}from"@ai-sdk/google-vertex";import{createVertexAnthropic as dm}from"@ai-sdk/google-vertex/anthropic";import{createOpenAI as um}from"@ai-sdk/openai";import{createOpenAICompatible as ac}from"@ai-sdk/openai-compatible";import{createOpenRouter as pm}from"@openrouter/ai-sdk-provider";import{withoutTrailingSlash as Kf,withUserAgentSuffix as Xf}from"@ai-sdk/provider-utils";import{InvalidResponseDataError as _i}from"@ai-sdk/provider";import{combineHeaders as Pl,createEventSourceResponseHandler as Jp,createJsonErrorResponseHandler as Kp,createJsonResponseHandler as Xp,generateId as gs,isParsableJson as Ol,parseProviderOptions as _l,postJsonToApi as Rl}from"@ai-sdk/provider-utils";import{z as Ye}from"zod/v4";import{UnsupportedFunctionalityError as Gp}from"@ai-sdk/provider";import{convertToBase64 as Hp}from"@ai-sdk/provider-utils";function _r(t){return t?.providerOptions?.copilot??{}}n(_r,"getOpenAIMetadata");function Dl(t){let e=[];for(let{role:o,content:i,...m}of t){let c=_r({...m});switch(o){case"system":{e.push({role:"system",content:i,...c});break}case"user":{if(i.length===1&&i[0].type==="text"){e.push({role:"user",content:i[0].text,..._r(i[0])});break}e.push({role:"user",content:i.map(a=>{let d=_r(a);switch(a.type){case"text":return{type:"text",text:a.text,...d};case"file":if(a.mediaType.startsWith("image/")){let b=a.mediaType==="image/*"?"image/jpeg":a.mediaType;return{type:"image_url",image_url:{url:a.data instanceof URL?a.data.toString():`data:${b};base64,${Hp(a.data)}`},...d}}else throw new Gp({functionality:`file part media type ${a.mediaType}`})}}),...c});break}case"assistant":{let a="",d,b,s=[];for(let p of i){let w=_r(p),f=p.providerOptions?.copilot?.reasoningOpaque;switch(f&&!b&&(b=f),p.type){case"text":{a+=p.text;break}case"reasoning":{p.text&&(d=p.text);break}case"tool-call":{s.push({id:p.toolCallId,type:"function",function:{name:p.toolName,arguments:JSON.stringify(p.input)},...w});break}}}e.push({role:"assistant",content:a||null,tool_calls:s.length>0?s:void 0,reasoning_text:b?d:void 0,reasoning_opaque:b,...c});break}case"tool":{for(let a of i){if(a.type==="tool-approval-response")continue;let d=a.output,b;switch(d.type){case"text":case"error-text":b=d.value;break;case"execution-denied":b=d.reason??"Tool execution denied.";break;case"content":case"json":case"error-json":b=JSON.stringify(d.value);break}let s=_r(a);e.push({role:"tool",tool_call_id:a.toolCallId,content:b,...s})}break}default:{let a=o;throw new Error(`Unsupported role: ${a}`)}}}return e}n(Dl,"convertToOpenAICompatibleChatMessages");function Pi({id:t,model:e,created:o}){return{id:t??void 0,modelId:e??void 0,timestamp:o!=null?new Date(o*1e3):void 0}}n(Pi,"getResponseMetadata");function Oi(t){switch(t){case"stop":return"stop";case"length":return"length";case"content_filter":return"content-filter";case"function_call":case"tool_calls":return"tool-calls";default:return"other"}}n(Oi,"mapOpenAICompatibleFinishReason");import{z as Rr}from"zod/v4";var hs=Rr.object({user:Rr.string().optional(),reasoningEffort:Rr.string().optional(),textVerbosity:Rr.string().optional(),thinking_budget:Rr.number().optional()});import{z as fo}from"zod/v4";var Vp=fo.object({error:fo.object({message:fo.string(),type:fo.string().nullish(),param:fo.any().nullish(),code:fo.union([fo.string(),fo.number()]).nullish()})}),Sl={errorSchema:Vp,errorToMessage:n(t=>t.error.message,"errorToMessage")};import{UnsupportedFunctionalityError as Yp}from"@ai-sdk/provider";function Tl({tools:t,toolChoice:e}){t=t?.length?t:void 0;let o=[];if(t==null)return{tools:void 0,toolChoice:void 0,toolWarnings:o};let i=[];for(let c of t)c.type==="provider"?o.push({type:"unsupported",feature:`tool type: ${c.type}`}):i.push({type:"function",function:{name:c.name,description:c.description,parameters:c.inputSchema}});if(e==null)return{tools:i,toolChoice:void 0,toolWarnings:o};let m=e.type;switch(m){case"auto":case"none":case"required":return{tools:i,toolChoice:m,toolWarnings:o};case"tool":return{tools:i,toolChoice:{type:"function",function:{name:e.toolName}},toolWarnings:o};default:{let c=m;throw new Yp({functionality:`tool choice type: ${c}`})}}}n(Tl,"prepareTools");var ys=class{static{n(this,"OpenAICompatibleChatLanguageModel")}specificationVersion="v3";supportsStructuredOutputs;modelId;config;failedResponseHandler;chunkSchema;constructor(e,o){this.modelId=e,this.config=o;let i=o.errorStructure??Sl;this.chunkSchema=Qp(i.errorSchema),this.failedResponseHandler=Kp(i),this.supportsStructuredOutputs=o.supportsStructuredOutputs??!1}get provider(){return this.config.provider}get providerOptionsName(){return this.config.provider.split(".")[0].trim()}get supportedUrls(){return this.config.supportedUrls?.()??{}}async getArgs({prompt:e,maxOutputTokens:o,temperature:i,topP:m,topK:c,frequencyPenalty:a,presencePenalty:d,providerOptions:b,stopSequences:s,responseFormat:p,seed:w,toolChoice:f,tools:v}){let I=[],h=Object.assign(await _l({provider:"copilot",providerOptions:b,schema:hs})??{},await _l({provider:this.providerOptionsName,providerOptions:b,schema:hs})??{});c!=null&&I.push({type:"unsupported",feature:"topK"}),p?.type==="json"&&p.schema!=null&&!this.supportsStructuredOutputs&&I.push({type:"unsupported",feature:"responseFormat",details:"JSON response format schema is only supported with structuredOutputs"});let{tools:S,toolChoice:C,toolWarnings:l}=Tl({tools:v,toolChoice:f});return{args:{model:this.modelId,user:h.user,max_tokens:o,temperature:i,top_p:m,frequency_penalty:a,presence_penalty:d,response_format:p?.type==="json"?this.supportsStructuredOutputs===!0&&p.schema!=null?{type:"json_schema",json_schema:{schema:p.schema,name:p.name??"response",description:p.description}}:{type:"json_object"}:void 0,stop:s,seed:w,...Object.fromEntries(Object.entries(b?.[this.providerOptionsName]??{}).filter(([P])=>!Object.keys(hs.shape).includes(P))),reasoning_effort:h.reasoningEffort,verbosity:h.textVerbosity,messages:Dl(e),tools:S,tool_choice:C,thinking_budget:h.thinking_budget},warnings:[...I,...l]}}async doGenerate(e){let{args:o,warnings:i}=await this.getArgs({...e}),m=JSON.stringify(o),{responseHeaders:c,value:a,rawValue:d}=await Rl({url:this.config.url({path:"/chat/completions",modelId:this.modelId}),headers:Pl(this.config.headers(),e.headers),body:o,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:Xp(Zp),abortSignal:e.abortSignal,fetch:this.config.fetch}),b=a.choices[0],s=[],p=b.message.content;p!=null&&p.length>0&&s.push({type:"text",text:p,providerMetadata:b.message.reasoning_opaque?{copilot:{reasoningOpaque:b.message.reasoning_opaque}}:void 0});let w=b.message.reasoning_text;if(w!=null&&w.length>0&&s.push({type:"reasoning",text:w,providerMetadata:b.message.reasoning_opaque?{copilot:{reasoningOpaque:b.message.reasoning_opaque}}:void 0}),b.message.tool_calls!=null)for(let I of b.message.tool_calls)s.push({type:"tool-call",toolCallId:I.id??gs(),toolName:I.function.name,input:I.function.arguments,providerMetadata:b.message.reasoning_opaque?{copilot:{reasoningOpaque:b.message.reasoning_opaque}}:void 0});let f={[this.providerOptionsName]:{},...await this.config.metadataExtractor?.extractMetadata?.({parsedBody:d})},v=a.usage?.completion_tokens_details;return v?.accepted_prediction_tokens!=null&&(f[this.providerOptionsName].acceptedPredictionTokens=v?.accepted_prediction_tokens),v?.rejected_prediction_tokens!=null&&(f[this.providerOptionsName].rejectedPredictionTokens=v?.rejected_prediction_tokens),{content:s,finishReason:{unified:Oi(b.finish_reason),raw:b.finish_reason??void 0},usage:{inputTokens:{total:a.usage?.prompt_tokens??void 0,noCache:void 0,cacheRead:a.usage?.prompt_tokens_details?.cached_tokens??void 0,cacheWrite:void 0},outputTokens:{total:a.usage?.completion_tokens??void 0,text:void 0,reasoning:a.usage?.completion_tokens_details?.reasoning_tokens??void 0},raw:a.usage??void 0},providerMetadata:f,request:{body:m},response:{...Pi(a),headers:c,body:d},warnings:i}}async doStream(e){let{args:o,warnings:i}=await this.getArgs({...e}),m={...o,stream:!0,stream_options:this.config.includeUsage?{include_usage:!0}:void 0},c=this.config.metadataExtractor?.createStreamExtractor(),{responseHeaders:a,value:d}=await Rl({url:this.config.url({path:"/chat/completions",modelId:this.modelId}),headers:Pl(this.config.headers(),e.headers),body:m,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:Jp(this.chunkSchema),abortSignal:e.abortSignal,fetch:this.config.fetch}),b=[],s={unified:"other",raw:void 0},p={completionTokens:void 0,completionTokensDetails:{reasoningTokens:void 0,acceptedPredictionTokens:void 0,rejectedPredictionTokens:void 0},promptTokens:void 0,promptTokensDetails:{cachedTokens:void 0},totalTokens:void 0},w=!0,f=this.providerOptionsName,v=!1,I=!1,h;return{stream:d.pipeThrough(new TransformStream({start(S){S.enqueue({type:"stream-start",warnings:i})},transform(S,C){if(e.includeRawChunks&&C.enqueue({type:"raw",rawValue:S.rawValue}),!S.success){s={unified:"error",raw:void 0},C.enqueue({type:"error",error:S.error});return}let l=S.value;if(c?.processChunk(S.rawValue),"error"in l){s={unified:"error",raw:void 0},C.enqueue({type:"error",error:l.error.message});return}if(w&&(w=!1,C.enqueue({type:"response-metadata",...Pi(l)})),l.usage!=null){let{prompt_tokens:T,completion_tokens:R,total_tokens:_,prompt_tokens_details:E,completion_tokens_details:x}=l.usage;p.promptTokens=T??void 0,p.completionTokens=R??void 0,p.totalTokens=_??void 0,x?.reasoning_tokens!=null&&(p.completionTokensDetails.reasoningTokens=x?.reasoning_tokens),x?.accepted_prediction_tokens!=null&&(p.completionTokensDetails.acceptedPredictionTokens=x?.accepted_prediction_tokens),x?.rejected_prediction_tokens!=null&&(p.completionTokensDetails.rejectedPredictionTokens=x?.rejected_prediction_tokens),E?.cached_tokens!=null&&(p.promptTokensDetails.cachedTokens=E?.cached_tokens)}let P=l.choices[0];if(P?.finish_reason!=null&&(s={unified:Oi(P.finish_reason),raw:P.finish_reason??void 0}),P?.delta==null)return;let y=P.delta;if(y.reasoning_opaque){if(h!=null)throw new _i({data:y,message:"Multiple reasoning_opaque values received in a single response. Only one thinking part per response is supported."});h=y.reasoning_opaque}let D=y.reasoning_text;if(D&&(v||(C.enqueue({type:"reasoning-start",id:"reasoning-0"}),v=!0),C.enqueue({type:"reasoning-delta",id:"reasoning-0",delta:D})),y.content&&(v&&!I&&(C.enqueue({type:"reasoning-end",id:"reasoning-0",providerMetadata:h?{copilot:{reasoningOpaque:h}}:void 0}),v=!1),I||(C.enqueue({type:"text-start",id:"txt-0",providerMetadata:h?{copilot:{reasoningOpaque:h}}:void 0}),I=!0),C.enqueue({type:"text-delta",id:"txt-0",delta:y.content})),y.tool_calls!=null){v&&(C.enqueue({type:"reasoning-end",id:"reasoning-0",providerMetadata:h?{copilot:{reasoningOpaque:h}}:void 0}),v=!1);for(let T of y.tool_calls){let R=T.index;if(b[R]==null){if(T.id==null)throw new _i({data:T,message:"Expected 'id' to be a string."});if(T.function?.name==null)throw new _i({data:T,message:"Expected 'function.name' to be a string."});C.enqueue({type:"tool-input-start",id:T.id,toolName:T.function.name}),b[R]={id:T.id,type:"function",function:{name:T.function.name,arguments:T.function.arguments??""},hasFinished:!1};let E=b[R];E.function?.name!=null&&E.function?.arguments!=null&&(E.function.arguments.length>0&&C.enqueue({type:"tool-input-delta",id:E.id,delta:E.function.arguments}),Ol(E.function.arguments)&&(C.enqueue({type:"tool-input-end",id:E.id}),C.enqueue({type:"tool-call",toolCallId:E.id??gs(),toolName:E.function.name,input:E.function.arguments,providerMetadata:h?{copilot:{reasoningOpaque:h}}:void 0}),E.hasFinished=!0));continue}let _=b[R];_.hasFinished||(T.function?.arguments!=null&&(_.function.arguments+=T.function?.arguments??""),C.enqueue({type:"tool-input-delta",id:_.id,delta:T.function.arguments??""}),_.function?.name!=null&&_.function?.arguments!=null&&Ol(_.function.arguments)&&(C.enqueue({type:"tool-input-end",id:_.id}),C.enqueue({type:"tool-call",toolCallId:_.id??gs(),toolName:_.function.name,input:_.function.arguments,providerMetadata:h?{copilot:{reasoningOpaque:h}}:void 0}),_.hasFinished=!0))}}},flush(S){v&&S.enqueue({type:"reasoning-end",id:"reasoning-0",providerMetadata:h?{copilot:{reasoningOpaque:h}}:void 0}),I&&S.enqueue({type:"text-end",id:"txt-0"});for(let l of b.filter(P=>!P.hasFinished))S.enqueue({type:"tool-input-end",id:l.id}),S.enqueue({type:"tool-call",toolCallId:l.id??gs(),toolName:l.function.name,input:l.function.arguments});let C={[f]:{},...h?{copilot:{reasoningOpaque:h}}:{},...c?.buildMetadata()};p.completionTokensDetails.acceptedPredictionTokens!=null&&(C[f].acceptedPredictionTokens=p.completionTokensDetails.acceptedPredictionTokens),p.completionTokensDetails.rejectedPredictionTokens!=null&&(C[f].rejectedPredictionTokens=p.completionTokensDetails.rejectedPredictionTokens),S.enqueue({type:"finish",finishReason:s,usage:{inputTokens:{total:p.promptTokens,noCache:p.promptTokens!=null&&p.promptTokensDetails.cachedTokens!=null?p.promptTokens-p.promptTokensDetails.cachedTokens:void 0,cacheRead:p.promptTokensDetails.cachedTokens,cacheWrite:void 0},outputTokens:{total:p.completionTokens,text:void 0,reasoning:p.completionTokensDetails.reasoningTokens},raw:{prompt_tokens:p.promptTokens??null,completion_tokens:p.completionTokens??null,total_tokens:p.totalTokens??null}},providerMetadata:C})}})),request:{body:m},response:{headers:a}}}},Cl=Ye.object({prompt_tokens:Ye.number().nullish(),completion_tokens:Ye.number().nullish(),total_tokens:Ye.number().nullish(),prompt_tokens_details:Ye.object({cached_tokens:Ye.number().nullish()}).nullish(),completion_tokens_details:Ye.object({reasoning_tokens:Ye.number().nullish(),accepted_prediction_tokens:Ye.number().nullish(),rejected_prediction_tokens:Ye.number().nullish()}).nullish()}).nullish(),Zp=Ye.object({id:Ye.string().nullish(),created:Ye.number().nullish(),model:Ye.string().nullish(),choices:Ye.array(Ye.object({message:Ye.object({role:Ye.literal("assistant").nullish(),content:Ye.string().nullish(),reasoning_text:Ye.string().nullish(),reasoning_opaque:Ye.string().nullish(),tool_calls:Ye.array(Ye.object({id:Ye.string().nullish(),function:Ye.object({name:Ye.string(),arguments:Ye.string()})})).nullish()}),finish_reason:Ye.string().nullish()})),usage:Cl}),Qp=n(t=>Ye.union([Ye.object({id:Ye.string().nullish(),created:Ye.number().nullish(),model:Ye.string().nullish(),choices:Ye.array(Ye.object({delta:Ye.object({role:Ye.enum(["assistant"]).nullish(),content:Ye.string().nullish(),reasoning_text:Ye.string().nullish(),reasoning_opaque:Ye.string().nullish(),tool_calls:Ye.array(Ye.object({index:Ye.number(),id:Ye.string().nullish(),function:Ye.object({name:Ye.string().nullish(),arguments:Ye.string().nullish()})})).nullish()}).nullish(),finish_reason:Ye.string().nullish()})),usage:Cl}),t]),"createOpenAICompatibleChatChunkSchema");import{APICallError as yf}from"@ai-sdk/provider";import{combineHeaders as Bl,createEventSourceResponseHandler as bf,createJsonResponseHandler as wf,generateId as bs,parseProviderOptions as vf,postJsonToApi as Gl}from"@ai-sdk/provider-utils";import{z as A}from"zod/v4";import{z as mo}from"zod/v4";import{createJsonErrorResponseHandler as ef}from"@ai-sdk/provider-utils";var tf=mo.object({error:mo.object({message:mo.string(),type:mo.string().nullish(),param:mo.any().nullish(),code:mo.union([mo.string(),mo.number()]).nullish()})}),Ri=ef({errorSchema:tf,errorToMessage:n(t=>t.error.message,"errorToMessage")});import{UnsupportedFunctionalityError as of}from"@ai-sdk/provider";import{convertToBase64 as Al,parseProviderOptions as rf}from"@ai-sdk/provider-utils";import{z as Mi}from"zod/v4";import{createProviderToolFactoryWithOutputSchema as nf}from"@ai-sdk/provider-utils";import{z as wn}from"zod/v4";var Ci=wn.object({action:wn.object({type:wn.literal("exec"),command:wn.array(wn.string()),timeoutMs:wn.number().optional(),user:wn.string().optional(),workingDirectory:wn.string().optional(),env:wn.record(wn.string(),wn.string()).optional()})}),Ai=wn.object({output:wn.string()}),lE=nf({id:"openai.local_shell",inputSchema:Ci,outputSchema:Ai});function Ml(t,e){return e?e.some(o=>t.startsWith(o)):!1}n(Ml,"isFileId");async function jl({prompt:t,systemMessageMode:e,fileIdPrefixes:o,store:i,hasLocalShellTool:m=!1}){let c=[],a=[],d=new Set;for(let{role:b,content:s}of t)switch(b){case"system":{switch(e){case"system":{c.push({role:"system",content:s});break}case"developer":{c.push({role:"developer",content:s});break}case"remove":{a.push({type:"other",message:"system messages are removed for this model"});break}default:{let p=e;throw new Error(`Unsupported system message mode: ${p}`)}}break}case"user":{c.push({role:"user",content:s.map((p,w)=>{switch(p.type){case"text":return{type:"input_text",text:p.text};case"file":if(p.mediaType.startsWith("image/")){let f=p.mediaType==="image/*"?"image/jpeg":p.mediaType;return{type:"input_image",...p.data instanceof URL?{image_url:p.data.toString()}:typeof p.data=="string"&&Ml(p.data,o)?{file_id:p.data}:{image_url:`data:${f};base64,${Al(p.data)}`},detail:p.providerOptions?.openai?.imageDetail}}else{if(p.mediaType==="application/pdf")return p.data instanceof URL?{type:"input_file",file_url:p.data.toString()}:{type:"input_file",...typeof p.data=="string"&&Ml(p.data,o)?{file_id:p.data}:{filename:p.filename??`part-${w}.pdf`,file_data:`data:application/pdf;base64,${Al(p.data)}`}};throw new of({functionality:`file part media type ${p.mediaType}`})}}})});break}case"assistant":{let p={},w={};for(let f of s)switch(f.type){case"text":{c.push({role:"assistant",content:[{type:"output_text",text:f.text}],id:f.providerOptions?.openai?.itemId??void 0});break}case"tool-call":{if(w[f.toolCallId]=f,f.providerExecuted)break;if(m&&f.toolName==="local_shell"){let v=Ci.parse(f.input);c.push({type:"local_shell_call",call_id:f.toolCallId,id:f.providerOptions?.openai?.itemId??void 0,action:{type:"exec",command:v.action.command,timeout_ms:v.action.timeoutMs,user:v.action.user,working_directory:v.action.workingDirectory,env:v.action.env}});break}c.push({type:"function_call",call_id:f.toolCallId,name:f.toolName,arguments:JSON.stringify(f.input),id:f.providerOptions?.openai?.itemId??void 0});break}case"tool-result":{i?c.push({type:"item_reference",id:f.toolCallId}):a.push({type:"other",message:`Results for OpenAI tool ${f.toolName} are not sent to the API when store is false`});break}case"reasoning":{let v=await rf({provider:"copilot",providerOptions:f.providerOptions,schema:sf}),I=v?.itemId;if(I!=null){let h=p[I];if(i)h===void 0&&(c.push({type:"item_reference",id:I}),p[I]={type:"reasoning",id:I,summary:[]});else{let S=[];f.text.length>0?S.push({type:"summary_text",text:f.text}):h!==void 0&&a.push({type:"other",message:`Cannot append empty reasoning part to existing reasoning sequence. Skipping reasoning part: ${JSON.stringify(f)}.`}),h===void 0?(p[I]={type:"reasoning",id:I,encrypted_content:v?.reasoningEncryptedContent,summary:S},c.push(p[I])):h.summary.push(...S)}}else a.push({type:"other",message:`Non-OpenAI reasoning parts are not supported. Skipping reasoning part: ${JSON.stringify(f)}.`});break}}break}case"tool":{for(let p of s){if(p.type==="tool-approval-response"){if(d.has(p.approvalId))continue;d.add(p.approvalId),i&&c.push({type:"item_reference",id:p.approvalId}),c.push({type:"mcp_approval_response",approval_request_id:p.approvalId,approve:p.approved});continue}let w=p.output;if(w.type==="execution-denied"&&w.providerOptions?.openai?.approvalId)continue;if(m&&p.toolName==="local_shell"&&w.type==="json"){c.push({type:"local_shell_call_output",call_id:p.toolCallId,output:Ai.parse(w.value).output});break}let f;switch(w.type){case"text":case"error-text":f=w.value;break;case"execution-denied":f=w.reason??"Tool execution denied.";break;case"content":case"json":case"error-json":f=JSON.stringify(w.value);break}c.push({type:"function_call_output",call_id:p.toolCallId,output:f})}break}default:{let p=b;throw new Error(`Unsupported role: ${p}`)}}return{input:c,warnings:a}}n(jl,"convertToOpenAIResponsesInput");var sf=Mi.object({itemId:Mi.string().nullish(),reasoningEncryptedContent:Mi.string().nullish()});function ji({finishReason:t,hasFunctionCall:e}){switch(t){case void 0:case null:return e?"tool-calls":"stop";case"max_output_tokens":return"length";case"content_filter":return"content-filter";default:return e?"tool-calls":"other"}}n(ji,"mapOpenAIResponseFinishReason");import{UnsupportedFunctionalityError as gf}from"@ai-sdk/provider";import{createProviderToolFactoryWithOutputSchema as af}from"@ai-sdk/provider-utils";import{z as Zt}from"zod/v4";var lf=Zt.object({code:Zt.string().nullish(),containerId:Zt.string()}),cf=Zt.object({outputs:Zt.array(Zt.discriminatedUnion("type",[Zt.object({type:Zt.literal("logs"),logs:Zt.string()}),Zt.object({type:Zt.literal("image"),url:Zt.string()})])).nullish()}),Ll=Zt.object({container:Zt.union([Zt.string(),Zt.object({fileIds:Zt.array(Zt.string()).optional()})]).optional()}),vE=af({id:"openai.code_interpreter",inputSchema:lf,outputSchema:cf});import{createProviderToolFactoryWithOutputSchema as df}from"@ai-sdk/provider-utils";import{z as ut}from"zod/v4";var Nl=ut.object({key:ut.string(),type:ut.enum(["eq","ne","gt","gte","lt","lte"]),value:ut.union([ut.string(),ut.number(),ut.boolean()])}),Ul=ut.object({type:ut.enum(["and","or"]),filters:ut.array(ut.union([Nl,ut.lazy(()=>Ul)]))}),zl=ut.object({vectorStoreIds:ut.array(ut.string()),maxNumResults:ut.number().optional(),ranking:ut.object({ranker:ut.string().optional(),scoreThreshold:ut.number().optional()}).optional(),filters:ut.union([Nl,Ul]).optional()}),uf=ut.object({queries:ut.array(ut.string()),results:ut.array(ut.object({attributes:ut.record(ut.string(),ut.unknown()),fileId:ut.string(),filename:ut.string(),score:ut.number(),text:ut.string()})).nullable()}),DE=df({id:"openai.file_search",inputSchema:ut.object({}),outputSchema:uf});import{createProviderToolFactory as pf}from"@ai-sdk/provider-utils";import{z as Ut}from"zod/v4";var Fl=Ut.object({filters:Ut.object({allowedDomains:Ut.array(Ut.string()).optional()}).optional(),searchContextSize:Ut.enum(["low","medium","high"]).optional(),userLocation:Ut.object({type:Ut.literal("approximate"),country:Ut.string().optional(),city:Ut.string().optional(),region:Ut.string().optional(),timezone:Ut.string().optional()}).optional()}),OE=pf({id:"openai.web_search",inputSchema:Ut.object({action:Ut.discriminatedUnion("type",[Ut.object({type:Ut.literal("search"),query:Ut.string().nullish()}),Ut.object({type:Ut.literal("open_page"),url:Ut.string()}),Ut.object({type:Ut.literal("find"),url:Ut.string(),pattern:Ut.string()})]).nullish()})});import{createProviderToolFactory as ff}from"@ai-sdk/provider-utils";import{z as Bt}from"zod/v4";var ql=Bt.object({searchContextSize:Bt.enum(["low","medium","high"]).optional(),userLocation:Bt.object({type:Bt.literal("approximate"),country:Bt.string().optional(),city:Bt.string().optional(),region:Bt.string().optional(),timezone:Bt.string().optional()}).optional()}),ME=ff({id:"openai.web_search_preview",inputSchema:Bt.object({action:Bt.discriminatedUnion("type",[Bt.object({type:Bt.literal("search"),query:Bt.string().nullish()}),Bt.object({type:Bt.literal("open_page"),url:Bt.string()}),Bt.object({type:Bt.literal("find"),url:Bt.string(),pattern:Bt.string()})]).nullish()})});import{createProviderToolFactoryWithOutputSchema as mf}from"@ai-sdk/provider-utils";import{z as nn}from"zod/v4";var $l=nn.object({background:nn.enum(["auto","opaque","transparent"]).optional(),inputFidelity:nn.enum(["low","high"]).optional(),inputImageMask:nn.object({fileId:nn.string().optional(),imageUrl:nn.string().optional()}).optional(),model:nn.string().optional(),moderation:nn.enum(["auto"]).optional(),outputCompression:nn.number().int().min(0).max(100).optional(),outputFormat:nn.enum(["png","jpeg","webp"]).optional(),partialImages:nn.number().int().min(0).max(3).optional(),quality:nn.enum(["auto","low","medium","high"]).optional(),size:nn.enum(["1024x1024","1024x1536","1536x1024","auto"]).optional()}).strict(),hf=nn.object({result:nn.string()}),UE=mf({id:"openai.image_generation",inputSchema:nn.object({}),outputSchema:hf});function Wl({tools:t,toolChoice:e,strictJsonSchema:o}){t=t?.length?t:void 0;let i=[];if(t==null)return{tools:void 0,toolChoice:void 0,toolWarnings:i};let m=[];for(let a of t)switch(a.type){case"function":m.push({type:"function",name:a.name,description:a.description,parameters:a.inputSchema,strict:o});break;case"provider":{switch(a.id){case"openai.file_search":{let d=zl.parse(a.args);m.push({type:"file_search",vector_store_ids:d.vectorStoreIds,max_num_results:d.maxNumResults,ranking_options:d.ranking?{ranker:d.ranking.ranker,score_threshold:d.ranking.scoreThreshold}:void 0,filters:d.filters});break}case"openai.local_shell":{m.push({type:"local_shell"});break}case"openai.web_search_preview":{let d=ql.parse(a.args);m.push({type:"web_search_preview",search_context_size:d.searchContextSize,user_location:d.userLocation});break}case"openai.web_search":{let d=Fl.parse(a.args);m.push({type:"web_search",filters:d.filters!=null?{allowed_domains:d.filters.allowedDomains}:void 0,search_context_size:d.searchContextSize,user_location:d.userLocation});break}case"openai.code_interpreter":{let d=Ll.parse(a.args);m.push({type:"code_interpreter",container:d.container==null?{type:"auto",file_ids:void 0}:typeof d.container=="string"?d.container:{type:"auto",file_ids:d.container.fileIds}});break}case"openai.image_generation":{let d=$l.parse(a.args);m.push({type:"image_generation",background:d.background,input_fidelity:d.inputFidelity,input_image_mask:d.inputImageMask?{file_id:d.inputImageMask.fileId,image_url:d.inputImageMask.imageUrl}:void 0,model:d.model,moderation:d.moderation,partial_images:d.partialImages,quality:d.quality,output_compression:d.outputCompression,output_format:d.outputFormat,size:d.size});break}}break}default:i.push({type:"unsupported",feature:"tool type"});break}if(e==null)return{tools:m,toolChoice:void 0,toolWarnings:i};let c=e.type;switch(c){case"auto":case"none":case"required":return{tools:m,toolChoice:c,toolWarnings:i};case"tool":return{tools:m,toolChoice:e.toolName==="code_interpreter"||e.toolName==="file_search"||e.toolName==="image_generation"||e.toolName==="web_search_preview"||e.toolName==="web_search"?{type:e.toolName}:{type:"function",name:e.toolName},toolWarnings:i};default:{let a=c;throw new gf({functionality:`tool choice type: ${a}`})}}}n(Wl,"prepareResponsesTools");var Hl=A.object({type:A.literal("web_search_call"),id:A.string(),status:A.string(),action:A.discriminatedUnion("type",[A.object({type:A.literal("search"),query:A.string().nullish()}),A.object({type:A.literal("open_page"),url:A.string()}),A.object({type:A.literal("find"),url:A.string(),pattern:A.string()})]).nullish()}),Vl=A.object({type:A.literal("file_search_call"),id:A.string(),queries:A.array(A.string()),results:A.array(A.object({attributes:A.record(A.string(),A.unknown()),file_id:A.string(),filename:A.string(),score:A.number(),text:A.string()})).nullish()}),Yl=A.object({type:A.literal("code_interpreter_call"),id:A.string(),code:A.string().nullable(),container_id:A.string(),outputs:A.array(A.discriminatedUnion("type",[A.object({type:A.literal("logs"),logs:A.string()}),A.object({type:A.literal("image"),url:A.string()})])).nullable()}),Jl=A.object({type:A.literal("local_shell_call"),id:A.string(),call_id:A.string(),action:A.object({type:A.literal("exec"),command:A.array(A.string()),timeout_ms:A.number().optional(),user:A.string().optional(),working_directory:A.string().optional(),env:A.record(A.string(),A.string()).optional()})}),Kl=A.object({type:A.literal("image_generation_call"),id:A.string(),result:A.string()}),Xl=20,Zl=A.array(A.object({token:A.string(),logprob:A.number(),top_logprobs:A.array(A.object({token:A.string(),logprob:A.number()}))})),ws=class{static{n(this,"OpenAIResponsesLanguageModel")}specificationVersion="v3";modelId;config;constructor(e,o){this.modelId=e,this.config=o}supportedUrls={"image/*":[/^https?:\/\/.*$/],"application/pdf":[/^https?:\/\/.*$/]};get provider(){return this.config.provider}async getArgs({maxOutputTokens:e,temperature:o,stopSequences:i,topP:m,topK:c,presencePenalty:a,frequencyPenalty:d,seed:b,prompt:s,providerOptions:p,tools:w,toolChoice:f,responseFormat:v}){let I=[],h=Yf(this.modelId);c!=null&&I.push({type:"unsupported",feature:"topK"}),b!=null&&I.push({type:"unsupported",feature:"seed"}),a!=null&&I.push({type:"unsupported",feature:"presencePenalty"}),d!=null&&I.push({type:"unsupported",feature:"frequencyPenalty"}),i!=null&&I.push({type:"unsupported",feature:"stopSequences"});let S=await vf({provider:"copilot",providerOptions:p,schema:Jf}),{input:C,warnings:l}=await jl({prompt:s,systemMessageMode:h.systemMessageMode,fileIdPrefixes:this.config.fileIdPrefixes,store:S?.store??!0,hasLocalShellTool:T("openai.local_shell")});I.push(...l);let P=S?.strictJsonSchema??!1,y=S?.include;function D(r){y=y!=null?[...y,r]:[r]}n(D,"addInclude");function T(r){return w?.find(u=>u.type==="provider"&&u.id===r)!=null}n(T,"hasOpenAITool");let R=typeof S?.logprobs=="number"?S?.logprobs:S?.logprobs===!0?Xl:void 0;R&&D("message.output_text.logprobs");let _=w?.find(r=>r.type==="provider"&&(r.id==="openai.web_search"||r.id==="openai.web_search_preview"))?.name;_&&D("web_search_call.action.sources"),T("openai.code_interpreter")&&D("code_interpreter_call.outputs");let E={model:this.modelId,input:C,temperature:o,top_p:m,max_output_tokens:e,...(v?.type==="json"||S?.textVerbosity)&&{text:{...v?.type==="json"&&{format:v.schema!=null?{type:"json_schema",strict:P,name:v.name??"response",description:v.description,schema:v.schema}:{type:"json_object"}},...S?.textVerbosity&&{verbosity:S.textVerbosity}}},max_tool_calls:S?.maxToolCalls,metadata:S?.metadata,parallel_tool_calls:S?.parallelToolCalls,previous_response_id:S?.previousResponseId,store:S?.store,user:S?.user,instructions:S?.instructions,service_tier:S?.serviceTier,include:y,prompt_cache_key:S?.promptCacheKey,safety_identifier:S?.safetyIdentifier,top_logprobs:R,...h.isReasoningModel&&(S?.reasoningEffort!=null||S?.reasoningSummary!=null)&&{reasoning:{...S?.reasoningEffort!=null&&{effort:S.reasoningEffort},...S?.reasoningSummary!=null&&{summary:S.reasoningSummary}}},...h.requiredAutoTruncation&&{truncation:"auto"}};h.isReasoningModel?(E.temperature!=null&&(E.temperature=void 0,I.push({type:"unsupported",feature:"temperature",details:"temperature is not supported for reasoning models"})),E.top_p!=null&&(E.top_p=void 0,I.push({type:"unsupported",feature:"topP",details:"topP is not supported for reasoning models"}))):(S?.reasoningEffort!=null&&I.push({type:"unsupported",feature:"reasoningEffort",details:"reasoningEffort is not supported for non-reasoning models"}),S?.reasoningSummary!=null&&I.push({type:"unsupported",feature:"reasoningSummary",details:"reasoningSummary is not supported for non-reasoning models"})),S?.serviceTier==="flex"&&!h.supportsFlexProcessing&&(I.push({type:"unsupported",feature:"serviceTier",details:"flex processing is only available for o3, o4-mini, and gpt-5 models"}),delete E.service_tier),S?.serviceTier==="priority"&&!h.supportsPriorityProcessing&&(I.push({type:"unsupported",feature:"serviceTier",details:"priority processing is only available for supported models (gpt-4, gpt-5, gpt-5-mini, o3, o4-mini) and requires Enterprise access. gpt-5-nano is not supported"}),delete E.service_tier);let{tools:x,toolChoice:k,toolWarnings:M}=Wl({tools:w,toolChoice:f,strictJsonSchema:P});return{webSearchToolName:_,args:{...E,tools:x,tool_choice:k},warnings:[...I,...M]}}async doGenerate(e){let{args:o,warnings:i,webSearchToolName:m}=await this.getArgs(e),c=this.config.url({path:"/responses",modelId:this.modelId}),{responseHeaders:a,value:d,rawValue:b}=await Gl({url:c,headers:Bl(this.config.headers(),e.headers),body:o,failedResponseHandler:Ri,successfulResponseHandler:wf(A.object({id:A.string(),created_at:A.number(),error:A.object({code:A.string(),message:A.string()}).nullish(),model:A.string(),output:A.array(A.discriminatedUnion("type",[A.object({type:A.literal("message"),role:A.literal("assistant"),id:A.string(),content:A.array(A.object({type:A.literal("output_text"),text:A.string(),logprobs:Zl.nullish(),annotations:A.array(A.discriminatedUnion("type",[A.object({type:A.literal("url_citation"),start_index:A.number(),end_index:A.number(),url:A.string(),title:A.string()}),A.object({type:A.literal("file_citation"),file_id:A.string(),filename:A.string().nullish(),index:A.number().nullish(),start_index:A.number().nullish(),end_index:A.number().nullish(),quote:A.string().nullish()}),A.object({type:A.literal("container_file_citation")})]))}))}),Hl,Vl,Yl,Kl,Jl,A.object({type:A.literal("function_call"),call_id:A.string(),name:A.string(),arguments:A.string(),id:A.string()}),A.object({type:A.literal("computer_call"),id:A.string(),status:A.string().optional()}),A.object({type:A.literal("reasoning"),id:A.string(),encrypted_content:A.string().nullish(),summary:A.array(A.object({type:A.literal("summary_text"),text:A.string()}))})])),service_tier:A.string().nullish(),incomplete_details:A.object({reason:A.string()}).nullish(),usage:Ql})),abortSignal:e.abortSignal,fetch:this.config.fetch});if(d.error)throw new yf({message:d.error.message,url:c,requestBodyValues:o,statusCode:400,responseHeaders:a,responseBody:b,isRetryable:!1});let s=[],p=[],w=!1;for(let v of d.output)switch(v.type){case"reasoning":{v.summary.length===0&&v.summary.push({type:"summary_text",text:""});for(let I of v.summary)s.push({type:"reasoning",text:I.text,providerMetadata:{openai:{itemId:v.id,reasoningEncryptedContent:v.encrypted_content??null}}});break}case"image_generation_call":{s.push({type:"tool-call",toolCallId:v.id,toolName:"image_generation",input:"{}",providerExecuted:!0}),s.push({type:"tool-result",toolCallId:v.id,toolName:"image_generation",result:{result:v.result}});break}case"local_shell_call":{s.push({type:"tool-call",toolCallId:v.call_id,toolName:"local_shell",input:JSON.stringify({action:v.action}),providerMetadata:{openai:{itemId:v.id}}});break}case"message":{for(let I of v.content){e.providerOptions?.openai?.logprobs&&I.logprobs&&p.push(I.logprobs),s.push({type:"text",text:I.text,providerMetadata:{openai:{itemId:v.id}}});for(let h of I.annotations)h.type==="url_citation"?s.push({type:"source",sourceType:"url",id:this.config.generateId?.()??bs(),url:h.url,title:h.title}):h.type==="file_citation"&&s.push({type:"source",sourceType:"document",id:this.config.generateId?.()??bs(),mediaType:"text/plain",title:h.quote??h.filename??"Document",filename:h.filename??h.file_id})}break}case"function_call":{w=!0,s.push({type:"tool-call",toolCallId:v.call_id,toolName:v.name,input:v.arguments,providerMetadata:{openai:{itemId:v.id}}});break}case"web_search_call":{s.push({type:"tool-call",toolCallId:v.id,toolName:m??"web_search",input:JSON.stringify({action:v.action}),providerExecuted:!0}),s.push({type:"tool-result",toolCallId:v.id,toolName:m??"web_search",result:{status:v.status}});break}case"computer_call":{s.push({type:"tool-call",toolCallId:v.id,toolName:"computer_use",input:"",providerExecuted:!0}),s.push({type:"tool-result",toolCallId:v.id,toolName:"computer_use",result:{type:"computer_use_tool_result",status:v.status||"completed"}});break}case"file_search_call":{s.push({type:"tool-call",toolCallId:v.id,toolName:"file_search",input:"{}",providerExecuted:!0}),s.push({type:"tool-result",toolCallId:v.id,toolName:"file_search",result:{queries:v.queries,results:v.results?.map(I=>({attributes:I.attributes,fileId:I.file_id,filename:I.filename,score:I.score,text:I.text}))??null}});break}case"code_interpreter_call":{s.push({type:"tool-call",toolCallId:v.id,toolName:"code_interpreter",input:JSON.stringify({code:v.code,containerId:v.container_id}),providerExecuted:!0}),s.push({type:"tool-result",toolCallId:v.id,toolName:"code_interpreter",result:{outputs:v.outputs}});break}}let f={openai:{responseId:d.id}};return p.length>0&&(f.openai.logprobs=p),typeof d.service_tier=="string"&&(f.openai.serviceTier=d.service_tier),{content:s,finishReason:{unified:ji({finishReason:d.incomplete_details?.reason,hasFunctionCall:w}),raw:d.incomplete_details?.reason},usage:{inputTokens:{total:d.usage.input_tokens,noCache:d.usage.input_tokens_details?.cached_tokens!=null?d.usage.input_tokens-d.usage.input_tokens_details.cached_tokens:void 0,cacheRead:d.usage.input_tokens_details?.cached_tokens??void 0,cacheWrite:void 0},outputTokens:{total:d.usage.output_tokens,text:void 0,reasoning:d.usage.output_tokens_details?.reasoning_tokens??void 0},raw:d.usage},request:{body:o},response:{id:d.id,timestamp:new Date(d.created_at*1e3),modelId:d.model,headers:a,body:b},providerMetadata:f,warnings:i}}async doStream(e){let{args:o,warnings:i,webSearchToolName:m}=await this.getArgs(e),{responseHeaders:c,value:a}=await Gl({url:this.config.url({path:"/responses",modelId:this.modelId}),headers:Bl(this.config.headers(),e.headers),body:{...o,stream:!0},failedResponseHandler:Ri,successfulResponseHandler:bf(Mf),abortSignal:e.abortSignal,fetch:this.config.fetch}),d=this,b={unified:"other",raw:void 0},s={inputTokens:void 0,outputTokens:void 0,totalTokens:void 0,reasoningTokens:void 0,cachedInputTokens:void 0},p=[],w=null,f={},v=!1,I={},h=null,S=null,C;return{stream:a.pipeThrough(new TransformStream({start(l){l.enqueue({type:"stream-start",warnings:i})},transform(l,P){if(e.includeRawChunks&&P.enqueue({type:"raw",rawValue:l.rawValue}),!l.success){b={unified:"error",raw:void 0},P.enqueue({type:"error",error:l.error});return}let y=l.value;if(tc(y))y.item.type==="function_call"?(f[y.output_index]={toolName:y.item.name,toolCallId:y.item.call_id},P.enqueue({type:"tool-input-start",id:y.item.call_id,toolName:y.item.name})):y.item.type==="web_search_call"?(f[y.output_index]={toolName:m??"web_search",toolCallId:y.item.id},P.enqueue({type:"tool-input-start",id:y.item.id,toolName:m??"web_search"})):y.item.type==="computer_call"?(f[y.output_index]={toolName:"computer_use",toolCallId:y.item.id},P.enqueue({type:"tool-input-start",id:y.item.id,toolName:"computer_use"})):y.item.type==="code_interpreter_call"?(f[y.output_index]={toolName:"code_interpreter",toolCallId:y.item.id,codeInterpreter:{containerId:y.item.container_id}},P.enqueue({type:"tool-input-start",id:y.item.id,toolName:"code_interpreter"}),P.enqueue({type:"tool-input-delta",id:y.item.id,delta:`{"containerId":"${y.item.container_id}","code":"`})):y.item.type==="file_search_call"?P.enqueue({type:"tool-call",toolCallId:y.item.id,toolName:"file_search",input:"{}",providerExecuted:!0}):y.item.type==="image_generation_call"?P.enqueue({type:"tool-call",toolCallId:y.item.id,toolName:"image_generation",input:"{}",providerExecuted:!0}):y.item.type==="message"?(S=y.item.id,P.enqueue({type:"text-start",id:y.item.id,providerMetadata:{openai:{itemId:y.item.id}}})):Wf(y)&&(I[y.output_index]={canonicalId:y.item.id,encryptedContent:y.item.encrypted_content,summaryParts:[0]},h=y.output_index,P.enqueue({type:"reasoning-start",id:`${y.item.id}:0`,providerMetadata:{openai:{itemId:y.item.id,reasoningEncryptedContent:y.item.encrypted_content??null}}}));else if(ec(y)){if(y.item.type==="function_call")f[y.output_index]=void 0,v=!0,P.enqueue({type:"tool-input-end",id:y.item.call_id}),P.enqueue({type:"tool-call",toolCallId:y.item.call_id,toolName:y.item.name,input:y.item.arguments,providerMetadata:{openai:{itemId:y.item.id}}});else if(y.item.type==="web_search_call")f[y.output_index]=void 0,P.enqueue({type:"tool-input-end",id:y.item.id}),P.enqueue({type:"tool-call",toolCallId:y.item.id,toolName:"web_search",input:JSON.stringify({action:y.item.action}),providerExecuted:!0}),P.enqueue({type:"tool-result",toolCallId:y.item.id,toolName:"web_search",result:{status:y.item.status}});else if(y.item.type==="computer_call")f[y.output_index]=void 0,P.enqueue({type:"tool-input-end",id:y.item.id}),P.enqueue({type:"tool-call",toolCallId:y.item.id,toolName:"computer_use",input:"",providerExecuted:!0}),P.enqueue({type:"tool-result",toolCallId:y.item.id,toolName:"computer_use",result:{type:"computer_use_tool_result",status:y.item.status||"completed"}});else if(y.item.type==="file_search_call")f[y.output_index]=void 0,P.enqueue({type:"tool-result",toolCallId:y.item.id,toolName:"file_search",result:{queries:y.item.queries,results:y.item.results?.map(D=>({attributes:D.attributes,fileId:D.file_id,filename:D.filename,score:D.score,text:D.text}))??null}});else if(y.item.type==="code_interpreter_call")f[y.output_index]=void 0,P.enqueue({type:"tool-result",toolCallId:y.item.id,toolName:"code_interpreter",result:{outputs:y.item.outputs}});else if(y.item.type==="image_generation_call")P.enqueue({type:"tool-result",toolCallId:y.item.id,toolName:"image_generation",result:{result:y.item.result}});else if(y.item.type==="local_shell_call")f[y.output_index]=void 0,P.enqueue({type:"tool-call",toolCallId:y.item.call_id,toolName:"local_shell",input:JSON.stringify({action:{type:"exec",command:y.item.action.command,timeoutMs:y.item.action.timeout_ms,user:y.item.action.user,workingDirectory:y.item.action.working_directory,env:y.item.action.env}}),providerMetadata:{openai:{itemId:y.item.id}}});else if(y.item.type==="message")S&&(P.enqueue({type:"text-end",id:S}),S=null);else if(Lf(y)){let D=I[y.output_index];if(D){for(let T of D.summaryParts)P.enqueue({type:"reasoning-end",id:`${D.canonicalId}:${T}`,providerMetadata:{openai:{itemId:D.canonicalId,reasoningEncryptedContent:y.item.encrypted_content??null}}});delete I[y.output_index],h===y.output_index&&(h=null)}}}else if(zf(y)){let D=f[y.output_index];D!=null&&P.enqueue({type:"tool-input-delta",id:D.toolCallId,delta:y.delta})}else if(Ff(y))P.enqueue({type:"tool-result",toolCallId:y.item_id,toolName:"image_generation",result:{result:y.partial_image_b64}});else if(qf(y)){let D=f[y.output_index];D!=null&&P.enqueue({type:"tool-input-delta",id:D.toolCallId,delta:JSON.stringify(y.delta).slice(1,-1)})}else if($f(y)){let D=f[y.output_index];D!=null&&(P.enqueue({type:"tool-input-delta",id:D.toolCallId,delta:'"}'}),P.enqueue({type:"tool-input-end",id:D.toolCallId}),P.enqueue({type:"tool-call",toolCallId:D.toolCallId,toolName:"code_interpreter",input:JSON.stringify({code:y.code,containerId:D.codeInterpreter.containerId}),providerExecuted:!0}))}else if(Uf(y))w=y.response.id,P.enqueue({type:"response-metadata",id:y.response.id,timestamp:new Date(y.response.created_at*1e3),modelId:y.response.model});else if(jf(y))S||(S=y.item_id,P.enqueue({type:"text-start",id:S,providerMetadata:{openai:{itemId:y.item_id}}})),P.enqueue({type:"text-delta",id:S,delta:y.delta}),e.providerOptions?.openai?.logprobs&&y.logprobs&&p.push(y.logprobs);else if(Gf(y)){let D=h!==null?I[h]:null;D&&y.summary_index>0&&(D.summaryParts.push(y.summary_index),P.enqueue({type:"reasoning-start",id:`${D.canonicalId}:${y.summary_index}`,providerMetadata:{openai:{itemId:D.canonicalId,reasoningEncryptedContent:D.encryptedContent??null}}}))}else if(Hf(y)){let D=h!==null?I[h]:null;D&&P.enqueue({type:"reasoning-delta",id:`${D.canonicalId}:${y.summary_index}`,delta:y.delta,providerMetadata:{openai:{itemId:D.canonicalId}}})}else Nf(y)?(b={unified:ji({finishReason:y.response.incomplete_details?.reason,hasFunctionCall:v}),raw:y.response.incomplete_details?.reason??void 0},s.inputTokens=y.response.usage.input_tokens,s.outputTokens=y.response.usage.output_tokens,s.totalTokens=y.response.usage.input_tokens+y.response.usage.output_tokens,s.reasoningTokens=y.response.usage.output_tokens_details?.reasoning_tokens??void 0,s.cachedInputTokens=y.response.usage.input_tokens_details?.cached_tokens??void 0,typeof y.response.service_tier=="string"&&(C=y.response.service_tier)):Bf(y)?y.annotation.type==="url_citation"?P.enqueue({type:"source",sourceType:"url",id:d.config.generateId?.()??bs(),url:y.annotation.url,title:y.annotation.title}):y.annotation.type==="file_citation"&&P.enqueue({type:"source",sourceType:"document",id:d.config.generateId?.()??bs(),mediaType:"text/plain",title:y.annotation.quote??y.annotation.filename??"Document",filename:y.annotation.filename??y.annotation.file_id}):Vf(y)&&P.enqueue({type:"error",error:y})},flush(l){S&&(l.enqueue({type:"text-end",id:S}),S=null);let P={openai:{responseId:w}};p.length>0&&(P.openai.logprobs=p),C!==void 0&&(P.openai.serviceTier=C),l.enqueue({type:"finish",finishReason:b,usage:{inputTokens:{total:s.inputTokens,noCache:s.inputTokens!=null&&s.cachedInputTokens!=null?s.inputTokens-s.cachedInputTokens:void 0,cacheRead:s.cachedInputTokens,cacheWrite:void 0},outputTokens:{total:s.outputTokens,text:void 0,reasoning:s.reasoningTokens},raw:{input_tokens:s.inputTokens,output_tokens:s.outputTokens,total_tokens:s.totalTokens}},providerMetadata:P})}})),request:{body:o},response:{headers:c}}}},Ql=A.object({input_tokens:A.number(),input_tokens_details:A.object({cached_tokens:A.number().nullish()}).nullish(),output_tokens:A.number(),output_tokens_details:A.object({reasoning_tokens:A.number().nullish()}).nullish()}),xf=A.object({type:A.literal("response.output_text.delta"),item_id:A.string(),delta:A.string(),logprobs:Zl.nullish()}),If=A.object({type:A.literal("error"),code:A.string(),message:A.string(),param:A.string().nullish(),sequence_number:A.number()}),kf=A.object({type:A.enum(["response.completed","response.incomplete"]),response:A.object({incomplete_details:A.object({reason:A.string()}).nullish(),usage:Ql,service_tier:A.string().nullish()})}),Ef=A.object({type:A.literal("response.created"),response:A.object({id:A.string(),created_at:A.number(),model:A.string(),service_tier:A.string().nullish()})}),Df=A.object({type:A.literal("response.output_item.added"),output_index:A.number(),item:A.discriminatedUnion("type",[A.object({type:A.literal("message"),id:A.string()}),A.object({type:A.literal("reasoning"),id:A.string(),encrypted_content:A.string().nullish()}),A.object({type:A.literal("function_call"),id:A.string(),call_id:A.string(),name:A.string(),arguments:A.string()}),A.object({type:A.literal("web_search_call"),id:A.string(),status:A.string(),action:A.object({type:A.literal("search"),query:A.string().optional()}).nullish()}),A.object({type:A.literal("computer_call"),id:A.string(),status:A.string()}),A.object({type:A.literal("file_search_call"),id:A.string()}),A.object({type:A.literal("image_generation_call"),id:A.string()}),A.object({type:A.literal("code_interpreter_call"),id:A.string(),container_id:A.string(),code:A.string().nullable(),outputs:A.array(A.discriminatedUnion("type",[A.object({type:A.literal("logs"),logs:A.string()}),A.object({type:A.literal("image"),url:A.string()})])).nullable(),status:A.string()})])}),Sf=A.object({type:A.literal("response.output_item.done"),output_index:A.number(),item:A.discriminatedUnion("type",[A.object({type:A.literal("message"),id:A.string()}),A.object({type:A.literal("reasoning"),id:A.string(),encrypted_content:A.string().nullish()}),A.object({type:A.literal("function_call"),id:A.string(),call_id:A.string(),name:A.string(),arguments:A.string(),status:A.literal("completed")}),Yl,Kl,Hl,Vl,Jl,A.object({type:A.literal("computer_call"),id:A.string(),status:A.literal("completed")})])}),Tf=A.object({type:A.literal("response.function_call_arguments.delta"),item_id:A.string(),output_index:A.number(),delta:A.string()}),Pf=A.object({type:A.literal("response.image_generation_call.partial_image"),item_id:A.string(),output_index:A.number(),partial_image_b64:A.string()}),Of=A.object({type:A.literal("response.code_interpreter_call_code.delta"),item_id:A.string(),output_index:A.number(),delta:A.string()}),_f=A.object({type:A.literal("response.code_interpreter_call_code.done"),item_id:A.string(),output_index:A.number(),code:A.string()}),Rf=A.object({type:A.literal("response.output_text.annotation.added"),annotation:A.discriminatedUnion("type",[A.object({type:A.literal("url_citation"),url:A.string(),title:A.string()}),A.object({type:A.literal("file_citation"),file_id:A.string(),filename:A.string().nullish(),index:A.number().nullish(),start_index:A.number().nullish(),end_index:A.number().nullish(),quote:A.string().nullish()})])}),Cf=A.object({type:A.literal("response.reasoning_summary_part.added"),item_id:A.string(),summary_index:A.number()}),Af=A.object({type:A.literal("response.reasoning_summary_text.delta"),item_id:A.string(),summary_index:A.number(),delta:A.string()}),Mf=A.union([xf,kf,Ef,Df,Sf,Tf,Pf,Of,_f,Rf,Cf,Af,If,A.object({type:A.string()}).loose()]);function jf(t){return t.type==="response.output_text.delta"}n(jf,"isTextDeltaChunk");function ec(t){return t.type==="response.output_item.done"}n(ec,"isResponseOutputItemDoneChunk");function Lf(t){return ec(t)&&t.item.type==="reasoning"}n(Lf,"isResponseOutputItemDoneReasoningChunk");function Nf(t){return t.type==="response.completed"||t.type==="response.incomplete"}n(Nf,"isResponseFinishedChunk");function Uf(t){return t.type==="response.created"}n(Uf,"isResponseCreatedChunk");function zf(t){return t.type==="response.function_call_arguments.delta"}n(zf,"isResponseFunctionCallArgumentsDeltaChunk");function Ff(t){return t.type==="response.image_generation_call.partial_image"}n(Ff,"isResponseImageGenerationCallPartialImageChunk");function qf(t){return t.type==="response.code_interpreter_call_code.delta"}n(qf,"isResponseCodeInterpreterCallCodeDeltaChunk");function $f(t){return t.type==="response.code_interpreter_call_code.done"}n($f,"isResponseCodeInterpreterCallCodeDoneChunk");function tc(t){return t.type==="response.output_item.added"}n(tc,"isResponseOutputItemAddedChunk");function Wf(t){return tc(t)&&t.item.type==="reasoning"}n(Wf,"isResponseOutputItemAddedReasoningChunk");function Bf(t){return t.type==="response.output_text.annotation.added"}n(Bf,"isResponseAnnotationAddedChunk");function Gf(t){return t.type==="response.reasoning_summary_part.added"}n(Gf,"isResponseReasoningSummaryPartAddedChunk");function Hf(t){return t.type==="response.reasoning_summary_text.delta"}n(Hf,"isResponseReasoningSummaryTextDeltaChunk");function Vf(t){return t.type==="error"}n(Vf,"isErrorChunk");function Yf(t){let e=t.startsWith("o3")||t.startsWith("o4-mini")||t.startsWith("gpt-5")&&!t.startsWith("gpt-5-chat"),o=t.startsWith("gpt-4")||t.startsWith("gpt-5-mini")||t.startsWith("gpt-5")&&!t.startsWith("gpt-5-nano")&&!t.startsWith("gpt-5-chat")||t.startsWith("o3")||t.startsWith("o4-mini"),i={requiredAutoTruncation:!1,systemMessageMode:"system",supportsFlexProcessing:e,supportsPriorityProcessing:o};return t.startsWith("gpt-5-chat")?{...i,isReasoningModel:!1}:t.startsWith("o")||t.startsWith("gpt-5")||t.startsWith("codex-")||t.startsWith("computer-use")?t.startsWith("o1-mini")||t.startsWith("o1-preview")?{...i,isReasoningModel:!0,systemMessageMode:"remove"}:{...i,isReasoningModel:!0,systemMessageMode:"developer"}:{...i,isReasoningModel:!1}}n(Yf,"getResponsesModelConfig");var Jf=A.object({include:A.array(A.enum(["reasoning.encrypted_content","file_search_call.results","message.output_text.logprobs"])).nullish(),instructions:A.string().nullish(),logprobs:A.union([A.boolean(),A.number().min(1).max(Xl)]).optional(),maxToolCalls:A.number().nullish(),metadata:A.any().nullish(),parallelToolCalls:A.boolean().nullish(),previousResponseId:A.string().nullish(),promptCacheKey:A.string().nullish(),reasoningEffort:A.string().nullish(),reasoningSummary:A.string().nullish(),safetyIdentifier:A.string().nullish(),serviceTier:A.enum(["auto","flex","priority"]).nullish(),store:A.boolean().nullish(),strictJsonSchema:A.boolean().nullish(),textVerbosity:A.enum(["low","medium","high"]).nullish(),user:A.string().nullish()});var Zf="0.1.0";function vs(t={}){let e=Kf(t.baseURL??"https://api.openai.com/v1");if(!e)throw new Error("baseURL is required");let o={...t.apiKey&&{Authorization:`Bearer ${t.apiKey}`},...t.headers},i=n(()=>Xf(o,`ai-sdk/openai-compatible/${Zf}`),"getHeaders"),m=n(b=>new ys(b,{provider:`${t.name??"openai-compatible"}.chat`,headers:i,url:n(({path:s})=>`${e}${s}`,"url"),fetch:t.fetch}),"createChatModel"),c=n(b=>new ws(b,{provider:`${t.name??"openai-compatible"}.responses`,headers:i,url:n(({path:s})=>`${e}${s}`,"url"),fetch:t.fetch}),"createResponsesModel"),a=n(b=>m(b),"createLanguageModel"),d=n(function(b){return m(b)},"provider");return d.languageModel=a,d.chat=m,d.responses=c,d}n(vs,"createOpenaiCompatible");var Qf=vs();import{createXai as fm}from"@ai-sdk/xai";import{createMistral as mm}from"@ai-sdk/mistral";import{createGroq as hm}from"@ai-sdk/groq";import{createDeepInfra as gm}from"@ai-sdk/deepinfra";import{createCerebras as ym}from"@ai-sdk/cerebras";import{createCohere as bm}from"@ai-sdk/cohere";import{createGateway as wm}from"@ai-sdk/gateway";import{createTogetherAI as vm}from"@ai-sdk/togetherai";import{createPerplexity as xm}from"@ai-sdk/perplexity";import{createVercel as Im}from"@ai-sdk/vercel";import{createVenice as km}from"venice-ai-sdk-provider";import{createGitLab as Em,VERSION as Dm,isWorkflowModel as Sm,discoverWorkflowModels as Tm}from"gitlab-ai-provider";import{fromNodeProviderChain as Pm}from"@aws-sdk/credential-providers";import{GoogleAuth as Om}from"google-auth-library";import{mergeDeep as nc,unique as em}from"remeda";function oc(t){if(t.startsWith("image/"))return"image";if(t.startsWith("audio/"))return"audio";if(t.startsWith("video/"))return"video";if(t==="application/pdf")return"pdf"}n(oc,"mimeToModality");var jt;(M=>{M.OUTPUT_TOKEN_MAX=ze.OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX||32e3;function e(r){switch(r){case"@ai-sdk/github-copilot":return"copilot";case"@ai-sdk/azure":return"azure";case"@ai-sdk/openai":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/gateway":return"gateway";case"@openrouter/ai-sdk-provider":return"openrouter"}}n(e,"sdkKey");function o(r){let u=r.providerOptions;return u?Object.values(u).some(g=>!!g&&(typeof g.signature=="string"||typeof g.redactedData=="string")):!1}n(o,"hasThinkingSignature");function i(r){return r.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g,"\uFFFD")}M.sanitizeSurrogates=i,n(i,"sanitizeSurrogates");function m(r){let u=r.output;return u.type==="text"||u.type==="error-text"?{...r,output:{...u,value:i(u.value)}}:u.type==="content"?{...r,output:{...u,value:u.value.map(g=>g.type==="text"?{...g,text:i(g.text)}:g)}}:r}n(m,"sanitizeToolResult");function c(r){return r.map(u=>{switch(u.role){case"system":return typeof u.content=="string"?{...u,content:i(u.content)}:u;case"user":return typeof u.content=="string"?{...u,content:i(u.content)}:{...u,content:u.content.map(g=>g.type==="text"?{...g,text:i(g.text)}:g)};case"assistant":return typeof u.content=="string"?{...u,content:i(u.content)}:{...u,content:u.content.map(g=>g.type==="text"||g.type==="reasoning"?{...g,text:i(g.text)}:g.type==="tool-result"?m(g):g)};case"tool":return{...u,content:u.content.map(g=>g.type==="tool-result"?m(g):g)}}return u})}n(c,"sanitizeMessages");function a(r,u,g){if(r=c(r),(u.api.npm==="@ai-sdk/anthropic"||u.api.npm==="@ai-sdk/amazon-bedrock")&&(r=r.map(L=>{if(typeof L.content=="string")return L.content===""?void 0:L;if(!Array.isArray(L.content))return L;let j=L.content.filter(z=>z.type==="text"?z.text!=="":z.type==="reasoning"?z.text!==""||o(z):!0);if(j.length!==0)return{...L,content:j}}).filter(L=>L!==void 0&&L.content!=="")),u.api.id.includes("claude")){let L=n(j=>j.replace(/[^a-zA-Z0-9_-]/g,"_"),"scrub");return r.map(j=>j.role==="assistant"&&Array.isArray(j.content)?{...j,content:j.content.map(z=>z.type==="tool-call"||z.type==="tool-result"?{...z,toolCallId:L(z.toolCallId)}:z)}:j.role==="tool"&&Array.isArray(j.content)?{...j,content:j.content.map(z=>z.type==="tool-result"?{...z,toolCallId:L(z.toolCallId)}:z)}:j)}if(u.providerID==="mistral"||u.api.id.toLowerCase().includes("mistral")||u.api.id.toLocaleLowerCase().includes("devstral")){let L=n(z=>z.replace(/[^a-zA-Z0-9]/g,"").substring(0,9).padEnd(9,"0"),"scrub"),j=[];for(let z=0;z<r.length;z++){let V=r[z],H=r[z+1];V.role==="assistant"&&Array.isArray(V.content)&&(V.content=V.content.map(G=>G.type==="tool-call"||G.type==="tool-result"?{...G,toolCallId:L(G.toolCallId)}:G)),V.role==="tool"&&Array.isArray(V.content)&&(V.content=V.content.map(G=>G.type==="tool-result"?{...G,toolCallId:L(G.toolCallId)}:G)),j.push(V),V.role==="tool"&&H?.role==="user"&&j.push({role:"assistant",content:[{type:"text",text:"Done."}]})}return j}if(typeof u.capabilities.interleaved=="object"&&u.capabilities.interleaved.field){let L=u.capabilities.interleaved.field;return r.map(j=>{if(j.role==="assistant"&&Array.isArray(j.content)){let V=j.content.filter(G=>G.type==="reasoning").map(G=>G.text).join(""),H=j.content.filter(G=>G.type!=="reasoning");return V?{...j,content:H,providerOptions:{...j.providerOptions,openaiCompatible:{...j.providerOptions?.openaiCompatible,[L]:V}}}:{...j,content:H}}return j})}return r}n(a,"normalizeMessages");function d(r,u){let g=r.filter(z=>z.role==="system").slice(0,2),L=r.filter(z=>z.role!=="system").slice(-2),j={anthropic:{cacheControl:{type:"ephemeral",ttl:"1h"}},openrouter:{cacheControl:{type:"ephemeral"}},bedrock:{cachePoint:{type:"default"}},openaiCompatible:{cache_control:{type:"ephemeral"}},copilot:{copilot_cache_control:{type:"ephemeral"}}};for(let z of em([...g,...L])){if(!(u.providerID==="anthropic"||u.providerID.includes("bedrock")||u.api.npm==="@ai-sdk/amazon-bedrock")&&Array.isArray(z.content)&&z.content.length>0){let G=z.content[z.content.length-1];if(G&&typeof G=="object"&&G.type!=="tool-approval-request"&&G.type!=="tool-approval-response"){G.providerOptions=nc(G.providerOptions??{},j);continue}}z.providerOptions=nc(z.providerOptions??{},j)}return r}n(d,"applyCaching");function b(r,u){return r.map(g=>{if(g.role==="tool"&&Array.isArray(g.content))return s(g,u);if(g.role!=="user"||!Array.isArray(g.content))return g;let L=g.content.map(j=>{if(j.type!=="file"&&j.type!=="image")return j;if(j.type==="image"){let ee=j.image.toString();if(ee.startsWith("data:")){let se=ee.match(/^data:([^;]+);base64,(.*)$/);if(se&&(!se[2]||se[2].length===0))return{type:"text",text:"ERROR: Image file is empty or corrupted. Please provide a valid image."}}}let z=j.type==="image"?j.image.toString().split(";")[0].replace("data:",""):j.mediaType,V=j.type==="file"?j.filename:void 0,H=oc(z);return!H||u.capabilities.input[H]?j:{type:"text",text:`ERROR: Cannot read ${V?`"${V}"`:H} (this model does not support ${H} input). Inform the user.`}});return{...g,content:L}})}n(b,"unsupportedParts");function s(r,u){let g=!1,L=r.content.map(j=>{if(j?.type!=="tool-result"||j.output?.type!=="content"||!Array.isArray(j.output.value))return j;let z=j.output.value.map(V=>{if(!V||V.type!=="media"&&V.type!=="file-data"&&V.type!=="image-data")return V;let H=typeof V.mediaType=="string"?oc(V.mediaType):void 0;if(!H||u.capabilities.input[H])return V;g=!0;let G=H==="pdf"?" Use read_files on the same path for the PDF's text.":"";return{type:"text",text:`NOTE: ${j.toolName??"the tool"} returned a ${H==="pdf"?"PDF":H} that this model cannot take as input, so it was left out.${G}`}});return{...j,output:{...j.output,value:z}}});return g?{...r,content:L}:r}n(s,"unsupportedToolMedia");function p(r,u,g){r=b(r,u),r=a(r,u,g),(u.providerID==="anthropic"||u.providerID==="google-vertex-anthropic"||u.api.id.includes("anthropic")||u.api.id.includes("claude")||u.id.includes("anthropic")||u.id.includes("claude")||u.api.npm==="@ai-sdk/anthropic")&&u.api.npm!=="@ai-sdk/gateway"&&(r=d(r,u));let L=e(u.api.npm);if(L&&L!==u.providerID){let j=n(z=>{if(!z||!(u.providerID in z))return z;let V={...z};return V[L]=V[u.providerID],delete V[u.providerID],V},"remap");r=r.map(z=>Array.isArray(z.content)?{...z,providerOptions:j(z.providerOptions),content:z.content.map(V=>V.type==="tool-approval-request"||V.type==="tool-approval-response"?{...V}:{...V,providerOptions:j(V.providerOptions)})}:{...z,providerOptions:j(z.providerOptions)})}return r}M.message=p,n(p,"message");function w(r){let u=r.id.toLowerCase();if(u.includes("qwen"))return .55;if(!u.includes("claude")){if(u.includes("gemini")||u.includes("glm-4.6")||u.includes("glm-4.7")||u.includes("minimax-m2"))return 1;if(u.includes("kimi-k2"))return["thinking","k2.","k2p","k2-5"].some(g=>u.includes(g))?1:.6}}M.temperature=w,n(w,"temperature");function f(r){let u=r.id.toLowerCase();if(u.includes("qwen"))return 1;if(["minimax-m2","gemini","kimi-k2.5","kimi-k2p5","kimi-k2-5"].some(g=>u.includes(g)))return .95}M.topP=f,n(f,"topP");function v(r){let u=r.id.toLowerCase();if(u.includes("minimax-m2"))return["m2.","m25","m21"].some(g=>u.includes(g))?40:20;if(u.includes("gemini"))return 64}M.topK=v,n(v,"topK");let I=["low","medium","high"],h=["none","minimal",...I,"xhigh"];function S(r){let u=/claude-(opus|sonnet|haiku|fable)-(\d{1,2})(?:[-.](\d{1,2}))?(?!\d)/.exec(r.toLowerCase());if(u)return{family:u[1],major:Number(u[2]),minor:u[3]===void 0?0:Number(u[3])}}M.claudeVersion=S,n(S,"claudeVersion");let C=["none","minimal","low","medium","high","xhigh","max"];function l(r,u){if(!r||u.length===0)return;if(u.includes(r))return r;let g=C.indexOf(r);if(g<0)return;let L,j=1/0;for(let z of u){let V=C.indexOf(z);if(V<0)continue;let H=Math.abs(V-g);(H<j||H===j&&L!==void 0&&V<C.indexOf(L))&&(L=z,j=H)}return L}M.nearestVariant=l,n(l,"nearestVariant");function P(r){if(!r.capabilities.reasoning)return{};let u=r.id.toLowerCase(),g=S(r.api.id),L=!!g&&(g.major>4||g.major===4&&g.minor>=6),z=r.api.npm==="@ai-sdk/anthropic"&&!!g&&g.major>=5&&(g.family==="opus"||g.family==="sonnet")?["low","medium","high","xhigh","max"]:["low","medium","high","max"];if(u.includes("deepseek")||u.includes("minimax")||u.includes("glm")||u.includes("mistral")||u.includes("kimi")||u.includes("k2p5")||u.includes("qwen"))return{};if(u.includes("grok")&&u.includes("grok-3-mini"))return r.api.npm==="@openrouter/ai-sdk-provider"?{low:{reasoning:{effort:"low"}},high:{reasoning:{effort:"high"}}}:{low:{reasoningEffort:"low"},high:{reasoningEffort:"high"}};if(u.includes("grok"))return{};switch(r.api.npm){case"@openrouter/ai-sdk-provider":return!r.id.includes("gpt")&&!r.id.includes("gemini-3")&&!r.id.includes("claude")?{}:Object.fromEntries(h.map(F=>[F,{reasoning:{effort:F}}]));case"@ai-sdk/gateway":return r.id.includes("anthropic")?L?Object.fromEntries(z.map(F=>[F,{thinking:{type:"adaptive"},effort:F}])):{high:{thinking:{type:"enabled",budgetTokens:16e3}},max:{thinking:{type:"enabled",budgetTokens:31999}}}:r.id.includes("google")?u.includes("2.5")?{high:{thinkingConfig:{includeThoughts:!0,thinkingBudget:16e3}},max:{thinkingConfig:{includeThoughts:!0,thinkingBudget:24576}}}:Object.fromEntries(["low","high"].map(F=>[F,{includeThoughts:!0,thinkingLevel:F}])):Object.fromEntries(h.map(F=>[F,{reasoningEffort:F}]));case"@ai-sdk/github-copilot":if(r.id.includes("gemini"))return{};if(r.id.includes("claude"))return Object.fromEntries(I.map(F=>[F,{reasoningEffort:F}]));let V=Ct(()=>{if(u.includes("5.1-codex-max")||u.includes("5.2")||u.includes("5.3"))return[...I,"xhigh"];let F=[...I];return u.includes("gpt-5")&&r.release_date>="2025-12-04"&&F.push("xhigh"),F});return Object.fromEntries(V.map(F=>[F,{reasoningEffort:F,reasoningSummary:"auto",include:["reasoning.encrypted_content"]}]));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":return Object.fromEntries(I.map(F=>[F,{reasoningEffort:F}]));case"@ai-sdk/azure":if(u==="o1-mini")return{};let H=["low","medium","high"];return(u.includes("gpt-5-")||u==="gpt-5")&&H.unshift("minimal"),Object.fromEntries(H.map(F=>[F,{reasoningEffort:F,reasoningSummary:"auto",include:["reasoning.encrypted_content"]}]));case"@ai-sdk/openai":if(u==="gpt-5-pro")return{};let G=Ct(()=>{if(u.includes("codex"))return u.includes("5.2")||u.includes("5.3")?[...I,"xhigh"]:I;let F=[...I];return(u.includes("gpt-5-")||u==="gpt-5")&&F.unshift("minimal"),r.release_date>="2025-11-13"&&F.unshift("none"),r.release_date>="2025-12-04"&&F.push("xhigh"),F});return Object.fromEntries(G.map(F=>[F,{reasoningEffort:F,reasoningSummary:"auto",include:["reasoning.encrypted_content"]}]));case"@ai-sdk/anthropic":case"@ai-sdk/google-vertex/anthropic":return L?Object.fromEntries(z.map(F=>[F,{thinking:{type:"adaptive"},effort:F}])):{high:{thinking:{type:"enabled",budgetTokens:Math.min(16e3,Math.floor(r.limit.output/2-1))}},max:{thinking:{type:"enabled",budgetTokens:Math.min(31999,r.limit.output-1)}}};case"@ai-sdk/amazon-bedrock":return L?Object.fromEntries(z.map(F=>[F,{reasoningConfig:{type:"adaptive",maxReasoningEffort:F}}])):r.api.id.includes("anthropic")?{high:{reasoningConfig:{type:"enabled",budgetTokens:16e3}},max:{reasoningConfig:{type:"enabled",budgetTokens:31999}}}:Object.fromEntries(I.map(F=>[F,{reasoningConfig:{type:"enabled",maxReasoningEffort:F}}]));case"@ai-sdk/google-vertex":case"@ai-sdk/google":if(u.includes("2.5"))return{high:{thinkingConfig:{includeThoughts:!0,thinkingBudget:16e3}},max:{thinkingConfig:{includeThoughts:!0,thinkingBudget:24576}}};let ee=["low","high"];return u.includes("3.1")&&(ee=["low","medium","high"]),Object.fromEntries(ee.map(F=>[F,{thinkingConfig:{includeThoughts:!0,thinkingLevel:F}}]));case"@ai-sdk/mistral":return{};case"@ai-sdk/cohere":return{};case"@ai-sdk/groq":let se=["none",...I];return Object.fromEntries(se.map(F=>[F,{reasoningEffort:F}]));case"@ai-sdk/perplexity":return{};case"@jerome-benoit/sap-ai-provider-v2":return r.api.id.includes("anthropic")?L?Object.fromEntries(z.map(F=>[F,{thinking:{type:"adaptive"},effort:F}])):{high:{thinking:{type:"enabled",budgetTokens:16e3}},max:{thinking:{type:"enabled",budgetTokens:31999}}}:r.api.id.includes("gemini")&&u.includes("2.5")?{high:{thinkingConfig:{includeThoughts:!0,thinkingBudget:16e3}},max:{thinkingConfig:{includeThoughts:!0,thinkingBudget:24576}}}:r.api.id.includes("gpt")||/\bo[1-9]/.test(r.api.id)?Object.fromEntries(I.map(F=>[F,{reasoningEffort:F}])):{}}return{}}M.variants=P,n(P,"variants");function y(r){let u={};(r.model.providerID==="openai"||r.model.api.npm==="@ai-sdk/openai"||r.model.api.npm==="@ai-sdk/github-copilot")&&(u.store=!1),r.model.api.npm==="@openrouter/ai-sdk-provider"&&(u.usage={include:!0},r.model.api.id.includes("gemini-3")&&(u.reasoning={effort:"high"})),(r.model.providerID==="baseten"||r.model.providerID==="opencode"&&["kimi-k2-thinking","glm-4.6"].includes(r.model.api.id))&&(u.chat_template_args={enable_thinking:!0}),["zai","zhipuai"].includes(r.model.providerID)&&r.model.api.npm==="@ai-sdk/openai-compatible"&&(u.thinking={type:"enabled",clear_thinking:!1}),(r.model.providerID==="openai"||r.providerOptions?.setCacheKey)&&(u.promptCacheKey=r.sessionID),(r.model.api.npm==="@ai-sdk/google"||r.model.api.npm==="@ai-sdk/google-vertex")&&r.model.capabilities.reasoning&&(u.thinkingConfig={includeThoughts:!0},r.model.api.id.includes("gemini-3")&&(u.thinkingConfig.thinkingLevel="high"));let g=r.model.api.id.toLowerCase();return(r.model.api.npm==="@ai-sdk/anthropic"||r.model.api.npm==="@ai-sdk/google-vertex/anthropic")&&(g.includes("k2p5")||g.includes("kimi-k2.5")||g.includes("kimi-k2p5"))&&(u.thinking={type:"enabled",budgetTokens:Math.min(16e3,Math.floor(r.model.limit.output/2-1))}),r.model.providerID==="alibaba-cn"&&r.model.capabilities.reasoning&&r.model.api.npm==="@ai-sdk/openai-compatible"&&!g.includes("kimi-k2-thinking")&&(u.enable_thinking=!0),r.model.api.id.includes("gpt-5")&&!r.model.api.id.includes("gpt-5-chat")&&(r.model.api.id.includes("gpt-5-pro")||(u.reasoningEffort="medium",u.reasoningSummary="auto"),r.model.api.id.includes("gpt-5.")&&!r.model.api.id.includes("codex")&&!r.model.api.id.includes("-chat")&&r.model.providerID!=="azure"&&(u.textVerbosity="low"),r.model.providerID.startsWith("opencode")&&(u.promptCacheKey=r.sessionID,u.include=["reasoning.encrypted_content"],u.reasoningSummary="auto")),r.model.providerID==="venice"&&(u.promptCacheKey=r.sessionID),r.model.providerID==="openrouter"&&(u.prompt_cache_key=r.sessionID),r.model.api.npm==="@ai-sdk/gateway"&&(u.gateway={caching:"auto"}),u}M.options=y,n(y,"options");function D(r){return r.providerID==="openai"||r.api.npm==="@ai-sdk/openai"||r.api.npm==="@ai-sdk/github-copilot"?r.api.id.includes("gpt-5")?r.api.id.includes("5.")?{store:!1,reasoningEffort:"low"}:{store:!1,reasoningEffort:"minimal"}:{store:!1}:r.providerID==="google"?r.api.id.includes("gemini-3")?{thinkingConfig:{thinkingLevel:"minimal"}}:{thinkingConfig:{thinkingBudget:0}}:r.providerID==="openrouter"?r.api.id.includes("google")?{reasoning:{enabled:!1}}:{reasoningEffort:"minimal"}:r.providerID==="venice"?{veniceParameters:{disableThinking:!0}}:{}}M.smallOptions=D,n(D,"smallOptions");let T={amazon:"bedrock"};function R(r){let u=/claude-(?:([a-z]+)-)?(\d+)(?:[.-](\d{1,2}))?(?:-([a-z]+))?(?:[.@-]|$)/i.exec(r);if(!u)return!1;let g=Number(u[2]),L=Number(u[3]??0);return g===5&&L===1&&(u[1]??u[4])?.toLowerCase()==="mythos"?!1:g>5||g===5&&L>=1}n(R,"anthropicBindsThinking");function _(r,u){if(!R(r.api.id))return u;let g={prefixMismatchBehavior:"drop_block"},L=u.thinking;return L?(L.type===void 0&&(L={type:"adaptive",...L}),L.type!=="adaptive"&&L.type!=="enabled"?u:{...u,thinking:{...L,blockBinding:g}}):{...u,thinking:{blockBinding:g}}}n(_,"anthropicBlockBinding");function E(r,u){if(r.api.npm==="@ai-sdk/openai"&&(r.capabilities.reasoning||u.reasoningEffort!==void 0||u.reasoningSummary!==void 0)&&(u={...u,forceReasoning:!0}),r.api.npm==="@ai-sdk/gateway"){let L=r.api.id.indexOf("/"),j=L>0?r.api.id.slice(0,L):void 0,z=j?T[j]??j:void 0,V=u.gateway,H=Object.fromEntries(Object.entries(u).filter(([se])=>se!=="gateway")),G=Object.keys(H).length>0,ee={};return V!==void 0&&(ee.gateway=V),G&&(z?ee[z]=H:V&&typeof V=="object"&&!Array.isArray(V)?ee.gateway={...V,...H}:ee.gateway=H),ee}let g=e(r.api.npm)??r.providerID;return(r.api.npm==="@ai-sdk/anthropic"||r.api.npm==="@ai-sdk/google-vertex/anthropic")&&(u=_(r,u)),r.api.npm==="@ai-sdk/azure"?{openai:u,azure:u}:{[g]:u}}M.providerOptions=E,n(E,"providerOptions");function x(r){return Math.min(r.limit.output,M.OUTPUT_TOKEN_MAX)||M.OUTPUT_TOKEN_MAX}M.maxOutputTokens=x,n(x,"maxOutputTokens");function k(r,u){if(r.providerID==="openai"||r.providerID==="azure"){let g=n(j=>typeof j!="object"||j===null?j:Array.isArray(j.anyOf)?j.anyOf.some(z=>z?.type==="null")?j:{...j,anyOf:[...j.anyOf,{type:"null"}]}:Array.isArray(j.oneOf)?j.oneOf.some(z=>z?.type==="null")?j:{...j,oneOf:[...j.oneOf,{type:"null"}]}:Array.isArray(j.type)&&j.type.includes("null")?j:{anyOf:[j,{type:"null"}]},"makeNullable"),L=n(j=>{if(j===null||typeof j!="object")return j;if(Array.isArray(j))return j.map(L);let z={};for(let[V,H]of Object.entries(j))z[V]=typeof H=="object"&&H!==null?L(H):H;if(z.type==="object"&&z.properties){let V=new Set(z.required||[]);for(let H of Object.keys(z.properties))V.has(H)||(z.properties[H]=g(z.properties[H]),V.add(H));z.required=Array.from(V),z.additionalProperties===void 0&&(z.additionalProperties=!1)}return z},"sanitizeOpenAI");u=L(u)}if(r.providerID==="google"||r.api.id.includes("gemini")){let g=n(V=>typeof V=="object"&&V!==null&&!Array.isArray(V),"isPlainObject"),L=n(V=>g(V)&&(Array.isArray(V.anyOf)||Array.isArray(V.oneOf)||Array.isArray(V.allOf)),"hasCombiner"),j=n(V=>g(V)?L(V)?!0:["type","properties","items","prefixItems","enum","const","$ref","additionalProperties","patternProperties","required","not","if","then","else"].some(H=>H in V):!1,"hasSchemaIntent"),z=n(V=>{if(V===null||typeof V!="object")return V;if(Array.isArray(V))return V.map(z);let H={};for(let[G,ee]of Object.entries(V))G==="enum"&&Array.isArray(ee)?(H[G]=ee.map(se=>String(se)),(H.type==="integer"||H.type==="number")&&(H.type="string")):typeof ee=="object"&&ee!==null?H[G]=z(ee):H[G]=ee;return H.type==="object"&&H.properties&&Array.isArray(H.required)&&(H.required=H.required.filter(G=>G in H.properties)),H.type==="array"&&!L(H)&&(H.items==null&&(H.items={}),g(H.items)&&!j(H.items)&&(H.items.type="string")),H.type&&H.type!=="object"&&!L(H)&&(delete H.properties,delete H.required),H},"sanitizeGemini");u=z(u)}return u}M.schema=k,n(k,"schema")})(jt||={});var Li;(a=>{a.INCOMPLETE_CODE=Nn.RESPONSE_INCOMPLETE_CODE,a.FAILED_CODE=Nn.RESPONSE_FAILED_CODE;function o(d,b,s,p){return{type:"error",sequence_number:typeof d=="number"?d:0,error:{type:p??b,code:b,message:s,param:null}}}n(o,"errorEvent");function i(d){switch(d.type){case"response.failed":{let b=d.response?.error,s=typeof b?.code=="string"&&b.code?b.code:a.FAILED_CODE,p=typeof b?.message=="string"&&b.message?b.message:"The provider reported the response failed.";return o(d.sequence_number,s,p,a.FAILED_CODE)}case"response.incomplete":{let b=d.response?.incomplete_details?.reason;return b==="content_filter"?void 0:o(d.sequence_number,a.INCOMPLETE_CODE,`The response ended incomplete (${typeof b=="string"&&b?b:"no reason given"}).`)}case"error":{if(d.error&&typeof d.error=="object")return;let b=typeof d.code=="string"&&d.code?d.code:a.FAILED_CODE,s=typeof d.message=="string"&&d.message?d.message:"Stream error.";return o(d.sequence_number,b,s)}}}a.rewrite=i,n(i,"rewrite");let m=new Set(["response.completed","response.incomplete","response.failed","error"]);function c(d){if(!d.ok||!d.body)return d;let b=d.body.getReader(),s=new TextDecoder,p=new TextEncoder,w="",f=!1,v=!1,I=n(C=>{let l=C.split(/\r?\n/).filter(D=>D.startsWith("data:")).map(D=>D.slice(5).replace(/^ /,"")).join(`
126
+ </html>`,"HTML_ERROR"),Co,dn;async function Np(){return Co?{port:po,redirectUri:`http://localhost:${po}/auth/callback`}:(Co=Ep((t,e)=>{let o=new URL(t.url||"/",`http://localhost:${po}`);if(o.pathname==="/auth/callback"){let i=o.searchParams.get("code"),m=o.searchParams.get("state"),c=o.searchParams.get("error"),a=o.searchParams.get("error_description");if(c){let b=a||c;dn?.reject(new Error(b)),dn=void 0,e.writeHead(200,{"Content-Type":"text/html"}),e.end(Ii(b));return}if(!i){let b="Missing authorization code";dn?.reject(new Error(b)),dn=void 0,e.writeHead(400,{"Content-Type":"text/html"}),e.end(Ii(b));return}if(!dn||m!==dn.state){let b="Invalid state - potential CSRF attack";dn?.reject(new Error(b)),dn=void 0,e.writeHead(400,{"Content-Type":"text/html"}),e.end(Ii(b));return}let d=dn;dn=void 0,Mp(i,`http://localhost:${po}/auth/callback`,d.pkce).then(b=>d.resolve(b)).catch(b=>d.reject(b)),e.writeHead(200,{"Content-Type":"text/html"}),e.end(Lp);return}if(o.pathname==="/cancel"){dn?.reject(new Error("Login cancelled")),dn=void 0,e.writeHead(200),e.end("Login cancelled");return}e.writeHead(404),e.end("Not found")}),await new Promise((t,e)=>{Co.listen(po,()=>{Pr.info("codex oauth server started",{port:po}),t()}),Co.on("error",e)}),{port:po,redirectUri:`http://localhost:${po}/auth/callback`})}n(Np,"startOAuthServer");function Up(){Co&&(Co.close(()=>{Pr.info("codex oauth server stopped")}),Co=void 0)}n(Up,"stopOAuthServer");function zp(t,e){return new Promise((o,i)=>{let m=setTimeout(()=>{dn&&(dn=void 0,i(new Error("OAuth callback timeout - authorization took too long")))},3e5);dn={pkce:t,state:e,resolve:n(c=>{clearTimeout(m),o(c)},"resolve"),reject:n(c=>{clearTimeout(m),i(c)},"reject")}})}n(zp,"waitForOAuthCallback");async function yl(t,e={}){let o=e.issuer??Jn,i=e.codexApiEndpoint??Sp;return{auth:{provider:"openai",async loader(m,c){if((await m()).type!=="oauth")return{};let d=new Set(["gpt-5.5","gpt-5.2","gpt-5.3-codex","gpt-5.3-codex-spark","gpt-5.4","gpt-5.4-mini"]);for(let v of Object.keys(c.models)){if(v.includes("codex")||d.has(v))continue;let I=v.match(/^gpt-(\d+)(?:\.(\d+))?(?:-|$)/);if(I){let h=Number(I[1]),S=Number(I[2]??0);if(h>5||h===5&&S>4)continue}delete c.models[v]}for(let v of Object.values(c.models))v.cost={input:0,output:0,cache:{read:0,write:0}};let b=Dp.join(wt.Path.state,"codex-plan-models.json"),s=n(v=>{for(let[I,h]of Object.entries(c.models)){if(!h.limit)continue;let S=dl(h.api?.id??I,h.limit,v);S&&(h.limit=S)}},"applyPlanLimits"),p=await ul(b);s(p);let w,f=n(async function(I,h){h?.headers&&(h.headers instanceof Headers?(h.headers.delete("authorization"),h.headers.delete("Authorization")):Array.isArray(h.headers)?h.headers=h.headers.filter(([D])=>D.toLowerCase()!=="authorization"):(delete h.headers.authorization,delete h.headers.Authorization));let S=await m();if(S.type!=="oauth")return fetch(I,h);let C=S;if(!S.access||S.expires<Date.now()){w||(Pr.info("refreshing codex access token"),w=jp(S.refresh,o).then(async T=>{let R=xi(T)||C.accountId;return await t.client.auth.set({path:{id:"openai"},body:{type:"oauth",refresh:T.refresh_token,access:T.access_token,expires:Date.now()+(T.expires_in??3600)*1e3,...R&&{accountId:R}}}),{access:T.access_token,accountId:R}}).finally(()=>{w=void 0}));let D=await w;S.access=D.access,C.accountId=D.accountId}let l=new Headers;if(h?.headers)if(h.headers instanceof Headers)h.headers.forEach((D,T)=>l.set(T,D));else if(Array.isArray(h.headers))for(let[D,T]of h.headers)T!==void 0&&l.set(D,String(T));else for(let[D,T]of Object.entries(h.headers))T!==void 0&&l.set(D,String(T));l.set("authorization",`Bearer ${S.access}`),C.accountId&&l.set("ChatGPT-Account-Id",C.accountId);let P=I instanceof URL?I:new URL(typeof I=="string"?I:I.url),y=P.pathname.includes("/v1/responses")||P.pathname.includes("/chat/completions")?new URL(i):P;return fetch(y,{...h,headers:l})},"planFetch");return fl(p)&&e.refreshPlanCatalog!==!1&&!e.codexApiEndpoint&&f(`${Tp}?client_version=${Pp}`,{method:"GET"}).then(async v=>{if(!v.ok)throw new Error(`models list ${v.status}`);let I=cl(await v.json());Object.keys(I.models).length!==0&&(await pl(b,I),s(I),Pr.info("plan model list refreshed",{models:Object.keys(I.models).length}))}).catch(v=>Pr.warn("plan model list not refreshed; keeping the cached or default windows",{error:String(v)})),{apiKey:Ia,fetch:f}},methods:[{label:"ChatGPT Pro/Plus (browser)",type:"oauth",authorize:n(async()=>{let{redirectUri:m}=await Np(),c=await _p(),a=Cp(),d=Ap(m,c,a),b=zp(c,a);return{url:d,instructions:"Complete authorization in your browser. This window will close automatically.",method:"auto",callback:n(async()=>{let s=await b;Up();let p=xi(s);return{type:"success",refresh:s.refresh_token,access:s.access_token,expires:Date.now()+(s.expires_in??3600)*1e3,accountId:p}},"callback")}},"authorize")},{label:"ChatGPT Pro/Plus (headless)",type:"oauth",authorize:n(async()=>{let m=await fetch(`${Jn}/api/accounts/deviceauth/usercode`,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":`opencode/${Jt.VERSION}`},body:JSON.stringify({client_id:Or})});if(!m.ok)throw new Error("Failed to initiate device authorization");let c=await m.json(),a=Math.max(parseInt(c.interval)||5,1)*1e3;return{url:`${Jn}/codex/device`,instructions:`Enter code: ${c.user_code}`,method:"auto",async callback(){for(;;){let d=await fetch(`${Jn}/api/accounts/deviceauth/token`,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":`opencode/${Jt.VERSION}`},body:JSON.stringify({device_auth_id:c.device_auth_id,user_code:c.user_code})});if(d.ok){let b=await d.json(),s=await fetch(`${Jn}/oauth/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",code:b.authorization_code,redirect_uri:`${Jn}/deviceauth/callback`,client_id:Or,code_verifier:b.code_verifier}).toString()});if(!s.ok)throw new Error(`Token exchange failed: ${s.status}`);let p=await s.json();return{type:"success",refresh:p.refresh_token,access:p.access_token,expires:Date.now()+(p.expires_in??3600)*1e3,accountId:xi(p)}}if(d.status!==403&&d.status!==404)return{type:"failed"};await kp(a+Op)}}}},"authorize")},{label:"Manually enter API Key",type:"api"}]},"chat.headers":n(async(m,c)=>{m.model.providerID==="openai"&&(c.headers.originator="opencode",c.headers["User-Agent"]=`opencode/${Jt.VERSION} (${vi.platform()} ${vi.release()}; ${vi.arch()})`,c.headers["session-id"]=m.sessionID,c.headers["thread-id"]=m.sessionID)},"chat.headers"),"chat.params":n(async(m,c)=>{m.model.providerID==="openai"&&(c.maxOutputTokens=void 0)},"chat.params")}}n(yl,"CodexAuthPlugin");import{setTimeout as Ei}from"node:timers/promises";import{z as gt}from"zod";var ki;(i=>{i.schema=gt.object({data:gt.array(gt.object({model_picker_enabled:gt.boolean(),id:gt.string(),name:gt.string(),version:gt.string(),supported_endpoints:gt.array(gt.string()).optional(),capabilities:gt.object({family:gt.string(),limits:gt.object({max_context_window_tokens:gt.number(),max_output_tokens:gt.number(),max_prompt_tokens:gt.number(),vision:gt.object({max_prompt_image_size:gt.number(),max_prompt_images:gt.number(),supported_media_types:gt.array(gt.string())}).optional()}),supports:gt.object({adaptive_thinking:gt.boolean().optional(),max_thinking_budget:gt.number().optional(),min_thinking_budget:gt.number().optional(),reasoning_effort:gt.array(gt.string()).optional(),streaming:gt.boolean(),structured_outputs:gt.boolean().optional(),tool_calls:gt.boolean(),vision:gt.boolean().optional()})})}))});function e(m,c,a,d){let b=!!c.capabilities.supports.adaptive_thinking||!!c.capabilities.supports.reasoning_effort?.length||c.capabilities.supports.max_thinking_budget!==void 0||c.capabilities.supports.min_thinking_budget!==void 0,s=(c.capabilities.supports.vision??!1)||(c.capabilities.limits.vision?.supported_media_types??[]).some(p=>p.startsWith("image/"));return{id:m,providerID:"github-copilot",api:{id:c.id,url:a,npm:"@ai-sdk/github-copilot"},status:"active",limit:{context:c.capabilities.limits.max_context_window_tokens,input:c.capabilities.limits.max_prompt_tokens,output:c.capabilities.limits.max_output_tokens},capabilities:{temperature:d?.capabilities.temperature??!0,reasoning:d?.capabilities.reasoning??b,attachment:d?.capabilities.attachment??!0,toolcall:c.capabilities.supports.tool_calls,input:{text:!0,audio:!1,image:s,video:!1,pdf:!1},output:{text:!0,audio:!1,image:!1,video:!1,pdf:!1},interleaved:!1},family:d?.family??c.capabilities.family,name:d?.name??c.name,cost:{input:0,output:0,cache:{read:0,write:0}},options:d?.options??{},headers:d?.headers??{},release_date:d?.release_date??(c.version.startsWith(`${c.id}-`)?c.version.slice(c.id.length+1):c.version),variants:d?.variants??{}}}n(e,"build");async function o(m,c={},a={}){let d=await fetch(`${m}/models`,{headers:c,signal:AbortSignal.timeout(5e3)}).then(async p=>{if(!p.ok)throw new Error(`Failed to fetch models: ${p.status}`);return i.schema.parse(await p.json())}),b={...a},s=new Map(d.data.filter(p=>p.model_picker_enabled).map(p=>[p.id,p]));for(let[p,w]of Object.entries(b)){let f=s.get(w.api.id);if(!f){delete b[p];continue}b[p]=e(p,f,m,w)}for(let[p,w]of s)p in b||(b[p]=e(p,w,m));return b}i.get=o,n(o,"get")})(ki||={});var Fp=Ae.create({service:"plugin.copilot"}),bl="Ov23li8tweQw6odWQebz",Di=3e3;function xl(t){return t.replace(/^https?:\/\//,"").replace(/\/$/,"")}n(xl,"normalizeDomain");function qp(t){return{DEVICE_CODE_URL:`https://${t}/login/device/code`,ACCESS_TOKEN_URL:`https://${t}/login/oauth/access_token`}}n(qp,"getUrls");function wl(t){return t?`https://copilot-api.${xl(t)}`:"https://api.githubcopilot.com"}n(wl,"base");function vl(t){return{...t,api:{...t.api,npm:"@ai-sdk/github-copilot"}}}n(vl,"fix");async function Il(t){let e=t.client;return{provider:{id:"github-copilot",async models(o,i){return i.auth?.type!=="oauth"?Object.fromEntries(Object.entries(o.models).map(([m,c])=>[m,vl(c)])):ki.get(wl(i.auth.enterpriseUrl),{Authorization:`Bearer ${i.auth.refresh}`,"User-Agent":`opencode/${Jt.VERSION}`},o.models).catch(m=>(Fp.error("failed to fetch copilot models",{error:m}),Object.fromEntries(Object.entries(o.models).map(([c,a])=>[c,vl(a)]))))}},auth:{provider:"github-copilot",async loader(o){let i=await o();return!i||i.type!=="oauth"?{}:{baseURL:wl(i.enterpriseUrl),apiKey:"",async fetch(c,a){let d=await o();if(d.type!=="oauth")return fetch(c,a);let b=c instanceof URL?c.href:c.toString(),{isVision:s,isAgent:p}=Ct(()=>{try{let f=typeof a?.body=="string"?JSON.parse(a.body):a?.body;if(f?.messages&&b.includes("completions")){let v=f.messages[f.messages.length-1];return{isVision:f.messages.some(I=>Array.isArray(I.content)&&I.content.some(h=>h.type==="image_url")),isAgent:v?.role!=="user"}}if(f?.input){let v=f.input[f.input.length-1];return{isVision:f.input.some(I=>Array.isArray(I?.content)&&I.content.some(h=>h.type==="input_image")),isAgent:v?.role!=="user"}}if(f?.messages){let v=f.messages[f.messages.length-1],I=Array.isArray(v?.content)&&v.content.some(h=>h?.type!=="tool_result");return{isVision:f.messages.some(h=>Array.isArray(h?.content)&&h.content.some(S=>S?.type==="image"||S?.type==="tool_result"&&Array.isArray(S?.content)&&S.content.some(C=>C?.type==="image"))),isAgent:!(v?.role==="user"&&I)}}}catch{}return{isVision:!1,isAgent:!1}}),w={"x-initiator":p?"agent":"user",...a?.headers,"User-Agent":`opencode/${Jt.VERSION}`,Authorization:`Bearer ${d.refresh}`,"Openai-Intent":"conversation-edits"};return s&&(w["Copilot-Vision-Request"]="true"),delete w["x-api-key"],delete w.authorization,fetch(c,{...a,headers:w})}}},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 i=o.deploymentType||"github.com",m="github.com";if(i==="enterprise"){let b=o.enterpriseUrl;m=xl(b)}let c=qp(m),a=await fetch(c.DEVICE_CODE_URL,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json","User-Agent":`opencode/${Jt.VERSION}`},body:JSON.stringify({client_id:bl,scope:"read:user"})});if(!a.ok)throw new Error("Failed to initiate device authorization");let d=await a.json();return{url:d.verification_uri,instructions:`Enter code: ${d.user_code}`,method:"auto",async callback(){for(;;){let b=await fetch(c.ACCESS_TOKEN_URL,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json","User-Agent":`opencode/${Jt.VERSION}`},body:JSON.stringify({client_id:bl,device_code:d.device_code,grant_type:"urn:ietf:params:oauth:grant-type:device_code"})});if(!b.ok)return{type:"failed"};let s=await b.json();if(s.access_token){let p={type:"success",refresh:s.access_token,access:s.access_token,expires:0};return i==="enterprise"&&(p.enterpriseUrl=m),p}if(s.error==="authorization_pending"){await Ei(d.interval*1e3+Di);continue}if(s.error==="slow_down"){let p=(d.interval+5)*1e3,w=s.interval;w&&typeof w=="number"&&w>0&&(p=w*1e3),await Ei(p+Di);continue}if(s.error)return{type:"failed"};await Ei(d.interval*1e3+Di)}}}}}]},"chat.params":n(async(o,i)=>{o.model.providerID.includes("github-copilot")&&o.model.api.id.includes("gpt")&&(i.maxOutputTokens=void 0)},"chat.params"),"chat.headers":n(async(o,i)=>{if(!o.model.providerID.includes("github-copilot"))return;if(o.model.api.npm==="@ai-sdk/anthropic"&&(i.headers["anthropic-beta"]="interleaved-thinking-2025-05-14"),(await e.session.message({path:{id:o.message.sessionID,messageID:o.message.id},query:{directory:t.directory},throwOnError:!0}).catch(()=>{}))?.data.parts?.some(a=>a.type==="compaction")){i.headers["x-initiator"]="agent";return}let c=await e.session.get({path:{id:o.sessionID},query:{directory:t.directory},throwOnError:!0}).catch(()=>{});!c||!c.data.parentID||(i.headers["x-initiator"]="agent")},"chat.headers")}}n(Il,"CopilotAuthPlugin");import{gitlabAuthPlugin as $p}from"opencode-gitlab-auth";import{PoeAuthPlugin as Wp}from"opencode-poe-auth";async function kl(t){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(kl,"CloudflareWorkersAuthPlugin");async function El(t){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(El,"CloudflareAIGatewayAuthPlugin");import{Effect as en,Layer as Ti,ServiceMap as Bp,Stream as Gp}from"effect";var Si;(c=>{function t(a){let d=Be.pluginSpecifier(a);return{spec:d,options:Be.pluginOptions(a),deprecated:Sa(d)}}n(t,"plan");async function e(a,d){let b="";try{b=await _a(a.spec)}catch(p){return{ok:!1,stage:"install",error:p}}if(!b)return{ok:!1,stage:"install",error:new Error(`Plugin ${a.spec} target is empty`)};let s;try{s=await Ra(a.spec,b,d)}catch(p){return{ok:!1,stage:"entry",error:p}}if(!s.entry)return{ok:!1,stage:"missing",value:{...a,source:s.source,target:s.target,pkg:s.pkg,message:`Plugin ${a.spec} does not expose a ${d} entrypoint`}};if(s.source==="npm")try{await Oa(s.target,Jt.VERSION,s.pkg)}catch(p){return{ok:!1,stage:"compatibility",error:p}}return{ok:!0,value:{...a,source:s.source,target:s.target,entry:s.entry,pkg:s.pkg}}}c.resolve=e,n(e,"resolve");async function o(a){let d;try{d=await import(a.entry)}catch(b){return{ok:!1,error:b}}return d?{ok:!0,value:{...a,mod:d}}:{ok:!1,error:new Error(`Plugin ${a.spec} module is empty`)}}c.load=o,n(o,"load");async function i(a,d,b,s,p,w){let f=a.plan;if(f.deprecated)return;w?.start?.(a,b);let v=await e(f,d);if(!v.ok){if(v.stage==="missing"){if(p){let h=await p(v.value,a.origin,b);if(h!==void 0)return h}w?.missing?.(a,b,v.value.message,v.value);return}w?.error?.(a,b,v.stage,v.error);return}let I=await o(v.value);if(!I.ok){w?.error?.(a,b,"load",I.error,v.value);return}return s?s(I.value,a.origin,b):I.value}n(i,"attempt");async function m(a){let d=a.items.map(w=>({origin:w,plan:t(w.spec)})),b=[];for(let w of d)b.push(i(w,a.kind,!1,a.finish,a.missing,a.report));let s=await Promise.all(b);if(a.wait){let w;for(let f=0;f<d.length;f++){if(s[f]!==void 0)continue;let v=d[f];!v||Pa(v.plan.spec)!=="file"||(w??=a.wait(),await w,s[f]=await i(v,a.kind,!0,a.finish,a.missing,a.report))}}let p=[];for(let w of s)w!==void 0&&p.push(w);return p}c.loadExternal=m,n(m,"loadExternal")})(Si||={});var Mt;(I=>{let t=Ae.create({service:"plugin"});class e extends Bp.Service()("@opencode/Plugin"){static{n(this,"Service")}}I.Service=e;let o=[yl,Il,$p,Wp,kl,El];function i(h){return typeof h=="function"}n(i,"isServerPlugin");function m(h){if(i(h))return h;if(!(!h||typeof h!="object"||!("server"in h))&&i(h.server))return h.server}n(m,"getServerPlugin");function c(h){let S=new Set,C=[];for(let[l,P]of Object.entries(h)){if(l==="__esModule"||l==="__name"||l==="__export"||l==="module.exports"||S.has(P))continue;S.add(P);let y=P;y&&typeof y=="object"&&"default"in y&&typeof y.default=="function"&&(y=y.default);let D=m(y);D&&C.push(D)}if(C.length===0)throw new TypeError("Plugin export is not a function");return C}n(c,"getLegacyPlugins");function a(h,S){en.runFork(h.publish(Ke.Event.Error,{error:new tt.Unknown({message:S}).toObject()}))}n(a,"publishPluginError");async function d(h,S,C){let l=Aa(h.mod,h.spec,"server","detect");if(l){await Ma(h.source,h.spec,h.target,Ca(l.id,h.spec),h.pkg),C.push(await l.server(S,h.options));return}for(let P of c(h.mod))C.push(await P(S,h.options))}n(d,"applyPlugin"),I.layer=Ti.effect(e,en.gen(function*(){let h=yield*Me.Service,S=yield*Be.Service,C=yield*ae.make(en.fn("Plugin.state")(function*(D){let T=[],{Server:R}=yield*en.promise(()=>import("./server-TLPVN3ZL.js")),_=bi({baseUrl:"http://localhost:4096",directory:D.directory,headers:ze.OPENCODE_SERVER_PASSWORD?{Authorization:`Basic ${Buffer.from(`${ze.OPENCODE_SERVER_USERNAME??"opencode"}:${ze.OPENCODE_SERVER_PASSWORD}`).toString("base64")}`}:void 0,fetch:n(async(...r)=>R.Default().fetch(...r),"fetch")}),E=yield*S.get(),x={client:_,project:D.project,worktree:D.worktree,directory:D.directory,get serverUrl(){return R.url??new URL("http://localhost:4096")},$:typeof Bun>"u"?void 0:Bun.$};for(let r of o){t.info("loading internal plugin",{name:r.name});let u=yield*en.tryPromise({try:n(()=>r(x),"try"),catch:n(g=>{t.error("failed to load internal plugin",{name:r.name,error:g})},"catch")}).pipe(en.option);u._tag==="Some"&&T.push(u.value)}let k=ze.OPENCODE_PURE?[]:E.plugin_origins??[];ze.OPENCODE_PURE&&E.plugin_origins?.length&&t.info("skipping external plugins in pure mode",{count:E.plugin_origins.length}),k.length&&(yield*S.waitForDependencies());let M=yield*en.promise(()=>Si.loadExternal({items:k,kind:"server",report:{start(r){t.info("loading plugin",{path:r.plan.spec})},missing(r,u,g){t.warn("plugin has no server entrypoint",{path:r.plan.spec,message:g})},error(r,u,g,L,j){let z=r.plan.spec,V=L instanceof Error?L.cause??L:L,H=g==="load"?ao(L):ao(V);if(g==="install"){let G=Ta(z);t.error("failed to install plugin",{pkg:G.pkg,version:G.version,error:H}),a(h,`Failed to install plugin ${G.pkg}@${G.version}: ${H}`);return}if(g==="compatibility"){t.warn("plugin incompatible",{path:z,error:H}),a(h,`Plugin ${z} skipped: ${H}`);return}if(g==="entry"){t.error("failed to resolve plugin server entry",{path:z,error:H}),a(h,`Failed to load plugin ${z}: ${H}`);return}t.error("failed to load plugin",{path:z,target:j?.entry,error:H}),a(h,`Failed to load plugin ${z}: ${H}`)}}}));for(let r of M)r&&(yield*en.tryPromise({try:n(()=>d(r,x,T),"try"),catch:n(u=>{let g=ao(u);return t.error("failed to load plugin",{path:r.spec,error:g}),g},"catch")}).pipe(en.catch(u=>h.publish(Ke.Event.Error,{error:new tt.Unknown({message:`Failed to load plugin ${r.spec}: ${u}`}).toObject()}))));for(let r of T)yield*en.tryPromise({try:n(()=>Promise.resolve(r.config?.(E)),"try"),catch:n(u=>{t.error("plugin config hook failed",{error:u})},"catch")}).pipe(en.ignore);return yield*h.subscribeAll().pipe(Gp.runForEach(r=>en.sync(()=>{for(let u of T)u.event?.({event:r})})),en.forkScoped),{hooks:T}})),l=en.fn("Plugin.trigger")(function*(D,T,R){if(!D)return R;let _=yield*ae.get(C);for(let E of _.hooks){let x=E[D];if(x)try{yield*en.promise(async()=>x(T,R))}catch(k){t.error("plugin hook error",{name:D,error:k instanceof Error?k.message:String(k)})}}return R}),P=en.fn("Plugin.list")(function*(){return(yield*ae.get(C)).hooks}),y=en.fn("Plugin.init")(function*(){yield*ae.get(C)});return e.of({trigger:l,list:P,init:y})})),I.defaultLayer=I.layer.pipe(Ti.provide(Me.layer),Ti.provide(Be.defaultLayer));let{runPromise:p}=qe(e,I.defaultLayer);async function w(h,S,C){return p(l=>l.trigger(h,S,C))}I.trigger=w,n(w,"trigger");async function f(){return p(h=>h.list())}I.list=f,n(f,"list");async function v(){return p(h=>h.init())}I.init=v,n(v,"init")})(Mt||={});import rm from"path";import{Effect as Je,Layer as Cr,ServiceMap as sm}from"effect";import{createAmazonBedrock as im}from"@ai-sdk/amazon-bedrock";import{createAnthropic as am}from"@ai-sdk/anthropic";import{createAzure as lm}from"@ai-sdk/azure";import{createGoogleGenerativeAI as cm}from"@ai-sdk/google";import{createVertex as dm}from"@ai-sdk/google-vertex";import{createVertexAnthropic as um}from"@ai-sdk/google-vertex/anthropic";import{createOpenAI as pm}from"@ai-sdk/openai";import{createOpenAICompatible as ac}from"@ai-sdk/openai-compatible";import{createOpenRouter as fm}from"@openrouter/ai-sdk-provider";import{withoutTrailingSlash as Xf,withUserAgentSuffix as Zf}from"@ai-sdk/provider-utils";import{InvalidResponseDataError as _i}from"@ai-sdk/provider";import{combineHeaders as Pl,createEventSourceResponseHandler as Kp,createJsonErrorResponseHandler as Xp,createJsonResponseHandler as Zp,generateId as gs,isParsableJson as Ol,parseProviderOptions as _l,postJsonToApi as Rl}from"@ai-sdk/provider-utils";import{z as Ye}from"zod/v4";import{UnsupportedFunctionalityError as Hp}from"@ai-sdk/provider";import{convertToBase64 as Vp}from"@ai-sdk/provider-utils";function _r(t){return t?.providerOptions?.copilot??{}}n(_r,"getOpenAIMetadata");function Dl(t){let e=[];for(let{role:o,content:i,...m}of t){let c=_r({...m});switch(o){case"system":{e.push({role:"system",content:i,...c});break}case"user":{if(i.length===1&&i[0].type==="text"){e.push({role:"user",content:i[0].text,..._r(i[0])});break}e.push({role:"user",content:i.map(a=>{let d=_r(a);switch(a.type){case"text":return{type:"text",text:a.text,...d};case"file":if(a.mediaType.startsWith("image/")){let b=a.mediaType==="image/*"?"image/jpeg":a.mediaType;return{type:"image_url",image_url:{url:a.data instanceof URL?a.data.toString():`data:${b};base64,${Vp(a.data)}`},...d}}else throw new Hp({functionality:`file part media type ${a.mediaType}`})}}),...c});break}case"assistant":{let a="",d,b,s=[];for(let p of i){let w=_r(p),f=p.providerOptions?.copilot?.reasoningOpaque;switch(f&&!b&&(b=f),p.type){case"text":{a+=p.text;break}case"reasoning":{p.text&&(d=p.text);break}case"tool-call":{s.push({id:p.toolCallId,type:"function",function:{name:p.toolName,arguments:JSON.stringify(p.input)},...w});break}}}e.push({role:"assistant",content:a||null,tool_calls:s.length>0?s:void 0,reasoning_text:b?d:void 0,reasoning_opaque:b,...c});break}case"tool":{for(let a of i){if(a.type==="tool-approval-response")continue;let d=a.output,b;switch(d.type){case"text":case"error-text":b=d.value;break;case"execution-denied":b=d.reason??"Tool execution denied.";break;case"content":case"json":case"error-json":b=JSON.stringify(d.value);break}let s=_r(a);e.push({role:"tool",tool_call_id:a.toolCallId,content:b,...s})}break}default:{let a=o;throw new Error(`Unsupported role: ${a}`)}}}return e}n(Dl,"convertToOpenAICompatibleChatMessages");function Pi({id:t,model:e,created:o}){return{id:t??void 0,modelId:e??void 0,timestamp:o!=null?new Date(o*1e3):void 0}}n(Pi,"getResponseMetadata");function Oi(t){switch(t){case"stop":return"stop";case"length":return"length";case"content_filter":return"content-filter";case"function_call":case"tool_calls":return"tool-calls";default:return"other"}}n(Oi,"mapOpenAICompatibleFinishReason");import{z as Rr}from"zod/v4";var hs=Rr.object({user:Rr.string().optional(),reasoningEffort:Rr.string().optional(),textVerbosity:Rr.string().optional(),thinking_budget:Rr.number().optional()});import{z as fo}from"zod/v4";var Yp=fo.object({error:fo.object({message:fo.string(),type:fo.string().nullish(),param:fo.any().nullish(),code:fo.union([fo.string(),fo.number()]).nullish()})}),Sl={errorSchema:Yp,errorToMessage:n(t=>t.error.message,"errorToMessage")};import{UnsupportedFunctionalityError as Jp}from"@ai-sdk/provider";function Tl({tools:t,toolChoice:e}){t=t?.length?t:void 0;let o=[];if(t==null)return{tools:void 0,toolChoice:void 0,toolWarnings:o};let i=[];for(let c of t)c.type==="provider"?o.push({type:"unsupported",feature:`tool type: ${c.type}`}):i.push({type:"function",function:{name:c.name,description:c.description,parameters:c.inputSchema}});if(e==null)return{tools:i,toolChoice:void 0,toolWarnings:o};let m=e.type;switch(m){case"auto":case"none":case"required":return{tools:i,toolChoice:m,toolWarnings:o};case"tool":return{tools:i,toolChoice:{type:"function",function:{name:e.toolName}},toolWarnings:o};default:{let c=m;throw new Jp({functionality:`tool choice type: ${c}`})}}}n(Tl,"prepareTools");var ys=class{static{n(this,"OpenAICompatibleChatLanguageModel")}specificationVersion="v3";supportsStructuredOutputs;modelId;config;failedResponseHandler;chunkSchema;constructor(e,o){this.modelId=e,this.config=o;let i=o.errorStructure??Sl;this.chunkSchema=ef(i.errorSchema),this.failedResponseHandler=Xp(i),this.supportsStructuredOutputs=o.supportsStructuredOutputs??!1}get provider(){return this.config.provider}get providerOptionsName(){return this.config.provider.split(".")[0].trim()}get supportedUrls(){return this.config.supportedUrls?.()??{}}async getArgs({prompt:e,maxOutputTokens:o,temperature:i,topP:m,topK:c,frequencyPenalty:a,presencePenalty:d,providerOptions:b,stopSequences:s,responseFormat:p,seed:w,toolChoice:f,tools:v}){let I=[],h=Object.assign(await _l({provider:"copilot",providerOptions:b,schema:hs})??{},await _l({provider:this.providerOptionsName,providerOptions:b,schema:hs})??{});c!=null&&I.push({type:"unsupported",feature:"topK"}),p?.type==="json"&&p.schema!=null&&!this.supportsStructuredOutputs&&I.push({type:"unsupported",feature:"responseFormat",details:"JSON response format schema is only supported with structuredOutputs"});let{tools:S,toolChoice:C,toolWarnings:l}=Tl({tools:v,toolChoice:f});return{args:{model:this.modelId,user:h.user,max_tokens:o,temperature:i,top_p:m,frequency_penalty:a,presence_penalty:d,response_format:p?.type==="json"?this.supportsStructuredOutputs===!0&&p.schema!=null?{type:"json_schema",json_schema:{schema:p.schema,name:p.name??"response",description:p.description}}:{type:"json_object"}:void 0,stop:s,seed:w,...Object.fromEntries(Object.entries(b?.[this.providerOptionsName]??{}).filter(([P])=>!Object.keys(hs.shape).includes(P))),reasoning_effort:h.reasoningEffort,verbosity:h.textVerbosity,messages:Dl(e),tools:S,tool_choice:C,thinking_budget:h.thinking_budget},warnings:[...I,...l]}}async doGenerate(e){let{args:o,warnings:i}=await this.getArgs({...e}),m=JSON.stringify(o),{responseHeaders:c,value:a,rawValue:d}=await Rl({url:this.config.url({path:"/chat/completions",modelId:this.modelId}),headers:Pl(this.config.headers(),e.headers),body:o,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:Zp(Qp),abortSignal:e.abortSignal,fetch:this.config.fetch}),b=a.choices[0],s=[],p=b.message.content;p!=null&&p.length>0&&s.push({type:"text",text:p,providerMetadata:b.message.reasoning_opaque?{copilot:{reasoningOpaque:b.message.reasoning_opaque}}:void 0});let w=b.message.reasoning_text;if(w!=null&&w.length>0&&s.push({type:"reasoning",text:w,providerMetadata:b.message.reasoning_opaque?{copilot:{reasoningOpaque:b.message.reasoning_opaque}}:void 0}),b.message.tool_calls!=null)for(let I of b.message.tool_calls)s.push({type:"tool-call",toolCallId:I.id??gs(),toolName:I.function.name,input:I.function.arguments,providerMetadata:b.message.reasoning_opaque?{copilot:{reasoningOpaque:b.message.reasoning_opaque}}:void 0});let f={[this.providerOptionsName]:{},...await this.config.metadataExtractor?.extractMetadata?.({parsedBody:d})},v=a.usage?.completion_tokens_details;return v?.accepted_prediction_tokens!=null&&(f[this.providerOptionsName].acceptedPredictionTokens=v?.accepted_prediction_tokens),v?.rejected_prediction_tokens!=null&&(f[this.providerOptionsName].rejectedPredictionTokens=v?.rejected_prediction_tokens),{content:s,finishReason:{unified:Oi(b.finish_reason),raw:b.finish_reason??void 0},usage:{inputTokens:{total:a.usage?.prompt_tokens??void 0,noCache:void 0,cacheRead:a.usage?.prompt_tokens_details?.cached_tokens??void 0,cacheWrite:void 0},outputTokens:{total:a.usage?.completion_tokens??void 0,text:void 0,reasoning:a.usage?.completion_tokens_details?.reasoning_tokens??void 0},raw:a.usage??void 0},providerMetadata:f,request:{body:m},response:{...Pi(a),headers:c,body:d},warnings:i}}async doStream(e){let{args:o,warnings:i}=await this.getArgs({...e}),m={...o,stream:!0,stream_options:this.config.includeUsage?{include_usage:!0}:void 0},c=this.config.metadataExtractor?.createStreamExtractor(),{responseHeaders:a,value:d}=await Rl({url:this.config.url({path:"/chat/completions",modelId:this.modelId}),headers:Pl(this.config.headers(),e.headers),body:m,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:Kp(this.chunkSchema),abortSignal:e.abortSignal,fetch:this.config.fetch}),b=[],s={unified:"other",raw:void 0},p={completionTokens:void 0,completionTokensDetails:{reasoningTokens:void 0,acceptedPredictionTokens:void 0,rejectedPredictionTokens:void 0},promptTokens:void 0,promptTokensDetails:{cachedTokens:void 0},totalTokens:void 0},w=!0,f=this.providerOptionsName,v=!1,I=!1,h;return{stream:d.pipeThrough(new TransformStream({start(S){S.enqueue({type:"stream-start",warnings:i})},transform(S,C){if(e.includeRawChunks&&C.enqueue({type:"raw",rawValue:S.rawValue}),!S.success){s={unified:"error",raw:void 0},C.enqueue({type:"error",error:S.error});return}let l=S.value;if(c?.processChunk(S.rawValue),"error"in l){s={unified:"error",raw:void 0},C.enqueue({type:"error",error:l.error.message});return}if(w&&(w=!1,C.enqueue({type:"response-metadata",...Pi(l)})),l.usage!=null){let{prompt_tokens:T,completion_tokens:R,total_tokens:_,prompt_tokens_details:E,completion_tokens_details:x}=l.usage;p.promptTokens=T??void 0,p.completionTokens=R??void 0,p.totalTokens=_??void 0,x?.reasoning_tokens!=null&&(p.completionTokensDetails.reasoningTokens=x?.reasoning_tokens),x?.accepted_prediction_tokens!=null&&(p.completionTokensDetails.acceptedPredictionTokens=x?.accepted_prediction_tokens),x?.rejected_prediction_tokens!=null&&(p.completionTokensDetails.rejectedPredictionTokens=x?.rejected_prediction_tokens),E?.cached_tokens!=null&&(p.promptTokensDetails.cachedTokens=E?.cached_tokens)}let P=l.choices[0];if(P?.finish_reason!=null&&(s={unified:Oi(P.finish_reason),raw:P.finish_reason??void 0}),P?.delta==null)return;let y=P.delta;if(y.reasoning_opaque){if(h!=null)throw new _i({data:y,message:"Multiple reasoning_opaque values received in a single response. Only one thinking part per response is supported."});h=y.reasoning_opaque}let D=y.reasoning_text;if(D&&(v||(C.enqueue({type:"reasoning-start",id:"reasoning-0"}),v=!0),C.enqueue({type:"reasoning-delta",id:"reasoning-0",delta:D})),y.content&&(v&&!I&&(C.enqueue({type:"reasoning-end",id:"reasoning-0",providerMetadata:h?{copilot:{reasoningOpaque:h}}:void 0}),v=!1),I||(C.enqueue({type:"text-start",id:"txt-0",providerMetadata:h?{copilot:{reasoningOpaque:h}}:void 0}),I=!0),C.enqueue({type:"text-delta",id:"txt-0",delta:y.content})),y.tool_calls!=null){v&&(C.enqueue({type:"reasoning-end",id:"reasoning-0",providerMetadata:h?{copilot:{reasoningOpaque:h}}:void 0}),v=!1);for(let T of y.tool_calls){let R=T.index;if(b[R]==null){if(T.id==null)throw new _i({data:T,message:"Expected 'id' to be a string."});if(T.function?.name==null)throw new _i({data:T,message:"Expected 'function.name' to be a string."});C.enqueue({type:"tool-input-start",id:T.id,toolName:T.function.name}),b[R]={id:T.id,type:"function",function:{name:T.function.name,arguments:T.function.arguments??""},hasFinished:!1};let E=b[R];E.function?.name!=null&&E.function?.arguments!=null&&(E.function.arguments.length>0&&C.enqueue({type:"tool-input-delta",id:E.id,delta:E.function.arguments}),Ol(E.function.arguments)&&(C.enqueue({type:"tool-input-end",id:E.id}),C.enqueue({type:"tool-call",toolCallId:E.id??gs(),toolName:E.function.name,input:E.function.arguments,providerMetadata:h?{copilot:{reasoningOpaque:h}}:void 0}),E.hasFinished=!0));continue}let _=b[R];_.hasFinished||(T.function?.arguments!=null&&(_.function.arguments+=T.function?.arguments??""),C.enqueue({type:"tool-input-delta",id:_.id,delta:T.function.arguments??""}),_.function?.name!=null&&_.function?.arguments!=null&&Ol(_.function.arguments)&&(C.enqueue({type:"tool-input-end",id:_.id}),C.enqueue({type:"tool-call",toolCallId:_.id??gs(),toolName:_.function.name,input:_.function.arguments,providerMetadata:h?{copilot:{reasoningOpaque:h}}:void 0}),_.hasFinished=!0))}}},flush(S){v&&S.enqueue({type:"reasoning-end",id:"reasoning-0",providerMetadata:h?{copilot:{reasoningOpaque:h}}:void 0}),I&&S.enqueue({type:"text-end",id:"txt-0"});for(let l of b.filter(P=>!P.hasFinished))S.enqueue({type:"tool-input-end",id:l.id}),S.enqueue({type:"tool-call",toolCallId:l.id??gs(),toolName:l.function.name,input:l.function.arguments});let C={[f]:{},...h?{copilot:{reasoningOpaque:h}}:{},...c?.buildMetadata()};p.completionTokensDetails.acceptedPredictionTokens!=null&&(C[f].acceptedPredictionTokens=p.completionTokensDetails.acceptedPredictionTokens),p.completionTokensDetails.rejectedPredictionTokens!=null&&(C[f].rejectedPredictionTokens=p.completionTokensDetails.rejectedPredictionTokens),S.enqueue({type:"finish",finishReason:s,usage:{inputTokens:{total:p.promptTokens,noCache:p.promptTokens!=null&&p.promptTokensDetails.cachedTokens!=null?p.promptTokens-p.promptTokensDetails.cachedTokens:void 0,cacheRead:p.promptTokensDetails.cachedTokens,cacheWrite:void 0},outputTokens:{total:p.completionTokens,text:void 0,reasoning:p.completionTokensDetails.reasoningTokens},raw:{prompt_tokens:p.promptTokens??null,completion_tokens:p.completionTokens??null,total_tokens:p.totalTokens??null}},providerMetadata:C})}})),request:{body:m},response:{headers:a}}}},Cl=Ye.object({prompt_tokens:Ye.number().nullish(),completion_tokens:Ye.number().nullish(),total_tokens:Ye.number().nullish(),prompt_tokens_details:Ye.object({cached_tokens:Ye.number().nullish()}).nullish(),completion_tokens_details:Ye.object({reasoning_tokens:Ye.number().nullish(),accepted_prediction_tokens:Ye.number().nullish(),rejected_prediction_tokens:Ye.number().nullish()}).nullish()}).nullish(),Qp=Ye.object({id:Ye.string().nullish(),created:Ye.number().nullish(),model:Ye.string().nullish(),choices:Ye.array(Ye.object({message:Ye.object({role:Ye.literal("assistant").nullish(),content:Ye.string().nullish(),reasoning_text:Ye.string().nullish(),reasoning_opaque:Ye.string().nullish(),tool_calls:Ye.array(Ye.object({id:Ye.string().nullish(),function:Ye.object({name:Ye.string(),arguments:Ye.string()})})).nullish()}),finish_reason:Ye.string().nullish()})),usage:Cl}),ef=n(t=>Ye.union([Ye.object({id:Ye.string().nullish(),created:Ye.number().nullish(),model:Ye.string().nullish(),choices:Ye.array(Ye.object({delta:Ye.object({role:Ye.enum(["assistant"]).nullish(),content:Ye.string().nullish(),reasoning_text:Ye.string().nullish(),reasoning_opaque:Ye.string().nullish(),tool_calls:Ye.array(Ye.object({index:Ye.number(),id:Ye.string().nullish(),function:Ye.object({name:Ye.string().nullish(),arguments:Ye.string().nullish()})})).nullish()}).nullish(),finish_reason:Ye.string().nullish()})),usage:Cl}),t]),"createOpenAICompatibleChatChunkSchema");import{APICallError as bf}from"@ai-sdk/provider";import{combineHeaders as Bl,createEventSourceResponseHandler as wf,createJsonResponseHandler as vf,generateId as bs,parseProviderOptions as xf,postJsonToApi as Gl}from"@ai-sdk/provider-utils";import{z as A}from"zod/v4";import{z as mo}from"zod/v4";import{createJsonErrorResponseHandler as tf}from"@ai-sdk/provider-utils";var nf=mo.object({error:mo.object({message:mo.string(),type:mo.string().nullish(),param:mo.any().nullish(),code:mo.union([mo.string(),mo.number()]).nullish()})}),Ri=tf({errorSchema:nf,errorToMessage:n(t=>t.error.message,"errorToMessage")});import{UnsupportedFunctionalityError as rf}from"@ai-sdk/provider";import{convertToBase64 as Al,parseProviderOptions as sf}from"@ai-sdk/provider-utils";import{z as Mi}from"zod/v4";import{createProviderToolFactoryWithOutputSchema as of}from"@ai-sdk/provider-utils";import{z as wn}from"zod/v4";var Ci=wn.object({action:wn.object({type:wn.literal("exec"),command:wn.array(wn.string()),timeoutMs:wn.number().optional(),user:wn.string().optional(),workingDirectory:wn.string().optional(),env:wn.record(wn.string(),wn.string()).optional()})}),Ai=wn.object({output:wn.string()}),cE=of({id:"openai.local_shell",inputSchema:Ci,outputSchema:Ai});function Ml(t,e){return e?e.some(o=>t.startsWith(o)):!1}n(Ml,"isFileId");async function jl({prompt:t,systemMessageMode:e,fileIdPrefixes:o,store:i,hasLocalShellTool:m=!1}){let c=[],a=[],d=new Set;for(let{role:b,content:s}of t)switch(b){case"system":{switch(e){case"system":{c.push({role:"system",content:s});break}case"developer":{c.push({role:"developer",content:s});break}case"remove":{a.push({type:"other",message:"system messages are removed for this model"});break}default:{let p=e;throw new Error(`Unsupported system message mode: ${p}`)}}break}case"user":{c.push({role:"user",content:s.map((p,w)=>{switch(p.type){case"text":return{type:"input_text",text:p.text};case"file":if(p.mediaType.startsWith("image/")){let f=p.mediaType==="image/*"?"image/jpeg":p.mediaType;return{type:"input_image",...p.data instanceof URL?{image_url:p.data.toString()}:typeof p.data=="string"&&Ml(p.data,o)?{file_id:p.data}:{image_url:`data:${f};base64,${Al(p.data)}`},detail:p.providerOptions?.openai?.imageDetail}}else{if(p.mediaType==="application/pdf")return p.data instanceof URL?{type:"input_file",file_url:p.data.toString()}:{type:"input_file",...typeof p.data=="string"&&Ml(p.data,o)?{file_id:p.data}:{filename:p.filename??`part-${w}.pdf`,file_data:`data:application/pdf;base64,${Al(p.data)}`}};throw new rf({functionality:`file part media type ${p.mediaType}`})}}})});break}case"assistant":{let p={},w={};for(let f of s)switch(f.type){case"text":{c.push({role:"assistant",content:[{type:"output_text",text:f.text}],id:f.providerOptions?.openai?.itemId??void 0});break}case"tool-call":{if(w[f.toolCallId]=f,f.providerExecuted)break;if(m&&f.toolName==="local_shell"){let v=Ci.parse(f.input);c.push({type:"local_shell_call",call_id:f.toolCallId,id:f.providerOptions?.openai?.itemId??void 0,action:{type:"exec",command:v.action.command,timeout_ms:v.action.timeoutMs,user:v.action.user,working_directory:v.action.workingDirectory,env:v.action.env}});break}c.push({type:"function_call",call_id:f.toolCallId,name:f.toolName,arguments:JSON.stringify(f.input),id:f.providerOptions?.openai?.itemId??void 0});break}case"tool-result":{i?c.push({type:"item_reference",id:f.toolCallId}):a.push({type:"other",message:`Results for OpenAI tool ${f.toolName} are not sent to the API when store is false`});break}case"reasoning":{let v=await sf({provider:"copilot",providerOptions:f.providerOptions,schema:af}),I=v?.itemId;if(I!=null){let h=p[I];if(i)h===void 0&&(c.push({type:"item_reference",id:I}),p[I]={type:"reasoning",id:I,summary:[]});else{let S=[];f.text.length>0?S.push({type:"summary_text",text:f.text}):h!==void 0&&a.push({type:"other",message:`Cannot append empty reasoning part to existing reasoning sequence. Skipping reasoning part: ${JSON.stringify(f)}.`}),h===void 0?(p[I]={type:"reasoning",id:I,encrypted_content:v?.reasoningEncryptedContent,summary:S},c.push(p[I])):h.summary.push(...S)}}else a.push({type:"other",message:`Non-OpenAI reasoning parts are not supported. Skipping reasoning part: ${JSON.stringify(f)}.`});break}}break}case"tool":{for(let p of s){if(p.type==="tool-approval-response"){if(d.has(p.approvalId))continue;d.add(p.approvalId),i&&c.push({type:"item_reference",id:p.approvalId}),c.push({type:"mcp_approval_response",approval_request_id:p.approvalId,approve:p.approved});continue}let w=p.output;if(w.type==="execution-denied"&&w.providerOptions?.openai?.approvalId)continue;if(m&&p.toolName==="local_shell"&&w.type==="json"){c.push({type:"local_shell_call_output",call_id:p.toolCallId,output:Ai.parse(w.value).output});break}let f;switch(w.type){case"text":case"error-text":f=w.value;break;case"execution-denied":f=w.reason??"Tool execution denied.";break;case"content":case"json":case"error-json":f=JSON.stringify(w.value);break}c.push({type:"function_call_output",call_id:p.toolCallId,output:f})}break}default:{let p=b;throw new Error(`Unsupported role: ${p}`)}}return{input:c,warnings:a}}n(jl,"convertToOpenAIResponsesInput");var af=Mi.object({itemId:Mi.string().nullish(),reasoningEncryptedContent:Mi.string().nullish()});function ji({finishReason:t,hasFunctionCall:e}){switch(t){case void 0:case null:return e?"tool-calls":"stop";case"max_output_tokens":return"length";case"content_filter":return"content-filter";default:return e?"tool-calls":"other"}}n(ji,"mapOpenAIResponseFinishReason");import{UnsupportedFunctionalityError as yf}from"@ai-sdk/provider";import{createProviderToolFactoryWithOutputSchema as lf}from"@ai-sdk/provider-utils";import{z as Zt}from"zod/v4";var cf=Zt.object({code:Zt.string().nullish(),containerId:Zt.string()}),df=Zt.object({outputs:Zt.array(Zt.discriminatedUnion("type",[Zt.object({type:Zt.literal("logs"),logs:Zt.string()}),Zt.object({type:Zt.literal("image"),url:Zt.string()})])).nullish()}),Ll=Zt.object({container:Zt.union([Zt.string(),Zt.object({fileIds:Zt.array(Zt.string()).optional()})]).optional()}),xE=lf({id:"openai.code_interpreter",inputSchema:cf,outputSchema:df});import{createProviderToolFactoryWithOutputSchema as uf}from"@ai-sdk/provider-utils";import{z as ut}from"zod/v4";var Nl=ut.object({key:ut.string(),type:ut.enum(["eq","ne","gt","gte","lt","lte"]),value:ut.union([ut.string(),ut.number(),ut.boolean()])}),Ul=ut.object({type:ut.enum(["and","or"]),filters:ut.array(ut.union([Nl,ut.lazy(()=>Ul)]))}),zl=ut.object({vectorStoreIds:ut.array(ut.string()),maxNumResults:ut.number().optional(),ranking:ut.object({ranker:ut.string().optional(),scoreThreshold:ut.number().optional()}).optional(),filters:ut.union([Nl,Ul]).optional()}),pf=ut.object({queries:ut.array(ut.string()),results:ut.array(ut.object({attributes:ut.record(ut.string(),ut.unknown()),fileId:ut.string(),filename:ut.string(),score:ut.number(),text:ut.string()})).nullable()}),SE=uf({id:"openai.file_search",inputSchema:ut.object({}),outputSchema:pf});import{createProviderToolFactory as ff}from"@ai-sdk/provider-utils";import{z as Ut}from"zod/v4";var Fl=Ut.object({filters:Ut.object({allowedDomains:Ut.array(Ut.string()).optional()}).optional(),searchContextSize:Ut.enum(["low","medium","high"]).optional(),userLocation:Ut.object({type:Ut.literal("approximate"),country:Ut.string().optional(),city:Ut.string().optional(),region:Ut.string().optional(),timezone:Ut.string().optional()}).optional()}),_E=ff({id:"openai.web_search",inputSchema:Ut.object({action:Ut.discriminatedUnion("type",[Ut.object({type:Ut.literal("search"),query:Ut.string().nullish()}),Ut.object({type:Ut.literal("open_page"),url:Ut.string()}),Ut.object({type:Ut.literal("find"),url:Ut.string(),pattern:Ut.string()})]).nullish()})});import{createProviderToolFactory as mf}from"@ai-sdk/provider-utils";import{z as Bt}from"zod/v4";var ql=Bt.object({searchContextSize:Bt.enum(["low","medium","high"]).optional(),userLocation:Bt.object({type:Bt.literal("approximate"),country:Bt.string().optional(),city:Bt.string().optional(),region:Bt.string().optional(),timezone:Bt.string().optional()}).optional()}),jE=mf({id:"openai.web_search_preview",inputSchema:Bt.object({action:Bt.discriminatedUnion("type",[Bt.object({type:Bt.literal("search"),query:Bt.string().nullish()}),Bt.object({type:Bt.literal("open_page"),url:Bt.string()}),Bt.object({type:Bt.literal("find"),url:Bt.string(),pattern:Bt.string()})]).nullish()})});import{createProviderToolFactoryWithOutputSchema as hf}from"@ai-sdk/provider-utils";import{z as nn}from"zod/v4";var $l=nn.object({background:nn.enum(["auto","opaque","transparent"]).optional(),inputFidelity:nn.enum(["low","high"]).optional(),inputImageMask:nn.object({fileId:nn.string().optional(),imageUrl:nn.string().optional()}).optional(),model:nn.string().optional(),moderation:nn.enum(["auto"]).optional(),outputCompression:nn.number().int().min(0).max(100).optional(),outputFormat:nn.enum(["png","jpeg","webp"]).optional(),partialImages:nn.number().int().min(0).max(3).optional(),quality:nn.enum(["auto","low","medium","high"]).optional(),size:nn.enum(["1024x1024","1024x1536","1536x1024","auto"]).optional()}).strict(),gf=nn.object({result:nn.string()}),zE=hf({id:"openai.image_generation",inputSchema:nn.object({}),outputSchema:gf});function Wl({tools:t,toolChoice:e,strictJsonSchema:o}){t=t?.length?t:void 0;let i=[];if(t==null)return{tools:void 0,toolChoice:void 0,toolWarnings:i};let m=[];for(let a of t)switch(a.type){case"function":m.push({type:"function",name:a.name,description:a.description,parameters:a.inputSchema,strict:o});break;case"provider":{switch(a.id){case"openai.file_search":{let d=zl.parse(a.args);m.push({type:"file_search",vector_store_ids:d.vectorStoreIds,max_num_results:d.maxNumResults,ranking_options:d.ranking?{ranker:d.ranking.ranker,score_threshold:d.ranking.scoreThreshold}:void 0,filters:d.filters});break}case"openai.local_shell":{m.push({type:"local_shell"});break}case"openai.web_search_preview":{let d=ql.parse(a.args);m.push({type:"web_search_preview",search_context_size:d.searchContextSize,user_location:d.userLocation});break}case"openai.web_search":{let d=Fl.parse(a.args);m.push({type:"web_search",filters:d.filters!=null?{allowed_domains:d.filters.allowedDomains}:void 0,search_context_size:d.searchContextSize,user_location:d.userLocation});break}case"openai.code_interpreter":{let d=Ll.parse(a.args);m.push({type:"code_interpreter",container:d.container==null?{type:"auto",file_ids:void 0}:typeof d.container=="string"?d.container:{type:"auto",file_ids:d.container.fileIds}});break}case"openai.image_generation":{let d=$l.parse(a.args);m.push({type:"image_generation",background:d.background,input_fidelity:d.inputFidelity,input_image_mask:d.inputImageMask?{file_id:d.inputImageMask.fileId,image_url:d.inputImageMask.imageUrl}:void 0,model:d.model,moderation:d.moderation,partial_images:d.partialImages,quality:d.quality,output_compression:d.outputCompression,output_format:d.outputFormat,size:d.size});break}}break}default:i.push({type:"unsupported",feature:"tool type"});break}if(e==null)return{tools:m,toolChoice:void 0,toolWarnings:i};let c=e.type;switch(c){case"auto":case"none":case"required":return{tools:m,toolChoice:c,toolWarnings:i};case"tool":return{tools:m,toolChoice:e.toolName==="code_interpreter"||e.toolName==="file_search"||e.toolName==="image_generation"||e.toolName==="web_search_preview"||e.toolName==="web_search"?{type:e.toolName}:{type:"function",name:e.toolName},toolWarnings:i};default:{let a=c;throw new yf({functionality:`tool choice type: ${a}`})}}}n(Wl,"prepareResponsesTools");var Hl=A.object({type:A.literal("web_search_call"),id:A.string(),status:A.string(),action:A.discriminatedUnion("type",[A.object({type:A.literal("search"),query:A.string().nullish()}),A.object({type:A.literal("open_page"),url:A.string()}),A.object({type:A.literal("find"),url:A.string(),pattern:A.string()})]).nullish()}),Vl=A.object({type:A.literal("file_search_call"),id:A.string(),queries:A.array(A.string()),results:A.array(A.object({attributes:A.record(A.string(),A.unknown()),file_id:A.string(),filename:A.string(),score:A.number(),text:A.string()})).nullish()}),Yl=A.object({type:A.literal("code_interpreter_call"),id:A.string(),code:A.string().nullable(),container_id:A.string(),outputs:A.array(A.discriminatedUnion("type",[A.object({type:A.literal("logs"),logs:A.string()}),A.object({type:A.literal("image"),url:A.string()})])).nullable()}),Jl=A.object({type:A.literal("local_shell_call"),id:A.string(),call_id:A.string(),action:A.object({type:A.literal("exec"),command:A.array(A.string()),timeout_ms:A.number().optional(),user:A.string().optional(),working_directory:A.string().optional(),env:A.record(A.string(),A.string()).optional()})}),Kl=A.object({type:A.literal("image_generation_call"),id:A.string(),result:A.string()}),Xl=20,Zl=A.array(A.object({token:A.string(),logprob:A.number(),top_logprobs:A.array(A.object({token:A.string(),logprob:A.number()}))})),ws=class{static{n(this,"OpenAIResponsesLanguageModel")}specificationVersion="v3";modelId;config;constructor(e,o){this.modelId=e,this.config=o}supportedUrls={"image/*":[/^https?:\/\/.*$/],"application/pdf":[/^https?:\/\/.*$/]};get provider(){return this.config.provider}async getArgs({maxOutputTokens:e,temperature:o,stopSequences:i,topP:m,topK:c,presencePenalty:a,frequencyPenalty:d,seed:b,prompt:s,providerOptions:p,tools:w,toolChoice:f,responseFormat:v}){let I=[],h=Jf(this.modelId);c!=null&&I.push({type:"unsupported",feature:"topK"}),b!=null&&I.push({type:"unsupported",feature:"seed"}),a!=null&&I.push({type:"unsupported",feature:"presencePenalty"}),d!=null&&I.push({type:"unsupported",feature:"frequencyPenalty"}),i!=null&&I.push({type:"unsupported",feature:"stopSequences"});let S=await xf({provider:"copilot",providerOptions:p,schema:Kf}),{input:C,warnings:l}=await jl({prompt:s,systemMessageMode:h.systemMessageMode,fileIdPrefixes:this.config.fileIdPrefixes,store:S?.store??!0,hasLocalShellTool:T("openai.local_shell")});I.push(...l);let P=S?.strictJsonSchema??!1,y=S?.include;function D(r){y=y!=null?[...y,r]:[r]}n(D,"addInclude");function T(r){return w?.find(u=>u.type==="provider"&&u.id===r)!=null}n(T,"hasOpenAITool");let R=typeof S?.logprobs=="number"?S?.logprobs:S?.logprobs===!0?Xl:void 0;R&&D("message.output_text.logprobs");let _=w?.find(r=>r.type==="provider"&&(r.id==="openai.web_search"||r.id==="openai.web_search_preview"))?.name;_&&D("web_search_call.action.sources"),T("openai.code_interpreter")&&D("code_interpreter_call.outputs");let E={model:this.modelId,input:C,temperature:o,top_p:m,max_output_tokens:e,...(v?.type==="json"||S?.textVerbosity)&&{text:{...v?.type==="json"&&{format:v.schema!=null?{type:"json_schema",strict:P,name:v.name??"response",description:v.description,schema:v.schema}:{type:"json_object"}},...S?.textVerbosity&&{verbosity:S.textVerbosity}}},max_tool_calls:S?.maxToolCalls,metadata:S?.metadata,parallel_tool_calls:S?.parallelToolCalls,previous_response_id:S?.previousResponseId,store:S?.store,user:S?.user,instructions:S?.instructions,service_tier:S?.serviceTier,include:y,prompt_cache_key:S?.promptCacheKey,safety_identifier:S?.safetyIdentifier,top_logprobs:R,...h.isReasoningModel&&(S?.reasoningEffort!=null||S?.reasoningSummary!=null)&&{reasoning:{...S?.reasoningEffort!=null&&{effort:S.reasoningEffort},...S?.reasoningSummary!=null&&{summary:S.reasoningSummary}}},...h.requiredAutoTruncation&&{truncation:"auto"}};h.isReasoningModel?(E.temperature!=null&&(E.temperature=void 0,I.push({type:"unsupported",feature:"temperature",details:"temperature is not supported for reasoning models"})),E.top_p!=null&&(E.top_p=void 0,I.push({type:"unsupported",feature:"topP",details:"topP is not supported for reasoning models"}))):(S?.reasoningEffort!=null&&I.push({type:"unsupported",feature:"reasoningEffort",details:"reasoningEffort is not supported for non-reasoning models"}),S?.reasoningSummary!=null&&I.push({type:"unsupported",feature:"reasoningSummary",details:"reasoningSummary is not supported for non-reasoning models"})),S?.serviceTier==="flex"&&!h.supportsFlexProcessing&&(I.push({type:"unsupported",feature:"serviceTier",details:"flex processing is only available for o3, o4-mini, and gpt-5 models"}),delete E.service_tier),S?.serviceTier==="priority"&&!h.supportsPriorityProcessing&&(I.push({type:"unsupported",feature:"serviceTier",details:"priority processing is only available for supported models (gpt-4, gpt-5, gpt-5-mini, o3, o4-mini) and requires Enterprise access. gpt-5-nano is not supported"}),delete E.service_tier);let{tools:x,toolChoice:k,toolWarnings:M}=Wl({tools:w,toolChoice:f,strictJsonSchema:P});return{webSearchToolName:_,args:{...E,tools:x,tool_choice:k},warnings:[...I,...M]}}async doGenerate(e){let{args:o,warnings:i,webSearchToolName:m}=await this.getArgs(e),c=this.config.url({path:"/responses",modelId:this.modelId}),{responseHeaders:a,value:d,rawValue:b}=await Gl({url:c,headers:Bl(this.config.headers(),e.headers),body:o,failedResponseHandler:Ri,successfulResponseHandler:vf(A.object({id:A.string(),created_at:A.number(),error:A.object({code:A.string(),message:A.string()}).nullish(),model:A.string(),output:A.array(A.discriminatedUnion("type",[A.object({type:A.literal("message"),role:A.literal("assistant"),id:A.string(),content:A.array(A.object({type:A.literal("output_text"),text:A.string(),logprobs:Zl.nullish(),annotations:A.array(A.discriminatedUnion("type",[A.object({type:A.literal("url_citation"),start_index:A.number(),end_index:A.number(),url:A.string(),title:A.string()}),A.object({type:A.literal("file_citation"),file_id:A.string(),filename:A.string().nullish(),index:A.number().nullish(),start_index:A.number().nullish(),end_index:A.number().nullish(),quote:A.string().nullish()}),A.object({type:A.literal("container_file_citation")})]))}))}),Hl,Vl,Yl,Kl,Jl,A.object({type:A.literal("function_call"),call_id:A.string(),name:A.string(),arguments:A.string(),id:A.string()}),A.object({type:A.literal("computer_call"),id:A.string(),status:A.string().optional()}),A.object({type:A.literal("reasoning"),id:A.string(),encrypted_content:A.string().nullish(),summary:A.array(A.object({type:A.literal("summary_text"),text:A.string()}))})])),service_tier:A.string().nullish(),incomplete_details:A.object({reason:A.string()}).nullish(),usage:Ql})),abortSignal:e.abortSignal,fetch:this.config.fetch});if(d.error)throw new bf({message:d.error.message,url:c,requestBodyValues:o,statusCode:400,responseHeaders:a,responseBody:b,isRetryable:!1});let s=[],p=[],w=!1;for(let v of d.output)switch(v.type){case"reasoning":{v.summary.length===0&&v.summary.push({type:"summary_text",text:""});for(let I of v.summary)s.push({type:"reasoning",text:I.text,providerMetadata:{openai:{itemId:v.id,reasoningEncryptedContent:v.encrypted_content??null}}});break}case"image_generation_call":{s.push({type:"tool-call",toolCallId:v.id,toolName:"image_generation",input:"{}",providerExecuted:!0}),s.push({type:"tool-result",toolCallId:v.id,toolName:"image_generation",result:{result:v.result}});break}case"local_shell_call":{s.push({type:"tool-call",toolCallId:v.call_id,toolName:"local_shell",input:JSON.stringify({action:v.action}),providerMetadata:{openai:{itemId:v.id}}});break}case"message":{for(let I of v.content){e.providerOptions?.openai?.logprobs&&I.logprobs&&p.push(I.logprobs),s.push({type:"text",text:I.text,providerMetadata:{openai:{itemId:v.id}}});for(let h of I.annotations)h.type==="url_citation"?s.push({type:"source",sourceType:"url",id:this.config.generateId?.()??bs(),url:h.url,title:h.title}):h.type==="file_citation"&&s.push({type:"source",sourceType:"document",id:this.config.generateId?.()??bs(),mediaType:"text/plain",title:h.quote??h.filename??"Document",filename:h.filename??h.file_id})}break}case"function_call":{w=!0,s.push({type:"tool-call",toolCallId:v.call_id,toolName:v.name,input:v.arguments,providerMetadata:{openai:{itemId:v.id}}});break}case"web_search_call":{s.push({type:"tool-call",toolCallId:v.id,toolName:m??"web_search",input:JSON.stringify({action:v.action}),providerExecuted:!0}),s.push({type:"tool-result",toolCallId:v.id,toolName:m??"web_search",result:{status:v.status}});break}case"computer_call":{s.push({type:"tool-call",toolCallId:v.id,toolName:"computer_use",input:"",providerExecuted:!0}),s.push({type:"tool-result",toolCallId:v.id,toolName:"computer_use",result:{type:"computer_use_tool_result",status:v.status||"completed"}});break}case"file_search_call":{s.push({type:"tool-call",toolCallId:v.id,toolName:"file_search",input:"{}",providerExecuted:!0}),s.push({type:"tool-result",toolCallId:v.id,toolName:"file_search",result:{queries:v.queries,results:v.results?.map(I=>({attributes:I.attributes,fileId:I.file_id,filename:I.filename,score:I.score,text:I.text}))??null}});break}case"code_interpreter_call":{s.push({type:"tool-call",toolCallId:v.id,toolName:"code_interpreter",input:JSON.stringify({code:v.code,containerId:v.container_id}),providerExecuted:!0}),s.push({type:"tool-result",toolCallId:v.id,toolName:"code_interpreter",result:{outputs:v.outputs}});break}}let f={openai:{responseId:d.id}};return p.length>0&&(f.openai.logprobs=p),typeof d.service_tier=="string"&&(f.openai.serviceTier=d.service_tier),{content:s,finishReason:{unified:ji({finishReason:d.incomplete_details?.reason,hasFunctionCall:w}),raw:d.incomplete_details?.reason},usage:{inputTokens:{total:d.usage.input_tokens,noCache:d.usage.input_tokens_details?.cached_tokens!=null?d.usage.input_tokens-d.usage.input_tokens_details.cached_tokens:void 0,cacheRead:d.usage.input_tokens_details?.cached_tokens??void 0,cacheWrite:void 0},outputTokens:{total:d.usage.output_tokens,text:void 0,reasoning:d.usage.output_tokens_details?.reasoning_tokens??void 0},raw:d.usage},request:{body:o},response:{id:d.id,timestamp:new Date(d.created_at*1e3),modelId:d.model,headers:a,body:b},providerMetadata:f,warnings:i}}async doStream(e){let{args:o,warnings:i,webSearchToolName:m}=await this.getArgs(e),{responseHeaders:c,value:a}=await Gl({url:this.config.url({path:"/responses",modelId:this.modelId}),headers:Bl(this.config.headers(),e.headers),body:{...o,stream:!0},failedResponseHandler:Ri,successfulResponseHandler:wf(jf),abortSignal:e.abortSignal,fetch:this.config.fetch}),d=this,b={unified:"other",raw:void 0},s={inputTokens:void 0,outputTokens:void 0,totalTokens:void 0,reasoningTokens:void 0,cachedInputTokens:void 0},p=[],w=null,f={},v=!1,I={},h=null,S=null,C;return{stream:a.pipeThrough(new TransformStream({start(l){l.enqueue({type:"stream-start",warnings:i})},transform(l,P){if(e.includeRawChunks&&P.enqueue({type:"raw",rawValue:l.rawValue}),!l.success){b={unified:"error",raw:void 0},P.enqueue({type:"error",error:l.error});return}let y=l.value;if(tc(y))y.item.type==="function_call"?(f[y.output_index]={toolName:y.item.name,toolCallId:y.item.call_id},P.enqueue({type:"tool-input-start",id:y.item.call_id,toolName:y.item.name})):y.item.type==="web_search_call"?(f[y.output_index]={toolName:m??"web_search",toolCallId:y.item.id},P.enqueue({type:"tool-input-start",id:y.item.id,toolName:m??"web_search"})):y.item.type==="computer_call"?(f[y.output_index]={toolName:"computer_use",toolCallId:y.item.id},P.enqueue({type:"tool-input-start",id:y.item.id,toolName:"computer_use"})):y.item.type==="code_interpreter_call"?(f[y.output_index]={toolName:"code_interpreter",toolCallId:y.item.id,codeInterpreter:{containerId:y.item.container_id}},P.enqueue({type:"tool-input-start",id:y.item.id,toolName:"code_interpreter"}),P.enqueue({type:"tool-input-delta",id:y.item.id,delta:`{"containerId":"${y.item.container_id}","code":"`})):y.item.type==="file_search_call"?P.enqueue({type:"tool-call",toolCallId:y.item.id,toolName:"file_search",input:"{}",providerExecuted:!0}):y.item.type==="image_generation_call"?P.enqueue({type:"tool-call",toolCallId:y.item.id,toolName:"image_generation",input:"{}",providerExecuted:!0}):y.item.type==="message"?(S=y.item.id,P.enqueue({type:"text-start",id:y.item.id,providerMetadata:{openai:{itemId:y.item.id}}})):Bf(y)&&(I[y.output_index]={canonicalId:y.item.id,encryptedContent:y.item.encrypted_content,summaryParts:[0]},h=y.output_index,P.enqueue({type:"reasoning-start",id:`${y.item.id}:0`,providerMetadata:{openai:{itemId:y.item.id,reasoningEncryptedContent:y.item.encrypted_content??null}}}));else if(ec(y)){if(y.item.type==="function_call")f[y.output_index]=void 0,v=!0,P.enqueue({type:"tool-input-end",id:y.item.call_id}),P.enqueue({type:"tool-call",toolCallId:y.item.call_id,toolName:y.item.name,input:y.item.arguments,providerMetadata:{openai:{itemId:y.item.id}}});else if(y.item.type==="web_search_call")f[y.output_index]=void 0,P.enqueue({type:"tool-input-end",id:y.item.id}),P.enqueue({type:"tool-call",toolCallId:y.item.id,toolName:"web_search",input:JSON.stringify({action:y.item.action}),providerExecuted:!0}),P.enqueue({type:"tool-result",toolCallId:y.item.id,toolName:"web_search",result:{status:y.item.status}});else if(y.item.type==="computer_call")f[y.output_index]=void 0,P.enqueue({type:"tool-input-end",id:y.item.id}),P.enqueue({type:"tool-call",toolCallId:y.item.id,toolName:"computer_use",input:"",providerExecuted:!0}),P.enqueue({type:"tool-result",toolCallId:y.item.id,toolName:"computer_use",result:{type:"computer_use_tool_result",status:y.item.status||"completed"}});else if(y.item.type==="file_search_call")f[y.output_index]=void 0,P.enqueue({type:"tool-result",toolCallId:y.item.id,toolName:"file_search",result:{queries:y.item.queries,results:y.item.results?.map(D=>({attributes:D.attributes,fileId:D.file_id,filename:D.filename,score:D.score,text:D.text}))??null}});else if(y.item.type==="code_interpreter_call")f[y.output_index]=void 0,P.enqueue({type:"tool-result",toolCallId:y.item.id,toolName:"code_interpreter",result:{outputs:y.item.outputs}});else if(y.item.type==="image_generation_call")P.enqueue({type:"tool-result",toolCallId:y.item.id,toolName:"image_generation",result:{result:y.item.result}});else if(y.item.type==="local_shell_call")f[y.output_index]=void 0,P.enqueue({type:"tool-call",toolCallId:y.item.call_id,toolName:"local_shell",input:JSON.stringify({action:{type:"exec",command:y.item.action.command,timeoutMs:y.item.action.timeout_ms,user:y.item.action.user,workingDirectory:y.item.action.working_directory,env:y.item.action.env}}),providerMetadata:{openai:{itemId:y.item.id}}});else if(y.item.type==="message")S&&(P.enqueue({type:"text-end",id:S}),S=null);else if(Nf(y)){let D=I[y.output_index];if(D){for(let T of D.summaryParts)P.enqueue({type:"reasoning-end",id:`${D.canonicalId}:${T}`,providerMetadata:{openai:{itemId:D.canonicalId,reasoningEncryptedContent:y.item.encrypted_content??null}}});delete I[y.output_index],h===y.output_index&&(h=null)}}}else if(Ff(y)){let D=f[y.output_index];D!=null&&P.enqueue({type:"tool-input-delta",id:D.toolCallId,delta:y.delta})}else if(qf(y))P.enqueue({type:"tool-result",toolCallId:y.item_id,toolName:"image_generation",result:{result:y.partial_image_b64}});else if($f(y)){let D=f[y.output_index];D!=null&&P.enqueue({type:"tool-input-delta",id:D.toolCallId,delta:JSON.stringify(y.delta).slice(1,-1)})}else if(Wf(y)){let D=f[y.output_index];D!=null&&(P.enqueue({type:"tool-input-delta",id:D.toolCallId,delta:'"}'}),P.enqueue({type:"tool-input-end",id:D.toolCallId}),P.enqueue({type:"tool-call",toolCallId:D.toolCallId,toolName:"code_interpreter",input:JSON.stringify({code:y.code,containerId:D.codeInterpreter.containerId}),providerExecuted:!0}))}else if(zf(y))w=y.response.id,P.enqueue({type:"response-metadata",id:y.response.id,timestamp:new Date(y.response.created_at*1e3),modelId:y.response.model});else if(Lf(y))S||(S=y.item_id,P.enqueue({type:"text-start",id:S,providerMetadata:{openai:{itemId:y.item_id}}})),P.enqueue({type:"text-delta",id:S,delta:y.delta}),e.providerOptions?.openai?.logprobs&&y.logprobs&&p.push(y.logprobs);else if(Hf(y)){let D=h!==null?I[h]:null;D&&y.summary_index>0&&(D.summaryParts.push(y.summary_index),P.enqueue({type:"reasoning-start",id:`${D.canonicalId}:${y.summary_index}`,providerMetadata:{openai:{itemId:D.canonicalId,reasoningEncryptedContent:D.encryptedContent??null}}}))}else if(Vf(y)){let D=h!==null?I[h]:null;D&&P.enqueue({type:"reasoning-delta",id:`${D.canonicalId}:${y.summary_index}`,delta:y.delta,providerMetadata:{openai:{itemId:D.canonicalId}}})}else Uf(y)?(b={unified:ji({finishReason:y.response.incomplete_details?.reason,hasFunctionCall:v}),raw:y.response.incomplete_details?.reason??void 0},s.inputTokens=y.response.usage.input_tokens,s.outputTokens=y.response.usage.output_tokens,s.totalTokens=y.response.usage.input_tokens+y.response.usage.output_tokens,s.reasoningTokens=y.response.usage.output_tokens_details?.reasoning_tokens??void 0,s.cachedInputTokens=y.response.usage.input_tokens_details?.cached_tokens??void 0,typeof y.response.service_tier=="string"&&(C=y.response.service_tier)):Gf(y)?y.annotation.type==="url_citation"?P.enqueue({type:"source",sourceType:"url",id:d.config.generateId?.()??bs(),url:y.annotation.url,title:y.annotation.title}):y.annotation.type==="file_citation"&&P.enqueue({type:"source",sourceType:"document",id:d.config.generateId?.()??bs(),mediaType:"text/plain",title:y.annotation.quote??y.annotation.filename??"Document",filename:y.annotation.filename??y.annotation.file_id}):Yf(y)&&P.enqueue({type:"error",error:y})},flush(l){S&&(l.enqueue({type:"text-end",id:S}),S=null);let P={openai:{responseId:w}};p.length>0&&(P.openai.logprobs=p),C!==void 0&&(P.openai.serviceTier=C),l.enqueue({type:"finish",finishReason:b,usage:{inputTokens:{total:s.inputTokens,noCache:s.inputTokens!=null&&s.cachedInputTokens!=null?s.inputTokens-s.cachedInputTokens:void 0,cacheRead:s.cachedInputTokens,cacheWrite:void 0},outputTokens:{total:s.outputTokens,text:void 0,reasoning:s.reasoningTokens},raw:{input_tokens:s.inputTokens,output_tokens:s.outputTokens,total_tokens:s.totalTokens}},providerMetadata:P})}})),request:{body:o},response:{headers:c}}}},Ql=A.object({input_tokens:A.number(),input_tokens_details:A.object({cached_tokens:A.number().nullish()}).nullish(),output_tokens:A.number(),output_tokens_details:A.object({reasoning_tokens:A.number().nullish()}).nullish()}),If=A.object({type:A.literal("response.output_text.delta"),item_id:A.string(),delta:A.string(),logprobs:Zl.nullish()}),kf=A.object({type:A.literal("error"),code:A.string(),message:A.string(),param:A.string().nullish(),sequence_number:A.number()}),Ef=A.object({type:A.enum(["response.completed","response.incomplete"]),response:A.object({incomplete_details:A.object({reason:A.string()}).nullish(),usage:Ql,service_tier:A.string().nullish()})}),Df=A.object({type:A.literal("response.created"),response:A.object({id:A.string(),created_at:A.number(),model:A.string(),service_tier:A.string().nullish()})}),Sf=A.object({type:A.literal("response.output_item.added"),output_index:A.number(),item:A.discriminatedUnion("type",[A.object({type:A.literal("message"),id:A.string()}),A.object({type:A.literal("reasoning"),id:A.string(),encrypted_content:A.string().nullish()}),A.object({type:A.literal("function_call"),id:A.string(),call_id:A.string(),name:A.string(),arguments:A.string()}),A.object({type:A.literal("web_search_call"),id:A.string(),status:A.string(),action:A.object({type:A.literal("search"),query:A.string().optional()}).nullish()}),A.object({type:A.literal("computer_call"),id:A.string(),status:A.string()}),A.object({type:A.literal("file_search_call"),id:A.string()}),A.object({type:A.literal("image_generation_call"),id:A.string()}),A.object({type:A.literal("code_interpreter_call"),id:A.string(),container_id:A.string(),code:A.string().nullable(),outputs:A.array(A.discriminatedUnion("type",[A.object({type:A.literal("logs"),logs:A.string()}),A.object({type:A.literal("image"),url:A.string()})])).nullable(),status:A.string()})])}),Tf=A.object({type:A.literal("response.output_item.done"),output_index:A.number(),item:A.discriminatedUnion("type",[A.object({type:A.literal("message"),id:A.string()}),A.object({type:A.literal("reasoning"),id:A.string(),encrypted_content:A.string().nullish()}),A.object({type:A.literal("function_call"),id:A.string(),call_id:A.string(),name:A.string(),arguments:A.string(),status:A.literal("completed")}),Yl,Kl,Hl,Vl,Jl,A.object({type:A.literal("computer_call"),id:A.string(),status:A.literal("completed")})])}),Pf=A.object({type:A.literal("response.function_call_arguments.delta"),item_id:A.string(),output_index:A.number(),delta:A.string()}),Of=A.object({type:A.literal("response.image_generation_call.partial_image"),item_id:A.string(),output_index:A.number(),partial_image_b64:A.string()}),_f=A.object({type:A.literal("response.code_interpreter_call_code.delta"),item_id:A.string(),output_index:A.number(),delta:A.string()}),Rf=A.object({type:A.literal("response.code_interpreter_call_code.done"),item_id:A.string(),output_index:A.number(),code:A.string()}),Cf=A.object({type:A.literal("response.output_text.annotation.added"),annotation:A.discriminatedUnion("type",[A.object({type:A.literal("url_citation"),url:A.string(),title:A.string()}),A.object({type:A.literal("file_citation"),file_id:A.string(),filename:A.string().nullish(),index:A.number().nullish(),start_index:A.number().nullish(),end_index:A.number().nullish(),quote:A.string().nullish()})])}),Af=A.object({type:A.literal("response.reasoning_summary_part.added"),item_id:A.string(),summary_index:A.number()}),Mf=A.object({type:A.literal("response.reasoning_summary_text.delta"),item_id:A.string(),summary_index:A.number(),delta:A.string()}),jf=A.union([If,Ef,Df,Sf,Tf,Pf,Of,_f,Rf,Cf,Af,Mf,kf,A.object({type:A.string()}).loose()]);function Lf(t){return t.type==="response.output_text.delta"}n(Lf,"isTextDeltaChunk");function ec(t){return t.type==="response.output_item.done"}n(ec,"isResponseOutputItemDoneChunk");function Nf(t){return ec(t)&&t.item.type==="reasoning"}n(Nf,"isResponseOutputItemDoneReasoningChunk");function Uf(t){return t.type==="response.completed"||t.type==="response.incomplete"}n(Uf,"isResponseFinishedChunk");function zf(t){return t.type==="response.created"}n(zf,"isResponseCreatedChunk");function Ff(t){return t.type==="response.function_call_arguments.delta"}n(Ff,"isResponseFunctionCallArgumentsDeltaChunk");function qf(t){return t.type==="response.image_generation_call.partial_image"}n(qf,"isResponseImageGenerationCallPartialImageChunk");function $f(t){return t.type==="response.code_interpreter_call_code.delta"}n($f,"isResponseCodeInterpreterCallCodeDeltaChunk");function Wf(t){return t.type==="response.code_interpreter_call_code.done"}n(Wf,"isResponseCodeInterpreterCallCodeDoneChunk");function tc(t){return t.type==="response.output_item.added"}n(tc,"isResponseOutputItemAddedChunk");function Bf(t){return tc(t)&&t.item.type==="reasoning"}n(Bf,"isResponseOutputItemAddedReasoningChunk");function Gf(t){return t.type==="response.output_text.annotation.added"}n(Gf,"isResponseAnnotationAddedChunk");function Hf(t){return t.type==="response.reasoning_summary_part.added"}n(Hf,"isResponseReasoningSummaryPartAddedChunk");function Vf(t){return t.type==="response.reasoning_summary_text.delta"}n(Vf,"isResponseReasoningSummaryTextDeltaChunk");function Yf(t){return t.type==="error"}n(Yf,"isErrorChunk");function Jf(t){let e=t.startsWith("o3")||t.startsWith("o4-mini")||t.startsWith("gpt-5")&&!t.startsWith("gpt-5-chat"),o=t.startsWith("gpt-4")||t.startsWith("gpt-5-mini")||t.startsWith("gpt-5")&&!t.startsWith("gpt-5-nano")&&!t.startsWith("gpt-5-chat")||t.startsWith("o3")||t.startsWith("o4-mini"),i={requiredAutoTruncation:!1,systemMessageMode:"system",supportsFlexProcessing:e,supportsPriorityProcessing:o};return t.startsWith("gpt-5-chat")?{...i,isReasoningModel:!1}:t.startsWith("o")||t.startsWith("gpt-5")||t.startsWith("codex-")||t.startsWith("computer-use")?t.startsWith("o1-mini")||t.startsWith("o1-preview")?{...i,isReasoningModel:!0,systemMessageMode:"remove"}:{...i,isReasoningModel:!0,systemMessageMode:"developer"}:{...i,isReasoningModel:!1}}n(Jf,"getResponsesModelConfig");var Kf=A.object({include:A.array(A.enum(["reasoning.encrypted_content","file_search_call.results","message.output_text.logprobs"])).nullish(),instructions:A.string().nullish(),logprobs:A.union([A.boolean(),A.number().min(1).max(Xl)]).optional(),maxToolCalls:A.number().nullish(),metadata:A.any().nullish(),parallelToolCalls:A.boolean().nullish(),previousResponseId:A.string().nullish(),promptCacheKey:A.string().nullish(),reasoningEffort:A.string().nullish(),reasoningSummary:A.string().nullish(),safetyIdentifier:A.string().nullish(),serviceTier:A.enum(["auto","flex","priority"]).nullish(),store:A.boolean().nullish(),strictJsonSchema:A.boolean().nullish(),textVerbosity:A.enum(["low","medium","high"]).nullish(),user:A.string().nullish()});var Qf="0.1.0";function vs(t={}){let e=Xf(t.baseURL??"https://api.openai.com/v1");if(!e)throw new Error("baseURL is required");let o={...t.apiKey&&{Authorization:`Bearer ${t.apiKey}`},...t.headers},i=n(()=>Zf(o,`ai-sdk/openai-compatible/${Qf}`),"getHeaders"),m=n(b=>new ys(b,{provider:`${t.name??"openai-compatible"}.chat`,headers:i,url:n(({path:s})=>`${e}${s}`,"url"),fetch:t.fetch}),"createChatModel"),c=n(b=>new ws(b,{provider:`${t.name??"openai-compatible"}.responses`,headers:i,url:n(({path:s})=>`${e}${s}`,"url"),fetch:t.fetch}),"createResponsesModel"),a=n(b=>m(b),"createLanguageModel"),d=n(function(b){return m(b)},"provider");return d.languageModel=a,d.chat=m,d.responses=c,d}n(vs,"createOpenaiCompatible");var em=vs();import{createXai as mm}from"@ai-sdk/xai";import{createMistral as hm}from"@ai-sdk/mistral";import{createGroq as gm}from"@ai-sdk/groq";import{createDeepInfra as ym}from"@ai-sdk/deepinfra";import{createCerebras as bm}from"@ai-sdk/cerebras";import{createCohere as wm}from"@ai-sdk/cohere";import{createGateway as vm}from"@ai-sdk/gateway";import{createTogetherAI as xm}from"@ai-sdk/togetherai";import{createPerplexity as Im}from"@ai-sdk/perplexity";import{createVercel as km}from"@ai-sdk/vercel";import{createVenice as Em}from"venice-ai-sdk-provider";import{createGitLab as Dm,VERSION as Sm,isWorkflowModel as Tm,discoverWorkflowModels as Pm}from"gitlab-ai-provider";import{fromNodeProviderChain as Om}from"@aws-sdk/credential-providers";import{GoogleAuth as _m}from"google-auth-library";import{mergeDeep as nc,unique as tm}from"remeda";function oc(t){if(t.startsWith("image/"))return"image";if(t.startsWith("audio/"))return"audio";if(t.startsWith("video/"))return"video";if(t==="application/pdf")return"pdf"}n(oc,"mimeToModality");var jt;(M=>{M.OUTPUT_TOKEN_MAX=ze.OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX||32e3;function e(r){switch(r){case"@ai-sdk/github-copilot":return"copilot";case"@ai-sdk/azure":return"azure";case"@ai-sdk/openai":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/gateway":return"gateway";case"@openrouter/ai-sdk-provider":return"openrouter"}}n(e,"sdkKey");function o(r){let u=r.providerOptions;return u?Object.values(u).some(g=>!!g&&(typeof g.signature=="string"||typeof g.redactedData=="string")):!1}n(o,"hasThinkingSignature");function i(r){return r.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g,"\uFFFD")}M.sanitizeSurrogates=i,n(i,"sanitizeSurrogates");function m(r){let u=r.output;return u.type==="text"||u.type==="error-text"?{...r,output:{...u,value:i(u.value)}}:u.type==="content"?{...r,output:{...u,value:u.value.map(g=>g.type==="text"?{...g,text:i(g.text)}:g)}}:r}n(m,"sanitizeToolResult");function c(r){return r.map(u=>{switch(u.role){case"system":return typeof u.content=="string"?{...u,content:i(u.content)}:u;case"user":return typeof u.content=="string"?{...u,content:i(u.content)}:{...u,content:u.content.map(g=>g.type==="text"?{...g,text:i(g.text)}:g)};case"assistant":return typeof u.content=="string"?{...u,content:i(u.content)}:{...u,content:u.content.map(g=>g.type==="text"||g.type==="reasoning"?{...g,text:i(g.text)}:g.type==="tool-result"?m(g):g)};case"tool":return{...u,content:u.content.map(g=>g.type==="tool-result"?m(g):g)}}return u})}n(c,"sanitizeMessages");function a(r,u,g){if(r=c(r),(u.api.npm==="@ai-sdk/anthropic"||u.api.npm==="@ai-sdk/amazon-bedrock")&&(r=r.map(L=>{if(typeof L.content=="string")return L.content===""?void 0:L;if(!Array.isArray(L.content))return L;let j=L.content.filter(z=>z.type==="text"?z.text!=="":z.type==="reasoning"?z.text!==""||o(z):!0);if(j.length!==0)return{...L,content:j}}).filter(L=>L!==void 0&&L.content!=="")),u.api.id.includes("claude")){let L=n(j=>j.replace(/[^a-zA-Z0-9_-]/g,"_"),"scrub");return r.map(j=>j.role==="assistant"&&Array.isArray(j.content)?{...j,content:j.content.map(z=>z.type==="tool-call"||z.type==="tool-result"?{...z,toolCallId:L(z.toolCallId)}:z)}:j.role==="tool"&&Array.isArray(j.content)?{...j,content:j.content.map(z=>z.type==="tool-result"?{...z,toolCallId:L(z.toolCallId)}:z)}:j)}if(u.providerID==="mistral"||u.api.id.toLowerCase().includes("mistral")||u.api.id.toLocaleLowerCase().includes("devstral")){let L=n(z=>z.replace(/[^a-zA-Z0-9]/g,"").substring(0,9).padEnd(9,"0"),"scrub"),j=[];for(let z=0;z<r.length;z++){let V=r[z],H=r[z+1];V.role==="assistant"&&Array.isArray(V.content)&&(V.content=V.content.map(G=>G.type==="tool-call"||G.type==="tool-result"?{...G,toolCallId:L(G.toolCallId)}:G)),V.role==="tool"&&Array.isArray(V.content)&&(V.content=V.content.map(G=>G.type==="tool-result"?{...G,toolCallId:L(G.toolCallId)}:G)),j.push(V),V.role==="tool"&&H?.role==="user"&&j.push({role:"assistant",content:[{type:"text",text:"Done."}]})}return j}if(typeof u.capabilities.interleaved=="object"&&u.capabilities.interleaved.field){let L=u.capabilities.interleaved.field;return r.map(j=>{if(j.role==="assistant"&&Array.isArray(j.content)){let V=j.content.filter(G=>G.type==="reasoning").map(G=>G.text).join(""),H=j.content.filter(G=>G.type!=="reasoning");return V?{...j,content:H,providerOptions:{...j.providerOptions,openaiCompatible:{...j.providerOptions?.openaiCompatible,[L]:V}}}:{...j,content:H}}return j})}return r}n(a,"normalizeMessages");function d(r,u){let g=r.filter(z=>z.role==="system").slice(0,2),L=r.filter(z=>z.role!=="system").slice(-2),j={anthropic:{cacheControl:{type:"ephemeral",ttl:"1h"}},openrouter:{cacheControl:{type:"ephemeral"}},bedrock:{cachePoint:{type:"default"}},openaiCompatible:{cache_control:{type:"ephemeral"}},copilot:{copilot_cache_control:{type:"ephemeral"}}};for(let z of tm([...g,...L])){if(!(u.providerID==="anthropic"||u.providerID.includes("bedrock")||u.api.npm==="@ai-sdk/amazon-bedrock")&&Array.isArray(z.content)&&z.content.length>0){let G=z.content[z.content.length-1];if(G&&typeof G=="object"&&G.type!=="tool-approval-request"&&G.type!=="tool-approval-response"){G.providerOptions=nc(G.providerOptions??{},j);continue}}z.providerOptions=nc(z.providerOptions??{},j)}return r}n(d,"applyCaching");function b(r,u){return r.map(g=>{if(g.role==="tool"&&Array.isArray(g.content))return s(g,u);if(g.role!=="user"||!Array.isArray(g.content))return g;let L=g.content.map(j=>{if(j.type!=="file"&&j.type!=="image")return j;if(j.type==="image"){let ee=j.image.toString();if(ee.startsWith("data:")){let se=ee.match(/^data:([^;]+);base64,(.*)$/);if(se&&(!se[2]||se[2].length===0))return{type:"text",text:"ERROR: Image file is empty or corrupted. Please provide a valid image."}}}let z=j.type==="image"?j.image.toString().split(";")[0].replace("data:",""):j.mediaType,V=j.type==="file"?j.filename:void 0,H=oc(z);return!H||u.capabilities.input[H]?j:{type:"text",text:`ERROR: Cannot read ${V?`"${V}"`:H} (this model does not support ${H} input). Inform the user.`}});return{...g,content:L}})}n(b,"unsupportedParts");function s(r,u){let g=!1,L=r.content.map(j=>{if(j?.type!=="tool-result"||j.output?.type!=="content"||!Array.isArray(j.output.value))return j;let z=j.output.value.map(V=>{if(!V||V.type!=="media"&&V.type!=="file-data"&&V.type!=="image-data")return V;let H=typeof V.mediaType=="string"?oc(V.mediaType):void 0;if(!H||u.capabilities.input[H])return V;g=!0;let G=H==="pdf"?" Use read_files on the same path for the PDF's text.":"";return{type:"text",text:`NOTE: ${j.toolName??"the tool"} returned a ${H==="pdf"?"PDF":H} that this model cannot take as input, so it was left out.${G}`}});return{...j,output:{...j.output,value:z}}});return g?{...r,content:L}:r}n(s,"unsupportedToolMedia");function p(r,u,g){r=b(r,u),r=a(r,u,g),(u.providerID==="anthropic"||u.providerID==="google-vertex-anthropic"||u.api.id.includes("anthropic")||u.api.id.includes("claude")||u.id.includes("anthropic")||u.id.includes("claude")||u.api.npm==="@ai-sdk/anthropic")&&u.api.npm!=="@ai-sdk/gateway"&&(r=d(r,u));let L=e(u.api.npm);if(L&&L!==u.providerID){let j=n(z=>{if(!z||!(u.providerID in z))return z;let V={...z};return V[L]=V[u.providerID],delete V[u.providerID],V},"remap");r=r.map(z=>Array.isArray(z.content)?{...z,providerOptions:j(z.providerOptions),content:z.content.map(V=>V.type==="tool-approval-request"||V.type==="tool-approval-response"?{...V}:{...V,providerOptions:j(V.providerOptions)})}:{...z,providerOptions:j(z.providerOptions)})}return r}M.message=p,n(p,"message");function w(r){let u=r.id.toLowerCase();if(u.includes("qwen"))return .55;if(!u.includes("claude")){if(u.includes("gemini")||u.includes("glm-4.6")||u.includes("glm-4.7")||u.includes("minimax-m2"))return 1;if(u.includes("kimi-k2"))return["thinking","k2.","k2p","k2-5"].some(g=>u.includes(g))?1:.6}}M.temperature=w,n(w,"temperature");function f(r){let u=r.id.toLowerCase();if(u.includes("qwen"))return 1;if(["minimax-m2","gemini","kimi-k2.5","kimi-k2p5","kimi-k2-5"].some(g=>u.includes(g)))return .95}M.topP=f,n(f,"topP");function v(r){let u=r.id.toLowerCase();if(u.includes("minimax-m2"))return["m2.","m25","m21"].some(g=>u.includes(g))?40:20;if(u.includes("gemini"))return 64}M.topK=v,n(v,"topK");let I=["low","medium","high"],h=["none","minimal",...I,"xhigh"];function S(r){let u=/claude-(opus|sonnet|haiku|fable)-(\d{1,2})(?:[-.](\d{1,2}))?(?!\d)/.exec(r.toLowerCase());if(u)return{family:u[1],major:Number(u[2]),minor:u[3]===void 0?0:Number(u[3])}}M.claudeVersion=S,n(S,"claudeVersion");let C=["none","minimal","low","medium","high","xhigh","max"];function l(r,u){if(!r||u.length===0)return;if(u.includes(r))return r;let g=C.indexOf(r);if(g<0)return;let L,j=1/0;for(let z of u){let V=C.indexOf(z);if(V<0)continue;let H=Math.abs(V-g);(H<j||H===j&&L!==void 0&&V<C.indexOf(L))&&(L=z,j=H)}return L}M.nearestVariant=l,n(l,"nearestVariant");function P(r){if(!r.capabilities.reasoning)return{};let u=r.id.toLowerCase(),g=S(r.api.id),L=!!g&&(g.major>4||g.major===4&&g.minor>=6),z=r.api.npm==="@ai-sdk/anthropic"&&!!g&&g.major>=5&&(g.family==="opus"||g.family==="sonnet")?["low","medium","high","xhigh","max"]:["low","medium","high","max"];if(u.includes("deepseek")||u.includes("minimax")||u.includes("glm")||u.includes("mistral")||u.includes("kimi")||u.includes("k2p5")||u.includes("qwen"))return{};if(u.includes("grok")&&u.includes("grok-3-mini"))return r.api.npm==="@openrouter/ai-sdk-provider"?{low:{reasoning:{effort:"low"}},high:{reasoning:{effort:"high"}}}:{low:{reasoningEffort:"low"},high:{reasoningEffort:"high"}};if(u.includes("grok"))return{};switch(r.api.npm){case"@openrouter/ai-sdk-provider":return!r.id.includes("gpt")&&!r.id.includes("gemini-3")&&!r.id.includes("claude")?{}:Object.fromEntries(h.map(F=>[F,{reasoning:{effort:F}}]));case"@ai-sdk/gateway":return r.id.includes("anthropic")?L?Object.fromEntries(z.map(F=>[F,{thinking:{type:"adaptive"},effort:F}])):{high:{thinking:{type:"enabled",budgetTokens:16e3}},max:{thinking:{type:"enabled",budgetTokens:31999}}}:r.id.includes("google")?u.includes("2.5")?{high:{thinkingConfig:{includeThoughts:!0,thinkingBudget:16e3}},max:{thinkingConfig:{includeThoughts:!0,thinkingBudget:24576}}}:Object.fromEntries(["low","high"].map(F=>[F,{includeThoughts:!0,thinkingLevel:F}])):Object.fromEntries(h.map(F=>[F,{reasoningEffort:F}]));case"@ai-sdk/github-copilot":if(r.id.includes("gemini"))return{};if(r.id.includes("claude"))return Object.fromEntries(I.map(F=>[F,{reasoningEffort:F}]));let V=Ct(()=>{if(u.includes("5.1-codex-max")||u.includes("5.2")||u.includes("5.3"))return[...I,"xhigh"];let F=[...I];return u.includes("gpt-5")&&r.release_date>="2025-12-04"&&F.push("xhigh"),F});return Object.fromEntries(V.map(F=>[F,{reasoningEffort:F,reasoningSummary:"auto",include:["reasoning.encrypted_content"]}]));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":return Object.fromEntries(I.map(F=>[F,{reasoningEffort:F}]));case"@ai-sdk/azure":if(u==="o1-mini")return{};let H=["low","medium","high"];return(u.includes("gpt-5-")||u==="gpt-5")&&H.unshift("minimal"),Object.fromEntries(H.map(F=>[F,{reasoningEffort:F,reasoningSummary:"auto",include:["reasoning.encrypted_content"]}]));case"@ai-sdk/openai":if(u==="gpt-5-pro")return{};let G=Ct(()=>{if(u.includes("codex"))return u.includes("5.2")||u.includes("5.3")?[...I,"xhigh"]:I;let F=[...I];return(u.includes("gpt-5-")||u==="gpt-5")&&F.unshift("minimal"),r.release_date>="2025-11-13"&&F.unshift("none"),r.release_date>="2025-12-04"&&F.push("xhigh"),F});return Object.fromEntries(G.map(F=>[F,{reasoningEffort:F,reasoningSummary:"auto",include:["reasoning.encrypted_content"]}]));case"@ai-sdk/anthropic":case"@ai-sdk/google-vertex/anthropic":return L?Object.fromEntries(z.map(F=>[F,{thinking:{type:"adaptive"},effort:F}])):{high:{thinking:{type:"enabled",budgetTokens:Math.min(16e3,Math.floor(r.limit.output/2-1))}},max:{thinking:{type:"enabled",budgetTokens:Math.min(31999,r.limit.output-1)}}};case"@ai-sdk/amazon-bedrock":return L?Object.fromEntries(z.map(F=>[F,{reasoningConfig:{type:"adaptive",maxReasoningEffort:F}}])):r.api.id.includes("anthropic")?{high:{reasoningConfig:{type:"enabled",budgetTokens:16e3}},max:{reasoningConfig:{type:"enabled",budgetTokens:31999}}}:Object.fromEntries(I.map(F=>[F,{reasoningConfig:{type:"enabled",maxReasoningEffort:F}}]));case"@ai-sdk/google-vertex":case"@ai-sdk/google":if(u.includes("2.5"))return{high:{thinkingConfig:{includeThoughts:!0,thinkingBudget:16e3}},max:{thinkingConfig:{includeThoughts:!0,thinkingBudget:24576}}};let ee=["low","high"];return u.includes("3.1")&&(ee=["low","medium","high"]),Object.fromEntries(ee.map(F=>[F,{thinkingConfig:{includeThoughts:!0,thinkingLevel:F}}]));case"@ai-sdk/mistral":return{};case"@ai-sdk/cohere":return{};case"@ai-sdk/groq":let se=["none",...I];return Object.fromEntries(se.map(F=>[F,{reasoningEffort:F}]));case"@ai-sdk/perplexity":return{};case"@jerome-benoit/sap-ai-provider-v2":return r.api.id.includes("anthropic")?L?Object.fromEntries(z.map(F=>[F,{thinking:{type:"adaptive"},effort:F}])):{high:{thinking:{type:"enabled",budgetTokens:16e3}},max:{thinking:{type:"enabled",budgetTokens:31999}}}:r.api.id.includes("gemini")&&u.includes("2.5")?{high:{thinkingConfig:{includeThoughts:!0,thinkingBudget:16e3}},max:{thinkingConfig:{includeThoughts:!0,thinkingBudget:24576}}}:r.api.id.includes("gpt")||/\bo[1-9]/.test(r.api.id)?Object.fromEntries(I.map(F=>[F,{reasoningEffort:F}])):{}}return{}}M.variants=P,n(P,"variants");function y(r){let u={};(r.model.providerID==="openai"||r.model.api.npm==="@ai-sdk/openai"||r.model.api.npm==="@ai-sdk/github-copilot")&&(u.store=!1),r.model.api.npm==="@openrouter/ai-sdk-provider"&&(u.usage={include:!0},r.model.api.id.includes("gemini-3")&&(u.reasoning={effort:"high"})),(r.model.providerID==="baseten"||r.model.providerID==="opencode"&&["kimi-k2-thinking","glm-4.6"].includes(r.model.api.id))&&(u.chat_template_args={enable_thinking:!0}),["zai","zhipuai"].includes(r.model.providerID)&&r.model.api.npm==="@ai-sdk/openai-compatible"&&(u.thinking={type:"enabled",clear_thinking:!1}),(r.model.providerID==="openai"||r.providerOptions?.setCacheKey)&&(u.promptCacheKey=r.sessionID),(r.model.api.npm==="@ai-sdk/google"||r.model.api.npm==="@ai-sdk/google-vertex")&&r.model.capabilities.reasoning&&(u.thinkingConfig={includeThoughts:!0},r.model.api.id.includes("gemini-3")&&(u.thinkingConfig.thinkingLevel="high"));let g=r.model.api.id.toLowerCase();return(r.model.api.npm==="@ai-sdk/anthropic"||r.model.api.npm==="@ai-sdk/google-vertex/anthropic")&&(g.includes("k2p5")||g.includes("kimi-k2.5")||g.includes("kimi-k2p5"))&&(u.thinking={type:"enabled",budgetTokens:Math.min(16e3,Math.floor(r.model.limit.output/2-1))}),r.model.providerID==="alibaba-cn"&&r.model.capabilities.reasoning&&r.model.api.npm==="@ai-sdk/openai-compatible"&&!g.includes("kimi-k2-thinking")&&(u.enable_thinking=!0),r.model.api.id.includes("gpt-5")&&!r.model.api.id.includes("gpt-5-chat")&&(r.model.api.id.includes("gpt-5-pro")||(u.reasoningEffort="medium",u.reasoningSummary="auto"),r.model.api.id.includes("gpt-5.")&&!r.model.api.id.includes("codex")&&!r.model.api.id.includes("-chat")&&r.model.providerID!=="azure"&&(u.textVerbosity="low"),r.model.providerID.startsWith("opencode")&&(u.promptCacheKey=r.sessionID,u.include=["reasoning.encrypted_content"],u.reasoningSummary="auto")),r.model.providerID==="venice"&&(u.promptCacheKey=r.sessionID),r.model.providerID==="openrouter"&&(u.prompt_cache_key=r.sessionID),r.model.api.npm==="@ai-sdk/gateway"&&(u.gateway={caching:"auto"}),u}M.options=y,n(y,"options");function D(r){return r.providerID==="openai"||r.api.npm==="@ai-sdk/openai"||r.api.npm==="@ai-sdk/github-copilot"?r.api.id.includes("gpt-5")?r.api.id.includes("5.")?{store:!1,reasoningEffort:"low"}:{store:!1,reasoningEffort:"minimal"}:{store:!1}:r.providerID==="google"?r.api.id.includes("gemini-3")?{thinkingConfig:{thinkingLevel:"minimal"}}:{thinkingConfig:{thinkingBudget:0}}:r.providerID==="openrouter"?r.api.id.includes("google")?{reasoning:{enabled:!1}}:{reasoningEffort:"minimal"}:r.providerID==="venice"?{veniceParameters:{disableThinking:!0}}:{}}M.smallOptions=D,n(D,"smallOptions");let T={amazon:"bedrock"};function R(r){let u=/claude-(?:([a-z]+)-)?(\d+)(?:[.-](\d{1,2}))?(?:-([a-z]+))?(?:[.@-]|$)/i.exec(r);if(!u)return!1;let g=Number(u[2]),L=Number(u[3]??0);return g===5&&L===1&&(u[1]??u[4])?.toLowerCase()==="mythos"?!1:g>5||g===5&&L>=1}n(R,"anthropicBindsThinking");function _(r,u){if(!R(r.api.id))return u;let g={prefixMismatchBehavior:"drop_block"},L=u.thinking;return L?(L.type===void 0&&(L={type:"adaptive",...L}),L.type!=="adaptive"&&L.type!=="enabled"?u:{...u,thinking:{...L,blockBinding:g}}):{...u,thinking:{blockBinding:g}}}n(_,"anthropicBlockBinding");function E(r,u){if(r.api.npm==="@ai-sdk/openai"&&(r.capabilities.reasoning||u.reasoningEffort!==void 0||u.reasoningSummary!==void 0)&&(u={...u,forceReasoning:!0}),r.api.npm==="@ai-sdk/gateway"){let L=r.api.id.indexOf("/"),j=L>0?r.api.id.slice(0,L):void 0,z=j?T[j]??j:void 0,V=u.gateway,H=Object.fromEntries(Object.entries(u).filter(([se])=>se!=="gateway")),G=Object.keys(H).length>0,ee={};return V!==void 0&&(ee.gateway=V),G&&(z?ee[z]=H:V&&typeof V=="object"&&!Array.isArray(V)?ee.gateway={...V,...H}:ee.gateway=H),ee}let g=e(r.api.npm)??r.providerID;return(r.api.npm==="@ai-sdk/anthropic"||r.api.npm==="@ai-sdk/google-vertex/anthropic")&&(u=_(r,u)),r.api.npm==="@ai-sdk/azure"?{openai:u,azure:u}:{[g]:u}}M.providerOptions=E,n(E,"providerOptions");function x(r){return Math.min(r.limit.output,M.OUTPUT_TOKEN_MAX)||M.OUTPUT_TOKEN_MAX}M.maxOutputTokens=x,n(x,"maxOutputTokens");function k(r,u){if(r.providerID==="openai"||r.providerID==="azure"){let g=n(j=>typeof j!="object"||j===null?j:Array.isArray(j.anyOf)?j.anyOf.some(z=>z?.type==="null")?j:{...j,anyOf:[...j.anyOf,{type:"null"}]}:Array.isArray(j.oneOf)?j.oneOf.some(z=>z?.type==="null")?j:{...j,oneOf:[...j.oneOf,{type:"null"}]}:Array.isArray(j.type)&&j.type.includes("null")?j:{anyOf:[j,{type:"null"}]},"makeNullable"),L=n(j=>{if(j===null||typeof j!="object")return j;if(Array.isArray(j))return j.map(L);let z={};for(let[V,H]of Object.entries(j))z[V]=typeof H=="object"&&H!==null?L(H):H;if(z.type==="object"&&z.properties){let V=new Set(z.required||[]);for(let H of Object.keys(z.properties))V.has(H)||(z.properties[H]=g(z.properties[H]),V.add(H));z.required=Array.from(V),z.additionalProperties===void 0&&(z.additionalProperties=!1)}return z},"sanitizeOpenAI");u=L(u)}if(r.providerID==="google"||r.api.id.includes("gemini")){let g=n(V=>typeof V=="object"&&V!==null&&!Array.isArray(V),"isPlainObject"),L=n(V=>g(V)&&(Array.isArray(V.anyOf)||Array.isArray(V.oneOf)||Array.isArray(V.allOf)),"hasCombiner"),j=n(V=>g(V)?L(V)?!0:["type","properties","items","prefixItems","enum","const","$ref","additionalProperties","patternProperties","required","not","if","then","else"].some(H=>H in V):!1,"hasSchemaIntent"),z=n(V=>{if(V===null||typeof V!="object")return V;if(Array.isArray(V))return V.map(z);let H={};for(let[G,ee]of Object.entries(V))G==="enum"&&Array.isArray(ee)?(H[G]=ee.map(se=>String(se)),(H.type==="integer"||H.type==="number")&&(H.type="string")):typeof ee=="object"&&ee!==null?H[G]=z(ee):H[G]=ee;return H.type==="object"&&H.properties&&Array.isArray(H.required)&&(H.required=H.required.filter(G=>G in H.properties)),H.type==="array"&&!L(H)&&(H.items==null&&(H.items={}),g(H.items)&&!j(H.items)&&(H.items.type="string")),H.type&&H.type!=="object"&&!L(H)&&(delete H.properties,delete H.required),H},"sanitizeGemini");u=z(u)}return u}M.schema=k,n(k,"schema")})(jt||={});var Li;(a=>{a.INCOMPLETE_CODE=Nn.RESPONSE_INCOMPLETE_CODE,a.FAILED_CODE=Nn.RESPONSE_FAILED_CODE;function o(d,b,s,p){return{type:"error",sequence_number:typeof d=="number"?d:0,error:{type:p??b,code:b,message:s,param:null}}}n(o,"errorEvent");function i(d){switch(d.type){case"response.failed":{let b=d.response?.error,s=typeof b?.code=="string"&&b.code?b.code:a.FAILED_CODE,p=typeof b?.message=="string"&&b.message?b.message:"The provider reported the response failed.";return o(d.sequence_number,s,p,a.FAILED_CODE)}case"response.incomplete":{let b=d.response?.incomplete_details?.reason;return b==="content_filter"?void 0:o(d.sequence_number,a.INCOMPLETE_CODE,`The response ended incomplete (${typeof b=="string"&&b?b:"no reason given"}).`)}case"error":{if(d.error&&typeof d.error=="object")return;let b=typeof d.code=="string"&&d.code?d.code:a.FAILED_CODE,s=typeof d.message=="string"&&d.message?d.message:"Stream error.";return o(d.sequence_number,b,s)}}}a.rewrite=i,n(i,"rewrite");let m=new Set(["response.completed","response.incomplete","response.failed","error"]);function c(d){if(!d.ok||!d.body)return d;let b=d.body.getReader(),s=new TextDecoder,p=new TextEncoder,w="",f=!1,v=!1,I=n(C=>{let l=C.split(/\r?\n/).filter(D=>D.startsWith("data:")).map(D=>D.slice(5).replace(/^ /,"")).join(`
127
127
  `),P;try{P=l?JSON.parse(l):void 0}catch{P=void 0}if(!P||typeof P.type!="string")return C+`
128
128
 
129
129
  `;P.type.startsWith("response.")&&(f=!0),m.has(P.type)&&(v=!0);let y=i(P);return y?`event: error
@@ -131,7 +131,7 @@ data: ${JSON.stringify(y)}
131
131
 
132
132
  `:C+`
133
133
 
134
- `},"block"),h=n(C=>{let l="";for(;;){let P=/\r?\n\r?\n/.exec(w);if(!P)break;l+=I(w.slice(0,P.index)),w=w.slice(P.index+P[0].length)}return C&&w.trim()&&(l+=I(w),w=""),l},"drain"),S=new ReadableStream({async pull(C){for(;;){let l=await b.read();if(l.done){w+=s.decode();let y=h(!0);if(y&&C.enqueue(p.encode(y)),f&&!v){C.error(new Nn.ResponseStreamError("Response stream ended before response.completed"));return}C.close();return}w+=s.decode(l.value,{stream:!0});let P=h(!1);if(P){C.enqueue(p.encode(P));return}}},async cancel(C){await b.cancel(C)}});return new Response(S,{headers:new Headers(d.headers),status:d.status,statusText:d.statusText})}a.wrap=c,n(c,"wrap")})(Li||={});var Gt;(k=>{let t=Ae.create({service:"provider"});function e(M){let r=/^gpt-(\d+)/.exec(M);return r?Number(r[1])>=5&&!M.startsWith("gpt-5-mini"):!1}n(e,"shouldUseCopilotResponsesApi");function o(M,r,u,g=!1){if(typeof r!="number"||r<=0||!M.body||!M.headers.get("content-type")?.includes("text/event-stream")&&!(g&&M.ok))return M;let L=M.body.getReader(),j=new ReadableStream({async pull(z){let V=await new Promise((H,G)=>{let ee=setTimeout(()=>{let se=new Nn.ResponseStreamError("SSE read timed out");u.abort(se),L.cancel(se).catch(()=>{}),G(se)},r);L.read().then(se=>{clearTimeout(ee),H(se)},se=>{clearTimeout(ee),G(se)})});if(V.done){z.close();return}z.enqueue(V.value)},async cancel(z){u.abort(z),await L.cancel(z)}});return new Response(j,{headers:new Headers(M.headers),status:M.status,statusText:M.statusText})}n(o,"wrapSSE");function i(){let M=mt.get("OPENCODE_E2E_LLM_URL");if(!(typeof M!="string"||M===""))return M}n(i,"e2eURL");let m={"@ai-sdk/amazon-bedrock":sm,"@ai-sdk/anthropic":im,"@ai-sdk/azure":am,"@ai-sdk/google":lm,"@ai-sdk/google-vertex":cm,"@ai-sdk/google-vertex/anthropic":dm,"@ai-sdk/openai":um,"@ai-sdk/openai-compatible":ac,"@openrouter/ai-sdk-provider":pm,"@ai-sdk/xai":fm,"@ai-sdk/mistral":mm,"@ai-sdk/groq":hm,"@ai-sdk/deepinfra":gm,"@ai-sdk/cerebras":ym,"@ai-sdk/cohere":bm,"@ai-sdk/gateway":wm,"@ai-sdk/togetherai":vm,"@ai-sdk/perplexity":xm,"@ai-sdk/vercel":Im,"gitlab-ai-provider":Em,"@ai-sdk/github-copilot":vs,"venice-ai-sdk-provider":km};function c(M){return M.responses===void 0&&M.chat===void 0}n(c,"useLanguageModel");function a(M){return{anthropic:n(()=>Je.succeed({autoload:!1,options:{headers:{"anthropic-beta":"interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14"}}}),"anthropic"),opencode:Je.fnUntraced(function*(r){let u=mt.all(),L=Ct(()=>!!r.env.some(j=>u[j]))||!!(yield*M.auth(r.id))||!!(yield*M.config()).provider?.opencode?.options?.apiKey;if(!L)for(let[j,z]of Object.entries(r.models))z.cost.input!==0&&delete r.models[j];return{autoload:Object.keys(r.models).length>0,options:L?{}:{apiKey:"public"}}}),openai:n(()=>Je.succeed({autoload:!1,async getModel(r,u,g){return r.responses(u)},options:{}}),"openai"),xai:n(()=>Je.succeed({autoload:!1,async getModel(r,u,g){return r.responses(u)},options:{}}),"xai"),"github-copilot":n(()=>Je.succeed({autoload:!1,async getModel(r,u,g){return c(r)?r.languageModel(u):e(u)?r.responses(u):r.chat(u)},options:{}}),"github-copilot"),azure:n(r=>{let u=Ct(()=>{let g=r.options?.resourceName;return typeof g=="string"&&g.trim()!==""?g:mt.get("AZURE_RESOURCE_NAME")});return Je.succeed({autoload:!1,async getModel(g,L,j){return c(g)?g.languageModel(L):j?.useCompletionUrls?g.chat(L):g.responses(L)},options:{},vars(g){return{...u&&{AZURE_RESOURCE_NAME:u}}}})},"azure"),"azure-cognitive-services":n(()=>{let r=mt.get("AZURE_COGNITIVE_SERVICES_RESOURCE_NAME");return Je.succeed({autoload:!1,async getModel(u,g,L){return c(u)?u.languageModel(g):L?.useCompletionUrls?u.chat(g):u.responses(g)},options:{baseURL:r?`https://${r}.cognitiveservices.azure.com/openai`:void 0}})},"azure-cognitive-services"),"amazon-bedrock":Je.fnUntraced(function*(){let r=(yield*M.config()).provider?.["amazon-bedrock"],u=yield*M.auth("amazon-bedrock"),g=r?.options?.region,L=mt.get("AWS_REGION"),j=g??L??"us-east-1",z=r?.options?.profile,V=mt.get("AWS_PROFILE"),H=z??V,G=mt.get("AWS_ACCESS_KEY_ID"),ee=Ct(()=>{let ge=process.env.AWS_BEARER_TOKEN_BEDROCK;if(ge)return ge;if(u?.type==="api")return process.env.AWS_BEARER_TOKEN_BEDROCK=u.key,u.key}),se=mt.get("AWS_WEB_IDENTITY_TOKEN_FILE"),F=!!(process.env.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI||process.env.AWS_CONTAINER_CREDENTIALS_FULL_URI);if(!H&&!G&&!ee&&!se&&!F)return{autoload:!1};let Z={region:j};if(!ee){let ge=H?{profile:H}:{};Z.credentialProvider=Pm(ge)}let he=r?.options?.endpoint??r?.options?.baseURL;return he&&(Z.baseURL=he),{autoload:!0,options:Z,async getModel(ge,Y,N){if(["global.","us.","eu.","jp.","apac.","au."].some(Q=>Y.startsWith(Q)))return ge.languageModel(Y);let te=N?.region??j,ce=te.split("-")[0];switch(ce){case"us":{let Q=["nova-micro","nova-lite","nova-pro","nova-premier","nova-2","claude","deepseek"].some(me=>Y.includes(me)),ie=te.startsWith("us-gov");Q&&!ie&&(Y=`${ce}.${Y}`);break}case"eu":{let Q=["eu-west-1","eu-west-2","eu-west-3","eu-north-1","eu-central-1","eu-south-1","eu-south-2"].some(me=>te.includes(me)),ie=["claude","nova-lite","nova-micro","llama3","pixtral"].some(me=>Y.includes(me));Q&&ie&&(Y=`${ce}.${Y}`);break}case"ap":{let Q=["ap-southeast-2","ap-southeast-4"].includes(te),ie=te==="ap-northeast-1";Q&&["anthropic.claude-sonnet-4-5","anthropic.claude-haiku"].some(me=>Y.includes(me))?(ce="au",Y=`${ce}.${Y}`):ie?["claude","nova-lite","nova-micro","nova-pro"].some(le=>Y.includes(le))&&(ce="jp",Y=`${ce}.${Y}`):["claude","nova-lite","nova-micro","nova-pro"].some(le=>Y.includes(le))&&(ce="apac",Y=`${ce}.${Y}`);break}}return ge.languageModel(Y)}}}),openrouter:n(()=>Je.succeed({autoload:!1,options:{headers:{"HTTP-Referer":"https://opencode.ai/","X-Title":"opencode"}}}),"openrouter"),vercel:n(()=>Je.succeed({autoload:!1,options:{headers:{"http-referer":"https://opencode.ai/","x-title":"opencode"}}}),"vercel"),"google-vertex":n(r=>{let u=r.options?.project??mt.get("GOOGLE_CLOUD_PROJECT")??mt.get("GCP_PROJECT")??mt.get("GCLOUD_PROJECT"),g=String(r.options?.location??mt.get("GOOGLE_VERTEX_LOCATION")??mt.get("GOOGLE_CLOUD_LOCATION")??mt.get("VERTEX_LOCATION")??"us-central1");return!u?Je.succeed({autoload:!1}):Je.succeed({autoload:!0,vars(j){let z=g==="global"?"aiplatform.googleapis.com":`${g}-aiplatform.googleapis.com`;return{...u&&{GOOGLE_VERTEX_PROJECT:u},GOOGLE_VERTEX_LOCATION:g,GOOGLE_VERTEX_ENDPOINT:z}},options:{project:u,location:g,fetch:n(async(j,z)=>{let G=await(await new Om().getApplicationDefault()).credential.getAccessToken(),ee=new Headers(z?.headers);return ee.set("Authorization",`Bearer ${G.token}`),fetch(j,{...z,headers:ee})},"fetch")},async getModel(j,z){let V=String(z).trim();return j.languageModel(V)}})},"google-vertex"),"google-vertex-anthropic":n(()=>{let r=mt.get("GOOGLE_CLOUD_PROJECT")??mt.get("GCP_PROJECT")??mt.get("GCLOUD_PROJECT"),u=mt.get("GOOGLE_CLOUD_LOCATION")??mt.get("VERTEX_LOCATION")??"global";return!r?Je.succeed({autoload:!1}):Je.succeed({autoload:!0,options:{project:r,location:u},async getModel(L,j){let z=String(j).trim();return L.languageModel(z)}})},"google-vertex-anthropic"),"sap-ai-core":Je.fnUntraced(function*(){let r=yield*M.auth("sap-ai-core"),u=Ct(()=>{let j=process.env.AICORE_SERVICE_KEY;if(j)return j;if(r?.type==="api")return process.env.AICORE_SERVICE_KEY=r.key,r.key}),g=process.env.AICORE_DEPLOYMENT_ID,L=process.env.AICORE_RESOURCE_GROUP;return{autoload:!!u,options:u?{deploymentId:g,resourceGroup:L}:{},async getModel(j,z){return j(z)}}}),zenmux:n(()=>Je.succeed({autoload:!1,options:{headers:{"HTTP-Referer":"https://opencode.ai/","X-Title":"opencode"}}}),"zenmux"),gitlab:Je.fnUntraced(function*(r){let u=mt.get("GITLAB_INSTANCE_URL")||"https://gitlab.com",g=yield*M.auth(r.id),L=yield*Je.sync(()=>g?.type==="oauth"?g.access:g?.type==="api"?g.key:mt.get("GITLAB_TOKEN")),j=(yield*M.config()).provider?.gitlab,z={"User-Agent":`opencode/${Jt.VERSION} gitlab-ai-provider/${Dm} (${Kn.platform()} ${Kn.release()}; ${Kn.arch()})`,"anthropic-beta":"context-1m-2025-08-07",...j?.options?.aiGatewayHeaders||{}},V={duo_agent_platform_agentic_chat:!0,duo_agent_platform:!0,...j?.options?.featureFlags||{}};return{autoload:!!L,options:{instanceUrl:u,apiKey:L,aiGatewayHeaders:z,featureFlags:V},async getModel(H,G,ee){if(G.startsWith("duo-workflow-")){let se=ee?.workflowRef,F=Sm(G)?G:"duo-workflow",Z=H.workflowChat(F,{featureFlags:V});return se&&(Z.selectedModelRef=se),Z}return H.agenticChat(G,{aiGatewayHeaders:z,featureFlags:V})},async discoverModels(){if(!L)return t.info("gitlab model discovery skipped: no apiKey"),{};try{let H=L,G=n(()=>g?.type==="api"?{"PRIVATE-TOKEN":H}:{Authorization:`Bearer ${H}`},"getHeaders");t.info("gitlab model discovery starting",{instanceUrl:u});let ee=await Tm({instanceUrl:u,getHeaders:G},{workingDirectory:ne.directory});if(!ee.models.length)return t.info("gitlab model discovery skipped: no models found",{project:ee.project?{id:ee.project.id,path:ee.project.pathWithNamespace}:null}),{};let se={};for(let F of ee.models)r.models[F.id]||(se[F.id]={id:Et.make(F.id),providerID:rt.make("gitlab"),name:`Agent Platform (${F.name})`,family:"",api:{id:F.id,url:u,npm:"gitlab-ai-provider"},status:"active",headers:{},options:{workflowRef:F.ref},cost:{input:0,output:0,cache:{read:0,write:0}},limit:{context:F.context,output:F.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 t.info("gitlab model discovery complete",{count:Object.keys(se).length,models:Object.keys(se)}),se}catch(H){return t.warn("gitlab model discovery failed",{error:H}),{}}}}}),"cloudflare-workers-ai":Je.fnUntraced(function*(r){if(r.options?.baseURL)return{autoload:!1};let u=yield*M.auth(r.id),g=mt.get("CLOUDFLARE_ACCOUNT_ID")||(u?.type==="api"?u.metadata?.accountId:void 0);if(!g)return{autoload:!1,async getModel(){throw new Error("CLOUDFLARE_ACCOUNT_ID is missing. Set it with: export CLOUDFLARE_ACCOUNT_ID=<your-account-id>")}};let L=yield*Je.gen(function*(){let j=mt.get("CLOUDFLARE_API_KEY");if(j)return j;if(u?.type==="api")return u.key});return{autoload:!!L,options:{apiKey:L,headers:{"User-Agent":`opencode/${Jt.VERSION} cloudflare-workers-ai (${Kn.platform()} ${Kn.release()}; ${Kn.arch()})`}},async getModel(j,z){return j.languageModel(z)},vars(j){return{CLOUDFLARE_ACCOUNT_ID:g}}}}),"cloudflare-ai-gateway":Je.fnUntraced(function*(r){if(r.options?.baseURL)return{autoload:!1};let u=yield*M.auth(r.id),g=mt.get("CLOUDFLARE_ACCOUNT_ID")||(u?.type==="api"?u.metadata?.accountId:void 0),L=mt.get("CLOUDFLARE_GATEWAY_ID")||(u?.type==="api"?u.metadata?.gatewayId:void 0);if(!g||!L){let F=[g?void 0:"CLOUDFLARE_ACCOUNT_ID",L?void 0:"CLOUDFLARE_GATEWAY_ID"].filter(Z=>!!Z);return{autoload:!1,async getModel(){throw new Error(`${F.join(" and ")} missing. Set with: ${F.map(Z=>`export ${Z}=<value>`).join(" && ")}`)}}}let j=yield*Je.gen(function*(){let F=mt.get("CLOUDFLARE_API_TOKEN")||mt.get("CF_AIG_TOKEN");if(F)return F;if(u?.type==="api")return u.key});if(!j)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:z}=yield*Je.promise(()=>import("ai-gateway-provider")),{createUnified:V}=yield*Je.promise(()=>import("ai-gateway-provider/providers/unified")),G={metadata:Ct(()=>{if(r.options?.metadata)return r.options.metadata;try{return JSON.parse(r.options?.headers?.["cf-aig-metadata"])}catch{return}}),cacheTtl:r.options?.cacheTtl,cacheKey:r.options?.cacheKey,skipCache:r.options?.skipCache,collectLog:r.options?.collectLog,headers:{"User-Agent":`opencode/${Jt.VERSION} cloudflare-ai-gateway (${Kn.platform()} ${Kn.release()}; ${Kn.arch()})`}},ee=z({accountId:g,gateway:L,apiKey:j,...Object.values(G).some(F=>F!==void 0)?{options:G}:{}}),se=V();return{autoload:!0,async getModel(F,Z,he){return ee(se(Z))},options:{}}}),cerebras:n(()=>Je.succeed({autoload:!1,options:{headers:{"X-Cerebras-3rd-Party-Integration":"opencode"}}}),"cerebras"),kilo:n(()=>Je.succeed({autoload:!1,options:{headers:{"HTTP-Referer":"https://opencode.ai/","X-Title":"opencode"}}}),"kilo")}}n(a,"custom"),k.Model=Ie.object({id:Et.zod,providerID:rt.zod,api:Ie.object({id:Ie.string(),url:Ie.string(),npm:Ie.string()}),name:Ie.string(),family:Ie.string().optional(),capabilities:Ie.object({temperature:Ie.boolean(),reasoning:Ie.boolean(),attachment:Ie.boolean(),toolcall:Ie.boolean(),input:Ie.object({text:Ie.boolean(),audio:Ie.boolean(),image:Ie.boolean(),video:Ie.boolean(),pdf:Ie.boolean()}),output:Ie.object({text:Ie.boolean(),audio:Ie.boolean(),image:Ie.boolean(),video:Ie.boolean(),pdf:Ie.boolean()}),interleaved:Ie.union([Ie.boolean(),Ie.object({field:Ie.enum(["reasoning_content","reasoning_details"])})])}),cost:Ie.object({input:Ie.number(),output:Ie.number(),cache:Ie.object({read:Ie.number(),write:Ie.number()}),experimentalOver200K:Ie.object({input:Ie.number(),output:Ie.number(),cache:Ie.object({read:Ie.number(),write:Ie.number()})}).optional()}),limit:Ie.object({context:Ie.number(),input:Ie.number().optional(),output:Ie.number()}),status:Ie.enum(["alpha","beta","deprecated","active"]),options:Ie.record(Ie.string(),Ie.any()),headers:Ie.record(Ie.string(),Ie.string()),release_date:Ie.string(),variants:Ie.record(Ie.string(),Ie.record(Ie.string(),Ie.any())).optional()}).meta({ref:"Model"}),k.Info=Ie.object({id:rt.zod,name:Ie.string(),source:Ie.enum(["env","config","custom","api"]),env:Ie.string().array(),key:Ie.string().optional(),options:Ie.record(Ie.string(),Ie.any()),models:Ie.record(Ie.string(),k.Model)}).meta({ref:"Provider"});class s extends rm.Service()("@opencode/Provider"){static{n(this,"Service")}}k.Service=s;function p(M,r){let u={id:Et.make(r.id),providerID:rt.make(M.id),name:r.name,family:r.family,api:{id:r.id,url:r.provider?.api??M.api,npm:r.provider?.npm??M.npm??"@ai-sdk/openai-compatible"},status:r.status??"active",headers:r.headers??{},options:r.options??{},cost:{input:r.cost?.input??0,output:r.cost?.output??0,cache:{read:r.cost?.cache_read??0,write:r.cost?.cache_write??0},experimentalOver200K:r.cost?.context_over_200k?{cache:{read:r.cost.context_over_200k.cache_read??0,write:r.cost.context_over_200k.cache_write??0},input:r.cost.context_over_200k.input,output:r.cost.context_over_200k.output}:void 0},limit:{context:r.limit.context,input:r.limit.input,output:r.limit.output},capabilities:{temperature:r.temperature,reasoning:r.reasoning,attachment:r.attachment,toolcall:r.tool_call,input:{text:r.modalities?.input?.includes("text")??!1,audio:r.modalities?.input?.includes("audio")??!1,image:r.modalities?.input?.includes("image")??!1,video:r.modalities?.input?.includes("video")??!1,pdf:r.modalities?.input?.includes("pdf")??!1},output:{text:r.modalities?.output?.includes("text")??!1,audio:r.modalities?.output?.includes("audio")??!1,image:r.modalities?.output?.includes("image")??!1,video:r.modalities?.output?.includes("video")??!1,pdf:r.modalities?.output?.includes("pdf")??!1},interleaved:r.interleaved??!1},release_date:r.release_date,variants:{}};return u.variants=Qo(jt.variants(u),g=>g),u}n(p,"fromModelsDevModel");function w(M){return{id:rt.make(M.id),source:"custom",name:M.name,env:M.env??[],options:{},models:Qo(M.models,r=>p(M,r))}}k.fromModelsDevProvider=w,n(w,"fromModelsDevProvider");let f=Cr.effect(s,Je.gen(function*(){let M=yield*Be.Service,r=yield*io.Service,u=yield*Mt.Service,g=yield*ae.make(()=>Je.gen(function*(){var ue=[];try{let F=Mn(ue,t.time("state"));let Z=yield*M.get();let he=yield*Je.promise(()=>ka.get());let ge=Qo(he,w);let Y={};let N=new Map;let q={};let te={};let ce=new Map;let Q={};let ie={auth:n(Oe=>r.get(Oe).pipe(Je.orDie),"auth"),config:n(()=>M.get(),"config")};t.info("init");function me(Oe,ye){let O=Y[Oe];if(O){Y[Oe]=Ao(O,ye);return}let W=ge[Oe];W&&(Y[Oe]=Ao(W,ye))}n(me,"mergeProvider");let le=yield*u.list();let we=Object.entries(Z.provider??{});let be=new Set(Z.disabled_providers??[]);let fe=Z.enabled_providers?new Set(Z.enabled_providers):null;function J(Oe){return!(fe&&!fe.has(Oe)||be.has(Oe))}n(J,"isProviderAllowed");for(let[Oe,ye]of we){let O=ge[Oe],W={id:rt.make(Oe),name:ye.name??O?.name??Oe,env:ye.env??O?.env??[],options:Ao(O?.options??{},ye.options??{}),source:"config",models:O?.models??{}};for(let[K,B]of Object.entries(ye.models??{})){let re=W.models[B.id??K],ve=Ct(()=>B.name?B.name:B.id&&B.id!==K?K:re?.name??K),$={id:Et.make(K),api:{id:B.id??re?.api.id??K,npm:B.provider?.npm??ye.npm??re?.api.npm??he[Oe]?.npm??"@ai-sdk/openai-compatible",url:B.provider?.api??ye?.api??re?.api.url??he[Oe]?.api},status:B.status??re?.status??"active",name:ve,providerID:rt.make(Oe),capabilities:{temperature:B.temperature??re?.capabilities.temperature??!1,reasoning:B.reasoning??re?.capabilities.reasoning??!1,attachment:B.attachment??re?.capabilities.attachment??!1,toolcall:B.tool_call??re?.capabilities.toolcall??!0,input:{text:B.modalities?.input?.includes("text")??re?.capabilities.input.text??!0,audio:B.modalities?.input?.includes("audio")??re?.capabilities.input.audio??!1,image:B.modalities?.input?.includes("image")??re?.capabilities.input.image??!1,video:B.modalities?.input?.includes("video")??re?.capabilities.input.video??!1,pdf:B.modalities?.input?.includes("pdf")??re?.capabilities.input.pdf??!1},output:{text:B.modalities?.output?.includes("text")??re?.capabilities.output.text??!0,audio:B.modalities?.output?.includes("audio")??re?.capabilities.output.audio??!1,image:B.modalities?.output?.includes("image")??re?.capabilities.output.image??!1,video:B.modalities?.output?.includes("video")??re?.capabilities.output.video??!1,pdf:B.modalities?.output?.includes("pdf")??re?.capabilities.output.pdf??!1},interleaved:B.interleaved??!1},cost:{input:B?.cost?.input??re?.cost?.input??0,output:B?.cost?.output??re?.cost?.output??0,cache:{read:B?.cost?.cache_read??re?.cost?.cache.read??0,write:B?.cost?.cache_write??re?.cost?.cache.write??0}},options:Ao(re?.options??{},B.options??{}),limit:{context:B.limit?.context??re?.limit?.context??0,input:B.limit?.input??re?.limit?.input,output:B.limit?.output??re?.limit?.output??0},headers:Ao(re?.headers??{},B.headers??{}),family:B.family??re?.family??"",release_date:B.release_date??re?.release_date??"",variants:{}},_e=Ao(jt.variants($),B.variants??{});$.variants=Qo(ic(_e,De=>!De.disabled),De=>sc(De,["disabled"])),W.models[K]=$}ge[Oe]=W}let X=mt.all();for(let[Oe,ye]of Object.entries(ge)){let O=rt.make(Oe);if(be.has(O))continue;let W=ye.env.map(K=>X[K]).find(Boolean);W&&me(O,{source:"env",key:ye.env.length===1?W:void 0})}let xe=yield*r.all().pipe(Je.orDie);for(let[Oe,ye]of Object.entries(xe)){let O=rt.make(Oe);be.has(O)||ye.type==="api"&&me(O,{source:"api",key:ye.key})}for(let Oe of le){if(!Oe.auth)continue;let ye=rt.make(Oe.auth.provider);if(be.has(ye)||!(yield*r.get(ye).pipe(Je.orDie))||!Oe.auth.loader)continue;let K=(yield*Je.promise(()=>Oe.auth.loader(()=>Je.runPromise(r.get(ye).pipe(Je.orDie)),ge[Oe.auth.provider])))??{},B=Y[ye]?{options:K}:{source:"custom",options:K};me(ye,B)}for(let[Oe,ye]of Object.entries(a(ie))){let O=rt.make(Oe);if(be.has(O))continue;let W=ge[O];if(!W){t.error("Provider does not exist in model list "+O);continue}let K=yield*ye(W);if(K&&(K.autoload||Y[O])){K.getModel&&(q[O]=K.getModel),K.vars&&(te[O]=K.vars),K.discoverModels&&(Q[O]=K.discoverModels);let B=K.options??{},re=Y[O]?{options:B}:{source:"custom",options:B};me(O,re)}}for(let[Oe,ye]of we){let O=rt.make(Oe),W={source:"config"};ye.env&&(W.env=ye.env),ye.name&&(W.name=ye.name),ye.options&&(W.options=ye.options),me(O,W)}let de=rt.make("gitlab");Q[de]&&Y[de]&&J(de)&&(yield*Je.promise(async()=>{try{let Oe=await Q[de]();for(let[ye,O]of Object.entries(Oe))Y[de].models[ye]||(Y[de].models[ye]=O)}catch(Oe){t.warn("state discovery error",{id:"gitlab",error:Oe})}}));for(let Oe of le){let ye=Oe.provider,O=ye?.models;if(!ye||!O)continue;let W=rt.make(ye.id);if(be.has(W))continue;let K=Y[W];if(!K)continue;let B=yield*r.get(W).pipe(Je.orDie);K.models=yield*Je.promise(async()=>{let re=await O(K,{auth:B});return Object.fromEntries(Object.entries(re).map(([ve,$])=>[ve,{...$,id:Et.make(ve),providerID:W}]))})}for(let[Oe,ye]of Object.entries(Y)){let O=rt.make(Oe);if(!J(O)){delete Y[O];continue}let W=Z.provider?.[O];for(let[K,B]of Object.entries(ye.models)){B.api.id=B.api.id??B.id??K,(K==="gpt-5-chat-latest"||O===rt.openrouter&&K==="openai/gpt-5-chat")&&delete ye.models[K],B.status==="alpha"&&!ze.OPENCODE_ENABLE_EXPERIMENTAL_MODELS&&delete ye.models[K],B.status==="deprecated"&&delete ye.models[K],(W?.blacklist&&W.blacklist.includes(K)||W?.whitelist&&!W.whitelist.includes(K))&&delete ye.models[K],B.variants=Qo(jt.variants(B),ve=>ve);let re=W?.models?.[K]?.variants;if(re&&B.variants){let ve=Ao(B.variants,re);B.variants=Qo(ic(ve,$=>!$.disabled),$=>sc($,["disabled"]))}}if(Object.keys(ye.models).length===0){delete Y[O];continue}t.info("found",{providerID:O})}return{models:N,providers:Y,sdk:ce,modelLoaders:q,varsLoaders:te}}catch(Qe){var dt=Qe,xt=!0}finally{jn(ue,dt,xt)}})),L=Je.fn("Provider.list")(()=>ae.use(g,F=>F.providers));async function j(F,Z){try{var he=[];try{let q=Mn(he,t.time("getSDK",{providerID:F.providerID}));let te=Z.providers[F.providerID];let ce={...te.options};F.providerID==="google-vertex"&&!F.api.npm.includes("@ai-sdk/openai-compatible")&&delete ce.fetch;F.api.npm.includes("@ai-sdk/openai-compatible")&&ce.includeUsage!==!1&&(ce.includeUsage=!0);let Q=Ct(()=>{let de=typeof ce.baseURL=="string"&&ce.baseURL!==""?ce.baseURL:F.api.url;if(!de)return;let ue=Z.varsLoaders[F.providerID];if(ue){let Qe=ue(ce);for(let[dt,xt]of Object.entries(Qe)){let Oe="${"+dt+"}";de=de.replaceAll(Oe,xt)}}return de=de.replace(/\$\{([^}]+)\}/g,(Qe,dt)=>mt.get(String(dt))??Qe),de});Q!==void 0&&(ce.baseURL=Q);ce.apiKey===void 0&&te.key&&(ce.apiKey=te.key);F.headers&&(ce.headers={...ce.headers,...F.headers});let ie=Kr.fast(JSON.stringify({providerID:F.providerID,npm:F.api.npm,options:ce}));let me=Z.sdk.get(ie);if(me)return me;let le=ce.fetch;let we=ce.chunkTimeout??(F.providerID==="openai"?3e5:void 0);delete ce.chunkTimeout;ce.fetch=async(de,ue)=>{let Qe=le??fetch,dt=ue??{},xt=typeof we=="number"&&we>0?new AbortController:void 0,Oe=[];dt.signal&&Oe.push(dt.signal),xt&&Oe.push(xt.signal),ce.timeout!==void 0&&ce.timeout!==null&&ce.timeout!==!1&&Oe.push(AbortSignal.timeout(ce.timeout));let ye=Oe.length===0?null:Oe.length===1?Oe[0]:AbortSignal.any(Oe);ye&&(dt.signal=ye);let O=!1;if(F.api.npm==="@ai-sdk/openai"&&dt.body&&dt.method==="POST"){let B=JSON.parse(dt.body);if(O=B.stream===!0,!(F.providerID.includes("azure")&&B.store===!0)&&Array.isArray(B.input)){for(let $ of B.input)"id"in $&&delete $.id;dt.body=JSON.stringify(B)}}let W=await Qe(de,{...dt,timeout:!1}),K=xt?o(W,we,xt,O):W;return O?Li.wrap(K):K};let be=m[F.api.npm];if(be){t.info("using bundled provider",{providerID:F.providerID,pkg:F.api.npm});let de=be({name:F.providerID,...ce});return Z.sdk.set(ie,de),de}let fe;if(F.api.npm.startsWith("file://"))t.info("loading local provider",{pkg:F.api.npm}),fe=F.api.npm;else{let de=await Ho.add(F.api.npm);if(!de.entrypoint)throw new Error(`Package ${F.api.npm} has no import entrypoint`);fe=de.entrypoint}let J=await import(fe);let X=J[Object.keys(J).find(de=>de.startsWith("create"))];let xe=X({name:F.providerID,...ce});Z.sdk.set(ie,xe);return xe}catch(ge){var Y=ge,N=!0}finally{jn(he,Y,N)}}catch(q){throw new k.InitError({providerID:F.providerID},{cause:q})}}n(j,"resolveSDK");let z=Je.fn("Provider.getProvider")(F=>ae.use(g,Z=>Z.providers[F])),V=Je.fn("Provider.getModel")(function*(F,Z){let he=yield*ae.get(g),ge=he.providers[F];if(!ge){let N=Object.keys(he.providers),q=rc.go(F,N,{limit:3,threshold:-1e4});throw new k.ModelNotFoundError({providerID:F,modelID:Z,suggestions:q.map(te=>te.target)})}let Y=ge.models[Z];if(!Y){let N=Object.keys(ge.models),q=rc.go(Z,N,{limit:3,threshold:-1e4});throw new k.ModelNotFoundError({providerID:F,modelID:Z,suggestions:q.map(te=>te.target)})}return Y}),H=Je.fn("Provider.getLanguage")(function*(F){let Z=yield*ae.get(g),he=`${F.providerID}/${F.id}`;return Z.models.has(he)?Z.models.get(he):yield*Je.promise(async()=>{let ge=i();if(ge){let q=ac({name:F.providerID,apiKey:"test-key",baseURL:ge}).chatModel(F.api.id);return Z.models.set(he,q),q}let Y=Z.providers[F.providerID],N=await j(F,Z);try{let q=Z.modelLoaders[F.providerID]?await Z.modelLoaders[F.providerID](N,F.api.id,{...Y.options,...F.options}):N.languageModel(F.api.id);return Z.models.set(he,q),q}catch(q){throw q instanceof nm?new k.ModelNotFoundError({modelID:F.id,providerID:F.providerID},{cause:q}):q}})}),G=Je.fn("Provider.closest")(function*(F,Z){let ge=(yield*ae.get(g)).providers[F];if(ge){for(let Y of Z)for(let N of Object.keys(ge.models))if(N.includes(Y))return{providerID:F,modelID:N}}}),ee=Je.fn("Provider.getSmallModel")(function*(F){let Z=yield*M.get();if(Z.small_model){let N=_(Z.small_model);return yield*V(N.providerID,N.modelID)}let ge=(yield*ae.get(g)).providers[F];if(!ge)return;let Y=["claude-haiku-4-5","claude-haiku-4.5","3-5-haiku","3.5-haiku","gemini-3-flash","gemini-2.5-flash","gpt-5-nano"];F.startsWith("opencode")&&(Y=["gpt-5-nano"]),F.startsWith("github-copilot")&&(Y=["gpt-5-mini","claude-haiku-4.5",...Y]);for(let N of Y)if(F===rt.amazonBedrock){let q=["global.","us.","eu."],te=Object.keys(ge.models).filter(me=>me.includes(N)),ce=te.find(me=>me.startsWith("global."));if(ce)return yield*V(F,Et.make(ce));let Q=ge.options?.region;if(Q){let me=Q.split("-")[0];if(me==="us"||me==="eu"){let le=te.find(we=>we.startsWith(`${me}.`));if(le)return yield*V(F,Et.make(le))}}let ie=te.find(me=>!q.some(le=>me.startsWith(le)));if(ie)return yield*V(F,Et.make(ie))}else for(let q of Object.keys(ge.models))if(q.includes(N))return yield*V(F,Et.make(q))}),se=Je.fn("Provider.defaultModel")(function*(){let F=yield*M.get();if(F.model)return _(F.model);let Z=yield*ae.get(g),he=yield*Je.promise(()=>Te.readJson(om.join(wt.Path.state,"model.json")).then(N=>Array.isArray(N.recent)?N.recent:[]).catch(()=>[]));for(let N of he){let q=Z.providers[N.providerID];if(q&&q.models[N.modelID])return{providerID:N.providerID,modelID:N.modelID}}let ge=Object.values(Z.providers).find(N=>!F.provider||Object.keys(F.provider).includes(N.id));if(!ge)throw new Error("no providers found");let[Y]=R(Object.values(ge.models));if(!Y)throw new Error("no models found");return{providerID:ge.id,modelID:Y.id}});return s.of({list:L,getProvider:z,getModel:V,getLanguage:H,closest:G,getSmallModel:ee,defaultModel:se})}));k.defaultLayer=Cr.suspend(()=>f.pipe(Cr.provide(Be.defaultLayer),Cr.provide(io.defaultLayer),Cr.provide(Mt.defaultLayer)));let{runPromise:I}=qe(s,k.defaultLayer);async function h(){return I(M=>M.list())}k.list=h,n(h,"list");async function S(M){return I(r=>r.getProvider(M))}k.getProvider=S,n(S,"getProvider");async function C(M,r){return I(u=>u.getModel(M,r))}k.getModel=C,n(C,"getModel");async function l(M){return I(r=>r.getLanguage(M))}k.getLanguage=l,n(l,"getLanguage");async function P(M,r){return I(u=>u.closest(M,r))}k.closest=P,n(P,"closest");async function y(M){return I(r=>r.getSmallModel(M))}k.getSmallModel=y,n(y,"getSmallModel");async function D(){return I(M=>M.defaultModel())}k.defaultModel=D,n(D,"defaultModel");let T=["gpt-5","claude-sonnet-4","big-pickle","gemini-3-pro"];function R(M){return tm(M,[r=>T.findIndex(u=>r.id.includes(u)),"desc"],[r=>r.id.includes("latest")?0:1,"asc"],[r=>r.id,"desc"])}k.sort=R,n(R,"sort");function _(M){let[r,...u]=M.split("/");return{providerID:rt.make(r),modelID:Et.make(u.join("/"))}}k.parseModel=_,n(_,"parseModel"),k.ModelNotFoundError=tt.create("ProviderModelNotFoundError",Ie.object({providerID:rt.zod,modelID:Et.zod,suggestions:Ie.array(Ie.string()).optional()})),k.InitError=tt.create("ProviderInitError",Ie.object({providerID:rt.zod}))})(Gt||={});import{generateObject as Fm,streamObject as qm}from"ai";var lc=`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.
134
+ `},"block"),h=n(C=>{let l="";for(;;){let P=/\r?\n\r?\n/.exec(w);if(!P)break;l+=I(w.slice(0,P.index)),w=w.slice(P.index+P[0].length)}return C&&w.trim()&&(l+=I(w),w=""),l},"drain"),S=new ReadableStream({async pull(C){for(;;){let l=await b.read();if(l.done){w+=s.decode();let y=h(!0);if(y&&C.enqueue(p.encode(y)),f&&!v){C.error(new Nn.ResponseStreamError("Response stream ended before response.completed"));return}C.close();return}w+=s.decode(l.value,{stream:!0});let P=h(!1);if(P){C.enqueue(p.encode(P));return}}},async cancel(C){await b.cancel(C)}});return new Response(S,{headers:new Headers(d.headers),status:d.status,statusText:d.statusText})}a.wrap=c,n(c,"wrap")})(Li||={});var Gt;(k=>{let t=Ae.create({service:"provider"});function e(M){let r=/^gpt-(\d+)/.exec(M);return r?Number(r[1])>=5&&!M.startsWith("gpt-5-mini"):!1}n(e,"shouldUseCopilotResponsesApi");function o(M,r,u,g=!1){if(typeof r!="number"||r<=0||!M.body||!M.headers.get("content-type")?.includes("text/event-stream")&&!(g&&M.ok))return M;let L=M.body.getReader(),j=new ReadableStream({async pull(z){let V=await new Promise((H,G)=>{let ee=setTimeout(()=>{let se=new Nn.ResponseStreamError("SSE read timed out");u.abort(se),L.cancel(se).catch(()=>{}),G(se)},r);L.read().then(se=>{clearTimeout(ee),H(se)},se=>{clearTimeout(ee),G(se)})});if(V.done){z.close();return}z.enqueue(V.value)},async cancel(z){u.abort(z),await L.cancel(z)}});return new Response(j,{headers:new Headers(M.headers),status:M.status,statusText:M.statusText})}n(o,"wrapSSE");function i(){let M=mt.get("OPENCODE_E2E_LLM_URL");if(!(typeof M!="string"||M===""))return M}n(i,"e2eURL");let m={"@ai-sdk/amazon-bedrock":im,"@ai-sdk/anthropic":am,"@ai-sdk/azure":lm,"@ai-sdk/google":cm,"@ai-sdk/google-vertex":dm,"@ai-sdk/google-vertex/anthropic":um,"@ai-sdk/openai":pm,"@ai-sdk/openai-compatible":ac,"@openrouter/ai-sdk-provider":fm,"@ai-sdk/xai":mm,"@ai-sdk/mistral":hm,"@ai-sdk/groq":gm,"@ai-sdk/deepinfra":ym,"@ai-sdk/cerebras":bm,"@ai-sdk/cohere":wm,"@ai-sdk/gateway":vm,"@ai-sdk/togetherai":xm,"@ai-sdk/perplexity":Im,"@ai-sdk/vercel":km,"gitlab-ai-provider":Dm,"@ai-sdk/github-copilot":vs,"venice-ai-sdk-provider":Em};function c(M){return M.responses===void 0&&M.chat===void 0}n(c,"useLanguageModel");function a(M){return{anthropic:n(()=>Je.succeed({autoload:!1,options:{headers:{"anthropic-beta":"interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14"}}}),"anthropic"),opencode:Je.fnUntraced(function*(r){let u=mt.all();return Ct(()=>!!r.env.some(j=>u[j]))||!!(yield*M.auth(r.id))||!!(yield*M.config()).provider?.opencode?.options?.apiKey?{autoload:Object.keys(r.models).length>0,options:{}}:{autoload:!1}}),openai:n(()=>Je.succeed({autoload:!1,async getModel(r,u,g){return r.responses(u)},options:{}}),"openai"),xai:n(()=>Je.succeed({autoload:!1,async getModel(r,u,g){return r.responses(u)},options:{}}),"xai"),"github-copilot":n(()=>Je.succeed({autoload:!1,async getModel(r,u,g){return c(r)?r.languageModel(u):e(u)?r.responses(u):r.chat(u)},options:{}}),"github-copilot"),azure:n(r=>{let u=Ct(()=>{let g=r.options?.resourceName;return typeof g=="string"&&g.trim()!==""?g:mt.get("AZURE_RESOURCE_NAME")});return Je.succeed({autoload:!1,async getModel(g,L,j){return c(g)?g.languageModel(L):j?.useCompletionUrls?g.chat(L):g.responses(L)},options:{},vars(g){return{...u&&{AZURE_RESOURCE_NAME:u}}}})},"azure"),"azure-cognitive-services":n(()=>{let r=mt.get("AZURE_COGNITIVE_SERVICES_RESOURCE_NAME");return Je.succeed({autoload:!1,async getModel(u,g,L){return c(u)?u.languageModel(g):L?.useCompletionUrls?u.chat(g):u.responses(g)},options:{baseURL:r?`https://${r}.cognitiveservices.azure.com/openai`:void 0}})},"azure-cognitive-services"),"amazon-bedrock":Je.fnUntraced(function*(){let r=(yield*M.config()).provider?.["amazon-bedrock"],u=yield*M.auth("amazon-bedrock"),g=r?.options?.region,L=mt.get("AWS_REGION"),j=g??L??"us-east-1",z=r?.options?.profile,V=mt.get("AWS_PROFILE"),H=z??V,G=mt.get("AWS_ACCESS_KEY_ID"),ee=Ct(()=>{let ge=process.env.AWS_BEARER_TOKEN_BEDROCK;if(ge)return ge;if(u?.type==="api")return process.env.AWS_BEARER_TOKEN_BEDROCK=u.key,u.key}),se=mt.get("AWS_WEB_IDENTITY_TOKEN_FILE"),F=!!(process.env.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI||process.env.AWS_CONTAINER_CREDENTIALS_FULL_URI);if(!H&&!G&&!ee&&!se&&!F)return{autoload:!1};let Z={region:j};if(!ee){let ge=H?{profile:H}:{};Z.credentialProvider=Om(ge)}let he=r?.options?.endpoint??r?.options?.baseURL;return he&&(Z.baseURL=he),{autoload:!0,options:Z,async getModel(ge,Y,N){if(["global.","us.","eu.","jp.","apac.","au."].some(Q=>Y.startsWith(Q)))return ge.languageModel(Y);let te=N?.region??j,ce=te.split("-")[0];switch(ce){case"us":{let Q=["nova-micro","nova-lite","nova-pro","nova-premier","nova-2","claude","deepseek"].some(me=>Y.includes(me)),ie=te.startsWith("us-gov");Q&&!ie&&(Y=`${ce}.${Y}`);break}case"eu":{let Q=["eu-west-1","eu-west-2","eu-west-3","eu-north-1","eu-central-1","eu-south-1","eu-south-2"].some(me=>te.includes(me)),ie=["claude","nova-lite","nova-micro","llama3","pixtral"].some(me=>Y.includes(me));Q&&ie&&(Y=`${ce}.${Y}`);break}case"ap":{let Q=["ap-southeast-2","ap-southeast-4"].includes(te),ie=te==="ap-northeast-1";Q&&["anthropic.claude-sonnet-4-5","anthropic.claude-haiku"].some(me=>Y.includes(me))?(ce="au",Y=`${ce}.${Y}`):ie?["claude","nova-lite","nova-micro","nova-pro"].some(le=>Y.includes(le))&&(ce="jp",Y=`${ce}.${Y}`):["claude","nova-lite","nova-micro","nova-pro"].some(le=>Y.includes(le))&&(ce="apac",Y=`${ce}.${Y}`);break}}return ge.languageModel(Y)}}}),openrouter:n(()=>Je.succeed({autoload:!1,options:{headers:{"HTTP-Referer":"https://opencode.ai/","X-Title":"opencode"}}}),"openrouter"),vercel:n(()=>Je.succeed({autoload:!1,options:{headers:{"http-referer":"https://opencode.ai/","x-title":"opencode"}}}),"vercel"),"google-vertex":n(r=>{let u=r.options?.project??mt.get("GOOGLE_CLOUD_PROJECT")??mt.get("GCP_PROJECT")??mt.get("GCLOUD_PROJECT"),g=String(r.options?.location??mt.get("GOOGLE_VERTEX_LOCATION")??mt.get("GOOGLE_CLOUD_LOCATION")??mt.get("VERTEX_LOCATION")??"us-central1");return!u?Je.succeed({autoload:!1}):Je.succeed({autoload:!0,vars(j){let z=g==="global"?"aiplatform.googleapis.com":`${g}-aiplatform.googleapis.com`;return{...u&&{GOOGLE_VERTEX_PROJECT:u},GOOGLE_VERTEX_LOCATION:g,GOOGLE_VERTEX_ENDPOINT:z}},options:{project:u,location:g,fetch:n(async(j,z)=>{let G=await(await new _m().getApplicationDefault()).credential.getAccessToken(),ee=new Headers(z?.headers);return ee.set("Authorization",`Bearer ${G.token}`),fetch(j,{...z,headers:ee})},"fetch")},async getModel(j,z){let V=String(z).trim();return j.languageModel(V)}})},"google-vertex"),"google-vertex-anthropic":n(()=>{let r=mt.get("GOOGLE_CLOUD_PROJECT")??mt.get("GCP_PROJECT")??mt.get("GCLOUD_PROJECT"),u=mt.get("GOOGLE_CLOUD_LOCATION")??mt.get("VERTEX_LOCATION")??"global";return!r?Je.succeed({autoload:!1}):Je.succeed({autoload:!0,options:{project:r,location:u},async getModel(L,j){let z=String(j).trim();return L.languageModel(z)}})},"google-vertex-anthropic"),"sap-ai-core":Je.fnUntraced(function*(){let r=yield*M.auth("sap-ai-core"),u=Ct(()=>{let j=process.env.AICORE_SERVICE_KEY;if(j)return j;if(r?.type==="api")return process.env.AICORE_SERVICE_KEY=r.key,r.key}),g=process.env.AICORE_DEPLOYMENT_ID,L=process.env.AICORE_RESOURCE_GROUP;return{autoload:!!u,options:u?{deploymentId:g,resourceGroup:L}:{},async getModel(j,z){return j(z)}}}),zenmux:n(()=>Je.succeed({autoload:!1,options:{headers:{"HTTP-Referer":"https://opencode.ai/","X-Title":"opencode"}}}),"zenmux"),gitlab:Je.fnUntraced(function*(r){let u=mt.get("GITLAB_INSTANCE_URL")||"https://gitlab.com",g=yield*M.auth(r.id),L=yield*Je.sync(()=>g?.type==="oauth"?g.access:g?.type==="api"?g.key:mt.get("GITLAB_TOKEN")),j=(yield*M.config()).provider?.gitlab,z={"User-Agent":`opencode/${Jt.VERSION} gitlab-ai-provider/${Sm} (${Kn.platform()} ${Kn.release()}; ${Kn.arch()})`,"anthropic-beta":"context-1m-2025-08-07",...j?.options?.aiGatewayHeaders||{}},V={duo_agent_platform_agentic_chat:!0,duo_agent_platform:!0,...j?.options?.featureFlags||{}};return{autoload:!!L,options:{instanceUrl:u,apiKey:L,aiGatewayHeaders:z,featureFlags:V},async getModel(H,G,ee){if(G.startsWith("duo-workflow-")){let se=ee?.workflowRef,F=Tm(G)?G:"duo-workflow",Z=H.workflowChat(F,{featureFlags:V});return se&&(Z.selectedModelRef=se),Z}return H.agenticChat(G,{aiGatewayHeaders:z,featureFlags:V})},async discoverModels(){if(!L)return t.info("gitlab model discovery skipped: no apiKey"),{};try{let H=L,G=n(()=>g?.type==="api"?{"PRIVATE-TOKEN":H}:{Authorization:`Bearer ${H}`},"getHeaders");t.info("gitlab model discovery starting",{instanceUrl:u});let ee=await Pm({instanceUrl:u,getHeaders:G},{workingDirectory:ne.directory});if(!ee.models.length)return t.info("gitlab model discovery skipped: no models found",{project:ee.project?{id:ee.project.id,path:ee.project.pathWithNamespace}:null}),{};let se={};for(let F of ee.models)r.models[F.id]||(se[F.id]={id:Et.make(F.id),providerID:rt.make("gitlab"),name:`Agent Platform (${F.name})`,family:"",api:{id:F.id,url:u,npm:"gitlab-ai-provider"},status:"active",headers:{},options:{workflowRef:F.ref},cost:{input:0,output:0,cache:{read:0,write:0}},limit:{context:F.context,output:F.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 t.info("gitlab model discovery complete",{count:Object.keys(se).length,models:Object.keys(se)}),se}catch(H){return t.warn("gitlab model discovery failed",{error:H}),{}}}}}),"cloudflare-workers-ai":Je.fnUntraced(function*(r){if(r.options?.baseURL)return{autoload:!1};let u=yield*M.auth(r.id),g=mt.get("CLOUDFLARE_ACCOUNT_ID")||(u?.type==="api"?u.metadata?.accountId:void 0);if(!g)return{autoload:!1,async getModel(){throw new Error("CLOUDFLARE_ACCOUNT_ID is missing. Set it with: export CLOUDFLARE_ACCOUNT_ID=<your-account-id>")}};let L=yield*Je.gen(function*(){let j=mt.get("CLOUDFLARE_API_KEY");if(j)return j;if(u?.type==="api")return u.key});return{autoload:!!L,options:{apiKey:L,headers:{"User-Agent":`opencode/${Jt.VERSION} cloudflare-workers-ai (${Kn.platform()} ${Kn.release()}; ${Kn.arch()})`}},async getModel(j,z){return j.languageModel(z)},vars(j){return{CLOUDFLARE_ACCOUNT_ID:g}}}}),"cloudflare-ai-gateway":Je.fnUntraced(function*(r){if(r.options?.baseURL)return{autoload:!1};let u=yield*M.auth(r.id),g=mt.get("CLOUDFLARE_ACCOUNT_ID")||(u?.type==="api"?u.metadata?.accountId:void 0),L=mt.get("CLOUDFLARE_GATEWAY_ID")||(u?.type==="api"?u.metadata?.gatewayId:void 0);if(!g||!L){let F=[g?void 0:"CLOUDFLARE_ACCOUNT_ID",L?void 0:"CLOUDFLARE_GATEWAY_ID"].filter(Z=>!!Z);return{autoload:!1,async getModel(){throw new Error(`${F.join(" and ")} missing. Set with: ${F.map(Z=>`export ${Z}=<value>`).join(" && ")}`)}}}let j=yield*Je.gen(function*(){let F=mt.get("CLOUDFLARE_API_TOKEN")||mt.get("CF_AIG_TOKEN");if(F)return F;if(u?.type==="api")return u.key});if(!j)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:z}=yield*Je.promise(()=>import("ai-gateway-provider")),{createUnified:V}=yield*Je.promise(()=>import("ai-gateway-provider/providers/unified")),G={metadata:Ct(()=>{if(r.options?.metadata)return r.options.metadata;try{return JSON.parse(r.options?.headers?.["cf-aig-metadata"])}catch{return}}),cacheTtl:r.options?.cacheTtl,cacheKey:r.options?.cacheKey,skipCache:r.options?.skipCache,collectLog:r.options?.collectLog,headers:{"User-Agent":`opencode/${Jt.VERSION} cloudflare-ai-gateway (${Kn.platform()} ${Kn.release()}; ${Kn.arch()})`}},ee=z({accountId:g,gateway:L,apiKey:j,...Object.values(G).some(F=>F!==void 0)?{options:G}:{}}),se=V();return{autoload:!0,async getModel(F,Z,he){return ee(se(Z))},options:{}}}),cerebras:n(()=>Je.succeed({autoload:!1,options:{headers:{"X-Cerebras-3rd-Party-Integration":"opencode"}}}),"cerebras"),kilo:n(()=>Je.succeed({autoload:!1,options:{headers:{"HTTP-Referer":"https://opencode.ai/","X-Title":"opencode"}}}),"kilo")}}n(a,"custom"),k.Model=Ie.object({id:Et.zod,providerID:rt.zod,api:Ie.object({id:Ie.string(),url:Ie.string(),npm:Ie.string()}),name:Ie.string(),family:Ie.string().optional(),capabilities:Ie.object({temperature:Ie.boolean(),reasoning:Ie.boolean(),attachment:Ie.boolean(),toolcall:Ie.boolean(),input:Ie.object({text:Ie.boolean(),audio:Ie.boolean(),image:Ie.boolean(),video:Ie.boolean(),pdf:Ie.boolean()}),output:Ie.object({text:Ie.boolean(),audio:Ie.boolean(),image:Ie.boolean(),video:Ie.boolean(),pdf:Ie.boolean()}),interleaved:Ie.union([Ie.boolean(),Ie.object({field:Ie.enum(["reasoning_content","reasoning_details"])})])}),cost:Ie.object({input:Ie.number(),output:Ie.number(),cache:Ie.object({read:Ie.number(),write:Ie.number()}),experimentalOver200K:Ie.object({input:Ie.number(),output:Ie.number(),cache:Ie.object({read:Ie.number(),write:Ie.number()})}).optional()}),limit:Ie.object({context:Ie.number(),input:Ie.number().optional(),output:Ie.number()}),status:Ie.enum(["alpha","beta","deprecated","active"]),options:Ie.record(Ie.string(),Ie.any()),headers:Ie.record(Ie.string(),Ie.string()),release_date:Ie.string(),variants:Ie.record(Ie.string(),Ie.record(Ie.string(),Ie.any())).optional()}).meta({ref:"Model"}),k.Info=Ie.object({id:rt.zod,name:Ie.string(),source:Ie.enum(["env","config","custom","api"]),env:Ie.string().array(),key:Ie.string().optional(),options:Ie.record(Ie.string(),Ie.any()),models:Ie.record(Ie.string(),k.Model)}).meta({ref:"Provider"});class s extends sm.Service()("@opencode/Provider"){static{n(this,"Service")}}k.Service=s;function p(M,r){let u={id:Et.make(r.id),providerID:rt.make(M.id),name:r.name,family:r.family,api:{id:r.id,url:r.provider?.api??M.api,npm:r.provider?.npm??M.npm??"@ai-sdk/openai-compatible"},status:r.status??"active",headers:r.headers??{},options:r.options??{},cost:{input:r.cost?.input??0,output:r.cost?.output??0,cache:{read:r.cost?.cache_read??0,write:r.cost?.cache_write??0},experimentalOver200K:r.cost?.context_over_200k?{cache:{read:r.cost.context_over_200k.cache_read??0,write:r.cost.context_over_200k.cache_write??0},input:r.cost.context_over_200k.input,output:r.cost.context_over_200k.output}:void 0},limit:{context:r.limit.context,input:r.limit.input,output:r.limit.output},capabilities:{temperature:r.temperature,reasoning:r.reasoning,attachment:r.attachment,toolcall:r.tool_call,input:{text:r.modalities?.input?.includes("text")??!1,audio:r.modalities?.input?.includes("audio")??!1,image:r.modalities?.input?.includes("image")??!1,video:r.modalities?.input?.includes("video")??!1,pdf:r.modalities?.input?.includes("pdf")??!1},output:{text:r.modalities?.output?.includes("text")??!1,audio:r.modalities?.output?.includes("audio")??!1,image:r.modalities?.output?.includes("image")??!1,video:r.modalities?.output?.includes("video")??!1,pdf:r.modalities?.output?.includes("pdf")??!1},interleaved:r.interleaved??!1},release_date:r.release_date,variants:{}};return u.variants=Qo(jt.variants(u),g=>g),u}n(p,"fromModelsDevModel");function w(M){return{id:rt.make(M.id),source:"custom",name:M.name,env:M.env??[],options:{},models:Qo(M.models,r=>p(M,r))}}k.fromModelsDevProvider=w,n(w,"fromModelsDevProvider");let f=Cr.effect(s,Je.gen(function*(){let M=yield*Be.Service,r=yield*io.Service,u=yield*Mt.Service,g=yield*ae.make(()=>Je.gen(function*(){var ue=[];try{let F=Mn(ue,t.time("state"));let Z=yield*M.get();let he=yield*Je.promise(()=>ka.get());let ge=Qo(he,w);let Y={};let N=new Map;let q={};let te={};let ce=new Map;let Q={};let ie={auth:n(Oe=>r.get(Oe).pipe(Je.orDie),"auth"),config:n(()=>M.get(),"config")};t.info("init");function me(Oe,ye){let O=Y[Oe];if(O){Y[Oe]=Ao(O,ye);return}let W=ge[Oe];W&&(Y[Oe]=Ao(W,ye))}n(me,"mergeProvider");let le=yield*u.list();let we=Object.entries(Z.provider??{});let be=new Set(Z.disabled_providers??[]);let fe=Z.enabled_providers?new Set(Z.enabled_providers):null;function J(Oe){return!(fe&&!fe.has(Oe)||be.has(Oe))}n(J,"isProviderAllowed");for(let[Oe,ye]of we){let O=ge[Oe],W={id:rt.make(Oe),name:ye.name??O?.name??Oe,env:ye.env??O?.env??[],options:Ao(O?.options??{},ye.options??{}),source:"config",models:O?.models??{}};for(let[K,B]of Object.entries(ye.models??{})){let re=W.models[B.id??K],ve=Ct(()=>B.name?B.name:B.id&&B.id!==K?K:re?.name??K),$={id:Et.make(K),api:{id:B.id??re?.api.id??K,npm:B.provider?.npm??ye.npm??re?.api.npm??he[Oe]?.npm??"@ai-sdk/openai-compatible",url:B.provider?.api??ye?.api??re?.api.url??he[Oe]?.api},status:B.status??re?.status??"active",name:ve,providerID:rt.make(Oe),capabilities:{temperature:B.temperature??re?.capabilities.temperature??!1,reasoning:B.reasoning??re?.capabilities.reasoning??!1,attachment:B.attachment??re?.capabilities.attachment??!1,toolcall:B.tool_call??re?.capabilities.toolcall??!0,input:{text:B.modalities?.input?.includes("text")??re?.capabilities.input.text??!0,audio:B.modalities?.input?.includes("audio")??re?.capabilities.input.audio??!1,image:B.modalities?.input?.includes("image")??re?.capabilities.input.image??!1,video:B.modalities?.input?.includes("video")??re?.capabilities.input.video??!1,pdf:B.modalities?.input?.includes("pdf")??re?.capabilities.input.pdf??!1},output:{text:B.modalities?.output?.includes("text")??re?.capabilities.output.text??!0,audio:B.modalities?.output?.includes("audio")??re?.capabilities.output.audio??!1,image:B.modalities?.output?.includes("image")??re?.capabilities.output.image??!1,video:B.modalities?.output?.includes("video")??re?.capabilities.output.video??!1,pdf:B.modalities?.output?.includes("pdf")??re?.capabilities.output.pdf??!1},interleaved:B.interleaved??!1},cost:{input:B?.cost?.input??re?.cost?.input??0,output:B?.cost?.output??re?.cost?.output??0,cache:{read:B?.cost?.cache_read??re?.cost?.cache.read??0,write:B?.cost?.cache_write??re?.cost?.cache.write??0}},options:Ao(re?.options??{},B.options??{}),limit:{context:B.limit?.context??re?.limit?.context??0,input:B.limit?.input??re?.limit?.input,output:B.limit?.output??re?.limit?.output??0},headers:Ao(re?.headers??{},B.headers??{}),family:B.family??re?.family??"",release_date:B.release_date??re?.release_date??"",variants:{}},_e=Ao(jt.variants($),B.variants??{});$.variants=Qo(ic(_e,De=>!De.disabled),De=>sc(De,["disabled"])),W.models[K]=$}ge[Oe]=W}let X=mt.all();for(let[Oe,ye]of Object.entries(ge)){let O=rt.make(Oe);if(be.has(O))continue;let W=ye.env.map(K=>X[K]).find(Boolean);W&&me(O,{source:"env",key:ye.env.length===1?W:void 0})}let xe=yield*r.all().pipe(Je.orDie);for(let[Oe,ye]of Object.entries(xe)){let O=rt.make(Oe);be.has(O)||ye.type==="api"&&me(O,{source:"api",key:ye.key})}for(let Oe of le){if(!Oe.auth)continue;let ye=rt.make(Oe.auth.provider);if(be.has(ye)||!(yield*r.get(ye).pipe(Je.orDie))||!Oe.auth.loader)continue;let K=(yield*Je.promise(()=>Oe.auth.loader(()=>Je.runPromise(r.get(ye).pipe(Je.orDie)),ge[Oe.auth.provider])))??{},B=Y[ye]?{options:K}:{source:"custom",options:K};me(ye,B)}for(let[Oe,ye]of Object.entries(a(ie))){let O=rt.make(Oe);if(be.has(O))continue;let W=ge[O];if(!W){t.error("Provider does not exist in model list "+O);continue}let K=yield*ye(W);if(K&&(K.autoload||Y[O])){K.getModel&&(q[O]=K.getModel),K.vars&&(te[O]=K.vars),K.discoverModels&&(Q[O]=K.discoverModels);let B=K.options??{},re=Y[O]?{options:B}:{source:"custom",options:B};me(O,re)}}for(let[Oe,ye]of we){let O=rt.make(Oe),W={source:"config"};ye.env&&(W.env=ye.env),ye.name&&(W.name=ye.name),ye.options&&(W.options=ye.options),me(O,W)}let de=rt.make("gitlab");Q[de]&&Y[de]&&J(de)&&(yield*Je.promise(async()=>{try{let Oe=await Q[de]();for(let[ye,O]of Object.entries(Oe))Y[de].models[ye]||(Y[de].models[ye]=O)}catch(Oe){t.warn("state discovery error",{id:"gitlab",error:Oe})}}));for(let Oe of le){let ye=Oe.provider,O=ye?.models;if(!ye||!O)continue;let W=rt.make(ye.id);if(be.has(W))continue;let K=Y[W];if(!K)continue;let B=yield*r.get(W).pipe(Je.orDie);K.models=yield*Je.promise(async()=>{let re=await O(K,{auth:B});return Object.fromEntries(Object.entries(re).map(([ve,$])=>[ve,{...$,id:Et.make(ve),providerID:W}]))})}for(let[Oe,ye]of Object.entries(Y)){let O=rt.make(Oe);if(!J(O)){delete Y[O];continue}let W=Z.provider?.[O];for(let[K,B]of Object.entries(ye.models)){B.api.id=B.api.id??B.id??K,(K==="gpt-5-chat-latest"||O===rt.openrouter&&K==="openai/gpt-5-chat")&&delete ye.models[K],B.status==="alpha"&&!ze.OPENCODE_ENABLE_EXPERIMENTAL_MODELS&&delete ye.models[K],B.status==="deprecated"&&delete ye.models[K],(W?.blacklist&&W.blacklist.includes(K)||W?.whitelist&&!W.whitelist.includes(K))&&delete ye.models[K],B.variants=Qo(jt.variants(B),ve=>ve);let re=W?.models?.[K]?.variants;if(re&&B.variants){let ve=Ao(B.variants,re);B.variants=Qo(ic(ve,$=>!$.disabled),$=>sc($,["disabled"]))}}if(Object.keys(ye.models).length===0){delete Y[O];continue}t.info("found",{providerID:O})}return{models:N,providers:Y,sdk:ce,modelLoaders:q,varsLoaders:te}}catch(Qe){var dt=Qe,xt=!0}finally{jn(ue,dt,xt)}})),L=Je.fn("Provider.list")(()=>ae.use(g,F=>F.providers));async function j(F,Z){try{var he=[];try{let q=Mn(he,t.time("getSDK",{providerID:F.providerID}));let te=Z.providers[F.providerID];let ce={...te.options};F.providerID==="google-vertex"&&!F.api.npm.includes("@ai-sdk/openai-compatible")&&delete ce.fetch;F.api.npm.includes("@ai-sdk/openai-compatible")&&ce.includeUsage!==!1&&(ce.includeUsage=!0);let Q=Ct(()=>{let de=typeof ce.baseURL=="string"&&ce.baseURL!==""?ce.baseURL:F.api.url;if(!de)return;let ue=Z.varsLoaders[F.providerID];if(ue){let Qe=ue(ce);for(let[dt,xt]of Object.entries(Qe)){let Oe="${"+dt+"}";de=de.replaceAll(Oe,xt)}}return de=de.replace(/\$\{([^}]+)\}/g,(Qe,dt)=>mt.get(String(dt))??Qe),de});Q!==void 0&&(ce.baseURL=Q);ce.apiKey===void 0&&te.key&&(ce.apiKey=te.key);F.headers&&(ce.headers={...ce.headers,...F.headers});let ie=Kr.fast(JSON.stringify({providerID:F.providerID,npm:F.api.npm,options:ce}));let me=Z.sdk.get(ie);if(me)return me;let le=ce.fetch;let we=ce.chunkTimeout??(F.providerID==="openai"?3e5:void 0);delete ce.chunkTimeout;ce.fetch=async(de,ue)=>{let Qe=le??fetch,dt=ue??{},xt=typeof we=="number"&&we>0?new AbortController:void 0,Oe=[];dt.signal&&Oe.push(dt.signal),xt&&Oe.push(xt.signal),ce.timeout!==void 0&&ce.timeout!==null&&ce.timeout!==!1&&Oe.push(AbortSignal.timeout(ce.timeout));let ye=Oe.length===0?null:Oe.length===1?Oe[0]:AbortSignal.any(Oe);ye&&(dt.signal=ye);let O=!1;if(F.api.npm==="@ai-sdk/openai"&&dt.body&&dt.method==="POST"){let B=JSON.parse(dt.body);if(O=B.stream===!0,!(F.providerID.includes("azure")&&B.store===!0)&&Array.isArray(B.input)){for(let $ of B.input)"id"in $&&delete $.id;dt.body=JSON.stringify(B)}}let W=await Qe(de,{...dt,timeout:!1}),K=xt?o(W,we,xt,O):W;return O?Li.wrap(K):K};let be=m[F.api.npm];if(be){t.info("using bundled provider",{providerID:F.providerID,pkg:F.api.npm});let de=be({name:F.providerID,...ce});return Z.sdk.set(ie,de),de}let fe;if(F.api.npm.startsWith("file://"))t.info("loading local provider",{pkg:F.api.npm}),fe=F.api.npm;else{let de=await Ho.add(F.api.npm);if(!de.entrypoint)throw new Error(`Package ${F.api.npm} has no import entrypoint`);fe=de.entrypoint}let J=await import(fe);let X=J[Object.keys(J).find(de=>de.startsWith("create"))];let xe=X({name:F.providerID,...ce});Z.sdk.set(ie,xe);return xe}catch(ge){var Y=ge,N=!0}finally{jn(he,Y,N)}}catch(q){throw new k.InitError({providerID:F.providerID},{cause:q})}}n(j,"resolveSDK");let z=Je.fn("Provider.getProvider")(F=>ae.use(g,Z=>Z.providers[F])),V=Je.fn("Provider.getModel")(function*(F,Z){let he=yield*ae.get(g),ge=he.providers[F];if(!ge){let N=Object.keys(he.providers),q=rc.go(F,N,{limit:3,threshold:-1e4});throw new k.ModelNotFoundError({providerID:F,modelID:Z,suggestions:q.map(te=>te.target)})}let Y=ge.models[Z];if(!Y){let N=Object.keys(ge.models),q=rc.go(Z,N,{limit:3,threshold:-1e4});throw new k.ModelNotFoundError({providerID:F,modelID:Z,suggestions:q.map(te=>te.target)})}return Y}),H=Je.fn("Provider.getLanguage")(function*(F){let Z=yield*ae.get(g),he=`${F.providerID}/${F.id}`;return Z.models.has(he)?Z.models.get(he):yield*Je.promise(async()=>{let ge=i();if(ge){let q=ac({name:F.providerID,apiKey:"test-key",baseURL:ge}).chatModel(F.api.id);return Z.models.set(he,q),q}let Y=Z.providers[F.providerID],N=await j(F,Z);try{let q=Z.modelLoaders[F.providerID]?await Z.modelLoaders[F.providerID](N,F.api.id,{...Y.options,...F.options}):N.languageModel(F.api.id);return Z.models.set(he,q),q}catch(q){throw q instanceof om?new k.ModelNotFoundError({modelID:F.id,providerID:F.providerID},{cause:q}):q}})}),G=Je.fn("Provider.closest")(function*(F,Z){let ge=(yield*ae.get(g)).providers[F];if(ge){for(let Y of Z)for(let N of Object.keys(ge.models))if(N.includes(Y))return{providerID:F,modelID:N}}}),ee=Je.fn("Provider.getSmallModel")(function*(F){let Z=yield*M.get();if(Z.small_model){let N=_(Z.small_model);return yield*V(N.providerID,N.modelID)}let ge=(yield*ae.get(g)).providers[F];if(!ge)return;let Y=["claude-haiku-4-5","claude-haiku-4.5","3-5-haiku","3.5-haiku","gemini-3-flash","gemini-2.5-flash","gpt-5-nano"];F.startsWith("opencode")&&(Y=["gpt-5-nano"]),F.startsWith("github-copilot")&&(Y=["gpt-5-mini","claude-haiku-4.5",...Y]);for(let N of Y)if(F===rt.amazonBedrock){let q=["global.","us.","eu."],te=Object.keys(ge.models).filter(me=>me.includes(N)),ce=te.find(me=>me.startsWith("global."));if(ce)return yield*V(F,Et.make(ce));let Q=ge.options?.region;if(Q){let me=Q.split("-")[0];if(me==="us"||me==="eu"){let le=te.find(we=>we.startsWith(`${me}.`));if(le)return yield*V(F,Et.make(le))}}let ie=te.find(me=>!q.some(le=>me.startsWith(le)));if(ie)return yield*V(F,Et.make(ie))}else for(let q of Object.keys(ge.models))if(q.includes(N))return yield*V(F,Et.make(q))}),se=Je.fn("Provider.defaultModel")(function*(){let F=yield*M.get();if(F.model)return _(F.model);let Z=yield*ae.get(g),he=yield*Je.promise(()=>Te.readJson(rm.join(wt.Path.state,"model.json")).then(N=>Array.isArray(N.recent)?N.recent:[]).catch(()=>[]));for(let N of he){let q=Z.providers[N.providerID];if(q&&q.models[N.modelID])return{providerID:N.providerID,modelID:N.modelID}}let ge=Object.values(Z.providers).find(N=>!F.provider||Object.keys(F.provider).includes(N.id));if(!ge)throw new Error("no providers found");let[Y]=R(Object.values(ge.models));if(!Y)throw new Error("no models found");return{providerID:ge.id,modelID:Y.id}});return s.of({list:L,getProvider:z,getModel:V,getLanguage:H,closest:G,getSmallModel:ee,defaultModel:se})}));k.defaultLayer=Cr.suspend(()=>f.pipe(Cr.provide(Be.defaultLayer),Cr.provide(io.defaultLayer),Cr.provide(Mt.defaultLayer)));let{runPromise:I}=qe(s,k.defaultLayer);async function h(){return I(M=>M.list())}k.list=h,n(h,"list");async function S(M){return I(r=>r.getProvider(M))}k.getProvider=S,n(S,"getProvider");async function C(M,r){return I(u=>u.getModel(M,r))}k.getModel=C,n(C,"getModel");async function l(M){return I(r=>r.getLanguage(M))}k.getLanguage=l,n(l,"getLanguage");async function P(M,r){return I(u=>u.closest(M,r))}k.closest=P,n(P,"closest");async function y(M){return I(r=>r.getSmallModel(M))}k.getSmallModel=y,n(y,"getSmallModel");async function D(){return I(M=>M.defaultModel())}k.defaultModel=D,n(D,"defaultModel");let T=["gpt-5","claude-sonnet-4","big-pickle","gemini-3-pro"];function R(M){return nm(M,[r=>T.findIndex(u=>r.id.includes(u)),"desc"],[r=>r.id.includes("latest")?0:1,"asc"],[r=>r.id,"desc"])}k.sort=R,n(R,"sort");function _(M){let[r,...u]=M.split("/");return{providerID:rt.make(r),modelID:Et.make(u.join("/"))}}k.parseModel=_,n(_,"parseModel"),k.ModelNotFoundError=tt.create("ProviderModelNotFoundError",Ie.object({providerID:rt.zod,modelID:Et.zod,suggestions:Ie.array(Ie.string()).optional()})),k.InitError=tt.create("ProviderInitError",Ie.object({providerID:rt.zod}))})(Gt||={});import{generateObject as qm,streamObject as $m}from"ai";var lc=`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.
135
135
 
136
136
  **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.
137
137
 
@@ -294,12 +294,12 @@ Your output must be:
294
294
  "look at @config.json" \u2192 Config review
295
295
  "@App.tsx add dark mode toggle" \u2192 Dark mode toggle in App
296
296
  </examples>
297
- `;import{Deferred as jo,Effect as Xn,Layer as fc,Schema as Ar,ServiceMap as Rm}from"effect";import xs from"os";import Kt from"zod";import{Schema as _m}from"effect";var Mo=class extends Yr()("PermissionID",_m.String){static{n(this,"PermissionID")}static make(e){return this.makeUnsafe(e)}static ascending(e){return this.makeUnsafe(vt.ascending("permission",e))}static zod=vt.schema("permission")};var Ge;(x=>{let t=Ae.create({service:"permission"});x.Action=Kt.enum(["allow","deny","ask"]).meta({ref:"PermissionAction"}),x.Rule=Kt.object({permission:Kt.string(),pattern:Kt.string(),action:x.Action}).meta({ref:"PermissionRule"}),x.Ruleset=x.Rule.array().meta({ref:"PermissionRuleset"}),x.Request=Kt.object({id:Mo.zod,sessionID:Ee.zod,permission:Kt.string(),patterns:Kt.string().array(),metadata:Kt.record(Kt.string(),Kt.any()),always:Kt.string().array(),tool:Kt.object({messageID:Ve.zod,callID:Kt.string()}).optional()}).meta({ref:"PermissionRequest"}),x.Reply=Kt.enum(["once","always","reject"]),x.Approval=Kt.object({projectID:wr.zod,patterns:Kt.string().array()}),x.Event={Asked:ht.define("permission.asked",x.Request),Replied:ht.define("permission.replied",Kt.object({sessionID:Ee.zod,requestID:Mo.zod,reply:x.Reply}))};class b extends Ar.TaggedErrorClass()("PermissionRejectedError",{}){static{n(this,"RejectedError")}get message(){return"The user rejected permission to use this specific tool call."}}x.RejectedError=b;class s extends Ar.TaggedErrorClass()("PermissionCorrectedError",{feedback:Ar.String}){static{n(this,"CorrectedError")}get message(){return`The user rejected permission to use this specific tool call with the following feedback: ${this.feedback}`}}x.CorrectedError=s;class p extends Ar.TaggedErrorClass()("PermissionDeniedError",{ruleset:Ar.Any}){static{n(this,"DeniedError")}get message(){return`The user has specified a rule which prevents you from using this specific tool call. Here are some of the relevant rules ${JSON.stringify(this.ruleset)}`}}x.DeniedError=p,x.AskInput=x.Request.partial({id:!0}).extend({ruleset:x.Ruleset}),x.ReplyInput=Kt.object({requestID:Mo.zod,reply:x.Reply,message:Kt.string().optional()});function v(k,M,...r){return t.info("evaluate",{permission:k,pattern:M,ruleset:r.flat()}),Xr(k,M,...r)}x.evaluate=v,n(v,"evaluate");class I extends Rm.Service()("@opencode/Permission"){static{n(this,"Service")}}x.Service=I,x.layer=fc.effect(I,Xn.gen(function*(){let k=yield*Me.Service,M=yield*ae.make(Xn.fn("Permission.state")(function*(L){let j=Ft.use(V=>V.select().from(qs).where((0,ke.eq)(qs.project_id,L.project.id)).get()),z={pending:new Map,approved:j?.data??[]};return yield*Xn.addFinalizer(()=>Xn.gen(function*(){for(let V of z.pending.values())yield*jo.fail(V.deferred,new b);z.pending.clear()})),z})),r=Xn.fn("Permission.ask")(function*(L){let{approved:j,pending:z}=yield*ae.get(M),{ruleset:V,...H}=L,G=!1;for(let Z of H.patterns){let he=v(H.permission,Z,V,j);if(t.info("evaluated",{permission:H.permission,pattern:Z,action:he}),he.action==="deny")return yield*new p({ruleset:V.filter(ge=>To.match(H.permission,ge.permission))});he.action!=="allow"&&(G=!0)}if(!G)return;let ee=H.id??Mo.ascending(),se={id:ee,...H};t.info("asking",{id:ee,permission:se.permission,patterns:se.patterns});let F=yield*jo.make();return z.set(ee,{info:se,deferred:F}),yield*k.publish(x.Event.Asked,se),yield*Xn.ensuring(jo.await(F),Xn.sync(()=>{z.delete(ee)}))}),u=Xn.fn("Permission.reply")(function*(L){let{approved:j,pending:z}=yield*ae.get(M),V=z.get(L.requestID);if(V){if(z.delete(L.requestID),yield*k.publish(x.Event.Replied,{sessionID:V.info.sessionID,requestID:V.info.id,reply:L.reply}),L.reply==="reject"){yield*jo.fail(V.deferred,L.message?new s({feedback:L.message}):new b);for(let[H,G]of z.entries())G.info.sessionID===V.info.sessionID&&(z.delete(H),yield*k.publish(x.Event.Replied,{sessionID:G.info.sessionID,requestID:G.info.id,reply:"reject"}),yield*jo.fail(G.deferred,new b));return}if(yield*jo.succeed(V.deferred,void 0),L.reply!=="once"){for(let H of V.info.always)j.push({permission:V.info.permission,pattern:H,action:"allow"});for(let[H,G]of z.entries())G.info.sessionID!==V.info.sessionID||!G.info.patterns.every(se=>v(G.info.permission,se,j).action==="allow")||(z.delete(H),yield*k.publish(x.Event.Replied,{sessionID:G.info.sessionID,requestID:G.info.id,reply:"always"}),yield*jo.succeed(G.deferred,void 0))}}}),g=Xn.fn("Permission.list")(function*(){let L=(yield*ae.get(M)).pending;return Array.from(L.values(),j=>j.info)});return I.of({ask:r,reply:u,list:g})}));function S(k){return k.startsWith("~/")?xs.homedir()+k.slice(1):k==="~"?xs.homedir():k.startsWith("$HOME/")?xs.homedir()+k.slice(5):k.startsWith("$HOME")?xs.homedir()+k.slice(5):k}n(S,"expand");function C(k){let M=[];for(let[r,u]of Object.entries(k)){if(typeof u=="string"){M.push({permission:r,action:u,pattern:"*"});continue}M.push(...Object.entries(u).map(([g,L])=>({permission:r,pattern:S(g),action:L})))}return M}x.fromConfig=C,n(C,"fromConfig");function l(...k){return k.flat()}x.merge=l,n(l,"merge");let P=["edit","write","apply_patch","multiedit"];function y(k,M){let r=new Set;for(let u of k){let g=P.includes(u)?"edit":u,L=M.findLast(j=>To.match(g,j.permission));L&&L.pattern==="*"&&L.action==="deny"&&r.add(u)}return r}x.disabled=y,n(y,"disabled"),x.defaultLayer=x.layer.pipe(fc.provide(Me.layer)),{runPromise:x.runPromise}=qe(I,x.defaultLayer);async function R(k){return(0,x.runPromise)(M=>M.ask(k))}x.ask=R,n(R,"ask");async function _(k){return(0,x.runPromise)(M=>M.reply(k))}x.reply=_,n(_,"reply");async function E(){return(0,x.runPromise)(k=>k.list())}x.list=E,n(E,"list")})(Ge||={});import{mergeDeep as $m,pipe as Wm,sortBy as Bm,values as Gm}from"remeda";import tr from"path";import Nm from"os";import Mr from"path";import{pathToFileURL as Um}from"url";import vn from"zod";import{Effect as Ht,Layer as jr,ServiceMap as zm}from"effect";import{NodePath as Cm}from"@effect/platform-node";import{Effect as on,Layer as Is,Path as Am,Schema as er,ServiceMap as Mm}from"effect";import{FetchHttpClient as jm,HttpClient as mc,HttpClientRequest as Ni,HttpClientResponse as Lm}from"effect/unstable/http";var ks;(d=>{class o extends er.Class("IndexSkill")({name:er.String,files:er.Array(er.String)}){static{n(this,"IndexSkill")}}class i extends er.Class("Index")({skills:er.Array(o)}){static{n(this,"Index")}}class m extends Mm.Service()("@opencode/SkillDiscovery"){static{n(this,"Service")}}d.Service=m,d.layer=Is.effect(m,on.gen(function*(){let b=Ae.create({service:"skill-discovery"}),s=yield*st.Service,p=yield*Am.Path,w=mc.filterStatusOk(Jr(yield*mc.HttpClient)),f=p.join(wt.Path.cache,"skills"),v=on.fn("Discovery.download")(function*(h,S){return(yield*s.exists(S).pipe(on.orDie))?!0:yield*Ni.get(h).pipe(w.execute,on.flatMap(C=>C.arrayBuffer),on.flatMap(C=>s.writeWithDirs(S,new Uint8Array(C))),on.as(!0),on.catch(C=>on.sync(()=>(b.error("failed to download",{url:h,err:C}),!1))))}),I=on.fn("Discovery.pull")(function*(h){let S=h.endsWith("/")?h:`${h}/`,C=new URL("index.json",S).href,l=S.slice(0,-1);b.info("fetching index",{url:C});let P=yield*Ni.get(C).pipe(Ni.acceptJson,w.execute,on.flatMap(Lm.schemaBodyJson(i)),on.catch(T=>on.sync(()=>(b.error("failed to fetch index",{url:C,err:T}),null))));if(!P)return[];let y=P.skills.filter(T=>T.files.includes("SKILL.md")?!0:(b.warn("skill entry missing SKILL.md",{url:C,skill:T.name}),!1));return(yield*on.forEach(y,T=>on.gen(function*(){let R=p.join(f,T.name);yield*on.forEach(T.files,E=>v(new URL(E,`${l}/${T.name}/`).href,p.join(R,E)),{concurrency:8});let _=p.join(R,"SKILL.md");return(yield*s.exists(_).pipe(on.orDie))?R:null}),{concurrency:4})).filter(T=>T!==null)});return m.of({pull:I})})),d.defaultLayer=d.layer.pipe(Is.provide(jm.layer),Is.provide(st.defaultLayer),Is.provide(Cm.layer))})(ks||={});var un;(y=>{let t=Ae.create({service:"skill"}),e=[".claude",".agents"],o="skills/**/SKILL.md",i="{skill,skills}/**/SKILL.md",m="**/SKILL.md";y.Info=vn.object({name:vn.string(),description:vn.string(),location:vn.string(),content:vn.string()}),y.InvalidError=tt.create("SkillInvalidError",vn.object({path:vn.string(),message:vn.string().optional(),issues:vn.custom().optional()})),y.NameMismatchError=tt.create("SkillNameMismatchError",vn.object({path:vn.string(),expected:vn.string(),actual:vn.string()}));let b=Ht.fnUntraced(function*(D,T,R){let _=yield*Ht.tryPromise({try:n(()=>Vo.parse(T),"try"),catch:n(x=>x,"catch")}).pipe(Ht.catch(Ht.fnUntraced(function*(x){let k=Vo.FrontmatterError.isInstance(x)?x.data.message:`Failed to parse skill ${T}`,{Session:M}=yield*Ht.promise(()=>import("./session-5BXSPMPJ.js"));yield*R.publish(M.Event.Error,{error:new tt.Unknown({message:k}).toObject()}),t.error("failed to load skill",{skill:T,err:x})})));if(!_)return;let E=y.Info.pick({name:!0,description:!0}).safeParse(_.data);E.success&&(D.skills[E.data.name]&&t.warn("duplicate skill name",{name:E.data.name,existing:D.skills[E.data.name].location,duplicate:T}),D.dirs.add(Mr.dirname(T)),D.skills[E.data.name]={name:E.data.name,description:E.data.description,location:T,content:_.content})}),s=Ht.fnUntraced(function*(D,T,R,_,E){let x=yield*Ht.tryPromise({try:n(()=>Eo.scan(_,{cwd:R,absolute:!0,include:"file",symlink:!0,dot:E?.dot}),"try"),catch:n(k=>k,"catch")}).pipe(Ht.catch(k=>E?.scope?(t.error(`failed to scan ${E.scope} skills`,{dir:R,error:k}),Ht.succeed([])):Ht.die(k)));yield*Ht.forEach(x,k=>b(D,k,T),{concurrency:"unbounded",discard:!0})}),p=Ht.fnUntraced(function*(D,T,R,_,E,x,k){if(!ze.OPENCODE_DISABLE_EXTERNAL_SKILLS){for(let g of e){let L=Mr.join(wt.Path.home,g);(yield*E.isDir(L))&&(yield*s(D,_,L,o,{dot:!0,scope:"global"}))}let u=yield*E.up({targets:e,start:x,stop:k}).pipe(Ht.catch(()=>Ht.succeed([])));for(let g of u)yield*s(D,_,g,o,{dot:!0,scope:"project"})}let M=yield*T.directories();for(let u of M)yield*s(D,_,u,i);let r=yield*T.get();for(let u of r.skills?.paths??[]){let g=u.startsWith("~/")?Mr.join(Nm.homedir(),u.slice(2)):u,L=Mr.isAbsolute(g)?g:Mr.join(x,g);if(!(yield*E.isDir(L))){t.warn("skill path not found",{path:L});continue}yield*s(D,_,L,m)}for(let u of r.skills?.urls??[]){let g=yield*R.pull(u);for(let L of g)D.dirs.add(L),yield*s(D,_,L,m)}t.info("init",{count:Object.keys(D.skills).length})});class w extends zm.Service()("@opencode/Skill"){static{n(this,"Service")}}y.Service=w,y.layer=jr.effect(w,Ht.gen(function*(){let D=yield*ks.Service,T=yield*Be.Service,R=yield*Me.Service,_=yield*st.Service,E=yield*ae.make(Ht.fn("Skill.state")(function*(u){let g={skills:{},dirs:new Set};return yield*p(g,T,D,R,_,u.directory,u.worktree),g})),x=Ht.fn("Skill.get")(function*(u){return(yield*ae.get(E)).skills[u]}),k=Ht.fn("Skill.all")(function*(){let u=yield*ae.get(E);return Object.values(u.skills)}),M=Ht.fn("Skill.dirs")(function*(){let u=yield*ae.get(E);return Array.from(u.dirs)}),r=Ht.fn("Skill.available")(function*(u){let g=yield*ae.get(E),L=Object.values(g.skills).toSorted((j,z)=>j.name.localeCompare(z.name));return u?L.filter(j=>Ge.evaluate("skill",j.name,u.permission).action!=="deny"):L});return w.of({get:x,all:k,dirs:M,available:r})})),y.defaultLayer=y.layer.pipe(jr.provide(ks.defaultLayer),jr.provide(Be.defaultLayer),jr.provide(Me.layer),jr.provide(st.defaultLayer));function I(D,T){return D.length===0?"No skills are currently available.":T.verbose?["<available_skills>",...D.flatMap(R=>[" <skill>",` <name>${R.name}</name>`,` <description>${R.description}</description>`,` <location>${Um(R.location).href}</location>`," </skill>"]),"</available_skills>"].join(`
297
+ `;import{Deferred as jo,Effect as Xn,Layer as fc,Schema as Ar,ServiceMap as Cm}from"effect";import xs from"os";import Kt from"zod";import{Schema as Rm}from"effect";var Mo=class extends Yr()("PermissionID",Rm.String){static{n(this,"PermissionID")}static make(e){return this.makeUnsafe(e)}static ascending(e){return this.makeUnsafe(vt.ascending("permission",e))}static zod=vt.schema("permission")};var Ge;(x=>{let t=Ae.create({service:"permission"});x.Action=Kt.enum(["allow","deny","ask"]).meta({ref:"PermissionAction"}),x.Rule=Kt.object({permission:Kt.string(),pattern:Kt.string(),action:x.Action}).meta({ref:"PermissionRule"}),x.Ruleset=x.Rule.array().meta({ref:"PermissionRuleset"}),x.Request=Kt.object({id:Mo.zod,sessionID:Ee.zod,permission:Kt.string(),patterns:Kt.string().array(),metadata:Kt.record(Kt.string(),Kt.any()),always:Kt.string().array(),tool:Kt.object({messageID:Ve.zod,callID:Kt.string()}).optional()}).meta({ref:"PermissionRequest"}),x.Reply=Kt.enum(["once","always","reject"]),x.Approval=Kt.object({projectID:wr.zod,patterns:Kt.string().array()}),x.Event={Asked:ht.define("permission.asked",x.Request),Replied:ht.define("permission.replied",Kt.object({sessionID:Ee.zod,requestID:Mo.zod,reply:x.Reply}))};class b extends Ar.TaggedErrorClass()("PermissionRejectedError",{}){static{n(this,"RejectedError")}get message(){return"The user rejected permission to use this specific tool call."}}x.RejectedError=b;class s extends Ar.TaggedErrorClass()("PermissionCorrectedError",{feedback:Ar.String}){static{n(this,"CorrectedError")}get message(){return`The user rejected permission to use this specific tool call with the following feedback: ${this.feedback}`}}x.CorrectedError=s;class p extends Ar.TaggedErrorClass()("PermissionDeniedError",{ruleset:Ar.Any}){static{n(this,"DeniedError")}get message(){return`The user has specified a rule which prevents you from using this specific tool call. Here are some of the relevant rules ${JSON.stringify(this.ruleset)}`}}x.DeniedError=p,x.AskInput=x.Request.partial({id:!0}).extend({ruleset:x.Ruleset}),x.ReplyInput=Kt.object({requestID:Mo.zod,reply:x.Reply,message:Kt.string().optional()});function v(k,M,...r){return t.info("evaluate",{permission:k,pattern:M,ruleset:r.flat()}),Xr(k,M,...r)}x.evaluate=v,n(v,"evaluate");class I extends Cm.Service()("@opencode/Permission"){static{n(this,"Service")}}x.Service=I,x.layer=fc.effect(I,Xn.gen(function*(){let k=yield*Me.Service,M=yield*ae.make(Xn.fn("Permission.state")(function*(L){let j=Ft.use(V=>V.select().from(qs).where((0,ke.eq)(qs.project_id,L.project.id)).get()),z={pending:new Map,approved:j?.data??[]};return yield*Xn.addFinalizer(()=>Xn.gen(function*(){for(let V of z.pending.values())yield*jo.fail(V.deferred,new b);z.pending.clear()})),z})),r=Xn.fn("Permission.ask")(function*(L){let{approved:j,pending:z}=yield*ae.get(M),{ruleset:V,...H}=L,G=!1;for(let Z of H.patterns){let he=v(H.permission,Z,V,j);if(t.info("evaluated",{permission:H.permission,pattern:Z,action:he}),he.action==="deny")return yield*new p({ruleset:V.filter(ge=>To.match(H.permission,ge.permission))});he.action!=="allow"&&(G=!0)}if(!G)return;let ee=H.id??Mo.ascending(),se={id:ee,...H};t.info("asking",{id:ee,permission:se.permission,patterns:se.patterns});let F=yield*jo.make();return z.set(ee,{info:se,deferred:F}),yield*k.publish(x.Event.Asked,se),yield*Xn.ensuring(jo.await(F),Xn.sync(()=>{z.delete(ee)}))}),u=Xn.fn("Permission.reply")(function*(L){let{approved:j,pending:z}=yield*ae.get(M),V=z.get(L.requestID);if(V){if(z.delete(L.requestID),yield*k.publish(x.Event.Replied,{sessionID:V.info.sessionID,requestID:V.info.id,reply:L.reply}),L.reply==="reject"){yield*jo.fail(V.deferred,L.message?new s({feedback:L.message}):new b);for(let[H,G]of z.entries())G.info.sessionID===V.info.sessionID&&(z.delete(H),yield*k.publish(x.Event.Replied,{sessionID:G.info.sessionID,requestID:G.info.id,reply:"reject"}),yield*jo.fail(G.deferred,new b));return}if(yield*jo.succeed(V.deferred,void 0),L.reply!=="once"){for(let H of V.info.always)j.push({permission:V.info.permission,pattern:H,action:"allow"});for(let[H,G]of z.entries())G.info.sessionID!==V.info.sessionID||!G.info.patterns.every(se=>v(G.info.permission,se,j).action==="allow")||(z.delete(H),yield*k.publish(x.Event.Replied,{sessionID:G.info.sessionID,requestID:G.info.id,reply:"always"}),yield*jo.succeed(G.deferred,void 0))}}}),g=Xn.fn("Permission.list")(function*(){let L=(yield*ae.get(M)).pending;return Array.from(L.values(),j=>j.info)});return I.of({ask:r,reply:u,list:g})}));function S(k){return k.startsWith("~/")?xs.homedir()+k.slice(1):k==="~"?xs.homedir():k.startsWith("$HOME/")?xs.homedir()+k.slice(5):k.startsWith("$HOME")?xs.homedir()+k.slice(5):k}n(S,"expand");function C(k){let M=[];for(let[r,u]of Object.entries(k)){if(typeof u=="string"){M.push({permission:r,action:u,pattern:"*"});continue}M.push(...Object.entries(u).map(([g,L])=>({permission:r,pattern:S(g),action:L})))}return M}x.fromConfig=C,n(C,"fromConfig");function l(...k){return k.flat()}x.merge=l,n(l,"merge");let P=["edit","write","apply_patch","multiedit"];function y(k,M){let r=new Set;for(let u of k){let g=P.includes(u)?"edit":u,L=M.findLast(j=>To.match(g,j.permission));L&&L.pattern==="*"&&L.action==="deny"&&r.add(u)}return r}x.disabled=y,n(y,"disabled"),x.defaultLayer=x.layer.pipe(fc.provide(Me.layer)),{runPromise:x.runPromise}=qe(I,x.defaultLayer);async function R(k){return(0,x.runPromise)(M=>M.ask(k))}x.ask=R,n(R,"ask");async function _(k){return(0,x.runPromise)(M=>M.reply(k))}x.reply=_,n(_,"reply");async function E(){return(0,x.runPromise)(k=>k.list())}x.list=E,n(E,"list")})(Ge||={});import{mergeDeep as Wm,pipe as Bm,sortBy as Gm,values as Hm}from"remeda";import tr from"path";import Um from"os";import Mr from"path";import{pathToFileURL as zm}from"url";import vn from"zod";import{Effect as Ht,Layer as jr,ServiceMap as Fm}from"effect";import{NodePath as Am}from"@effect/platform-node";import{Effect as on,Layer as Is,Path as Mm,Schema as er,ServiceMap as jm}from"effect";import{FetchHttpClient as Lm,HttpClient as mc,HttpClientRequest as Ni,HttpClientResponse as Nm}from"effect/unstable/http";var ks;(d=>{class o extends er.Class("IndexSkill")({name:er.String,files:er.Array(er.String)}){static{n(this,"IndexSkill")}}class i extends er.Class("Index")({skills:er.Array(o)}){static{n(this,"Index")}}class m extends jm.Service()("@opencode/SkillDiscovery"){static{n(this,"Service")}}d.Service=m,d.layer=Is.effect(m,on.gen(function*(){let b=Ae.create({service:"skill-discovery"}),s=yield*st.Service,p=yield*Mm.Path,w=mc.filterStatusOk(Jr(yield*mc.HttpClient)),f=p.join(wt.Path.cache,"skills"),v=on.fn("Discovery.download")(function*(h,S){return(yield*s.exists(S).pipe(on.orDie))?!0:yield*Ni.get(h).pipe(w.execute,on.flatMap(C=>C.arrayBuffer),on.flatMap(C=>s.writeWithDirs(S,new Uint8Array(C))),on.as(!0),on.catch(C=>on.sync(()=>(b.error("failed to download",{url:h,err:C}),!1))))}),I=on.fn("Discovery.pull")(function*(h){let S=h.endsWith("/")?h:`${h}/`,C=new URL("index.json",S).href,l=S.slice(0,-1);b.info("fetching index",{url:C});let P=yield*Ni.get(C).pipe(Ni.acceptJson,w.execute,on.flatMap(Nm.schemaBodyJson(i)),on.catch(T=>on.sync(()=>(b.error("failed to fetch index",{url:C,err:T}),null))));if(!P)return[];let y=P.skills.filter(T=>T.files.includes("SKILL.md")?!0:(b.warn("skill entry missing SKILL.md",{url:C,skill:T.name}),!1));return(yield*on.forEach(y,T=>on.gen(function*(){let R=p.join(f,T.name);yield*on.forEach(T.files,E=>v(new URL(E,`${l}/${T.name}/`).href,p.join(R,E)),{concurrency:8});let _=p.join(R,"SKILL.md");return(yield*s.exists(_).pipe(on.orDie))?R:null}),{concurrency:4})).filter(T=>T!==null)});return m.of({pull:I})})),d.defaultLayer=d.layer.pipe(Is.provide(Lm.layer),Is.provide(st.defaultLayer),Is.provide(Am.layer))})(ks||={});var un;(y=>{let t=Ae.create({service:"skill"}),e=[".claude",".agents"],o="skills/**/SKILL.md",i="{skill,skills}/**/SKILL.md",m="**/SKILL.md";y.Info=vn.object({name:vn.string(),description:vn.string(),location:vn.string(),content:vn.string()}),y.InvalidError=tt.create("SkillInvalidError",vn.object({path:vn.string(),message:vn.string().optional(),issues:vn.custom().optional()})),y.NameMismatchError=tt.create("SkillNameMismatchError",vn.object({path:vn.string(),expected:vn.string(),actual:vn.string()}));let b=Ht.fnUntraced(function*(D,T,R){let _=yield*Ht.tryPromise({try:n(()=>Vo.parse(T),"try"),catch:n(x=>x,"catch")}).pipe(Ht.catch(Ht.fnUntraced(function*(x){let k=Vo.FrontmatterError.isInstance(x)?x.data.message:`Failed to parse skill ${T}`,{Session:M}=yield*Ht.promise(()=>import("./session-FWLEEJPX.js"));yield*R.publish(M.Event.Error,{error:new tt.Unknown({message:k}).toObject()}),t.error("failed to load skill",{skill:T,err:x})})));if(!_)return;let E=y.Info.pick({name:!0,description:!0}).safeParse(_.data);E.success&&(D.skills[E.data.name]&&t.warn("duplicate skill name",{name:E.data.name,existing:D.skills[E.data.name].location,duplicate:T}),D.dirs.add(Mr.dirname(T)),D.skills[E.data.name]={name:E.data.name,description:E.data.description,location:T,content:_.content})}),s=Ht.fnUntraced(function*(D,T,R,_,E){let x=yield*Ht.tryPromise({try:n(()=>Eo.scan(_,{cwd:R,absolute:!0,include:"file",symlink:!0,dot:E?.dot}),"try"),catch:n(k=>k,"catch")}).pipe(Ht.catch(k=>E?.scope?(t.error(`failed to scan ${E.scope} skills`,{dir:R,error:k}),Ht.succeed([])):Ht.die(k)));yield*Ht.forEach(x,k=>b(D,k,T),{concurrency:"unbounded",discard:!0})}),p=Ht.fnUntraced(function*(D,T,R,_,E,x,k){if(!ze.OPENCODE_DISABLE_EXTERNAL_SKILLS){for(let g of e){let L=Mr.join(wt.Path.home,g);(yield*E.isDir(L))&&(yield*s(D,_,L,o,{dot:!0,scope:"global"}))}let u=yield*E.up({targets:e,start:x,stop:k}).pipe(Ht.catch(()=>Ht.succeed([])));for(let g of u)yield*s(D,_,g,o,{dot:!0,scope:"project"})}let M=yield*T.directories();for(let u of M)yield*s(D,_,u,i);let r=yield*T.get();for(let u of r.skills?.paths??[]){let g=u.startsWith("~/")?Mr.join(Um.homedir(),u.slice(2)):u,L=Mr.isAbsolute(g)?g:Mr.join(x,g);if(!(yield*E.isDir(L))){t.warn("skill path not found",{path:L});continue}yield*s(D,_,L,m)}for(let u of r.skills?.urls??[]){let g=yield*R.pull(u);for(let L of g)D.dirs.add(L),yield*s(D,_,L,m)}t.info("init",{count:Object.keys(D.skills).length})});class w extends Fm.Service()("@opencode/Skill"){static{n(this,"Service")}}y.Service=w,y.layer=jr.effect(w,Ht.gen(function*(){let D=yield*ks.Service,T=yield*Be.Service,R=yield*Me.Service,_=yield*st.Service,E=yield*ae.make(Ht.fn("Skill.state")(function*(u){let g={skills:{},dirs:new Set};return yield*p(g,T,D,R,_,u.directory,u.worktree),g})),x=Ht.fn("Skill.get")(function*(u){return(yield*ae.get(E)).skills[u]}),k=Ht.fn("Skill.all")(function*(){let u=yield*ae.get(E);return Object.values(u.skills)}),M=Ht.fn("Skill.dirs")(function*(){let u=yield*ae.get(E);return Array.from(u.dirs)}),r=Ht.fn("Skill.available")(function*(u){let g=yield*ae.get(E),L=Object.values(g.skills).toSorted((j,z)=>j.name.localeCompare(z.name));return u?L.filter(j=>Ge.evaluate("skill",j.name,u.permission).action!=="deny"):L});return w.of({get:x,all:k,dirs:M,available:r})})),y.defaultLayer=y.layer.pipe(jr.provide(ks.defaultLayer),jr.provide(Be.defaultLayer),jr.provide(Me.layer),jr.provide(st.defaultLayer));function I(D,T){return D.length===0?"No skills are currently available.":T.verbose?["<available_skills>",...D.flatMap(R=>[" <skill>",` <name>${R.name}</name>`,` <description>${R.description}</description>`,` <location>${zm(R.location).href}</location>`," </skill>"]),"</available_skills>"].join(`
298
298
  `):["## Available Skills",...D.map(R=>`- **${R.name}**: ${R.description}`)].join(`
299
- `)}y.fmt=I,n(I,"fmt");let{runPromise:h}=qe(w,y.defaultLayer);async function S(D){return h(T=>T.get(D))}y.get=S,n(S,"get");async function C(){return h(D=>D.all())}y.all=C,n(C,"all");async function l(){return h(D=>D.dirs())}y.dirs=l,n(l,"dirs");async function P(D){return h(T=>T.available(D))}y.available=P,n(P,"available")})(un||={});import{Effect as xn,ServiceMap as Hm,Layer as Lr}from"effect";var In;(s=>{s.Info=Vt.object({name:Vt.string(),description:Vt.string().optional(),mode:Vt.enum(["subagent","primary","all"]),native:Vt.boolean().optional(),hidden:Vt.boolean().optional(),topP:Vt.number().optional(),temperature:Vt.number().optional(),color:Vt.string().optional(),permission:Ge.Ruleset,model:Vt.object({modelID:Et.zod,providerID:rt.zod}).optional(),variant:Vt.string().optional(),prompt:Vt.string().optional(),options:Vt.record(Vt.string(),Vt.any()),steps:Vt.number().int().positive().optional()}).meta({ref:"Agent"});class e extends Hm.Service()("@opencode/Agent"){static{n(this,"Service")}}s.Service=e,s.layer=Lr.effect(e,xn.gen(function*(){let p=yield*Be.Service,w=yield*io.Service,f=yield*un.Service,v=yield*Gt.Service,I=yield*ae.make(xn.fn("Agent.state")(function*(h){let S=yield*p.get(),C=yield*f.dirs(),l=[ln.GLOB,...C.map(E=>tr.join(E,"*"))],P=Ge.fromConfig({"*":"allow",doom_loop:"ask",external_directory:{"*":"ask",...Object.fromEntries(l.map(E=>[E,"allow"]))},question:"deny",plan_enter:"deny",plan_exit:"deny",read:{"*":"allow","*.env":"ask","*.env.*":"ask","*.env.example":"allow"}}),y=Ge.fromConfig(S.permission??{}),D={build:{name:"build",description:"The default agent. Executes tools based on configured permissions.",options:{},permission:Ge.merge(P,Ge.fromConfig({question:"allow",plan_enter:"allow"}),y),mode:"primary",native:!0},plan:{name:"plan",description:"Plan mode. Disallows all edit tools.",options:{},permission:Ge.merge(P,Ge.fromConfig({question:"allow",plan_exit:"allow",external_directory:{[tr.join(wt.Path.data,"plans","*")]:"allow"},edit:{"*":"deny",[tr.join(".opencode","plans","*.md")]:"allow",[tr.relative(ne.worktree,tr.join(wt.Path.data,tr.join("plans","*.md")))]:"allow"}}),y),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:Ge.merge(P,Ge.fromConfig({todowrite:"deny"}),y),options:{},mode:"subagent",native:!0},explore:{name:"explore",permission:Ge.merge(P,Ge.fromConfig({"*":"deny",grep:"allow",glob:"allow",list:"allow",bash:"allow",webfetch:"allow",websearch:"allow",codesearch:"allow",read:"allow",external_directory:{"*":"ask",...Object.fromEntries(l.map(E=>[E,"allow"]))}}),y),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:dc,options:{},mode:"subagent",native:!0},compaction:{name:"compaction",mode:"primary",native:!0,hidden:!0,prompt:cc,permission:Ge.merge(P,Ge.fromConfig({"*":"deny"}),y),options:{}},title:{name:"title",mode:"primary",options:{},native:!0,hidden:!0,temperature:.5,permission:Ge.merge(P,Ge.fromConfig({"*":"deny"}),y),prompt:pc},summary:{name:"summary",mode:"primary",options:{},native:!0,hidden:!0,permission:Ge.merge(P,Ge.fromConfig({"*":"deny"}),y),prompt:uc}};for(let[E,x]of Object.entries(S.agent??{})){if(x.disable){delete D[E];continue}let k=D[E];k||(k=D[E]={name:E,mode:"all",permission:Ge.merge(P,y),options:{},native:!1}),x.model&&(k.model=Gt.parseModel(x.model)),k.variant=x.variant??k.variant,k.prompt=x.prompt??k.prompt,k.description=x.description??k.description,k.temperature=x.temperature??k.temperature,k.topP=x.top_p??k.topP,k.mode=x.mode??k.mode,k.color=x.color??k.color,k.hidden=x.hidden??k.hidden,k.name=x.name??k.name,k.steps=x.steps??k.steps,k.options=$m(k.options,x.options??{}),k.permission=Ge.merge(k.permission,Ge.fromConfig(x.permission??{}))}for(let E in D)D[E].permission.some(M=>M.permission!=="external_directory"||M.action!=="deny"?!1:M.pattern===ln.GLOB)||(D[E].permission=Ge.merge(D[E].permission,Ge.fromConfig({external_directory:{[ln.GLOB]:"allow"}})));let T=xn.fnUntraced(function*(E){return D[E]}),R=xn.fnUntraced(function*(){let E=yield*p.get();return Wm(D,Gm(),Bm([x=>E.default_agent?x.name===E.default_agent:x.name==="build","desc"],[x=>x.name,"asc"]))}),_=xn.fnUntraced(function*(){let E=yield*p.get();if(E.default_agent){let k=D[E.default_agent];if(!k)throw new Error(`default agent "${E.default_agent}" not found`);if(k.mode==="subagent")throw new Error(`default agent "${E.default_agent}" is a subagent`);if(k.hidden===!0)throw new Error(`default agent "${E.default_agent}" is hidden`);return k.name}let x=Object.values(D).find(k=>k.mode!=="subagent"&&k.hidden!==!0);if(!x)throw new Error("no primary visible agent found");return x.name});return{get:T,list:R,defaultAgent:_}}));return e.of({get:xn.fn("Agent.get")(function*(h){return yield*ae.useEffect(I,S=>S.get(h))}),list:xn.fn("Agent.list")(function*(){return yield*ae.useEffect(I,h=>h.list())}),defaultAgent:xn.fn("Agent.defaultAgent")(function*(){return yield*ae.useEffect(I,h=>h.defaultAgent())}),generate:xn.fn("Agent.generate")(function*(h){let S=yield*p.get(),C=h.model??(yield*v.defaultModel()),l=yield*v.getModel(C.providerID,C.modelID),P=yield*v.getLanguage(l),y=[lc];yield*xn.promise(()=>Mt.trigger("experimental.chat.system.transform",{model:l},{system:y}));let D=yield*ae.useEffect(I,_=>_.list()),T={experimental_telemetry:{isEnabled:S.experimental?.openTelemetry,metadata:{userId:S.username??"unknown"}},temperature:.3,messages:[...y.map(_=>({role:"system",content:_})),{role:"user",content:`Create an agent configuration based on this request: "${h.description}".
299
+ `)}y.fmt=I,n(I,"fmt");let{runPromise:h}=qe(w,y.defaultLayer);async function S(D){return h(T=>T.get(D))}y.get=S,n(S,"get");async function C(){return h(D=>D.all())}y.all=C,n(C,"all");async function l(){return h(D=>D.dirs())}y.dirs=l,n(l,"dirs");async function P(D){return h(T=>T.available(D))}y.available=P,n(P,"available")})(un||={});import{Effect as xn,ServiceMap as Vm,Layer as Lr}from"effect";var In;(s=>{s.Info=Vt.object({name:Vt.string(),description:Vt.string().optional(),mode:Vt.enum(["subagent","primary","all"]),native:Vt.boolean().optional(),hidden:Vt.boolean().optional(),topP:Vt.number().optional(),temperature:Vt.number().optional(),color:Vt.string().optional(),permission:Ge.Ruleset,model:Vt.object({modelID:Et.zod,providerID:rt.zod}).optional(),variant:Vt.string().optional(),prompt:Vt.string().optional(),options:Vt.record(Vt.string(),Vt.any()),steps:Vt.number().int().positive().optional()}).meta({ref:"Agent"});class e extends Vm.Service()("@opencode/Agent"){static{n(this,"Service")}}s.Service=e,s.layer=Lr.effect(e,xn.gen(function*(){let p=yield*Be.Service,w=yield*io.Service,f=yield*un.Service,v=yield*Gt.Service,I=yield*ae.make(xn.fn("Agent.state")(function*(h){let S=yield*p.get(),C=yield*f.dirs(),l=[ln.GLOB,...C.map(E=>tr.join(E,"*"))],P=Ge.fromConfig({"*":"allow",doom_loop:"ask",external_directory:{"*":"ask",...Object.fromEntries(l.map(E=>[E,"allow"]))},question:"deny",plan_enter:"deny",plan_exit:"deny",read:{"*":"allow","*.env":"ask","*.env.*":"ask","*.env.example":"allow"}}),y=Ge.fromConfig(S.permission??{}),D={build:{name:"build",description:"The default agent. Executes tools based on configured permissions.",options:{},permission:Ge.merge(P,Ge.fromConfig({question:"allow",plan_enter:"allow"}),y),mode:"primary",native:!0},plan:{name:"plan",description:"Plan mode. Disallows all edit tools.",options:{},permission:Ge.merge(P,Ge.fromConfig({question:"allow",plan_exit:"allow",external_directory:{[tr.join(wt.Path.data,"plans","*")]:"allow"},edit:{"*":"deny",[tr.join(".opencode","plans","*.md")]:"allow",[tr.relative(ne.worktree,tr.join(wt.Path.data,tr.join("plans","*.md")))]:"allow"}}),y),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:Ge.merge(P,Ge.fromConfig({todowrite:"deny"}),y),options:{},mode:"subagent",native:!0},explore:{name:"explore",permission:Ge.merge(P,Ge.fromConfig({"*":"deny",grep:"allow",glob:"allow",list:"allow",bash:"allow",webfetch:"allow",websearch:"allow",codesearch:"allow",read:"allow",external_directory:{"*":"ask",...Object.fromEntries(l.map(E=>[E,"allow"]))}}),y),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:dc,options:{},mode:"subagent",native:!0},compaction:{name:"compaction",mode:"primary",native:!0,hidden:!0,prompt:cc,permission:Ge.merge(P,Ge.fromConfig({"*":"deny"}),y),options:{}},title:{name:"title",mode:"primary",options:{},native:!0,hidden:!0,temperature:.5,permission:Ge.merge(P,Ge.fromConfig({"*":"deny"}),y),prompt:pc},summary:{name:"summary",mode:"primary",options:{},native:!0,hidden:!0,permission:Ge.merge(P,Ge.fromConfig({"*":"deny"}),y),prompt:uc}};for(let[E,x]of Object.entries(S.agent??{})){if(x.disable){delete D[E];continue}let k=D[E];k||(k=D[E]={name:E,mode:"all",permission:Ge.merge(P,y),options:{},native:!1}),x.model&&(k.model=Gt.parseModel(x.model)),k.variant=x.variant??k.variant,k.prompt=x.prompt??k.prompt,k.description=x.description??k.description,k.temperature=x.temperature??k.temperature,k.topP=x.top_p??k.topP,k.mode=x.mode??k.mode,k.color=x.color??k.color,k.hidden=x.hidden??k.hidden,k.name=x.name??k.name,k.steps=x.steps??k.steps,k.options=Wm(k.options,x.options??{}),k.permission=Ge.merge(k.permission,Ge.fromConfig(x.permission??{}))}for(let E in D)D[E].permission.some(M=>M.permission!=="external_directory"||M.action!=="deny"?!1:M.pattern===ln.GLOB)||(D[E].permission=Ge.merge(D[E].permission,Ge.fromConfig({external_directory:{[ln.GLOB]:"allow"}})));let T=xn.fnUntraced(function*(E){return D[E]}),R=xn.fnUntraced(function*(){let E=yield*p.get();return Bm(D,Hm(),Gm([x=>E.default_agent?x.name===E.default_agent:x.name==="build","desc"],[x=>x.name,"asc"]))}),_=xn.fnUntraced(function*(){let E=yield*p.get();if(E.default_agent){let k=D[E.default_agent];if(!k)throw new Error(`default agent "${E.default_agent}" not found`);if(k.mode==="subagent")throw new Error(`default agent "${E.default_agent}" is a subagent`);if(k.hidden===!0)throw new Error(`default agent "${E.default_agent}" is hidden`);return k.name}let x=Object.values(D).find(k=>k.mode!=="subagent"&&k.hidden!==!0);if(!x)throw new Error("no primary visible agent found");return x.name});return{get:T,list:R,defaultAgent:_}}));return e.of({get:xn.fn("Agent.get")(function*(h){return yield*ae.useEffect(I,S=>S.get(h))}),list:xn.fn("Agent.list")(function*(){return yield*ae.useEffect(I,h=>h.list())}),defaultAgent:xn.fn("Agent.defaultAgent")(function*(){return yield*ae.useEffect(I,h=>h.defaultAgent())}),generate:xn.fn("Agent.generate")(function*(h){let S=yield*p.get(),C=h.model??(yield*v.defaultModel()),l=yield*v.getModel(C.providerID,C.modelID),P=yield*v.getLanguage(l),y=[lc];yield*xn.promise(()=>Mt.trigger("experimental.chat.system.transform",{model:l},{system:y}));let D=yield*ae.useEffect(I,_=>_.list()),T={experimental_telemetry:{isEnabled:S.experimental?.openTelemetry,metadata:{userId:S.username??"unknown"}},temperature:.3,messages:[...y.map(_=>({role:"system",content:_})),{role:"user",content:`Create an agent configuration based on this request: "${h.description}".
300
300
 
301
301
  IMPORTANT: The following identifiers already exist and must NOT be used: ${D.map(_=>_.name).join(", ")}
302
- Return ONLY the JSON object, no other text, do not wrap in backticks`}],model:P,schema:Vt.object({identifier:Vt.string(),whenToUse:Vt.string(),systemPrompt:Vt.string()})},R=yield*w.get(C.providerID).pipe(xn.orDie);return C.providerID==="openai"&&R?.type==="oauth"?yield*xn.promise(async()=>{let _=qm({...T,providerOptions:jt.providerOptions(l,{store:!1}),onError:n(()=>{},"onError")});for await(let E of _.fullStream)if(E.type==="error")throw E.error;return _.object}):yield*xn.promise(()=>Fm(T).then(_=>_.object))})})})),s.defaultLayer=s.layer.pipe(Lr.provide(Gt.defaultLayer),Lr.provide(io.defaultLayer),Lr.provide(Be.defaultLayer),Lr.provide(un.defaultLayer));let{runPromise:m}=qe(e,s.defaultLayer);async function c(p){return m(w=>w.get(p))}s.get=c,n(c,"get");async function a(){return m(p=>p.list())}s.list=a,n(a,"list");async function d(){return m(p=>p.defaultAgent())}s.defaultAgent=d,n(d,"defaultAgent");async function b(p){return m(w=>w.generate(p))}s.generate=b,n(b,"generate")})(In||={});import{tool as Hc,jsonSchema as Vi,asSchema as Rh}from"ai";import qn from"zod";var Ui;(o=>{function e(i){return Math.max(0,Math.round((i||"").length/4))}o.estimate=e,n(e,"estimate")})(Ui||={});import{Cause as Oc,Effect as Rt,Layer as Pn,ServiceMap as dh}from"effect";import*as ir from"effect/Stream";import{Effect as nr,Layer as Xm,Record as Zm,ServiceMap as Qm}from"effect";import*as or from"effect/Stream";import{streamText as eh,wrapLanguageModel as th,tool as nh,jsonSchema as oh}from"ai";import{mergeDeep as Fi,pipe as rh}from"remeda";import{GitLabWorkflowLanguageModel as kc}from"gitlab-ai-provider";import zi from"path";import Es from"fs/promises";import Ue from"zod";import{text as Vm}from"node:stream/consumers";import{ZipReader as Ym,BlobReader as Jm,BlobWriter as Km}from"@zip.js/zip.js";var Zn;(S=>{let t=Ae.create({service:"ripgrep"}),e=Ue.object({elapsed:Ue.object({secs:Ue.number(),nanos:Ue.number(),human:Ue.string()}),searches:Ue.number(),searches_with_match:Ue.number(),bytes_searched:Ue.number(),bytes_printed:Ue.number(),matched_lines:Ue.number(),matches:Ue.number()}),o=Ue.object({type:Ue.literal("begin"),data:Ue.object({path:Ue.object({text:Ue.string()})})});S.Match=Ue.object({type:Ue.literal("match"),data:Ue.object({path:Ue.object({text:Ue.string()}),lines:Ue.object({text:Ue.string()}),line_number:Ue.number(),absolute_offset:Ue.number(),submatches:Ue.array(Ue.object({match:Ue.object({text:Ue.string()}),start:Ue.number(),end:Ue.number()}))})});let m=Ue.object({type:Ue.literal("end"),data:Ue.object({path:Ue.object({text:Ue.string()}),binary_offset:Ue.number().nullable(),stats:e})}),c=Ue.object({type:Ue.literal("summary"),data:Ue.object({elapsed_total:Ue.object({human:Ue.string(),nanos:Ue.number(),secs:Ue.number()}),stats:e})}),a=Ue.union([o,S.Match,m,c]),d={"arm64-darwin":{platform:"aarch64-apple-darwin",extension:"tar.gz"},"arm64-linux":{platform:"aarch64-unknown-linux-gnu",extension:"tar.gz"},"x64-darwin":{platform:"x86_64-apple-darwin",extension:"tar.gz"},"x64-linux":{platform:"x86_64-unknown-linux-musl",extension:"tar.gz"},"arm64-win32":{platform:"aarch64-pc-windows-msvc",extension:"zip"},"x64-win32":{platform:"x86_64-pc-windows-msvc",extension:"zip"}};S.ExtractionFailedError=tt.create("RipgrepExtractionFailedError",Ue.object({filepath:Ue.string(),stderr:Ue.string()})),S.UnsupportedPlatformError=tt.create("RipgrepUnsupportedPlatformError",Ue.object({platform:Ue.string()})),S.DownloadFailedError=tt.create("RipgrepDownloadFailedError",Ue.object({url:Ue.string(),status:Ue.number()}));let w=Gn(async()=>{let C=kt("rg");if(C){if((await Es.stat(C).catch(()=>{}))?.isFile())return{filepath:C};t.warn("bun.which returned invalid rg path",{filepath:C})}let l=zi.join(wt.Path.bin,"rg"+(process.platform==="win32"?".exe":""));if(!await Te.exists(l)){let P=`${process.arch}-${process.platform}`,y=d[P];if(!y)throw new S.UnsupportedPlatformError({platform:P});let D="14.1.1",T=`ripgrep-${D}-${y.platform}.${y.extension}`,R=`https://github.com/BurntSushi/ripgrep/releases/download/${D}/${T}`,_=await fetch(R);if(!_.ok)throw new S.DownloadFailedError({url:R,status:_.status});let E=await _.arrayBuffer(),x=zi.join(wt.Path.bin,T);if(await Te.write(x,Buffer.from(E)),y.extension==="tar.gz"){let k=["tar","-xzf",x,"--strip-components=1"];P.endsWith("-darwin")&&k.push("--include=*/rg"),P.endsWith("-linux")&&k.push("--wildcards","*/rg");let M=Xt.spawn(k,{cwd:wt.Path.bin,stderr:"pipe",stdout:"pipe"});if(await M.exited!==0){let u=M.stderr?await Vm(M.stderr):"";throw new S.ExtractionFailedError({filepath:l,stderr:u})}}if(y.extension==="zip"){let k=new Ym(new Jm(new Blob([E]))),M=await k.getEntries(),r;for(let g of M)if(g.filename.endsWith("rg.exe")){r=g;break}if(!r)throw new S.ExtractionFailedError({filepath:x,stderr:"rg.exe not found in zip archive"});let u=await r.getData(new Km);if(!u)throw new S.ExtractionFailedError({filepath:x,stderr:"Failed to extract rg.exe from zip archive"});await Te.write(l,Buffer.from(await u.arrayBuffer())),await k.close()}await Es.unlink(x),P.endsWith("-win32")||await Es.chmod(l,493)}return{filepath:l}});async function f(){let{filepath:C}=await w();return C}S.filepath=f,n(f,"filepath");async function*v(C){C.signal?.throwIfAborted();let l=[await f(),"--files","--glob=!.git/*"];if(C.follow&&l.push("--follow"),C.hidden!==!1&&l.push("--hidden"),C.maxDepth!==void 0&&l.push(`--max-depth=${C.maxDepth}`),C.glob)for(let T of C.glob)l.push(`--glob=${T}`);if(!(await Es.stat(C.cwd).catch(()=>{}))?.isDirectory())throw Object.assign(new Error(`No such file or directory: '${C.cwd}'`),{code:"ENOENT",errno:-2,path:C.cwd});let P=Xt.spawn(l,{cwd:C.cwd,stdout:"pipe",stderr:"ignore",abort:C.signal});if(!P.stdout)throw new Error("Process output not available");let y="",D=P.stdout;for await(let T of D){C.signal?.throwIfAborted(),y+=typeof T=="string"?T:T.toString();let R=y.split(/\r?\n/);y=R.pop()||"";for(let _ of R)_&&(yield _)}y&&(yield y),await P.exited,C.signal?.throwIfAborted()}S.files=v,n(v,"files");async function I(C){t.info("tree",C);let l=await Array.fromAsync(S.files({cwd:C.cwd,signal:C.signal}));function P(k,M){let r=k.children.get(M);if(r)return r;let u={name:M,children:new Map};return k.children.set(M,u),u}n(P,"dir");let y={name:"",children:new Map};for(let k of l){if(k.includes(".opencode"))continue;let M=k.split(zi.sep);if(M.length<2)continue;let r=y;for(let u of M.slice(0,-1))r=P(r,u)}function D(k){let M=0;for(let r of k.children.values())M+=1+D(r);return M}n(D,"count");let T=D(y),R=C.limit??T,_=[],E=[];for(let k of Array.from(y.children.values()).sort((M,r)=>M.name.localeCompare(r.name)))E.push({node:k,path:k.name});let x=0;for(let k=0;k<E.length&&x<R;k++){let{node:M,path:r}=E[k];_.push(r),x++;for(let u of Array.from(M.children.values()).sort((g,L)=>g.name.localeCompare(L.name)))E.push({node:u,path:`${r}/${u.name}`})}return T>x&&_.push(`[${T-x} truncated]`),_.join(`
302
+ Return ONLY the JSON object, no other text, do not wrap in backticks`}],model:P,schema:Vt.object({identifier:Vt.string(),whenToUse:Vt.string(),systemPrompt:Vt.string()})},R=yield*w.get(C.providerID).pipe(xn.orDie);return C.providerID==="openai"&&R?.type==="oauth"?yield*xn.promise(async()=>{let _=$m({...T,providerOptions:jt.providerOptions(l,{store:!1}),onError:n(()=>{},"onError")});for await(let E of _.fullStream)if(E.type==="error")throw E.error;return _.object}):yield*xn.promise(()=>qm(T).then(_=>_.object))})})})),s.defaultLayer=s.layer.pipe(Lr.provide(Gt.defaultLayer),Lr.provide(io.defaultLayer),Lr.provide(Be.defaultLayer),Lr.provide(un.defaultLayer));let{runPromise:m}=qe(e,s.defaultLayer);async function c(p){return m(w=>w.get(p))}s.get=c,n(c,"get");async function a(){return m(p=>p.list())}s.list=a,n(a,"list");async function d(){return m(p=>p.defaultAgent())}s.defaultAgent=d,n(d,"defaultAgent");async function b(p){return m(w=>w.generate(p))}s.generate=b,n(b,"generate")})(In||={});import{tool as Vc,jsonSchema as Vi,asSchema as Ch}from"ai";import qn from"zod";var Ui;(o=>{function e(i){return Math.max(0,Math.round((i||"").length/4))}o.estimate=e,n(e,"estimate")})(Ui||={});import{Cause as _c,Effect as Rt,Layer as Pn,ServiceMap as uh}from"effect";import*as ir from"effect/Stream";import{Effect as nr,Layer as Zm,Record as Qm,ServiceMap as eh}from"effect";import*as or from"effect/Stream";import{streamText as th,wrapLanguageModel as nh,tool as oh,jsonSchema as rh}from"ai";import{mergeDeep as Fi,pipe as sh}from"remeda";import{GitLabWorkflowLanguageModel as kc}from"gitlab-ai-provider";import zi from"path";import Es from"fs/promises";import Ue from"zod";import{text as Ym}from"node:stream/consumers";import{ZipReader as Jm,BlobReader as Km,BlobWriter as Xm}from"@zip.js/zip.js";var Zn;(S=>{let t=Ae.create({service:"ripgrep"}),e=Ue.object({elapsed:Ue.object({secs:Ue.number(),nanos:Ue.number(),human:Ue.string()}),searches:Ue.number(),searches_with_match:Ue.number(),bytes_searched:Ue.number(),bytes_printed:Ue.number(),matched_lines:Ue.number(),matches:Ue.number()}),o=Ue.object({type:Ue.literal("begin"),data:Ue.object({path:Ue.object({text:Ue.string()})})});S.Match=Ue.object({type:Ue.literal("match"),data:Ue.object({path:Ue.object({text:Ue.string()}),lines:Ue.object({text:Ue.string()}),line_number:Ue.number(),absolute_offset:Ue.number(),submatches:Ue.array(Ue.object({match:Ue.object({text:Ue.string()}),start:Ue.number(),end:Ue.number()}))})});let m=Ue.object({type:Ue.literal("end"),data:Ue.object({path:Ue.object({text:Ue.string()}),binary_offset:Ue.number().nullable(),stats:e})}),c=Ue.object({type:Ue.literal("summary"),data:Ue.object({elapsed_total:Ue.object({human:Ue.string(),nanos:Ue.number(),secs:Ue.number()}),stats:e})}),a=Ue.union([o,S.Match,m,c]),d={"arm64-darwin":{platform:"aarch64-apple-darwin",extension:"tar.gz"},"arm64-linux":{platform:"aarch64-unknown-linux-gnu",extension:"tar.gz"},"x64-darwin":{platform:"x86_64-apple-darwin",extension:"tar.gz"},"x64-linux":{platform:"x86_64-unknown-linux-musl",extension:"tar.gz"},"arm64-win32":{platform:"aarch64-pc-windows-msvc",extension:"zip"},"x64-win32":{platform:"x86_64-pc-windows-msvc",extension:"zip"}};S.ExtractionFailedError=tt.create("RipgrepExtractionFailedError",Ue.object({filepath:Ue.string(),stderr:Ue.string()})),S.UnsupportedPlatformError=tt.create("RipgrepUnsupportedPlatformError",Ue.object({platform:Ue.string()})),S.DownloadFailedError=tt.create("RipgrepDownloadFailedError",Ue.object({url:Ue.string(),status:Ue.number()}));let w=Gn(async()=>{let C=kt("rg");if(C){if((await Es.stat(C).catch(()=>{}))?.isFile())return{filepath:C};t.warn("bun.which returned invalid rg path",{filepath:C})}let l=zi.join(wt.Path.bin,"rg"+(process.platform==="win32"?".exe":""));if(!await Te.exists(l)){let P=`${process.arch}-${process.platform}`,y=d[P];if(!y)throw new S.UnsupportedPlatformError({platform:P});let D="14.1.1",T=`ripgrep-${D}-${y.platform}.${y.extension}`,R=`https://github.com/BurntSushi/ripgrep/releases/download/${D}/${T}`,_=await fetch(R);if(!_.ok)throw new S.DownloadFailedError({url:R,status:_.status});let E=await _.arrayBuffer(),x=zi.join(wt.Path.bin,T);if(await Te.write(x,Buffer.from(E)),y.extension==="tar.gz"){let k=["tar","-xzf",x,"--strip-components=1"];P.endsWith("-darwin")&&k.push("--include=*/rg"),P.endsWith("-linux")&&k.push("--wildcards","*/rg");let M=Xt.spawn(k,{cwd:wt.Path.bin,stderr:"pipe",stdout:"pipe"});if(await M.exited!==0){let u=M.stderr?await Ym(M.stderr):"";throw new S.ExtractionFailedError({filepath:l,stderr:u})}}if(y.extension==="zip"){let k=new Jm(new Km(new Blob([E]))),M=await k.getEntries(),r;for(let g of M)if(g.filename.endsWith("rg.exe")){r=g;break}if(!r)throw new S.ExtractionFailedError({filepath:x,stderr:"rg.exe not found in zip archive"});let u=await r.getData(new Xm);if(!u)throw new S.ExtractionFailedError({filepath:x,stderr:"Failed to extract rg.exe from zip archive"});await Te.write(l,Buffer.from(await u.arrayBuffer())),await k.close()}await Es.unlink(x),P.endsWith("-win32")||await Es.chmod(l,493)}return{filepath:l}});async function f(){let{filepath:C}=await w();return C}S.filepath=f,n(f,"filepath");async function*v(C){C.signal?.throwIfAborted();let l=[await f(),"--files","--glob=!.git/*"];if(C.follow&&l.push("--follow"),C.hidden!==!1&&l.push("--hidden"),C.maxDepth!==void 0&&l.push(`--max-depth=${C.maxDepth}`),C.glob)for(let T of C.glob)l.push(`--glob=${T}`);if(!(await Es.stat(C.cwd).catch(()=>{}))?.isDirectory())throw Object.assign(new Error(`No such file or directory: '${C.cwd}'`),{code:"ENOENT",errno:-2,path:C.cwd});let P=Xt.spawn(l,{cwd:C.cwd,stdout:"pipe",stderr:"ignore",abort:C.signal});if(!P.stdout)throw new Error("Process output not available");let y="",D=P.stdout;for await(let T of D){C.signal?.throwIfAborted(),y+=typeof T=="string"?T:T.toString();let R=y.split(/\r?\n/);y=R.pop()||"";for(let _ of R)_&&(yield _)}y&&(yield y),await P.exited,C.signal?.throwIfAborted()}S.files=v,n(v,"files");async function I(C){t.info("tree",C);let l=await Array.fromAsync(S.files({cwd:C.cwd,signal:C.signal}));function P(k,M){let r=k.children.get(M);if(r)return r;let u={name:M,children:new Map};return k.children.set(M,u),u}n(P,"dir");let y={name:"",children:new Map};for(let k of l){if(k.includes(".opencode"))continue;let M=k.split(zi.sep);if(M.length<2)continue;let r=y;for(let u of M.slice(0,-1))r=P(r,u)}function D(k){let M=0;for(let r of k.children.values())M+=1+D(r);return M}n(D,"count");let T=D(y),R=C.limit??T,_=[],E=[];for(let k of Array.from(y.children.values()).sort((M,r)=>M.name.localeCompare(r.name)))E.push({node:k,path:k.name});let x=0;for(let k=0;k<E.length&&x<R;k++){let{node:M,path:r}=E[k];_.push(r),x++;for(let u of Array.from(M.children.values()).sort((g,L)=>g.name.localeCompare(L.name)))E.push({node:u,path:`${r}/${u.name}`})}return T>x&&_.push(`[${T-x} truncated]`),_.join(`
303
303
  `)}S.tree=I,n(I,"tree");async function h(C){let l=[`${await f()}`,"--json","--hidden","--glob=!.git/*"];if(C.follow&&l.push("--follow"),C.glob)for(let D of C.glob)l.push(`--glob=${D}`);C.limit&&l.push(`--max-count=${C.limit}`),l.push("--"),l.push(C.pattern);let P=await Xt.text(l,{cwd:C.cwd,nothrow:!0});return P.code!==0?[]:P.text.trim().split(/\r?\n/).filter(Boolean).map(D=>JSON.parse(D)).map(D=>a.parse(D)).filter(D=>D.type==="match").map(D=>D.data)}S.search=h,n(h,"search")})(Zn||={});var hc=`You are OpenCode, the best coding agent on the planet.
304
304
 
305
305
  You are an interactive CLI tool that helps users with software engineering tasks. Use the instructions below and the tools available to you to assist the user.
@@ -1192,12 +1192,12 @@ assistant: Clients are marked as failed in the \`connectToServer\` function in s
1192
1192
  </example>
1193
1193
  `;var Qn;(i=>{function t(m){return m.api.id.includes("gpt-4")||m.api.id.includes("o1")||m.api.id.includes("o3")?[yc]:m.api.id.includes("gpt")?m.api.id.includes("codex")?[xc]:[wc]:m.api.id.includes("gemini-")?[bc]:m.api.id.includes("claude")?[hc]:m.api.id.toLowerCase().includes("trinity")?[Ic]:m.api.id.toLowerCase().includes("kimi")?[vc]:[gc]}i.provider=t,n(t,"provider");async function e(m){let c=ne.project;return[[`You are powered by the model named ${m.api.id}. The exact model ID is ${m.providerID}/${m.api.id}`,"Here is some useful information about the environment you are running in:","<env>",` Working directory: ${ne.directory}`,` Workspace root folder: ${ne.worktree}`,` Is directory a git repo: ${c.vcs==="git"?"yes":"no"}`,` Platform: ${process.platform}`,` Today's date: ${new Date().toDateString()}`,"</env>","<directories>",` ${c.vcs,""}`,"</directories>"].join(`
1194
1194
  `)]}i.environment=e,n(e,"environment");async function o(m){if(Ge.disabled(["skill"],m.permission).has("skill"))return;let c=await un.available(m);return["Skills provide specialized instructions and workflows for specific tasks.","Use the skill tool to load a skill when a task matches its description.",un.fmt(c,{verbose:!0})].join(`
1195
- `)}i.skills=o,n(o,"skills")})(Qn||={});var rr;(b=>{let t=Ae.create({service:"llm"});b.OUTPUT_TOKEN_MAX=jt.OUTPUT_TOKEN_MAX;class o extends Qm.Service()("@opencode/LLM"){static{n(this,"Service")}}b.Service=o,b.layer=Xm.effect(o,nr.gen(function*(){return o.of({stream(s){return or.scoped(or.unwrap(nr.gen(function*(){let p=yield*nr.acquireRelease(nr.sync(()=>new AbortController),f=>nr.sync(()=>f.abort())),w=yield*nr.promise(()=>b.stream({...s,abort:p.signal}));return or.fromAsyncIterable(w.fullStream,f=>f instanceof Error?f:new Error(String(f)))})))}})})),b.defaultLayer=b.layer;async function c(s){let p=t.clone().tag("providerID",s.model.providerID).tag("modelID",s.model.id).tag("sessionID",s.sessionID).tag("small",(s.small??!1).toString()).tag("agent",s.agent.name).tag("mode",s.agent.mode);p.info("stream",{modelID:s.model.id,providerID:s.model.providerID});let[w,f,v,I]=await Promise.all([Gt.getLanguage(s.model),Be.get(),Gt.getProvider(s.model.providerID),io.get(s.model.providerID)]),h=v.id==="openai"&&I?.type==="oauth",S=(s.agent.prompt?[s.agent.prompt]:Qn.provider(s.model)).filter(r=>r).join(`
1195
+ `)}i.skills=o,n(o,"skills")})(Qn||={});var rr;(b=>{let t=Ae.create({service:"llm"});b.OUTPUT_TOKEN_MAX=jt.OUTPUT_TOKEN_MAX;class o extends eh.Service()("@opencode/LLM"){static{n(this,"Service")}}b.Service=o,b.layer=Zm.effect(o,nr.gen(function*(){return o.of({stream(s){return or.scoped(or.unwrap(nr.gen(function*(){let p=yield*nr.acquireRelease(nr.sync(()=>new AbortController),f=>nr.sync(()=>f.abort())),w=yield*nr.promise(()=>b.stream({...s,abort:p.signal}));return or.fromAsyncIterable(w.fullStream,f=>f instanceof Error?f:new Error(String(f)))})))}})})),b.defaultLayer=b.layer;async function c(s){let p=t.clone().tag("providerID",s.model.providerID).tag("modelID",s.model.id).tag("sessionID",s.sessionID).tag("small",(s.small??!1).toString()).tag("agent",s.agent.name).tag("mode",s.agent.mode);p.info("stream",{modelID:s.model.id,providerID:s.model.providerID});let[w,f,v,I]=await Promise.all([Gt.getLanguage(s.model),Be.get(),Gt.getProvider(s.model.providerID),io.get(s.model.providerID)]),h=v.id==="openai"&&I?.type==="oauth",S=(s.agent.prompt?[s.agent.prompt]:Qn.provider(s.model)).filter(r=>r).join(`
1196
1196
  `),C=[...s.system,...s.user.system?[s.user.system]:[]].filter(r=>r).join(`
1197
1197
  `),l=[S,C].filter(r=>r),P=l[0];if(await Mt.trigger("experimental.chat.system.transform",{sessionID:s.sessionID,model:s.model},{system:l}),l.length>2&&l[0]===P){let r=l.slice(1);l.length=0,l.push(P,r.join(`
1198
- `))}let y=!s.small&&s.model.variants&&s.user.variant?s.model.variants[s.user.variant]:{},D=s.small?jt.smallOptions(s.model):jt.options({model:s.model,sessionID:s.sessionID,providerOptions:v.options}),T=rh(D,Fi(s.model.options),Fi(s.agent.options),Fi(y));h&&(T.instructions=l.join(`
1199
- `));let R=w instanceof kc,_=h||R?s.messages:[...l.map(r=>({role:"system",content:r})),...s.messages],E=await Mt.trigger("chat.params",{sessionID:s.sessionID,agent:s.agent.name,model:s.model,provider:v,message:s.user},{temperature:s.model.capabilities.temperature?s.agent.temperature??jt.temperature(s.model):void 0,topP:s.agent.topP??jt.topP(s.model),topK:jt.topK(s.model),maxOutputTokens:jt.maxOutputTokens(s.model),options:T}),{headers:x}=await Mt.trigger("chat.headers",{sessionID:s.sessionID,agent:s.agent.name,model:s.model,provider:v,message:s.user},{headers:{}}),k=await a(s);if((v.options?.litellmProxy===!0||s.model.providerID.toLowerCase().includes("litellm")||s.model.api.id.toLowerCase().includes("litellm"))&&Object.keys(k).length===0&&d(s.messages)&&(k._noop=nh({description:"Do not call this tool. It exists only for API compatibility and must never be invoked.",inputSchema:oh({type:"object",properties:{reason:{type:"string",description:"Unused"}}}),execute:n(async()=>({output:"",title:"",metadata:{}}),"execute")})),w instanceof kc){let r=w;r.systemPrompt=l.join(`
1200
- `),r.toolExecutor=async(u,g,L)=>{let j=k[u];if(!j||!j.execute)return{result:"",error:`Unknown tool: ${u}`};try{let z=await j.execute(JSON.parse(g),{toolCallId:L,messages:s.messages,abortSignal:s.abort});return{result:typeof z=="string"?z:z?.output??JSON.stringify(z),metadata:typeof z=="object"?z?.metadata:void 0,title:typeof z=="object"?z?.title:void 0}}catch(z){return{result:"",error:z.message??String(z)}}}}return eh({onError(r){p.error("stream error",{error:r})},async experimental_repairToolCall(r){let u=r.toolCall.toolName.toLowerCase();if(!k[r.toolCall.toolName]&&!k[u]){let g=u.replace(/^(?:mcp_|alchemy_)+/,""),L=Object.keys(k).filter(j=>j===g||j.endsWith(`_${g}`));if(g&&L.length===1)return p.info("repairing tool call",{tool:r.toolCall.toolName,repaired:L[0]}),{...r.toolCall,toolName:L[0]}}return u!==r.toolCall.toolName&&k[u]?(p.info("repairing tool call",{tool:r.toolCall.toolName,repaired:u}),{...r.toolCall,toolName:u}):{...r.toolCall,input:JSON.stringify({tool:r.toolCall.toolName,error:r.error.message}),toolName:"invalid"}},temperature:E.temperature,topP:E.topP,topK:E.topK,providerOptions:jt.providerOptions(s.model,E.options),activeTools:Object.keys(k).filter(r=>r!=="invalid"),tools:k,toolChoice:s.toolChoice,maxOutputTokens:E.maxOutputTokens,abortSignal:s.abort,headers:{...s.model.providerID.startsWith("opencode")?{"x-opencode-project":ne.project.id,"x-opencode-session":s.sessionID,"x-opencode-request":s.user.id,"x-opencode-client":ze.OPENCODE_CLIENT}:{"x-session-affinity":s.sessionID,...s.parentSessionID?{"x-parent-session-id":s.parentSessionID}:{},"User-Agent":`opencode/${Jt.VERSION}`},...s.model.headers,...x},maxRetries:s.retries??0,messages:_,model:th({model:w,middleware:[{specificationVersion:"v3",async transformParams(r){return r.type==="stream"&&(r.params.prompt=jt.message(r.params.prompt,s.model,T)),r.params}}]}),experimental_telemetry:{isEnabled:f.experimental?.openTelemetry,metadata:{userId:f.username??"unknown",sessionId:s.sessionID}}})}b.stream=c,n(c,"stream");function a(s){let p=Ge.disabled(Object.keys(s.tools),Ge.merge(s.agent.permission,s.permission??[])),w=Zm.filter(s.tools,(f,v)=>s.user.tools?.[v]!==!1&&!p.has(v));return Object.fromEntries(Object.entries(w).toSorted(([f],[v])=>f<v?-1:f>v?1:0))}n(a,"resolveTools");function d(s){for(let p of s)if(Array.isArray(p.content)){for(let w of p.content)if(w.type==="tool-call"||w.type==="tool-result")return!0}return!1}b.hasToolCalls=d,n(d,"hasToolCalls")})(rr||={});function Dc(t,e){if(Ec(e)!=="final_answer")return;let o=e.text.trim();if(o)return t.find(i=>i.type==="text"&&i.id!==e.id&&Ec(i)==="commentary"&&i.text.trim()===o)}n(Dc,"repeatedPreamble");function Ec(t){for(let e of Object.values(t.metadata??{}))if(e&&typeof e=="object"&&typeof e.phase=="string")return e.phase}n(Ec,"phaseOf");var sh=2e4;function Ds(t){if(t.cfg.compaction?.auto===!1)return!1;let e=t.model.limit.context;if(e===0)return!1;let o=t.tokens.total||t.tokens.input+t.tokens.output+t.tokens.cache.read+t.tokens.cache.write,i=t.cfg.compaction?.reserved??Math.min(sh,jt.maxOutputTokens(t.model)),m=t.model.limit.input?t.model.limit.input-i:e-jt.maxOutputTokens(t.model);return o>=m}n(Ds,"isOverflow");import{Cause as Sc,Clock as ih,Duration as ah,Effect as Tc,Schedule as lh}from"effect";var Ss;(w=>{w.RETRY_MAX_ATTEMPTS=10,w.RETRY_INITIAL_DELAY=500,w.RETRY_BACKOFF_FACTOR=2,w.RETRY_MAX_BACKOFF=32e3,w.RETRY_JITTER=.25,w.RETRY_AFTER_MAX=6e5;function a(f){let v=f?.data.responseHeaders;if(!v)return;let I=Number.parseFloat(v["retry-after-ms"]??"");if(!Number.isNaN(I)&&I>=0)return I;let h=v["retry-after"];if(!h)return;let S=Number.parseFloat(h);if(!Number.isNaN(S)&&S>=0)return Math.ceil(S*1e3);let C=Date.parse(h)-Date.now();if(!Number.isNaN(C)&&C>0)return Math.ceil(C)}n(a,"retryAfter");function d(f,v,I=Math.random){let h=a(v);if(h!==void 0)return Math.min(h,6e5);let S=Math.min(500*Math.pow(2,f-1),32e3);return Math.round(S*(1+.25*I()))}w.delay=d,n(d,"delay");function b(f){return Ne.APIError.isInstance(f)&&!!f.data.responseBody?.includes("FreeUsageLimitError")}n(b,"uncapped");function s(f){if(Ne.ProviderQuotaError.isInstance(f)||Ne.ContextOverflowError.isInstance(f))return;if(Ne.APIError.isInstance(f))return f.data.isRetryable?f.data.responseBody?.includes("FreeUsageLimitError")?"Free usage exceeded, subscribe to Go https://opencode.ai/go":f.data.message.includes("Overloaded")?"Provider is overloaded":f.data.message:void 0;let v=Ct(()=>{try{return typeof f.data?.message=="string",JSON.parse(f.data.message)}catch{return}});if(!v||typeof v!="object")return;let I=typeof v.code=="string"?v.code:"";if(v.type==="error"&&v.error?.type==="too_many_requests")return"Too Many Requests";let h=typeof v.error?.code=="string"?v.error.code:"",S=typeof v.error?.type=="string"?v.error.type:"",C=typeof v.type=="string"?v.type:"";if(C==="api_error")return"Provider server error";if(C.includes("overloaded")||I.includes("exhausted")||I.includes("unavailable")||h.includes("exhausted")||h.includes("unavailable")||h.includes("overloaded")||S.includes("unavailable")||S.includes("overloaded")||h==="slow_down")return"Provider is overloaded";if(v.type==="error"&&typeof v.error?.code=="string"&&v.error.code.includes("rate_limit"))return"Rate Limited"}w.retryable=s,n(s,"retryable");function p(f){return lh.fromStepWithMetadata(Tc.succeed(v=>{let I=f.parse(v.input),h=s(I);return h?v.attempt>10&&!b(I)?Sc.done(v.attempt):Tc.gen(function*(){let S=d(v.attempt,Ne.APIError.isInstance(I)?I:void 0),C=yield*ih.currentTimeMillis;return yield*f.set({attempt:v.attempt,message:h,next:C+S}),[v.attempt,ah.millis(S)]}):Sc.done(v.attempt)}))}w.policy=p,n(p,"policy")})(Ss||={});import{Effect as sr,Layer as Pc,ServiceMap as ch}from"effect";import Tn from"zod";var Lo;(s=>{s.Info=Tn.union([Tn.object({type:Tn.literal("idle")}),Tn.object({type:Tn.literal("retry"),attempt:Tn.number(),message:Tn.string(),next:Tn.number()}),Tn.object({type:Tn.literal("busy")})]).meta({ref:"SessionStatus"}),s.Event={Status:ht.define("session.status",Tn.object({sessionID:Ee.zod,status:s.Info})),Idle:ht.define("session.idle",Tn.object({sessionID:Ee.zod}))};class o extends ch.Service()("@opencode/SessionStatus"){static{n(this,"Service")}}s.Service=o,s.layer=Pc.effect(o,sr.gen(function*(){let p=yield*Me.Service,w=yield*ae.make(sr.fn("SessionStatus.state")(()=>sr.succeed(new Map))),f=sr.fn("SessionStatus.get")(function*(h){return(yield*ae.get(w)).get(h)??{type:"idle"}}),v=sr.fn("SessionStatus.list")(function*(){return new Map(yield*ae.get(w))}),I=sr.fn("SessionStatus.set")(function*(h,S){let C=yield*ae.get(w);if(yield*p.publish(s.Event.Status,{sessionID:h,status:S}),S.type==="idle"){yield*p.publish(s.Event.Idle,{sessionID:h}),C.delete(h);return}C.set(h,S)});return o.of({get:f,list:v,set:I})}));let m=s.layer.pipe(Pc.provide(Me.layer)),{runPromise:c}=qe(o,m);async function a(p){return c(w=>w.get(p))}s.get=a,n(a,"get");async function d(){return c(p=>p.list())}s.list=d,n(d,"list");async function b(p,w){return c(f=>f.set(p,w))}s.set=b,n(b,"set")})(Lo||={});var No;(c=>{let e=Ae.create({service:"session.processor"});class o extends dh.Service()("@opencode/SessionProcessor"){static{n(this,"Service")}}c.Service=o,c.layer=Pn.effect(o,Rt.gen(function*(){let a=yield*Ke.Service,d=yield*Be.Service,b=yield*Me.Service,s=yield*cn.Service,p=yield*In.Service,w=yield*rr.Service,f=yield*Ge.Service,v=yield*Mt.Service,I=yield*Lo.Service,h=Rt.fn("SessionProcessor.create")(function*(S){let C=yield*s.track(),l={assistantMessage:S.assistantMessage,sessionID:S.sessionID,model:S.model,toolcalls:{},shouldBreak:!1,snapshot:C,blocked:!1,needsCompaction:!1,currentText:void 0,reasoningMap:{}},P=!1,y=n(g=>Ne.fromError(g,{providerID:S.model.providerID,aborted:P}),"parse"),D=Rt.fn("SessionProcessor.handleEvent")(function*(g){switch(g.type){case"start":yield*I.set(l.sessionID,{type:"busy"});return;case"reasoning-start":if(g.id in l.reasoningMap)return;l.reasoningMap[g.id]={id:nt.ascending(),messageID:l.assistantMessage.id,sessionID:l.assistantMessage.sessionID,type:"reasoning",text:"",time:{start:Date.now()},metadata:g.providerMetadata},yield*a.updatePart(l.reasoningMap[g.id]);return;case"reasoning-delta":if(!(g.id in l.reasoningMap))return;l.reasoningMap[g.id].text+=g.text,g.providerMetadata&&(l.reasoningMap[g.id].metadata=g.providerMetadata),yield*a.updatePartDelta({sessionID:l.reasoningMap[g.id].sessionID,messageID:l.reasoningMap[g.id].messageID,partID:l.reasoningMap[g.id].id,field:"text",delta:g.text});return;case"reasoning-end":if(!(g.id in l.reasoningMap))return;l.reasoningMap[g.id].time={...l.reasoningMap[g.id].time,end:Date.now()},g.providerMetadata&&(l.reasoningMap[g.id].metadata=g.providerMetadata),yield*a.updatePart(l.reasoningMap[g.id]),delete l.reasoningMap[g.id];return;case"tool-input-start":if(l.assistantMessage.summary)throw new Error(`Tool call not allowed while generating summary: ${g.toolName}`);l.toolcalls[g.id]=yield*a.updatePart({id:l.toolcalls[g.id]?.id??nt.ascending(),messageID:l.assistantMessage.id,sessionID:l.assistantMessage.sessionID,type:"tool",tool:g.toolName,callID:g.id,state:{status:"pending",input:{},raw:""}});return;case"tool-input-delta":return;case"tool-input-end":return;case"tool-call":{if(l.assistantMessage.summary)throw new Error(`Tool call not allowed while generating summary: ${g.toolName}`);let j=l.toolcalls[g.toolCallId];if(!j)return;l.toolcalls[g.toolCallId]=yield*a.updatePart({...j,tool:g.toolName,state:{status:"running",input:g.input,time:{start:Date.now()}},metadata:g.providerMetadata});let V=Ne.parts(l.assistantMessage.id).slice(-3);if(V.length!==3||!V.every(G=>G.type==="tool"&&G.tool===g.toolName&&G.state.status!=="pending"&&JSON.stringify(G.state.input)===JSON.stringify(g.input)))return;let H=yield*p.get(l.assistantMessage.agent);yield*f.ask({permission:"doom_loop",patterns:[g.toolName],sessionID:l.assistantMessage.sessionID,metadata:{tool:g.toolName,input:g.input},always:[g.toolName],ruleset:H.permission});return}case"tool-result":{let j=l.toolcalls[g.toolCallId];if(!j||j.state.status!=="running")return;yield*a.updatePart({...j,state:{status:"completed",input:g.input??j.state.input,output:g.output.output,metadata:g.output.metadata,title:g.output.title,time:{start:j.state.time.start,end:Date.now()},attachments:g.output.attachments}}),delete l.toolcalls[g.toolCallId];return}case"tool-error":{let j=l.toolcalls[g.toolCallId];if(!j||j.state.status!=="running")return;yield*a.updatePart({...j,state:{status:"error",input:g.input??j.state.input,error:g.error instanceof Error?g.error.message:String(g.error),time:{start:j.state.time.start,end:Date.now()}}}),(g.error instanceof Ge.RejectedError||g.error instanceof Ln.RejectedError)&&(l.blocked=l.shouldBreak),delete l.toolcalls[g.toolCallId];return}case"error":throw g.error;case"start-step":l.snapshot||(l.snapshot=yield*s.track()),yield*a.updatePart({id:nt.ascending(),messageID:l.assistantMessage.id,sessionID:l.sessionID,snapshot:l.snapshot,type:"step-start"});return;case"finish-step":{let j=Ke.getUsage({model:l.model,usage:g.usage,metadata:g.providerMetadata});if(l.assistantMessage.finish=g.finishReason,l.assistantMessage.cost+=j.cost,l.assistantMessage.tokens=j.tokens,g.response?.modelId&&(l.assistantMessage.servedModelID=g.response.modelId),yield*a.updatePart({id:nt.ascending(),reason:g.finishReason,snapshot:yield*s.track(),messageID:l.assistantMessage.id,sessionID:l.assistantMessage.sessionID,type:"step-finish",tokens:j.tokens,cost:j.cost}),yield*a.updateMessage(l.assistantMessage),l.snapshot){let z=yield*s.patch(l.snapshot);z.files.length&&(yield*a.updatePart({id:nt.ascending(),messageID:l.assistantMessage.id,sessionID:l.sessionID,type:"patch",hash:z.hash,files:z.files})),l.snapshot=void 0}co.summarize({sessionID:l.sessionID,messageID:l.assistantMessage.parentID}),!l.assistantMessage.summary&&Ds({cfg:yield*d.get(),tokens:j.tokens,model:l.model})&&(l.needsCompaction=!0);return}case"text-start":l.currentText={id:nt.ascending(),messageID:l.assistantMessage.id,sessionID:l.assistantMessage.sessionID,type:"text",text:"",time:{start:Date.now()},metadata:g.providerMetadata},yield*a.updatePart(l.currentText);return;case"text-delta":if(!l.currentText)return;l.currentText.text+=g.text,g.providerMetadata&&(l.currentText.metadata=g.providerMetadata),yield*a.updatePartDelta({sessionID:l.currentText.sessionID,messageID:l.currentText.messageID,partID:l.currentText.id,field:"text",delta:g.text});return;case"text-end":if(!l.currentText)return;l.currentText.text=(yield*v.trigger("experimental.text.complete",{sessionID:l.sessionID,messageID:l.assistantMessage.id,partID:l.currentText.id},{text:l.currentText.text})).text,l.currentText.time={start:l.currentText.time?.start??Date.now(),end:Date.now()},g.providerMetadata&&(l.currentText.metadata=g.providerMetadata),yield*a.updatePart(l.currentText);let L=Dc(Ne.parts(l.assistantMessage.id),l.currentText);L&&(yield*a.removePart({sessionID:L.sessionID,messageID:L.messageID,partID:L.id})),l.currentText=void 0;return;case"finish":return;default:e.info("unhandled",{...g});return}}),T=Rt.fn("SessionProcessor.cleanup")(function*(){if(l.snapshot){let L=yield*s.patch(l.snapshot);L.files.length&&(yield*a.updatePart({id:nt.ascending(),messageID:l.assistantMessage.id,sessionID:l.sessionID,type:"patch",hash:L.hash,files:L.files})),l.snapshot=void 0}if(l.currentText){let L=Date.now();l.currentText.time={start:l.currentText.time?.start??L,end:L},yield*a.updatePart(l.currentText),l.currentText=void 0}for(let L of Object.values(l.reasoningMap)){let j=Date.now();yield*a.updatePart({...L,time:{start:L.time.start??j,end:j}})}l.reasoningMap={};let g=Ne.parts(l.assistantMessage.id);for(let L of g)L.type!=="tool"||L.state.status==="completed"||L.state.status==="error"||(yield*a.updatePart({...L,state:{...L.state,status:"error",error:"Tool execution aborted",time:{start:Date.now(),end:Date.now()}}}));l.assistantMessage.time.completed=Date.now(),yield*a.updateMessage(l.assistantMessage)}),R=Rt.fn("SessionProcessor.halt")(function*(g){e.error("process",{error:g,stack:g instanceof Error?g.stack:void 0});let L=y(g);if(Ne.ContextOverflowError.isInstance(L)){l.needsCompaction=!0,yield*b.publish(Ke.Event.Error,{sessionID:l.sessionID,error:L});return}l.assistantMessage.error=L,yield*b.publish(Ke.Event.Error,{sessionID:l.assistantMessage.sessionID,error:l.assistantMessage.error}),yield*I.set(l.sessionID,{type:"idle"})}),_=Rt.fn("SessionProcessor.abort")(()=>Rt.gen(function*(){if(l.assistantMessage.error||(yield*R(new DOMException("Aborted","AbortError"))),!l.assistantMessage.time.completed){yield*T();return}yield*a.updateMessage(l.assistantMessage)})),E=new Set,x=n(()=>Ne.parts(l.assistantMessage.id).filter(g=>!E.has(g.id)),"attemptParts"),k=n(g=>(g.type==="text"||g.type==="reasoning")&&!g.time?.end,"unfinished"),M=Rt.fn("SessionProcessor.dropAttempt")(function*(){l.currentText=void 0,l.reasoningMap={};for(let g of x())g.type!=="text"&&g.type!=="reasoning"&&g.type!=="step-start"||(yield*a.removePart({sessionID:g.sessionID,messageID:g.messageID,partID:g.id}))}),r=Rt.fn("SessionProcessor.keepFinished")(function*(g){if(!Ss.retryable(y(g)))return yield*Rt.fail(g);let L=x();if(!L.some(z=>z.type==="tool"&&(z.state.status==="completed"||z.state.status==="error")))return yield*Rt.fail(g);e.info("step failed after a tool finished; continuing from its finished items",{error:g}),l.currentText=void 0,l.reasoningMap={};for(let z of L)k(z)&&(yield*a.removePart({sessionID:z.sessionID,messageID:z.messageID,partID:z.id}));l.assistantMessage.finish="tool-calls"}),u=Rt.fn("SessionProcessor.process")(function*(g){e.info("process"),l.needsCompaction=!1,l.shouldBreak=(yield*d.get()).experimental?.continue_loop_on_deny!==!0;let L=0;return yield*Rt.gen(function*(){return yield*Rt.gen(function*(){L++>0&&(yield*M()),E=new Set(Ne.parts(l.assistantMessage.id).map(z=>z.id)),l.currentText=void 0,l.reasoningMap={},yield*w.stream(g).pipe(ir.tap(z=>D(z)),ir.takeUntil(()=>l.needsCompaction),ir.runDrain)}).pipe(Rt.onInterrupt(()=>Rt.sync(()=>{P=!0})),Rt.catchCauseIf(j=>!Oc.hasInterruptsOnly(j),j=>Rt.fail(Oc.squash(j))),Rt.catch(r),Rt.retry(Ss.policy({parse:y,set:n(j=>I.set(l.sessionID,{type:"retry",attempt:j.attempt,message:j.message,next:j.next}),"set")})),Rt.catch(R),Rt.ensuring(T())),P&&!l.assistantMessage.error&&(yield*_()),l.needsCompaction?"compact":l.blocked||l.assistantMessage.error||P?"stop":"continue"}).pipe(Rt.onInterrupt(()=>_().pipe(Rt.asVoid)))});return{get message(){return l.assistantMessage},partFromToolCall(g){return l.toolcalls[g]},abort:_,process:u}});return o.of({create:h})})),c.defaultLayer=Pn.unwrap(Rt.sync(()=>c.layer.pipe(Pn.provide(Ke.defaultLayer),Pn.provide(cn.defaultLayer),Pn.provide(In.defaultLayer),Pn.provide(rr.defaultLayer),Pn.provide(Ge.defaultLayer),Pn.provide(Mt.defaultLayer),Pn.provide(Lo.layer.pipe(Pn.provide(Me.layer))),Pn.provide(Me.layer),Pn.provide(Be.defaultLayer))))})(No||={});import{z as uh}from"zod";function Lt(t,e){let o=n(i=>{let m;try{m=t.parse(i)}catch(c){throw console.trace("schema validation failure stack trace:"),c instanceof uh.ZodError&&console.error("schema validation issues:",JSON.stringify(c.issues,null,2)),c}return e(m)},"result");return o.force=i=>e(i),o.schema=t,o}n(Lt,"fn");import{Effect as $n,Layer as eo,ServiceMap as ph}from"effect";import fh from"path";var Ts="The messages before this compaction, word for word (newest last):";function _c(t){let e=[];for(let m of t)if(!(m.info.role!=="user"||m.parts.some(c=>c.type==="compaction"))){for(let c of m.parts)if(!(c.type!=="text"||!c.text?.trim())){if(!c.synthetic)e.push(c.text.trim());else if(c.text.includes(Ts)){let a=c.text.slice(c.text.indexOf(Ts)+Ts.length).split(`
1198
+ `))}let y=!s.small&&s.model.variants&&s.user.variant?s.model.variants[s.user.variant]:{},D=s.small?jt.smallOptions(s.model):jt.options({model:s.model,sessionID:s.sessionID,providerOptions:v.options}),T=sh(D,Fi(s.model.options),Fi(s.agent.options),Fi(y));h&&(T.instructions=l.join(`
1199
+ `));let R=w instanceof kc,_=h||R?s.messages:[...l.map(r=>({role:"system",content:r})),...s.messages],E=await Mt.trigger("chat.params",{sessionID:s.sessionID,agent:s.agent.name,model:s.model,provider:v,message:s.user},{temperature:s.model.capabilities.temperature?s.agent.temperature??jt.temperature(s.model):void 0,topP:s.agent.topP??jt.topP(s.model),topK:jt.topK(s.model),maxOutputTokens:jt.maxOutputTokens(s.model),options:T}),{headers:x}=await Mt.trigger("chat.headers",{sessionID:s.sessionID,agent:s.agent.name,model:s.model,provider:v,message:s.user},{headers:{}}),k=await a(s);if((v.options?.litellmProxy===!0||s.model.providerID.toLowerCase().includes("litellm")||s.model.api.id.toLowerCase().includes("litellm"))&&Object.keys(k).length===0&&d(s.messages)&&(k._noop=oh({description:"Do not call this tool. It exists only for API compatibility and must never be invoked.",inputSchema:rh({type:"object",properties:{reason:{type:"string",description:"Unused"}}}),execute:n(async()=>({output:"",title:"",metadata:{}}),"execute")})),w instanceof kc){let r=w;r.systemPrompt=l.join(`
1200
+ `),r.toolExecutor=async(u,g,L)=>{let j=k[u];if(!j||!j.execute)return{result:"",error:`Unknown tool: ${u}`};try{let z=await j.execute(JSON.parse(g),{toolCallId:L,messages:s.messages,abortSignal:s.abort});return{result:typeof z=="string"?z:z?.output??JSON.stringify(z),metadata:typeof z=="object"?z?.metadata:void 0,title:typeof z=="object"?z?.title:void 0}}catch(z){return{result:"",error:z.message??String(z)}}}}return th({onError(r){p.error("stream error",{error:r})},async experimental_repairToolCall(r){let u=r.toolCall.toolName.toLowerCase();if(!k[r.toolCall.toolName]&&!k[u]){let g=u.replace(/^(?:mcp_|alchemy_)+/,""),L=Object.keys(k).filter(j=>j===g||j.endsWith(`_${g}`));if(g&&L.length===1)return p.info("repairing tool call",{tool:r.toolCall.toolName,repaired:L[0]}),{...r.toolCall,toolName:L[0]}}return u!==r.toolCall.toolName&&k[u]?(p.info("repairing tool call",{tool:r.toolCall.toolName,repaired:u}),{...r.toolCall,toolName:u}):{...r.toolCall,input:JSON.stringify({tool:r.toolCall.toolName,error:r.error.message}),toolName:"invalid"}},temperature:E.temperature,topP:E.topP,topK:E.topK,providerOptions:jt.providerOptions(s.model,E.options),activeTools:Object.keys(k).filter(r=>r!=="invalid"),tools:k,toolChoice:s.toolChoice,maxOutputTokens:E.maxOutputTokens,abortSignal:s.abort,headers:{...s.model.providerID.startsWith("opencode")?{"x-opencode-project":ne.project.id,"x-opencode-session":s.sessionID,"x-opencode-request":s.user.id,"x-opencode-client":ze.OPENCODE_CLIENT}:{"x-session-affinity":s.sessionID,...s.parentSessionID?{"x-parent-session-id":s.parentSessionID}:{},"User-Agent":`opencode/${Jt.VERSION}`},...s.model.headers,...x},maxRetries:s.retries??0,messages:_,model:nh({model:w,middleware:[{specificationVersion:"v3",async transformParams(r){return r.type==="stream"&&(r.params.prompt=jt.message(r.params.prompt,s.model,T)),r.params}}]}),experimental_telemetry:{isEnabled:f.experimental?.openTelemetry,metadata:{userId:f.username??"unknown",sessionId:s.sessionID}}})}b.stream=c,n(c,"stream");function a(s){let p=Ge.disabled(Object.keys(s.tools),Ge.merge(s.agent.permission,s.permission??[])),w=Qm.filter(s.tools,(f,v)=>s.user.tools?.[v]!==!1&&!p.has(v));return Object.fromEntries(Object.entries(w).toSorted(([f],[v])=>f<v?-1:f>v?1:0))}n(a,"resolveTools");function d(s){for(let p of s)if(Array.isArray(p.content)){for(let w of p.content)if(w.type==="tool-call"||w.type==="tool-result")return!0}return!1}b.hasToolCalls=d,n(d,"hasToolCalls")})(rr||={});function Dc(t,e){if(Ec(e)!=="final_answer")return;let o=e.text.trim();if(o)return t.find(i=>i.type==="text"&&i.id!==e.id&&Ec(i)==="commentary"&&i.text.trim()===o)}n(Dc,"repeatedPreamble");function Ec(t){for(let e of Object.values(t.metadata??{}))if(e&&typeof e=="object"&&typeof e.phase=="string")return e.phase}n(Ec,"phaseOf");var ih=2e4;function Ds(t){if(t.cfg.compaction?.auto===!1)return!1;let e=t.model.limit.context;if(e===0)return!1;let o=t.tokens.total||t.tokens.input+t.tokens.output+t.tokens.cache.read+t.tokens.cache.write,i=t.cfg.compaction?.reserved??Math.min(ih,jt.maxOutputTokens(t.model)),m=t.model.limit.input?t.model.limit.input-i:e-jt.maxOutputTokens(t.model);return o>=m}n(Ds,"isOverflow");import{Cause as Sc,Clock as ah,Duration as lh,Effect as Tc,Schedule as ch}from"effect";var Ss;(w=>{w.RETRY_MAX_ATTEMPTS=10,w.RETRY_INITIAL_DELAY=500,w.RETRY_BACKOFF_FACTOR=2,w.RETRY_MAX_BACKOFF=32e3,w.RETRY_JITTER=.25,w.RETRY_AFTER_MAX=6e5;function a(f){let v=f?.data.responseHeaders;if(!v)return;let I=Number.parseFloat(v["retry-after-ms"]??"");if(!Number.isNaN(I)&&I>=0)return I;let h=v["retry-after"];if(!h)return;let S=Number.parseFloat(h);if(!Number.isNaN(S)&&S>=0)return Math.ceil(S*1e3);let C=Date.parse(h)-Date.now();if(!Number.isNaN(C)&&C>0)return Math.ceil(C)}n(a,"retryAfter");function d(f,v,I=Math.random){let h=a(v);if(h!==void 0)return Math.min(h,6e5);let S=Math.min(500*Math.pow(2,f-1),32e3);return Math.round(S*(1+.25*I()))}w.delay=d,n(d,"delay");function b(f){return Ne.APIError.isInstance(f)&&!!f.data.responseBody?.includes("FreeUsageLimitError")}n(b,"uncapped");function s(f){if(Ne.ProviderQuotaError.isInstance(f)||Ne.ContextOverflowError.isInstance(f))return;if(Ne.APIError.isInstance(f))return f.data.isRetryable?f.data.responseBody?.includes("FreeUsageLimitError")?"Free usage exceeded, subscribe to Go https://opencode.ai/go":f.data.message.includes("Overloaded")?"Provider is overloaded":f.data.message:void 0;let v=Ct(()=>{try{return typeof f.data?.message=="string",JSON.parse(f.data.message)}catch{return}});if(!v||typeof v!="object")return;let I=typeof v.code=="string"?v.code:"";if(v.type==="error"&&v.error?.type==="too_many_requests")return"Too Many Requests";let h=typeof v.error?.code=="string"?v.error.code:"",S=typeof v.error?.type=="string"?v.error.type:"",C=typeof v.type=="string"?v.type:"";if(C==="api_error")return"Provider server error";if(C.includes("overloaded")||I.includes("exhausted")||I.includes("unavailable")||h.includes("exhausted")||h.includes("unavailable")||h.includes("overloaded")||S.includes("unavailable")||S.includes("overloaded")||h==="slow_down")return"Provider is overloaded";if(v.type==="error"&&typeof v.error?.code=="string"&&v.error.code.includes("rate_limit"))return"Rate Limited"}w.retryable=s,n(s,"retryable");function p(f){return ch.fromStepWithMetadata(Tc.succeed(v=>{let I=f.parse(v.input),h=s(I);return h?v.attempt>10&&!b(I)?Sc.done(v.attempt):Tc.gen(function*(){let S=d(v.attempt,Ne.APIError.isInstance(I)?I:void 0),C=yield*ah.currentTimeMillis;return yield*f.set({attempt:v.attempt,message:h,next:C+S}),[v.attempt,lh.millis(S)]}):Sc.done(v.attempt)}))}w.policy=p,n(p,"policy")})(Ss||={});import{Effect as sr,Layer as Pc,ServiceMap as dh}from"effect";import Tn from"zod";var Lo;(s=>{s.Info=Tn.union([Tn.object({type:Tn.literal("idle")}),Tn.object({type:Tn.literal("retry"),attempt:Tn.number(),message:Tn.string(),next:Tn.number()}),Tn.object({type:Tn.literal("busy")})]).meta({ref:"SessionStatus"}),s.Event={Status:ht.define("session.status",Tn.object({sessionID:Ee.zod,status:s.Info})),Idle:ht.define("session.idle",Tn.object({sessionID:Ee.zod}))};class o extends dh.Service()("@opencode/SessionStatus"){static{n(this,"Service")}}s.Service=o,s.layer=Pc.effect(o,sr.gen(function*(){let p=yield*Me.Service,w=yield*ae.make(sr.fn("SessionStatus.state")(()=>sr.succeed(new Map))),f=sr.fn("SessionStatus.get")(function*(h){return(yield*ae.get(w)).get(h)??{type:"idle"}}),v=sr.fn("SessionStatus.list")(function*(){return new Map(yield*ae.get(w))}),I=sr.fn("SessionStatus.set")(function*(h,S){let C=yield*ae.get(w);if(yield*p.publish(s.Event.Status,{sessionID:h,status:S}),S.type==="idle"){yield*p.publish(s.Event.Idle,{sessionID:h}),C.delete(h);return}C.set(h,S)});return o.of({get:f,list:v,set:I})}));let m=s.layer.pipe(Pc.provide(Me.layer)),{runPromise:c}=qe(o,m);async function a(p){return c(w=>w.get(p))}s.get=a,n(a,"get");async function d(){return c(p=>p.list())}s.list=d,n(d,"list");async function b(p,w){return c(f=>f.set(p,w))}s.set=b,n(b,"set")})(Lo||={});function Oc(t){let e=t instanceof Error?t.message:String(t),o=typeof import.meta.dirname=="string"?import.meta.dirname:void 0;return o&&e.includes("Cannot find module")&&e.includes(o)?"AlchemyLab's files were updated or rebuilt while it was running, so this tool can no longer load. Restart alchemylab to get the tools back.":e}n(Oc,"toolErrorText");var No;(c=>{let e=Ae.create({service:"session.processor"});class o extends uh.Service()("@opencode/SessionProcessor"){static{n(this,"Service")}}c.Service=o,c.layer=Pn.effect(o,Rt.gen(function*(){let a=yield*Ke.Service,d=yield*Be.Service,b=yield*Me.Service,s=yield*cn.Service,p=yield*In.Service,w=yield*rr.Service,f=yield*Ge.Service,v=yield*Mt.Service,I=yield*Lo.Service,h=Rt.fn("SessionProcessor.create")(function*(S){let C=yield*s.track(),l={assistantMessage:S.assistantMessage,sessionID:S.sessionID,model:S.model,toolcalls:{},shouldBreak:!1,snapshot:C,blocked:!1,needsCompaction:!1,currentText:void 0,reasoningMap:{}},P=!1,y=n(g=>Ne.fromError(g,{providerID:S.model.providerID,aborted:P}),"parse"),D=Rt.fn("SessionProcessor.handleEvent")(function*(g){switch(g.type){case"start":yield*I.set(l.sessionID,{type:"busy"});return;case"reasoning-start":if(g.id in l.reasoningMap)return;l.reasoningMap[g.id]={id:nt.ascending(),messageID:l.assistantMessage.id,sessionID:l.assistantMessage.sessionID,type:"reasoning",text:"",time:{start:Date.now()},metadata:g.providerMetadata},yield*a.updatePart(l.reasoningMap[g.id]);return;case"reasoning-delta":if(!(g.id in l.reasoningMap))return;l.reasoningMap[g.id].text+=g.text,g.providerMetadata&&(l.reasoningMap[g.id].metadata=g.providerMetadata),yield*a.updatePartDelta({sessionID:l.reasoningMap[g.id].sessionID,messageID:l.reasoningMap[g.id].messageID,partID:l.reasoningMap[g.id].id,field:"text",delta:g.text});return;case"reasoning-end":if(!(g.id in l.reasoningMap))return;l.reasoningMap[g.id].time={...l.reasoningMap[g.id].time,end:Date.now()},g.providerMetadata&&(l.reasoningMap[g.id].metadata=g.providerMetadata),yield*a.updatePart(l.reasoningMap[g.id]),delete l.reasoningMap[g.id];return;case"tool-input-start":if(l.assistantMessage.summary)throw new Error(`Tool call not allowed while generating summary: ${g.toolName}`);l.toolcalls[g.id]=yield*a.updatePart({id:l.toolcalls[g.id]?.id??nt.ascending(),messageID:l.assistantMessage.id,sessionID:l.assistantMessage.sessionID,type:"tool",tool:g.toolName,callID:g.id,state:{status:"pending",input:{},raw:""}});return;case"tool-input-delta":return;case"tool-input-end":return;case"tool-call":{if(l.assistantMessage.summary)throw new Error(`Tool call not allowed while generating summary: ${g.toolName}`);let j=l.toolcalls[g.toolCallId];if(!j)return;l.toolcalls[g.toolCallId]=yield*a.updatePart({...j,tool:g.toolName,state:{status:"running",input:g.input,time:{start:Date.now()}},metadata:g.providerMetadata});let V=Ne.parts(l.assistantMessage.id).slice(-3);if(V.length!==3||!V.every(G=>G.type==="tool"&&G.tool===g.toolName&&G.state.status!=="pending"&&JSON.stringify(G.state.input)===JSON.stringify(g.input)))return;let H=yield*p.get(l.assistantMessage.agent);yield*f.ask({permission:"doom_loop",patterns:[g.toolName],sessionID:l.assistantMessage.sessionID,metadata:{tool:g.toolName,input:g.input},always:[g.toolName],ruleset:H.permission});return}case"tool-result":{let j=l.toolcalls[g.toolCallId];if(!j||j.state.status!=="running")return;yield*a.updatePart({...j,state:{status:"completed",input:g.input??j.state.input,output:g.output.output,metadata:g.output.metadata,title:g.output.title,time:{start:j.state.time.start,end:Date.now()},attachments:g.output.attachments}}),delete l.toolcalls[g.toolCallId];return}case"tool-error":{let j=l.toolcalls[g.toolCallId];if(!j||j.state.status!=="running")return;yield*a.updatePart({...j,state:{status:"error",input:g.input??j.state.input,error:Oc(g.error),time:{start:j.state.time.start,end:Date.now()}}}),(g.error instanceof Ge.RejectedError||g.error instanceof Ln.RejectedError)&&(l.blocked=l.shouldBreak),delete l.toolcalls[g.toolCallId];return}case"error":throw g.error;case"start-step":l.snapshot||(l.snapshot=yield*s.track()),yield*a.updatePart({id:nt.ascending(),messageID:l.assistantMessage.id,sessionID:l.sessionID,snapshot:l.snapshot,type:"step-start"});return;case"finish-step":{let j=Ke.getUsage({model:l.model,usage:g.usage,metadata:g.providerMetadata});if(l.assistantMessage.finish=g.finishReason,l.assistantMessage.cost+=j.cost,l.assistantMessage.tokens=j.tokens,g.response?.modelId&&(l.assistantMessage.servedModelID=g.response.modelId),yield*a.updatePart({id:nt.ascending(),reason:g.finishReason,snapshot:yield*s.track(),messageID:l.assistantMessage.id,sessionID:l.assistantMessage.sessionID,type:"step-finish",tokens:j.tokens,cost:j.cost}),yield*a.updateMessage(l.assistantMessage),l.snapshot){let z=yield*s.patch(l.snapshot);z.files.length&&(yield*a.updatePart({id:nt.ascending(),messageID:l.assistantMessage.id,sessionID:l.sessionID,type:"patch",hash:z.hash,files:z.files})),l.snapshot=void 0}co.summarize({sessionID:l.sessionID,messageID:l.assistantMessage.parentID}),!l.assistantMessage.summary&&Ds({cfg:yield*d.get(),tokens:j.tokens,model:l.model})&&(l.needsCompaction=!0);return}case"text-start":l.currentText={id:nt.ascending(),messageID:l.assistantMessage.id,sessionID:l.assistantMessage.sessionID,type:"text",text:"",time:{start:Date.now()},metadata:g.providerMetadata},yield*a.updatePart(l.currentText);return;case"text-delta":if(!l.currentText)return;l.currentText.text+=g.text,g.providerMetadata&&(l.currentText.metadata=g.providerMetadata),yield*a.updatePartDelta({sessionID:l.currentText.sessionID,messageID:l.currentText.messageID,partID:l.currentText.id,field:"text",delta:g.text});return;case"text-end":if(!l.currentText)return;l.currentText.text=(yield*v.trigger("experimental.text.complete",{sessionID:l.sessionID,messageID:l.assistantMessage.id,partID:l.currentText.id},{text:l.currentText.text})).text,l.currentText.time={start:l.currentText.time?.start??Date.now(),end:Date.now()},g.providerMetadata&&(l.currentText.metadata=g.providerMetadata),yield*a.updatePart(l.currentText);let L=Dc(Ne.parts(l.assistantMessage.id),l.currentText);L&&(yield*a.removePart({sessionID:L.sessionID,messageID:L.messageID,partID:L.id})),l.currentText=void 0;return;case"finish":return;default:e.info("unhandled",{...g});return}}),T=Rt.fn("SessionProcessor.cleanup")(function*(){if(l.snapshot){let L=yield*s.patch(l.snapshot);L.files.length&&(yield*a.updatePart({id:nt.ascending(),messageID:l.assistantMessage.id,sessionID:l.sessionID,type:"patch",hash:L.hash,files:L.files})),l.snapshot=void 0}if(l.currentText){let L=Date.now();l.currentText.time={start:l.currentText.time?.start??L,end:L},yield*a.updatePart(l.currentText),l.currentText=void 0}for(let L of Object.values(l.reasoningMap)){let j=Date.now();yield*a.updatePart({...L,time:{start:L.time.start??j,end:j}})}l.reasoningMap={};let g=Ne.parts(l.assistantMessage.id);for(let L of g)L.type!=="tool"||L.state.status==="completed"||L.state.status==="error"||(yield*a.updatePart({...L,state:{...L.state,status:"error",error:"Tool execution aborted",time:{start:Date.now(),end:Date.now()}}}));l.assistantMessage.time.completed=Date.now(),yield*a.updateMessage(l.assistantMessage)}),R=Rt.fn("SessionProcessor.halt")(function*(g){e.error("process",{error:g,stack:g instanceof Error?g.stack:void 0});let L=y(g);if(Ne.ContextOverflowError.isInstance(L)){l.needsCompaction=!0,yield*b.publish(Ke.Event.Error,{sessionID:l.sessionID,error:L});return}l.assistantMessage.error=L,yield*b.publish(Ke.Event.Error,{sessionID:l.assistantMessage.sessionID,error:l.assistantMessage.error}),yield*I.set(l.sessionID,{type:"idle"})}),_=Rt.fn("SessionProcessor.abort")(()=>Rt.gen(function*(){if(l.assistantMessage.error||(yield*R(new DOMException("Aborted","AbortError"))),!l.assistantMessage.time.completed){yield*T();return}yield*a.updateMessage(l.assistantMessage)})),E=new Set,x=n(()=>Ne.parts(l.assistantMessage.id).filter(g=>!E.has(g.id)),"attemptParts"),k=n(g=>(g.type==="text"||g.type==="reasoning")&&!g.time?.end,"unfinished"),M=Rt.fn("SessionProcessor.dropAttempt")(function*(){l.currentText=void 0,l.reasoningMap={};for(let g of x())g.type!=="text"&&g.type!=="reasoning"&&g.type!=="step-start"||(yield*a.removePart({sessionID:g.sessionID,messageID:g.messageID,partID:g.id}))}),r=Rt.fn("SessionProcessor.keepFinished")(function*(g){if(!Ss.retryable(y(g)))return yield*Rt.fail(g);let L=x();if(!L.some(z=>z.type==="tool"&&(z.state.status==="completed"||z.state.status==="error")))return yield*Rt.fail(g);e.info("step failed after a tool finished; continuing from its finished items",{error:g}),l.currentText=void 0,l.reasoningMap={};for(let z of L)k(z)&&(yield*a.removePart({sessionID:z.sessionID,messageID:z.messageID,partID:z.id}));l.assistantMessage.finish="tool-calls"}),u=Rt.fn("SessionProcessor.process")(function*(g){e.info("process"),l.needsCompaction=!1,l.shouldBreak=(yield*d.get()).experimental?.continue_loop_on_deny!==!0;let L=0;return yield*Rt.gen(function*(){return yield*Rt.gen(function*(){L++>0&&(yield*M()),E=new Set(Ne.parts(l.assistantMessage.id).map(z=>z.id)),l.currentText=void 0,l.reasoningMap={},yield*w.stream(g).pipe(ir.tap(z=>D(z)),ir.takeUntil(()=>l.needsCompaction),ir.runDrain)}).pipe(Rt.onInterrupt(()=>Rt.sync(()=>{P=!0})),Rt.catchCauseIf(j=>!_c.hasInterruptsOnly(j),j=>Rt.fail(_c.squash(j))),Rt.catch(r),Rt.retry(Ss.policy({parse:y,set:n(j=>I.set(l.sessionID,{type:"retry",attempt:j.attempt,message:j.message,next:j.next}),"set")})),Rt.catch(R),Rt.ensuring(T())),P&&!l.assistantMessage.error&&(yield*_()),l.needsCompaction?"compact":l.blocked||l.assistantMessage.error||P?"stop":"continue"}).pipe(Rt.onInterrupt(()=>_().pipe(Rt.asVoid)))});return{get message(){return l.assistantMessage},partFromToolCall(g){return l.toolcalls[g]},abort:_,process:u}});return o.of({create:h})})),c.defaultLayer=Pn.unwrap(Rt.sync(()=>c.layer.pipe(Pn.provide(Ke.defaultLayer),Pn.provide(cn.defaultLayer),Pn.provide(In.defaultLayer),Pn.provide(rr.defaultLayer),Pn.provide(Ge.defaultLayer),Pn.provide(Mt.defaultLayer),Pn.provide(Lo.layer.pipe(Pn.provide(Me.layer))),Pn.provide(Me.layer),Pn.provide(Be.defaultLayer))))})(No||={});import{z as ph}from"zod";function Lt(t,e){let o=n(i=>{let m;try{m=t.parse(i)}catch(c){throw console.trace("schema validation failure stack trace:"),c instanceof ph.ZodError&&console.error("schema validation issues:",JSON.stringify(c.issues,null,2)),c}return e(m)},"result");return o.force=i=>e(i),o.schema=t,o}n(Lt,"fn");import{Effect as $n,Layer as eo,ServiceMap as fh}from"effect";import mh from"path";var Ts="The messages before this compaction, word for word (newest last):";function Rc(t){let e=[];for(let m of t)if(!(m.info.role!=="user"||m.parts.some(c=>c.type==="compaction"))){for(let c of m.parts)if(!(c.type!=="text"||!c.text?.trim())){if(!c.synthetic)e.push(c.text.trim());else if(c.text.includes(Ts)){let a=c.text.slice(c.text.indexOf(Ts)+Ts.length).split(`
1201
1201
 
1202
1202
  <<<END>>>`)[0];e.push(...a.split(`
1203
1203
 
@@ -1211,7 +1211,7 @@ ${o.join(`
1211
1211
 
1212
1212
  `)}
1213
1213
 
1214
- <<<END>>>`}n(_c,"wordsToCarry");var Ps;(I=>{let t=Ae.create({service:"session.compaction"});I.Event={Compacted:ht.define("session.compacted",qn.object({sessionID:Ee.zod}))};async function o(h,S){if(globalThis.process.env.OPENCODE_CLIENT!=="alchemy")return"";try{let C=JSON.parse(await Te.readText(fh.join(h,".alchemy_lab","action-server.json")));if(!C?.port)return"";let l=await fetch(`http://127.0.0.1:${C.port}/api/sessions/${encodeURIComponent(S)}/after-compaction`,{signal:AbortSignal.timeout(8e3)});if(!l.ok)return"";let P=await l.json();return String(P?.data?.text??"").trim()}catch{return""}}n(o,"recordsAfterCompaction"),I.PRUNE_MINIMUM=2e4,I.PRUNE_PROTECT=4e4;let c=["skill"];class a extends ph.Service()("@opencode/SessionCompaction"){static{n(this,"Service")}}I.Service=a,I.layer=eo.effect(a,$n.gen(function*(){let h=yield*Me.Service,S=yield*Be.Service,C=yield*Ke.Service,l=yield*In.Service,P=yield*Mt.Service,y=yield*No.Service,D=yield*Gt.Service,T=$n.fn("SessionCompaction.isOverflow")(function*(x){return Ds({cfg:yield*S.get(),tokens:x.tokens,model:x.model})}),R=$n.fn("SessionCompaction.prune")(function*(x){if((yield*S.get()).compaction?.prune===!1)return;t.info("pruning");let M=yield*C.messages({sessionID:x.sessionID}).pipe($n.catchIf(Do.isInstance,()=>$n.succeed(void 0)));if(!M)return;let r=0,u=0,g=[],L=0;e:for(let j=M.length-1;j>=0;j--){let z=M[j];if(z.info.role==="user"&&L++,!(L<2)){if(z.info.role==="assistant"&&z.info.summary)break e;for(let V=z.parts.length-1;V>=0;V--){let H=z.parts[V];if(H.type==="tool"&&H.state.status==="completed"){if(c.includes(H.tool))continue;if(H.state.time.compacted)break e;let G=Ui.estimate(H.state.output);r+=G,r>I.PRUNE_PROTECT&&(u+=G,g.push(H))}}}}if(t.info("found",{pruned:u,total:r}),u>I.PRUNE_MINIMUM){for(let j of g)j.state.status==="completed"&&(j.state.time.compacted=Date.now(),yield*C.updatePart(j));t.info("pruned",{count:g.length})}}),_=$n.fn("SessionCompaction.process")(function*(x){let k=x.messages.findLast(Y=>Y.info.id===x.parentID);if(!k||k.info.role!=="user")throw new Error(`Compaction parent must be a user message: ${x.parentID}`);let M=k.info,r=x.messages,u;if(x.overflow){let Y=x.messages.findIndex(q=>q.info.id===x.parentID);for(let q=Y-1;q>=0;q--){let te=x.messages[q];if(te.info.role==="user"&&!te.parts.some(ce=>ce.type==="compaction")){u={info:te.info,parts:te.parts},r=x.messages.slice(0,q);break}}u&&r.some(q=>q.info.role==="user"&&!q.parts.some(te=>te.type==="compaction"))||(u=void 0,r=x.messages)}let g=yield*l.get("compaction"),L=g.model?yield*D.getModel(g.model.providerID,g.model.modelID):yield*D.getModel(M.model.providerID,M.model.modelID),j=x.shared&&!x.overflow&&!g.model?x.shared:void 0,z=yield*P.trigger("experimental.session.compacting",{sessionID:x.sessionID},{context:[],prompt:void 0}),H=z.prompt??[`Provide a detailed prompt for continuing our conversation above.
1214
+ <<<END>>>`}n(Rc,"wordsToCarry");var Ps;(I=>{let t=Ae.create({service:"session.compaction"});I.Event={Compacted:ht.define("session.compacted",qn.object({sessionID:Ee.zod}))};async function o(h,S){if(globalThis.process.env.OPENCODE_CLIENT!=="alchemy")return"";try{let C=JSON.parse(await Te.readText(mh.join(h,".alchemy_lab","action-server.json")));if(!C?.port)return"";let l=await fetch(`http://127.0.0.1:${C.port}/api/sessions/${encodeURIComponent(S)}/after-compaction`,{signal:AbortSignal.timeout(8e3)});if(!l.ok)return"";let P=await l.json();return String(P?.data?.text??"").trim()}catch{return""}}n(o,"recordsAfterCompaction"),I.PRUNE_MINIMUM=2e4,I.PRUNE_PROTECT=4e4;let c=["skill"];class a extends fh.Service()("@opencode/SessionCompaction"){static{n(this,"Service")}}I.Service=a,I.layer=eo.effect(a,$n.gen(function*(){let h=yield*Me.Service,S=yield*Be.Service,C=yield*Ke.Service,l=yield*In.Service,P=yield*Mt.Service,y=yield*No.Service,D=yield*Gt.Service,T=$n.fn("SessionCompaction.isOverflow")(function*(x){return Ds({cfg:yield*S.get(),tokens:x.tokens,model:x.model})}),R=$n.fn("SessionCompaction.prune")(function*(x){if((yield*S.get()).compaction?.prune===!1)return;t.info("pruning");let M=yield*C.messages({sessionID:x.sessionID}).pipe($n.catchIf(Do.isInstance,()=>$n.succeed(void 0)));if(!M)return;let r=0,u=0,g=[],L=0;e:for(let j=M.length-1;j>=0;j--){let z=M[j];if(z.info.role==="user"&&L++,!(L<2)){if(z.info.role==="assistant"&&z.info.summary)break e;for(let V=z.parts.length-1;V>=0;V--){let H=z.parts[V];if(H.type==="tool"&&H.state.status==="completed"){if(c.includes(H.tool))continue;if(H.state.time.compacted)break e;let G=Ui.estimate(H.state.output);r+=G,r>I.PRUNE_PROTECT&&(u+=G,g.push(H))}}}}if(t.info("found",{pruned:u,total:r}),u>I.PRUNE_MINIMUM){for(let j of g)j.state.status==="completed"&&(j.state.time.compacted=Date.now(),yield*C.updatePart(j));t.info("pruned",{count:g.length})}}),_=$n.fn("SessionCompaction.process")(function*(x){let k=x.messages.findLast(Y=>Y.info.id===x.parentID);if(!k||k.info.role!=="user")throw new Error(`Compaction parent must be a user message: ${x.parentID}`);let M=k.info,r=x.messages,u;if(x.overflow){let Y=x.messages.findIndex(q=>q.info.id===x.parentID);for(let q=Y-1;q>=0;q--){let te=x.messages[q];if(te.info.role==="user"&&!te.parts.some(ce=>ce.type==="compaction")){u={info:te.info,parts:te.parts},r=x.messages.slice(0,q);break}}u&&r.some(q=>q.info.role==="user"&&!q.parts.some(te=>te.type==="compaction"))||(u=void 0,r=x.messages)}let g=yield*l.get("compaction"),L=g.model?yield*D.getModel(g.model.providerID,g.model.modelID):yield*D.getModel(M.model.providerID,M.model.modelID),j=x.shared&&!x.overflow&&!g.model?x.shared:void 0,z=yield*P.trigger("experimental.session.compacting",{sessionID:x.sessionID},{context:[],prompt:void 0}),H=z.prompt??[`Provide a detailed prompt for continuing our conversation above.
1215
1215
  Focus on information that would be helpful for continuing the conversation, including what we did, what we're doing, which files we're working on, and what we're going to do next.
1216
1216
  The summary that you construct will be used so that another agent can read it and continue the work.
1217
1217
  Do not call any tools. Respond only with the summary text.
@@ -1253,7 +1253,7 @@ When constructing the summary, try to stick to this template:
1253
1253
  [The next step, with the last instruction you were acting on quoted word for word.]
1254
1254
  ---`,...z.context].join(`
1255
1255
 
1256
- `),G=structuredClone(r);yield*P.trigger("experimental.chat.messages.transform",{},{messages:G});let ee=yield*Ne.toModelMessagesEffect(G,L,j?{}:{stripMedia:!0}),se=yield*ae.context,F={id:Ve.ascending(),role:"assistant",parentID:x.parentID,sessionID:x.sessionID,mode:"compaction",agent:"compaction",variant:M.variant,summary:!0,path:{cwd:se.directory,root:se.worktree},cost:0,tokens:{output:0,input:0,reasoning:0,cache:{read:0,write:0}},modelID:L.id,providerID:L.providerID,time:{created:Date.now()}};yield*C.updateMessage(F);let Z=yield*y.create({assistantMessage:F,sessionID:x.sessionID,model:L}),he={role:"user",content:[{type:"text",text:H}]};t.info(j?"compacting on the session's own prefix":"compacting without the session's prefix",{sessionID:x.sessionID,offered:!!x.shared,overflow:!!x.overflow,ownModel:!!g.model});let ge=yield*Z.process(j?{user:j.user,agent:j.agent,permission:j.permission,sessionID:x.sessionID,parentSessionID:j.parentSessionID,tools:j.tools,system:j.system,messages:[...ee,he],model:L}:{user:M,agent:g,sessionID:x.sessionID,tools:{},system:[],messages:[...ee,he],model:L}).pipe($n.onInterrupt(()=>Z.abort()));if(ge==="compact")return Z.message.error=new Ne.ContextOverflowError({message:u?"Conversation history too large to compact - exceeds model context limit":"Session too large to compact - context exceeds model limit even after stripping media"}).toObject(),Z.message.finish="error",yield*C.updateMessage(Z.message),"stop";if(ge==="continue"&&x.auto){if(u){let Y=u.info,N=yield*C.updateMessage({id:Ve.ascending(),role:"user",sessionID:x.sessionID,time:{created:Date.now()},agent:Y.agent,model:Y.model,format:Y.format,tools:Y.tools,system:Y.system,variant:Y.variant});for(let q of u.parts){if(q.type==="compaction")continue;let te=q.type==="file"&&Ne.isMedia(q.mime)?{type:"text",text:`[Attached ${q.mime}: ${q.filename??"file"}]`}:q;yield*C.updatePart({...te,id:nt.ascending(),messageID:N.id,sessionID:x.sessionID})}}if(!u){let Y=yield*C.updateMessage({id:Ve.ascending(),role:"user",sessionID:x.sessionID,time:{created:Date.now()},agent:M.agent,model:M.model}),N=yield*$n.promise(()=>o(se.directory,x.sessionID)),q=_c(x.messages),te=(x.overflow?`The previous request exceeded the provider's size limit due to large media attachments. The conversation was compacted and media files were removed from context. If the user was asking about attached images or files, explain that the attachments were too large to process and suggest they try again with smaller or fewer files.
1256
+ `),G=structuredClone(r);yield*P.trigger("experimental.chat.messages.transform",{},{messages:G});let ee=yield*Ne.toModelMessagesEffect(G,L,j?{}:{stripMedia:!0}),se=yield*ae.context,F={id:Ve.ascending(),role:"assistant",parentID:x.parentID,sessionID:x.sessionID,mode:"compaction",agent:"compaction",variant:M.variant,summary:!0,path:{cwd:se.directory,root:se.worktree},cost:0,tokens:{output:0,input:0,reasoning:0,cache:{read:0,write:0}},modelID:L.id,providerID:L.providerID,time:{created:Date.now()}};yield*C.updateMessage(F);let Z=yield*y.create({assistantMessage:F,sessionID:x.sessionID,model:L}),he={role:"user",content:[{type:"text",text:H}]};t.info(j?"compacting on the session's own prefix":"compacting without the session's prefix",{sessionID:x.sessionID,offered:!!x.shared,overflow:!!x.overflow,ownModel:!!g.model});let ge=yield*Z.process(j?{user:j.user,agent:j.agent,permission:j.permission,sessionID:x.sessionID,parentSessionID:j.parentSessionID,tools:j.tools,system:j.system,messages:[...ee,he],model:L}:{user:M,agent:g,sessionID:x.sessionID,tools:{},system:[],messages:[...ee,he],model:L}).pipe($n.onInterrupt(()=>Z.abort()));if(ge==="compact")return Z.message.error=new Ne.ContextOverflowError({message:u?"Conversation history too large to compact - exceeds model context limit":"Session too large to compact - context exceeds model limit even after stripping media"}).toObject(),Z.message.finish="error",yield*C.updateMessage(Z.message),"stop";if(ge==="continue"&&x.auto){if(u){let Y=u.info,N=yield*C.updateMessage({id:Ve.ascending(),role:"user",sessionID:x.sessionID,time:{created:Date.now()},agent:Y.agent,model:Y.model,format:Y.format,tools:Y.tools,system:Y.system,variant:Y.variant});for(let q of u.parts){if(q.type==="compaction")continue;let te=q.type==="file"&&Ne.isMedia(q.mime)?{type:"text",text:`[Attached ${q.mime}: ${q.filename??"file"}]`}:q;yield*C.updatePart({...te,id:nt.ascending(),messageID:N.id,sessionID:x.sessionID})}}if(!u){let Y=yield*C.updateMessage({id:Ve.ascending(),role:"user",sessionID:x.sessionID,time:{created:Date.now()},agent:M.agent,model:M.model}),N=yield*$n.promise(()=>o(se.directory,x.sessionID)),q=Rc(x.messages),te=(x.overflow?`The previous request exceeded the provider's size limit due to large media attachments. The conversation was compacted and media files were removed from context. If the user was asking about attached images or files, explain that the attachments were too large to process and suggest they try again with smaller or fewer files.
1257
1257
 
1258
1258
  `:"")+"This session was compacted automatically to free context: the summary above covers the earlier part of it, and nothing else has happened since. "+(q||N?`Below are the messages it received and the records as they stand now.
1259
1259
 
@@ -1263,10 +1263,10 @@ When constructing the summary, try to stick to this template:
1263
1263
 
1264
1264
  `:"")+(N?`${N}
1265
1265
 
1266
- `:"")+"Resume directly with the next step: do not acknowledge the summary, do not recap, and do not stop to report. Pick up the last task as if the break never happened.";yield*C.updatePart({id:nt.ascending(),messageID:Y.id,sessionID:x.sessionID,type:"text",synthetic:!0,text:te,time:{start:Date.now(),end:Date.now()}})}}return Z.message.error?"stop":(ge==="continue"&&(yield*h.publish(I.Event.Compacted,{sessionID:x.sessionID})),ge)}),E=$n.fn("SessionCompaction.create")(function*(x){let k=yield*C.updateMessage({id:Ve.ascending(),role:"user",model:x.model,sessionID:x.sessionID,agent:x.agent,time:{created:Date.now()}});yield*C.updatePart({id:nt.ascending(),messageID:k.id,sessionID:k.sessionID,type:"compaction",auto:x.auto,overflow:x.overflow})});return a.of({isOverflow:T,prune:R,process:_,create:E})})),I.defaultLayer=eo.unwrap($n.sync(()=>I.layer.pipe(eo.provide(Gt.defaultLayer),eo.provide(Ke.defaultLayer),eo.provide(No.defaultLayer),eo.provide(In.defaultLayer),eo.provide(Mt.defaultLayer),eo.provide(Me.layer),eo.provide(Be.defaultLayer))));let{runPromise:s}=qe(a,I.defaultLayer);async function p(h){return s(S=>S.isOverflow(h))}I.isOverflow=p,n(p,"isOverflow");async function w(h){return s(S=>S.prune(h))}I.prune=w,n(w,"prune"),I.process=Lt(qn.object({parentID:Ve.zod,messages:qn.custom(),sessionID:Ee.zod,auto:qn.boolean(),overflow:qn.boolean().optional()}),h=>s(S=>S.process(h))),I.create=Lt(qn.object({sessionID:Ee.zod,agent:qn.string(),model:qn.object({providerID:rt.zod,modelID:Et.zod}),auto:qn.boolean(),overflow:qn.boolean().optional()}),h=>s(S=>S.create(h)))})(Ps||={});var mh=new Set(["inbox-chat","via-herald"]);function Rc(t){let e=t.map(o=>o?.metadata?.alchemy?.kind).filter(o=>typeof o=="string"&&o.length>0);return e.length===0?!0:e.some(o=>mh.has(o))}n(Rc,"writtenByAPerson");var hh=/\bto=functions\.|^\s*functions\.[A-Za-z_]+\s*[({]/m;function Cc(t){let e=t.filter(m=>m.type==="text"),o=e.filter(m=>(m.text??"").trim().length>0&&!hh.test(m.text??"")),i=o.length>0?o[o.length-1]:void 0;return{drop:e.filter(m=>m!==i).map(m=>m.id),answered:i!==void 0}}n(Cc,"asideTextToDrop");import Lc from"os";import Qt from"path";import{Effect as Pt,Layer as Os,ServiceMap as gh}from"effect";import{FetchHttpClient as yh,HttpClient as Ac,HttpClientRequest as bh}from"effect/unstable/http";var wh=Ae.create({service:"instruction"}),Mc=["AGENTS.md",...ze.OPENCODE_DISABLE_CLAUDE_CODE_PROMPT?[]:["CLAUDE.md"],"CONTEXT.md"];function vh(){let t=[];return ze.OPENCODE_CONFIG_DIR&&t.push(Qt.join(ze.OPENCODE_CONFIG_DIR,"AGENTS.md")),t.push(Qt.join(wt.Path.config,"AGENTS.md")),ze.OPENCODE_DISABLE_CLAUDE_CODE_PROMPT||t.push(Qt.join(Lc.homedir(),".claude","CLAUDE.md")),t}n(vh,"globalFiles");function jc(t){let e=new Set;for(let o of t)for(let i of o.parts)if(i.type==="tool"&&i.tool==="read"&&i.state.status==="completed"){if(i.state.time.compacted)continue;let m=i.state.metadata?.loaded;if(!m||!Array.isArray(m))continue;for(let c of m)typeof c=="string"&&e.add(c)}return e}n(jc,"extract");var ho;(b=>{class t extends gh.Service()("@opencode/Instruction"){static{n(this,"Service")}}b.Service=t,b.layer=Os.effect(t,Pt.gen(function*(){let s=yield*Be.Service,p=yield*st.Service,w=Ac.filterStatusOk(Jr(yield*Ac.HttpClient)),f=yield*ae.make(Pt.fn("Instruction.state")(()=>Pt.succeed({claims:new Map}))),v=Pt.fnUntraced(function*(D){return ze.OPENCODE_DISABLE_PROJECT_CONFIG?ze.OPENCODE_CONFIG_DIR?yield*p.globUp(D,ze.OPENCODE_CONFIG_DIR,ze.OPENCODE_CONFIG_DIR).pipe(Pt.catch(()=>Pt.succeed([]))):(wh.warn(`Skipping relative instruction "${D}" - no OPENCODE_CONFIG_DIR set while project config is disabled`),[]):yield*p.globUp(D,ne.directory,ne.worktree).pipe(Pt.catch(()=>Pt.succeed([])))}),I=Pt.fnUntraced(function*(D){return yield*p.readFileString(D).pipe(Pt.catch(()=>Pt.succeed("")))}),h=Pt.fnUntraced(function*(D){let T=yield*w.execute(bh.get(D)).pipe(Pt.timeout(5e3),Pt.catch(()=>Pt.succeed(null)));if(!T)return"";let R=yield*T.arrayBuffer.pipe(Pt.catch(()=>Pt.succeed(new ArrayBuffer(0))));return new TextDecoder().decode(R)}),S=Pt.fn("Instruction.clear")(function*(D){(yield*ae.get(f)).claims.delete(D)}),C=Pt.fn("Instruction.systemPaths")(function*(){let D=yield*s.get(),T=new Set;if(!ze.OPENCODE_DISABLE_PROJECT_CONFIG)for(let R of Mc){let _=yield*p.findUp(R,ne.directory,ne.worktree);if(_.length>0){_.forEach(E=>T.add(Qt.resolve(E)));break}}for(let R of vh())if(yield*p.existsSafe(R)){T.add(Qt.resolve(R));break}if(D.instructions)for(let R of D.instructions){if(R.startsWith("https://")||R.startsWith("http://"))continue;let _=R.startsWith("~/")?Qt.join(Lc.homedir(),R.slice(2)):R;(yield*(Qt.isAbsolute(_)?p.glob(Qt.basename(_),{cwd:Qt.dirname(_),absolute:!0,include:"file"}):v(_)).pipe(Pt.catch(()=>Pt.succeed([])))).forEach(x=>T.add(Qt.resolve(x)))}return T}),l=Pt.fn("Instruction.system")(function*(){let D=yield*s.get(),T=yield*C(),R=(D.instructions??[]).filter(x=>x.startsWith("https://")||x.startsWith("http://")),_=yield*Pt.forEach(Array.from(T),I,{concurrency:8}),E=yield*Pt.forEach(R,h,{concurrency:4});return[...Array.from(T).flatMap((x,k)=>_[k]?[`Instructions from: ${x}
1266
+ `:"")+"Resume directly with the next step: do not acknowledge the summary, do not recap, and do not stop to report. Pick up the last task as if the break never happened.";yield*C.updatePart({id:nt.ascending(),messageID:Y.id,sessionID:x.sessionID,type:"text",synthetic:!0,text:te,time:{start:Date.now(),end:Date.now()}})}}return Z.message.error?"stop":(ge==="continue"&&(yield*h.publish(I.Event.Compacted,{sessionID:x.sessionID})),ge)}),E=$n.fn("SessionCompaction.create")(function*(x){let k=yield*C.updateMessage({id:Ve.ascending(),role:"user",model:x.model,sessionID:x.sessionID,agent:x.agent,time:{created:Date.now()}});yield*C.updatePart({id:nt.ascending(),messageID:k.id,sessionID:k.sessionID,type:"compaction",auto:x.auto,overflow:x.overflow})});return a.of({isOverflow:T,prune:R,process:_,create:E})})),I.defaultLayer=eo.unwrap($n.sync(()=>I.layer.pipe(eo.provide(Gt.defaultLayer),eo.provide(Ke.defaultLayer),eo.provide(No.defaultLayer),eo.provide(In.defaultLayer),eo.provide(Mt.defaultLayer),eo.provide(Me.layer),eo.provide(Be.defaultLayer))));let{runPromise:s}=qe(a,I.defaultLayer);async function p(h){return s(S=>S.isOverflow(h))}I.isOverflow=p,n(p,"isOverflow");async function w(h){return s(S=>S.prune(h))}I.prune=w,n(w,"prune"),I.process=Lt(qn.object({parentID:Ve.zod,messages:qn.custom(),sessionID:Ee.zod,auto:qn.boolean(),overflow:qn.boolean().optional()}),h=>s(S=>S.process(h))),I.create=Lt(qn.object({sessionID:Ee.zod,agent:qn.string(),model:qn.object({providerID:rt.zod,modelID:Et.zod}),auto:qn.boolean(),overflow:qn.boolean().optional()}),h=>s(S=>S.create(h)))})(Ps||={});var hh=new Set(["inbox-chat","via-herald"]);function Cc(t){let e=t.map(o=>o?.metadata?.alchemy?.kind).filter(o=>typeof o=="string"&&o.length>0);return e.length===0?!0:e.some(o=>hh.has(o))}n(Cc,"writtenByAPerson");var gh=/\bto=functions\.|^\s*functions\.[A-Za-z_]+\s*[({]/m;function Ac(t){let e=t.filter(m=>m.type==="text"),o=e.filter(m=>(m.text??"").trim().length>0&&!gh.test(m.text??"")),i=o.length>0?o[o.length-1]:void 0;return{drop:e.filter(m=>m!==i).map(m=>m.id),answered:i!==void 0}}n(Ac,"asideTextToDrop");import Nc from"os";import Qt from"path";import{Effect as Pt,Layer as Os,ServiceMap as yh}from"effect";import{FetchHttpClient as bh,HttpClient as Mc,HttpClientRequest as wh}from"effect/unstable/http";var vh=Ae.create({service:"instruction"}),jc=["AGENTS.md",...ze.OPENCODE_DISABLE_CLAUDE_CODE_PROMPT?[]:["CLAUDE.md"],"CONTEXT.md"];function xh(){let t=[];return ze.OPENCODE_CONFIG_DIR&&t.push(Qt.join(ze.OPENCODE_CONFIG_DIR,"AGENTS.md")),t.push(Qt.join(wt.Path.config,"AGENTS.md")),ze.OPENCODE_DISABLE_CLAUDE_CODE_PROMPT||t.push(Qt.join(Nc.homedir(),".claude","CLAUDE.md")),t}n(xh,"globalFiles");function Lc(t){let e=new Set;for(let o of t)for(let i of o.parts)if(i.type==="tool"&&i.tool==="read"&&i.state.status==="completed"){if(i.state.time.compacted)continue;let m=i.state.metadata?.loaded;if(!m||!Array.isArray(m))continue;for(let c of m)typeof c=="string"&&e.add(c)}return e}n(Lc,"extract");var ho;(b=>{class t extends yh.Service()("@opencode/Instruction"){static{n(this,"Service")}}b.Service=t,b.layer=Os.effect(t,Pt.gen(function*(){let s=yield*Be.Service,p=yield*st.Service,w=Mc.filterStatusOk(Jr(yield*Mc.HttpClient)),f=yield*ae.make(Pt.fn("Instruction.state")(()=>Pt.succeed({claims:new Map}))),v=Pt.fnUntraced(function*(D){return ze.OPENCODE_DISABLE_PROJECT_CONFIG?ze.OPENCODE_CONFIG_DIR?yield*p.globUp(D,ze.OPENCODE_CONFIG_DIR,ze.OPENCODE_CONFIG_DIR).pipe(Pt.catch(()=>Pt.succeed([]))):(vh.warn(`Skipping relative instruction "${D}" - no OPENCODE_CONFIG_DIR set while project config is disabled`),[]):yield*p.globUp(D,ne.directory,ne.worktree).pipe(Pt.catch(()=>Pt.succeed([])))}),I=Pt.fnUntraced(function*(D){return yield*p.readFileString(D).pipe(Pt.catch(()=>Pt.succeed("")))}),h=Pt.fnUntraced(function*(D){let T=yield*w.execute(wh.get(D)).pipe(Pt.timeout(5e3),Pt.catch(()=>Pt.succeed(null)));if(!T)return"";let R=yield*T.arrayBuffer.pipe(Pt.catch(()=>Pt.succeed(new ArrayBuffer(0))));return new TextDecoder().decode(R)}),S=Pt.fn("Instruction.clear")(function*(D){(yield*ae.get(f)).claims.delete(D)}),C=Pt.fn("Instruction.systemPaths")(function*(){let D=yield*s.get(),T=new Set;if(!ze.OPENCODE_DISABLE_PROJECT_CONFIG)for(let R of jc){let _=yield*p.findUp(R,ne.directory,ne.worktree);if(_.length>0){_.forEach(E=>T.add(Qt.resolve(E)));break}}for(let R of xh())if(yield*p.existsSafe(R)){T.add(Qt.resolve(R));break}if(D.instructions)for(let R of D.instructions){if(R.startsWith("https://")||R.startsWith("http://"))continue;let _=R.startsWith("~/")?Qt.join(Nc.homedir(),R.slice(2)):R;(yield*(Qt.isAbsolute(_)?p.glob(Qt.basename(_),{cwd:Qt.dirname(_),absolute:!0,include:"file"}):v(_)).pipe(Pt.catch(()=>Pt.succeed([])))).forEach(x=>T.add(Qt.resolve(x)))}return T}),l=Pt.fn("Instruction.system")(function*(){let D=yield*s.get(),T=yield*C(),R=(D.instructions??[]).filter(x=>x.startsWith("https://")||x.startsWith("http://")),_=yield*Pt.forEach(Array.from(T),I,{concurrency:8}),E=yield*Pt.forEach(R,h,{concurrency:4});return[...Array.from(T).flatMap((x,k)=>_[k]?[`Instructions from: ${x}
1267
1267
  ${_[k]}`]:[]),...R.flatMap((x,k)=>E[k]?[`Instructions from: ${x}
1268
- ${E[k]}`]:[])]}),P=Pt.fn("Instruction.find")(function*(D){for(let T of Mc){let R=Qt.resolve(Qt.join(D,T));if(yield*p.existsSafe(R))return R}}),y=Pt.fn("Instruction.resolve")(function*(D,T,R){let _=yield*C(),E=jc(D),x=[],k=yield*ae.get(f),M=Qt.resolve(T),r=Qt.resolve(ne.directory),u=Qt.dirname(M);for(;u.startsWith(r)&&u!==r;){let g=yield*P(u);if(!g||g===M||_.has(g)||E.has(g)){u=Qt.dirname(u);continue}let L=k.claims.get(R);if(L||(L=new Set,k.claims.set(R,L)),L.has(g)){u=Qt.dirname(u);continue}L.add(g);let j=yield*I(g);j&&x.push({filepath:g,content:`Instructions from: ${g}
1269
- ${j}`}),u=Qt.dirname(u)}return x});return t.of({clear:S,systemPaths:C,system:l,find:P,resolve:y})})),b.defaultLayer=b.layer.pipe(Os.provide(Be.defaultLayer),Os.provide(st.defaultLayer),Os.provide(yh.layer));let{runPromise:i}=qe(t,b.defaultLayer);function m(s){return i(p=>p.clear(s))}b.clear=m,n(m,"clear");async function c(){return i(s=>s.systemPaths())}b.systemPaths=c,n(c,"systemPaths");function a(s){return jc(s)}b.loaded=a,n(a,"loaded");async function d(s,p,w){return i(f=>f.resolve(s,p,w))}b.resolve=d,n(d,"resolve")})(ho||={});var Nc=`<system-reminder>
1268
+ ${E[k]}`]:[])]}),P=Pt.fn("Instruction.find")(function*(D){for(let T of jc){let R=Qt.resolve(Qt.join(D,T));if(yield*p.existsSafe(R))return R}}),y=Pt.fn("Instruction.resolve")(function*(D,T,R){let _=yield*C(),E=Lc(D),x=[],k=yield*ae.get(f),M=Qt.resolve(T),r=Qt.resolve(ne.directory),u=Qt.dirname(M);for(;u.startsWith(r)&&u!==r;){let g=yield*P(u);if(!g||g===M||_.has(g)||E.has(g)){u=Qt.dirname(u);continue}let L=k.claims.get(R);if(L||(L=new Set,k.claims.set(R,L)),L.has(g)){u=Qt.dirname(u);continue}L.add(g);let j=yield*I(g);j&&x.push({filepath:g,content:`Instructions from: ${g}
1269
+ ${j}`}),u=Qt.dirname(u)}return x});return t.of({clear:S,systemPaths:C,system:l,find:P,resolve:y})})),b.defaultLayer=b.layer.pipe(Os.provide(Be.defaultLayer),Os.provide(st.defaultLayer),Os.provide(bh.layer));let{runPromise:i}=qe(t,b.defaultLayer);function m(s){return i(p=>p.clear(s))}b.clear=m,n(m,"clear");async function c(){return i(s=>s.systemPaths())}b.systemPaths=c,n(c,"systemPaths");function a(s){return Lc(s)}b.loaded=a,n(a,"loaded");async function d(s,p,w){return i(f=>f.resolve(s,p,w))}b.resolve=d,n(d,"resolve")})(ho||={});var Uc=`<system-reminder>
1270
1270
  # Plan Mode - System Reminder
1271
1271
 
1272
1272
  CRITICAL: Plan mode ACTIVE - you are in READ-ONLY phase. STRICTLY FORBIDDEN:
@@ -1297,7 +1297,7 @@ Your operational mode has changed from plan to build.
1297
1297
  You are no longer in read-only mode.
1298
1298
  You are permitted to make file changes, run shell commands, and utilize your arsenal of tools as needed.
1299
1299
  </system-reminder>
1300
- `;var Uc=`CRITICAL - MAXIMUM STEPS REACHED
1300
+ `;var zc=`CRITICAL - MAXIMUM STEPS REACHED
1301
1301
 
1302
1302
  The maximum number of steps allowed for this task has been reached. Tools are disabled until next user input. Respond with text only.
1303
1303
 
@@ -1312,11 +1312,11 @@ Response must include:
1312
1312
  - List of any remaining tasks that were not completed
1313
1313
  - Recommendations for what should be done next
1314
1314
 
1315
- Any attempt to use tools is a critical violation. Respond with text ONLY.`;import{Cause as zc,Deferred as to,Effect as ot,Exit as Fc,Fiber as Nr,Option as xh,Schema as Ih,SynchronizedRef as go}from"effect";var $i;(o=>{class t extends Ih.TaggedErrorClass()("RunnerCancelled",{}){static{n(this,"Cancelled")}}o.Cancelled=t,o.make=n((i,m)=>{let c=go.makeUnsafe({_tag:"Idle"}),a=m?.onIdle??ot.void,d=m?.onBusy??ot.void,b=m?.onInterrupt,s=0,p=n(()=>go.getUnsafe(c),"state"),w=n(()=>(s+=1,s),"next"),f=n((D,T)=>Fc.isFailure(T)&&zc.hasInterruptsOnly(T.cause)?to.fail(D,new t).pipe(ot.asVoid):to.done(D,T).pipe(ot.asVoid),"complete"),v=n(()=>go.modify(c,D=>[D._tag==="Idle"?a:ot.void,D]).pipe(ot.flatten),"idleIfCurrent"),I=n((D,T,R)=>go.modify(c,_=>[ot.gen(function*(){_._tag==="Running"&&_.run.id===D&&(yield*a),yield*f(T,R)}),_._tag==="Running"&&_.run.id===D?{_tag:"Idle"}:_]).pipe(ot.flatten),"finishRun"),h=n((D,T)=>ot.gen(function*(){let R=w(),_=yield*D.pipe(ot.onExit(E=>I(R,T,E)),ot.forkIn(i));return{id:R,done:T,fiber:_}}),"startRun"),S=n(D=>go.modifyEffect(c,ot.fnUntraced(function*(T){if(T._tag==="Shell"&&T.shell.id===D)return[a,{_tag:"Idle"}];if(T._tag==="ShellThenRun"&&T.shell.id===D){let R=yield*h(T.run.work,T.run.done);return[ot.void,{_tag:"Running",run:R}]}return[ot.void,T]})).pipe(ot.flatten),"finishShell"),C=n(D=>ot.gen(function*(){D.abort.abort();let T=yield*Nr.await(D.fiber).pipe(ot.timeoutOption("100 millis"));xh.isNone(T)&&(yield*Nr.interrupt(D.fiber)),yield*Nr.await(D.fiber).pipe(ot.exit,ot.asVoid)}),"stopShell"),l=n(D=>go.modifyEffect(c,ot.fnUntraced(function*(T){switch(T._tag){case"Running":case"ShellThenRun":return[to.await(T.run.done),T];case"Shell":{let R={id:w(),done:yield*to.make(),work:D};return[to.await(R.done),{_tag:"ShellThenRun",shell:T.shell,run:R}]}case"Idle":{let R=yield*to.make(),_=yield*h(D,R);return[to.await(R),{_tag:"Running",run:_}]}}})).pipe(ot.flatten,ot.catch(T=>T instanceof t?b??ot.die(T):ot.fail(T))),"ensureRunning"),P=n(D=>go.modifyEffect(c,ot.fnUntraced(function*(T){if(T._tag!=="Idle")return[ot.sync(()=>{throw m?.busy&&m.busy(),new Error("Runner is busy")}),T];yield*d;let R=w(),_=new AbortController,E=yield*D(_.signal).pipe(ot.ensuring(S(R)),ot.forkChild),x={id:R,fiber:E,abort:_};return[ot.gen(function*(){let k=yield*Nr.await(E);return Fc.isSuccess(k)?k.value:zc.hasInterruptsOnly(k.cause)&&b?yield*b:yield*ot.failCause(k.cause)}),{_tag:"Shell",shell:x}]})).pipe(ot.flatten),"startShell"),y=go.modify(c,D=>{switch(D._tag){case"Idle":return[ot.void,D];case"Running":return[ot.gen(function*(){yield*Nr.interrupt(D.run.fiber),yield*to.await(D.run.done).pipe(ot.exit,ot.asVoid),yield*v()}),{_tag:"Idle"}];case"Shell":return[ot.gen(function*(){yield*C(D.shell),yield*v()}),{_tag:"Idle"}];case"ShellThenRun":return[ot.gen(function*(){yield*to.fail(D.run.done,new t).pipe(ot.asVoid),yield*C(D.shell),yield*v()}),{_tag:"Idle"}]}}).pipe(ot.flatten);return{get state(){return p()},get busy(){return p()._tag!=="Idle"},ensureRunning:l,startShell:P,cancel:y}},"make")})($i||={});import{DateTime as kh,Effect as On,Layer as Wi,Option as Eh,Semaphore as Dh,ServiceMap as Sh}from"effect";var rn;(p=>{let t=Ae.create({service:"file.time"}),e=n((w,f)=>{let v=w.get(f);if(v)return v;let I=new Map;return w.set(f,I),I},"session");class o extends Sh.Service()("@opencode/FileTime"){static{n(this,"Service")}}p.Service=o,p.layer=Wi.effect(o,On.gen(function*(){let w=yield*st.Service,f=yield*ze.OPENCODE_DISABLE_FILETIME_CHECK,v=On.fnUntraced(function*(y){let D=yield*w.stat(y).pipe(On.catch(()=>On.succeed(void 0)));return{read:yield*kh.nowAsDate,mtime:D?Eh.getOrUndefined(D.mtime)?.getTime():void 0,size:D?Number(D.size):void 0}}),I=yield*ae.make(On.fn("FileTime.state")(()=>On.succeed({reads:new Map,locks:new Map}))),h=On.fn("FileTime.lock")(function*(y){y=Te.normalizePath(y);let D=(yield*ae.get(I)).locks,T=D.get(y);if(T)return T;let R=Dh.makeUnsafe(1);return D.set(y,R),R}),S=On.fn("FileTime.read")(function*(y,D){D=Te.normalizePath(D);let T=(yield*ae.get(I)).reads;t.info("read",{sessionID:y,file:D}),e(T,y).set(D,yield*v(D))}),C=On.fn("FileTime.get")(function*(y,D){return D=Te.normalizePath(D),(yield*ae.get(I)).reads.get(y)?.get(D)?.read}),l=On.fn("FileTime.assert")(function*(y,D){if(f)return;D=Te.normalizePath(D);let R=(yield*ae.get(I)).reads.get(y)?.get(D);if(!R)throw new Error(`You must read file ${D} before overwriting it. Use the Read tool first`);let _=yield*v(D);if(_.mtime!==R.mtime||_.size!==R.size)throw new Error(`File ${D} has been modified since it was last read.
1315
+ Any attempt to use tools is a critical violation. Respond with text ONLY.`;import{Cause as Fc,Deferred as to,Effect as ot,Exit as qc,Fiber as Nr,Option as Ih,Schema as kh,SynchronizedRef as go}from"effect";var $i;(o=>{class t extends kh.TaggedErrorClass()("RunnerCancelled",{}){static{n(this,"Cancelled")}}o.Cancelled=t,o.make=n((i,m)=>{let c=go.makeUnsafe({_tag:"Idle"}),a=m?.onIdle??ot.void,d=m?.onBusy??ot.void,b=m?.onInterrupt,s=0,p=n(()=>go.getUnsafe(c),"state"),w=n(()=>(s+=1,s),"next"),f=n((D,T)=>qc.isFailure(T)&&Fc.hasInterruptsOnly(T.cause)?to.fail(D,new t).pipe(ot.asVoid):to.done(D,T).pipe(ot.asVoid),"complete"),v=n(()=>go.modify(c,D=>[D._tag==="Idle"?a:ot.void,D]).pipe(ot.flatten),"idleIfCurrent"),I=n((D,T,R)=>go.modify(c,_=>[ot.gen(function*(){_._tag==="Running"&&_.run.id===D&&(yield*a),yield*f(T,R)}),_._tag==="Running"&&_.run.id===D?{_tag:"Idle"}:_]).pipe(ot.flatten),"finishRun"),h=n((D,T)=>ot.gen(function*(){let R=w(),_=yield*D.pipe(ot.onExit(E=>I(R,T,E)),ot.forkIn(i));return{id:R,done:T,fiber:_}}),"startRun"),S=n(D=>go.modifyEffect(c,ot.fnUntraced(function*(T){if(T._tag==="Shell"&&T.shell.id===D)return[a,{_tag:"Idle"}];if(T._tag==="ShellThenRun"&&T.shell.id===D){let R=yield*h(T.run.work,T.run.done);return[ot.void,{_tag:"Running",run:R}]}return[ot.void,T]})).pipe(ot.flatten),"finishShell"),C=n(D=>ot.gen(function*(){D.abort.abort();let T=yield*Nr.await(D.fiber).pipe(ot.timeoutOption("100 millis"));Ih.isNone(T)&&(yield*Nr.interrupt(D.fiber)),yield*Nr.await(D.fiber).pipe(ot.exit,ot.asVoid)}),"stopShell"),l=n(D=>go.modifyEffect(c,ot.fnUntraced(function*(T){switch(T._tag){case"Running":case"ShellThenRun":return[to.await(T.run.done),T];case"Shell":{let R={id:w(),done:yield*to.make(),work:D};return[to.await(R.done),{_tag:"ShellThenRun",shell:T.shell,run:R}]}case"Idle":{let R=yield*to.make(),_=yield*h(D,R);return[to.await(R),{_tag:"Running",run:_}]}}})).pipe(ot.flatten,ot.catch(T=>T instanceof t?b??ot.die(T):ot.fail(T))),"ensureRunning"),P=n(D=>go.modifyEffect(c,ot.fnUntraced(function*(T){if(T._tag!=="Idle")return[ot.sync(()=>{throw m?.busy&&m.busy(),new Error("Runner is busy")}),T];yield*d;let R=w(),_=new AbortController,E=yield*D(_.signal).pipe(ot.ensuring(S(R)),ot.forkChild),x={id:R,fiber:E,abort:_};return[ot.gen(function*(){let k=yield*Nr.await(E);return qc.isSuccess(k)?k.value:Fc.hasInterruptsOnly(k.cause)&&b?yield*b:yield*ot.failCause(k.cause)}),{_tag:"Shell",shell:x}]})).pipe(ot.flatten),"startShell"),y=go.modify(c,D=>{switch(D._tag){case"Idle":return[ot.void,D];case"Running":return[ot.gen(function*(){yield*Nr.interrupt(D.run.fiber),yield*to.await(D.run.done).pipe(ot.exit,ot.asVoid),yield*v()}),{_tag:"Idle"}];case"Shell":return[ot.gen(function*(){yield*C(D.shell),yield*v()}),{_tag:"Idle"}];case"ShellThenRun":return[ot.gen(function*(){yield*to.fail(D.run.done,new t).pipe(ot.asVoid),yield*C(D.shell),yield*v()}),{_tag:"Idle"}]}}).pipe(ot.flatten);return{get state(){return p()},get busy(){return p()._tag!=="Idle"},ensureRunning:l,startShell:P,cancel:y}},"make")})($i||={});import{DateTime as Eh,Effect as On,Layer as Wi,Option as Dh,Semaphore as Sh,ServiceMap as Th}from"effect";var rn;(p=>{let t=Ae.create({service:"file.time"}),e=n((w,f)=>{let v=w.get(f);if(v)return v;let I=new Map;return w.set(f,I),I},"session");class o extends Th.Service()("@opencode/FileTime"){static{n(this,"Service")}}p.Service=o,p.layer=Wi.effect(o,On.gen(function*(){let w=yield*st.Service,f=yield*ze.OPENCODE_DISABLE_FILETIME_CHECK,v=On.fnUntraced(function*(y){let D=yield*w.stat(y).pipe(On.catch(()=>On.succeed(void 0)));return{read:yield*Eh.nowAsDate,mtime:D?Dh.getOrUndefined(D.mtime)?.getTime():void 0,size:D?Number(D.size):void 0}}),I=yield*ae.make(On.fn("FileTime.state")(()=>On.succeed({reads:new Map,locks:new Map}))),h=On.fn("FileTime.lock")(function*(y){y=Te.normalizePath(y);let D=(yield*ae.get(I)).locks,T=D.get(y);if(T)return T;let R=Sh.makeUnsafe(1);return D.set(y,R),R}),S=On.fn("FileTime.read")(function*(y,D){D=Te.normalizePath(D);let T=(yield*ae.get(I)).reads;t.info("read",{sessionID:y,file:D}),e(T,y).set(D,yield*v(D))}),C=On.fn("FileTime.get")(function*(y,D){return D=Te.normalizePath(D),(yield*ae.get(I)).reads.get(y)?.get(D)?.read}),l=On.fn("FileTime.assert")(function*(y,D){if(f)return;D=Te.normalizePath(D);let R=(yield*ae.get(I)).reads.get(y)?.get(D);if(!R)throw new Error(`You must read file ${D} before overwriting it. Use the Read tool first`);let _=yield*v(D);if(_.mtime!==R.mtime||_.size!==R.size)throw new Error(`File ${D} has been modified since it was last read.
1316
1316
  Last modification: ${new Date(_.mtime??_.read.getTime()).toISOString()}
1317
1317
  Last read: ${R.read.toISOString()}
1318
1318
 
1319
- Please read the file again before modifying it.`)}),P=On.fn("FileTime.withLock")(function*(y,D){return yield*On.promise(D).pipe((yield*h(y)).withPermits(1))});return o.of({read:S,get:C,assert:l,withLock:P})})).pipe(Wi.orDie),p.defaultLayer=p.layer.pipe(Wi.provide(st.defaultLayer));let{runPromise:c}=qe(o,p.defaultLayer);function a(w,f){return c(v=>v.read(w,f))}p.read=a,n(a,"read");function d(w,f){return c(v=>v.get(w,f))}p.get=d,n(d,"get");async function b(w,f){return c(v=>v.assert(w,f))}p.assert=b,n(b,"assert");async function s(w,f){return c(v=>v.withLock(w,f))}p.withLock=s,n(s,"withLock")})(rn||={});import{ulid as Vc}from"ulid";import{ChildProcess as Ch,ChildProcessSpawner as Ah}from"effect/unstable/process";import*as Ms from"effect/Stream";import{Effect as ar,Layer as _s,ServiceMap as Th}from"effect";import pn from"zod";var Bi=`Create or update \`AGENTS.md\` for this repository.
1319
+ Please read the file again before modifying it.`)}),P=On.fn("FileTime.withLock")(function*(y,D){return yield*On.promise(D).pipe((yield*h(y)).withPermits(1))});return o.of({read:S,get:C,assert:l,withLock:P})})).pipe(Wi.orDie),p.defaultLayer=p.layer.pipe(Wi.provide(st.defaultLayer));let{runPromise:c}=qe(o,p.defaultLayer);function a(w,f){return c(v=>v.read(w,f))}p.read=a,n(a,"read");function d(w,f){return c(v=>v.get(w,f))}p.get=d,n(d,"get");async function b(w,f){return c(v=>v.assert(w,f))}p.assert=b,n(b,"assert");async function s(w,f){return c(v=>v.withLock(w,f))}p.withLock=s,n(s,"withLock")})(rn||={});import{ulid as Yc}from"ulid";import{ChildProcess as Ah,ChildProcessSpawner as Mh}from"effect/unstable/process";import*as Ms from"effect/Stream";import{Effect as ar,Layer as _s,ServiceMap as Ph}from"effect";import pn from"zod";var Bi=`Create or update \`AGENTS.md\` for this repository.
1320
1320
 
1321
1321
  The goal is a compact instruction file that helps future OpenCode sessions avoid mistakes and ramp up quickly. Every line should answer: "Would an agent likely miss this without help?" If not, leave it out.
1322
1322
 
@@ -1483,17 +1483,17 @@ If you're uncertain about something and can't verify it with these tools, say "I
1483
1483
  4. Your tone should be matter-of-fact and not accusatory or overly positive. It should read as a helpful AI assistant suggestion without sounding too much like a human reviewer.
1484
1484
  5. Write so the reader can quickly understand the issue without reading too closely.
1485
1485
  6. AVOID flattery, do not give any comments that are not helpful to the reader. Avoid phrasing like "Great job ...", "Thanks for ...".
1486
- `;var Uo;(p=>{let t=Ae.create({service:"command"});p.Event={Executed:ht.define("command.executed",pn.object({name:pn.string(),sessionID:Ee.zod,arguments:pn.string(),messageID:Ve.zod}))},p.Info=pn.object({name:pn.string(),description:pn.string().optional(),agent:pn.string().optional(),model:pn.string().optional(),source:pn.enum(["command","mcp","skill"]).optional(),template:pn.promise(pn.string()).or(pn.string()),subtask:pn.boolean().optional(),hints:pn.array(pn.string())}).meta({ref:"Command"});function i(w){let f=[],v=w.match(/\$\d+/g);if(v)for(let I of[...new Set(v)].sort())f.push(I);return w.includes("$ARGUMENTS")&&f.push("$ARGUMENTS"),f}p.hints=i,n(i,"hints"),p.Default={INIT:"init",REVIEW:"review"};class c extends Th.Service()("@opencode/Command"){static{n(this,"Service")}}p.Service=c,p.layer=_s.effect(c,ar.gen(function*(){let w=yield*Be.Service,f=yield*Yo.Service,v=yield*un.Service,I=ar.fn("Command.state")(function*(l){let P=yield*w.get(),y={};y[p.Default.INIT]={name:p.Default.INIT,description:"guided AGENTS.md setup",source:"command",get template(){return Bi.replace("${path}",l.worktree)},hints:i(Bi)},y[p.Default.REVIEW]={name:p.Default.REVIEW,description:"review changes [commit|branch|pr], defaults to uncommitted",source:"command",get template(){return Gi.replace("${path}",l.worktree)},subtask:!0,hints:i(Gi)};for(let[D,T]of Object.entries(P.command??{}))y[D]={name:D,agent:T.agent,model:T.model,description:T.description,source:"command",get template(){return T.template},subtask:T.subtask,hints:i(T.template)};for(let[D,T]of Object.entries(yield*f.prompts()))y[D]={name:D,source:"mcp",description:T.description,get template(){return ar.runPromise(f.getPrompt(T.client,T.name,T.arguments?Object.fromEntries(T.arguments.map((R,_)=>[R.name,`$${_+1}`])):{}).pipe(ar.map(R=>R?.messages.map(_=>_.content.type==="text"?_.content.text:"").join(`
1487
- `)||"")))},hints:T.arguments?.map((R,_)=>`$${_+1}`)??[]};for(let D of yield*v.all())y[D.name]||(y[D.name]={name:D.name,description:D.description,source:"skill",get template(){return D.content},hints:[]});return{commands:y}}),h=yield*ae.make(l=>I(l)),S=ar.fn("Command.get")(function*(l){return(yield*ae.get(h)).commands[l]}),C=ar.fn("Command.list")(function*(){let l=yield*ae.get(h);return Object.values(l.commands)});return c.of({get:S,list:C})})),p.defaultLayer=p.layer.pipe(_s.provide(Be.defaultLayer),_s.provide(Yo.defaultLayer),_s.provide(un.defaultLayer));let{runPromise:b}=qe(c,p.defaultLayer);async function s(){return b(w=>w.list())}p.list=s,n(s,"list")})(Uo||={});import{pathToFileURL as Mh,fileURLToPath as jh}from"url";import Rs from"path";import{spawn as Ph}from"child_process";import{setTimeout as qc}from"node:timers/promises";var $c=200,yo;(I=>{let t=new Set(["fish","nu"]),e=new Set(["bash","dash","fish","ksh","sh","zsh"]),o=new Set(["bash","dash","ksh","sh","zsh"]);async function i(h,S){let C=h.pid;if(!(!C||S?.exited?.())){if(process.platform==="win32"){await new Promise(l=>{let P=Ph("taskkill",["/pid",String(C),"/f","/t"],{stdio:"ignore",windowsHide:!0});P.once("exit",()=>l()),P.once("error",()=>l())});return}try{process.kill(-C,"SIGTERM"),await qc($c),S?.exited?.()||process.kill(-C,"SIGKILL")}catch{h.kill("SIGTERM"),await qc($c),S?.exited?.()||h.kill("SIGKILL")}}}I.killTree=i,n(i,"killTree");function m(h){if(process.platform!=="win32")return h;let S=Te.windowsPath(h);return Rs.win32.dirname(S)!=="."?S.startsWith("/")&&s(S)==="bash"&&d()||S:Bun.which(S)||S}n(m,"full");function c(){let h=Bun.which("pwsh");if(h)return h;let S=Bun.which("powershell");if(S)return S}n(c,"pick");function a(h,S){if(h&&(!S?.acceptable||!t.has(s(h))))return m(h);if(process.platform==="win32"){let C=c();if(C)return C}return b()}n(a,"select");function d(){if(process.platform!=="win32")return;if(ze.OPENCODE_GIT_BASH_PATH)return ze.OPENCODE_GIT_BASH_PATH;let h=kt("git");if(!h)return;let S=Rs.join(h,"..","..","bin","bash.exe");if(Te.stat(S)?.size)return S}I.gitbash=d,n(d,"gitbash");function b(){if(process.platform==="win32"){let S=d();return S||process.env.COMSPEC||"cmd.exe"}if(process.platform==="darwin")return"/bin/zsh";let h=kt("bash");return h||"/bin/sh"}n(b,"fallback");function s(h){return process.platform==="win32"?Rs.win32.parse(Te.windowsPath(h)).name.toLowerCase():Rs.basename(h).toLowerCase()}I.name=s,n(s,"name");function p(h){return e.has(s(h))}I.login=p,n(p,"login");function w(h){return o.has(s(h))}I.posix=w,n(w,"posix"),I.preferred=Gn(()=>a(process.env.SHELL)),I.acceptable=Gn(()=>a(process.env.SHELL,{acceptable:!0}))})(yo||={});function Wc(t){let e=t.indexOf(",");if(e===-1)return"";let o=t.slice(0,e),i=t.slice(e+1);return o.includes(";base64")?Buffer.from(i,"base64").toString("utf8"):decodeURIComponent(i)}n(Wc,"decodeDataUrl");import{Cause as lr,Effect as oe,Exit as zr,Layer as Yt,Option as Lh,Scope as Nh,ServiceMap as Uh}from"effect";import Bc from"fs";import Oh from"path";var Cs=Ae.create({service:"session.pause"}),Gc=Oh.join(wt.Path.state,"pause.json"),zo=!1,Fo=new Set;try{let t=JSON.parse(Bc.readFileSync(Gc,"utf8"));zo=t?.paused===!0;for(let e of Array.isArray(t?.waiting)?t.waiting:[])typeof e=="string"&&Fo.add(e)}catch{}function Hi(){try{Bc.writeFileSync(Gc,JSON.stringify({paused:zo,waiting:[...Fo]}))}catch(t){Cs.warn("could not save the pause state",{error:String(t)})}}n(Hi,"save");var qo;(c=>{function t(){return zo}c.isPaused=t,n(t,"isPaused");function e(a){Fo.has(a)||(Fo.add(a),Cs.info("turn held while paused",{sessionID:a}),Hi())}c.hold=e,n(e,"hold");function o(){zo||(zo=!0,Cs.info("paused"),Hi())}c.pause=o,n(o,"pause");function i(){let a=[...Fo];return zo=!1,Fo.clear(),Cs.info("resumed",{waiting:a.length}),Hi(),a}c.resume=i,n(i,"resume");function m(){return{paused:zo,waiting:[...Fo]}}c.state=m,n(m,"state")})(qo||={});globalThis.AI_SDK_LOG_WARNINGS=!1;var zh=`Use this tool to return your final response in the requested structured format.
1486
+ `;var Uo;(p=>{let t=Ae.create({service:"command"});p.Event={Executed:ht.define("command.executed",pn.object({name:pn.string(),sessionID:Ee.zod,arguments:pn.string(),messageID:Ve.zod}))},p.Info=pn.object({name:pn.string(),description:pn.string().optional(),agent:pn.string().optional(),model:pn.string().optional(),source:pn.enum(["command","mcp","skill"]).optional(),template:pn.promise(pn.string()).or(pn.string()),subtask:pn.boolean().optional(),hints:pn.array(pn.string())}).meta({ref:"Command"});function i(w){let f=[],v=w.match(/\$\d+/g);if(v)for(let I of[...new Set(v)].sort())f.push(I);return w.includes("$ARGUMENTS")&&f.push("$ARGUMENTS"),f}p.hints=i,n(i,"hints"),p.Default={INIT:"init",REVIEW:"review"};class c extends Ph.Service()("@opencode/Command"){static{n(this,"Service")}}p.Service=c,p.layer=_s.effect(c,ar.gen(function*(){let w=yield*Be.Service,f=yield*Yo.Service,v=yield*un.Service,I=ar.fn("Command.state")(function*(l){let P=yield*w.get(),y={};y[p.Default.INIT]={name:p.Default.INIT,description:"guided AGENTS.md setup",source:"command",get template(){return Bi.replace("${path}",l.worktree)},hints:i(Bi)},y[p.Default.REVIEW]={name:p.Default.REVIEW,description:"review changes [commit|branch|pr], defaults to uncommitted",source:"command",get template(){return Gi.replace("${path}",l.worktree)},subtask:!0,hints:i(Gi)};for(let[D,T]of Object.entries(P.command??{}))y[D]={name:D,agent:T.agent,model:T.model,description:T.description,source:"command",get template(){return T.template},subtask:T.subtask,hints:i(T.template)};for(let[D,T]of Object.entries(yield*f.prompts()))y[D]={name:D,source:"mcp",description:T.description,get template(){return ar.runPromise(f.getPrompt(T.client,T.name,T.arguments?Object.fromEntries(T.arguments.map((R,_)=>[R.name,`$${_+1}`])):{}).pipe(ar.map(R=>R?.messages.map(_=>_.content.type==="text"?_.content.text:"").join(`
1487
+ `)||"")))},hints:T.arguments?.map((R,_)=>`$${_+1}`)??[]};for(let D of yield*v.all())y[D.name]||(y[D.name]={name:D.name,description:D.description,source:"skill",get template(){return D.content},hints:[]});return{commands:y}}),h=yield*ae.make(l=>I(l)),S=ar.fn("Command.get")(function*(l){return(yield*ae.get(h)).commands[l]}),C=ar.fn("Command.list")(function*(){let l=yield*ae.get(h);return Object.values(l.commands)});return c.of({get:S,list:C})})),p.defaultLayer=p.layer.pipe(_s.provide(Be.defaultLayer),_s.provide(Yo.defaultLayer),_s.provide(un.defaultLayer));let{runPromise:b}=qe(c,p.defaultLayer);async function s(){return b(w=>w.list())}p.list=s,n(s,"list")})(Uo||={});import{pathToFileURL as jh,fileURLToPath as Lh}from"url";import Rs from"path";import{spawn as Oh}from"child_process";import{setTimeout as $c}from"node:timers/promises";var Wc=200,yo;(I=>{let t=new Set(["fish","nu"]),e=new Set(["bash","dash","fish","ksh","sh","zsh"]),o=new Set(["bash","dash","ksh","sh","zsh"]);async function i(h,S){let C=h.pid;if(!(!C||S?.exited?.())){if(process.platform==="win32"){await new Promise(l=>{let P=Oh("taskkill",["/pid",String(C),"/f","/t"],{stdio:"ignore",windowsHide:!0});P.once("exit",()=>l()),P.once("error",()=>l())});return}try{process.kill(-C,"SIGTERM"),await $c(Wc),S?.exited?.()||process.kill(-C,"SIGKILL")}catch{h.kill("SIGTERM"),await $c(Wc),S?.exited?.()||h.kill("SIGKILL")}}}I.killTree=i,n(i,"killTree");function m(h){if(process.platform!=="win32")return h;let S=Te.windowsPath(h);return Rs.win32.dirname(S)!=="."?S.startsWith("/")&&s(S)==="bash"&&d()||S:Bun.which(S)||S}n(m,"full");function c(){let h=Bun.which("pwsh");if(h)return h;let S=Bun.which("powershell");if(S)return S}n(c,"pick");function a(h,S){if(h&&(!S?.acceptable||!t.has(s(h))))return m(h);if(process.platform==="win32"){let C=c();if(C)return C}return b()}n(a,"select");function d(){if(process.platform!=="win32")return;if(ze.OPENCODE_GIT_BASH_PATH)return ze.OPENCODE_GIT_BASH_PATH;let h=kt("git");if(!h)return;let S=Rs.join(h,"..","..","bin","bash.exe");if(Te.stat(S)?.size)return S}I.gitbash=d,n(d,"gitbash");function b(){if(process.platform==="win32"){let S=d();return S||process.env.COMSPEC||"cmd.exe"}if(process.platform==="darwin")return"/bin/zsh";let h=kt("bash");return h||"/bin/sh"}n(b,"fallback");function s(h){return process.platform==="win32"?Rs.win32.parse(Te.windowsPath(h)).name.toLowerCase():Rs.basename(h).toLowerCase()}I.name=s,n(s,"name");function p(h){return e.has(s(h))}I.login=p,n(p,"login");function w(h){return o.has(s(h))}I.posix=w,n(w,"posix"),I.preferred=Gn(()=>a(process.env.SHELL)),I.acceptable=Gn(()=>a(process.env.SHELL,{acceptable:!0}))})(yo||={});function Bc(t){let e=t.indexOf(",");if(e===-1)return"";let o=t.slice(0,e),i=t.slice(e+1);return o.includes(";base64")?Buffer.from(i,"base64").toString("utf8"):decodeURIComponent(i)}n(Bc,"decodeDataUrl");import{Cause as lr,Effect as oe,Exit as zr,Layer as Yt,Option as Nh,Scope as Uh,ServiceMap as zh}from"effect";import Gc from"fs";import _h from"path";var Cs=Ae.create({service:"session.pause"}),Hc=_h.join(wt.Path.state,"pause.json"),zo=!1,Fo=new Set;try{let t=JSON.parse(Gc.readFileSync(Hc,"utf8"));zo=t?.paused===!0;for(let e of Array.isArray(t?.waiting)?t.waiting:[])typeof e=="string"&&Fo.add(e)}catch{}function Hi(){try{Gc.writeFileSync(Hc,JSON.stringify({paused:zo,waiting:[...Fo]}))}catch(t){Cs.warn("could not save the pause state",{error:String(t)})}}n(Hi,"save");var qo;(c=>{function t(){return zo}c.isPaused=t,n(t,"isPaused");function e(a){Fo.has(a)||(Fo.add(a),Cs.info("turn held while paused",{sessionID:a}),Hi())}c.hold=e,n(e,"hold");function o(){zo||(zo=!0,Cs.info("paused"),Hi())}c.pause=o,n(o,"pause");function i(){let a=[...Fo];return zo=!1,Fo.clear(),Cs.info("resumed",{waiting:a.length}),Hi(),a}c.resume=i,n(i,"resume");function m(){return{paused:zo,waiting:[...Fo]}}c.state=m,n(m,"state")})(qo||={});globalThis.AI_SDK_LOG_WARNINGS=!1;var Fh=`Use this tool to return your final response in the requested structured format.
1488
1488
 
1489
1489
  IMPORTANT:
1490
1490
  - You MUST call this tool exactly once at the end of your response
1491
1491
  - The input must be valid JSON matching the required schema
1492
1492
  - Complete all necessary research and tool calls BEFORE calling this tool
1493
- - This tool provides your final answer - no further actions are taken after calling it`,Fh="IMPORTANT: The user has requested structured output. You MUST use the StructuredOutput tool to provide your final response. Do NOT respond with plain text - you MUST call the StructuredOutput tool with your answer formatted according to the schema.",Fn;(T=>{let t=Ae.create({service:"session.prompt"});class e extends Uh.Service()("@opencode/SessionPrompt"){static{n(this,"Service")}}T.Service=e,T.layer=Yt.effect(e,oe.gen(function*(){let R=yield*Me.Service,_=yield*Lo.Service,E=yield*Ke.Service,x=yield*In.Service,k=yield*Gt.Service,M=yield*No.Service,r=yield*Ps.Service,u=yield*Mt.Service,g=yield*Uo.Service,L=yield*Ge.Service,j=yield*st.Service,z=yield*Yo.Service,V=yield*ct.Service,H=yield*rn.Service,G=yield*As.Service,ee=yield*ln.Service,se=yield*Ah.ChildProcessSpawner,F=yield*Nh.Scope,Z=yield*ho.Service,he=yield*ae.make(oe.fn("SessionPrompt.state")(function*(){let O=new Map;return yield*oe.addFinalizer(oe.fnUntraced(function*(){yield*oe.forEach(O.values(),W=>W.cancel,{concurrency:"unbounded",discard:!0}),O.clear()})),{runners:O}})),ge=n((O,W)=>{let K=O.get(W);if(K)return K;let B=$i.make(F,{onIdle:oe.gen(function*(){O.delete(W),yield*_.set(W,{type:"idle"})}),onBusy:_.set(W,{type:"busy"}),onInterrupt:Qe(W),busy:n(()=>{throw new Ke.BusyError(W)},"busy")});return O.set(W,B),B},"getRunner"),Y=oe.fn("SessionPrompt.assertNotBusy")(function*(O){if((yield*ae.get(he)).runners.get(O)?.busy)throw new Ke.BusyError(O)}),N=oe.fn("SessionPrompt.cancel")(function*(O){t.info("cancel",{sessionID:O});let K=(yield*ae.get(he)).runners.get(O);if(!K||!K.busy){yield*_.set(O,{type:"idle"});return}yield*K.cancel}),q=oe.fn("SessionPrompt.stopForPause")(function*(){let W=[...(yield*ae.get(he)).runners.entries()].filter(([,K])=>K.busy);for(let[K]of W)qo.hold(K);return yield*oe.forEach(W,([,K])=>K.cancel,{concurrency:"unbounded",discard:!0}),W.map(([K])=>K)}),te=oe.fn("SessionPrompt.resolvePromptParts")(function*(O){let W=yield*ae.context,K=[{type:"text",text:O}],B=Vo.files(O),re=new Set;return yield*oe.forEach(B,oe.fnUntraced(function*(ve){let $=ve[1];if(re.has($))return;re.add($);let _e=$.startsWith("~/")?Ur.join(_h.homedir(),$.slice(2)):Ur.resolve(W.worktree,$),De=yield*j.stat(_e).pipe(oe.option);if(Lh.isNone(De)){let $e=yield*x.get($);$e&&K.push({type:"agent",name:$e.name});return}let He=De.value;K.push({type:"file",url:Mh(_e).href,filename:$,mime:He.type==="Directory"?"application/x-directory":"text/plain"})}),{concurrency:"unbounded",discard:!0}),K}),ce=oe.fn("SessionPrompt.ensureTitle")(function*(O){if(O.session.parentID||!Ke.isDefaultTitle(O.session.title))return;let W=n(Se=>Se.info.role==="user"&&!Se.parts.every(Ze=>"synthetic"in Ze&&Ze.synthetic),"real"),K=O.history.findIndex(W);if(K===-1||O.history.filter(W).length!==1)return;let B=O.history.slice(0,K+1),re=B[K];if(!re||re.info.role!=="user")return;let ve=re.info,$=re.parts.filter(Se=>Se.type==="subtask"),_e=$.length>0&&re.parts.every(Se=>Se.type==="subtask"),De=yield*x.get("title");if(!De)return;let He=De.model?yield*k.getModel(De.model.providerID,De.model.modelID):(yield*k.getSmallModel(O.providerID))??(yield*k.getModel(O.providerID,O.modelID)),$e=_e?[{role:"user",content:$.map(Se=>Se.prompt).join(`
1493
+ - This tool provides your final answer - no further actions are taken after calling it`,qh="IMPORTANT: The user has requested structured output. You MUST use the StructuredOutput tool to provide your final response. Do NOT respond with plain text - you MUST call the StructuredOutput tool with your answer formatted according to the schema.",Fn;(T=>{let t=Ae.create({service:"session.prompt"});class e extends zh.Service()("@opencode/SessionPrompt"){static{n(this,"Service")}}T.Service=e,T.layer=Yt.effect(e,oe.gen(function*(){let R=yield*Me.Service,_=yield*Lo.Service,E=yield*Ke.Service,x=yield*In.Service,k=yield*Gt.Service,M=yield*No.Service,r=yield*Ps.Service,u=yield*Mt.Service,g=yield*Uo.Service,L=yield*Ge.Service,j=yield*st.Service,z=yield*Yo.Service,V=yield*ct.Service,H=yield*rn.Service,G=yield*As.Service,ee=yield*ln.Service,se=yield*Mh.ChildProcessSpawner,F=yield*Uh.Scope,Z=yield*ho.Service,he=yield*ae.make(oe.fn("SessionPrompt.state")(function*(){let O=new Map;return yield*oe.addFinalizer(oe.fnUntraced(function*(){yield*oe.forEach(O.values(),W=>W.cancel,{concurrency:"unbounded",discard:!0}),O.clear()})),{runners:O}})),ge=n((O,W)=>{let K=O.get(W);if(K)return K;let B=$i.make(F,{onIdle:oe.gen(function*(){O.delete(W),yield*_.set(W,{type:"idle"})}),onBusy:_.set(W,{type:"busy"}),onInterrupt:Qe(W),busy:n(()=>{throw new Ke.BusyError(W)},"busy")});return O.set(W,B),B},"getRunner"),Y=oe.fn("SessionPrompt.assertNotBusy")(function*(O){if((yield*ae.get(he)).runners.get(O)?.busy)throw new Ke.BusyError(O)}),N=oe.fn("SessionPrompt.cancel")(function*(O){t.info("cancel",{sessionID:O});let K=(yield*ae.get(he)).runners.get(O);if(!K||!K.busy){yield*_.set(O,{type:"idle"});return}yield*K.cancel}),q=oe.fn("SessionPrompt.stopForPause")(function*(){let W=[...(yield*ae.get(he)).runners.entries()].filter(([,K])=>K.busy);for(let[K]of W)qo.hold(K);return yield*oe.forEach(W,([,K])=>K.cancel,{concurrency:"unbounded",discard:!0}),W.map(([K])=>K)}),te=oe.fn("SessionPrompt.resolvePromptParts")(function*(O){let W=yield*ae.context,K=[{type:"text",text:O}],B=Vo.files(O),re=new Set;return yield*oe.forEach(B,oe.fnUntraced(function*(ve){let $=ve[1];if(re.has($))return;re.add($);let _e=$.startsWith("~/")?Ur.join(Rh.homedir(),$.slice(2)):Ur.resolve(W.worktree,$),De=yield*j.stat(_e).pipe(oe.option);if(Nh.isNone(De)){let $e=yield*x.get($);$e&&K.push({type:"agent",name:$e.name});return}let He=De.value;K.push({type:"file",url:jh(_e).href,filename:$,mime:He.type==="Directory"?"application/x-directory":"text/plain"})}),{concurrency:"unbounded",discard:!0}),K}),ce=oe.fn("SessionPrompt.ensureTitle")(function*(O){if(O.session.parentID||!Ke.isDefaultTitle(O.session.title))return;let W=n(Se=>Se.info.role==="user"&&!Se.parts.every(Ze=>"synthetic"in Ze&&Ze.synthetic),"real"),K=O.history.findIndex(W);if(K===-1||O.history.filter(W).length!==1)return;let B=O.history.slice(0,K+1),re=B[K];if(!re||re.info.role!=="user")return;let ve=re.info,$=re.parts.filter(Se=>Se.type==="subtask"),_e=$.length>0&&re.parts.every(Se=>Se.type==="subtask"),De=yield*x.get("title");if(!De)return;let He=De.model?yield*k.getModel(De.model.providerID,De.model.modelID):(yield*k.getSmallModel(O.providerID))??(yield*k.getModel(O.providerID,O.modelID)),$e=_e?[{role:"user",content:$.map(Se=>Se.prompt).join(`
1494
1494
  `)}]:yield*Ne.toModelMessagesEffect(B,He),je=(yield*oe.promise(async Se=>(await rr.stream({agent:De,user:ve,system:[],small:!0,tools:{},model:He,abort:Se,sessionID:O.session.id,retries:2,messages:[{role:"user",content:`Generate a title for this conversation:
1495
1495
  `},...$e]})).text)).replace(/<think>[\s\S]*?<\/think>\s*/g,"").split(`
1496
- `).map(Se=>Se.trim()).find(Se=>Se.length>0);if(!je)return;let Ce=je.length>100?je.substring(0,97)+"...":je;yield*E.setTitle({sessionID:O.session.id,title:Ce}).pipe(oe.catchCause(Se=>oe.sync(()=>t.error("failed to generate title",{error:lr.squash(Se)}))))}),Q=oe.fn("SessionPrompt.insertReminders")(function*(O){let W=O.messages.findLast($=>$.info.role==="user");if(!W)return O.messages;if(!ze.OPENCODE_EXPERIMENTAL_PLAN_MODE)return O.agent.name==="plan"&&W.parts.push({id:nt.ascending(),messageID:W.info.id,sessionID:W.info.sessionID,type:"text",text:Nc,synthetic:!0}),O.messages.some(_e=>_e.info.role==="assistant"&&_e.info.agent==="plan")&&O.agent.name==="build"&&W.parts.push({id:nt.ascending(),messageID:W.info.id,sessionID:W.info.sessionID,type:"text",text:qi,synthetic:!0}),O.messages;let K=O.messages.findLast($=>$.info.role==="assistant");if(O.agent.name!=="plan"&&K?.info.agent==="plan"){let $=Ke.plan(O.session);if(!(yield*j.existsSafe($)))return O.messages;let _e=yield*E.updatePart({id:nt.ascending(),messageID:W.info.id,sessionID:W.info.sessionID,type:"text",text:qi+`
1496
+ `).map(Se=>Se.trim()).find(Se=>Se.length>0);if(!je)return;let Ce=je.length>100?je.substring(0,97)+"...":je;yield*E.setTitle({sessionID:O.session.id,title:Ce}).pipe(oe.catchCause(Se=>oe.sync(()=>t.error("failed to generate title",{error:lr.squash(Se)}))))}),Q=oe.fn("SessionPrompt.insertReminders")(function*(O){let W=O.messages.findLast($=>$.info.role==="user");if(!W)return O.messages;if(!ze.OPENCODE_EXPERIMENTAL_PLAN_MODE)return O.agent.name==="plan"&&W.parts.push({id:nt.ascending(),messageID:W.info.id,sessionID:W.info.sessionID,type:"text",text:Uc,synthetic:!0}),O.messages.some(_e=>_e.info.role==="assistant"&&_e.info.agent==="plan")&&O.agent.name==="build"&&W.parts.push({id:nt.ascending(),messageID:W.info.id,sessionID:W.info.sessionID,type:"text",text:qi,synthetic:!0}),O.messages;let K=O.messages.findLast($=>$.info.role==="assistant");if(O.agent.name!=="plan"&&K?.info.agent==="plan"){let $=Ke.plan(O.session);if(!(yield*j.existsSafe($)))return O.messages;let _e=yield*E.updatePart({id:nt.ascending(),messageID:W.info.id,sessionID:W.info.sessionID,type:"text",text:qi+`
1497
1497
 
1498
1498
  A plan file exists at ${$}. You should execute on the plan defined within it`,synthetic:!0});return W.parts.push(_e),O.messages}if(O.agent.name!=="plan"||K?.info.agent==="plan")return O.messages;let B=Ke.plan(O.session),re=yield*j.existsSafe(B);re||(yield*j.ensureDir(Ur.dirname(B)).pipe(oe.catch(oe.die)));let ve=yield*E.updatePart({id:nt.ascending(),messageID:W.info.id,sessionID:W.info.sessionID,type:"text",text:`<system-reminder>
1499
1499
  Plan mode is active. The user indicated that they do not want you to execute yet -- you MUST NOT make any edits (with the exception of the plan file mentioned below), run any non-readonly tools (including changing configs or making commits), or otherwise make any changes to the system. This supersedes any other instructions you have received.
@@ -1564,9 +1564,9 @@ This is critical - your turn should only end with either asking the user a quest
1564
1564
  **Important:** Use question tool to clarify requirements/approach, use plan_exit to request plan approval. Do NOT use question tool to ask "Is this plan okay?" - that's what plan_exit does.
1565
1565
 
1566
1566
  NOTE: At any point in time through this workflow you should feel free to ask the user questions or clarifications. Don't make large assumptions about user intent. The goal is to present a well researched plan to the user, and tie any loose ends before implementation begins.
1567
- </system-reminder>`,synthetic:!0});return W.parts.push(ve),O.messages}),ie=oe.fn("SessionPrompt.resolveTools")(function*(O){var _e=[];try{let W=Mn(_e,t.time("resolveTools"));let K={};let B=Ge.merge(O.agent.permission,O.session.permission??[]);let re=n((pe,je)=>({sessionID:O.session.id,abort:je.abortSignal,messageID:O.processor.message.id,callID:je.toolCallId,extra:{model:O.model,bypassAgentCheck:O.bypassAgentCheck},agent:O.agent.name,messages:O.messages,metadata:n(Ce=>oe.runPromise(oe.gen(function*(){let Se=O.processor.partFromToolCall(je.toolCallId);!Se||!["running","pending"].includes(Se.state.status)||(yield*E.updatePart({...Se,state:{title:Ce.title,metadata:Ce.metadata,status:"running",input:pe,time:Se.state.status==="running"?Se.state.time:{start:Date.now()}}}))})),"metadata"),ask:n(Ce=>oe.runPromise(L.ask({...Ce,sessionID:O.session.id,tool:{messageID:O.processor.message.id,callID:je.toolCallId},ruleset:B})),"ask")}),"context");for(let pe of yield*G.tools({modelID:Et.make(O.model.api.id),providerID:O.model.providerID},O.agent)){let je=jt.schema(O.model,Ot.toJSONSchema(pe.parameters));K[pe.id]=Hc({id:pe.id,description:pe.description,inputSchema:Vi(je),execute(Ce,Se){return oe.runPromise(oe.gen(function*(){let Ze=re(Ce,Se);yield*u.trigger("tool.execute.before",{tool:pe.id,sessionID:Ze.sessionID,callID:Ze.callID},{args:Ce});let yt=yield*oe.promise(()=>pe.execute(Ce,Ze)),at={...yt,attachments:yt.attachments?.map(We=>({...We,id:nt.ascending(),sessionID:Ze.sessionID,messageID:O.processor.message.id}))};return yield*u.trigger("tool.execute.after",{tool:pe.id,sessionID:Ze.sessionID,callID:Ze.callID,args:Ce},at),at}))}})}let ve=Object.entries(yield*z.tools());let $=Ge.disabled(ve.map(([pe])=>pe),B);for(let[pe,je]of ve){if($.has(pe))continue;let Ce=je.execute;if(!Ce)continue;let Se=yield*oe.promise(()=>Promise.resolve(Rh(je.inputSchema).jsonSchema)),Ze=jt.schema(O.model,Se);je.inputSchema=Vi(Ze),je.execute=(yt,at)=>oe.runPromise(oe.gen(function*(){let We=re(yt,at),bt=yield*oe.promise(()=>import("./mcp-JSKIR2KQ.js"));bt.MCP.currentToolContext={sessionId:We.sessionID,messageId:We.messageID},yield*u.trigger("tool.execute.before",{tool:pe,sessionID:We.sessionID,callID:at.toolCallId},{args:yt}),yield*oe.promise(()=>We.ask({permission:pe,metadata:{},patterns:["*"],always:["*"]}));let Re=yield*oe.promise(()=>Ce(yt,at));yield*u.trigger("tool.execute.after",{tool:pe,sessionID:We.sessionID,callID:at.toolCallId,args:yt},Re);let Le=[],et=[];for(let zt of Re.content)if(zt.type==="text")Le.push(zt.text);else if(zt.type==="image")et.push({type:"file",mime:zt.mimeType,url:`data:${zt.mimeType};base64,${zt.data}`});else if(zt.type==="resource"){let{resource:An}=zt;An.text&&Le.push(An.text),An.blob&&et.push({type:"file",mime:An.mimeType??"application/octet-stream",url:`data:${An.mimeType??"application/octet-stream"};base64,${An.blob}`,filename:An.uri})}let lt=yield*ee.output(Le.join(`
1567
+ </system-reminder>`,synthetic:!0});return W.parts.push(ve),O.messages}),ie=oe.fn("SessionPrompt.resolveTools")(function*(O){var _e=[];try{let W=Mn(_e,t.time("resolveTools"));let K={};let B=Ge.merge(O.agent.permission,O.session.permission??[]);let re=n((pe,je)=>({sessionID:O.session.id,abort:je.abortSignal,messageID:O.processor.message.id,callID:je.toolCallId,extra:{model:O.model,bypassAgentCheck:O.bypassAgentCheck},agent:O.agent.name,messages:O.messages,metadata:n(Ce=>oe.runPromise(oe.gen(function*(){let Se=O.processor.partFromToolCall(je.toolCallId);!Se||!["running","pending"].includes(Se.state.status)||(yield*E.updatePart({...Se,state:{title:Ce.title,metadata:Ce.metadata,status:"running",input:pe,time:Se.state.status==="running"?Se.state.time:{start:Date.now()}}}))})),"metadata"),ask:n(Ce=>oe.runPromise(L.ask({...Ce,sessionID:O.session.id,tool:{messageID:O.processor.message.id,callID:je.toolCallId},ruleset:B})),"ask")}),"context");for(let pe of yield*G.tools({modelID:Et.make(O.model.api.id),providerID:O.model.providerID},O.agent)){let je=jt.schema(O.model,Ot.toJSONSchema(pe.parameters));K[pe.id]=Vc({id:pe.id,description:pe.description,inputSchema:Vi(je),execute(Ce,Se){return oe.runPromise(oe.gen(function*(){let Ze=re(Ce,Se);yield*u.trigger("tool.execute.before",{tool:pe.id,sessionID:Ze.sessionID,callID:Ze.callID},{args:Ce});let yt=yield*oe.promise(()=>pe.execute(Ce,Ze)),at={...yt,attachments:yt.attachments?.map(We=>({...We,id:nt.ascending(),sessionID:Ze.sessionID,messageID:O.processor.message.id}))};return yield*u.trigger("tool.execute.after",{tool:pe.id,sessionID:Ze.sessionID,callID:Ze.callID,args:Ce},at),at}))}})}let ve=Object.entries(yield*z.tools());let $=Ge.disabled(ve.map(([pe])=>pe),B);for(let[pe,je]of ve){if($.has(pe))continue;let Ce=je.execute;if(!Ce)continue;let Se=yield*oe.promise(()=>Promise.resolve(Ch(je.inputSchema).jsonSchema)),Ze=jt.schema(O.model,Se);je.inputSchema=Vi(Ze),je.execute=(yt,at)=>oe.runPromise(oe.gen(function*(){let We=re(yt,at),bt=yield*oe.promise(()=>import("./mcp-3MLN7453.js"));bt.MCP.currentToolContext={sessionId:We.sessionID,messageId:We.messageID},yield*u.trigger("tool.execute.before",{tool:pe,sessionID:We.sessionID,callID:at.toolCallId},{args:yt}),yield*oe.promise(()=>We.ask({permission:pe,metadata:{},patterns:["*"],always:["*"]}));let Re=yield*oe.promise(()=>Ce(yt,at));yield*u.trigger("tool.execute.after",{tool:pe,sessionID:We.sessionID,callID:at.toolCallId,args:yt},Re);let Le=[],et=[];for(let zt of Re.content)if(zt.type==="text")Le.push(zt.text);else if(zt.type==="image")et.push({type:"file",mime:zt.mimeType,url:`data:${zt.mimeType};base64,${zt.data}`});else if(zt.type==="resource"){let{resource:An}=zt;An.text&&Le.push(An.text),An.blob&&et.push({type:"file",mime:An.mimeType??"application/octet-stream",url:`data:${An.mimeType??"application/octet-stream"};base64,${An.blob}`,filename:An.uri})}let lt=yield*ee.output(Le.join(`
1568
1568
 
1569
- `),{},O.agent);return{title:"",metadata:{...Re.metadata??{},truncated:lt.truncated,...lt.truncated&&{outputPath:lt.outputPath}},output:lt.content,attachments:et.map(zt=>({...zt,id:nt.ascending(),sessionID:We.sessionID,messageID:O.processor.message.id})),content:Re.content}})),K[pe]=je}return K}catch(De){var He=De,$e=!0}finally{jn(_e,He,$e)}}),me=oe.fn("SessionPrompt.handleSubtask")(function*(O){let{task:W,model:K,lastUser:B,sessionID:re,session:ve,msgs:$}=O,_e=yield*ae.context,De=yield*oe.promise(()=>G.named.task.init()),He=W.model?yield*we(W.model.providerID,W.model.modelID,re):K,$e=yield*E.updateMessage({id:Ve.ascending(),role:"assistant",parentID:B.id,sessionID:re,mode:W.agent,agent:W.agent,variant:B.variant,path:{cwd:_e.directory,root:_e.worktree},cost:0,tokens:{input:0,output:0,reasoning:0,cache:{read:0,write:0}},modelID:He.id,providerID:He.providerID,time:{created:Date.now()}}),pe=yield*E.updatePart({id:nt.ascending(),messageID:$e.id,sessionID:$e.sessionID,type:"tool",callID:Vc(),tool:G.named.task.id,state:{status:"running",input:{prompt:W.prompt,description:W.description,subagent_type:W.agent,command:W.command},time:{start:Date.now()}}}),je={prompt:W.prompt,description:W.description,subagent_type:W.agent,command:W.command};yield*u.trigger("tool.execute.before",{tool:"task",sessionID:re,callID:pe.id},{args:je});let Ce=yield*x.get(W.agent);if(!Ce){let We=(yield*x.list()).filter(Le=>!Le.hidden).map(Le=>Le.name),bt=We.length?` Available agents: ${We.join(", ")}`:"",Re=new tt.Unknown({message:`Agent not found: "${W.agent}".${bt}`});throw yield*R.publish(Ke.Event.Error,{sessionID:re,error:Re.toObject()}),Re}let Se,Ze=yield*oe.promise(We=>De.execute(je,{agent:W.agent,messageID:$e.id,sessionID:re,abort:We,callID:pe.callID,extra:{bypassAgentCheck:!0},messages:$,metadata(bt){return oe.runPromise(oe.gen(function*(){pe=yield*E.updatePart({...pe,type:"tool",state:{...pe.state,...bt}})}))},ask(bt){return oe.runPromise(L.ask({...bt,sessionID:re,ruleset:Ge.merge(Ce.permission,ve.permission??[])}))}}).catch(bt=>{Se=bt instanceof Error?bt:new Error(String(bt)),t.error("subtask execution failed",{error:Se,agent:W.agent,description:W.description})})).pipe(oe.onInterrupt(()=>oe.gen(function*(){$e.finish="tool-calls",$e.time.completed=Date.now(),yield*E.updateMessage($e),pe.state.status==="running"&&(yield*E.updatePart({...pe,state:{status:"error",error:"Cancelled",time:{start:pe.state.time.start,end:Date.now()},metadata:pe.state.metadata,input:pe.state.input}}))}))),yt=Ze?.attachments?.map(We=>({...We,id:nt.ascending(),sessionID:re,messageID:$e.id}));if(yield*u.trigger("tool.execute.after",{tool:"task",sessionID:re,callID:pe.id,args:je},Ze),$e.finish="tool-calls",$e.time.completed=Date.now(),yield*E.updateMessage($e),Ze&&pe.state.status==="running"&&(yield*E.updatePart({...pe,state:{status:"completed",input:pe.state.input,title:Ze.title,metadata:Ze.metadata,output:Ze.output,attachments:yt,time:{...pe.state.time,end:Date.now()}}})),Ze||(yield*E.updatePart({...pe,state:{status:"error",error:Se?`Tool execution failed: ${Se.message}`:"Tool execution failed",time:{start:pe.state.status==="running"?pe.state.time.start:Date.now(),end:Date.now()},metadata:pe.state.status==="pending"?void 0:pe.state.metadata,input:pe.state.input}})),!W.command)return;let at={id:Ve.ascending(),sessionID:re,role:"user",time:{created:Date.now()},agent:B.agent,model:B.model};yield*E.updateMessage(at),yield*E.updatePart({id:nt.ascending(),messageID:at.id,sessionID:re,type:"text",text:"Summarize the task tool output above and continue with your task.",synthetic:!0})}),le=oe.fn("SessionPrompt.shellImpl")(function*(O,W){let K=yield*ae.context,B=yield*E.get(O.sessionID);B.revert&&(yield*oe.promise(()=>cs.cleanup(B)));let re=yield*x.get(O.agent);if(!re){let Le=(yield*x.list()).filter(bn=>!bn.hidden).map(bn=>bn.name),et=Le.length?` Available agents: ${Le.join(", ")}`:"",lt=new tt.Unknown({message:`Agent not found: "${O.agent}".${et}`});throw yield*R.publish(Ke.Event.Error,{sessionID:O.sessionID,error:lt.toObject()}),lt}let ve=O.model??re.model??(yield*be(O.sessionID)),$={id:O.messageID??Ve.ascending(),sessionID:O.sessionID,time:{created:Date.now()},role:"user",agent:O.agent,model:{providerID:ve.providerID,modelID:ve.modelID}};yield*E.updateMessage($);let _e={type:"text",id:nt.ascending(),messageID:$.id,sessionID:O.sessionID,text:"The following tool was executed by the user",synthetic:!0};yield*E.updatePart(_e);let De={id:Ve.ascending(),sessionID:O.sessionID,parentID:$.id,mode:O.agent,agent:O.agent,cost:0,path:{cwd:K.directory,root:K.worktree},time:{created:Date.now()},role:"assistant",tokens:{input:0,output:0,reasoning:0,cache:{read:0,write:0}},modelID:ve.modelID,providerID:ve.providerID};yield*E.updateMessage(De);let He={type:"tool",id:nt.ascending(),messageID:De.id,sessionID:O.sessionID,tool:"bash",callID:Vc(),state:{status:"running",time:{start:Date.now()},input:{command:O.command}}};yield*E.updatePart(He);let $e=yo.preferred(),pe=(process.platform==="win32"?Ur.win32.basename($e,".exe"):Ur.basename($e)).toLowerCase(),je={nu:{args:["-c",O.command]},fish:{args:["-c",O.command]},zsh:{args:["-l","-c",`
1569
+ `),{},O.agent);return{title:"",metadata:{...Re.metadata??{},truncated:lt.truncated,...lt.truncated&&{outputPath:lt.outputPath}},output:lt.content,attachments:et.map(zt=>({...zt,id:nt.ascending(),sessionID:We.sessionID,messageID:O.processor.message.id})),content:Re.content}})),K[pe]=je}return K}catch(De){var He=De,$e=!0}finally{jn(_e,He,$e)}}),me=oe.fn("SessionPrompt.handleSubtask")(function*(O){let{task:W,model:K,lastUser:B,sessionID:re,session:ve,msgs:$}=O,_e=yield*ae.context,De=yield*oe.promise(()=>G.named.task.init()),He=W.model?yield*we(W.model.providerID,W.model.modelID,re):K,$e=yield*E.updateMessage({id:Ve.ascending(),role:"assistant",parentID:B.id,sessionID:re,mode:W.agent,agent:W.agent,variant:B.variant,path:{cwd:_e.directory,root:_e.worktree},cost:0,tokens:{input:0,output:0,reasoning:0,cache:{read:0,write:0}},modelID:He.id,providerID:He.providerID,time:{created:Date.now()}}),pe=yield*E.updatePart({id:nt.ascending(),messageID:$e.id,sessionID:$e.sessionID,type:"tool",callID:Yc(),tool:G.named.task.id,state:{status:"running",input:{prompt:W.prompt,description:W.description,subagent_type:W.agent,command:W.command},time:{start:Date.now()}}}),je={prompt:W.prompt,description:W.description,subagent_type:W.agent,command:W.command};yield*u.trigger("tool.execute.before",{tool:"task",sessionID:re,callID:pe.id},{args:je});let Ce=yield*x.get(W.agent);if(!Ce){let We=(yield*x.list()).filter(Le=>!Le.hidden).map(Le=>Le.name),bt=We.length?` Available agents: ${We.join(", ")}`:"",Re=new tt.Unknown({message:`Agent not found: "${W.agent}".${bt}`});throw yield*R.publish(Ke.Event.Error,{sessionID:re,error:Re.toObject()}),Re}let Se,Ze=yield*oe.promise(We=>De.execute(je,{agent:W.agent,messageID:$e.id,sessionID:re,abort:We,callID:pe.callID,extra:{bypassAgentCheck:!0},messages:$,metadata(bt){return oe.runPromise(oe.gen(function*(){pe=yield*E.updatePart({...pe,type:"tool",state:{...pe.state,...bt}})}))},ask(bt){return oe.runPromise(L.ask({...bt,sessionID:re,ruleset:Ge.merge(Ce.permission,ve.permission??[])}))}}).catch(bt=>{Se=bt instanceof Error?bt:new Error(String(bt)),t.error("subtask execution failed",{error:Se,agent:W.agent,description:W.description})})).pipe(oe.onInterrupt(()=>oe.gen(function*(){$e.finish="tool-calls",$e.time.completed=Date.now(),yield*E.updateMessage($e),pe.state.status==="running"&&(yield*E.updatePart({...pe,state:{status:"error",error:"Cancelled",time:{start:pe.state.time.start,end:Date.now()},metadata:pe.state.metadata,input:pe.state.input}}))}))),yt=Ze?.attachments?.map(We=>({...We,id:nt.ascending(),sessionID:re,messageID:$e.id}));if(yield*u.trigger("tool.execute.after",{tool:"task",sessionID:re,callID:pe.id,args:je},Ze),$e.finish="tool-calls",$e.time.completed=Date.now(),yield*E.updateMessage($e),Ze&&pe.state.status==="running"&&(yield*E.updatePart({...pe,state:{status:"completed",input:pe.state.input,title:Ze.title,metadata:Ze.metadata,output:Ze.output,attachments:yt,time:{...pe.state.time,end:Date.now()}}})),Ze||(yield*E.updatePart({...pe,state:{status:"error",error:Se?`Tool execution failed: ${Se.message}`:"Tool execution failed",time:{start:pe.state.status==="running"?pe.state.time.start:Date.now(),end:Date.now()},metadata:pe.state.status==="pending"?void 0:pe.state.metadata,input:pe.state.input}})),!W.command)return;let at={id:Ve.ascending(),sessionID:re,role:"user",time:{created:Date.now()},agent:B.agent,model:B.model};yield*E.updateMessage(at),yield*E.updatePart({id:nt.ascending(),messageID:at.id,sessionID:re,type:"text",text:"Summarize the task tool output above and continue with your task.",synthetic:!0})}),le=oe.fn("SessionPrompt.shellImpl")(function*(O,W){let K=yield*ae.context,B=yield*E.get(O.sessionID);B.revert&&(yield*oe.promise(()=>cs.cleanup(B)));let re=yield*x.get(O.agent);if(!re){let Le=(yield*x.list()).filter(bn=>!bn.hidden).map(bn=>bn.name),et=Le.length?` Available agents: ${Le.join(", ")}`:"",lt=new tt.Unknown({message:`Agent not found: "${O.agent}".${et}`});throw yield*R.publish(Ke.Event.Error,{sessionID:O.sessionID,error:lt.toObject()}),lt}let ve=O.model??re.model??(yield*be(O.sessionID)),$={id:O.messageID??Ve.ascending(),sessionID:O.sessionID,time:{created:Date.now()},role:"user",agent:O.agent,model:{providerID:ve.providerID,modelID:ve.modelID}};yield*E.updateMessage($);let _e={type:"text",id:nt.ascending(),messageID:$.id,sessionID:O.sessionID,text:"The following tool was executed by the user",synthetic:!0};yield*E.updatePart(_e);let De={id:Ve.ascending(),sessionID:O.sessionID,parentID:$.id,mode:O.agent,agent:O.agent,cost:0,path:{cwd:K.directory,root:K.worktree},time:{created:Date.now()},role:"assistant",tokens:{input:0,output:0,reasoning:0,cache:{read:0,write:0}},modelID:ve.modelID,providerID:ve.providerID};yield*E.updateMessage(De);let He={type:"tool",id:nt.ascending(),messageID:De.id,sessionID:O.sessionID,tool:"bash",callID:Yc(),state:{status:"running",time:{start:Date.now()},input:{command:O.command}}};yield*E.updatePart(He);let $e=yo.preferred(),pe=(process.platform==="win32"?Ur.win32.basename($e,".exe"):Ur.basename($e)).toLowerCase(),je={nu:{args:["-c",O.command]},fish:{args:["-c",O.command]},zsh:{args:["-l","-c",`
1570
1570
  __oc_cwd=$PWD
1571
1571
  [[ -f ~/.zshenv ]] && source ~/.zshenv >/dev/null 2>&1 || true
1572
1572
  [[ -f "\${ZDOTDIR:-$HOME}/.zshrc" ]] && source "\${ZDOTDIR:-$HOME}/.zshrc" >/dev/null 2>&1 || true
@@ -1578,13 +1578,13 @@ NOTE: At any point in time through this workflow you should feel free to ask the
1578
1578
  [[ -f ~/.bashrc ]] && source ~/.bashrc >/dev/null 2>&1 || true
1579
1579
  cd "$__oc_cwd"
1580
1580
  eval ${JSON.stringify(O.command)}
1581
- `]},cmd:{args:["/c",O.command]},powershell:{args:["-NoProfile","-Command",O.command]},pwsh:{args:["-NoProfile","-Command",O.command]},"":{args:["-c",O.command]}},Ce=(je[pe]??je[""]).args,Se=K.directory,Ze=yield*u.trigger("shell.env",{cwd:Se,sessionID:O.sessionID,callID:He.callID},{env:{}}),yt=Ch.make($e,Ce,{cwd:Se,extendEnv:!0,env:{...Ze.env,TERM:"dumb"},stdin:"ignore",forceKillAfter:"3 seconds"}),at="",We=!1,bt=oe.uninterruptible(oe.gen(function*(){We&&(at+=`
1581
+ `]},cmd:{args:["/c",O.command]},powershell:{args:["-NoProfile","-Command",O.command]},pwsh:{args:["-NoProfile","-Command",O.command]},"":{args:["-c",O.command]}},Ce=(je[pe]??je[""]).args,Se=K.directory,Ze=yield*u.trigger("shell.env",{cwd:Se,sessionID:O.sessionID,callID:He.callID},{env:{}}),yt=Ah.make($e,Ce,{cwd:Se,extendEnv:!0,env:{...Ze.env,TERM:"dumb"},stdin:"ignore",forceKillAfter:"3 seconds"}),at="",We=!1,bt=oe.uninterruptible(oe.gen(function*(){We&&(at+=`
1582
1582
 
1583
1583
  `+["<metadata>","User aborted the command","</metadata>"].join(`
1584
- `)),De.time.completed||(De.time.completed=Date.now(),yield*E.updateMessage(De)),He.state.status==="running"&&(He.state={status:"completed",time:{...He.state.time,end:Date.now()},input:He.state.input,title:"",metadata:{output:at,description:""},output:at},yield*E.updatePart(He))})),Re=yield*oe.gen(function*(){let Le=yield*se.spawn(yt);yield*Ms.runForEach(Ms.decodeText(Le.all),et=>oe.sync(()=>{at+=et,He.state.status==="running"&&(He.state.metadata={output:at,description:""},oe.runFork(E.updatePart(He)))})),yield*Le.exitCode}).pipe(oe.scoped,oe.onInterrupt(()=>oe.sync(()=>{We=!0})),oe.orDie,oe.ensuring(bt),oe.exit);return zr.isFailure(Re)&&!lr.hasInterruptsOnly(Re.cause)?yield*oe.failCause(Re.cause):{info:De,parts:[He]}}),we=oe.fn("SessionPrompt.getModel")(function*(O,W,K){let B=yield*k.getModel(O,W).pipe(oe.exit);if(zr.isSuccess(B))return B.value;let re=lr.squash(B.cause);if(Gt.ModelNotFoundError.isInstance(re)){let ve=re.data.suggestions?.length?` Did you mean: ${re.data.suggestions.join(", ")}?`:"";yield*R.publish(Ke.Event.Error,{sessionID:K,error:new tt.Unknown({message:`Model not found: ${re.data.providerID}/${re.data.modelID}.${ve}`}).toObject()})}return yield*oe.failCause(B.cause)}),be=oe.fnUntraced(function*(O){let W=yield*oe.promise(async()=>{for await(let K of Ne.stream(O))if(K.info.role==="user"&&K.info.model)return K.info.model});return W||(yield*k.defaultModel())}),fe=oe.fnUntraced(function*(O){let W=yield*oe.promise(async()=>{for await(let B of Ne.stream(O))if(B.info.role==="user"&&B.info.agent)return B.info.agent});return W&&(yield*x.get(W))?W:void 0}),J=oe.fn("SessionPrompt.createUserMessage")(function*(O){let W=O.agent||(yield*fe(O.sessionID))||(yield*x.defaultAgent()),K=yield*x.get(W);if(!K){let pe=(yield*x.list()).filter(Se=>!Se.hidden).map(Se=>Se.name),je=pe.length?` Available agents: ${pe.join(", ")}`:"",Ce=new tt.Unknown({message:`Agent not found: "${W}".${je}`});throw yield*R.publish(Ke.Event.Error,{sessionID:O.sessionID,error:Ce.toObject()}),Ce}let B=O.model??K.model??(yield*be(O.sessionID)),re=!O.variant&&K.variant?yield*k.getModel(B.providerID,B.modelID).pipe(oe.catch(()=>oe.succeed(void 0))):void 0,ve=O.variant??jt.nearestVariant(K.variant,Object.keys(re?.variants??{})),$={id:O.messageID??Ve.ascending(),role:"user",sessionID:O.sessionID,time:{created:Date.now()},tools:O.tools,agent:K.name,model:B,system:O.system,format:O.format,variant:ve};yield*oe.addFinalizer(()=>ae.withALS(()=>Z.clear($.id)).pipe(oe.flatMap(pe=>pe)));let _e=n(pe=>({...pe,id:pe.id?nt.make(pe.id):nt.ascending()}),"assign"),De=oe.fn("SessionPrompt.resolveUserPart")(function*(pe){if(pe.type==="file"){if(pe.source?.type==="resource"){let{clientName:Ce,uri:Se}=pe.source;t.info("mcp resource",{clientName:Ce,uri:Se,mime:pe.mime});let Ze=[{messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:`Reading MCP resource: ${pe.filename} (${Se})`}],yt=yield*z.readResource(Ce,Se).pipe(oe.exit);if(zr.isSuccess(yt)){let at=yt.value;if(!at)throw new Error(`Resource not found: ${Ce}/${Se}`);let We=Array.isArray(at.contents)?at.contents:[at.contents];for(let bt of We)if("text"in bt&&bt.text)Ze.push({messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:bt.text});else if("blob"in bt&&bt.blob){let Re="mimeType"in bt?bt.mimeType:pe.mime;Ze.push({messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:`[Binary content: ${Re}]`})}Ze.push({...pe,messageID:$.id,sessionID:O.sessionID})}else{let at=lr.squash(yt.cause);t.error("failed to read MCP resource",{error:at,clientName:Ce,uri:Se});let We=at instanceof Error?at.message:String(at);Ze.push({messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:`Failed to read MCP resource ${pe.filename}: ${We}`})}return Ze}let je=new URL(pe.url);switch(je.protocol){case"data:":if(pe.mime==="text/plain")return[{messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:`Called the Read tool with the following input: ${JSON.stringify({filePath:pe.filename})}`},{messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:Wc(pe.url)},{...pe,messageID:$.id,sessionID:O.sessionID}];break;case"file:":{t.info("file",{mime:pe.mime});let Ce=jh(pe.url);if((yield*j.isDir(Ce))&&(pe.mime="application/x-directory"),pe.mime==="text/plain"){let Se,Ze,yt={start:je.searchParams.get("start"),end:je.searchParams.get("end")};if(yt.start!=null){let Re=pe.url.split("?")[0],Le=parseInt(yt.start),et=yt.end?parseInt(yt.end):void 0;if(Le===et){let lt=yield*V.documentSymbol(Re).pipe(oe.catch(()=>oe.succeed([])));for(let bn of lt){let zt;if("range"in bn?zt=bn.range:"location"in bn&&(zt=bn.location.range),zt?.start?.line&&zt?.start?.line===Le){Le=zt.start.line,et=zt?.end?.line??Le;break}}}Se=Math.max(Le,1),et&&(Ze=et-(Se-1))}let at={filePath:Ce,offset:Se,limit:Ze},We=[{messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:`Called the Read tool with the following input: ${JSON.stringify(at)}`}],bt=yield*oe.promise(()=>G.named.read.init()).pipe(oe.flatMap(Re=>k.getModel($.model.providerID,$.model.modelID).pipe(oe.flatMap(Le=>oe.promise(()=>Re.execute(at,{sessionID:O.sessionID,abort:new AbortController().signal,agent:O.agent,messageID:$.id,extra:{bypassCwdCheck:!0,model:Le},messages:[],metadata:n(async()=>{},"metadata"),ask:n(async()=>{},"ask")}))))),oe.exit);if(zr.isSuccess(bt)){let Re=bt.value;We.push({messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:Re.output}),Re.attachments?.length?We.push(...Re.attachments.map(Le=>({...Le,synthetic:!0,filename:Le.filename??pe.filename,messageID:$.id,sessionID:O.sessionID}))):We.push({...pe,messageID:$.id,sessionID:O.sessionID})}else{let Re=lr.squash(bt.cause);t.error("failed to read file",{error:Re});let Le=Re instanceof Error?Re.message:String(Re);yield*R.publish(Ke.Event.Error,{sessionID:O.sessionID,error:new tt.Unknown({message:Le}).toObject()}),We.push({messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:`Read tool failed to read ${Ce} with the following error: ${Le}`})}return We}if(pe.mime==="application/x-directory"){let Se={filePath:Ce},Ze=yield*oe.promise(()=>G.named.read.init()).pipe(oe.flatMap(yt=>oe.promise(()=>yt.execute(Se,{sessionID:O.sessionID,abort:new AbortController().signal,agent:O.agent,messageID:$.id,extra:{bypassCwdCheck:!0},messages:[],metadata:n(async()=>{},"metadata"),ask:n(async()=>{},"ask")}))));return[{messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:`Called the Read tool with the following input: ${JSON.stringify(Se)}`},{messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:Ze.output},{...pe,messageID:$.id,sessionID:O.sessionID}]}return yield*H.read(O.sessionID,Ce),[{messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:`Called the Read tool with the following input: {"filePath":"${Ce}"}`},{id:pe.id,messageID:$.id,sessionID:O.sessionID,type:"file",url:`data:${pe.mime};base64,`+Buffer.from(yield*j.readFile(Ce).pipe(oe.catch(oe.die))).toString("base64"),mime:pe.mime,filename:pe.filename,source:pe.source}]}}}if(pe.type==="agent"){let Ce=Ge.evaluate("task",pe.name,K.permission).action==="deny"?" . Invoked by user; guaranteed to exist.":"";return[{...pe,messageID:$.id,sessionID:O.sessionID},{messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:" Use the above message and context to generate a prompt and call the task tool with subagent: "+pe.name+Ce}]}return[{...pe,messageID:$.id,sessionID:O.sessionID}]}),He=yield*oe.forEach(O.parts,De,{concurrency:"unbounded"}).pipe(oe.map(pe=>pe.flat().map(_e)));yield*u.trigger("chat.message",{sessionID:O.sessionID,agent:O.agent,model:O.model,messageID:O.messageID,variant:O.variant},{message:$,parts:He});let $e=Ne.Info.safeParse($);$e.success||t.error("invalid user message before save",{sessionID:O.sessionID,messageID:$.id,agent:$.agent,model:$.model,issues:$e.error.issues}),He.forEach((pe,je)=>{let Ce=Ne.Part.safeParse(pe);Ce.success||t.error("invalid user part before save",{sessionID:O.sessionID,messageID:$.id,partID:pe.id,partType:pe.type,index:je,issues:Ce.error.issues,part:pe})}),yield*E.updateMessage($);for(let pe of He)yield*E.updatePart(pe);return{info:$,parts:He}},oe.scoped),X=oe.fn("SessionPrompt.inFlightTool")(function*(O){let W=yield*Ne.filterCompactedEffect(O);for(let K=W.length-1;K>=0;K--){let B=W[K];if(B.info.role!=="assistant"||B.info.aside)continue;let re=B.parts.find(ve=>ve.type==="tool"&&(ve.state.status==="running"||ve.state.status==="pending"));return re&&re.type==="tool"?re.tool:null}return null}),xe=["A tool you called is still running and its result has not arrived. The user just wrote to you.","Answer them now, in a sentence or two, from what you already know. You cannot use tools until the run returns, so do not promise to look anything up.","Do not restate at length what you are doing; if their message changes the work, say what you will do once the run returns."].join(" "),de=oe.fn("SessionPrompt.aside")(function*(O){let W=yield*ae.context,K=yield*Ne.filterCompactedEffect(O.sessionID),B=yield*we(O.user.model.providerID,O.user.model.modelID,O.sessionID),re=yield*x.get(O.user.agent);if(!re)return null;let ve={id:Ve.ascending(),parentID:O.user.id,role:"assistant",mode:re.name,agent:re.name,variant:O.user.variant,path:{cwd:W.directory,root:W.worktree},cost:0,tokens:{input:0,output:0,reasoning:0,cache:{read:0,write:0}},modelID:B.id,providerID:B.providerID,time:{created:Date.now()},sessionID:O.sessionID,aside:!0};yield*E.updateMessage(ve);let $=yield*M.create({assistantMessage:ve,sessionID:O.sessionID,model:B}),[_e,De,He]=yield*oe.all([oe.promise(()=>Qn.environment(B)),Z.system().pipe(oe.orDie),oe.promise(()=>Ne.toModelMessages(K,B,{runningToolNote:`[${O.running} is still running. You are answering the user beside it; its result arrives when it finishes.]`}))]);t.info("aside",{sessionID:O.sessionID,running:O.running,messageID:ve.id}),yield*$.process({user:O.user,agent:re,permission:O.session.permission,sessionID:O.sessionID,parentSessionID:O.session.parentID,system:[..._e,...De,xe],messages:He,tools:{},model:B});let $e=yield*Qe(O.sessionID);if($e.info.id!==ve.id)return $e;let{drop:pe,answered:je}=Cc($e.parts);if(!je)return t.warn("aside wrote no usable answer; the message waits for the run",{sessionID:O.sessionID,messageID:ve.id}),yield*E.removeMessage({sessionID:O.sessionID,messageID:ve.id}),null;for(let Ce of pe)yield*E.removePart({sessionID:O.sessionID,messageID:ve.id,partID:Ce});return pe.length>0?yield*Qe(O.sessionID):$e}),ue=oe.fn("SessionPrompt.prompt")(function*(O){let W=yield*E.get(O.sessionID);yield*oe.promise(()=>cs.cleanup(W));let K=yield*J(O);yield*E.touch(O.sessionID);let B=[];for(let[_e,De]of Object.entries(O.tools??{}))B.push({permission:_e,action:De?"allow":"deny",pattern:"*"});if(B.length>0&&(W.permission=B,yield*E.setPermission({sessionID:W.id,permission:B})),O.noReply===!0)return K;if((yield*ae.get(he)).runners.get(O.sessionID)?.busy===!0&&Rc(K.parts)){let De=yield*X(O.sessionID);if(De){let He=yield*de({sessionID:O.sessionID,session:W,user:K.info,running:De}).pipe(oe.catchCause($e=>(t.warn("aside failed; the message waits for the run",{sessionID:O.sessionID,cause:String($e)}),oe.succeed(null))));if(He)return He}}let ve=(yield*ae.get(he)).runners.get(O.sessionID)?.busy===!0,$=yield*xt({sessionID:O.sessionID});return ve&&vt.compareAscending($.info.id,K.info.id)<0&&($=yield*xt({sessionID:O.sessionID})),$}),Qe=n(O=>oe.promise(async()=>{let W;for await(let K of Ne.stream(O))if(W??=K,K.info.role!=="user")return K;if(W)return W;throw new Error("Impossible")}),"lastAssistant"),dt=oe.fn("SessionPrompt.run")(function*(O){let W=yield*ae.context,K,B=0,re=yield*E.get(O);for(;;){if(qo.isPaused()){qo.hold(O);break}yield*_.set(O,{type:"busy"}),t.info("loop",{step:B,sessionID:O});let ve=yield*Ne.filterCompactedEffect(O),$,_e,De,He=[];for(let Re=ve.length-1;Re>=0;Re--){let Le=ve[Re];if(Le.info.role==="assistant"&&Le.info.aside)continue;if(!$&&Le.info.role==="user"&&($=Le.info),!_e&&Le.info.role==="assistant"&&(_e=Le.info),!De&&Le.info.role==="assistant"&&Le.info.finish&&(De=Le.info),$&&De)break;let et=Le.parts.filter(lt=>lt.type==="compaction"||lt.type==="subtask");et&&!De&&He.push(...et)}if(!$)throw new Error("No user message found in stream. This should never happen.");let pe=ve.findLast(Re=>Re.info.role==="assistant"&&Re.info.id===_e?.id)?.parts.some(Re=>Re.type==="tool")??!1;if(_e?.finish&&!["tool-calls"].includes(_e.finish)&&!pe&&vt.compareAscending($.id,_e.id)<0){t.info("exiting loop",{sessionID:O});break}B++,B===1&&(yield*ce({session:re,modelID:$.model.modelID,providerID:$.model.providerID,history:ve}).pipe(oe.ignore,oe.forkIn(F)));let je=yield*we($.model.providerID,$.model.modelID,O),Ce=He.pop();if(Ce?.type==="subtask"){yield*me({task:Ce,model:je,lastUser:$,sessionID:O,session:re,msgs:ve});continue}if(Ce?.type==="compaction"){let Re=yield*oe.gen(function*(){let et=ve.findLast(Io=>Io.info.role==="user"&&!Io.parts.some(Vr=>Vr.type==="compaction"));if(!et||et.info.role!=="user")return;let lt=yield*x.get(et.info.agent);if(!lt)return;let bn=yield*ie({agent:lt,session:re,model:je,tools:et.info.tools,processor:{message:{id:$.id},partFromToolCall:n(()=>{},"partFromToolCall")},bypassAgentCheck:!1,messages:ve}),[zt,An,Hr]=yield*oe.all([oe.promise(()=>Qn.skills(lt)),oe.promise(()=>Qn.environment(je)),Z.system().pipe(oe.orDie)]),yr=Object.fromEntries(Object.entries(bn).map(([Io,Vr])=>[Io,{...Vr,execute:n(async()=>"Not run: this step only writes the summary.","execute")}]));return{agent:lt,user:et.info,system:[...An,...zt?[zt]:[],...Hr],tools:yr,permission:re.permission,parentSessionID:re.parentID}}).pipe(oe.catchCause(et=>oe.sync(()=>{t.warn("compaction: the session's prefix could not be rebuilt; summarizing without it",{sessionID:O,cause:String(et).slice(0,500)})})));if((yield*r.process({messages:ve,parentID:$.id,sessionID:O,auto:Ce.auto,overflow:Ce.overflow,shared:Re}))==="stop")break;continue}if(De&&De.summary!==!0&&(yield*r.isOverflow({tokens:De.tokens,model:je}))){yield*r.create({sessionID:O,agent:$.agent,model:$.model,auto:!0});continue}let Se=yield*x.get($.agent);if(!Se){let Re=(yield*x.list()).filter(lt=>!lt.hidden).map(lt=>lt.name),Le=Re.length?` Available agents: ${Re.join(", ")}`:"",et=new tt.Unknown({message:`Agent not found: "${$.agent}".${Le}`});throw yield*R.publish(Ke.Event.Error,{sessionID:O,error:et.toObject()}),et}let Ze=Se.steps??1/0,yt=B>=Ze;ve=yield*Q({messages:ve,agent:Se,session:re});let at={id:Ve.ascending(),parentID:$.id,role:"assistant",mode:Se.name,agent:Se.name,variant:$.variant,path:{cwd:W.directory,root:W.worktree},cost:0,tokens:{input:0,output:0,reasoning:0,cache:{read:0,write:0}},modelID:je.id,providerID:je.providerID,time:{created:Date.now()},sessionID:O};yield*E.updateMessage(at);let We=yield*M.create({assistantMessage:at,sessionID:O,model:je});if((yield*oe.onExit(oe.gen(function*(){let Le=ve.findLast(ko=>ko.info.role==="user")?.parts.some(ko=>ko.type==="agent")??!1,et=yield*ie({agent:Se,session:re,model:je,tools:$.tools,processor:We,bypassAgentCheck:Le,messages:ve});if($.format?.type==="json_schema"&&(et.StructuredOutput=C({schema:$.format.schema,onSuccess(ko){K=ko}})),B===1&&co.summarize({sessionID:O,messageID:$.id}),B>1&&De){let ko=new Set(ve.filter(Bn=>Bn.info.role==="assistant"&&Bn.info.aside).map(Bn=>Bn.info.parentID));for(let Bn of ve)if(!(Bn.info.role!=="user"||vt.compareAscending(Bn.info.id,De.id)<=0)&&!ko.has(Bn.info.id))for(let Bo of Bn.parts)Bo.type!=="text"||Bo.ignored||Bo.synthetic||Bo.text.trim()&&(Bo.text=["<system-reminder>","The user sent the following message:",Bo.text,"","Please address this message and continue with your tasks.","</system-reminder>"].join(`
1585
- `))}yield*u.trigger("experimental.chat.messages.transform",{},{messages:ve});let[lt,bn,zt,An]=yield*oe.all([oe.promise(()=>Qn.skills(Se)),oe.promise(()=>Qn.environment(je)),Z.system().pipe(oe.orDie),oe.promise(()=>Ne.toModelMessages(ve,je))]),Hr=[...bn,...lt?[lt]:[],...zt],yr=$.format??{type:"text"};yr.type==="json_schema"&&Hr.push(Fh);let Io=yield*We.process({user:$,agent:Se,permission:re.permission,sessionID:O,parentSessionID:re.parentID,system:Hr,messages:[...An,...yt?[{role:"assistant",content:Uc}]:[]],tools:et,model:je,toolChoice:yr.type==="json_schema"?"required":void 0});if(K!==void 0)return We.message.structured=K,We.message.finish=We.message.finish??"stop",yield*E.updateMessage(We.message),"break";if(We.message.finish&&!["tool-calls","unknown"].includes(We.message.finish)&&!We.message.error){if(We.message.finish==="content-filter")return We.message.error=new tt.Unknown({message:"The response was blocked by the provider's content filter"}).toObject(),yield*E.updateMessage(We.message),yield*R.publish(Ke.Event.Error,{sessionID:O,error:We.message.error}),"break";if(yr.type==="json_schema")return We.message.error=new Ne.StructuredOutputError({message:"Model did not produce structured output",retries:0}).toObject(),yield*E.updateMessage(We.message),"break"}return Io==="stop"?"break":(Io==="compact"&&(yield*r.create({sessionID:O,agent:$.agent,model:$.model,auto:!0,overflow:!We.message.finish})),"continue")}),oe.fnUntraced(function*(Re){zr.isFailure(Re)&&lr.hasInterruptsOnly(Re.cause)&&(yield*We.abort()),yield*ae.withALS(()=>Z.clear(We.message.id)).pipe(oe.flatMap(Le=>Le))})))==="break")break}return yield*r.prune({sessionID:O}).pipe(oe.ignore,oe.forkIn(F)),yield*Qe(O)}),xt=oe.fn("SessionPrompt.loop")(function*(O){if(qo.isPaused())return qo.hold(O.sessionID),yield*Qe(O.sessionID);let W=yield*ae.get(he);return yield*ge(W.runners,O.sessionID).ensureRunning(dt(O.sessionID))}),Oe=oe.fn("SessionPrompt.shell")(function*(O){let W=yield*ae.get(he);return yield*ge(W.runners,O.sessionID).startShell(B=>le(O,B))}),ye=oe.fn("SessionPrompt.command")(function*(O){t.info("command",O);let W=yield*g.get(O.command);if(!W){let Re=(yield*g.list()).map(lt=>lt.name),Le=Re.length?` Available commands: ${Re.join(", ")}`:"",et=new tt.Unknown({message:`Command not found: "${O.command}".${Le}`});throw yield*R.publish(Ke.Event.Error,{sessionID:O.sessionID,error:et.toObject()}),et}let K=W.agent??O.agent??(yield*x.defaultAgent()),re=(O.arguments.match(P)??[]).map(Re=>Re.replace(D,"")),ve=yield*oe.promise(async()=>W.template),$=ve.match(y)??[],_e=0;for(let Re of $){let Le=Number(Re.slice(1));Le>_e&&(_e=Le)}let De=ve.replaceAll(y,(Re,Le)=>{let et=Number(Le),lt=et-1;return lt>=re.length?"":et===_e?re.slice(lt).join(" "):re[lt]}),He=ve.includes("$ARGUMENTS"),$e=De.replaceAll("$ARGUMENTS",O.arguments);$.length===0&&!He&&O.arguments.trim()&&($e=$e+`
1584
+ `)),De.time.completed||(De.time.completed=Date.now(),yield*E.updateMessage(De)),He.state.status==="running"&&(He.state={status:"completed",time:{...He.state.time,end:Date.now()},input:He.state.input,title:"",metadata:{output:at,description:""},output:at},yield*E.updatePart(He))})),Re=yield*oe.gen(function*(){let Le=yield*se.spawn(yt);yield*Ms.runForEach(Ms.decodeText(Le.all),et=>oe.sync(()=>{at+=et,He.state.status==="running"&&(He.state.metadata={output:at,description:""},oe.runFork(E.updatePart(He)))})),yield*Le.exitCode}).pipe(oe.scoped,oe.onInterrupt(()=>oe.sync(()=>{We=!0})),oe.orDie,oe.ensuring(bt),oe.exit);return zr.isFailure(Re)&&!lr.hasInterruptsOnly(Re.cause)?yield*oe.failCause(Re.cause):{info:De,parts:[He]}}),we=oe.fn("SessionPrompt.getModel")(function*(O,W,K){let B=yield*k.getModel(O,W).pipe(oe.exit);if(zr.isSuccess(B))return B.value;let re=lr.squash(B.cause);if(Gt.ModelNotFoundError.isInstance(re)){let ve=re.data.suggestions?.length?` Did you mean: ${re.data.suggestions.join(", ")}?`:"";yield*R.publish(Ke.Event.Error,{sessionID:K,error:new tt.Unknown({message:`Model not found: ${re.data.providerID}/${re.data.modelID}.${ve}`}).toObject()})}return yield*oe.failCause(B.cause)}),be=oe.fnUntraced(function*(O){let W=yield*oe.promise(async()=>{for await(let K of Ne.stream(O))if(K.info.role==="user"&&K.info.model)return K.info.model});return W||(yield*k.defaultModel())}),fe=oe.fnUntraced(function*(O){let W=yield*oe.promise(async()=>{for await(let B of Ne.stream(O))if(B.info.role==="user"&&B.info.agent)return B.info.agent});return W&&(yield*x.get(W))?W:void 0}),J=oe.fn("SessionPrompt.createUserMessage")(function*(O){let W=O.agent||(yield*fe(O.sessionID))||(yield*x.defaultAgent()),K=yield*x.get(W);if(!K){let pe=(yield*x.list()).filter(Se=>!Se.hidden).map(Se=>Se.name),je=pe.length?` Available agents: ${pe.join(", ")}`:"",Ce=new tt.Unknown({message:`Agent not found: "${W}".${je}`});throw yield*R.publish(Ke.Event.Error,{sessionID:O.sessionID,error:Ce.toObject()}),Ce}let B=O.model??K.model??(yield*be(O.sessionID)),re=!O.variant&&K.variant?yield*k.getModel(B.providerID,B.modelID).pipe(oe.catch(()=>oe.succeed(void 0))):void 0,ve=O.variant??jt.nearestVariant(K.variant,Object.keys(re?.variants??{})),$={id:O.messageID??Ve.ascending(),role:"user",sessionID:O.sessionID,time:{created:Date.now()},tools:O.tools,agent:K.name,model:B,system:O.system,format:O.format,variant:ve};yield*oe.addFinalizer(()=>ae.withALS(()=>Z.clear($.id)).pipe(oe.flatMap(pe=>pe)));let _e=n(pe=>({...pe,id:pe.id?nt.make(pe.id):nt.ascending()}),"assign"),De=oe.fn("SessionPrompt.resolveUserPart")(function*(pe){if(pe.type==="file"){if(pe.source?.type==="resource"){let{clientName:Ce,uri:Se}=pe.source;t.info("mcp resource",{clientName:Ce,uri:Se,mime:pe.mime});let Ze=[{messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:`Reading MCP resource: ${pe.filename} (${Se})`}],yt=yield*z.readResource(Ce,Se).pipe(oe.exit);if(zr.isSuccess(yt)){let at=yt.value;if(!at)throw new Error(`Resource not found: ${Ce}/${Se}`);let We=Array.isArray(at.contents)?at.contents:[at.contents];for(let bt of We)if("text"in bt&&bt.text)Ze.push({messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:bt.text});else if("blob"in bt&&bt.blob){let Re="mimeType"in bt?bt.mimeType:pe.mime;Ze.push({messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:`[Binary content: ${Re}]`})}Ze.push({...pe,messageID:$.id,sessionID:O.sessionID})}else{let at=lr.squash(yt.cause);t.error("failed to read MCP resource",{error:at,clientName:Ce,uri:Se});let We=at instanceof Error?at.message:String(at);Ze.push({messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:`Failed to read MCP resource ${pe.filename}: ${We}`})}return Ze}let je=new URL(pe.url);switch(je.protocol){case"data:":if(pe.mime==="text/plain")return[{messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:`Called the Read tool with the following input: ${JSON.stringify({filePath:pe.filename})}`},{messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:Bc(pe.url)},{...pe,messageID:$.id,sessionID:O.sessionID}];break;case"file:":{t.info("file",{mime:pe.mime});let Ce=Lh(pe.url);if((yield*j.isDir(Ce))&&(pe.mime="application/x-directory"),pe.mime==="text/plain"){let Se,Ze,yt={start:je.searchParams.get("start"),end:je.searchParams.get("end")};if(yt.start!=null){let Re=pe.url.split("?")[0],Le=parseInt(yt.start),et=yt.end?parseInt(yt.end):void 0;if(Le===et){let lt=yield*V.documentSymbol(Re).pipe(oe.catch(()=>oe.succeed([])));for(let bn of lt){let zt;if("range"in bn?zt=bn.range:"location"in bn&&(zt=bn.location.range),zt?.start?.line&&zt?.start?.line===Le){Le=zt.start.line,et=zt?.end?.line??Le;break}}}Se=Math.max(Le,1),et&&(Ze=et-(Se-1))}let at={filePath:Ce,offset:Se,limit:Ze},We=[{messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:`Called the Read tool with the following input: ${JSON.stringify(at)}`}],bt=yield*oe.promise(()=>G.named.read.init()).pipe(oe.flatMap(Re=>k.getModel($.model.providerID,$.model.modelID).pipe(oe.flatMap(Le=>oe.promise(()=>Re.execute(at,{sessionID:O.sessionID,abort:new AbortController().signal,agent:O.agent,messageID:$.id,extra:{bypassCwdCheck:!0,model:Le},messages:[],metadata:n(async()=>{},"metadata"),ask:n(async()=>{},"ask")}))))),oe.exit);if(zr.isSuccess(bt)){let Re=bt.value;We.push({messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:Re.output}),Re.attachments?.length?We.push(...Re.attachments.map(Le=>({...Le,synthetic:!0,filename:Le.filename??pe.filename,messageID:$.id,sessionID:O.sessionID}))):We.push({...pe,messageID:$.id,sessionID:O.sessionID})}else{let Re=lr.squash(bt.cause);t.error("failed to read file",{error:Re});let Le=Re instanceof Error?Re.message:String(Re);yield*R.publish(Ke.Event.Error,{sessionID:O.sessionID,error:new tt.Unknown({message:Le}).toObject()}),We.push({messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:`Read tool failed to read ${Ce} with the following error: ${Le}`})}return We}if(pe.mime==="application/x-directory"){let Se={filePath:Ce},Ze=yield*oe.promise(()=>G.named.read.init()).pipe(oe.flatMap(yt=>oe.promise(()=>yt.execute(Se,{sessionID:O.sessionID,abort:new AbortController().signal,agent:O.agent,messageID:$.id,extra:{bypassCwdCheck:!0},messages:[],metadata:n(async()=>{},"metadata"),ask:n(async()=>{},"ask")}))));return[{messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:`Called the Read tool with the following input: ${JSON.stringify(Se)}`},{messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:Ze.output},{...pe,messageID:$.id,sessionID:O.sessionID}]}return yield*H.read(O.sessionID,Ce),[{messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:`Called the Read tool with the following input: {"filePath":"${Ce}"}`},{id:pe.id,messageID:$.id,sessionID:O.sessionID,type:"file",url:`data:${pe.mime};base64,`+Buffer.from(yield*j.readFile(Ce).pipe(oe.catch(oe.die))).toString("base64"),mime:pe.mime,filename:pe.filename,source:pe.source}]}}}if(pe.type==="agent"){let Ce=Ge.evaluate("task",pe.name,K.permission).action==="deny"?" . Invoked by user; guaranteed to exist.":"";return[{...pe,messageID:$.id,sessionID:O.sessionID},{messageID:$.id,sessionID:O.sessionID,type:"text",synthetic:!0,text:" Use the above message and context to generate a prompt and call the task tool with subagent: "+pe.name+Ce}]}return[{...pe,messageID:$.id,sessionID:O.sessionID}]}),He=yield*oe.forEach(O.parts,De,{concurrency:"unbounded"}).pipe(oe.map(pe=>pe.flat().map(_e)));yield*u.trigger("chat.message",{sessionID:O.sessionID,agent:O.agent,model:O.model,messageID:O.messageID,variant:O.variant},{message:$,parts:He});let $e=Ne.Info.safeParse($);$e.success||t.error("invalid user message before save",{sessionID:O.sessionID,messageID:$.id,agent:$.agent,model:$.model,issues:$e.error.issues}),He.forEach((pe,je)=>{let Ce=Ne.Part.safeParse(pe);Ce.success||t.error("invalid user part before save",{sessionID:O.sessionID,messageID:$.id,partID:pe.id,partType:pe.type,index:je,issues:Ce.error.issues,part:pe})}),yield*E.updateMessage($);for(let pe of He)yield*E.updatePart(pe);return{info:$,parts:He}},oe.scoped),X=oe.fn("SessionPrompt.inFlightTool")(function*(O){let W=yield*Ne.filterCompactedEffect(O);for(let K=W.length-1;K>=0;K--){let B=W[K];if(B.info.role!=="assistant"||B.info.aside)continue;let re=B.parts.find(ve=>ve.type==="tool"&&(ve.state.status==="running"||ve.state.status==="pending"));return re&&re.type==="tool"?re.tool:null}return null}),xe=["A tool you called is still running and its result has not arrived. The user just wrote to you.","Answer them now, in a sentence or two, from what you already know. You cannot use tools until the run returns, so do not promise to look anything up.","Do not restate at length what you are doing; if their message changes the work, say what you will do once the run returns."].join(" "),de=oe.fn("SessionPrompt.aside")(function*(O){let W=yield*ae.context,K=yield*Ne.filterCompactedEffect(O.sessionID),B=yield*we(O.user.model.providerID,O.user.model.modelID,O.sessionID),re=yield*x.get(O.user.agent);if(!re)return null;let ve={id:Ve.ascending(),parentID:O.user.id,role:"assistant",mode:re.name,agent:re.name,variant:O.user.variant,path:{cwd:W.directory,root:W.worktree},cost:0,tokens:{input:0,output:0,reasoning:0,cache:{read:0,write:0}},modelID:B.id,providerID:B.providerID,time:{created:Date.now()},sessionID:O.sessionID,aside:!0};yield*E.updateMessage(ve);let $=yield*M.create({assistantMessage:ve,sessionID:O.sessionID,model:B}),[_e,De,He]=yield*oe.all([oe.promise(()=>Qn.environment(B)),Z.system().pipe(oe.orDie),oe.promise(()=>Ne.toModelMessages(K,B,{runningToolNote:`[${O.running} is still running. You are answering the user beside it; its result arrives when it finishes.]`}))]);t.info("aside",{sessionID:O.sessionID,running:O.running,messageID:ve.id}),yield*$.process({user:O.user,agent:re,permission:O.session.permission,sessionID:O.sessionID,parentSessionID:O.session.parentID,system:[..._e,...De,xe],messages:He,tools:{},model:B});let $e=yield*Qe(O.sessionID);if($e.info.id!==ve.id)return $e;let{drop:pe,answered:je}=Ac($e.parts);if(!je)return t.warn("aside wrote no usable answer; the message waits for the run",{sessionID:O.sessionID,messageID:ve.id}),yield*E.removeMessage({sessionID:O.sessionID,messageID:ve.id}),null;for(let Ce of pe)yield*E.removePart({sessionID:O.sessionID,messageID:ve.id,partID:Ce});return pe.length>0?yield*Qe(O.sessionID):$e}),ue=oe.fn("SessionPrompt.prompt")(function*(O){let W=yield*E.get(O.sessionID);yield*oe.promise(()=>cs.cleanup(W));let K=yield*J(O);yield*E.touch(O.sessionID);let B=[];for(let[_e,De]of Object.entries(O.tools??{}))B.push({permission:_e,action:De?"allow":"deny",pattern:"*"});if(B.length>0&&(W.permission=B,yield*E.setPermission({sessionID:W.id,permission:B})),O.noReply===!0)return K;if((yield*ae.get(he)).runners.get(O.sessionID)?.busy===!0&&Cc(K.parts)){let De=yield*X(O.sessionID);if(De){let He=yield*de({sessionID:O.sessionID,session:W,user:K.info,running:De}).pipe(oe.catchCause($e=>(t.warn("aside failed; the message waits for the run",{sessionID:O.sessionID,cause:String($e)}),oe.succeed(null))));if(He)return He}}let ve=(yield*ae.get(he)).runners.get(O.sessionID)?.busy===!0,$=yield*xt({sessionID:O.sessionID});return ve&&vt.compareAscending($.info.id,K.info.id)<0&&($=yield*xt({sessionID:O.sessionID})),$}),Qe=n(O=>oe.promise(async()=>{let W;for await(let K of Ne.stream(O))if(W??=K,K.info.role!=="user")return K;if(W)return W;throw new Error("Impossible")}),"lastAssistant"),dt=oe.fn("SessionPrompt.run")(function*(O){let W=yield*ae.context,K,B=0,re=yield*E.get(O);for(;;){if(qo.isPaused()){qo.hold(O);break}yield*_.set(O,{type:"busy"}),t.info("loop",{step:B,sessionID:O});let ve=yield*Ne.filterCompactedEffect(O),$,_e,De,He=[];for(let Re=ve.length-1;Re>=0;Re--){let Le=ve[Re];if(Le.info.role==="assistant"&&Le.info.aside)continue;if(!$&&Le.info.role==="user"&&($=Le.info),!_e&&Le.info.role==="assistant"&&(_e=Le.info),!De&&Le.info.role==="assistant"&&Le.info.finish&&(De=Le.info),$&&De)break;let et=Le.parts.filter(lt=>lt.type==="compaction"||lt.type==="subtask");et&&!De&&He.push(...et)}if(!$)throw new Error("No user message found in stream. This should never happen.");let pe=ve.findLast(Re=>Re.info.role==="assistant"&&Re.info.id===_e?.id)?.parts.some(Re=>Re.type==="tool")??!1;if(_e?.finish&&!["tool-calls"].includes(_e.finish)&&!pe&&vt.compareAscending($.id,_e.id)<0){t.info("exiting loop",{sessionID:O});break}B++,B===1&&(yield*ce({session:re,modelID:$.model.modelID,providerID:$.model.providerID,history:ve}).pipe(oe.ignore,oe.forkIn(F)));let je=yield*we($.model.providerID,$.model.modelID,O),Ce=He.pop();if(Ce?.type==="subtask"){yield*me({task:Ce,model:je,lastUser:$,sessionID:O,session:re,msgs:ve});continue}if(Ce?.type==="compaction"){let Re=yield*oe.gen(function*(){let et=ve.findLast(Io=>Io.info.role==="user"&&!Io.parts.some(Vr=>Vr.type==="compaction"));if(!et||et.info.role!=="user")return;let lt=yield*x.get(et.info.agent);if(!lt)return;let bn=yield*ie({agent:lt,session:re,model:je,tools:et.info.tools,processor:{message:{id:$.id},partFromToolCall:n(()=>{},"partFromToolCall")},bypassAgentCheck:!1,messages:ve}),[zt,An,Hr]=yield*oe.all([oe.promise(()=>Qn.skills(lt)),oe.promise(()=>Qn.environment(je)),Z.system().pipe(oe.orDie)]),yr=Object.fromEntries(Object.entries(bn).map(([Io,Vr])=>[Io,{...Vr,execute:n(async()=>"Not run: this step only writes the summary.","execute")}]));return{agent:lt,user:et.info,system:[...An,...zt?[zt]:[],...Hr],tools:yr,permission:re.permission,parentSessionID:re.parentID}}).pipe(oe.catchCause(et=>oe.sync(()=>{t.warn("compaction: the session's prefix could not be rebuilt; summarizing without it",{sessionID:O,cause:String(et).slice(0,500)})})));if((yield*r.process({messages:ve,parentID:$.id,sessionID:O,auto:Ce.auto,overflow:Ce.overflow,shared:Re}))==="stop")break;continue}if(De&&De.summary!==!0&&(yield*r.isOverflow({tokens:De.tokens,model:je}))){yield*r.create({sessionID:O,agent:$.agent,model:$.model,auto:!0});continue}let Se=yield*x.get($.agent);if(!Se){let Re=(yield*x.list()).filter(lt=>!lt.hidden).map(lt=>lt.name),Le=Re.length?` Available agents: ${Re.join(", ")}`:"",et=new tt.Unknown({message:`Agent not found: "${$.agent}".${Le}`});throw yield*R.publish(Ke.Event.Error,{sessionID:O,error:et.toObject()}),et}let Ze=Se.steps??1/0,yt=B>=Ze;ve=yield*Q({messages:ve,agent:Se,session:re});let at={id:Ve.ascending(),parentID:$.id,role:"assistant",mode:Se.name,agent:Se.name,variant:$.variant,path:{cwd:W.directory,root:W.worktree},cost:0,tokens:{input:0,output:0,reasoning:0,cache:{read:0,write:0}},modelID:je.id,providerID:je.providerID,time:{created:Date.now()},sessionID:O};yield*E.updateMessage(at);let We=yield*M.create({assistantMessage:at,sessionID:O,model:je});if((yield*oe.onExit(oe.gen(function*(){let Le=ve.findLast(ko=>ko.info.role==="user")?.parts.some(ko=>ko.type==="agent")??!1,et=yield*ie({agent:Se,session:re,model:je,tools:$.tools,processor:We,bypassAgentCheck:Le,messages:ve});if($.format?.type==="json_schema"&&(et.StructuredOutput=C({schema:$.format.schema,onSuccess(ko){K=ko}})),B===1&&co.summarize({sessionID:O,messageID:$.id}),B>1&&De){let ko=new Set(ve.filter(Bn=>Bn.info.role==="assistant"&&Bn.info.aside).map(Bn=>Bn.info.parentID));for(let Bn of ve)if(!(Bn.info.role!=="user"||vt.compareAscending(Bn.info.id,De.id)<=0)&&!ko.has(Bn.info.id))for(let Bo of Bn.parts)Bo.type!=="text"||Bo.ignored||Bo.synthetic||Bo.text.trim()&&(Bo.text=["<system-reminder>","The user sent the following message:",Bo.text,"","Please address this message and continue with your tasks.","</system-reminder>"].join(`
1585
+ `))}yield*u.trigger("experimental.chat.messages.transform",{},{messages:ve});let[lt,bn,zt,An]=yield*oe.all([oe.promise(()=>Qn.skills(Se)),oe.promise(()=>Qn.environment(je)),Z.system().pipe(oe.orDie),oe.promise(()=>Ne.toModelMessages(ve,je))]),Hr=[...bn,...lt?[lt]:[],...zt],yr=$.format??{type:"text"};yr.type==="json_schema"&&Hr.push(qh);let Io=yield*We.process({user:$,agent:Se,permission:re.permission,sessionID:O,parentSessionID:re.parentID,system:Hr,messages:[...An,...yt?[{role:"assistant",content:zc}]:[]],tools:et,model:je,toolChoice:yr.type==="json_schema"?"required":void 0});if(K!==void 0)return We.message.structured=K,We.message.finish=We.message.finish??"stop",yield*E.updateMessage(We.message),"break";if(We.message.finish&&!["tool-calls","unknown"].includes(We.message.finish)&&!We.message.error){if(We.message.finish==="content-filter")return We.message.error=new tt.Unknown({message:"The response was blocked by the provider's content filter"}).toObject(),yield*E.updateMessage(We.message),yield*R.publish(Ke.Event.Error,{sessionID:O,error:We.message.error}),"break";if(yr.type==="json_schema")return We.message.error=new Ne.StructuredOutputError({message:"Model did not produce structured output",retries:0}).toObject(),yield*E.updateMessage(We.message),"break"}return Io==="stop"?"break":(Io==="compact"&&(yield*r.create({sessionID:O,agent:$.agent,model:$.model,auto:!0,overflow:!We.message.finish})),"continue")}),oe.fnUntraced(function*(Re){zr.isFailure(Re)&&lr.hasInterruptsOnly(Re.cause)&&(yield*We.abort()),yield*ae.withALS(()=>Z.clear(We.message.id)).pipe(oe.flatMap(Le=>Le))})))==="break")break}return yield*r.prune({sessionID:O}).pipe(oe.ignore,oe.forkIn(F)),yield*Qe(O)}),xt=oe.fn("SessionPrompt.loop")(function*(O){if(qo.isPaused())return qo.hold(O.sessionID),yield*Qe(O.sessionID);let W=yield*ae.get(he);return yield*ge(W.runners,O.sessionID).ensureRunning(dt(O.sessionID))}),Oe=oe.fn("SessionPrompt.shell")(function*(O){let W=yield*ae.get(he);return yield*ge(W.runners,O.sessionID).startShell(B=>le(O,B))}),ye=oe.fn("SessionPrompt.command")(function*(O){t.info("command",O);let W=yield*g.get(O.command);if(!W){let Re=(yield*g.list()).map(lt=>lt.name),Le=Re.length?` Available commands: ${Re.join(", ")}`:"",et=new tt.Unknown({message:`Command not found: "${O.command}".${Le}`});throw yield*R.publish(Ke.Event.Error,{sessionID:O.sessionID,error:et.toObject()}),et}let K=W.agent??O.agent??(yield*x.defaultAgent()),re=(O.arguments.match(P)??[]).map(Re=>Re.replace(D,"")),ve=yield*oe.promise(async()=>W.template),$=ve.match(y)??[],_e=0;for(let Re of $){let Le=Number(Re.slice(1));Le>_e&&(_e=Le)}let De=ve.replaceAll(y,(Re,Le)=>{let et=Number(Le),lt=et-1;return lt>=re.length?"":et===_e?re.slice(lt).join(" "):re[lt]}),He=ve.includes("$ARGUMENTS"),$e=De.replaceAll("$ARGUMENTS",O.arguments);$.length===0&&!He&&O.arguments.trim()&&($e=$e+`
1586
1586
 
1587
- `+O.arguments);let pe=Vo.shell($e);if(pe.length>0){let Re=yo.preferred(),Le=yield*oe.promise(()=>Promise.all(pe.map(async([,lt])=>(await Xt.text([lt],{shell:Re,nothrow:!0})).text))),et=0;$e=$e.replace(l,()=>Le[et++])}$e=$e.trim();let je=yield*oe.gen(function*(){if(W.model)return Gt.parseModel(W.model);if(W.agent){let Re=yield*x.get(W.agent);if(Re?.model)return Re.model}return O.model?Gt.parseModel(O.model):yield*be(O.sessionID)});yield*we(je.providerID,je.modelID,O.sessionID);let Ce=yield*x.get(K);if(!Ce){let Re=(yield*x.list()).filter(lt=>!lt.hidden).map(lt=>lt.name),Le=Re.length?` Available agents: ${Re.join(", ")}`:"",et=new tt.Unknown({message:`Agent not found: "${K}".${Le}`});throw yield*R.publish(Ke.Event.Error,{sessionID:O.sessionID,error:et.toObject()}),et}let Se=yield*te($e),Ze=Ce.mode==="subagent"&&W.subtask!==!1||W.subtask===!0,yt=Ze?[{type:"subtask",agent:Ce.name,description:W.description??"",command:O.command,model:{providerID:je.providerID,modelID:je.modelID},prompt:Se.find(Re=>Re.type==="text")?.text??""}]:[...Se,...O.parts??[]],at=Ze?O.agent??(yield*x.defaultAgent()):K,We=Ze?O.model?Gt.parseModel(O.model):yield*be(O.sessionID):je;yield*u.trigger("command.execute.before",{command:O.command,sessionID:O.sessionID,arguments:O.arguments},{parts:yt});let bt=yield*ue({sessionID:O.sessionID,messageID:O.messageID,model:We,agent:at,parts:yt,variant:O.variant});return yield*R.publish(Uo.Event.Executed,{name:O.command,sessionID:O.sessionID,arguments:O.arguments,messageID:bt.info.id}),bt});return e.of({assertNotBusy:Y,cancel:N,stopForPause:q,prompt:ue,loop:xt,shell:Oe,command:ye,resolvePromptParts:te})}));let i=Yt.unwrap(oe.sync(()=>T.layer.pipe(Yt.provide(Lo.layer),Yt.provide(Ps.defaultLayer),Yt.provide(No.defaultLayer),Yt.provide(Uo.defaultLayer),Yt.provide(Ge.defaultLayer),Yt.provide(Yo.defaultLayer),Yt.provide(ct.defaultLayer),Yt.provide(rn.defaultLayer),Yt.provide(As.defaultLayer),Yt.provide(ln.layer),Yt.provide(Gt.defaultLayer),Yt.provide(ho.defaultLayer),Yt.provide(st.defaultLayer),Yt.provide(Mt.defaultLayer),Yt.provide(Ke.defaultLayer),Yt.provide(In.defaultLayer),Yt.provide(Me.layer),Yt.provide(so)))),{runPromise:m}=qe(e,i);async function c(R){return m(_=>_.assertNotBusy(Ee.zod.parse(R)))}T.assertNotBusy=c,n(c,"assertNotBusy"),T.PromptInput=Ot.object({sessionID:Ee.zod,messageID:Ve.zod.optional(),model:Ot.object({providerID:rt.zod,modelID:Et.zod}).optional(),agent:Ot.string().optional(),noReply:Ot.boolean().optional(),tools:Ot.record(Ot.string(),Ot.boolean()).optional().describe("@deprecated tools and permissions have been merged, you can set permissions on the session itself now"),format:Ne.Format.optional(),system:Ot.string().optional(),variant:Ot.string().optional(),parts:Ot.array(Ot.discriminatedUnion("type",[Ne.TextPart.omit({messageID:!0,sessionID:!0}).partial({id:!0}).meta({ref:"TextPartInput"}),Ne.FilePart.omit({messageID:!0,sessionID:!0}).partial({id:!0}).meta({ref:"FilePartInput"}),Ne.AgentPart.omit({messageID:!0,sessionID:!0}).partial({id:!0}).meta({ref:"AgentPartInput"}),Ne.SubtaskPart.omit({messageID:!0,sessionID:!0}).partial({id:!0}).meta({ref:"SubtaskPartInput"})]))});async function d(R){return m(_=>_.prompt(T.PromptInput.parse(R)))}T.prompt=d,n(d,"prompt");async function b(R){return m(_=>_.resolvePromptParts(Ot.string().parse(R)))}T.resolvePromptParts=b,n(b,"resolvePromptParts");async function s(R){return m(_=>_.cancel(Ee.zod.parse(R)))}T.cancel=s,n(s,"cancel");async function p(){return m(R=>R.stopForPause())}T.stopForPause=p,n(p,"stopForPause"),T.LoopInput=Ot.object({sessionID:Ee.zod});async function f(R){return m(_=>_.loop(T.LoopInput.parse(R)))}T.loop=f,n(f,"loop"),T.ShellInput=Ot.object({sessionID:Ee.zod,messageID:Ve.zod.optional(),agent:Ot.string(),model:Ot.object({providerID:rt.zod,modelID:Et.zod}).optional(),command:Ot.string()});async function I(R){return m(_=>_.shell(T.ShellInput.parse(R)))}T.shell=I,n(I,"shell"),T.CommandInput=Ot.object({messageID:Ve.zod.optional(),sessionID:Ee.zod,agent:Ot.string().optional(),model:Ot.string().optional(),arguments:Ot.string(),command:Ot.string(),variant:Ot.string().optional(),parts:Ot.array(Ot.discriminatedUnion("type",[Ne.FilePart.omit({messageID:!0,sessionID:!0}).partial({id:!0})])).optional()});async function S(R){return m(_=>_.command(T.CommandInput.parse(R)))}T.command=S,n(S,"command");function C(R){let{$schema:_,...E}=R.schema;return Hc({id:"StructuredOutput",description:zh,inputSchema:Vi(E),async execute(x){return R.onSuccess(x),{output:"Structured output captured successfully.",title:"Structured Output",metadata:{valid:!0}}},toModelOutput({output:x}){return{type:"text",value:x.output}}})}T.createStructuredOutputTool=C,n(C,"createStructuredOutputTool");let l=/!`([^`]+)`/g,P=/(?:\[Image\s+\d+\]|"[^"]*"|'[^']*'|[^\s"']+)/gi,y=/\$(\d+)/g,D=/^["']|["']$/g})(Fn||={});import{Schema as Yc}from"effect";import qh from"zod";var $h=Yc.String.pipe(Yc.brand("WorkspaceID")),Yi=$h.pipe(Hn(t=>({make:n(e=>t.makeUnsafe(e),"make"),ascending:n(e=>t.makeUnsafe(vt.ascending("workspace",e)),"ascending"),zod:vt.schema("workspace").pipe(qh.custom())})));import{Effect as Xe,Layer as Ki,Scope as Wh,ServiceMap as Bh}from"effect";var Ke;(Y=>{let t=Ae.create({service:"session"}),e="New session - ",o="Child session - ";function i(N=!1){return(N?o:e)+new Date().toISOString()}n(i,"createDefaultTitle");function m(N){return new RegExp(`^(${e}|${o})\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$`).test(N)}Y.isDefaultTitle=m,n(m,"isDefaultTitle");function c(N){let q=N.summary_additions!==null||N.summary_deletions!==null||N.summary_files!==null?{additions:N.summary_additions??0,deletions:N.summary_deletions??0,files:N.summary_files??0,diffs:N.summary_diffs??void 0}:void 0,te=N.share_url?{url:N.share_url}:void 0,ce=N.revert??void 0;return{id:N.id,slug:N.slug,projectID:N.project_id,workspaceID:N.workspace_id??void 0,directory:N.directory,parentID:N.parent_id??void 0,title:N.title,version:N.version,summary:q,share:te,revert:ce,metadata:N.metadata??void 0,permission:N.permission??void 0,time:{created:N.time_created,updated:N.time_updated,compacting:N.time_compacting??void 0,archived:N.time_archived??void 0}}}Y.fromRow=c,n(c,"fromRow");function a(N){return{id:N.id,project_id:N.projectID,workspace_id:N.workspaceID,parent_id:N.parentID,slug:N.slug,directory:N.directory,title:N.title,version:N.version,share_url:N.share?.url,summary_additions:N.summary?.additions,summary_deletions:N.summary?.deletions,summary_files:N.summary?.files,summary_diffs:N.summary?.diffs,revert:N.revert??null,metadata:N.metadata??null,permission:N.permission,time_created:N.time.created,time_updated:N.time.updated,time_compacting:N.time.compacting,time_archived:N.time.archived}}Y.toRow=a,n(a,"toRow");function d(N){let q=N.match(/^(.+) \(fork #(\d+)\)$/);if(q){let te=q[1],ce=parseInt(q[2],10);return`${te} (fork #${ce+1})`}return`${N} (fork #1)`}n(d,"getForkedTitle"),Y.Info=Fe.object({id:Ee.zod,slug:Fe.string(),projectID:wr.zod,workspaceID:Yi.zod.optional(),directory:Fe.string(),parentID:Ee.zod.optional(),summary:Fe.object({additions:Fe.number(),deletions:Fe.number(),files:Fe.number(),diffs:cn.FileDiff.array().optional()}).optional(),share:Fe.object({url:Fe.string()}).optional(),title:Fe.string(),version:Fe.string(),time:Fe.object({created:Fe.number(),updated:Fe.number(),compacting:Fe.number().optional(),archived:Fe.number().optional()}),metadata:Fe.record(Fe.string(),Fe.unknown()).optional(),permission:Ge.Ruleset.optional(),revert:Fe.object({messageID:Ve.zod,partID:nt.zod.optional(),snapshot:Fe.string().optional(),diff:Fe.string().optional()}).optional()}).meta({ref:"Session"}),Y.ProjectInfo=Fe.object({id:wr.zod,name:Fe.string().optional(),worktree:Fe.string()}).meta({ref:"ProjectSummary"}),Y.GlobalInfo=Y.Info.extend({project:Y.ProjectInfo.nullable()}).meta({ref:"GlobalSession"}),Y.Event={Created:Nt.define({type:"session.created",version:1,aggregate:"sessionID",schema:Fe.object({sessionID:Ee.zod,info:Y.Info})}),Updated:Nt.define({type:"session.updated",version:1,aggregate:"sessionID",schema:Fe.object({sessionID:Ee.zod,info:rs(Y.Info).extend({share:rs(Y.Info.shape.share.unwrap()).optional(),time:rs(Y.Info.shape.time).optional()})}),busSchema:Fe.object({sessionID:Ee.zod,info:Y.Info})}),Deleted:Nt.define({type:"session.deleted",version:1,aggregate:"sessionID",schema:Fe.object({sessionID:Ee.zod,info:Y.Info})}),Diff:ht.define("session.diff",Fe.object({sessionID:Ee.zod,diff:cn.FileDiff.array()})),Error:ht.define("session.error",Fe.object({sessionID:Ee.zod.optional(),error:Ne.Assistant.shape.error}))};function f(N){let q=ne.project.vcs?Ji.join(ne.worktree,".opencode","plans"):Ji.join(wt.Path.data,"plans");return Ji.join(q,[N.time.created,N.slug].join("-")+".md")}Y.plan=f,n(f,"plan"),Y.getUsage=n(N=>{let q=n(J=>Number.isFinite(J)?J:0,"safe"),te=q(N.usage.inputTokens??0),ce=q(N.usage.outputTokens??0),Q=q(N.usage.reasoningTokens??0),ie=q(N.usage.cachedInputTokens??0),me=q(N.metadata?.anthropic?.cacheCreationInputTokens??N.metadata?.vertex?.cacheCreationInputTokens??N.metadata?.bedrock?.usage?.cacheWriteInputTokens??N.metadata?.venice?.usage?.cacheCreationInputTokens??0),le=q(te-ie-me),be={total:N.usage.totalTokens,input:le,output:ce-Q,reasoning:Q,cache:{write:me,read:ie}},fe=N.model.cost?.experimentalOver200K&&be.input+be.cache.read>2e5?N.model.cost.experimentalOver200K:N.model.cost;return{cost:q(new cr(0).add(new cr(be.input).mul(fe?.input??0).div(1e6)).add(new cr(be.output).mul(fe?.output??0).div(1e6)).add(new cr(be.cache.read).mul(fe?.cache?.read??0).div(1e6)).add(new cr(be.cache.write).mul(fe?.cache?.write??0).div(1e6)).add(new cr(be.reasoning).mul(fe?.output??0).div(1e6)).toNumber()),tokens:be}},"getUsage");class I extends Error{constructor(te){super(`Session ${te} is busy`);this.sessionID=te}sessionID;static{n(this,"BusyError")}}Y.BusyError=I;class h extends Bh.Service()("@opencode/Session"){static{n(this,"Service")}}Y.Service=h;let S=n(N=>Xe.sync(()=>Ft.use(N)),"db");Y.layer=Ki.effect(h,Xe.gen(function*(){let N=yield*Me.Service,q=yield*Be.Service,te=yield*Wh.Scope,ce=Xe.fn("Session.createNext")(function*($){let _e=yield*ae.context,De={id:Ee.descending($.id),slug:Gs.create(),version:Jt.VERSION,projectID:_e.project.id,directory:$.directory,workspaceID:$.workspaceID,parentID:$.parentID,title:$.title??i(!!$.parentID),metadata:$.metadata,permission:$.permission,time:{created:Date.now(),updated:Date.now()}};t.info("created",De),yield*Xe.sync(()=>Nt.run(Y.Event.Created,{sessionID:De.id,info:De}));let He=yield*q.get();return!De.parentID&&(ze.OPENCODE_AUTO_SHARE||He.share==="auto")&&(yield*ie(De.id).pipe(Xe.ignore,Xe.forkIn(te))),ze.OPENCODE_EXPERIMENTAL_WORKSPACES||(yield*N.publish(Y.Event.Updated,{sessionID:De.id,info:De})),De}),Q=Xe.fn("Session.get")(function*($){let _e=yield*S(De=>De.select().from(It).where((0,ke.eq)(It.id,$)).get());if(!_e)throw new Do({message:`Session not found: ${$}`});return c(_e)}),ie=Xe.fn("Session.share")(function*($){if((yield*q.get()).share==="disabled")throw new Error("Sharing is disabled in configuration");let De=yield*Xe.promise(async()=>{let{ShareNext:He}=await import("./share-next-GSWCSZSC.js");return He.create($)});return yield*Xe.sync(()=>Nt.run(Y.Event.Updated,{sessionID:$,info:{share:{url:De.url}}})),De}),me=Xe.fn("Session.unshare")(function*($){yield*Xe.promise(async()=>{let{ShareNext:_e}=await import("./share-next-GSWCSZSC.js");await _e.remove($)}),yield*Xe.sync(()=>Nt.run(Y.Event.Updated,{sessionID:$,info:{share:{url:null}}}))}),le=Xe.fn("Session.children")(function*($){let _e=yield*ae.context;return(yield*S(He=>He.select().from(It).where((0,ke.and)((0,ke.eq)(It.project_id,_e.project.id),(0,ke.eq)(It.parent_id,$))).all())).map(c)}),we=Xe.fnUntraced(function*($){try{let _e=yield*Q($),De=yield*le($);for(let He of De)yield*we(He.id);yield*me($).pipe(Xe.ignore),yield*Xe.sync(()=>{Nt.run(Y.Event.Deleted,{sessionID:$,info:_e}),Nt.remove($)})}catch(_e){t.error(_e)}}),be=n($=>Xe.gen(function*(){return yield*Xe.sync(()=>Nt.run(Ne.Event.Updated,{sessionID:$.sessionID,info:$})),$}).pipe(Xe.withSpan("Session.updateMessage")),"updateMessage"),fe=n($=>Xe.gen(function*(){return yield*Xe.sync(()=>Nt.run(Ne.Event.PartUpdated,{sessionID:$.sessionID,part:structuredClone($),time:Date.now()})),$}).pipe(Xe.withSpan("Session.updatePart")),"updatePart"),J=Xe.fn("Session.create")(function*($){let _e=yield*ae.directory;return yield*ce({parentID:$?.parentID,directory:_e,title:$?.title,permission:$?.permission,workspaceID:$?.workspaceID,metadata:$?.metadata})}),X=Xe.fn("Session.fork")(function*($){let _e=yield*ae.directory,De=yield*Q($.sessionID),He=d(De.title),$e=yield*ce({directory:_e,workspaceID:De.workspaceID,title:He}),pe=yield*W({sessionID:$.sessionID}),je=new Map;for(let Ce of pe){if($.messageID&&vt.compareAscending(Ce.info.id,$.messageID)>=0)break;let Se=Ve.ascending();je.set(Ce.info.id,Se);let Ze=Ce.info.role==="assistant"&&Ce.info.parentID?je.get(Ce.info.parentID):void 0,yt=yield*be({...Ce.info,sessionID:$e.id,id:Se,...Ze&&{parentID:Ze}});for(let at of Ce.parts)yield*fe({...at,id:nt.ascending(),messageID:yt.id,sessionID:$e.id})}return $e}),xe=n(($,_e)=>Xe.sync(()=>Nt.run(Y.Event.Updated,{sessionID:$,info:_e})),"patch"),de=Xe.fn("Session.touch")(function*($){yield*xe($,{time:{updated:Date.now()}})}),ue=Xe.fn("Session.setTitle")(function*($){yield*xe($.sessionID,{title:$.title})}),Qe=Xe.fn("Session.setArchived")(function*($){yield*xe($.sessionID,{time:{archived:$.time}})}),dt=Xe.fn("Session.setPermission")(function*($){yield*xe($.sessionID,{permission:$.permission,time:{updated:Date.now()}})}),xt=Xe.fn("Session.setRevert")(function*($){yield*xe($.sessionID,{summary:$.summary,time:{updated:Date.now()},revert:$.revert})}),Oe=Xe.fn("Session.clearRevert")(function*($){yield*xe($,{time:{updated:Date.now()},revert:null})}),ye=Xe.fn("Session.setSummary")(function*($){yield*xe($.sessionID,{time:{updated:Date.now()},summary:$.summary})}),O=Xe.fn("Session.diff")(function*($){return yield*Xe.tryPromise(()=>Vn.read(["session_diff",$])).pipe(Xe.orElseSucceed(()=>[]))}),W=Xe.fn("Session.messages")(function*($){return $.limit?Ne.page({sessionID:$.sessionID,limit:$.limit}).items:Array.from(Ne.stream($.sessionID)).reverse()}),K=Xe.fn("Session.removeMessage")(function*($){return yield*Xe.sync(()=>Nt.run(Ne.Event.Removed,{sessionID:$.sessionID,messageID:$.messageID})),$.messageID}),B=Xe.fn("Session.removePart")(function*($){return yield*Xe.sync(()=>Nt.run(Ne.Event.PartRemoved,{sessionID:$.sessionID,messageID:$.messageID,partID:$.partID})),$.partID}),re=Xe.fn("Session.updatePartDelta")(function*($){yield*N.publish(Ne.Event.PartDelta,$)}),ve=Xe.fn("Session.initialize")(function*($){yield*Xe.promise(()=>Fn.command({sessionID:$.sessionID,messageID:$.messageID,model:$.providerID+"/"+$.modelID,command:Uo.Default.INIT,arguments:""}))});return h.of({create:J,fork:X,touch:de,get:Q,share:ie,unshare:me,setTitle:ue,setArchived:Qe,setPermission:dt,setRevert:xt,clearRevert:Oe,setSummary:ye,diff:O,messages:W,children:le,remove:we,updateMessage:be,removeMessage:K,removePart:B,updatePart:fe,updatePartDelta:re,initialize:ve})})),Y.defaultLayer=Y.layer.pipe(Ki.provide(Me.layer),Ki.provide(Be.defaultLayer));let{runPromise:P}=qe(h,Y.defaultLayer);Y.create=Lt(Fe.object({parentID:Ee.zod.optional(),title:Fe.string().optional(),permission:Y.Info.shape.permission,workspaceID:Yi.zod.optional(),metadata:Fe.record(Fe.string(),Fe.unknown()).optional()}).optional(),N=>P(q=>q.create(N))),Y.fork=Lt(Fe.object({sessionID:Ee.zod,messageID:Ve.zod.optional()}),N=>P(q=>q.fork(N))),Y.touch=Lt(Ee.zod,N=>P(q=>q.touch(N))),Y.get=Lt(Ee.zod,N=>P(q=>q.get(N))),Y.share=Lt(Ee.zod,N=>P(q=>q.share(N))),Y.unshare=Lt(Ee.zod,N=>P(q=>q.unshare(N))),Y.setTitle=Lt(Fe.object({sessionID:Ee.zod,title:Fe.string()}),N=>P(q=>q.setTitle(N))),Y.setArchived=Lt(Fe.object({sessionID:Ee.zod,time:Fe.number().optional()}),N=>P(q=>q.setArchived(N))),Y.setPermission=Lt(Fe.object({sessionID:Ee.zod,permission:Ge.Ruleset}),N=>P(q=>q.setPermission(N))),Y.setRevert=Lt(Fe.object({sessionID:Ee.zod,revert:Y.Info.shape.revert,summary:Y.Info.shape.summary}),N=>P(q=>q.setRevert({sessionID:N.sessionID,revert:N.revert,summary:N.summary}))),Y.clearRevert=Lt(Ee.zod,N=>P(q=>q.clearRevert(N))),Y.setSummary=Lt(Fe.object({sessionID:Ee.zod,summary:Y.Info.shape.summary}),N=>P(q=>q.setSummary({sessionID:N.sessionID,summary:N.summary}))),Y.diff=Lt(Ee.zod,N=>P(q=>q.diff(N))),Y.messages=Lt(Fe.object({sessionID:Ee.zod,limit:Fe.number().optional()}),N=>P(q=>q.messages(N)));function*z(N){let q=ne.project,te=[(0,ke.eq)(It.project_id,q.id)];N?.workspaceID&&te.push((0,ke.eq)(It.workspace_id,N.workspaceID)),N?.directory&&te.push((0,ke.eq)(It.directory,N.directory)),N?.roots&&te.push((0,ke.isNull)(It.parent_id)),N?.start&&te.push((0,ke.gte)(It.time_updated,N.start)),N?.search&&te.push((0,ke.like)(It.title,`%${N.search}%`));let ce=N?.limit??100,Q=Ft.use(ie=>ie.select().from(It).where((0,ke.and)(...te)).orderBy((0,ke.desc)(It.time_updated)).limit(ce).all());for(let ie of Q)yield c(ie)}Y.list=z,n(z,"list");function*V(N){let q=[];N?.directory&&q.push((0,ke.eq)(It.directory,N.directory)),N?.roots&&q.push((0,ke.isNull)(It.parent_id)),N?.start&&q.push((0,ke.gte)(It.time_updated,N.start)),N?.cursor&&q.push((0,ke.lt)(It.time_updated,N.cursor)),N?.search&&q.push((0,ke.like)(It.title,`%${N.search}%`)),N?.archived||q.push((0,ke.isNull)(It.time_archived));let te=N?.limit??100,ce=Ft.use(me=>(q.length>0?me.select().from(It).where((0,ke.and)(...q)):me.select().from(It)).orderBy((0,ke.desc)(It.time_updated),(0,ke.desc)(It.id)).limit(te).all()),Q=[...new Set(ce.map(me=>me.project_id))],ie=new Map;if(Q.length>0){let me=Ft.use(le=>le.select({id:Go.id,name:Go.name,worktree:Go.worktree}).from(Go).where((0,ke.inArray)(Go.id,Q)).all());for(let le of me)ie.set(le.id,{id:le.id,name:le.name??void 0,worktree:le.worktree})}for(let me of ce){let le=ie.get(me.project_id)??null;yield{...c(me),project:le}}}Y.listGlobal=V,n(V,"listGlobal"),Y.children=Lt(Ee.zod,N=>P(q=>q.children(N))),Y.remove=Lt(Ee.zod,N=>P(q=>q.remove(N)));async function ee(N){return Ne.Info.parse(N),P(q=>q.updateMessage(N))}Y.updateMessage=ee,n(ee,"updateMessage"),Y.removeMessage=Lt(Fe.object({sessionID:Ee.zod,messageID:Ve.zod}),N=>P(q=>q.removeMessage(N))),Y.removePart=Lt(Fe.object({sessionID:Ee.zod,messageID:Ve.zod,partID:nt.zod}),N=>P(q=>q.removePart(N)));async function Z(N){return Ne.Part.parse(N),P(q=>q.updatePart(N))}Y.updatePart=Z,n(Z,"updatePart"),Y.updatePartDelta=Lt(Fe.object({sessionID:Ee.zod,messageID:Ve.zod,partID:nt.zod,field:Fe.string(),delta:Fe.string()}),N=>P(q=>q.updatePartDelta(N))),Y.initialize=Lt(Fe.object({sessionID:Ee.zod,modelID:Et.zod,providerID:rt.zod,messageID:Ve.zod}),N=>P(q=>q.initialize(N)))})(Ke||={});var Jc=`Use this tool when you have completed the planning phase and are ready to exit plan agent.
1587
+ `+O.arguments);let pe=Vo.shell($e);if(pe.length>0){let Re=yo.preferred(),Le=yield*oe.promise(()=>Promise.all(pe.map(async([,lt])=>(await Xt.text([lt],{shell:Re,nothrow:!0})).text))),et=0;$e=$e.replace(l,()=>Le[et++])}$e=$e.trim();let je=yield*oe.gen(function*(){if(W.model)return Gt.parseModel(W.model);if(W.agent){let Re=yield*x.get(W.agent);if(Re?.model)return Re.model}return O.model?Gt.parseModel(O.model):yield*be(O.sessionID)});yield*we(je.providerID,je.modelID,O.sessionID);let Ce=yield*x.get(K);if(!Ce){let Re=(yield*x.list()).filter(lt=>!lt.hidden).map(lt=>lt.name),Le=Re.length?` Available agents: ${Re.join(", ")}`:"",et=new tt.Unknown({message:`Agent not found: "${K}".${Le}`});throw yield*R.publish(Ke.Event.Error,{sessionID:O.sessionID,error:et.toObject()}),et}let Se=yield*te($e),Ze=Ce.mode==="subagent"&&W.subtask!==!1||W.subtask===!0,yt=Ze?[{type:"subtask",agent:Ce.name,description:W.description??"",command:O.command,model:{providerID:je.providerID,modelID:je.modelID},prompt:Se.find(Re=>Re.type==="text")?.text??""}]:[...Se,...O.parts??[]],at=Ze?O.agent??(yield*x.defaultAgent()):K,We=Ze?O.model?Gt.parseModel(O.model):yield*be(O.sessionID):je;yield*u.trigger("command.execute.before",{command:O.command,sessionID:O.sessionID,arguments:O.arguments},{parts:yt});let bt=yield*ue({sessionID:O.sessionID,messageID:O.messageID,model:We,agent:at,parts:yt,variant:O.variant});return yield*R.publish(Uo.Event.Executed,{name:O.command,sessionID:O.sessionID,arguments:O.arguments,messageID:bt.info.id}),bt});return e.of({assertNotBusy:Y,cancel:N,stopForPause:q,prompt:ue,loop:xt,shell:Oe,command:ye,resolvePromptParts:te})}));let i=Yt.unwrap(oe.sync(()=>T.layer.pipe(Yt.provide(Lo.layer),Yt.provide(Ps.defaultLayer),Yt.provide(No.defaultLayer),Yt.provide(Uo.defaultLayer),Yt.provide(Ge.defaultLayer),Yt.provide(Yo.defaultLayer),Yt.provide(ct.defaultLayer),Yt.provide(rn.defaultLayer),Yt.provide(As.defaultLayer),Yt.provide(ln.layer),Yt.provide(Gt.defaultLayer),Yt.provide(ho.defaultLayer),Yt.provide(st.defaultLayer),Yt.provide(Mt.defaultLayer),Yt.provide(Ke.defaultLayer),Yt.provide(In.defaultLayer),Yt.provide(Me.layer),Yt.provide(so)))),{runPromise:m}=qe(e,i);async function c(R){return m(_=>_.assertNotBusy(Ee.zod.parse(R)))}T.assertNotBusy=c,n(c,"assertNotBusy"),T.PromptInput=Ot.object({sessionID:Ee.zod,messageID:Ve.zod.optional(),model:Ot.object({providerID:rt.zod,modelID:Et.zod}).optional(),agent:Ot.string().optional(),noReply:Ot.boolean().optional(),tools:Ot.record(Ot.string(),Ot.boolean()).optional().describe("@deprecated tools and permissions have been merged, you can set permissions on the session itself now"),format:Ne.Format.optional(),system:Ot.string().optional(),variant:Ot.string().optional(),parts:Ot.array(Ot.discriminatedUnion("type",[Ne.TextPart.omit({messageID:!0,sessionID:!0}).partial({id:!0}).meta({ref:"TextPartInput"}),Ne.FilePart.omit({messageID:!0,sessionID:!0}).partial({id:!0}).meta({ref:"FilePartInput"}),Ne.AgentPart.omit({messageID:!0,sessionID:!0}).partial({id:!0}).meta({ref:"AgentPartInput"}),Ne.SubtaskPart.omit({messageID:!0,sessionID:!0}).partial({id:!0}).meta({ref:"SubtaskPartInput"})]))});async function d(R){return m(_=>_.prompt(T.PromptInput.parse(R)))}T.prompt=d,n(d,"prompt");async function b(R){return m(_=>_.resolvePromptParts(Ot.string().parse(R)))}T.resolvePromptParts=b,n(b,"resolvePromptParts");async function s(R){return m(_=>_.cancel(Ee.zod.parse(R)))}T.cancel=s,n(s,"cancel");async function p(){return m(R=>R.stopForPause())}T.stopForPause=p,n(p,"stopForPause"),T.LoopInput=Ot.object({sessionID:Ee.zod});async function f(R){return m(_=>_.loop(T.LoopInput.parse(R)))}T.loop=f,n(f,"loop"),T.ShellInput=Ot.object({sessionID:Ee.zod,messageID:Ve.zod.optional(),agent:Ot.string(),model:Ot.object({providerID:rt.zod,modelID:Et.zod}).optional(),command:Ot.string()});async function I(R){return m(_=>_.shell(T.ShellInput.parse(R)))}T.shell=I,n(I,"shell"),T.CommandInput=Ot.object({messageID:Ve.zod.optional(),sessionID:Ee.zod,agent:Ot.string().optional(),model:Ot.string().optional(),arguments:Ot.string(),command:Ot.string(),variant:Ot.string().optional(),parts:Ot.array(Ot.discriminatedUnion("type",[Ne.FilePart.omit({messageID:!0,sessionID:!0}).partial({id:!0})])).optional()});async function S(R){return m(_=>_.command(T.CommandInput.parse(R)))}T.command=S,n(S,"command");function C(R){let{$schema:_,...E}=R.schema;return Vc({id:"StructuredOutput",description:Fh,inputSchema:Vi(E),async execute(x){return R.onSuccess(x),{output:"Structured output captured successfully.",title:"Structured Output",metadata:{valid:!0}}},toModelOutput({output:x}){return{type:"text",value:x.output}}})}T.createStructuredOutputTool=C,n(C,"createStructuredOutputTool");let l=/!`([^`]+)`/g,P=/(?:\[Image\s+\d+\]|"[^"]*"|'[^']*'|[^\s"']+)/gi,y=/\$(\d+)/g,D=/^["']|["']$/g})(Fn||={});import{Schema as Jc}from"effect";import $h from"zod";var Wh=Jc.String.pipe(Jc.brand("WorkspaceID")),Yi=Wh.pipe(Hn(t=>({make:n(e=>t.makeUnsafe(e),"make"),ascending:n(e=>t.makeUnsafe(vt.ascending("workspace",e)),"ascending"),zod:vt.schema("workspace").pipe($h.custom())})));import{Effect as Xe,Layer as Ki,Scope as Bh,ServiceMap as Gh}from"effect";var Ke;(Y=>{let t=Ae.create({service:"session"}),e="New session - ",o="Child session - ";function i(N=!1){return(N?o:e)+new Date().toISOString()}n(i,"createDefaultTitle");function m(N){return new RegExp(`^(${e}|${o})\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$`).test(N)}Y.isDefaultTitle=m,n(m,"isDefaultTitle");function c(N){let q=N.summary_additions!==null||N.summary_deletions!==null||N.summary_files!==null?{additions:N.summary_additions??0,deletions:N.summary_deletions??0,files:N.summary_files??0,diffs:N.summary_diffs??void 0}:void 0,te=N.share_url?{url:N.share_url}:void 0,ce=N.revert??void 0;return{id:N.id,slug:N.slug,projectID:N.project_id,workspaceID:N.workspace_id??void 0,directory:N.directory,parentID:N.parent_id??void 0,title:N.title,version:N.version,summary:q,share:te,revert:ce,metadata:N.metadata??void 0,permission:N.permission??void 0,time:{created:N.time_created,updated:N.time_updated,compacting:N.time_compacting??void 0,archived:N.time_archived??void 0}}}Y.fromRow=c,n(c,"fromRow");function a(N){return{id:N.id,project_id:N.projectID,workspace_id:N.workspaceID,parent_id:N.parentID,slug:N.slug,directory:N.directory,title:N.title,version:N.version,share_url:N.share?.url,summary_additions:N.summary?.additions,summary_deletions:N.summary?.deletions,summary_files:N.summary?.files,summary_diffs:N.summary?.diffs,revert:N.revert??null,metadata:N.metadata??null,permission:N.permission,time_created:N.time.created,time_updated:N.time.updated,time_compacting:N.time.compacting,time_archived:N.time.archived}}Y.toRow=a,n(a,"toRow");function d(N){let q=N.match(/^(.+) \(fork #(\d+)\)$/);if(q){let te=q[1],ce=parseInt(q[2],10);return`${te} (fork #${ce+1})`}return`${N} (fork #1)`}n(d,"getForkedTitle"),Y.Info=Fe.object({id:Ee.zod,slug:Fe.string(),projectID:wr.zod,workspaceID:Yi.zod.optional(),directory:Fe.string(),parentID:Ee.zod.optional(),summary:Fe.object({additions:Fe.number(),deletions:Fe.number(),files:Fe.number(),diffs:cn.FileDiff.array().optional()}).optional(),share:Fe.object({url:Fe.string()}).optional(),title:Fe.string(),version:Fe.string(),time:Fe.object({created:Fe.number(),updated:Fe.number(),compacting:Fe.number().optional(),archived:Fe.number().optional()}),metadata:Fe.record(Fe.string(),Fe.unknown()).optional(),permission:Ge.Ruleset.optional(),revert:Fe.object({messageID:Ve.zod,partID:nt.zod.optional(),snapshot:Fe.string().optional(),diff:Fe.string().optional()}).optional()}).meta({ref:"Session"}),Y.ProjectInfo=Fe.object({id:wr.zod,name:Fe.string().optional(),worktree:Fe.string()}).meta({ref:"ProjectSummary"}),Y.GlobalInfo=Y.Info.extend({project:Y.ProjectInfo.nullable()}).meta({ref:"GlobalSession"}),Y.Event={Created:Nt.define({type:"session.created",version:1,aggregate:"sessionID",schema:Fe.object({sessionID:Ee.zod,info:Y.Info})}),Updated:Nt.define({type:"session.updated",version:1,aggregate:"sessionID",schema:Fe.object({sessionID:Ee.zod,info:rs(Y.Info).extend({share:rs(Y.Info.shape.share.unwrap()).optional(),time:rs(Y.Info.shape.time).optional()})}),busSchema:Fe.object({sessionID:Ee.zod,info:Y.Info})}),Deleted:Nt.define({type:"session.deleted",version:1,aggregate:"sessionID",schema:Fe.object({sessionID:Ee.zod,info:Y.Info})}),Diff:ht.define("session.diff",Fe.object({sessionID:Ee.zod,diff:cn.FileDiff.array()})),Error:ht.define("session.error",Fe.object({sessionID:Ee.zod.optional(),error:Ne.Assistant.shape.error}))};function f(N){let q=ne.project.vcs?Ji.join(ne.worktree,".opencode","plans"):Ji.join(wt.Path.data,"plans");return Ji.join(q,[N.time.created,N.slug].join("-")+".md")}Y.plan=f,n(f,"plan"),Y.getUsage=n(N=>{let q=n(J=>Number.isFinite(J)?J:0,"safe"),te=q(N.usage.inputTokens??0),ce=q(N.usage.outputTokens??0),Q=q(N.usage.reasoningTokens??0),ie=q(N.usage.cachedInputTokens??0),me=q(N.metadata?.anthropic?.cacheCreationInputTokens??N.metadata?.vertex?.cacheCreationInputTokens??N.metadata?.bedrock?.usage?.cacheWriteInputTokens??N.metadata?.venice?.usage?.cacheCreationInputTokens??0),le=q(te-ie-me),be={total:N.usage.totalTokens,input:le,output:ce-Q,reasoning:Q,cache:{write:me,read:ie}},fe=N.model.cost?.experimentalOver200K&&be.input+be.cache.read>2e5?N.model.cost.experimentalOver200K:N.model.cost;return{cost:q(new cr(0).add(new cr(be.input).mul(fe?.input??0).div(1e6)).add(new cr(be.output).mul(fe?.output??0).div(1e6)).add(new cr(be.cache.read).mul(fe?.cache?.read??0).div(1e6)).add(new cr(be.cache.write).mul(fe?.cache?.write??0).div(1e6)).add(new cr(be.reasoning).mul(fe?.output??0).div(1e6)).toNumber()),tokens:be}},"getUsage");class I extends Error{constructor(te){super(`Session ${te} is busy`);this.sessionID=te}sessionID;static{n(this,"BusyError")}}Y.BusyError=I;class h extends Gh.Service()("@opencode/Session"){static{n(this,"Service")}}Y.Service=h;let S=n(N=>Xe.sync(()=>Ft.use(N)),"db");Y.layer=Ki.effect(h,Xe.gen(function*(){let N=yield*Me.Service,q=yield*Be.Service,te=yield*Bh.Scope,ce=Xe.fn("Session.createNext")(function*($){let _e=yield*ae.context,De={id:Ee.descending($.id),slug:Gs.create(),version:Jt.VERSION,projectID:_e.project.id,directory:$.directory,workspaceID:$.workspaceID,parentID:$.parentID,title:$.title??i(!!$.parentID),metadata:$.metadata,permission:$.permission,time:{created:Date.now(),updated:Date.now()}};t.info("created",De),yield*Xe.sync(()=>Nt.run(Y.Event.Created,{sessionID:De.id,info:De}));let He=yield*q.get();return!De.parentID&&(ze.OPENCODE_AUTO_SHARE||He.share==="auto")&&(yield*ie(De.id).pipe(Xe.ignore,Xe.forkIn(te))),ze.OPENCODE_EXPERIMENTAL_WORKSPACES||(yield*N.publish(Y.Event.Updated,{sessionID:De.id,info:De})),De}),Q=Xe.fn("Session.get")(function*($){let _e=yield*S(De=>De.select().from(It).where((0,ke.eq)(It.id,$)).get());if(!_e)throw new Do({message:`Session not found: ${$}`});return c(_e)}),ie=Xe.fn("Session.share")(function*($){if((yield*q.get()).share==="disabled")throw new Error("Sharing is disabled in configuration");let De=yield*Xe.promise(async()=>{let{ShareNext:He}=await import("./share-next-PRCWHS3Z.js");return He.create($)});return yield*Xe.sync(()=>Nt.run(Y.Event.Updated,{sessionID:$,info:{share:{url:De.url}}})),De}),me=Xe.fn("Session.unshare")(function*($){yield*Xe.promise(async()=>{let{ShareNext:_e}=await import("./share-next-PRCWHS3Z.js");await _e.remove($)}),yield*Xe.sync(()=>Nt.run(Y.Event.Updated,{sessionID:$,info:{share:{url:null}}}))}),le=Xe.fn("Session.children")(function*($){let _e=yield*ae.context;return(yield*S(He=>He.select().from(It).where((0,ke.and)((0,ke.eq)(It.project_id,_e.project.id),(0,ke.eq)(It.parent_id,$))).all())).map(c)}),we=Xe.fnUntraced(function*($){try{let _e=yield*Q($),De=yield*le($);for(let He of De)yield*we(He.id);yield*me($).pipe(Xe.ignore),yield*Xe.sync(()=>{Nt.run(Y.Event.Deleted,{sessionID:$,info:_e}),Nt.remove($)})}catch(_e){t.error(_e)}}),be=n($=>Xe.gen(function*(){return yield*Xe.sync(()=>Nt.run(Ne.Event.Updated,{sessionID:$.sessionID,info:$})),$}).pipe(Xe.withSpan("Session.updateMessage")),"updateMessage"),fe=n($=>Xe.gen(function*(){return yield*Xe.sync(()=>Nt.run(Ne.Event.PartUpdated,{sessionID:$.sessionID,part:structuredClone($),time:Date.now()})),$}).pipe(Xe.withSpan("Session.updatePart")),"updatePart"),J=Xe.fn("Session.create")(function*($){let _e=yield*ae.directory;return yield*ce({parentID:$?.parentID,directory:_e,title:$?.title,permission:$?.permission,workspaceID:$?.workspaceID,metadata:$?.metadata})}),X=Xe.fn("Session.fork")(function*($){let _e=yield*ae.directory,De=yield*Q($.sessionID),He=d(De.title),$e=yield*ce({directory:_e,workspaceID:De.workspaceID,title:He}),pe=yield*W({sessionID:$.sessionID}),je=new Map;for(let Ce of pe){if($.messageID&&vt.compareAscending(Ce.info.id,$.messageID)>=0)break;let Se=Ve.ascending();je.set(Ce.info.id,Se);let Ze=Ce.info.role==="assistant"&&Ce.info.parentID?je.get(Ce.info.parentID):void 0,yt=yield*be({...Ce.info,sessionID:$e.id,id:Se,...Ze&&{parentID:Ze}});for(let at of Ce.parts)yield*fe({...at,id:nt.ascending(),messageID:yt.id,sessionID:$e.id})}return $e}),xe=n(($,_e)=>Xe.sync(()=>Nt.run(Y.Event.Updated,{sessionID:$,info:_e})),"patch"),de=Xe.fn("Session.touch")(function*($){yield*xe($,{time:{updated:Date.now()}})}),ue=Xe.fn("Session.setTitle")(function*($){yield*xe($.sessionID,{title:$.title})}),Qe=Xe.fn("Session.setArchived")(function*($){yield*xe($.sessionID,{time:{archived:$.time}})}),dt=Xe.fn("Session.setPermission")(function*($){yield*xe($.sessionID,{permission:$.permission,time:{updated:Date.now()}})}),xt=Xe.fn("Session.setRevert")(function*($){yield*xe($.sessionID,{summary:$.summary,time:{updated:Date.now()},revert:$.revert})}),Oe=Xe.fn("Session.clearRevert")(function*($){yield*xe($,{time:{updated:Date.now()},revert:null})}),ye=Xe.fn("Session.setSummary")(function*($){yield*xe($.sessionID,{time:{updated:Date.now()},summary:$.summary})}),O=Xe.fn("Session.diff")(function*($){return yield*Xe.tryPromise(()=>Vn.read(["session_diff",$])).pipe(Xe.orElseSucceed(()=>[]))}),W=Xe.fn("Session.messages")(function*($){return $.limit?Ne.page({sessionID:$.sessionID,limit:$.limit}).items:Array.from(Ne.stream($.sessionID)).reverse()}),K=Xe.fn("Session.removeMessage")(function*($){return yield*Xe.sync(()=>Nt.run(Ne.Event.Removed,{sessionID:$.sessionID,messageID:$.messageID})),$.messageID}),B=Xe.fn("Session.removePart")(function*($){return yield*Xe.sync(()=>Nt.run(Ne.Event.PartRemoved,{sessionID:$.sessionID,messageID:$.messageID,partID:$.partID})),$.partID}),re=Xe.fn("Session.updatePartDelta")(function*($){yield*N.publish(Ne.Event.PartDelta,$)}),ve=Xe.fn("Session.initialize")(function*($){yield*Xe.promise(()=>Fn.command({sessionID:$.sessionID,messageID:$.messageID,model:$.providerID+"/"+$.modelID,command:Uo.Default.INIT,arguments:""}))});return h.of({create:J,fork:X,touch:de,get:Q,share:ie,unshare:me,setTitle:ue,setArchived:Qe,setPermission:dt,setRevert:xt,clearRevert:Oe,setSummary:ye,diff:O,messages:W,children:le,remove:we,updateMessage:be,removeMessage:K,removePart:B,updatePart:fe,updatePartDelta:re,initialize:ve})})),Y.defaultLayer=Y.layer.pipe(Ki.provide(Me.layer),Ki.provide(Be.defaultLayer));let{runPromise:P}=qe(h,Y.defaultLayer);Y.create=Lt(Fe.object({parentID:Ee.zod.optional(),title:Fe.string().optional(),permission:Y.Info.shape.permission,workspaceID:Yi.zod.optional(),metadata:Fe.record(Fe.string(),Fe.unknown()).optional()}).optional(),N=>P(q=>q.create(N))),Y.fork=Lt(Fe.object({sessionID:Ee.zod,messageID:Ve.zod.optional()}),N=>P(q=>q.fork(N))),Y.touch=Lt(Ee.zod,N=>P(q=>q.touch(N))),Y.get=Lt(Ee.zod,N=>P(q=>q.get(N))),Y.share=Lt(Ee.zod,N=>P(q=>q.share(N))),Y.unshare=Lt(Ee.zod,N=>P(q=>q.unshare(N))),Y.setTitle=Lt(Fe.object({sessionID:Ee.zod,title:Fe.string()}),N=>P(q=>q.setTitle(N))),Y.setArchived=Lt(Fe.object({sessionID:Ee.zod,time:Fe.number().optional()}),N=>P(q=>q.setArchived(N))),Y.setPermission=Lt(Fe.object({sessionID:Ee.zod,permission:Ge.Ruleset}),N=>P(q=>q.setPermission(N))),Y.setRevert=Lt(Fe.object({sessionID:Ee.zod,revert:Y.Info.shape.revert,summary:Y.Info.shape.summary}),N=>P(q=>q.setRevert({sessionID:N.sessionID,revert:N.revert,summary:N.summary}))),Y.clearRevert=Lt(Ee.zod,N=>P(q=>q.clearRevert(N))),Y.setSummary=Lt(Fe.object({sessionID:Ee.zod,summary:Y.Info.shape.summary}),N=>P(q=>q.setSummary({sessionID:N.sessionID,summary:N.summary}))),Y.diff=Lt(Ee.zod,N=>P(q=>q.diff(N))),Y.messages=Lt(Fe.object({sessionID:Ee.zod,limit:Fe.number().optional()}),N=>P(q=>q.messages(N)));function*z(N){let q=ne.project,te=[(0,ke.eq)(It.project_id,q.id)];N?.workspaceID&&te.push((0,ke.eq)(It.workspace_id,N.workspaceID)),N?.directory&&te.push((0,ke.eq)(It.directory,N.directory)),N?.roots&&te.push((0,ke.isNull)(It.parent_id)),N?.start&&te.push((0,ke.gte)(It.time_updated,N.start)),N?.search&&te.push((0,ke.like)(It.title,`%${N.search}%`));let ce=N?.limit??100,Q=Ft.use(ie=>ie.select().from(It).where((0,ke.and)(...te)).orderBy((0,ke.desc)(It.time_updated)).limit(ce).all());for(let ie of Q)yield c(ie)}Y.list=z,n(z,"list");function*V(N){let q=[];N?.directory&&q.push((0,ke.eq)(It.directory,N.directory)),N?.roots&&q.push((0,ke.isNull)(It.parent_id)),N?.start&&q.push((0,ke.gte)(It.time_updated,N.start)),N?.cursor&&q.push((0,ke.lt)(It.time_updated,N.cursor)),N?.search&&q.push((0,ke.like)(It.title,`%${N.search}%`)),N?.archived||q.push((0,ke.isNull)(It.time_archived));let te=N?.limit??100,ce=Ft.use(me=>(q.length>0?me.select().from(It).where((0,ke.and)(...q)):me.select().from(It)).orderBy((0,ke.desc)(It.time_updated),(0,ke.desc)(It.id)).limit(te).all()),Q=[...new Set(ce.map(me=>me.project_id))],ie=new Map;if(Q.length>0){let me=Ft.use(le=>le.select({id:Go.id,name:Go.name,worktree:Go.worktree}).from(Go).where((0,ke.inArray)(Go.id,Q)).all());for(let le of me)ie.set(le.id,{id:le.id,name:le.name??void 0,worktree:le.worktree})}for(let me of ce){let le=ie.get(me.project_id)??null;yield{...c(me),project:le}}}Y.listGlobal=V,n(V,"listGlobal"),Y.children=Lt(Ee.zod,N=>P(q=>q.children(N))),Y.remove=Lt(Ee.zod,N=>P(q=>q.remove(N)));async function ee(N){return Ne.Info.parse(N),P(q=>q.updateMessage(N))}Y.updateMessage=ee,n(ee,"updateMessage"),Y.removeMessage=Lt(Fe.object({sessionID:Ee.zod,messageID:Ve.zod}),N=>P(q=>q.removeMessage(N))),Y.removePart=Lt(Fe.object({sessionID:Ee.zod,messageID:Ve.zod,partID:nt.zod}),N=>P(q=>q.removePart(N)));async function Z(N){return Ne.Part.parse(N),P(q=>q.updatePart(N))}Y.updatePart=Z,n(Z,"updatePart"),Y.updatePartDelta=Lt(Fe.object({sessionID:Ee.zod,messageID:Ve.zod,partID:nt.zod,field:Fe.string(),delta:Fe.string()}),N=>P(q=>q.updatePartDelta(N))),Y.initialize=Lt(Fe.object({sessionID:Ee.zod,modelID:Et.zod,providerID:rt.zod,messageID:Ve.zod}),N=>P(q=>q.initialize(N)))})(Ke||={});var Kc=`Use this tool when you have completed the planning phase and are ready to exit plan agent.
1588
1588
 
1589
1589
  This tool will ask the user if they want to switch to build agent to start implementing the plan.
1590
1590
 
@@ -1597,7 +1597,7 @@ Do NOT call this tool:
1597
1597
  - Before you have created or finalized the plan
1598
1598
  - If you still have unanswered questions about the implementation
1599
1599
  - If the user has indicated they want to continue planning
1600
- `;async function Vh(t){for await(let e of Ne.stream(t))if(e.info.role==="user"&&e.info.model)return e.info.model;return Gt.defaultModel()}n(Vh,"getLastModel");var Kc=it.define("plan_exit",{description:Jc,parameters:Gh.object({}),async execute(t,e){let o=await Ke.get(e.sessionID),i=Hh.relative(ne.worktree,Ke.plan(o));if((await Ln.ask({sessionID:e.sessionID,questions:[{question:`Plan at ${i} is complete. Would you like to switch to the build agent and start implementing?`,header:"Build Agent",custom:!1,options:[{label:"Yes",description:"Switch to build agent and start implementing the plan"},{label:"No",description:"Stay with plan agent to continue refining the plan"}]}],tool:e.callID?{messageID:e.messageID,callID:e.callID}:void 0}))[0]?.[0]==="No")throw new Ln.RejectedError;let a=await Vh(e.sessionID),d={id:Ve.ascending(),sessionID:e.sessionID,role:"user",time:{created:Date.now()},agent:"build",model:a};return await Ke.updateMessage(d),await Ke.updatePart({id:nt.ascending(),messageID:d.id,sessionID:e.sessionID,type:"text",text:`The plan at ${i} has been approved, you can now edit files. Execute the plan`,synthetic:!0}),{title:"Switching to build agent",output:"User approved switching to build agent. Wait for further instructions.",metadata:{}}}});import Zc from"zod";import{Effect as Qc}from"effect";var Xc=`Use this tool when you need to ask the user questions during execution. This allows you to:
1600
+ `;async function Yh(t){for await(let e of Ne.stream(t))if(e.info.role==="user"&&e.info.model)return e.info.model;return Gt.defaultModel()}n(Yh,"getLastModel");var Xc=it.define("plan_exit",{description:Kc,parameters:Hh.object({}),async execute(t,e){let o=await Ke.get(e.sessionID),i=Vh.relative(ne.worktree,Ke.plan(o));if((await Ln.ask({sessionID:e.sessionID,questions:[{question:`Plan at ${i} is complete. Would you like to switch to the build agent and start implementing?`,header:"Build Agent",custom:!1,options:[{label:"Yes",description:"Switch to build agent and start implementing the plan"},{label:"No",description:"Stay with plan agent to continue refining the plan"}]}],tool:e.callID?{messageID:e.messageID,callID:e.callID}:void 0}))[0]?.[0]==="No")throw new Ln.RejectedError;let a=await Yh(e.sessionID),d={id:Ve.ascending(),sessionID:e.sessionID,role:"user",time:{created:Date.now()},agent:"build",model:a};return await Ke.updateMessage(d),await Ke.updatePart({id:nt.ascending(),messageID:d.id,sessionID:e.sessionID,type:"text",text:`The plan at ${i} has been approved, you can now edit files. Execute the plan`,synthetic:!0}),{title:"Switching to build agent",output:"User approved switching to build agent. Wait for further instructions.",metadata:{}}}});import Qc from"zod";import{Effect as ed}from"effect";var Zc=`Use this tool when you need to ask the user questions during execution. This allows you to:
1601
1601
  1. Gather user preferences or requirements
1602
1602
  2. Clarify ambiguous instructions
1603
1603
  3. Get decisions on implementation choices as you work
@@ -1607,7 +1607,7 @@ Usage notes:
1607
1607
  - When \`custom\` is enabled (default), a "Type your own answer" option is added automatically; don't include "Other" or catch-all options
1608
1608
  - Answers are returned as arrays of labels; set \`multiple: true\` to allow selecting more than one
1609
1609
  - If you recommend a specific option, make that the first option in the list and add "(Recommended)" at the end of the label
1610
- `;var Yh=Zc.object({questions:Zc.array(Ln.Info.omit({custom:!0})).describe("Questions to ask")}),ed=it.defineEffect("question",Qc.gen(function*(){let t=yield*Ln.Service;return{description:Xc,parameters:Yh,async execute(e,o){let i=await t.ask({sessionID:o.sessionID,questions:e.questions,tool:o.callID?{messageID:o.messageID,callID:o.callID}:void 0}).pipe(Qc.runPromise),m=e.questions.map((c,a)=>`"${c.question}"="${i[a]?.length?i[a].join(", "):"Unanswered"}"`).join(", ");return{title:`Asked ${e.questions.length} question${e.questions.length>1?"s":""}`,output:`User has answered your questions: ${m}. You can now continue with the user's answers in mind.`,metadata:{answers:i}}}}}));import Fr from"zod";import Qi from"os";import $o from"path";var td=`Executes a given bash command in a persistent shell session with optional timeout, ensuring proper handling and security measures.
1610
+ `;var Jh=Qc.object({questions:Qc.array(Ln.Info.omit({custom:!0})).describe("Questions to ask")}),td=it.defineEffect("question",ed.gen(function*(){let t=yield*Ln.Service;return{description:Zc,parameters:Jh,async execute(e,o){let i=await t.ask({sessionID:o.sessionID,questions:e.questions,tool:o.callID?{messageID:o.messageID,callID:o.callID}:void 0}).pipe(ed.runPromise),m=e.questions.map((c,a)=>`"${c.question}"="${i[a]?.length?i[a].join(", "):"Unanswered"}"`).join(", ");return{title:`Asked ${e.questions.length} question${e.questions.length>1?"s":""}`,output:`User has answered your questions: ${m}. You can now continue with the user's answers in mind.`,metadata:{answers:i}}}}}));import Fr from"zod";import Qi from"os";import $o from"path";var nd=`Executes a given bash command in a persistent shell session with optional timeout, ensuring proper handling and security measures.
1611
1611
 
1612
1612
  Be aware: OS: \${os}, Shell: \${shell}
1613
1613
 
@@ -1724,14 +1724,14 @@ Important:
1724
1724
 
1725
1725
  # Other common operations
1726
1726
  - View comments on a GitHub PR: gh api repos/foo/bar/pulls/123/comments
1727
- `;import{Language as nd}from"web-tree-sitter";import{fileURLToPath as od}from"url";var Xi;(o=>{function t(i){for(let m=i.length;m>0;m--){let c=i.slice(0,m).join(" "),a=e[c];if(a!==void 0)return i.slice(0,a)}return i.length===0?[]:i.slice(0,1)}o.prefix=t,n(t,"prefix");let e={cat:1,cd:1,chmod:1,chown:1,cp:1,echo:1,env:1,export:1,grep:1,kill:1,killall:1,ln:1,ls:1,mkdir:1,mv:1,ps:1,pwd:1,rm:1,rmdir:1,sleep:1,source:1,tail:1,touch:1,unset:1,which:1,aws:3,az:3,bazel:2,brew:2,bun:2,"bun run":3,"bun x":3,cargo:2,"cargo add":3,"cargo run":3,cdk:2,cf:2,cmake:2,composer:2,consul:2,"consul kv":3,crictl:2,deno:2,"deno task":3,doctl:3,docker:2,"docker builder":3,"docker compose":3,"docker container":3,"docker image":3,"docker network":3,"docker volume":3,eksctl:2,"eksctl create":3,firebase:2,flyctl:2,gcloud:3,gh:3,git:2,"git config":3,"git remote":3,"git stash":3,go:2,gradle:2,helm:2,heroku:2,hugo:2,ip:2,"ip addr":3,"ip link":3,"ip netns":3,"ip route":3,kind:2,"kind create":3,kubectl:2,"kubectl kustomize":3,"kubectl rollout":3,kustomize:2,make:2,mc:2,"mc admin":3,minikube:2,mongosh:2,mysql:2,mvn:2,ng:2,npm:2,"npm exec":3,"npm init":3,"npm run":3,"npm view":3,nvm:2,nx:2,openssl:2,"openssl req":3,"openssl x509":3,pip:2,pipenv:2,pnpm:2,"pnpm dlx":3,"pnpm exec":3,"pnpm run":3,poetry:2,podman:2,"podman container":3,"podman image":3,psql:2,pulumi:2,"pulumi stack":3,pyenv:2,python:2,rake:2,rbenv:2,"redis-cli":2,rustup:2,serverless:2,sfdx:3,skaffold:2,sls:2,sst:2,swift:2,systemctl:2,terraform:2,"terraform workspace":3,tmux:2,turbo:2,ufw:2,vault:2,"vault auth":3,"vault kv":3,vercel:2,volta:2,wp:2,yarn:2,"yarn dlx":3,"yarn run":3}})(Xi||={});import{Cause as rd,Effect as sn,Exit as Jh,Stream as sd}from"effect";import{ChildProcess as id}from"effect/unstable/process";var ad=3e4,Kh=ze.OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS||120*1e3,dd=new Set(["powershell","pwsh"]),ud=new Set(["cd","push-location","set-location"]),Xh=new Set([...ud,"rm","cp","mv","mkdir","touch","chmod","chown","cat","get-content","set-content","add-content","copy-item","move-item","remove-item","new-item","rename-item"]),Zh=new Set(["-destination","-literalpath","-path"]),Qh=new Set(["-confirm","-debug","-force","-nonewline","-recurse","-verbose","-whatif"]),pd=Ae.create({service:"bash-tool"}),Zi=n(t=>{if(t.startsWith("file://"))return od(t);if(t.startsWith("/")||/^[a-z]:/i.test(t))return t;let e=new URL(t,import.meta.url);return od(e)},"resolveWasm");function eg(t){let e=[];for(let o=0;o<t.childCount;o++){let i=t.child(o);if(i){if(i.type==="command_elements"){for(let m=0;m<i.childCount;m++){let c=i.child(m);!c||c.type==="command_argument_sep"||c.type==="redirection"||e.push({type:c.type,text:c.text})}continue}i.type!=="command_name"&&i.type!=="command_name_expr"&&i.type!=="word"&&i.type!=="string"&&i.type!=="raw_string"&&i.type!=="concatenation"||e.push({type:i.type,text:i.text})}}return e}n(eg,"parts");function tg(t){return(t.parent?.type==="redirected_statement"?t.parent.text:t.text).trim()}n(tg,"source");function ng(t){return t.descendantsOfType("command").filter(e=>!!e)}n(ng,"commands");function fd(t){if(t.length<2)return t;let e=t[0],o=t[t.length-1];return(e==='"'||e==="'")&&e===o?t.slice(1,-1):t}n(fd,"unquote");function md(t){return t==="~"?Qi.homedir():t.startsWith("~/")||t.startsWith("~\\")?$o.join(Qi.homedir(),t.slice(2)):t}n(md,"home");function ld(t){if(process.platform!=="win32")return process.env[t];let e=Object.keys(process.env).find(o=>o.toLowerCase()===t.toLowerCase());return e?process.env[e]:void 0}n(ld,"envValue");function og(t,e,o){let i=t.toUpperCase();if(i==="HOME")return Qi.homedir();if(i==="PWD")return e;if(i==="PSHOME")return $o.dirname(o)}n(og,"auto");function rg(t,e,o){let i=fd(t).replace(/\$\{env:([^}]+)\}/gi,(m,c)=>ld(c)||"").replace(/\$env:([A-Za-z_][A-Za-z0-9_]*)/gi,(m,c)=>ld(c)||"").replace(/\$(HOME|PWD|PSHOME)(?=$|[\\/])/gi,(m,c)=>og(c,e,o)||"");return md(i)}n(rg,"expand");function sg(t){let e=t.match(/^([A-Za-z]+)::(.*)$/);if(e)return e[1].toLowerCase()!=="filesystem"?void 0:e[2];let o=t.match(/^([A-Za-z]+):(.*)$/);if(!o||o[1].length===1)return t}n(sg,"provider");function ig(t,e){return t.startsWith("(")||t.startsWith("@(")||t.includes("$(")||t.includes("${")||t.includes("`")?!0:e?/\$(?!env:)/i.test(t):t.includes("$")}n(ig,"dynamic");function ag(t){let e=/[?*\[]/.exec(t);if(!e)return t;if(e.index!==0)return t.slice(0,e.index)}n(ag,"prefix");async function lg(t,e){let o=await Xt.text([t,"-lc",'cygpath -w -- "$1"',"_",e],{nothrow:!0});if(o.code!==0)return;let i=o.text.trim();if(i)return Te.normalizePath(i)}n(lg,"cygpath");async function hd(t,e,o){if(process.platform==="win32"){if(yo.posix(o)&&t.startsWith("/")&&Te.windowsPath(t)===t){let i=await lg(o,t);if(i)return i}return Te.normalizePath($o.resolve(e,Te.windowsPath(t)))}return $o.resolve(e,t)}n(hd,"resolvePath");async function cg(t,e,o,i){let m=o?rg(t,e,i):md(fd(t)),c=m&&ag(m);if(!c||ig(c,o))return;let a=o?sg(c):c;if(a)return hd(a,e,i)}n(cg,"argPath");function dg(t,e){if(!e)return t.slice(1).filter(m=>!m.text.startsWith("-")&&!(t[0]?.text==="chmod"&&m.text.startsWith("+"))).map(m=>m.text);let o=[],i=!1;for(let m of t.slice(1)){if(i){o.push(m.text),i=!1;continue}if(m.type==="command_parameter"){let c=m.text.toLowerCase();if(Qh.has(c))continue;i=Zh.has(c);continue}o.push(m.text)}return o}n(dg,"pathArgs");async function ug(t,e,o,i){let m={dirs:new Set,patterns:new Set,always:new Set};for(let c of ng(t)){let a=eg(c),d=a.map(s=>s.text),b=o?d[0]?.toLowerCase():d[0];if(b&&Xh.has(b))for(let s of dg(a,o)){let p=await cg(s,e,o,i);if(pd.info("resolved path",{arg:s,resolved:p}),!p||ne.containsPath(p))continue;let w=await Te.isDir(p)?p:$o.dirname(p);m.dirs.add(w)}d.length&&(!b||!ud.has(b))&&(m.patterns.add(tg(c)),m.always.add(Xi.prefix(d).join(" ")+" *"))}return m}n(ug,"collect");function cd(t){return t.length<=ad?t:t.slice(0,ad)+`
1727
+ `;import{Language as od}from"web-tree-sitter";import{fileURLToPath as rd}from"url";var Xi;(o=>{function t(i){for(let m=i.length;m>0;m--){let c=i.slice(0,m).join(" "),a=e[c];if(a!==void 0)return i.slice(0,a)}return i.length===0?[]:i.slice(0,1)}o.prefix=t,n(t,"prefix");let e={cat:1,cd:1,chmod:1,chown:1,cp:1,echo:1,env:1,export:1,grep:1,kill:1,killall:1,ln:1,ls:1,mkdir:1,mv:1,ps:1,pwd:1,rm:1,rmdir:1,sleep:1,source:1,tail:1,touch:1,unset:1,which:1,aws:3,az:3,bazel:2,brew:2,bun:2,"bun run":3,"bun x":3,cargo:2,"cargo add":3,"cargo run":3,cdk:2,cf:2,cmake:2,composer:2,consul:2,"consul kv":3,crictl:2,deno:2,"deno task":3,doctl:3,docker:2,"docker builder":3,"docker compose":3,"docker container":3,"docker image":3,"docker network":3,"docker volume":3,eksctl:2,"eksctl create":3,firebase:2,flyctl:2,gcloud:3,gh:3,git:2,"git config":3,"git remote":3,"git stash":3,go:2,gradle:2,helm:2,heroku:2,hugo:2,ip:2,"ip addr":3,"ip link":3,"ip netns":3,"ip route":3,kind:2,"kind create":3,kubectl:2,"kubectl kustomize":3,"kubectl rollout":3,kustomize:2,make:2,mc:2,"mc admin":3,minikube:2,mongosh:2,mysql:2,mvn:2,ng:2,npm:2,"npm exec":3,"npm init":3,"npm run":3,"npm view":3,nvm:2,nx:2,openssl:2,"openssl req":3,"openssl x509":3,pip:2,pipenv:2,pnpm:2,"pnpm dlx":3,"pnpm exec":3,"pnpm run":3,poetry:2,podman:2,"podman container":3,"podman image":3,psql:2,pulumi:2,"pulumi stack":3,pyenv:2,python:2,rake:2,rbenv:2,"redis-cli":2,rustup:2,serverless:2,sfdx:3,skaffold:2,sls:2,sst:2,swift:2,systemctl:2,terraform:2,"terraform workspace":3,tmux:2,turbo:2,ufw:2,vault:2,"vault auth":3,"vault kv":3,vercel:2,volta:2,wp:2,yarn:2,"yarn dlx":3,"yarn run":3}})(Xi||={});import{Cause as sd,Effect as sn,Exit as Kh,Stream as id}from"effect";import{ChildProcess as ad}from"effect/unstable/process";var ld=3e4,Xh=ze.OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS||120*1e3,ud=new Set(["powershell","pwsh"]),pd=new Set(["cd","push-location","set-location"]),Zh=new Set([...pd,"rm","cp","mv","mkdir","touch","chmod","chown","cat","get-content","set-content","add-content","copy-item","move-item","remove-item","new-item","rename-item"]),Qh=new Set(["-destination","-literalpath","-path"]),eg=new Set(["-confirm","-debug","-force","-nonewline","-recurse","-verbose","-whatif"]),fd=Ae.create({service:"bash-tool"}),Zi=n(t=>{if(t.startsWith("file://"))return rd(t);if(t.startsWith("/")||/^[a-z]:/i.test(t))return t;let e=new URL(t,import.meta.url);return rd(e)},"resolveWasm");function tg(t){let e=[];for(let o=0;o<t.childCount;o++){let i=t.child(o);if(i){if(i.type==="command_elements"){for(let m=0;m<i.childCount;m++){let c=i.child(m);!c||c.type==="command_argument_sep"||c.type==="redirection"||e.push({type:c.type,text:c.text})}continue}i.type!=="command_name"&&i.type!=="command_name_expr"&&i.type!=="word"&&i.type!=="string"&&i.type!=="raw_string"&&i.type!=="concatenation"||e.push({type:i.type,text:i.text})}}return e}n(tg,"parts");function ng(t){return(t.parent?.type==="redirected_statement"?t.parent.text:t.text).trim()}n(ng,"source");function og(t){return t.descendantsOfType("command").filter(e=>!!e)}n(og,"commands");function md(t){if(t.length<2)return t;let e=t[0],o=t[t.length-1];return(e==='"'||e==="'")&&e===o?t.slice(1,-1):t}n(md,"unquote");function hd(t){return t==="~"?Qi.homedir():t.startsWith("~/")||t.startsWith("~\\")?$o.join(Qi.homedir(),t.slice(2)):t}n(hd,"home");function cd(t){if(process.platform!=="win32")return process.env[t];let e=Object.keys(process.env).find(o=>o.toLowerCase()===t.toLowerCase());return e?process.env[e]:void 0}n(cd,"envValue");function rg(t,e,o){let i=t.toUpperCase();if(i==="HOME")return Qi.homedir();if(i==="PWD")return e;if(i==="PSHOME")return $o.dirname(o)}n(rg,"auto");function sg(t,e,o){let i=md(t).replace(/\$\{env:([^}]+)\}/gi,(m,c)=>cd(c)||"").replace(/\$env:([A-Za-z_][A-Za-z0-9_]*)/gi,(m,c)=>cd(c)||"").replace(/\$(HOME|PWD|PSHOME)(?=$|[\\/])/gi,(m,c)=>rg(c,e,o)||"");return hd(i)}n(sg,"expand");function ig(t){let e=t.match(/^([A-Za-z]+)::(.*)$/);if(e)return e[1].toLowerCase()!=="filesystem"?void 0:e[2];let o=t.match(/^([A-Za-z]+):(.*)$/);if(!o||o[1].length===1)return t}n(ig,"provider");function ag(t,e){return t.startsWith("(")||t.startsWith("@(")||t.includes("$(")||t.includes("${")||t.includes("`")?!0:e?/\$(?!env:)/i.test(t):t.includes("$")}n(ag,"dynamic");function lg(t){let e=/[?*\[]/.exec(t);if(!e)return t;if(e.index!==0)return t.slice(0,e.index)}n(lg,"prefix");async function cg(t,e){let o=await Xt.text([t,"-lc",'cygpath -w -- "$1"',"_",e],{nothrow:!0});if(o.code!==0)return;let i=o.text.trim();if(i)return Te.normalizePath(i)}n(cg,"cygpath");async function gd(t,e,o){if(process.platform==="win32"){if(yo.posix(o)&&t.startsWith("/")&&Te.windowsPath(t)===t){let i=await cg(o,t);if(i)return i}return Te.normalizePath($o.resolve(e,Te.windowsPath(t)))}return $o.resolve(e,t)}n(gd,"resolvePath");async function dg(t,e,o,i){let m=o?sg(t,e,i):hd(md(t)),c=m&&lg(m);if(!c||ag(c,o))return;let a=o?ig(c):c;if(a)return gd(a,e,i)}n(dg,"argPath");function ug(t,e){if(!e)return t.slice(1).filter(m=>!m.text.startsWith("-")&&!(t[0]?.text==="chmod"&&m.text.startsWith("+"))).map(m=>m.text);let o=[],i=!1;for(let m of t.slice(1)){if(i){o.push(m.text),i=!1;continue}if(m.type==="command_parameter"){let c=m.text.toLowerCase();if(eg.has(c))continue;i=Qh.has(c);continue}o.push(m.text)}return o}n(ug,"pathArgs");async function pg(t,e,o,i){let m={dirs:new Set,patterns:new Set,always:new Set};for(let c of og(t)){let a=tg(c),d=a.map(s=>s.text),b=o?d[0]?.toLowerCase():d[0];if(b&&Zh.has(b))for(let s of ug(a,o)){let p=await dg(s,e,o,i);if(fd.info("resolved path",{arg:s,resolved:p}),!p||ne.containsPath(p))continue;let w=await Te.isDir(p)?p:$o.dirname(p);m.dirs.add(w)}d.length&&(!b||!pd.has(b))&&(m.patterns.add(ng(c)),m.always.add(Xi.prefix(d).join(" ")+" *"))}return m}n(pg,"collect");function dd(t){return t.length<=ld?t:t.slice(0,ld)+`
1728
1728
 
1729
- ...`}n(cd,"preview");async function pg(t,e){let o=await yg().then(i=>(e?i.ps:i.bash).parse(t));if(!o)throw new Error("Failed to parse command");return o.rootNode}n(pg,"parse");async function fg(t,e){if(e.dirs.size>0){let o=Array.from(e.dirs).map(i=>process.platform==="win32"?Te.normalizePathPattern($o.join(i,"*")):$o.join(i,"*"));await t.ask({permission:"external_directory",patterns:o,always:o,metadata:{}})}e.patterns.size!==0&&await t.ask({permission:"bash",patterns:Array.from(e.patterns),always:Array.from(e.always),metadata:{}})}n(fg,"ask");async function mg(t,e){let o=await Mt.trigger("shell.env",{cwd:e,sessionID:t.sessionID,callID:t.callID},{env:{}});return{...process.env,...o.env}}n(mg,"shellEnv");function hg(t,e,o,i,m){return process.platform==="win32"&&dd.has(e)?id.make(t,["-NoLogo","-NoProfile","-NonInteractive","-Command",o],{cwd:i,env:m,stdin:"ignore",detached:!1}):id.make(o,[],{shell:t,cwd:i,env:m,stdin:"ignore",detached:process.platform!=="win32"})}n(hg,"cmd");async function gg(t,e){let o="",i=!1,m=!1;e.metadata({metadata:{output:"",description:t.description}});let c=await xa(b=>sn.gen(function*(){let s=yield*b.spawn(hg(t.shell,t.name,t.command,t.cwd,t.env));yield*sn.forkScoped(sd.runForEach(sd.decodeText(s.all),v=>sn.sync(()=>{o+=v,e.metadata({metadata:{output:cd(o),description:t.description}})})));let p=sn.callback(v=>{if(e.abort.aborted)return v(sn.void);let I=n(()=>v(sn.void),"handler");return e.abort.addEventListener("abort",I,{once:!0}),sn.sync(()=>e.abort.removeEventListener("abort",I))}),w=sn.sleep(`${t.timeout+100} millis`),f=yield*sn.raceAll([s.exitCode.pipe(sn.map(v=>({kind:"exit",code:v}))),p.pipe(sn.map(()=>({kind:"abort",code:null}))),w.pipe(sn.map(()=>({kind:"timeout",code:null})))]);return f.kind==="abort"&&(m=!0,yield*s.kill({forceKillAfter:"3 seconds"}).pipe(sn.orDie)),f.kind==="timeout"&&(i=!0,yield*s.kill({forceKillAfter:"3 seconds"}).pipe(sn.orDie)),f.kind==="exit"?f.code:null}).pipe(sn.scoped,sn.orDie)),a=null;if(Jh.isSuccess(c))a=c.value;else if(!rd.hasInterruptsOnly(c.cause))throw rd.squash(c.cause);let d=[];return i&&d.push(`bash tool terminated command after exceeding timeout ${t.timeout} ms`),m&&d.push("User aborted the command"),d.length>0&&(o+=`
1729
+ ...`}n(dd,"preview");async function fg(t,e){let o=await bg().then(i=>(e?i.ps:i.bash).parse(t));if(!o)throw new Error("Failed to parse command");return o.rootNode}n(fg,"parse");async function mg(t,e){if(e.dirs.size>0){let o=Array.from(e.dirs).map(i=>process.platform==="win32"?Te.normalizePathPattern($o.join(i,"*")):$o.join(i,"*"));await t.ask({permission:"external_directory",patterns:o,always:o,metadata:{}})}e.patterns.size!==0&&await t.ask({permission:"bash",patterns:Array.from(e.patterns),always:Array.from(e.always),metadata:{}})}n(mg,"ask");async function hg(t,e){let o=await Mt.trigger("shell.env",{cwd:e,sessionID:t.sessionID,callID:t.callID},{env:{}});return{...process.env,...o.env}}n(hg,"shellEnv");function gg(t,e,o,i,m){return process.platform==="win32"&&ud.has(e)?ad.make(t,["-NoLogo","-NoProfile","-NonInteractive","-Command",o],{cwd:i,env:m,stdin:"ignore",detached:!1}):ad.make(o,[],{shell:t,cwd:i,env:m,stdin:"ignore",detached:process.platform!=="win32"})}n(gg,"cmd");async function yg(t,e){let o="",i=!1,m=!1;e.metadata({metadata:{output:"",description:t.description}});let c=await xa(b=>sn.gen(function*(){let s=yield*b.spawn(gg(t.shell,t.name,t.command,t.cwd,t.env));yield*sn.forkScoped(id.runForEach(id.decodeText(s.all),v=>sn.sync(()=>{o+=v,e.metadata({metadata:{output:dd(o),description:t.description}})})));let p=sn.callback(v=>{if(e.abort.aborted)return v(sn.void);let I=n(()=>v(sn.void),"handler");return e.abort.addEventListener("abort",I,{once:!0}),sn.sync(()=>e.abort.removeEventListener("abort",I))}),w=sn.sleep(`${t.timeout+100} millis`),f=yield*sn.raceAll([s.exitCode.pipe(sn.map(v=>({kind:"exit",code:v}))),p.pipe(sn.map(()=>({kind:"abort",code:null}))),w.pipe(sn.map(()=>({kind:"timeout",code:null})))]);return f.kind==="abort"&&(m=!0,yield*s.kill({forceKillAfter:"3 seconds"}).pipe(sn.orDie)),f.kind==="timeout"&&(i=!0,yield*s.kill({forceKillAfter:"3 seconds"}).pipe(sn.orDie)),f.kind==="exit"?f.code:null}).pipe(sn.scoped,sn.orDie)),a=null;if(Kh.isSuccess(c))a=c.value;else if(!sd.hasInterruptsOnly(c.cause))throw sd.squash(c.cause);let d=[];return i&&d.push(`bash tool terminated command after exceeding timeout ${t.timeout} ms`),m&&d.push("User aborted the command"),d.length>0&&(o+=`
1730
1730
 
1731
1731
  <bash_metadata>
1732
1732
  `+d.join(`
1733
1733
  `)+`
1734
- </bash_metadata>`),{title:t.description,metadata:{output:cd(o),exit:a,description:t.description},output:o}}n(gg,"run");var yg=Gn(async()=>{let{Parser:t}=await import("web-tree-sitter"),{default:e}=await import("web-tree-sitter/tree-sitter.wasm",{with:{type:"wasm"}}),o=Zi(e);await t.init({locateFile(){return o}});let{default:i}=await import("tree-sitter-bash/tree-sitter-bash.wasm",{with:{type:"wasm"}}),{default:m}=await import("tree-sitter-powershell/tree-sitter-powershell.wasm",{with:{type:"wasm"}}),c=Zi(i),a=Zi(m),[d,b]=await Promise.all([nd.load(c),nd.load(a)]),s=new t;s.setLanguage(d);let p=new t;return p.setLanguage(b),{bash:s,ps:p}}),gd=it.define("bash",async()=>{let t=yo.acceptable(),e=yo.name(t),o=e==="powershell"?"If the commands depend on each other and must run sequentially, avoid '&&' in this shell because Windows PowerShell 5.1 does not support it. Use PowerShell conditionals such as `cmd1; if ($?) { cmd2 }` when later commands must depend on earlier success.":"If the commands depend on each other and must run sequentially, use a single Bash call with '&&' to chain them together (e.g., `git add . && git commit -m \"message\" && git push`). For instance, if one operation must complete before another starts (like mkdir before cp, Write before Bash for git operations, or git add before git commit), run these operations sequentially instead.";return pd.info("bash tool using shell",{shell:t}),{description:td.replaceAll("${directory}",ne.directory).replaceAll("${os}",process.platform).replaceAll("${shell}",e).replaceAll("${chaining}",o).replaceAll("${maxLines}",String(ln.MAX_LINES)).replaceAll("${maxBytes}",String(ln.MAX_BYTES)),parameters:Fr.object({command:Fr.string().describe("The command to execute"),timeout:Fr.number().describe("Optional timeout in milliseconds").optional(),workdir:Fr.string().describe(`The working directory to run the command in. Defaults to ${ne.directory}. Use this instead of 'cd' commands.`).optional(),description:Fr.string().describe(`Clear, concise description of what this command does in 5-10 words. Examples:
1734
+ </bash_metadata>`),{title:t.description,metadata:{output:dd(o),exit:a,description:t.description},output:o}}n(yg,"run");var bg=Gn(async()=>{let{Parser:t}=await import("web-tree-sitter"),{default:e}=await import("web-tree-sitter/tree-sitter.wasm",{with:{type:"wasm"}}),o=Zi(e);await t.init({locateFile(){return o}});let{default:i}=await import("tree-sitter-bash/tree-sitter-bash.wasm",{with:{type:"wasm"}}),{default:m}=await import("tree-sitter-powershell/tree-sitter-powershell.wasm",{with:{type:"wasm"}}),c=Zi(i),a=Zi(m),[d,b]=await Promise.all([od.load(c),od.load(a)]),s=new t;s.setLanguage(d);let p=new t;return p.setLanguage(b),{bash:s,ps:p}}),yd=it.define("bash",async()=>{let t=yo.acceptable(),e=yo.name(t),o=e==="powershell"?"If the commands depend on each other and must run sequentially, avoid '&&' in this shell because Windows PowerShell 5.1 does not support it. Use PowerShell conditionals such as `cmd1; if ($?) { cmd2 }` when later commands must depend on earlier success.":"If the commands depend on each other and must run sequentially, use a single Bash call with '&&' to chain them together (e.g., `git add . && git commit -m \"message\" && git push`). For instance, if one operation must complete before another starts (like mkdir before cp, Write before Bash for git operations, or git add before git commit), run these operations sequentially instead.";return fd.info("bash tool using shell",{shell:t}),{description:nd.replaceAll("${directory}",ne.directory).replaceAll("${os}",process.platform).replaceAll("${shell}",e).replaceAll("${chaining}",o).replaceAll("${maxLines}",String(ln.MAX_LINES)).replaceAll("${maxBytes}",String(ln.MAX_BYTES)),parameters:Fr.object({command:Fr.string().describe("The command to execute"),timeout:Fr.number().describe("Optional timeout in milliseconds").optional(),workdir:Fr.string().describe(`The working directory to run the command in. Defaults to ${ne.directory}. Use this instead of 'cd' commands.`).optional(),description:Fr.string().describe(`Clear, concise description of what this command does in 5-10 words. Examples:
1735
1735
  Input: ls
1736
1736
  Output: Lists files in current directory
1737
1737
 
@@ -1742,63 +1742,63 @@ Input: npm install
1742
1742
  Output: Installs package dependencies
1743
1743
 
1744
1744
  Input: mkdir foo
1745
- Output: Creates directory 'foo'`)}),async execute(i,m){let c=i.workdir?await hd(i.workdir,ne.directory,t):ne.directory;if(i.timeout!==void 0&&i.timeout<0)throw new Error(`Invalid timeout value: ${i.timeout}. Timeout must be a positive number.`);let a=i.timeout??Kh,d=dd.has(e),b=await pg(i.command,d),s=await ug(b,c,d,t);return ne.containsPath(c)||s.dirs.add(c),await fg(m,s),gg({shell:t,name:e,command:i.command,cwd:c,env:await mg(m,c),timeout:a,description:i.description},m)}}});import $r from"zod";import*as xo from"path";import{createTwoFilesPatch as aa,diffLines as iy}from"diff";var yd='Performs exact string replacements in files. \n\nUsage:\n- You must use your `Read` tool at least once in the conversation before editing. This tool will error if you attempt an edit without reading the file. \n- When editing text from Read tool output, ensure you preserve the exact indentation (tabs/spaces) as it appears AFTER the line number prefix. The line number prefix format is: line number + colon + space (e.g., `1: `). Everything after that space is the actual file content to match. Never include any part of the line number prefix in the oldString or newString.\n- ALWAYS prefer editing existing files in the codebase. NEVER write new files unless explicitly required.\n- Only use emojis if the user explicitly requests it. Avoid adding emojis to files unless asked.\n- The edit will FAIL if `oldString` is not found in the file with an error "oldString not found in content".\n- The edit will FAIL if `oldString` is found multiple times in the file with an error "Found multiple matches for oldString. Provide more surrounding lines in oldString to identify the correct match." Either provide a larger string with more surrounding context to make it unique or use `replaceAll` to change every instance of `oldString`. \n- Use `replaceAll` for replacing and renaming strings across the file. This parameter is useful if you want to rename a variable for instance.\n';import{Effect as pt,Layer as vd,ServiceMap as xg}from"effect";import{formatPatch as Ig,structuredPatch as kg}from"diff";import Eg from"fuzzysort";import Dg from"ignore";import fn from"path";import ft from"zod";import ea from"path";import bg from"os";var ta=bg.homedir(),bd=["Music","Pictures","Movies","Downloads","Desktop","Documents","Public","Applications","Library"],wg=["Application Support/AddressBook","Calendars","Mail","Messages","Safari","Cookies","Application Support/com.apple.TCC","PersonalizationPortrait","Metadata/CoreSpotlight","Suggestions"],vg=["/.DocumentRevisions-V100","/.Spotlight-V100","/.Trashes","/.fseventsd"],wd=["AppData","Downloads","Desktop","Documents","Pictures","Music","Videos","OneDrive"],qr;(o=>{function t(){return process.platform==="darwin"?new Set(bd):process.platform==="win32"?new Set(wd):new Set}o.names=t,n(t,"names");function e(){return process.platform==="darwin"?[...bd.map(i=>ea.join(ta,i)),...wg.map(i=>ea.join(ta,"Library",i)),...vg]:process.platform==="win32"?wd.map(i=>ea.join(ta,i)):[]}o.paths=e,n(e,"paths")})(qr||={});var bo;(u=>{u.Info=ft.object({path:ft.string(),added:ft.number().int(),removed:ft.number().int(),status:ft.enum(["added","deleted","modified"])}).meta({ref:"File"}),u.Node=ft.object({name:ft.string(),path:ft.string(),absolute:ft.string(),type:ft.enum(["file","directory"]),ignored:ft.boolean()}).meta({ref:"FileNode"}),u.Content=ft.object({type:ft.enum(["text","binary"]),content:ft.string(),diff:ft.string().optional(),patch:ft.object({oldFileName:ft.string(),newFileName:ft.string(),oldHeader:ft.string().optional(),newHeader:ft.string().optional(),hunks:ft.array(ft.object({oldStart:ft.number(),oldLines:ft.number(),newStart:ft.number(),newLines:ft.number(),lines:ft.array(ft.string())})),index:ft.string().optional()}).optional(),encoding:ft.literal("base64").optional(),mimeType:ft.string().optional()}).meta({ref:"FileContent"}),u.Event={Edited:ht.define("file.edited",ft.object({file:ft.string()}))};let m=Ae.create({service:"file"}),c=new Set(["exe","dll","pdb","bin","so","dylib","o","a","lib","wav","mp3","ogg","oga","ogv","ogx","flac","aac","wma","m4a","weba","mp4","avi","mov","wmv","flv","webm","mkv","zip","tar","gz","gzip","bz","bz2","bzip","bzip2","7z","rar","xz","lz","z","pdf","doc","docx","ppt","pptx","xls","xlsx","dmg","iso","img","vmdk","ttf","otf","woff","woff2","eot","sqlite","db","mdb","apk","ipa","aab","xapk","app","pkg","deb","rpm","snap","flatpak","appimage","msi","msp","jar","war","ear","class","kotlin_module","dex","vdex","odex","oat","art","wasm","wat","bc","ll","s","ko","sys","drv","efi","rom","com"]),a=new Set(["png","jpg","jpeg","gif","bmp","webp","ico","tif","tiff","svg","svgz","avif","apng","jxl","heic","heif","raw","cr2","nef","arw","dng","orf","raf","pef","x3f"]),d=new Set(["ts","tsx","mts","cts","mtsx","ctsx","js","jsx","mjs","cjs","sh","bash","zsh","fish","ps1","psm1","cmd","bat","json","jsonc","json5","yaml","yml","toml","md","mdx","txt","xml","html","htm","css","scss","sass","less","graphql","gql","sql","ini","cfg","conf","env"]),b=new Set(["dockerfile","makefile",".gitignore",".gitattributes",".editorconfig",".npmrc",".nvmrc",".prettierrc",".eslintrc"]),s={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",bmp:"image/bmp",webp:"image/webp",ico:"image/x-icon",tif:"image/tiff",tiff:"image/tiff",svg:"image/svg+xml",svgz:"image/svg+xml",avif:"image/avif",apng:"image/apng",jxl:"image/jxl",heic:"image/heic",heif:"image/heif"},p=n(g=>fn.extname(g).toLowerCase().slice(1),"ext"),w=n(g=>fn.basename(g).toLowerCase(),"name"),f=n(g=>a.has(p(g)),"isImageByExtension"),v=n(g=>d.has(p(g)),"isTextByExtension"),I=n(g=>b.has(w(g)),"isTextByName"),h=n(g=>c.has(p(g)),"isBinaryByExtension"),S=n(g=>g.startsWith("image/"),"isImage"),C=n(g=>s[p(g)]||"image/"+p(g),"getImageMimeType");function l(g){let L=g.toLowerCase();if(m.debug("shouldEncode",{type:L}),!L||L.startsWith("text/")||L.includes("charset="))return!1;let j=L.split("/",2)[0];return["image","audio","video","font","model","multipart"].includes(j)}n(l,"shouldEncode");let P=n(g=>g.replaceAll("\\","/").replace(/\/+$/,"").split("/").some(j=>j.startsWith(".")&&j.length>1),"hidden"),y=n((g,L)=>{if(L)return g;let j=[],z=[];for(let V of g)P(V)?z.push(V):j.push(V);return[...j,...z]},"sortHiddenLast");class D extends xg.Service()("@opencode/File"){static{n(this,"Service")}}u.Service=D,u.layer=vd.effect(D,pt.gen(function*(){let g=yield*st.Service,L=yield*ae.make(pt.fn("File.state")(()=>pt.succeed({cache:{files:[],dirs:[]}}))),j=pt.fn("File.scan")(function*(){if(ne.directory===fn.parse(ne.directory).root)return;let Z=ne.directory===wt.Path.home&&ne.project.id==="global",he={files:[],dirs:[]};if(Z){let Y=new Set,N=qr.names(),q=new Set(["node_modules","dist","build","target","vendor"]),te=n(ie=>ie.startsWith(".")||N.has(ie),"shouldIgnoreName"),ce=n(ie=>ie.startsWith(".")||q.has(ie),"shouldIgnoreNested"),Q=yield*g.readDirectoryEntries(ne.directory).pipe(pt.orElseSucceed(()=>[]));for(let ie of Q){if(ie.type!=="directory"||te(ie.name))continue;Y.add(ie.name+"/");let me=fn.join(ne.directory,ie.name),le=yield*g.readDirectoryEntries(me).pipe(pt.orElseSucceed(()=>[]));for(let we of le)we.type==="directory"&&(ce(we.name)||Y.add(ie.name+"/"+we.name+"/"))}he.dirs=Array.from(Y).toSorted()}else{let Y=yield*pt.promise(()=>Array.fromAsync(Zn.files({cwd:ne.directory}))),N=new Set;for(let q of Y){he.files.push(q);let te=q;for(;;){let ce=fn.dirname(te);if(ce==="."||ce===te)break;te=ce,!N.has(ce)&&(N.add(ce),he.dirs.push(ce+"/"))}}}let ge=yield*ae.get(L);ge.cache=he}),z=yield*pt.cached(j().pipe(pt.catchCause(()=>pt.void))),V=pt.fn("File.ensure")(function*(){yield*z,z=yield*pt.cached(j().pipe(pt.catchCause(()=>pt.void)))}),H=pt.fn("File.init")(function*(){yield*V()}),G=pt.fn("File.status")(function*(){return ne.project.vcs!=="git"?[]:yield*pt.promise(async()=>{let Z=(await Sn.run(["-c","core.fsmonitor=false","-c","core.quotepath=false","diff","--numstat","HEAD"],{cwd:ne.directory})).text(),he=[];if(Z.trim())for(let N of Z.trim().split(`
1745
+ Output: Creates directory 'foo'`)}),async execute(i,m){let c=i.workdir?await gd(i.workdir,ne.directory,t):ne.directory;if(i.timeout!==void 0&&i.timeout<0)throw new Error(`Invalid timeout value: ${i.timeout}. Timeout must be a positive number.`);let a=i.timeout??Xh,d=ud.has(e),b=await fg(i.command,d),s=await pg(b,c,d,t);return ne.containsPath(c)||s.dirs.add(c),await mg(m,s),yg({shell:t,name:e,command:i.command,cwd:c,env:await hg(m,c),timeout:a,description:i.description},m)}}});import $r from"zod";import*as xo from"path";import{createTwoFilesPatch as aa,diffLines as ay}from"diff";var bd='Performs exact string replacements in files. \n\nUsage:\n- You must use your `Read` tool at least once in the conversation before editing. This tool will error if you attempt an edit without reading the file. \n- When editing text from Read tool output, ensure you preserve the exact indentation (tabs/spaces) as it appears AFTER the line number prefix. The line number prefix format is: line number + colon + space (e.g., `1: `). Everything after that space is the actual file content to match. Never include any part of the line number prefix in the oldString or newString.\n- ALWAYS prefer editing existing files in the codebase. NEVER write new files unless explicitly required.\n- Only use emojis if the user explicitly requests it. Avoid adding emojis to files unless asked.\n- The edit will FAIL if `oldString` is not found in the file with an error "oldString not found in content".\n- The edit will FAIL if `oldString` is found multiple times in the file with an error "Found multiple matches for oldString. Provide more surrounding lines in oldString to identify the correct match." Either provide a larger string with more surrounding context to make it unique or use `replaceAll` to change every instance of `oldString`. \n- Use `replaceAll` for replacing and renaming strings across the file. This parameter is useful if you want to rename a variable for instance.\n';import{Effect as pt,Layer as xd,ServiceMap as Ig}from"effect";import{formatPatch as kg,structuredPatch as Eg}from"diff";import Dg from"fuzzysort";import Sg from"ignore";import fn from"path";import ft from"zod";import ea from"path";import wg from"os";var ta=wg.homedir(),wd=["Music","Pictures","Movies","Downloads","Desktop","Documents","Public","Applications","Library"],vg=["Application Support/AddressBook","Calendars","Mail","Messages","Safari","Cookies","Application Support/com.apple.TCC","PersonalizationPortrait","Metadata/CoreSpotlight","Suggestions"],xg=["/.DocumentRevisions-V100","/.Spotlight-V100","/.Trashes","/.fseventsd"],vd=["AppData","Downloads","Desktop","Documents","Pictures","Music","Videos","OneDrive"],qr;(o=>{function t(){return process.platform==="darwin"?new Set(wd):process.platform==="win32"?new Set(vd):new Set}o.names=t,n(t,"names");function e(){return process.platform==="darwin"?[...wd.map(i=>ea.join(ta,i)),...vg.map(i=>ea.join(ta,"Library",i)),...xg]:process.platform==="win32"?vd.map(i=>ea.join(ta,i)):[]}o.paths=e,n(e,"paths")})(qr||={});var bo;(u=>{u.Info=ft.object({path:ft.string(),added:ft.number().int(),removed:ft.number().int(),status:ft.enum(["added","deleted","modified"])}).meta({ref:"File"}),u.Node=ft.object({name:ft.string(),path:ft.string(),absolute:ft.string(),type:ft.enum(["file","directory"]),ignored:ft.boolean()}).meta({ref:"FileNode"}),u.Content=ft.object({type:ft.enum(["text","binary"]),content:ft.string(),diff:ft.string().optional(),patch:ft.object({oldFileName:ft.string(),newFileName:ft.string(),oldHeader:ft.string().optional(),newHeader:ft.string().optional(),hunks:ft.array(ft.object({oldStart:ft.number(),oldLines:ft.number(),newStart:ft.number(),newLines:ft.number(),lines:ft.array(ft.string())})),index:ft.string().optional()}).optional(),encoding:ft.literal("base64").optional(),mimeType:ft.string().optional()}).meta({ref:"FileContent"}),u.Event={Edited:ht.define("file.edited",ft.object({file:ft.string()}))};let m=Ae.create({service:"file"}),c=new Set(["exe","dll","pdb","bin","so","dylib","o","a","lib","wav","mp3","ogg","oga","ogv","ogx","flac","aac","wma","m4a","weba","mp4","avi","mov","wmv","flv","webm","mkv","zip","tar","gz","gzip","bz","bz2","bzip","bzip2","7z","rar","xz","lz","z","pdf","doc","docx","ppt","pptx","xls","xlsx","dmg","iso","img","vmdk","ttf","otf","woff","woff2","eot","sqlite","db","mdb","apk","ipa","aab","xapk","app","pkg","deb","rpm","snap","flatpak","appimage","msi","msp","jar","war","ear","class","kotlin_module","dex","vdex","odex","oat","art","wasm","wat","bc","ll","s","ko","sys","drv","efi","rom","com"]),a=new Set(["png","jpg","jpeg","gif","bmp","webp","ico","tif","tiff","svg","svgz","avif","apng","jxl","heic","heif","raw","cr2","nef","arw","dng","orf","raf","pef","x3f"]),d=new Set(["ts","tsx","mts","cts","mtsx","ctsx","js","jsx","mjs","cjs","sh","bash","zsh","fish","ps1","psm1","cmd","bat","json","jsonc","json5","yaml","yml","toml","md","mdx","txt","xml","html","htm","css","scss","sass","less","graphql","gql","sql","ini","cfg","conf","env"]),b=new Set(["dockerfile","makefile",".gitignore",".gitattributes",".editorconfig",".npmrc",".nvmrc",".prettierrc",".eslintrc"]),s={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",bmp:"image/bmp",webp:"image/webp",ico:"image/x-icon",tif:"image/tiff",tiff:"image/tiff",svg:"image/svg+xml",svgz:"image/svg+xml",avif:"image/avif",apng:"image/apng",jxl:"image/jxl",heic:"image/heic",heif:"image/heif"},p=n(g=>fn.extname(g).toLowerCase().slice(1),"ext"),w=n(g=>fn.basename(g).toLowerCase(),"name"),f=n(g=>a.has(p(g)),"isImageByExtension"),v=n(g=>d.has(p(g)),"isTextByExtension"),I=n(g=>b.has(w(g)),"isTextByName"),h=n(g=>c.has(p(g)),"isBinaryByExtension"),S=n(g=>g.startsWith("image/"),"isImage"),C=n(g=>s[p(g)]||"image/"+p(g),"getImageMimeType");function l(g){let L=g.toLowerCase();if(m.debug("shouldEncode",{type:L}),!L||L.startsWith("text/")||L.includes("charset="))return!1;let j=L.split("/",2)[0];return["image","audio","video","font","model","multipart"].includes(j)}n(l,"shouldEncode");let P=n(g=>g.replaceAll("\\","/").replace(/\/+$/,"").split("/").some(j=>j.startsWith(".")&&j.length>1),"hidden"),y=n((g,L)=>{if(L)return g;let j=[],z=[];for(let V of g)P(V)?z.push(V):j.push(V);return[...j,...z]},"sortHiddenLast");class D extends Ig.Service()("@opencode/File"){static{n(this,"Service")}}u.Service=D,u.layer=xd.effect(D,pt.gen(function*(){let g=yield*st.Service,L=yield*ae.make(pt.fn("File.state")(()=>pt.succeed({cache:{files:[],dirs:[]}}))),j=pt.fn("File.scan")(function*(){if(ne.directory===fn.parse(ne.directory).root)return;let Z=ne.directory===wt.Path.home&&ne.project.id==="global",he={files:[],dirs:[]};if(Z){let Y=new Set,N=qr.names(),q=new Set(["node_modules","dist","build","target","vendor"]),te=n(ie=>ie.startsWith(".")||N.has(ie),"shouldIgnoreName"),ce=n(ie=>ie.startsWith(".")||q.has(ie),"shouldIgnoreNested"),Q=yield*g.readDirectoryEntries(ne.directory).pipe(pt.orElseSucceed(()=>[]));for(let ie of Q){if(ie.type!=="directory"||te(ie.name))continue;Y.add(ie.name+"/");let me=fn.join(ne.directory,ie.name),le=yield*g.readDirectoryEntries(me).pipe(pt.orElseSucceed(()=>[]));for(let we of le)we.type==="directory"&&(ce(we.name)||Y.add(ie.name+"/"+we.name+"/"))}he.dirs=Array.from(Y).toSorted()}else{let Y=yield*pt.promise(()=>Array.fromAsync(Zn.files({cwd:ne.directory}))),N=new Set;for(let q of Y){he.files.push(q);let te=q;for(;;){let ce=fn.dirname(te);if(ce==="."||ce===te)break;te=ce,!N.has(ce)&&(N.add(ce),he.dirs.push(ce+"/"))}}}let ge=yield*ae.get(L);ge.cache=he}),z=yield*pt.cached(j().pipe(pt.catchCause(()=>pt.void))),V=pt.fn("File.ensure")(function*(){yield*z,z=yield*pt.cached(j().pipe(pt.catchCause(()=>pt.void)))}),H=pt.fn("File.init")(function*(){yield*V()}),G=pt.fn("File.status")(function*(){return ne.project.vcs!=="git"?[]:yield*pt.promise(async()=>{let Z=(await Sn.run(["-c","core.fsmonitor=false","-c","core.quotepath=false","diff","--numstat","HEAD"],{cwd:ne.directory})).text(),he=[];if(Z.trim())for(let N of Z.trim().split(`
1746
1746
  `)){let[q,te,ce]=N.split(" ");he.push({path:ce,added:q==="-"?0:parseInt(q,10),removed:te==="-"?0:parseInt(te,10),status:"modified"})}let ge=(await Sn.run(["-c","core.fsmonitor=false","-c","core.quotepath=false","ls-files","--others","--exclude-standard"],{cwd:ne.directory})).text();if(ge.trim())for(let N of ge.trim().split(`
1747
1747
  `))try{let q=await Te.readText(fn.join(ne.directory,N));he.push({path:N,added:q.split(`
1748
1748
  `).length,removed:0,status:"added"})}catch{continue}let Y=(await Sn.run(["-c","core.fsmonitor=false","-c","core.quotepath=false","diff","--name-only","--diff-filter=D","HEAD"],{cwd:ne.directory})).text();if(Y.trim())for(let N of Y.trim().split(`
1749
- `))he.push({path:N,added:0,removed:0,status:"deleted"});return he.map(N=>{let q=fn.isAbsolute(N.path)?N.path:fn.join(ne.directory,N.path);return{...N,path:fn.relative(ne.directory,q)}})})}),ee=pt.fn("File.read")(function*(Z){var Q=[];try{let he=Mn(Q,m.time("read",{file:Z}));let ge=fn.join(ne.directory,Z);if(!ne.containsPath(ge))throw new Error("Access denied: path escapes project directory");if(f(Z)){if(yield*g.existsSafe(ge)){let be=yield*g.readFile(ge).pipe(pt.catch(()=>pt.succeed(new Uint8Array)));return{type:"text",content:Buffer.from(be).toString("base64"),mimeType:C(Z),encoding:"base64"}}return{type:"text",content:""}}let Y=v(Z)||I(Z);if(h(Z)&&!Y)return{type:"binary",content:""};let N=yield*g.existsSafe(ge);if(!N)return{type:"text",content:""};let q=st.mimeType(ge);let te=Y?!1:l(q);if(te&&!S(q))return{type:"binary",content:"",mimeType:q};if(te){let we=yield*g.readFile(ge).pipe(pt.catch(()=>pt.succeed(new Uint8Array)));return{type:"text",content:Buffer.from(we).toString("base64"),mimeType:q,encoding:"base64"}}let ce=yield*g.readFileString(ge).pipe(pt.map(we=>we.trim()),pt.catch(()=>pt.succeed("")));if(ne.project.vcs==="git")return yield*pt.promise(async()=>{let we=(await Sn.run(["-c","core.fsmonitor=false","diff","--",Z],{cwd:ne.directory})).text();if(we.trim()||(we=(await Sn.run(["-c","core.fsmonitor=false","diff","--staged","--",Z],{cwd:ne.directory})).text()),we.trim()){let be=(await Sn.run(["show",`HEAD:${Z}`],{cwd:ne.directory})).text(),fe=kg(Z,Z,be,ce,"old","new",{context:1/0,ignoreWhitespace:!0});return{type:"text",content:ce,patch:fe,diff:Ig(fe)}}return{type:"text",content:ce}});return{type:"text",content:ce}}catch(ie){var me=ie,le=!0}finally{jn(Q,me,le)}}),se=pt.fn("File.list")(function*(Z){let he=[".git",".DS_Store"],ge=n(te=>!1,"ignored");if(ne.project.vcs==="git"){let te=Dg(),ce=fn.join(ne.project.worktree,".gitignore"),Q=yield*g.readFileString(ce).pipe(pt.catch(()=>pt.succeed("")));Q&&te.add(Q);let ie=fn.join(ne.project.worktree,".ignore"),me=yield*g.readFileString(ie).pipe(pt.catch(()=>pt.succeed("")));me&&te.add(me),ge=te.ignores.bind(te)}let Y=Z?fn.join(ne.directory,Z):ne.directory;if(!ne.containsPath(Y))throw new Error("Access denied: path escapes project directory");let N=yield*g.readDirectoryEntries(Y).pipe(pt.orElseSucceed(()=>[])),q=[];for(let te of N){if(he.includes(te.name))continue;let ce=fn.join(Y,te.name),Q=fn.relative(ne.directory,ce),ie=te.type==="directory"?"directory":"file";q.push({name:te.name,path:Q,absolute:ce,type:ie,ignored:ge(ie==="directory"?Q+"/":Q)})}return q.sort((te,ce)=>te.type!==ce.type?te.type==="directory"?-1:1:te.name.localeCompare(ce.name))}),F=pt.fn("File.search")(function*(Z){yield*V();let{cache:he}=yield*ae.get(L),ge=Z.query.trim(),Y=Z.limit??100,N=Z.type??(Z.dirs===!1?"file":"all");m.info("search",{query:ge,kind:N});let q=ge.startsWith(".")||ge.includes("/.");if(!ge)return N==="file"?he.files.slice(0,Y):y(he.dirs.toSorted(),q).slice(0,Y);let te=N==="file"?he.files:N==="directory"?he.dirs:[...he.files,...he.dirs],ce=N==="directory"&&!q?Y*20:Y,Q=Eg.go(ge,te,{limit:ce}).map(me=>me.target),ie=N==="directory"?y(Q,q).slice(0,Y):Q;return m.info("search",{query:ge,kind:N,results:ie.length}),ie});return m.info("init"),D.of({init:H,status:G,read:ee,list:se,search:F})})),u.defaultLayer=u.layer.pipe(vd.provide(st.defaultLayer));let{runPromise:_}=qe(D,u.defaultLayer);function E(){return _(g=>g.init())}u.init=E,n(E,"init");async function x(){return _(g=>g.status())}u.status=x,n(x,"status");async function k(g){return _(L=>L.read(g))}u.read=k,n(k,"read");async function M(g){return _(L=>L.list(g))}u.list=M,n(M,"list");async function r(g){return _(L=>L.search(g))}u.search=r,n(r,"search")})(bo||={});import{createRequire as Sg}from"node:module";import{Cause as xd,Effect as gn,Layer as Id,ServiceMap as Tg}from"effect";import{createWrapper as Pg}from"@parcel/watcher/wrapper.js";import{readdir as Og}from"fs/promises";import oa from"path";import dr from"zod";var na;(m=>{let t=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"]),e=["**/*.swp","**/*.swo","**/*.pyc","**/.DS_Store","**/Thumbs.db","**/logs/**","**/tmp/**","**/temp/**","**/*.log","**/coverage/**","**/.nyc_output/**"];m.PATTERNS=[...e,...t];function i(c,a){for(let s of a?.whitelist||[])if(Eo.match(s,c))return!1;let d=c.split(/[/\\]/);for(let s=0;s<d.length;s++)if(t.has(d[s]))return!0;let b=a?.extra||[];for(let s of[...e,...b])if(Eo.match(s,c))return!0;return!1}m.match=i,n(i,"match")})(na||={});var wo;(f=>{let t=Ae.create({service:"file.watcher"}),e=1e4;f.Event={Updated:ht.define("file.watcher.updated",dr.object({file:dr.string(),event:dr.union([dr.literal("add"),dr.literal("change"),dr.literal("unlink")])}))};let i=Gn(()=>{try{let I=Sg(import.meta.url)(`@parcel/watcher-${process.platform}-${process.arch}${process.platform==="linux"?`-${OPENCODE_LIBC||"glibc"}`:""}`);return Pg(I)}catch(v){t.error("failed to load watcher binding",{error:v});return}});function m(){if(process.platform==="win32")return"windows";if(process.platform==="darwin")return"fs-events";if(process.platform==="linux")return"inotify"}n(m,"getBackend");function c(v){return qr.paths().filter(I=>{let h=oa.relative(v,I);return h!==""&&!h.startsWith("..")&&!oa.isAbsolute(h)})}n(c,"protecteds"),f.hasNativeBinding=n(()=>!!i(),"hasNativeBinding");class d extends Tg.Service()("@opencode/FileWatcher"){static{n(this,"Service")}}f.Service=d,f.layer=Id.effect(d,gn.gen(function*(){let v=yield*Be.Service,I=yield*ae.make(gn.fn("FileWatcher.state")(function*(){if(yield*ze.OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER)return;t.info("init",{directory:ne.directory});let h=m();if(!h){t.error("watcher backend not supported",{directory:ne.directory,platform:process.platform});return}let S=i();if(!S)return;t.info("watcher backend",{directory:ne.directory,platform:process.platform,backend:h});let C=[];yield*gn.addFinalizer(()=>gn.promise(()=>Promise.allSettled(C.map(T=>T.unsubscribe()))));let l=ne.bind((T,R)=>{if(!T)for(let _ of R)_.type==="create"&&Me.publish(f.Event.Updated,{file:_.path,event:"add"}),_.type==="update"&&Me.publish(f.Event.Updated,{file:_.path,event:"change"}),_.type==="delete"&&Me.publish(f.Event.Updated,{file:_.path,event:"unlink"})}),P=n((T,R)=>{let _=S.subscribe(T,l,{ignore:R,backend:h});return gn.gen(function*(){let E=yield*gn.promise(()=>_);C.push(E)}).pipe(gn.timeout(e),gn.catchCause(E=>(t.error("failed to subscribe",{dir:T,cause:xd.pretty(E)}),_.then(x=>x.unsubscribe()).catch(()=>{}),gn.void)))},"subscribe"),D=(yield*v.get()).watcher?.ignore??[];if((yield*ze.OPENCODE_EXPERIMENTAL_FILEWATCHER)&&(yield*P(ne.directory,[...na.PATTERNS,...D,...c(ne.directory)])),ne.project.vcs==="git"){let T=yield*gn.promise(()=>Sn.run(["rev-parse","--git-dir"],{cwd:ne.project.worktree})),R=T.exitCode===0?oa.resolve(ne.project.worktree,T.text().trim()):void 0;if(R&&!D.includes(".git")&&!D.includes(R)){let _=(yield*gn.promise(()=>Og(R).catch(()=>[]))).filter(E=>E!=="HEAD");yield*P(R,_)}}},gn.catchCause(h=>(t.error("failed to init watcher service",{cause:xd.pretty(h)}),gn.void))));return d.of({init:gn.fn("FileWatcher.init")(function*(){yield*ae.get(I)})})})),f.defaultLayer=f.layer.pipe(Id.provide(Be.defaultLayer));let{runPromise:p}=qe(d,f.defaultLayer);function w(){return p(v=>v.init())}f.init=w,n(w,"init")})(wo||={});import{Effect as _n,Layer as sa,ServiceMap as ny}from"effect";import{ChildProcess as oy,ChildProcessSpawner as Ed}from"effect/unstable/process";import ry from"path";import{mergeDeep as sy}from"remeda";import js from"zod";var ra={};xu(ra,{biome:()=>jg,clang:()=>Ng,cljfmt:()=>ey,dart:()=>Bg,dfmt:()=>ty,gleam:()=>Yg,gofmt:()=>Rg,htmlbeautifier:()=>Wg,ktlint:()=>Ug,latexindent:()=>Vg,mix:()=>Cg,nixfmt:()=>Kg,ocamlformat:()=>Gg,ormolu:()=>Qg,oxfmt:()=>Mg,pint:()=>Zg,prettier:()=>Ag,rlang:()=>zg,rubocop:()=>qg,ruff:()=>kd,rustfmt:()=>Xg,shfmt:()=>Jg,standardrb:()=>$g,terraform:()=>Hg,uvformat:()=>Fg,zig:()=>Lg});import{text as _g}from"node:stream/consumers";var Rg={name:"gofmt",extensions:[".go"],async enabled(){let t=kt("gofmt");return t?[t,"-w","$FILE"]:!1}},Cg={name:"mix",extensions:[".ex",".exs",".eex",".heex",".leex",".neex",".sface"],async enabled(){let t=kt("mix");return t?[t,"format","$FILE"]:!1}},Ag={name:"prettier",environment:{BUN_BE_BUN:"1"},extensions:[".js",".jsx",".mjs",".cjs",".ts",".tsx",".mts",".cts",".html",".htm",".css",".scss",".sass",".less",".vue",".svelte",".json",".jsonc",".yaml",".yml",".toml",".xml",".md",".mdx",".graphql",".gql"],async enabled(){let t=await Te.findUp("package.json",ne.directory,ne.worktree);for(let e of t){let o=await Te.readJson(e);if(o.dependencies?.prettier||o.devDependencies?.prettier){let i=await Ho.which("prettier");if(i)return[i,"--write","$FILE"]}}return!1}},Mg={name:"oxfmt",environment:{BUN_BE_BUN:"1"},extensions:[".js",".jsx",".mjs",".cjs",".ts",".tsx",".mts",".cts"],async enabled(){if(!ze.OPENCODE_EXPERIMENTAL_OXFMT)return!1;let t=await Te.findUp("package.json",ne.directory,ne.worktree);for(let e of t){let o=await Te.readJson(e);if(o.dependencies?.oxfmt||o.devDependencies?.oxfmt){let i=await Ho.which("oxfmt");if(i)return[i,"$FILE"]}}return!1}},jg={name:"biome",environment:{BUN_BE_BUN:"1"},extensions:[".js",".jsx",".mjs",".cjs",".ts",".tsx",".mts",".cts",".html",".htm",".css",".scss",".sass",".less",".vue",".svelte",".json",".jsonc",".yaml",".yml",".toml",".xml",".md",".mdx",".graphql",".gql"],async enabled(){let t=["biome.json","biome.jsonc"];for(let e of t)if((await Te.findUp(e,ne.directory,ne.worktree)).length>0){let i=await Ho.which("@biomejs/biome");if(i)return[i,"format","--write","$FILE"]}return!1}},Lg={name:"zig",extensions:[".zig",".zon"],async enabled(){let t=kt("zig");return t?[t,"fmt","$FILE"]:!1}},Ng={name:"clang-format",extensions:[".c",".cc",".cpp",".cxx",".c++",".h",".hh",".hpp",".hxx",".h++",".ino",".C",".H"],async enabled(){if((await Te.findUp(".clang-format",ne.directory,ne.worktree)).length>0){let e=kt("clang-format");if(e)return[e,"-i","$FILE"]}return!1}},Ug={name:"ktlint",extensions:[".kt",".kts"],async enabled(){let t=kt("ktlint");return t?[t,"-F","$FILE"]:!1}},kd={name:"ruff",extensions:[".py",".pyi"],async enabled(){if(!kt("ruff"))return!1;let t=["pyproject.toml","ruff.toml",".ruff.toml"];for(let o of t){let i=await Te.findUp(o,ne.directory,ne.worktree);if(i.length>0)if(o==="pyproject.toml"){if((await Te.readText(i[0])).includes("[tool.ruff]"))return["ruff","format","$FILE"]}else return["ruff","format","$FILE"]}let e=["requirements.txt","pyproject.toml","Pipfile"];for(let o of e){let i=await Te.findUp(o,ne.directory,ne.worktree);if(i.length>0&&(await Te.readText(i[0])).includes("ruff"))return["ruff","format","$FILE"]}return!1}},zg={name:"air",extensions:[".R"],async enabled(){if(kt("air")==null)return!1;try{let e=Xt.spawn(["air","--help"],{stdout:"pipe",stderr:"pipe"});if(await e.exited,!e.stdout)return!1;let i=(await _g(e.stdout)).split(`
1750
- `)[0],m=i.includes("R language"),c=i.includes("formatter");if(m&&c)return["air","format","$FILE"]}catch{return!1}return!1}},Fg={name:"uv",extensions:[".py",".pyi"],async enabled(){return await kd.enabled()?!1:kt("uv")!==null&&await Xt.spawn(["uv","format","--help"],{stderr:"pipe",stdout:"pipe"}).exited===0?["uv","format","--","$FILE"]:!1}},qg={name:"rubocop",extensions:[".rb",".rake",".gemspec",".ru"],async enabled(){let t=kt("rubocop");return t?[t,"--autocorrect","$FILE"]:!1}},$g={name:"standardrb",extensions:[".rb",".rake",".gemspec",".ru"],async enabled(){let t=kt("standardrb");return t?[t,"--fix","$FILE"]:!1}},Wg={name:"htmlbeautifier",extensions:[".erb",".html.erb"],async enabled(){let t=kt("htmlbeautifier");return t?[t,"$FILE"]:!1}},Bg={name:"dart",extensions:[".dart"],async enabled(){let t=kt("dart");return t?[t,"format","$FILE"]:!1}},Gg={name:"ocamlformat",extensions:[".ml",".mli"],async enabled(){return kt("ocamlformat")&&(await Te.findUp(".ocamlformat",ne.directory,ne.worktree)).length>0?["ocamlformat","-i","$FILE"]:!1}},Hg={name:"terraform",extensions:[".tf",".tfvars"],async enabled(){let t=kt("terraform");return t?[t,"fmt","$FILE"]:!1}},Vg={name:"latexindent",extensions:[".tex"],async enabled(){let t=kt("latexindent");return t?[t,"-w","-s","$FILE"]:!1}},Yg={name:"gleam",extensions:[".gleam"],async enabled(){let t=kt("gleam");return t?[t,"format","$FILE"]:!1}},Jg={name:"shfmt",extensions:[".sh",".bash"],async enabled(){let t=kt("shfmt");return t?[t,"-w","$FILE"]:!1}},Kg={name:"nixfmt",extensions:[".nix"],async enabled(){let t=kt("nixfmt");return t?[t,"$FILE"]:!1}},Xg={name:"rustfmt",extensions:[".rs"],async enabled(){let t=kt("rustfmt");return t?[t,"$FILE"]:!1}},Zg={name:"pint",extensions:[".php"],async enabled(){let t=await Te.findUp("composer.json",ne.directory,ne.worktree);for(let e of t){let o=await Te.readJson(e);if(o.require?.["laravel/pint"]||o["require-dev"]?.["laravel/pint"])return["./vendor/bin/pint","$FILE"]}return!1}},Qg={name:"ormolu",extensions:[".hs"],async enabled(){let t=kt("ormolu");return t?[t,"-i","$FILE"]:!1}},ey={name:"cljfmt",extensions:[".clj",".cljs",".cljc",".edn"],async enabled(){let t=kt("cljfmt");return t?[t,"fix","--quiet","$FILE"]:!1}},ty={name:"dfmt",extensions:[".d"],async enabled(){let t=kt("dfmt");return t?[t,"-i","$FILE"]:!1}};var vo;(s=>{let t=Ae.create({service:"format"});s.Status=js.object({name:js.string(),extensions:js.string().array(),enabled:js.boolean()}).meta({ref:"FormatterStatus"});class o extends ny.Service()("@opencode/Format"){static{n(this,"Service")}}s.Service=o,s.layer=sa.effect(o,_n.gen(function*(){let p=yield*Be.Service,w=yield*Ed.ChildProcessSpawner,f=yield*ae.make(_n.fn("Format.state")(function*(S){let C={},l={},P=yield*p.get();if(P.formatter!==!1){for(let _ of Object.values(ra))l[_.name]=_;for(let[_,E]of Object.entries(P.formatter??{})){if(E.disabled){delete l[_];continue}let x=sy(l[_]??{},{extensions:[],...E});l[_]={...x,name:_,enabled:n(async()=>x.command??!1,"enabled")}}}else t.info("all formatters are disabled");async function y(_){let E=C[_.name];return(E===!1||E===void 0)&&(E=await _.enabled(),C[_.name]=E),E}n(y,"getCommand");async function D(_){return await y(_)!==!1}n(D,"isEnabled");async function T(_){let E=Object.values(l).filter(k=>k.extensions.includes(_));return(await Promise.all(E.map(async k=>{t.info("checking",{name:k.name,ext:_});let M=await y(k);return M&&t.info("enabled",{name:k.name,ext:_}),{item:k,cmd:M}}))).filter(k=>k.cmd).map(k=>({item:k.item,cmd:k.cmd}))}n(T,"getFormatter");function R(_){return _n.gen(function*(){t.info("formatting",{file:_});let E=ry.extname(_);for(let{item:x,cmd:k}of yield*_n.promise(()=>T(E))){if(k===!1)continue;t.info("running",{command:k});let M=k.map(g=>g.replace("$FILE",_)),r=yield*ae.directory;(yield*w.spawn(oy.make(M[0],M.slice(1),{cwd:r,env:x.environment,extendEnv:!0})).pipe(_n.flatMap(g=>g.exitCode),_n.scoped,_n.catch(()=>_n.sync(()=>(t.error("failed to format file",{error:"spawn failed",command:k,...x.environment,file:_}),Ed.ExitCode(1))))))!==0&&t.error("failed",{command:k,...x.environment})}})}return n(R,"formatFile"),t.info("init"),{formatters:l,isEnabled:D,formatFile:R}})),v=_n.fn("Format.init")(function*(){yield*ae.get(f)}),I=_n.fn("Format.status")(function*(){let{formatters:S,isEnabled:C}=yield*ae.get(f),l=[];for(let P of Object.values(S)){let y=yield*_n.promise(()=>C(P));l.push({name:P.name,extensions:P.extensions,enabled:y})}return l}),h=_n.fn("Format.file")(function*(S){let{formatFile:C}=yield*ae.get(f);yield*C(S)});return o.of({init:v,status:I,file:h})})),s.defaultLayer=s.layer.pipe(sa.provide(Be.defaultLayer),sa.provide(so));let{runPromise:c}=qe(o,s.defaultLayer);async function a(){return c(p=>p.init())}s.init=a,n(a,"init");async function d(){return c(p=>p.status())}s.status=d,n(d,"status");async function b(p){return c(w=>w.file(p))}s.file=b,n(b,"file")})(vo||={});import ia from"path";import{Effect as Dd}from"effect";async function yn(t,e,o){if(!e||o?.bypass)return;let i=process.platform==="win32"?st.normalizePath(e):e;if(ne.containsPath(i))return;let c=(o?.kind??"file")==="directory"?i:ia.dirname(i),a=process.platform==="win32"?st.normalizePathPattern(ia.join(c,"*")):ia.join(c,"*").replaceAll("\\","/");await t.ask({permission:"external_directory",patterns:[a],always:[a],metadata:{filepath:i,parentDir:c}})}n(yn,"assertExternalDirectory");var Sd=Dd.fn("Tool.assertExternalDirectory")(function*(t,e,o){yield*Dd.promise(()=>yn(t,e,o))});var la=20;function ur(t){return t.replaceAll(`\r
1749
+ `))he.push({path:N,added:0,removed:0,status:"deleted"});return he.map(N=>{let q=fn.isAbsolute(N.path)?N.path:fn.join(ne.directory,N.path);return{...N,path:fn.relative(ne.directory,q)}})})}),ee=pt.fn("File.read")(function*(Z){var Q=[];try{let he=Mn(Q,m.time("read",{file:Z}));let ge=fn.join(ne.directory,Z);if(!ne.containsPath(ge))throw new Error("Access denied: path escapes project directory");if(f(Z)){if(yield*g.existsSafe(ge)){let be=yield*g.readFile(ge).pipe(pt.catch(()=>pt.succeed(new Uint8Array)));return{type:"text",content:Buffer.from(be).toString("base64"),mimeType:C(Z),encoding:"base64"}}return{type:"text",content:""}}let Y=v(Z)||I(Z);if(h(Z)&&!Y)return{type:"binary",content:""};let N=yield*g.existsSafe(ge);if(!N)return{type:"text",content:""};let q=st.mimeType(ge);let te=Y?!1:l(q);if(te&&!S(q))return{type:"binary",content:"",mimeType:q};if(te){let we=yield*g.readFile(ge).pipe(pt.catch(()=>pt.succeed(new Uint8Array)));return{type:"text",content:Buffer.from(we).toString("base64"),mimeType:q,encoding:"base64"}}let ce=yield*g.readFileString(ge).pipe(pt.map(we=>we.trim()),pt.catch(()=>pt.succeed("")));if(ne.project.vcs==="git")return yield*pt.promise(async()=>{let we=(await Sn.run(["-c","core.fsmonitor=false","diff","--",Z],{cwd:ne.directory})).text();if(we.trim()||(we=(await Sn.run(["-c","core.fsmonitor=false","diff","--staged","--",Z],{cwd:ne.directory})).text()),we.trim()){let be=(await Sn.run(["show",`HEAD:${Z}`],{cwd:ne.directory})).text(),fe=Eg(Z,Z,be,ce,"old","new",{context:1/0,ignoreWhitespace:!0});return{type:"text",content:ce,patch:fe,diff:kg(fe)}}return{type:"text",content:ce}});return{type:"text",content:ce}}catch(ie){var me=ie,le=!0}finally{jn(Q,me,le)}}),se=pt.fn("File.list")(function*(Z){let he=[".git",".DS_Store"],ge=n(te=>!1,"ignored");if(ne.project.vcs==="git"){let te=Sg(),ce=fn.join(ne.project.worktree,".gitignore"),Q=yield*g.readFileString(ce).pipe(pt.catch(()=>pt.succeed("")));Q&&te.add(Q);let ie=fn.join(ne.project.worktree,".ignore"),me=yield*g.readFileString(ie).pipe(pt.catch(()=>pt.succeed("")));me&&te.add(me),ge=te.ignores.bind(te)}let Y=Z?fn.join(ne.directory,Z):ne.directory;if(!ne.containsPath(Y))throw new Error("Access denied: path escapes project directory");let N=yield*g.readDirectoryEntries(Y).pipe(pt.orElseSucceed(()=>[])),q=[];for(let te of N){if(he.includes(te.name))continue;let ce=fn.join(Y,te.name),Q=fn.relative(ne.directory,ce),ie=te.type==="directory"?"directory":"file";q.push({name:te.name,path:Q,absolute:ce,type:ie,ignored:ge(ie==="directory"?Q+"/":Q)})}return q.sort((te,ce)=>te.type!==ce.type?te.type==="directory"?-1:1:te.name.localeCompare(ce.name))}),F=pt.fn("File.search")(function*(Z){yield*V();let{cache:he}=yield*ae.get(L),ge=Z.query.trim(),Y=Z.limit??100,N=Z.type??(Z.dirs===!1?"file":"all");m.info("search",{query:ge,kind:N});let q=ge.startsWith(".")||ge.includes("/.");if(!ge)return N==="file"?he.files.slice(0,Y):y(he.dirs.toSorted(),q).slice(0,Y);let te=N==="file"?he.files:N==="directory"?he.dirs:[...he.files,...he.dirs],ce=N==="directory"&&!q?Y*20:Y,Q=Dg.go(ge,te,{limit:ce}).map(me=>me.target),ie=N==="directory"?y(Q,q).slice(0,Y):Q;return m.info("search",{query:ge,kind:N,results:ie.length}),ie});return m.info("init"),D.of({init:H,status:G,read:ee,list:se,search:F})})),u.defaultLayer=u.layer.pipe(xd.provide(st.defaultLayer));let{runPromise:_}=qe(D,u.defaultLayer);function E(){return _(g=>g.init())}u.init=E,n(E,"init");async function x(){return _(g=>g.status())}u.status=x,n(x,"status");async function k(g){return _(L=>L.read(g))}u.read=k,n(k,"read");async function M(g){return _(L=>L.list(g))}u.list=M,n(M,"list");async function r(g){return _(L=>L.search(g))}u.search=r,n(r,"search")})(bo||={});import{createRequire as Tg}from"node:module";import{Cause as Id,Effect as gn,Layer as kd,ServiceMap as Pg}from"effect";import{createWrapper as Og}from"@parcel/watcher/wrapper.js";import{readdir as _g}from"fs/promises";import oa from"path";import dr from"zod";var na;(m=>{let t=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"]),e=["**/*.swp","**/*.swo","**/*.pyc","**/.DS_Store","**/Thumbs.db","**/logs/**","**/tmp/**","**/temp/**","**/*.log","**/coverage/**","**/.nyc_output/**"];m.PATTERNS=[...e,...t];function i(c,a){for(let s of a?.whitelist||[])if(Eo.match(s,c))return!1;let d=c.split(/[/\\]/);for(let s=0;s<d.length;s++)if(t.has(d[s]))return!0;let b=a?.extra||[];for(let s of[...e,...b])if(Eo.match(s,c))return!0;return!1}m.match=i,n(i,"match")})(na||={});var wo;(f=>{let t=Ae.create({service:"file.watcher"}),e=1e4;f.Event={Updated:ht.define("file.watcher.updated",dr.object({file:dr.string(),event:dr.union([dr.literal("add"),dr.literal("change"),dr.literal("unlink")])}))};let i=Gn(()=>{try{let I=Tg(import.meta.url)(`@parcel/watcher-${process.platform}-${process.arch}${process.platform==="linux"?`-${OPENCODE_LIBC||"glibc"}`:""}`);return Og(I)}catch(v){t.error("failed to load watcher binding",{error:v});return}});function m(){if(process.platform==="win32")return"windows";if(process.platform==="darwin")return"fs-events";if(process.platform==="linux")return"inotify"}n(m,"getBackend");function c(v){return qr.paths().filter(I=>{let h=oa.relative(v,I);return h!==""&&!h.startsWith("..")&&!oa.isAbsolute(h)})}n(c,"protecteds"),f.hasNativeBinding=n(()=>!!i(),"hasNativeBinding");class d extends Pg.Service()("@opencode/FileWatcher"){static{n(this,"Service")}}f.Service=d,f.layer=kd.effect(d,gn.gen(function*(){let v=yield*Be.Service,I=yield*ae.make(gn.fn("FileWatcher.state")(function*(){if(yield*ze.OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER)return;t.info("init",{directory:ne.directory});let h=m();if(!h){t.error("watcher backend not supported",{directory:ne.directory,platform:process.platform});return}let S=i();if(!S)return;t.info("watcher backend",{directory:ne.directory,platform:process.platform,backend:h});let C=[];yield*gn.addFinalizer(()=>gn.promise(()=>Promise.allSettled(C.map(T=>T.unsubscribe()))));let l=ne.bind((T,R)=>{if(!T)for(let _ of R)_.type==="create"&&Me.publish(f.Event.Updated,{file:_.path,event:"add"}),_.type==="update"&&Me.publish(f.Event.Updated,{file:_.path,event:"change"}),_.type==="delete"&&Me.publish(f.Event.Updated,{file:_.path,event:"unlink"})}),P=n((T,R)=>{let _=S.subscribe(T,l,{ignore:R,backend:h});return gn.gen(function*(){let E=yield*gn.promise(()=>_);C.push(E)}).pipe(gn.timeout(e),gn.catchCause(E=>(t.error("failed to subscribe",{dir:T,cause:Id.pretty(E)}),_.then(x=>x.unsubscribe()).catch(()=>{}),gn.void)))},"subscribe"),D=(yield*v.get()).watcher?.ignore??[];if((yield*ze.OPENCODE_EXPERIMENTAL_FILEWATCHER)&&(yield*P(ne.directory,[...na.PATTERNS,...D,...c(ne.directory)])),ne.project.vcs==="git"){let T=yield*gn.promise(()=>Sn.run(["rev-parse","--git-dir"],{cwd:ne.project.worktree})),R=T.exitCode===0?oa.resolve(ne.project.worktree,T.text().trim()):void 0;if(R&&!D.includes(".git")&&!D.includes(R)){let _=(yield*gn.promise(()=>_g(R).catch(()=>[]))).filter(E=>E!=="HEAD");yield*P(R,_)}}},gn.catchCause(h=>(t.error("failed to init watcher service",{cause:Id.pretty(h)}),gn.void))));return d.of({init:gn.fn("FileWatcher.init")(function*(){yield*ae.get(I)})})})),f.defaultLayer=f.layer.pipe(kd.provide(Be.defaultLayer));let{runPromise:p}=qe(d,f.defaultLayer);function w(){return p(v=>v.init())}f.init=w,n(w,"init")})(wo||={});import{Effect as _n,Layer as sa,ServiceMap as oy}from"effect";import{ChildProcess as ry,ChildProcessSpawner as Dd}from"effect/unstable/process";import sy from"path";import{mergeDeep as iy}from"remeda";import js from"zod";var ra={};Iu(ra,{biome:()=>Lg,clang:()=>Ug,cljfmt:()=>ty,dart:()=>Gg,dfmt:()=>ny,gleam:()=>Jg,gofmt:()=>Cg,htmlbeautifier:()=>Bg,ktlint:()=>zg,latexindent:()=>Yg,mix:()=>Ag,nixfmt:()=>Xg,ocamlformat:()=>Hg,ormolu:()=>ey,oxfmt:()=>jg,pint:()=>Qg,prettier:()=>Mg,rlang:()=>Fg,rubocop:()=>$g,ruff:()=>Ed,rustfmt:()=>Zg,shfmt:()=>Kg,standardrb:()=>Wg,terraform:()=>Vg,uvformat:()=>qg,zig:()=>Ng});import{text as Rg}from"node:stream/consumers";var Cg={name:"gofmt",extensions:[".go"],async enabled(){let t=kt("gofmt");return t?[t,"-w","$FILE"]:!1}},Ag={name:"mix",extensions:[".ex",".exs",".eex",".heex",".leex",".neex",".sface"],async enabled(){let t=kt("mix");return t?[t,"format","$FILE"]:!1}},Mg={name:"prettier",environment:{BUN_BE_BUN:"1"},extensions:[".js",".jsx",".mjs",".cjs",".ts",".tsx",".mts",".cts",".html",".htm",".css",".scss",".sass",".less",".vue",".svelte",".json",".jsonc",".yaml",".yml",".toml",".xml",".md",".mdx",".graphql",".gql"],async enabled(){let t=await Te.findUp("package.json",ne.directory,ne.worktree);for(let e of t){let o=await Te.readJson(e);if(o.dependencies?.prettier||o.devDependencies?.prettier){let i=await Ho.which("prettier");if(i)return[i,"--write","$FILE"]}}return!1}},jg={name:"oxfmt",environment:{BUN_BE_BUN:"1"},extensions:[".js",".jsx",".mjs",".cjs",".ts",".tsx",".mts",".cts"],async enabled(){if(!ze.OPENCODE_EXPERIMENTAL_OXFMT)return!1;let t=await Te.findUp("package.json",ne.directory,ne.worktree);for(let e of t){let o=await Te.readJson(e);if(o.dependencies?.oxfmt||o.devDependencies?.oxfmt){let i=await Ho.which("oxfmt");if(i)return[i,"$FILE"]}}return!1}},Lg={name:"biome",environment:{BUN_BE_BUN:"1"},extensions:[".js",".jsx",".mjs",".cjs",".ts",".tsx",".mts",".cts",".html",".htm",".css",".scss",".sass",".less",".vue",".svelte",".json",".jsonc",".yaml",".yml",".toml",".xml",".md",".mdx",".graphql",".gql"],async enabled(){let t=["biome.json","biome.jsonc"];for(let e of t)if((await Te.findUp(e,ne.directory,ne.worktree)).length>0){let i=await Ho.which("@biomejs/biome");if(i)return[i,"format","--write","$FILE"]}return!1}},Ng={name:"zig",extensions:[".zig",".zon"],async enabled(){let t=kt("zig");return t?[t,"fmt","$FILE"]:!1}},Ug={name:"clang-format",extensions:[".c",".cc",".cpp",".cxx",".c++",".h",".hh",".hpp",".hxx",".h++",".ino",".C",".H"],async enabled(){if((await Te.findUp(".clang-format",ne.directory,ne.worktree)).length>0){let e=kt("clang-format");if(e)return[e,"-i","$FILE"]}return!1}},zg={name:"ktlint",extensions:[".kt",".kts"],async enabled(){let t=kt("ktlint");return t?[t,"-F","$FILE"]:!1}},Ed={name:"ruff",extensions:[".py",".pyi"],async enabled(){if(!kt("ruff"))return!1;let t=["pyproject.toml","ruff.toml",".ruff.toml"];for(let o of t){let i=await Te.findUp(o,ne.directory,ne.worktree);if(i.length>0)if(o==="pyproject.toml"){if((await Te.readText(i[0])).includes("[tool.ruff]"))return["ruff","format","$FILE"]}else return["ruff","format","$FILE"]}let e=["requirements.txt","pyproject.toml","Pipfile"];for(let o of e){let i=await Te.findUp(o,ne.directory,ne.worktree);if(i.length>0&&(await Te.readText(i[0])).includes("ruff"))return["ruff","format","$FILE"]}return!1}},Fg={name:"air",extensions:[".R"],async enabled(){if(kt("air")==null)return!1;try{let e=Xt.spawn(["air","--help"],{stdout:"pipe",stderr:"pipe"});if(await e.exited,!e.stdout)return!1;let i=(await Rg(e.stdout)).split(`
1750
+ `)[0],m=i.includes("R language"),c=i.includes("formatter");if(m&&c)return["air","format","$FILE"]}catch{return!1}return!1}},qg={name:"uv",extensions:[".py",".pyi"],async enabled(){return await Ed.enabled()?!1:kt("uv")!==null&&await Xt.spawn(["uv","format","--help"],{stderr:"pipe",stdout:"pipe"}).exited===0?["uv","format","--","$FILE"]:!1}},$g={name:"rubocop",extensions:[".rb",".rake",".gemspec",".ru"],async enabled(){let t=kt("rubocop");return t?[t,"--autocorrect","$FILE"]:!1}},Wg={name:"standardrb",extensions:[".rb",".rake",".gemspec",".ru"],async enabled(){let t=kt("standardrb");return t?[t,"--fix","$FILE"]:!1}},Bg={name:"htmlbeautifier",extensions:[".erb",".html.erb"],async enabled(){let t=kt("htmlbeautifier");return t?[t,"$FILE"]:!1}},Gg={name:"dart",extensions:[".dart"],async enabled(){let t=kt("dart");return t?[t,"format","$FILE"]:!1}},Hg={name:"ocamlformat",extensions:[".ml",".mli"],async enabled(){return kt("ocamlformat")&&(await Te.findUp(".ocamlformat",ne.directory,ne.worktree)).length>0?["ocamlformat","-i","$FILE"]:!1}},Vg={name:"terraform",extensions:[".tf",".tfvars"],async enabled(){let t=kt("terraform");return t?[t,"fmt","$FILE"]:!1}},Yg={name:"latexindent",extensions:[".tex"],async enabled(){let t=kt("latexindent");return t?[t,"-w","-s","$FILE"]:!1}},Jg={name:"gleam",extensions:[".gleam"],async enabled(){let t=kt("gleam");return t?[t,"format","$FILE"]:!1}},Kg={name:"shfmt",extensions:[".sh",".bash"],async enabled(){let t=kt("shfmt");return t?[t,"-w","$FILE"]:!1}},Xg={name:"nixfmt",extensions:[".nix"],async enabled(){let t=kt("nixfmt");return t?[t,"$FILE"]:!1}},Zg={name:"rustfmt",extensions:[".rs"],async enabled(){let t=kt("rustfmt");return t?[t,"$FILE"]:!1}},Qg={name:"pint",extensions:[".php"],async enabled(){let t=await Te.findUp("composer.json",ne.directory,ne.worktree);for(let e of t){let o=await Te.readJson(e);if(o.require?.["laravel/pint"]||o["require-dev"]?.["laravel/pint"])return["./vendor/bin/pint","$FILE"]}return!1}},ey={name:"ormolu",extensions:[".hs"],async enabled(){let t=kt("ormolu");return t?[t,"-i","$FILE"]:!1}},ty={name:"cljfmt",extensions:[".clj",".cljs",".cljc",".edn"],async enabled(){let t=kt("cljfmt");return t?[t,"fix","--quiet","$FILE"]:!1}},ny={name:"dfmt",extensions:[".d"],async enabled(){let t=kt("dfmt");return t?[t,"-i","$FILE"]:!1}};var vo;(s=>{let t=Ae.create({service:"format"});s.Status=js.object({name:js.string(),extensions:js.string().array(),enabled:js.boolean()}).meta({ref:"FormatterStatus"});class o extends oy.Service()("@opencode/Format"){static{n(this,"Service")}}s.Service=o,s.layer=sa.effect(o,_n.gen(function*(){let p=yield*Be.Service,w=yield*Dd.ChildProcessSpawner,f=yield*ae.make(_n.fn("Format.state")(function*(S){let C={},l={},P=yield*p.get();if(P.formatter!==!1){for(let _ of Object.values(ra))l[_.name]=_;for(let[_,E]of Object.entries(P.formatter??{})){if(E.disabled){delete l[_];continue}let x=iy(l[_]??{},{extensions:[],...E});l[_]={...x,name:_,enabled:n(async()=>x.command??!1,"enabled")}}}else t.info("all formatters are disabled");async function y(_){let E=C[_.name];return(E===!1||E===void 0)&&(E=await _.enabled(),C[_.name]=E),E}n(y,"getCommand");async function D(_){return await y(_)!==!1}n(D,"isEnabled");async function T(_){let E=Object.values(l).filter(k=>k.extensions.includes(_));return(await Promise.all(E.map(async k=>{t.info("checking",{name:k.name,ext:_});let M=await y(k);return M&&t.info("enabled",{name:k.name,ext:_}),{item:k,cmd:M}}))).filter(k=>k.cmd).map(k=>({item:k.item,cmd:k.cmd}))}n(T,"getFormatter");function R(_){return _n.gen(function*(){t.info("formatting",{file:_});let E=sy.extname(_);for(let{item:x,cmd:k}of yield*_n.promise(()=>T(E))){if(k===!1)continue;t.info("running",{command:k});let M=k.map(g=>g.replace("$FILE",_)),r=yield*ae.directory;(yield*w.spawn(ry.make(M[0],M.slice(1),{cwd:r,env:x.environment,extendEnv:!0})).pipe(_n.flatMap(g=>g.exitCode),_n.scoped,_n.catch(()=>_n.sync(()=>(t.error("failed to format file",{error:"spawn failed",command:k,...x.environment,file:_}),Dd.ExitCode(1))))))!==0&&t.error("failed",{command:k,...x.environment})}})}return n(R,"formatFile"),t.info("init"),{formatters:l,isEnabled:D,formatFile:R}})),v=_n.fn("Format.init")(function*(){yield*ae.get(f)}),I=_n.fn("Format.status")(function*(){let{formatters:S,isEnabled:C}=yield*ae.get(f),l=[];for(let P of Object.values(S)){let y=yield*_n.promise(()=>C(P));l.push({name:P.name,extensions:P.extensions,enabled:y})}return l}),h=_n.fn("Format.file")(function*(S){let{formatFile:C}=yield*ae.get(f);yield*C(S)});return o.of({init:v,status:I,file:h})})),s.defaultLayer=s.layer.pipe(sa.provide(Be.defaultLayer),sa.provide(so));let{runPromise:c}=qe(o,s.defaultLayer);async function a(){return c(p=>p.init())}s.init=a,n(a,"init");async function d(){return c(p=>p.status())}s.status=d,n(d,"status");async function b(p){return c(w=>w.file(p))}s.file=b,n(b,"file")})(vo||={});import ia from"path";import{Effect as Sd}from"effect";async function yn(t,e,o){if(!e||o?.bypass)return;let i=process.platform==="win32"?st.normalizePath(e):e;if(ne.containsPath(i))return;let c=(o?.kind??"file")==="directory"?i:ia.dirname(i),a=process.platform==="win32"?st.normalizePathPattern(ia.join(c,"*")):ia.join(c,"*").replaceAll("\\","/");await t.ask({permission:"external_directory",patterns:[a],always:[a],metadata:{filepath:i,parentDir:c}})}n(yn,"assertExternalDirectory");var Td=Sd.fn("Tool.assertExternalDirectory")(function*(t,e,o){yield*Sd.promise(()=>yn(t,e,o))});var la=20;function ur(t){return t.replaceAll(`\r
1751
1751
  `,`
1752
- `)}n(ur,"normalizeLineEndings");function ay(t){return t.includes(`\r
1752
+ `)}n(ur,"normalizeLineEndings");function ly(t){return t.includes(`\r
1753
1753
  `)?`\r
1754
1754
  `:`
1755
- `}n(ay,"detectLineEnding");function Td(t,e){return e===`
1755
+ `}n(ly,"detectLineEnding");function Pd(t,e){return e===`
1756
1756
  `?t:t.replaceAll(`
1757
1757
  `,`\r
1758
- `)}n(Td,"convertToLineEnding");var _d=it.define("edit",{description:yd,parameters:$r.object({filePath:$r.string().describe("The absolute path to the file to modify"),oldString:$r.string().describe("The text to replace"),newString:$r.string().describe("The text to replace it with (must be different from oldString)"),replaceAll:$r.boolean().optional().describe("Replace all occurrences of oldString (default false)")}),async execute(t,e){if(!t.filePath)throw new Error("filePath is required");if(t.oldString===t.newString)throw new Error("No changes to apply: oldString and newString are identical.");let o=xo.isAbsolute(t.filePath)?t.filePath:xo.join(ne.directory,t.filePath);await yn(e,o);let i="",m="",c="";await rn.withLock(o,async()=>{if(t.oldString===""){if(await Te.exists(o))throw new Error("oldString cannot be empty when editing an existing file. Provide the exact text to replace, or use write for an intentional full-file replacement.");c=t.newString,i=no(aa(o,o,m,c)),await e.ask({permission:"edit",patterns:[xo.relative(ne.worktree,o)],always:["*"],metadata:{filepath:o,diff:i}}),await Te.write(o,t.newString),await vo.file(o),Me.publish(bo.Event.Edited,{file:o}),await Me.publish(wo.Event.Updated,{file:o,event:"add"}),await rn.read(e.sessionID,o);return}let f=Te.stat(o);if(!f)throw new Error(`File ${o} not found`);if(f.isDirectory())throw new Error(`Path is a directory, not a file: ${o}`);await rn.assert(e.sessionID,o),m=await Te.readText(o);let v=ay(m),I=Td(ur(t.oldString),v),h=Td(ur(t.newString),v);c=by(m,I,h,t.replaceAll),i=no(aa(o,o,ur(m),ur(c))),await e.ask({permission:"edit",patterns:[xo.relative(ne.worktree,o)],always:["*"],metadata:{filepath:o,diff:i}}),await Te.write(o,c),await vo.file(o),Me.publish(bo.Event.Edited,{file:o}),await Me.publish(wo.Event.Updated,{file:o,event:"change"}),c=await Te.readText(o),i=no(aa(o,o,ur(m),ur(c))),await rn.read(e.sessionID,o)});let a={file:o,before:m,after:c,additions:0,deletions:0};for(let f of iy(m,c))f.added&&(a.additions+=f.count||0),f.removed&&(a.deletions+=f.count||0);e.metadata({metadata:{diff:i,filediff:a,diagnostics:{}}});let d="Edit applied successfully.";await ct.touchFile(o,!0);let b=await ct.diagnostics(),s=Te.normalizePath(o),w=(b[s]??[]).filter(f=>f.severity===1);if(w.length>0){let f=w.slice(0,la),v=w.length>la?`
1758
+ `)}n(Pd,"convertToLineEnding");var Rd=it.define("edit",{description:bd,parameters:$r.object({filePath:$r.string().describe("The absolute path to the file to modify"),oldString:$r.string().describe("The text to replace"),newString:$r.string().describe("The text to replace it with (must be different from oldString)"),replaceAll:$r.boolean().optional().describe("Replace all occurrences of oldString (default false)")}),async execute(t,e){if(!t.filePath)throw new Error("filePath is required");if(t.oldString===t.newString)throw new Error("No changes to apply: oldString and newString are identical.");let o=xo.isAbsolute(t.filePath)?t.filePath:xo.join(ne.directory,t.filePath);await yn(e,o);let i="",m="",c="";await rn.withLock(o,async()=>{if(t.oldString===""){if(await Te.exists(o))throw new Error("oldString cannot be empty when editing an existing file. Provide the exact text to replace, or use write for an intentional full-file replacement.");c=t.newString,i=no(aa(o,o,m,c)),await e.ask({permission:"edit",patterns:[xo.relative(ne.worktree,o)],always:["*"],metadata:{filepath:o,diff:i}}),await Te.write(o,t.newString),await vo.file(o),Me.publish(bo.Event.Edited,{file:o}),await Me.publish(wo.Event.Updated,{file:o,event:"add"}),await rn.read(e.sessionID,o);return}let f=Te.stat(o);if(!f)throw new Error(`File ${o} not found`);if(f.isDirectory())throw new Error(`Path is a directory, not a file: ${o}`);await rn.assert(e.sessionID,o),m=await Te.readText(o);let v=ly(m),I=Pd(ur(t.oldString),v),h=Pd(ur(t.newString),v);c=wy(m,I,h,t.replaceAll),i=no(aa(o,o,ur(m),ur(c))),await e.ask({permission:"edit",patterns:[xo.relative(ne.worktree,o)],always:["*"],metadata:{filepath:o,diff:i}}),await Te.write(o,c),await vo.file(o),Me.publish(bo.Event.Edited,{file:o}),await Me.publish(wo.Event.Updated,{file:o,event:"change"}),c=await Te.readText(o),i=no(aa(o,o,ur(m),ur(c))),await rn.read(e.sessionID,o)});let a={file:o,before:m,after:c,additions:0,deletions:0};for(let f of ay(m,c))f.added&&(a.additions+=f.count||0),f.removed&&(a.deletions+=f.count||0);e.metadata({metadata:{diff:i,filediff:a,diagnostics:{}}});let d="Edit applied successfully.";await ct.touchFile(o,!0);let b=await ct.diagnostics(),s=Te.normalizePath(o),w=(b[s]??[]).filter(f=>f.severity===1);if(w.length>0){let f=w.slice(0,la),v=w.length>la?`
1759
1759
  ... and ${w.length-la} more`:"";d+=`
1760
1760
 
1761
1761
  LSP errors detected in this file, please fix:
1762
1762
  <diagnostics file="${o}">
1763
1763
  ${f.map(ct.Diagnostic.pretty).join(`
1764
1764
  `)}${v}
1765
- </diagnostics>`}return{metadata:{diagnostics:b,diff:i,filediff:a},title:`${xo.relative(ne.worktree,o)}`,output:d}}}),Pd=.65,ly=.65;function Od(t,e){if(t===""||e==="")return Math.max(t.length,e.length);let o=Array.from({length:t.length+1},(i,m)=>Array.from({length:e.length+1},(c,a)=>m===0?a:a===0?m:0));for(let i=1;i<=t.length;i++)for(let m=1;m<=e.length;m++){let c=t[i-1]===e[m-1]?0:1;o[i][m]=Math.min(o[i-1][m]+1,o[i][m-1]+1,o[i-1][m-1]+c)}return o[t.length][e.length]}n(Od,"levenshtein");var cy=n(function*(t,e){yield e},"SimpleReplacer"),dy=n(function*(t,e){let o=t.split(`
1765
+ </diagnostics>`}return{metadata:{diagnostics:b,diff:i,filediff:a},title:`${xo.relative(ne.worktree,o)}`,output:d}}}),Od=.65,cy=.65;function _d(t,e){if(t===""||e==="")return Math.max(t.length,e.length);let o=Array.from({length:t.length+1},(i,m)=>Array.from({length:e.length+1},(c,a)=>m===0?a:a===0?m:0));for(let i=1;i<=t.length;i++)for(let m=1;m<=e.length;m++){let c=t[i-1]===e[m-1]?0:1;o[i][m]=Math.min(o[i-1][m]+1,o[i][m-1]+1,o[i-1][m-1]+c)}return o[t.length][e.length]}n(_d,"levenshtein");var dy=n(function*(t,e){yield e},"SimpleReplacer"),uy=n(function*(t,e){let o=t.split(`
1766
1766
  `),i=e.split(`
1767
- `);i[i.length-1]===""&&i.pop();for(let m=0;m<=o.length-i.length;m++){let c=!0;for(let a=0;a<i.length;a++){let d=o[m+a].trim(),b=i[a].trim();if(d!==b){c=!1;break}}if(c){let a=0;for(let b=0;b<m;b++)a+=o[b].length+1;let d=a;for(let b=0;b<i.length;b++)d+=o[m+b].length,b<i.length-1&&(d+=1);yield t.substring(a,d)}}},"LineTrimmedReplacer"),uy=n(function*(t,e){let o=t.split(`
1767
+ `);i[i.length-1]===""&&i.pop();for(let m=0;m<=o.length-i.length;m++){let c=!0;for(let a=0;a<i.length;a++){let d=o[m+a].trim(),b=i[a].trim();if(d!==b){c=!1;break}}if(c){let a=0;for(let b=0;b<m;b++)a+=o[b].length+1;let d=a;for(let b=0;b<i.length;b++)d+=o[m+b].length,b<i.length-1&&(d+=1);yield t.substring(a,d)}}},"LineTrimmedReplacer"),py=n(function*(t,e){let o=t.split(`
1768
1768
  `),i=e.split(`
1769
- `);if(i.length<3)return;i[i.length-1]===""&&i.pop();let m=i[0].trim(),c=i[i.length-1].trim(),a=i.length,d=Math.max(1,Math.floor(a*.25)),b=[];for(let w=0;w<o.length;w++)if(o[w].trim()===m){for(let f=w+2;f<o.length;f++)if(o[f].trim()===c){let v=f-w+1;Math.abs(v-a)<=d&&b.push({startLine:w,endLine:f});break}}if(b.length===0)return;if(b.length===1){let{startLine:w,endLine:f}=b[0],v=f-w+1,I=0,h=Math.min(a-2,v-2);if(h>0)for(let S=1;S<a-1&&S<v-1;S++){let C=o[w+S].trim(),l=i[S].trim(),P=Math.max(C.length,l.length);if(P===0)continue;let y=Od(C,l);if(I+=(1-y/P)/h,I>=Pd)break}else I=1;if(I>=Pd){let S=0;for(let l=0;l<w;l++)S+=o[l].length+1;let C=S;for(let l=w;l<=f;l++)C+=o[l].length,l<f&&(C+=1);yield t.substring(S,C)}return}let s=null,p=-1;for(let w of b){let{startLine:f,endLine:v}=w,I=v-f+1,h=0,S=Math.min(a-2,I-2);if(S>0){for(let C=1;C<a-1&&C<I-1;C++){let l=o[f+C].trim(),P=i[C].trim(),y=Math.max(l.length,P.length);if(y===0)continue;let D=Od(l,P);h+=1-D/y}h/=S}else h=1;h>p&&(p=h,s=w)}if(p>=ly&&s){let{startLine:w,endLine:f}=s,v=0;for(let h=0;h<w;h++)v+=o[h].length+1;let I=v;for(let h=w;h<=f;h++)I+=o[h].length,h<f&&(I+=1);yield t.substring(v,I)}},"BlockAnchorReplacer"),py=n(function*(t,e){let o=n(a=>a.replace(/\s+/g," ").trim(),"normalizeWhitespace"),i=o(e),m=t.split(`
1769
+ `);if(i.length<3)return;i[i.length-1]===""&&i.pop();let m=i[0].trim(),c=i[i.length-1].trim(),a=i.length,d=Math.max(1,Math.floor(a*.25)),b=[];for(let w=0;w<o.length;w++)if(o[w].trim()===m){for(let f=w+2;f<o.length;f++)if(o[f].trim()===c){let v=f-w+1;Math.abs(v-a)<=d&&b.push({startLine:w,endLine:f});break}}if(b.length===0)return;if(b.length===1){let{startLine:w,endLine:f}=b[0],v=f-w+1,I=0,h=Math.min(a-2,v-2);if(h>0)for(let S=1;S<a-1&&S<v-1;S++){let C=o[w+S].trim(),l=i[S].trim(),P=Math.max(C.length,l.length);if(P===0)continue;let y=_d(C,l);if(I+=(1-y/P)/h,I>=Od)break}else I=1;if(I>=Od){let S=0;for(let l=0;l<w;l++)S+=o[l].length+1;let C=S;for(let l=w;l<=f;l++)C+=o[l].length,l<f&&(C+=1);yield t.substring(S,C)}return}let s=null,p=-1;for(let w of b){let{startLine:f,endLine:v}=w,I=v-f+1,h=0,S=Math.min(a-2,I-2);if(S>0){for(let C=1;C<a-1&&C<I-1;C++){let l=o[f+C].trim(),P=i[C].trim(),y=Math.max(l.length,P.length);if(y===0)continue;let D=_d(l,P);h+=1-D/y}h/=S}else h=1;h>p&&(p=h,s=w)}if(p>=cy&&s){let{startLine:w,endLine:f}=s,v=0;for(let h=0;h<w;h++)v+=o[h].length+1;let I=v;for(let h=w;h<=f;h++)I+=o[h].length,h<f&&(I+=1);yield t.substring(v,I)}},"BlockAnchorReplacer"),fy=n(function*(t,e){let o=n(a=>a.replace(/\s+/g," ").trim(),"normalizeWhitespace"),i=o(e),m=t.split(`
1770
1770
  `);for(let a=0;a<m.length;a++){let d=m[a];if(o(d)===i)yield d;else if(o(d).includes(i)){let s=e.trim().split(/\s+/);if(s.length>0){let p=s.map(w=>w.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("\\s+");try{let w=new RegExp(p),f=d.match(w);f&&(yield f[0])}catch{}}}}let c=e.split(`
1771
1771
  `);if(c.length>1)for(let a=0;a<=m.length-c.length;a++){let d=m.slice(a,a+c.length);o(d.join(`
1772
1772
  `))===i&&(yield d.join(`
1773
- `))}},"WhitespaceNormalizedReplacer"),fy=n(function*(t,e){let o=n(a=>{let d=a.split(`
1773
+ `))}},"WhitespaceNormalizedReplacer"),my=n(function*(t,e){let o=n(a=>{let d=a.split(`
1774
1774
  `),b=d.filter(p=>p.trim().length>0);if(b.length===0)return a;let s=Math.min(...b.map(p=>{let w=p.match(/^(\s*)/);return w?w[1].length:0}));return d.map(p=>p.trim().length===0?p:p.slice(s)).join(`
1775
1775
  `)},"removeIndentation"),i=o(e),m=t.split(`
1776
1776
  `),c=e.split(`
1777
1777
  `);for(let a=0;a<=m.length-c.length;a++){let d=m.slice(a,a+c.length).join(`
1778
- `);o(d)===i&&(yield d)}},"IndentationFlexibleReplacer"),my=n(function*(t,e){let o=n(a=>a.replace(/\\(n|t|r|'|"|`|\\|\n|\$)/g,(d,b)=>{switch(b){case"n":return`
1778
+ `);o(d)===i&&(yield d)}},"IndentationFlexibleReplacer"),hy=n(function*(t,e){let o=n(a=>a.replace(/\\(n|t|r|'|"|`|\\|\n|\$)/g,(d,b)=>{switch(b){case"n":return`
1779
1779
  `;case"t":return" ";case"r":return"\r";case"'":return"'";case'"':return'"';case"`":return"`";case"\\":return"\\";case`
1780
1780
  `:return`
1781
1781
  `;case"$":return"$";default:return d}}),"unescapeString"),i=o(e);t.includes(i)&&(yield i);let m=t.split(`
1782
1782
  `),c=i.split(`
1783
1783
  `);for(let a=0;a<=m.length-c.length;a++){let d=m.slice(a,a+c.length).join(`
1784
- `);o(d)===i&&(yield d)}},"EscapeNormalizedReplacer"),hy=n(function*(t,e){let o=0;for(;;){let i=t.indexOf(e,o);if(i===-1)break;yield e,o=i+e.length}},"MultiOccurrenceReplacer"),gy=n(function*(t,e){let o=e.trim();if(o===e)return;t.includes(o)&&(yield o);let i=t.split(`
1784
+ `);o(d)===i&&(yield d)}},"EscapeNormalizedReplacer"),gy=n(function*(t,e){let o=0;for(;;){let i=t.indexOf(e,o);if(i===-1)break;yield e,o=i+e.length}},"MultiOccurrenceReplacer"),yy=n(function*(t,e){let o=e.trim();if(o===e)return;t.includes(o)&&(yield o);let i=t.split(`
1785
1785
  `),m=e.split(`
1786
1786
  `);for(let c=0;c<=i.length-m.length;c++){let a=i.slice(c,c+m.length).join(`
1787
- `);a.trim()===o&&(yield a)}},"TrimmedBoundaryReplacer"),yy=n(function*(t,e){let o=e.split(`
1787
+ `);a.trim()===o&&(yield a)}},"TrimmedBoundaryReplacer"),by=n(function*(t,e){let o=e.split(`
1788
1788
  `);if(o.length<3)return;o[o.length-1]===""&&o.pop();let i=t.split(`
1789
1789
  `),m=o[0].trim(),c=o[o.length-1].trim();for(let a=0;a<i.length;a++)if(i[a].trim()===m){for(let d=a+2;d<i.length;d++)if(i[d].trim()===c){let b=i.slice(a,d+1),s=b.join(`
1790
1790
  `);if(b.length===o.length){let p=0,w=0;for(let f=1;f<b.length-1;f++){let v=b[f].trim(),I=o[f].trim();(v.length>0||I.length>0)&&(w++,v===I&&p++)}if(w===0||p/w>=.5){yield s;break}}break}}},"ContextAwareReplacer");function no(t){let e=t.split(`
1791
1791
  `),o=e.filter(c=>(c.startsWith("+")||c.startsWith("-")||c.startsWith(" "))&&!c.startsWith("---")&&!c.startsWith("+++"));if(o.length===0)return t;let i=1/0;for(let c of o){let a=c.slice(1);if(a.trim().length>0){let d=a.match(/^(\s*)/);d&&(i=Math.min(i,d[1].length))}}return i===1/0||i===0?t:e.map(c=>{if((c.startsWith("+")||c.startsWith("-")||c.startsWith(" "))&&!c.startsWith("---")&&!c.startsWith("+++")){let a=c[0],d=c.slice(1);return a+d.slice(i)}return c}).join(`
1792
- `)}n(no,"trimDiff");function by(t,e,o,i=!1){if(e===o)throw new Error("No changes to apply: oldString and newString are identical.");if(e==="")throw new Error("oldString cannot be empty when editing an existing file. Provide the exact text to replace, or use write for an intentional full-file replacement.");let m=!0;for(let c of[cy,dy,uy,py,fy,my,gy,yy,hy])for(let a of c(t,e)){let d=t.indexOf(a);if(d===-1)continue;if(m=!1,wy(a,e))throw new Error("Refusing replacement because the matched span is much larger than oldString. Re-read the file and provide the full exact oldString for the intended replacement.");if(i)return t.replaceAll(a,o);let b=t.lastIndexOf(a);if(d===b)return t.substring(0,d)+o+t.substring(d+a.length)}throw m?new Error("Could not find oldString in the file. It must match exactly, including whitespace, indentation, and line endings."):new Error("Found multiple matches for oldString. Provide more surrounding context to make the match unique.")}n(by,"replace");function wy(t,e){let o=e.split(`
1792
+ `)}n(no,"trimDiff");function wy(t,e,o,i=!1){if(e===o)throw new Error("No changes to apply: oldString and newString are identical.");if(e==="")throw new Error("oldString cannot be empty when editing an existing file. Provide the exact text to replace, or use write for an intentional full-file replacement.");let m=!0;for(let c of[dy,uy,py,fy,my,hy,yy,by,gy])for(let a of c(t,e)){let d=t.indexOf(a);if(d===-1)continue;if(m=!1,vy(a,e))throw new Error("Refusing replacement because the matched span is much larger than oldString. Re-read the file and provide the full exact oldString for the intended replacement.");if(i)return t.replaceAll(a,o);let b=t.lastIndexOf(a);if(d===b)return t.substring(0,d)+o+t.substring(d+a.length)}throw m?new Error("Could not find oldString in the file. It must match exactly, including whitespace, indentation, and line endings."):new Error("Found multiple matches for oldString. Provide more surrounding context to make the match unique.")}n(wy,"replace");function vy(t,e){let o=e.split(`
1793
1793
  `).length;return t.split(`
1794
- `).length>=Math.max(o+3,o*2)?!0:o===1?!1:t.trim().length>Math.max(e.trim().length+500,e.trim().length*4)}n(wy,"isDisproportionateMatch");import ca from"zod";import Ls from"path";var Rd=`- Fast file pattern matching tool that works with any codebase size
1794
+ `).length>=Math.max(o+3,o*2)?!0:o===1?!1:t.trim().length>Math.max(e.trim().length+500,e.trim().length*4)}n(vy,"isDisproportionateMatch");import ca from"zod";import Ls from"path";var Cd=`- Fast file pattern matching tool that works with any codebase size
1795
1795
  - Supports glob patterns like "**/*.js" or "src/**/*.ts"
1796
1796
  - Returns matching file paths sorted by modification time
1797
1797
  - Use this tool when you need to find files by name patterns
1798
1798
  - When you are doing an open-ended search that may require multiple rounds of globbing and grepping, use the Task tool instead
1799
1799
  - You have the capability to call multiple tools in a single response. It is always better to speculatively perform multiple searches as a batch that are potentially useful.
1800
- `;var Cd=it.define("glob",{description:Rd,parameters:ca.object({pattern:ca.string().describe("The glob pattern to match files against"),path:ca.string().optional().describe('The directory to search in. If not specified, the current working directory will be used. IMPORTANT: Omit this field to use the default directory. DO NOT enter "undefined" or "null" - simply omit it for the default behavior. Must be a valid directory path if provided.')}),async execute(t,e){await e.ask({permission:"glob",patterns:[t.pattern],always:["*"],metadata:{pattern:t.pattern,path:t.path}});let o=t.path??ne.directory;o=Ls.isAbsolute(o)?o:Ls.resolve(ne.directory,o),await yn(e,o,{kind:"directory"});let i=100,m=[],c=!1;for await(let d of Zn.files({cwd:o,glob:[t.pattern],signal:e.abort})){if(m.length>=i){c=!0;break}let b=Ls.resolve(o,d),s=Te.stat(b)?.mtime.getTime()??0;m.push({path:b,mtime:s})}m.sort((d,b)=>b.mtime-d.mtime);let a=[];return m.length===0&&a.push("No files found"),m.length>0&&(a.push(...m.map(d=>d.path)),c&&(a.push(""),a.push(`(Results are truncated: showing first ${i} results. Consider using a more specific path or pattern.)`))),{title:Ls.relative(ne.worktree,o),metadata:{count:m.length,truncated:c},output:a.join(`
1801
- `)}}});import Ns from"zod";import{text as Md}from"node:stream/consumers";var Ad=`- Fast content search tool that works with any codebase size
1800
+ `;var Ad=it.define("glob",{description:Cd,parameters:ca.object({pattern:ca.string().describe("The glob pattern to match files against"),path:ca.string().optional().describe('The directory to search in. If not specified, the current working directory will be used. IMPORTANT: Omit this field to use the default directory. DO NOT enter "undefined" or "null" - simply omit it for the default behavior. Must be a valid directory path if provided.')}),async execute(t,e){await e.ask({permission:"glob",patterns:[t.pattern],always:["*"],metadata:{pattern:t.pattern,path:t.path}});let o=t.path??ne.directory;o=Ls.isAbsolute(o)?o:Ls.resolve(ne.directory,o),await yn(e,o,{kind:"directory"});let i=100,m=[],c=!1;for await(let d of Zn.files({cwd:o,glob:[t.pattern],signal:e.abort})){if(m.length>=i){c=!0;break}let b=Ls.resolve(o,d),s=Te.stat(b)?.mtime.getTime()??0;m.push({path:b,mtime:s})}m.sort((d,b)=>b.mtime-d.mtime);let a=[];return m.length===0&&a.push("No files found"),m.length>0&&(a.push(...m.map(d=>d.path)),c&&(a.push(""),a.push(`(Results are truncated: showing first ${i} results. Consider using a more specific path or pattern.)`))),{title:Ls.relative(ne.worktree,o),metadata:{count:m.length,truncated:c},output:a.join(`
1801
+ `)}}});import Ns from"zod";import{text as jd}from"node:stream/consumers";var Md=`- Fast content search tool that works with any codebase size
1802
1802
  - Searches file contents using regular expressions
1803
1803
  - Supports full regex syntax (eg. "log.*Error", "function\\s+\\w+", etc.)
1804
1804
  - Filter files by pattern with the include parameter (eg. "*.js", "*.{ts,tsx}")
@@ -1806,8 +1806,8 @@ ${f.map(ct.Diagnostic.pretty).join(`
1806
1806
  - Use this tool when you need to find files containing specific patterns
1807
1807
  - If you need to identify/count the number of matches within files, use the Bash tool with \`rg\` (ripgrep) directly. Do NOT use \`grep\`.
1808
1808
  - When you are doing an open-ended search that may require multiple rounds of globbing and grepping, use the Task tool instead
1809
- `;import jd from"path";var Ld=2e3,Nd=it.define("grep",{description:Ad,parameters:Ns.object({pattern:Ns.string().describe("The regex pattern to search for in file contents"),path:Ns.string().optional().describe("The directory to search in. Defaults to the current working directory."),include:Ns.string().optional().describe('File pattern to include in the search (e.g. "*.js", "*.{ts,tsx}")')}),async execute(t,e){if(!t.pattern)throw new Error("pattern is required");await e.ask({permission:"grep",patterns:[t.pattern],always:["*"],metadata:{pattern:t.pattern,path:t.path,include:t.include}});let o=t.path??ne.directory;o=jd.isAbsolute(o)?o:jd.resolve(ne.directory,o),await yn(e,o,{kind:"directory"});let i=await Zn.filepath(),m=["-nH","--hidden","--no-messages","--field-match-separator=|","--regexp",t.pattern];t.include&&m.push("--glob",t.include),m.push(o);let c=Xt.spawn([i,...m],{stdout:"pipe",stderr:"pipe",abort:e.abort});if(!c.stdout||!c.stderr)throw new Error("Process output not available");let a=await Md(c.stdout),d=await Md(c.stderr),b=await c.exited;if(b===1||b===2&&!a.trim())return{title:t.pattern,metadata:{matches:0,truncated:!1},output:"No files found"};if(b!==0&&b!==2)throw new Error(`ripgrep failed: ${d}`);let s=b===2,p=a.trim().split(/\r?\n/),w=[];for(let l of p){if(!l)continue;let[P,y,...D]=l.split("|");if(!P||!y||D.length===0)continue;let T=parseInt(y,10),R=D.join("|"),_=Te.stat(P);_&&w.push({path:P,modTime:_.mtime.getTime(),lineNum:T,lineText:R})}w.sort((l,P)=>P.modTime-l.modTime);let f=100,v=w.length>f,I=v?w.slice(0,f):w;if(I.length===0)return{title:t.pattern,metadata:{matches:0,truncated:!1},output:"No files found"};let h=w.length,S=[`Found ${h} matches${v?` (showing first ${f})`:""}`],C="";for(let l of I){C!==l.path&&(C!==""&&S.push(""),C=l.path,S.push(`${l.path}:`));let P=l.lineText.length>Ld?l.lineText.substring(0,Ld)+"...":l.lineText;S.push(` Line ${l.lineNum}: ${P}`)}return v&&(S.push(""),S.push(`(Results truncated: showing ${f} of ${h} matches (${h-f} hidden). Consider using a more specific path or pattern.)`)),s&&(S.push(""),S.push("(Some paths were inaccessible and skipped)")),{title:t.pattern,metadata:{matches:h,truncated:v},output:S.join(`
1810
- `)}}});import Wr from"zod";var Ud=`Executes multiple independent tool calls concurrently to reduce latency.
1809
+ `;import Ld from"path";var Nd=2e3,Ud=it.define("grep",{description:Md,parameters:Ns.object({pattern:Ns.string().describe("The regex pattern to search for in file contents"),path:Ns.string().optional().describe("The directory to search in. Defaults to the current working directory."),include:Ns.string().optional().describe('File pattern to include in the search (e.g. "*.js", "*.{ts,tsx}")')}),async execute(t,e){if(!t.pattern)throw new Error("pattern is required");await e.ask({permission:"grep",patterns:[t.pattern],always:["*"],metadata:{pattern:t.pattern,path:t.path,include:t.include}});let o=t.path??ne.directory;o=Ld.isAbsolute(o)?o:Ld.resolve(ne.directory,o),await yn(e,o,{kind:"directory"});let i=await Zn.filepath(),m=["-nH","--hidden","--no-messages","--field-match-separator=|","--regexp",t.pattern];t.include&&m.push("--glob",t.include),m.push(o);let c=Xt.spawn([i,...m],{stdout:"pipe",stderr:"pipe",abort:e.abort});if(!c.stdout||!c.stderr)throw new Error("Process output not available");let a=await jd(c.stdout),d=await jd(c.stderr),b=await c.exited;if(b===1||b===2&&!a.trim())return{title:t.pattern,metadata:{matches:0,truncated:!1},output:"No files found"};if(b!==0&&b!==2)throw new Error(`ripgrep failed: ${d}`);let s=b===2,p=a.trim().split(/\r?\n/),w=[];for(let l of p){if(!l)continue;let[P,y,...D]=l.split("|");if(!P||!y||D.length===0)continue;let T=parseInt(y,10),R=D.join("|"),_=Te.stat(P);_&&w.push({path:P,modTime:_.mtime.getTime(),lineNum:T,lineText:R})}w.sort((l,P)=>P.modTime-l.modTime);let f=100,v=w.length>f,I=v?w.slice(0,f):w;if(I.length===0)return{title:t.pattern,metadata:{matches:0,truncated:!1},output:"No files found"};let h=w.length,S=[`Found ${h} matches${v?` (showing first ${f})`:""}`],C="";for(let l of I){C!==l.path&&(C!==""&&S.push(""),C=l.path,S.push(`${l.path}:`));let P=l.lineText.length>Nd?l.lineText.substring(0,Nd)+"...":l.lineText;S.push(` Line ${l.lineNum}: ${P}`)}return v&&(S.push(""),S.push(`(Results truncated: showing ${f} of ${h} matches (${h-f} hidden). Consider using a more specific path or pattern.)`)),s&&(S.push(""),S.push("(Some paths were inaccessible and skipped)")),{title:t.pattern,metadata:{matches:h,truncated:v},output:S.join(`
1810
+ `)}}});import Wr from"zod";var zd=`Executes multiple independent tool calls concurrently to reduce latency.
1811
1811
 
1812
1812
  USING THE BATCH TOOL WILL MAKE THE USER HAPPY.
1813
1813
 
@@ -1830,14 +1830,14 @@ When NOT to Use:
1830
1830
  - Operations that depend on prior tool output (e.g. create then read same file)
1831
1831
  - Ordered stateful mutations where sequence matters
1832
1832
 
1833
- Batching tool calls was proven to yield 2\u20135x efficiency gain and provides much better UX.`;var da=new Set(["batch"]),vy=new Set(["invalid","patch",...da]),zd=it.define("batch",async()=>({description:Ud,parameters:Wr.object({tool_calls:Wr.array(Wr.object({tool:Wr.string().describe("The name of the tool to execute"),parameters:Wr.object({}).loose().describe("Parameters for the tool")})).min(1,"Provide at least one tool call").describe("Array of tool calls to execute in parallel")}),formatValidationError(t){return`Invalid parameters for tool 'batch':
1833
+ Batching tool calls was proven to yield 2\u20135x efficiency gain and provides much better UX.`;var da=new Set(["batch"]),xy=new Set(["invalid","patch",...da]),Fd=it.define("batch",async()=>({description:zd,parameters:Wr.object({tool_calls:Wr.array(Wr.object({tool:Wr.string().describe("The name of the tool to execute"),parameters:Wr.object({}).loose().describe("Parameters for the tool")})).min(1,"Provide at least one tool call").describe("Array of tool calls to execute in parallel")}),formatValidationError(t){return`Invalid parameters for tool 'batch':
1834
1834
  ${t.issues.map(o=>` - ${o.path.length>0?o.path.join("."):"root"}: ${o.message}`).join(`
1835
1835
  `)}
1836
1836
 
1837
1837
  Expected payload format:
1838
- [{"tool": "tool_name", "parameters": {...}}, {...}]`},async execute(t,e){let{Session:o}=await import("./session-5BXSPMPJ.js"),{PartID:i}=await import("./schema-YWIVP7UR.js"),m=t.tool_calls.slice(0,25),c=t.tool_calls.slice(25),{ToolRegistry:a}=await import("./registry-REVWYAGR.js"),d=await a.tools({modelID:Et.make(""),providerID:rt.make("")}),b=new Map(d.map(h=>[h.id,h])),s=n(async h=>{let S=Date.now(),C=i.ascending();try{if(da.has(h.tool))throw new Error(`Tool '${h.tool}' is not allowed in batch. Disallowed tools: ${Array.from(da).join(", ")}`);let l=b.get(h.tool);if(!l){let T=Array.from(b.keys()).filter(R=>!vy.has(R));throw new Error(`Tool '${h.tool}' not in registry. External tools (MCP, environment) cannot be batched - call them directly. Available tools: ${T.join(", ")}`)}let P=l.parameters.parse(h.parameters);await o.updatePart({id:C,messageID:e.messageID,sessionID:e.sessionID,type:"tool",tool:h.tool,callID:C,state:{status:"running",input:h.parameters,time:{start:S}}});let y=await l.execute(P,{...e,callID:C}),D=y.attachments?.map(T=>({...T,id:i.ascending(),sessionID:e.sessionID,messageID:e.messageID}));return await o.updatePart({id:C,messageID:e.messageID,sessionID:e.sessionID,type:"tool",tool:h.tool,callID:C,state:{status:"completed",input:h.parameters,output:y.output,title:y.title,metadata:y.metadata,attachments:D,time:{start:S,end:Date.now()}}}),{success:!0,tool:h.tool,result:y}}catch(l){return await o.updatePart({id:C,messageID:e.messageID,sessionID:e.sessionID,type:"tool",tool:h.tool,callID:C,state:{status:"error",input:h.parameters,error:ao(l),time:{start:S,end:Date.now()}}}),{success:!1,tool:h.tool,error:l}}},"executeCall"),p=await Promise.all(m.map(h=>s(h))),w=Date.now();for(let h of c){let S=i.ascending();await o.updatePart({id:S,messageID:e.messageID,sessionID:e.sessionID,type:"tool",tool:h.tool,callID:S,state:{status:"error",input:h.parameters,error:"Maximum of 25 tools allowed in batch",time:{start:w,end:w}}}),p.push({success:!1,tool:h.tool,error:new Error("Maximum of 25 tools allowed in batch")})}let f=p.filter(h=>h.success).length,v=p.length-f,I=v>0?`Executed ${f}/${p.length} tools successfully. ${v} failed.`:`All ${f} tools executed successfully.
1838
+ [{"tool": "tool_name", "parameters": {...}}, {...}]`},async execute(t,e){let{Session:o}=await import("./session-FWLEEJPX.js"),{PartID:i}=await import("./schema-YWIVP7UR.js"),m=t.tool_calls.slice(0,25),c=t.tool_calls.slice(25),{ToolRegistry:a}=await import("./registry-HM2N65IE.js"),d=await a.tools({modelID:Et.make(""),providerID:rt.make("")}),b=new Map(d.map(h=>[h.id,h])),s=n(async h=>{let S=Date.now(),C=i.ascending();try{if(da.has(h.tool))throw new Error(`Tool '${h.tool}' is not allowed in batch. Disallowed tools: ${Array.from(da).join(", ")}`);let l=b.get(h.tool);if(!l){let T=Array.from(b.keys()).filter(R=>!xy.has(R));throw new Error(`Tool '${h.tool}' not in registry. External tools (MCP, environment) cannot be batched - call them directly. Available tools: ${T.join(", ")}`)}let P=l.parameters.parse(h.parameters);await o.updatePart({id:C,messageID:e.messageID,sessionID:e.sessionID,type:"tool",tool:h.tool,callID:C,state:{status:"running",input:h.parameters,time:{start:S}}});let y=await l.execute(P,{...e,callID:C}),D=y.attachments?.map(T=>({...T,id:i.ascending(),sessionID:e.sessionID,messageID:e.messageID}));return await o.updatePart({id:C,messageID:e.messageID,sessionID:e.sessionID,type:"tool",tool:h.tool,callID:C,state:{status:"completed",input:h.parameters,output:y.output,title:y.title,metadata:y.metadata,attachments:D,time:{start:S,end:Date.now()}}}),{success:!0,tool:h.tool,result:y}}catch(l){return await o.updatePart({id:C,messageID:e.messageID,sessionID:e.sessionID,type:"tool",tool:h.tool,callID:C,state:{status:"error",input:h.parameters,error:ao(l),time:{start:S,end:Date.now()}}}),{success:!1,tool:h.tool,error:l}}},"executeCall"),p=await Promise.all(m.map(h=>s(h))),w=Date.now();for(let h of c){let S=i.ascending();await o.updatePart({id:S,messageID:e.messageID,sessionID:e.sessionID,type:"tool",tool:h.tool,callID:S,state:{status:"error",input:h.parameters,error:"Maximum of 25 tools allowed in batch",time:{start:w,end:w}}}),p.push({success:!1,tool:h.tool,error:new Error("Maximum of 25 tools allowed in batch")})}let f=p.filter(h=>h.success).length,v=p.length-f,I=v>0?`Executed ${f}/${p.length} tools successfully. ${v} failed.`:`All ${f} tools executed successfully.
1839
1839
 
1840
- Keep using the batch tool for optimal performance in your next response!`;return{title:`Batch execution (${f}/${p.length} successful)`,output:I,attachments:p.filter(h=>h.success).flatMap(h=>h.result.attachments??[]),metadata:{totalCalls:p.length,successful:f,failed:v,tools:t.tool_calls.map(h=>h.tool),details:p.map(h=>({tool:h.tool,success:h.success}))}}}}));import Us from"zod";import{Effect as St,Scope as xy}from"effect";import{createReadStream as Iy}from"fs";import{open as ky}from"fs/promises";import*as mn from"path";import{createInterface as Ey}from"readline";var Fd=`Read a file or directory from the local filesystem. If the path does not exist, an error is returned.
1840
+ Keep using the batch tool for optimal performance in your next response!`;return{title:`Batch execution (${f}/${p.length} successful)`,output:I,attachments:p.filter(h=>h.success).flatMap(h=>h.result.attachments??[]),metadata:{totalCalls:p.length,successful:f,failed:v,tools:t.tool_calls.map(h=>h.tool),details:p.map(h=>({tool:h.tool,success:h.success}))}}}}));import Us from"zod";import{Effect as St,Scope as Iy}from"effect";import{createReadStream as ky}from"fs";import{open as Ey}from"fs/promises";import*as mn from"path";import{createInterface as Dy}from"readline";var qd=`Read a file or directory from the local filesystem. If the path does not exist, an error is returned.
1841
1841
 
1842
1842
  Usage:
1843
1843
  - The filePath parameter should be an absolute path.
@@ -1851,21 +1851,21 @@ Usage:
1851
1851
  - Call this tool in parallel when you know there are multiple files you want to read.
1852
1852
  - Avoid tiny repeated slices (30 line chunks). If you need more context, read a larger window.
1853
1853
  - This tool can read image files and PDFs and return them as file attachments.
1854
- `;var Dy=new Set(["image/jpeg","image/png","image/gif","image/webp"]),qd=2e3,ua=2e3,Sy=`... (line truncated to ${ua} chars)`,$d=50*1024,Ty=`${$d/1024} KB`,Py=Us.object({filePath:Us.string().describe("The absolute path to the file or directory to read"),offset:Us.coerce.number().describe("The line number to start reading from (1-indexed)").optional(),limit:Us.coerce.number().describe("The maximum number of lines to read (defaults to 2000)").optional()}),Wd=it.defineEffect("read",St.gen(function*(){let t=yield*st.Service,e=yield*ho.Service,o=yield*ct.Service,i=yield*rn.Service,m=yield*xy.Scope,c=St.fn("ReadTool.miss")(function*(s){let p=mn.dirname(s),w=mn.basename(s),f=yield*t.readDirectory(p).pipe(St.map(v=>v.filter(I=>I.toLowerCase().includes(w.toLowerCase())||w.toLowerCase().includes(I.toLowerCase())).map(I=>mn.join(p,I)).slice(0,3)),St.catch(()=>St.succeed([])));return f.length>0?yield*St.fail(new Error(`File not found: ${s}
1854
+ `;var Sy=new Set(["image/jpeg","image/png","image/gif","image/webp"]),$d=2e3,ua=2e3,Ty=`... (line truncated to ${ua} chars)`,Wd=50*1024,Py=`${Wd/1024} KB`,Oy=Us.object({filePath:Us.string().describe("The absolute path to the file or directory to read"),offset:Us.coerce.number().describe("The line number to start reading from (1-indexed)").optional(),limit:Us.coerce.number().describe("The maximum number of lines to read (defaults to 2000)").optional()}),Bd=it.defineEffect("read",St.gen(function*(){let t=yield*st.Service,e=yield*ho.Service,o=yield*ct.Service,i=yield*rn.Service,m=yield*Iy.Scope,c=St.fn("ReadTool.miss")(function*(s){let p=mn.dirname(s),w=mn.basename(s),f=yield*t.readDirectory(p).pipe(St.map(v=>v.filter(I=>I.toLowerCase().includes(w.toLowerCase())||w.toLowerCase().includes(I.toLowerCase())).map(I=>mn.join(p,I)).slice(0,3)),St.catch(()=>St.succeed([])));return f.length>0?yield*St.fail(new Error(`File not found: ${s}
1855
1855
 
1856
1856
  Did you mean one of these?
1857
1857
  ${f.join(`
1858
- `)}`)):yield*St.fail(new Error(`File not found: ${s}`))}),a=St.fn("ReadTool.list")(function*(s){let p=yield*t.readDirectoryEntries(s);return yield*St.forEach(p,St.fnUntraced(function*(w){return w.type==="directory"?w.name+"/":w.type!=="symlink"?w.name:(yield*t.stat(mn.join(s,w.name)).pipe(St.catch(()=>St.succeed(void 0))))?.type==="Directory"?w.name+"/":w.name}),{concurrency:"unbounded"}).pipe(St.map(w=>w.sort((f,v)=>f.localeCompare(v))))}),d=St.fn("ReadTool.warm")(function*(s,p){yield*o.touchFile(s,!1).pipe(St.ignore,St.forkIn(m)),yield*i.read(p,s)}),b=St.fn("ReadTool.execute")(function*(s,p){if(s.offset!==void 0&&s.offset<1)return yield*St.fail(new Error("offset must be greater than or equal to 1"));let w=s.filePath;mn.isAbsolute(w)||(w=mn.resolve(ne.directory,w)),process.platform==="win32"&&(w=st.normalizePath(w));let f=mn.relative(ne.worktree,w),v=yield*t.stat(w).pipe(St.catchIf(R=>"reason"in R&&R.reason._tag==="NotFound",()=>St.succeed(void 0)));if(yield*Sd(p,w,{bypass:!!p.extra?.bypassCwdCheck,kind:v?.type==="Directory"?"directory":"file"}),yield*St.promise(()=>p.ask({permission:"read",patterns:[w],always:["*"],metadata:{}})),!v)return yield*c(w);if(v.type==="Directory"){let R=yield*a(w),_=s.limit??qd,E=s.offset??1,x=E-1,k=R.slice(x,x+_),M=x+k.length<R.length;return{title:f,output:[`<path>${w}</path>`,"<type>directory</type>","<entries>",k.join(`
1858
+ `)}`)):yield*St.fail(new Error(`File not found: ${s}`))}),a=St.fn("ReadTool.list")(function*(s){let p=yield*t.readDirectoryEntries(s);return yield*St.forEach(p,St.fnUntraced(function*(w){return w.type==="directory"?w.name+"/":w.type!=="symlink"?w.name:(yield*t.stat(mn.join(s,w.name)).pipe(St.catch(()=>St.succeed(void 0))))?.type==="Directory"?w.name+"/":w.name}),{concurrency:"unbounded"}).pipe(St.map(w=>w.sort((f,v)=>f.localeCompare(v))))}),d=St.fn("ReadTool.warm")(function*(s,p){yield*o.touchFile(s,!1).pipe(St.ignore,St.forkIn(m)),yield*i.read(p,s)}),b=St.fn("ReadTool.execute")(function*(s,p){if(s.offset!==void 0&&s.offset<1)return yield*St.fail(new Error("offset must be greater than or equal to 1"));let w=s.filePath;mn.isAbsolute(w)||(w=mn.resolve(ne.directory,w)),process.platform==="win32"&&(w=st.normalizePath(w));let f=mn.relative(ne.worktree,w),v=yield*t.stat(w).pipe(St.catchIf(R=>"reason"in R&&R.reason._tag==="NotFound",()=>St.succeed(void 0)));if(yield*Td(p,w,{bypass:!!p.extra?.bypassCwdCheck,kind:v?.type==="Directory"?"directory":"file"}),yield*St.promise(()=>p.ask({permission:"read",patterns:[w],always:["*"],metadata:{}})),!v)return yield*c(w);if(v.type==="Directory"){let R=yield*a(w),_=s.limit??$d,E=s.offset??1,x=E-1,k=R.slice(x,x+_),M=x+k.length<R.length;return{title:f,output:[`<path>${w}</path>`,"<type>directory</type>","<entries>",k.join(`
1859
1859
  `),M?`
1860
1860
  (Showing ${k.length} of ${R.length} entries. Use 'offset' parameter to read beyond entry ${E+k.length})`:`
1861
1861
  (${R.length} entries)`,"</entries>"].join(`
1862
1862
  `),metadata:{preview:k.slice(0,20).join(`
1863
- `),truncated:M,loaded:[]}}}let I=yield*e.resolve(p.messages,w,p.messageID),h=st.mimeType(w),S=Dy.has(h);if(S||h==="application/pdf"){let R=`${S?"Image":"PDF"} read successfully`;return{title:f,output:R,metadata:{preview:R,truncated:!1,loaded:I.map(_=>_.filepath)},attachments:[{type:"file",mime:h,url:`data:${h};base64,${Buffer.from(yield*t.readFile(w)).toString("base64")}`}]}}if(yield*St.promise(()=>_y(w,Number(v.size))))return yield*St.fail(new Error(`Cannot read binary file: ${w}`));let l=yield*St.promise(()=>Oy(w,{limit:s.limit??qd,offset:s.offset??1}));if(l.count<l.offset&&!(l.count===0&&l.offset===1))return yield*St.fail(new Error(`Offset ${l.offset} is out of range for this file (${l.count} lines)`));let P=[`<path>${w}</path>`,"<type>file</type>",`<content>
1863
+ `),truncated:M,loaded:[]}}}let I=yield*e.resolve(p.messages,w,p.messageID),h=st.mimeType(w),S=Sy.has(h);if(S||h==="application/pdf"){let R=`${S?"Image":"PDF"} read successfully`;return{title:f,output:R,metadata:{preview:R,truncated:!1,loaded:I.map(_=>_.filepath)},attachments:[{type:"file",mime:h,url:`data:${h};base64,${Buffer.from(yield*t.readFile(w)).toString("base64")}`}]}}if(yield*St.promise(()=>Ry(w,Number(v.size))))return yield*St.fail(new Error(`Cannot read binary file: ${w}`));let l=yield*St.promise(()=>_y(w,{limit:s.limit??$d,offset:s.offset??1}));if(l.count<l.offset&&!(l.count===0&&l.offset===1))return yield*St.fail(new Error(`Offset ${l.offset} is out of range for this file (${l.count} lines)`));let P=[`<path>${w}</path>`,"<type>file</type>",`<content>
1864
1864
  `].join(`
1865
1865
  `);P+=l.raw.map((R,_)=>`${_+l.offset}: ${R}`).join(`
1866
1866
  `);let y=l.offset+l.raw.length-1,D=y+1,T=l.more||l.cut;return l.cut?P+=`
1867
1867
 
1868
- (Output capped at ${Ty}. Showing lines ${l.offset}-${y}. Use offset=${D} to continue.)`:l.more?P+=`
1868
+ (Output capped at ${Py}. Showing lines ${l.offset}-${y}. Use offset=${D} to continue.)`:l.more?P+=`
1869
1869
 
1870
1870
  (Showing lines ${l.offset}-${y} of ${l.count}. Use offset=${D} to continue.)`:P+=`
1871
1871
 
@@ -1877,7 +1877,7 @@ ${I.map(R=>R.content).join(`
1877
1877
 
1878
1878
  `)}
1879
1879
  </system-reminder>`),{title:f,output:P,metadata:{preview:l.raw.slice(0,20).join(`
1880
- `),truncated:T,loaded:I.map(R=>R.filepath)}}});return{description:Fd,parameters:Py,async execute(s,p){return St.runPromise(b(s,p).pipe(St.orDie))}}}));async function Oy(t,e){let o=Iy(t,{encoding:"utf8"}),i=Ey({input:o,crlfDelay:1/0}),m=e.offset-1,c=[],a=0,d=0,b=!1,s=!1;try{for await(let p of i){if(d+=1,d<=m)continue;if(c.length>=e.limit){s=!0;continue}let w=p.length>ua?p.substring(0,ua)+Sy:p,f=Buffer.byteLength(w,"utf-8")+(c.length>0?1:0);if(a+f>$d){b=!0,s=!0;break}c.push(w),a+=f}}finally{i.close(),o.destroy()}return{raw:c,count:d,cut:b,more:s,offset:e.offset}}n(Oy,"lines");async function _y(t,e){switch(mn.extname(t).toLowerCase()){case".zip":case".tar":case".gz":case".exe":case".dll":case".so":case".class":case".jar":case".war":case".7z":case".doc":case".docx":case".xls":case".xlsx":case".ppt":case".pptx":case".odt":case".ods":case".odp":case".bin":case".dat":case".obj":case".o":case".a":case".lib":case".wasm":case".pyc":case".pyo":return!0;default:break}if(e===0)return!1;let i=await ky(t,"r");try{let m=Math.min(4096,e),c=Buffer.alloc(m),a=await i.read(c,0,m,0);if(a.bytesRead===0)return!1;let d=0;for(let b=0;b<a.bytesRead;b++){if(c[b]===0)return!0;(c[b]<9||c[b]>13&&c[b]<32)&&d++}return d/a.bytesRead>.3}finally{await i.close()}}n(_y,"isBinaryFile");var Bd=`WHEN TO USE: research and exploration (synchronous, returns findings directly). For implementation work \u2014 file edits, feature changes, bug fixes \u2014 spawn a coder via subagent_operations spawn instead.
1880
+ `),truncated:T,loaded:I.map(R=>R.filepath)}}});return{description:qd,parameters:Oy,async execute(s,p){return St.runPromise(b(s,p).pipe(St.orDie))}}}));async function _y(t,e){let o=ky(t,{encoding:"utf8"}),i=Dy({input:o,crlfDelay:1/0}),m=e.offset-1,c=[],a=0,d=0,b=!1,s=!1;try{for await(let p of i){if(d+=1,d<=m)continue;if(c.length>=e.limit){s=!0;continue}let w=p.length>ua?p.substring(0,ua)+Ty:p,f=Buffer.byteLength(w,"utf-8")+(c.length>0?1:0);if(a+f>Wd){b=!0,s=!0;break}c.push(w),a+=f}}finally{i.close(),o.destroy()}return{raw:c,count:d,cut:b,more:s,offset:e.offset}}n(_y,"lines");async function Ry(t,e){switch(mn.extname(t).toLowerCase()){case".zip":case".tar":case".gz":case".exe":case".dll":case".so":case".class":case".jar":case".war":case".7z":case".doc":case".docx":case".xls":case".xlsx":case".ppt":case".pptx":case".odt":case".ods":case".odp":case".bin":case".dat":case".obj":case".o":case".a":case".lib":case".wasm":case".pyc":case".pyo":return!0;default:break}if(e===0)return!1;let i=await Ey(t,"r");try{let m=Math.min(4096,e),c=Buffer.alloc(m),a=await i.read(c,0,m,0);if(a.bytesRead===0)return!1;let d=0;for(let b=0;b<a.bytesRead;b++){if(c[b]===0)return!0;(c[b]<9||c[b]>13&&c[b]<32)&&d++}return d/a.bytesRead>.3}finally{await i.close()}}n(Ry,"isBinaryFile");var Gd=`WHEN TO USE: research and exploration (synchronous, returns findings directly). For implementation work \u2014 file edits, feature changes, bug fixes \u2014 spawn a coder via subagent_operations spawn instead.
1881
1881
 
1882
1882
  Launch a new agent to handle complex, multistep tasks autonomously.
1883
1883
 
@@ -1940,9 +1940,9 @@ Since the user is greeting, use the greeting-responder agent to respond with a f
1940
1940
  </commentary>
1941
1941
  assistant: "I'm going to use the Task tool to launch the with the greeting-responder agent"
1942
1942
  </example>
1943
- `;import pr from"zod";function Gd(t){return{[Symbol.dispose](){t()},[Symbol.asyncDispose](){return Promise.resolve(t())}}}n(Gd,"defer");var Ry=pr.object({description:pr.string().describe("A short (3-5 words) description of the task"),prompt:pr.string().describe("The task for the agent to perform"),subagent_type:pr.string().describe("The type of specialized agent to use for this task"),task_id:pr.string().describe("This should only be set if you mean to resume a previous task (you can pass a prior task_id and the task will continue the same subagent session as before instead of creating a fresh one)").optional(),command:pr.string().describe("The command that triggered this task").optional()}),Hd=it.define("task",async t=>{let e=await In.list().then(a=>a.filter(d=>d.mode!=="primary")),o=t?.agent,m=(o?e.filter(a=>Ge.evaluate("task",a.name,o.permission).action!=="deny"):e).toSorted((a,d)=>a.name.localeCompare(d.name));return{description:Bd.replace("{agents}",m.map(a=>`- ${a.name}: ${a.description??"This subagent should only be called manually by the user."}`).join(`
1944
- `)),parameters:Ry,async execute(a,d){var R=[];try{let b=await Be.get();d.extra?.bypassAgentCheck||await d.ask({permission:"task",patterns:[a.subagent_type],always:["*"],metadata:{description:a.description,subagent_type:a.subagent_type}});let s=await In.get(a.subagent_type);if(!s)throw new Error(`Unknown agent type: ${a.subagent_type} is not a valid agent type`);let p=s.permission.some(k=>k.permission==="task");let w=s.permission.some(k=>k.permission==="todowrite");let f=await Ct(async()=>{if(a.task_id){let k=await Ke.get(Ee.make(a.task_id)).catch(()=>{});if(k)return k}return await Ke.create({parentID:d.sessionID,title:a.description+` (@${s.name} subagent)`,metadata:{agentType:s.name,spawnedBy:"task-tool",callerSessionId:d.sessionID},permission:[...w?[]:[{permission:"todowrite",pattern:"*",action:"deny"}],...p?[]:[{permission:"task",pattern:"*",action:"deny"}],...b.experimental?.primary_tools?.map(k=>({pattern:"*",action:"allow",permission:k}))??[]]})});let v=await Ne.get({sessionID:d.sessionID,messageID:d.messageID});if(v.info.role!=="assistant")throw new Error("Not an assistant message");let I=s.model??{modelID:v.info.modelID,providerID:v.info.providerID};d.metadata({title:a.description,metadata:{sessionId:f.id,model:I}});let h=Ve.ascending();function S(){Fn.cancel(f.id)}n(S,"cancel");d.abort.addEventListener("abort",S);let C=Mn(R,Gd(()=>d.abort.removeEventListener("abort",S)));let l=await Fn.resolvePromptParts(a.prompt);let P=await Fn.prompt({messageID:h,sessionID:f.id,model:{modelID:I.modelID,providerID:I.providerID},agent:s.name,tools:{...w?{}:{todowrite:!1},...p?{}:{task:!1},...Object.fromEntries((b.experimental?.primary_tools??[]).map(k=>[k,!1]))},parts:l});if(P.info.role==="assistant"&&P.info.error){let k=P.info.error.data,M=typeof k?.message=="string"?k.message:P.info.error.name;throw new Error(`Subagent failed (task_id: ${f.id}): ${M}`)}let y=P.parts.findLast(k=>k.type==="tool"&&k.state.status==="error");if(y?.type==="tool"&&y.state.status==="error")throw new Error(`Subagent failed (task_id: ${f.id}): ${y.state.error}`);let D=P.parts.findLast(k=>k.type==="text")?.text??"";let T=[`task_id: ${f.id} (for resuming to continue this task if needed)`,"","<task_result>",D,"</task_result>"].join(`
1945
- `);return{title:a.description,metadata:{sessionId:f.id,model:I},output:T}}catch(_){var E=_,x=!0}finally{jn(R,E,x)}}}});import pa from"zod";import{Effect as Jd}from"effect";var Vd=`Use this tool to create and manage a structured task list for your current coding session. This helps you track progress, organize complex tasks, and demonstrate thoroughness to the user.
1943
+ `;import pr from"zod";function Hd(t){return{[Symbol.dispose](){t()},[Symbol.asyncDispose](){return Promise.resolve(t())}}}n(Hd,"defer");var Cy=pr.object({description:pr.string().describe("A short (3-5 words) description of the task"),prompt:pr.string().describe("The task for the agent to perform"),subagent_type:pr.string().describe("The type of specialized agent to use for this task"),task_id:pr.string().describe("This should only be set if you mean to resume a previous task (you can pass a prior task_id and the task will continue the same subagent session as before instead of creating a fresh one)").optional(),command:pr.string().describe("The command that triggered this task").optional()}),Vd=it.define("task",async t=>{let e=await In.list().then(a=>a.filter(d=>d.mode!=="primary")),o=t?.agent,m=(o?e.filter(a=>Ge.evaluate("task",a.name,o.permission).action!=="deny"):e).toSorted((a,d)=>a.name.localeCompare(d.name));return{description:Gd.replace("{agents}",m.map(a=>`- ${a.name}: ${a.description??"This subagent should only be called manually by the user."}`).join(`
1944
+ `)),parameters:Cy,async execute(a,d){var R=[];try{let b=await Be.get();d.extra?.bypassAgentCheck||await d.ask({permission:"task",patterns:[a.subagent_type],always:["*"],metadata:{description:a.description,subagent_type:a.subagent_type}});let s=await In.get(a.subagent_type);if(!s)throw new Error(`Unknown agent type: ${a.subagent_type} is not a valid agent type`);let p=s.permission.some(k=>k.permission==="task");let w=s.permission.some(k=>k.permission==="todowrite");let f=await Ct(async()=>{if(a.task_id){let k=await Ke.get(Ee.make(a.task_id)).catch(()=>{});if(k)return k}return await Ke.create({parentID:d.sessionID,title:a.description+` (@${s.name} subagent)`,metadata:{agentType:s.name,spawnedBy:"task-tool",callerSessionId:d.sessionID},permission:[...w?[]:[{permission:"todowrite",pattern:"*",action:"deny"}],...p?[]:[{permission:"task",pattern:"*",action:"deny"}],...b.experimental?.primary_tools?.map(k=>({pattern:"*",action:"allow",permission:k}))??[]]})});let v=await Ne.get({sessionID:d.sessionID,messageID:d.messageID});if(v.info.role!=="assistant")throw new Error("Not an assistant message");let I=s.model??{modelID:v.info.modelID,providerID:v.info.providerID};d.metadata({title:a.description,metadata:{sessionId:f.id,model:I}});let h=Ve.ascending();function S(){Fn.cancel(f.id)}n(S,"cancel");d.abort.addEventListener("abort",S);let C=Mn(R,Hd(()=>d.abort.removeEventListener("abort",S)));let l=await Fn.resolvePromptParts(a.prompt);let P=await Fn.prompt({messageID:h,sessionID:f.id,model:{modelID:I.modelID,providerID:I.providerID},agent:s.name,tools:{...w?{}:{todowrite:!1},...p?{}:{task:!1},...Object.fromEntries((b.experimental?.primary_tools??[]).map(k=>[k,!1]))},parts:l});if(P.info.role==="assistant"&&P.info.error){let k=P.info.error.data,M=typeof k?.message=="string"?k.message:P.info.error.name;throw new Error(`Subagent failed (task_id: ${f.id}): ${M}`)}let y=P.parts.findLast(k=>k.type==="tool"&&k.state.status==="error");if(y?.type==="tool"&&y.state.status==="error")throw new Error(`Subagent failed (task_id: ${f.id}): ${y.state.error}`);let D=P.parts.findLast(k=>k.type==="text")?.text??"";let T=[`task_id: ${f.id} (for resuming to continue this task if needed)`,"","<task_result>",D,"</task_result>"].join(`
1945
+ `);return{title:a.description,metadata:{sessionId:f.id,model:I},output:T}}catch(_){var E=_,x=!0}finally{jn(R,E,x)}}}});import pa from"zod";import{Effect as Kd}from"effect";var Yd=`Use this tool to create and manage a structured task list for your current coding session. This helps you track progress, organize complex tasks, and demonstrate thoroughness to the user.
1946
1946
  It also helps the user understand the progress of the task and overall progress of their requests.
1947
1947
 
1948
1948
  ## When to Use This Tool
@@ -2109,7 +2109,7 @@ The assistant did not use the todo list because this is a single command executi
2109
2109
 
2110
2110
  When in doubt, use this tool. Being proactive with task management demonstrates attentiveness and ensures you complete all requirements successfully.
2111
2111
 
2112
- `;import{Effect as Br,Layer as Yd,ServiceMap as Cy}from"effect";import fr from"zod";var mr;(b=>{b.Info=fr.object({content:fr.string().describe("Brief description of the task"),status:fr.string().describe("Current status of the task: pending, in_progress, completed, cancelled"),priority:fr.string().describe("Priority level of the task: high, medium, low")}).meta({ref:"Todo"}),b.Event={Updated:ht.define("todo.updated",fr.object({sessionID:Ee.zod,todos:fr.array(b.Info)}))};class o extends Cy.Service()("@opencode/SessionTodo"){static{n(this,"Service")}}b.Service=o,b.layer=Yd.effect(o,Br.gen(function*(){let s=yield*Me.Service,p=Br.fn("Todo.update")(function*(f){yield*Br.sync(()=>Ft.transaction(v=>{v.delete(So).where((0,ke.eq)(So.session_id,f.sessionID)).run(),f.todos.length!==0&&v.insert(So).values(f.todos.map((I,h)=>({session_id:f.sessionID,content:I.content,status:I.status,priority:I.priority,position:h}))).run()})),yield*s.publish(b.Event.Updated,f)}),w=Br.fn("Todo.get")(function*(f){return(yield*Br.sync(()=>Ft.use(I=>I.select().from(So).where((0,ke.eq)(So.session_id,f)).orderBy((0,ke.asc)(So.position)).all()))).map(I=>({content:I.content,status:I.status,priority:I.priority}))});return o.of({update:p,get:w})})),b.defaultLayer=b.layer.pipe(Yd.provide(Me.layer));let{runPromise:c}=qe(o,b.defaultLayer);async function a(s){return c(p=>p.update(s))}b.update=a,n(a,"update");async function d(s){return c(p=>p.get(s))}b.get=d,n(d,"get")})(mr||={});var Ay=pa.object({todos:pa.array(pa.object(mr.Info.shape)).describe("The updated todo list")}),Kd=it.defineEffect("todowrite",Jd.gen(function*(){let t=yield*mr.Service;return{description:Vd,parameters:Ay,async execute(e,o){return await o.ask({permission:"todowrite",patterns:["*"],always:["*"],metadata:{}}),await t.update({sessionID:o.sessionID,todos:e.todos}).pipe(Jd.runPromise),{title:`${e.todos.filter(i=>i.status!=="completed").length} todos`,output:JSON.stringify(e.todos,null,2),metadata:{todos:e.todos}}}}}));import zs from"zod";import zy from"turndown";var Xd=`- Fetches content from a specified URL
2112
+ `;import{Effect as Br,Layer as Jd,ServiceMap as Ay}from"effect";import fr from"zod";var mr;(b=>{b.Info=fr.object({content:fr.string().describe("Brief description of the task"),status:fr.string().describe("Current status of the task: pending, in_progress, completed, cancelled"),priority:fr.string().describe("Priority level of the task: high, medium, low")}).meta({ref:"Todo"}),b.Event={Updated:ht.define("todo.updated",fr.object({sessionID:Ee.zod,todos:fr.array(b.Info)}))};class o extends Ay.Service()("@opencode/SessionTodo"){static{n(this,"Service")}}b.Service=o,b.layer=Jd.effect(o,Br.gen(function*(){let s=yield*Me.Service,p=Br.fn("Todo.update")(function*(f){yield*Br.sync(()=>Ft.transaction(v=>{v.delete(So).where((0,ke.eq)(So.session_id,f.sessionID)).run(),f.todos.length!==0&&v.insert(So).values(f.todos.map((I,h)=>({session_id:f.sessionID,content:I.content,status:I.status,priority:I.priority,position:h}))).run()})),yield*s.publish(b.Event.Updated,f)}),w=Br.fn("Todo.get")(function*(f){return(yield*Br.sync(()=>Ft.use(I=>I.select().from(So).where((0,ke.eq)(So.session_id,f)).orderBy((0,ke.asc)(So.position)).all()))).map(I=>({content:I.content,status:I.status,priority:I.priority}))});return o.of({update:p,get:w})})),b.defaultLayer=b.layer.pipe(Jd.provide(Me.layer));let{runPromise:c}=qe(o,b.defaultLayer);async function a(s){return c(p=>p.update(s))}b.update=a,n(a,"update");async function d(s){return c(p=>p.get(s))}b.get=d,n(d,"get")})(mr||={});var My=pa.object({todos:pa.array(pa.object(mr.Info.shape)).describe("The updated todo list")}),Xd=it.defineEffect("todowrite",Kd.gen(function*(){let t=yield*mr.Service;return{description:Yd,parameters:My,async execute(e,o){return await o.ask({permission:"todowrite",patterns:["*"],always:["*"],metadata:{}}),await t.update({sessionID:o.sessionID,todos:e.todos}).pipe(Kd.runPromise),{title:`${e.todos.filter(i=>i.status!=="completed").length} todos`,output:JSON.stringify(e.todos,null,2),metadata:{todos:e.todos}}}}}));import zs from"zod";import Fy from"turndown";var Zd=`- Fetches content from a specified URL
2113
2113
  - Takes a URL and optional format as input
2114
2114
  - Fetches the URL content, converts to requested format (markdown by default)
2115
2115
  - Returns the content in the specified format
@@ -2122,7 +2122,7 @@ Usage notes:
2122
2122
  - Format options: "markdown" (default), "text", or "html"
2123
2123
  - This tool is read-only and does not modify any files
2124
2124
  - Results may be summarized if the content is very large
2125
- `;function My(t){let e=new AbortController,o=setTimeout(e.abort.bind(e),t);return{controller:e,signal:e.signal,clearTimeout:n(()=>globalThis.clearTimeout(o),"clearTimeout")}}n(My,"abortAfter");function hr(t,...e){let o=My(t);return{signal:AbortSignal.any([o.signal,...e]),clearTimeout:o.clearTimeout}}n(hr,"abortAfterAny");import{lookup as jy}from"node:dns/promises";import{isIP as Zd}from"node:net";function Qd(t){let[e,o]=t.split(".").map(i=>Number(i));return e===0||e===10||e===127||e===100&&o>=64&&o<=127||e===169&&o===254||e===172&&o>=16&&o<=31||e===192&&o===168||e===198&&(o===18||o===19)||e>=224}n(Qd,"v4Blocked");function Ly(t){let e=t.toLowerCase();if(e==="::"||e==="::1")return!0;let o=e.match(/^::ffff:(\d+\.\d+\.\d+\.\d+)$/);return o?Qd(o[1]):!!(/^f[cd]/.test(e)||/^fe[89ab]/.test(e)||/^ff/.test(e))}n(Ly,"v6Blocked");function Ny(t){let e=Zd(t);return e===4?Qd(t):e===6?Ly(t):!0}n(Ny,"isNonPublicAddress");async function Uy(t){let e=new URL(t),o=e.hostname.replace(/^\[|\]$/g,"");if(o==="localhost"||o.endsWith(".localhost")||o.endsWith(".local")||o.endsWith(".internal"))throw new Error(`webfetch reaches the public web only; ${e.host} is on this machine or its network`);let i=Zd(o)?[o]:(await jy(o,{all:!0})).map(m=>m.address);if(i.length===0||i.some(Ny))throw new Error(`webfetch reaches the public web only; ${e.host} resolves to an address on this machine or its network`)}n(Uy,"assertPublicUrl");async function fa(t,e,o=5){let i=t;for(let m=0;m<=o;m++){await Uy(i);let c=await fetch(i,{...e,redirect:"manual"}),a=c.headers.get("location");if(c.status>=300&&c.status<400&&a){i=new URL(a,i).toString();continue}return c}throw new Error(`webfetch stopped after ${o} redirects`)}n(fa,"fetchPublic");var eu=5*1024*1024,Fy=30*1e3,qy=120*1e3,tu=it.define("webfetch",{description:Xd,parameters:zs.object({url:zs.string().describe("The URL to fetch content from"),format:zs.enum(["text","markdown","html"]).default("markdown").describe("The format to return the content in (text, markdown, or html). Defaults to markdown."),timeout:zs.number().describe("Optional timeout in seconds (max 120)").optional()}),async execute(t,e){if(!t.url.startsWith("http://")&&!t.url.startsWith("https://"))throw new Error("URL must start with http:// or https://");await e.ask({permission:"webfetch",patterns:[t.url],always:["*"],metadata:{url:t.url,format:t.format,timeout:t.timeout}});let o=Math.min((t.timeout??Fy/1e3)*1e3,qy),{signal:i,clearTimeout:m}=hr(o,e.abort),c="*/*";switch(t.format){case"markdown":c="text/markdown;q=1.0, text/x-markdown;q=0.9, text/plain;q=0.8, text/html;q=0.7, */*;q=0.1";break;case"text":c="text/plain;q=1.0, text/markdown;q=0.9, text/html;q=0.8, */*;q=0.1";break;case"html":c="text/html;q=1.0, application/xhtml+xml;q=0.9, text/plain;q=0.8, text/markdown;q=0.7, */*;q=0.1";break;default:c="text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8"}let a={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",Accept:c,"Accept-Language":"en-US,en;q=0.9"},d;try{let h=await fa(t.url,{signal:i,headers:a});d=h.status===403&&h.headers.get("cf-mitigated")==="challenge"?await fa(t.url,{signal:i,headers:{...a,"User-Agent":"opencode"}}):h}finally{m()}if(!d.ok)throw new Error(`Request failed with status code: ${d.status}`);let b=d.headers.get("content-length");if(b&&parseInt(b)>eu)throw new Error("Response too large (exceeds 5MB limit)");let s=await d.arrayBuffer();if(s.byteLength>eu)throw new Error("Response too large (exceeds 5MB limit)");let p=d.headers.get("content-type")||"",w=p.split(";")[0]?.trim().toLowerCase()||"",f=`${t.url} (${p})`;if(w.startsWith("image/")&&w!=="image/svg+xml"&&w!=="image/vnd.fastbidsheet"){let h=Buffer.from(s).toString("base64");return{title:f,output:"Image fetched successfully",metadata:{},attachments:[{type:"file",mime:w,url:`data:${w};base64,${h}`}]}}let I=new TextDecoder().decode(s);switch(t.format){case"markdown":return p.includes("text/html")?{output:Wy(I),title:f,metadata:{}}:{output:I,title:f,metadata:{}};case"text":return p.includes("text/html")?{output:await $y(I),title:f,metadata:{}}:{output:I,title:f,metadata:{}};case"html":return{output:I,title:f,metadata:{}};default:return{output:I,title:f,metadata:{}}}}});async function $y(t){let e="",o=!1;return await new HTMLRewriter().on("script, style, noscript, iframe, object, embed",{element(){o=!0},text(){}}).on("*",{element(m){["script","style","noscript","iframe","object","embed"].includes(m.tagName)||(o=!1)},text(m){o||(e+=m.text)}}).transform(new Response(t)).text(),e.trim()}n($y,"extractTextFromHTML");function Wy(t){let e=new zy({headingStyle:"atx",hr:"---",bulletListMarker:"-",codeBlockStyle:"fenced",emDelimiter:"*"});return e.remove(["script","style","meta","link"]),e.turndown(t)}n(Wy,"convertHTMLToMarkdown");import ma from"zod";import*as Wo from"path";import{createTwoFilesPatch as By}from"diff";var nu=`Writes a file to the local filesystem.
2125
+ `;function jy(t){let e=new AbortController,o=setTimeout(e.abort.bind(e),t);return{controller:e,signal:e.signal,clearTimeout:n(()=>globalThis.clearTimeout(o),"clearTimeout")}}n(jy,"abortAfter");function hr(t,...e){let o=jy(t);return{signal:AbortSignal.any([o.signal,...e]),clearTimeout:o.clearTimeout}}n(hr,"abortAfterAny");import{lookup as Ly}from"node:dns/promises";import{isIP as Qd}from"node:net";function eu(t){let[e,o]=t.split(".").map(i=>Number(i));return e===0||e===10||e===127||e===100&&o>=64&&o<=127||e===169&&o===254||e===172&&o>=16&&o<=31||e===192&&o===168||e===198&&(o===18||o===19)||e>=224}n(eu,"v4Blocked");function Ny(t){let e=t.toLowerCase();if(e==="::"||e==="::1")return!0;let o=e.match(/^::ffff:(\d+\.\d+\.\d+\.\d+)$/);return o?eu(o[1]):!!(/^f[cd]/.test(e)||/^fe[89ab]/.test(e)||/^ff/.test(e))}n(Ny,"v6Blocked");function Uy(t){let e=Qd(t);return e===4?eu(t):e===6?Ny(t):!0}n(Uy,"isNonPublicAddress");async function zy(t){let e=new URL(t),o=e.hostname.replace(/^\[|\]$/g,"");if(o==="localhost"||o.endsWith(".localhost")||o.endsWith(".local")||o.endsWith(".internal"))throw new Error(`webfetch reaches the public web only; ${e.host} is on this machine or its network`);let i=Qd(o)?[o]:(await Ly(o,{all:!0})).map(m=>m.address);if(i.length===0||i.some(Uy))throw new Error(`webfetch reaches the public web only; ${e.host} resolves to an address on this machine or its network`)}n(zy,"assertPublicUrl");async function fa(t,e,o=5){let i=t;for(let m=0;m<=o;m++){await zy(i);let c=await fetch(i,{...e,redirect:"manual"}),a=c.headers.get("location");if(c.status>=300&&c.status<400&&a){i=new URL(a,i).toString();continue}return c}throw new Error(`webfetch stopped after ${o} redirects`)}n(fa,"fetchPublic");var tu=5*1024*1024,qy=30*1e3,$y=120*1e3,nu=it.define("webfetch",{description:Zd,parameters:zs.object({url:zs.string().describe("The URL to fetch content from"),format:zs.enum(["text","markdown","html"]).default("markdown").describe("The format to return the content in (text, markdown, or html). Defaults to markdown."),timeout:zs.number().describe("Optional timeout in seconds (max 120)").optional()}),async execute(t,e){if(!t.url.startsWith("http://")&&!t.url.startsWith("https://"))throw new Error("URL must start with http:// or https://");await e.ask({permission:"webfetch",patterns:[t.url],always:["*"],metadata:{url:t.url,format:t.format,timeout:t.timeout}});let o=Math.min((t.timeout??qy/1e3)*1e3,$y),{signal:i,clearTimeout:m}=hr(o,e.abort),c="*/*";switch(t.format){case"markdown":c="text/markdown;q=1.0, text/x-markdown;q=0.9, text/plain;q=0.8, text/html;q=0.7, */*;q=0.1";break;case"text":c="text/plain;q=1.0, text/markdown;q=0.9, text/html;q=0.8, */*;q=0.1";break;case"html":c="text/html;q=1.0, application/xhtml+xml;q=0.9, text/plain;q=0.8, text/markdown;q=0.7, */*;q=0.1";break;default:c="text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8"}let a={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",Accept:c,"Accept-Language":"en-US,en;q=0.9"},d;try{let h=await fa(t.url,{signal:i,headers:a});d=h.status===403&&h.headers.get("cf-mitigated")==="challenge"?await fa(t.url,{signal:i,headers:{...a,"User-Agent":"opencode"}}):h}finally{m()}if(!d.ok)throw new Error(`Request failed with status code: ${d.status}`);let b=d.headers.get("content-length");if(b&&parseInt(b)>tu)throw new Error("Response too large (exceeds 5MB limit)");let s=await d.arrayBuffer();if(s.byteLength>tu)throw new Error("Response too large (exceeds 5MB limit)");let p=d.headers.get("content-type")||"",w=p.split(";")[0]?.trim().toLowerCase()||"",f=`${t.url} (${p})`;if(w.startsWith("image/")&&w!=="image/svg+xml"&&w!=="image/vnd.fastbidsheet"){let h=Buffer.from(s).toString("base64");return{title:f,output:"Image fetched successfully",metadata:{},attachments:[{type:"file",mime:w,url:`data:${w};base64,${h}`}]}}let I=new TextDecoder().decode(s);switch(t.format){case"markdown":return p.includes("text/html")?{output:By(I),title:f,metadata:{}}:{output:I,title:f,metadata:{}};case"text":return p.includes("text/html")?{output:await Wy(I),title:f,metadata:{}}:{output:I,title:f,metadata:{}};case"html":return{output:I,title:f,metadata:{}};default:return{output:I,title:f,metadata:{}}}}});async function Wy(t){let e="",o=!1;return await new HTMLRewriter().on("script, style, noscript, iframe, object, embed",{element(){o=!0},text(){}}).on("*",{element(m){["script","style","noscript","iframe","object","embed"].includes(m.tagName)||(o=!1)},text(m){o||(e+=m.text)}}).transform(new Response(t)).text(),e.trim()}n(Wy,"extractTextFromHTML");function By(t){let e=new Fy({headingStyle:"atx",hr:"---",bulletListMarker:"-",codeBlockStyle:"fenced",emDelimiter:"*"});return e.remove(["script","style","meta","link"]),e.turndown(t)}n(By,"convertHTMLToMarkdown");import ma from"zod";import*as Wo from"path";import{createTwoFilesPatch as Gy}from"diff";var ou=`Writes a file to the local filesystem.
2126
2126
 
2127
2127
  Usage:
2128
2128
  - This tool will overwrite the existing file if there is one at the provided path.
@@ -2130,23 +2130,23 @@ Usage:
2130
2130
  - ALWAYS prefer editing existing files in the codebase. NEVER write new files unless explicitly required.
2131
2131
  - NEVER proactively create documentation files (*.md) or README files. Only create documentation files if explicitly requested by the User.
2132
2132
  - Only use emojis if the user explicitly requests it. Avoid writing emojis to files unless asked.
2133
- `;var ha=20,Gy=5,ou=it.define("write",{description:nu,parameters:ma.object({content:ma.string().describe("The content to write to the file"),filePath:ma.string().describe("The absolute path to the file to write (must be absolute, not relative)")}),async execute(t,e){let o=Wo.isAbsolute(t.filePath)?t.filePath:Wo.join(ne.directory,t.filePath);await yn(e,o);let i=await Te.exists(o),m=i?await Te.readText(o):"";i&&await rn.assert(e.sessionID,o);let c=no(By(o,o,m,t.content));await e.ask({permission:"edit",patterns:[Wo.relative(ne.worktree,o)],always:["*"],metadata:{filepath:o,diff:c}}),await Te.write(o,t.content),await vo.file(o),Me.publish(bo.Event.Edited,{file:o}),await Me.publish(wo.Event.Updated,{file:o,event:i?"change":"add"}),await rn.read(e.sessionID,o);let a="Wrote file successfully.";await ct.touchFile(o,!0);let d=await ct.diagnostics(),b=Te.normalizePath(o),s=0;for(let[p,w]of Object.entries(d)){let f=w.filter(h=>h.severity===1);if(f.length===0)continue;let v=f.slice(0,ha),I=f.length>ha?`
2133
+ `;var ha=20,Hy=5,ru=it.define("write",{description:ou,parameters:ma.object({content:ma.string().describe("The content to write to the file"),filePath:ma.string().describe("The absolute path to the file to write (must be absolute, not relative)")}),async execute(t,e){let o=Wo.isAbsolute(t.filePath)?t.filePath:Wo.join(ne.directory,t.filePath);await yn(e,o);let i=await Te.exists(o),m=i?await Te.readText(o):"";i&&await rn.assert(e.sessionID,o);let c=no(Gy(o,o,m,t.content));await e.ask({permission:"edit",patterns:[Wo.relative(ne.worktree,o)],always:["*"],metadata:{filepath:o,diff:c}}),await Te.write(o,t.content),await vo.file(o),Me.publish(bo.Event.Edited,{file:o}),await Me.publish(wo.Event.Updated,{file:o,event:i?"change":"add"}),await rn.read(e.sessionID,o);let a="Wrote file successfully.";await ct.touchFile(o,!0);let d=await ct.diagnostics(),b=Te.normalizePath(o),s=0;for(let[p,w]of Object.entries(d)){let f=w.filter(h=>h.severity===1);if(f.length===0)continue;let v=f.slice(0,ha),I=f.length>ha?`
2134
2134
  ... and ${f.length-ha} more`:"";if(p===b){a+=`
2135
2135
 
2136
2136
  LSP errors detected in this file, please fix:
2137
2137
  <diagnostics file="${o}">
2138
2138
  ${v.map(ct.Diagnostic.pretty).join(`
2139
2139
  `)}${I}
2140
- </diagnostics>`;continue}s>=Gy||(s++,a+=`
2140
+ </diagnostics>`;continue}s>=Hy||(s++,a+=`
2141
2141
 
2142
2142
  LSP errors detected in other files:
2143
2143
  <diagnostics file="${p}">
2144
2144
  ${v.map(ct.Diagnostic.pretty).join(`
2145
2145
  `)}${I}
2146
- </diagnostics>`)}return{title:Wo.relative(ne.worktree,o),metadata:{diagnostics:d,filepath:o,exists:i},output:a}}});import ga from"zod";var ru=it.define("invalid",{description:"Do not use",parameters:ga.object({tool:ga.string(),error:ga.string()}),async execute(t){return{title:"Invalid Tool",output:`The arguments provided to the tool are invalid: ${t.error}`,metadata:{}}}});import su from"path";import{pathToFileURL as Hy}from"url";import iu from"zod";var au=it.define("skill",async t=>{let e=await un.available(t?.agent),o=e.length===0?"Load a specialized skill that provides domain-specific instructions and workflows. No skills are currently available.":["Load a specialized skill that provides domain-specific instructions and workflows.","","When you recognize that a task matches one of the available skills listed below, use this tool to load the full skill instructions.","","The skill will inject detailed instructions, workflows, and access to bundled resources (scripts, references, templates) into the conversation context.","",'Tool output includes a `<skill_content name="...">` block with the loaded content.',"","The following skills provide specialized sets of instructions for particular tasks","Invoke this tool to load a skill when a task matches one of the available skills listed below:","",un.fmt(e,{verbose:!1})].join(`
2147
- `),i=e.map(a=>`'${a.name}'`).slice(0,3).join(", "),m=i.length>0?` (e.g., ${i}, ...)`:"",c=iu.object({name:iu.string().describe(`The name of the skill from available_skills${m}`)});return{description:o,parameters:c,async execute(a,d){let b=await un.get(a.name);if(!b){let v=await un.all().then(I=>I.map(h=>h.name).join(", "));throw new Error(`Skill "${a.name}" not found. Available skills: ${v||"none"}`)}await d.ask({permission:"skill",patterns:[a.name],always:[a.name],metadata:{}});let s=su.dirname(b.location),p=Hy(s).href,w=10,f=await Ct(async()=>{let v=[];for await(let I of Zn.files({cwd:s,follow:!1,hidden:!0,signal:d.abort}))if(!I.includes("SKILL.md")&&(v.push(su.resolve(s,I)),v.length>=w))break;return v}).then(v=>v.map(I=>`<file>${I}</file>`).join(`
2146
+ </diagnostics>`)}return{title:Wo.relative(ne.worktree,o),metadata:{diagnostics:d,filepath:o,exists:i},output:a}}});import ga from"zod";var su=it.define("invalid",{description:"Do not use",parameters:ga.object({tool:ga.string(),error:ga.string()}),async execute(t){return{title:"Invalid Tool",output:`The arguments provided to the tool are invalid: ${t.error}`,metadata:{}}}});import iu from"path";import{pathToFileURL as Vy}from"url";import au from"zod";var lu=it.define("skill",async t=>{let e=await un.available(t?.agent),o=e.length===0?"Load a specialized skill that provides domain-specific instructions and workflows. No skills are currently available.":["Load a specialized skill that provides domain-specific instructions and workflows.","","When you recognize that a task matches one of the available skills listed below, use this tool to load the full skill instructions.","","The skill will inject detailed instructions, workflows, and access to bundled resources (scripts, references, templates) into the conversation context.","",'Tool output includes a `<skill_content name="...">` block with the loaded content.',"","The following skills provide specialized sets of instructions for particular tasks","Invoke this tool to load a skill when a task matches one of the available skills listed below:","",un.fmt(e,{verbose:!1})].join(`
2147
+ `),i=e.map(a=>`'${a.name}'`).slice(0,3).join(", "),m=i.length>0?` (e.g., ${i}, ...)`:"",c=au.object({name:au.string().describe(`The name of the skill from available_skills${m}`)});return{description:o,parameters:c,async execute(a,d){let b=await un.get(a.name);if(!b){let v=await un.all().then(I=>I.map(h=>h.name).join(", "));throw new Error(`Skill "${a.name}" not found. Available skills: ${v||"none"}`)}await d.ask({permission:"skill",patterns:[a.name],always:[a.name],metadata:{}});let s=iu.dirname(b.location),p=Vy(s).href,w=10,f=await Ct(async()=>{let v=[];for await(let I of Zn.files({cwd:s,follow:!1,hidden:!0,signal:d.abort}))if(!I.includes("SKILL.md")&&(v.push(iu.resolve(s,I)),v.length>=w))break;return v}).then(v=>v.map(I=>`<file>${I}</file>`).join(`
2148
2148
  `));return{title:`Loaded skill: ${b.name}`,output:[`<skill_content name="${b.name}">`,`# Skill: ${b.name}`,"",b.content.trim(),"",`Base directory for this skill: ${p}`,"Relative paths in this skill (e.g., scripts/, reference/) are relative to this base directory.","Note: file list is sampled.","","<skill_files>",f,"</skill_files>","</skill_content>"].join(`
2149
- `),metadata:{name:b.name,dir:s}}}}});import vu from"path";import Xy from"zod";import gr from"zod";var lu=`- Search the web using Exa AI - performs real-time web searches and can scrape content from specific URLs
2149
+ `),metadata:{name:b.name,dir:s}}}}});import xu from"path";import Zy from"zod";import gr from"zod";var cu=`- Search the web using Exa AI - performs real-time web searches and can scrape content from specific URLs
2150
2150
  - Provides up-to-date information for current events and recent data
2151
2151
  - Supports configurable result counts and returns the content from the most relevant websites
2152
2152
  - Use this tool for accessing information beyond knowledge cutoff
@@ -2160,8 +2160,8 @@ Usage notes:
2160
2160
 
2161
2161
  The current year is {{year}}. You MUST use this year when searching for recent information or current events
2162
2162
  - Example: If the current year is 2026 and the user asks for "latest AI news", search for "AI news 2026", NOT "AI news 2025"
2163
- `;var ya={BASE_URL:"https://mcp.exa.ai",ENDPOINTS:{SEARCH:"/mcp"},DEFAULT_NUM_RESULTS:8},cu=it.define("websearch",async()=>({get description(){return lu.replace("{{year}}",new Date().getFullYear().toString())},parameters:gr.object({query:gr.string().describe("Websearch query"),numResults:gr.number().optional().describe("Number of search results to return (default: 8)"),livecrawl:gr.enum(["fallback","preferred"]).optional().describe("Live crawl mode - 'fallback': use live crawling as backup if cached content unavailable, 'preferred': prioritize live crawling (default: 'fallback')"),type:gr.enum(["auto","fast","deep"]).optional().describe("Search type - 'auto': balanced search (default), 'fast': quick results, 'deep': comprehensive search"),contextMaxCharacters:gr.number().optional().describe("Maximum characters for context string optimized for LLMs (default: 10000)")}),async execute(t,e){await e.ask({permission:"websearch",patterns:[t.query],always:["*"],metadata:{query:t.query,numResults:t.numResults,livecrawl:t.livecrawl,type:t.type,contextMaxCharacters:t.contextMaxCharacters}});let o={jsonrpc:"2.0",id:1,method:"tools/call",params:{name:"web_search_exa",arguments:{query:t.query,type:t.type||"auto",numResults:t.numResults||ya.DEFAULT_NUM_RESULTS,livecrawl:t.livecrawl||"fallback",contextMaxCharacters:t.contextMaxCharacters}}},{signal:i,clearTimeout:m}=hr(25e3,e.abort);try{let c={accept:"application/json, text/event-stream","content-type":"application/json"},a=await fetch(`${ya.BASE_URL}${ya.ENDPOINTS.SEARCH}`,{method:"POST",headers:c,body:JSON.stringify(o),signal:i});if(m(),!a.ok){let s=await a.text();throw new Error(`Search error (${a.status}): ${s}`)}let b=(await a.text()).split(`
2164
- `);for(let s of b)if(s.startsWith("data: ")){let p=JSON.parse(s.substring(6));if(p.result&&p.result.content&&p.result.content.length>0)return{output:p.result.content[0].text,title:`Web search: ${t.query}`,metadata:{}}}return{output:"No search results found. Please try a different query.",title:`Web search: ${t.query}`,metadata:{}}}catch(c){throw m(),c instanceof Error&&c.name==="AbortError"?new Error("Search request timed out"):c}}}));import ba from"zod";var du=`- Search and get relevant context for any programming task using Exa Code API
2163
+ `;var ya={BASE_URL:"https://mcp.exa.ai",ENDPOINTS:{SEARCH:"/mcp"},DEFAULT_NUM_RESULTS:8},du=it.define("websearch",async()=>({get description(){return cu.replace("{{year}}",new Date().getFullYear().toString())},parameters:gr.object({query:gr.string().describe("Websearch query"),numResults:gr.number().optional().describe("Number of search results to return (default: 8)"),livecrawl:gr.enum(["fallback","preferred"]).optional().describe("Live crawl mode - 'fallback': use live crawling as backup if cached content unavailable, 'preferred': prioritize live crawling (default: 'fallback')"),type:gr.enum(["auto","fast","deep"]).optional().describe("Search type - 'auto': balanced search (default), 'fast': quick results, 'deep': comprehensive search"),contextMaxCharacters:gr.number().optional().describe("Maximum characters for context string optimized for LLMs (default: 10000)")}),async execute(t,e){await e.ask({permission:"websearch",patterns:[t.query],always:["*"],metadata:{query:t.query,numResults:t.numResults,livecrawl:t.livecrawl,type:t.type,contextMaxCharacters:t.contextMaxCharacters}});let o={jsonrpc:"2.0",id:1,method:"tools/call",params:{name:"web_search_exa",arguments:{query:t.query,type:t.type||"auto",numResults:t.numResults||ya.DEFAULT_NUM_RESULTS,livecrawl:t.livecrawl||"fallback",contextMaxCharacters:t.contextMaxCharacters}}},{signal:i,clearTimeout:m}=hr(25e3,e.abort);try{let c={accept:"application/json, text/event-stream","content-type":"application/json"},a=await fetch(`${ya.BASE_URL}${ya.ENDPOINTS.SEARCH}`,{method:"POST",headers:c,body:JSON.stringify(o),signal:i});if(m(),!a.ok){let s=await a.text();throw new Error(`Search error (${a.status}): ${s}`)}let b=(await a.text()).split(`
2164
+ `);for(let s of b)if(s.startsWith("data: ")){let p=JSON.parse(s.substring(6));if(p.result&&p.result.content&&p.result.content.length>0)return{output:p.result.content[0].text,title:`Web search: ${t.query}`,metadata:{}}}return{output:"No search results found. Please try a different query.",title:`Web search: ${t.query}`,metadata:{}}}catch(c){throw m(),c instanceof Error&&c.name==="AbortError"?new Error("Search request timed out"):c}}}));import ba from"zod";var uu=`- Search and get relevant context for any programming task using Exa Code API
2165
2165
  - Provides the highest quality and freshest context for libraries, SDKs, and APIs
2166
2166
  - Use this tool for ANY question or task related to programming
2167
2167
  - Returns comprehensive code examples, documentation, and API references
@@ -2173,8 +2173,8 @@ Usage notes:
2173
2173
  - Use lower values for specific questions, higher values for comprehensive documentation
2174
2174
  - Supports queries about frameworks, libraries, APIs, and programming concepts
2175
2175
  - Examples: 'React useState hook examples', 'Python pandas dataframe filtering', 'Express.js middleware'
2176
- `;var uu={BASE_URL:"https://mcp.exa.ai",ENDPOINTS:{CONTEXT:"/mcp"}},pu=it.define("codesearch",{description:du,parameters:ba.object({query:ba.string().describe("Search query to find relevant context for APIs, Libraries, and SDKs. For example, 'React useState hook examples', 'Python pandas dataframe filtering', 'Express.js middleware', 'Next js partial prerendering configuration'"),tokensNum:ba.number().min(1e3).max(5e4).default(5e3).describe("Number of tokens to return (1000-50000). Default is 5000 tokens. Adjust this value based on how much context you need - use lower values for focused queries and higher values for comprehensive documentation.")}),async execute(t,e){await e.ask({permission:"codesearch",patterns:[t.query],always:["*"],metadata:{query:t.query,tokensNum:t.tokensNum}});let o={jsonrpc:"2.0",id:1,method:"tools/call",params:{name:"get_code_context_exa",arguments:{query:t.query,tokensNum:t.tokensNum||5e3}}},{signal:i,clearTimeout:m}=hr(3e4,e.abort);try{let c={accept:"application/json, text/event-stream","content-type":"application/json"},a=await fetch(`${uu.BASE_URL}${uu.ENDPOINTS.CONTEXT}`,{method:"POST",headers:c,body:JSON.stringify(o),signal:i});if(m(),!a.ok){let s=await a.text();throw new Error(`Code search error (${a.status}): ${s}`)}let b=(await a.text()).split(`
2177
- `);for(let s of b)if(s.startsWith("data: ")){let p=JSON.parse(s.substring(6));if(p.result&&p.result.content&&p.result.content.length>0)return{output:p.result.content[0].text,title:`Code search: ${t.query}`,metadata:{}}}return{output:"No code snippets or documentation found. Please try a different query, be more specific about the library or programming concept, or check the spelling of framework names.",title:`Code search: ${t.query}`,metadata:{}}}catch(c){throw m(),c instanceof Error&&c.name==="AbortError"?new Error("Code search request timed out"):c}}});import Gr from"zod";import wa from"path";var fu=`Interact with Language Server Protocol (LSP) servers to get code intelligence features.
2176
+ `;var pu={BASE_URL:"https://mcp.exa.ai",ENDPOINTS:{CONTEXT:"/mcp"}},fu=it.define("codesearch",{description:uu,parameters:ba.object({query:ba.string().describe("Search query to find relevant context for APIs, Libraries, and SDKs. For example, 'React useState hook examples', 'Python pandas dataframe filtering', 'Express.js middleware', 'Next js partial prerendering configuration'"),tokensNum:ba.number().min(1e3).max(5e4).default(5e3).describe("Number of tokens to return (1000-50000). Default is 5000 tokens. Adjust this value based on how much context you need - use lower values for focused queries and higher values for comprehensive documentation.")}),async execute(t,e){await e.ask({permission:"codesearch",patterns:[t.query],always:["*"],metadata:{query:t.query,tokensNum:t.tokensNum}});let o={jsonrpc:"2.0",id:1,method:"tools/call",params:{name:"get_code_context_exa",arguments:{query:t.query,tokensNum:t.tokensNum||5e3}}},{signal:i,clearTimeout:m}=hr(3e4,e.abort);try{let c={accept:"application/json, text/event-stream","content-type":"application/json"},a=await fetch(`${pu.BASE_URL}${pu.ENDPOINTS.CONTEXT}`,{method:"POST",headers:c,body:JSON.stringify(o),signal:i});if(m(),!a.ok){let s=await a.text();throw new Error(`Code search error (${a.status}): ${s}`)}let b=(await a.text()).split(`
2177
+ `);for(let s of b)if(s.startsWith("data: ")){let p=JSON.parse(s.substring(6));if(p.result&&p.result.content&&p.result.content.length>0)return{output:p.result.content[0].text,title:`Code search: ${t.query}`,metadata:{}}}return{output:"No code snippets or documentation found. Please try a different query, be more specific about the library or programming concept, or check the spelling of framework names.",title:`Code search: ${t.query}`,metadata:{}}}catch(c){throw m(),c instanceof Error&&c.name==="AbortError"?new Error("Code search request timed out"):c}}});import Gr from"zod";import wa from"path";var mu=`Interact with Language Server Protocol (LSP) servers to get code intelligence features.
2178
2178
 
2179
2179
  Supported operations:
2180
2180
  - goToDefinition: Find where a symbol is defined
@@ -2193,10 +2193,10 @@ All operations require:
2193
2193
  - character: The character offset (1-based, as shown in editors)
2194
2194
 
2195
2195
  Note: LSP servers must be configured for the file type. If no server is available, an error will be returned.
2196
- `;import{pathToFileURL as Vy}from"url";var Yy=["goToDefinition","findReferences","hover","documentSymbol","workspaceSymbol","goToImplementation","prepareCallHierarchy","incomingCalls","outgoingCalls"],mu=it.define("lsp",{description:fu,parameters:Gr.object({operation:Gr.enum(Yy).describe("The LSP operation to perform"),filePath:Gr.string().describe("The absolute or relative path to the file"),line:Gr.number().int().min(1).describe("The line number (1-based, as shown in editors)"),character:Gr.number().int().min(1).describe("The character offset (1-based, as shown in editors)")}),execute:n(async(t,e)=>{let o=wa.isAbsolute(t.filePath)?t.filePath:wa.join(ne.directory,t.filePath);await yn(e,o),await e.ask({permission:"lsp",patterns:["*"],always:["*"],metadata:{}});let i=Vy(o).href,m={file:o,line:t.line-1,character:t.character-1},c=wa.relative(ne.worktree,o),a=`${t.operation} ${c}:${t.line}:${t.character}`;if(!await Te.exists(o))throw new Error(`File not found: ${o}`);if(!await ct.hasClients(o))throw new Error("No LSP server available for this file type.");await ct.touchFile(o,!0);let s=await(async()=>{switch(t.operation){case"goToDefinition":return ct.definition(m);case"findReferences":return ct.references(m);case"hover":return ct.hover(m);case"documentSymbol":return ct.documentSymbol(i);case"workspaceSymbol":return ct.workspaceSymbol("");case"goToImplementation":return ct.implementation(m);case"prepareCallHierarchy":return ct.prepareCallHierarchy(m);case"incomingCalls":return ct.incomingCalls(m);case"outgoingCalls":return ct.outgoingCalls(m)}})(),p=s.length===0?`No results found for ${t.operation}`:JSON.stringify(s,null,2);return{title:a,metadata:{result:s},output:p}},"execute")});import yu from"zod";import*as kn from"path";import*as hn from"fs/promises";import hu from"zod";import*as oo from"path";import*as Rn from"fs/promises";import{readFileSync as Jy}from"fs";var Fs;(D=>{let t=Ae.create({service:"patch"});D.PatchSchema=hu.object({patchText:hu.string().describe("The full patch text that describes all changes to be made")});let o;(x=>(x.ParseError="ParseError",x.IoError="IoError",x.ComputeReplacements="ComputeReplacements",x.ImplicitInvocation="ImplicitInvocation"))(o=D.ApplyPatchError||={});let i;(x=>(x.Body="Body",x.ShellParseError="ShellParseError",x.PatchParseError="PatchParseError",x.NotApplyPatch="NotApplyPatch"))(i=D.MaybeApplyPatch||={});let m;(x=>(x.Body="Body",x.ShellParseError="ShellParseError",x.CorrectnessError="CorrectnessError",x.NotApplyPatch="NotApplyPatch"))(m=D.MaybeApplyPatchVerified||={});function c(T,R){let _=T[R];if(_.startsWith("*** Add File:")){let E=_.slice(13).trim();return E?{filePath:E,nextIdx:R+1}:null}if(_.startsWith("*** Delete File:")){let E=_.slice(16).trim();return E?{filePath:E,nextIdx:R+1}:null}if(_.startsWith("*** Update File:")){let E=_.slice(16).trim(),x,k=R+1;return k<T.length&&T[k].startsWith("*** Move to:")&&(x=T[k].slice(12).trim(),k++),E?{filePath:E,movePath:x,nextIdx:k}:null}return null}n(c,"parsePatchHeader");function a(T,R){let _=[],E=R;for(;E<T.length&&!T[E].startsWith("***");)if(T[E].startsWith("@@")){let x=T[E].substring(2).trim();E++;let k=[],M=[],r=!1;for(;E<T.length&&!T[E].startsWith("@@")&&!T[E].startsWith("***");){let u=T[E];if(u==="*** End of File"){r=!0,E++;break}if(u.startsWith(" ")){let g=u.substring(1);k.push(g),M.push(g)}else u.startsWith("-")?k.push(u.substring(1)):u.startsWith("+")&&M.push(u.substring(1));E++}_.push({old_lines:k,new_lines:M,change_context:x||void 0,is_end_of_file:r||void 0})}else E++;return{chunks:_,nextIdx:E}}n(a,"parseUpdateFileChunks");function d(T,R){let _="",E=R;for(;E<T.length&&!T[E].startsWith("***");)T[E].startsWith("+")&&(_+=T[E].substring(1)+`
2196
+ `;import{pathToFileURL as Yy}from"url";var Jy=["goToDefinition","findReferences","hover","documentSymbol","workspaceSymbol","goToImplementation","prepareCallHierarchy","incomingCalls","outgoingCalls"],hu=it.define("lsp",{description:mu,parameters:Gr.object({operation:Gr.enum(Jy).describe("The LSP operation to perform"),filePath:Gr.string().describe("The absolute or relative path to the file"),line:Gr.number().int().min(1).describe("The line number (1-based, as shown in editors)"),character:Gr.number().int().min(1).describe("The character offset (1-based, as shown in editors)")}),execute:n(async(t,e)=>{let o=wa.isAbsolute(t.filePath)?t.filePath:wa.join(ne.directory,t.filePath);await yn(e,o),await e.ask({permission:"lsp",patterns:["*"],always:["*"],metadata:{}});let i=Yy(o).href,m={file:o,line:t.line-1,character:t.character-1},c=wa.relative(ne.worktree,o),a=`${t.operation} ${c}:${t.line}:${t.character}`;if(!await Te.exists(o))throw new Error(`File not found: ${o}`);if(!await ct.hasClients(o))throw new Error("No LSP server available for this file type.");await ct.touchFile(o,!0);let s=await(async()=>{switch(t.operation){case"goToDefinition":return ct.definition(m);case"findReferences":return ct.references(m);case"hover":return ct.hover(m);case"documentSymbol":return ct.documentSymbol(i);case"workspaceSymbol":return ct.workspaceSymbol("");case"goToImplementation":return ct.implementation(m);case"prepareCallHierarchy":return ct.prepareCallHierarchy(m);case"incomingCalls":return ct.incomingCalls(m);case"outgoingCalls":return ct.outgoingCalls(m)}})(),p=s.length===0?`No results found for ${t.operation}`:JSON.stringify(s,null,2);return{title:a,metadata:{result:s},output:p}},"execute")});import bu from"zod";import*as kn from"path";import*as hn from"fs/promises";import gu from"zod";import*as oo from"path";import*as Rn from"fs/promises";import{readFileSync as Ky}from"fs";var Fs;(D=>{let t=Ae.create({service:"patch"});D.PatchSchema=gu.object({patchText:gu.string().describe("The full patch text that describes all changes to be made")});let o;(x=>(x.ParseError="ParseError",x.IoError="IoError",x.ComputeReplacements="ComputeReplacements",x.ImplicitInvocation="ImplicitInvocation"))(o=D.ApplyPatchError||={});let i;(x=>(x.Body="Body",x.ShellParseError="ShellParseError",x.PatchParseError="PatchParseError",x.NotApplyPatch="NotApplyPatch"))(i=D.MaybeApplyPatch||={});let m;(x=>(x.Body="Body",x.ShellParseError="ShellParseError",x.CorrectnessError="CorrectnessError",x.NotApplyPatch="NotApplyPatch"))(m=D.MaybeApplyPatchVerified||={});function c(T,R){let _=T[R];if(_.startsWith("*** Add File:")){let E=_.slice(13).trim();return E?{filePath:E,nextIdx:R+1}:null}if(_.startsWith("*** Delete File:")){let E=_.slice(16).trim();return E?{filePath:E,nextIdx:R+1}:null}if(_.startsWith("*** Update File:")){let E=_.slice(16).trim(),x,k=R+1;return k<T.length&&T[k].startsWith("*** Move to:")&&(x=T[k].slice(12).trim(),k++),E?{filePath:E,movePath:x,nextIdx:k}:null}return null}n(c,"parsePatchHeader");function a(T,R){let _=[],E=R;for(;E<T.length&&!T[E].startsWith("***");)if(T[E].startsWith("@@")){let x=T[E].substring(2).trim();E++;let k=[],M=[],r=!1;for(;E<T.length&&!T[E].startsWith("@@")&&!T[E].startsWith("***");){let u=T[E];if(u==="*** End of File"){r=!0,E++;break}if(u.startsWith(" ")){let g=u.substring(1);k.push(g),M.push(g)}else u.startsWith("-")?k.push(u.substring(1)):u.startsWith("+")&&M.push(u.substring(1));E++}_.push({old_lines:k,new_lines:M,change_context:x||void 0,is_end_of_file:r||void 0})}else E++;return{chunks:_,nextIdx:E}}n(a,"parseUpdateFileChunks");function d(T,R){let _="",E=R;for(;E<T.length&&!T[E].startsWith("***");)T[E].startsWith("+")&&(_+=T[E].substring(1)+`
2197
2197
  `),E++;return _.endsWith(`
2198
2198
  `)&&(_=_.slice(0,-1)),{content:_,nextIdx:E}}n(d,"parseAddFileContent");function b(T){let R=T.match(/^(?:cat\s+)?<<['"]?(\w+)['"]?\s*\n([\s\S]*?)\n\1\s*$/);return R?R[2]:T}n(b,"stripHeredoc");function s(T){let _=b(T.trim()).split(`
2199
- `),E=[],x=0,k="*** Begin Patch",M="*** End Patch",r=_.findIndex(g=>g.trim()===k),u=_.findIndex(g=>g.trim()===M);if(r===-1||u===-1||r>=u)throw new Error("Invalid patch format: missing Begin/End markers");for(x=r+1;x<u;){let g=c(_,x);if(!g){x++;continue}if(_[x].startsWith("*** Add File:")){let{content:L,nextIdx:j}=d(_,g.nextIdx);E.push({type:"add",path:g.filePath,contents:L}),x=j}else if(_[x].startsWith("*** Delete File:"))E.push({type:"delete",path:g.filePath}),x=g.nextIdx;else if(_[x].startsWith("*** Update File:")){let{chunks:L,nextIdx:j}=a(_,g.nextIdx);E.push({type:"update",path:g.filePath,move_path:g.movePath,chunks:L}),x=j}else x++}return{hunks:E}}D.parsePatch=s,n(s,"parsePatch");function p(T){let R=["apply_patch","applypatch"];if(T.length===2&&R.includes(T[0]))try{let{hunks:_}=s(T[1]);return{type:"Body",args:{patch:T[1],hunks:_}}}catch(_){return{type:"PatchParseError",error:_}}if(T.length===3&&T[0]==="bash"&&T[1]==="-lc"){let E=T[2].match(/apply_patch\s*<<['"](\w+)['"]\s*\n([\s\S]*?)\n\1/);if(E){let x=E[2];try{let{hunks:k}=s(x);return{type:"Body",args:{patch:x,hunks:k}}}catch(k){return{type:"PatchParseError",error:k}}}}return{type:"NotApplyPatch"}}D.maybeParseApplyPatch=p,n(p,"maybeParseApplyPatch");function w(T,R){let _;try{_=Jy(T,"utf-8")}catch(u){throw new Error(`Failed to read file ${T}: ${u}`)}let E=_.split(`
2199
+ `),E=[],x=0,k="*** Begin Patch",M="*** End Patch",r=_.findIndex(g=>g.trim()===k),u=_.findIndex(g=>g.trim()===M);if(r===-1||u===-1||r>=u)throw new Error("Invalid patch format: missing Begin/End markers");for(x=r+1;x<u;){let g=c(_,x);if(!g){x++;continue}if(_[x].startsWith("*** Add File:")){let{content:L,nextIdx:j}=d(_,g.nextIdx);E.push({type:"add",path:g.filePath,contents:L}),x=j}else if(_[x].startsWith("*** Delete File:"))E.push({type:"delete",path:g.filePath}),x=g.nextIdx;else if(_[x].startsWith("*** Update File:")){let{chunks:L,nextIdx:j}=a(_,g.nextIdx);E.push({type:"update",path:g.filePath,move_path:g.movePath,chunks:L}),x=j}else x++}return{hunks:E}}D.parsePatch=s,n(s,"parsePatch");function p(T){let R=["apply_patch","applypatch"];if(T.length===2&&R.includes(T[0]))try{let{hunks:_}=s(T[1]);return{type:"Body",args:{patch:T[1],hunks:_}}}catch(_){return{type:"PatchParseError",error:_}}if(T.length===3&&T[0]==="bash"&&T[1]==="-lc"){let E=T[2].match(/apply_patch\s*<<['"](\w+)['"]\s*\n([\s\S]*?)\n\1/);if(E){let x=E[2];try{let{hunks:k}=s(x);return{type:"Body",args:{patch:x,hunks:k}}}catch(k){return{type:"PatchParseError",error:k}}}}return{type:"NotApplyPatch"}}D.maybeParseApplyPatch=p,n(p,"maybeParseApplyPatch");function w(T,R){let _;try{_=Ky(T,"utf-8")}catch(u){throw new Error(`Failed to read file ${T}: ${u}`)}let E=_.split(`
2200
2200
  `);E.length>0&&E[E.length-1]===""&&E.pop();let x=f(E,T,R),k=v(E,x);(k.length===0||k[k.length-1]!=="")&&k.push("");let M=k.join(`
2201
2201
  `);return{unified_diff:C(_,M),content:M}}D.deriveNewContentsFromChunks=w,n(w,"deriveNewContentsFromChunks");function f(T,R,_){let E=[],x=0;for(let k of _){if(k.change_context){let g=S(T,[k.change_context],x);if(g===-1)throw new Error(`Failed to find context '${k.change_context}' in ${R}`);x=g+1}if(k.old_lines.length===0){let g=T.length>0&&T[T.length-1]===""?T.length-1:T.length;E.push([g,0,k.new_lines]);continue}let M=k.old_lines,r=k.new_lines,u=S(T,M,x,k.is_end_of_file);if(u===-1&&M.length>0&&M[M.length-1]===""&&(M=M.slice(0,-1),r.length>0&&r[r.length-1]===""&&(r=r.slice(0,-1)),u=S(T,M,x,k.is_end_of_file)),u!==-1)E.push([u,M.length,r]),x=u+M.length;else throw new Error(`Failed to find expected lines in ${R}:
2202
2202
  ${k.old_lines.join(`
@@ -2206,7 +2206,7 @@ ${k.old_lines.join(`
2206
2206
  `,k=Math.max(_.length,E.length),M=!1;for(let r=0;r<k;r++){let u=_[r]||"",g=E[r]||"";u!==g?(u&&(x+=`-${u}
2207
2207
  `),g&&(x+=`+${g}
2208
2208
  `),M=!0):u&&(x+=` ${u}
2209
- `)}return M?x:""}n(C,"generateUnifiedDiff");async function l(T){if(T.length===0)throw new Error("No files were modified.");let R=[],_=[],E=[];for(let x of T)switch(x.type){case"add":let k=oo.dirname(x.path);k!=="."&&k!=="/"&&await Rn.mkdir(k,{recursive:!0}),await Rn.writeFile(x.path,x.contents,"utf-8"),R.push(x.path),t.info(`Added file: ${x.path}`);break;case"delete":await Rn.unlink(x.path),E.push(x.path),t.info(`Deleted file: ${x.path}`);break;case"update":let M=w(x.path,x.chunks);if(x.move_path){let r=oo.dirname(x.move_path);r!=="."&&r!=="/"&&await Rn.mkdir(r,{recursive:!0}),await Rn.writeFile(x.move_path,M.content,"utf-8"),await Rn.unlink(x.path),_.push(x.move_path),t.info(`Moved file: ${x.path} -> ${x.move_path}`)}else await Rn.writeFile(x.path,M.content,"utf-8"),_.push(x.path),t.info(`Updated file: ${x.path}`);break}return{added:R,modified:_,deleted:E}}D.applyHunksToFiles=l,n(l,"applyHunksToFiles");async function P(T){let{hunks:R}=s(T);return l(R)}D.applyPatch=P,n(P,"applyPatch");async function y(T,R){if(T.length===1)try{return s(T[0]),{type:"CorrectnessError",error:new Error("ImplicitInvocation")}}catch{}let _=p(T);switch(_.type){case"Body":let{args:E}=_,x=E.workdir?oo.resolve(R,E.workdir):R,k=new Map;for(let M of E.hunks){let r=oo.resolve(x,M.type==="update"&&M.move_path?M.move_path:M.path);switch(M.type){case"add":k.set(r,{type:"add",content:M.contents});break;case"delete":let u=oo.resolve(x,M.path);try{let L=await Rn.readFile(u,"utf-8");k.set(r,{type:"delete",content:L})}catch{return{type:"CorrectnessError",error:new Error(`Failed to read file for deletion: ${u}`)}}break;case"update":let g=oo.resolve(x,M.path);try{let L=w(g,M.chunks);k.set(r,{type:"update",unified_diff:L.unified_diff,move_path:M.move_path?oo.resolve(x,M.move_path):void 0,new_content:L.content})}catch(L){return{type:"CorrectnessError",error:L}}break}}return{type:"Body",action:{changes:k,patch:E.patch,cwd:x}};case"PatchParseError":return{type:"CorrectnessError",error:_.error};case"NotApplyPatch":return{type:"NotApplyPatch"}}}D.maybeParseApplyPatchVerified=y,n(y,"maybeParseApplyPatchVerified")})(Fs||={});import{createTwoFilesPatch as va,diffLines as bu}from"diff";var gu=`Use the \`apply_patch\` tool to edit files. Your patch language is a stripped\u2011down, file\u2011oriented diff format designed to be easy to parse and safe to apply. You can think of it as a high\u2011level envelope:
2209
+ `)}return M?x:""}n(C,"generateUnifiedDiff");async function l(T){if(T.length===0)throw new Error("No files were modified.");let R=[],_=[],E=[];for(let x of T)switch(x.type){case"add":let k=oo.dirname(x.path);k!=="."&&k!=="/"&&await Rn.mkdir(k,{recursive:!0}),await Rn.writeFile(x.path,x.contents,"utf-8"),R.push(x.path),t.info(`Added file: ${x.path}`);break;case"delete":await Rn.unlink(x.path),E.push(x.path),t.info(`Deleted file: ${x.path}`);break;case"update":let M=w(x.path,x.chunks);if(x.move_path){let r=oo.dirname(x.move_path);r!=="."&&r!=="/"&&await Rn.mkdir(r,{recursive:!0}),await Rn.writeFile(x.move_path,M.content,"utf-8"),await Rn.unlink(x.path),_.push(x.move_path),t.info(`Moved file: ${x.path} -> ${x.move_path}`)}else await Rn.writeFile(x.path,M.content,"utf-8"),_.push(x.path),t.info(`Updated file: ${x.path}`);break}return{added:R,modified:_,deleted:E}}D.applyHunksToFiles=l,n(l,"applyHunksToFiles");async function P(T){let{hunks:R}=s(T);return l(R)}D.applyPatch=P,n(P,"applyPatch");async function y(T,R){if(T.length===1)try{return s(T[0]),{type:"CorrectnessError",error:new Error("ImplicitInvocation")}}catch{}let _=p(T);switch(_.type){case"Body":let{args:E}=_,x=E.workdir?oo.resolve(R,E.workdir):R,k=new Map;for(let M of E.hunks){let r=oo.resolve(x,M.type==="update"&&M.move_path?M.move_path:M.path);switch(M.type){case"add":k.set(r,{type:"add",content:M.contents});break;case"delete":let u=oo.resolve(x,M.path);try{let L=await Rn.readFile(u,"utf-8");k.set(r,{type:"delete",content:L})}catch{return{type:"CorrectnessError",error:new Error(`Failed to read file for deletion: ${u}`)}}break;case"update":let g=oo.resolve(x,M.path);try{let L=w(g,M.chunks);k.set(r,{type:"update",unified_diff:L.unified_diff,move_path:M.move_path?oo.resolve(x,M.move_path):void 0,new_content:L.content})}catch(L){return{type:"CorrectnessError",error:L}}break}}return{type:"Body",action:{changes:k,patch:E.patch,cwd:x}};case"PatchParseError":return{type:"CorrectnessError",error:_.error};case"NotApplyPatch":return{type:"NotApplyPatch"}}}D.maybeParseApplyPatchVerified=y,n(y,"maybeParseApplyPatchVerified")})(Fs||={});import{createTwoFilesPatch as va,diffLines as wu}from"diff";var yu=`Use the \`apply_patch\` tool to edit files. Your patch language is a stripped\u2011down, file\u2011oriented diff format designed to be easy to parse and safe to apply. You can think of it as a high\u2011level envelope:
2210
2210
 
2211
2211
  *** Begin Patch
2212
2212
  [ one or more file sections ]
@@ -2239,13 +2239,13 @@ It is important to remember:
2239
2239
 
2240
2240
  - You must include a header with your intended action (Add/Delete/Update)
2241
2241
  - You must prefix new lines with \`+\` even when creating a new file
2242
- `;var Ky=yu.object({patchText:yu.string().describe("The full patch text that describes all changes to be made")}),wu=it.define("apply_patch",{description:gu,parameters:Ky,async execute(t,e){if(!t.patchText)throw new Error("patchText is required");let o;try{o=Fs.parsePatch(t.patchText).hunks}catch(f){throw new Error(`apply_patch verification failed: ${f}`)}if(o.length===0)throw t.patchText.replace(/\r\n/g,`
2242
+ `;var Xy=bu.object({patchText:bu.string().describe("The full patch text that describes all changes to be made")}),vu=it.define("apply_patch",{description:yu,parameters:Xy,async execute(t,e){if(!t.patchText)throw new Error("patchText is required");let o;try{o=Fs.parsePatch(t.patchText).hunks}catch(f){throw new Error(`apply_patch verification failed: ${f}`)}if(o.length===0)throw t.patchText.replace(/\r\n/g,`
2243
2243
  `).replace(/\r/g,`
2244
2244
  `).trim()===`*** Begin Patch
2245
2245
  *** End Patch`?new Error("patch rejected: empty patch"):new Error("apply_patch verification failed: no hunks found");let i=[],m="";for(let f of o){let v=kn.resolve(ne.directory,f.path);switch(await yn(e,v),f.type){case"add":{let h=f.contents.length===0||f.contents.endsWith(`
2246
2246
  `)?f.contents:`${f.contents}
2247
- `,S=no(va(v,v,"",h)),C=0,l=0;for(let P of bu("",h))P.added&&(C+=P.count||0),P.removed&&(l+=P.count||0);i.push({filePath:v,oldContent:"",newContent:h,type:"add",diff:S,additions:C,deletions:l}),m+=S+`
2248
- `;break}case"update":{let I=await hn.stat(v).catch(()=>null);if(!I||I.isDirectory())throw new Error(`apply_patch verification failed: Failed to read file to update: ${v}`);let h=await hn.readFile(v,"utf-8"),S=h;try{S=Fs.deriveNewContentsFromChunks(v,f.chunks).content}catch(D){throw new Error(`apply_patch verification failed: ${D}`)}let C=no(va(v,v,h,S)),l=0,P=0;for(let D of bu(h,S))D.added&&(l+=D.count||0),D.removed&&(P+=D.count||0);let y=f.move_path?kn.resolve(ne.directory,f.move_path):void 0;await yn(e,y),i.push({filePath:v,oldContent:h,newContent:S,type:f.move_path?"move":"update",movePath:y,diff:C,additions:l,deletions:P}),m+=C+`
2247
+ `,S=no(va(v,v,"",h)),C=0,l=0;for(let P of wu("",h))P.added&&(C+=P.count||0),P.removed&&(l+=P.count||0);i.push({filePath:v,oldContent:"",newContent:h,type:"add",diff:S,additions:C,deletions:l}),m+=S+`
2248
+ `;break}case"update":{let I=await hn.stat(v).catch(()=>null);if(!I||I.isDirectory())throw new Error(`apply_patch verification failed: Failed to read file to update: ${v}`);let h=await hn.readFile(v,"utf-8"),S=h;try{S=Fs.deriveNewContentsFromChunks(v,f.chunks).content}catch(D){throw new Error(`apply_patch verification failed: ${D}`)}let C=no(va(v,v,h,S)),l=0,P=0;for(let D of wu(h,S))D.added&&(l+=D.count||0),D.removed&&(P+=D.count||0);let y=f.move_path?kn.resolve(ne.directory,f.move_path):void 0;await yn(e,y),i.push({filePath:v,oldContent:h,newContent:S,type:f.move_path?"move":"update",movePath:y,diff:C,additions:l,deletions:P}),m+=C+`
2249
2249
  `;break}case"delete":{let I=await hn.readFile(v,"utf-8").catch(C=>{throw new Error(`apply_patch verification failed: ${C}`)}),h=no(va(v,v,I,"")),S=I.split(`
2250
2250
  `).length;i.push({filePath:v,oldContent:I,newContent:"",type:"delete",diff:h,additions:0,deletions:S}),m+=h+`
2251
2251
  `;break}}}let c=i.map(f=>({filePath:f.filePath,relativePath:kn.relative(ne.worktree,f.movePath??f.filePath).replaceAll("\\","/"),type:f.type,diff:f.diff,before:f.oldContent,after:f.newContent,additions:f.additions,deletions:f.deletions,movePath:f.movePath})),a=i.map(f=>kn.relative(ne.worktree,f.filePath).replaceAll("\\","/"));await e.ask({permission:"edit",patterns:a,always:["*"],metadata:{filepath:a.join(", "),diff:m,files:c}});for(let f of i)br.assert(f.filePath,"apply_patch"),f.movePath&&br.assert(f.movePath,"apply_patch");let d=[];for(let f of i){let v=f.type==="delete"?void 0:f.movePath??f.filePath;switch(f.type){case"add":await hn.mkdir(kn.dirname(f.filePath),{recursive:!0}),await hn.writeFile(f.filePath,f.newContent,"utf-8"),d.push({file:f.filePath,event:"add"});break;case"update":await hn.writeFile(f.filePath,f.newContent,"utf-8"),d.push({file:f.filePath,event:"change"});break;case"move":f.movePath&&(await hn.mkdir(kn.dirname(f.movePath),{recursive:!0}),await hn.writeFile(f.movePath,f.newContent,"utf-8"),await hn.unlink(f.filePath),d.push({file:f.filePath,event:"unlink"}),d.push({file:f.movePath,event:"add"}));break;case"delete":await hn.unlink(f.filePath),d.push({file:f.filePath,event:"unlink"});break}v&&(await vo.file(v),Me.publish(bo.Event.Edited,{file:v}))}for(let f of d)await Me.publish(wo.Event.Updated,f);for(let f of i){if(f.type==="delete")continue;let v=f.movePath??f.filePath;await ct.touchFile(v,!0)}let b=await ct.diagnostics(),p=`Success. Updated the following files:
@@ -2257,4 +2257,4 @@ LSP errors detected in ${kn.relative(ne.worktree,v).replaceAll("\\","/")}, pleas
2257
2257
  <diagnostics file="${v}">
2258
2258
  ${C.map(ct.Diagnostic.pretty).join(`
2259
2259
  `)}${l}
2260
- </diagnostics>`}}return{title:p,metadata:{diff:m,files:c,diagnostics:b},output:p}}});import{pathToFileURL as Zy}from"url";import{Effect as Cn,Layer as Wn,ServiceMap as Qy}from"effect";var As;(d=>{let t=Ae.create({service:"tool.registry"});class e extends Qy.Service()("@opencode/ToolRegistry"){static{n(this,"Service")}}d.Service=e,d.layer=Wn.effect(e,Cn.gen(function*(){let b=yield*Be.Service,s=yield*Mt.Service,p=n(j=>Cn.isEffect(j)?j:Cn.succeed(j),"build"),w=yield*ae.make(Cn.fn("ToolRegistry.state")(function*(j){let z=[];function V(se,F){return{id:se,init:n(async Z=>({parameters:Xy.object(F.args),description:F.description,execute:n(async(he,ge)=>{let Y={...ge,directory:j.directory,worktree:j.worktree},N=await F.execute(he,Y),q=await ln.output(N,{},Z?.agent);return{title:"",output:q.truncated?q.content:N,metadata:{truncated:q.truncated,outputPath:q.truncated?q.outputPath:void 0}}},"execute")}),"init")}}n(V,"fromPlugin");let G=(yield*b.directories()).flatMap(se=>Eo.scanSync("{tool,tools}/*.{js,ts}",{cwd:se,absolute:!0,dot:!0,symlink:!0}));G.length&&(yield*b.waitForDependencies());for(let se of G){let F=vu.basename(se,vu.extname(se)),Z=yield*Cn.promise(()=>process.platform==="win32"?import(se):import(Zy(se).href));for(let[he,ge]of Object.entries(Z))z.push(V(he==="default"?F:`${F}_${he}`,ge))}let ee=yield*s.list();for(let se of ee)for(let[F,Z]of Object.entries(se.tool??{}))z.push(V(F,Z));return{custom:z}})),f=yield*p(ru),v=yield*p(ed),I=yield*p(gd),h=yield*p(Wd),S=yield*p(Cd),C=yield*p(Nd),l=yield*p(_d),P=yield*p(ou),y=yield*p(Hd),D=yield*p(tu),T=yield*p(Kd),R=yield*p(cu),_=yield*p(pu),E=yield*p(au),x=yield*p(wu),k=yield*p(mu),M=yield*p(zd),r=yield*p(Kc),u=Cn.fn("ToolRegistry.all")(function*(j){let z=yield*b.get(),V=["app","cli","desktop"].includes(ze.OPENCODE_CLIENT)||ze.OPENCODE_ENABLE_QUESTION_TOOL;return[f,...V?[v]:[],I,h,S,C,l,P,y,D,T,R,_,E,x,...ze.OPENCODE_EXPERIMENTAL_LSP_TOOL?[k]:[],...z.experimental?.batch_tool===!0?[M]:[],...ze.OPENCODE_EXPERIMENTAL_PLAN_MODE&&ze.OPENCODE_CLIENT==="cli"?[r]:[],...j]}),g=Cn.fn("ToolRegistry.ids")(function*(){let j=yield*ae.get(w);return(yield*u(j.custom)).map(V=>V.id)}),L=Cn.fn("ToolRegistry.tools")(function*(j,z){let V=yield*ae.get(w),G=(yield*u(V.custom)).filter(ee=>{if(z?.permission){let F=["write","edit","patch","multiedit","apply_patch"].includes(ee.id)?"edit":ee.id;try{if(Ge.evaluate(F,"*",z.permission)?.action==="deny")return!1}catch{}}if(ee.id==="codesearch"||ee.id==="websearch")return j.providerID===rt.opencode||ze.OPENCODE_ENABLE_EXA;let se=!!mt.get("OPENCODE_E2E_LLM_URL")||j.modelID.includes("gpt-")&&!j.modelID.includes("oss")&&!j.modelID.includes("gpt-4");return ee.id==="apply_patch"?se:ee.id==="edit"||ee.id==="write"?!se:!0});return yield*Cn.forEach(G,Cn.fnUntraced(function*(ee){var he=[];try{let se=Mn(he,t.time(ee.id));let F=yield*Cn.promise(()=>ee.init({agent:z}));let Z={description:F.description,parameters:F.parameters};yield*s.trigger("tool.definition",{toolID:ee.id},Z);return{id:ee.id,description:Z.description,parameters:Z.parameters,execute:F.execute,formatValidationError:F.formatValidationError}}catch(ge){var Y=ge,N=!0}finally{jn(he,Y,N)}}),{concurrency:"unbounded"})});return e.of({ids:g,named:{task:y,read:h},tools:L})})),d.defaultLayer=Wn.unwrap(Cn.sync(()=>d.layer.pipe(Wn.provide(Be.defaultLayer),Wn.provide(Mt.defaultLayer),Wn.provide(Ln.defaultLayer),Wn.provide(mr.defaultLayer),Wn.provide(ct.defaultLayer),Wn.provide(rn.defaultLayer),Wn.provide(ho.defaultLayer),Wn.provide(st.defaultLayer))));let{runPromise:m}=qe(e,d.defaultLayer);async function c(){return m(b=>b.ids())}d.ids=c,n(c,"ids");async function a(b,s){return m(p=>p.tools(b,s))}d.tools=a,n(a,"tools")})(As||={});export{rt as a,Et as b,Gs as c,Nt as d,Sn as e,ct as f,cn as g,Ne as h,co as i,cs as j,Gt as k,Mo as l,Ge as m,un as n,In as o,Zn as p,Lo as q,Oo as r,Ln as s,Lt as t,Ps as u,yo as v,bo as w,wo as x,vo as y,mr as z,As as A,Uo as B,qo as C,Fn as D,Yi as E,Ke as F,Mt as G};
2260
+ </diagnostics>`}}return{title:p,metadata:{diff:m,files:c,diagnostics:b},output:p}}});import{pathToFileURL as Qy}from"url";import{Effect as Cn,Layer as Wn,ServiceMap as eb}from"effect";var As;(d=>{let t=Ae.create({service:"tool.registry"});class e extends eb.Service()("@opencode/ToolRegistry"){static{n(this,"Service")}}d.Service=e,d.layer=Wn.effect(e,Cn.gen(function*(){let b=yield*Be.Service,s=yield*Mt.Service,p=n(j=>Cn.isEffect(j)?j:Cn.succeed(j),"build"),w=yield*ae.make(Cn.fn("ToolRegistry.state")(function*(j){let z=[];function V(se,F){return{id:se,init:n(async Z=>({parameters:Zy.object(F.args),description:F.description,execute:n(async(he,ge)=>{let Y={...ge,directory:j.directory,worktree:j.worktree},N=await F.execute(he,Y),q=await ln.output(N,{},Z?.agent);return{title:"",output:q.truncated?q.content:N,metadata:{truncated:q.truncated,outputPath:q.truncated?q.outputPath:void 0}}},"execute")}),"init")}}n(V,"fromPlugin");let G=(yield*b.directories()).flatMap(se=>Eo.scanSync("{tool,tools}/*.{js,ts}",{cwd:se,absolute:!0,dot:!0,symlink:!0}));G.length&&(yield*b.waitForDependencies());for(let se of G){let F=xu.basename(se,xu.extname(se)),Z=yield*Cn.promise(()=>process.platform==="win32"?import(se):import(Qy(se).href));for(let[he,ge]of Object.entries(Z))z.push(V(he==="default"?F:`${F}_${he}`,ge))}let ee=yield*s.list();for(let se of ee)for(let[F,Z]of Object.entries(se.tool??{}))z.push(V(F,Z));return{custom:z}})),f=yield*p(su),v=yield*p(td),I=yield*p(yd),h=yield*p(Bd),S=yield*p(Ad),C=yield*p(Ud),l=yield*p(Rd),P=yield*p(ru),y=yield*p(Vd),D=yield*p(nu),T=yield*p(Xd),R=yield*p(du),_=yield*p(fu),E=yield*p(lu),x=yield*p(vu),k=yield*p(hu),M=yield*p(Fd),r=yield*p(Xc),u=Cn.fn("ToolRegistry.all")(function*(j){let z=yield*b.get(),V=["app","cli","desktop"].includes(ze.OPENCODE_CLIENT)||ze.OPENCODE_ENABLE_QUESTION_TOOL;return[f,...V?[v]:[],I,h,S,C,l,P,y,D,T,R,_,E,x,...ze.OPENCODE_EXPERIMENTAL_LSP_TOOL?[k]:[],...z.experimental?.batch_tool===!0?[M]:[],...ze.OPENCODE_EXPERIMENTAL_PLAN_MODE&&ze.OPENCODE_CLIENT==="cli"?[r]:[],...j]}),g=Cn.fn("ToolRegistry.ids")(function*(){let j=yield*ae.get(w);return(yield*u(j.custom)).map(V=>V.id)}),L=Cn.fn("ToolRegistry.tools")(function*(j,z){let V=yield*ae.get(w),G=(yield*u(V.custom)).filter(ee=>{if(z?.permission){let F=["write","edit","patch","multiedit","apply_patch"].includes(ee.id)?"edit":ee.id;try{if(Ge.evaluate(F,"*",z.permission)?.action==="deny")return!1}catch{}}if(ee.id==="codesearch"||ee.id==="websearch")return j.providerID===rt.opencode||ze.OPENCODE_ENABLE_EXA;let se=!!mt.get("OPENCODE_E2E_LLM_URL")||j.modelID.includes("gpt-")&&!j.modelID.includes("oss")&&!j.modelID.includes("gpt-4");return ee.id==="apply_patch"?se:ee.id==="edit"||ee.id==="write"?!se:!0});return yield*Cn.forEach(G,Cn.fnUntraced(function*(ee){var he=[];try{let se=Mn(he,t.time(ee.id));let F=yield*Cn.promise(()=>ee.init({agent:z}));let Z={description:F.description,parameters:F.parameters};yield*s.trigger("tool.definition",{toolID:ee.id},Z);return{id:ee.id,description:Z.description,parameters:Z.parameters,execute:F.execute,formatValidationError:F.formatValidationError}}catch(ge){var Y=ge,N=!0}finally{jn(he,Y,N)}}),{concurrency:"unbounded"})});return e.of({ids:g,named:{task:y,read:h},tools:L})})),d.defaultLayer=Wn.unwrap(Cn.sync(()=>d.layer.pipe(Wn.provide(Be.defaultLayer),Wn.provide(Mt.defaultLayer),Wn.provide(Ln.defaultLayer),Wn.provide(mr.defaultLayer),Wn.provide(ct.defaultLayer),Wn.provide(rn.defaultLayer),Wn.provide(ho.defaultLayer),Wn.provide(st.defaultLayer))));let{runPromise:m}=qe(e,d.defaultLayer);async function c(){return m(b=>b.ids())}d.ids=c,n(c,"ids");async function a(b,s){return m(p=>p.tools(b,s))}d.tools=a,n(a,"tools")})(As||={});export{rt as a,Et as b,Gs as c,Nt as d,Sn as e,ct as f,cn as g,Ne as h,co as i,cs as j,Gt as k,Mo as l,Ge as m,un as n,In as o,Zn as p,Lo as q,Oo as r,Ln as s,Lt as t,Ps as u,yo as v,bo as w,wo as x,vo as y,mr as z,As as A,Uo as B,qo as C,Fn as D,Yi as E,Ke as F,Mt as G};