alchemylab-opencode 1.0.25 → 1.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,7 +9,7 @@ if (typeof globalThis.Bun === 'undefined') {
9
9
  if (typeof globalThis.__name === 'undefined') { globalThis.__name = (t, n) => { Object.defineProperty(t, 'name', { value: n, configurable: true }); return t; }; }
10
10
  if (typeof globalThis.__export === 'undefined') { globalThis.__export = (t, a) => { for (const k in a) Object.defineProperty(t, k, { get: a[k], enumerable: true }); }; }
11
11
 
12
- import{a as Je,b as it,c as Ce,d as ao}from"./chunk-YDTJPTBK.js";import{b as Rt}from"./chunk-2ANK3QEN.js";import{A as Lt,B as $e,C as It,D as io,E as Ae,G as Mt,H as Nt,I as Gt,J as re,K as V,L as Wt,M as Ft,N as vt,O as de,P as ze,Q as h,R as J,S as Ve,a as ve,b as Ot,c as ce,d as yt,f as Fe,g as Tt,h as F,i as ro,j as no,k as ot,m as pe,o as rt,p as ht,q as Q,r as gt,s as nt,t as je,u as bt,v as qe,w as _t,x as Be,y as Ut,z as He}from"./chunk-XJGIPERR.js";import{A as ft,a as Te,c as A,d as ge,e as tt,h as ie,i as ke,j as xe,k as W,m as oo,n as De,o as Ge,p as We,s as ue,u as ut,x as fe,y as U}from"./chunk-26PYOYAY.js";import{a as Et,b as X,c as st,d as zt}from"./chunk-7KKA6WBY.js";import{a as so}from"./chunk-LTCXIXYM.js";import{c as eo,d as lt,e as G}from"./chunk-M4CB72HE.js";import{b as to}from"./chunk-CZVKIDQZ.js";import{a as c,e as Qt,f as Zt}from"./chunk-MBZTOEAD.js";import{validator as cs}from"hono/validator";var co={header:["cookie"]};function ps(e,t,o){if(!(o in co))return e;let s=co[o]||[];return t==="arktype"?ds(e,s):t==="valibot"?ms(e,s):e}c(ps,"sanitizeIssues");function ds(e,t){return e.map(o=>{if(o&&typeof o=="object"&&"data"in o&&typeof o.data=="object"&&o.data!==null&&!Array.isArray(o.data)){let s={...o.data};for(let n of t)delete s[n];let r=Object.create(Object.getPrototypeOf(o));return Object.assign(r,o,{data:s}),r}return o})}c(ds,"sanitizeArktypeIssues");function ms(e,t){return e.map(o=>{if(o&&typeof o=="object"&&"path"in o&&Array.isArray(o.path)){for(let s of o.path)if(typeof s=="object"&&"input"in s&&typeof s.input=="object"&&s.input!==null&&!Array.isArray(s.input))for(let r of t)delete s.input[r]}return o})}c(ms,"sanitizeValibotIssues");var po=c((e,t,o)=>cs(e,async(s,r)=>{let n=await t["~standard"].validate(s);if(o){let d=await o(n.issues?{data:s,error:n.issues,success:!1,target:e}:{data:s,success:!0,target:e},r);if(d){if(d instanceof Response)return d;if("response"in d)return d.response}}if(n.issues){let d=ps(n.issues,t["~standard"].vendor,e);return r.json({data:s,error:d,success:!1},400)}return n.value}),"sValidator");var Bt=Symbol("openapi"),us=["GET","PUT","POST","DELETE","OPTIONS","HEAD","PATCH","TRACE"],fs=c(e=>e.split("/").map(t=>{let o=t;if(o.startsWith(":")){let s=o.match(/^:([^{?]+)(?:{(.+)})?(\?)?$/);s?o=`{${s[1]}}`:(o=o.slice(1,o.length),o.endsWith("?")&&(o=o.slice(0,-1)),o=`{${o}}`)}return o}).join("/"),"toOpenAPIPath"),mo=c(e=>e.charAt(0).toUpperCase()+e.slice(1),"capitalize"),ys=c(e=>{let t=e.method.toLowerCase();if(e.path==="/")return`${t}Index`;for(let o of e.path.split("/"))o.charCodeAt(0)===123?t+=`By${mo(o.slice(1,-1))}`:t+=mo(o);return t},"generateOperationId"),hs=c(e=>"$ref"in e?e.$ref:`${e.in} ${e.name}`,"paramKey");function lo(...e){let t=e.flatMap(o=>o??[]).reduce((o,s)=>(o.set(hs(s),s),o),new Map);return Array.from(t.values())}c(lo,"mergeParameters");var Ye=new Map;function gs(e){let t=[];for(let[o,s]of Ye)s&&e.match(o)&&t.push(s);return t}c(gs,"getPathContext");function bs(){Ye.clear()}c(bs,"clearSpecsContext");function uo(e,...t){return t.reduce((o,s)=>{if(!s||!o)return o;for(let[r,n]of Object.entries(s))if(n!=null)if(r in o&&(typeof n=="object"||typeof n=="function"&&r==="operationId"))if(Array.isArray(n)){let d=[...o[r]??[],...n];r==="tags"?o[r]=Array.from(new Set(d)):r==="parameters"?o[r]=lo(d):o[r]=d}else typeof n=="function"?o[r]=n(e):r==="parameters"?o[r]=lo(o[r],n):o[r]={...o[r],...n};else o[r]=n;return o},{operationId:ys(e)})}c(uo,"mergeSpecs");function fo({route:e,specs:t,paths:o}){let s=fs(e.path),r=e.method.toLowerCase();if(r==="all"){if(!t)return;if(Ye.has(s)){let n=Ye.get(s)??{};Ye.set(s,uo(e,n,t))}else Ye.set(s,t)}else{let n=gs(s);s in o||(o[s]={}),o[s]&&(o[s][r]=uo(e,...n,o[s]?.[r],t))}}c(fo,"registerSchemaPath");function Is(e,t){let{exclude:o,excludeStaticFile:s}=t.options,r={},n=Array.isArray(o)?o:[o];for(let[d,u]of Object.entries(e))if(!(u==null||n.some(k=>typeof k=="string"?d===k:k.test(d))||d.includes("*")&&!d.includes("{"))){if(s){let k=d.includes("{"),v=(d.split("/").pop()||"").includes(".");if(!k&&v)continue}for(let k of Object.keys(u)){let y=u[k];if(y!=null){if(d.includes("{")){y.parameters=y.parameters?[...y.parameters]:[];let v=d.split("/").filter(g=>g.startsWith("{")&&!y.parameters.find(m=>m.in==="path"&&m.name===g.slice(1,g.length-1)));for(let g of v){let m=g.slice(1,g.length-1);y.parameters.findIndex(w=>{if("$ref"in w){let z=w.$ref.split("/").pop();if(z){let te=t.components.parameters?.[z];if(te&&!("$ref"in te))return te.in==="path"&&te.name===m}return!1}return w.in==="path"&&w.name===m})===-1&&y.parameters.push({schema:{type:"string"},in:"path",name:m,required:!0})}}y.responses||(y.responses={200:{}})}}r[d]=u}return r}c(Is,"removeExcludedPaths");var yo={documentation:{},excludeStaticFile:!0,exclude:[],excludeMethods:["OPTIONS"],excludeTags:[]};function go(e,t){let o;return async s=>(o||(o=await Ht(e,t,s)),s.json(o))}c(go,"openAPIRouteHandler");async function Ht(e,t=yo,o){let s={components:{},options:{...yo,...t}},r=s.options.documentation??{};bs();let n=await vs(e,s);for(let u in n)for(let f in n[u])js({valueOrFunc:n[u][f]?.hide,method:f,path:u,c:o})&&(n[u][f]=void 0);let d=$t(r.components,s.components);return{openapi:"3.1.0",...r,tags:r.tags?.filter(u=>!s.options.excludeTags?.includes(u?.name)),info:{title:"Hono Documentation",description:"Development documentation",version:"0.0.0",...r.info},paths:{...Is(n,s),...r.paths},components:d}}c(Ht,"generateSpecs");async function vs(e,t){let o={};for(let s of e.routes){let r=s.handler[Bt];if(!r){t.options.includeEmptyPaths&&fo({route:s,paths:o});continue}let n=s.method;if(n!=="ALL"&&(t.options.excludeMethods?.includes(n)||!us.includes(n)))continue;let d=t.options.defaultOptions?.[n],{schema:u,components:f={}}=await ws(r,d);t.components=$t(t.components,f),fo({route:s,specs:u,paths:o})}return o}c(vs,"generatePaths");function js(e){let{valueOrFunc:t,c:o,method:s,path:r}=e;if(t!=null){if(typeof t=="boolean")return t;if(typeof t=="function")return t({c:o,method:s,path:r})}return!1}c(js,"getHiddenValue");async function ws(e,t){if("spec"in e){let r={},n={...t,...e.spec,responses:{...t?.responses,...e.spec.responses}};if(n.responses)for(let d of Object.keys(n.responses)){let u=n.responses[d];if(!(!u||!("content"in u)))for(let f of Object.keys(u.content??{})){let x=u.content?.[f];if(x&&x.schema&&"toOpenAPISchema"in x.schema){let k=await x.schema.toOpenAPISchema();x.schema=k.schema,k.components&&(r=$t(r,k.components))}}}return{schema:n,components:r}}let o=await e.toOpenAPISchema(),s=t??{};if(e.target==="form"||e.target==="json"){let r=e.options?.media??e.target==="json"?"application/json":"multipart/form-data";!s.requestBody||!("content"in s.requestBody)||!s.requestBody.content?s.requestBody={content:{[r]:{schema:o.schema}}}:s.requestBody.content[r]={schema:o.schema}}else{let r=[];if("$ref"in o.schema){let d=o.schema.$ref.split("/").pop();if(d&&o.components?.schemas?.[d]){let u=o.components.schemas[d],f=ho(e.target,u)[0];o.components.parameters||(o.components.parameters={}),o.components.parameters[d]=f,delete o.components.schemas[d],r.push({$ref:`#/components/parameters/${d}`})}}else r=ho(e.target,o.schema);s.parameters=r}return{schema:s,components:o.components}}c(ws,"getSpec");function ho(e,t){let o=[];for(let[s,r]of Object.entries(t.properties??{})){let n={in:e==="param"?"path":e,name:s,schema:r};t.required?.includes(s)&&(n.required=!0),n.schema&&"description"in n.schema&&n.schema.description&&(n.description=n.schema.description,n.schema.description=void 0),o.push(n)}return o}c(ho,"generateParameters");function $t(...e){return e.reduce((t,o,s)=>(o==null||s===0||((t.schemas&&Object.keys(t.schemas).length>0||o.schemas&&Object.keys(o.schemas).length>0)&&(t.schemas={...t.schemas,...o.schemas}),(t.parameters&&Object.keys(t.parameters).length>0||o.parameters&&Object.keys(o.parameters).length>0)&&(t.parameters={...t.parameters,...o.parameters})),t),e[0]??{})}c($t,"mergeComponentsObjects");function i(e,t){return{vendor:e["~standard"].vendor,validate:e["~standard"].validate,toJSONSchema:c(o=>to(e,{...t,...o}),"toJSONSchema"),toOpenAPISchema:c(o=>Rt(e,{...t,...o}),"toOpenAPISchema")}}c(i,"resolver");function p(e,t,o,s){let r=po(e,t,o);return Object.assign(r,{[Bt]:{target:e,...i(t,s),options:s}})}c(p,"validator");function a(e){return Object.assign(c(async(o,s)=>{await s()},"middleware"),{[Bt]:{spec:e}})}c(a,"describeRoute");import{Hono as ts}from"hono";import{compress as qr}from"hono/compress";import{cors as Ar}from"hono/cors";import{basicAuth as Cr}from"hono/basic-auth";import ee from"zod";import{createAdaptorServer as Rr}from"@hono/node-server";import{createNodeWebSocket as Er}from"@hono/node-ws";var Ds={worktree:A(async()=>(await import("./worktree-INBHVVO4.js")).WorktreeAdaptor)};function Ke(e){return Ds[e]()}c(Ke,"getAdaptor");import at from"zod";import{setTimeout as Io}from"node:timers/promises";import{sqliteTable as Ss,text as _e}from"drizzle-orm/sqlite-core";var we=Ss("workspace",{id:_e().$type().primaryKey(),type:_e().notNull(),branch:_e(),name:_e(),directory:_e(),extra:_e({mode:"json"}),project_id:_e().$type().notNull().references(()=>oo.id,{onDelete:"cascade"})});async function bo(e,t,o){let s=e.getReader(),r=new TextDecoder,n="",d="",u=1e3,f=c(()=>{s.cancel().catch(()=>{})},"abort");t.addEventListener("abort",f);try{for(;!t.aborted;){let x=await s.read().catch(()=>({done:!0,value:void 0}));if(x.done)break;n+=r.decode(x.value,{stream:!0}),n=n.replace(/\r\n/g,`
12
+ import{a as Je,b as it,c as Ce,d as ao}from"./chunk-5P5WLADX.js";import{b as Rt}from"./chunk-2ANK3QEN.js";import{A as Lt,B as $e,C as It,D as io,E as Ae,G as Mt,H as Nt,I as Gt,J as re,K as V,L as Wt,M as Ft,N as vt,O as de,P as ze,Q as h,R as J,S as Ve,a as ve,b as Ot,c as ce,d as yt,f as Fe,g as Tt,h as F,i as ro,j as no,k as ot,m as pe,o as rt,p as ht,q as Q,r as gt,s as nt,t as je,u as bt,v as qe,w as _t,x as Be,y as Ut,z as He}from"./chunk-G752V4OP.js";import{A as ft,a as Te,c as A,d as ge,e as tt,h as ie,i as ke,j as xe,k as W,m as oo,n as De,o as Ge,p as We,s as ue,u as ut,x as fe,y as U}from"./chunk-IR6PDN4W.js";import{a as Et,b as X,c as st,d as zt}from"./chunk-7KKA6WBY.js";import{a as so}from"./chunk-LTCXIXYM.js";import{c as eo,d as lt,e as G}from"./chunk-M4CB72HE.js";import{b as to}from"./chunk-CZVKIDQZ.js";import{a as c,e as Qt,f as Zt}from"./chunk-MBZTOEAD.js";import{validator as cs}from"hono/validator";var co={header:["cookie"]};function ps(e,t,o){if(!(o in co))return e;let s=co[o]||[];return t==="arktype"?ds(e,s):t==="valibot"?ms(e,s):e}c(ps,"sanitizeIssues");function ds(e,t){return e.map(o=>{if(o&&typeof o=="object"&&"data"in o&&typeof o.data=="object"&&o.data!==null&&!Array.isArray(o.data)){let s={...o.data};for(let n of t)delete s[n];let r=Object.create(Object.getPrototypeOf(o));return Object.assign(r,o,{data:s}),r}return o})}c(ds,"sanitizeArktypeIssues");function ms(e,t){return e.map(o=>{if(o&&typeof o=="object"&&"path"in o&&Array.isArray(o.path)){for(let s of o.path)if(typeof s=="object"&&"input"in s&&typeof s.input=="object"&&s.input!==null&&!Array.isArray(s.input))for(let r of t)delete s.input[r]}return o})}c(ms,"sanitizeValibotIssues");var po=c((e,t,o)=>cs(e,async(s,r)=>{let n=await t["~standard"].validate(s);if(o){let d=await o(n.issues?{data:s,error:n.issues,success:!1,target:e}:{data:s,success:!0,target:e},r);if(d){if(d instanceof Response)return d;if("response"in d)return d.response}}if(n.issues){let d=ps(n.issues,t["~standard"].vendor,e);return r.json({data:s,error:d,success:!1},400)}return n.value}),"sValidator");var Bt=Symbol("openapi"),us=["GET","PUT","POST","DELETE","OPTIONS","HEAD","PATCH","TRACE"],fs=c(e=>e.split("/").map(t=>{let o=t;if(o.startsWith(":")){let s=o.match(/^:([^{?]+)(?:{(.+)})?(\?)?$/);s?o=`{${s[1]}}`:(o=o.slice(1,o.length),o.endsWith("?")&&(o=o.slice(0,-1)),o=`{${o}}`)}return o}).join("/"),"toOpenAPIPath"),mo=c(e=>e.charAt(0).toUpperCase()+e.slice(1),"capitalize"),ys=c(e=>{let t=e.method.toLowerCase();if(e.path==="/")return`${t}Index`;for(let o of e.path.split("/"))o.charCodeAt(0)===123?t+=`By${mo(o.slice(1,-1))}`:t+=mo(o);return t},"generateOperationId"),hs=c(e=>"$ref"in e?e.$ref:`${e.in} ${e.name}`,"paramKey");function lo(...e){let t=e.flatMap(o=>o??[]).reduce((o,s)=>(o.set(hs(s),s),o),new Map);return Array.from(t.values())}c(lo,"mergeParameters");var Ye=new Map;function gs(e){let t=[];for(let[o,s]of Ye)s&&e.match(o)&&t.push(s);return t}c(gs,"getPathContext");function bs(){Ye.clear()}c(bs,"clearSpecsContext");function uo(e,...t){return t.reduce((o,s)=>{if(!s||!o)return o;for(let[r,n]of Object.entries(s))if(n!=null)if(r in o&&(typeof n=="object"||typeof n=="function"&&r==="operationId"))if(Array.isArray(n)){let d=[...o[r]??[],...n];r==="tags"?o[r]=Array.from(new Set(d)):r==="parameters"?o[r]=lo(d):o[r]=d}else typeof n=="function"?o[r]=n(e):r==="parameters"?o[r]=lo(o[r],n):o[r]={...o[r],...n};else o[r]=n;return o},{operationId:ys(e)})}c(uo,"mergeSpecs");function fo({route:e,specs:t,paths:o}){let s=fs(e.path),r=e.method.toLowerCase();if(r==="all"){if(!t)return;if(Ye.has(s)){let n=Ye.get(s)??{};Ye.set(s,uo(e,n,t))}else Ye.set(s,t)}else{let n=gs(s);s in o||(o[s]={}),o[s]&&(o[s][r]=uo(e,...n,o[s]?.[r],t))}}c(fo,"registerSchemaPath");function Is(e,t){let{exclude:o,excludeStaticFile:s}=t.options,r={},n=Array.isArray(o)?o:[o];for(let[d,u]of Object.entries(e))if(!(u==null||n.some(k=>typeof k=="string"?d===k:k.test(d))||d.includes("*")&&!d.includes("{"))){if(s){let k=d.includes("{"),v=(d.split("/").pop()||"").includes(".");if(!k&&v)continue}for(let k of Object.keys(u)){let y=u[k];if(y!=null){if(d.includes("{")){y.parameters=y.parameters?[...y.parameters]:[];let v=d.split("/").filter(g=>g.startsWith("{")&&!y.parameters.find(m=>m.in==="path"&&m.name===g.slice(1,g.length-1)));for(let g of v){let m=g.slice(1,g.length-1);y.parameters.findIndex(w=>{if("$ref"in w){let z=w.$ref.split("/").pop();if(z){let te=t.components.parameters?.[z];if(te&&!("$ref"in te))return te.in==="path"&&te.name===m}return!1}return w.in==="path"&&w.name===m})===-1&&y.parameters.push({schema:{type:"string"},in:"path",name:m,required:!0})}}y.responses||(y.responses={200:{}})}}r[d]=u}return r}c(Is,"removeExcludedPaths");var yo={documentation:{},excludeStaticFile:!0,exclude:[],excludeMethods:["OPTIONS"],excludeTags:[]};function go(e,t){let o;return async s=>(o||(o=await Ht(e,t,s)),s.json(o))}c(go,"openAPIRouteHandler");async function Ht(e,t=yo,o){let s={components:{},options:{...yo,...t}},r=s.options.documentation??{};bs();let n=await vs(e,s);for(let u in n)for(let f in n[u])js({valueOrFunc:n[u][f]?.hide,method:f,path:u,c:o})&&(n[u][f]=void 0);let d=$t(r.components,s.components);return{openapi:"3.1.0",...r,tags:r.tags?.filter(u=>!s.options.excludeTags?.includes(u?.name)),info:{title:"Hono Documentation",description:"Development documentation",version:"0.0.0",...r.info},paths:{...Is(n,s),...r.paths},components:d}}c(Ht,"generateSpecs");async function vs(e,t){let o={};for(let s of e.routes){let r=s.handler[Bt];if(!r){t.options.includeEmptyPaths&&fo({route:s,paths:o});continue}let n=s.method;if(n!=="ALL"&&(t.options.excludeMethods?.includes(n)||!us.includes(n)))continue;let d=t.options.defaultOptions?.[n],{schema:u,components:f={}}=await ws(r,d);t.components=$t(t.components,f),fo({route:s,specs:u,paths:o})}return o}c(vs,"generatePaths");function js(e){let{valueOrFunc:t,c:o,method:s,path:r}=e;if(t!=null){if(typeof t=="boolean")return t;if(typeof t=="function")return t({c:o,method:s,path:r})}return!1}c(js,"getHiddenValue");async function ws(e,t){if("spec"in e){let r={},n={...t,...e.spec,responses:{...t?.responses,...e.spec.responses}};if(n.responses)for(let d of Object.keys(n.responses)){let u=n.responses[d];if(!(!u||!("content"in u)))for(let f of Object.keys(u.content??{})){let x=u.content?.[f];if(x&&x.schema&&"toOpenAPISchema"in x.schema){let k=await x.schema.toOpenAPISchema();x.schema=k.schema,k.components&&(r=$t(r,k.components))}}}return{schema:n,components:r}}let o=await e.toOpenAPISchema(),s=t??{};if(e.target==="form"||e.target==="json"){let r=e.options?.media??e.target==="json"?"application/json":"multipart/form-data";!s.requestBody||!("content"in s.requestBody)||!s.requestBody.content?s.requestBody={content:{[r]:{schema:o.schema}}}:s.requestBody.content[r]={schema:o.schema}}else{let r=[];if("$ref"in o.schema){let d=o.schema.$ref.split("/").pop();if(d&&o.components?.schemas?.[d]){let u=o.components.schemas[d],f=ho(e.target,u)[0];o.components.parameters||(o.components.parameters={}),o.components.parameters[d]=f,delete o.components.schemas[d],r.push({$ref:`#/components/parameters/${d}`})}}else r=ho(e.target,o.schema);s.parameters=r}return{schema:s,components:o.components}}c(ws,"getSpec");function ho(e,t){let o=[];for(let[s,r]of Object.entries(t.properties??{})){let n={in:e==="param"?"path":e,name:s,schema:r};t.required?.includes(s)&&(n.required=!0),n.schema&&"description"in n.schema&&n.schema.description&&(n.description=n.schema.description,n.schema.description=void 0),o.push(n)}return o}c(ho,"generateParameters");function $t(...e){return e.reduce((t,o,s)=>(o==null||s===0||((t.schemas&&Object.keys(t.schemas).length>0||o.schemas&&Object.keys(o.schemas).length>0)&&(t.schemas={...t.schemas,...o.schemas}),(t.parameters&&Object.keys(t.parameters).length>0||o.parameters&&Object.keys(o.parameters).length>0)&&(t.parameters={...t.parameters,...o.parameters})),t),e[0]??{})}c($t,"mergeComponentsObjects");function i(e,t){return{vendor:e["~standard"].vendor,validate:e["~standard"].validate,toJSONSchema:c(o=>to(e,{...t,...o}),"toJSONSchema"),toOpenAPISchema:c(o=>Rt(e,{...t,...o}),"toOpenAPISchema")}}c(i,"resolver");function p(e,t,o,s){let r=po(e,t,o);return Object.assign(r,{[Bt]:{target:e,...i(t,s),options:s}})}c(p,"validator");function a(e){return Object.assign(c(async(o,s)=>{await s()},"middleware"),{[Bt]:{spec:e}})}c(a,"describeRoute");import{Hono as ts}from"hono";import{compress as qr}from"hono/compress";import{cors as Ar}from"hono/cors";import{basicAuth as Cr}from"hono/basic-auth";import ee from"zod";import{createAdaptorServer as Rr}from"@hono/node-server";import{createNodeWebSocket as Er}from"@hono/node-ws";var Ds={worktree:A(async()=>(await import("./worktree-E4DGSBLJ.js")).WorktreeAdaptor)};function Ke(e){return Ds[e]()}c(Ke,"getAdaptor");import at from"zod";import{setTimeout as Io}from"node:timers/promises";import{sqliteTable as Ss,text as _e}from"drizzle-orm/sqlite-core";var we=Ss("workspace",{id:_e().$type().primaryKey(),type:_e().notNull(),branch:_e(),name:_e(),directory:_e(),extra:_e({mode:"json"}),project_id:_e().$type().notNull().references(()=>oo.id,{onDelete:"cascade"})});async function bo(e,t,o){let s=e.getReader(),r=new TextDecoder,n="",d="",u=1e3,f=c(()=>{s.cancel().catch(()=>{})},"abort");t.addEventListener("abort",f);try{for(;!t.aborted;){let x=await s.read().catch(()=>({done:!0,value:void 0}));if(x.done)break;n+=r.decode(x.value,{stream:!0}),n=n.replace(/\r\n/g,`
13
13
  `).replace(/\r/g,`
14
14
  `);let k=n.split(`
15
15
 
@@ -0,0 +1,13 @@
1
+ // Built by esbuild from opencode-server source
2
+ if (typeof globalThis.Bun === 'undefined') {
3
+ globalThis.Bun = {
4
+ version: '0.0.0-node-compat',
5
+ stdin: { async text() { const chunks = []; for await (const c of process.stdin) chunks.push(c); return Buffer.concat(chunks).toString(); } },
6
+ which(cmd) { try { return require('child_process').execFileSync('which', [cmd], { encoding: 'utf8' }).trim(); } catch { return null; } },
7
+ };
8
+ }
9
+ if (typeof globalThis.__name === 'undefined') { globalThis.__name = (t, n) => { Object.defineProperty(t, 'name', { value: n, configurable: true }); return t; }; }
10
+ if (typeof globalThis.__export === 'undefined') { globalThis.__export = (t, a) => { for (const k in a) Object.defineProperty(t, k, { get: a[k], enumerable: true }); }; }
11
+
12
+ import{a as Ot}from"./chunk-LTCXIXYM.js";import{a as rt,c as Te,d as Oe,e as te}from"./chunk-M4CB72HE.js";import{a as e,c as zt,d as $}from"./chunk-MBZTOEAD.js";import{Effect as wr,Layer as vr,ManagedRuntime as Lr}from"effect";import{EventEmitter as Xt}from"events";var $e=new Xt;var ot=new Set;function _t(t){return ot.add(t),()=>{ot.delete(t)}}e(_t,"registerDisposer");async function nt(t){await Promise.allSettled([...ot].map(r=>r(t)))}e(nt,"disposeInstance");function be(t){return t()}e(be,"iife");import{AsyncLocalStorage as Kt}from"async_hooks";var re;(l=>{class t extends Error{constructor(g){super(`No context found for ${g}`);this.name=g}name;static{e(this,"NotFound")}}l.NotFound=t;function r(u){let _=new Kt;return{use(){let g=_.getStore();if(!g)throw new t(u);return g},provide(g,T){return _.run(g,T)}}}l.create=r,e(r,"create")})(re||={});import X from"zod";var A={};zt(A,{Database:()=>_e,NotFoundError:()=>rr});$(A,wo);import{migrate as gt}from"drizzle-orm/node-sqlite/migrator";import*as wo from"drizzle-orm";function He(t){let r,l=!1,u=e(()=>{if(l)return r;try{return r=t(),l=!0,r}catch(_){throw _}},"result");return u.reset=()=>{l=!1,r=void 0},u}e(He,"lazy");import ze from"zod";var Xe=class t extends Error{static{e(this,"NamedError")}static create(r,l){let u=ze.object({name:ze.literal(r),data:l}).meta({ref:r}),_=class extends t{constructor(T,J){super(r,J);this.data=T;this.name=r}data;static{e(this,"result")}static Schema=u;name=r;static isInstance(T){return typeof T=="object"&&"name"in T&&T.name===r}schema(){return u}toObject(){return{name:r,data:this.data}}};return Object.defineProperty(_,"name",{value:r}),_}static Unknown=t.create("UnknownError",ze.object({message:ze.string()}))};import Ct from"zod";import ge from"path";import{readFileSync as Qt,readdirSync as er,existsSync as tr}from"fs";import{Config as De}from"effect";function b(t){let r=process.env[t]?.toLowerCase();return r==="true"||r==="1"}e(b,"truthy");function Wt(t){let r=process.env[t]?.toLowerCase();return r==="false"||r==="0"}e(Wt,"falsy");var H;(p=>{p.OPENCODE_AUTO_SHARE=b("OPENCODE_AUTO_SHARE"),p.OPENCODE_AUTO_HEAP_SNAPSHOT=b("OPENCODE_AUTO_HEAP_SNAPSHOT"),p.OPENCODE_GIT_BASH_PATH=process.env.OPENCODE_GIT_BASH_PATH,p.OPENCODE_CONFIG=process.env.OPENCODE_CONFIG,p.OPENCODE_CONFIG_CONTENT=process.env.OPENCODE_CONFIG_CONTENT,p.OPENCODE_DISABLE_AUTOUPDATE=b("OPENCODE_DISABLE_AUTOUPDATE"),p.OPENCODE_ALWAYS_NOTIFY_UPDATE=b("OPENCODE_ALWAYS_NOTIFY_UPDATE"),p.OPENCODE_DISABLE_PRUNE=b("OPENCODE_DISABLE_PRUNE"),p.OPENCODE_DISABLE_TERMINAL_TITLE=b("OPENCODE_DISABLE_TERMINAL_TITLE"),p.OPENCODE_SHOW_TTFD=b("OPENCODE_SHOW_TTFD"),p.OPENCODE_PERMISSION=process.env.OPENCODE_PERMISSION,p.OPENCODE_DISABLE_DEFAULT_PLUGINS=b("OPENCODE_DISABLE_DEFAULT_PLUGINS"),p.OPENCODE_DISABLE_LSP_DOWNLOAD=b("OPENCODE_DISABLE_LSP_DOWNLOAD"),p.OPENCODE_ENABLE_EXPERIMENTAL_MODELS=b("OPENCODE_ENABLE_EXPERIMENTAL_MODELS"),p.OPENCODE_DISABLE_AUTOCOMPACT=b("OPENCODE_DISABLE_AUTOCOMPACT"),p.OPENCODE_DISABLE_MODELS_FETCH=b("OPENCODE_DISABLE_MODELS_FETCH"),p.OPENCODE_DISABLE_MOUSE=b("OPENCODE_DISABLE_MOUSE"),p.OPENCODE_DISABLE_CLAUDE_CODE=b("OPENCODE_DISABLE_CLAUDE_CODE"),p.OPENCODE_DISABLE_CLAUDE_CODE_PROMPT=p.OPENCODE_DISABLE_CLAUDE_CODE||b("OPENCODE_DISABLE_CLAUDE_CODE_PROMPT"),p.OPENCODE_DISABLE_CLAUDE_CODE_SKILLS=p.OPENCODE_DISABLE_CLAUDE_CODE||b("OPENCODE_DISABLE_CLAUDE_CODE_SKILLS"),p.OPENCODE_DISABLE_EXTERNAL_SKILLS=p.OPENCODE_DISABLE_CLAUDE_CODE_SKILLS||b("OPENCODE_DISABLE_EXTERNAL_SKILLS"),p.OPENCODE_FAKE_VCS=process.env.OPENCODE_FAKE_VCS,p.OPENCODE_SERVER_PASSWORD=process.env.OPENCODE_SERVER_PASSWORD,p.OPENCODE_SERVER_USERNAME=process.env.OPENCODE_SERVER_USERNAME,p.OPENCODE_ENABLE_QUESTION_TOOL=b("OPENCODE_ENABLE_QUESTION_TOOL"),p.OPENCODE_EXPERIMENTAL=b("OPENCODE_EXPERIMENTAL"),p.OPENCODE_EXPERIMENTAL_FILEWATCHER=De.boolean("OPENCODE_EXPERIMENTAL_FILEWATCHER").pipe(De.withDefault(!1)),p.OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER=De.boolean("OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER").pipe(De.withDefault(!1)),p.OPENCODE_EXPERIMENTAL_ICON_DISCOVERY=p.OPENCODE_EXPERIMENTAL||b("OPENCODE_EXPERIMENTAL_ICON_DISCOVERY");let Ae=process.env.OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT;p.OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT=Ae===void 0?process.platform==="win32":b("OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT"),p.OPENCODE_ENABLE_EXA=b("OPENCODE_ENABLE_EXA")||p.OPENCODE_EXPERIMENTAL||b("OPENCODE_EXPERIMENTAL_EXA"),p.OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS=Ge("OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS"),p.OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX=Ge("OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX"),p.OPENCODE_EXPERIMENTAL_OXFMT=p.OPENCODE_EXPERIMENTAL||b("OPENCODE_EXPERIMENTAL_OXFMT"),p.OPENCODE_EXPERIMENTAL_LSP_TY=b("OPENCODE_EXPERIMENTAL_LSP_TY"),p.OPENCODE_EXPERIMENTAL_LSP_TOOL=p.OPENCODE_EXPERIMENTAL||b("OPENCODE_EXPERIMENTAL_LSP_TOOL"),p.OPENCODE_DISABLE_FILETIME_CHECK=De.boolean("OPENCODE_DISABLE_FILETIME_CHECK").pipe(De.withDefault(!1)),p.OPENCODE_EXPERIMENTAL_PLAN_MODE=p.OPENCODE_EXPERIMENTAL||b("OPENCODE_EXPERIMENTAL_PLAN_MODE"),p.OPENCODE_EXPERIMENTAL_WORKSPACES=p.OPENCODE_EXPERIMENTAL||b("OPENCODE_EXPERIMENTAL_WORKSPACES"),p.OPENCODE_EXPERIMENTAL_MARKDOWN=!Wt("OPENCODE_EXPERIMENTAL_MARKDOWN"),p.OPENCODE_MODELS_URL=process.env.OPENCODE_MODELS_URL,p.OPENCODE_MODELS_PATH=process.env.OPENCODE_MODELS_PATH,p.OPENCODE_DISABLE_EMBEDDED_WEB_UI=b("OPENCODE_DISABLE_EMBEDDED_WEB_UI"),p.OPENCODE_DB=process.env.OPENCODE_DB,p.OPENCODE_DISABLE_CHANNEL_DB=b("OPENCODE_DISABLE_CHANNEL_DB"),p.OPENCODE_SKIP_MIGRATIONS=b("OPENCODE_SKIP_MIGRATIONS"),p.OPENCODE_STRICT_CONFIG_DEPS=b("OPENCODE_STRICT_CONFIG_DEPS");function Ge(Ht){let Pt=process.env[Ht];if(!Pt)return;let tt=Number(Pt);return Number.isInteger(tt)&&tt>0?tt:void 0}e(Ge,"number")})(H||={});Object.defineProperty(H,"OPENCODE_DISABLE_PROJECT_CONFIG",{get(){return b("OPENCODE_DISABLE_PROJECT_CONFIG")},enumerable:!0,configurable:!1});Object.defineProperty(H,"OPENCODE_TUI_CONFIG",{get(){return process.env.OPENCODE_TUI_CONFIG},enumerable:!0,configurable:!1});Object.defineProperty(H,"OPENCODE_CONFIG_DIR",{get(){return process.env.OPENCODE_CONFIG_DIR},enumerable:!0,configurable:!1});Object.defineProperty(H,"OPENCODE_PURE",{get(){return b("OPENCODE_PURE")},enumerable:!0,configurable:!1});Object.defineProperty(H,"OPENCODE_PLUGIN_META_FILE",{get(){return process.env.OPENCODE_PLUGIN_META_FILE},enumerable:!0,configurable:!1});Object.defineProperty(H,"OPENCODE_CLIENT",{get(){return process.env.OPENCODE_CLIENT??"cli"},enumerable:!0,configurable:!1});Object.defineProperty(H,"ALCHEMYLAB",{get(){return b("ALCHEMYLAB")},enumerable:!0,configurable:!1});var Qr=typeof OPENCODE_VERSION=="string"?OPENCODE_VERSION:"local",it=typeof OPENCODE_CHANNEL=="string"?OPENCODE_CHANNEL:"local";import{Effect as Z,Fiber as Vt,ScopedCache as ve,ServiceMap as Yt}from"effect";import{ServiceMap as Jt}from"effect";var we=Jt.Reference("~opencode/InstanceRef",{defaultValue:e(()=>{},"defaultValue")});var St="~opencode/InstanceState",Ke;(N=>(N.bind=e(f=>{try{return Q.bind(f)}catch(S){if(!(S instanceof re.NotFound))throw S}let s=Vt.getCurrent(),y=s?Yt.getReferenceUnsafe(s.services,we):void 0;return y?((...S)=>Q.restore(y,()=>f(...S))):f},"bind"),N.context=Z.gen(function*(){return(yield*we)??Q.current}),N.directory=Z.map(N.context,f=>f.directory),N.make=e(f=>Z.gen(function*(){let s=yield*ve.make({capacity:Number.POSITIVE_INFINITY,lookup:e(()=>Z.gen(function*(){return yield*f(yield*N.context)}),"lookup")}),y=_t(S=>Z.runPromise(ve.invalidate(s,S)));return yield*Z.addFinalizer(()=>Z.sync(y)),{[St]:St,cache:s}}),"make"),N.get=e(f=>Z.gen(function*(){return yield*ve.get(f.cache,yield*N.directory)}),"get"),N.use=e((f,s)=>Z.map((0,N.get)(f),s),"use"),N.useEffect=e((f,s)=>Z.flatMap((0,N.get)(f),s),"useEffect"),N.has=e(f=>Z.gen(function*(){return yield*ve.has(f.cache,yield*N.directory)}),"has"),N.invalidate=e(f=>Z.gen(function*(){return yield*ve.invalidate(f.cache,yield*N.directory)}),"invalidate"),N.withALS=e(f=>Z.map(N.context,s=>Q.restore(s,f)),"withALS")))(Ke||={});import{DatabaseSync as qt}from"node:sqlite";import{drizzle as Zt}from"drizzle-orm/node-sqlite";function Dt(t){let r=new qt(t);return Zt({client:r})}e(Dt,"init");var rr=Xe.create("NotFoundError",Ct.object({message:Ct.string()})),st=te.create({service:"db"}),_e;(N=>{function t(){if(["latest","beta"].includes(it)||H.OPENCODE_DISABLE_CHANNEL_DB)return ge.join(Oe.Path.data,"opencode.db");let f=it.replace(/[^a-zA-Z0-9._-]/g,"-");return ge.join(Oe.Path.data,`opencode-${f}.db`)}N.getChannelPath=t,e(t,"getChannelPath"),N.Path=be(()=>H.OPENCODE_DB?H.OPENCODE_DB===":memory:"||ge.isAbsolute(H.OPENCODE_DB)?H.OPENCODE_DB:ge.join(Oe.Path.data,H.OPENCODE_DB):t());function l(f){let s=/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/.exec(f);return s?Date.UTC(Number(s[1]),Number(s[2])-1,Number(s[3]),Number(s[4]),Number(s[5]),Number(s[6])):0}e(l,"time");function u(f){return er(f,{withFileTypes:!0}).filter(S=>S.isDirectory()).map(S=>S.name).map(S=>{let z=ge.join(f,S,"migration.sql");if(tr(z))return{sql:Qt(z,"utf-8"),timestamp:l(S),name:S}}).filter(Boolean).sort((S,z)=>S.timestamp-z.timestamp)}e(u,"migrations"),N.Client=He(()=>{st.info("opening database",{path:N.Path});let f=Dt(N.Path);f.run("PRAGMA journal_mode = WAL"),f.run("PRAGMA synchronous = NORMAL"),f.run("PRAGMA busy_timeout = 5000"),f.run("PRAGMA cache_size = -64000"),f.run("PRAGMA foreign_keys = ON"),f.run("PRAGMA wal_checkpoint(PASSIVE)");let s=ge.join(import.meta.dirname,"../packages/opencode/migration");if(typeof OPENCODE_MIGRATIONS<"u"){let y=OPENCODE_MIGRATIONS;if(y.length>0){if(st.info("applying migrations",{count:y.length,mode:"bundled"}),H.OPENCODE_SKIP_MIGRATIONS)for(let S of y)S.sql="select 1;";gt(f,y)}}else{let y=u(s);st.info("applying migrations",{count:y.length,mode:"dev"}),!H.OPENCODE_SKIP_MIGRATIONS&&y.length>0&&gt(f,{migrationsFolder:s})}return f});function g(){(0,N.Client)().$client.close(),N.Client.reset()}N.close=g,e(g,"close");let T=re.create("database");function J(f){try{return f(T.use().tx)}catch(s){if(s instanceof re.NotFound){let y=[],S=T.provide({effects:y,tx:(0,N.Client)()},()=>f((0,N.Client)()));for(let z of y)z();return S}throw s}}N.use=J,e(J,"use");function B(f){let s=Ke.bind(f);try{T.use().effects.push(s)}catch{s()}}N.effect=B,e(B,"effect");function K(f,s){try{return f(T.use().tx)}catch(y){if(y instanceof re.NotFound){let S=[],z=Ke.bind(ie=>T.provide({tx:ie,effects:S},()=>f(ie))),Pe=(0,N.Client)().transaction(z,{behavior:s?.behavior});for(let ie of S)ie();return Pe}throw y}}N.transaction=K,e(K,"transaction")})(_e||={});import{sqliteTable as or,text as me,integer as nr}from"drizzle-orm/sqlite-core";import{integer as Nt}from"drizzle-orm/sqlite-core";var ue={time_created:Nt().notNull().$default(()=>Date.now()),time_updated:Nt().notNull().$onUpdate(()=>Date.now())};var w=or("project",{id:me().$type().primaryKey(),worktree:me().notNull(),vcs:me(),name:me(),icon_url:me(),icon_color:me(),...ue,time_initialized:nr(),sandboxes:me({mode:"json"}).notNull().$type(),commands:me({mode:"json"}).$type()});import{sqliteTable as Le,text as R,integer as Ce,index as Se,primaryKey as ir}from"drizzle-orm/sqlite-core";var Ne=Le("session",{id:R().$type().primaryKey(),project_id:R().$type().notNull().references(()=>w.id,{onDelete:"cascade"}),workspace_id:R().$type(),parent_id:R().$type(),slug:R().notNull(),directory:R().notNull(),title:R().notNull(),version:R().notNull(),share_url:R(),summary_additions:Ce(),summary_deletions:Ce(),summary_files:Ce(),summary_diffs:R({mode:"json"}).$type(),revert:R({mode:"json"}).$type(),permission:R({mode:"json"}).$type(),...ue,metadata:R({mode:"json"}).$type(),time_compacting:Ce(),time_archived:Ce()},t=>[Se("session_project_idx").on(t.project_id),Se("session_workspace_idx").on(t.workspace_id),Se("session_parent_idx").on(t.parent_id)]),sr=Le("message",{id:R().$type().primaryKey(),session_id:R().$type().notNull().references(()=>Ne.id,{onDelete:"cascade"}),...ue,data:R({mode:"json"}).notNull().$type()},t=>[Se("message_session_time_created_id_idx").on(t.session_id,t.time_created,t.id)]),Go=Le("part",{id:R().$type().primaryKey(),message_id:R().$type().notNull().references(()=>sr.id,{onDelete:"cascade"}),session_id:R().$type().notNull(),...ue,data:R({mode:"json"}).notNull().$type()},t=>[Se("part_message_id_id_idx").on(t.message_id,t.id),Se("part_session_idx").on(t.session_id)]),$o=Le("todo",{session_id:R().$type().notNull().references(()=>Ne.id,{onDelete:"cascade"}),content:R().notNull(),status:R().notNull(),priority:R().notNull(),position:Ce().notNull(),...ue},t=>[ir({columns:[t.session_id,t.position]}),Se("todo_session_idx").on(t.session_id)]),Ho=Le("permission",{project_id:R().primaryKey().references(()=>w.id,{onDelete:"cascade"}),...ue,data:R({mode:"json"}).notNull().$type()});import ct from"zod";var at;(u=>{let t=new Map;function r(_,g){let T={type:_,properties:g};return t.set(_,T),T}u.define=r,e(r,"define");function l(){return ct.discriminatedUnion("type",t.entries().map(([_,g])=>ct.object({type:ct.literal(_),properties:g.properties}).meta({ref:"Event."+g.type})).toArray()).meta({ref:"Event"})}u.payloads=l,e(l,"payloads")})(at||={});import cr from"which";import ar from"path";function dt(t,r){let l=r?.PATH??r?.Path??process.env.PATH??process.env.Path??"",u=l?l+ar.delimiter+Oe.Path.bin:Oe.Path.bin,_=cr.sync(t,{nothrow:!0,path:u,pathExt:r?.PATHEXT??r?.PathExt??process.env.PATHEXT??process.env.PathExt});return typeof _=="string"?_:null}e(dt,"which");import{Schema as ht}from"effect";import xt from"zod";var dr=ht.String.pipe(ht.brand("ProjectID")),oe=dr.pipe(Ot(t=>({global:t.makeUnsafe("global"),make:e(r=>t.makeUnsafe(r),"make"),zod:xt.string().pipe(xt.custom())})));import{Effect as x,Layer as Ye,Path as hr,Scope as xr,ServiceMap as Ir,Stream as qe}from"effect";import{ChildProcess as Ar,ChildProcessSpawner as Tr}from"effect/unstable/process";import{NodePath as br}from"@effect/platform-node";import{NodeFileSystem as fr}from"@effect/platform-node";import{dirname as We,join as ft,relative as pt,resolve as It}from"path";import{realpathSync as At}from"fs";import*as Ve from"fs/promises";import{lookup as pr}from"mime-types";import{Effect as M,FileSystem as lr,Layer as Tt,Schema as Je,ServiceMap as Er}from"effect";var he;(f=>{class t extends Je.TaggedErrorClass()("FileSystemError",{method:Je.String,cause:Je.optional(Je.Defect)}){static{e(this,"FileSystemError")}}f.FileSystemError=t;class r extends Er.Service()("@opencode/FileSystem"){static{e(this,"Service")}}f.Service=r,f.layer=Tt.effect(r,M.gen(function*(){let s=yield*lr.FileSystem,y=M.fn("FileSystem.existsSafe")(function*(c){return yield*s.exists(c).pipe(M.orElseSucceed(()=>!1))}),S=M.fn("FileSystem.isDir")(function*(c){return(yield*s.stat(c).pipe(M.catch(()=>M.void)))?.type==="Directory"}),z=M.fn("FileSystem.isFile")(function*(c){return(yield*s.stat(c).pipe(M.catch(()=>M.void)))?.type==="File"}),Pe=M.fn("FileSystem.readDirectoryEntries")(function*(c){return yield*M.tryPromise({try:e(async()=>(await Ve.readdir(c,{withFileTypes:!0})).map(h=>({name:h.name,type:h.isDirectory()?"directory":h.isSymbolicLink()?"symlink":h.isFile()?"file":"other"})),"try"),catch:e(d=>new t({method:"readDirectoryEntries",cause:d}),"catch")})}),ie=M.fn("FileSystem.readJson")(function*(c){let d=yield*s.readFileString(c);return JSON.parse(d)}),pe=M.fn("FileSystem.writeJson")(function*(c,d,h){let v=JSON.stringify(d,null,2),I=`${c}.tmp-${process.pid}-${Math.random().toString(36).slice(2,8)}`;yield*s.writeFileString(I,v),h&&(yield*s.chmod(I,h)),yield*M.tryPromise({try:e(()=>Ve.rename(I,c),"try"),catch:e(k=>new t({method:"writeJson.rename",cause:k}),"catch")})}),o=M.fn("FileSystem.ensureDir")(function*(c){yield*s.makeDirectory(c,{recursive:!0})}),n=M.fn("FileSystem.writeWithDirs")(function*(c,d,h){let v=typeof d=="string"?s.writeFileString(c,d):s.writeFile(c,d);yield*v.pipe(M.catchIf(I=>I.reason._tag==="NotFound",()=>M.gen(function*(){yield*s.makeDirectory(We(c),{recursive:!0}),yield*v}))),h&&(yield*s.chmod(c,h))}),i=M.fn("FileSystem.glob")(function*(c,d){return yield*M.tryPromise({try:e(()=>rt.scan(c,d),"try"),catch:e(h=>new t({method:"glob",cause:h}),"catch")})}),P=M.fn("FileSystem.findUp")(function*(c,d,h){let v=[],I=d;for(;;){let k=ft(I,c);if((yield*s.exists(k))&&v.push(k),h===I)break;let W=We(I);if(W===I)break;I=W}return v}),D=M.fn("FileSystem.up")(function*(c){let d=[],h=c.start;for(;;){for(let I of c.targets){let k=ft(h,I);(yield*s.exists(k))&&d.push(k)}if(c.stop===h)break;let v=We(h);if(v===h)break;h=v}return d}),m=M.fn("FileSystem.globUp")(function*(c,d,h){let v=[],I=d;for(;;){let k=yield*i(c,{cwd:I,absolute:!0,include:"file",dot:!0}).pipe(M.catch(()=>M.succeed([])));if(v.push(...k),h===I)break;let W=We(I);if(W===I)break;I=W}return v});return r.of({...s,existsSafe:y,isDir:S,isFile:z,readDirectoryEntries:Pe,readJson:ie,writeJson:pe,ensureDir:o,writeWithDirs:n,findUp:P,up:D,globUp:m,glob:i,globMatch:rt.match})})),f.defaultLayer=f.layer.pipe(Tt.provide(fr.layer));function _(s){return pr(s)||"application/octet-stream"}f.mimeType=_,e(_,"mimeType");function g(s){if(process.platform!=="win32")return s;let y=It(B(s));try{return At.native(y)}catch{return y}}f.normalizePath=g,e(g,"normalizePath");function T(s){if(process.platform!=="win32"||s==="*")return s;let y=s.match(/^(.*)[\\/]\*$/);if(!y)return g(s);let S=/^[A-Za-z]:$/.test(y[1])?y[1]+"\\":y[1];return ft(g(S),"*")}f.normalizePathPattern=T,e(T,"normalizePathPattern");function J(s){let y=It(B(s));try{return g(At(y))}catch(S){if(S?.code==="ENOENT")return g(y);throw S}}f.resolve=J,e(J,"resolve");function B(s){return process.platform!=="win32"?s:s.replace(/^\/([a-zA-Z]):(?:[\\/]|$)/,(y,S)=>`${S.toUpperCase()}:/`).replace(/^\/([a-zA-Z])(?:\/|$)/,(y,S)=>`${S.toUpperCase()}:/`).replace(/^\/cygdrive\/([a-zA-Z])(?:\/|$)/,(y,S)=>`${S.toUpperCase()}:/`).replace(/^\/mnt\/([a-zA-Z])(?:\/|$)/,(y,S)=>`${S.toUpperCase()}:/`)}f.windowsPath=B,e(B,"windowsPath");function K(s,y){let S=pt(s,y),z=pt(y,s);return!S||!S.startsWith("..")||!z||!z.startsWith("..")}f.overlaps=K,e(K,"overlaps");function N(s,y){return!pt(s,y).startsWith("..")}f.contains=N,e(N,"contains")})(he||={});import{NodeFileSystem as ur,NodeSink as bt,NodeStream as lt}from"@effect/platform-node";import*as wt from"@effect/platform-node/NodePath";import*as Y from"effect/Deferred";import*as a from"effect/Effect";import*as vt from"effect/Exit";import*as Lt from"effect/FileSystem";import*as Re from"effect/Layer";import*as Rt from"effect/Path";import*as kt from"effect/PlatformError";import*as V from"effect/Predicate";import*as ae from"effect/Sink";import*as F from"effect/Stream";import*as de from"effect/unstable/process/ChildProcess";import{ChildProcessSpawner as Mt,ExitCode as mr,make as yr,makeHandle as Pr,ProcessId as Or}from"effect/unstable/process/ChildProcessSpawner";import*as jt from"node:child_process";import{PassThrough as _r}from"node:stream";import Sr from"cross-spawn";var ye=e(t=>t instanceof globalThis.Error?t:new globalThis.Error(String(t)),"toError"),Dr=e(t=>{switch(t.code){case"ENOENT":return"NotFound";case"EACCES":return"PermissionDenied";case"EEXIST":return"AlreadyExists";case"EISDIR":return"BadResource";case"ENOTDIR":return"BadResource";case"EBUSY":return"Busy";case"ELOOP":return"BadResource";default:return"Unknown"}},"toTag"),Ut=e(t=>{let r=[],l=[],u=e(T=>{switch(T._tag){case"StandardCommand":r.push(T);return;case"PipedCommand":u(T.left),l.push(T.options),u(T.right);return}},"walk");if(u(t),r.length===0)throw new Error("flatten produced empty commands array");let[_,...g]=r;return{commands:[_,...g],opts:l}},"flatten"),ce=e((t,r,l)=>{let u=Ut(l).commands.map(_=>`${_.command} ${_.args.join(" ")}`).join(" | ");return kt.systemError({_tag:Dr(r),module:"ChildProcess",method:t,pathOrDescriptor:u,syscall:r.syscall,cause:r})},"toPlatformError"),gr=a.gen(function*(){let t=yield*Lt.FileSystem,r=yield*Rt.Path,l=a.fnUntraced(function*(o){if(!V.isUndefined(o.cwd))return yield*t.access(o.cwd),r.resolve(o.cwd)}),u=e(o=>o.extendEnv?{...globalThis.process.env,...o.env}:o.env,"env"),_=e(o=>F.isStream(o)?"pipe":o,"input"),g=e(o=>ae.isSink(o)?"pipe":o,"output"),T=e(o=>{let n={stream:"pipe",encoding:"utf-8",endOnDone:!0};return V.isUndefined(o.stdin)?n:typeof o.stdin=="string"?{...n,stream:o.stdin}:F.isStream(o.stdin)?{...n,stream:o.stdin}:{stream:o.stdin.stream,encoding:o.stdin.encoding??n.encoding,endOnDone:o.stdin.endOnDone??n.endOnDone}},"stdin"),J=e((o,n)=>{let i=o[n];return V.isUndefined(i)?{stream:"pipe"}:typeof i=="string"?{stream:i}:ae.isSink(i)?{stream:i}:{stream:i.stream}},"stdio"),B=e(o=>V.isUndefined(o.additionalFds)?[]:Object.entries(o.additionalFds).flatMap(([n,i])=>{let P=de.parseFdName(n);return V.isUndefined(P)?[]:[{fd:P,config:i}]}).toSorted((n,i)=>n.fd-i.fd),"fds"),K=e((o,n,i,P)=>{let D=e(d=>process.platform==="win32"&&d==="pipe"?"overlapped":d,"pipe"),m=[D(_(o.stream)),D(g(n.stream)),D(g(i.stream))];if(P.length===0)return m;let c=P.reduce((d,h)=>Math.max(d,h.fd),2);for(let d=3;d<=c;d++)m[d]="ignore";for(let d of P)m[d.fd]=D("pipe");return m},"stdios"),N=a.fnUntraced(function*(o,n,i){if(i.length===0)return{getInputFd:e(()=>ae.drain,"getInputFd"),getOutputFd:e(()=>F.empty,"getOutputFd")};let P=new Map,D=new Map;for(let m of i){let c=n.stdio[m.fd];switch(m.config.type){case"input":{let d=ae.drain;c&&"write"in c&&(d=bt.fromWritable({evaluate:e(()=>c,"evaluate"),onError:e(h=>ce(`fromWritable(fd${m.fd})`,ye(h),o),"onError"),endOnDone:!0})),m.config.stream&&(yield*a.forkScoped(F.run(m.config.stream,d))),P.set(m.fd,d);break}case"output":{let d=F.empty;if(c&&"read"in c){let h=new _r;c.on("error",v=>h.destroy(ye(v))),c.pipe(h),d=lt.fromReadable({evaluate:e(()=>h,"evaluate"),onError:e(v=>ce(`fromReadable(fd${m.fd})`,ye(v),o),"onError")})}m.config.sink&&(d=F.transduce(d,m.config.sink)),D.set(m.fd,d);break}}}return{getInputFd:e(m=>P.get(m)??ae.drain,"getInputFd"),getOutputFd:e(m=>D.get(m)??F.empty,"getOutputFd")}}),f=e((o,n,i)=>a.suspend(()=>{let P=ae.drain;return V.isNotNull(n.stdin)&&(P=bt.fromWritable({evaluate:e(()=>n.stdin,"evaluate"),onError:e(D=>ce("fromWritable(stdin)",ye(D),o),"onError"),endOnDone:i.endOnDone,encoding:i.encoding})),F.isStream(i.stream)?a.as(a.forkScoped(F.run(i.stream,P)),P):a.succeed(P)}),"setupStdin"),s=e((o,n,i,P)=>{let D=n.stdout?lt.fromReadable({evaluate:e(()=>n.stdout,"evaluate"),onError:e(c=>ce("fromReadable(stdout)",ye(c),o),"onError")}):F.empty,m=n.stderr?lt.fromReadable({evaluate:e(()=>n.stderr,"evaluate"),onError:e(c=>ce("fromReadable(stderr)",ye(c),o),"onError")}):F.empty;return ae.isSink(i.stream)&&(D=F.transduce(D,i.stream)),ae.isSink(P.stream)&&(m=F.transduce(m,P.stream)),{stdout:D,stderr:m,all:F.merge(D,m)}},"setupOutput"),y=e((o,n)=>a.callback(i=>{let P=Y.makeUnsafe(),D=Sr(o.command,o.args,n),m=!1,c;return D.on("error",d=>{i(a.fail(ce("spawn",d,o)))}),D.on("exit",(...d)=>{c=d}),D.on("close",(...d)=>{m||(m=!0,Y.doneUnsafe(P,vt.succeed(c??d)))}),D.on("spawn",()=>{i(a.succeed([D,P]))}),a.sync(()=>{D.kill("SIGTERM")})}),"spawn"),S=e((o,n,i)=>globalThis.process.platform==="win32"?a.callback(P=>{jt.exec(`taskkill /pid ${n.pid} /T /F`,{windowsHide:!0},D=>{if(D)return P(a.fail(ce("kill",ye(D),o)));P(a.void)})}):a.try({try:e(()=>{globalThis.process.kill(-n.pid,i)},"try"),catch:e(P=>ce("kill",ye(P),o),"catch")}),"killGroup"),z=e((o,n,i)=>a.suspend(()=>n.kill(i)?a.void:a.fail(ce("kill",new Error("Failed to kill child process"),o))),"killOne"),Pe=e((o,n,i)=>P=>{let D=i?.killSignal??"SIGTERM";return V.isUndefined(i?.forceKillAfter)?P(n,o,D):a.timeoutOrElse(P(n,o,D),{duration:i.forceKillAfter,orElse:e(()=>P(n,o,"SIGKILL"),"orElse")})},"timeout"),ie=e((o,n)=>{let i=n??"stdout";switch(i){case"stdout":return o.stdout;case"stderr":return o.stderr;case"all":return o.all;default:{let P=de.parseFdName(i);return V.isNotUndefined(P)?o.getOutputFd(P):o.stdout}}},"source"),pe=a.fnUntraced(function*(o){switch(o._tag){case"StandardCommand":{let n=T(o.options),i=J(o.options,"stdout"),P=J(o.options,"stderr"),D=B(o.options),m=yield*l(o.options),[c,d]=yield*a.acquireRelease(y(o,{cwd:m,env:u(o.options),stdio:K(n,i,P,D),detached:o.options.detached??process.platform!=="win32",shell:o.options.shell,windowsHide:process.platform==="win32"}),a.fnUntraced(function*([I,k]){let W=yield*Y.isDone(k),q=Pe(I,o,o.options);if(W){let[Ee]=yield*Y.await(k);return process.platform==="win32"?yield*a.void:Ee!==0&&V.isNotNull(Ee)?yield*a.ignore(q(S)):yield*a.void}let le=e(Ee=>a.catch(S(o,I,Ee),()=>z(o,I,Ee)),"send"),xe=o.options.killSignal??"SIGTERM",Ie=le(xe).pipe(a.andThen(Y.await(k)),a.asVoid),Ae=o.options.forceKillAfter?a.timeoutOrElse(Ie,{duration:o.options.forceKillAfter,orElse:e(()=>le("SIGKILL").pipe(a.andThen(Y.await(k)),a.asVoid),"orElse")}):Ie;return yield*a.ignore(Ae)})),h=yield*N(o,c,D),v=s(o,c,i,P);return Pr({pid:Or(c.pid),stdin:yield*f(o,c,n),stdout:v.stdout,stderr:v.stderr,all:v.all,getInputFd:h.getInputFd,getOutputFd:h.getOutputFd,isRunning:a.map(Y.isDone(d),I=>!I),exitCode:a.flatMap(Y.await(d),([I,k])=>V.isNotNull(I)?a.succeed(mr(I)):a.fail(ce("exitCode",new Error(`Process interrupted due to receipt of signal: '${k}'`),o))),kill:e(I=>{let k=I?.killSignal??"SIGTERM",W=e(le=>a.catch(S(o,c,le),()=>z(o,c,le)),"send"),q=W(k).pipe(a.andThen(Y.await(d)),a.asVoid);return I?.forceKillAfter?a.timeoutOrElse(q,{duration:I.forceKillAfter,orElse:e(()=>W("SIGKILL").pipe(a.andThen(Y.await(d)),a.asVoid),"orElse")}):q},"kill")})}case"PipedCommand":{let n=Ut(o),[i,...P]=n.commands,D=pe(i);for(let m=0;m<P.length;m++){let c=P[m],d=n.opts[m]??{},h=T(c.options),v=F.unwrap(a.map(D,W=>ie(W,d.from))),I=d.to??"stdin";if(I==="stdin"){D=pe(de.make(c.command,c.args,{...c.options,stdin:{...h,stream:v}}));continue}let k=de.parseFdName(I);if(V.isUndefined(k)){D=pe(de.make(c.command,c.args,{...c.options,stdin:{...h,stream:v}}));continue}D=pe(de.make(c.command,c.args,{...c.options,additionalFds:{...c.options.additionalFds,[de.fdName(k)]:{type:"input",stream:v}}}))}return yield*D}}});return yr(pe)}),Cr=Re.effect(Mt,gr),Et=Cr.pipe(Re.provide(ur.layer),Re.provide(wt.layer)),On=He(async()=>{let{makeRuntime:t}=await import("./run-service-MT3LOWLS.js");return t(Mt,Et)});var ut;(o=>{let t=te.create({service:"project"});o.Info=X.object({id:oe.zod,worktree:X.string(),vcs:X.literal("git").optional(),name:X.string().optional(),icon:X.object({url:X.string().optional(),override:X.string().optional(),color:X.string().optional()}).optional(),commands:X.object({start:X.string().optional().describe("Startup script to run when creating a new workspace (worktree)")}).optional(),time:X.object({created:X.number(),updated:X.number(),initialized:X.number().optional()}),sandboxes:X.array(X.string())}).meta({ref:"Project"}),o.Event={Updated:at.define("project.updated",o.Info)};function u(n){let i=n.icon_url||n.icon_color?{url:n.icon_url??void 0,color:n.icon_color??void 0}:void 0;return{id:n.id,worktree:n.worktree,vcs:n.vcs?o.Info.shape.vcs.parse(n.vcs):void 0,name:n.name??void 0,icon:i,time:{created:n.time_created,updated:n.time_updated,initialized:n.time_initialized??void 0},sandboxes:n.sandboxes,commands:n.commands??void 0}}o.fromRow=u,e(u,"fromRow"),o.UpdateInput=X.object({projectID:oe.zod,name:X.string().optional(),icon:o.Info.shape.icon.optional(),commands:o.Info.shape.commands.optional()});class g extends Ir.Service()("@opencode/Project"){static{e(this,"Service")}}o.Service=g,o.layer=Ye.effect(g,x.gen(function*(){let n=yield*he.Service,i=yield*hr.Path,P=yield*Tr.ChildProcessSpawner,D=x.fnUntraced(function*(E,O){let L=yield*P.spawn(Ar.make("git",E,{cwd:O?.cwd,extendEnv:!0,stdin:"ignore"})),[U,C]=yield*x.all([qe.mkString(qe.decodeText(L.stdout)),qe.mkString(qe.decodeText(L.stderr))],{concurrency:2});return{code:yield*L.exitCode,text:U,stderr:C}},x.scoped,x.catch(()=>x.succeed({code:1,text:"",stderr:""}))),m=e(E=>x.sync(()=>_e.use(E)),"db"),c=e(E=>x.sync(()=>$e.emit("event",{payload:{type:o.Event.Updated.type,properties:E}})),"emitUpdated"),d=o.Info.shape.vcs.parse(H.OPENCODE_FAKE_VCS),h=e((E,O)=>!O||(O=O.replace(/[\r\n]+$/,""),!O)?E:(O=he.windowsPath(O),i.isAbsolute(O)?i.normalize(O):i.resolve(E,O)),"resolveGitPath"),v=yield*xr.Scope,I=x.fnUntraced(function*(E){return yield*n.readFileString(i.join(E,"opencode")).pipe(x.map(O=>O.trim()),x.map(oe.make),x.catch(()=>x.succeed(void 0)))}),k=x.fn("Project.fromDirectory")(function*(E){t.info("fromDirectory",{directory:E});let O=yield*x.gen(function*(){let se=(yield*n.up({targets:[".git"],start:E}).pipe(x.orDie))[0];if(!se)return{id:oe.global,worktree:"/",sandbox:"/",vcs:d};let G=i.dirname(se),Ue=yield*x.sync(()=>dt("git")),ee=yield*I(se);if(!Ue)return{id:ee??oe.global,worktree:G,sandbox:G,vcs:d};let Ze=yield*D(["rev-parse","--git-common-dir"],{cwd:G});if(Ze.code!==0)return{id:ee??oe.global,worktree:G,sandbox:G,vcs:d};let Be=(()=>{let Fe=h(G,Ze.text.trim());return Fe===G?G:i.dirname(Fe)})();if(ee==null&&(ee=yield*I(i.join(Be,".git"))),!ee){let et=(yield*D(["rev-list","--max-parents=0","HEAD"],{cwd:G})).text.split(`
13
+ `).filter(Boolean).map(Ge=>Ge.trim()).toSorted();ee=et[0]?oe.make(et[0]):void 0,ee&&(yield*n.writeFileString(i.join(Be,".git","opencode"),ee).pipe(x.ignore))}if(!ee)return{id:oe.global,worktree:G,sandbox:G,vcs:"git"};let Qe=yield*D(["rev-parse","--show-toplevel"],{cwd:G});return Qe.code!==0?{id:ee,worktree:G,sandbox:G,vcs:d}:(G=h(G,Qe.text.trim()),{id:ee,sandbox:G,worktree:Be,vcs:"git"})}),L=yield*m(j=>j.select().from(w).where((0,A.eq)(w.id,O.id)).get()),U=L?u(L):{id:O.id,worktree:O.worktree,vcs:O.vcs,sandboxes:[],time:{created:Date.now(),updated:Date.now()}};H.OPENCODE_EXPERIMENTAL_ICON_DISCOVERY&&(yield*W(U).pipe(x.ignore,x.forkIn(v)));let C={...U,worktree:O.worktree,vcs:O.vcs,time:{...U.time,updated:Date.now()}};return O.sandbox!==C.worktree&&!C.sandboxes.includes(O.sandbox)&&C.sandboxes.push(O.sandbox),C.sandboxes=yield*x.forEach(C.sandboxes,j=>n.exists(j).pipe(x.orDie,x.map(se=>se?j:void 0)),{concurrency:"unbounded"}).pipe(x.map(j=>j.filter(se=>se!==void 0))),yield*m(j=>j.insert(w).values({id:C.id,worktree:C.worktree,vcs:C.vcs??null,name:C.name,icon_url:C.icon?.url,icon_color:C.icon?.color,time_created:C.time.created,time_updated:C.time.updated,time_initialized:C.time.initialized,sandboxes:C.sandboxes,commands:C.commands}).onConflictDoUpdate({target:w.id,set:{worktree:C.worktree,vcs:C.vcs??null,name:C.name,icon_url:C.icon?.url,icon_color:C.icon?.color,time_updated:C.time.updated,time_initialized:C.time.initialized,sandboxes:C.sandboxes,commands:C.commands}}).run()),O.id!==oe.global&&(yield*m(j=>j.update(Ne).set({project_id:O.id}).where((0,A.and)((0,A.eq)(Ne.project_id,oe.global),(0,A.eq)(Ne.directory,O.worktree))).run())),yield*c(C),{project:C,sandbox:O.sandbox}}),W=x.fn("Project.discover")(function*(E){if(E.vcs!=="git"||E.icon?.override||E.icon?.url)return;let L=(yield*n.glob("**/favicon.{ico,png,svg,jpg,jpeg,webp}",{cwd:E.worktree,absolute:!0,include:"file"}).pipe(x.orDie)).sort((G,Ue)=>G.length-Ue.length)[0];if(!L)return;let U=yield*n.readFile(L).pipe(x.orDie),C=Buffer.from(U).toString("base64"),se=`data:${he.mimeType(L)};base64,${C}`;yield*xe({projectID:E.id,icon:{url:se}})}),q=x.fn("Project.list")(function*(){return yield*m(E=>E.select().from(w).all().map(u))}),le=x.fn("Project.get")(function*(E){let O=yield*m(L=>L.select().from(w).where((0,A.eq)(w.id,E)).get());return O?u(O):void 0}),xe=x.fn("Project.update")(function*(E){let O=yield*m(U=>U.update(w).set({name:E.name,icon_url:E.icon?.url,icon_color:E.icon?.color,commands:E.commands,time_updated:Date.now()}).where((0,A.eq)(w.id,E.projectID)).returning().get());if(!O)throw new Error(`Project not found: ${E.projectID}`);let L=u(O);return yield*c(L),L}),Ie=x.fn("Project.initGit")(function*(E){if(E.project.vcs==="git")return E.project;if(!(yield*x.sync(()=>dt("git"))))throw new Error("Git is not installed");let O=yield*D(["init","--quiet"],{cwd:E.directory});if(O.code!==0)throw new Error(O.stderr.trim()||O.text.trim()||"Failed to initialize git repository");let{project:L}=yield*k(E.directory);return L}),Ae=x.fn("Project.setInitialized")(function*(E){yield*m(O=>O.update(w).set({time_initialized:Date.now()}).where((0,A.eq)(w.id,E)).run())}),Ee=x.fn("Project.sandboxes")(function*(E){let O=yield*m(U=>U.select().from(w).where((0,A.eq)(w.id,E)).get());if(!O)return[];let L=u(O);return yield*x.forEach(L.sandboxes,U=>n.isDir(U).pipe(x.orDie,x.map(C=>C?U:void 0)),{concurrency:"unbounded"}).pipe(x.map(U=>U.filter(C=>C!==void 0)))}),mt=x.fn("Project.addSandbox")(function*(E,O){let L=yield*m(j=>j.select().from(w).where((0,A.eq)(w.id,E)).get());if(!L)throw new Error(`Project not found: ${E}`);let U=[...L.sandboxes];U.includes(O)||U.push(O);let C=yield*m(j=>j.update(w).set({sandboxes:U,time_updated:Date.now()}).where((0,A.eq)(w.id,E)).returning().get());if(!C)throw new Error(`Project not found: ${E}`);yield*c(u(C))}),yt=x.fn("Project.removeSandbox")(function*(E,O){let L=yield*m(j=>j.select().from(w).where((0,A.eq)(w.id,E)).get());if(!L)throw new Error(`Project not found: ${E}`);let U=L.sandboxes.filter(j=>j!==O),C=yield*m(j=>j.update(w).set({sandboxes:U,time_updated:Date.now()}).where((0,A.eq)(w.id,E)).returning().get());if(!C)throw new Error(`Project not found: ${E}`);yield*c(u(C))});return g.of({fromDirectory:k,discover:W,list:q,get:le,update:xe,initGit:Ie,setInitialized:Ae,sandboxes:Ee,addSandbox:mt,removeSandbox:yt})})),o.defaultLayer=o.layer.pipe(Ye.provide(Et),Ye.provide(he.defaultLayer),Ye.provide(br.layer));let{runPromise:B}=Bt(g,o.defaultLayer);function K(n){return B(i=>i.fromDirectory(n))}o.fromDirectory=K,e(K,"fromDirectory");function N(n){return B(i=>i.discover(n))}o.discover=N,e(N,"discover");function f(){return _e.use(n=>n.select().from(w).all().map(i=>u(i)))}o.list=f,e(f,"list");function s(n){let i=_e.use(P=>P.select().from(w).where((0,A.eq)(w.id,n)).get());if(i)return u(i)}o.get=s,e(s,"get");function y(n){_e.use(i=>i.update(w).set({time_initialized:Date.now()}).where((0,A.eq)(w.id,n)).run())}o.setInitialized=y,e(y,"setInitialized");function S(n){return B(i=>i.initGit(n))}o.initGit=S,e(S,"initGit");function z(n){return B(i=>i.update(n))}o.update=z,e(z,"update");function Pe(n){return B(i=>i.sandboxes(n))}o.sandboxes=Pe,e(Pe,"sandboxes");function ie(n,i){return B(P=>P.addSandbox(n,i))}o.addSandbox=ie,e(ie,"addSandbox");function pe(n,i){return B(P=>P.removeSandbox(n,i))}o.removeSandbox=pe,e(pe,"removeSandbox")})(ut||={});var ke;(_=>{let t=te.create({service:"state"}),r=new Map;function l(g,T,J){return()=>{let B=g(),K=r.get(B);K||(K=new Map,r.set(B,K));let N=K.get(T);if(N)return N.state;let f=T();return K.set(T,{state:f,dispose:J}),f}}_.create=l,e(l,"create");async function u(g){let T=r.get(g);if(!T)return;t.info("waiting for state disposal to complete",{key:g});let J=!1;setTimeout(()=>{J||t.warn("state disposal is taking an unusually long time - if it does not complete in a reasonable time, please report this as a bug",{key:g})},1e4).unref();let B=[];for(let[K,N]of T){if(!N.dispose)continue;let f=typeof K=="function"?K.name:String(K),s=Promise.resolve(N.state).then(y=>N.dispose(y)).catch(y=>{t.error("Error while disposing state:",{error:y,key:g,init:f})});B.push(s)}await Promise.all(B),T.clear(),r.delete(g),J=!0,t.info("state disposal completed",{key:g})}_.dispose=u,e(u,"dispose")})(ke||={});var fe=re.create("instance"),ne=new Map,Me={all:void 0};function Ft(t){$e.emit("event",{directory:t,payload:{type:"server.instance.disposed",properties:{directory:t}}})}e(Ft,"emit");function Gt(t){return be(async()=>{let r=t.project&&t.worktree?{directory:t.directory,worktree:t.worktree,project:t.project}:await ut.fromDirectory(t.directory).then(({project:l,sandbox:u})=>({directory:t.directory,worktree:u,project:l}));return await fe.provide(r,async()=>{await t.init?.()}),r})}e(Gt,"boot");function $t(t,r){let l=r.catch(u=>{throw ne.get(t)===l&&ne.delete(t),u});return ne.set(t,l),l}e($t,"track");var Q={async provide(t){let r=Te.resolve(t.directory),l=ne.get(r);l||(te.Default.info("creating instance",{directory:r}),l=$t(r,Gt({directory:r,init:t.init})));let u=await l;return fe.provide(u,async()=>t.fn())},get current(){return fe.use()},get directory(){return fe.use().directory},get worktree(){return fe.use().worktree},get project(){return fe.use().project},containsPath(t){return Te.contains(Q.directory,t)?!0:Q.worktree==="/"?!1:Te.contains(Q.worktree,t)},bind(t){let r=fe.use();return((...l)=>fe.provide(r,()=>t(...l)))},restore(t,r){return fe.provide(t,r)},state(t,r){return ke.create(()=>Q.directory,t,r)},async reload(t){let r=Te.resolve(t.directory);te.Default.info("reloading instance",{directory:r}),await Promise.all([ke.dispose(r),nt(r)]),ne.delete(r);let l=$t(r,Gt({...t,directory:r}));return Ft(r),await l},async dispose(){let t=Q.directory;te.Default.info("disposing instance",{directory:t}),await Promise.all([ke.dispose(t),nt(t)]),ne.delete(t),Ft(t)},async disposeAll(){return Me.all||(Me.all=be(async()=>{te.Default.info("disposing all instances");let t=[...ne.entries()];for(let[r,l]of t){if(ne.get(r)!==l)continue;let u=await l.catch(_=>{te.Default.warn("instance dispose failed",{key:r,error:_})});if(!u){ne.get(r)===l&&ne.delete(r);continue}ne.get(r)===l&&await fe.provide(u,async()=>{await Q.dispose()})}}).finally(()=>{Me.all=void 0})),Me.all}};var Rr=vr.makeMemoMapUnsafe();function je(t){try{let r=Q.current;return wr.provideService(t,we,r)}catch(r){if(!(r instanceof re.NotFound))throw r}return t}e(je,"attach");function Bt(t,r){let l,u=e(()=>l??=Lr.make(r,{memoMap:Rr}),"getRuntime");return{runSync:e(_=>u().runSync(je(t.use(_))),"runSync"),runPromiseExit:e((_,g)=>u().runPromiseExit(je(t.use(_)),g),"runPromiseExit"),runPromise:e((_,g)=>u().runPromise(je(t.use(_)),g),"runPromise"),runFork:e(_=>u().runFork(je(t.use(_))),"runFork"),runCallback:e(_=>u().runCallback(je(t.use(_))),"runCallback")}}e(Bt,"makeRuntime");export{$e as a,be as b,He as c,Xe as d,H as e,Qr as f,it as g,Ke as h,rr as i,_e as j,A as k,ue as l,w as m,Ne as n,sr as o,Go as p,$o as q,Ho as r,at as s,dt as t,oe as u,he as v,Et as w,ut as x,Q as y,Rr as z,Bt as A};
@@ -9,4 +9,4 @@ if (typeof globalThis.Bun === 'undefined') {
9
9
  if (typeof globalThis.__name === 'undefined') { globalThis.__name = (t, n) => { Object.defineProperty(t, 'name', { value: n, configurable: true }); return t; }; }
10
10
  if (typeof globalThis.__export === 'undefined') { globalThis.__export = (t, a) => { for (const k in a) Object.defineProperty(t, k, { get: a[k], enumerable: true }); }; }
11
11
 
12
- import{I as a}from"./chunk-XJGIPERR.js";import"./chunk-26PYOYAY.js";import"./chunk-7KKA6WBY.js";import"./chunk-LTCXIXYM.js";import"./chunk-M4CB72HE.js";import"./chunk-MBZTOEAD.js";export{a as ToolRegistry};
12
+ import{I as a}from"./chunk-G752V4OP.js";import"./chunk-IR6PDN4W.js";import"./chunk-7KKA6WBY.js";import"./chunk-LTCXIXYM.js";import"./chunk-M4CB72HE.js";import"./chunk-MBZTOEAD.js";export{a as ToolRegistry};
@@ -9,7 +9,7 @@ if (typeof globalThis.Bun === 'undefined') {
9
9
  if (typeof globalThis.__name === 'undefined') { globalThis.__name = (t, n) => { Object.defineProperty(t, 'name', { value: n, configurable: true }); return t; }; }
10
10
  if (typeof globalThis.__export === 'undefined') { globalThis.__export = (t, a) => { for (const k in a) Object.defineProperty(t, k, { get: a[k], enumerable: true }); }; }
11
11
 
12
- import{a as He}from"./chunk-NLFNI3VW.js";import{b as Xe}from"./chunk-YDTJPTBK.js";import"./chunk-2ANK3QEN.js";import"./chunk-PWFRMDDF.js";import"./chunk-GXWCFXGG.js";import{t as Ge,x as Be}from"./chunk-XJGIPERR.js";import{d as Fe,e as We,y as V}from"./chunk-26PYOYAY.js";import"./chunk-7KKA6WBY.js";import"./chunk-LTCXIXYM.js";import{c as H}from"./chunk-M4CB72HE.js";import"./chunk-CZVKIDQZ.js";import{a as s,b as lr}from"./chunk-MBZTOEAD.js";import B from"path";import{pathToFileURL as Sr}from"url";import ur from"zod";import{EOL as J}from"os";var Q={left:[" ","\u2588\u2580\u2580\u2588 \u2588\u2580\u2580\u2588 \u2588\u2580\u2580\u2588 \u2588\u2580\u2580\u2584","\u2588__\u2588 \u2588__\u2588 \u2588^^^ \u2588__\u2588","\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580 \u2580\u2580\u2580\u2580 \u2580~~\u2580"],right:[" \u2584 ","\u2588\u2580\u2580\u2580 \u2588\u2580\u2580\u2588 \u2588\u2580\u2580\u2588 \u2588\u2580\u2580\u2588","\u2588___ \u2588__\u2588 \u2588__\u2588 \u2588^^^","\u2580\u2580\u2580\u2580 \u2580\u2580\u2580\u2580 \u2580\u2580\u2580\u2580 \u2580\u2580\u2580\u2580"]};var f;(c=>{let n=["\u2800 \u2584 ","\u2588\u2580\u2580\u2588 \u2588\u2580\u2580\u2588 \u2588\u2580\u2580\u2588 \u2588\u2580\u2580\u2584 \u2588\u2580\u2580\u2580 \u2588\u2580\u2580\u2588 \u2588\u2580\u2580\u2588 \u2588\u2580\u2580\u2588","\u2588 \u2588 \u2588 \u2588 \u2588\u2580\u2580\u2580 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2580\u2580\u2580","\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580 \u2580\u2580\u2580\u2580 \u2580 \u2580 \u2580\u2580\u2580\u2580 \u2580\u2580\u2580\u2580 \u2580\u2580\u2580\u2580 \u2580\u2580\u2580\u2580"];c.CancelledError=Fe.create("UICancelledError",ur.void()),c.Style={TEXT_HIGHLIGHT:"\x1B[96m",TEXT_HIGHLIGHT_BOLD:"\x1B[96m\x1B[1m",TEXT_DIM:"\x1B[90m",TEXT_DIM_BOLD:"\x1B[90m\x1B[1m",TEXT_NORMAL:"\x1B[0m",TEXT_NORMAL_BOLD:"\x1B[1m",TEXT_WARNING:"\x1B[93m",TEXT_WARNING_BOLD:"\x1B[93m\x1B[1m",TEXT_DANGER:"\x1B[91m",TEXT_DANGER_BOLD:"\x1B[91m\x1B[1m",TEXT_SUCCESS:"\x1B[92m",TEXT_SUCCESS_BOLD:"\x1B[92m\x1B[1m",TEXT_INFO:"\x1B[94m",TEXT_INFO_BOLD:"\x1B[94m\x1B[1m"};function t(...h){a(...h),process.stderr.write(J)}c.println=t,s(t,"println");function a(...h){u=!1,process.stderr.write(h.join(" "))}c.print=a,s(a,"print");let u=!1;function d(){u||(t(""+c.Style.TEXT_NORMAL),u=!0)}c.empty=d,s(d,"empty");function l(h){if(!process.stdout.isTTY&&!process.stderr.isTTY){let p=[];for(let T of n)h&&p.push(h),p.push(T),p.push(J);return p.join("").trimEnd()}let w=[],v="\x1B[0m",b={fg:"\x1B[90m",shadow:"\x1B[38;5;235m",bg:"\x1B[48;5;235m"},O={fg:v,shadow:"\x1B[38;5;238m",bg:"\x1B[48;5;238m"},g=" ",E=s((p,T,R,S)=>{let x=[];for(let D of p){if(D==="_"){x.push(S," ",v);continue}if(D==="^"){x.push(T,S,"\u2580",v);continue}if(D==="~"){x.push(R,"\u2580",v);continue}if(D===" "){x.push(" ");continue}x.push(T,D,v)}return x.join("")},"draw");return Q.left.forEach((p,T)=>{h&&w.push(h),w.push(E(p,b.fg,b.shadow,b.bg)),w.push(g);let R=Q.right[T]??"";w.push(E(R,O.fg,O.shadow,O.bg)),w.push(J)}),w.join("").trimEnd()}c.logo=l,s(l,"logo");async function m(h){let v=lr("readline").createInterface({input:process.stdin,output:process.stdout});return new Promise(b=>{v.question(h,O=>{v.close(),b(O.trim())})})}c.input=m,s(m,"input");function y(h){h.startsWith("Error: ")&&(h=h.slice(7)),t(c.Style.TEXT_DANGER_BOLD+"Error: "+c.Style.TEXT_NORMAL+h)}c.error=y,s(y,"error");function o(h){return h}c.markdown=o,s(o,"markdown")})(f||={});async function Ve(n,r){return V.provide({directory:n,init:Xe,fn:s(async()=>{try{return await r()}finally{await V.dispose()}},"fn")})}s(Ve,"bootstrap");import{EOL as G}from"os";var Qe=s(({onRequest:n,onSseError:r,onSseEvent:e,responseTransformer:t,responseValidator:a,sseDefaultRetryDelay:u,sseMaxRetryAttempts:d,sseMaxRetryDelay:l,sseSleepFn:m,url:y,...o})=>{let c,h=m??(b=>new Promise(O=>setTimeout(O,b)));return{stream:s(async function*(){let b=u??3e3,O=0,g=o.signal??new AbortController().signal;for(;!g.aborted;){O++;let E=o.headers instanceof Headers?o.headers:new Headers(o.headers);c!==void 0&&E.set("Last-Event-ID",c);try{let p={redirect:"follow",...o,body:o.serializedBody,headers:E,signal:g},T=new Request(y,p);n&&(T=await n(y,p));let S=await(o.fetch??globalThis.fetch)(T);if(!S.ok)throw new Error(`SSE failed: ${S.status} ${S.statusText}`);if(!S.body)throw new Error("No body in SSE response");let x=S.body.pipeThrough(new TextDecoderStream).getReader(),D="",Me=s(()=>{try{x.cancel()}catch{}},"abortHandler");g.addEventListener("abort",Me);try{for(;;){let{done:ir,value:ar}=await x.read();if(ir)break;D+=ar,D=D.replace(/\r\n/g,`
12
+ import{a as He}from"./chunk-GBXMNWYD.js";import{b as Xe}from"./chunk-5P5WLADX.js";import"./chunk-2ANK3QEN.js";import"./chunk-PWFRMDDF.js";import"./chunk-A7EXZZPC.js";import{t as Ge,x as Be}from"./chunk-G752V4OP.js";import{d as Fe,e as We,y as V}from"./chunk-IR6PDN4W.js";import"./chunk-7KKA6WBY.js";import"./chunk-LTCXIXYM.js";import{c as H}from"./chunk-M4CB72HE.js";import"./chunk-CZVKIDQZ.js";import{a as s,b as lr}from"./chunk-MBZTOEAD.js";import B from"path";import{pathToFileURL as Sr}from"url";import ur from"zod";import{EOL as J}from"os";var Q={left:[" ","\u2588\u2580\u2580\u2588 \u2588\u2580\u2580\u2588 \u2588\u2580\u2580\u2588 \u2588\u2580\u2580\u2584","\u2588__\u2588 \u2588__\u2588 \u2588^^^ \u2588__\u2588","\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580 \u2580\u2580\u2580\u2580 \u2580~~\u2580"],right:[" \u2584 ","\u2588\u2580\u2580\u2580 \u2588\u2580\u2580\u2588 \u2588\u2580\u2580\u2588 \u2588\u2580\u2580\u2588","\u2588___ \u2588__\u2588 \u2588__\u2588 \u2588^^^","\u2580\u2580\u2580\u2580 \u2580\u2580\u2580\u2580 \u2580\u2580\u2580\u2580 \u2580\u2580\u2580\u2580"]};var f;(c=>{let n=["\u2800 \u2584 ","\u2588\u2580\u2580\u2588 \u2588\u2580\u2580\u2588 \u2588\u2580\u2580\u2588 \u2588\u2580\u2580\u2584 \u2588\u2580\u2580\u2580 \u2588\u2580\u2580\u2588 \u2588\u2580\u2580\u2588 \u2588\u2580\u2580\u2588","\u2588 \u2588 \u2588 \u2588 \u2588\u2580\u2580\u2580 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2580\u2580\u2580","\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580 \u2580\u2580\u2580\u2580 \u2580 \u2580 \u2580\u2580\u2580\u2580 \u2580\u2580\u2580\u2580 \u2580\u2580\u2580\u2580 \u2580\u2580\u2580\u2580"];c.CancelledError=Fe.create("UICancelledError",ur.void()),c.Style={TEXT_HIGHLIGHT:"\x1B[96m",TEXT_HIGHLIGHT_BOLD:"\x1B[96m\x1B[1m",TEXT_DIM:"\x1B[90m",TEXT_DIM_BOLD:"\x1B[90m\x1B[1m",TEXT_NORMAL:"\x1B[0m",TEXT_NORMAL_BOLD:"\x1B[1m",TEXT_WARNING:"\x1B[93m",TEXT_WARNING_BOLD:"\x1B[93m\x1B[1m",TEXT_DANGER:"\x1B[91m",TEXT_DANGER_BOLD:"\x1B[91m\x1B[1m",TEXT_SUCCESS:"\x1B[92m",TEXT_SUCCESS_BOLD:"\x1B[92m\x1B[1m",TEXT_INFO:"\x1B[94m",TEXT_INFO_BOLD:"\x1B[94m\x1B[1m"};function t(...h){a(...h),process.stderr.write(J)}c.println=t,s(t,"println");function a(...h){u=!1,process.stderr.write(h.join(" "))}c.print=a,s(a,"print");let u=!1;function d(){u||(t(""+c.Style.TEXT_NORMAL),u=!0)}c.empty=d,s(d,"empty");function l(h){if(!process.stdout.isTTY&&!process.stderr.isTTY){let p=[];for(let T of n)h&&p.push(h),p.push(T),p.push(J);return p.join("").trimEnd()}let w=[],v="\x1B[0m",b={fg:"\x1B[90m",shadow:"\x1B[38;5;235m",bg:"\x1B[48;5;235m"},O={fg:v,shadow:"\x1B[38;5;238m",bg:"\x1B[48;5;238m"},g=" ",E=s((p,T,R,S)=>{let x=[];for(let D of p){if(D==="_"){x.push(S," ",v);continue}if(D==="^"){x.push(T,S,"\u2580",v);continue}if(D==="~"){x.push(R,"\u2580",v);continue}if(D===" "){x.push(" ");continue}x.push(T,D,v)}return x.join("")},"draw");return Q.left.forEach((p,T)=>{h&&w.push(h),w.push(E(p,b.fg,b.shadow,b.bg)),w.push(g);let R=Q.right[T]??"";w.push(E(R,O.fg,O.shadow,O.bg)),w.push(J)}),w.join("").trimEnd()}c.logo=l,s(l,"logo");async function m(h){let v=lr("readline").createInterface({input:process.stdin,output:process.stdout});return new Promise(b=>{v.question(h,O=>{v.close(),b(O.trim())})})}c.input=m,s(m,"input");function y(h){h.startsWith("Error: ")&&(h=h.slice(7)),t(c.Style.TEXT_DANGER_BOLD+"Error: "+c.Style.TEXT_NORMAL+h)}c.error=y,s(y,"error");function o(h){return h}c.markdown=o,s(o,"markdown")})(f||={});async function Ve(n,r){return V.provide({directory:n,init:Xe,fn:s(async()=>{try{return await r()}finally{await V.dispose()}},"fn")})}s(Ve,"bootstrap");import{EOL as G}from"os";var Qe=s(({onRequest:n,onSseError:r,onSseEvent:e,responseTransformer:t,responseValidator:a,sseDefaultRetryDelay:u,sseMaxRetryAttempts:d,sseMaxRetryDelay:l,sseSleepFn:m,url:y,...o})=>{let c,h=m??(b=>new Promise(O=>setTimeout(O,b)));return{stream:s(async function*(){let b=u??3e3,O=0,g=o.signal??new AbortController().signal;for(;!g.aborted;){O++;let E=o.headers instanceof Headers?o.headers:new Headers(o.headers);c!==void 0&&E.set("Last-Event-ID",c);try{let p={redirect:"follow",...o,body:o.serializedBody,headers:E,signal:g},T=new Request(y,p);n&&(T=await n(y,p));let S=await(o.fetch??globalThis.fetch)(T);if(!S.ok)throw new Error(`SSE failed: ${S.status} ${S.statusText}`);if(!S.body)throw new Error("No body in SSE response");let x=S.body.pipeThrough(new TextDecoderStream).getReader(),D="",Me=s(()=>{try{x.cancel()}catch{}},"abortHandler");g.addEventListener("abort",Me);try{for(;;){let{done:ir,value:ar}=await x.read();if(ir)break;D+=ar,D=D.replace(/\r\n/g,`
13
13
  `).replace(/\r/g,`
14
14
  `);let $e=D.split(`
15
15
 
@@ -9,4 +9,4 @@ if (typeof globalThis.Bun === 'undefined') {
9
9
  if (typeof globalThis.__name === 'undefined') { globalThis.__name = (t, n) => { Object.defineProperty(t, 'name', { value: n, configurable: true }); return t; }; }
10
10
  if (typeof globalThis.__export === 'undefined') { globalThis.__export = (t, a) => { for (const k in a) Object.defineProperty(t, k, { get: a[k], enumerable: true }); }; }
11
11
 
12
- import{A as b,z as a}from"./chunk-26PYOYAY.js";import"./chunk-LTCXIXYM.js";import"./chunk-M4CB72HE.js";import"./chunk-MBZTOEAD.js";export{b as makeRuntime,a as memoMap};
12
+ import{A as b,z as a}from"./chunk-IR6PDN4W.js";import"./chunk-LTCXIXYM.js";import"./chunk-M4CB72HE.js";import"./chunk-MBZTOEAD.js";export{b as makeRuntime,a as memoMap};
package/dist/run.js CHANGED
@@ -9,4 +9,4 @@ if (typeof globalThis.Bun === 'undefined') {
9
9
  if (typeof globalThis.__name === 'undefined') { globalThis.__name = (t, n) => { Object.defineProperty(t, 'name', { value: n, configurable: true }); return t; }; }
10
10
  if (typeof globalThis.__export === 'undefined') { globalThis.__export = (t, a) => { for (const k in a) Object.defineProperty(t, k, { get: a[k], enumerable: true }); }; }
11
11
 
12
- import{homedir as o}from"node:os";import{join as a}from"node:path";var t=a(o(),".alchemy_lab","opencode");process.env.OPENCODE_DATA_DIR=process.env.OPENCODE_DATA_DIR||t;var{RunCommand:r}=await import("./run-XDEC53H6.js"),e=(await import("yargs")).default,{hideBin:i}=await import("yargs/helpers");e(i(process.argv)).command(r).strict().help().parse();
12
+ import{homedir as o}from"node:os";import{join as a}from"node:path";var t=a(o(),".alchemy_lab","opencode");process.env.OPENCODE_DATA_DIR=process.env.OPENCODE_DATA_DIR||t;var{RunCommand:r}=await import("./run-AUCA7EKA.js"),e=(await import("yargs")).default,{hideBin:i}=await import("yargs/helpers");e(i(process.argv)).command(r).strict().help().parse();
package/dist/serve.js CHANGED
@@ -9,4 +9,4 @@ if (typeof globalThis.Bun === 'undefined') {
9
9
  if (typeof globalThis.__name === 'undefined') { globalThis.__name = (t, n) => { Object.defineProperty(t, 'name', { value: n, configurable: true }); return t; }; }
10
10
  if (typeof globalThis.__export === 'undefined') { globalThis.__export = (t, a) => { for (const k in a) Object.defineProperty(t, k, { get: a[k], enumerable: true }); }; }
11
11
 
12
- import{a as s}from"./chunk-MBZTOEAD.js";import{Agent as i,setGlobalDispatcher as c}from"undici";import{homedir as p}from"node:os";import{join as l}from"node:path";c(new i({connect:{keepAlive:!0,keepAliveInitialDelay:5e3},headersTimeout:0,bodyTimeout:0}));function o(e,t){let r=process.argv.indexOf(`--${e}`);return r!==-1&&process.argv[r+1]?process.argv[r+1]:t}s(o,"arg");var m=l(p(),".alchemy_lab","opencode"),d=o("data-dir",m);process.env.OPENCODE_DATA_DIR=d;var{Log:a}=await import("./log-MVJ7H4K5.js"),v=o("log-level","INFO").toUpperCase(),n=a.Level.safeParse(v);a.init({print:!0,level:n.success?n.data:"INFO"});var{Server:g}=await import("./server-IT7ZVNR2.js"),u=parseInt(o("port","4096"),10),h=o("hostname","127.0.0.1");try{let e=await g.listen({port:u,hostname:h});console.log(`opencode server listening on http://${e.hostname}:${e.port}`);let t=s(async()=>{await e.stop(!0),process.exit(0)},"shutdown");process.on("SIGINT",t),process.on("SIGTERM",t),await new Promise(()=>{})}catch(e){console.error("Failed to start server:",e),process.exit(1)}
12
+ import{a as s}from"./chunk-MBZTOEAD.js";import{Agent as i,setGlobalDispatcher as c}from"undici";import{homedir as p}from"node:os";import{join as l}from"node:path";c(new i({connect:{keepAlive:!0,keepAliveInitialDelay:5e3},headersTimeout:0,bodyTimeout:0}));function o(e,t){let r=process.argv.indexOf(`--${e}`);return r!==-1&&process.argv[r+1]?process.argv[r+1]:t}s(o,"arg");var m=l(p(),".alchemy_lab","opencode"),d=o("data-dir",m);process.env.OPENCODE_DATA_DIR=d;var{Log:a}=await import("./log-MVJ7H4K5.js"),v=o("log-level","INFO").toUpperCase(),n=a.Level.safeParse(v);a.init({print:!0,level:n.success?n.data:"INFO"});var{Server:g}=await import("./server-PIYRZLBG.js"),u=parseInt(o("port","4096"),10),h=o("hostname","127.0.0.1");try{let e=await g.listen({port:u,hostname:h});console.log(`opencode server listening on http://${e.hostname}:${e.port}`);let t=s(async()=>{await e.stop(!0),process.exit(0)},"shutdown");process.on("SIGINT",t),process.on("SIGTERM",t),await new Promise(()=>{})}catch(e){console.error("Failed to start server:",e),process.exit(1)}
@@ -9,4 +9,4 @@ if (typeof globalThis.Bun === 'undefined') {
9
9
  if (typeof globalThis.__name === 'undefined') { globalThis.__name = (t, n) => { Object.defineProperty(t, 'name', { value: n, configurable: true }); return t; }; }
10
10
  if (typeof globalThis.__export === 'undefined') { globalThis.__export = (t, a) => { for (const k in a) Object.defineProperty(t, k, { get: a[k], enumerable: true }); }; }
11
11
 
12
- import{a}from"./chunk-NLFNI3VW.js";import"./chunk-YDTJPTBK.js";import"./chunk-2ANK3QEN.js";import"./chunk-PWFRMDDF.js";import"./chunk-GXWCFXGG.js";import"./chunk-XJGIPERR.js";import"./chunk-26PYOYAY.js";import"./chunk-7KKA6WBY.js";import"./chunk-LTCXIXYM.js";import"./chunk-M4CB72HE.js";import"./chunk-CZVKIDQZ.js";import"./chunk-MBZTOEAD.js";export{a as Server};
12
+ import{a}from"./chunk-GBXMNWYD.js";import"./chunk-5P5WLADX.js";import"./chunk-2ANK3QEN.js";import"./chunk-PWFRMDDF.js";import"./chunk-A7EXZZPC.js";import"./chunk-G752V4OP.js";import"./chunk-IR6PDN4W.js";import"./chunk-7KKA6WBY.js";import"./chunk-LTCXIXYM.js";import"./chunk-M4CB72HE.js";import"./chunk-CZVKIDQZ.js";import"./chunk-MBZTOEAD.js";export{a as Server};
@@ -9,4 +9,4 @@ if (typeof globalThis.Bun === 'undefined') {
9
9
  if (typeof globalThis.__name === 'undefined') { globalThis.__name = (t, n) => { Object.defineProperty(t, 'name', { value: n, configurable: true }); return t; }; }
10
10
  if (typeof globalThis.__export === 'undefined') { globalThis.__export = (t, a) => { for (const k in a) Object.defineProperty(t, k, { get: a[k], enumerable: true }); }; }
11
11
 
12
- import{Q as a}from"./chunk-XJGIPERR.js";import"./chunk-26PYOYAY.js";import"./chunk-7KKA6WBY.js";import"./chunk-LTCXIXYM.js";import"./chunk-M4CB72HE.js";import"./chunk-MBZTOEAD.js";export{a as Session};
12
+ import{Q as a}from"./chunk-G752V4OP.js";import"./chunk-IR6PDN4W.js";import"./chunk-7KKA6WBY.js";import"./chunk-LTCXIXYM.js";import"./chunk-M4CB72HE.js";import"./chunk-MBZTOEAD.js";export{a as Session};
@@ -9,4 +9,4 @@ if (typeof globalThis.Bun === 'undefined') {
9
9
  if (typeof globalThis.__name === 'undefined') { globalThis.__name = (t, n) => { Object.defineProperty(t, 'name', { value: n, configurable: true }); return t; }; }
10
10
  if (typeof globalThis.__export === 'undefined') { globalThis.__export = (t, a) => { for (const k in a) Object.defineProperty(t, k, { get: a[k], enumerable: true }); }; }
11
11
 
12
- import{a}from"./chunk-GXWCFXGG.js";import"./chunk-XJGIPERR.js";import"./chunk-26PYOYAY.js";import"./chunk-7KKA6WBY.js";import"./chunk-LTCXIXYM.js";import"./chunk-M4CB72HE.js";import"./chunk-MBZTOEAD.js";export{a as ShareNext};
12
+ import{a}from"./chunk-A7EXZZPC.js";import"./chunk-G752V4OP.js";import"./chunk-IR6PDN4W.js";import"./chunk-7KKA6WBY.js";import"./chunk-LTCXIXYM.js";import"./chunk-M4CB72HE.js";import"./chunk-MBZTOEAD.js";export{a as ShareNext};
@@ -9,4 +9,4 @@ if (typeof globalThis.Bun === 'undefined') {
9
9
  if (typeof globalThis.__name === 'undefined') { globalThis.__name = (t, n) => { Object.defineProperty(t, 'name', { value: n, configurable: true }); return t; }; }
10
10
  if (typeof globalThis.__export === 'undefined') { globalThis.__export = (t, a) => { for (const k in a) Object.defineProperty(t, k, { get: a[k], enumerable: true }); }; }
11
11
 
12
- import{c as n,d as o}from"./chunk-YDTJPTBK.js";import"./chunk-GXWCFXGG.js";import"./chunk-XJGIPERR.js";import"./chunk-26PYOYAY.js";import"./chunk-7KKA6WBY.js";import"./chunk-LTCXIXYM.js";import"./chunk-M4CB72HE.js";import"./chunk-MBZTOEAD.js";var t=o.extend({name:o.shape.name.unwrap(),branch:o.shape.branch.unwrap(),directory:o.shape.directory.unwrap()}),i={async configure(e){let r=await n.makeWorktreeInfo(e.name??void 0);return{...e,name:r.name,branch:r.branch,directory:r.directory}},async create(e){let r=t.parse(e);await n.createFromInfo({name:r.name,directory:r.directory,branch:r.branch})},async remove(e){let r=t.parse(e);await n.remove({directory:r.directory})},target(e){return{type:"local",directory:t.parse(e).directory}}};export{i as WorktreeAdaptor};
12
+ import{c as n,d as o}from"./chunk-5P5WLADX.js";import"./chunk-A7EXZZPC.js";import"./chunk-G752V4OP.js";import"./chunk-IR6PDN4W.js";import"./chunk-7KKA6WBY.js";import"./chunk-LTCXIXYM.js";import"./chunk-M4CB72HE.js";import"./chunk-MBZTOEAD.js";var t=o.extend({name:o.shape.name.unwrap(),branch:o.shape.branch.unwrap(),directory:o.shape.directory.unwrap()}),i={async configure(e){let r=await n.makeWorktreeInfo(e.name??void 0);return{...e,name:r.name,branch:r.branch,directory:r.directory}},async create(e){let r=t.parse(e);await n.createFromInfo({name:r.name,directory:r.directory,branch:r.branch})},async remove(e){let r=t.parse(e);await n.remove({directory:r.directory})},target(e){return{type:"local",directory:t.parse(e).directory}}};export{i as WorktreeAdaptor};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alchemylab-opencode",
3
- "version": "1.0.25",
3
+ "version": "1.0.26",
4
4
  "description": "OpenCode server runtime for AlchemyLab",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1,13 +0,0 @@
1
- // Built by esbuild from opencode-server source
2
- if (typeof globalThis.Bun === 'undefined') {
3
- globalThis.Bun = {
4
- version: '0.0.0-node-compat',
5
- stdin: { async text() { const chunks = []; for await (const c of process.stdin) chunks.push(c); return Buffer.concat(chunks).toString(); } },
6
- which(cmd) { try { return require('child_process').execFileSync('which', [cmd], { encoding: 'utf8' }).trim(); } catch { return null; } },
7
- };
8
- }
9
- if (typeof globalThis.__name === 'undefined') { globalThis.__name = (t, n) => { Object.defineProperty(t, 'name', { value: n, configurable: true }); return t; }; }
10
- if (typeof globalThis.__export === 'undefined') { globalThis.__export = (t, a) => { for (const k in a) Object.defineProperty(t, k, { get: a[k], enumerable: true }); }; }
11
-
12
- import{a as Pt}from"./chunk-LTCXIXYM.js";import{a as tt,c as Te,d as Oe,e as ee}from"./chunk-M4CB72HE.js";import{a as e,c as zt,d as z}from"./chunk-MBZTOEAD.js";import{Effect as br,Layer as wr,ManagedRuntime as vr}from"effect";import{EventEmitter as Ht}from"events";var $e=new Ht;var rt=new Set;function Ot(t){return rt.add(t),()=>{rt.delete(t)}}e(Ot,"registerDisposer");async function ot(t){await Promise.allSettled([...rt].map(r=>r(t)))}e(ot,"disposeInstance");function be(t){return t()}e(be,"iife");import{AsyncLocalStorage as Xt}from"async_hooks";var te;(l=>{class t extends Error{constructor(g){super(`No context found for ${g}`);this.name=g}name;static{e(this,"NotFound")}}l.NotFound=t;function r(u){let _=new Xt;return{use(){let g=_.getStore();if(!g)throw new t(u);return g},provide(g,T){return _.run(g,T)}}}l.create=r,e(r,"create")})(te||={});import K from"zod";var A={};zt(A,{Database:()=>_e,NotFoundError:()=>tr});z(A,bo);import{migrate as Dt}from"drizzle-orm/node-sqlite/migrator";import*as bo from"drizzle-orm";function ze(t){let r,l=!1,u=e(()=>{if(l)return r;try{return r=t(),l=!0,r}catch(_){throw _}},"result");return u.reset=()=>{l=!1,r=void 0},u}e(ze,"lazy");import He from"zod";var Xe=class t extends Error{static{e(this,"NamedError")}static create(r,l){let u=He.object({name:He.literal(r),data:l}).meta({ref:r}),_=class extends t{constructor(T,J){super(r,J);this.data=T;this.name=r}data;static{e(this,"result")}static Schema=u;name=r;static isInstance(T){return typeof T=="object"&&"name"in T&&T.name===r}schema(){return u}toObject(){return{name:r,data:this.data}}};return Object.defineProperty(_,"name",{value:r}),_}static Unknown=t.create("UnknownError",He.object({message:He.string()}))};import gt from"zod";import Ce from"path";import{readFileSync as Zt,readdirSync as Qt,existsSync as er}from"fs";import{Config as ge}from"effect";function b(t){let r=process.env[t]?.toLowerCase();return r==="true"||r==="1"}e(b,"truthy");function Kt(t){let r=process.env[t]?.toLowerCase();return r==="false"||r==="0"}e(Kt,"falsy");var H;(f=>{f.OPENCODE_AUTO_SHARE=b("OPENCODE_AUTO_SHARE"),f.OPENCODE_AUTO_HEAP_SNAPSHOT=b("OPENCODE_AUTO_HEAP_SNAPSHOT"),f.OPENCODE_GIT_BASH_PATH=process.env.OPENCODE_GIT_BASH_PATH,f.OPENCODE_CONFIG=process.env.OPENCODE_CONFIG,f.OPENCODE_CONFIG_CONTENT=process.env.OPENCODE_CONFIG_CONTENT,f.OPENCODE_DISABLE_AUTOUPDATE=b("OPENCODE_DISABLE_AUTOUPDATE"),f.OPENCODE_ALWAYS_NOTIFY_UPDATE=b("OPENCODE_ALWAYS_NOTIFY_UPDATE"),f.OPENCODE_DISABLE_PRUNE=b("OPENCODE_DISABLE_PRUNE"),f.OPENCODE_DISABLE_TERMINAL_TITLE=b("OPENCODE_DISABLE_TERMINAL_TITLE"),f.OPENCODE_SHOW_TTFD=b("OPENCODE_SHOW_TTFD"),f.OPENCODE_PERMISSION=process.env.OPENCODE_PERMISSION,f.OPENCODE_DISABLE_DEFAULT_PLUGINS=b("OPENCODE_DISABLE_DEFAULT_PLUGINS"),f.OPENCODE_DISABLE_LSP_DOWNLOAD=b("OPENCODE_DISABLE_LSP_DOWNLOAD"),f.OPENCODE_ENABLE_EXPERIMENTAL_MODELS=b("OPENCODE_ENABLE_EXPERIMENTAL_MODELS"),f.OPENCODE_DISABLE_AUTOCOMPACT=b("OPENCODE_DISABLE_AUTOCOMPACT"),f.OPENCODE_DISABLE_MODELS_FETCH=b("OPENCODE_DISABLE_MODELS_FETCH"),f.OPENCODE_DISABLE_MOUSE=b("OPENCODE_DISABLE_MOUSE"),f.OPENCODE_DISABLE_CLAUDE_CODE=b("OPENCODE_DISABLE_CLAUDE_CODE"),f.OPENCODE_DISABLE_CLAUDE_CODE_PROMPT=f.OPENCODE_DISABLE_CLAUDE_CODE||b("OPENCODE_DISABLE_CLAUDE_CODE_PROMPT"),f.OPENCODE_DISABLE_CLAUDE_CODE_SKILLS=f.OPENCODE_DISABLE_CLAUDE_CODE||b("OPENCODE_DISABLE_CLAUDE_CODE_SKILLS"),f.OPENCODE_DISABLE_EXTERNAL_SKILLS=f.OPENCODE_DISABLE_CLAUDE_CODE_SKILLS||b("OPENCODE_DISABLE_EXTERNAL_SKILLS"),f.OPENCODE_FAKE_VCS=process.env.OPENCODE_FAKE_VCS,f.OPENCODE_SERVER_PASSWORD=process.env.OPENCODE_SERVER_PASSWORD,f.OPENCODE_SERVER_USERNAME=process.env.OPENCODE_SERVER_USERNAME,f.OPENCODE_ENABLE_QUESTION_TOOL=b("OPENCODE_ENABLE_QUESTION_TOOL"),f.OPENCODE_EXPERIMENTAL=b("OPENCODE_EXPERIMENTAL"),f.OPENCODE_EXPERIMENTAL_FILEWATCHER=ge.boolean("OPENCODE_EXPERIMENTAL_FILEWATCHER").pipe(ge.withDefault(!1)),f.OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER=ge.boolean("OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER").pipe(ge.withDefault(!1)),f.OPENCODE_EXPERIMENTAL_ICON_DISCOVERY=f.OPENCODE_EXPERIMENTAL||b("OPENCODE_EXPERIMENTAL_ICON_DISCOVERY");let De=process.env.OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT;f.OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT=De===void 0?process.platform==="win32":b("OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT"),f.OPENCODE_ENABLE_EXA=b("OPENCODE_ENABLE_EXA")||f.OPENCODE_EXPERIMENTAL||b("OPENCODE_EXPERIMENTAL_EXA"),f.OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS=Ae("OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS"),f.OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX=Ae("OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX"),f.OPENCODE_EXPERIMENTAL_OXFMT=f.OPENCODE_EXPERIMENTAL||b("OPENCODE_EXPERIMENTAL_OXFMT"),f.OPENCODE_EXPERIMENTAL_LSP_TY=b("OPENCODE_EXPERIMENTAL_LSP_TY"),f.OPENCODE_EXPERIMENTAL_LSP_TOOL=f.OPENCODE_EXPERIMENTAL||b("OPENCODE_EXPERIMENTAL_LSP_TOOL"),f.OPENCODE_DISABLE_FILETIME_CHECK=ge.boolean("OPENCODE_DISABLE_FILETIME_CHECK").pipe(ge.withDefault(!1)),f.OPENCODE_EXPERIMENTAL_PLAN_MODE=f.OPENCODE_EXPERIMENTAL||b("OPENCODE_EXPERIMENTAL_PLAN_MODE"),f.OPENCODE_EXPERIMENTAL_WORKSPACES=f.OPENCODE_EXPERIMENTAL||b("OPENCODE_EXPERIMENTAL_WORKSPACES"),f.OPENCODE_EXPERIMENTAL_MARKDOWN=!Kt("OPENCODE_EXPERIMENTAL_MARKDOWN"),f.OPENCODE_MODELS_URL=process.env.OPENCODE_MODELS_URL,f.OPENCODE_MODELS_PATH=process.env.OPENCODE_MODELS_PATH,f.OPENCODE_DISABLE_EMBEDDED_WEB_UI=b("OPENCODE_DISABLE_EMBEDDED_WEB_UI"),f.OPENCODE_DB=process.env.OPENCODE_DB,f.OPENCODE_DISABLE_CHANNEL_DB=b("OPENCODE_DISABLE_CHANNEL_DB"),f.OPENCODE_SKIP_MIGRATIONS=b("OPENCODE_SKIP_MIGRATIONS"),f.OPENCODE_STRICT_CONFIG_DEPS=b("OPENCODE_STRICT_CONFIG_DEPS");function Ae($t){let yt=process.env[$t];if(!yt)return;let et=Number(yt);return Number.isInteger(et)&&et>0?et:void 0}e(Ae,"number")})(H||={});Object.defineProperty(H,"OPENCODE_DISABLE_PROJECT_CONFIG",{get(){return b("OPENCODE_DISABLE_PROJECT_CONFIG")},enumerable:!0,configurable:!1});Object.defineProperty(H,"OPENCODE_TUI_CONFIG",{get(){return process.env.OPENCODE_TUI_CONFIG},enumerable:!0,configurable:!1});Object.defineProperty(H,"OPENCODE_CONFIG_DIR",{get(){return process.env.OPENCODE_CONFIG_DIR},enumerable:!0,configurable:!1});Object.defineProperty(H,"OPENCODE_PURE",{get(){return b("OPENCODE_PURE")},enumerable:!0,configurable:!1});Object.defineProperty(H,"OPENCODE_PLUGIN_META_FILE",{get(){return process.env.OPENCODE_PLUGIN_META_FILE},enumerable:!0,configurable:!1});Object.defineProperty(H,"OPENCODE_CLIENT",{get(){return process.env.OPENCODE_CLIENT??"cli"},enumerable:!0,configurable:!1});var Zr=typeof OPENCODE_VERSION=="string"?OPENCODE_VERSION:"local",nt=typeof OPENCODE_CHANNEL=="string"?OPENCODE_CHANNEL:"local";import{Effect as q,Fiber as Jt,ScopedCache as ve,ServiceMap as Vt}from"effect";import{ServiceMap as Wt}from"effect";var we=Wt.Reference("~opencode/InstanceRef",{defaultValue:e(()=>{},"defaultValue")});var _t="~opencode/InstanceState",Ke;(N=>(N.bind=e(p=>{try{return Z.bind(p)}catch(S){if(!(S instanceof te.NotFound))throw S}let s=Jt.getCurrent(),y=s?Vt.getReferenceUnsafe(s.services,we):void 0;return y?((...S)=>Z.restore(y,()=>p(...S))):p},"bind"),N.context=q.gen(function*(){return(yield*we)??Z.current}),N.directory=q.map(N.context,p=>p.directory),N.make=e(p=>q.gen(function*(){let s=yield*ve.make({capacity:Number.POSITIVE_INFINITY,lookup:e(()=>q.gen(function*(){return yield*p(yield*N.context)}),"lookup")}),y=Ot(S=>q.runPromise(ve.invalidate(s,S)));return yield*q.addFinalizer(()=>q.sync(y)),{[_t]:_t,cache:s}}),"make"),N.get=e(p=>q.gen(function*(){return yield*ve.get(p.cache,yield*N.directory)}),"get"),N.use=e((p,s)=>q.map((0,N.get)(p),s),"use"),N.useEffect=e((p,s)=>q.flatMap((0,N.get)(p),s),"useEffect"),N.has=e(p=>q.gen(function*(){return yield*ve.has(p.cache,yield*N.directory)}),"has"),N.invalidate=e(p=>q.gen(function*(){return yield*ve.invalidate(p.cache,yield*N.directory)}),"invalidate"),N.withALS=e(p=>q.map(N.context,s=>Z.restore(s,p)),"withALS")))(Ke||={});import{DatabaseSync as Yt}from"node:sqlite";import{drizzle as qt}from"drizzle-orm/node-sqlite";function St(t){let r=new Yt(t);return qt({client:r})}e(St,"init");var tr=Xe.create("NotFoundError",gt.object({message:gt.string()})),it=ee.create({service:"db"}),_e;(N=>{function t(){if(["latest","beta"].includes(nt)||H.OPENCODE_DISABLE_CHANNEL_DB)return Ce.join(Oe.Path.data,"opencode.db");let p=nt.replace(/[^a-zA-Z0-9._-]/g,"-");return Ce.join(Oe.Path.data,`opencode-${p}.db`)}N.getChannelPath=t,e(t,"getChannelPath"),N.Path=be(()=>H.OPENCODE_DB?H.OPENCODE_DB===":memory:"||Ce.isAbsolute(H.OPENCODE_DB)?H.OPENCODE_DB:Ce.join(Oe.Path.data,H.OPENCODE_DB):t());function l(p){let s=/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/.exec(p);return s?Date.UTC(Number(s[1]),Number(s[2])-1,Number(s[3]),Number(s[4]),Number(s[5]),Number(s[6])):0}e(l,"time");function u(p){return Qt(p,{withFileTypes:!0}).filter(S=>S.isDirectory()).map(S=>S.name).map(S=>{let X=Ce.join(p,S,"migration.sql");if(er(X))return{sql:Zt(X,"utf-8"),timestamp:l(S),name:S}}).filter(Boolean).sort((S,X)=>S.timestamp-X.timestamp)}e(u,"migrations"),N.Client=ze(()=>{it.info("opening database",{path:N.Path});let p=St(N.Path);p.run("PRAGMA journal_mode = WAL"),p.run("PRAGMA synchronous = NORMAL"),p.run("PRAGMA busy_timeout = 5000"),p.run("PRAGMA cache_size = -64000"),p.run("PRAGMA foreign_keys = ON"),p.run("PRAGMA wal_checkpoint(PASSIVE)");let s=Ce.join(import.meta.dirname,"../packages/opencode/migration");if(typeof OPENCODE_MIGRATIONS<"u"){let y=OPENCODE_MIGRATIONS;if(y.length>0){if(it.info("applying migrations",{count:y.length,mode:"bundled"}),H.OPENCODE_SKIP_MIGRATIONS)for(let S of y)S.sql="select 1;";Dt(p,y)}}else{let y=u(s);it.info("applying migrations",{count:y.length,mode:"dev"}),!H.OPENCODE_SKIP_MIGRATIONS&&y.length>0&&Dt(p,{migrationsFolder:s})}return p});function g(){(0,N.Client)().$client.close(),N.Client.reset()}N.close=g,e(g,"close");let T=te.create("database");function J(p){try{return p(T.use().tx)}catch(s){if(s instanceof te.NotFound){let y=[],S=T.provide({effects:y,tx:(0,N.Client)()},()=>p((0,N.Client)()));for(let X of y)X();return S}throw s}}N.use=J,e(J,"use");function F(p){let s=Ke.bind(p);try{T.use().effects.push(s)}catch{s()}}N.effect=F,e(F,"effect");function W(p,s){try{return p(T.use().tx)}catch(y){if(y instanceof te.NotFound){let S=[],X=Ke.bind(ne=>T.provide({tx:ne,effects:S},()=>p(ne))),ye=(0,N.Client)().transaction(X,{behavior:s?.behavior});for(let ne of S)ne();return ye}throw y}}N.transaction=W,e(W,"transaction")})(_e||={});import{sqliteTable as rr,text as ue,integer as or}from"drizzle-orm/sqlite-core";import{integer as Ct}from"drizzle-orm/sqlite-core";var Ee={time_created:Ct().notNull().$default(()=>Date.now()),time_updated:Ct().notNull().$onUpdate(()=>Date.now())};var w=rr("project",{id:ue().$type().primaryKey(),worktree:ue().notNull(),vcs:ue(),name:ue(),icon_url:ue(),icon_color:ue(),...Ee,time_initialized:or(),sandboxes:ue({mode:"json"}).notNull().$type(),commands:ue({mode:"json"}).$type()});import{sqliteTable as Le,text as R,integer as Ne,index as Se,primaryKey as nr}from"drizzle-orm/sqlite-core";var he=Le("session",{id:R().$type().primaryKey(),project_id:R().$type().notNull().references(()=>w.id,{onDelete:"cascade"}),workspace_id:R().$type(),parent_id:R().$type(),slug:R().notNull(),directory:R().notNull(),title:R().notNull(),version:R().notNull(),share_url:R(),summary_additions:Ne(),summary_deletions:Ne(),summary_files:Ne(),summary_diffs:R({mode:"json"}).$type(),revert:R({mode:"json"}).$type(),permission:R({mode:"json"}).$type(),...Ee,metadata:R({mode:"json"}).$type(),time_compacting:Ne(),time_archived:Ne()},t=>[Se("session_project_idx").on(t.project_id),Se("session_workspace_idx").on(t.workspace_id),Se("session_parent_idx").on(t.parent_id)]),ir=Le("message",{id:R().$type().primaryKey(),session_id:R().$type().notNull().references(()=>he.id,{onDelete:"cascade"}),...Ee,data:R({mode:"json"}).notNull().$type()},t=>[Se("message_session_time_created_id_idx").on(t.session_id,t.time_created,t.id)]),Fo=Le("part",{id:R().$type().primaryKey(),message_id:R().$type().notNull().references(()=>ir.id,{onDelete:"cascade"}),session_id:R().$type().notNull(),...Ee,data:R({mode:"json"}).notNull().$type()},t=>[Se("part_message_id_id_idx").on(t.message_id,t.id),Se("part_session_idx").on(t.session_id)]),Go=Le("todo",{session_id:R().$type().notNull().references(()=>he.id,{onDelete:"cascade"}),content:R().notNull(),status:R().notNull(),priority:R().notNull(),position:Ne().notNull(),...Ee},t=>[nr({columns:[t.session_id,t.position]}),Se("todo_session_idx").on(t.session_id)]),$o=Le("permission",{project_id:R().primaryKey().references(()=>w.id,{onDelete:"cascade"}),...Ee,data:R({mode:"json"}).notNull().$type()});import st from"zod";var ct;(u=>{let t=new Map;function r(_,g){let T={type:_,properties:g};return t.set(_,T),T}u.define=r,e(r,"define");function l(){return st.discriminatedUnion("type",t.entries().map(([_,g])=>st.object({type:st.literal(_),properties:g.properties}).meta({ref:"Event."+g.type})).toArray()).meta({ref:"Event"})}u.payloads=l,e(l,"payloads")})(ct||={});import sr from"which";import cr from"path";function at(t,r){let l=r?.PATH??r?.Path??process.env.PATH??process.env.Path??"",u=l?l+cr.delimiter+Oe.Path.bin:Oe.Path.bin,_=sr.sync(t,{nothrow:!0,path:u,pathExt:r?.PATHEXT??r?.PathExt??process.env.PATHEXT??process.env.PathExt});return typeof _=="string"?_:null}e(at,"which");import{Schema as Nt}from"effect";import ht from"zod";var ar=Nt.String.pipe(Nt.brand("ProjectID")),re=ar.pipe(Pt(t=>({global:t.makeUnsafe("global"),make:e(r=>t.makeUnsafe(r),"make"),zod:ht.string().pipe(ht.custom())})));import{Effect as I,Layer as Ye,Path as Nr,Scope as hr,ServiceMap as Ir,Stream as qe}from"effect";import{ChildProcess as xr,ChildProcessSpawner as Ar}from"effect/unstable/process";import{NodePath as Tr}from"@effect/platform-node";import{NodeFileSystem as dr}from"@effect/platform-node";import{dirname as We,join as dt,relative as ft,resolve as It}from"path";import{realpathSync as xt}from"fs";import*as Ve from"fs/promises";import{lookup as fr}from"mime-types";import{Effect as M,FileSystem as pr,Layer as At,Schema as Je,ServiceMap as lr}from"effect";var Ie;(p=>{class t extends Je.TaggedErrorClass()("FileSystemError",{method:Je.String,cause:Je.optional(Je.Defect)}){static{e(this,"FileSystemError")}}p.FileSystemError=t;class r extends lr.Service()("@opencode/FileSystem"){static{e(this,"Service")}}p.Service=r,p.layer=At.effect(r,M.gen(function*(){let s=yield*pr.FileSystem,y=M.fn("FileSystem.existsSafe")(function*(c){return yield*s.exists(c).pipe(M.orElseSucceed(()=>!1))}),S=M.fn("FileSystem.isDir")(function*(c){return(yield*s.stat(c).pipe(M.catch(()=>M.void)))?.type==="Directory"}),X=M.fn("FileSystem.isFile")(function*(c){return(yield*s.stat(c).pipe(M.catch(()=>M.void)))?.type==="File"}),ye=M.fn("FileSystem.readDirectoryEntries")(function*(c){return yield*M.tryPromise({try:e(async()=>(await Ve.readdir(c,{withFileTypes:!0})).map(h=>({name:h.name,type:h.isDirectory()?"directory":h.isSymbolicLink()?"symlink":h.isFile()?"file":"other"})),"try"),catch:e(d=>new t({method:"readDirectoryEntries",cause:d}),"catch")})}),ne=M.fn("FileSystem.readJson")(function*(c){let d=yield*s.readFileString(c);return JSON.parse(d)}),fe=M.fn("FileSystem.writeJson")(function*(c,d,h){let v=JSON.stringify(d,null,2),x=`${c}.tmp-${process.pid}-${Math.random().toString(36).slice(2,8)}`;yield*s.writeFileString(x,v),h&&(yield*s.chmod(x,h)),yield*M.tryPromise({try:e(()=>Ve.rename(x,c),"try"),catch:e(k=>new t({method:"writeJson.rename",cause:k}),"catch")})}),o=M.fn("FileSystem.ensureDir")(function*(c){yield*s.makeDirectory(c,{recursive:!0})}),n=M.fn("FileSystem.writeWithDirs")(function*(c,d,h){let v=typeof d=="string"?s.writeFileString(c,d):s.writeFile(c,d);yield*v.pipe(M.catchIf(x=>x.reason._tag==="NotFound",()=>M.gen(function*(){yield*s.makeDirectory(We(c),{recursive:!0}),yield*v}))),h&&(yield*s.chmod(c,h))}),i=M.fn("FileSystem.glob")(function*(c,d){return yield*M.tryPromise({try:e(()=>tt.scan(c,d),"try"),catch:e(h=>new t({method:"glob",cause:h}),"catch")})}),P=M.fn("FileSystem.findUp")(function*(c,d,h){let v=[],x=d;for(;;){let k=dt(x,c);if((yield*s.exists(k))&&v.push(k),h===x)break;let B=We(x);if(B===x)break;x=B}return v}),D=M.fn("FileSystem.up")(function*(c){let d=[],h=c.start;for(;;){for(let x of c.targets){let k=dt(h,x);(yield*s.exists(k))&&d.push(k)}if(c.stop===h)break;let v=We(h);if(v===h)break;h=v}return d}),m=M.fn("FileSystem.globUp")(function*(c,d,h){let v=[],x=d;for(;;){let k=yield*i(c,{cwd:x,absolute:!0,include:"file",dot:!0}).pipe(M.catch(()=>M.succeed([])));if(v.push(...k),h===x)break;let B=We(x);if(B===x)break;x=B}return v});return r.of({...s,existsSafe:y,isDir:S,isFile:X,readDirectoryEntries:ye,readJson:ne,writeJson:fe,ensureDir:o,writeWithDirs:n,findUp:P,up:D,globUp:m,glob:i,globMatch:tt.match})})),p.defaultLayer=p.layer.pipe(At.provide(dr.layer));function _(s){return fr(s)||"application/octet-stream"}p.mimeType=_,e(_,"mimeType");function g(s){if(process.platform!=="win32")return s;let y=It(F(s));try{return xt.native(y)}catch{return y}}p.normalizePath=g,e(g,"normalizePath");function T(s){if(process.platform!=="win32"||s==="*")return s;let y=s.match(/^(.*)[\\/]\*$/);if(!y)return g(s);let S=/^[A-Za-z]:$/.test(y[1])?y[1]+"\\":y[1];return dt(g(S),"*")}p.normalizePathPattern=T,e(T,"normalizePathPattern");function J(s){let y=It(F(s));try{return g(xt(y))}catch(S){if(S?.code==="ENOENT")return g(y);throw S}}p.resolve=J,e(J,"resolve");function F(s){return process.platform!=="win32"?s:s.replace(/^\/([a-zA-Z]):(?:[\\/]|$)/,(y,S)=>`${S.toUpperCase()}:/`).replace(/^\/([a-zA-Z])(?:\/|$)/,(y,S)=>`${S.toUpperCase()}:/`).replace(/^\/cygdrive\/([a-zA-Z])(?:\/|$)/,(y,S)=>`${S.toUpperCase()}:/`).replace(/^\/mnt\/([a-zA-Z])(?:\/|$)/,(y,S)=>`${S.toUpperCase()}:/`)}p.windowsPath=F,e(F,"windowsPath");function W(s,y){let S=ft(s,y),X=ft(y,s);return!S||!S.startsWith("..")||!X||!X.startsWith("..")}p.overlaps=W,e(W,"overlaps");function N(s,y){return!ft(s,y).startsWith("..")}p.contains=N,e(N,"contains")})(Ie||={});import{NodeFileSystem as Er,NodeSink as Tt,NodeStream as pt}from"@effect/platform-node";import*as bt from"@effect/platform-node/NodePath";import*as Y from"effect/Deferred";import*as a from"effect/Effect";import*as wt from"effect/Exit";import*as vt from"effect/FileSystem";import*as Re from"effect/Layer";import*as Lt from"effect/Path";import*as Rt from"effect/PlatformError";import*as V from"effect/Predicate";import*as ce from"effect/Sink";import*as G from"effect/Stream";import*as ae from"effect/unstable/process/ChildProcess";import{ChildProcessSpawner as kt,ExitCode as ur,make as mr,makeHandle as yr,ProcessId as Pr}from"effect/unstable/process/ChildProcessSpawner";import*as Mt from"node:child_process";import{PassThrough as Or}from"node:stream";import _r from"cross-spawn";var me=e(t=>t instanceof globalThis.Error?t:new globalThis.Error(String(t)),"toError"),Sr=e(t=>{switch(t.code){case"ENOENT":return"NotFound";case"EACCES":return"PermissionDenied";case"EEXIST":return"AlreadyExists";case"EISDIR":return"BadResource";case"ENOTDIR":return"BadResource";case"EBUSY":return"Busy";case"ELOOP":return"BadResource";default:return"Unknown"}},"toTag"),jt=e(t=>{let r=[],l=[],u=e(T=>{switch(T._tag){case"StandardCommand":r.push(T);return;case"PipedCommand":u(T.left),l.push(T.options),u(T.right);return}},"walk");if(u(t),r.length===0)throw new Error("flatten produced empty commands array");let[_,...g]=r;return{commands:[_,...g],opts:l}},"flatten"),se=e((t,r,l)=>{let u=jt(l).commands.map(_=>`${_.command} ${_.args.join(" ")}`).join(" | ");return Rt.systemError({_tag:Sr(r),module:"ChildProcess",method:t,pathOrDescriptor:u,syscall:r.syscall,cause:r})},"toPlatformError"),Dr=a.gen(function*(){let t=yield*vt.FileSystem,r=yield*Lt.Path,l=a.fnUntraced(function*(o){if(!V.isUndefined(o.cwd))return yield*t.access(o.cwd),r.resolve(o.cwd)}),u=e(o=>o.extendEnv?{...globalThis.process.env,...o.env}:o.env,"env"),_=e(o=>G.isStream(o)?"pipe":o,"input"),g=e(o=>ce.isSink(o)?"pipe":o,"output"),T=e(o=>{let n={stream:"pipe",encoding:"utf-8",endOnDone:!0};return V.isUndefined(o.stdin)?n:typeof o.stdin=="string"?{...n,stream:o.stdin}:G.isStream(o.stdin)?{...n,stream:o.stdin}:{stream:o.stdin.stream,encoding:o.stdin.encoding??n.encoding,endOnDone:o.stdin.endOnDone??n.endOnDone}},"stdin"),J=e((o,n)=>{let i=o[n];return V.isUndefined(i)?{stream:"pipe"}:typeof i=="string"?{stream:i}:ce.isSink(i)?{stream:i}:{stream:i.stream}},"stdio"),F=e(o=>V.isUndefined(o.additionalFds)?[]:Object.entries(o.additionalFds).flatMap(([n,i])=>{let P=ae.parseFdName(n);return V.isUndefined(P)?[]:[{fd:P,config:i}]}).toSorted((n,i)=>n.fd-i.fd),"fds"),W=e((o,n,i,P)=>{let D=e(d=>process.platform==="win32"&&d==="pipe"?"overlapped":d,"pipe"),m=[D(_(o.stream)),D(g(n.stream)),D(g(i.stream))];if(P.length===0)return m;let c=P.reduce((d,h)=>Math.max(d,h.fd),2);for(let d=3;d<=c;d++)m[d]="ignore";for(let d of P)m[d.fd]=D("pipe");return m},"stdios"),N=a.fnUntraced(function*(o,n,i){if(i.length===0)return{getInputFd:e(()=>ce.drain,"getInputFd"),getOutputFd:e(()=>G.empty,"getOutputFd")};let P=new Map,D=new Map;for(let m of i){let c=n.stdio[m.fd];switch(m.config.type){case"input":{let d=ce.drain;c&&"write"in c&&(d=Tt.fromWritable({evaluate:e(()=>c,"evaluate"),onError:e(h=>se(`fromWritable(fd${m.fd})`,me(h),o),"onError"),endOnDone:!0})),m.config.stream&&(yield*a.forkScoped(G.run(m.config.stream,d))),P.set(m.fd,d);break}case"output":{let d=G.empty;if(c&&"read"in c){let h=new Or;c.on("error",v=>h.destroy(me(v))),c.pipe(h),d=pt.fromReadable({evaluate:e(()=>h,"evaluate"),onError:e(v=>se(`fromReadable(fd${m.fd})`,me(v),o),"onError")})}m.config.sink&&(d=G.transduce(d,m.config.sink)),D.set(m.fd,d);break}}}return{getInputFd:e(m=>P.get(m)??ce.drain,"getInputFd"),getOutputFd:e(m=>D.get(m)??G.empty,"getOutputFd")}}),p=e((o,n,i)=>a.suspend(()=>{let P=ce.drain;return V.isNotNull(n.stdin)&&(P=Tt.fromWritable({evaluate:e(()=>n.stdin,"evaluate"),onError:e(D=>se("fromWritable(stdin)",me(D),o),"onError"),endOnDone:i.endOnDone,encoding:i.encoding})),G.isStream(i.stream)?a.as(a.forkScoped(G.run(i.stream,P)),P):a.succeed(P)}),"setupStdin"),s=e((o,n,i,P)=>{let D=n.stdout?pt.fromReadable({evaluate:e(()=>n.stdout,"evaluate"),onError:e(c=>se("fromReadable(stdout)",me(c),o),"onError")}):G.empty,m=n.stderr?pt.fromReadable({evaluate:e(()=>n.stderr,"evaluate"),onError:e(c=>se("fromReadable(stderr)",me(c),o),"onError")}):G.empty;return ce.isSink(i.stream)&&(D=G.transduce(D,i.stream)),ce.isSink(P.stream)&&(m=G.transduce(m,P.stream)),{stdout:D,stderr:m,all:G.merge(D,m)}},"setupOutput"),y=e((o,n)=>a.callback(i=>{let P=Y.makeUnsafe(),D=_r(o.command,o.args,n),m=!1,c;return D.on("error",d=>{i(a.fail(se("spawn",d,o)))}),D.on("exit",(...d)=>{c=d}),D.on("close",(...d)=>{m||(m=!0,Y.doneUnsafe(P,wt.succeed(c??d)))}),D.on("spawn",()=>{i(a.succeed([D,P]))}),a.sync(()=>{D.kill("SIGTERM")})}),"spawn"),S=e((o,n,i)=>globalThis.process.platform==="win32"?a.callback(P=>{Mt.exec(`taskkill /pid ${n.pid} /T /F`,{windowsHide:!0},D=>{if(D)return P(a.fail(se("kill",me(D),o)));P(a.void)})}):a.try({try:e(()=>{globalThis.process.kill(-n.pid,i)},"try"),catch:e(P=>se("kill",me(P),o),"catch")}),"killGroup"),X=e((o,n,i)=>a.suspend(()=>n.kill(i)?a.void:a.fail(se("kill",new Error("Failed to kill child process"),o))),"killOne"),ye=e((o,n,i)=>P=>{let D=i?.killSignal??"SIGTERM";return V.isUndefined(i?.forceKillAfter)?P(n,o,D):a.timeoutOrElse(P(n,o,D),{duration:i.forceKillAfter,orElse:e(()=>P(n,o,"SIGKILL"),"orElse")})},"timeout"),ne=e((o,n)=>{let i=n??"stdout";switch(i){case"stdout":return o.stdout;case"stderr":return o.stderr;case"all":return o.all;default:{let P=ae.parseFdName(i);return V.isNotUndefined(P)?o.getOutputFd(P):o.stdout}}},"source"),fe=a.fnUntraced(function*(o){switch(o._tag){case"StandardCommand":{let n=T(o.options),i=J(o.options,"stdout"),P=J(o.options,"stderr"),D=F(o.options),m=yield*l(o.options),[c,d]=yield*a.acquireRelease(y(o,{cwd:m,env:u(o.options),stdio:W(n,i,P,D),detached:o.options.detached??process.platform!=="win32",shell:o.options.shell,windowsHide:process.platform==="win32"}),a.fnUntraced(function*([x,k]){let B=yield*Y.isDone(k),Pe=ye(x,o,o.options);if(B){let[le]=yield*Y.await(k);return process.platform==="win32"?yield*a.void:le!==0&&V.isNotNull(le)?yield*a.ignore(Pe(S)):yield*a.void}let pe=e(le=>a.catch(S(o,x,le),()=>X(o,x,le)),"send"),xe=o.options.killSignal??"SIGTERM",De=pe(xe).pipe(a.andThen(Y.await(k)),a.asVoid),Ue=o.options.forceKillAfter?a.timeoutOrElse(De,{duration:o.options.forceKillAfter,orElse:e(()=>pe("SIGKILL").pipe(a.andThen(Y.await(k)),a.asVoid),"orElse")}):De;return yield*a.ignore(Ue)})),h=yield*N(o,c,D),v=s(o,c,i,P);return yr({pid:Pr(c.pid),stdin:yield*p(o,c,n),stdout:v.stdout,stderr:v.stderr,all:v.all,getInputFd:h.getInputFd,getOutputFd:h.getOutputFd,isRunning:a.map(Y.isDone(d),x=>!x),exitCode:a.flatMap(Y.await(d),([x,k])=>V.isNotNull(x)?a.succeed(ur(x)):a.fail(se("exitCode",new Error(`Process interrupted due to receipt of signal: '${k}'`),o))),kill:e(x=>{let k=x?.killSignal??"SIGTERM",B=e(pe=>a.catch(S(o,c,pe),()=>X(o,c,pe)),"send"),Pe=B(k).pipe(a.andThen(Y.await(d)),a.asVoid);return x?.forceKillAfter?a.timeoutOrElse(Pe,{duration:x.forceKillAfter,orElse:e(()=>B("SIGKILL").pipe(a.andThen(Y.await(d)),a.asVoid),"orElse")}):Pe},"kill")})}case"PipedCommand":{let n=jt(o),[i,...P]=n.commands,D=fe(i);for(let m=0;m<P.length;m++){let c=P[m],d=n.opts[m]??{},h=T(c.options),v=G.unwrap(a.map(D,B=>ne(B,d.from))),x=d.to??"stdin";if(x==="stdin"){D=fe(ae.make(c.command,c.args,{...c.options,stdin:{...h,stream:v}}));continue}let k=ae.parseFdName(x);if(V.isUndefined(k)){D=fe(ae.make(c.command,c.args,{...c.options,stdin:{...h,stream:v}}));continue}D=fe(ae.make(c.command,c.args,{...c.options,additionalFds:{...c.options.additionalFds,[ae.fdName(k)]:{type:"input",stream:v}}}))}return yield*D}}});return mr(fe)}),gr=Re.effect(kt,Dr),lt=gr.pipe(Re.provide(Er.layer),Re.provide(bt.layer)),Pn=ze(async()=>{let{makeRuntime:t}=await import("./run-service-6DJSRAIA.js");return t(kt,lt)});var Et;(o=>{let t=ee.create({service:"project"});o.Info=K.object({id:re.zod,worktree:K.string(),vcs:K.literal("git").optional(),name:K.string().optional(),icon:K.object({url:K.string().optional(),override:K.string().optional(),color:K.string().optional()}).optional(),commands:K.object({start:K.string().optional().describe("Startup script to run when creating a new workspace (worktree)")}).optional(),time:K.object({created:K.number(),updated:K.number(),initialized:K.number().optional()}),sandboxes:K.array(K.string())}).meta({ref:"Project"}),o.Event={Updated:ct.define("project.updated",o.Info)};function u(n){let i=n.icon_url||n.icon_color?{url:n.icon_url??void 0,color:n.icon_color??void 0}:void 0;return{id:n.id,worktree:n.worktree,vcs:n.vcs?o.Info.shape.vcs.parse(n.vcs):void 0,name:n.name??void 0,icon:i,time:{created:n.time_created,updated:n.time_updated,initialized:n.time_initialized??void 0},sandboxes:n.sandboxes,commands:n.commands??void 0}}o.fromRow=u,e(u,"fromRow"),o.UpdateInput=K.object({projectID:re.zod,name:K.string().optional(),icon:o.Info.shape.icon.optional(),commands:o.Info.shape.commands.optional()});class g extends Ir.Service()("@opencode/Project"){static{e(this,"Service")}}o.Service=g,o.layer=Ye.effect(g,I.gen(function*(){let n=yield*Ie.Service,i=yield*Nr.Path,P=yield*Ar.ChildProcessSpawner,D=I.fnUntraced(function*(E,O){let L=yield*P.spawn(xr.make("git",E,{cwd:O?.cwd,extendEnv:!0,stdin:"ignore"})),[U,C]=yield*I.all([qe.mkString(qe.decodeText(L.stdout)),qe.mkString(qe.decodeText(L.stderr))],{concurrency:2});return{code:yield*L.exitCode,text:U,stderr:C}},I.scoped,I.catch(()=>I.succeed({code:1,text:"",stderr:""}))),m=e(E=>I.sync(()=>_e.use(E)),"db"),c=e(E=>I.sync(()=>$e.emit("event",{payload:{type:o.Event.Updated.type,properties:E}})),"emitUpdated"),d=o.Info.shape.vcs.parse(H.OPENCODE_FAKE_VCS),h=e((E,O)=>!O||(O=O.replace(/[\r\n]+$/,""),!O)?E:(O=Ie.windowsPath(O),i.isAbsolute(O)?i.normalize(O):i.resolve(E,O)),"resolveGitPath"),v=yield*hr.Scope,x=I.fnUntraced(function*(E){return yield*n.readFileString(i.join(E,"opencode")).pipe(I.map(O=>O.trim()),I.map(re.make),I.catch(()=>I.succeed(void 0)))}),k=I.fn("Project.fromDirectory")(function*(E){t.info("fromDirectory",{directory:E});let O=yield*I.gen(function*(){let ie=(yield*n.up({targets:[".git"],start:E}).pipe(I.orDie))[0];if(!ie)return{id:re.global,worktree:"/",sandbox:"/",vcs:d};let $=i.dirname(ie),Be=yield*I.sync(()=>at("git")),Q=yield*x(ie);if(!Be)return{id:Q??re.global,worktree:$,sandbox:$,vcs:d};let Ze=yield*D(["rev-parse","--git-common-dir"],{cwd:$});if(Ze.code!==0)return{id:Q??re.global,worktree:$,sandbox:$,vcs:d};let Fe=(()=>{let Ge=h($,Ze.text.trim());return Ge===$?$:i.dirname(Ge)})();if(Q==null&&(Q=yield*x(i.join(Fe,".git"))),!Q){let Ae=(yield*D(["rev-list","--max-parents=0","HEAD"],{cwd:$})).text.split(`
13
- `).filter(Boolean).map(f=>f.trim()).toSorted();Q=Ae[0]?re.make(Ae[0]):void 0,Q&&(yield*n.writeFileString(i.join(Fe,".git","opencode"),Q).pipe(I.ignore))}if(!Q)return{id:re.global,worktree:$,sandbox:$,vcs:"git"};let Qe=yield*D(["rev-parse","--show-toplevel"],{cwd:$});return Qe.code!==0?{id:Q,worktree:$,sandbox:$,vcs:d}:($=h($,Qe.text.trim()),{id:Q,sandbox:$,worktree:Fe,vcs:"git"})}),L=yield*m(j=>j.select().from(w).where((0,A.eq)(w.id,O.id)).get()),U=L?u(L):{id:O.id,worktree:O.worktree,vcs:O.vcs,sandboxes:[],time:{created:Date.now(),updated:Date.now()}};H.OPENCODE_EXPERIMENTAL_ICON_DISCOVERY&&(yield*B(U).pipe(I.ignore,I.forkIn(v)));let C={...U,worktree:O.worktree,vcs:O.vcs,time:{...U.time,updated:Date.now()}};return O.sandbox!==C.worktree&&!C.sandboxes.includes(O.sandbox)&&C.sandboxes.push(O.sandbox),C.sandboxes=yield*I.forEach(C.sandboxes,j=>n.exists(j).pipe(I.orDie,I.map(ie=>ie?j:void 0)),{concurrency:"unbounded"}).pipe(I.map(j=>j.filter(ie=>ie!==void 0))),yield*m(j=>j.insert(w).values({id:C.id,worktree:C.worktree,vcs:C.vcs??null,name:C.name,icon_url:C.icon?.url,icon_color:C.icon?.color,time_created:C.time.created,time_updated:C.time.updated,time_initialized:C.time.initialized,sandboxes:C.sandboxes,commands:C.commands}).onConflictDoUpdate({target:w.id,set:{worktree:C.worktree,vcs:C.vcs??null,name:C.name,icon_url:C.icon?.url,icon_color:C.icon?.color,time_updated:C.time.updated,time_initialized:C.time.initialized,sandboxes:C.sandboxes,commands:C.commands}}).run()),O.id!==re.global&&(yield*m(j=>j.update(he).set({project_id:O.id}).where((0,A.and)((0,A.eq)(he.project_id,re.global),(0,A.eq)(he.directory,O.worktree))).run())),yield*c(C),{project:C,sandbox:O.sandbox}}),B=I.fn("Project.discover")(function*(E){if(E.vcs!=="git"||E.icon?.override||E.icon?.url)return;let L=(yield*n.glob("**/favicon.{ico,png,svg,jpg,jpeg,webp}",{cwd:E.worktree,absolute:!0,include:"file"}).pipe(I.orDie)).sort(($,Be)=>$.length-Be.length)[0];if(!L)return;let U=yield*n.readFile(L).pipe(I.orDie),C=Buffer.from(U).toString("base64"),ie=`data:${Ie.mimeType(L)};base64,${C}`;yield*xe({projectID:E.id,icon:{url:ie}})}),Pe=I.fn("Project.list")(function*(){return yield*m(E=>E.select().from(w).all().map(u))}),pe=I.fn("Project.get")(function*(E){let O=yield*m(L=>L.select().from(w).where((0,A.eq)(w.id,E)).get());return O?u(O):void 0}),xe=I.fn("Project.update")(function*(E){let O=yield*m(U=>U.update(w).set({name:E.name,icon_url:E.icon?.url,icon_color:E.icon?.color,commands:E.commands,time_updated:Date.now()}).where((0,A.eq)(w.id,E.projectID)).returning().get());if(!O)throw new Error(`Project not found: ${E.projectID}`);let L=u(O);return yield*c(L),L}),De=I.fn("Project.initGit")(function*(E){if(E.project.vcs==="git")return E.project;if(!(yield*I.sync(()=>at("git"))))throw new Error("Git is not installed");let O=yield*D(["init","--quiet"],{cwd:E.directory});if(O.code!==0)throw new Error(O.stderr.trim()||O.text.trim()||"Failed to initialize git repository");let{project:L}=yield*k(E.directory);return L}),Ue=I.fn("Project.setInitialized")(function*(E){yield*m(O=>O.update(w).set({time_initialized:Date.now()}).where((0,A.eq)(w.id,E)).run())}),le=I.fn("Project.sandboxes")(function*(E){let O=yield*m(U=>U.select().from(w).where((0,A.eq)(w.id,E)).get());if(!O)return[];let L=u(O);return yield*I.forEach(L.sandboxes,U=>n.isDir(U).pipe(I.orDie,I.map(C=>C?U:void 0)),{concurrency:"unbounded"}).pipe(I.map(U=>U.filter(C=>C!==void 0)))}),ut=I.fn("Project.addSandbox")(function*(E,O){let L=yield*m(j=>j.select().from(w).where((0,A.eq)(w.id,E)).get());if(!L)throw new Error(`Project not found: ${E}`);let U=[...L.sandboxes];U.includes(O)||U.push(O);let C=yield*m(j=>j.update(w).set({sandboxes:U,time_updated:Date.now()}).where((0,A.eq)(w.id,E)).returning().get());if(!C)throw new Error(`Project not found: ${E}`);yield*c(u(C))}),mt=I.fn("Project.removeSandbox")(function*(E,O){let L=yield*m(j=>j.select().from(w).where((0,A.eq)(w.id,E)).get());if(!L)throw new Error(`Project not found: ${E}`);let U=L.sandboxes.filter(j=>j!==O),C=yield*m(j=>j.update(w).set({sandboxes:U,time_updated:Date.now()}).where((0,A.eq)(w.id,E)).returning().get());if(!C)throw new Error(`Project not found: ${E}`);yield*c(u(C))});return g.of({fromDirectory:k,discover:B,list:Pe,get:pe,update:xe,initGit:De,setInitialized:Ue,sandboxes:le,addSandbox:ut,removeSandbox:mt})})),o.defaultLayer=o.layer.pipe(Ye.provide(lt),Ye.provide(Ie.defaultLayer),Ye.provide(Tr.layer));let{runPromise:F}=Ut(g,o.defaultLayer);function W(n){return F(i=>i.fromDirectory(n))}o.fromDirectory=W,e(W,"fromDirectory");function N(n){return F(i=>i.discover(n))}o.discover=N,e(N,"discover");function p(){return _e.use(n=>n.select().from(w).all().map(i=>u(i)))}o.list=p,e(p,"list");function s(n){let i=_e.use(P=>P.select().from(w).where((0,A.eq)(w.id,n)).get());if(i)return u(i)}o.get=s,e(s,"get");function y(n){_e.use(i=>i.update(w).set({time_initialized:Date.now()}).where((0,A.eq)(w.id,n)).run())}o.setInitialized=y,e(y,"setInitialized");function S(n){return F(i=>i.initGit(n))}o.initGit=S,e(S,"initGit");function X(n){return F(i=>i.update(n))}o.update=X,e(X,"update");function ye(n){return F(i=>i.sandboxes(n))}o.sandboxes=ye,e(ye,"sandboxes");function ne(n,i){return F(P=>P.addSandbox(n,i))}o.addSandbox=ne,e(ne,"addSandbox");function fe(n,i){return F(P=>P.removeSandbox(n,i))}o.removeSandbox=fe,e(fe,"removeSandbox")})(Et||={});var ke;(_=>{let t=ee.create({service:"state"}),r=new Map;function l(g,T,J){return()=>{let F=g(),W=r.get(F);W||(W=new Map,r.set(F,W));let N=W.get(T);if(N)return N.state;let p=T();return W.set(T,{state:p,dispose:J}),p}}_.create=l,e(l,"create");async function u(g){let T=r.get(g);if(!T)return;t.info("waiting for state disposal to complete",{key:g});let J=!1;setTimeout(()=>{J||t.warn("state disposal is taking an unusually long time - if it does not complete in a reasonable time, please report this as a bug",{key:g})},1e4).unref();let F=[];for(let[W,N]of T){if(!N.dispose)continue;let p=typeof W=="function"?W.name:String(W),s=Promise.resolve(N.state).then(y=>N.dispose(y)).catch(y=>{t.error("Error while disposing state:",{error:y,key:g,init:p})});F.push(s)}await Promise.all(F),T.clear(),r.delete(g),J=!0,t.info("state disposal completed",{key:g})}_.dispose=u,e(u,"dispose")})(ke||={});var de=te.create("instance"),oe=new Map,Me={all:void 0};function Bt(t){$e.emit("event",{directory:t,payload:{type:"server.instance.disposed",properties:{directory:t}}})}e(Bt,"emit");function Ft(t){return be(async()=>{let r=t.project&&t.worktree?{directory:t.directory,worktree:t.worktree,project:t.project}:await Et.fromDirectory(t.directory).then(({project:l,sandbox:u})=>({directory:t.directory,worktree:u,project:l}));return await de.provide(r,async()=>{await t.init?.()}),r})}e(Ft,"boot");function Gt(t,r){let l=r.catch(u=>{throw oe.get(t)===l&&oe.delete(t),u});return oe.set(t,l),l}e(Gt,"track");var Z={async provide(t){let r=Te.resolve(t.directory),l=oe.get(r);l||(ee.Default.info("creating instance",{directory:r}),l=Gt(r,Ft({directory:r,init:t.init})));let u=await l;return de.provide(u,async()=>t.fn())},get current(){return de.use()},get directory(){return de.use().directory},get worktree(){return de.use().worktree},get project(){return de.use().project},containsPath(t){return Te.contains(Z.directory,t)?!0:Z.worktree==="/"?!1:Te.contains(Z.worktree,t)},bind(t){let r=de.use();return((...l)=>de.provide(r,()=>t(...l)))},restore(t,r){return de.provide(t,r)},state(t,r){return ke.create(()=>Z.directory,t,r)},async reload(t){let r=Te.resolve(t.directory);ee.Default.info("reloading instance",{directory:r}),await Promise.all([ke.dispose(r),ot(r)]),oe.delete(r);let l=Gt(r,Ft({...t,directory:r}));return Bt(r),await l},async dispose(){let t=Z.directory;ee.Default.info("disposing instance",{directory:t}),await Promise.all([ke.dispose(t),ot(t)]),oe.delete(t),Bt(t)},async disposeAll(){return Me.all||(Me.all=be(async()=>{ee.Default.info("disposing all instances");let t=[...oe.entries()];for(let[r,l]of t){if(oe.get(r)!==l)continue;let u=await l.catch(_=>{ee.Default.warn("instance dispose failed",{key:r,error:_})});if(!u){oe.get(r)===l&&oe.delete(r);continue}oe.get(r)===l&&await de.provide(u,async()=>{await Z.dispose()})}}).finally(()=>{Me.all=void 0})),Me.all}};var Lr=wr.makeMemoMapUnsafe();function je(t){try{let r=Z.current;return br.provideService(t,we,r)}catch(r){if(!(r instanceof te.NotFound))throw r}return t}e(je,"attach");function Ut(t,r){let l,u=e(()=>l??=vr.make(r,{memoMap:Lr}),"getRuntime");return{runSync:e(_=>u().runSync(je(t.use(_))),"runSync"),runPromiseExit:e((_,g)=>u().runPromiseExit(je(t.use(_)),g),"runPromiseExit"),runPromise:e((_,g)=>u().runPromise(je(t.use(_)),g),"runPromise"),runFork:e(_=>u().runFork(je(t.use(_))),"runFork"),runCallback:e(_=>u().runCallback(je(t.use(_))),"runCallback")}}e(Ut,"makeRuntime");export{$e as a,be as b,ze as c,Xe as d,H as e,Zr as f,nt as g,Ke as h,tr as i,_e as j,A as k,Ee as l,w as m,he as n,ir as o,Fo as p,Go as q,$o as r,ct as s,at as t,re as u,Ie as v,lt as w,Et as x,Z as y,Lr as z,Ut as A};