@opencode/console 0.1.0 → 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 (65) hide show
  1. package/README.md +23 -1
  2. package/THIRD_PARTY_LICENSES.md +43 -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-z2kmm4pm.js → chunk-96f5c0tj.js} +2 -2
  12. package/chunk-ak1n0cs7.js +2 -0
  13. package/chunk-b02r286p.js +2 -0
  14. package/chunk-cdc5arvh.js +1 -0
  15. package/chunk-dnepb5ke.js +2 -0
  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-jem7z938.js +3 -0
  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 +74 -47
  38. package/package.json +4 -2
  39. package/pi-extension.js +2 -2
  40. package/chunk-0krh2hdf.js +0 -1
  41. package/chunk-1c689590.js +0 -1
  42. package/chunk-1mfjsp5r.js +0 -2
  43. package/chunk-41p6m0xy.js +0 -6
  44. package/chunk-4v6awhyw.js +0 -1
  45. package/chunk-52p33kcn.js +0 -1
  46. package/chunk-5x5fc0mq.js +0 -2
  47. package/chunk-6tene1pb.js +0 -2
  48. package/chunk-9pcmbxq5.js +0 -1
  49. package/chunk-a85j5cz4.js +0 -1
  50. package/chunk-bgqw45qt.js +0 -2
  51. package/chunk-dsk7ztf6.js +0 -2
  52. package/chunk-g6d8xejf.js +0 -63
  53. package/chunk-gtf5exm1.js +0 -8
  54. package/chunk-hf4hqs7y.js +0 -3
  55. package/chunk-jqhy4pzf.js +0 -2
  56. package/chunk-ke4nwx54.js +0 -2
  57. package/chunk-nva98fq1.js +0 -32
  58. package/chunk-p909n1zf.js +0 -1
  59. package/chunk-q3519h2y.js +0 -1
  60. package/chunk-r2y8x1nz.js +0 -12
  61. package/chunk-rea503jg.js +0 -1
  62. package/chunk-sbec97g3.js +0 -2
  63. package/chunk-vx37gkw9.js +0 -1
  64. package/chunk-wb6qf86j.js +0 -1
  65. package/chunk-yjw665b0.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,74 +1,101 @@
1
1
  #!/usr/bin/env node
2
- import{st}from"./chunk-bgqw45qt.js";import{spawn as U}from"node:child_process";import _ from"node:path";import{parseArgs as z}from"node:util";var E=z({allowPositionals:!0,strict:!1,options:{harness:{type:"string"},server:{type:"string"},json:{type:"boolean"},quiet:{type:"boolean"},remove:{type:"boolean"}}}),y=E.positionals[0],g=E.values,C=D("harness")??process.env.OPENCODE_CONSOLE_HARNESS,P="Not signed in. Run `npx @opencode/console login` or set OPENCODE_API_KEY.",R=["claude-code","pi"],j=["claude-code"],F={check:q,hook:J,login:V,logout:ee,"mcp-headers":X,setup:G,status:te,sync:oe,token:ne},x,H=y?F[y]:void 0;if(!H)process.stdout.write(ie()),process.exit(y&&!["help","--help","-h"].includes(y)?1:0);process.exitCode=await H().catch(async(t)=>{if(y==="hook")return I(`opencode-console couldn't check this: ${w(t)}`);if(process.stderr.write(`${w(t)}
3
- `),y!=="check")return 1;return L(`opencode-console couldn't check this call: ${w(t)}`)});async function q(){let{Option:t,Schema:e}=await import("./chunk-1c689590.js"),o=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 Y());if(t.isNone(o))return process.stderr.write(`Expected JSON on stdin: {"action": "...", "resources": ["...", ...]}
4
- `),L("opencode-console couldn't read this tool call, so it was blocked");let[i]=await K([o.value]);return process.stdout.write(`${JSON.stringify(i)}
5
- `),i?.effect==="deny"?2:0}async function J(){let t=E.positionals[1];if(!t||!j.includes(t))return process.stderr.write(`Usage: opencode-console hook <${j.join("|")}>
6
- `),2;let{Option:e}=await import("./chunk-1c689590.js"),{ClaudeCodeHook:o}=await import("./chunk-hf4hqs7y.js"),i=await Y();x=o.eventName(i);let r=o.decode(i);if(e.isNone(r))return I("opencode-console couldn't read this hook's input, so it was blocked");if(r.value.hook_event_name==="SessionStart")return B();let s=o.checks(r.value);if(s.length===0)return 0;let c=(await K(s)).find((n)=>n.effect==="deny");return c?.effect==="deny"?I(c.message):0}async function B(){let{ConsoleStore:t}=await import("./chunk-a85j5cz4.js"),{ConsoleCredentials:e}=await import("./chunk-vx37gkw9.js"),{WorkspaceSync:o}=await import("./chunk-rea503jg.js"),i=t.make(),r=e.read(i);if(!r)return 0;await A({always:!0,force:!0});let s=o.current(i,e.owner(r))?.status;if(s)process.stdout.write(`${JSON.stringify({systemMessage:`${s.message}${s.url?`: ${s.url}`:""}`})}
7
- `);return 0}async function K(t){let{Effect:e}=await import("./chunk-1c689590.js"),{ConsoleStore:o}=await import("./chunk-a85j5cz4.js"),{ConsoleCredentials:i}=await import("./chunk-vx37gkw9.js"),{WorkspaceSnapshot:r}=await import("./chunk-q3519h2y.js"),{PolicyEvaluator:s}=await import("./chunk-wb6qf86j.js"),c=o.make(),n=i.read(c),a=n&&i.owner(n),d=n?r.read(c):void 0,p=a&&d?.owner!==a?await(async()=>(await A({always:!0}),se(()=>{let u=r.read(c);return u?.owner===a?u:void 0},3000)))():d&&r.stale(d,Date.now())?(await A(),d):d,l=r.workspace(n,p);return e.runPromise(e.forEach(t,(u)=>s.check(l,u)))}async function V(){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:t}=await import("./chunk-1c689590.js"),{openUrl:e}=await import("./chunk-aesb1szb.js"),{ConsoleClient:o}=await import("./chunk-4v6awhyw.js"),{ConsoleStore:i}=await import("./chunk-a85j5cz4.js"),{ConsoleCredentials:r}=await import("./chunk-vx37gkw9.js"),{WorkspaceSync:s}=await import("./chunk-rea503jg.js"),c=D("server")??process.env.OPENCODE_CONSOLE_SERVER??o.defaultServer,n=o.normalizeServer(c);if(!n){process.stderr.write(`Not a Console URL: ${c}
9
- `);return}let a=i.make(),d=await f(r.login(a,{server:n,prompt:(l)=>t.promise(async()=>{if(process.stderr.write(`Open ${l.url} and confirm the code ${l.code}
10
- `),process.stdout.isTTY)await e(l.url).catch(()=>{return})})})),p=await f(s.sync(a,{force:!0}));if(process.stdout.write(`Signed in to ${d.orgName??"OpenCode Console"}${d.email?` as ${d.email}`:""}
11
- `),p.error)process.stderr.write(`Couldn't fetch the workspace config: ${w(p.error)}. Run the command again to retry.
12
- `);return d}async function G(){let t=E.positionals[1];if(!t||!R.includes(t))return process.stderr.write(`Usage: opencode-console setup <${R.join("|")}> [--remove]
13
- `),1;let e=t==="pi",o=e?"Pi":"Claude Code",{ConsoleStore:i}=await import("./chunk-a85j5cz4.js"),{ConsoleCredentials:r}=await import("./chunk-vx37gkw9.js"),{CliInstall:s}=await import("./chunk-9pcmbxq5.js"),{WorkspaceSync:c}=await import("./chunk-rea503jg.js"),n=i.make();if(g.remove===!0){let{Effect:O}=await import("./chunk-1c689590.js"),{ClaudeCode:v}=await import("./chunk-r2y8x1nz.js"),{Pi:S}=await import("./chunk-0krh2hdf.js"),N=await O.runPromise(i.locked(n,O.sync(()=>{let m=e?S.remove(n):v.remove(n);if(![v.manifestFile(n),S.manifestFile(n)].some((M)=>i.read(M)!==void 0))s.uninstall(n);return m})));return process.stdout.write(N?`Removed OpenCode Console from ${o} and restored its settings. You're still signed in; \`npx @opencode/console logout\` signs out.
14
- `:`${o} wasn't set up with OpenCode Console
15
- `),0}let{ConsoleClient:a}=await import("./chunk-4v6awhyw.js"),d=await re(e?"pi":"claude");if(d)C=e?`pi/${d}`:`claude-cli/${d}`;let p=r.read(n),l=D("server");if(!p||l!==void 0&&p.server!==a.normalizeServer(l)){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 ${o} will use it instead of your sign-in wherever it's set.
16
- `);let u=await f(c.sync(n,{force:!0}));if(!u.snapshot?.config)return process.stderr.write(`Couldn't fetch the workspace config${u.error?`: ${w(u.error)}`:""}. Run setup again.
17
- `),1;if(e&&b())return process.stderr.write("Set up Pi with the npm package: `npx @opencode/console setup pi`\n"),1;let k=s.install(n,{execPath:process.execPath,entry:b()?void 0:process.argv[1],path:process.env.PATH});return e?Q(n,k,u.snapshot,d):Z(n,k,u.snapshot,d)}async function Z(t,e,o,i){let{ClaudeCode:r}=await import("./chunk-r2y8x1nz.js"),{WorkspaceSnapshot:s}=await import("./chunk-q3519h2y.js"),c=s.policies(o),n=await f(r.refresh(t,{paths:r.paths(),command:e,harness:i?`claude-cli/${i}`:void 0}));if(!n)return process.stderr.write(`Couldn't read the workspace config. Run setup again.
18
- `),1;let d=[`Claude Code now uses ${o.organization??"your workspace"} through OpenCode Console.`,"",...n.models?[` Models ${h(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 ${h(c?.length??0,"rule","rules")}, checked before every tool call`,...n.servers.length>0?[` MCP ${n.servers.join(", ")}`]:[],...T(n.instructions,n.skills.map((l)=>`/${l}`))];if(process.stdout.write(`${d.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(!i)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 p=["ANTHROPIC_AUTH_TOKEN","ANTHROPIC_API_KEY"].filter((l)=>process.env[l]);if(n.models&&p.length>0)process.stderr.write(`
25
- ${p.join(" and ")} ${p.length===1?"is":"are"} set in your shell and Claude Code would use ${p.length===1?"it":"them"} instead of the workspace. Unset ${p.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 Q(t,e,o,i){let{Pi:r}=await import("./chunk-0krh2hdf.js"),{Library:s}=await import("./chunk-52p33kcn.js"),{WorkspaceSnapshot:c}=await import("./chunk-q3519h2y.js"),n=e.at(-1),a=_.join(_.dirname(n),`pi-extension${_.extname(n)}`),d=r.session({store:t,...C?{harness:C}:{}}),p=await r.models(d),l=p&&r.defaultModel(p);await r.skills(d).catch((m)=>{process.stderr.write(`Couldn't download the Library's skills yet (${w(m)}); Pi tries again when it starts.
29
- `);return});let u=o.config??{},{Effect:k}=await import("./chunk-1c689590.js"),{ConsoleStore:O}=await import("./chunk-a85j5cz4.js");await k.runPromise(O.locked(t,k.sync(()=>r.setup(t,{paths:r.paths(),extension:a,...l?{model:l}:{}}))));let v=p?r.providers(p,()=>{return}).flatMap((m)=>m.models):[],S=Object.keys(s.servers(u)),N=[`Pi now uses ${o.organization??"your workspace"} through OpenCode Console.`,"",l?` Models ${h(v.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 ${h(c.policies(o)?.length??0,"rule","rules")}, checked before every tool call and !command`,...S.length>0?[` MCP ${S.join(", ")}`]:[],...T(s.library(u).instructions.length,s.library(u).skills.map((m)=>`/skill:${m.slug}`))];if(process.stdout.write(`${N.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
- `),!i)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}function T(t,e){if(t+e.length===0)return[];return[` Library ${[...t>0?[h(t,"instruction","instructions")]:[],...e.length>0?[e.join(", ")]:[]].join(", ")}`]}async function X(){let t=E.positionals[1];if(!t)return process.stderr.write(`Usage: opencode-console mcp-headers <server>
36
- `),1;let{Option:e,Schema:o}=await import("./chunk-1c689590.js"),{ConsoleStore:i}=await import("./chunk-a85j5cz4.js"),{WorkspaceSync:r}=await import("./chunk-rea503jg.js"),{snapshot:s}=await f(r.sync(i.make()));if(!s)return process.stderr.write(`${P}
37
- `),1;let c=o.decodeUnknownOption(o.Struct({servers:o.Record(o.String,o.Struct({headers:o.optional(o.Record(o.String,o.String))}))}))(s.config?.mcp),n=e.getOrUndefined(c)?.servers[t];if(!n)return process.stderr.write(`The workspace doesn't offer the MCP server ${t} anymore
38
- `),1;return process.stdout.write(`${JSON.stringify(n.headers??{})}
39
- `),0}async function ee(){let{ConsoleStore:t}=await import("./chunk-a85j5cz4.js"),{ConsoleCredentials:e}=await import("./chunk-vx37gkw9.js"),o=await f(e.logout(t.make()));if(process.stdout.write(o?`Signed out of OpenCode Console
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(`
48
+ `)}
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(`
54
+ Codex isn't on your PATH yet; these settings apply once it's installed.
55
+ `);return process.stdout.write(`
56
+ Run codex to start.
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
40
62
  `:`Not signed in
41
63
  `),process.env.OPENCODE_API_KEY)process.stdout.write(`OPENCODE_API_KEY is still set, so opencode-console keeps using that key
42
- `);return 0}async function te(){let{ConsoleStore:t}=await import("./chunk-a85j5cz4.js"),{ConsoleCredentials:e}=await import("./chunk-vx37gkw9.js"),{WorkspaceSnapshot:o}=await import("./chunk-q3519h2y.js"),{WorkspaceSync:i}=await import("./chunk-rea503jg.js"),r=t.make(),s=e.read(r),c=s?(await f(i.sync(r))).snapshot:void 0,n=o.policies(c),a=s&&{server:s.server,credential:s.type==="key"?"OPENCODE_API_KEY":"device",email:s.type==="oauth"?s.email:void 0,workspace:c?.organization??e.organization(s),synced:n&&c?new Date(c.fetched).toISOString():void 0,policies:n?.length,models:o.models(c),needs:c?.status};if(g.json===!0)return process.stdout.write(`${JSON.stringify({signedIn:Boolean(a),...a})}
43
- `),0;if(!a)return process.stdout.write(`${P}
44
- `),0;let d=[["Signed in",a.credential==="OPENCODE_API_KEY"?"with OPENCODE_API_KEY":a.email??"yes"],...a.workspace?[["Workspace",a.workspace]]:[],["Console",a.server],["Policies",a.synced?`${h(a.policies??0,"policy","policies")}, synced at ${new Date(a.synced).toLocaleTimeString()}`:"not loaded yet, so tool calls are blocked"],["Models",a.models?`${a.models} from the workspace`:"none from the workspace"]];if(process.stdout.write(d.map(([p,l])=>`${p?.padEnd(10)} ${l}
45
- `).join("")),a.needs)process.stdout.write(`
46
- ${a.needs.message}${a.needs.url?`: ${a.needs.url}`:""}
47
- `);return 0}async function oe(){let{ConsoleStore:t}=await import("./chunk-a85j5cz4.js"),{WorkspaceSnapshot:e}=await import("./chunk-q3519h2y.js"),{WorkspaceSync:o}=await import("./chunk-rea503jg.js"),i=t.make(),r=e.read(i)?.fetched,s=await f(o.sync(i,{force:g.quiet!==!0||process.env.OPENCODE_CONSOLE_FORCE==="1"}));if(s.snapshot?.config&&!s.error&&s.snapshot.fetched!==r){let{ClaudeCode:a}=await import("./chunk-r2y8x1nz.js");await f(a.refresh(i)).catch((d)=>{if(g.quiet!==!0)process.stderr.write(`Couldn't update Claude Code: ${w(d)}
48
- `)})}if(g.quiet===!0)return s.error?1:0;if(!s.snapshot&&!s.error)return process.stderr.write(`${P}
49
- `),1;if(s.error){let a=e.policies(s.snapshot)?`
50
- Policies from the last sync still apply.`:"";return process.stderr.write(`Couldn't sync: ${w(s.error)}${a}
51
- `),1}let c=s.snapshot?.organization,n=e.policies(s.snapshot)?.length??0;return process.stdout.write(`Synced ${c?`${c}'s`:"the workspace"} config (${h(n,"policy","policies")})
52
- `),0}async function ne(){let{ConsoleStore:t}=await import("./chunk-a85j5cz4.js"),{ConsoleCredentials:e}=await import("./chunk-vx37gkw9.js"),o=await f(e.fresh(t.make()));if(!o)return process.stderr.write(`${P}
53
- `),1;return process.stdout.write(`${o.type==="key"?o.key:o.access}
54
- `),0}async function f(t){let{Effect:e,Layer:o}=await import("./chunk-1c689590.js"),{FetchHttpClient:i}=await import("./chunk-p909n1zf.js"),{WorkspaceSync:r}=await import("./chunk-rea503jg.js");return e.runPromise(t.pipe(e.provide(r.identify({version:st,harness:C}).pipe(o.provide(i.layer)))))}async function A(t={}){let{ConsoleStore:e}=await import("./chunk-a85j5cz4.js"),o=e.syncClaimFile(e.make());try{let i=e.modified(o);if(!t.always&&i!==void 0&&Date.now()-i<30000)return;e.write(o,"");let r=b()?[process.execPath]:[process.execPath,process.argv[1]];U(r[0],[...r.slice(1),"sync","--quiet",...C?["--harness",C]:[]],{detached:!0,stdio:"ignore",env:{...process.env,...t.force?{OPENCODE_CONSOLE_FORCE:"1"}:{}}}).on("error",()=>{return}).unref()}catch{return}}async function se(t,e){let o=Date.now()+e;for(;;){let i=t();if(i!==void 0||Date.now()>=o)return i;await new Promise((r)=>setTimeout(r,25))}}async function I(t){let{ClaudeCodeHook:e}=await import("./chunk-hf4hqs7y.js"),o=e.denial(x,t);return process.stdout.write(o.stdout),process.stderr.write(o.stderr),o.code}async function re(t){let{execFile:e}=await import("node:child_process");return new Promise((o)=>e(t,["--version"],{timeout:1e4},(i,r)=>o(i?void 0:r.match(/\d+\.\d+\.\d+\S*/)?.[0])))}function L(t){return process.stdout.write(`${JSON.stringify({effect:"deny",message:t})}
55
- `),2}function h(t,e,o){return`${t} ${t===1?e:o}`}function b(){return/^(\/\$bunfs\/|[A-Za-z]:[\\/]~BUN[\\/])/.test(process.argv[1]??"")}async function Y(){let t=[];for await(let e of process.stdin)t.push(Buffer.from(e));return Buffer.concat(t).toString("utf8")}function w(t){return t instanceof Error?t.message:String(t)}function D(t){let e=g[t];return typeof e==="string"?e:void 0}function ie(){return`opencode-console ${st}
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}
77
+ `),1;return process.stdout.write(`${t.type==="key"?t.key:t.access}
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}
56
80
  Connect coding agents to an OpenCode Console workspace: its models, MCP servers, Library and policies.
57
81
 
58
82
  Usage: opencode-console <command> [options]
59
83
 
60
84
  Commands:
61
- setup <claude-code|pi> Sign in if needed and set up Claude Code or Pi to use the workspace
62
- (--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)
63
88
  login [--server <url>] Sign in to OpenCode Console and pick a workspace
64
89
  logout Sign out and remove the stored workspace config
65
90
  status [--json] Show the sign-in, workspace and config
66
91
  sync Fetch the workspace config now
67
92
  token Print an access token for auth helpers such as Claude Code's apiKeyHelper
93
+ and Codex's model provider auth
68
94
  check Check a tool call against the workspace's policies. Reads
69
95
  {"action": "...", "resources": [...]} on stdin, with optional
70
96
  "directory", "path" and "shell"; exits 0 to allow, 2 to deny
71
- hook claude-code Answer a Claude Code hook (setup registers it)
97
+ hook <claude-code|codex>
98
+ Answer a Claude Code or Codex hook (setup registers it)
72
99
  mcp-headers <server> Print a workspace MCP server's headers (setup registers it)
73
100
 
74
101
  Options:
package/package.json CHANGED
@@ -1,11 +1,13 @@
1
1
  {
2
2
  "name": "@opencode/console",
3
- "version": "0.1.0",
4
- "description": "Connect Claude Code and Pi 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
+ "codex",
8
9
  "pi-package",
10
+ "deepseek-harness",
9
11
  "coding-agent",
10
12
  "policy"
11
13
  ],
package/pi-extension.js CHANGED
@@ -1,2 +1,2 @@
1
- import"./chunk-jqhy4pzf.js";import"./chunk-yjw665b0.js";import"./chunk-ke4nwx54.js";import"./chunk-5x5fc0mq.js";import{je,Qt}from"./chunk-1mfjsp5r.js";import{Zt,Kn}from"./chunk-gtf5exm1.js";import"./chunk-6tene1pb.js";import"./chunk-g6d8xejf.js";import"./chunk-dsk7ztf6.js";import"./chunk-sbec97g3.js";import{Eo,wo,ko,Co,Io,Ao,wn,Oo,kn,Wn,ot,Po,Ro}from"./chunk-41p6m0xy.js";import"./chunk-z2kmm4pm.js";import{w,H,Dt,pr,jt}from"./chunk-nva98fq1.js";var S={};w(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 K,googleGenerativeAIApi as q,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,Oo({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 Po(n).catch(()=>{return}):void 0;if(Eo(f??{},L).forEach((s)=>{o.add(s.id),e.registerProvider(K({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(q())}}))}),t&&(await ot(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&&wo(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 Wn(n,i.map((c)=>({action:"provider.use",resources:[c]}))).catch(()=>{return});i.forEach((c,v)=>{let k=u?.[v]?.effect!=="allow";if(k&&!a.has(c)){let _=s.modelRegistry.getRegisteredNativeProvider(c);a.set(c,()=>{if(e.unregisterProvider(c),_)e.registerProvider(_)}),e.registerProvider(c,{models:[]})}let C=k?void 0:a.get(c);if(C)a.delete(c),C()}),h.fetched=(await ot(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 ot(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 ot(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 Ro(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 Wn(n,u.map((v)=>({action:"skill",resources:[v.name]})));return{text:Ao(g?.config?Zt(g.config).instructions:[]),skills:u.filter((v,k)=>c[k]?.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 kn(n,ko(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 kn(n,[Co(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=Io(s.text);if(!i)return{action:"continue"};let u=await kn(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 jt(H(()=>je(e.store)!==void 0).pipe(pr(()=>!0)))}async function I(e,n){let o=n.model?.provider;if(!o||!p(e))return;return kn(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(wn(e.store),"skills");async function M(e,n,o){let a=await ot(n),d=a?.config?Kn(a.config):{};[...o.keys()].filter((t)=>!(t in d)).forEach((t)=>{o.delete(t),jt(H(()=>e.unregisterMcpServer(t)).pipe(Dt))}),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;jt(H(()=>{e.registerMcpServer(t,m),o.set(t,h)}).pipe(Dt))})}async function V(e){let n=await e.run(Qt(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-0krh2hdf.js DELETED
@@ -1 +0,0 @@
1
- import{Hi,Eo,wo,Pr,ko,Co,Io,Ao,Rr,wn,Mr,To,qi,Wi,Oo,_o,kn,Wn,ot,Bs,Po,Ro,Mo}from"./chunk-41p6m0xy.js";import"./chunk-g6d8xejf.js";import"./chunk-z2kmm4pm.js";import"./chunk-gtf5exm1.js";import"./chunk-sbec97g3.js";import"./chunk-dsk7ztf6.js";import"./chunk-6tene1pb.js";import"./chunk-1mfjsp5r.js";import"./chunk-ke4nwx54.js";import"./chunk-yjw665b0.js";import"./chunk-5x5fc0mq.js";import"./chunk-jqhy4pzf.js";export{Mo as Pi,Pr as Unreadable,ko as checks,ot as config,kn as decide,Wn as decisions,wo as defaultModel,wn as directory,Ao as instructions,To as manifest,Rr as manifestFile,Po as models,Mr as modelsFile,Hi as paths,Eo as providers,_o as refresh,Bs as refreshStale,Wi as remove,Oo as session,qi as setup,Io as skillCommand,Ro as skills,Co as userBash};
package/chunk-1c689590.js DELETED
@@ -1 +0,0 @@
1
- import{oi,si}from"./chunk-jqhy4pzf.js";import{W,re,G,Gr,Ve,ht,De,Ft,Ss,Nt,pi,oe,Ms,Er,kr,go,Ds,Yi,Qi}from"./chunk-nva98fq1.js";export{oi as Brand,De as Cause,pi as Clock,re as Context,ht as Data,Er as DateTime,Ve as Duration,oe as Effect,Ft as Exit,Ms as Fiber,Qi as FileSystem,Nt as Layer,W as Option,si as Path,Gr as Record,G as Result,Yi as Schema,kr as SchemaGetter,go as SchemaTransformation,Ss as Scope,Ds as Struct};
package/chunk-1mfjsp5r.js DELETED
@@ -1,2 +0,0 @@
1
- import{Xo,Yn,es,ts,Lr,ss}from"./chunk-ke4nwx54.js";import{tn,At,ze,he,Re,me}from"./chunk-5x5fc0mq.js";import{w,D,xe,at,T,q,g,Dt,fr,hi,L,gr,J,se}from"./chunk-nva98fq1.js";var Qo={};w(Qo,{ConsoleCredentials:()=>Qo,fresh:()=>Qt,login:()=>Ji,logout:()=>Vi,organization:()=>In,owner:()=>Je,read:()=>je,stored:()=>Ur});import{createHash as c}from"node:crypto";var d=J(se(Yn)),f=300000;function je(e){let n=e.env.OPENCODE_API_KEY;if(!n)return Ur(e);let o=e.env.OPENCODE_CONSOLE_SERVER?.trim();if(!o)return{type:"key",server:Xo,key:n};let r=ss(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 Ur(e){let n=i(e);if(n.corrupt)throw Error(`The sign-in in ${tn(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 Je(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 In(e){return e.type==="oauth"?e.orgName:void 0}var Ji=L("ConsoleCredentials.login")(function*(e,n){let o=yield*es(n.server);yield*n.prompt(o);let r=yield*o.callback,t=yield*ze(e,T(()=>{let l=i(e).credential;if(Re(tn(e),JSON.stringify(r)),!l||Je(l)!==Je(r))me(At(e));return l}));if(t)yield*Lr(t).pipe(Dt);return r}),Qt=L("ConsoleCredentials.fresh")(function*(e){let n=je(e);if(!n||n.type==="key"||!(yield*s(n)))return n;let o=yield*ze(e,q(function*(){let r=Ur(e);if(!r||!(yield*s(r)))return r;let t=yield*ts(r).pipe(fr(xe(30)));if(i(e).credential?.refresh!==r.refresh)return Ur(e);return Re(tn(e),JSON.stringify(t)),t})).pipe(hi);return yield*gr(o)}),Vi=L("ConsoleCredentials.logout")(function*(e){let n=yield*ze(e,T(()=>{let o=i(e).credential;return me(tn(e)),me(At(e)),o}));if(!n)return!1;return yield*Lr(n).pipe(Dt),!0});function s(e){return at.pipe(g((n)=>e.expires-f<=n))}function i(e){let n=he(tn(e));if(n===void 0)return{};let o=D(d(n));return o?{credential:o}:{corrupt:!0}}
2
- export{je,Ur,Je,In,Ji,Qt,Vi,Qo};
package/chunk-41p6m0xy.js DELETED
@@ -1,6 +0,0 @@
1
- import{pt,zr}from"./chunk-yjw665b0.js";import{er}from"./chunk-ke4nwx54.js";import{us,ls,ze,he,ps,Re,me,ft}from"./chunk-5x5fc0mq.js";import{je,Je}from"./chunk-1mfjsp5r.js";import{Uo,Gt,Jt,Lo,Nr,Ct,jo,z,Vt,Zt,Gn,Jn}from"./chunk-gtf5exm1.js";import{Fo}from"./chunk-g6d8xejf.js";import{Vn,Vo}from"./chunk-dsk7ztf6.js";import{Ho,qo,Yt}from"./chunk-sbec97g3.js";import{Fr,Do}from"./chunk-z2kmm4pm.js";import{st}from"./chunk-bgqw45qt.js";import{w,Me,D,cn,_e,T,dr,be,Ln,J,C,F,t,E,n,y,se}from"./chunk-nva98fq1.js";var Mo={};w(Mo,{Pi:()=>Mo,Unreadable:()=>Pr,checks:()=>ko,config:()=>ot,decide:()=>kn,decisions:()=>Wn,defaultModel:()=>wo,directory:()=>wn,instructions:()=>Ao,manifest:()=>To,manifestFile:()=>Rr,models:()=>Po,modelsFile:()=>Mr,paths:()=>Hi,providers:()=>Eo,refresh:()=>_o,refreshStale:()=>Bs,remove:()=>Wi,session:()=>Oo,setup:()=>qi,skillCommand:()=>Io,skills:()=>Ro,userBash:()=>Co});import{createHash as j}from"node:crypto";import{rmSync as O}from"node:fs";import b from"node:os";import u from"node:path";import{fileURLToPath as W}from"node:url";function Hi(e=process.env,o=b.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 Eo(e,o){return[...Map.groupBy(Fr(e).flatMap((s)=>A(s,o)??[]),(s)=>s.provider)].map(([s,i])=>({id:s,name:e[s]?.name??s,models:i}))}function wo(e){let o=Fr(e).filter((s)=>P(s)!==void 0),r=Do(o,"sonnet","opus","haiku");return r&&{provider:r.provider,id:r.id}}var S={messages:"anthropic-messages",responses:"openai-responses","chat-completions":"openai-completions","generate-content":"google-generative-ai"};function P(e){let o=z(e.entry.api),r=Object.keys(S).find((i)=>(i in o)),s=r&&Vt(z(o[r]).base_url);return r&&s?{api:S[r],baseURL:s}:void 0}function A(e,o){let r=P(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=z(d.limit),a=z(z(d.cost).text),l=z(a.input),m=z(l.cache),x=z(d.modalities).input,k=z(z(d.capabilities).reasoning).supported;return{...s==="openai-completions"?{compat:I}:{},...c,id:e.id,name:Vt(d.name)??c?.name??e.id,api:s,provider:e.provider,baseUrl:s==="anthropic-messages"?r.baseURL.replace(/\/v1\/?$/,""):r.baseURL,reasoning:typeof k==="boolean"?k:c?.reasoning??!1,input:Array.isArray(x)?x.some((v)=>typeof v==="string"&&v.startsWith("image"))?["text","image"]:["text"]:c?.input??["text"],cost:{input:f(l.price)??c?.cost.input??0,output:f(z(a.output).price)??c?.cost.output??0,cacheRead:f(m.read)??c?.cost.cacheRead??0,cacheWrite:f(_(m.write))??f(_(z(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/${st}`}}}var I={supportsStore:!1,supportsDeveloperRole:!1,supportsStrictMode:!0,maxTokensField:"max_tokens"};function _(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 Pr extends Error{}function ko(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 Pr(`${s}'s input has no ${a}`);return l},d=o.home??b.homedir(),p=(a)=>g(c(a),d);if(s.startsWith("mcp__"))return U(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&&R(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://")?W(i):i}function R(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 U(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 Pr(`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}:{action:`${i}_${c}`,resources:["*"],folded:!0}]}function Co(e){return{action:"shell",resources:[e.command],directory:e.cwd,shell:"bash"}}function Io(e){return e.match(/^\/skill:([^\s]+)/)?.[1]}function Ao(e){if(e.length===0)return;return e.map((o)=>`## ${o.name}
2
-
3
- ${o.content.trim()}`).join(`
4
-
5
- `)}var M=n({paths:n({agent:t,settings:t}),extension:t,created:E,...Uo}),Rr=(e)=>u.join(e.data,"pi.json"),wn=(e)=>u.join(e.data,"pi"),Mr=(e)=>u.join(e.cache,"pi-models.json");function To(e){let o=Rr(e),r=he(o);if(r===void 0)return;let s=D(J(se(M))(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 qi(e,o){let r=To(e),s=r?.created??he(o.paths.settings)===void 0,i=Gt(o.paths.settings)??{};if(!r)jo(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=Lo(i,o.model?{defaultProvider:o.model.provider,defaultModel:o.model.id}:{},r,!0);Jt(o.paths.settings,i,384),Re(Rr(e),JSON.stringify(M.make({paths:o.paths,extension:o.extension,created:s,...d})))}function Wi(e){let o=To(e);if(!o)return!1;let r=Gt(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)=>Nr(r,c,o)),Object.keys(r).length===0&&o.created)me(o.paths.settings);else Jt(o.paths.settings,r)}return me(Ct(o.paths.settings)),O(wn(e),{recursive:!0,force:!0}),me(Mr(e)),me(Rr(e)),!0}function Oo(e={}){let o=Ho({version:st,harness:e.harness}).pipe(cn(zr)),r=e.fetch;return{store:e.store??us(),run:(s)=>Ln(r?s.pipe(dr(o),be(pt,r)):s.pipe(dr(o)))}}var h=new WeakMap;function _o(e){let o=h.get(e);if(o)return o;let r=e.run(qo(e.store)).finally(()=>h.delete(e));return h.set(e,r),r}async function kn(e,o){return(await Wn(e,o)).find((r)=>r.effect==="deny")}async function Wn(e,o){let r=je(e.store),s=Vo(r,r&&await ot(e));return Ln(_e(o,(i)=>Fo(s,i)))}async function ot(e){let o=je(e.store);if(!o)return;let r=Je(o),s=Yt(e.store,r);if(!s)await new Promise((i)=>{let c=setTimeout(i,3000);c.unref?.(),_o(e).catch(()=>{return}).finally(()=>{clearTimeout(c),i()})});else if(Vn(s,Date.now()))Bs(e);return Yt(e.store,r)}function Bs(e){let o=ls(e.store),r=ps(o);if(r!==void 0&&Date.now()-r<30000)return!1;return Re(o,""),_o(e).catch(()=>{return}),!0}var L=n({owner:t,providers:t,document:y(t,F)}),N=y(t,n({name:C(t),models:y(t,y(t,F))}));async function Po(e){let o=je(e.store),r=await ot(e);if(!o||!r?.config)return;let s=Je(o),i=j("sha256").update(JSON.stringify(r.config.providers??null)).digest("hex"),c=D(J(se(L))(he(Mr(e.store))??"")),d=c?.owner===s&&c.providers===i?c.document:void 0,p=d&&D(J(N)(d));if(p)return p;let a=await e.run(er(o));return Re(Mr(e.store),JSON.stringify({owner:s,providers:i,document:a})),a}var B=y(t,t);async function Ro(e){let o=je(e.store),r=await ot(e),s=u.join(wn(e.store),"skills"),i=u.join(wn(e.store),"skills.json");if(!o||!r?.config)return s;let c=Zt(r.config).skills,d=Me(J(se(B))(he(i)??""),()=>({})),p=await e.run(Gn(o,s,c,d));return await Ln(ze(e.store,T(()=>{ft(s),Re(i,JSON.stringify(Jn(s,c,p,d).skills))}))),s}
6
- export{Hi,Eo,wo,Pr,ko,Co,Io,Ao,Rr,wn,Mr,To,qi,Wi,Oo,_o,kn,Wn,ot,Bs,Po,Ro,Mo};
package/chunk-4v6awhyw.js DELETED
@@ -1 +0,0 @@
1
- import{Xo,Zn,Yn,Js,Vs,Qn,An,Xn,Zs,es,ts,Lr,ns,er,rs,os,ss,is}from"./chunk-ke4nwx54.js";import"./chunk-yjw665b0.js";import"./chunk-jqhy4pzf.js";export{is as ConsoleClient,Xn as DeviceSignInFailed,Yn as OAuth,An as SignedOut,Qn as SsoRequired,es as authorize,Zn as clientID,Xo as defaultServer,ns as fetchConfig,er as fetchModels,rs as fetchSkill,os as fetchSkillBlob,Zs as headers,ss as normalizeServer,ts as refresh,Lr as revoke,Js as signedOutMessage,Vs as ssoMessage};
package/chunk-52p33kcn.js DELETED
@@ -1 +0,0 @@
1
- import{Zt,Kn,Gn,Jn,Hs,zo}from"./chunk-gtf5exm1.js";import"./chunk-ke4nwx54.js";import"./chunk-yjw665b0.js";import"./chunk-5x5fc0mq.js";import"./chunk-jqhy4pzf.js";export{zo as Library,Gn as fetchChanged,Zt as library,Kn as servers,Hs as skillMarkdown,Jn as write};
package/chunk-5x5fc0mq.js DELETED
@@ -1,2 +0,0 @@
1
- import{w,ii,ai,fe,Dt,As}from"./chunk-nva98fq1.js";var fs={};w(fs,{ConsoleStore:()=>fs,credentialFile:()=>tn,ensureDir:()=>ft,locked:()=>ze,make:()=>us,modified:()=>ps,read:()=>he,remove:()=>me,snapshotFile:()=>At,syncClaimFile:()=>ls,unreachable:()=>qr,write:()=>Re});import{randomUUID as te}from"node:crypto";import{chmodSync as re,mkdirSync as oe,readFileSync as ne,renameSync as ae,rmSync as q,statSync as ie,writeFileSync as se}from"node:fs";import E from"node:path";import S from"path";import K from"os";import{randomBytes as W,randomUUID as Y}from"crypto";import{mkdir as N,readFile as V,rm as g,stat as J,utimes as B,writeFile as A}from"fs/promises";import{createHash as C}from"crypto";var _;(function(e){function i(y){return C("sha1").update(y).digest("hex")}e.fast=i;function s(y){return C("sha256").update(y).digest("hex")}e.sha256=s})(_||(_={}));var Tn;(function(e){let i;function s(r){i=r}e.setGlobal=s;let y=()=>{if(!i)throw Error("Flock global not set");return S.join(i.state,"locks")},v={staleMs:60000,timeoutMs:300000,baseDelayMs:100,maxDelayMs:2000};function O(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 j(){return performance.now()}function I(){return performance.timeOrigin+j()}async function x(r){try{return await J(r)}catch(t){let n=O(t);if(n==="ENOENT"||n==="ENOTDIR")return;throw t}}async function k(r,t,n,c){let a=I(),f=await x(t);if(f)return a-f.mtimeMs>c;let o=await x(n);if(o)return a-o.mtimeMs>c;let l=await x(r);if(!l)return!1;return a-l.mtimeMs>c}async function G(r,t){let n=Y?.()??W(16).toString("hex"),c=S.join(r,"meta.json"),a=S.join(r,"heartbeat");try{await N(r,{mode:448})}catch(b){if(O(b)!=="EEXIST")throw b;if(!await k(r,a,c,t.staleMs))return{acquired:!1};let d=r+".breaker";try{await N(d,{mode:448})}catch(u){let M=O(u);if(M==="EEXIST"){let D=await x(d);if(D&&I()-D.mtimeMs>t.staleMs)await g(d,{recursive:!0,force:!0}).catch(()=>{return});return{acquired:!1}}if(M==="ENOENT"||M==="ENOTDIR")return{acquired:!1};throw u}try{if(!await k(r,a,c,t.staleMs))return{acquired:!1};await g(r,{recursive:!0,force:!0});try{await N(r,{mode:448})}catch(u){let M=O(u);if(M==="EEXIST"||M==="ENOTEMPTY")return{acquired:!1};throw u}}finally{await g(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 g(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 g(r,{recursive:!0,force:!0}),Error("Lock acquired but meta.json already existed (possible compromise).")});let o;return{acquired:!0,startHeartbeat:(b=Math.max(100,Math.floor(t.staleMs/3)))=>{if(o)return;o=setInterval(()=>{let d=new Date;B(a,d,d).catch(()=>{return})},b),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=O(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 g(r,{recursive:!0,force:!0})}}}async function X(r,t,n){let c=j()+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(j()>c)throw Error(`Timed out waiting for lock: ${t.key}`);a+=1;let p=F(o);await t.onWait?.({key:t.key,attempt:a,delay:p,waited:f}),await H(p,t.signal),f+=p,o=Math.min(n.maxDelayMs,Math.floor(o*1.7))}}async function T(r,t={}){t.signal?.throwIfAborted();let n={staleMs:t.staleMs??v.staleMs,timeoutMs:t.timeoutMs??v.timeoutMs,baseDelayMs:t.baseDelayMs??v.baseDelayMs,maxDelayMs:t.maxDelayMs??v.maxDelayMs},c=t.dir??y();await N(c,{recursive:!0});let a=S.join(c,_.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=ii(a,await T(r,n),1);n.signal?.throwIfAborted();return await t()}catch(f){var o=f,l=1}finally{var p=ai(a,o,l);p&&await p}}e.withLock=U})(Tn||(Tn={}));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),Q=process.env.XDG_CACHE_HOME||(h?m.join(h,".cache"):void 0),Z=process.env.XDG_CONFIG_HOME||(h?m.join(h,".config"):void 0),ee=process.env.XDG_STATE_HOME||(h?m.join(h,".local","state"):void 0);function Hr(e){return{data:m.join(z,e),cache:m.join(Q,e),config:m.join(Z,e),state:m.join(ee,e),tmp:m.join(P.tmpdir(),e)}}function us(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=Hr("opencode-console");return{data:s.data,cache:s.cache,env:i}}var tn=(e)=>E.join(e.data,"credential.json"),At=(e)=>E.join(e.cache,"config.json"),ls=(e)=>E.join(e.cache,"sync.claim"),ce=30000,R=35000;function ze(e,i){return As(fe({try:()=>(ft(e.data),ft(E.join(e.data,"locks")),Tn.acquire("credential",{dir:E.join(e.data,"locks"),staleMs:ce,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)=>fe(()=>s.release()).pipe(Dt))}function he(e){try{return ne(e,"utf8")}catch(i){if(L(i)==="ENOENT")return;throw i}}function ps(e){try{return ie(e,{throwIfNoEntry:!1})?.mtimeMs}catch(i){if(qr(i))return;throw i}}function Re(e,i){ft(E.dirname(e));let s=`${e}.${te()}.tmp`;se(s,i,{mode:384,flag:"wx"});try{ae(s,e)}catch(y){throw q(s,{force:!0}),y}}function me(e){q(e,{force:!0})}function qr(e){return["ENOENT","ENOTDIR","EACCES","EPERM"].includes(L(e)??"")}function ft(e){if(oe(e,{recursive:!0,mode:448}),process.platform!=="win32")re(e,448)}function L(e){return e instanceof Error&&"code"in e&&typeof e.code==="string"?e.code:void 0}
2
- export{Tn,Hr,us,tn,At,ls,ze,he,ps,Re,me,qr,ft,fs};
package/chunk-6tene1pb.js DELETED
@@ -1,2 +0,0 @@
1
- import{k,M,Pt,_n,r,fn,gn,$n,de,x,Ke,Cr,Et,ue,Ir,J,Le,C,Se,d,Oi,Wt,F,t,ne,E,n,y,yn,f,Ar,b,j,wt,zn,_i,Q,Ri,m,Us,lt,$e,ve,Hn,tt,Mi,Tr,kt,K,Ls,Ni,bn,yo,N,Sn}from"./chunk-nva98fq1.js";var Lo=Object.defineProperty,Ao=(o)=>o;function Uo(o,i){this[o]=Ao.bind(null,i)}var Ie=(o,i)=>{for(var p in i)Lo(o,p,{get:i[p],enumerable:!0,configurable:!0,set:Uo.bind(i,p)})};var u=K.check(Mi(0)),S=K.check(Tr(0)),An=t.pipe(Q("RelativePath"),ue({identifier:"RelativePath"})),w=t.pipe(Q("AbsolutePath"),ue({identifier:"AbsolutePath"})),e=(o)=>Le(o).pipe(m(C(Se(o)),{decode:de({strict:!1}),encode:Ke(Pt((i)=>i!==void 0))})),Fo=(o,i)=>Object.defineProperties(o,Object.getOwnPropertyDescriptors(i)),s=(o)=>(i)=>Fo(i,o(i)),Un=tt.pipe(m(bn,{decode:x((o)=>gn(o)),encode:x((o)=>$n(o))}));var Eo=26,_o="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",je=0,pe=0;function h(){return Ge(!1)}function Ve(){return Ge(!0)}function Ge(o,i=Date.now()){if(i!==je)je=i,pe=0;pe++;let p=BigInt(i)*0x1000n+BigInt(pe),g=o?~p:p,D=Array.from({length:6},(I,Ro)=>Number(g>>BigInt(40-8*Ro)&0xffn).toString(16).padStart(2,"0")).join(""),P=crypto.getRandomValues(new Uint8Array(Eo-12));return D+Array.from(P,(I)=>_o[I%62]).join("")}var Ye=t.pipe(Q("Project.ID"),ue({identifier:"Project.ID"}),s((o)=>({global:o.make("global")})));var ce=t.check(Hn("wrk")).pipe(Q("Workspace.ID"),ue({identifier:"Workspace.ID"}),s((o)=>{let i=()=>o.make("wrk_"+h());return{ascending:(p)=>{if(!p)return i();return o.make(p)},create:i}}));var Je=n({directory:w,workspaceID:e(ce)}).annotate({identifier:"Location.Ref"}),Yn=n(Et(Je.fields,["workspaceID"])).annotate({identifier:"Location.PublicRef"});class He extends N("Location.Info")({directory:w,workspaceID:e(ce),project:n({id:Ye,directory:w,canonical:w})}){}var Jn=n(Et(He.fields,["workspaceID"])).annotate({identifier:"Location.PublicInfo"});var Oo=t.check(Hn("evt_")).pipe(Q("Event.ID"),ue({identifier:"Event.ID"}),s((o)=>({create:()=>o.make("evt_"+h())}))),Wo=K.check(Tr(0)).pipe(Q("Event.Seq"),ue({identifier:"Event.Seq"})),No=K.check(Tr(1)).pipe(Q("Event.Version"),ue({identifier:"Event.Version"})),ir=n({aggregateID:t,seq:Wo,version:No});function c(o){let i=n(o.schema);return n({id:Oo,created:tt,metadata:e(y(t,F)),type:d(o.type),location:e(Je),data:i}).annotate({identifier:o.identifier??o.type}).pipe(s(()=>({type:o.type,durability:"ephemeral",durable:void 0,data:i})))}function l(...o){return Object.freeze(o)}var me=t.check(Hn("ses")).pipe(Q("SessionID"),ue({identifier:"Session.ID"}),s((o)=>({create:()=>o.make("ses_"+Ve())})));var et=t.check(Hn("per")).pipe(Q("Permission.ID"),ue({identifier:"Permission.ID"}),s((o)=>({create:(i)=>o.make(i??"per_"+h())}))),zo=b([n({type:d("tool"),messageID:t,id:t})]).annotate({identifier:"Permission.Source"}),jo={sessionID:me,action:t,resources:f(t),save:f(t).pipe(e),metadata:y(t,F).pipe(e),source:zo.pipe(e),message:t.pipe(e)},Vo=n({id:et,...jo}).annotate({identifier:"Permission.Request"}),$o=j(["once","always","reject"]).annotate({identifier:"Permission.Reply"}),Xe=c({type:"permission.asked",schema:Vo.fields}),Ze=c({type:"permission.replied",schema:{sessionID:me,requestID:et,reply:$o}}),ur={Asked:Xe,Replied:Ze,Definitions:l(Xe,Ze)},Ko=j(["allow","deny","ask"]).annotate({identifier:"Permission.Effect"}),Go=n({action:t,resource:t,effect:Ko}).annotate({identifier:"Permission.Rule"}),ot=f(Go).annotate({identifier:"Permission.Ruleset"});var Pe=t.pipe(Q("Integration.ID"),ue({identifier:"Integration.ID"})),_=t.pipe(Q("Integration.MethodID"),ue({identifier:"Integration.MethodID"}));var q=t.pipe(Q("Credential.ID"),ue({identifier:"Credential.ID"}),s((o)=>({create:()=>o.make("cred_"+h())}))),it=c({type:"credential.updated",schema:{}}),nt=c({type:"credential.switched",schema:{integrationID:Pe,credentialID:wt(q)}}),kr={Updated:it,Switched:nt,Definitions:l(it,nt)},Jo=n({type:d("oauth"),methodID:_,refresh:t,access:t,expires:S,metadata:e(y(t,F))}).annotate({identifier:"Credential.OAuth"}),Ho=n({type:d("key"),key:t,metadata:e(y(t,F))}).annotate({identifier:"Credential.Key"}),Qo=n({type:d("external"),methodID:_,metadata:e(y(t,F))}).annotate({identifier:"Credential.External"}),rt=b([Jo,Ho,Qo]).pipe($e("type")).annotate({identifier:"Credential.Value"}),Mr=n({id:q,integrationID:Pe,label:t,active:E,value:rt}).annotate({identifier:"Credential.Entry"}),Pr=n({id:e(q),integrationID:Pe,label:e(t),value:rt,activate:e(E)}).annotate({identifier:"Credential.CreateInput"});var st=n({status:j(["needs_auth"]),message:t,url:e(t)}).annotate({identifier:"Connection.Status"}),Xo=n({type:d("credential"),id:q,label:t,method:j(["key","oauth","external"]),status:e(st)}).annotate({identifier:"Connection.CredentialInfo"}),Zo=n({type:d("env"),name:t,status:e(st)}).annotate({identifier:"Connection.EnvInfo"}),pt=b([Xo,Zo]).pipe($e("type")).annotate({identifier:"Connection.Info"});var ei=t.check(Hn("frm_")).pipe(Q("Form.ID"),ue({identifier:"Form.ID"})),he=ei.pipe(s((o)=>({create:(i)=>o.make(i??"frm_"+h())}))),ti=y(t,F).annotate({identifier:"Form.Metadata"}),ft=n({value:t,label:t,description:t.pipe(e)}).annotate({identifier:"Form.Option"}),oi=n({key:t,op:j(["eq","neq"]),value:b([t,ne,E])}).annotate({identifier:"Form.When"}),B={key:t,title:t.pipe(e),description:t.pipe(e),required:E.pipe(e),hidden:E.pipe(e).annotate({description:"Skip the interactive authentication prompt and use the default unless an answer is supplied"}),when:f(oi).pipe(e)},ii=n({...B,type:d("string"),format:j(["email","uri","date","date-time"]).pipe(e),minLength:S.pipe(e),maxLength:S.pipe(e),pattern:t.pipe(e),placeholder:t.pipe(e),default:t.pipe(e),options:f(ft).pipe(e),custom:E.pipe(e)}).annotate({identifier:"Form.StringField"}),ni=n({...B,type:d("number"),minimum:ne.pipe(e),maximum:ne.pipe(e),default:ne.pipe(e)}).annotate({identifier:"Form.NumberField"}),ri=n({...B,type:d("integer"),minimum:ne.pipe(e),maximum:ne.pipe(e),default:ne.pipe(e)}).annotate({identifier:"Form.IntegerField"}),ai=n({...B,type:d("boolean"),default:E.pipe(e)}).annotate({identifier:"Form.BooleanField"}),si=n({...B,type:d("multiselect"),options:f(ft),minItems:S.pipe(e),maxItems:S.pipe(e),custom:E.pipe(e),default:f(t).pipe(e)}).annotate({identifier:"Form.MultiselectField"}),pi=n({key:t,type:d("external"),url:t,title:t.pipe(e),description:t.pipe(e)}).annotate({identifier:"Form.ExternalField"}),ci=b([ii,ni,ri,ai,si,pi]).pipe($e("type"),ue({identifier:"Form.Field"})),z=Ar(ci).annotate({identifier:"Form.Fields"}),li={id:he,sessionID:t,title:t,metadata:ti.pipe(e)},ut=n({...li,fields:z}).annotate({identifier:"Form.Info"}),di=b([t,ne,E,f(t)]).annotate({identifier:"Form.Value"}),xe=y(t,di).annotate({identifier:"Form.Answer"}),mi=b([n({status:d("pending")}),n({status:d("answered"),answer:xe}),n({status:d("cancelled"),message:t.pipe(e)})]).pipe($e("status")).annotate({identifier:"Form.State"}),Br=n({...ut.fields,state:mi}).annotate({identifier:"Form.Detail"}),Or=n({answer:xe}).annotate({identifier:"Form.Reply"}),ct=c({type:"form.created",schema:{form:ut}}),dt=c({type:"form.replied",schema:{id:he,sessionID:t,answer:xe}}),mt=c({type:"form.cancelled",schema:{id:he,sessionID:t}}),Wr={Created:ct,Replied:dt,Cancelled:mt,Definitions:l(ct,dt,mt)};var ye=Pe,be=_,fi=n({id:be,type:d("oauth"),label:t,form:e(z)}).annotate({identifier:"Integration.OAuthMethod"}),ui=n({id:be,type:d("command"),label:t,command:f(t)}).annotate({identifier:"Integration.CommandMethod"}),gi=n({type:d("key"),label:e(t),form:e(z)}).annotate({identifier:"Integration.KeyMethod"}),Si=n({id:be,type:d("external"),label:t,form:e(z)}).annotate({identifier:"Integration.ExternalMethod"}),hi=n({type:d("env"),names:f(t)}).annotate({identifier:"Integration.EnvMethod"}),xi=b([fi,ui,gi,Si,hi]).pipe($e("type")).annotate({identifier:"Integration.Method"}),St=c({type:"integration.updated",schema:{}}),Yr={Updated:St,Definitions:l(St)},Jr=n({id:ye,name:t,metadata:e(y(t,Wt))}).annotate({identifier:"Integration.Ref"}),Hr=n({id:ye,name:t,metadata:e(y(t,Wt)),methods:f(xi),connections:f(pt)}).annotate({identifier:"Integration.Info"}),ht=t.pipe(Q("Integration.AttemptID"),ue({identifier:"Integration.AttemptID"}),s((o)=>({create:()=>o.make("con_"+h())}))),v=n({created:ne,expires:ne});class yi extends N("Integration.Attempt")({attemptID:ht,url:t,instructions:t,mode:j(["auto","code"]),paste:Le(d(!0)),time:v}){}var Qr=b([n({status:d("pending"),time:v}),n({status:d("complete"),time:v}),n({status:d("failed"),message:t,time:v}),n({status:d("expired"),time:v})]).pipe($e("status")).annotate({identifier:"Integration.AttemptStatus"}),Xr=n({attemptID:ht,time:v}).annotate({identifier:"Integration.CommandAttempt"}),Zr=b([n({status:d("pending"),message:e(t),time:v}),n({status:d("complete"),time:v}),n({status:d("failed"),message:t,time:v}),n({status:d("expired"),time:v})]).pipe($e("status")).annotate({identifier:"Integration.CommandAttemptStatus"});var yt=b([j(["reasoning","reasoning_content","reasoning_text"]),t]).annotate({identifier:"Model.ReasoningField"}),bt=j(["max_completion_tokens","max_tokens"]).annotate({identifier:"Model.MaxTokensField"}),vt=j(["assets","state","root"]).annotate({identifier:"Model.MediaInput"}),Ii=j(["anthropic","alibaba"]).annotate({identifier:"Model.CacheFormat"}),O=n({reasoningField:yt.pipe(e),requireReasoning:E.pipe(e),maxTokensField:bt.pipe(e),requireFinishReason:E.pipe(e),requireAssistantAfterTool:E.pipe(e),supportsPromptCacheKey:E.pipe(e),streamUsage:E.pipe(e),cacheFormat:Ii.pipe(e),supportsThinkingBlockBinding:E.pipe(e),supportsEffortUpdates:E.pipe(e),mediaInput:vt.pipe(e)}).annotate({identifier:"Model.Compatibility"}),V=n(Et(O.fields,["supportsThinkingBlockBinding","supportsEffortUpdates"])).annotate({identifier:"Provider.Compatibility"});var R=t.pipe(Q("Provider.ID"),ue({identifier:"Provider.ID"}),s((o)=>({opencode:o.make("opencode"),anthropic:o.make("anthropic"),openai:o.make("openai"),google:o.make("google"),googleVertex:o.make("google-vertex"),githubCopilot:o.make("github-copilot"),claudeAgent:o.make("claude-agent"),amazonBedrock:o.make("amazon-bedrock"),azure:o.make("azure"),openrouter:o.make("openrouter"),mistral:o.make("mistral"),gitlab:o.make("gitlab")}))),Ct=c({type:"provider.updated",schema:{}}),pa={Updated:Ct,Definitions:l(Ct)},Dt=t,vi=j(["auto","enabled","disabled"]),Ci=b([n({type:d("summary")}),n({type:d("native")})]).pipe($e("type")).annotate({identifier:"Provider.Compaction"}),Di=j(["http","websocket"]).annotate({identifier:"Provider.Transport"}),ki=Oi([ne,j(["ms","s","m","h","d"])]).check(ve(/^\d+(ms|s|m|h|d)$/)).annotate({identifier:"Provider.CacheTTL"}),Pi=b([E,n({interval:b([d("auto"),t]).pipe(e).annotate({description:`Duration such as "4 minutes", or "auto" for 90% of the model's cache.ttl`}),duration:t.pipe(e).annotate({description:'Duration such as "30 minutes"'})})]).annotate({identifier:"Provider.CacheWarming"}),wi=n({ttl:ki.pipe(e),warming:Pi.pipe(e)}).annotate({identifier:"Provider.Cache"}),Li=j(["zstd","gzip","none"]).annotate({identifier:"Provider.Encoding"}),Ce=b([tt,d(!1)]).pipe(e),G=yn(n({timeout:Ce,headerTimeout:Ce,chunkTimeout:Ce,compaction:Ci.pipe(e),cache:wi.pipe(e),transport:Di.pipe(e),encoding:Li.pipe(e)}),[y(t,Wt)]).annotate({identifier:"Provider.Settings"}),Ai={settings:G.pipe(e),headers:y(t,t).pipe(e),body:y(t,Wt).pipe(e)},ca=n({settings:G.pipe(Us(r({}))),headers:y(t,t),body:y(t,Wt)}).annotate({identifier:"Provider.Request"}),la=n({id:R,canonical:R.pipe(e),integrationID:ye.pipe(e),name:t,activation:vi,package:Dt,compatibility:V.pipe(e),...Ai}).annotate({identifier:"Provider.Info"}).pipe(s(()=>({empty:(o)=>({id:o,name:o,activation:"auto",package:""})})));var fa=tt.pipe(Q("Money.USD"),ue({identifier:"Money.USD"}),s((o)=>({zero:o.make(0)}))),L=tt.pipe(Q("Money.USDPerMillionTokens"),ue({identifier:"Money.USDPerMillionTokens"}),s((o)=>({zero:o.make(0)})));var A=t.pipe(Q("Model.ID")),Mt=c({type:"model.updated",schema:{}}),Ia={Updated:Mt,Definitions:l(Mt)},U=t.pipe(Q("Model.VariantID")),Ui=n({id:A,providerID:R,variant:U.pipe(e)}).annotate({identifier:"Model.Ref"}).pipe(s((o)=>({parse:(i)=>{let p=i.indexOf("/");if(p<=0)throw Error(`Invalid model reference: ${i}`);let g=i.slice(0,p),D=i.indexOf("#",p+1),P=i.slice(p+1,D===-1?void 0:D),I=D===-1?void 0:i.slice(D+1);if(!P||g.includes("#")||I!==void 0&&(!I||I.includes("#")))throw Error(`Invalid model reference: ${i}`);return o.make({providerID:R.make(g),id:A.make(P),...I?{variant:U.make(I)}:{}})}})));var ke=t.pipe(Q("Model.Family")),Me=b([j(["chat","decision","image"]),t]).annotate({identifier:"Model.Type"}),H=yn(n(Cr(G.schema.fields,["compaction","cache","encoding"])),[y(t,Wt)]).annotate({identifier:"Model.Settings"}),Ti=yn(n(Et(H.schema.fields,["cache"])),H.records).annotate({identifier:"Model.VariantSettings"}),Rt={settings:H.pipe(e),headers:y(t,t).pipe(e),body:y(t,Wt).pipe(e)},X=n({tools:E,input:f(t),output:f(t),temperature:E.pipe(e)}).annotate({identifier:"Model.Capabilities"}).pipe(s(()=>({default:()=>({tools:!0,input:["text","image"],output:["text"]})}))),Fi=n({tier:n({type:lt("context"),size:K}).pipe(e),input:L,output:L,cache:n({read:L,write:L})}).annotate({identifier:"Model.Cost"}),Ei=n({id:U,...Rt,settings:Ti.pipe(e)}).annotate({identifier:"Model.Variant"}),ba=n({id:A,modelID:A,providerID:R,canonical:R.pipe(e),type:Me.pipe(e),family:ke.pipe(e),name:t,compatibility:O.pipe(e),package:Dt.pipe(e),...Rt,capabilities:X,variants:f(Ei),time:n({released:tt}),cost:f(Fi),status:j(["alpha","beta","deprecated","active"]),enabled:E,limit:n({context:K,input:K.pipe(e),output:K})}).annotate({identifier:"Model.Info"}).pipe(s(()=>({default:(o,i)=>({id:i,modelID:i,providerID:o,name:i,capabilities:X.default(),variants:[],time:{released:0},cost:[],status:"active",enabled:!0,limit:{context:200000,output:32000}})})));var Bi=R.check(ve(/^[^/#]+$/u)),Wi=A.check(ve(/^[^#]+$/u)),qi=U.check(ve(/^[^#]+$/u)),Lt=n({providerID:Bi,model:Wi,variant:qi.pipe(e)}),zi=t.check(ve(/^[^/#]+\/[^#]+(?:#[^#]+)?$/u)),Z=b([zi,Lt]).pipe(m(Lt,{decode:x((o)=>typeof o==="string"?ji(o):o),encode:de({strict:!1})})).annotate({identifier:"Config.ModelSelection"});function ji(o){let i=Ui.parse(o);return{providerID:i.providerID,model:i.id,...i.variant?{variant:i.variant}:{}}}var Vi=yn(n(G.schema.fields),[y(t,zn(Sn))]).annotate({identifier:"Config.Provider.Settings"}),Re=yn(n(H.schema.fields),[y(t,zn(Sn))]).annotate({identifier:"Config.Model.Settings"}),Ut=y(t,Sn),Ae={settings:Vi.pipe(e),headers:y(t,t).pipe(e),body:Ut.pipe(e)},At={settings:Re.pipe(e),headers:y(t,t).pipe(e),body:Ut.pipe(e)};class Tt extends N("Config.Provider.Request")({headers:Ae.headers,body:Ae.body}){}class Ft extends N("Config.Model.Cost.Cache")({read:L.pipe(e),write:L.pipe(e)}){}class Ue extends N("Config.Model.Cost")({tier:n({type:d("context"),size:K}).pipe(e),input:L,output:L,cache:Ft.pipe(e)}){}class _t extends N("Config.Model.Limit")({context:K.pipe(e),input:K.pipe(e),output:K.pipe(e)}){}var $i=b([n({supported:d(!1)}),n({supported:d(!0),toggle:E.pipe(e),effort:t.pipe(f,e),budget:n({min:K.pipe(e),max:K.pipe(e)}).pipe(e)})]).annotate({identifier:"Config.Model.Reasoning"});class Bt extends N("Config.Model")({modelID:A.pipe(e),type:Me.pipe(e),family:ke.pipe(e),name:t.pipe(e),releaseDate:t.check(ve(/^\d{4}-\d{2}(-\d{2})?$/u)).annotate({description:"Release date as YYYY-MM-DD or YYYY-MM"}).pipe(e),compatibility:O.pipe(e),package:t.pipe(e),...At,capabilities:X.mapFields((o)=>({tools:e(o.tools),input:e(o.input),output:e(o.output),temperature:o.temperature,reasoning:$i.pipe(e)})).annotate({identifier:"Config.Model.Capabilities"}).pipe(e),variants:n({id:U,...At,settings:yn(n(Et(Re.schema.fields,["cache"])),Re.records).annotate({identifier:"Config.Model.VariantSettings"}).pipe(e)}).pipe(f,e),cost:b([Ue,Ue.pipe(f)]).pipe(e),disabled:E.pipe(e),limit:_t.pipe(e)}){}class Te extends N("Config.Provider")({canonical:R.pipe(e),name:t.pipe(e),env:t.pipe(f,e),package:t.pipe(e),compatibility:V.pipe(e),...Ae,models:y(t,Bt).pipe(e)}){}var Ki=t.check(ve(/^#[0-9a-fA-F]{6}$/u));class Ot extends N("Config.Agent")({model:Z.pipe(e),request:Tt.pipe(e),system:t.pipe(e),description:t.pipe(e),mode:j(["subagent","primary","all"]).pipe(e),hidden:E.pipe(e),color:Ki.pipe(Ri(()=>fn),e),steps:u.pipe(e),disabled:E.pipe(e),permissions:ot.pipe(e)}){}class qt extends N("Config.Media.Image")({auto_resize:E.pipe(e),max_width:u.pipe(e),max_height:u.pipe(e),max_base64_bytes:u.pipe(e)}){}class zt extends N("Config.Media")({image:qt.pipe(e)}){}class Vt extends N("Config.Compaction.Keep")({tokens:S.pipe(e)}){}var Gi=t.check(ve(/^([1-9]\d?(\.\d+)?)%$/u)).annotate({identifier:"Config.Compaction.Percent"});class $t extends N("Config.Compaction")({auto:E.pipe(e),keep:Vt.pipe(e),buffer:b([Gi,S]).pipe(e).annotate({description:`Room kept free below the model's context window before automatic compaction, as a share of the window from "1%" to "99%", such as "20%" to compact at 80% full. A token count is also accepted.`})}){}class Gt extends N("Config.Command")({template:t,description:t.pipe(e),agent:t.pipe(e),model:Z.pipe(e),subagent:E.pipe(e),subtask:E.annotate({description:"Deprecated alias for subagent."}).pipe(e)}){}var Yi={todo:"Enable the experimental todowrite tool.",background_compaction:"Enable experimental background compaction: summarize the conversation in the background as it nears the compaction threshold, so automatic compaction does not wait for the summary. Background summaries that are never used still cost tokens.",media_blob:"Store new session media once in a deduplicated blob table instead of inline in every message row.",schedules:"Enable experimental scheduled tasks that wake a session with a prompt.",artifacts:"Enable experimental artifacts backed by pluggable providers."};var Qt=j(["allow","deny"]),Yo=j(["provider.use","tool.use","integration.connect","integration.use","mcp.use","skill.use","plugin.use","websearch.use"]),Ht=n({action:Yo,resource:t,effect:Qt}),Ji=new Map([["mcp","mcp.use"],["skill","skill.use"],["plugin","plugin.use"]]),Fe=Ht.pipe(m(Se(Ht),{decode:x((o)=>{if(o.action!=="integration.use")return o;let i=o.resource.indexOf(":"),p=i===-1?void 0:Ji.get(o.resource.slice(0,i));if(!p)return o;return{...o,action:p,resource:o.resource.slice(i+1)}}),encode:de()}));class Xt extends N("ConfigExperimental.Info")({portable_shell_scanner:E.pipe(e).annotate({description:"Deprecated: the built-in shell permission scanner is now always enabled."}),all_flags:E.pipe(e).annotate({description:"Turn every feature flag on regardless of the build channel, like OPENCODE_FLAGS=all; explicit per-flag settings still win, and false is not a kill switch."}),..._n(Yi,(o)=>E.pipe(e).annotate({description:`${o} Defaults to on in local and dev builds and off in releases.`})),part_rows:E.pipe(e).annotate({description:"Write each assistant part as its own session_part row instead of rewriting the whole message on every event. Defaults to false."}),image_generate:b([E,n({model:Z.pipe(e).annotate({description:"Default model for the experimental_image_generate tool when the agent doesn't choose one, as providerID/modelID. Falls back to automatic selection when it isn't available."})})]).pipe(e).annotate({description:"Settings for the experimental_image_generate tool, which is offered while a connected provider has an image model."}),subagent_depth:S.pipe(e).annotate({description:"Maximum subagent nesting depth. Defaults to 1."}),location_idle_timeout:b([yo,d(!1)]).pipe(e).annotate({description:'How long a location can go without session activity before its services are unloaded. Running sessions and background jobs keep a location loaded. Set to false to never unload (default: "60 minutes")'}),policies:Fe.pipe(f,e).annotate({description:"Deprecated: use top-level policies. Ordered policies controlling access to configured resources"})}){}class eo extends N("Config.Formatter.Entry")({disabled:E.pipe(e),command:t.pipe(f,e),environment:y(t,t).pipe(e),extensions:t.pipe(f,e)}){}var Hi=b([E,y(t,eo)]);var Qi=n({disabled:d(!0)});class oo extends N("Config.LSP.Server")({command:t.pipe(f),extensions:t.pipe(f,e),disabled:E.pipe(e),env:y(t,t).pipe(e),initialization:y(t,F).pipe(e)}){}var Xi=b([Qi,oo]),Zi=b([E,y(t,Xi)]);class oe extends N("Mcp.TimeoutConfig")({startup:u.pipe(e).annotate({description:"Maximum time in milliseconds to establish and initialize the MCP server."}),catalog:u.pipe(e).annotate({description:"Maximum time in milliseconds to wait for MCP discovery requests such as tools/list and prompts/list."}),execution:u.pipe(e).annotate({description:"Maximum time in milliseconds to wait for MCP tool and prompt execution."})}){}var Ee=j(["legacy","auto","2026-07-28"]).annotate({identifier:"Mcp.Protocol",description:'MCP protocol negotiation. "legacy" (default) opens with the initialize handshake and speaks protocol revisions up to 2025-11-25. "auto" probes for the 2026-07-28 revision and falls back to legacy when the server does not support it. "2026-07-28" requires that revision and fails otherwise.'});class _e extends N("Mcp.LocalConfig")({type:d("local"),command:t.pipe(f),cwd:t.pipe(e).annotate({description:"Working directory for the MCP server process. Relative paths resolve from the workspace directory."}),environment:y(t,t).pipe(e),disabled:E.pipe(e),codemode:E.pipe(e).annotate({description:"Expose this server's tools through Code Mode. Defaults to true."}),timeout:oe.pipe(e),protocol:Ee.pipe(e),pool:E.pipe(e).annotate({description:'Share one connection to this server across every directory that configures it identically, instead of one per directory. Only connections that negotiate the 2026-07-28 revision are shared; an unset "protocol" becomes "auto", and "legacy" never shares. Defaults to false.'})}){}class Be extends N("Mcp.OAuthConfig")({client_id:t.pipe(e),client_secret:t.pipe(e),scope:t.pipe(e),callback_port:K.check(kt({minimum:1,maximum:65535})).pipe(e),redirect_uri:t.pipe(e),auth_server_metadata_url:t.pipe(e).annotate({description:"URL of the OAuth or OpenID Connect authorization server metadata document. Set when the MCP server does not publish protected resource metadata that names its authorization server."})}){}class Oe extends N("Mcp.RemoteConfig")({type:d("remote"),url:t,headers:y(t,t).pipe(e),oauth:b([Be,d(!1)]).pipe(e),disabled:E.pipe(e),codemode:E.pipe(e).annotate({description:"Expose this server's tools through Code Mode. Defaults to true."}),timeout:oe.pipe(e),protocol:Ee.pipe(e),pool:E.pipe(e).annotate({description:'Share one connection to this server across every directory that configures it identically, instead of one per directory. Only connections that negotiate the 2026-07-28 revision are shared; an unset "protocol" becomes "auto", and "legacy" never shares. Defaults to false.'})}){}var en=b([_e,Oe]).pipe($e("type")),tn=n({status:d("connected")}).annotate({identifier:"Mcp.Status.Connected"}),on=n({status:d("pending")}).annotate({identifier:"Mcp.Status.Pending"}),nn=n({status:d("disabled")}).annotate({identifier:"Mcp.Status.Disabled"}),rn=n({status:d("failed"),error:t}).annotate({identifier:"Mcp.Status.Failed"}),an=n({status:d("needs_auth"),error:t}).annotate({identifier:"Mcp.Status.NeedsAuth"}),sn=b([tn,on,nn,rn,an]).pipe($e("status")),ns=n({name:t,status:sn,title:e(t),integrationID:e(Pe)}).annotate({identifier:"Mcp.Server"}),pn=n({server:t,name:t,uri:t,description:e(t),mimeType:e(t)}).annotate({identifier:"Mcp.Resource"}),cn=n({server:t,name:t,uriTemplate:t,description:e(t),mimeType:e(t)}).annotate({identifier:"Mcp.ResourceTemplate"}),rs=n({resources:f(pn),templates:f(cn)}).annotate({identifier:"Mcp.ResourceCatalog"}),ln=b([n({type:d("text"),uri:t,text:t,mimeType:e(t)}),n({type:d("blob"),uri:t,blob:t,mimeType:e(t)})]).pipe($e("type"),ue({identifier:"Mcp.ResourceContentPart"})),as=n({server:t,uri:t,contents:f(ln)}).annotate({identifier:"Mcp.ResourceContent"});var dn=oe,ls=_e,ds=Be,ms=Oe,mn=en,fs=Ee;class We extends N("Config.MCP")({timeout:dn.pipe(e),servers:y(t,mn).pipe(e)}){}class ro extends N("Config.Plugin.Entry")({package:t,options:y(t,F).pipe(e)}){}var un=b([t,ro]),hn=un.pipe(f);class so extends N("Config.Reference.Git")({repository:t,branch:t.pipe(e),description:t.pipe(e),hidden:E.pipe(e)}){}class po extends N("Config.Reference.Local")({path:t,description:t.pipe(e),hidden:E.pipe(e)}){}var xn=b([t,so,po]),In=y(t,xn);var ie=t.pipe(Q("WebSearch.ID"),ue({identifier:"WebSearch.ID"})),bs=n({id:ie,name:t}).annotate({identifier:"WebSearch.Provider"}),vs=n({query:t,providerID:ie.pipe(e)}).annotate({identifier:"WebSearch.Input"}),vn=n({url:t,title:t.pipe(e),content:t.pipe(e),time:n({published:tt.pipe(e).annotate({description:"Publication time in milliseconds since the Unix epoch"})})}).annotate({identifier:"WebSearch.Result"});class Dn extends N("WebSearch.Response")({providerID:ie,results:f(vn)}){}var lo=c({type:"websearch.updated",schema:{}}),Cs={Updated:lo,Definitions:l(lo)};class fo extends N("ConfigWebSearch.Info")({provider:b([d("random").annotate({description:"Reuse a randomly selected provider until it is rate limited, then switch to another available provider."}),ie])}){}var kn=b([d(!1),fo]);class go extends N("Config.ToolOutput")({max_lines:u.pipe(e),max_bytes:u.pipe(e)}){}class ho extends N("Config.Watcher")({ignore:t.pipe(f,e)}){}class Io extends N("Config.Warming")({prompt:t.pipe(e).annotate({description:"Prompt sent for keep-alive requests"}),interval:b([d("auto"),yo]).pipe(e).annotate({description:`Idle time between keep-alive requests (default: "4 minutes"). "auto" uses 90% of the model's cache.ttl and skips models without one.`}),duration:yo.pipe(e).annotate({description:'Time after the last active request to keep a session warm (default: "30 minutes")'})}){}var Mn=b([E,Io]);var Pn=n({directory:Ni.pipe(_i(Ls())).annotate({description:"Parent directory for new worktrees, relative to the project's primary checkout when not absolute"})}).annotate({identifier:"Config.Worktree"});class T extends N("Config.Info")({$schema:e(t).annotate({description:"JSON schema reference for configuration validation"}),shell:t.pipe(e).annotate({description:"Default shell to use for terminal and shell tool execution"}),model:Z.pipe(e).annotate({description:"Default model to use when no session or agent model is selected"}),default_agent:t.pipe(e).annotate({description:"Default primary agent to use when no session agent is selected"}),update:j(["disable","notify","auto"]).pipe(e).annotate({description:"Disable updates, notify when one is available, or install updates automatically"}),share:j(["manual","auto","disabled"]).pipe(e).annotate({description:"Control whether sessions may be shared manually, automatically, or not at all"}),enterprise:n({url:t.pipe(e)}).pipe(e).annotate({description:"Enterprise sharing service configuration"}),username:t.pipe(e).annotate({description:"Username displayed in conversations and used for telemetry identity"}),timezone:t.pipe(e).annotate({description:"IANA time zone for schedules, e.g. America/Los_Angeles. Defaults to the server's local zone"}),permissions:ot.pipe(e).annotate({description:"Ordered tool permission rules applied to agent tool use"}),policies:Fe.pipe(f,e).annotate({description:"Ordered policies controlling access to providers, tools, and integrations"}),agents:y(t,Ot).pipe(e).annotate({description:"Named built-in agent overrides and custom agent definitions"}),snapshots:E.pipe(e).annotate({description:"Enable snapshots used for undo and revert behavior"}),watcher:ho.pipe(e).annotate({description:"Filesystem watcher configuration"}),formatter:Hi.pipe(e).annotate({description:"Enable built-in formatters or configure formatter overrides"}),lsp:Zi.pipe(e).annotate({description:"Enable built-in language servers or configure server overrides"}),media:zt.pipe(e).annotate({description:"Media processing configuration"}),tool_output:go.pipe(e).annotate({description:"Tool output truncation thresholds"}),mcp:We.pipe(e).annotate({description:"MCP server configuration"}),compaction:$t.pipe(e).annotate({description:"Conversation compaction behavior"}),skills:t.pipe(f,e).annotate({description:"Additional paths or URLs to discover skills from"}),commands:y(t,Gt).pipe(e).annotate({description:"Named slash command definitions"}),instructions:t.pipe(f,e).annotate({description:"Additional paths or URLs supplying ambient instructions"}),references:In.pipe(e).annotate({description:"Named local directories or Git repositories available as external context"}),websearch:kn.pipe(e).annotate({description:"Web search provider selection"}),plugins:hn.pipe(e).annotate({description:"Ordered plugin enablement directives and external package declarations"}),worktree:Pn.pipe(e).annotate({description:"Directory defaults for local worktree creation"}),warming:Mn.pipe(e).annotate({description:"Keep recently active sessions warm with transient model requests (default: false)"}),providers:y(t,Te).pipe(e),experimental:Xt.pipe(e)}){}var ip=n({shell:wt(t)}).annotate({identifier:"Config.Patch"});class re extends N("Config.Document")({type:d("document"),path:w.pipe(e),info:T}){}class Do extends N("Config.Directory")({type:d("directory"),path:w}){}var np=b([re,Do]).annotate({identifier:"Config.Entry"}),Co=c({type:"config.updated",schema:{}}),rp={Updated:Co,Definitions:l(Co)};var It={};Ie(It,{ConfigIntegration:()=>It,Document:()=>Cn,Policies:()=>ze,Remote:()=>Mo,WellKnownDocument:()=>ae,make:()=>wo,suppliers:()=>Po});var ze=f(F).pipe(m(F,{decode:x((o)=>o.filter((i)=>{let p=J(n({action:t}))(i);if(M(p)&&!Ir(Yo)(p.value.action))return!1;let g=J(n({effect:t}))(i);return k(g)||Ir(Qt)(g.value.effect)})),encode:de({strict:!1})}),m(f(Fe))),Mo=n({providers:T.fields.providers,mcp:T.fields.mcp,policies:ze.pipe(C),websearch:T.fields.websearch});class Cn extends re.extend("Config.IntegrationDocument")({integrationID:Pe,connection:pt,organization:C(t)}){}class ae extends re.extend("Config.WellKnownDocument")({integrationID:Pe}){}function Po(o){return new Map(o.filter((i)=>i instanceof ae).flatMap((i)=>Object.keys(i.info.providers??{}).map((p)=>[p,i.integrationID])))}function wo(o){let i=o.info.mcp?.servers;return new Cn({type:"document",integrationID:o.integrationID,connection:o.connection,organization:o.organization,info:new T({providers:o.info.providers&&Object.fromEntries(Object.entries(o.info.providers).map(([p,g])=>[p,new Te({...g,env:void 0,settings:qe(g.settings),models:g.models&&Object.fromEntries(Object.entries(g.models).map(([D,P])=>[D,{...P,settings:qe(P.settings),variants:P.variants?.map((I)=>({...I,settings:qe(I.settings)}))}]))})])),mcp:i&&new We({servers:Object.fromEntries(Object.entries(i).filter(([,p])=>p.type==="remote"))}),policies:o.info.policies,websearch:o.info.websearch})})}function qe(o){return o&&Object.fromEntries(Object.entries(o).filter(([i])=>!["apiKey","authToken","accessToken"].includes(i)))}
2
- export{Ie,Pe,Yo,It,Cn};
package/chunk-9pcmbxq5.js DELETED
@@ -1 +0,0 @@
1
- import"./chunk-jqhy4pzf.js";import{ft}from"./chunk-5x5fc0mq.js";import{w,D,J,t,n,se}from"./chunk-nva98fq1.js";var u={};w(u,{CliInstall:()=>u,directory:()=>m,install:()=>I,packageName:()=>b,uninstall:()=>k});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)=>{ft(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 k(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=J(se(n({name:t})))(C(r,"utf8"));return D(s)?.name===b}function x(e,r){ft(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,k as uninstall};
package/chunk-a85j5cz4.js DELETED
@@ -1 +0,0 @@
1
- import{us,tn,At,ls,ze,he,ps,Re,me,qr,ft,fs}from"./chunk-5x5fc0mq.js";import"./chunk-jqhy4pzf.js";export{fs as ConsoleStore,tn as credentialFile,ft as ensureDir,ze as locked,us as make,ps as modified,he as read,me as remove,At as snapshotFile,ls as syncClaimFile,qr as unreachable,Re as write};
package/chunk-bgqw45qt.js DELETED
@@ -1,2 +0,0 @@
1
- var st="0.1.0";
2
- export{st};
package/chunk-dsk7ztf6.js DELETED
@@ -1,2 +0,0 @@
1
- import{It}from"./chunk-6tene1pb.js";import{At,he,Re,me}from"./chunk-5x5fc0mq.js";import{In}from"./chunk-1mfjsp5r.js";import{w,Me,D,J,C,F,t,ne,n,y,se}from"./chunk-nva98fq1.js";var Zo={};w(Zo,{Info:()=>Ks,MAX_AGE_MS:()=>Ws,WorkspaceSnapshot:()=>Zo,clear:()=>Jo,models:()=>Gi,policies:()=>Gs,read:()=>Ko,stale:()=>Vn,workspace:()=>Vo,write:()=>Go});var Ws=60000,Ks=n({owner:t,organization:C(t),fetched:ne,config:C(y(t,F)),status:C(n({message:t,url:C(t)}))}),c=J(se(Ks)),f=n({policies:C(F)}),s=y(t,n({models:C(y(t,F))}));function Ko(o){return D(c(he(At(o))??""))}function Go(o,e){Re(At(o),JSON.stringify(e))}function Jo(o){me(At(o))}function Vn(o,e){return e-o.fetched>=Ws}function Gs(o){if(!o)return;let e=o.config;if(!e)return o.status?void 0:[];let r=e.policies??D(J(f)(e.experimental))?.policies;if(r===void 0)return[];return D(J(It.Policies)(r))}function Vo(o,e){if(!o)return{policies:[]};return{organization:e?.organization??In(o),policies:Gs(e),status:e?.status}}function Gi(o){let e=o?.config?.providers;if(e===void 0)return 0;return Object.values(Me(J(s)(e),()=>({}))).reduce((r,i)=>r+Object.keys(i.models??{}).length,0)}
2
- export{Ws,Ks,Ko,Go,Jo,Vn,Gs,Vo,Gi,Zo};