@opencode/console 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.md +13 -1
  2. package/THIRD_PARTY_LICENSES.md +16 -0
  3. package/chunk-0067hzw7.js +11 -0
  4. package/chunk-0trayd9n.js +2 -0
  5. package/chunk-37whdg3n.js +1 -0
  6. package/chunk-6bc9ezw6.js +1 -0
  7. package/chunk-71rwyxw2.js +2 -0
  8. package/chunk-78cwb109.js +162 -0
  9. package/chunk-7k3ymrp6.js +254 -0
  10. package/chunk-83pr45e8.js +1 -0
  11. package/{chunk-fzckrdm3.js → chunk-96f5c0tj.js} +2 -2
  12. package/chunk-ak1n0cs7.js +2 -0
  13. package/{chunk-c16zjbe1.js → chunk-b02r286p.js} +1 -1
  14. package/chunk-cdc5arvh.js +1 -0
  15. package/{chunk-zdf3mvav.js → chunk-dnepb5ke.js} +2 -2
  16. package/chunk-et9y1sb5.js +2 -0
  17. package/chunk-g9bke322.js +1 -0
  18. package/chunk-gvywgb0d.js +1 -0
  19. package/chunk-gxedprvk.js +32 -0
  20. package/{chunk-kdkxhbxc.js → chunk-jem7z938.js} +2 -2
  21. package/chunk-kpp48ne0.js +1 -0
  22. package/chunk-ktx666b5.js +2 -0
  23. package/chunk-m3n97pxp.js +1 -0
  24. package/chunk-n5bt7jzp.js +3 -0
  25. package/chunk-px1nqkzb.js +2 -0
  26. package/chunk-rx6cjbq2.js +63 -0
  27. package/chunk-sbkpkav3.js +1 -0
  28. package/chunk-t8p1svd4.js +1 -0
  29. package/chunk-tx5wws16.js +2 -0
  30. package/chunk-vy3ahcaj.js +2 -0
  31. package/chunk-w6kmmxmz.js +1 -0
  32. package/chunk-wd4mfvqy.js +2 -0
  33. package/chunk-wkrya350.js +1 -0
  34. package/chunk-ysgtje2z.js +1 -0
  35. package/chunk-zgcspk2g.js +1 -0
  36. package/dsh-plugin.js +1 -0
  37. package/index.js +66 -54
  38. package/package.json +3 -2
  39. package/pi-extension.js +2 -2
  40. package/chunk-03p95nje.js +0 -6
  41. package/chunk-2ktsq2gj.js +0 -3
  42. package/chunk-2y9vn023.js +0 -1
  43. package/chunk-5q7mrvv1.js +0 -2
  44. package/chunk-5w6hy202.js +0 -1
  45. package/chunk-6mydq7cv.js +0 -2
  46. package/chunk-6rpbc10h.js +0 -2
  47. package/chunk-81fv1abj.js +0 -2
  48. package/chunk-aym5xapq.js +0 -1
  49. package/chunk-bkr0zk6g.js +0 -32
  50. package/chunk-c9kvdzct.js +0 -1
  51. package/chunk-eyf3z07t.js +0 -1
  52. package/chunk-frqdgjbd.js +0 -17
  53. package/chunk-hpy9mszv.js +0 -1
  54. package/chunk-jh21wbwd.js +0 -2
  55. package/chunk-kvqewrn5.js +0 -1
  56. package/chunk-mpmqsnkz.js +0 -1
  57. package/chunk-mzpdnb17.js +0 -1
  58. package/chunk-nvh2a5rc.js +0 -254
  59. package/chunk-p59r4b0j.js +0 -2
  60. package/chunk-p7wsm5k0.js +0 -1
  61. package/chunk-sn451nak.js +0 -2
  62. package/chunk-vqmbpbbm.js +0 -1
  63. package/chunk-wjghq897.js +0 -63
  64. package/chunk-xeq3evq0.js +0 -1
@@ -0,0 +1 @@
1
+ import{ws,gr,xr,Si,vi,yr,qn,br,wi,Es,ks,io,Cs,Ot,ao,As,Is,Ts,Os,_s}from"./chunk-0trayd9n.js";import"./chunk-gvywgb0d.js";import"./chunk-dnepb5ke.js";export{_s as ConsoleClient,br as DeviceSignInFailed,xr as OAuth,qn as SignedOut,yr as SsoRequired,Es as authorize,gr as clientID,ao as codexModelsPath,ws as defaultServer,As as fetchCodexModels,Cs as fetchConfig,Ot as fetchModels,Is as fetchSkill,Ts as fetchSkillBlob,wi as headers,Os as normalizeServer,ks as refresh,io as revoke,Si as signedOutMessage,vi as ssoMessage};
@@ -0,0 +1 @@
1
+ import{ya,Xr,Xo,eo,Un,ui,es,pi,ts,Ln,ns,rs,to,pn,os,ba,ss}from"./chunk-0067hzw7.js";import"./chunk-96f5c0tj.js";import"./chunk-71rwyxw2.js";import"./chunk-78cwb109.js";import"./chunk-ktx666b5.js";import"./chunk-tx5wws16.js";import"./chunk-px1nqkzb.js";import"./chunk-0trayd9n.js";import"./chunk-gvywgb0d.js";import"./chunk-wd4mfvqy.js";import"./chunk-dnepb5ke.js";export{ss as DeepSeekHarness,Un as MCP_SERVICE,Xo as REALM,ui as Route,eo as SERVICE,Xr as TOKEN,Ln as Unreadable,ns as checks,pi as defaultModel,rs as invokedSkills,pn as manifest,to as manifestFile,ts as mcpConfig,ya as paths,os as refresh,ba as remove,es as routes};
@@ -0,0 +1,2 @@
1
+ import{ws,xr,Es,ks,io,Os}from"./chunk-0trayd9n.js";import{gn,Kt,ke,J,be,W}from"./chunk-wd4mfvqy.js";import{k,F,ve,vt,I,G,g,en,Pr,qi,D,Fr,z,Z}from"./chunk-gxedprvk.js";var Ss={};k(Ss,{ConsoleCredentials:()=>Ss,fresh:()=>Be,login:()=>va,logout:()=>wa,organization:()=>jn,owner:()=>ye,read:()=>Ee,stored:()=>so});import{createHash as c}from"node:crypto";var d=z(Z(xr)),f=300000;function Ee(e){let n=e.env.OPENCODE_API_KEY;if(!n)return so(e);let o=e.env.OPENCODE_CONSOLE_SERVER?.trim();if(!o)return{type:"key",server:ws,key:n};let r=Os(o);if(!r)throw Error(`OPENCODE_CONSOLE_SERVER isn't a Console URL: ${o}. Use an https:// URL, or http:// only for localhost.`);return{type:"key",server:r,key:n}}function so(e){let n=i(e);if(n.corrupt)throw Error(`The sign-in in ${gn(e)} can't be read. Run \`npx @opencode/console login\` to replace it or \`npx @opencode/console logout\` to remove it.`);return n.credential}function ye(e){return JSON.stringify([e.server,e.type==="key"?c("sha256").update(e.key).digest("hex").slice(0,16):e.accountID,e.type==="oauth"?e.orgID:void 0])}function jn(e){return e.type==="oauth"?e.orgName:void 0}var va=D("ConsoleCredentials.login")(function*(e,n){let o=yield*Es(n.server);yield*n.prompt(o);let r=yield*o.callback,t=yield*ke(e,I(()=>{let l=i(e).credential;if(be(gn(e),JSON.stringify(r)),!l||ye(l)!==ye(r))W(Kt(e));return l}));if(t)yield*io(t).pipe(en);return r}),Be=D("ConsoleCredentials.fresh")(function*(e){let n=Ee(e);if(!n||n.type==="key"||!(yield*s(n)))return n;let o=yield*ke(e,G(function*(){let r=so(e);if(!r||!(yield*s(r)))return r;let t=yield*ks(r).pipe(Pr(ve(30)));if(i(e).credential?.refresh!==r.refresh)return so(e);return be(gn(e),JSON.stringify(t)),t})).pipe(qi);return yield*Fr(o)}),wa=D("ConsoleCredentials.logout")(function*(e){let n=yield*ke(e,I(()=>{let o=i(e).credential;return W(gn(e)),W(Kt(e)),o}));if(!n)return!1;return yield*io(n).pipe(en),!0});function s(e){return vt.pipe(g((n)=>e.expires-f<=n))}function i(e){let n=J(gn(e));if(n===void 0)return{};let o=F(d(n));return o?{credential:o}:{corrupt:!0}}
2
+ export{Ee,so,ye,jn,va,Be,wa,Ss};
@@ -0,0 +1,2 @@
1
+ import{Ot}from"./chunk-0trayd9n.js";import{ke,J,be,W,Pt}from"./chunk-wd4mfvqy.js";import{Ee,ye}from"./chunk-tx5wws16.js";import{Le}from"./chunk-et9y1sb5.js";import{ur,yt,bt,pr,$n,Qe,fn,_,at,je,It,Tt}from"./chunk-78cwb109.js";import{Ct,cr}from"./chunk-96f5c0tj.js";import{le}from"./chunk-ak1n0cs7.js";import{k,He,F,I,Tn,z,S,j,e,v,n,x,Z}from"./chunk-gxedprvk.js";var Qo={};k(Qo,{Pi:()=>Qo,Unreadable:()=>Zr,checks:()=>Wo,defaultModel:()=>Ko,directory:()=>Dn,manifest:()=>Vo,manifestFile:()=>Yr,models:()=>Zo,modelsFile:()=>Qr,paths:()=>ha,providers:()=>zo,remove:()=>xa,setup:()=>ga,skillCommand:()=>Go,skills:()=>Yo,userBash:()=>Jo});import{createHash as A}from"node:crypto";import{rmSync as R}from"node:fs";import P from"node:os";import u from"node:path";import{fileURLToPath as U}from"node:url";function ha(t=process.env,r=P.homedir()){let o=t.PI_CODING_AGENT_DIR?.trim(),s=o?u.resolve(o==="~"?r:o.startsWith("~/")?u.join(r,o.slice(2)):o):u.join(r,".pi","agent");return{agent:s,settings:u.join(s,"settings.json")}}function zo(t,r){return[...Map.groupBy(Ct(t).flatMap((s)=>E(s,r)??[]),(s)=>s.provider)].map(([s,i])=>({id:s,name:t[s]?.name??s,models:i}))}function Ko(t){let r=Ct(t).filter((s)=>M(s)!==void 0),o=cr(r,"sonnet","opus","haiku");return o&&{provider:o.provider,id:o.id}}var b={messages:"anthropic-messages",responses:"openai-responses","chat-completions":"openai-completions","generate-content":"google-generative-ai"};function M(t){let r=_(t.entry.api),o=Object.keys(b).find((i)=>(i in r)),s=o&&at(_(r[o]).base_url);return o&&s?{api:b[o],baseURL:s}:void 0}function E(t,r){let o=M(t);if(!o)return;let s=o.api,i=r(t.provider,t.id,s),c=i?.api===s?i:void 0,d=t.entry,p=_(d.limit),a=_(_(d.cost).text),l=_(a.input),g=_(l.cache),h=_(d.modalities).input,y=_(_(d.capabilities).reasoning).supported;return{...s==="openai-completions"?{compat:D}:{},...c,id:t.id,name:at(d.name)??c?.name??t.id,api:s,provider:t.provider,baseUrl:s==="anthropic-messages"?o.baseURL.replace(/\/v1\/?$/,""):o.baseURL,reasoning:typeof y==="boolean"?y:c?.reasoning??!1,input:Array.isArray(h)?h.some((w)=>typeof w==="string"&&w.startsWith("image"))?["text","image"]:["text"]:c?.input??["text"],cost:{input:f(l.price)??c?.cost.input??0,output:f(_(a.output).price)??c?.cost.output??0,cacheRead:f(g.read)??c?.cost.cacheRead??0,cacheWrite:f(C(g.write))??f(C(_(g.explicit).write))??c?.cost.cacheWrite??0},contextWindow:f(p.context)??c?.contextWindow??128000,maxTokens:f(p.output)??c?.maxTokens??16384,headers:{...c?.headers,"x-opencode-plugin":`opencode-console/${le}`}}}var D={supportsStore:!1,supportsDeveloperRole:!1,supportsStrictMode:!0,maxTokensField:"max_tokens"};function C(t){return typeof t==="object"&&t!==null?Object.values(t)[0]:t}function f(t){return typeof t==="number"&&Number.isFinite(t)?t:void 0}class Zr extends Error{}function Wo(t,r){let o=(a,l,g={})=>({action:a,resources:l,directory:r.cwd,...g}),s=t.toolName,i=(a)=>{let l=t.input[a];return typeof l==="string"&&l!==""?l:void 0},c=(a)=>{let l=i(a);if(l===void 0)throw new Zr(`${s}'s input has no ${a}`);return l},d=r.home??P.homedir(),p=(a)=>m(c(a),d);if(s.startsWith("mcp__"))return L(s,r.server).map((a)=>o(a.action,a.resources,a));switch(s){case"bash":return[o("shell",[c("command")],{shell:"bash"})];case"powershell":return[o("shell",[c("command")],{shell:"pwsh"})];case"read":{let a=p("path"),l=r.skills&&N(r.skills,u.resolve(r.cwd,a));return[l?o("skill",[l]):o("read",[a])]}case"write":case"edit":return[o("edit",[p("path")])];case"ls":return[o("read",[m(i("path")??".",d)])];case"grep":case"find":{let a=i("path");return[o(s==="find"?"glob":"grep",[c("pattern")],a===void 0?{}:{path:m(a,d)})]}case"read_mcp_resource":return[o("mcp.use",[c("server")])];case"list_mcp_resources":case"list_mcp_resource_templates":{let a=i("server"),l=r.servers??[];return[o("mcp.use",a?[a]:l.length>0?l:["*"])]}default:return[o(s.toLowerCase(),["*"])]}}function m(t,r){let o=t.replace(/[\u00A0\u2000-\u200A\u202F\u205F\u3000]/g," "),s=o.startsWith("@")?o.slice(1):o,i=s==="~"?r:s.startsWith("~/")?u.join(r,s.slice(2)):s;return i.startsWith("file://")?U(i):i}function N(t,r){let o=u.relative(u.resolve(t),r);if(o===""||o.startsWith("..")||u.isAbsolute(o))return;return o.split(u.sep)[0]}function L(t,r){let o=r&&`mcp__${r.replace(/[^A-Za-z0-9_]/g,"_")}__`,s=t.match(/^mcp__(.+?)__(.+)$/),i=r??s?.[1];if(!i)throw new Zr(`Can't tell which MCP server ${t} belongs to`);let c=o&&t.startsWith(o)?t.slice(o.length):r?void 0:s?.[2],d=r!==void 0,p=c===void 0||/_[0-9a-f]{8}$/.test(t);return[{action:"mcp.use",resources:[i],...d?{}:{folded:!0}},p?{action:`${i}_`,resources:["*"],truncated:!0,folded:!0}:{action:`${i}_${c}`,resources:["*"],folded:!0}]}function Jo(t){return{action:"shell",resources:[t.command],directory:t.cwd,shell:"bash"}}function Go(t){return t.match(/^\/skill:([^\s]+)/)?.[1]}var O=n({paths:n({agent:e,settings:e}),extension:e,created:v,...ur}),Yr=(t)=>u.join(t.data,"pi.json"),Dn=(t)=>u.join(t.data,"pi"),Qr=(t)=>u.join(t.cache,"pi-models.json");function Vo(t){let r=Yr(t),o=J(r);if(o===void 0)return;let s=F(z(Z(O))(o));if(!s)throw Error(`${r} can't be read, so Pi was left as it is. Delete it and run setup again.`);return s}function ga(t,r){let o=Vo(t),s=o?.created??J(r.paths.settings)===void 0,i=yt(r.paths.settings)??{};if(!o)fn(r.paths.settings);let c=Array.isArray(i.extensions)?i.extensions:[];i.extensions=[...c.filter((p)=>p!==o?.extension&&p!==r.extension),r.extension];let d=pr(i,r.model?{defaultProvider:r.model.provider,defaultModel:r.model.id}:{},o,!0);bt(r.paths.settings,i,384),be(Yr(t),JSON.stringify(O.make({paths:r.paths,extension:r.extension,created:s,...d})))}function xa(t){let r=Vo(t);if(!r)return!1;let o=yt(r.paths.settings);if(o){let i=(Array.isArray(o.extensions)?o.extensions:[]).filter((c)=>c!==r.extension);if(i.length>0)o.extensions=i;else delete o.extensions;if(Object.keys(r.originals).forEach((c)=>$n(o,c,r)),Object.keys(o).length===0&&r.created)W(r.paths.settings);else bt(r.paths.settings,o)}return W(Qe(r.paths.settings)),R(Dn(t),{recursive:!0,force:!0}),W(Qr(t)),W(Yr(t)),!0}var B=n({owner:e,providers:e,document:x(e,j)}),T=x(e,n({name:S(e),models:x(e,x(e,j))}));async function Zo(t){let r=Ee(t.store),o=await Le(t);if(!r||!o?.config)return;let s=ye(r),i=A("sha256").update(JSON.stringify(o.config.providers??null)).digest("hex"),c=F(z(Z(B))(J(Qr(t.store))??"")),d=c?.owner===s&&c.providers===i?c.document:void 0,p=d&&F(z(T)(d));if(p)return p;let a=await t.run(Ot(r));return be(Qr(t.store),JSON.stringify({owner:s,providers:i,document:a})),a}var G=x(e,e);async function Yo(t){let r=Ee(t.store),o=await Le(t),s=u.join(Dn(t.store),"skills"),i=u.join(Dn(t.store),"skills.json");if(!r||!o?.config)return s;let c=je(o.config).skills,d=He(z(Z(G))(J(i)??""),()=>({})),p=await t.run(It(r,s,c,d));return await Tn(ke(t.store,I(()=>{Pt(s),be(i,JSON.stringify(Tt(s,c,p,d).skills))}))),s}
2
+ export{ha,zo,Ko,Zr,Wo,Jo,Go,Yr,Dn,Qr,Vo,ga,xa,Zo,Yo,Qo};
@@ -0,0 +1 @@
1
+ import{Ee,so,ye,jn,va,Be,wa,Ss}from"./chunk-tx5wws16.js";import"./chunk-0trayd9n.js";import"./chunk-gvywgb0d.js";import"./chunk-wd4mfvqy.js";import"./chunk-dnepb5ke.js";export{Ss as ConsoleCredentials,Be as fresh,va as login,wa as logout,jn as organization,ye as owner,Ee as read,so as stored};
@@ -0,0 +1,2 @@
1
+ import{k,Mi,Ni,ge,en,Zs}from"./chunk-gxedprvk.js";var Fs={};k(Fs,{ConsoleStore:()=>Fs,credentialFile:()=>gn,ensureDir:()=>Pt,locked:()=>ke,make:()=>vr,modified:()=>Ns,read:()=>J,remove:()=>W,snapshotFile:()=>Kt,syncClaimFile:()=>Ms,unreachable:()=>mo,write:()=>be});import{randomUUID as oe}from"node:crypto";import{chmodSync as ne,mkdirSync as ae,readFileSync as ie,renameSync as se,rmSync as q,statSync as ce,writeFileSync as fe}from"node:fs";import E from"node:path";import _ from"path";import K from"os";import{randomBytes as Y,randomUUID as V}from"crypto";import{mkdir as S,readFile as B,rm as M,stat as z,utimes as Q,writeFile as A}from"fs/promises";import{createHash as C}from"crypto";var x;(function(e){function i(w){return C("sha1").update(w).digest("hex")}e.fast=i;function s(w){return C("sha256").update(w).digest("hex")}e.sha256=s})(x||(x={}));var Hn;(function(e){let i;function s(r){i=r}e.setGlobal=s;let w=()=>{if(!i)throw Error("Flock global not set");return _.join(i.state,"locks")},b={staleMs:60000,timeoutMs:300000,baseDelayMs:100,maxDelayMs:2000};function g(r){if(typeof r!=="object"||r===null||!("code"in r))return;let t=r.code;if(typeof t!=="string")return;return t}function H(r,t){return new Promise((n,c)=>{if(t?.aborted){c(t.reason??Error("Aborted"));return}let a,f=()=>{t?.removeEventListener("abort",o),n()},o=()=>{if(a)clearTimeout(a);t?.removeEventListener("abort",o),c(t?.reason??Error("Aborted"))};t?.addEventListener("abort",o,{once:!0}),a=setTimeout(f,r)})}function F(r){let t=Math.floor(r*0.3),n=Math.floor(Math.random()*(2*t+1))-t;return Math.max(0,r+n)}function N(){return performance.now()}function j(){return performance.timeOrigin+N()}async function v(r){try{return await z(r)}catch(t){let n=g(t);if(n==="ENOENT"||n==="ENOTDIR")return;throw t}}async function I(r,t,n,c){let a=j(),f=await v(t);if(f)return a-f.mtimeMs>c;let o=await v(n);if(o)return a-o.mtimeMs>c;let l=await v(r);if(!l)return!1;return a-l.mtimeMs>c}async function G(r,t){let n=V?.()??Y(16).toString("hex"),c=_.join(r,"meta.json"),a=_.join(r,"heartbeat");try{await S(r,{mode:448})}catch(O){if(g(O)!=="EEXIST")throw O;if(!await I(r,a,c,t.staleMs))return{acquired:!1};let d=r+".breaker";try{await S(d,{mode:448})}catch(u){let p=g(u);if(p==="EEXIST"){let D=await v(d);if(D&&j()-D.mtimeMs>t.staleMs)await M(d,{recursive:!0,force:!0}).catch(()=>{return});return{acquired:!1}}if(p==="ENOENT"||p==="ENOTDIR")return{acquired:!1};throw u}try{if(!await I(r,a,c,t.staleMs))return{acquired:!1};await M(r,{recursive:!0,force:!0});try{await S(r,{mode:448})}catch(u){let p=g(u);if(p==="EEXIST"||p==="ENOTEMPTY")return{acquired:!1};throw u}}finally{await M(d,{recursive:!0,force:!0}).catch(()=>{return})}}let f={token:n,pid:process.pid,hostname:K.hostname(),createdAt:new Date().toISOString()};await A(a,"",{flag:"wx"}).catch(async()=>{throw await M(r,{recursive:!0,force:!0}),Error("Lock acquired but heartbeat already existed (possible compromise).")}),await A(c,JSON.stringify(f,null,2),{flag:"wx"}).catch(async()=>{throw await M(r,{recursive:!0,force:!0}),Error("Lock acquired but meta.json already existed (possible compromise).")});let o;return{acquired:!0,startHeartbeat:(O=Math.max(100,Math.floor(t.staleMs/3)))=>{if(o)return;o=setInterval(()=>{let d=new Date;Q(a,d,d).catch(()=>{return})},O),o.unref?.()},release:async()=>{if(o)clearInterval(o),o=void 0;if((await B(c,"utf8").then((d)=>{let u=JSON.parse(d);if(!u||typeof u!=="object")return{};return{token:"token"in u&&typeof u.token==="string"?u.token:void 0}}).catch((d)=>{let u=g(d);if(u==="ENOENT"||u==="ENOTDIR")throw Error("Refusing to release: lock is compromised (metadata missing).");if(d instanceof SyntaxError)throw Error("Refusing to release: lock is compromised (metadata invalid).");throw d})).token!==n)throw Error("Refusing to release: lock token mismatch (not the owner).");await M(r,{recursive:!0,force:!0})}}}async function X(r,t,n){let c=N()+n.timeoutMs,a=0,f=0,o=n.baseDelayMs;while(!0){t.signal?.throwIfAborted();let l=await G(r,n);if(l.acquired)return l;if(N()>c)throw Error(`Timed out waiting for lock: ${t.key}`);a+=1;let y=F(o);await t.onWait?.({key:t.key,attempt:a,delay:y,waited:f}),await H(y,t.signal),f+=y,o=Math.min(n.maxDelayMs,Math.floor(o*1.7))}}async function T(r,t={}){t.signal?.throwIfAborted();let n={staleMs:t.staleMs??b.staleMs,timeoutMs:t.timeoutMs??b.timeoutMs,baseDelayMs:t.baseDelayMs??b.baseDelayMs,maxDelayMs:t.maxDelayMs??b.maxDelayMs},c=t.dir??w();await S(c,{recursive:!0});let a=_.join(c,x.fast(r)+".lock"),f=await X(a,{key:r,onWait:t.onWait,signal:t.signal},n);f.startHeartbeat();let o=()=>f.release();return{release:o,[Symbol.asyncDispose](){return o()}}}e.acquire=T;async function U(r,t,n={}){let a=[];try{const c=Mi(a,await T(r,n),1);n.signal?.throwIfAborted();return await t()}catch(f){var o=f,l=1}finally{var y=Ni(a,o,l);y&&await y}}e.withLock=U})(Hn||(Hn={}));import P from"os";import m from"path";var h=P.homedir(),Z=process.env.XDG_DATA_HOME||(h?m.join(h,".local","share"):void 0),ee=process.env.XDG_CACHE_HOME||(h?m.join(h,".cache"):void 0),te=process.env.XDG_CONFIG_HOME||(h?m.join(h,".config"):void 0),re=process.env.XDG_STATE_HOME||(h?m.join(h,".local","state"):void 0);function fo(e){return{data:m.join(Z,e),cache:m.join(ee,e),config:m.join(te,e),state:m.join(re,e),tmp:m.join(P.tmpdir(),e)}}function vr(e={}){let i=e.env??{OPENCODE_API_KEY:process.env.OPENCODE_API_KEY,OPENCODE_CONSOLE_SERVER:process.env.OPENCODE_CONSOLE_SERVER};if(e.root)return{data:E.join(e.root,"data"),cache:E.join(e.root,"cache"),env:i};let s=fo("opencode-console");return{data:s.data,cache:s.cache,env:i}}var gn=(e)=>E.join(e.data,"credential.json"),Kt=(e)=>E.join(e.cache,"config.json"),Ms=(e)=>E.join(e.cache,"sync.claim"),ue=30000,R=35000;function ke(e,i){return Zs(ge({try:()=>(Pt(e.data),Pt(E.join(e.data,"locks")),Hn.acquire("credential",{dir:E.join(e.data,"locks"),staleMs:ue,timeoutMs:R})),catch:(s)=>s instanceof Error&&s.message.startsWith("Timed out waiting for lock")?Error(`Timed out after ${R/1000}s waiting for another opencode-console process to update the sign-in`,{cause:s}):s}),()=>i,(s)=>ge(()=>s.release()).pipe(en))}function J(e){try{return ie(e,"utf8")}catch(i){if(L(i)==="ENOENT")return;throw i}}function Ns(e){try{return ce(e,{throwIfNoEntry:!1})?.mtimeMs}catch(i){if(mo(i))return;throw i}}function be(e,i){Pt(E.dirname(e));let s=`${e}.${oe()}.tmp`;fe(s,i,{mode:384,flag:"wx"});try{se(s,e)}catch(w){throw q(s,{force:!0}),w}}function W(e){q(e,{force:!0})}function mo(e){return["ENOENT","ENOTDIR","EACCES","EPERM"].includes(L(e)??"")}function Pt(e){if(ae(e,{recursive:!0,mode:448}),process.platform!=="win32")ne(e,448)}function L(e){return e instanceof Error&&"code"in e&&typeof e.code==="string"?e.code:void 0}
2
+ export{Hn,fo,vr,gn,Kt,Ms,ke,J,Ns,be,W,mo,Pt,Fs};
@@ -0,0 +1 @@
1
+ import{je,dr,Xe,It,Tt,dn,hi,gi,hs}from"./chunk-78cwb109.js";import"./chunk-0trayd9n.js";import"./chunk-gvywgb0d.js";import"./chunk-wd4mfvqy.js";import"./chunk-dnepb5ke.js";export{hs as Library,It as fetchChanged,je as library,gi as namedSkillMarkdown,dr as prompt,Xe as servers,hi as skillMarkdown,Tt as write,dn as writeInstructions};
@@ -0,0 +1 @@
1
+ import{_i,Ri}from"./chunk-dnepb5ke.js";import{Y,ae,X,go,ct,Nt,We,Qt,Hs,Xt,Li,ce,ni,Br,Hr,Lo,si,ka,Ca}from"./chunk-gxedprvk.js";export{_i as Brand,We as Cause,Li as Clock,ae as Context,Nt as Data,Br as DateTime,ct as Duration,ce as Effect,Qt as Exit,ni as Fiber,Ca as FileSystem,Xt as Layer,Y as Option,Ri as Path,go as Record,X as Result,ka as Schema,Hr as SchemaGetter,Lo as SchemaTransformation,Hs as Scope,si as Struct};
@@ -0,0 +1 @@
1
+ import{vr,gn,Kt,Ms,ke,J,Ns,be,W,mo,Pt,Fs}from"./chunk-wd4mfvqy.js";import"./chunk-dnepb5ke.js";export{Fs as ConsoleStore,gn as credentialFile,Pt as ensureDir,ke as locked,vr as make,Ns as modified,J as read,W as remove,Kt as snapshotFile,Ms as syncClaimFile,mo as unreachable,be as write};
package/dsh-plugin.js ADDED
@@ -0,0 +1 @@
1
+ import"./chunk-dnepb5ke.js";import"./chunk-gvywgb0d.js";import"./chunk-0trayd9n.js";import{vr}from"./chunk-wd4mfvqy.js";import{Ee,ye,Be}from"./chunk-tx5wws16.js";import{je,dr,Xe}from"./chunk-78cwb109.js";import"./chunk-px1nqkzb.js";import"./chunk-ktx666b5.js";import{$e}from"./chunk-71rwyxw2.js";import{Xr,eo,Un,ts,ns,rs,pn,os}from"./chunk-0067hzw7.js";import"./chunk-rx6cjbq2.js";import{sr,xt,Le}from"./chunk-et9y1sb5.js";import"./chunk-96f5c0tj.js";import{le}from"./chunk-ak1n0cs7.js";import{L,Ge,Ie}from"./chunk-gxedprvk.js";import k from"node:os";import w from"node:path";var K="opencode-console",U=["tools","llm"];function z(e){if(typeof e.tools?.guard!=="function")throw Error("opencode-console needs a newer DeepSeek Harness (tools.guard). Upgrade dsh, or run `npx @opencode/console setup deepseek-harness --remove`.");let n=C(),r=sr(n?{harness:n}:{});v(e,r)}function S(e,n){let r=new WeakSet,s=()=>{let o=g(n);return o?Xe(o):{}};return{preExecute:async(o,c)=>{let t=await P(e,n,o).then((a)=>xt(n,a)).catch((a)=>m(o.name,a));if(t?.effect==="deny")return{kind:"deny",reason:t.message};return r.add(o),c()},guard:(o)=>{if(r.delete(o))return;return`opencode-console didn't check ${o.name}, so it was blocked`},stream:(o,c)=>async function*(){let t=await xt(n,[{action:"provider.use",resources:E(o.provider)}]).catch((a)=>m(o.provider,a));if(t?.effect==="deny")throw Error(t.message);yield*c()}(),requestHeaders:(o,c,t)=>{if(o.sessionId&&c.has("x-opencode-plugin"))c.set("x-opencode-session",o.sessionId);return t()},preStep:async(o,c)=>{let t=rs(o.messages);if(t.length===0)return c();let a=await xt(n,t.map((u)=>({action:"skill",resources:[u]}))).catch((u)=>m(`/${t.join(", /")}`,u));if(a?.effect!=="deny")return c();throw Error(a.message)},credentials:h(n),mcp:{server:(o)=>ts(o,s()[o])},servers:s,instructions:()=>{let o=g(n);return dr(o?je(o).instructions:[])??""}}}function v(e,n){let r=S(e,n);e.provide("credentials",r.credentials),e.provide(eo,{version:le}),e.on("tools/pre-execute",r.preExecute,!0),e.tools.guard(r.guard),e.on("llm/stream",r.stream,!0),e.on("llm-pi-ai/request-headers",r.requestHeaders),e.on("agent/pre-step",r.preStep,!0);let s=e.get("systemPrompt");if(s)s.section({name:"opencode_workspace_instructions",order:s.getSectionOrder("MCP_SERVERS")+50,interpolate:!1,text:r.instructions});let i={servers:JSON.stringify(r.servers()),dispose:e.provide(Un,r.mcp)},p={},l=async()=>{if(!b(n))return;let d=await Le(n);if(d===void 0||d.fetched===p.fetched)return;p.fetched=d.fetched,await n.run(os(n.store));let f=JSON.stringify(r.servers());if(f===i.servers)return;i.dispose(),i.servers=f,i.dispose=e.provide(Un,r.mcp)};e.effect(()=>{l().catch(()=>{return});let d=setInterval(()=>void l().catch(()=>{return}),60000);return d.unref?.(),()=>clearInterval(d)},"opencode-console sync")}function h(e){let n=async(s)=>{if(s===Xr){let i=await e.run(Be(e.store));if(!i)return;return{value:i.type==="key"?i.key:i.access,source:"OpenCode Console"}}return},r=()=>Promise.reject(Error("OpenCode Console's credentials are read-only"));return{resolve:n,describe:async(s)=>({configured:await n(s)!==void 0,writable:!1}),set:r,unset:r,readRecord:()=>Promise.resolve(void 0),describeRecord:()=>Promise.resolve({configured:!1,writable:!1}),listRecords:()=>Promise.resolve([]),modifyRecord:r,deleteRecord:()=>Promise.resolve()}}async function P(e,n,r){let s=r.agent,i=e.get("workingDirectory"),p=e.get("fs"),l=async(u,y)=>p?p.processPath(await p.resolve(u,{cwd:y,signal:r.signal})):w.resolve(y,u.replace(/^~(?=$|[\\/])/,k.homedir())),d=s?.session?.header?.cwd??process.cwd(),f=s&&i?await i.ensure(s,r.signal):d,o=await l(d,d),c=await l(f,f),t=g(n),a=pn(n.store)?.paths.skills;return ns({name:r.name,input:r.arguments},{directory:o,cwd:c,resolve:(u)=>l(u,c),servers:Object.keys(t?Xe(t):{}),...a?{skills:await l(a,a)}:{}})}function g(e){return Ie(L(()=>{let n=Ee(e.store);return n&&$e(e.store,ye(n))?.config}).pipe(Ge(()=>{return})))}function E(e){return e.startsWith("deepseek-")?[e,"deepseek"]:[e]}function b(e){return Ie(L(()=>Ee(e.store)!==void 0).pipe(Ge(()=>!0)))}function m(e,n){return{effect:"deny",message:`opencode-console couldn't check ${e}: ${n instanceof Error?n.message:String(n)}`}}function C(){let e=vr();return Ie(L(()=>pn(e)?.harness).pipe(Ge(()=>{return})))}export{z as apply,S as handlers,U as inject,v as install,K as name};
package/index.js CHANGED
@@ -1,78 +1,90 @@
1
1
  #!/usr/bin/env node
2
- import{Me}from"./chunk-jh21wbwd.js";import{spawn as F}from"node:child_process";import N from"node:path";import{parseArgs as q}from"node:util";var S=q({allowPositionals:!0,strict:!1,options:{harness:{type:"string"},server:{type:"string"},json:{type:"boolean"},quiet:{type:"boolean"},remove:{type:"boolean"}}}),y=S.positionals[0],g=S.values,k=R("harness")??process.env.OPENCODE_CONSOLE_HARNESS,_="Not signed in. Run `npx @opencode/console login` or set OPENCODE_API_KEY.",j=["claude-code","pi","codex"],H=["claude-code","codex"],J={check:B,hook:V,login:Z,logout:se,"mcp-headers":ne,setup:Q,status:re,sync:ie,token:ae},x,K=y?J[y]:void 0;if(!K)process.stdout.write(pe()),process.exit(y&&!["help","--help","-h"].includes(y)?1:0);process.exitCode=await K().catch(async(o)=>{if(y==="hook")return b(`opencode-console couldn't check this: ${h(o)}`);if(process.stderr.write(`${h(o)}
3
- `),y!=="check")return 1;return T(`opencode-console couldn't check this call: ${h(o)}`)});async function B(){let{Option:o,Schema:e}=await import("./chunk-p7wsm5k0.js"),t=e.decodeUnknownOption(e.fromJsonString(e.Struct({action:e.NonEmptyString,resources:e.NonEmptyArray(e.String),directory:e.optional(e.String),path:e.optional(e.String),shell:e.optional(e.String)})))(await L());if(o.isNone(t))return process.stderr.write(`Expected JSON on stdin: {"action": "...", "resources": ["...", ...]}
4
- `),T("opencode-console couldn't read this tool call, so it was blocked");let[s]=await M([t.value]);return process.stdout.write(`${JSON.stringify(s)}
5
- `),s?.effect==="deny"?2:0}async function V(){let o=S.positionals[1];if(!o||!H.includes(o))return process.stderr.write(`Usage: opencode-console hook <${H.join("|")}>
6
- `),2;let{Option:e}=await import("./chunk-p7wsm5k0.js"),{ClaudeCodeHook:t}=await import("./chunk-kdkxhbxc.js"),s=await L();x=t.eventName(s);let r=o==="codex"?await G(s):c(t.decode(s));if(r===void 0)return b("opencode-console couldn't read this hook's input, so it was blocked");if(x==="SessionStart")return X();if(r.length===0)return 0;let a=(await M(r)).find((n)=>n.effect==="deny");return a?.effect==="deny"?b(a.message):0;function c(n){return e.isNone(n)?void 0:t.checks(n.value)}}async function G(o){let{Option:e}=await import("./chunk-p7wsm5k0.js"),{CodexHook:t}=await import("./chunk-c16zjbe1.js"),{Library:s}=await import("./chunk-xeq3evq0.js"),{WorkspaceSnapshot:r}=await import("./chunk-c9kvdzct.js"),{ConsoleStore:a}=await import("./chunk-mpmqsnkz.js"),c=t.decode(o);if(e.isNone(c))return;let n=r.read(a.make())?.config??{};return t.checks(c.value,{directory:process.cwd(),platform:process.platform,servers:Object.keys(s.servers(n))})}async function X(){let{ConsoleStore:o}=await import("./chunk-mpmqsnkz.js"),{ConsoleCredentials:e}=await import("./chunk-kvqewrn5.js"),{WorkspaceSync:t}=await import("./chunk-hpy9mszv.js"),s=o.make(),r=e.read(s);if(!r)return 0;await A({always:!0,force:!0});let a=t.current(s,e.owner(r))?.status;if(a)process.stdout.write(`${JSON.stringify({systemMessage:`${a.message}${a.url?`: ${a.url}`:""}`})}
7
- `);return 0}async function M(o){let{Effect:e}=await import("./chunk-p7wsm5k0.js"),{ConsoleStore:t}=await import("./chunk-mpmqsnkz.js"),{ConsoleCredentials:s}=await import("./chunk-kvqewrn5.js"),{WorkspaceSnapshot:r}=await import("./chunk-c9kvdzct.js"),{PolicyEvaluator:a}=await import("./chunk-mzpdnb17.js"),c=t.make(),n=s.read(c),i=n&&s.owner(n),l=n?r.read(c):void 0,d=i&&l?.owner!==i?await(async()=>(await A({always:!0}),ce(()=>{let u=r.read(c);return u?.owner===i?u:void 0},3000)))():l&&r.stale(l,Date.now())?(await A(),l):l,p=r.workspace(n,d);return e.runPromise(e.forEach(o,(u)=>a.check(p,u)))}async function Z(){if(!await W())return 1;if(process.env.OPENCODE_API_KEY)process.stderr.write(`OPENCODE_API_KEY is set, so opencode-console keeps using that key until it's unset
8
- `);return 0}async function W(){let{Effect:o}=await import("./chunk-p7wsm5k0.js"),{openUrl:e}=await import("./chunk-aesb1szb.js"),{ConsoleClient:t}=await import("./chunk-vqmbpbbm.js"),{ConsoleStore:s}=await import("./chunk-mpmqsnkz.js"),{ConsoleCredentials:r}=await import("./chunk-kvqewrn5.js"),{WorkspaceSync:a}=await import("./chunk-hpy9mszv.js"),c=R("server")??process.env.OPENCODE_CONSOLE_SERVER??t.defaultServer,n=t.normalizeServer(c);if(!n){process.stderr.write(`Not a Console URL: ${c}
9
- `);return}let i=s.make(),l=await f(r.login(i,{server:n,prompt:(p)=>o.promise(async()=>{if(process.stderr.write(`Open ${p.url} and confirm the code ${p.code}
10
- `),process.stdout.isTTY)await e(p.url).catch(()=>{return})})})),d=await f(a.sync(i,{force:!0}));if(process.stdout.write(`Signed in to ${l.orgName??"OpenCode Console"}${l.email?` as ${l.email}`:""}
11
- `),d.error)process.stderr.write(`Couldn't fetch the workspace config: ${h(d.error)}. Run the command again to retry.
12
- `);return l}async function Q(){let o=S.positionals[1];if(!o||!j.includes(o))return process.stderr.write(`Usage: opencode-console setup <${j.join("|")}> [--remove]
13
- `),1;let e=o==="pi",t=o==="codex",s=e?"Pi":t?"Codex":"Claude Code",{ConsoleStore:r}=await import("./chunk-mpmqsnkz.js"),{ConsoleCredentials:a}=await import("./chunk-kvqewrn5.js"),{CliInstall:c}=await import("./chunk-5w6hy202.js"),{WorkspaceSync:n}=await import("./chunk-hpy9mszv.js"),i=r.make();if(g.remove===!0){let{Effect:v}=await import("./chunk-p7wsm5k0.js"),{ClaudeCode:O}=await import("./chunk-2ktsq2gj.js"),{Codex:P}=await import("./chunk-nvh2a5rc.js"),{Pi:C}=await import("./chunk-eyf3z07t.js"),Y=await v.runPromise(r.locked(i,v.sync(()=>{let U=e?C.remove(i):t?P.remove(i):O.remove(i);if(![O.manifestFile(i),C.manifestFile(i),P.manifestFile(i)].some((z)=>r.read(z)!==void 0))c.uninstall(i);return U})));return process.stdout.write(Y?`Removed OpenCode Console from ${s} and restored its settings. You're still signed in; \`npx @opencode/console logout\` signs out.
14
- `:`${s} wasn't set up with OpenCode Console
15
- `),0}let{ConsoleClient:l}=await import("./chunk-vqmbpbbm.js"),d=await de(e?"pi":t?"codex":"claude");if(d)k=e?`pi/${d}`:t?`codex_cli_rs/${d}`:`claude-cli/${d}`;let p=a.read(i),u=R("server");if(!p||u!==void 0&&p.server!==l.normalizeServer(u)){if(!await W())return 1}if(process.env.OPENCODE_API_KEY)process.stderr.write(`OPENCODE_API_KEY is set, so setup used that key, and ${s} will use it instead of your sign-in wherever it's set.
16
- `);let w=await f(n.sync(i,{force:!0}));if(!w.snapshot?.config)return process.stderr.write(`Couldn't fetch the workspace config${w.error?`: ${h(w.error)}`:""}. Run setup again.
17
- `),1;if(e&&D())return process.stderr.write("Set up Pi with the npm package: `npx @opencode/console setup pi`\n"),1;let E=c.install(i,{execPath:process.execPath,entry:D()?void 0:process.argv[1],path:process.env.PATH});if(t)return te(i,E,w.snapshot,d);return e?oe(i,E,w.snapshot,d):ee(i,E,w.snapshot,d)}async function ee(o,e,t,s){let{ClaudeCode:r}=await import("./chunk-2ktsq2gj.js"),{WorkspaceSnapshot:a}=await import("./chunk-c9kvdzct.js"),c=a.policies(t),n=await f(r.refresh(o,{paths:r.paths(),command:e,harness:s?`claude-cli/${s}`:void 0}));if(!n)return process.stderr.write(`Couldn't read the workspace config. Run setup again.
18
- `),1;let l=[`Claude Code now uses ${t.organization??"your workspace"} through OpenCode Console.`,"",...n.models?[` Models ${m(n.models.options.length,"model","models")} in /model; opus is ${n.models.tiers.opus}, sonnet ${n.models.tiers.sonnet}, haiku ${n.models.tiers.haiku}`]:[" Models none from the workspace, so Claude Code keeps its own sign-in"],` Policies ${m(c?.length??0,"rule","rules")}, checked before every tool call`,...n.servers.length>0?[` MCP ${n.servers.join(", ")}`]:[],...I(n.instructions,n.skills.map((p)=>`/${p}`))];if(process.stdout.write(`${l.join(`
2
+ import{le}from"./chunk-ak1n0cs7.js";import{spawn as J}from"node:child_process";import P from"node:path";import{parseArgs as B}from"node:util";var N=B({allowPositionals:!0,strict:!1,options:{harness:{type:"string"},server:{type:"string"},json:{type:"boolean"},quiet:{type:"boolean"},remove:{type:"boolean"}}}),_=N.positionals[0],k=N.values,S=R("harness")??process.env.OPENCODE_CONSOLE_HARNESS,x="Not signed in. Run `npx @opencode/console login` or set OPENCODE_API_KEY.",M=["claude-code","pi","codex","deepseek-harness"],W=["claude-code","codex"],V={check:G,hook:X,login:ee,logout:ae,"mcp-headers":ie,setup:oe,status:ce,sync:de,token:pe},b,K=_?V[_]:void 0;if(!K)process.stdout.write(we()),process.exit(_&&!["help","--help","-h"].includes(_)?1:0);process.exitCode=await K().catch(async(e)=>{if(_==="hook")return H(`opencode-console couldn't check this: ${h(e)}`);if(process.stderr.write(`${h(e)}
3
+ `),_!=="check")return 1;return Y(`opencode-console couldn't check this call: ${h(e)}`)});async function G(){let{Option:e,Schema:o}=await import("./chunk-ysgtje2z.js"),t=o.decodeUnknownOption(o.fromJsonString(o.Struct({action:o.NonEmptyString,resources:o.NonEmptyArray(o.String),directory:o.optional(o.String),path:o.optional(o.String),shell:o.optional(o.String)})))(await U());if(e.isNone(t))return process.stderr.write(`Expected JSON on stdin: {"action": "...", "resources": ["...", ...]}
4
+ `),Y("opencode-console couldn't read this tool call, so it was blocked");let[n]=await T([t.value]);return process.stdout.write(`${JSON.stringify(n)}
5
+ `),n?.effect==="deny"?2:0}async function X(){let e=N.positionals[1];if(!e||!W.includes(e))return process.stderr.write(`Usage: opencode-console hook <${W.join("|")}>
6
+ `),2;let{Option:o}=await import("./chunk-ysgtje2z.js"),{ClaudeCodeHook:t}=await import("./chunk-jem7z938.js"),n=await U();b=t.eventName(n);let r=e==="codex"?await Z(n):c(t.decode(n));if(r===void 0)return H("opencode-console couldn't read this hook's input, so it was blocked");if(b==="SessionStart")return Q();if(r.length===0)return 0;let i=(await T(r)).find((s)=>s.effect==="deny");return i?.effect==="deny"?H(i.message):0;function c(s){return o.isNone(s)?void 0:t.checks(s.value)}}async function Z(e){let{Option:o}=await import("./chunk-ysgtje2z.js"),{CodexHook:t}=await import("./chunk-b02r286p.js"),{Library:n}=await import("./chunk-wkrya350.js"),{WorkspaceSnapshot:r}=await import("./chunk-m3n97pxp.js"),{ConsoleStore:i}=await import("./chunk-zgcspk2g.js"),c=t.decode(e);if(o.isNone(c))return;let s=r.read(i.make())?.config??{};return t.checks(c.value,{directory:process.cwd(),platform:process.platform,servers:Object.keys(n.servers(s))})}async function Q(){let{ConsoleStore:e}=await import("./chunk-zgcspk2g.js"),{ConsoleCredentials:o}=await import("./chunk-w6kmmxmz.js"),{WorkspaceSync:t}=await import("./chunk-g9bke322.js"),n=e.make(),r=o.read(n);if(!r)return 0;await A({always:!0,force:!0});let i=t.current(n,o.owner(r))?.status;if(i)process.stdout.write(`${JSON.stringify({systemMessage:`${i.message}${i.url?`: ${i.url}`:""}`})}
7
+ `);return 0}async function T(e){let{Effect:o}=await import("./chunk-ysgtje2z.js"),{ConsoleStore:t}=await import("./chunk-zgcspk2g.js"),{ConsoleCredentials:n}=await import("./chunk-w6kmmxmz.js"),{WorkspaceSnapshot:r}=await import("./chunk-m3n97pxp.js"),{PolicyEvaluator:i}=await import("./chunk-6bc9ezw6.js"),c=t.make(),s=n.read(c),p=s&&n.owner(s),a=s?r.read(c):void 0,u=p&&a?.owner!==p?await(async()=>(await A({always:!0}),ue(()=>{let l=r.read(c);return l?.owner===p?l:void 0},3000)))():a&&r.stale(a,Date.now())?(await A(),a):a,d=r.workspace(s,u);return o.runPromise(o.forEach(e,(l)=>i.check(d,l)))}async function ee(){if(!await L())return 1;if(process.env.OPENCODE_API_KEY)process.stderr.write(`OPENCODE_API_KEY is set, so opencode-console keeps using that key until it's unset
8
+ `);return 0}async function L(){let{Effect:e}=await import("./chunk-ysgtje2z.js"),{openUrl:o}=await import("./chunk-aesb1szb.js"),{ConsoleClient:t}=await import("./chunk-sbkpkav3.js"),{ConsoleStore:n}=await import("./chunk-zgcspk2g.js"),{ConsoleCredentials:r}=await import("./chunk-w6kmmxmz.js"),{WorkspaceSync:i}=await import("./chunk-g9bke322.js"),c=R("server")??process.env.OPENCODE_CONSOLE_SERVER??t.defaultServer,s=t.normalizeServer(c);if(!s){process.stderr.write(`Not a Console URL: ${c}
9
+ `);return}let p=n.make(),a=await f(r.login(p,{server:s,prompt:(d)=>e.promise(async()=>{if(process.stderr.write(`Open ${d.url} and confirm the code ${d.code}
10
+ `),process.stdout.isTTY)await o(d.url).catch(()=>{return})})})),u=await f(i.sync(p,{force:!0}));if(process.stdout.write(`Signed in to ${a.orgName??"OpenCode Console"}${a.email?` as ${a.email}`:""}
11
+ `),u.error)process.stderr.write(`Couldn't fetch the workspace config: ${h(u.error)}. Run the command again to retry.
12
+ `);return a}async function oe(){let e=N.positionals[1];if(!e||!M.includes(e))return process.stderr.write(`Usage: opencode-console setup <${M.join("|")}> [--remove]
13
+ `),1;let o=e==="pi",t=e==="codex",n=e==="deepseek-harness",r=o?"Pi":t?"Codex":n?"DeepSeek Harness":"Claude Code",{ConsoleStore:i}=await import("./chunk-zgcspk2g.js"),{ConsoleCredentials:c}=await import("./chunk-w6kmmxmz.js"),{CliInstall:s}=await import("./chunk-cdc5arvh.js"),{WorkspaceSync:p}=await import("./chunk-g9bke322.js"),a=i.make();if(k.remove===!0){let{Effect:E}=await import("./chunk-ysgtje2z.js"),{ClaudeCode:C}=await import("./chunk-n5bt7jzp.js"),{Codex:O}=await import("./chunk-7k3ymrp6.js"),{Pi:y}=await import("./chunk-83pr45e8.js"),{DeepSeekHarness:j}=await import("./chunk-t8p1svd4.js"),z=await E.runPromise(i.locked(a,E.sync(()=>{let F=o?y.remove(a):t?O.remove(a):n?j.remove(a):C.remove(a);if(![C.manifestFile(a),y.manifestFile(a),O.manifestFile(a),j.manifestFile(a)].some((q)=>i.read(q)!==void 0))s.uninstall(a);return F})));return process.stdout.write(z?`Removed OpenCode Console from ${r} and restored its settings. You're still signed in; \`npx @opencode/console logout\` signs out.
14
+ `:`${r} wasn't set up with OpenCode Console
15
+ `),0}let{ConsoleClient:u}=await import("./chunk-sbkpkav3.js"),d=await fe(o?"pi":t?"codex":n?"dsh":"claude");if(d)S=o?`pi/${d}`:t?`codex_cli_rs/${d}`:n?`deepseek-harness/${d}`:`claude-cli/${d}`;let l=c.read(a),g=R("server");if(!l||g!==void 0&&l.server!==u.normalizeServer(g)){if(!await L())return 1}if(process.env.OPENCODE_API_KEY)process.stderr.write(`OPENCODE_API_KEY is set, so setup used that key, and ${r} will use it instead of your sign-in wherever it's set.
16
+ `);let m=await f(p.sync(a,{force:!0}));if(!m.snapshot?.config)return process.stderr.write(`Couldn't fetch the workspace config${m.error?`: ${h(m.error)}`:""}. Run setup again.
17
+ `),1;if((o||n)&&I())return process.stderr.write(`Set up ${r} with the npm package: \`npx @opencode/console setup ${e}\`
18
+ `),1;let v=s.install(a,{execPath:process.execPath,entry:I()?void 0:process.argv[1],path:process.env.PATH});if(t)return re(a,v,m.snapshot,d);if(n){let{DeepSeekHarness:E}=await import("./chunk-t8p1svd4.js"),C=v.at(-1),O=await f(E.refresh(a,{paths:E.paths(),plugin:P.join(P.dirname(C),`dsh-plugin${P.extname(C)}`),...S?{harness:S}:{}}));return O?te(O,m.snapshot,d):1}return o?ne(a,v,m.snapshot,d):se(a,v,m.snapshot,d)}async function te(e,o,t){let{WorkspaceSnapshot:n}=await import("./chunk-m3n97pxp.js"),r=Object.values(e.routes),i=[`DeepSeek Harness now uses ${o.organization??"your workspace"} through OpenCode Console.`,"",e.model?` Models ${w(r.flatMap((c)=>c.models).length,"model","models")} from ${w(r.length,"provider","providers")}; new sessions start on ${e.model.provider}/${e.model.model}`:" Models none from the workspace, so DeepSeek Harness keeps its own providers",` Policies ${w(n.policies(o)?.length??0,"rule","rules")}, checked before every tool call, /skill and model request`,...e.servers.length>0?[` MCP ${e.servers.join(", ")}`]:[],...D(e.instructions,e.skills.map((c)=>`/${c}`))];if(process.stdout.write(`${i.join(`
19
19
  `)}
20
- `),n.skipped.length>0)process.stderr.write(`
21
- Kept your own ${n.skipped.join(", ")}, so the workspace's of the same name weren't added.
22
- `);if(!s)process.stderr.write(`
20
+ `),e.skipped.length>0)process.stderr.write(`
21
+ Kept your own ${e.skipped.join(", ")}, so the workspace's weren't added.
22
+ `);if(e.shadowed.length>0)process.stderr.write(`
23
+ The model providers you added in the ${e.shadowed.join(", ")} profile${e.shadowed.length===1?"":"s"} are replaced by the workspace's while DeepSeek Harness is connected; --remove brings them back.
24
+ `);if(!t)process.stderr.write(`
25
+ DeepSeek Harness isn't on your PATH yet; this applies once it's installed.
26
+ `);return process.stdout.write(`
27
+ Run dsh web (or restart a running one) to start.
28
+ `),0}async function se(e,o,t,n){let{ClaudeCode:r}=await import("./chunk-n5bt7jzp.js"),{WorkspaceSnapshot:i}=await import("./chunk-m3n97pxp.js"),c=i.policies(t),s=await f(r.refresh(e,{paths:r.paths(),command:o,harness:n?`claude-cli/${n}`:void 0}));if(!s)return process.stderr.write(`Couldn't read the workspace config. Run setup again.
29
+ `),1;let a=[`Claude Code now uses ${t.organization??"your workspace"} through OpenCode Console.`,"",...s.models?[` Models ${w(s.models.options.length,"model","models")} in /model; opus is ${s.models.tiers.opus}, sonnet ${s.models.tiers.sonnet}, haiku ${s.models.tiers.haiku}`]:[" Models none from the workspace, so Claude Code keeps its own sign-in"],` Policies ${w(c?.length??0,"rule","rules")}, checked before every tool call`,...s.servers.length>0?[` MCP ${s.servers.join(", ")}`]:[],...D(s.instructions,s.skills.map((d)=>`/${d}`))];if(process.stdout.write(`${a.join(`
30
+ `)}
31
+ `),s.skipped.length>0)process.stderr.write(`
32
+ Kept your own ${s.skipped.join(", ")}, so the workspace's of the same name weren't added.
33
+ `);if(!n)process.stderr.write(`
23
34
  Claude Code isn't on your PATH yet; these settings apply once it's installed.
24
- `);let d=["ANTHROPIC_AUTH_TOKEN","ANTHROPIC_API_KEY"].filter((p)=>process.env[p]);if(n.models&&d.length>0)process.stderr.write(`
25
- ${d.join(" and ")} ${d.length===1?"is":"are"} set in your shell and Claude Code would use ${d.length===1?"it":"them"} instead of the workspace. Unset ${d.length===1?"it":"them"} before running claude.
35
+ `);let u=["ANTHROPIC_AUTH_TOKEN","ANTHROPIC_API_KEY"].filter((d)=>process.env[d]);if(s.models&&u.length>0)process.stderr.write(`
36
+ ${u.join(" and ")} ${u.length===1?"is":"are"} set in your shell and Claude Code would use ${u.length===1?"it":"them"} instead of the workspace. Unset ${u.length===1?"it":"them"} before running claude.
26
37
  `);return process.stdout.write(`
27
38
  Run claude to start.
28
- `),0}async function oe(o,e,t,s){let{Pi:r}=await import("./chunk-eyf3z07t.js"),{Library:a}=await import("./chunk-xeq3evq0.js"),{WorkspaceSnapshot:c}=await import("./chunk-c9kvdzct.js"),n=e.at(-1),i=N.join(N.dirname(n),`pi-extension${N.extname(n)}`),l=r.session({store:o,...k?{harness:k}:{}}),d=await r.models(l),p=d&&r.defaultModel(d);await r.skills(l).catch((C)=>{process.stderr.write(`Couldn't download the Library's skills yet (${h(C)}); Pi tries again when it starts.
29
- `);return});let u=t.config??{},{Effect:w}=await import("./chunk-p7wsm5k0.js"),{ConsoleStore:E}=await import("./chunk-mpmqsnkz.js");await w.runPromise(E.locked(o,w.sync(()=>r.setup(o,{paths:r.paths(),extension:i,...p?{model:p}:{}}))));let v=d?r.providers(d,()=>{return}).flatMap((C)=>C.models):[],O=Object.keys(a.servers(u)),P=[`Pi now uses ${t.organization??"your workspace"} through OpenCode Console.`,"",p?` Models ${m(v.length,"model","models")} in /model; new sessions start on ${p.provider}/${p.id}`:" Models none from the workspace, so Pi keeps its own providers",` Policies ${m(c.policies(t)?.length??0,"rule","rules")}, checked before every tool call and !command`,...O.length>0?[` MCP ${O.join(", ")}`]:[],...I(a.library(u).instructions.length,a.library(u).skills.map((C)=>`/skill:${C.slug}`))];if(process.stdout.write(`${P.join(`
39
+ `),0}async function ne(e,o,t,n){let{Pi:r}=await import("./chunk-83pr45e8.js"),{InProcess:i}=await import("./chunk-kpp48ne0.js"),{Library:c}=await import("./chunk-wkrya350.js"),{WorkspaceSnapshot:s}=await import("./chunk-m3n97pxp.js"),p=o.at(-1),a=P.join(P.dirname(p),`pi-extension${P.extname(p)}`),u=i.session({store:e,...S?{harness:S}:{}}),d=await r.models(u),l=d&&r.defaultModel(d);await r.skills(u).catch((y)=>{process.stderr.write(`Couldn't download the Library's skills yet (${h(y)}); Pi tries again when it starts.
40
+ `);return});let g=t.config??{},{Effect:m}=await import("./chunk-ysgtje2z.js"),{ConsoleStore:v}=await import("./chunk-zgcspk2g.js");await m.runPromise(v.locked(e,m.sync(()=>r.setup(e,{paths:r.paths(),extension:a,...l?{model:l}:{}}))));let E=d?r.providers(d,()=>{return}).flatMap((y)=>y.models):[],C=Object.keys(c.servers(g)),O=[`Pi now uses ${t.organization??"your workspace"} through OpenCode Console.`,"",l?` Models ${w(E.length,"model","models")} in /model; new sessions start on ${l.provider}/${l.id}`:" Models none from the workspace, so Pi keeps its own providers",` Policies ${w(s.policies(t)?.length??0,"rule","rules")}, checked before every tool call and !command`,...C.length>0?[` MCP ${C.join(", ")}`]:[],...D(c.library(g).instructions.length,c.library(g).skills.map((y)=>`/skill:${y.slug}`))];if(process.stdout.write(`${O.join(`
30
41
  `)}
31
- `),!s)process.stderr.write(`
42
+ `),!n)process.stderr.write(`
32
43
  Pi isn't on your PATH yet; this applies once it's installed.
33
44
  `);return process.stdout.write(`
34
45
  Run pi to start.
35
- `),0}async function te(o,e,t,s){let{Codex:r}=await import("./chunk-nvh2a5rc.js"),{WorkspaceSnapshot:a}=await import("./chunk-c9kvdzct.js"),c=Object.fromEntries(["XDG_DATA_HOME","XDG_CACHE_HOME","OPENCODE_CONSOLE_SERVER"].flatMap((u)=>process.env[u]?[[u,process.env[u]]]:[])),n=await f(r.refresh(o,{paths:r.paths(),command:e,harness:s?`codex_cli_rs/${s}`:void 0,environment:c}));if(!n)return process.stderr.write(`Couldn't read the workspace config. Run setup again.
36
- `),1;let i=a.policies(t)?.length??0,l=[`Codex now uses ${t.organization??"your workspace"} through OpenCode Console.`,"",n.models?` Models ${m(n.models.count,"model","models")} in /model; new sessions start on ${n.models.model}`:" Models none from the workspace, so Codex keeps its own sign-in",` Policies ${m(i,"rule","rules")}, checked before every tool call${n.rules>0?`; Codex also enforces ${m(n.rules,"shell rule","shell rules")} itself`:""}`,...n.searchOff?[" Search Codex's web search is off, since the workspace's policy limits it"]:[],...n.servers.length>0?[` MCP ${n.servers.join(", ")}`]:[],...I(n.instructions,n.skills.map((u)=>`$${u}`))];if(process.stdout.write(`${l.join(`
46
+ `),0}async function re(e,o,t,n){let{Codex:r}=await import("./chunk-7k3ymrp6.js"),{WorkspaceSnapshot:i}=await import("./chunk-m3n97pxp.js"),c=Object.fromEntries(["XDG_DATA_HOME","XDG_CACHE_HOME","OPENCODE_CONSOLE_SERVER"].flatMap((l)=>process.env[l]?[[l,process.env[l]]]:[])),s=await f(r.refresh(e,{paths:r.paths(),command:o,harness:n?`codex_cli_rs/${n}`:void 0,environment:c}));if(!s)return process.stderr.write(`Couldn't read the workspace config. Run setup again.
47
+ `),1;let p=i.policies(t)?.length??0,a=[`Codex now uses ${t.organization??"your workspace"} through OpenCode Console.`,"",s.models?` Models ${w(s.models.count,"model","models")} in /model; new sessions start on ${s.models.model}`:" Models none from the workspace, so Codex keeps its own sign-in",` Policies ${w(p,"rule","rules")}, checked before every tool call${s.rules>0?`; Codex also enforces ${w(s.rules,"shell rule","shell rules")} itself`:""}`,...s.searchOff?[" Search Codex's web search is off, since the workspace's policy limits it"]:[],...s.servers.length>0?[` MCP ${s.servers.join(", ")}`]:[],...D(s.instructions,s.skills.map((l)=>`$${l}`))];if(process.stdout.write(`${a.join(`
37
48
  `)}
38
- `),n.skipped.length>0)process.stderr.write(`
39
- Kept your own ${n.skipped.join(", ")}, so the workspace's of the same name weren't added.
40
- `);let{Library:d}=await import("./chunk-xeq3evq0.js"),p=Object.entries(d.servers(t.config??{})).filter(([u,w])=>w.headers!==void 0&&n.servers.includes(u)).map(([u])=>u);if(process.env.OPENCODE_API_KEY&&p.length>0)process.stderr.write(`
41
- Codex connects to ${p.join(", ")} without your shell's environment, so ${p.length===1?"it":"they"} can't use OPENCODE_API_KEY. Run \`npx @opencode/console login\` to connect ${p.length===1?"it":"them"}.
42
- `);if(!s)process.stderr.write(`
49
+ `),s.skipped.length>0)process.stderr.write(`
50
+ Kept your own ${s.skipped.join(", ")}, so the workspace's of the same name weren't added.
51
+ `);let{Library:u}=await import("./chunk-wkrya350.js"),d=Object.entries(u.servers(t.config??{})).filter(([l,g])=>g.headers!==void 0&&s.servers.includes(l)).map(([l])=>l);if(process.env.OPENCODE_API_KEY&&d.length>0)process.stderr.write(`
52
+ Codex connects to ${d.join(", ")} without your shell's environment, so ${d.length===1?"it":"they"} can't use OPENCODE_API_KEY. Run \`npx @opencode/console login\` to connect ${d.length===1?"it":"them"}.
53
+ `);if(!n)process.stderr.write(`
43
54
  Codex isn't on your PATH yet; these settings apply once it's installed.
44
55
  `);return process.stdout.write(`
45
56
  Run codex to start.
46
- `),0}function I(o,e){if(o+e.length===0)return[];return[` Library ${[...o>0?[m(o,"instruction","instructions")]:[],...e.length>0?[e.join(", ")]:[]].join(", ")}`]}async function ne(){let o=S.positionals[1];if(!o)return process.stderr.write(`Usage: opencode-console mcp-headers <server>
47
- `),1;let{Option:e,Schema:t}=await import("./chunk-p7wsm5k0.js"),{ConsoleStore:s}=await import("./chunk-mpmqsnkz.js"),{WorkspaceSync:r}=await import("./chunk-hpy9mszv.js"),{snapshot:a}=await f(r.sync(s.make()));if(!a)return process.stderr.write(`${_}
48
- `),1;let c=t.decodeUnknownOption(t.Struct({servers:t.Record(t.String,t.Struct({headers:t.optional(t.Record(t.String,t.String))}))}))(a.config?.mcp),n=e.getOrUndefined(c)?.servers[o];if(!n)return process.stderr.write(`The workspace doesn't offer the MCP server ${o} anymore
49
- `),1;return process.stdout.write(`${JSON.stringify(n.headers??{})}
50
- `),0}async function se(){let{ConsoleStore:o}=await import("./chunk-mpmqsnkz.js"),{ConsoleCredentials:e}=await import("./chunk-kvqewrn5.js"),t=await f(e.logout(o.make()));if(process.stdout.write(t?`Signed out of OpenCode Console
57
+ `),0}function D(e,o){if(e+o.length===0)return[];return[` Library ${[...e>0?[w(e,"instruction","instructions")]:[],...o.length>0?[o.join(", ")]:[]].join(", ")}`]}async function ie(){let e=N.positionals[1];if(!e)return process.stderr.write(`Usage: opencode-console mcp-headers <server>
58
+ `),1;let{Option:o,Schema:t}=await import("./chunk-ysgtje2z.js"),{ConsoleStore:n}=await import("./chunk-zgcspk2g.js"),{WorkspaceSync:r}=await import("./chunk-g9bke322.js"),{snapshot:i}=await f(r.sync(n.make()));if(!i)return process.stderr.write(`${x}
59
+ `),1;let c=t.decodeUnknownOption(t.Struct({servers:t.Record(t.String,t.Struct({headers:t.optional(t.Record(t.String,t.String))}))}))(i.config?.mcp),s=o.getOrUndefined(c)?.servers[e];if(!s)return process.stderr.write(`The workspace doesn't offer the MCP server ${e} anymore
60
+ `),1;return process.stdout.write(`${JSON.stringify(s.headers??{})}
61
+ `),0}async function ae(){let{ConsoleStore:e}=await import("./chunk-zgcspk2g.js"),{ConsoleCredentials:o}=await import("./chunk-w6kmmxmz.js"),t=await f(o.logout(e.make()));if(process.stdout.write(t?`Signed out of OpenCode Console
51
62
  `:`Not signed in
52
63
  `),process.env.OPENCODE_API_KEY)process.stdout.write(`OPENCODE_API_KEY is still set, so opencode-console keeps using that key
53
- `);return 0}async function re(){let{ConsoleStore:o}=await import("./chunk-mpmqsnkz.js"),{ConsoleCredentials:e}=await import("./chunk-kvqewrn5.js"),{WorkspaceSnapshot:t}=await import("./chunk-c9kvdzct.js"),{WorkspaceSync:s}=await import("./chunk-hpy9mszv.js"),r=o.make(),a=e.read(r),c=a?(await f(s.sync(r))).snapshot:void 0,n=t.policies(c),i=a&&{server:a.server,credential:a.type==="key"?"OPENCODE_API_KEY":"device",email:a.type==="oauth"?a.email:void 0,workspace:c?.organization??e.organization(a),synced:n&&c?new Date(c.fetched).toISOString():void 0,policies:n?.length,models:t.models(c),needs:c?.status};if(g.json===!0)return process.stdout.write(`${JSON.stringify({signedIn:Boolean(i),...i})}
54
- `),0;if(!i)return process.stdout.write(`${_}
55
- `),0;let l=[["Signed in",i.credential==="OPENCODE_API_KEY"?"with OPENCODE_API_KEY":i.email??"yes"],...i.workspace?[["Workspace",i.workspace]]:[],["Console",i.server],["Policies",i.synced?`${m(i.policies??0,"policy","policies")}, synced at ${new Date(i.synced).toLocaleTimeString()}`:"not loaded yet, so tool calls are blocked"],["Models",i.models?`${i.models} from the workspace`:"none from the workspace"]];if(process.stdout.write(l.map(([d,p])=>`${d?.padEnd(10)} ${p}
56
- `).join("")),i.needs)process.stdout.write(`
57
- ${i.needs.message}${i.needs.url?`: ${i.needs.url}`:""}
58
- `);return 0}async function ie(){let{ConsoleStore:o}=await import("./chunk-mpmqsnkz.js"),{WorkspaceSnapshot:e}=await import("./chunk-c9kvdzct.js"),{WorkspaceSync:t}=await import("./chunk-hpy9mszv.js"),s=o.make(),r=e.read(s)?.fetched,a=await f(t.sync(s,{force:g.quiet!==!0||process.env.OPENCODE_CONSOLE_FORCE==="1"}));if(a.snapshot?.config&&!a.error&&a.snapshot.fetched!==r){let{ClaudeCode:i}=await import("./chunk-2ktsq2gj.js"),{Codex:l}=await import("./chunk-nvh2a5rc.js");await f(i.refresh(s)).catch((d)=>{if(g.quiet!==!0)process.stderr.write(`Couldn't update Claude Code: ${h(d)}
59
- `)}),await f(l.refresh(s)).catch((d)=>{if(g.quiet!==!0)process.stderr.write(`Couldn't update Codex: ${h(d)}
60
- `)})}if(g.quiet===!0)return a.error?1:0;if(!a.snapshot&&!a.error)return process.stderr.write(`${_}
61
- `),1;if(a.error){let i=e.policies(a.snapshot)?`
62
- Policies from the last sync still apply.`:"";return process.stderr.write(`Couldn't sync: ${h(a.error)}${i}
63
- `),1}let c=a.snapshot?.organization,n=e.policies(a.snapshot)?.length??0;return process.stdout.write(`Synced ${c?`${c}'s`:"the workspace"} config (${m(n,"policy","policies")})
64
- `),0}async function ae(){let{ConsoleStore:o}=await import("./chunk-mpmqsnkz.js"),{ConsoleCredentials:e}=await import("./chunk-kvqewrn5.js"),t=await f(e.fresh(o.make()));if(!t)return process.stderr.write(`${_}
64
+ `);return 0}async function ce(){let{ConsoleStore:e}=await import("./chunk-zgcspk2g.js"),{ConsoleCredentials:o}=await import("./chunk-w6kmmxmz.js"),{WorkspaceSnapshot:t}=await import("./chunk-m3n97pxp.js"),{WorkspaceSync:n}=await import("./chunk-g9bke322.js"),r=e.make(),i=o.read(r),c=i?(await f(n.sync(r))).snapshot:void 0,s=t.policies(c),p=i&&{server:i.server,credential:i.type==="key"?"OPENCODE_API_KEY":"device",email:i.type==="oauth"?i.email:void 0,workspace:c?.organization??o.organization(i),synced:s&&c?new Date(c.fetched).toISOString():void 0,policies:s?.length,models:t.models(c),needs:c?.status};if(k.json===!0)return process.stdout.write(`${JSON.stringify({signedIn:Boolean(p),...p})}
65
+ `),0;if(!p)return process.stdout.write(`${x}
66
+ `),0;let a=[["Signed in",p.credential==="OPENCODE_API_KEY"?"with OPENCODE_API_KEY":p.email??"yes"],...p.workspace?[["Workspace",p.workspace]]:[],["Console",p.server],["Policies",p.synced?`${w(p.policies??0,"policy","policies")}, synced at ${new Date(p.synced).toLocaleTimeString()}`:"not loaded yet, so tool calls are blocked"],["Models",p.models?`${p.models} from the workspace`:"none from the workspace"]];if(process.stdout.write(a.map(([u,d])=>`${u?.padEnd(10)} ${d}
67
+ `).join("")),p.needs)process.stdout.write(`
68
+ ${p.needs.message}${p.needs.url?`: ${p.needs.url}`:""}
69
+ `);return 0}async function de(){let{ConsoleStore:e}=await import("./chunk-zgcspk2g.js"),{WorkspaceSnapshot:o}=await import("./chunk-m3n97pxp.js"),{WorkspaceSync:t}=await import("./chunk-g9bke322.js"),n=e.make(),r=o.read(n)?.fetched,i=await f(t.sync(n,{force:k.quiet!==!0||process.env.OPENCODE_CONSOLE_FORCE==="1"}));if(i.snapshot?.config&&!i.error&&i.snapshot.fetched!==r){let{ClaudeCode:p}=await import("./chunk-n5bt7jzp.js"),{Codex:a}=await import("./chunk-7k3ymrp6.js"),{DeepSeekHarness:u}=await import("./chunk-t8p1svd4.js");await f(p.refresh(n)).catch((d)=>{if(k.quiet!==!0)process.stderr.write(`Couldn't update Claude Code: ${h(d)}
70
+ `)}),await f(a.refresh(n)).catch((d)=>{if(k.quiet!==!0)process.stderr.write(`Couldn't update Codex: ${h(d)}
71
+ `)}),await f(u.refresh(n)).catch((d)=>{if(k.quiet!==!0)process.stderr.write(`Couldn't update DeepSeek Harness: ${h(d)}
72
+ `)})}if(k.quiet===!0)return i.error?1:0;if(!i.snapshot&&!i.error)return process.stderr.write(`${x}
73
+ `),1;if(i.error){let p=o.policies(i.snapshot)?`
74
+ Policies from the last sync still apply.`:"";return process.stderr.write(`Couldn't sync: ${h(i.error)}${p}
75
+ `),1}let c=i.snapshot?.organization,s=o.policies(i.snapshot)?.length??0;return process.stdout.write(`Synced ${c?`${c}'s`:"the workspace"} config (${w(s,"policy","policies")})
76
+ `),0}async function pe(){let{ConsoleStore:e}=await import("./chunk-zgcspk2g.js"),{ConsoleCredentials:o}=await import("./chunk-w6kmmxmz.js"),t=await f(o.fresh(e.make()));if(!t)return process.stderr.write(`${x}
65
77
  `),1;return process.stdout.write(`${t.type==="key"?t.key:t.access}
66
- `),0}async function f(o){let{Effect:e,Layer:t}=await import("./chunk-p7wsm5k0.js"),{FetchHttpClient:s}=await import("./chunk-aym5xapq.js"),{WorkspaceSync:r}=await import("./chunk-hpy9mszv.js");return e.runPromise(o.pipe(e.provide(r.identify({version:Me,harness:k}).pipe(t.provide(s.layer)))))}async function A(o={}){let{ConsoleStore:e}=await import("./chunk-mpmqsnkz.js"),t=e.syncClaimFile(e.make());try{let s=e.modified(t);if(!o.always&&s!==void 0&&Date.now()-s<30000)return;e.write(t,"");let r=D()?[process.execPath]:[process.execPath,process.argv[1]];F(r[0],[...r.slice(1),"sync","--quiet",...k?["--harness",k]:[]],{detached:!0,stdio:"ignore",env:{...process.env,...o.force?{OPENCODE_CONSOLE_FORCE:"1"}:{}}}).on("error",()=>{return}).unref()}catch{return}}async function ce(o,e){let t=Date.now()+e;for(;;){let s=o();if(s!==void 0||Date.now()>=t)return s;await new Promise((r)=>setTimeout(r,25))}}async function b(o){let{ClaudeCodeHook:e}=await import("./chunk-kdkxhbxc.js"),t=e.denial(x,o);return process.stdout.write(t.stdout),process.stderr.write(t.stderr),t.code}async function de(o){let{execFile:e}=await import("node:child_process");return new Promise((t)=>e(o,["--version"],{timeout:1e4},(s,r)=>t(s?void 0:r.match(/\d+\.\d+\.\d+\S*/)?.[0])))}function T(o){return process.stdout.write(`${JSON.stringify({effect:"deny",message:o})}
67
- `),2}function m(o,e,t){return`${o} ${o===1?e:t}`}function D(){return/^(\/\$bunfs\/|[A-Za-z]:[\\/]~BUN[\\/])/.test(process.argv[1]??"")}async function L(){let o=[];for await(let e of process.stdin)o.push(Buffer.from(e));return Buffer.concat(o).toString("utf8")}function h(o){return o instanceof Error?o.message:String(o)}function R(o){let e=g[o];return typeof e==="string"?e:void 0}function pe(){return`opencode-console ${Me}
78
+ `),0}async function f(e){let{Effect:o,Layer:t}=await import("./chunk-ysgtje2z.js"),{FetchHttpClient:n}=await import("./chunk-37whdg3n.js"),{WorkspaceSync:r}=await import("./chunk-g9bke322.js");return o.runPromise(e.pipe(o.provide(r.identify({version:le,harness:S}).pipe(t.provide(n.layer)))))}async function A(e={}){let{ConsoleStore:o}=await import("./chunk-zgcspk2g.js"),t=o.syncClaimFile(o.make());try{let n=o.modified(t);if(!e.always&&n!==void 0&&Date.now()-n<30000)return;o.write(t,"");let r=I()?[process.execPath]:[process.execPath,process.argv[1]];J(r[0],[...r.slice(1),"sync","--quiet",...S?["--harness",S]:[]],{detached:!0,stdio:"ignore",env:{...process.env,...e.force?{OPENCODE_CONSOLE_FORCE:"1"}:{}}}).on("error",()=>{return}).unref()}catch{return}}async function ue(e,o){let t=Date.now()+o;for(;;){let n=e();if(n!==void 0||Date.now()>=t)return n;await new Promise((r)=>setTimeout(r,25))}}async function H(e){let{ClaudeCodeHook:o}=await import("./chunk-jem7z938.js"),t=o.denial(b,e);return process.stdout.write(t.stdout),process.stderr.write(t.stderr),t.code}async function fe(e){let{execFile:o}=await import("node:child_process");return new Promise((t)=>o(e,["--version"],{timeout:1e4},(n,r)=>t(n?void 0:r.match(/\d+\.\d+\.\d+\S*/)?.[0])))}function Y(e){return process.stdout.write(`${JSON.stringify({effect:"deny",message:e})}
79
+ `),2}function w(e,o,t){return`${e} ${e===1?o:t}`}function I(){return/^(\/\$bunfs\/|[A-Za-z]:[\\/]~BUN[\\/])/.test(process.argv[1]??"")}async function U(){let e=[];for await(let o of process.stdin)e.push(Buffer.from(o));return Buffer.concat(e).toString("utf8")}function h(e){return e instanceof Error?e.message:String(e)}function R(e){let o=k[e];return typeof o==="string"?o:void 0}function we(){return`opencode-console ${le}
68
80
  Connect coding agents to an OpenCode Console workspace: its models, MCP servers, Library and policies.
69
81
 
70
82
  Usage: opencode-console <command> [options]
71
83
 
72
84
  Commands:
73
- setup <claude-code|pi|codex>
74
- Sign in if needed and set up Claude Code, Pi or Codex to use the
75
- workspace (--remove undoes it)
85
+ setup <claude-code|pi|codex|deepseek-harness>
86
+ Sign in if needed and set up Claude Code, Pi, Codex or DeepSeek Harness
87
+ to use the workspace (--remove undoes it)
76
88
  login [--server <url>] Sign in to OpenCode Console and pick a workspace
77
89
  logout Sign out and remove the stored workspace config
78
90
  status [--json] Show the sign-in, workspace and config
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@opencode/console",
3
- "version": "0.1.1",
4
- "description": "Connect Claude Code, Pi and Codex to an OpenCode Console workspace and enforce its policies",
3
+ "version": "0.1.2",
4
+ "description": "Connect Claude Code, Pi, Codex and DeepSeek Harness to an OpenCode Console workspace and enforce its policies",
5
5
  "keywords": [
6
6
  "opencode",
7
7
  "claude-code",
8
8
  "codex",
9
9
  "pi-package",
10
+ "deepseek-harness",
10
11
  "coding-agent",
11
12
  "policy"
12
13
  ],
package/pi-extension.js CHANGED
@@ -1,2 +1,2 @@
1
- import"./chunk-zdf3mvav.js";import"./chunk-2y9vn023.js";import"./chunk-p59r4b0j.js";import"./chunk-6rpbc10h.js";import{He,xt}from"./chunk-5q7mrvv1.js";import{gt,en}from"./chunk-frqdgjbd.js";import"./chunk-81fv1abj.js";import"./chunk-wjghq897.js";import"./chunk-6mydq7cv.js";import"./chunk-sn451nak.js";import{Ro,Mo,Fo,No,Do,Uo,Tn,Lo,On,Xn,it,Bo,zo}from"./chunk-03p95nje.js";import"./chunk-fzckrdm3.js";import{k,q,zt,vr,Kt}from"./chunk-bkr0zk6g.js";var S={};k(S,{PiExtension:()=>S,default:()=>O,install:()=>R});import{existsSync as B}from"node:fs";import T from"node:path";import{anthropicMessagesApi as j,createProvider as H,googleGenerativeAIApi as K,openAICompletionsApi as D,openAIResponsesApi as F}from"@earendil-works/pi-ai/compat";import{getBuiltinModels as G,getBuiltinProviders as b}from"@earendil-works/pi-ai/providers/all";import{VERSION as J}from"@earendil-works/pi-coding-agent";async function O(e){await R(e,Lo({harness:`pi/${J}`}))}var L=(e,n,o)=>{let a=b();return[...a.filter((t)=>t===e),...a.filter((t)=>t==="opencode"&&t!==e),...a.filter((t)=>t!==e&&t!=="opencode")].flatMap((t)=>G(t).filter((f)=>f.id===n&&f.api===o)).at(0)},U="opencode_workspace_instructions";async function R(e,n){let o=new Set,a=new Map,d=new Map,t=p(n),f=t?await Bo(n).catch(()=>{return}):void 0;if(Ro(f??{},L).forEach((s)=>{o.add(s.id),e.registerProvider(H({id:s.id,name:s.name,auth:{apiKey:{name:"OpenCode Console",resolve:()=>V(n)}},models:s.models,api:{"anthropic-messages":P(j()),"openai-responses":P(F()),"openai-completions":P(D()),"google-generative-ai":P(K())}}))}),t&&(await it(n).catch(()=>{return}))?.config)["opencode","opencode-go"].filter((s)=>!o.has(s)).forEach((s)=>{o.add(s),e.registerProvider(s,{models:[]})});if(t)await M(e,n,d).catch(()=>{return});let m=f&&Mo(f),h={},E=async(s)=>{let r=[...s.modelRegistry.getAll().map((c)=>c.provider),...b(),...s.modelRegistry.getRegisteredProviderIds(),...a.keys()],i=[...new Set(r)].filter((c)=>!o.has(c)),u=await Xn(n,i.map((c)=>({action:"provider.use",resources:[c]}))).catch(()=>{return});i.forEach((c,w)=>{let v=u?.[w]?.effect!=="allow";if(v&&!a.has(c)){let _=s.modelRegistry.getRegisteredNativeProvider(c);a.set(c,()=>{if(e.unregisterProvider(c),_)e.registerProvider(_)}),e.registerProvider(c,{models:[]})}let C=v?void 0:a.get(c);if(C)a.delete(c),C()}),h.fetched=(await it(n).catch(()=>{return}))?.fetched;let l=s.model,g=m&&s.modelRegistry.find(m.provider,m.id);if(g&&(!l||a.has(l.provider)))await e.setModel(g)},x=async(s)=>{let r=await it(n);if(r?.fetched!==h.fetched)await E(s);return r};e.on("session_start",async(s,r)=>{if(!p(n)){y(r,"OpenCode Console isn't signed in. Run `npx @opencode/console login`.","warning");return}let i=await it(n).catch(()=>{return});if(i?.status)y(r,`${i.status.message}${i.status.url?`: ${i.status.url}`:""}`,"warning");await E(r)}),e.on("resources_discover",async()=>{if(!p(n))return;let s=await zo(n).catch(()=>A(n));return B(s)?{skillPaths:[s]}:void 0}),e.on("before_agent_start",async(s,r)=>{if(!p(n))return;let i=s.systemPromptOptions,u=i.skills??[],l=await(async()=>{let g=await x(r),c=await Xn(n,u.map((w)=>({action:"skill",resources:[w.name]})));return{text:Uo(g?.config?gt(g.config).instructions:[]),skills:u.filter((w,v)=>c[v]?.effect==="allow")}})().catch(()=>({text:void 0,skills:[]}));if(l.text)i.sections={...i.sections,[U]:l.text};i.skills=l.skills}),e.on("tool_call",async(s,r)=>{let i=e.getAllTools(),u=i.find((c)=>c.name===s.toolName)?.namespace?.aliases?.[0],l=[...new Set([...i.flatMap((c)=>c.namespace?.aliases?.slice(0,1)??[]),...e.getMcpServers().map((c)=>c.name)])],g=await On(n,Fo(s,{cwd:r.cwd,server:u,servers:l,skills:A(n)}));return g?.effect==="deny"?{block:!0,reason:g.message}:void 0}),e.on("user_bash",async(s,r)=>{let i=await On(n,[No(s)]);if(i?.effect!=="deny")return;return y(r,i.message,"error"),{result:{output:`${i.message}
2
- `,exitCode:1,cancelled:!1,truncated:!1}}}),e.on("input",async(s,r)=>{if(p(n))await x(r).catch(()=>{return});let i=Do(s.text);if(!i)return{action:"continue"};let u=await On(n,[{action:"skill",resources:[i]}]).catch((l)=>N(`/skill:${i}`,l));if(u?.effect!=="deny")return{action:"continue"};return y(r,u.message,"error"),{action:"handled"}}),e.on("before_provider_request",async(s,r)=>{let i=await I(n,r);if(i?.effect!=="deny")return;y(r,i.message,"error"),r.abort();return}),e.on("cache_warming_decision",async(s,r)=>(await I(n,r))?.effect==="deny"?{action:"stop"}:void 0),e.on("turn_start",()=>{if(p(n))M(e,n,d).catch(()=>{return})})}function p(e){return Kt(q(()=>He(e.store)!==void 0).pipe(vr(()=>!0)))}async function I(e,n){let o=n.model?.provider;if(!o||!p(e))return;return On(e,[{action:"provider.use",resources:[o]}]).catch((a)=>N(o,a))}function N(e,n){return{effect:"deny",message:`opencode-console couldn't check ${e}: ${n instanceof Error?n.message:String(n)}`}}var A=(e)=>T.join(Tn(e.store),"skills");async function M(e,n,o){let a=await it(n),d=a?.config?en(a.config):{};[...o.keys()].filter((t)=>!(t in d)).forEach((t)=>{o.delete(t),Kt(q(()=>e.unregisterMcpServer(t)).pipe(zt))}),Object.entries(d).forEach(([t,f])=>{let m={url:f.url,...f.headers?{headers:f.headers}:{}},h=JSON.stringify(m);if(o.get(t)===h)return;Kt(q(()=>{e.registerMcpServer(t,m),o.set(t,h)}).pipe(zt))})}async function V(e){let n=await e.run(xt(e.store));if(!n)return;return{auth:{apiKey:n.type==="key"?n.key:n.access},source:"OpenCode Console"}}function P(e){let n=(o)=>o?.sessionId?{...o,headers:{...o.headers,"x-opencode-session":o.sessionId}}:o;return{...e,stream:(o,a,d)=>e.stream(o,a,n(d)),streamSimple:(o,a,d)=>e.streamSimple(o,a,n(d))}}function y(e,n,o){if(e.hasUI)e.ui.notify(n,o)}export{S as PiExtension,O as default,R as install};
1
+ import"./chunk-dnepb5ke.js";import"./chunk-gvywgb0d.js";import"./chunk-0trayd9n.js";import"./chunk-wd4mfvqy.js";import{Ee,Be}from"./chunk-tx5wws16.js";import"./chunk-px1nqkzb.js";import"./chunk-rx6cjbq2.js";import"./chunk-ktx666b5.js";import"./chunk-71rwyxw2.js";import{sr,xt,ir,Le}from"./chunk-et9y1sb5.js";import{je,dr,Xe}from"./chunk-78cwb109.js";import{zo,Ko,Wo,Jo,Go,Dn,Zo,Yo}from"./chunk-vy3ahcaj.js";import"./chunk-96f5c0tj.js";import{k,L,en,Ge,Ie}from"./chunk-gxedprvk.js";var S={};k(S,{PiExtension:()=>S,default:()=>O,install:()=>R});import{existsSync as B}from"node:fs";import T from"node:path";import{anthropicMessagesApi as j,createProvider as H,googleGenerativeAIApi as K,openAICompletionsApi as q,openAIResponsesApi as D}from"@earendil-works/pi-ai/compat";import{getBuiltinModels as F,getBuiltinProviders as b}from"@earendil-works/pi-ai/providers/all";import{VERSION as G}from"@earendil-works/pi-coding-agent";async function O(e){await R(e,sr({harness:`pi/${G}`}))}var J=(e,n,o)=>{let a=b();return[...a.filter((t)=>t===e),...a.filter((t)=>t==="opencode"&&t!==e),...a.filter((t)=>t!==e&&t!=="opencode")].flatMap((t)=>F(t).filter((f)=>f.id===n&&f.api===o)).at(0)},U="opencode_workspace_instructions";async function R(e,n){let o=new Set,a=new Map,d=new Map,t=p(n),f=t?await Zo(n).catch(()=>{return}):void 0;if(zo(f??{},J).forEach((s)=>{o.add(s.id),e.registerProvider(H({id:s.id,name:s.name,auth:{apiKey:{name:"OpenCode Console",resolve:()=>V(n)}},models:s.models,api:{"anthropic-messages":P(j()),"openai-responses":P(D()),"openai-completions":P(q()),"google-generative-ai":P(K())}}))}),t&&(await Le(n).catch(()=>{return}))?.config)["opencode","opencode-go"].filter((s)=>!o.has(s)).forEach((s)=>{o.add(s),e.registerProvider(s,{models:[]})});if(t)await M(e,n,d).catch(()=>{return});let m=f&&Ko(f),h={},I=async(s)=>{let i=[...s.modelRegistry.getAll().map((c)=>c.provider),...b(),...s.modelRegistry.getRegisteredProviderIds(),...a.keys()],r=[...new Set(i)].filter((c)=>!o.has(c)),u=await ir(n,r.map((c)=>({action:"provider.use",resources:[c]}))).catch(()=>{return});r.forEach((c,w)=>{let v=u?.[w]?.effect!=="allow";if(v&&!a.has(c)){let C=s.modelRegistry.getRegisteredNativeProvider(c);a.set(c,()=>{if(e.unregisterProvider(c),C)e.registerProvider(C)}),e.registerProvider(c,{models:[]})}let x=v?void 0:a.get(c);if(x)a.delete(c),x()}),h.fetched=(await Le(n).catch(()=>{return}))?.fetched;let l=s.model,g=m&&s.modelRegistry.find(m.provider,m.id);if(g&&(!l||a.has(l.provider)))await e.setModel(g)},E=async(s)=>{let i=await Le(n);if(i?.fetched!==h.fetched)await I(s);return i};e.on("session_start",async(s,i)=>{if(!p(n)){y(i,"OpenCode Console isn't signed in. Run `npx @opencode/console login`.","warning");return}let r=await Le(n).catch(()=>{return});if(r?.status)y(i,`${r.status.message}${r.status.url?`: ${r.status.url}`:""}`,"warning");await I(i)}),e.on("resources_discover",async()=>{if(!p(n))return;let s=await Yo(n).catch(()=>A(n));return B(s)?{skillPaths:[s]}:void 0}),e.on("before_agent_start",async(s,i)=>{if(!p(n))return;let r=s.systemPromptOptions,u=r.skills??[],l=await(async()=>{let g=await E(i),c=await ir(n,u.map((w)=>({action:"skill",resources:[w.name]})));return{text:dr(g?.config?je(g.config).instructions:[]),skills:u.filter((w,v)=>c[v]?.effect==="allow")}})().catch(()=>({text:void 0,skills:[]}));if(l.text)r.sections={...r.sections,[U]:l.text};r.skills=l.skills}),e.on("tool_call",async(s,i)=>{let r=e.getAllTools(),u=r.find((c)=>c.name===s.toolName)?.namespace?.aliases?.[0],l=[...new Set([...r.flatMap((c)=>c.namespace?.aliases?.slice(0,1)??[]),...e.getMcpServers().map((c)=>c.name)])],g=await xt(n,Wo(s,{cwd:i.cwd,server:u,servers:l,skills:A(n)}));return g?.effect==="deny"?{block:!0,reason:g.message}:void 0}),e.on("user_bash",async(s,i)=>{let r=await xt(n,[Jo(s)]);if(r?.effect!=="deny")return;return y(i,r.message,"error"),{result:{output:`${r.message}
2
+ `,exitCode:1,cancelled:!1,truncated:!1}}}),e.on("input",async(s,i)=>{if(p(n))await E(i).catch(()=>{return});let r=Go(s.text);if(!r)return{action:"continue"};let u=await xt(n,[{action:"skill",resources:[r]}]).catch((l)=>N(`/skill:${r}`,l));if(u?.effect!=="deny")return{action:"continue"};return y(i,u.message,"error"),{action:"handled"}}),e.on("before_provider_request",async(s,i)=>{let r=await _(n,i);if(r?.effect!=="deny")return;y(i,r.message,"error"),i.abort();return}),e.on("cache_warming_decision",async(s,i)=>(await _(n,i))?.effect==="deny"?{action:"stop"}:void 0),e.on("turn_start",()=>{if(p(n))M(e,n,d).catch(()=>{return})})}function p(e){return Ie(L(()=>Ee(e.store)!==void 0).pipe(Ge(()=>!0)))}async function _(e,n){let o=n.model?.provider;if(!o||!p(e))return;return xt(e,[{action:"provider.use",resources:[o]}]).catch((a)=>N(o,a))}function N(e,n){return{effect:"deny",message:`opencode-console couldn't check ${e}: ${n instanceof Error?n.message:String(n)}`}}var A=(e)=>T.join(Dn(e.store),"skills");async function M(e,n,o){let a=await Le(n),d=a?.config?Xe(a.config):{};[...o.keys()].filter((t)=>!(t in d)).forEach((t)=>{o.delete(t),Ie(L(()=>e.unregisterMcpServer(t)).pipe(en))}),Object.entries(d).forEach(([t,f])=>{let m={url:f.url,...f.headers?{headers:f.headers}:{}},h=JSON.stringify(m);if(o.get(t)===h)return;Ie(L(()=>{e.registerMcpServer(t,m),o.set(t,h)}).pipe(en))})}async function V(e){let n=await e.run(Be(e.store));if(!n)return;return{auth:{apiKey:n.type==="key"?n.key:n.access},source:"OpenCode Console"}}function P(e){let n=(o)=>o?.sessionId?{...o,headers:{...o.headers,"x-opencode-session":o.sessionId}}:o;return{...e,stream:(o,a,d)=>e.stream(o,a,n(d)),streamSimple:(o,a,d)=>e.streamSimple(o,a,n(d))}}function y(e,n,o){if(e.hasUI)e.ui.notify(n,o)}export{S as PiExtension,O as default,R as install};
package/chunk-03p95nje.js DELETED
@@ -1,6 +0,0 @@
1
- import{yt,Qr}from"./chunk-2y9vn023.js";import{on}from"./chunk-p59r4b0j.js";import{gs,xs,_e,ne,ys,ke,J,bt}from"./chunk-6rpbc10h.js";import{He,Fe}from"./chunk-5q7mrvv1.js";import{tr,at,ct,nr,Pn,lt,rr,U,Xt,gt,tn,nn}from"./chunk-frqdgjbd.js";import{er}from"./chunk-wjghq897.js";import{sr,ir}from"./chunk-6mydq7cv.js";import{Jo,Vo,ht}from"./chunk-sn451nak.js";import{_n,Ko}from"./chunk-fzckrdm3.js";import{Me}from"./chunk-jh21wbwd.js";import{k,De,N,mn,be,I,wr,Se,Kn,H,w,F,t,v,n,x,Z}from"./chunk-bkr0zk6g.js";var Ho={};k(Ho,{Pi:()=>Ho,Unreadable:()=>Br,checks:()=>Fo,config:()=>it,decide:()=>On,decisions:()=>Xn,defaultModel:()=>Mo,directory:()=>Tn,instructions:()=>Uo,manifest:()=>$o,manifestFile:()=>zr,models:()=>Bo,modelsFile:()=>Hr,paths:()=>Zi,providers:()=>Ro,refresh:()=>jo,refreshStale:()=>Js,remove:()=>Qi,session:()=>Lo,setup:()=>Yi,skillCommand:()=>Do,skills:()=>zo,userBash:()=>No});import{createHash as O}from"node:crypto";import{rmSync as W}from"node:fs";import P from"node:os";import u from"node:path";import{fileURLToPath as A}from"node:url";function Zi(e=process.env,o=P.homedir()){let r=e.PI_CODING_AGENT_DIR?.trim(),s=r?u.resolve(r==="~"?o:r.startsWith("~/")?u.join(o,r.slice(2)):r):u.join(o,".pi","agent");return{agent:s,settings:u.join(s,"settings.json")}}function Ro(e,o){return[...Map.groupBy(_n(e).flatMap((s)=>E(s,o)??[]),(s)=>s.provider)].map(([s,i])=>({id:s,name:e[s]?.name??s,models:i}))}function Mo(e){let o=_n(e).filter((s)=>M(s)!==void 0),r=Ko(o,"sonnet","opus","haiku");return r&&{provider:r.provider,id:r.id}}var _={messages:"anthropic-messages",responses:"openai-responses","chat-completions":"openai-completions","generate-content":"google-generative-ai"};function M(e){let o=U(e.entry.api),r=Object.keys(_).find((i)=>(i in o)),s=r&&Xt(U(o[r]).base_url);return r&&s?{api:_[r],baseURL:s}:void 0}function E(e,o){let r=M(e);if(!r)return;let s=r.api,i=o(e.provider,e.id,s),c=i?.api===s?i:void 0,d=e.entry,p=U(d.limit),a=U(U(d.cost).text),l=U(a.input),m=U(l.cache),y=U(d.modalities).input,S=U(U(d.capabilities).reasoning).supported;return{...s==="openai-completions"?{compat:R}:{},...c,id:e.id,name:Xt(d.name)??c?.name??e.id,api:s,provider:e.provider,baseUrl:s==="anthropic-messages"?r.baseURL.replace(/\/v1\/?$/,""):r.baseURL,reasoning:typeof S==="boolean"?S:c?.reasoning??!1,input:Array.isArray(y)?y.some((C)=>typeof C==="string"&&C.startsWith("image"))?["text","image"]:["text"]:c?.input??["text"],cost:{input:f(l.price)??c?.cost.input??0,output:f(U(a.output).price)??c?.cost.output??0,cacheRead:f(m.read)??c?.cost.cacheRead??0,cacheWrite:f(b(m.write))??f(b(U(m.explicit).write))??c?.cost.cacheWrite??0},contextWindow:f(p.context)??c?.contextWindow??128000,maxTokens:f(p.output)??c?.maxTokens??16384,headers:{...c?.headers,"x-opencode-plugin":`opencode-console/${Me}`}}}var R={supportsStore:!1,supportsDeveloperRole:!1,supportsStrictMode:!0,maxTokensField:"max_tokens"};function b(e){return typeof e==="object"&&e!==null?Object.values(e)[0]:e}function f(e){return typeof e==="number"&&Number.isFinite(e)?e:void 0}class Br extends Error{}function Fo(e,o){let r=(a,l,m={})=>({action:a,resources:l,directory:o.cwd,...m}),s=e.toolName,i=(a)=>{let l=e.input[a];return typeof l==="string"&&l!==""?l:void 0},c=(a)=>{let l=i(a);if(l===void 0)throw new Br(`${s}'s input has no ${a}`);return l},d=o.home??P.homedir(),p=(a)=>g(c(a),d);if(s.startsWith("mcp__"))return L(s,o.server).map((a)=>r(a.action,a.resources,a));switch(s){case"bash":return[r("shell",[c("command")],{shell:"bash"})];case"powershell":return[r("shell",[c("command")],{shell:"pwsh"})];case"read":{let a=p("path"),l=o.skills&&D(o.skills,u.resolve(o.cwd,a));return[l?r("skill",[l]):r("read",[a])]}case"write":case"edit":return[r("edit",[p("path")])];case"ls":return[r("read",[g(i("path")??".",d)])];case"grep":case"find":{let a=i("path");return[r(s==="find"?"glob":"grep",[c("pattern")],a===void 0?{}:{path:g(a,d)})]}case"read_mcp_resource":return[r("mcp.use",[c("server")])];case"list_mcp_resources":case"list_mcp_resource_templates":{let a=i("server"),l=o.servers??[];return[r("mcp.use",a?[a]:l.length>0?l:["*"])]}default:return[r(s.toLowerCase(),["*"])]}}function g(e,o){let r=e.replace(/[\u00A0\u2000-\u200A\u202F\u205F\u3000]/g," "),s=r.startsWith("@")?r.slice(1):r,i=s==="~"?o:s.startsWith("~/")?u.join(o,s.slice(2)):s;return i.startsWith("file://")?A(i):i}function D(e,o){let r=u.relative(u.resolve(e),o);if(r===""||r.startsWith("..")||u.isAbsolute(r))return;return r.split(u.sep)[0]}function L(e,o){let r=o&&`mcp__${o.replace(/[^A-Za-z0-9_]/g,"_")}__`,s=e.match(/^mcp__(.+?)__(.+)$/),i=o??s?.[1];if(!i)throw new Br(`Can't tell which MCP server ${e} belongs to`);let c=r&&e.startsWith(r)?e.slice(r.length):o?void 0:s?.[2],d=o!==void 0,p=c===void 0||/_[0-9a-f]{8}$/.test(e);return[{action:"mcp.use",resources:[i],...d?{}:{folded:!0}},p?{action:`${i}_`,resources:["*"],truncated:!0,folded:!0}:{action:`${i}_${c}`,resources:["*"],folded:!0}]}function No(e){return{action:"shell",resources:[e.command],directory:e.cwd,shell:"bash"}}function Do(e){return e.match(/^\/skill:([^\s]+)/)?.[1]}function Uo(e){if(e.length===0)return;return e.map((o)=>`## ${o.name}
2
-
3
- ${o.content.trim()}`).join(`
4
-
5
- `)}var j=n({paths:n({agent:t,settings:t}),extension:t,created:v,...tr}),zr=(e)=>u.join(e.data,"pi.json"),Tn=(e)=>u.join(e.data,"pi"),Hr=(e)=>u.join(e.cache,"pi-models.json");function $o(e){let o=zr(e),r=ne(o);if(r===void 0)return;let s=N(H(Z(j))(r));if(!s)throw Error(`${o} can't be read, so Pi was left as it is. Delete it and run setup again.`);return s}function Yi(e,o){let r=$o(e),s=r?.created??ne(o.paths.settings)===void 0,i=at(o.paths.settings)??{};if(!r)rr(o.paths.settings);let c=Array.isArray(i.extensions)?i.extensions:[];i.extensions=[...c.filter((p)=>p!==r?.extension&&p!==o.extension),o.extension];let d=nr(i,o.model?{defaultProvider:o.model.provider,defaultModel:o.model.id}:{},r,!0);ct(o.paths.settings,i,384),ke(zr(e),JSON.stringify(j.make({paths:o.paths,extension:o.extension,created:s,...d})))}function Qi(e){let o=$o(e);if(!o)return!1;let r=at(o.paths.settings);if(r){let i=(Array.isArray(r.extensions)?r.extensions:[]).filter((c)=>c!==o.extension);if(i.length>0)r.extensions=i;else delete r.extensions;if(Object.keys(o.originals).forEach((c)=>Pn(r,c,o)),Object.keys(r).length===0&&o.created)J(o.paths.settings);else ct(o.paths.settings,r)}return J(lt(o.paths.settings)),W(Tn(e),{recursive:!0,force:!0}),J(Hr(e)),J(zr(e)),!0}function Lo(e={}){let o=Jo({version:Me,harness:e.harness}).pipe(mn(Qr)),r=e.fetch;return{store:e.store??gs(),run:(s)=>Kn(r?s.pipe(wr(o),Se(yt,r)):s.pipe(wr(o)))}}var h=new WeakMap;function jo(e){let o=h.get(e);if(o)return o;let r=e.run(Vo(e.store)).finally(()=>h.delete(e));return h.set(e,r),r}async function On(e,o){return(await Xn(e,o)).find((r)=>r.effect==="deny")}async function Xn(e,o){let r=He(e.store),s=ir(r,r&&await it(e));return Kn(be(o,(i)=>er(s,i)))}async function it(e){let o=He(e.store);if(!o)return;let r=Fe(o),s=ht(e.store,r);if(!s)await new Promise((i)=>{let c=setTimeout(i,3000);c.unref?.(),jo(e).catch(()=>{return}).finally(()=>{clearTimeout(c),i()})});else if(sr(s,Date.now()))Js(e);return ht(e.store,r)}function Js(e){let o=xs(e.store),r=ys(o);if(r!==void 0&&Date.now()-r<30000)return!1;return ke(o,""),jo(e).catch(()=>{return}),!0}var T=n({owner:t,providers:t,document:x(t,F)}),B=x(t,n({name:w(t),models:x(t,x(t,F))}));async function Bo(e){let o=He(e.store),r=await it(e);if(!o||!r?.config)return;let s=Fe(o),i=O("sha256").update(JSON.stringify(r.config.providers??null)).digest("hex"),c=N(H(Z(T))(ne(Hr(e.store))??"")),d=c?.owner===s&&c.providers===i?c.document:void 0,p=d&&N(H(B)(d));if(p)return p;let a=await e.run(on(o));return ke(Hr(e.store),JSON.stringify({owner:s,providers:i,document:a})),a}var G=x(t,t);async function zo(e){let o=He(e.store),r=await it(e),s=u.join(Tn(e.store),"skills"),i=u.join(Tn(e.store),"skills.json");if(!o||!r?.config)return s;let c=gt(r.config).skills,d=De(H(Z(G))(ne(i)??""),()=>({})),p=await e.run(tn(o,s,c,d));return await Kn(_e(e.store,I(()=>{bt(s),ke(i,JSON.stringify(nn(s,c,p,d).skills))}))),s}
6
- export{Zi,Ro,Mo,Br,Fo,No,Do,Uo,zr,Tn,Hr,$o,Yi,Qi,Lo,jo,On,Xn,it,Js,Bo,zo,Ho};
package/chunk-2ktsq2gj.js DELETED
@@ -1,3 +0,0 @@
1
- import"./chunk-zdf3mvav.js";import"./chunk-2y9vn023.js";import{on}from"./chunk-p59r4b0j.js";import{_e,ne,ke,J}from"./chunk-6rpbc10h.js";import{Fe,xt}from"./chunk-5q7mrvv1.js";import{tr,at,ct,nr,Pn,Wr,Yo,Zs,lt,rr,U,Xt,or,gt,en,tn,nn,rn}from"./chunk-frqdgjbd.js";import"./chunk-81fv1abj.js";import"./chunk-6mydq7cv.js";import{ht}from"./chunk-sn451nak.js";import{_n,Ko,Go}from"./chunk-fzckrdm3.js";import{Me}from"./chunk-jh21wbwd.js";import{k,N,I,D,H,w,t,v,n,x,p,nt,Z}from"./chunk-bkr0zk6g.js";var R={};k(R,{ClaudeCode:()=>R,hookArgs:()=>b,manifest:()=>C,manifestFile:()=>O,models:()=>T,paths:()=>Q,refresh:()=>Y,remove:()=>ee});import{createHash as z}from"node:crypto";import{existsSync as S,rmSync as V}from"node:fs";import q from"node:os";import u from"node:path";function Q(o=process.env,e=q.homedir()){let s=o.CLAUDE_CONFIG_DIR?.trim(),i=s?u.resolve(s):u.join(e,".claude");return{config:i,settings:u.join(i,"settings.json"),global:s?u.join(i,".claude.json"):u.join(e,".claude.json"),skills:u.join(i,"skills"),memory:u.join(i,"CLAUDE.md")}}function T(o){let e=_n(o),s=Go(e);if(e.length===0||s===void 0)return;let i=(r)=>r.provider==="opencode"?r.id:`${r.provider}/${r.id}`,a=(...r)=>i(Ko(e,...r));return{baseURL:`${s}/anthropic`,options:e.map((r)=>({model:i(r),label:Xt(r.entry.name)??r.id,...r.provider==="opencode"||r.providerName===void 0?{}:{description:r.providerName}})),tiers:{opus:a("opus","sonnet","haiku"),sonnet:a("sonnet","opus","haiku"),haiku:a("haiku","sonnet","opus")}}}var X=n({baseURL:t,options:p(n({model:t,label:t,description:w(t)})),tiers:n({opus:t,sonnet:t,haiku:t})}),F=n({paths:n({config:t,settings:t,global:t,skills:t,memory:t}),command:p(t),harness:w(t),...tr,servers:p(t),skills:x(t,t),memoryCreated:v,created:w(n({settings:v,global:v})),providers:w(t),models:w(nt(X))}),O=(o)=>u.join(o.data,"claude-code.json");function C(o){let e=O(o),s=ne(e);if(s===void 0)return;let i=N(H(Z(F))(s));if(!i)throw Error(`${e} can't be read, so Claude Code was left as it is. Delete it and run setup again.`);return i}var Y=D("ClaudeCode.refresh")(function*(o,e){let s=C(o),i=e??s;if(!i)return;let a=yield*xt(o),r=a&&ht(o,Fe(a));if(!a||!r?.config)return;let l=r.config,c=gt(l),h=z("sha256").update(JSON.stringify(l.providers??null)).digest("hex"),g=!e&&s?.providers===h&&s.models!==void 0?s.models??void 0:T(yield*on(a)),E=yield*tn(a,i.paths.skills,c.skills,s?.skills??{});return yield*_e(o,I(()=>oe(o,{paths:i.paths,command:i.command,harness:e?e.harness:s?.harness,models:g,servers:Object.fromEntries(Object.entries(en(l)).map(([A,f])=>[A,{url:f.url,gateway:f.headers!==void 0}])),instructions:c.instructions,skills:c.skills,bundles:E,providers:h,explicit:e!==void 0})))});function ee(o){let e=C(o);if(!e)return!1;let s=at(e.paths.settings),i=at(e.paths.global),a=ne(e.paths.memory),r=e.created??{settings:!S(lt(e.paths.settings)),global:!S(lt(e.paths.global))};if(s)if(Object.keys(e.originals).forEach((l)=>Pn(s,l,e)),W(s,void 0),G(s),Object.keys(s).length===0&&r.settings)J(e.paths.settings);else ct(e.paths.settings,s);if(i){let l=U(i.mcpServers);if(e.servers.forEach((c)=>delete l[c]),Object.keys(l).length===0)delete i.mcpServers;else i.mcpServers=l;if(Object.keys(i).length===0&&r.global)J(e.paths.global);else ct(e.paths.global,i,384)}return Object.keys(e.skills).forEach((l)=>V(u.join(e.paths.skills,l),{recursive:!0,force:!0})),rn(e.paths.memory,a,[],e.memoryCreated),[e.paths.settings,e.paths.global].forEach((l)=>J(lt(l))),J(O(o)),!0}var b=["hook","claude-code"],B="x-opencode-plugin";function oe(o,e){let s=C(o),i=s===void 0,a=S(e.paths.settings),r=S(e.paths.global),l=at(e.paths.settings)??{},c=at(e.paths.global)??{},h=ne(e.paths.memory),M=s?.created??{settings:!a,global:!r},g=[];if(i)[e.paths.settings,e.paths.global].forEach(rr);let{originals:E,written:A}=nr(l,te(e),s,e.explicit);W(l,e.models?`${B}: opencode-console/${Me}`:void 0),G(l);let f=U(l.hooks);se(e.command).forEach(([d,y])=>{f[d]=[...Array.isArray(f[d])?f[d]:[],y]}),l.hooks=f;let _=new Set(s?.servers??[]),m=U(c.mcpServers);_.forEach((d)=>{if(!(d in e.servers))delete m[d]});let j=Object.entries(e.servers).flatMap(([d,y])=>{if(y.url===void 0||!/^[a-z0-9_-]+$/i.test(d))return[];if(d in m&&!_.has(d))return g.push(d),[];return m[d]={type:"http",url:y.url,...y.gateway?{headersHelper:or([...e.command,"mcp-headers",d])}:{}},[d]});if(Object.keys(m).length>0)c.mcpServers=m;else delete c.mcpServers;if(ct(e.paths.settings,l,384),r||j.length>0)ct(e.paths.global,c,384);let L=nn(e.paths.skills,e.skills,e.bundles,s?.skills??{});g.push(...L.skipped);let P=L.skills,K=rn(e.paths.memory,h,e.instructions,s?.memoryCreated??!1);return ke(O(o),JSON.stringify(F.make({paths:e.paths,command:[...e.command],...e.harness===void 0?{}:{harness:e.harness},originals:E,written:A,servers:j,skills:P,memoryCreated:K,created:M,providers:e.providers,models:e.models??null}))),{models:e.models,servers:j,skills:Object.keys(P),instructions:e.instructions.length,skipped:g}}function te(o){let e=o.harness===void 0?{}:{"env.OPENCODE_CONSOLE_HARNESS":o.harness};if(!o.models)return e;return{...e,apiKeyHelper:or([...o.command,"token"]),"env.ANTHROPIC_BASE_URL":o.models.baseURL,"env.ANTHROPIC_DEFAULT_OPUS_MODEL":o.models.tiers.opus,"env.ANTHROPIC_DEFAULT_SONNET_MODEL":o.models.tiers.sonnet,"env.ANTHROPIC_DEFAULT_HAIKU_MODEL":o.models.tiers.haiku,modelPicker:{options:o.models.options,replaceBuiltInOptions:!0}}}function W(o,e){let s=Wr(o,"env.ANTHROPIC_CUSTOM_HEADERS"),a=[...(typeof s==="string"?s:"").split(`
2
- `).filter((r)=>r.trim()!==""&&!r.toLowerCase().startsWith(`${B}:`)),...e===void 0?[]:[e]];if(a.length>0)Yo(o,"env.ANTHROPIC_CUSTOM_HEADERS",a.join(`
3
- `));else if(s!==void 0)Zs(o,"env.ANTHROPIC_CUSTOM_HEADERS")}function se(o){let e={type:"command",command:o[0],args:[...o.slice(1),...b]},s={...e,timeout:30,onFailure:"block"};return[["PreToolUse",{matcher:"*",hooks:[s]}],["UserPromptSubmit",{hooks:[s]}],["UserPromptExpansion",{hooks:[s]}],["SessionStart",{hooks:[{...e,timeout:10}]}]]}function G(o){let e=U(o.hooks);if(Object.entries(e).forEach(([s,i])=>{if(!Array.isArray(i))return;let a=i.flatMap((r)=>{let l=U(r).hooks;if(!Array.isArray(l))return[r];let c=l.filter((h)=>!re(h));if(c.length===l.length)return[r];return c.length===0?[]:[{...U(r),hooks:c}]});if(a.length===0)delete e[s];else e[s]=a}),Object.keys(e).length===0)delete o.hooks;else o.hooks=e}function re(o){let e=U(o).args;return Array.isArray(e)&&e.slice(-b.length).join(" ")===b.join(" ")}export{R as ClaudeCode,b as hookArgs,C as manifest,O as manifestFile,T as models,Q as paths,Y as refresh,ee as remove};
package/chunk-2y9vn023.js DELETED
@@ -1 +0,0 @@
1
- import{k,E,e,c,Y,Pe,Nt,no,s,hi,Ce,f,_,Q,vs,Ie,re,ge,i,a,C,M,j,Ae,fr,N,P,ce,un,$t,A,g,Ue,S,O,z,pn,de,xe,ye,vt,dr,Ln,R,jn,fn,so,io,Is,dn,wt,le,xi,oe,hr,gr,hn,gn,xr,Ye,me,r,T,I,Ct,o,Qe,q,yr,yn,l,bn,je,h,Xe,We,br,Ts,Ke,Sr,uo,Os,po,It,_s,Ps,Ht,qn,Wn,Rs,Ns,Wt,dt,fo,mo,ho,At,Ds,Us,$s,Kt,ue,Cr,Ar,wi,_r,tt,bo,ki,Ci,So,vo,En,Ii,Gt,Ai,Ti,Tt,Eo,zs,wo,Oi,Jt,_i,Ge,Mr,Ri,Mi,Fi,Ni,Di,Vt,ko,Ot,Vn,Zt,F,m,Z,Ks,Qt,Ve,Wi,Lr,Oo,An,Ki,_o,Gi,Po,Ji,Vi,st}from"./chunk-bkr0zk6g.js";var ui={};k(ui,{Fetch:()=>yt,RequestInit:()=>Yr,StreamBodyFallback:()=>xn,layer:()=>Qr});var hs={};k(hs,{HttpClient:()=>we,SpanNameGenerator:()=>nn,TracerDisabledWhen:()=>en,TracerHeaderFilter:()=>rn,TracerPropagationEnabled:()=>on,catch:()=>Ws,catchTag:()=>js,catchTags:()=>Gs,circuitBreakerClassifier:()=>Zo,del:()=>qs,execute:()=>ws,filterOrElse:()=>Vs,filterOrFail:()=>Qs,filterStatus:()=>Ys,filterStatusOk:()=>ai,followRedirects:()=>Sa,get:()=>Bs,head:()=>Ms,isHttpClient:()=>Yo,isTransientError:()=>Tr,isTransientResponse:()=>Ir,layerMergedContext:()=>Pr,make:()=>Ur,makeWith:()=>ot,mapRequest:()=>ci,mapRequestEffect:()=>ta,mapRequestInput:()=>ea,mapRequestInputEffect:()=>ra,options:()=>Js,patch:()=>Fs,post:()=>ks,put:()=>Ls,query:()=>As,retry:()=>oa,retryTransient:()=>na,tap:()=>ga,tapError:()=>Ea,tapRequest:()=>ya,timeout:()=>sa,transform:()=>se,transformResponse:()=>Oe,withCircuitBreaker:()=>ia,withCookiesRef:()=>xa,withRateLimiter:()=>aa,withScope:()=>li});var Vr={};k(Vr,{accept:()=>ir,acceptJson:()=>pr,appendUrl:()=>Qn,appendUrlParam:()=>Kn,appendUrlParams:()=>Xn,basicAuth:()=>$n,bearerToken:()=>si,bodyFile:()=>fs,bodyFormData:()=>is,bodyFormDataRecord:()=>cs,bodyJson:()=>ns,bodyJsonUnsafe:()=>ii,bodyStream:()=>ps,bodyText:()=>os,bodyUint8Array:()=>rs,bodyUrlParams:()=>as,compressBody:()=>es,delete:()=>Fn,empty:()=>Io,fromWeb:()=>us,get:()=>ms,head:()=>Nn,isHttpClientRequest:()=>Ft,make:()=>X,makeWith:()=>B,modify:()=>ar,options:()=>vn,patch:()=>kn,post:()=>oi,prependUrl:()=>Gn,put:()=>_n,query:()=>Mn,removeHash:()=>ts,removeHeader:()=>ut,schemaBodyJson:()=>ss,setBody:()=>W,setHash:()=>Fo,setHeader:()=>Lt,setHeaders:()=>sn,setMethod:()=>Te,setUrl:()=>Ao,setUrlParam:()=>Zn,setUrlParams:()=>Mo,toUrl:()=>ee,toWeb:()=>gs,toWebResult:()=>No,trace:()=>Jn,updateHeaders:()=>Bo,updateUrl:()=>Yn,upgrade:()=>zn});var Zr={};k(Zr,{TypeId:()=>mt,filterStatus:()=>mr,filterStatusOk:()=>an,fromWeb:()=>ur,matchStatus:()=>bs,schemaBodyJson:()=>qe,schemaBodyUrlParams:()=>Lo,schemaHeaders:()=>qo,schemaJson:()=>ys,schemaNoBody:()=>xs,stream:()=>Ss,toWeb:()=>Es});var Hn="~effect/Ref",Pa={[Hn]:{_A:c},...ge,toJSON(){return{_id:"Ref",ref:this.ref}}};var Fr=(t)=>I(()=>t.ref.current);var Nr=e(2,(t,n)=>I(()=>{t.ref.current=n(t.ref.current)}));var Le="~effect/http/HttpBody";var vr="~effect/http/HttpBody/HttpBodyError";class Je extends R("HttpBodyError"){[vr]=vr}class Ut{[Le];constructor(){this[Le]=Le}[_](){return this.toJSON()}toString(){return f(this,{ignoreToString:!0})}}class jr extends Ut{_tag="Empty";toJSON(){return{_id:"effect/HttpBody",_tag:"Empty"}}}var Pt=new jr;class zr extends Ut{_tag="Raw";body;contentType;contentLength;constructor(t,n,p){super();this.body=t,this.contentType=n,this.contentLength=p}toJSON(){return{_id:"effect/HttpBody",_tag:"Raw",body:this.body,contentType:this.contentType,contentLength:this.contentLength}}}var Gr=(t,n)=>new zr(t,n?.contentType,n?.contentLength);class ie extends Ut{_tag="Uint8Array";contentType;contentLength;text;_body;constructor(t,n,p,u){super();this._body=t,this.text=u,this.contentType=n,this.contentLength=p}get body(){return this._body??=Rn(this.text)}toJSON(){return{_id:"effect/HttpBody",_tag:"Uint8Array",body:this.contentType.startsWith("text/")||this.contentType.endsWith("json")?new TextDecoder().decode(this.body):`Uint8Array(${this.body.length})`,contentType:this.contentType,contentLength:this.contentLength}}}var he=(t,n)=>new ie(t,n??"application/octet-stream",t.length),Kr=new TextEncoder,pe=globalThis.Buffer,Rn=pe!==void 0?(t)=>pe.from(t,"utf8"):(t)=>Kr.encode(t),zt=(t,n)=>{if(typeof t!=="string")t=t===void 0?"":String(t);if(pe!==void 0)return new ie(void 0,n??"text/plain",pe.byteLength(t,"utf8"),t);let p=Kr.encode(t);return new ie(p,n??"text/plain",p.length,t)},Xr=(t,n)=>zt(JSON.stringify(t),n??"application/json"),$e=(t,n)=>q({try:()=>zt(JSON.stringify(t),n??"application/json"),catch:(p)=>new Je({reason:{_tag:"JsonError"},cause:p})}),to=(t,n)=>{let p=Ot(Qt(t));return(u,d)=>p(u,n).pipe(Ke((y)=>new Je({reason:{_tag:"SchemaError",issue:y},cause:y})),l((y)=>$e(y,d)))},eo=(t,n)=>zt(Di(Ge(t)),n??"application/x-www-form-urlencoded");class ro extends Ut{_tag="FormData";contentType=void 0;contentLength=void 0;formData;constructor(t){super();this.formData=t}toJSON(){return{_id:"effect/HttpBody",_tag:"FormData",formData:this.formData}}}var ze=(t)=>new ro(t),qr=(t,n,p)=>{if(p==null)return;if(typeof p==="object"){t.append(n,p);return}t.append(n,String(p))},oo=(t)=>{let n=new globalThis.FormData;for(let[p,u]of Object.entries(t))if(Array.isArray(u))for(let d of u)qr(n,p,d);else qr(n,p,u);return ze(n)};class ao extends Ut{_tag="Stream";stream;contentType;contentLength;constructor(t,n,p){super();this.stream=t,this.contentType=n,this.contentLength=p}toJSON(){return{_id:"effect/HttpBody",_tag:"Stream",contentType:this.contentType,contentLength:this.contentLength}}}var Yt=(t,n,p)=>new ao(t,n??"application/octet-stream",p),Jr=(t,n,p)=>{let u=_r(t);return M(u)?r(u.value):o(Ve({module:"HttpBody",method:p,description:`Invalid ${n}: ${t}`}))},Tn=ue(function*(t,n,p){let u=p?.offset===void 0?wi:yield*Jr(p.offset,"offset",n),d=p?.bytesToRead===void 0?void 0:yield*Jr(p.bytesToRead,"bytesToRead",n),y=u>=t?BigInt("0"):t-u,x=d===void 0||d>y?y:d;if(x>BigInt(Number.MAX_SAFE_INTEGER))return yield*o(Ve({module:"HttpBody",method:n,description:`Content length exceeds Number.MAX_SAFE_INTEGER: ${x}`}));return Number(x)}),co=(t,n)=>l(st,(p)=>l(p.stat(t),(u)=>h(Tn(u.size,"file",n),(d)=>Yt(p.stream(t,n),n?.contentType,d))));var Ze="~effect/http/HttpClientError",Xt=(t)=>s(t,Ze);class D extends R("HttpClientError"){constructor(t){if("cause"in t.reason)super({...t,cause:t.reason.cause});else super(t)}[Ze]=Ze;get request(){return this.reason.request}get response(){return"response"in this.reason?this.reason.response:void 0}get message(){return this.reason.message}}var Bt=(t)=>t.endsWith("Error")?t.slice(0,-5):t,Dt=(t,n,p)=>n?`${t}: ${n} (${p})`:`${t} error (${p})`,Mt=(t)=>`${t.method} ${Vt(t.url)}`,kt=(t,n)=>({...n,request:{_id:"HttpClientRequest",method:t.request.method,url:Vt(t.request.url)},..."response"in t?{response:{_id:"HttpClientResponse",status:t.response.status}}:void 0});class _t extends R("TransportError"){get methodAndUrl(){return Mt(this.request)}get message(){return Dt(Bt(this._tag),this.description,this.methodAndUrl)}toJSON(){return kt(this,super.toJSON())}}class Se extends R("EncodeError"){get methodAndUrl(){return Mt(this.request)}get message(){return Dt(Bt(this._tag),this.description,this.methodAndUrl)}toJSON(){return kt(this,super.toJSON())}}class tr extends R("InvalidUrlError"){get methodAndUrl(){return Mt(this.request)}get message(){return Dt(Bt(this._tag),this.description,this.methodAndUrl)}toJSON(){return kt(this,super.toJSON())}}class ht extends R("StatusCodeError"){get methodAndUrl(){return Mt(this.request)}get message(){let t=`${this.response.status} ${this.methodAndUrl}`;return Dt(Bt(this._tag),this.description,t)}toJSON(){return kt(this,super.toJSON())}}class gt extends R("DecodeError"){get methodAndUrl(){return Mt(this.request)}get message(){let t=`${this.response.status} ${this.methodAndUrl}`;return Dt(Bt(this._tag),this.description,t)}toJSON(){return kt(this,super.toJSON())}}class er extends R("EmptyBodyError"){get methodAndUrl(){return Mt(this.request)}get message(){let t=`${this.response.status} ${this.methodAndUrl}`;return Dt(Bt(this._tag),this.description,t)}toJSON(){return kt(this,super.toJSON())}}function rr(t){return t!=="GET"&&t!=="HEAD"&&t!=="OPTIONS"&&t!=="TRACE"}var lo=[["GET","get"],["POST","post"],["PUT","put"],["DELETE","del"],["PATCH","patch"],["HEAD","head"],["OPTIONS","options"],["TRACE","trace"],["QUERY","query"]];var yo=(t)=>(n)=>n.pipeThrough(new CompressionStream(t)),wn=(t)=>new ReadableStream({start(n){n.enqueue(t),n.close()}}),xo=(t,n,p)=>{if(t._tag!=="Uint8Array"&&t._tag!=="Stream")return r(t);if(t.contentLength!==void 0&&t.contentLength<(p?.minSize??1024))return r(t);if(t._tag==="Uint8Array")return h(Ye(()=>new globalThis.Response(yo(n)(wn(t.body))).arrayBuffer()),(u)=>he(new Uint8Array(u),t.contentType));return r(Yt(Oo({evaluate:()=>yo(n)(Ji(t.stream)),onError:c}),t.contentType))};var Ho=(t,n)=>{if(n._tag==="Empty"||n._tag==="FormData")return Tt(Tt(t,"content-type"),"content-length");return t=n.contentType===void 0?Tt(t,"content-type"):Gt(t,"content-type",n.contentType),or(t,n)},or=(t,n)=>{let p=n._tag==="Empty"||n._tag==="FormData"?void 0:n.contentLength;return p===void 0?Tt(t,"content-length"):Gt(t,"content-length",p.toString())},Co=(t)=>{if(t===null||t===void 0||!/^\d+$/.test(t))return;let n=Number(t);return Number.isSafeInteger(n)?n:void 0};class Re extends R("UrlError"){}var te=(t,n,p)=>Ue({try:()=>{let u=new URL(t,Bn());for(let d=0;d<n.params.length;d++){let[y,x]=n.params[d];if(x!==void 0)u.searchParams.append(y,Jt(x))}if(p!==void 0)u.hash=p;return u},catch:(u)=>new Re({cause:u})}),Bn=()=>{if("location"in globalThis&&globalThis.location!==void 0&&globalThis.location.origin!==void 0&&globalThis.location.pathname!==void 0){let t=location.origin+location.pathname;try{return new URL(t).href}catch{return}}return},To=(t,n)=>Ue({try:()=>new URL(t,n),catch:()=>new dn(`Invalid URL: "${t}"${n!==void 0?` with base "${n}"`:""}`)});var sr="~effect/http/HttpClientRequest",Ft=(t)=>s(t,sr),Dn={[sr]:sr,...Q,toJSON(){return{_id:"HttpClientRequest",method:this.method,url:Vt(this.url),urlParams:this.urlParams,hash:this.hash,headers:Ce(this.headers),body:this.body.toJSON()}},pipe(){return E(this,arguments)}};function B(t,n,p,u,d,y){let x=Object.create(Dn);return x.method=t,x.url=n,x.urlParams=p,x.hash=u,x.headers=d,x.body=y,x}var Io=B("GET","",Mr,i(),vo,Pt),X=(t)=>(n,p)=>ar(Io,{method:t,url:n,...p??void 0}),ms=X("GET"),Mn=X("QUERY"),oi=X("POST"),kn=X("PATCH"),_n=X("PUT"),Fn=X("DELETE");var Nn=X("HEAD"),vn=X("OPTIONS"),Jn=X("TRACE"),ar=e(2,(t,n)=>{let p=t;if(n.method)p=Te(p,n.method);if(n.url)p=Ao(p,n.url);if(n.headers)p=sn(p,n.headers);if(n.urlParams)p=Mo(p,n.urlParams);if(n.hash)p=Fo(p,n.hash);if(n.body)p=W(p,n.body);if(n.accept)p=ir(p,n.accept);if(n.acceptJson)p=pr(p);return p}),Te=e(2,(t,n)=>B(n,t.url,t.urlParams,t.hash,t.headers,t.body)),Lt=e(3,(t,n,p)=>B(t.method,t.url,t.urlParams,t.hash,Gt(t.headers,n,p),t.body)),sn=e(2,(t,n)=>B(t.method,t.url,t.urlParams,t.hash,Ai(t.headers,n),t.body)),Bo=e(2,(t,n)=>B(t.method,t.url,t.urlParams,t.hash,n(t.headers),t.body)),ut=e(2,(t,n)=>Bo(t,Tt(n))),$n=e(3,(t,n,p)=>Lt(t,"Authorization",`Basic ${tt(`${So(n)}:${So(p)}`)}`)),si=e(2,(t,n)=>Lt(t,"Authorization",`Bearer ${So(n)}`)),ir=e(2,(t,n)=>Lt(t,"Accept",n)),pr=ir("application/json"),zn=e(2,(t,n)=>B(t.method,t.url,t.urlParams,t.hash,Gt(Gt(t.headers,"connection","Upgrade"),"upgrade",n),t.body)),Ao=e(2,(t,n)=>{if(typeof n==="string")return B(t.method,n,t.urlParams,t.hash,t.headers,t.body);let p=new URL(n.toString()),u=Ge(p.searchParams),d=Ae(p.hash===""?void 0:p.hash.slice(1));return p.search="",p.hash="",B(t.method,p.toString(),u,d,t.headers,t.body)}),Gn=e(2,(t,n)=>{if(n==="")return t;return B(t.method,Do(n,t.url),t.urlParams,t.hash,t.headers,t.body)}),Qn=e(2,(t,n)=>{if(n==="")return t;return B(t.method,Do(t.url,n),t.urlParams,t.hash,t.headers,t.body)}),Do=(t,n)=>{let p=t.endsWith("/"),u=n.startsWith("/");return p&&u?t+n.slice(1):!p&&!u?t+"/"+n:t+n},Yn=e(2,(t,n)=>B(t.method,n(t.url),t.urlParams,t.hash,t.headers,t.body)),Zn=e(3,(t,n,p)=>B(t.method,t.url,Ri(t.urlParams,n,p),t.hash,t.headers,t.body)),Mo=e(2,(t,n)=>B(t.method,t.url,Mi(t.urlParams,n),t.hash,t.headers,t.body)),Kn=e(3,(t,n,p)=>B(t.method,t.url,Fi(t.urlParams,n,p),t.hash,t.headers,t.body)),Xn=e(2,(t,n)=>B(t.method,t.url,Ni(t.urlParams,n),t.hash,t.headers,t.body)),Fo=e(2,(t,n)=>B(t.method,t.url,t.urlParams,a(n),t.headers,t.body)),ts=(t)=>B(t.method,t.url,t.urlParams,i(),t.headers,t.body),W=e(2,(t,n)=>B(t.method,t.url,t.urlParams,t.hash,Ho(t.headers,n),n)),es=e((t)=>Ft(t[0]),(t,n,p)=>{if(t.headers["content-encoding"]!==void 0)return r(t);return h(xo(t.body,n,p),(u)=>u===t.body?t:B(t.method,t.url,t.urlParams,t.hash,Gt(or(t.headers,u),"content-encoding",n),u))}),rs=e((t)=>Ft(t[0]),(t,n,p)=>W(t,he(n,p))),os=e((t)=>Ft(t[0]),(t,n,p)=>W(t,zt(n,p))),ns=e(2,(t,n)=>h($e(n),(p)=>W(t,p))),ii=e(2,(t,n)=>W(t,Xr(n))),ss=(t,n)=>{let p=to(t,n);return e(2,(u,d)=>h(p(d),(y)=>W(u,y)))},as=e(2,(t,n)=>W(t,eo(Ge(n)))),is=e(2,(t,n)=>W(t,ze(n))),cs=e(2,(t,n)=>W(t,oo(n))),ps=e((t)=>Ft(t[0]),(t,n,p)=>W(t,Yt(n,p?.contentType,p?.contentLength))),fs=e((t)=>Ft(t[0]),(t,n,p)=>h(co(n,p),(u)=>W(t,u)));function ee(t){let n=te(t.url,t.urlParams,N(t.hash));if(O(n))return a(n.success);return i()}var us=(t)=>{let n=t.method.toUpperCase();return ar(B(n,"",Mr,i(),vo,Pt),{url:new URL(t.url),headers:t.headers,body:ds(t,n)})},ds=(t,n)=>{if(!rr(n)||t.body===null)return Pt;return Gr(t.body,{contentType:t.headers.get("content-type")??void 0,contentLength:Co(t.headers.get("content-length"))})},No=(t,n)=>{let p=te(t.url,t.urlParams,N(t.hash));if(S(p))return g(p.failure);let u={method:t.method,headers:t.headers};if(n?.signal)u.signal=n.signal;if(rr(t.method))switch(t.body._tag){case"Empty":break;case"Raw":{if(u.body=t.body.body,ls(t.body.body))u.duplex="half";break}case"Uint8Array":{u.body=t.body.body;break}case"FormData":{u.body=t.body.formData;break}case"Stream":{u.body=Po(t.body.stream,n?.context??ce()),u.duplex="half";break}}return Ue({try:()=>new Request(p.success,u),catch:(d)=>new Re({cause:d})})},ls=(t)=>typeof ReadableStream<"u"&&t instanceof ReadableStream,gs=(t,n)=>Wn((p)=>yn(No(t,{context:p,signal:n?.signal})));var xt="~effect/http/HttpIncomingMessage";var qe=(t,n)=>{let p=Zt(Qt(t)),u=n?.reviver===void 0?void 0:Zt(Z(Qt(t),n));return(d)=>u===void 0?l(d.json,(y)=>p(y,n)):l(d.text,(y)=>y===""?l(d.json,(x)=>p(x,n)):u(y,n))},Lo=(t,n)=>{let p=Ks.pipe(m(t),Zt);return(u)=>l(u.urlParamsBody,(d)=>p(d,n))},qo=(t,n)=>{let p=Vn(t);return(u)=>p(u.headers,n)};var Jo=(t,n)=>({...n,headers:Ce(t.headers),remoteAddress:t.remoteAddress});var Be="~effect/http/HttpClientResponse/WebSource",De=(t)=>t["~effect/http/HttpClientResponse/WebSource"]?.();var mt="~effect/http/HttpClientResponse",ur=(t,n)=>new $o(t,n),Es=(t)=>fr(De(t)),ys=(t,n)=>{let p=Zt(Qt(t),n),u=qe(F,n);return(d)=>l(u(d),(y)=>p({status:d.status,headers:d.headers,body:y}))},xs=(t,n)=>{let p=Zt(t,n);return(u)=>p({status:u.status,headers:u.headers})},Ss=(t)=>An(h(t,(n)=>n.stream)),bs=e(2,(t,n)=>{let p=t.status;if(n[p])return n[p](t);else if(p>=200&&p<300&&n["2xx"])return n["2xx"](t);else if(p>=300&&p<400&&n["3xx"])return n["3xx"](t);else if(p>=400&&p<500&&n["4xx"])return n["4xx"](t);else if(p>=500&&p<600&&n["5xx"])return n["5xx"](t);return n.orElse(t)}),mr=e(2,(t,n)=>T(()=>n(t.status)?r(t):o(new D({reason:new ht({response:t,request:t.request,description:"invalid status code"})})))),an=(t)=>t.status>=200&&t.status<300?r(t):o(new D({reason:new ht({response:t,request:t.request,description:"non 2xx status code"})}));class $o extends vs{[xt];[mt];request;source;constructor(t,n){super();this.request=t,this.source=n,this[xt]=xt,this[mt]=mt}toJSON(){return Jo(this,{_id:"HttpClientResponse",request:this.request.toJSON(),status:this.status})}get status(){return this.source.status}get url(){if(this.source.url)return this.source.url.split("#")[0];let t=ee(this.request);if(C(t))return"";return t.value.hash="",t.value.href}get headers(){return En(this.source.headers)}cachedCookies;get cookies(){if(this.cachedCookies)return this.cachedCookies;return this.cachedCookies=bo(this.source.headers.getSetCookie?.()??[])}get remoteAddress(){return i()}[Be](){return this.source}get stream(){return this.source.body?Oo({evaluate:()=>this.source.body,onError:(t)=>new D({reason:new gt({request:this.request,response:this,cause:t})})}):Lr(new D({reason:new er({request:this.request,response:this,description:"can not create stream from empty body"})}))}get json(){return l(this.text,(t)=>q({try:()=>t===""?null:JSON.parse(t),catch:(n)=>new D({reason:new gt({request:this.request,response:this,cause:n})})}))}textBody;get text(){return this.textBody??=h(this.arrayBuffer,(t)=>new TextDecoder().decode(t))}get urlParamsBody(){return l(this.arrayBuffer,(t)=>q({try:()=>Ge(_i(t)),catch:(n)=>new D({reason:new gt({request:this.request,response:this,cause:n})})}))}formDataBody;get formData(){return this.formDataBody??=me({try:()=>this.source.formData(),catch:(t)=>new D({reason:new gt({request:this.request,response:this,cause:t})})}).pipe(fo,Kt)}arrayBufferBody;get arrayBuffer(){if(this.arrayBufferBody)return this.arrayBufferBody;return this.arrayBufferBody=me({try:()=>this.source.arrayBuffer(),catch:(t)=>new D({reason:new gt({request:this.request,response:this,cause:t})})}).pipe(fo,Kt),this.arrayBufferBody}get upgrade(){return o(new D({reason:new ht({request:this.request,response:this,description:"fetch cannot hand over the connection of an HTTP upgrade"})}))}pipe(){return E(this,arguments)}}var jo=(t)=>Ii({b3:`${t.traceId}-${t.spanId}-${t.sampled?"1":"0"}${j(t.parent,{onNone:()=>"",onSome:(n)=>`-${n.spanId}`})}`,traceparent:`00-${t.traceId.padStart(32,"0")}-${t.spanId}-${t.sampled?"01":"00"}`});var Hs={"http:":80,"https:":443,"ws:":80,"wss:":443},Go=(t,n,p)=>{let u=Vt(n.search,p).slice(1);if(t.attribute("url.full",Vt(n.href,p)),t.attribute("url.path",n.pathname),u!=="")t.attribute("url.query",u);if(t.attribute("url.scheme",n.protocol.slice(0,-1)),n.hostname!==""){t.attribute("server.address",n.hostname.startsWith("[")?n.hostname.slice(1,-1):n.hostname);let d=n.port===""?Hs[n.protocol]:Number(n.port);if(d!==void 0)t.attribute("server.port",d)}},Vo=(t,n)=>{let p=t.params.filter(([,u])=>typeof u!=="string").map(([u])=>u);return p.length===0?n:[...n,...new URLSearchParams(p.map((u)=>[u,""])).keys()]},lr=(t,n,p,u,d)=>{for(let y in p){if(!u(y,n))continue;t.attribute(`http.${n}.header.${y}`,Eo(y,d)?"<redacted>":p[y])}};var Hr="~effect/http/HttpClient",Yo=(t)=>s(t,Hr),we=P("effect/HttpClient"),ct=(t)=>(...n)=>l(we,(p)=>p[t](...n)),ws=ct("execute"),Bs=ct("get"),As=ct("query"),Ms=ct("head"),ks=ct("post"),Fs=ct("patch"),Ls=ct("put"),qs=ct("del"),Js=ct("options"),se=e(2,(t,n)=>ot(l((p)=>n(t.postprocess(r(p)),p)),t.preprocess)),Oe=e(2,(t,n)=>ot((p)=>n(t.postprocess(p)),t.preprocess)),Ws=e(2,(t,n)=>Oe(t,We(n)));var js=e(3,(t,n,p)=>Oe(t,(u)=>br(u,n,p))),Gs=e(2,(t,n)=>Oe(t,Ts(n))),Vs=e(3,(t,n,p)=>Oe(t,_s(n,p))),Qs=e(3,(t,n,p)=>Oe(t,Ps(n,p))),Ys=e(2,(t,n)=>Oe(t,l(mr(n)))),ai=Oe(l(an)),ot=(t,n)=>{let p=Object.create(Zs);return p.preprocess=n,p.postprocess=t,p.execute=function(u){return t(n(u))},p},Zs={[Hr]:Hr,pipe(){return E(this,arguments)},...Q,toJSON(){return{_id:"effect/HttpClient"}},...Object.fromEntries(lo.map(([t,n])=>[n,function(p,u){return this.execute(X(t)(p,u))}]))},Ur=(t)=>ot((n)=>l(n,(p)=>yr((u)=>{let d=ke.get(p),y=d??new AbortController,x=te(p.url,p.urlParams,N(p.hash));if(S(x))return o(new D({reason:new tr({request:p,cause:x.failure})}));let H=x.success;if(u.getRef(jn)||u.getRef(en)(p)){let w=t(p,H,y.signal,u);if(d)return h(w,(U)=>Er(U,y,!0));return At((U)=>Ht(U(w),{onSuccess(b){return r(Er(b,y,!1))},onFailure(b){if(so(b))y.abort();return Qe(b)}}))}return Us(u.getRef(nn)(p),{kind:"client"},(w)=>{w.attribute("http.request.method",p.method);let U=u.getRef(zs);Go(w,H,Vo(p.urlParams,u.getRef(ko)));let b=u.getRef(rn);return lr(w,"request",p.headers,b,U),p=u.getRef(on)?sn(p,jo(w)):p,At((G)=>G(t(p,H,y.signal,u)).pipe($s(w,{captureStackTrace:!1}),Ht({onSuccess:(L)=>{if(w.attribute("http.response.status_code",L.status),lr(w,"response",L.headers,b,U),L.status>=400&&L.status<600)w.attribute("error.type",String(L.status)),Xs(u,w,p,L);return r(Er(L,y,d!==void 0))},onFailure(L){if(!d&&so(L))y.abort();return Qe(L)}})))})})),r),Xs=(t,n,p,u)=>{let d=Ie();re(0);let y;try{y=wt(new D({reason:new ht({request:p,response:u})}))}finally{re(d)}n.end(t.getRef(xi)?t.getRef(hr).currentTimeNanosUnsafe():BigInt(0),y)},ci=e(2,(t,n)=>ot(t.postprocess,(p)=>h(t.preprocess(p),n))),ta=e(2,(t,n)=>ot(t.postprocess,(p)=>l(t.preprocess(p),n))),ea=e(2,(t,n)=>ot(t.postprocess,(p)=>t.preprocess(n(p)))),ra=e(2,(t,n)=>ot(t.postprocess,(p)=>l(n(p),t.preprocess))),oa=e(2,(t,n)=>Oe(t,uo(n))),na=e(2,(t,n)=>{let p=gr(n),u=p?"errors-and-responses":n.retryOn??"errors-and-responses",d=Ha(p?n:n.schedule??xr),y=p?void 0:n.times;return Oe(t,no(u==="errors-only"?c:Ds({schedule:d,times:y,while:Ir}),u==="response-only"?c:uo({while:p||n.while===void 0?Tr:hi(Tr,n.while),schedule:d,times:y})))}),sa=e(2,(t,n)=>{let p=z(n),u=`timed out after ${Ln(p)}`;return se(t,(d,y)=>Os(d,{duration:p,orElse:()=>o(new D({reason:new _t({request:y,cause:new Is(`Operation ${u}`),description:u})}))}))}),aa=e(2,(t,n)=>{let p={initial:!0,limit:n.limit,window:vt(z(n.window),de(1))},u=new Map,d=n.key,y=typeof d==="function"?d:Y(d),x=n.tokens,H=typeof x==="function"?x:Y(x??1),K=!n.disableAdaptiveLearning,w=ua(n.responseHeaders),U=(V)=>{let v=u.get(V);if(v!==void 0)return v;return u.set(V,p),p},b=new Map,G=(V)=>{let v=b.get(V);if(v===void 0)v={sent:0,observed:0,remaining:0,resetAt:0},b.set(V,v);return v},L=n.disableResponseInspection?void 0:(V,v,at,St,Fe)=>{let pt=U(v),nt=da(pt,V,at,St,w);if(nt.limit!==pt.limit||!dr(nt.window,pt.window))u.set(v,nt);let it=Xo(at,w),et=G(v);if(it===void 0||Fe<=et.observed)return;let qt=Rr(V,at,w);if(et.observed=Fe,et.remaining=it,qt!==void 0)et.resetAt=V.currentTimeMillisUnsafe()+ye(qt)};return se(t,function V(v,at,St=0){let pt=Ar().getRef(hr),nt=y(at),it=Math.max(H(at),1),et=G(nt),qt=pt.currentTimeMillisUnsafe();if(et.resetAt>qt&&et.remaining-(et.sent-et.observed)<it)return l(It(et.resetAt-qt),()=>V(v,at,St));let Sn=et.sent+=it,ae=U(nt),Or=n.times===void 0||St<n.times;function Br(rt){return rt?l(It(rt),()=>V(v,at,St+1)):V(v,at,St+1)}let Dr=(rt,bt)=>{if(L?.(pt,nt,rt.headers,it,Sn),n.disableResponseInspection||rt.status!==429)return r(void 0);let jt=tn(pt.currentTimeMillisUnsafe(),ne(rt.headers,...w.retryAfter));if(jt===void 0)return r(void 0);let J=Rr(pt,rt.headers,w)??jt;if(bt===void 0)return r(J);return Xe(n.limiter.adaptiveFeedback({key:nt,epoch:bt.epoch,tokens:it,status:rt.status,retryAfter:J}),J)};return l(n.limiter.consume({algorithm:n.algorithm,onExceeded:"delay",key:nt,limit:ae.limit,window:ae.window,tokens:it}),({delay:rt})=>{let bt=()=>{let jt=(J)=>{let kr=qn(v,{onSuccess(ft){return l(Dr(ft,J),(Ne)=>{if(ft.status!==429||!Or)return r(ft);return Br(Ne)})},onFailure(ft){if(Ca(ft))return l(Dr(ft.reason.response,J),(Ne)=>Or?Br(Ne):o(ft));return o(ft)}});return J===void 0||pn(J.delay)?kr:po(kr,J.delay)};if(!K)return jt(void 0);return l(n.limiter.adaptiveConsume({key:nt,tokens:it,fallbackLimit:ae.limit,fallbackWindow:ae.window}),(J)=>{if(!pn(J.delay)&&J.phase==="cooldown")return l(It(J.delay),bt);return jt(J)})};return pn(rt)?bt():l(It(rt),bt)})})}),ia=e(2,(t,n)=>{let p=n.key,u=typeof p==="function"?p:p===void 0?ca:Y(p),d=n.classify??Zo;return se(t,(y,x)=>n.breaker.execute(y,{key:u(x),classify:d}))}),ca=(t)=>j(ee(t),{onNone:()=>t.url,onSome:(n)=>n.origin}),Zo=(t)=>Cr((n)=>r(pa(t,n.currentTimeMillisUnsafe()))),pa=(t,n)=>{if(le(t)){let y=Ko(t.value.status);return y==="Failure"?Qo(wr(t.value,n)):{_tag:y}}let p=!1,u=!1,d;for(let y of t.cause.reasons){if(!fn(y))continue;let x=fa(y.error);if(x==="Failure"){p=!0;let H=wr(y.error,n);if(H!==void 0)d=d===void 0?H:vt(d,H)}else if(x==="Success")u=!0}return p?Qo(d):{_tag:u?"Success":"Ignored"}},Qo=(t)=>({_tag:"Failure",retryAfter:t}),fa=(t)=>{if(io(t))return"Failure";if(!Xt(t))return"Ignored";switch(t.reason._tag){case"TransportError":return"Failure";case"StatusCodeError":return Ko(t.reason.response.status);default:return"Ignored"}},Ko=(t)=>t===429?"Ignored":t===408||t===500||t===502||t===503||t===504?"Failure":"Success",ua=(t)=>({limit:t?.limit===void 0?["ratelimit-limit","x-ratelimit-limit"]:[t.limit.toLowerCase()],remaining:t?.remaining===void 0?["ratelimit-remaining","x-ratelimit-remaining"]:[t.remaining.toLowerCase()],reset:t?.reset===void 0?["ratelimit-reset","x-ratelimit-reset"]:[t.reset.toLowerCase()],resetAfter:t?.resetAfter===void 0?["ratelimit-reset-after","x-ratelimit-reset-after"]:[t.resetAfter.toLowerCase()],retryAfter:t?.retryAfter===void 0?["retry-after"]:[t.retryAfter.toLowerCase()]}),da=(t,n,p,u,d)=>{let y=ma(t,p,u,d)??t.limit,x=Rr(n,p,d)??t.window;if(y===t.limit&&dr(x,t.window))return t;return{limit:y,window:x,initial:!1}},ma=(t,n,p,u)=>{let d=ne(n,...u.limit),y=_e(d);if(y!==void 0&&y>0)return y;let x=Xo(n,u);if(x===void 0)return;return t.initial?x+p:Math.max(x+p,t.limit)},Xo=(t,n)=>{let p=ne(t,...n.remaining),u=_e(p);return u!==void 0&&u>=0?u:void 0},Rr=(t,n,p)=>{let u=la(ne(n,...p.resetAfter));if(u!==void 0)return u;return ha(t,ne(n,...p.reset))},tn=(t,n)=>{if(n===void 0)return;let p=wo(n);return O(p)?vt(Oi(p.success,t),de(1)):void 0},la=(t)=>{let n=_e(t);if(n===void 0||n<=0)return;return vt(xe(n),de(1))},ha=(t,n)=>{let p=_e(n);if(p===void 0||p<=0)return;let u=t.currentTimeMillisUnsafe();if(p>1000000000000)return de(Math.max(p-u,1));if(p>1e9)return de(Math.max(p*1000-u,1));return vt(xe(p),de(1))},_e=(t)=>{if(t===void 0)return;let n=/-?\d+(?:\.\d+)?/.exec(t);if(n===null)return;let p=Number(n[0]);return Number.isFinite(p)?p:void 0},ne=(t,...n)=>{for(let p=0;p<n.length;p++){let u=t[n[p]];if(u!==void 0)return u}return},ga=e(2,(t,n)=>Oe(t,je(n))),Ea=e(2,(t,n)=>Oe(t,Sr(n))),ya=e(2,(t,n)=>ot(t.postprocess,(p)=>je(t.preprocess(p),n))),xa=e(2,(t,n)=>{let p=()=>Ar().getRef(hr).currentTimeMillisUnsafe(),u=(d)=>h(Fr(n),(y)=>{let x=Ci(y,d.url,p());if(x===void 0)return d;let H=Lt(d,"cookie",x),K=ke.get(d);if(K!==void 0)ke.set(H,K);return H});return ot((d)=>je(t.postprocess(l(d,u)),(y)=>Nr(n,ki(y.url,y.cookies,p()))),t.preprocess)}),li=(t)=>se(t,(n,p)=>{let u=new AbortController;return ke.set(p,u),bn(Ns(()=>I(()=>u.abort())),n)}),Sa=e((t)=>Yo(t[0]),(t,n)=>ot((p)=>{let u=(d,y)=>T(()=>{let x;return l(t.postprocess(h(d,(H)=>(x=H,H))),(H)=>{if(H.status<300||H.status>=400||!H.headers.location||y>=(n??10))return r(H);let K=To(H.headers.location,H.request.url);if(S(K))return r(H);let w=K.success,U=x??H.request,b=U;if((H.status===301||H.status===302)&&U.method==="POST"||H.status===303&&U.method!=="GET"&&U.method!=="HEAD")b=Te(b,"GET"),b=W(b,Pt),b=ut(b,"content-encoding"),b=ut(b,"content-language"),b=ut(b,"content-location");if(w.origin!==new URL(H.request.url).origin)b=ut(b,"authorization"),b=ut(b,"proxy-authorization"),b=ut(b,"cookie");let G=w.hash===""?i():a(w.hash.slice(1));return w.hash="",b=B(b.method,w.href,Mr,G,b.headers,b.body),bn(I(()=>cn.get(H)?.abort()),u(r(b),y+1))})});return u(p,0)},t.preprocess)),en=A("effect/http/HttpClient/TracerDisabledWhen",{defaultValue:()=>Nt}),rn=A("effect/http/HttpClient/TracerHeaderFilter",{defaultValue:()=>Nt}),on=A("effect/http/HttpClient/TracerPropagationEnabled",{defaultValue:Pe}),nn=A("effect/http/HttpClient/SpanNameGenerator",{defaultValue:()=>(t)=>t.method}),Pr=(t)=>oe(we)(Wn((n)=>h(t,(p)=>Oe(p,Rs((u)=>$t(n,u)))))),Me=(()=>{if("FinalizationRegistry"in globalThis&&globalThis.FinalizationRegistry){let n=new FinalizationRegistry((p)=>{try{p.abort()}catch{}});return{register(p,u){n.register(p,u,p)},unregister(p){n.unregister(p)}}}let t=new WeakMap;return{register(n,p){t.set(n,setTimeout(()=>p.abort(),5000))},unregister(n){let p=t.get(n);if(p===void 0)return;clearTimeout(p),t.delete(n)}}})(),ke=new WeakMap,cn=new WeakMap,Er=(t,n,p)=>{if(!p)Me.register(t,n),t=new mn(t,n);return cn.set(t,n),t};class mn{original;controller;constructor(t,n){this.original=t,this.controller=n}[mt]=mt;[xt]=xt;applyInterrupt(t){return T(()=>(Me.unregister(this.original),ho(t,()=>I(()=>{this.controller.abort()}))))}get request(){return this.original.request}get url(){return this.original.url}get status(){return this.original.status}get headers(){return this.original.headers}get cookies(){return this.original.cookies}get remoteAddress(){return this.original.remoteAddress}get formData(){return this.applyInterrupt(this.original.formData)}get text(){return this.applyInterrupt(this.original.text)}get json(){return this.applyInterrupt(this.original.json)}get urlParamsBody(){return this.applyInterrupt(this.original.urlParamsBody)}get arrayBuffer(){return this.applyInterrupt(this.original.arrayBuffer)}get upgrade(){return this.applyInterrupt(this.original.upgrade)}[Be](){let t=De(this.original);if(t!==void 0)Me.unregister(this.original);return t}get stream(){return Wi(()=>(Me.unregister(this.original),_o(this.original.stream,I(()=>{this.controller.abort()}))))}toJSON(){return this.original.toJSON()}[_](){return this.original[_]()}pipe(){return E(this,arguments)}}var Tr=(t)=>io(t)||ba(t),ba=(t)=>Xt(t)&&(t.reason._tag==="TransportError"||t.reason._tag==="StatusCodeError"&&Ir(t.reason.response)),wr=(t,n)=>{let p=Xt(t)?t.response:s(t,mt)?t:void 0;return tn(n,p?.headers["retry-after"])},Ha=(t)=>hn(h(gn(t),(n)=>(p,u)=>{let d=wr(u,p);if(d===void 0)return n(p,u);return h(n(p,u),([y,x])=>[y,vt(x,d)])})),Ca=(t)=>Xt(t)&&t.reason._tag==="StatusCodeError"&&t.reason.response.status===429,Ir=(t)=>t.status===408||t.status===429||t.status===500||t.status===502||t.status===503||t.status===504;var yt=A("effect/http/FetchHttpClient/Fetch",{defaultValue:()=>globalThis.fetch}),xn=A("effect/http/FetchHttpClient/StreamBodyFallback",{defaultValue:()=>"error"});class Yr extends P()("effect/http/FetchHttpClient/RequestInit"){}var ln,Ra=()=>{try{let t=!1,n=new ReadableStream,p=new Request("https://example.com",{method:"POST",body:n,get duplex(){return t=!0,"half"}});return(t||p.body===n)&&!p.headers.has("Content-Type")}catch{return!1}},Ta=Ur((t,n,p,u)=>{if(t.headers.upgrade!==void 0)return o(new D({reason:new _t({request:t,description:"fetch cannot send an HTTP upgrade request"})}));let d=u.getRef(yt),y=un(u.context,Yr)??{},x=y.headers?Ti(En(y.headers),t.headers):t.headers;if(x["content-length"])x=Tt(x,"content-length");let H,K=I(()=>H?.abort()),w=(U)=>h(me({try:()=>d(n,{...y,method:t.method,headers:x,body:U,duplex:typeof ReadableStream<"u"&&U instanceof ReadableStream?"half":void 0,signal:H?AbortSignal.any([p,H.signal]):p}),catch:(b)=>new D({reason:new _t({request:t,cause:b})})}),(b)=>{let G=ur(t,b);if(!H)return G;if(b.body===null)H.abort();return Object.create(G,{...Object.fromEntries(["arrayBuffer","text","json","formData","urlParamsBody"].map((L)=>[L,{get:()=>Wt(G[L],K)}])),stream:{get:()=>_o(G.stream,K)}})}).pipe(dt(()=>K));switch(t.body._tag){case"Raw":case"Uint8Array":return w(t.body.body);case"FormData":return w(t.body.formData);case"Stream":{if(ln??=Ra(),ln){H=new AbortController;let U=AbortSignal.any([p,H.signal]),b=Ct((G)=>{let L=()=>G(mo);if(U.aborted){L();return}return U.addEventListener("abort",L,{once:!0}),I(()=>U.removeEventListener("abort",L))});return l(Vi(Ki(t.body.stream,b)),w)}if(u.getRef(xn)==="error")return o(new D({reason:new Se({request:t,description:"Streaming request bodies are not supported in this runtime"})}));return Gi(t.body.stream).pipe(Ke((U)=>new D({reason:new Se({request:t,cause:U})})),l(w))}}return w(void 0)}),Qr=Pr(r(Ta));export{ms,oi,sn,si,pr,ii,Vr,qe,an,Zr,we,Oe,ai,ci,li,hs,yt,Yr,Qr,ui};
package/chunk-5q7mrvv1.js DELETED
@@ -1,2 +0,0 @@
1
- import{ss,cr,is,as,Gr,fs}from"./chunk-p59r4b0j.js";import{cn,Mt,_e,ne,ke,J}from"./chunk-6rpbc10h.js";import{k,N,xe,pt,I,W,h,zt,Er,Ei,D,Ir,H,Z}from"./chunk-bkr0zk6g.js";var rs={};k(rs,{ConsoleCredentials:()=>rs,fresh:()=>xt,login:()=>ea,logout:()=>ta,organization:()=>Mn,owner:()=>Fe,read:()=>He,stored:()=>Kr});import{createHash as c}from"node:crypto";var d=H(Z(cr)),f=300000;function He(e){let n=e.env.OPENCODE_API_KEY;if(!n)return Kr(e);let o=e.env.OPENCODE_CONSOLE_SERVER?.trim();if(!o)return{type:"key",server:ss,key:n};let r=fs(o);if(!r)throw Error(`OPENCODE_CONSOLE_SERVER isn't a Console URL: ${o}. Use an https:// URL, or http:// only for localhost.`);return{type:"key",server:r,key:n}}function Kr(e){let n=i(e);if(n.corrupt)throw Error(`The sign-in in ${cn(e)} can't be read. Run \`npx @opencode/console login\` to replace it or \`npx @opencode/console logout\` to remove it.`);return n.credential}function Fe(e){return JSON.stringify([e.server,e.type==="key"?c("sha256").update(e.key).digest("hex").slice(0,16):e.accountID,e.type==="oauth"?e.orgID:void 0])}function Mn(e){return e.type==="oauth"?e.orgName:void 0}var ea=D("ConsoleCredentials.login")(function*(e,n){let o=yield*is(n.server);yield*n.prompt(o);let r=yield*o.callback,t=yield*_e(e,I(()=>{let l=i(e).credential;if(ke(cn(e),JSON.stringify(r)),!l||Fe(l)!==Fe(r))J(Mt(e));return l}));if(t)yield*Gr(t).pipe(zt);return r}),xt=D("ConsoleCredentials.fresh")(function*(e){let n=He(e);if(!n||n.type==="key"||!(yield*s(n)))return n;let o=yield*_e(e,W(function*(){let r=Kr(e);if(!r||!(yield*s(r)))return r;let t=yield*as(r).pipe(Er(xe(30)));if(i(e).credential?.refresh!==r.refresh)return Kr(e);return ke(cn(e),JSON.stringify(t)),t})).pipe(Ei);return yield*Ir(o)}),ta=D("ConsoleCredentials.logout")(function*(e){let n=yield*_e(e,I(()=>{let o=i(e).credential;return J(cn(e)),J(Mt(e)),o}));if(!n)return!1;return yield*Gr(n).pipe(zt),!0});function s(e){return pt.pipe(h((n)=>e.expires-f<=n))}function i(e){let n=ne(cn(e));if(n===void 0)return{};let o=N(d(n));return o?{credential:o}:{corrupt:!0}}
2
- export{He,Kr,Fe,Mn,ea,xt,ta,rs};
package/chunk-5w6hy202.js DELETED
@@ -1 +0,0 @@
1
- import"./chunk-zdf3mvav.js";import{bt}from"./chunk-6rpbc10h.js";import{k,N,H,t,n,Z}from"./chunk-bkr0zk6g.js";var u={};k(u,{CliInstall:()=>u,directory:()=>m,install:()=>I,packageName:()=>b,uninstall:()=>D});import{randomUUID as S}from"node:crypto";import{chmodSync as g,copyFileSync as j,cpSync as v,existsSync as c,readFileSync as C,realpathSync as f,renameSync as h,rmSync as l}from"node:fs";import o from"node:path";var b="@opencode/console",m=(e)=>o.join(e.data,"cli");function I(e,r){let s=m(e);if(r.entry===void 0){let a=o.join(s,o.basename(r.execPath));return x(s,(p)=>{bt(p);let y=o.join(p,o.basename(r.execPath));j(r.execPath,y),g(y,493)}),[a]}let i=f(r.entry),d=o.dirname(i);if(!O(d))return[r.execPath,i];return x(s,(a)=>v(d,a,{recursive:!0})),[U(r.execPath,r.path),o.join(s,o.basename(i))]}function U(e,r){if(!c(e))return e;let s=f(e);return(r??"").split(o.delimiter).filter((i)=>o.isAbsolute(i)).map((i)=>o.join(i,o.basename(e))).find((i)=>c(i)&&f(i)===s)??e}function D(e){l(m(e),{recursive:!0,force:!0})}function O(e){let r=o.join(e,"package.json");if(!c(r))return!1;let s=H(Z(n({name:t})))(C(r,"utf8"));return N(s)?.name===b}function x(e,r){bt(o.dirname(e));let s=`${e}.${S()}.tmp`,i=`${e}.${S()}.old`;try{if(r(s),c(e))h(e,i);h(s,e)}finally{l(s,{recursive:!0,force:!0}),l(i,{recursive:!0,force:!0})}}export{u as CliInstall,m as directory,I as install,b as packageName,D as uninstall};
package/chunk-6mydq7cv.js DELETED
@@ -1,2 +0,0 @@
1
- import{Rt}from"./chunk-81fv1abj.js";import{Mt,ne,ke,J}from"./chunk-6rpbc10h.js";import{Mn}from"./chunk-5q7mrvv1.js";import{k,De,N,H,w,F,t,ee,n,x,Z}from"./chunk-bkr0zk6g.js";var ns={};k(ns,{Info:()=>Xs,MAX_AGE_MS:()=>Qs,WorkspaceSnapshot:()=>ns,clear:()=>ts,models:()=>Xi,policies:()=>ei,read:()=>Xo,stale:()=>sr,workspace:()=>ir,write:()=>es});var Qs=60000,Xs=n({owner:t,organization:w(t),fetched:ee,config:w(x(t,F)),status:w(n({message:t,url:w(t)}))}),c=H(Z(Xs)),f=n({policies:w(F)}),s=x(t,n({models:w(x(t,F))}));function Xo(o){return N(c(ne(Mt(o))??""))}function es(o,e){ke(Mt(o),JSON.stringify(e))}function ts(o){J(Mt(o))}function sr(o,e){return e-o.fetched>=Qs}function ei(o){if(!o)return;let e=o.config;if(!e)return o.status?void 0:[];let r=e.policies??N(H(f)(e.experimental))?.policies;if(r===void 0)return[];return N(H(Rt.Policies)(r))}function ir(o,e){if(!o)return{policies:[]};return{organization:e?.organization??Mn(o),policies:ei(e),status:e?.status}}function Xi(o){let e=o?.config?.providers;if(e===void 0)return 0;return Object.values(De(H(s)(e),()=>({}))).reduce((r,i)=>r+Object.keys(i.models??{}).length,0)}
2
- export{Qs,Xs,Xo,es,ts,sr,ei,ir,Xi,ns};
package/chunk-6rpbc10h.js DELETED
@@ -1,2 +0,0 @@
1
- import{k,di,mi,me,zt,Fs}from"./chunk-bkr0zk6g.js";var bs={};k(bs,{ConsoleStore:()=>bs,credentialFile:()=>cn,ensureDir:()=>bt,locked:()=>_e,make:()=>gs,modified:()=>ys,read:()=>ne,remove:()=>J,snapshotFile:()=>Mt,syncClaimFile:()=>xs,unreachable:()=>eo,write:()=>ke});import{randomUUID as re}from"node:crypto";import{chmodSync as oe,mkdirSync as ae,readFileSync as ie,renameSync as se,rmSync as q,statSync as ce,writeFileSync as fe}from"node:fs";import E from"node:path";import _ from"path";import K from"os";import{randomBytes as W,randomUUID as Y}from"crypto";import{mkdir as S,readFile as V,rm as M,stat as B,utimes as z,writeFile as A}from"fs/promises";import{createHash as C}from"crypto";var x;(function(e){function i(w){return C("sha1").update(w).digest("hex")}e.fast=i;function s(w){return C("sha256").update(w).digest("hex")}e.sha256=s})(x||(x={}));var Dn;(function(e){let i;function s(r){i=r}e.setGlobal=s;let w=()=>{if(!i)throw Error("Flock global not set");return _.join(i.state,"locks")},b={staleMs:60000,timeoutMs:300000,baseDelayMs:100,maxDelayMs:2000};function g(r){if(typeof r!=="object"||r===null||!("code"in r))return;let t=r.code;if(typeof t!=="string")return;return t}function H(r,t){return new Promise((n,c)=>{if(t?.aborted){c(t.reason??Error("Aborted"));return}let a,f=()=>{t?.removeEventListener("abort",o),n()},o=()=>{if(a)clearTimeout(a);t?.removeEventListener("abort",o),c(t?.reason??Error("Aborted"))};t?.addEventListener("abort",o,{once:!0}),a=setTimeout(f,r)})}function F(r){let t=Math.floor(r*0.3),n=Math.floor(Math.random()*(2*t+1))-t;return Math.max(0,r+n)}function N(){return performance.now()}function j(){return performance.timeOrigin+N()}async function v(r){try{return await B(r)}catch(t){let n=g(t);if(n==="ENOENT"||n==="ENOTDIR")return;throw t}}async function I(r,t,n,c){let a=j(),f=await v(t);if(f)return a-f.mtimeMs>c;let o=await v(n);if(o)return a-o.mtimeMs>c;let l=await v(r);if(!l)return!1;return a-l.mtimeMs>c}async function G(r,t){let n=Y?.()??W(16).toString("hex"),c=_.join(r,"meta.json"),a=_.join(r,"heartbeat");try{await S(r,{mode:448})}catch(O){if(g(O)!=="EEXIST")throw O;if(!await I(r,a,c,t.staleMs))return{acquired:!1};let d=r+".breaker";try{await S(d,{mode:448})}catch(u){let p=g(u);if(p==="EEXIST"){let D=await v(d);if(D&&j()-D.mtimeMs>t.staleMs)await M(d,{recursive:!0,force:!0}).catch(()=>{return});return{acquired:!1}}if(p==="ENOENT"||p==="ENOTDIR")return{acquired:!1};throw u}try{if(!await I(r,a,c,t.staleMs))return{acquired:!1};await M(r,{recursive:!0,force:!0});try{await S(r,{mode:448})}catch(u){let p=g(u);if(p==="EEXIST"||p==="ENOTEMPTY")return{acquired:!1};throw u}}finally{await M(d,{recursive:!0,force:!0}).catch(()=>{return})}}let f={token:n,pid:process.pid,hostname:K.hostname(),createdAt:new Date().toISOString()};await A(a,"",{flag:"wx"}).catch(async()=>{throw await M(r,{recursive:!0,force:!0}),Error("Lock acquired but heartbeat already existed (possible compromise).")}),await A(c,JSON.stringify(f,null,2),{flag:"wx"}).catch(async()=>{throw await M(r,{recursive:!0,force:!0}),Error("Lock acquired but meta.json already existed (possible compromise).")});let o;return{acquired:!0,startHeartbeat:(O=Math.max(100,Math.floor(t.staleMs/3)))=>{if(o)return;o=setInterval(()=>{let d=new Date;z(a,d,d).catch(()=>{return})},O),o.unref?.()},release:async()=>{if(o)clearInterval(o),o=void 0;if((await V(c,"utf8").then((d)=>{let u=JSON.parse(d);if(!u||typeof u!=="object")return{};return{token:"token"in u&&typeof u.token==="string"?u.token:void 0}}).catch((d)=>{let u=g(d);if(u==="ENOENT"||u==="ENOTDIR")throw Error("Refusing to release: lock is compromised (metadata missing).");if(d instanceof SyntaxError)throw Error("Refusing to release: lock is compromised (metadata invalid).");throw d})).token!==n)throw Error("Refusing to release: lock token mismatch (not the owner).");await M(r,{recursive:!0,force:!0})}}}async function X(r,t,n){let c=N()+n.timeoutMs,a=0,f=0,o=n.baseDelayMs;while(!0){t.signal?.throwIfAborted();let l=await G(r,n);if(l.acquired)return l;if(N()>c)throw Error(`Timed out waiting for lock: ${t.key}`);a+=1;let y=F(o);await t.onWait?.({key:t.key,attempt:a,delay:y,waited:f}),await H(y,t.signal),f+=y,o=Math.min(n.maxDelayMs,Math.floor(o*1.7))}}async function T(r,t={}){t.signal?.throwIfAborted();let n={staleMs:t.staleMs??b.staleMs,timeoutMs:t.timeoutMs??b.timeoutMs,baseDelayMs:t.baseDelayMs??b.baseDelayMs,maxDelayMs:t.maxDelayMs??b.maxDelayMs},c=t.dir??w();await S(c,{recursive:!0});let a=_.join(c,x.fast(r)+".lock"),f=await X(a,{key:r,onWait:t.onWait,signal:t.signal},n);f.startHeartbeat();let o=()=>f.release();return{release:o,[Symbol.asyncDispose](){return o()}}}e.acquire=T;async function U(r,t,n={}){let a=[];try{const c=di(a,await T(r,n),1);n.signal?.throwIfAborted();return await t()}catch(f){var o=f,l=1}finally{var y=mi(a,o,l);y&&await y}}e.withLock=U})(Dn||(Dn={}));import P from"os";import m from"path";var h=P.homedir(),Q=process.env.XDG_DATA_HOME||(h?m.join(h,".local","share"):void 0),Z=process.env.XDG_CACHE_HOME||(h?m.join(h,".cache"):void 0),ee=process.env.XDG_CONFIG_HOME||(h?m.join(h,".config"):void 0),te=process.env.XDG_STATE_HOME||(h?m.join(h,".local","state"):void 0);function Xr(e){return{data:m.join(Q,e),cache:m.join(Z,e),config:m.join(ee,e),state:m.join(te,e),tmp:m.join(P.tmpdir(),e)}}function gs(e={}){let i=e.env??{OPENCODE_API_KEY:process.env.OPENCODE_API_KEY,OPENCODE_CONSOLE_SERVER:process.env.OPENCODE_CONSOLE_SERVER};if(e.root)return{data:E.join(e.root,"data"),cache:E.join(e.root,"cache"),env:i};let s=Xr("opencode-console");return{data:s.data,cache:s.cache,env:i}}var cn=(e)=>E.join(e.data,"credential.json"),Mt=(e)=>E.join(e.cache,"config.json"),xs=(e)=>E.join(e.cache,"sync.claim"),ue=30000,R=35000;function _e(e,i){return Fs(me({try:()=>(bt(e.data),bt(E.join(e.data,"locks")),Dn.acquire("credential",{dir:E.join(e.data,"locks"),staleMs:ue,timeoutMs:R})),catch:(s)=>s instanceof Error&&s.message.startsWith("Timed out waiting for lock")?Error(`Timed out after ${R/1000}s waiting for another opencode-console process to update the sign-in`,{cause:s}):s}),()=>i,(s)=>me(()=>s.release()).pipe(zt))}function ne(e){try{return ie(e,"utf8")}catch(i){if(L(i)==="ENOENT")return;throw i}}function ys(e){try{return ce(e,{throwIfNoEntry:!1})?.mtimeMs}catch(i){if(eo(i))return;throw i}}function ke(e,i){bt(E.dirname(e));let s=`${e}.${re()}.tmp`;fe(s,i,{mode:384,flag:"wx"});try{se(s,e)}catch(w){throw q(s,{force:!0}),w}}function J(e){q(e,{force:!0})}function eo(e){return["ENOENT","ENOTDIR","EACCES","EPERM"].includes(L(e)??"")}function bt(e){if(ae(e,{recursive:!0,mode:448}),process.platform!=="win32")oe(e,448)}function L(e){return e instanceof Error&&"code"in e&&typeof e.code==="string"?e.code:void 0}
2
- export{Dn,Xr,gs,cn,Mt,xs,_e,ne,ys,ke,J,eo,bt,bs};