alchemylab-opencode 2.0.5 → 2.0.6

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.
Files changed (43) hide show
  1. package/dist/{anthropic-YQ2VCNTB.js → anthropic-T5N2PBYZ.js} +1 -1
  2. package/dist/{app-runtime-GFPPHAHM.js → app-runtime-7F23FF2J.js} +1 -1
  3. package/dist/{chunk-6AKI3RBD.js → chunk-2MYZ2XOM.js} +1 -1
  4. package/dist/{chunk-LUMNYJ5D.js → chunk-5KJU6PWP.js} +1 -1
  5. package/dist/{chunk-YWZH5MZN.js → chunk-6T3FLHRQ.js} +1 -1
  6. package/dist/{chunk-YDNJZVRR.js → chunk-7XX6TY62.js} +1 -1
  7. package/dist/{chunk-FLHFX43G.js → chunk-I3D3ARUM.js} +1 -1
  8. package/dist/{chunk-HEEAGIBZ.js → chunk-JJ36LIK7.js} +103 -103
  9. package/dist/{chunk-EXCQNXCF.js → chunk-KG42AAYT.js} +1 -1
  10. package/dist/{chunk-B7LCUFWA.js → chunk-KLYQJYJK.js} +3 -3
  11. package/dist/{chunk-BAULQCM7.js → chunk-KYVPJTO6.js} +3 -3
  12. package/dist/{chunk-VG5EGQPG.js → chunk-LTJ2SJ5D.js} +1 -1
  13. package/dist/{chunk-55SXVZ3J.js → chunk-QIVM3JAX.js} +1 -1
  14. package/dist/{chunk-5AXNRW7L.js → chunk-R2GWBJEP.js} +1 -1
  15. package/dist/{chunk-ZR6CXXUN.js → chunk-TK5R7QUN.js} +1 -1
  16. package/dist/{chunk-ROZTUM2T.js → chunk-UDFLPGTN.js} +3 -3
  17. package/dist/{chunk-XMCVYTKN.js → chunk-Y6IR3K7U.js} +1 -1
  18. package/dist/{code-mode-LEVRRN6O.js → code-mode-GPSP6N3D.js} +1 -1
  19. package/dist/{dist-Y7XJ2TDX.js → dist-5YKV3FK2.js} +1 -1
  20. package/dist/{dist-37YOR7EF.js → dist-LMRB4Y6F.js} +1 -1
  21. package/dist/{dist-es-IQZPYE6S.js → dist-es-FCKHRQES.js} +1 -1
  22. package/dist/{dist-es-NJU2JDGG.js → dist-es-RY5A6FVP.js} +1 -1
  23. package/dist/{dist-es-PEWVLOVZ.js → dist-es-T6DXROPM.js} +1 -1
  24. package/dist/{dist-es-HYEV5NJY.js → dist-es-YMD6O5LJ.js} +2 -2
  25. package/dist/{dist-es-2V53AUOV.js → dist-es-ZLF3OG2U.js} +1 -1
  26. package/dist/{photon-5AJPGVCX.js → photon-W56QZY4L.js} +1 -1
  27. package/dist/run.js +1 -1
  28. package/dist/serve.js +1 -1
  29. package/dist/{server-4GCT6Z5B.js → server-4JDJ4WDE.js} +1 -1
  30. package/dist/{session-Y3Y6G2WT.js → session-TLPYHDHX.js} +1 -1
  31. package/dist/{src-X7ZXQLNN.js → src-E4JN4UBH.js} +1 -1
  32. package/dist/{worktree-YPE74GDD.js → worktree-GO44RQK6.js} +1 -1
  33. package/package.json +1 -1
  34. /package/dist/{dist-RDYS4XXO.js → dist-3RSYCY7N.js} +0 -0
  35. /package/dist/{lib-JC7MYWBJ.js → lib-ONP3PPPZ.js} +0 -0
  36. /package/dist/{mime-types-2T5FPOIB.js → mime-types-OTOCULMS.js} +0 -0
  37. /package/dist/{signin-U2KKV7OZ.js → signin-YLB2YGYR.js} +0 -0
  38. /package/dist/{src-ABUDV3W3.js → src-TZZ2I2U2.js} +0 -0
  39. /package/dist/{src-NICVS6EV.js → src-YG3K7N4O.js} +0 -0
  40. /package/dist/{sso-oidc-KFJXXBLA.js → sso-oidc-QFGQ3HPT.js} +0 -0
  41. /package/dist/{sts-XIN552ID.js → sts-OAOAJB3M.js} +0 -0
  42. /package/dist/{token-D3TCB33O.js → token-MXFK7ACR.js} +0 -0
  43. /package/dist/{token-util-IOCO6RZC.js → token-util-IHC7JYWJ.js} +0 -0
@@ -15,38 +15,38 @@ import { dirname as __alchemyDirname } from 'node:path';
15
15
  const __alchemy_filename = __alchemyFileURLToPath(import.meta.url);
16
16
  const __alchemy_dirname = __alchemyDirname(__alchemy_filename);
17
17
 
18
- import{A as Ke,B as Ct,C as ns,E as Xu,F as ft,G as bt,H as Ft,b as _n,h as ai,l as ci,m as Au,n as Mu,o as _u,p as Ha,q as Nu,r as ju,s as Uu,u as zu,w as et,x as Hu,y as Yu,z as Qn}from"./chunk-B7LCUFWA.js";import{b as yi,c as Zo,d as Ju,e as Ku,g as er}from"./chunk-YWZH5MZN.js";import{L as zt,N as Ze,P as Xn,R as hi,U as Gu,V as gi,X as cn,i as Iu}from"./chunk-ROZTUM2T.js";import{R as me,a as ts,b as Ou,c as Lu,d as Dn,e as Za,f as qu,g as wo,h as mi,i as nc,j as Rt,k as ct,l as We,m as oc,n as Wu,o as Vu,p as nt,q as an}from"./chunk-FLHFX43G.js";import{$a as yn,C as mu,Da as V,E as hu,F as gu,Fa as pt,G as yu,Ga as pi,H as bu,I as wu,J as vu,Ja as we,K as St,Ka as Xa,L as xu,La as it,M as si,Ma as gn,N as Xo,Na as Kn,O as Wa,Oa as Qa,P as Su,Pa as at,Q as Va,R as bo,S as Jn,T as On,U as za,_a as Ne,ab as fi,c as Yn,cb as Bu,f as qa,fa as Du,ga as Eu,gb as $u,h as go,ha as Ut,ia as li,ib as ec,jb as Qo,k as kn,kb as Ee,la as Ya,lb as tc,ma as Ja,mb as Ve,pa as Ka,r as ut,ra as di,s as Vt,u as ri,v as Pt,va as Xt,wa as Fu,xa as ui,y as yo}from"./chunk-BAULQCM7.js";import{G as Ga}from"./chunk-V6FDDNGV.js";import{a as ii}from"./chunk-QCRIXKIC.js";import{a as Pu,b as Ru,c as Cu}from"./chunk-LIXP4TPL.js";import{a as Tu}from"./chunk-M6E6KNLV.js";import{d as kg}from"./chunk-NDI67DRG.js";import{a as oi}from"./chunk-K5LKDIVU.js";import{c as ie,d as Hn,f as ho}from"./chunk-5AXNRW7L.js";import{$a as Zs,$b as Ae,Aa as Tt,Ab as Qd,Bb as ei,Cb as Ba,Fa as Cn,Fb as $a,Gb as Zd,Ib as eu,Jb as tu,Kb as nu,La as sn,Lb as ou,Ma as po,Nb as ru,Pa as It,Qb as su,Rb as Mn,Sb as st,Tb as yt,Wb as es,Xb as Gn,Ya as Ua,Zc as lu,ac as Yo,b as qd,bc as iu,bd as du,c as Vn,cd as uu,db as Kr,dc as ti,de as pu,eb as Jd,fa as Vd,g as ja,gc as Jo,ge as fu,ha as De,hc as au,ia as Xs,ic as Sn,jc as mo,lb as Xr,m as Jr,ma as mn,mb as Se,mc as In,nb as Qr,nc as cu,oa as zd,ob as Zr,pa as hn,pc as Me,q as Ye,qa as Gd,qb as tt,r as zn,rb as fo,rc as ni,sa as Hd,sb as An,tb as Kd,ub as Fa,uc as Ko,vb as Wt,wb as Xd,x as fn,xb as dt,ya as Qs,za as Yd}from"./chunk-YDNJZVRR.js";import{g as ku}from"./chunk-UCLPBO4I.js";import{h as Ks,k as Ho,t as Rn}from"./chunk-VWLJXTZ5.js";import{Ah as Hs,Bc as Et,Bf as r,Bh as Ys,Dh as jd,Fg as Yr,Fi as Wd,Ig as Cd,Ih as Ud,Ma as Dd,Nh as Fd,Tc as Pe,Th as Bd,Wh as Js,Yh as Na,Z as kd,Zh as $d,aa as xn,bb as Ce,bi as xt,dc as gt,hh as Oa,ja as Ma,jd as ot,lc as wt,mh as La,nb as Ed,pa as _a,pd as Td,pj as c,qh as Ad,rg as Vs,rh as Md,tg as Rd,th as _d,uh as zs,vh as Gs,wa as Go,wh as Od,xh as Ld,zd as Pd,zh as Nd}from"./chunk-ELPXQ32J.js";import{a as s,b as Hr,d as Dt,e as fe,g as Id}from"./chunk-2MRHL4B2.js";var vr=Dt(Lt=>{"use strict";Object.defineProperty(Lt,"__esModule",{value:!0});Lt.stringArray=Lt.array=Lt.func=Lt.error=Lt.number=Lt.string=Lt.boolean=void 0;function ex(e){return e===!0||e===!1}s(ex,"boolean");Lt.boolean=ex;function qf(e){return typeof e=="string"||e instanceof String}s(qf,"string");Lt.string=qf;function tx(e){return typeof e=="number"||e instanceof Number}s(tx,"number");Lt.number=tx;function nx(e){return e instanceof Error}s(nx,"error");Lt.error=nx;function ox(e){return typeof e=="function"}s(ox,"func");Lt.func=ox;function Wf(e){return Array.isArray(e)}s(Wf,"array");Lt.array=Wf;function rx(e){return Wf(e)&&e.every(t=>qf(t))}s(rx,"stringArray");Lt.stringArray=rx});var tl=Dt(be=>{"use strict";Object.defineProperty(be,"__esModule",{value:!0});be.Message=be.NotificationType9=be.NotificationType8=be.NotificationType7=be.NotificationType6=be.NotificationType5=be.NotificationType4=be.NotificationType3=be.NotificationType2=be.NotificationType1=be.NotificationType0=be.NotificationType=be.RequestType9=be.RequestType8=be.RequestType7=be.RequestType6=be.RequestType5=be.RequestType4=be.RequestType3=be.RequestType2=be.RequestType1=be.RequestType=be.RequestType0=be.AbstractMessageSignature=be.ParameterStructures=be.ResponseError=be.ErrorCodes=void 0;var Eo=vr(),Ac;(function(e){e.ParseError=-32700,e.InvalidRequest=-32600,e.MethodNotFound=-32601,e.InvalidParams=-32602,e.InternalError=-32603,e.jsonrpcReservedErrorRangeStart=-32099,e.serverErrorStart=-32099,e.MessageWriteError=-32099,e.MessageReadError=-32098,e.PendingResponseRejected=-32097,e.ConnectionInactive=-32096,e.ServerNotInitialized=-32002,e.UnknownErrorCode=-32001,e.jsonrpcReservedErrorRangeEnd=-32e3,e.serverErrorEnd=-32e3})(Ac||(be.ErrorCodes=Ac={}));var Mc=class e extends Error{static{s(this,"ResponseError")}constructor(t,n,o){super(n),this.code=Eo.number(t)?t:Ac.UnknownErrorCode,this.data=o,Object.setPrototypeOf(this,e.prototype)}toJson(){let t={code:this.code,message:this.message};return this.data!==void 0&&(t.data=this.data),t}};be.ResponseError=Mc;var Yt=class e{static{s(this,"ParameterStructures")}constructor(t){this.kind=t}static is(t){return t===e.auto||t===e.byName||t===e.byPosition}toString(){return this.kind}};be.ParameterStructures=Yt;Yt.auto=new Yt("auto");Yt.byPosition=new Yt("byPosition");Yt.byName=new Yt("byName");var lt=class{static{s(this,"AbstractMessageSignature")}constructor(t,n){this.method=t,this.numberOfParams=n}get parameterStructures(){return Yt.auto}};be.AbstractMessageSignature=lt;var _c=class extends lt{static{s(this,"RequestType0")}constructor(t){super(t,0)}};be.RequestType0=_c;var Oc=class extends lt{static{s(this,"RequestType")}constructor(t,n=Yt.auto){super(t,1),this._parameterStructures=n}get parameterStructures(){return this._parameterStructures}};be.RequestType=Oc;var Lc=class extends lt{static{s(this,"RequestType1")}constructor(t,n=Yt.auto){super(t,1),this._parameterStructures=n}get parameterStructures(){return this._parameterStructures}};be.RequestType1=Lc;var Nc=class extends lt{static{s(this,"RequestType2")}constructor(t){super(t,2)}};be.RequestType2=Nc;var jc=class extends lt{static{s(this,"RequestType3")}constructor(t){super(t,3)}};be.RequestType3=jc;var Uc=class extends lt{static{s(this,"RequestType4")}constructor(t){super(t,4)}};be.RequestType4=Uc;var Fc=class extends lt{static{s(this,"RequestType5")}constructor(t){super(t,5)}};be.RequestType5=Fc;var Bc=class extends lt{static{s(this,"RequestType6")}constructor(t){super(t,6)}};be.RequestType6=Bc;var $c=class extends lt{static{s(this,"RequestType7")}constructor(t){super(t,7)}};be.RequestType7=$c;var qc=class extends lt{static{s(this,"RequestType8")}constructor(t){super(t,8)}};be.RequestType8=qc;var Wc=class extends lt{static{s(this,"RequestType9")}constructor(t){super(t,9)}};be.RequestType9=Wc;var Vc=class extends lt{static{s(this,"NotificationType")}constructor(t,n=Yt.auto){super(t,1),this._parameterStructures=n}get parameterStructures(){return this._parameterStructures}};be.NotificationType=Vc;var zc=class extends lt{static{s(this,"NotificationType0")}constructor(t){super(t,0)}};be.NotificationType0=zc;var Gc=class extends lt{static{s(this,"NotificationType1")}constructor(t,n=Yt.auto){super(t,1),this._parameterStructures=n}get parameterStructures(){return this._parameterStructures}};be.NotificationType1=Gc;var Hc=class extends lt{static{s(this,"NotificationType2")}constructor(t){super(t,2)}};be.NotificationType2=Hc;var Yc=class extends lt{static{s(this,"NotificationType3")}constructor(t){super(t,3)}};be.NotificationType3=Yc;var Jc=class extends lt{static{s(this,"NotificationType4")}constructor(t){super(t,4)}};be.NotificationType4=Jc;var Kc=class extends lt{static{s(this,"NotificationType5")}constructor(t){super(t,5)}};be.NotificationType5=Kc;var Xc=class extends lt{static{s(this,"NotificationType6")}constructor(t){super(t,6)}};be.NotificationType6=Xc;var Qc=class extends lt{static{s(this,"NotificationType7")}constructor(t){super(t,7)}};be.NotificationType7=Qc;var Zc=class extends lt{static{s(this,"NotificationType8")}constructor(t){super(t,8)}};be.NotificationType8=Zc;var el=class extends lt{static{s(this,"NotificationType9")}constructor(t){super(t,9)}};be.NotificationType9=el;var Vf;(function(e){function t(i){let a=i;return a&&Eo.string(a.method)&&(Eo.string(a.id)||Eo.number(a.id))}s(t,"isRequest"),e.isRequest=t;function n(i){let a=i;return a&&Eo.string(a.method)&&i.id===void 0}s(n,"isNotification"),e.isNotification=n;function o(i){let a=i;return a&&(a.result!==void 0||!!a.error)&&(Eo.string(a.id)||Eo.number(a.id)||a.id===null)}s(o,"isResponse"),e.isResponse=o})(Vf||(be.Message=Vf={}))});var ol=Dt(no=>{"use strict";var zf;Object.defineProperty(no,"__esModule",{value:!0});no.LRUCache=no.LinkedMap=no.Touch=void 0;var Nt;(function(e){e.None=0,e.First=1,e.AsOld=e.First,e.Last=2,e.AsNew=e.Last})(Nt||(no.Touch=Nt={}));var qi=class{static{s(this,"LinkedMap")}constructor(){this[zf]="LinkedMap",this._map=new Map,this._head=void 0,this._tail=void 0,this._size=0,this._state=0}clear(){this._map.clear(),this._head=void 0,this._tail=void 0,this._size=0,this._state++}isEmpty(){return!this._head&&!this._tail}get size(){return this._size}get first(){return this._head?.value}get last(){return this._tail?.value}has(t){return this._map.has(t)}get(t,n=Nt.None){let o=this._map.get(t);if(o)return n!==Nt.None&&this.touch(o,n),o.value}set(t,n,o=Nt.None){let i=this._map.get(t);if(i)i.value=n,o!==Nt.None&&this.touch(i,o);else{switch(i={key:t,value:n,next:void 0,previous:void 0},o){case Nt.None:this.addItemLast(i);break;case Nt.First:this.addItemFirst(i);break;case Nt.Last:this.addItemLast(i);break;default:this.addItemLast(i);break}this._map.set(t,i),this._size++}return this}delete(t){return!!this.remove(t)}remove(t){let n=this._map.get(t);if(n)return this._map.delete(t),this.removeItem(n),this._size--,n.value}shift(){if(!this._head&&!this._tail)return;if(!this._head||!this._tail)throw new Error("Invalid list");let t=this._head;return this._map.delete(t.key),this.removeItem(t),this._size--,t.value}forEach(t,n){let o=this._state,i=this._head;for(;i;){if(n?t.bind(n)(i.value,i.key,this):t(i.value,i.key,this),this._state!==o)throw new Error("LinkedMap got modified during iteration.");i=i.next}}keys(){let t=this._state,n=this._head,o={[Symbol.iterator]:()=>o,next:s(()=>{if(this._state!==t)throw new Error("LinkedMap got modified during iteration.");if(n){let i={value:n.key,done:!1};return n=n.next,i}else return{value:void 0,done:!0}},"next")};return o}values(){let t=this._state,n=this._head,o={[Symbol.iterator]:()=>o,next:s(()=>{if(this._state!==t)throw new Error("LinkedMap got modified during iteration.");if(n){let i={value:n.value,done:!1};return n=n.next,i}else return{value:void 0,done:!0}},"next")};return o}entries(){let t=this._state,n=this._head,o={[Symbol.iterator]:()=>o,next:s(()=>{if(this._state!==t)throw new Error("LinkedMap got modified during iteration.");if(n){let i={value:[n.key,n.value],done:!1};return n=n.next,i}else return{value:void 0,done:!0}},"next")};return o}[(zf=Symbol.toStringTag,Symbol.iterator)](){return this.entries()}trimOld(t){if(t>=this.size)return;if(t===0){this.clear();return}let n=this._head,o=this.size;for(;n&&o>t;)this._map.delete(n.key),n=n.next,o--;this._head=n,this._size=o,n&&(n.previous=void 0),this._state++}addItemFirst(t){if(!this._head&&!this._tail)this._tail=t;else if(this._head)t.next=this._head,this._head.previous=t;else throw new Error("Invalid list");this._head=t,this._state++}addItemLast(t){if(!this._head&&!this._tail)this._head=t;else if(this._tail)t.previous=this._tail,this._tail.next=t;else throw new Error("Invalid list");this._tail=t,this._state++}removeItem(t){if(t===this._head&&t===this._tail)this._head=void 0,this._tail=void 0;else if(t===this._head){if(!t.next)throw new Error("Invalid list");t.next.previous=void 0,this._head=t.next}else if(t===this._tail){if(!t.previous)throw new Error("Invalid list");t.previous.next=void 0,this._tail=t.previous}else{let n=t.next,o=t.previous;if(!n||!o)throw new Error("Invalid list");n.previous=o,o.next=n}t.next=void 0,t.previous=void 0,this._state++}touch(t,n){if(!this._head||!this._tail)throw new Error("Invalid list");if(!(n!==Nt.First&&n!==Nt.Last)){if(n===Nt.First){if(t===this._head)return;let o=t.next,i=t.previous;t===this._tail?(i.next=void 0,this._tail=i):(o.previous=i,i.next=o),t.previous=void 0,t.next=this._head,this._head.previous=t,this._head=t,this._state++}else if(n===Nt.Last){if(t===this._tail)return;let o=t.next,i=t.previous;t===this._head?(o.previous=void 0,this._head=o):(o.previous=i,i.next=o),t.next=void 0,t.previous=this._tail,this._tail.next=t,this._tail=t,this._state++}}}toJSON(){let t=[];return this.forEach((n,o)=>{t.push([o,n])}),t}fromJSON(t){this.clear();for(let[n,o]of t)this.set(n,o)}};no.LinkedMap=qi;var nl=class extends qi{static{s(this,"LRUCache")}constructor(t,n=1){super(),this._limit=t,this._ratio=Math.min(Math.max(0,n),1)}get limit(){return this._limit}set limit(t){this._limit=t,this.checkTrim()}get ratio(){return this._ratio}set ratio(t){this._ratio=Math.min(Math.max(0,t),1),this.checkTrim()}get(t,n=Nt.AsNew){return super.get(t,n)}peek(t){return super.get(t,Nt.None)}set(t,n){return super.set(t,n,Nt.Last),this.checkTrim(),this}checkTrim(){this.size>this._limit&&this.trimOld(Math.round(this._limit*this._ratio))}};no.LRUCache=nl});var Hf=Dt(Wi=>{"use strict";Object.defineProperty(Wi,"__esModule",{value:!0});Wi.Disposable=void 0;var Gf;(function(e){function t(n){return{dispose:n}}s(t,"create"),e.create=t})(Gf||(Wi.Disposable=Gf={}))});var oo=Dt(il=>{"use strict";Object.defineProperty(il,"__esModule",{value:!0});var rl;function sl(){if(rl===void 0)throw new Error("No runtime abstraction layer installed");return rl}s(sl,"RAL");(function(e){function t(n){if(n===void 0)throw new Error("No runtime abstraction layer provided");rl=n}s(t,"install"),e.install=t})(sl||(sl={}));il.default=sl});var Sr=Dt(xr=>{"use strict";Object.defineProperty(xr,"__esModule",{value:!0});xr.Emitter=xr.Event=void 0;var sx=oo(),Yf;(function(e){let t={dispose(){}};e.None=function(){return t}})(Yf||(xr.Event=Yf={}));var al=class{static{s(this,"CallbackList")}add(t,n=null,o){this._callbacks||(this._callbacks=[],this._contexts=[]),this._callbacks.push(t),this._contexts.push(n),Array.isArray(o)&&o.push({dispose:s(()=>this.remove(t,n),"dispose")})}remove(t,n=null){if(!this._callbacks)return;let o=!1;for(let i=0,a=this._callbacks.length;i<a;i++)if(this._callbacks[i]===t)if(this._contexts[i]===n){this._callbacks.splice(i,1),this._contexts.splice(i,1);return}else o=!0;if(o)throw new Error("When adding a listener with a context, you should remove it with the same context")}invoke(...t){if(!this._callbacks)return[];let n=[],o=this._callbacks.slice(0),i=this._contexts.slice(0);for(let a=0,l=o.length;a<l;a++)try{n.push(o[a].apply(i[a],t))}catch(u){(0,sx.default)().console.error(u)}return n}isEmpty(){return!this._callbacks||this._callbacks.length===0}dispose(){this._callbacks=void 0,this._contexts=void 0}},Vi=class e{static{s(this,"Emitter")}constructor(t){this._options=t}get event(){return this._event||(this._event=(t,n,o)=>{this._callbacks||(this._callbacks=new al),this._options&&this._options.onFirstListenerAdd&&this._callbacks.isEmpty()&&this._options.onFirstListenerAdd(this),this._callbacks.add(t,n);let i={dispose:s(()=>{this._callbacks&&(this._callbacks.remove(t,n),i.dispose=e._noop,this._options&&this._options.onLastListenerRemove&&this._callbacks.isEmpty()&&this._options.onLastListenerRemove(this))},"dispose")};return Array.isArray(o)&&o.push(i),i}),this._event}fire(t){this._callbacks&&this._callbacks.invoke.call(this._callbacks,t)}dispose(){this._callbacks&&(this._callbacks.dispose(),this._callbacks=void 0)}};xr.Emitter=Vi;Vi._noop=function(){}});var Hi=Dt(Ir=>{"use strict";Object.defineProperty(Ir,"__esModule",{value:!0});Ir.CancellationTokenSource=Ir.CancellationToken=void 0;var ix=oo(),ax=vr(),cl=Sr(),zi;(function(e){e.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:cl.Event.None}),e.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:cl.Event.None});function t(n){let o=n;return o&&(o===e.None||o===e.Cancelled||ax.boolean(o.isCancellationRequested)&&!!o.onCancellationRequested)}s(t,"is"),e.is=t})(zi||(Ir.CancellationToken=zi={}));var cx=Object.freeze(function(e,t){let n=(0,ix.default)().timer.setTimeout(e.bind(t),0);return{dispose(){n.dispose()}}}),Gi=class{static{s(this,"MutableToken")}constructor(){this._isCancelled=!1}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?cx:(this._emitter||(this._emitter=new cl.Emitter),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=void 0)}},ll=class{static{s(this,"CancellationTokenSource")}get token(){return this._token||(this._token=new Gi),this._token}cancel(){this._token?this._token.cancel():this._token=zi.Cancelled}dispose(){this._token?this._token instanceof Gi&&this._token.dispose():this._token=zi.None}};Ir.CancellationTokenSource=ll});var Jf=Dt(kr=>{"use strict";Object.defineProperty(kr,"__esModule",{value:!0});kr.SharedArrayReceiverStrategy=kr.SharedArraySenderStrategy=void 0;var lx=Hi(),bs;(function(e){e.Continue=0,e.Cancelled=1})(bs||(bs={}));var dl=class{static{s(this,"SharedArraySenderStrategy")}constructor(){this.buffers=new Map}enableCancellation(t){if(t.id===null)return;let n=new SharedArrayBuffer(4),o=new Int32Array(n,0,1);o[0]=bs.Continue,this.buffers.set(t.id,n),t.$cancellationData=n}async sendCancellation(t,n){let o=this.buffers.get(n);if(o===void 0)return;let i=new Int32Array(o,0,1);Atomics.store(i,0,bs.Cancelled)}cleanup(t){this.buffers.delete(t)}dispose(){this.buffers.clear()}};kr.SharedArraySenderStrategy=dl;var ul=class{static{s(this,"SharedArrayBufferCancellationToken")}constructor(t){this.data=new Int32Array(t,0,1)}get isCancellationRequested(){return Atomics.load(this.data,0)===bs.Cancelled}get onCancellationRequested(){throw new Error("Cancellation over SharedArrayBuffer doesn't support cancellation events")}},pl=class{static{s(this,"SharedArrayBufferCancellationTokenSource")}constructor(t){this.token=new ul(t)}cancel(){}dispose(){}},fl=class{static{s(this,"SharedArrayReceiverStrategy")}constructor(){this.kind="request"}createCancellationTokenSource(t){let n=t.$cancellationData;return n===void 0?new lx.CancellationTokenSource:new pl(n)}};kr.SharedArrayReceiverStrategy=fl});var hl=Dt(Yi=>{"use strict";Object.defineProperty(Yi,"__esModule",{value:!0});Yi.Semaphore=void 0;var dx=oo(),ml=class{static{s(this,"Semaphore")}constructor(t=1){if(t<=0)throw new Error("Capacity must be greater than 0");this._capacity=t,this._active=0,this._waiting=[]}lock(t){return new Promise((n,o)=>{this._waiting.push({thunk:t,resolve:n,reject:o}),this.runNext()})}get active(){return this._active}runNext(){this._waiting.length===0||this._active===this._capacity||(0,dx.default)().timer.setImmediate(()=>this.doRunNext())}doRunNext(){if(this._waiting.length===0||this._active===this._capacity)return;let t=this._waiting.shift();if(this._active++,this._active>this._capacity)throw new Error("To many thunks active");try{let n=t.thunk();n instanceof Promise?n.then(o=>{this._active--,t.resolve(o),this.runNext()},o=>{this._active--,t.reject(o),this.runNext()}):(this._active--,t.resolve(n),this.runNext())}catch(n){this._active--,t.reject(n),this.runNext()}}};Yi.Semaphore=ml});var Xf=Dt(ro=>{"use strict";Object.defineProperty(ro,"__esModule",{value:!0});ro.ReadableStreamMessageReader=ro.AbstractMessageReader=ro.MessageReader=void 0;var yl=oo(),Dr=vr(),gl=Sr(),ux=hl(),Kf;(function(e){function t(n){let o=n;return o&&Dr.func(o.listen)&&Dr.func(o.dispose)&&Dr.func(o.onError)&&Dr.func(o.onClose)&&Dr.func(o.onPartialMessage)}s(t,"is"),e.is=t})(Kf||(ro.MessageReader=Kf={}));var Ji=class{static{s(this,"AbstractMessageReader")}constructor(){this.errorEmitter=new gl.Emitter,this.closeEmitter=new gl.Emitter,this.partialMessageEmitter=new gl.Emitter}dispose(){this.errorEmitter.dispose(),this.closeEmitter.dispose()}get onError(){return this.errorEmitter.event}fireError(t){this.errorEmitter.fire(this.asError(t))}get onClose(){return this.closeEmitter.event}fireClose(){this.closeEmitter.fire(void 0)}get onPartialMessage(){return this.partialMessageEmitter.event}firePartialMessage(t){this.partialMessageEmitter.fire(t)}asError(t){return t instanceof Error?t:new Error(`Reader received error. Reason: ${Dr.string(t.message)?t.message:"unknown"}`)}};ro.AbstractMessageReader=Ji;var bl;(function(e){function t(n){let o,i,a,l=new Map,u,f=new Map;if(n===void 0||typeof n=="string")o=n??"utf-8";else{if(o=n.charset??"utf-8",n.contentDecoder!==void 0&&(a=n.contentDecoder,l.set(a.name,a)),n.contentDecoders!==void 0)for(let m of n.contentDecoders)l.set(m.name,m);if(n.contentTypeDecoder!==void 0&&(u=n.contentTypeDecoder,f.set(u.name,u)),n.contentTypeDecoders!==void 0)for(let m of n.contentTypeDecoders)f.set(m.name,m)}return u===void 0&&(u=(0,yl.default)().applicationJson.decoder,f.set(u.name,u)),{charset:o,contentDecoder:a,contentDecoders:l,contentTypeDecoder:u,contentTypeDecoders:f}}s(t,"fromOptions"),e.fromOptions=t})(bl||(bl={}));var wl=class extends Ji{static{s(this,"ReadableStreamMessageReader")}constructor(t,n){super(),this.readable=t,this.options=bl.fromOptions(n),this.buffer=(0,yl.default)().messageBuffer.create(this.options.charset),this._partialMessageTimeout=1e4,this.nextMessageLength=-1,this.messageToken=0,this.readSemaphore=new ux.Semaphore(1)}set partialMessageTimeout(t){this._partialMessageTimeout=t}get partialMessageTimeout(){return this._partialMessageTimeout}listen(t){this.nextMessageLength=-1,this.messageToken=0,this.partialMessageTimer=void 0,this.callback=t;let n=this.readable.onData(o=>{this.onData(o)});return this.readable.onError(o=>this.fireError(o)),this.readable.onClose(()=>this.fireClose()),n}onData(t){try{for(this.buffer.append(t);;){if(this.nextMessageLength===-1){let o=this.buffer.tryReadHeaders(!0);if(!o)return;let i=o.get("content-length");if(!i){this.fireError(new Error(`Header must provide a Content-Length property.
19
- ${JSON.stringify(Object.fromEntries(o))}`));return}let a=parseInt(i);if(isNaN(a)){this.fireError(new Error(`Content-Length value must be a number. Got ${i}`));return}this.nextMessageLength=a}let n=this.buffer.tryReadBody(this.nextMessageLength);if(n===void 0){this.setPartialMessageTimer();return}this.clearPartialMessageTimer(),this.nextMessageLength=-1,this.readSemaphore.lock(async()=>{let o=this.options.contentDecoder!==void 0?await this.options.contentDecoder.decode(n):n,i=await this.options.contentTypeDecoder.decode(o,this.options);this.callback(i)}).catch(o=>{this.fireError(o)})}}catch(n){this.fireError(n)}}clearPartialMessageTimer(){this.partialMessageTimer&&(this.partialMessageTimer.dispose(),this.partialMessageTimer=void 0)}setPartialMessageTimer(){this.clearPartialMessageTimer(),!(this._partialMessageTimeout<=0)&&(this.partialMessageTimer=(0,yl.default)().timer.setTimeout((t,n)=>{this.partialMessageTimer=void 0,t===this.messageToken&&(this.firePartialMessage({messageToken:t,waitingTime:n}),this.setPartialMessageTimer())},this._partialMessageTimeout,this.messageToken,this._partialMessageTimeout))}};ro.ReadableStreamMessageReader=wl});var nm=Dt(so=>{"use strict";Object.defineProperty(so,"__esModule",{value:!0});so.WriteableStreamMessageWriter=so.AbstractMessageWriter=so.MessageWriter=void 0;var Qf=oo(),ws=vr(),px=hl(),Zf=Sr(),fx="Content-Length: ",em=`\r
20
- `,tm;(function(e){function t(n){let o=n;return o&&ws.func(o.dispose)&&ws.func(o.onClose)&&ws.func(o.onError)&&ws.func(o.write)}s(t,"is"),e.is=t})(tm||(so.MessageWriter=tm={}));var Ki=class{static{s(this,"AbstractMessageWriter")}constructor(){this.errorEmitter=new Zf.Emitter,this.closeEmitter=new Zf.Emitter}dispose(){this.errorEmitter.dispose(),this.closeEmitter.dispose()}get onError(){return this.errorEmitter.event}fireError(t,n,o){this.errorEmitter.fire([this.asError(t),n,o])}get onClose(){return this.closeEmitter.event}fireClose(){this.closeEmitter.fire(void 0)}asError(t){return t instanceof Error?t:new Error(`Writer received error. Reason: ${ws.string(t.message)?t.message:"unknown"}`)}};so.AbstractMessageWriter=Ki;var vl;(function(e){function t(n){return n===void 0||typeof n=="string"?{charset:n??"utf-8",contentTypeEncoder:(0,Qf.default)().applicationJson.encoder}:{charset:n.charset??"utf-8",contentEncoder:n.contentEncoder,contentTypeEncoder:n.contentTypeEncoder??(0,Qf.default)().applicationJson.encoder}}s(t,"fromOptions"),e.fromOptions=t})(vl||(vl={}));var xl=class extends Ki{static{s(this,"WriteableStreamMessageWriter")}constructor(t,n){super(),this.writable=t,this.options=vl.fromOptions(n),this.errorCount=0,this.writeSemaphore=new px.Semaphore(1),this.writable.onError(o=>this.fireError(o)),this.writable.onClose(()=>this.fireClose())}async write(t){return this.writeSemaphore.lock(async()=>this.options.contentTypeEncoder.encode(t,this.options).then(o=>this.options.contentEncoder!==void 0?this.options.contentEncoder.encode(o):o).then(o=>{let i=[];return i.push(fx,o.byteLength.toString(),em),i.push(em),this.doWrite(t,i,o)},o=>{throw this.fireError(o),o}))}async doWrite(t,n,o){try{return await this.writable.write(n.join(""),"ascii"),this.writable.write(o)}catch(i){return this.handleError(i,t),Promise.reject(i)}}handleError(t,n){this.errorCount++,this.fireError(t,n,this.errorCount)}end(){this.writable.end()}};so.WriteableStreamMessageWriter=xl});var om=Dt(Xi=>{"use strict";Object.defineProperty(Xi,"__esModule",{value:!0});Xi.AbstractMessageBuffer=void 0;var mx=13,hx=10,gx=`\r
21
- `,Sl=class{static{s(this,"AbstractMessageBuffer")}constructor(t="utf-8"){this._encoding=t,this._chunks=[],this._totalLength=0}get encoding(){return this._encoding}append(t){let n=typeof t=="string"?this.fromString(t,this._encoding):t;this._chunks.push(n),this._totalLength+=n.byteLength}tryReadHeaders(t=!1){if(this._chunks.length===0)return;let n=0,o=0,i=0,a=0;e:for(;o<this._chunks.length;){let m=this._chunks[o];for(i=0;i<m.length;){switch(m[i]){case mx:switch(n){case 0:n=1;break;case 2:n=3;break;default:n=0}break;case hx:switch(n){case 1:n=2;break;case 3:n=4,i++;break e;default:n=0}break;default:n=0}i++}a+=m.byteLength,o++}if(n!==4)return;let l=this._read(a+i),u=new Map,f=this.toString(l,"ascii").split(gx);if(f.length<2)return u;for(let m=0;m<f.length-2;m++){let p=f[m],h=p.indexOf(":");if(h===-1)throw new Error(`Message header must separate key and value using ':'
22
- ${p}`);let g=p.substr(0,h),I=p.substr(h+1).trim();u.set(t?g.toLowerCase():g,I)}return u}tryReadBody(t){if(!(this._totalLength<t))return this._read(t)}get numberOfBytes(){return this._totalLength}_read(t){if(t===0)return this.emptyBuffer();if(t>this._totalLength)throw new Error("Cannot read so many bytes!");if(this._chunks[0].byteLength===t){let a=this._chunks[0];return this._chunks.shift(),this._totalLength-=t,this.asNative(a)}if(this._chunks[0].byteLength>t){let a=this._chunks[0],l=this.asNative(a,t);return this._chunks[0]=a.slice(t),this._totalLength-=t,l}let n=this.allocNative(t),o=0,i=0;for(;t>0;){let a=this._chunks[i];if(a.byteLength>t){let l=a.slice(0,t);n.set(l,o),o+=t,this._chunks[i]=a.slice(t),this._totalLength-=t,t-=t}else n.set(a,o),o+=a.byteLength,this._chunks.shift(),this._totalLength-=a.byteLength,t-=a.byteLength}return n}};Xi.AbstractMessageBuffer=Sl});var cm=Dt(_e=>{"use strict";Object.defineProperty(_e,"__esModule",{value:!0});_e.createMessageConnection=_e.ConnectionOptions=_e.MessageStrategy=_e.CancellationStrategy=_e.CancellationSenderStrategy=_e.CancellationReceiverStrategy=_e.RequestCancellationReceiverStrategy=_e.IdCancellationReceiverStrategy=_e.ConnectionStrategy=_e.ConnectionError=_e.ConnectionErrors=_e.LogTraceNotification=_e.SetTraceNotification=_e.TraceFormat=_e.TraceValues=_e.Trace=_e.NullLogger=_e.ProgressType=_e.ProgressToken=void 0;var rm=oo(),ht=vr(),Ie=tl(),sm=ol(),vs=Sr(),Il=Hi(),Is;(function(e){e.type=new Ie.NotificationType("$/cancelRequest")})(Is||(Is={}));var kl;(function(e){function t(n){return typeof n=="string"||typeof n=="number"}s(t,"is"),e.is=t})(kl||(_e.ProgressToken=kl={}));var xs;(function(e){e.type=new Ie.NotificationType("$/progress")})(xs||(xs={}));var Dl=class{static{s(this,"ProgressType")}constructor(){}};_e.ProgressType=Dl;var El;(function(e){function t(n){return ht.func(n)}s(t,"is"),e.is=t})(El||(El={}));_e.NullLogger=Object.freeze({error:s(()=>{},"error"),warn:s(()=>{},"warn"),info:s(()=>{},"info"),log:s(()=>{},"log")});var Je;(function(e){e[e.Off=0]="Off",e[e.Messages=1]="Messages",e[e.Compact=2]="Compact",e[e.Verbose=3]="Verbose"})(Je||(_e.Trace=Je={}));var im;(function(e){e.Off="off",e.Messages="messages",e.Compact="compact",e.Verbose="verbose"})(im||(_e.TraceValues=im={}));(function(e){function t(o){if(!ht.string(o))return e.Off;switch(o=o.toLowerCase(),o){case"off":return e.Off;case"messages":return e.Messages;case"compact":return e.Compact;case"verbose":return e.Verbose;default:return e.Off}}s(t,"fromString"),e.fromString=t;function n(o){switch(o){case e.Off:return"off";case e.Messages:return"messages";case e.Compact:return"compact";case e.Verbose:return"verbose";default:return"off"}}s(n,"toString"),e.toString=n})(Je||(_e.Trace=Je={}));var tn;(function(e){e.Text="text",e.JSON="json"})(tn||(_e.TraceFormat=tn={}));(function(e){function t(n){return ht.string(n)?(n=n.toLowerCase(),n==="json"?e.JSON:e.Text):e.Text}s(t,"fromString"),e.fromString=t})(tn||(_e.TraceFormat=tn={}));var Tl;(function(e){e.type=new Ie.NotificationType("$/setTrace")})(Tl||(_e.SetTraceNotification=Tl={}));var Qi;(function(e){e.type=new Ie.NotificationType("$/logTrace")})(Qi||(_e.LogTraceNotification=Qi={}));var Ss;(function(e){e[e.Closed=1]="Closed",e[e.Disposed=2]="Disposed",e[e.AlreadyListening=3]="AlreadyListening"})(Ss||(_e.ConnectionErrors=Ss={}));var Er=class e extends Error{static{s(this,"ConnectionError")}constructor(t,n){super(n),this.code=t,Object.setPrototypeOf(this,e.prototype)}};_e.ConnectionError=Er;var Pl;(function(e){function t(n){let o=n;return o&&ht.func(o.cancelUndispatched)}s(t,"is"),e.is=t})(Pl||(_e.ConnectionStrategy=Pl={}));var Zi;(function(e){function t(n){let o=n;return o&&(o.kind===void 0||o.kind==="id")&&ht.func(o.createCancellationTokenSource)&&(o.dispose===void 0||ht.func(o.dispose))}s(t,"is"),e.is=t})(Zi||(_e.IdCancellationReceiverStrategy=Zi={}));var Rl;(function(e){function t(n){let o=n;return o&&o.kind==="request"&&ht.func(o.createCancellationTokenSource)&&(o.dispose===void 0||ht.func(o.dispose))}s(t,"is"),e.is=t})(Rl||(_e.RequestCancellationReceiverStrategy=Rl={}));var ea;(function(e){e.Message=Object.freeze({createCancellationTokenSource(n){return new Il.CancellationTokenSource}});function t(n){return Zi.is(n)||Rl.is(n)}s(t,"is"),e.is=t})(ea||(_e.CancellationReceiverStrategy=ea={}));var ta;(function(e){e.Message=Object.freeze({sendCancellation(n,o){return n.sendNotification(Is.type,{id:o})},cleanup(n){}});function t(n){let o=n;return o&&ht.func(o.sendCancellation)&&ht.func(o.cleanup)}s(t,"is"),e.is=t})(ta||(_e.CancellationSenderStrategy=ta={}));var na;(function(e){e.Message=Object.freeze({receiver:ea.Message,sender:ta.Message});function t(n){let o=n;return o&&ea.is(o.receiver)&&ta.is(o.sender)}s(t,"is"),e.is=t})(na||(_e.CancellationStrategy=na={}));var oa;(function(e){function t(n){let o=n;return o&&ht.func(o.handleMessage)}s(t,"is"),e.is=t})(oa||(_e.MessageStrategy=oa={}));var am;(function(e){function t(n){let o=n;return o&&(na.is(o.cancellationStrategy)||Pl.is(o.connectionStrategy)||oa.is(o.messageStrategy))}s(t,"is"),e.is=t})(am||(_e.ConnectionOptions=am={}));var wn;(function(e){e[e.New=1]="New",e[e.Listening=2]="Listening",e[e.Closed=3]="Closed",e[e.Disposed=4]="Disposed"})(wn||(wn={}));function yx(e,t,n,o){let i=n!==void 0?n:_e.NullLogger,a=0,l=0,u=0,f="2.0",m,p=new Map,h,g=new Map,I=new Map,T,v=new sm.LinkedMap,P=new Map,d=new Set,k=new Map,y=Je.Off,x=tn.Text,E,w=wn.New,M=new vs.Emitter,C=new vs.Emitter,$=new vs.Emitter,U=new vs.Emitter,H=new vs.Emitter,ue=o&&o.cancellationStrategy?o.cancellationStrategy:na.Message;function L(b){if(b===null)throw new Error("Can't send requests with id null since the response can't be correlated.");return"req-"+b.toString()}s(L,"createRequestQueueKey");function W(b){return b===null?"res-unknown-"+(++u).toString():"res-"+b.toString()}s(W,"createResponseQueueKey");function D(){return"not-"+(++l).toString()}s(D,"createNotificationQueueKey");function A(b,O){Ie.Message.isRequest(O)?b.set(L(O.id),O):Ie.Message.isResponse(O)?b.set(W(O.id),O):b.set(D(),O)}s(A,"addMessageToQueue");function _(b){}s(_,"cancelUndispatched");function N(){return w===wn.Listening}s(N,"isListening");function q(){return w===wn.Closed}s(q,"isClosed");function j(){return w===wn.Disposed}s(j,"isDisposed");function ve(){(w===wn.New||w===wn.Listening)&&(w=wn.Closed,C.fire(void 0))}s(ve,"closeHandler");function pe(b){M.fire([b,void 0,void 0])}s(pe,"readErrorHandler");function ae(b){M.fire(b)}s(ae,"writeErrorHandler"),e.onClose(ve),e.onError(pe),t.onClose(ve),t.onError(ae);function oe(){T||v.size===0||(T=(0,rm.default)().timer.setImmediate(()=>{T=void 0,Le()}))}s(oe,"triggerMessageQueue");function $e(b){Ie.Message.isRequest(b)?Y(b):Ie.Message.isNotification(b)?te(b):Ie.Message.isResponse(b)?J(b):ke(b)}s($e,"handleMessage");function Le(){if(v.size===0)return;let b=v.shift();try{let O=o?.messageStrategy;oa.is(O)?O.handleMessage(b,$e):$e(b)}finally{oe()}}s(Le,"processMessageQueue");let R=s(b=>{try{if(Ie.Message.isNotification(b)&&b.method===Is.type.method){let O=b.params.id,F=L(O),Z=v.get(F);if(Ie.Message.isRequest(Z)){let ce=o?.connectionStrategy,de=ce&&ce.cancelUndispatched?ce.cancelUndispatched(Z,_):void 0;if(de&&(de.error!==void 0||de.result!==void 0)){v.delete(F),k.delete(O),de.id=Z.id,G(de,b.method,Date.now()),t.write(de).catch(()=>i.error("Sending response for canceled message failed."));return}}let Oe=k.get(O);if(Oe!==void 0){Oe.cancel(),le(b);return}else d.add(O)}A(v,b)}finally{oe()}},"callback");function Y(b){if(j())return;function O(Q,he,ge){let Re={jsonrpc:f,id:b.id};Q instanceof Ie.ResponseError?Re.error=Q.toJson():Re.result=Q===void 0?null:Q,G(Re,he,ge),t.write(Re).catch(()=>i.error("Sending response failed."))}s(O,"reply");function F(Q,he,ge){let Re={jsonrpc:f,id:b.id,error:Q.toJson()};G(Re,he,ge),t.write(Re).catch(()=>i.error("Sending response failed."))}s(F,"replyError");function Z(Q,he,ge){Q===void 0&&(Q=null);let Re={jsonrpc:f,id:b.id,result:Q};G(Re,he,ge),t.write(Re).catch(()=>i.error("Sending response failed."))}s(Z,"replySuccess"),ye(b);let Oe=p.get(b.method),ce,de;Oe&&(ce=Oe.type,de=Oe.handler);let K=Date.now();if(de||m){let Q=b.id??String(Date.now()),he=Zi.is(ue.receiver)?ue.receiver.createCancellationTokenSource(Q):ue.receiver.createCancellationTokenSource(b);b.id!==null&&d.has(b.id)&&he.cancel(),b.id!==null&&k.set(Q,he);try{let ge;if(de)if(b.params===void 0){if(ce!==void 0&&ce.numberOfParams!==0){F(new Ie.ResponseError(Ie.ErrorCodes.InvalidParams,`Request ${b.method} defines ${ce.numberOfParams} params but received none.`),b.method,K);return}ge=de(he.token)}else if(Array.isArray(b.params)){if(ce!==void 0&&ce.parameterStructures===Ie.ParameterStructures.byName){F(new Ie.ResponseError(Ie.ErrorCodes.InvalidParams,`Request ${b.method} defines parameters by name but received parameters by position`),b.method,K);return}ge=de(...b.params,he.token)}else{if(ce!==void 0&&ce.parameterStructures===Ie.ParameterStructures.byPosition){F(new Ie.ResponseError(Ie.ErrorCodes.InvalidParams,`Request ${b.method} defines parameters by position but received parameters by name`),b.method,K);return}ge=de(b.params,he.token)}else m&&(ge=m(b.method,b.params,he.token));let Re=ge;ge?Re.then?Re.then(Qe=>{k.delete(Q),O(Qe,b.method,K)},Qe=>{k.delete(Q),Qe instanceof Ie.ResponseError?F(Qe,b.method,K):Qe&&ht.string(Qe.message)?F(new Ie.ResponseError(Ie.ErrorCodes.InternalError,`Request ${b.method} failed with message: ${Qe.message}`),b.method,K):F(new Ie.ResponseError(Ie.ErrorCodes.InternalError,`Request ${b.method} failed unexpectedly without providing any details.`),b.method,K)}):(k.delete(Q),O(ge,b.method,K)):(k.delete(Q),Z(ge,b.method,K))}catch(ge){k.delete(Q),ge instanceof Ie.ResponseError?O(ge,b.method,K):ge&&ht.string(ge.message)?F(new Ie.ResponseError(Ie.ErrorCodes.InternalError,`Request ${b.method} failed with message: ${ge.message}`),b.method,K):F(new Ie.ResponseError(Ie.ErrorCodes.InternalError,`Request ${b.method} failed unexpectedly without providing any details.`),b.method,K)}}else F(new Ie.ResponseError(Ie.ErrorCodes.MethodNotFound,`Unhandled method ${b.method}`),b.method,K)}s(Y,"handleRequest");function J(b){if(!j())if(b.id===null)b.error?i.error(`Received response message without id: Error is:
18
+ import{A as Ke,B as Ct,C as ns,E as Xu,F as ft,G as bt,H as Ft,b as _n,h as ai,l as ci,m as Au,n as Mu,o as _u,p as Ha,q as Nu,r as ju,s as Uu,u as zu,w as et,x as Hu,y as Yu,z as Qn}from"./chunk-KLYQJYJK.js";import{b as yi,c as Zo,d as Ju,e as Ku,g as er}from"./chunk-6T3FLHRQ.js";import{L as zt,N as Ze,P as Xn,R as hi,U as Gu,V as gi,X as cn,i as Iu}from"./chunk-UDFLPGTN.js";import{R as me,a as ts,b as Ou,c as Lu,d as Dn,e as Za,f as qu,g as wo,h as mi,i as nc,j as Rt,k as ct,l as We,m as oc,n as Wu,o as Vu,p as nt,q as an}from"./chunk-I3D3ARUM.js";import{$a as yn,C as mu,Da as V,E as hu,F as gu,Fa as pt,G as yu,Ga as pi,H as bu,I as wu,J as vu,Ja as we,K as St,Ka as Xa,L as xu,La as it,M as si,Ma as gn,N as Xo,Na as Kn,O as Wa,Oa as Qa,P as Su,Pa as at,Q as Va,R as bo,S as Jn,T as On,U as za,_a as Ne,ab as fi,c as Yn,cb as Bu,f as qa,fa as Du,ga as Eu,gb as $u,h as go,ha as Ut,ia as li,ib as ec,jb as Qo,k as kn,kb as Ee,la as Ya,lb as tc,ma as Ja,mb as Ve,pa as Ka,r as ut,ra as di,s as Vt,u as ri,v as Pt,va as Xt,wa as Fu,xa as ui,y as yo}from"./chunk-KYVPJTO6.js";import{G as Ga}from"./chunk-V6FDDNGV.js";import{a as ii}from"./chunk-QCRIXKIC.js";import{a as Pu,b as Ru,c as Cu}from"./chunk-LIXP4TPL.js";import{a as Tu}from"./chunk-M6E6KNLV.js";import{d as Dg}from"./chunk-NDI67DRG.js";import{a as oi}from"./chunk-K5LKDIVU.js";import{c as ie,d as Hn,f as ho}from"./chunk-R2GWBJEP.js";import{$a as Zs,$b as Ae,Aa as Tt,Ab as Qd,Bb as ei,Cb as Ba,Fa as Cn,Fb as $a,Gb as Zd,Ib as eu,Jb as tu,Kb as nu,La as sn,Lb as ou,Ma as po,Nb as ru,Pa as It,Qb as su,Rb as Mn,Sb as st,Tb as yt,Wb as es,Xb as Gn,Ya as Ua,Zc as lu,ac as Yo,b as qd,bc as iu,bd as du,c as Vn,cd as uu,db as Kr,dc as ti,de as pu,eb as Jd,fa as Vd,g as ja,gc as Jo,ge as fu,ha as De,hc as au,ia as Xs,ic as Sn,jc as mo,lb as Xr,m as Jr,ma as mn,mb as Se,mc as In,nb as Qr,nc as cu,oa as zd,ob as Zr,pa as hn,pc as Me,q as Ye,qa as Gd,qb as tt,r as zn,rb as fo,rc as ni,sa as Hd,sb as An,tb as Kd,ub as Fa,uc as Ko,vb as Wt,wb as Xd,x as fn,xb as dt,ya as Qs,za as Yd}from"./chunk-7XX6TY62.js";import{g as ku}from"./chunk-UCLPBO4I.js";import{h as Ks,k as Ho,t as Rn}from"./chunk-VWLJXTZ5.js";import{Ah as Hs,Bc as Et,Bf as r,Bh as Ys,Dh as jd,Fg as Yr,Fi as Wd,Ig as Cd,Ih as Ud,Ma as Dd,Nh as Fd,Tc as Pe,Th as Bd,Wh as Js,Yh as Na,Z as kd,Zh as $d,aa as xn,bb as Ce,bi as xt,dc as gt,hh as Oa,ja as Ma,jd as ot,lc as wt,mh as La,nb as Ed,pa as _a,pd as Td,pj as c,qh as Ad,rg as Vs,rh as Md,tg as Rd,th as _d,uh as zs,vh as Gs,wa as Go,wh as Od,xh as Ld,zd as Pd,zh as Nd}from"./chunk-ELPXQ32J.js";import{a as s,b as Hr,d as Dt,e as fe,g as Id}from"./chunk-2MRHL4B2.js";var vr=Dt(Lt=>{"use strict";Object.defineProperty(Lt,"__esModule",{value:!0});Lt.stringArray=Lt.array=Lt.func=Lt.error=Lt.number=Lt.string=Lt.boolean=void 0;function tx(e){return e===!0||e===!1}s(tx,"boolean");Lt.boolean=tx;function qf(e){return typeof e=="string"||e instanceof String}s(qf,"string");Lt.string=qf;function nx(e){return typeof e=="number"||e instanceof Number}s(nx,"number");Lt.number=nx;function ox(e){return e instanceof Error}s(ox,"error");Lt.error=ox;function rx(e){return typeof e=="function"}s(rx,"func");Lt.func=rx;function Wf(e){return Array.isArray(e)}s(Wf,"array");Lt.array=Wf;function sx(e){return Wf(e)&&e.every(t=>qf(t))}s(sx,"stringArray");Lt.stringArray=sx});var tl=Dt(be=>{"use strict";Object.defineProperty(be,"__esModule",{value:!0});be.Message=be.NotificationType9=be.NotificationType8=be.NotificationType7=be.NotificationType6=be.NotificationType5=be.NotificationType4=be.NotificationType3=be.NotificationType2=be.NotificationType1=be.NotificationType0=be.NotificationType=be.RequestType9=be.RequestType8=be.RequestType7=be.RequestType6=be.RequestType5=be.RequestType4=be.RequestType3=be.RequestType2=be.RequestType1=be.RequestType=be.RequestType0=be.AbstractMessageSignature=be.ParameterStructures=be.ResponseError=be.ErrorCodes=void 0;var Eo=vr(),Ac;(function(e){e.ParseError=-32700,e.InvalidRequest=-32600,e.MethodNotFound=-32601,e.InvalidParams=-32602,e.InternalError=-32603,e.jsonrpcReservedErrorRangeStart=-32099,e.serverErrorStart=-32099,e.MessageWriteError=-32099,e.MessageReadError=-32098,e.PendingResponseRejected=-32097,e.ConnectionInactive=-32096,e.ServerNotInitialized=-32002,e.UnknownErrorCode=-32001,e.jsonrpcReservedErrorRangeEnd=-32e3,e.serverErrorEnd=-32e3})(Ac||(be.ErrorCodes=Ac={}));var Mc=class e extends Error{static{s(this,"ResponseError")}constructor(t,n,o){super(n),this.code=Eo.number(t)?t:Ac.UnknownErrorCode,this.data=o,Object.setPrototypeOf(this,e.prototype)}toJson(){let t={code:this.code,message:this.message};return this.data!==void 0&&(t.data=this.data),t}};be.ResponseError=Mc;var Yt=class e{static{s(this,"ParameterStructures")}constructor(t){this.kind=t}static is(t){return t===e.auto||t===e.byName||t===e.byPosition}toString(){return this.kind}};be.ParameterStructures=Yt;Yt.auto=new Yt("auto");Yt.byPosition=new Yt("byPosition");Yt.byName=new Yt("byName");var lt=class{static{s(this,"AbstractMessageSignature")}constructor(t,n){this.method=t,this.numberOfParams=n}get parameterStructures(){return Yt.auto}};be.AbstractMessageSignature=lt;var _c=class extends lt{static{s(this,"RequestType0")}constructor(t){super(t,0)}};be.RequestType0=_c;var Oc=class extends lt{static{s(this,"RequestType")}constructor(t,n=Yt.auto){super(t,1),this._parameterStructures=n}get parameterStructures(){return this._parameterStructures}};be.RequestType=Oc;var Lc=class extends lt{static{s(this,"RequestType1")}constructor(t,n=Yt.auto){super(t,1),this._parameterStructures=n}get parameterStructures(){return this._parameterStructures}};be.RequestType1=Lc;var Nc=class extends lt{static{s(this,"RequestType2")}constructor(t){super(t,2)}};be.RequestType2=Nc;var jc=class extends lt{static{s(this,"RequestType3")}constructor(t){super(t,3)}};be.RequestType3=jc;var Uc=class extends lt{static{s(this,"RequestType4")}constructor(t){super(t,4)}};be.RequestType4=Uc;var Fc=class extends lt{static{s(this,"RequestType5")}constructor(t){super(t,5)}};be.RequestType5=Fc;var Bc=class extends lt{static{s(this,"RequestType6")}constructor(t){super(t,6)}};be.RequestType6=Bc;var $c=class extends lt{static{s(this,"RequestType7")}constructor(t){super(t,7)}};be.RequestType7=$c;var qc=class extends lt{static{s(this,"RequestType8")}constructor(t){super(t,8)}};be.RequestType8=qc;var Wc=class extends lt{static{s(this,"RequestType9")}constructor(t){super(t,9)}};be.RequestType9=Wc;var Vc=class extends lt{static{s(this,"NotificationType")}constructor(t,n=Yt.auto){super(t,1),this._parameterStructures=n}get parameterStructures(){return this._parameterStructures}};be.NotificationType=Vc;var zc=class extends lt{static{s(this,"NotificationType0")}constructor(t){super(t,0)}};be.NotificationType0=zc;var Gc=class extends lt{static{s(this,"NotificationType1")}constructor(t,n=Yt.auto){super(t,1),this._parameterStructures=n}get parameterStructures(){return this._parameterStructures}};be.NotificationType1=Gc;var Hc=class extends lt{static{s(this,"NotificationType2")}constructor(t){super(t,2)}};be.NotificationType2=Hc;var Yc=class extends lt{static{s(this,"NotificationType3")}constructor(t){super(t,3)}};be.NotificationType3=Yc;var Jc=class extends lt{static{s(this,"NotificationType4")}constructor(t){super(t,4)}};be.NotificationType4=Jc;var Kc=class extends lt{static{s(this,"NotificationType5")}constructor(t){super(t,5)}};be.NotificationType5=Kc;var Xc=class extends lt{static{s(this,"NotificationType6")}constructor(t){super(t,6)}};be.NotificationType6=Xc;var Qc=class extends lt{static{s(this,"NotificationType7")}constructor(t){super(t,7)}};be.NotificationType7=Qc;var Zc=class extends lt{static{s(this,"NotificationType8")}constructor(t){super(t,8)}};be.NotificationType8=Zc;var el=class extends lt{static{s(this,"NotificationType9")}constructor(t){super(t,9)}};be.NotificationType9=el;var Vf;(function(e){function t(i){let a=i;return a&&Eo.string(a.method)&&(Eo.string(a.id)||Eo.number(a.id))}s(t,"isRequest"),e.isRequest=t;function n(i){let a=i;return a&&Eo.string(a.method)&&i.id===void 0}s(n,"isNotification"),e.isNotification=n;function o(i){let a=i;return a&&(a.result!==void 0||!!a.error)&&(Eo.string(a.id)||Eo.number(a.id)||a.id===null)}s(o,"isResponse"),e.isResponse=o})(Vf||(be.Message=Vf={}))});var ol=Dt(no=>{"use strict";var zf;Object.defineProperty(no,"__esModule",{value:!0});no.LRUCache=no.LinkedMap=no.Touch=void 0;var Nt;(function(e){e.None=0,e.First=1,e.AsOld=e.First,e.Last=2,e.AsNew=e.Last})(Nt||(no.Touch=Nt={}));var qi=class{static{s(this,"LinkedMap")}constructor(){this[zf]="LinkedMap",this._map=new Map,this._head=void 0,this._tail=void 0,this._size=0,this._state=0}clear(){this._map.clear(),this._head=void 0,this._tail=void 0,this._size=0,this._state++}isEmpty(){return!this._head&&!this._tail}get size(){return this._size}get first(){return this._head?.value}get last(){return this._tail?.value}has(t){return this._map.has(t)}get(t,n=Nt.None){let o=this._map.get(t);if(o)return n!==Nt.None&&this.touch(o,n),o.value}set(t,n,o=Nt.None){let i=this._map.get(t);if(i)i.value=n,o!==Nt.None&&this.touch(i,o);else{switch(i={key:t,value:n,next:void 0,previous:void 0},o){case Nt.None:this.addItemLast(i);break;case Nt.First:this.addItemFirst(i);break;case Nt.Last:this.addItemLast(i);break;default:this.addItemLast(i);break}this._map.set(t,i),this._size++}return this}delete(t){return!!this.remove(t)}remove(t){let n=this._map.get(t);if(n)return this._map.delete(t),this.removeItem(n),this._size--,n.value}shift(){if(!this._head&&!this._tail)return;if(!this._head||!this._tail)throw new Error("Invalid list");let t=this._head;return this._map.delete(t.key),this.removeItem(t),this._size--,t.value}forEach(t,n){let o=this._state,i=this._head;for(;i;){if(n?t.bind(n)(i.value,i.key,this):t(i.value,i.key,this),this._state!==o)throw new Error("LinkedMap got modified during iteration.");i=i.next}}keys(){let t=this._state,n=this._head,o={[Symbol.iterator]:()=>o,next:s(()=>{if(this._state!==t)throw new Error("LinkedMap got modified during iteration.");if(n){let i={value:n.key,done:!1};return n=n.next,i}else return{value:void 0,done:!0}},"next")};return o}values(){let t=this._state,n=this._head,o={[Symbol.iterator]:()=>o,next:s(()=>{if(this._state!==t)throw new Error("LinkedMap got modified during iteration.");if(n){let i={value:n.value,done:!1};return n=n.next,i}else return{value:void 0,done:!0}},"next")};return o}entries(){let t=this._state,n=this._head,o={[Symbol.iterator]:()=>o,next:s(()=>{if(this._state!==t)throw new Error("LinkedMap got modified during iteration.");if(n){let i={value:[n.key,n.value],done:!1};return n=n.next,i}else return{value:void 0,done:!0}},"next")};return o}[(zf=Symbol.toStringTag,Symbol.iterator)](){return this.entries()}trimOld(t){if(t>=this.size)return;if(t===0){this.clear();return}let n=this._head,o=this.size;for(;n&&o>t;)this._map.delete(n.key),n=n.next,o--;this._head=n,this._size=o,n&&(n.previous=void 0),this._state++}addItemFirst(t){if(!this._head&&!this._tail)this._tail=t;else if(this._head)t.next=this._head,this._head.previous=t;else throw new Error("Invalid list");this._head=t,this._state++}addItemLast(t){if(!this._head&&!this._tail)this._head=t;else if(this._tail)t.previous=this._tail,this._tail.next=t;else throw new Error("Invalid list");this._tail=t,this._state++}removeItem(t){if(t===this._head&&t===this._tail)this._head=void 0,this._tail=void 0;else if(t===this._head){if(!t.next)throw new Error("Invalid list");t.next.previous=void 0,this._head=t.next}else if(t===this._tail){if(!t.previous)throw new Error("Invalid list");t.previous.next=void 0,this._tail=t.previous}else{let n=t.next,o=t.previous;if(!n||!o)throw new Error("Invalid list");n.previous=o,o.next=n}t.next=void 0,t.previous=void 0,this._state++}touch(t,n){if(!this._head||!this._tail)throw new Error("Invalid list");if(!(n!==Nt.First&&n!==Nt.Last)){if(n===Nt.First){if(t===this._head)return;let o=t.next,i=t.previous;t===this._tail?(i.next=void 0,this._tail=i):(o.previous=i,i.next=o),t.previous=void 0,t.next=this._head,this._head.previous=t,this._head=t,this._state++}else if(n===Nt.Last){if(t===this._tail)return;let o=t.next,i=t.previous;t===this._head?(o.previous=void 0,this._head=o):(o.previous=i,i.next=o),t.next=void 0,t.previous=this._tail,this._tail.next=t,this._tail=t,this._state++}}}toJSON(){let t=[];return this.forEach((n,o)=>{t.push([o,n])}),t}fromJSON(t){this.clear();for(let[n,o]of t)this.set(n,o)}};no.LinkedMap=qi;var nl=class extends qi{static{s(this,"LRUCache")}constructor(t,n=1){super(),this._limit=t,this._ratio=Math.min(Math.max(0,n),1)}get limit(){return this._limit}set limit(t){this._limit=t,this.checkTrim()}get ratio(){return this._ratio}set ratio(t){this._ratio=Math.min(Math.max(0,t),1),this.checkTrim()}get(t,n=Nt.AsNew){return super.get(t,n)}peek(t){return super.get(t,Nt.None)}set(t,n){return super.set(t,n,Nt.Last),this.checkTrim(),this}checkTrim(){this.size>this._limit&&this.trimOld(Math.round(this._limit*this._ratio))}};no.LRUCache=nl});var Hf=Dt(Wi=>{"use strict";Object.defineProperty(Wi,"__esModule",{value:!0});Wi.Disposable=void 0;var Gf;(function(e){function t(n){return{dispose:n}}s(t,"create"),e.create=t})(Gf||(Wi.Disposable=Gf={}))});var oo=Dt(il=>{"use strict";Object.defineProperty(il,"__esModule",{value:!0});var rl;function sl(){if(rl===void 0)throw new Error("No runtime abstraction layer installed");return rl}s(sl,"RAL");(function(e){function t(n){if(n===void 0)throw new Error("No runtime abstraction layer provided");rl=n}s(t,"install"),e.install=t})(sl||(sl={}));il.default=sl});var Sr=Dt(xr=>{"use strict";Object.defineProperty(xr,"__esModule",{value:!0});xr.Emitter=xr.Event=void 0;var ix=oo(),Yf;(function(e){let t={dispose(){}};e.None=function(){return t}})(Yf||(xr.Event=Yf={}));var al=class{static{s(this,"CallbackList")}add(t,n=null,o){this._callbacks||(this._callbacks=[],this._contexts=[]),this._callbacks.push(t),this._contexts.push(n),Array.isArray(o)&&o.push({dispose:s(()=>this.remove(t,n),"dispose")})}remove(t,n=null){if(!this._callbacks)return;let o=!1;for(let i=0,a=this._callbacks.length;i<a;i++)if(this._callbacks[i]===t)if(this._contexts[i]===n){this._callbacks.splice(i,1),this._contexts.splice(i,1);return}else o=!0;if(o)throw new Error("When adding a listener with a context, you should remove it with the same context")}invoke(...t){if(!this._callbacks)return[];let n=[],o=this._callbacks.slice(0),i=this._contexts.slice(0);for(let a=0,l=o.length;a<l;a++)try{n.push(o[a].apply(i[a],t))}catch(u){(0,ix.default)().console.error(u)}return n}isEmpty(){return!this._callbacks||this._callbacks.length===0}dispose(){this._callbacks=void 0,this._contexts=void 0}},Vi=class e{static{s(this,"Emitter")}constructor(t){this._options=t}get event(){return this._event||(this._event=(t,n,o)=>{this._callbacks||(this._callbacks=new al),this._options&&this._options.onFirstListenerAdd&&this._callbacks.isEmpty()&&this._options.onFirstListenerAdd(this),this._callbacks.add(t,n);let i={dispose:s(()=>{this._callbacks&&(this._callbacks.remove(t,n),i.dispose=e._noop,this._options&&this._options.onLastListenerRemove&&this._callbacks.isEmpty()&&this._options.onLastListenerRemove(this))},"dispose")};return Array.isArray(o)&&o.push(i),i}),this._event}fire(t){this._callbacks&&this._callbacks.invoke.call(this._callbacks,t)}dispose(){this._callbacks&&(this._callbacks.dispose(),this._callbacks=void 0)}};xr.Emitter=Vi;Vi._noop=function(){}});var Hi=Dt(Ir=>{"use strict";Object.defineProperty(Ir,"__esModule",{value:!0});Ir.CancellationTokenSource=Ir.CancellationToken=void 0;var ax=oo(),cx=vr(),cl=Sr(),zi;(function(e){e.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:cl.Event.None}),e.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:cl.Event.None});function t(n){let o=n;return o&&(o===e.None||o===e.Cancelled||cx.boolean(o.isCancellationRequested)&&!!o.onCancellationRequested)}s(t,"is"),e.is=t})(zi||(Ir.CancellationToken=zi={}));var lx=Object.freeze(function(e,t){let n=(0,ax.default)().timer.setTimeout(e.bind(t),0);return{dispose(){n.dispose()}}}),Gi=class{static{s(this,"MutableToken")}constructor(){this._isCancelled=!1}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?lx:(this._emitter||(this._emitter=new cl.Emitter),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=void 0)}},ll=class{static{s(this,"CancellationTokenSource")}get token(){return this._token||(this._token=new Gi),this._token}cancel(){this._token?this._token.cancel():this._token=zi.Cancelled}dispose(){this._token?this._token instanceof Gi&&this._token.dispose():this._token=zi.None}};Ir.CancellationTokenSource=ll});var Jf=Dt(kr=>{"use strict";Object.defineProperty(kr,"__esModule",{value:!0});kr.SharedArrayReceiverStrategy=kr.SharedArraySenderStrategy=void 0;var dx=Hi(),bs;(function(e){e.Continue=0,e.Cancelled=1})(bs||(bs={}));var dl=class{static{s(this,"SharedArraySenderStrategy")}constructor(){this.buffers=new Map}enableCancellation(t){if(t.id===null)return;let n=new SharedArrayBuffer(4),o=new Int32Array(n,0,1);o[0]=bs.Continue,this.buffers.set(t.id,n),t.$cancellationData=n}async sendCancellation(t,n){let o=this.buffers.get(n);if(o===void 0)return;let i=new Int32Array(o,0,1);Atomics.store(i,0,bs.Cancelled)}cleanup(t){this.buffers.delete(t)}dispose(){this.buffers.clear()}};kr.SharedArraySenderStrategy=dl;var ul=class{static{s(this,"SharedArrayBufferCancellationToken")}constructor(t){this.data=new Int32Array(t,0,1)}get isCancellationRequested(){return Atomics.load(this.data,0)===bs.Cancelled}get onCancellationRequested(){throw new Error("Cancellation over SharedArrayBuffer doesn't support cancellation events")}},pl=class{static{s(this,"SharedArrayBufferCancellationTokenSource")}constructor(t){this.token=new ul(t)}cancel(){}dispose(){}},fl=class{static{s(this,"SharedArrayReceiverStrategy")}constructor(){this.kind="request"}createCancellationTokenSource(t){let n=t.$cancellationData;return n===void 0?new dx.CancellationTokenSource:new pl(n)}};kr.SharedArrayReceiverStrategy=fl});var hl=Dt(Yi=>{"use strict";Object.defineProperty(Yi,"__esModule",{value:!0});Yi.Semaphore=void 0;var ux=oo(),ml=class{static{s(this,"Semaphore")}constructor(t=1){if(t<=0)throw new Error("Capacity must be greater than 0");this._capacity=t,this._active=0,this._waiting=[]}lock(t){return new Promise((n,o)=>{this._waiting.push({thunk:t,resolve:n,reject:o}),this.runNext()})}get active(){return this._active}runNext(){this._waiting.length===0||this._active===this._capacity||(0,ux.default)().timer.setImmediate(()=>this.doRunNext())}doRunNext(){if(this._waiting.length===0||this._active===this._capacity)return;let t=this._waiting.shift();if(this._active++,this._active>this._capacity)throw new Error("To many thunks active");try{let n=t.thunk();n instanceof Promise?n.then(o=>{this._active--,t.resolve(o),this.runNext()},o=>{this._active--,t.reject(o),this.runNext()}):(this._active--,t.resolve(n),this.runNext())}catch(n){this._active--,t.reject(n),this.runNext()}}};Yi.Semaphore=ml});var Xf=Dt(ro=>{"use strict";Object.defineProperty(ro,"__esModule",{value:!0});ro.ReadableStreamMessageReader=ro.AbstractMessageReader=ro.MessageReader=void 0;var yl=oo(),Dr=vr(),gl=Sr(),px=hl(),Kf;(function(e){function t(n){let o=n;return o&&Dr.func(o.listen)&&Dr.func(o.dispose)&&Dr.func(o.onError)&&Dr.func(o.onClose)&&Dr.func(o.onPartialMessage)}s(t,"is"),e.is=t})(Kf||(ro.MessageReader=Kf={}));var Ji=class{static{s(this,"AbstractMessageReader")}constructor(){this.errorEmitter=new gl.Emitter,this.closeEmitter=new gl.Emitter,this.partialMessageEmitter=new gl.Emitter}dispose(){this.errorEmitter.dispose(),this.closeEmitter.dispose()}get onError(){return this.errorEmitter.event}fireError(t){this.errorEmitter.fire(this.asError(t))}get onClose(){return this.closeEmitter.event}fireClose(){this.closeEmitter.fire(void 0)}get onPartialMessage(){return this.partialMessageEmitter.event}firePartialMessage(t){this.partialMessageEmitter.fire(t)}asError(t){return t instanceof Error?t:new Error(`Reader received error. Reason: ${Dr.string(t.message)?t.message:"unknown"}`)}};ro.AbstractMessageReader=Ji;var bl;(function(e){function t(n){let o,i,a,l=new Map,u,f=new Map;if(n===void 0||typeof n=="string")o=n??"utf-8";else{if(o=n.charset??"utf-8",n.contentDecoder!==void 0&&(a=n.contentDecoder,l.set(a.name,a)),n.contentDecoders!==void 0)for(let m of n.contentDecoders)l.set(m.name,m);if(n.contentTypeDecoder!==void 0&&(u=n.contentTypeDecoder,f.set(u.name,u)),n.contentTypeDecoders!==void 0)for(let m of n.contentTypeDecoders)f.set(m.name,m)}return u===void 0&&(u=(0,yl.default)().applicationJson.decoder,f.set(u.name,u)),{charset:o,contentDecoder:a,contentDecoders:l,contentTypeDecoder:u,contentTypeDecoders:f}}s(t,"fromOptions"),e.fromOptions=t})(bl||(bl={}));var wl=class extends Ji{static{s(this,"ReadableStreamMessageReader")}constructor(t,n){super(),this.readable=t,this.options=bl.fromOptions(n),this.buffer=(0,yl.default)().messageBuffer.create(this.options.charset),this._partialMessageTimeout=1e4,this.nextMessageLength=-1,this.messageToken=0,this.readSemaphore=new px.Semaphore(1)}set partialMessageTimeout(t){this._partialMessageTimeout=t}get partialMessageTimeout(){return this._partialMessageTimeout}listen(t){this.nextMessageLength=-1,this.messageToken=0,this.partialMessageTimer=void 0,this.callback=t;let n=this.readable.onData(o=>{this.onData(o)});return this.readable.onError(o=>this.fireError(o)),this.readable.onClose(()=>this.fireClose()),n}onData(t){try{for(this.buffer.append(t);;){if(this.nextMessageLength===-1){let o=this.buffer.tryReadHeaders(!0);if(!o)return;let i=o.get("content-length");if(!i){this.fireError(new Error(`Header must provide a Content-Length property.
19
+ ${JSON.stringify(Object.fromEntries(o))}`));return}let a=parseInt(i);if(isNaN(a)){this.fireError(new Error(`Content-Length value must be a number. Got ${i}`));return}this.nextMessageLength=a}let n=this.buffer.tryReadBody(this.nextMessageLength);if(n===void 0){this.setPartialMessageTimer();return}this.clearPartialMessageTimer(),this.nextMessageLength=-1,this.readSemaphore.lock(async()=>{let o=this.options.contentDecoder!==void 0?await this.options.contentDecoder.decode(n):n,i=await this.options.contentTypeDecoder.decode(o,this.options);this.callback(i)}).catch(o=>{this.fireError(o)})}}catch(n){this.fireError(n)}}clearPartialMessageTimer(){this.partialMessageTimer&&(this.partialMessageTimer.dispose(),this.partialMessageTimer=void 0)}setPartialMessageTimer(){this.clearPartialMessageTimer(),!(this._partialMessageTimeout<=0)&&(this.partialMessageTimer=(0,yl.default)().timer.setTimeout((t,n)=>{this.partialMessageTimer=void 0,t===this.messageToken&&(this.firePartialMessage({messageToken:t,waitingTime:n}),this.setPartialMessageTimer())},this._partialMessageTimeout,this.messageToken,this._partialMessageTimeout))}};ro.ReadableStreamMessageReader=wl});var nm=Dt(so=>{"use strict";Object.defineProperty(so,"__esModule",{value:!0});so.WriteableStreamMessageWriter=so.AbstractMessageWriter=so.MessageWriter=void 0;var Qf=oo(),ws=vr(),fx=hl(),Zf=Sr(),mx="Content-Length: ",em=`\r
20
+ `,tm;(function(e){function t(n){let o=n;return o&&ws.func(o.dispose)&&ws.func(o.onClose)&&ws.func(o.onError)&&ws.func(o.write)}s(t,"is"),e.is=t})(tm||(so.MessageWriter=tm={}));var Ki=class{static{s(this,"AbstractMessageWriter")}constructor(){this.errorEmitter=new Zf.Emitter,this.closeEmitter=new Zf.Emitter}dispose(){this.errorEmitter.dispose(),this.closeEmitter.dispose()}get onError(){return this.errorEmitter.event}fireError(t,n,o){this.errorEmitter.fire([this.asError(t),n,o])}get onClose(){return this.closeEmitter.event}fireClose(){this.closeEmitter.fire(void 0)}asError(t){return t instanceof Error?t:new Error(`Writer received error. Reason: ${ws.string(t.message)?t.message:"unknown"}`)}};so.AbstractMessageWriter=Ki;var vl;(function(e){function t(n){return n===void 0||typeof n=="string"?{charset:n??"utf-8",contentTypeEncoder:(0,Qf.default)().applicationJson.encoder}:{charset:n.charset??"utf-8",contentEncoder:n.contentEncoder,contentTypeEncoder:n.contentTypeEncoder??(0,Qf.default)().applicationJson.encoder}}s(t,"fromOptions"),e.fromOptions=t})(vl||(vl={}));var xl=class extends Ki{static{s(this,"WriteableStreamMessageWriter")}constructor(t,n){super(),this.writable=t,this.options=vl.fromOptions(n),this.errorCount=0,this.writeSemaphore=new fx.Semaphore(1),this.writable.onError(o=>this.fireError(o)),this.writable.onClose(()=>this.fireClose())}async write(t){return this.writeSemaphore.lock(async()=>this.options.contentTypeEncoder.encode(t,this.options).then(o=>this.options.contentEncoder!==void 0?this.options.contentEncoder.encode(o):o).then(o=>{let i=[];return i.push(mx,o.byteLength.toString(),em),i.push(em),this.doWrite(t,i,o)},o=>{throw this.fireError(o),o}))}async doWrite(t,n,o){try{return await this.writable.write(n.join(""),"ascii"),this.writable.write(o)}catch(i){return this.handleError(i,t),Promise.reject(i)}}handleError(t,n){this.errorCount++,this.fireError(t,n,this.errorCount)}end(){this.writable.end()}};so.WriteableStreamMessageWriter=xl});var om=Dt(Xi=>{"use strict";Object.defineProperty(Xi,"__esModule",{value:!0});Xi.AbstractMessageBuffer=void 0;var hx=13,gx=10,yx=`\r
21
+ `,Sl=class{static{s(this,"AbstractMessageBuffer")}constructor(t="utf-8"){this._encoding=t,this._chunks=[],this._totalLength=0}get encoding(){return this._encoding}append(t){let n=typeof t=="string"?this.fromString(t,this._encoding):t;this._chunks.push(n),this._totalLength+=n.byteLength}tryReadHeaders(t=!1){if(this._chunks.length===0)return;let n=0,o=0,i=0,a=0;e:for(;o<this._chunks.length;){let m=this._chunks[o];for(i=0;i<m.length;){switch(m[i]){case hx:switch(n){case 0:n=1;break;case 2:n=3;break;default:n=0}break;case gx:switch(n){case 1:n=2;break;case 3:n=4,i++;break e;default:n=0}break;default:n=0}i++}a+=m.byteLength,o++}if(n!==4)return;let l=this._read(a+i),u=new Map,f=this.toString(l,"ascii").split(yx);if(f.length<2)return u;for(let m=0;m<f.length-2;m++){let p=f[m],h=p.indexOf(":");if(h===-1)throw new Error(`Message header must separate key and value using ':'
22
+ ${p}`);let g=p.substr(0,h),I=p.substr(h+1).trim();u.set(t?g.toLowerCase():g,I)}return u}tryReadBody(t){if(!(this._totalLength<t))return this._read(t)}get numberOfBytes(){return this._totalLength}_read(t){if(t===0)return this.emptyBuffer();if(t>this._totalLength)throw new Error("Cannot read so many bytes!");if(this._chunks[0].byteLength===t){let a=this._chunks[0];return this._chunks.shift(),this._totalLength-=t,this.asNative(a)}if(this._chunks[0].byteLength>t){let a=this._chunks[0],l=this.asNative(a,t);return this._chunks[0]=a.slice(t),this._totalLength-=t,l}let n=this.allocNative(t),o=0,i=0;for(;t>0;){let a=this._chunks[i];if(a.byteLength>t){let l=a.slice(0,t);n.set(l,o),o+=t,this._chunks[i]=a.slice(t),this._totalLength-=t,t-=t}else n.set(a,o),o+=a.byteLength,this._chunks.shift(),this._totalLength-=a.byteLength,t-=a.byteLength}return n}};Xi.AbstractMessageBuffer=Sl});var cm=Dt(_e=>{"use strict";Object.defineProperty(_e,"__esModule",{value:!0});_e.createMessageConnection=_e.ConnectionOptions=_e.MessageStrategy=_e.CancellationStrategy=_e.CancellationSenderStrategy=_e.CancellationReceiverStrategy=_e.RequestCancellationReceiverStrategy=_e.IdCancellationReceiverStrategy=_e.ConnectionStrategy=_e.ConnectionError=_e.ConnectionErrors=_e.LogTraceNotification=_e.SetTraceNotification=_e.TraceFormat=_e.TraceValues=_e.Trace=_e.NullLogger=_e.ProgressType=_e.ProgressToken=void 0;var rm=oo(),ht=vr(),Ie=tl(),sm=ol(),vs=Sr(),Il=Hi(),Is;(function(e){e.type=new Ie.NotificationType("$/cancelRequest")})(Is||(Is={}));var kl;(function(e){function t(n){return typeof n=="string"||typeof n=="number"}s(t,"is"),e.is=t})(kl||(_e.ProgressToken=kl={}));var xs;(function(e){e.type=new Ie.NotificationType("$/progress")})(xs||(xs={}));var Dl=class{static{s(this,"ProgressType")}constructor(){}};_e.ProgressType=Dl;var El;(function(e){function t(n){return ht.func(n)}s(t,"is"),e.is=t})(El||(El={}));_e.NullLogger=Object.freeze({error:s(()=>{},"error"),warn:s(()=>{},"warn"),info:s(()=>{},"info"),log:s(()=>{},"log")});var Je;(function(e){e[e.Off=0]="Off",e[e.Messages=1]="Messages",e[e.Compact=2]="Compact",e[e.Verbose=3]="Verbose"})(Je||(_e.Trace=Je={}));var im;(function(e){e.Off="off",e.Messages="messages",e.Compact="compact",e.Verbose="verbose"})(im||(_e.TraceValues=im={}));(function(e){function t(o){if(!ht.string(o))return e.Off;switch(o=o.toLowerCase(),o){case"off":return e.Off;case"messages":return e.Messages;case"compact":return e.Compact;case"verbose":return e.Verbose;default:return e.Off}}s(t,"fromString"),e.fromString=t;function n(o){switch(o){case e.Off:return"off";case e.Messages:return"messages";case e.Compact:return"compact";case e.Verbose:return"verbose";default:return"off"}}s(n,"toString"),e.toString=n})(Je||(_e.Trace=Je={}));var tn;(function(e){e.Text="text",e.JSON="json"})(tn||(_e.TraceFormat=tn={}));(function(e){function t(n){return ht.string(n)?(n=n.toLowerCase(),n==="json"?e.JSON:e.Text):e.Text}s(t,"fromString"),e.fromString=t})(tn||(_e.TraceFormat=tn={}));var Tl;(function(e){e.type=new Ie.NotificationType("$/setTrace")})(Tl||(_e.SetTraceNotification=Tl={}));var Qi;(function(e){e.type=new Ie.NotificationType("$/logTrace")})(Qi||(_e.LogTraceNotification=Qi={}));var Ss;(function(e){e[e.Closed=1]="Closed",e[e.Disposed=2]="Disposed",e[e.AlreadyListening=3]="AlreadyListening"})(Ss||(_e.ConnectionErrors=Ss={}));var Er=class e extends Error{static{s(this,"ConnectionError")}constructor(t,n){super(n),this.code=t,Object.setPrototypeOf(this,e.prototype)}};_e.ConnectionError=Er;var Pl;(function(e){function t(n){let o=n;return o&&ht.func(o.cancelUndispatched)}s(t,"is"),e.is=t})(Pl||(_e.ConnectionStrategy=Pl={}));var Zi;(function(e){function t(n){let o=n;return o&&(o.kind===void 0||o.kind==="id")&&ht.func(o.createCancellationTokenSource)&&(o.dispose===void 0||ht.func(o.dispose))}s(t,"is"),e.is=t})(Zi||(_e.IdCancellationReceiverStrategy=Zi={}));var Rl;(function(e){function t(n){let o=n;return o&&o.kind==="request"&&ht.func(o.createCancellationTokenSource)&&(o.dispose===void 0||ht.func(o.dispose))}s(t,"is"),e.is=t})(Rl||(_e.RequestCancellationReceiverStrategy=Rl={}));var ea;(function(e){e.Message=Object.freeze({createCancellationTokenSource(n){return new Il.CancellationTokenSource}});function t(n){return Zi.is(n)||Rl.is(n)}s(t,"is"),e.is=t})(ea||(_e.CancellationReceiverStrategy=ea={}));var ta;(function(e){e.Message=Object.freeze({sendCancellation(n,o){return n.sendNotification(Is.type,{id:o})},cleanup(n){}});function t(n){let o=n;return o&&ht.func(o.sendCancellation)&&ht.func(o.cleanup)}s(t,"is"),e.is=t})(ta||(_e.CancellationSenderStrategy=ta={}));var na;(function(e){e.Message=Object.freeze({receiver:ea.Message,sender:ta.Message});function t(n){let o=n;return o&&ea.is(o.receiver)&&ta.is(o.sender)}s(t,"is"),e.is=t})(na||(_e.CancellationStrategy=na={}));var oa;(function(e){function t(n){let o=n;return o&&ht.func(o.handleMessage)}s(t,"is"),e.is=t})(oa||(_e.MessageStrategy=oa={}));var am;(function(e){function t(n){let o=n;return o&&(na.is(o.cancellationStrategy)||Pl.is(o.connectionStrategy)||oa.is(o.messageStrategy))}s(t,"is"),e.is=t})(am||(_e.ConnectionOptions=am={}));var wn;(function(e){e[e.New=1]="New",e[e.Listening=2]="Listening",e[e.Closed=3]="Closed",e[e.Disposed=4]="Disposed"})(wn||(wn={}));function bx(e,t,n,o){let i=n!==void 0?n:_e.NullLogger,a=0,l=0,u=0,f="2.0",m,p=new Map,h,g=new Map,I=new Map,T,v=new sm.LinkedMap,P=new Map,d=new Set,k=new Map,y=Je.Off,S=tn.Text,E,w=wn.New,M=new vs.Emitter,C=new vs.Emitter,$=new vs.Emitter,U=new vs.Emitter,H=new vs.Emitter,ue=o&&o.cancellationStrategy?o.cancellationStrategy:na.Message;function L(b){if(b===null)throw new Error("Can't send requests with id null since the response can't be correlated.");return"req-"+b.toString()}s(L,"createRequestQueueKey");function W(b){return b===null?"res-unknown-"+(++u).toString():"res-"+b.toString()}s(W,"createResponseQueueKey");function D(){return"not-"+(++l).toString()}s(D,"createNotificationQueueKey");function A(b,O){Ie.Message.isRequest(O)?b.set(L(O.id),O):Ie.Message.isResponse(O)?b.set(W(O.id),O):b.set(D(),O)}s(A,"addMessageToQueue");function _(b){}s(_,"cancelUndispatched");function N(){return w===wn.Listening}s(N,"isListening");function q(){return w===wn.Closed}s(q,"isClosed");function j(){return w===wn.Disposed}s(j,"isDisposed");function ve(){(w===wn.New||w===wn.Listening)&&(w=wn.Closed,C.fire(void 0))}s(ve,"closeHandler");function pe(b){M.fire([b,void 0,void 0])}s(pe,"readErrorHandler");function ae(b){M.fire(b)}s(ae,"writeErrorHandler"),e.onClose(ve),e.onError(pe),t.onClose(ve),t.onError(ae);function oe(){T||v.size===0||(T=(0,rm.default)().timer.setImmediate(()=>{T=void 0,Le()}))}s(oe,"triggerMessageQueue");function $e(b){Ie.Message.isRequest(b)?Y(b):Ie.Message.isNotification(b)?te(b):Ie.Message.isResponse(b)?J(b):ke(b)}s($e,"handleMessage");function Le(){if(v.size===0)return;let b=v.shift();try{let O=o?.messageStrategy;oa.is(O)?O.handleMessage(b,$e):$e(b)}finally{oe()}}s(Le,"processMessageQueue");let R=s(b=>{try{if(Ie.Message.isNotification(b)&&b.method===Is.type.method){let O=b.params.id,F=L(O),Z=v.get(F);if(Ie.Message.isRequest(Z)){let ce=o?.connectionStrategy,de=ce&&ce.cancelUndispatched?ce.cancelUndispatched(Z,_):void 0;if(de&&(de.error!==void 0||de.result!==void 0)){v.delete(F),k.delete(O),de.id=Z.id,G(de,b.method,Date.now()),t.write(de).catch(()=>i.error("Sending response for canceled message failed."));return}}let Oe=k.get(O);if(Oe!==void 0){Oe.cancel(),le(b);return}else d.add(O)}A(v,b)}finally{oe()}},"callback");function Y(b){if(j())return;function O(Q,he,ge){let Re={jsonrpc:f,id:b.id};Q instanceof Ie.ResponseError?Re.error=Q.toJson():Re.result=Q===void 0?null:Q,G(Re,he,ge),t.write(Re).catch(()=>i.error("Sending response failed."))}s(O,"reply");function F(Q,he,ge){let Re={jsonrpc:f,id:b.id,error:Q.toJson()};G(Re,he,ge),t.write(Re).catch(()=>i.error("Sending response failed."))}s(F,"replyError");function Z(Q,he,ge){Q===void 0&&(Q=null);let Re={jsonrpc:f,id:b.id,result:Q};G(Re,he,ge),t.write(Re).catch(()=>i.error("Sending response failed."))}s(Z,"replySuccess"),ye(b);let Oe=p.get(b.method),ce,de;Oe&&(ce=Oe.type,de=Oe.handler);let X=Date.now();if(de||m){let Q=b.id??String(Date.now()),he=Zi.is(ue.receiver)?ue.receiver.createCancellationTokenSource(Q):ue.receiver.createCancellationTokenSource(b);b.id!==null&&d.has(b.id)&&he.cancel(),b.id!==null&&k.set(Q,he);try{let ge;if(de)if(b.params===void 0){if(ce!==void 0&&ce.numberOfParams!==0){F(new Ie.ResponseError(Ie.ErrorCodes.InvalidParams,`Request ${b.method} defines ${ce.numberOfParams} params but received none.`),b.method,X);return}ge=de(he.token)}else if(Array.isArray(b.params)){if(ce!==void 0&&ce.parameterStructures===Ie.ParameterStructures.byName){F(new Ie.ResponseError(Ie.ErrorCodes.InvalidParams,`Request ${b.method} defines parameters by name but received parameters by position`),b.method,X);return}ge=de(...b.params,he.token)}else{if(ce!==void 0&&ce.parameterStructures===Ie.ParameterStructures.byPosition){F(new Ie.ResponseError(Ie.ErrorCodes.InvalidParams,`Request ${b.method} defines parameters by position but received parameters by name`),b.method,X);return}ge=de(b.params,he.token)}else m&&(ge=m(b.method,b.params,he.token));let Re=ge;ge?Re.then?Re.then(Qe=>{k.delete(Q),O(Qe,b.method,X)},Qe=>{k.delete(Q),Qe instanceof Ie.ResponseError?F(Qe,b.method,X):Qe&&ht.string(Qe.message)?F(new Ie.ResponseError(Ie.ErrorCodes.InternalError,`Request ${b.method} failed with message: ${Qe.message}`),b.method,X):F(new Ie.ResponseError(Ie.ErrorCodes.InternalError,`Request ${b.method} failed unexpectedly without providing any details.`),b.method,X)}):(k.delete(Q),O(ge,b.method,X)):(k.delete(Q),Z(ge,b.method,X))}catch(ge){k.delete(Q),ge instanceof Ie.ResponseError?O(ge,b.method,X):ge&&ht.string(ge.message)?F(new Ie.ResponseError(Ie.ErrorCodes.InternalError,`Request ${b.method} failed with message: ${ge.message}`),b.method,X):F(new Ie.ResponseError(Ie.ErrorCodes.InternalError,`Request ${b.method} failed unexpectedly without providing any details.`),b.method,X)}}else F(new Ie.ResponseError(Ie.ErrorCodes.MethodNotFound,`Unhandled method ${b.method}`),b.method,X)}s(Y,"handleRequest");function J(b){if(!j())if(b.id===null)b.error?i.error(`Received response message without id: Error is:
23
23
  ${JSON.stringify(b.error,void 0,4)}`):i.error("Received response message without id. No further error information provided.");else{let O=b.id,F=P.get(O);if(ne(b,F),F!==void 0){P.delete(O);try{if(b.error){let Z=b.error;F.reject(new Ie.ResponseError(Z.code,Z.message,Z.data))}else if(b.result!==void 0)F.resolve(b.result);else throw new Error("Should never happen.")}catch(Z){Z.message?i.error(`Response handler '${F.method}' failed with message: ${Z.message}`):i.error(`Response handler '${F.method}' failed unexpectedly.`)}}}}s(J,"handleResponse");function te(b){if(j())return;let O,F;if(b.method===Is.type.method){let Z=b.params.id;d.delete(Z),le(b);return}else{let Z=g.get(b.method);Z&&(F=Z.handler,O=Z.type)}if(F||h)try{if(le(b),F)if(b.params===void 0)O!==void 0&&O.numberOfParams!==0&&O.parameterStructures!==Ie.ParameterStructures.byName&&i.error(`Notification ${b.method} defines ${O.numberOfParams} params but received none.`),F();else if(Array.isArray(b.params)){let Z=b.params;b.method===xs.type.method&&Z.length===2&&kl.is(Z[0])?F({token:Z[0],value:Z[1]}):(O!==void 0&&(O.parameterStructures===Ie.ParameterStructures.byName&&i.error(`Notification ${b.method} defines parameters by name but received parameters by position`),O.numberOfParams!==b.params.length&&i.error(`Notification ${b.method} defines ${O.numberOfParams} params but received ${Z.length} arguments`)),F(...Z))}else O!==void 0&&O.parameterStructures===Ie.ParameterStructures.byPosition&&i.error(`Notification ${b.method} defines parameters by position but received parameters by name`),F(b.params);else h&&h(b.method,b.params)}catch(Z){Z.message?i.error(`Notification handler '${b.method}' failed with message: ${Z.message}`):i.error(`Notification handler '${b.method}' failed unexpectedly.`)}else $.fire(b)}s(te,"handleNotification");function ke(b){if(!b){i.error("Received empty message.");return}i.error(`Received message which is neither a response nor a notification message:
24
- ${JSON.stringify(b,null,4)}`);let O=b;if(ht.string(O.id)||ht.number(O.id)){let F=O.id,Z=P.get(F);Z&&Z.reject(new Error("The received response has neither a result nor an error property."))}}s(ke,"handleInvalidMessage");function He(b){if(b!=null)switch(y){case Je.Verbose:return JSON.stringify(b,null,4);case Je.Compact:return JSON.stringify(b);default:return}}s(He,"stringifyTrace");function Pn(b){if(!(y===Je.Off||!E))if(x===tn.Text){let O;(y===Je.Verbose||y===Je.Compact)&&b.params&&(O=`Params: ${He(b.params)}
24
+ ${JSON.stringify(b,null,4)}`);let O=b;if(ht.string(O.id)||ht.number(O.id)){let F=O.id,Z=P.get(F);Z&&Z.reject(new Error("The received response has neither a result nor an error property."))}}s(ke,"handleInvalidMessage");function He(b){if(b!=null)switch(y){case Je.Verbose:return JSON.stringify(b,null,4);case Je.Compact:return JSON.stringify(b);default:return}}s(He,"stringifyTrace");function Pn(b){if(!(y===Je.Off||!E))if(S===tn.Text){let O;(y===Je.Verbose||y===Je.Compact)&&b.params&&(O=`Params: ${He(b.params)}
25
25
 
26
- `),E.log(`Sending request '${b.method} - (${b.id})'.`,O)}else re("send-request",b)}s(Pn,"traceSendingRequest");function S(b){if(!(y===Je.Off||!E))if(x===tn.Text){let O;(y===Je.Verbose||y===Je.Compact)&&(b.params?O=`Params: ${He(b.params)}
26
+ `),E.log(`Sending request '${b.method} - (${b.id})'.`,O)}else re("send-request",b)}s(Pn,"traceSendingRequest");function x(b){if(!(y===Je.Off||!E))if(S===tn.Text){let O;(y===Je.Verbose||y===Je.Compact)&&(b.params?O=`Params: ${He(b.params)}
27
27
 
28
28
  `:O=`No parameters provided.
29
29
 
30
- `),E.log(`Sending notification '${b.method}'.`,O)}else re("send-notification",b)}s(S,"traceSendingNotification");function G(b,O,F){if(!(y===Je.Off||!E))if(x===tn.Text){let Z;(y===Je.Verbose||y===Je.Compact)&&(b.error&&b.error.data?Z=`Error data: ${He(b.error.data)}
30
+ `),E.log(`Sending notification '${b.method}'.`,O)}else re("send-notification",b)}s(x,"traceSendingNotification");function G(b,O,F){if(!(y===Je.Off||!E))if(S===tn.Text){let Z;(y===Je.Verbose||y===Je.Compact)&&(b.error&&b.error.data?Z=`Error data: ${He(b.error.data)}
31
31
 
32
32
  `:b.result?Z=`Result: ${He(b.result)}
33
33
 
34
34
  `:b.error===void 0&&(Z=`No result returned.
35
35
 
36
- `)),E.log(`Sending response '${O} - (${b.id})'. Processing request took ${Date.now()-F}ms`,Z)}else re("send-response",b)}s(G,"traceSendingResponse");function ye(b){if(!(y===Je.Off||!E))if(x===tn.Text){let O;(y===Je.Verbose||y===Je.Compact)&&b.params&&(O=`Params: ${He(b.params)}
36
+ `)),E.log(`Sending response '${O} - (${b.id})'. Processing request took ${Date.now()-F}ms`,Z)}else re("send-response",b)}s(G,"traceSendingResponse");function ye(b){if(!(y===Je.Off||!E))if(S===tn.Text){let O;(y===Je.Verbose||y===Je.Compact)&&b.params&&(O=`Params: ${He(b.params)}
37
37
 
38
- `),E.log(`Received request '${b.method} - (${b.id})'.`,O)}else re("receive-request",b)}s(ye,"traceReceivedRequest");function le(b){if(!(y===Je.Off||!E||b.method===Qi.type.method))if(x===tn.Text){let O;(y===Je.Verbose||y===Je.Compact)&&(b.params?O=`Params: ${He(b.params)}
38
+ `),E.log(`Received request '${b.method} - (${b.id})'.`,O)}else re("receive-request",b)}s(ye,"traceReceivedRequest");function le(b){if(!(y===Je.Off||!E||b.method===Qi.type.method))if(S===tn.Text){let O;(y===Je.Verbose||y===Je.Compact)&&(b.params?O=`Params: ${He(b.params)}
39
39
 
40
40
  `:O=`No parameters provided.
41
41
 
42
- `),E.log(`Received notification '${b.method}'.`,O)}else re("receive-notification",b)}s(le,"traceReceivedNotification");function ne(b,O){if(!(y===Je.Off||!E))if(x===tn.Text){let F;if((y===Je.Verbose||y===Je.Compact)&&(b.error&&b.error.data?F=`Error data: ${He(b.error.data)}
42
+ `),E.log(`Received notification '${b.method}'.`,O)}else re("receive-notification",b)}s(le,"traceReceivedNotification");function ne(b,O){if(!(y===Je.Off||!E))if(S===tn.Text){let F;if((y===Je.Verbose||y===Je.Compact)&&(b.error&&b.error.data?F=`Error data: ${He(b.error.data)}
43
43
 
44
44
  `:b.result?F=`Result: ${He(b.result)}
45
45
 
46
46
  `:b.error===void 0&&(F=`No result returned.
47
47
 
48
- `)),O){let Z=b.error?` Request failed: ${b.error.message} (${b.error.code}).`:"";E.log(`Received response '${O.method} - (${b.id})' in ${Date.now()-O.timerStart}ms.${Z}`,F)}else E.log(`Received response ${b.id} without active response promise.`,F)}else re("receive-response",b)}s(ne,"traceReceivedResponse");function re(b,O){if(!E||y===Je.Off)return;let F={isLSPMessage:!0,type:b,message:O,timestamp:Date.now()};E.log(F)}s(re,"logLSPMessage");function se(){if(q())throw new Er(Ss.Closed,"Connection is closed.");if(j())throw new Er(Ss.Disposed,"Connection is disposed.")}s(se,"throwIfClosedOrDisposed");function X(){if(N())throw new Er(Ss.AlreadyListening,"Connection is already listening")}s(X,"throwIfListening");function je(){if(!N())throw new Error("Call listen() first.")}s(je,"throwIfNotListening");function qe(b){return b===void 0?null:b}s(qe,"undefinedToNull");function Fe(b){if(b!==null)return b}s(Fe,"nullToUndefined");function Xe(b){return b!=null&&!Array.isArray(b)&&typeof b=="object"}s(Xe,"isNamedParam");function xe(b,O){switch(b){case Ie.ParameterStructures.auto:return Xe(O)?Fe(O):[qe(O)];case Ie.ParameterStructures.byName:if(!Xe(O))throw new Error("Received parameters by name but param is not an object literal.");return Fe(O);case Ie.ParameterStructures.byPosition:return[qe(O)];default:throw new Error(`Unknown parameter structure ${b.toString()}`)}}s(xe,"computeSingleParam");function Be(b,O){let F,Z=b.numberOfParams;switch(Z){case 0:F=void 0;break;case 1:F=xe(b.parameterStructures,O[0]);break;default:F=[];for(let Oe=0;Oe<O.length&&Oe<Z;Oe++)F.push(qe(O[Oe]));if(O.length<Z)for(let Oe=O.length;Oe<Z;Oe++)F.push(null);break}return F}s(Be,"computeMessageParams");let z={sendNotification:s((b,...O)=>{se();let F,Z;if(ht.string(b)){F=b;let ce=O[0],de=0,K=Ie.ParameterStructures.auto;Ie.ParameterStructures.is(ce)&&(de=1,K=ce);let Q=O.length,he=Q-de;switch(he){case 0:Z=void 0;break;case 1:Z=xe(K,O[de]);break;default:if(K===Ie.ParameterStructures.byName)throw new Error(`Received ${he} parameters for 'by Name' notification parameter structure.`);Z=O.slice(de,Q).map(ge=>qe(ge));break}}else{let ce=O;F=b.method,Z=Be(b,ce)}let Oe={jsonrpc:f,method:F,params:Z};return S(Oe),t.write(Oe).catch(ce=>{throw i.error("Sending notification failed."),ce})},"sendNotification"),onNotification:s((b,O)=>{se();let F;return ht.func(b)?h=b:O&&(ht.string(b)?(F=b,g.set(b,{type:void 0,handler:O})):(F=b.method,g.set(b.method,{type:b,handler:O}))),{dispose:s(()=>{F!==void 0?g.delete(F):h=void 0},"dispose")}},"onNotification"),onProgress:s((b,O,F)=>{if(I.has(O))throw new Error(`Progress handler for token ${O} already registered`);return I.set(O,F),{dispose:s(()=>{I.delete(O)},"dispose")}},"onProgress"),sendProgress:s((b,O,F)=>z.sendNotification(xs.type,{token:O,value:F}),"sendProgress"),onUnhandledProgress:U.event,sendRequest:s((b,...O)=>{se(),je();let F,Z,Oe;if(ht.string(b)){F=b;let Q=O[0],he=O[O.length-1],ge=0,Re=Ie.ParameterStructures.auto;Ie.ParameterStructures.is(Q)&&(ge=1,Re=Q);let Qe=O.length;Il.CancellationToken.is(he)&&(Qe=Qe-1,Oe=he);let vt=Qe-ge;switch(vt){case 0:Z=void 0;break;case 1:Z=xe(Re,O[ge]);break;default:if(Re===Ie.ParameterStructures.byName)throw new Error(`Received ${vt} parameters for 'by Name' request parameter structure.`);Z=O.slice(ge,Qe).map(zo=>qe(zo));break}}else{let Q=O;F=b.method,Z=Be(b,Q);let he=b.numberOfParams;Oe=Il.CancellationToken.is(Q[he])?Q[he]:void 0}let ce=a++,de;Oe&&(de=Oe.onCancellationRequested(()=>{let Q=ue.sender.sendCancellation(z,ce);return Q===void 0?(i.log(`Received no promise from cancellation strategy when cancelling id ${ce}`),Promise.resolve()):Q.catch(()=>{i.log(`Sending cancellation messages for id ${ce} failed`)})}));let K={jsonrpc:f,id:ce,method:F,params:Z};return Pn(K),typeof ue.sender.enableCancellation=="function"&&ue.sender.enableCancellation(K),new Promise(async(Q,he)=>{let ge=s(vt=>{Q(vt),ue.sender.cleanup(ce),de?.dispose()},"resolveWithCleanup"),Re=s(vt=>{he(vt),ue.sender.cleanup(ce),de?.dispose()},"rejectWithCleanup"),Qe={method:F,timerStart:Date.now(),resolve:ge,reject:Re};try{P.set(ce,Qe),await t.write(K)}catch(vt){throw P.delete(ce),Qe.reject(new Ie.ResponseError(Ie.ErrorCodes.MessageWriteError,vt.message?vt.message:"Unknown reason")),i.error("Sending request failed."),vt}})},"sendRequest"),onRequest:s((b,O)=>{se();let F=null;return El.is(b)?(F=void 0,m=b):ht.string(b)?(F=null,O!==void 0&&(F=b,p.set(b,{handler:O,type:void 0}))):O!==void 0&&(F=b.method,p.set(b.method,{type:b,handler:O})),{dispose:s(()=>{F!==null&&(F!==void 0?p.delete(F):m=void 0)},"dispose")}},"onRequest"),hasPendingResponse:s(()=>P.size>0,"hasPendingResponse"),trace:s(async(b,O,F)=>{let Z=!1,Oe=tn.Text;F!==void 0&&(ht.boolean(F)?Z=F:(Z=F.sendNotification||!1,Oe=F.traceFormat||tn.Text)),y=b,x=Oe,y===Je.Off?E=void 0:E=O,Z&&!q()&&!j()&&await z.sendNotification(Tl.type,{value:Je.toString(b)})},"trace"),onError:M.event,onClose:C.event,onUnhandledNotification:$.event,onDispose:H.event,end:s(()=>{t.end()},"end"),dispose:s(()=>{if(j())return;w=wn.Disposed,H.fire(void 0);let b=new Ie.ResponseError(Ie.ErrorCodes.PendingResponseRejected,"Pending response rejected since connection got disposed");for(let O of P.values())O.reject(b);P=new Map,k=new Map,d=new Set,v=new sm.LinkedMap,ht.func(t.dispose)&&t.dispose(),ht.func(e.dispose)&&e.dispose()},"dispose"),listen:s(()=>{se(),X(),w=wn.Listening,e.listen(R)},"listen"),inspect:s(()=>{(0,rm.default)().console.log("inspect")},"inspect")};return z.onNotification(Qi.type,b=>{if(y===Je.Off||!E)return;let O=y===Je.Verbose||y===Je.Compact;E.log(b.message,O?b.verbose:void 0)}),z.onNotification(xs.type,b=>{let O=I.get(b.token);O?O(b.value):U.fire(b)}),z}s(yx,"createMessageConnection");_e.createMessageConnection=yx});var ra=Dt(B=>{"use strict";Object.defineProperty(B,"__esModule",{value:!0});B.ProgressType=B.ProgressToken=B.createMessageConnection=B.NullLogger=B.ConnectionOptions=B.ConnectionStrategy=B.AbstractMessageBuffer=B.WriteableStreamMessageWriter=B.AbstractMessageWriter=B.MessageWriter=B.ReadableStreamMessageReader=B.AbstractMessageReader=B.MessageReader=B.SharedArrayReceiverStrategy=B.SharedArraySenderStrategy=B.CancellationToken=B.CancellationTokenSource=B.Emitter=B.Event=B.Disposable=B.LRUCache=B.Touch=B.LinkedMap=B.ParameterStructures=B.NotificationType9=B.NotificationType8=B.NotificationType7=B.NotificationType6=B.NotificationType5=B.NotificationType4=B.NotificationType3=B.NotificationType2=B.NotificationType1=B.NotificationType0=B.NotificationType=B.ErrorCodes=B.ResponseError=B.RequestType9=B.RequestType8=B.RequestType7=B.RequestType6=B.RequestType5=B.RequestType4=B.RequestType3=B.RequestType2=B.RequestType1=B.RequestType0=B.RequestType=B.Message=B.RAL=void 0;B.MessageStrategy=B.CancellationStrategy=B.CancellationSenderStrategy=B.CancellationReceiverStrategy=B.ConnectionError=B.ConnectionErrors=B.LogTraceNotification=B.SetTraceNotification=B.TraceFormat=B.TraceValues=B.Trace=void 0;var rt=tl();Object.defineProperty(B,"Message",{enumerable:!0,get:s(function(){return rt.Message},"get")});Object.defineProperty(B,"RequestType",{enumerable:!0,get:s(function(){return rt.RequestType},"get")});Object.defineProperty(B,"RequestType0",{enumerable:!0,get:s(function(){return rt.RequestType0},"get")});Object.defineProperty(B,"RequestType1",{enumerable:!0,get:s(function(){return rt.RequestType1},"get")});Object.defineProperty(B,"RequestType2",{enumerable:!0,get:s(function(){return rt.RequestType2},"get")});Object.defineProperty(B,"RequestType3",{enumerable:!0,get:s(function(){return rt.RequestType3},"get")});Object.defineProperty(B,"RequestType4",{enumerable:!0,get:s(function(){return rt.RequestType4},"get")});Object.defineProperty(B,"RequestType5",{enumerable:!0,get:s(function(){return rt.RequestType5},"get")});Object.defineProperty(B,"RequestType6",{enumerable:!0,get:s(function(){return rt.RequestType6},"get")});Object.defineProperty(B,"RequestType7",{enumerable:!0,get:s(function(){return rt.RequestType7},"get")});Object.defineProperty(B,"RequestType8",{enumerable:!0,get:s(function(){return rt.RequestType8},"get")});Object.defineProperty(B,"RequestType9",{enumerable:!0,get:s(function(){return rt.RequestType9},"get")});Object.defineProperty(B,"ResponseError",{enumerable:!0,get:s(function(){return rt.ResponseError},"get")});Object.defineProperty(B,"ErrorCodes",{enumerable:!0,get:s(function(){return rt.ErrorCodes},"get")});Object.defineProperty(B,"NotificationType",{enumerable:!0,get:s(function(){return rt.NotificationType},"get")});Object.defineProperty(B,"NotificationType0",{enumerable:!0,get:s(function(){return rt.NotificationType0},"get")});Object.defineProperty(B,"NotificationType1",{enumerable:!0,get:s(function(){return rt.NotificationType1},"get")});Object.defineProperty(B,"NotificationType2",{enumerable:!0,get:s(function(){return rt.NotificationType2},"get")});Object.defineProperty(B,"NotificationType3",{enumerable:!0,get:s(function(){return rt.NotificationType3},"get")});Object.defineProperty(B,"NotificationType4",{enumerable:!0,get:s(function(){return rt.NotificationType4},"get")});Object.defineProperty(B,"NotificationType5",{enumerable:!0,get:s(function(){return rt.NotificationType5},"get")});Object.defineProperty(B,"NotificationType6",{enumerable:!0,get:s(function(){return rt.NotificationType6},"get")});Object.defineProperty(B,"NotificationType7",{enumerable:!0,get:s(function(){return rt.NotificationType7},"get")});Object.defineProperty(B,"NotificationType8",{enumerable:!0,get:s(function(){return rt.NotificationType8},"get")});Object.defineProperty(B,"NotificationType9",{enumerable:!0,get:s(function(){return rt.NotificationType9},"get")});Object.defineProperty(B,"ParameterStructures",{enumerable:!0,get:s(function(){return rt.ParameterStructures},"get")});var Cl=ol();Object.defineProperty(B,"LinkedMap",{enumerable:!0,get:s(function(){return Cl.LinkedMap},"get")});Object.defineProperty(B,"LRUCache",{enumerable:!0,get:s(function(){return Cl.LRUCache},"get")});Object.defineProperty(B,"Touch",{enumerable:!0,get:s(function(){return Cl.Touch},"get")});var bx=Hf();Object.defineProperty(B,"Disposable",{enumerable:!0,get:s(function(){return bx.Disposable},"get")});var lm=Sr();Object.defineProperty(B,"Event",{enumerable:!0,get:s(function(){return lm.Event},"get")});Object.defineProperty(B,"Emitter",{enumerable:!0,get:s(function(){return lm.Emitter},"get")});var dm=Hi();Object.defineProperty(B,"CancellationTokenSource",{enumerable:!0,get:s(function(){return dm.CancellationTokenSource},"get")});Object.defineProperty(B,"CancellationToken",{enumerable:!0,get:s(function(){return dm.CancellationToken},"get")});var um=Jf();Object.defineProperty(B,"SharedArraySenderStrategy",{enumerable:!0,get:s(function(){return um.SharedArraySenderStrategy},"get")});Object.defineProperty(B,"SharedArrayReceiverStrategy",{enumerable:!0,get:s(function(){return um.SharedArrayReceiverStrategy},"get")});var Al=Xf();Object.defineProperty(B,"MessageReader",{enumerable:!0,get:s(function(){return Al.MessageReader},"get")});Object.defineProperty(B,"AbstractMessageReader",{enumerable:!0,get:s(function(){return Al.AbstractMessageReader},"get")});Object.defineProperty(B,"ReadableStreamMessageReader",{enumerable:!0,get:s(function(){return Al.ReadableStreamMessageReader},"get")});var Ml=nm();Object.defineProperty(B,"MessageWriter",{enumerable:!0,get:s(function(){return Ml.MessageWriter},"get")});Object.defineProperty(B,"AbstractMessageWriter",{enumerable:!0,get:s(function(){return Ml.AbstractMessageWriter},"get")});Object.defineProperty(B,"WriteableStreamMessageWriter",{enumerable:!0,get:s(function(){return Ml.WriteableStreamMessageWriter},"get")});var wx=om();Object.defineProperty(B,"AbstractMessageBuffer",{enumerable:!0,get:s(function(){return wx.AbstractMessageBuffer},"get")});var Mt=cm();Object.defineProperty(B,"ConnectionStrategy",{enumerable:!0,get:s(function(){return Mt.ConnectionStrategy},"get")});Object.defineProperty(B,"ConnectionOptions",{enumerable:!0,get:s(function(){return Mt.ConnectionOptions},"get")});Object.defineProperty(B,"NullLogger",{enumerable:!0,get:s(function(){return Mt.NullLogger},"get")});Object.defineProperty(B,"createMessageConnection",{enumerable:!0,get:s(function(){return Mt.createMessageConnection},"get")});Object.defineProperty(B,"ProgressToken",{enumerable:!0,get:s(function(){return Mt.ProgressToken},"get")});Object.defineProperty(B,"ProgressType",{enumerable:!0,get:s(function(){return Mt.ProgressType},"get")});Object.defineProperty(B,"Trace",{enumerable:!0,get:s(function(){return Mt.Trace},"get")});Object.defineProperty(B,"TraceValues",{enumerable:!0,get:s(function(){return Mt.TraceValues},"get")});Object.defineProperty(B,"TraceFormat",{enumerable:!0,get:s(function(){return Mt.TraceFormat},"get")});Object.defineProperty(B,"SetTraceNotification",{enumerable:!0,get:s(function(){return Mt.SetTraceNotification},"get")});Object.defineProperty(B,"LogTraceNotification",{enumerable:!0,get:s(function(){return Mt.LogTraceNotification},"get")});Object.defineProperty(B,"ConnectionErrors",{enumerable:!0,get:s(function(){return Mt.ConnectionErrors},"get")});Object.defineProperty(B,"ConnectionError",{enumerable:!0,get:s(function(){return Mt.ConnectionError},"get")});Object.defineProperty(B,"CancellationReceiverStrategy",{enumerable:!0,get:s(function(){return Mt.CancellationReceiverStrategy},"get")});Object.defineProperty(B,"CancellationSenderStrategy",{enumerable:!0,get:s(function(){return Mt.CancellationSenderStrategy},"get")});Object.defineProperty(B,"CancellationStrategy",{enumerable:!0,get:s(function(){return Mt.CancellationStrategy},"get")});Object.defineProperty(B,"MessageStrategy",{enumerable:!0,get:s(function(){return Mt.MessageStrategy},"get")});var vx=oo();B.RAL=vx.default});var mm=Dt(Nl=>{"use strict";Object.defineProperty(Nl,"__esModule",{value:!0});var pm=Hr("util"),Un=ra(),sa=class e extends Un.AbstractMessageBuffer{static{s(this,"MessageBuffer")}constructor(t="utf-8"){super(t)}emptyBuffer(){return e.emptyBuffer}fromString(t,n){return Buffer.from(t,n)}toString(t,n){return t instanceof Buffer?t.toString(n):new pm.TextDecoder(n).decode(t)}asNative(t,n){return n===void 0?t instanceof Buffer?t:Buffer.from(t):t instanceof Buffer?t.slice(0,n):Buffer.from(t,0,n)}allocNative(t){return Buffer.allocUnsafe(t)}};sa.emptyBuffer=Buffer.allocUnsafe(0);var _l=class{static{s(this,"ReadableStreamWrapper")}constructor(t){this.stream=t}onClose(t){return this.stream.on("close",t),Un.Disposable.create(()=>this.stream.off("close",t))}onError(t){return this.stream.on("error",t),Un.Disposable.create(()=>this.stream.off("error",t))}onEnd(t){return this.stream.on("end",t),Un.Disposable.create(()=>this.stream.off("end",t))}onData(t){return this.stream.on("data",t),Un.Disposable.create(()=>this.stream.off("data",t))}},Ol=class{static{s(this,"WritableStreamWrapper")}constructor(t){this.stream=t}onClose(t){return this.stream.on("close",t),Un.Disposable.create(()=>this.stream.off("close",t))}onError(t){return this.stream.on("error",t),Un.Disposable.create(()=>this.stream.off("error",t))}onEnd(t){return this.stream.on("end",t),Un.Disposable.create(()=>this.stream.off("end",t))}write(t,n){return new Promise((o,i)=>{let a=s(l=>{l==null?o():i(l)},"callback");typeof t=="string"?this.stream.write(t,n,a):this.stream.write(t,a)})}end(){this.stream.end()}},fm=Object.freeze({messageBuffer:Object.freeze({create:s(e=>new sa(e),"create")}),applicationJson:Object.freeze({encoder:Object.freeze({name:"application/json",encode:s((e,t)=>{try{return Promise.resolve(Buffer.from(JSON.stringify(e,void 0,0),t.charset))}catch(n){return Promise.reject(n)}},"encode")}),decoder:Object.freeze({name:"application/json",decode:s((e,t)=>{try{return e instanceof Buffer?Promise.resolve(JSON.parse(e.toString(t.charset))):Promise.resolve(JSON.parse(new pm.TextDecoder(t.charset).decode(e)))}catch(n){return Promise.reject(n)}},"decode")})}),stream:Object.freeze({asReadableStream:s(e=>new _l(e),"asReadableStream"),asWritableStream:s(e=>new Ol(e),"asWritableStream")}),console,timer:Object.freeze({setTimeout(e,t,...n){let o=setTimeout(e,t,...n);return{dispose:s(()=>clearTimeout(o),"dispose")}},setImmediate(e,...t){let n=setImmediate(e,...t);return{dispose:s(()=>clearImmediate(n),"dispose")}},setInterval(e,t,...n){let o=setInterval(e,t,...n);return{dispose:s(()=>clearInterval(o),"dispose")}}})});function Ll(){return fm}s(Ll,"RIL");(function(e){function t(){Un.RAL.install(fm)}s(t,"install"),e.install=t})(Ll||(Ll={}));Nl.default=Ll});var ym=Dt(ze=>{"use strict";var xx=ze&&ze.__createBinding||(Object.create?(function(e,t,n,o){o===void 0&&(o=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:s(function(){return t[n]},"get")}),Object.defineProperty(e,o,i)}):(function(e,t,n,o){o===void 0&&(o=n),e[o]=t[n]})),Sx=ze&&ze.__exportStar||function(e,t){for(var n in e)n!=="default"&&!Object.prototype.hasOwnProperty.call(t,n)&&xx(t,e,n)};Object.defineProperty(ze,"__esModule",{value:!0});ze.createMessageConnection=ze.createServerSocketTransport=ze.createClientSocketTransport=ze.createServerPipeTransport=ze.createClientPipeTransport=ze.generateRandomPipeName=ze.StreamMessageWriter=ze.StreamMessageReader=ze.SocketMessageWriter=ze.SocketMessageReader=ze.PortMessageWriter=ze.PortMessageReader=ze.IPCMessageWriter=ze.IPCMessageReader=void 0;var Tr=mm();Tr.default.install();var hm=Hr("path"),Ix=Hr("os"),kx=Hr("crypto"),ca=Hr("net"),nn=ra();Sx(ra(),ze);var jl=class extends nn.AbstractMessageReader{static{s(this,"IPCMessageReader")}constructor(t){super(),this.process=t;let n=this.process;n.on("error",o=>this.fireError(o)),n.on("close",()=>this.fireClose())}listen(t){return this.process.on("message",t),nn.Disposable.create(()=>this.process.off("message",t))}};ze.IPCMessageReader=jl;var Ul=class extends nn.AbstractMessageWriter{static{s(this,"IPCMessageWriter")}constructor(t){super(),this.process=t,this.errorCount=0;let n=this.process;n.on("error",o=>this.fireError(o)),n.on("close",()=>this.fireClose)}write(t){try{return typeof this.process.send=="function"&&this.process.send(t,void 0,void 0,n=>{n?(this.errorCount++,this.handleError(n,t)):this.errorCount=0}),Promise.resolve()}catch(n){return this.handleError(n,t),Promise.reject(n)}}handleError(t,n){this.errorCount++,this.fireError(t,n,this.errorCount)}end(){}};ze.IPCMessageWriter=Ul;var Fl=class extends nn.AbstractMessageReader{static{s(this,"PortMessageReader")}constructor(t){super(),this.onData=new nn.Emitter,t.on("close",()=>this.fireClose),t.on("error",n=>this.fireError(n)),t.on("message",n=>{this.onData.fire(n)})}listen(t){return this.onData.event(t)}};ze.PortMessageReader=Fl;var Bl=class extends nn.AbstractMessageWriter{static{s(this,"PortMessageWriter")}constructor(t){super(),this.port=t,this.errorCount=0,t.on("close",()=>this.fireClose()),t.on("error",n=>this.fireError(n))}write(t){try{return this.port.postMessage(t),Promise.resolve()}catch(n){return this.handleError(n,t),Promise.reject(n)}}handleError(t,n){this.errorCount++,this.fireError(t,n,this.errorCount)}end(){}};ze.PortMessageWriter=Bl;var To=class extends nn.ReadableStreamMessageReader{static{s(this,"SocketMessageReader")}constructor(t,n="utf-8"){super((0,Tr.default)().stream.asReadableStream(t),n)}};ze.SocketMessageReader=To;var Po=class extends nn.WriteableStreamMessageWriter{static{s(this,"SocketMessageWriter")}constructor(t,n){super((0,Tr.default)().stream.asWritableStream(t),n),this.socket=t}dispose(){super.dispose(),this.socket.destroy()}};ze.SocketMessageWriter=Po;var ia=class extends nn.ReadableStreamMessageReader{static{s(this,"StreamMessageReader")}constructor(t,n){super((0,Tr.default)().stream.asReadableStream(t),n)}};ze.StreamMessageReader=ia;var aa=class extends nn.WriteableStreamMessageWriter{static{s(this,"StreamMessageWriter")}constructor(t,n){super((0,Tr.default)().stream.asWritableStream(t),n)}};ze.StreamMessageWriter=aa;var gm=process.env.XDG_RUNTIME_DIR,Dx=new Map([["linux",107],["darwin",103]]);function Ex(){let e=(0,kx.randomBytes)(21).toString("hex");if(process.platform==="win32")return`\\\\.\\pipe\\vscode-jsonrpc-${e}-sock`;let t;gm?t=hm.join(gm,`vscode-ipc-${e}.sock`):t=hm.join(Ix.tmpdir(),`vscode-${e}.sock`);let n=Dx.get(process.platform);return n!==void 0&&t.length>n&&(0,Tr.default)().console.warn(`WARNING: IPC handle "${t}" is longer than ${n} characters.`),t}s(Ex,"generateRandomPipeName");ze.generateRandomPipeName=Ex;function Tx(e,t="utf-8"){let n,o=new Promise((i,a)=>{n=i});return new Promise((i,a)=>{let l=(0,ca.createServer)(u=>{l.close(),n([new To(u,t),new Po(u,t)])});l.on("error",a),l.listen(e,()=>{l.removeListener("error",a),i({onConnected:s(()=>o,"onConnected")})})})}s(Tx,"createClientPipeTransport");ze.createClientPipeTransport=Tx;function Px(e,t="utf-8"){let n=(0,ca.createConnection)(e);return[new To(n,t),new Po(n,t)]}s(Px,"createServerPipeTransport");ze.createServerPipeTransport=Px;function Rx(e,t="utf-8"){let n,o=new Promise((i,a)=>{n=i});return new Promise((i,a)=>{let l=(0,ca.createServer)(u=>{l.close(),n([new To(u,t),new Po(u,t)])});l.on("error",a),l.listen(e,"127.0.0.1",()=>{l.removeListener("error",a),i({onConnected:s(()=>o,"onConnected")})})})}s(Rx,"createClientSocketTransport");ze.createClientSocketTransport=Rx;function Cx(e,t="utf-8"){let n=(0,ca.createConnection)(e,"127.0.0.1");return[new To(n,t),new Po(n,t)]}s(Cx,"createServerSocketTransport");ze.createServerSocketTransport=Cx;function Ax(e){let t=e;return t.read!==void 0&&t.addListener!==void 0}s(Ax,"isReadableStream");function Mx(e){let t=e;return t.write!==void 0&&t.addListener!==void 0}s(Mx,"isWritableStream");function _x(e,t,n,o){n||(n=nn.NullLogger);let i=Ax(e)?new ia(e):e,a=Mx(t)?new aa(t):t;return nn.ConnectionStrategy.is(o)&&(o={connectionStrategy:o}),(0,nn.createMessageConnection)(i,a,n,o)}s(_x,"createMessageConnection");ze.createMessageConnection=_x});var wm=Dt((jO,bm)=>{"use strict";bm.exports=ym()});var vo={};fe(vo,{AppNodeBuilder:()=>vo,build:()=>Dg});function Dg(e,t=[]){let n=t;if(De.hasUnbound(e,Yn.node)&&!Eg(t,Yn.node)){let o=ju(t),i=Xs({service:Yn.Service,layer:o,deps:[]});n=t.concat([[Yn.node,i]])}return De.compile(e,n)}s(Dg,"build");function Eg(e,t){return e.some(([n])=>n.name===t.name)}s(Eg,"hasReplacement");var sc={};fe(sc,{Authorization:()=>rc,AuthorizeInput:()=>Ag,CallbackInput:()=>Mg,Method:()=>bi,Methods:()=>Zu,OauthCallbackFailed:()=>xi,OauthCodeMissing:()=>vi,OauthMissing:()=>wi,ProviderAuth:()=>sc,Service:()=>xo,ValidationFailed:()=>os,node:()=>Lg,use:()=>_g});var Qu=c.Struct({key:c.String,op:c.Literals(["eq","neq"]),value:c.String}),Tg=c.Struct({type:c.Literal("text"),key:c.String,message:c.String,placeholder:hn(c.String),when:hn(Qu)}),Pg=c.Struct({label:c.String,value:c.String,hint:hn(c.String)}),Rg=c.Struct({type:c.Literal("select"),key:c.String,message:c.String,options:c.Array(Pg),when:hn(Qu)}),Cg=c.Union([Tg,Rg]),bi=class extends c.Class("ProviderAuthMethod")({type:c.Literals(["oauth","api"]),label:c.String,prompts:hn(c.Array(Cg))}){static{s(this,"Method")}},Zu=c.Record(c.String,c.Array(bi)),rc=class extends c.Class("ProviderAuthAuthorization")({url:c.String,method:c.Literals(["auto","code"]),instructions:c.String}){static{s(this,"Authorization")}},Ag=c.Struct({method:c.Finite.annotate({description:"Auth method index"}),inputs:c.optional(c.Record(c.String,c.String)).annotate({description:"Prompt inputs"})}),Mg=c.Struct({method:c.Finite.annotate({description:"Auth method index"}),code:c.optional(c.String).annotate({description:"OAuth authorization code"})}),wi=class extends c.TaggedErrorClass()("ProviderAuthOauthMissing",{providerID:sn.ID}){static{s(this,"OauthMissing")}},vi=class extends c.TaggedErrorClass()("ProviderAuthOauthCodeMissing",{providerID:sn.ID}){static{s(this,"OauthCodeMissing")}},xi=class extends c.TaggedErrorClass()("ProviderAuthOauthCallbackFailed",{}){static{s(this,"OauthCallbackFailed")}},os=class extends c.TaggedErrorClass()("ProviderAuthValidationFailed",{field:c.String,message:c.String}){static{s(this,"ValidationFailed")}},xo=class extends Ce.Service()("@opencode/ProviderAuth"){static{s(this,"Service")}},_g=Wt(xo),Og=Pe.effect(xo,r.gen(function*(){let e=yield*Xt.Service,t=yield*ft.Service,n=yield*V.make(r.fn("ProviderAuth.state")(function*(){let u=yield*t.list();return{hooks:Go.fromEntries(Dd.filterMap(u,f=>f.auth?.provider!==void 0?Ma.succeed([sn.ID.make(f.auth.provider),f.auth]):Ma.failVoid)),pending:new Map}})),o=c.decodeUnknownSync(Zu),i=r.fn("ProviderAuth.methods")(function*(){let u=(yield*V.get(n)).hooks;return o(Go.map(u,f=>f.methods.map(m=>({type:m.type,label:m.label,...m.prompts&&{prompts:m.prompts.map(p=>p.type==="select"?{type:"select",key:p.key,message:p.message,options:p.options,...p.when&&{when:p.when}}:{type:"text",key:p.key,message:p.message,...p.placeholder&&{placeholder:p.placeholder},...p.when&&{when:p.when}})}}))))}),a=r.fn("ProviderAuth.authorize")(function*(u){let{hooks:f,pending:m}=yield*V.get(n),p=f[u.providerID].methods[u.method];if(p.type!=="oauth")return;if(p.prompts&&u.inputs){for(let g of p.prompts)if(g.type==="text"&&g.validate&&u.inputs[g.key]!==void 0){let I=g.validate(u.inputs[g.key]);if(I)return yield*new os({field:g.key,message:I})}}let h=yield*r.tryPromise({try:s(()=>p.authorize(u.inputs),"try"),catch:s(g=>new os({field:"authorize",message:g instanceof Error?g.message:String(g)}),"catch")});return m.set(u.providerID,h),{url:h.url,method:h.method,instructions:h.instructions}}),l=r.fn("ProviderAuth.callback")(function*(u){let m=(yield*V.get(n)).pending.get(u.providerID);if(!m)return yield*new wi({providerID:u.providerID});if(m.method==="code"&&!u.code)return yield*new vi({providerID:u.providerID});let p=yield*r.promise(()=>m.method==="code"?m.callback(u.code):m.callback());if(!p||p.type!=="success")return yield*new xi({});if("key"in p&&(yield*e.set(u.providerID,{type:"api",key:p.key,...p.metadata?{metadata:p.metadata}:{}})),"refresh"in p){let{type:h,provider:g,refresh:I,access:T,expires:v,...P}=p;yield*e.set(u.providerID,{type:"oauth",access:T,refresh:I,expires:v,...P})}});return xo.of({methods:i,authorize:a,callback:l})})),Lg=De.make({service:xo,layer:Og,deps:[Xt.node,ft.node]});var Qt={};fe(Qt,{Answer:()=>Vg,Event:()=>Ii,Info:()=>Bg,NotFoundError:()=>ss,Option:()=>Fg,Prompt:()=>$g,Question:()=>Qt,Rejected:()=>Hg,RejectedError:()=>rs,Replied:()=>Gg,Reply:()=>zg,Request:()=>Wg,Service:()=>tr,Tool:()=>qg,node:()=>Jg});var Ot={};fe(Ot,{Answer:()=>ic,Event:()=>Ug,ID:()=>Si,Info:()=>sp,Option:()=>op,Prompt:()=>Ng,QuestionV1:()=>Ot,Rejected:()=>lp,Replied:()=>cp,Reply:()=>jg,Request:()=>ap,Tool:()=>ip});var Si=c.String.check(c.isStartsWith("que")).pipe(c.brand("QuestionID"),Gd(e=>({ascending:s(t=>e.make(t??"que_"+Hd()),"ascending")}))),op=c.Struct({label:c.String.annotate({description:"Display text (1-5 words, concise)"}),description:c.String.annotate({description:"Explanation of choice"})}).annotate({identifier:"QuestionOption"}),rp={question:c.String.annotate({description:"Complete question"}),header:c.String.annotate({description:"Very short label (max 30 chars)"}),options:c.Array(op).annotate({description:"Available choices"}),multiple:c.optional(c.Boolean).annotate({description:"Allow selecting multiple choices"})},sp=c.Struct({...rp,custom:c.optional(c.Boolean).annotate({description:"Allow typing a custom answer (default: true)"})}).annotate({identifier:"QuestionInfo"}),Ng=c.Struct(rp).annotate({identifier:"QuestionPrompt"}),ip=c.Struct({messageID:pu.MessageID,callID:c.String}).annotate({identifier:"QuestionTool"}),ap=c.Struct({id:Si,sessionID:Cn,questions:c.Array(sp).annotate({description:"Questions to ask"}),tool:c.optional(ip)}).annotate({identifier:"QuestionRequest"}),ic=c.Array(c.String).annotate({identifier:"QuestionAnswer"}),jg=c.Struct({answers:c.Array(ic).annotate({description:"User answers in order of questions (each answer is an array of selected labels)"})}).annotate({identifier:"QuestionReply"}),cp=c.Struct({sessionID:Cn,requestID:Si,answers:c.Array(ic)}).annotate({identifier:"QuestionReplied"}),lp=c.Struct({sessionID:Cn,requestID:Si}).annotate({identifier:"QuestionRejected"}),ep=Qs({type:"question.asked",schema:ap.fields}),tp=Qs({type:"question.replied",schema:cp.fields}),np=Qs({type:"question.rejected",schema:lp.fields}),Ug={Asked:ep,Replied:tp,Rejected:np,Definitions:Yd(ep,tp,np)};var ac=Ot.ID;var Fg=Ot.Option,Bg=Ot.Info,$g=Ot.Prompt,qg=Ot.Tool,Wg=Ot.Request,Vg=Ot.Answer,zg=Ot.Reply,Gg=Ot.Replied,Hg=Ot.Rejected,Ii=Ot.Event,rs=class extends c.TaggedErrorClass()("QuestionRejectedError",{}){static{s(this,"RejectedError")}get message(){return"The user dismissed this question"}},ss=class extends c.TaggedErrorClass()("Question.NotFoundError",{requestID:ac}){static{s(this,"NotFoundError")}},tr=class extends Ce.Service()("@opencode/Question"){static{s(this,"Service")}},Yg=Pe.effect(tr,r.gen(function*(){let e=yield*Ee.Service,t=yield*V.make(r.fn("Question.state")(function*(){let l={pending:new Map};return yield*r.addFinalizer(()=>r.gen(function*(){for(let u of l.pending.values())yield*gt.fail(u.deferred,new rs);l.pending.clear()})),l})),n=r.fn("Question.ask")(function*(l){let u=(yield*V.get(t)).pending,f=ac.ascending();yield*r.logInfo("asking",{id:f,questions:l.questions.length});let m=yield*gt.make(),p={id:f,sessionID:l.sessionID,questions:l.questions,tool:l.tool};return u.set(f,{info:p,deferred:m}),yield*e.publish(Ii.Asked,p),yield*r.ensuring(gt.await(m),r.sync(()=>{u.delete(f)}))}),o=r.fn("Question.reply")(function*(l){let u=(yield*V.get(t)).pending,f=u.get(l.requestID);if(!f)return yield*r.logWarning("reply for unknown request",{requestID:l.requestID}),yield*new ss({requestID:l.requestID});u.delete(l.requestID),yield*r.logInfo("replied",{requestID:l.requestID,answers:l.answers}),yield*e.publish(Ii.Replied,{sessionID:f.info.sessionID,requestID:f.info.id,answers:l.answers.map(m=>[...m])}),yield*gt.succeed(f.deferred,l.answers)}),i=r.fn("Question.reject")(function*(l){let u=(yield*V.get(t)).pending,f=u.get(l);if(!f)return yield*r.logWarning("reject for unknown request",{requestID:l}),yield*new ss({requestID:l});u.delete(l),yield*r.logInfo("rejected",{requestID:l}),yield*e.publish(Ii.Rejected,{sessionID:f.info.sessionID,requestID:f.info.id}),yield*gt.fail(f.deferred,new rs)}),a=r.fn("Question.list")(function*(){let l=(yield*V.get(t)).pending;return Array.from(l.values(),u=>u.info)});return tr.of({ask:n,reply:o,reject:i,list:a})})),Jg=De.make({service:tr,layer:Yg,deps:[Ee.node]});var Zn={};fe(Zn,{Event:()=>dp,Info:()=>Kg,Service:()=>nr,Todo:()=>Zn,node:()=>Qg});var Kg=Ha.Info,dp=Ha.Event,nr=class extends Ce.Service()("@opencode/SessionTodo"){static{s(this,"Service")}},Xg=Pe.effect(nr,r.gen(function*(){let e=yield*Ee.Service,{db:t}=yield*tt.Service,n=r.fn("Todo.update")(function*(i){yield*t.transaction(a=>r.gen(function*(){yield*a.delete(yo).where(It(yo.session_id,i.sessionID)).run(),i.todos.length!==0&&(yield*a.insert(yo).values(i.todos.map((l,u)=>({session_id:i.sessionID,content:l.content,status:l.status,priority:l.priority,position:u}))).run())})).pipe(r.orDie),yield*e.publish(dp.Updated,i)}),o=r.fn("Todo.get")(function*(i){return(yield*t.select().from(yo).where(It(yo.session_id,i)).orderBy(Zs(yo.position)).all().pipe(r.orDie)).map(l=>({content:l.content,status:l.status,priority:l.priority}))});return nr.of({update:n,get:o})})),Qg=De.make({service:nr,layer:Xg,deps:[Ee.node,tt.node]});var ln={};fe(ln,{Event:()=>cc,Info:()=>ey,Service:()=>rr,SessionStatus:()=>ln,node:()=>ny});var or={};fe(or,{Definitions:()=>Zg,Idle:()=>fp,Info:()=>up,SessionStatusEvent:()=>or,Status:()=>pp});var up=c.Union([c.Struct({type:c.Literal("idle")}),c.Struct({type:c.Literal("retry"),attempt:mn,message:c.String,action:hn(c.Struct({reason:c.String,provider:c.String,title:c.String,message:c.String,label:c.String,link:hn(c.String)})),next:mn}),c.Struct({type:c.Literal("busy")})]).annotate({identifier:"SessionStatus"}),pp=Tt.define({type:"session.status",schema:{sessionID:Cn,status:up}}),fp=Tt.define({type:"session.idle",schema:{sessionID:Cn}}),Zg=Tt.inventory(pp,fp);var ey=or.Info,cc=or,rr=class extends Ce.Service()("@opencode/SessionStatus"){static{s(this,"Service")}},ty=Pe.effect(rr,r.gen(function*(){let e=yield*Ee.Service,t=yield*V.make(r.fn("SessionStatus.state")(()=>r.succeed(new Map))),n=r.fn("SessionStatus.get")(function*(a){return(yield*V.get(t)).get(a)??{type:"idle"}}),o=r.fn("SessionStatus.list")(function*(){return new Map(yield*V.get(t))}),i=r.fn("SessionStatus.set")(function*(a,l){let u=yield*V.get(t);if(yield*e.publish(cc.Status,{sessionID:a,status:l}),l.type==="idle"){yield*e.publish(cc.Idle,{sessionID:a}),u.delete(a);return}u.set(a,l)});return rr.of({get:n,list:o,set:i})})),ny=De.make({service:rr,layer:ty,deps:[Ee.node]});var Ln={};fe(Ln,{Service:()=>sr,SessionRunState:()=>Ln,node:()=>iy});var is={};fe(is,{Busy:()=>ki,Cancelled:()=>So,Runner:()=>is,make:()=>oy});var So=class extends c.TaggedErrorClass()("RunnerCancelled",{}){static{s(this,"Cancelled")}},ki=class extends c.TaggedErrorClass()("RunnerBusy",{}){static{s(this,"Busy")}},oy=s((e,t)=>{let n=Rn.makeUnsafe({_tag:"Idle"}),o=t?.onIdle??r.void,i=t?.onBusy??r.void,a=t?.onInterrupt,l=0,u=s(()=>Rn.getUnsafe(n),"state"),f=s(()=>(l+=1,l),"next"),m=s((y,x)=>wt.isFailure(x)&&ot.hasInterruptsOnly(x.cause)?gt.fail(y,new So).pipe(r.asVoid):gt.done(y,x).pipe(r.asVoid),"complete"),p=s(y=>gt.await(y).pipe(r.catchTag("RunnerCancelled",x=>a??r.die(x))),"awaitDone"),h=s(()=>Rn.modify(n,y=>[y._tag==="Idle"?o:r.void,y]).pipe(r.flatten),"idleIfCurrent"),g=s((y,x,E)=>Rn.modify(n,w=>[r.gen(function*(){w._tag==="Running"&&w.run.id===y&&(yield*o),yield*m(x,E)}),w._tag==="Running"&&w.run.id===y?{_tag:"Idle"}:w]).pipe(r.flatten),"finishRun"),I=s((y,x)=>r.gen(function*(){let E=f(),w=yield*y.pipe(r.onExit(M=>g(E,x,M)),r.forkIn(e));return{id:E,done:x,fiber:w}}),"startRun"),T=s(y=>Rn.modifyEffect(n,r.fnUntraced(function*(x){if(x._tag==="Shell"&&x.shell.id===y)return[o,{_tag:"Idle"}];if(x._tag==="ShellThenRun"&&x.shell.id===y){let E=yield*I(x.run.work,x.run.done);return[r.void,{_tag:"Running",run:E}]}return[r.void,x]})).pipe(r.flatten),"finishShell"),v=s(y=>r.gen(function*(){y.ready&&(yield*y.ready.await.pipe(r.exit,r.asVoid)),yield*gt.succeed(y.cancelled,void 0).pipe(r.asVoid),yield*Vs.interrupt(y.fiber)}),"stopShell"),P=s(y=>Rn.modifyEffect(n,r.fnUntraced(function*(x){switch(x._tag){case"Running":case"ShellThenRun":return[p(x.run.done),x];case"Shell":{let E={id:f(),done:yield*gt.make(),work:y};return[p(E.done),{_tag:"ShellThenRun",shell:x.shell,run:E}]}case"Idle":{let E=yield*gt.make(),w=yield*I(y,E);return[p(E),{_tag:"Running",run:w}]}}})).pipe(r.flatten),"ensureRunning"),d=s((y,x)=>Rn.modifyEffect(n,r.fnUntraced(function*(E){if(E._tag!=="Idle")return[r.fail(new ki),E];yield*i;let w=f(),M=yield*gt.make(),C=yield*y.pipe(r.ensuring(T(w)),r.forkChild),$={id:w,cancelled:M,ready:x,fiber:C};return[r.gen(function*(){let U=yield*Vs.await(C);return wt.isSuccess(U)?U.value:ot.hasInterruptsOnly(U.cause)||(yield*gt.isDone(M))&&ot.hasInterrupts(U.cause)&&!ot.hasDies(U.cause)?a?yield*a:yield*r.die(new So):yield*r.failCause(U.cause)}),{_tag:"Shell",shell:$}]})).pipe(r.flatten),"startShell"),k=Rn.modify(n,y=>{switch(y._tag){case"Idle":return[r.void,y];case"Running":return[r.gen(function*(){yield*Vs.interrupt(y.run.fiber),yield*gt.fail(y.run.done,new So).pipe(r.asVoid),yield*h()}),{_tag:"Idle"}];case"Shell":return[r.gen(function*(){yield*v(y.shell),yield*h()}),{_tag:"Idle"}];case"ShellThenRun":return[r.gen(function*(){yield*v(y.shell),yield*gt.fail(y.run.done,new So).pipe(r.asVoid),yield*h()}),{_tag:"Idle"}]}}).pipe(r.flatten);return{get state(){return u()},get busy(){return u()._tag!=="Idle"},ensureRunning:P,startShell:d,cancel:k}},"make");var sr=class extends Ce.Service()("@opencode/SessionRunState"){static{s(this,"Service")}},ry=Pe.effect(sr,r.gen(function*(){let e=yield*wo.Service,t=yield*ln.Service,n=yield*V.make(r.fn("SessionRunState.state")(function*(){let m=yield*Et.Scope,p=new Map;return yield*r.addFinalizer(r.fnUntraced(function*(){p.size>0&&(yield*r.logWarning("instance closing: its running turns are cancelled",{sessions:[...p.keys()].join(",")})),yield*r.forEach(p.values(),h=>h.cancel,{concurrency:"unbounded",discard:!0}),p.clear()})),{runners:p,scope:m}})),o=r.fn("SessionRunState.runner")(function*(m,p){let h=yield*V.get(n),g=h.runners.get(m);if(g)return g;let I=is.make(h.scope,{onIdle:r.gen(function*(){h.runners.delete(m),yield*t.set(m,{type:"idle"})}),onBusy:t.set(m,{type:"busy"}),onInterrupt:p});return h.runners.set(m,I),I}),i=r.fn("SessionRunState.assertNotBusy")(function*(m){(yield*V.get(n)).runners.get(m)?.busy&&(yield*mp(m))}),a=r.fn("SessionRunState.cancel")(function*(m){yield*r.logWarning("session cancel requested",{sessionID:m}),yield*sy(e,m);let h=(yield*V.get(n)).runners.get(m);if(!h){yield*t.set(m,{type:"idle"});return}yield*h.cancel}),l=r.fn("SessionRunState.busy")(function*(){return[...(yield*V.get(n)).runners.entries()].filter(([,p])=>p.busy).map(([p])=>p)}),u=r.fn("SessionRunState.ensureRunning")(function*(m,p,h){return yield*(yield*o(m,p)).ensureRunning(h)}),f=r.fn("SessionRunState.startShell")(function*(m,p,h,g){return yield*(yield*o(m,p)).startShell(h,g).pipe(r.catchTag("RunnerBusy",()=>r.fail(mp(m))))});return sr.of({assertNotBusy:i,cancel:a,busy:l,ensureRunning:u,startShell:f})})),sy=r.fn("SessionRunState.cancelBackgroundJobs")(function*(e,t){let n=yield*e.list(),o=new Set([t]),i=new Set,a=s(u=>u.status!=="running"||i.has(u.id)?!1:o.has(u.id)||typeof u.metadata?.sessionId=="string"&&o.has(u.metadata.sessionId)?!0:typeof u.metadata?.parentSessionId=="string"&&o.has(u.metadata.parentSessionId),"matches"),l=n.filter(a);for(;l.length>0;)yield*r.forEach(l,u=>e.cancel(u.id).pipe(r.tap(()=>r.sync(()=>{i.add(u.id),o.add(u.id),typeof u.metadata?.sessionId=="string"&&o.add(u.metadata.sessionId)}))),{concurrency:"unbounded",discard:!0}),l=n.filter(a)});function mp(e){return new me.BusyError({sessionID:e})}s(mp,"busyError");var iy=De.make({service:sr,layer:ry,deps:[wo.node,ln.node]});var dn={};fe(dn,{LLM:()=>dn,OUTPUT_TOKEN_MAX:()=>ev,Service:()=>ko,hasToolCalls:()=>ov,node:()=>rv,use:()=>tv});var as={};fe(as,{Wildcard:()=>as,all:()=>ay,allStructured:()=>cy,match:()=>Di});function Di(e,t){e&&(e=e.replaceAll("\\","/")),t&&(t=t.replaceAll("\\","/"));let n=t.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");n.endsWith(" .*")&&(n=n.slice(0,-3)+"( .*)?");let o=process.platform==="win32"?"si":"s";return new RegExp("^"+n+"$",o).test(e)}s(Di,"match");function ay(e,t){let n=Ja(t,Object.entries,Ka([([i])=>i.length,"asc"],[([i])=>i,"asc"])),o;for(let[i,a]of n)if(Di(e,i)){o=a;continue}return o}s(ay,"all");function cy(e,t){let n=Ja(t,Object.entries,Ka([([i])=>i.length,"asc"],[([i])=>i,"asc"])),o;for(let[i,a]of n){let l=i.split(/\s+/);if(Di(e.head,l[0])&&(l.length===1||lc(e.tail,l.slice(1)))){o=a;continue}}return o}s(cy,"allStructured");function lc(e,t){if(t.length===0)return!0;let[n,...o]=t;if(n==="*")return lc(e,o);for(let i=0;i<e.length;i++)if(Di(e[i],n)&&lc(e.slice(i+1),o))return!0;return!1}s(lc,"matchSequence");var ir={};fe(ir,{LLMAISDK:()=>ir,adapterState:()=>yp,toLLMEvents:()=>dy});function yp(){return{step:0,text:0,reasoning:0,currentTextID:void 0,currentReasoningID:void 0,toolNames:{},copilotTotalNanoAiu:void 0}}s(yp,"adapterState");function hp(e){return c.is(Qd)(e)?e:"unknown"}s(hp,"finishReason");function Zt(e){if(e!=null)return c.is(Xd)(e)?e:void 0}s(Zt,"providerMetadata");function ly(e){if(!e||typeof e!="object")return;let t=e,n=t.response&&typeof t.response=="object"?t.response:void 0,o=t.copilot_usage??n?.copilot_usage;if(!o||typeof o!="object")return;let i=o.total_nano_aiu;if(!(typeof i!="number"||!Number.isFinite(i)||i<0))return i}s(ly,"copilotTotalNanoAiu");function gp(e){if(!e||typeof e!="object")return;let t=e,n=Object.entries({inputTokens:t.inputTokens,outputTokens:t.outputTokens,totalTokens:t.totalTokens,reasoningTokens:t.outputTokenDetails?.reasoningTokens??t.reasoningTokens,cacheReadInputTokens:t.inputTokenDetails?.cacheReadTokens??t.cachedInputTokens,cacheWriteInputTokens:t.inputTokenDetails?.cacheWriteTokens}).filter(o=>o[1]!==void 0);return n.length===0?void 0:Object.fromEntries(n)}s(gp,"usage");function dc(e,t){return e.currentTextID=t??e.currentTextID??`text-${e.text++}`,e.currentTextID}s(dc,"currentTextID");function uc(e,t){return e.currentReasoningID=t??e.currentReasoningID??`reasoning-${e.reasoning++}`,e.currentReasoningID}s(uc,"currentReasoningID");function dy(e,t){switch(t.type){case"start":return r.succeed([]);case"start-step":return r.succeed([st.stepStart({index:e.step})]);case"finish-step":return t.rawFinishReason==="network_error"?r.fail(new qu.ResponseStreamError("Provider finish_reason: network_error")):r.sync(()=>{let n=Zt(t.providerMetadata),o=e.copilotTotalNanoAiu===void 0?n:{...n,copilot:{...n?.copilot,totalNanoAiu:e.copilotTotalNanoAiu}};return e.copilotTotalNanoAiu=void 0,[st.stepFinish({index:e.step++,reason:hp(t.finishReason),usage:gp(t.usage),providerMetadata:o,...typeof t.response?.modelId=="string"?{responseModelID:t.response.modelId}:{}})]});case"finish":return r.sync(()=>{let n=[st.finish({reason:hp(t.finishReason),usage:gp(t.totalUsage),providerMetadata:"providerMetadata"in t?Zt(t.providerMetadata):void 0})];return Object.assign(e,yp()),n});case"text-start":return r.sync(()=>(e.currentTextID=dc(e,t.id),[st.textStart({id:e.currentTextID,providerMetadata:Zt(t.providerMetadata)})]));case"text-delta":return r.succeed([st.textDelta({id:dc(e,t.id),text:t.text,providerMetadata:Zt(t.providerMetadata)})]);case"text-end":return r.sync(()=>{let n=dc(e,t.id);return e.currentTextID=void 0,[st.textEnd({id:n,providerMetadata:Zt(t.providerMetadata)})]});case"reasoning-start":return r.sync(()=>(e.currentReasoningID=uc(e,t.id),[st.reasoningStart({id:e.currentReasoningID,providerMetadata:Zt(t.providerMetadata)})]));case"reasoning-delta":return r.succeed([st.reasoningDelta({id:uc(e,t.id),text:t.text,providerMetadata:Zt(t.providerMetadata)})]);case"reasoning-end":return r.sync(()=>{let n=uc(e,t.id);return e.currentReasoningID=void 0,[st.reasoningEnd({id:n,providerMetadata:Zt(t.providerMetadata)})]});case"tool-input-start":return r.sync(()=>(e.toolNames[t.id]=t.toolName,[st.toolInputStart({id:t.id,name:t.toolName,providerMetadata:Zt(t.providerMetadata)})]));case"tool-input-delta":return r.succeed([st.toolInputDelta({id:t.id,name:e.toolNames[t.id]??"unknown",text:t.delta??""})]);case"tool-input-end":return r.succeed([st.toolInputEnd({id:t.id,name:e.toolNames[t.id]??"unknown",providerMetadata:Zt(t.providerMetadata)})]);case"tool-call":return r.sync(()=>(e.toolNames[t.toolCallId]=t.toolName,[st.toolCall({id:t.toolCallId,name:t.toolName,input:t.input,providerExecuted:"providerExecuted"in t?t.providerExecuted:void 0,providerMetadata:Zt(t.providerMetadata)})]));case"tool-result":return r.sync(()=>{let n=e.toolNames[t.toolCallId]??"unknown";return delete e.toolNames[t.toolCallId],[st.toolResult({id:t.toolCallId,name:n,result:Zd.make(t.output),providerExecuted:"providerExecuted"in t?t.providerExecuted:void 0,providerMetadata:Zt(t.providerMetadata)})]});case"tool-error":return r.sync(()=>{let n=e.toolNames[t.toolCallId]??("toolName"in t?t.toolName:"unknown");return delete e.toolNames[t.toolCallId],[st.toolError({id:t.toolCallId,name:n,message:gn(t.error),error:t.error,providerMetadata:Zt(t.providerMetadata)})]});case"error":return r.fail(t.error);case"abort":case"source":case"file":case"tool-output-denied":case"tool-approval-request":return r.succeed([]);case"raw":return r.sync(()=>(e.copilotTotalNanoAiu=ly(t.rawValue)??e.copilotTotalNanoAiu,[]));default:{let n=t;return r.succeed([])}}}s(dy,"toLLMEvents");var hs={};fe(hs,{LLMNativeRuntime:()=>hs,nativeTools:()=>nf,status:()=>Ww,stream:()=>Vw});var ms={};fe(ms,{LLMNative:()=>ms,model:()=>Zp,request:()=>qw});var Ei={};fe(Ei,{configure:()=>pc,id:()=>bp,model:()=>my,provider:()=>wp,routes:()=>uy});var bp=dt.make("anthropic"),uy=[Wa],py=s(e=>"auth"in e&&e.auth?e.auth:yt.optional("apiKey"in e?e.apiKey:void 0,"apiKey").orElse(yt.config("ANTHROPIC_API_KEY")).pipe(yt.header("x-api-key")),"auth"),fy=s(e=>{let{apiKey:t,auth:n,baseURL:o,...i}=e;return Wa.with({...i,endpoint:{baseURL:o},auth:py(e)})},"configuredRoute"),pc=s((e={})=>{let t=fy(e);return{id:bp,model:s(n=>t.model({id:n}),"model"),configure:pc}},"configure"),wp=pc(),my=wp.model;var Pi={};fe(Pi,{configure:()=>gc,id:()=>hc,model:()=>fb,provider:()=>Pp,routes:()=>db});var cs={};fe(cs,{BedrockEventStream:()=>cs,framing:()=>vy});var hy=new Pu(Cu,Ru),gy=new TextDecoder,yy={buffer:new Uint8Array(0),offset:0},by=s((e,t)=>{let n=e.buffer.length-e.offset,o=new Uint8Array(n+t.length);return o.set(e.buffer.subarray(e.offset),0),o.set(t,n),{buffer:o,offset:0}},"appendChunk"),wy=s(e=>(t,n)=>r.gen(function*(){let o=by(t,n),i=[];for(;o.buffer.length-o.offset>=4;){let a=o.buffer.subarray(o.offset),l=new DataView(a.buffer,a.byteOffset,a.byteLength).getUint32(0,!1);if(a.length<l)break;let u=yield*r.try({try:s(()=>hy.decode(a.subarray(0,l)),"try"),catch:s(h=>Ae.eventError(e,`Failed to decode Bedrock Converse event-stream frame: ${h instanceof Error?h.message:String(h)}`),"catch")});if(o={buffer:o.buffer,offset:o.offset+l},u.headers[":message-type"]?.value!=="event")continue;let f=u.headers[":event-type"]?.value;if(typeof f!="string")continue;let m=gy.decode(u.body);if(!m)continue;let p=yield*Ae.parseJson(e,m,"Failed to parse Bedrock Converse event-stream payload");delete p.p,i.push({[f]:p})}return[o,i]}),"consumeFrames"),vy=s(e=>({id:"aws-event-stream",frame:s(t=>t.pipe(xt.mapAccumEffect(()=>yy,wy(e))),"frame")}),"framing");var ar={};fe(ar,{BedrockAuth:()=>ar,auth:()=>Sy,sigV4:()=>vp});var xy=s(e=>r.tryPromise({try:s(async()=>{let t=await new Tu({url:e.url,method:"POST",headers:Object.entries(e.headers),body:e.body,region:e.credentials.region,accessKeyId:e.credentials.accessKeyId,secretAccessKey:e.credentials.secretAccessKey,sessionToken:e.credentials.sessionToken,service:"bedrock"}).sign();return Object.fromEntries(t.headers.entries())},"try"),catch:s(t=>Ae.invalidRequest(`Bedrock Converse SigV4 signing failed: ${t instanceof Error?t.message:String(t)}`),"catch")}),"signRequest"),vp=s(e=>yt.custom(t=>r.gen(function*(){if(!e)return yield*Ae.invalidRequest("Bedrock Converse requires either route bearer auth or AWS credentials configured on the route");let n=ja.set(t.headers,"content-type","application/json"),o=yield*xy({url:t.url,body:t.body,headers:n,credentials:e});return ja.setAll(n,o)})),"sigV4"),Sy=vp(void 0);var en={};fe(en,{BEDROCK_BREAKPOINT_CAP:()=>xp,BedrockCache:()=>en,CachePointBlock:()=>Iy,block:()=>Ty,breakpoints:()=>ky});var Iy=c.Struct({cachePoint:c.Struct({type:c.tag("default"),ttl:c.optional(c.Literals(["5m","1h"]))})}),xp=4,ky=s(()=>wu(xp),"breakpoints"),Dy={cachePoint:{type:"default"}},Ey={cachePoint:{type:"default",ttl:"1h"}},Ty=s((e,t)=>{if(!(t?.type!=="ephemeral"&&t?.type!=="persistent")){if(e.remaining<=0){e.dropped+=1;return}return e.remaining-=1,vu(t.ttlSeconds)==="1h"?Ey:Dy}},"block");var Nn={};fe(Nn,{BedrockMedia:()=>Nn,DocumentBlock:()=>Ry,DocumentFormat:()=>Dp,ImageBlock:()=>Py,ImageFormat:()=>kp,lower:()=>Ay});var kp=c.Literals(["png","jpeg","gif","webp"]),Py=c.Struct({image:c.Struct({format:kp,source:c.Struct({bytes:c.String})})}),Dp=c.Literals(["pdf","csv","doc","docx","xls","xlsx","html","txt","md"]),Ry=c.Struct({document:c.Struct({format:Dp,name:c.String,source:c.Struct({bytes:c.String})})}),Sp={"image/png":"png","image/jpeg":"jpeg","image/jpg":"jpeg","image/gif":"gif","image/webp":"webp"},Ip={"application/pdf":"pdf","text/csv":"csv","application/msword":"doc","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"docx","application/vnd.ms-excel":"xls","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"xlsx","text/html":"html","text/plain":"txt","text/markdown":"md"},Cy=s((e,t,n)=>({document:{format:t,name:e.filename??`document.${t}`,source:{bytes:n}}}),"documentBlock"),Ay=r.fn("BedrockMedia.lower")(function*(e){let t=e.mediaType.toLowerCase(),n=Sp[t];if(n){let i=yield*Ae.validateMedia("Bedrock Converse",e,new Set(Object.keys(Sp)));return{image:{format:n,source:{bytes:i.base64}}}}if(t.startsWith("image/"))return yield*Ae.invalidRequest(`Bedrock Converse does not support image media type ${e.mediaType}`);let o=Ip[t];if(o){let i=yield*Ae.validateMedia("Bedrock Converse",e,new Set(Object.keys(Ip)));return Cy(e,o,i.base64)}return yield*Ae.invalidRequest(`Bedrock Converse does not support media type ${e.mediaType}`)});var ls="bedrock-converse",fc=c.Struct({text:c.String}),My=c.Struct({toolUse:c.Struct({toolUseId:c.String,name:c.String,input:c.Unknown})}),_y=c.Union([c.Struct({text:c.String}),c.Struct({json:c.Unknown}),Nn.ImageBlock]),Oy=c.Struct({toolResult:c.Struct({toolUseId:c.String,content:c.Array(_y),status:c.optional(c.Literals(["success","error"]))})}),Ly=c.Struct({reasoningContent:c.Struct({reasoningText:c.optional(c.Struct({text:c.String,signature:c.optional(c.String)}))})}),Ny=c.Union([fc,Nn.ImageBlock,Nn.DocumentBlock,Oy,en.CachePointBlock]),jy=c.Union([fc,Ly,My,en.CachePointBlock]),Uy=c.Union([c.Struct({role:c.Literal("user"),content:c.Array(Ny)}),c.Struct({role:c.Literal("assistant"),content:c.Array(jy)})]).pipe(c.toTaggedUnion("role")),Fy=c.Union([fc,en.CachePointBlock]),By=c.Struct({toolSpec:c.Struct({name:c.String,description:c.String,inputSchema:c.Struct({json:es})})}),$y=c.Union([By,en.CachePointBlock]),qy=c.Union([c.Struct({auto:c.Struct({})}),c.Struct({any:c.Struct({})}),c.Struct({tool:c.Struct({name:c.String})})]),Wy={modelId:c.String,messages:c.Array(Uy),system:Gn(Fy),inferenceConfig:c.optional(c.Struct({maxTokens:c.optional(c.Number),temperature:c.optional(c.Number),topP:c.optional(c.Number),stopSequences:Gn(c.String)})),toolConfig:c.optional(c.Struct({tools:c.Array($y),toolChoice:c.optional(qy)})),additionalModelRequestFields:c.optional(es)},Vy=c.Struct(Wy),zy=c.Struct({inputTokens:c.optional(c.Number),outputTokens:c.optional(c.Number),totalTokens:c.optional(c.Number),cacheReadInputTokens:c.optional(c.Number),cacheWriteInputTokens:c.optional(c.Number)}),Gy=c.Struct({messageStart:c.optional(c.Struct({role:c.String})),contentBlockStart:c.optional(c.Struct({contentBlockIndex:c.Number,start:c.optional(c.Struct({toolUse:c.optional(c.Struct({toolUseId:c.String,name:c.String}))}))})),contentBlockDelta:c.optional(c.Struct({contentBlockIndex:c.Number,delta:c.optional(c.Struct({text:c.optional(c.String),toolUse:c.optional(c.Struct({input:c.String})),reasoningContent:c.optional(c.Struct({text:c.optional(c.String),signature:c.optional(c.String)}))}))})),contentBlockStop:c.optional(c.Struct({contentBlockIndex:c.Number})),messageStop:c.optional(c.Struct({stopReason:c.String,additionalModelResponseFields:c.optional(c.Unknown)})),metadata:c.optional(c.Struct({usage:c.optional(zy),metrics:c.optional(c.Unknown)})),internalServerException:c.optional(c.Struct({message:c.String})),modelStreamErrorException:c.optional(c.Struct({message:c.String})),validationException:c.optional(c.Struct({message:c.String})),throttlingException:c.optional(c.Struct({message:c.String})),serviceUnavailableException:c.optional(c.Struct({message:c.String}))}),Hy=s((e,t)=>({toolSpec:{name:e.name,description:e.description,inputSchema:{json:t}}}),"lowerToolSpec"),Yy=s((e,t,n)=>{let o=[];for(let i of n){o.push(Hy(i,si.modelCompatibility(i.inputSchema,e)));let a=en.block(t,i.cache);a&&o.push(a)}return o},"lowerTools"),Ti=s((e,t,n)=>{let o=en.block(e,n);return o?[{text:t},o]:[{text:t}]},"textWithCache"),Jy=s(e=>Ae.matchToolChoice("Bedrock Converse",e,{auto:s(()=>({auto:{}}),"auto"),none:s(()=>{},"none"),required:s(()=>({any:{}}),"required"),tool:s(t=>({tool:{name:t}}),"tool")}),"lowerToolChoice"),Ky=s(e=>({bedrock:e}),"bedrockMetadata"),Xy=s(e=>{let t=e.providerMetadata?.bedrock;return e.encrypted??(Ae.isRecord(t)&&typeof t.signature=="string"?t.signature:void 0)},"reasoningSignature"),Qy=s(e=>({toolUse:{toolUseId:e.id,name:e.name,input:e.input}}),"lowerToolCall"),Zy=r.fn("BedrockConverse.lowerToolResultContent")(function*(e){if(e.result.type==="text"||e.result.type==="error")return[{text:Ae.toolResultText(e)}];if(e.result.type==="json")return[{json:e.result.value}];let t=[];for(let n of e.result.value){if(n.type==="text"){t.push({text:n.text});continue}let o=yield*Nn.lower({type:"media",mediaType:n.mime,data:n.uri,filename:n.name});if(!("image"in o))return yield*Ae.invalidRequest("Bedrock Converse only supports image media in tool results");t.push(o)}return t}),eb=r.fn("BedrockConverse.lowerToolResult")(function*(e){return{toolResult:{toolUseId:e.id,content:yield*Zy(e),status:e.result.type==="error"?"error":"success"}}}),tb=r.fn("BedrockConverse.lowerMessages")(function*(e,t){let n=[];for(let o of e.messages){if(o.role==="system"){let a=yield*Ae.wrappedSystemUpdate("Bedrock Converse",o),l=Ti(t,a.text,a.cache),u=n.at(-1);u?.role==="user"?n[n.length-1]={role:"user",content:[...u.content,...l]}:n.push({role:"user",content:l});continue}if(o.role==="user"){let a=[];for(let l of o.content){if(!Ae.supportsContent(l,["text","media"]))return yield*Ae.unsupportedContent("Bedrock Converse","user",["text","media"]);if(l.type==="text"){a.push(...Ti(t,l.text,l.cache));continue}if(l.type==="media"){a.push(yield*Nn.lower(l));continue}}n.push({role:"user",content:a});continue}if(o.role==="assistant"){let a=[];for(let l of o.content){if(!Ae.supportsContent(l,["text","reasoning","tool-call"]))return yield*Ae.unsupportedContent("Bedrock Converse","assistant",["text","reasoning","tool-call"]);if(l.type==="text"){a.push(...Ti(t,l.text,l.cache));continue}if(l.type==="reasoning"){a.push({reasoningContent:{reasoningText:{text:l.text,signature:Xy(l)}}});continue}if(l.type==="tool-call"){a.push(Qy(l));continue}}n.push({role:"assistant",content:a});continue}let i=[];for(let a of o.content){if(!Ae.supportsContent(a,["tool-result"]))return yield*Ae.unsupportedContent("Bedrock Converse","tool",["tool-result"]);i.push(yield*eb(a));let l=en.block(t,a.cache);l&&i.push(l)}n.push({role:"user",content:i})}return n}),nb=s((e,t)=>t.flatMap(n=>Ti(e,n.text,n.cache)),"lowerSystem"),ob=r.fn("BedrockConverse.fromRequest")(function*(e){let t=e.toolChoice?yield*Jy(e.toolChoice):void 0,n=e.generation,o=en.breakpoints(),i=e.tools.length>0&&e.toolChoice?.type!=="none"?{tools:Yy(e.model.compatibility?.toolSchema,o,e.tools),toolChoice:t}:void 0,a=e.system.length===0?void 0:nb(o,e.system),l=yield*tb(e,o);return o.dropped>0&&(yield*r.logWarning(`Bedrock Converse: dropped ${o.dropped} cache breakpoint(s); the API allows at most ${en.BEDROCK_BREAKPOINT_CAP} per request.`)),{modelId:e.model.id,messages:l,system:a,inferenceConfig:n?.maxTokens===void 0&&n?.temperature===void 0&&n?.topP===void 0&&(n?.stop===void 0||n.stop.length===0)?void 0:{maxTokens:n?.maxTokens,temperature:n?.temperature,topP:n?.topP,stopSequences:n?.stop},toolConfig:i,additionalModelRequestFields:n?.topK===void 0?void 0:{top_k:n.topK}}}),rb=s(e=>e==="end_turn"||e==="stop_sequence"?"stop":e==="max_tokens"?"length":e==="tool_use"?"tool-calls":e==="content_filtered"||e==="guardrail_intervened"?"content-filter":"unknown","mapFinishReason"),sb=s(e=>{if(!e)return;let t=(e.cacheReadInputTokens??0)+(e.cacheWriteInputTokens??0),n=Ae.subtractTokens(e.inputTokens,t);return new Mn({inputTokens:e.inputTokens,outputTokens:e.outputTokens,nonCachedInputTokens:n,cacheReadInputTokens:e.cacheReadInputTokens,cacheWriteInputTokens:e.cacheWriteInputTokens,totalTokens:Ae.totalTokens(e.inputTokens,e.outputTokens,e.totalTokens),providerMetadata:{bedrock:e}})},"mapUsage"),ib=s((e,t)=>r.gen(function*(){if(t.contentBlockStart?.start?.toolUse){let n=t.contentBlockStart.contentBlockIndex,o=[],i=St.stepStart(e.lifecycle,o);return[{...e,lifecycle:i,tools:Xo.start(e.tools,n,{id:t.contentBlockStart.start.toolUse.toolUseId,name:t.contentBlockStart.start.toolUse.name})},[...o,st.toolInputStart({id:t.contentBlockStart.start.toolUse.toolUseId,name:t.contentBlockStart.start.toolUse.name})]]}if(t.contentBlockDelta?.delta?.text){let n=[];return[{...e,lifecycle:St.textDelta(e.lifecycle,n,`text-${t.contentBlockDelta.contentBlockIndex}`,t.contentBlockDelta.delta.text)},n]}if(t.contentBlockDelta?.delta?.reasoningContent){let n=t.contentBlockDelta.contentBlockIndex,o=t.contentBlockDelta.delta.reasoningContent,i=[];return[{...e,lifecycle:o.text?St.reasoningDelta(e.lifecycle,i,`reasoning-${n}`,o.text):e.lifecycle,reasoningSignatures:o.signature?{...e.reasoningSignatures,[n]:o.signature}:e.reasoningSignatures},i]}if(t.contentBlockDelta?.delta?.toolUse){let n=t.contentBlockDelta.contentBlockIndex,o=Xo.appendExisting(ls,e.tools,n,t.contentBlockDelta.delta.toolUse.input,"Bedrock Converse tool delta is missing its tool call");if(Xo.isError(o))return yield*o;let i=[],a=o.events.length?St.stepStart(e.lifecycle,i):e.lifecycle;return i.push(...o.events),[{...e,lifecycle:a,tools:o.tools},i]}if(t.contentBlockStop){let n=t.contentBlockStop.contentBlockIndex,o=yield*Xo.finish(ls,e.tools,n),i=[],a=o.events??[],l=a.length?St.stepStart(e.lifecycle,i):St.reasoningEnd(St.textEnd(e.lifecycle,i,`text-${n}`),i,`reasoning-${n}`,e.reasoningSignatures[n]?Ky({signature:e.reasoningSignatures[n]}):void 0);return i.push(...a),[{...e,hasToolCalls:a.some(st.is.toolCall)?!0:e.hasToolCalls,lifecycle:l,tools:o.tools,reasoningSignatures:Object.fromEntries(Object.entries(e.reasoningSignatures).filter(([u])=>u!==String(n)))},i]}if(t.messageStop)return[{...e,pendingFinish:{reason:rb(t.messageStop.stopReason),usage:e.pendingFinish?.usage}},[]];if(t.metadata){let n=sb(t.metadata.usage);return[{...e,pendingFinish:{reason:e.pendingFinish?.reason??"stop",usage:n}},[]]}if(t.internalServerException||t.modelStreamErrorException||t.serviceUnavailableException){let n=t.internalServerException?.message??t.modelStreamErrorException?.message??t.serviceUnavailableException?.message??"Bedrock Converse stream error";return[e,[st.providerError({message:n,retryable:!0})]]}if(t.validationException||t.throttlingException){let n=t.validationException?.message??t.throttlingException?.message??"Bedrock Converse error";return[e,[st.providerError({message:n,classification:t.validationException&&iu(n)?"context-overflow":void 0,retryable:t.throttlingException!==void 0})]]}return[e,[]]}),"step"),ab=cs.framing(ls),cb=s(e=>e.pendingFinish?(()=>{let t=[];return St.finish(e.lifecycle,t,{reason:e.pendingFinish.reason==="stop"&&e.hasToolCalls?"tool-calls":e.pendingFinish.reason,usage:e.pendingFinish.usage}),t})():[],"onHalt"),lb=mo.make({id:ls,body:{schema:Vy,from:ob},stream:{event:Gy,initial:s(()=>({tools:Xo.empty(),pendingFinish:void 0,hasToolCalls:!1,lifecycle:St.initial(),reasoningSignatures:{}}),"initial"),step:ib,onHalt:cb}}),mc=Jo.make({id:ls,provider:"bedrock",protocol:lb,endpoint:Yo.path(({body:e})=>`/model/${encodeURIComponent(e.modelId)}/converse-stream`),auth:ar.auth,framing:ab}),Ep=ar.sigV4;var hc=dt.make("amazon-bedrock"),db=[mc],ub=s(e=>`https://bedrock-runtime.${e}.amazonaws.com`,"bedrockBaseURL"),pb=s(e=>{let{apiKey:t,credentials:n,region:o,baseURL:i,...a}=e,l=o??n?.region??"us-east-1";return mc.with({...a,provider:hc,endpoint:{baseURL:i??ub(l)},auth:t===void 0?Ep(n):yt.bearer(t)})},"configuredRoute"),gc=s((e={})=>{let t=pb(e);return{id:hc,model:s(n=>t.model({id:n}),"model"),configure:gc}},"configure"),Pp=gc(),fb=Pp.model;var Ri={};fe(Ri,{configure:()=>wc,id:()=>ds,provider:()=>Sb,routes:()=>wb});var mb=s(e=>Object.entries(e).filter(t=>t[1]!==void 0),"definedEntries"),Rp=s(e=>{let t=Object.fromEntries(mb({store:e?.store,promptCacheKey:e?.promptCacheKey,reasoningEffort:e?.reasoningEffort,reasoningSummary:e?.reasoningSummary,include:e?.include,textVerbosity:e?.textVerbosity,serviceTier:e?.serviceTier}));if(Object.keys(t).length!==0)return{openai:t}},"openAIProviderOptions"),hb=s((e,t={})=>{let n=e.toLowerCase();if(!(!n.includes("gpt-5")||n.includes("gpt-5-chat")||n.includes("gpt-5-pro")))return Rp({reasoningEffort:"medium",reasoningSummary:"auto",include:["reasoning.encrypted_content"],textVerbosity:t.textVerbosity===!0&&n.includes("gpt-5.")&&!n.includes("codex")&&!n.includes("-chat")?"low":void 0})},"gpt5DefaultOptions"),gb=s((e,t={})=>Ba(Rp({store:!1}),hb(e,t)),"openAIDefaultOptions"),eo=s((e,t,n={})=>({...t,providerOptions:Ba(gb(e,n),t.providerOptions)}),"withOpenAIOptions");var ds=dt.make("azure"),Ap=yt.remove("authorization"),bb=s(e=>`https://${e.trim()}.openai.azure.com/openai/v1`,"resourceBaseURL"),Mp=On.with({id:"azure-openai-responses",provider:ds,auth:Ap,endpoint:{query:{"api-version":"v1"}}}),_p=bo.with({id:"azure-openai-chat",provider:ds,auth:Ap,endpoint:{query:{"api-version":"v1"}}}),wb=[Mp,_p],vb=s(e=>{let{apiKey:t,apiVersion:n,resourceName:o,useCompletionUrls:i,baseURL:a,queryParams:l,...u}=e;if("auth"in u){let{auth:f,...m}=u;return m}return u},"defaults"),xb=s(e=>"auth"in e&&e.auth?e.auth:yt.remove("authorization").andThen(yt.optional("apiKey"in e?e.apiKey:void 0,"apiKey").orElse(yt.config("AZURE_OPENAI_API_KEY")).pipe(yt.header("api-key"))),"auth"),Cp=s((e,t)=>e.with({auth:xb(t),endpoint:{baseURL:t.baseURL??bb(t.resourceName),query:{...t.apiVersion?{"api-version":t.apiVersion}:{},...t.queryParams}}}),"configuredRoute"),wc=s(e=>{let t=Cp(Mp,e),n=Cp(_p,e),o=vb(e),i=s(l=>t.with(eo(l,o)).model({id:l}),"responses"),a=s(l=>n.with(eo(l,o)).model({id:l}),"chat");return{id:ds,model:s(l=>e.useCompletionUrls===!0?a(l):i(l),"model"),responses:i,chat:a,configure:wc}},"configure"),Sb={id:ds,configure:wc};var Ib=dt.make("cloudflare-ai-gateway"),kb=dt.make("cloudflare-workers-ai");var aR=Jn.with({id:"cloudflare-ai-gateway",provider:Ib}),cR=Jn.with({id:"cloudflare-workers-ai",provider:kb});var Lp=dt.make("github-copilot");var fR=bo.with({provider:Lp}),mR=On.with({provider:Lp});var Ci={};fe(Ci,{configure:()=>xc,id:()=>$p,model:()=>iw,provider:()=>qp,routes:()=>ow});var Np="gemini",jp=new Set(Ae.MEDIA_MIMES),Tb="https://generativelanguage.googleapis.com/v1beta",Pb=c.Struct({text:c.String,thought:c.optional(c.Boolean),thoughtSignature:c.optional(c.String)}),Rb=c.Struct({inlineData:c.Struct({mimeType:c.String,data:c.String})}),Cb=c.Struct({functionCall:c.Struct({name:c.String,args:c.Unknown}),thoughtSignature:c.optional(c.String)}),Ab=c.Struct({functionResponse:c.Struct({name:c.String,response:c.Unknown})}),Mb=c.Union([Pb,Rb,Cb,Ab]),Up=c.Struct({role:c.Literals(["user","model"]),parts:c.Array(Mb)}),_b=c.Struct({parts:c.Array(c.Struct({text:c.String}))}),Ob=c.Struct({name:c.String,description:c.String,parameters:c.optional(es)}),Lb=c.Struct({functionDeclarations:c.Array(Ob)}),Nb=c.Struct({functionCallingConfig:c.Struct({mode:c.Literals(["AUTO","NONE","ANY"]),allowedFunctionNames:Gn(c.String)})}),jb=c.Struct({thinkingBudget:c.optional(c.Number),includeThoughts:c.optional(c.Boolean)}),Ub=c.Struct({maxOutputTokens:c.optional(c.Number),temperature:c.optional(c.Number),topP:c.optional(c.Number),topK:c.optional(c.Number),stopSequences:Gn(c.String),thinkingConfig:c.optional(jb)}),Fb={contents:c.Array(Up),systemInstruction:c.optional(_b),tools:Gn(Lb),toolConfig:c.optional(Nb),generationConfig:c.optional(Ub)},Bb=c.Struct(Fb),$b=c.Struct({cachedContentTokenCount:c.optional(c.Number),thoughtsTokenCount:c.optional(c.Number),promptTokenCount:c.optional(c.Number),candidatesTokenCount:c.optional(c.Number),totalTokenCount:c.optional(c.Number)}),qb=c.Struct({content:c.optional(Up),finishReason:c.optional(c.String)}),Wb=c.Struct({candidates:Gn(qb),usageMetadata:c.optional($b)}),Vb=s((e,t)=>({name:e.name,description:e.description,parameters:xu.convert(t)}),"lowerTool"),zb=s(e=>Ae.matchToolChoice("Gemini",e,{auto:s(()=>({functionCallingConfig:{mode:"AUTO"}}),"auto"),none:s(()=>({functionCallingConfig:{mode:"NONE"}}),"none"),required:s(()=>({functionCallingConfig:{mode:"ANY"}}),"required"),tool:s(t=>({functionCallingConfig:{mode:"ANY",allowedFunctionNames:[t]}}),"tool")}),"lowerToolConfig"),Gb=r.fn("Gemini.lowerUserPart")(function*(e){if(e.type==="text")return{text:e.text};let t=yield*Ae.validateMedia("Gemini",e,jp);return{inlineData:{mimeType:t.mime,data:t.base64}}}),us=s(e=>({google:e}),"googleMetadata"),Fp=s(e=>{let t=e?.google;return Ae.isRecord(t)&&typeof t.thoughtSignature=="string"?t.thoughtSignature:void 0},"thoughtSignature"),Hb=s(e=>({functionCall:{name:e.name,args:e.input},thoughtSignature:Fp(e.providerMetadata)}),"lowerToolCall"),Yb=r.fn("Gemini.lowerMessages")(function*(e){let t=[];for(let n of e.messages){if(n.role==="system"){let i=yield*Ae.wrappedSystemUpdate("Gemini",n),a=t.at(-1);a?.role==="user"?t[t.length-1]={role:"user",parts:[...a.parts,{text:i.text}]}:t.push({role:"user",parts:[{text:i.text}]});continue}if(n.role==="user"){let i=[];for(let a of n.content){if(!Ae.supportsContent(a,["text","media"]))return yield*Ae.unsupportedContent("Gemini","user",["text","media"]);i.push(yield*Gb(a))}t.push({role:"user",parts:i});continue}if(n.role==="assistant"){let i=[];for(let a of n.content){if(!Ae.supportsContent(a,["text","reasoning","tool-call"]))return yield*Ae.unsupportedContent("Gemini","assistant",["text","reasoning","tool-call"]);if(a.type==="text"){i.push({text:a.text});continue}if(a.type==="reasoning"){i.push({text:a.text,thought:!0,thoughtSignature:Fp(a.providerMetadata)});continue}if(a.type==="tool-call"){i.push(Hb(a));continue}}t.push({role:"model",parts:i});continue}let o=[];for(let i of n.content){if(!Ae.supportsContent(i,["tool-result"]))return yield*Ae.unsupportedContent("Gemini","tool",["tool-result"]);if(i.result.type!=="content"){o.push({functionResponse:{name:i.name,response:{name:i.name,content:Ae.toolResultText(i)}}});continue}let a=i.result.value,l=a.filter(u=>u.type==="text").map(u=>u.text);o.push({functionResponse:{name:i.name,response:{name:i.name,content:l.join(`
49
- `)}}});for(let u of a){if(u.type==="text")continue;let f=yield*Ae.validateToolFile("Gemini",u,jp);o.push({inlineData:{mimeType:f.mime,data:f.base64}})}}t.push({role:"user",parts:o})}return t}),Jb=s(e=>e.providerOptions?.gemini,"geminiOptions"),Kb=s(e=>{let t=Jb(e)?.thinkingConfig;if(!Ae.isRecord(t))return;let n={thinkingBudget:typeof t.thinkingBudget=="number"?t.thinkingBudget:void 0,includeThoughts:typeof t.includeThoughts=="boolean"?t.includeThoughts:void 0};return Object.values(n).some(o=>o!==void 0)?n:void 0},"thinkingConfig"),Xb=r.fn("Gemini.fromRequest")(function*(e){let t=e.tools.length>0&&e.toolChoice?.type!=="none",n=e.generation,o=e.model.compatibility?.toolSchema,i={maxOutputTokens:n?.maxTokens,temperature:n?.temperature,topP:n?.topP,topK:n?.topK,stopSequences:n?.stop,thinkingConfig:Kb(e)};return{contents:yield*Yb(e),systemInstruction:e.system.length===0?void 0:{parts:[{text:Ae.joinText(e.system)}]},tools:t?[{functionDeclarations:e.tools.map(a=>Vb(a,si.modelCompatibility(a.inputSchema,o)))}]:void 0,toolConfig:t&&e.toolChoice?yield*zb(e.toolChoice):void 0,generationConfig:Object.values(i).some(a=>a!==void 0)?i:void 0}}),Qb=s(e=>{if(!e)return;let t=e.cachedContentTokenCount,n=Ae.subtractTokens(e.promptTokenCount,t),o=e.candidatesTokenCount!==void 0?e.candidatesTokenCount+(e.thoughtsTokenCount??0):void 0;return new Mn({inputTokens:e.promptTokenCount,outputTokens:o,nonCachedInputTokens:n,cacheReadInputTokens:t,reasoningTokens:e.thoughtsTokenCount,totalTokens:Ae.totalTokens(e.promptTokenCount,o,e.totalTokenCount),providerMetadata:{google:e}})},"mapUsage"),Zb=s((e,t)=>e==="STOP"?t?"tool-calls":"stop":e==="MAX_TOKENS"?"length":e==="IMAGE_SAFETY"||e==="RECITATION"||e==="SAFETY"||e==="BLOCKLIST"||e==="PROHIBITED_CONTENT"||e==="SPII"?"content-filter":e==="MALFORMED_FUNCTION_CALL"?"error":"unknown","mapFinishReason"),ew=s(e=>e.finishReason||e.usage?(()=>{let t=[],n=e.reasoningSignature?St.reasoningEnd(e.lifecycle,t,"reasoning-0",us({thoughtSignature:e.reasoningSignature})):e.lifecycle;return St.finish(n,t,{reason:Zb(e.finishReason,e.hasToolCalls),usage:e.usage}),t})():[],"finish"),tw=s((e,t)=>{let n={...e,usage:t.usageMetadata?Qb(t.usageMetadata)??e.usage:e.usage},o=t.candidates?.[0];if(!o?.content)return r.succeed([{...n,finishReason:o?.finishReason??n.finishReason},[]]);let i=[],a=n.hasToolCalls,l=n.lifecycle,u=n.nextToolCallId,f=n.reasoningSignature;for(let m of o.content.parts){if("thoughtSignature"in m&&m.thoughtSignature&&"thought"in m&&m.thought&&(f=m.thoughtSignature),"text"in m&&m.text.length>0){if(m.thought){l=St.reasoningDelta(l,i,"reasoning-0",m.text,m.thoughtSignature?us({thoughtSignature:m.thoughtSignature}):void 0);continue}l=St.reasoningEnd(l,i,"reasoning-0",f?us({thoughtSignature:f}):void 0),l=St.textDelta(l,i,"text-0",m.text);continue}if("functionCall"in m){let p=m.functionCall.args,h=`tool_${u++}`;l=St.reasoningEnd(l,i,"reasoning-0",f?us({thoughtSignature:f}):void 0),l=St.stepStart(l,i),i.push(st.toolCall({id:h,name:m.functionCall.name,input:p,providerMetadata:m.thoughtSignature?us({thoughtSignature:m.thoughtSignature}):void 0})),a=!0}}return r.succeed([{...n,hasToolCalls:a,lifecycle:l,nextToolCallId:u,reasoningSignature:f,finishReason:o.finishReason??n.finishReason},i])},"step"),nw=mo.make({id:Np,body:{schema:Bb,from:Xb},stream:{event:mo.jsonEvent(Wb),initial:s(()=>({hasToolCalls:!1,nextToolCallId:0,lifecycle:St.initial()}),"initial"),step:tw,onHalt:ew}}),vc=Jo.make({id:Np,provider:"google",protocol:nw,endpoint:Yo.path(({request:e})=>`/models/${e.model.id}:streamGenerateContent?alt=sse`,{baseURL:Tb}),auth:yt.none,framing:ti.sse});var $p=dt.make("google"),ow=[vc],rw=s(e=>"auth"in e&&e.auth?e.auth:yt.optional("apiKey"in e?e.apiKey:void 0,"apiKey").orElse(yt.config("GOOGLE_GENERATIVE_AI_API_KEY")).pipe(yt.header("x-goog-api-key")),"auth"),sw=s(e=>{let{apiKey:t,auth:n,baseURL:o,...i}=e;return vc.with({...i,endpoint:{baseURL:o},auth:rw(e)})},"configuredRoute"),xc=s((e={})=>{let t=sw(e);return{id:$p,model:s(n=>t.model({id:n}),"model"),configure:xc}},"configure"),qp=xc(),iw=qp.model;var Ai={};fe(Ai,{chat:()=>fw,configure:()=>Ic,id:()=>Wp,model:()=>dw,provider:()=>ps,responses:()=>uw,responsesWebSocket:()=>pw,routes:()=>aw});var Wp=dt.make("openai"),aw=[On,za,bo],cw=s(e=>Sn.bearer(e,"OPENAI_API_KEY"),"auth"),lw=s(e=>{let{apiKey:t,auth:n,baseURL:o,queryParams:i,...a}=e;return a},"defaults"),Sc=s((e,t)=>e.with({auth:cw(t),endpoint:{baseURL:t.baseURL,query:t.queryParams}}),"configuredRoute"),Ic=s((e={})=>{let t=Sc(On,e),n=Sc(za,e),o=Sc(bo,e),i=lw(e),a=s(f=>t.with(eo(f,i,{textVerbosity:!0})).model({id:f}),"responses");return{id:Wp,model:a,responses:a,responsesWebSocket:s(f=>n.with(eo(f,i,{textVerbosity:!0})).model({id:f}),"responsesWebSocket"),chat:s(f=>o.with(eo(f,i)).model({id:f}),"chat"),configure:Ic}},"configure"),ps=Ic(),dw=ps.model,uw=ps.responses,pw=ps.responsesWebSocket,fw=ps.chat;var _i={};fe(_i,{baseten:()=>gw,cerebras:()=>yw,configure:()=>Mi,deepinfra:()=>bw,deepseek:()=>ww,fireworks:()=>vw,groq:()=>xw,id:()=>zp,provider:()=>hw,routes:()=>mw,togetherai:()=>Sw});var Gt={baseten:{provider:"baseten",baseURL:"https://inference.baseten.co/v1"},cerebras:{provider:"cerebras",baseURL:"https://api.cerebras.ai/v1"},deepinfra:{provider:"deepinfra",baseURL:"https://api.deepinfra.com/v1/openai"},deepseek:{provider:"deepseek",baseURL:"https://api.deepseek.com/v1"},fireworks:{provider:"fireworks",baseURL:"https://api.fireworks.ai/inference/v1"},groq:{provider:"groq",baseURL:"https://api.groq.com/openai/v1"},openrouter:{provider:"openrouter",baseURL:"https://openrouter.ai/api/v1"},togetherai:{provider:"togetherai",baseURL:"https://api.together.xyz/v1"},xai:{provider:"xai",baseURL:"https://api.x.ai/v1"}},LR=Object.fromEntries(Object.values(Gt).map(e=>[e.provider,e]));var zp=dt.make("openai-compatible"),mw=[Jn],Mi=s(e=>{let t=e.provider??"openai-compatible",{provider:n,baseURL:o,apiKey:i,auth:a,...l}=e,u=Jn.with({...l,provider:t,endpoint:{baseURL:o},auth:Sn.bearer(e,[])});return{id:dt.make(t),model:s(f=>u.model({id:f,provider:dt.make(t)}),"model"),configure:Mi}},"configure"),Io=s(e=>{let t=s((n={})=>{let o=Mi({...n,baseURL:n.baseURL??e.baseURL,provider:e.provider});return{id:dt.make(e.provider),model:o.model,configure:t}},"configureProfile");return t()},"define"),hw={id:zp,configure:Mi},gw=Io(Gt.baseten),yw=Io(Gt.cerebras),bw=Io(Gt.deepinfra),ww=Io(Gt.deepseek),vw=Io(Gt.fireworks),xw=Io(Gt.groq),Sw=Io(Gt.togetherai);var Oi={};fe(Oi,{configure:()=>Dc,id:()=>Gp,model:()=>Pw,profile:()=>fs,protocol:()=>Hp,provider:()=>Yp,route:()=>kc,routes:()=>Ew});var fs=Gt.openrouter,Gp=dt.make(fs.provider),Iw="openrouter",kw=c.StructWithRest(c.Struct(Su),[c.Record(c.String,c.Any)]),Hp=mo.make({id:"openrouter-chat",body:{schema:kw,from:s(e=>Va.body.from(e).pipe(r.map(t=>({...t,...Dw(e.providerOptions?.openrouter)}))),"from")},stream:Va.stream}),Dw=s(e=>{let t=ei(e)?e:{};return{...t.usage===!0?{usage:{include:!0}}:ei(t.usage)?{usage:t.usage}:{},...ei(t.reasoning)?{reasoning:t.reasoning}:{},...typeof t.promptCacheKey=="string"?{prompt_cache_key:t.promptCacheKey}:{}}},"bodyOptions"),kc=Jo.make({id:Iw,provider:fs.provider,protocol:Hp,endpoint:Yo.path("/chat/completions",{baseURL:fs.baseURL}),framing:ti.sse}),Ew=[kc],Tw=s(e=>{let{apiKey:t,auth:n,baseURL:o,...i}=e;return kc.with({...i,endpoint:{baseURL:o??fs.baseURL},auth:Sn.bearer(e,"OPENROUTER_API_KEY")})},"configuredRoute"),Dc=s((e={})=>{let t=Tw(e);return{id:Gp,model:s(n=>t.model({id:n}),"model"),configure:Dc}},"configure"),Yp=Dc(),Pw=Yp.model;var Ec=dt.make("xai");var Jp=s(e=>Sn.bearer(e,"XAI_API_KEY"),"auth"),Rw=s(e=>{let{apiKey:t,auth:n,baseURL:o,...i}=e;return On.with({...i,provider:Ec,endpoint:{baseURL:o??Gt.xai.baseURL},auth:Jp(e)})},"configuredResponsesRoute"),Cw=s(e=>{let{apiKey:t,auth:n,baseURL:o,...i}=e;return Jn.with({...i,provider:Ec,endpoint:{baseURL:o??Gt.xai.baseURL},auth:Jp(e)})},"configuredChatRoute"),Kp=s((e={})=>{let t=Rw(e),n=Cw(e),o=s(a=>t.model({id:a}),"responses");return{id:Ec,model:o,responses:o,chat:s(a=>n.model({id:a}),"chat"),configure:Kp}},"configure"),Tc=Kp(),XR=Tc.model,QR=Tc.responses,ZR=Tc.chat;var Xp=s(e=>{if(!pt(e))return;let t=Object.fromEntries(Object.entries(e).filter(n=>pt(n[1])));return Object.keys(t).length===0?void 0:t},"providerMetadata"),Li=s(e=>Xp(e.providerMetadata)??Xp(e.providerOptions),"partProviderMetadata"),Mw=s(e=>({type:"text",text:typeof e.text=="string"?e.text:"",providerMetadata:Li(e)}),"textPart"),_w=s(e=>{if(typeof e.data!="string"&&!(e.data instanceof Uint8Array))throw new Error("Native LLM request adapter only supports file parts with string or Uint8Array data");return{type:"media",mediaType:typeof e.mediaType=="string"?e.mediaType:"application/octet-stream",data:e.data,filename:typeof e.filename=="string"?e.filename:void 0}},"mediaPart"),Ow=s(e=>{let t=pt(e.output)?e.output:{type:"json",value:e.output},n=t.type==="text"?"text":t.type==="error-text"?"error":"json";return tu.make({id:typeof e.toolCallId=="string"?e.toolCallId:"",name:typeof e.toolName=="string"?e.toolName:"",result:"value"in t?t.value:t,resultType:n,providerExecuted:typeof e.providerExecuted=="boolean"?e.providerExecuted:void 0,providerMetadata:Li(e)})},"toolResult"),Lw=s(e=>{if(!pt(e))throw new Error("Native LLM request adapter only supports object content parts");if(e.type==="text")return Mw(e);if(e.type==="file")return _w(e);if(e.type==="reasoning")return{type:"reasoning",text:typeof e.text=="string"?e.text:"",providerMetadata:Li(e)};if(e.type==="tool-call")return eu.make({id:typeof e.toolCallId=="string"?e.toolCallId:"",name:typeof e.toolName=="string"?e.toolName:"",input:e.input,providerExecuted:typeof e.providerExecuted=="boolean"?e.providerExecuted:void 0,providerMetadata:Li(e)});if(e.type==="tool-result")return Ow(e);throw new Error(`Native LLM request adapter does not support ${String(e.type)} content parts`)},"contentPart"),Nw=s(e=>typeof e=="string"?[{type:"text",text:e}]:e.map(Lw),"content"),jw=s(e=>{let t=e.flatMap(o=>o.role==="system"?[$a.make(o.content)]:[]),n=e.flatMap(o=>o.role==="system"?[]:[nu.make({role:o.role,content:Nw(o.content),native:pt(o.providerOptions)?{providerOptions:o.providerOptions}:void 0})]);return{system:t,messages:n}},"messages"),Uw=s(e=>pt(e)?pt(e.jsonSchema)?e.jsonSchema:e:{type:"object",properties:{}},"schema"),Fw=s(e=>Object.entries(e??{}).map(([t,n])=>ou.make({name:t,description:n.description??"",inputSchema:Uw(n.inputSchema)})),"tools"),Bw=s(e=>{let t={temperature:e.temperature,topP:e.topP,topK:e.topK,maxTokens:e.maxOutputTokens};return Object.values(t).some(n=>n!==void 0)?t:void 0},"generation"),$w=s(e=>"model"in e?e.baseURL??(e.model.api.url||void 0):e.api.url||void 0,"baseURL"),Qp=s((e,t)=>{if(t)return t;throw new Error(`Native LLM request adapter requires a base URL for ${e.providerID}/${e.id}`)},"requireBaseURL"),Zp=s((e,t)=>{let n="model"in e?e.model:e,o=$w(e),i={..."model"in e&&e.apiKey?{apiKey:e.apiKey}:{},...o?{baseURL:o}:{},headers:Object.keys({...n.headers,...t}).length===0?void 0:{...n.headers,...t},limits:{context:n.limit.context,output:n.limit.output}};if(n.api.npm==="@ai-sdk/openai")return Ai.configure(i).responses(n.api.id);if(n.api.npm==="@ai-sdk/azure")return Ri.configure({...i,baseURL:Qp(n,o)}).responses(n.api.id);if(n.api.npm==="@ai-sdk/anthropic")return Ei.configure(i).model(n.api.id);if(n.api.npm==="@ai-sdk/google")return Ci.configure(i).model(n.api.id);if(n.api.npm==="@ai-sdk/amazon-bedrock")return Pi.configure(i).model(n.api.id);if(n.api.npm==="@ai-sdk/openai-compatible")return _i.configure({...i,provider:String(n.providerID),baseURL:Qp(n,o)}).model(n.api.id);if(n.api.npm==="@openrouter/ai-sdk-provider")return Oi.configure(i).model(n.api.id);throw new Error(`Native LLM request adapter does not support provider package ${n.api.npm}`)},"model"),qw=s(e=>{let t=jw(e.messages);return bu.request({model:Zp(e,e.headers),system:[...(e.system??[]).map($a.make),...t.system],messages:t.messages,tools:Fw(e.tools),toolChoice:e.toolChoice,generation:Bw(e),providerOptions:e.providerOptions})},"request");function Ww(e){return ef(e,tf(e))}s(Ww,"status");function ef(e,t){let n=e.model.providerID;if(n!=="openai"&&n!=="anthropic"&&!n.startsWith("opencode"))return{type:"unsupported",reason:"provider is not openai, opencode, or anthropic"};let o=e.model.api.npm;if(o!=="@ai-sdk/openai"&&o!=="@ai-sdk/openai-compatible"&&o!=="@ai-sdk/anthropic")return{type:"unsupported",reason:"provider package is not OpenAI, OpenAI-compatible, or Anthropic"};if(e.auth?.type==="oauth"&&!(e.provider.id==="openai"&&t))return{type:"unsupported",reason:"OAuth auth requires a provider fetch override"};let i=typeof e.provider.options.apiKey=="string"?e.provider.options.apiKey:e.provider.key;return i?{type:"supported",apiKey:i,baseURL:typeof e.provider.options.baseURL=="string"?e.provider.options.baseURL:void 0}:{type:"unsupported",reason:"API key is not configured"}}s(ef,"statusWithFetch");function Vw(e){let t=tf(e),n=ef(e,t);if(n.type==="unsupported")return n;let o=nf(e.tools,e),i=ms.request({model:e.model,apiKey:n.apiKey,baseURL:n.baseURL,messages:et.message(e.messages,e.model,e.providerOptions??{}),toolChoice:e.toolChoice,temperature:e.temperature,topP:e.topP,topK:e.topK,maxOutputTokens:e.maxOutputTokens,providerOptions:et.providerOptions(e.model,e.providerOptions??{}),headers:{...zw(e.provider.options.headers),...e.headers}}),a=Gs(zs(r.gen(function*(){let l=yield*Ks.make(),u=yield*Yr.unbounded();return e.llmClient.stream(ru.update(i,{tools:[...i.tools,...hu(o)]})).pipe(Hs(m=>m.type!=="tool-call"||m.providerExecuted?La(m):La(m).pipe(Ys(Oa(yu.dispatch(o,m).pipe(r.flatMap(p=>Yr.offerAll(u,p.events)),r.catchCause(p=>Yr.failCause(u,p)),r.asVoid,Ks.run(l,{startImmediately:!0})))))),Ys(Oa(Ks.awaitEmpty(l).pipe(r.andThen(Yr.end(u)),r.asVoid)))).pipe(Ys(Md(u)))})));return{...n,stream:t?a.pipe(Bd(Vd.Fetch,t)):a}}s(Vw,"stream");function tf(e){if(e.provider.id!=="openai"||e.auth?.type!=="oauth")return;let t=e.provider.options.fetch;if(typeof t=="function")return t}s(tf,"providerFetch");function zw(e){if(pt(e))return Object.fromEntries(Object.entries(e).filter(t=>typeof t[1]=="string"))}s(zw,"providerHeaders");function Gw(e){return!e||typeof e!="object"?{type:"object",properties:{}}:"jsonSchema"in e&&e.jsonSchema&&typeof e.jsonSchema=="object"?e.jsonSchema:fi(e).jsonSchema}s(Gw,"nativeSchema");function nf(e,t){return Object.fromEntries(Object.entries(e).map(([n,o])=>[n,gu.make({description:o.description??"",jsonSchema:Gw(o.inputSchema),execute:s((i,a)=>r.tryPromise({try:s(()=>{if(!o.execute)throw new Error(`Tool has no execute handler: ${n}`);return o.execute(i,{toolCallId:a?.id??n,messages:t.messages,abortSignal:t.abort})},"try"),catch:s(l=>new su({message:gn(l),error:l}),"catch")}),"execute")})]))}s(nf,"nativeTools");var lr={};fe(lr,{LLMRequestPrep:()=>lr,hasToolCalls:()=>gf,prepare:()=>Xw});var to={};fe(to,{Service:()=>cr,SystemPrompt:()=>to,node:()=>Kw,provider:()=>Hw});var of=`You are OpenCode, the best coding agent on the planet.
48
+ `)),O){let Z=b.error?` Request failed: ${b.error.message} (${b.error.code}).`:"";E.log(`Received response '${O.method} - (${b.id})' in ${Date.now()-O.timerStart}ms.${Z}`,F)}else E.log(`Received response ${b.id} without active response promise.`,F)}else re("receive-response",b)}s(ne,"traceReceivedResponse");function re(b,O){if(!E||y===Je.Off)return;let F={isLSPMessage:!0,type:b,message:O,timestamp:Date.now()};E.log(F)}s(re,"logLSPMessage");function se(){if(q())throw new Er(Ss.Closed,"Connection is closed.");if(j())throw new Er(Ss.Disposed,"Connection is disposed.")}s(se,"throwIfClosedOrDisposed");function K(){if(N())throw new Er(Ss.AlreadyListening,"Connection is already listening")}s(K,"throwIfListening");function je(){if(!N())throw new Error("Call listen() first.")}s(je,"throwIfNotListening");function qe(b){return b===void 0?null:b}s(qe,"undefinedToNull");function Ue(b){if(b!==null)return b}s(Ue,"nullToUndefined");function Xe(b){return b!=null&&!Array.isArray(b)&&typeof b=="object"}s(Xe,"isNamedParam");function xe(b,O){switch(b){case Ie.ParameterStructures.auto:return Xe(O)?Ue(O):[qe(O)];case Ie.ParameterStructures.byName:if(!Xe(O))throw new Error("Received parameters by name but param is not an object literal.");return Ue(O);case Ie.ParameterStructures.byPosition:return[qe(O)];default:throw new Error(`Unknown parameter structure ${b.toString()}`)}}s(xe,"computeSingleParam");function Be(b,O){let F,Z=b.numberOfParams;switch(Z){case 0:F=void 0;break;case 1:F=xe(b.parameterStructures,O[0]);break;default:F=[];for(let Oe=0;Oe<O.length&&Oe<Z;Oe++)F.push(qe(O[Oe]));if(O.length<Z)for(let Oe=O.length;Oe<Z;Oe++)F.push(null);break}return F}s(Be,"computeMessageParams");let z={sendNotification:s((b,...O)=>{se();let F,Z;if(ht.string(b)){F=b;let ce=O[0],de=0,X=Ie.ParameterStructures.auto;Ie.ParameterStructures.is(ce)&&(de=1,X=ce);let Q=O.length,he=Q-de;switch(he){case 0:Z=void 0;break;case 1:Z=xe(X,O[de]);break;default:if(X===Ie.ParameterStructures.byName)throw new Error(`Received ${he} parameters for 'by Name' notification parameter structure.`);Z=O.slice(de,Q).map(ge=>qe(ge));break}}else{let ce=O;F=b.method,Z=Be(b,ce)}let Oe={jsonrpc:f,method:F,params:Z};return x(Oe),t.write(Oe).catch(ce=>{throw i.error("Sending notification failed."),ce})},"sendNotification"),onNotification:s((b,O)=>{se();let F;return ht.func(b)?h=b:O&&(ht.string(b)?(F=b,g.set(b,{type:void 0,handler:O})):(F=b.method,g.set(b.method,{type:b,handler:O}))),{dispose:s(()=>{F!==void 0?g.delete(F):h=void 0},"dispose")}},"onNotification"),onProgress:s((b,O,F)=>{if(I.has(O))throw new Error(`Progress handler for token ${O} already registered`);return I.set(O,F),{dispose:s(()=>{I.delete(O)},"dispose")}},"onProgress"),sendProgress:s((b,O,F)=>z.sendNotification(xs.type,{token:O,value:F}),"sendProgress"),onUnhandledProgress:U.event,sendRequest:s((b,...O)=>{se(),je();let F,Z,Oe;if(ht.string(b)){F=b;let Q=O[0],he=O[O.length-1],ge=0,Re=Ie.ParameterStructures.auto;Ie.ParameterStructures.is(Q)&&(ge=1,Re=Q);let Qe=O.length;Il.CancellationToken.is(he)&&(Qe=Qe-1,Oe=he);let vt=Qe-ge;switch(vt){case 0:Z=void 0;break;case 1:Z=xe(Re,O[ge]);break;default:if(Re===Ie.ParameterStructures.byName)throw new Error(`Received ${vt} parameters for 'by Name' request parameter structure.`);Z=O.slice(ge,Qe).map(zo=>qe(zo));break}}else{let Q=O;F=b.method,Z=Be(b,Q);let he=b.numberOfParams;Oe=Il.CancellationToken.is(Q[he])?Q[he]:void 0}let ce=a++,de;Oe&&(de=Oe.onCancellationRequested(()=>{let Q=ue.sender.sendCancellation(z,ce);return Q===void 0?(i.log(`Received no promise from cancellation strategy when cancelling id ${ce}`),Promise.resolve()):Q.catch(()=>{i.log(`Sending cancellation messages for id ${ce} failed`)})}));let X={jsonrpc:f,id:ce,method:F,params:Z};return Pn(X),typeof ue.sender.enableCancellation=="function"&&ue.sender.enableCancellation(X),new Promise(async(Q,he)=>{let ge=s(vt=>{Q(vt),ue.sender.cleanup(ce),de?.dispose()},"resolveWithCleanup"),Re=s(vt=>{he(vt),ue.sender.cleanup(ce),de?.dispose()},"rejectWithCleanup"),Qe={method:F,timerStart:Date.now(),resolve:ge,reject:Re};try{P.set(ce,Qe),await t.write(X)}catch(vt){throw P.delete(ce),Qe.reject(new Ie.ResponseError(Ie.ErrorCodes.MessageWriteError,vt.message?vt.message:"Unknown reason")),i.error("Sending request failed."),vt}})},"sendRequest"),onRequest:s((b,O)=>{se();let F=null;return El.is(b)?(F=void 0,m=b):ht.string(b)?(F=null,O!==void 0&&(F=b,p.set(b,{handler:O,type:void 0}))):O!==void 0&&(F=b.method,p.set(b.method,{type:b,handler:O})),{dispose:s(()=>{F!==null&&(F!==void 0?p.delete(F):m=void 0)},"dispose")}},"onRequest"),hasPendingResponse:s(()=>P.size>0,"hasPendingResponse"),trace:s(async(b,O,F)=>{let Z=!1,Oe=tn.Text;F!==void 0&&(ht.boolean(F)?Z=F:(Z=F.sendNotification||!1,Oe=F.traceFormat||tn.Text)),y=b,S=Oe,y===Je.Off?E=void 0:E=O,Z&&!q()&&!j()&&await z.sendNotification(Tl.type,{value:Je.toString(b)})},"trace"),onError:M.event,onClose:C.event,onUnhandledNotification:$.event,onDispose:H.event,end:s(()=>{t.end()},"end"),dispose:s(()=>{if(j())return;w=wn.Disposed,H.fire(void 0);let b=new Ie.ResponseError(Ie.ErrorCodes.PendingResponseRejected,"Pending response rejected since connection got disposed");for(let O of P.values())O.reject(b);P=new Map,k=new Map,d=new Set,v=new sm.LinkedMap,ht.func(t.dispose)&&t.dispose(),ht.func(e.dispose)&&e.dispose()},"dispose"),listen:s(()=>{se(),K(),w=wn.Listening,e.listen(R)},"listen"),inspect:s(()=>{(0,rm.default)().console.log("inspect")},"inspect")};return z.onNotification(Qi.type,b=>{if(y===Je.Off||!E)return;let O=y===Je.Verbose||y===Je.Compact;E.log(b.message,O?b.verbose:void 0)}),z.onNotification(xs.type,b=>{let O=I.get(b.token);O?O(b.value):U.fire(b)}),z}s(bx,"createMessageConnection");_e.createMessageConnection=bx});var ra=Dt(B=>{"use strict";Object.defineProperty(B,"__esModule",{value:!0});B.ProgressType=B.ProgressToken=B.createMessageConnection=B.NullLogger=B.ConnectionOptions=B.ConnectionStrategy=B.AbstractMessageBuffer=B.WriteableStreamMessageWriter=B.AbstractMessageWriter=B.MessageWriter=B.ReadableStreamMessageReader=B.AbstractMessageReader=B.MessageReader=B.SharedArrayReceiverStrategy=B.SharedArraySenderStrategy=B.CancellationToken=B.CancellationTokenSource=B.Emitter=B.Event=B.Disposable=B.LRUCache=B.Touch=B.LinkedMap=B.ParameterStructures=B.NotificationType9=B.NotificationType8=B.NotificationType7=B.NotificationType6=B.NotificationType5=B.NotificationType4=B.NotificationType3=B.NotificationType2=B.NotificationType1=B.NotificationType0=B.NotificationType=B.ErrorCodes=B.ResponseError=B.RequestType9=B.RequestType8=B.RequestType7=B.RequestType6=B.RequestType5=B.RequestType4=B.RequestType3=B.RequestType2=B.RequestType1=B.RequestType0=B.RequestType=B.Message=B.RAL=void 0;B.MessageStrategy=B.CancellationStrategy=B.CancellationSenderStrategy=B.CancellationReceiverStrategy=B.ConnectionError=B.ConnectionErrors=B.LogTraceNotification=B.SetTraceNotification=B.TraceFormat=B.TraceValues=B.Trace=void 0;var rt=tl();Object.defineProperty(B,"Message",{enumerable:!0,get:s(function(){return rt.Message},"get")});Object.defineProperty(B,"RequestType",{enumerable:!0,get:s(function(){return rt.RequestType},"get")});Object.defineProperty(B,"RequestType0",{enumerable:!0,get:s(function(){return rt.RequestType0},"get")});Object.defineProperty(B,"RequestType1",{enumerable:!0,get:s(function(){return rt.RequestType1},"get")});Object.defineProperty(B,"RequestType2",{enumerable:!0,get:s(function(){return rt.RequestType2},"get")});Object.defineProperty(B,"RequestType3",{enumerable:!0,get:s(function(){return rt.RequestType3},"get")});Object.defineProperty(B,"RequestType4",{enumerable:!0,get:s(function(){return rt.RequestType4},"get")});Object.defineProperty(B,"RequestType5",{enumerable:!0,get:s(function(){return rt.RequestType5},"get")});Object.defineProperty(B,"RequestType6",{enumerable:!0,get:s(function(){return rt.RequestType6},"get")});Object.defineProperty(B,"RequestType7",{enumerable:!0,get:s(function(){return rt.RequestType7},"get")});Object.defineProperty(B,"RequestType8",{enumerable:!0,get:s(function(){return rt.RequestType8},"get")});Object.defineProperty(B,"RequestType9",{enumerable:!0,get:s(function(){return rt.RequestType9},"get")});Object.defineProperty(B,"ResponseError",{enumerable:!0,get:s(function(){return rt.ResponseError},"get")});Object.defineProperty(B,"ErrorCodes",{enumerable:!0,get:s(function(){return rt.ErrorCodes},"get")});Object.defineProperty(B,"NotificationType",{enumerable:!0,get:s(function(){return rt.NotificationType},"get")});Object.defineProperty(B,"NotificationType0",{enumerable:!0,get:s(function(){return rt.NotificationType0},"get")});Object.defineProperty(B,"NotificationType1",{enumerable:!0,get:s(function(){return rt.NotificationType1},"get")});Object.defineProperty(B,"NotificationType2",{enumerable:!0,get:s(function(){return rt.NotificationType2},"get")});Object.defineProperty(B,"NotificationType3",{enumerable:!0,get:s(function(){return rt.NotificationType3},"get")});Object.defineProperty(B,"NotificationType4",{enumerable:!0,get:s(function(){return rt.NotificationType4},"get")});Object.defineProperty(B,"NotificationType5",{enumerable:!0,get:s(function(){return rt.NotificationType5},"get")});Object.defineProperty(B,"NotificationType6",{enumerable:!0,get:s(function(){return rt.NotificationType6},"get")});Object.defineProperty(B,"NotificationType7",{enumerable:!0,get:s(function(){return rt.NotificationType7},"get")});Object.defineProperty(B,"NotificationType8",{enumerable:!0,get:s(function(){return rt.NotificationType8},"get")});Object.defineProperty(B,"NotificationType9",{enumerable:!0,get:s(function(){return rt.NotificationType9},"get")});Object.defineProperty(B,"ParameterStructures",{enumerable:!0,get:s(function(){return rt.ParameterStructures},"get")});var Cl=ol();Object.defineProperty(B,"LinkedMap",{enumerable:!0,get:s(function(){return Cl.LinkedMap},"get")});Object.defineProperty(B,"LRUCache",{enumerable:!0,get:s(function(){return Cl.LRUCache},"get")});Object.defineProperty(B,"Touch",{enumerable:!0,get:s(function(){return Cl.Touch},"get")});var wx=Hf();Object.defineProperty(B,"Disposable",{enumerable:!0,get:s(function(){return wx.Disposable},"get")});var lm=Sr();Object.defineProperty(B,"Event",{enumerable:!0,get:s(function(){return lm.Event},"get")});Object.defineProperty(B,"Emitter",{enumerable:!0,get:s(function(){return lm.Emitter},"get")});var dm=Hi();Object.defineProperty(B,"CancellationTokenSource",{enumerable:!0,get:s(function(){return dm.CancellationTokenSource},"get")});Object.defineProperty(B,"CancellationToken",{enumerable:!0,get:s(function(){return dm.CancellationToken},"get")});var um=Jf();Object.defineProperty(B,"SharedArraySenderStrategy",{enumerable:!0,get:s(function(){return um.SharedArraySenderStrategy},"get")});Object.defineProperty(B,"SharedArrayReceiverStrategy",{enumerable:!0,get:s(function(){return um.SharedArrayReceiverStrategy},"get")});var Al=Xf();Object.defineProperty(B,"MessageReader",{enumerable:!0,get:s(function(){return Al.MessageReader},"get")});Object.defineProperty(B,"AbstractMessageReader",{enumerable:!0,get:s(function(){return Al.AbstractMessageReader},"get")});Object.defineProperty(B,"ReadableStreamMessageReader",{enumerable:!0,get:s(function(){return Al.ReadableStreamMessageReader},"get")});var Ml=nm();Object.defineProperty(B,"MessageWriter",{enumerable:!0,get:s(function(){return Ml.MessageWriter},"get")});Object.defineProperty(B,"AbstractMessageWriter",{enumerable:!0,get:s(function(){return Ml.AbstractMessageWriter},"get")});Object.defineProperty(B,"WriteableStreamMessageWriter",{enumerable:!0,get:s(function(){return Ml.WriteableStreamMessageWriter},"get")});var vx=om();Object.defineProperty(B,"AbstractMessageBuffer",{enumerable:!0,get:s(function(){return vx.AbstractMessageBuffer},"get")});var Mt=cm();Object.defineProperty(B,"ConnectionStrategy",{enumerable:!0,get:s(function(){return Mt.ConnectionStrategy},"get")});Object.defineProperty(B,"ConnectionOptions",{enumerable:!0,get:s(function(){return Mt.ConnectionOptions},"get")});Object.defineProperty(B,"NullLogger",{enumerable:!0,get:s(function(){return Mt.NullLogger},"get")});Object.defineProperty(B,"createMessageConnection",{enumerable:!0,get:s(function(){return Mt.createMessageConnection},"get")});Object.defineProperty(B,"ProgressToken",{enumerable:!0,get:s(function(){return Mt.ProgressToken},"get")});Object.defineProperty(B,"ProgressType",{enumerable:!0,get:s(function(){return Mt.ProgressType},"get")});Object.defineProperty(B,"Trace",{enumerable:!0,get:s(function(){return Mt.Trace},"get")});Object.defineProperty(B,"TraceValues",{enumerable:!0,get:s(function(){return Mt.TraceValues},"get")});Object.defineProperty(B,"TraceFormat",{enumerable:!0,get:s(function(){return Mt.TraceFormat},"get")});Object.defineProperty(B,"SetTraceNotification",{enumerable:!0,get:s(function(){return Mt.SetTraceNotification},"get")});Object.defineProperty(B,"LogTraceNotification",{enumerable:!0,get:s(function(){return Mt.LogTraceNotification},"get")});Object.defineProperty(B,"ConnectionErrors",{enumerable:!0,get:s(function(){return Mt.ConnectionErrors},"get")});Object.defineProperty(B,"ConnectionError",{enumerable:!0,get:s(function(){return Mt.ConnectionError},"get")});Object.defineProperty(B,"CancellationReceiverStrategy",{enumerable:!0,get:s(function(){return Mt.CancellationReceiverStrategy},"get")});Object.defineProperty(B,"CancellationSenderStrategy",{enumerable:!0,get:s(function(){return Mt.CancellationSenderStrategy},"get")});Object.defineProperty(B,"CancellationStrategy",{enumerable:!0,get:s(function(){return Mt.CancellationStrategy},"get")});Object.defineProperty(B,"MessageStrategy",{enumerable:!0,get:s(function(){return Mt.MessageStrategy},"get")});var xx=oo();B.RAL=xx.default});var mm=Dt(Nl=>{"use strict";Object.defineProperty(Nl,"__esModule",{value:!0});var pm=Hr("util"),Un=ra(),sa=class e extends Un.AbstractMessageBuffer{static{s(this,"MessageBuffer")}constructor(t="utf-8"){super(t)}emptyBuffer(){return e.emptyBuffer}fromString(t,n){return Buffer.from(t,n)}toString(t,n){return t instanceof Buffer?t.toString(n):new pm.TextDecoder(n).decode(t)}asNative(t,n){return n===void 0?t instanceof Buffer?t:Buffer.from(t):t instanceof Buffer?t.slice(0,n):Buffer.from(t,0,n)}allocNative(t){return Buffer.allocUnsafe(t)}};sa.emptyBuffer=Buffer.allocUnsafe(0);var _l=class{static{s(this,"ReadableStreamWrapper")}constructor(t){this.stream=t}onClose(t){return this.stream.on("close",t),Un.Disposable.create(()=>this.stream.off("close",t))}onError(t){return this.stream.on("error",t),Un.Disposable.create(()=>this.stream.off("error",t))}onEnd(t){return this.stream.on("end",t),Un.Disposable.create(()=>this.stream.off("end",t))}onData(t){return this.stream.on("data",t),Un.Disposable.create(()=>this.stream.off("data",t))}},Ol=class{static{s(this,"WritableStreamWrapper")}constructor(t){this.stream=t}onClose(t){return this.stream.on("close",t),Un.Disposable.create(()=>this.stream.off("close",t))}onError(t){return this.stream.on("error",t),Un.Disposable.create(()=>this.stream.off("error",t))}onEnd(t){return this.stream.on("end",t),Un.Disposable.create(()=>this.stream.off("end",t))}write(t,n){return new Promise((o,i)=>{let a=s(l=>{l==null?o():i(l)},"callback");typeof t=="string"?this.stream.write(t,n,a):this.stream.write(t,a)})}end(){this.stream.end()}},fm=Object.freeze({messageBuffer:Object.freeze({create:s(e=>new sa(e),"create")}),applicationJson:Object.freeze({encoder:Object.freeze({name:"application/json",encode:s((e,t)=>{try{return Promise.resolve(Buffer.from(JSON.stringify(e,void 0,0),t.charset))}catch(n){return Promise.reject(n)}},"encode")}),decoder:Object.freeze({name:"application/json",decode:s((e,t)=>{try{return e instanceof Buffer?Promise.resolve(JSON.parse(e.toString(t.charset))):Promise.resolve(JSON.parse(new pm.TextDecoder(t.charset).decode(e)))}catch(n){return Promise.reject(n)}},"decode")})}),stream:Object.freeze({asReadableStream:s(e=>new _l(e),"asReadableStream"),asWritableStream:s(e=>new Ol(e),"asWritableStream")}),console,timer:Object.freeze({setTimeout(e,t,...n){let o=setTimeout(e,t,...n);return{dispose:s(()=>clearTimeout(o),"dispose")}},setImmediate(e,...t){let n=setImmediate(e,...t);return{dispose:s(()=>clearImmediate(n),"dispose")}},setInterval(e,t,...n){let o=setInterval(e,t,...n);return{dispose:s(()=>clearInterval(o),"dispose")}}})});function Ll(){return fm}s(Ll,"RIL");(function(e){function t(){Un.RAL.install(fm)}s(t,"install"),e.install=t})(Ll||(Ll={}));Nl.default=Ll});var ym=Dt(ze=>{"use strict";var Sx=ze&&ze.__createBinding||(Object.create?(function(e,t,n,o){o===void 0&&(o=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:s(function(){return t[n]},"get")}),Object.defineProperty(e,o,i)}):(function(e,t,n,o){o===void 0&&(o=n),e[o]=t[n]})),Ix=ze&&ze.__exportStar||function(e,t){for(var n in e)n!=="default"&&!Object.prototype.hasOwnProperty.call(t,n)&&Sx(t,e,n)};Object.defineProperty(ze,"__esModule",{value:!0});ze.createMessageConnection=ze.createServerSocketTransport=ze.createClientSocketTransport=ze.createServerPipeTransport=ze.createClientPipeTransport=ze.generateRandomPipeName=ze.StreamMessageWriter=ze.StreamMessageReader=ze.SocketMessageWriter=ze.SocketMessageReader=ze.PortMessageWriter=ze.PortMessageReader=ze.IPCMessageWriter=ze.IPCMessageReader=void 0;var Tr=mm();Tr.default.install();var hm=Hr("path"),kx=Hr("os"),Dx=Hr("crypto"),ca=Hr("net"),nn=ra();Ix(ra(),ze);var jl=class extends nn.AbstractMessageReader{static{s(this,"IPCMessageReader")}constructor(t){super(),this.process=t;let n=this.process;n.on("error",o=>this.fireError(o)),n.on("close",()=>this.fireClose())}listen(t){return this.process.on("message",t),nn.Disposable.create(()=>this.process.off("message",t))}};ze.IPCMessageReader=jl;var Ul=class extends nn.AbstractMessageWriter{static{s(this,"IPCMessageWriter")}constructor(t){super(),this.process=t,this.errorCount=0;let n=this.process;n.on("error",o=>this.fireError(o)),n.on("close",()=>this.fireClose)}write(t){try{return typeof this.process.send=="function"&&this.process.send(t,void 0,void 0,n=>{n?(this.errorCount++,this.handleError(n,t)):this.errorCount=0}),Promise.resolve()}catch(n){return this.handleError(n,t),Promise.reject(n)}}handleError(t,n){this.errorCount++,this.fireError(t,n,this.errorCount)}end(){}};ze.IPCMessageWriter=Ul;var Fl=class extends nn.AbstractMessageReader{static{s(this,"PortMessageReader")}constructor(t){super(),this.onData=new nn.Emitter,t.on("close",()=>this.fireClose),t.on("error",n=>this.fireError(n)),t.on("message",n=>{this.onData.fire(n)})}listen(t){return this.onData.event(t)}};ze.PortMessageReader=Fl;var Bl=class extends nn.AbstractMessageWriter{static{s(this,"PortMessageWriter")}constructor(t){super(),this.port=t,this.errorCount=0,t.on("close",()=>this.fireClose()),t.on("error",n=>this.fireError(n))}write(t){try{return this.port.postMessage(t),Promise.resolve()}catch(n){return this.handleError(n,t),Promise.reject(n)}}handleError(t,n){this.errorCount++,this.fireError(t,n,this.errorCount)}end(){}};ze.PortMessageWriter=Bl;var To=class extends nn.ReadableStreamMessageReader{static{s(this,"SocketMessageReader")}constructor(t,n="utf-8"){super((0,Tr.default)().stream.asReadableStream(t),n)}};ze.SocketMessageReader=To;var Po=class extends nn.WriteableStreamMessageWriter{static{s(this,"SocketMessageWriter")}constructor(t,n){super((0,Tr.default)().stream.asWritableStream(t),n),this.socket=t}dispose(){super.dispose(),this.socket.destroy()}};ze.SocketMessageWriter=Po;var ia=class extends nn.ReadableStreamMessageReader{static{s(this,"StreamMessageReader")}constructor(t,n){super((0,Tr.default)().stream.asReadableStream(t),n)}};ze.StreamMessageReader=ia;var aa=class extends nn.WriteableStreamMessageWriter{static{s(this,"StreamMessageWriter")}constructor(t,n){super((0,Tr.default)().stream.asWritableStream(t),n)}};ze.StreamMessageWriter=aa;var gm=process.env.XDG_RUNTIME_DIR,Ex=new Map([["linux",107],["darwin",103]]);function Tx(){let e=(0,Dx.randomBytes)(21).toString("hex");if(process.platform==="win32")return`\\\\.\\pipe\\vscode-jsonrpc-${e}-sock`;let t;gm?t=hm.join(gm,`vscode-ipc-${e}.sock`):t=hm.join(kx.tmpdir(),`vscode-${e}.sock`);let n=Ex.get(process.platform);return n!==void 0&&t.length>n&&(0,Tr.default)().console.warn(`WARNING: IPC handle "${t}" is longer than ${n} characters.`),t}s(Tx,"generateRandomPipeName");ze.generateRandomPipeName=Tx;function Px(e,t="utf-8"){let n,o=new Promise((i,a)=>{n=i});return new Promise((i,a)=>{let l=(0,ca.createServer)(u=>{l.close(),n([new To(u,t),new Po(u,t)])});l.on("error",a),l.listen(e,()=>{l.removeListener("error",a),i({onConnected:s(()=>o,"onConnected")})})})}s(Px,"createClientPipeTransport");ze.createClientPipeTransport=Px;function Rx(e,t="utf-8"){let n=(0,ca.createConnection)(e);return[new To(n,t),new Po(n,t)]}s(Rx,"createServerPipeTransport");ze.createServerPipeTransport=Rx;function Cx(e,t="utf-8"){let n,o=new Promise((i,a)=>{n=i});return new Promise((i,a)=>{let l=(0,ca.createServer)(u=>{l.close(),n([new To(u,t),new Po(u,t)])});l.on("error",a),l.listen(e,"127.0.0.1",()=>{l.removeListener("error",a),i({onConnected:s(()=>o,"onConnected")})})})}s(Cx,"createClientSocketTransport");ze.createClientSocketTransport=Cx;function Ax(e,t="utf-8"){let n=(0,ca.createConnection)(e,"127.0.0.1");return[new To(n,t),new Po(n,t)]}s(Ax,"createServerSocketTransport");ze.createServerSocketTransport=Ax;function Mx(e){let t=e;return t.read!==void 0&&t.addListener!==void 0}s(Mx,"isReadableStream");function _x(e){let t=e;return t.write!==void 0&&t.addListener!==void 0}s(_x,"isWritableStream");function Ox(e,t,n,o){n||(n=nn.NullLogger);let i=Mx(e)?new ia(e):e,a=_x(t)?new aa(t):t;return nn.ConnectionStrategy.is(o)&&(o={connectionStrategy:o}),(0,nn.createMessageConnection)(i,a,n,o)}s(Ox,"createMessageConnection");ze.createMessageConnection=Ox});var wm=Dt((UO,bm)=>{"use strict";bm.exports=ym()});var vo={};fe(vo,{AppNodeBuilder:()=>vo,build:()=>Eg});function Eg(e,t=[]){let n=t;if(De.hasUnbound(e,Yn.node)&&!Tg(t,Yn.node)){let o=ju(t),i=Xs({service:Yn.Service,layer:o,deps:[]});n=t.concat([[Yn.node,i]])}return De.compile(e,n)}s(Eg,"build");function Tg(e,t){return e.some(([n])=>n.name===t.name)}s(Tg,"hasReplacement");var sc={};fe(sc,{Authorization:()=>rc,AuthorizeInput:()=>Mg,CallbackInput:()=>_g,Method:()=>bi,Methods:()=>Zu,OauthCallbackFailed:()=>xi,OauthCodeMissing:()=>vi,OauthMissing:()=>wi,ProviderAuth:()=>sc,Service:()=>xo,ValidationFailed:()=>os,node:()=>Ng,use:()=>Og});var Qu=c.Struct({key:c.String,op:c.Literals(["eq","neq"]),value:c.String}),Pg=c.Struct({type:c.Literal("text"),key:c.String,message:c.String,placeholder:hn(c.String),when:hn(Qu)}),Rg=c.Struct({label:c.String,value:c.String,hint:hn(c.String)}),Cg=c.Struct({type:c.Literal("select"),key:c.String,message:c.String,options:c.Array(Rg),when:hn(Qu)}),Ag=c.Union([Pg,Cg]),bi=class extends c.Class("ProviderAuthMethod")({type:c.Literals(["oauth","api"]),label:c.String,prompts:hn(c.Array(Ag))}){static{s(this,"Method")}},Zu=c.Record(c.String,c.Array(bi)),rc=class extends c.Class("ProviderAuthAuthorization")({url:c.String,method:c.Literals(["auto","code"]),instructions:c.String}){static{s(this,"Authorization")}},Mg=c.Struct({method:c.Finite.annotate({description:"Auth method index"}),inputs:c.optional(c.Record(c.String,c.String)).annotate({description:"Prompt inputs"})}),_g=c.Struct({method:c.Finite.annotate({description:"Auth method index"}),code:c.optional(c.String).annotate({description:"OAuth authorization code"})}),wi=class extends c.TaggedErrorClass()("ProviderAuthOauthMissing",{providerID:sn.ID}){static{s(this,"OauthMissing")}},vi=class extends c.TaggedErrorClass()("ProviderAuthOauthCodeMissing",{providerID:sn.ID}){static{s(this,"OauthCodeMissing")}},xi=class extends c.TaggedErrorClass()("ProviderAuthOauthCallbackFailed",{}){static{s(this,"OauthCallbackFailed")}},os=class extends c.TaggedErrorClass()("ProviderAuthValidationFailed",{field:c.String,message:c.String}){static{s(this,"ValidationFailed")}},xo=class extends Ce.Service()("@opencode/ProviderAuth"){static{s(this,"Service")}},Og=Wt(xo),Lg=Pe.effect(xo,r.gen(function*(){let e=yield*Xt.Service,t=yield*ft.Service,n=yield*V.make(r.fn("ProviderAuth.state")(function*(){let u=yield*t.list();return{hooks:Go.fromEntries(Dd.filterMap(u,f=>f.auth?.provider!==void 0?Ma.succeed([sn.ID.make(f.auth.provider),f.auth]):Ma.failVoid)),pending:new Map}})),o=c.decodeUnknownSync(Zu),i=r.fn("ProviderAuth.methods")(function*(){let u=(yield*V.get(n)).hooks;return o(Go.map(u,f=>f.methods.map(m=>({type:m.type,label:m.label,...m.prompts&&{prompts:m.prompts.map(p=>p.type==="select"?{type:"select",key:p.key,message:p.message,options:p.options,...p.when&&{when:p.when}}:{type:"text",key:p.key,message:p.message,...p.placeholder&&{placeholder:p.placeholder},...p.when&&{when:p.when}})}}))))}),a=r.fn("ProviderAuth.authorize")(function*(u){let{hooks:f,pending:m}=yield*V.get(n),p=f[u.providerID].methods[u.method];if(p.type!=="oauth")return;if(p.prompts&&u.inputs){for(let g of p.prompts)if(g.type==="text"&&g.validate&&u.inputs[g.key]!==void 0){let I=g.validate(u.inputs[g.key]);if(I)return yield*new os({field:g.key,message:I})}}let h=yield*r.tryPromise({try:s(()=>p.authorize(u.inputs),"try"),catch:s(g=>new os({field:"authorize",message:g instanceof Error?g.message:String(g)}),"catch")});return m.set(u.providerID,h),{url:h.url,method:h.method,instructions:h.instructions}}),l=r.fn("ProviderAuth.callback")(function*(u){let m=(yield*V.get(n)).pending.get(u.providerID);if(!m)return yield*new wi({providerID:u.providerID});if(m.method==="code"&&!u.code)return yield*new vi({providerID:u.providerID});let p=yield*r.promise(()=>m.method==="code"?m.callback(u.code):m.callback());if(!p||p.type!=="success")return yield*new xi({});if("key"in p&&(yield*e.set(u.providerID,{type:"api",key:p.key,...p.metadata?{metadata:p.metadata}:{}})),"refresh"in p){let{type:h,provider:g,refresh:I,access:T,expires:v,...P}=p;yield*e.set(u.providerID,{type:"oauth",access:T,refresh:I,expires:v,...P})}});return xo.of({methods:i,authorize:a,callback:l})})),Ng=De.make({service:xo,layer:Lg,deps:[Xt.node,ft.node]});var Qt={};fe(Qt,{Answer:()=>zg,Event:()=>Ii,Info:()=>$g,NotFoundError:()=>ss,Option:()=>Bg,Prompt:()=>qg,Question:()=>Qt,Rejected:()=>Yg,RejectedError:()=>rs,Replied:()=>Hg,Reply:()=>Gg,Request:()=>Vg,Service:()=>tr,Tool:()=>Wg,node:()=>Kg});var Ot={};fe(Ot,{Answer:()=>ic,Event:()=>Fg,ID:()=>Si,Info:()=>sp,Option:()=>op,Prompt:()=>jg,QuestionV1:()=>Ot,Rejected:()=>lp,Replied:()=>cp,Reply:()=>Ug,Request:()=>ap,Tool:()=>ip});var Si=c.String.check(c.isStartsWith("que")).pipe(c.brand("QuestionID"),Gd(e=>({ascending:s(t=>e.make(t??"que_"+Hd()),"ascending")}))),op=c.Struct({label:c.String.annotate({description:"Display text (1-5 words, concise)"}),description:c.String.annotate({description:"Explanation of choice"})}).annotate({identifier:"QuestionOption"}),rp={question:c.String.annotate({description:"Complete question"}),header:c.String.annotate({description:"Very short label (max 30 chars)"}),options:c.Array(op).annotate({description:"Available choices"}),multiple:c.optional(c.Boolean).annotate({description:"Allow selecting multiple choices"})},sp=c.Struct({...rp,custom:c.optional(c.Boolean).annotate({description:"Allow typing a custom answer (default: true)"})}).annotate({identifier:"QuestionInfo"}),jg=c.Struct(rp).annotate({identifier:"QuestionPrompt"}),ip=c.Struct({messageID:pu.MessageID,callID:c.String}).annotate({identifier:"QuestionTool"}),ap=c.Struct({id:Si,sessionID:Cn,questions:c.Array(sp).annotate({description:"Questions to ask"}),tool:c.optional(ip)}).annotate({identifier:"QuestionRequest"}),ic=c.Array(c.String).annotate({identifier:"QuestionAnswer"}),Ug=c.Struct({answers:c.Array(ic).annotate({description:"User answers in order of questions (each answer is an array of selected labels)"})}).annotate({identifier:"QuestionReply"}),cp=c.Struct({sessionID:Cn,requestID:Si,answers:c.Array(ic)}).annotate({identifier:"QuestionReplied"}),lp=c.Struct({sessionID:Cn,requestID:Si}).annotate({identifier:"QuestionRejected"}),ep=Qs({type:"question.asked",schema:ap.fields}),tp=Qs({type:"question.replied",schema:cp.fields}),np=Qs({type:"question.rejected",schema:lp.fields}),Fg={Asked:ep,Replied:tp,Rejected:np,Definitions:Yd(ep,tp,np)};var ac=Ot.ID;var Bg=Ot.Option,$g=Ot.Info,qg=Ot.Prompt,Wg=Ot.Tool,Vg=Ot.Request,zg=Ot.Answer,Gg=Ot.Reply,Hg=Ot.Replied,Yg=Ot.Rejected,Ii=Ot.Event,rs=class extends c.TaggedErrorClass()("QuestionRejectedError",{}){static{s(this,"RejectedError")}get message(){return"The user dismissed this question"}},ss=class extends c.TaggedErrorClass()("Question.NotFoundError",{requestID:ac}){static{s(this,"NotFoundError")}},tr=class extends Ce.Service()("@opencode/Question"){static{s(this,"Service")}},Jg=Pe.effect(tr,r.gen(function*(){let e=yield*Ee.Service,t=yield*V.make(r.fn("Question.state")(function*(){let l={pending:new Map};return yield*r.addFinalizer(()=>r.gen(function*(){for(let u of l.pending.values())yield*gt.fail(u.deferred,new rs);l.pending.clear()})),l})),n=r.fn("Question.ask")(function*(l){let u=(yield*V.get(t)).pending,f=ac.ascending();yield*r.logInfo("asking",{id:f,questions:l.questions.length});let m=yield*gt.make(),p={id:f,sessionID:l.sessionID,questions:l.questions,tool:l.tool};return u.set(f,{info:p,deferred:m}),yield*e.publish(Ii.Asked,p),yield*r.ensuring(gt.await(m),r.sync(()=>{u.delete(f)}))}),o=r.fn("Question.reply")(function*(l){let u=(yield*V.get(t)).pending,f=u.get(l.requestID);if(!f)return yield*r.logWarning("reply for unknown request",{requestID:l.requestID}),yield*new ss({requestID:l.requestID});u.delete(l.requestID),yield*r.logInfo("replied",{requestID:l.requestID,answers:l.answers}),yield*e.publish(Ii.Replied,{sessionID:f.info.sessionID,requestID:f.info.id,answers:l.answers.map(m=>[...m])}),yield*gt.succeed(f.deferred,l.answers)}),i=r.fn("Question.reject")(function*(l){let u=(yield*V.get(t)).pending,f=u.get(l);if(!f)return yield*r.logWarning("reject for unknown request",{requestID:l}),yield*new ss({requestID:l});u.delete(l),yield*r.logInfo("rejected",{requestID:l}),yield*e.publish(Ii.Rejected,{sessionID:f.info.sessionID,requestID:f.info.id}),yield*gt.fail(f.deferred,new rs)}),a=r.fn("Question.list")(function*(){let l=(yield*V.get(t)).pending;return Array.from(l.values(),u=>u.info)});return tr.of({ask:n,reply:o,reject:i,list:a})})),Kg=De.make({service:tr,layer:Jg,deps:[Ee.node]});var Zn={};fe(Zn,{Event:()=>dp,Info:()=>Xg,Service:()=>nr,Todo:()=>Zn,node:()=>Zg});var Xg=Ha.Info,dp=Ha.Event,nr=class extends Ce.Service()("@opencode/SessionTodo"){static{s(this,"Service")}},Qg=Pe.effect(nr,r.gen(function*(){let e=yield*Ee.Service,{db:t}=yield*tt.Service,n=r.fn("Todo.update")(function*(i){yield*t.transaction(a=>r.gen(function*(){yield*a.delete(yo).where(It(yo.session_id,i.sessionID)).run(),i.todos.length!==0&&(yield*a.insert(yo).values(i.todos.map((l,u)=>({session_id:i.sessionID,content:l.content,status:l.status,priority:l.priority,position:u}))).run())})).pipe(r.orDie),yield*e.publish(dp.Updated,i)}),o=r.fn("Todo.get")(function*(i){return(yield*t.select().from(yo).where(It(yo.session_id,i)).orderBy(Zs(yo.position)).all().pipe(r.orDie)).map(l=>({content:l.content,status:l.status,priority:l.priority}))});return nr.of({update:n,get:o})})),Zg=De.make({service:nr,layer:Qg,deps:[Ee.node,tt.node]});var ln={};fe(ln,{Event:()=>cc,Info:()=>ty,Service:()=>rr,SessionStatus:()=>ln,node:()=>oy});var or={};fe(or,{Definitions:()=>ey,Idle:()=>fp,Info:()=>up,SessionStatusEvent:()=>or,Status:()=>pp});var up=c.Union([c.Struct({type:c.Literal("idle")}),c.Struct({type:c.Literal("retry"),attempt:mn,message:c.String,action:hn(c.Struct({reason:c.String,provider:c.String,title:c.String,message:c.String,label:c.String,link:hn(c.String)})),next:mn}),c.Struct({type:c.Literal("busy")})]).annotate({identifier:"SessionStatus"}),pp=Tt.define({type:"session.status",schema:{sessionID:Cn,status:up}}),fp=Tt.define({type:"session.idle",schema:{sessionID:Cn}}),ey=Tt.inventory(pp,fp);var ty=or.Info,cc=or,rr=class extends Ce.Service()("@opencode/SessionStatus"){static{s(this,"Service")}},ny=Pe.effect(rr,r.gen(function*(){let e=yield*Ee.Service,t=yield*V.make(r.fn("SessionStatus.state")(()=>r.succeed(new Map))),n=r.fn("SessionStatus.get")(function*(a){return(yield*V.get(t)).get(a)??{type:"idle"}}),o=r.fn("SessionStatus.list")(function*(){return new Map(yield*V.get(t))}),i=r.fn("SessionStatus.set")(function*(a,l){let u=yield*V.get(t);if(yield*e.publish(cc.Status,{sessionID:a,status:l}),l.type==="idle"){yield*e.publish(cc.Idle,{sessionID:a}),u.delete(a);return}u.set(a,l)});return rr.of({get:n,list:o,set:i})})),oy=De.make({service:rr,layer:ny,deps:[Ee.node]});var Ln={};fe(Ln,{Service:()=>sr,SessionRunState:()=>Ln,node:()=>ay});var is={};fe(is,{Busy:()=>ki,Cancelled:()=>So,Runner:()=>is,make:()=>ry});var So=class extends c.TaggedErrorClass()("RunnerCancelled",{}){static{s(this,"Cancelled")}},ki=class extends c.TaggedErrorClass()("RunnerBusy",{}){static{s(this,"Busy")}},ry=s((e,t)=>{let n=Rn.makeUnsafe({_tag:"Idle"}),o=t?.onIdle??r.void,i=t?.onBusy??r.void,a=t?.onInterrupt,l=0,u=s(()=>Rn.getUnsafe(n),"state"),f=s(()=>(l+=1,l),"next"),m=s((y,S)=>wt.isFailure(S)&&ot.hasInterruptsOnly(S.cause)?gt.fail(y,new So).pipe(r.asVoid):gt.done(y,S).pipe(r.asVoid),"complete"),p=s(y=>gt.await(y).pipe(r.catchTag("RunnerCancelled",S=>a??r.die(S))),"awaitDone"),h=s(()=>Rn.modify(n,y=>[y._tag==="Idle"?o:r.void,y]).pipe(r.flatten),"idleIfCurrent"),g=s((y,S,E)=>Rn.modify(n,w=>[r.gen(function*(){w._tag==="Running"&&w.run.id===y&&(yield*o),yield*m(S,E)}),w._tag==="Running"&&w.run.id===y?{_tag:"Idle"}:w]).pipe(r.flatten),"finishRun"),I=s((y,S)=>r.gen(function*(){let E=f(),w=yield*y.pipe(r.onExit(M=>g(E,S,M)),r.forkIn(e));return{id:E,done:S,fiber:w}}),"startRun"),T=s(y=>Rn.modifyEffect(n,r.fnUntraced(function*(S){if(S._tag==="Shell"&&S.shell.id===y)return[o,{_tag:"Idle"}];if(S._tag==="ShellThenRun"&&S.shell.id===y){let E=yield*I(S.run.work,S.run.done);return[r.void,{_tag:"Running",run:E}]}return[r.void,S]})).pipe(r.flatten),"finishShell"),v=s(y=>r.gen(function*(){y.ready&&(yield*y.ready.await.pipe(r.exit,r.asVoid)),yield*gt.succeed(y.cancelled,void 0).pipe(r.asVoid),yield*Vs.interrupt(y.fiber)}),"stopShell"),P=s(y=>Rn.modifyEffect(n,r.fnUntraced(function*(S){switch(S._tag){case"Running":case"ShellThenRun":return[p(S.run.done),S];case"Shell":{let E={id:f(),done:yield*gt.make(),work:y};return[p(E.done),{_tag:"ShellThenRun",shell:S.shell,run:E}]}case"Idle":{let E=yield*gt.make(),w=yield*I(y,E);return[p(E),{_tag:"Running",run:w}]}}})).pipe(r.flatten),"ensureRunning"),d=s((y,S)=>Rn.modifyEffect(n,r.fnUntraced(function*(E){if(E._tag!=="Idle")return[r.fail(new ki),E];yield*i;let w=f(),M=yield*gt.make(),C=yield*y.pipe(r.ensuring(T(w)),r.forkChild),$={id:w,cancelled:M,ready:S,fiber:C};return[r.gen(function*(){let U=yield*Vs.await(C);return wt.isSuccess(U)?U.value:ot.hasInterruptsOnly(U.cause)||(yield*gt.isDone(M))&&ot.hasInterrupts(U.cause)&&!ot.hasDies(U.cause)?a?yield*a:yield*r.die(new So):yield*r.failCause(U.cause)}),{_tag:"Shell",shell:$}]})).pipe(r.flatten),"startShell"),k=Rn.modify(n,y=>{switch(y._tag){case"Idle":return[r.void,y];case"Running":return[r.gen(function*(){yield*Vs.interrupt(y.run.fiber),yield*gt.fail(y.run.done,new So).pipe(r.asVoid),yield*h()}),{_tag:"Idle"}];case"Shell":return[r.gen(function*(){yield*v(y.shell),yield*h()}),{_tag:"Idle"}];case"ShellThenRun":return[r.gen(function*(){yield*v(y.shell),yield*gt.fail(y.run.done,new So).pipe(r.asVoid),yield*h()}),{_tag:"Idle"}]}}).pipe(r.flatten);return{get state(){return u()},get busy(){return u()._tag!=="Idle"},ensureRunning:P,startShell:d,cancel:k}},"make");var sr=class extends Ce.Service()("@opencode/SessionRunState"){static{s(this,"Service")}},sy=Pe.effect(sr,r.gen(function*(){let e=yield*wo.Service,t=yield*ln.Service,n=yield*V.make(r.fn("SessionRunState.state")(function*(){let m=yield*Et.Scope,p=new Map;return yield*r.addFinalizer(r.fnUntraced(function*(){p.size>0&&(yield*r.logWarning("instance closing: its running turns are cancelled",{sessions:[...p.keys()].join(",")})),yield*r.forEach(p.values(),h=>h.cancel,{concurrency:"unbounded",discard:!0}),p.clear()})),{runners:p,scope:m}})),o=r.fn("SessionRunState.runner")(function*(m,p){let h=yield*V.get(n),g=h.runners.get(m);if(g)return g;let I=is.make(h.scope,{onIdle:r.gen(function*(){h.runners.delete(m),yield*t.set(m,{type:"idle"})}),onBusy:t.set(m,{type:"busy"}),onInterrupt:p});return h.runners.set(m,I),I}),i=r.fn("SessionRunState.assertNotBusy")(function*(m){(yield*V.get(n)).runners.get(m)?.busy&&(yield*mp(m))}),a=r.fn("SessionRunState.cancel")(function*(m){yield*r.logWarning("session cancel requested",{sessionID:m}),yield*iy(e,m);let h=(yield*V.get(n)).runners.get(m);if(!h){yield*t.set(m,{type:"idle"});return}yield*h.cancel}),l=r.fn("SessionRunState.busy")(function*(){return[...(yield*V.get(n)).runners.entries()].filter(([,p])=>p.busy).map(([p])=>p)}),u=r.fn("SessionRunState.ensureRunning")(function*(m,p,h){return yield*(yield*o(m,p)).ensureRunning(h)}),f=r.fn("SessionRunState.startShell")(function*(m,p,h,g){return yield*(yield*o(m,p)).startShell(h,g).pipe(r.catchTag("RunnerBusy",()=>r.fail(mp(m))))});return sr.of({assertNotBusy:i,cancel:a,busy:l,ensureRunning:u,startShell:f})})),iy=r.fn("SessionRunState.cancelBackgroundJobs")(function*(e,t){let n=yield*e.list(),o=new Set([t]),i=new Set,a=s(u=>u.status!=="running"||i.has(u.id)?!1:o.has(u.id)||typeof u.metadata?.sessionId=="string"&&o.has(u.metadata.sessionId)?!0:typeof u.metadata?.parentSessionId=="string"&&o.has(u.metadata.parentSessionId),"matches"),l=n.filter(a);for(;l.length>0;)yield*r.forEach(l,u=>e.cancel(u.id).pipe(r.tap(()=>r.sync(()=>{i.add(u.id),o.add(u.id),typeof u.metadata?.sessionId=="string"&&o.add(u.metadata.sessionId)}))),{concurrency:"unbounded",discard:!0}),l=n.filter(a)});function mp(e){return new me.BusyError({sessionID:e})}s(mp,"busyError");var ay=De.make({service:sr,layer:sy,deps:[wo.node,ln.node]});var dn={};fe(dn,{LLM:()=>dn,OUTPUT_TOKEN_MAX:()=>tv,Service:()=>ko,hasToolCalls:()=>rv,node:()=>sv,use:()=>nv});var as={};fe(as,{Wildcard:()=>as,all:()=>cy,allStructured:()=>ly,match:()=>Di});function Di(e,t){e&&(e=e.replaceAll("\\","/")),t&&(t=t.replaceAll("\\","/"));let n=t.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");n.endsWith(" .*")&&(n=n.slice(0,-3)+"( .*)?");let o=process.platform==="win32"?"si":"s";return new RegExp("^"+n+"$",o).test(e)}s(Di,"match");function cy(e,t){let n=Ja(t,Object.entries,Ka([([i])=>i.length,"asc"],[([i])=>i,"asc"])),o;for(let[i,a]of n)if(Di(e,i)){o=a;continue}return o}s(cy,"all");function ly(e,t){let n=Ja(t,Object.entries,Ka([([i])=>i.length,"asc"],[([i])=>i,"asc"])),o;for(let[i,a]of n){let l=i.split(/\s+/);if(Di(e.head,l[0])&&(l.length===1||lc(e.tail,l.slice(1)))){o=a;continue}}return o}s(ly,"allStructured");function lc(e,t){if(t.length===0)return!0;let[n,...o]=t;if(n==="*")return lc(e,o);for(let i=0;i<e.length;i++)if(Di(e[i],n)&&lc(e.slice(i+1),o))return!0;return!1}s(lc,"matchSequence");var ir={};fe(ir,{LLMAISDK:()=>ir,adapterState:()=>yp,toLLMEvents:()=>uy});function yp(){return{step:0,text:0,reasoning:0,currentTextID:void 0,currentReasoningID:void 0,toolNames:{},copilotTotalNanoAiu:void 0}}s(yp,"adapterState");function hp(e){return c.is(Qd)(e)?e:"unknown"}s(hp,"finishReason");function Zt(e){if(e!=null)return c.is(Xd)(e)?e:void 0}s(Zt,"providerMetadata");function dy(e){if(!e||typeof e!="object")return;let t=e,n=t.response&&typeof t.response=="object"?t.response:void 0,o=t.copilot_usage??n?.copilot_usage;if(!o||typeof o!="object")return;let i=o.total_nano_aiu;if(!(typeof i!="number"||!Number.isFinite(i)||i<0))return i}s(dy,"copilotTotalNanoAiu");function gp(e){if(!e||typeof e!="object")return;let t=e,n=Object.entries({inputTokens:t.inputTokens,outputTokens:t.outputTokens,totalTokens:t.totalTokens,reasoningTokens:t.outputTokenDetails?.reasoningTokens??t.reasoningTokens,cacheReadInputTokens:t.inputTokenDetails?.cacheReadTokens??t.cachedInputTokens,cacheWriteInputTokens:t.inputTokenDetails?.cacheWriteTokens}).filter(o=>o[1]!==void 0);return n.length===0?void 0:Object.fromEntries(n)}s(gp,"usage");function dc(e,t){return e.currentTextID=t??e.currentTextID??`text-${e.text++}`,e.currentTextID}s(dc,"currentTextID");function uc(e,t){return e.currentReasoningID=t??e.currentReasoningID??`reasoning-${e.reasoning++}`,e.currentReasoningID}s(uc,"currentReasoningID");function uy(e,t){switch(t.type){case"start":return r.succeed([]);case"start-step":return r.succeed([st.stepStart({index:e.step})]);case"finish-step":return t.rawFinishReason==="network_error"?r.fail(new qu.ResponseStreamError("Provider finish_reason: network_error")):r.sync(()=>{let n=Zt(t.providerMetadata),o=e.copilotTotalNanoAiu===void 0?n:{...n,copilot:{...n?.copilot,totalNanoAiu:e.copilotTotalNanoAiu}};return e.copilotTotalNanoAiu=void 0,[st.stepFinish({index:e.step++,reason:hp(t.finishReason),usage:gp(t.usage),providerMetadata:o,...typeof t.response?.modelId=="string"?{responseModelID:t.response.modelId}:{}})]});case"finish":return r.sync(()=>{let n=[st.finish({reason:hp(t.finishReason),usage:gp(t.totalUsage),providerMetadata:"providerMetadata"in t?Zt(t.providerMetadata):void 0})];return Object.assign(e,yp()),n});case"text-start":return r.sync(()=>(e.currentTextID=dc(e,t.id),[st.textStart({id:e.currentTextID,providerMetadata:Zt(t.providerMetadata)})]));case"text-delta":return r.succeed([st.textDelta({id:dc(e,t.id),text:t.text,providerMetadata:Zt(t.providerMetadata)})]);case"text-end":return r.sync(()=>{let n=dc(e,t.id);return e.currentTextID=void 0,[st.textEnd({id:n,providerMetadata:Zt(t.providerMetadata)})]});case"reasoning-start":return r.sync(()=>(e.currentReasoningID=uc(e,t.id),[st.reasoningStart({id:e.currentReasoningID,providerMetadata:Zt(t.providerMetadata)})]));case"reasoning-delta":return r.succeed([st.reasoningDelta({id:uc(e,t.id),text:t.text,providerMetadata:Zt(t.providerMetadata)})]);case"reasoning-end":return r.sync(()=>{let n=uc(e,t.id);return e.currentReasoningID=void 0,[st.reasoningEnd({id:n,providerMetadata:Zt(t.providerMetadata)})]});case"tool-input-start":return r.sync(()=>(e.toolNames[t.id]=t.toolName,[st.toolInputStart({id:t.id,name:t.toolName,providerMetadata:Zt(t.providerMetadata)})]));case"tool-input-delta":return r.succeed([st.toolInputDelta({id:t.id,name:e.toolNames[t.id]??"unknown",text:t.delta??""})]);case"tool-input-end":return r.succeed([st.toolInputEnd({id:t.id,name:e.toolNames[t.id]??"unknown",providerMetadata:Zt(t.providerMetadata)})]);case"tool-call":return r.sync(()=>(e.toolNames[t.toolCallId]=t.toolName,[st.toolCall({id:t.toolCallId,name:t.toolName,input:t.input,providerExecuted:"providerExecuted"in t?t.providerExecuted:void 0,providerMetadata:Zt(t.providerMetadata)})]));case"tool-result":return r.sync(()=>{let n=e.toolNames[t.toolCallId]??"unknown";return delete e.toolNames[t.toolCallId],[st.toolResult({id:t.toolCallId,name:n,result:Zd.make(t.output),providerExecuted:"providerExecuted"in t?t.providerExecuted:void 0,providerMetadata:Zt(t.providerMetadata)})]});case"tool-error":return r.sync(()=>{let n=e.toolNames[t.toolCallId]??("toolName"in t?t.toolName:"unknown");return delete e.toolNames[t.toolCallId],[st.toolError({id:t.toolCallId,name:n,message:gn(t.error),error:t.error,providerMetadata:Zt(t.providerMetadata)})]});case"error":return r.fail(t.error);case"abort":case"source":case"file":case"tool-output-denied":case"tool-approval-request":return r.succeed([]);case"raw":return r.sync(()=>(e.copilotTotalNanoAiu=dy(t.rawValue)??e.copilotTotalNanoAiu,[]));default:{let n=t;return r.succeed([])}}}s(uy,"toLLMEvents");var hs={};fe(hs,{LLMNativeRuntime:()=>hs,nativeTools:()=>nf,status:()=>Vw,stream:()=>zw});var ms={};fe(ms,{LLMNative:()=>ms,model:()=>Zp,request:()=>Ww});var Ei={};fe(Ei,{configure:()=>pc,id:()=>bp,model:()=>hy,provider:()=>wp,routes:()=>py});var bp=dt.make("anthropic"),py=[Wa],fy=s(e=>"auth"in e&&e.auth?e.auth:yt.optional("apiKey"in e?e.apiKey:void 0,"apiKey").orElse(yt.config("ANTHROPIC_API_KEY")).pipe(yt.header("x-api-key")),"auth"),my=s(e=>{let{apiKey:t,auth:n,baseURL:o,...i}=e;return Wa.with({...i,endpoint:{baseURL:o},auth:fy(e)})},"configuredRoute"),pc=s((e={})=>{let t=my(e);return{id:bp,model:s(n=>t.model({id:n}),"model"),configure:pc}},"configure"),wp=pc(),hy=wp.model;var Pi={};fe(Pi,{configure:()=>gc,id:()=>hc,model:()=>mb,provider:()=>Pp,routes:()=>ub});var cs={};fe(cs,{BedrockEventStream:()=>cs,framing:()=>xy});var gy=new Pu(Cu,Ru),yy=new TextDecoder,by={buffer:new Uint8Array(0),offset:0},wy=s((e,t)=>{let n=e.buffer.length-e.offset,o=new Uint8Array(n+t.length);return o.set(e.buffer.subarray(e.offset),0),o.set(t,n),{buffer:o,offset:0}},"appendChunk"),vy=s(e=>(t,n)=>r.gen(function*(){let o=wy(t,n),i=[];for(;o.buffer.length-o.offset>=4;){let a=o.buffer.subarray(o.offset),l=new DataView(a.buffer,a.byteOffset,a.byteLength).getUint32(0,!1);if(a.length<l)break;let u=yield*r.try({try:s(()=>gy.decode(a.subarray(0,l)),"try"),catch:s(h=>Ae.eventError(e,`Failed to decode Bedrock Converse event-stream frame: ${h instanceof Error?h.message:String(h)}`),"catch")});if(o={buffer:o.buffer,offset:o.offset+l},u.headers[":message-type"]?.value!=="event")continue;let f=u.headers[":event-type"]?.value;if(typeof f!="string")continue;let m=yy.decode(u.body);if(!m)continue;let p=yield*Ae.parseJson(e,m,"Failed to parse Bedrock Converse event-stream payload");delete p.p,i.push({[f]:p})}return[o,i]}),"consumeFrames"),xy=s(e=>({id:"aws-event-stream",frame:s(t=>t.pipe(xt.mapAccumEffect(()=>by,vy(e))),"frame")}),"framing");var ar={};fe(ar,{BedrockAuth:()=>ar,auth:()=>Iy,sigV4:()=>vp});var Sy=s(e=>r.tryPromise({try:s(async()=>{let t=await new Tu({url:e.url,method:"POST",headers:Object.entries(e.headers),body:e.body,region:e.credentials.region,accessKeyId:e.credentials.accessKeyId,secretAccessKey:e.credentials.secretAccessKey,sessionToken:e.credentials.sessionToken,service:"bedrock"}).sign();return Object.fromEntries(t.headers.entries())},"try"),catch:s(t=>Ae.invalidRequest(`Bedrock Converse SigV4 signing failed: ${t instanceof Error?t.message:String(t)}`),"catch")}),"signRequest"),vp=s(e=>yt.custom(t=>r.gen(function*(){if(!e)return yield*Ae.invalidRequest("Bedrock Converse requires either route bearer auth or AWS credentials configured on the route");let n=ja.set(t.headers,"content-type","application/json"),o=yield*Sy({url:t.url,body:t.body,headers:n,credentials:e});return ja.setAll(n,o)})),"sigV4"),Iy=vp(void 0);var en={};fe(en,{BEDROCK_BREAKPOINT_CAP:()=>xp,BedrockCache:()=>en,CachePointBlock:()=>ky,block:()=>Py,breakpoints:()=>Dy});var ky=c.Struct({cachePoint:c.Struct({type:c.tag("default"),ttl:c.optional(c.Literals(["5m","1h"]))})}),xp=4,Dy=s(()=>wu(xp),"breakpoints"),Ey={cachePoint:{type:"default"}},Ty={cachePoint:{type:"default",ttl:"1h"}},Py=s((e,t)=>{if(!(t?.type!=="ephemeral"&&t?.type!=="persistent")){if(e.remaining<=0){e.dropped+=1;return}return e.remaining-=1,vu(t.ttlSeconds)==="1h"?Ty:Ey}},"block");var Nn={};fe(Nn,{BedrockMedia:()=>Nn,DocumentBlock:()=>Cy,DocumentFormat:()=>Dp,ImageBlock:()=>Ry,ImageFormat:()=>kp,lower:()=>My});var kp=c.Literals(["png","jpeg","gif","webp"]),Ry=c.Struct({image:c.Struct({format:kp,source:c.Struct({bytes:c.String})})}),Dp=c.Literals(["pdf","csv","doc","docx","xls","xlsx","html","txt","md"]),Cy=c.Struct({document:c.Struct({format:Dp,name:c.String,source:c.Struct({bytes:c.String})})}),Sp={"image/png":"png","image/jpeg":"jpeg","image/jpg":"jpeg","image/gif":"gif","image/webp":"webp"},Ip={"application/pdf":"pdf","text/csv":"csv","application/msword":"doc","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"docx","application/vnd.ms-excel":"xls","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"xlsx","text/html":"html","text/plain":"txt","text/markdown":"md"},Ay=s((e,t,n)=>({document:{format:t,name:e.filename??`document.${t}`,source:{bytes:n}}}),"documentBlock"),My=r.fn("BedrockMedia.lower")(function*(e){let t=e.mediaType.toLowerCase(),n=Sp[t];if(n){let i=yield*Ae.validateMedia("Bedrock Converse",e,new Set(Object.keys(Sp)));return{image:{format:n,source:{bytes:i.base64}}}}if(t.startsWith("image/"))return yield*Ae.invalidRequest(`Bedrock Converse does not support image media type ${e.mediaType}`);let o=Ip[t];if(o){let i=yield*Ae.validateMedia("Bedrock Converse",e,new Set(Object.keys(Ip)));return Ay(e,o,i.base64)}return yield*Ae.invalidRequest(`Bedrock Converse does not support media type ${e.mediaType}`)});var ls="bedrock-converse",fc=c.Struct({text:c.String}),_y=c.Struct({toolUse:c.Struct({toolUseId:c.String,name:c.String,input:c.Unknown})}),Oy=c.Union([c.Struct({text:c.String}),c.Struct({json:c.Unknown}),Nn.ImageBlock]),Ly=c.Struct({toolResult:c.Struct({toolUseId:c.String,content:c.Array(Oy),status:c.optional(c.Literals(["success","error"]))})}),Ny=c.Struct({reasoningContent:c.Struct({reasoningText:c.optional(c.Struct({text:c.String,signature:c.optional(c.String)}))})}),jy=c.Union([fc,Nn.ImageBlock,Nn.DocumentBlock,Ly,en.CachePointBlock]),Uy=c.Union([fc,Ny,_y,en.CachePointBlock]),Fy=c.Union([c.Struct({role:c.Literal("user"),content:c.Array(jy)}),c.Struct({role:c.Literal("assistant"),content:c.Array(Uy)})]).pipe(c.toTaggedUnion("role")),By=c.Union([fc,en.CachePointBlock]),$y=c.Struct({toolSpec:c.Struct({name:c.String,description:c.String,inputSchema:c.Struct({json:es})})}),qy=c.Union([$y,en.CachePointBlock]),Wy=c.Union([c.Struct({auto:c.Struct({})}),c.Struct({any:c.Struct({})}),c.Struct({tool:c.Struct({name:c.String})})]),Vy={modelId:c.String,messages:c.Array(Fy),system:Gn(By),inferenceConfig:c.optional(c.Struct({maxTokens:c.optional(c.Number),temperature:c.optional(c.Number),topP:c.optional(c.Number),stopSequences:Gn(c.String)})),toolConfig:c.optional(c.Struct({tools:c.Array(qy),toolChoice:c.optional(Wy)})),additionalModelRequestFields:c.optional(es)},zy=c.Struct(Vy),Gy=c.Struct({inputTokens:c.optional(c.Number),outputTokens:c.optional(c.Number),totalTokens:c.optional(c.Number),cacheReadInputTokens:c.optional(c.Number),cacheWriteInputTokens:c.optional(c.Number)}),Hy=c.Struct({messageStart:c.optional(c.Struct({role:c.String})),contentBlockStart:c.optional(c.Struct({contentBlockIndex:c.Number,start:c.optional(c.Struct({toolUse:c.optional(c.Struct({toolUseId:c.String,name:c.String}))}))})),contentBlockDelta:c.optional(c.Struct({contentBlockIndex:c.Number,delta:c.optional(c.Struct({text:c.optional(c.String),toolUse:c.optional(c.Struct({input:c.String})),reasoningContent:c.optional(c.Struct({text:c.optional(c.String),signature:c.optional(c.String)}))}))})),contentBlockStop:c.optional(c.Struct({contentBlockIndex:c.Number})),messageStop:c.optional(c.Struct({stopReason:c.String,additionalModelResponseFields:c.optional(c.Unknown)})),metadata:c.optional(c.Struct({usage:c.optional(Gy),metrics:c.optional(c.Unknown)})),internalServerException:c.optional(c.Struct({message:c.String})),modelStreamErrorException:c.optional(c.Struct({message:c.String})),validationException:c.optional(c.Struct({message:c.String})),throttlingException:c.optional(c.Struct({message:c.String})),serviceUnavailableException:c.optional(c.Struct({message:c.String}))}),Yy=s((e,t)=>({toolSpec:{name:e.name,description:e.description,inputSchema:{json:t}}}),"lowerToolSpec"),Jy=s((e,t,n)=>{let o=[];for(let i of n){o.push(Yy(i,si.modelCompatibility(i.inputSchema,e)));let a=en.block(t,i.cache);a&&o.push(a)}return o},"lowerTools"),Ti=s((e,t,n)=>{let o=en.block(e,n);return o?[{text:t},o]:[{text:t}]},"textWithCache"),Ky=s(e=>Ae.matchToolChoice("Bedrock Converse",e,{auto:s(()=>({auto:{}}),"auto"),none:s(()=>{},"none"),required:s(()=>({any:{}}),"required"),tool:s(t=>({tool:{name:t}}),"tool")}),"lowerToolChoice"),Xy=s(e=>({bedrock:e}),"bedrockMetadata"),Qy=s(e=>{let t=e.providerMetadata?.bedrock;return e.encrypted??(Ae.isRecord(t)&&typeof t.signature=="string"?t.signature:void 0)},"reasoningSignature"),Zy=s(e=>({toolUse:{toolUseId:e.id,name:e.name,input:e.input}}),"lowerToolCall"),eb=r.fn("BedrockConverse.lowerToolResultContent")(function*(e){if(e.result.type==="text"||e.result.type==="error")return[{text:Ae.toolResultText(e)}];if(e.result.type==="json")return[{json:e.result.value}];let t=[];for(let n of e.result.value){if(n.type==="text"){t.push({text:n.text});continue}let o=yield*Nn.lower({type:"media",mediaType:n.mime,data:n.uri,filename:n.name});if(!("image"in o))return yield*Ae.invalidRequest("Bedrock Converse only supports image media in tool results");t.push(o)}return t}),tb=r.fn("BedrockConverse.lowerToolResult")(function*(e){return{toolResult:{toolUseId:e.id,content:yield*eb(e),status:e.result.type==="error"?"error":"success"}}}),nb=r.fn("BedrockConverse.lowerMessages")(function*(e,t){let n=[];for(let o of e.messages){if(o.role==="system"){let a=yield*Ae.wrappedSystemUpdate("Bedrock Converse",o),l=Ti(t,a.text,a.cache),u=n.at(-1);u?.role==="user"?n[n.length-1]={role:"user",content:[...u.content,...l]}:n.push({role:"user",content:l});continue}if(o.role==="user"){let a=[];for(let l of o.content){if(!Ae.supportsContent(l,["text","media"]))return yield*Ae.unsupportedContent("Bedrock Converse","user",["text","media"]);if(l.type==="text"){a.push(...Ti(t,l.text,l.cache));continue}if(l.type==="media"){a.push(yield*Nn.lower(l));continue}}n.push({role:"user",content:a});continue}if(o.role==="assistant"){let a=[];for(let l of o.content){if(!Ae.supportsContent(l,["text","reasoning","tool-call"]))return yield*Ae.unsupportedContent("Bedrock Converse","assistant",["text","reasoning","tool-call"]);if(l.type==="text"){a.push(...Ti(t,l.text,l.cache));continue}if(l.type==="reasoning"){a.push({reasoningContent:{reasoningText:{text:l.text,signature:Qy(l)}}});continue}if(l.type==="tool-call"){a.push(Zy(l));continue}}n.push({role:"assistant",content:a});continue}let i=[];for(let a of o.content){if(!Ae.supportsContent(a,["tool-result"]))return yield*Ae.unsupportedContent("Bedrock Converse","tool",["tool-result"]);i.push(yield*tb(a));let l=en.block(t,a.cache);l&&i.push(l)}n.push({role:"user",content:i})}return n}),ob=s((e,t)=>t.flatMap(n=>Ti(e,n.text,n.cache)),"lowerSystem"),rb=r.fn("BedrockConverse.fromRequest")(function*(e){let t=e.toolChoice?yield*Ky(e.toolChoice):void 0,n=e.generation,o=en.breakpoints(),i=e.tools.length>0&&e.toolChoice?.type!=="none"?{tools:Jy(e.model.compatibility?.toolSchema,o,e.tools),toolChoice:t}:void 0,a=e.system.length===0?void 0:ob(o,e.system),l=yield*nb(e,o);return o.dropped>0&&(yield*r.logWarning(`Bedrock Converse: dropped ${o.dropped} cache breakpoint(s); the API allows at most ${en.BEDROCK_BREAKPOINT_CAP} per request.`)),{modelId:e.model.id,messages:l,system:a,inferenceConfig:n?.maxTokens===void 0&&n?.temperature===void 0&&n?.topP===void 0&&(n?.stop===void 0||n.stop.length===0)?void 0:{maxTokens:n?.maxTokens,temperature:n?.temperature,topP:n?.topP,stopSequences:n?.stop},toolConfig:i,additionalModelRequestFields:n?.topK===void 0?void 0:{top_k:n.topK}}}),sb=s(e=>e==="end_turn"||e==="stop_sequence"?"stop":e==="max_tokens"?"length":e==="tool_use"?"tool-calls":e==="content_filtered"||e==="guardrail_intervened"?"content-filter":"unknown","mapFinishReason"),ib=s(e=>{if(!e)return;let t=(e.cacheReadInputTokens??0)+(e.cacheWriteInputTokens??0),n=Ae.subtractTokens(e.inputTokens,t);return new Mn({inputTokens:e.inputTokens,outputTokens:e.outputTokens,nonCachedInputTokens:n,cacheReadInputTokens:e.cacheReadInputTokens,cacheWriteInputTokens:e.cacheWriteInputTokens,totalTokens:Ae.totalTokens(e.inputTokens,e.outputTokens,e.totalTokens),providerMetadata:{bedrock:e}})},"mapUsage"),ab=s((e,t)=>r.gen(function*(){if(t.contentBlockStart?.start?.toolUse){let n=t.contentBlockStart.contentBlockIndex,o=[],i=St.stepStart(e.lifecycle,o);return[{...e,lifecycle:i,tools:Xo.start(e.tools,n,{id:t.contentBlockStart.start.toolUse.toolUseId,name:t.contentBlockStart.start.toolUse.name})},[...o,st.toolInputStart({id:t.contentBlockStart.start.toolUse.toolUseId,name:t.contentBlockStart.start.toolUse.name})]]}if(t.contentBlockDelta?.delta?.text){let n=[];return[{...e,lifecycle:St.textDelta(e.lifecycle,n,`text-${t.contentBlockDelta.contentBlockIndex}`,t.contentBlockDelta.delta.text)},n]}if(t.contentBlockDelta?.delta?.reasoningContent){let n=t.contentBlockDelta.contentBlockIndex,o=t.contentBlockDelta.delta.reasoningContent,i=[];return[{...e,lifecycle:o.text?St.reasoningDelta(e.lifecycle,i,`reasoning-${n}`,o.text):e.lifecycle,reasoningSignatures:o.signature?{...e.reasoningSignatures,[n]:o.signature}:e.reasoningSignatures},i]}if(t.contentBlockDelta?.delta?.toolUse){let n=t.contentBlockDelta.contentBlockIndex,o=Xo.appendExisting(ls,e.tools,n,t.contentBlockDelta.delta.toolUse.input,"Bedrock Converse tool delta is missing its tool call");if(Xo.isError(o))return yield*o;let i=[],a=o.events.length?St.stepStart(e.lifecycle,i):e.lifecycle;return i.push(...o.events),[{...e,lifecycle:a,tools:o.tools},i]}if(t.contentBlockStop){let n=t.contentBlockStop.contentBlockIndex,o=yield*Xo.finish(ls,e.tools,n),i=[],a=o.events??[],l=a.length?St.stepStart(e.lifecycle,i):St.reasoningEnd(St.textEnd(e.lifecycle,i,`text-${n}`),i,`reasoning-${n}`,e.reasoningSignatures[n]?Xy({signature:e.reasoningSignatures[n]}):void 0);return i.push(...a),[{...e,hasToolCalls:a.some(st.is.toolCall)?!0:e.hasToolCalls,lifecycle:l,tools:o.tools,reasoningSignatures:Object.fromEntries(Object.entries(e.reasoningSignatures).filter(([u])=>u!==String(n)))},i]}if(t.messageStop)return[{...e,pendingFinish:{reason:sb(t.messageStop.stopReason),usage:e.pendingFinish?.usage}},[]];if(t.metadata){let n=ib(t.metadata.usage);return[{...e,pendingFinish:{reason:e.pendingFinish?.reason??"stop",usage:n}},[]]}if(t.internalServerException||t.modelStreamErrorException||t.serviceUnavailableException){let n=t.internalServerException?.message??t.modelStreamErrorException?.message??t.serviceUnavailableException?.message??"Bedrock Converse stream error";return[e,[st.providerError({message:n,retryable:!0})]]}if(t.validationException||t.throttlingException){let n=t.validationException?.message??t.throttlingException?.message??"Bedrock Converse error";return[e,[st.providerError({message:n,classification:t.validationException&&iu(n)?"context-overflow":void 0,retryable:t.throttlingException!==void 0})]]}return[e,[]]}),"step"),cb=cs.framing(ls),lb=s(e=>e.pendingFinish?(()=>{let t=[];return St.finish(e.lifecycle,t,{reason:e.pendingFinish.reason==="stop"&&e.hasToolCalls?"tool-calls":e.pendingFinish.reason,usage:e.pendingFinish.usage}),t})():[],"onHalt"),db=mo.make({id:ls,body:{schema:zy,from:rb},stream:{event:Hy,initial:s(()=>({tools:Xo.empty(),pendingFinish:void 0,hasToolCalls:!1,lifecycle:St.initial(),reasoningSignatures:{}}),"initial"),step:ab,onHalt:lb}}),mc=Jo.make({id:ls,provider:"bedrock",protocol:db,endpoint:Yo.path(({body:e})=>`/model/${encodeURIComponent(e.modelId)}/converse-stream`),auth:ar.auth,framing:cb}),Ep=ar.sigV4;var hc=dt.make("amazon-bedrock"),ub=[mc],pb=s(e=>`https://bedrock-runtime.${e}.amazonaws.com`,"bedrockBaseURL"),fb=s(e=>{let{apiKey:t,credentials:n,region:o,baseURL:i,...a}=e,l=o??n?.region??"us-east-1";return mc.with({...a,provider:hc,endpoint:{baseURL:i??pb(l)},auth:t===void 0?Ep(n):yt.bearer(t)})},"configuredRoute"),gc=s((e={})=>{let t=fb(e);return{id:hc,model:s(n=>t.model({id:n}),"model"),configure:gc}},"configure"),Pp=gc(),mb=Pp.model;var Ri={};fe(Ri,{configure:()=>wc,id:()=>ds,provider:()=>Ib,routes:()=>vb});var hb=s(e=>Object.entries(e).filter(t=>t[1]!==void 0),"definedEntries"),Rp=s(e=>{let t=Object.fromEntries(hb({store:e?.store,promptCacheKey:e?.promptCacheKey,reasoningEffort:e?.reasoningEffort,reasoningSummary:e?.reasoningSummary,include:e?.include,textVerbosity:e?.textVerbosity,serviceTier:e?.serviceTier}));if(Object.keys(t).length!==0)return{openai:t}},"openAIProviderOptions"),gb=s((e,t={})=>{let n=e.toLowerCase();if(!(!n.includes("gpt-5")||n.includes("gpt-5-chat")||n.includes("gpt-5-pro")))return Rp({reasoningEffort:"medium",reasoningSummary:"auto",include:["reasoning.encrypted_content"],textVerbosity:t.textVerbosity===!0&&n.includes("gpt-5.")&&!n.includes("codex")&&!n.includes("-chat")?"low":void 0})},"gpt5DefaultOptions"),yb=s((e,t={})=>Ba(Rp({store:!1}),gb(e,t)),"openAIDefaultOptions"),eo=s((e,t,n={})=>({...t,providerOptions:Ba(yb(e,n),t.providerOptions)}),"withOpenAIOptions");var ds=dt.make("azure"),Ap=yt.remove("authorization"),wb=s(e=>`https://${e.trim()}.openai.azure.com/openai/v1`,"resourceBaseURL"),Mp=On.with({id:"azure-openai-responses",provider:ds,auth:Ap,endpoint:{query:{"api-version":"v1"}}}),_p=bo.with({id:"azure-openai-chat",provider:ds,auth:Ap,endpoint:{query:{"api-version":"v1"}}}),vb=[Mp,_p],xb=s(e=>{let{apiKey:t,apiVersion:n,resourceName:o,useCompletionUrls:i,baseURL:a,queryParams:l,...u}=e;if("auth"in u){let{auth:f,...m}=u;return m}return u},"defaults"),Sb=s(e=>"auth"in e&&e.auth?e.auth:yt.remove("authorization").andThen(yt.optional("apiKey"in e?e.apiKey:void 0,"apiKey").orElse(yt.config("AZURE_OPENAI_API_KEY")).pipe(yt.header("api-key"))),"auth"),Cp=s((e,t)=>e.with({auth:Sb(t),endpoint:{baseURL:t.baseURL??wb(t.resourceName),query:{...t.apiVersion?{"api-version":t.apiVersion}:{},...t.queryParams}}}),"configuredRoute"),wc=s(e=>{let t=Cp(Mp,e),n=Cp(_p,e),o=xb(e),i=s(l=>t.with(eo(l,o)).model({id:l}),"responses"),a=s(l=>n.with(eo(l,o)).model({id:l}),"chat");return{id:ds,model:s(l=>e.useCompletionUrls===!0?a(l):i(l),"model"),responses:i,chat:a,configure:wc}},"configure"),Ib={id:ds,configure:wc};var kb=dt.make("cloudflare-ai-gateway"),Db=dt.make("cloudflare-workers-ai");var cR=Jn.with({id:"cloudflare-ai-gateway",provider:kb}),lR=Jn.with({id:"cloudflare-workers-ai",provider:Db});var Lp=dt.make("github-copilot");var mR=bo.with({provider:Lp}),hR=On.with({provider:Lp});var Ci={};fe(Ci,{configure:()=>xc,id:()=>$p,model:()=>aw,provider:()=>qp,routes:()=>rw});var Np="gemini",jp=new Set(Ae.MEDIA_MIMES),Pb="https://generativelanguage.googleapis.com/v1beta",Rb=c.Struct({text:c.String,thought:c.optional(c.Boolean),thoughtSignature:c.optional(c.String)}),Cb=c.Struct({inlineData:c.Struct({mimeType:c.String,data:c.String})}),Ab=c.Struct({functionCall:c.Struct({name:c.String,args:c.Unknown}),thoughtSignature:c.optional(c.String)}),Mb=c.Struct({functionResponse:c.Struct({name:c.String,response:c.Unknown})}),_b=c.Union([Rb,Cb,Ab,Mb]),Up=c.Struct({role:c.Literals(["user","model"]),parts:c.Array(_b)}),Ob=c.Struct({parts:c.Array(c.Struct({text:c.String}))}),Lb=c.Struct({name:c.String,description:c.String,parameters:c.optional(es)}),Nb=c.Struct({functionDeclarations:c.Array(Lb)}),jb=c.Struct({functionCallingConfig:c.Struct({mode:c.Literals(["AUTO","NONE","ANY"]),allowedFunctionNames:Gn(c.String)})}),Ub=c.Struct({thinkingBudget:c.optional(c.Number),includeThoughts:c.optional(c.Boolean)}),Fb=c.Struct({maxOutputTokens:c.optional(c.Number),temperature:c.optional(c.Number),topP:c.optional(c.Number),topK:c.optional(c.Number),stopSequences:Gn(c.String),thinkingConfig:c.optional(Ub)}),Bb={contents:c.Array(Up),systemInstruction:c.optional(Ob),tools:Gn(Nb),toolConfig:c.optional(jb),generationConfig:c.optional(Fb)},$b=c.Struct(Bb),qb=c.Struct({cachedContentTokenCount:c.optional(c.Number),thoughtsTokenCount:c.optional(c.Number),promptTokenCount:c.optional(c.Number),candidatesTokenCount:c.optional(c.Number),totalTokenCount:c.optional(c.Number)}),Wb=c.Struct({content:c.optional(Up),finishReason:c.optional(c.String)}),Vb=c.Struct({candidates:Gn(Wb),usageMetadata:c.optional(qb)}),zb=s((e,t)=>({name:e.name,description:e.description,parameters:xu.convert(t)}),"lowerTool"),Gb=s(e=>Ae.matchToolChoice("Gemini",e,{auto:s(()=>({functionCallingConfig:{mode:"AUTO"}}),"auto"),none:s(()=>({functionCallingConfig:{mode:"NONE"}}),"none"),required:s(()=>({functionCallingConfig:{mode:"ANY"}}),"required"),tool:s(t=>({functionCallingConfig:{mode:"ANY",allowedFunctionNames:[t]}}),"tool")}),"lowerToolConfig"),Hb=r.fn("Gemini.lowerUserPart")(function*(e){if(e.type==="text")return{text:e.text};let t=yield*Ae.validateMedia("Gemini",e,jp);return{inlineData:{mimeType:t.mime,data:t.base64}}}),us=s(e=>({google:e}),"googleMetadata"),Fp=s(e=>{let t=e?.google;return Ae.isRecord(t)&&typeof t.thoughtSignature=="string"?t.thoughtSignature:void 0},"thoughtSignature"),Yb=s(e=>({functionCall:{name:e.name,args:e.input},thoughtSignature:Fp(e.providerMetadata)}),"lowerToolCall"),Jb=r.fn("Gemini.lowerMessages")(function*(e){let t=[];for(let n of e.messages){if(n.role==="system"){let i=yield*Ae.wrappedSystemUpdate("Gemini",n),a=t.at(-1);a?.role==="user"?t[t.length-1]={role:"user",parts:[...a.parts,{text:i.text}]}:t.push({role:"user",parts:[{text:i.text}]});continue}if(n.role==="user"){let i=[];for(let a of n.content){if(!Ae.supportsContent(a,["text","media"]))return yield*Ae.unsupportedContent("Gemini","user",["text","media"]);i.push(yield*Hb(a))}t.push({role:"user",parts:i});continue}if(n.role==="assistant"){let i=[];for(let a of n.content){if(!Ae.supportsContent(a,["text","reasoning","tool-call"]))return yield*Ae.unsupportedContent("Gemini","assistant",["text","reasoning","tool-call"]);if(a.type==="text"){i.push({text:a.text});continue}if(a.type==="reasoning"){i.push({text:a.text,thought:!0,thoughtSignature:Fp(a.providerMetadata)});continue}if(a.type==="tool-call"){i.push(Yb(a));continue}}t.push({role:"model",parts:i});continue}let o=[];for(let i of n.content){if(!Ae.supportsContent(i,["tool-result"]))return yield*Ae.unsupportedContent("Gemini","tool",["tool-result"]);if(i.result.type!=="content"){o.push({functionResponse:{name:i.name,response:{name:i.name,content:Ae.toolResultText(i)}}});continue}let a=i.result.value,l=a.filter(u=>u.type==="text").map(u=>u.text);o.push({functionResponse:{name:i.name,response:{name:i.name,content:l.join(`
49
+ `)}}});for(let u of a){if(u.type==="text")continue;let f=yield*Ae.validateToolFile("Gemini",u,jp);o.push({inlineData:{mimeType:f.mime,data:f.base64}})}}t.push({role:"user",parts:o})}return t}),Kb=s(e=>e.providerOptions?.gemini,"geminiOptions"),Xb=s(e=>{let t=Kb(e)?.thinkingConfig;if(!Ae.isRecord(t))return;let n={thinkingBudget:typeof t.thinkingBudget=="number"?t.thinkingBudget:void 0,includeThoughts:typeof t.includeThoughts=="boolean"?t.includeThoughts:void 0};return Object.values(n).some(o=>o!==void 0)?n:void 0},"thinkingConfig"),Qb=r.fn("Gemini.fromRequest")(function*(e){let t=e.tools.length>0&&e.toolChoice?.type!=="none",n=e.generation,o=e.model.compatibility?.toolSchema,i={maxOutputTokens:n?.maxTokens,temperature:n?.temperature,topP:n?.topP,topK:n?.topK,stopSequences:n?.stop,thinkingConfig:Xb(e)};return{contents:yield*Jb(e),systemInstruction:e.system.length===0?void 0:{parts:[{text:Ae.joinText(e.system)}]},tools:t?[{functionDeclarations:e.tools.map(a=>zb(a,si.modelCompatibility(a.inputSchema,o)))}]:void 0,toolConfig:t&&e.toolChoice?yield*Gb(e.toolChoice):void 0,generationConfig:Object.values(i).some(a=>a!==void 0)?i:void 0}}),Zb=s(e=>{if(!e)return;let t=e.cachedContentTokenCount,n=Ae.subtractTokens(e.promptTokenCount,t),o=e.candidatesTokenCount!==void 0?e.candidatesTokenCount+(e.thoughtsTokenCount??0):void 0;return new Mn({inputTokens:e.promptTokenCount,outputTokens:o,nonCachedInputTokens:n,cacheReadInputTokens:t,reasoningTokens:e.thoughtsTokenCount,totalTokens:Ae.totalTokens(e.promptTokenCount,o,e.totalTokenCount),providerMetadata:{google:e}})},"mapUsage"),ew=s((e,t)=>e==="STOP"?t?"tool-calls":"stop":e==="MAX_TOKENS"?"length":e==="IMAGE_SAFETY"||e==="RECITATION"||e==="SAFETY"||e==="BLOCKLIST"||e==="PROHIBITED_CONTENT"||e==="SPII"?"content-filter":e==="MALFORMED_FUNCTION_CALL"?"error":"unknown","mapFinishReason"),tw=s(e=>e.finishReason||e.usage?(()=>{let t=[],n=e.reasoningSignature?St.reasoningEnd(e.lifecycle,t,"reasoning-0",us({thoughtSignature:e.reasoningSignature})):e.lifecycle;return St.finish(n,t,{reason:ew(e.finishReason,e.hasToolCalls),usage:e.usage}),t})():[],"finish"),nw=s((e,t)=>{let n={...e,usage:t.usageMetadata?Zb(t.usageMetadata)??e.usage:e.usage},o=t.candidates?.[0];if(!o?.content)return r.succeed([{...n,finishReason:o?.finishReason??n.finishReason},[]]);let i=[],a=n.hasToolCalls,l=n.lifecycle,u=n.nextToolCallId,f=n.reasoningSignature;for(let m of o.content.parts){if("thoughtSignature"in m&&m.thoughtSignature&&"thought"in m&&m.thought&&(f=m.thoughtSignature),"text"in m&&m.text.length>0){if(m.thought){l=St.reasoningDelta(l,i,"reasoning-0",m.text,m.thoughtSignature?us({thoughtSignature:m.thoughtSignature}):void 0);continue}l=St.reasoningEnd(l,i,"reasoning-0",f?us({thoughtSignature:f}):void 0),l=St.textDelta(l,i,"text-0",m.text);continue}if("functionCall"in m){let p=m.functionCall.args,h=`tool_${u++}`;l=St.reasoningEnd(l,i,"reasoning-0",f?us({thoughtSignature:f}):void 0),l=St.stepStart(l,i),i.push(st.toolCall({id:h,name:m.functionCall.name,input:p,providerMetadata:m.thoughtSignature?us({thoughtSignature:m.thoughtSignature}):void 0})),a=!0}}return r.succeed([{...n,hasToolCalls:a,lifecycle:l,nextToolCallId:u,reasoningSignature:f,finishReason:o.finishReason??n.finishReason},i])},"step"),ow=mo.make({id:Np,body:{schema:$b,from:Qb},stream:{event:mo.jsonEvent(Vb),initial:s(()=>({hasToolCalls:!1,nextToolCallId:0,lifecycle:St.initial()}),"initial"),step:nw,onHalt:tw}}),vc=Jo.make({id:Np,provider:"google",protocol:ow,endpoint:Yo.path(({request:e})=>`/models/${e.model.id}:streamGenerateContent?alt=sse`,{baseURL:Pb}),auth:yt.none,framing:ti.sse});var $p=dt.make("google"),rw=[vc],sw=s(e=>"auth"in e&&e.auth?e.auth:yt.optional("apiKey"in e?e.apiKey:void 0,"apiKey").orElse(yt.config("GOOGLE_GENERATIVE_AI_API_KEY")).pipe(yt.header("x-goog-api-key")),"auth"),iw=s(e=>{let{apiKey:t,auth:n,baseURL:o,...i}=e;return vc.with({...i,endpoint:{baseURL:o},auth:sw(e)})},"configuredRoute"),xc=s((e={})=>{let t=iw(e);return{id:$p,model:s(n=>t.model({id:n}),"model"),configure:xc}},"configure"),qp=xc(),aw=qp.model;var Ai={};fe(Ai,{chat:()=>mw,configure:()=>Ic,id:()=>Wp,model:()=>uw,provider:()=>ps,responses:()=>pw,responsesWebSocket:()=>fw,routes:()=>cw});var Wp=dt.make("openai"),cw=[On,za,bo],lw=s(e=>Sn.bearer(e,"OPENAI_API_KEY"),"auth"),dw=s(e=>{let{apiKey:t,auth:n,baseURL:o,queryParams:i,...a}=e;return a},"defaults"),Sc=s((e,t)=>e.with({auth:lw(t),endpoint:{baseURL:t.baseURL,query:t.queryParams}}),"configuredRoute"),Ic=s((e={})=>{let t=Sc(On,e),n=Sc(za,e),o=Sc(bo,e),i=dw(e),a=s(f=>t.with(eo(f,i,{textVerbosity:!0})).model({id:f}),"responses");return{id:Wp,model:a,responses:a,responsesWebSocket:s(f=>n.with(eo(f,i,{textVerbosity:!0})).model({id:f}),"responsesWebSocket"),chat:s(f=>o.with(eo(f,i)).model({id:f}),"chat"),configure:Ic}},"configure"),ps=Ic(),uw=ps.model,pw=ps.responses,fw=ps.responsesWebSocket,mw=ps.chat;var _i={};fe(_i,{baseten:()=>yw,cerebras:()=>bw,configure:()=>Mi,deepinfra:()=>ww,deepseek:()=>vw,fireworks:()=>xw,groq:()=>Sw,id:()=>zp,provider:()=>gw,routes:()=>hw,togetherai:()=>Iw});var Gt={baseten:{provider:"baseten",baseURL:"https://inference.baseten.co/v1"},cerebras:{provider:"cerebras",baseURL:"https://api.cerebras.ai/v1"},deepinfra:{provider:"deepinfra",baseURL:"https://api.deepinfra.com/v1/openai"},deepseek:{provider:"deepseek",baseURL:"https://api.deepseek.com/v1"},fireworks:{provider:"fireworks",baseURL:"https://api.fireworks.ai/inference/v1"},groq:{provider:"groq",baseURL:"https://api.groq.com/openai/v1"},openrouter:{provider:"openrouter",baseURL:"https://openrouter.ai/api/v1"},togetherai:{provider:"togetherai",baseURL:"https://api.together.xyz/v1"},xai:{provider:"xai",baseURL:"https://api.x.ai/v1"}},NR=Object.fromEntries(Object.values(Gt).map(e=>[e.provider,e]));var zp=dt.make("openai-compatible"),hw=[Jn],Mi=s(e=>{let t=e.provider??"openai-compatible",{provider:n,baseURL:o,apiKey:i,auth:a,...l}=e,u=Jn.with({...l,provider:t,endpoint:{baseURL:o},auth:Sn.bearer(e,[])});return{id:dt.make(t),model:s(f=>u.model({id:f,provider:dt.make(t)}),"model"),configure:Mi}},"configure"),Io=s(e=>{let t=s((n={})=>{let o=Mi({...n,baseURL:n.baseURL??e.baseURL,provider:e.provider});return{id:dt.make(e.provider),model:o.model,configure:t}},"configureProfile");return t()},"define"),gw={id:zp,configure:Mi},yw=Io(Gt.baseten),bw=Io(Gt.cerebras),ww=Io(Gt.deepinfra),vw=Io(Gt.deepseek),xw=Io(Gt.fireworks),Sw=Io(Gt.groq),Iw=Io(Gt.togetherai);var Oi={};fe(Oi,{configure:()=>Dc,id:()=>Gp,model:()=>Rw,profile:()=>fs,protocol:()=>Hp,provider:()=>Yp,route:()=>kc,routes:()=>Tw});var fs=Gt.openrouter,Gp=dt.make(fs.provider),kw="openrouter",Dw=c.StructWithRest(c.Struct(Su),[c.Record(c.String,c.Any)]),Hp=mo.make({id:"openrouter-chat",body:{schema:Dw,from:s(e=>Va.body.from(e).pipe(r.map(t=>({...t,...Ew(e.providerOptions?.openrouter)}))),"from")},stream:Va.stream}),Ew=s(e=>{let t=ei(e)?e:{};return{...t.usage===!0?{usage:{include:!0}}:ei(t.usage)?{usage:t.usage}:{},...ei(t.reasoning)?{reasoning:t.reasoning}:{},...typeof t.promptCacheKey=="string"?{prompt_cache_key:t.promptCacheKey}:{}}},"bodyOptions"),kc=Jo.make({id:kw,provider:fs.provider,protocol:Hp,endpoint:Yo.path("/chat/completions",{baseURL:fs.baseURL}),framing:ti.sse}),Tw=[kc],Pw=s(e=>{let{apiKey:t,auth:n,baseURL:o,...i}=e;return kc.with({...i,endpoint:{baseURL:o??fs.baseURL},auth:Sn.bearer(e,"OPENROUTER_API_KEY")})},"configuredRoute"),Dc=s((e={})=>{let t=Pw(e);return{id:Gp,model:s(n=>t.model({id:n}),"model"),configure:Dc}},"configure"),Yp=Dc(),Rw=Yp.model;var Ec=dt.make("xai");var Jp=s(e=>Sn.bearer(e,"XAI_API_KEY"),"auth"),Cw=s(e=>{let{apiKey:t,auth:n,baseURL:o,...i}=e;return On.with({...i,provider:Ec,endpoint:{baseURL:o??Gt.xai.baseURL},auth:Jp(e)})},"configuredResponsesRoute"),Aw=s(e=>{let{apiKey:t,auth:n,baseURL:o,...i}=e;return Jn.with({...i,provider:Ec,endpoint:{baseURL:o??Gt.xai.baseURL},auth:Jp(e)})},"configuredChatRoute"),Kp=s((e={})=>{let t=Cw(e),n=Aw(e),o=s(a=>t.model({id:a}),"responses");return{id:Ec,model:o,responses:o,chat:s(a=>n.model({id:a}),"chat"),configure:Kp}},"configure"),Tc=Kp(),QR=Tc.model,ZR=Tc.responses,eC=Tc.chat;var Xp=s(e=>{if(!pt(e))return;let t=Object.fromEntries(Object.entries(e).filter(n=>pt(n[1])));return Object.keys(t).length===0?void 0:t},"providerMetadata"),Li=s(e=>Xp(e.providerMetadata)??Xp(e.providerOptions),"partProviderMetadata"),_w=s(e=>({type:"text",text:typeof e.text=="string"?e.text:"",providerMetadata:Li(e)}),"textPart"),Ow=s(e=>{if(typeof e.data!="string"&&!(e.data instanceof Uint8Array))throw new Error("Native LLM request adapter only supports file parts with string or Uint8Array data");return{type:"media",mediaType:typeof e.mediaType=="string"?e.mediaType:"application/octet-stream",data:e.data,filename:typeof e.filename=="string"?e.filename:void 0}},"mediaPart"),Lw=s(e=>{let t=pt(e.output)?e.output:{type:"json",value:e.output},n=t.type==="text"?"text":t.type==="error-text"?"error":"json";return tu.make({id:typeof e.toolCallId=="string"?e.toolCallId:"",name:typeof e.toolName=="string"?e.toolName:"",result:"value"in t?t.value:t,resultType:n,providerExecuted:typeof e.providerExecuted=="boolean"?e.providerExecuted:void 0,providerMetadata:Li(e)})},"toolResult"),Nw=s(e=>{if(!pt(e))throw new Error("Native LLM request adapter only supports object content parts");if(e.type==="text")return _w(e);if(e.type==="file")return Ow(e);if(e.type==="reasoning")return{type:"reasoning",text:typeof e.text=="string"?e.text:"",providerMetadata:Li(e)};if(e.type==="tool-call")return eu.make({id:typeof e.toolCallId=="string"?e.toolCallId:"",name:typeof e.toolName=="string"?e.toolName:"",input:e.input,providerExecuted:typeof e.providerExecuted=="boolean"?e.providerExecuted:void 0,providerMetadata:Li(e)});if(e.type==="tool-result")return Lw(e);throw new Error(`Native LLM request adapter does not support ${String(e.type)} content parts`)},"contentPart"),jw=s(e=>typeof e=="string"?[{type:"text",text:e}]:e.map(Nw),"content"),Uw=s(e=>{let t=e.flatMap(o=>o.role==="system"?[$a.make(o.content)]:[]),n=e.flatMap(o=>o.role==="system"?[]:[nu.make({role:o.role,content:jw(o.content),native:pt(o.providerOptions)?{providerOptions:o.providerOptions}:void 0})]);return{system:t,messages:n}},"messages"),Fw=s(e=>pt(e)?pt(e.jsonSchema)?e.jsonSchema:e:{type:"object",properties:{}},"schema"),Bw=s(e=>Object.entries(e??{}).map(([t,n])=>ou.make({name:t,description:n.description??"",inputSchema:Fw(n.inputSchema)})),"tools"),$w=s(e=>{let t={temperature:e.temperature,topP:e.topP,topK:e.topK,maxTokens:e.maxOutputTokens};return Object.values(t).some(n=>n!==void 0)?t:void 0},"generation"),qw=s(e=>"model"in e?e.baseURL??(e.model.api.url||void 0):e.api.url||void 0,"baseURL"),Qp=s((e,t)=>{if(t)return t;throw new Error(`Native LLM request adapter requires a base URL for ${e.providerID}/${e.id}`)},"requireBaseURL"),Zp=s((e,t)=>{let n="model"in e?e.model:e,o=qw(e),i={..."model"in e&&e.apiKey?{apiKey:e.apiKey}:{},...o?{baseURL:o}:{},headers:Object.keys({...n.headers,...t}).length===0?void 0:{...n.headers,...t},limits:{context:n.limit.context,output:n.limit.output}};if(n.api.npm==="@ai-sdk/openai")return Ai.configure(i).responses(n.api.id);if(n.api.npm==="@ai-sdk/azure")return Ri.configure({...i,baseURL:Qp(n,o)}).responses(n.api.id);if(n.api.npm==="@ai-sdk/anthropic")return Ei.configure(i).model(n.api.id);if(n.api.npm==="@ai-sdk/google")return Ci.configure(i).model(n.api.id);if(n.api.npm==="@ai-sdk/amazon-bedrock")return Pi.configure(i).model(n.api.id);if(n.api.npm==="@ai-sdk/openai-compatible")return _i.configure({...i,provider:String(n.providerID),baseURL:Qp(n,o)}).model(n.api.id);if(n.api.npm==="@openrouter/ai-sdk-provider")return Oi.configure(i).model(n.api.id);throw new Error(`Native LLM request adapter does not support provider package ${n.api.npm}`)},"model"),Ww=s(e=>{let t=Uw(e.messages);return bu.request({model:Zp(e,e.headers),system:[...(e.system??[]).map($a.make),...t.system],messages:t.messages,tools:Bw(e.tools),toolChoice:e.toolChoice,generation:$w(e),providerOptions:e.providerOptions})},"request");function Vw(e){return ef(e,tf(e))}s(Vw,"status");function ef(e,t){let n=e.model.providerID;if(n!=="openai"&&n!=="anthropic"&&!n.startsWith("opencode"))return{type:"unsupported",reason:"provider is not openai, opencode, or anthropic"};let o=e.model.api.npm;if(o!=="@ai-sdk/openai"&&o!=="@ai-sdk/openai-compatible"&&o!=="@ai-sdk/anthropic")return{type:"unsupported",reason:"provider package is not OpenAI, OpenAI-compatible, or Anthropic"};if(e.auth?.type==="oauth"&&!(e.provider.id==="openai"&&t))return{type:"unsupported",reason:"OAuth auth requires a provider fetch override"};let i=typeof e.provider.options.apiKey=="string"?e.provider.options.apiKey:e.provider.key;return i?{type:"supported",apiKey:i,baseURL:typeof e.provider.options.baseURL=="string"?e.provider.options.baseURL:void 0}:{type:"unsupported",reason:"API key is not configured"}}s(ef,"statusWithFetch");function zw(e){let t=tf(e),n=ef(e,t);if(n.type==="unsupported")return n;let o=nf(e.tools,e),i=ms.request({model:e.model,apiKey:n.apiKey,baseURL:n.baseURL,messages:et.message(e.messages,e.model,e.providerOptions??{}),toolChoice:e.toolChoice,temperature:e.temperature,topP:e.topP,topK:e.topK,maxOutputTokens:e.maxOutputTokens,providerOptions:et.providerOptions(e.model,e.providerOptions??{}),headers:{...Gw(e.provider.options.headers),...e.headers}}),a=Gs(zs(r.gen(function*(){let l=yield*Ks.make(),u=yield*Yr.unbounded();return e.llmClient.stream(ru.update(i,{tools:[...i.tools,...hu(o)]})).pipe(Hs(m=>m.type!=="tool-call"||m.providerExecuted?La(m):La(m).pipe(Ys(Oa(yu.dispatch(o,m).pipe(r.flatMap(p=>Yr.offerAll(u,p.events)),r.catchCause(p=>Yr.failCause(u,p)),r.asVoid,Ks.run(l,{startImmediately:!0})))))),Ys(Oa(Ks.awaitEmpty(l).pipe(r.andThen(Yr.end(u)),r.asVoid)))).pipe(Ys(Md(u)))})));return{...n,stream:t?a.pipe(Bd(Vd.Fetch,t)):a}}s(zw,"stream");function tf(e){if(e.provider.id!=="openai"||e.auth?.type!=="oauth")return;let t=e.provider.options.fetch;if(typeof t=="function")return t}s(tf,"providerFetch");function Gw(e){if(pt(e))return Object.fromEntries(Object.entries(e).filter(t=>typeof t[1]=="string"))}s(Gw,"providerHeaders");function Hw(e){return!e||typeof e!="object"?{type:"object",properties:{}}:"jsonSchema"in e&&e.jsonSchema&&typeof e.jsonSchema=="object"?e.jsonSchema:fi(e).jsonSchema}s(Hw,"nativeSchema");function nf(e,t){return Object.fromEntries(Object.entries(e).map(([n,o])=>[n,gu.make({description:o.description??"",jsonSchema:Hw(o.inputSchema),execute:s((i,a)=>r.tryPromise({try:s(()=>{if(!o.execute)throw new Error(`Tool has no execute handler: ${n}`);return o.execute(i,{toolCallId:a?.id??n,messages:t.messages,abortSignal:t.abort})},"try"),catch:s(l=>new su({message:gn(l),error:l}),"catch")}),"execute")})]))}s(nf,"nativeTools");var lr={};fe(lr,{LLMRequestPrep:()=>lr,hasToolCalls:()=>gf,prepare:()=>Qw});var to={};fe(to,{Service:()=>cr,SystemPrompt:()=>to,node:()=>Xw,provider:()=>Yw});var of=`You are OpenCode, the best coding agent on the planet.
50
50
 
51
51
  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.
52
52
 
@@ -972,21 +972,21 @@ When referencing specific functions or pieces of code include the pattern \`file
972
972
  user: Where are errors from the client handled?
973
973
  assistant: Clients are marked as failed in the \`connectToServer\` function in src/services/process.ts:712.
974
974
  </example>
975
- `;function Hw(e){if(e.api.id.includes("muse")){let t=e.api.id.includes("muse-glimmer")?"Muse Glimmer":"Muse Spark";return[uf.replaceAll("{{MODEL_NAME}}",t)]}return e.api.id.includes("gpt-4")||e.api.id.includes("o1")||e.api.id.includes("o3")?[sf]:e.api.id.includes("gpt")?e.api.id.includes("gpt-6")?[lf]:e.api.id.includes("codex")?[pf]:[cf]:e.api.id.includes("gemini-")?[af]:e.api.id.includes("claude")?[of]:e.api.id.toLowerCase().includes("trinity")?[ff]:e.api.id.toLowerCase().includes("kimi")||["kimi-for-coding","moonshotai","moonshotai-cn"].includes(e.providerID)?[df]:[rf]}s(Hw,"provider");var cr=class extends Ce.Service()("@opencode/SystemPrompt"){static{s(this,"Service")}},Yw=Pe.effect(cr,r.gen(function*(){let e=yield*Xn.Service,t=yield*cn.Service,n=yield*Yn.Service;return cr.of({environment:r.fn("SystemPrompt.environment")(function*(o,i){let a=yield*V.context,l=yield*r.gen(function*(){return(yield*(yield*Iu.Service).list()).filter(u=>u.description!==void 0)}).pipe(r.provide(n.get(uu.Ref.make({directory:zd.make(a.directory)}))));return[[`You are powered by the model named ${o.api.id}. The exact model ID is ${o.providerID}/${o.api.id}`,"Here is some useful information about the environment you are running in:","<env>",` Working directory: ${a.directory}`,` Workspace root folder: ${a.worktree}`,` Is directory a git repo: ${a.project.vcs==="git"?"yes":"no"}`,` Platform: ${process.platform}`,` Today's date: ${new Date(i??Date.now()).toDateString()}`,"</env>"].join(`
975
+ `;function Yw(e){if(e.api.id.includes("muse")){let t=e.api.id.includes("muse-glimmer")?"Muse Glimmer":"Muse Spark";return[uf.replaceAll("{{MODEL_NAME}}",t)]}return e.api.id.includes("gpt-4")||e.api.id.includes("o1")||e.api.id.includes("o3")?[sf]:e.api.id.includes("gpt")?e.api.id.includes("gpt-6")?[lf]:e.api.id.includes("codex")?[pf]:[cf]:e.api.id.includes("gemini-")?[af]:e.api.id.includes("claude")?[of]:e.api.id.toLowerCase().includes("trinity")?[ff]:e.api.id.toLowerCase().includes("kimi")||["kimi-for-coding","moonshotai","moonshotai-cn"].includes(e.providerID)?[df]:[rf]}s(Yw,"provider");var cr=class extends Ce.Service()("@opencode/SystemPrompt"){static{s(this,"Service")}},Jw=Pe.effect(cr,r.gen(function*(){let e=yield*Xn.Service,t=yield*cn.Service,n=yield*Yn.Service;return cr.of({environment:r.fn("SystemPrompt.environment")(function*(o,i){let a=yield*V.context,l=yield*r.gen(function*(){return(yield*(yield*Iu.Service).list()).filter(u=>u.description!==void 0)}).pipe(r.provide(n.get(uu.Ref.make({directory:zd.make(a.directory)}))));return[[`You are powered by the model named ${o.api.id}. The exact model ID is ${o.providerID}/${o.api.id}`,"Here is some useful information about the environment you are running in:","<env>",` Working directory: ${a.directory}`,` Workspace root folder: ${a.worktree}`,` Is directory a git repo: ${a.project.vcs==="git"?"yes":"no"}`,` Platform: ${process.platform}`,` Today's date: ${new Date(i??Date.now()).toDateString()}`,"</env>"].join(`
976
976
  `),l.length===0?void 0:["Project references provide additional directories that can be accessed when relevant.","<available_references>",...l.toSorted((u,f)=>u.name.localeCompare(f.name)).flatMap(u=>[" <reference>",` <name>${u.name}</name>`,` <path>${u.path}</path>`,...u.description===void 0?[]:[` <description>${u.description}</description>`]," </reference>"]),"</available_references>"].join(`
977
977
  `)].filter(u=>u!==void 0)}),skills:r.fn("SystemPrompt.skills")(function*(o){if(Ze.disabled(["skill"],o.permission).has("skill"))return;let i=yield*e.available(o);return["Skills provide specialized instructions and workflows for specific tasks.","Use the skill tool to load a skill when a task matches its description.",Xn.fmt(i,{verbose:!0})].join(`
978
978
  `)}),mcp:r.fn("SystemPrompt.mcp")(function*(o,i){let a=Ze.merge(o.permission,i??[]),l=(yield*t.instructions()).filter(u=>u.tools.length===0||Ze.disabled(u.tools,a).size<u.tools.length);if(l.length!==0)return["<mcp_instructions>",...l.flatMap(u=>[` <server name="${u.name}">`,...u.instructions.split(`
979
979
  `).map(f=>` ${f}`)," </server>"]),"</mcp_instructions>"].join(`
980
- `)})})})),Jw=De.make({service:Yn.Service,layer:Uu,deps:[]}),Kw=De.make({service:cr,layer:Yw,deps:[Xn.node,cn.node,Jw]});var mf=`opencode/${Qr}`,Pc=s((e,t)=>di(e,t??{}),"mergeOptions"),Xw=r.fn("LLMRequestPrep.prepare")(function*(e){let t=e.provider.id==="openai"&&e.auth?.type==="oauth",n=(e.agent.prompt?[e.agent.prompt]:to.provider(e.model)).filter(d=>d).join(`
980
+ `)})})})),Kw=De.make({service:Yn.Service,layer:Uu,deps:[]}),Xw=De.make({service:cr,layer:Jw,deps:[Xn.node,cn.node,Kw]});var mf=`opencode/${Qr}`,Pc=s((e,t)=>di(e,t??{}),"mergeOptions"),Qw=r.fn("LLMRequestPrep.prepare")(function*(e){let t=e.provider.id==="openai"&&e.auth?.type==="oauth",n=(e.agent.prompt?[e.agent.prompt]:to.provider(e.model)).filter(d=>d).join(`
981
981
  `),o=[...e.system,...e.user.system?[e.user.system]:[]].filter(d=>d).join(`
982
982
  `),i=[n,o].filter(d=>d),a=i[0];if(yield*e.plugin.trigger("experimental.chat.system.transform",{sessionID:e.sessionID,model:e.model},{system:i}),i.length>2&&i[0]===a){let d=i.slice(1);i.length=0,i.push(a,d.join(`
983
983
  `))}let l=!e.small&&e.model.variants&&e.user.model.variant?e.model.variants[e.user.model.variant]:{},u=e.small?et.smallOptions(e.model):et.options({model:e.model,sessionID:e.sessionID,providerOptions:e.provider.options}),{cacheTtl:f,toolScopes:m,...p}=e.agent.options??{},h=Pc(Pc(Pc(u,e.model.options),p),l);e.model.api.npm==="@ai-sdk/azure"&&(e.provider.options.useCompletionUrls||e.model.options.useCompletionUrls||h.useCompletionUrls)&&(delete h.reasoningSummary,delete h.include),t&&(h.instructions=i.join(`
984
- `));let g=t||e.isWorkflow?e.messages:[...i.map(d=>({role:"system",content:d})),...e.messages],I=yield*e.plugin.trigger("chat.params",{sessionID:e.sessionID,agent:e.agent.name,model:e.model,provider:e.provider,message:e.user},{temperature:e.model.capabilities.temperature?e.agent.temperature??et.temperature(e.model):void 0,topP:e.agent.topP??et.topP(e.model),topK:et.topK(e.model),maxOutputTokens:et.maxOutputTokens(e.model,e.flags.outputTokenMax),options:h}),{headers:T}=yield*e.plugin.trigger("chat.headers",{sessionID:e.sessionID,agent:e.agent.name,model:e.model,provider:e.provider,message:e.user},{headers:{}}),v=Qw(e);if(e.model.api.npm==="@ai-sdk/openai"||e.model.api.npm==="@ai-sdk/azure"||e.model.api.npm==="@ai-sdk/amazon-bedrock/mantle")for(let d of Object.keys(v))v[d]={...v[d],strict:!1};e.model.providerID.includes("github-copilot")&&Object.keys(v).length===0&&gf(e.messages)&&(v._noop={description:"Do not call this tool. It exists only for API compatibility and must never be invoked.",inputSchema:yn({type:"object",properties:{reason:{type:"string",description:"Unused"}}}),execute:s(async()=>({output:"",title:"",metadata:{}}),"execute")});let P=e.model.providerID.startsWith("opencode")?(yield*V.context).project.id:void 0;return{system:i,messages:g,tools:Object.fromEntries(Object.entries(v).toSorted(([d],[k])=>d.localeCompare(k))),params:I,messageTransformOptions:h,messageCacheTtl:f==="5m"?"5m":void 0,headers:{"x-opencode-session-id":e.sessionID,...e.parentSessionID?{"x-opencode-parent-session-id":e.parentSessionID}:{},...e.model.providerID.startsWith("opencode")?{...P?{"x-opencode-project":P}:{},"x-opencode-session":e.sessionID,"x-opencode-request":e.user.id,"x-opencode-client":e.flags.client,"User-Agent":mf}:{"x-session-affinity":e.sessionID,"X-Session-Id":e.sessionID,"User-Agent":mf},...e.parentSessionID?{"x-parent-session-id":e.parentSessionID}:{},...e.model.headers,...T}}});function Qw(e){let t=Ze.disabled(Object.keys(e.tools),Ze.merge(e.agent.permission,e.permission??[])),n=Go.filter(e.tools,(i,a)=>e.user.tools?.[a]!==!1&&!t.has(a)),o=e.agent.options?.toolScopes;return o?Go.map(n,(i,a)=>Zw(i,o[a],e.model)):n}s(Qw,"resolveTools");function Zw(e,t,n){let o=e;if(!t||!o.fieldTags||!o.jsonInputSchema)return e;let{description:i,schema:a}=Gu(e.description??"",o.jsonInputSchema,o.fieldTags,t);return{...e,description:i,inputSchema:yn(et.schema(n,a))}}s(Zw,"narrow");function gf(e){for(let t of e)if(Array.isArray(t.content)){for(let n of t.content)if(n.type==="tool-call"||n.type==="tool-result")return!0}return!1}s(gf,"hasToolCalls");var ev=et.OUTPUT_TOKEN_MAX,ko=class extends Ce.Service()("@opencode/LLM"){static{s(this,"Service")}},tv=Wt(ko),nv=Pe.effect(ko,r.gen(function*(){let e=yield*Xt.Service,t=yield*Ne.Service,n=yield*bt.Service,o=yield*ft.Service,i=yield*Ze.Service,a=yield*Ee.Service,l=yield*au.Service,u=yield*Ve.Service,f=r.fn("LLM.run")(function*(p){yield*r.logInfo("stream",{providerID:p.model.providerID,modelID:p.model.id,"session.id":p.sessionID,small:(p.small??!1).toString(),agent:p.agent.name,mode:p.agent.mode});let[h,g,I,T]=yield*r.all([n.getLanguage(p.model),t.get(),n.getProvider(p.model.providerID),e.get(p.model.providerID)],{concurrency:"unbounded"}),v=h instanceof Ga,P=yield*lr.prepare({...p,provider:I,auth:T,plugin:o,flags:u,isWorkflow:v});if(it.on()&&it.supports(p.model)&&p.model.providerID==="anthropic"&&T?.type==="oauth"){let x=it.relocate({system:P.system,messages:p.messages,append:!p.headers?.[it.HEADER]});x&&(x.added&&p.storeSystem&&(yield*p.storeSystem(x.added)),x.added&&it.log("system message",{"session.id":p.sessionID,chars:x.added.length,stored:!!p.storeSystem}),P={...P,system:x.system,messages:[...x.system.map(E=>({role:"system",content:E})),...x.messages]})}let d=yield*zt.make();if(h instanceof Ga){let x=h;x.sessionID=p.sessionID,x.systemPrompt=P.system.join(`
985
- `),x.toolExecutor=async(M,C,$)=>{let U=P.tools[M];if(!U||!U.execute)return{result:"",error:`Unknown tool: ${M}`};try{let H=await U.execute(JSON.parse(C),{toolCallId:$,messages:p.messages,abortSignal:p.abort});return{result:typeof H=="string"?H:H?.output??JSON.stringify(H),metadata:typeof H=="object"?H?.metadata:void 0,title:typeof H=="object"?H?.title:void 0}}catch(H){return{result:"",error:H.message??String(H)}}};let E=Ze.merge(p.agent.permission??[],p.permission??[]);x.sessionPreapprovedTools=Object.keys(P.tools).filter(M=>{let C=E.findLast($=>as.match(M,$.permission));return!C||C.action!=="ask"});let w=new Set;x.approvalHandler=d.bind(async M=>{let C=[...new Set(M.map(H=>H.name))];if(C.every(H=>w.has(H)))return{approved:!0};let $=ri.ID.ascending(),U;try{U=await d.promise(a.listen(L=>{if(L.type!==Ze.Event.Replied.type)return r.void;let W=L.data;return W.requestID!==$?r.void:(W.reply,r.void)}));let H=M.map(L=>{try{let W=JSON.parse(L.args),D=W?.title??W?.name??"";return D?`${L.name}: ${D}`:L.name}catch{return L.name}}),ue=[...new Set(H)];await d.promise(i.ask({id:$,sessionID:Rt.make(p.sessionID),permission:"workflow_tool_approval",patterns:ue,metadata:{tools:M},always:ue,ruleset:[]}));for(let L of C)w.add(L);return x.sessionPreapprovedTools=[...x.sessionPreapprovedTools??[],...C],{approved:!0}}catch{return{approved:!1}}finally{U&&await d.promise(U)}})}let k=g.experimental?.openTelemetry?kd(yield*r.serviceOption(ku)):void 0,y=k?new Proxy(k,{get(x,E,w){return E!=="startSpan"?Reflect.get(x,E,w):(...M)=>{let C=x.startSpan(...M);return C.setAttribute("session.id",p.sessionID),C}}}):void 0;if(u.experimentalNativeLlm){let x=hs.stream({model:p.model,provider:I,auth:T,llmClient:l,messages:P.messages,tools:P.tools,toolChoice:p.toolChoice,temperature:P.params.temperature,topP:P.params.topP,topK:P.params.topK,maxOutputTokens:P.params.maxOutputTokens,providerOptions:P.params.options,headers:P.headers,abort:p.abort});if(x.type==="supported")return yield*r.logInfo("llm runtime selected",{"llm.runtime":"native","llm.provider":p.model.providerID,"llm.model":p.model.id}),{type:"native",stream:x.stream};yield*r.logInfo("llm runtime selected",{"llm.runtime":"ai-sdk","llm.provider":p.model.providerID,"llm.model":p.model.id,"llm.native_unsupported_reason":x.reason}),yield*r.logInfo("native runtime unavailable; falling back to ai-sdk",{providerID:p.model.providerID,modelID:p.model.id,"session.id":p.sessionID,small:(p.small??!1).toString(),agent:p.agent.name,mode:p.agent.mode,reason:x.reason})}return yield*r.logInfo("llm runtime selected",{"llm.runtime":"ai-sdk","llm.provider":p.model.providerID,"llm.model":p.model.id}),{type:"ai-sdk",result:Bu({onError(x){d.fork(r.logError("stream error",{providerID:p.model.providerID,modelID:p.model.id,"session.id":p.sessionID,small:(p.small??!1).toString(),agent:p.agent.name,mode:p.agent.mode,error:x}))},includeRawChunks:p.model.providerID.includes("github-copilot"),async experimental_repairToolCall(x){let E=x.toolCall.toolName.toLowerCase();if(!P.tools[x.toolCall.toolName]&&!P.tools[E]){let w=E.replace(/^(?:mcp_|alchemy_)+/,""),M=Object.keys(P.tools).filter(C=>C===w||C.endsWith(`_${w}`));if(w&&M.length===1)return{...x.toolCall,toolName:M[0]}}return E!==x.toolCall.toolName&&P.tools[E]?{...x.toolCall,toolName:E}:{...x.toolCall,input:JSON.stringify({tool:x.toolCall.toolName,error:x.error.message}),toolName:"invalid"}},temperature:P.params.temperature,topP:P.params.topP,topK:P.params.topK,providerOptions:et.providerOptions(p.model,P.params.options),activeTools:Object.keys(P.tools).filter(x=>x!=="invalid"),tools:P.tools,toolChoice:p.toolChoice,maxOutputTokens:P.params.maxOutputTokens,abortSignal:p.abort,headers:p.headers?{...P.headers,...p.headers}:P.headers,maxRetries:p.retries??0,messages:P.messages,model:$u({model:h,middleware:[{specificationVersion:"v3",async transformParams(x){return x.type==="stream"&&(x.params.prompt=et.message(x.params.prompt,p.model,P.messageTransformOptions,{messageCacheTtl:P.messageCacheTtl,points:p.cachePoints})),x.params}}]}),experimental_telemetry:{isEnabled:g.experimental?.openTelemetry,functionId:"session.llm",tracer:y,metadata:{userId:g.username??"unknown",sessionId:p.sessionID}}})}}),m=s(p=>Gs(zs(r.gen(function*(){let h=yield*r.acquireRelease(r.sync(()=>new AbortController),T=>r.sync(()=>T.abort()));yield*r.logInfo("llm stream start",{providerID:p.model.providerID,modelID:p.model.id});let g=yield*f({...p,abort:h.signal});if(g.type==="native")return g.stream;let I=ir.adapterState();return _d(g.result.fullStream,T=>T instanceof Error?T:new Error(String(T))).pipe(Ld(T=>ir.toLLMEvents(I,T)),Hs(T=>Ad(T)))}))),"stream");return ko.of({stream:m})})),ov=lr.hasToolCalls,rv=De.make({service:ko,layer:nv,deps:[Xt.node,Ne.node,bt.node,ft.node,Ze.node,Ee.node,cu,Ve.node]});var un={};fe(un,{DiffInput:()=>av,Service:()=>dr,SessionSummary:()=>un,node:()=>cv});function sv(e){if(!e.startsWith('"')||!e.endsWith('"'))return e;let t=e.slice(1,-1),n=[];for(let o=0;o<t.length;o++){let i=t[o];if(i!=="\\"){n.push(i.charCodeAt(0));continue}let a=t[o+1];if(!a){n.push(92);continue}if(a>="0"&&a<="7"){let f=t.slice(o+1,o+4).match(/^[0-7]{1,3}/);if(!f){n.push(a.charCodeAt(0)),o++;continue}n.push(parseInt(f[0],8)),o+=f[0].length;continue}let l=a==="n"?`
986
- `:a==="r"?"\r":a==="t"?" ":a==="b"?"\b":a==="f"?"\f":a==="v"?"\v":a==="\\"||a==='"'?a:void 0;n.push((l??a).charCodeAt(0)),o++}return Buffer.from(n).toString()}s(sv,"unquoteGitPath");var dr=class extends Ce.Service()("@opencode/SessionSummary"){static{s(this,"Service")}},iv=Pe.effect(dr,r.gen(function*(){let e=yield*me.Service,t=yield*an.Service,n=yield*Ee.Service,o=yield*Ne.Service,i=r.fn("SessionSummary.computeDiff")(function*(u){let f,m;for(let p of u.messages){if(!f){for(let h of p.parts)if(h.type==="step-start"&&h.snapshot){f=h.snapshot;break}}for(let h of p.parts)h.type==="step-finish"&&h.snapshot&&(m=h.snapshot)}return f&&m?yield*t.diffFull(f,m):[]}),a=r.fn("SessionSummary.summarize")(function*(u){if(yield*e.setSummary({sessionID:u.sessionID,summary:{additions:0,deletions:0,files:0}}),yield*n.publish(me.Event.Diff,{sessionID:u.sessionID,diff:[]}),(yield*o.get()).snapshot===!1)return;let f=yield*e.messages({sessionID:u.sessionID}).pipe(r.orDie);if(!f.length)return;let m=f.filter(g=>g.info.id===u.messageID||g.info.role==="assistant"&&g.info.parentID===u.messageID),p=m.find(g=>g.info.id===u.messageID);if(!p||p.info.role!=="user")return;let h=yield*i({messages:m});p.info.summary={...p.info.summary,diffs:h},yield*e.updateMessage(p.info)}),l=r.fn("SessionSummary.diff")(function*(u){if(!u.messageID)return[];let f=(yield*e.messages({sessionID:u.sessionID}).pipe(r.orDie)).find(p=>p.info.id===u.messageID);return!f||f.info.role!=="user"?[]:(f.info.summary?.diffs??[]).map(p=>{if(p.file===void 0)return p;let h=sv(p.file);return h===p.file?p:{...p,file:h}})});return dr.of({summarize:a,diff:l,computeDiff:i})})),av=c.Struct({sessionID:Rt,messageID:c.optional(ct)}),cv=De.make({service:dr,layer:iv,deps:[me.node,an.node,Ee.node,Ne.node]});var jn={};fe(jn,{Service:()=>hr,SessionProcessor:()=>jn,node:()=>Cv});var bn={};fe(bn,{DecodeError:()=>Ui,Image:()=>bn,InvalidDataUrlError:()=>ji,ResizerUnavailableError:()=>Ni,Service:()=>ur,SizeError:()=>gs,node:()=>xv});import lv from"node:path";import{fileURLToPath as dv}from"node:url";var uv=5*1024*1024,pv=2e3,fv=2e3,mv=!0,hv=[80,85,70,55,40],gv=256*1024,yv=85,bv=.5,Ni=class extends c.TaggedErrorClass()("ImageResizerUnavailableError",{}){static{s(this,"ResizerUnavailableError")}get message(){return"Image resizer is unavailable"}},ji=class extends c.TaggedErrorClass()("ImageInvalidDataUrlError",{url:c.String}){static{s(this,"InvalidDataUrlError")}get message(){return"Image URL must be a base64 data URL"}},Ui=class extends c.TaggedErrorClass()("ImageDecodeError",{}){static{s(this,"DecodeError")}get message(){return"Image could not be decoded"}},gs=class extends c.TaggedErrorClass()("ImageSizeError",{bytes:c.Number,max:c.Number,width:c.Number,height:c.Number,max_width:c.Number,max_height:c.Number}){static{s(this,"SizeError")}get message(){return`Image ${this.width}x${this.height} with base64 size ${this.bytes} exceeds configured limits and could not be resized below ${this.max_width}x${this.max_height}/${this.max} bytes`}};function wv(e){let t=e.get_raw_pixels();for(let n=3;n<t.length;n+=4)if(t[n]!==255)return!1;return!0}s(wv,"opaque");var ur=class extends Ce.Service()("@opencode/Image"){static{s(this,"Service")}},vv=Pe.effect(ur,r.gen(function*(){let e=yield*Ne.Service,t=yield*r.cached(r.sync(()=>{globalThis.__OPENCODE_PHOTON_WASM_PATH=lv.isAbsolute(oi)?oi:dv(new URL(oi,import.meta.url))}).pipe(r.andThen(()=>r.tryPromise(()=>import("@silvia-odwyer/photon-node"))),r.tapError(o=>r.logWarning("failed to load photon",{error:o})),r.mapError(()=>new Ni))),n=r.fn("Image.normalize")(function*(o){let i=(yield*e.get()).attachment?.image,a={autoResize:i?.auto_resize??mv,maxWidth:i?.max_width??pv,maxHeight:i?.max_height??fv,maxBase64Bytes:i?.max_base64_bytes??uv};if(!o.url.startsWith("data:")||!o.url.includes(";base64,"))return yield*new ji({url:o.url});let l=o.url.slice(o.url.indexOf(";base64,")+8),u=Buffer.byteLength(l,"utf8"),f=yield*t,m=yield*r.try({try:s(()=>f.PhotonImage.new_from_byteslice(Buffer.from(l,"base64")),"try"),catch:s(()=>new Ui,"catch")}).pipe(r.tapError(p=>r.logWarning("failed to decode image",{error:p})));try{let p=m.get_width(),h=m.get_height();if(p<=a.maxWidth&&h<=a.maxHeight&&u<=a.maxBase64Bytes){if(o.mime!=="image/png"||u<gv||!wv(m))return o;let I=Buffer.from(m.get_bytes_jpeg(yv)).toString("base64");return Buffer.byteLength(I,"utf8")>u*bv?o:(yield*r.logInfo("using lighter image",{from:u,to:Buffer.byteLength(I,"utf8"),size:`${p}x${h}`}),{...o,mime:"image/jpeg",url:`data:image/jpeg;base64,${I}`})}if(!a.autoResize)return yield*new gs({bytes:u,max:a.maxBase64Bytes,width:p,height:h,max_width:a.maxWidth,max_height:a.maxHeight});let g=Math.min(1,a.maxWidth/p,a.maxHeight/h);for(let I of Array.from({length:32}).reduce(T=>{let v=T.at(-1)??{width:Math.max(1,Math.round(p*g)),height:Math.max(1,Math.round(h*g))},P=T.length===0?v:{width:v.width===1?1:Math.max(1,Math.floor(v.width*.75)),height:v.height===1?1:Math.max(1,Math.floor(v.height*.75))};return T.some(d=>d.width===P.width&&d.height===P.height)?T:[...T,P]},[])){let T=f.resize(m,I.width,I.height,f.SamplingFilter.Lanczos3),v=[{data:Buffer.from(T.get_bytes()).toString("base64"),mime:"image/png"},...hv.map(P=>({data:Buffer.from(T.get_bytes_jpeg(P)).toString("base64"),mime:"image/jpeg"}))].map(P=>({...P,bytes:Buffer.byteLength(P.data,"utf8")})).find(P=>P.bytes<=a.maxBase64Bytes);if(T.free(),v)return yield*r.logInfo("using resized image",{from_mime:o.mime,to_mime:v.mime,from:`${p}x${h}`,to:`${I.width}x${I.height}`}),{...o,mime:v.mime,url:`data:${v.mime};base64,${v.data}`}}return yield*new gs({bytes:u,max:a.maxBase64Bytes,width:p,height:h,max_width:a.maxWidth,max_height:a.maxHeight})}finally{m.free()}});return ur.of({normalize:n})})),xv=De.make({service:ur,layer:vv,deps:[Ne.node]});var Sv=2e4,Iv=.05;function Fi(e){let t=e.model.limit.context;if(t===0)return 0;let n=e.cfg.compaction?.reserved??(String(e.model.providerID)==="openai"&&e.model.limit.input?Math.round(e.model.limit.input*Iv):Math.min(Sv,et.maxOutputTokens(e.model,e.outputTokenMax)));return e.model.limit.input?Math.max(0,e.model.limit.input-n):Math.max(0,t-et.maxOutputTokens(e.model,e.outputTokenMax))}s(Fi,"usable");function Bi(e){return e.cfg.compaction?.auto===!1||e.model.limit.context===0?!1:(e.tokens.total||e.tokens.input+e.tokens.output+e.tokens.cache.read+e.tokens.cache.write)>=Fi(e)}s(Bi,"isOverflow");var fr={};fe(fr,{GO_UPSELL_MESSAGE:()=>bf,GO_UPSELL_URL:()=>wf,RETRY_AFTER_MAX:()=>kf,RETRY_BACKOFF_FACTOR:()=>xf,RETRY_INITIAL_DELAY:()=>vf,RETRY_JITTER_FACTOR:()=>Sf,RETRY_MAX_BACKOFF:()=>If,RETRY_MAX_RETRIES:()=>Df,SessionRetry:()=>fr,delay:()=>Ef,policy:()=>Pv,retryable:()=>Tf});var bf="Free usage exceeded, subscribe to Go",wf="https://opencode.ai/go",vf=500,xf=2,Sf=.25,If=32e3,kf=6e5,Df=10,kv=[/429|500|502|503|504|524/i,/rate increased too quickly|rate limit|rate-limit|rate_limit|too many requests/i,/overloaded|service unavailable|service_unavailable|service-unavailable|internal error|internal_error|internal server error|server error|server_error|server-error|provider returned error|provider_returned_error|provider-returned-error/i,/terminated|fetch failed|failed to fetch|network[-_\s]error|upstream connect|connection error|connection refused|connection lost|socket connection was closed|socket hang up|reset before headers|getaddrinfo|enotfound|eai_again|econnrefused|econnreset|etimedout/i,/^timeout$|\b(?:request|response|connection|network|stream|read) (?:timeout|timed out|time out)\b/i,/try your request again|retry your request|resource exhausted|resource_exhausted/i,/\btry again (?:later|in\b)|\b(?:currently|temporarily) at capacity\b/i];function Dv(e){let t=e?.data.responseHeaders;if(!t)return;let n=Number.parseFloat(t["retry-after-ms"]??"");if(!Number.isNaN(n)&&n>=0)return n;let o=t["retry-after"];if(!o)return;let i=Number.parseFloat(o);if(!Number.isNaN(i)&&i>=0)return Math.ceil(i*1e3);let a=Date.parse(o)-Date.now();if(!Number.isNaN(a)&&a>0)return Math.ceil(a)}s(Dv,"retryAfter");function Ef(e,t,n=Math.random()){let o=Dv(t);if(o!==void 0)return Math.min(o,kf);let i=Math.min(vf*Math.pow(xf,e-1),If);return Math.round(i*(1+Sf*n))}s(Ef,"delay");function Ev(e){return ut.APIError.isInstance(e)&&!!e.data.responseBody?.includes("FreeUsageLimitError")}s(Ev,"uncapped");function Tf(e,t){if(ut.ProviderQuotaError.isInstance(e)||ut.APIError.isInstance(e)&&e.data.metadata?.alchemyStop||ut.ContextOverflowError.isInstance(e))return;if(ut.APIError.isInstance(e)){let a=e.data.statusCode;if(!e.data.isRetryable&&!(a!==void 0&&a>=500)&&!Rc(e.data.message)&&!Rc(e.data.responseBody))return;if(e.data.responseBody?.includes("FreeUsageLimitError"))return{message:bf,action:{reason:"free_tier_limit",provider:t,title:"Free limit reached",message:"Subscribe to OpenCode Go for reliable access to the best open-source models for $10/month.",label:"subscribe",link:wf}};if(e.data.responseBody?.includes("GoUsageLimitError")){let l=yf(e.data.responseBody),u=pr(l?.metadata?.workspace),f=pr(l?.metadata?.limitName),m=Tv(e.data.responseHeaders?.["retry-after"]),p=Za(()=>{if(m===void 0)return"";let I=Math.max(0,Math.ceil(m)),T=Math.floor(I/86400),v=Math.floor(I%86400/3600),P=Math.ceil(I%3600/60),d=s((k,y)=>`${k} ${y}${k===1?"":"s"}`,"unit");return T>0?v>0?`${d(T,"day")} ${d(v,"hour")}`:d(T,"day"):v>0?P>0?`${d(v,"hour")} ${d(P,"minute")}`:d(v,"hour"):P>0?d(P,"minute"):"less than a minute"}),h=`${f?`${f} usage limit`:"Usage limit"} reached. It will reset in ${p}. To continue using this model now, enable usage from your available balance`,g=`https://opencode.ai/workspace/${u}/go`;return{message:`${h} - ${g}`,action:{reason:"account_rate_limit",provider:t,title:"Go limit reached",message:h,label:"open settings",link:g}}}return{message:e.data.message.includes("Overloaded")?"Provider is overloaded":e.data.message}}let n=pt(e.data)?e.data.message:void 0;if(typeof n!="string")return;let o=n.toLowerCase();if(o.includes("too_many_requests"))return{message:"Too Many Requests"};let i=yf(n);if(pt(i)){let a=pt(i.error)?i.error:{},l=pr(i.type),u=pr(a.code),f=pr(a.type);if(l==="api_error")return{message:"Provider server error"};if(l.includes("overloaded")||u.includes("exhausted")||u.includes("unavailable")||u.includes("overloaded")||f.includes("unavailable")||f.includes("overloaded")||u==="slow_down")return{message:"Provider is overloaded"}}if(o.includes("exhausted")||o.includes("unavailable"))return{message:"Provider is overloaded"};if(Rc(n))return{message:n}}s(Tf,"retryable");function Rc(e){return typeof e=="string"&&kv.some(t=>t.test(e))}s(Rc,"matchesRetryableMessage");function pr(e){return e==null?"":String(e)}s(pr,"str");function Tv(e){let t=Number.parseFloat(pr(e));if(!Number.isNaN(t))return t}s(Tv,"num");function yf(e){return Za(()=>{try{return typeof e!="string"?void 0:JSON.parse(e)}catch{return}})}s(yf,"parseJSON");function Pv(e){return Pd.fromStepWithMetadata(r.succeed(t=>{let n=e.parse(t.input),o=Tf(n,e.provider);return o?t.attempt>Df&&!Ev(n)?ot.done(t.attempt):r.gen(function*(){let i=Ef(t.attempt,ut.APIError.isInstance(n)?n:void 0),a=yield*Td.currentTimeMillis;return yield*e.set({attempt:t.attempt,message:o.message,action:o.action,next:a+i}),[t.attempt,Ed.millis(i)]}):ot.done(t.attempt)}))}s(Pv,"policy");function Rf(e,t){if(Pf(t)!=="final_answer")return;let n=t.text.trim();if(n)return e.find(o=>o.type==="text"&&o.id!==t.id&&Pf(o)==="commentary"&&o.text.trim()===n)}s(Rf,"repeatedPreamble");function Pf(e){for(let t of Object.values(e.metadata??{}))if(t&&typeof t=="object"&&typeof t.phase=="string")return t.phase}s(Pf,"phaseOf");function Cf(e){let t=e instanceof Error?e.message:String(e),n=typeof import.meta.dirname=="string"?import.meta.dirname:void 0;return n&&t.includes("Cannot find module")&&t.includes(n)?"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.":t}s(Cf,"toolErrorText");var Ht;(m=>{let e=new Map;function t(p,h){let g={executing:0,ended:!1,end:h};return e.set(p,g),g}m.open=t,s(t,"open");function n(p,h){e.get(p)===h&&e.delete(p)}m.close=n,s(n,"close");function o(p){let h=e.get(p);return!h||h.ended||h.executing>0?!1:(h.ended=!0,h.end(),!0)}m.endForPerson=o,s(o,"endForPerson");function i(p){if(p){if(p.ended)return new Error("Not run: the user's message ended this step before this tool started.");p.executing++}}m.enter=i,s(i,"enter");function a(p){p&&p.executing>0&&p.executing--}m.leave=a,s(a,"leave");function l(p,h){let g=i(p);return g?Promise.reject(g):h()}m.run=l,s(l,"run");function u(p){a(e.get(p))}m.recorded=u,s(u,"recorded");function f(p){let h=new Set;for(let I of p)(I.type==="text"||I.type==="reasoning")&&!I.time?.end&&h.add(I.id),I.type==="tool"&&I.state.status==="pending"&&h.add(I.id);let g=s(I=>!h.has(I.id)&&(I.type==="text"||I.type==="tool"),"kept");for(let I=0;I<p.length;I++){let T=p[I];T.type!=="reasoning"||h.has(T.id)||p.slice(I+1).some(g)||h.add(T.id)}if(!p.some(g))for(let I of p)I.type==="step-start"&&h.add(I.id);return[...h]}m.toDrop=f,s(f,"toDrop")})(Ht||={});var mr;(a=>{a.LIMIT=12;let t=new Map;function n(l,u,f,m){if(!f)return t.delete(l),0;let p=`${u}\0${m.slice(0,300)}`,h=t.get(l),g=h&&h.sig===p?h.count+1:1;return t.set(l,{sig:p,count:g}),g}a.note=n,s(n,"note");function o(l){t.delete(l)}a.forget=o,s(o,"forget");function i(l,u,f){let m=f.replace(/\s+/g," ").trim().slice(0,160);return`It made the same failing call ${u} times in a row (${l}: "${m}"), so it was stopped.`}a.line=i,s(i,"line")})(mr||={});function Af(e,t,n,o){let i=mr.note(e,t,n,o);if(!(i<mr.LIMIT))throw mr.forget(e),new ut.APIError({message:mr.line(t,i,o),isRetryable:!1,metadata:{alchemyStop:"repeated-tool-failure",tool:t,count:String(i)}})}s(Af,"breakRepeat");var Mf=3,hr=class extends Ce.Service()("@opencode/SessionProcessor"){static{s(this,"Service")}},Rv=Pe.effect(hr,r.gen(function*(){let e=yield*me.Service,t=yield*Ne.Service,n=yield*an.Service,o=yield*Ft.Service,i=yield*dn.Service,a=yield*Ze.Service,l=yield*ft.Service,u=yield*un.Service,f=yield*Et.Scope,m=yield*ln.Service,p=yield*bn.Service,h=yield*Ee.Service,g=yield*tt.Service,I=yield*Qn.Service,T=r.fn("SessionProcessor.create")(function*(v){let P=yield*n.track(),d={assistantMessage:v.assistantMessage,sessionID:v.sessionID,model:v.model,toolcalls:{},shouldBreak:!1,snapshot:P,blocked:!1,needsCompaction:!1,currentText:void 0,reasoningMap:{}},k=!1,y={},x={},E=s(R=>{let Y=nt.fromError(R,{providerID:v.model.providerID,aborted:k});if(Y?.name==="MessageAbortedError"&&!k){let J=R,te=J?.cause;globalThis.process.stderr.write(`level=WARN service=session.processor message="stream aborted without an interrupt" ${JSON.stringify({sessionID:v.sessionID,name:String(J?.name??""),message:String(J?.message??""),stack:String(J?.stack??"").slice(0,1500),cause:te?`${String(te.name??"")}: ${String(te.message??"")} ${String(te.stack??"").slice(0,800)}`:""})}
987
- `)}return Y},"parse"),w=r.fn("SessionProcessor.settleToolCall")(function*(R){let Y=d.toolcalls[R]?.done;delete d.toolcalls[R],Y&&(yield*gt.succeed(Y,void 0).pipe(r.ignore))}),M=r.fn("SessionProcessor.readToolCall")(function*(R){let Y=d.toolcalls[R];if(!Y)return;let J=yield*e.getPart({partID:Y.partID,messageID:Y.messageID,sessionID:Y.sessionID});if(!J||J.type!=="tool"){delete d.toolcalls[R];return}return{call:Y,part:J}}),C=r.fn("SessionProcessor.updateToolCall")(function*(R,Y){let J=yield*M(R);if(!J)return;let te=yield*e.updatePart(Y(J.part));return d.toolcalls[R]={...J.call,partID:te.id,messageID:te.messageID,sessionID:te.sessionID},te}),$=r.fn("SessionProcessor.bounded")(function*(R,Y){let J=yield*o.get(d.assistantMessage.agent).pipe(r.catch(()=>r.succeed(void 0)));return yield*I.output(R,{failed:Y},J)}),U=r.fn("SessionProcessor.completeToolCall")(function*(R,Y){let J=yield*M(R);if(!J||J.part.state.status!=="running")return Ht.recorded(d.sessionID);let te=Y.metadata?.truncated===void 0?yield*$(Y.output,!1):void 0,ke=te?.truncated?{...Y,output:te.content,metadata:{...Y.metadata,truncated:!0,outputPath:te.outputPath}}:Y;yield*e.updatePart({...J.part,state:{status:"completed",input:J.part.state.input,output:ke.output,metadata:ke.metadata,title:ke.title,time:{start:J.part.state.time.start,end:Date.now()},attachments:ke.attachments}}),yield*w(R),Ht.recorded(d.sessionID),Af(d.sessionID,J.part.tool,ke.metadata?.isError===!0,String(ke.output??""))}),H=r.fn("SessionProcessor.failToolCall")(function*(R,Y){let J=yield*M(R);if(!J||J.part.state.status!=="running")return Ht.recorded(d.sessionID),!1;let te=yield*$(Cf(Y),!0);return yield*e.updatePart({...J.part,state:{status:"error",input:J.part.state.input,error:te.content,metadata:te.truncated?{...J.part.state.metadata,truncated:!0,outputPath:te.outputPath}:J.part.state.metadata,time:{start:J.part.state.time.start,end:Date.now()}}}),(Y instanceof ri.RejectedError||Y instanceof Qt.RejectedError)&&(d.blocked=d.shouldBreak),yield*w(R),Ht.recorded(d.sessionID),Af(d.sessionID,J.part.tool,!0,te.content),!0}),ue=r.fn("SessionProcessor.finishReasoning")(function*(R){R in d.reasoningMap&&(d.reasoningMap[R].text=d.reasoningMap[R].text,d.reasoningMap[R].time={...d.reasoningMap[R].time,end:Date.now()},yield*e.updatePart(d.reasoningMap[R]),delete d.reasoningMap[R])}),L=r.fn("SessionProcessor.ensureToolCall")(function*(R){let Y=yield*M(R.id);if(Y){if(!R.providerExecuted||Y.part.metadata?.providerExecuted)return Y;let te=yield*e.updatePart({...Y.part,metadata:{...Y.part.metadata,providerExecuted:!0}});return d.toolcalls[R.id]={...Y.call,partID:te.id,messageID:te.messageID,sessionID:te.sessionID},{call:d.toolcalls[R.id],part:te}}let J=yield*e.updatePart({id:We.ascending(),messageID:d.assistantMessage.id,sessionID:d.assistantMessage.sessionID,type:"tool",tool:R.name,callID:R.id,state:{status:"pending",input:{},raw:""},metadata:R.providerExecuted?{providerExecuted:!0}:void 0});return d.toolcalls[R.id]={done:yield*gt.make(),partID:J.id,messageID:J.messageID,sessionID:J.sessionID},{call:d.toolcalls[R.id],part:J}}),W=s(R=>c.is(ut.FilePart)(R),"isFilePart"),D=s(R=>pt(R.result.value)&&typeof R.result.value.output=="string"?{title:typeof R.result.value.title=="string"?R.result.value.title:R.name,metadata:pt(R.result.value.metadata)?R.result.value.metadata:{},output:R.result.value.output,attachments:Array.isArray(R.result.value.attachments)?R.result.value.attachments.filter(W):void 0}:{title:R.name,metadata:R.result.type==="json"&&pt(R.result.value)?R.result.value:{},output:typeof R.result.value=="string"?R.result.value:JSON.stringify(R.result.value)??""},"toolResultOutput"),A=r.fnUntraced(function*(R){switch(R.type){case"reasoning-start":if(R.id in d.reasoningMap)return;d.reasoningMap[R.id]={id:We.ascending(),messageID:d.assistantMessage.id,sessionID:d.assistantMessage.sessionID,type:"reasoning",text:"",time:{start:Date.now()},metadata:R.providerMetadata},yield*e.updatePart(d.reasoningMap[R.id]);return;case"reasoning-delta":if(!(R.id in d.reasoningMap))return;d.reasoningMap[R.id].text+=R.text,R.providerMetadata&&(d.reasoningMap[R.id].metadata=R.providerMetadata),yield*e.updatePartDelta({sessionID:d.reasoningMap[R.id].sessionID,messageID:d.reasoningMap[R.id].messageID,partID:d.reasoningMap[R.id].id,field:"text",delta:R.text});return;case"reasoning-end":R.providerMetadata&&R.id in d.reasoningMap&&(d.reasoningMap[R.id].metadata=R.providerMetadata),yield*ue(R.id);return;case"tool-input-start":if(d.assistantMessage.summary)throw new Error(`Tool call not allowed while generating summary: ${R.name}`);yield*L(R);return;case"tool-input-delta":{let Y=yield*L(R);if(Y.part.state.status!=="pending")return;let J=(x[R.id]??Y.part.state.raw??"")+R.text,te=Date.now();if(te-(y[R.id]??0)<2e3){x[R.id]=J;return}y[R.id]=te,delete x[R.id],yield*C(R.id,ke=>ke.state.status==="pending"?{...ke,state:{...ke.state,raw:J}}:ke),yield*e.touch(d.sessionID);return}case"tool-input-end":{yield*L(R);return}case"tool-call":{if(d.assistantMessage.summary)throw new Error(`Tool call not allowed while generating summary: ${R.name}`);yield*L(R);let Y=pt(R.input)?R.input:{value:R.input};yield*C(R.id,He=>({...He,tool:R.name,state:He.state.status==="running"?{...He.state,input:Y}:{status:"running",input:Y,time:{start:Date.now()}},metadata:He.metadata?.providerExecuted?{...R.providerMetadata,providerExecuted:!0}:R.providerMetadata}));let te=(yield*nt.parts(d.assistantMessage.id).pipe(r.provideService(tt.Service,g))).slice(-Mf);if(te.length!==Mf||!te.every(He=>He.type==="tool"&&He.tool===R.name&&He.state.status!=="pending"&&JSON.stringify(He.state.input)===JSON.stringify(Y)))return;let ke=yield*o.get(d.assistantMessage.agent);yield*a.ask({permission:"doom_loop",patterns:[R.name],sessionID:d.assistantMessage.sessionID,metadata:{tool:R.name,input:Y},always:[R.name],ruleset:ke.permission});return}case"tool-result":{if(!(yield*M(R.id))&&R.result.type==="error")return;if(R.result.type==="error"){yield*H(R.id,R.result.value);return}let J=D(R),te=yield*r.forEach(J.attachments??[],S=>S.mime.startsWith("image/")?p.normalize(S).pipe(r.catchIf(G=>G instanceof bn.ResizerUnavailableError,()=>r.succeed(S)),r.exit):r.succeed(wt.succeed(S))),ke=te.filter(wt.isFailure).length,He=te.filter(wt.isSuccess).map(S=>S.value),Pn={...J,output:ke===0?J.output:`${J.output}
984
+ `));let g=t||e.isWorkflow?e.messages:[...i.map(d=>({role:"system",content:d})),...e.messages],I=yield*e.plugin.trigger("chat.params",{sessionID:e.sessionID,agent:e.agent.name,model:e.model,provider:e.provider,message:e.user},{temperature:e.model.capabilities.temperature?e.agent.temperature??et.temperature(e.model):void 0,topP:e.agent.topP??et.topP(e.model),topK:et.topK(e.model),maxOutputTokens:et.maxOutputTokens(e.model,e.flags.outputTokenMax),options:h}),{headers:T}=yield*e.plugin.trigger("chat.headers",{sessionID:e.sessionID,agent:e.agent.name,model:e.model,provider:e.provider,message:e.user},{headers:{}}),v=Zw(e);if(e.model.api.npm==="@ai-sdk/openai"||e.model.api.npm==="@ai-sdk/azure"||e.model.api.npm==="@ai-sdk/amazon-bedrock/mantle")for(let d of Object.keys(v))v[d]={...v[d],strict:!1};e.model.providerID.includes("github-copilot")&&Object.keys(v).length===0&&gf(e.messages)&&(v._noop={description:"Do not call this tool. It exists only for API compatibility and must never be invoked.",inputSchema:yn({type:"object",properties:{reason:{type:"string",description:"Unused"}}}),execute:s(async()=>({output:"",title:"",metadata:{}}),"execute")});let P=e.model.providerID.startsWith("opencode")?(yield*V.context).project.id:void 0;return{system:i,messages:g,tools:Object.fromEntries(Object.entries(v).toSorted(([d],[k])=>d.localeCompare(k))),params:I,messageTransformOptions:h,messageCacheTtl:f==="5m"?"5m":void 0,headers:{"x-opencode-session-id":e.sessionID,...e.parentSessionID?{"x-opencode-parent-session-id":e.parentSessionID}:{},...e.model.providerID.startsWith("opencode")?{...P?{"x-opencode-project":P}:{},"x-opencode-session":e.sessionID,"x-opencode-request":e.user.id,"x-opencode-client":e.flags.client,"User-Agent":mf}:{"x-session-affinity":e.sessionID,"X-Session-Id":e.sessionID,"User-Agent":mf},...e.parentSessionID?{"x-parent-session-id":e.parentSessionID}:{},...e.model.headers,...T}}});function Zw(e){let t=Ze.disabled(Object.keys(e.tools),Ze.merge(e.agent.permission,e.permission??[])),n=Go.filter(e.tools,(i,a)=>e.user.tools?.[a]!==!1&&!t.has(a)),o=e.agent.options?.toolScopes;return o?Go.map(n,(i,a)=>ev(i,o[a],e.model)):n}s(Zw,"resolveTools");function ev(e,t,n){let o=e;if(!t||!o.fieldTags||!o.jsonInputSchema)return e;let{description:i,schema:a}=Gu(e.description??"",o.jsonInputSchema,o.fieldTags,t);return{...e,description:i,inputSchema:yn(et.schema(n,a))}}s(ev,"narrow");function gf(e){for(let t of e)if(Array.isArray(t.content)){for(let n of t.content)if(n.type==="tool-call"||n.type==="tool-result")return!0}return!1}s(gf,"hasToolCalls");var tv=et.OUTPUT_TOKEN_MAX,ko=class extends Ce.Service()("@opencode/LLM"){static{s(this,"Service")}},nv=Wt(ko),ov=Pe.effect(ko,r.gen(function*(){let e=yield*Xt.Service,t=yield*Ne.Service,n=yield*bt.Service,o=yield*ft.Service,i=yield*Ze.Service,a=yield*Ee.Service,l=yield*au.Service,u=yield*Ve.Service,f=r.fn("LLM.run")(function*(p){yield*r.logInfo("stream",{providerID:p.model.providerID,modelID:p.model.id,"session.id":p.sessionID,small:(p.small??!1).toString(),agent:p.agent.name,mode:p.agent.mode});let[h,g,I,T]=yield*r.all([n.getLanguage(p.model),t.get(),n.getProvider(p.model.providerID),e.get(p.model.providerID)],{concurrency:"unbounded"}),v=h instanceof Ga,P=yield*lr.prepare({...p,provider:I,auth:T,plugin:o,flags:u,isWorkflow:v});if(it.on()&&it.supports(p.model)&&p.model.providerID==="anthropic"&&T?.type==="oauth"){let S=it.relocate({system:P.system,messages:p.messages,append:!p.headers?.[it.HEADER]});S&&(S.added&&p.storeSystem&&(yield*p.storeSystem(S.added)),S.added&&it.log("system message",{"session.id":p.sessionID,chars:S.added.length,stored:!!p.storeSystem}),P={...P,system:S.system,messages:[...S.system.map(E=>({role:"system",content:E})),...S.messages]})}let d=yield*zt.make();if(h instanceof Ga){let S=h;S.sessionID=p.sessionID,S.systemPrompt=P.system.join(`
985
+ `),S.toolExecutor=async(M,C,$)=>{let U=P.tools[M];if(!U||!U.execute)return{result:"",error:`Unknown tool: ${M}`};try{let H=await U.execute(JSON.parse(C),{toolCallId:$,messages:p.messages,abortSignal:p.abort});return{result:typeof H=="string"?H:H?.output??JSON.stringify(H),metadata:typeof H=="object"?H?.metadata:void 0,title:typeof H=="object"?H?.title:void 0}}catch(H){return{result:"",error:H.message??String(H)}}};let E=Ze.merge(p.agent.permission??[],p.permission??[]);S.sessionPreapprovedTools=Object.keys(P.tools).filter(M=>{let C=E.findLast($=>as.match(M,$.permission));return!C||C.action!=="ask"});let w=new Set;S.approvalHandler=d.bind(async M=>{let C=[...new Set(M.map(H=>H.name))];if(C.every(H=>w.has(H)))return{approved:!0};let $=ri.ID.ascending(),U;try{U=await d.promise(a.listen(L=>{if(L.type!==Ze.Event.Replied.type)return r.void;let W=L.data;return W.requestID!==$?r.void:(W.reply,r.void)}));let H=M.map(L=>{try{let W=JSON.parse(L.args),D=W?.title??W?.name??"";return D?`${L.name}: ${D}`:L.name}catch{return L.name}}),ue=[...new Set(H)];await d.promise(i.ask({id:$,sessionID:Rt.make(p.sessionID),permission:"workflow_tool_approval",patterns:ue,metadata:{tools:M},always:ue,ruleset:[]}));for(let L of C)w.add(L);return S.sessionPreapprovedTools=[...S.sessionPreapprovedTools??[],...C],{approved:!0}}catch{return{approved:!1}}finally{U&&await d.promise(U)}})}let k=g.experimental?.openTelemetry?kd(yield*r.serviceOption(ku)):void 0,y=k?new Proxy(k,{get(S,E,w){return E!=="startSpan"?Reflect.get(S,E,w):(...M)=>{let C=S.startSpan(...M);return C.setAttribute("session.id",p.sessionID),C}}}):void 0;if(u.experimentalNativeLlm){let S=hs.stream({model:p.model,provider:I,auth:T,llmClient:l,messages:P.messages,tools:P.tools,toolChoice:p.toolChoice,temperature:P.params.temperature,topP:P.params.topP,topK:P.params.topK,maxOutputTokens:P.params.maxOutputTokens,providerOptions:P.params.options,headers:P.headers,abort:p.abort});if(S.type==="supported")return yield*r.logInfo("llm runtime selected",{"llm.runtime":"native","llm.provider":p.model.providerID,"llm.model":p.model.id}),{type:"native",stream:S.stream};yield*r.logInfo("llm runtime selected",{"llm.runtime":"ai-sdk","llm.provider":p.model.providerID,"llm.model":p.model.id,"llm.native_unsupported_reason":S.reason}),yield*r.logInfo("native runtime unavailable; falling back to ai-sdk",{providerID:p.model.providerID,modelID:p.model.id,"session.id":p.sessionID,small:(p.small??!1).toString(),agent:p.agent.name,mode:p.agent.mode,reason:S.reason})}return yield*r.logInfo("llm runtime selected",{"llm.runtime":"ai-sdk","llm.provider":p.model.providerID,"llm.model":p.model.id}),{type:"ai-sdk",result:Bu({onError(S){d.fork(r.logError("stream error",{providerID:p.model.providerID,modelID:p.model.id,"session.id":p.sessionID,small:(p.small??!1).toString(),agent:p.agent.name,mode:p.agent.mode,error:S}))},includeRawChunks:p.model.providerID.includes("github-copilot"),async experimental_repairToolCall(S){let E=S.toolCall.toolName.toLowerCase();if(!P.tools[S.toolCall.toolName]&&!P.tools[E]){let w=E.replace(/^(?:mcp_|alchemy_)+/,""),M=Object.keys(P.tools).filter(C=>C===w||C.endsWith(`_${w}`));if(w&&M.length===1)return{...S.toolCall,toolName:M[0]}}return E!==S.toolCall.toolName&&P.tools[E]?{...S.toolCall,toolName:E}:{...S.toolCall,input:JSON.stringify({tool:S.toolCall.toolName,error:S.error.message}),toolName:"invalid"}},temperature:P.params.temperature,topP:P.params.topP,topK:P.params.topK,providerOptions:et.providerOptions(p.model,P.params.options),activeTools:Object.keys(P.tools).filter(S=>S!=="invalid"),tools:P.tools,toolChoice:p.toolChoice,maxOutputTokens:P.params.maxOutputTokens,abortSignal:p.abort,headers:p.headers?{...P.headers,...p.headers}:P.headers,maxRetries:p.retries??0,messages:P.messages,model:$u({model:h,middleware:[{specificationVersion:"v3",async transformParams(S){return S.type==="stream"&&(S.params.prompt=et.message(S.params.prompt,p.model,P.messageTransformOptions,{messageCacheTtl:P.messageCacheTtl,points:p.cachePoints})),S.params}}]}),experimental_telemetry:{isEnabled:g.experimental?.openTelemetry,functionId:"session.llm",tracer:y,metadata:{userId:g.username??"unknown",sessionId:p.sessionID}}})}}),m=s(p=>Gs(zs(r.gen(function*(){let h=yield*r.acquireRelease(r.sync(()=>new AbortController),T=>r.sync(()=>T.abort()));yield*r.logInfo("llm stream start",{providerID:p.model.providerID,modelID:p.model.id});let g=yield*f({...p,abort:h.signal});if(g.type==="native")return g.stream;let I=ir.adapterState();return _d(g.result.fullStream,T=>T instanceof Error?T:new Error(String(T))).pipe(Ld(T=>ir.toLLMEvents(I,T)),Hs(T=>Ad(T)))}))),"stream");return ko.of({stream:m})})),rv=lr.hasToolCalls,sv=De.make({service:ko,layer:ov,deps:[Xt.node,Ne.node,bt.node,ft.node,Ze.node,Ee.node,cu,Ve.node]});var un={};fe(un,{DiffInput:()=>cv,Service:()=>dr,SessionSummary:()=>un,node:()=>lv});function iv(e){if(!e.startsWith('"')||!e.endsWith('"'))return e;let t=e.slice(1,-1),n=[];for(let o=0;o<t.length;o++){let i=t[o];if(i!=="\\"){n.push(i.charCodeAt(0));continue}let a=t[o+1];if(!a){n.push(92);continue}if(a>="0"&&a<="7"){let f=t.slice(o+1,o+4).match(/^[0-7]{1,3}/);if(!f){n.push(a.charCodeAt(0)),o++;continue}n.push(parseInt(f[0],8)),o+=f[0].length;continue}let l=a==="n"?`
986
+ `:a==="r"?"\r":a==="t"?" ":a==="b"?"\b":a==="f"?"\f":a==="v"?"\v":a==="\\"||a==='"'?a:void 0;n.push((l??a).charCodeAt(0)),o++}return Buffer.from(n).toString()}s(iv,"unquoteGitPath");var dr=class extends Ce.Service()("@opencode/SessionSummary"){static{s(this,"Service")}},av=Pe.effect(dr,r.gen(function*(){let e=yield*me.Service,t=yield*an.Service,n=yield*Ee.Service,o=yield*Ne.Service,i=r.fn("SessionSummary.computeDiff")(function*(u){let f,m;for(let p of u.messages){if(!f){for(let h of p.parts)if(h.type==="step-start"&&h.snapshot){f=h.snapshot;break}}for(let h of p.parts)h.type==="step-finish"&&h.snapshot&&(m=h.snapshot)}return f&&m?yield*t.diffFull(f,m):[]}),a=r.fn("SessionSummary.summarize")(function*(u){if(yield*e.setSummary({sessionID:u.sessionID,summary:{additions:0,deletions:0,files:0}}),yield*n.publish(me.Event.Diff,{sessionID:u.sessionID,diff:[]}),(yield*o.get()).snapshot===!1)return;let f=yield*e.messages({sessionID:u.sessionID}).pipe(r.orDie);if(!f.length)return;let m=f.filter(g=>g.info.id===u.messageID||g.info.role==="assistant"&&g.info.parentID===u.messageID),p=m.find(g=>g.info.id===u.messageID);if(!p||p.info.role!=="user")return;let h=yield*i({messages:m});p.info.summary={...p.info.summary,diffs:h},yield*e.updateMessage(p.info)}),l=r.fn("SessionSummary.diff")(function*(u){if(!u.messageID)return[];let f=(yield*e.messages({sessionID:u.sessionID}).pipe(r.orDie)).find(p=>p.info.id===u.messageID);return!f||f.info.role!=="user"?[]:(f.info.summary?.diffs??[]).map(p=>{if(p.file===void 0)return p;let h=iv(p.file);return h===p.file?p:{...p,file:h}})});return dr.of({summarize:a,diff:l,computeDiff:i})})),cv=c.Struct({sessionID:Rt,messageID:c.optional(ct)}),lv=De.make({service:dr,layer:av,deps:[me.node,an.node,Ee.node,Ne.node]});var jn={};fe(jn,{Service:()=>hr,SessionProcessor:()=>jn,node:()=>Av});var bn={};fe(bn,{DecodeError:()=>Ui,Image:()=>bn,InvalidDataUrlError:()=>ji,ResizerUnavailableError:()=>Ni,Service:()=>ur,SizeError:()=>gs,node:()=>Sv});import dv from"node:path";import{fileURLToPath as uv}from"node:url";var pv=5*1024*1024,fv=2e3,mv=2e3,hv=!0,gv=[80,85,70,55,40],yv=256*1024,bv=85,wv=.5,Ni=class extends c.TaggedErrorClass()("ImageResizerUnavailableError",{}){static{s(this,"ResizerUnavailableError")}get message(){return"Image resizer is unavailable"}},ji=class extends c.TaggedErrorClass()("ImageInvalidDataUrlError",{url:c.String}){static{s(this,"InvalidDataUrlError")}get message(){return"Image URL must be a base64 data URL"}},Ui=class extends c.TaggedErrorClass()("ImageDecodeError",{}){static{s(this,"DecodeError")}get message(){return"Image could not be decoded"}},gs=class extends c.TaggedErrorClass()("ImageSizeError",{bytes:c.Number,max:c.Number,width:c.Number,height:c.Number,max_width:c.Number,max_height:c.Number}){static{s(this,"SizeError")}get message(){return`Image ${this.width}x${this.height} with base64 size ${this.bytes} exceeds configured limits and could not be resized below ${this.max_width}x${this.max_height}/${this.max} bytes`}};function vv(e){let t=e.get_raw_pixels();for(let n=3;n<t.length;n+=4)if(t[n]!==255)return!1;return!0}s(vv,"opaque");var ur=class extends Ce.Service()("@opencode/Image"){static{s(this,"Service")}},xv=Pe.effect(ur,r.gen(function*(){let e=yield*Ne.Service,t=yield*r.cached(r.sync(()=>{globalThis.__OPENCODE_PHOTON_WASM_PATH=dv.isAbsolute(oi)?oi:uv(new URL(oi,import.meta.url))}).pipe(r.andThen(()=>r.tryPromise(()=>import("@silvia-odwyer/photon-node"))),r.tapError(o=>r.logWarning("failed to load photon",{error:o})),r.mapError(()=>new Ni))),n=r.fn("Image.normalize")(function*(o){let i=(yield*e.get()).attachment?.image,a={autoResize:i?.auto_resize??hv,maxWidth:i?.max_width??fv,maxHeight:i?.max_height??mv,maxBase64Bytes:i?.max_base64_bytes??pv};if(!o.url.startsWith("data:")||!o.url.includes(";base64,"))return yield*new ji({url:o.url});let l=o.url.slice(o.url.indexOf(";base64,")+8),u=Buffer.byteLength(l,"utf8"),f=yield*t,m=yield*r.try({try:s(()=>f.PhotonImage.new_from_byteslice(Buffer.from(l,"base64")),"try"),catch:s(()=>new Ui,"catch")}).pipe(r.tapError(p=>r.logWarning("failed to decode image",{error:p})));try{let p=m.get_width(),h=m.get_height();if(p<=a.maxWidth&&h<=a.maxHeight&&u<=a.maxBase64Bytes){if(o.mime!=="image/png"||u<yv||!vv(m))return o;let I=Buffer.from(m.get_bytes_jpeg(bv)).toString("base64");return Buffer.byteLength(I,"utf8")>u*wv?o:(yield*r.logInfo("using lighter image",{from:u,to:Buffer.byteLength(I,"utf8"),size:`${p}x${h}`}),{...o,mime:"image/jpeg",url:`data:image/jpeg;base64,${I}`})}if(!a.autoResize)return yield*new gs({bytes:u,max:a.maxBase64Bytes,width:p,height:h,max_width:a.maxWidth,max_height:a.maxHeight});let g=Math.min(1,a.maxWidth/p,a.maxHeight/h);for(let I of Array.from({length:32}).reduce(T=>{let v=T.at(-1)??{width:Math.max(1,Math.round(p*g)),height:Math.max(1,Math.round(h*g))},P=T.length===0?v:{width:v.width===1?1:Math.max(1,Math.floor(v.width*.75)),height:v.height===1?1:Math.max(1,Math.floor(v.height*.75))};return T.some(d=>d.width===P.width&&d.height===P.height)?T:[...T,P]},[])){let T=f.resize(m,I.width,I.height,f.SamplingFilter.Lanczos3),v=[{data:Buffer.from(T.get_bytes()).toString("base64"),mime:"image/png"},...gv.map(P=>({data:Buffer.from(T.get_bytes_jpeg(P)).toString("base64"),mime:"image/jpeg"}))].map(P=>({...P,bytes:Buffer.byteLength(P.data,"utf8")})).find(P=>P.bytes<=a.maxBase64Bytes);if(T.free(),v)return yield*r.logInfo("using resized image",{from_mime:o.mime,to_mime:v.mime,from:`${p}x${h}`,to:`${I.width}x${I.height}`}),{...o,mime:v.mime,url:`data:${v.mime};base64,${v.data}`}}return yield*new gs({bytes:u,max:a.maxBase64Bytes,width:p,height:h,max_width:a.maxWidth,max_height:a.maxHeight})}finally{m.free()}});return ur.of({normalize:n})})),Sv=De.make({service:ur,layer:xv,deps:[Ne.node]});var Iv=2e4,kv=.05;function Fi(e){let t=e.model.limit.context;if(t===0)return 0;let n=e.cfg.compaction?.reserved??(String(e.model.providerID)==="openai"&&e.model.limit.input?Math.round(e.model.limit.input*kv):Math.min(Iv,et.maxOutputTokens(e.model,e.outputTokenMax)));return e.model.limit.input?Math.max(0,e.model.limit.input-n):Math.max(0,t-et.maxOutputTokens(e.model,e.outputTokenMax))}s(Fi,"usable");function Bi(e){return e.cfg.compaction?.auto===!1||e.model.limit.context===0?!1:(e.tokens.total||e.tokens.input+e.tokens.output+e.tokens.cache.read+e.tokens.cache.write)>=Fi(e)}s(Bi,"isOverflow");var fr={};fe(fr,{GO_UPSELL_MESSAGE:()=>bf,GO_UPSELL_URL:()=>wf,RETRY_AFTER_MAX:()=>kf,RETRY_BACKOFF_FACTOR:()=>xf,RETRY_INITIAL_DELAY:()=>vf,RETRY_JITTER_FACTOR:()=>Sf,RETRY_MAX_BACKOFF:()=>If,RETRY_MAX_RETRIES:()=>Df,SessionRetry:()=>fr,delay:()=>Ef,policy:()=>Rv,retryable:()=>Tf});var bf="Free usage exceeded, subscribe to Go",wf="https://opencode.ai/go",vf=500,xf=2,Sf=.25,If=32e3,kf=6e5,Df=10,Dv=[/429|500|502|503|504|524/i,/rate increased too quickly|rate limit|rate-limit|rate_limit|too many requests/i,/overloaded|service unavailable|service_unavailable|service-unavailable|internal error|internal_error|internal server error|server error|server_error|server-error|provider returned error|provider_returned_error|provider-returned-error/i,/terminated|fetch failed|failed to fetch|network[-_\s]error|upstream connect|connection error|connection refused|connection lost|socket connection was closed|socket hang up|reset before headers|getaddrinfo|enotfound|eai_again|econnrefused|econnreset|etimedout/i,/^timeout$|\b(?:request|response|connection|network|stream|read) (?:timeout|timed out|time out)\b/i,/try your request again|retry your request|resource exhausted|resource_exhausted/i,/\btry again (?:later|in\b)|\b(?:currently|temporarily) at capacity\b/i];function Ev(e){let t=e?.data.responseHeaders;if(!t)return;let n=Number.parseFloat(t["retry-after-ms"]??"");if(!Number.isNaN(n)&&n>=0)return n;let o=t["retry-after"];if(!o)return;let i=Number.parseFloat(o);if(!Number.isNaN(i)&&i>=0)return Math.ceil(i*1e3);let a=Date.parse(o)-Date.now();if(!Number.isNaN(a)&&a>0)return Math.ceil(a)}s(Ev,"retryAfter");function Ef(e,t,n=Math.random()){let o=Ev(t);if(o!==void 0)return Math.min(o,kf);let i=Math.min(vf*Math.pow(xf,e-1),If);return Math.round(i*(1+Sf*n))}s(Ef,"delay");function Tv(e){return ut.APIError.isInstance(e)&&!!e.data.responseBody?.includes("FreeUsageLimitError")}s(Tv,"uncapped");function Tf(e,t){if(ut.ProviderQuotaError.isInstance(e)||ut.APIError.isInstance(e)&&e.data.metadata?.alchemyStop||ut.ContextOverflowError.isInstance(e))return;if(ut.APIError.isInstance(e)){let a=e.data.statusCode;if(!e.data.isRetryable&&!(a!==void 0&&a>=500)&&!Rc(e.data.message)&&!Rc(e.data.responseBody))return;if(e.data.responseBody?.includes("FreeUsageLimitError"))return{message:bf,action:{reason:"free_tier_limit",provider:t,title:"Free limit reached",message:"Subscribe to OpenCode Go for reliable access to the best open-source models for $10/month.",label:"subscribe",link:wf}};if(e.data.responseBody?.includes("GoUsageLimitError")){let l=yf(e.data.responseBody),u=pr(l?.metadata?.workspace),f=pr(l?.metadata?.limitName),m=Pv(e.data.responseHeaders?.["retry-after"]),p=Za(()=>{if(m===void 0)return"";let I=Math.max(0,Math.ceil(m)),T=Math.floor(I/86400),v=Math.floor(I%86400/3600),P=Math.ceil(I%3600/60),d=s((k,y)=>`${k} ${y}${k===1?"":"s"}`,"unit");return T>0?v>0?`${d(T,"day")} ${d(v,"hour")}`:d(T,"day"):v>0?P>0?`${d(v,"hour")} ${d(P,"minute")}`:d(v,"hour"):P>0?d(P,"minute"):"less than a minute"}),h=`${f?`${f} usage limit`:"Usage limit"} reached. It will reset in ${p}. To continue using this model now, enable usage from your available balance`,g=`https://opencode.ai/workspace/${u}/go`;return{message:`${h} - ${g}`,action:{reason:"account_rate_limit",provider:t,title:"Go limit reached",message:h,label:"open settings",link:g}}}return{message:e.data.message.includes("Overloaded")?"Provider is overloaded":e.data.message}}let n=pt(e.data)?e.data.message:void 0;if(typeof n!="string")return;let o=n.toLowerCase();if(o.includes("too_many_requests"))return{message:"Too Many Requests"};let i=yf(n);if(pt(i)){let a=pt(i.error)?i.error:{},l=pr(i.type),u=pr(a.code),f=pr(a.type);if(l==="api_error")return{message:"Provider server error"};if(l.includes("overloaded")||u.includes("exhausted")||u.includes("unavailable")||u.includes("overloaded")||f.includes("unavailable")||f.includes("overloaded")||u==="slow_down")return{message:"Provider is overloaded"}}if(o.includes("exhausted")||o.includes("unavailable"))return{message:"Provider is overloaded"};if(Rc(n))return{message:n}}s(Tf,"retryable");function Rc(e){return typeof e=="string"&&Dv.some(t=>t.test(e))}s(Rc,"matchesRetryableMessage");function pr(e){return e==null?"":String(e)}s(pr,"str");function Pv(e){let t=Number.parseFloat(pr(e));if(!Number.isNaN(t))return t}s(Pv,"num");function yf(e){return Za(()=>{try{return typeof e!="string"?void 0:JSON.parse(e)}catch{return}})}s(yf,"parseJSON");function Rv(e){return Pd.fromStepWithMetadata(r.succeed(t=>{let n=e.parse(t.input),o=Tf(n,e.provider);return o?t.attempt>Df&&!Tv(n)?ot.done(t.attempt):r.gen(function*(){let i=Ef(t.attempt,ut.APIError.isInstance(n)?n:void 0),a=yield*Td.currentTimeMillis;return yield*e.set({attempt:t.attempt,message:o.message,action:o.action,next:a+i}),[t.attempt,Ed.millis(i)]}):ot.done(t.attempt)}))}s(Rv,"policy");function Rf(e,t){if(Pf(t)!=="final_answer")return;let n=t.text.trim();if(n)return e.find(o=>o.type==="text"&&o.id!==t.id&&Pf(o)==="commentary"&&o.text.trim()===n)}s(Rf,"repeatedPreamble");function Pf(e){for(let t of Object.values(e.metadata??{}))if(t&&typeof t=="object"&&typeof t.phase=="string")return t.phase}s(Pf,"phaseOf");function Cf(e){let t=e instanceof Error?e.message:String(e),n=typeof import.meta.dirname=="string"?import.meta.dirname:void 0;return n&&t.includes("Cannot find module")&&t.includes(n)?"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.":t}s(Cf,"toolErrorText");var Ht;(m=>{let e=new Map;function t(p,h){let g={executing:0,ended:!1,end:h};return e.set(p,g),g}m.open=t,s(t,"open");function n(p,h){e.get(p)===h&&e.delete(p)}m.close=n,s(n,"close");function o(p){let h=e.get(p);return!h||h.ended||h.executing>0?!1:(h.ended=!0,h.end(),!0)}m.endForPerson=o,s(o,"endForPerson");function i(p){if(p){if(p.ended)return new Error("Not run: the user's message ended this step before this tool started.");p.executing++}}m.enter=i,s(i,"enter");function a(p){p&&p.executing>0&&p.executing--}m.leave=a,s(a,"leave");function l(p,h){let g=i(p);return g?Promise.reject(g):h()}m.run=l,s(l,"run");function u(p){a(e.get(p))}m.recorded=u,s(u,"recorded");function f(p){let h=new Set;for(let I of p)(I.type==="text"||I.type==="reasoning")&&!I.time?.end&&h.add(I.id),I.type==="tool"&&I.state.status==="pending"&&h.add(I.id);let g=s(I=>!h.has(I.id)&&(I.type==="text"||I.type==="tool"),"kept");for(let I=0;I<p.length;I++){let T=p[I];T.type!=="reasoning"||h.has(T.id)||p.slice(I+1).some(g)||h.add(T.id)}if(!p.some(g))for(let I of p)I.type==="step-start"&&h.add(I.id);return[...h]}m.toDrop=f,s(f,"toDrop")})(Ht||={});var mr;(a=>{a.LIMIT=12;let t=new Map;function n(l,u,f,m){if(!f)return t.delete(l),0;let p=`${u}\0${m.slice(0,300)}`,h=t.get(l),g=h&&h.sig===p?h.count+1:1;return t.set(l,{sig:p,count:g}),g}a.note=n,s(n,"note");function o(l){t.delete(l)}a.forget=o,s(o,"forget");function i(l,u,f){let m=f.replace(/\s+/g," ").trim().slice(0,160);return`It made the same failing call ${u} times in a row (${l}: "${m}"), so it was stopped.`}a.line=i,s(i,"line")})(mr||={});function Af(e,t,n,o){let i=mr.note(e,t,n,o);if(!(i<mr.LIMIT))throw mr.forget(e),new ut.APIError({message:mr.line(t,i,o),isRetryable:!1,metadata:{alchemyStop:"repeated-tool-failure",tool:t,count:String(i)}})}s(Af,"breakRepeat");var Mf=3,hr=class extends Ce.Service()("@opencode/SessionProcessor"){static{s(this,"Service")}},Cv=Pe.effect(hr,r.gen(function*(){let e=yield*me.Service,t=yield*Ne.Service,n=yield*an.Service,o=yield*Ft.Service,i=yield*dn.Service,a=yield*Ze.Service,l=yield*ft.Service,u=yield*un.Service,f=yield*Et.Scope,m=yield*ln.Service,p=yield*bn.Service,h=yield*Ee.Service,g=yield*tt.Service,I=yield*Qn.Service,T=r.fn("SessionProcessor.create")(function*(v){let P=yield*n.track(),d={assistantMessage:v.assistantMessage,sessionID:v.sessionID,model:v.model,toolcalls:{},shouldBreak:!1,snapshot:P,blocked:!1,needsCompaction:!1,currentText:void 0,reasoningMap:{}},k=!1,y={},S={},E=s(R=>{let Y=nt.fromError(R,{providerID:v.model.providerID,aborted:k});if(Y?.name==="MessageAbortedError"&&!k){let J=R,te=J?.cause;globalThis.process.stderr.write(`level=WARN service=session.processor message="stream aborted without an interrupt" ${JSON.stringify({sessionID:v.sessionID,name:String(J?.name??""),message:String(J?.message??""),stack:String(J?.stack??"").slice(0,1500),cause:te?`${String(te.name??"")}: ${String(te.message??"")} ${String(te.stack??"").slice(0,800)}`:""})}
987
+ `)}return Y},"parse"),w=r.fn("SessionProcessor.settleToolCall")(function*(R){let Y=d.toolcalls[R]?.done;delete d.toolcalls[R],Y&&(yield*gt.succeed(Y,void 0).pipe(r.ignore))}),M=r.fn("SessionProcessor.readToolCall")(function*(R){let Y=d.toolcalls[R];if(!Y)return;let J=yield*e.getPart({partID:Y.partID,messageID:Y.messageID,sessionID:Y.sessionID});if(!J||J.type!=="tool"){delete d.toolcalls[R];return}return{call:Y,part:J}}),C=r.fn("SessionProcessor.updateToolCall")(function*(R,Y){let J=yield*M(R);if(!J)return;let te=yield*e.updatePart(Y(J.part));return d.toolcalls[R]={...J.call,partID:te.id,messageID:te.messageID,sessionID:te.sessionID},te}),$=r.fn("SessionProcessor.bounded")(function*(R,Y){let J=yield*o.get(d.assistantMessage.agent).pipe(r.catch(()=>r.succeed(void 0)));return yield*I.output(R,{failed:Y},J)}),U=r.fn("SessionProcessor.completeToolCall")(function*(R,Y){let J=yield*M(R);if(!J||J.part.state.status!=="running")return Ht.recorded(d.sessionID);let te=Y.metadata?.truncated===void 0?yield*$(Y.output,!1):void 0,ke=te?.truncated?{...Y,output:te.content,metadata:{...Y.metadata,truncated:!0,outputPath:te.outputPath}}:Y;yield*e.updatePart({...J.part,state:{status:"completed",input:J.part.state.input,output:ke.output,metadata:ke.metadata,title:ke.title,time:{start:J.part.state.time.start,end:Date.now()},attachments:ke.attachments}}),yield*w(R),Ht.recorded(d.sessionID),Af(d.sessionID,J.part.tool,ke.metadata?.isError===!0,String(ke.output??""))}),H=r.fn("SessionProcessor.failToolCall")(function*(R,Y){let J=yield*M(R);if(!J||J.part.state.status!=="running")return Ht.recorded(d.sessionID),!1;let te=yield*$(Cf(Y),!0);return yield*e.updatePart({...J.part,state:{status:"error",input:J.part.state.input,error:te.content,metadata:te.truncated?{...J.part.state.metadata,truncated:!0,outputPath:te.outputPath}:J.part.state.metadata,time:{start:J.part.state.time.start,end:Date.now()}}}),(Y instanceof ri.RejectedError||Y instanceof Qt.RejectedError)&&(d.blocked=d.shouldBreak),yield*w(R),Ht.recorded(d.sessionID),Af(d.sessionID,J.part.tool,!0,te.content),!0}),ue=r.fn("SessionProcessor.finishReasoning")(function*(R){R in d.reasoningMap&&(d.reasoningMap[R].text=d.reasoningMap[R].text,d.reasoningMap[R].time={...d.reasoningMap[R].time,end:Date.now()},yield*e.updatePart(d.reasoningMap[R]),delete d.reasoningMap[R])}),L=r.fn("SessionProcessor.ensureToolCall")(function*(R){let Y=yield*M(R.id);if(Y){if(!R.providerExecuted||Y.part.metadata?.providerExecuted)return Y;let te=yield*e.updatePart({...Y.part,metadata:{...Y.part.metadata,providerExecuted:!0}});return d.toolcalls[R.id]={...Y.call,partID:te.id,messageID:te.messageID,sessionID:te.sessionID},{call:d.toolcalls[R.id],part:te}}let J=yield*e.updatePart({id:We.ascending(),messageID:d.assistantMessage.id,sessionID:d.assistantMessage.sessionID,type:"tool",tool:R.name,callID:R.id,state:{status:"pending",input:{},raw:""},metadata:R.providerExecuted?{providerExecuted:!0}:void 0});return d.toolcalls[R.id]={done:yield*gt.make(),partID:J.id,messageID:J.messageID,sessionID:J.sessionID},{call:d.toolcalls[R.id],part:J}}),W=s(R=>c.is(ut.FilePart)(R),"isFilePart"),D=s(R=>pt(R.result.value)&&typeof R.result.value.output=="string"?{title:typeof R.result.value.title=="string"?R.result.value.title:R.name,metadata:pt(R.result.value.metadata)?R.result.value.metadata:{},output:R.result.value.output,attachments:Array.isArray(R.result.value.attachments)?R.result.value.attachments.filter(W):void 0}:{title:R.name,metadata:R.result.type==="json"&&pt(R.result.value)?R.result.value:{},output:typeof R.result.value=="string"?R.result.value:JSON.stringify(R.result.value)??""},"toolResultOutput"),A=r.fnUntraced(function*(R){switch(R.type){case"reasoning-start":if(R.id in d.reasoningMap)return;d.reasoningMap[R.id]={id:We.ascending(),messageID:d.assistantMessage.id,sessionID:d.assistantMessage.sessionID,type:"reasoning",text:"",time:{start:Date.now()},metadata:R.providerMetadata},yield*e.updatePart(d.reasoningMap[R.id]);return;case"reasoning-delta":if(!(R.id in d.reasoningMap))return;d.reasoningMap[R.id].text+=R.text,R.providerMetadata&&(d.reasoningMap[R.id].metadata=R.providerMetadata),yield*e.updatePartDelta({sessionID:d.reasoningMap[R.id].sessionID,messageID:d.reasoningMap[R.id].messageID,partID:d.reasoningMap[R.id].id,field:"text",delta:R.text});return;case"reasoning-end":R.providerMetadata&&R.id in d.reasoningMap&&(d.reasoningMap[R.id].metadata=R.providerMetadata),yield*ue(R.id);return;case"tool-input-start":if(d.assistantMessage.summary)throw new Error(`Tool call not allowed while generating summary: ${R.name}`);yield*L(R);return;case"tool-input-delta":{let Y=yield*L(R);if(Y.part.state.status!=="pending")return;let J=(S[R.id]??Y.part.state.raw??"")+R.text,te=Date.now();if(te-(y[R.id]??0)<2e3){S[R.id]=J;return}y[R.id]=te,delete S[R.id],yield*C(R.id,ke=>ke.state.status==="pending"?{...ke,state:{...ke.state,raw:J}}:ke),yield*e.touch(d.sessionID);return}case"tool-input-end":{yield*L(R);return}case"tool-call":{if(d.assistantMessage.summary)throw new Error(`Tool call not allowed while generating summary: ${R.name}`);yield*L(R);let Y=pt(R.input)?R.input:{value:R.input};yield*C(R.id,He=>({...He,tool:R.name,state:He.state.status==="running"?{...He.state,input:Y}:{status:"running",input:Y,time:{start:Date.now()}},metadata:He.metadata?.providerExecuted?{...R.providerMetadata,providerExecuted:!0}:R.providerMetadata}));let te=(yield*nt.parts(d.assistantMessage.id).pipe(r.provideService(tt.Service,g))).slice(-Mf);if(te.length!==Mf||!te.every(He=>He.type==="tool"&&He.tool===R.name&&He.state.status!=="pending"&&JSON.stringify(He.state.input)===JSON.stringify(Y)))return;let ke=yield*o.get(d.assistantMessage.agent);yield*a.ask({permission:"doom_loop",patterns:[R.name],sessionID:d.assistantMessage.sessionID,metadata:{tool:R.name,input:Y},always:[R.name],ruleset:ke.permission});return}case"tool-result":{if(!(yield*M(R.id))&&R.result.type==="error")return;if(R.result.type==="error"){yield*H(R.id,R.result.value);return}let J=D(R),te=yield*r.forEach(J.attachments??[],x=>x.mime.startsWith("image/")?p.normalize(x).pipe(r.catchIf(G=>G instanceof bn.ResizerUnavailableError,()=>r.succeed(x)),r.exit):r.succeed(wt.succeed(x))),ke=te.filter(wt.isFailure).length,He=te.filter(wt.isSuccess).map(x=>x.value),Pn={...J,output:ke===0?J.output:`${J.output}
988
988
 
989
- [${ke} image${ke===1?"":"s"} omitted: could not be resized below the image size limit.]`,attachments:He.length?He:void 0};yield*U(R.id,Pn);return}case"tool-error":{yield*H(R.id,R.error??new Error(R.message));return}case"provider-error":throw new Error(R.message);case"step-start":d.snapshot||(d.snapshot=yield*n.track()),yield*e.updatePart({id:We.ascending(),messageID:d.assistantMessage.id,sessionID:d.sessionID,snapshot:d.snapshot,type:"step-start"});return;case"step-finish":{let Y=yield*n.track();yield*r.forEach(Object.keys(d.reasoningMap),ue);let J=pt(R.providerMetadata?.anthropic)?R.providerMetadata.anthropic.inputTransformations:void 0;d.model.api.npm==="@ai-sdk/anthropic"&&it.log("thinking check",{"session.id":d.sessionID,step:d.assistantMessage.id,dropped:Array.isArray(J)?J.length:0,entries:Array.isArray(J)?J.map(ke=>({path:ke?.path,reason:ke?.reason,type:ke?.type})):[]}),Array.isArray(J)&&J.length>0&&(yield*r.logWarning("thinking blocks dropped by provider",{sessionID:d.sessionID,messageID:d.assistantMessage.id,model:d.model.id,transformations:JSON.stringify(J)}));let te=me.getUsage({model:d.model,usage:R.usage??new Mn({}),metadata:R.providerMetadata});if(d.assistantMessage.finish=R.reason,d.assistantMessage.cost+=te.cost,d.assistantMessage.tokens=te.tokens,R.responseModelID&&(d.assistantMessage.servedModelID=R.responseModelID),yield*e.updatePart({id:We.ascending(),reason:R.reason,snapshot:Y,messageID:d.assistantMessage.id,sessionID:d.assistantMessage.sessionID,type:"step-finish",tokens:te.tokens,cost:te.cost}),yield*e.updateMessage(d.assistantMessage),d.snapshot){let ke=yield*n.patch(d.snapshot);ke.files.length&&(yield*e.updatePart({id:We.ascending(),messageID:d.assistantMessage.id,sessionID:d.sessionID,type:"patch",hash:ke.hash,files:ke.files})),d.snapshot=void 0}yield*u.summarize({sessionID:d.sessionID,messageID:d.assistantMessage.parentID}).pipe(r.ignore,r.forkIn(f)),!d.assistantMessage.summary&&Bi({cfg:yield*t.get(),tokens:te.tokens,model:d.model})&&(d.needsCompaction=!0);return}case"text-start":d.currentText={id:We.ascending(),messageID:d.assistantMessage.id,sessionID:d.assistantMessage.sessionID,type:"text",text:"",time:{start:Date.now()},metadata:R.providerMetadata},yield*e.updatePart(d.currentText);return;case"text-delta":if(!d.currentText)return;d.currentText.text+=R.text,R.providerMetadata&&(d.currentText.metadata=R.providerMetadata),yield*e.updatePartDelta({sessionID:d.currentText.sessionID,messageID:d.currentText.messageID,partID:d.currentText.id,field:"text",delta:R.text});return;case"text-end":if(!d.currentText)return;d.currentText.text=d.currentText.text,d.currentText.text=(yield*l.trigger("experimental.text.complete",{sessionID:d.sessionID,messageID:d.assistantMessage.id,partID:d.currentText.id},{text:d.currentText.text})).text;{let Y=Date.now();d.currentText.time={start:d.currentText.time?.start??Y,end:Y}}R.providerMetadata&&(d.currentText.metadata=R.providerMetadata),yield*e.updatePart(d.currentText);{let Y=yield*nt.parts(d.assistantMessage.id).pipe(r.provideService(tt.Service,g)),J=Rf(Y,d.currentText);J&&(yield*e.removePart({sessionID:J.sessionID,messageID:J.messageID,partID:J.id}))}d.currentText=void 0;return;case"finish":return}}),_=r.fn("SessionProcessor.cleanup")(function*(){if(d.snapshot){let R=yield*n.patch(d.snapshot);R.files.length&&(yield*e.updatePart({id:We.ascending(),messageID:d.assistantMessage.id,sessionID:d.sessionID,type:"patch",hash:R.hash,files:R.files})),d.snapshot=void 0}if(d.currentText){let R=Date.now();d.currentText.time={start:d.currentText.time?.start??R,end:R},yield*e.updatePart(d.currentText),d.currentText=void 0}for(let R of Object.values(d.reasoningMap)){let Y=Date.now();yield*e.updatePart({...R,time:{start:R.time.start??Y,end:Y}})}d.reasoningMap={},yield*r.forEach(Object.values(d.toolcalls),R=>gt.await(R.done).pipe(r.timeout("250 millis"),r.ignore),{concurrency:"unbounded"});for(let R of Object.keys(d.toolcalls)){let Y=yield*M(R);if(!Y)continue;let J=Y.part,te=Date.now(),ke="metadata"in J.state&&pt(J.state.metadata)?J.state.metadata:{};yield*e.updatePart({...J,state:{...J.state,status:"error",error:"Tool execution aborted",metadata:{...ke,interrupted:!0},time:{start:"time"in J.state?J.state.time.start:te,end:te}}})}d.toolcalls={},d.assistantMessage.time.completed=Date.now(),yield*e.updateMessage(d.assistantMessage)}),N=r.fn("SessionProcessor.halt")(function*(R){yield*r.logError("process",{"session.id":v.sessionID,messageID:v.assistantMessage.id,error:gn(R),stack:R instanceof Error?R.stack:void 0});let Y=E(R);if(ut.ContextOverflowError.isInstance(Y)){if((yield*t.get()).compaction?.auto===!1&&!d.assistantMessage.summary){d.assistantMessage.error=Y,d.assistantMessage.finish="error",yield*h.publish(me.Event.Error,{sessionID:d.sessionID,error:Y}),yield*m.set(d.sessionID,{type:"idle"});return}d.needsCompaction=!0,yield*h.publish(me.Event.Error,{sessionID:d.sessionID,error:Y});return}d.assistantMessage.error=Y,yield*h.publish(me.Event.Error,{sessionID:d.assistantMessage.sessionID,error:d.assistantMessage.error}),yield*m.set(d.sessionID,{type:"idle"})}),q=new Set,j=s(()=>nt.parts(d.assistantMessage.id).pipe(r.provideService(tt.Service,g),r.map(R=>R.filter(Y=>!q.has(Y.id)))),"attemptParts"),ve=s(R=>(R.type==="text"||R.type==="reasoning")&&!R.time?.end,"unfinished"),pe=r.fn("SessionProcessor.dropAttempt")(function*(){d.currentText=void 0,d.reasoningMap={};for(let R of yield*j())R.type!=="text"&&R.type!=="reasoning"&&R.type!=="step-start"||(yield*e.removePart({sessionID:R.sessionID,messageID:R.messageID,partID:R.id}))}),ae=r.fn("SessionProcessor.keepFinished")(function*(R){if(!fr.retryable(E(R),v.model.providerID))return yield*r.fail(R);let Y=yield*j();if(!Y.some(te=>te.type==="tool"&&(te.state.status==="completed"||te.state.status==="error")))return yield*r.fail(R);yield*r.logInfo("step failed after a tool finished; continuing from its finished items",{error:gn(R)}),d.currentText=void 0,d.reasoningMap={};for(let te of Y)ve(te)&&(yield*e.removePart({sessionID:te.sessionID,messageID:te.messageID,partID:te.id}));d.assistantMessage.finish="tool-calls"}),oe=!1,$e=r.fn("SessionProcessor.endForPerson")(function*(){d.currentText=void 0,d.reasoningMap={};let R=yield*j(),Y=new Set(Ht.toDrop(R));for(let J of R)Y.has(J.id)&&(J.type==="tool"&&delete d.toolcalls[J.callID],yield*e.removePart({sessionID:J.sessionID,messageID:J.messageID,partID:J.id}));d.assistantMessage.finish="tool-calls",yield*r.logInfo("step ended for a person's message",{sessionID:d.sessionID,messageID:d.assistantMessage.id,dropped:Y.size})}),Le=r.fn("SessionProcessor.process")(function*(R){yield*r.logInfo("process",{"session.id":v.sessionID,messageID:v.assistantMessage.id}),d.needsCompaction=!1,d.shouldBreak=(yield*t.get()).experimental?.continue_loop_on_deny!==!0;let Y=0,J=v.preempt?.pipe(r.andThen(r.sync(()=>{oe=!0})));return yield*r.gen(function*(){return yield*r.gen(function*(){if(oe)return;Y++>0&&(yield*pe()),q=new Set((yield*nt.parts(d.assistantMessage.id).pipe(r.provideService(tt.Service,g))).map(ke=>ke.id)),d.currentText=void 0,d.reasoningMap={},yield*m.set(d.sessionID,{type:"busy"});let te=i.stream(R).pipe(Nd(ke=>A(ke)),Ud(()=>d.needsCompaction));yield*J?r.raceFirst(te.pipe(Na),J):te.pipe(Na),oe&&(yield*$e())}).pipe(r.onInterrupt(te=>r.gen(function*(){yield*r.logWarning("turn interrupted",{sessionID:d.sessionID,interruptors:[...te].map(ke=>String(ke)).join(","),attempt:Y}),k=!0,d.assistantMessage.error||(yield*N(new DOMException("Aborted","AbortError")))})),r.catchCauseIf(te=>!ot.hasInterruptsOnly(te),te=>r.fail(ot.squash(te))),r.catch(ae),r.retry(fr.policy({provider:v.model.providerID,parse:E,set:s(te=>m.set(d.sessionID,{type:"retry",attempt:te.attempt,message:te.message,action:te.action,next:te.next}),"set")})),r.catch(N),r.ensuring(_())),d.needsCompaction?"compact":d.blocked||d.assistantMessage.error?"stop":"continue"})});return{get message(){return d.assistantMessage},updateToolCall:C,completeToolCall:U,process:Le}});return hr.of({create:T})})),Cv=De.make({service:hr,layer:Rv,deps:[me.node,Ne.node,an.node,Ft.node,dn.node,Ze.node,ft.node,un.node,ln.node,bn.node,Ee.node,tt.node,Qn.node]});var gr={};fe(gr,{Event:()=>Uf,PRUNE_MINIMUM:()=>Ff,PRUNE_PROTECT:()=>Bf,Service:()=>Do,SessionCompaction:()=>gr,lastStep:()=>Cc,node:()=>Hv,summaryOnPrefix:()=>jf,use:()=>zv});var ys={};fe(ys,{Compacted:()=>_f,Definitions:()=>Av,SessionCompactionEvent:()=>ys});var _f=Tt.define({type:"session.compacted",schema:{sessionID:Cn}}),Av=Tt.inventory(_f);import Mv from"path";import{readFile as _v}from"fs/promises";var $i="The messages before this compaction, word for word (newest last):";function Of(e){let t=[];for(let i of e)if(!(i.info.role!=="user"||i.parts.some(a=>a.type==="compaction"))){for(let a of i.parts)if(!(a.type!=="text"||!a.text?.trim())){if(!a.synthetic)t.push(a.text.trim());else if(a.text.includes($i)){let l=a.text.slice(a.text.indexOf($i)+$i.length).split(`
989
+ [${ke} image${ke===1?"":"s"} omitted: could not be resized below the image size limit.]`,attachments:He.length?He:void 0};yield*U(R.id,Pn);return}case"tool-error":{yield*H(R.id,R.error??new Error(R.message));return}case"provider-error":throw new Error(R.message);case"step-start":d.snapshot||(d.snapshot=yield*n.track()),yield*e.updatePart({id:We.ascending(),messageID:d.assistantMessage.id,sessionID:d.sessionID,snapshot:d.snapshot,type:"step-start"});return;case"step-finish":{let Y=yield*n.track();yield*r.forEach(Object.keys(d.reasoningMap),ue);let J=pt(R.providerMetadata?.anthropic)?R.providerMetadata.anthropic.inputTransformations:void 0;d.model.api.npm==="@ai-sdk/anthropic"&&it.log("thinking check",{"session.id":d.sessionID,step:d.assistantMessage.id,dropped:Array.isArray(J)?J.length:0,entries:Array.isArray(J)?J.map(ke=>({path:ke?.path,reason:ke?.reason,type:ke?.type})):[]}),Array.isArray(J)&&J.length>0&&(yield*r.logWarning("thinking blocks dropped by provider",{sessionID:d.sessionID,messageID:d.assistantMessage.id,model:d.model.id,transformations:JSON.stringify(J)}));let te=me.getUsage({model:d.model,usage:R.usage??new Mn({}),metadata:R.providerMetadata});if(d.assistantMessage.finish=R.reason,d.assistantMessage.cost+=te.cost,d.assistantMessage.tokens=te.tokens,R.responseModelID&&(d.assistantMessage.servedModelID=R.responseModelID),yield*e.updatePart({id:We.ascending(),reason:R.reason,snapshot:Y,messageID:d.assistantMessage.id,sessionID:d.assistantMessage.sessionID,type:"step-finish",tokens:te.tokens,cost:te.cost}),yield*e.updateMessage(d.assistantMessage),d.snapshot){let ke=yield*n.patch(d.snapshot);ke.files.length&&(yield*e.updatePart({id:We.ascending(),messageID:d.assistantMessage.id,sessionID:d.sessionID,type:"patch",hash:ke.hash,files:ke.files})),d.snapshot=void 0}yield*u.summarize({sessionID:d.sessionID,messageID:d.assistantMessage.parentID}).pipe(r.ignore,r.forkIn(f)),!d.assistantMessage.summary&&Bi({cfg:yield*t.get(),tokens:te.tokens,model:d.model})&&(d.needsCompaction=!0);return}case"text-start":d.currentText={id:We.ascending(),messageID:d.assistantMessage.id,sessionID:d.assistantMessage.sessionID,type:"text",text:"",time:{start:Date.now()},metadata:R.providerMetadata},yield*e.updatePart(d.currentText);return;case"text-delta":if(!d.currentText)return;d.currentText.text+=R.text,R.providerMetadata&&(d.currentText.metadata=R.providerMetadata),yield*e.updatePartDelta({sessionID:d.currentText.sessionID,messageID:d.currentText.messageID,partID:d.currentText.id,field:"text",delta:R.text});return;case"text-end":if(!d.currentText)return;d.currentText.text=d.currentText.text,d.currentText.text=(yield*l.trigger("experimental.text.complete",{sessionID:d.sessionID,messageID:d.assistantMessage.id,partID:d.currentText.id},{text:d.currentText.text})).text;{let Y=Date.now();d.currentText.time={start:d.currentText.time?.start??Y,end:Y}}R.providerMetadata&&(d.currentText.metadata=R.providerMetadata),yield*e.updatePart(d.currentText);{let Y=yield*nt.parts(d.assistantMessage.id).pipe(r.provideService(tt.Service,g)),J=Rf(Y,d.currentText);J&&(yield*e.removePart({sessionID:J.sessionID,messageID:J.messageID,partID:J.id}))}d.currentText=void 0;return;case"finish":return}}),_=r.fn("SessionProcessor.cleanup")(function*(){if(d.snapshot){let R=yield*n.patch(d.snapshot);R.files.length&&(yield*e.updatePart({id:We.ascending(),messageID:d.assistantMessage.id,sessionID:d.sessionID,type:"patch",hash:R.hash,files:R.files})),d.snapshot=void 0}if(d.currentText){let R=Date.now();d.currentText.time={start:d.currentText.time?.start??R,end:R},yield*e.updatePart(d.currentText),d.currentText=void 0}for(let R of Object.values(d.reasoningMap)){let Y=Date.now();yield*e.updatePart({...R,time:{start:R.time.start??Y,end:Y}})}d.reasoningMap={},yield*r.forEach(Object.values(d.toolcalls),R=>gt.await(R.done).pipe(r.timeout("250 millis"),r.ignore),{concurrency:"unbounded"});for(let R of Object.keys(d.toolcalls)){let Y=yield*M(R);if(!Y)continue;let J=Y.part,te=Date.now(),ke="metadata"in J.state&&pt(J.state.metadata)?J.state.metadata:{};yield*e.updatePart({...J,state:{...J.state,status:"error",error:"Tool execution aborted",metadata:{...ke,interrupted:!0},time:{start:"time"in J.state?J.state.time.start:te,end:te}}})}d.toolcalls={},d.assistantMessage.time.completed=Date.now(),yield*e.updateMessage(d.assistantMessage)}),N=r.fn("SessionProcessor.halt")(function*(R){yield*r.logError("process",{"session.id":v.sessionID,messageID:v.assistantMessage.id,error:gn(R),stack:R instanceof Error?R.stack:void 0});let Y=E(R);if(ut.ContextOverflowError.isInstance(Y)){if((yield*t.get()).compaction?.auto===!1&&!d.assistantMessage.summary){d.assistantMessage.error=Y,d.assistantMessage.finish="error",yield*h.publish(me.Event.Error,{sessionID:d.sessionID,error:Y}),yield*m.set(d.sessionID,{type:"idle"});return}d.needsCompaction=!0,yield*h.publish(me.Event.Error,{sessionID:d.sessionID,error:Y});return}d.assistantMessage.error=Y,yield*h.publish(me.Event.Error,{sessionID:d.assistantMessage.sessionID,error:d.assistantMessage.error}),yield*m.set(d.sessionID,{type:"idle"})}),q=new Set,j=s(()=>nt.parts(d.assistantMessage.id).pipe(r.provideService(tt.Service,g),r.map(R=>R.filter(Y=>!q.has(Y.id)))),"attemptParts"),ve=s(R=>(R.type==="text"||R.type==="reasoning")&&!R.time?.end,"unfinished"),pe=r.fn("SessionProcessor.dropAttempt")(function*(){d.currentText=void 0,d.reasoningMap={};for(let R of yield*j())R.type!=="text"&&R.type!=="reasoning"&&R.type!=="step-start"||(yield*e.removePart({sessionID:R.sessionID,messageID:R.messageID,partID:R.id}))}),ae=r.fn("SessionProcessor.keepFinished")(function*(R){if(!fr.retryable(E(R),v.model.providerID))return yield*r.fail(R);let Y=yield*j();if(!Y.some(te=>te.type==="tool"&&(te.state.status==="completed"||te.state.status==="error")))return yield*r.fail(R);yield*r.logInfo("step failed after a tool finished; continuing from its finished items",{error:gn(R)}),d.currentText=void 0,d.reasoningMap={};for(let te of Y)ve(te)&&(yield*e.removePart({sessionID:te.sessionID,messageID:te.messageID,partID:te.id}));d.assistantMessage.finish="tool-calls"}),oe=!1,$e=r.fn("SessionProcessor.endForPerson")(function*(){d.currentText=void 0,d.reasoningMap={};let R=yield*j(),Y=new Set(Ht.toDrop(R));for(let J of R)Y.has(J.id)&&(J.type==="tool"&&delete d.toolcalls[J.callID],yield*e.removePart({sessionID:J.sessionID,messageID:J.messageID,partID:J.id}));d.assistantMessage.finish="tool-calls",yield*r.logInfo("step ended for a person's message",{sessionID:d.sessionID,messageID:d.assistantMessage.id,dropped:Y.size})}),Le=r.fn("SessionProcessor.process")(function*(R){yield*r.logInfo("process",{"session.id":v.sessionID,messageID:v.assistantMessage.id}),d.needsCompaction=!1,d.shouldBreak=(yield*t.get()).experimental?.continue_loop_on_deny!==!0;let Y=0,J=v.preempt?.pipe(r.andThen(r.sync(()=>{oe=!0})));return yield*r.gen(function*(){return yield*r.gen(function*(){if(oe)return;Y++>0&&(yield*pe()),q=new Set((yield*nt.parts(d.assistantMessage.id).pipe(r.provideService(tt.Service,g))).map(ke=>ke.id)),d.currentText=void 0,d.reasoningMap={},yield*m.set(d.sessionID,{type:"busy"});let te=i.stream(R).pipe(Nd(ke=>A(ke)),Ud(()=>d.needsCompaction));yield*J?r.raceFirst(te.pipe(Na),J):te.pipe(Na),oe&&(yield*$e())}).pipe(r.onInterrupt(te=>r.gen(function*(){yield*r.logWarning("turn interrupted",{sessionID:d.sessionID,interruptors:[...te].map(ke=>String(ke)).join(","),attempt:Y}),k=!0,d.assistantMessage.error||(yield*N(new DOMException("Aborted","AbortError")))})),r.catchCauseIf(te=>!ot.hasInterruptsOnly(te),te=>r.fail(ot.squash(te))),r.catch(ae),r.retry(fr.policy({provider:v.model.providerID,parse:E,set:s(te=>m.set(d.sessionID,{type:"retry",attempt:te.attempt,message:te.message,action:te.action,next:te.next}),"set")})),r.catch(N),r.ensuring(_())),d.needsCompaction?"compact":d.blocked||d.assistantMessage.error?"stop":"continue"})});return{get message(){return d.assistantMessage},updateToolCall:C,completeToolCall:U,process:Le}});return hr.of({create:T})})),Av=De.make({service:hr,layer:Cv,deps:[me.node,Ne.node,an.node,Ft.node,dn.node,Ze.node,ft.node,un.node,ln.node,bn.node,Ee.node,tt.node,Qn.node]});var gr={};fe(gr,{Event:()=>Uf,PRUNE_MINIMUM:()=>Ff,PRUNE_PROTECT:()=>Bf,Service:()=>Do,SessionCompaction:()=>gr,lastStep:()=>Cc,node:()=>Yv,summaryOnPrefix:()=>jf,use:()=>Gv});var ys={};fe(ys,{Compacted:()=>_f,Definitions:()=>Mv,SessionCompactionEvent:()=>ys});var _f=Tt.define({type:"session.compacted",schema:{sessionID:Cn}}),Mv=Tt.inventory(_f);import _v from"path";import{readFile as Ov}from"fs/promises";var $i="The messages before this compaction, word for word (newest last):";function Of(e){let t=[];for(let i of e)if(!(i.info.role!=="user"||i.parts.some(a=>a.type==="compaction"))){for(let a of i.parts)if(!(a.type!=="text"||!a.text?.trim())){if(!a.synthetic)t.push(a.text.trim());else if(a.text.includes($i)){let l=a.text.slice(a.text.indexOf($i)+$i.length).split(`
990
990
 
991
991
  <<<END>>>`)[0];t.push(...l.split(`
992
992
 
@@ -1000,20 +1000,20 @@ ${n.join(`
1000
1000
 
1001
1001
  `)}
1002
1002
 
1003
- <<<END>>>`}s(Of,"wordsToCarry");async function Ov(e,t){if(!Xr.ALCHEMYLAB)return"";try{let n=JSON.parse(await _v(Mv.join(e,".alchemy_lab","action-server.json"),"utf8"));if(!n?.port)return"";let o=await fetch(`http://127.0.0.1:${n.port}/api/sessions/${encodeURIComponent(t)}/after-compaction`,{signal:AbortSignal.timeout(8e3),headers:typeof n.secret=="string"?{"x-alchemy-local":n.secret}:{}});if(!o.ok)return"";let i=await o.json();return String(i?.data?.text??"").trim()}catch{return""}}s(Ov,"recordsAfterCompaction");function Cc(e){let t;for(let n of e){let o=n.info;o.role!=="assistant"||o.summary||o.aside||!o.finish||o.error||(!t||o.time.created>t.time.created||o.time.created===t.time.created&&o.id>t.id)&&(t=o)}return t}s(Cc,"lastStep");function jf(e){let t=e.step;if(!t||t.providerID!==e.model.providerID||t.modelID!==e.model.id||t.tokens.cache.read+t.tokens.cache.write<=0)return!1;let n=et.cacheWarmForMs(e.model,e.cacheTtl==="5m"?"5m":void 0);return n===void 0?!1:e.now-t.time.created<n}s(jf,"summaryOnPrefix");var Uf=ys,Ff=2e4,Bf=4e4,Lf=2e3,Lv=["skill"],Nv=2e3,jv=15e3,Uv=4e3,Fv=s(e=>e.length<=Lf?e:`${e.slice(0,Lf)}
1004
- [truncated]`,"truncate"),Bv=s(e=>{if(e.info.role==="user"){let t=e.parts.filter(o=>o.type==="text"&&!o.ignored).map(o=>o.text).filter(Boolean).join(`
1003
+ <<<END>>>`}s(Of,"wordsToCarry");async function Lv(e,t){if(!Xr.ALCHEMYLAB)return"";try{let n=JSON.parse(await Ov(_v.join(e,".alchemy_lab","action-server.json"),"utf8"));if(!n?.port)return"";let o=await fetch(`http://127.0.0.1:${n.port}/api/sessions/${encodeURIComponent(t)}/after-compaction`,{signal:AbortSignal.timeout(8e3),headers:typeof n.secret=="string"?{"x-alchemy-local":n.secret}:{}});if(!o.ok)return"";let i=await o.json();return String(i?.data?.text??"").trim()}catch{return""}}s(Lv,"recordsAfterCompaction");function Cc(e){let t;for(let n of e){let o=n.info;o.role!=="assistant"||o.summary||o.aside||!o.finish||o.error||(!t||o.time.created>t.time.created||o.time.created===t.time.created&&o.id>t.id)&&(t=o)}return t}s(Cc,"lastStep");function jf(e){let t=e.step;if(!t||t.providerID!==e.model.providerID||t.modelID!==e.model.id||t.tokens.cache.read+t.tokens.cache.write<=0)return!1;let n=et.cacheWarmForMs(e.model,e.cacheTtl==="5m"?"5m":void 0);return n===void 0?!1:e.now-t.time.created<n}s(jf,"summaryOnPrefix");var Uf=ys,Ff=2e4,Bf=4e4,Lf=2e3,Nv=["skill"],jv=2e3,Uv=15e3,Fv=4e3,Bv=s(e=>e.length<=Lf?e:`${e.slice(0,Lf)}
1004
+ [truncated]`,"truncate"),$v=s(e=>{if(e.info.role==="user"){let t=e.parts.filter(o=>o.type==="text"&&!o.ignored).map(o=>o.text).filter(Boolean).join(`
1005
1005
  `),n=e.parts.flatMap(o=>o.type==="file"?[`[Attached ${o.mime}: ${o.filename??"file"}]`]:[]);return[...t?[`[User]: ${t}`]:[],...n].join(`
1006
- `)}return e.parts.flatMap(t=>{if(t.type==="text")return t.text?[`[Assistant]: ${t.text}`]:[];if(t.type==="reasoning")return t.text?[`[Assistant reasoning]: ${t.text}`]:[];if(t.type!=="tool")return[];let n=`[Assistant tool call]: ${t.tool}(${JSON.stringify(t.state.input)})`;if(t.state.status==="completed"){let o=(t.state.attachments??[]).map(a=>`[Attached ${a.mime}: ${a.filename??"file"}]`),i=t.state.time.compacted?"[Old tool result content cleared]":Fv([t.state.output,...o].join(`
1006
+ `)}return e.parts.flatMap(t=>{if(t.type==="text")return t.text?[`[Assistant]: ${t.text}`]:[];if(t.type==="reasoning")return t.text?[`[Assistant reasoning]: ${t.text}`]:[];if(t.type!=="tool")return[];let n=`[Assistant tool call]: ${t.tool}(${JSON.stringify(t.state.input)})`;if(t.state.status==="completed"){let o=(t.state.attachments??[]).map(a=>`[Attached ${a.mime}: ${a.filename??"file"}]`),i=t.state.time.compacted?"[Old tool result content cleared]":Bv([t.state.output,...o].join(`
1007
1007
  `));return[n,`[Tool result]: ${i}`]}return t.state.status==="error"?[n,`[Tool error]: ${t.state.error}`]:[n]}).join(`
1008
- `)},"serialize");function $v(e){return e.parts.filter(n=>n.type==="text").map(n=>n.text.trim()).filter(Boolean).join(`
1008
+ `)},"serialize");function qv(e){return e.parts.filter(n=>n.type==="text").map(n=>n.text.trim()).filter(Boolean).join(`
1009
1009
 
1010
- `).trim()||void 0}s($v,"summaryText");function qv(e){let t=new Map;for(let n=0;n<e.length;n++){let o=e[n];o.info.role==="user"&&o.parts.some(i=>i.type==="compaction")&&t.set(o.info.id,n)}return e.flatMap((n,o)=>{if(n.info.role!=="assistant")return[];if(!n.info.summary||!n.info.finish||n.info.error)return[];let i=t.get(n.info.parentID);return i===void 0?[]:[{userIndex:i,assistantIndex:o,summary:$v(n)}]})}s(qv,"completedCompactions");function Nf(e){return e.cfg.compaction?.preserve_recent_tokens??Math.min(jv,Math.max(Nv,Math.floor(Fi(e)*.25)))}s(Nf,"preserveRecentBudget");function Wv(e){let t=[];for(let n=0;n<e.length;n++){let o=e[n];o.info.role==="user"&&(o.parts.some(i=>i.type==="compaction")||t.push({start:n,end:e.length,id:o.info.id}))}for(let n=0;n<t.length-1;n++)t[n].end=t[n+1].start;return t}s(Wv,"turns");function Vv(e){return r.gen(function*(){if(!(e.budget<=0)&&!(e.turn.end-e.turn.start<=1)){for(let t=e.turn.start+1;t<e.turn.end;t++)if(!((yield*e.estimate({messages:e.messages.slice(t,e.turn.end),model:e.model}))>e.budget))return{start:t,id:e.messages[t].info.id}}})}s(Vv,"splitTurn");var Do=class extends Ce.Service()("@opencode/SessionCompaction"){static{s(this,"Service")}},zv=Wt(Do),Gv=Pe.effect(Do,r.gen(function*(){let e=yield*Ne.Service,t=yield*me.Service,n=yield*Ft.Service,o=yield*ft.Service,i=yield*jn.Service,a=yield*bt.Service,l=yield*Ee.Service,u=yield*Ve.Service,f=yield*dn.Service,m=r.fn("SessionCompaction.isOverflow")(function*(d){return Bi({cfg:yield*e.get(),tokens:d.tokens,model:d.model,outputTokenMax:u.outputTokenMax})}),p=r.fn("SessionCompaction.estimate")(function*(d){let k=yield*nt.toModelMessagesEffect(d.messages,d.model);return ci.estimate(JSON.stringify(k))}),h=r.fn("SessionCompaction.select")(function*(d){let k=d.cfg.compaction?.tail_turns;if(k!==void 0&&k<=0)return{head:d.messages,tail_start_id:void 0};let y=Nf({cfg:d.cfg,model:d.model}),x=Wv(d.messages);if(!x.length)return{head:d.messages,tail_start_id:void 0};let E=k===void 0?x:x.slice(-k),w=0,M;for(let C=E.length-1;C>=0;C--){let $=E[C],U=yield*p({messages:d.messages.slice($.start,$.end),model:d.model});if(w+U<=y){w+=U,M={start:$.start,id:$.id};continue}let H=y-w,ue=yield*Vv({messages:d.messages,turn:$,model:d.model,budget:H,estimate:p});ue?M=ue:M||(yield*r.logInfo("tail fallback",{budget:y,size:U,total:w}));break}return!M||M.start===0?{head:d.messages,tail_start_id:void 0}:{head:d.messages.slice(0,M.start),tail_start_id:M.id}}),g=r.fn("SessionCompaction.prune")(function*(d){if(!(yield*e.get()).compaction?.prune)return;yield*r.logInfo("pruning");let y=yield*t.messages({sessionID:d.sessionID}).pipe(r.catchIf(mi.isInstance,()=>r.succeed(void 0)));if(!y)return;let x=0,E=0,w=[],M=0;e:for(let C=y.length-1;C>=0;C--){let $=y[C];if($.info.role==="user"&&M++,!(M<2)){if($.info.role==="assistant"&&$.info.summary)break e;for(let U=$.parts.length-1;U>=0;U--){let H=$.parts[U];if(H.type!=="tool"||H.state.status!=="completed"||Lv.includes(H.tool))continue;if(H.state.time.compacted)break e;let ue=ci.estimate(H.state.output);x+=ue,!(x<=Bf)&&(E+=ue,w.push(H))}}}if(yield*r.logInfo("found",{pruned:E,total:x}),E>Ff){for(let C of w)C.state.status==="completed"&&(C.state.time.compacted=Date.now(),yield*t.updatePart(C));yield*r.logInfo("pruned",{count:w.length})}}),I=r.fn("SessionCompaction.serverSummary")(function*(d){let k=s((ae,oe)=>r.sync(()=>(it.log("fallback to today's compaction",{"session.id":d.sessionID,reason:ae,...oe}),{fallback:ae})),"fallback"),y=d.step,x=yield*d.prefix(y);if(!x)return yield*k("the session's prefix could not be rebuilt");let E=yield*r.forEach(d.history,ae=>p({messages:[ae],model:d.model})),w=y.tokens.input+y.tokens.cache.read+y.tokens.cache.write+y.tokens.output,M=E.reduce((ae,oe)=>ae+oe,0),C=Math.floor(Fi({cfg:d.cfg,model:d.model,outputTokenMax:u.outputTokenMax})*.75)-Math.max(0,w-M)-Uv,$=Math.min(Nf({cfg:d.cfg,model:d.model}),Math.max(0,C)),U=it.cut(d.history,E,$),H=structuredClone(U?d.history.slice(0,U.index):d.history);yield*o.trigger("experimental.chat.messages.transform",{},{messages:H});let ue=yield*nt.toModelMessagesEffect(H,d.model),L=crypto.randomUUID();it.log("compacting",{"session.id":d.sessionID,head:H.length,kept:U?d.history.length-U.index:0,keptFrom:U?.id,keptTokens:U?.tokens??0,budget:$,room:C,context:w});let W,D=yield*f.stream({user:x.user,agent:x.agent,permission:x.permission,sessionID:d.sessionID,parentSessionID:x.parentSessionID,system:x.system,tools:x.tools,messages:ue,model:d.model,cachePoints:"all",headers:{[it.HEADER]:L}}).pipe(Js(ae=>r.sync(()=>{ae.type==="step-finish"&&(W={usage:ae.usage,providerMetadata:ae.providerMetadata})})),r.as("ok"),r.catchCause(ae=>ot.hasInterruptsOnly(ae)?r.interrupt:r.succeed(String(ot.squash(ae)).slice(0,500)))),A=it.take(L);if(D!=="ok")return yield*k("the compaction request failed",{error:D,status:A?.status,body:A?.error});if(!A?.block)return yield*k("the reply carried no compaction block",{status:A?.status,stop:A?.stopReason,body:A?.error});let _=(A.usage?.iterations??[]).find(ae=>ae?.type==="compaction"),N=_?new Mn({inputTokens:(_.input_tokens??0)+(_.cache_read_input_tokens??0)+(_.cache_creation_input_tokens??0),outputTokens:_.output_tokens??0,totalTokens:(_.input_tokens??0)+(_.cache_read_input_tokens??0)+(_.cache_creation_input_tokens??0)+(_.output_tokens??0),cacheReadInputTokens:_.cache_read_input_tokens??0,cacheWriteInputTokens:_.cache_creation_input_tokens??0}):W?.usage??new Mn({}),q=me.getUsage({model:d.model,usage:N,metadata:W?.providerMetadata}),j=yield*V.context,ve=Date.now(),pe={id:ct.ascending(),role:"assistant",parentID:d.parentID,sessionID:d.sessionID,mode:"compaction",agent:"compaction",variant:d.userMessage.model.variant,summary:!0,path:{cwd:j.directory,root:j.worktree},cost:q.cost,tokens:q.tokens,modelID:d.model.id,providerID:d.model.providerID,finish:"stop",time:{created:ve,completed:ve}};return yield*t.updateMessage(pe),it.remember(A.block),yield*t.updatePart({id:We.ascending(),messageID:pe.id,sessionID:d.sessionID,type:"text",text:A.block.content,time:{start:ve,end:ve},metadata:{[it.METADATA_KEY]:{block:A.block,system:[]}}}),it.log("block stored",{"session.id":d.sessionID,message:pe.id,chars:A.block.content.length,signature:typeof A.block.signature=="string"?A.block.signature.length:0,keptFrom:U?.id,usage:A.usage,inputTransformations:A.inputTransformations??[]}),{message:pe,tailStartID:U?.id}}),T=s(d=>r.sync(()=>{let k=Cc(d.history),y=d.tailStartID?d.history.findIndex(M=>M.info.id===d.tailStartID):-1,x=y<0?[]:d.history.slice(y).filter(M=>M.info.role==="assistant"&&!M.info.summary&&!M.info.aside),E=x.filter(M=>M.parts.some(C=>C.type==="reasoning"&&typeof C.metadata?.anthropic?.signature=="string")),w=d.message.tokens;it.log("compaction done",{"session.id":d.sessionID,agent:d.agent,model:`${d.model.providerID}/${d.model.id}`,path:d.path,...d.then?{then:d.then}:{},result:d.result,contextBefore:k?k.tokens.input+k.tokens.cache.read+k.tokens.cache.write+k.tokens.output:0,usage:{input:w.input,cacheRead:w.cache.read,cacheWrite:w.cache.write,output:w.output+w.reasoning},cost:d.message.cost,keptSteps:x.length,keptWithThinking:E.length})}),"logDone"),v=r.fn("SessionCompaction.process")(function*(d){let k=d.messages.findLast(oe=>oe.info.id===d.parentID);if(!k||k.info.role!=="user")throw new Error(`Compaction parent must be a user message: ${d.parentID}`);let y=k.info,x=k.parts.find(oe=>oe.type==="compaction"),E=d.messages,w;if(d.overflow){let oe=d.messages.findIndex(Le=>Le.info.id===d.parentID);for(let Le=oe-1;Le>=0;Le--){let R=d.messages[Le];if(R.info.role==="user"&&!R.parts.some(Y=>Y.type==="compaction")){w={info:R.info,parts:R.parts},E=d.messages.slice(0,Le);break}}w&&E.some(Le=>Le.info.role==="user"&&!Le.parts.some(R=>R.type==="compaction"))||(w=void 0,E=d.messages)}let M=yield*n.get("compaction"),C=M.model?yield*a.getModel(M.model.providerID,M.model.modelID).pipe(r.orDie):yield*a.getModel(y.model.providerID,y.model.modelID).pipe(r.orDie),$=yield*e.get(),U=x&&E.at(-1)?.info.id===d.parentID?E.slice(0,-1):E,H=qv(U),ue=new Set(H.flatMap(oe=>[oe.userIndex,oe.assistantIndex])),L=H.at(-1)?.summary,W=yield*V.context,D=d.prefix&&!d.overflow&&!M.model?Cc(U):void 0,A=D?yield*n.get(D.agent):void 0,_=!!D&&!!A&&jf({step:D,model:C,cacheTtl:A.options?.cacheTtl,now:Date.now()}),N=_&&D&&d.prefix&&it.on()&&it.supports(C)?yield*I({sessionID:d.sessionID,parentID:d.parentID,history:U,model:C,userMessage:y,step:D,prefix:d.prefix,cfg:$}):void 0,q=N&&"message"in N?N:void 0;q&&x&&x.tail_start_id!==q.tailStartID&&(yield*t.updatePart({...x,tail_start_id:q.tailStartID}));let j=!q&&_&&D&&d.prefix?yield*d.prefix(D):void 0,ve=r.gen(function*(){let oe=yield*o.trigger("experimental.session.compacting",{sessionID:d.sessionID},{context:[],prompt:void 0}),$e=j?void 0:yield*h({messages:U.filter((He,Pn)=>!ue.has(Pn)),cfg:$,model:C}),Le=structuredClone($e?$e.head:U);yield*o.trigger("experimental.chat.messages.transform",{},{messages:Le});let R=j?"":Le.map(Bv).filter(Boolean).join(`
1010
+ `).trim()||void 0}s(qv,"summaryText");function Wv(e){let t=new Map;for(let n=0;n<e.length;n++){let o=e[n];o.info.role==="user"&&o.parts.some(i=>i.type==="compaction")&&t.set(o.info.id,n)}return e.flatMap((n,o)=>{if(n.info.role!=="assistant")return[];if(!n.info.summary||!n.info.finish||n.info.error)return[];let i=t.get(n.info.parentID);return i===void 0?[]:[{userIndex:i,assistantIndex:o,summary:qv(n)}]})}s(Wv,"completedCompactions");function Nf(e){return e.cfg.compaction?.preserve_recent_tokens??Math.min(Uv,Math.max(jv,Math.floor(Fi(e)*.25)))}s(Nf,"preserveRecentBudget");function Vv(e){let t=[];for(let n=0;n<e.length;n++){let o=e[n];o.info.role==="user"&&(o.parts.some(i=>i.type==="compaction")||t.push({start:n,end:e.length,id:o.info.id}))}for(let n=0;n<t.length-1;n++)t[n].end=t[n+1].start;return t}s(Vv,"turns");function zv(e){return r.gen(function*(){if(!(e.budget<=0)&&!(e.turn.end-e.turn.start<=1)){for(let t=e.turn.start+1;t<e.turn.end;t++)if(!((yield*e.estimate({messages:e.messages.slice(t,e.turn.end),model:e.model}))>e.budget))return{start:t,id:e.messages[t].info.id}}})}s(zv,"splitTurn");var Do=class extends Ce.Service()("@opencode/SessionCompaction"){static{s(this,"Service")}},Gv=Wt(Do),Hv=Pe.effect(Do,r.gen(function*(){let e=yield*Ne.Service,t=yield*me.Service,n=yield*Ft.Service,o=yield*ft.Service,i=yield*jn.Service,a=yield*bt.Service,l=yield*Ee.Service,u=yield*Ve.Service,f=yield*dn.Service,m=r.fn("SessionCompaction.isOverflow")(function*(d){return Bi({cfg:yield*e.get(),tokens:d.tokens,model:d.model,outputTokenMax:u.outputTokenMax})}),p=r.fn("SessionCompaction.estimate")(function*(d){let k=yield*nt.toModelMessagesEffect(d.messages,d.model);return ci.estimate(JSON.stringify(k))}),h=r.fn("SessionCompaction.select")(function*(d){let k=d.cfg.compaction?.tail_turns;if(k!==void 0&&k<=0)return{head:d.messages,tail_start_id:void 0};let y=Nf({cfg:d.cfg,model:d.model}),S=Vv(d.messages);if(!S.length)return{head:d.messages,tail_start_id:void 0};let E=k===void 0?S:S.slice(-k),w=0,M;for(let C=E.length-1;C>=0;C--){let $=E[C],U=yield*p({messages:d.messages.slice($.start,$.end),model:d.model});if(w+U<=y){w+=U,M={start:$.start,id:$.id};continue}let H=y-w,ue=yield*zv({messages:d.messages,turn:$,model:d.model,budget:H,estimate:p});ue?M=ue:M||(yield*r.logInfo("tail fallback",{budget:y,size:U,total:w}));break}return!M||M.start===0?{head:d.messages,tail_start_id:void 0}:{head:d.messages.slice(0,M.start),tail_start_id:M.id}}),g=r.fn("SessionCompaction.prune")(function*(d){if(!(yield*e.get()).compaction?.prune)return;yield*r.logInfo("pruning");let y=yield*t.messages({sessionID:d.sessionID}).pipe(r.catchIf(mi.isInstance,()=>r.succeed(void 0)));if(!y)return;let S=0,E=0,w=[],M=0;e:for(let C=y.length-1;C>=0;C--){let $=y[C];if($.info.role==="user"&&M++,!(M<2)){if($.info.role==="assistant"&&$.info.summary)break e;for(let U=$.parts.length-1;U>=0;U--){let H=$.parts[U];if(H.type!=="tool"||H.state.status!=="completed"||Nv.includes(H.tool))continue;if(H.state.time.compacted)break e;let ue=ci.estimate(H.state.output);S+=ue,!(S<=Bf)&&(E+=ue,w.push(H))}}}if(yield*r.logInfo("found",{pruned:E,total:S}),E>Ff){for(let C of w)C.state.status==="completed"&&(C.state.time.compacted=Date.now(),yield*t.updatePart(C));yield*r.logInfo("pruned",{count:w.length})}}),I=r.fn("SessionCompaction.serverSummary")(function*(d){let k=s((ae,oe)=>r.sync(()=>(it.log("fallback to today's compaction",{"session.id":d.sessionID,reason:ae,...oe}),{fallback:ae})),"fallback"),y=d.step,S=yield*d.prefix(y);if(!S)return yield*k("the session's prefix could not be rebuilt");let E=yield*r.forEach(d.history,ae=>p({messages:[ae],model:d.model})),w=y.tokens.input+y.tokens.cache.read+y.tokens.cache.write+y.tokens.output,M=E.reduce((ae,oe)=>ae+oe,0),C=Math.floor(Fi({cfg:d.cfg,model:d.model,outputTokenMax:u.outputTokenMax})*.75)-Math.max(0,w-M)-Fv,$=Math.min(Nf({cfg:d.cfg,model:d.model}),Math.max(0,C)),U=it.cut(d.history,E,$),H=structuredClone(U?d.history.slice(0,U.index):d.history);yield*o.trigger("experimental.chat.messages.transform",{},{messages:H});let ue=yield*nt.toModelMessagesEffect(H,d.model),L=crypto.randomUUID();it.log("compacting",{"session.id":d.sessionID,head:H.length,kept:U?d.history.length-U.index:0,keptFrom:U?.id,keptTokens:U?.tokens??0,budget:$,room:C,context:w});let W,D=yield*f.stream({user:S.user,agent:S.agent,permission:S.permission,sessionID:d.sessionID,parentSessionID:S.parentSessionID,system:S.system,tools:S.tools,messages:ue,model:d.model,cachePoints:"all",headers:{[it.HEADER]:L}}).pipe(Js(ae=>r.sync(()=>{ae.type==="step-finish"&&(W={usage:ae.usage,providerMetadata:ae.providerMetadata})})),r.as("ok"),r.catchCause(ae=>ot.hasInterruptsOnly(ae)?r.interrupt:r.succeed(String(ot.squash(ae)).slice(0,500)))),A=it.take(L);if(D!=="ok")return yield*k("the compaction request failed",{error:D,status:A?.status,body:A?.error});if(!A?.block)return yield*k("the reply carried no compaction block",{status:A?.status,stop:A?.stopReason,body:A?.error});let _=(A.usage?.iterations??[]).find(ae=>ae?.type==="compaction"),N=_?new Mn({inputTokens:(_.input_tokens??0)+(_.cache_read_input_tokens??0)+(_.cache_creation_input_tokens??0),outputTokens:_.output_tokens??0,totalTokens:(_.input_tokens??0)+(_.cache_read_input_tokens??0)+(_.cache_creation_input_tokens??0)+(_.output_tokens??0),cacheReadInputTokens:_.cache_read_input_tokens??0,cacheWriteInputTokens:_.cache_creation_input_tokens??0}):W?.usage??new Mn({}),q=me.getUsage({model:d.model,usage:N,metadata:W?.providerMetadata}),j=yield*V.context,ve=Date.now(),pe={id:ct.ascending(),role:"assistant",parentID:d.parentID,sessionID:d.sessionID,mode:"compaction",agent:"compaction",variant:d.userMessage.model.variant,summary:!0,path:{cwd:j.directory,root:j.worktree},cost:q.cost,tokens:q.tokens,modelID:d.model.id,providerID:d.model.providerID,finish:"stop",time:{created:ve,completed:ve}};return yield*t.updateMessage(pe),it.remember(A.block),yield*t.updatePart({id:We.ascending(),messageID:pe.id,sessionID:d.sessionID,type:"text",text:A.block.content,time:{start:ve,end:ve},metadata:{[it.METADATA_KEY]:{block:A.block,system:[]}}}),it.log("block stored",{"session.id":d.sessionID,message:pe.id,chars:A.block.content.length,signature:typeof A.block.signature=="string"?A.block.signature.length:0,keptFrom:U?.id,usage:A.usage,inputTransformations:A.inputTransformations??[]}),{message:pe,tailStartID:U?.id}}),T=s(d=>r.sync(()=>{let k=Cc(d.history),y=d.tailStartID?d.history.findIndex(M=>M.info.id===d.tailStartID):-1,S=y<0?[]:d.history.slice(y).filter(M=>M.info.role==="assistant"&&!M.info.summary&&!M.info.aside),E=S.filter(M=>M.parts.some(C=>C.type==="reasoning"&&typeof C.metadata?.anthropic?.signature=="string")),w=d.message.tokens;it.log("compaction done",{"session.id":d.sessionID,agent:d.agent,model:`${d.model.providerID}/${d.model.id}`,path:d.path,...d.then?{then:d.then}:{},result:d.result,contextBefore:k?k.tokens.input+k.tokens.cache.read+k.tokens.cache.write+k.tokens.output:0,usage:{input:w.input,cacheRead:w.cache.read,cacheWrite:w.cache.write,output:w.output+w.reasoning},cost:d.message.cost,keptSteps:S.length,keptWithThinking:E.length})}),"logDone"),v=r.fn("SessionCompaction.process")(function*(d){let k=d.messages.findLast(oe=>oe.info.id===d.parentID);if(!k||k.info.role!=="user")throw new Error(`Compaction parent must be a user message: ${d.parentID}`);let y=k.info,S=k.parts.find(oe=>oe.type==="compaction"),E=d.messages,w;if(d.overflow){let oe=d.messages.findIndex(Le=>Le.info.id===d.parentID);for(let Le=oe-1;Le>=0;Le--){let R=d.messages[Le];if(R.info.role==="user"&&!R.parts.some(Y=>Y.type==="compaction")){w={info:R.info,parts:R.parts},E=d.messages.slice(0,Le);break}}w&&E.some(Le=>Le.info.role==="user"&&!Le.parts.some(R=>R.type==="compaction"))||(w=void 0,E=d.messages)}let M=yield*n.get("compaction"),C=M.model?yield*a.getModel(M.model.providerID,M.model.modelID).pipe(r.orDie):yield*a.getModel(y.model.providerID,y.model.modelID).pipe(r.orDie),$=yield*e.get(),U=S&&E.at(-1)?.info.id===d.parentID?E.slice(0,-1):E,H=Wv(U),ue=new Set(H.flatMap(oe=>[oe.userIndex,oe.assistantIndex])),L=H.at(-1)?.summary,W=yield*V.context,D=d.prefix&&!d.overflow&&!M.model?Cc(U):void 0,A=D?yield*n.get(D.agent):void 0,_=!!D&&!!A&&jf({step:D,model:C,cacheTtl:A.options?.cacheTtl,now:Date.now()}),N=_&&D&&d.prefix&&it.on()&&it.supports(C)?yield*I({sessionID:d.sessionID,parentID:d.parentID,history:U,model:C,userMessage:y,step:D,prefix:d.prefix,cfg:$}):void 0,q=N&&"message"in N?N:void 0;q&&S&&S.tail_start_id!==q.tailStartID&&(yield*t.updatePart({...S,tail_start_id:q.tailStartID}));let j=!q&&_&&D&&d.prefix?yield*d.prefix(D):void 0,ve=r.gen(function*(){let oe=yield*o.trigger("experimental.session.compacting",{sessionID:d.sessionID},{context:[],prompt:void 0}),$e=j?void 0:yield*h({messages:U.filter((He,Pn)=>!ue.has(Pn)),cfg:$,model:C}),Le=structuredClone($e?$e.head:U);yield*o.trigger("experimental.chat.messages.transform",{},{messages:Le});let R=j?"":Le.map($v).filter(Boolean).join(`
1011
1011
 
1012
1012
  `),Y=oe.prompt??[j?Mu({previousSummary:H.length>0}):Au({previousSummary:L,context:[R]}),...oe.context].filter(Boolean).join(`
1013
1013
 
1014
1014
  `),J={id:ct.ascending(),role:"assistant",parentID:d.parentID,sessionID:d.sessionID,mode:"compaction",agent:"compaction",variant:y.model.variant,summary:!0,path:{cwd:W.directory,root:W.worktree},cost:0,tokens:{output:0,input:0,reasoning:0,cache:{read:0,write:0}},modelID:C.id,providerID:C.providerID,time:{created:Date.now()}};yield*t.updateMessage(J);let te=yield*i.create({assistantMessage:J,sessionID:d.sessionID,model:C});yield*r.logInfo(j?"compacting on the session's own prefix":"compacting a serialized history",{"session.id":d.sessionID,step:D?.id,overflow:!!d.overflow,ownModel:!!M.model});let ke=yield*te.process(j?{user:j.user,agent:j.agent,permission:j.permission,sessionID:d.sessionID,parentSessionID:j.parentSessionID,tools:j.tools,system:j.system,messages:[...yield*nt.toModelMessagesEffect(Le,C),{role:"user",content:[{type:"text",text:Y}]}],model:C,cachePoints:"history"}:{user:y,agent:M,sessionID:d.sessionID,tools:{},system:[],messages:[{role:"user",content:[{type:"text",text:[Y,...oe.prompt?["The following is the conversation history:",R]:[]].filter(Boolean).join(`
1015
1015
 
1016
- `)}]}],model:C,cachePoints:"none"});return ke==="compact"?(te.message.error=new ut.ContextOverflowError({message:w?"Conversation history too large to compact - exceeds model context limit":"Session too large to compact - context exceeds model limit even after stripping media"}).toObject(),te.message.finish="error",yield*t.updateMessage(te.message),{result:"stop",message:te.message,tailStartID:void 0,onPrefix:!!j}):(x&&$e?.tail_start_id&&x.tail_start_id!==$e.tail_start_id&&(yield*t.updatePart({...x,tail_start_id:$e.tail_start_id})),{result:ke,message:te.message,tailStartID:$e?.tail_start_id,onPrefix:!!j})}),pe=q?{result:"continue",message:q.message,tailStartID:q.tailStartID,onPrefix:!1}:yield*ve;if(yield*T({sessionID:d.sessionID,agent:D?.agent??y.agent,model:C,path:q?"anthropic":N&&"fallback"in N?`fallback:${N.fallback}`:pe.onPrefix?"prefix":"condensed",then:N&&"fallback"in N?pe.onPrefix?"prefix":"condensed":void 0,history:U,message:pe.message,tailStartID:pe.tailStartID,result:pe.result}),pe.result==="stop"&&pe.message.error)return"stop";let ae=pe.result;if(ae==="continue"&&d.auto){if(w){let oe=w.info,$e=yield*t.updateMessage({id:ct.ascending(),role:"user",sessionID:d.sessionID,time:{created:Date.now()},agent:oe.agent,model:oe.model,format:oe.format,tools:oe.tools,system:oe.system});for(let Le of w.parts){if(Le.type==="compaction")continue;let R=Le.type==="file"&&nt.isMedia(Le.mime)?{type:"text",text:`[Attached ${Le.mime}: ${Le.filename??"file"}]`}:Le;yield*t.updatePart({...R,id:We.ascending(),messageID:$e.id,sessionID:d.sessionID})}}if(!w){let oe=yield*a.getProvider(y.model.providerID);if((yield*o.trigger("experimental.compaction.autocontinue",{sessionID:d.sessionID,agent:y.agent,model:yield*a.getModel(y.model.providerID,y.model.modelID).pipe(r.orDie),provider:{source:oe.source,info:oe,options:oe.options},message:y,overflow:d.overflow===!0},{enabled:!0})).enabled){let $e=yield*t.updateMessage({id:ct.ascending(),role:"user",sessionID:d.sessionID,time:{created:Date.now()},agent:y.agent,model:y.model}),Le=yield*r.promise(()=>Ov(W.directory,d.sessionID)),R=Of(d.messages),Y=(d.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.
1016
+ `)}]}],model:C,cachePoints:"none"});return ke==="compact"?(te.message.error=new ut.ContextOverflowError({message:w?"Conversation history too large to compact - exceeds model context limit":"Session too large to compact - context exceeds model limit even after stripping media"}).toObject(),te.message.finish="error",yield*t.updateMessage(te.message),{result:"stop",message:te.message,tailStartID:void 0,onPrefix:!!j}):(S&&$e?.tail_start_id&&S.tail_start_id!==$e.tail_start_id&&(yield*t.updatePart({...S,tail_start_id:$e.tail_start_id})),{result:ke,message:te.message,tailStartID:$e?.tail_start_id,onPrefix:!!j})}),pe=q?{result:"continue",message:q.message,tailStartID:q.tailStartID,onPrefix:!1}:yield*ve;if(yield*T({sessionID:d.sessionID,agent:D?.agent??y.agent,model:C,path:q?"anthropic":N&&"fallback"in N?`fallback:${N.fallback}`:pe.onPrefix?"prefix":"condensed",then:N&&"fallback"in N?pe.onPrefix?"prefix":"condensed":void 0,history:U,message:pe.message,tailStartID:pe.tailStartID,result:pe.result}),pe.result==="stop"&&pe.message.error)return"stop";let ae=pe.result;if(ae==="continue"&&d.auto){if(w){let oe=w.info,$e=yield*t.updateMessage({id:ct.ascending(),role:"user",sessionID:d.sessionID,time:{created:Date.now()},agent:oe.agent,model:oe.model,format:oe.format,tools:oe.tools,system:oe.system});for(let Le of w.parts){if(Le.type==="compaction")continue;let R=Le.type==="file"&&nt.isMedia(Le.mime)?{type:"text",text:`[Attached ${Le.mime}: ${Le.filename??"file"}]`}:Le;yield*t.updatePart({...R,id:We.ascending(),messageID:$e.id,sessionID:d.sessionID})}}if(!w){let oe=yield*a.getProvider(y.model.providerID);if((yield*o.trigger("experimental.compaction.autocontinue",{sessionID:d.sessionID,agent:y.agent,model:yield*a.getModel(y.model.providerID,y.model.modelID).pipe(r.orDie),provider:{source:oe.source,info:oe,options:oe.options},message:y,overflow:d.overflow===!0},{enabled:!0})).enabled){let $e=yield*t.updateMessage({id:ct.ascending(),role:"user",sessionID:d.sessionID,time:{created:Date.now()},agent:y.agent,model:y.model}),Le=yield*r.promise(()=>Lv(W.directory,d.sessionID)),R=Of(d.messages),Y=(d.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.
1017
1017
 
1018
1018
  `:"")+"This session was compacted automatically to free context: the summary above covers the earlier part of it, and nothing else has happened since. "+(R||Le?`Below are the messages it received and the records as they stand now.
1019
1019
 
@@ -1023,15 +1023,15 @@ ${n.join(`
1023
1023
 
1024
1024
  `:"")+(Le?`${Le}
1025
1025
 
1026
- `:"")+"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*t.updatePart({id:We.ascending(),messageID:$e.id,sessionID:d.sessionID,type:"text",metadata:{compaction_continue:!0},synthetic:!0,text:Y,time:{start:Date.now(),end:Date.now()}})}}}return pe.message.error?"stop":(ae==="continue"&&(yield*l.publish(Uf.Compacted,{sessionID:d.sessionID})),ae)}),P=r.fn("SessionCompaction.create")(function*(d){let k=yield*t.updateMessage({id:ct.ascending(),role:"user",model:d.model,sessionID:d.sessionID,agent:d.agent,time:{created:Date.now()}});yield*t.updatePart({id:We.ascending(),messageID:k.id,sessionID:k.sessionID,type:"compaction",auto:d.auto,overflow:d.overflow})});return Do.of({isOverflow:m,prune:g,process:v,create:P})})),Hv=De.make({service:Do,layer:Gv,deps:[Ne.node,me.node,Ft.node,ft.node,jn.node,bt.node,Ee.node,Ve.node,dn.node]});var br={};fe(br,{RevertInput:()=>Yv,Service:()=>yr,SessionRevert:()=>br,node:()=>Kv});var Yv=c.Struct({sessionID:Rt,messageID:ct,partID:c.optional(We)}),yr=class extends Ce.Service()("@opencode/SessionRevert"){static{s(this,"Service")}},Jv=Pe.effect(yr,r.gen(function*(){let e=yield*me.Service,t=yield*an.Service,n=yield*nc.Service,o=yield*Ee.Service,i=yield*un.Service,a=yield*Ln.Service,l=r.fn("SessionRevert.revert")(function*(m){yield*a.assertNotBusy(m.sessionID);let p=yield*e.messages({sessionID:m.sessionID}).pipe(r.orDie),h,g=yield*e.get(m.sessionID).pipe(r.orDie),I,T=[];for(let k of p){k.info.role==="user"&&(h=k.info);let y=[];for(let x of k.parts){if(I){x.type==="patch"&&T.push(x);continue}if(!I){if(k.info.id===m.messageID&&!m.partID||x.id===m.partID){let E=y.some(w=>["text","tool"].includes(w.type))?m.partID:void 0;I={messageID:!E&&h?h.id:k.info.id,partID:E}}y.push(x)}}}if(!I)return g;I.snapshot=g.revert?.snapshot??(yield*t.track()),g.revert?.snapshot&&(yield*t.restore(g.revert.snapshot)),yield*t.revert(T),I.snapshot&&(I.diff=yield*t.diff(I.snapshot));let v=p.findIndex(k=>k.info.id===I.messageID),P=v<0?[]:p.slice(v),d=yield*i.computeDiff({messages:P});return yield*n.write(["session_diff",m.sessionID],d).pipe(r.ignore),yield*o.publish(me.Event.Diff,{sessionID:m.sessionID,diff:d}),yield*e.setRevert({sessionID:m.sessionID,revert:I,summary:{additions:d.reduce((k,y)=>k+y.additions,0),deletions:d.reduce((k,y)=>k+y.deletions,0),files:d.length}}),yield*e.get(m.sessionID).pipe(r.orDie)}),u=r.fn("SessionRevert.unrevert")(function*(m){yield*r.logInfo("unreverting",{sessionID:m.sessionID}),yield*a.assertNotBusy(m.sessionID);let p=yield*e.get(m.sessionID).pipe(r.orDie);return p.revert?(p.revert.snapshot&&(yield*t.restore(p.revert.snapshot)),yield*e.clearRevert(m.sessionID),yield*e.get(m.sessionID).pipe(r.orDie)):p}),f=r.fn("SessionRevert.cleanup")(function*(m){if(!m.revert)return;let p=m.id,h=yield*e.messages({sessionID:p}).pipe(r.orDie),g=m.revert.messageID,I=h.findIndex(P=>P.info.id===g),T=I<0?void 0:h[I],v=I<0?[]:h.slice(I+(m.revert.partID?1:0));for(let P of v)yield*e.removeMessage({sessionID:p,messageID:P.info.id});if(m.revert.partID&&T){let P=m.revert.partID,d=T.parts.findIndex(k=>k.id===P);if(d>=0){let k=T.parts.slice(d);T.parts=T.parts.slice(0,d);for(let y of k)yield*e.removePart({sessionID:p,messageID:T.info.id,partID:y.id})}}yield*e.clearRevert(p)});return yr.of({revert:l,unrevert:u,cleanup:f})})),Kv=De.make({service:yr,layer:Jv,deps:[me.node,an.node,nc.node,Ee.node,un.node,Ln.node]});var En={};fe(En,{Instruction:()=>En,Service:()=>wr,loaded:()=>Qv,node:()=>Zv});import At from"path";function $f(e){let t=new Set;for(let n of e)for(let o of n.parts)if(o.type==="tool"&&o.tool==="read"&&o.state.status==="completed"){if(o.state.time.compacted)continue;let i=o.state.metadata?.loaded;if(!i||!Array.isArray(i))continue;for(let a of i)typeof a=="string"&&t.add(a)}return t}s($f,"extract");var wr=class extends Ce.Service()("@opencode/Instruction"){static{s(this,"Service")}},Xv=Pe.effect(wr,r.gen(function*(){let e=yield*Ne.Service,t=yield*Me.Service,n=yield*Se.Service,o=yield*Ve.Service,i=fn.filterStatusOk(li(yield*fn.HttpClient)),a=[At.join(n.config,"AGENTS.md"),...o.disableClaudeCodePrompt?[]:[At.join(n.home,".claude","CLAUDE.md")]],l=["AGENTS.md",...o.disableClaudeCodePrompt?[]:["CLAUDE.md"],"CONTEXT.md"],u=yield*V.make(r.fn("Instruction.state")(()=>r.succeed({claims:new Map}))),f=r.fnUntraced(function*(P){let d=yield*V.context;return Xr.OPENCODE_DISABLE_PROJECT_CONFIG?yield*t.globUp(P,n.config,n.config).pipe(r.catch(()=>r.succeed([]))):yield*t.globUp(P,d.directory,d.worktree).pipe(r.catch(()=>r.succeed([])))}),m=r.fnUntraced(function*(P){return yield*t.readFileString(P).pipe(r.catch(()=>r.succeed("")))}),p=r.fnUntraced(function*(P){let d=yield*i.execute(Ye.get(P)).pipe(r.timeout(5e3),r.catch(()=>r.succeed(null)));if(!d)return"";let k=yield*d.arrayBuffer.pipe(r.catch(()=>r.succeed(new ArrayBuffer(0))));return new TextDecoder().decode(k)}),h=r.fn("Instruction.clear")(function*(P){(yield*V.get(u)).claims.delete(P)}),g=r.fn("Instruction.systemPaths")(function*(){let P=yield*e.get(),d=yield*V.context,k=new Set;for(let y of a)if(yield*t.existsSafe(y)){k.add(At.resolve(y));break}if(!Xr.OPENCODE_DISABLE_PROJECT_CONFIG)for(let y of l){let x=yield*t.findUp(y,d.directory,d.worktree).pipe(r.catch(()=>r.succeed([])));if(x.length>0){x.forEach(E=>k.add(At.resolve(E)));break}}if(P.instructions)for(let y of P.instructions){if(y.startsWith("https://")||y.startsWith("http://"))continue;let x=y.startsWith("~/")?At.join(n.home,y.slice(2)):y;(yield*(At.isAbsolute(x)?t.glob(At.basename(x),{cwd:At.dirname(x),absolute:!0,include:"file"}):f(x)).pipe(r.catch(()=>r.succeed([])))).forEach(w=>k.add(At.resolve(w)))}return k}),I=r.fn("Instruction.system")(function*(){let P=yield*e.get(),d=yield*g(),k=(P.instructions??[]).filter(E=>E.startsWith("https://")||E.startsWith("http://")),y=yield*r.forEach(Array.from(d),m,{concurrency:8}),x=yield*r.forEach(k,p,{concurrency:4});return[...Array.from(d).flatMap((E,w)=>y[w]?[`Instructions from: ${E}
1027
- ${y[w]}`]:[]),...k.flatMap((E,w)=>x[w]?[`Instructions from: ${E}
1028
- ${x[w]}`]:[])]}),T=r.fn("Instruction.find")(function*(P){for(let d of l){let k=At.resolve(At.join(P,d));if(yield*t.existsSafe(k))return k}}),v=r.fn("Instruction.resolve")(function*(P,d,k){let y=yield*g(),x=$f(P),E=[],w=yield*V.get(u),M=At.resolve(yield*V.directory),C=At.resolve(d),$=At.dirname(C);for(;$.startsWith(M)&&$!==M;){let U=yield*T($);if(!U||U===C||y.has(U)||x.has(U)){$=At.dirname($);continue}let H=w.claims.get(k);if(H||(H=new Set,w.claims.set(k,H)),H.has(U)){$=At.dirname($);continue}H.add(U);let ue=yield*m(U);ue&&E.push({filepath:U,content:`Instructions from: ${U}
1029
- ${ue}`}),$=At.dirname($)}return E});return wr.of({clear:h,systemPaths:g,system:I,find:T,resolve:v})}));function Qv(e){return $f(e)}s(Qv,"loaded");var Zv=De.make({service:wr,layer:Xv,deps:[Ne.node,Me.node,Se.node,Ve.node,In]});var mt={};fe(mt,{Diagnostic:()=>Es,DocumentSymbol:()=>BS,Event:()=>Mm,LSP:()=>mt,Range:()=>da,Service:()=>_r,Status:()=>$S,Symbol:()=>FS,node:()=>zS});var Pr=Id(wm(),1);import ks from"path";import{pathToFileURL as io,fileURLToPath as Ox}from"url";var vm={".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",".csx":"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"};var Lx=150,$l=5e3,ql=1e4,xm=3e3,Nx=45e3,jx=1,Ux=2,Fx=2,Vl=class extends c.TaggedErrorClass()("LSPInitializeError",{serverID:c.String,cause:c.optional(c.Defect())}){static{s(this,"InitializeError")}};function Wl(e){if(e.startsWith("file://"))return we.normalizePath(Ox(e))}s(Wl,"getFilePath");function Bx(e){if(!e)return;let t=e.textDocumentSync;return typeof t=="number"?t:t?.change}s(Bx,"getSyncKind");function $x(e){let t=e.split(/\r\n|\r|\n/);return{line:t.length-1,character:t.at(-1)?.length??0}}s($x,"endPosition");function Sm(e){let t=new Set;return e.filter(n=>{let o=JSON.stringify({code:n.code,severity:n.severity,message:n.message,source:n.source,range:n.range});return t.has(o)?!1:(t.add(o),!0)})}s(Sm,"dedupeDiagnostics");function qx(e,t){return t?t.split(".").reduce((o,i)=>{if(!(!o||typeof o!="object"||!(i in o)))return o[i]},e)??null:e??null}s(qx,"configurationValue");function Wx(e){return e==="typescript"}s(Wx,"shouldSeedDiagnosticsOnFirstPush");async function Im(e){let t=e.instance,n=(0,Pr.createMessageConnection)(new Pr.StreamMessageReader(e.server.process.stdout),new Pr.StreamMessageWriter(e.server.process.stdin));e.server.process.stderr?.resume();let o=new Map,i=new Map,a=new Map,l=new Map,u=new Set,f=new Set,m=s(D=>Sm([...o.get(D)??[],...i.get(D)??[]]),"mergedDiagnostics"),p=s((D,A)=>{o.set(D,A);for(let _ of f)_({path:D,serverID:e.serverID})},"updatePushDiagnostics"),h=s((D,A)=>{i.set(D,A)},"updatePullDiagnostics"),g=s(()=>{for(let D of[...u])D()},"emitRegistrationChange");n.onNotification("textDocument/publishDiagnostics",D=>{let A=Wl(D.uri);if(A){if(a.set(A,{at:Date.now(),version:typeof D.version=="number"?D.version:void 0}),Wx(e.serverID)&&!o.has(A)){o.set(A,D.diagnostics);return}p(A,D.diagnostics)}}),n.onRequest("window/workDoneProgress/create",D=>null),n.onRequest("workspace/configuration",async D=>(D.items??[]).map(_=>qx(e.server.initialization,_.section))),n.onRequest("client/registerCapability",async D=>{let A=D.registrations??[],_=!1;for(let N of A)N.method==="textDocument/diagnostic"&&(l.set(N.id,N),_=!0);_&&g()}),n.onRequest("client/unregisterCapability",async D=>{let A=D.unregisterations??[],_=!1;for(let N of A)N.method==="textDocument/diagnostic"&&(l.delete(N.id),_=!0);_&&g()}),n.onRequest("workspace/workspaceFolders",async()=>[{name:"workspace",uri:io(e.root).href}]),n.onRequest("workspace/diagnostic/refresh",async()=>null),n.listen();let I=await hi(n.sendRequest("initialize",{rootUri:io(e.root).href,processId:e.server.process.pid,workspaceFolders:[{name:"workspace",uri:io(e.root).href}],initializationOptions:{...e.server.initialization},capabilities:{window:{workDoneProgress:!0},workspace:{configuration:!0,didChangeWatchedFiles:{dynamicRegistration:!0},diagnostics:{refreshSupport:!1}},textDocument:{synchronization:{didOpen:!0,didChange:!0},diagnostic:{dynamicRegistration:!0,relatedDocumentSupport:!0},publishDiagnostics:{versionSupport:!1}}}}),Nx).catch(D=>{throw new Vl({serverID:e.serverID,cause:D})}),T=Bx(I.capabilities),v=!!I.capabilities?.diagnosticProvider;await n.sendNotification("initialized",{}),e.server.initialization&&await n.sendNotification("workspace/didChangeConfiguration",{settings:e.server.initialization});let P={},d=s((D,A)=>{let _=A.some(j=>j.handled),N=A.some(j=>j.matched);if(!_)return{handled:!1,matched:!1};let q=new Map;for(let j of A)for(let[ve,pe]of j.byFile.entries()){let ae=q.get(ve)??[];q.set(ve,ae.concat(pe))}N&&!q.has(D)&&q.set(D,[]);for(let[j,ve]of q.entries())h(j,Sm(ve));return{handled:_,matched:N}},"mergeResults");async function k(D,A){let _=await hi(n.sendRequest("textDocument/diagnostic",{...A?{identifier:A}:{},textDocument:{uri:io(D).href}}),xm).catch(()=>null);if(!_)return{handled:!1,matched:!1,byFile:new Map};let N=new Map,q=s((pe,ae)=>{let oe=N.get(pe)??[];N.set(pe,oe.concat(ae))},"push"),j=!1,ve=!1;Array.isArray(_.items)&&(q(D,_.items),j=!0,ve=!0);for(let[pe,ae]of Object.entries(_.relatedDocuments??{})){let oe=Wl(pe);!oe||!Array.isArray(ae.items)||(q(oe,ae.items),j=!0,ve=ve||oe===D)}return{handled:j,matched:ve,byFile:N}}s(k,"requestDiagnosticReport");async function y(D,A){let _=await hi(n.sendRequest("workspace/diagnostic",{...A?{identifier:A}:{},previousResultIds:[]}),xm).catch(()=>null);if(!_)return{handled:!1,matched:!1,byFile:new Map};let N=new Map,q=!1;for(let j of _.items??[]){let ve=j.uri?Wl(j.uri):void 0;if(!ve||!Array.isArray(j.items))continue;let pe=N.get(ve)??[];N.set(ve,pe.concat(j.items)),q=q||ve===D}return{handled:!0,matched:q,byFile:N}}s(y,"requestWorkspaceDiagnosticReport");function x(){let D=[...l.values()].filter(A=>A.registerOptions?.workspaceDiagnostics!==!0);return{documentIdentifiers:[...new Set(D.flatMap(A=>A.registerOptions?.identifier??[]))],supported:v||D.length>0}}s(x,"documentPullState");function E(){let D=[...l.values()].filter(A=>A.registerOptions?.workspaceDiagnostics===!0);return{workspaceIdentifiers:[...new Set(D.flatMap(A=>A.registerOptions?.identifier??[]))],supported:D.length>0}}s(E,"workspacePullState");let w=s((D,A)=>A.some(_=>(_.byFile.get(D)?.length??0)>0),"hasCurrentFileDiagnostics");async function M(D,A,_){if(!A.length)return{handled:!1,matched:!1};let N=[];return new Promise(q=>{let j=A.length,ve=!1,pe=s((ae,oe=!1)=>{ve||!oe&&!_(N)||(ve=!0,q(ae))},"finish");for(let ae of A)ae.then(oe=>{N.push(oe),j-=1;let $e=d(D,N);pe($e),j===0&&pe($e,!0)})})}s(M,"requestDiagnostics");async function C(D){let A=x();return A.supported?M(D,[k(D),...A.documentIdentifiers.map(_=>k(D,_))],_=>w(D,_)):{handled:!1,matched:!1}}s(C,"requestDocumentDiagnostics");async function $(D){let A=x(),_=E();return!A.supported&&!_.supported?{handled:!1,matched:!1}:d(D,await Promise.all([...A.supported?[k(D)]:[],...A.documentIdentifiers.map(N=>k(D,N)),..._.supported?[y(D)]:[],..._.workspaceIdentifiers.map(N=>y(D,N))]))}s($,"requestFullDiagnostics");function U(D){return D<=0?Promise.resolve(!1):new Promise(A=>{let _=!1,N,q=s(ve=>{_||(_=!0,N&&clearTimeout(N),u.delete(j),A(ve))},"finish"),j=s(()=>q(!0),"listener");u.add(j),N=setTimeout(()=>q(!1),D)})}s(U,"waitForRegistrationChange");function H(D){return D.timeout<=0?Promise.resolve(!1):new Promise(A=>{let _=!1,N,q,j,ve=s(oe=>{_||(_=!0,N&&clearTimeout(N),q&&clearTimeout(q),j?.(),A(oe))},"finish"),pe=s(()=>{let oe=a.get(D.path);oe&&(typeof oe.version=="number"&&oe.version!==D.version||oe.at<D.after&&oe.version!==D.version||(N&&clearTimeout(N),N=setTimeout(()=>ve(!0),Math.max(0,Lx-(Date.now()-oe.at)))))},"schedule");q=setTimeout(()=>ve(!1),D.timeout);let ae=s(oe=>{oe.path!==D.path||oe.serverID!==e.serverID||pe()},"listener");f.add(ae),j=s(()=>f.delete(ae),"unsub"),pe()})}s(H,"waitForFreshPush");async function ue(D){let A=D.after??Date.now(),_=H({path:D.path,version:D.version,after:A,timeout:$l});for(;Date.now()-A<$l;){if((await C(D.path)).matched)return;let q=$l-(Date.now()-A);if(q<=0||await Promise.race([_.then(ve=>ve?"push":"timeout"),U(q).then(ve=>ve?"registration":"timeout")])!=="registration")return}}s(ue,"waitForDocumentDiagnostics");async function L(D){let A=D.after??Date.now(),_=H({path:D.path,version:D.version,after:A,timeout:ql});for(;Date.now()-A<ql;){let N=await $(D.path);if(N.handled||N.matched)return;let q=ql-(Date.now()-A);if(q<=0||await Promise.race([_.then(ve=>ve?"push":"timeout"),U(q).then(ve=>ve?"registration":"timeout")])!=="registration")return}}return s(L,"waitForFullDiagnostics"),{root:e.root,get serverID(){return e.serverID},get connection(){return n},notify:{async open(D){D.path=we.normalizePath(ks.isAbsolute(D.path)?D.path:ks.resolve(e.directory,D.path));let A=await we.readText(D.path),_=ks.extname(D.path),N=vm[_]??"plaintext",q=P[D.path];if(q!==void 0){await n.sendNotification("workspace/didChangeWatchedFiles",{changes:[{uri:io(D.path).href,type:Ux}]});let j=q.version+1;return P[D.path]={version:j,text:A},await n.sendNotification("textDocument/didChange",{textDocument:{uri:io(D.path).href,version:j},contentChanges:T===Fx?[{range:{start:{line:0,character:0},end:$x(q.text)},text:A}]:[{text:A}]}),j}return await n.sendNotification("workspace/didChangeWatchedFiles",{changes:[{uri:io(D.path).href,type:jx}]}),o.delete(D.path),i.delete(D.path),await n.sendNotification("textDocument/didOpen",{textDocument:{uri:io(D.path).href,languageId:N,version:0,text:A}}),P[D.path]={version:0,text:A},0}},get diagnostics(){let D=new Map;for(let A of new Set([...o.keys(),...i.keys()]))D.set(A,m(A));return D},async waitForDiagnostics(D){let A=we.normalizePath(ks.isAbsolute(D.path)?D.path:ks.resolve(e.directory,D.path));if(D.mode==="document"){await ue({path:A,version:D.version,after:D.after});return}await L({path:A,version:D.version,after:D.after})},async shutdown(){n.end(),n.dispose(),await at.stop(e.server.process)}}}s(Im,"create");import Hl from"path";import{pathToFileURL as Mr,fileURLToPath as US}from"url";var Gl={};fe(Gl,{Astro:()=>gS,BashLS:()=>ES,Biome:()=>eS,CSharp:()=>aS,Clangd:()=>mS,Clojure:()=>AS,Dart:()=>kS,Deno:()=>Jx,DockerfileLS:()=>RS,ESLint:()=>Qx,ElixirLS:()=>sS,FSharp:()=>uS,Gleam:()=>CS,Gopls:()=>tS,HLS:()=>OS,JDTLS:()=>bS,JuliaLS:()=>LS,KotlinLS:()=>wS,LuaLS:()=>xS,Nixd:()=>MS,Ocaml:()=>DS,Oxlint:()=>Zx,PHPIntelephense:()=>SS,Prisma:()=>IS,Pyright:()=>rS,Razor:()=>cS,Rubocop:()=>nS,RustAnalyzer:()=>fS,SourceKit:()=>pS,Svelte:()=>hS,TerraformLS:()=>TS,TexLab:()=>PS,Tinymist:()=>_S,Ty:()=>oS,Typescript:()=>Kx,Vue:()=>Xx,YamlLS:()=>vS,Zls:()=>iS});import ee from"path";import Cr from"os";import{text as Hx}from"node:stream/consumers";import Ge from"fs/promises";var on={};fe(on,{Archive:()=>on,extractZip:()=>Vx});import Dm from"path";async function Vx(e,t){if(process.platform==="win32"){let n=Dm.resolve(e),o=Dm.resolve(t),i=`$global:ProgressPreference = 'SilentlyContinue'; Expand-Archive -Path '${n}' -DestinationPath '${o}' -Force`;await Qa(["powershell","-NoProfile","-NonInteractive","-Command",i]);return}await Qa(["unzip","-o","-q",e,"-d",t])}s(Vx,"extractZip");import{createRequire as zx}from"node:module";import Gx from"node:path";var Rr;(t=>{function e(n,o){try{return zx(Gx.join(o,"package.json")).resolve(n)}catch{}}t.resolve=e,s(e,"resolve")})(Rr||={});function Te(e,t,n){let o=Array.isArray(t)?[...t]:[],i=Array.isArray(t)?n:t,a=at.spawn([e,...o],{...i,stdin:"pipe",stdout:"pipe",stderr:"pipe"});if(!a.stdin||!a.stdout||!a.stderr)throw new Error("Process output not available");return a}s(Te,"spawn");var Ar=s(async e=>Ge.stat(e).then(()=>!0).catch(()=>!1),"pathExists"),Ro=s((e,t={})=>at.run(e,{...t,nothrow:!0}),"run"),Yx=s((e,t={})=>at.text(e,{...t,nothrow:!0}),"output"),Ue=s((e,t)=>async(n,o)=>{if(t){let l=we.up({targets:t,start:ee.dirname(n),stop:o.directory}),u=await l.next();if(await l.return(),u.value)return}let i=we.up({targets:e,start:ee.dirname(n),stop:o.directory}),a=await i.next();return await i.return(),a.value?ee.dirname(a.value):o.directory},"NearestRoot"),la=s((e,t)=>async(n,o)=>{if(t){let l=we.up({targets:t,start:ee.dirname(n),stop:o.directory}),u=await l.next();if(await l.return(),u.value)return}let i=we.up({targets:e,start:ee.dirname(n),stop:o.directory}),a=await i.next();if(await i.return(),!!a.value)return ee.dirname(a.value)},"StrictNearestRoot"),Jx={id:"deno",root:s(async(e,t)=>{let n=we.up({targets:["deno.json","deno.jsonc"],start:ee.dirname(e),stop:t.directory}),o=await n.next();if(await n.return(),!!o.value)return ee.dirname(o.value)},"root"),extensions:[".ts",".tsx",".js",".jsx",".mjs"],async spawn(e){let t=ie("deno");if(t)return{process:Te(t,["lsp"],{cwd:e})}}},Kx={id:"typescript",root:Ue(["package-lock.json","bun.lockb","bun.lock","pnpm-lock.yaml","yarn.lock"],["deno.json","deno.jsonc"]),extensions:[".ts",".tsx",".js",".jsx",".mjs",".cjs",".mts",".cts"],async spawn(e,t){let n=Rr.resolve("typescript/lib/tsserver.js",t.directory);if(!n)return;let o=await Ut.which("typescript-language-server");return o?{process:Te(o,["--stdio"],{cwd:e,env:{...process.env}}),initialization:{tsserver:{path:n}}}:void 0}},Xx={id:"vue",extensions:[".vue"],root:Ue(["package-lock.json","bun.lockb","bun.lock","pnpm-lock.yaml","yarn.lock"]),async spawn(e,t,n){let o=ie("vue-language-server"),i=[];if(!o){if(n.disableLspDownload)return;let l=await Ut.which("@vue/language-server");if(!l)return;o=l}return i.push("--stdio"),{process:Te(o,i,{cwd:e,env:{...process.env}}),initialization:{}}}},Qx={id:"eslint",root:Ue(["package-lock.json","bun.lockb","bun.lock","pnpm-lock.yaml","yarn.lock"]),extensions:[".ts",".tsx",".js",".jsx",".mjs",".cjs",".mts",".cts",".vue"],async spawn(e,t,n){if(!Rr.resolve("eslint",t.directory))return;let i=ee.join(Se.Path.bin,"vscode-eslint","server","out","eslintServer.js");if(!await we.exists(i)){if(n.disableLspDownload)return;let l=await fetch("https://github.com/microsoft/vscode-eslint/archive/refs/heads/main.zip");if(!l.ok)return;let u=ee.join(Se.Path.bin,"vscode-eslint.zip");if(l.body&&await we.writeStream(u,l.body),!await on.extractZip(u,Se.Path.bin).then(()=>!0).catch(I=>!1))return;await Ge.rm(u,{force:!0});let m=ee.join(Se.Path.bin,"vscode-eslint-main"),p=ee.join(Se.Path.bin,"vscode-eslint");await Ge.stat(p).catch(()=>{})&&await Ge.rm(p,{force:!0,recursive:!0}),await Ge.rename(m,p);let g=process.platform==="win32"?"npm.cmd":"npm";await at.run([g,"install"],{cwd:p}),await at.run([g,"run","compile"],{cwd:p})}return{process:Te("node",[i,"--stdio"],{cwd:e,env:{...process.env}})}}},Zx={id:"oxlint",root:Ue([".oxlintrc.json","package-lock.json","bun.lockb","bun.lock","pnpm-lock.yaml","yarn.lock","package.json"]),extensions:[".ts",".tsx",".js",".jsx",".mjs",".cjs",".mts",".cts",".vue",".astro",".svelte"],async spawn(e,t){let n=process.platform==="win32"?".cmd":"",o=ee.join("node_modules",".bin","oxc_language_server"+n),i=ee.join("node_modules",".bin","oxlint"+n),a=s(async f=>{let m=ee.join(e,f);if(await we.exists(m))return m;let p=we.up({targets:[f],start:e,stop:t.worktree}),h=await p.next();if(await p.return(),h.value)return h.value},"resolveBin"),l=await a(i);if(!l){let f=ie("oxlint");f&&(l=f)}if(l){let f=Te(l,["--help"]);if(await f.exited,f.stdout&&(await Hx(f.stdout)).includes("--lsp"))return{process:Te(l,["--lsp"],{cwd:e})}}let u=await a(o);if(!u){let f=ie("oxc_language_server");f&&(u=f)}if(u)return{process:Te(u,[],{cwd:e})}}},eS={id:"biome",root:Ue(["biome.json","biome.jsonc","package-lock.json","bun.lockb","bun.lock","pnpm-lock.yaml","yarn.lock"]),extensions:[".ts",".tsx",".js",".jsx",".mjs",".cjs",".mts",".cts",".json",".jsonc",".vue",".astro",".svelte",".css",".graphql",".gql",".html"],async spawn(e){let t=ee.join(e,"node_modules",".bin","biome"),n;if(await we.exists(t)&&(n=t),!n){let a=ie("biome");a&&(n=a)}let o=["lsp-proxy","--stdio"];if(!n){if(!Rr.resolve("biome",e)||(n=await Ut.which("biome"),!n))return;o=["lsp-proxy","--stdio"]}return{process:Te(n,o,{cwd:e,env:{...process.env}})}}},tS={id:"gopls",root:s(async(e,t)=>{let n=await Ue(["go.work"])(e,t);return n||Ue(["go.mod","go.sum"])(e,t)},"root"),extensions:[".go"],async spawn(e,t,n){let o=ie("gopls");if(!o){if(!ie("go")||n.disableLspDownload||await at.spawn(["go","install","golang.org/x/tools/gopls@latest"],{env:{...process.env,GOBIN:Se.Path.bin},stdout:"pipe",stderr:"pipe",stdin:"pipe"}).exited!==0)return;o=ee.join(Se.Path.bin,"gopls"+(process.platform==="win32"?".exe":""))}return{process:Te(o,{cwd:e})}}},nS={id:"ruby-lsp",root:Ue(["Gemfile"]),extensions:[".rb",".rake",".gemspec",".ru"],async spawn(e,t,n){let o=ie("rubocop");if(!o){let i=ie("ruby"),a=ie("gem");if(!i||!a||n.disableLspDownload||await at.spawn(["gem","install","rubocop","--bindir",Se.Path.bin],{stdout:"pipe",stderr:"pipe",stdin:"pipe"}).exited!==0)return;o=ee.join(Se.Path.bin,"rubocop"+(process.platform==="win32"?".exe":""))}return{process:Te(o,["--lsp"],{cwd:e})}}},oS={id:"ty",extensions:[".py",".pyi"],root:Ue(["pyproject.toml","ty.toml","setup.py","setup.cfg","requirements.txt","Pipfile","pyrightconfig.json"]),async spawn(e,t,n){if(!n.experimentalLspTy)return;let o=ie("ty"),i={},a=[process.env.VIRTUAL_ENV,ee.join(e,".venv"),ee.join(e,"venv")].filter(u=>u!==void 0);for(let u of a){let m=process.platform==="win32"?ee.join(u,"Scripts","python.exe"):ee.join(u,"bin","python");if(await we.exists(m)){i.pythonPath=m;break}}if(!o)for(let u of a){let m=process.platform==="win32"?ee.join(u,"Scripts","ty.exe"):ee.join(u,"bin","ty");if(await we.exists(m)){o=m;break}}return o?{process:Te(o,["server"],{cwd:e}),initialization:i}:void 0}},rS={id:"pyright",extensions:[".py",".pyi"],root:Ue(["pyproject.toml","setup.py","setup.cfg","requirements.txt","Pipfile","pyrightconfig.json"]),async spawn(e,t,n){let o=ie("pyright-langserver"),i=[];if(!o){if(n.disableLspDownload)return;let f=await Ut.which("pyright","pyright-langserver");if(!f)return;o=f}i.push("--stdio");let a={},l=[process.env.VIRTUAL_ENV,ee.join(e,".venv"),ee.join(e,"venv")].filter(f=>f!==void 0);for(let f of l){let p=process.platform==="win32"?ee.join(f,"Scripts","python.exe"):ee.join(f,"bin","python");if(await we.exists(p)){a.pythonPath=p;break}}return{process:Te(o,i,{cwd:e,env:{...process.env}}),initialization:a}}},sS={id:"elixir-ls",extensions:[".ex",".exs"],root:Ue(["mix.exs","mix.lock"]),async spawn(e,t,n){let o=ie("elixir-ls");if(!o){let i=ee.join(Se.Path.bin,"elixir-ls");if(o=ee.join(Se.Path.bin,"elixir-ls-master","release",process.platform==="win32"?"language_server.bat":"language_server.sh"),!await we.exists(o)){if(!ie("elixir")||n.disableLspDownload)return;let l=await fetch("https://github.com/elixir-lsp/elixir-ls/archive/refs/heads/master.zip");if(!l.ok)return;let u=ee.join(Se.Path.bin,"elixir-ls.zip");if(l.body&&await we.writeStream(u,l.body),!await on.extractZip(u,Se.Path.bin).then(()=>!0).catch(h=>!1))return;await Ge.rm(u,{force:!0,recursive:!0});let m=ee.join(Se.Path.bin,"elixir-ls-master"),p={MIX_ENV:"prod",...process.env};await at.run(["mix","deps.get"],{cwd:m,env:p}),await at.run(["mix","compile"],{cwd:m,env:p}),await at.run(["mix","elixir_ls.release2","-o","release"],{cwd:m,env:p})}}return{process:Te(o,{cwd:e})}}},iS={id:"zls",extensions:[".zig",".zon"],root:Ue(["build.zig"]),async spawn(e,t,n){let o=ie("zls");if(!o){if(!ie("zig")||n.disableLspDownload)return;let a=await fetch("https://api.github.com/repos/zigtools/zls/releases/latest");if(!a.ok)return;let l=await a.json(),u=process.platform,f=process.arch,m="",p=f;f==="arm64"?p="aarch64":f==="x64"?p="x86_64":f==="ia32"&&(p="x86");let h=u;u==="darwin"?h="macos":u==="win32"&&(h="windows");let g=u==="win32"?"zip":"tar.xz";if(m=`zls-${p}-${h}.${g}`,!["zls-x86_64-linux.tar.xz","zls-x86_64-macos.tar.xz","zls-x86_64-windows.zip","zls-aarch64-linux.tar.xz","zls-aarch64-macos.tar.xz","zls-aarch64-windows.zip","zls-x86-linux.tar.xz","zls-x86-windows.zip"].includes(m))return;let T=l.assets?.find(k=>k.name===m);if(!T?.browser_download_url)return;let v=T.browser_download_url,P=await fetch(v);if(!P.ok)return;let d=ee.join(Se.Path.bin,m);if(P.body&&await we.writeStream(d,P.body),g==="zip"){if(!await on.extractZip(d,Se.Path.bin).then(()=>!0).catch(y=>!1))return}else await Ro(["tar","-xf",d],{cwd:Se.Path.bin});if(await Ge.rm(d,{force:!0}),o=ee.join(Se.Path.bin,"zls"+(u==="win32"?".exe":"")),!await we.exists(o))return;u!=="win32"&&await Ge.chmod(o,493).catch(()=>{})}return{process:Te(o,{cwd:e})}}},aS={id:"csharp",root:Ue([".slnx",".sln",".csproj","global.json"]),extensions:[".cs",".csx"],async spawn(e,t,n){let o=await Em(n.disableLspDownload);if(o)return{process:Te(o,["--stdio","--autoLoadProjects"],{cwd:e})}}},cS={id:"razor",root:Ue([".slnx",".sln",".csproj","global.json"]),extensions:[".razor",".cshtml"],async spawn(e,t,n){let o=await Em(n.disableLspDownload);if(!o)return;let i=await dS();if(i)return{process:Te(o,["--stdio","--autoLoadProjects",`--razorSourceGenerator=${i.compiler}`,`--razorDesignTimePath=${i.targets}`,"--extension",i.extension],{cwd:e})}}},zl;async function Em(e){let t=ie("roslyn-language-server");if(t)return t;let n=await Tm();return n||(zl||=lS(e).finally(()=>{zl=void 0}),zl)}s(Em,"getRoslynLanguageServer");async function lS(e){if(!ie("dotnet")||e||await at.spawn(["dotnet","tool","install","--global","roslyn-language-server","--prerelease"],{stdout:"pipe",stderr:"pipe",stdin:"pipe"}).exited!==0)return;let o=ie("roslyn-language-server");if(o)return o;let i=await Tm();if(i)return i}s(lS,"installRoslynLanguageServer");async function Tm(){let e=ee.join(process.env.DOTNET_CLI_HOME??Cr.homedir(),".dotnet","tools","roslyn-language-server"+(process.platform==="win32"?".cmd":""));return await Ar(e)?e:void 0}s(Tm,"roslynLanguageServerGlobalPath");async function dS(){let e=[process.env.VSCODE_EXTENSIONS,ee.join(Cr.homedir(),".vscode","extensions"),ee.join(Cr.homedir(),".vscode-insiders","extensions"),ee.join(Cr.homedir(),".vscode-server","extensions"),ee.join(Cr.homedir(),".vscode-server-insiders","extensions")].filter(t=>t!==void 0);for(let t of[...new Set(e)]){let n=await Ge.readdir(t,{withFileTypes:!0}).catch(()=>[]),o=await Promise.all(n.filter(i=>i.isDirectory()&&i.name.startsWith("ms-dotnettools.csharp-")).map(async i=>({path:ee.join(t,i.name,".razorExtension"),modified:(await Ge.stat(ee.join(t,i.name)).catch(()=>{}))?.mtimeMs??0})));for(let i of o.sort((a,l)=>l.modified-a.modified).map(a=>a.path)){let a={compiler:ee.join(i,"Microsoft.CodeAnalysis.Razor.Compiler.dll"),targets:ee.join(i,"Targets","Microsoft.NET.Sdk.Razor.DesignTime.targets"),extension:ee.join(i,"Microsoft.VisualStudioCode.RazorExtension.dll")};if(await Ar(a.compiler)&&await Ar(a.targets)&&await Ar(a.extension))return a}}}s(dS,"findVscodeRazorExtension");var uS={id:"fsharp",root:Ue([".slnx",".sln",".fsproj","global.json"]),extensions:[".fs",".fsi",".fsx",".fsscript"],async spawn(e,t,n){let o=ie("fsautocomplete");if(!o){if(!ie("dotnet")||n.disableLspDownload||await at.spawn(["dotnet","tool","install","fsautocomplete","--tool-path",Se.Path.bin],{stdout:"pipe",stderr:"pipe",stdin:"pipe"}).exited!==0)return;o=ee.join(Se.Path.bin,"fsautocomplete"+(process.platform==="win32"?".exe":""))}return{process:Te(o,{cwd:e})}}},pS={id:"sourcekit-lsp",extensions:[".swift",".objc","objcpp"],root:Ue(["Package.swift","*.xcodeproj","*.xcworkspace"]),async spawn(e){let t=ie("sourcekit-lsp");if(t)return{process:Te(t,{cwd:e})};if(!ie("xcrun"))return;let n=await Yx(["xcrun","--find","sourcekit-lsp"]);if(n.code!==0)return;let o=n.text.trim();return{process:Te(o,{cwd:e})}}},fS={id:"rust",root:s(async(e,t)=>{let n=await Ue(["Cargo.toml","Cargo.lock"])(e,t);if(n===void 0)return;let o=n;for(;o!==ee.dirname(o);){let i=ee.join(o,"Cargo.toml");try{if((await we.readText(i)).includes("[workspace]"))return o}catch{}let a=ee.dirname(o);if(a===o||(o=a,!o.startsWith(t.worktree)))break}return n},"root"),extensions:[".rs"],async spawn(e){let t=ie("rust-analyzer");if(t)return{process:Te(t,{cwd:e})}}},mS={id:"clangd",root:Ue(["compile_commands.json","compile_flags.txt",".clangd"]),extensions:[".c",".cpp",".cc",".cxx",".c++",".h",".hpp",".hh",".hxx",".h++"],async spawn(e,t,n){let o=["--background-index","--clang-tidy"],i=ie("clangd");if(i)return{process:Te(i,o,{cwd:e})};let a=process.platform==="win32"?".exe":"",l=ee.join(Se.Path.bin,"clangd"+a);if(await we.exists(l))return{process:Te(l,o,{cwd:e})};let u=await Ge.readdir(Se.Path.bin,{withFileTypes:!0}).catch(()=>[]);for(let C of u){if(!C.isDirectory()||!C.name.startsWith("clangd_"))continue;let $=ee.join(Se.Path.bin,C.name,"bin","clangd"+a);if(await we.exists($))return{process:Te($,o,{cwd:e})}}if(n.disableLspDownload)return;let f=await fetch("https://api.github.com/repos/clangd/clangd/releases/latest");if(!f.ok)return;let m=await f.json(),p=m.tag_name;if(!p)return;let h=process.platform,I={darwin:"mac",linux:"linux",win32:"windows"}[h];if(!I)return;let T=m.assets??[],v=s(C=>!C.name||!C.browser_download_url||!C.name.includes(I)?!1:C.name.includes(p),"valid"),P=T.find(C=>v(C)&&C.name?.endsWith(".zip"))??T.find(C=>v(C)&&C.name?.endsWith(".tar.xz"))??T.find(C=>v(C));if(!P?.name||!P.browser_download_url)return;let d=P.name,k=await fetch(P.browser_download_url);if(!k.ok)return;let y=ee.join(Se.Path.bin,d),x=await k.arrayBuffer();if(x.byteLength===0)return;await we.write(y,Buffer.from(x));let E=d.endsWith(".zip"),w=d.endsWith(".tar.xz");if(!E&&!w||E&&!await on.extractZip(y,Se.Path.bin).then(()=>!0).catch($=>!1))return;w&&await Ro(["tar","-xf",y],{cwd:Se.Path.bin}),await Ge.rm(y,{force:!0});let M=ee.join(Se.Path.bin,"clangd_"+p,"bin","clangd"+a);if(await we.exists(M))return h!=="win32"&&await Ge.chmod(M,493).catch(()=>{}),await Ge.unlink(ee.join(Se.Path.bin,"clangd")).catch(()=>{}),await Ge.symlink(M,ee.join(Se.Path.bin,"clangd")).catch(()=>{}),{process:Te(M,o,{cwd:e})}}},hS={id:"svelte",extensions:[".svelte"],root:Ue(["package-lock.json","bun.lockb","bun.lock","pnpm-lock.yaml","yarn.lock"]),async spawn(e,t,n){let o=ie("svelteserver"),i=[];if(!o){if(n.disableLspDownload)return;let l=await Ut.which("svelte-language-server");if(!l)return;o=l}return i.push("--stdio"),{process:Te(o,i,{cwd:e,env:{...process.env}}),initialization:{}}}},gS={id:"astro",extensions:[".astro"],root:Ue(["package-lock.json","bun.lockb","bun.lock","pnpm-lock.yaml","yarn.lock"]),async spawn(e,t,n){let o=Rr.resolve("typescript/lib/tsserver.js",t.directory);if(!o)return;let i=ee.dirname(o),a=ie("astro-ls"),l=[];if(!a){if(n.disableLspDownload)return;let f=await Ut.which("@astrojs/language-server");if(!f)return;a=f}return l.push("--stdio"),{process:Te(a,l,{cwd:e,env:{...process.env}}),initialization:{typescript:{tsdk:i}}}}};function yS(e,t){let n=t.replace(/\\/g,"/").replace(/\/$/,"");if(!n)return!1;let o=e.match(/<modules>([\s\S]*?)<\/modules>/g)??[];for(let i of o){let a=i.replace(/<!--[\s\S]*?-->/g,"");for(let l of a.matchAll(/<module>\s*([^<]+?)\s*<\/module>/g))if(l[1].replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/$/,"")===n)return!0}return!1}s(yS,"isModuleOf");var bS={id:"jdtls",root:s(async(e,t)=>{let n=["settings.gradle","settings.gradle.kts"],o=["gradlew","gradlew.bat"],[i,a]=await Promise.all([la(o,n)(e,t),la(n)(e,t)]);if(i)return i;if(a)return a;let l=await la(["build.gradle","build.gradle.kts"])(e,t);if(l)return l;let u=await we.findUp("pom.xml",ee.dirname(e),t.directory);if(u.length>0){let m=ee.dirname(u[0]);for(let p=1;p<u.length;p++){let h=ee.dirname(u[p]),g=ee.relative(h,m),I=await Ge.readFile(u[p],"utf-8").catch(()=>null);if(I&&yS(I,g))m=h;else break}return m}let f=await la([".project",".classpath"])(e,t);if(f)return f},"root"),extensions:[".java"],async spawn(e,t,n){let o=ie("java");if(!o)return;let i=await Ro(["java","-version"]).then(g=>{let I=/"(\d+)\.\d+\.\d+"/.exec(g.stderr.toString());return I?parseInt(I[1]):void 0});if(i==null||i<21)return;let a=ee.join(Se.Path.bin,"jdtls"),l=ee.join(a,"plugins");if(!await Ar(l)){if(n.disableLspDownload)return;await Ge.mkdir(a,{recursive:!0});let g="https://www.eclipse.org/downloads/download.php?file=/jdtls/snapshots/jdt-language-server-latest.tar.gz",I="release.tar.gz",T=await fetch(g);if(!T.ok||!T.body||(await we.writeStream(ee.join(a,I),T.body),(await Ro(["tar","-xzf",I],{cwd:a})).code!==0))return;await Ge.rm(ee.join(a,I),{force:!0})}let f=(await Ge.readdir(l).catch(()=>[])).find(g=>/^org\.eclipse\.equinox\.launcher_.*\.jar$/.test(g))?.trim()??"",m=ee.join(l,f);if(!await Ar(m))return;let p=ee.join(a,(()=>{switch(process.platform){case"darwin":return"config_mac";case"linux":return"config_linux";case"win32":return"config_win";default:return"config_linux"}})()),h=await Ge.mkdtemp(ee.join(Cr.tmpdir(),"opencode-jdtls-data"));return{process:Te(o,["-jar",m,"-configuration",p,"-data",h,"-Declipse.application=org.eclipse.jdt.ls.core.id1","-Dosgi.bundles.defaultStartLevel=4","-Declipse.product=org.eclipse.jdt.ls.core.product","-Dlog.level=ALL","--add-modules=ALL-SYSTEM","--add-opens java.base/java.util=ALL-UNNAMED","--add-opens java.base/java.lang=ALL-UNNAMED"],{cwd:e})}}},wS={id:"kotlin-ls",extensions:[".kt",".kts"],root:s(async(e,t)=>{let n=await Ue(["settings.gradle.kts","settings.gradle"])(e,t);if(n)return n;let o=await Ue(["gradlew","gradlew.bat"])(e,t);if(o)return o;let i=await Ue(["build.gradle.kts","build.gradle"])(e,t);return i||Ue(["pom.xml"])(e,t)},"root"),async spawn(e,t,n){let o=ee.join(Se.Path.bin,"kotlin-ls"),i=process.platform==="win32"?ee.join(o,"kotlin-lsp.cmd"):ee.join(o,"kotlin-lsp.sh");if(!await we.exists(i)){if(n.disableLspDownload)return;let l=await fetch("https://api.github.com/repos/Kotlin/kotlin-lsp/releases/latest");if(!l.ok)return;let f=(await l.json()).name?.replace(/^v/,"");if(!f)return;let m=process.platform,p=process.arch,h=p;p==="arm64"?h="aarch64":p==="x64"&&(h="x64");let g=m;m==="darwin"?g="mac":m==="linux"?g="linux":m==="win32"&&(g="win");let I=["mac-x64","mac-aarch64","linux-x64","linux-aarch64","win-x64","win-aarch64"],T=`${g}-${h}`;if(!I.includes(T))return;let v=`kotlin-lsp-${f}-${g}-${h}.zip`,P=`https://download-cdn.jetbrains.com/kotlin-lsp/${f}/${v}`;await Ge.mkdir(o,{recursive:!0});let d=ee.join(o,"kotlin-ls.zip"),k=await fetch(P);if(!k.ok||!k.body||(await we.writeStream(d,k.body),!await on.extractZip(d,o).then(()=>!0).catch(x=>!1)))return;await Ge.rm(d,{force:!0}),process.platform!=="win32"&&await Ge.chmod(i,493).catch(()=>{})}if(await we.exists(i))return{process:Te(i,["--stdio"],{cwd:e})}}},vS={id:"yaml-ls",extensions:[".yaml",".yml"],root:Ue(["package-lock.json","bun.lockb","bun.lock","pnpm-lock.yaml","yarn.lock"]),async spawn(e,t,n){let o=ie("yaml-language-server"),i=[];if(!o){if(n.disableLspDownload)return;let l=await Ut.which("yaml-language-server");if(!l)return;o=l}return i.push("--stdio"),{process:Te(o,i,{cwd:e,env:{...process.env}})}}},xS={id:"lua-ls",root:Ue([".luarc.json",".luarc.jsonc",".luacheckrc",".stylua.toml","stylua.toml","selene.toml","selene.yml"]),extensions:[".lua"],async spawn(e,t,n){let o=ie("lua-language-server");if(!o){if(n.disableLspDownload)return;let i=await fetch("https://api.github.com/repos/LuaLS/lua-language-server/releases/latest");if(!i.ok)return;let a=await i.json(),l=process.platform,u=process.arch,f="",m=u;u==="arm64"?m="arm64":u==="x64"?m="x64":u==="ia32"&&(m="ia32");let p=l;l==="darwin"?p="darwin":l==="linux"?p="linux":l==="win32"&&(p="win32");let h=l==="win32"?"zip":"tar.gz";f=`lua-language-server-${a.tag_name}-${p}-${m}.${h}`;let g=["darwin-arm64.tar.gz","darwin-x64.tar.gz","linux-x64.tar.gz","linux-arm64.tar.gz","win32-x64.zip","win32-ia32.zip"],I=`${p}-${m}.${h}`;if(!g.includes(I))return;let T=a.assets.find(x=>x.name===f);if(!T)return;let v=T.browser_download_url,P=await fetch(v);if(!P.ok)return;let d=ee.join(Se.Path.bin,f);P.body&&await we.writeStream(d,P.body);let k=ee.join(Se.Path.bin,`lua-language-server-${m}-${p}`);if(await Ge.stat(k).catch(()=>{})&&await Ge.rm(k,{force:!0,recursive:!0}),await Ge.mkdir(k,{recursive:!0}),h==="zip"){if(!await on.extractZip(d,k).then(()=>!0).catch(E=>!1))return}else if(!await Ro(["tar","-xzf",d,"-C",k]).then(E=>E.code===0).catch(E=>!1))return;if(await Ge.rm(d,{force:!0}),o=ee.join(k,"bin","lua-language-server"+(l==="win32"?".exe":"")),!await we.exists(o)||l!=="win32"&&!await Ge.chmod(o,493).then(()=>!0).catch(E=>!1))return}return{process:Te(o,{cwd:e})}}},SS={id:"php intelephense",extensions:[".php"],root:Ue(["composer.json","composer.lock",".php-version"]),async spawn(e,t,n){let o=ie("intelephense"),i=[];if(!o){if(n.disableLspDownload)return;let l=await Ut.which("intelephense");if(!l)return;o=l}return i.push("--stdio"),{process:Te(o,i,{cwd:e,env:{...process.env}}),initialization:{telemetry:{enabled:!1}}}}},IS={id:"prisma",extensions:[".prisma"],root:Ue(["schema.prisma","prisma/schema.prisma","prisma"],["package.json"]),async spawn(e){let t=ie("prisma");if(t)return{process:Te(t,["language-server"],{cwd:e})}}},kS={id:"dart",extensions:[".dart"],root:Ue(["pubspec.yaml","analysis_options.yaml"]),async spawn(e){let t=ie("dart");if(t)return{process:Te(t,["language-server","--lsp"],{cwd:e})}}},DS={id:"ocaml-lsp",extensions:[".ml",".mli"],root:Ue(["dune-project","dune-workspace",".merlin","opam"]),async spawn(e){let t=ie("ocamllsp");if(t)return{process:Te(t,{cwd:e})}}},ES={id:"bash",extensions:[".sh",".bash",".zsh",".ksh"],root:s(async(e,t)=>t.directory,"root"),async spawn(e,t,n){let o=ie("bash-language-server"),i=[];if(!o){if(n.disableLspDownload)return;let l=await Ut.which("bash-language-server");if(!l)return;o=l}return i.push("start"),{process:Te(o,i,{cwd:e,env:{...process.env}})}}},TS={id:"terraform",extensions:[".tf",".tfvars"],root:Ue([".terraform.lock.hcl","terraform.tfstate","*.tf"]),async spawn(e,t,n){let o=ie("terraform-ls");if(!o){if(n.disableLspDownload)return;let i=await fetch("https://api.releases.hashicorp.com/v1/releases/terraform-ls/latest");if(!i.ok)return;let a=await i.json(),l=process.platform,f=process.arch==="arm64"?"arm64":"amd64",m=l==="win32"?"windows":l,h=(a.builds??[]).find(v=>v.arch===f&&v.os===m);if(!h?.url)return;let g=await fetch(h.url);if(!g.ok)return;let I=ee.join(Se.Path.bin,"terraform-ls.zip");if(g.body&&await we.writeStream(I,g.body),!await on.extractZip(I,Se.Path.bin).then(()=>!0).catch(v=>!1)||(await Ge.rm(I,{force:!0}),o=ee.join(Se.Path.bin,"terraform-ls"+(l==="win32"?".exe":"")),!await we.exists(o)))return;l!=="win32"&&await Ge.chmod(o,493).catch(()=>{})}return{process:Te(o,["serve"],{cwd:e}),initialization:{experimentalFeatures:{prefillRequiredFields:!0,validateOnSave:!0}}}}},PS={id:"texlab",extensions:[".tex",".bib"],root:Ue([".latexmkrc","latexmkrc",".texlabroot","texlabroot"]),async spawn(e,t,n){let o=ie("texlab");if(!o){if(n.disableLspDownload)return;let i=await fetch("https://api.github.com/repos/latex-lsp/texlab/releases/latest");if(!i.ok)return;let a=await i.json();if(!a.tag_name?.replace("v",""))return;let u=process.platform,m=process.arch==="arm64"?"aarch64":"x86_64",p=u==="darwin"?"macos":u==="win32"?"windows":"linux",h=u==="win32"?"zip":"tar.gz",g=`texlab-${m}-${p}.${h}`,T=(a.assets??[]).find(d=>d.name===g);if(!T?.browser_download_url)return;let v=await fetch(T.browser_download_url);if(!v.ok)return;let P=ee.join(Se.Path.bin,g);if(v.body&&await we.writeStream(P,v.body),h==="zip"&&!await on.extractZip(P,Se.Path.bin).then(()=>!0).catch(k=>!1)||(h==="tar.gz"&&await Ro(["tar","-xzf",P],{cwd:Se.Path.bin}),await Ge.rm(P,{force:!0}),o=ee.join(Se.Path.bin,"texlab"+(u==="win32"?".exe":"")),!await we.exists(o)))return;u!=="win32"&&await Ge.chmod(o,493).catch(()=>{})}return{process:Te(o,{cwd:e})}}},RS={id:"dockerfile",extensions:[".dockerfile","Dockerfile"],root:s(async(e,t)=>t.directory,"root"),async spawn(e,t,n){let o=ie("docker-langserver"),i=[];if(!o){if(n.disableLspDownload)return;let l=await Ut.which("dockerfile-language-server-nodejs");if(!l)return;o=l}return i.push("--stdio"),{process:Te(o,i,{cwd:e,env:{...process.env}})}}},CS={id:"gleam",extensions:[".gleam"],root:Ue(["gleam.toml"]),async spawn(e){let t=ie("gleam");if(t)return{process:Te(t,["lsp"],{cwd:e})}}},AS={id:"clojure-lsp",extensions:[".clj",".cljs",".cljc",".edn"],root:Ue(["deps.edn","project.clj","shadow-cljs.edn","bb.edn","build.boot"]),async spawn(e){let t=ie("clojure-lsp");if(!t&&process.platform==="win32"&&(t=ie("clojure-lsp.exe")),!!t)return{process:Te(t,["listen"],{cwd:e})}}},MS={id:"nixd",extensions:[".nix"],root:s(async(e,t)=>{let n=await Ue(["flake.nix"])(e,t);return n&&n!==t.directory?n:t.worktree&&t.worktree!==t.directory?t.worktree:t.directory},"root"),async spawn(e){let t=ie("nixd");if(t)return{process:Te(t,[],{cwd:e,env:{...process.env}})}}},_S={id:"tinymist",extensions:[".typ",".typc"],root:Ue(["typst.toml"]),async spawn(e,t,n){let o=ie("tinymist");if(!o){if(n.disableLspDownload)return;let i=await fetch("https://api.github.com/repos/Myriad-Dreamin/tinymist/releases/latest");if(!i.ok)return;let a=await i.json(),l=process.platform,f=process.arch==="arm64"?"aarch64":"x86_64",m,p;l==="darwin"?(m="apple-darwin",p="tar.gz"):l==="win32"?(m="pc-windows-msvc",p="zip"):(m="unknown-linux-gnu",p="tar.gz");let h=`tinymist-${f}-${m}.${p}`,I=(a.assets??[]).find(P=>P.name===h);if(!I?.browser_download_url)return;let T=await fetch(I.browser_download_url);if(!T.ok)return;let v=ee.join(Se.Path.bin,h);if(T.body&&await we.writeStream(v,T.body),p==="zip"){if(!await on.extractZip(v,Se.Path.bin).then(()=>!0).catch(d=>!1))return}else await Ro(["tar","-xzf",v,"--strip-components=1"],{cwd:Se.Path.bin});if(await Ge.rm(v,{force:!0}),o=ee.join(Se.Path.bin,"tinymist"+(l==="win32"?".exe":"")),!await we.exists(o))return;l!=="win32"&&await Ge.chmod(o,493).catch(()=>{})}return{process:Te(o,{cwd:e})}}},OS={id:"haskell-language-server",extensions:[".hs",".lhs"],root:Ue(["stack.yaml","cabal.project","hie.yaml","*.cabal"]),async spawn(e){let t=ie("haskell-language-server-wrapper");if(t)return{process:Te(t,["--lsp"],{cwd:e})}}},LS={id:"julials",extensions:[".jl"],root:Ue(["Project.toml","Manifest.toml","*.jl"]),async spawn(e){let t=ie("julia");if(t)return{process:Te(t,["--startup-file=no","--history-file=no","-e","using LanguageServer; runserver()"],{cwd:e})}}};var Ds={};fe(Ds,{Definitions:()=>NS,LspEvent:()=>Ds,Updated:()=>Pm});var Pm=Tt.define({type:"lsp.updated",schema:{}}),NS=Tt.inventory(Pm);var Es={};fe(Es,{Diagnostic:()=>Es,pretty:()=>Cm,report:()=>jS});var Rm=20;function Cm(e){let n={1:"ERROR",2:"WARN",3:"INFO",4:"HINT"}[e.severity||1],o=e.range.start.line+1,i=e.range.start.character+1;return`${n} [${o}:${i}] ${e.message}`}s(Cm,"pretty");function jS(e,t){let n=t.filter(l=>l.severity===1);if(n.length===0)return"";let o=n.slice(0,Rm),i=n.length-Rm,a=i>0?`
1026
+ `:"")+"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*t.updatePart({id:We.ascending(),messageID:$e.id,sessionID:d.sessionID,type:"text",metadata:{compaction_continue:!0},synthetic:!0,text:Y,time:{start:Date.now(),end:Date.now()}})}}}return pe.message.error?"stop":(ae==="continue"&&(yield*l.publish(Uf.Compacted,{sessionID:d.sessionID})),ae)}),P=r.fn("SessionCompaction.create")(function*(d){let k=yield*t.updateMessage({id:ct.ascending(),role:"user",model:d.model,sessionID:d.sessionID,agent:d.agent,time:{created:Date.now()}});yield*t.updatePart({id:We.ascending(),messageID:k.id,sessionID:k.sessionID,type:"compaction",auto:d.auto,overflow:d.overflow})});return Do.of({isOverflow:m,prune:g,process:v,create:P})})),Yv=De.make({service:Do,layer:Hv,deps:[Ne.node,me.node,Ft.node,ft.node,jn.node,bt.node,Ee.node,Ve.node,dn.node]});var br={};fe(br,{RevertInput:()=>Jv,Service:()=>yr,SessionRevert:()=>br,node:()=>Xv});var Jv=c.Struct({sessionID:Rt,messageID:ct,partID:c.optional(We)}),yr=class extends Ce.Service()("@opencode/SessionRevert"){static{s(this,"Service")}},Kv=Pe.effect(yr,r.gen(function*(){let e=yield*me.Service,t=yield*an.Service,n=yield*nc.Service,o=yield*Ee.Service,i=yield*un.Service,a=yield*Ln.Service,l=r.fn("SessionRevert.revert")(function*(m){yield*a.assertNotBusy(m.sessionID);let p=yield*e.messages({sessionID:m.sessionID}).pipe(r.orDie),h,g=yield*e.get(m.sessionID).pipe(r.orDie),I,T=[];for(let k of p){k.info.role==="user"&&(h=k.info);let y=[];for(let S of k.parts){if(I){S.type==="patch"&&T.push(S);continue}if(!I){if(k.info.id===m.messageID&&!m.partID||S.id===m.partID){let E=y.some(w=>["text","tool"].includes(w.type))?m.partID:void 0;I={messageID:!E&&h?h.id:k.info.id,partID:E}}y.push(S)}}}if(!I)return g;I.snapshot=g.revert?.snapshot??(yield*t.track()),g.revert?.snapshot&&(yield*t.restore(g.revert.snapshot)),yield*t.revert(T),I.snapshot&&(I.diff=yield*t.diff(I.snapshot));let v=p.findIndex(k=>k.info.id===I.messageID),P=v<0?[]:p.slice(v),d=yield*i.computeDiff({messages:P});return yield*n.write(["session_diff",m.sessionID],d).pipe(r.ignore),yield*o.publish(me.Event.Diff,{sessionID:m.sessionID,diff:d}),yield*e.setRevert({sessionID:m.sessionID,revert:I,summary:{additions:d.reduce((k,y)=>k+y.additions,0),deletions:d.reduce((k,y)=>k+y.deletions,0),files:d.length}}),yield*e.get(m.sessionID).pipe(r.orDie)}),u=r.fn("SessionRevert.unrevert")(function*(m){yield*r.logInfo("unreverting",{sessionID:m.sessionID}),yield*a.assertNotBusy(m.sessionID);let p=yield*e.get(m.sessionID).pipe(r.orDie);return p.revert?(p.revert.snapshot&&(yield*t.restore(p.revert.snapshot)),yield*e.clearRevert(m.sessionID),yield*e.get(m.sessionID).pipe(r.orDie)):p}),f=r.fn("SessionRevert.cleanup")(function*(m){if(!m.revert)return;let p=m.id,h=yield*e.messages({sessionID:p}).pipe(r.orDie),g=m.revert.messageID,I=h.findIndex(P=>P.info.id===g),T=I<0?void 0:h[I],v=I<0?[]:h.slice(I+(m.revert.partID?1:0));for(let P of v)yield*e.removeMessage({sessionID:p,messageID:P.info.id});if(m.revert.partID&&T){let P=m.revert.partID,d=T.parts.findIndex(k=>k.id===P);if(d>=0){let k=T.parts.slice(d);T.parts=T.parts.slice(0,d);for(let y of k)yield*e.removePart({sessionID:p,messageID:T.info.id,partID:y.id})}}yield*e.clearRevert(p)});return yr.of({revert:l,unrevert:u,cleanup:f})})),Xv=De.make({service:yr,layer:Kv,deps:[me.node,an.node,nc.node,Ee.node,un.node,Ln.node]});var En={};fe(En,{Instruction:()=>En,Service:()=>wr,loaded:()=>Zv,node:()=>ex});import At from"path";function $f(e){let t=new Set;for(let n of e)for(let o of n.parts)if(o.type==="tool"&&o.tool==="read"&&o.state.status==="completed"){if(o.state.time.compacted)continue;let i=o.state.metadata?.loaded;if(!i||!Array.isArray(i))continue;for(let a of i)typeof a=="string"&&t.add(a)}return t}s($f,"extract");var wr=class extends Ce.Service()("@opencode/Instruction"){static{s(this,"Service")}},Qv=Pe.effect(wr,r.gen(function*(){let e=yield*Ne.Service,t=yield*Me.Service,n=yield*Se.Service,o=yield*Ve.Service,i=fn.filterStatusOk(li(yield*fn.HttpClient)),a=[At.join(n.config,"AGENTS.md"),...o.disableClaudeCodePrompt?[]:[At.join(n.home,".claude","CLAUDE.md")]],l=["AGENTS.md",...o.disableClaudeCodePrompt?[]:["CLAUDE.md"],"CONTEXT.md"],u=yield*V.make(r.fn("Instruction.state")(()=>r.succeed({claims:new Map}))),f=r.fnUntraced(function*(P){let d=yield*V.context;return Xr.OPENCODE_DISABLE_PROJECT_CONFIG?yield*t.globUp(P,n.config,n.config).pipe(r.catch(()=>r.succeed([]))):yield*t.globUp(P,d.directory,d.worktree).pipe(r.catch(()=>r.succeed([])))}),m=r.fnUntraced(function*(P){return yield*t.readFileString(P).pipe(r.catch(()=>r.succeed("")))}),p=r.fnUntraced(function*(P){let d=yield*i.execute(Ye.get(P)).pipe(r.timeout(5e3),r.catch(()=>r.succeed(null)));if(!d)return"";let k=yield*d.arrayBuffer.pipe(r.catch(()=>r.succeed(new ArrayBuffer(0))));return new TextDecoder().decode(k)}),h=r.fn("Instruction.clear")(function*(P){(yield*V.get(u)).claims.delete(P)}),g=r.fn("Instruction.systemPaths")(function*(){let P=yield*e.get(),d=yield*V.context,k=new Set;for(let y of a)if(yield*t.existsSafe(y)){k.add(At.resolve(y));break}if(!Xr.OPENCODE_DISABLE_PROJECT_CONFIG)for(let y of l){let S=yield*t.findUp(y,d.directory,d.worktree).pipe(r.catch(()=>r.succeed([])));if(S.length>0){S.forEach(E=>k.add(At.resolve(E)));break}}if(P.instructions)for(let y of P.instructions){if(y.startsWith("https://")||y.startsWith("http://"))continue;let S=y.startsWith("~/")?At.join(n.home,y.slice(2)):y;(yield*(At.isAbsolute(S)?t.glob(At.basename(S),{cwd:At.dirname(S),absolute:!0,include:"file"}):f(S)).pipe(r.catch(()=>r.succeed([])))).forEach(w=>k.add(At.resolve(w)))}return k}),I=r.fn("Instruction.system")(function*(){let P=yield*e.get(),d=yield*g(),k=(P.instructions??[]).filter(E=>E.startsWith("https://")||E.startsWith("http://")),y=yield*r.forEach(Array.from(d),m,{concurrency:8}),S=yield*r.forEach(k,p,{concurrency:4});return[...Array.from(d).flatMap((E,w)=>y[w]?[`Instructions from: ${E}
1027
+ ${y[w]}`]:[]),...k.flatMap((E,w)=>S[w]?[`Instructions from: ${E}
1028
+ ${S[w]}`]:[])]}),T=r.fn("Instruction.find")(function*(P){for(let d of l){let k=At.resolve(At.join(P,d));if(yield*t.existsSafe(k))return k}}),v=r.fn("Instruction.resolve")(function*(P,d,k){let y=yield*g(),S=$f(P),E=[],w=yield*V.get(u),M=At.resolve(yield*V.directory),C=At.resolve(d),$=At.dirname(C);for(;$.startsWith(M)&&$!==M;){let U=yield*T($);if(!U||U===C||y.has(U)||S.has(U)){$=At.dirname($);continue}let H=w.claims.get(k);if(H||(H=new Set,w.claims.set(k,H)),H.has(U)){$=At.dirname($);continue}H.add(U);let ue=yield*m(U);ue&&E.push({filepath:U,content:`Instructions from: ${U}
1029
+ ${ue}`}),$=At.dirname($)}return E});return wr.of({clear:h,systemPaths:g,system:I,find:T,resolve:v})}));function Zv(e){return $f(e)}s(Zv,"loaded");var ex=De.make({service:wr,layer:Qv,deps:[Ne.node,Me.node,Se.node,Ve.node,In]});var mt={};fe(mt,{Diagnostic:()=>Es,DocumentSymbol:()=>$S,Event:()=>Mm,LSP:()=>mt,Range:()=>da,Service:()=>_r,Status:()=>qS,Symbol:()=>BS,node:()=>GS});var Pr=Id(wm(),1);import ks from"path";import{pathToFileURL as io,fileURLToPath as Lx}from"url";var vm={".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",".csx":"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"};var Nx=150,$l=5e3,ql=1e4,xm=3e3,jx=45e3,Ux=1,Fx=2,Bx=2,Vl=class extends c.TaggedErrorClass()("LSPInitializeError",{serverID:c.String,cause:c.optional(c.Defect())}){static{s(this,"InitializeError")}};function Wl(e){if(e.startsWith("file://"))return we.normalizePath(Lx(e))}s(Wl,"getFilePath");function $x(e){if(!e)return;let t=e.textDocumentSync;return typeof t=="number"?t:t?.change}s($x,"getSyncKind");function qx(e){let t=e.split(/\r\n|\r|\n/);return{line:t.length-1,character:t.at(-1)?.length??0}}s(qx,"endPosition");function Sm(e){let t=new Set;return e.filter(n=>{let o=JSON.stringify({code:n.code,severity:n.severity,message:n.message,source:n.source,range:n.range});return t.has(o)?!1:(t.add(o),!0)})}s(Sm,"dedupeDiagnostics");function Wx(e,t){return t?t.split(".").reduce((o,i)=>{if(!(!o||typeof o!="object"||!(i in o)))return o[i]},e)??null:e??null}s(Wx,"configurationValue");function Vx(e){return e==="typescript"}s(Vx,"shouldSeedDiagnosticsOnFirstPush");async function Im(e){let t=e.instance,n=(0,Pr.createMessageConnection)(new Pr.StreamMessageReader(e.server.process.stdout),new Pr.StreamMessageWriter(e.server.process.stdin));e.server.process.stderr?.resume();let o=new Map,i=new Map,a=new Map,l=new Map,u=new Set,f=new Set,m=s(D=>Sm([...o.get(D)??[],...i.get(D)??[]]),"mergedDiagnostics"),p=s((D,A)=>{o.set(D,A);for(let _ of f)_({path:D,serverID:e.serverID})},"updatePushDiagnostics"),h=s((D,A)=>{i.set(D,A)},"updatePullDiagnostics"),g=s(()=>{for(let D of[...u])D()},"emitRegistrationChange");n.onNotification("textDocument/publishDiagnostics",D=>{let A=Wl(D.uri);if(A){if(a.set(A,{at:Date.now(),version:typeof D.version=="number"?D.version:void 0}),Vx(e.serverID)&&!o.has(A)){o.set(A,D.diagnostics);return}p(A,D.diagnostics)}}),n.onRequest("window/workDoneProgress/create",D=>null),n.onRequest("workspace/configuration",async D=>(D.items??[]).map(_=>Wx(e.server.initialization,_.section))),n.onRequest("client/registerCapability",async D=>{let A=D.registrations??[],_=!1;for(let N of A)N.method==="textDocument/diagnostic"&&(l.set(N.id,N),_=!0);_&&g()}),n.onRequest("client/unregisterCapability",async D=>{let A=D.unregisterations??[],_=!1;for(let N of A)N.method==="textDocument/diagnostic"&&(l.delete(N.id),_=!0);_&&g()}),n.onRequest("workspace/workspaceFolders",async()=>[{name:"workspace",uri:io(e.root).href}]),n.onRequest("workspace/diagnostic/refresh",async()=>null),n.listen();let I=await hi(n.sendRequest("initialize",{rootUri:io(e.root).href,processId:e.server.process.pid,workspaceFolders:[{name:"workspace",uri:io(e.root).href}],initializationOptions:{...e.server.initialization},capabilities:{window:{workDoneProgress:!0},workspace:{configuration:!0,didChangeWatchedFiles:{dynamicRegistration:!0},diagnostics:{refreshSupport:!1}},textDocument:{synchronization:{didOpen:!0,didChange:!0},diagnostic:{dynamicRegistration:!0,relatedDocumentSupport:!0},publishDiagnostics:{versionSupport:!1}}}}),jx).catch(D=>{throw new Vl({serverID:e.serverID,cause:D})}),T=$x(I.capabilities),v=!!I.capabilities?.diagnosticProvider;await n.sendNotification("initialized",{}),e.server.initialization&&await n.sendNotification("workspace/didChangeConfiguration",{settings:e.server.initialization});let P={},d=s((D,A)=>{let _=A.some(j=>j.handled),N=A.some(j=>j.matched);if(!_)return{handled:!1,matched:!1};let q=new Map;for(let j of A)for(let[ve,pe]of j.byFile.entries()){let ae=q.get(ve)??[];q.set(ve,ae.concat(pe))}N&&!q.has(D)&&q.set(D,[]);for(let[j,ve]of q.entries())h(j,Sm(ve));return{handled:_,matched:N}},"mergeResults");async function k(D,A){let _=await hi(n.sendRequest("textDocument/diagnostic",{...A?{identifier:A}:{},textDocument:{uri:io(D).href}}),xm).catch(()=>null);if(!_)return{handled:!1,matched:!1,byFile:new Map};let N=new Map,q=s((pe,ae)=>{let oe=N.get(pe)??[];N.set(pe,oe.concat(ae))},"push"),j=!1,ve=!1;Array.isArray(_.items)&&(q(D,_.items),j=!0,ve=!0);for(let[pe,ae]of Object.entries(_.relatedDocuments??{})){let oe=Wl(pe);!oe||!Array.isArray(ae.items)||(q(oe,ae.items),j=!0,ve=ve||oe===D)}return{handled:j,matched:ve,byFile:N}}s(k,"requestDiagnosticReport");async function y(D,A){let _=await hi(n.sendRequest("workspace/diagnostic",{...A?{identifier:A}:{},previousResultIds:[]}),xm).catch(()=>null);if(!_)return{handled:!1,matched:!1,byFile:new Map};let N=new Map,q=!1;for(let j of _.items??[]){let ve=j.uri?Wl(j.uri):void 0;if(!ve||!Array.isArray(j.items))continue;let pe=N.get(ve)??[];N.set(ve,pe.concat(j.items)),q=q||ve===D}return{handled:!0,matched:q,byFile:N}}s(y,"requestWorkspaceDiagnosticReport");function S(){let D=[...l.values()].filter(A=>A.registerOptions?.workspaceDiagnostics!==!0);return{documentIdentifiers:[...new Set(D.flatMap(A=>A.registerOptions?.identifier??[]))],supported:v||D.length>0}}s(S,"documentPullState");function E(){let D=[...l.values()].filter(A=>A.registerOptions?.workspaceDiagnostics===!0);return{workspaceIdentifiers:[...new Set(D.flatMap(A=>A.registerOptions?.identifier??[]))],supported:D.length>0}}s(E,"workspacePullState");let w=s((D,A)=>A.some(_=>(_.byFile.get(D)?.length??0)>0),"hasCurrentFileDiagnostics");async function M(D,A,_){if(!A.length)return{handled:!1,matched:!1};let N=[];return new Promise(q=>{let j=A.length,ve=!1,pe=s((ae,oe=!1)=>{ve||!oe&&!_(N)||(ve=!0,q(ae))},"finish");for(let ae of A)ae.then(oe=>{N.push(oe),j-=1;let $e=d(D,N);pe($e),j===0&&pe($e,!0)})})}s(M,"requestDiagnostics");async function C(D){let A=S();return A.supported?M(D,[k(D),...A.documentIdentifiers.map(_=>k(D,_))],_=>w(D,_)):{handled:!1,matched:!1}}s(C,"requestDocumentDiagnostics");async function $(D){let A=S(),_=E();return!A.supported&&!_.supported?{handled:!1,matched:!1}:d(D,await Promise.all([...A.supported?[k(D)]:[],...A.documentIdentifiers.map(N=>k(D,N)),..._.supported?[y(D)]:[],..._.workspaceIdentifiers.map(N=>y(D,N))]))}s($,"requestFullDiagnostics");function U(D){return D<=0?Promise.resolve(!1):new Promise(A=>{let _=!1,N,q=s(ve=>{_||(_=!0,N&&clearTimeout(N),u.delete(j),A(ve))},"finish"),j=s(()=>q(!0),"listener");u.add(j),N=setTimeout(()=>q(!1),D)})}s(U,"waitForRegistrationChange");function H(D){return D.timeout<=0?Promise.resolve(!1):new Promise(A=>{let _=!1,N,q,j,ve=s(oe=>{_||(_=!0,N&&clearTimeout(N),q&&clearTimeout(q),j?.(),A(oe))},"finish"),pe=s(()=>{let oe=a.get(D.path);oe&&(typeof oe.version=="number"&&oe.version!==D.version||oe.at<D.after&&oe.version!==D.version||(N&&clearTimeout(N),N=setTimeout(()=>ve(!0),Math.max(0,Nx-(Date.now()-oe.at)))))},"schedule");q=setTimeout(()=>ve(!1),D.timeout);let ae=s(oe=>{oe.path!==D.path||oe.serverID!==e.serverID||pe()},"listener");f.add(ae),j=s(()=>f.delete(ae),"unsub"),pe()})}s(H,"waitForFreshPush");async function ue(D){let A=D.after??Date.now(),_=H({path:D.path,version:D.version,after:A,timeout:$l});for(;Date.now()-A<$l;){if((await C(D.path)).matched)return;let q=$l-(Date.now()-A);if(q<=0||await Promise.race([_.then(ve=>ve?"push":"timeout"),U(q).then(ve=>ve?"registration":"timeout")])!=="registration")return}}s(ue,"waitForDocumentDiagnostics");async function L(D){let A=D.after??Date.now(),_=H({path:D.path,version:D.version,after:A,timeout:ql});for(;Date.now()-A<ql;){let N=await $(D.path);if(N.handled||N.matched)return;let q=ql-(Date.now()-A);if(q<=0||await Promise.race([_.then(ve=>ve?"push":"timeout"),U(q).then(ve=>ve?"registration":"timeout")])!=="registration")return}}return s(L,"waitForFullDiagnostics"),{root:e.root,get serverID(){return e.serverID},get connection(){return n},notify:{async open(D){D.path=we.normalizePath(ks.isAbsolute(D.path)?D.path:ks.resolve(e.directory,D.path));let A=await we.readText(D.path),_=ks.extname(D.path),N=vm[_]??"plaintext",q=P[D.path];if(q!==void 0){await n.sendNotification("workspace/didChangeWatchedFiles",{changes:[{uri:io(D.path).href,type:Fx}]});let j=q.version+1;return P[D.path]={version:j,text:A},await n.sendNotification("textDocument/didChange",{textDocument:{uri:io(D.path).href,version:j},contentChanges:T===Bx?[{range:{start:{line:0,character:0},end:qx(q.text)},text:A}]:[{text:A}]}),j}return await n.sendNotification("workspace/didChangeWatchedFiles",{changes:[{uri:io(D.path).href,type:Ux}]}),o.delete(D.path),i.delete(D.path),await n.sendNotification("textDocument/didOpen",{textDocument:{uri:io(D.path).href,languageId:N,version:0,text:A}}),P[D.path]={version:0,text:A},0}},get diagnostics(){let D=new Map;for(let A of new Set([...o.keys(),...i.keys()]))D.set(A,m(A));return D},async waitForDiagnostics(D){let A=we.normalizePath(ks.isAbsolute(D.path)?D.path:ks.resolve(e.directory,D.path));if(D.mode==="document"){await ue({path:A,version:D.version,after:D.after});return}await L({path:A,version:D.version,after:D.after})},async shutdown(){n.end(),n.dispose(),await at.stop(e.server.process)}}}s(Im,"create");import Hl from"path";import{pathToFileURL as Mr,fileURLToPath as FS}from"url";var Gl={};fe(Gl,{Astro:()=>yS,BashLS:()=>TS,Biome:()=>tS,CSharp:()=>cS,Clangd:()=>hS,Clojure:()=>MS,Dart:()=>DS,Deno:()=>Kx,DockerfileLS:()=>CS,ESLint:()=>Zx,ElixirLS:()=>iS,FSharp:()=>pS,Gleam:()=>AS,Gopls:()=>nS,HLS:()=>LS,JDTLS:()=>wS,JuliaLS:()=>NS,KotlinLS:()=>vS,LuaLS:()=>SS,Nixd:()=>_S,Ocaml:()=>ES,Oxlint:()=>eS,PHPIntelephense:()=>IS,Prisma:()=>kS,Pyright:()=>sS,Razor:()=>lS,Rubocop:()=>oS,RustAnalyzer:()=>mS,SourceKit:()=>fS,Svelte:()=>gS,TerraformLS:()=>PS,TexLab:()=>RS,Tinymist:()=>OS,Ty:()=>rS,Typescript:()=>Xx,Vue:()=>Qx,YamlLS:()=>xS,Zls:()=>aS});import ee from"path";import Cr from"os";import{text as Yx}from"node:stream/consumers";import Ge from"fs/promises";var on={};fe(on,{Archive:()=>on,extractZip:()=>zx});import Dm from"path";async function zx(e,t){if(process.platform==="win32"){let n=Dm.resolve(e),o=Dm.resolve(t),i=`$global:ProgressPreference = 'SilentlyContinue'; Expand-Archive -Path '${n}' -DestinationPath '${o}' -Force`;await Qa(["powershell","-NoProfile","-NonInteractive","-Command",i]);return}await Qa(["unzip","-o","-q",e,"-d",t])}s(zx,"extractZip");import{createRequire as Gx}from"node:module";import Hx from"node:path";var Rr;(t=>{function e(n,o){try{return Gx(Hx.join(o,"package.json")).resolve(n)}catch{}}t.resolve=e,s(e,"resolve")})(Rr||={});function Te(e,t,n){let o=Array.isArray(t)?[...t]:[],i=Array.isArray(t)?n:t,a=at.spawn([e,...o],{...i,stdin:"pipe",stdout:"pipe",stderr:"pipe"});if(!a.stdin||!a.stdout||!a.stderr)throw new Error("Process output not available");return a}s(Te,"spawn");var Ar=s(async e=>Ge.stat(e).then(()=>!0).catch(()=>!1),"pathExists"),Ro=s((e,t={})=>at.run(e,{...t,nothrow:!0}),"run"),Jx=s((e,t={})=>at.text(e,{...t,nothrow:!0}),"output"),Fe=s((e,t)=>async(n,o)=>{if(t){let l=we.up({targets:t,start:ee.dirname(n),stop:o.directory}),u=await l.next();if(await l.return(),u.value)return}let i=we.up({targets:e,start:ee.dirname(n),stop:o.directory}),a=await i.next();return await i.return(),a.value?ee.dirname(a.value):o.directory},"NearestRoot"),la=s((e,t)=>async(n,o)=>{if(t){let l=we.up({targets:t,start:ee.dirname(n),stop:o.directory}),u=await l.next();if(await l.return(),u.value)return}let i=we.up({targets:e,start:ee.dirname(n),stop:o.directory}),a=await i.next();if(await i.return(),!!a.value)return ee.dirname(a.value)},"StrictNearestRoot"),Kx={id:"deno",root:s(async(e,t)=>{let n=we.up({targets:["deno.json","deno.jsonc"],start:ee.dirname(e),stop:t.directory}),o=await n.next();if(await n.return(),!!o.value)return ee.dirname(o.value)},"root"),extensions:[".ts",".tsx",".js",".jsx",".mjs"],async spawn(e){let t=ie("deno");if(t)return{process:Te(t,["lsp"],{cwd:e})}}},Xx={id:"typescript",root:Fe(["package-lock.json","bun.lockb","bun.lock","pnpm-lock.yaml","yarn.lock"],["deno.json","deno.jsonc"]),extensions:[".ts",".tsx",".js",".jsx",".mjs",".cjs",".mts",".cts"],async spawn(e,t){let n=Rr.resolve("typescript/lib/tsserver.js",t.directory);if(!n)return;let o=await Ut.which("typescript-language-server");return o?{process:Te(o,["--stdio"],{cwd:e,env:{...process.env}}),initialization:{tsserver:{path:n}}}:void 0}},Qx={id:"vue",extensions:[".vue"],root:Fe(["package-lock.json","bun.lockb","bun.lock","pnpm-lock.yaml","yarn.lock"]),async spawn(e,t,n){let o=ie("vue-language-server"),i=[];if(!o){if(n.disableLspDownload)return;let l=await Ut.which("@vue/language-server");if(!l)return;o=l}return i.push("--stdio"),{process:Te(o,i,{cwd:e,env:{...process.env}}),initialization:{}}}},Zx={id:"eslint",root:Fe(["package-lock.json","bun.lockb","bun.lock","pnpm-lock.yaml","yarn.lock"]),extensions:[".ts",".tsx",".js",".jsx",".mjs",".cjs",".mts",".cts",".vue"],async spawn(e,t,n){if(!Rr.resolve("eslint",t.directory))return;let i=ee.join(Se.Path.bin,"vscode-eslint","server","out","eslintServer.js");if(!await we.exists(i)){if(n.disableLspDownload)return;let l=await fetch("https://github.com/microsoft/vscode-eslint/archive/refs/heads/main.zip");if(!l.ok)return;let u=ee.join(Se.Path.bin,"vscode-eslint.zip");if(l.body&&await we.writeStream(u,l.body),!await on.extractZip(u,Se.Path.bin).then(()=>!0).catch(I=>!1))return;await Ge.rm(u,{force:!0});let m=ee.join(Se.Path.bin,"vscode-eslint-main"),p=ee.join(Se.Path.bin,"vscode-eslint");await Ge.stat(p).catch(()=>{})&&await Ge.rm(p,{force:!0,recursive:!0}),await Ge.rename(m,p);let g=process.platform==="win32"?"npm.cmd":"npm";await at.run([g,"install"],{cwd:p}),await at.run([g,"run","compile"],{cwd:p})}return{process:Te("node",[i,"--stdio"],{cwd:e,env:{...process.env}})}}},eS={id:"oxlint",root:Fe([".oxlintrc.json","package-lock.json","bun.lockb","bun.lock","pnpm-lock.yaml","yarn.lock","package.json"]),extensions:[".ts",".tsx",".js",".jsx",".mjs",".cjs",".mts",".cts",".vue",".astro",".svelte"],async spawn(e,t){let n=process.platform==="win32"?".cmd":"",o=ee.join("node_modules",".bin","oxc_language_server"+n),i=ee.join("node_modules",".bin","oxlint"+n),a=s(async f=>{let m=ee.join(e,f);if(await we.exists(m))return m;let p=we.up({targets:[f],start:e,stop:t.worktree}),h=await p.next();if(await p.return(),h.value)return h.value},"resolveBin"),l=await a(i);if(!l){let f=ie("oxlint");f&&(l=f)}if(l){let f=Te(l,["--help"]);if(await f.exited,f.stdout&&(await Yx(f.stdout)).includes("--lsp"))return{process:Te(l,["--lsp"],{cwd:e})}}let u=await a(o);if(!u){let f=ie("oxc_language_server");f&&(u=f)}if(u)return{process:Te(u,[],{cwd:e})}}},tS={id:"biome",root:Fe(["biome.json","biome.jsonc","package-lock.json","bun.lockb","bun.lock","pnpm-lock.yaml","yarn.lock"]),extensions:[".ts",".tsx",".js",".jsx",".mjs",".cjs",".mts",".cts",".json",".jsonc",".vue",".astro",".svelte",".css",".graphql",".gql",".html"],async spawn(e){let t=ee.join(e,"node_modules",".bin","biome"),n;if(await we.exists(t)&&(n=t),!n){let a=ie("biome");a&&(n=a)}let o=["lsp-proxy","--stdio"];if(!n){if(!Rr.resolve("biome",e)||(n=await Ut.which("biome"),!n))return;o=["lsp-proxy","--stdio"]}return{process:Te(n,o,{cwd:e,env:{...process.env}})}}},nS={id:"gopls",root:s(async(e,t)=>{let n=await Fe(["go.work"])(e,t);return n||Fe(["go.mod","go.sum"])(e,t)},"root"),extensions:[".go"],async spawn(e,t,n){let o=ie("gopls");if(!o){if(!ie("go")||n.disableLspDownload||await at.spawn(["go","install","golang.org/x/tools/gopls@latest"],{env:{...process.env,GOBIN:Se.Path.bin},stdout:"pipe",stderr:"pipe",stdin:"pipe"}).exited!==0)return;o=ee.join(Se.Path.bin,"gopls"+(process.platform==="win32"?".exe":""))}return{process:Te(o,{cwd:e})}}},oS={id:"ruby-lsp",root:Fe(["Gemfile"]),extensions:[".rb",".rake",".gemspec",".ru"],async spawn(e,t,n){let o=ie("rubocop");if(!o){let i=ie("ruby"),a=ie("gem");if(!i||!a||n.disableLspDownload||await at.spawn(["gem","install","rubocop","--bindir",Se.Path.bin],{stdout:"pipe",stderr:"pipe",stdin:"pipe"}).exited!==0)return;o=ee.join(Se.Path.bin,"rubocop"+(process.platform==="win32"?".exe":""))}return{process:Te(o,["--lsp"],{cwd:e})}}},rS={id:"ty",extensions:[".py",".pyi"],root:Fe(["pyproject.toml","ty.toml","setup.py","setup.cfg","requirements.txt","Pipfile","pyrightconfig.json"]),async spawn(e,t,n){if(!n.experimentalLspTy)return;let o=ie("ty"),i={},a=[process.env.VIRTUAL_ENV,ee.join(e,".venv"),ee.join(e,"venv")].filter(u=>u!==void 0);for(let u of a){let m=process.platform==="win32"?ee.join(u,"Scripts","python.exe"):ee.join(u,"bin","python");if(await we.exists(m)){i.pythonPath=m;break}}if(!o)for(let u of a){let m=process.platform==="win32"?ee.join(u,"Scripts","ty.exe"):ee.join(u,"bin","ty");if(await we.exists(m)){o=m;break}}return o?{process:Te(o,["server"],{cwd:e}),initialization:i}:void 0}},sS={id:"pyright",extensions:[".py",".pyi"],root:Fe(["pyproject.toml","setup.py","setup.cfg","requirements.txt","Pipfile","pyrightconfig.json"]),async spawn(e,t,n){let o=ie("pyright-langserver"),i=[];if(!o){if(n.disableLspDownload)return;let f=await Ut.which("pyright","pyright-langserver");if(!f)return;o=f}i.push("--stdio");let a={},l=[process.env.VIRTUAL_ENV,ee.join(e,".venv"),ee.join(e,"venv")].filter(f=>f!==void 0);for(let f of l){let p=process.platform==="win32"?ee.join(f,"Scripts","python.exe"):ee.join(f,"bin","python");if(await we.exists(p)){a.pythonPath=p;break}}return{process:Te(o,i,{cwd:e,env:{...process.env}}),initialization:a}}},iS={id:"elixir-ls",extensions:[".ex",".exs"],root:Fe(["mix.exs","mix.lock"]),async spawn(e,t,n){let o=ie("elixir-ls");if(!o){let i=ee.join(Se.Path.bin,"elixir-ls");if(o=ee.join(Se.Path.bin,"elixir-ls-master","release",process.platform==="win32"?"language_server.bat":"language_server.sh"),!await we.exists(o)){if(!ie("elixir")||n.disableLspDownload)return;let l=await fetch("https://github.com/elixir-lsp/elixir-ls/archive/refs/heads/master.zip");if(!l.ok)return;let u=ee.join(Se.Path.bin,"elixir-ls.zip");if(l.body&&await we.writeStream(u,l.body),!await on.extractZip(u,Se.Path.bin).then(()=>!0).catch(h=>!1))return;await Ge.rm(u,{force:!0,recursive:!0});let m=ee.join(Se.Path.bin,"elixir-ls-master"),p={MIX_ENV:"prod",...process.env};await at.run(["mix","deps.get"],{cwd:m,env:p}),await at.run(["mix","compile"],{cwd:m,env:p}),await at.run(["mix","elixir_ls.release2","-o","release"],{cwd:m,env:p})}}return{process:Te(o,{cwd:e})}}},aS={id:"zls",extensions:[".zig",".zon"],root:Fe(["build.zig"]),async spawn(e,t,n){let o=ie("zls");if(!o){if(!ie("zig")||n.disableLspDownload)return;let a=await fetch("https://api.github.com/repos/zigtools/zls/releases/latest");if(!a.ok)return;let l=await a.json(),u=process.platform,f=process.arch,m="",p=f;f==="arm64"?p="aarch64":f==="x64"?p="x86_64":f==="ia32"&&(p="x86");let h=u;u==="darwin"?h="macos":u==="win32"&&(h="windows");let g=u==="win32"?"zip":"tar.xz";if(m=`zls-${p}-${h}.${g}`,!["zls-x86_64-linux.tar.xz","zls-x86_64-macos.tar.xz","zls-x86_64-windows.zip","zls-aarch64-linux.tar.xz","zls-aarch64-macos.tar.xz","zls-aarch64-windows.zip","zls-x86-linux.tar.xz","zls-x86-windows.zip"].includes(m))return;let T=l.assets?.find(k=>k.name===m);if(!T?.browser_download_url)return;let v=T.browser_download_url,P=await fetch(v);if(!P.ok)return;let d=ee.join(Se.Path.bin,m);if(P.body&&await we.writeStream(d,P.body),g==="zip"){if(!await on.extractZip(d,Se.Path.bin).then(()=>!0).catch(y=>!1))return}else await Ro(["tar","-xf",d],{cwd:Se.Path.bin});if(await Ge.rm(d,{force:!0}),o=ee.join(Se.Path.bin,"zls"+(u==="win32"?".exe":"")),!await we.exists(o))return;u!=="win32"&&await Ge.chmod(o,493).catch(()=>{})}return{process:Te(o,{cwd:e})}}},cS={id:"csharp",root:Fe([".slnx",".sln",".csproj","global.json"]),extensions:[".cs",".csx"],async spawn(e,t,n){let o=await Em(n.disableLspDownload);if(o)return{process:Te(o,["--stdio","--autoLoadProjects"],{cwd:e})}}},lS={id:"razor",root:Fe([".slnx",".sln",".csproj","global.json"]),extensions:[".razor",".cshtml"],async spawn(e,t,n){let o=await Em(n.disableLspDownload);if(!o)return;let i=await uS();if(i)return{process:Te(o,["--stdio","--autoLoadProjects",`--razorSourceGenerator=${i.compiler}`,`--razorDesignTimePath=${i.targets}`,"--extension",i.extension],{cwd:e})}}},zl;async function Em(e){let t=ie("roslyn-language-server");if(t)return t;let n=await Tm();return n||(zl||=dS(e).finally(()=>{zl=void 0}),zl)}s(Em,"getRoslynLanguageServer");async function dS(e){if(!ie("dotnet")||e||await at.spawn(["dotnet","tool","install","--global","roslyn-language-server","--prerelease"],{stdout:"pipe",stderr:"pipe",stdin:"pipe"}).exited!==0)return;let o=ie("roslyn-language-server");if(o)return o;let i=await Tm();if(i)return i}s(dS,"installRoslynLanguageServer");async function Tm(){let e=ee.join(process.env.DOTNET_CLI_HOME??Cr.homedir(),".dotnet","tools","roslyn-language-server"+(process.platform==="win32"?".cmd":""));return await Ar(e)?e:void 0}s(Tm,"roslynLanguageServerGlobalPath");async function uS(){let e=[process.env.VSCODE_EXTENSIONS,ee.join(Cr.homedir(),".vscode","extensions"),ee.join(Cr.homedir(),".vscode-insiders","extensions"),ee.join(Cr.homedir(),".vscode-server","extensions"),ee.join(Cr.homedir(),".vscode-server-insiders","extensions")].filter(t=>t!==void 0);for(let t of[...new Set(e)]){let n=await Ge.readdir(t,{withFileTypes:!0}).catch(()=>[]),o=await Promise.all(n.filter(i=>i.isDirectory()&&i.name.startsWith("ms-dotnettools.csharp-")).map(async i=>({path:ee.join(t,i.name,".razorExtension"),modified:(await Ge.stat(ee.join(t,i.name)).catch(()=>{}))?.mtimeMs??0})));for(let i of o.sort((a,l)=>l.modified-a.modified).map(a=>a.path)){let a={compiler:ee.join(i,"Microsoft.CodeAnalysis.Razor.Compiler.dll"),targets:ee.join(i,"Targets","Microsoft.NET.Sdk.Razor.DesignTime.targets"),extension:ee.join(i,"Microsoft.VisualStudioCode.RazorExtension.dll")};if(await Ar(a.compiler)&&await Ar(a.targets)&&await Ar(a.extension))return a}}}s(uS,"findVscodeRazorExtension");var pS={id:"fsharp",root:Fe([".slnx",".sln",".fsproj","global.json"]),extensions:[".fs",".fsi",".fsx",".fsscript"],async spawn(e,t,n){let o=ie("fsautocomplete");if(!o){if(!ie("dotnet")||n.disableLspDownload||await at.spawn(["dotnet","tool","install","fsautocomplete","--tool-path",Se.Path.bin],{stdout:"pipe",stderr:"pipe",stdin:"pipe"}).exited!==0)return;o=ee.join(Se.Path.bin,"fsautocomplete"+(process.platform==="win32"?".exe":""))}return{process:Te(o,{cwd:e})}}},fS={id:"sourcekit-lsp",extensions:[".swift",".objc","objcpp"],root:Fe(["Package.swift","*.xcodeproj","*.xcworkspace"]),async spawn(e){let t=ie("sourcekit-lsp");if(t)return{process:Te(t,{cwd:e})};if(!ie("xcrun"))return;let n=await Jx(["xcrun","--find","sourcekit-lsp"]);if(n.code!==0)return;let o=n.text.trim();return{process:Te(o,{cwd:e})}}},mS={id:"rust",root:s(async(e,t)=>{let n=await Fe(["Cargo.toml","Cargo.lock"])(e,t);if(n===void 0)return;let o=n;for(;o!==ee.dirname(o);){let i=ee.join(o,"Cargo.toml");try{if((await we.readText(i)).includes("[workspace]"))return o}catch{}let a=ee.dirname(o);if(a===o||(o=a,!o.startsWith(t.worktree)))break}return n},"root"),extensions:[".rs"],async spawn(e){let t=ie("rust-analyzer");if(t)return{process:Te(t,{cwd:e})}}},hS={id:"clangd",root:Fe(["compile_commands.json","compile_flags.txt",".clangd"]),extensions:[".c",".cpp",".cc",".cxx",".c++",".h",".hpp",".hh",".hxx",".h++"],async spawn(e,t,n){let o=["--background-index","--clang-tidy"],i=ie("clangd");if(i)return{process:Te(i,o,{cwd:e})};let a=process.platform==="win32"?".exe":"",l=ee.join(Se.Path.bin,"clangd"+a);if(await we.exists(l))return{process:Te(l,o,{cwd:e})};let u=await Ge.readdir(Se.Path.bin,{withFileTypes:!0}).catch(()=>[]);for(let C of u){if(!C.isDirectory()||!C.name.startsWith("clangd_"))continue;let $=ee.join(Se.Path.bin,C.name,"bin","clangd"+a);if(await we.exists($))return{process:Te($,o,{cwd:e})}}if(n.disableLspDownload)return;let f=await fetch("https://api.github.com/repos/clangd/clangd/releases/latest");if(!f.ok)return;let m=await f.json(),p=m.tag_name;if(!p)return;let h=process.platform,I={darwin:"mac",linux:"linux",win32:"windows"}[h];if(!I)return;let T=m.assets??[],v=s(C=>!C.name||!C.browser_download_url||!C.name.includes(I)?!1:C.name.includes(p),"valid"),P=T.find(C=>v(C)&&C.name?.endsWith(".zip"))??T.find(C=>v(C)&&C.name?.endsWith(".tar.xz"))??T.find(C=>v(C));if(!P?.name||!P.browser_download_url)return;let d=P.name,k=await fetch(P.browser_download_url);if(!k.ok)return;let y=ee.join(Se.Path.bin,d),S=await k.arrayBuffer();if(S.byteLength===0)return;await we.write(y,Buffer.from(S));let E=d.endsWith(".zip"),w=d.endsWith(".tar.xz");if(!E&&!w||E&&!await on.extractZip(y,Se.Path.bin).then(()=>!0).catch($=>!1))return;w&&await Ro(["tar","-xf",y],{cwd:Se.Path.bin}),await Ge.rm(y,{force:!0});let M=ee.join(Se.Path.bin,"clangd_"+p,"bin","clangd"+a);if(await we.exists(M))return h!=="win32"&&await Ge.chmod(M,493).catch(()=>{}),await Ge.unlink(ee.join(Se.Path.bin,"clangd")).catch(()=>{}),await Ge.symlink(M,ee.join(Se.Path.bin,"clangd")).catch(()=>{}),{process:Te(M,o,{cwd:e})}}},gS={id:"svelte",extensions:[".svelte"],root:Fe(["package-lock.json","bun.lockb","bun.lock","pnpm-lock.yaml","yarn.lock"]),async spawn(e,t,n){let o=ie("svelteserver"),i=[];if(!o){if(n.disableLspDownload)return;let l=await Ut.which("svelte-language-server");if(!l)return;o=l}return i.push("--stdio"),{process:Te(o,i,{cwd:e,env:{...process.env}}),initialization:{}}}},yS={id:"astro",extensions:[".astro"],root:Fe(["package-lock.json","bun.lockb","bun.lock","pnpm-lock.yaml","yarn.lock"]),async spawn(e,t,n){let o=Rr.resolve("typescript/lib/tsserver.js",t.directory);if(!o)return;let i=ee.dirname(o),a=ie("astro-ls"),l=[];if(!a){if(n.disableLspDownload)return;let f=await Ut.which("@astrojs/language-server");if(!f)return;a=f}return l.push("--stdio"),{process:Te(a,l,{cwd:e,env:{...process.env}}),initialization:{typescript:{tsdk:i}}}}};function bS(e,t){let n=t.replace(/\\/g,"/").replace(/\/$/,"");if(!n)return!1;let o=e.match(/<modules>([\s\S]*?)<\/modules>/g)??[];for(let i of o){let a=i.replace(/<!--[\s\S]*?-->/g,"");for(let l of a.matchAll(/<module>\s*([^<]+?)\s*<\/module>/g))if(l[1].replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/$/,"")===n)return!0}return!1}s(bS,"isModuleOf");var wS={id:"jdtls",root:s(async(e,t)=>{let n=["settings.gradle","settings.gradle.kts"],o=["gradlew","gradlew.bat"],[i,a]=await Promise.all([la(o,n)(e,t),la(n)(e,t)]);if(i)return i;if(a)return a;let l=await la(["build.gradle","build.gradle.kts"])(e,t);if(l)return l;let u=await we.findUp("pom.xml",ee.dirname(e),t.directory);if(u.length>0){let m=ee.dirname(u[0]);for(let p=1;p<u.length;p++){let h=ee.dirname(u[p]),g=ee.relative(h,m),I=await Ge.readFile(u[p],"utf-8").catch(()=>null);if(I&&bS(I,g))m=h;else break}return m}let f=await la([".project",".classpath"])(e,t);if(f)return f},"root"),extensions:[".java"],async spawn(e,t,n){let o=ie("java");if(!o)return;let i=await Ro(["java","-version"]).then(g=>{let I=/"(\d+)\.\d+\.\d+"/.exec(g.stderr.toString());return I?parseInt(I[1]):void 0});if(i==null||i<21)return;let a=ee.join(Se.Path.bin,"jdtls"),l=ee.join(a,"plugins");if(!await Ar(l)){if(n.disableLspDownload)return;await Ge.mkdir(a,{recursive:!0});let g="https://www.eclipse.org/downloads/download.php?file=/jdtls/snapshots/jdt-language-server-latest.tar.gz",I="release.tar.gz",T=await fetch(g);if(!T.ok||!T.body||(await we.writeStream(ee.join(a,I),T.body),(await Ro(["tar","-xzf",I],{cwd:a})).code!==0))return;await Ge.rm(ee.join(a,I),{force:!0})}let f=(await Ge.readdir(l).catch(()=>[])).find(g=>/^org\.eclipse\.equinox\.launcher_.*\.jar$/.test(g))?.trim()??"",m=ee.join(l,f);if(!await Ar(m))return;let p=ee.join(a,(()=>{switch(process.platform){case"darwin":return"config_mac";case"linux":return"config_linux";case"win32":return"config_win";default:return"config_linux"}})()),h=await Ge.mkdtemp(ee.join(Cr.tmpdir(),"opencode-jdtls-data"));return{process:Te(o,["-jar",m,"-configuration",p,"-data",h,"-Declipse.application=org.eclipse.jdt.ls.core.id1","-Dosgi.bundles.defaultStartLevel=4","-Declipse.product=org.eclipse.jdt.ls.core.product","-Dlog.level=ALL","--add-modules=ALL-SYSTEM","--add-opens java.base/java.util=ALL-UNNAMED","--add-opens java.base/java.lang=ALL-UNNAMED"],{cwd:e})}}},vS={id:"kotlin-ls",extensions:[".kt",".kts"],root:s(async(e,t)=>{let n=await Fe(["settings.gradle.kts","settings.gradle"])(e,t);if(n)return n;let o=await Fe(["gradlew","gradlew.bat"])(e,t);if(o)return o;let i=await Fe(["build.gradle.kts","build.gradle"])(e,t);return i||Fe(["pom.xml"])(e,t)},"root"),async spawn(e,t,n){let o=ee.join(Se.Path.bin,"kotlin-ls"),i=process.platform==="win32"?ee.join(o,"kotlin-lsp.cmd"):ee.join(o,"kotlin-lsp.sh");if(!await we.exists(i)){if(n.disableLspDownload)return;let l=await fetch("https://api.github.com/repos/Kotlin/kotlin-lsp/releases/latest");if(!l.ok)return;let f=(await l.json()).name?.replace(/^v/,"");if(!f)return;let m=process.platform,p=process.arch,h=p;p==="arm64"?h="aarch64":p==="x64"&&(h="x64");let g=m;m==="darwin"?g="mac":m==="linux"?g="linux":m==="win32"&&(g="win");let I=["mac-x64","mac-aarch64","linux-x64","linux-aarch64","win-x64","win-aarch64"],T=`${g}-${h}`;if(!I.includes(T))return;let v=`kotlin-lsp-${f}-${g}-${h}.zip`,P=`https://download-cdn.jetbrains.com/kotlin-lsp/${f}/${v}`;await Ge.mkdir(o,{recursive:!0});let d=ee.join(o,"kotlin-ls.zip"),k=await fetch(P);if(!k.ok||!k.body||(await we.writeStream(d,k.body),!await on.extractZip(d,o).then(()=>!0).catch(S=>!1)))return;await Ge.rm(d,{force:!0}),process.platform!=="win32"&&await Ge.chmod(i,493).catch(()=>{})}if(await we.exists(i))return{process:Te(i,["--stdio"],{cwd:e})}}},xS={id:"yaml-ls",extensions:[".yaml",".yml"],root:Fe(["package-lock.json","bun.lockb","bun.lock","pnpm-lock.yaml","yarn.lock"]),async spawn(e,t,n){let o=ie("yaml-language-server"),i=[];if(!o){if(n.disableLspDownload)return;let l=await Ut.which("yaml-language-server");if(!l)return;o=l}return i.push("--stdio"),{process:Te(o,i,{cwd:e,env:{...process.env}})}}},SS={id:"lua-ls",root:Fe([".luarc.json",".luarc.jsonc",".luacheckrc",".stylua.toml","stylua.toml","selene.toml","selene.yml"]),extensions:[".lua"],async spawn(e,t,n){let o=ie("lua-language-server");if(!o){if(n.disableLspDownload)return;let i=await fetch("https://api.github.com/repos/LuaLS/lua-language-server/releases/latest");if(!i.ok)return;let a=await i.json(),l=process.platform,u=process.arch,f="",m=u;u==="arm64"?m="arm64":u==="x64"?m="x64":u==="ia32"&&(m="ia32");let p=l;l==="darwin"?p="darwin":l==="linux"?p="linux":l==="win32"&&(p="win32");let h=l==="win32"?"zip":"tar.gz";f=`lua-language-server-${a.tag_name}-${p}-${m}.${h}`;let g=["darwin-arm64.tar.gz","darwin-x64.tar.gz","linux-x64.tar.gz","linux-arm64.tar.gz","win32-x64.zip","win32-ia32.zip"],I=`${p}-${m}.${h}`;if(!g.includes(I))return;let T=a.assets.find(S=>S.name===f);if(!T)return;let v=T.browser_download_url,P=await fetch(v);if(!P.ok)return;let d=ee.join(Se.Path.bin,f);P.body&&await we.writeStream(d,P.body);let k=ee.join(Se.Path.bin,`lua-language-server-${m}-${p}`);if(await Ge.stat(k).catch(()=>{})&&await Ge.rm(k,{force:!0,recursive:!0}),await Ge.mkdir(k,{recursive:!0}),h==="zip"){if(!await on.extractZip(d,k).then(()=>!0).catch(E=>!1))return}else if(!await Ro(["tar","-xzf",d,"-C",k]).then(E=>E.code===0).catch(E=>!1))return;if(await Ge.rm(d,{force:!0}),o=ee.join(k,"bin","lua-language-server"+(l==="win32"?".exe":"")),!await we.exists(o)||l!=="win32"&&!await Ge.chmod(o,493).then(()=>!0).catch(E=>!1))return}return{process:Te(o,{cwd:e})}}},IS={id:"php intelephense",extensions:[".php"],root:Fe(["composer.json","composer.lock",".php-version"]),async spawn(e,t,n){let o=ie("intelephense"),i=[];if(!o){if(n.disableLspDownload)return;let l=await Ut.which("intelephense");if(!l)return;o=l}return i.push("--stdio"),{process:Te(o,i,{cwd:e,env:{...process.env}}),initialization:{telemetry:{enabled:!1}}}}},kS={id:"prisma",extensions:[".prisma"],root:Fe(["schema.prisma","prisma/schema.prisma","prisma"],["package.json"]),async spawn(e){let t=ie("prisma");if(t)return{process:Te(t,["language-server"],{cwd:e})}}},DS={id:"dart",extensions:[".dart"],root:Fe(["pubspec.yaml","analysis_options.yaml"]),async spawn(e){let t=ie("dart");if(t)return{process:Te(t,["language-server","--lsp"],{cwd:e})}}},ES={id:"ocaml-lsp",extensions:[".ml",".mli"],root:Fe(["dune-project","dune-workspace",".merlin","opam"]),async spawn(e){let t=ie("ocamllsp");if(t)return{process:Te(t,{cwd:e})}}},TS={id:"bash",extensions:[".sh",".bash",".zsh",".ksh"],root:s(async(e,t)=>t.directory,"root"),async spawn(e,t,n){let o=ie("bash-language-server"),i=[];if(!o){if(n.disableLspDownload)return;let l=await Ut.which("bash-language-server");if(!l)return;o=l}return i.push("start"),{process:Te(o,i,{cwd:e,env:{...process.env}})}}},PS={id:"terraform",extensions:[".tf",".tfvars"],root:Fe([".terraform.lock.hcl","terraform.tfstate","*.tf"]),async spawn(e,t,n){let o=ie("terraform-ls");if(!o){if(n.disableLspDownload)return;let i=await fetch("https://api.releases.hashicorp.com/v1/releases/terraform-ls/latest");if(!i.ok)return;let a=await i.json(),l=process.platform,f=process.arch==="arm64"?"arm64":"amd64",m=l==="win32"?"windows":l,h=(a.builds??[]).find(v=>v.arch===f&&v.os===m);if(!h?.url)return;let g=await fetch(h.url);if(!g.ok)return;let I=ee.join(Se.Path.bin,"terraform-ls.zip");if(g.body&&await we.writeStream(I,g.body),!await on.extractZip(I,Se.Path.bin).then(()=>!0).catch(v=>!1)||(await Ge.rm(I,{force:!0}),o=ee.join(Se.Path.bin,"terraform-ls"+(l==="win32"?".exe":"")),!await we.exists(o)))return;l!=="win32"&&await Ge.chmod(o,493).catch(()=>{})}return{process:Te(o,["serve"],{cwd:e}),initialization:{experimentalFeatures:{prefillRequiredFields:!0,validateOnSave:!0}}}}},RS={id:"texlab",extensions:[".tex",".bib"],root:Fe([".latexmkrc","latexmkrc",".texlabroot","texlabroot"]),async spawn(e,t,n){let o=ie("texlab");if(!o){if(n.disableLspDownload)return;let i=await fetch("https://api.github.com/repos/latex-lsp/texlab/releases/latest");if(!i.ok)return;let a=await i.json();if(!a.tag_name?.replace("v",""))return;let u=process.platform,m=process.arch==="arm64"?"aarch64":"x86_64",p=u==="darwin"?"macos":u==="win32"?"windows":"linux",h=u==="win32"?"zip":"tar.gz",g=`texlab-${m}-${p}.${h}`,T=(a.assets??[]).find(d=>d.name===g);if(!T?.browser_download_url)return;let v=await fetch(T.browser_download_url);if(!v.ok)return;let P=ee.join(Se.Path.bin,g);if(v.body&&await we.writeStream(P,v.body),h==="zip"&&!await on.extractZip(P,Se.Path.bin).then(()=>!0).catch(k=>!1)||(h==="tar.gz"&&await Ro(["tar","-xzf",P],{cwd:Se.Path.bin}),await Ge.rm(P,{force:!0}),o=ee.join(Se.Path.bin,"texlab"+(u==="win32"?".exe":"")),!await we.exists(o)))return;u!=="win32"&&await Ge.chmod(o,493).catch(()=>{})}return{process:Te(o,{cwd:e})}}},CS={id:"dockerfile",extensions:[".dockerfile","Dockerfile"],root:s(async(e,t)=>t.directory,"root"),async spawn(e,t,n){let o=ie("docker-langserver"),i=[];if(!o){if(n.disableLspDownload)return;let l=await Ut.which("dockerfile-language-server-nodejs");if(!l)return;o=l}return i.push("--stdio"),{process:Te(o,i,{cwd:e,env:{...process.env}})}}},AS={id:"gleam",extensions:[".gleam"],root:Fe(["gleam.toml"]),async spawn(e){let t=ie("gleam");if(t)return{process:Te(t,["lsp"],{cwd:e})}}},MS={id:"clojure-lsp",extensions:[".clj",".cljs",".cljc",".edn"],root:Fe(["deps.edn","project.clj","shadow-cljs.edn","bb.edn","build.boot"]),async spawn(e){let t=ie("clojure-lsp");if(!t&&process.platform==="win32"&&(t=ie("clojure-lsp.exe")),!!t)return{process:Te(t,["listen"],{cwd:e})}}},_S={id:"nixd",extensions:[".nix"],root:s(async(e,t)=>{let n=await Fe(["flake.nix"])(e,t);return n&&n!==t.directory?n:t.worktree&&t.worktree!==t.directory?t.worktree:t.directory},"root"),async spawn(e){let t=ie("nixd");if(t)return{process:Te(t,[],{cwd:e,env:{...process.env}})}}},OS={id:"tinymist",extensions:[".typ",".typc"],root:Fe(["typst.toml"]),async spawn(e,t,n){let o=ie("tinymist");if(!o){if(n.disableLspDownload)return;let i=await fetch("https://api.github.com/repos/Myriad-Dreamin/tinymist/releases/latest");if(!i.ok)return;let a=await i.json(),l=process.platform,f=process.arch==="arm64"?"aarch64":"x86_64",m,p;l==="darwin"?(m="apple-darwin",p="tar.gz"):l==="win32"?(m="pc-windows-msvc",p="zip"):(m="unknown-linux-gnu",p="tar.gz");let h=`tinymist-${f}-${m}.${p}`,I=(a.assets??[]).find(P=>P.name===h);if(!I?.browser_download_url)return;let T=await fetch(I.browser_download_url);if(!T.ok)return;let v=ee.join(Se.Path.bin,h);if(T.body&&await we.writeStream(v,T.body),p==="zip"){if(!await on.extractZip(v,Se.Path.bin).then(()=>!0).catch(d=>!1))return}else await Ro(["tar","-xzf",v,"--strip-components=1"],{cwd:Se.Path.bin});if(await Ge.rm(v,{force:!0}),o=ee.join(Se.Path.bin,"tinymist"+(l==="win32"?".exe":"")),!await we.exists(o))return;l!=="win32"&&await Ge.chmod(o,493).catch(()=>{})}return{process:Te(o,{cwd:e})}}},LS={id:"haskell-language-server",extensions:[".hs",".lhs"],root:Fe(["stack.yaml","cabal.project","hie.yaml","*.cabal"]),async spawn(e){let t=ie("haskell-language-server-wrapper");if(t)return{process:Te(t,["--lsp"],{cwd:e})}}},NS={id:"julials",extensions:[".jl"],root:Fe(["Project.toml","Manifest.toml","*.jl"]),async spawn(e){let t=ie("julia");if(t)return{process:Te(t,["--startup-file=no","--history-file=no","-e","using LanguageServer; runserver()"],{cwd:e})}}};var Ds={};fe(Ds,{Definitions:()=>jS,LspEvent:()=>Ds,Updated:()=>Pm});var Pm=Tt.define({type:"lsp.updated",schema:{}}),jS=Tt.inventory(Pm);var Es={};fe(Es,{Diagnostic:()=>Es,pretty:()=>Cm,report:()=>US});var Rm=20;function Cm(e){let n={1:"ERROR",2:"WARN",3:"INFO",4:"HINT"}[e.severity||1],o=e.range.start.line+1,i=e.range.start.character+1;return`${n} [${o}:${i}] ${e.message}`}s(Cm,"pretty");function US(e,t){let n=t.filter(l=>l.severity===1);if(n.length===0)return"";let o=n.slice(0,Rm),i=n.length-Rm,a=i>0?`
1030
1030
  ... and ${i} more`:"";return`<diagnostics file="${e}">
1031
1031
  ${o.map(Cm).join(`
1032
1032
  `)}${a}
1033
- </diagnostics>`}s(jS,"report");var Mm=Ds,Am=c.Struct({line:mn,character:mn}),da=c.Struct({start:Am,end:Am}).annotate({identifier:"Range"}),FS=c.Struct({name:c.String,kind:mn,location:c.Struct({uri:c.String,range:da})}).annotate({identifier:"Symbol"}),BS=c.Struct({name:c.String,detail:c.optional(c.String),kind:mn,range:da,selectionRange:da}).annotate({identifier:"DocumentSymbol"}),$S=c.Struct({id:c.String,name:c.String,root:c.String,status:c.Literals(["connected","error"])}).annotate({identifier:"LSPStatus"});var qS=[5,12,6,11,13,14,23,10],WS=s((e,t)=>{t.experimentalLspTy?e.pyright&&delete e.pyright:e.ty&&delete e.ty},"filterExperimentalServers"),_r=class extends Ce.Service()("@opencode/LSP"){static{s(this,"Service")}},VS=Pe.effect(_r,r.gen(function*(){let e=yield*Ne.Service,t=yield*Ve.Service,n=yield*Ee.Service,o=yield*V.make(r.fn("LSP.state")(function*(w){let M=yield*e.get(),C={};if(!M.lsp)yield*r.logInfo("all LSPs are disabled");else{for(let U of Object.values(Gl))C[U.id]=U;if(WS(C,t),M.lsp!==!0)for(let[U,H]of Object.entries(M.lsp)){let ue=C[U];if(H.disabled){yield*r.logInfo(`LSP server ${U} is disabled`),delete C[U];continue}C[U]={...ue,id:U,root:ue?.root??(async(L,W)=>W.directory),extensions:H.extensions??ue?.extensions??[],spawn:s(async L=>({process:Te(H.command[0],H.command.slice(1),{cwd:L,env:{...process.env,...H.env}}),initialization:H.initialization}),"spawn")}}yield*r.logInfo("enabled LSP servers",{serverIds:Object.values(C).map(U=>U.id).join(", ")})}let $={clients:[],servers:C,broken:new Set,spawning:new Map};return yield*r.addFinalizer(()=>r.promise(async()=>{await Promise.all($.clients.map(U=>U.shutdown()))})),$})),i=r.fnUntraced(function*(w){let M=yield*V.context;if(!pi(w,M))return[];let C=yield*V.get(o),$=yield*r.promise(async()=>{let U=Hl.parse(w).ext||w,H=[],ue=0;async function L(W,D,A){let _=await W.spawn(D,M,t).then(j=>(j||C.broken.add(A),j)).catch(()=>{C.broken.add(A)});if(!_)return;let N=await Im({serverID:W.id,server:_,root:D,directory:M.directory,instance:M}).catch(async()=>{C.broken.add(A),await at.stop(_.process)});if(!N)return;let q=C.clients.find(j=>j.root===D&&j.serverID===W.id);return q?(await at.stop(_.process),q):(C.clients.push(N),N)}s(L,"schedule");for(let W of Object.values(C.servers)){if(W.extensions.length&&!W.extensions.includes(U))continue;let D=await W.root(w,M);if(!D||C.broken.has(D+W.id))continue;let A=C.clients.find(j=>j.root===D&&j.serverID===W.id);if(A){H.push(A);continue}let _=C.spawning.get(D+W.id);if(_){let j=await _;if(!j)continue;H.push(j);continue}let N=L(W,D,D+W.id);C.spawning.set(D+W.id,N),N.finally(()=>{C.spawning.get(D+W.id)===N&&C.spawning.delete(D+W.id)});let q=await N;q&&(H.push(q),ue++)}return{result:H,updated:ue}});return yield*r.forEach(Array.from({length:$.updated}),()=>n.publish(Mm.Updated,{}),{discard:!0}),$.result}),a=r.fnUntraced(function*(w,M){let C=yield*i(w);return yield*r.promise(()=>Promise.all(C.map($=>M($))))}),l=r.fnUntraced(function*(w){let M=yield*V.get(o);return yield*r.promise(()=>Promise.all(M.clients.map(C=>w(C))))}),u=r.fn("LSP.init")(function*(){yield*V.get(o)}),f=r.fn("LSP.status")(function*(){let w=yield*V.context,M=yield*V.get(o),C=[];for(let $ of M.clients)C.push({id:$.serverID,name:M.servers[$.serverID].id,root:Hl.relative(w.directory,$.root),status:"connected"});return C}),m=r.fn("LSP.hasClients")(function*(w){let M=yield*V.context,C=yield*V.get(o);return yield*r.promise(async()=>{let $=Hl.parse(w).ext||w;for(let U of Object.values(C.servers)){if(U.extensions.length&&!U.extensions.includes($))continue;let H=await U.root(w,M);if(H&&!C.broken.has(H+U.id))return!0}return!1})}),p=r.fn("LSP.touchFile")(function*(w,M){yield*r.logInfo("touching file",{file:w});let C=yield*i(w);yield*r.promise(()=>Promise.all(C.map(async $=>{let U=Date.now(),H=await $.notify.open({path:w});if(M)return $.waitForDiagnostics({path:w,version:H,mode:M,after:U})})).catch(()=>{}))}),h=r.fn("LSP.diagnostics")(function*(){let w={},M=yield*l(async C=>C.diagnostics);for(let C of M)for(let[$,U]of C.entries()){let H=w[$]||[];H.push(...U),w[$]=H}return w}),g=r.fn("LSP.hover")(function*(w){return yield*a(w.file,M=>M.connection.sendRequest("textDocument/hover",{textDocument:{uri:Mr(w.file).href},position:{line:w.line,character:w.character}}).catch(()=>null))}),I=r.fn("LSP.definition")(function*(w){return(yield*a(w.file,C=>C.connection.sendRequest("textDocument/definition",{textDocument:{uri:Mr(w.file).href},position:{line:w.line,character:w.character}}).catch(()=>null))).flat().filter(Boolean)}),T=r.fn("LSP.references")(function*(w){return(yield*a(w.file,C=>C.connection.sendRequest("textDocument/references",{textDocument:{uri:Mr(w.file).href},position:{line:w.line,character:w.character},context:{includeDeclaration:!0}}).catch(()=>[]))).flat().filter(Boolean)}),v=r.fn("LSP.implementation")(function*(w){return(yield*a(w.file,C=>C.connection.sendRequest("textDocument/implementation",{textDocument:{uri:Mr(w.file).href},position:{line:w.line,character:w.character}}).catch(()=>null))).flat().filter(Boolean)}),P=r.fn("LSP.documentSymbol")(function*(w){let M=US(w);return(yield*a(M,$=>$.connection.sendRequest("textDocument/documentSymbol",{textDocument:{uri:w}}).catch(()=>[]))).flat().filter(Boolean)}),d=r.fn("LSP.workspaceSymbol")(function*(w){return(yield*l(C=>C.connection.sendRequest("workspace/symbol",{query:w}).then($=>$.filter(U=>qS.includes(U.kind)).slice(0,10)).catch(()=>[]))).flat()}),k=r.fn("LSP.prepareCallHierarchy")(function*(w){return(yield*a(w.file,C=>C.connection.sendRequest("textDocument/prepareCallHierarchy",{textDocument:{uri:Mr(w.file).href},position:{line:w.line,character:w.character}}).catch(()=>[]))).flat().filter(Boolean)}),y=r.fnUntraced(function*(w,M){return(yield*a(w.file,async $=>{let U=await $.connection.sendRequest("textDocument/prepareCallHierarchy",{textDocument:{uri:Mr(w.file).href},position:{line:w.line,character:w.character}}).catch(()=>[]);return U?.length?$.connection.sendRequest(M,{item:U[0]}).catch(()=>[]):[]})).flat().filter(Boolean)}),x=r.fn("LSP.incomingCalls")(function*(w){return yield*y(w,"callHierarchy/incomingCalls")}),E=r.fn("LSP.outgoingCalls")(function*(w){return yield*y(w,"callHierarchy/outgoingCalls")});return _r.of({init:u,status:f,hasClients:m,touchFile:p,diagnostics:h,hover:g,definition:I,references:T,implementation:v,documentSymbol:P,workspaceSymbol:d,prepareCallHierarchy:k,incomingCalls:x,outgoingCalls:E})})),zS=De.make({service:_r,layer:VS,deps:[Ne.node,Ve.node,Me.node,Ee.node]});var Jt={};fe(Jt,{Format:()=>Jt,Service:()=>Co,Status:()=>bI,node:()=>xI,use:()=>wI});import yI from"path";var ua={};fe(ua,{biome:()=>KS,clang:()=>QS,cljfmt:()=>hI,dart:()=>sI,dfmt:()=>gI,gleam:()=>lI,gofmt:()=>GS,htmlbeautifier:()=>rI,ktlint:()=>ZS,latexindent:()=>cI,mix:()=>HS,nixfmt:()=>uI,ocamlformat:()=>iI,ormolu:()=>mI,oxfmt:()=>JS,pint:()=>fI,prettier:()=>YS,rlang:()=>eI,rubocop:()=>nI,ruff:()=>_m,rustfmt:()=>pI,shfmt:()=>dI,standardrb:()=>oI,terraform:()=>aI,uvformat:()=>tI,zig:()=>XS});var GS={name:"gofmt",extensions:[".go"],async enabled(){let e=ie("gofmt");return e?[e,"-w","$FILE"]:!1}},HS={name:"mix",extensions:[".ex",".exs",".eex",".heex",".leex",".neex",".sface"],async enabled(){let e=ie("mix");return e?[e,"format","$FILE"]:!1}},YS={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(e){let t=await we.findUp("package.json",e.directory,e.worktree);for(let n of t){let o=await we.readJson(n);if(o.dependencies?.prettier||o.devDependencies?.prettier){let i=await Ut.which("prettier");if(i)return[i,"--write","$FILE"]}}return!1}},JS={name:"oxfmt",environment:{BUN_BE_BUN:"1"},extensions:[".js",".jsx",".mjs",".cjs",".ts",".tsx",".mts",".cts"],async enabled(e){if(!e.experimentalOxfmt)return!1;let t=await we.findUp("package.json",e.directory,e.worktree);for(let n of t){let o=await we.readJson(n);if(o.dependencies?.oxfmt||o.devDependencies?.oxfmt){let i=await Ut.which("oxfmt");if(i)return[i,"$FILE"]}}return!1}},KS={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(e){let t=["biome.json","biome.jsonc"];for(let n of t)if((await we.findUp(n,e.directory,e.worktree)).length>0){let i=await Ut.which("@biomejs/biome");if(i)return[i,"format","--write","$FILE"]}return!1}},XS={name:"zig",extensions:[".zig",".zon"],async enabled(){let e=ie("zig");return e?[e,"fmt","$FILE"]:!1}},QS={name:"clang-format",extensions:[".c",".cc",".cpp",".cxx",".c++",".h",".hh",".hpp",".hxx",".h++",".ino",".C",".H"],async enabled(e){if((await we.findUp(".clang-format",e.directory,e.worktree)).length>0){let n=ie("clang-format");if(n)return[n,"-i","$FILE"]}return!1}},ZS={name:"ktlint",extensions:[".kt",".kts"],async enabled(){let e=ie("ktlint");return e?[e,"-F","$FILE"]:!1}},_m={name:"ruff",extensions:[".py",".pyi"],async enabled(e){if(!ie("ruff"))return!1;let t=["pyproject.toml","ruff.toml",".ruff.toml"];for(let o of t){let i=await we.findUp(o,e.directory,e.worktree);if(i.length>0)if(o==="pyproject.toml"){if((await we.readText(i[0])).includes("[tool.ruff]"))return["ruff","format","$FILE"]}else return["ruff","format","$FILE"]}let n=["requirements.txt","pyproject.toml","Pipfile"];for(let o of n){let i=await we.findUp(o,e.directory,e.worktree);if(i.length>0&&(await we.readText(i[0])).includes("ruff"))return["ruff","format","$FILE"]}return!1}},eI={name:"air",extensions:[".R"],async enabled(){let e=ie("air");if(e==null)return!1;let t=await at.text([e,"--help"],{nothrow:!0}),n=t.text.split(`
1034
- `)[0],o=n.includes("R language"),i=n.includes("formatter");return t.code===0&&o&&i?[e,"format","$FILE"]:!1}},tI={name:"uv",extensions:[".py",".pyi"],async enabled(e){if(await _m.enabled(e))return!1;let t=ie("uv");return t==null?!1:(await at.run([t,"format","--help"],{nothrow:!0})).code===0?[t,"format","--","$FILE"]:!1}},nI={name:"rubocop",extensions:[".rb",".rake",".gemspec",".ru"],async enabled(){let e=ie("rubocop");return e?[e,"--autocorrect","$FILE"]:!1}},oI={name:"standardrb",extensions:[".rb",".rake",".gemspec",".ru"],async enabled(){let e=ie("standardrb");return e?[e,"--fix","$FILE"]:!1}},rI={name:"htmlbeautifier",extensions:[".erb",".html.erb"],async enabled(){let e=ie("htmlbeautifier");return e?[e,"$FILE"]:!1}},sI={name:"dart",extensions:[".dart"],async enabled(){let e=ie("dart");return e?[e,"format","$FILE"]:!1}},iI={name:"ocamlformat",extensions:[".ml",".mli"],async enabled(e){return ie("ocamlformat")&&(await we.findUp(".ocamlformat",e.directory,e.worktree)).length>0?["ocamlformat","-i","$FILE"]:!1}},aI={name:"terraform",extensions:[".tf",".tfvars"],async enabled(){let e=ie("terraform");return e?[e,"fmt","$FILE"]:!1}},cI={name:"latexindent",extensions:[".tex"],async enabled(){let e=ie("latexindent");return e?[e,"-w","-s","$FILE"]:!1}},lI={name:"gleam",extensions:[".gleam"],async enabled(){let e=ie("gleam");return e?[e,"format","$FILE"]:!1}},dI={name:"shfmt",extensions:[".sh",".bash"],async enabled(){let e=ie("shfmt");return e?[e,"-w","$FILE"]:!1}},uI={name:"nixfmt",extensions:[".nix"],async enabled(){let e=ie("nixfmt");return e?[e,"$FILE"]:!1}},pI={name:"rustfmt",extensions:[".rs"],async enabled(){let e=ie("rustfmt");return e?[e,"$FILE"]:!1}},fI={name:"pint",extensions:[".php"],async enabled(e){let t=await we.findUp("composer.json",e.directory,e.worktree);for(let n of t){let o=await we.readJson(n);if(o.require?.["laravel/pint"]||o["require-dev"]?.["laravel/pint"])return["./vendor/bin/pint","$FILE"]}return!1}},mI={name:"ormolu",extensions:[".hs"],async enabled(){let e=ie("ormolu");return e?[e,"-i","$FILE"]:!1}},hI={name:"cljfmt",extensions:[".clj",".cljs",".cljc",".edn"],async enabled(){let e=ie("cljfmt");return e?[e,"fix","--quiet","$FILE"]:!1}},gI={name:"dfmt",extensions:[".d"],async enabled(){let e=ie("dfmt");return e?[e,"-i","$FILE"]:!1}};var bI=c.Struct({name:c.String,extensions:c.Array(c.String),enabled:c.Boolean}).annotate({identifier:"FormatterStatus"}),Co=class extends Ce.Service()("@opencode/Format"){static{s(this,"Service")}},wI=Wt(Co),vI=Pe.effect(Co,r.gen(function*(){let e=yield*Ne.Service,t=yield*Ko.Service,n=yield*Ve.Service,o=yield*V.make(r.fn("Format.state")(function*(u){let f={},m={};async function p(v){let P=f[v.name];return(P===!1||P===void 0)&&(P=await v.enabled({...u,experimentalOxfmt:n.experimentalOxfmt}),f[v.name]=P),P}s(p,"getCommand");async function h(v){return await p(v)!==!1}s(h,"isEnabled");async function g(v){let P=Object.values(m).filter(k=>k.extensions.includes(v));return(await Promise.all(P.map(async k=>{let y=await p(k);return{item:k,cmd:y}}))).filter(k=>k.cmd!==!1).map(k=>({item:k.item,cmd:k.cmd}))}s(g,"getFormatter");function I(v){return r.gen(function*(){yield*r.logInfo("formatting",{file:v});let P=yield*r.promise(()=>g(yI.extname(v)));if(!P.length)return!1;for(let{item:d,cmd:k}of P){yield*r.logInfo("running",{command:k});let y=k.map(w=>w.replace("$FILE",v)),x=yield*V.directory,E=yield*t.run(Vn.make(y[0],y.slice(1),{cwd:x,env:d.environment,extendEnv:!0,stdin:"ignore",stdout:"ignore",stderr:"ignore"})).pipe(r.catch(w=>r.logError("failed to format file",{error:"spawn failed",command:k,...d.environment,file:v,cause:gn(w.cause??w)}).pipe(r.as(void 0))));E&&E.exitCode!==0&&(yield*r.logError("failed",{command:k,...d.environment}))}return!0})}s(I,"formatFile");let T=yield*e.get();if(!T.formatter)return yield*r.logInfo("all formatters are disabled"),yield*r.logInfo("init"),{formatters:m,isEnabled:h,formatFile:I};for(let v of Object.values(ua))m[v.name]=v;if(T.formatter!==!0)for(let[v,P]of Object.entries(T.formatter)){let d=ua[v];if(["ruff","uv"].includes(v)&&(T.formatter.ruff?.disabled||T.formatter.uv?.disabled)){delete m.ruff,delete m.uv;continue}if(P.disabled){delete m[v];continue}let k=di(d??{extensions:[]},P);m[v]={...k,name:v,extensions:k.extensions??[],enabled:d&&!k.command?d.enabled:async y=>k.command??!1}}return yield*r.logInfo("init"),{formatters:m,isEnabled:h,formatFile:I}})),i=r.fn("Format.init")(function*(){yield*V.get(o)}),a=r.fn("Format.status")(function*(){let{formatters:u,isEnabled:f}=yield*V.get(o),m=[];for(let p of Object.values(u)){let h=yield*r.promise(()=>f(p));m.push({name:p.name,extensions:p.extensions,enabled:h})}return m}),l=r.fn("Format.file")(function*(u){let{formatFile:f}=yield*V.get(o);return yield*f(u)});return Co.of({init:i,status:a,file:l})})),xI=De.make({service:Co,layer:vI,deps:[Ne.node,Ko.node,Ve.node]});var $n={};fe($n,{Service:()=>jr,ToolRegistry:()=>$n,node:()=>Zk,webSearchEnabled:()=>Lh});import SI from"path";var Om=`Use this tool when you have completed the planning phase and are ready to exit plan agent.
1033
+ </diagnostics>`}s(US,"report");var Mm=Ds,Am=c.Struct({line:mn,character:mn}),da=c.Struct({start:Am,end:Am}).annotate({identifier:"Range"}),BS=c.Struct({name:c.String,kind:mn,location:c.Struct({uri:c.String,range:da})}).annotate({identifier:"Symbol"}),$S=c.Struct({name:c.String,detail:c.optional(c.String),kind:mn,range:da,selectionRange:da}).annotate({identifier:"DocumentSymbol"}),qS=c.Struct({id:c.String,name:c.String,root:c.String,status:c.Literals(["connected","error"])}).annotate({identifier:"LSPStatus"});var WS=[5,12,6,11,13,14,23,10],VS=s((e,t)=>{t.experimentalLspTy?e.pyright&&delete e.pyright:e.ty&&delete e.ty},"filterExperimentalServers"),_r=class extends Ce.Service()("@opencode/LSP"){static{s(this,"Service")}},zS=Pe.effect(_r,r.gen(function*(){let e=yield*Ne.Service,t=yield*Ve.Service,n=yield*Ee.Service,o=yield*V.make(r.fn("LSP.state")(function*(w){let M=yield*e.get(),C={};if(!M.lsp)yield*r.logInfo("all LSPs are disabled");else{for(let U of Object.values(Gl))C[U.id]=U;if(VS(C,t),M.lsp!==!0)for(let[U,H]of Object.entries(M.lsp)){let ue=C[U];if(H.disabled){yield*r.logInfo(`LSP server ${U} is disabled`),delete C[U];continue}C[U]={...ue,id:U,root:ue?.root??(async(L,W)=>W.directory),extensions:H.extensions??ue?.extensions??[],spawn:s(async L=>({process:Te(H.command[0],H.command.slice(1),{cwd:L,env:{...process.env,...H.env}}),initialization:H.initialization}),"spawn")}}yield*r.logInfo("enabled LSP servers",{serverIds:Object.values(C).map(U=>U.id).join(", ")})}let $={clients:[],servers:C,broken:new Set,spawning:new Map};return yield*r.addFinalizer(()=>r.promise(async()=>{await Promise.all($.clients.map(U=>U.shutdown()))})),$})),i=r.fnUntraced(function*(w){let M=yield*V.context;if(!pi(w,M))return[];let C=yield*V.get(o),$=yield*r.promise(async()=>{let U=Hl.parse(w).ext||w,H=[],ue=0;async function L(W,D,A){let _=await W.spawn(D,M,t).then(j=>(j||C.broken.add(A),j)).catch(()=>{C.broken.add(A)});if(!_)return;let N=await Im({serverID:W.id,server:_,root:D,directory:M.directory,instance:M}).catch(async()=>{C.broken.add(A),await at.stop(_.process)});if(!N)return;let q=C.clients.find(j=>j.root===D&&j.serverID===W.id);return q?(await at.stop(_.process),q):(C.clients.push(N),N)}s(L,"schedule");for(let W of Object.values(C.servers)){if(W.extensions.length&&!W.extensions.includes(U))continue;let D=await W.root(w,M);if(!D||C.broken.has(D+W.id))continue;let A=C.clients.find(j=>j.root===D&&j.serverID===W.id);if(A){H.push(A);continue}let _=C.spawning.get(D+W.id);if(_){let j=await _;if(!j)continue;H.push(j);continue}let N=L(W,D,D+W.id);C.spawning.set(D+W.id,N),N.finally(()=>{C.spawning.get(D+W.id)===N&&C.spawning.delete(D+W.id)});let q=await N;q&&(H.push(q),ue++)}return{result:H,updated:ue}});return yield*r.forEach(Array.from({length:$.updated}),()=>n.publish(Mm.Updated,{}),{discard:!0}),$.result}),a=r.fnUntraced(function*(w,M){let C=yield*i(w);return yield*r.promise(()=>Promise.all(C.map($=>M($))))}),l=r.fnUntraced(function*(w){let M=yield*V.get(o);return yield*r.promise(()=>Promise.all(M.clients.map(C=>w(C))))}),u=r.fn("LSP.init")(function*(){yield*V.get(o)}),f=r.fn("LSP.status")(function*(){let w=yield*V.context,M=yield*V.get(o),C=[];for(let $ of M.clients)C.push({id:$.serverID,name:M.servers[$.serverID].id,root:Hl.relative(w.directory,$.root),status:"connected"});return C}),m=r.fn("LSP.hasClients")(function*(w){let M=yield*V.context,C=yield*V.get(o);return yield*r.promise(async()=>{let $=Hl.parse(w).ext||w;for(let U of Object.values(C.servers)){if(U.extensions.length&&!U.extensions.includes($))continue;let H=await U.root(w,M);if(H&&!C.broken.has(H+U.id))return!0}return!1})}),p=r.fn("LSP.touchFile")(function*(w,M){yield*r.logInfo("touching file",{file:w});let C=yield*i(w);yield*r.promise(()=>Promise.all(C.map(async $=>{let U=Date.now(),H=await $.notify.open({path:w});if(M)return $.waitForDiagnostics({path:w,version:H,mode:M,after:U})})).catch(()=>{}))}),h=r.fn("LSP.diagnostics")(function*(){let w={},M=yield*l(async C=>C.diagnostics);for(let C of M)for(let[$,U]of C.entries()){let H=w[$]||[];H.push(...U),w[$]=H}return w}),g=r.fn("LSP.hover")(function*(w){return yield*a(w.file,M=>M.connection.sendRequest("textDocument/hover",{textDocument:{uri:Mr(w.file).href},position:{line:w.line,character:w.character}}).catch(()=>null))}),I=r.fn("LSP.definition")(function*(w){return(yield*a(w.file,C=>C.connection.sendRequest("textDocument/definition",{textDocument:{uri:Mr(w.file).href},position:{line:w.line,character:w.character}}).catch(()=>null))).flat().filter(Boolean)}),T=r.fn("LSP.references")(function*(w){return(yield*a(w.file,C=>C.connection.sendRequest("textDocument/references",{textDocument:{uri:Mr(w.file).href},position:{line:w.line,character:w.character},context:{includeDeclaration:!0}}).catch(()=>[]))).flat().filter(Boolean)}),v=r.fn("LSP.implementation")(function*(w){return(yield*a(w.file,C=>C.connection.sendRequest("textDocument/implementation",{textDocument:{uri:Mr(w.file).href},position:{line:w.line,character:w.character}}).catch(()=>null))).flat().filter(Boolean)}),P=r.fn("LSP.documentSymbol")(function*(w){let M=FS(w);return(yield*a(M,$=>$.connection.sendRequest("textDocument/documentSymbol",{textDocument:{uri:w}}).catch(()=>[]))).flat().filter(Boolean)}),d=r.fn("LSP.workspaceSymbol")(function*(w){return(yield*l(C=>C.connection.sendRequest("workspace/symbol",{query:w}).then($=>$.filter(U=>WS.includes(U.kind)).slice(0,10)).catch(()=>[]))).flat()}),k=r.fn("LSP.prepareCallHierarchy")(function*(w){return(yield*a(w.file,C=>C.connection.sendRequest("textDocument/prepareCallHierarchy",{textDocument:{uri:Mr(w.file).href},position:{line:w.line,character:w.character}}).catch(()=>[]))).flat().filter(Boolean)}),y=r.fnUntraced(function*(w,M){return(yield*a(w.file,async $=>{let U=await $.connection.sendRequest("textDocument/prepareCallHierarchy",{textDocument:{uri:Mr(w.file).href},position:{line:w.line,character:w.character}}).catch(()=>[]);return U?.length?$.connection.sendRequest(M,{item:U[0]}).catch(()=>[]):[]})).flat().filter(Boolean)}),S=r.fn("LSP.incomingCalls")(function*(w){return yield*y(w,"callHierarchy/incomingCalls")}),E=r.fn("LSP.outgoingCalls")(function*(w){return yield*y(w,"callHierarchy/outgoingCalls")});return _r.of({init:u,status:f,hasClients:m,touchFile:p,diagnostics:h,hover:g,definition:I,references:T,implementation:v,documentSymbol:P,workspaceSymbol:d,prepareCallHierarchy:k,incomingCalls:S,outgoingCalls:E})})),GS=De.make({service:_r,layer:zS,deps:[Ne.node,Ve.node,Me.node,Ee.node]});var Jt={};fe(Jt,{Format:()=>Jt,Service:()=>Co,Status:()=>wI,node:()=>SI,use:()=>vI});import bI from"path";var ua={};fe(ua,{biome:()=>XS,clang:()=>ZS,cljfmt:()=>gI,dart:()=>iI,dfmt:()=>yI,gleam:()=>dI,gofmt:()=>HS,htmlbeautifier:()=>sI,ktlint:()=>eI,latexindent:()=>lI,mix:()=>YS,nixfmt:()=>pI,ocamlformat:()=>aI,ormolu:()=>hI,oxfmt:()=>KS,pint:()=>mI,prettier:()=>JS,rlang:()=>tI,rubocop:()=>oI,ruff:()=>_m,rustfmt:()=>fI,shfmt:()=>uI,standardrb:()=>rI,terraform:()=>cI,uvformat:()=>nI,zig:()=>QS});var HS={name:"gofmt",extensions:[".go"],async enabled(){let e=ie("gofmt");return e?[e,"-w","$FILE"]:!1}},YS={name:"mix",extensions:[".ex",".exs",".eex",".heex",".leex",".neex",".sface"],async enabled(){let e=ie("mix");return e?[e,"format","$FILE"]:!1}},JS={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(e){let t=await we.findUp("package.json",e.directory,e.worktree);for(let n of t){let o=await we.readJson(n);if(o.dependencies?.prettier||o.devDependencies?.prettier){let i=await Ut.which("prettier");if(i)return[i,"--write","$FILE"]}}return!1}},KS={name:"oxfmt",environment:{BUN_BE_BUN:"1"},extensions:[".js",".jsx",".mjs",".cjs",".ts",".tsx",".mts",".cts"],async enabled(e){if(!e.experimentalOxfmt)return!1;let t=await we.findUp("package.json",e.directory,e.worktree);for(let n of t){let o=await we.readJson(n);if(o.dependencies?.oxfmt||o.devDependencies?.oxfmt){let i=await Ut.which("oxfmt");if(i)return[i,"$FILE"]}}return!1}},XS={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(e){let t=["biome.json","biome.jsonc"];for(let n of t)if((await we.findUp(n,e.directory,e.worktree)).length>0){let i=await Ut.which("@biomejs/biome");if(i)return[i,"format","--write","$FILE"]}return!1}},QS={name:"zig",extensions:[".zig",".zon"],async enabled(){let e=ie("zig");return e?[e,"fmt","$FILE"]:!1}},ZS={name:"clang-format",extensions:[".c",".cc",".cpp",".cxx",".c++",".h",".hh",".hpp",".hxx",".h++",".ino",".C",".H"],async enabled(e){if((await we.findUp(".clang-format",e.directory,e.worktree)).length>0){let n=ie("clang-format");if(n)return[n,"-i","$FILE"]}return!1}},eI={name:"ktlint",extensions:[".kt",".kts"],async enabled(){let e=ie("ktlint");return e?[e,"-F","$FILE"]:!1}},_m={name:"ruff",extensions:[".py",".pyi"],async enabled(e){if(!ie("ruff"))return!1;let t=["pyproject.toml","ruff.toml",".ruff.toml"];for(let o of t){let i=await we.findUp(o,e.directory,e.worktree);if(i.length>0)if(o==="pyproject.toml"){if((await we.readText(i[0])).includes("[tool.ruff]"))return["ruff","format","$FILE"]}else return["ruff","format","$FILE"]}let n=["requirements.txt","pyproject.toml","Pipfile"];for(let o of n){let i=await we.findUp(o,e.directory,e.worktree);if(i.length>0&&(await we.readText(i[0])).includes("ruff"))return["ruff","format","$FILE"]}return!1}},tI={name:"air",extensions:[".R"],async enabled(){let e=ie("air");if(e==null)return!1;let t=await at.text([e,"--help"],{nothrow:!0}),n=t.text.split(`
1034
+ `)[0],o=n.includes("R language"),i=n.includes("formatter");return t.code===0&&o&&i?[e,"format","$FILE"]:!1}},nI={name:"uv",extensions:[".py",".pyi"],async enabled(e){if(await _m.enabled(e))return!1;let t=ie("uv");return t==null?!1:(await at.run([t,"format","--help"],{nothrow:!0})).code===0?[t,"format","--","$FILE"]:!1}},oI={name:"rubocop",extensions:[".rb",".rake",".gemspec",".ru"],async enabled(){let e=ie("rubocop");return e?[e,"--autocorrect","$FILE"]:!1}},rI={name:"standardrb",extensions:[".rb",".rake",".gemspec",".ru"],async enabled(){let e=ie("standardrb");return e?[e,"--fix","$FILE"]:!1}},sI={name:"htmlbeautifier",extensions:[".erb",".html.erb"],async enabled(){let e=ie("htmlbeautifier");return e?[e,"$FILE"]:!1}},iI={name:"dart",extensions:[".dart"],async enabled(){let e=ie("dart");return e?[e,"format","$FILE"]:!1}},aI={name:"ocamlformat",extensions:[".ml",".mli"],async enabled(e){return ie("ocamlformat")&&(await we.findUp(".ocamlformat",e.directory,e.worktree)).length>0?["ocamlformat","-i","$FILE"]:!1}},cI={name:"terraform",extensions:[".tf",".tfvars"],async enabled(){let e=ie("terraform");return e?[e,"fmt","$FILE"]:!1}},lI={name:"latexindent",extensions:[".tex"],async enabled(){let e=ie("latexindent");return e?[e,"-w","-s","$FILE"]:!1}},dI={name:"gleam",extensions:[".gleam"],async enabled(){let e=ie("gleam");return e?[e,"format","$FILE"]:!1}},uI={name:"shfmt",extensions:[".sh",".bash"],async enabled(){let e=ie("shfmt");return e?[e,"-w","$FILE"]:!1}},pI={name:"nixfmt",extensions:[".nix"],async enabled(){let e=ie("nixfmt");return e?[e,"$FILE"]:!1}},fI={name:"rustfmt",extensions:[".rs"],async enabled(){let e=ie("rustfmt");return e?[e,"$FILE"]:!1}},mI={name:"pint",extensions:[".php"],async enabled(e){let t=await we.findUp("composer.json",e.directory,e.worktree);for(let n of t){let o=await we.readJson(n);if(o.require?.["laravel/pint"]||o["require-dev"]?.["laravel/pint"])return["./vendor/bin/pint","$FILE"]}return!1}},hI={name:"ormolu",extensions:[".hs"],async enabled(){let e=ie("ormolu");return e?[e,"-i","$FILE"]:!1}},gI={name:"cljfmt",extensions:[".clj",".cljs",".cljc",".edn"],async enabled(){let e=ie("cljfmt");return e?[e,"fix","--quiet","$FILE"]:!1}},yI={name:"dfmt",extensions:[".d"],async enabled(){let e=ie("dfmt");return e?[e,"-i","$FILE"]:!1}};var wI=c.Struct({name:c.String,extensions:c.Array(c.String),enabled:c.Boolean}).annotate({identifier:"FormatterStatus"}),Co=class extends Ce.Service()("@opencode/Format"){static{s(this,"Service")}},vI=Wt(Co),xI=Pe.effect(Co,r.gen(function*(){let e=yield*Ne.Service,t=yield*Ko.Service,n=yield*Ve.Service,o=yield*V.make(r.fn("Format.state")(function*(u){let f={},m={};async function p(v){let P=f[v.name];return(P===!1||P===void 0)&&(P=await v.enabled({...u,experimentalOxfmt:n.experimentalOxfmt}),f[v.name]=P),P}s(p,"getCommand");async function h(v){return await p(v)!==!1}s(h,"isEnabled");async function g(v){let P=Object.values(m).filter(k=>k.extensions.includes(v));return(await Promise.all(P.map(async k=>{let y=await p(k);return{item:k,cmd:y}}))).filter(k=>k.cmd!==!1).map(k=>({item:k.item,cmd:k.cmd}))}s(g,"getFormatter");function I(v){return r.gen(function*(){yield*r.logInfo("formatting",{file:v});let P=yield*r.promise(()=>g(bI.extname(v)));if(!P.length)return!1;for(let{item:d,cmd:k}of P){yield*r.logInfo("running",{command:k});let y=k.map(w=>w.replace("$FILE",v)),S=yield*V.directory,E=yield*t.run(Vn.make(y[0],y.slice(1),{cwd:S,env:d.environment,extendEnv:!0,stdin:"ignore",stdout:"ignore",stderr:"ignore"})).pipe(r.catch(w=>r.logError("failed to format file",{error:"spawn failed",command:k,...d.environment,file:v,cause:gn(w.cause??w)}).pipe(r.as(void 0))));E&&E.exitCode!==0&&(yield*r.logError("failed",{command:k,...d.environment}))}return!0})}s(I,"formatFile");let T=yield*e.get();if(!T.formatter)return yield*r.logInfo("all formatters are disabled"),yield*r.logInfo("init"),{formatters:m,isEnabled:h,formatFile:I};for(let v of Object.values(ua))m[v.name]=v;if(T.formatter!==!0)for(let[v,P]of Object.entries(T.formatter)){let d=ua[v];if(["ruff","uv"].includes(v)&&(T.formatter.ruff?.disabled||T.formatter.uv?.disabled)){delete m.ruff,delete m.uv;continue}if(P.disabled){delete m[v];continue}let k=di(d??{extensions:[]},P);m[v]={...k,name:v,extensions:k.extensions??[],enabled:d&&!k.command?d.enabled:async y=>k.command??!1}}return yield*r.logInfo("init"),{formatters:m,isEnabled:h,formatFile:I}})),i=r.fn("Format.init")(function*(){yield*V.get(o)}),a=r.fn("Format.status")(function*(){let{formatters:u,isEnabled:f}=yield*V.get(o),m=[];for(let p of Object.values(u)){let h=yield*r.promise(()=>f(p));m.push({name:p.name,extensions:p.extensions,enabled:h})}return m}),l=r.fn("Format.file")(function*(u){let{formatFile:f}=yield*V.get(o);return yield*f(u)});return Co.of({init:i,status:a,file:l})})),SI=De.make({service:Co,layer:xI,deps:[Ne.node,Ko.node,Ve.node]});var $n={};fe($n,{Service:()=>jr,ToolRegistry:()=>$n,node:()=>eD,webSearchEnabled:()=>Lh});import II from"path";var Om=`Use this tool when you have completed the planning phase and are ready to exit plan agent.
1035
1035
 
1036
1036
  This tool will ask the user if they want to switch to build agent to start implementing the plan.
1037
1037
 
@@ -1044,7 +1044,7 @@ Do NOT call this tool:
1044
1044
  - Before you have created or finalized the plan
1045
1045
  - If you still have unanswered questions about the implementation
1046
1046
  - If the user has indicated they want to continue planning
1047
- `;var II=c.Struct({}),Lm=Ke("plan_exit",r.gen(function*(){let e=yield*me.Service,t=yield*Qt.Service,n=yield*bt.Service;return{description:Om,parameters:II,execute:s((o,i)=>r.gen(function*(){let a=yield*V.context,l=yield*e.get(i.sessionID),u=SI.relative(a.worktree,me.plan(l,a));(yield*t.ask({sessionID:i.sessionID,questions:[{question:`Plan at ${u} 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:i.callID?{messageID:i.messageID,callID:i.callID}:void 0}))[0]?.[0]==="No"&&(yield*new Qt.RejectedError);let p=(yield*e.messages({sessionID:i.sessionID}).pipe(r.orDie)).findLast(I=>I.info.role==="user"&&I.info.model),h=p?.info.role==="user"&&p.info.model?p.info.model:yield*n.defaultModel(),g={id:ct.ascending(),sessionID:i.sessionID,role:"user",time:{created:Date.now()},agent:"build",model:h};return yield*e.updateMessage(g),yield*e.updatePart({id:We.ascending(),messageID:g.id,sessionID:i.sessionID,type:"text",text:`The plan at ${u} 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:{}}}).pipe(r.orDie),"execute")}}));var Nm=`Use this tool when you need to ask the user questions during execution. This allows you to:
1047
+ `;var kI=c.Struct({}),Lm=Ke("plan_exit",r.gen(function*(){let e=yield*me.Service,t=yield*Qt.Service,n=yield*bt.Service;return{description:Om,parameters:kI,execute:s((o,i)=>r.gen(function*(){let a=yield*V.context,l=yield*e.get(i.sessionID),u=II.relative(a.worktree,me.plan(l,a));(yield*t.ask({sessionID:i.sessionID,questions:[{question:`Plan at ${u} 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:i.callID?{messageID:i.messageID,callID:i.callID}:void 0}))[0]?.[0]==="No"&&(yield*new Qt.RejectedError);let p=(yield*e.messages({sessionID:i.sessionID}).pipe(r.orDie)).findLast(I=>I.info.role==="user"&&I.info.model),h=p?.info.role==="user"&&p.info.model?p.info.model:yield*n.defaultModel(),g={id:ct.ascending(),sessionID:i.sessionID,role:"user",time:{created:Date.now()},agent:"build",model:h};return yield*e.updateMessage(g),yield*e.updatePart({id:We.ascending(),messageID:g.id,sessionID:i.sessionID,type:"text",text:`The plan at ${u} 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:{}}}).pipe(r.orDie),"execute")}}));var Nm=`Use this tool when you need to ask the user questions during execution. This allows you to:
1048
1048
  1. Gather user preferences or requirements
1049
1049
  2. Clarify ambiguous instructions
1050
1050
  3. Get decisions on implementation choices as you work
@@ -1054,53 +1054,53 @@ Usage notes:
1054
1054
  - When \`custom\` is enabled (default), a "Type your own answer" option is added automatically; don't include "Other" or catch-all options
1055
1055
  - Answers are returned as arrays of labels; set \`multiple: true\` to allow selecting more than one
1056
1056
  - If you recommend a specific option, make that the first option in the list and add "(Recommended)" at the end of the label
1057
- `;var kI=c.Struct({questions:c.mutable(c.Array(Qt.Prompt)).annotate({description:"Questions to ask"})}),jm=Ke("question",r.gen(function*(){let e=yield*Qt.Service;return{description:Nm,parameters:kI,execute:s((t,n)=>r.gen(function*(){let o=yield*e.ask({sessionID:n.sessionID,questions:t.questions,tool:n.callID?{messageID:n.messageID,callID:n.callID}:void 0}),i=t.questions.map((a,l)=>`"${a.question}"="${o[l]?.length?o[l].join(", "):"Unanswered"}"`).join(", ");return{title:`Asked ${t.questions.length} question${t.questions.length>1?"s":""}`,output:`User has answered your questions: ${i}. You can now continue with the user's answers in mind.`,metadata:{answers:o}}}).pipe(r.orDie),"execute")}}));import*as co from"path";var Um='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 Yl from"path";var $t=r.fn("Tool.assertExternalDirectory")(function*(e,t,n){if(!t||n?.bypass)return!1;let o=yield*V.context,i=process.platform==="win32"?Me.normalizePath(t):t;if(pi(i,o))return!1;let l=(n?.kind??"file")==="directory"?i:Yl.dirname(i),u=process.platform==="win32"?Me.normalizePathPattern(Yl.join(l,"*")):Yl.join(l,"*").replaceAll("\\","/");return yield*e.ask({permission:"external_directory",patterns:[u],always:[u],metadata:{filepath:i,parentDir:l}}),!0});var Fm=65279,DI=String.fromCharCode(Fm);function pn(e){return e.charCodeAt(0)!==Fm?{bom:!1,text:e}:{bom:!0,text:e.slice(1)}}s(pn,"split");function Kt(e,t){let n=pn(e).text;return t?DI+n:n}s(Kt,"join");var ao=r.fn("Bom.readFile")(function*(e,t){return pn(new TextDecoder("utf-8",{ignoreBOM:!0}).decode(yield*e.readFile(t)))}),Ao=r.fn("Bom.syncFile")(function*(e,t,n){let o=yield*ao(e,t);return o.bom===n||(yield*e.writeWithDirs(t,Kt(o.text,n))),o.text});function Or(e){return e.replaceAll(`\r
1057
+ `;var DI=c.Struct({questions:c.mutable(c.Array(Qt.Prompt)).annotate({description:"Questions to ask"})}),jm=Ke("question",r.gen(function*(){let e=yield*Qt.Service;return{description:Nm,parameters:DI,execute:s((t,n)=>r.gen(function*(){let o=yield*e.ask({sessionID:n.sessionID,questions:t.questions,tool:n.callID?{messageID:n.messageID,callID:n.callID}:void 0}),i=t.questions.map((a,l)=>`"${a.question}"="${o[l]?.length?o[l].join(", "):"Unanswered"}"`).join(", ");return{title:`Asked ${t.questions.length} question${t.questions.length>1?"s":""}`,output:`User has answered your questions: ${i}. You can now continue with the user's answers in mind.`,metadata:{answers:o}}}).pipe(r.orDie),"execute")}}));import*as co from"path";var Um='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 Yl from"path";var $t=r.fn("Tool.assertExternalDirectory")(function*(e,t,n){if(!t||n?.bypass)return!1;let o=yield*V.context,i=process.platform==="win32"?Me.normalizePath(t):t;if(pi(i,o))return!1;let l=(n?.kind??"file")==="directory"?i:Yl.dirname(i),u=process.platform==="win32"?Me.normalizePathPattern(Yl.join(l,"*")):Yl.join(l,"*").replaceAll("\\","/");return yield*e.ask({permission:"external_directory",patterns:[u],always:[u],metadata:{filepath:i,parentDir:l}}),!0});var Fm=65279,EI=String.fromCharCode(Fm);function pn(e){return e.charCodeAt(0)!==Fm?{bom:!1,text:e}:{bom:!0,text:e.slice(1)}}s(pn,"split");function Kt(e,t){let n=pn(e).text;return t?EI+n:n}s(Kt,"join");var ao=r.fn("Bom.readFile")(function*(e,t){return pn(new TextDecoder("utf-8",{ignoreBOM:!0}).decode(yield*e.readFile(t)))}),Ao=r.fn("Bom.syncFile")(function*(e,t,n){let o=yield*ao(e,t);return o.bom===n||(yield*e.writeWithDirs(t,Kt(o.text,n))),o.text});function Or(e){return e.replaceAll(`\r
1058
1058
  `,`
1059
- `)}s(Or,"normalizeLineEndings");function EI(e){return e.includes(`\r
1059
+ `)}s(Or,"normalizeLineEndings");function TI(e){return e.includes(`\r
1060
1060
  `)?`\r
1061
1061
  `:`
1062
- `}s(EI,"detectLineEnding");function Bm(e,t){return t===`
1062
+ `}s(TI,"detectLineEnding");function Bm(e,t){return t===`
1063
1063
  `?e:e.replaceAll(`
1064
1064
  `,`\r
1065
- `)}s(Bm,"convertToLineEnding");var $m=new Map;function TI(e){let t=Me.resolve(e),n=$m.get(t);if(n)return n;let o=Cd.makeUnsafe(1);return $m.set(t,o),o}s(TI,"lock");var PI=c.Struct({filePath:c.String.annotate({description:"The absolute path to the file to modify"}),oldString:c.String.annotate({description:"The text to replace"}),newString:c.String.annotate({description:"The text to replace it with (must be different from oldString)"}),replaceAll:c.optional(c.Boolean).annotate({description:"Replace all occurrences of oldString (default false)"})}),Jl=Ke("edit",r.gen(function*(){let e=yield*mt.Service,t=yield*Me.Service,n=yield*Jt.Service,o=yield*Ee.Service;return{description:Um,parameters:PI,execute:s((i,a)=>r.gen(function*(){if(!i.filePath)throw new Error("filePath is required");if(i.oldString===i.newString)throw new Error("No changes to apply: oldString and newString are identical.");let l=yield*V.context,u=co.isAbsolute(i.filePath)?i.filePath:co.join(l.directory,i.filePath);yield*$t(a,u);let f="",m="",p="";yield*TI(u).withPermits(1)(r.gen(function*(){if(i.oldString===""){if(yield*t.existsSafe(u))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 U=pn(i.newString),H=U.bom;m="",p=U.text,f=Fn(Dn(u,u,m,p)),yield*a.ask({permission:"edit",patterns:[co.relative(l.worktree,u)],always:["*"],metadata:{filepath:u,diff:f}}),yield*t.writeWithDirs(u,Kt(p,H)),(yield*n.file(u))&&(p=yield*Ao(t,u,H)),yield*o.publish(ho.Event.Edited,{file:u}),yield*o.publish(_n.Event.Updated,{file:u,event:"add"});return}let k=yield*t.stat(u).pipe(r.catch(()=>r.succeed(void 0)));if(!k)throw new Error(`File ${u} not found`);if(k.type==="Directory")throw new Error(`Path is a directory, not a file: ${u}`);let y=yield*ao(t,u);m=y.text;let x=EI(m),E=Bm(Or(i.oldString),x),w=Bm(Or(i.newString),x),M=pn(FI(m,E,w,i.replaceAll)),C=y.bom||M.bom;p=M.text,f=Fn(Dn(u,u,Or(m),Or(p))),yield*a.ask({permission:"edit",patterns:[co.relative(l.worktree,u)],always:["*"],metadata:{filepath:u,diff:f}}),yield*t.writeWithDirs(u,Kt(p,C)),(yield*n.file(u))&&(p=yield*Ao(t,u,C)),yield*o.publish(ho.Event.Edited,{file:u}),yield*o.publish(_n.Event.Updated,{file:u,event:"change"}),f=Fn(Dn(u,u,Or(m),Or(p)))}).pipe(r.orDie));let h=0,g=0;for(let k of ts(m,p))k.added&&(h+=k.count||0),k.removed&&(g+=k.count||0);let I={file:u,patch:f,additions:h,deletions:g};yield*a.metadata({metadata:{diff:f,filediff:I,diagnostics:{}}});let T="Edit applied successfully.";yield*e.touchFile(u,"document");let v=yield*e.diagnostics(),P=Me.normalizePath(u),d=mt.Diagnostic.report(u,v[P]??[]);return d&&(T+=`
1065
+ `)}s(Bm,"convertToLineEnding");var $m=new Map;function PI(e){let t=Me.resolve(e),n=$m.get(t);if(n)return n;let o=Cd.makeUnsafe(1);return $m.set(t,o),o}s(PI,"lock");var RI=c.Struct({filePath:c.String.annotate({description:"The absolute path to the file to modify"}),oldString:c.String.annotate({description:"The text to replace"}),newString:c.String.annotate({description:"The text to replace it with (must be different from oldString)"}),replaceAll:c.optional(c.Boolean).annotate({description:"Replace all occurrences of oldString (default false)"})}),Jl=Ke("edit",r.gen(function*(){let e=yield*mt.Service,t=yield*Me.Service,n=yield*Jt.Service,o=yield*Ee.Service;return{description:Um,parameters:RI,execute:s((i,a)=>r.gen(function*(){if(!i.filePath)throw new Error("filePath is required");if(i.oldString===i.newString)throw new Error("No changes to apply: oldString and newString are identical.");let l=yield*V.context,u=co.isAbsolute(i.filePath)?i.filePath:co.join(l.directory,i.filePath);yield*$t(a,u);let f="",m="",p="";yield*PI(u).withPermits(1)(r.gen(function*(){if(i.oldString===""){if(yield*t.existsSafe(u))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 U=pn(i.newString),H=U.bom;m="",p=U.text,f=Fn(Dn(u,u,m,p)),yield*a.ask({permission:"edit",patterns:[co.relative(l.worktree,u)],always:["*"],metadata:{filepath:u,diff:f}}),yield*t.writeWithDirs(u,Kt(p,H)),(yield*n.file(u))&&(p=yield*Ao(t,u,H)),yield*o.publish(ho.Event.Edited,{file:u}),yield*o.publish(_n.Event.Updated,{file:u,event:"add"});return}let k=yield*t.stat(u).pipe(r.catch(()=>r.succeed(void 0)));if(!k)throw new Error(`File ${u} not found`);if(k.type==="Directory")throw new Error(`Path is a directory, not a file: ${u}`);let y=yield*ao(t,u);m=y.text;let S=TI(m),E=Bm(Or(i.oldString),S),w=Bm(Or(i.newString),S),M=pn(BI(m,E,w,i.replaceAll)),C=y.bom||M.bom;p=M.text,f=Fn(Dn(u,u,Or(m),Or(p))),yield*a.ask({permission:"edit",patterns:[co.relative(l.worktree,u)],always:["*"],metadata:{filepath:u,diff:f}}),yield*t.writeWithDirs(u,Kt(p,C)),(yield*n.file(u))&&(p=yield*Ao(t,u,C)),yield*o.publish(ho.Event.Edited,{file:u}),yield*o.publish(_n.Event.Updated,{file:u,event:"change"}),f=Fn(Dn(u,u,Or(m),Or(p)))}).pipe(r.orDie));let h=0,g=0;for(let k of ts(m,p))k.added&&(h+=k.count||0),k.removed&&(g+=k.count||0);let I={file:u,patch:f,additions:h,deletions:g};yield*a.metadata({metadata:{diff:f,filediff:I,diagnostics:{}}});let T="Edit applied successfully.";yield*e.touchFile(u,"document");let v=yield*e.diagnostics(),P=Me.normalizePath(u),d=mt.Diagnostic.report(u,v[P]??[]);return d&&(T+=`
1066
1066
 
1067
1067
  LSP errors detected in this file, please fix:
1068
- ${d}`),{metadata:{diagnostics:v,diff:f,filediff:I},title:`${co.relative(l.worktree,u)}`,output:T}}),"execute")}})),qm=.65,RI=.65;function Wm(e,t){if(e===""||t==="")return Math.max(e.length,t.length);let n=Array.from({length:e.length+1},(o,i)=>Array.from({length:t.length+1},(a,l)=>i===0?l:l===0?i:0));for(let o=1;o<=e.length;o++)for(let i=1;i<=t.length;i++){let a=e[o-1]===t[i-1]?0:1;n[o][i]=Math.min(n[o-1][i]+1,n[o][i-1]+1,n[o-1][i-1]+a)}return n[e.length][t.length]}s(Wm,"levenshtein");var CI=s(function*(e,t){yield t},"SimpleReplacer"),AI=s(function*(e,t){let n=e.split(`
1068
+ ${d}`),{metadata:{diagnostics:v,diff:f,filediff:I},title:`${co.relative(l.worktree,u)}`,output:T}}),"execute")}})),qm=.65,CI=.65;function Wm(e,t){if(e===""||t==="")return Math.max(e.length,t.length);let n=Array.from({length:e.length+1},(o,i)=>Array.from({length:t.length+1},(a,l)=>i===0?l:l===0?i:0));for(let o=1;o<=e.length;o++)for(let i=1;i<=t.length;i++){let a=e[o-1]===t[i-1]?0:1;n[o][i]=Math.min(n[o-1][i]+1,n[o][i-1]+1,n[o-1][i-1]+a)}return n[e.length][t.length]}s(Wm,"levenshtein");var AI=s(function*(e,t){yield t},"SimpleReplacer"),MI=s(function*(e,t){let n=e.split(`
1069
1069
  `),o=t.split(`
1070
- `);o[o.length-1]===""&&o.pop();for(let i=0;i<=n.length-o.length;i++){let a=!0;for(let l=0;l<o.length;l++){let u=n[i+l].trim(),f=o[l].trim();if(u!==f){a=!1;break}}if(a){let l=0;for(let f=0;f<i;f++)l+=n[f].length+1;let u=l;for(let f=0;f<o.length;f++)u+=n[i+f].length,f<o.length-1&&(u+=1);yield e.substring(l,u)}}},"LineTrimmedReplacer"),MI=s(function*(e,t){let n=e.split(`
1070
+ `);o[o.length-1]===""&&o.pop();for(let i=0;i<=n.length-o.length;i++){let a=!0;for(let l=0;l<o.length;l++){let u=n[i+l].trim(),f=o[l].trim();if(u!==f){a=!1;break}}if(a){let l=0;for(let f=0;f<i;f++)l+=n[f].length+1;let u=l;for(let f=0;f<o.length;f++)u+=n[i+f].length,f<o.length-1&&(u+=1);yield e.substring(l,u)}}},"LineTrimmedReplacer"),_I=s(function*(e,t){let n=e.split(`
1071
1071
  `),o=t.split(`
1072
- `);if(o.length<3)return;o[o.length-1]===""&&o.pop();let i=o[0].trim(),a=o[o.length-1].trim(),l=o.length,u=Math.max(1,Math.floor(l*.25)),f=[];for(let h=0;h<n.length;h++)if(n[h].trim()===i){for(let g=h+2;g<n.length;g++)if(n[g].trim()===a){let I=g-h+1;Math.abs(I-l)<=u&&f.push({startLine:h,endLine:g});break}}if(f.length===0)return;if(f.length===1){let{startLine:h,endLine:g}=f[0],I=g-h+1,T=0,v=Math.min(l-2,I-2);if(v>0)for(let P=1;P<l-1&&P<I-1;P++){let d=n[h+P].trim(),k=o[P].trim(),y=Math.max(d.length,k.length);if(y===0)continue;let x=Wm(d,k);if(T+=(1-x/y)/v,T>=qm)break}else T=1;if(T>=qm){let P=0;for(let k=0;k<h;k++)P+=n[k].length+1;let d=P;for(let k=h;k<=g;k++)d+=n[k].length,k<g&&(d+=1);yield e.substring(P,d)}return}let m=null,p=-1;for(let h of f){let{startLine:g,endLine:I}=h,T=I-g+1,v=0,P=Math.min(l-2,T-2);if(P>0){for(let d=1;d<l-1&&d<T-1;d++){let k=n[g+d].trim(),y=o[d].trim(),x=Math.max(k.length,y.length);if(x===0)continue;let E=Wm(k,y);v+=1-E/x}v/=P}else v=1;v>p&&(p=v,m=h)}if(p>=RI&&m){let{startLine:h,endLine:g}=m,I=0;for(let v=0;v<h;v++)I+=n[v].length+1;let T=I;for(let v=h;v<=g;v++)T+=n[v].length,v<g&&(T+=1);yield e.substring(I,T)}},"BlockAnchorReplacer"),_I=s(function*(e,t){let n=s(l=>l.replace(/\s+/g," ").trim(),"normalizeWhitespace"),o=n(t),i=e.split(`
1072
+ `);if(o.length<3)return;o[o.length-1]===""&&o.pop();let i=o[0].trim(),a=o[o.length-1].trim(),l=o.length,u=Math.max(1,Math.floor(l*.25)),f=[];for(let h=0;h<n.length;h++)if(n[h].trim()===i){for(let g=h+2;g<n.length;g++)if(n[g].trim()===a){let I=g-h+1;Math.abs(I-l)<=u&&f.push({startLine:h,endLine:g});break}}if(f.length===0)return;if(f.length===1){let{startLine:h,endLine:g}=f[0],I=g-h+1,T=0,v=Math.min(l-2,I-2);if(v>0)for(let P=1;P<l-1&&P<I-1;P++){let d=n[h+P].trim(),k=o[P].trim(),y=Math.max(d.length,k.length);if(y===0)continue;let S=Wm(d,k);if(T+=(1-S/y)/v,T>=qm)break}else T=1;if(T>=qm){let P=0;for(let k=0;k<h;k++)P+=n[k].length+1;let d=P;for(let k=h;k<=g;k++)d+=n[k].length,k<g&&(d+=1);yield e.substring(P,d)}return}let m=null,p=-1;for(let h of f){let{startLine:g,endLine:I}=h,T=I-g+1,v=0,P=Math.min(l-2,T-2);if(P>0){for(let d=1;d<l-1&&d<T-1;d++){let k=n[g+d].trim(),y=o[d].trim(),S=Math.max(k.length,y.length);if(S===0)continue;let E=Wm(k,y);v+=1-E/S}v/=P}else v=1;v>p&&(p=v,m=h)}if(p>=CI&&m){let{startLine:h,endLine:g}=m,I=0;for(let v=0;v<h;v++)I+=n[v].length+1;let T=I;for(let v=h;v<=g;v++)T+=n[v].length,v<g&&(T+=1);yield e.substring(I,T)}},"BlockAnchorReplacer"),OI=s(function*(e,t){let n=s(l=>l.replace(/\s+/g," ").trim(),"normalizeWhitespace"),o=n(t),i=e.split(`
1073
1073
  `);for(let l=0;l<i.length;l++){let u=i[l];if(n(u)===o)yield u;else if(n(u).includes(o)){let m=t.trim().split(/\s+/);if(m.length>0){let p=m.map(h=>h.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("\\s+");try{let h=new RegExp(p),g=u.match(h);g&&(yield g[0])}catch{}}}}let a=t.split(`
1074
1074
  `);if(a.length>1)for(let l=0;l<=i.length-a.length;l++){let u=i.slice(l,l+a.length);n(u.join(`
1075
1075
  `))===o&&(yield u.join(`
1076
- `))}},"WhitespaceNormalizedReplacer"),OI=s(function*(e,t){let n=s(l=>{let u=l.split(`
1076
+ `))}},"WhitespaceNormalizedReplacer"),LI=s(function*(e,t){let n=s(l=>{let u=l.split(`
1077
1077
  `),f=u.filter(p=>p.trim().length>0);if(f.length===0)return l;let m=Math.min(...f.map(p=>{let h=p.match(/^(\s*)/);return h?h[1].length:0}));return u.map(p=>p.trim().length===0?p:p.slice(m)).join(`
1078
1078
  `)},"removeIndentation"),o=n(t),i=e.split(`
1079
1079
  `),a=t.split(`
1080
1080
  `);for(let l=0;l<=i.length-a.length;l++){let u=i.slice(l,l+a.length).join(`
1081
- `);n(u)===o&&(yield u)}},"IndentationFlexibleReplacer"),LI=s(function*(e,t){let n=s(l=>l.replace(/\\(n|t|r|'|"|`|\\|\n|\$)/g,(u,f)=>{switch(f){case"n":return`
1081
+ `);n(u)===o&&(yield u)}},"IndentationFlexibleReplacer"),NI=s(function*(e,t){let n=s(l=>l.replace(/\\(n|t|r|'|"|`|\\|\n|\$)/g,(u,f)=>{switch(f){case"n":return`
1082
1082
  `;case"t":return" ";case"r":return"\r";case"'":return"'";case'"':return'"';case"`":return"`";case"\\":return"\\";case`
1083
1083
  `:return`
1084
1084
  `;case"$":return"$";default:return u}}),"unescapeString"),o=n(t);e.includes(o)&&(yield o);let i=e.split(`
1085
1085
  `),a=o.split(`
1086
1086
  `);for(let l=0;l<=i.length-a.length;l++){let u=i.slice(l,l+a.length).join(`
1087
- `);n(u)===o&&(yield u)}},"EscapeNormalizedReplacer"),NI=s(function*(e,t){let n=0;for(;;){let o=e.indexOf(t,n);if(o===-1)break;yield t,n=o+t.length}},"MultiOccurrenceReplacer"),jI=s(function*(e,t){let n=t.trim();if(n===t)return;e.includes(n)&&(yield n);let o=e.split(`
1087
+ `);n(u)===o&&(yield u)}},"EscapeNormalizedReplacer"),jI=s(function*(e,t){let n=0;for(;;){let o=e.indexOf(t,n);if(o===-1)break;yield t,n=o+t.length}},"MultiOccurrenceReplacer"),UI=s(function*(e,t){let n=t.trim();if(n===t)return;e.includes(n)&&(yield n);let o=e.split(`
1088
1088
  `),i=t.split(`
1089
1089
  `);for(let a=0;a<=o.length-i.length;a++){let l=o.slice(a,a+i.length).join(`
1090
- `);l.trim()===n&&(yield l)}},"TrimmedBoundaryReplacer"),UI=s(function*(e,t){let n=t.split(`
1090
+ `);l.trim()===n&&(yield l)}},"TrimmedBoundaryReplacer"),FI=s(function*(e,t){let n=t.split(`
1091
1091
  `);if(n.length<3)return;n[n.length-1]===""&&n.pop();let o=e.split(`
1092
1092
  `),i=n[0].trim(),a=n[n.length-1].trim();for(let l=0;l<o.length;l++)if(o[l].trim()===i){for(let u=l+2;u<o.length;u++)if(o[u].trim()===a){let f=o.slice(l,u+1),m=f.join(`
1093
1093
  `);if(f.length===n.length){let p=0,h=0;for(let g=1;g<f.length-1;g++){let I=f[g].trim(),T=n[g].trim();(I.length>0||T.length>0)&&(h++,I===T&&p++)}if(h===0||p/h>=.5){yield m;break}}break}}},"ContextAwareReplacer");function Fn(e){let t=e.split(`
1094
1094
  `),n=t.filter(a=>(a.startsWith("+")||a.startsWith("-")||a.startsWith(" "))&&!a.startsWith("---")&&!a.startsWith("+++"));if(n.length===0)return e;let o=1/0;for(let a of n){let l=a.slice(1);if(l.trim().length>0){let u=l.match(/^(\s*)/);u&&(o=Math.min(o,u[1].length))}}return o===1/0||o===0?e:t.map(a=>{if((a.startsWith("+")||a.startsWith("-")||a.startsWith(" "))&&!a.startsWith("---")&&!a.startsWith("+++")){let l=a[0],u=a.slice(1);return l+u.slice(o)}return a}).join(`
1095
- `)}s(Fn,"trimDiff");function FI(e,t,n,o=!1){if(t===n)throw new Error("No changes to apply: oldString and newString are identical.");if(t==="")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 i=!0;for(let a of[CI,AI,MI,_I,OI,LI,jI,UI,NI])for(let l of a(e,t)){let u=e.indexOf(l);if(u===-1)continue;if(i=!1,BI(l,t))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(o)return e.replaceAll(l,n);let f=e.lastIndexOf(l);if(u===f)return e.substring(0,u)+n+e.substring(u+l.length)}throw i?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.")}s(FI,"replace");function BI(e,t){let n=t.split(`
1095
+ `)}s(Fn,"trimDiff");function BI(e,t,n,o=!1){if(t===n)throw new Error("No changes to apply: oldString and newString are identical.");if(t==="")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 i=!0;for(let a of[AI,MI,_I,OI,LI,NI,UI,FI,jI])for(let l of a(e,t)){let u=e.indexOf(l);if(u===-1)continue;if(i=!1,$I(l,t))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(o)return e.replaceAll(l,n);let f=e.lastIndexOf(l);if(u===f)return e.substring(0,u)+n+e.substring(u+l.length)}throw i?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.")}s(BI,"replace");function $I(e,t){let n=t.split(`
1096
1096
  `).length;return e.split(`
1097
- `).length>=Math.max(n+3,n*2)?!0:n===1?!1:e.trim().length>Math.max(t.trim().length+500,t.trim().length*4)}s(BI,"isDisproportionateMatch");import fa from"path";var Vm=`- Fast file pattern matching tool that works with any codebase size
1097
+ `).length>=Math.max(n+3,n*2)?!0:n===1?!1:e.trim().length>Math.max(t.trim().length+500,t.trim().length*4)}s($I,"isDisproportionateMatch");import fa from"path";var Vm=`- Fast file pattern matching tool that works with any codebase size
1098
1098
  - Supports glob patterns like "**/*.js" or "src/**/*.ts"
1099
1099
  - Returns matching file paths
1100
1100
  - Use this tool when you need to find files by name patterns
1101
1101
  - When you are doing an open-ended search that may require multiple rounds of globbing and grepping, use the Task tool instead
1102
1102
  - 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.
1103
- `;var $I=c.Struct({pattern:c.String.annotate({description:"The glob pattern to match files against"}),path:c.optional(c.String).annotate({description:'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.'})}),zm=Ke("glob",r.gen(function*(){let e=yield*Me.Service,t=yield*Hn.Service;return{description:Vm,parameters:$I,execute:s((n,o)=>r.gen(function*(){let i=yield*V.context;yield*o.ask({permission:"glob",patterns:[n.pattern],always:["*"],metadata:{pattern:n.pattern,path:n.path}});let a=n.path??i.directory;if(a=fa.isAbsolute(a)?a:fa.resolve(i.directory,a),(yield*e.stat(a).pipe(r.catch(()=>r.succeed(void 0))))?.type==="File")throw new Error(`glob path must be a directory: ${a}`);yield*$t(o,a,{bypass:!1,kind:"directory"});let u=100,f=yield*t.glob({cwd:a,pattern:n.pattern,limit:u}),m=f.length===u,p=[];return f.length===0&&p.push("No files found"),f.length>0&&(p.push(...f.map(h=>fa.resolve(a,h.path))),m&&(p.push(""),p.push(`(Results are truncated: showing first ${u} results. Consider using a more specific path or pattern.)`))),{title:fa.relative(i.worktree,a),metadata:{count:f.length,truncated:m},output:p.join(`
1103
+ `;var qI=c.Struct({pattern:c.String.annotate({description:"The glob pattern to match files against"}),path:c.optional(c.String).annotate({description:'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.'})}),zm=Ke("glob",r.gen(function*(){let e=yield*Me.Service,t=yield*Hn.Service;return{description:Vm,parameters:qI,execute:s((n,o)=>r.gen(function*(){let i=yield*V.context;yield*o.ask({permission:"glob",patterns:[n.pattern],always:["*"],metadata:{pattern:n.pattern,path:n.path}});let a=n.path??i.directory;if(a=fa.isAbsolute(a)?a:fa.resolve(i.directory,a),(yield*e.stat(a).pipe(r.catch(()=>r.succeed(void 0))))?.type==="File")throw new Error(`glob path must be a directory: ${a}`);yield*$t(o,a,{bypass:!1,kind:"directory"});let u=100,f=yield*t.glob({cwd:a,pattern:n.pattern,limit:u}),m=f.length===u,p=[];return f.length===0&&p.push("No files found"),f.length>0&&(p.push(...f.map(h=>fa.resolve(a,h.path))),m&&(p.push(""),p.push(`(Results are truncated: showing first ${u} results. Consider using a more specific path or pattern.)`))),{title:fa.relative(i.worktree,a),metadata:{count:f.length,truncated:m},output:p.join(`
1104
1104
  `)}}).pipe(r.orDie),"execute")}}));import Ts from"path";var Gm=`- Fast content search tool that works with any codebase size
1105
1105
  - Searches file contents using regular expressions
1106
1106
  - Supports full regex syntax (eg. "log.*Error", "function\\s+\\w+", etc.)
@@ -1109,7 +1109,7 @@ ${d}`),{metadata:{diagnostics:v,diff:f,filediff:I},title:`${co.relative(l.worktr
1109
1109
  - Use this tool when you need to find files containing specific patterns
1110
1110
  - If you need to identify/count the number of matches within files, use the Bash tool with \`rg\` (ripgrep) directly. Do NOT use \`grep\`.
1111
1111
  - When you are doing an open-ended search that may require multiple rounds of globbing and grepping, use the Task tool instead
1112
- `;var qI=c.Struct({pattern:c.String.annotate({description:"The regex pattern to search for in file contents"}),path:c.optional(c.String).annotate({description:"The directory to search in. Defaults to the current working directory."}),include:c.optional(c.String).annotate({description:'File pattern to include in the search (e.g. "*.js", "*.{ts,tsx}")'})}),Hm=Ke("grep",r.gen(function*(){let e=yield*Me.Service,t=yield*Hn.Service;return{description:Gm,parameters:qI,execute:s((n,o)=>r.gen(function*(){let i={title:n.pattern,metadata:{matches:0,truncated:!1},output:"No files found"};if(!n.pattern)throw new Error("pattern is required");yield*o.ask({permission:"grep",patterns:[n.pattern],always:["*"],metadata:{pattern:n.pattern,path:n.path,include:n.include}});let a=yield*V.context,l=Ts.isAbsolute(n.path??a.directory)?n.path??a.directory:Ts.join(a.directory,n.path??"."),u=yield*e.stat(l).pipe(r.catch(()=>r.succeed(void 0)));yield*$t(o,l,{bypass:!1,kind:u?.type==="Directory"?"directory":"file"});let f=Me.resolve(l),p=(yield*e.stat(f).pipe(r.catch(()=>r.succeed(void 0))))?.type==="Directory"?f:Ts.dirname(f),h=yield*t.grep({cwd:p,pattern:n.pattern,include:n.include,limit:100});if(h.length===0)return i;let g=h.map(x=>({path:Ts.resolve(u?.type==="Directory"?l:Ts.dirname(l),x.entry.path),line:x.line,text:x.text})),I=100,T=g.length===I,v=g;if(v.length===0)return i;let P=g.length,d=T||h.length===I,k=[`Found ${P} matches${d?" (more matches available)":""}`],y="";for(let x of v)y!==x.path&&(y!==""&&k.push(""),y=x.path,k.push(`${x.path}:`)),k.push(` Line ${x.line}: ${x.text}`);return T&&(k.push(""),k.push("(Results truncated. Consider using a more specific path or pattern.)")),{title:n.pattern,metadata:{matches:P,truncated:T},output:k.join(`
1112
+ `;var WI=c.Struct({pattern:c.String.annotate({description:"The regex pattern to search for in file contents"}),path:c.optional(c.String).annotate({description:"The directory to search in. Defaults to the current working directory."}),include:c.optional(c.String).annotate({description:'File pattern to include in the search (e.g. "*.js", "*.{ts,tsx}")'})}),Hm=Ke("grep",r.gen(function*(){let e=yield*Me.Service,t=yield*Hn.Service;return{description:Gm,parameters:WI,execute:s((n,o)=>r.gen(function*(){let i={title:n.pattern,metadata:{matches:0,truncated:!1},output:"No files found"};if(!n.pattern)throw new Error("pattern is required");yield*o.ask({permission:"grep",patterns:[n.pattern],always:["*"],metadata:{pattern:n.pattern,path:n.path,include:n.include}});let a=yield*V.context,l=Ts.isAbsolute(n.path??a.directory)?n.path??a.directory:Ts.join(a.directory,n.path??"."),u=yield*e.stat(l).pipe(r.catch(()=>r.succeed(void 0)));yield*$t(o,l,{bypass:!1,kind:u?.type==="Directory"?"directory":"file"});let f=Me.resolve(l),p=(yield*e.stat(f).pipe(r.catch(()=>r.succeed(void 0))))?.type==="Directory"?f:Ts.dirname(f),h=yield*t.grep({cwd:p,pattern:n.pattern,include:n.include,limit:100});if(h.length===0)return i;let g=h.map(S=>({path:Ts.resolve(u?.type==="Directory"?l:Ts.dirname(l),S.entry.path),line:S.line,text:S.text})),I=100,T=g.length===I,v=g;if(v.length===0)return i;let P=g.length,d=T||h.length===I,k=[`Found ${P} matches${d?" (more matches available)":""}`],y="";for(let S of v)y!==S.path&&(y!==""&&k.push(""),y=S.path,k.push(`${S.path}:`)),k.push(` Line ${S.line}: ${S.text}`);return T&&(k.push(""),k.push("(Results truncated. Consider using a more specific path or pattern.)")),{title:n.pattern,metadata:{matches:P,truncated:T},output:k.join(`
1113
1113
  `)}}).pipe(r.orDie),"execute")}}));import*as jt from"path";var Ym=`Read a file or directory from the local filesystem. If the path does not exist, an error is returned.
1114
1114
 
1115
1115
  Usage:
@@ -1124,21 +1124,21 @@ Usage:
1124
1124
  - Call this tool in parallel when you know there are multiple files you want to read.
1125
1125
  - Avoid tiny repeated slices (30 line chunks). If you need more context, read a larger window.
1126
1126
  - This tool can read image files and PDFs and return them as file attachments.
1127
- `;var Jm=2e3,Kl=2e3,WI=`... (line truncated to ${Kl} chars)`,Km=50*1024,VI=`${Km/1024} KB`,zI=4096,GI=new Set(["image/jpeg","image/png","image/gif","image/webp"]),ma=class extends c.TaggedErrorClass()("ReadStop",{}){static{s(this,"ReadStop")}},HI=c.Struct({filePath:c.String.annotate({description:"The absolute path to the file or directory to read"}),offset:c.optional(mn).annotate({description:"The line number to start reading from (1-indexed)"}),limit:c.optional(mn).annotate({description:"The maximum number of lines to read (defaults to 2000)"})}),Xm=Ke("read",r.gen(function*(){let e=yield*Me.Service,t=yield*En.Service,n=yield*mt.Service,o=yield*Et.Scope,i=r.fn("ReadTool.miss")(function*(h){let g=jt.dirname(h),I=jt.basename(h),T=yield*e.readDirectory(g).pipe(r.map(v=>v.filter(P=>P.toLowerCase().includes(I.toLowerCase())||I.toLowerCase().includes(P.toLowerCase())).map(P=>jt.join(g,P)).slice(0,3)),r.catch(()=>r.succeed([])));return T.length>0?yield*r.fail(new Error(`File not found: ${h}
1127
+ `;var Jm=2e3,Kl=2e3,VI=`... (line truncated to ${Kl} chars)`,Km=50*1024,zI=`${Km/1024} KB`,GI=4096,HI=new Set(["image/jpeg","image/png","image/gif","image/webp"]),ma=class extends c.TaggedErrorClass()("ReadStop",{}){static{s(this,"ReadStop")}},YI=c.Struct({filePath:c.String.annotate({description:"The absolute path to the file or directory to read"}),offset:c.optional(mn).annotate({description:"The line number to start reading from (1-indexed)"}),limit:c.optional(mn).annotate({description:"The maximum number of lines to read (defaults to 2000)"})}),Xm=Ke("read",r.gen(function*(){let e=yield*Me.Service,t=yield*En.Service,n=yield*mt.Service,o=yield*Et.Scope,i=r.fn("ReadTool.miss")(function*(h){let g=jt.dirname(h),I=jt.basename(h),T=yield*e.readDirectory(g).pipe(r.map(v=>v.filter(P=>P.toLowerCase().includes(I.toLowerCase())||I.toLowerCase().includes(P.toLowerCase())).map(P=>jt.join(g,P)).slice(0,3)),r.catch(()=>r.succeed([])));return T.length>0?yield*r.fail(new Error(`File not found: ${h}
1128
1128
 
1129
1129
  Did you mean one of these?
1130
1130
  ${T.join(`
1131
- `)}`)):yield*r.fail(new Error(`File not found: ${h}`))}),a=r.fn("ReadTool.list")(function*(h){let g=yield*e.readDirectoryEntries(h);return yield*r.forEach(g,r.fnUntraced(function*(I){return I.type==="directory"?I.name+"/":I.type!=="symlink"?I.name:(yield*e.stat(jt.join(h,I.name)).pipe(r.catch(()=>r.void)))?.type==="Directory"?I.name+"/":I.name}),{concurrency:"unbounded"}).pipe(r.map(I=>I.sort((T,v)=>T.localeCompare(v))))}),l=r.fn("ReadTool.warm")(function*(h){yield*n.touchFile(h).pipe(r.ignoreCause,r.forkIn(o))}),u=r.fn("ReadTool.readSample")(function*(h,g,I){return g===0?new Uint8Array:yield*r.scoped(r.gen(function*(){let T=yield*e.open(h,{flag:"r"});return xn.getOrElse(yield*T.readAlloc(Math.min(I,g)),()=>new Uint8Array)}))}),f=r.fn("ReadTool.lines")(function*(h,g){let I=g.offset-1,T=[],v={bytes:0,count:0,cut:!1,more:!1,done:!1},P=new TextDecoder("utf-8");return yield*e.stream(h).pipe(xt.map(d=>P.decode(d,{stream:!0})),xt.splitLines,xt.runForEach(d=>r.gen(function*(){if(v.done)return yield*new ma;if(v.count+=1,v.count<=I)return;if(T.length>=g.limit){v.more=!0;return}let k=d.length>Kl?d.substring(0,Kl)+WI:d,y=Buffer.byteLength(k,"utf-8")+(T.length>0?1:0);if(v.bytes+y<=Km){T.push(k),v.bytes+=y;return}return v.cut=!0,v.more=!0,v.done=!0,yield*new ma})),r.catchTag("ReadStop",()=>r.void)),{raw:T,count:v.count,cut:v.cut,more:v.more,offset:g.offset}}),m=s((h,g)=>{switch(jt.extname(h).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}if(g.length===0)return!1;let T=0;for(let v=0;v<g.length;v++){if(g[v]===0)return!0;(g[v]<9||g[v]>13&&g[v]<32)&&T++}return T/g.length>.3},"isBinaryFile"),p=r.fn("ReadTool.execute")(function*(h,g){let I=yield*V.context,T=h.filePath;jt.isAbsolute(T)||(T=jt.resolve(I.directory,T)),process.platform==="win32"&&(T=Me.normalizePath(T));let v=jt.relative(I.worktree,T),P=yield*e.stat(T).pipe(r.catchIf(U=>"reason"in U&&U.reason._tag==="NotFound",()=>r.succeed(void 0)));if(yield*$t(g,T,{bypass:!!g.extra?.bypassCwdCheck,kind:P?.type==="Directory"?"directory":"file"}),yield*g.ask({permission:"read",patterns:[jt.relative(I.worktree,T)],always:["*"],metadata:{}}),!P)return yield*i(T);if(P.type==="Directory"){let U=yield*a(T),H=h.limit??Jm,ue=h.offset||1,L=ue-1,W=U.slice(L,L+H),D=L+W.length<U.length;return{title:v,output:[`<path>${T}</path>`,"<type>directory</type>","<entries>",W.join(`
1131
+ `)}`)):yield*r.fail(new Error(`File not found: ${h}`))}),a=r.fn("ReadTool.list")(function*(h){let g=yield*e.readDirectoryEntries(h);return yield*r.forEach(g,r.fnUntraced(function*(I){return I.type==="directory"?I.name+"/":I.type!=="symlink"?I.name:(yield*e.stat(jt.join(h,I.name)).pipe(r.catch(()=>r.void)))?.type==="Directory"?I.name+"/":I.name}),{concurrency:"unbounded"}).pipe(r.map(I=>I.sort((T,v)=>T.localeCompare(v))))}),l=r.fn("ReadTool.warm")(function*(h){yield*n.touchFile(h).pipe(r.ignoreCause,r.forkIn(o))}),u=r.fn("ReadTool.readSample")(function*(h,g,I){return g===0?new Uint8Array:yield*r.scoped(r.gen(function*(){let T=yield*e.open(h,{flag:"r"});return xn.getOrElse(yield*T.readAlloc(Math.min(I,g)),()=>new Uint8Array)}))}),f=r.fn("ReadTool.lines")(function*(h,g){let I=g.offset-1,T=[],v={bytes:0,count:0,cut:!1,more:!1,done:!1},P=new TextDecoder("utf-8");return yield*e.stream(h).pipe(xt.map(d=>P.decode(d,{stream:!0})),xt.splitLines,xt.runForEach(d=>r.gen(function*(){if(v.done)return yield*new ma;if(v.count+=1,v.count<=I)return;if(T.length>=g.limit){v.more=!0;return}let k=d.length>Kl?d.substring(0,Kl)+VI:d,y=Buffer.byteLength(k,"utf-8")+(T.length>0?1:0);if(v.bytes+y<=Km){T.push(k),v.bytes+=y;return}return v.cut=!0,v.more=!0,v.done=!0,yield*new ma})),r.catchTag("ReadStop",()=>r.void)),{raw:T,count:v.count,cut:v.cut,more:v.more,offset:g.offset}}),m=s((h,g)=>{switch(jt.extname(h).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}if(g.length===0)return!1;let T=0;for(let v=0;v<g.length;v++){if(g[v]===0)return!0;(g[v]<9||g[v]>13&&g[v]<32)&&T++}return T/g.length>.3},"isBinaryFile"),p=r.fn("ReadTool.execute")(function*(h,g){let I=yield*V.context,T=h.filePath;jt.isAbsolute(T)||(T=jt.resolve(I.directory,T)),process.platform==="win32"&&(T=Me.normalizePath(T));let v=jt.relative(I.worktree,T),P=yield*e.stat(T).pipe(r.catchIf(U=>"reason"in U&&U.reason._tag==="NotFound",()=>r.succeed(void 0)));if(yield*$t(g,T,{bypass:!!g.extra?.bypassCwdCheck,kind:P?.type==="Directory"?"directory":"file"}),yield*g.ask({permission:"read",patterns:[jt.relative(I.worktree,T)],always:["*"],metadata:{}}),!P)return yield*i(T);if(P.type==="Directory"){let U=yield*a(T),H=h.limit??Jm,ue=h.offset||1,L=ue-1,W=U.slice(L,L+H),D=L+W.length<U.length;return{title:v,output:[`<path>${T}</path>`,"<type>directory</type>","<entries>",W.join(`
1132
1132
  `),D?`
1133
1133
  (Showing ${W.length} of ${U.length} entries. Use 'offset' parameter to read beyond entry ${ue+W.length})`:`
1134
1134
  (${U.length} entries)`,"</entries>"].join(`
1135
1135
  `),metadata:{preview:W.slice(0,20).join(`
1136
- `),truncated:D,loaded:[],display:{type:"directory",path:T,entries:W,offset:ue,totalEntries:U.length,truncated:D}}}}let d=yield*t.resolve(g.messages,T,g.messageID),k=yield*u(T,Number(P.size),zI),y=Vu(k,Me.mimeType(T));if(GI.has(y)||oc(y)){let U=yield*e.readFile(T),H=oc(y)?"PDF read successfully":"Image read successfully";return{title:v,output:H,metadata:{preview:H,truncated:!1,loaded:d.map(ue=>ue.filepath)},attachments:[{type:"file",mime:y,url:`data:${y};base64,${Buffer.from(U).toString("base64")}`}]}}if(m(T,k))return yield*r.fail(new Error(`Cannot read binary file: ${T}`));let E=yield*f(T,{limit:h.limit??Jm,offset:h.offset||1});if(E.count<E.offset&&!(E.count===0&&E.offset===1))return yield*r.fail(new Error(`Offset ${E.offset} is out of range for this file (${E.count} lines)`));let w=[`<path>${T}</path>`,"<type>file</type>",`<content>
1136
+ `),truncated:D,loaded:[],display:{type:"directory",path:T,entries:W,offset:ue,totalEntries:U.length,truncated:D}}}}let d=yield*t.resolve(g.messages,T,g.messageID),k=yield*u(T,Number(P.size),GI),y=Vu(k,Me.mimeType(T));if(HI.has(y)||oc(y)){let U=yield*e.readFile(T),H=oc(y)?"PDF read successfully":"Image read successfully";return{title:v,output:H,metadata:{preview:H,truncated:!1,loaded:d.map(ue=>ue.filepath)},attachments:[{type:"file",mime:y,url:`data:${y};base64,${Buffer.from(U).toString("base64")}`}]}}if(m(T,k))return yield*r.fail(new Error(`Cannot read binary file: ${T}`));let E=yield*f(T,{limit:h.limit??Jm,offset:h.offset||1});if(E.count<E.offset&&!(E.count===0&&E.offset===1))return yield*r.fail(new Error(`Offset ${E.offset} is out of range for this file (${E.count} lines)`));let w=[`<path>${T}</path>`,"<type>file</type>",`<content>
1137
1137
  `].join(`
1138
1138
  `);w+=E.raw.map((U,H)=>`${H+E.offset}: ${U}`).join(`
1139
1139
  `);let M=E.offset+E.raw.length-1,C=M+1,$=E.more||E.cut;return E.cut?w+=`
1140
1140
 
1141
- (Output capped at ${VI}. Showing lines ${E.offset}-${M}. Use offset=${C} to continue.)`:E.more?w+=`
1141
+ (Output capped at ${zI}. Showing lines ${E.offset}-${M}. Use offset=${C} to continue.)`:E.more?w+=`
1142
1142
 
1143
1143
  (Showing lines ${E.offset}-${M} of ${E.count}. Use offset=${C} to continue.)`:w+=`
1144
1144
 
@@ -1151,7 +1151,7 @@ ${d.map(U=>U.content).join(`
1151
1151
  `)}
1152
1152
  </system-reminder>`),{title:v,output:w,metadata:{preview:E.raw.slice(0,20).join(`
1153
1153
  `),truncated:$,loaded:d.map(U=>U.filepath),display:{type:"file",path:T,text:E.raw.join(`
1154
- `),lineStart:E.offset,lineEnd:M,totalLines:E.count,truncated:$}}}});return{description:Ym,parameters:HI,execute:s((h,g)=>p(h,g).pipe(r.orDie),"execute")}}));var Xl=`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.
1154
+ `),lineStart:E.offset,lineEnd:M,totalLines:E.count,truncated:$}}}});return{description:Ym,parameters:YI,execute:s((h,g)=>p(h,g).pipe(r.orDie),"execute")}}));var Xl=`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.
1155
1155
 
1156
1156
  Launch a new agent to handle complex, multistep tasks autonomously.
1157
1157
 
@@ -1175,12 +1175,12 @@ Usage notes:
1175
1175
  5. The agent's outputs should generally be trusted
1176
1176
  6. Clearly tell the agent whether you expect it to write code or just to do research (search, file reads, web fetches, etc.), since it is not aware of the user's intent. Tell it how to verify its work if possible (e.g., relevant test commands).
1177
1177
  7. If the agent description mentions that it should be used proactively, then you should try your best to use it without the user having to ask for it first. Use your judgement.
1178
- `;var Mo={};fe(Mo,{ToolJsonSchema:()=>Mo,fromSchema:()=>Zm,fromTool:()=>YI});var Qm=new WeakMap;function Zm(e){let t=Qm.get(e);if(t)return t;let n=c.toJsonSchemaDocument(e,{additionalProperties:!0}),o=Bn({$schema:Wd.META_SCHEMA_URI_DRAFT_2020_12,...n.schema,...Object.keys(n.definitions).length>0?{$defs:n.definitions}:{}}),i=ZI(ha(o));if(!JI(i))throw new Error("tool JSON Schema helper produced a non-schema value");return Qm.set(e,i),i}s(Zm,"fromSchema");function YI(e){return e.jsonSchema??Zm(e.parameters)}s(YI,"fromTool");function Bn(e,t={}){if(Array.isArray(e))return e.map(i=>Bn(i));if(!qt(e))return e;let n=Array.isArray(e.required)?new Set(e.required.filter(i=>typeof i=="string")):void 0,o=Object.fromEntries(Object.entries(e).map(([i,a])=>[i,i==="properties"&&qt(a)?Object.fromEntries(Object.entries(a).map(([l,u])=>[l,Bn(u,{stripNull:!n?.has(l)})])):Bn(a)]));if(o.additionalProperties===!0&&delete o.additionalProperties,t.stripNull&&Array.isArray(o.anyOf)){let i=o.anyOf.filter(a=>!qt(a)||a.type!=="null");if(i.length!==o.anyOf.length)return Bn({...o,anyOf:i})}if(Array.isArray(o.anyOf)){let i=o.anyOf,a=i.find(u=>qt(u)&&u.type==="number"),l=i.filter(u=>qt(u)&&Array.isArray(u.enum)&&u.enum.every(f=>KI(f)));if(a&&l.length===i.length-1){let{anyOf:u,...f}=o;return Bn({...a,...f})}if(XI(i)){let{anyOf:u,...f}=o;return Bn({type:"object",properties:{},...f})}if(i.length===1&&qt(i[0])){let{anyOf:u,...f}=o;return Bn({...i[0],...f})}}if(Array.isArray(o.allOf)&&o.allOf.every(qt)&&QI(o.allOf,o)){let{allOf:i,...a}=o;return Bn({...Object.assign({},...i),...a})}return o.type==="integer"&&o.maximum===void 0?{minimum:Number.MIN_SAFE_INTEGER,...o,maximum:Number.MAX_SAFE_INTEGER}:o}s(Bn,"normalize");function qt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}s(qt,"isRecord");function JI(e){return typeof e=="boolean"||qt(e)}s(JI,"isJsonSchema");function KI(e){return e==="NaN"||e==="Infinity"||e==="-Infinity"}s(KI,"isNonFiniteNumber");function XI(e){return e.length===2&&e.some(t=>qt(t)&&t.type==="object"&&t.properties===void 0)&&e.some(t=>qt(t)&&t.type==="array"&&t.items===void 0)}s(XI,"isEmptyStructUnion");function QI(e,t){let n=new Set(Object.keys(t).filter(o=>o!=="allOf"));return e.every(o=>Object.keys(o).every(i=>n.has(i)?!1:(n.add(i),!0)))}s(QI,"canFlattenAllOf");function ha(e,t,n=new Set){if(Array.isArray(e))return e.map(i=>ha(i,t,n));if(!qt(e))return e;let o=t??(qt(e.$defs)?e.$defs:void 0);if(typeof e.$ref=="string"&&o){let i=e.$ref.match(/^#\/\$defs\/(.+)$/)?.[1]??e.$ref.match(/^#\/definitions\/(.+)$/)?.[1];if(i&&!n.has(i)){let a=o[i];if(a){let{$ref:l,...u}=e;return ha({...qt(a)?a:{},...u},o,new Set(n).add(i))}}}return Object.fromEntries(Object.entries(e).map(([i,a])=>[i,ha(a,o,n)]))}s(ha,"inlineLocalReferences");function ZI(e){if(!qt(e)||Ql(e))return e;let{$defs:t,definitions:n,...o}=e;return o}s(ZI,"dropDefinitionsIfResolved");function Ql(e){return Array.isArray(e)?e.some(Ql):qt(e)?typeof e.$ref=="string"&&(e.$ref.startsWith("#/$defs/")||e.$ref.startsWith("#/definitions/"))?!0:Object.values(e).some(Ql):!1}s(Ql,"hasLocalReference");function eh(e){let t=e.subagent.permission.some(o=>o.permission==="task"),n=e.subagent.permission.some(o=>o.permission==="todowrite");return[...e.parentSessionPermission.filter(o=>o.permission==="external_directory"||o.action==="deny"),...n?[]:[{permission:"todowrite",pattern:"*",action:"deny"}],...t?[]:[{permission:"task",pattern:"*",action:"deny"}]]}s(eh,"deriveSubagentSessionPermission");var Ps="task",ek=["Background mode: background=true launches the subagent asynchronously and returns immediately.","Foreground is the default; use it when you need the result before continuing.","Use background only for independent work that can run while you continue elsewhere.","You will be notified automatically when it finishes."].join(" "),tk=["The task is working in the background. You will be notified automatically when it finishes.","DO NOT sleep, poll for progress, ask the task for status, or duplicate this task's work \u2014 avoid working with the same files or topics it is using.","Work on non-overlapping tasks, or briefly tell the user what you launched and end your response."].join(`
1179
- `),nk=["Additional context sent to the running background task.","The task is still working in the background. You will be notified automatically when it finishes.","DO NOT sleep, poll for progress, ask the task for status, or duplicate this task's work \u2014 avoid working with the same files or topics it is using.","Work on non-overlapping tasks, or briefly tell the user what you sent and end your response."].join(`
1180
- `),th={description:c.String.annotate({description:"A short (3-5 words) description of the task"}),prompt:c.String.annotate({description:"The task for the agent to perform"}),subagent_type:c.String.annotate({description:"The type of specialized agent to use for this task"}),task_id:c.optional(c.String).annotate({description:"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)"}),command:c.optional(c.String).annotate({description:"The command that triggered this task"})},ok=c.Struct(th),rk=c.Struct({...th,background:c.optional(c.Boolean).annotate({description:"Run the agent in the background. You will be notified when it completes. DO NOT sleep, poll, or proactively check on its progress"})});function ga(e){let t=e.state==="error"?"task_error":"task_result";return[`<task id="${e.sessionID}" state="${e.state}">`,...e.summary?[`<summary>${e.summary}</summary>`]:[],`<${t}>`,e.text,`</${t}>`,"</task>"].join(`
1181
- `)}s(ga,"renderOutput");var _o=Ke(Ps,r.gen(function*(){let e=yield*Ft.Service,t=yield*wo.Service,n=yield*Ne.Service,o=yield*me.Service,i=yield*Et.Scope,a=yield*Ve.Service,l=yield*tt.Service,u=r.fn("TaskTool.execute")(function*(f,m){let p=yield*n.get(),h=f.background===!0;if(h&&!a.experimentalBackgroundSubagents)return yield*r.fail(new Error("Background subagents require OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=true"));let g=yield*o.get(m.sessionID),I=g,T=0;for(;I.parentID;)T++,I=yield*o.get(I.parentID);if(T>=(p.subagent_depth??1))return yield*r.fail(new Error(`Subagent depth limit reached (${p.subagent_depth??1}). Increase "subagent_depth" to allow nested subagents.`));m.extra?.bypassAgentCheck||(yield*m.ask({permission:Ps,patterns:[f.subagent_type],always:["*"],metadata:{description:f.description,subagent_type:f.subagent_type}}));let v=yield*e.get(f.subagent_type);if(!v)return yield*r.fail(new Error(`Unknown agent type: ${f.subagent_type} is not a valid agent type`));let P=f.task_id?yield*o.get(Rt.make(f.task_id)).pipe(r.catchCause(()=>r.succeed(void 0))):void 0,d=eh({parentSessionPermission:g.permission??[],subagent:v}),k=[...v.permission.some(_=>_.permission==="todowrite")?[]:[{permission:"todowrite",pattern:"*",action:"deny"}],...v.permission.some(_=>_.permission===Ps)?[]:[{permission:Ps,pattern:"*",action:"deny"}],...p.experimental?.primary_tools?.map(_=>({permission:_,pattern:"*",action:"deny"}))??[]],y=P??(yield*o.create({parentID:m.sessionID,title:f.description+` (@${v.name} subagent)`,agent:v.name,metadata:{agentType:v.name,spawnedBy:"task-tool",callerSessionId:m.sessionID},permission:[...d,...k.filter(_=>!d.some(N=>N.permission===_.permission&&N.pattern===_.pattern&&N.action===_.action))]})),x=yield*nt.get({sessionID:m.sessionID,messageID:m.messageID}).pipe(r.provideService(tt.Service,l),r.orDie);if(x.info.role!=="assistant")return yield*r.fail(new Error("Not an assistant message"));let E=x.info.variant,w=v.model??{modelID:x.info.modelID,providerID:x.info.providerID},M={parentSessionId:m.sessionID,sessionId:y.id,model:w,...h?{background:!0}:{}};yield*m.metadata({title:f.description,metadata:M});let C=m.extra?.promptOps;if(!C)return yield*r.fail(new Error("TaskTool requires promptOps in ctx.extra"));let $=r.fn("TaskTool.runTask")(function*(){let _=yield*C.resolvePromptParts(f.prompt),N=yield*C.prompt({messageID:ct.ascending(),sessionID:y.id,model:{modelID:w.modelID,providerID:w.providerID},variant:v.model?void 0:E,agent:v.name,parts:_});if(N.info.role==="assistant"&&N.info.error){let j="message"in N.info.error.data&&typeof N.info.error.data.message=="string"?N.info.error.data.message:N.info.error.name;return yield*r.fail(new Error(`Subagent failed (task_id: ${y.id}): ${j}`))}let q=N.parts.findLast(j=>j.type==="tool"&&j.state.status==="error");return q?.type==="tool"&&q.state.status==="error"?yield*r.fail(new Error(`Subagent failed (task_id: ${y.id}): ${q.state.error}`)):N.parts.findLast(j=>j.type==="text")?.text??""}),U=r.fn("TaskTool.injectBackgroundResult")(function*(_,N){let q=yield*o.get(m.sessionID);yield*C.prompt({sessionID:m.sessionID,agent:q.agent??m.agent,variant:E,parts:[{type:"text",synthetic:!0,text:ga({sessionID:y.id,state:_,summary:_==="completed"?`Background task completed: ${f.description}`:`Background task failed: ${f.description}`,text:N})}]}).pipe(r.ignore,r.forkIn(i,{startImmediately:!0}))}),H=r.fn("TaskTool.notifyBackgroundResult")(function*(_){yield*t.wait({id:_}).pipe(r.flatMap(N=>N.info?.status==="completed"?U("completed",N.info.output??""):N.info?.status==="error"?U("error",N.info.error??""):r.void),r.forkIn(i,{startImmediately:!0}))});if(yield*t.extend({id:y.id,run:$()}))return{title:f.description,metadata:{...M,background:!0,jobId:y.id},output:ga({sessionID:y.id,state:"running",summary:"Background task updated",text:nk})};let ue=yield*t.start({id:y.id,type:Ps,title:f.description,metadata:M,onPromote:r.all([m.metadata({title:f.description,metadata:{...M,background:!0,jobId:y.id}}),H(y.id)]),run:$().pipe(r.onInterrupt(()=>C.cancel(y.id)))});function L(){return{title:f.description,metadata:{...M,background:!0,jobId:ue.id},output:ga({sessionID:y.id,state:"running",summary:"Background task started",text:tk})}}if(s(L,"backgroundResult"),h)return yield*H(ue.id),L();let W=yield*zt.make(),D=C.cancel(y.id);function A(){W.fork(D)}return s(A,"onAbort"),yield*r.acquireUseRelease(r.sync(()=>{m.abort.addEventListener("abort",A)}),()=>r.gen(function*(){let _=yield*r.raceFirst(t.wait({id:y.id}).pipe(r.map(N=>N.info)),t.waitForPromotion(y.id));return _?.metadata?.background===!0?L():_?.status==="error"?yield*r.fail(new Error(_.error??"Task failed")):_?.status==="cancelled"?yield*r.fail(new Error("Task cancelled")):{title:f.description,metadata:M,output:ga({sessionID:y.id,state:"completed",text:_?.output??""})}}),(_,N)=>r.gen(function*(){wt.hasInterrupts(N)&&(yield*r.all([D,t.cancel(y.id)],{discard:!0}))}).pipe(r.ensuring(r.sync(()=>{m.abort.removeEventListener("abort",A)}))))});return{description:a.experimentalBackgroundSubagents?[Xl,ek].join(`
1178
+ `;var Mo={};fe(Mo,{ToolJsonSchema:()=>Mo,fromSchema:()=>Zm,fromTool:()=>JI});var Qm=new WeakMap;function Zm(e){let t=Qm.get(e);if(t)return t;let n=c.toJsonSchemaDocument(e,{additionalProperties:!0}),o=Bn({$schema:Wd.META_SCHEMA_URI_DRAFT_2020_12,...n.schema,...Object.keys(n.definitions).length>0?{$defs:n.definitions}:{}}),i=ek(ha(o));if(!KI(i))throw new Error("tool JSON Schema helper produced a non-schema value");return Qm.set(e,i),i}s(Zm,"fromSchema");function JI(e){return e.jsonSchema??Zm(e.parameters)}s(JI,"fromTool");function Bn(e,t={}){if(Array.isArray(e))return e.map(i=>Bn(i));if(!qt(e))return e;let n=Array.isArray(e.required)?new Set(e.required.filter(i=>typeof i=="string")):void 0,o=Object.fromEntries(Object.entries(e).map(([i,a])=>[i,i==="properties"&&qt(a)?Object.fromEntries(Object.entries(a).map(([l,u])=>[l,Bn(u,{stripNull:!n?.has(l)})])):Bn(a)]));if(o.additionalProperties===!0&&delete o.additionalProperties,t.stripNull&&Array.isArray(o.anyOf)){let i=o.anyOf.filter(a=>!qt(a)||a.type!=="null");if(i.length!==o.anyOf.length)return Bn({...o,anyOf:i})}if(Array.isArray(o.anyOf)){let i=o.anyOf,a=i.find(u=>qt(u)&&u.type==="number"),l=i.filter(u=>qt(u)&&Array.isArray(u.enum)&&u.enum.every(f=>XI(f)));if(a&&l.length===i.length-1){let{anyOf:u,...f}=o;return Bn({...a,...f})}if(QI(i)){let{anyOf:u,...f}=o;return Bn({type:"object",properties:{},...f})}if(i.length===1&&qt(i[0])){let{anyOf:u,...f}=o;return Bn({...i[0],...f})}}if(Array.isArray(o.allOf)&&o.allOf.every(qt)&&ZI(o.allOf,o)){let{allOf:i,...a}=o;return Bn({...Object.assign({},...i),...a})}return o.type==="integer"&&o.maximum===void 0?{minimum:Number.MIN_SAFE_INTEGER,...o,maximum:Number.MAX_SAFE_INTEGER}:o}s(Bn,"normalize");function qt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}s(qt,"isRecord");function KI(e){return typeof e=="boolean"||qt(e)}s(KI,"isJsonSchema");function XI(e){return e==="NaN"||e==="Infinity"||e==="-Infinity"}s(XI,"isNonFiniteNumber");function QI(e){return e.length===2&&e.some(t=>qt(t)&&t.type==="object"&&t.properties===void 0)&&e.some(t=>qt(t)&&t.type==="array"&&t.items===void 0)}s(QI,"isEmptyStructUnion");function ZI(e,t){let n=new Set(Object.keys(t).filter(o=>o!=="allOf"));return e.every(o=>Object.keys(o).every(i=>n.has(i)?!1:(n.add(i),!0)))}s(ZI,"canFlattenAllOf");function ha(e,t,n=new Set){if(Array.isArray(e))return e.map(i=>ha(i,t,n));if(!qt(e))return e;let o=t??(qt(e.$defs)?e.$defs:void 0);if(typeof e.$ref=="string"&&o){let i=e.$ref.match(/^#\/\$defs\/(.+)$/)?.[1]??e.$ref.match(/^#\/definitions\/(.+)$/)?.[1];if(i&&!n.has(i)){let a=o[i];if(a){let{$ref:l,...u}=e;return ha({...qt(a)?a:{},...u},o,new Set(n).add(i))}}}return Object.fromEntries(Object.entries(e).map(([i,a])=>[i,ha(a,o,n)]))}s(ha,"inlineLocalReferences");function ek(e){if(!qt(e)||Ql(e))return e;let{$defs:t,definitions:n,...o}=e;return o}s(ek,"dropDefinitionsIfResolved");function Ql(e){return Array.isArray(e)?e.some(Ql):qt(e)?typeof e.$ref=="string"&&(e.$ref.startsWith("#/$defs/")||e.$ref.startsWith("#/definitions/"))?!0:Object.values(e).some(Ql):!1}s(Ql,"hasLocalReference");function eh(e){let t=e.subagent.permission.some(o=>o.permission==="task"),n=e.subagent.permission.some(o=>o.permission==="todowrite");return[...e.parentSessionPermission.filter(o=>o.permission==="external_directory"||o.action==="deny"),...n?[]:[{permission:"todowrite",pattern:"*",action:"deny"}],...t?[]:[{permission:"task",pattern:"*",action:"deny"}]]}s(eh,"deriveSubagentSessionPermission");var Ps="task",tk=["Background mode: background=true launches the subagent asynchronously and returns immediately.","Foreground is the default; use it when you need the result before continuing.","Use background only for independent work that can run while you continue elsewhere.","You will be notified automatically when it finishes."].join(" "),nk=["The task is working in the background. You will be notified automatically when it finishes.","DO NOT sleep, poll for progress, ask the task for status, or duplicate this task's work \u2014 avoid working with the same files or topics it is using.","Work on non-overlapping tasks, or briefly tell the user what you launched and end your response."].join(`
1179
+ `),ok=["Additional context sent to the running background task.","The task is still working in the background. You will be notified automatically when it finishes.","DO NOT sleep, poll for progress, ask the task for status, or duplicate this task's work \u2014 avoid working with the same files or topics it is using.","Work on non-overlapping tasks, or briefly tell the user what you sent and end your response."].join(`
1180
+ `),th={description:c.String.annotate({description:"A short (3-5 words) description of the task"}),prompt:c.String.annotate({description:"The task for the agent to perform"}),subagent_type:c.String.annotate({description:"The type of specialized agent to use for this task"}),task_id:c.optional(c.String).annotate({description:"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)"}),command:c.optional(c.String).annotate({description:"The command that triggered this task"})},rk=c.Struct(th),sk=c.Struct({...th,background:c.optional(c.Boolean).annotate({description:"Run the agent in the background. You will be notified when it completes. DO NOT sleep, poll, or proactively check on its progress"})});function ga(e){let t=e.state==="error"?"task_error":"task_result";return[`<task id="${e.sessionID}" state="${e.state}">`,...e.summary?[`<summary>${e.summary}</summary>`]:[],`<${t}>`,e.text,`</${t}>`,"</task>"].join(`
1181
+ `)}s(ga,"renderOutput");var _o=Ke(Ps,r.gen(function*(){let e=yield*Ft.Service,t=yield*wo.Service,n=yield*Ne.Service,o=yield*me.Service,i=yield*Et.Scope,a=yield*Ve.Service,l=yield*tt.Service,u=r.fn("TaskTool.execute")(function*(f,m){let p=yield*n.get(),h=f.background===!0;if(h&&!a.experimentalBackgroundSubagents)return yield*r.fail(new Error("Background subagents require OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=true"));let g=yield*o.get(m.sessionID),I=g,T=0;for(;I.parentID;)T++,I=yield*o.get(I.parentID);if(T>=(p.subagent_depth??1))return yield*r.fail(new Error(`Subagent depth limit reached (${p.subagent_depth??1}). Increase "subagent_depth" to allow nested subagents.`));m.extra?.bypassAgentCheck||(yield*m.ask({permission:Ps,patterns:[f.subagent_type],always:["*"],metadata:{description:f.description,subagent_type:f.subagent_type}}));let v=yield*e.get(f.subagent_type);if(!v)return yield*r.fail(new Error(`Unknown agent type: ${f.subagent_type} is not a valid agent type`));let P=f.task_id?yield*o.get(Rt.make(f.task_id)).pipe(r.catchCause(()=>r.succeed(void 0))):void 0,d=eh({parentSessionPermission:g.permission??[],subagent:v}),k=[...v.permission.some(_=>_.permission==="todowrite")?[]:[{permission:"todowrite",pattern:"*",action:"deny"}],...v.permission.some(_=>_.permission===Ps)?[]:[{permission:Ps,pattern:"*",action:"deny"}],...p.experimental?.primary_tools?.map(_=>({permission:_,pattern:"*",action:"deny"}))??[]],y=P??(yield*o.create({parentID:m.sessionID,title:f.description+` (@${v.name} subagent)`,agent:v.name,metadata:{agentType:v.name,spawnedBy:"task-tool",callerSessionId:m.sessionID},permission:[...d,...k.filter(_=>!d.some(N=>N.permission===_.permission&&N.pattern===_.pattern&&N.action===_.action))]})),S=yield*nt.get({sessionID:m.sessionID,messageID:m.messageID}).pipe(r.provideService(tt.Service,l),r.orDie);if(S.info.role!=="assistant")return yield*r.fail(new Error("Not an assistant message"));let E=S.info.variant,w=v.model??{modelID:S.info.modelID,providerID:S.info.providerID},M={parentSessionId:m.sessionID,sessionId:y.id,model:w,...h?{background:!0}:{}};yield*m.metadata({title:f.description,metadata:M});let C=m.extra?.promptOps;if(!C)return yield*r.fail(new Error("TaskTool requires promptOps in ctx.extra"));let $=r.fn("TaskTool.runTask")(function*(){let _=yield*C.resolvePromptParts(f.prompt),N=yield*C.prompt({messageID:ct.ascending(),sessionID:y.id,model:{modelID:w.modelID,providerID:w.providerID},variant:v.model?void 0:E,agent:v.name,parts:_});if(N.info.role==="assistant"&&N.info.error){let j="message"in N.info.error.data&&typeof N.info.error.data.message=="string"?N.info.error.data.message:N.info.error.name;return yield*r.fail(new Error(`Subagent failed (task_id: ${y.id}): ${j}`))}let q=N.parts.findLast(j=>j.type==="tool"&&j.state.status==="error");return q?.type==="tool"&&q.state.status==="error"?yield*r.fail(new Error(`Subagent failed (task_id: ${y.id}): ${q.state.error}`)):N.parts.findLast(j=>j.type==="text")?.text??""}),U=r.fn("TaskTool.injectBackgroundResult")(function*(_,N){let q=yield*o.get(m.sessionID);yield*C.prompt({sessionID:m.sessionID,agent:q.agent??m.agent,variant:E,parts:[{type:"text",synthetic:!0,text:ga({sessionID:y.id,state:_,summary:_==="completed"?`Background task completed: ${f.description}`:`Background task failed: ${f.description}`,text:N})}]}).pipe(r.ignore,r.forkIn(i,{startImmediately:!0}))}),H=r.fn("TaskTool.notifyBackgroundResult")(function*(_){yield*t.wait({id:_}).pipe(r.flatMap(N=>N.info?.status==="completed"?U("completed",N.info.output??""):N.info?.status==="error"?U("error",N.info.error??""):r.void),r.forkIn(i,{startImmediately:!0}))});if(yield*t.extend({id:y.id,run:$()}))return{title:f.description,metadata:{...M,background:!0,jobId:y.id},output:ga({sessionID:y.id,state:"running",summary:"Background task updated",text:ok})};let ue=yield*t.start({id:y.id,type:Ps,title:f.description,metadata:M,onPromote:r.all([m.metadata({title:f.description,metadata:{...M,background:!0,jobId:y.id}}),H(y.id)]),run:$().pipe(r.onInterrupt(()=>C.cancel(y.id)))});function L(){return{title:f.description,metadata:{...M,background:!0,jobId:ue.id},output:ga({sessionID:y.id,state:"running",summary:"Background task started",text:nk})}}if(s(L,"backgroundResult"),h)return yield*H(ue.id),L();let W=yield*zt.make(),D=C.cancel(y.id);function A(){W.fork(D)}return s(A,"onAbort"),yield*r.acquireUseRelease(r.sync(()=>{m.abort.addEventListener("abort",A)}),()=>r.gen(function*(){let _=yield*r.raceFirst(t.wait({id:y.id}).pipe(r.map(N=>N.info)),t.waitForPromotion(y.id));return _?.metadata?.background===!0?L():_?.status==="error"?yield*r.fail(new Error(_.error??"Task failed")):_?.status==="cancelled"?yield*r.fail(new Error("Task cancelled")):{title:f.description,metadata:M,output:ga({sessionID:y.id,state:"completed",text:_?.output??""})}}),(_,N)=>r.gen(function*(){wt.hasInterrupts(N)&&(yield*r.all([D,t.cancel(y.id)],{discard:!0}))}).pipe(r.ensuring(r.sync(()=>{m.abort.removeEventListener("abort",A)}))))});return{description:a.experimentalBackgroundSubagents?[Xl,tk].join(`
1182
1182
 
1183
- `):Xl,parameters:rk,jsonSchema:a.experimentalBackgroundSubagents?void 0:Mo.fromSchema(ok),execute:s((f,m)=>u(f,m).pipe(r.orDie),"execute")}}));var nh=`Create and maintain a structured task list for the current coding session. Tracks progress, organizes multi-step work, and surfaces status to the user.
1183
+ `):Xl,parameters:sk,jsonSchema:a.experimentalBackgroundSubagents?void 0:Mo.fromSchema(rk),execute:s((f,m)=>u(f,m).pipe(r.orDie),"execute")}}));var nh=`Create and maintain a structured task list for the current coding session. Tracks progress, organizes multi-step work, and surfaces status to the user.
1184
1184
 
1185
1185
  ## When to use
1186
1186
  Use proactively when:
@@ -1224,16 +1224,16 @@ Skip it:
1224
1224
  - "Run npm install and tell me what happened" -> one command
1225
1225
 
1226
1226
  When in doubt, use it.
1227
- `;var sk=c.Struct({todos:c.mutable(c.Array(Zn.Info)).annotate({description:"The updated todo list"})}),oh=Ke("todowrite",r.gen(function*(){let e=yield*Zn.Service;return{description:nh,parameters:sk,execute:s((t,n)=>r.gen(function*(){return yield*n.ask({permission:"todowrite",patterns:["*"],always:["*"],metadata:{}}),yield*e.update({sessionID:n.sessionID,todos:t.todos}),{title:`${t.todos.filter(o=>o.status!=="completed").length} todos`,output:JSON.stringify(t.todos,null,2),metadata:{todos:t.todos}}}),"execute")}}));var rh="Fetch a URL (http is upgraded to https) and return its content as markdown (default), text or html; very large pages may be summarized. Read-only. The result starts with a ready `Source:` line and its read time: a text that rests on the page ends with that line.\n";import{lookup as ik}from"node:dns/promises";import{isIP as sh}from"node:net";function ih(e){let[t,n]=e.split(".").map(o=>Number(o));return t===0||t===10||t===127||t===100&&n>=64&&n<=127||t===169&&n===254||t===172&&n>=16&&n<=31||t===192&&n===168||t===198&&(n===18||n===19)||t>=224}s(ih,"v4Blocked");function ak(e){let t=e.toLowerCase();if(t==="::"||t==="::1")return!0;let n=t.match(/^::ffff:(\d+\.\d+\.\d+\.\d+)$/);return n?ih(n[1]):!!(/^f[cd]/.test(t)||/^fe[89ab]/.test(t)||/^ff/.test(t))}s(ak,"v6Blocked");function ck(e){let t=sh(e);return t===4?ih(e):t===6?ak(e):!0}s(ck,"isNonPublicAddress");async function lk(e){let t=new URL(e),n=t.hostname.replace(/^\[|\]$/g,"");if(n==="localhost"||n.endsWith(".localhost")||n.endsWith(".local")||n.endsWith(".internal"))throw new Error(`webfetch reaches the public web only; ${t.host} is on this machine or its network`);let o=sh(n)?[n]:(await ik(n,{all:!0})).map(i=>i.address);if(o.length===0||o.some(ck))throw new Error(`webfetch reaches the public web only; ${t.host} resolves to an address on this machine or its network`)}s(lk,"assertPublicUrl");async function Zl(e,t,n=5){let o=e;for(let i=0;i<=n;i++){await lk(o);let a=await fetch(o,{...t,redirect:"manual"}),l=a.headers.get("location");if(a.status>=300&&a.status<400&&l){o=new URL(l,o).toString();continue}return a}throw new Error(`webfetch stopped after ${n} redirects`)}s(Zl,"fetchPublic");var ah=5*1024*1024,dk=30*1e3,uk=120*1e3,pk=c.Struct({url:c.String,format:c.Literals(["text","markdown","html"]).annotate({description:"Default markdown",default:"markdown"}).pipe(c.withDecodingDefault(r.succeed("markdown"))),timeout:c.optional(c.Number).annotate({description:"Seconds, max 120"})}),dh=Ke("webfetch",r.gen(function*(){return{description:rh,parameters:pk,execute:s((e,t)=>r.gen(function*(){if(!e.url.startsWith("http://")&&!e.url.startsWith("https://"))throw new Error("URL must start with http:// or https://");yield*t.ask({permission:"webfetch",patterns:[e.url],always:["*"],metadata:{url:e.url,format:e.format,timeout:e.timeout}});let n=Math.min((e.timeout??dk/1e3)*1e3,uk),o="*/*";switch(e.format){case"markdown":o="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":o="text/plain;q=1.0, text/markdown;q=0.9, text/html;q=0.8, */*;q=0.1";break;case"html":o="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:o="text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8"}let i={"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:o,"Accept-Language":"en-US,en;q=0.9"},a=AbortSignal.any([AbortSignal.timeout(n),...t.abort?[t.abort]:[]]),l=yield*r.promise(async()=>{let k=await Zl(e.url,{signal:a,headers:i});return k.status===403&&k.headers.get("cf-mitigated")==="challenge"?await Zl(e.url,{signal:a,headers:{...i,"User-Agent":"opencode"}}):k});if(!l.ok)throw new Error(`Request failed with status code: ${l.status}`);let u=l.headers.get("content-length");if(u&&parseInt(u)>ah)throw new Error("Response too large (exceeds 5MB limit)");let f=yield*r.promise(()=>l.arrayBuffer());if(f.byteLength>ah)throw new Error("Response too large (exceeds 5MB limit)");let m=l.headers.get("content-type")||"",p=m.split(";")[0]?.trim().toLowerCase()||"",h=`${e.url} (${m})`;if(Wu(p)){let k=Buffer.from(f).toString("base64");return{title:h,output:"Image fetched successfully",metadata:{},attachments:[{type:"file",mime:p,url:`data:${p};base64,${k}`}]}}let g=new TextDecoder().decode(f),I=m.includes("text/html"),T=l.url||e.url,v=I?fk(g):p.includes("markdown")?(/^#\s+(.+)$/m.exec(g.slice(0,2e3))?.[1]??"").trim().slice(0,200):"",P={status:l.status,finalUrl:T,...v?{title:v}:{}},d=mk(v,T,l.status);switch(e.format){case"markdown":return{output:`${d}
1227
+ `;var ik=c.Struct({todos:c.mutable(c.Array(Zn.Info)).annotate({description:"The updated todo list"})}),oh=Ke("todowrite",r.gen(function*(){let e=yield*Zn.Service;return{description:nh,parameters:ik,execute:s((t,n)=>r.gen(function*(){return yield*n.ask({permission:"todowrite",patterns:["*"],always:["*"],metadata:{}}),yield*e.update({sessionID:n.sessionID,todos:t.todos}),{title:`${t.todos.filter(o=>o.status!=="completed").length} todos`,output:JSON.stringify(t.todos,null,2),metadata:{todos:t.todos}}}),"execute")}}));var rh="Fetch a URL (http is upgraded to https) and return its content as markdown (default), text or html; very large pages may be summarized. Read-only. The result starts with a ready `Source:` line and its read time: a text that rests on the page ends with that line.\n";import{lookup as ak}from"node:dns/promises";import{isIP as sh}from"node:net";function ih(e){let[t,n]=e.split(".").map(o=>Number(o));return t===0||t===10||t===127||t===100&&n>=64&&n<=127||t===169&&n===254||t===172&&n>=16&&n<=31||t===192&&n===168||t===198&&(n===18||n===19)||t>=224}s(ih,"v4Blocked");function ck(e){let t=e.toLowerCase();if(t==="::"||t==="::1")return!0;let n=t.match(/^::ffff:(\d+\.\d+\.\d+\.\d+)$/);return n?ih(n[1]):!!(/^f[cd]/.test(t)||/^fe[89ab]/.test(t)||/^ff/.test(t))}s(ck,"v6Blocked");function lk(e){let t=sh(e);return t===4?ih(e):t===6?ck(e):!0}s(lk,"isNonPublicAddress");async function dk(e){let t=new URL(e),n=t.hostname.replace(/^\[|\]$/g,"");if(n==="localhost"||n.endsWith(".localhost")||n.endsWith(".local")||n.endsWith(".internal"))throw new Error(`webfetch reaches the public web only; ${t.host} is on this machine or its network`);let o=sh(n)?[n]:(await ak(n,{all:!0})).map(i=>i.address);if(o.length===0||o.some(lk))throw new Error(`webfetch reaches the public web only; ${t.host} resolves to an address on this machine or its network`)}s(dk,"assertPublicUrl");async function Zl(e,t,n=5){let o=e;for(let i=0;i<=n;i++){await dk(o);let a=await fetch(o,{...t,redirect:"manual"}),l=a.headers.get("location");if(a.status>=300&&a.status<400&&l){o=new URL(l,o).toString();continue}return a}throw new Error(`webfetch stopped after ${n} redirects`)}s(Zl,"fetchPublic");var ah=5*1024*1024,uk=30*1e3,pk=120*1e3,fk=c.Struct({url:c.String,format:c.Literals(["text","markdown","html"]).annotate({description:"Default markdown",default:"markdown"}).pipe(c.withDecodingDefault(r.succeed("markdown"))),timeout:c.optional(c.Number).annotate({description:"Seconds, max 120"})}),dh=Ke("webfetch",r.gen(function*(){return{description:rh,parameters:fk,execute:s((e,t)=>r.gen(function*(){if(!e.url.startsWith("http://")&&!e.url.startsWith("https://"))throw new Error("URL must start with http:// or https://");yield*t.ask({permission:"webfetch",patterns:[e.url],always:["*"],metadata:{url:e.url,format:e.format,timeout:e.timeout}});let n=Math.min((e.timeout??uk/1e3)*1e3,pk),o="*/*";switch(e.format){case"markdown":o="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":o="text/plain;q=1.0, text/markdown;q=0.9, text/html;q=0.8, */*;q=0.1";break;case"html":o="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:o="text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8"}let i={"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:o,"Accept-Language":"en-US,en;q=0.9"},a=AbortSignal.any([AbortSignal.timeout(n),...t.abort?[t.abort]:[]]),l=yield*r.promise(async()=>{let k=await Zl(e.url,{signal:a,headers:i});return k.status===403&&k.headers.get("cf-mitigated")==="challenge"?await Zl(e.url,{signal:a,headers:{...i,"User-Agent":"opencode"}}):k});if(!l.ok)throw new Error(`Request failed with status code: ${l.status}`);let u=l.headers.get("content-length");if(u&&parseInt(u)>ah)throw new Error("Response too large (exceeds 5MB limit)");let f=yield*r.promise(()=>l.arrayBuffer());if(f.byteLength>ah)throw new Error("Response too large (exceeds 5MB limit)");let m=l.headers.get("content-type")||"",p=m.split(";")[0]?.trim().toLowerCase()||"",h=`${e.url} (${m})`;if(Wu(p)){let k=Buffer.from(f).toString("base64");return{title:h,output:"Image fetched successfully",metadata:{},attachments:[{type:"file",mime:p,url:`data:${p};base64,${k}`}]}}let g=new TextDecoder().decode(f),I=m.includes("text/html"),T=l.url||e.url,v=I?mk(g):p.includes("markdown")?(/^#\s+(.+)$/m.exec(g.slice(0,2e3))?.[1]??"").trim().slice(0,200):"",P={status:l.status,finalUrl:T,...v?{title:v}:{}},d=hk(v,T,l.status);switch(e.format){case"markdown":return{output:`${d}
1228
1228
 
1229
- ${I?yk(g):g}`,title:h,metadata:P};case"text":return{output:`${d}
1229
+ ${I?bk(g):g}`,title:h,metadata:P};case"text":return{output:`${d}
1230
1230
 
1231
- ${I?uh(g):g}`,title:h,metadata:P};default:return{output:g,title:h,metadata:P}}}).pipe(r.orDie),"execute")}}));function fk(e){let t=/<title\b[^>]*>([\s\S]*?)<\/title\s*>/i.exec(e);return t?uh(t[1]).replace(/\s+/g," ").trim().slice(0,200):""}s(fk,"titleOfHTML");function mk(e,t,n,o=new Date){return`Source: [${(e||t).replace(/[\[\]]/g,"")}](${t})
1232
- Read: ${o.toISOString().slice(0,16).replace("T"," ")} UTC, HTTP ${n}`}s(mk,"sourceHead");var hk=/<(script|style|noscript|iframe|object|embed|template|svg|head)\b[^>]*>[\s\S]*?<\/\1\s*>/gi,gk=/<\/?(p|div|br|hr|li|ul|ol|tr|table|thead|tbody|h[1-6]|section|article|header|footer|nav|main|aside|pre|blockquote|dl|dt|dd|figure|figcaption|form|title)\b[^>]*>/gi,ch={amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:" ",ndash:"\u2013",mdash:"\u2014",hellip:"\u2026",copy:"\xA9",reg:"\xAE",trade:"\u2122",euro:"\u20AC",pound:"\xA3",laquo:"\xAB",raquo:"\xBB",middot:"\xB7",bull:"\u2022",lsquo:"\u2018",rsquo:"\u2019",ldquo:"\u201C",rdquo:"\u201D",times:"\xD7",deg:"\xB0",rarr:"\u2192",larr:"\u2190"};function lh(e,t){return Number.isInteger(e)&&e>0&&e<=1114111&&!(e>=55296&&e<=57343)?String.fromCodePoint(e):t}s(lh,"codePoint");function uh(e){return e.replace(/<!--[\s\S]*?-->/g,"").replace(hk," ").replace(/<t[dh]\b[^>]*>/gi," ").replace(gk,`
1231
+ ${I?uh(g):g}`,title:h,metadata:P};default:return{output:g,title:h,metadata:P}}}).pipe(r.orDie),"execute")}}));function mk(e){let t=/<title\b[^>]*>([\s\S]*?)<\/title\s*>/i.exec(e);return t?uh(t[1]).replace(/\s+/g," ").trim().slice(0,200):""}s(mk,"titleOfHTML");function hk(e,t,n,o=new Date){return`Source: [${(e||t).replace(/[\[\]]/g,"")}](${t})
1232
+ Read: ${o.toISOString().slice(0,16).replace("T"," ")} UTC, HTTP ${n}`}s(hk,"sourceHead");var gk=/<(script|style|noscript|iframe|object|embed|template|svg|head)\b[^>]*>[\s\S]*?<\/\1\s*>/gi,yk=/<\/?(p|div|br|hr|li|ul|ol|tr|table|thead|tbody|h[1-6]|section|article|header|footer|nav|main|aside|pre|blockquote|dl|dt|dd|figure|figcaption|form|title)\b[^>]*>/gi,ch={amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:" ",ndash:"\u2013",mdash:"\u2014",hellip:"\u2026",copy:"\xA9",reg:"\xAE",trade:"\u2122",euro:"\u20AC",pound:"\xA3",laquo:"\xAB",raquo:"\xBB",middot:"\xB7",bull:"\u2022",lsquo:"\u2018",rsquo:"\u2019",ldquo:"\u201C",rdquo:"\u201D",times:"\xD7",deg:"\xB0",rarr:"\u2192",larr:"\u2190"};function lh(e,t){return Number.isInteger(e)&&e>0&&e<=1114111&&!(e>=55296&&e<=57343)?String.fromCodePoint(e):t}s(lh,"codePoint");function uh(e){return e.replace(/<!--[\s\S]*?-->/g,"").replace(gk," ").replace(/<t[dh]\b[^>]*>/gi," ").replace(yk,`
1233
1233
  `).replace(/<[^>]*>/g,"").replace(/&(?:#(\d+)|#x([0-9a-f]+)|([a-z][a-z0-9]*));/gi,(t,n,o,i)=>n?lh(Number(n),t):o?lh(parseInt(o,16),t):ch[i]??ch[i.toLowerCase()]??t).replace(/[ \t\f\v ]+/g," ").replace(/ ?\n ?/g,`
1234
1234
  `).replace(/\n{3,}/g,`
1235
1235
 
1236
- `).trim()}s(uh,"extractTextFromHTML");function yk(e){let t=new Nu({headingStyle:"atx",hr:"---",bulletListMarker:"-",codeBlockStyle:"fenced",emDelimiter:"*"});return t.remove(["script","style","meta","link"]),t.turndown(e)}s(yk,"convertHTMLToMarkdown");import*as Oo from"path";var ph=`Writes a file to the local filesystem.
1236
+ `).trim()}s(uh,"extractTextFromHTML");function bk(e){let t=new Nu({headingStyle:"atx",hr:"---",bulletListMarker:"-",codeBlockStyle:"fenced",emDelimiter:"*"});return t.remove(["script","style","meta","link"]),t.turndown(e)}s(bk,"convertHTMLToMarkdown");import*as Oo from"path";var ph=`Writes a file to the local filesystem.
1237
1237
 
1238
1238
  Usage:
1239
1239
  - This tool will overwrite the existing file if there is one at the provided path.
@@ -1241,22 +1241,22 @@ Usage:
1241
1241
  - ALWAYS prefer editing existing files in the codebase. NEVER write new files unless explicitly required.
1242
1242
  - NEVER proactively create documentation files (*.md) or README files. Only create documentation files if explicitly requested by the User.
1243
1243
  - Only use emojis if the user explicitly requests it. Avoid writing emojis to files unless asked.
1244
- `;var bk=5,wk=c.Struct({content:c.String.annotate({description:"The content to write to the file"}),filePath:c.String.annotate({description:"The absolute path to the file to write (must be absolute, not relative)"})}),ed=Ke("write",r.gen(function*(){let e=yield*mt.Service,t=yield*Me.Service,n=yield*Ee.Service,o=yield*Jt.Service;return{description:ph,parameters:wk,execute:s((i,a)=>r.gen(function*(){let l=yield*V.context,u=Oo.isAbsolute(i.filePath)?i.filePath:Oo.join(l.directory,i.filePath);yield*$t(a,u);let f=yield*t.existsSafe(u),m=f?yield*ao(t,u):{bom:!1,text:""},p=pn(i.content),h=m.bom||p.bom,g=m.text,I=p.text,T=Fn(Dn(u,u,g,I));yield*a.ask({permission:"edit",patterns:[Oo.relative(l.worktree,u)],always:["*"],metadata:{filepath:u,diff:T}}),yield*t.writeWithDirs(u,Kt(I,h)),(yield*o.file(u))&&(yield*Ao(t,u,h)),yield*n.publish(ho.Event.Edited,{file:u}),yield*n.publish(_n.Event.Updated,{file:u,event:f?"change":"add"});let v="Wrote file successfully.";yield*e.touchFile(u,"document");let P=yield*e.diagnostics(),d=Me.normalizePath(u),k=0;for(let[y,x]of Object.entries(P)){let E=y===d;if(!E&&k>=bk)continue;let w=mt.Diagnostic.report(E?u:y,x);if(w){if(E){v+=`
1244
+ `;var wk=5,vk=c.Struct({content:c.String.annotate({description:"The content to write to the file"}),filePath:c.String.annotate({description:"The absolute path to the file to write (must be absolute, not relative)"})}),ed=Ke("write",r.gen(function*(){let e=yield*mt.Service,t=yield*Me.Service,n=yield*Ee.Service,o=yield*Jt.Service;return{description:ph,parameters:vk,execute:s((i,a)=>r.gen(function*(){let l=yield*V.context,u=Oo.isAbsolute(i.filePath)?i.filePath:Oo.join(l.directory,i.filePath);yield*$t(a,u);let f=yield*t.existsSafe(u),m=f?yield*ao(t,u):{bom:!1,text:""},p=pn(i.content),h=m.bom||p.bom,g=m.text,I=p.text,T=Fn(Dn(u,u,g,I));yield*a.ask({permission:"edit",patterns:[Oo.relative(l.worktree,u)],always:["*"],metadata:{filepath:u,diff:T}}),yield*t.writeWithDirs(u,Kt(I,h)),(yield*o.file(u))&&(yield*Ao(t,u,h)),yield*n.publish(ho.Event.Edited,{file:u}),yield*n.publish(_n.Event.Updated,{file:u,event:f?"change":"add"});let v="Wrote file successfully.";yield*e.touchFile(u,"document");let P=yield*e.diagnostics(),d=Me.normalizePath(u),k=0;for(let[y,S]of Object.entries(P)){let E=y===d;if(!E&&k>=wk)continue;let w=mt.Diagnostic.report(E?u:y,S);if(w){if(E){v+=`
1245
1245
 
1246
1246
  LSP errors detected in this file, please fix:
1247
1247
  ${w}`;continue}k++,v+=`
1248
1248
 
1249
1249
  LSP errors detected in other files:
1250
- ${w}`}}return{title:Oo.relative(l.worktree,u),metadata:{diagnostics:P,filepath:u,exists:f},output:v}}).pipe(r.orDie),"execute")}}));var vk=c.Struct({tool:c.String,error:c.String}),fh=Ke("invalid",r.succeed({description:"Do not use",parameters:vk,execute:s(e=>r.succeed({title:"Invalid Tool",output:`The arguments provided to the tool are invalid: ${e.error}`,metadata:{}}),"execute")}));import hh from"path";var mh=`Load a specialized skill when the task at hand matches one of the skills listed in the system prompt.
1250
+ ${w}`}}return{title:Oo.relative(l.worktree,u),metadata:{diagnostics:P,filepath:u,exists:f},output:v}}).pipe(r.orDie),"execute")}}));var xk=c.Struct({tool:c.String,error:c.String}),fh=Ke("invalid",r.succeed({description:"Do not use",parameters:xk,execute:s(e=>r.succeed({title:"Invalid Tool",output:`The arguments provided to the tool are invalid: ${e.error}`,metadata:{}}),"execute")}));import hh from"path";var mh=`Load a specialized skill when the task at hand matches one of the skills listed in the system prompt.
1251
1251
 
1252
1252
  Use this tool to inject the skill's instructions and resources into current conversation. The output may contain detailed workflow guidance as well as references to scripts, files, etc in the same directory as the skill.
1253
1253
 
1254
1254
  The skill name must match one of the skills listed in your system prompt.
1255
- `;var xk=c.Struct({name:c.String.annotate({description:"The name of the skill from available_skills"})}),gh=Ke("skill",r.gen(function*(){let e=yield*Xn.Service,t=yield*Hn.Service;return{description:mh,parameters:xk,execute:s((n,o)=>r.gen(function*(){let i=yield*e.require(n.name).pipe(r.catchTag("Skill.NotFoundError",f=>r.die(new Error(f.message))));yield*o.ask({permission:"skill",patterns:[n.name],always:[n.name],metadata:{}});let a=hh.dirname(i.location),l=a,u=yield*t.find({cwd:a,pattern:"!**/SKILL.md",hidden:!0,follow:!1,signal:o.abort,limit:10});return{title:`Loaded skill: ${i.name}`,output:[`<skill_content name="${i.name}">`,`# Skill: ${i.name}`,"",i.content.trim(),"",`Base directory for this skill: ${l}`,"Relative paths in this skill (e.g., scripts/, reference/) are relative to this base directory.","Note: file list is sampled.","","<skill_files>",u.map(f=>`<file>${hh.resolve(a,f.path)}</file>`).join(`
1255
+ `;var Sk=c.Struct({name:c.String.annotate({description:"The name of the skill from available_skills"})}),gh=Ke("skill",r.gen(function*(){let e=yield*Xn.Service,t=yield*Hn.Service;return{description:mh,parameters:Sk,execute:s((n,o)=>r.gen(function*(){let i=yield*e.require(n.name).pipe(r.catchTag("Skill.NotFoundError",f=>r.die(new Error(f.message))));yield*o.ask({permission:"skill",patterns:[n.name],always:[n.name],metadata:{}});let a=hh.dirname(i.location),l=a,u=yield*t.find({cwd:a,pattern:"!**/SKILL.md",hidden:!0,follow:!1,signal:o.abort,limit:10});return{title:`Loaded skill: ${i.name}`,output:[`<skill_content name="${i.name}">`,`# Skill: ${i.name}`,"",i.content.trim(),"",`Base directory for this skill: ${l}`,"Relative paths in this skill (e.g., scripts/, reference/) are relative to this base directory.","Note: file list is sampled.","","<skill_files>",u.map(f=>`<file>${hh.resolve(a,f.path)}</file>`).join(`
1256
1256
  `),"</skill_files>","</skill_content>"].join(`
1257
1257
  `),metadata:{name:i.name,dir:a}}}).pipe(r.orDie),"execute")}}));var yh=`Search the web and return summaries of the most relevant pages: current information beyond your knowledge cutoff. The current year is {{year}}: use it when searching for recent information. Summaries are not pages read: say which claims rest only on them.
1258
- `;var bh={exa:"websearch-exa",tavily:"websearch-tavily"},Sk="https://mcp.exa.ai/mcp",Ik="https://api.tavily.com/search",vh=8,kk=1e4,Dk=25e3,xh=6e4,Sh=10*6e4,td={"exa-key":"Exa",tavily:"Tavily",exa:"Exa, no key"},Lo=class extends Error{constructor(n){super("rate-limited");this.waitMs=n}waitMs;static{s(this,"RateLimited")}},Rs=class extends Error{constructor(n){super(`key refused (HTTP ${n})`);this.status=n}status;static{s(this,"KeyRefused")}},ya=new Map;function Ih(e){let t=Number(e.headers.get("retry-after"));return Number.isFinite(t)&&t>0?Math.min(t*1e3,Sh):xh}s(Ih,"waitFrom");function Ek(e){let t=[],n=/^Title: (.*)\r?\nURL: (\S+)/gm;for(let o=n.exec(e);o;o=n.exec(e))t.push({title:o[1].trim(),url:o[2].trim()});return t}s(Ek,"hitsIn");async function wh(e,t,n){let o=await fetch(Sk,{method:"POST",headers:{accept:"application/json, text/event-stream","content-type":"application/json",...t?{"x-api-key":t}:{}},body:JSON.stringify({jsonrpc:"2.0",id:1,method:"tools/call",params:{name:"web_search_exa",arguments:{query:e.query,type:e.type||"auto",numResults:e.numResults||vh,livecrawl:e.livecrawl||"fallback",contextMaxCharacters:e.contextMaxCharacters}}}),signal:n});if(o.status===429)throw new Lo(Ih(o));if(t&&(o.status===401||o.status===403))throw new Rs(o.status);if(!o.ok)throw new Error(`Search error (${o.status}): ${await o.text()}`);for(let i of(await o.text()).split(`
1259
- `)){if(!i.startsWith("data: "))continue;let a=JSON.parse(i.substring(6));if(a.result?._meta?.["ai.exa/rateLimited"])throw new Lo(xh);if(a.result?.isError)throw new Error(`Search failed: ${a.result.content?.[0]?.text??"the search service reported an error"}`);let l=a.result?.content?.[0]?.text;if(l)return l}return""}s(wh,"searchExa");async function Tk(e,t,n){let o=await fetch(Ik,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${t}`},body:JSON.stringify({query:e.query,max_results:Math.min(e.numResults||vh,20),search_depth:e.type==="fast"?"fast":"basic",include_published_date:!0}),signal:n});if(o.status===429)throw new Lo(Ih(o));if(o.status===432||o.status===433)throw new Lo(Sh);if(o.status===401||o.status===403)throw new Rs(o.status);if(!o.ok)throw new Error(`Search error (${o.status}): ${await o.text()}`);let i=await o.json(),a=e.contextMaxCharacters||kk,l=(i.results??[]).filter(f=>f.url),u=Math.max(200,Math.floor(a/Math.max(l.length,1)));return l.map(f=>`Title: ${(f.title??"").trim()||f.url}
1258
+ `;var bh={exa:"websearch-exa",tavily:"websearch-tavily"},Ik="https://mcp.exa.ai/mcp",kk="https://api.tavily.com/search",vh=8,Dk=1e4,Ek=25e3,xh=6e4,Sh=10*6e4,td={"exa-key":"Exa",tavily:"Tavily",exa:"Exa, no key"},Lo=class extends Error{constructor(n){super("rate-limited");this.waitMs=n}waitMs;static{s(this,"RateLimited")}},Rs=class extends Error{constructor(n){super(`key refused (HTTP ${n})`);this.status=n}status;static{s(this,"KeyRefused")}},ya=new Map;function Ih(e){let t=Number(e.headers.get("retry-after"));return Number.isFinite(t)&&t>0?Math.min(t*1e3,Sh):xh}s(Ih,"waitFrom");function Tk(e){let t=[],n=/^Title: (.*)\r?\nURL: (\S+)/gm;for(let o=n.exec(e);o;o=n.exec(e))t.push({title:o[1].trim(),url:o[2].trim()});return t}s(Tk,"hitsIn");async function wh(e,t,n){let o=await fetch(Ik,{method:"POST",headers:{accept:"application/json, text/event-stream","content-type":"application/json",...t?{"x-api-key":t}:{}},body:JSON.stringify({jsonrpc:"2.0",id:1,method:"tools/call",params:{name:"web_search_exa",arguments:{query:e.query,type:e.type||"auto",numResults:e.numResults||vh,livecrawl:e.livecrawl||"fallback",contextMaxCharacters:e.contextMaxCharacters}}}),signal:n});if(o.status===429)throw new Lo(Ih(o));if(t&&(o.status===401||o.status===403))throw new Rs(o.status);if(!o.ok)throw new Error(`Search error (${o.status}): ${await o.text()}`);for(let i of(await o.text()).split(`
1259
+ `)){if(!i.startsWith("data: "))continue;let a=JSON.parse(i.substring(6));if(a.result?._meta?.["ai.exa/rateLimited"])throw new Lo(xh);if(a.result?.isError)throw new Error(`Search failed: ${a.result.content?.[0]?.text??"the search service reported an error"}`);let l=a.result?.content?.[0]?.text;if(l)return l}return""}s(wh,"searchExa");async function Pk(e,t,n){let o=await fetch(kk,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${t}`},body:JSON.stringify({query:e.query,max_results:Math.min(e.numResults||vh,20),search_depth:e.type==="fast"?"fast":"basic",include_published_date:!0}),signal:n});if(o.status===429)throw new Lo(Ih(o));if(o.status===432||o.status===433)throw new Lo(Sh);if(o.status===401||o.status===403)throw new Rs(o.status);if(!o.ok)throw new Error(`Search error (${o.status}): ${await o.text()}`);let i=await o.json(),a=e.contextMaxCharacters||Dk,l=(i.results??[]).filter(f=>f.url),u=Math.max(200,Math.floor(a/Math.max(l.length,1)));return l.map(f=>`Title: ${(f.title??"").trim()||f.url}
1260
1260
  URL: ${f.url}
1261
1261
  Published: ${f.published_date||"N/A"}
1262
1262
  Author: N/A
@@ -1265,11 +1265,11 @@ ${(f.content??"").trim().slice(0,u)}`).join(`
1265
1265
 
1266
1266
  ---
1267
1267
 
1268
- `)}s(Tk,"searchTavily");function Pk(e){let t=Math.max(1,Math.ceil(e/1e3));return t<90?`about ${t} seconds`:`about ${Math.ceil(t/60)} minutes`}s(Pk,"waitWords");async function Rk(e,t,n,o=Date.now){let i={exa:await n(bh.exa),tavily:await n(bh.tavily)},a=[...i.exa?[{backend:"exa-key",run:s(g=>wh(e,i.exa,g),"run")}]:[],...i.tavily?[{backend:"tavily",run:s(g=>Tk(e,i.tavily,g),"run")}]:[],{backend:"exa",run:s(g=>wh(e,void 0,g),"run")}],l=[i.exa,i.tavily].filter(g=>!!g),u=s(g=>l.reduce((I,T)=>I.split(T).join("[key]"),g),"clean"),f=[],m,p=0;for(let{backend:g,run:I}of a){if((ya.get(g)??0)>o()){p++;continue}let T=AbortSignal.any([AbortSignal.timeout(Dk),t]);try{let v=await I(T);return ya.delete(g),{text:v,backend:g,refused:f}}catch(v){if(t.aborted)throw v;v instanceof Lo?(ya.set(g,o()+v.waitMs),p++):v instanceof Rs?f.push(`${td[g]} (HTTP ${v.status})`):v instanceof Error&&(v.name==="AbortError"||v.name==="TimeoutError")?m=new Error(`Search request timed out (${td[g]})`):m=new Error(u(v instanceof Error?v.message:String(v)))}}let h=f.length?` The search key in Settings was refused: ${f.join(", ")}.`:"";if(p>0&&!m){let g=Math.min(...a.map(I=>ya.get(I.backend)??1/0).filter(I=>I>o()))-o();throw new Error(`Search is rate-limited for the moment. Nothing was searched. Search again in ${Pk(g)}, or open a page you already know.`+(l.length?"":" Free search allows a few searches a minute; a search key of the user's own (Settings, Providers) lifts the limit.")+h)}throw new Error(`${m?.message??"Search failed"}${h}`)}s(Rk,"runSearch");function Ck(e,t){let n=Ek(e.text),o=e.refused.length?`
1268
+ `)}s(Pk,"searchTavily");function Rk(e){let t=Math.max(1,Math.ceil(e/1e3));return t<90?`about ${t} seconds`:`about ${Math.ceil(t/60)} minutes`}s(Rk,"waitWords");async function Ck(e,t,n,o=Date.now){let i={exa:await n(bh.exa),tavily:await n(bh.tavily)},a=[...i.exa?[{backend:"exa-key",run:s(g=>wh(e,i.exa,g),"run")}]:[],...i.tavily?[{backend:"tavily",run:s(g=>Pk(e,i.tavily,g),"run")}]:[],{backend:"exa",run:s(g=>wh(e,void 0,g),"run")}],l=[i.exa,i.tavily].filter(g=>!!g),u=s(g=>l.reduce((I,T)=>I.split(T).join("[key]"),g),"clean"),f=[],m,p=0;for(let{backend:g,run:I}of a){if((ya.get(g)??0)>o()){p++;continue}let T=AbortSignal.any([AbortSignal.timeout(Ek),t]);try{let v=await I(T);return ya.delete(g),{text:v,backend:g,refused:f}}catch(v){if(t.aborted)throw v;v instanceof Lo?(ya.set(g,o()+v.waitMs),p++):v instanceof Rs?f.push(`${td[g]} (HTTP ${v.status})`):v instanceof Error&&(v.name==="AbortError"||v.name==="TimeoutError")?m=new Error(`Search request timed out (${td[g]})`):m=new Error(u(v instanceof Error?v.message:String(v)))}}let h=f.length?` The search key in Settings was refused: ${f.join(", ")}.`:"";if(p>0&&!m){let g=Math.min(...a.map(I=>ya.get(I.backend)??1/0).filter(I=>I>o()))-o();throw new Error(`Search is rate-limited for the moment. Nothing was searched. Search again in ${Rk(g)}, or open a page you already know.`+(l.length?"":" Free search allows a few searches a minute; a search key of the user's own (Settings, Providers) lifts the limit.")+h)}throw new Error(`${m?.message??"Search failed"}${h}`)}s(Ck,"runSearch");function Ak(e,t){let n=Tk(e.text),o=e.refused.length?`
1269
1269
 
1270
1270
  Note for the user: the search key in Settings was refused (${e.refused.join(", ")}); this search ran without it.`:"",i=`Search results (${td[e.backend]}, ${new Date().toISOString().slice(0,16).replace("T"," ")} UTC). These are summaries; a page is read only when you open it.`;return{output:n.length||e.text?`${i}
1271
1271
 
1272
- ${e.text}${o}`:`No search results found. Please try a different query.${o}`,title:`Web search: ${t}`,metadata:{backend:e.backend,resultCount:n.length,hits:n.slice(0,8)}}}s(Ck,"searchResult");var Ak=c.Struct({query:c.String.annotate({description:"Websearch query"}),numResults:c.optional(c.Number).annotate({description:"Default 8"}),livecrawl:c.optional(c.Literals(["fallback","preferred"])).annotate({description:"Live crawling as a fallback for uncached pages (default) or preferred"}),type:c.optional(c.Literals(["auto","fast","deep"])).annotate({description:"Default auto"}),contextMaxCharacters:c.optional(c.Number).annotate({description:"Default 10000"})});var nd=Ke("websearch",r.gen(function*(){let e=yield*Xt.Service,t=s(n=>r.runPromise(e.get(n).pipe(r.map(o=>o?.type==="api"&&o.key.trim()?o.key.trim():void 0),r.orElseSucceed(()=>{}))),"keyOf");return{get description(){return yh.replace("{{year}}",new Date().getFullYear().toString())},parameters:Ak,execute:s((n,o)=>r.gen(function*(){yield*o.ask({permission:"websearch",patterns:[n.query],always:["*"],metadata:{query:n.query,numResults:n.numResults,livecrawl:n.livecrawl,type:n.type,contextMaxCharacters:n.contextMaxCharacters}});let i=yield*r.promise(()=>Rk(n,o.abort,t));return Ck(i,n.query)}).pipe(r.orDie),"execute")}}));import od from"path";var kh=`Interact with Language Server Protocol (LSP) servers to get code intelligence features.
1272
+ ${e.text}${o}`:`No search results found. Please try a different query.${o}`,title:`Web search: ${t}`,metadata:{backend:e.backend,resultCount:n.length,hits:n.slice(0,8)}}}s(Ak,"searchResult");var Mk=c.Struct({query:c.String.annotate({description:"Websearch query"}),numResults:c.optional(c.Number).annotate({description:"Default 8"}),livecrawl:c.optional(c.Literals(["fallback","preferred"])).annotate({description:"Live crawling as a fallback for uncached pages (default) or preferred"}),type:c.optional(c.Literals(["auto","fast","deep"])).annotate({description:"Default auto"}),contextMaxCharacters:c.optional(c.Number).annotate({description:"Default 10000"})});var nd=Ke("websearch",r.gen(function*(){let e=yield*Xt.Service,t=s(n=>r.runPromise(e.get(n).pipe(r.map(o=>o?.type==="api"&&o.key.trim()?o.key.trim():void 0),r.orElseSucceed(()=>{}))),"keyOf");return{get description(){return yh.replace("{{year}}",new Date().getFullYear().toString())},parameters:Mk,execute:s((n,o)=>r.gen(function*(){yield*o.ask({permission:"websearch",patterns:[n.query],always:["*"],metadata:{query:n.query,numResults:n.numResults,livecrawl:n.livecrawl,type:n.type,contextMaxCharacters:n.contextMaxCharacters}});let i=yield*r.promise(()=>Ck(n,o.abort,t));return Ak(i,n.query)}).pipe(r.orDie),"execute")}}));import od from"path";var kh=`Interact with Language Server Protocol (LSP) servers to get code intelligence features.
1273
1273
 
1274
1274
  Supported operations:
1275
1275
  - goToDefinition: Find where a symbol is defined
@@ -1293,20 +1293,20 @@ workspaceSymbol also accepts:
1293
1293
  For workspaceSymbol, filePath is not sent in the LSP workspace/symbol request. It is used by opencode to select and start the matching LSP server.
1294
1294
 
1295
1295
  Note: LSP servers must be configured for the file type. If no server is available, an error will be returned.
1296
- `;import{pathToFileURL as Mk}from"url";var _k=["goToDefinition","findReferences","hover","documentSymbol","workspaceSymbol","goToImplementation","prepareCallHierarchy","incomingCalls","outgoingCalls"],Ok=c.Struct({operation:c.Literals(_k).annotate({description:"The LSP operation to perform"}),filePath:c.String.annotate({description:"The absolute or relative path to the file"}),line:c.Int.check(c.isGreaterThanOrEqualTo(1)).annotate({description:"The line number (1-based, as shown in editors)"}),character:c.Int.check(c.isGreaterThanOrEqualTo(1)).annotate({description:"The character offset (1-based, as shown in editors)"}),query:c.optional(c.String).annotate({description:"Search query for workspaceSymbol. Empty string requests all symbols."})}),Dh=Ke("lsp",r.gen(function*(){let e=yield*mt.Service,t=yield*Me.Service;return{description:kh,parameters:Ok,execute:s((n,o)=>r.gen(function*(){let i=yield*V.context,a=od.isAbsolute(n.filePath)?n.filePath:od.join(i.directory,n.filePath);yield*$t(o,a);let l=n.operation==="workspaceSymbol"?{operation:n.operation}:n.operation==="documentSymbol"?{operation:n.operation,filePath:a}:{operation:n.operation,filePath:a,line:n.line,character:n.character};yield*o.ask({permission:"lsp",patterns:["*"],always:["*"],metadata:l});let u=Mk(a).href,f={file:a,line:n.line-1,character:n.character-1},m=od.relative(i.worktree,a),p=n.operation==="workspaceSymbol"?"":n.operation==="documentSymbol"?m:`${m}:${n.line}:${n.character}`,h=p?`${n.operation} ${p}`:n.operation;if(!(yield*t.existsSafe(a)))throw new Error(`File not found: ${a}`);if(!(yield*e.hasClients(a)))throw new Error("No LSP server available for this file type.");yield*e.touchFile(a,"document");let T=yield*(()=>{switch(n.operation){case"goToDefinition":return e.definition(f);case"findReferences":return e.references(f);case"hover":return e.hover(f);case"documentSymbol":return e.documentSymbol(u);case"workspaceSymbol":return e.workspaceSymbol(n.query??"");case"goToImplementation":return e.implementation(f);case"prepareCallHierarchy":return e.prepareCallHierarchy(f);case"incomingCalls":return e.incomingCalls(f);case"outgoingCalls":return e.outgoingCalls(f)}})();return{title:h,metadata:{result:T},output:T.length===0?`No results found for ${n.operation}`:JSON.stringify(T,null,2)}}).pipe(r.orDie),"execute")}}));import*as Tn from"path";var Nr={};fe(Nr,{ApplyPatchError:()=>Th,MaybeApplyPatch:()=>Ph,MaybeApplyPatchVerified:()=>Rh,Patch:()=>Nr,PatchSchema:()=>Lk,applyHunksToFiles:()=>Ah,applyPatch:()=>Wk,deriveNewContentsFromChunks:()=>sd,maybeParseApplyPatch:()=>Ch,maybeParseApplyPatchVerified:()=>Vk,parsePatch:()=>Cs});import*as Lr from"path";var Lk=c.Struct({patchText:c.String.annotate({description:"The full patch text that describes all changes to be made"})}),Th=(i=>(i.ParseError="ParseError",i.IoError="IoError",i.ComputeReplacements="ComputeReplacements",i.ImplicitInvocation="ImplicitInvocation",i))(Th||{}),Ph=(i=>(i.Body="Body",i.ShellParseError="ShellParseError",i.PatchParseError="PatchParseError",i.NotApplyPatch="NotApplyPatch",i))(Ph||{}),Rh=(i=>(i.Body="Body",i.ShellParseError="ShellParseError",i.CorrectnessError="CorrectnessError",i.NotApplyPatch="NotApplyPatch",i))(Rh||{});function Nk(e,t){let n=e[t];if(n.startsWith("*** Add File:")){let o=n.slice(13).trim();return o?{filePath:o,nextIdx:t+1}:null}if(n.startsWith("*** Delete File:")){let o=n.slice(16).trim();return o?{filePath:o,nextIdx:t+1}:null}if(n.startsWith("*** Update File:")){let o=n.slice(16).trim(),i,a=t+1;return a<e.length&&e[a].startsWith("*** Move to:")&&(i=e[a].slice(12).trim(),a++),o?{filePath:o,movePath:i,nextIdx:a}:null}return null}s(Nk,"parsePatchHeader");function jk(e,t){let n=[],o=t;for(;o<e.length&&!e[o].startsWith("***");)if(e[o].startsWith("@@")){let i=e[o].substring(2).trim();o++;let a=[],l=[],u=!1;for(;o<e.length&&!e[o].startsWith("@@")&&!e[o].startsWith("***");){let f=e[o];if(f==="*** End of File"){u=!0,o++;break}if(f.startsWith(" ")){let m=f.substring(1);a.push(m),l.push(m)}else f.startsWith("-")?a.push(f.substring(1)):f.startsWith("+")&&l.push(f.substring(1));o++}n.push({old_lines:a,new_lines:l,change_context:i||void 0,is_end_of_file:u||void 0})}else o++;return{chunks:n,nextIdx:o}}s(jk,"parseUpdateFileChunks");function Uk(e,t){let n="",o=t;for(;o<e.length&&!e[o].startsWith("***");)e[o].startsWith("+")&&(n+=e[o].substring(1)+`
1296
+ `;import{pathToFileURL as _k}from"url";var Ok=["goToDefinition","findReferences","hover","documentSymbol","workspaceSymbol","goToImplementation","prepareCallHierarchy","incomingCalls","outgoingCalls"],Lk=c.Struct({operation:c.Literals(Ok).annotate({description:"The LSP operation to perform"}),filePath:c.String.annotate({description:"The absolute or relative path to the file"}),line:c.Int.check(c.isGreaterThanOrEqualTo(1)).annotate({description:"The line number (1-based, as shown in editors)"}),character:c.Int.check(c.isGreaterThanOrEqualTo(1)).annotate({description:"The character offset (1-based, as shown in editors)"}),query:c.optional(c.String).annotate({description:"Search query for workspaceSymbol. Empty string requests all symbols."})}),Dh=Ke("lsp",r.gen(function*(){let e=yield*mt.Service,t=yield*Me.Service;return{description:kh,parameters:Lk,execute:s((n,o)=>r.gen(function*(){let i=yield*V.context,a=od.isAbsolute(n.filePath)?n.filePath:od.join(i.directory,n.filePath);yield*$t(o,a);let l=n.operation==="workspaceSymbol"?{operation:n.operation}:n.operation==="documentSymbol"?{operation:n.operation,filePath:a}:{operation:n.operation,filePath:a,line:n.line,character:n.character};yield*o.ask({permission:"lsp",patterns:["*"],always:["*"],metadata:l});let u=_k(a).href,f={file:a,line:n.line-1,character:n.character-1},m=od.relative(i.worktree,a),p=n.operation==="workspaceSymbol"?"":n.operation==="documentSymbol"?m:`${m}:${n.line}:${n.character}`,h=p?`${n.operation} ${p}`:n.operation;if(!(yield*t.existsSafe(a)))throw new Error(`File not found: ${a}`);if(!(yield*e.hasClients(a)))throw new Error("No LSP server available for this file type.");yield*e.touchFile(a,"document");let T=yield*(()=>{switch(n.operation){case"goToDefinition":return e.definition(f);case"findReferences":return e.references(f);case"hover":return e.hover(f);case"documentSymbol":return e.documentSymbol(u);case"workspaceSymbol":return e.workspaceSymbol(n.query??"");case"goToImplementation":return e.implementation(f);case"prepareCallHierarchy":return e.prepareCallHierarchy(f);case"incomingCalls":return e.incomingCalls(f);case"outgoingCalls":return e.outgoingCalls(f)}})();return{title:h,metadata:{result:T},output:T.length===0?`No results found for ${n.operation}`:JSON.stringify(T,null,2)}}).pipe(r.orDie),"execute")}}));import*as Tn from"path";var Nr={};fe(Nr,{ApplyPatchError:()=>Th,MaybeApplyPatch:()=>Ph,MaybeApplyPatchVerified:()=>Rh,Patch:()=>Nr,PatchSchema:()=>Nk,applyHunksToFiles:()=>Ah,applyPatch:()=>Vk,deriveNewContentsFromChunks:()=>sd,maybeParseApplyPatch:()=>Ch,maybeParseApplyPatchVerified:()=>zk,parsePatch:()=>Cs});import*as Lr from"path";var Nk=c.Struct({patchText:c.String.annotate({description:"The full patch text that describes all changes to be made"})}),Th=(i=>(i.ParseError="ParseError",i.IoError="IoError",i.ComputeReplacements="ComputeReplacements",i.ImplicitInvocation="ImplicitInvocation",i))(Th||{}),Ph=(i=>(i.Body="Body",i.ShellParseError="ShellParseError",i.PatchParseError="PatchParseError",i.NotApplyPatch="NotApplyPatch",i))(Ph||{}),Rh=(i=>(i.Body="Body",i.ShellParseError="ShellParseError",i.CorrectnessError="CorrectnessError",i.NotApplyPatch="NotApplyPatch",i))(Rh||{});function jk(e,t){let n=e[t];if(n.startsWith("*** Add File:")){let o=n.slice(13).trim();return o?{filePath:o,nextIdx:t+1}:null}if(n.startsWith("*** Delete File:")){let o=n.slice(16).trim();return o?{filePath:o,nextIdx:t+1}:null}if(n.startsWith("*** Update File:")){let o=n.slice(16).trim(),i,a=t+1;return a<e.length&&e[a].startsWith("*** Move to:")&&(i=e[a].slice(12).trim(),a++),o?{filePath:o,movePath:i,nextIdx:a}:null}return null}s(jk,"parsePatchHeader");function Uk(e,t){let n=[],o=t;for(;o<e.length&&!e[o].startsWith("***");)if(e[o].startsWith("@@")){let i=e[o].substring(2).trim();o++;let a=[],l=[],u=!1;for(;o<e.length&&!e[o].startsWith("@@")&&!e[o].startsWith("***");){let f=e[o];if(f==="*** End of File"){u=!0,o++;break}if(f.startsWith(" ")){let m=f.substring(1);a.push(m),l.push(m)}else f.startsWith("-")?a.push(f.substring(1)):f.startsWith("+")&&l.push(f.substring(1));o++}n.push({old_lines:a,new_lines:l,change_context:i||void 0,is_end_of_file:u||void 0})}else o++;return{chunks:n,nextIdx:o}}s(Uk,"parseUpdateFileChunks");function Fk(e,t){let n="",o=t;for(;o<e.length&&!e[o].startsWith("***");)e[o].startsWith("+")&&(n+=e[o].substring(1)+`
1297
1297
  `),o++;return n.endsWith(`
1298
- `)&&(n=n.slice(0,-1)),{content:n,nextIdx:o}}s(Uk,"parseAddFileContent");function Fk(e){let t=e.match(/^(?:cat\s+)?<<['"]?(\w+)['"]?\s*\n([\s\S]*?)\n\1\s*$/);return t?t[2]:e}s(Fk,"stripHeredoc");function Cs(e){let n=Fk(e.trim()).split(`
1299
- `),o=[],i=0,a="*** Begin Patch",l="*** End Patch",u=n.findIndex(m=>m.trim()===a),f=n.findIndex(m=>m.trim()===l);if(u===-1||f===-1||u>=f)throw new Error("Invalid patch format: missing Begin/End markers");for(i=u+1;i<f;){let m=Nk(n,i);if(!m){i++;continue}if(n[i].startsWith("*** Add File:")){let{content:p,nextIdx:h}=Uk(n,m.nextIdx);o.push({type:"add",path:m.filePath,contents:p}),i=h}else if(n[i].startsWith("*** Delete File:"))o.push({type:"delete",path:m.filePath}),i=m.nextIdx;else if(n[i].startsWith("*** Update File:")){let{chunks:p,nextIdx:h}=jk(n,m.nextIdx);o.push({type:"update",path:m.filePath,move_path:m.movePath,chunks:p}),i=h}else i++}return{hunks:o}}s(Cs,"parsePatch");function Ch(e){let t=["apply_patch","applypatch"];if(e.length===2&&t.includes(e[0]))try{let{hunks:n}=Cs(e[1]);return{type:"Body",args:{patch:e[1],hunks:n}}}catch(n){return{type:"PatchParseError",error:n}}if(e.length===3&&e[0]==="bash"&&e[1]==="-lc"){let o=e[2].match(/apply_patch\s*<<['"](\w+)['"]\s*\n([\s\S]*?)\n\1/);if(o){let i=o[2];try{let{hunks:a}=Cs(i);return{type:"Body",args:{patch:i,hunks:a}}}catch(a){return{type:"PatchParseError",error:a}}}}return{type:"NotApplyPatch"}}s(Ch,"maybeParseApplyPatch");function sd(e,t,n){let o=pn(n),i=o.text.split(`
1300
- `);i.length>0&&i[i.length-1]===""&&i.pop();let a=Bk(i,e,t),l=$k(i,a);(l.length===0||l[l.length-1]!=="")&&l.push("");let u=pn(l.join(`
1301
- `)),f=u.text;return{unified_diff:qk(o.text,f),content:f,bom:o.bom||u.bom}}s(sd,"deriveNewContentsFromChunks");function Bk(e,t,n){let o=[],i=0;for(let a of n){if(a.change_context){let m=rd(e,[a.change_context],i);if(m===-1)throw new Error(`Failed to find context '${a.change_context}' in ${t}`);i=m+1}if(a.old_lines.length===0){let m=e.length>0&&e[e.length-1]===""?e.length-1:e.length;o.push([m,0,a.new_lines]);continue}let l=a.old_lines,u=a.new_lines,f=rd(e,l,i,a.is_end_of_file);if(f===-1&&l.length>0&&l[l.length-1]===""&&(l=l.slice(0,-1),u.length>0&&u[u.length-1]===""&&(u=u.slice(0,-1)),f=rd(e,l,i,a.is_end_of_file)),f!==-1)o.push([f,l.length,u]),i=f+l.length;else throw new Error(`Failed to find expected lines in ${t}:
1298
+ `)&&(n=n.slice(0,-1)),{content:n,nextIdx:o}}s(Fk,"parseAddFileContent");function Bk(e){let t=e.match(/^(?:cat\s+)?<<['"]?(\w+)['"]?\s*\n([\s\S]*?)\n\1\s*$/);return t?t[2]:e}s(Bk,"stripHeredoc");function Cs(e){let n=Bk(e.trim()).split(`
1299
+ `),o=[],i=0,a="*** Begin Patch",l="*** End Patch",u=n.findIndex(m=>m.trim()===a),f=n.findIndex(m=>m.trim()===l);if(u===-1||f===-1||u>=f)throw new Error("Invalid patch format: missing Begin/End markers");for(i=u+1;i<f;){let m=jk(n,i);if(!m){i++;continue}if(n[i].startsWith("*** Add File:")){let{content:p,nextIdx:h}=Fk(n,m.nextIdx);o.push({type:"add",path:m.filePath,contents:p}),i=h}else if(n[i].startsWith("*** Delete File:"))o.push({type:"delete",path:m.filePath}),i=m.nextIdx;else if(n[i].startsWith("*** Update File:")){let{chunks:p,nextIdx:h}=Uk(n,m.nextIdx);o.push({type:"update",path:m.filePath,move_path:m.movePath,chunks:p}),i=h}else i++}return{hunks:o}}s(Cs,"parsePatch");function Ch(e){let t=["apply_patch","applypatch"];if(e.length===2&&t.includes(e[0]))try{let{hunks:n}=Cs(e[1]);return{type:"Body",args:{patch:e[1],hunks:n}}}catch(n){return{type:"PatchParseError",error:n}}if(e.length===3&&e[0]==="bash"&&e[1]==="-lc"){let o=e[2].match(/apply_patch\s*<<['"](\w+)['"]\s*\n([\s\S]*?)\n\1/);if(o){let i=o[2];try{let{hunks:a}=Cs(i);return{type:"Body",args:{patch:i,hunks:a}}}catch(a){return{type:"PatchParseError",error:a}}}}return{type:"NotApplyPatch"}}s(Ch,"maybeParseApplyPatch");function sd(e,t,n){let o=pn(n),i=o.text.split(`
1300
+ `);i.length>0&&i[i.length-1]===""&&i.pop();let a=$k(i,e,t),l=qk(i,a);(l.length===0||l[l.length-1]!=="")&&l.push("");let u=pn(l.join(`
1301
+ `)),f=u.text;return{unified_diff:Wk(o.text,f),content:f,bom:o.bom||u.bom}}s(sd,"deriveNewContentsFromChunks");function $k(e,t,n){let o=[],i=0;for(let a of n){if(a.change_context){let m=rd(e,[a.change_context],i);if(m===-1)throw new Error(`Failed to find context '${a.change_context}' in ${t}`);i=m+1}if(a.old_lines.length===0){let m=e.length>0&&e[e.length-1]===""?e.length-1:e.length;o.push([m,0,a.new_lines]);continue}let l=a.old_lines,u=a.new_lines,f=rd(e,l,i,a.is_end_of_file);if(f===-1&&l.length>0&&l[l.length-1]===""&&(l=l.slice(0,-1),u.length>0&&u[u.length-1]===""&&(u=u.slice(0,-1)),f=rd(e,l,i,a.is_end_of_file)),f!==-1)o.push([f,l.length,u]),i=f+l.length;else throw new Error(`Failed to find expected lines in ${t}:
1302
1302
  ${a.old_lines.join(`
1303
- `)}`)}return o.sort((a,l)=>a[0]-l[0]),o}s(Bk,"computeReplacements");function $k(e,t){let n=[...e];for(let o=t.length-1;o>=0;o--){let[i,a,l]=t[o];n.splice(i,a);for(let u=0;u<l.length;u++)n.splice(i+u,0,l[u])}return n}s($k,"applyReplacements");function Eh(e){return e.replace(/[‘’‚‛]/g,"'").replace(/[“”„‟]/g,'"').replace(/[‐‑‒–—―]/g,"-").replace(/…/g,"...").replace(/ /g," ")}s(Eh,"normalizeUnicode");function ba(e,t,n,o,i){if(i){let a=e.length-t.length;if(a>=n){let l=!0;for(let u=0;u<t.length;u++)if(!o(e[a+u],t[u])){l=!1;break}if(l)return a}}for(let a=n;a<=e.length-t.length;a++){let l=!0;for(let u=0;u<t.length;u++)if(!o(e[a+u],t[u])){l=!1;break}if(l)return a}return-1}s(ba,"tryMatch");function rd(e,t,n,o=!1){if(t.length===0)return-1;let i=ba(e,t,n,(f,m)=>f===m,o);if(i!==-1)return i;let a=ba(e,t,n,(f,m)=>f.trimEnd()===m.trimEnd(),o);if(a!==-1)return a;let l=ba(e,t,n,(f,m)=>f.trim()===m.trim(),o);return l!==-1?l:ba(e,t,n,(f,m)=>Eh(f.trim())===Eh(m.trim()),o)}s(rd,"seekSequence");function qk(e,t){let n=e.split(`
1303
+ `)}`)}return o.sort((a,l)=>a[0]-l[0]),o}s($k,"computeReplacements");function qk(e,t){let n=[...e];for(let o=t.length-1;o>=0;o--){let[i,a,l]=t[o];n.splice(i,a);for(let u=0;u<l.length;u++)n.splice(i+u,0,l[u])}return n}s(qk,"applyReplacements");function Eh(e){return e.replace(/[‘’‚‛]/g,"'").replace(/[“”„‟]/g,'"').replace(/[‐‑‒–—―]/g,"-").replace(/…/g,"...").replace(/ /g," ")}s(Eh,"normalizeUnicode");function ba(e,t,n,o,i){if(i){let a=e.length-t.length;if(a>=n){let l=!0;for(let u=0;u<t.length;u++)if(!o(e[a+u],t[u])){l=!1;break}if(l)return a}}for(let a=n;a<=e.length-t.length;a++){let l=!0;for(let u=0;u<t.length;u++)if(!o(e[a+u],t[u])){l=!1;break}if(l)return a}return-1}s(ba,"tryMatch");function rd(e,t,n,o=!1){if(t.length===0)return-1;let i=ba(e,t,n,(f,m)=>f===m,o);if(i!==-1)return i;let a=ba(e,t,n,(f,m)=>f.trimEnd()===m.trimEnd(),o);if(a!==-1)return a;let l=ba(e,t,n,(f,m)=>f.trim()===m.trim(),o);return l!==-1?l:ba(e,t,n,(f,m)=>Eh(f.trim())===Eh(m.trim()),o)}s(rd,"seekSequence");function Wk(e,t){let n=e.split(`
1304
1304
  `),o=t.split(`
1305
1305
  `),i=`@@ -1 +1 @@
1306
1306
  `,a=Math.max(n.length,o.length),l=!1;for(let u=0;u<a;u++){let f=n[u]||"",m=o[u]||"";f!==m?(f&&(i+=`-${f}
1307
1307
  `),m&&(i+=`+${m}
1308
1308
  `),l=!0):f&&(i+=` ${f}
1309
- `)}return l?i:""}s(qk,"generateUnifiedDiff");var Ah=r.fn("Patch.applyHunksToFiles")(function*(e){if(e.length===0)return yield*r.fail(new Error("No files were modified."));let t=yield*Me.Service,n=[],o=[],i=[];for(let a of e)switch(a.type){case"add":{yield*t.writeWithDirs(a.path,a.contents),n.push(a.path),yield*r.logInfo(`Added file: ${a.path}`);break}case"delete":{yield*t.remove(a.path),i.push(a.path),yield*r.logInfo(`Deleted file: ${a.path}`);break}case"update":{let l=yield*t.readFileString(a.path),u=sd(a.path,a.chunks,l);a.move_path?(yield*t.writeWithDirs(a.move_path,Kt(u.content,u.bom)),yield*t.remove(a.path),o.push(a.move_path),yield*r.logInfo(`Moved file: ${a.path} -> ${a.move_path}`)):(yield*t.writeWithDirs(a.path,Kt(u.content,u.bom)),o.push(a.path),yield*r.logInfo(`Updated file: ${a.path}`));break}}return{added:n,modified:o,deleted:i}}),Wk=r.fn("Patch.applyPatch")(function*(e){let{hunks:t}=Cs(e);return yield*Ah(t)}),Vk=r.fn("Patch.maybeParseApplyPatchVerified")(function*(e,t){if(e.length===1)try{return Cs(e[0]),{type:"CorrectnessError",error:new Error("ImplicitInvocation")}}catch{}let n=Ch(e);switch(n.type){case"Body":{let o=yield*Me.Service,i=n.args,a=i.workdir?Lr.resolve(t,i.workdir):t,l=new Map;for(let u of i.hunks){let f=Lr.resolve(a,u.type==="update"&&u.move_path?u.move_path:u.path);switch(u.type){case"add":l.set(f,{type:"add",content:u.contents});break;case"delete":{let m=Lr.resolve(a,u.path),p=yield*o.readFileString(m).pipe(r.catch(()=>r.succeed(void 0)));if(p===void 0)return{type:"CorrectnessError",error:new Error(`Failed to read file for deletion: ${m}`)};l.set(f,{type:"delete",content:p});break}case"update":{let m=Lr.resolve(a,u.path),p=yield*o.readFileString(m).pipe(r.catch(h=>r.succeed(new Error(`Failed to read file ${m}: ${h}`,{cause:h}))));if(p instanceof Error)return{type:"CorrectnessError",error:p};try{let h=sd(m,u.chunks,p);l.set(f,{type:"update",unified_diff:h.unified_diff,move_path:u.move_path?Lr.resolve(a,u.move_path):void 0,new_content:h.content})}catch(h){return{type:"CorrectnessError",error:h}}break}}}return{type:"Body",action:{changes:l,patch:i.patch,cwd:a}}}case"PatchParseError":return{type:"CorrectnessError",error:n.error};case"NotApplyPatch":return{type:"NotApplyPatch"}}});var Mh=`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:
1309
+ `)}return l?i:""}s(Wk,"generateUnifiedDiff");var Ah=r.fn("Patch.applyHunksToFiles")(function*(e){if(e.length===0)return yield*r.fail(new Error("No files were modified."));let t=yield*Me.Service,n=[],o=[],i=[];for(let a of e)switch(a.type){case"add":{yield*t.writeWithDirs(a.path,a.contents),n.push(a.path),yield*r.logInfo(`Added file: ${a.path}`);break}case"delete":{yield*t.remove(a.path),i.push(a.path),yield*r.logInfo(`Deleted file: ${a.path}`);break}case"update":{let l=yield*t.readFileString(a.path),u=sd(a.path,a.chunks,l);a.move_path?(yield*t.writeWithDirs(a.move_path,Kt(u.content,u.bom)),yield*t.remove(a.path),o.push(a.move_path),yield*r.logInfo(`Moved file: ${a.path} -> ${a.move_path}`)):(yield*t.writeWithDirs(a.path,Kt(u.content,u.bom)),o.push(a.path),yield*r.logInfo(`Updated file: ${a.path}`));break}}return{added:n,modified:o,deleted:i}}),Vk=r.fn("Patch.applyPatch")(function*(e){let{hunks:t}=Cs(e);return yield*Ah(t)}),zk=r.fn("Patch.maybeParseApplyPatchVerified")(function*(e,t){if(e.length===1)try{return Cs(e[0]),{type:"CorrectnessError",error:new Error("ImplicitInvocation")}}catch{}let n=Ch(e);switch(n.type){case"Body":{let o=yield*Me.Service,i=n.args,a=i.workdir?Lr.resolve(t,i.workdir):t,l=new Map;for(let u of i.hunks){let f=Lr.resolve(a,u.type==="update"&&u.move_path?u.move_path:u.path);switch(u.type){case"add":l.set(f,{type:"add",content:u.contents});break;case"delete":{let m=Lr.resolve(a,u.path),p=yield*o.readFileString(m).pipe(r.catch(()=>r.succeed(void 0)));if(p===void 0)return{type:"CorrectnessError",error:new Error(`Failed to read file for deletion: ${m}`)};l.set(f,{type:"delete",content:p});break}case"update":{let m=Lr.resolve(a,u.path),p=yield*o.readFileString(m).pipe(r.catch(h=>r.succeed(new Error(`Failed to read file ${m}: ${h}`,{cause:h}))));if(p instanceof Error)return{type:"CorrectnessError",error:p};try{let h=sd(m,u.chunks,p);l.set(f,{type:"update",unified_diff:h.unified_diff,move_path:u.move_path?Lr.resolve(a,u.move_path):void 0,new_content:h.content})}catch(h){return{type:"CorrectnessError",error:h}}break}}}return{type:"Body",action:{changes:l,patch:i.patch,cwd:a}}}case"PatchParseError":return{type:"CorrectnessError",error:n.error};case"NotApplyPatch":return{type:"NotApplyPatch"}}});var Mh=`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:
1310
1310
 
1311
1311
  *** Begin Patch
1312
1312
  [ one or more file sections ]
@@ -1339,24 +1339,24 @@ It is important to remember:
1339
1339
 
1340
1340
  - You must include a header with your intended action (Add/Delete/Update)
1341
1341
  - You must prefix new lines with \`+\` even when creating a new file
1342
- `;var zk=c.Struct({patchText:c.String.annotate({description:"The full patch text that describes all changes to be made"})}),id=Ke("apply_patch",r.gen(function*(){let e=yield*mt.Service,t=yield*Me.Service,n=yield*Jt.Service,o=yield*Ee.Service,i=r.fn("ApplyPatchTool.execute")(function*(a,l){if(!a.patchText)return yield*r.fail(new Error("patchText is required"));let u;try{u=Nr.parsePatch(a.patchText).hunks}catch(d){return yield*r.fail(new Error(`apply_patch verification failed: ${d}`))}if(u.length===0)return a.patchText.replace(/\r\n/g,`
1342
+ `;var Gk=c.Struct({patchText:c.String.annotate({description:"The full patch text that describes all changes to be made"})}),id=Ke("apply_patch",r.gen(function*(){let e=yield*mt.Service,t=yield*Me.Service,n=yield*Jt.Service,o=yield*Ee.Service,i=r.fn("ApplyPatchTool.execute")(function*(a,l){if(!a.patchText)return yield*r.fail(new Error("patchText is required"));let u;try{u=Nr.parsePatch(a.patchText).hunks}catch(d){return yield*r.fail(new Error(`apply_patch verification failed: ${d}`))}if(u.length===0)return a.patchText.replace(/\r\n/g,`
1343
1343
  `).replace(/\r/g,`
1344
1344
  `).trim()===`*** Begin Patch
1345
- *** End Patch`?yield*r.fail(new Error("patch rejected: empty patch")):yield*r.fail(new Error("apply_patch verification failed: no hunks found"));let f=yield*V.context,m=[],p="";for(let d of u){let k=Tn.resolve(f.directory,d.path);switch(yield*$t(l,k),d.type){case"add":{let x=d.contents.length===0||d.contents.endsWith(`
1345
+ *** End Patch`?yield*r.fail(new Error("patch rejected: empty patch")):yield*r.fail(new Error("apply_patch verification failed: no hunks found"));let f=yield*V.context,m=[],p="";for(let d of u){let k=Tn.resolve(f.directory,d.path);switch(yield*$t(l,k),d.type){case"add":{let S=d.contents.length===0||d.contents.endsWith(`
1346
1346
  `)?d.contents:`${d.contents}
1347
- `,E=pn(x),w=Fn(Dn(k,k,"",E.text)),M=0,C=0;for(let $ of ts("",E.text))$.added&&(M+=$.count||0),$.removed&&(C+=$.count||0);m.push({filePath:k,oldContent:"",newContent:E.text,type:"add",diff:w,additions:M,deletions:C,bom:E.bom}),p+=w+`
1348
- `;break}case"update":{let y=yield*t.stat(k).pipe(r.catch(()=>r.succeed(void 0)));if(!y||y.type==="Directory")return yield*r.fail(new Error(`apply_patch verification failed: Failed to read file to update: ${k}`));let x=yield*ao(t,k),E=x.text,w=E,M=x.bom;try{let ue=Nr.deriveNewContentsFromChunks(k,d.chunks,Kt(x.text,x.bom));w=ue.content,M=ue.bom}catch(ue){return yield*r.fail(new Error(`apply_patch verification failed: ${ue}`))}let C=Fn(Dn(k,k,E,w)),$=0,U=0;for(let ue of ts(E,w))ue.added&&($+=ue.count||0),ue.removed&&(U+=ue.count||0);let H=d.move_path?Tn.resolve(f.directory,d.move_path):void 0;yield*$t(l,H),m.push({filePath:k,oldContent:E,newContent:w,type:d.move_path?"move":"update",movePath:H,diff:C,additions:$,deletions:U,bom:M}),p+=C+`
1349
- `;break}case"delete":{let y=yield*ao(t,k).pipe(r.catch(M=>r.fail(new Error(`apply_patch verification failed: ${M instanceof Error?M.message:String(M)}`)))),x=y.text,E=Fn(Dn(k,k,x,"")),w=x.split(`
1350
- `).length;m.push({filePath:k,oldContent:x,newContent:"",type:"delete",diff:E,additions:0,deletions:w,bom:y.bom}),p+=E+`
1347
+ `,E=pn(S),w=Fn(Dn(k,k,"",E.text)),M=0,C=0;for(let $ of ts("",E.text))$.added&&(M+=$.count||0),$.removed&&(C+=$.count||0);m.push({filePath:k,oldContent:"",newContent:E.text,type:"add",diff:w,additions:M,deletions:C,bom:E.bom}),p+=w+`
1348
+ `;break}case"update":{let y=yield*t.stat(k).pipe(r.catch(()=>r.succeed(void 0)));if(!y||y.type==="Directory")return yield*r.fail(new Error(`apply_patch verification failed: Failed to read file to update: ${k}`));let S=yield*ao(t,k),E=S.text,w=E,M=S.bom;try{let ue=Nr.deriveNewContentsFromChunks(k,d.chunks,Kt(S.text,S.bom));w=ue.content,M=ue.bom}catch(ue){return yield*r.fail(new Error(`apply_patch verification failed: ${ue}`))}let C=Fn(Dn(k,k,E,w)),$=0,U=0;for(let ue of ts(E,w))ue.added&&($+=ue.count||0),ue.removed&&(U+=ue.count||0);let H=d.move_path?Tn.resolve(f.directory,d.move_path):void 0;yield*$t(l,H),m.push({filePath:k,oldContent:E,newContent:w,type:d.move_path?"move":"update",movePath:H,diff:C,additions:$,deletions:U,bom:M}),p+=C+`
1349
+ `;break}case"delete":{let y=yield*ao(t,k).pipe(r.catch(M=>r.fail(new Error(`apply_patch verification failed: ${M instanceof Error?M.message:String(M)}`)))),S=y.text,E=Fn(Dn(k,k,S,"")),w=S.split(`
1350
+ `).length;m.push({filePath:k,oldContent:S,newContent:"",type:"delete",diff:E,additions:0,deletions:w,bom:y.bom}),p+=E+`
1351
1351
  `;break}}}let h=m.map(d=>({filePath:d.filePath,relativePath:Tn.relative(f.worktree,d.movePath??d.filePath).replaceAll("\\","/"),type:d.type,patch:d.diff,additions:d.additions,deletions:d.deletions,...d.movePath?{movePath:d.movePath}:{}})),g=m.map(d=>Tn.relative(f.worktree,d.filePath).replaceAll("\\","/"));yield*l.ask({permission:"edit",patterns:g,always:["*"],metadata:{filepath:g.join(", "),diff:p,files:h}});for(let d of m)Fa.assert(d.filePath,"apply_patch"),d.movePath&&Fa.assert(d.movePath,"apply_patch");let I=[];for(let d of m){let k=d.type==="delete"?void 0:d.movePath??d.filePath;switch(d.type){case"add":yield*t.writeWithDirs(d.filePath,Kt(d.newContent,d.bom)),I.push({file:d.filePath,event:"add"});break;case"update":yield*t.writeWithDirs(d.filePath,Kt(d.newContent,d.bom)),I.push({file:d.filePath,event:"change"});break;case"move":d.movePath&&(yield*t.writeWithDirs(d.movePath,Kt(d.newContent,d.bom)),yield*t.remove(d.filePath),I.push({file:d.filePath,event:"unlink"}),I.push({file:d.movePath,event:"add"}));break;case"delete":yield*t.remove(d.filePath),I.push({file:d.filePath,event:"unlink"});break}k&&((yield*n.file(k))&&(yield*Ao(t,k,d.bom)),yield*o.publish(ho.Event.Edited,{file:k}))}for(let d of I)yield*o.publish(_n.Event.Updated,d);for(let d of m){if(d.type==="delete")continue;let k=d.movePath??d.filePath;yield*e.touchFile(k,"document")}let T=yield*e.diagnostics(),P=`Success. Updated the following files:
1352
1352
  ${m.map(d=>{if(d.type==="add")return`A ${Tn.relative(f.worktree,d.filePath).replaceAll("\\","/")}`;if(d.type==="delete")return`D ${Tn.relative(f.worktree,d.filePath).replaceAll("\\","/")}`;let k=d.movePath??d.filePath;return`M ${Tn.relative(f.worktree,k).replaceAll("\\","/")}`}).join(`
1353
- `)}`;for(let d of m){if(d.type==="delete")continue;let k=d.movePath??d.filePath,y=mt.Diagnostic.report(k,T[Me.normalizePath(k)]??[]);if(!y)continue;let x=Tn.relative(f.worktree,k).replaceAll("\\","/");P+=`
1353
+ `)}`;for(let d of m){if(d.type==="delete")continue;let k=d.movePath??d.filePath,y=mt.Diagnostic.report(k,T[Me.normalizePath(k)]??[]);if(!y)continue;let S=Tn.relative(f.worktree,k).replaceAll("\\","/");P+=`
1354
1354
 
1355
- LSP errors detected in ${x}, please fix:
1356
- ${y}`}return{title:P,metadata:{diff:p,files:h,diagnostics:T},output:P}});return{description:Mh,parameters:zk,execute:s((a,l)=>i(a,l).pipe(r.orDie),"execute")}}));import _h from"path";import{pathToFileURL as Gk}from"url";function Lh(e,t={exa:!1,parallel:!1}){return e===sn.ID.opencode||e===sn.ID.make("opencode-go")||t.exa||t.parallel}s(Lh,"webSearchEnabled");var jr=class extends Ce.Service()("@opencode/ToolRegistry"){static{s(this,"Service")}},Hk=Pe.effect(jr,r.gen(function*(){let e=yield*Ne.Service,t=yield*ft.Service,n=yield*Ft.Service,o=yield*Hu,i=yield*Ve.Service,a=yield*cn.Service,l=yield*fh,u=yield*_o,f=yield*Xm,m=yield*jm,p=yield*oh,h=yield*Dh,g=yield*Lm,I=yield*dh,T=yield*nd,v=yield*zm,P=yield*ed,d=yield*Jl,k=yield*Hm,y=yield*id,x=yield*gh,E=yield*Ft.Service,w=i.experimentalCodeMode?yield*r.promise(()=>import("./code-mode-LEVRRN6O.js")):void 0,M=w?yield*w.CodeModeTool:void 0,C=yield*V.make(r.fn("ToolRegistry.state")(function*(D){let A=[];function _(ae,oe){let $e=oe.args??{},Le=Object.entries($e),Y=Le.every(ke=>Nh(ke[1]))?ii.object($e):void 0,J=Y?Xk(Y):Kk(Le),te=Y?c.declare(ke=>Y.safeParse(ke).success):c.Unknown;return{id:ae,parameters:te,jsonSchema:J,description:oe.description,execute:s((ke,He)=>r.gen(function*(){let Pn=yield*zt.make(),S={...He,ask:s(X=>Pn.promise(He.ask(X)),"ask"),directory:D.directory,worktree:D.worktree},G=yield*r.promise(()=>oe.execute(ke,S)),ye=typeof G=="string"?G:G.output,le=typeof G=="string"?{}:G.metadata??{},ne=typeof G=="string"?void 0:G.attachments,re=yield*E.get(He.agent),se=yield*o.output(ye,{},re);return{title:typeof G=="string"?"":G.title??"",output:se.truncated?se.content:ye,attachments:ne,metadata:{...le,truncated:se.truncated,...se.truncated&&{outputPath:se.outputPath}}}}).pipe(r.withSpan("Tool.execute",{attributes:{"tool.name":ae,"session.id":He.sessionID,"message.id":He.messageID,...He.callID?{"tool.call_id":He.callID}:{}}})),"execute")}}s(_,"fromPlugin");let q=(yield*e.directories()).flatMap(ae=>Kd.scanSync("{tool,tools}/*.{js,ts}",{cwd:ae,absolute:!0,dot:!0,symlink:!0}));q.length&&(yield*e.waitForDependencies());for(let ae of q){let oe=_h.basename(ae,_h.extname(ae)),$e=yield*r.promise(()=>import(Gk(ae).href));for(let[Le,R]of Object.entries($e))Yk(R)&&A.push(_(Le==="default"?oe:`${oe}_${Le}`,R))}let j=yield*t.list();for(let ae of j)for(let[oe,$e]of Object.entries(ae.tool??{}))A.push(_(oe,$e));yield*e.get();let ve=!i.alchemyLab&&["app","cli","desktop"].includes(i.client)||i.enableQuestionTool,pe=yield*r.all({invalid:Ct(l),read:Ct(f),glob:Ct(v),grep:Ct(k),edit:Ct(d),write:Ct(P),task:Ct(u),fetch:Ct(I),todo:Ct(p),search:Ct(T),skill:Ct(x),patch:Ct(y),question:Ct(m),lsp:Ct(h),plan:Ct(g),...M?{execute:Ct(M)}:{}});return{custom:A,builtin:[pe.invalid,...ve?[pe.question]:[],pe.read,pe.glob,pe.grep,pe.edit,pe.write,pe.task,pe.fetch,pe.todo,pe.search,pe.skill,pe.patch,...pe.execute?[pe.execute]:[],...i.experimentalLspTool?[pe.lsp]:[],...i.experimentalPlanMode&&!i.alchemyLab&&i.client==="cli"?[pe.plan]:[]],task:pe.task,read:pe.read}})),$=r.fn("ToolRegistry.all")(function*(){let D=yield*V.get(C);return[...D.builtin,...D.custom]}),U=r.fn("ToolRegistry.ids")(function*(){return(yield*$()).map(D=>D.id)}),H=r.fn("ToolRegistry.describeTask")(function*(D){return["Available agent types and the tools they have access to:",(yield*n.list()).filter(j=>j.mode!=="primary").filter(j=>Ze.evaluate("task",j.name,D.permission).action!=="deny").toSorted((j,ve)=>j.name.localeCompare(ve.name)).map(j=>`- ${j.name}: ${j.description??"This subagent should only be called manually by the user."}`).join(`
1355
+ LSP errors detected in ${S}, please fix:
1356
+ ${y}`}return{title:P,metadata:{diff:p,files:h,diagnostics:T},output:P}});return{description:Mh,parameters:Gk,execute:s((a,l)=>i(a,l).pipe(r.orDie),"execute")}}));import _h from"path";import{pathToFileURL as Hk}from"url";function Lh(e,t={exa:!1,parallel:!1}){return e===sn.ID.opencode||e===sn.ID.make("opencode-go")||t.exa||t.parallel}s(Lh,"webSearchEnabled");var jr=class extends Ce.Service()("@opencode/ToolRegistry"){static{s(this,"Service")}},Yk=Pe.effect(jr,r.gen(function*(){let e=yield*Ne.Service,t=yield*ft.Service,n=yield*Ft.Service,o=yield*Hu,i=yield*Ve.Service,a=yield*cn.Service,l=yield*fh,u=yield*_o,f=yield*Xm,m=yield*jm,p=yield*oh,h=yield*Dh,g=yield*Lm,I=yield*dh,T=yield*nd,v=yield*zm,P=yield*ed,d=yield*Jl,k=yield*Hm,y=yield*id,S=yield*gh,E=yield*Ft.Service,w=i.experimentalCodeMode?yield*r.promise(()=>import("./code-mode-GPSP6N3D.js")):void 0,M=w?yield*w.CodeModeTool:void 0,C=yield*V.make(r.fn("ToolRegistry.state")(function*(D){let A=[];function _(ae,oe){let $e=oe.args??{},Le=Object.entries($e),Y=Le.every(ke=>Nh(ke[1]))?ii.object($e):void 0,J=Y?Qk(Y):Xk(Le),te=Y?c.declare(ke=>Y.safeParse(ke).success):c.Unknown;return{id:ae,parameters:te,jsonSchema:J,description:oe.description,execute:s((ke,He)=>r.gen(function*(){let Pn=yield*zt.make(),x={...He,ask:s(K=>Pn.promise(He.ask(K)),"ask"),directory:D.directory,worktree:D.worktree},G=yield*r.promise(()=>oe.execute(ke,x)),ye=typeof G=="string"?G:G.output,le=typeof G=="string"?{}:G.metadata??{},ne=typeof G=="string"?void 0:G.attachments,re=yield*E.get(He.agent),se=yield*o.output(ye,{},re);return{title:typeof G=="string"?"":G.title??"",output:se.truncated?se.content:ye,attachments:ne,metadata:{...le,truncated:se.truncated,...se.truncated&&{outputPath:se.outputPath}}}}).pipe(r.withSpan("Tool.execute",{attributes:{"tool.name":ae,"session.id":He.sessionID,"message.id":He.messageID,...He.callID?{"tool.call_id":He.callID}:{}}})),"execute")}}s(_,"fromPlugin");let q=(yield*e.directories()).flatMap(ae=>Kd.scanSync("{tool,tools}/*.{js,ts}",{cwd:ae,absolute:!0,dot:!0,symlink:!0}));q.length&&(yield*e.waitForDependencies());for(let ae of q){let oe=_h.basename(ae,_h.extname(ae)),$e=yield*r.promise(()=>import(Hk(ae).href));for(let[Le,R]of Object.entries($e))Jk(R)&&A.push(_(Le==="default"?oe:`${oe}_${Le}`,R))}let j=yield*t.list();for(let ae of j)for(let[oe,$e]of Object.entries(ae.tool??{}))A.push(_(oe,$e));yield*e.get();let ve=!i.alchemyLab&&["app","cli","desktop"].includes(i.client)||i.enableQuestionTool,pe=yield*r.all({invalid:Ct(l),read:Ct(f),glob:Ct(v),grep:Ct(k),edit:Ct(d),write:Ct(P),task:Ct(u),fetch:Ct(I),todo:Ct(p),search:Ct(T),skill:Ct(S),patch:Ct(y),question:Ct(m),lsp:Ct(h),plan:Ct(g),...M?{execute:Ct(M)}:{}});return{custom:A,builtin:[pe.invalid,...ve?[pe.question]:[],pe.read,pe.glob,pe.grep,pe.edit,pe.write,pe.task,pe.fetch,pe.todo,pe.search,pe.skill,pe.patch,...pe.execute?[pe.execute]:[],...i.experimentalLspTool?[pe.lsp]:[],...i.experimentalPlanMode&&!i.alchemyLab&&i.client==="cli"?[pe.plan]:[]],task:pe.task,read:pe.read}})),$=r.fn("ToolRegistry.all")(function*(){let D=yield*V.get(C);return[...D.builtin,...D.custom]}),U=r.fn("ToolRegistry.ids")(function*(){return(yield*$()).map(D=>D.id)}),H=r.fn("ToolRegistry.describeTask")(function*(D){return["Available agent types and the tools they have access to:",(yield*n.list()).filter(j=>j.mode!=="primary").filter(j=>Ze.evaluate("task",j.name,D.permission).action!=="deny").toSorted((j,ve)=>j.name.localeCompare(ve.name)).map(j=>`- ${j.name}: ${j.description??"This subagent should only be called manually by the user."}`).join(`
1357
1357
  `)].join(`
1358
1358
  `)}),ue=r.fn("ToolRegistry.describeCodeMode")(function*(D){if(!w)return;let A=Ze.merge(D.agent.permission,D.permission??[]),_=Ze.visibleTools(yield*a.tools(),A);if(Object.keys(_).length!==0)return w.describeCatalog(_,Object.keys(yield*a.clients()).map(gi.sanitize))}),L=r.fn("ToolRegistry.tools")(function*(D){let A=(yield*$()).filter(q=>{if(q.id===nd.id)return Lh(D.providerID,{exa:i.enableExa,parallel:i.enableParallel});let j=D.modelID.includes("gpt-")&&!D.modelID.includes("oss")&&!D.modelID.includes("gpt-4");return q.id===id.id?j:q.id===Jl.id||q.id===ed.id?!j:!0}),_=A.some(q=>q.id==="execute")?yield*ue(D):void 0,N=A.filter(q=>q.id!=="execute"||_);return yield*r.forEach(N,r.fnUntraced(function*(q){let j={description:q.description,parameters:q.parameters,jsonSchema:q.jsonSchema};yield*t.trigger("tool.definition",{toolID:q.id},j);let ve=j.parameters===q.parameters||j.jsonSchema!==q.jsonSchema?j.jsonSchema:void 0;return{id:q.id,description:[j.description,q.id===_o.id?yield*H(D.agent):void 0,q.id==="execute"?_:void 0].filter(Boolean).join(`
1359
- `),parameters:j.parameters,jsonSchema:ve,execute:q.execute,formatValidationError:q.formatValidationError}}),{concurrency:"unbounded"})}),W=r.fn("ToolRegistry.named")(function*(){let D=yield*V.get(C);return{task:D.task,read:D.read}});return jr.of({ids:U,all:$,named:W,tools:L})}));function Nh(e){return typeof e=="object"&&e!==null&&"_zod"in e}s(Nh,"isZodType");function Yk(e){return typeof e=="object"&&e!==null&&"args"in e&&"description"in e&&"execute"in e}s(Yk,"isPluginTool");function Jk(e){return typeof e=="boolean"||typeof e=="object"&&e!==null&&!Array.isArray(e)}s(Jk,"isJsonSchemaDefinition");function Kk(e){let t=Object.fromEntries(e.filter(n=>Jk(n[1])));return{type:"object",properties:t,required:Object.keys(t)}}s(Kk,"legacyJsonSchema");function Xk(e){let t=ad(ii.toJSONSchema(e,{io:"input",metadata:Qk(e)}));if(!Oh(t))throw new Error("plugin tool Zod schema produced a non-object JSON Schema");let{$defs:n,...o}=t;return n&&Oh(n)?{...o,definitions:n}:o}s(Xk,"zodJsonSchema");function Qk(e){let t=ii.registry(),n=new WeakSet,o=s(i=>{if(!(typeof i!="object"||i===null)&&!n.has(i)){if(n.add(i),Nh(i)){let a=typeof i.meta=="function"?i.meta():void 0,l=typeof i.description=="string"?i.description:void 0,u={...a&&typeof a=="object"?a:{},...l?{description:l}:{}};Object.keys(u).length&&t.add(i,u),o(i._zod.def);return}for(let a of Object.values(i))o(a)}},"collect");return o(e),t}s(Qk,"zodMetadataRegistry");function ad(e){return Array.isArray(e)?e.map(t=>ad(t)):typeof e!="object"||e===null?e:Object.fromEntries(Object.entries(e).filter(t=>!((t[0]==="exclusiveMaximum"||t[0]==="exclusiveMinimum")&&typeof t[1]=="boolean")).map(([t,n])=>[t,ad(n)]))}s(ad,"normalizeZodJsonSchema");function Oh(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}s(Oh,"isJsonSchemaObject");var Zk=De.make({service:jr,layer:Hk,deps:[Ne.node,ft.node,Qt.node,Zn.node,Ft.node,Xn.node,me.node,wo.node,bt.node,mt.node,En.node,Me.node,Ee.node,In,ni.node,Jt.node,Yu,Ve.node,cn.node,tt.node,Hn.node,Xt.node]});var Br={};fe(Br,{CommandInput:()=>OD,LoopInput:()=>pd,PromptInput:()=>MD,Service:()=>Fr,SessionPrompt:()=>Br,ShellInput:()=>_D,createStructuredOutputTool:()=>sg,node:()=>UD});import eg from"path";import ID from"os";import wa from"node:crypto";var Uh="0123456789ABCDEFGHJKMNPQRSTVWXYZ",va=32;var eD=16,Fh=10,jh=0xffffffffffff;var No;(function(e){e.Base32IncorrectEncoding="B32_ENC_INVALID",e.DecodeTimeInvalidCharacter="DEC_TIME_CHAR",e.DecodeTimeValueMalformed="DEC_TIME_MALFORMED",e.EncodeTimeNegative="ENC_TIME_NEG",e.EncodeTimeSizeExceeded="ENC_TIME_SIZE_EXCEED",e.EncodeTimeValueMalformed="ENC_TIME_MALFORMED",e.PRNGDetectFailure="PRNG_DETECT",e.ULIDInvalid="ULID_INVALID",e.Unexpected="UNEXPECTED",e.UUIDInvalid="UUID_INVALID"})(No||(No={}));var jo=class extends Error{static{s(this,"ULIDError")}constructor(t,n){super(`${n} (${t})`),this.name="ULIDError",this.code=t}};function tD(e){let t=Math.floor(e()*va)%va;return Uh.charAt(t)}s(tD,"randomChar");function nD(e){let t=oD(),n=t&&(t.crypto||t.msCrypto)||(typeof wa<"u"?wa:null);if(typeof n?.getRandomValues=="function")return()=>{let o=new Uint8Array(1);return n.getRandomValues(o),o[0]/255};if(typeof n?.randomBytes=="function")return()=>n.randomBytes(1).readUInt8()/255;if(wa?.randomBytes)return()=>wa.randomBytes(1).readUInt8()/255;throw new jo(No.PRNGDetectFailure,"Failed to find a reliable PRNG")}s(nD,"detectPRNG");function oD(){return iD()?self:typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:null}s(oD,"detectRoot");function rD(e,t){let n="";for(;e>0;e--)n=tD(t)+n;return n}s(rD,"encodeRandom");function sD(e,t=Fh){if(isNaN(e))throw new jo(No.EncodeTimeValueMalformed,`Time must be a number: ${e}`);if(e>jh)throw new jo(No.EncodeTimeSizeExceeded,`Cannot encode a time larger than ${jh}: ${e}`);if(e<0)throw new jo(No.EncodeTimeNegative,`Time must be positive: ${e}`);if(Number.isInteger(e)===!1)throw new jo(No.EncodeTimeValueMalformed,`Time must be an integer: ${e}`);let n,o="";for(let i=t;i>0;i--)n=e%va,o=Uh.charAt(n)+o,e=(e-n)/va;return o}s(sD,"encodeTime");function iD(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}s(iD,"inWebWorker");function cd(e,t){let n=t||nD(),o=!e||isNaN(e)?Date.now():e;return sD(o,Fh)+rD(eD,n)}s(cd,"ulid");import{pathToFileURL as kD,fileURLToPath as dd}from"url";var As={};fe(As,{ShellID:()=>As,ToolID:()=>uD,toKind:()=>dD});var aD=["bash","pwsh","powershell","cmd"],cD=new Set(aD);function lD(e){return cD.has(e)}s(lD,"isKind");function dD(e){return lD(e)?e:"bash"}s(dD,"toKind");var uD="bash";function Bh(e){let t=e.indexOf(",");if(t===-1)return"";let n=e.slice(0,t),o=e.slice(t+1);return n.includes(";base64")?Buffer.from(o,"base64").toString("utf8"):decodeURIComponent(o)}s(Bh,"decodeDataUrl");var Ms={};fe(Ms,{SessionReminders:()=>Ms,apply:()=>fD});import pD from"path";var $h=`<system-reminder>
1359
+ `),parameters:j.parameters,jsonSchema:ve,execute:q.execute,formatValidationError:q.formatValidationError}}),{concurrency:"unbounded"})}),W=r.fn("ToolRegistry.named")(function*(){let D=yield*V.get(C);return{task:D.task,read:D.read}});return jr.of({ids:U,all:$,named:W,tools:L})}));function Nh(e){return typeof e=="object"&&e!==null&&"_zod"in e}s(Nh,"isZodType");function Jk(e){return typeof e=="object"&&e!==null&&"args"in e&&"description"in e&&"execute"in e}s(Jk,"isPluginTool");function Kk(e){return typeof e=="boolean"||typeof e=="object"&&e!==null&&!Array.isArray(e)}s(Kk,"isJsonSchemaDefinition");function Xk(e){let t=Object.fromEntries(e.filter(n=>Kk(n[1])));return{type:"object",properties:t,required:Object.keys(t)}}s(Xk,"legacyJsonSchema");function Qk(e){let t=ad(ii.toJSONSchema(e,{io:"input",metadata:Zk(e)}));if(!Oh(t))throw new Error("plugin tool Zod schema produced a non-object JSON Schema");let{$defs:n,...o}=t;return n&&Oh(n)?{...o,definitions:n}:o}s(Qk,"zodJsonSchema");function Zk(e){let t=ii.registry(),n=new WeakSet,o=s(i=>{if(!(typeof i!="object"||i===null)&&!n.has(i)){if(n.add(i),Nh(i)){let a=typeof i.meta=="function"?i.meta():void 0,l=typeof i.description=="string"?i.description:void 0,u={...a&&typeof a=="object"?a:{},...l?{description:l}:{}};Object.keys(u).length&&t.add(i,u),o(i._zod.def);return}for(let a of Object.values(i))o(a)}},"collect");return o(e),t}s(Zk,"zodMetadataRegistry");function ad(e){return Array.isArray(e)?e.map(t=>ad(t)):typeof e!="object"||e===null?e:Object.fromEntries(Object.entries(e).filter(t=>!((t[0]==="exclusiveMaximum"||t[0]==="exclusiveMinimum")&&typeof t[1]=="boolean")).map(([t,n])=>[t,ad(n)]))}s(ad,"normalizeZodJsonSchema");function Oh(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}s(Oh,"isJsonSchemaObject");var eD=De.make({service:jr,layer:Yk,deps:[Ne.node,ft.node,Qt.node,Zn.node,Ft.node,Xn.node,me.node,wo.node,bt.node,mt.node,En.node,Me.node,Ee.node,In,ni.node,Jt.node,Yu,Ve.node,cn.node,tt.node,Hn.node,Xt.node]});var Br={};fe(Br,{CommandInput:()=>LD,LoopInput:()=>pd,PromptInput:()=>_D,Service:()=>Fr,SessionPrompt:()=>Br,ShellInput:()=>OD,createStructuredOutputTool:()=>ig,node:()=>FD});import tg from"path";import kD from"os";import wa from"node:crypto";var Uh="0123456789ABCDEFGHJKMNPQRSTVWXYZ",va=32;var tD=16,Fh=10,jh=0xffffffffffff;var No;(function(e){e.Base32IncorrectEncoding="B32_ENC_INVALID",e.DecodeTimeInvalidCharacter="DEC_TIME_CHAR",e.DecodeTimeValueMalformed="DEC_TIME_MALFORMED",e.EncodeTimeNegative="ENC_TIME_NEG",e.EncodeTimeSizeExceeded="ENC_TIME_SIZE_EXCEED",e.EncodeTimeValueMalformed="ENC_TIME_MALFORMED",e.PRNGDetectFailure="PRNG_DETECT",e.ULIDInvalid="ULID_INVALID",e.Unexpected="UNEXPECTED",e.UUIDInvalid="UUID_INVALID"})(No||(No={}));var jo=class extends Error{static{s(this,"ULIDError")}constructor(t,n){super(`${n} (${t})`),this.name="ULIDError",this.code=t}};function nD(e){let t=Math.floor(e()*va)%va;return Uh.charAt(t)}s(nD,"randomChar");function oD(e){let t=rD(),n=t&&(t.crypto||t.msCrypto)||(typeof wa<"u"?wa:null);if(typeof n?.getRandomValues=="function")return()=>{let o=new Uint8Array(1);return n.getRandomValues(o),o[0]/255};if(typeof n?.randomBytes=="function")return()=>n.randomBytes(1).readUInt8()/255;if(wa?.randomBytes)return()=>wa.randomBytes(1).readUInt8()/255;throw new jo(No.PRNGDetectFailure,"Failed to find a reliable PRNG")}s(oD,"detectPRNG");function rD(){return aD()?self:typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:null}s(rD,"detectRoot");function sD(e,t){let n="";for(;e>0;e--)n=nD(t)+n;return n}s(sD,"encodeRandom");function iD(e,t=Fh){if(isNaN(e))throw new jo(No.EncodeTimeValueMalformed,`Time must be a number: ${e}`);if(e>jh)throw new jo(No.EncodeTimeSizeExceeded,`Cannot encode a time larger than ${jh}: ${e}`);if(e<0)throw new jo(No.EncodeTimeNegative,`Time must be positive: ${e}`);if(Number.isInteger(e)===!1)throw new jo(No.EncodeTimeValueMalformed,`Time must be an integer: ${e}`);let n,o="";for(let i=t;i>0;i--)n=e%va,o=Uh.charAt(n)+o,e=(e-n)/va;return o}s(iD,"encodeTime");function aD(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}s(aD,"inWebWorker");function cd(e,t){let n=t||oD(),o=!e||isNaN(e)?Date.now():e;return iD(o,Fh)+sD(tD,n)}s(cd,"ulid");import{pathToFileURL as DD,fileURLToPath as dd}from"url";var As={};fe(As,{ShellID:()=>As,ToolID:()=>pD,toKind:()=>uD});var cD=["bash","pwsh","powershell","cmd"],lD=new Set(cD);function dD(e){return lD.has(e)}s(dD,"isKind");function uD(e){return dD(e)?e:"bash"}s(uD,"toKind");var pD="bash";function Bh(e){let t=e.indexOf(",");if(t===-1)return"";let n=e.slice(0,t),o=e.slice(t+1);return n.includes(";base64")?Buffer.from(o,"base64").toString("utf8"):decodeURIComponent(o)}s(Bh,"decodeDataUrl");var Ms={};fe(Ms,{SessionReminders:()=>Ms,apply:()=>mD});import fD from"path";var $h=`<system-reminder>
1360
1360
  # Plan Mode - System Reminder
1361
1361
 
1362
1362
  CRITICAL: Plan mode ACTIVE - you are in READ-ONLY phase. STRICTLY FORBIDDEN:
@@ -1457,34 +1457,34 @@ This is critical - your turn should only end with either asking the user a quest
1457
1457
 
1458
1458
  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.
1459
1459
  </system-reminder>
1460
- `;var fD=r.fn("SessionReminders.apply")(function*(e){let t=yield*Ve.Service,n=yield*Me.Service,o=yield*me.Service,i=e.messages.findLast(p=>p.info.role==="user");if(!i)return e.messages;if(!t.experimentalPlanMode)return e.agent.name==="plan"&&i.parts.push({id:We.ascending(),messageID:i.info.id,sessionID:i.info.sessionID,type:"text",text:$h,synthetic:!0}),e.messages.some(h=>h.info.role==="assistant"&&h.info.agent==="plan")&&e.agent.name==="build"&&i.parts.push({id:We.ascending(),messageID:i.info.id,sessionID:i.info.sessionID,type:"text",text:xa,synthetic:!0}),e.messages;let a=e.messages.findLast(p=>p.info.role==="assistant");if(e.agent.name!=="plan"&&a?.info.agent==="plan"){let p=yield*V.context,h=me.plan(e.session,p),g=yield*n.existsSafe(h),I=yield*o.updatePart({id:We.ascending(),messageID:i.info.id,sessionID:i.info.sessionID,type:"text",text:g?`${xa}
1460
+ `;var mD=r.fn("SessionReminders.apply")(function*(e){let t=yield*Ve.Service,n=yield*Me.Service,o=yield*me.Service,i=e.messages.findLast(p=>p.info.role==="user");if(!i)return e.messages;if(!t.experimentalPlanMode)return e.agent.name==="plan"&&i.parts.push({id:We.ascending(),messageID:i.info.id,sessionID:i.info.sessionID,type:"text",text:$h,synthetic:!0}),e.messages.some(h=>h.info.role==="assistant"&&h.info.agent==="plan")&&e.agent.name==="build"&&i.parts.push({id:We.ascending(),messageID:i.info.id,sessionID:i.info.sessionID,type:"text",text:xa,synthetic:!0}),e.messages;let a=e.messages.findLast(p=>p.info.role==="assistant");if(e.agent.name!=="plan"&&a?.info.agent==="plan"){let p=yield*V.context,h=me.plan(e.session,p),g=yield*n.existsSafe(h),I=yield*o.updatePart({id:We.ascending(),messageID:i.info.id,sessionID:i.info.sessionID,type:"text",text:g?`${xa}
1461
1461
 
1462
- A plan file exists at ${h}. You should execute on the plan defined within it`:xa,synthetic:!0});return i.parts.push(I),e.messages}if(e.agent.name!=="plan"||a?.info.agent==="plan")return e.messages;let l=yield*V.context,u=me.plan(e.session,l),f=yield*n.existsSafe(u);f||(yield*n.ensureDir(pD.dirname(u)).pipe(r.catch(r.die)));let m=yield*o.updatePart({id:We.ascending(),messageID:i.info.id,sessionID:i.info.sessionID,type:"text",text:qh.replace("${planInfo}",()=>f?`A plan file already exists at ${u}. You can read it and make incremental edits using the edit tool.`:`No plan file exists yet. You should create your plan at ${u} using the write tool.`),synthetic:!0});return i.parts.push(m),e.messages});var Os={};fe(Os,{SessionTools:()=>Os,resolve:()=>mD});var qn={list:"list_mcp_resources",listTemplates:"list_mcp_resource_templates",read:"read_mcp_resource"},Sa=10*1024*1024,zh=new Set(["application/pdf","image/gif","image/jpeg","image/png","image/webp"]),mD=r.fn("SessionTools.resolve")(function*(e){let t={},n=yield*zt.make(),o=yield*ft.Service,i=yield*Ze.Service,a=yield*$n.Service,l=yield*cn.Service,u=yield*Ve.Service,f=s((p,h)=>({sessionID:e.session.id,abort:h.abortSignal,messageID:e.processor.message.id,callID:h.toolCallId,extra:{model:e.model,bypassAgentCheck:e.bypassAgentCheck,promptOps:e.promptOps},agent:e.agent.name,messages:e.messages,metadata:s(g=>e.processor.updateToolCall(h.toolCallId,I=>["running","pending"].includes(I.state.status)?{...I,state:{title:g.title,metadata:g.metadata,status:"running",input:p,time:I.state.status==="running"?I.state.time:{start:Date.now()}}}:I),"metadata"),ask:s(g=>i.ask({...g,sessionID:e.session.id,tool:{messageID:e.processor.message.id,callID:h.toolCallId},ruleset:Ze.merge(e.agent.permission,e.session.permission??[])}).pipe(r.orDie),"ask")}),"context");for(let p of yield*a.tools({modelID:po.ID.make(e.model.api.id),providerID:e.model.providerID,agent:e.agent,permission:e.session.permission})){let h=et.schema(e.model,Mo.fromTool(p));t[p.id]={description:p.description,inputSchema:yn(h),execute(g,I){return Ht.run(e.gate,()=>n.promise(r.gen(function*(){let T=f(g,I);yield*o.trigger("tool.execute.before",{tool:p.id,sessionID:T.sessionID,callID:T.callID},{args:g});let v=yield*p.execute(g,T),P={...v,attachments:v.attachments?.map(d=>({...d,id:We.ascending(),sessionID:T.sessionID,messageID:e.processor.message.id}))};return yield*o.trigger("tool.execute.after",{tool:p.id,sessionID:T.sessionID,callID:T.callID,args:g},P),I.abortSignal?.aborted&&(yield*e.processor.completeToolCall(I.toolCallId,P)),P})))}}}if(Object.values(yield*l.clients()).some(p=>!!p.getServerCapabilities()?.resources)&&(t[qn.list]={description:"Lists resources provided by connected MCP servers. Resources provide context such as files, database schemas, or application-specific information.",inputSchema:yn(et.schema(e.model,{type:"object",properties:{server:{type:"string",description:"Optional MCP server name. When omitted, lists resources from every connected server."}},additionalProperties:!1})),execute(p,h){return n.promise(r.gen(function*(){let g=Wh(p),I=f(_s(p),h),T=yield*l.clients(),v=Object.entries(T).filter(E=>!!E[1].getServerCapabilities()?.resources).map(E=>E[0]).sort((E,w)=>E.localeCompare(w));if(g.server&&!v.includes(g.server))throw new Error(v.length===0?`MCP server "${g.server}" does not support resources`:`MCP server "${g.server}" does not support resources. Available resource servers: ${v.join(", ")}`);let P=g.server?[`mcp:${g.server}:*`]:v.map(E=>`mcp:${E}:*`);yield*o.trigger("tool.execute.before",{tool:qn.list,sessionID:I.sessionID,callID:h.toolCallId},{args:p}),yield*I.ask({permission:"read",metadata:g.server?{server:g.server}:{},patterns:P,always:P});let k=Object.values(yield*l.resources(g.server)).filter(E=>!g.server||E.client===g.server).toSorted((E,w)=>(E.client+"\0"+E.name+"\0"+E.uri).localeCompare(w.client+"\0"+w.name+"\0"+w.uri)),y=JSON.stringify({resources:k.map(gD)},null,2),x={title:g.server?`MCP resources: ${g.server}`:"MCP resources",metadata:{count:k.length,servers:v,...g.server?{server:g.server}:{}},output:y};return yield*o.trigger("tool.execute.after",{tool:qn.list,sessionID:I.sessionID,callID:h.toolCallId,args:p},x),h.abortSignal?.aborted&&(yield*e.processor.completeToolCall(h.toolCallId,x)),x}))}},t[qn.listTemplates]={description:"Lists resource templates provided by connected MCP servers. Resource templates are parameterized resources that can be read after filling in their URI template.",inputSchema:yn(et.schema(e.model,{type:"object",properties:{server:{type:"string",description:"Optional MCP server name. When omitted, lists resource templates from every connected server."}},additionalProperties:!1})),execute(p,h){return n.promise(r.gen(function*(){let g=Wh(p),I=f(_s(p),h),T=yield*l.clients(),v=Object.entries(T).filter(E=>!!E[1].getServerCapabilities()?.resources).map(E=>E[0]).sort((E,w)=>E.localeCompare(w));if(g.server&&!v.includes(g.server))throw new Error(v.length===0?`MCP server "${g.server}" does not support resources`:`MCP server "${g.server}" does not support resources. Available resource servers: ${v.join(", ")}`);let P=g.server?[`mcp:${g.server}:*`]:v.map(E=>`mcp:${E}:*`);yield*o.trigger("tool.execute.before",{tool:qn.listTemplates,sessionID:I.sessionID,callID:h.toolCallId},{args:p}),yield*I.ask({permission:"read",metadata:g.server?{server:g.server}:{},patterns:P,always:P});let k=Object.values(yield*l.resourceTemplates(g.server)).filter(E=>!g.server||E.client===g.server).toSorted((E,w)=>(E.client+"\0"+E.name+"\0"+E.uriTemplate).localeCompare(w.client+"\0"+w.name+"\0"+w.uriTemplate)),y=JSON.stringify({resourceTemplates:k.map(yD)},null,2),x={title:g.server?`MCP resource templates: ${g.server}`:"MCP resource templates",metadata:{count:k.length,servers:v,...g.server?{server:g.server}:{}},output:y};return yield*o.trigger("tool.execute.after",{tool:qn.listTemplates,sessionID:I.sessionID,callID:h.toolCallId,args:p},x),h.abortSignal?.aborted&&(yield*e.processor.completeToolCall(h.toolCallId,x)),x}))}},t[qn.read]={description:"Read a specific resource from an MCP server using the server name and resource URI. The URI is an MCP identifier and does not need to be a file URL.",inputSchema:yn(et.schema(e.model,{type:"object",properties:{server:{type:"string",description:"MCP server name exactly as returned by list_mcp_resources."},uri:{type:"string",description:"Resource URI to read. Use the exact URI string returned by list_mcp_resources."}},required:["server","uri"],additionalProperties:!1})),execute(p,h){return n.promise(r.gen(function*(){let g=hD(p),I=f(_s(p),h),v=(yield*l.clients())[g.server];if(!v)throw new Error(`MCP server "${g.server}" is not connected`);if(!v.getServerCapabilities()?.resources)throw new Error(`MCP server "${g.server}" does not support resources`);yield*o.trigger("tool.execute.before",{tool:qn.read,sessionID:I.sessionID,callID:h.toolCallId},{args:p}),yield*I.ask({permission:"read",metadata:{server:g.server,uri:g.uri},patterns:[`mcp:${g.server}:${g.uri}`],always:[`mcp:${g.server}:*`]});let P=yield*l.readResource(g.server,g.uri);if(!P)throw new Error(`Failed to read MCP resource: ${g.server}/${g.uri}`);let d=bD(g.server,g.uri,P),k={title:`MCP resource: ${g.uri}`,metadata:{server:g.server,uri:g.uri,contents:d.contents,attachments:d.attachments.length},output:d.text,attachments:d.attachments.map(y=>({...y,id:We.ascending(),sessionID:I.sessionID,messageID:e.processor.message.id}))};return yield*o.trigger("tool.execute.after",{tool:qn.read,sessionID:I.sessionID,callID:h.toolCallId,args:p},k),h.abortSignal?.aborted&&(yield*e.processor.completeToolCall(h.toolCallId,k)),k}))}}),u.experimentalCodeMode)return t;for(let[p,h]of Object.entries(yield*l.tools())){let g=gi.convertTool(h.def,h.client,h.timeout),I=g.execute;if(!I)continue;let T=yield*r.promise(()=>Promise.resolve(fi(g.inputSchema).jsonSchema)),v=et.schema(e.model,{...T,properties:T.properties??{}});g.inputSchema=yn(v),g.execute=(P,d)=>Ht.run(e.gate,()=>n.promise(r.gen(function*(){let k=f(P,d);yield*o.trigger("tool.execute.before",{tool:p,sessionID:k.sessionID,callID:d.toolCallId},{args:P});let y=yield*r.gen(function*(){yield*k.ask({permission:p,metadata:{},patterns:["*"],always:["*"]});let M={sessionId:k.sessionID,messageId:e.processor.message.id};return yield*r.promise(()=>I(P,{...d,callContext:M}))}).pipe(r.withSpan("Tool.execute",{attributes:{"tool.name":p,"tool.call_id":d.toolCallId,"session.id":k.sessionID,"message.id":e.processor.message.id}}));yield*o.trigger("tool.execute.after",{tool:p,sessionID:k.sessionID,callID:d.toolCallId,args:P},y);let x=[],E=[];for(let M of y.content)if(M.type==="text")x.push(M.text);else if(M.type==="image")E.push({type:"file",mime:M.mimeType,url:`data:${M.mimeType};base64,${M.data}`});else if(M.type==="resource"){let{resource:C}=M;if(C.text&&x.push(C.text),C.blob){let $=C.mimeType??"application/octet-stream",U=Hh(C.blob);if(!zh.has($)){x.push(`[Binary MCP resource omitted: ${C.uri} (${$}, ${Ur(U)}) is not a supported attachment type]`);continue}if(U>Sa){x.push(`[Binary MCP resource omitted: ${C.uri} (${$}, ${Ur(U)}) exceeds ${Ur(Sa)}]`);continue}E.push({type:"file",mime:$,url:`data:${$};base64,${C.blob}`,filename:C.uri})}}let w={title:"",metadata:{...y.metadata},output:x.join(`
1462
+ A plan file exists at ${h}. You should execute on the plan defined within it`:xa,synthetic:!0});return i.parts.push(I),e.messages}if(e.agent.name!=="plan"||a?.info.agent==="plan")return e.messages;let l=yield*V.context,u=me.plan(e.session,l),f=yield*n.existsSafe(u);f||(yield*n.ensureDir(fD.dirname(u)).pipe(r.catch(r.die)));let m=yield*o.updatePart({id:We.ascending(),messageID:i.info.id,sessionID:i.info.sessionID,type:"text",text:qh.replace("${planInfo}",()=>f?`A plan file already exists at ${u}. You can read it and make incremental edits using the edit tool.`:`No plan file exists yet. You should create your plan at ${u} using the write tool.`),synthetic:!0});return i.parts.push(m),e.messages});var Os={};fe(Os,{SessionTools:()=>Os,resolve:()=>hD});var qn={list:"list_mcp_resources",listTemplates:"list_mcp_resource_templates",read:"read_mcp_resource"},Sa=10*1024*1024,zh=new Set(["application/pdf","image/gif","image/jpeg","image/png","image/webp"]),hD=r.fn("SessionTools.resolve")(function*(e){let t={},n=yield*zt.make(),o=yield*ft.Service,i=yield*Ze.Service,a=yield*$n.Service,l=yield*cn.Service,u=yield*Ve.Service,f=s((p,h)=>({sessionID:e.session.id,abort:h.abortSignal,messageID:e.processor.message.id,callID:h.toolCallId,extra:{model:e.model,bypassAgentCheck:e.bypassAgentCheck,promptOps:e.promptOps},agent:e.agent.name,messages:e.messages,metadata:s(g=>e.processor.updateToolCall(h.toolCallId,I=>["running","pending"].includes(I.state.status)?{...I,state:{title:g.title,metadata:g.metadata,status:"running",input:p,time:I.state.status==="running"?I.state.time:{start:Date.now()}}}:I),"metadata"),ask:s(g=>i.ask({...g,sessionID:e.session.id,tool:{messageID:e.processor.message.id,callID:h.toolCallId},ruleset:Ze.merge(e.agent.permission,e.session.permission??[])}).pipe(r.orDie),"ask")}),"context");for(let p of yield*a.tools({modelID:po.ID.make(e.model.api.id),providerID:e.model.providerID,agent:e.agent,permission:e.session.permission})){let h=et.schema(e.model,Mo.fromTool(p));t[p.id]={description:p.description,inputSchema:yn(h),execute(g,I){return Ht.run(e.gate,()=>n.promise(r.gen(function*(){let T=f(g,I);yield*o.trigger("tool.execute.before",{tool:p.id,sessionID:T.sessionID,callID:T.callID},{args:g});let v=yield*p.execute(g,T),P={...v,attachments:v.attachments?.map(d=>({...d,id:We.ascending(),sessionID:T.sessionID,messageID:e.processor.message.id}))};return yield*o.trigger("tool.execute.after",{tool:p.id,sessionID:T.sessionID,callID:T.callID,args:g},P),I.abortSignal?.aborted&&(yield*e.processor.completeToolCall(I.toolCallId,P)),P})))}}}if(Object.values(yield*l.clients()).some(p=>!!p.getServerCapabilities()?.resources)&&(t[qn.list]={description:"Lists resources provided by connected MCP servers. Resources provide context such as files, database schemas, or application-specific information.",inputSchema:yn(et.schema(e.model,{type:"object",properties:{server:{type:"string",description:"Optional MCP server name. When omitted, lists resources from every connected server."}},additionalProperties:!1})),execute(p,h){return n.promise(r.gen(function*(){let g=Wh(p),I=f(_s(p),h),T=yield*l.clients(),v=Object.entries(T).filter(E=>!!E[1].getServerCapabilities()?.resources).map(E=>E[0]).sort((E,w)=>E.localeCompare(w));if(g.server&&!v.includes(g.server))throw new Error(v.length===0?`MCP server "${g.server}" does not support resources`:`MCP server "${g.server}" does not support resources. Available resource servers: ${v.join(", ")}`);let P=g.server?[`mcp:${g.server}:*`]:v.map(E=>`mcp:${E}:*`);yield*o.trigger("tool.execute.before",{tool:qn.list,sessionID:I.sessionID,callID:h.toolCallId},{args:p}),yield*I.ask({permission:"read",metadata:g.server?{server:g.server}:{},patterns:P,always:P});let k=Object.values(yield*l.resources(g.server)).filter(E=>!g.server||E.client===g.server).toSorted((E,w)=>(E.client+"\0"+E.name+"\0"+E.uri).localeCompare(w.client+"\0"+w.name+"\0"+w.uri)),y=JSON.stringify({resources:k.map(yD)},null,2),S={title:g.server?`MCP resources: ${g.server}`:"MCP resources",metadata:{count:k.length,servers:v,...g.server?{server:g.server}:{}},output:y};return yield*o.trigger("tool.execute.after",{tool:qn.list,sessionID:I.sessionID,callID:h.toolCallId,args:p},S),h.abortSignal?.aborted&&(yield*e.processor.completeToolCall(h.toolCallId,S)),S}))}},t[qn.listTemplates]={description:"Lists resource templates provided by connected MCP servers. Resource templates are parameterized resources that can be read after filling in their URI template.",inputSchema:yn(et.schema(e.model,{type:"object",properties:{server:{type:"string",description:"Optional MCP server name. When omitted, lists resource templates from every connected server."}},additionalProperties:!1})),execute(p,h){return n.promise(r.gen(function*(){let g=Wh(p),I=f(_s(p),h),T=yield*l.clients(),v=Object.entries(T).filter(E=>!!E[1].getServerCapabilities()?.resources).map(E=>E[0]).sort((E,w)=>E.localeCompare(w));if(g.server&&!v.includes(g.server))throw new Error(v.length===0?`MCP server "${g.server}" does not support resources`:`MCP server "${g.server}" does not support resources. Available resource servers: ${v.join(", ")}`);let P=g.server?[`mcp:${g.server}:*`]:v.map(E=>`mcp:${E}:*`);yield*o.trigger("tool.execute.before",{tool:qn.listTemplates,sessionID:I.sessionID,callID:h.toolCallId},{args:p}),yield*I.ask({permission:"read",metadata:g.server?{server:g.server}:{},patterns:P,always:P});let k=Object.values(yield*l.resourceTemplates(g.server)).filter(E=>!g.server||E.client===g.server).toSorted((E,w)=>(E.client+"\0"+E.name+"\0"+E.uriTemplate).localeCompare(w.client+"\0"+w.name+"\0"+w.uriTemplate)),y=JSON.stringify({resourceTemplates:k.map(bD)},null,2),S={title:g.server?`MCP resource templates: ${g.server}`:"MCP resource templates",metadata:{count:k.length,servers:v,...g.server?{server:g.server}:{}},output:y};return yield*o.trigger("tool.execute.after",{tool:qn.listTemplates,sessionID:I.sessionID,callID:h.toolCallId,args:p},S),h.abortSignal?.aborted&&(yield*e.processor.completeToolCall(h.toolCallId,S)),S}))}},t[qn.read]={description:"Read a specific resource from an MCP server using the server name and resource URI. The URI is an MCP identifier and does not need to be a file URL.",inputSchema:yn(et.schema(e.model,{type:"object",properties:{server:{type:"string",description:"MCP server name exactly as returned by list_mcp_resources."},uri:{type:"string",description:"Resource URI to read. Use the exact URI string returned by list_mcp_resources."}},required:["server","uri"],additionalProperties:!1})),execute(p,h){return n.promise(r.gen(function*(){let g=gD(p),I=f(_s(p),h),v=(yield*l.clients())[g.server];if(!v)throw new Error(`MCP server "${g.server}" is not connected`);if(!v.getServerCapabilities()?.resources)throw new Error(`MCP server "${g.server}" does not support resources`);yield*o.trigger("tool.execute.before",{tool:qn.read,sessionID:I.sessionID,callID:h.toolCallId},{args:p}),yield*I.ask({permission:"read",metadata:{server:g.server,uri:g.uri},patterns:[`mcp:${g.server}:${g.uri}`],always:[`mcp:${g.server}:*`]});let P=yield*l.readResource(g.server,g.uri);if(!P)throw new Error(`Failed to read MCP resource: ${g.server}/${g.uri}`);let d=wD(g.server,g.uri,P),k={title:`MCP resource: ${g.uri}`,metadata:{server:g.server,uri:g.uri,contents:d.contents,attachments:d.attachments.length},output:d.text,attachments:d.attachments.map(y=>({...y,id:We.ascending(),sessionID:I.sessionID,messageID:e.processor.message.id}))};return yield*o.trigger("tool.execute.after",{tool:qn.read,sessionID:I.sessionID,callID:h.toolCallId,args:p},k),h.abortSignal?.aborted&&(yield*e.processor.completeToolCall(h.toolCallId,k)),k}))}}),u.experimentalCodeMode)return t;for(let[p,h]of Object.entries(yield*l.tools())){let g=gi.convertTool(h.def,h.client,h.timeout),I=g.execute;if(!I)continue;let T=yield*r.promise(()=>Promise.resolve(fi(g.inputSchema).jsonSchema)),v=et.schema(e.model,{...T,properties:T.properties??{}});g.inputSchema=yn(v),g.execute=(P,d)=>Ht.run(e.gate,()=>n.promise(r.gen(function*(){let k=f(P,d);yield*o.trigger("tool.execute.before",{tool:p,sessionID:k.sessionID,callID:d.toolCallId},{args:P});let y=yield*r.gen(function*(){yield*k.ask({permission:p,metadata:{},patterns:["*"],always:["*"]});let M={sessionId:k.sessionID,messageId:e.processor.message.id};return yield*r.promise(()=>I(P,{...d,callContext:M}))}).pipe(r.withSpan("Tool.execute",{attributes:{"tool.name":p,"tool.call_id":d.toolCallId,"session.id":k.sessionID,"message.id":e.processor.message.id}}));yield*o.trigger("tool.execute.after",{tool:p,sessionID:k.sessionID,callID:d.toolCallId,args:P},y);let S=[],E=[];for(let M of y.content)if(M.type==="text")S.push(M.text);else if(M.type==="image")E.push({type:"file",mime:M.mimeType,url:`data:${M.mimeType};base64,${M.data}`});else if(M.type==="resource"){let{resource:C}=M;if(C.text&&S.push(C.text),C.blob){let $=C.mimeType??"application/octet-stream",U=Hh(C.blob);if(!zh.has($)){S.push(`[Binary MCP resource omitted: ${C.uri} (${$}, ${Ur(U)}) is not a supported attachment type]`);continue}if(U>Sa){S.push(`[Binary MCP resource omitted: ${C.uri} (${$}, ${Ur(U)}) exceeds ${Ur(Sa)}]`);continue}E.push({type:"file",mime:$,url:`data:${$};base64,${C.blob}`,filename:C.uri})}}let w={title:"",metadata:{...y.metadata},output:S.join(`
1463
1463
 
1464
- `),attachments:E.map(M=>({...M,id:We.ascending(),sessionID:k.sessionID,messageID:e.processor.message.id})),content:y.content};return d.abortSignal?.aborted&&(yield*e.processor.completeToolCall(d.toolCallId,w)),w}))),t[p]=g}return t});function _s(e){return pt(e)?e:{}}s(_s,"toRecord");function Wh(e){let t=_s(e);return{server:Gh(t,"server")}}s(Wh,"parseListMcpResourcesArgs");function hD(e){let t=_s(e);return{server:Vh(t,"server"),uri:Vh(t,"uri")}}s(hD,"parseReadMcpResourceArgs");function Gh(e,t){let n=e[t];if(!(n==null||n==="")){if(typeof n!="string")throw new Error(`${t} must be a string`);return n}}s(Gh,"optionalString");function Vh(e,t){let n=Gh(e,t);if(n)return n;throw new Error(`${t} is required`)}s(Vh,"requiredString");function gD(e){return{...Object.fromEntries(Object.entries(e).filter(n=>n[0]!=="client")),server:e.client}}s(gD,"formatMcpResource");function yD(e){return{...Object.fromEntries(Object.entries(e).filter(n=>n[0]!=="client")),server:e.client}}s(yD,"formatMcpResourceTemplate");function bD(e,t,n){let o=(Array.isArray(n.contents)?n.contents:[n.contents]).filter(pt),i=[],a=[];for(let l of o){let u=typeof l.uri=="string"?l.uri:t,f=typeof l.mimeType=="string"?l.mimeType:"application/octet-stream";if(typeof l.text=="string"){i.push(`Resource: ${u}
1464
+ `),attachments:E.map(M=>({...M,id:We.ascending(),sessionID:k.sessionID,messageID:e.processor.message.id})),content:y.content};return d.abortSignal?.aborted&&(yield*e.processor.completeToolCall(d.toolCallId,w)),w}))),t[p]=g}return t});function _s(e){return pt(e)?e:{}}s(_s,"toRecord");function Wh(e){let t=_s(e);return{server:Gh(t,"server")}}s(Wh,"parseListMcpResourcesArgs");function gD(e){let t=_s(e);return{server:Vh(t,"server"),uri:Vh(t,"uri")}}s(gD,"parseReadMcpResourceArgs");function Gh(e,t){let n=e[t];if(!(n==null||n==="")){if(typeof n!="string")throw new Error(`${t} must be a string`);return n}}s(Gh,"optionalString");function Vh(e,t){let n=Gh(e,t);if(n)return n;throw new Error(`${t} is required`)}s(Vh,"requiredString");function yD(e){return{...Object.fromEntries(Object.entries(e).filter(n=>n[0]!=="client")),server:e.client}}s(yD,"formatMcpResource");function bD(e){return{...Object.fromEntries(Object.entries(e).filter(n=>n[0]!=="client")),server:e.client}}s(bD,"formatMcpResourceTemplate");function wD(e,t,n){let o=(Array.isArray(n.contents)?n.contents:[n.contents]).filter(pt),i=[],a=[];for(let l of o){let u=typeof l.uri=="string"?l.uri:t,f=typeof l.mimeType=="string"?l.mimeType:"application/octet-stream";if(typeof l.text=="string"){i.push(`Resource: ${u}
1465
1465
  MIME: ${f}
1466
1466
  ${l.text}`);continue}if(typeof l.blob=="string"){let m=Hh(l.blob);if(!zh.has(f)){i.push(`[Binary MCP resource omitted: ${u} (${f}, ${Ur(m)}) is not a supported attachment type]`);continue}if(m>Sa){i.push(`[Binary MCP resource omitted: ${u} (${f}, ${Ur(m)}) exceeds ${Ur(Sa)}]`);continue}i.push(`[Binary MCP resource attached: ${u} (${f})]`),a.push({type:"file",mime:f,url:`data:${f};base64,${l.blob}`,filename:u});continue}i.push(`[MCP resource content without text or blob: ${u}]`)}return{contents:o.length,attachments:a,text:i.join(`
1467
1467
 
1468
- `)||`MCP resource ${t} from ${e} returned no contents.`}}s(bD,"formatMcpResourceContent");function Hh(e){let t=e.replace(/\s/g,""),n=t.endsWith("==")?2:t.endsWith("=")?1:0;return Math.max(0,Math.floor(t.length*3/4)-n)}s(Hh,"base64Size");function Ur(e){return e<1024?`${e} B`:e<1024*1024?`${Math.ceil(e/1024)} KB`:`${Math.ceil(e/(1024*1024))} MB`}s(Ur,"formatBytes");var wD=new Set(["inbox-chat","via-herald"]);function Yh(e){let t=e.map(n=>n?.metadata?.alchemy?.kind).filter(n=>typeof n=="string"&&n.length>0);return t.length===0?!0:t.some(n=>wD.has(n))}s(Yh,"writtenByAPerson");var vD="[from AlchemyLab, not a user message]";function Jh(e){let t=e.startsWith(vD);return["<system-reminder>",t?"This note reached you while you worked:":"The user sent the following message:",e,"",t?"Take it into account and continue with your tasks.":"Please address this message and continue with your tasks.","</system-reminder>"].join(`
1469
- `)}s(Jh,"raisedMidTurn");var xD=/\bto=functions\.|^\s*functions\.[A-Za-z_]+\s*[({]/m;function Kh(e){let t=e.filter(a=>a.type==="text"),n=t.filter(a=>(a.text??"").trim().length>0&&!xD.test(a.text??"")),o=n.length>0?n[n.length-1]:void 0,i=e.filter(a=>a.type==="tool").map(a=>a.id);return{drop:[...t.filter(a=>a!==o).map(a=>a.id),...i],answered:o!==void 0}}s(Kh,"asideTextToDrop");function Xh(e){let t=e.filter(i=>!(i.info.role==="assistant"&&i.info.aside)&&!(i.info.role==="user"&&i.info.quiet)),n=nt.latest(t),o=n.user?void 0:nt.latest(e.filter(i=>i.info.role==="user")).user;return{lastUser:n.user??o,lastAssistant:n.assistant,lastFinished:n.finished,tasks:n.tasks}}s(Xh,"scanForLoop");import Qh from"fs";import SD from"path";var Ia={info:s((e,t)=>process.stderr.write(`level=INFO service=session.pause message=${JSON.stringify(e)} ${JSON.stringify(t??{})}
1468
+ `)||`MCP resource ${t} from ${e} returned no contents.`}}s(wD,"formatMcpResourceContent");function Hh(e){let t=e.replace(/\s/g,""),n=t.endsWith("==")?2:t.endsWith("=")?1:0;return Math.max(0,Math.floor(t.length*3/4)-n)}s(Hh,"base64Size");function Ur(e){return e<1024?`${e} B`:e<1024*1024?`${Math.ceil(e/1024)} KB`:`${Math.ceil(e/(1024*1024))} MB`}s(Ur,"formatBytes");var vD=new Set(["inbox-chat","via-herald"]);function Yh(e){let t=e.map(n=>n?.metadata?.alchemy?.kind).filter(n=>typeof n=="string"&&n.length>0);return t.length===0?!0:t.some(n=>vD.has(n))}s(Yh,"writtenByAPerson");var xD="[from AlchemyLab, not a user message]";function Jh(e){let t=e.startsWith(xD);return["<system-reminder>",t?"This note reached you while you worked:":"The user sent the following message:",e,"",t?"Take it into account and continue with your tasks.":"Please address this message and continue with your tasks.","</system-reminder>"].join(`
1469
+ `)}s(Jh,"raisedMidTurn");var SD=/\bto=functions\.|^\s*functions\.[A-Za-z_]+\s*[({]/m;function Kh(e){let t=e.filter(a=>a.type==="text"),n=t.filter(a=>(a.text??"").trim().length>0&&!SD.test(a.text??"")),o=n.length>0?n[n.length-1]:void 0,i=e.filter(a=>a.type==="tool").map(a=>a.id);return{drop:[...t.filter(a=>a!==o).map(a=>a.id),...i],answered:o!==void 0}}s(Kh,"asideTextToDrop");function Xh(e){let t=e.filter(i=>!(i.info.role==="assistant"&&i.info.aside)&&!(i.info.role==="user"&&i.info.quiet)),n=nt.latest(t),o=n.user?void 0:nt.latest(e.filter(i=>i.info.role==="user")).user;return{lastUser:n.user??o,lastAssistant:n.assistant,lastFinished:n.finished,tasks:n.tasks}}s(Xh,"scanForLoop");function Qh(e){if(!e||e.info.role!=="assistant")return!1;let t=e.parts.filter(n=>n.type==="tool");return t.length===0||t.some(n=>n.state.status!=="completed")?!1:t.some(n=>n.state.status==="completed"&&n.state.metadata?.endsTurn===!0)}s(Qh,"endsTurnHere");import Zh from"fs";import ID from"path";var Ia={info:s((e,t)=>process.stderr.write(`level=INFO service=session.pause message=${JSON.stringify(e)} ${JSON.stringify(t??{})}
1470
1470
  `),"info"),warn:s((e,t)=>process.stderr.write(`level=WARN service=session.pause message=${JSON.stringify(e)} ${JSON.stringify(t??{})}
1471
- `),"warn")},Zh=SD.join(Se.Path.state,"pause.json"),Uo=!1,Fo=new Set;try{let e=JSON.parse(Qh.readFileSync(Zh,"utf8"));Uo=e?.paused===!0;for(let t of Array.isArray(e?.waiting)?e.waiting:[])typeof t=="string"&&Fo.add(t)}catch{}function ld(){try{Qh.writeFileSync(Zh,JSON.stringify({paused:Uo,waiting:[...Fo]}))}catch(e){Ia.warn("could not save the pause state",{error:String(e)})}}s(ld,"save");var Bo;(a=>{function e(){return Uo}a.isPaused=e,s(e,"isPaused");function t(l){Fo.has(l)||(Fo.add(l),Ia.info("turn held while paused",{sessionID:l}),ld())}a.hold=t,s(t,"hold");function n(){Uo||(Uo=!0,Ia.info("paused"),ld())}a.pause=n,s(n,"pause");function o(){let l=[...Fo];return Uo=!1,Fo.clear(),Ia.info("resumed",{waiting:l.length}),ld(),l}a.resume=o,s(o,"resume");function i(){return{paused:Uo,waiting:[...Fo]}}a.state=i,s(i,"state")})(Bo||={});globalThis.AI_SDK_LOG_WARNINGS=!1;var DD=c.decodeUnknownExit(ut.Info),ED=c.decodeUnknownExit(ut.Part),tg=10*1024*1024,TD=new Set(["application/pdf","image/gif","image/jpeg","image/png","image/webp"]),PD=`Use this tool to return your final response in the requested structured format.
1471
+ `),"warn")},eg=ID.join(Se.Path.state,"pause.json"),Uo=!1,Fo=new Set;try{let e=JSON.parse(Zh.readFileSync(eg,"utf8"));Uo=e?.paused===!0;for(let t of Array.isArray(e?.waiting)?e.waiting:[])typeof t=="string"&&Fo.add(t)}catch{}function ld(){try{Zh.writeFileSync(eg,JSON.stringify({paused:Uo,waiting:[...Fo]}))}catch(e){Ia.warn("could not save the pause state",{error:String(e)})}}s(ld,"save");var Bo;(a=>{function e(){return Uo}a.isPaused=e,s(e,"isPaused");function t(l){Fo.has(l)||(Fo.add(l),Ia.info("turn held while paused",{sessionID:l}),ld())}a.hold=t,s(t,"hold");function n(){Uo||(Uo=!0,Ia.info("paused"),ld())}a.pause=n,s(n,"pause");function o(){let l=[...Fo];return Uo=!1,Fo.clear(),Ia.info("resumed",{waiting:l.length}),ld(),l}a.resume=o,s(o,"resume");function i(){return{paused:Uo,waiting:[...Fo]}}a.state=i,s(i,"state")})(Bo||={});globalThis.AI_SDK_LOG_WARNINGS=!1;var ED=c.decodeUnknownExit(ut.Info),TD=c.decodeUnknownExit(ut.Part),ng=10*1024*1024,PD=new Set(["application/pdf","image/gif","image/jpeg","image/png","image/webp"]),RD=`Use this tool to return your final response in the requested structured format.
1472
1472
 
1473
1473
  IMPORTANT:
1474
1474
  - You MUST call this tool exactly once at the end of your response
1475
1475
  - The input must be valid JSON matching the required schema
1476
1476
  - Complete all necessary research and tool calls BEFORE calling this tool
1477
- - This tool provides your final answer - no further actions are taken after calling it`,RD="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.";function CD(e){let t=e.replace(/\s/g,""),n=t.endsWith("==")?2:t.endsWith("=")?1:0;return Math.max(0,Math.floor(t.length*3/4)-n)}s(CD,"mcpResourceBase64Size");function ud(e){return e<1024?`${e} B`:e<1024*1024?`${Math.ceil(e/1024)} KB`:`${Math.ceil(e/(1024*1024))} MB`}s(ud,"formatMcpResourceBytes");function ng(e){return e.state.status==="error"&&e.state.metadata?.interrupted===!0}s(ng,"isOrphanedInterruptedTool");var Fr=class extends Ce.Service()("@opencode/SessionPrompt"){static{s(this,"Service")}},AD=Pe.effect(Fr,r.gen(function*(){let e=yield*ln.Service,t=yield*me.Service,n=yield*Ft.Service,o=yield*bt.Service,i=yield*jn.Service,a=yield*gr.Service,l=yield*ft.Service,u=yield*yi.Service,f=yield*Ne.Service,m=yield*Ze.Service,p=yield*Me.Service,h=yield*cn.Service,g=yield*mt.Service,I=yield*$n.Service,T=yield*Qn.Service,v=yield*bn.Service,P=yield*qd.ChildProcessSpawner,d=yield*Et.Scope,k=yield*En.Service,y=yield*Ln.Service,x=yield*br.Service,E=yield*un.Service,w=yield*to.Service,M=yield*dn.Service,C=yield*Ee.Service,$=yield*Ve.Service,U=yield*tt.Service,{db:H}=U,ue=r.fn("SessionPrompt.ops")(function*(){return{cancel:s(S=>L(S),"cancel"),resolvePromptParts:s(S=>A(S),"resolvePromptParts"),prompt:s(S=>Le(S).pipe(r.catch(r.die)),"prompt")}}),L=r.fn("SessionPrompt.cancel")(function*(S){yield*r.logInfo("cancel",{"session.id":S}),yield*y.cancel(S)}),W=new Map,D=r.fn("SessionPrompt.stopForPause")(function*(){let S=yield*y.busy();for(let G of S)Bo.hold(G);return yield*r.forEach(S,G=>y.cancel(G),{concurrency:"unbounded",discard:!0}),S}),A=r.fn("SessionPrompt.resolvePromptParts")(function*(S){let G=yield*V.context,ye=[{type:"text",text:S}],le=Xa.files(S),ne=new Set;return yield*r.forEach(le,r.fnUntraced(function*(re){let se=re[1];if(!se||ne.has(se))return;ne.add(se);let X=se.startsWith("~/")?eg.join(ID.homedir(),se.slice(2)):eg.resolve(G.worktree,se),je=yield*p.stat(X).pipe(r.option);if(xn.isNone(je)){let Fe=yield*n.get(se);Fe&&ye.push({type:"agent",name:Fe.name});return}let qe=je.value;ye.push({type:"file",url:kD(X).href,filename:se,mime:qe.type==="Directory"?"application/x-directory":"text/plain"})}),{concurrency:"unbounded",discard:!0}),ye}),_=r.fn("SessionPrompt.ensureTitle")(function*(S){if(S.session.parentID||!me.isDefaultTitle(S.session.title))return;let G=s(z=>z.info.role==="user"&&!z.parts.every(b=>"synthetic"in b&&b.synthetic),"real"),ye=S.history.findIndex(G);if(ye===-1||S.history.filter(G).length!==1)return;let le=S.history.slice(0,ye+1),ne=le[ye];if(!ne||ne.info.role!=="user")return;let re=ne.info,se=ne.parts.filter(z=>z.type==="subtask"),X=se.length>0&&ne.parts.every(z=>z.type==="subtask"),je=yield*n.get("title");if(!je)return;let qe=je.model?yield*o.getModel(je.model.providerID,je.model.modelID):(yield*o.getSmallModel(S.providerID))??(yield*o.getModel(S.providerID,S.modelID)),Fe=X?[{role:"user",content:se.map(z=>z.prompt).join(`
1478
- `)}]:yield*nt.toModelMessagesEffect(le,qe),xe=(yield*M.stream({agent:je,user:re,system:[],small:!0,tools:{},model:qe,sessionID:S.session.id,retries:2,messages:[{role:"user",content:`Generate a title for this conversation:
1479
- `},...Fe]}).pipe(jd(st.is.textDelta),Od(z=>z.text),$d,r.orDie)).replace(/<think>[\s\S]*?<\/think>\s*/g,"").split(`
1480
- `).map(z=>z.trim()).find(z=>z.length>0);if(!xe)return;let Be=xe.length>100?xe.substring(0,97)+"...":xe;yield*t.setTitle({sessionID:S.session.id,title:Be}).pipe(r.catchCause(z=>r.logError("failed to generate title",{error:ot.squash(z)})))}),N=r.fn("SessionPrompt.handleSubtask")(function*(S){let{task:G,model:ye,lastUser:le,sessionID:ne,session:re,msgs:se}=S,X=yield*V.context,je=yield*ue(),{task:qe}=yield*I.named(),Fe=G.model?yield*j(G.model.providerID,G.model.modelID,ne):ye,Xe=yield*t.updateMessage({id:ct.ascending(),role:"assistant",parentID:le.id,sessionID:ne,mode:G.agent,agent:G.agent,variant:le.model.variant,path:{cwd:X.directory,root:X.worktree},cost:0,tokens:{input:0,output:0,reasoning:0,cache:{read:0,write:0}},modelID:Fe.id,providerID:Fe.providerID,time:{created:Date.now()}}),xe=yield*t.updatePart({id:We.ascending(),messageID:Xe.id,sessionID:Xe.sessionID,type:"tool",callID:cd(),tool:_o.id,state:{status:"running",input:{prompt:G.prompt,description:G.description,subagent_type:G.agent,command:G.command},time:{start:Date.now()}}}),Be={prompt:G.prompt,description:G.description,subagent_type:G.agent,command:G.command};yield*l.trigger("tool.execute.before",{tool:_o.id,sessionID:ne,callID:xe.id},{args:Be});let z=yield*n.get(G.agent);if(!z){let ce=(yield*n.list()).filter(Q=>!Q.hidden).map(Q=>Q.name),de=ce.length?` Available agents: ${ce.join(", ")}`:"",K=new kn.Unknown({message:`Agent not found: "${G.agent}".${de}`});throw yield*C.publish(me.Event.Error,{sessionID:ne,error:K.toObject()}),K}let b,O=new AbortController,F=yield*qe.execute(Be,{agent:G.agent,messageID:Xe.id,sessionID:ne,abort:O.signal,callID:xe.callID,extra:{bypassAgentCheck:!0,promptOps:je},messages:se,metadata:s(ce=>r.gen(function*(){xe=yield*t.updatePart({...xe,type:"tool",state:{...xe.state,...ce}})}),"metadata"),ask:s(ce=>m.ask({...ce,sessionID:ne,ruleset:Ze.merge(z.permission,re.permission??[])}).pipe(r.orDie),"ask")}).pipe(r.catchCause(ce=>{let de=ot.squash(ce);return b=de instanceof Error?de:new Error(String(de)),r.logError("subtask execution failed",{error:b,agent:G.agent,description:G.description})}),r.onInterrupt(()=>r.gen(function*(){O.abort(),Xe.finish="tool-calls",Xe.time.completed=Date.now(),yield*t.updateMessage(Xe),xe.state.status==="running"&&(yield*t.updatePart({...xe,state:{status:"error",error:"Cancelled",time:{start:xe.state.time.start,end:Date.now()},metadata:xe.state.metadata,input:xe.state.input}}))}))),Z=F?.attachments?.map(ce=>({...ce,id:We.ascending(),sessionID:ne,messageID:Xe.id}));if(yield*l.trigger("tool.execute.after",{tool:_o.id,sessionID:ne,callID:xe.id,args:Be},F),Xe.finish="tool-calls",Xe.time.completed=Date.now(),yield*t.updateMessage(Xe),F&&xe.state.status==="running"&&(yield*t.updatePart({...xe,state:{status:"completed",input:xe.state.input,title:F.title,metadata:F.metadata,output:F.output,attachments:Z,time:{...xe.state.time,end:Date.now()}}})),F||(yield*t.updatePart({...xe,state:{status:"error",error:b?`Tool execution failed: ${b.message}`:"Tool execution failed",time:{start:xe.state.status==="running"?xe.state.time.start:Date.now(),end:Date.now()},metadata:xe.state.status==="pending"?void 0:xe.state.metadata,input:xe.state.input}})),!G.command)return;let Oe={id:ct.ascending(),sessionID:ne,role:"user",time:{created:Date.now()},agent:le.agent,model:le.model};yield*t.updateMessage(Oe),yield*t.updatePart({id:We.ascending(),messageID:Oe.id,sessionID:ne,type:"text",text:"Summarize the task tool output above and continue with your task.",synthetic:!0})}),q=r.fn("SessionPrompt.shellImpl")(function*(S,G){return yield*r.uninterruptibleMask(ye=>r.gen(function*(){let le=G?G.open.pipe(r.asVoid):r.void,{msg:ne,part:re,cwd:se}=yield*r.gen(function*(){let z=yield*V.context,b=yield*t.get(S.sessionID).pipe(r.orDie);b.revert&&(yield*x.cleanup(b));let O=yield*n.get(S.agent);if(!O){let Q=(yield*n.list()).filter(Re=>!Re.hidden).map(Re=>Re.name),he=Q.length?` Available agents: ${Q.join(", ")}`:"",ge=new kn.Unknown({message:`Agent not found: "${S.agent}".${he}`});throw yield*C.publish(me.Event.Error,{sessionID:S.sessionID,error:ge.toObject()}),ge}let F=S.model??O.model??(yield*ve(S.sessionID)),Z={id:S.messageID??ct.ascending(),sessionID:S.sessionID,time:{created:Date.now()},role:"user",agent:S.agent,model:{providerID:F.providerID,modelID:F.modelID}};yield*t.updateMessage(Z);let Oe={type:"text",id:We.ascending(),messageID:Z.id,sessionID:S.sessionID,text:"The following tool was executed by the user",synthetic:!0};yield*t.updatePart(Oe);let ce={id:ct.ascending(),sessionID:S.sessionID,parentID:Z.id,mode:S.agent,agent:S.agent,cost:0,path:{cwd:z.directory,root:z.worktree},time:{created:Date.now()},role:"assistant",tokens:{input:0,output:0,reasoning:0,cache:{read:0,write:0}},modelID:F.modelID,providerID:F.providerID};yield*t.updateMessage(ce);let de=Date.now(),K={type:"tool",id:We.ascending(),messageID:ce.id,sessionID:S.sessionID,tool:As.ToolID,callID:cd(),state:{status:"running",time:{start:de},input:{command:S.command}}};return yield*t.updatePart(K),{msg:ce,part:K,cwd:z.directory}}).pipe(r.ensuring(le)),X=yield*f.get(),je=ai.preferred(X.shell),qe=ai.args(je,S.command,se),Fe="",Xe=!1,xe=r.uninterruptible(r.gen(function*(){Xe&&(Fe+=`
1477
+ - This tool provides your final answer - no further actions are taken after calling it`,CD="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.";function AD(e){let t=e.replace(/\s/g,""),n=t.endsWith("==")?2:t.endsWith("=")?1:0;return Math.max(0,Math.floor(t.length*3/4)-n)}s(AD,"mcpResourceBase64Size");function ud(e){return e<1024?`${e} B`:e<1024*1024?`${Math.ceil(e/1024)} KB`:`${Math.ceil(e/(1024*1024))} MB`}s(ud,"formatMcpResourceBytes");function og(e){return e.state.status==="error"&&e.state.metadata?.interrupted===!0}s(og,"isOrphanedInterruptedTool");var Fr=class extends Ce.Service()("@opencode/SessionPrompt"){static{s(this,"Service")}},MD=Pe.effect(Fr,r.gen(function*(){let e=yield*ln.Service,t=yield*me.Service,n=yield*Ft.Service,o=yield*bt.Service,i=yield*jn.Service,a=yield*gr.Service,l=yield*ft.Service,u=yield*yi.Service,f=yield*Ne.Service,m=yield*Ze.Service,p=yield*Me.Service,h=yield*cn.Service,g=yield*mt.Service,I=yield*$n.Service,T=yield*Qn.Service,v=yield*bn.Service,P=yield*qd.ChildProcessSpawner,d=yield*Et.Scope,k=yield*En.Service,y=yield*Ln.Service,S=yield*br.Service,E=yield*un.Service,w=yield*to.Service,M=yield*dn.Service,C=yield*Ee.Service,$=yield*Ve.Service,U=yield*tt.Service,{db:H}=U,ue=r.fn("SessionPrompt.ops")(function*(){return{cancel:s(x=>L(x),"cancel"),resolvePromptParts:s(x=>A(x),"resolvePromptParts"),prompt:s(x=>Le(x).pipe(r.catch(r.die)),"prompt")}}),L=r.fn("SessionPrompt.cancel")(function*(x){yield*r.logInfo("cancel",{"session.id":x}),yield*y.cancel(x)}),W=new Map,D=r.fn("SessionPrompt.stopForPause")(function*(){let x=yield*y.busy();for(let G of x)Bo.hold(G);return yield*r.forEach(x,G=>y.cancel(G),{concurrency:"unbounded",discard:!0}),x}),A=r.fn("SessionPrompt.resolvePromptParts")(function*(x){let G=yield*V.context,ye=[{type:"text",text:x}],le=Xa.files(x),ne=new Set;return yield*r.forEach(le,r.fnUntraced(function*(re){let se=re[1];if(!se||ne.has(se))return;ne.add(se);let K=se.startsWith("~/")?tg.join(kD.homedir(),se.slice(2)):tg.resolve(G.worktree,se),je=yield*p.stat(K).pipe(r.option);if(xn.isNone(je)){let Ue=yield*n.get(se);Ue&&ye.push({type:"agent",name:Ue.name});return}let qe=je.value;ye.push({type:"file",url:DD(K).href,filename:se,mime:qe.type==="Directory"?"application/x-directory":"text/plain"})}),{concurrency:"unbounded",discard:!0}),ye}),_=r.fn("SessionPrompt.ensureTitle")(function*(x){if(x.session.parentID||!me.isDefaultTitle(x.session.title))return;let G=s(z=>z.info.role==="user"&&!z.parts.every(b=>"synthetic"in b&&b.synthetic),"real"),ye=x.history.findIndex(G);if(ye===-1||x.history.filter(G).length!==1)return;let le=x.history.slice(0,ye+1),ne=le[ye];if(!ne||ne.info.role!=="user")return;let re=ne.info,se=ne.parts.filter(z=>z.type==="subtask"),K=se.length>0&&ne.parts.every(z=>z.type==="subtask"),je=yield*n.get("title");if(!je)return;let qe=je.model?yield*o.getModel(je.model.providerID,je.model.modelID):(yield*o.getSmallModel(x.providerID))??(yield*o.getModel(x.providerID,x.modelID)),Ue=K?[{role:"user",content:se.map(z=>z.prompt).join(`
1478
+ `)}]:yield*nt.toModelMessagesEffect(le,qe),xe=(yield*M.stream({agent:je,user:re,system:[],small:!0,tools:{},model:qe,sessionID:x.session.id,retries:2,messages:[{role:"user",content:`Generate a title for this conversation:
1479
+ `},...Ue]}).pipe(jd(st.is.textDelta),Od(z=>z.text),$d,r.orDie)).replace(/<think>[\s\S]*?<\/think>\s*/g,"").split(`
1480
+ `).map(z=>z.trim()).find(z=>z.length>0);if(!xe)return;let Be=xe.length>100?xe.substring(0,97)+"...":xe;yield*t.setTitle({sessionID:x.session.id,title:Be}).pipe(r.catchCause(z=>r.logError("failed to generate title",{error:ot.squash(z)})))}),N=r.fn("SessionPrompt.handleSubtask")(function*(x){let{task:G,model:ye,lastUser:le,sessionID:ne,session:re,msgs:se}=x,K=yield*V.context,je=yield*ue(),{task:qe}=yield*I.named(),Ue=G.model?yield*j(G.model.providerID,G.model.modelID,ne):ye,Xe=yield*t.updateMessage({id:ct.ascending(),role:"assistant",parentID:le.id,sessionID:ne,mode:G.agent,agent:G.agent,variant:le.model.variant,path:{cwd:K.directory,root:K.worktree},cost:0,tokens:{input:0,output:0,reasoning:0,cache:{read:0,write:0}},modelID:Ue.id,providerID:Ue.providerID,time:{created:Date.now()}}),xe=yield*t.updatePart({id:We.ascending(),messageID:Xe.id,sessionID:Xe.sessionID,type:"tool",callID:cd(),tool:_o.id,state:{status:"running",input:{prompt:G.prompt,description:G.description,subagent_type:G.agent,command:G.command},time:{start:Date.now()}}}),Be={prompt:G.prompt,description:G.description,subagent_type:G.agent,command:G.command};yield*l.trigger("tool.execute.before",{tool:_o.id,sessionID:ne,callID:xe.id},{args:Be});let z=yield*n.get(G.agent);if(!z){let ce=(yield*n.list()).filter(Q=>!Q.hidden).map(Q=>Q.name),de=ce.length?` Available agents: ${ce.join(", ")}`:"",X=new kn.Unknown({message:`Agent not found: "${G.agent}".${de}`});throw yield*C.publish(me.Event.Error,{sessionID:ne,error:X.toObject()}),X}let b,O=new AbortController,F=yield*qe.execute(Be,{agent:G.agent,messageID:Xe.id,sessionID:ne,abort:O.signal,callID:xe.callID,extra:{bypassAgentCheck:!0,promptOps:je},messages:se,metadata:s(ce=>r.gen(function*(){xe=yield*t.updatePart({...xe,type:"tool",state:{...xe.state,...ce}})}),"metadata"),ask:s(ce=>m.ask({...ce,sessionID:ne,ruleset:Ze.merge(z.permission,re.permission??[])}).pipe(r.orDie),"ask")}).pipe(r.catchCause(ce=>{let de=ot.squash(ce);return b=de instanceof Error?de:new Error(String(de)),r.logError("subtask execution failed",{error:b,agent:G.agent,description:G.description})}),r.onInterrupt(()=>r.gen(function*(){O.abort(),Xe.finish="tool-calls",Xe.time.completed=Date.now(),yield*t.updateMessage(Xe),xe.state.status==="running"&&(yield*t.updatePart({...xe,state:{status:"error",error:"Cancelled",time:{start:xe.state.time.start,end:Date.now()},metadata:xe.state.metadata,input:xe.state.input}}))}))),Z=F?.attachments?.map(ce=>({...ce,id:We.ascending(),sessionID:ne,messageID:Xe.id}));if(yield*l.trigger("tool.execute.after",{tool:_o.id,sessionID:ne,callID:xe.id,args:Be},F),Xe.finish="tool-calls",Xe.time.completed=Date.now(),yield*t.updateMessage(Xe),F&&xe.state.status==="running"&&(yield*t.updatePart({...xe,state:{status:"completed",input:xe.state.input,title:F.title,metadata:F.metadata,output:F.output,attachments:Z,time:{...xe.state.time,end:Date.now()}}})),F||(yield*t.updatePart({...xe,state:{status:"error",error:b?`Tool execution failed: ${b.message}`:"Tool execution failed",time:{start:xe.state.status==="running"?xe.state.time.start:Date.now(),end:Date.now()},metadata:xe.state.status==="pending"?void 0:xe.state.metadata,input:xe.state.input}})),!G.command)return;let Oe={id:ct.ascending(),sessionID:ne,role:"user",time:{created:Date.now()},agent:le.agent,model:le.model};yield*t.updateMessage(Oe),yield*t.updatePart({id:We.ascending(),messageID:Oe.id,sessionID:ne,type:"text",text:"Summarize the task tool output above and continue with your task.",synthetic:!0})}),q=r.fn("SessionPrompt.shellImpl")(function*(x,G){return yield*r.uninterruptibleMask(ye=>r.gen(function*(){let le=G?G.open.pipe(r.asVoid):r.void,{msg:ne,part:re,cwd:se}=yield*r.gen(function*(){let z=yield*V.context,b=yield*t.get(x.sessionID).pipe(r.orDie);b.revert&&(yield*S.cleanup(b));let O=yield*n.get(x.agent);if(!O){let Q=(yield*n.list()).filter(Re=>!Re.hidden).map(Re=>Re.name),he=Q.length?` Available agents: ${Q.join(", ")}`:"",ge=new kn.Unknown({message:`Agent not found: "${x.agent}".${he}`});throw yield*C.publish(me.Event.Error,{sessionID:x.sessionID,error:ge.toObject()}),ge}let F=x.model??O.model??(yield*ve(x.sessionID)),Z={id:x.messageID??ct.ascending(),sessionID:x.sessionID,time:{created:Date.now()},role:"user",agent:x.agent,model:{providerID:F.providerID,modelID:F.modelID}};yield*t.updateMessage(Z);let Oe={type:"text",id:We.ascending(),messageID:Z.id,sessionID:x.sessionID,text:"The following tool was executed by the user",synthetic:!0};yield*t.updatePart(Oe);let ce={id:ct.ascending(),sessionID:x.sessionID,parentID:Z.id,mode:x.agent,agent:x.agent,cost:0,path:{cwd:z.directory,root:z.worktree},time:{created:Date.now()},role:"assistant",tokens:{input:0,output:0,reasoning:0,cache:{read:0,write:0}},modelID:F.modelID,providerID:F.providerID};yield*t.updateMessage(ce);let de=Date.now(),X={type:"tool",id:We.ascending(),messageID:ce.id,sessionID:x.sessionID,tool:As.ToolID,callID:cd(),state:{status:"running",time:{start:de},input:{command:x.command}}};return yield*t.updatePart(X),{msg:ce,part:X,cwd:z.directory}}).pipe(r.ensuring(le)),K=yield*f.get(),je=ai.preferred(K.shell),qe=ai.args(je,x.command,se),Ue="",Xe=!1,xe=r.uninterruptible(r.gen(function*(){Xe&&(Ue+=`
1481
1481
 
1482
1482
  `+["<metadata>","User aborted the command","</metadata>"].join(`
1483
- `));let z=Date.now();ne.time.completed||(ne.time.completed=z,yield*t.updateMessage(ne)),re.state.status==="running"&&(re.state={status:"completed",time:{...re.state.time,end:z},input:re.state.input,title:"",metadata:{output:Fe},output:Fe},yield*t.updatePart(re))})),Be=yield*ye(r.gen(function*(){let z=yield*l.trigger("shell.env",{cwd:se,sessionID:S.sessionID,callID:re.callID},{env:{}}),b=Vn.make(je,qe,{cwd:se,extendEnv:!0,env:{...z.env,TERM:"dumb"},stdin:"ignore",forceKillAfter:"3 seconds"}),O=yield*P.spawn(b);yield*Js(Fd(O.all),F=>r.gen(function*(){Fe+=F,re.state.status==="running"&&(re.state.metadata={output:Fe},yield*t.updatePart(re))})),yield*O.exitCode}).pipe(r.scoped,r.orDie)).pipe(r.exit);return wt.isFailure(Be)&&ot.hasInterrupts(Be.cause)&&!ot.hasDies(Be.cause)&&(Xe=!0),yield*xe,wt.isFailure(Be)&&!Xe&&!ot.hasInterruptsOnly(Be.cause)?yield*r.failCause(Be.cause):{info:ne,parts:[re]}}))}),j=r.fn("SessionPrompt.getModel")(function*(S,G,ye){let le=yield*o.getModel(S,G).pipe(r.exit);if(wt.isSuccess(le))return le.value;let ne=ot.squash(le.cause);if(bt.ModelNotFoundError.isInstance(ne)){let re=ne.suggestions?.length?` Did you mean: ${ne.suggestions.join(", ")}?`:"";yield*C.publish(me.Event.Error,{sessionID:ye,error:new kn.Unknown({message:`Model not found: ${ne.providerID}/${ne.modelID}.${re}`}).toObject()})}return yield*r.die(ne)}),ve=r.fnUntraced(function*(S){let G=yield*H.select({model:Pt.model}).from(Pt).where(It(Pt.id,S)).get().pipe(r.orDie);if(G?.model)return{providerID:sn.ID.make(G.model.providerID),modelID:po.ID.make(G.model.id),...G.model.variant&&G.model.variant!=="default"?{variant:G.model.variant}:{}};let ye=yield*t.findMessage(S,le=>le.info.role==="user"&&!!le.info.model).pipe(r.orDie);return xn.isSome(ye)&&ye.value.info.role==="user"?ye.value.info.model:yield*o.defaultModel().pipe(r.orDie)}),pe=r.fn("SessionPrompt.createUserMessage")(function*(S){let G=S.agent?void 0:(yield*t.get(S.sessionID).pipe(r.orElseSucceed(()=>{})))?.agent,ye=S.agent||(G&&(yield*n.get(G))?G:void 0),le=ye?yield*n.get(ye):yield*n.defaultInfo();if(!le){let z=(yield*n.list()).filter(F=>!F.hidden).map(F=>F.name),b=z.length?` Available agents: ${z.join(", ")}`:"",O=new kn.Unknown({message:`Agent not found: "${ye}".${b}`});throw yield*C.publish(me.Event.Error,{sessionID:S.sessionID,error:O.toObject()}),O}let ne=S.model??le.model??(yield*ve(S.sessionID)),re=!S.variant&&le.variant?yield*o.getModel(ne.providerID,ne.modelID).pipe(r.catchIf(bt.ModelNotFoundError.isInstance,()=>r.succeed(void 0))):void 0,se=S.variant??et.nearestVariant(le.variant,Object.keys(re?.variants??{})),X={id:S.messageID??ct.ascending(),role:"user",sessionID:S.sessionID,time:{created:Date.now()},tools:S.tools,...S.noReply===!0?{quiet:!0}:{},agent:le.name,model:{providerID:ne.providerID,modelID:ne.modelID,variant:se},system:S.system,format:S.format},je=yield*t.get(S.sessionID).pipe(r.orDie);(je.agent!==X.agent||je.model?.providerID!==X.model.providerID||je.model?.id!==X.model.modelID||(je.model?.variant==="default"?void 0:je.model?.variant)!==X.model.variant)&&(yield*t.setAgentModel({sessionID:S.sessionID,agent:X.agent,model:{id:X.model.modelID,providerID:X.model.providerID,variant:X.model.variant??"default"},time:X.time.created})),yield*r.addFinalizer(()=>k.clear(X.id));let qe=s(z=>({...z,id:z.id?We.make(z.id):We.ascending()}),"assign"),Fe=r.fn("SessionPrompt.resolveUserPart")(function*(z){if(z.type==="file"){if(z.source?.type==="resource"){let{clientName:O,uri:F}=z.source;yield*r.logInfo("mcp resource",{clientName:O,uri:F,mime:z.mime});let Z=[{messageID:X.id,sessionID:S.sessionID,type:"text",synthetic:!0,text:`Reading MCP resource: ${z.filename} (${F})`}],Oe=yield*h.readResource(O,F).pipe(r.exit);if(wt.isSuccess(Oe)){let ce=Oe.value;if(!ce)throw new Error(`Resource not found: ${O}/${F}`);let de=Array.isArray(ce.contents)?ce.contents:[ce.contents];for(let K of de)if(!(!K||typeof K!="object")){if("text"in K&&typeof K.text=="string"&&K.text)Z.push({messageID:X.id,sessionID:S.sessionID,type:"text",synthetic:!0,text:K.text});else if("blob"in K&&typeof K.blob=="string"&&K.blob){let Q="mimeType"in K&&typeof K.mimeType=="string"?K.mimeType:z.mime,he="uri"in K&&typeof K.uri=="string"?K.uri:z.filename,ge=CD(K.blob);if(!TD.has(Q)){Z.push({messageID:X.id,sessionID:S.sessionID,type:"text",synthetic:!0,text:`[Binary MCP resource omitted: ${he??F} (${Q}, ${ud(ge)}) is not a supported attachment type]`});continue}if(ge>tg){Z.push({messageID:X.id,sessionID:S.sessionID,type:"text",synthetic:!0,text:`[Binary MCP resource omitted: ${he??F} (${Q}, ${ud(ge)}) exceeds ${ud(tg)}]`});continue}Z.push({messageID:X.id,sessionID:S.sessionID,type:"text",synthetic:!0,text:`[Binary MCP resource attached: ${he??F} (${Q})]`}),Z.push({messageID:X.id,sessionID:S.sessionID,type:"file",mime:Q,filename:he,url:`data:${Q};base64,${K.blob}`})}}}else{let ce=ot.squash(Oe.cause);yield*r.logError("failed to read MCP resource",{error:ce,clientName:O,uri:F});let de=ce instanceof Error?ce.message:String(ce);Z.push({messageID:X.id,sessionID:S.sessionID,type:"text",synthetic:!0,text:`Failed to read MCP resource ${z.filename}: ${de}`})}return Z}let b=new URL(z.url);switch(b.protocol){case"data:":if(z.mime==="text/plain")return[{messageID:X.id,sessionID:S.sessionID,type:"text",synthetic:!0,text:`Called the Read tool with the following input: ${JSON.stringify({filePath:z.filename})}`},{messageID:X.id,sessionID:S.sessionID,type:"text",synthetic:!0,text:Bh(z.url)},{...z,messageID:X.id,sessionID:S.sessionID}];break;case"file:":{yield*r.logInfo("file",{mime:z.mime});let O=dd(z.url),F=(yield*p.isDir(O))?"application/x-directory":z.mime,{read:Z}=yield*I.named(),Oe=s((ce,de)=>{let K=new AbortController;return Z.execute(ce,{sessionID:S.sessionID,abort:K.signal,agent:S.agent,messageID:X.id,extra:{bypassCwdCheck:!0,...de},messages:[],metadata:s(()=>r.void,"metadata"),ask:s(()=>r.void,"ask")}).pipe(r.onInterrupt(()=>r.sync(()=>K.abort())))},"execRead");if(F==="text/plain"){let ce,de,K={start:b.searchParams.get("start"),end:b.searchParams.get("end")};if(K.start!=null){let Re=z.url.split("?")[0],Qe=parseInt(K.start),vt=K.end?parseInt(K.end):void 0;if(Qe===vt){let zo=yield*g.documentSymbol(Re).pipe(r.catch(()=>r.succeed([])));for(let Gr of zo){let kt;if("range"in Gr?kt=Gr.range:"location"in Gr&&(kt=Gr.location.range),kt?.start?.line&&kt?.start?.line===Qe){Qe=kt.start.line,vt=kt?.end?.line??Qe;break}}}ce=Math.max(Qe,1),vt&&(de=vt-(ce-1))}let Q={filePath:O,offset:ce,limit:de},he=[{messageID:X.id,sessionID:S.sessionID,type:"text",synthetic:!0,text:`Called the Read tool with the following input: ${JSON.stringify(Q)}`}],ge=yield*o.getModel(X.model.providerID,X.model.modelID).pipe(r.flatMap(Re=>Oe(Q,{model:Re})),r.exit);if(wt.isSuccess(ge)){let Re=ge.value;he.push({messageID:X.id,sessionID:S.sessionID,type:"text",synthetic:!0,text:Re.output}),Re.attachments?.length?he.push(...Re.attachments.map(Qe=>({...Qe,synthetic:!0,filename:Qe.filename??z.filename,messageID:X.id,sessionID:S.sessionID}))):he.push({...z,mime:F,messageID:X.id,sessionID:S.sessionID})}else{let Re=ot.squash(ge.cause);yield*r.logError("failed to read file",{error:Re,filepath:O});let Qe=Re instanceof Error?Re.message:String(Re);yield*C.publish(me.Event.Error,{sessionID:S.sessionID,error:new kn.Unknown({message:Qe}).toObject()}),he.push({messageID:X.id,sessionID:S.sessionID,type:"text",synthetic:!0,text:`Read tool failed to read ${O} with the following error: ${Qe}`})}return he}if(F==="application/x-directory"){let ce={filePath:O},de=yield*Oe(ce).pipe(r.exit);if(wt.isFailure(de)){let K=ot.squash(de.cause);yield*r.logError("failed to read directory",{error:K,filepath:O});let Q=K instanceof Error?K.message:String(K);return yield*C.publish(me.Event.Error,{sessionID:S.sessionID,error:new kn.Unknown({message:Q}).toObject()}),[{messageID:X.id,sessionID:S.sessionID,type:"text",synthetic:!0,text:`Read tool failed to read ${O} with the following error: ${Q}`}]}return[{messageID:X.id,sessionID:S.sessionID,type:"text",synthetic:!0,text:`Called the Read tool with the following input: ${JSON.stringify(ce)}`},{messageID:X.id,sessionID:S.sessionID,type:"text",synthetic:!0,text:de.value.output},{...z,mime:F,messageID:X.id,sessionID:S.sessionID}]}return[{messageID:X.id,sessionID:S.sessionID,type:"text",synthetic:!0,text:`Called the Read tool with the following input: {"filePath":"${O}"}`},{id:z.id,messageID:X.id,sessionID:S.sessionID,type:"file",url:`data:${F};base64,`+Buffer.from(yield*p.readFile(O).pipe(r.catch(r.die))).toString("base64"),mime:F,filename:z.filename,source:z.source}]}}}if(z.type==="agent"){let O=Ze.evaluate("task",z.name,le.permission).action==="deny"?" . Invoked by user; guaranteed to exist.":"";return[{...z,messageID:X.id,sessionID:S.sessionID},{messageID:X.id,sessionID:S.sessionID,type:"text",synthetic:!0,text:" Use the above message and context to generate a prompt and call the task tool with subagent: "+z.name+O}]}return[{...z,messageID:X.id,sessionID:S.sessionID}]}),Xe=yield*r.forEach(S.parts,Fe,{concurrency:"unbounded"}).pipe(r.map(z=>z.flat().map(qe)));yield*l.trigger("chat.message",{sessionID:S.sessionID,agent:S.agent,model:S.model,messageID:S.messageID,variant:S.variant},{message:X,parts:Xe});let xe=yield*r.forEach(Xe,z=>z.type==="file"&&z.mime.startsWith("image/")?v.normalize(z).pipe(r.catchIf(b=>b instanceof bn.ResizerUnavailableError,()=>r.succeed(z))):r.succeed(z)),Be=DD(X,{errors:"all",propertyOrder:"original"});wt.isFailure(Be)&&(yield*r.logError("invalid user message before save",{sessionID:S.sessionID,messageID:X.id,agent:X.agent,model:X.model,cause:ot.pretty(Be.cause)}));for(let[z,b]of xe.entries()){let O=ED(b,{errors:"all",propertyOrder:"original"});wt.isSuccess(O)||(yield*r.logError("invalid user part before save",{sessionID:S.sessionID,messageID:X.id,partID:b.id,partType:b.type,index:z,cause:ot.pretty(O.cause),part:b}))}yield*t.updateMessage(X);for(let z of xe)yield*t.updatePart(z);return{info:X,parts:xe}},r.scoped),ae=r.fn("SessionPrompt.inFlightTool")(function*(S){let G=yield*nt.filterCompactedEffect(S).pipe(r.provideService(tt.Service,U));for(let ye=G.length-1;ye>=0;ye--){let le=G[ye];if(le.info.role!=="assistant"||le.info.aside)continue;let ne=le.parts.find(re=>re.type==="tool"&&(re.state.status==="running"||re.state.status==="pending"));return ne&&ne.type==="tool"?ne.tool:null}return null}),oe=["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(" "),$e=r.fn("SessionPrompt.aside")(function*(S){let G=yield*V.context,ye=yield*nt.filterCompactedEffect(S.sessionID).pipe(r.provideService(tt.Service,U)),le=yield*j(S.user.model.providerID,S.user.model.modelID,S.sessionID),ne=yield*n.get(S.user.agent);if(!ne)return null;let re={id:ct.ascending(),parentID:S.user.id,role:"assistant",mode:ne.name,agent:ne.name,variant:S.user.model.variant,path:{cwd:G.directory,root:G.worktree},cost:0,tokens:{input:0,output:0,reasoning:0,cache:{read:0,write:0}},modelID:le.id,providerID:le.providerID,time:{created:Date.now()},sessionID:S.sessionID,aside:!0};yield*t.updateMessage(re);let se=yield*i.create({assistantMessage:re,sessionID:S.sessionID,model:le}),X=yield*nt.toModelMessagesEffect(ye,le,{runningToolNote:`[${S.running} is still running. You are answering the user beside it; its result arrives when it finishes.]`}),je=ye.findLast(Be=>Be.info.role==="assistant"&&!Be.info.aside&&Be.parts.some(z=>z.type==="tool"&&(z.state.status==="running"||z.state.status==="pending"))),qe=je&&je.info.role==="assistant"?yield*J(S.session,le,ye)(je.info):void 0;if(yield*r.logInfo("aside",{"session.id":S.sessionID,running:S.running,messageID:re.id,onOwnPrefix:!!qe}),qe)yield*se.process({user:qe.user,agent:qe.agent,permission:qe.permission,sessionID:S.sessionID,parentSessionID:qe.parentSessionID,system:qe.system,messages:[...X,{role:"user",content:[{type:"text",text:oe}]}],tools:qe.tools,model:le,cachePoints:"history"});else{let[Be,z]=yield*r.all([w.environment(le,S.session.time.created),k.system().pipe(r.orDie)]);yield*se.process({user:S.user,agent:ne,permission:S.session.permission,sessionID:S.sessionID,parentSessionID:S.session.parentID,system:[...Be,...z,oe],messages:X,tools:{},model:le})}let Fe=yield*R(S.sessionID);if(Fe.info.id!==re.id)return Fe;let{drop:Xe,answered:xe}=Kh(Fe.parts);if(!xe)return yield*r.logWarning("aside wrote no usable answer; the message waits for the run",{"session.id":S.sessionID,messageID:re.id}),yield*t.removeMessage({sessionID:S.sessionID,messageID:re.id}),null;for(let Be of Xe)yield*t.removePart({sessionID:S.sessionID,messageID:re.id,partID:Be});return Xe.length>0?yield*R(S.sessionID):Fe}),Le=r.fn("SessionPrompt.prompt")(function*(S){let G=yield*t.get(S.sessionID).pipe(r.orDie);yield*x.cleanup(G);let ye=yield*pe(S);yield*t.touch(S.sessionID);let le=[];for(let[se,X]of Object.entries(S.tools??{}))le.push({permission:se,action:X?"allow":"deny",pattern:"*"});if(le.length>0&&(G.permission=le,yield*t.setPermission({sessionID:G.id,permission:le})),S.noReply===!0)return ye;let ne=(yield*y.busy()).includes(S.sessionID);if(ne&&Yh(ye.parts)){let se=Ht.endForPerson(S.sessionID),X=se?null:yield*ae(S.sessionID);if(W.set(ye.info.id,{sessionID:S.sessionID,at:Date.now(),how:se?"step ended":X?`in ${X}`:"between steps"}),X){let je=yield*$e({sessionID:S.sessionID,session:G,user:ye.info,running:X}).pipe(r.catchCause(qe=>r.logWarning("aside failed; the message waits for the run",{"session.id":S.sessionID,cause:String(qe)}).pipe(r.as(null))));if(je)return je}}let re=yield*ke({sessionID:S.sessionID});return ne&&ec.compareAscending(re.info.id,ye.info.id)<0&&(re=yield*ke({sessionID:S.sessionID})),re}),R=r.fnUntraced(function*(S){let G=yield*t.findMessage(S,le=>le.info.role!=="user").pipe(r.orDie);if(xn.isSome(G))return G.value;let ye=yield*t.messages({sessionID:S,limit:1}).pipe(r.orDie);if(ye.length>0)return ye[0];throw new Error("Impossible")}),Y=r.fn("SessionPrompt.turnPrefix")(function*(S){let G=yield*ue(),ye=yield*Os.resolve({...S,promptOps:G}).pipe(r.provideService(ft.Service,l),r.provideService(Ze.Service,m),r.provideService($n.Service,I),r.provideService(cn.Service,h),r.provideService(Qn.Service,T),r.provideService(Ve.Service,$)),[le,ne,re,se]=yield*r.all([w.skills(S.agent),w.environment(S.model,S.session.time.created),k.system().pipe(r.orDie),w.mcp(S.agent,S.session.permission)]),X=[...ne,...re,...se?[se]:[],...le?[le]:[]];return{tools:ye,system:X}}),J=s((S,G,ye)=>le=>r.gen(function*(){let ne=ye.find(qe=>qe.info.id===le.parentID)?.info;if(!ne||ne.role!=="user"||ne.format?.type==="json_schema")return;let re=yield*n.get(le.agent);if(!re)return;let{tools:se,system:X}=yield*Y({agent:re,session:S,model:G,processor:{message:{id:le.id},updateToolCall:s(()=>r.succeed(void 0),"updateToolCall"),completeToolCall:s(()=>r.void,"completeToolCall")},bypassAgentCheck:!1,messages:ye}),je=Object.fromEntries(Object.entries(se).map(([qe,Fe])=>[qe,{...Fe,execute:s(async()=>"Not run: this step only writes the summary.","execute")}]));return{agent:re,user:ne,system:X,tools:je,permission:S.permission,parentSessionID:S.parentID}}).pipe(r.catchCause(ne=>r.logWarning("compaction: the session's prefix could not be rebuilt; summarizing without it",{"session.id":S.id,cause:String(ne).slice(0,500)}).pipe(r.as(void 0)))),"compactionPrefix"),te=r.fn("SessionPrompt.run")(function*(S){let G=yield*V.context,ye,le=0,ne=yield*t.get(S).pipe(r.orDie);for(;;){if(Bo.isPaused()){Bo.hold(S);break}yield*e.set(S,{type:"busy"}),yield*r.logInfo("loop",{"session.id":S,step:le});let re=yield*nt.filterCompactedEffect(S).pipe(r.provideService(tt.Service,U)),{lastUser:se,lastAssistant:X,lastFinished:je,tasks:qe}=Xh(re);if(!se)throw new Error("No user message found in stream. This should never happen.");let Fe=re.findLast(Q=>Q.info.role==="assistant"&&Q.info.id===X?.id),Xe=Fe?.parts.some(Q=>Q.type==="tool"&&!Q.metadata?.providerExecuted&&!ng(Q))??!1;if(X?.finish&&!["tool-calls","unknown"].includes(X.finish)&&!Xe&&X.parentID===se.id){let Q=Fe?.parts.find(he=>he.type==="tool"&&ng(he));Q&&(yield*r.logWarning("loop exit with orphaned interrupted tool",{"session.id":S,messageID:X.id,tool:Q.tool,callID:Q.callID})),yield*r.logInfo("exiting loop",{"session.id":S});break}le++,le===1&&(yield*_({session:ne,modelID:se.model.modelID,providerID:se.model.providerID,history:re}).pipe(r.ignore,r.forkIn(d)));let xe=yield*j(se.model.providerID,se.model.modelID,S),Be=qe.pop();if(Be?.type==="subtask"){yield*N({task:Be,model:xe,lastUser:se,sessionID:S,session:ne,msgs:re});continue}if(Be?.type==="compaction"){if((yield*a.process({messages:re,parentID:se.id,sessionID:S,auto:Be.auto,overflow:Be.overflow,prefix:J(ne,xe,re)}))==="stop")break;continue}if(je&&je.summary!==!0&&(yield*a.isOverflow({tokens:je.tokens,model:xe}))){yield*a.create({sessionID:S,agent:se.agent,model:se.model,auto:!0});continue}let z=yield*n.get(se.agent);if(!z){let Q=(yield*n.list()).filter(Re=>!Re.hidden).map(Re=>Re.name),he=Q.length?` Available agents: ${Q.join(", ")}`:"",ge=new kn.Unknown({message:`Agent not found: "${se.agent}".${he}`});throw yield*C.publish(me.Event.Error,{sessionID:S,error:ge.toObject()}),ge}let b=z.steps??1/0,O=le>=b;re=yield*Ms.apply({messages:re,agent:z,session:ne}).pipe(r.provideService(Ve.Service,$),r.provideService(Me.Service,p),r.provideService(me.Service,t));let F={id:ct.ascending(),parentID:se.id,role:"assistant",mode:z.name,agent:z.name,variant:se.model.variant,path:{cwd:G.directory,root:G.worktree},cost:0,tokens:{input:0,output:0,reasoning:0,cache:{read:0,write:0}},modelID:xe.id,providerID:xe.providerID,time:{created:Date.now()},sessionID:S};yield*t.updateMessage(F);for(let[Q,he]of W)he.sessionID===S&&(W.delete(Q),yield*r.logWarning("person message read",{"session.id":S,messageID:Q,how:he.how,waitedMs:Date.now()-he.at}));let Z=Promise.withResolvers(),Oe=Ht.open(S,()=>Z.resolve()),ce=r.gen(function*(){F.time.completed||(F.error??=nt.fromError(new DOMException("Aborted","AbortError"),{providerID:F.providerID,aborted:!0}),F.time.completed=Date.now(),yield*t.updateMessage(F))}),de=yield*i.create({assistantMessage:F,sessionID:S,model:xe,preempt:r.promise(()=>Z.promise)}).pipe(r.onInterrupt(()=>ce));if((yield*r.gen(function*(){let he=re.findLast(kt=>kt.info.role==="user")?.parts.some(kt=>kt.type==="agent")??!1,{tools:ge,system:Re}=yield*Y({agent:z,session:ne,model:xe,processor:de,bypassAgentCheck:he,messages:re,gate:Oe});if(se.format?.type==="json_schema"&&(ge.StructuredOutput=sg({schema:se.format.schema,onSuccess(kt){ye=kt}})),le===1&&(yield*E.summarize({sessionID:S,messageID:se.id}).pipe(r.ignore,r.forkIn(d))),le>1&&je){let kt=new Set(re.filter(_t=>_t.info.role==="assistant"&&_t.info.aside).map(_t=>_t.info.parentID));for(let _t of re)if(!(_t.info.role!=="user"||ec.compareAscending(_t.info.id,je.id)<=0)&&!kt.has(_t.info.id))for(let vn of _t.parts)vn.type!=="text"||vn.ignored||vn.synthetic||vn.text.trim()&&(vn.text=Jh(vn.text))}yield*l.trigger("experimental.chat.messages.transform",{},{messages:re});let Qe=yield*nt.toModelMessagesEffect(re,xe),vt=se.format??{type:"text"};vt.type==="json_schema"&&Re.push(RD);let zo=yield*de.process({user:se,agent:z,permission:ne.permission,sessionID:S,parentSessionID:ne.parentID,system:Re,messages:[...Qe,...O?[{role:"assistant",content:_u}]:[]],tools:ge,model:xe,toolChoice:vt.type==="json_schema"?"required":void 0,storeSystem:it.on()?kt=>r.gen(function*(){let _t=it.newestStored(re),vn=re.at(-1)?.info.id;if(!_t||!vn)return;let Aa=_t.value.system?.at(-1);if(Aa&&Aa.after===vn&&Aa.text===kt)return;let Ig=it.withSystem(_t.value,{after:vn,text:kt});_t.part.metadata={..._t.part.metadata,[it.METADATA_KEY]:Ig},yield*t.updatePart(_t.part)}):void 0});if(ye!==void 0)return de.message.structured=ye,de.message.finish=de.message.finish??"stop",yield*t.updateMessage(de.message),"break";if(de.message.finish&&!["tool-calls","unknown"].includes(de.message.finish)&&!de.message.error){if(de.message.finish==="content-filter")return de.message.error=new ut.ContentFilterError({message:"The response was blocked by the provider's content filter"}).toObject(),yield*t.updateMessage(de.message),yield*C.publish(me.Event.Error,{sessionID:S,error:de.message.error}),"break";if(vt.type==="json_schema")return de.message.error=new ut.StructuredOutputError({message:"Model did not produce structured output",retries:0}).toObject(),yield*t.updateMessage(de.message),"break"}return zo==="stop"?"break":(zo==="compact"&&(yield*a.create({sessionID:S,agent:se.agent,model:se.model,auto:!0,overflow:!de.message.finish})),"continue")}).pipe(r.ensuring(r.sync(()=>Ht.close(S,Oe))),r.ensuring(k.clear(de.message.id)),r.onInterrupt(()=>ce)))==="break")break}return yield*a.prune({sessionID:S}).pipe(r.ignore,r.forkIn(d)),yield*R(S)}),ke=r.fn("SessionPrompt.loop")(function*(S){return Bo.isPaused()?(Bo.hold(S.sessionID),yield*R(S.sessionID)):yield*y.ensureRunning(S.sessionID,R(S.sessionID),te(S.sessionID))}),He=r.fn("SessionPrompt.shell")(function*(S){let G=yield*Rd.make();return yield*y.startShell(S.sessionID,R(S.sessionID),q(S,G),G)}),Pn=r.fn("SessionPrompt.command")(function*(S){yield*r.logInfo("command",{"session.id":S.sessionID,command:S.command,agent:S.agent});let G=yield*u.get(S.command);if(!G){let K=(yield*u.list()).map(ge=>ge.name),Q=K.length?` Available commands: ${K.join(", ")}`:"",he=new kn.Unknown({message:`Command not found: "${S.command}".${Q}`});throw yield*C.publish(me.Event.Error,{sessionID:S.sessionID,error:he.toObject()}),he}let ye=G.agent??S.agent,ne=(S.arguments.match(ND)??[]).map(K=>K.replace(jD,"")),re=yield*r.promise(async()=>G.template),se=re.match(og)??[],X=0;for(let K of se){let Q=Number(K.slice(1));Q>X&&(X=Q)}let je=re.replaceAll(og,(K,Q)=>{let he=Number(Q),ge=he-1;return ge>=ne.length?"":he===X?ne.slice(ge).join(" "):ne[ge]}),qe=re.includes("$ARGUMENTS"),Fe=je.replaceAll("$ARGUMENTS",S.arguments);se.length===0&&!qe&&S.arguments.trim()&&(Fe=Fe+`
1483
+ `));let z=Date.now();ne.time.completed||(ne.time.completed=z,yield*t.updateMessage(ne)),re.state.status==="running"&&(re.state={status:"completed",time:{...re.state.time,end:z},input:re.state.input,title:"",metadata:{output:Ue},output:Ue},yield*t.updatePart(re))})),Be=yield*ye(r.gen(function*(){let z=yield*l.trigger("shell.env",{cwd:se,sessionID:x.sessionID,callID:re.callID},{env:{}}),b=Vn.make(je,qe,{cwd:se,extendEnv:!0,env:{...z.env,TERM:"dumb"},stdin:"ignore",forceKillAfter:"3 seconds"}),O=yield*P.spawn(b);yield*Js(Fd(O.all),F=>r.gen(function*(){Ue+=F,re.state.status==="running"&&(re.state.metadata={output:Ue},yield*t.updatePart(re))})),yield*O.exitCode}).pipe(r.scoped,r.orDie)).pipe(r.exit);return wt.isFailure(Be)&&ot.hasInterrupts(Be.cause)&&!ot.hasDies(Be.cause)&&(Xe=!0),yield*xe,wt.isFailure(Be)&&!Xe&&!ot.hasInterruptsOnly(Be.cause)?yield*r.failCause(Be.cause):{info:ne,parts:[re]}}))}),j=r.fn("SessionPrompt.getModel")(function*(x,G,ye){let le=yield*o.getModel(x,G).pipe(r.exit);if(wt.isSuccess(le))return le.value;let ne=ot.squash(le.cause);if(bt.ModelNotFoundError.isInstance(ne)){let re=ne.suggestions?.length?` Did you mean: ${ne.suggestions.join(", ")}?`:"";yield*C.publish(me.Event.Error,{sessionID:ye,error:new kn.Unknown({message:`Model not found: ${ne.providerID}/${ne.modelID}.${re}`}).toObject()})}return yield*r.die(ne)}),ve=r.fnUntraced(function*(x){let G=yield*H.select({model:Pt.model}).from(Pt).where(It(Pt.id,x)).get().pipe(r.orDie);if(G?.model)return{providerID:sn.ID.make(G.model.providerID),modelID:po.ID.make(G.model.id),...G.model.variant&&G.model.variant!=="default"?{variant:G.model.variant}:{}};let ye=yield*t.findMessage(x,le=>le.info.role==="user"&&!!le.info.model).pipe(r.orDie);return xn.isSome(ye)&&ye.value.info.role==="user"?ye.value.info.model:yield*o.defaultModel().pipe(r.orDie)}),pe=r.fn("SessionPrompt.createUserMessage")(function*(x){let G=x.agent?void 0:(yield*t.get(x.sessionID).pipe(r.orElseSucceed(()=>{})))?.agent,ye=x.agent||(G&&(yield*n.get(G))?G:void 0),le=ye?yield*n.get(ye):yield*n.defaultInfo();if(!le){let z=(yield*n.list()).filter(F=>!F.hidden).map(F=>F.name),b=z.length?` Available agents: ${z.join(", ")}`:"",O=new kn.Unknown({message:`Agent not found: "${ye}".${b}`});throw yield*C.publish(me.Event.Error,{sessionID:x.sessionID,error:O.toObject()}),O}let ne=x.model??le.model??(yield*ve(x.sessionID)),re=!x.variant&&le.variant?yield*o.getModel(ne.providerID,ne.modelID).pipe(r.catchIf(bt.ModelNotFoundError.isInstance,()=>r.succeed(void 0))):void 0,se=x.variant??et.nearestVariant(le.variant,Object.keys(re?.variants??{})),K={id:x.messageID??ct.ascending(),role:"user",sessionID:x.sessionID,time:{created:Date.now()},tools:x.tools,...x.noReply===!0?{quiet:!0}:{},agent:le.name,model:{providerID:ne.providerID,modelID:ne.modelID,variant:se},system:x.system,format:x.format},je=yield*t.get(x.sessionID).pipe(r.orDie);(je.agent!==K.agent||je.model?.providerID!==K.model.providerID||je.model?.id!==K.model.modelID||(je.model?.variant==="default"?void 0:je.model?.variant)!==K.model.variant)&&(yield*t.setAgentModel({sessionID:x.sessionID,agent:K.agent,model:{id:K.model.modelID,providerID:K.model.providerID,variant:K.model.variant??"default"},time:K.time.created})),yield*r.addFinalizer(()=>k.clear(K.id));let qe=s(z=>({...z,id:z.id?We.make(z.id):We.ascending()}),"assign"),Ue=r.fn("SessionPrompt.resolveUserPart")(function*(z){if(z.type==="file"){if(z.source?.type==="resource"){let{clientName:O,uri:F}=z.source;yield*r.logInfo("mcp resource",{clientName:O,uri:F,mime:z.mime});let Z=[{messageID:K.id,sessionID:x.sessionID,type:"text",synthetic:!0,text:`Reading MCP resource: ${z.filename} (${F})`}],Oe=yield*h.readResource(O,F).pipe(r.exit);if(wt.isSuccess(Oe)){let ce=Oe.value;if(!ce)throw new Error(`Resource not found: ${O}/${F}`);let de=Array.isArray(ce.contents)?ce.contents:[ce.contents];for(let X of de)if(!(!X||typeof X!="object")){if("text"in X&&typeof X.text=="string"&&X.text)Z.push({messageID:K.id,sessionID:x.sessionID,type:"text",synthetic:!0,text:X.text});else if("blob"in X&&typeof X.blob=="string"&&X.blob){let Q="mimeType"in X&&typeof X.mimeType=="string"?X.mimeType:z.mime,he="uri"in X&&typeof X.uri=="string"?X.uri:z.filename,ge=AD(X.blob);if(!PD.has(Q)){Z.push({messageID:K.id,sessionID:x.sessionID,type:"text",synthetic:!0,text:`[Binary MCP resource omitted: ${he??F} (${Q}, ${ud(ge)}) is not a supported attachment type]`});continue}if(ge>ng){Z.push({messageID:K.id,sessionID:x.sessionID,type:"text",synthetic:!0,text:`[Binary MCP resource omitted: ${he??F} (${Q}, ${ud(ge)}) exceeds ${ud(ng)}]`});continue}Z.push({messageID:K.id,sessionID:x.sessionID,type:"text",synthetic:!0,text:`[Binary MCP resource attached: ${he??F} (${Q})]`}),Z.push({messageID:K.id,sessionID:x.sessionID,type:"file",mime:Q,filename:he,url:`data:${Q};base64,${X.blob}`})}}}else{let ce=ot.squash(Oe.cause);yield*r.logError("failed to read MCP resource",{error:ce,clientName:O,uri:F});let de=ce instanceof Error?ce.message:String(ce);Z.push({messageID:K.id,sessionID:x.sessionID,type:"text",synthetic:!0,text:`Failed to read MCP resource ${z.filename}: ${de}`})}return Z}let b=new URL(z.url);switch(b.protocol){case"data:":if(z.mime==="text/plain")return[{messageID:K.id,sessionID:x.sessionID,type:"text",synthetic:!0,text:`Called the Read tool with the following input: ${JSON.stringify({filePath:z.filename})}`},{messageID:K.id,sessionID:x.sessionID,type:"text",synthetic:!0,text:Bh(z.url)},{...z,messageID:K.id,sessionID:x.sessionID}];break;case"file:":{yield*r.logInfo("file",{mime:z.mime});let O=dd(z.url),F=(yield*p.isDir(O))?"application/x-directory":z.mime,{read:Z}=yield*I.named(),Oe=s((ce,de)=>{let X=new AbortController;return Z.execute(ce,{sessionID:x.sessionID,abort:X.signal,agent:x.agent,messageID:K.id,extra:{bypassCwdCheck:!0,...de},messages:[],metadata:s(()=>r.void,"metadata"),ask:s(()=>r.void,"ask")}).pipe(r.onInterrupt(()=>r.sync(()=>X.abort())))},"execRead");if(F==="text/plain"){let ce,de,X={start:b.searchParams.get("start"),end:b.searchParams.get("end")};if(X.start!=null){let Re=z.url.split("?")[0],Qe=parseInt(X.start),vt=X.end?parseInt(X.end):void 0;if(Qe===vt){let zo=yield*g.documentSymbol(Re).pipe(r.catch(()=>r.succeed([])));for(let Gr of zo){let kt;if("range"in Gr?kt=Gr.range:"location"in Gr&&(kt=Gr.location.range),kt?.start?.line&&kt?.start?.line===Qe){Qe=kt.start.line,vt=kt?.end?.line??Qe;break}}}ce=Math.max(Qe,1),vt&&(de=vt-(ce-1))}let Q={filePath:O,offset:ce,limit:de},he=[{messageID:K.id,sessionID:x.sessionID,type:"text",synthetic:!0,text:`Called the Read tool with the following input: ${JSON.stringify(Q)}`}],ge=yield*o.getModel(K.model.providerID,K.model.modelID).pipe(r.flatMap(Re=>Oe(Q,{model:Re})),r.exit);if(wt.isSuccess(ge)){let Re=ge.value;he.push({messageID:K.id,sessionID:x.sessionID,type:"text",synthetic:!0,text:Re.output}),Re.attachments?.length?he.push(...Re.attachments.map(Qe=>({...Qe,synthetic:!0,filename:Qe.filename??z.filename,messageID:K.id,sessionID:x.sessionID}))):he.push({...z,mime:F,messageID:K.id,sessionID:x.sessionID})}else{let Re=ot.squash(ge.cause);yield*r.logError("failed to read file",{error:Re,filepath:O});let Qe=Re instanceof Error?Re.message:String(Re);yield*C.publish(me.Event.Error,{sessionID:x.sessionID,error:new kn.Unknown({message:Qe}).toObject()}),he.push({messageID:K.id,sessionID:x.sessionID,type:"text",synthetic:!0,text:`Read tool failed to read ${O} with the following error: ${Qe}`})}return he}if(F==="application/x-directory"){let ce={filePath:O},de=yield*Oe(ce).pipe(r.exit);if(wt.isFailure(de)){let X=ot.squash(de.cause);yield*r.logError("failed to read directory",{error:X,filepath:O});let Q=X instanceof Error?X.message:String(X);return yield*C.publish(me.Event.Error,{sessionID:x.sessionID,error:new kn.Unknown({message:Q}).toObject()}),[{messageID:K.id,sessionID:x.sessionID,type:"text",synthetic:!0,text:`Read tool failed to read ${O} with the following error: ${Q}`}]}return[{messageID:K.id,sessionID:x.sessionID,type:"text",synthetic:!0,text:`Called the Read tool with the following input: ${JSON.stringify(ce)}`},{messageID:K.id,sessionID:x.sessionID,type:"text",synthetic:!0,text:de.value.output},{...z,mime:F,messageID:K.id,sessionID:x.sessionID}]}return[{messageID:K.id,sessionID:x.sessionID,type:"text",synthetic:!0,text:`Called the Read tool with the following input: {"filePath":"${O}"}`},{id:z.id,messageID:K.id,sessionID:x.sessionID,type:"file",url:`data:${F};base64,`+Buffer.from(yield*p.readFile(O).pipe(r.catch(r.die))).toString("base64"),mime:F,filename:z.filename,source:z.source}]}}}if(z.type==="agent"){let O=Ze.evaluate("task",z.name,le.permission).action==="deny"?" . Invoked by user; guaranteed to exist.":"";return[{...z,messageID:K.id,sessionID:x.sessionID},{messageID:K.id,sessionID:x.sessionID,type:"text",synthetic:!0,text:" Use the above message and context to generate a prompt and call the task tool with subagent: "+z.name+O}]}return[{...z,messageID:K.id,sessionID:x.sessionID}]}),Xe=yield*r.forEach(x.parts,Ue,{concurrency:"unbounded"}).pipe(r.map(z=>z.flat().map(qe)));yield*l.trigger("chat.message",{sessionID:x.sessionID,agent:x.agent,model:x.model,messageID:x.messageID,variant:x.variant},{message:K,parts:Xe});let xe=yield*r.forEach(Xe,z=>z.type==="file"&&z.mime.startsWith("image/")?v.normalize(z).pipe(r.catchIf(b=>b instanceof bn.ResizerUnavailableError,()=>r.succeed(z))):r.succeed(z)),Be=ED(K,{errors:"all",propertyOrder:"original"});wt.isFailure(Be)&&(yield*r.logError("invalid user message before save",{sessionID:x.sessionID,messageID:K.id,agent:K.agent,model:K.model,cause:ot.pretty(Be.cause)}));for(let[z,b]of xe.entries()){let O=TD(b,{errors:"all",propertyOrder:"original"});wt.isSuccess(O)||(yield*r.logError("invalid user part before save",{sessionID:x.sessionID,messageID:K.id,partID:b.id,partType:b.type,index:z,cause:ot.pretty(O.cause),part:b}))}yield*t.updateMessage(K);for(let z of xe)yield*t.updatePart(z);return{info:K,parts:xe}},r.scoped),ae=r.fn("SessionPrompt.inFlightTool")(function*(x){let G=yield*nt.filterCompactedEffect(x).pipe(r.provideService(tt.Service,U));for(let ye=G.length-1;ye>=0;ye--){let le=G[ye];if(le.info.role!=="assistant"||le.info.aside)continue;let ne=le.parts.find(re=>re.type==="tool"&&(re.state.status==="running"||re.state.status==="pending"));return ne&&ne.type==="tool"?ne.tool:null}return null}),oe=["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(" "),$e=r.fn("SessionPrompt.aside")(function*(x){let G=yield*V.context,ye=yield*nt.filterCompactedEffect(x.sessionID).pipe(r.provideService(tt.Service,U)),le=yield*j(x.user.model.providerID,x.user.model.modelID,x.sessionID),ne=yield*n.get(x.user.agent);if(!ne)return null;let re={id:ct.ascending(),parentID:x.user.id,role:"assistant",mode:ne.name,agent:ne.name,variant:x.user.model.variant,path:{cwd:G.directory,root:G.worktree},cost:0,tokens:{input:0,output:0,reasoning:0,cache:{read:0,write:0}},modelID:le.id,providerID:le.providerID,time:{created:Date.now()},sessionID:x.sessionID,aside:!0};yield*t.updateMessage(re);let se=yield*i.create({assistantMessage:re,sessionID:x.sessionID,model:le}),K=yield*nt.toModelMessagesEffect(ye,le,{runningToolNote:`[${x.running} is still running. You are answering the user beside it; its result arrives when it finishes.]`}),je=ye.findLast(Be=>Be.info.role==="assistant"&&!Be.info.aside&&Be.parts.some(z=>z.type==="tool"&&(z.state.status==="running"||z.state.status==="pending"))),qe=je&&je.info.role==="assistant"?yield*J(x.session,le,ye)(je.info):void 0;if(yield*r.logInfo("aside",{"session.id":x.sessionID,running:x.running,messageID:re.id,onOwnPrefix:!!qe}),qe)yield*se.process({user:qe.user,agent:qe.agent,permission:qe.permission,sessionID:x.sessionID,parentSessionID:qe.parentSessionID,system:qe.system,messages:[...K,{role:"user",content:[{type:"text",text:oe}]}],tools:qe.tools,model:le,cachePoints:"history"});else{let[Be,z]=yield*r.all([w.environment(le,x.session.time.created),k.system().pipe(r.orDie)]);yield*se.process({user:x.user,agent:ne,permission:x.session.permission,sessionID:x.sessionID,parentSessionID:x.session.parentID,system:[...Be,...z,oe],messages:K,tools:{},model:le})}let Ue=yield*R(x.sessionID);if(Ue.info.id!==re.id)return Ue;let{drop:Xe,answered:xe}=Kh(Ue.parts);if(!xe)return yield*r.logWarning("aside wrote no usable answer; the message waits for the run",{"session.id":x.sessionID,messageID:re.id}),yield*t.removeMessage({sessionID:x.sessionID,messageID:re.id}),null;for(let Be of Xe)yield*t.removePart({sessionID:x.sessionID,messageID:re.id,partID:Be});return Xe.length>0?yield*R(x.sessionID):Ue}),Le=r.fn("SessionPrompt.prompt")(function*(x){let G=yield*t.get(x.sessionID).pipe(r.orDie);yield*S.cleanup(G);let ye=yield*pe(x);yield*t.touch(x.sessionID);let le=[];for(let[se,K]of Object.entries(x.tools??{}))le.push({permission:se,action:K?"allow":"deny",pattern:"*"});if(le.length>0&&(G.permission=le,yield*t.setPermission({sessionID:G.id,permission:le})),x.noReply===!0)return ye;let ne=(yield*y.busy()).includes(x.sessionID);if(ne&&Yh(ye.parts)){let se=Ht.endForPerson(x.sessionID),K=se?null:yield*ae(x.sessionID);if(W.set(ye.info.id,{sessionID:x.sessionID,at:Date.now(),how:se?"step ended":K?`in ${K}`:"between steps"}),K){let je=yield*$e({sessionID:x.sessionID,session:G,user:ye.info,running:K}).pipe(r.catchCause(qe=>r.logWarning("aside failed; the message waits for the run",{"session.id":x.sessionID,cause:String(qe)}).pipe(r.as(null))));if(je)return je}}let re=yield*ke({sessionID:x.sessionID});return ne&&ec.compareAscending(re.info.id,ye.info.id)<0&&(re=yield*ke({sessionID:x.sessionID})),re}),R=r.fnUntraced(function*(x){let G=yield*t.findMessage(x,le=>le.info.role!=="user").pipe(r.orDie);if(xn.isSome(G))return G.value;let ye=yield*t.messages({sessionID:x,limit:1}).pipe(r.orDie);if(ye.length>0)return ye[0];throw new Error("Impossible")}),Y=r.fn("SessionPrompt.turnPrefix")(function*(x){let G=yield*ue(),ye=yield*Os.resolve({...x,promptOps:G}).pipe(r.provideService(ft.Service,l),r.provideService(Ze.Service,m),r.provideService($n.Service,I),r.provideService(cn.Service,h),r.provideService(Qn.Service,T),r.provideService(Ve.Service,$)),[le,ne,re,se]=yield*r.all([w.skills(x.agent),w.environment(x.model,x.session.time.created),k.system().pipe(r.orDie),w.mcp(x.agent,x.session.permission)]),K=[...ne,...re,...se?[se]:[],...le?[le]:[]];return{tools:ye,system:K}}),J=s((x,G,ye)=>le=>r.gen(function*(){let ne=ye.find(qe=>qe.info.id===le.parentID)?.info;if(!ne||ne.role!=="user"||ne.format?.type==="json_schema")return;let re=yield*n.get(le.agent);if(!re)return;let{tools:se,system:K}=yield*Y({agent:re,session:x,model:G,processor:{message:{id:le.id},updateToolCall:s(()=>r.succeed(void 0),"updateToolCall"),completeToolCall:s(()=>r.void,"completeToolCall")},bypassAgentCheck:!1,messages:ye}),je=Object.fromEntries(Object.entries(se).map(([qe,Ue])=>[qe,{...Ue,execute:s(async()=>"Not run: this step only writes the summary.","execute")}]));return{agent:re,user:ne,system:K,tools:je,permission:x.permission,parentSessionID:x.parentID}}).pipe(r.catchCause(ne=>r.logWarning("compaction: the session's prefix could not be rebuilt; summarizing without it",{"session.id":x.id,cause:String(ne).slice(0,500)}).pipe(r.as(void 0)))),"compactionPrefix"),te=r.fn("SessionPrompt.run")(function*(x){let G=yield*V.context,ye,le=0,ne=yield*t.get(x).pipe(r.orDie);for(;;){if(Bo.isPaused()){Bo.hold(x);break}yield*e.set(x,{type:"busy"}),yield*r.logInfo("loop",{"session.id":x,step:le});let re=yield*nt.filterCompactedEffect(x).pipe(r.provideService(tt.Service,U)),{lastUser:se,lastAssistant:K,lastFinished:je,tasks:qe}=Xh(re);if(!se)throw new Error("No user message found in stream. This should never happen.");let Ue=re.findLast(Q=>Q.info.role==="assistant"&&Q.info.id===K?.id),Xe=Ue?.parts.some(Q=>Q.type==="tool"&&!Q.metadata?.providerExecuted&&!og(Q))??!1;if(K?.finish==="tool-calls"&&K.parentID===se.id&&Qh(Ue)){yield*t.updateMessage({...K,finish:"stop"}),yield*r.logInfo("exiting loop: a tool result ended the turn",{"session.id":x});break}if(K?.finish&&!["tool-calls","unknown"].includes(K.finish)&&!Xe&&K.parentID===se.id){let Q=Ue?.parts.find(he=>he.type==="tool"&&og(he));Q&&(yield*r.logWarning("loop exit with orphaned interrupted tool",{"session.id":x,messageID:K.id,tool:Q.tool,callID:Q.callID})),yield*r.logInfo("exiting loop",{"session.id":x});break}le++,le===1&&(yield*_({session:ne,modelID:se.model.modelID,providerID:se.model.providerID,history:re}).pipe(r.ignore,r.forkIn(d)));let xe=yield*j(se.model.providerID,se.model.modelID,x),Be=qe.pop();if(Be?.type==="subtask"){yield*N({task:Be,model:xe,lastUser:se,sessionID:x,session:ne,msgs:re});continue}if(Be?.type==="compaction"){if((yield*a.process({messages:re,parentID:se.id,sessionID:x,auto:Be.auto,overflow:Be.overflow,prefix:J(ne,xe,re)}))==="stop")break;continue}if(je&&je.summary!==!0&&(yield*a.isOverflow({tokens:je.tokens,model:xe}))){yield*a.create({sessionID:x,agent:se.agent,model:se.model,auto:!0});continue}let z=yield*n.get(se.agent);if(!z){let Q=(yield*n.list()).filter(Re=>!Re.hidden).map(Re=>Re.name),he=Q.length?` Available agents: ${Q.join(", ")}`:"",ge=new kn.Unknown({message:`Agent not found: "${se.agent}".${he}`});throw yield*C.publish(me.Event.Error,{sessionID:x,error:ge.toObject()}),ge}let b=z.steps??1/0,O=le>=b;re=yield*Ms.apply({messages:re,agent:z,session:ne}).pipe(r.provideService(Ve.Service,$),r.provideService(Me.Service,p),r.provideService(me.Service,t));let F={id:ct.ascending(),parentID:se.id,role:"assistant",mode:z.name,agent:z.name,variant:se.model.variant,path:{cwd:G.directory,root:G.worktree},cost:0,tokens:{input:0,output:0,reasoning:0,cache:{read:0,write:0}},modelID:xe.id,providerID:xe.providerID,time:{created:Date.now()},sessionID:x};yield*t.updateMessage(F);for(let[Q,he]of W)he.sessionID===x&&(W.delete(Q),yield*r.logWarning("person message read",{"session.id":x,messageID:Q,how:he.how,waitedMs:Date.now()-he.at}));let Z=Promise.withResolvers(),Oe=Ht.open(x,()=>Z.resolve()),ce=r.gen(function*(){F.time.completed||(F.error??=nt.fromError(new DOMException("Aborted","AbortError"),{providerID:F.providerID,aborted:!0}),F.time.completed=Date.now(),yield*t.updateMessage(F))}),de=yield*i.create({assistantMessage:F,sessionID:x,model:xe,preempt:r.promise(()=>Z.promise)}).pipe(r.onInterrupt(()=>ce));if((yield*r.gen(function*(){let he=re.findLast(kt=>kt.info.role==="user")?.parts.some(kt=>kt.type==="agent")??!1,{tools:ge,system:Re}=yield*Y({agent:z,session:ne,model:xe,processor:de,bypassAgentCheck:he,messages:re,gate:Oe});if(se.format?.type==="json_schema"&&(ge.StructuredOutput=ig({schema:se.format.schema,onSuccess(kt){ye=kt}})),le===1&&(yield*E.summarize({sessionID:x,messageID:se.id}).pipe(r.ignore,r.forkIn(d))),le>1&&je){let kt=new Set(re.filter(_t=>_t.info.role==="assistant"&&_t.info.aside).map(_t=>_t.info.parentID));for(let _t of re)if(!(_t.info.role!=="user"||ec.compareAscending(_t.info.id,je.id)<=0)&&!kt.has(_t.info.id))for(let vn of _t.parts)vn.type!=="text"||vn.ignored||vn.synthetic||vn.text.trim()&&(vn.text=Jh(vn.text))}yield*l.trigger("experimental.chat.messages.transform",{},{messages:re});let Qe=yield*nt.toModelMessagesEffect(re,xe),vt=se.format??{type:"text"};vt.type==="json_schema"&&Re.push(CD);let zo=yield*de.process({user:se,agent:z,permission:ne.permission,sessionID:x,parentSessionID:ne.parentID,system:Re,messages:[...Qe,...O?[{role:"assistant",content:_u}]:[]],tools:ge,model:xe,toolChoice:vt.type==="json_schema"?"required":void 0,storeSystem:it.on()?kt=>r.gen(function*(){let _t=it.newestStored(re),vn=re.at(-1)?.info.id;if(!_t||!vn)return;let Aa=_t.value.system?.at(-1);if(Aa&&Aa.after===vn&&Aa.text===kt)return;let kg=it.withSystem(_t.value,{after:vn,text:kt});_t.part.metadata={..._t.part.metadata,[it.METADATA_KEY]:kg},yield*t.updatePart(_t.part)}):void 0});if(ye!==void 0)return de.message.structured=ye,de.message.finish=de.message.finish??"stop",yield*t.updateMessage(de.message),"break";if(de.message.finish&&!["tool-calls","unknown"].includes(de.message.finish)&&!de.message.error){if(de.message.finish==="content-filter")return de.message.error=new ut.ContentFilterError({message:"The response was blocked by the provider's content filter"}).toObject(),yield*t.updateMessage(de.message),yield*C.publish(me.Event.Error,{sessionID:x,error:de.message.error}),"break";if(vt.type==="json_schema")return de.message.error=new ut.StructuredOutputError({message:"Model did not produce structured output",retries:0}).toObject(),yield*t.updateMessage(de.message),"break"}return zo==="stop"?"break":(zo==="compact"&&(yield*a.create({sessionID:x,agent:se.agent,model:se.model,auto:!0,overflow:!de.message.finish})),"continue")}).pipe(r.ensuring(r.sync(()=>Ht.close(x,Oe))),r.ensuring(k.clear(de.message.id)),r.onInterrupt(()=>ce)))==="break")break}return yield*a.prune({sessionID:x}).pipe(r.ignore,r.forkIn(d)),yield*R(x)}),ke=r.fn("SessionPrompt.loop")(function*(x){return Bo.isPaused()?(Bo.hold(x.sessionID),yield*R(x.sessionID)):yield*y.ensureRunning(x.sessionID,R(x.sessionID),te(x.sessionID))}),He=r.fn("SessionPrompt.shell")(function*(x){let G=yield*Rd.make();return yield*y.startShell(x.sessionID,R(x.sessionID),q(x,G),G)}),Pn=r.fn("SessionPrompt.command")(function*(x){yield*r.logInfo("command",{"session.id":x.sessionID,command:x.command,agent:x.agent});let G=yield*u.get(x.command);if(!G){let X=(yield*u.list()).map(ge=>ge.name),Q=X.length?` Available commands: ${X.join(", ")}`:"",he=new kn.Unknown({message:`Command not found: "${x.command}".${Q}`});throw yield*C.publish(me.Event.Error,{sessionID:x.sessionID,error:he.toObject()}),he}let ye=G.agent??x.agent,ne=(x.arguments.match(jD)??[]).map(X=>X.replace(UD,"")),re=yield*r.promise(async()=>G.template),se=re.match(rg)??[],K=0;for(let X of se){let Q=Number(X.slice(1));Q>K&&(K=Q)}let je=re.replaceAll(rg,(X,Q)=>{let he=Number(Q),ge=he-1;return ge>=ne.length?"":he===K?ne.slice(ge).join(" "):ne[ge]}),qe=re.includes("$ARGUMENTS"),Ue=je.replaceAll("$ARGUMENTS",x.arguments);se.length===0&&!qe&&x.arguments.trim()&&(Ue=Ue+`
1484
1484
 
1485
- `+S.arguments);let Xe=Xa.shell(Fe);if(Xe.length>0){let K=yield*f.get(),Q=ai.preferred(K.shell),he=yield*r.promise(()=>Promise.all(Xe.map(async([,Re])=>(await at.text([Re],{shell:Q,nothrow:!0})).text))),ge=0;Fe=Fe.replace(LD,()=>he[ge++])}Fe=Fe.trim();let xe=yield*r.gen(function*(){if(G.model)return bt.parseModel(G.model);if(G.agent){let K=yield*n.get(G.agent);if(K?.model)return K.model}return S.model?bt.parseModel(S.model):yield*ve(S.sessionID)});yield*j(xe.providerID,xe.modelID,S.sessionID);let Be=ye?yield*n.get(ye):yield*n.defaultInfo();if(!Be){let K=(yield*n.list()).filter(ge=>!ge.hidden).map(ge=>ge.name),Q=K.length?` Available agents: ${K.join(", ")}`:"",he=new kn.Unknown({message:`Agent not found: "${ye}".${Q}`});throw yield*C.publish(me.Event.Error,{sessionID:S.sessionID,error:he.toObject()}),he}let z=yield*A(Fe),b=new Set(S.parts?.filter(K=>new URL(K.url).protocol==="file:").map(K=>dd(K.url))),O=z.filter(K=>K.type!=="file"||!b.has(dd(K.url))),F=Be.mode==="subagent"&&G.subtask!==!1||G.subtask===!0,Z=F?[{type:"subtask",agent:Be.name,description:G.description??"",command:S.command,model:{providerID:xe.providerID,modelID:xe.modelID},prompt:z.find(K=>K.type==="text")?.text??""}]:[...O,...S.parts??[]],Oe=F?S.agent??(yield*n.defaultInfo()).name:Be.name,ce=F?S.model?bt.parseModel(S.model):yield*ve(S.sessionID):xe;yield*l.trigger("command.execute.before",{command:S.command,sessionID:S.sessionID,arguments:S.arguments},{parts:Z});let de=yield*Le({sessionID:S.sessionID,messageID:S.messageID,model:ce,agent:Oe,parts:Z,variant:S.variant});return yield*C.publish(yi.Event.Executed,{name:S.command,sessionID:S.sessionID,arguments:S.arguments,messageID:de.info.id}),de});return Fr.of({cancel:L,stopForPause:D,prompt:Le,loop:ke,shell:He,command:Pn,resolvePromptParts:A})})),rg=c.Struct({providerID:sn.ID,modelID:po.ID}),MD=c.Struct({sessionID:Rt,messageID:c.optional(ct),model:c.optional(rg),agent:c.optional(c.String),noReply:c.optional(c.Boolean),tools:c.optional(c.Record(c.String,c.Boolean)).annotate({description:"@deprecated tools and permissions have been merged, you can set permissions on the session itself now"}),format:c.optional(ut.Format),system:c.optional(c.String),variant:c.optional(c.String),parts:c.Array(c.Union([ut.TextPartInput,ut.FilePartInput,ut.AgentPartInput,ut.SubtaskPartInput]).annotate({discriminator:"type"}))}),pd=class extends c.Class("SessionPrompt.LoopInput")({sessionID:Rt}){static{s(this,"LoopInput")}},_D=c.Struct({sessionID:Rt,messageID:c.optional(ct),agent:c.String,model:c.optional(rg),command:c.String}),OD=c.Struct({messageID:c.optional(ct),sessionID:Rt,agent:c.optional(c.String),model:c.optional(c.String),arguments:c.String,command:c.String,variant:c.optional(c.String),parts:c.optional(c.Array(c.Union([c.Struct({id:c.optional(We),type:c.Literal("file"),mime:c.String,filename:c.optional(c.String),url:c.String,source:c.optional(ut.FilePartSource)})]).annotate({discriminator:"type"})))});function sg(e){let{$schema:t,...n}=e.schema;return{description:PD,inputSchema:yn(n),async execute(o){return e.onSuccess(o),{output:"Structured output captured successfully.",title:"Structured Output",metadata:{valid:!0}}},toModelOutput({output:o}){return{type:"text",value:o.output}}}}s(sg,"createStructuredOutputTool");var LD=/!`([^`]+)`/g,ND=/(?:\[Image\s+\d+\]|"[^"]*"|'[^']*'|[^\s"']+)/gi,og=/\$(\d+)/g,jD=/^["']|["']$/g,UD=De.make({service:Fr,layer:AD,deps:[ln.node,me.node,Ft.node,bt.node,jn.node,gr.node,ft.node,yi.node,Ne.node,Ze.node,Me.node,cn.node,mt.node,$n.node,Qn.node,bn.node,ni.node,En.node,Ln.node,br.node,un.node,to.node,dn.node,Ee.node,Ve.node,tt.node]});var $o={};fe($o,{ApplyInput:()=>tE,ApplyResult:()=>nE,Event:()=>ug,FileDiff:()=>ZD,FileStatus:()=>eE,Info:()=>QD,Mode:()=>XD,PatchApplyError:()=>js,Service:()=>lo,Vcs:()=>$o,node:()=>gd});var Ls={};fe(Ls,{BranchUpdated:()=>ig,Definitions:()=>FD,VcsEvent:()=>Ls});var ig=Tt.define({type:"vcs.branch.updated",schema:{branch:hn(c.String)}}),FD=Tt.inventory(ig);var fd=2147483647,ag=1e7,hd=1e7,ka=s(e=>Lu(Ou(e,e,"","","","",{context:0})),"emptyPatch"),cg=s(e=>new Map(e.map(t=>[t.file,{additions:t.additions,deletions:t.deletions}])),"nums"),BD=s((...e)=>{let t=new Map;return e.flat().forEach(n=>{t.has(n.file)||t.set(n.file,n)}),[...t.values()]},"merge"),$D=s(()=>({patches:new Map,capped:!1}),"emptyBatch"),md=s(e=>{let t="";for(let n=1;n<e.length;n++){let o=e[n];if(o==='"')return{value:t,end:n+1};if(o!=="\\"){t+=o;continue}let i=e[++n];i==="t"?t+=" ":i==="n"?t+=`
1486
- `:i==="r"?t+="\r":i==='"'||i==="\\"?t+=i:t+=i??""}},"parseQuotedPath"),qD=s(e=>e.startsWith('"')?md(e)?.value??e:e.split(" ")[0],"parsePathToken"),Ns=s(e=>{if(!e||e==="/dev/null")return;let t=qD(e);return t.startsWith("a/")||t.startsWith("b/")?t.slice(2):t},"fileFromDiffPath"),WD=s(e=>{if(e.startsWith('"')){let n=md(e),o=n?e.slice(n.end).trimStart():void 0;return o?o.startsWith('"')?Ns(md(o)?.value):Ns(o):void 0}let t=e.indexOf(" b/");if(t!==-1)return Ns(e.slice(t+1))},"fileFromGitHeader"),VD=s(e=>{let t=/^\+\+\+ (.+)$/m.exec(e)?.[1],n=/^--- (.+)$/m.exec(e)?.[1],o=Ns(t)??Ns(n);if(o)return o;let i=/^diff --git (.+)$/m.exec(e)?.[1];return WD(i??"")},"fileFromPatchChunk"),zD=s(e=>{let t=[...e.text.matchAll(/(?:^|\n)diff --git /g)].map(o=>o[0].startsWith(`
1487
- `)?o.index+1:o.index),n=t.map((o,i)=>e.text.slice(o,t[i+1]??e.text.length));return e.truncated?n.slice(0,-1):n},"splitGitPatch"),GD=r.fnUntraced(function*(e,t,n,o,i){if(o.length===0)return{patches:new Map,capped:!1};let a=yield*e.patchAll(t,n,{context:i?.context??fd,maxOutputBytes:hd});return{patches:zD(a).reduce((l,u,f)=>{let m=VD(u)??o[f]?.file;return m&&l.set(m,(l.get(m)??"")+u),l},new Map),capped:a.truncated}}),HD=r.fnUntraced(function*(e,t,n,o,i){let a=o.code==="??"||!n?yield*e.patchUntracked(t,o.file,{context:i?.context??fd,maxOutputBytes:ag}):yield*e.patch(t,n,o.file,{context:i?.context??fd,maxOutputBytes:ag});return!a.truncated&&a.text?a.text:ka(o.file)}),YD=s((e,t,n)=>n+Buffer.byteLength(t)<=hd?{patch:t,capped:!1}:{patch:ka(e),capped:!0},"totalPatch"),JD=r.fnUntraced(function*(e,t,n,o,i,a,l){if(a)return ka(o.file);let u=i.patches.get(o.file);return u!==void 0?u:o.code!=="??"&&i.capped?ka(o.file):yield*HD(e,t,n,o,l)}),lg=r.fnUntraced(function*(e,t,n,o,i,a,l){let u=[],f=0,m=!1;for(let p of o.toSorted((h,g)=>h.file.localeCompare(g.file))){let h=i.get(p.file)??(p.status==="added"?yield*e.statUntracked(t,p.file):void 0),g=yield*JD(e,t,n,p,a,m,l),I=m?{patch:g,capped:!0}:YD(p.file,g,f);m=m||I.capped,m||(f+=Buffer.byteLength(I.patch),m=f>=hd),u.push({file:p.file,patch:I.patch,additions:h?.additions??0,deletions:h?.deletions??0,status:p.status})}return u}),dg=r.fnUntraced(function*(e,t,n,o){let[i,a,l]=yield*r.all([e.diff(t,n),e.stats(t,n),e.status(t)],{concurrency:3});return yield*lg(e,t,n,BD(i,l.filter(u=>u.code==="??")),cg(a),yield*GD(e,t,n,i,o),o)}),KD=r.fnUntraced(function*(e,t,n,o){return n?yield*dg(e,t,n,o):yield*lg(e,t,n,yield*e.status(t),new Map,$D(),o)}),XD=c.Literals(["git","branch"]),ug=Ls,QD=c.Struct({branch:c.optional(c.String),default_branch:c.optional(c.String)}).annotate({identifier:"VcsInfo"}),ZD=c.Struct({file:c.String,patch:c.optional(c.String),additions:c.Finite,deletions:c.Finite,status:c.optional(c.Literals(["added","deleted","modified"]))}).annotate({identifier:"VcsFileDiff"}),eE=c.Struct({file:c.String,additions:c.Finite,deletions:c.Finite,status:c.Literals(["added","deleted","modified"])}).annotate({identifier:"VcsFileStatus"}),tE=c.Struct({patch:c.String}),nE=c.Struct({applied:c.Boolean}),js=class extends c.TaggedErrorClass()("VcsPatchApplyError",{message:c.String,reason:c.Literals(["non-git","not-clean"])}){static{s(this,"PatchApplyError")}},lo=class extends Ce.Service()("@opencode/Vcs"){static{s(this,"Service")}},oE=Pe.effect(lo,r.gen(function*(){let e=yield*tc.Service,t=yield*Ee.Service,n=yield*Et.Scope,o=yield*V.make(r.fn("Vcs.state")(function*(i){if(i.project.vcs!=="git")return{current:void 0,root:void 0};let a=r.fnUntraced(function*(){return yield*e.branch(i.directory)}),[l,u]=yield*r.all([e.branch(i.directory),e.defaultBranch(i.directory)],{concurrency:2}),f={current:l,root:u},m=yield*t.listen(p=>p.type!==_n.Event.Updated.type||p.location?.directory!==i.directory?r.void:p.data.file.endsWith("HEAD")?r.gen(function*(){let g=yield*a();g!==f.current&&(f.current=g,yield*t.publish(ug.BranchUpdated,{branch:g}))}):r.void);return yield*r.addFinalizer(()=>m),f}));return lo.of({init:r.fn("Vcs.init")(function*(){yield*V.get(o).pipe(r.forkIn(n))}),branch:r.fn("Vcs.branch")(function*(){return yield*V.use(o,i=>i.current)}),defaultBranch:r.fn("Vcs.defaultBranch")(function*(){return yield*V.use(o,i=>i.root?.name)}),status:r.fn("Vcs.status")(function*(){let i=yield*V.context;if(i.project.vcs!=="git")return[];let a=(yield*e.hasHead(i.directory))?"HEAD":void 0,[l,u]=yield*r.all([e.status(i.directory),a?e.stats(i.directory,a):r.succeed([])],{concurrency:2}),f=cg(u);return yield*r.forEach(l.toSorted((m,p)=>m.file.localeCompare(p.file)),m=>r.gen(function*(){let p=f.get(m.file)??(m.status==="added"?yield*e.statUntracked(i.worktree,m.file):void 0);return{file:m.file,additions:p?.additions??0,deletions:p?.deletions??0,status:m.status}}))}),diff:r.fn("Vcs.diff")(function*(i,a){let l=yield*V.get(o),u=yield*V.context;if(u.project.vcs!=="git")return[];if(i==="git")return yield*KD(e,u.directory,(yield*e.hasHead(u.directory))?"HEAD":void 0,a);if(!l.root)return[];if(l.current&&l.current===l.root.name)return[];let f=yield*e.mergeBase(u.directory,l.root.ref);return f?yield*dg(e,u.directory,f,a):[]}),diffRaw:r.fn("Vcs.diffRaw")(function*(){let i=yield*V.context;if(i.project.vcs!=="git")return"";let[a,l]=yield*r.all([e.hasHead(i.directory),e.status(i.directory)],{concurrency:2}),u=a?(yield*e.patchAll(i.directory,"HEAD")).text:"",f=yield*r.forEach(l.filter(m=>m.code==="??"),m=>e.patchUntracked(i.directory,m.file).pipe(r.map(p=>p.text)));return[u,...f].filter(Boolean).join(`
1488
- `)}),apply:r.fn("Vcs.apply")(function*(i){let a=yield*V.context;return a.project.vcs!=="git"?yield*new js({message:"Patch can't be applied because the project is not git-based",reason:"non-git"}):(yield*e.applyPatch(a.directory,i.patch)).exitCode!==0?yield*new js({message:"Patch can't be applied",reason:"not-clean"}):{applied:!0}})})})),gd=De.make({service:lo,layer:oE,deps:[tc.node,Ee.node]});var Wn={};fe(Wn,{Service:()=>Wo,ShareNext:()=>Wn,node:()=>lE,use:()=>sE});var qo=Jd("session_share",{session_id:Kr().primaryKey().references(()=>Pt.id,{onDelete:"cascade"}),id:Kr().notNull(),secret:Kr().notNull(),url:Kr().notNull(),...lu});var $r=process.env.OPENCODE_DISABLE_SHARE==="true"||process.env.OPENCODE_DISABLE_SHARE==="1",rE=c.Struct({id:c.String,url:c.String,secret:c.String}),Wo=class extends Ce.Service()("@opencode/ShareNext"){static{s(this,"Service")}},sE=Wt(Wo);function fg(e){return{create:`/api/${e}`,sync:s(t=>`/api/${e}/${t}/sync`,"sync"),remove:s(t=>`/api/${e}/${t}`,"remove"),data:s(t=>`/api/${e}/${t}/data`,"data")}}s(fg,"api");var iE=fg("share"),aE=fg("shares");function pg(e){switch(e.type){case"session":return"session";case"message":return`message/${e.data.id}`;case"part":return`part/${e.data.messageID}/${e.data.id}`;case"session_diff":return"session_diff";case"model":return"model"}}s(pg,"key");var cE=Pe.effect(Wo,r.gen(function*(){let e=yield*Ya.Service,t=yield*Ee.Service,n=yield*Ne.Service,{db:o}=yield*tt.Service,i=yield*fn.HttpClient,a=fn.filterStatusOk(i),l=yield*bt.Service,u=yield*me.Service;function f(y,x){return r.gen(function*(){if($r||!(yield*g(y)))return;let w=yield*V.get(m),M=w.queue.get(y);if(M){for(let $ of x)M.set(pg($),$);return}let C=new Map(x.map($=>[pg($),$]));w.queue.set(y,C),yield*I(y).pipe(r.delay(1e3),r.catchCause($=>r.logError("share flush failed",{sessionID:y,cause:$})),r.forkIn(w.scope))})}s(f,"sync");let m=yield*V.make(r.fn("ShareNext.state")(function*(y){let x={queue:new Map,scope:yield*Et.make(),shared:new Map};if(yield*r.addFinalizer(()=>Et.close(x.scope,wt.void).pipe(r.andThen(r.sync(()=>{x.queue.clear(),x.shared.clear()})))),$r)return x;let E=s((w,M)=>t.listen(C=>C.type!==w.type||C.location?.directory!==y.directory?r.void:M(C.data).pipe(r.catchCause($=>r.logError("share subscriber failed",{type:w.type,cause:$})))),"watch");return yield*E(me.Event.Updated,w=>r.gen(function*(){let M=w.info;yield*f(M.id,[{type:"session",data:structuredClone(M)}])})),yield*E(nt.Event.Updated,w=>r.gen(function*(){let M=w.info;if(yield*f(M.sessionID,[{type:"message",data:structuredClone(M)}]),M.role!=="user")return;let C=yield*l.getModel(M.model.providerID,M.model.modelID);yield*f(M.sessionID,[{type:"model",data:[C]}])})),yield*E(nt.Event.PartUpdated,w=>f(w.part.sessionID,[{type:"part",data:structuredClone(w.part)}])),yield*E(me.Event.Diff,w=>f(w.sessionID,[{type:"session_diff",data:structuredClone(w.diff)}])),yield*E(me.Event.Deleted,w=>k(w.sessionID)),x})),p=r.fn("ShareNext.request")(function*(){let y={},x=yield*e.active();if(xn.isNone(x)||!x.value.active_org_id){let w=(yield*n.get()).enterprise?.url??"https://opncd.ai";return{headers:y,api:iE,baseUrl:w}}let E=yield*e.token(x.value.id);if(xn.isNone(E))throw new Error("No active account token available for sharing");return y.authorization=`Bearer ${E.value}`,y["x-org-id"]=x.value.active_org_id,{headers:y,api:aE,baseUrl:x.value.url}}),h=r.fnUntraced(function*(y){let x=yield*o.select().from(qo).where(It(qo.session_id,y)).get().pipe(r.orDie);if(x)return{id:x.id,secret:x.secret,url:x.url}}),g=r.fnUntraced(function*(y){let x=yield*V.get(m);if(x.shared.has(y)){let w=x.shared.get(y);return w===null?void 0:w}let E=yield*h(y);return x.shared.set(y,E??null),E}),I=r.fn("ShareNext.flush")(function*(y){if($r)return;let x=yield*V.get(m),E=x.queue.get(y);if(!E)return;x.queue.delete(y);let w=yield*g(y);if(!w)return;let M=yield*p(),C=yield*Ye.post(`${M.baseUrl}${M.api.sync(w.id)}`).pipe(Ye.setHeaders(M.headers),Ye.bodyJson({secret:w.secret,data:Array.from(E.values())}),r.flatMap($=>i.execute($)));C.status>=400&&(yield*r.logWarning("failed to sync share",{sessionID:y,shareID:w.id,status:C.status}))}),T=r.fn("ShareNext.full")(function*(y){yield*r.logInfo("full sync",{sessionID:y});let x=yield*u.get(y),E=yield*u.diff(y),w=yield*u.messages({sessionID:y}),M=yield*r.forEach(Array.from(new Map(w.filter(C=>C.info.role==="user").map(C=>C.info.model).map(C=>[`${C.providerID}/${C.modelID}`,C])).values()),C=>l.getModel(sn.ID.make(C.providerID),po.ID.make(C.modelID)),{concurrency:8});yield*f(y,[{type:"session",data:x},...w.map(C=>({type:"message",data:C.info})),...w.flatMap(C=>C.parts.map($=>({type:"part",data:$}))),{type:"session_diff",data:E},{type:"model",data:M}])}),v=r.fn("ShareNext.init")(function*(){$r||(yield*V.get(m))}),P=r.fn("ShareNext.url")(function*(){return(yield*p()).baseUrl}),d=r.fn("ShareNext.create")(function*(y){if($r)return{id:"",url:"",secret:""};yield*r.logInfo("creating share",{sessionID:y});let x=yield*p(),E=yield*Ye.post(`${x.baseUrl}${x.api.create}`).pipe(Ye.setHeaders(x.headers),Ye.bodyJson({sessionID:y}),r.flatMap(M=>a.execute(M)),r.flatMap(zn.schemaBodyJson(rE)));yield*o.insert(qo).values({session_id:y,id:E.id,secret:E.secret,url:E.url}).onConflictDoUpdate({target:qo.session_id,set:{id:E.id,secret:E.secret,url:E.url}}).run().pipe(r.orDie);let w=yield*V.get(m);return w.shared.set(y,E),yield*T(y).pipe(r.catchCause(M=>r.logError("share full sync failed",{sessionID:y,cause:M})),r.forkIn(w.scope)),E}),k=r.fn("ShareNext.remove")(function*(y){if($r)return;yield*r.logInfo("removing share",{sessionID:y});let x=yield*V.get(m),E=yield*g(y);if(!E){x.shared.delete(y),x.queue.delete(y);return}let w=yield*p();yield*Ye.delete(`${w.baseUrl}${w.api.remove(E.id)}`).pipe(Ye.setHeaders(w.headers),Ye.bodyJson({secret:E.secret}),r.flatMap(M=>a.execute(M))),yield*o.delete(qo).where(It(qo.session_id,y)).run().pipe(r.orDie),x.shared.delete(y),x.queue.delete(y)});return Wo.of({init:v,url:P,request:p,create:d,remove:k})})),lE=De.make({service:Wo,layer:cE,deps:[Ya.node,Ee.node,Ne.node,tt.node,In,bt.node,me.node]});var qr={};fe(qr,{AppNodeBuilderV1:()=>qr,build:()=>fE});var Us={};fe(Us,{InstanceBootstrap:()=>Us,Service:()=>Zo,node:()=>uE});var dE=Pe.effect(Zo,r.gen(function*(){let e=yield*Ne.Service,t=yield*Jt.Service,n=yield*mt.Service,o=yield*ft.Service,i=yield*Ju,a=yield*Wn.Service,l=yield*an.Service,u=yield*lo,f=r.gen(function*(){let m=yield*V.context;yield*r.logInfo("bootstrapping",{directory:m.directory}),yield*e.get(),yield*o.init(),yield*r.forEach([n,a,t,u,l,i],p=>p.init().pipe(r.catchCause(h=>r.logWarning("init failed",{cause:h}))),{concurrency:"unbounded",discard:!0}).pipe(r.withSpan("InstanceBootstrap.init"))}).pipe(r.withSpan("InstanceBootstrap"));return Zo.of({run:f})})),uE=Xs({service:Zo,layer:dE,deps:[Ne.node,Jt.node,mt.node,ft.node,Ku,Wn.node,an.node,gd]});var pE=[er.bootstrapNode,Us.node];function fE(e,t=[]){return vo.build(e,t.concat([pE]))}s(fE,"build");var wd={};fe(wd,{ConnectionStatus:()=>wE,CreateInput:()=>vE,Event:()=>bd,Info:()=>Ea,Service:()=>Vo,SessionEventsNotFoundError:()=>Pa,SessionWarpHttpError:()=>$s,SessionWarpInput:()=>xE,SyncAbortedError:()=>Ca,SyncHttpError:()=>Bs,SyncTimeoutError:()=>Ra,Workspace:()=>wd,WorkspaceNotFoundError:()=>Ta,node:()=>kE,use:()=>SE});function yd(e){return e.signal?.aborted?r.fail(e.signal.reason??new Error("Request aborted")):r.callback(t=>{let n=s(()=>{i(),t(r.fail(e.signal?.reason??new Error("Request aborted")))},"abort"),o=s(l=>{try{if(!e.fn(l))return;i(),t(r.void)}catch(u){i(),t(r.fail(u))}},"handler"),i=s(()=>{clearTimeout(a),Qo.off("event",o),e.signal?.removeEventListener("abort",n)},"cleanup"),a=setTimeout(()=>{i(),t(r.fail(new Error("Timed out waiting for global event")))},e.timeout);return Qo.on("event",o),e.signal?.addEventListener("abort",n,{once:!0}),r.sync(i)})}s(yd,"waitEvent");var rn={};fe(rn,{WorkspaceAdapterRuntime:()=>rn,configure:()=>hE,create:()=>gE,list:()=>yE,remove:()=>bE,target:()=>mE});var Fs=r.gen(function*(){return{instance:yield*Fu,workspaceID:yield*ui}}),mE=s(e=>r.gen(function*(){let t=ns(e.projectID,e.type),n=yield*Fs;return yield*zt.fromPromise(()=>t.target(e,n))}),"target"),hE=s((e,t)=>r.gen(function*(){let n=yield*Fs;return yield*zt.fromPromise(()=>e.configure(t,n))}),"configure"),gE=s((e,t,n,o)=>r.gen(function*(){let i=yield*Fs;return yield*zt.fromPromise(()=>e.create(t,n,o,i))}),"create"),yE=s(e=>r.gen(function*(){let t=yield*Fs;return yield*zt.fromPromise(()=>Promise.resolve(e.list?.(t)??[]))}),"list"),bE=s(e=>r.gen(function*(){let t=ns(e.projectID,e.type),n=yield*Fs;return yield*zt.fromPromise(()=>t.remove(e,n))}),"remove");var Ea=c.Struct({...zu.fields,timeUsed:c.Number}).annotate({identifier:"Workspace"}),wE=qa.ConnectionStatus,bd=qa;function Da(e){return{id:e.id,type:e.type,branch:e.branch,name:e.name,directory:e.directory,extra:e.extra,projectID:e.project_id,timeUsed:e.time_used}}s(Da,"fromRow");var vE=c.Struct({id:c.optional(go.ID),type:Ea.fields.type,branch:Ea.fields.branch,projectID:du.ID,extra:c.optional(Ea.fields.extra)}),xE=c.Struct({workspaceID:c.NullOr(go.ID),sessionID:Rt,copyChanges:c.optional(c.Boolean)}),Bs=class extends c.TaggedErrorClass()("WorkspaceSyncHttpError",{message:c.String,status:c.Number,body:c.optional(c.String)}){static{s(this,"SyncHttpError")}},Ta=class extends c.TaggedErrorClass()("WorkspaceNotFoundError",{message:c.String,workspaceID:go.ID}){static{s(this,"WorkspaceNotFoundError")}},Pa=class extends c.TaggedErrorClass()("WorkspaceSessionEventsNotFoundError",{message:c.String,sessionID:Rt}){static{s(this,"SessionEventsNotFoundError")}},$s=class extends c.TaggedErrorClass()("WorkspaceSessionWarpHttpError",{message:c.String,workspaceID:go.ID,sessionID:Rt,status:c.Number,body:c.String}){static{s(this,"SessionWarpHttpError")}},Ra=class extends c.TaggedErrorClass()("WorkspaceSyncTimeoutError",{message:c.String,state:c.Record(c.String,c.Number)}){static{s(this,"SyncTimeoutError")}},Ca=class extends c.TaggedErrorClass()("WorkspaceSyncAbortedError",{message:c.String,cause:c.optional(c.Defect())}){static{s(this,"SyncAbortedError")}},Vo=class extends Ce.Service()("@opencode/Workspace"){static{s(this,"Service")}},SE=Wt(Vo),IE=Pe.effect(Vo,r.gen(function*(){let e=yield*Xt.Service,t=yield*me.Service,n=yield*Br.Service,o=yield*fn.HttpClient,i=yield*Ee.Service,a=yield*$o.Service,l=yield*Ve.Service,u=yield*Me.Service,{db:f}=yield*tt.Service,m=new Map,p=yield*Ho.make(),h=s((L,W)=>{if(m.get(L)?.status===W)return;let A={workspaceID:L,status:W};m.set(L,A),Qo.emit("event",{directory:"global",workspace:L,payload:{type:bd.Status.type,properties:A}})},"setStatus"),g=r.fn("Workspace.connectSSE")(function*(L,W){let D=yield*o.execute(Ye.get(Wr(L,"/global/event"),{headers:new Headers(W),accept:"text/event-stream"}));return D.status<200||D.status>=300?yield*new Bs({message:`Workspace sync HTTP failure: ${D.status}`,status:D.status}):D.stream}),I=r.fn("Workspace.parseSSE")(function*(L,W){yield*L.pipe(xt.decodeText(),xt.splitLines,xt.mapAccum(()=>({data:[],id:void 0,retry:1e3}),(D,A)=>{if(A==="")return D.data.length?[{...D,data:[]},[{data:D.data.join(`
1485
+ `+x.arguments);let Xe=Xa.shell(Ue);if(Xe.length>0){let X=yield*f.get(),Q=ai.preferred(X.shell),he=yield*r.promise(()=>Promise.all(Xe.map(async([,Re])=>(await at.text([Re],{shell:Q,nothrow:!0})).text))),ge=0;Ue=Ue.replace(ND,()=>he[ge++])}Ue=Ue.trim();let xe=yield*r.gen(function*(){if(G.model)return bt.parseModel(G.model);if(G.agent){let X=yield*n.get(G.agent);if(X?.model)return X.model}return x.model?bt.parseModel(x.model):yield*ve(x.sessionID)});yield*j(xe.providerID,xe.modelID,x.sessionID);let Be=ye?yield*n.get(ye):yield*n.defaultInfo();if(!Be){let X=(yield*n.list()).filter(ge=>!ge.hidden).map(ge=>ge.name),Q=X.length?` Available agents: ${X.join(", ")}`:"",he=new kn.Unknown({message:`Agent not found: "${ye}".${Q}`});throw yield*C.publish(me.Event.Error,{sessionID:x.sessionID,error:he.toObject()}),he}let z=yield*A(Ue),b=new Set(x.parts?.filter(X=>new URL(X.url).protocol==="file:").map(X=>dd(X.url))),O=z.filter(X=>X.type!=="file"||!b.has(dd(X.url))),F=Be.mode==="subagent"&&G.subtask!==!1||G.subtask===!0,Z=F?[{type:"subtask",agent:Be.name,description:G.description??"",command:x.command,model:{providerID:xe.providerID,modelID:xe.modelID},prompt:z.find(X=>X.type==="text")?.text??""}]:[...O,...x.parts??[]],Oe=F?x.agent??(yield*n.defaultInfo()).name:Be.name,ce=F?x.model?bt.parseModel(x.model):yield*ve(x.sessionID):xe;yield*l.trigger("command.execute.before",{command:x.command,sessionID:x.sessionID,arguments:x.arguments},{parts:Z});let de=yield*Le({sessionID:x.sessionID,messageID:x.messageID,model:ce,agent:Oe,parts:Z,variant:x.variant});return yield*C.publish(yi.Event.Executed,{name:x.command,sessionID:x.sessionID,arguments:x.arguments,messageID:de.info.id}),de});return Fr.of({cancel:L,stopForPause:D,prompt:Le,loop:ke,shell:He,command:Pn,resolvePromptParts:A})})),sg=c.Struct({providerID:sn.ID,modelID:po.ID}),_D=c.Struct({sessionID:Rt,messageID:c.optional(ct),model:c.optional(sg),agent:c.optional(c.String),noReply:c.optional(c.Boolean),tools:c.optional(c.Record(c.String,c.Boolean)).annotate({description:"@deprecated tools and permissions have been merged, you can set permissions on the session itself now"}),format:c.optional(ut.Format),system:c.optional(c.String),variant:c.optional(c.String),parts:c.Array(c.Union([ut.TextPartInput,ut.FilePartInput,ut.AgentPartInput,ut.SubtaskPartInput]).annotate({discriminator:"type"}))}),pd=class extends c.Class("SessionPrompt.LoopInput")({sessionID:Rt}){static{s(this,"LoopInput")}},OD=c.Struct({sessionID:Rt,messageID:c.optional(ct),agent:c.String,model:c.optional(sg),command:c.String}),LD=c.Struct({messageID:c.optional(ct),sessionID:Rt,agent:c.optional(c.String),model:c.optional(c.String),arguments:c.String,command:c.String,variant:c.optional(c.String),parts:c.optional(c.Array(c.Union([c.Struct({id:c.optional(We),type:c.Literal("file"),mime:c.String,filename:c.optional(c.String),url:c.String,source:c.optional(ut.FilePartSource)})]).annotate({discriminator:"type"})))});function ig(e){let{$schema:t,...n}=e.schema;return{description:RD,inputSchema:yn(n),async execute(o){return e.onSuccess(o),{output:"Structured output captured successfully.",title:"Structured Output",metadata:{valid:!0}}},toModelOutput({output:o}){return{type:"text",value:o.output}}}}s(ig,"createStructuredOutputTool");var ND=/!`([^`]+)`/g,jD=/(?:\[Image\s+\d+\]|"[^"]*"|'[^']*'|[^\s"']+)/gi,rg=/\$(\d+)/g,UD=/^["']|["']$/g,FD=De.make({service:Fr,layer:MD,deps:[ln.node,me.node,Ft.node,bt.node,jn.node,gr.node,ft.node,yi.node,Ne.node,Ze.node,Me.node,cn.node,mt.node,$n.node,Qn.node,bn.node,ni.node,En.node,Ln.node,br.node,un.node,to.node,dn.node,Ee.node,Ve.node,tt.node]});var $o={};fe($o,{ApplyInput:()=>nE,ApplyResult:()=>oE,Event:()=>pg,FileDiff:()=>eE,FileStatus:()=>tE,Info:()=>ZD,Mode:()=>QD,PatchApplyError:()=>js,Service:()=>lo,Vcs:()=>$o,node:()=>gd});var Ls={};fe(Ls,{BranchUpdated:()=>ag,Definitions:()=>BD,VcsEvent:()=>Ls});var ag=Tt.define({type:"vcs.branch.updated",schema:{branch:hn(c.String)}}),BD=Tt.inventory(ag);var fd=2147483647,cg=1e7,hd=1e7,ka=s(e=>Lu(Ou(e,e,"","","","",{context:0})),"emptyPatch"),lg=s(e=>new Map(e.map(t=>[t.file,{additions:t.additions,deletions:t.deletions}])),"nums"),$D=s((...e)=>{let t=new Map;return e.flat().forEach(n=>{t.has(n.file)||t.set(n.file,n)}),[...t.values()]},"merge"),qD=s(()=>({patches:new Map,capped:!1}),"emptyBatch"),md=s(e=>{let t="";for(let n=1;n<e.length;n++){let o=e[n];if(o==='"')return{value:t,end:n+1};if(o!=="\\"){t+=o;continue}let i=e[++n];i==="t"?t+=" ":i==="n"?t+=`
1486
+ `:i==="r"?t+="\r":i==='"'||i==="\\"?t+=i:t+=i??""}},"parseQuotedPath"),WD=s(e=>e.startsWith('"')?md(e)?.value??e:e.split(" ")[0],"parsePathToken"),Ns=s(e=>{if(!e||e==="/dev/null")return;let t=WD(e);return t.startsWith("a/")||t.startsWith("b/")?t.slice(2):t},"fileFromDiffPath"),VD=s(e=>{if(e.startsWith('"')){let n=md(e),o=n?e.slice(n.end).trimStart():void 0;return o?o.startsWith('"')?Ns(md(o)?.value):Ns(o):void 0}let t=e.indexOf(" b/");if(t!==-1)return Ns(e.slice(t+1))},"fileFromGitHeader"),zD=s(e=>{let t=/^\+\+\+ (.+)$/m.exec(e)?.[1],n=/^--- (.+)$/m.exec(e)?.[1],o=Ns(t)??Ns(n);if(o)return o;let i=/^diff --git (.+)$/m.exec(e)?.[1];return VD(i??"")},"fileFromPatchChunk"),GD=s(e=>{let t=[...e.text.matchAll(/(?:^|\n)diff --git /g)].map(o=>o[0].startsWith(`
1487
+ `)?o.index+1:o.index),n=t.map((o,i)=>e.text.slice(o,t[i+1]??e.text.length));return e.truncated?n.slice(0,-1):n},"splitGitPatch"),HD=r.fnUntraced(function*(e,t,n,o,i){if(o.length===0)return{patches:new Map,capped:!1};let a=yield*e.patchAll(t,n,{context:i?.context??fd,maxOutputBytes:hd});return{patches:GD(a).reduce((l,u,f)=>{let m=zD(u)??o[f]?.file;return m&&l.set(m,(l.get(m)??"")+u),l},new Map),capped:a.truncated}}),YD=r.fnUntraced(function*(e,t,n,o,i){let a=o.code==="??"||!n?yield*e.patchUntracked(t,o.file,{context:i?.context??fd,maxOutputBytes:cg}):yield*e.patch(t,n,o.file,{context:i?.context??fd,maxOutputBytes:cg});return!a.truncated&&a.text?a.text:ka(o.file)}),JD=s((e,t,n)=>n+Buffer.byteLength(t)<=hd?{patch:t,capped:!1}:{patch:ka(e),capped:!0},"totalPatch"),KD=r.fnUntraced(function*(e,t,n,o,i,a,l){if(a)return ka(o.file);let u=i.patches.get(o.file);return u!==void 0?u:o.code!=="??"&&i.capped?ka(o.file):yield*YD(e,t,n,o,l)}),dg=r.fnUntraced(function*(e,t,n,o,i,a,l){let u=[],f=0,m=!1;for(let p of o.toSorted((h,g)=>h.file.localeCompare(g.file))){let h=i.get(p.file)??(p.status==="added"?yield*e.statUntracked(t,p.file):void 0),g=yield*KD(e,t,n,p,a,m,l),I=m?{patch:g,capped:!0}:JD(p.file,g,f);m=m||I.capped,m||(f+=Buffer.byteLength(I.patch),m=f>=hd),u.push({file:p.file,patch:I.patch,additions:h?.additions??0,deletions:h?.deletions??0,status:p.status})}return u}),ug=r.fnUntraced(function*(e,t,n,o){let[i,a,l]=yield*r.all([e.diff(t,n),e.stats(t,n),e.status(t)],{concurrency:3});return yield*dg(e,t,n,$D(i,l.filter(u=>u.code==="??")),lg(a),yield*HD(e,t,n,i,o),o)}),XD=r.fnUntraced(function*(e,t,n,o){return n?yield*ug(e,t,n,o):yield*dg(e,t,n,yield*e.status(t),new Map,qD(),o)}),QD=c.Literals(["git","branch"]),pg=Ls,ZD=c.Struct({branch:c.optional(c.String),default_branch:c.optional(c.String)}).annotate({identifier:"VcsInfo"}),eE=c.Struct({file:c.String,patch:c.optional(c.String),additions:c.Finite,deletions:c.Finite,status:c.optional(c.Literals(["added","deleted","modified"]))}).annotate({identifier:"VcsFileDiff"}),tE=c.Struct({file:c.String,additions:c.Finite,deletions:c.Finite,status:c.Literals(["added","deleted","modified"])}).annotate({identifier:"VcsFileStatus"}),nE=c.Struct({patch:c.String}),oE=c.Struct({applied:c.Boolean}),js=class extends c.TaggedErrorClass()("VcsPatchApplyError",{message:c.String,reason:c.Literals(["non-git","not-clean"])}){static{s(this,"PatchApplyError")}},lo=class extends Ce.Service()("@opencode/Vcs"){static{s(this,"Service")}},rE=Pe.effect(lo,r.gen(function*(){let e=yield*tc.Service,t=yield*Ee.Service,n=yield*Et.Scope,o=yield*V.make(r.fn("Vcs.state")(function*(i){if(i.project.vcs!=="git")return{current:void 0,root:void 0};let a=r.fnUntraced(function*(){return yield*e.branch(i.directory)}),[l,u]=yield*r.all([e.branch(i.directory),e.defaultBranch(i.directory)],{concurrency:2}),f={current:l,root:u},m=yield*t.listen(p=>p.type!==_n.Event.Updated.type||p.location?.directory!==i.directory?r.void:p.data.file.endsWith("HEAD")?r.gen(function*(){let g=yield*a();g!==f.current&&(f.current=g,yield*t.publish(pg.BranchUpdated,{branch:g}))}):r.void);return yield*r.addFinalizer(()=>m),f}));return lo.of({init:r.fn("Vcs.init")(function*(){yield*V.get(o).pipe(r.forkIn(n))}),branch:r.fn("Vcs.branch")(function*(){return yield*V.use(o,i=>i.current)}),defaultBranch:r.fn("Vcs.defaultBranch")(function*(){return yield*V.use(o,i=>i.root?.name)}),status:r.fn("Vcs.status")(function*(){let i=yield*V.context;if(i.project.vcs!=="git")return[];let a=(yield*e.hasHead(i.directory))?"HEAD":void 0,[l,u]=yield*r.all([e.status(i.directory),a?e.stats(i.directory,a):r.succeed([])],{concurrency:2}),f=lg(u);return yield*r.forEach(l.toSorted((m,p)=>m.file.localeCompare(p.file)),m=>r.gen(function*(){let p=f.get(m.file)??(m.status==="added"?yield*e.statUntracked(i.worktree,m.file):void 0);return{file:m.file,additions:p?.additions??0,deletions:p?.deletions??0,status:m.status}}))}),diff:r.fn("Vcs.diff")(function*(i,a){let l=yield*V.get(o),u=yield*V.context;if(u.project.vcs!=="git")return[];if(i==="git")return yield*XD(e,u.directory,(yield*e.hasHead(u.directory))?"HEAD":void 0,a);if(!l.root)return[];if(l.current&&l.current===l.root.name)return[];let f=yield*e.mergeBase(u.directory,l.root.ref);return f?yield*ug(e,u.directory,f,a):[]}),diffRaw:r.fn("Vcs.diffRaw")(function*(){let i=yield*V.context;if(i.project.vcs!=="git")return"";let[a,l]=yield*r.all([e.hasHead(i.directory),e.status(i.directory)],{concurrency:2}),u=a?(yield*e.patchAll(i.directory,"HEAD")).text:"",f=yield*r.forEach(l.filter(m=>m.code==="??"),m=>e.patchUntracked(i.directory,m.file).pipe(r.map(p=>p.text)));return[u,...f].filter(Boolean).join(`
1488
+ `)}),apply:r.fn("Vcs.apply")(function*(i){let a=yield*V.context;return a.project.vcs!=="git"?yield*new js({message:"Patch can't be applied because the project is not git-based",reason:"non-git"}):(yield*e.applyPatch(a.directory,i.patch)).exitCode!==0?yield*new js({message:"Patch can't be applied",reason:"not-clean"}):{applied:!0}})})})),gd=De.make({service:lo,layer:rE,deps:[tc.node,Ee.node]});var Wn={};fe(Wn,{Service:()=>Wo,ShareNext:()=>Wn,node:()=>dE,use:()=>iE});var qo=Jd("session_share",{session_id:Kr().primaryKey().references(()=>Pt.id,{onDelete:"cascade"}),id:Kr().notNull(),secret:Kr().notNull(),url:Kr().notNull(),...lu});var $r=process.env.OPENCODE_DISABLE_SHARE==="true"||process.env.OPENCODE_DISABLE_SHARE==="1",sE=c.Struct({id:c.String,url:c.String,secret:c.String}),Wo=class extends Ce.Service()("@opencode/ShareNext"){static{s(this,"Service")}},iE=Wt(Wo);function mg(e){return{create:`/api/${e}`,sync:s(t=>`/api/${e}/${t}/sync`,"sync"),remove:s(t=>`/api/${e}/${t}`,"remove"),data:s(t=>`/api/${e}/${t}/data`,"data")}}s(mg,"api");var aE=mg("share"),cE=mg("shares");function fg(e){switch(e.type){case"session":return"session";case"message":return`message/${e.data.id}`;case"part":return`part/${e.data.messageID}/${e.data.id}`;case"session_diff":return"session_diff";case"model":return"model"}}s(fg,"key");var lE=Pe.effect(Wo,r.gen(function*(){let e=yield*Ya.Service,t=yield*Ee.Service,n=yield*Ne.Service,{db:o}=yield*tt.Service,i=yield*fn.HttpClient,a=fn.filterStatusOk(i),l=yield*bt.Service,u=yield*me.Service;function f(y,S){return r.gen(function*(){if($r||!(yield*g(y)))return;let w=yield*V.get(m),M=w.queue.get(y);if(M){for(let $ of S)M.set(fg($),$);return}let C=new Map(S.map($=>[fg($),$]));w.queue.set(y,C),yield*I(y).pipe(r.delay(1e3),r.catchCause($=>r.logError("share flush failed",{sessionID:y,cause:$})),r.forkIn(w.scope))})}s(f,"sync");let m=yield*V.make(r.fn("ShareNext.state")(function*(y){let S={queue:new Map,scope:yield*Et.make(),shared:new Map};if(yield*r.addFinalizer(()=>Et.close(S.scope,wt.void).pipe(r.andThen(r.sync(()=>{S.queue.clear(),S.shared.clear()})))),$r)return S;let E=s((w,M)=>t.listen(C=>C.type!==w.type||C.location?.directory!==y.directory?r.void:M(C.data).pipe(r.catchCause($=>r.logError("share subscriber failed",{type:w.type,cause:$})))),"watch");return yield*E(me.Event.Updated,w=>r.gen(function*(){let M=w.info;yield*f(M.id,[{type:"session",data:structuredClone(M)}])})),yield*E(nt.Event.Updated,w=>r.gen(function*(){let M=w.info;if(yield*f(M.sessionID,[{type:"message",data:structuredClone(M)}]),M.role!=="user")return;let C=yield*l.getModel(M.model.providerID,M.model.modelID);yield*f(M.sessionID,[{type:"model",data:[C]}])})),yield*E(nt.Event.PartUpdated,w=>f(w.part.sessionID,[{type:"part",data:structuredClone(w.part)}])),yield*E(me.Event.Diff,w=>f(w.sessionID,[{type:"session_diff",data:structuredClone(w.diff)}])),yield*E(me.Event.Deleted,w=>k(w.sessionID)),S})),p=r.fn("ShareNext.request")(function*(){let y={},S=yield*e.active();if(xn.isNone(S)||!S.value.active_org_id){let w=(yield*n.get()).enterprise?.url??"https://opncd.ai";return{headers:y,api:aE,baseUrl:w}}let E=yield*e.token(S.value.id);if(xn.isNone(E))throw new Error("No active account token available for sharing");return y.authorization=`Bearer ${E.value}`,y["x-org-id"]=S.value.active_org_id,{headers:y,api:cE,baseUrl:S.value.url}}),h=r.fnUntraced(function*(y){let S=yield*o.select().from(qo).where(It(qo.session_id,y)).get().pipe(r.orDie);if(S)return{id:S.id,secret:S.secret,url:S.url}}),g=r.fnUntraced(function*(y){let S=yield*V.get(m);if(S.shared.has(y)){let w=S.shared.get(y);return w===null?void 0:w}let E=yield*h(y);return S.shared.set(y,E??null),E}),I=r.fn("ShareNext.flush")(function*(y){if($r)return;let S=yield*V.get(m),E=S.queue.get(y);if(!E)return;S.queue.delete(y);let w=yield*g(y);if(!w)return;let M=yield*p(),C=yield*Ye.post(`${M.baseUrl}${M.api.sync(w.id)}`).pipe(Ye.setHeaders(M.headers),Ye.bodyJson({secret:w.secret,data:Array.from(E.values())}),r.flatMap($=>i.execute($)));C.status>=400&&(yield*r.logWarning("failed to sync share",{sessionID:y,shareID:w.id,status:C.status}))}),T=r.fn("ShareNext.full")(function*(y){yield*r.logInfo("full sync",{sessionID:y});let S=yield*u.get(y),E=yield*u.diff(y),w=yield*u.messages({sessionID:y}),M=yield*r.forEach(Array.from(new Map(w.filter(C=>C.info.role==="user").map(C=>C.info.model).map(C=>[`${C.providerID}/${C.modelID}`,C])).values()),C=>l.getModel(sn.ID.make(C.providerID),po.ID.make(C.modelID)),{concurrency:8});yield*f(y,[{type:"session",data:S},...w.map(C=>({type:"message",data:C.info})),...w.flatMap(C=>C.parts.map($=>({type:"part",data:$}))),{type:"session_diff",data:E},{type:"model",data:M}])}),v=r.fn("ShareNext.init")(function*(){$r||(yield*V.get(m))}),P=r.fn("ShareNext.url")(function*(){return(yield*p()).baseUrl}),d=r.fn("ShareNext.create")(function*(y){if($r)return{id:"",url:"",secret:""};yield*r.logInfo("creating share",{sessionID:y});let S=yield*p(),E=yield*Ye.post(`${S.baseUrl}${S.api.create}`).pipe(Ye.setHeaders(S.headers),Ye.bodyJson({sessionID:y}),r.flatMap(M=>a.execute(M)),r.flatMap(zn.schemaBodyJson(sE)));yield*o.insert(qo).values({session_id:y,id:E.id,secret:E.secret,url:E.url}).onConflictDoUpdate({target:qo.session_id,set:{id:E.id,secret:E.secret,url:E.url}}).run().pipe(r.orDie);let w=yield*V.get(m);return w.shared.set(y,E),yield*T(y).pipe(r.catchCause(M=>r.logError("share full sync failed",{sessionID:y,cause:M})),r.forkIn(w.scope)),E}),k=r.fn("ShareNext.remove")(function*(y){if($r)return;yield*r.logInfo("removing share",{sessionID:y});let S=yield*V.get(m),E=yield*g(y);if(!E){S.shared.delete(y),S.queue.delete(y);return}let w=yield*p();yield*Ye.delete(`${w.baseUrl}${w.api.remove(E.id)}`).pipe(Ye.setHeaders(w.headers),Ye.bodyJson({secret:E.secret}),r.flatMap(M=>a.execute(M))),yield*o.delete(qo).where(It(qo.session_id,y)).run().pipe(r.orDie),S.shared.delete(y),S.queue.delete(y)});return Wo.of({init:v,url:P,request:p,create:d,remove:k})})),dE=De.make({service:Wo,layer:lE,deps:[Ya.node,Ee.node,Ne.node,tt.node,In,bt.node,me.node]});var qr={};fe(qr,{AppNodeBuilderV1:()=>qr,build:()=>mE});var Us={};fe(Us,{InstanceBootstrap:()=>Us,Service:()=>Zo,node:()=>pE});var uE=Pe.effect(Zo,r.gen(function*(){let e=yield*Ne.Service,t=yield*Jt.Service,n=yield*mt.Service,o=yield*ft.Service,i=yield*Ju,a=yield*Wn.Service,l=yield*an.Service,u=yield*lo,f=r.gen(function*(){let m=yield*V.context;yield*r.logInfo("bootstrapping",{directory:m.directory}),yield*e.get(),yield*o.init(),yield*r.forEach([n,a,t,u,l,i],p=>p.init().pipe(r.catchCause(h=>r.logWarning("init failed",{cause:h}))),{concurrency:"unbounded",discard:!0}).pipe(r.withSpan("InstanceBootstrap.init"))}).pipe(r.withSpan("InstanceBootstrap"));return Zo.of({run:f})})),pE=Xs({service:Zo,layer:uE,deps:[Ne.node,Jt.node,mt.node,ft.node,Ku,Wn.node,an.node,gd]});var fE=[er.bootstrapNode,Us.node];function mE(e,t=[]){return vo.build(e,t.concat([fE]))}s(mE,"build");var wd={};fe(wd,{ConnectionStatus:()=>vE,CreateInput:()=>xE,Event:()=>bd,Info:()=>Ea,Service:()=>Vo,SessionEventsNotFoundError:()=>Pa,SessionWarpHttpError:()=>$s,SessionWarpInput:()=>SE,SyncAbortedError:()=>Ca,SyncHttpError:()=>Bs,SyncTimeoutError:()=>Ra,Workspace:()=>wd,WorkspaceNotFoundError:()=>Ta,node:()=>DE,use:()=>IE});function yd(e){return e.signal?.aborted?r.fail(e.signal.reason??new Error("Request aborted")):r.callback(t=>{let n=s(()=>{i(),t(r.fail(e.signal?.reason??new Error("Request aborted")))},"abort"),o=s(l=>{try{if(!e.fn(l))return;i(),t(r.void)}catch(u){i(),t(r.fail(u))}},"handler"),i=s(()=>{clearTimeout(a),Qo.off("event",o),e.signal?.removeEventListener("abort",n)},"cleanup"),a=setTimeout(()=>{i(),t(r.fail(new Error("Timed out waiting for global event")))},e.timeout);return Qo.on("event",o),e.signal?.addEventListener("abort",n,{once:!0}),r.sync(i)})}s(yd,"waitEvent");var rn={};fe(rn,{WorkspaceAdapterRuntime:()=>rn,configure:()=>gE,create:()=>yE,list:()=>bE,remove:()=>wE,target:()=>hE});var Fs=r.gen(function*(){return{instance:yield*Fu,workspaceID:yield*ui}}),hE=s(e=>r.gen(function*(){let t=ns(e.projectID,e.type),n=yield*Fs;return yield*zt.fromPromise(()=>t.target(e,n))}),"target"),gE=s((e,t)=>r.gen(function*(){let n=yield*Fs;return yield*zt.fromPromise(()=>e.configure(t,n))}),"configure"),yE=s((e,t,n,o)=>r.gen(function*(){let i=yield*Fs;return yield*zt.fromPromise(()=>e.create(t,n,o,i))}),"create"),bE=s(e=>r.gen(function*(){let t=yield*Fs;return yield*zt.fromPromise(()=>Promise.resolve(e.list?.(t)??[]))}),"list"),wE=s(e=>r.gen(function*(){let t=ns(e.projectID,e.type),n=yield*Fs;return yield*zt.fromPromise(()=>t.remove(e,n))}),"remove");var Ea=c.Struct({...zu.fields,timeUsed:c.Number}).annotate({identifier:"Workspace"}),vE=qa.ConnectionStatus,bd=qa;function Da(e){return{id:e.id,type:e.type,branch:e.branch,name:e.name,directory:e.directory,extra:e.extra,projectID:e.project_id,timeUsed:e.time_used}}s(Da,"fromRow");var xE=c.Struct({id:c.optional(go.ID),type:Ea.fields.type,branch:Ea.fields.branch,projectID:du.ID,extra:c.optional(Ea.fields.extra)}),SE=c.Struct({workspaceID:c.NullOr(go.ID),sessionID:Rt,copyChanges:c.optional(c.Boolean)}),Bs=class extends c.TaggedErrorClass()("WorkspaceSyncHttpError",{message:c.String,status:c.Number,body:c.optional(c.String)}){static{s(this,"SyncHttpError")}},Ta=class extends c.TaggedErrorClass()("WorkspaceNotFoundError",{message:c.String,workspaceID:go.ID}){static{s(this,"WorkspaceNotFoundError")}},Pa=class extends c.TaggedErrorClass()("WorkspaceSessionEventsNotFoundError",{message:c.String,sessionID:Rt}){static{s(this,"SessionEventsNotFoundError")}},$s=class extends c.TaggedErrorClass()("WorkspaceSessionWarpHttpError",{message:c.String,workspaceID:go.ID,sessionID:Rt,status:c.Number,body:c.String}){static{s(this,"SessionWarpHttpError")}},Ra=class extends c.TaggedErrorClass()("WorkspaceSyncTimeoutError",{message:c.String,state:c.Record(c.String,c.Number)}){static{s(this,"SyncTimeoutError")}},Ca=class extends c.TaggedErrorClass()("WorkspaceSyncAbortedError",{message:c.String,cause:c.optional(c.Defect())}){static{s(this,"SyncAbortedError")}},Vo=class extends Ce.Service()("@opencode/Workspace"){static{s(this,"Service")}},IE=Wt(Vo),kE=Pe.effect(Vo,r.gen(function*(){let e=yield*Xt.Service,t=yield*me.Service,n=yield*Br.Service,o=yield*fn.HttpClient,i=yield*Ee.Service,a=yield*$o.Service,l=yield*Ve.Service,u=yield*Me.Service,{db:f}=yield*tt.Service,m=new Map,p=yield*Ho.make(),h=s((L,W)=>{if(m.get(L)?.status===W)return;let A={workspaceID:L,status:W};m.set(L,A),Qo.emit("event",{directory:"global",workspace:L,payload:{type:bd.Status.type,properties:A}})},"setStatus"),g=r.fn("Workspace.connectSSE")(function*(L,W){let D=yield*o.execute(Ye.get(Wr(L,"/global/event"),{headers:new Headers(W),accept:"text/event-stream"}));return D.status<200||D.status>=300?yield*new Bs({message:`Workspace sync HTTP failure: ${D.status}`,status:D.status}):D.stream}),I=r.fn("Workspace.parseSSE")(function*(L,W){yield*L.pipe(xt.decodeText(),xt.splitLines,xt.mapAccum(()=>({data:[],id:void 0,retry:1e3}),(D,A)=>{if(A==="")return D.data.length?[{...D,data:[]},[{data:D.data.join(`
1489
1489
  `),id:D.id,retry:D.retry}]]:[D,[]];let _=A.indexOf(":"),N=_===-1?A:A.slice(0,_),q=_===-1?"":A.slice(_+(A[_+1]===" "?2:1));if(N==="data")return[{...D,data:[...D.data,q]},[]];if(N==="id")return[{...D,id:q},[]];if(N==="retry"){let j=Number.parseInt(q,10);return[Number.isNaN(j)?D:{...D,retry:j},[]]}return[D,[]]},{onHalt:s(D=>D.data.length?[{data:D.data.join(`
1490
- `),id:D.id,retry:D.retry}]:[],"onHalt")}),xt.map(D=>{try{return JSON.parse(D.data)}catch{return{type:"sse.message",properties:{data:D.data,id:D.id||void 0,retry:D.retry}}}}),xt.runForEach(W))}),T=s(L=>r.gen(function*(){if(!L.workspaceID)return yield*L.local();let W=yield*M(L.workspaceID);if(!W)return L.fallback;let D=yield*rn.target(W);if(D.type==="local")return yield*(yield*er.Service).provide({directory:D.directory},L.local());let A=yield*o.execute(L.remote({workspace:W,target:D})).pipe(r.catch(N=>r.logWarning("workspace target request failed",{workspaceID:W.id,error:Kn(N)}).pipe(r.as(void 0))));if(!A)return L.fallback;if(A.status<200||A.status>=300){let N=yield*A.text.pipe(r.catch(()=>r.succeed("")));return yield*r.logWarning("workspace target request failed",{workspaceID:W.id,status:A.status,body:N}),L.fallback}return yield*(L.response==="text"?A.text:A.json).pipe(r.map(N=>N),r.catch(N=>r.logWarning("workspace target response decode failed",{workspaceID:W.id,error:Kn(N)}).pipe(r.as(L.fallback))))}),"runInWorkspace"),v=r.fn("Workspace.syncHistory")(function*(L,W,D){let A=(yield*f.select({id:Pt.id}).from(Pt).where(It(Pt.workspace_id,L.id)).all().pipe(r.orDie)).map(j=>j.id),_=A.length?Object.fromEntries((yield*f.select().from(fo).where(Ua(fo.aggregate_id,A)).all().pipe(r.orDie)).map(j=>[j.aggregate_id,j.seq])):{},N=yield*o.execute(Ye.post(Wr(W,"/sync/history"),{headers:new Headers(D),body:Jr.jsonUnsafe(_)}));if(N.status<200||N.status>=300){let j=yield*N.text;return yield*new Bs({message:`Workspace history HTTP failure: ${N.status} ${j}`,status:N.status,body:j})}let q=yield*N.json;yield*r.forEach(q,j=>i.replay({id:fu.ID.make(j.id),aggregateID:j.aggregate_id,seq:j.seq,type:j.type,data:j.data},{publish:!0,ownerID:L.id}).pipe(r.provideService(ui,L.id)),{discard:!0})}),P=r.fn("Workspace.syncWorkspaceLoop")(function*(L){let W=yield*rn.target(L);if(W.type==="local")return;let D=0;for(;;){h(L.id,"connecting");let A=yield*g(W.url,W.headers).pipe(r.tap(()=>v(L,W.url,W.headers)),r.catch(_=>r.gen(function*(){return h(L.id,"error"),yield*r.logWarning("failed to connect to global sync",{workspace:L.name,error:Kn(_)}),null})));A&&(D=0,h(L.id,"connected"),yield*I(A,_=>r.gen(function*(){if(!_||typeof _!="object"||!("payload"in _))return;let N=_.payload;if(N.type!=="server.heartbeat"&&!(N.type==="sync"&&N.syncEvent&&(yield*i.replay(N.syncEvent,{publish:!0,ownerID:L.id}).pipe(r.as(!1),r.catchCause(j=>r.logWarning("failed to replay global event",j).pipe(r.annotateLogs({workspaceID:L.id}),r.as(!0)))))))try{let q=_;Qo.emit("event",{directory:q.directory,project:q.project,workspace:L.id,payload:q.payload})}catch(q){yield*r.logWarning("failed to emit global event",{workspaceID:L.id,error:Kn(q)})}})),h(L.id,"disconnected")),yield*r.sleep(`${Math.min(12e4,1e3*2**D)} millis`),D+=1}}),d=r.fn("Workspace.startSync")(function*(L){if(!l.experimentalWorkspaces)return;let W=yield*rn.target(L).pipe(r.catch(A=>r.gen(function*(){return h(L.id,"error"),yield*r.logWarning("workspace target failed",{workspaceID:L.id,error:Kn(A)}),null})));if(!W)return;if(W.type==="local"){h(L.id,(yield*u.existsSafe(W.directory))?"connected":"error");return}(yield*Ho.has(p,L.id))&&m.get(L.id)?.status!=="error"||(h(L.id,"disconnected"),yield*Ho.run(p,L.id,P(L).pipe(r.catch(A=>r.gen(function*(){h(L.id,"error"),yield*r.logWarning("workspace listener failed",{workspaceID:L.id,error:Kn(A)})})))))}),k=r.fn("Workspace.stopSync")(function*(L){yield*Ho.remove(p,L),m.delete(L)}),y=r.fn("Workspace.create")(function*(L){let W=go.ID.ascending(L.id),D=ns(L.projectID,L.type),A=yield*rn.configure(D,{...L,id:W,name:mu.create(),directory:null,extra:L.extra??null}),_={id:W,type:A.type,branch:A.branch??null,name:A.name??null,directory:A.directory??null,extra:A.extra??null,projectID:L.projectID,timeUsed:Date.now()};yield*f.insert(Vt).values({id:_.id,type:_.type,branch:_.branch,name:_.name,directory:_.directory,extra:_.extra,project_id:_.projectID,time_used:_.timeUsed}).run().pipe(r.orDie);let N={OPENCODE_AUTH_CONTENT:JSON.stringify(yield*e.all()),OPENCODE_WORKSPACE_ID:A.id,OPENCODE_EXPERIMENTAL_WORKSPACES:"true",OTEL_EXPORTER_OTLP_HEADERS:process.env.OTEL_EXPORTER_OTLP_HEADERS,OTEL_EXPORTER_OTLP_ENDPOINT:process.env.OTEL_EXPORTER_OTLP_ENDPOINT,OTEL_RESOURCE_ATTRIBUTES:process.env.OTEL_RESOURCE_ATTRIBUTES};return yield*rn.create(D,A,N),yield*r.all([yd({timeout:mg,fn(q){if(q.workspace===_.id&&q.payload.type===bd.Status.type){let{status:j}=q.payload.properties;return j==="error"||j==="connected"}return!1}}),d(_)],{concurrency:2,discard:!0}),_}),x=r.fn("Workspace.sessionWarp")(function*(L){return yield*r.gen(function*(){let W=yield*f.select({workspaceID:Pt.workspace_id}).from(Pt).where(It(Pt.id,L.sessionID)).get().pipe(r.orDie);if(W?.workspaceID){let ae=yield*M(W.workspaceID);if(ae){let oe=yield*rn.target(ae);oe.type==="remote"?yield*v(ae,oe.url,oe.headers).pipe(r.catch($e=>r.logWarning("session warp final source sync failed",{workspaceID:ae.id,sessionID:L.sessionID,error:Kn($e)}))):yield*n.cancel(L.sessionID),yield*i.claim(L.sessionID,L.workspaceID??ae.projectID)}}let D=L.copyChanges&&W?.workspaceID?yield*T({workspaceID:W?.workspaceID??void 0,local:s(()=>a.diffRaw(),"local"),remote:s(({target:ae})=>Ye.get(Wr(ae.url,"/vcs/diff/raw"),{headers:new Headers(ae.headers)}),"remote"),fallback:"",response:"text"}).pipe(r.provide(qr.build(er.node))):"";if(D&&(yield*T({workspaceID:L.workspaceID??void 0,local:s(()=>a.apply({patch:D}),"local"),remote:s(({target:ae})=>Ye.post(Wr(ae.url,"/vcs/apply"),{headers:new Headers(ae.headers),body:Jr.jsonUnsafe({patch:D})}),"remote"),fallback:{applied:!1}}).pipe(r.provide(qr.build(er.node)))),L.workspaceID===null){yield*t.setWorkspace({sessionID:L.sessionID,workspaceID:void 0});return}let A=L.workspaceID,_=yield*M(A);if(!_)return yield*new Ta({message:`Workspace not found: ${A}`,workspaceID:A});let N=yield*rn.target(_);if(N.type==="local"){yield*t.setWorkspace({sessionID:L.sessionID,workspaceID:L.workspaceID});return}let q=yield*f.select({id:An.id,aggregateID:An.aggregate_id,seq:An.seq,type:An.type,data:An.data}).from(An).where(It(An.aggregate_id,L.sessionID)).orderBy(Zs(An.seq)).all().pipe(r.orDie);if(q.length===0)return yield*new Pa({message:`No events found for session: ${L.sessionID}`,sessionID:L.sessionID});let j=_a.chunksOf(q,10),ve=_a.size(j);yield*r.forEach(j,(ae,oe)=>r.gen(function*(){let $e=yield*o.execute(Ye.post(Wr(N.url,"/sync/replay"),{headers:new Headers(N.headers),body:Jr.jsonUnsafe({directory:_.directory??"",events:ae})}));if($e.status<200||$e.status>=300){let Le=yield*$e.text;return yield*new $s({message:`Failed to warp session ${L.sessionID} into workspace ${A}: HTTP ${$e.status} ${Le}`,workspaceID:A,sessionID:L.sessionID,status:$e.status,body:Le})}}),{discard:!0});let pe=yield*o.execute(Ye.post(Wr(N.url,"/sync/steal"),{headers:new Headers(N.headers),body:Jr.jsonUnsafe({sessionID:L.sessionID})}));if(pe.status<200||pe.status>=300){let ae=yield*pe.text;return yield*new $s({message:`Failed to steal session ${L.sessionID} into workspace ${A}: HTTP ${pe.status} ${ae}`,workspaceID:A,sessionID:L.sessionID,status:pe.status,body:ae})}yield*t.setWorkspace({sessionID:L.sessionID,workspaceID:L.workspaceID})})}),E=r.fn("Workspace.list")(function*(L){return l.experimentalWorkspaces?(yield*f.select().from(Vt).where(It(Vt.project_id,L.id)).all().pipe(r.orDie)).map(Da).sort((W,D)=>W.id.localeCompare(D.id)):[]}),w=r.fn("Workspace.syncList")(function*(L){let W=new Set((yield*E(L)).map(A=>A.name)),D=yield*r.forEach(Xu(L.id),([A,_])=>rn.list(_).pipe(r.catchCause(N=>r.logWarning("workspace adapter list failed",{type:A,error:N}).pipe(r.as([])))),{concurrency:"unbounded"}).pipe(r.map(A=>A.flat()));yield*r.forEach(D,A=>r.gen(function*(){if(W.has(A.name))return;W.add(A.name);let _={id:go.ID.ascending(),type:A.type,branch:A.branch,name:A.name,directory:A.directory,extra:A.extra,projectID:A.projectID,timeUsed:Date.now()};yield*f.insert(Vt).values({id:_.id,type:_.type,branch:_.branch,name:_.name,directory:_.directory,extra:_.extra,project_id:_.projectID,time_used:_.timeUsed}).run().pipe(r.orDie),yield*d(_)}),{concurrency:1})}),M=r.fn("Workspace.get")(function*(L){let W=yield*f.select().from(Vt).where(It(Vt.id,L)).get().pipe(r.orDie);if(W)return Da(W)}),C=r.fn("Workspace.remove")(function*(L){let W=yield*f.select({id:Pt.id,parentID:Pt.parent_id}).from(Pt).where(It(Pt.workspace_id,L)).all().pipe(r.orDie),D=new Set(W.map(N=>N.id));yield*r.forEach(W.filter(N=>!N.parentID||!D.has(N.parentID)),N=>t.remove(N.id).pipe(r.catchIf(mi.isInstance,()=>r.void)),{discard:!0});let A=yield*f.select().from(Vt).where(It(Vt.id,L)).get().pipe(r.orDie);if(!A)return;yield*k(L);let _=Da(A);return yield*r.catchCause(r.gen(function*(){yield*rn.remove(_)}),()=>r.logError("adapter not available when removing workspace",{type:A.type})),yield*f.delete(Vt).where(It(Vt.id,L)).run().pipe(r.orDie),_}),$=r.fn("Workspace.status")(function*(){return[...m.values()]}),U=r.fn("Workspace.isSyncing")(function*(L){return(yield*Ho.has(p,L))&&m.get(L)?.status!=="error"}),H=r.fn("Workspace.waitForSync")(function*(L,W,D,A=mg){(yield*gg(f,W))||(yield*r.catch(hg({db:f,workspaceID:L,state:W,signal:D,timeout:A}),()=>D?.aborted?r.fail(new Ca({message:D.reason instanceof Error?D.reason.message:"Request aborted",cause:D.reason})):r.fail(new Ra({message:`Timed out waiting for sync fence: ${JSON.stringify(W)}`,state:W}))))}),ue=r.fn("Workspace.startWorkspaceSyncing")(function*(L){if(!l.experimentalWorkspaces)return;let W=yield*f.selectDistinct({workspace:Vt}).from(Vt).where(It(Vt.project_id,L)).all().pipe(r.orDie);for(let{workspace:D}of W)yield*d(Da(D)).pipe(r.catch(A=>r.sync(()=>{h(D.id,"error")})),r.forkDetach)});return Vo.of({create:y,sessionWarp:x,list:E,syncList:w,get:M,remove:C,status:$,isSyncing:U,waitForSync:H,startWorkspaceSyncing:ue})})),mg=5e3;function hg(e){return r.suspend(()=>yd({timeout:e.timeout,signal:e.signal,fn(t){return t.workspace===e.workspaceID||t.payload.type==="sync"}}).pipe(r.andThen(gg(e.db,e.state)),r.flatMap(t=>t?r.void:hg(e))))}s(hg,"waitUntilSynced");function gg(e,t){let n=Object.keys(t);return n.length===0?r.succeed(!0):e.select({id:fo.aggregate_id,seq:fo.seq}).from(fo).where(Ua(fo.aggregate_id,n)).all().pipe(r.orDie,r.map(o=>{let i=Object.fromEntries(o.map(a=>[a.id,a.seq]));return n.every(a=>(i[a]??-1)>=t[a])}))}s(gg,"synced");function Wr(e,t){let n=new URL(e);return n.pathname=`${n.pathname.replace(/\/$/,"")}${t}`,n.search="",n.hash="",n}s(Wr,"route");var kE=De.make({service:Vo,layer:IE,deps:[Xt.node,me.node,Br.node,In,Ee.node,$o.node,Ve.node,Me.node,tt.node]});var xd={};fe(xd,{Event:()=>EE,Info:()=>PE,Installation:()=>xd,Service:()=>uo,USER_AGENT:()=>RE,UpgradeFailedError:()=>Vr,getReleaseType:()=>TE,isLocal:()=>AE,isPreview:()=>CE,latest:()=>FE,method:()=>BE,node:()=>Sg,upgrade:()=>$E,use:()=>jE,userAgent:()=>vg});import wg from"path";var Ws=Id(kg());var qs={};fe(qs,{Definitions:()=>DE,InstallationEvent:()=>qs,UpdateAvailable:()=>bg,Updated:()=>yg});var yg=Tt.define({type:"installation.updated",schema:{version:c.String}}),bg=Tt.define({type:"installation.update-available",schema:{version:c.String}}),DE=Tt.inventory(yg,bg);var EE=qs;function TE(e,t){let n=Ws.default.major(e),o=Ws.default.minor(e),i=Ws.default.major(t),a=Ws.default.minor(t);return i>n?"major":a>o?"minor":"patch"}s(TE,"getReleaseType");var PE=c.Struct({version:c.String,latest:c.String}).annotate({identifier:"InstallationInfo"});function vg(e="cli"){return`opencode/${Zr}/${Qr}/${e}`}s(vg,"userAgent");var RE=vg();function CE(){return Zr!=="latest"}s(CE,"isPreview");function AE(){return Zr==="local"}s(AE,"isLocal");var Vr=class extends c.TaggedErrorClass()("UpgradeFailedError",{stderr:c.String}){static{s(this,"UpgradeFailedError")}get message(){return this.stderr}},ME=c.Struct({tag_name:c.String}),xg=c.Struct({version:c.String}),_E=c.Struct({versions:c.Struct({stable:c.String})}),OE=c.Struct({formulae:c.Array(c.Struct({versions:c.Struct({stable:c.String})}))}),LE=c.Struct({d:c.Struct({results:c.Array(c.Struct({Version:c.String}))})}),NE=xg,uo=class extends Ce.Service()("@opencode/Installation"){static{s(this,"Service")}},jE=Wt(uo),UE=Pe.effect(uo,r.gen(function*(){let e=yield*fn.HttpClient,t=fn.filterStatusOk(li(e)),n=yield*Ko.Service,o=r.fnUntraced(function*(p,h){return(yield*n.run(Vn.make(p[0],p.slice(1),{cwd:h?.cwd,env:h?.env,extendEnv:!0}))).stdout.toString("utf8")},r.catch(()=>r.succeed(""))),i=r.fnUntraced(function*(p,h){let g=yield*n.run(Vn.make(p[0],p.slice(1),{cwd:h?.cwd,env:h?.env,extendEnv:!0}));return{code:g.exitCode,stdout:g.stdout.toString("utf8"),stderr:g.stderr.toString("utf8")}},r.catch(p=>r.succeed({code:1,stdout:"",stderr:gn(p)}))),a=r.fnUntraced(function*(){return(yield*o(["brew","list","--formula","anomalyco/tap/opencode"])).includes("opencode")?"anomalyco/tap/opencode":((yield*o(["brew","list","--formula","opencode"])).includes("opencode"),"opencode")}),l=s((p,h)=>p==="choco"?"not running from an elevated command shell":h?`Upgrade failed for ${p} (exit code ${h.code}).`:`Upgrade failed for ${p}.`,"upgradeFailure"),u=r.fnUntraced(function*(){return(yield*o(["bash","--version"]))?"bash":"sh"}),f=r.fnUntraced(function*(p){let g=yield*(yield*t.execute(Ye.get("https://opencode.ai/install"))).text,I=new TextEncoder().encode(g),T=yield*u(),v=yield*n.run(Vn.make(T,[],{stdin:xt.make(I),env:{VERSION:p},extendEnv:!0}));return{code:v.exitCode,stdout:v.stdout.toString("utf8"),stderr:v.stderr.toString("utf8")}},r.mapError(()=>new Vr({stderr:l("curl")}))),m={info:r.fn("Installation.info")(function*(){return{version:Qr,latest:yield*m.latest()}}),method:r.fn("Installation.method")(function*(){if(process.execPath.includes(wg.join(".opencode","bin"))||process.execPath.includes(wg.join(".local","bin")))return"curl";let p=process.execPath.toLowerCase(),h=[{name:"npm",command:s(()=>o(["npm","list","-g","--depth=0"]),"command")},{name:"yarn",command:s(()=>o(["yarn","global","list"]),"command")},{name:"pnpm",command:s(()=>o(["pnpm","list","-g","--depth=0"]),"command")},{name:"bun",command:s(()=>o(["bun","pm","ls","-g"]),"command")},{name:"brew",command:s(()=>o(["brew","list","--formula","opencode"]),"command")},{name:"scoop",command:s(()=>o(["scoop","list","opencode"]),"command")},{name:"choco",command:s(()=>o(["choco","list","--limit-output","opencode"]),"command")}];h.sort((g,I)=>{let T=p.includes(g.name),v=p.includes(I.name);return T&&!v?-1:!T&&v?1:0});for(let g of h){let I=yield*g.command(),T=g.name==="brew"||g.name==="choco"||g.name==="scoop"?"opencode":"opencode-ai";if(I.includes(T))return g.name}return"unknown"}),latest:r.fn("Installation.latest")(function*(p){let h=p||(yield*m.method());if(h==="brew"){let T=yield*a();if(T.includes("/")){let d=yield*o(["brew","info","--json=v2",T]);return(yield*c.decodeUnknownEffect(c.fromJsonString(OE))(d)).formulae[0].versions.stable}let v=yield*t.execute(Ye.get("https://formulae.brew.sh/api/formula/opencode.json").pipe(Ye.acceptJson));return(yield*zn.schemaBodyJson(_E)(v)).versions.stable}if(h==="npm"||h==="bun"||h==="pnpm"){let T=yield*t.execute(Ye.get(`${yield*Eu.registry(process.cwd())}/opencode-ai/${Zr}`).pipe(Ye.acceptJson));return(yield*zn.schemaBodyJson(xg)(T)).version}if(h==="choco"){let T=yield*t.execute(Ye.get("https://community.chocolatey.org/api/v2/Packages?$filter=Id%20eq%20%27opencode%27%20and%20IsLatestVersion&$select=Version").pipe(Ye.setHeaders({Accept:"application/json;odata=verbose"})));return(yield*zn.schemaBodyJson(LE)(T)).d.results[0].Version}if(h==="scoop"){let T=yield*t.execute(Ye.get("https://raw.githubusercontent.com/ScoopInstaller/Main/master/bucket/opencode.json").pipe(Ye.setHeaders({Accept:"application/json"})));return(yield*zn.schemaBodyJson(NE)(T)).version}let g=yield*t.execute(Ye.get("https://api.github.com/repos/anomalyco/opencode/releases/latest").pipe(Ye.acceptJson));return(yield*zn.schemaBodyJson(ME)(g)).tag_name.replace(/^v/,"")},r.orDie),upgrade:r.fn("Installation.upgrade")(function*(p,h){let g;switch(p){case"curl":g=yield*f(h);break;case"npm":g=yield*i(["npm","install","-g",`opencode-ai@${h}`]);break;case"pnpm":g=yield*i(["pnpm","install","-g",`opencode-ai@${h}`]);break;case"bun":g=yield*i(["bun","install","-g",`opencode-ai@${h}`]);break;case"brew":{let I=yield*a(),T={HOMEBREW_NO_AUTO_UPDATE:"1"};if(I.includes("/")){let v=yield*i(["brew","tap","anomalyco/tap"],{env:T});if(v.code!==0){g=v;break}let d=(yield*o(["brew","--repo","anomalyco/tap"])).trim();if(d){let k=yield*i(["git","pull","--ff-only"],{cwd:d,env:T});if(k.code!==0){g=k;break}}}g=yield*i(["brew","upgrade",I],{env:T});break}case"choco":g=yield*i(["choco","upgrade","opencode",`--version=${h}`,"-y"]);break;case"scoop":g=yield*i(["scoop","install",`opencode@${h}`]);break;default:return yield*new Vr({stderr:`Unknown installation method: ${p}`})}if(!g||g.code!==0)return yield*new Vr({stderr:l(p,g)});yield*r.logInfo("upgraded",{method:p,target:h,stdout:g.stdout,stderr:g.stderr}),yield*o([process.execPath,"--version"])})};return uo.of(m)})),Sg=De.make({service:uo,layer:UE,deps:[In,Ko.node]}),{runPromise:vd}=Du(uo,vo.build(Sg)),FE=s((...e)=>vd(t=>t.latest(...e)),"latest"),BE=s(()=>vd(e=>e.method()),"method"),$E=s((...e)=>vd(t=>t.upgrade(...e)),"upgrade");var Sd={};fe(Sd,{Service:()=>zr,SessionShare:()=>Sd,node:()=>WE});var zr=class extends Ce.Service()("@opencode/SessionShare"){static{s(this,"Service")}},qE=Pe.effect(zr,r.gen(function*(){let e=yield*Ne.Service,t=yield*me.Service,n=yield*Wn.Service,o=yield*Et.Scope,i=yield*Ve.Service,a=r.fn("SessionShare.share")(function*(f){if((yield*e.get()).share==="disabled")throw new Error("Sharing is disabled in configuration");let p=yield*n.create(f);return yield*t.setShare({sessionID:f,share:{url:p.url}}),p}),l=r.fn("SessionShare.unshare")(function*(f){yield*n.remove(f),yield*t.setShare({sessionID:f,share:void 0})}),u=r.fn("SessionShare.create")(function*(f){let m=yield*t.create(f);if(m.parentID)return m;let p=yield*e.get();return(i.autoShare||p.share==="auto")&&(yield*a(m.id).pipe(r.ignore,r.forkIn(o))),m});return zr.of({create:u,share:a,unshare:l})})),WE=De.make({service:zr,layer:qE,deps:[Ne.node,me.node,Wn.node,Ve.node]});export{vo as a,sc as b,Ot as c,ac as d,Qt as e,Zn as f,or as g,ln as h,Ln as i,dn as j,un as k,jn as l,ys as m,gr as n,br as o,En as p,Ds as q,mt as r,Jt as s,Mo as t,bh as u,$n as v,Bo as w,Br as x,Ls as y,$o as z,rn as A,Wn as B,qr as C,wd as D,qs as E,xd as F,Sd as G};
1490
+ `),id:D.id,retry:D.retry}]:[],"onHalt")}),xt.map(D=>{try{return JSON.parse(D.data)}catch{return{type:"sse.message",properties:{data:D.data,id:D.id||void 0,retry:D.retry}}}}),xt.runForEach(W))}),T=s(L=>r.gen(function*(){if(!L.workspaceID)return yield*L.local();let W=yield*M(L.workspaceID);if(!W)return L.fallback;let D=yield*rn.target(W);if(D.type==="local")return yield*(yield*er.Service).provide({directory:D.directory},L.local());let A=yield*o.execute(L.remote({workspace:W,target:D})).pipe(r.catch(N=>r.logWarning("workspace target request failed",{workspaceID:W.id,error:Kn(N)}).pipe(r.as(void 0))));if(!A)return L.fallback;if(A.status<200||A.status>=300){let N=yield*A.text.pipe(r.catch(()=>r.succeed("")));return yield*r.logWarning("workspace target request failed",{workspaceID:W.id,status:A.status,body:N}),L.fallback}return yield*(L.response==="text"?A.text:A.json).pipe(r.map(N=>N),r.catch(N=>r.logWarning("workspace target response decode failed",{workspaceID:W.id,error:Kn(N)}).pipe(r.as(L.fallback))))}),"runInWorkspace"),v=r.fn("Workspace.syncHistory")(function*(L,W,D){let A=(yield*f.select({id:Pt.id}).from(Pt).where(It(Pt.workspace_id,L.id)).all().pipe(r.orDie)).map(j=>j.id),_=A.length?Object.fromEntries((yield*f.select().from(fo).where(Ua(fo.aggregate_id,A)).all().pipe(r.orDie)).map(j=>[j.aggregate_id,j.seq])):{},N=yield*o.execute(Ye.post(Wr(W,"/sync/history"),{headers:new Headers(D),body:Jr.jsonUnsafe(_)}));if(N.status<200||N.status>=300){let j=yield*N.text;return yield*new Bs({message:`Workspace history HTTP failure: ${N.status} ${j}`,status:N.status,body:j})}let q=yield*N.json;yield*r.forEach(q,j=>i.replay({id:fu.ID.make(j.id),aggregateID:j.aggregate_id,seq:j.seq,type:j.type,data:j.data},{publish:!0,ownerID:L.id}).pipe(r.provideService(ui,L.id)),{discard:!0})}),P=r.fn("Workspace.syncWorkspaceLoop")(function*(L){let W=yield*rn.target(L);if(W.type==="local")return;let D=0;for(;;){h(L.id,"connecting");let A=yield*g(W.url,W.headers).pipe(r.tap(()=>v(L,W.url,W.headers)),r.catch(_=>r.gen(function*(){return h(L.id,"error"),yield*r.logWarning("failed to connect to global sync",{workspace:L.name,error:Kn(_)}),null})));A&&(D=0,h(L.id,"connected"),yield*I(A,_=>r.gen(function*(){if(!_||typeof _!="object"||!("payload"in _))return;let N=_.payload;if(N.type!=="server.heartbeat"&&!(N.type==="sync"&&N.syncEvent&&(yield*i.replay(N.syncEvent,{publish:!0,ownerID:L.id}).pipe(r.as(!1),r.catchCause(j=>r.logWarning("failed to replay global event",j).pipe(r.annotateLogs({workspaceID:L.id}),r.as(!0)))))))try{let q=_;Qo.emit("event",{directory:q.directory,project:q.project,workspace:L.id,payload:q.payload})}catch(q){yield*r.logWarning("failed to emit global event",{workspaceID:L.id,error:Kn(q)})}})),h(L.id,"disconnected")),yield*r.sleep(`${Math.min(12e4,1e3*2**D)} millis`),D+=1}}),d=r.fn("Workspace.startSync")(function*(L){if(!l.experimentalWorkspaces)return;let W=yield*rn.target(L).pipe(r.catch(A=>r.gen(function*(){return h(L.id,"error"),yield*r.logWarning("workspace target failed",{workspaceID:L.id,error:Kn(A)}),null})));if(!W)return;if(W.type==="local"){h(L.id,(yield*u.existsSafe(W.directory))?"connected":"error");return}(yield*Ho.has(p,L.id))&&m.get(L.id)?.status!=="error"||(h(L.id,"disconnected"),yield*Ho.run(p,L.id,P(L).pipe(r.catch(A=>r.gen(function*(){h(L.id,"error"),yield*r.logWarning("workspace listener failed",{workspaceID:L.id,error:Kn(A)})})))))}),k=r.fn("Workspace.stopSync")(function*(L){yield*Ho.remove(p,L),m.delete(L)}),y=r.fn("Workspace.create")(function*(L){let W=go.ID.ascending(L.id),D=ns(L.projectID,L.type),A=yield*rn.configure(D,{...L,id:W,name:mu.create(),directory:null,extra:L.extra??null}),_={id:W,type:A.type,branch:A.branch??null,name:A.name??null,directory:A.directory??null,extra:A.extra??null,projectID:L.projectID,timeUsed:Date.now()};yield*f.insert(Vt).values({id:_.id,type:_.type,branch:_.branch,name:_.name,directory:_.directory,extra:_.extra,project_id:_.projectID,time_used:_.timeUsed}).run().pipe(r.orDie);let N={OPENCODE_AUTH_CONTENT:JSON.stringify(yield*e.all()),OPENCODE_WORKSPACE_ID:A.id,OPENCODE_EXPERIMENTAL_WORKSPACES:"true",OTEL_EXPORTER_OTLP_HEADERS:process.env.OTEL_EXPORTER_OTLP_HEADERS,OTEL_EXPORTER_OTLP_ENDPOINT:process.env.OTEL_EXPORTER_OTLP_ENDPOINT,OTEL_RESOURCE_ATTRIBUTES:process.env.OTEL_RESOURCE_ATTRIBUTES};return yield*rn.create(D,A,N),yield*r.all([yd({timeout:hg,fn(q){if(q.workspace===_.id&&q.payload.type===bd.Status.type){let{status:j}=q.payload.properties;return j==="error"||j==="connected"}return!1}}),d(_)],{concurrency:2,discard:!0}),_}),S=r.fn("Workspace.sessionWarp")(function*(L){return yield*r.gen(function*(){let W=yield*f.select({workspaceID:Pt.workspace_id}).from(Pt).where(It(Pt.id,L.sessionID)).get().pipe(r.orDie);if(W?.workspaceID){let ae=yield*M(W.workspaceID);if(ae){let oe=yield*rn.target(ae);oe.type==="remote"?yield*v(ae,oe.url,oe.headers).pipe(r.catch($e=>r.logWarning("session warp final source sync failed",{workspaceID:ae.id,sessionID:L.sessionID,error:Kn($e)}))):yield*n.cancel(L.sessionID),yield*i.claim(L.sessionID,L.workspaceID??ae.projectID)}}let D=L.copyChanges&&W?.workspaceID?yield*T({workspaceID:W?.workspaceID??void 0,local:s(()=>a.diffRaw(),"local"),remote:s(({target:ae})=>Ye.get(Wr(ae.url,"/vcs/diff/raw"),{headers:new Headers(ae.headers)}),"remote"),fallback:"",response:"text"}).pipe(r.provide(qr.build(er.node))):"";if(D&&(yield*T({workspaceID:L.workspaceID??void 0,local:s(()=>a.apply({patch:D}),"local"),remote:s(({target:ae})=>Ye.post(Wr(ae.url,"/vcs/apply"),{headers:new Headers(ae.headers),body:Jr.jsonUnsafe({patch:D})}),"remote"),fallback:{applied:!1}}).pipe(r.provide(qr.build(er.node)))),L.workspaceID===null){yield*t.setWorkspace({sessionID:L.sessionID,workspaceID:void 0});return}let A=L.workspaceID,_=yield*M(A);if(!_)return yield*new Ta({message:`Workspace not found: ${A}`,workspaceID:A});let N=yield*rn.target(_);if(N.type==="local"){yield*t.setWorkspace({sessionID:L.sessionID,workspaceID:L.workspaceID});return}let q=yield*f.select({id:An.id,aggregateID:An.aggregate_id,seq:An.seq,type:An.type,data:An.data}).from(An).where(It(An.aggregate_id,L.sessionID)).orderBy(Zs(An.seq)).all().pipe(r.orDie);if(q.length===0)return yield*new Pa({message:`No events found for session: ${L.sessionID}`,sessionID:L.sessionID});let j=_a.chunksOf(q,10),ve=_a.size(j);yield*r.forEach(j,(ae,oe)=>r.gen(function*(){let $e=yield*o.execute(Ye.post(Wr(N.url,"/sync/replay"),{headers:new Headers(N.headers),body:Jr.jsonUnsafe({directory:_.directory??"",events:ae})}));if($e.status<200||$e.status>=300){let Le=yield*$e.text;return yield*new $s({message:`Failed to warp session ${L.sessionID} into workspace ${A}: HTTP ${$e.status} ${Le}`,workspaceID:A,sessionID:L.sessionID,status:$e.status,body:Le})}}),{discard:!0});let pe=yield*o.execute(Ye.post(Wr(N.url,"/sync/steal"),{headers:new Headers(N.headers),body:Jr.jsonUnsafe({sessionID:L.sessionID})}));if(pe.status<200||pe.status>=300){let ae=yield*pe.text;return yield*new $s({message:`Failed to steal session ${L.sessionID} into workspace ${A}: HTTP ${pe.status} ${ae}`,workspaceID:A,sessionID:L.sessionID,status:pe.status,body:ae})}yield*t.setWorkspace({sessionID:L.sessionID,workspaceID:L.workspaceID})})}),E=r.fn("Workspace.list")(function*(L){return l.experimentalWorkspaces?(yield*f.select().from(Vt).where(It(Vt.project_id,L.id)).all().pipe(r.orDie)).map(Da).sort((W,D)=>W.id.localeCompare(D.id)):[]}),w=r.fn("Workspace.syncList")(function*(L){let W=new Set((yield*E(L)).map(A=>A.name)),D=yield*r.forEach(Xu(L.id),([A,_])=>rn.list(_).pipe(r.catchCause(N=>r.logWarning("workspace adapter list failed",{type:A,error:N}).pipe(r.as([])))),{concurrency:"unbounded"}).pipe(r.map(A=>A.flat()));yield*r.forEach(D,A=>r.gen(function*(){if(W.has(A.name))return;W.add(A.name);let _={id:go.ID.ascending(),type:A.type,branch:A.branch,name:A.name,directory:A.directory,extra:A.extra,projectID:A.projectID,timeUsed:Date.now()};yield*f.insert(Vt).values({id:_.id,type:_.type,branch:_.branch,name:_.name,directory:_.directory,extra:_.extra,project_id:_.projectID,time_used:_.timeUsed}).run().pipe(r.orDie),yield*d(_)}),{concurrency:1})}),M=r.fn("Workspace.get")(function*(L){let W=yield*f.select().from(Vt).where(It(Vt.id,L)).get().pipe(r.orDie);if(W)return Da(W)}),C=r.fn("Workspace.remove")(function*(L){let W=yield*f.select({id:Pt.id,parentID:Pt.parent_id}).from(Pt).where(It(Pt.workspace_id,L)).all().pipe(r.orDie),D=new Set(W.map(N=>N.id));yield*r.forEach(W.filter(N=>!N.parentID||!D.has(N.parentID)),N=>t.remove(N.id).pipe(r.catchIf(mi.isInstance,()=>r.void)),{discard:!0});let A=yield*f.select().from(Vt).where(It(Vt.id,L)).get().pipe(r.orDie);if(!A)return;yield*k(L);let _=Da(A);return yield*r.catchCause(r.gen(function*(){yield*rn.remove(_)}),()=>r.logError("adapter not available when removing workspace",{type:A.type})),yield*f.delete(Vt).where(It(Vt.id,L)).run().pipe(r.orDie),_}),$=r.fn("Workspace.status")(function*(){return[...m.values()]}),U=r.fn("Workspace.isSyncing")(function*(L){return(yield*Ho.has(p,L))&&m.get(L)?.status!=="error"}),H=r.fn("Workspace.waitForSync")(function*(L,W,D,A=hg){(yield*yg(f,W))||(yield*r.catch(gg({db:f,workspaceID:L,state:W,signal:D,timeout:A}),()=>D?.aborted?r.fail(new Ca({message:D.reason instanceof Error?D.reason.message:"Request aborted",cause:D.reason})):r.fail(new Ra({message:`Timed out waiting for sync fence: ${JSON.stringify(W)}`,state:W}))))}),ue=r.fn("Workspace.startWorkspaceSyncing")(function*(L){if(!l.experimentalWorkspaces)return;let W=yield*f.selectDistinct({workspace:Vt}).from(Vt).where(It(Vt.project_id,L)).all().pipe(r.orDie);for(let{workspace:D}of W)yield*d(Da(D)).pipe(r.catch(A=>r.sync(()=>{h(D.id,"error")})),r.forkDetach)});return Vo.of({create:y,sessionWarp:S,list:E,syncList:w,get:M,remove:C,status:$,isSyncing:U,waitForSync:H,startWorkspaceSyncing:ue})})),hg=5e3;function gg(e){return r.suspend(()=>yd({timeout:e.timeout,signal:e.signal,fn(t){return t.workspace===e.workspaceID||t.payload.type==="sync"}}).pipe(r.andThen(yg(e.db,e.state)),r.flatMap(t=>t?r.void:gg(e))))}s(gg,"waitUntilSynced");function yg(e,t){let n=Object.keys(t);return n.length===0?r.succeed(!0):e.select({id:fo.aggregate_id,seq:fo.seq}).from(fo).where(Ua(fo.aggregate_id,n)).all().pipe(r.orDie,r.map(o=>{let i=Object.fromEntries(o.map(a=>[a.id,a.seq]));return n.every(a=>(i[a]??-1)>=t[a])}))}s(yg,"synced");function Wr(e,t){let n=new URL(e);return n.pathname=`${n.pathname.replace(/\/$/,"")}${t}`,n.search="",n.hash="",n}s(Wr,"route");var DE=De.make({service:Vo,layer:kE,deps:[Xt.node,me.node,Br.node,In,Ee.node,$o.node,Ve.node,Me.node,tt.node]});var xd={};fe(xd,{Event:()=>TE,Info:()=>RE,Installation:()=>xd,Service:()=>uo,USER_AGENT:()=>CE,UpgradeFailedError:()=>Vr,getReleaseType:()=>PE,isLocal:()=>ME,isPreview:()=>AE,latest:()=>BE,method:()=>$E,node:()=>Ig,upgrade:()=>qE,use:()=>UE,userAgent:()=>xg});import vg from"path";var Ws=Id(Dg());var qs={};fe(qs,{Definitions:()=>EE,InstallationEvent:()=>qs,UpdateAvailable:()=>wg,Updated:()=>bg});var bg=Tt.define({type:"installation.updated",schema:{version:c.String}}),wg=Tt.define({type:"installation.update-available",schema:{version:c.String}}),EE=Tt.inventory(bg,wg);var TE=qs;function PE(e,t){let n=Ws.default.major(e),o=Ws.default.minor(e),i=Ws.default.major(t),a=Ws.default.minor(t);return i>n?"major":a>o?"minor":"patch"}s(PE,"getReleaseType");var RE=c.Struct({version:c.String,latest:c.String}).annotate({identifier:"InstallationInfo"});function xg(e="cli"){return`opencode/${Zr}/${Qr}/${e}`}s(xg,"userAgent");var CE=xg();function AE(){return Zr!=="latest"}s(AE,"isPreview");function ME(){return Zr==="local"}s(ME,"isLocal");var Vr=class extends c.TaggedErrorClass()("UpgradeFailedError",{stderr:c.String}){static{s(this,"UpgradeFailedError")}get message(){return this.stderr}},_E=c.Struct({tag_name:c.String}),Sg=c.Struct({version:c.String}),OE=c.Struct({versions:c.Struct({stable:c.String})}),LE=c.Struct({formulae:c.Array(c.Struct({versions:c.Struct({stable:c.String})}))}),NE=c.Struct({d:c.Struct({results:c.Array(c.Struct({Version:c.String}))})}),jE=Sg,uo=class extends Ce.Service()("@opencode/Installation"){static{s(this,"Service")}},UE=Wt(uo),FE=Pe.effect(uo,r.gen(function*(){let e=yield*fn.HttpClient,t=fn.filterStatusOk(li(e)),n=yield*Ko.Service,o=r.fnUntraced(function*(p,h){return(yield*n.run(Vn.make(p[0],p.slice(1),{cwd:h?.cwd,env:h?.env,extendEnv:!0}))).stdout.toString("utf8")},r.catch(()=>r.succeed(""))),i=r.fnUntraced(function*(p,h){let g=yield*n.run(Vn.make(p[0],p.slice(1),{cwd:h?.cwd,env:h?.env,extendEnv:!0}));return{code:g.exitCode,stdout:g.stdout.toString("utf8"),stderr:g.stderr.toString("utf8")}},r.catch(p=>r.succeed({code:1,stdout:"",stderr:gn(p)}))),a=r.fnUntraced(function*(){return(yield*o(["brew","list","--formula","anomalyco/tap/opencode"])).includes("opencode")?"anomalyco/tap/opencode":((yield*o(["brew","list","--formula","opencode"])).includes("opencode"),"opencode")}),l=s((p,h)=>p==="choco"?"not running from an elevated command shell":h?`Upgrade failed for ${p} (exit code ${h.code}).`:`Upgrade failed for ${p}.`,"upgradeFailure"),u=r.fnUntraced(function*(){return(yield*o(["bash","--version"]))?"bash":"sh"}),f=r.fnUntraced(function*(p){let g=yield*(yield*t.execute(Ye.get("https://opencode.ai/install"))).text,I=new TextEncoder().encode(g),T=yield*u(),v=yield*n.run(Vn.make(T,[],{stdin:xt.make(I),env:{VERSION:p},extendEnv:!0}));return{code:v.exitCode,stdout:v.stdout.toString("utf8"),stderr:v.stderr.toString("utf8")}},r.mapError(()=>new Vr({stderr:l("curl")}))),m={info:r.fn("Installation.info")(function*(){return{version:Qr,latest:yield*m.latest()}}),method:r.fn("Installation.method")(function*(){if(process.execPath.includes(vg.join(".opencode","bin"))||process.execPath.includes(vg.join(".local","bin")))return"curl";let p=process.execPath.toLowerCase(),h=[{name:"npm",command:s(()=>o(["npm","list","-g","--depth=0"]),"command")},{name:"yarn",command:s(()=>o(["yarn","global","list"]),"command")},{name:"pnpm",command:s(()=>o(["pnpm","list","-g","--depth=0"]),"command")},{name:"bun",command:s(()=>o(["bun","pm","ls","-g"]),"command")},{name:"brew",command:s(()=>o(["brew","list","--formula","opencode"]),"command")},{name:"scoop",command:s(()=>o(["scoop","list","opencode"]),"command")},{name:"choco",command:s(()=>o(["choco","list","--limit-output","opencode"]),"command")}];h.sort((g,I)=>{let T=p.includes(g.name),v=p.includes(I.name);return T&&!v?-1:!T&&v?1:0});for(let g of h){let I=yield*g.command(),T=g.name==="brew"||g.name==="choco"||g.name==="scoop"?"opencode":"opencode-ai";if(I.includes(T))return g.name}return"unknown"}),latest:r.fn("Installation.latest")(function*(p){let h=p||(yield*m.method());if(h==="brew"){let T=yield*a();if(T.includes("/")){let d=yield*o(["brew","info","--json=v2",T]);return(yield*c.decodeUnknownEffect(c.fromJsonString(LE))(d)).formulae[0].versions.stable}let v=yield*t.execute(Ye.get("https://formulae.brew.sh/api/formula/opencode.json").pipe(Ye.acceptJson));return(yield*zn.schemaBodyJson(OE)(v)).versions.stable}if(h==="npm"||h==="bun"||h==="pnpm"){let T=yield*t.execute(Ye.get(`${yield*Eu.registry(process.cwd())}/opencode-ai/${Zr}`).pipe(Ye.acceptJson));return(yield*zn.schemaBodyJson(Sg)(T)).version}if(h==="choco"){let T=yield*t.execute(Ye.get("https://community.chocolatey.org/api/v2/Packages?$filter=Id%20eq%20%27opencode%27%20and%20IsLatestVersion&$select=Version").pipe(Ye.setHeaders({Accept:"application/json;odata=verbose"})));return(yield*zn.schemaBodyJson(NE)(T)).d.results[0].Version}if(h==="scoop"){let T=yield*t.execute(Ye.get("https://raw.githubusercontent.com/ScoopInstaller/Main/master/bucket/opencode.json").pipe(Ye.setHeaders({Accept:"application/json"})));return(yield*zn.schemaBodyJson(jE)(T)).version}let g=yield*t.execute(Ye.get("https://api.github.com/repos/anomalyco/opencode/releases/latest").pipe(Ye.acceptJson));return(yield*zn.schemaBodyJson(_E)(g)).tag_name.replace(/^v/,"")},r.orDie),upgrade:r.fn("Installation.upgrade")(function*(p,h){let g;switch(p){case"curl":g=yield*f(h);break;case"npm":g=yield*i(["npm","install","-g",`opencode-ai@${h}`]);break;case"pnpm":g=yield*i(["pnpm","install","-g",`opencode-ai@${h}`]);break;case"bun":g=yield*i(["bun","install","-g",`opencode-ai@${h}`]);break;case"brew":{let I=yield*a(),T={HOMEBREW_NO_AUTO_UPDATE:"1"};if(I.includes("/")){let v=yield*i(["brew","tap","anomalyco/tap"],{env:T});if(v.code!==0){g=v;break}let d=(yield*o(["brew","--repo","anomalyco/tap"])).trim();if(d){let k=yield*i(["git","pull","--ff-only"],{cwd:d,env:T});if(k.code!==0){g=k;break}}}g=yield*i(["brew","upgrade",I],{env:T});break}case"choco":g=yield*i(["choco","upgrade","opencode",`--version=${h}`,"-y"]);break;case"scoop":g=yield*i(["scoop","install",`opencode@${h}`]);break;default:return yield*new Vr({stderr:`Unknown installation method: ${p}`})}if(!g||g.code!==0)return yield*new Vr({stderr:l(p,g)});yield*r.logInfo("upgraded",{method:p,target:h,stdout:g.stdout,stderr:g.stderr}),yield*o([process.execPath,"--version"])})};return uo.of(m)})),Ig=De.make({service:uo,layer:FE,deps:[In,Ko.node]}),{runPromise:vd}=Du(uo,vo.build(Ig)),BE=s((...e)=>vd(t=>t.latest(...e)),"latest"),$E=s(()=>vd(e=>e.method()),"method"),qE=s((...e)=>vd(t=>t.upgrade(...e)),"upgrade");var Sd={};fe(Sd,{Service:()=>zr,SessionShare:()=>Sd,node:()=>VE});var zr=class extends Ce.Service()("@opencode/SessionShare"){static{s(this,"Service")}},WE=Pe.effect(zr,r.gen(function*(){let e=yield*Ne.Service,t=yield*me.Service,n=yield*Wn.Service,o=yield*Et.Scope,i=yield*Ve.Service,a=r.fn("SessionShare.share")(function*(f){if((yield*e.get()).share==="disabled")throw new Error("Sharing is disabled in configuration");let p=yield*n.create(f);return yield*t.setShare({sessionID:f,share:{url:p.url}}),p}),l=r.fn("SessionShare.unshare")(function*(f){yield*n.remove(f),yield*t.setShare({sessionID:f,share:void 0})}),u=r.fn("SessionShare.create")(function*(f){let m=yield*t.create(f);if(m.parentID)return m;let p=yield*e.get();return(i.autoShare||p.share==="auto")&&(yield*a(m.id).pipe(r.ignore,r.forkIn(o))),m});return zr.of({create:u,share:a,unshare:l})})),VE=De.make({service:zr,layer:WE,deps:[Ne.node,me.node,Wn.node,Ve.node]});export{vo as a,sc as b,Ot as c,ac as d,Qt as e,Zn as f,or as g,ln as h,Ln as i,dn as j,un as k,jn as l,ys as m,gr as n,br as o,En as p,Ds as q,mt as r,Jt as s,Mo as t,bh as u,$n as v,Bo as w,Br as x,Ls as y,$o as z,rn as A,Wn as B,qr as C,wd as D,qs as E,xd as F,Sd as G};